summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG-v10.md3112
-rw-r--r--CHANGELOG-v10.rst2952
-rw-r--r--CHANGELOG-v9.md7019
-rw-r--r--CHANGELOG-v9.rst6659
-rw-r--r--MANIFEST.in6
-rw-r--r--PKG-INFO4
-rw-r--r--ansible.egg-info/PKG-INFO4
-rw-r--r--ansible.egg-info/SOURCES.txt5142
-rw-r--r--ansible.egg-info/requires.txt2
-rw-r--r--ansible_collections/amazon/aws/CHANGELOG.rst161
-rw-r--r--ansible_collections/amazon/aws/CI.md2
-rw-r--r--ansible_collections/amazon/aws/FILES.json358
-rw-r--r--ansible_collections/amazon/aws/MANIFEST.json6
-rw-r--r--ansible_collections/amazon/aws/README.md10
-rw-r--r--ansible_collections/amazon/aws/changelogs/changelog.yaml224
-rw-r--r--ansible_collections/amazon/aws/docs/docsite/links.yml2
-rw-r--r--ansible_collections/amazon/aws/docs/docsite/rst/CHANGELOG.rst161
-rw-r--r--ansible_collections/amazon/aws/meta/runtime.yml15
-rw-r--r--ansible_collections/amazon/aws/plugins/inventory/aws_ec2.py12
-rw-r--r--ansible_collections/amazon/aws/plugins/lookup/aws_collection_constants.py2
-rw-r--r--ansible_collections/amazon/aws/plugins/lookup/aws_service_ip_ranges.py17
-rw-r--r--ansible_collections/amazon/aws/plugins/lookup/secretsmanager_secret.py6
-rw-r--r--ansible_collections/amazon/aws/plugins/module_utils/acm.py2
-rw-r--r--ansible_collections/amazon/aws/plugins/module_utils/botocore.py20
-rw-r--r--ansible_collections/amazon/aws/plugins/module_utils/common.py2
-rw-r--r--ansible_collections/amazon/aws/plugins/module_utils/ec2.py18
-rw-r--r--ansible_collections/amazon/aws/plugins/module_utils/elbv2.py108
-rw-r--r--ansible_collections/amazon/aws/plugins/module_utils/iam.py10
-rw-r--r--ansible_collections/amazon/aws/plugins/module_utils/modules.py10
-rw-r--r--ansible_collections/amazon/aws/plugins/module_utils/policy.py57
-rw-r--r--ansible_collections/amazon/aws/plugins/module_utils/rds.py41
-rw-r--r--ansible_collections/amazon/aws/plugins/module_utils/s3.py4
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/autoscaling_group.py29
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/cloudformation.py40
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/cloudtrail.py13
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/ec2_ami.py43
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/ec2_ami_info.py12
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/ec2_eip_info.py61
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/ec2_eni.py27
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/ec2_eni_info.py2
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/ec2_instance.py260
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/ec2_instance_info.py116
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/ec2_metadata_facts.py2
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/ec2_security_group.py163
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/ec2_security_group_info.py8
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/ec2_vol.py18
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/ec2_vpc_route_table.py3
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/elb_application_lb.py27
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/elb_classic_lb.py16
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/iam_policy.py2
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/iam_role.py40
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/iam_role_info.py23
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/kms_key.py79
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/kms_key_info.py50
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/lambda_event.py249
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/lambda_info.py2
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/rds_cluster.py10
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/rds_cluster_param_group.py275
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/rds_cluster_param_group_info.py157
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/rds_engine_versions_info.py388
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/rds_instance.py12
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/rds_instance_param_group.py (renamed from ansible_collections/amazon/aws/plugins/modules/rds_param_group.py)15
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/route53_health_check.py12
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/s3_bucket.py798
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/s3_object.py162
-rw-r--r--ansible_collections/amazon/aws/plugins/modules/s3_object_info.py6
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/aws_region_info/tasks/main.yml10
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/backup_selection/tasks/main.yml4
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/cloudtrail/tasks/main.yml42
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/ec2_instance_iam_instance_role/tasks/main.yml14
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/ec2_vol/tasks/main.yml1
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/elb_application_lb/defaults/main.yml13
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/elb_application_lb/meta/main.yml4
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/elb_application_lb/tasks/alb_with_multiple_listener_certs.yml127
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/elb_application_lb/tasks/main.yml4
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/iam_group/tasks/main.yml4
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/iam_instance_profile/tasks/main.yml4
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/iam_managed_policy/defaults/main.yml3
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/iam_managed_policy/files/deny-assume.json10
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/iam_managed_policy/tasks/main.yml61
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/iam_password_policy/tasks/main.yaml14
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/iam_policy/tasks/main.yml8
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/iam_role/defaults/main.yml5
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/boundary_policy.yml14
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/complex_role_creation.yml12
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/creation_deletion.yml86
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/description_update.yml20
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/inline_policy_update.yml2
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/main.yml10
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/max_session_update.yml10
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/parameter_checks.yml14
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/policy_update.yml30
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/role_removal.yml12
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/tags_update.yml40
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/iam_user/tasks/main.yml2
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/inventory_aws_ec2/playbooks/test_inventory_ssm.yml4
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/kms_key/roles/kms_key/tasks/test_grants.yml4
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/kms_key/roles/kms_key/tasks/test_modify.yml4
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/lambda/tasks/main.yml4
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/lambda_alias/tasks/main.yml4
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/lambda_event/tasks/main.yml3
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/lambda_event/tasks/setup.yml2
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/lambda_event/tasks/teardown.yml2
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/lambda_policy/tasks/main.yml6
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/rds_cluster_param_group/aliases3
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/rds_cluster_param_group/defaults/main.yaml7
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/rds_cluster_param_group/tasks/main.yaml328
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/rds_instance_complex/defaults/main.yml2
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/rds_instance_complex/tasks/main.yml12
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/rds_instance_modify/defaults/main.yml2
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/rds_instance_modify/tasks/main.yml189
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/rds_instance_snapshot/defaults/main.yml2
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/rds_option_group/defaults/main.yml2
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/rds_param_group/tasks/main.yml56
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/s3_bucket_info/tasks/main.yml2
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/s3_object/library/test_s3_upload_multipart.py137
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/s3_object/tasks/copy_multipart_upload.yml185
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/s3_object/tasks/copy_object.yml51
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/s3_object/tasks/main.yml7
-rw-r--r--ansible_collections/amazon/aws/tests/integration/targets/sts_assume_role/tasks/main.yml8
-rw-r--r--ansible_collections/amazon/aws/tests/sanity/ignore-2.18.txt1
-rw-r--r--ansible_collections/amazon/aws/tests/unit/module_utils/botocore/test_is_boto3_error_code.py68
-rw-r--r--ansible_collections/amazon/aws/tests/unit/module_utils/iam/test_iam_resource_transforms.py6
-rw-r--r--ansible_collections/amazon/aws/tests/unit/module_utils/modules/ansible_aws_module/test_passthrough.py12
-rw-r--r--ansible_collections/amazon/aws/tests/unit/module_utils/policy/test_sort_json_policy_dict.py61
-rw-r--r--ansible_collections/amazon/aws/tests/unit/module_utils/test_elbv2.py137
-rw-r--r--ansible_collections/amazon/aws/tests/unit/plugins/modules/test_lambda_event.py544
-rw-r--r--ansible_collections/amazon/aws/tox.ini12
-rw-r--r--ansible_collections/ansible/netcommon/.ansible-lint1
-rw-r--r--ansible_collections/ansible/netcommon/.flake858
-rw-r--r--ansible_collections/ansible/netcommon/.github/workflows/check_label.yml (renamed from ansible_collections/arista/eos/.github/workflows/ack.yml)10
-rw-r--r--ansible_collections/ansible/netcommon/.github/workflows/codecoverage.yml1
-rw-r--r--ansible_collections/ansible/netcommon/.github/workflows/draft_release.yml18
-rw-r--r--ansible_collections/ansible/netcommon/.github/workflows/lint.yml12
-rw-r--r--ansible_collections/ansible/netcommon/.github/workflows/push.yml27
-rw-r--r--ansible_collections/ansible/netcommon/.github/workflows/release.yml4
-rw-r--r--ansible_collections/ansible/netcommon/.github/workflows/tests.yml21
-rw-r--r--ansible_collections/ansible/netcommon/.github/workflows/token_refresh.yml2
-rw-r--r--ansible_collections/ansible/netcommon/.pre-commit-config.yaml13
-rw-r--r--ansible_collections/ansible/netcommon/CHANGELOG.rst49
-rw-r--r--ansible_collections/ansible/netcommon/FILES.json1764
-rw-r--r--ansible_collections/ansible/netcommon/MANIFEST.json6
-rw-r--r--ansible_collections/ansible/netcommon/README.md12
-rw-r--r--ansible_collections/ansible/netcommon/bindep.txt4
-rw-r--r--ansible_collections/ansible/netcommon/changelogs/changelog.yaml47
-rw-r--r--ansible_collections/ansible/netcommon/docs/ansible.netcommon.cli_command_module.rst24
-rw-r--r--ansible_collections/ansible/netcommon/docs/ansible.netcommon.cli_config_module.rst4
-rw-r--r--ansible_collections/ansible/netcommon/docs/ansible.netcommon.cli_restore_module.rst128
-rw-r--r--ansible_collections/ansible/netcommon/docs/ansible.netcommon.grpc_config_module.rst63
-rw-r--r--ansible_collections/ansible/netcommon/docs/ansible.netcommon.grpc_get_module.rst16
-rw-r--r--ansible_collections/ansible/netcommon/docs/ansible.netcommon.netconf_config_module.rst86
-rw-r--r--ansible_collections/ansible/netcommon/docs/ansible.netcommon.netconf_get_module.rst28
-rw-r--r--ansible_collections/ansible/netcommon/docs/ansible.netcommon.parse_cli_textfsm_filter.rst4
-rw-r--r--ansible_collections/ansible/netcommon/docs/ansible.netcommon.pop_ace_filter.rst11
-rw-r--r--ansible_collections/ansible/netcommon/docs/ansible.netcommon.telnet_module.rst18
-rw-r--r--ansible_collections/ansible/netcommon/meta/runtime.yml2
-rw-r--r--ansible_collections/ansible/netcommon/plugins/connection/libssh.py2
-rw-r--r--ansible_collections/ansible/netcommon/plugins/connection/network_cli.py4
-rw-r--r--ansible_collections/ansible/netcommon/plugins/filter/parse_cli_textfsm.py4
-rw-r--r--ansible_collections/ansible/netcommon/plugins/filter/pop_ace.py12
-rw-r--r--ansible_collections/ansible/netcommon/plugins/module_utils/network/common/rm_base/resource_module.py4
-rw-r--r--ansible_collections/ansible/netcommon/plugins/module_utils/network/common/utils.py3
-rw-r--r--ansible_collections/ansible/netcommon/plugins/modules/cli_command.py24
-rw-r--r--ansible_collections/ansible/netcommon/plugins/modules/cli_config.py4
-rw-r--r--ansible_collections/ansible/netcommon/plugins/modules/cli_restore.py128
-rw-r--r--ansible_collections/ansible/netcommon/plugins/modules/grpc_config.py65
-rw-r--r--ansible_collections/ansible/netcommon/plugins/modules/grpc_get.py18
-rw-r--r--ansible_collections/ansible/netcommon/plugins/modules/netconf_config.py339
-rw-r--r--ansible_collections/ansible/netcommon/plugins/modules/netconf_get.py150
-rw-r--r--ansible_collections/ansible/netcommon/plugins/modules/telnet.py68
-rw-r--r--ansible_collections/ansible/netcommon/plugins/plugin_utils/cliconf_base.py7
-rw-r--r--ansible_collections/ansible/netcommon/plugins/plugin_utils/compat/telnetlib.py228
-rw-r--r--ansible_collections/ansible/netcommon/plugins/plugin_utils/pop_ace.py63
-rw-r--r--ansible_collections/ansible/netcommon/plugins/sub_plugins/cli_parser/content_templates_parser.py1
-rw-r--r--ansible_collections/ansible/netcommon/test-requirements.txt14
-rw-r--r--ansible_collections/ansible/netcommon/tests/config.yml3
-rw-r--r--ansible_collections/ansible/netcommon/tests/sanity/ignore-2.13.txt5
-rw-r--r--ansible_collections/ansible/netcommon/tests/sanity/ignore-2.18.txt (renamed from ansible_collections/ansible/netcommon/tests/sanity/ignore-2.12.txt)0
-rw-r--r--ansible_collections/ansible/netcommon/tests/sanity/ignore-2.9.txt7
-rw-r--r--ansible_collections/ansible/netcommon/tests/unit/mock/procenv.py4
-rw-r--r--ansible_collections/ansible/netcommon/tests/unit/module_utils/network/common/test_parsing.py4
-rw-r--r--ansible_collections/ansible/netcommon/tests/unit/modules/utils.py4
-rw-r--r--ansible_collections/ansible/netcommon/tests/unit/plugins/cli_parsers/test_pyats_parser.py5
-rw-r--r--ansible_collections/ansible/netcommon/tests/unit/plugins/filter/comp_type5.py4
-rw-r--r--ansible_collections/ansible/netcommon/tests/unit/plugins/filter/test_hash_salt.py4
-rw-r--r--ansible_collections/ansible/netcommon/tests/unit/plugins/filter/test_network.py28
-rw-r--r--ansible_collections/ansible/netcommon/tests/unit/plugins/filter/test_pop_ace.py4
-rw-r--r--ansible_collections/ansible/netcommon/tests/unit/plugins/filter/test_type5_pw.py4
-rw-r--r--ansible_collections/ansible/netcommon/tests/unit/plugins/filter/test_vlan_extender.py4
-rw-r--r--ansible_collections/ansible/netcommon/tests/unit/plugins/filter/test_vlan_parser.py4
-rw-r--r--ansible_collections/ansible/netcommon/tox-ansible.ini9
-rw-r--r--ansible_collections/ansible/netcommon/tox.ini23
-rw-r--r--ansible_collections/ansible/utils/.ansible-lint5
-rw-r--r--ansible_collections/ansible/utils/.darglint7
-rw-r--r--ansible_collections/ansible/utils/.flake813
-rw-r--r--ansible_collections/ansible/utils/.github/workflows/check_label.yml (renamed from ansible_collections/ansible/utils/.github/workflows/ack.yml)10
-rw-r--r--ansible_collections/ansible/utils/.github/workflows/codecoverage.yml2
-rw-r--r--ansible_collections/ansible/utils/.github/workflows/draft_release.yml18
-rw-r--r--ansible_collections/ansible/utils/.github/workflows/push.yml28
-rw-r--r--ansible_collections/ansible/utils/.github/workflows/release.yml4
-rw-r--r--ansible_collections/ansible/utils/.github/workflows/tests.yml25
-rw-r--r--ansible_collections/ansible/utils/.github/workflows/token_refresh.yml4
-rw-r--r--ansible_collections/ansible/utils/.pre-commit-config.yaml11
-rw-r--r--ansible_collections/ansible/utils/CHANGELOG.rst55
-rw-r--r--ansible_collections/ansible/utils/FILES.json2467
-rw-r--r--ansible_collections/ansible/utils/MANIFEST.json4
-rw-r--r--ansible_collections/ansible/utils/README.md2
-rw-r--r--ansible_collections/ansible/utils/changelogs/changelog.yaml154
-rw-r--r--ansible_collections/ansible/utils/changelogs/config.yaml1
-rw-r--r--ansible_collections/ansible/utils/docs/ansible.utils.fact_diff_filter.rst21
-rw-r--r--ansible_collections/ansible/utils/docs/ansible.utils.ipv6form_filter.rst5
-rw-r--r--ansible_collections/ansible/utils/docs/ansible.utils.validate_lookup.rst6
-rw-r--r--ansible_collections/ansible/utils/docs/ansible.utils.validate_module.rst8
-rw-r--r--ansible_collections/ansible/utils/meta/runtime.yml2
-rw-r--r--ansible_collections/ansible/utils/mypy.ini30
-rw-r--r--ansible_collections/ansible/utils/plugins/action/cli_parse.py2
-rw-r--r--ansible_collections/ansible/utils/plugins/action/fact_diff.py2
-rw-r--r--ansible_collections/ansible/utils/plugins/action/update_fact.py2
-rw-r--r--ansible_collections/ansible/utils/plugins/action/validate.py1
-rw-r--r--ansible_collections/ansible/utils/plugins/filter/fact_diff.py7
-rw-r--r--ansible_collections/ansible/utils/plugins/filter/ipv6form.py2
-rw-r--r--ansible_collections/ansible/utils/plugins/lookup/get_path.py3
-rw-r--r--ansible_collections/ansible/utils/plugins/lookup/index_of.py3
-rw-r--r--ansible_collections/ansible/utils/plugins/lookup/to_paths.py3
-rw-r--r--ansible_collections/ansible/utils/plugins/lookup/validate.py9
-rw-r--r--ansible_collections/ansible/utils/plugins/modules/validate.py8
-rw-r--r--ansible_collections/ansible/utils/plugins/plugin_utils/base/ipaddr_utils.py38
-rw-r--r--ansible_collections/ansible/utils/plugins/plugin_utils/fact_diff.py140
-rw-r--r--ansible_collections/ansible/utils/requirements.txt2
-rw-r--r--ansible_collections/ansible/utils/test-requirements.txt10
-rw-r--r--ansible_collections/ansible/utils/tests/config.yml3
-rw-r--r--ansible_collections/ansible/utils/tests/integration/targets/utils_fact_diff/tasks/filter.yaml45
-rw-r--r--ansible_collections/ansible/utils/tests/integration/targets/utils_ipaddr_filter/tasks/ipaddr.yaml26
-rw-r--r--ansible_collections/ansible/utils/tests/integration/targets/utils_ipaddr_filter/vars/main.yaml9
-rw-r--r--ansible_collections/ansible/utils/tests/unit/compat/mock.py127
-rw-r--r--ansible_collections/ansible/utils/tests/unit/compat/unittest.py41
-rw-r--r--ansible_collections/ansible/utils/tests/unit/mock/path.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/mock/procenv.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/module_utils/test_argspec_validate.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/module_utils/test_dict_merge.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/module_utils/test_get_path.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/module_utils/test_sort_list.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/module_utils/test_to_paths.py5
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/action/test_cli_parse.py7
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/action/test_fact_diff.py5
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/action/test_update_fact.py5
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/action/test_validate.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/filter/test_cidr_merge.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/filter/test_consolidate.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/filter/test_fact_diff.py14
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/filter/test_from_xml.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/filter/test_hwaddr.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ip4_hex.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipaddr.py48
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipcut.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipmath.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipsubnet.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipv4.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipv6.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipv6form.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipwrap.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/filter/test_keep_keys.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/filter/test_macaddr.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/filter/test_network_in_network.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/filter/test_network_in_usable.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/filter/test_next_nth_usable.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/filter/test_nthhost.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/filter/test_param_list_compare.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/filter/test_previous_nth_usable.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/filter/test_reduce_on_network.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/filter/test_remove_keys.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/filter/test_replace_keys.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/filter/test_slaac.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/filter/test_to_xml.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/filter/test_usable_range.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/filter/test_validate.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/lookup/test_validate.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/plugin_utils/test_index_of.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/sub_plugins/cli_parsers/test_json_parser.py5
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/sub_plugins/cli_parsers/test_textfsm_parser.py5
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/sub_plugins/cli_parsers/test_ttp_parser.py5
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/sub_plugins/cli_parsers/test_xml_parser.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/test/test_in_any_network.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/test/test_in_network.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/test/test_in_one_network.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/test/test_ip.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/test/test_ip_address.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv4.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv4_address.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv4_hostmask.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv4_netmask.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv6.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv6_address.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv6_ipv4_mapped.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv6_sixtofour.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv6_teredo.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/test/test_loopback.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/test/test_mac.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/test/test_multicast.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/test/test_private.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/test/test_public.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/test/test_reserved.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/test/test_resolvable.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/test/test_subnet_of.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/test/test_supernet_of.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/test/test_unspecified.py4
-rw-r--r--ansible_collections/ansible/utils/tests/unit/plugins/test/test_validate.py4
-rw-r--r--ansible_collections/ansible/utils/tox-ansible.ini9
-rw-r--r--ansible_collections/ansible/utils/tox.ini22
-rw-r--r--ansible_collections/ansible_community.py2
-rw-r--r--ansible_collections/ansible_release.py2
-rw-r--r--ansible_collections/arista/eos/.ansible-lint3
-rw-r--r--ansible_collections/arista/eos/.flake867
-rw-r--r--ansible_collections/arista/eos/.github/CODEOWNERS (renamed from ansible_collections/ansible/utils/tests/unit/compat/__init__.py)0
-rw-r--r--ansible_collections/arista/eos/.github/workflows/check_label.yml (renamed from ansible_collections/cisco/ios/.github/workflows/ack.yml)10
-rw-r--r--ansible_collections/arista/eos/.github/workflows/codecoverage.yml3
-rw-r--r--ansible_collections/arista/eos/.github/workflows/draft_release.yml18
-rw-r--r--ansible_collections/arista/eos/.github/workflows/release.yml4
-rw-r--r--ansible_collections/arista/eos/.github/workflows/tests.yml23
-rw-r--r--ansible_collections/arista/eos/.pre-commit-config.yaml13
-rw-r--r--ansible_collections/arista/eos/CHANGELOG.rst62
-rw-r--r--ansible_collections/arista/eos/FILES.json5998
-rw-r--r--ansible_collections/arista/eos/MANIFEST.json6
-rw-r--r--ansible_collections/arista/eos/README.md6
-rw-r--r--ansible_collections/arista/eos/changelogs/changelog.yaml66
-rw-r--r--ansible_collections/arista/eos/docs/arista.eos.eos_bgp_module.rst986
-rw-r--r--ansible_collections/arista/eos/docs/arista.eos.eos_lag_interfaces_module.rst28
-rw-r--r--ansible_collections/arista/eos/docs/arista.eos.eos_logging_module.rst388
-rw-r--r--ansible_collections/arista/eos/docs/arista.eos.eos_ospfv3_module.rst250
-rw-r--r--ansible_collections/arista/eos/docs/arista.eos.eos_system_module.rst2
-rw-r--r--ansible_collections/arista/eos/ignore-2.9.txt136
-rw-r--r--ansible_collections/arista/eos/meta/runtime.yml20
-rw-r--r--ansible_collections/arista/eos/plugins/cliconf/eos.py6
-rw-r--r--ansible_collections/arista/eos/plugins/module_utils/network/eos/argspec/ospfv3/ospfv3.py20
-rw-r--r--ansible_collections/arista/eos/plugins/module_utils/network/eos/config/ospfv3/ospfv3.py62
-rw-r--r--ansible_collections/arista/eos/plugins/module_utils/network/eos/facts/static_routes/static_routes.py2
-rw-r--r--ansible_collections/arista/eos/plugins/module_utils/network/eos/facts/vlans/vlans.py2
-rw-r--r--ansible_collections/arista/eos/plugins/module_utils/network/eos/rm_templates/snmp_server.py6
-rw-r--r--ansible_collections/arista/eos/plugins/modules/eos_bgp.py468
-rw-r--r--ansible_collections/arista/eos/plugins/modules/eos_lag_interfaces.py28
-rw-r--r--ansible_collections/arista/eos/plugins/modules/eos_logging.py505
-rw-r--r--ansible_collections/arista/eos/plugins/modules/eos_ospfv3.py38
-rw-r--r--ansible_collections/arista/eos/plugins/modules/eos_system.py4
-rw-r--r--ansible_collections/arista/eos/plugins/modules/eos_vrf.py23
-rw-r--r--ansible_collections/arista/eos/test-requirements.txt15
-rw-r--r--ansible_collections/arista/eos/tests/config.yml2
-rw-r--r--ansible_collections/arista/eos/tests/integration/targets/eos_bgp/defaults/main.yaml3
-rw-r--r--ansible_collections/arista/eos/tests/integration/targets/eos_bgp/meta/main.yaml3
-rw-r--r--ansible_collections/arista/eos/tests/integration/targets/eos_bgp/tasks/cli.yaml19
-rw-r--r--ansible_collections/arista/eos/tests/integration/targets/eos_bgp/tasks/main.yaml5
-rw-r--r--ansible_collections/arista/eos/tests/integration/targets/eos_bgp/tests/cli/basic.yaml399
-rw-r--r--ansible_collections/arista/eos/tests/integration/targets/eos_config/tests/cli/config.yaml6
-rw-r--r--ansible_collections/arista/eos/tests/integration/targets/eos_config/tests/cli/toplevel.yaml6
-rw-r--r--ansible_collections/arista/eos/tests/integration/targets/eos_config/tests/cli/toplevel_after.yaml6
-rw-r--r--ansible_collections/arista/eos/tests/integration/targets/eos_config/tests/cli/toplevel_before.yaml6
-rw-r--r--ansible_collections/arista/eos/tests/integration/targets/eos_facts/tests/cli/network_facts15
-rw-r--r--ansible_collections/arista/eos/tests/integration/targets/eos_logging/defaults/main.yaml2
-rw-r--r--ansible_collections/arista/eos/tests/integration/targets/eos_logging/meta/main.yaml3
-rw-r--r--ansible_collections/arista/eos/tests/integration/targets/eos_logging/tasks/cli.yaml19
-rw-r--r--ansible_collections/arista/eos/tests/integration/targets/eos_logging/tasks/eapi.yaml19
-rw-r--r--ansible_collections/arista/eos/tests/integration/targets/eos_logging/tasks/main.yaml10
-rw-r--r--ansible_collections/arista/eos/tests/integration/targets/eos_logging/tests/cli/basic.yaml154
-rw-r--r--ansible_collections/arista/eos/tests/integration/targets/eos_logging/tests/eapi/basic.yaml96
-rw-r--r--ansible_collections/arista/eos/tests/integration/targets/eos_ospfv3/tests/common/merged.yaml13
-rw-r--r--ansible_collections/arista/eos/tests/integration/targets/eos_user/tests/cli/auth.yaml1
-rw-r--r--ansible_collections/arista/eos/tests/sanity/ignore-2.18.txt1
-rw-r--r--ansible_collections/arista/eos/tests/unit/compat/mock.py129
-rw-r--r--ansible_collections/arista/eos/tests/unit/compat/unittest.py41
-rw-r--r--ansible_collections/arista/eos/tests/unit/mock/path.py4
-rw-r--r--ansible_collections/arista/eos/tests/unit/mock/procenv.py5
-rw-r--r--ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_acl_interfaces.py3
-rw-r--r--ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_acls.py3
-rw-r--r--ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_banner.py3
-rw-r--r--ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_bgp.py400
-rw-r--r--ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_bgp_address_family.py3
-rw-r--r--ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_bgp_global.py3
-rw-r--r--ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_command.py3
-rw-r--r--ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_config.py3
-rw-r--r--ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_eapi.py3
-rw-r--r--ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_hostname.py3
-rw-r--r--ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_interfaces.py3
-rw-r--r--ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_l2_interfaces.py3
-rw-r--r--ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_l3_interfaces.py3
-rw-r--r--ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_lacp.py3
-rw-r--r--ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_lacp_interfaces.py3
-rw-r--r--ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_lag_interfaces.py3
-rw-r--r--ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_lldp_global.py3
-rw-r--r--ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_logging.py112
-rw-r--r--ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_logging_global.py3
-rw-r--r--ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_ntp_global.py3
-rw-r--r--ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_ospf_interfaces.py3
-rw-r--r--ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_ospfv2.py3
-rw-r--r--ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_ospfv3.py3
-rw-r--r--ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_prefix_lists.py3
-rw-r--r--ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_route_maps.py3
-rw-r--r--ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_snmp_server.py7
-rw-r--r--ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_static_routes.py3
-rw-r--r--ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_system.py3
-rw-r--r--ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_user.py3
-rw-r--r--ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_vlans.py3
-rw-r--r--ansible_collections/arista/eos/tests/unit/modules/utils.py8
-rw-r--r--ansible_collections/arista/eos/tox-ansible.ini10
-rw-r--r--ansible_collections/arista/eos/tox.ini32
-rw-r--r--ansible_collections/awx/awx/FILES.json1011
-rw-r--r--ansible_collections/awx/awx/MANIFEST.json4
-rw-r--r--ansible_collections/awx/awx/meta/runtime.yml3
-rw-r--r--ansible_collections/awx/awx/plugins/module_utils/controller_api.py19
-rw-r--r--ansible_collections/awx/awx/plugins/modules/application.py8
-rw-r--r--ansible_collections/awx/awx/plugins/modules/role_definition.py114
-rw-r--r--ansible_collections/awx/awx/plugins/modules/role_team_assignment.py123
-rw-r--r--ansible_collections/awx/awx/plugins/modules/role_user_assignment.py124
-rw-r--r--ansible_collections/awx/awx/plugins/modules/workflow_launch.py22
-rw-r--r--ansible_collections/awx/awx/test/awx/conftest.py17
-rw-r--r--ansible_collections/awx/awx/test/awx/test_notification_template.py2
-rw-r--r--ansible_collections/awx/awx/test/awx/test_role.py4
-rw-r--r--ansible_collections/awx/awx/test/awx/test_role_definition.py122
-rw-r--r--ansible_collections/awx/awx/test/awx/test_role_team_assignment.py70
-rw-r--r--ansible_collections/awx/awx/test/awx/test_role_user_assignment.py70
-rw-r--r--ansible_collections/awx/awx/test/awx/test_workflow_job_template.py33
-rw-r--r--ansible_collections/awx/awx/tests/integration/targets/ad_hoc_command_cancel/tasks/main.yml40
-rw-r--r--ansible_collections/awx/awx/tests/integration/targets/application/tasks/main.yml1
-rw-r--r--ansible_collections/awx/awx/tests/integration/targets/instance/tasks/main.yml22
-rw-r--r--ansible_collections/awx/awx/tests/integration/targets/lookup_api_plugin/tasks/main.yml68
-rw-r--r--ansible_collections/awx/awx/tests/integration/targets/role_definition/tasks/main.yml30
-rw-r--r--ansible_collections/awx/awx/tests/integration/targets/role_team_assignment/tasks/main.yml62
-rw-r--r--ansible_collections/awx/awx/tests/integration/targets/role_user_assignment/tasks/main.yml63
-rw-r--r--ansible_collections/awx/awx/tests/integration/targets/schedule_rrule/tasks/main.yml20
-rw-r--r--ansible_collections/awx/awx/tests/integration/targets/settings/tasks/main.yml40
-rw-r--r--ansible_collections/azure/azcollection/.gitignore1
-rw-r--r--ansible_collections/azure/azcollection/.idea/.gitignore8
-rw-r--r--ansible_collections/azure/azcollection/.idea/misc.xml7
-rw-r--r--ansible_collections/azure/azcollection/.idea/workspace.xml138
-rw-r--r--ansible_collections/azure/azcollection/CHANGELOG.md207
-rw-r--r--ansible_collections/azure/azcollection/FILES.json4960
-rw-r--r--ansible_collections/azure/azcollection/MANIFEST.json4
-rw-r--r--ansible_collections/azure/azcollection/README.md2
-rw-r--r--ansible_collections/azure/azcollection/meta/runtime.yml2
-rw-r--r--ansible_collections/azure/azcollection/plugins/doc_fragments/azure.py16
-rw-r--r--ansible_collections/azure/azcollection/plugins/doc_fragments/azure_rm.py13
-rw-r--r--ansible_collections/azure/azcollection/plugins/inventory/azure_rm.py99
-rw-r--r--ansible_collections/azure/azcollection/plugins/lookup/azure_keyvault_secret.py42
-rw-r--r--ansible_collections/azure/azcollection/plugins/lookup/azure_service_principal_attribute.py (renamed from ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvault/lookup_plugins/azure_service_principal_attribute.py)47
-rw-r--r--ansible_collections/azure/azcollection/plugins/module_utils/azure_rm_common.py266
-rw-r--r--ansible_collections/azure/azcollection/plugins/module_utils/azure_rm_common_rest.py2
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_accesstoken_info.py126
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_account_info.py50
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_adapplication.py307
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_adapplication_info.py136
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_adgroup.py211
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_adgroup_info.py141
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_adpassword.py159
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_adpassword_info.py56
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_adserviceprincipal.py71
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_adserviceprincipal_info.py99
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_aduser.py188
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_aduser_info.py91
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_aks.py177
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_aks_info.py35
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_akscredentials_info.py209
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_aksversion_info.py24
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_apimanagement.py195
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_apimanagement_info.py3
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_apimanagementservice.py78
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_apimanagementservice_info.py3
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_appgateway.py84
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_azurefirewall.py227
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_azurefirewall_info.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_backupazurevm.py33
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_backupazurevm_info.py9
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_batchaccount.py15
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_batchaccount_info.py4
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_cdnendpoint.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_cdnendpoint_info.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_cdnprofile.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_cdnprofile_info.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_cosmosdbaccount.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_cosmosdbaccount_info.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_datalakestore.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_datalakestore_info.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_deployment.py8
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlab.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlab_info.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabarmtemplate_info.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabartifact_info.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabartifactsource.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabartifactsource_info.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabcustomimage.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabcustomimage_info.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabenvironment.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabenvironment_info.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabpolicy.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabpolicy_info.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabschedule.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabschedule_info.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabvirtualmachine.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabvirtualmachine_info.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabvirtualnetwork.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabvirtualnetwork_info.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_dnsrecordset.py6
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_gallery.py89
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_gallery_info.py3
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_galleryimage.py178
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_galleryimage_info.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_galleryimageversion.py371
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_galleryimageversion_info.py3
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_hdinsightcluster.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_hdinsightcluster_info.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_iotdevice.py6
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_iotdevicemodule.py12
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_keyvault.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_keyvault_info.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_keyvaultkey.py5
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_keyvaultkey_info.py21
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_keyvaultsecret.py71
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_keyvaultsecret_info.py21
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_lock_info.py2
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_manageddisk.py3
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_managementgroup.py76
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_mysqldatabase.py4
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_mysqldatabase_info.py4
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_networkinterface.py2
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_networkinterface_info.py128
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_openshiftmanagedcluster.py126
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_openshiftmanagedcluster_info.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_openshiftmanagedclusterkubeconfig_info.py227
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibleconfiguration_info.py210
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibledatabase.py288
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibledatabase_info.py239
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexiblefirewallrule.py294
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexiblefirewallrule_info.py187
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibleserver.py928
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibleserver_info.py443
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_privatednsrecordset.py6
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_publicipprefix.py455
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_publicipprefix_info.py296
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_recoveryservicesvault.py9
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_recoveryservicesvault_info.py44
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_rediscache.py3
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_rediscache_info.py3
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_rediscachefirewallrule.py3
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_registrationassignment.py11
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_registrationassignment_info.py5
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_registrationdefinition.py30
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_registrationdefinition_info.py5
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_resource.py12
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_resource_info.py25
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_roledefinition.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_roledefinition_info.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_securitygroup.py8
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_servicebus_info.py22
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_snapshot.py55
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_sqlmanagedinstance.py2
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_sqlmanagedinstance_info.py6
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_sshpublickey.py266
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_sshpublickey_info.py196
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_storageaccount.py64
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_storageaccount_info.py14
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_storageblob.py20
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_subnet.py4
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_virtualmachine.py255
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_virtualmachine_info.py18
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_virtualmachinescaleset.py17
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_virtualmachinescalesetinstance.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_virtualmachinescalesetinstance_info.py1
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_virtualwan.py61
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_vmbackuppolicy.py9
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_vmbackuppolicy_info.py9
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_vpnsite.py107
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_webapp.py43
-rw-r--r--ansible_collections/azure/azcollection/plugins/modules/azure_rm_webapp_info.py7
-rw-r--r--ansible_collections/azure/azcollection/pr-pipelines.yml8
-rw-r--r--ansible_collections/azure/azcollection/requirements-azure.txt7
-rw-r--r--ansible_collections/azure/azcollection/sanity-requirements-azure.txt2
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_accesstoken_info/aliases (renamed from ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_account/aliases)2
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_accesstoken_info/meta/main.yml (renamed from ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_account/meta/main.yml)0
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_accesstoken_info/tasks/main.yml13
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_adapplication/tasks/main.yml18
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_adgroup/tasks/main.yml40
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_adpassword/tasks/main.yml14
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_adserviceprincipal/tasks/main.yml8
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_aduser/tasks/main.yml25
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_aksagentpool/tasks/main.yml36
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_apimanagement/tasks/main.yml2
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_autoscale/tasks/main.yml1
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_bastionhost/tasks/main.yml19
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_cdnprofile/tasks/main.yml3
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_datalakestore/aliases1
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_datalakestore/tasks/main.yml4
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_diskencryptionset/lookup_plugins/azure_service_principal_attribute.py92
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_diskencryptionset/tasks/main.yml2
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_gallery/tasks/main.yml116
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvault/tasks/main.yml2
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvaultkey/lookup_plugins/azure_service_principal_attribute.py92
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvaultkey/tasks/main.yml2
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvaultsecret/lookup_plugins/azure_service_principal_attribute.py92
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvaultsecret/tasks/main.yml2
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_openshiftmanagedcluster/tasks/main.yml44
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_postgresqlflexibleserver/aliases (renamed from ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_snapshot/aliases)2
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_postgresqlflexibleserver/meta/main.yml (renamed from ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_snapshot/meta/main.yml)0
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_postgresqlflexibleserver/tasks/main.yml356
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_privateendpointdnszonegroup/tasks/main.yml8
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_publicipprefix/aliases (renamed from ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_volume/aliases)2
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_publicipprefix/meta/main.yml (renamed from ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_volume/meta/main.yml)0
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_publicipprefix/tasks/main.yml102
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_registrationassignment/tasks/main.yml2
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_registrationdefinition/tasks/main.yml2
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_roleassignment/tasks/main.yml2
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_securitygroup/tasks/main.yml11
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_sshpublickey/aliases3
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_sshpublickey/meta/main.yml2
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_sshpublickey/tasks/main.yml70
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_storageaccount/tasks/main.yml4
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_storageblob/tasks/main.yml2
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_trafficmanagerprofile/tasks/main.yml10
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/inventory.yml5
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_deallocate.yml4
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_dual_nic.yml4
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_encrypted.yml107
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_ephemeral_os.yml4
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_public_ip.yml4
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/setup_des.yml94
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachinescaleset/tasks/main.yml21
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_webapp/tasks/main.yml134
-rw-r--r--ansible_collections/azure/azcollection/tests/integration/targets/inventory_azure/playbooks/test_inventory.yml4
-rw-r--r--ansible_collections/azure/azcollection/tests/sanity/ignore-2.13.txt18
-rw-r--r--ansible_collections/azure/azcollection/tests/sanity/ignore-2.14.txt18
-rw-r--r--ansible_collections/azure/azcollection/tests/sanity/ignore-2.15.txt18
-rwxr-xr-xansible_collections/azure/azcollection/tests/utils/ado/ado.sh2
-rwxr-xr-xansible_collections/azure/azcollection/tests/utils/shippable/check_matrix.py4
-rwxr-xr-xansible_collections/azure/azcollection/tests/utils/shippable/timing.py2
-rw-r--r--ansible_collections/cisco/asa/.ansible-lint5
-rw-r--r--ansible_collections/cisco/asa/.github/workflows/lint.yml1
-rw-r--r--ansible_collections/cisco/asa/.github/workflows/tests.yml7
-rw-r--r--ansible_collections/cisco/asa/.pre-commit-config.yaml6
-rw-r--r--ansible_collections/cisco/asa/CHANGELOG.rst21
-rw-r--r--ansible_collections/cisco/asa/FILES.json1319
-rw-r--r--ansible_collections/cisco/asa/MANIFEST.json6
-rw-r--r--ansible_collections/cisco/asa/README.md5
-rw-r--r--ansible_collections/cisco/asa/changelogs/changelog.yaml19
-rw-r--r--ansible_collections/cisco/asa/docs/cisco.asa.asa_config_module.rst9
-rw-r--r--ansible_collections/cisco/asa/meta/runtime.yml23
-rw-r--r--ansible_collections/cisco/asa/plugins/action/acls.py (renamed from ansible_collections/cisco/ios/plugins/action/ntp.py)5
-rw-r--r--ansible_collections/cisco/asa/plugins/action/command.py55
-rw-r--r--ansible_collections/cisco/asa/plugins/action/config.py55
-rw-r--r--ansible_collections/cisco/asa/plugins/action/facts.py55
-rw-r--r--ansible_collections/cisco/asa/plugins/action/ogs.py55
-rw-r--r--ansible_collections/cisco/asa/plugins/modules/asa_config.py11
-rw-r--r--ansible_collections/cisco/asa/test-requirements.txt6
-rw-r--r--ansible_collections/cisco/asa/tests/config.yml3
-rw-r--r--ansible_collections/cisco/intersight/CHANGELOG.md3
-rw-r--r--ansible_collections/cisco/intersight/FILES.json11
-rw-r--r--ansible_collections/cisco/intersight/MANIFEST.json4
-rw-r--r--ansible_collections/cisco/intersight/playbooks/count_vms.yml26
-rw-r--r--ansible_collections/cisco/intersight/plugins/module_utils/intersight.py1
-rw-r--r--ansible_collections/cisco/ios/.ansible-lint6
-rw-r--r--ansible_collections/cisco/ios/.flake817
-rw-r--r--ansible_collections/cisco/ios/.github/workflows/check_label.yml11
-rw-r--r--ansible_collections/cisco/ios/.github/workflows/codecoverage.yml3
-rw-r--r--ansible_collections/cisco/ios/.github/workflows/draft_release.yml18
-rw-r--r--ansible_collections/cisco/ios/.github/workflows/push.yml38
-rw-r--r--ansible_collections/cisco/ios/.github/workflows/release.yml4
-rw-r--r--ansible_collections/cisco/ios/.github/workflows/tests.yml22
-rw-r--r--ansible_collections/cisco/ios/.pre-commit-config.yaml11
-rw-r--r--ansible_collections/cisco/ios/CHANGELOG.rst191
-rw-r--r--ansible_collections/cisco/ios/FILES.json6250
-rw-r--r--ansible_collections/cisco/ios/MANIFEST.json6
-rw-r--r--ansible_collections/cisco/ios/README.md6
-rw-r--r--ansible_collections/cisco/ios/changelogs/changelog.yaml229
-rw-r--r--ansible_collections/cisco/ios/changelogs/config.yaml1
-rw-r--r--ansible_collections/cisco/ios/docs/cisco.ios.ios_acls_module.rst343
-rw-r--r--ansible_collections/cisco/ios/docs/cisco.ios.ios_bgp_address_family_module.rst2
-rw-r--r--ansible_collections/cisco/ios/docs/cisco.ios.ios_bgp_global_module.rst119
-rw-r--r--ansible_collections/cisco/ios/docs/cisco.ios.ios_bgp_module.rst1142
-rw-r--r--ansible_collections/cisco/ios/docs/cisco.ios.ios_evpn_evi_module.rst2
-rw-r--r--ansible_collections/cisco/ios/docs/cisco.ios.ios_evpn_global_module.rst2
-rw-r--r--ansible_collections/cisco/ios/docs/cisco.ios.ios_l3_interfaces_module.rst160
-rw-r--r--ansible_collections/cisco/ios/docs/cisco.ios.ios_ntp_module.rst291
-rw-r--r--ansible_collections/cisco/ios/docs/cisco.ios.ios_user_module.rst282
-rw-r--r--ansible_collections/cisco/ios/docs/cisco.ios.ios_vlans_module.rst243
-rw-r--r--ansible_collections/cisco/ios/docs/cisco.ios.ios_vrf_module.rst332
-rw-r--r--ansible_collections/cisco/ios/docs/cisco.ios.ios_vxlan_vtep_module.rst2
-rw-r--r--ansible_collections/cisco/ios/meta/runtime.yml143
-rw-r--r--ansible_collections/cisco/ios/platform_guide.rst94
-rw-r--r--ansible_collections/cisco/ios/plugins/cliconf/ios.py7
-rw-r--r--ansible_collections/cisco/ios/plugins/module_utils/network/ios/argspec/bgp_global/bgp_global.py14
-rw-r--r--ansible_collections/cisco/ios/plugins/module_utils/network/ios/argspec/l3_interfaces/l3_interfaces.py11
-rw-r--r--ansible_collections/cisco/ios/plugins/module_utils/network/ios/argspec/vlans/vlans.py7
-rw-r--r--ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/acls/acls.py157
-rw-r--r--ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/bgp_global/bgp_global.py59
-rw-r--r--ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/l3_interfaces/l3_interfaces.py28
-rw-r--r--ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/route_maps/route_maps.py10
-rw-r--r--ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/snmp_server/snmp_server.py45
-rw-r--r--ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/vlans/vlans.py548
-rw-r--r--ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/acls/acls.py55
-rw-r--r--ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/bgp_global/bgp_global.py14
-rw-r--r--ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/facts.py13
-rw-r--r--ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/l3_interfaces/l3_interfaces.py12
-rw-r--r--ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/vlans/vlans.py268
-rw-r--r--ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/base.py82
-rw-r--r--ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/address_family.py147
-rw-r--r--ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/neighbors.py203
-rw-r--r--ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/process.py163
-rw-r--r--ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/module.py66
-rw-r--r--ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/acls.py32
-rw-r--r--ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/bgp_address_family.py210
-rw-r--r--ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/bgp_global.py57
-rw-r--r--ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/interfaces.py2
-rw-r--r--ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/l3_interfaces.py56
-rw-r--r--ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/ospfv2.py6
-rw-r--r--ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/prefix_lists.py2
-rw-r--r--ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/route_maps.py43
-rw-r--r--ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/snmp_server.py11
-rw-r--r--ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/vlans.py131
-rw-r--r--ansible_collections/cisco/ios/plugins/module_utils/network/ios/utils/utils.py24
-rw-r--r--ansible_collections/cisco/ios/plugins/modules/ios_acls.py346
-rw-r--r--ansible_collections/cisco/ios/plugins/modules/ios_bgp.py504
-rw-r--r--ansible_collections/cisco/ios/plugins/modules/ios_bgp_address_family.py2
-rw-r--r--ansible_collections/cisco/ios/plugins/modules/ios_bgp_global.py54
-rw-r--r--ansible_collections/cisco/ios/plugins/modules/ios_evpn_evi.py2
-rw-r--r--ansible_collections/cisco/ios/plugins/modules/ios_evpn_global.py2
-rw-r--r--ansible_collections/cisco/ios/plugins/modules/ios_l3_interfaces.py47
-rw-r--r--ansible_collections/cisco/ios/plugins/modules/ios_linkagg.py12
-rw-r--r--ansible_collections/cisco/ios/plugins/modules/ios_ntp.py357
-rw-r--r--ansible_collections/cisco/ios/plugins/modules/ios_user.py342
-rw-r--r--ansible_collections/cisco/ios/plugins/modules/ios_vlans.py230
-rw-r--r--ansible_collections/cisco/ios/plugins/modules/ios_vrf.py109
-rw-r--r--ansible_collections/cisco/ios/plugins/modules/ios_vxlan_vtep.py2
-rw-r--r--ansible_collections/cisco/ios/plugins/terminal/ios.py1
-rw-r--r--ansible_collections/cisco/ios/test-requirements.txt6
-rw-r--r--ansible_collections/cisco/ios/tests/config.yml2
-rw-r--r--ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/_populate_config.yaml15
-rw-r--r--ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/remarks_states.yaml134
-rw-r--r--ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/replaced.yaml35
-rw-r--r--ansible_collections/cisco/ios/tests/integration/targets/ios_acls/vars/main.yaml291
-rw-r--r--ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/defaults/main.yaml2
-rw-r--r--ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/meta/main.yaml3
-rw-r--r--ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/tasks/cli.yaml17
-rw-r--r--ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/tasks/main.yaml5
-rw-r--r--ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/tests/cli/basic.yaml490
-rw-r--r--ansible_collections/cisco/ios/tests/integration/targets/ios_bgp_global/tests/cli/deleted.yaml1
-rw-r--r--ansible_collections/cisco/ios/tests/integration/targets/ios_bgp_global/tests/cli/merged.yaml24
-rw-r--r--ansible_collections/cisco/ios/tests/integration/targets/ios_bgp_global/vars/main.yaml50
-rw-r--r--ansible_collections/cisco/ios/tests/integration/targets/ios_facts/tests/cli/all_facts.yaml7
-rw-r--r--ansible_collections/cisco/ios/tests/integration/targets/ios_interfaces/tests/cli/merged.yaml2
-rw-r--r--ansible_collections/cisco/ios/tests/integration/targets/ios_interfaces/vars/main.yaml4
-rw-r--r--ansible_collections/cisco/ios/tests/integration/targets/ios_l3_interfaces/tests/cli/merged.yaml15
-rw-r--r--ansible_collections/cisco/ios/tests/integration/targets/ios_l3_interfaces/vars/main.yaml21
-rw-r--r--ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/defaults/main.yaml2
-rw-r--r--ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/meta/main.yml3
-rw-r--r--ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/tasks/cli.yaml18
-rw-r--r--ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/tasks/main.yaml3
-rw-r--r--ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/tests/cli/ntp_configuration.yaml87
-rw-r--r--ansible_collections/cisco/ios/tests/integration/targets/ios_user/tests/cli/basic.yaml73
-rw-r--r--ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/_populate_config_vlan_config.yaml1
-rw-r--r--ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/_remove_config_vlan_config.yaml1
-rw-r--r--ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/deleted_vlan_config.yaml1
-rw-r--r--ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/gathered_vlan_config.yaml1
-rw-r--r--ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/merged_vlan_config.yaml1
-rw-r--r--ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/overridden_vlan_config.yaml1
-rw-r--r--ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/parsed_vlan_config.yaml1
-rw-r--r--ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/rendered_vlan_config.yaml1
-rw-r--r--ansible_collections/cisco/ios/tests/sanity/ignore-2.10.txt24
-rw-r--r--ansible_collections/cisco/ios/tests/sanity/ignore-2.11.txt24
-rw-r--r--ansible_collections/cisco/ios/tests/sanity/ignore-2.13.txt1
-rw-r--r--ansible_collections/cisco/ios/tests/sanity/ignore-2.18.txt (renamed from ansible_collections/cisco/ios/tests/sanity/ignore-2.12.txt)0
-rw-r--r--ansible_collections/cisco/ios/tests/sanity/ignore-2.9.txt32
-rw-r--r--ansible_collections/cisco/ios/tests/unit/compat/mock.py28
-rw-r--r--ansible_collections/cisco/ios/tests/unit/compat/unittest.py41
-rw-r--r--ansible_collections/cisco/ios/tests/unit/mock/path.py9
-rw-r--r--ansible_collections/cisco/ios/tests/unit/mock/procenv.py10
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/fixtures/ios_facts_show_interfaces31
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_acl_interfaces.py3
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_acls.py610
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_banner.py8
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_bgp.py344
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_bgp_address_family.py65
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_bgp_global.py284
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_command.py19
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_config.py43
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_evpn_evi.py3
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_evpn_global.py3
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_facts.py20
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_hostname.py3
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_interfaces.py30
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_l2_interfaces.py53
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_l3_interfaces.py108
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lacp.py3
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lacp_interfaces.py39
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lag_interfaces.py45
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lldp_global.py10
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lldp_inteface.py8
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_logging_global.py60
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ntp.py110
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ntp_global.py107
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ospf_interfaces.py3
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ospfv2.py83
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ospfv3.py32
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ping.py7
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_prefix_lists.py149
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_route_maps.py46
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_service.py3
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_snmp_server.py290
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_static_routes.py46
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_system.py14
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_user.py66
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_vlans.py828
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_vrf.py52
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_vxlan_vtep.py3
-rw-r--r--ansible_collections/cisco/ios/tests/unit/modules/utils.py8
-rw-r--r--ansible_collections/cisco/ios/tests/unit/plugins/cliconf/test_ios.py9
-rw-r--r--ansible_collections/cisco/ios/tox-ansible.ini10
-rw-r--r--ansible_collections/cisco/ios/tox.ini31
-rw-r--r--ansible_collections/cisco/iosxr/.ansible-lint6
-rw-r--r--ansible_collections/cisco/iosxr/.flake867
-rw-r--r--ansible_collections/cisco/iosxr/.github/CODEOWNERS (renamed from ansible_collections/arista/eos/tests/unit/compat/__init__.py)0
-rw-r--r--ansible_collections/cisco/iosxr/.github/workflows/ack.yml15
-rw-r--r--ansible_collections/cisco/iosxr/.github/workflows/check_label.yml11
-rw-r--r--ansible_collections/cisco/iosxr/.github/workflows/codecoverage.yml3
-rw-r--r--ansible_collections/cisco/iosxr/.github/workflows/draft_release.yml18
-rw-r--r--ansible_collections/cisco/iosxr/.github/workflows/push.yml27
-rw-r--r--ansible_collections/cisco/iosxr/.github/workflows/release.yml4
-rw-r--r--ansible_collections/cisco/iosxr/.github/workflows/tests.yml19
-rw-r--r--ansible_collections/cisco/iosxr/.pre-commit-config.yaml12
-rw-r--r--ansible_collections/cisco/iosxr/.zuul.yaml8
-rw-r--r--ansible_collections/cisco/iosxr/CHANGELOG.rst119
-rw-r--r--ansible_collections/cisco/iosxr/FILES.json5633
-rw-r--r--ansible_collections/cisco/iosxr/MANIFEST.json6
-rw-r--r--ansible_collections/cisco/iosxr/README.md10
-rw-r--r--ansible_collections/cisco/iosxr/changelogs/changelog.yaml124
-rw-r--r--ansible_collections/cisco/iosxr/docs/cisco.iosxr.iosxr_bgp_templates_module.rst8
-rw-r--r--ansible_collections/cisco/iosxr/docs/cisco.iosxr.iosxr_facts_module.rst2
-rw-r--r--ansible_collections/cisco/iosxr/docs/cisco.iosxr.iosxr_logging_module.rst538
-rw-r--r--ansible_collections/cisco/iosxr/meta/runtime.yml11
-rw-r--r--ansible_collections/cisco/iosxr/platform_guide.rst142
-rw-r--r--ansible_collections/cisco/iosxr/plugins/cliconf/iosxr.py29
-rw-r--r--ansible_collections/cisco/iosxr/plugins/module_utils/network/iosxr/argspec/bgp_templates/bgp_templates.py13
-rw-r--r--ansible_collections/cisco/iosxr/plugins/module_utils/network/iosxr/facts/legacy/base.py45
-rw-r--r--ansible_collections/cisco/iosxr/plugins/modules/iosxr_bgp_templates.py5
-rw-r--r--ansible_collections/cisco/iosxr/plugins/modules/iosxr_facts.py3
-rw-r--r--ansible_collections/cisco/iosxr/plugins/modules/iosxr_logging.py1270
-rw-r--r--ansible_collections/cisco/iosxr/requirements.txt1
-rw-r--r--ansible_collections/cisco/iosxr/test-requirements.txt7
-rw-r--r--ansible_collections/cisco/iosxr/tests/config.yml2
-rw-r--r--ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_config/tests/cli/backup.yaml2
-rw-r--r--ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_config/tests/cli/comment-too-long.yaml1
-rw-r--r--ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_config/tests/cli/comment.yaml3
-rw-r--r--ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_config/tests/cli/replace_block.yaml6
-rw-r--r--ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_config/tests/cli/src_basic.yaml3
-rw-r--r--ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_config/tests/cli/src_match_none.yaml3
-rw-r--r--ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/defaults/main.yaml3
-rw-r--r--ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/meta/main.yaml3
-rw-r--r--ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/tasks/cli.yaml24
-rw-r--r--ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/tasks/main.yaml6
-rw-r--r--ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/tasks/netconf.yaml24
-rw-r--r--ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/tests/cli/basic.yaml140
-rw-r--r--ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/tests/netconf/basic.yaml208
-rw-r--r--ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_smoke/tests/netconf/common_netconf.yaml20
-rw-r--r--ansible_collections/cisco/iosxr/tests/sanity/ignore-2.10.txt28
-rw-r--r--ansible_collections/cisco/iosxr/tests/sanity/ignore-2.11.txt31
-rw-r--r--ansible_collections/cisco/iosxr/tests/sanity/ignore-2.12.txt31
-rw-r--r--ansible_collections/cisco/iosxr/tests/sanity/ignore-2.13.txt4
-rw-r--r--ansible_collections/cisco/iosxr/tests/sanity/ignore-2.14.txt2
-rw-r--r--ansible_collections/cisco/iosxr/tests/sanity/ignore-2.15.txt2
-rw-r--r--ansible_collections/cisco/iosxr/tests/sanity/ignore-2.16.txt2
-rw-r--r--ansible_collections/cisco/iosxr/tests/sanity/ignore-2.17.txt2
-rw-r--r--ansible_collections/cisco/iosxr/tests/sanity/ignore-2.18.txt4
-rw-r--r--ansible_collections/cisco/iosxr/tests/sanity/ignore-2.9.txt30
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/compat/mock.py129
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/compat/unittest.py41
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/mock/path.py4
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/fixtures/show_cdp4
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/fixtures/show_cdp_neighbors_detail16
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_hostname.py2
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr.py4
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_acl_interfaces.py3
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_acls.py3
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_banner.py2
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_bgp_address_family.py2
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_bgp_global.py2
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_bgp_neighbor_address_family.py2
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_bgp_templates.py34
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_command.py3
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_config.py2
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_facts.py19
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_interfaces.py3
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_l2_interfaces.py3
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_l3_interfaces.py3
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_lacp.py3
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_lacp_interfaces.py3
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_lag_interfaces.py3
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_lldp_global.py3
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_lldp_interfaces.py3
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_logging_global.py2
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_n540.py4
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_netconf.py3
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_ntp_global.py2
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_ospf_interfaces.py3
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_ospfv2.py3
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_ospfv3.py3
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_ping.py4
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_prefix_lists.py2
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_snmp_server.py2
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_static_routes.py3
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_system.py3
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_user.py3
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_utils.py6
-rw-r--r--ansible_collections/cisco/iosxr/tests/unit/modules/utils.py8
-rw-r--r--ansible_collections/cisco/iosxr/tox-ansible.ini3
-rw-r--r--ansible_collections/cisco/iosxr/tox.ini31
-rw-r--r--ansible_collections/cisco/ise/.DS_Storebin0 -> 10244 bytes
-rw-r--r--ansible_collections/cisco/ise/.github/workflows/sanity_tests.yml3
-rw-r--r--ansible_collections/cisco/ise/.vscode/launch.json16
-rw-r--r--ansible_collections/cisco/ise/.vscode/settings.json24
-rw-r--r--ansible_collections/cisco/ise/FILES.json2538
-rw-r--r--ansible_collections/cisco/ise/MANIFEST.json4
-rw-r--r--ansible_collections/cisco/ise/Pipfile13
-rw-r--r--ansible_collections/cisco/ise/README.md7
-rw-r--r--ansible_collections/cisco/ise/changelogs/changelog.yaml28
-rw-r--r--ansible_collections/cisco/ise/playbooks/credentials.template2
-rw-r--r--ansible_collections/cisco/ise/playbooks/group_vars/ise_servers2
-rw-r--r--ansible_collections/cisco/ise/plugins/.DS_Storebin0 -> 8196 bytes
-rw-r--r--ansible_collections/cisco/ise/plugins/action/aci_bindings_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/aci_settings.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/aci_settings_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/aci_test_connectivity.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/active_directories_info.py90
-rw-r--r--ansible_collections/cisco/ise/plugins/action/active_directory.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/active_directory_add_groups.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/active_directory_groups_by_domain_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/active_directory_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/active_directory_is_user_member_of_group_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/active_directory_join_domain.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/active_directory_join_domain_with_all_nodes.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/active_directory_leave_domain.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/active_directory_leave_domain_with_all_nodes.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/active_directory_trusted_domains_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/active_directory_user_groups_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/ad_groups_info.py98
-rw-r--r--ansible_collections/cisco/ise/plugins/action/admin_user_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/allowed_protocols.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/allowed_protocols_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/anc_endpoint_apply.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/anc_endpoint_bulk_monitor_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/anc_endpoint_bulk_request.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/anc_endpoint_clear.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/anc_endpoint_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/anc_policy.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/anc_policy_bulk_monitor_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/anc_policy_bulk_request.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/anc_policy_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/authorization_profile.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/authorization_profile_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/backup_cancel.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/backup_config.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/backup_last_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/backup_restore.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/backup_schedule_config.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/backup_schedule_config_update.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/bind_signed_certificate.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/byod_portal.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/byod_portal_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/certificate_profile.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/certificate_profile_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/certificate_template_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/configuration.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/configuration_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/csr_delete.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/csr_export_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/csr_generate.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/csr_generate_intermediate_ca.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/csr_info.py4
-rw-r--r--ansible_collections/cisco/ise/plugins/action/custom_attributes.py207
-rw-r--r--ansible_collections/cisco/ise/plugins/action/custom_attributes_info.py101
-rw-r--r--ansible_collections/cisco/ise/plugins/action/custom_attributes_rename.py90
-rw-r--r--ansible_collections/cisco/ise/plugins/action/dataconnect_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/dataconnect_settings_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/dataconnect_settings_password.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/dataconnect_settings_password_expiry.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/dataconnect_settings_status.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/deployment_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/device_administration_authentication_reset_hitcount.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/device_administration_authentication_rules.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/device_administration_authentication_rules_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/device_administration_authorization_reset_hitcount.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/device_administration_authorization_rules.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/device_administration_authorization_rules_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/device_administration_command_set_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/device_administration_conditions.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/device_administration_conditions_for_authentication_rule_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/device_administration_conditions_for_authorization_rule_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/device_administration_conditions_for_policy_set_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/device_administration_conditions_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/device_administration_dictionary_attributes_authentication_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/device_administration_dictionary_attributes_authorization_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/device_administration_dictionary_attributes_policy_set_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/device_administration_global_exception_rules.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/device_administration_global_exception_rules_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/device_administration_global_exception_rules_reset_hitcount.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/device_administration_identity_stores_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/device_administration_local_exception_rules.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/device_administration_local_exception_rules_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/device_administration_local_exception_rules_reset_hitcount.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/device_administration_network_conditions.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/device_administration_network_conditions_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/device_administration_policy_set.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/device_administration_policy_set_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/device_administration_policy_set_reset_hitcount.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/device_administration_profiles_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/device_administration_service_names_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/device_administration_time_date_conditions.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/device_administration_time_date_conditions_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/downloadable_acl.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/downloadable_acl_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/duo_identity_sync.py235
-rw-r--r--ansible_collections/cisco/ise/plugins/action/duo_identity_sync_cancel_info.py98
-rw-r--r--ansible_collections/cisco/ise/plugins/action/duo_identity_sync_info.py101
-rw-r--r--ansible_collections/cisco/ise/plugins/action/duo_identity_sync_status.py92
-rw-r--r--ansible_collections/cisco/ise/plugins/action/duo_identitysync_sync_info.py98
-rw-r--r--ansible_collections/cisco/ise/plugins/action/duo_mfa.py232
-rw-r--r--ansible_collections/cisco/ise/plugins/action/duo_mfa_info.py101
-rw-r--r--ansible_collections/cisco/ise/plugins/action/duo_mfa_testconnection.py94
-rw-r--r--ansible_collections/cisco/ise/plugins/action/egress_matrix_cell.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_bulk_monitor_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_bulk_request.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_clear_all.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_clone.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_set_all_status.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/endpoint.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/endpoint_bulk_monitor_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/endpoint_bulk_request.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/endpoint_certificate.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/endpoint_deregister.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/endpoint_get_rejected_endpoints_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/endpoint_group.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/endpoint_group_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/endpoint_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/endpoint_register.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/endpoint_release_rejected_endpoint.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/endpoints.py310
-rw-r--r--ansible_collections/cisco/ise/plugins/action/endpoints_bulk.py313
-rw-r--r--ansible_collections/cisco/ise/plugins/action/endpoints_bulk_info.py141
-rw-r--r--ansible_collections/cisco/ise/plugins/action/endpoints_device_type_info.py90
-rw-r--r--ansible_collections/cisco/ise/plugins/action/endpoints_info.py141
-rw-r--r--ansible_collections/cisco/ise/plugins/action/endpoints_task.py130
-rw-r--r--ansible_collections/cisco/ise/plugins/action/external_radius_server.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/external_radius_server_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/filter_policy.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/filter_policy_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/guest_location_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/guest_smtp_notification_settings.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/guest_smtp_notification_settings_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/guest_ssid.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/guest_ssid_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/guest_type.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/guest_type_email.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/guest_type_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/guest_type_sms.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/guest_user.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/guest_user_approve.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/guest_user_bulk_monitor_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/guest_user_bulk_request.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/guest_user_change_sponsor_password.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/guest_user_deny.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/guest_user_email.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/guest_user_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/guest_user_reinstate.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/guest_user_reset_password.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/guest_user_sms.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/guest_user_suspend.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/hotpatch_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/hotpatch_install.py4
-rw-r--r--ansible_collections/cisco/ise/plugins/action/hotpatch_rollback.py4
-rw-r--r--ansible_collections/cisco/ise/plugins/action/hotspot_portal.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/hotspot_portal_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/id_store_sequence.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/id_store_sequence_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/identity_group.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/identity_group_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/internal_user.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/internal_user_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/ipsec.py257
-rw-r--r--ansible_collections/cisco/ise/plugins/action/ipsec_bulk.py90
-rw-r--r--ansible_collections/cisco/ise/plugins/action/ipsec_certificates_info.py (renamed from ansible_collections/cisco/ise/plugins/action/dictionary_references_info.py)6
-rw-r--r--ansible_collections/cisco/ise/plugins/action/ipsec_delete.py188
-rw-r--r--ansible_collections/cisco/ise/plugins/action/ipsec_delete_info.py100
-rw-r--r--ansible_collections/cisco/ise/plugins/action/ipsec_disable.py193
-rw-r--r--ansible_collections/cisco/ise/plugins/action/ipsec_disable_info.py100
-rw-r--r--ansible_collections/cisco/ise/plugins/action/ipsec_enable.py193
-rw-r--r--ansible_collections/cisco/ise/plugins/action/ipsec_enable_info.py100
-rw-r--r--ansible_collections/cisco/ise/plugins/action/ipsec_info.py143
-rw-r--r--ansible_collections/cisco/ise/plugins/action/ise_root_ca_regenerate.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/licensing_connection_type_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/licensing_eval_license_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/licensing_feature_to_tier_mapping_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/licensing_registration_create.py10
-rw-r--r--ansible_collections/cisco/ise/plugins/action/licensing_registration_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/licensing_smart_state_create.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/licensing_smart_state_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/licensing_tier_state_create.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/licensing_tier_state_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/mnt_account_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/mnt_athentication_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/mnt_authentication_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/mnt_failure_reasons_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/mnt_session_active_count_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/mnt_session_active_list_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/mnt_session_auth_list_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/mnt_session_by_ip_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/mnt_session_by_mac_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/mnt_session_by_nas_ip_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/mnt_session_by_username_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/mnt_session_delete_all.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/mnt_session_disconnect_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/mnt_session_posture_count_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/mnt_session_profiler_count_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/mnt_session_reauthentication_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/mnt_sessions_by_session_id_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/mnt_version_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/my_device_portal.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/my_device_portal_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/native_supplicant_profile.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/native_supplicant_profile_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_authentication_rules.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_authentication_rules_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_authentication_rules_reset_hitcount.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_authorization_rules.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_authorization_rules_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_authorization_rules_reset_hitcount.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_conditions.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_conditions_for_authentication_rule_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_conditions_for_authorization_rule_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_conditions_for_policy_set_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_conditions_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_dictionary.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_dictionary_attribute.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_dictionary_attribute_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_dictionary_attributes_authentication_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_dictionary_attributes_authorization_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_dictionary_attributes_policy_set_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_dictionary_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_global_exception_rules.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_global_exception_rules_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_global_exception_rules_reset_hitcount.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_identity_stores_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_local_exception_rules.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_local_exception_rules_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_local_exception_rules_reset_hitcounts.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_network_condition.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_network_condition_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_policy_set.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_policy_set_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_policy_set_reset_hitcount.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_profiles_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_security_groups_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_service_name_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_time_date_conditions.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_access_time_date_conditions_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_device.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_device_bulk_monitor_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_device_bulk_request.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_device_group.py8
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_device_group_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/network_device_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/node_deployment.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/node_deployment_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/node_deployment_sync.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/node_group.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/node_group_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/node_group_node_create.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/node_group_node_delete.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/node_group_node_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/node_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/node_primary_to_standalone.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/node_promotion.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/node_replication_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/node_secondary_to_primary.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/node_services_interfaces_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/node_services_profiler_probe_config.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/node_services_profiler_probe_config_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/node_services_sxp_interfaces.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/node_services_sxp_interfaces_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/node_standalone_to_primary.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/node_sync.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pan_ha.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pan_ha_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pan_ha_update.py10
-rw-r--r--ansible_collections/cisco/ise/plugins/action/patch_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/patch_install.py4
-rw-r--r--ansible_collections/cisco/ise/plugins/action/patch_rollback.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/personas_check_standalone.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/personas_export_certs.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/personas_promote_primary.py6
-rw-r--r--ansible_collections/cisco/ise/plugins/action/personas_register_node.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/portal_global_setting.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/portal_global_setting_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/portal_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/portal_theme.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/portal_theme_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/profiler_profile_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/proxy_connection_settings.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/proxy_connection_settings_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/px_grid_direct.py (renamed from ansible_collections/cisco/ise/plugins/action/connector_config.py)20
-rw-r--r--ansible_collections/cisco/ise/plugins/action/px_grid_direct_dictionary_info.py90
-rw-r--r--ansible_collections/cisco/ise/plugins/action/px_grid_direct_info.py (renamed from ansible_collections/cisco/ise/plugins/action/connector_config_info.py)6
-rw-r--r--ansible_collections/cisco/ise/plugins/action/px_grid_direct_sync.py184
-rw-r--r--ansible_collections/cisco/ise/plugins/action/px_grid_direct_sync_info.py98
-rw-r--r--ansible_collections/cisco/ise/plugins/action/px_grid_direct_test_connector.py (renamed from ansible_collections/cisco/ise/plugins/action/test_connector.py)6
-rw-r--r--ansible_collections/cisco/ise/plugins/action/px_grid_node_approve.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/px_grid_node_delete.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/px_grid_node_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/px_grid_settings_auto_approve.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pxgrid_access_secret.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pxgrid_account_activate.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pxgrid_account_create.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pxgrid_authorization.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pxgrid_bindings_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pxgrid_egress_matrices_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pxgrid_egress_policies_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pxgrid_endpoint_by_mac_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pxgrid_endpoints_by_os_type_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pxgrid_endpoints_by_type_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pxgrid_endpoints_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pxgrid_failures_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pxgrid_healths_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pxgrid_node_approve.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pxgrid_node_delete.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pxgrid_node_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pxgrid_performances_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pxgrid_profiles_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pxgrid_security_group_acls_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pxgrid_security_groups_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pxgrid_service_lookup.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pxgrid_service_register.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pxgrid_service_reregister.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pxgrid_service_unregister.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pxgrid_session_by_ip_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pxgrid_session_by_mac_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pxgrid_session_for_recovery_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pxgrid_sessions_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pxgrid_settings_auto_approve.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pxgrid_user_group_by_username_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/pxgrid_user_groups_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/radius_server_sequence.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/radius_server_sequence_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/renew_certificate.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/repository.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/repository_files_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/repository_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/reservation.py255
-rw-r--r--ansible_collections/cisco/ise/plugins/action/reservation_info.py133
-rw-r--r--ansible_collections/cisco/ise/plugins/action/resource_version_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/rest_id_store.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/rest_id_store_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/self_registered_portal.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/self_registered_portal_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/selfsigned_certificate_generate.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/session_service_node_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sg_acl.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sg_acl_bulk_monitor_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sg_acl_bulk_request.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sg_acl_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sg_mapping.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sg_mapping_bulk_monitor_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sg_mapping_bulk_request.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sg_mapping_deploy.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sg_mapping_deploy_all.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sg_mapping_deploy_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sg_mapping_group.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sg_mapping_group_bulk_monitor_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sg_mapping_group_bulk_request.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sg_mapping_group_deploy.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sg_mapping_group_deploy_all.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sg_mapping_group_deploy_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sg_mapping_group_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sg_mapping_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sg_to_vn_to_vlan.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sg_to_vn_to_vlan_bulk_monitor_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sg_to_vn_to_vlan_bulk_request.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sg_to_vn_to_vlan_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sgt.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sgt_bulk_monitor_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sgt_bulk_request.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sgt_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sms_provider_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sponsor_group.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sponsor_group_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sponsor_group_member_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sponsor_portal.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sponsor_portal_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sponsored_guest_portal.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sponsored_guest_portal_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/stop_replication.py168
-rw-r--r--ansible_collections/cisco/ise/plugins/action/stop_replication_info.py90
-rw-r--r--ansible_collections/cisco/ise/plugins/action/subscriber.py18
-rw-r--r--ansible_collections/cisco/ise/plugins/action/subscriber_bulk.py6
-rw-r--r--ansible_collections/cisco/ise/plugins/action/subscriber_imsi_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/subscriber_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/support_bundle.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/support_bundle_download.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/support_bundle_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sxp_connections.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sxp_connections_bulk_monitor_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sxp_connections_bulk_request.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sxp_connections_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sxp_local_bindings.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sxp_local_bindings_bulk_monitor_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sxp_local_bindings_bulk_request.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sxp_local_bindings_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sxp_vpns.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sxp_vpns_bulk_monitor_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sxp_vpns_bulk_request.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/sxp_vpns_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/system_certificate.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/system_certificate_create.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/system_certificate_export_info.py4
-rw-r--r--ansible_collections/cisco/ise/plugins/action/system_certificate_import.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/system_certificate_info.py4
-rw-r--r--ansible_collections/cisco/ise/plugins/action/system_config_version_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/tacacs_command_sets.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/tacacs_command_sets_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/tacacs_external_servers.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/tacacs_external_servers_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/tacacs_profile.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/tacacs_profile_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/tacacs_server_sequence.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/tacacs_server_sequence_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/tasks_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/telemetry_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/threat_vulnerabilities_clear.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/transport_gateway_settings.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/transport_gateway_settings_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/trusted_certificate.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/trusted_certificate_export_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/trusted_certificate_import.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/action/trusted_certificate_info.py4
-rw-r--r--ansible_collections/cisco/ise/plugins/action/trustsec_nbar_app.py256
-rw-r--r--ansible_collections/cisco/ise/plugins/action/trustsec_nbar_app_info.py141
-rw-r--r--ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping.py266
-rw-r--r--ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping_bulk_create.py88
-rw-r--r--ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping_bulk_delete.py88
-rw-r--r--ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping_bulk_update.py88
-rw-r--r--ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping_info.py141
-rw-r--r--ansible_collections/cisco/ise/plugins/action/trustsec_vn.py256
-rw-r--r--ansible_collections/cisco/ise/plugins/action/trustsec_vn_bulk_create.py88
-rw-r--r--ansible_collections/cisco/ise/plugins/action/trustsec_vn_bulk_delete.py88
-rw-r--r--ansible_collections/cisco/ise/plugins/action/trustsec_vn_bulk_update.py88
-rw-r--r--ansible_collections/cisco/ise/plugins/action/trustsec_vn_info.py141
-rw-r--r--ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping.py268
-rw-r--r--ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping_bulk_create.py88
-rw-r--r--ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping_bulk_delete.py88
-rw-r--r--ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping_bulk_update.py88
-rw-r--r--ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping_info.py141
-rw-r--r--ansible_collections/cisco/ise/plugins/action/upgrade_proceed.py171
-rw-r--r--ansible_collections/cisco/ise/plugins/action/upgrade_proceed_info.py87
-rw-r--r--ansible_collections/cisco/ise/plugins/action/upgrade_stage_cancel.py171
-rw-r--r--ansible_collections/cisco/ise/plugins/action/upgrade_stage_cancel_info.py92
-rw-r--r--ansible_collections/cisco/ise/plugins/action/upgrade_stage_start.py172
-rw-r--r--ansible_collections/cisco/ise/plugins/action/upgrade_stage_start_info.py92
-rw-r--r--ansible_collections/cisco/ise/plugins/action/user_equipment.py253
-rw-r--r--ansible_collections/cisco/ise/plugins/action/user_equipment_bulk.py90
-rw-r--r--ansible_collections/cisco/ise/plugins/action/user_equipment_csv.py86
-rw-r--r--ansible_collections/cisco/ise/plugins/action/user_equipment_imei_info.py98
-rw-r--r--ansible_collections/cisco/ise/plugins/action/user_equipment_info.py141
-rw-r--r--ansible_collections/cisco/ise/plugins/action/user_equipment_subscriber_info.py98
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/aci_bindings_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/aci_settings.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/aci_settings_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/aci_test_connectivity.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/active_directories_info.py56
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/active_directory.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/active_directory_add_groups.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/active_directory_groups_by_domain_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/active_directory_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/active_directory_is_user_member_of_group_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/active_directory_join_domain.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/active_directory_join_domain_with_all_nodes.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/active_directory_leave_domain.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/active_directory_leave_domain_with_all_nodes.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/active_directory_trusted_domains_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/active_directory_user_groups_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/ad_groups_info.py60
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/admin_user_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/allowed_protocols.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/allowed_protocols_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/anc_endpoint_apply.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/anc_endpoint_bulk_monitor_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/anc_endpoint_bulk_request.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/anc_endpoint_clear.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/anc_endpoint_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/anc_policy.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/anc_policy_bulk_monitor_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/anc_policy_bulk_request.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/anc_policy_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/authorization_profile.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/authorization_profile_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/backup_cancel.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/backup_config.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/backup_last_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/backup_restore.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/backup_schedule_config.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/backup_schedule_config_update.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/bind_signed_certificate.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/byod_portal.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/byod_portal_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/certificate_profile.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/certificate_profile_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/certificate_template_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/configuration.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/configuration_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/csr_delete.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/csr_export_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/csr_generate.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/csr_generate_intermediate_ca.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/csr_info.py13
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/custom_attributes.py73
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/custom_attributes_info.py67
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/custom_attributes_rename.py55
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/dataconnect_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/dataconnect_settings_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/dataconnect_settings_password.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/dataconnect_settings_password_expiry.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/dataconnect_settings_status.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/deployment_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/device_administration_authentication_reset_hitcount.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/device_administration_authentication_rules.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/device_administration_authentication_rules_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/device_administration_authorization_reset_hitcount.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/device_administration_authorization_rules.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/device_administration_authorization_rules_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/device_administration_command_set_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/device_administration_conditions.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/device_administration_conditions_for_authentication_rule_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/device_administration_conditions_for_authorization_rule_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/device_administration_conditions_for_policy_set_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/device_administration_conditions_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/device_administration_dictionary_attributes_authentication_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/device_administration_dictionary_attributes_authorization_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/device_administration_dictionary_attributes_policy_set_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/device_administration_global_exception_rules.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/device_administration_global_exception_rules_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/device_administration_global_exception_rules_reset_hitcount.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/device_administration_identity_stores_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/device_administration_local_exception_rules.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/device_administration_local_exception_rules_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/device_administration_local_exception_rules_reset_hitcount.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/device_administration_network_conditions.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/device_administration_network_conditions_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/device_administration_policy_set.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/device_administration_policy_set_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/device_administration_policy_set_reset_hitcount.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/device_administration_profiles_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/device_administration_service_names_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/device_administration_time_date_conditions.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/device_administration_time_date_conditions_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/downloadable_acl.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/downloadable_acl_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/duo_identity_sync.py195
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/duo_identity_sync_cancel_info.py54
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/duo_identity_sync_info.py94
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/duo_identity_sync_status.py107
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/duo_identitysync_sync_info.py54
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/duo_mfa.py161
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/duo_mfa_info.py84
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/duo_mfa_testconnection.py84
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_bulk_monitor_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_bulk_request.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_clear_all.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_clone.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_set_all_status.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/endpoint.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/endpoint_bulk_monitor_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/endpoint_bulk_request.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/endpoint_certificate.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/endpoint_deregister.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/endpoint_get_rejected_endpoints_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/endpoint_group.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/endpoint_group_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/endpoint_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/endpoint_register.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/endpoint_release_rejected_endpoint.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/endpoints.py237
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/endpoints_bulk.py352
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/endpoints_bulk_info.py168
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/endpoints_device_type_info.py (renamed from ansible_collections/cisco/ise/plugins/modules/dictionary_references_info.py)29
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/endpoints_info.py168
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/endpoints_task.py137
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/external_radius_server.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/external_radius_server_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/filter_policy.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/filter_policy_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/guest_location_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/guest_smtp_notification_settings.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/guest_smtp_notification_settings_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/guest_ssid.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/guest_ssid_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/guest_type.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/guest_type_email.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/guest_type_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/guest_type_sms.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/guest_user.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/guest_user_approve.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/guest_user_bulk_monitor_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/guest_user_bulk_request.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/guest_user_change_sponsor_password.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/guest_user_deny.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/guest_user_email.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/guest_user_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/guest_user_reinstate.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/guest_user_reset_password.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/guest_user_sms.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/guest_user_suspend.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/hotpatch_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/hotpatch_install.py9
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/hotpatch_rollback.py9
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/hotspot_portal.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/hotspot_portal_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/id_store_sequence.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/id_store_sequence_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/identity_group.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/identity_group_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/internal_user.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/internal_user_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/ipsec.py236
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/ipsec_bulk.py143
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/ipsec_certificates_info.py55
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/ipsec_delete.py88
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/ipsec_delete_info.py90
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/ipsec_disable.py98
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/ipsec_disable_info.py90
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/ipsec_enable.py98
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/ipsec_enable_info.py90
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/ipsec_info.py193
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/ise_root_ca_regenerate.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/licensing_connection_type_info.py4
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/licensing_eval_license_info.py4
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/licensing_feature_to_tier_mapping_info.py8
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/licensing_registration_create.py13
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/licensing_registration_info.py12
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/licensing_smart_state_create.py4
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/licensing_smart_state_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/licensing_tier_state_create.py14
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/licensing_tier_state_info.py8
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/mnt_account_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/mnt_athentication_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/mnt_authentication_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/mnt_failure_reasons_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/mnt_session_active_count_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/mnt_session_active_list_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/mnt_session_auth_list_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/mnt_session_by_ip_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/mnt_session_by_mac_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/mnt_session_by_nas_ip_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/mnt_session_by_username_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/mnt_session_delete_all.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/mnt_session_disconnect_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/mnt_session_posture_count_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/mnt_session_profiler_count_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/mnt_session_reauthentication_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/mnt_sessions_by_session_id_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/mnt_version_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/my_device_portal.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/my_device_portal_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/native_supplicant_profile.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/native_supplicant_profile_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_authentication_rules.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_authentication_rules_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_authentication_rules_reset_hitcount.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_authorization_rules.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_authorization_rules_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_authorization_rules_reset_hitcount.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_conditions.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_conditions_for_authentication_rule_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_conditions_for_authorization_rule_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_conditions_for_policy_set_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_conditions_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_dictionary.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_dictionary_attribute.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_dictionary_attribute_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_dictionary_attributes_authentication_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_dictionary_attributes_authorization_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_dictionary_attributes_policy_set_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_dictionary_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_global_exception_rules.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_global_exception_rules_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_global_exception_rules_reset_hitcount.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_identity_stores_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_local_exception_rules.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_local_exception_rules_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_local_exception_rules_reset_hitcounts.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_network_condition.py17
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_network_condition_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_policy_set.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_policy_set_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_policy_set_reset_hitcount.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_profiles_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_security_groups_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_service_name_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_time_date_conditions.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_access_time_date_conditions_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_device.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_device_bulk_monitor_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_device_bulk_request.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_device_group.py12
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_device_group_info.py6
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/network_device_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/node_deployment.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/node_deployment_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/node_deployment_sync.py4
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/node_group.py14
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/node_group_info.py12
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/node_group_node_create.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/node_group_node_delete.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/node_group_node_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/node_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/node_primary_to_standalone.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/node_promotion.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/node_replication_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/node_secondary_to_primary.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/node_services_interfaces_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/node_services_profiler_probe_config.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/node_services_profiler_probe_config_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/node_services_sxp_interfaces.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/node_services_sxp_interfaces_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/node_standalone_to_primary.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/node_sync.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pan_ha.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pan_ha_info.py8
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pan_ha_update.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/patch_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/patch_install.py9
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/patch_rollback.py5
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/personas_promote_primary.py17
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/portal_global_setting.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/portal_global_setting_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/portal_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/portal_theme.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/portal_theme_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/profiler_profile_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/proxy_connection_settings.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/proxy_connection_settings_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/px_grid_direct.py (renamed from ansible_collections/cisco/ise/plugins/modules/connector_config.py)85
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/px_grid_direct_dictionary_info.py49
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/px_grid_direct_info.py (renamed from ansible_collections/cisco/ise/plugins/modules/connector_config_info.py)39
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/px_grid_direct_sync.py66
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/px_grid_direct_sync_info.py59
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/px_grid_direct_test_connector.py (renamed from ansible_collections/cisco/ise/plugins/modules/test_connector.py)23
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/px_grid_node_approve.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/px_grid_node_delete.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/px_grid_node_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/px_grid_settings_auto_approve.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pxgrid_access_secret.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pxgrid_account_activate.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pxgrid_account_create.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pxgrid_authorization.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pxgrid_bindings_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pxgrid_egress_matrices_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pxgrid_egress_policies_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pxgrid_endpoint_by_mac_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pxgrid_endpoints_by_os_type_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pxgrid_endpoints_by_type_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pxgrid_endpoints_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pxgrid_failures_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pxgrid_healths_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pxgrid_node_approve.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pxgrid_node_delete.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pxgrid_node_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pxgrid_performances_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pxgrid_profiles_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pxgrid_security_group_acls_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pxgrid_security_groups_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pxgrid_service_lookup.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pxgrid_service_register.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pxgrid_service_reregister.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pxgrid_service_unregister.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pxgrid_session_by_ip_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pxgrid_session_by_mac_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pxgrid_session_for_recovery_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pxgrid_sessions_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pxgrid_settings_auto_approve.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pxgrid_user_group_by_username_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/pxgrid_user_groups_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/radius_server_sequence.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/radius_server_sequence_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/renew_certificate.py4
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/repository.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/repository_files_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/repository_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/reservation.py114
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/reservation_info.py97
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/resource_version_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/rest_id_store.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/rest_id_store_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/self_registered_portal.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/self_registered_portal_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/selfsigned_certificate_generate.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/session_service_node_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sg_acl.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sg_acl_bulk_monitor_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sg_acl_bulk_request.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sg_acl_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sg_mapping.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sg_mapping_bulk_monitor_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sg_mapping_bulk_request.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sg_mapping_deploy.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sg_mapping_deploy_all.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sg_mapping_deploy_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sg_mapping_group.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sg_mapping_group_bulk_monitor_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sg_mapping_group_bulk_request.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sg_mapping_group_deploy.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sg_mapping_group_deploy_all.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sg_mapping_group_deploy_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sg_mapping_group_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sg_mapping_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sg_to_vn_to_vlan.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sg_to_vn_to_vlan_bulk_monitor_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sg_to_vn_to_vlan_bulk_request.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sg_to_vn_to_vlan_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sgt.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sgt_bulk_monitor_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sgt_bulk_request.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sgt_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sms_provider_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sponsor_group.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sponsor_group_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sponsor_group_member_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sponsor_portal.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sponsor_portal_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sponsored_guest_portal.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sponsored_guest_portal_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/stop_replication.py68
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/stop_replication_info.py51
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/subscriber.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/subscriber_bulk.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/subscriber_imsi_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/subscriber_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/support_bundle.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/support_bundle_download.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/support_bundle_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sxp_connections.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sxp_connections_bulk_monitor_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sxp_connections_bulk_request.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sxp_connections_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sxp_local_bindings.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sxp_local_bindings_bulk_monitor_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sxp_local_bindings_bulk_request.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sxp_local_bindings_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sxp_vpns.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sxp_vpns_bulk_monitor_status_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sxp_vpns_bulk_request.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/sxp_vpns_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/system_certificate.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/system_certificate_create.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/system_certificate_export_info.py20
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/system_certificate_import.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/system_certificate_info.py13
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/system_config_version_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/tacacs_command_sets.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/tacacs_command_sets_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/tacacs_external_servers.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/tacacs_external_servers_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/tacacs_profile.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/tacacs_profile_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/tacacs_server_sequence.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/tacacs_server_sequence_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/tasks_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/telemetry_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/threat_vulnerabilities_clear.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/transport_gateway_settings.py4
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/transport_gateway_settings_info.py4
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/trusted_certificate.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/trusted_certificate_export_info.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/trusted_certificate_import.py2
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/trusted_certificate_info.py7
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/trustsec_nbar_app.py141
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/trustsec_nbar_app_info.py150
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping.py134
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping_bulk_create.py87
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping_bulk_delete.py59
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping_bulk_update.py87
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping_info.py144
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/trustsec_vn.py119
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/trustsec_vn_bulk_create.py75
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/trustsec_vn_bulk_delete.py59
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/trustsec_vn_bulk_update.py75
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/trustsec_vn_info.py140
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping.py138
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping_bulk_create.py93
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping_bulk_delete.py59
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping_bulk_update.py93
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping_info.py148
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/upgrade_proceed.py69
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/upgrade_proceed_info.py53
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/upgrade_stage_cancel.py73
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/upgrade_stage_cancel_info.py64
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/upgrade_stage_start.py77
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/upgrade_stage_start_info.py64
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/user_equipment.py98
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/user_equipment_bulk.py75
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/user_equipment_csv.py49
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/user_equipment_imei_info.py53
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/user_equipment_info.py122
-rw-r--r--ansible_collections/cisco/ise/plugins/modules/user_equipment_subscriber_info.py68
-rw-r--r--ansible_collections/cisco/ise/plugins/plugin_utils/ise.py2
-rw-r--r--ansible_collections/cisco/ise/requirements.txt2
-rw-r--r--ansible_collections/cisco/meraki/FILES.json19
-rw-r--r--ansible_collections/cisco/meraki/MANIFEST.json4
-rw-r--r--ansible_collections/cisco/meraki/README.md2
-rw-r--r--ansible_collections/cisco/meraki/changelogs/changelog.yaml9
-rw-r--r--ansible_collections/cisco/meraki/playbooks/test.yml100
-rw-r--r--ansible_collections/cisco/meraki/plugins/action/networks_appliance_vlans.py36
-rw-r--r--ansible_collections/cisco/meraki/plugins/action/organizations_appliance_vpn_third_party_vpnpeers_info.py2
-rw-r--r--ansible_collections/cisco/meraki/plugins/modules/networks_syslog_servers.py1
-rw-r--r--ansible_collections/cisco/meraki/tests/sanity/ignore-2.18.txt1
-rw-r--r--ansible_collections/cisco/nxos/.flake867
-rw-r--r--ansible_collections/cisco/nxos/.github/workflows/ack.yml15
-rw-r--r--ansible_collections/cisco/nxos/.github/workflows/check_label.yml11
-rw-r--r--ansible_collections/cisco/nxos/.github/workflows/codecoverage.yml3
-rw-r--r--ansible_collections/cisco/nxos/.github/workflows/draft_release.yml18
-rw-r--r--ansible_collections/cisco/nxos/.github/workflows/integration-test.yml38
-rw-r--r--ansible_collections/cisco/nxos/.github/workflows/push.yml27
-rw-r--r--ansible_collections/cisco/nxos/.github/workflows/release.yml4
-rw-r--r--ansible_collections/cisco/nxos/.github/workflows/tests.yml22
-rw-r--r--ansible_collections/cisco/nxos/.pre-commit-config.yaml11
-rw-r--r--ansible_collections/cisco/nxos/CHANGELOG.rst73
-rw-r--r--ansible_collections/cisco/nxos/FILES.json10244
-rw-r--r--ansible_collections/cisco/nxos/MANIFEST.json6
-rw-r--r--ansible_collections/cisco/nxos/README.md12
-rw-r--r--ansible_collections/cisco/nxos/changelogs/changelog.yaml68
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_acl_interfaces_module.rst146
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_acls_module.rst76
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_bfd_interfaces_module.rst48
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_bgp_address_family_module.rst70
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_bgp_global_module.rst54
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_bgp_neighbor_address_family_module.rst38
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_command_module.rst24
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_config_module.rst20
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_devicealias_module.rst24
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_evpn_vni_module.rst4
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_facts_module.rst10
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_fc_interfaces_module.rst94
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_gir_profile_management_module.rst4
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_hsrp_interfaces_module.rst36
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_igmp_interface_module.rst4
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_install_os_module.rst3
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_interfaces_module.rst60
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_l2_interfaces_module.rst54
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_l3_interfaces_module.rst70
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_lacp_interfaces_module.rst40
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_lag_interfaces_module.rst40
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_lldp_interfaces_module.rst28
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_logging_global_module.rst4
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_logging_module.rst458
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ntp_auth_module.rst224
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ntp_global_module.rst44
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ntp_module.rst314
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ntp_options_module.rst192
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ospf_interfaces_module.rst183
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ospfv2_module.rst278
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ospfv3_module.rst242
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_route_maps_module.rst128
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_snmp_server_module.rst90
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_static_routes_module.rst126
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_system_module.rst8
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_telemetry_module.rst82
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_user_module.rst4
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_vlans_module.rst42
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_vrf_af_module.rst53
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_vrf_module.rst38
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_vsan_module.rst38
-rw-r--r--ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_zone_zoneset_module.rst96
-rw-r--r--ansible_collections/cisco/nxos/meta/runtime.yml363
-rw-r--r--ansible_collections/cisco/nxos/platform_guide.rst170
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/aaa_server.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/aaa_server_host.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/acl.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/acl_interface.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/acl_interfaces.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/acls.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/banner.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/bfd_global.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/bfd_interfaces.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/bgp.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/bgp_address_family.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/bgp_af.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/bgp_global.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/bgp_neighbor.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/bgp_neighbor_address_family.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/bgp_neighbor_af.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/command.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/config.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/devicealias.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/evpn_global.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/evpn_vni.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/facts.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/feature.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/file_copy.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/gir.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/gir_profile_management.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/hostname.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/hsrp.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/hsrp_interfaces.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/igmp.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/igmp_interface.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/igmp_snooping.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/install_os.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/interface.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/interface_ospf.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/interfaces.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/l2_interface.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/l2_interfaces.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/l3_interface.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/l3_interfaces.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/lacp.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/lacp_interfaces.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/lag_interfaces.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/linkagg.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/lldp.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/lldp_global.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/lldp_interfaces.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/logging.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/logging_global.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/ntp.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/ntp_auth.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/ntp_global.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/ntp_options.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/nxapi.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/nxos.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/ospf.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/ospf_interfaces.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/ospf_vrf.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/ospfv2.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/ospfv3.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/overlay_global.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/pim.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/pim_interface.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/pim_rp_address.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/ping.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/prefix_lists.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/reboot.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/rollback.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/route_maps.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/rpm.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/smu.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/snapshot.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/snmp_community.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/snmp_contact.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/snmp_host.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/snmp_location.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/snmp_server.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/snmp_traps.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/snmp_user.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/static_route.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/static_routes.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/system.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/telemetry.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/udld.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/udld_interface.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/user.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/vlan.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/vlans.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/vpc.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/vpc_interface.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/vrf.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/vrf_af.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/vrf_interface.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/vrrp.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/vsan.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/vtp_domain.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/vtp_password.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/vtp_version.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/vxlan_vtep.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/vxlan_vtep_vni.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/action/zone_zoneset.py43
-rw-r--r--ansible_collections/cisco/nxos/plugins/cliconf/nxos.py6
-rw-r--r--ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/config/acl_interfaces/acl_interfaces.py19
-rw-r--r--ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/config/interfaces/interfaces.py4
-rw-r--r--ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/config/l2_interfaces/l2_interfaces.py2
-rw-r--r--ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/facts/acl_interfaces/acl_interfaces.py6
-rw-r--r--ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/facts/acls/acls.py11
-rw-r--r--ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/facts/legacy/base.py67
-rw-r--r--ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/facts/lldp_interfaces/lldp_interfaces.py6
-rw-r--r--ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/rm_templates/ospfv2.py28
-rw-r--r--ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/utils/telemetry/telemetry.py7
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_aaa_server_host.py5
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_acl_interfaces.py147
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_acls.py76
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_bfd_interfaces.py48
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_bgp_address_family.py72
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_bgp_global.py56
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_bgp_neighbor_address_family.py44
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_command.py25
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_config.py58
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_devicealias.py58
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_evpn_vni.py8
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_facts.py10
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_fc_interfaces.py98
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_gir_profile_management.py4
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_hostname.py1
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_hsrp_interfaces.py37
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_igmp_interface.py18
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_install_os.py7
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_interfaces.py62
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_l2_interfaces.py54
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_l3_interfaces.py70
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_lacp_interfaces.py40
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_lag_interfaces.py40
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_lldp_interfaces.py30
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_logging.py940
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_logging_global.py4
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_ntp.py446
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_ntp_auth.py336
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_ntp_global.py44
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_ntp_options.py173
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_ospf_interfaces.py197
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_ospfv2.py278
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_ospfv3.py278
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_route_maps.py128
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_snmp_server.py90
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_static_routes.py126
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_system.py8
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_telemetry.py84
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_user.py4
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_vlans.py42
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_vrf.py46
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_vrf_af.py74
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_vsan.py62
-rw-r--r--ansible_collections/cisco/nxos/plugins/modules/nxos_zone_zoneset.py226
-rw-r--r--ansible_collections/cisco/nxos/plugins/netconf/nxos.py1
-rw-r--r--ansible_collections/cisco/nxos/pyproject.toml6
-rw-r--r--ansible_collections/cisco/nxos/test-requirements.txt10
-rw-r--r--ansible_collections/cisco/nxos/tests/__init__.py (renamed from ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/__init__.py)0
-rw-r--r--ansible_collections/cisco/nxos/tests/config.yml2
-rw-r--r--ansible_collections/cisco/nxos/tests/integration/__init__.py (renamed from ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/__init__.py)0
-rw-r--r--ansible_collections/cisco/nxos/tests/integration/labs/single.yaml241
-rw-r--r--ansible_collections/cisco/nxos/tests/integration/targets/nxos_acl_interfaces/tests/common/remove_config.yaml6
-rw-r--r--ansible_collections/cisco/nxos/tests/integration/targets/nxos_acl_interfaces/tests/common/rtt.yml3
-rw-r--r--ansible_collections/cisco/nxos/tests/integration/targets/nxos_facts/tests/common/interface_facts.yaml62
-rw-r--r--ansible_collections/cisco/nxos/tests/integration/targets/nxos_file_copy/tests/cli/sanity.yaml12
-rw-r--r--ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/defaults/main.yaml2
-rw-r--r--ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/meta/main.yaml3
-rw-r--r--ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/tasks/cli.yaml31
-rw-r--r--ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/tasks/main.yaml19
-rw-r--r--ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/tasks/nxapi.yaml31
-rw-r--r--ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/tests/common/basic.yaml485
-rw-r--r--ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/tests/common/purge.yaml111
-rw-r--r--ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/defaults/main.yaml2
-rw-r--r--ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/meta/main.yml3
-rw-r--r--ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/tasks/cli.yaml31
-rw-r--r--ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/tasks/main.yaml12
-rw-r--r--ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/tasks/nxapi.yaml31
-rw-r--r--ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/tests/common/sanity.yaml114
-rw-r--r--ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/defaults/main.yaml2
-rw-r--r--ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/meta/main.yml3
-rw-r--r--ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/tasks/cli.yaml31
-rw-r--r--ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/tasks/main.yaml10
-rw-r--r--ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/tasks/nxapi.yaml31
-rw-r--r--ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/tests/common/sanity.yaml133
-rw-r--r--ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/defaults/main.yaml2
-rw-r--r--ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/meta/main.yml3
-rw-r--r--ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/tasks/cli.yaml31
-rw-r--r--ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/tasks/main.yaml10
-rw-r--r--ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/tasks/nxapi.yaml31
-rw-r--r--ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/tests/common/sanity.yaml99
-rw-r--r--ansible_collections/cisco/nxos/tests/integration/test_integration.py43
-rw-r--r--ansible_collections/cisco/nxos/tests/sanity/ignore-2.10.txt34
-rw-r--r--ansible_collections/cisco/nxos/tests/sanity/ignore-2.11.txt34
-rw-r--r--ansible_collections/cisco/nxos/tests/sanity/ignore-2.12.txt36
-rw-r--r--ansible_collections/cisco/nxos/tests/sanity/ignore-2.18.txt (renamed from ansible_collections/cisco/nxos/tests/sanity/ignore-2.13.txt)0
-rw-r--r--ansible_collections/cisco/nxos/tests/sanity/ignore-2.9.txt55
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/compat/__init__.py0
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/compat/mock.py127
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/compat/unittest.py41
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/mock/path.py4
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/mock/procenv.py5
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos.py15
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_acl_interfaces.py3
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_acls.py48
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_banner.py3
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_bfd_global.py3
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_bfd_interfaces.py2
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_bgp_address_family.py4
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_bgp_global.py6
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_bgp_neighbor_address_family.py4
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_bgp_templates.py2
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_command.py3
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_config.py3
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_devicealias.py3
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_evpn_global.py3
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_evpn_vni.py3
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_fc_interfaces.py2
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_feature.py3
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_hostname.py2
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_hsrp.py3
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_hsrp_interfaces.py2
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_interfaces.py4
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_l3_interfaces.py2
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_lacp_interfaces.py2
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_lldp_interfaces.py3
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_logging_global.py8
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_ntp_global.py4
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_nxapi.py3
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_ospf_interfaces.py2
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_ospfv2.py2
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_ospfv3.py2
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_overlay_global.py3
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_pim.py3
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_pim_interface.py3
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_pim_rp_address.py3
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_ping.py3
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_prefix_lists.py2
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_route_maps.py2
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_snmp_server.py23
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_static_routes.py2
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_system.py3
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_telemetry.py149
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_user.py3
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vlans.py3
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vpc.py3
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vpc_interface.py3
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vrf.py3
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vrf_af.py3
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vsan.py3
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vxlan_vtep.py3
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vxlan_vtep_vni.py3
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_zone_zoneset.py3
-rw-r--r--ansible_collections/cisco/nxos/tests/unit/modules/utils.py8
-rw-r--r--ansible_collections/cisco/nxos/tox-ansible.ini10
-rw-r--r--ansible_collections/cisco/nxos/tox.ini31
-rw-r--r--ansible_collections/cloud/common/.ansible-lint8
-rw-r--r--ansible_collections/cloud/common/.github/workflows/changelog.yaml (renamed from ansible_collections/cloud/common/.github/workflows/changelog.yml)5
-rw-r--r--ansible_collections/cloud/common/.github/workflows/galaxy-import.yaml15
-rw-r--r--ansible_collections/cloud/common/.github/workflows/integration-tests-kubernetes-core.yaml141
-rw-r--r--ansible_collections/cloud/common/.github/workflows/linters.yaml25
-rw-r--r--ansible_collections/cloud/common/.github/workflows/linters.yml16
-rw-r--r--ansible_collections/cloud/common/.github/workflows/sanity-tests.yaml15
-rw-r--r--ansible_collections/cloud/common/.github/workflows/sanity_and_units.yml172
-rw-r--r--ansible_collections/cloud/common/.github/workflows/unit-ansible-2.9.yml63
-rw-r--r--ansible_collections/cloud/common/.github/workflows/unit-tests.yaml15
-rw-r--r--ansible_collections/cloud/common/CHANGELOG.rst14
-rw-r--r--ansible_collections/cloud/common/FILES.json76
-rw-r--r--ansible_collections/cloud/common/MANIFEST.json4
-rw-r--r--ansible_collections/cloud/common/README.md2
-rw-r--r--ansible_collections/cloud/common/changelogs/changelog.yaml12
-rw-r--r--ansible_collections/cloud/common/changelogs/config.yaml32
-rw-r--r--ansible_collections/cloud/common/meta/runtime.yml2
-rw-r--r--ansible_collections/cloud/common/plugins/lookup/turbo_demo.py4
-rw-r--r--ansible_collections/cloud/common/plugins/module_utils/turbo/common.py12
-rw-r--r--ansible_collections/cloud/common/plugins/module_utils/turbo/module.py6
-rw-r--r--ansible_collections/cloud/common/plugins/module_utils/turbo/server.py15
-rw-r--r--ansible_collections/cloud/common/plugins/modules/turbo_fail.py2
-rw-r--r--ansible_collections/cloud/common/plugins/plugin_utils/turbo/lookup.py8
-rw-r--r--ansible_collections/cloud/common/tests/config.yml2
-rw-r--r--ansible_collections/cloud/common/tests/sanity/ignore-2.17.txt1
-rw-r--r--ansible_collections/cloud/common/tests/unit/plugins/module_utils/turbo/conftest.py1
-rw-r--r--ansible_collections/cloud/common/tests/unit/plugins/module_utils/turbo/test_module.py1
-rw-r--r--ansible_collections/cloud/common/tests/unit/plugins/module_utils/turbo/test_turbo_module.py20
-rw-r--r--ansible_collections/cloud/common/tox.ini28
-rw-r--r--ansible_collections/community/aws/.github/workflows/docs-pr.yml3
-rw-r--r--ansible_collections/community/aws/.github/workflows/sanity.yml1
-rw-r--r--ansible_collections/community/aws/CHANGELOG.rst52
-rw-r--r--ansible_collections/community/aws/FILES.json87
-rw-r--r--ansible_collections/community/aws/MANIFEST.json8
-rw-r--r--ansible_collections/community/aws/README.md6
-rw-r--r--ansible_collections/community/aws/changelogs/changelog.yaml120
-rw-r--r--ansible_collections/community/aws/docs/docsite/links.yml2
-rw-r--r--ansible_collections/community/aws/docs/docsite/rst/CHANGELOG.rst52
-rw-r--r--ansible_collections/community/aws/meta/runtime.yml2
-rw-r--r--ansible_collections/community/aws/plugins/module_utils/common.py2
-rw-r--r--ansible_collections/community/aws/plugins/modules/autoscaling_launch_config.py2
-rw-r--r--ansible_collections/community/aws/plugins/modules/ecs_cluster.py6
-rw-r--r--ansible_collections/community/aws/plugins/modules/ecs_service.py4
-rw-r--r--ansible_collections/community/aws/plugins/modules/efs.py3
-rw-r--r--ansible_collections/community/aws/plugins/modules/elb_network_lb.py22
-rw-r--r--ansible_collections/community/aws/plugins/modules/glue_connection.py8
-rw-r--r--ansible_collections/community/aws/tests/integration/targets/config/tasks/main.yaml14
-rw-r--r--ansible_collections/community/aws/tests/integration/targets/ec2_launch_template/tasks/iam_instance_role.yml20
-rw-r--r--ansible_collections/community/aws/tests/integration/targets/ecs_cluster/tasks/20_ecs_service.yml16
-rw-r--r--ansible_collections/community/aws/tests/integration/targets/eks_cluster/tasks/full_test.yml10
-rw-r--r--ansible_collections/community/aws/tests/integration/targets/eks_fargate_profile/tasks/create_eks_cluster.yml2
-rw-r--r--ansible_collections/community/aws/tests/integration/targets/eks_fargate_profile/tasks/full_test.yml38
-rw-r--r--ansible_collections/community/aws/tests/integration/targets/eks_nodegroup/aliases3
-rw-r--r--ansible_collections/community/aws/tests/integration/targets/eks_nodegroup/tasks/dependecies.yml2
-rw-r--r--ansible_collections/community/aws/tests/integration/targets/eks_nodegroup/tasks/full_test.yml70
-rw-r--r--ansible_collections/community/aws/tests/integration/targets/elb_network_lb/tasks/test_modifying_nlb_listeners.yml80
-rw-r--r--ansible_collections/community/aws/tests/integration/targets/elb_target/tasks/lambda_target.yml2
-rw-r--r--ansible_collections/community/aws/tests/sanity/ignore-2.10.txt0
-rw-r--r--ansible_collections/community/aws/tests/sanity/ignore-2.11.txt0
-rw-r--r--ansible_collections/community/aws/tests/sanity/ignore-2.12.txt0
-rw-r--r--ansible_collections/community/aws/tests/sanity/ignore-2.13.txt0
-rw-r--r--ansible_collections/community/aws/tests/sanity/ignore-2.9.txt0
-rw-r--r--ansible_collections/community/azure/.azure-pipelines/README.md3
-rw-r--r--ansible_collections/community/azure/.azure-pipelines/azure-pipelines.yml61
-rwxr-xr-xansible_collections/community/azure/.azure-pipelines/scripts/aggregate-coverage.sh20
-rwxr-xr-xansible_collections/community/azure/.azure-pipelines/scripts/combine-coverage.py60
-rwxr-xr-xansible_collections/community/azure/.azure-pipelines/scripts/process-results.sh24
-rwxr-xr-xansible_collections/community/azure/.azure-pipelines/scripts/publish-codecov.sh27
-rwxr-xr-xansible_collections/community/azure/.azure-pipelines/scripts/report-coverage.sh15
-rwxr-xr-xansible_collections/community/azure/.azure-pipelines/scripts/run-tests.sh34
-rwxr-xr-xansible_collections/community/azure/.azure-pipelines/scripts/time-command.py25
-rw-r--r--ansible_collections/community/azure/.azure-pipelines/templates/coverage.yml39
-rw-r--r--ansible_collections/community/azure/.azure-pipelines/templates/matrix.yml55
-rw-r--r--ansible_collections/community/azure/.azure-pipelines/templates/test.yml45
-rw-r--r--ansible_collections/community/azure/CHANGELOG.rst108
-rw-r--r--ansible_collections/community/azure/COPYING675
-rw-r--r--ansible_collections/community/azure/FILES.json334
-rw-r--r--ansible_collections/community/azure/MANIFEST.json32
-rw-r--r--ansible_collections/community/azure/README.md39
-rw-r--r--ansible_collections/community/azure/changelogs/changelog.yaml228
-rw-r--r--ansible_collections/community/azure/meta/action_groups.yml27
-rw-r--r--ansible_collections/community/azure/meta/runtime.yml596
-rw-r--r--ansible_collections/community/azure/shippable.yml37
-rw-r--r--ansible_collections/community/azure/tests/.gitignore1
-rw-r--r--ansible_collections/community/azure/tests/sanity/ignore-2.10.txt2
-rw-r--r--ansible_collections/community/azure/tests/sanity/ignore-2.11.txt2
-rw-r--r--ansible_collections/community/azure/tests/sanity/ignore-2.12.txt2
-rw-r--r--ansible_collections/community/azure/tests/sanity/ignore-2.13.txt2
-rw-r--r--ansible_collections/community/azure/tests/sanity/ignore-2.14.txt2
-rwxr-xr-xansible_collections/community/azure/tests/utils/ado/ado.sh124
-rwxr-xr-xansible_collections/community/azure/tests/utils/shippable/azure.sh19
-rwxr-xr-xansible_collections/community/azure/tests/utils/shippable/check_matrix.py120
-rwxr-xr-xansible_collections/community/azure/tests/utils/shippable/cloud.sh19
-rwxr-xr-xansible_collections/community/azure/tests/utils/shippable/sanity.sh27
-rwxr-xr-xansible_collections/community/azure/tests/utils/shippable/shippable.sh203
-rwxr-xr-xansible_collections/community/azure/tests/utils/shippable/timing.py16
-rwxr-xr-xansible_collections/community/azure/tests/utils/shippable/timing.sh5
-rw-r--r--ansible_collections/community/ciscosmb/.github/workflows/CI.yml81
-rw-r--r--ansible_collections/community/ciscosmb/.github/workflows/FastCI.yml74
-rw-r--r--ansible_collections/community/ciscosmb/CHANGELOG.rst52
-rw-r--r--ansible_collections/community/ciscosmb/FILES.json20
-rw-r--r--ansible_collections/community/ciscosmb/MANIFEST.json4
-rw-r--r--ansible_collections/community/ciscosmb/README.md9
-rw-r--r--ansible_collections/community/ciscosmb/changelogs/changelog.yaml38
-rw-r--r--ansible_collections/community/ciscosmb/changelogs/fragments/.keep2
-rw-r--r--ansible_collections/community/ciscosmb/plugins/modules/facts.py13
-rw-r--r--ansible_collections/community/ciscosmb/plugins/terminal/ciscosmb.py3
-rw-r--r--ansible_collections/community/ciscosmb/tests/unit/compat/mock.py6
-rw-r--r--ansible_collections/community/ciscosmb/tests/unit/plugins/modules/ciscosmb/test_ciscosmb_facts-SG500-52-K9.py7
-rw-r--r--ansible_collections/community/crypto/.azure-pipelines/azure-pipelines.yml2
-rw-r--r--ansible_collections/community/crypto/.github/workflows/ansible-test.yml3
-rw-r--r--ansible_collections/community/crypto/CHANGELOG.md617
-rw-r--r--ansible_collections/community/crypto/CHANGELOG.rst94
-rw-r--r--ansible_collections/community/crypto/FILES.json332
-rw-r--r--ansible_collections/community/crypto/MANIFEST.json4
-rw-r--r--ansible_collections/community/crypto/README.md2
-rw-r--r--ansible_collections/community/crypto/changelogs/changelog.yaml67
-rw-r--r--ansible_collections/community/crypto/changelogs/config.yaml3
-rw-r--r--ansible_collections/community/crypto/meta/runtime.yml1
-rw-r--r--ansible_collections/community/crypto/plugins/doc_fragments/acme.py178
-rw-r--r--ansible_collections/community/crypto/plugins/module_utils/acme/acme.py91
-rw-r--r--ansible_collections/community/crypto/plugins/module_utils/acme/backend_cryptography.py97
-rw-r--r--ansible_collections/community/crypto/plugins/module_utils/acme/backend_openssl_cli.py95
-rw-r--r--ansible_collections/community/crypto/plugins/module_utils/acme/backends.py102
-rw-r--r--ansible_collections/community/crypto/plugins/module_utils/acme/challenges.py12
-rw-r--r--ansible_collections/community/crypto/plugins/module_utils/acme/orders.py6
-rw-r--r--ansible_collections/community/crypto/plugins/module_utils/acme/utils.py58
-rw-r--r--ansible_collections/community/crypto/plugins/module_utils/argspec.py75
-rw-r--r--ansible_collections/community/crypto/plugins/module_utils/crypto/math.py31
-rw-r--r--ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/certificate.py4
-rw-r--r--ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/certificate_entrust.py14
-rw-r--r--ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/certificate_info.py5
-rw-r--r--ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/certificate_ownca.py20
-rw-r--r--ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/certificate_selfsigned.py20
-rw-r--r--ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/common.py33
-rw-r--r--ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/csr.py4
-rw-r--r--ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/privatekey.py4
-rw-r--r--ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/privatekey_convert.py6
-rw-r--r--ansible_collections/community/crypto/plugins/module_utils/crypto/support.py92
-rw-r--r--ansible_collections/community/crypto/plugins/module_utils/openssh/certificate.py18
-rw-r--r--ansible_collections/community/crypto/plugins/module_utils/time.py171
-rw-r--r--ansible_collections/community/crypto/plugins/modules/acme_account.py22
-rw-r--r--ansible_collections/community/crypto/plugins/modules/acme_account_info.py22
-rw-r--r--ansible_collections/community/crypto/plugins/modules/acme_ari_info.py142
-rw-r--r--ansible_collections/community/crypto/plugins/modules/acme_certificate.py192
-rw-r--r--ansible_collections/community/crypto/plugins/modules/acme_certificate_deactivate_authz.py119
-rw-r--r--ansible_collections/community/crypto/plugins/modules/acme_certificate_renewal_info.py245
-rw-r--r--ansible_collections/community/crypto/plugins/modules/acme_certificate_revoke.py18
-rw-r--r--ansible_collections/community/crypto/plugins/modules/acme_challenge_cert_helper.py8
-rw-r--r--ansible_collections/community/crypto/plugins/modules/acme_inspect.py19
-rw-r--r--ansible_collections/community/crypto/plugins/modules/ecs_certificate.py4
-rw-r--r--ansible_collections/community/crypto/plugins/modules/get_certificate.py8
-rw-r--r--ansible_collections/community/crypto/plugins/modules/x509_certificate_info.py8
-rw-r--r--ansible_collections/community/crypto/plugins/modules/x509_crl.py5
-rw-r--r--ansible_collections/community/crypto/tests/integration/targets/acme_certificate_deactivate_authz/aliases10
-rw-r--r--ansible_collections/community/crypto/tests/integration/targets/acme_certificate_deactivate_authz/meta/main.yml8
-rw-r--r--ansible_collections/community/crypto/tests/integration/targets/acme_certificate_deactivate_authz/tasks/impl.yml154
-rw-r--r--ansible_collections/community/crypto/tests/integration/targets/acme_certificate_deactivate_authz/tasks/main.yml40
-rw-r--r--ansible_collections/community/crypto/tests/integration/targets/acme_certificate_deactivate_authz/tests/validate.yml17
-rw-r--r--ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/aliases10
-rw-r--r--ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/meta/main.yml8
-rw-r--r--ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/tasks/impl.yml145
-rw-r--r--ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/tasks/main.yml40
-rw-r--r--ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/tasks/obtain-cert.yml159
-rw-r--r--ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/tests/validate.yml47
-rw-r--r--ansible_collections/community/crypto/tests/integration/targets/acme_inspect/tasks/impl.yml10
-rw-r--r--ansible_collections/community/crypto/tests/integration/targets/x509_certificate/tasks/ownca.yml16
-rw-r--r--ansible_collections/community/crypto/tests/integration/targets/x509_certificate/tasks/selfsigned.yml12
-rw-r--r--ansible_collections/community/crypto/tests/integration/targets/x509_certificate/tests/validate_ownca.yml5
-rw-r--r--ansible_collections/community/crypto/tests/integration/targets/x509_certificate/tests/validate_selfsigned.yml5
-rw-r--r--ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/backend_data.py89
-rw-r--r--ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_1.txt38
-rw-r--r--ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_1.txt.license3
-rw-r--r--ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2-b.txt57
-rw-r--r--ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2-b.txt.license3
-rw-r--r--ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2.pem19
-rw-r--r--ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2.pem.license3
-rw-r--r--ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2.txt56
-rw-r--r--ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2.txt.license3
-rw-r--r--ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/test_backend_cryptography.py57
-rw-r--r--ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/test_backend_openssl_cli.py59
-rw-r--r--ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/test_utils.py97
-rw-r--r--ansible_collections/community/crypto/tests/unit/plugins/module_utils/crypto/test_math.py117
-rw-r--r--ansible_collections/community/crypto/tests/unit/plugins/module_utils/test_time.py323
-rw-r--r--ansible_collections/community/dns/.github/workflows/ansible-test.yml65
-rw-r--r--ansible_collections/community/dns/.github/workflows/ee.yml18
-rw-r--r--ansible_collections/community/dns/.github/workflows/extra-tests.yml9
-rw-r--r--ansible_collections/community/dns/CHANGELOG.md412
-rw-r--r--ansible_collections/community/dns/CHANGELOG.rst39
-rw-r--r--ansible_collections/community/dns/FILES.json74
-rw-r--r--ansible_collections/community/dns/MANIFEST.json8
-rw-r--r--ansible_collections/community/dns/README.md3
-rw-r--r--ansible_collections/community/dns/changelogs/changelog.yaml49
-rw-r--r--ansible_collections/community/dns/docs/docsite/rst/hetzner_guide.rst2
-rw-r--r--ansible_collections/community/dns/meta/runtime.yml6
-rw-r--r--ansible_collections/community/dns/plugins/doc_fragments/inventory_records.py7
-rw-r--r--ansible_collections/community/dns/plugins/doc_fragments/options.py5
-rw-r--r--ansible_collections/community/dns/plugins/inventory/hetzner_dns_records.py12
-rw-r--r--ansible_collections/community/dns/plugins/inventory/hosttech_dns_records.py11
-rw-r--r--ansible_collections/community/dns/plugins/lookup/lookup.py19
-rw-r--r--ansible_collections/community/dns/plugins/lookup/lookup_as_dict.py19
-rw-r--r--ansible_collections/community/dns/plugins/module_utils/conversion/converter.py16
-rw-r--r--ansible_collections/community/dns/plugins/module_utils/options.py2
-rw-r--r--ansible_collections/community/dns/plugins/module_utils/provider.py4
-rw-r--r--ansible_collections/community/dns/plugins/module_utils/resolver.py9
-rw-r--r--ansible_collections/community/dns/plugins/modules/hetzner_dns_record.py7
-rw-r--r--ansible_collections/community/dns/plugins/modules/hetzner_dns_record_set.py7
-rw-r--r--ansible_collections/community/dns/plugins/modules/hosttech_dns_records.py129
-rw-r--r--ansible_collections/community/dns/plugins/plugin_utils/inventory/records.py26
-rw-r--r--ansible_collections/community/dns/plugins/public_suffix_list.dat132
-rw-r--r--ansible_collections/community/dns/tests/integration/targets/filter_txt/tasks/main.yml44
-rw-r--r--ansible_collections/community/dns/tests/unit/plugins/inventory/test_hetzner_dns_records.py4
-rw-r--r--ansible_collections/community/dns/tests/unit/plugins/inventory/test_hosttech_dns_records.py4
-rw-r--r--ansible_collections/community/dns/tests/unit/plugins/lookup/test_lookup.py102
-rw-r--r--ansible_collections/community/dns/tests/unit/plugins/lookup/test_lookup_as_dict.py97
-rw-r--r--ansible_collections/community/dns/tests/unit/plugins/module_utils/resolver_helper.py3
-rw-r--r--ansible_collections/community/dns/tests/unit/plugins/modules/test_hetzner_dns_record_set_info.py19
-rw-r--r--ansible_collections/community/dns/tests/unit/plugins/plugin_utils/test_unsafe.py133
-rw-r--r--ansible_collections/community/docker/.azure-pipelines/azure-pipelines.yml2
-rw-r--r--ansible_collections/community/docker/.github/workflows/ansible-test.yml3
-rw-r--r--ansible_collections/community/docker/CHANGELOG.md684
-rw-r--r--ansible_collections/community/docker/CHANGELOG.rst108
-rw-r--r--ansible_collections/community/docker/FILES.json114
-rw-r--r--ansible_collections/community/docker/MANIFEST.json4
-rw-r--r--ansible_collections/community/docker/README.md3
-rw-r--r--ansible_collections/community/docker/changelogs/changelog.yaml96
-rw-r--r--ansible_collections/community/docker/changelogs/config.yaml2
-rw-r--r--ansible_collections/community/docker/docs/docsite/rst/scenario_guide.rst7
-rw-r--r--ansible_collections/community/docker/meta/runtime.yml7
-rw-r--r--ansible_collections/community/docker/plugins/connection/docker.py2
-rw-r--r--ansible_collections/community/docker/plugins/connection/docker_api.py1
-rw-r--r--ansible_collections/community/docker/plugins/connection/nsenter.py4
-rw-r--r--ansible_collections/community/docker/plugins/doc_fragments/docker.py9
-rw-r--r--ansible_collections/community/docker/plugins/inventory/docker_containers.py1
-rw-r--r--ansible_collections/community/docker/plugins/inventory/docker_swarm.py3
-rw-r--r--ansible_collections/community/docker/plugins/module_utils/_api/transport/basehttpadapter.py12
-rw-r--r--ansible_collections/community/docker/plugins/module_utils/module_container/base.py2
-rw-r--r--ansible_collections/community/docker/plugins/module_utils/module_container/docker_api.py18
-rw-r--r--ansible_collections/community/docker/plugins/module_utils/selectors.py21
-rw-r--r--ansible_collections/community/docker/plugins/module_utils/util.py15
-rw-r--r--ansible_collections/community/docker/plugins/modules/docker_compose.py5
-rw-r--r--ansible_collections/community/docker/plugins/modules/docker_container.py19
-rw-r--r--ansible_collections/community/docker/plugins/modules/docker_container_exec.py3
-rw-r--r--ansible_collections/community/docker/plugins/modules/docker_image_build.py247
-rw-r--r--ansible_collections/community/docker/plugins/modules/docker_network.py35
-rw-r--r--ansible_collections/community/docker/plugins/modules/docker_prune.py60
-rw-r--r--ansible_collections/community/docker/plugins/modules/docker_swarm_service.py16
-rw-r--r--ansible_collections/community/docker/plugins/plugin_utils/socket_handler.py2
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_compose_v2/tasks/main.yml3
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_compose_v2_pull/tasks/main.yml6
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_build/tasks/test.yml12
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_build/tasks/tests/options.yml85
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_build/templates/SecretsDockerfile7
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_prune/tasks/main.yml22
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_swarm_service/vars/main.yml1
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/generic_connection_tests/tasks/main.yml3
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker/tasks/main.yml3
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/main.yml3
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Alpine.yml2
-rw-r--r--ansible_collections/community/docker/tests/sanity/ignore-2.11.txt1
-rw-r--r--ansible_collections/community/docker/tests/sanity/ignore-2.12.txt1
-rw-r--r--ansible_collections/community/docker/tests/sanity/ignore-2.13.txt1
-rw-r--r--ansible_collections/community/docker/tests/sanity/ignore-2.14.txt1
-rw-r--r--ansible_collections/community/docker/tests/sanity/ignore-2.15.txt1
-rw-r--r--ansible_collections/community/docker/tests/sanity/ignore-2.16.txt1
-rw-r--r--ansible_collections/community/docker/tests/unit/plugins/plugin_utils/test_unsafe.py133
-rw-r--r--ansible_collections/community/general/.azure-pipelines/azure-pipelines.yml6
-rw-r--r--ansible_collections/community/general/.github/BOTMETA.yml60
-rw-r--r--ansible_collections/community/general/.github/workflows/ansible-test.yml3
-rw-r--r--ansible_collections/community/general/.gitignore4
-rw-r--r--ansible_collections/community/general/CHANGELOG.md916
-rw-r--r--ansible_collections/community/general/CHANGELOG.rst848
-rw-r--r--ansible_collections/community/general/CONTRIBUTING.md4
-rw-r--r--ansible_collections/community/general/FILES.json629
-rw-r--r--ansible_collections/community/general/MANIFEST.json4
-rw-r--r--ansible_collections/community/general/README.md9
-rw-r--r--ansible_collections/community/general/changelogs/changelog.yaml1808
-rw-r--r--ansible_collections/community/general/changelogs/config.yaml3
-rw-r--r--ansible_collections/community/general/meta/runtime.yml4099
-rw-r--r--ansible_collections/community/general/plugins/become/machinectl.py13
-rw-r--r--ansible_collections/community/general/plugins/become/run0.py128
-rw-r--r--ansible_collections/community/general/plugins/callback/opentelemetry.py94
-rw-r--r--ansible_collections/community/general/plugins/callback/timestamp.py127
-rw-r--r--ansible_collections/community/general/plugins/callback/yaml.py10
-rw-r--r--ansible_collections/community/general/plugins/doc_fragments/consul.py1
-rw-r--r--ansible_collections/community/general/plugins/doc_fragments/django.py53
-rw-r--r--ansible_collections/community/general/plugins/doc_fragments/proxmox.py10
-rw-r--r--ansible_collections/community/general/plugins/doc_fragments/rackspace.py120
-rw-r--r--ansible_collections/community/general/plugins/lookup/merge_variables.py7
-rw-r--r--ansible_collections/community/general/plugins/module_utils/cmd_runner.py11
-rw-r--r--ansible_collections/community/general/plugins/module_utils/django.py85
-rw-r--r--ansible_collections/community/general/plugins/module_utils/gandi_livedns_api.py8
-rw-r--r--ansible_collections/community/general/plugins/module_utils/gitlab.py5
-rw-r--r--ansible_collections/community/general/plugins/module_utils/homebrew.py115
-rw-r--r--ansible_collections/community/general/plugins/module_utils/mh/mixins/deps.py47
-rw-r--r--ansible_collections/community/general/plugins/module_utils/mh/mixins/vars.py6
-rw-r--r--ansible_collections/community/general/plugins/module_utils/mh/module_helper.py42
-rw-r--r--ansible_collections/community/general/plugins/module_utils/module_helper.py10
-rw-r--r--ansible_collections/community/general/plugins/module_utils/puppet.py1
-rw-r--r--ansible_collections/community/general/plugins/module_utils/python_runner.py34
-rw-r--r--ansible_collections/community/general/plugins/module_utils/rax.py334
-rw-r--r--ansible_collections/community/general/plugins/module_utils/redhat.py240
-rw-r--r--ansible_collections/community/general/plugins/module_utils/rundeck.py4
-rw-r--r--ansible_collections/community/general/plugins/module_utils/vardict.py2
-rw-r--r--ansible_collections/community/general/plugins/modules/aix_lvol.py19
-rw-r--r--ansible_collections/community/general/plugins/modules/ansible_galaxy_install.py60
-rw-r--r--ansible_collections/community/general/plugins/modules/apt_rpm.py30
-rw-r--r--ansible_collections/community/general/plugins/modules/btrfs_subvolume.py9
-rw-r--r--ansible_collections/community/general/plugins/modules/cloudflare_dns.py8
-rw-r--r--ansible_collections/community/general/plugins/modules/consul_policy.py2
-rw-r--r--ansible_collections/community/general/plugins/modules/consul_role.py2
-rw-r--r--ansible_collections/community/general/plugins/modules/consul_session.py2
-rw-r--r--ansible_collections/community/general/plugins/modules/consul_token.py2
-rw-r--r--ansible_collections/community/general/plugins/modules/cpanm.py26
-rw-r--r--ansible_collections/community/general/plugins/modules/django_command.py83
-rw-r--r--ansible_collections/community/general/plugins/modules/django_manage.py92
-rw-r--r--ansible_collections/community/general/plugins/modules/flowdock.py211
-rw-r--r--ansible_collections/community/general/plugins/modules/gandi_livedns.py37
-rw-r--r--ansible_collections/community/general/plugins/modules/gconftool2.py1
-rw-r--r--ansible_collections/community/general/plugins/modules/gconftool2_info.py1
-rw-r--r--ansible_collections/community/general/plugins/modules/gitlab_runner.py53
-rw-r--r--ansible_collections/community/general/plugins/modules/homebrew.py157
-rw-r--r--ansible_collections/community/general/plugins/modules/homebrew_cask.py70
-rw-r--r--ansible_collections/community/general/plugins/modules/hponcfg.py1
-rw-r--r--ansible_collections/community/general/plugins/modules/installp.py13
-rw-r--r--ansible_collections/community/general/plugins/modules/irc.py31
-rw-r--r--ansible_collections/community/general/plugins/modules/kernel_blacklist.py1
-rw-r--r--ansible_collections/community/general/plugins/modules/keycloak_client.py5
-rw-r--r--ansible_collections/community/general/plugins/modules/keycloak_identity_provider.py2
-rw-r--r--ansible_collections/community/general/plugins/modules/keycloak_user_federation.py3
-rw-r--r--ansible_collections/community/general/plugins/modules/ldap_search.py2
-rw-r--r--ansible_collections/community/general/plugins/modules/locale_gen.py1
-rw-r--r--ansible_collections/community/general/plugins/modules/lvg.py22
-rw-r--r--ansible_collections/community/general/plugins/modules/lvol.py84
-rw-r--r--ansible_collections/community/general/plugins/modules/lxd_container.py2
-rw-r--r--ansible_collections/community/general/plugins/modules/macports.py12
-rw-r--r--ansible_collections/community/general/plugins/modules/mksysb.py1
-rw-r--r--ansible_collections/community/general/plugins/modules/opkg.py1
-rw-r--r--ansible_collections/community/general/plugins/modules/parted.py9
-rw-r--r--ansible_collections/community/general/plugins/modules/pipx.py1
-rw-r--r--ansible_collections/community/general/plugins/modules/pipx_info.py1
-rw-r--r--ansible_collections/community/general/plugins/modules/pkg5.py15
-rw-r--r--ansible_collections/community/general/plugins/modules/pkgin.py25
-rw-r--r--ansible_collections/community/general/plugins/modules/portinstall.py26
-rw-r--r--ansible_collections/community/general/plugins/modules/proxmox.py47
-rw-r--r--ansible_collections/community/general/plugins/modules/proxmox_disk.py3
-rw-r--r--ansible_collections/community/general/plugins/modules/proxmox_domain_info.py4
-rw-r--r--ansible_collections/community/general/plugins/modules/proxmox_group_info.py4
-rw-r--r--ansible_collections/community/general/plugins/modules/proxmox_kvm.py17
-rw-r--r--ansible_collections/community/general/plugins/modules/proxmox_nic.py3
-rw-r--r--ansible_collections/community/general/plugins/modules/proxmox_node_info.py4
-rw-r--r--ansible_collections/community/general/plugins/modules/proxmox_pool.py7
-rw-r--r--ansible_collections/community/general/plugins/modules/proxmox_pool_member.py7
-rw-r--r--ansible_collections/community/general/plugins/modules/proxmox_snap.py7
-rw-r--r--ansible_collections/community/general/plugins/modules/proxmox_storage_contents_info.py4
-rw-r--r--ansible_collections/community/general/plugins/modules/proxmox_storage_info.py4
-rw-r--r--ansible_collections/community/general/plugins/modules/proxmox_tasks_info.py10
-rw-r--r--ansible_collections/community/general/plugins/modules/proxmox_template.py3
-rw-r--r--ansible_collections/community/general/plugins/modules/proxmox_user_info.py4
-rw-r--r--ansible_collections/community/general/plugins/modules/proxmox_vm_info.py10
-rw-r--r--ansible_collections/community/general/plugins/modules/puppet.py19
-rw-r--r--ansible_collections/community/general/plugins/modules/rax.py903
-rw-r--r--ansible_collections/community/general/plugins/modules/rax_cbs.py235
-rw-r--r--ansible_collections/community/general/plugins/modules/rax_cbs_attachments.py226
-rw-r--r--ansible_collections/community/general/plugins/modules/rax_cdb.py266
-rw-r--r--ansible_collections/community/general/plugins/modules/rax_cdb_database.py179
-rw-r--r--ansible_collections/community/general/plugins/modules/rax_cdb_user.py227
-rw-r--r--ansible_collections/community/general/plugins/modules/rax_clb.py320
-rw-r--r--ansible_collections/community/general/plugins/modules/rax_clb_nodes.py291
-rw-r--r--ansible_collections/community/general/plugins/modules/rax_clb_ssl.py289
-rw-r--r--ansible_collections/community/general/plugins/modules/rax_dns.py180
-rw-r--r--ansible_collections/community/general/plugins/modules/rax_dns_record.py358
-rw-r--r--ansible_collections/community/general/plugins/modules/rax_facts.py152
-rw-r--r--ansible_collections/community/general/plugins/modules/rax_files.py400
-rw-r--r--ansible_collections/community/general/plugins/modules/rax_files_objects.py556
-rw-r--r--ansible_collections/community/general/plugins/modules/rax_identity.py110
-rw-r--r--ansible_collections/community/general/plugins/modules/rax_keypair.py179
-rw-r--r--ansible_collections/community/general/plugins/modules/rax_meta.py182
-rw-r--r--ansible_collections/community/general/plugins/modules/rax_mon_alarm.py235
-rw-r--r--ansible_collections/community/general/plugins/modules/rax_mon_check.py329
-rw-r--r--ansible_collections/community/general/plugins/modules/rax_mon_entity.py201
-rw-r--r--ansible_collections/community/general/plugins/modules/rax_mon_notification.py182
-rw-r--r--ansible_collections/community/general/plugins/modules/rax_mon_notification_plan.py191
-rw-r--r--ansible_collections/community/general/plugins/modules/rax_network.py146
-rw-r--r--ansible_collections/community/general/plugins/modules/rax_queue.py147
-rw-r--r--ansible_collections/community/general/plugins/modules/rax_scaling_group.py441
-rw-r--r--ansible_collections/community/general/plugins/modules/rax_scaling_policy.py294
-rw-r--r--ansible_collections/community/general/plugins/modules/redfish_command.py17
-rw-r--r--ansible_collections/community/general/plugins/modules/redfish_config.py17
-rw-r--r--ansible_collections/community/general/plugins/modules/redfish_info.py17
-rw-r--r--ansible_collections/community/general/plugins/modules/redhat_subscription.py15
-rw-r--r--ansible_collections/community/general/plugins/modules/slackpkg.py18
-rw-r--r--ansible_collections/community/general/plugins/modules/snap.py5
-rw-r--r--ansible_collections/community/general/plugins/modules/snap_alias.py1
-rw-r--r--ansible_collections/community/general/plugins/modules/stackdriver.py228
-rw-r--r--ansible_collections/community/general/plugins/modules/svr4pkg.py2
-rw-r--r--ansible_collections/community/general/plugins/modules/swdepot.py17
-rw-r--r--ansible_collections/community/general/plugins/modules/webfaction_app.py213
-rw-r--r--ansible_collections/community/general/plugins/modules/webfaction_db.py209
-rw-r--r--ansible_collections/community/general/plugins/modules/webfaction_domain.py184
-rw-r--r--ansible_collections/community/general/plugins/modules/webfaction_mailbox.py152
-rw-r--r--ansible_collections/community/general/plugins/modules/webfaction_site.py223
-rw-r--r--ansible_collections/community/general/plugins/modules/xfconf.py3
-rw-r--r--ansible_collections/community/general/plugins/modules/xfconf_info.py3
-rw-r--r--ansible_collections/community/general/tests/integration/targets/callback_timestamp/aliases6
-rw-r--r--ansible_collections/community/general/tests/integration/targets/callback_timestamp/tasks/main.yml66
-rw-r--r--ansible_collections/community/general/tests/integration/targets/cpanm/tasks/main.yml3
-rw-r--r--ansible_collections/community/general/tests/integration/targets/django_manage/tasks/main.yaml5
-rw-r--r--ansible_collections/community/general/tests/integration/targets/ejabberd_user/tasks/main.yml3
-rw-r--r--ansible_collections/community/general/tests/integration/targets/gandi_livedns/tasks/create_record.yml25
-rw-r--r--ansible_collections/community/general/tests/integration/targets/gandi_livedns/tasks/update_record.yml24
-rw-r--r--ansible_collections/community/general/tests/integration/targets/homebrew/handlers/main.yml11
-rw-r--r--ansible_collections/community/general/tests/integration/targets/homebrew/tasks/casks.yml2
-rw-r--r--ansible_collections/community/general/tests/integration/targets/homebrew/tasks/docker.yml23
-rw-r--r--ansible_collections/community/general/tests/integration/targets/homebrew/tasks/formulae.yml2
-rw-r--r--ansible_collections/community/general/tests/integration/targets/homebrew/tasks/main.yml5
-rw-r--r--ansible_collections/community/general/tests/integration/targets/keycloak_identity_provider/tasks/main.yml1
-rwxr-xr-xansible_collections/community/general/tests/integration/targets/lookup_merge_variables/runme.sh3
-rw-r--r--ansible_collections/community/general/tests/integration/targets/lookup_merge_variables/test_cross_host_merge_inventory.yml33
-rw-r--r--ansible_collections/community/general/tests/integration/targets/lookup_merge_variables/test_cross_host_merge_play.yml21
-rw-r--r--ansible_collections/community/general/tests/integration/targets/module_helper/library/mdepfail.py5
-rw-r--r--ansible_collections/community/general/tests/integration/targets/module_helper/library/mstate.py1
-rw-r--r--ansible_collections/community/general/tests/integration/targets/snap/tasks/main.yml7
-rw-r--r--ansible_collections/community/general/tests/integration/targets/snap/tasks/test_channel.yml43
-rw-r--r--ansible_collections/community/general/tests/sanity/ignore-2.13.txt5
-rw-r--r--ansible_collections/community/general/tests/sanity/ignore-2.14.txt5
-rw-r--r--ansible_collections/community/general/tests/sanity/ignore-2.15.txt3
-rw-r--r--ansible_collections/community/general/tests/sanity/ignore-2.16.txt3
-rw-r--r--ansible_collections/community/general/tests/sanity/ignore-2.17.txt4
-rw-r--r--ansible_collections/community/general/tests/sanity/ignore-2.18.txt4
-rw-r--r--ansible_collections/community/general/tests/unit/plugins/become/test_run0.py64
-rw-r--r--ansible_collections/community/general/tests/unit/plugins/lookup/test_merge_variables.py182
-rw-r--r--ansible_collections/community/general/tests/unit/plugins/module_utils/test_cmd_runner.py82
-rw-r--r--ansible_collections/community/general/tests/unit/plugins/module_utils/test_python_runner.py223
-rw-r--r--ansible_collections/community/general/tests/unit/plugins/modules/helper.py24
-rw-r--r--ansible_collections/community/general/tests/unit/plugins/modules/test_cpanm.yaml5
-rw-r--r--ansible_collections/community/general/tests/unit/plugins/modules/test_django_command.py13
-rw-r--r--ansible_collections/community/general/tests/unit/plugins/modules/test_django_command.yaml38
-rw-r--r--ansible_collections/community/general/tests/unit/plugins/modules/test_homebrew.py19
-rw-r--r--ansible_collections/community/general/tests/unit/plugins/modules/test_puppet.yaml32
-rw-r--r--ansible_collections/community/general/tests/unit/plugins/plugin_utils/test_unsafe.py133
-rw-r--r--ansible_collections/community/grafana/.github/workflows/ansible-test.yml6
-rw-r--r--ansible_collections/community/grafana/CHANGELOG.rst30
-rw-r--r--ansible_collections/community/grafana/FILES.json187
-rw-r--r--ansible_collections/community/grafana/MANIFEST.json4
-rw-r--r--ansible_collections/community/grafana/README.md3
-rw-r--r--ansible_collections/community/grafana/changelogs/changelog.yaml33
-rw-r--r--ansible_collections/community/grafana/changelogs/fragments/353-docs-add-influxdb-flux-example.yml3
-rw-r--r--ansible_collections/community/grafana/changelogs/fragments/354-fix-find-grafana-versions.yml3
-rw-r--r--ansible_collections/community/grafana/changelogs/fragments/355-rm-dashboard-message-argument.yml3
-rw-r--r--ansible_collections/community/grafana/changelogs/fragments/356-lookup-dashboards-add-custom-certs-verification-logic.yml2
-rw-r--r--ansible_collections/community/grafana/changelogs/fragments/357-module-grafana-silence.yml2
-rw-r--r--ansible_collections/community/grafana/changelogs/fragments/358-role-grafana-silence.yml2
-rw-r--r--ansible_collections/community/grafana/changelogs/fragments/362-plugin-umask.yml2
-rw-r--r--ansible_collections/community/grafana/changelogs/fragments/364-first-datasource-default.yml3
-rw-r--r--ansible_collections/community/grafana/changelogs/fragments/367-dashboard-undo-breaing-change-message.yml3
-rw-r--r--ansible_collections/community/grafana/changelogs/fragments/368-molecule-pin-requests.yml3
-rwxr-xr-xansible_collections/community/grafana/hacking/check_fragment.sh6
-rw-r--r--ansible_collections/community/grafana/hacking/find_grafana_versions.py31
-rw-r--r--ansible_collections/community/grafana/meta/runtime.yml1
-rw-r--r--ansible_collections/community/grafana/molecule/default/converge.yml11
-rw-r--r--ansible_collections/community/grafana/plugins/lookup/grafana_dashboard.py52
-rw-r--r--ansible_collections/community/grafana/plugins/modules/grafana_datasource.py23
-rw-r--r--ansible_collections/community/grafana/plugins/modules/grafana_plugin.py2
-rw-r--r--ansible_collections/community/grafana/plugins/modules/grafana_silence.py369
-rw-r--r--ansible_collections/community/grafana/roles/grafana/README.md7
-rw-r--r--ansible_collections/community/grafana/roles/grafana/defaults/main.yml1
-rw-r--r--ansible_collections/community/grafana/roles/grafana/meta/main.yml2
-rw-r--r--ansible_collections/community/grafana/roles/grafana/tasks/main.yml12
-rw-r--r--ansible_collections/community/grafana/tests/integration/targets/grafana_datasource/tasks/elastic.yml26
-rw-r--r--ansible_collections/community/grafana/tests/integration/targets/grafana_datasource/tasks/postgres.yml2
-rw-r--r--ansible_collections/community/grafana/tests/integration/targets/grafana_silence/defaults/main.yml5
-rwxr-xr-xansible_collections/community/grafana/tests/integration/targets/grafana_silence/runme.sh5
-rw-r--r--ansible_collections/community/grafana/tests/integration/targets/grafana_silence/site.yml6
-rw-r--r--ansible_collections/community/grafana/tests/integration/targets/grafana_silence/tasks/main.yml89
-rw-r--r--ansible_collections/community/grafana/tests/sanity/ignore-2.15.txt3
-rw-r--r--ansible_collections/community/grafana/tests/sanity/ignore-2.16.txt3
-rw-r--r--ansible_collections/community/grafana/tests/sanity/ignore-2.18.txt1
-rw-r--r--ansible_collections/community/grafana/tests/unit/modules/grafana/grafana_plugin/test_grafana_plugin.py2
-rw-r--r--ansible_collections/community/grafana/tests/unit/modules/grafana/grafana_silence/test_grafana_silence.py211
-rw-r--r--ansible_collections/community/hrobot/.github/workflows/ansible-test.yml38
-rw-r--r--ansible_collections/community/hrobot/.github/workflows/ee.yml18
-rw-r--r--ansible_collections/community/hrobot/.github/workflows/extra-tests.yml9
-rw-r--r--ansible_collections/community/hrobot/CHANGELOG.md156
-rw-r--r--ansible_collections/community/hrobot/CHANGELOG.rst28
-rw-r--r--ansible_collections/community/hrobot/FILES.json20
-rw-r--r--ansible_collections/community/hrobot/MANIFEST.json8
-rw-r--r--ansible_collections/community/hrobot/README.md2
-rw-r--r--ansible_collections/community/hrobot/changelogs/changelog.yaml31
-rw-r--r--ansible_collections/community/hrobot/meta/runtime.yml2
-rw-r--r--ansible_collections/community/hrobot/plugins/inventory/robot.py54
-rw-r--r--ansible_collections/community/hrobot/tests/unit/plugins/inventory/test_robot.py2
-rw-r--r--ansible_collections/community/mongodb/CHANGELOG.rst13
-rw-r--r--ansible_collections/community/mongodb/FILES.json8
-rw-r--r--ansible_collections/community/mongodb/MANIFEST.json4
-rw-r--r--ansible_collections/community/mongodb/README.md1
-rw-r--r--ansible_collections/community/mongodb/changelogs/changelog.yaml5
-rw-r--r--ansible_collections/community/mongodb/plugins/modules/mongodb_shell.py27
-rw-r--r--ansible_collections/community/okd/.config/ansible-lint.yml5
-rw-r--r--ansible_collections/community/okd/.github/patchback.yml4
-rw-r--r--ansible_collections/community/okd/.github/settings.yml6
-rw-r--r--ansible_collections/community/okd/.github/stale.yml60
-rw-r--r--ansible_collections/community/okd/.github/workflows/changelog.yml23
-rw-r--r--ansible_collections/community/okd/.github/workflows/linters.yml29
-rw-r--r--ansible_collections/community/okd/.github/workflows/sanity-tests.yml23
-rw-r--r--ansible_collections/community/okd/.github/workflows/unit-tests.yml21
-rw-r--r--ansible_collections/community/okd/.yamllint44
-rw-r--r--ansible_collections/community/okd/CHANGELOG.rst28
-rw-r--r--ansible_collections/community/okd/FILES.json770
-rw-r--r--ansible_collections/community/okd/MANIFEST.json6
-rw-r--r--ansible_collections/community/okd/Makefile4
-rw-r--r--ansible_collections/community/okd/OWNERS_ALIASES8
-rw-r--r--ansible_collections/community/okd/README.md33
-rw-r--r--ansible_collections/community/okd/changelogs/.plugin-cache.yaml92
-rw-r--r--ansible_collections/community/okd/changelogs/changelog.yaml25
-rw-r--r--ansible_collections/community/okd/changelogs/config.yaml32
-rw-r--r--ansible_collections/community/okd/ci/Dockerfile20
-rwxr-xr-xansible_collections/community/okd/ci/downstream.sh11
-rw-r--r--ansible_collections/community/okd/docs/community.okd.k8s_module.rst72
-rw-r--r--ansible_collections/community/okd/docs/community.okd.oc_connection.rst2
-rw-r--r--ansible_collections/community/okd/docs/community.okd.openshift_adm_groups_sync_module.rst107
-rw-r--r--ansible_collections/community/okd/docs/community.okd.openshift_adm_migrate_template_instances_module.rst67
-rw-r--r--ansible_collections/community/okd/docs/community.okd.openshift_adm_prune_auth_module.rst55
-rw-r--r--ansible_collections/community/okd/docs/community.okd.openshift_adm_prune_builds_module.rst2
-rw-r--r--ansible_collections/community/okd/docs/community.okd.openshift_adm_prune_deployments_module.rst57
-rw-r--r--ansible_collections/community/okd/docs/community.okd.openshift_adm_prune_images_module.rst55
-rw-r--r--ansible_collections/community/okd/docs/community.okd.openshift_auth_module.rst57
-rw-r--r--ansible_collections/community/okd/docs/community.okd.openshift_import_image_module.rst55
-rw-r--r--ansible_collections/community/okd/docs/community.okd.openshift_inventory.rst47
-rw-r--r--ansible_collections/community/okd/docs/community.okd.openshift_process_module.rst66
-rw-r--r--ansible_collections/community/okd/docs/community.okd.openshift_registry_info_module.rst57
-rw-r--r--ansible_collections/community/okd/docs/community.okd.openshift_route_module.rst67
-rw-r--r--ansible_collections/community/okd/meta/runtime.yml9
-rw-r--r--ansible_collections/community/okd/molecule/default/converge.yml14
-rw-r--r--ansible_collections/community/okd/molecule/default/files/pod-template.yaml16
-rw-r--r--ansible_collections/community/okd/molecule/default/files/simple-template.yaml36
-rw-r--r--ansible_collections/community/okd/molecule/default/molecule.yml9
-rw-r--r--ansible_collections/community/okd/molecule/default/prepare.yml12
-rw-r--r--ansible_collections/community/okd/molecule/default/roles/openshift_adm_groups/library/openshift_ldap_entry_info.py1
-rw-r--r--ansible_collections/community/okd/molecule/default/roles/openshift_adm_groups/tasks/activeDirectory.yml444
-rw-r--r--ansible_collections/community/okd/molecule/default/roles/openshift_adm_groups/tasks/augmentedActiveDirectory.yml323
-rw-r--r--ansible_collections/community/okd/molecule/default/roles/openshift_adm_groups/tasks/main.yml47
-rw-r--r--ansible_collections/community/okd/molecule/default/roles/openshift_adm_groups/tasks/python-ldap-not-installed.yml1
-rw-r--r--ansible_collections/community/okd/molecule/default/roles/openshift_adm_groups/tasks/rfc2307.yml907
-rw-r--r--ansible_collections/community/okd/molecule/default/tasks/openshift_adm_prune_auth_clusterroles.yml575
-rw-r--r--ansible_collections/community/okd/molecule/default/tasks/openshift_adm_prune_auth_roles.yml653
-rw-r--r--ansible_collections/community/okd/molecule/default/tasks/openshift_adm_prune_deployments.yml438
-rw-r--r--ansible_collections/community/okd/molecule/default/tasks/openshift_builds.yml477
-rw-r--r--ansible_collections/community/okd/molecule/default/tasks/openshift_import_images.yml335
-rw-r--r--ansible_collections/community/okd/molecule/default/tasks/openshift_prune_images.yml14
-rw-r--r--ansible_collections/community/okd/molecule/default/tasks/openshift_route.yml12
-rw-r--r--ansible_collections/community/okd/molecule/default/vars/main.yml22
-rw-r--r--ansible_collections/community/okd/plugins/connection/oc.py36
-rw-r--r--ansible_collections/community/okd/plugins/inventory/openshift.py137
-rw-r--r--ansible_collections/community/okd/plugins/module_utils/k8s.py251
-rw-r--r--ansible_collections/community/okd/plugins/module_utils/openshift_adm_prune_auth.py301
-rw-r--r--ansible_collections/community/okd/plugins/module_utils/openshift_adm_prune_deployments.py55
-rw-r--r--ansible_collections/community/okd/plugins/module_utils/openshift_adm_prune_images.py130
-rw-r--r--ansible_collections/community/okd/plugins/module_utils/openshift_builds.py159
-rw-r--r--ansible_collections/community/okd/plugins/module_utils/openshift_common.py18
-rw-r--r--ansible_collections/community/okd/plugins/module_utils/openshift_docker_image.py59
-rw-r--r--ansible_collections/community/okd/plugins/module_utils/openshift_groups.py209
-rw-r--r--ansible_collections/community/okd/plugins/module_utils/openshift_images_common.py138
-rw-r--r--ansible_collections/community/okd/plugins/module_utils/openshift_import_image.py134
-rw-r--r--ansible_collections/community/okd/plugins/module_utils/openshift_ldap.py364
-rw-r--r--ansible_collections/community/okd/plugins/module_utils/openshift_process.py14
-rw-r--r--ansible_collections/community/okd/plugins/module_utils/openshift_registry.py74
-rw-r--r--ansible_collections/community/okd/plugins/modules/k8s.py79
-rw-r--r--ansible_collections/community/okd/plugins/modules/openshift_adm_groups_sync.py73
-rw-r--r--ansible_collections/community/okd/plugins/modules/openshift_adm_migrate_template_instances.py28
-rw-r--r--ansible_collections/community/okd/plugins/modules/openshift_adm_prune_auth.py43
-rw-r--r--ansible_collections/community/okd/plugins/modules/openshift_adm_prune_builds.py36
-rw-r--r--ansible_collections/community/okd/plugins/modules/openshift_adm_prune_deployments.py39
-rw-r--r--ansible_collections/community/okd/plugins/modules/openshift_adm_prune_images.py44
-rw-r--r--ansible_collections/community/okd/plugins/modules/openshift_auth.py237
-rw-r--r--ansible_collections/community/okd/plugins/modules/openshift_build.py66
-rw-r--r--ansible_collections/community/okd/plugins/modules/openshift_import_image.py41
-rw-r--r--ansible_collections/community/okd/plugins/modules/openshift_process.py46
-rw-r--r--ansible_collections/community/okd/plugins/modules/openshift_registry_info.py35
-rw-r--r--ansible_collections/community/okd/plugins/modules/openshift_route.py299
-rw-r--r--ansible_collections/community/okd/requirements.yml3
-rw-r--r--ansible_collections/community/okd/setup.cfg3
-rw-r--r--ansible_collections/community/okd/test-requirements.txt1
-rw-r--r--ansible_collections/community/okd/tests/config.yml3
-rw-r--r--ansible_collections/community/okd/tests/sanity/ignore-2.16.txt3
-rw-r--r--ansible_collections/community/okd/tests/sanity/ignore-2.17.txt3
-rw-r--r--ansible_collections/community/okd/tests/sanity/requirements.yml5
-rw-r--r--ansible_collections/community/okd/tests/unit/plugins/module_utils/test_ldap_dn.py42
-rw-r--r--ansible_collections/community/okd/tests/unit/plugins/module_utils/test_ldap_sync_config.py30
-rw-r--r--ansible_collections/community/okd/tests/unit/plugins/module_utils/test_openshift_docker_image.py74
-rw-r--r--ansible_collections/community/okd/tox.ini (renamed from ansible_collections/junipernetworks/junos/tox.ini)33
-rw-r--r--ansible_collections/community/postgresql/.azure-pipelines/azure-pipelines.yml41
-rw-r--r--ansible_collections/community/postgresql/CHANGELOG.rst18
-rw-r--r--ansible_collections/community/postgresql/CONTRIBUTING.md85
-rw-r--r--ansible_collections/community/postgresql/FILES.json25
-rw-r--r--ansible_collections/community/postgresql/MANIFEST.json4
-rw-r--r--ansible_collections/community/postgresql/README.md37
-rw-r--r--ansible_collections/community/postgresql/changelogs/changelog.yaml23
-rw-r--r--ansible_collections/community/postgresql/plugins/modules/postgresql_db.py2
-rw-r--r--ansible_collections/community/postgresql/plugins/modules/postgresql_ext.py5
-rw-r--r--ansible_collections/community/postgresql/plugins/modules/postgresql_idx.py5
-rw-r--r--ansible_collections/community/postgresql/plugins/modules/postgresql_privs.py2
-rw-r--r--ansible_collections/community/postgresql/tests/sanity/ignore-2.18.txt5
-rw-r--r--ansible_collections/community/sap/.github/ISSUE_TEMPLATE/bug_report.yml149
-rw-r--r--ansible_collections/community/sap/.github/ISSUE_TEMPLATE/config.yml27
-rw-r--r--ansible_collections/community/sap/.github/ISSUE_TEMPLATE/documentation_report.yml125
-rw-r--r--ansible_collections/community/sap/.github/ISSUE_TEMPLATE/feature_request.yml69
-rw-r--r--ansible_collections/community/sap/.github/workflows/ansible-test.yml126
-rw-r--r--ansible_collections/community/sap/.vscode/extensions.json5
-rw-r--r--ansible_collections/community/sap/CHANGELOG.rst87
-rw-r--r--ansible_collections/community/sap/CONTRIBUTING.md3
-rw-r--r--ansible_collections/community/sap/FILES.json544
-rw-r--r--ansible_collections/community/sap/MAINTAINERS2
-rw-r--r--ansible_collections/community/sap/MAINTAINING.md3
-rw-r--r--ansible_collections/community/sap/MANIFEST.json33
-rw-r--r--ansible_collections/community/sap/README.md181
-rw-r--r--ansible_collections/community/sap/REVIEW_CHECKLIST.md3
-rw-r--r--ansible_collections/community/sap/changelogs/changelog.yaml63
-rw-r--r--ansible_collections/community/sap/changelogs/config.yaml30
-rw-r--r--ansible_collections/community/sap/codecov.yml2
-rw-r--r--ansible_collections/community/sap/meta/runtime.yml33
-rw-r--r--ansible_collections/community/sap/plugins/doc_fragments/__init__.py0
-rw-r--r--ansible_collections/community/sap/plugins/module_utils/__init__.py0
-rw-r--r--ansible_collections/community/sap/plugins/modules/__init__.py0
-rw-r--r--ansible_collections/community/sap/tests/integration/__init__.py0
-rw-r--r--ansible_collections/community/sap/tests/integration/targets/__init__.py0
-rw-r--r--ansible_collections/community/sap/tests/sanity/__init__.py0
-rw-r--r--ansible_collections/community/sap/tests/unit/__init__.py0
-rw-r--r--ansible_collections/community/sap/tests/unit/compat/__init__.py0
-rw-r--r--ansible_collections/community/sap/tests/unit/compat/builtins.py33
-rw-r--r--ansible_collections/community/sap/tests/unit/compat/mock.py122
-rw-r--r--ansible_collections/community/sap/tests/unit/compat/unittest.py38
-rw-r--r--ansible_collections/community/sap/tests/unit/mock/__init__.py0
-rw-r--r--ansible_collections/community/sap/tests/unit/mock/loader.py102
-rw-r--r--ansible_collections/community/sap/tests/unit/mock/path.py8
-rw-r--r--ansible_collections/community/sap/tests/unit/mock/procenv.py76
-rw-r--r--ansible_collections/community/sap/tests/unit/mock/vault_helper.py27
-rw-r--r--ansible_collections/community/sap/tests/unit/mock/yaml_helper.py126
-rw-r--r--ansible_collections/community/sap/tests/unit/plugins/__init__.py0
-rw-r--r--ansible_collections/community/sap/tests/unit/plugins/modules/__init__.py0
-rw-r--r--ansible_collections/community/sap/tests/unit/plugins/modules/database/__init__.py0
-rw-r--r--ansible_collections/community/sap/tests/unit/plugins/modules/database/saphana/__init__.py0
-rw-r--r--ansible_collections/community/sap/tests/unit/plugins/modules/database/saphana/test_hana_query.py102
-rw-r--r--ansible_collections/community/sap/tests/unit/plugins/modules/files/__init__.py0
-rw-r--r--ansible_collections/community/sap/tests/unit/plugins/modules/files/test_sapcar_extract.py53
-rw-r--r--ansible_collections/community/sap/tests/unit/plugins/modules/identity/test_sap_company.py136
-rw-r--r--ansible_collections/community/sap/tests/unit/plugins/modules/identity/test_sap_user.py189
-rw-r--r--ansible_collections/community/sap/tests/unit/plugins/modules/system/__init__.py0
-rw-r--r--ansible_collections/community/sap/tests/unit/plugins/modules/system/test_sap_snote.py181
-rw-r--r--ansible_collections/community/sap/tests/unit/plugins/modules/system/test_sap_system_facts.py106
-rw-r--r--ansible_collections/community/sap/tests/unit/plugins/modules/system/test_sap_task_list_execute.py89
-rw-r--r--ansible_collections/community/sap/tests/unit/plugins/modules/utils.py52
-rw-r--r--ansible_collections/community/sap/tests/unit/requirements.txt7
-rw-r--r--ansible_collections/community/vmware/.github/workflows/ansible-test.yml4
-rw-r--r--ansible_collections/community/vmware/CHANGELOG.rst15
-rw-r--r--ansible_collections/community/vmware/FILES.json34
-rw-r--r--ansible_collections/community/vmware/MANIFEST.json4
-rw-r--r--ansible_collections/community/vmware/changelogs/changelog.yaml17
-rw-r--r--ansible_collections/community/vmware/plugins/module_utils/vmware.py8
-rw-r--r--ansible_collections/community/vmware/plugins/modules/vmware_cluster_dpm.py2
-rw-r--r--ansible_collections/community/vmware/plugins/modules/vmware_cluster_info.py2
-rw-r--r--ansible_collections/community/vmware/plugins/modules/vmware_datacenter_info.py2
-rw-r--r--ansible_collections/community/vmware/plugins/modules/vmware_datastore_info.py1
-rw-r--r--ansible_collections/community/vmware/plugins/modules/vmware_dvs_portgroup.py7
-rw-r--r--ansible_collections/community/vmware/plugins/modules/vmware_dvswitch_info.py1
-rw-r--r--ansible_collections/community/vmware/plugins/modules/vmware_guest_info.py1
-rw-r--r--ansible_collections/community/vmware/plugins/modules/vmware_host_facts.py1
-rw-r--r--ansible_collections/community/vmware/plugins/modules/vmware_vcenter_settings_info.py2
-rw-r--r--ansible_collections/community/vmware/plugins/modules/vmware_vsan_health_info.py5
-rw-r--r--ansible_collections/community/vmware/requirements.txt2
-rw-r--r--ansible_collections/community/vmware/tests/integration/targets/vmware_content_library_manager/tasks/main.yml6
-rw-r--r--ansible_collections/community/vmware/tests/integration/targets/vmware_dvs_portgroup/tasks/main.yml82
-rw-r--r--ansible_collections/community/zabbix/.github/workflows/agent.yml20
-rw-r--r--ansible_collections/community/zabbix/.github/workflows/javagateway.yml12
-rw-r--r--ansible_collections/community/zabbix/.github/workflows/plugins-integration.yml2
-rw-r--r--ansible_collections/community/zabbix/.github/workflows/proxy.yml12
-rw-r--r--ansible_collections/community/zabbix/.github/workflows/repo-sanity.yml2
-rw-r--r--ansible_collections/community/zabbix/.github/workflows/server.yml12
-rw-r--r--ansible_collections/community/zabbix/.github/workflows/web.yml12
-rw-r--r--ansible_collections/community/zabbix/CHANGELOG.rst40
-rw-r--r--ansible_collections/community/zabbix/FILES.json257
-rw-r--r--ansible_collections/community/zabbix/MANIFEST.json4
-rw-r--r--ansible_collections/community/zabbix/README.md2
-rw-r--r--ansible_collections/community/zabbix/changelogs/.plugin-cache.yaml17
-rw-r--r--ansible_collections/community/zabbix/changelogs/changelog.yaml58
-rw-r--r--ansible_collections/community/zabbix/docs/ZABBIX_AGENT_ROLE.md5
-rw-r--r--ansible_collections/community/zabbix/docs/ZABBIX_JAVAGATEWAY_ROLE.md4
-rw-r--r--ansible_collections/community/zabbix/docs/ZABBIX_PROXY_ROLE.md5
-rw-r--r--ansible_collections/community/zabbix/docs/ZABBIX_SERVER_ROLE.md4
-rw-r--r--ansible_collections/community/zabbix/docs/ZABBIX_WEB_ROLE.md13
-rw-r--r--ansible_collections/community/zabbix/molecule/requirements.txt6
-rw-r--r--ansible_collections/community/zabbix/molecule/zabbix_agent_tests/common/playbooks/prepare.yml1
-rw-r--r--ansible_collections/community/zabbix/molecule/zabbix_javagateway/molecule.yml2
-rw-r--r--ansible_collections/community/zabbix/molecule/zabbix_proxy/destroy.yml6
-rw-r--r--ansible_collections/community/zabbix/molecule/zabbix_proxy/molecule.yml10
-rw-r--r--ansible_collections/community/zabbix/molecule/zabbix_proxy/prepare.yml4
-rw-r--r--ansible_collections/community/zabbix/molecule/zabbix_server/destroy.yml6
-rw-r--r--ansible_collections/community/zabbix/molecule/zabbix_server/molecule.yml10
-rw-r--r--ansible_collections/community/zabbix/molecule/zabbix_server/prepare.yml12
-rw-r--r--ansible_collections/community/zabbix/molecule/zabbix_web/destroy.yml6
-rw-r--r--ansible_collections/community/zabbix/molecule/zabbix_web/molecule.yml12
-rw-r--r--ansible_collections/community/zabbix/molecule/zabbix_web/prepare.yml4
-rw-r--r--ansible_collections/community/zabbix/plugins/httpapi/zabbix.py3
-rw-r--r--ansible_collections/community/zabbix/plugins/modules/zabbix_correlation.py587
-rw-r--r--ansible_collections/community/zabbix/plugins/modules/zabbix_host.py64
-rw-r--r--ansible_collections/community/zabbix/plugins/modules/zabbix_maintenance.py40
-rw-r--r--ansible_collections/community/zabbix/plugins/modules/zabbix_mediatype.py11
-rw-r--r--ansible_collections/community/zabbix/plugins/modules/zabbix_service_info.py149
-rw-r--r--ansible_collections/community/zabbix/plugins/modules/zabbix_template.py295
-rw-r--r--ansible_collections/community/zabbix/plugins/modules/zabbix_templategroup.py4
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_agent/README.md5
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_agent/defaults/main.yml6
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_agent/molecule/with-server/prepare.yml1
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_agent/tasks/Debian.yml32
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_agent/tasks/main.yml16
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_agent/tasks/userparameter.yml3
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_agent/vars/Debian.yml3
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_javagateway/README.md4
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_javagateway/defaults/main.yml4
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_javagateway/tasks/Debian.yml35
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_javagateway/tasks/main.yml16
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_javagateway/vars/Debian.yml3
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_proxy/README.md5
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_proxy/defaults/main.yml3
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_proxy/tasks/Debian.yml35
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_proxy/tasks/main.yml11
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_proxy/vars/Debian.yml3
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_server/README.md4
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_server/defaults/main.yml6
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_server/tasks/Debian.yml156
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_server/tasks/RedHat.yml92
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_server/tasks/initialize-mysql.yml155
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_server/tasks/initialize-pgsql.yml (renamed from ansible_collections/community/zabbix/roles/zabbix_server/tasks/postgresql.yml)136
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_server/tasks/main.yml32
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_server/tasks/mysql.yml213
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_server/tasks/selinux.yml2
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_server/vars/Debian.yml17
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_server/vars/RedHat.yml24
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_web/README.md13
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_web/defaults/main.yml12
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_web/tasks/Debian.yml35
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_web/tasks/RedHat.yml5
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_web/tasks/main.yml11
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_web/tasks/selinux.yml22
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_web/templates/nginx_vhost.conf.j210
-rw-r--r--ansible_collections/community/zabbix/roles/zabbix_web/vars/Debian.yml3
-rw-r--r--ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_correlation/meta/main.yml3
-rw-r--r--ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_correlation/tasks/main.yml328
-rw-r--r--ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_host/tasks/zabbix_host_tests.yml72
-rw-r--r--ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_maintenance/tasks/main.yml50
-rw-r--r--ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_mediatype/tasks/main.yml23
-rw-r--r--ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_service_info/meta/main.yml3
-rw-r--r--ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_service_info/tasks/main.yml57
-rw-r--r--ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_template/files/template4_60_higher.json49
-rw-r--r--ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_template/files/template4_60_higher.xml48
-rw-r--r--ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_template/files/template4_60_higher.yaml23
-rw-r--r--ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_template/tasks/main.yml77
-rw-r--r--ansible_collections/dellemc/openmanage/.ansible-lint-ignore18
-rw-r--r--ansible_collections/dellemc/openmanage/.github/workflows/ansible-test.yml29
-rw-r--r--ansible_collections/dellemc/openmanage/CHANGELOG.rst112
-rw-r--r--ansible_collections/dellemc/openmanage/FILES.json1333
-rw-r--r--ansible_collections/dellemc/openmanage/MANIFEST.json4
-rw-r--r--ansible_collections/dellemc/openmanage/README.md10
-rw-r--r--ansible_collections/dellemc/openmanage/changelogs/changelog.yaml105
-rw-r--r--ansible_collections/dellemc/openmanage/docs/ATTRIBUTION.md27
-rw-r--r--ansible_collections/dellemc/openmanage/docs/EXECUTION_ENVIRONMENT.md1
-rw-r--r--ansible_collections/dellemc/openmanage/docs/README.md189
-rw-r--r--ansible_collections/dellemc/openmanage/docs/modules/idrac_diagnostics.rst390
-rw-r--r--ansible_collections/dellemc/openmanage/docs/modules/idrac_reset.rst134
-rw-r--r--ansible_collections/dellemc/openmanage/docs/modules/idrac_session.rst157
-rw-r--r--ansible_collections/dellemc/openmanage/docs/modules/idrac_storage_volume.rst310
-rw-r--r--ansible_collections/dellemc/openmanage/docs/modules/ome_application_console_preferences.rst49
-rw-r--r--ansible_collections/dellemc/openmanage/docs/modules/ome_device_local_access_configuration.rst56
-rw-r--r--ansible_collections/dellemc/openmanage/docs/modules/ome_device_quick_deploy.rst59
-rw-r--r--ansible_collections/dellemc/openmanage/docs/modules/ome_devices.rst35
-rw-r--r--ansible_collections/dellemc/openmanage/docs/modules/redfish_storage_volume.rst2
-rw-r--r--ansible_collections/dellemc/openmanage/meta/runtime.yml9
-rw-r--r--ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_diagnostics.yml97
-rw-r--r--ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_reset.yml64
-rw-r--r--ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_session.yml21
-rw-r--r--ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_storage_volume.yml (renamed from ansible_collections/dellemc/openmanage/playbooks/idrac/dellemc_idrac_storage_volume.yml)12
-rw-r--r--ansible_collections/dellemc/openmanage/playbooks/ome/compliance/ome_configuration_compliance_baseline_workflow.yml5
-rw-r--r--ansible_collections/dellemc/openmanage/playbooks/roles/idrac_user/idrac_user.yml9
-rw-r--r--ansible_collections/dellemc/openmanage/playbooks/roles/vars_files/user.yml15
-rw-r--r--ansible_collections/dellemc/openmanage/plugins/README.md3
-rw-r--r--ansible_collections/dellemc/openmanage/plugins/module_utils/dellemc_idrac.py7
-rw-r--r--ansible_collections/dellemc/openmanage/plugins/module_utils/session_utils.py322
-rw-r--r--ansible_collections/dellemc/openmanage/plugins/module_utils/utils.py23
-rw-r--r--ansible_collections/dellemc/openmanage/plugins/modules/dellemc_idrac_storage_volume.py5
-rw-r--r--ansible_collections/dellemc/openmanage/plugins/modules/idrac_diagnostics.py874
-rw-r--r--ansible_collections/dellemc/openmanage/plugins/modules/idrac_reset.py515
-rw-r--r--ansible_collections/dellemc/openmanage/plugins/modules/idrac_server_config_profile.py21
-rw-r--r--ansible_collections/dellemc/openmanage/plugins/modules/idrac_session.py425
-rw-r--r--ansible_collections/dellemc/openmanage/plugins/modules/idrac_storage_volume.py924
-rw-r--r--ansible_collections/dellemc/openmanage/plugins/modules/ome_application_console_preferences.py13
-rw-r--r--ansible_collections/dellemc/openmanage/plugins/modules/ome_device_local_access_configuration.py14
-rw-r--r--ansible_collections/dellemc/openmanage/plugins/modules/ome_device_quick_deploy.py39
-rw-r--r--ansible_collections/dellemc/openmanage/plugins/modules/ome_devices.py18
-rw-r--r--ansible_collections/dellemc/openmanage/plugins/modules/redfish_storage_volume.py198
-rw-r--r--ansible_collections/dellemc/openmanage/requirements.txt1
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_bios/molecule/clear_pending_attributes/prepare.yml9
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_bios/molecule/negative_scenarios_with_maintenance_window/converge.yml2
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_options_using_boot_option_reference_enabled_true/converge.yml24
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_options_using_display_name_enabled_false/converge.yml1
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_order_using_legacy_mode_force_restart/converge.yml55
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_order_using_uefi_mode_graceful_restart/converge.yml52
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_source_override_enabled_as_continuous_reset_type_none/converge.yml27
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_source_override_enabled_as_continuous_reset_type_none/molecule.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_source_override_enabled_as_once_reset_type_none/converge.yml10
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_source_override_mode_legacy_job_wait_false/converge.yml16
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_source_override_mode_uefi_with_resource_id/converge.yml11
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/CA/converge.yml12
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/CSC/converge.yml24
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/CTC/converge.yml12
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/CustomCertificate/converge.yml24
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/HTTPS/converge.yml12
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/SSLKEY/converge.yml12
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/default/converge.yml82
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/generateCSR/converge.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/reset/converge.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_export_server_config_profile/molecule/default/cleanup.yml20
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_export_server_config_profile/molecule/default/converge.yml20
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_export_server_config_profile/molecule/default/verify.yml20
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/cifs_share/converge.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/default/converge.yml24
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/ftp_share/converge.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/http_share/converge.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/https_share/converge.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/httpsproxy_share/converge.yml22
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/negative_scenarios/converge.yml101
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/nfs_share/converge.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/backplane/converge.yml50
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/bios/converge.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/controller/converge.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/default/converge.yml10
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/enclosure/converge.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/enclosureemm/converge.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/fan/converge.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/firmware/converge.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/hostnic/converge.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/idrac/converge.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/license/converge.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/memory/converge.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/negative/converge.yml33
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/nic/converge.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/passensor/converge.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/pciedevice/converge.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/physicaldisk/converge.yml66
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/powersupply/converge.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/secureboot/converge.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/sensorsbattery/converge.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/sensorsintrusion/converge.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/sensorsvoltage/converge.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/systemmetrics/converge.yml12
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/virtualdisk/converge.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/backplane_assert.yml39
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/physicaldisk_assert.yml45
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/cifs_share/converge.yml25
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/cifs_share/molecule.yml5
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/cifs_share/prepare.yml7
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/default/converge.yml142
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share/converge.yml24
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share/molecule.yml5
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share/prepare.yml7
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_proxy_parameters/converge.yml37
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_proxy_parameters/molecule.yml5
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_proxy_parameters/prepare.yml7
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_showerror_certificate_warning/converge.yml37
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_showerror_certificate_warning/prepare.yml7
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share/converge.yml25
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share/molecule.yml5
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share/prepare.yml7
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share_with_proxy_parameters/converge.yml37
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share_with_proxy_parameters/molecule.yml5
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share_with_proxy_parameters/prepare.yml7
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_buffer_json/converge.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_buffer_xml/converge.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_multiple_target/converge.yml19
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_multiple_target/molecule.yml5
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_multiple_target/prepare.yml7
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/nfs_share/converge.yml20
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/nfs_share/molecule.yml5
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/nfs_share/prepare.yml7
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/cleanup.yml64
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/export.yml72
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/nic_helper.yml39
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/prepare.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/raid_helper.yml24
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_job_queue/molecule/clear_job_queue/converge.yml4
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_job_queue/molecule/default/converge.yml8
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_job_queue/molecule/delete_job/converge.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_user/README.md347
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_user/defaults/main.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_user/handlers/main.yml2
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_user/meta/argument_specs.yml170
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_user/meta/main.yml21
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152120/converge.yml49
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152120/molecule.yml5
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152146/converge.yml46
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152146/molecule.yml5
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152147/converge.yml32
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152147/molecule.yml10
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152148/converge.yml54
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152148/molecule.yml5
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152148/prepare.yml26
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152149/converge.yml45
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152149/molecule.yml5
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152149/prepare.yml19
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152150/converge.yml51
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152150/molecule.yml5
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152150/prepare.yml19
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/default/converge.yml163
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/default/molecule.yml10
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/resources/idrac_user/cleanup.yml17
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/resources/idrac_user/get_user_info.yml9
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_user/tasks/absent.yml14
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_user/tasks/get_user.yml22
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_user/tasks/main.yml10
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_user/tasks/present.yml29
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_user/tests/inventory2
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_user/tests/test.yml6
-rw-r--r--ansible_collections/dellemc/openmanage/roles/idrac_user/vars/main.yml12
-rw-r--r--ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/__create_virtual_drive.yml29
-rw-r--r--ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/__job_track.yml17
-rw-r--r--ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/default/converge.yml11
-rw-r--r--ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/initialization/converge.yml82
-rw-r--r--ansible_collections/dellemc/openmanage/tests/unit/plugins/module_utils/test_idrac_redfish.py6
-rw-r--r--ansible_collections/dellemc/openmanage/tests/unit/plugins/module_utils/test_ome.py4
-rw-r--r--ansible_collections/dellemc/openmanage/tests/unit/plugins/module_utils/test_redfish.py6
-rw-r--r--ansible_collections/dellemc/openmanage/tests/unit/plugins/module_utils/test_session_utils.py415
-rw-r--r--ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_diagnostics.py1057
-rw-r--r--ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_reset.py639
-rw-r--r--ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_session.py590
-rw-r--r--ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_storage_volume.py1178
-rw-r--r--ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_user.py379
-rw-r--r--ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_application_console_preferences.py8
-rw-r--r--ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_device_local_access_configuration.py18
-rw-r--r--ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_device_location.py38
-rw-r--r--ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_device_mgmt_network.py4
-rw-r--r--ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_device_power_settings.py155
-rw-r--r--ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_device_quick_deploy.py4
-rw-r--r--ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_devices.py8
-rw-r--r--ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_redfish_storage_volume.py161
-rw-r--r--ansible_collections/dellemc/powerflex/.github/workflows/ansible-test.yml2
-rw-r--r--ansible_collections/dellemc/powerflex/CHANGELOG.rst7
-rw-r--r--ansible_collections/dellemc/powerflex/FILES.json73
-rw-r--r--ansible_collections/dellemc/powerflex/MANIFEST.json10
-rw-r--r--ansible_collections/dellemc/powerflex/README.md52
-rw-r--r--ansible_collections/dellemc/powerflex/changelogs/changelog.yaml5
-rw-r--r--ansible_collections/dellemc/powerflex/docs/CONTRIBUTING.md8
-rw-r--r--ansible_collections/dellemc/powerflex/docs/INSTALLATION.md4
-rw-r--r--ansible_collections/dellemc/powerflex/docs/ISSUE_TRIAGE.md4
-rw-r--r--ansible_collections/dellemc/powerflex/docs/MAINTAINER_GUIDE.md2
-rw-r--r--ansible_collections/dellemc/powerflex/docs/Release Notes.md9
-rw-r--r--ansible_collections/dellemc/powerflex/docs/SECURITY.md2
-rw-r--r--ansible_collections/dellemc/powerflex/docs/modules/device.rst2
-rw-r--r--ansible_collections/dellemc/powerflex/docs/modules/fault_set.rst2
-rw-r--r--ansible_collections/dellemc/powerflex/docs/modules/info.rst2
-rw-r--r--ansible_collections/dellemc/powerflex/docs/modules/mdm_cluster.rst2
-rw-r--r--ansible_collections/dellemc/powerflex/docs/modules/protection_domain.rst2
-rw-r--r--ansible_collections/dellemc/powerflex/docs/modules/replication_consistency_group.rst2
-rw-r--r--ansible_collections/dellemc/powerflex/docs/modules/replication_pair.rst2
-rw-r--r--ansible_collections/dellemc/powerflex/docs/modules/resource_group.rst2
-rw-r--r--ansible_collections/dellemc/powerflex/docs/modules/sdc.rst2
-rw-r--r--ansible_collections/dellemc/powerflex/docs/modules/sds.rst2
-rw-r--r--ansible_collections/dellemc/powerflex/docs/modules/snapshot.rst2
-rw-r--r--ansible_collections/dellemc/powerflex/docs/modules/snapshot_policy.rst2
-rw-r--r--ansible_collections/dellemc/powerflex/docs/modules/storagepool.rst2
-rw-r--r--ansible_collections/dellemc/powerflex/docs/modules/volume.rst2
-rw-r--r--ansible_collections/dellemc/powerflex/playbooks/roles/group_vars/all1
-rw-r--r--ansible_collections/dellemc/powerflex/plugins/module_utils/storage/dell/utils.py2
-rw-r--r--ansible_collections/dellemc/powerflex/roles/powerflex_config/tasks/main.yml29
-rw-r--r--ansible_collections/dellemc/powerflex/roles/powerflex_sdc/tasks/install_sdc.yml4
-rw-r--r--ansible_collections/dellemc/powerflex/roles/powerflex_sdr/tasks/add_sdr.yml36
-rw-r--r--ansible_collections/dellemc/powerflex/roles/powerflex_sds/tasks/install_sds.yml26
-rw-r--r--ansible_collections/dellemc/powerflex/roles/powerflex_tb/tasks/install_tb3x.yml1
-rw-r--r--ansible_collections/dellemc/powerflex/roles/powerflex_tb/tasks/uninstall_tb.yml27
-rw-r--r--ansible_collections/dellemc/powerflex/roles/powerflex_webui/tasks/install_webui.yml1
-rw-r--r--ansible_collections/dellemc/powerflex/tests/sanity/ignore-2.18.txt14
-rw-r--r--ansible_collections/dellemc/unity/.github/workflows/ansible-test.yml117
-rw-r--r--ansible_collections/dellemc/unity/CHANGELOG.rst8
-rw-r--r--ansible_collections/dellemc/unity/FILES.json83
-rw-r--r--ansible_collections/dellemc/unity/MANIFEST.json10
-rw-r--r--ansible_collections/dellemc/unity/README.md64
-rw-r--r--ansible_collections/dellemc/unity/changelogs/.plugin-cache.yaml2
-rw-r--r--ansible_collections/dellemc/unity/changelogs/changelog.yaml5
-rw-r--r--ansible_collections/dellemc/unity/docs/CONTRIBUTING.md8
-rw-r--r--ansible_collections/dellemc/unity/docs/INSTALLATION.md4
-rw-r--r--ansible_collections/dellemc/unity/docs/ISSUE_TRIAGE.md4
-rw-r--r--ansible_collections/dellemc/unity/docs/MAINTAINER_GUIDE.md2
-rw-r--r--ansible_collections/dellemc/unity/docs/Release Notes.md12
-rw-r--r--ansible_collections/dellemc/unity/docs/SECURITY.md2
-rw-r--r--ansible_collections/dellemc/unity/meta/runtime.yml107
-rw-r--r--ansible_collections/dellemc/unity/plugins/doc_fragments/unity.py4
-rw-r--r--ansible_collections/dellemc/unity/plugins/modules/consistencygroup.py32
-rw-r--r--ansible_collections/dellemc/unity/plugins/modules/filesystem.py10
-rw-r--r--ansible_collections/dellemc/unity/plugins/modules/filesystem_snapshot.py170
-rw-r--r--ansible_collections/dellemc/unity/plugins/modules/info.py428
-rw-r--r--ansible_collections/dellemc/unity/plugins/modules/interface.py98
-rw-r--r--ansible_collections/dellemc/unity/plugins/modules/nasserver.py264
-rw-r--r--ansible_collections/dellemc/unity/plugins/modules/nfs.py20
-rw-r--r--ansible_collections/dellemc/unity/plugins/modules/nfsserver.py100
-rw-r--r--ansible_collections/dellemc/unity/plugins/modules/snapshot.py146
-rw-r--r--ansible_collections/dellemc/unity/plugins/modules/snapshotschedule.py8
-rw-r--r--ansible_collections/dellemc/unity/plugins/modules/storagepool.py25
-rw-r--r--ansible_collections/dellemc/unity/plugins/modules/tree_quota.py182
-rw-r--r--ansible_collections/dellemc/unity/plugins/modules/user_quota.py328
-rw-r--r--ansible_collections/dellemc/unity/plugins/modules/volume.py8
-rw-r--r--ansible_collections/dellemc/unity/tests/sanity/ignore-2.16.txt (renamed from ansible_collections/dellemc/unity/tests/sanity/ignore-2.13.txt)6
-rw-r--r--ansible_collections/dellemc/unity/tests/sanity/ignore-2.17.txt18
-rw-r--r--ansible_collections/dellemc/unity/tests/unit/requirements.txt (renamed from ansible_collections/dellemc/unity/tests/requirements.txt)0
-rw-r--r--ansible_collections/fortinet/fortimanager/CHANGELOG.rst22
-rw-r--r--ansible_collections/fortinet/fortimanager/FILES.json634
-rw-r--r--ansible_collections/fortinet/fortimanager/MANIFEST.json4
-rw-r--r--ansible_collections/fortinet/fortimanager/README.md236
-rw-r--r--ansible_collections/fortinet/fortimanager/changelogs/changelog.yaml17
-rw-r--r--ansible_collections/fortinet/fortimanager/changelogs/fragments/2.5.0.yml8
-rw-r--r--ansible_collections/fortinet/fortimanager/meta/runtime.yml2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/module_utils/exported_schema.py2849
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/module_utils/napi.py148
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_adom_options.py6
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_antivirus_profile.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_antivirus_profile_http.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_apcfgprofile.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_application_categories.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_application_list.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_application_list_entries.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_certificate_template.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_clone.py72
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_cloud_orchestaws.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_cloud_orchestawsconnector.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_cloud_orchestawstemplate_autoscaleexistingvpc.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_cloud_orchestawstemplate_autoscalenewvpc.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_cloud_orchestawstemplate_autoscaletgwnewvpc.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_cloud_orchestration.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_device_profile_fortianalyzer.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_device_profile_fortiguard.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_import.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_fortianalyzer_setting.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_syslogd_filter.py56
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_syslogd_filter_excludelist.py18
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_syslogd_filter_excludelist_fields.py12
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_syslogd_filter_freestyle.py10
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_syslogd_setting.py12
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_syslogd_setting_customfieldname.py8
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_system_global.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvm_cmd_import_devlist.py8
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_adom_objectmember.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_device.py8
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_device_replace_sn.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_folder.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_group_objectmember.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_metafields_adom.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_metafields_device.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_metafields_group.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_script_execute.py14
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_script_objectmember.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_upgrade.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_approve.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_discard.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_drop.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_reject.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_repair.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_revert.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_review.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_save.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_submit.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_address.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_address_dynamicaddrmapping.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_certificate_local.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_certificate_local_dynamicmapping.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_input_interface.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_input_interface_dynamicmapping.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_interface.py6
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_interface_dynamicmapping.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_interface_platformmapping.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_ippool.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_multicast_interface.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_multicast_interface_dynamicmapping.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_vip.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_virtualwanlink_members.py98
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_virtualwanlink_members_dynamicmapping.py48
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_virtualwanlink_neighbor.py28
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_virtualwanlink_neighbor_dynamicmapping.py16
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_virtualwanlink_server.py22
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_virtualwanlink_server_dynamicmapping.py12
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_vpntunnel.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_vpntunnel_dynamicmapping.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_endpointcontrol_fctems.py14
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_export_playbooks.py116
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_extendercontroller_simprofile.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_extendercontroller_simprofile_autoswitchprofile.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_extendercontroller_template.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fact.py115
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_accessproxyvirtualhost.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_address.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_address6.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_addrgrp.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_addrgrp6.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_casbprofile.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_casbprofile_saasapplication.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_casbprofile_saasapplication_accessrule.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_casbprofile_saasapplication_customcontrol.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_casbprofile_saasapplication_customcontrol_option.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_ippool.py8
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_ippool_dynamicmapping.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_ippoolgrp.py10
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_multicastaddress.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_multicastaddress6.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_profileprotocoloptions.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_profileprotocoloptions_ftp.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_proxyaddress.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_proxyaddrgrp.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_sslsshprofile.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_sslsshprofile_ssh.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_vendormac.py10
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_vip6.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_vip6_dynamicmapping.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmg_device_blueprint.py22
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmg_fabric_authorization_template.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmg_fabric_authorization_template_platforms.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmg_variable.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmg_variable_dynamicmapping.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmupdate_fdssetting.py6
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmupdate_fwmsetting.py32
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmupdate_fwmsetting_upgradetimeout.py28
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmupdate_service.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmupdate_webspam_fgdsetting.py10
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fsp_vlan.py58
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fsp_vlan_dynamicmapping.py6
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fsp_vlan_dynamicmapping_interface.py6
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fsp_vlan_interface.py54
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_gtp_iewhitelist.py10
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_gtp_iewhitelist_entries.py6
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_gtp_messagefilterv0v1.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_ips_baseline_sensor_filter.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_ips_baseline_sensor_override.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_ips_baseline_sensor_override_exemptip.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_log_npuserver.py50
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_log_npuserver_servergroup.py20
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_log_npuserver_serverinfo.py18
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_metafields_system_admin_user.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_move.py10
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_central_dnat.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_central_dnat6.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_consolidated_policy_sectionvalue.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_explicitproxypolicy_sectionvalue.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_hyperscalepolicy.py74
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_hyperscalepolicy46.py36
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_hyperscalepolicy6.py44
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_hyperscalepolicy64.py48
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_interfacepolicy6_sectionvalue.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_interfacepolicy_sectionvalue.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy.py12
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy46.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy6.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy64.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy6_sectionvalue.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy_sectionvalue.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy_vpndstnode.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy_vpnsrcnode.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_proxypolicy.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_proxypolicy_sectionvalue.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_securitypolicy_sectionvalue.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_footer_policy.py20
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_header_policy.py20
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_meta_reference.py12
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_metafields_firewall_address.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_metafields_firewall_addrgrp.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_metafields_firewall_centralsnatmap.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_metafields_firewall_policy.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_metafields_firewall_service_custom.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_metafields_firewall_service_group.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_pblock_firewall_consolidated_policy_sectionvalue.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_pblock_firewall_policy.py8
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_pblock_firewall_policy6_sectionvalue.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_pblock_firewall_policy_sectionvalue.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_pblock_firewall_securitypolicy_sectionvalue.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_devprof_adom.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_devprof_pkg.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_devprof_scopemember.py6
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_pblock_adom.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_pblock_obj.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_pkg.py16
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_pkg_adom.py16
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_pkg_global.py16
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_pkg_scopemember.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_wanprof_adom.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_wanprof_pkg.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_wanprof_scopemember.py6
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_rename.py64
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_sctpfilter_profile.py16
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_sctpfilter_profile_ppidfilters.py10
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_securityconsole_cliprof_check.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_securityconsole_install_device.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_securityconsole_install_objects_v2.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_securityconsole_pblock_clone.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_securityconsole_template_cli_preview.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_switchcontroller_managedswitch.py8
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_sys_cloud_orchest.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_sys_hitcount.py14
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_sys_reboot.py6
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_sys_task_result.py8
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_admin_profile.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_admin_setting.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_admin_user.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_dm.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_docker.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_externalresource.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_fortiguard.py14
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_fortiview_autocache.py14
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_fortiview_setting.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_geoipcountry.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_global.py250
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_guiact.py20
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_ha.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_disk_filter.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_disk_setting.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_fortianalyzer2_filter.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_fortianalyzer3_filter.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_fortianalyzer_filter.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_memory_filter.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_setting.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_syslogd2_filter.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_syslogd2_setting.py6
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_syslogd3_filter.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_syslogd3_setting.py6
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_syslogd_filter.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_syslogd_setting.py6
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_log_settings.py28
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_log_settings_rollinganalyzer.py6
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_log_settings_rollinglocal.py6
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_log_settings_rollingregular.py6
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_log_topology.py6
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_mail.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_meta.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_meta_sysmetafields.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu.py735
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_backgroundssescan.py20
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_dosoptions.py8
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_dswdtsprofile.py10
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_dswqueuedtsprofile.py12
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_fpanomaly.py141
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_hpe.py44
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_ipreassembly.py8
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_isfnpqueues.py18
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_npqueues.py194
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_npqueues_ethernettype.py10
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_npqueues_ipprotocol.py10
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_npqueues_ipservice.py14
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_npqueues_profile.py152
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_npqueues_scheduler.py6
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_portcpumap.py6
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_portnpumap.py6
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_portpathoption.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_priorityprotocol.py8
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_ssehascan.py8
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_tcptimeoutprofile.py16
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_udptimeoutprofile.py6
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_ntp.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_ntp_ntpserver.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_objecttag.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup.py28
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup_alertmail.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup_mm1.py6
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup_mm3.py6
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup_mm4.py6
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup_mm7.py6
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup_nacquar.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_report_autocache.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_sdnconnector.py12
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_sdnconnector_externalaccountlist.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_sdnconnector_gcpprojectlist.py6
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_socfabric.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_sslciphersuites.py8
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_syslog.py8
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_webproxy.py14
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_template.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_templategroup.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_certificate.py14
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_clearpass.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_connector.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_device.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_flexvm.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_fsso.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_fsso_dynamicmapping.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_group_dynamicmapping_sslvpnoschecklist.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_json.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_krbkeytab.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_ldap.py12
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_ldap_dynamicmapping.py10
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_local.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_nsx.py6
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_nsx_service.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_pxgrid.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_saml.py40
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_saml_dynamicmapping.py40
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_vcenter.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_vcenter_rule.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vap.py16
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vap_dynamicmapping.py8
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_videofilter_youtubechannelfilter.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpn_ssl_settings.py6
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnmgr_node.py20
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnmgr_node_iprange.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnmgr_node_ipv4excluderange.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnmgr_node_protectedsubnet.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnmgr_node_summaryaddr.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnmgr_vpntable.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnsslweb_portal.py12
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnsslweb_portal_bookmarkgroup.py8
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnsslweb_portal_bookmarkgroup_bookmarks.py8
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wanprof_system_sdwan.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wanprof_system_sdwan_healthcheck.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wanprof_system_sdwan_members.py7
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wanprof_system_virtualwanlink.py6
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wanprof_system_virtualwanlink_healthcheck.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wanprof_system_virtualwanlink_members.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_webfilter_categories.py4
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_webfilter_profile.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_webfilter_profile_ftgdwf.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wtpprofile.py2
-rw-r--r--ansible_collections/fortinet/fortimanager/tests/sanity/ignore-2.14.txt16
-rw-r--r--ansible_collections/fortinet/fortimanager/tests/sanity/ignore-2.15.txt16
-rw-r--r--ansible_collections/fortinet/fortimanager/tests/sanity/ignore-2.16.txt16
-rw-r--r--ansible_collections/gluster/gluster/.github/workflows/ansible-test-plugins.yml47
-rw-r--r--ansible_collections/gluster/gluster/.gitignore2
-rw-r--r--ansible_collections/gluster/gluster/CHANGELOG.rst33
-rw-r--r--ansible_collections/gluster/gluster/FILES.json166
-rw-r--r--ansible_collections/gluster/gluster/LICENSE288
-rw-r--r--ansible_collections/gluster/gluster/MANIFEST.json32
-rw-r--r--ansible_collections/gluster/gluster/README.md37
-rw-r--r--ansible_collections/gluster/gluster/changelogs/changelog.yaml31
-rw-r--r--ansible_collections/gluster/gluster/changelogs/config.yaml31
-rw-r--r--ansible_collections/gluster/gluster/meta/runtime.yml2
-rw-r--r--ansible_collections/gluster/gluster/plugins/modules/geo_rep.py347
-rw-r--r--ansible_collections/gluster/gluster/plugins/modules/gluster_heal_info.py205
-rw-r--r--ansible_collections/gluster/gluster/plugins/modules/gluster_peer.py177
-rw-r--r--ansible_collections/gluster/gluster/plugins/modules/gluster_volume.py621
-rw-r--r--ansible_collections/gluster/gluster/tests/sanity/ignore-2.10.txt4
-rw-r--r--ansible_collections/gluster/gluster/tests/sanity/ignore-2.11.txt4
-rw-r--r--ansible_collections/grafana/grafana/.github/workflows/loki-molecule.yml44
-rw-r--r--ansible_collections/grafana/grafana/.github/workflows/mimir-molecule.yml51
-rw-r--r--ansible_collections/grafana/grafana/.github/workflows/promtail-molecule.yml44
-rw-r--r--ansible_collections/grafana/grafana/.gitignore1
-rw-r--r--ansible_collections/grafana/grafana/CHANGELOG.rst63
-rw-r--r--ansible_collections/grafana/grafana/CODEOWNERS11
-rw-r--r--ansible_collections/grafana/grafana/FILES.json891
-rw-r--r--ansible_collections/grafana/grafana/MANIFEST.json7
-rw-r--r--ansible_collections/grafana/grafana/Pipfile2
-rw-r--r--ansible_collections/grafana/grafana/Pipfile.lock419
-rw-r--r--ansible_collections/grafana/grafana/README.md18
-rw-r--r--ansible_collections/grafana/grafana/changelogs/.plugin-cache.yaml2
-rw-r--r--ansible_collections/grafana/grafana/changelogs/changelog.yaml47
-rw-r--r--ansible_collections/grafana/grafana/examples/alloy.yaml24
-rw-r--r--ansible_collections/grafana/grafana/examples/loki-basic-no-options.yml6
-rw-r--r--ansible_collections/grafana/grafana/examples/loki-local-filesystem-with-retention-and-alert.yml70
-rw-r--r--ansible_collections/grafana/grafana/examples/mimir-3-hosts.yaml32
-rw-r--r--ansible_collections/grafana/grafana/examples/monitor-multiple-instance-otel.md193
-rw-r--r--ansible_collections/grafana/grafana/examples/monitor-multiple-instances-agent.md (renamed from ansible_collections/grafana/grafana/examples/monitor-multiple-instances.md)0
-rw-r--r--ansible_collections/grafana/grafana/examples/opentelemetry-collector.yml43
-rw-r--r--ansible_collections/grafana/grafana/examples/promtail-multiple-logs.yml24
-rw-r--r--ansible_collections/grafana/grafana/plugins/modules/cloud_plugin.py2
-rw-r--r--ansible_collections/grafana/grafana/requirements.txt6
-rw-r--r--ansible_collections/grafana/grafana/requirements.yml2
-rw-r--r--ansible_collections/grafana/grafana/roles/alloy/README.md71
-rw-r--r--ansible_collections/grafana/grafana/roles/alloy/defaults/main.yml45
-rw-r--r--ansible_collections/grafana/grafana/roles/alloy/handlers/main.yml5
-rw-r--r--ansible_collections/grafana/grafana/roles/alloy/meta/main.yml24
-rw-r--r--ansible_collections/grafana/grafana/roles/alloy/tasks/configure.yml28
-rw-r--r--ansible_collections/grafana/grafana/roles/alloy/tasks/install.yml51
-rw-r--r--ansible_collections/grafana/grafana/roles/alloy/tasks/main.yml11
-rw-r--r--ansible_collections/grafana/grafana/roles/alloy/tasks/service.yml19
-rw-r--r--ansible_collections/grafana/grafana/roles/alloy/templates/alloy.service.j232
-rw-r--r--ansible_collections/grafana/grafana/roles/alloy/templates/config.alloy.j21
-rw-r--r--ansible_collections/grafana/grafana/roles/alloy/templates/environment.j210
-rw-r--r--ansible_collections/grafana/grafana/roles/grafana/README.md12
-rw-r--r--ansible_collections/grafana/grafana/roles/grafana/defaults/main.yml15
-rw-r--r--ansible_collections/grafana/grafana/roles/grafana/meta/main.yml2
-rw-r--r--ansible_collections/grafana/grafana/roles/grafana/tasks/dashboards.yml2
-rw-r--r--ansible_collections/grafana/grafana/roles/grafana/tasks/datasources.yml2
-rw-r--r--ansible_collections/grafana/grafana/roles/grafana/tasks/preflight.yml21
-rw-r--r--ansible_collections/grafana/grafana/roles/grafana/templates/grafana.ini.j28
-rw-r--r--ansible_collections/grafana/grafana/roles/grafana_agent/README.md6
-rw-r--r--ansible_collections/grafana/grafana/roles/grafana_agent/defaults/main.yaml3
-rw-r--r--ansible_collections/grafana/grafana/roles/grafana_agent/templates/grafana-agent.service.j23
-rw-r--r--ansible_collections/grafana/grafana/roles/loki/README.md238
-rw-r--r--ansible_collections/grafana/grafana/roles/loki/defaults/main.yml107
-rw-r--r--ansible_collections/grafana/grafana/roles/loki/handlers/main.yml9
-rw-r--r--ansible_collections/grafana/grafana/roles/loki/meta/main.yml28
-rw-r--r--ansible_collections/grafana/grafana/roles/loki/molecule/default/converge.yml5
-rw-r--r--ansible_collections/grafana/grafana/roles/loki/molecule/default/molecule.yml20
-rw-r--r--ansible_collections/grafana/grafana/roles/loki/tasks/deploy.yml146
-rw-r--r--ansible_collections/grafana/grafana/roles/loki/tasks/main.yml23
-rw-r--r--ansible_collections/grafana/grafana/roles/loki/tasks/setup-Debian.yml7
-rw-r--r--ansible_collections/grafana/grafana/roles/loki/tasks/setup-RedHat.yml8
-rw-r--r--ansible_collections/grafana/grafana/roles/loki/tasks/uninstall.yml51
-rw-r--r--ansible_collections/grafana/grafana/roles/loki/templates/config.yml.j299
-rw-r--r--ansible_collections/grafana/grafana/roles/loki/templates/rules.yml.j23
-rw-r--r--ansible_collections/grafana/grafana/roles/loki/vars/Debian.yml5
-rw-r--r--ansible_collections/grafana/grafana/roles/loki/vars/RedHat.yml2
-rw-r--r--ansible_collections/grafana/grafana/roles/mimir/README.md76
-rw-r--r--ansible_collections/grafana/grafana/roles/mimir/defaults/main.yml37
-rw-r--r--ansible_collections/grafana/grafana/roles/mimir/files/.gitkeep (renamed from ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/__init__.py)0
-rw-r--r--ansible_collections/grafana/grafana/roles/mimir/handlers/main.yml6
-rw-r--r--ansible_collections/grafana/grafana/roles/mimir/meta/main.yml37
-rw-r--r--ansible_collections/grafana/grafana/roles/mimir/molecule/default/converge.yml33
-rw-r--r--ansible_collections/grafana/grafana/roles/mimir/molecule/default/molecule.yml60
-rw-r--r--ansible_collections/grafana/grafana/roles/mimir/molecule/default/tests/test_default.py36
-rw-r--r--ansible_collections/grafana/grafana/roles/mimir/molecule/test-requirements.txt6
-rw-r--r--ansible_collections/grafana/grafana/roles/mimir/tasks/deploy.yml104
-rw-r--r--ansible_collections/grafana/grafana/roles/mimir/tasks/main.yml17
-rw-r--r--ansible_collections/grafana/grafana/roles/mimir/tasks/setup-Debian.yml7
-rw-r--r--ansible_collections/grafana/grafana/roles/mimir/tasks/setup-Redhat.yml8
-rw-r--r--ansible_collections/grafana/grafana/roles/mimir/tasks/uninstall.yml51
-rw-r--r--ansible_collections/grafana/grafana/roles/mimir/templates/.gitkeep (renamed from ansible_collections/cisco/ios/tests/unit/compat/__init__.py)0
-rw-r--r--ansible_collections/grafana/grafana/roles/mimir/templates/config.yml.j252
-rw-r--r--ansible_collections/grafana/grafana/roles/mimir/vars/.gitkeep (renamed from ansible_collections/cisco/iosxr/tests/unit/compat/__init__.py)0
-rw-r--r--ansible_collections/grafana/grafana/roles/opentelemetry_collector/README.md100
-rw-r--r--ansible_collections/grafana/grafana/roles/opentelemetry_collector/defaults/main.yml27
-rw-r--r--ansible_collections/grafana/grafana/roles/opentelemetry_collector/handlers/main.yml5
-rw-r--r--ansible_collections/grafana/grafana/roles/opentelemetry_collector/meta/main.yml25
-rw-r--r--ansible_collections/grafana/grafana/roles/opentelemetry_collector/tasks/configure.yml18
-rw-r--r--ansible_collections/grafana/grafana/roles/opentelemetry_collector/tasks/install.yml56
-rw-r--r--ansible_collections/grafana/grafana/roles/opentelemetry_collector/tasks/main.yml11
-rw-r--r--ansible_collections/grafana/grafana/roles/opentelemetry_collector/tasks/service.yml19
-rw-r--r--ansible_collections/grafana/grafana/roles/opentelemetry_collector/templates/otel_collector.service.j213
-rw-r--r--ansible_collections/grafana/grafana/roles/opentelemetry_collector/templates/otel_collector_config.yml.j224
-rw-r--r--ansible_collections/grafana/grafana/roles/promtail/README.md164
-rw-r--r--ansible_collections/grafana/grafana/roles/promtail/defaults/main.yml47
-rw-r--r--ansible_collections/grafana/grafana/roles/promtail/handlers/main.yml9
-rw-r--r--ansible_collections/grafana/grafana/roles/promtail/meta/main.yml28
-rw-r--r--ansible_collections/grafana/grafana/roles/promtail/molecule/default/converge.yml15
-rw-r--r--ansible_collections/grafana/grafana/roles/promtail/molecule/default/molecule.yml20
-rw-r--r--ansible_collections/grafana/grafana/roles/promtail/tasks/acl_configuration.yml116
-rw-r--r--ansible_collections/grafana/grafana/roles/promtail/tasks/deploy.yml139
-rw-r--r--ansible_collections/grafana/grafana/roles/promtail/tasks/main.yml23
-rw-r--r--ansible_collections/grafana/grafana/roles/promtail/tasks/setup-Debian.yml14
-rw-r--r--ansible_collections/grafana/grafana/roles/promtail/tasks/setup-RedHat.yml9
-rw-r--r--ansible_collections/grafana/grafana/roles/promtail/tasks/uninstall.yml119
-rw-r--r--ansible_collections/grafana/grafana/roles/promtail/templates/config.yml.j222
-rw-r--r--ansible_collections/grafana/grafana/roles/promtail/templates/promtail.service.j218
-rw-r--r--ansible_collections/grafana/grafana/roles/promtail/templates/promtail_acl.j213
-rw-r--r--ansible_collections/grafana/grafana/roles/promtail/vars/Debian.yml5
-rw-r--r--ansible_collections/grafana/grafana/roles/promtail/vars/RedHat.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/.ansible-lint2
-rw-r--r--ansible_collections/hetzner/hcloud/.azure-pipelines/azure-pipelines.yml34
-rw-r--r--ansible_collections/hetzner/hcloud/.github/release-please-manifest.json2
-rw-r--r--ansible_collections/hetzner/hcloud/.gitlab-ci.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/.pre-commit-config.yaml12
-rw-r--r--ansible_collections/hetzner/hcloud/CHANGELOG.rst55
-rw-r--r--ansible_collections/hetzner/hcloud/FILES.json362
-rw-r--r--ansible_collections/hetzner/hcloud/MANIFEST.json4
-rw-r--r--ansible_collections/hetzner/hcloud/Makefile8
-rw-r--r--ansible_collections/hetzner/hcloud/changelogs/changelog.yaml61
-rw-r--r--ansible_collections/hetzner/hcloud/changelogs/dev-changelog.md45
-rw-r--r--ansible_collections/hetzner/hcloud/meta/runtime.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/inventory/hcloud.py145
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/module_utils/hcloud.py27
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/_version.py2
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/core/domain.py18
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/firewalls/domain.py4
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/floating_ips/domain.py4
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/images/client.py22
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/load_balancers/domain.py12
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/networks/domain.py4
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/placement_groups/domain.py4
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/primary_ips/domain.py4
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/servers/domain.py4
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/module_utils/version.py2
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/certificate.py21
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/certificate_info.py33
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/datacenter_info.py9
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/firewall.py29
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/firewall_info.py29
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/firewall_resource.py7
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/floating_ip.py25
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/floating_ip_info.py34
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/image_info.py31
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/iso_info.py9
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/load_balancer.py50
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/load_balancer_info.py79
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/load_balancer_network.py15
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/load_balancer_service.py39
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/load_balancer_target.py17
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/load_balancer_type_info.py27
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/location_info.py23
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/network.py23
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/network_info.py99
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/placement_group.py7
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/primary_ip.py97
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/primary_ip_info.py44
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/rdns.py19
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/route.py11
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/server.py675
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/server_info.py56
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/server_network.py18
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/server_type_info.py49
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/ssh_key.py9
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/ssh_key_info.py27
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/subnetwork.py15
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/volume.py33
-rw-r--r--ansible_collections/hetzner/hcloud/plugins/modules/volume_info.py32
-rw-r--r--ansible_collections/hetzner/hcloud/pyproject.toml5
-rw-r--r--ansible_collections/hetzner/hcloud/requirements.txt4
-rwxr-xr-xansible_collections/hetzner/hcloud/scripts/vendor.py2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/cloud-config-hcloud.ini.in2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/common/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/certificate/aliases1
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/certificate/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/certificate_info/aliases1
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/certificate_info/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/datacenter_info/aliases1
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/datacenter_info/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/firewall/aliases1
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/firewall/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/firewall/tasks/cleanup.yml11
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/firewall/tasks/test.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/firewall_info/aliases3
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/firewall_info/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/firewall_info/tasks/cleanup.yml11
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/firewall_resource/aliases3
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/firewall_resource/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/firewall_resource/tasks/cleanup.yml11
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/floating_ip/aliases1
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/floating_ip/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/floating_ip/tasks/test.yml11
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/floating_ip_info/aliases1
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/floating_ip_info/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/image_info/aliases1
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/image_info/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/iso_info/aliases1
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/iso_info/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer/aliases1
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer/tasks/test.yml3
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_info/aliases1
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_info/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_info/tasks/prepare.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_network/aliases1
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_network/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_service/aliases1
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_service/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_target/aliases1
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_target/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_target/tasks/test.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_type_info/aliases1
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_type_info/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/location_info/aliases1
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/location_info/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/network/aliases2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/network/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/network/defaults/main/main.yml1
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/network/tasks/cleanup.yml5
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/network/tasks/test.yml314
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/network_info/aliases1
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/network_info/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/placement_group/aliases1
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/placement_group/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/placement_group/tasks/test.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip/aliases1
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip/tasks/cleanup.yml10
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip/tasks/prepare.yml10
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip/tasks/test.yml277
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip_info/aliases1
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip_info/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/rdns/aliases1
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/rdns/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/route/aliases1
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/route/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/server/aliases1
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/server/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/server/tasks/test_basic.yml9
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/server/tasks/test_firewalls.yml4
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/server/tasks/test_validation.yml6
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/server_info/aliases1
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/server_info/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/server_info/tasks/prepare.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/server_network/aliases2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/server_network/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/server_network/tasks/cleanup.yml10
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/server_network/tasks/prepare.yml24
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/server_network/tasks/test.yml234
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/server_type_info/aliases1
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/server_type_info/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/ssh_key/aliases1
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/ssh_key/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/ssh_key/tasks/test.yml3
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/ssh_key_info/aliases1
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/ssh_key_info/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/subnetwork/aliases1
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/subnetwork/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/volume/aliases1
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/volume/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/volume/tasks/test.yml8
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/volume_info/aliases1
-rw-r--r--ansible_collections/hetzner/hcloud/tests/integration/targets/volume_info/defaults/main/common.yml2
-rw-r--r--ansible_collections/hetzner/hcloud/tests/sanity/ignore-2.13.txt69
-rw-r--r--ansible_collections/hetzner/hcloud/tests/unit/conftest.py15
-rw-r--r--ansible_collections/hetzner/hcloud/tests/unit/inventory/test_hcloud.py75
-rw-r--r--ansible_collections/hetzner/hcloud/tests/unit/module_utils/test_hcloud.py34
-rw-r--r--ansible_collections/hpe/nimble/.gitignore132
-rw-r--r--ansible_collections/hpe/nimble/CHANGELOG.rst104
-rw-r--r--ansible_collections/hpe/nimble/FILES.json320
-rw-r--r--ansible_collections/hpe/nimble/MANIFEST.json32
-rw-r--r--ansible_collections/hpe/nimble/README.md98
-rw-r--r--ansible_collections/hpe/nimble/bindep.txt7
-rw-r--r--ansible_collections/hpe/nimble/changelogs/changelog.yaml100
-rw-r--r--ansible_collections/hpe/nimble/changelogs/config.yaml32
-rw-r--r--ansible_collections/hpe/nimble/meta/runtime.yml2
-rw-r--r--ansible_collections/hpe/nimble/plugins/doc_fragments/hpe_nimble.py50
-rw-r--r--ansible_collections/hpe/nimble/plugins/module_utils/hpe_nimble.py332
-rw-r--r--ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_access_control_record.py270
-rw-r--r--ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_array.py468
-rw-r--r--ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_chap_user.py274
-rw-r--r--ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_disk.py200
-rw-r--r--ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_encryption.py372
-rw-r--r--ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_fc.py324
-rw-r--r--ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_group.py1257
-rw-r--r--ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_info.py1026
-rw-r--r--ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_initiator_group.py357
-rw-r--r--ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_network.py427
-rw-r--r--ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_partner.py511
-rw-r--r--ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_performance_policy.py343
-rw-r--r--ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_pool.py352
-rw-r--r--ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_protection_schedule.py521
-rw-r--r--ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_protection_template.py386
-rw-r--r--ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_shelf.py228
-rw-r--r--ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_snapshot.py360
-rw-r--r--ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_snapshot_collection.py403
-rw-r--r--ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_user.py381
-rw-r--r--ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_user_policy.py241
-rw-r--r--ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_volume.py843
-rw-r--r--ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_volume_collection.py717
-rw-r--r--ansible_collections/hpe/nimble/requirements.txt2
-rw-r--r--ansible_collections/hpe/nimble/tests/sanity/ignore-2.10.txt160
-rw-r--r--ansible_collections/hpe/nimble/tests/sanity/ignore-2.11.txt160
-rw-r--r--ansible_collections/hpe/nimble/tests/sanity/ignore-2.12.txt160
-rw-r--r--ansible_collections/hpe/nimble/tests/sanity/ignore-2.9.txt160
-rw-r--r--ansible_collections/ibm/qradar/.ansible-lint5
-rw-r--r--ansible_collections/ibm/qradar/.github/dependabot.yml10
-rw-r--r--ansible_collections/ibm/qradar/.github/release-drafter.yml3
-rw-r--r--ansible_collections/ibm/qradar/.github/workflows/ack.yml (renamed from ansible_collections/ansible/netcommon/.github/workflows/ack.yml)1
-rw-r--r--ansible_collections/ibm/qradar/.github/workflows/codecoverage.yml14
-rw-r--r--ansible_collections/ibm/qradar/.github/workflows/lint.yml (renamed from ansible_collections/cisco/ios/.github/workflows/lint.yml)0
-rw-r--r--ansible_collections/ibm/qradar/.github/workflows/push.yml (renamed from ansible_collections/arista/eos/.github/workflows/push.yml)7
-rw-r--r--ansible_collections/ibm/qradar/.github/workflows/release.yml13
-rw-r--r--ansible_collections/ibm/qradar/.github/workflows/tests.yml (renamed from ansible_collections/ibm/qradar/.github/workflows/test.yml)17
-rw-r--r--ansible_collections/ibm/qradar/.gitignore17
-rw-r--r--ansible_collections/ibm/qradar/.isort.cfg6
-rw-r--r--ansible_collections/ibm/qradar/.pre-commit-config.yaml38
-rw-r--r--ansible_collections/ibm/qradar/.prettierignore22
-rw-r--r--ansible_collections/ibm/qradar/CHANGELOG.rst19
-rw-r--r--ansible_collections/ibm/qradar/FILES.json614
-rw-r--r--ansible_collections/ibm/qradar/MANIFEST.json12
-rw-r--r--ansible_collections/ibm/qradar/README.md12
-rw-r--r--ansible_collections/ibm/qradar/bindep.txt2
-rw-r--r--ansible_collections/ibm/qradar/changelogs/changelog.yaml111
-rw-r--r--ansible_collections/ibm/qradar/changelogs/config.yaml35
-rw-r--r--ansible_collections/ibm/qradar/codecov.yml15
-rw-r--r--ansible_collections/ibm/qradar/docs/ibm.qradar.qradar_analytics_rules_module.rst4
-rw-r--r--ansible_collections/ibm/qradar/docs/ibm.qradar.qradar_log_sources_management_module.rst2
-rw-r--r--ansible_collections/ibm/qradar/meta/runtime.yml2
-rw-r--r--ansible_collections/ibm/qradar/plugins/action/qradar_analytics_rules.py63
-rw-r--r--ansible_collections/ibm/qradar/plugins/action/qradar_log_sources_management.py81
-rw-r--r--ansible_collections/ibm/qradar/plugins/httpapi/qradar.py17
-rw-r--r--ansible_collections/ibm/qradar/plugins/module_utils/qradar.py51
-rw-r--r--ansible_collections/ibm/qradar/plugins/modules/deploy.py17
-rw-r--r--ansible_collections/ibm/qradar/plugins/modules/log_source_management.py64
-rw-r--r--ansible_collections/ibm/qradar/plugins/modules/offense_action.py39
-rw-r--r--ansible_collections/ibm/qradar/plugins/modules/offense_info.py28
-rw-r--r--ansible_collections/ibm/qradar/plugins/modules/offense_note.py25
-rw-r--r--ansible_collections/ibm/qradar/plugins/modules/qradar_analytics_rules.py6
-rw-r--r--ansible_collections/ibm/qradar/plugins/modules/qradar_deploy.py17
-rw-r--r--ansible_collections/ibm/qradar/plugins/modules/qradar_log_source_management.py64
-rw-r--r--ansible_collections/ibm/qradar/plugins/modules/qradar_log_sources_management.py3
-rw-r--r--ansible_collections/ibm/qradar/plugins/modules/qradar_offense_action.py39
-rw-r--r--ansible_collections/ibm/qradar/plugins/modules/qradar_offense_info.py28
-rw-r--r--ansible_collections/ibm/qradar/plugins/modules/qradar_offense_note.py25
-rw-r--r--ansible_collections/ibm/qradar/plugins/modules/qradar_rule.py59
-rw-r--r--ansible_collections/ibm/qradar/plugins/modules/qradar_rule_info.py24
-rw-r--r--ansible_collections/ibm/qradar/plugins/modules/rule.py59
-rw-r--r--ansible_collections/ibm/qradar/plugins/modules/rule_info.py24
-rw-r--r--ansible_collections/ibm/qradar/pyproject.toml2
-rw-r--r--ansible_collections/ibm/qradar/test-requirements.txt13
-rw-r--r--ansible_collections/ibm/qradar/tests/integration/targets/log_source_management/tasks/main.yml40
-rw-r--r--ansible_collections/ibm/qradar/tests/integration/targets/offense/tasks/main.yml29
-rw-r--r--ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/defaults/main.yaml2
-rw-r--r--ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tasks/cli.yaml17
-rw-r--r--ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tasks/main.yaml4
-rw-r--r--ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tasks/redirection.yaml8
-rw-r--r--ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/_populate_log_sources_config.yaml18
-rw-r--r--ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/_remove_log_sources_config.yaml4
-rw-r--r--ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/deleted.yaml12
-rw-r--r--ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/gathered.yaml12
-rw-r--r--ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/merged.yaml28
-rw-r--r--ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/replaced.yaml30
-rw-r--r--ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/rtt.yaml41
-rw-r--r--ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/vars/main.yaml89
-rw-r--r--ansible_collections/ibm/qradar/tests/integration/targets/rule/tasks/main.yml40
-rw-r--r--ansible_collections/ibm/qradar/tests/unit/compat/builtins.py34
-rw-r--r--ansible_collections/ibm/qradar/tests/unit/compat/mock.py4
-rw-r--r--ansible_collections/ibm/qradar/tests/unit/compat/unittest.py2
-rw-r--r--ansible_collections/ibm/qradar/tests/unit/mock/loader.py5
-rw-r--r--ansible_collections/ibm/qradar/tests/unit/mock/path.py8
-rw-r--r--ansible_collections/ibm/qradar/tests/unit/mock/procenv.py8
-rw-r--r--ansible_collections/ibm/qradar/tests/unit/mock/vault_helper.py6
-rw-r--r--ansible_collections/ibm/qradar/tests/unit/mock/yaml_helper.py38
-rw-r--r--ansible_collections/ibm/qradar/tests/unit/plugins/action/test_qradar_analytics_rules.py37
-rw-r--r--ansible_collections/ibm/qradar/tests/unit/plugins/modules/conftest.py18
-rw-r--r--ansible_collections/ibm/qradar/tests/unit/plugins/modules/utils.py9
-rw-r--r--ansible_collections/ibm/qradar/tox.ini8
-rw-r--r--ansible_collections/inspur/ispim/.github/workflows/ansible-test.yml31
-rw-r--r--ansible_collections/inspur/ispim/.idea/.gitignore3
-rw-r--r--ansible_collections/inspur/ispim/.idea/inspectionProfiles/profiles_settings.xml (renamed from ansible_collections/azure/azcollection/.idea/inspectionProfiles/profiles_settings.xml)0
-rw-r--r--ansible_collections/inspur/ispim/.idea/inspur.ispim.iml (renamed from ansible_collections/azure/azcollection/.idea/azcollection.iml)22
-rw-r--r--ansible_collections/inspur/ispim/.idea/misc.xml4
-rw-r--r--ansible_collections/inspur/ispim/.idea/modules.xml (renamed from ansible_collections/azure/azcollection/.idea/modules.xml)14
-rw-r--r--ansible_collections/inspur/ispim/.idea/vcs.xml (renamed from ansible_collections/azure/azcollection/.idea/vcs.xml)10
-rw-r--r--ansible_collections/inspur/ispim/.idea/workspace.xml38
-rw-r--r--ansible_collections/inspur/ispim/CHANGELOG.rst9
-rw-r--r--ansible_collections/inspur/ispim/FILES.json4928
-rw-r--r--ansible_collections/inspur/ispim/MANIFEST.json4
-rw-r--r--ansible_collections/inspur/ispim/README.md8
-rw-r--r--ansible_collections/inspur/ispim/changelogs/.plugin-cache.yaml2
-rw-r--r--ansible_collections/inspur/ispim/changelogs/changelog.yaml9
-rw-r--r--ansible_collections/inspur/ispim/meta/runtime.yml2
-rw-r--r--ansible_collections/inspur/ispim/requirements.txt3
-rw-r--r--ansible_collections/junipernetworks/junos/.ansible-lint5
-rw-r--r--ansible_collections/junipernetworks/junos/.flake867
-rw-r--r--ansible_collections/junipernetworks/junos/.github/workflows/ack.yml15
-rw-r--r--ansible_collections/junipernetworks/junos/.github/workflows/check_label.yml11
-rw-r--r--ansible_collections/junipernetworks/junos/.github/workflows/draft_release.yml18
-rw-r--r--ansible_collections/junipernetworks/junos/.github/workflows/push.yml27
-rw-r--r--ansible_collections/junipernetworks/junos/.github/workflows/tests.yml23
-rw-r--r--ansible_collections/junipernetworks/junos/.pre-commit-config.yaml11
-rw-r--r--ansible_collections/junipernetworks/junos/CHANGELOG.rst86
-rw-r--r--ansible_collections/junipernetworks/junos/FILES.json5883
-rw-r--r--ansible_collections/junipernetworks/junos/MANIFEST.json6
-rw-r--r--ansible_collections/junipernetworks/junos/README.md5
-rw-r--r--ansible_collections/junipernetworks/junos/bindep.txt3
-rw-r--r--ansible_collections/junipernetworks/junos/changelogs/changelog.yaml79
-rw-r--r--ansible_collections/junipernetworks/junos/docs/junipernetworks.junos.junos_config_module.rst12
-rw-r--r--ansible_collections/junipernetworks/junos/docs/junipernetworks.junos.junos_l2_interfaces_module.rst30
-rw-r--r--ansible_collections/junipernetworks/junos/docs/junipernetworks.junos.junos_l3_interfaces_module.rst50
-rw-r--r--ansible_collections/junipernetworks/junos/docs/junipernetworks.junos.junos_logging_module.rst487
-rw-r--r--ansible_collections/junipernetworks/junos/meta/runtime.yml174
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/acl_interfaces.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/acls.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/banner.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/bgp_address_family.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/bgp_global.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/command.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/config.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/facts.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/hostname.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/interfaces.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/l2_interfaces.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/l3_intefaces.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/lacp.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/lacp_intefaces.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/lag_interfaces.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/lldp_global.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/lldp_interfaces.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/logging.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/logging_global.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/netconf.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/ntp_global.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/ospf_interfaces.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/ospfv2.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/ospfv3.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/package.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/ping.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/prefix_lists.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/routing_instances.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/routing_options.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/rpc.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/scp.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/security_policies.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/security_policies_global.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/security_zones.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/snmp_server.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/static_routes.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/system.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/user.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/vlans.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/vrf.py168
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/cliconf/junos.py9
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/config/lldp_global/lldp_global.py55
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/config/ospf_interfaces/ospf_interfaces.py2
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/acls/acls.py5
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/lldp_global/lldp_global.py2
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/lldp_interfaces/lldp_interfaces.py2
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/logging_global/logging_global.py2
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/ntp_global/ntp_global.py3
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/ospf_interfaces/ospf_interfaces.py5
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/ospfv2/ospfv2.py3
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/ospfv3/ospfv3.py3
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/prefix_lists/prefix_lists.py3
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/routing_instances/routing_instances.py3
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/routing_options/routing_options.py3
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/security_policies/security_policies.py3
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/security_policies_global/security_policies_global.py3
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/security_zones/security_zones.py3
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/snmp_server/snmp_server.py3
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/static_routes/static_routes.py3
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/vlans/vlans.py3
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/modules/junos_config.py15
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/modules/junos_l2_interfaces.py30
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/modules/junos_l3_interfaces.py50
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/modules/junos_logging.py403
-rw-r--r--ansible_collections/junipernetworks/junos/test-requirements.txt6
-rw-r--r--ansible_collections/junipernetworks/junos/tests/config.yml3
-rw-r--r--ansible_collections/junipernetworks/junos/tests/integration/targets/junos_facts/tests/netconf/network_facts.yaml124
-rw-r--r--ansible_collections/junipernetworks/junos/tests/integration/targets/junos_l2_interfaces/tests/netconf/rtt.yml12
-rw-r--r--ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/aliases0
-rw-r--r--ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/defaults/main.yaml2
-rw-r--r--ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/meta/main.yml3
-rw-r--r--ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/tasks/main.yaml3
-rw-r--r--ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/tasks/netconf.yaml21
-rw-r--r--ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/tests/netconf/basic.yaml407
-rw-r--r--ansible_collections/junipernetworks/junos/tests/integration/targets/junos_ospf_interfaces/tests/netconf/_reset_config.yaml6
-rw-r--r--ansible_collections/junipernetworks/junos/tests/integration/targets/prepare_junos_tests/tasks/main.yml20
-rw-r--r--ansible_collections/junipernetworks/junos/tests/integration/targets/prepare_junos_tests/tasks/prepare.yml18
-rw-r--r--ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.11.txt1
-rw-r--r--ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.12.txt1
-rw-r--r--ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.13.txt1
-rw-r--r--ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.18.txt (renamed from ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.10.txt)0
-rw-r--r--ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.9.txt5
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/compat/__init__.py0
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/compat/mock.py130
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/compat/unittest.py41
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/mock/path.py4
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/mock/procenv.py5
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_bgp_address_family.py3
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_bgp_global.py3
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_command.py3
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_config.py3
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_facts.py3
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_hostname.py3
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_interfaces.py3
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_l2_interfaces.py3
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_l3_interfaces.py3
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_logging_global.py3
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_netconf.py3
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_ntp_global.py3
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_ospf_interfaces.py3
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_ospfv2.py13
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_ospfv3.py3
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_package.py3
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_ping.py3
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_prefix_lists.py3
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_routing_instances.py3
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_routing_options.py3
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_rpc.py3
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_scp.py3
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_security_policies.py3
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_security_policies_global.py3
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_security_zones.py3
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_snmp_server.py3
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_vlans.py3
-rw-r--r--ansible_collections/junipernetworks/junos/tests/unit/modules/utils.py8
-rw-r--r--ansible_collections/junipernetworks/junos/tox-ansible.ini10
-rw-r--r--ansible_collections/kaytus/ksmanage/.github/workflows/ansible-test.yml54
-rw-r--r--ansible_collections/kaytus/ksmanage/.idea/.gitignore3
-rw-r--r--ansible_collections/kaytus/ksmanage/.idea/inspectionProfiles/profiles_settings.xml6
-rw-r--r--ansible_collections/kaytus/ksmanage/.idea/kaytus.ksmanage.iml12
-rw-r--r--ansible_collections/kaytus/ksmanage/.idea/modules.xml8
-rw-r--r--ansible_collections/kaytus/ksmanage/.idea/vcs.xml6
-rw-r--r--ansible_collections/kaytus/ksmanage/.idea/workspace.xml34
-rw-r--r--ansible_collections/kaytus/ksmanage/CHANGELOG.rst214
-rw-r--r--ansible_collections/kaytus/ksmanage/CODE_OF_CONDUCT.md (renamed from ansible_collections/community/sap/CODE_OF_CONDUCT.md)6
-rw-r--r--ansible_collections/kaytus/ksmanage/FILES.json6879
-rw-r--r--ansible_collections/kaytus/ksmanage/LICENSE (renamed from ansible_collections/community/sap/LICENSE)1348
-rw-r--r--ansible_collections/kaytus/ksmanage/MANIFEST.json36
-rw-r--r--ansible_collections/kaytus/ksmanage/README.md92
-rw-r--r--ansible_collections/kaytus/ksmanage/changelogs/.plugin-cache.yaml655
-rw-r--r--ansible_collections/kaytus/ksmanage/changelogs/changelog.yaml459
-rw-r--r--ansible_collections/kaytus/ksmanage/changelogs/config.yaml (renamed from ansible_collections/community/azure/changelogs/config.yaml)58
-rw-r--r--ansible_collections/kaytus/ksmanage/changelogs/fragments/.keep (renamed from ansible_collections/community/azure/changelogs/fragments/.keep)0
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/ad_group_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/ad_group_module.rst431
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/ad_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/adapter_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/add_ldisk_module.rst589
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/alert_policy_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/audit_log_info_module.rst358
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/auto_capture_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/backplane_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/backup_module.rst355
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/bios_export_module.rst318
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/bios_import_module.rst318
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/bios_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/bmc_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/boot_image_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/boot_option_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/clear_audit_log_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/clear_event_log_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/clear_system_log_module.rst334
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/collect_blackbox_module.rst319
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/collect_log_module.rst318
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/connect_media_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/cpu_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/del_session_module.rst318
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/dns_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/download_auto_screenshot_module.rst318
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/download_manual_screenshot_module.rst318
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_ad_module.rst459
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_alert_policy_module.rst430
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_auto_capture_module.rst322
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_bios_module.rst377
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_boot_image_module.rst327
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_boot_option_module.rst365
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_connect_media_module.rst360
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_dns_module.rst620
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_event_log_policy_module.rst322
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_fan_module.rst359
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_fru_module.rst352
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_ipv4_module.rst427
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_ipv6_module.rst444
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_kvm_module.rst543
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_ldap_module.rst526
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_ldisk_module.rst378
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_log_setting_module.rst474
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_m6_log_setting_module.rst490
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_manual_capture_module.rst322
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_media_instance_module.rst502
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_ncsi_module.rst389
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_network_bond_module.rst363
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_network_link_module.rst392
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_network_module.rst343
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_ntp_module.rst486
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_pdisk_module.rst482
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_power_budget_module.rst685
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_power_restore_module.rst323
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_power_status_module.rst325
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_preserve_config_module.rst373
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_psu_config_module.rst339
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_psu_peak_module.rst343
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_restore_factory_default_module.rst368
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_service_module.rst428
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_smtp_com_module.rst578
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_smtp_dest_module.rst383
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_smtp_module.rst587
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_snmp_module.rst540
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_snmp_trap_module.rst598
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_threshold_module.rst410
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_uid_module.rst343
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_virtual_media_module.rst511
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/edit_vlan_module.rst381
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/event_log_info_module.rst358
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/event_log_policy_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/fan_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/fru_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/fw_version_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/gpu_info_module.rst303
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/hard_disk_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/hba_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/index.rst149
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/kvm_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/ldap_group_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/ldap_group_module.rst431
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/ldap_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/ldisk_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/log_setting_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/media_instance_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/mem_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/ncsi_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/network_bond_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/network_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/network_link_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/ntp_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/onboard_disk_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/pcie_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/pdisk_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/power_budget_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/power_consumption_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/power_restore_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/power_status_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/preserve_config_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/psu_config_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/psu_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/psu_peak_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/raid_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/reset_bmc_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/reset_kvm_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/restore_module.rst348
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/self_test_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/sensor_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/server_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/service_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/session_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/smtp_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/snmp_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/snmp_trap_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/support_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/system_log_info_module.rst384
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/temp_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/threshold_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/uid_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/update_cpld_module.rst362
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/update_fw_module.rst426
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/update_psu_module.rst338
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/user_group_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/user_group_module.rst532
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/user_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/user_module.rst454
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/virtual_media_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/docs/volt_info_module.rst302
-rw-r--r--ansible_collections/kaytus/ksmanage/meta/runtime.yml2
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/doc_fragments/ksmanage.py59
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/module_utils/ksmanage.py54
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/ad_group.py158
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/ad_group_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/ad_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/adapter_info.py119
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/add_ldisk.py221
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/alert_policy_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/audit_log_info.py126
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/auto_capture_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/backplane_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/backup.py120
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/bios_export.py107
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/bios_import.py109
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/bios_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/bmc_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/boot_image_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/boot_option_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/clear_audit_log.py101
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/clear_event_log.py101
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/clear_system_log.py115
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/collect_blackbox.py108
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/collect_log.py107
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/connect_media_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/cpu_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/del_session.py109
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/dns_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/download_auto_screenshot.py107
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/download_manual_screenshot.py107
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_ad.py163
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_alert_policy.py156
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_auto_capture.py110
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_bios.py134
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_boot_image.py111
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_boot_option.py123
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_connect_media.py126
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_dns.py231
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_event_log_policy.py110
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_fan.py126
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_fru.py121
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_ipv4.py159
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_ipv6.py166
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_kvm.py191
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_ldap.py193
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_ldisk.py131
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_log_setting.py164
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_m6_log_setting.py174
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_manual_capture.py110
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_media_instance.py167
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_ncsi.py133
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_network.py118
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_network_bond.py123
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_network_link.py140
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_ntp.py173
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_pdisk.py178
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_power_budget.py260
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_power_restore.py110
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_power_status.py110
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_preserve_config.py136
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_psu_config.py116
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_psu_peak.py121
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_restore_factory_default.py131
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_service.py150
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_smtp.py213
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_smtp_com.py204
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_smtp_dest.py136
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_snmp.py188
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_snmp_trap.py217
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_threshold.py141
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_uid.py121
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_virtual_media.py182
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/edit_vlan.py136
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/event_log_info.py126
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/event_log_policy_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/fan_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/fru_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/fw_version_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/gpu_info.py100
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/hard_disk_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/hba_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/kvm_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/ldap_group.py158
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/ldap_group_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/ldap_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/ldisk_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/log_setting_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/media_instance_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/mem_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/ncsi_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/network_bond_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/network_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/network_link_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/ntp_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/onboard_disk_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/pcie_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/pdisk_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/power_budget_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/power_consumption_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/power_restore_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/power_status_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/preserve_config_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/psu_config_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/psu_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/psu_peak_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/raid_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/reset_bmc.py101
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/reset_kvm.py101
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/restore.py117
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/self_test_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/sensor_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/server_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/service_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/session_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/smtp_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/snmp_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/snmp_trap_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/support_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/system_log_info.py134
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/temp_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/threshold_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/uid_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/update_cpld.py130
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/update_fw.py154
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/update_psu.py117
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/user.py165
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/user_group.py204
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/user_group_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/user_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/virtual_media_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/plugins/modules/volt_info.py99
-rw-r--r--ansible_collections/kaytus/ksmanage/requirements.txt1
-rw-r--r--ansible_collections/kubernetes/core/.ansible-lint3
-rw-r--r--ansible_collections/kubernetes/core/.github/stale.yml1
-rw-r--r--ansible_collections/kubernetes/core/.github/workflows/linters.yaml4
-rw-r--r--ansible_collections/kubernetes/core/.github/workflows/unit-tests.yaml1
-rw-r--r--ansible_collections/kubernetes/core/CHANGELOG.rst63
-rw-r--r--ansible_collections/kubernetes/core/FILES.json986
-rw-r--r--ansible_collections/kubernetes/core/MANIFEST.json4
-rw-r--r--ansible_collections/kubernetes/core/Makefile2
-rw-r--r--ansible_collections/kubernetes/core/README.md8
-rw-r--r--ansible_collections/kubernetes/core/changelogs/changelog.yaml91
-rw-r--r--ansible_collections/kubernetes/core/changelogs/config.yaml32
-rw-r--r--ansible_collections/kubernetes/core/docs/kubernetes.core.helm_info_module.rst112
-rw-r--r--ansible_collections/kubernetes/core/docs/kubernetes.core.helm_module.rst205
-rw-r--r--ansible_collections/kubernetes/core/docs/kubernetes.core.helm_plugin_info_module.rst3
-rw-r--r--ansible_collections/kubernetes/core/docs/kubernetes.core.helm_plugin_module.rst35
-rw-r--r--ansible_collections/kubernetes/core/docs/kubernetes.core.helm_repository_module.rst148
-rw-r--r--ansible_collections/kubernetes/core/docs/kubernetes.core.helm_template_module.rst170
-rw-r--r--ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_cluster_info_module.rst24
-rw-r--r--ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_cp_module.rst26
-rw-r--r--ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_drain_module.rst57
-rw-r--r--ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_exec_module.rst40
-rw-r--r--ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_info_module.rst45
-rw-r--r--ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_inventory.rst53
-rw-r--r--ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_json_patch_module.rst26
-rw-r--r--ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_log_module.rst93
-rw-r--r--ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_lookup.rst98
-rw-r--r--ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_module.rst200
-rw-r--r--ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_rollback_module.rst26
-rw-r--r--ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_scale_module.rst28
-rw-r--r--ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_service_module.rst27
-rw-r--r--ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_taint_module.rst5
-rw-r--r--ansible_collections/kubernetes/core/docs/kubernetes.core.kubectl_connection.rst24
-rw-r--r--ansible_collections/kubernetes/core/docs/kubernetes.core.kustomize_lookup.rst121
-rw-r--r--ansible_collections/kubernetes/core/meta/runtime.yml16
-rw-r--r--ansible_collections/kubernetes/core/plugins/action/helm.py13
-rw-r--r--ansible_collections/kubernetes/core/plugins/action/helm_info.py13
-rw-r--r--ansible_collections/kubernetes/core/plugins/action/helm_plugin.py13
-rw-r--r--ansible_collections/kubernetes/core/plugins/action/helm_plugin_info.py13
-rw-r--r--ansible_collections/kubernetes/core/plugins/action/helm_repository.py13
-rw-r--r--ansible_collections/kubernetes/core/plugins/action/k8s.py13
-rw-r--r--ansible_collections/kubernetes/core/plugins/action/k8s_cluster_info.py13
-rw-r--r--ansible_collections/kubernetes/core/plugins/action/k8s_cp.py13
-rw-r--r--ansible_collections/kubernetes/core/plugins/action/k8s_drain.py13
-rw-r--r--ansible_collections/kubernetes/core/plugins/action/k8s_exec.py13
-rw-r--r--ansible_collections/kubernetes/core/plugins/action/k8s_info.py13
-rw-r--r--ansible_collections/kubernetes/core/plugins/action/k8s_json_patch.py (renamed from ansible_collections/kubernetes/core/plugins/action/ks8_json_patch.py)13
-rw-r--r--ansible_collections/kubernetes/core/plugins/action/k8s_log.py13
-rw-r--r--ansible_collections/kubernetes/core/plugins/action/k8s_rollback.py13
-rw-r--r--ansible_collections/kubernetes/core/plugins/action/k8s_scale.py13
-rw-r--r--ansible_collections/kubernetes/core/plugins/action/k8s_service.py13
-rw-r--r--ansible_collections/kubernetes/core/plugins/connection/kubectl.py43
-rw-r--r--ansible_collections/kubernetes/core/plugins/doc_fragments/helm_common_options.py9
-rw-r--r--ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_auth_options.py1
-rw-r--r--ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_delete_options.py3
-rw-r--r--ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_name_options.py1
-rw-r--r--ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_resource_options.py1
-rw-r--r--ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_scale_options.py1
-rw-r--r--ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_state_options.py1
-rw-r--r--ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_wait_options.py1
-rw-r--r--ansible_collections/kubernetes/core/plugins/filter/k8s.py40
-rw-r--r--ansible_collections/kubernetes/core/plugins/inventory/k8s.py26
-rw-r--r--ansible_collections/kubernetes/core/plugins/lookup/k8s.py6
-rw-r--r--ansible_collections/kubernetes/core/plugins/lookup/kustomize.py35
-rw-r--r--ansible_collections/kubernetes/core/plugins/module_utils/ansiblemodule.py4
-rw-r--r--ansible_collections/kubernetes/core/plugins/module_utils/apply.py3
-rw-r--r--ansible_collections/kubernetes/core/plugins/module_utils/client/discovery.py11
-rw-r--r--ansible_collections/kubernetes/core/plugins/module_utils/common.py47
-rw-r--r--ansible_collections/kubernetes/core/plugins/module_utils/copy.py15
-rw-r--r--ansible_collections/kubernetes/core/plugins/module_utils/hashes.py4
-rw-r--r--ansible_collections/kubernetes/core/plugins/module_utils/helm.py16
-rw-r--r--ansible_collections/kubernetes/core/plugins/module_utils/k8s/client.py3
-rw-r--r--ansible_collections/kubernetes/core/plugins/module_utils/k8s/core.py9
-rw-r--r--ansible_collections/kubernetes/core/plugins/module_utils/k8s/resource.py2
-rw-r--r--ansible_collections/kubernetes/core/plugins/module_utils/k8s/runner.py56
-rw-r--r--ansible_collections/kubernetes/core/plugins/module_utils/k8s/service.py89
-rw-r--r--ansible_collections/kubernetes/core/plugins/module_utils/k8s/waiter.py8
-rw-r--r--ansible_collections/kubernetes/core/plugins/module_utils/k8sdynamicclient.py3
-rw-r--r--ansible_collections/kubernetes/core/plugins/module_utils/selector.py1
-rw-r--r--ansible_collections/kubernetes/core/plugins/modules/helm.py168
-rw-r--r--ansible_collections/kubernetes/core/plugins/modules/helm_info.py14
-rw-r--r--ansible_collections/kubernetes/core/plugins/modules/helm_plugin.py5
-rw-r--r--ansible_collections/kubernetes/core/plugins/modules/helm_plugin_info.py6
-rw-r--r--ansible_collections/kubernetes/core/plugins/modules/helm_pull.py2
-rw-r--r--ansible_collections/kubernetes/core/plugins/modules/helm_repository.py18
-rw-r--r--ansible_collections/kubernetes/core/plugins/modules/helm_template.py4
-rw-r--r--ansible_collections/kubernetes/core/plugins/modules/k8s.py41
-rw-r--r--ansible_collections/kubernetes/core/plugins/modules/k8s_cluster_info.py12
-rw-r--r--ansible_collections/kubernetes/core/plugins/modules/k8s_cp.py25
-rw-r--r--ansible_collections/kubernetes/core/plugins/modules/k8s_drain.py57
-rw-r--r--ansible_collections/kubernetes/core/plugins/modules/k8s_exec.py16
-rw-r--r--ansible_collections/kubernetes/core/plugins/modules/k8s_info.py20
-rw-r--r--ansible_collections/kubernetes/core/plugins/modules/k8s_json_patch.py7
-rw-r--r--ansible_collections/kubernetes/core/plugins/modules/k8s_log.py14
-rw-r--r--ansible_collections/kubernetes/core/plugins/modules/k8s_rollback.py6
-rw-r--r--ansible_collections/kubernetes/core/plugins/modules/k8s_scale.py16
-rw-r--r--ansible_collections/kubernetes/core/plugins/modules/k8s_service.py18
-rw-r--r--ansible_collections/kubernetes/core/plugins/modules/k8s_taint.py7
-rw-r--r--ansible_collections/kubernetes/core/requirements.txt2
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/helm/defaults/main.yml2
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/helm/library/helm_test_pending.py130
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/helm/library/helm_test_version.py4
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/helm/playbook.yaml7
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/helm/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/run_test.yml6
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/test_helm_reuse_values.yml75
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/test_helm_uninstall.yml31
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/test_helm_with_space_into_chart_name.yml58
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/files/test-chart-reuse-values/Chart.yaml24
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/files/test-chart-reuse-values/templates/configmap.yaml7
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/files/test-chart-reuse-values/values.yaml2
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/playbook.yaml7
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/helm_diff/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/tasks/main.yml45
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/tasks/reuse_values.yml93
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/meta/main.yml1
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/playbook.yaml7
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/helm_plugin/playbook.yaml7
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/helm_plugin/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/helm_pull/playbook.yaml7
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/helm_pull/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/helm_repository/playbook.yaml7
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/helm_repository/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/helm_set_values/meta/main.yml1
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/helm_set_values/playbook.yaml7
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/helm_set_values/runme.sh5
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/inventory_k8s/runme.sh1
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_access_review/playbook.yaml6
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/k8s_access_review/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_append_hash/playbook.yaml6
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/k8s_append_hash/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_apply/playbook.yaml6
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/k8s_apply/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_check_mode/playbook.yaml6
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/k8s_check_mode/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_cluster_info/playbook.yaml6
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/k8s_cluster_info/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/library/k8s_create_file.py93
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/library/kubectl_file_compare.py5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/playbook.yaml6
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/tasks/test_copy_large_file.yml15
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_crd/playbook.yaml6
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/k8s_crd/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/files/deployments.yaml70
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/playbook.yaml6
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/tasks/main.yml71
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_diff/playbook.yaml6
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/k8s_diff/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_drain/playbook.yaml6
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/k8s_drain/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_drain/tasks/main.yml85
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_exec/playbook.yaml6
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/k8s_exec/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_full/playbook.yaml6
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/k8s_full/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_gc/playbook.yaml6
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/k8s_gc/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_generate_name/playbook.yaml6
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/k8s_generate_name/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/aliases3
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/defaults/main.yml12
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/meta/main.yml2
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/playbook.yaml6
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/tasks/main.yml108
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/playbook.yaml6
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/k8s_info/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/tasks/wait.yml2
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_json_patch/playbook.yaml6
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/k8s_json_patch/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_label_selectors/playbook.yaml6
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/k8s_label_selectors/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_lists/playbook.yaml6
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/k8s_lists/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_log/playbook.yaml6
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/k8s_log/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_manifest_url/playbook.yaml6
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/k8s_manifest_url/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_merge_type/playbook.yaml6
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/k8s_merge_type/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_patched/playbook.yaml6
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/k8s_patched/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_rollback/playbook.yaml6
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/k8s_rollback/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_scale/playbook.yaml6
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/k8s_scale/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_scale/tasks/main.yml65
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_taint/playbook.yaml6
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/k8s_taint/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_template/playbook.yaml6
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/k8s_template/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_user_impersonation/playbook.yaml6
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/k8s_user_impersonation/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_validate/playbook.yaml6
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/k8s_validate/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_validate/tasks/main.yml1
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/k8s_waiter/playbook.yaml6
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/k8s_waiter/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/lookup_k8s/playbook.yaml6
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/lookup_k8s/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/lookup_kustomize/playbook.yaml6
-rwxr-xr-xansible_collections/kubernetes/core/tests/integration/targets/lookup_kustomize/runme.sh5
-rw-r--r--ansible_collections/kubernetes/core/tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py2
-rw-r--r--ansible_collections/kubernetes/core/tests/sanity/ignore-2.10.txt616
-rw-r--r--ansible_collections/kubernetes/core/tests/sanity/ignore-2.11.txt592
-rw-r--r--ansible_collections/kubernetes/core/tests/sanity/ignore-2.13.txt32
-rw-r--r--ansible_collections/kubernetes/core/tests/sanity/ignore-2.14.txt2
-rw-r--r--ansible_collections/kubernetes/core/tests/sanity/ignore-2.15.txt2
-rw-r--r--ansible_collections/kubernetes/core/tests/sanity/ignore-2.16.txt2
-rw-r--r--ansible_collections/kubernetes/core/tests/sanity/ignore-2.17.txt2
-rw-r--r--ansible_collections/kubernetes/core/tests/sanity/ignore-2.18.txt (renamed from ansible_collections/kubernetes/core/tests/sanity/ignore-2.12.txt)19
-rw-r--r--ansible_collections/kubernetes/core/tests/sanity/ignore-2.9.txt613
-rw-r--r--ansible_collections/kubernetes/core/tests/unit/action/test_remove_omit.py1
-rw-r--r--ansible_collections/kubernetes/core/tests/unit/conftest.py5
-rw-r--r--ansible_collections/kubernetes/core/tests/unit/module_utils/test_apply.py2
-rw-r--r--ansible_collections/kubernetes/core/tests/unit/module_utils/test_client.py8
-rw-r--r--ansible_collections/kubernetes/core/tests/unit/module_utils/test_core.py13
-rw-r--r--ansible_collections/kubernetes/core/tests/unit/module_utils/test_discoverer.py12
-rw-r--r--ansible_collections/kubernetes/core/tests/unit/module_utils/test_helm.py95
-rw-r--r--ansible_collections/kubernetes/core/tests/unit/module_utils/test_runner.py5
-rw-r--r--ansible_collections/kubernetes/core/tests/unit/module_utils/test_service.py4
-rw-r--r--ansible_collections/kubernetes/core/tests/unit/module_utils/test_waiter.py9
-rw-r--r--ansible_collections/kubernetes/core/tests/unit/modules/test_helm_template_module.py3
-rw-r--r--ansible_collections/kubernetes/core/tests/unit/modules/test_module_helm.py45
-rw-r--r--ansible_collections/kubernetes/core/tox.ini36
-rw-r--r--ansible_collections/netapp/aws/.github/ISSUE_TEMPLATE/bug_report.yml210
-rw-r--r--ansible_collections/netapp/aws/.github/ISSUE_TEMPLATE/feature_request.yml100
-rw-r--r--ansible_collections/netapp/aws/.github/workflows/coverage.yml45
-rw-r--r--ansible_collections/netapp/aws/.github/workflows/main.yml47
-rw-r--r--ansible_collections/netapp/aws/CHANGELOG.rst90
-rw-r--r--ansible_collections/netapp/aws/COPYING674
-rw-r--r--ansible_collections/netapp/aws/FILES.json383
-rw-r--r--ansible_collections/netapp/aws/MANIFEST.json35
-rw-r--r--ansible_collections/netapp/aws/README.md87
-rw-r--r--ansible_collections/netapp/aws/changelogs/changelog.yaml81
-rw-r--r--ansible_collections/netapp/aws/changelogs/config.yaml32
-rw-r--r--ansible_collections/netapp/aws/changelogs/fragments/20.2.0.yaml2
-rw-r--r--ansible_collections/netapp/aws/changelogs/fragments/20.6.0.yaml2
-rw-r--r--ansible_collections/netapp/aws/changelogs/fragments/20.8.0.yaml3
-rw-r--r--ansible_collections/netapp/aws/changelogs/fragments/20.9.0.yaml2
-rw-r--r--ansible_collections/netapp/aws/changelogs/fragments/2019.10.0.yaml2
-rw-r--r--ansible_collections/netapp/aws/changelogs/fragments/DEVOPS-3569.yaml4
-rw-r--r--ansible_collections/netapp/aws/changelogs/fragments/DEVOPS-3644.yaml5
-rw-r--r--ansible_collections/netapp/aws/changelogs/fragments/DEVOPS-4416.yaml2
-rw-r--r--ansible_collections/netapp/aws/meta/execution-environment.yml3
-rw-r--r--ansible_collections/netapp/aws/meta/runtime.yml8
-rw-r--r--ansible_collections/netapp/aws/plugins/doc_fragments/netapp.py55
-rw-r--r--ansible_collections/netapp/aws/plugins/module_utils/netapp.py241
-rw-r--r--ansible_collections/netapp/aws/plugins/module_utils/netapp_module.py142
-rw-r--r--ansible_collections/netapp/aws/plugins/modules/aws_netapp_cvs_active_directory.py276
-rw-r--r--ansible_collections/netapp/aws/plugins/modules/aws_netapp_cvs_filesystems.py362
-rw-r--r--ansible_collections/netapp/aws/plugins/modules/aws_netapp_cvs_pool.py267
-rw-r--r--ansible_collections/netapp/aws/plugins/modules/aws_netapp_cvs_snapshots.py245
-rw-r--r--ansible_collections/netapp/aws/requirements.txt1
-rw-r--r--ansible_collections/netapp/aws/tests/unit/compat/__init__.py0
-rw-r--r--ansible_collections/netapp/aws/tests/unit/compat/builtins.py33
-rw-r--r--ansible_collections/netapp/aws/tests/unit/compat/mock.py122
-rw-r--r--ansible_collections/netapp/aws/tests/unit/compat/unittest.py44
-rw-r--r--ansible_collections/netapp/aws/tests/unit/plugins/module_utils/test_netapp.py195
-rw-r--r--ansible_collections/netapp/aws/tests/unit/plugins/modules/test_aws_netapp_cvs_active_directory.py117
-rw-r--r--ansible_collections/netapp/aws/tests/unit/plugins/modules/test_aws_netapp_cvs_filesystems.py155
-rw-r--r--ansible_collections/netapp/aws/tests/unit/plugins/modules/test_aws_netapp_cvs_pool.py258
-rw-r--r--ansible_collections/netapp/aws/tests/unit/plugins/modules/test_aws_netapp_cvs_snapshots.py147
-rw-r--r--ansible_collections/netapp/aws/tests/unit/requirements.txt1
-rw-r--r--ansible_collections/netapp/azure/.github/ISSUE_TEMPLATE/bug_report.yml210
-rw-r--r--ansible_collections/netapp/azure/.github/ISSUE_TEMPLATE/feature_request.yml100
-rw-r--r--ansible_collections/netapp/azure/.github/workflows/codeql-analysis.yml71
-rw-r--r--ansible_collections/netapp/azure/.github/workflows/coverage.yml45
-rw-r--r--ansible_collections/netapp/azure/.github/workflows/main.yml67
-rw-r--r--ansible_collections/netapp/azure/CHANGELOG.rst171
-rw-r--r--ansible_collections/netapp/azure/COPYING674
-rw-r--r--ansible_collections/netapp/azure/FILES.json705
-rw-r--r--ansible_collections/netapp/azure/HACK.md13
-rw-r--r--ansible_collections/netapp/azure/MANIFEST.json37
-rw-r--r--ansible_collections/netapp/azure/README.md158
-rw-r--r--ansible_collections/netapp/azure/changelogs/changelog.yaml169
-rw-r--r--ansible_collections/netapp/azure/changelogs/config.yaml32
-rw-r--r--ansible_collections/netapp/azure/changelogs/fragments/20.2.0.yaml2
-rw-r--r--ansible_collections/netapp/azure/changelogs/fragments/20.4.0.yaml3
-rw-r--r--ansible_collections/netapp/azure/changelogs/fragments/20.5.0.yaml6
-rw-r--r--ansible_collections/netapp/azure/changelogs/fragments/20.6.0.yaml3
-rw-r--r--ansible_collections/netapp/azure/changelogs/fragments/20.7.0.yaml2
-rw-r--r--ansible_collections/netapp/azure/changelogs/fragments/20.8.0.yaml3
-rw-r--r--ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3505.yaml4
-rw-r--r--ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3526.yaml3
-rw-r--r--ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3663.yaml2
-rw-r--r--ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3704.yaml5
-rw-r--r--ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3849.yaml3
-rw-r--r--ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3935.yaml2
-rw-r--r--ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3949.yaml6
-rw-r--r--ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4001.yaml2
-rw-r--r--ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4070.yaml3
-rw-r--r--ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4135.yaml2
-rw-r--r--ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4246.yaml4
-rw-r--r--ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4416.yaml2
-rw-r--r--ansible_collections/netapp/azure/meta/runtime.yml8
-rw-r--r--ansible_collections/netapp/azure/plugins/doc_fragments/azure.py129
-rw-r--r--ansible_collections/netapp/azure/plugins/doc_fragments/azure_tags.py31
-rw-r--r--ansible_collections/netapp/azure/plugins/doc_fragments/netapp.py43
-rw-r--r--ansible_collections/netapp/azure/plugins/module_utils/azure_rm_netapp_common.py163
-rw-r--r--ansible_collections/netapp/azure/plugins/module_utils/netapp_module.py271
-rw-r--r--ansible_collections/netapp/azure/plugins/modules/azure_rm_netapp_account.py404
-rw-r--r--ansible_collections/netapp/azure/plugins/modules/azure_rm_netapp_capacity_pool.py259
-rw-r--r--ansible_collections/netapp/azure/plugins/modules/azure_rm_netapp_snapshot.py226
-rw-r--r--ansible_collections/netapp/azure/plugins/modules/azure_rm_netapp_volume.py399
-rw-r--r--ansible_collections/netapp/azure/requirements.txt3
-rw-r--r--ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_account/tasks/main.yml41
-rw-r--r--ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_capacity_pool/aliases3
-rw-r--r--ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_capacity_pool/meta/main.yml2
-rw-r--r--ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_capacity_pool/tasks/main.yml47
-rw-r--r--ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_snapshot/tasks/main.yml51
-rw-r--r--ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_volume/tasks/main.yml57
-rw-r--r--ansible_collections/netapp/azure/tests/runner/requirements/integration.cloud.azure.txt1
-rw-r--r--ansible_collections/netapp/azure/tests/runner/requirements/requirements-azure.txt9
-rw-r--r--ansible_collections/netapp/azure/tests/runner/requirements/unit.cloud.azure.txt1
-rw-r--r--ansible_collections/netapp/azure/tests/runner/requirements/units.txt1
-rw-r--r--ansible_collections/netapp/azure/tests/unit/compat/__init__.py0
-rw-r--r--ansible_collections/netapp/azure/tests/unit/compat/builtins.py33
-rw-r--r--ansible_collections/netapp/azure/tests/unit/compat/mock.py122
-rw-r--r--ansible_collections/netapp/azure/tests/unit/compat/unittest.py44
-rw-r--r--ansible_collections/netapp/azure/tests/unit/plugins/module_utils/test_netapp_module.py149
-rw-r--r--ansible_collections/netapp/azure/tests/unit/plugins/modules/test_azure_rm_netapp_account.py173
-rw-r--r--ansible_collections/netapp/azure/tests/unit/plugins/modules/test_azure_rm_netapp_capacity_pool.py197
-rw-r--r--ansible_collections/netapp/azure/tests/unit/plugins/modules/test_azure_rm_netapp_snapshot.py165
-rw-r--r--ansible_collections/netapp/azure/tests/unit/plugins/modules/test_azure_rm_netapp_volume.py501
-rw-r--r--ansible_collections/netapp/azure/tests/unit/plugins/modules/test_azure_rm_netapp_volume_import.py74
-rw-r--r--ansible_collections/netapp/azure/tests/unit/requirements.txt3
-rw-r--r--ansible_collections/netapp/elementsw/.github/ISSUE_TEMPLATE/bug_report.yml210
-rw-r--r--ansible_collections/netapp/elementsw/.github/ISSUE_TEMPLATE/feature_request.yml100
-rw-r--r--ansible_collections/netapp/elementsw/.github/workflows/coverage.yml45
-rw-r--r--ansible_collections/netapp/elementsw/.github/workflows/main.yml47
-rw-r--r--ansible_collections/netapp/elementsw/CHANGELOG.rst192
-rw-r--r--ansible_collections/netapp/elementsw/FILES.json649
-rw-r--r--ansible_collections/netapp/elementsw/MANIFEST.json34
-rw-r--r--ansible_collections/netapp/elementsw/README.md133
-rw-r--r--ansible_collections/netapp/elementsw/changelogs/changelog.yaml221
-rw-r--r--ansible_collections/netapp/elementsw/changelogs/config.yaml32
-rw-r--r--ansible_collections/netapp/elementsw/changelogs/fragments/20.2.0.yaml3
-rw-r--r--ansible_collections/netapp/elementsw/changelogs/fragments/20.6.0.yaml2
-rw-r--r--ansible_collections/netapp/elementsw/changelogs/fragments/20.8.0.yaml21
-rw-r--r--ansible_collections/netapp/elementsw/changelogs/fragments/20.9.0.yaml7
-rw-r--r--ansible_collections/netapp/elementsw/changelogs/fragments/2019.10.0.yaml2
-rw-r--r--ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3117.yaml2
-rw-r--r--ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3174.yaml2
-rw-r--r--ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3188.yaml2
-rw-r--r--ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3196.yaml2
-rw-r--r--ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3235.yaml2
-rw-r--r--ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3310.yml2
-rw-r--r--ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3324.yaml2
-rw-r--r--ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3731.yaml4
-rw-r--r--ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3733.yaml4
-rw-r--r--ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3734.yaml2
-rw-r--r--ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3800.yaml2
-rw-r--r--ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-4416.yaml2
-rw-r--r--ansible_collections/netapp/elementsw/meta/runtime.yml28
-rw-r--r--ansible_collections/netapp/elementsw/plugins/doc_fragments/netapp.py51
-rw-r--r--ansible_collections/netapp/elementsw/plugins/module_utils/netapp.py107
-rw-r--r--ansible_collections/netapp/elementsw/plugins/module_utils/netapp_elementsw_module.py206
-rw-r--r--ansible_collections/netapp/elementsw/plugins/module_utils/netapp_module.py225
-rw-r--r--ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_access_group.py397
-rw-r--r--ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_access_group_volumes.py247
-rw-r--r--ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_account.py340
-rw-r--r--ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_admin_users.py233
-rw-r--r--ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_backup.py243
-rw-r--r--ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_check_connections.py154
-rw-r--r--ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_cluster.py372
-rw-r--r--ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_cluster_config.py331
-rw-r--r--ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_cluster_pair.py206
-rw-r--r--ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_cluster_snmp.py365
-rw-r--r--ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_drive.py368
-rw-r--r--ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_info.py272
-rw-r--r--ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_initiators.py343
-rw-r--r--ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_ldap.py254
-rw-r--r--ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_network_interfaces.py423
-rw-r--r--ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_node.py357
-rw-r--r--ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_qos_policy.py270
-rw-r--r--ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_snapshot.py369
-rw-r--r--ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_snapshot_restore.py203
-rw-r--r--ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_snapshot_schedule.py586
-rw-r--r--ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_vlan.py274
-rw-r--r--ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_volume.py413
-rw-r--r--ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_volume_clone.py276
-rw-r--r--ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_volume_pair.py293
-rw-r--r--ansible_collections/netapp/elementsw/requirements.txt1
-rw-r--r--ansible_collections/netapp/elementsw/tests/unit/compat/__init__.py0
-rw-r--r--ansible_collections/netapp/elementsw/tests/unit/compat/builtins.py33
-rw-r--r--ansible_collections/netapp/elementsw/tests/unit/compat/mock.py122
-rw-r--r--ansible_collections/netapp/elementsw/tests/unit/compat/unittest.py44
-rw-r--r--ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_access_group.py175
-rw-r--r--ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_access_group_volumes.py245
-rw-r--r--ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_account.py137
-rw-r--r--ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_cluster.py228
-rw-r--r--ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_cluster_config.py157
-rw-r--r--ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_cluster_snmp.py176
-rw-r--r--ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_info.py344
-rw-r--r--ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_initiators.py201
-rw-r--r--ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_network_interfaces.py293
-rw-r--r--ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_nodes.py324
-rw-r--r--ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_qos_policy.py300
-rw-r--r--ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_template.py138
-rw-r--r--ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_vlan.py343
-rw-r--r--ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_volume.py364
-rw-r--r--ansible_collections/netapp/elementsw/tests/unit/plugins/modules_utils/test_netapp_module.py149
-rw-r--r--ansible_collections/netapp/elementsw/tests/unit/requirements.txt1
-rw-r--r--ansible_collections/netapp/um_info/.github/ISSUE_TEMPLATE/bug_report.yml210
-rw-r--r--ansible_collections/netapp/um_info/.github/ISSUE_TEMPLATE/feature_request.yml100
-rw-r--r--ansible_collections/netapp/um_info/.github/workflows/coverage.yml45
-rw-r--r--ansible_collections/netapp/um_info/.github/workflows/main.yml49
-rw-r--r--ansible_collections/netapp/um_info/CHANGELOG.rst78
-rw-r--r--ansible_collections/netapp/um_info/COPYING674
-rw-r--r--ansible_collections/netapp/um_info/FILES.json467
-rw-r--r--ansible_collections/netapp/um_info/MANIFEST.json34
-rw-r--r--ansible_collections/netapp/um_info/README.md84
-rw-r--r--ansible_collections/netapp/um_info/changelogs/changelog.yaml72
-rw-r--r--ansible_collections/netapp/um_info/changelogs/config.yaml32
-rw-r--r--ansible_collections/netapp/um_info/changelogs/fragments/20.7.0.yaml3
-rw-r--r--ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-2952.yaml4
-rw-r--r--ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-3920.yaml2
-rw-r--r--ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-3962.yaml6
-rw-r--r--ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-4059.yaml2
-rw-r--r--ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-4087.yaml4
-rw-r--r--ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-4416.yaml2
-rw-r--r--ansible_collections/netapp/um_info/meta/execution-environment.yml3
-rw-r--r--ansible_collections/netapp/um_info/meta/runtime.yml9
-rw-r--r--ansible_collections/netapp/um_info/metadata-29PbAy.json14
-rw-r--r--ansible_collections/netapp/um_info/plugins/doc_fragments/netapp.py74
-rw-r--r--ansible_collections/netapp/um_info/plugins/module_utils/netapp.py246
-rw-r--r--ansible_collections/netapp/um_info/plugins/module_utils/netapp_module.py51
-rw-r--r--ansible_collections/netapp/um_info/plugins/modules/na_um_aggregates_info.py163
-rw-r--r--ansible_collections/netapp/um_info/plugins/modules/na_um_clusters_info.py152
-rw-r--r--ansible_collections/netapp/um_info/plugins/modules/na_um_list_aggregates.py163
-rw-r--r--ansible_collections/netapp/um_info/plugins/modules/na_um_list_clusters.py152
-rw-r--r--ansible_collections/netapp/um_info/plugins/modules/na_um_list_nodes.py145
-rw-r--r--ansible_collections/netapp/um_info/plugins/modules/na_um_list_svms.py174
-rw-r--r--ansible_collections/netapp/um_info/plugins/modules/na_um_list_volumes.py133
-rw-r--r--ansible_collections/netapp/um_info/plugins/modules/na_um_nodes_info.py145
-rw-r--r--ansible_collections/netapp/um_info/plugins/modules/na_um_svms_info.py174
-rw-r--r--ansible_collections/netapp/um_info/plugins/modules/na_um_volumes_info.py133
-rw-r--r--ansible_collections/netapp/um_info/requirements.txt1
-rw-r--r--ansible_collections/netapp/um_info/tests/unit/compat/__init__.py0
-rw-r--r--ansible_collections/netapp/um_info/tests/unit/compat/builtins.py33
-rw-r--r--ansible_collections/netapp/um_info/tests/unit/compat/mock.py122
-rw-r--r--ansible_collections/netapp/um_info/tests/unit/compat/unittest.py44
-rw-r--r--ansible_collections/netapp/um_info/tests/unit/plugins/module_utils/test_netapp.py236
-rw-r--r--ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_aggregates_info.py159
-rw-r--r--ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_clusters_info.py159
-rw-r--r--ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_list_aggregates.py159
-rw-r--r--ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_list_clusters.py159
-rw-r--r--ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_list_nodes.py158
-rw-r--r--ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_list_svms.py158
-rw-r--r--ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_list_volumes.py158
-rw-r--r--ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_nodes_info.py158
-rw-r--r--ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_svms_info.py158
-rw-r--r--ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_volumes_info.py158
-rw-r--r--ansible_collections/netapp/um_info/tests/unit/requirements.txt1
-rw-r--r--ansible_collections/netbox/netbox/CHANGELOG.rst22
-rw-r--r--ansible_collections/netbox/netbox/FILES.json3146
-rw-r--r--ansible_collections/netbox/netbox/MANIFEST.json4
-rw-r--r--ansible_collections/netbox/netbox/changelogs/changelog.yaml22
-rw-r--r--ansible_collections/netbox/netbox/docs/conf.py2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/index.rst8
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/nb_inventory_inventory.rst96
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/nb_lookup_lookup.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_aggregate_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_asn_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_cable_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_circuit_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_circuit_termination_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_circuit_type_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_cluster_group_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_cluster_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_cluster_type_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_config_context_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_config_template_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_console_port_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_console_port_template_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_console_server_port_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_console_server_port_template_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_contact_group_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_contact_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_contact_role_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_custom_field_choice_set_module.rst762
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_custom_field_module.rst26
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_custom_link_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_device_bay_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_device_bay_template_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_device_interface_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_device_interface_template_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_device_module.rst6
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_device_role_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_device_type_module.rst6
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_export_template_module.rst34
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_fhrp_group_assignment_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_fhrp_group_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_front_port_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_front_port_template_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_interface_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_inventory_item_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_inventory_item_role_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_ip_address_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_ipam_role_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_journal_entry_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_l2vpn_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_l2vpn_termination_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_location_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_manufacturer_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_module_bay_module.rst825
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_module_module.rst984
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_module_type_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_platform_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_power_feed_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_power_outlet_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_power_outlet_template_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_power_panel_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_power_port_module.rst47
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_power_port_template_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_prefix_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_provider_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_provider_network_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_rack_group_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_rack_module.rst4
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_rack_role_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_rear_port_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_rear_port_template_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_region_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_rir_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_route_target_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_service_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_service_template_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_site_group_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_site_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_tag_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_tenant_group_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_tenant_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_virtual_chassis_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_virtual_disk_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_virtual_machine_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_vlan_group_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_vlan_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_vm_interface_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_vrf_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_webhook_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_wireless_lan_group_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_wireless_lan_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/docs/plugins/netbox_wireless_link_module.rst2
-rw-r--r--ansible_collections/netbox/netbox/meta/runtime.yml2
-rw-r--r--ansible_collections/netbox/netbox/plugins/inventory/nb_inventory.py74
-rw-r--r--ansible_collections/netbox/netbox/plugins/lookup/nb_lookup.py4
-rw-r--r--ansible_collections/netbox/netbox/plugins/module_utils/netbox_dcim.py37
-rw-r--r--ansible_collections/netbox/netbox/plugins/module_utils/netbox_extras.py1
-rw-r--r--ansible_collections/netbox/netbox/plugins/module_utils/netbox_utils.py23
-rw-r--r--ansible_collections/netbox/netbox/plugins/modules/netbox_custom_field.py24
-rw-r--r--ansible_collections/netbox/netbox/plugins/modules/netbox_custom_field_choice_set.py164
-rw-r--r--ansible_collections/netbox/netbox/plugins/modules/netbox_device.py6
-rw-r--r--ansible_collections/netbox/netbox/plugins/modules/netbox_device_type.py6
-rw-r--r--ansible_collections/netbox/netbox/plugins/modules/netbox_export_template.py30
-rw-r--r--ansible_collections/netbox/netbox/plugins/modules/netbox_module.py213
-rw-r--r--ansible_collections/netbox/netbox/plugins/modules/netbox_module_bay.py156
-rw-r--r--ansible_collections/netbox/netbox/plugins/modules/netbox_power_port.py7
-rw-r--r--ansible_collections/netbox/netbox/plugins/modules/netbox_rack.py4
-rw-r--r--ansible_collections/netbox/netbox/poetry.lock272
-rwxr-xr-xansible_collections/netbox/netbox/tests/integration/netbox-deploy.py9
-rw-r--r--ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-bearer-token.json135
-rw-r--r--ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-jinja2-filter.json123
-rw-r--r--ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-jinja2.json1
-rw-r--r--ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-legacy.json23
-rw-r--r--ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-noracks.json135
-rw-r--r--ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-options-flatten.json135
-rw-r--r--ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-options.json1
-rw-r--r--ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-plurals-flatten.json1
-rw-r--r--ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-plurals.json135
-rw-r--r--ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory.json291
-rw-r--r--ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory.yml1
-rw-r--r--ansible_collections/netbox/netbox/tests/integration/targets/v3.5/tasks/netbox_device.yml2
-rw-r--r--ansible_collections/netbox/netbox/tests/integration/targets/v3.5/tasks/netbox_device_type.yml2
-rw-r--r--ansible_collections/netbox/netbox/tests/integration/targets/v3.5/tasks/netbox_module.yml107
-rw-r--r--ansible_collections/netbox/netbox/tests/integration/targets/v3.5/tasks/netbox_module_bay.yml105
-rw-r--r--ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/main.yml5
-rw-r--r--ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_custom_field_choice_set.yml106
-rw-r--r--ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_device.yml2
-rw-r--r--ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_device_type.yml2
-rw-r--r--ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_module.yml107
-rw-r--r--ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_module_bay.yml105
-rw-r--r--ansible_collections/netbox/netbox/tests/integration/targets/v3.7/tasks/netbox_device.yml2
-rw-r--r--ansible_collections/netbox/netbox/tests/integration/targets/v3.7/tasks/netbox_device_type.yml2
-rw-r--r--ansible_collections/netbox/netbox/tests/integration/targets/v3.7/tasks/netbox_module.yml107
-rw-r--r--ansible_collections/netbox/netbox/tests/integration/targets/v3.7/tasks/netbox_module_bay.yml105
-rw-r--r--ansible_collections/netbox/netbox/tests/unit/inventory/test_data/data.json12
-rw-r--r--ansible_collections/netbox/netbox/tests/unit/inventory/test_data/extract_custom_fields/data.json21
-rw-r--r--ansible_collections/netbox/netbox/tests/unit/inventory/test_data/group_extractors/data.json9
-rw-r--r--ansible_collections/netbox/netbox/tests/unit/inventory/test_nb_inventory.py16
-rw-r--r--ansible_collections/netbox/netbox/tests/unit/module_utils/test_netbox_base_class.py14
-rw-r--r--ansible_collections/purestorage/flasharray/.github/workflows/main.yml1
-rw-r--r--ansible_collections/purestorage/flasharray/CHANGELOG.rst21
-rw-r--r--ansible_collections/purestorage/flasharray/FILES.json97
-rw-r--r--ansible_collections/purestorage/flasharray/MANIFEST.json4
-rw-r--r--ansible_collections/purestorage/flasharray/README.md2
-rw-r--r--ansible_collections/purestorage/flasharray/changelogs/.plugin-cache.yaml2
-rw-r--r--ansible_collections/purestorage/flasharray/changelogs/changelog.yaml27
-rw-r--r--ansible_collections/purestorage/flasharray/changelogs/fragments/210_add_rename_hgroup.yaml (renamed from ansible_collections/purestorage/flasharray/changelogs/210_add_rename_hgroup.yaml)0
-rw-r--r--ansible_collections/purestorage/flasharray/changelogs/fragments/211_fix_clearing_host_inititators.yaml (renamed from ansible_collections/purestorage/flasharray/changelogs/211_fix_clearing_host_inititators.yaml)0
-rw-r--r--ansible_collections/purestorage/flasharray/changelogs/fragments/550_service.yaml2
-rw-r--r--ansible_collections/purestorage/flasharray/changelogs/fragments/555_update_pg.yaml2
-rw-r--r--ansible_collections/purestorage/flasharray/changelogs/fragments/558_add_perf_info.yaml2
-rw-r--r--ansible_collections/purestorage/flasharray/changelogs/fragments/559_volume_response.yaml2
-rw-r--r--ansible_collections/purestorage/flasharray/changelogs/fragments/560_snapshot_epoch.yaml2
-rw-r--r--ansible_collections/purestorage/flasharray/changelogs/fragments/561_remote_snap_info.yaml2
-rw-r--r--ansible_collections/purestorage/flasharray/changelogs/fragments/562_host_vol_fix.yaml3
-rw-r--r--ansible_collections/purestorage/flasharray/meta/runtime.yml2
-rw-r--r--ansible_collections/purestorage/flasharray/plugins/modules/purefa_host.py3
-rw-r--r--ansible_collections/purestorage/flasharray/plugins/modules/purefa_info.py390
-rw-r--r--ansible_collections/purestorage/flasharray/plugins/modules/purefa_pg.py144
-rw-r--r--ansible_collections/purestorage/flasharray/plugins/modules/purefa_volume.py189
-rw-r--r--ansible_collections/purestorage/fusion/.github/CONTRIBUTING.md19
-rw-r--r--ansible_collections/purestorage/fusion/.github/ISSUE_TEMPLATE/bug_report.md38
-rw-r--r--ansible_collections/purestorage/fusion/.github/ISSUE_TEMPLATE/feature_request.md20
-rw-r--r--ansible_collections/purestorage/fusion/.github/pull_request_template.md25
-rw-r--r--ansible_collections/purestorage/fusion/.github/workflows/ansible-lint.yaml10
-rw-r--r--ansible_collections/purestorage/fusion/.github/workflows/black.yaml11
-rw-r--r--ansible_collections/purestorage/fusion/.github/workflows/create-release.yaml117
-rw-r--r--ansible_collections/purestorage/fusion/.github/workflows/main.yml53
-rw-r--r--ansible_collections/purestorage/fusion/.github/workflows/rh_automation_hub_token_keep_alive.yml19
-rw-r--r--ansible_collections/purestorage/fusion/.github/workflows/stale.yml19
-rw-r--r--ansible_collections/purestorage/fusion/.gitignore12
-rw-r--r--ansible_collections/purestorage/fusion/.yamllint7
-rw-r--r--ansible_collections/purestorage/fusion/CHANGELOG.rst249
-rw-r--r--ansible_collections/purestorage/fusion/COPYING.GPLv3674
-rw-r--r--ansible_collections/purestorage/fusion/FILES.json1244
-rw-r--r--ansible_collections/purestorage/fusion/MANIFEST.json34
-rw-r--r--ansible_collections/purestorage/fusion/README.md104
-rw-r--r--ansible_collections/purestorage/fusion/changelogs/.plugin-cache.yaml114
-rw-r--r--ansible_collections/purestorage/fusion/changelogs/changelog.yaml381
-rw-r--r--ansible_collections/purestorage/fusion/changelogs/config.yaml32
-rw-r--r--ansible_collections/purestorage/fusion/meta/runtime.yml12
-rw-r--r--ansible_collections/purestorage/fusion/playbooks/simple/create_array.yml17
-rw-r--r--ansible_collections/purestorage/fusion/playbooks/simple/create_availability_zone.yml13
-rw-r--r--ansible_collections/purestorage/fusion/playbooks/simple/create_tenant_space.yml12
-rw-r--r--ansible_collections/purestorage/fusion/playbooks/simple/list_all.yml14
-rw-r--r--ansible_collections/purestorage/fusion/playbooks/simple/list_api_clients.yml14
-rw-r--r--ansible_collections/purestorage/fusion/playbooks/simple/list_arrays.yml14
-rw-r--r--ansible_collections/purestorage/fusion/playbooks/simple/list_availability_zones.yml14
-rw-r--r--ansible_collections/purestorage/fusion/playbooks/simple/list_hardware_types.yml14
-rw-r--r--ansible_collections/purestorage/fusion/playbooks/simple/list_hosts.yml14
-rw-r--r--ansible_collections/purestorage/fusion/playbooks/simple/list_interfaces.yml14
-rw-r--r--ansible_collections/purestorage/fusion/playbooks/simple/list_network_interface_groups.yml14
-rw-r--r--ansible_collections/purestorage/fusion/playbooks/simple/list_placement_groups.yml14
-rw-r--r--ansible_collections/purestorage/fusion/playbooks/simple/list_protection_policies.yml14
-rw-r--r--ansible_collections/purestorage/fusion/playbooks/simple/list_roles.yml14
-rw-r--r--ansible_collections/purestorage/fusion/playbooks/simple/list_snapshots.yml14
-rw-r--r--ansible_collections/purestorage/fusion/playbooks/simple/list_storage_classes.yml14
-rw-r--r--ansible_collections/purestorage/fusion/playbooks/simple/list_storage_endpoints.yml14
-rw-r--r--ansible_collections/purestorage/fusion/playbooks/simple/list_storage_services.yml14
-rw-r--r--ansible_collections/purestorage/fusion/playbooks/simple/list_tenant_spaces.yml14
-rw-r--r--ansible_collections/purestorage/fusion/playbooks/simple/list_tenants.yml14
-rw-r--r--ansible_collections/purestorage/fusion/playbooks/simple/list_users.yml14
-rw-r--r--ansible_collections/purestorage/fusion/playbooks/simple/list_volumes.yml14
-rw-r--r--ansible_collections/purestorage/fusion/playbooks/simple/make_tenant_admin.yml12
-rw-r--r--ansible_collections/purestorage/fusion/playbooks/simple/remove_array.yml17
-rw-r--r--ansible_collections/purestorage/fusion/playbooks/simple/setup_infrastructure.yml64
-rw-r--r--ansible_collections/purestorage/fusion/playbooks/simple/setup_protection_policies.yml13
-rw-r--r--ansible_collections/purestorage/fusion/playbooks/simple/setup_storage_service_class.yml24
-rw-r--r--ansible_collections/purestorage/fusion/playbooks/simple/setup_workloads.yml71
-rw-r--r--ansible_collections/purestorage/fusion/playbooks/tasks/.keep0
-rw-r--r--ansible_collections/purestorage/fusion/playbooks/templates/.keep0
-rw-r--r--ansible_collections/purestorage/fusion/playbooks/vars/.keep0
-rw-r--r--ansible_collections/purestorage/fusion/plugins/doc_fragments/purestorage.py56
-rw-r--r--ansible_collections/purestorage/fusion/plugins/inventory/__init__.py0
-rw-r--r--ansible_collections/purestorage/fusion/plugins/module_utils/errors.py291
-rw-r--r--ansible_collections/purestorage/fusion/plugins/module_utils/fusion.py183
-rw-r--r--ansible_collections/purestorage/fusion/plugins/module_utils/getters.py99
-rw-r--r--ansible_collections/purestorage/fusion/plugins/module_utils/networking.py76
-rw-r--r--ansible_collections/purestorage/fusion/plugins/module_utils/operations.py42
-rw-r--r--ansible_collections/purestorage/fusion/plugins/module_utils/parsing.py75
-rw-r--r--ansible_collections/purestorage/fusion/plugins/module_utils/prerequisites.py162
-rw-r--r--ansible_collections/purestorage/fusion/plugins/module_utils/snapshots.py29
-rw-r--r--ansible_collections/purestorage/fusion/plugins/module_utils/startup.py26
-rw-r--r--ansible_collections/purestorage/fusion/plugins/modules/fusion_api_client.py140
-rw-r--r--ansible_collections/purestorage/fusion/plugins/modules/fusion_array.py281
-rw-r--r--ansible_collections/purestorage/fusion/plugins/modules/fusion_az.py162
-rw-r--r--ansible_collections/purestorage/fusion/plugins/modules/fusion_hap.py314
-rw-r--r--ansible_collections/purestorage/fusion/plugins/modules/fusion_hw.py88
-rw-r--r--ansible_collections/purestorage/fusion/plugins/modules/fusion_info.py1130
-rw-r--r--ansible_collections/purestorage/fusion/plugins/modules/fusion_ni.py245
-rw-r--r--ansible_collections/purestorage/fusion/plugins/modules/fusion_nig.py276
-rw-r--r--ansible_collections/purestorage/fusion/plugins/modules/fusion_pg.py307
-rw-r--r--ansible_collections/purestorage/fusion/plugins/modules/fusion_pp.py208
-rw-r--r--ansible_collections/purestorage/fusion/plugins/modules/fusion_ra.py284
-rw-r--r--ansible_collections/purestorage/fusion/plugins/modules/fusion_region.py182
-rw-r--r--ansible_collections/purestorage/fusion/plugins/modules/fusion_sc.py257
-rw-r--r--ansible_collections/purestorage/fusion/plugins/modules/fusion_se.py508
-rw-r--r--ansible_collections/purestorage/fusion/plugins/modules/fusion_ss.py211
-rw-r--r--ansible_collections/purestorage/fusion/plugins/modules/fusion_tenant.py171
-rw-r--r--ansible_collections/purestorage/fusion/plugins/modules/fusion_tn.py122
-rw-r--r--ansible_collections/purestorage/fusion/plugins/modules/fusion_ts.py189
-rw-r--r--ansible_collections/purestorage/fusion/plugins/modules/fusion_volume.py559
-rw-r--r--ansible_collections/purestorage/fusion/test/config.yaml2
-rw-r--r--ansible_collections/purestorage/fusion/tests/functional/README.md35
-rw-r--r--ansible_collections/purestorage/fusion/tests/functional/__init__.py0
-rw-r--r--ansible_collections/purestorage/fusion/tests/functional/test_fusion_api_client.py374
-rw-r--r--ansible_collections/purestorage/fusion/tests/functional/test_fusion_array.py1344
-rw-r--r--ansible_collections/purestorage/fusion/tests/functional/test_fusion_az.py720
-rw-r--r--ansible_collections/purestorage/fusion/tests/functional/test_fusion_hap.py892
-rw-r--r--ansible_collections/purestorage/fusion/tests/functional/test_fusion_hw.py115
-rw-r--r--ansible_collections/purestorage/fusion/tests/functional/test_fusion_info.py2384
-rw-r--r--ansible_collections/purestorage/fusion/tests/functional/test_fusion_nig.py1244
-rw-r--r--ansible_collections/purestorage/fusion/tests/functional/test_fusion_pg.py1600
-rw-r--r--ansible_collections/purestorage/fusion/tests/functional/test_fusion_pp.py531
-rw-r--r--ansible_collections/purestorage/fusion/tests/functional/test_fusion_ra.py815
-rw-r--r--ansible_collections/purestorage/fusion/tests/functional/test_fusion_region.py802
-rw-r--r--ansible_collections/purestorage/fusion/tests/functional/test_fusion_sc.py1244
-rw-r--r--ansible_collections/purestorage/fusion/tests/functional/test_fusion_se.py1044
-rw-r--r--ansible_collections/purestorage/fusion/tests/functional/test_fusion_ss.py934
-rw-r--r--ansible_collections/purestorage/fusion/tests/functional/test_fusion_tenant.py807
-rw-r--r--ansible_collections/purestorage/fusion/tests/functional/test_fusion_ts.py926
-rw-r--r--ansible_collections/purestorage/fusion/tests/functional/test_fusion_volume.py861
-rw-r--r--ansible_collections/purestorage/fusion/tests/functional/utils.py131
-rw-r--r--ansible_collections/purestorage/fusion/tests/helpers.py37
-rw-r--r--ansible_collections/purestorage/fusion/tests/integration/README.md10
-rw-r--r--ansible_collections/purestorage/fusion/tests/integration/integration_config.template6
-rw-r--r--ansible_collections/purestorage/fusion/tests/integration/targets/fusion_az/tasks/main.yml43
-rw-r--r--ansible_collections/purestorage/fusion/tests/integration/targets/fusion_hap/tasks/main.yml42
-rw-r--r--ansible_collections/purestorage/fusion/tests/integration/targets/fusion_ni/tasks/main.yml37
-rw-r--r--ansible_collections/purestorage/fusion/tests/integration/targets/fusion_nig/tasks/main.yml48
-rw-r--r--ansible_collections/purestorage/fusion/tests/integration/targets/fusion_pg/tasks/main.yml95
-rw-r--r--ansible_collections/purestorage/fusion/tests/integration/targets/fusion_pp/tasks/main.yml43
-rw-r--r--ansible_collections/purestorage/fusion/tests/integration/targets/fusion_region/tasks/main.yml53
-rw-r--r--ansible_collections/purestorage/fusion/tests/integration/targets/fusion_sc/tasks/main.yml94
-rw-r--r--ansible_collections/purestorage/fusion/tests/integration/targets/fusion_se/tasks/main.yml100
-rw-r--r--ansible_collections/purestorage/fusion/tests/integration/targets/fusion_ss/tasks/main.yml77
-rw-r--r--ansible_collections/purestorage/fusion/tests/integration/targets/fusion_tenant/tasks/main.yml41
-rw-r--r--ansible_collections/purestorage/fusion/tests/integration/targets/fusion_ts/tasks/main.yml62
-rw-r--r--ansible_collections/purestorage/fusion/tests/unit/README.md15
-rw-r--r--ansible_collections/purestorage/fusion/tests/unit/mocks/__init__.py0
-rw-r--r--ansible_collections/purestorage/fusion/tests/unit/mocks/module_mock.py38
-rw-r--r--ansible_collections/purestorage/fusion/tests/unit/mocks/operation_mock.py36
-rw-r--r--ansible_collections/purestorage/fusion/tests/unit/module_utils/__init__.py0
-rw-r--r--ansible_collections/purestorage/fusion/tests/unit/module_utils/test_networking.py58
-rw-r--r--ansible_collections/purestorage/fusion/tests/unit/module_utils/test_operations.py230
-rw-r--r--ansible_collections/purestorage/fusion/tests/unit/module_utils/test_parsing.py153
-rw-r--r--ansible_collections/purestorage/fusion/tests/unit/module_utils/test_prerequisites.py116
-rw-r--r--ansible_collections/purestorage/fusion/tests/unit/modules/__init__.py0
-rw-r--r--ansible_collections/purestorage/fusion/tests/unit/modules/test_fusion_az.py450
-rw-r--r--ansible_collections/splunk/es/CHANGELOG.rst13
-rw-r--r--ansible_collections/splunk/es/FILES.json45
-rw-r--r--ansible_collections/splunk/es/MANIFEST.json6
-rw-r--r--ansible_collections/splunk/es/README.md2
-rw-r--r--ansible_collections/splunk/es/changelogs/changelog.yaml12
-rw-r--r--ansible_collections/splunk/es/meta/runtime.yml2
-rw-r--r--ansible_collections/splunk/es/tests/config.yml2
-rw-r--r--ansible_collections/splunk/es/tests/sanity/ignore-2.10.txt1
-rw-r--r--ansible_collections/splunk/es/tests/sanity/ignore-2.11.txt1
-rw-r--r--ansible_collections/splunk/es/tests/sanity/ignore-2.12.txt1
-rw-r--r--ansible_collections/splunk/es/tests/sanity/ignore-2.13.txt0
-rw-r--r--ansible_collections/splunk/es/tests/sanity/ignore-2.9.txt9
-rw-r--r--ansible_collections/telekom_mms/icinga_director/.aar_doc.yml72
-rw-r--r--ansible_collections/telekom_mms/icinga_director/CHANGELOG.rst40
-rw-r--r--ansible_collections/telekom_mms/icinga_director/FILES.json741
-rw-r--r--ansible_collections/telekom_mms/icinga_director/MANIFEST.json4
-rw-r--r--ansible_collections/telekom_mms/icinga_director/README.md30
-rw-r--r--ansible_collections/telekom_mms/icinga_director/changelogs/.plugin-cache.yaml2
-rw-r--r--ansible_collections/telekom_mms/icinga_director/changelogs/changelog.yaml444
-rw-r--r--ansible_collections/telekom_mms/icinga_director/docs/icinga_deploy.rst5
-rw-r--r--ansible_collections/telekom_mms/icinga_director/docs/icinga_notification.rst28
-rw-r--r--ansible_collections/telekom_mms/icinga_director/examples/icinga_deploy.yml1
-rw-r--r--ansible_collections/telekom_mms/icinga_director/examples/icinga_notification.yml23
-rw-r--r--ansible_collections/telekom_mms/icinga_director/meta/runtime.yml2
-rw-r--r--ansible_collections/telekom_mms/icinga_director/plugins/modules/icinga_deploy.py12
-rw-r--r--ansible_collections/telekom_mms/icinga_director/plugins/modules/icinga_notification.py39
-rw-r--r--ansible_collections/telekom_mms/icinga_director/plugins/modules/icinga_service_apply.py14
-rw-r--r--ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/README.md2268
-rw-r--r--ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/defaults/main.yml18
-rw-r--r--ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/handlers/main.yml8
-rw-r--r--ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/meta/argument_specs.yml1345
-rw-r--r--ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/meta/main.yml5
-rw-r--r--ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_command.yml26
-rw-r--r--ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_command_template.yml28
-rw-r--r--ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_endpoint.yml18
-rw-r--r--ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_host.yml72
-rw-r--r--ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_host_template.yml72
-rw-r--r--ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_hostgroup.yml14
-rw-r--r--ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_notification.yml30
-rw-r--r--ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_notification_template.yml32
-rw-r--r--ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_scheduled_downtime.yml24
-rw-r--r--ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_service.yml53
-rw-r--r--ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_service_apply.yml52
-rw-r--r--ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_service_template.yml54
-rw-r--r--ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_servicegroup.yml14
-rw-r--r--ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_serviceset.yml14
-rw-r--r--ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_timeperiod.yml16
-rw-r--r--ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_user.yml22
-rw-r--r--ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_user_group.yml24
-rw-r--r--ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_user_template.yml18
-rw-r--r--ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_zone.yml14
-rw-r--r--ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/main.yml77
-rw-r--r--ansible_collections/theforeman/foreman/CHANGELOG.rst20
-rw-r--r--ansible_collections/theforeman/foreman/FILES.json2292
-rw-r--r--ansible_collections/theforeman/foreman/MANIFEST.json8
-rw-r--r--ansible_collections/theforeman/foreman/changelogs/changelog.yaml21
-rw-r--r--ansible_collections/theforeman/foreman/meta/runtime.yml2
-rw-r--r--ansible_collections/theforeman/foreman/plugins/inventory/foreman.py2
-rw-r--r--ansible_collections/theforeman/foreman/plugins/modules/compute_profile.py2
-rw-r--r--ansible_collections/theforeman/foreman/plugins/modules/content_view_filter.py184
-rw-r--r--ansible_collections/theforeman/foreman/plugins/modules/content_view_version.py2
-rw-r--r--ansible_collections/theforeman/foreman/plugins/modules/host.py2
-rw-r--r--ansible_collections/theforeman/foreman/plugins/modules/job_template.py26
-rw-r--r--ansible_collections/theforeman/foreman/plugins/modules/partition_table.py4
-rw-r--r--ansible_collections/theforeman/foreman/plugins/modules/product.py1
-rw-r--r--ansible_collections/theforeman/foreman/plugins/modules/provisioning_template.py4
-rw-r--r--ansible_collections/theforeman/foreman/plugins/modules/registration_command.py205
-rw-r--r--ansible_collections/theforeman/foreman/plugins/modules/webhook.py167
-rw-r--r--ansible_collections/theforeman/foreman/roles/content_credentials/tasks/main.yml2
-rw-r--r--ansible_collections/theforeman/foreman/roles/content_view_publish/tasks/main.yml4
-rw-r--r--ansible_collections/theforeman/foreman/roles/content_views/tasks/_create_content_view.yml19
-rw-r--r--ansible_collections/theforeman/foreman/roles/hostgroups/tasks/main.yml1
-rw-r--r--ansible_collections/theforeman/foreman/tests/test_playbooks/content_view_filter.yml35
-rw-r--r--ansible_collections/theforeman/foreman/tests/test_playbooks/content_view_filter_rule_info.yml2
-rw-r--r--ansible_collections/theforeman/foreman/tests/test_playbooks/filters.yml8
-rw-r--r--ansible_collections/theforeman/foreman/tests/test_playbooks/host_info.yml4
-rw-r--r--ansible_collections/theforeman/foreman/tests/test_playbooks/inventory_plugin.yml2
-rw-r--r--ansible_collections/theforeman/foreman/tests/test_playbooks/inventory_plugin_ansible.yml2
-rw-r--r--ansible_collections/theforeman/foreman/tests/test_playbooks/registration_command.yml39
-rw-r--r--ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/content_view_filter_deb.yml4
-rw-r--r--ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/content_view_filter_docker.yml3
-rw-r--r--ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/content_view_filter_errata_date.yml7
-rw-r--r--ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/content_view_filter_errata_id.yml3
-rw-r--r--ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/content_view_filter_package.yml7
-rw-r--r--ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/content_view_filter_package_group.yml3
-rw-r--r--ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/inventory_plugin_tests.yml22
-rw-r--r--ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/registration_command.yml18
-rw-r--r--ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/webhook.yml32
-rw-r--r--ansible_collections/theforeman/foreman/tests/test_playbooks/webhook.yml91
-rw-r--r--ansible_collections/vmware/vmware_rest/.ansible-lint10
-rw-r--r--ansible_collections/vmware/vmware_rest/.github/patchback.yml4
-rw-r--r--ansible_collections/vmware/vmware_rest/.github/workflows/changelog.yaml13
-rw-r--r--ansible_collections/vmware/vmware_rest/.github/workflows/linters.yaml27
-rw-r--r--ansible_collections/vmware/vmware_rest/.github/workflows/sanity-tests.yaml129
-rw-r--r--ansible_collections/vmware/vmware_rest/CHANGELOG.rst38
-rw-r--r--ansible_collections/vmware/vmware_rest/FILES.json685
-rw-r--r--ansible_collections/vmware/vmware_rest/MANIFEST.json8
-rw-r--r--ansible_collections/vmware/vmware_rest/README.md39
-rw-r--r--ansible_collections/vmware/vmware_rest/changelogs/changelog.yaml39
-rw-r--r--ansible_collections/vmware/vmware_rest/changelogs/config.yaml2
-rw-r--r--ansible_collections/vmware/vmware_rest/changelogs/fragments/.keep (renamed from ansible_collections/community/sap/changelogs/fragments/.keep)0
-rw-r--r--ansible_collections/vmware/vmware_rest/changelogs/fragments/2.1.3-changelog.yaml8
-rw-r--r--ansible_collections/vmware/vmware_rest/changelogs/fragments/2.1.3-module_utils.yaml3
-rw-r--r--ansible_collections/vmware/vmware_rest/changelogs/fragments/allow_space_in_search_filters.yaml3
-rw-r--r--ansible_collections/vmware/vmware_rest/changelogs/fragments/cloud.common-bump.yaml3
-rw-r--r--ansible_collections/vmware/vmware_rest/changelogs/fragments/lookup-handle-special-chars.yml3
-rw-r--r--ansible_collections/vmware/vmware_rest/changelogs/fragments/set_default_galaxy_version.yaml3
-rw-r--r--ansible_collections/vmware/vmware_rest/changelogs/fragments/use-FQCN-in-create_vm.yaml.yaml3
-rw-r--r--ansible_collections/vmware/vmware_rest/changelogs/fragments/vcenter_network_info-dvs-example.yaml3
-rw-r--r--ansible_collections/vmware/vmware_rest/changelogs/fragments/version_added.yaml3
-rw-r--r--ansible_collections/vmware/vmware_rest/changelogs/fragments/vm_template_library.yaml3
-rw-r--r--ansible_collections/vmware/vmware_rest/development.md72
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_consolecli_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_consolecli_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_dcui_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_dcui_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_shell_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_shell_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_ssh_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_ssh_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_applmgmt_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_database_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_databasestorage_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_load_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_mem_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_softwarepackages_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_storage_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_swap_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_system_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_infraprofile_configs_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_infraprofile_configs_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_localaccounts_globalpolicy_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_localaccounts_globalpolicy_module.rst7
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_localaccounts_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_monitoring_info_module.rst7
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_monitoring_query_module.rst11
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_dns_domains_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_dns_domains_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_dns_hostname_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_dns_hostname_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_dns_servers_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_dns_servers_module.rst6
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_firewall_inbound_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_firewall_inbound_module.rst8
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_interfaces_info_module.rst7
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_interfaces_ipv4_info_module.rst7
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_interfaces_ipv4_module.rst14
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_interfaces_ipv6_info_module.rst7
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_interfaces_ipv6_module.rst7
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_module.rst5
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_noproxy_info_module.rst10
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_noproxy_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_proxy_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_proxy_module.rst16
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_ntp_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_ntp_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_services_info_module.rst7
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_services_module.rst7
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_shutdown_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_shutdown_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_globalfips_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_globalfips_module.rst7
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_storage_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_storage_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_time_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_time_timezone_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_time_timezone_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_version_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_timesync_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_timesync_module.rst6
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_update_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_vmon_service_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_vmon_service_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.cluster_moid_lookup.rst29
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_configuration_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_configuration_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_library_item_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_locallibrary_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_locallibrary_module.rst38
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_subscribedlibrary_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_subscribedlibrary_module.rst38
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.datacenter_moid_lookup.rst23
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.datastore_moid_lookup.rst23
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.folder_moid_lookup.rst23
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.host_moid_lookup.rst23
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.network_moid_lookup.rst24
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.resource_pool_moid_lookup.rst23
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_cluster_info_module.rst20
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_datacenter_info_module.rst18
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_datacenter_module.rst12
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_datastore_info_module.rst23
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_folder_info_module.rst19
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_host_info_module.rst23
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_host_module.rst16
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_network_info_module.rst20
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_ovf_libraryitem_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_resourcepool_info_module.rst27
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_resourcepool_module.rst83
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_storage_policies_info_module.rst6
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_customization_module.rst85
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_filesystem_directories_module.rst25
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_identity_info_module.rst7
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_localfilesystem_info_module.rst7
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_networking_info_module.rst7
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_networking_interfaces_info_module.rst7
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_networking_routes_info_module.rst7
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_operations_info_module.rst7
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_power_info_module.rst7
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_power_module.rst7
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_adapter_sata_info_module.rst10
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_adapter_sata_module.rst14
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_adapter_scsi_info_module.rst10
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_adapter_scsi_module.rst18
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_boot_device_info_module.rst9
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_boot_device_module.rst19
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_boot_info_module.rst7
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_boot_module.rst22
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_cdrom_info_module.rst10
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_cdrom_module.rst40
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_cpu_info_module.rst7
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_cpu_module.rst27
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_disk_info_module.rst10
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_disk_module.rst76
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_ethernet_info_module.rst10
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_ethernet_module.rst46
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_floppy_info_module.rst10
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_floppy_module.rst23
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_info_module.rst7
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_memory_info_module.rst7
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_memory_module.rst21
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_module.rst13
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_parallel_info_module.rst10
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_parallel_module.rst23
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_serial_info_module.rst10
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_serial_module.rst45
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_info_module.rst25
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_libraryitem_info_module.rst7
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_module.rst340
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_power_info_module.rst7
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_power_module.rst7
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_storage_policy_compliance_info_module.rst7
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_storage_policy_compliance_module.rst13
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_storage_policy_info_module.rst7
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_storage_policy_module.rst18
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_tools_info_module.rst7
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_tools_installer_info_module.rst7
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_tools_installer_module.rst9
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_tools_module.rst10
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vmtemplate_libraryitems_info_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vmtemplate_libraryitems_module.rst4
-rw-r--r--ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vm_moid_lookup.rst23
-rw-r--r--ansible_collections/vmware/vmware_rest/meta/runtime.yml137
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/doc_fragments/moid.py47
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/lookup/cluster_moid.py15
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/lookup/datacenter_moid.py9
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/lookup/datastore_moid.py9
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/lookup/folder_moid.py9
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/lookup/host_moid.py9
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/lookup/network_moid.py11
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/lookup/resource_pool_moid.py9
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/lookup/vm_moid.py9
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/module_utils/vmware_rest.py3
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_consolecli.py27
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_consolecli_info.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_dcui.py27
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_dcui_info.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_shell.py27
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_shell_info.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_ssh.py27
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_ssh_info.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_applmgmt_info.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_database_info.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_databasestorage_info.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_load_info.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_mem_info.py30
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_softwarepackages_info.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_storage_info.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_swap_info.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_system_info.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_infraprofile_configs.py27
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_infraprofile_configs_info.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_localaccounts_globalpolicy.py30
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_localaccounts_globalpolicy_info.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_localaccounts_info.py27
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_monitoring_info.py31
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_monitoring_query.py38
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking.py28
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_dns_domains.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_dns_domains_info.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_dns_hostname.py27
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_dns_hostname_info.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_dns_servers.py33
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_dns_servers_info.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_firewall_inbound.py39
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_firewall_inbound_info.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_info.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_interfaces_info.py31
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_interfaces_ipv4.py42
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_interfaces_ipv4_info.py33
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_interfaces_ipv6.py31
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_interfaces_ipv6_info.py33
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_noproxy.py27
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_noproxy_info.py39
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_proxy.py55
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_proxy_info.py27
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_ntp.py27
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_ntp_info.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_services.py33
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_services_info.py31
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_shutdown.py31
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_shutdown_info.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_globalfips.py34
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_globalfips_info.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_storage.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_storage_info.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_time_info.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_time_timezone.py27
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_time_timezone_info.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_version_info.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_timesync.py31
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_timesync_info.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_update_info.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_vmon_service.py33
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/appliance_vmon_service_info.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/content_configuration.py30
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/content_configuration_info.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/content_library_item_info.py27
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/content_locallibrary.py49
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/content_locallibrary_info.py27
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/content_subscribedlibrary.py61
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/content_subscribedlibrary_info.py27
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_cluster_info.py49
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_datacenter.py49
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_datacenter_info.py46
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_datastore_info.py52
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_folder_info.py51
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_host.py60
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_host_info.py55
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_network_info.py48
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_ovf_libraryitem.py37
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_resourcepool.py102
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_resourcepool_info.py55
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_storage_policies_info.py32
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm.py649
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_customization.py154
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_filesystem_directories.py86
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_identity_info.py33
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_localfilesystem_info.py33
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_networking_info.py33
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_networking_interfaces_info.py33
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_networking_routes_info.py33
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_operations_info.py33
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_power.py33
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_power_info.py33
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware.py47
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_adapter_sata.py52
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_adapter_sata_info.py35
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_adapter_scsi.py59
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py35
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_boot.py53
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_boot_device.py58
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_boot_device_info.py35
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_boot_info.py33
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_cdrom.py97
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_cdrom_info.py35
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_cpu.py70
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_cpu_info.py33
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_disk.py141
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_disk_info.py35
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_ethernet.py117
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_ethernet_info.py35
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_floppy.py67
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_floppy_info.py35
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_info.py33
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_memory.py64
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_memory_info.py33
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_parallel.py67
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_parallel_info.py35
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_serial.py110
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_serial_info.py35
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_info.py55
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_libraryitem_info.py33
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_power.py35
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_power_info.py33
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_storage_policy.py53
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_storage_policy_compliance.py38
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_storage_policy_compliance_info.py33
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_storage_policy_info.py33
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_tools.py36
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_tools_info.py33
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_tools_installer.py39
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_tools_installer_info.py33
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vmtemplate_libraryitems.py45
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vmtemplate_libraryitems_info.py29
-rw-r--r--ansible_collections/vmware/vmware_rest/plugins/plugin_utils/lookup.py49
-rw-r--r--ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.10.txt1357
-rw-r--r--ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.11.txt1384
-rw-r--r--ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.12.txt2
-rw-r--r--ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.13.txt2
-rw-r--r--ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.16.txt134
-rw-r--r--ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.9.txt1357
-rw-r--r--ansible_collections/vmware/vmware_rest/tox.ini45
-rwxr-xr-xbuild-ansible.sh6
-rw-r--r--porting_guide_10.rst569
-rw-r--r--porting_guide_9.rst809
-rw-r--r--setup.cfg656
-rw-r--r--tags.yaml213
5426 files changed, 238198 insertions, 202620 deletions
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\.
+
+- <a href="#v10-0-0">v10\.0\.0</a>
+ - <a href="#release-summary">Release Summary</a>
+ - <a href="#removed-collections">Removed Collections</a>
+ - <a href="#added-collections">Added Collections</a>
+ - <a href="#ansible-core">Ansible\-core</a>
+ - <a href="#included-collections">Included Collections</a>
+ - <a href="#major-changes">Major Changes</a>
+ - <a href="#minor-changes">Minor Changes</a>
+ - <a href="#breaking-changes--porting-guide">Breaking Changes / Porting Guide</a>
+ - <a href="#deprecated-features">Deprecated Features</a>
+ - <a href="#removed-features-previously-deprecated">Removed Features \(previously deprecated\)</a>
+ - <a href="#security-fixes">Security Fixes</a>
+ - <a href="#bugfixes">Bugfixes</a>
+ - <a href="#known-issues">Known Issues</a>
+ - <a href="#new-plugins">New Plugins</a>
+ - <a href="#new-modules">New Modules</a>
+ - <a href="#new-roles">New Roles</a>
+ - <a href="#unchanged-collections">Unchanged Collections</a>
+
+<a id="v10-0-0"></a>
+## v10\.0\.0
+
+- <a href="#release-summary">Release Summary</a>
+- <a href="#removed-collections">Removed Collections</a>
+- <a href="#added-collections">Added Collections</a>
+- <a href="#ansible-core">Ansible\-core</a>
+- <a href="#included-collections">Included Collections</a>
+- <a href="#major-changes">Major Changes</a>
+ - <a href="#ansible-core-1">Ansible\-core</a>
+ - <a href="#ansible-netcommon">ansible\.netcommon</a>
+ - <a href="#ansible-utils">ansible\.utils</a>
+ - <a href="#arista-eos">arista\.eos</a>
+ - <a href="#cisco-asa">cisco\.asa</a>
+ - <a href="#cisco-ios">cisco\.ios</a>
+ - <a href="#cisco-iosxr">cisco\.iosxr</a>
+ - <a href="#cisco-nxos">cisco\.nxos</a>
+ - <a href="#community-dns">community\.dns</a>
+ - <a href="#community-docker">community\.docker</a>
+ - <a href="#community-hashi-vault">community\.hashi\_vault</a>
+ - <a href="#community-hrobot">community\.hrobot</a>
+ - <a href="#community-mysql">community\.mysql</a>
+ - <a href="#containers-podman">containers\.podman</a>
+ - <a href="#dellemc-openmanage">dellemc\.openmanage</a>
+ - <a href="#dellemc-unity">dellemc\.unity</a>
+ - <a href="#fortinet-fortios">fortinet\.fortios</a>
+ - <a href="#grafana-grafana">grafana\.grafana</a>
+ - <a href="#ibm-qradar">ibm\.qradar</a>
+ - <a href="#infoblox-nios-modules">infoblox\.nios\_modules</a>
+ - <a href="#junipernetworks-junos">junipernetworks\.junos</a>
+ - <a href="#splunk-es">splunk\.es</a>
+- <a href="#minor-changes">Minor Changes</a>
+ - <a href="#ansible-core-2">Ansible\-core</a>
+ - <a href="#amazon-aws">amazon\.aws</a>
+ - <a href="#ansible-netcommon-1">ansible\.netcommon</a>
+ - <a href="#ansible-utils-1">ansible\.utils</a>
+ - <a href="#ansible-windows">ansible\.windows</a>
+ - <a href="#arista-eos-1">arista\.eos</a>
+ - <a href="#check-point-mgmt">check\_point\.mgmt</a>
+ - <a href="#cisco-aci">cisco\.aci</a>
+ - <a href="#cisco-dnac">cisco\.dnac</a>
+ - <a href="#cisco-ios-1">cisco\.ios</a>
+ - <a href="#cisco-iosxr-1">cisco\.iosxr</a>
+ - <a href="#cisco-ise">cisco\.ise</a>
+ - <a href="#cisco-meraki">cisco\.meraki</a>
+ - <a href="#cisco-mso">cisco\.mso</a>
+ - <a href="#cisco-nxos-1">cisco\.nxos</a>
+ - <a href="#community-aws">community\.aws</a>
+ - <a href="#community-ciscosmb">community\.ciscosmb</a>
+ - <a href="#community-crypto">community\.crypto</a>
+ - <a href="#community-digitalocean">community\.digitalocean</a>
+ - <a href="#community-dns-1">community\.dns</a>
+ - <a href="#community-docker-1">community\.docker</a>
+ - <a href="#community-general">community\.general</a>
+ - <a href="#community-grafana">community\.grafana</a>
+ - <a href="#community-hashi-vault-1">community\.hashi\_vault</a>
+ - <a href="#community-hrobot-1">community\.hrobot</a>
+ - <a href="#community-mysql-1">community\.mysql</a>
+ - <a href="#community-postgresql">community\.postgresql</a>
+ - <a href="#community-rabbitmq">community\.rabbitmq</a>
+ - <a href="#community-routeros">community\.routeros</a>
+ - <a href="#community-vmware">community\.vmware</a>
+ - <a href="#community-windows">community\.windows</a>
+ - <a href="#community-zabbix">community\.zabbix</a>
+ - <a href="#containers-podman-1">containers\.podman</a>
+ - <a href="#dellemc-enterprise-sonic">dellemc\.enterprise\_sonic</a>
+ - <a href="#dellemc-openmanage-1">dellemc\.openmanage</a>
+ - <a href="#dellemc-powerflex">dellemc\.powerflex</a>
+ - <a href="#f5networks-f5-modules">f5networks\.f5\_modules</a>
+ - <a href="#fortinet-fortimanager">fortinet\.fortimanager</a>
+ - <a href="#google-cloud">google\.cloud</a>
+ - <a href="#grafana-grafana-1">grafana\.grafana</a>
+ - <a href="#hetzner-hcloud">hetzner\.hcloud</a>
+ - <a href="#ibm-storage-virtualize">ibm\.storage\_virtualize</a>
+ - <a href="#inspur-ispim">inspur\.ispim</a>
+ - <a href="#junipernetworks-junos-1">junipernetworks\.junos</a>
+ - <a href="#kubernetes-core">kubernetes\.core</a>
+ - <a href="#lowlydba-sqlserver">lowlydba\.sqlserver</a>
+ - <a href="#microsoft-ad">microsoft\.ad</a>
+ - <a href="#netapp-ontap">netapp\.ontap</a>
+ - <a href="#netapp-storagegrid">netapp\.storagegrid</a>
+ - <a href="#netbox-netbox">netbox\.netbox</a>
+ - <a href="#purestorage-flasharray">purestorage\.flasharray</a>
+ - <a href="#purestorage-flashblade">purestorage\.flashblade</a>
+ - <a href="#telekom-mms-icinga-director">telekom\_mms\.icinga\_director</a>
+ - <a href="#theforeman-foreman">theforeman\.foreman</a>
+ - <a href="#vmware-vmware-rest">vmware\.vmware\_rest</a>
+ - <a href="#vultr-cloud">vultr\.cloud</a>
+- <a href="#breaking-changes--porting-guide">Breaking Changes / Porting Guide</a>
+ - <a href="#ansible-core-3">Ansible\-core</a>
+ - <a href="#amazon-aws-1">amazon\.aws</a>
+ - <a href="#cloud-common">cloud\.common</a>
+ - <a href="#community-aws-1">community\.aws</a>
+ - <a href="#community-ciscosmb-1">community\.ciscosmb</a>
+ - <a href="#community-dns-2">community\.dns</a>
+ - <a href="#community-general-1">community\.general</a>
+ - <a href="#community-hrobot-2">community\.hrobot</a>
+ - <a href="#community-okd">community\.okd</a>
+ - <a href="#hetzner-hcloud-1">hetzner\.hcloud</a>
+ - <a href="#kubernetes-core-1">kubernetes\.core</a>
+ - <a href="#theforeman-foreman-1">theforeman\.foreman</a>
+ - <a href="#vmware-vmware-rest-1">vmware\.vmware\_rest</a>
+- <a href="#deprecated-features">Deprecated Features</a>
+ - <a href="#ansible-core-4">Ansible\-core</a>
+ - <a href="#amazon-aws-2">amazon\.aws</a>
+ - <a href="#community-aws-2">community\.aws</a>
+ - <a href="#community-crypto-1">community\.crypto</a>
+ - <a href="#community-dns-3">community\.dns</a>
+ - <a href="#community-docker-2">community\.docker</a>
+ - <a href="#community-general-2">community\.general</a>
+ - <a href="#community-hrobot-3">community\.hrobot</a>
+ - <a href="#community-okd-1">community\.okd</a>
+ - <a href="#community-vmware-1">community\.vmware</a>
+ - <a href="#dellemc-openmanage-2">dellemc\.openmanage</a>
+ - <a href="#kubernetes-core-2">kubernetes\.core</a>
+- <a href="#removed-features-previously-deprecated">Removed Features \(previously deprecated\)</a>
+ - <a href="#ansible-core-5">Ansible\-core</a>
+ - <a href="#amazon-aws-3">amazon\.aws</a>
+ - <a href="#arista-eos-2">arista\.eos</a>
+ - <a href="#cisco-ios-2">cisco\.ios</a>
+ - <a href="#cisco-iosxr-2">cisco\.iosxr</a>
+ - <a href="#cisco-nxos-2">cisco\.nxos</a>
+ - <a href="#community-dns-4">community\.dns</a>
+ - <a href="#community-general-3">community\.general</a>
+ - <a href="#community-grafana-1">community\.grafana</a>
+ - <a href="#community-hrobot-4">community\.hrobot</a>
+ - <a href="#junipernetworks-junos-2">junipernetworks\.junos</a>
+- <a href="#security-fixes">Security Fixes</a>
+ - <a href="#ansible-core-6">Ansible\-core</a>
+ - <a href="#community-dns-5">community\.dns</a>
+ - <a href="#community-docker-3">community\.docker</a>
+ - <a href="#community-general-4">community\.general</a>
+ - <a href="#community-hrobot-5">community\.hrobot</a>
+- <a href="#bugfixes">Bugfixes</a>
+ - <a href="#ansible-core-7">Ansible\-core</a>
+ - <a href="#amazon-aws-4">amazon\.aws</a>
+ - <a href="#ansible-netcommon-2">ansible\.netcommon</a>
+ - <a href="#ansible-utils-2">ansible\.utils</a>
+ - <a href="#ansible-windows-1">ansible\.windows</a>
+ - <a href="#arista-eos-3">arista\.eos</a>
+ - <a href="#check-point-mgmt-1">check\_point\.mgmt</a>
+ - <a href="#cisco-aci-1">cisco\.aci</a>
+ - <a href="#cisco-asa-1">cisco\.asa</a>
+ - <a href="#cisco-ios-3">cisco\.ios</a>
+ - <a href="#cisco-iosxr-3">cisco\.iosxr</a>
+ - <a href="#cisco-ise-1">cisco\.ise</a>
+ - <a href="#cisco-meraki-1">cisco\.meraki</a>
+ - <a href="#cisco-mso-1">cisco\.mso</a>
+ - <a href="#cisco-nxos-3">cisco\.nxos</a>
+ - <a href="#community-aws-3">community\.aws</a>
+ - <a href="#community-ciscosmb-2">community\.ciscosmb</a>
+ - <a href="#community-crypto-2">community\.crypto</a>
+ - <a href="#community-digitalocean-1">community\.digitalocean</a>
+ - <a href="#community-dns-6">community\.dns</a>
+ - <a href="#community-docker-4">community\.docker</a>
+ - <a href="#community-general-5">community\.general</a>
+ - <a href="#community-grafana-2">community\.grafana</a>
+ - <a href="#community-hrobot-6">community\.hrobot</a>
+ - <a href="#community-mysql-2">community\.mysql</a>
+ - <a href="#community-postgresql-1">community\.postgresql</a>
+ - <a href="#community-routeros-1">community\.routeros</a>
+ - <a href="#community-sap-libs">community\.sap\_libs</a>
+ - <a href="#community-vmware-2">community\.vmware</a>
+ - <a href="#community-windows-1">community\.windows</a>
+ - <a href="#community-zabbix-1">community\.zabbix</a>
+ - <a href="#containers-podman-2">containers\.podman</a>
+ - <a href="#dellemc-enterprise-sonic-1">dellemc\.enterprise\_sonic</a>
+ - <a href="#dellemc-openmanage-3">dellemc\.openmanage</a>
+ - <a href="#f5networks-f5-modules-1">f5networks\.f5\_modules</a>
+ - <a href="#fortinet-fortimanager-1">fortinet\.fortimanager</a>
+ - <a href="#fortinet-fortios-1">fortinet\.fortios</a>
+ - <a href="#hetzner-hcloud-2">hetzner\.hcloud</a>
+ - <a href="#ibm-qradar-1">ibm\.qradar</a>
+ - <a href="#ibm-storage-virtualize-1">ibm\.storage\_virtualize</a>
+ - <a href="#infoblox-nios-modules-1">infoblox\.nios\_modules</a>
+ - <a href="#junipernetworks-junos-3">junipernetworks\.junos</a>
+ - <a href="#kubernetes-core-3">kubernetes\.core</a>
+ - <a href="#lowlydba-sqlserver-1">lowlydba\.sqlserver</a>
+ - <a href="#microsoft-ad-1">microsoft\.ad</a>
+ - <a href="#netapp-ontap-1">netapp\.ontap</a>
+ - <a href="#netapp-storagegrid-1">netapp\.storagegrid</a>
+ - <a href="#netbox-netbox-1">netbox\.netbox</a>
+ - <a href="#purestorage-flasharray-1">purestorage\.flasharray</a>
+ - <a href="#purestorage-flashblade-1">purestorage\.flashblade</a>
+ - <a href="#splunk-es-1">splunk\.es</a>
+ - <a href="#telekom-mms-icinga-director-1">telekom\_mms\.icinga\_director</a>
+ - <a href="#theforeman-foreman-2">theforeman\.foreman</a>
+ - <a href="#vmware-vmware-rest-2">vmware\.vmware\_rest</a>
+ - <a href="#vultr-cloud-1">vultr\.cloud</a>
+- <a href="#known-issues">Known Issues</a>
+ - <a href="#community-docker-5">community\.docker</a>
+ - <a href="#dellemc-openmanage-4">dellemc\.openmanage</a>
+- <a href="#new-plugins">New Plugins</a>
+ - <a href="#become">Become</a>
+ - <a href="#callback">Callback</a>
+ - <a href="#connection">Connection</a>
+ - <a href="#filter">Filter</a>
+ - <a href="#lookup">Lookup</a>
+ - <a href="#test">Test</a>
+- <a href="#new-modules">New Modules</a>
+ - <a href="#amazon-aws-5">amazon\.aws</a>
+ - <a href="#ansible-netcommon-3">ansible\.netcommon</a>
+ - <a href="#check-point-mgmt-2">check\_point\.mgmt</a>
+ - <a href="#cisco-ios-4">cisco\.ios</a>
+ - <a href="#community-aws-4">community\.aws</a>
+ - <a href="#community-crypto-3">community\.crypto</a>
+ - <a href="#community-digitalocean-2">community\.digitalocean</a>
+ - <a href="#community-docker-6">community\.docker</a>
+ - <a href="#community-general-6">community\.general</a>
+ - <a href="#community-hashi-vault-2">community\.hashi\_vault</a>
+ - <a href="#community-zabbix-2">community\.zabbix</a>
+ - <a href="#containers-podman-3">containers\.podman</a>
+ - <a href="#dellemc-enterprise-sonic-2">dellemc\.enterprise\_sonic</a>
+ - <a href="#dellemc-openmanage-5">dellemc\.openmanage</a>
+ - <a href="#dellemc-powerflex-1">dellemc\.powerflex</a>
+ - <a href="#fortinet-fortimanager-2">fortinet\.fortimanager</a>
+ - <a href="#hetzner-hcloud-3">hetzner\.hcloud</a>
+ - <a href="#infoblox-nios-modules-2">infoblox\.nios\_modules</a>
+ - <a href="#netapp-ontap-2">netapp\.ontap</a>
+ - <a href="#netbox-netbox-2">netbox\.netbox</a>
+ - <a href="#purestorage-flasharray-2">purestorage\.flasharray</a>
+ - <a href="#purestorage-flashblade-2">purestorage\.flashblade</a>
+ - <a href="#theforeman-foreman-3">theforeman\.foreman</a>
+ - <a href="#vultr-cloud-2">vultr\.cloud</a>
+- <a href="#new-roles">New Roles</a>
+- <a href="#unchanged-collections">Unchanged Collections</a>
+
+<a id="release-summary"></a>
+### Release Summary
+
+Release Date\: 2024\-06\-04
+
+[Porting Guide](https\://docs\.ansible\.com/ansible/devel/porting\_guides\.html)
+
+<a id="removed-collections"></a>
+### 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\)
+
+<a id="added-collections"></a>
+### Added Collections
+
+* community\.library\_inventory\_filtering\_v1 \(version 1\.0\.1\)
+* kaytus\.ksmanage \(version 1\.2\.1\)
+
+<a id="ansible-core"></a>
+### 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\.
+
+<a id="included-collections"></a>
+### 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 | |
+
+<a id="major-changes"></a>
+### Major Changes
+
+<a id="ansible-core-1"></a>
+#### Ansible\-core
+
+* urls\.py \- Removed support for Python 2
+
+<a id="ansible-netcommon"></a>
+#### ansible\.netcommon
+
+* Bumping <em class="title-reference">requires\_ansible</em> to <em class="title-reference">\>\=2\.14\.0</em>\, since previous ansible\-core versions are EoL now\.
+
+<a id="ansible-utils"></a>
+#### ansible\.utils
+
+* Bumping <em class="title-reference">netaddr</em> to <em class="title-reference">\>\=0\.10\.1</em>\, means that starting from this release\, the minimum <em class="title-reference">netaddr</em> version this collection requires is <em class="title-reference">\>\=0\.10\.1</em>\.
+* Bumping <em class="title-reference">requires\_ansible</em> to <em class="title-reference">\>\=2\.14\.0</em>\, since previous ansible\-core versions are EoL now\.
+* This release mainly addresses the breaking changes in the <em class="title-reference">netaddr</em> library\.
+* With the new release of <em class="title-reference">netaddr</em> 1\.0\.0\, the <em class="title-reference">IPAddress\.is\_private\(\)</em> method has been removed and instead\, the <em class="title-reference">IPAddress\.is\_global\(\)</em> method has been extended to support the same functionality\. This change has been reflected in the <em class="title-reference">ipaddr</em> filter plugin\.
+
+<a id="arista-eos"></a>
+#### arista\.eos
+
+* Bumping <em class="title-reference">requires\_ansible</em> to <em class="title-reference">\>\=2\.14\.0</em>\, since previous ansible\-core versions are EoL now\.
+* This release removes previously deprecated modules and attributes from this collection\. Please refer to the <strong>Removed Features</strong> section for details\.
+* Update the netcommon base version 6\.1\.0 to support cli\_restore plugin\.
+
+<a id="cisco-asa"></a>
+#### cisco\.asa
+
+* Bumping <em class="title-reference">requires\_ansible</em> to <em class="title-reference">\>\=2\.14\.0</em>\, since previous ansible\-core versions are EoL now\.
+
+<a id="cisco-ios"></a>
+#### cisco\.ios
+
+* Bumping <em class="title-reference">requires\_ansible</em> to <em class="title-reference">\>\=2\.14\.0</em>\, 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
+
+<a id="cisco-iosxr"></a>
+#### cisco\.iosxr
+
+* Bumping <em class="title-reference">requires\_ansible</em> to <em class="title-reference">\>\=2\.14\.0</em>\, since previous ansible\-core versions are EoL now\.
+* This release removes previously deprecated module and attributes from this collection\. Please refer to the <strong>Removed Features</strong> section for details\.
+* Update the netcommon base version to support cli\_restore plugin\.
+
+<a id="cisco-nxos"></a>
+#### cisco\.nxos
+
+* Bumping <em class="title-reference">requires\_ansible</em> to <em class="title-reference">\>\=2\.14\.0</em>\, since previous ansible\-core versions are EoL now\.
+* This release removes four previously deprecated modules from this collection\. Please refer to the <strong>Removed Features</strong> section for details\.
+* Updated the minimum required ansible\.netcommon version to 6\.1\.0 to support the cli\_restore module\.
+
+<a id="community-dns"></a>
+#### community\.dns
+
+* The <code>community\.dns</code> collection now depends on the <code>community\.library\_inventory\_filtering\_v1</code> 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 <code>ansible\-galaxy collection install</code>\, 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)\)\.
+
+<a id="community-docker"></a>
+#### community\.docker
+
+* The <code>community\.docker</code> collection now depends on the <code>community\.library\_inventory\_filtering\_v1</code> 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 <code>ansible\-galaxy collection install</code>\, 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)\)\.
+
+<a id="community-hashi-vault"></a>
+#### community\.hashi\_vault
+
+* requirements \- the <code>requests</code> package which is required by <code>hvac</code> now has a more restrictive range for this collection in certain use cases due to breaking security changes in <code>ansible\-core</code> that were backported \([https\://github\.com/ansible\-collections/community\.hashi\_vault/pull/416](https\://github\.com/ansible\-collections/community\.hashi\_vault/pull/416)\)\.
+
+<a id="community-hrobot"></a>
+#### community\.hrobot
+
+* The <code>community\.hrobot</code> collection now depends on the <code>community\.library\_inventory\_filtering\_v1</code> 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 <code>ansible\-galaxy collection install</code>\, 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)\)\.
+
+<a id="community-mysql"></a>
+#### community\.mysql
+
+* Collection version 2\.\*\.\* is EOL\, no more bugfixes will be backported\. Please consider upgrading to the latest version\.
+
+<a id="containers-podman"></a>
+#### containers\.podman
+
+* Add quadlet support for Podman modules
+
+<a id="dellemc-openmanage"></a>
+#### dellemc\.openmanage
+
+* All OME modules are enhanced to support the environment variables <em class="title-reference">OME\_USERNAME</em> and <em class="title-reference">OME\_PASSWORD</em> as fallback for credentials\.
+* All iDRAC and Redfish modules are enhanced to support the environment variables <em class="title-reference">IDRAC\_USERNAME</em> and <em class="title-reference">IDRAC\_PASSWORD</em> as fallback for credentials\.
+* idrac\_certificates \- The module is enhanced to support the import and export of <em class="title-reference">CUSTOMCERTIFICATE</em>\.
+* 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\.
+
+<a id="dellemc-unity"></a>
+#### dellemc\.unity
+
+* Adding support for Unity Puffin v5\.4\.
+
+<a id="fortinet-fortios"></a>
+#### 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\.
+
+<a id="grafana-grafana"></a>
+#### 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)
+
+<a id="ibm-qradar"></a>
+#### ibm\.qradar
+
+* Bumping <em class="title-reference">requires\_ansible</em> to <em class="title-reference">\>\=2\.14\.0</em>\, since previous ansible\-core versions are EoL now\.
+
+<a id="infoblox-nios-modules"></a>
+#### infoblox\.nios\_modules
+
+* Upgrade Ansible version support from 2\.13 to 2\.16\.
+* Upgrade Python version support from 3\.8 to 3\.10\.
+
+<a id="junipernetworks-junos"></a>
+#### junipernetworks\.junos
+
+* Bumping <em class="title-reference">requires\_ansible</em> to <em class="title-reference">\>\=2\.14\.0</em>\, since previous ansible\-core versions are EoL now\.
+* This release removes previously deprecated modules from this collection\. Please refer to the <strong>Removed Features</strong> section for details\.
+* Update the netcommon base version 6\.1\.0 to support cli\_restore plugin\.
+
+<a id="splunk-es"></a>
+#### splunk\.es
+
+* Bumping <em class="title-reference">requires\_ansible</em> to <em class="title-reference">\>\=2\.14\.0</em>\, since previous ansible\-core versions are EoL now\.
+
+<a id="minor-changes"></a>
+### Minor Changes
+
+<a id="ansible-core-2"></a>
+#### Ansible\-core
+
+* Add <code>dump</code> and <code>passno</code> 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 <code>functools\.update\_wrapper</code> 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\.
+* <code>DEFAULT\_PRIVATE\_ROLE\_VARS</code> is now overridden by explicit setting of <code>public</code> for <code>include\_roles</code> and <code>import\_roles</code>\.
+* <code>ansible\-galaxy role\|collection init</code> \- accept <code>\-\-extra\-vars</code> to supplement/override the variables <code>ansible\-galaxy</code> injects for templating <code>\.j2</code> files in the skeleton\.
+* <code>import\_role</code> action now also gets a <code>public</code> option that controls variable exports\, default depending on <code>DEFAULT\_PRIVATE\_ROLE\_VARS</code> \(if using defaults equates to <code>public\=True</code>\)\.
+* added configuration item <code>TARGET\_LOG\_INFO</code> 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 <code>pytest \>\= 8</code> on multi\-user systems with an installed version of <code>ansible\-test</code>\.
+* ansible\-test \- Add support for RHEL 9\.3 remotes\.
+* ansible\-test \- Added a macOS 14\.3 remote VM\.
+* ansible\-test \- Bump the <code>nios\-test\-container</code> from version 2\.0\.0 to version 3\.0\.0\.
+* ansible\-test \- Containers and remotes managed by ansible\-test will have their Python <code>EXTERNALLY\-MANAGED</code> 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 <code>base</code> and <code>default</code> 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 <code>virtualenv</code> when <code>\-m venv</code> is non\-functional\.
+* ansible\-test \- Removed test remotes\: macos/13\.2
+* ansible\-test \- Removed the <code>no\-basestring</code> sanity test\. The test is no longer necessary now that Python 3 is required\.
+* ansible\-test \- Removed the <code>no\-dict\-iteritems</code>\, <code>no\-dict\-iterkeys</code> and <code>no\-dict\-itervalues</code> sanity tests\. The tests are no longer necessary since Python 3 is required\.
+* ansible\-test \- Removed the <code>no\-main\-display</code> sanity test\. The unwanted pattern is unlikely to occur\, since the test has existed since Ansible 2\.8\.
+* ansible\-test \- Removed the <code>no\-unicode\-literals</code> sanity test\. The test is unnecessary now that Python 3 is required and the <code>unicode\_literals</code> feature has no effect\.
+* ansible\-test \- Special handling for installation of <code>cryptography</code> has been removed\, as it is no longer necessary\.
+* ansible\-test \- The <code>shellcheck</code> sanity test no longer disables the <code>SC2164</code> check\. In most cases\, seeing this error means the script is missing <code>set \-e</code>\.
+* ansible\-test \- The <code>unidiomatic\-typecheck</code> rule has been enabled in the <code>pylint</code> sanity test\.
+* ansible\-test \- The <code>unidiomatic\-typecheck</code> rule has been removed from the <code>validate\-modules</code> 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 <em class="title-reference">\-\-requirements</em> option is used\.
+* ansible\-test \- When invoking <code>sleep</code> in containers during container setup\, the <code>env</code> 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 <code>EXAMPLES</code> 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 <code>best</code> option
+* dnf5 \- add the <code>best</code> 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 <code>\_from</code> options for parity with <code>include\_role</code> \([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 <code>context</code>\. 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 <code>self\.\_execute\_module\(\*\, ignore\_unknown\_opts\=True\)</code> 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 <code>ansible\.utils\.py3compat</code> as it is no longer necessary
+* removed the unused argument <code>create\_new\_password</code> from <code>CLI\.build\_vault\_ids</code> \([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 <code>Request\.open</code>
+* user \- accept yescrypt hash as user password
+* validate\-modules tests now correctly handles <code>choices</code> in dictionary format\.
+
+<a id="amazon-aws"></a>
+#### amazon\.aws
+
+* AnsibeAWSModule \- added <code>fail\_json\_aws\_error\(\)</code> as a wrapper for <code>fail\_json\(\)</code> and <code>fail\_json\_aws\(\)</code> when passed an <code>AnsibleAWSError</code> 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 <code>schedule\_expression\_timezone</code> 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 <code>get\_image\_attribute</code> 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 <code>ResourceTags</code> 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 <code>host</code> 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 <code>ResourceTags</code> 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 <code>deleted</code> or <code>deleting</code> 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 <code>ResourceTags</code> 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 <code>ResourceTags</code> 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 <code>tags</code> has been changed from <code>\{\}</code> to <code>None</code>\, 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 <code>ResourceTags</code> 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 <code>wait\_timeout</code> 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 <code>AnsibleIAMError</code> and <code>IAMErrorHandler</code> 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 <code>AnsibleIAMError</code> and <code>IAMErrorHandler</code> 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 <code>name</code> and <code>path</code> 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 \- <code>group\_name</code> has been added as an alias to <code>name</code> 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 <code>AnsibleIAMError</code> and <code>IAMErrorHandler</code> 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 <code>name</code> and <code>path</code> 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 <code>path</code> 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 <code>AnsibleIAMError</code> and <code>IAMErrorHandler</code> 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 <code>prefix</code> parameter has been renamed <code>path</code> for consistency with other IAM modules\, <code>prefix</code> 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 <code>path</code> has been removed\. New instances will still be created with a default path of <code>/</code>\. 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 <code>AnsibleIAMError</code> and <code>IAMErrorHandler</code> 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 <code>name</code> and <code>path</code> 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 \- <code>description</code> 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 \- <code>policy</code> 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 <code>AnsibleIAMError</code> and <code>IAMErrorHandler</code> 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 <code>path</code> \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1936](https\://github\.com/ansible\-collections/amazon\.aws/pull/1936)\)\.
+* iam\_managed\_policy \- the <code>policy\_description</code> parameter has been renamed <code>description</code> for consistency with other IAM modules\, <code>policy\_description</code> 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 <code>policy\_name</code> parameter has been renamed <code>name</code> for consistency with other IAM modules\, <code>policy\_name</code> 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 <code>AnsibleIAMError</code> and <code>IAMErrorHandler</code> 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 <code>name</code> and <code>path</code> 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 \- <code>prefix</code> and <code>path\_prefix</code> have been added as aliases to <code>path</code> 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 \- <code>role\_name</code> has been added as an alias to <code>name</code> 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 <code>path</code> 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 <code>AnsibleIAMError</code> and <code>IAMErrorHandler</code> 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 <code>path</code> has been removed\. New roles will still be created with a default path of <code>/</code>\. 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 \- <code>path</code> and <code>prefix</code> have been added as aliases to <code>path\_prefix</code> 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 <code>AnsibleIAMError</code> and <code>IAMErrorHandler</code> 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 <code>name</code> and <code>path</code> 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 \- <code>user\_name</code> has been added as an alias to <code>name</code> 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 <code>boundary</code> 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 <code>path</code> 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 <code>attached\_policies</code> 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 <code>AnsibleIAMError</code> and <code>IAMErrorHandler</code> 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 <code>login\_profile</code> 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 \- <code>prefix</code> has been added as an alias to <code>path\_prefix</code> 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 <code>AnsibleIAMError</code> and <code>IAMErrorHandler</code> 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 <code>path</code> parameter has been renamed <code>path\_prefix</code> for consistency with other IAM modules\, <code>path</code> 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 <code>maximum\_batching\_window\_in\_seconds</code> 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 <code>boto3\_resource\_to\_ansible\_dict\(\)</code> and <code>boto3\_resource\_list\_to\_ansible\_dict\(\)</code> \([https\://github\.com/ansible\-collections/amazon\.aws/pull/2006](https\://github\.com/ansible\-collections/amazon\.aws/pull/2006)\)\.
+* module\_utils\.transformations \- add <code>boto3\_resource\_to\_ansible\_dict\(\)</code> and <code>boto3\_resource\_list\_to\_ansible\_dict\(\)</code> 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 <code>SslPolicy</code>\, <code>Certificates</code> and <code>AlpnPolicy</code> 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 <code>enable\_cloudwatch\_logs\_exports</code> 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 <code>bucket\_versioning</code> 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)\)\.
+
+<a id="ansible-netcommon-1"></a>
+#### ansible\.netcommon
+
+* Add new module cli\_restore that exclusively handles restoring of backup configuration to target applaince\.
+
+<a id="ansible-utils-1"></a>
+#### 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)\)\.
+
+<a id="ansible-windows"></a>
+#### 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 <code>scope\_name</code> 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
+
+<a id="arista-eos-1"></a>
+#### 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\.
+
+<a id="check-point-mgmt"></a>
+#### check\_point\.mgmt
+
+* New resource modules for R81\.20 JHF Take 43
+* meta/runtime\.yml \- update minimum Ansible version required to 2\.14\.0\.
+
+<a id="cisco-aci"></a>
+#### 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
+
+<a id="cisco-dnac"></a>
+#### 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\'
+
+<a id="cisco-ios-1"></a>
+#### 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
+
+<a id="cisco-iosxr-1"></a>
+#### 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)\)\.
+
+<a id="cisco-ise"></a>
+#### 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
+
+<a id="cisco-meraki"></a>
+#### 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 <em class="title-reference">organizations\_appliance\_vpn\_third\_party\_vpnpeers\_info</em>\.
+* Removing <em class="title-reference">state</em> from allowed parameters for <em class="title-reference">networks\_syslog\_servers</em> module\.
+* The <em class="title-reference">id</em> parameter is change type to an <em class="title-reference">integer</em> in <em class="title-reference">networks\_appliance\_vlans</em> module\.
+* The <em class="title-reference">id</em> parameter is now required for <em class="title-reference">networks\_appliance\_vlans</em> 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\.
+
+<a id="cisco-mso"></a>
+#### 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
+
+<a id="cisco-nxos-1"></a>
+#### 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)\)\.
+
+<a id="community-aws"></a>
+#### 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 <code>cache\_policy\_id</code> and <code>origin\_request\_policy\_id</code> 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 <code>runtime\_platform</code> \([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 <code>wait\=\=True</code> \([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 <code>AlpnPolicy</code> 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 <code>SslPolicy</code> and <code>Certificates</code> 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 <code>wait</code> and <code>wait\_timeout</code> 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 <code>m5</code> and <code>m7g</code> types of MSK clusters \([https\://github\.com/ansible\-collections/community\.aws/pull/1947](https\://github\.com/ansible\-collections/community\.aws/pull/1947)\)\.
+
+<a id="community-ciscosmb"></a>
+#### 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
+
+<a id="community-crypto"></a>
+#### community\.crypto
+
+* When using cryptography \>\= 42\.0\.0\, use offset\-aware <code>datetime\.datetime</code> 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 <code>include\_renewal\_cert\_id</code> 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 <code>serial\_numbers</code> allow to configure in which format serial numbers can be provided to <code>revoked\_certificates\[\]\.serial\_number</code>\. The default is as integers \(<code>serial\_numbers\=integer</code>\) for backwards compatibility\; setting <code>serial\_numbers\=hex\-octets</code> allows to specify colon\-separated hex octet strings like <code>00\:11\:22\:FF</code> \([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)\)\.
+
+<a id="community-digitalocean"></a>
+#### 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)\)\.
+
+<a id="community-dns-1"></a>
+#### community\.dns
+
+* hetzner\_dns\_records and hosttech\_dns\_records inventory plugins \- the <code>filters</code> option has been renamed to <code>simple\_filters</code>\. The old name still works until community\.hrobot 2\.0\.0\. Then it will change to allow more complex filtering with the <code>community\.library\_inventory\_filtering\_v1</code> collection\'s functionality \([https\://github\.com/ansible\-collections/community\.dns/pull/181](https\://github\.com/ansible\-collections/community\.dns/pull/181)\)\.
+* inventory plugins \- add <code>filter</code> 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 \(<code>search\=false</code>\)\, or potentially as a relative domain name \(<code>search\=true</code>\) \([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 <code>server</code> 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 <code>server</code> parameter to specify custom DNS servers \([https\://github\.com/ansible\-collections/community\.dns/pull/178](https\://github\.com/ansible\-collections/community\.dns/pull/178)\)\.
+
+<a id="community-docker-1"></a>
+#### community\.docker
+
+* The EE requirements now include PyYAML\, since the <code>docker\_compose\_v2\*</code> modules depend on it when the <code>definition</code> 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 <code>ca\_cert</code> option available to almost all modules and plugins has been renamed to <code>ca\_path</code>\. The name <code>ca\_path</code> 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 <code>docker\_stack\*</code> modules now use the common CLI\-based module code added for the <code>docker\_image\_build</code> and <code>docker\_compose\_v2</code> 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 <code>community\.docker\.docker</code> and <code>docker</code> 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 <code>scale</code> 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 <code>docker compose up</code> with the new <code>wait</code> 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 <code>check\_files\_existing</code> allows to disable the check for one of the files <code>compose\.yaml</code>\, <code>compose\.yml</code>\, <code>docker\-compose\.yaml</code>\, and <code>docker\-compose\.yml</code> in <code>project\_src</code> if <code>files</code> is not specified\. This is necessary if a non\-standard compose filename is specified through other means\, like the <code>COMPOSE\_FILE</code> 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 <code>project\_src</code> 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 <code>files</code> 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 <code>networks\[\]\.mac\_address</code> option for Docker API 1\.44\+\. Note that Docker API 1\.44 no longer uses the global <code>mac\_address</code> 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 <code>healthcheck\.start\_interval</code> 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 <code>healthcheck\.test\_cli\_compatible</code> 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 <code>platform</code> 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 <code>pull\_check\_mode\_behavior</code> option now allows to control the module\'s behavior in check mode when <code>pull\=always</code> \([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 <code>pull</code> option now accepts the three values <code>never</code>\, <code>missing\_image</code> \(default\)\, and <code>never</code>\, next to the previously valid values <code>true</code> \(equivalent to <code>always</code>\) and <code>false</code> \(equivalent to <code>missing\_image</code>\)\. This allows the equivalent to <code>\-\-pull\=never</code> 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 <code>/dev/shm</code> 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 <code>outputs</code> 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 <code>secrets</code> 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 <code>platform</code> 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 <code>config\_only</code> and <code>config\_from</code> 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 <code>builder\_cache\_all</code>\, <code>builder\_cache\_filters</code>\, and <code>builder\_cache\_keep\_storage</code>\, and a new return value <code>builder\_cache\_caches\_deleted</code> 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 <code>sysctls</code> 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 <code>filter</code> 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)\)\.
+
+<a id="community-general"></a>
+#### community\.general
+
+* PythonRunner module utils \- specialisation of <code>CmdRunner</code> 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 <code>datetime\.datetime</code> 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 <code>module\.run\_command\(\)</code> 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 <code>latest</code> and <code>present\_not\_latest</code>\. The value <code>latest</code> is equivalent to the current behavior of <code>present</code>\, which will upgrade a package if a newer version exists\. <code>present\_not\_latest</code> does what most users would expect <code>present</code> to do\: it does not upgrade if the package is already installed\. The current behavior of <code>present</code> will be deprecated in a later version\, and eventually changed to that of <code>present\_not\_latest</code> \([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 <code>module\.run\_command\(\)</code> 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 <code>bw\_session</code> 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 <code>search\_value</code> when <code>collection\_id</code> 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 <code>bw get item</code> 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 <code>module\.run\_command\(\)</code> 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 <code>cmd\_runner\_fmt\.as\_list\(\)</code> \([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 <code>community\.general\.consul</code> \([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 <code>requests</code> 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 \- <code>node\_identities</code> now expects a <code>node\_name</code> option to match the Consul API\, the old <code>name</code> 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 \- <code>service\_identities</code> now expects a <code>service\_name</code> option to match the Consul API\, the old <code>name</code> 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 <code>ModuleHelper</code> with <code>VarDict</code> \([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 <code>add\_mode</code> option \([https\://github\.com/ansible\-collections/community\.general/pull/7260](https\://github\.com/ansible\-collections/community\.general/pull/7260)\)\.
+* git\_config \- the <code>after</code> and <code>before</code> fields in the <code>diff</code> 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 <code>ca\_path</code> option \([https\://github\.com/ansible\-collections/community\.general/pull/7472](https\://github\.com/ansible\-collections/community\.general/pull/7472)\)\.
+* gitlab modules \- remove duplicate <code>gitlab</code> 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 <code>python\-gitlab</code> \([https\://github\.com/ansible\-collections/community\.general/pull/7790](https\://github\.com/ansible\-collections/community\.general/pull/7790)\)\.
+* gitlab\_hook \- adds <code>releases\_events</code> 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 <code>force\_formula</code> 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 <code>homebrew</code> 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 <code>url</code>\, <code>user</code>\, and <code>password</code> 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 <code>group\_by\_hostgroups</code> 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 <code>section\_has\_values</code>\. If the target ini file contains more than one <code>section</code>\, use <code>section\_has\_values</code> 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 <code>module\.run\_command\(\)</code> 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 <code>passkey</code> choice to <code>ipauserauthtype</code> 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 <code>if</code> statements with a <code>for</code> 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 <code>maxrepeat</code>\, <code>maxsequence</code>\, <code>dictcheck</code>\, <code>usercheck</code>\, <code>gracelimit</code> 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 <code>idp</code> and <code>passkey</code> choice to <code>ipauserauthtype</code> parameter\'s choices \([https\://github\.com/ansible\-collections/community\.general/pull/7589](https\://github\.com/ansible\-collections/community\.general/pull/7589)\)\.
+* irc \- add <code>validate\_certs</code> option\, and rename <code>use\_ssl</code> to <code>use\_tls</code>\, while keeping <code>use\_ssl</code> as an alias\. The default value for <code>validate\_certs</code> is <code>false</code> for backwards compatibility\. We recommend to every user of this module to explicitly set <code>use\_tls\=true</code> and <em class="title-reference">validate\_certs\=true\`</em> 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 <code>cert\_content</code> argument \([https\://github\.com/ansible\-collections/community\.general/pull/8153](https\://github\.com/ansible\-collections/community\.general/pull/8153)\)\.
+* java\_cert \- enable <code>owner</code>\, <code>group</code>\, <code>mode</code>\, 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 <code>ModuleHelper</code> with <code>VarDict</code> \([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 <code>docker\-v2</code> 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 <code>config\.algorithm</code> 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 <code>config\.certificate</code> option value is no longer defined with <code>no\_log\=True</code> \([https\://github\.com/ansible\-collections/community\.general/pull/7698](https\://github\.com/ansible\-collections/community\.general/pull/7698)\)\.
+* keycloak\_realm\_key \- the <code>provider\_id</code> option now supports RSA encryption key usage \(value <code>rsa\-enc</code>\) \([https\://github\.com/ansible\-collections/community\.general/pull/7698](https\://github\.com/ansible\-collections/community\.general/pull/7698)\)\.
+* keycloak\_user\_federation \- add option for <code>krbPrincipalAttribute</code> \([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 <code>provider\_id</code> \([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 <code>module\.run\_command\(\)</code> 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 <code>pvs</code> 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 <code>module\.run\_command\(\)</code> 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 <code>Instance not found</code> errors\, to avoid false detection on unrelated errors such as <code>/usr/bin/python3\: not found</code> \([https\://github\.com/ansible\-collections/community\.general/pull/7521](https\://github\.com/ansible\-collections/community\.general/pull/7521)\)\.
+* lxd\_container \- uses <code>/1\.0/instances</code> API endpoint\, if available\. Falls back to <code>/1\.0/containers</code> or <code>/1\.0/virtual\-machines</code>\. Fixes issue when using Incus or LXD 5\.19 due to migrating to <code>/1\.0/instances</code> 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 <code>module\.run\_command\(\)</code> 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 <code>Message\-ID</code> 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 <code>message\_id\_domain</code> 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 <code>transaction</code> \([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 <code>OPENPGPKEY</code>\, <code>SMIMEA</code>\, and <code>SSHFP</code> \([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 <code>loopback</code> \([https\://github\.com/ansible\-collections/community\.general/issues/6572](https\://github\.com/ansible\-collections/community\.general/issues/6572)\)\.
+* nmcli \- adds OpenvSwitch support with new <code>type</code> values <code>ovs\-port</code>\, <code>ovs\-interface</code>\, and <code>ovs\-bridge</code>\, and new <code>slave\_type</code> value <code>ovs\-port</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8154](https\://github\.com/ansible\-collections/community\.general/pull/8154)\)\.
+* nmcli \- allow for <code>infiniband</code> slaves of <code>bond</code> 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 <code>MTU</code> for <code>infiniband</code> and <code>bond</code> interface types \([https\://github\.com/ansible\-collections/community\.general/pull/7499](https\://github\.com/ansible\-collections/community\.general/pull/7499)\)\.
+* nmcli \- allow setting <code>MTU</code> for <code>bond\-slave</code> 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 <code>OTEL\_EXPORTER\_OTLP\_TRACES\_PROTOCOL</code> \([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 <code>ANSIBLE\_OPENTELEMETRY\_STORE\_SPANS\_IN\_FILE</code> \([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 <code>ModuleHelper</code> with <code>VarDict</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8226](https\://github\.com/ansible\-collections/community\.general/pull/8226)\)\.
+* osx\_defaults \- add option <code>check\_types</code> 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 <code>module\.run\_command\(\)</code> 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 <code>timestamp</code> and <code>preserve</code> 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 <code>missing\_subkey</code> 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 <code>ModuleHelper</code> with <code>VarDict</code> \([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 <code>module\.run\_command\(\)</code> 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 <code>module\.run\_command\(\)</code> 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 <code>startup</code> 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 <code>template</code> value to the <code>state</code> 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 <code>update</code> 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 <code>community\.general\.proxmox</code> 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 <code>update\_unsafe</code> 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 <code>template</code> value to the <code>state</code> 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 <code>hookscript</code> 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 <code>ostype</code> 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 <code>\-\-waitforlock</code> option \([https\://github\.com/ansible\-collections/community\.general/pull/8282](https\://github\.com/ansible\-collections/community\.general/pull/8282)\)\.
+* redfish\_command \- add command <code>ResetToDefaults</code> 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 <code>SetServiceIdentification</code> 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 <code>MultipartHttpPush</code> to <code>GetFirmwareUpdateCapabilities</code> \([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 <code>GetServiceIdentification</code> 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 <code>BootProgress</code> property when getting <code>Systems</code> 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 <code>Content\-Type</code> 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 <code>module\.run\_command\(\)</code> 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 <code>controlmaster</code>\, <code>controlpath</code> and <code>controlpersist</code> parameters \([https\://github\.com/ansible\-collections/community\.general/pull/7456](https\://github\.com/ansible\-collections/community\.general/pull/7456)\)\.
+* ssh\_config \- allow <code>accept\-new</code> as valid value for <code>strict\_host\_key\_checking</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8257](https\://github\.com/ansible\-collections/community\.general/pull/8257)\)\.
+* ssh\_config \- new feature to set <code>AddKeysToAgent</code> option to <code>yes</code> or <code>no</code> \([https\://github\.com/ansible\-collections/community\.general/pull/7703](https\://github\.com/ansible\-collections/community\.general/pull/7703)\)\.
+* ssh\_config \- new feature to set <code>IdentitiesOnly</code> option to <code>yes</code> or <code>no</code> \([https\://github\.com/ansible\-collections/community\.general/pull/7704](https\://github\.com/ansible\-collections/community\.general/pull/7704)\)\.
+* sudoers \- add support for the <code>NOEXEC</code> 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 <code>module\.run\_command\(\)</code> 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 <code>module\.run\_command\(\)</code> 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 <code>diff\_mode</code> for terraform resource\_changes \([https\://github\.com/ansible\-collections/community\.general/pull/7896](https\://github\.com/ansible\-collections/community\.general/pull/7896)\)\.
+* terraform \- fix <code>diff\_mode</code> in state <code>absent</code> and when terraform <code>resource\_changes</code> 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 \(<code>command\=PostResource</code> in <code>category\=Raw</code>\) 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 <code>ModuleHelper</code> with <code>VarDict</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8226](https\://github\.com/ansible\-collections/community\.general/pull/8226)\)\.
+* xfconf\_info \- use <code>ModuleHelper</code> with <code>VarDict</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8226](https\://github\.com/ansible\-collections/community\.general/pull/8226)\)\.
+
+<a id="community-grafana"></a>
+#### community\.grafana
+
+* Add Quickwit search engine datasource \([https\://quickwit\.io](https\://quickwit\.io)\)\.
+* Add new module <em class="title-reference">grafana\_silence</em> to create and delete silences through the API
+* Add parameter <em class="title-reference">org\_name</em> to <em class="title-reference">grafana\_dashboard</em>
+* Add parameter <em class="title-reference">org\_name</em> to <em class="title-reference">grafana\_datasource</em>
+* Add parameter <em class="title-reference">org\_name</em> to <em class="title-reference">grafana\_organization\_user</em>
+* Add role components for <em class="title-reference">grafana\_silence</em> 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 <em class="title-reference">grafana\_folder</em> for organizations
+* Merged ansible role telekom\-mms/ansible\-role\-grafana into ansible\-collections/community\.grafana
+* added <em class="title-reference">community\.grafana\.notification\_channel</em> to role
+* default to true/false in docs and code
+* grafana\_dashboard \- add check\_mode support
+* lookup \- grafana\_dashboards \- add <em class="title-reference">validate\_certs</em> and <em class="title-reference">ca\_path</em> options to plugin for custom certs validation
+
+<a id="community-hashi-vault-1"></a>
+#### community\.hashi\_vault
+
+* cert auth \- add option to set the <code>cert\_auth\_public\_key</code> and <code>cert\_auth\_private\_key</code> parameters using the variables <code>ansible\_hashi\_vault\_cert\_auth\_public\_key</code> and <code>ansible\_hashi\_vault\_cert\_auth\_private\_key</code> \([https\://github\.com/ansible\-collections/community\.hashi\_vault/issues/428](https\://github\.com/ansible\-collections/community\.hashi\_vault/issues/428)\)\.
+
+<a id="community-hrobot-1"></a>
+#### community\.hrobot
+
+* robot inventory plugin \- add <code>filter</code> 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 <code>filters</code> option has been renamed to <code>simple\_filters</code>\. The old name still works until community\.hrobot 2\.0\.0\. Then it will change to allow more complex filtering with the <code>community\.library\_inventory\_filtering\_v1</code> collection\'s functionality \([https\://github\.com/ansible\-collections/community\.hrobot/pull/94](https\://github\.com/ansible\-collections/community\.hrobot/pull/94)\)\.
+
+<a id="community-mysql-1"></a>
+#### community\.mysql
+
+* mysql\_user \- add the <code>password\_expire</code> and <code>password\_expire\_interval</code> 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 <code>attributes</code> parameter and return value \([https\://github\.com/ansible\-collections/community\.mysql/pull/604](https\://github\.com/ansible\-collections/community\.mysql/pull/604)\)\.
+
+<a id="community-postgresql"></a>
+#### community\.postgresql
+
+* postgresql\_db \- add the <code>comment</code> argument \([https\://github\.com/ansible\-collections/community\.postgresql/issues/614](https\://github\.com/ansible\-collections/community\.postgresql/issues/614)\)\.
+* postgresql\_db \- add the <code>icu\_locale</code> argument \([https\://github\.com/ansible\-collections/community\.postgresql/issues/666](https\://github\.com/ansible\-collections/community\.postgresql/issues/666)\)\.
+* postgresql\_db \- add the <code>locale\_provider</code> argument \([https\://github\.com/ansible\-collections/community\.postgresql/issues/666](https\://github\.com/ansible\-collections/community\.postgresql/issues/666)\)\.
+* postgresql\_ext \- add the <code>comment</code> argument \([https\://github\.com/ansible\-collections/community\.postgresql/issues/354](https\://github\.com/ansible\-collections/community\.postgresql/issues/354)\)\.
+* postgresql\_publication \- add the <code>comment</code> argument \([https\://github\.com/ansible\-collections/community\.postgresql/issues/354](https\://github\.com/ansible\-collections/community\.postgresql/issues/354)\)\.
+* postgresql\_schema \- add the <code>comment</code> argument \([https\://github\.com/ansible\-collections/community\.postgresql/issues/354](https\://github\.com/ansible\-collections/community\.postgresql/issues/354)\)\.
+* postgresql\_subscription \- add the <code>comment</code> argument \([https\://github\.com/ansible\-collections/community\.postgresql/issues/354](https\://github\.com/ansible\-collections/community\.postgresql/issues/354)\)\.
+* postgresql\_tablespace \- add the <code>comment</code> argument \([https\://github\.com/ansible\-collections/community\.postgresql/issues/354](https\://github\.com/ansible\-collections/community\.postgresql/issues/354)\)\.
+
+<a id="community-rabbitmq"></a>
+#### 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)\)
+
+<a id="community-routeros"></a>
+#### community\.routeros
+
+* api\_info\, api\_modify \- Add RouterOS 7\.x support to <code>/mpls ldp</code> path \([https\://github\.com/ansible\-collections/community\.routeros/pull/271](https\://github\.com/ansible\-collections/community\.routeros/pull/271)\)\.
+* api\_info\, api\_modify \- add <code>/ip route rule</code> 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 <code>/routing filter</code> 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 <code>interface ovpn\-client</code> 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 <code>radius</code> 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 <code>routing rule</code> 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 <code>from\-pool</code> field in <code>/ipv6 address</code> \([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 <code>doh\-max\-concurrent\-queries</code>\, <code>doh\-max\-server\-connections</code>\, and <code>doh\-timeout</code> to the <code>ip dns</code> 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 <code>address\-list</code>\, <code>address\-list\-timeout</code>\, <code>randomise\-ports</code>\, and <code>realm</code> to subpaths of the <code>ip firewall</code> 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 <code>/interface pppoe\-server server</code> \([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 <code>/ip dhcp\-relay</code> \([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 <code>/queue simple</code> \([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 <code>/queue type</code> \([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 <code>routing bgp template</code> \([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 <code>/routing bgp aggregate</code>\, <code>/routing bgp network</code> and <code>/routing bgp peer</code> \([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 <code>installed\-version</code>\, <code>latest\-version</code> and <code>status</code> in <code>system package update</code> \([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 <code>/mpls interface</code>\, <code>/mpls ldp accept\-filter</code>\, <code>/mpls ldp advertise\-filter</code> and <code>mpls ldp interface</code> \([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 <code>tx\-power</code> attribute in <code>interface wireless</code> \([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 <code>interface wifi</code> 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 <code>user group</code> modifiable and add <code>comment</code> 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 <code>interface wireless</code> parameter <code>running</code> 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 <code>running</code> field in <code>interface wireless</code> \([https\://github\.com/ansible\-collections/community\.routeros/pull/264](https\://github\.com/ansible\-collections/community\.routeros/pull/264)\)\.
+* api\_info\, api\_modify \- removed <code>host</code> primary key in <code>tool netwatch</code> 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 <code>false</code> for the <code>disabled</code> 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 <code>comment</code> attribute to <code>/routing id</code> \([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 <code>routing bgp connection</code> 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 <code>/tool e\-mail</code> 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 <code>/ip traffic\-flow target</code> 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 <code>ip vrf</code> 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 <code>interface wifiwave2</code> \([https\://github\.com/ansible\-collections/community\.routeros/pull/226](https\://github\.com/ansible\-collections/community\.routeros/pull/226)\)\.
+
+<a id="community-vmware"></a>
+#### 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 <em class="title-reference">state</em> default to <em class="title-reference">present</em> 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 <em class="title-reference">toolsVersionStatus2</em> instead of <em class="title-reference">toolsVersionStatus</em> \([https\://github\.com/ansible\-collections/community\.vmware/issues/2033](https\://github\.com/ansible\-collections/community\.vmware/issues/2033)\)\.
+* vmware\_guest\_tools\_upgrade \- Add parameter <em class="title-reference">installer\_options</em> 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 <em class="title-reference">subproperties</em> \([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)\)\.
+
+<a id="community-windows"></a>
+#### 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
+
+<a id="community-zabbix"></a>
+#### 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 <em class="title-reference">enable\_version\_check</em> to allow installations on non\-supported platforms\.
+* action module \- Added notify\_if\_canceled property
+* agent and proxy roles \- Set default <em class="title-reference">zabbix\_api\_server\_port</em> to 80 or 443 based on <em class="title-reference">zabbix\_api\_use\_ssl</em>
+* 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\.
+
+<a id="containers-podman-1"></a>
+#### 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
+
+<a id="dellemc-enterprise-sonic"></a>
+#### 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)\)\.
+
+<a id="dellemc-openmanage-1"></a>
+#### dellemc\.openmanage
+
+* Ansible lint issues are fixed for the collections\.
+* For idrac\_certificate role\, added support for import operation of <em class="title-reference">HTTPS</em> certificate with the SSL key\.
+* For idrac\_certificates module\, below enhancements are made\: Added support for import operation of <em class="title-reference">HTTPS</em> certificate with the SSL key\. The <em class="title-reference">email\_address</em> has been made as an optional parameter\.
+* For idrac\_gather\_facts role\, added storage controller details in the role output\.
+* Module <code>redfish\_storage\_volume</code> 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\.
+
+<a id="dellemc-powerflex"></a>
+#### 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\.
+
+<a id="f5networks-f5-modules"></a>
+#### f5networks\.f5\_modules
+
+* bigiq\_device\_discovery \- Changes in documentation related to Provider block
+
+<a id="fortinet-fortimanager"></a>
+#### 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\.
+
+<a id="google-cloud"></a>
+#### 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\.
+
+<a id="grafana-grafana-1"></a>
+#### 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 <em class="title-reference">oauth\_allow\_insecure\_email\_lookup</em> 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)
+
+<a id="hetzner-hcloud"></a>
+#### hetzner\.hcloud
+
+* Add the <em class="title-reference">hetzner\.hcloud\.all</em> group to configure all the modules using <em class="title-reference">module\_defaults</em>\.
+* Allow to set the <em class="title-reference">api\_endpoint</em> module argument using the <em class="title-reference">HCLOUD\_ENDPOINT</em> environment variable\.
+* Removed the <em class="title-reference">hcloud\_</em> prefix from all modules names\, e\.g\. <em class="title-reference">hetzner\.hcloud\.hcloud\_firewall</em> was renamed to <em class="title-reference">hetzner\.hcloud\.firewall</em>\. Old module names will continue working\.
+* Renamed the <em class="title-reference">endpoint</em> module argument to <em class="title-reference">api\_endpoint</em>\, backward compatibility is maintained using an alias\.
+* Replace deprecated <em class="title-reference">ansible\.netcommon</em> ip utils with python <em class="title-reference">ipaddress</em> module\. The <em class="title-reference">ansible\.netcommon</em> 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 <em class="title-reference">applied\_to</em>\.
+* firewall\_info \- Add new <em class="title-reference">firewall\_info</em> module to gather firewalls info\.
+* firewall\_resource \- Add new <em class="title-reference">firewall\_resource</em> module to manage firewalls resources\.
+* hcloud inventory \- Add the <em class="title-reference">api\_endpoint</em> option\.
+* hcloud inventory \- Deprecate the <em class="title-reference">api\_token\_env</em> option\, suggest using a lookup plugin \(<em class="title-reference">\{\{ lookup\(\'ansible\.builtin\.env\'\, \'YOUR\_ENV\_VAR\'\) \}\}</em>\) or use the well\-known <em class="title-reference">HCLOUD\_TOKEN</em> environment variable name\.
+* hcloud inventory \- Rename the <em class="title-reference">token\_env</em> option to <em class="title-reference">api\_token\_env</em>\, use aliases for backward compatibility\.
+* hcloud inventory \- Rename the <em class="title-reference">token</em> option to <em class="title-reference">api\_token</em>\, use aliases for backward compatibility\.
+* inventory \- Add <em class="title-reference">hostname</em> option used to template the hostname of the instances\.
+* inventory \- Add <em class="title-reference">hostvars\_prefix</em> and hostvars\_suffix\` options to customize the inventory host variables keys\.
+* network \- Allow renaming networks\.
+* primary\_ip \- Use the <em class="title-reference">server</em> option to assign a Primary IP being created to a server\.
+* server \- Allow passing Datacenter name or ID to the <em class="title-reference">datacenter</em> argument\.
+* server \- Allow passing Image name or ID to the <em class="title-reference">image</em> argument\.
+* server \- Allow passing Location name or ID to the <em class="title-reference">location</em> argument\.
+* server \- Allow passing SSH Keys names or IDs to the <em class="title-reference">ssh\_keys</em> argument\.
+* server \- Allow passing Volume names or IDs to the <em class="title-reference">volumes</em> argument\.
+* server \- Renamed the <em class="title-reference">allow\_deprecated\_image</em> option to <em class="title-reference">image\_allow\_deprecated</em>\.
+
+<a id="ibm-storage-virtualize"></a>
+#### 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\'\.
+
+<a id="inspur-ispim"></a>
+#### 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\.
+
+<a id="junipernetworks-junos-1"></a>
+#### 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\.
+
+<a id="kubernetes-core"></a>
+#### kubernetes\.core
+
+* helm \- add <code>reuse\_values</code> and <code>reset\_values</code> 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 <code>delete\_all</code> to support deletion of all resources when state is set to <code>absent</code>\. \([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)\)
+
+<a id="lowlydba-sqlserver"></a>
+#### 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)\)
+
+<a id="microsoft-ad"></a>
+#### microsoft\.ad
+
+* Added <code>group/microsoft\.ad\.domain</code> module defaults group for the <code>computer</code>\, <code>group</code>\, <code>object\_info</code>\, <code>object</code>\, <code>ou</code>\, and <code>user</code> module\. Users can use this defaults group to set common connection options for these modules such as the <code>domain\_server</code>\, <code>domain\_username</code>\, and <code>domain\_password</code> options\.
+* Added support for Jinja2 templating in ldap inventory\.
+* Make <code>name</code> an optional parameter for the AD modules\. Either <code>name</code> or <code>identity</code> needs to be set with their respective behaviours\. If creating a new AD user and only <code>identity</code> 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
+
+<a id="netapp-ontap"></a>
+#### netapp\.ontap
+
+* na\_ontap\_cifs \- new option <em class="title-reference">offline\_files</em> added in REST\, requires ONTAP 9\.10 or later\.
+* na\_ontap\_cifs\_server \- new option <em class="title-reference">is\_multichannel\_enabled</em> added in REST\, requires ONTAP 9\.10 or later\.
+* na\_ontap\_cifs\_server \- new option <em class="title-reference">lm\_compatibility\_level</em> added in REST\, requires ONTAP 9\.8 or later\.
+* na\_ontap\_cluster \- new option <em class="title-reference">certificate\.uuid</em> 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 <em class="title-reference">syslog</em>\, <em class="title-reference">port</em>\, <em class="title-reference">transport</em>\, <em class="title-reference">message\_format</em>\, <em class="title-reference">timestamp\_format\_override</em> and <em class="title-reference">hostname\_format\_override</em> added in REST\, requires ONTAP 9\.12\.1 or later\.
+* na\_ontap\_export\_policy\_rule \- added <em class="title-reference">actions</em> and <em class="title-reference">modify</em> in module output\.
+* na\_ontap\_file\_security\_permissions\_acl \- added <em class="title-reference">actions</em> and <em class="title-reference">modify</em> in module output\.
+* na\_ontap\_igroup\_initiator \- added <em class="title-reference">actions</em> in module output\.
+* na\_ontap\_lun\_map \- added <em class="title-reference">actions</em> in module output\.
+* na\_ontap\_lun\_map\_reporting\_nodes \- added <em class="title-reference">actions</em> in module output\.
+* na\_ontap\_name\_mappings \- added <em class="title-reference">actions</em> and <em class="title-reference">modify</em> in module output\.
+* na\_ontap\_net\_ifgrp \- updated documentation for parameter <em class="title-reference">name</em>\.
+* na\_ontap\_node \- added <em class="title-reference">modify</em> in module output\.
+* na\_ontap\_rest\_info \- added warning message if given subset doesn\'t support option <em class="title-reference">owning\_resource</em>\.
+* na\_ontap\_s3\_services \- create\, modify S3 service returns <em class="title-reference">s3\_service\_info</em> 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 <em class="title-reference">schedule\.\*</em> added under <em class="title-reference">log\.rotation</em>\, requires ONTAP 9\.6 or later\.
+
+<a id="netapp-storagegrid"></a>
+#### netapp\.storagegrid
+
+* na\_sg\_grid\_account \- New option <code>allow\_select\_object\_content</code> for enabling use of the S3 SelectObjectContent API\.
+* na\_sg\_grid\_account \- New option <code>description</code> for setting additional identifying information for the tenant account\.
+
+<a id="netbox-netbox"></a>
+#### 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)\)
+
+<a id="purestorage-flasharray"></a>
+#### purestorage\.flasharray
+
+* all \- <code>distro</code> 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 <em class="title-reference">hosts</em> response
+* purefa\_info \- Add <code>is\_local</code> 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 <em class="title-reference">pgroups</em> now also provides a new dict called <em class="title-reference">deleted\_pgroups</em>
+* purefa\_inventory \- Convert to REST v2
+* purefa\_ntp \- Convert to REST v2
+* purefa\_offload \- Convert to REST v2
+* purefa\_offload \- Remove <em class="title-reference">nfs</em> as an option when Purity//FA 6\.6\.0 or higher is detected
+* purefa\_pg \- Enhance <code>state absent</code> 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 <code>present</code> and <code>absent</code> as valid <code>state</code> options
+* purefa\_ra \- Add connecting as valid status of RA to perform operations on
+* purefa\_ra \- Convert to REST v2
+* purefa\_snap \- Add <code>created\_epoch</code> parameter in response
+* purefa\_snap \- Add support for suffix on remote offload snapshots
+* purefa\_syslog \- <code>name</code> becomes a required parameter as module converts to full REST 2 support
+* purefa\_vnc \- Convert to REST v2
+
+<a id="purestorage-flashblade"></a>
+#### 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 <em class="title-reference">mode</em> parameter default changes to <em class="title-reference">multi\-site\-writable</em>\.
+* purefb\_connect \- Increase Fan\-In and Fan\-Out maximums
+* purefb\_ds \- Add <em class="title-reference">force\_bind\_password</em> parameter to allow module to be idempotent\.
+* purefb\_fs \- Add <code>group\_ownership</code> 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 <code>hard\_limit</code> and <code>default\_hard\_limit</code>
+
+<a id="telekom-mms-icinga-director"></a>
+#### 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)\)
+
+<a id="theforeman-foreman"></a>
+#### theforeman\.foreman
+
+* content\_view\_publish role \- allow passing <code>async</code> and <code>poll</code> to the module \([https\://github\.com/theforeman/foreman\-ansible\-modules/pull/1676](https\://github\.com/theforeman/foreman\-ansible\-modules/pull/1676)\)
+* convert2rhel role \- install <code>convert2rhel</code> from <code>cdn\-public\.redhat\.com</code>\, dropping the requirement of a custom CA cert
+
+<a id="vmware-vmware-rest"></a>
+#### 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)\)\.
+
+<a id="vultr-cloud"></a>
+#### 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 <code>default</code> 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 <code>user\_scheme</code> 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)\)\.
+
+<a id="breaking-changes--porting-guide"></a>
+### Breaking Changes / Porting Guide
+
+<a id="ansible-core-3"></a>
+#### Ansible\-core
+
+* assert \- Nested templating may result in an inability for the conditional to be evaluated\. See the porting guide for more information\.
+
+<a id="amazon-aws-1"></a>
+#### 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 \- <code>iam\_role\.assume\_role\_policy\_document</code> 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 \- <code>iam\_role\.assume\_role\_policy\_document</code> 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 <code>policies</code> return value has been renamed to <code>key\_policies</code> 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 <code>policies</code> return value has been renamed to <code>key\_policies</code> 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 \- \| <code>batch\_size</code> 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)\)\, <code>batch\_size</code> 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)\)\.
+
+<a id="cloud-common"></a>
+#### cloud\.common
+
+* Bump minimum Python supported version to 3\.9\.
+* Remove support for ansible\-core \< 2\.14\.
+
+<a id="community-aws-1"></a>
+#### community\.aws
+
+* The community\.aws collection has dropped support for <code>botocore\<1\.29\.0</code> and <code>boto3\<1\.26\.0</code>\. 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 <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.aws\_region\_info</code>\.
+* aws\_s3\_bucket\_info \- The module has been migrated from the <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.aws\_s3\_bucket\_info</code>\.
+* 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 <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.iam\_access\_key</code>\.
+* iam\_access\_key\_info \- The module has been migrated from the <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.iam\_access\_key\_info</code>\.
+* iam\_group \- The module has been migrated from the <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.iam\_group</code> \([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 <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.iam\_managed\_policy</code> \([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 <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.iam\_mfa\_device\_info</code> \([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 <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.iam\_password\_policy</code>\.
+* iam\_role \- The module has been migrated from the <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.iam\_role</code> \([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 <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.iam\_role\_info</code> \([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 <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.s3\_bucket\_info</code>\.
+* sts\_assume\_role \- The module has been migrated from the <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.sts\_assume\_role</code>\.
+
+<a id="community-ciscosmb-1"></a>
+#### community\.ciscosmb
+
+* in facts of interface \'bandwith\' changed to \'bandwidth\'
+
+<a id="community-dns-2"></a>
+#### community\.dns
+
+* The default for the <code>txt\_character\_encoding</code> options in various modules and plugins changed from <code>octal</code> to <code>decimal</code> \([https\://github\.com/ansible\-collections/community\.dns/pull/196](https\://github\.com/ansible\-collections/community\.dns/pull/196)\)\.
+* inventory plugins \- <code>filters</code> is now no longer an alias of <code>simple\_filters</code>\, 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 <code>plugin</code> 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 <code>search</code> changed from <code>false</code> \(implicit default for community\.dns 2\.x\.y\) to <code>true</code> \([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)\)\.
+
+<a id="community-general-1"></a>
+#### community\.general
+
+* cpanm \- the default of the <code>mode</code> option changed from <code>compatibility</code> to <code>new</code> \([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 <code>virtualenv</code> 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 <code>timeout</code> from 10 to 60 \([https\://github\.com/ansible\-collections/community\.general/pull/8198](https\://github\.com/ansible\-collections/community\.general/pull/8198)\)\.
+
+<a id="community-hrobot-2"></a>
+#### community\.hrobot
+
+* robot inventory plugin \- <code>filters</code> is now no longer an alias of <code>simple\_filters</code>\, but a new\, different option \([https\://github\.com/ansible\-collections/community\.hrobot/pull/101](https\://github\.com/ansible\-collections/community\.hrobot/pull/101)\)\.
+
+<a id="community-okd"></a>
+#### 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)\)\.
+
+<a id="hetzner-hcloud-1"></a>
+#### hetzner\.hcloud
+
+* Drop support for ansible\-core 2\.13\.
+* certificate \- The <em class="title-reference">not\_valid\_before</em> and <em class="title-reference">not\_valid\_after</em> values are now returned as ISO\-8601 formatted strings\.
+* certificate\_info \- The <em class="title-reference">not\_valid\_before</em> and <em class="title-reference">not\_valid\_after</em> values are now returned as ISO\-8601 formatted strings\.
+* inventory \- Remove the deprecated <em class="title-reference">api\_token\_env</em> option\, you may use the <em class="title-reference">ansible\.builtin\.env</em> lookup as alternative\.
+* iso\_info \- The <em class="title-reference">deprecated</em> value is now returned as ISO\-8601 formatted strings\.
+
+<a id="kubernetes-core-1"></a>
+#### 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\.
+
+<a id="theforeman-foreman-1"></a>
+#### theforeman\.foreman
+
+* content\_view\_filter \- stop managing rules from this module\, <code>content\_view\_filter\_rule</code> should be used for that
+* inventory plugin \- do not default to <code>http\://localhost\:3000</code> as the Foreman URL\, providing a URL is now mandatory
+
+<a id="vmware-vmware-rest-1"></a>
+#### vmware\.vmware\_rest
+
+* Remove support for ansible\-core \< 2\.14
+
+<a id="deprecated-features"></a>
+### Deprecated Features
+
+* The <code>inspur\.sm</code> 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 <code>netapp\.storagegrid</code> 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)\)\.
+
+<a id="ansible-core-4"></a>
+#### Ansible\-core
+
+* Old style vars plugins which use the entrypoints <em class="title-reference">get\_host\_vars</em> or <em class="title-reference">get\_group\_vars</em> are deprecated\. The plugin should be updated to inherit from <em class="title-reference">BaseVarsPlugin</em> and define a <em class="title-reference">get\_vars</em> 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)\)\.
+* <code>module\_utils</code> \- importing the following convenience helpers from <code>ansible\.module\_utils\.basic</code> has been deprecated\: <code>get\_exception</code>\, <code>literal\_eval</code>\, <code>\_literal\_eval</code>\, <code>datetime</code>\, <code>signal</code>\, <code>types</code>\, <code>chain</code>\, <code>repeat</code>\, <code>PY2</code>\, <code>PY3</code>\, <code>b</code>\, <code>binary\_type</code>\, <code>integer\_types</code>\, <code>iteritems</code>\, <code>string\_types</code>\, <code>test\_type</code>\, <code>map</code> and <code>shlex\_quote</code>\.
+* 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\(\)\.
+
+<a id="amazon-aws-2"></a>
+#### amazon\.aws
+
+* aws\_ec2 inventory plugin \- removal of the previously deprecated <code>include\_extra\_api\_calls</code> 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 <code>template</code> parameter has been deprecated and will be removed in a release after 2026\-05\-01\. The <code>template\_body</code> 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 <code>policies</code> return key has been assigned to release 9\.0\.0\. Use the <code>policy\_names</code> 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 <code>/</code> \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1998](https\://github\.com/ansible\-collections/amazon\.aws/pull/1998)\)\.
+* module\_utils\.botocore \- the <code>boto3</code> parameter for <code>get\_aws\_connection\_info\(\)</code> will be removed in a release after 2025\-05\-01\. The <code>boto3</code> 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 <code>boto3</code> parameter for <code>get\_aws\_region\(\)</code> will be removed in a release after 2025\-05\-01\. The <code>boto3</code> 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 <code>boto3</code> parameter for <code>get\_ec2\_security\_group\_ids\_from\_names\(\)</code> will be removed in a release after 2025\-05\-01\. The <code>boto3</code> 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 <code>rds\_param\_group</code> module has been renamed to <code>rds\_instance\_param\_group</code>\. 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)\)\.
+
+<a id="community-aws-2"></a>
+#### community\.aws
+
+* aws\_glue\_connection \- updated the deprecation for removal of the <code>connection\_parameters</code> return key from <code>after 2024\-06\-01</code> to release version <code>9\.0\.0</code>\, it is being replaced by the <code>raw\_connection\_parameters</code> 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 <code>purge\_capacity\_providers</code>\, the current default of <code>False</code> will be changed to <code>True</code> in release <code>9\.0\.0</code>\. To maintain the current behaviour explicitly set <code>purge\_capacity\_providers\=False</code> \([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 <code>purge\_placement\_constraints</code>\, the current default of <code>False</code> will be changed to <code>True</code> in release <code>9\.0\.0</code>\. To maintain the current behaviour explicitly set <code>purge\_placement\_constraints\=False</code> \([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 <code>purge\_placement\_strategy</code>\, the current default of <code>False</code> will be changed to <code>True</code> in release <code>9\.0\.0</code>\. To maintain the current behaviour explicitly set <code>purge\_placement\_strategy\=False</code> \([https\://github\.com/ansible\-collections/community\.aws/pull/1716](https\://github\.com/ansible\-collections/community\.aws/pull/1716)\)\.
+
+<a id="community-crypto-1"></a>
+#### community\.crypto
+
+* acme documentation fragment \- the default <code>community\.crypto\.acme\[\.documentation\]</code> docs fragment is deprecated and will be removed from community\.crypto 3\.0\.0\. Replace it with both the new <code>community\.crypto\.acme\.basic</code> and <code>community\.crypto\.acme\.account</code> 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 <code>CryptoBackend</code> must override <code>get\_ordered\_csr\_identifiers\(\)</code>\. The current default implementation\, which simply sorts the result of <code>get\_csr\_identifiers\(\)</code>\, 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 <code>get\_cert\_information\(\)</code> 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 <code>crypto\.module\_backends\.common</code> module utils is deprecated and will be removed from community\.crypto 3\.0\.0\. Use the improved <code>argspec</code> 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 <code>\_pipe</code>\: if the object needs to be \(re\-\)generated\, only the <code>changed</code> 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 <code>check\_mode\: false</code> 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)\)\.
+
+<a id="community-dns-3"></a>
+#### community\.dns
+
+* hetzner\_dns\_records and hosttech\_dns\_records inventory plugins \- the <code>filters</code> option has been renamed to <code>simple\_filters</code>\. 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)\)\.
+
+<a id="community-docker-2"></a>
+#### 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 <code>community\.docker\.docker\_compose\_v2</code> 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 <code>ignore</code> for the <code>image\_name\_mismatch</code> parameter has been deprecated and will switch to <code>recreate</code> 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 <code>ssl\_version</code> 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)\)\.
+
+<a id="community-general-2"></a>
+#### community\.general
+
+* MH DependencyCtxMgr module\_utils \- deprecate <code>module\_utils\.mh\.mixin\.deps\.DependencyCtxMgr</code> in favour of <code>module\_utils\.deps</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8280](https\://github\.com/ansible\-collections/community\.general/pull/8280)\)\.
+* ModuleHelper module\_utils \- deprecate <code>plugins\.module\_utils\.module\_helper\.AnsibleModule</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8280](https\://github\.com/ansible\-collections/community\.general/pull/8280)\)\.
+* ModuleHelper module\_utils \- deprecate <code>plugins\.module\_utils\.module\_helper\.DependencyCtxMgr</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8280](https\://github\.com/ansible\-collections/community\.general/pull/8280)\)\.
+* ModuleHelper module\_utils \- deprecate <code>plugins\.module\_utils\.module\_helper\.StateMixin</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8280](https\://github\.com/ansible\-collections/community\.general/pull/8280)\)\.
+* ModuleHelper module\_utils \- deprecate <code>plugins\.module\_utils\.module\_helper\.VarDict\,</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8280](https\://github\.com/ansible\-collections/community\.general/pull/8280)\)\.
+* ModuleHelper module\_utils \- deprecate <code>plugins\.module\_utils\.module\_helper\.VarMeta</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8280](https\://github\.com/ansible\-collections/community\.general/pull/8280)\)\.
+* ModuleHelper module\_utils \- deprecate <code>plugins\.module\_utils\.module\_helper\.VarsMixin</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8280](https\://github\.com/ansible\-collections/community\.general/pull/8280)\)\.
+* ModuleHelper module\_utils \- deprecate use of <code>VarsMixin</code> in favor of using the <code>VardDict</code> 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 <code>VarMeta</code>\, <code>VarDict</code> and <code>VarsMixin</code> 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 <code>state\=present</code> and <code>state\=installed</code> 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 <code>state\=latest</code> if you want this behavior\, and switch to <code>state\=present\_not\_latest</code> if you do not want to upgrade the package if it is already installed\. In community\.general 11\.0\.0 the behavior of <code>state\=present</code> and <code>state\=installed</code> will change to that of <code>state\=present\_not\_latest</code> \([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\. <code>consul\_token</code> and <code>consul\_policy</code> 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 <code>ack\_venv\_creation\_deprecation</code> 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 <code>false</code> for <code>use\_tls</code> and <code>validate\_certs</code> have been deprecated and will change to <code>true</code> in community\.general 10\.0\.0 to improve security\. You can already improve security now by explicitly setting them to <code>true</code>\. 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)\)\.
+
+<a id="community-hrobot-3"></a>
+#### community\.hrobot
+
+* robot inventory plugin \- the <code>filters</code> option has been renamed to <code>simple\_filters</code>\. 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)\)\.
+
+<a id="community-okd-1"></a>
+#### community\.okd
+
+* openshift \- the <code>openshift</code> 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)\)\.
+
+<a id="community-vmware-1"></a>
+#### community\.vmware
+
+* vmware\_guest\_tools\_info \- <em class="title-reference">vm\_tools\_install\_status</em> 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 <em class="title-reference">vm\_tools\_running\_status</em> / <em class="title-reference">vm\_tools\_version\_status</em> instead \([https\://github\.com/ansible\-collections/community\.vmware/issues/2033](https\://github\.com/ansible\-collections/community\.vmware/issues/2033)\)\.
+
+<a id="dellemc-openmanage-2"></a>
+#### dellemc\.openmanage
+
+* The <code>dellemc\_idrac\_storage\_volume</code> module is deprecated and replaced with <code>idrac\_storage\_volume</code>\.
+
+<a id="kubernetes-core-2"></a>
+#### kubernetes\.core
+
+* k8s \- the <code>k8s</code> 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)\)\.
+
+<a id="removed-features-previously-deprecated"></a>
+### Removed Features \(previously deprecated\)
+
+* The <code>gluster\.gluster</code> 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 <code>ansible\-galaxy collection install gluster\.gluster</code>\.
+* The <code>hpe\.nimble</code> 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 <code>ansible\-galaxy collection install hpe\.nimble</code>\.
+* The <code>netapp\.aws</code> 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 <code>ansible\-galaxy collection install netapp\.aws</code>\.
+* The <code>netapp\.azure</code> 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 <code>ansible\-galaxy collection install netapp\.azure</code>\.
+* The <code>netapp\.elementsw</code> 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 <code>ansible\-galaxy collection install netapp\.elementsw</code>\.
+* The <code>netapp\.um\_info</code> 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 <code>ansible\-galaxy collection install netapp\.um\_info</code>\.
+* The deprecated <code>community\.azure</code> collection has been removed\. There is a successor collection <code>azure\.azcollection</code> in the community package which should cover the same functionality\.
+* The deprecated <code>community\.sap</code> 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 <code>community\.sap\_libs</code> in the community package which should cover the same functionality\.
+* The deprecated <code>purestorage\.fusion</code> collection has been removed \([https\://forum\.ansible\.com/t/3712](https\://forum\.ansible\.com/t/3712)\)\.
+
+<a id="ansible-core-5"></a>
+#### 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 <code>scp\_if\_ssh</code> 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 <code>dnf</code>\.
+
+<a id="amazon-aws-3"></a>
+#### amazon\.aws
+
+* iam\_role \- the <code>iam\_role\.assume\_role\_policy\_document\_raw</code> return value has been deprecated\. <code>iam\_role\.assume\_role\_policy\_document</code> now returns the same format as <code>iam\_role\.assume\_role\_policy\_document\_raw</code> \([https\://github\.com/ansible\-collections/amazon\.aws/pull/2040](https\://github\.com/ansible\-collections/amazon\.aws/pull/2040)\)\.
+* iam\_role\_info \- the <code>iam\_role\.assume\_role\_policy\_document\_raw</code> return value has been deprecated\. <code>iam\_role\.assume\_role\_policy\_document</code> now returns the same format as <code>iam\_role\.assume\_role\_policy\_document\_raw</code> \([https\://github\.com/ansible\-collections/amazon\.aws/pull/2040](https\://github\.com/ansible\-collections/amazon\.aws/pull/2040)\)\.
+* module\_utils\.policy \- the previously deprecated <code>sort\_json\_policy\_dict\(\)</code> function has been removed\, consider using <code>compare\_policies\(\)</code> instead \([https\://github\.com/ansible\-collections/amazon\.aws/pull/2052](https\://github\.com/ansible\-collections/amazon\.aws/pull/2052)\)\.
+
+<a id="arista-eos-2"></a>
+#### 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\.
+
+<a id="cisco-ios-2"></a>
+#### 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\.
+
+<a id="cisco-iosxr-2"></a>
+#### cisco\.iosxr
+
+* Remove deprecated iosxr\_logging module which is replaced with iosxr\_logging\_global resource module\.
+
+<a id="cisco-nxos-2"></a>
+#### 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\.
+
+<a id="community-dns-4"></a>
+#### 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 <code>name</code> 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 <code>hosttech\_dns\_record\_sets</code> module has been removed \([https\://github\.com/ansible\-collections/community\.dns/pull/196](https\://github\.com/ansible\-collections/community\.dns/pull/196)\)\.
+
+<a id="community-general-3"></a>
+#### community\.general
+
+* The deprecated redirects for internal module names have been removed\. These internal redirects were extra\-long FQCNs like <code>community\.general\.packaging\.os\.apt\_rpm</code> that redirect to the short FQCN <code>community\.general\.apt\_rpm</code>\. 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 <code>ack\_ansible29</code> and <code>ack\_min\_ansiblecore211</code> 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 <code>command</code> values <code>cleanup</code>\, <code>syncdb</code>\, and <code>validate</code> were removed\. Use <code>clearsessions</code>\, <code>migrate</code>\, and <code>check</code> 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 <code>DependencyMixin</code> has been removed\. Use the <code>deps</code> module utils instead \([https\://github\.com/ansible\-collections/community\.general/pull/8198](https\://github\.com/ansible\-collections/community\.general/pull/8198)\)\.
+* proxmox \- the <code>proxmox\_default\_behavior</code> 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 <code>pyrax</code> 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 <code>Rhsm</code>\, <code>RhsmPool</code>\, and <code>RhsmPools</code> 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 <code>autosubscribe</code> of the <code>auto\_attach</code> 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)\)\.
+
+<a id="community-grafana-1"></a>
+#### community\.grafana
+
+* removed deprecated <em class="title-reference">message</em> argument in <em class="title-reference">grafana\_dashboard</em>
+
+<a id="community-hrobot-4"></a>
+#### 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)\)\.
+
+<a id="junipernetworks-junos-2"></a>
+#### junipernetworks\.junos
+
+* Remove deprected junos\_logging module which is replaced by junos\_logging\_global resource module\.
+
+<a id="security-fixes"></a>
+### Security Fixes
+
+<a id="ansible-core-6"></a>
+#### 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\)
+
+<a id="community-dns-5"></a>
+#### 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)\)\.
+
+<a id="community-docker-3"></a>
+#### 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)\)\.
+
+<a id="community-general-4"></a>
+#### 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 <code>proposed</code>\, <code>existing</code>\, and <code>end\_state</code>\, 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)\)\.
+
+<a id="community-hrobot-5"></a>
+#### 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)\)\.
+
+<a id="bugfixes"></a>
+### Bugfixes
+
+<a id="ansible-core-7"></a>
+#### 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 <code>force\_handlers</code> not working with <code>any\_errors\_fatal</code> \([https\://github\.com/ansible/ansible/issues/36308](https\://github\.com/ansible/ansible/issues/36308)\)
+* Fix <code>run\_once</code> 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 <code>ValueError\: unmarshallable object</code> \([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 <code>any\_errors\_fatal</code> 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 <code>include\_tasks</code> handler in a role was not able to locate a file in <code>tasks/</code> when <code>tasks\_from</code> was used as a role entry point and <code>main\.yml</code> 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 <code>force\_handlers</code> 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 <code>any\_errors\_fatal</code> \([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 <code>include</code> 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 <code>Amzn</code> to <code>OS\_FAMILY\_MAP</code> 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 <code>platforms</code> 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 <code>listen</code> 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 <code>async</code> mode support in the <code>reboot</code> module \([https\://github\.com/ansible/ansible/issues/71517](https\://github\.com/ansible/ansible/issues/71517)\)\.
+* <code>ansible\-galaxy role import</code> \- fix using the <code>role\_name</code> in a standalone role\'s <code>galaxy\_info</code> metadata by disabling automatic removal of the <code>ansible\-role\-</code> prefix\. This matches the behavior of the Galaxy UI which also no longer implicitly removes the <code>ansible\-role\-</code> prefix\. Use the <code>\-\-role\-name</code> option or add a <code>role\_name</code> to the <code>galaxy\_info</code> dictionary in the role\'s <code>meta/main\.yml</code> to use an alternate role name\.
+* <code>ansible\-test sanity \-\-test runtime\-metadata</code> \- add <code>action\_plugin</code> as a valid field for modules in the schema \([https\://github\.com/ansible/ansible/pull/82562](https\://github\.com/ansible/ansible/pull/82562)\)\.
+* <code>ansible\.module\_utils\.service</code> \- ensure binary data transmission in <code>daemonize\(\)</code>
+* <code>any\_errors\_fatal</code> should fail all hosts and rescue all of them when a <code>rescue</code> section is specified \([https\://github\.com/ansible/ansible/issues/80981](https\://github\.com/ansible/ansible/issues/80981)\)
+* <code>include\_role</code> \- properly execute <code>v2\_playbook\_on\_include</code> and <code>v2\_runner\_on\_failed</code> callbacks as well as increase <code>ok</code> and <code>failed</code> 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 <code>None</code> \([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 <code>ansible\.utils\.path\.unfrackpath</code> 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 <code>\-d\|\-\-directory</code> 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 <code>pylint</code> plugin to work around a known issue on Python 3\.12\.
+* ansible\-test \- Explicitly supply <code>ControlPath\=none</code> when setting up port forwarding over SSH to address the scenario where the local ssh configuration uses <code>ControlPath</code> 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 <code>\:</code> in the path \([https\://github\.com/ansible/ansible/issues/81977](https\://github\.com/ansible/ansible/issues/81977)\)\.
+* ansible\-test \- Include missing <code>pylint</code> requirements for Python 3\.10\.
+* ansible\-test \- Properly detect docker host when using <code>ssh\://</code> protocol for connecting to the docker daemon\.
+* ansible\-test \- The <code>libexpat</code> package is automatically upgraded during remote bootstrapping to maintain compatibility with newer Python packages\.
+* ansible\-test \- The <code>validate\-modules</code> 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 <code>pylint</code> to version 3\.0\.1\.
+* ansible\-test ansible\-doc sanity test \- do not remove underscores from plugin names in collections before calling <code>ansible\-doc</code> \([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 <code>coverage</code> 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 <code>force</code> parameter and always requesting a cached copy \(via the <code>If\-Modified\-Since</code> header\) when downloading to an existing local file\. Disable caching when <code>force</code> is <code>true</code>\, 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 <code>\-\-check</code> when <code>check\_mode\: False</code> was set as a task attribute \- [https\://github\.com/ansible/ansible/issues/82811](https\://github\.com/ansible/ansible/issues/82811)
+* blockinfile \- when <code>create\=true</code> 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 <code>validate</code> 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 <code>disable\_gpg\_check</code> option \([https\://github\.com/ansible/ansible/issues/80110](https\://github\.com/ansible/ansible/issues/80110)\)
+* dnf \- properly skip unavailable packages when <code>skip\_broken</code> is enabled \([https\://github\.com/ansible/ansible/issues/80590](https\://github\.com/ansible/ansible/issues/80590)\)
+* dnf \- the <code>nobest</code> 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 <code>allow\_downgrade</code> when installing packages directly from rpm files
+* dnf5 \- the <code>nobest</code> 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 <code>dest</code> 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 <code>force\_handlers</code> 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 <em class="title-reference">ansible\_loop\_var</em> and <em class="title-reference">ansible\_index\_var</em> in a loop \([https\://github\.com/ansible/ansible/issues/82655](https\://github\.com/ansible/ansible/issues/82655)\)\.
+* include\_vars \- fix calculating <code>depth</code> 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 <em class="title-reference">\@cert\-authority</em> entries in known\_hosts incorrectly being removed\.
+* module no\_log will no longer affect top level booleans\, for example <code>no\_log\_module\_parameter\=\'a\'</code> will no longer hide <code>changed\=False</code> 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 <code>public</code> setting is now determined once\, at role instantiation\.
+* roles\, the <code>static</code> property is now correctly set\, this will fix issues with <code>public</code> and <code>DEFAULT\_PRIVATE\_ROLE\_VARS</code> 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 <code>AnsibleUnsafeBytes</code>
+* unsafe data \- Address an incompatibility with <code>AnsibleUnsafeText</code> and <code>AnsibleUnsafeBytes</code> when pickling with <code>protocol\=0</code>
+* unsafe data \- Enable directly using <code>AnsibleUnsafeText</code> with Python <code>pathlib</code> \([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
+
+<a id="amazon-aws-4"></a>
+#### 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 <code>proxy\_protocol</code> not being set or being set to <code>None</code> 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 <code>ParamValidationError</code> 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 <code>/</code> 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 <code>batch\_size</code> is greater than 10\, by enabling support for setting <code>maximum\_batching\_window\_in\_seconds</code> \([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 <code>ClientSecret</code> parameter and <code>UseExistingClientSecret\=true</code> \([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 <code>overwrite\=latest</code> \([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 <code>Content\-Type</code> in metadata\, this module \(since 6\.0\.0\) erroneously set the <code>Content\-Type</code> to <code>None</code> causing the put to fail\. Fix now correctly honours the specified <code>Content\-Type</code> \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1881](https\://github\.com/ansible\-collections/amazon\.aws/issues/1881)\)\.
+
+<a id="ansible-netcommon-2"></a>
+#### 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 <code>PlayContext\.verbosity</code> 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\.
+
+<a id="ansible-utils-2"></a>
+#### ansible\.utils
+
+* Avoid unnecessary use of persistent connection in <em class="title-reference">cli\_parse</em>\, <em class="title-reference">fact\_diff</em>\, <em class="title-reference">update\_fact</em> and <em class="title-reference">validate</em> as this action does not require a connection\.
+
+<a id="ansible-windows-1"></a>
+#### ansible\.windows
+
+* Process\.cs \- Fix up the <code>ProcessCreationFlags\.CreateProtectedProcess</code> typo in the enum name
+* setup \- Fix up typo <code>collection \-\> collect</code> 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)
+
+<a id="arista-eos-3"></a>
+#### 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\.
+
+<a id="check-point-mgmt-1"></a>
+#### check\_point\.mgmt
+
+* httpapi/checkpoint\.py \- Raise a fatal error if login wasn\'t successful\.
+
+<a id="cisco-aci-1"></a>
+#### 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
+
+<a id="cisco-asa-1"></a>
+#### cisco\.asa
+
+* Prevents module\_defaults from were being incorrectly applied to the platform action\, instead of the concerned module\.
+
+<a id="cisco-ios-3"></a>
+#### 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
+
+<a id="cisco-iosxr-3"></a>
+#### 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)\)
+
+<a id="cisco-ise-1"></a>
+#### 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 <em class="title-reference">\"\>\=2\.0\.0\,\<5\.0\"</em> 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\.
+
+<a id="cisco-meraki-1"></a>
+#### cisco\.meraki
+
+* Adding <em class="title-reference">network\_clients\_info</em> and <em class="title-reference">network\_client\_info</em>\.
+* Adding <em class="title-reference">platform\_meraki\.rst</em> to docs\.
+* Adding <em class="title-reference">product\_types</em> for update request on networks\.
+* Adding <em class="title-reference">smartquotes \= False</em> to <em class="title-reference">conf\.py</em> and romoving <em class="title-reference">\'</em> 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 <em class="title-reference">organizationId</em> organizations\_claim\.
+* Parameter\`organization\_id\` change to <em class="title-reference">organizationId</em> organizations\_clone\.
+* Parameter\`organization\_id\` change to <em class="title-reference">organizationId</em> organizations\_inventory\_claim\.
+* Parameter\`organization\_id\` change to <em class="title-reference">organizationId</em> organizations\_inventory\_onboarding\_cloud\_monitoring\_export\_events\.
+* Parameter\`organization\_id\` change to <em class="title-reference">organizationId</em> organizations\_inventory\_onboarding\_cloud\_monitoring\_prepare\.
+* Parameter\`organization\_id\` change to <em class="title-reference">organizationId</em> organizations\_inventory\_release\.
+* Parameter\`organization\_id\` change to <em class="title-reference">organizationId</em> organizations\_licenses\_assign\_seats\.
+* Parameter\`organization\_id\` change to <em class="title-reference">organizationId</em> organizations\_licenses\_move\.
+* Parameter\`organization\_id\` change to <em class="title-reference">organizationId</em> organizations\_licenses\_move\_seats\.
+* Parameter\`organization\_id\` change to <em class="title-reference">organizationId</em> organizations\_licenses\_renew\_seats\.
+* Parameter\`organization\_id\` change to <em class="title-reference">organizationId</em> organizations\_licensing\_coterm\_licenses\_move\.
+* Parameter\`organization\_id\` change to <em class="title-reference">organizationId</em> organizations\_networks\_combine\.
+* Parameter\`organization\_id\` change to <em class="title-reference">organizationId</em> organizations\_switch\_devices\_clone\.
+* Parameter\`organization\_id\` change to <em class="title-reference">organizationId</em> organizations\_users\.
+* Removing logs in meraki\.py\.
+* networks\_syslog\_servers is now just an Update action to API\.
+
+<a id="cisco-mso-1"></a>
+#### 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
+
+<a id="cisco-nxos-3"></a>
+#### 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)\)\.
+
+<a id="community-aws-3"></a>
+#### community\.aws
+
+* aws\_ssm \- disable <code>enable\-bracketed\-paste</code> 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 <code>tags</code> 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 <code>us\-east\-1</code> \([https\://github\.com/ansible\-collections/community\.aws/pull/1908](https\://github\.com/ansible\-collections/community\.aws/pull/1908)\)\.
+
+<a id="community-ciscosmb-2"></a>
+#### community\.ciscosmb
+
+* issue
+* solved issue
+* typo in changelog fragment template
+* typo in test script
+
+<a id="community-crypto-2"></a>
+#### 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 <code>quick\_is\_not\_prime\(\)</code> and <code>convert\_int\_to\_bytes\(0\, 0\)</code> 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 <code>csr</code> 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 <code>remove\_keyslot</code> with the value <code>0</code> \([https\://github\.com/ansible\-collections/community\.crypto/pull/710](https\://github\.com/ansible\-collections/community\.crypto/pull/710)\)\.
+* luks\_device \- fixed module falsely outputting <code>changed\=false</code> 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 <code>cryptography</code> 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 \- <code>check\_consistency\=true</code> 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 \- <code>check\_consistency\=true</code> 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 <code>not\_before</code> and <code>not\_after</code> 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)\)\.
+
+<a id="community-digitalocean-1"></a>
+#### 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)\)\.
+
+<a id="community-dns-6"></a>
+#### 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 <code>\{</code> or <code>\}</code> 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 <code>NXDOMAIN</code> as a fatal error \([https\://github\.com/ansible\-collections/community\.dns/pull/177](https\://github\.com/ansible\-collections/community\.dns/pull/177)\)\.
+
+<a id="community-docker-4"></a>
+#### community\.docker
+
+* Use <code>unix\:///var/run/docker\.sock</code> instead of the legacy <code>unix\://var/run/docker\.sock</code> as default for <code>docker\_host</code> \([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 <code>ansible\.module\_utils\.compat\.selectors</code> 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 <code>Waiting</code> 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 <code>docker compose up</code> 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 <code>changed\=true</code> return value of <code>pull\=always</code> \([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 <code>stderr</code> \([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 <code>project\_src</code> 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 <code>dev</code> \([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 <code>Warning</code> 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 <code>logfmt</code> 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 <code>policy\=always</code>\. This stops the module from reporting <code>changed\=true</code> 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 <code>community\.docker\.docker</code> 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 <code>\{</code> or <code>\}</code> 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 <code>ssl\_version</code> 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 <code>tls\_hostname</code> 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 <code>ssl\_version</code> and <code>tls\_hostname</code> 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)\)\.
+
+<a id="community-general-5"></a>
+#### community\.general
+
+* aix\_filesystem \- fix <code>\_validate\_vg</code> not passing VG name to <code>lsvg\_cmd</code> \([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 <code>apt\-get \-y install \<packages\></code>\, 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 <code>\-\-path</code> parameter\)\. The initial installation runs fine\, but subsequent runs use the <code>get\_installed\(\)</code> function which did not check the given installation location\, before running <code>cargo install</code>\. This resulted in a false <code>changed</code> state\. Also the removal of packeges using <code>state\: absent</code> 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 <code>accessor\_id</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8091](https\://github\.com/ansible\-collections/community\.general/pull/8091)\)\.
+* cpanm \- use new <code>VarDict</code> 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 <code>VarDict</code> 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 <code>ConfigParser</code> to allow converting values with a <code>\%</code> 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 <code>VarDict</code> 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 <code>gitlab\_group\_members</code> 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 <code>search</code> keyword instead of <code>title</code> \([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 <code>gitlab\_project\_members</code> 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 <code>gitlab\_protected\_branches</code> 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 <code>gitlab\_user</code> 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 <code>brew info</code> \([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 <code>VarDict</code> 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 <code>inventory\_hostname</code> 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 <code>address\_family</code> when changing <code>option\=method</code> \([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 <code>\{</code> or <code>\}</code> 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 <code>ipaenabledflag</code> 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 <code>ipatokendisabled</code> as string but the <code>ipatokendisabled</code> 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 <code>ipaenabledflag</code> 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 <code>ssl\.wrap\_socket</code> 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 <code>VarDict</code> 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 <code>/</code> 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 <code>defaultClientScopes</code> and <code>optionalClientScopes</code> 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 <code>saml\.signing\.private\.key</code> attribute in the module\'s diff or state output\. The <code>sanitize\_cr</code> 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 \- <code>mappers</code> 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\) <code>mappers</code> 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 <code>enabledEventTypes</code> and <code>supportedLocales</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8224](https\://github\.com/ansible\-collections/community\.general/pull/8224)\)\.
+* keycloak\_user \- when <code>force</code> 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 <code>krbPrincipalAttribute</code> \([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 <code>VarDict</code> 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 <code>ssl\.wrap\_socket</code> 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 <code>stdout</code> and <code>stderr</code> \([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 <code>VarDict</code> 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 <code>/etc/modprobe\.d</code> or <code>/etc/modules\-load\.d</code> 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 <code>connection\.slave\-type</code> wired to <code>bond</code> and not with parameter <code>slave\_type</code> in case of connection type <code>wifi</code> \([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 <code>type\(\)</code> calls with <code>isinstance\(\)</code> 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 <code>disable\_logs</code> 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 <code>pip\_args</code> 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 <code>VarDict</code> 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 <code>changed\=true</code> \([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 <code>state\=template</code> 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 <code>environment\_lang</code> to set the environment language encoding\. Defaults to lang <code>C</code>\. It is recommended to set it to <code>C\.UTF\-8</code> or <code>en\_US\.UTF\-8</code> 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 <code>SimpleUpdate</code> and <code>MultipartHTTPPushUpdate</code> commands to treat the lack of a <code>MessageId</code> 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 <code>GetUpdateStatus</code> 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 <code>Chassis</code> 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 <code>riak admin</code> sub\-command in newer Riak KV versions beside the legacy <code>riak\-admin</code> main command \([https\://github\.com/ansible\-collections/community\.general/pull/8211](https\://github\.com/ansible\-collections/community\.general/pull/8211)\)\.
+* snap \- use new <code>VarDict</code> 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 <code>VarDict</code> 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 <code>ConfigParser</code> to allow converting values with a <code>\%</code> 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)\)\.
+
+<a id="community-grafana-2"></a>
+#### community\.grafana
+
+* Add <em class="title-reference">grafana\_organiazion\_user</em> to <em class="title-reference">action\_groups\.grafana</em>
+* Fixed orgId handling in diff comparison for <em class="title-reference">grafana\_datasource</em> if using org\_name
+* Handling of desired default state for first <em class="title-reference">grafana\_datasource</em>
+* Ignore <em class="title-reference">type</em> argument for diff comparison if <em class="title-reference">grafana\-postgresq\-datasource</em> alias <em class="title-reference">postgres</em> is used
+* Set umask for <em class="title-reference">grafana\_plugin</em> command
+* test\: replace deprecated <em class="title-reference">TestCase\.assertEquals</em> to support Python 3\.12
+* undo removed deprecated <em class="title-reference">message</em> argument in <em class="title-reference">grafana\_dashboard</em>
+
+<a id="community-hrobot-6"></a>
+#### community\.hrobot
+
+* inventory plugins \- add unsafe wrapper to avoid marking strings that do not contain <code>\{</code> or <code>\}</code> 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)\)\.
+
+<a id="community-mysql-2"></a>
+#### community\.mysql
+
+* mysql\_info \- the <code>slave\_status</code> filter was returning an empty list on MariaDB with multiple replication channels\. It now returns all channels by running <code>SHOW ALL SLAVES STATUS</code> for MariaDB servers \([https\://github\.com/ansible\-collections/community\.mysql/issues/603](https\://github\.com/ansible\-collections/community\.mysql/issues/603)\)\.
+
+<a id="community-postgresql-1"></a>
+#### community\.postgresql
+
+* postgresql\_db \- <code>restore</code> custom format as file instead of stdin to allow the use of \-\-job flag in <code>target\_opts</code> \([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 <code>grant\_option\: true</code> \([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)\)\.
+
+<a id="community-routeros-1"></a>
+#### 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)\)\.
+
+<a id="community-sap-libs"></a>
+#### community\.sap\_libs
+
+* fixes failures in sanity test for all modules
+
+<a id="community-vmware-2"></a>
+#### 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 <code>validate\_certs</code> to <code>False</code> \([https\://github\.com/ansible\-collections/community\.vmware/pull/1969](https\://github\.com/ansible\-collections/community\.vmware/pull/1969)\)\.
+* Use <em class="title-reference">isinstance\(\)</em> instead of <em class="title-reference">type\(\)</em> 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 <em class="title-reference">port\_binding</em> is static and <em class="title-reference">num\_ports</em> 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)\)\.
+
+<a id="community-windows-1"></a>
+#### 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 <code>state\=latest</code>
+* win\_rabbitmq\_plugin \- Avoid using <code>Invoke\-Expression</code> 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 <code>cmd</code> return value to include the executable <code>robocopy</code>
+
+<a id="community-zabbix-1"></a>
+#### 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\.
+
+<a id="containers-podman-2"></a>
+#### 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
+
+<a id="dellemc-enterprise-sonic-1"></a>
+#### 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)\)\.
+
+<a id="dellemc-openmanage-3"></a>
+#### 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 <em class="title-reference">NO\_PROXY</em> 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 <em class="title-reference">email\_address</em> 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 <code>ome\_network\_attributes</code>\, 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 <code>power\_cap</code> is not within the supported range of 0 to 32767\, <code>Unable to complete the request because PowerCap does not exist or is not applicable for the resource URI\.</code>
+* 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)\)
+
+<a id="f5networks-f5-modules-1"></a>
+#### 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\.
+
+<a id="fortinet-fortimanager-1"></a>
+#### 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\.
+
+<a id="fortinet-fortios-1"></a>
+#### fortinet\.fortios
+
+* Fix the issue that ssl\-certificate cannot be set in <em class="title-reference">fortios\_firewall\_vip</em> and <em class="title-reference">fortios\_firewall\_vip6</em>\.
+* Github issue
+* mantis issue
+
+<a id="hetzner-hcloud-2"></a>
+#### hetzner\.hcloud
+
+* hcloud inventory \- Ensure the API client use a new cache for every <em>cached session</em>\.
+* inventory \- Ensure inventory host variables are serializable and can be cached\.
+* load\_balancer\_info \- Correctly return the <em class="title-reference">cookie\_lifetime</em> value\.
+* load\_balancer\_service \- Correctly return the <em class="title-reference">cookie\_lifetime</em> value\.
+* primary\_ip \- Added the missing <em class="title-reference">auto\_delete</em> field to the return values\.
+* primary\_ip \- The <em class="title-reference">auto\_delete</em> option is now used when creating or updating a Primary IP\.
+* primary\_ip\_info \- Added the missing <em class="title-reference">auto\_delete</em> field to the return values\.
+* server \- Do not remove the server from its placement group when the <em class="title-reference">placement\_group</em> argument is not specified\.
+* server \- Pass an empty string to the <em class="title-reference">placement\_group</em> argument to remove a server from its placement group\.
+* server\_network \- The returned <em class="title-reference">alias\_ips</em> list is now sorted\.
+
+<a id="ibm-qradar-1"></a>
+#### ibm\.qradar
+
+* A bunch of ansible\-lint and ansible\-test sanity issues have been fixed\.
+
+<a id="ibm-storage-virtualize-1"></a>
+#### 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
+
+<a id="infoblox-nios-modules-1"></a>
+#### 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)
+
+<a id="junipernetworks-junos-3"></a>
+#### 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
+
+<a id="kubernetes-core-3"></a>
+#### 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 <em class="title-reference">helmdiff\_check\(\)</em> function commandline rendering with the <em class="title-reference">deploy\(\)</em> 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 <code>helm show chart</code>\, <code>helm upgrade</code> and <code>helm dependency update</code> 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 <code>release\_values</code> 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 <code>deployed</code> \([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 <code>reuse\-values</code> when running <code>helm diff</code> 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 <code>changed</code> 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 <code>updateStrategy\=OnDelete</code> \([https\://github\.com/ansible\-collections/kubernetes\.core/issues/579](https\://github\.com/ansible\-collections/kubernetes\.core/issues/579)\)\.
+
+<a id="lowlydba-sqlserver-1"></a>
+#### 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)\)
+
+<a id="microsoft-ad-1"></a>
+#### 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 <code>domain\_ou\_path</code> \- [https\://github\.com/ansible\-collections/microsoft\.ad/issues/88](https\://github\.com/ansible\-collections/microsoft\.ad/issues/88)
+
+<a id="netapp-ontap-1"></a>
+#### netapp\.ontap
+
+* na\_ontap\_dns \- fix issue with modifying DNS servers in REST\.
+* na\_ontap\_ems\_destination \- fix field error with <em class="title-reference">certificate\.name</em> 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 <em class="title-reference">windows</em> 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 <em class="title-reference">supported\_cipher\_suites</em> to maintain idempotency in REST\.
+* na\_ontap\_snapshot\_policy \- fix issue with modifying snapshot policy in REST\.
+* na\_ontap\_volume \- modified <em class="title-reference">type</em> to be case insensitive in REST\.
+* na\_ontap\_vserver\_peer \- fix issue with peering multiple clusters with same vserver name in REST\.
+
+<a id="netapp-storagegrid-1"></a>
+#### netapp\.storagegrid
+
+* Removed fetch limit in API request and implemented pagination\.
+
+<a id="netbox-netbox-1"></a>
+#### 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)\)
+
+<a id="purestorage-flasharray-1"></a>
+#### 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 <em class="title-reference">target</em> is specified as well as other objects\, such as <em class="title-reference">volumes</em> or <em class="title-reference">hosts</em>
+* 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
+
+<a id="purestorage-flashblade-1"></a>
+#### 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\.
+
+<a id="splunk-es-1"></a>
+#### splunk\.es
+
+* Fixed argspec validation for plugins with empty task attributes when run with Ansible 2\.9\.
+
+<a id="telekom-mms-icinga-director-1"></a>
+#### 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)\)
+
+<a id="theforeman-foreman-2"></a>
+#### 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)\)
+
+<a id="vmware-vmware-rest-2"></a>
+#### 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)\)\.
+
+<a id="vultr-cloud-1"></a>
+#### 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 <code>name</code> 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)\)\.
+
+<a id="known-issues"></a>
+### Known Issues
+
+<a id="community-docker-5"></a>
+#### community\.docker
+
+* Please note that the fix for requests 2\.32\.0 included in community\.docker 3\.10\.1 only
+ fixes problems with the <em>vendored</em> 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
+ <code>Not supported URL scheme http\+docker</code>\, please restrict requests to <code>\<2\.32\.0</code>\.
+
+<a id="dellemc-openmanage-4"></a>
+#### 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 <code>ome\_network\_attributes</code>\, 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 <code>power\_cap</code> is not within the supported range of 0 to 32767\, <code>Unable to complete the request because PowerCap does not exist or is not applicable for the resource URI\.</code>
+* 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\.
+
+<a id="new-plugins"></a>
+### New Plugins
+
+<a id="become"></a>
+#### Become
+
+* community\.general\.run0 \- Systemd\'s run0\.
+
+<a id="callback"></a>
+#### Callback
+
+* community\.general\.default\_without\_diff \- The default ansible callback without diff output\.
+* community\.general\.timestamp \- Adds simple timestamp for each header\.
+
+<a id="connection"></a>
+#### Connection
+
+* community\.general\.incus \- Run tasks in Incus instances via the Incus CLI\.
+
+<a id="filter"></a>
+#### 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\.
+
+<a id="lookup"></a>
+#### Lookup
+
+* community\.general\.github\_app\_access\_token \- Obtain short\-lived Github App Access tokens\.
+* community\.general\.onepassword\_doc \- Fetch documents stored in 1Password\.
+
+<a id="test"></a>
+#### Test
+
+* community\.general\.fqdn\_valid \- Validates fully\-qualified domain names against RFC 1123\.
+
+<a id="new-modules"></a>
+### New Modules
+
+<a id="amazon-aws-5"></a>
+#### 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\.
+
+<a id="ansible-netcommon-3"></a>
+#### ansible\.netcommon
+
+* ansible\.netcommon\.cli\_restore \- Restore device configuration to network devices over network\_cli
+
+<a id="check-point-mgmt-2"></a>
+#### 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\.
+
+<a id="cisco-ios-4"></a>
+#### 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\.
+
+<a id="community-aws-4"></a>
+#### community\.aws
+
+* community\.aws\.dynamodb\_table\_info \- Returns information about a Dynamo DB table
+
+<a id="community-crypto-3"></a>
+#### 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
+
+<a id="community-digitalocean-2"></a>
+#### community\.digitalocean
+
+* community\.digitalocean\.digital\_ocean\_project\_resource\_info \- Gather information about DigitalOcean Project Resources
+
+<a id="community-docker-6"></a>
+#### 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
+
+<a id="community-general-6"></a>
+#### 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\.
+
+<a id="community-hashi-vault-2"></a>
+#### 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
+
+<a id="community-zabbix-2"></a>
+#### community\.zabbix
+
+* community\.zabbix\.zabbix\_correlation \- Create/update/delete Zabbix correlation
+
+<a id="containers-podman-3"></a>
+#### containers\.podman
+
+* containers\.podman\.podman\_secret\_info \- Secrets info module
+
+<a id="dellemc-enterprise-sonic-2"></a>
+#### 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
+
+<a id="dellemc-openmanage-5"></a>
+#### 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\.
+
+<a id="dellemc-powerflex-1"></a>
+#### dellemc\.powerflex
+
+* dellemc\.powerflex\.fault\_set \- Manage Fault Sets on Dell PowerFlex
+* dellemc\.powerflex\.resource\_group \- Manage resource group deployments on Dell PowerFlex
+
+<a id="fortinet-fortimanager-2"></a>
+#### 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\.
+
+<a id="hetzner-hcloud-3"></a>
+#### hetzner\.hcloud
+
+* hetzner\.hcloud\.firewall\_resource \- Manage Resources a Hetzner Cloud Firewall is applied to\.
+
+<a id="infoblox-nios-modules-2"></a>
+#### 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
+
+<a id="netapp-ontap-2"></a>
+#### 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\.
+
+<a id="netbox-netbox-2"></a>
+#### 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
+
+<a id="purestorage-flasharray-2"></a>
+#### purestorage\.flasharray
+
+* purestorage\.flasharray\.purefa\_hardware \- Manage FlashArray Hardware Identification
+
+<a id="purestorage-flashblade-2"></a>
+#### purestorage\.flashblade
+
+* purestorage\.flashblade\.purefb\_hardware \- Manage FlashBlade Hardware
+
+<a id="theforeman-foreman-3"></a>
+#### theforeman\.foreman
+
+* theforeman\.foreman\.registration\_command \- Manage Registration Command
+* theforeman\.foreman\.webhook \- Manage Webhooks
+
+<a id="vultr-cloud-2"></a>
+#### vultr\.cloud
+
+* vultr\.cloud\.object\_storage \- Manages object storages on Vultr
+
+<a id="new-roles"></a>
+### New Roles
+
+* dellemc\.openmanage\.idrac\_user \- Role to manage local users of iDRAC\.
+
+<a id="unchanged-collections"></a>
+### 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 <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).
+
+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://github.com/ansible-collections/overview/blob/main/removal_from_ansible.rst#cancelling-removal-of-an-unmaintained-collection>`__ (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).
+
+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/new/choose>`__ (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 <packages>``, 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 <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).
+- 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\.
-
-- <a href="#v9-5-1">v9\.5\.1</a>
- - <a href="#release-summary">Release Summary</a>
- - <a href="#ansible-core">Ansible\-core</a>
- - <a href="#changed-collections">Changed Collections</a>
- - <a href="#major-changes">Major Changes</a>
- - <a href="#minor-changes">Minor Changes</a>
- - <a href="#deprecated-features">Deprecated Features</a>
- - <a href="#bugfixes">Bugfixes</a>
- - <a href="#new-plugins">New Plugins</a>
- - <a href="#new-modules">New Modules</a>
- - <a href="#unchanged-collections">Unchanged Collections</a>
-- <a href="#v9-4-0">v9\.4\.0</a>
- - <a href="#release-summary-1">Release Summary</a>
- - <a href="#ansible-core-2">Ansible\-core</a>
- - <a href="#changed-collections-1">Changed Collections</a>
- - <a href="#minor-changes-1">Minor Changes</a>
- - <a href="#deprecated-features-1">Deprecated Features</a>
- - <a href="#security-fixes">Security Fixes</a>
- - <a href="#bugfixes-1">Bugfixes</a>
- - <a href="#new-plugins-1">New Plugins</a>
- - <a href="#new-modules-1">New Modules</a>
- - <a href="#unchanged-collections-1">Unchanged Collections</a>
-- <a href="#v9-3-0">v9\.3\.0</a>
- - <a href="#release-summary-2">Release Summary</a>
- - <a href="#ansible-core-5">Ansible\-core</a>
- - <a href="#changed-collections-2">Changed Collections</a>
- - <a href="#major-changes-1">Major Changes</a>
- - <a href="#minor-changes-2">Minor Changes</a>
- - <a href="#deprecated-features-2">Deprecated Features</a>
- - <a href="#bugfixes-2">Bugfixes</a>
- - <a href="#new-plugins-2">New Plugins</a>
- - <a href="#new-modules-2">New Modules</a>
- - <a href="#unchanged-collections-2">Unchanged Collections</a>
-- <a href="#v9-2-0">v9\.2\.0</a>
- - <a href="#release-summary-3">Release Summary</a>
- - <a href="#added-collections">Added Collections</a>
- - <a href="#ansible-core-7">Ansible\-core</a>
- - <a href="#changed-collections-3">Changed Collections</a>
- - <a href="#major-changes-2">Major Changes</a>
- - <a href="#minor-changes-3">Minor Changes</a>
- - <a href="#deprecated-features-3">Deprecated Features</a>
- - <a href="#security-fixes-1">Security Fixes</a>
- - <a href="#bugfixes-3">Bugfixes</a>
- - <a href="#known-issues">Known Issues</a>
- - <a href="#new-plugins-3">New Plugins</a>
- - <a href="#new-modules-3">New Modules</a>
- - <a href="#unchanged-collections-3">Unchanged Collections</a>
-- <a href="#v9-1-0">v9\.1\.0</a>
- - <a href="#release-summary-4">Release Summary</a>
- - <a href="#ansible-core-10">Ansible\-core</a>
- - <a href="#changed-collections-4">Changed Collections</a>
- - <a href="#minor-changes-4">Minor Changes</a>
- - <a href="#breaking-changes--porting-guide">Breaking Changes / Porting Guide</a>
- - <a href="#security-fixes-2">Security Fixes</a>
- - <a href="#bugfixes-4">Bugfixes</a>
- - <a href="#known-issues-1">Known Issues</a>
- - <a href="#new-plugins-4">New Plugins</a>
- - <a href="#new-modules-4">New Modules</a>
- - <a href="#unchanged-collections-4">Unchanged Collections</a>
-- <a href="#v9-0-1">v9\.0\.1</a>
- - <a href="#release-summary-5">Release Summary</a>
- - <a href="#ansible-core-14">Ansible\-core</a>
- - <a href="#bugfixes-5">Bugfixes</a>
- - <a href="#unchanged-collections-5">Unchanged Collections</a>
-- <a href="#v9-0-0">v9\.0\.0</a>
- - <a href="#release-summary-6">Release Summary</a>
- - <a href="#removed-collections">Removed Collections</a>
- - <a href="#added-collections-1">Added Collections</a>
- - <a href="#ansible-core-15">Ansible\-core</a>
- - <a href="#included-collections">Included Collections</a>
- - <a href="#major-changes-3">Major Changes</a>
- - <a href="#minor-changes-5">Minor Changes</a>
- - <a href="#breaking-changes--porting-guide-1">Breaking Changes / Porting Guide</a>
- - <a href="#deprecated-features-4">Deprecated Features</a>
- - <a href="#removed-features-previously-deprecated">Removed Features \(previously deprecated\)</a>
- - <a href="#security-fixes-3">Security Fixes</a>
- - <a href="#bugfixes-6">Bugfixes</a>
- - <a href="#known-issues-2">Known Issues</a>
- - <a href="#new-plugins-5">New Plugins</a>
- - <a href="#new-modules-5">New Modules</a>
- - <a href="#new-roles">New Roles</a>
- - <a href="#unchanged-collections-6">Unchanged Collections</a>
-
-<a id="v9-5-1"></a>
-## v9\.5\.1
-
-- <a href="#release-summary">Release Summary</a>
-- <a href="#ansible-core">Ansible\-core</a>
-- <a href="#changed-collections">Changed Collections</a>
-- <a href="#major-changes">Major Changes</a>
- - <a href="#containers-podman">containers\.podman</a>
- - <a href="#fortinet-fortios">fortinet\.fortios</a>
-- <a href="#minor-changes">Minor Changes</a>
- - <a href="#amazon-aws">amazon\.aws</a>
- - <a href="#cisco-aci">cisco\.aci</a>
- - <a href="#cisco-dnac">cisco\.dnac</a>
- - <a href="#cisco-meraki">cisco\.meraki</a>
- - <a href="#cisco-mso">cisco\.mso</a>
- - <a href="#community-aws">community\.aws</a>
- - <a href="#community-crypto">community\.crypto</a>
- - <a href="#community-docker">community\.docker</a>
- - <a href="#community-general">community\.general</a>
- - <a href="#community-rabbitmq">community\.rabbitmq</a>
- - <a href="#community-routeros">community\.routeros</a>
- - <a href="#community-vmware">community\.vmware</a>
- - <a href="#containers-podman-1">containers\.podman</a>
- - <a href="#dellemc-powerflex">dellemc\.powerflex</a>
- - <a href="#netapp-ontap">netapp\.ontap</a>
- - <a href="#purestorage-flashblade">purestorage\.flashblade</a>
-- <a href="#deprecated-features">Deprecated Features</a>
- - <a href="#community-crypto-1">community\.crypto</a>
- - <a href="#community-general-1">community\.general</a>
- - <a href="#community-vmware-1">community\.vmware</a>
-- <a href="#bugfixes">Bugfixes</a>
- - <a href="#ansible-core-1">Ansible\-core</a>
- - <a href="#amazon-aws-1">amazon\.aws</a>
- - <a href="#cisco-aci-1">cisco\.aci</a>
- - <a href="#cisco-ise">cisco\.ise</a>
- - <a href="#cisco-mso-1">cisco\.mso</a>
- - <a href="#community-aws-1">community\.aws</a>
- - <a href="#community-crypto-2">community\.crypto</a>
- - <a href="#community-dns">community\.dns</a>
- - <a href="#community-docker-1">community\.docker</a>
- - <a href="#community-general-2">community\.general</a>
- - <a href="#community-hrobot">community\.hrobot</a>
- - <a href="#community-vmware-2">community\.vmware</a>
- - <a href="#containers-podman-2">containers\.podman</a>
- - <a href="#fortinet-fortios-1">fortinet\.fortios</a>
- - <a href="#netapp-ontap-1">netapp\.ontap</a>
-- <a href="#new-plugins">New Plugins</a>
- - <a href="#filter">Filter</a>
-- <a href="#new-modules">New Modules</a>
- - <a href="#community-aws-2">community\.aws</a>
- - <a href="#community-crypto-3">community\.crypto</a>
- - <a href="#community-general-3">community\.general</a>
- - <a href="#dellemc-powerflex-1">dellemc\.powerflex</a>
-- <a href="#unchanged-collections">Unchanged Collections</a>
-
-<a id="release-summary"></a>
-### 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\.
-
-<a id="ansible-core"></a>
-### 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\.
-
-<a id="changed-collections"></a>
-### 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 | |
-
-<a id="major-changes"></a>
-### Major Changes
-
-<a id="containers-podman"></a>
-#### containers\.podman
-
-* Add quadlet support for Podman modules
-
-<a id="fortinet-fortios"></a>
-#### 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\.
-
-<a id="minor-changes"></a>
-### Minor Changes
-
-<a id="amazon-aws"></a>
-#### amazon\.aws
-
-* iam\_user\_info \- Add <code>login\_profile</code> 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 <code>boto3\_resource\_to\_ansible\_dict\(\)</code> and <code>boto3\_resource\_list\_to\_ansible\_dict\(\)</code> \([https\://github\.com/ansible\-collections/amazon\.aws/pull/2006](https\://github\.com/ansible\-collections/amazon\.aws/pull/2006)\)\.
-* module\_utils\.transformations \- add <code>boto3\_resource\_to\_ansible\_dict\(\)</code> and <code>boto3\_resource\_list\_to\_ansible\_dict\(\)</code> helpers \([https\://github\.com/ansible\-collections/amazon\.aws/pull/2006](https\://github\.com/ansible\-collections/amazon\.aws/pull/2006)\)\.
-
-<a id="cisco-aci"></a>
-#### 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
-
-<a id="cisco-dnac"></a>
-#### 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\.
-
-<a id="cisco-meraki"></a>
-#### 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\.
-
-<a id="cisco-mso"></a>
-#### 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
-
-<a id="community-aws"></a>
-#### 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 <code>m5</code> and <code>m7g</code> types of MSK clusters \([https\://github\.com/ansible\-collections/community\.aws/pull/1947](https\://github\.com/ansible\-collections/community\.aws/pull/1947)\)\.
-
-<a id="community-crypto"></a>
-#### community\.crypto
-
-* When using cryptography \>\= 42\.0\.0\, use offset\-aware <code>datetime\.datetime</code> 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)\)\.
-
-<a id="community-docker"></a>
-#### community\.docker
-
-* The EE requirements now include PyYAML\, since the <code>docker\_compose\_v2\*</code> modules depend on it when the <code>definition</code> 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 <code>check\_files\_existing</code> allows to disable the check for one of the files <code>compose\.yaml</code>\, <code>compose\.yml</code>\, <code>docker\-compose\.yaml</code>\, and <code>docker\-compose\.yml</code> in <code>project\_src</code> if <code>files</code> is not specified\. This is necessary if a non\-standard compose filename is specified through other means\, like the <code>COMPOSE\_FILE</code> 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 <code>project\_src</code> 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)\)\.
-
-<a id="community-general"></a>
-#### community\.general
-
-* Use offset\-aware <code>datetime\.datetime</code> 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 <code>latest</code> and <code>present\_not\_latest</code>\. The value <code>latest</code> is equivalent to the current behavior of <code>present</code>\, which will upgrade a package if a newer version exists\. <code>present\_not\_latest</code> does what most users would expect <code>present</code> to do\: it does not upgrade if the package is already installed\. The current behavior of <code>present</code> will be deprecated in a later version\, and eventually changed to that of <code>present\_not\_latest</code> \([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 <code>section\_has\_values</code>\. If the target ini file contains more than one <code>section</code>\, use <code>section\_has\_values</code> 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 <code>cert\_content</code> 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 <code>docker\-v2</code> 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 <code>type</code> values <code>ovs\-port</code>\, <code>ovs\-interface</code>\, and <code>ovs\-bridge</code>\, and new <code>slave\_type</code> value <code>ovs\-port</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8154](https\://github\.com/ansible\-collections/community\.general/pull/8154)\)\.
-* osx\_defaults \- add option <code>check\_types</code> 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 <code>missing\_subkey</code> 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 <code>ResetToDefaults</code> 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 <code>MultipartHttpPush</code> to <code>GetFirmwareUpdateCapabilities</code> \([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 <code>accept\-new</code> as valid value for <code>strict\_host\_key\_checking</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8257](https\://github\.com/ansible\-collections/community\.general/pull/8257)\)\.
-
-<a id="community-rabbitmq"></a>
-#### 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)\)
-
-<a id="community-routeros"></a>
-#### community\.routeros
-
-* api\_info\, api\_modify \- Add RouterOS 7\.x support to <code>/mpls ldp</code> path \([https\://github\.com/ansible\-collections/community\.routeros/pull/271](https\://github\.com/ansible\-collections/community\.routeros/pull/271)\)\.
-* api\_info\, api\_modify \- add <code>/ip route rule</code> 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 <code>/routing filter</code> 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 <code>from\-pool</code> field in <code>/ipv6 address</code> \([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 <code>/interface pppoe\-server server</code> \([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 <code>/ip dhcp\-relay</code> \([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 <code>/queue simple</code> \([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 <code>/queue type</code> \([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 <code>/routing bgp aggregate</code>\, <code>/routing bgp network</code> and <code>/routing bgp peer</code> \([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 <code>/mpls interface</code>\, <code>/mpls ldp accept\-filter</code>\, <code>/mpls ldp advertise\-filter</code> and <code>mpls ldp interface</code> \([https\://github\.com/ansible\-collections/community\.routeros/pull/272](https\://github\.com/ansible\-collections/community\.routeros/pull/272)\)\.
-
-<a id="community-vmware"></a>
-#### 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 <em class="title-reference">toolsVersionStatus2</em> instead of <em class="title-reference">toolsVersionStatus</em> \([https\://github\.com/ansible\-collections/community\.vmware/issues/2033](https\://github\.com/ansible\-collections/community\.vmware/issues/2033)\)\.
-
-<a id="containers-podman-1"></a>
-#### 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\)
-
-<a id="dellemc-powerflex"></a>
-#### 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\.
-
-<a id="netapp-ontap"></a>
-#### netapp\.ontap
-
-* na\_ontap\_cifs \- new option <em class="title-reference">offline\_files</em> added in REST\, requires ONTAP 9\.10 or later\.
-* na\_ontap\_net\_ifgrp \- updated documentation for parameter <em class="title-reference">name</em>\.
-* na\_ontap\_vserver\_audit \- new options <em class="title-reference">schedule\.\*</em> added under <em class="title-reference">log\.rotation</em>\, requires ONTAP 9\.6 or later\.
-
-<a id="purestorage-flashblade"></a>
-#### purestorage\.flashblade
-
-* purefb\_bucket \- Add support for strict 17a\-4 WORM compliance\.
-* purefb\_connect \- Increase Fan\-In and Fan\-Out maximums
-* purefb\_fs \- Add <code>group\_ownership</code> 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
-
-<a id="deprecated-features"></a>
-### Deprecated Features
-
-<a id="community-crypto-1"></a>
-#### community\.crypto
-
-* acme\.backends module utils \- from community\.crypto on\, all implementations of <code>CryptoBackend</code> must override <code>get\_ordered\_csr\_identifiers\(\)</code>\. The current default implementation\, which simply sorts the result of <code>get\_csr\_identifiers\(\)</code>\, will then be removed \([https\://github\.com/ansible\-collections/community\.crypto/pull/725](https\://github\.com/ansible\-collections/community\.crypto/pull/725)\)\.
-
-<a id="community-general-1"></a>
-#### 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)\)\.
-
-<a id="community-vmware-1"></a>
-#### community\.vmware
-
-* vmware\_guest\_tools\_info \- <em class="title-reference">vm\_tools\_install\_status</em> 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 <em class="title-reference">vm\_tools\_running\_status</em> / <em class="title-reference">vm\_tools\_version\_status</em> instead \([https\://github\.com/ansible\-collections/community\.vmware/issues/2033](https\://github\.com/ansible\-collections/community\.vmware/issues/2033)\)\.
-
-<a id="bugfixes"></a>
-### Bugfixes
-
-<a id="ansible-core-1"></a>
-#### 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 <code>ansible\-doc</code> \([https\://github\.com/ansible/ansible/pull/82574](https\://github\.com/ansible/ansible/pull/82574)\)\.
-* async \- Fix bug that stopped running async task in <code>\-\-check</code> when <code>check\_mode\: False</code> was set as a task attribute \- [https\://github\.com/ansible/ansible/issues/82811](https\://github\.com/ansible/ansible/issues/82811)
-* blockinfile \- when <code>create\=true</code> 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 <code>dest</code> 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)
-
-<a id="amazon-aws-1"></a>
-#### 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)\)\.
-
-<a id="cisco-aci-1"></a>
-#### 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
-
-<a id="cisco-ise"></a>
-#### cisco\.ise
-
-* ansible\.utils changes to <em class="title-reference">\"\>\=2\.0\.0\,\<5\.0\"</em> in galaxy\.yml dependencies\.
-
-<a id="cisco-mso-1"></a>
-#### 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
-
-<a id="community-aws-1"></a>
-#### community\.aws
-
-* ssm\(connection\) \- fix bucket region logic when region is <code>us\-east\-1</code> \([https\://github\.com/ansible\-collections/community\.aws/pull/1908](https\://github\.com/ansible\-collections/community\.aws/pull/1908)\)\.
-
-<a id="community-crypto-2"></a>
-#### 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)\)\.
-
-<a id="community-dns"></a>
-#### community\.dns
-
-* Update Public Suffix List\.
-* inventory plugins \- add unsafe wrapper to avoid marking strings that do not contain <code>\{</code> or <code>\}</code> 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)\)\.
-
-<a id="community-docker-1"></a>
-#### community\.docker
-
-* docker\_compose\_v2\* \- allow <code>project\_src</code> 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 <code>dev</code> \([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 <code>\{</code> or <code>\}</code> 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)\)\.
-
-<a id="community-general-2"></a>
-#### community\.general
-
-* aix\_filesystem \- fix <code>\_validate\_vg</code> not passing VG name to <code>lsvg\_cmd</code> \([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 <code>apt\-get \-y install \<packages\></code>\, 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 <code>ConfigParser</code> to allow converting values with a <code>\%</code> 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 <code>\{</code> or <code>\}</code> 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 <code>defaultClientScopes</code> and <code>optionalClientScopes</code> 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 <code>enabledEventTypes</code> and <code>supportedLocales</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8224](https\://github\.com/ansible\-collections/community\.general/pull/8224)\)\.
-* puppet \- add option <code>environment\_lang</code> to set the environment language encoding\. Defaults to lang <code>C</code>\. It is recommended to set it to <code>C\.UTF\-8</code> or <code>en\_US\.UTF\-8</code> 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 <code>riak admin</code> sub\-command in newer Riak KV versions beside the legacy <code>riak\-admin</code> 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 <code>ConfigParser</code> to allow converting values with a <code>\%</code> 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)\)\.
-
-<a id="community-hrobot"></a>
-#### community\.hrobot
-
-* inventory plugins \- add unsafe wrapper to avoid marking strings that do not contain <code>\{</code> or <code>\}</code> 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)\)\.
-
-<a id="community-vmware-2"></a>
-#### community\.vmware
-
-* Use <em class="title-reference">isinstance\(\)</em> instead of <em class="title-reference">type\(\)</em> 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)\)\.
-
-<a id="containers-podman-2"></a>
-#### 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
-
-<a id="fortinet-fortios-1"></a>
-#### fortinet\.fortios
-
-* Fix the issue that ssl\-certificate cannot be set in <em class="title-reference">fortios\_firewall\_vip</em> and <em class="title-reference">fortios\_firewall\_vip6</em>\.
-* Github issue
-* mantis issue
-
-<a id="netapp-ontap-1"></a>
-#### 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 <em class="title-reference">supported\_cipher\_suites</em> to maintain idempotency in REST\.
-
-<a id="new-plugins"></a>
-### New Plugins
-
-<a id="filter"></a>
-#### 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
-
-<a id="new-modules"></a>
-### New Modules
-
-<a id="community-aws-2"></a>
-#### community\.aws
-
-* community\.aws\.dynamodb\_table\_info \- Returns information about a Dynamo DB table
-
-<a id="community-crypto-3"></a>
-#### community\.crypto
-
-* community\.crypto\.x509\_certificate\_convert \- Convert X\.509 certificates
-
-<a id="community-general-3"></a>
-#### 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\.
-
-<a id="dellemc-powerflex-1"></a>
-#### dellemc\.powerflex
-
-* dellemc\.powerflex\.resource\_group \- Manage resource group deployments on Dell PowerFlex
-
-<a id="unchanged-collections"></a>
-### 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\)
-
-<a id="v9-4-0"></a>
-## v9\.4\.0
-
-- <a href="#release-summary-1">Release Summary</a>
-- <a href="#ansible-core-2">Ansible\-core</a>
-- <a href="#changed-collections-1">Changed Collections</a>
-- <a href="#minor-changes-1">Minor Changes</a>
- - <a href="#ansible-core-3">Ansible\-core</a>
- - <a href="#amazon-aws-2">amazon\.aws</a>
- - <a href="#ansible-windows">ansible\.windows</a>
- - <a href="#cisco-dnac-1">cisco\.dnac</a>
- - <a href="#cisco-ise-1">cisco\.ise</a>
- - <a href="#community-general-4">community\.general</a>
- - <a href="#community-hashi-vault">community\.hashi\_vault</a>
- - <a href="#community-routeros-1">community\.routeros</a>
- - <a href="#community-windows">community\.windows</a>
- - <a href="#dellemc-powerflex-2">dellemc\.powerflex</a>
- - <a href="#ibm-storage-virtualize">ibm\.storage\_virtualize</a>
- - <a href="#microsoft-ad">microsoft\.ad</a>
- - <a href="#purestorage-flasharray">purestorage\.flasharray</a>
- - <a href="#purestorage-flashblade-1">purestorage\.flashblade</a>
-- <a href="#deprecated-features-1">Deprecated Features</a>
- - <a href="#amazon-aws-3">amazon\.aws</a>
-- <a href="#security-fixes">Security Fixes</a>
- - <a href="#community-dns-1">community\.dns</a>
- - <a href="#community-docker-2">community\.docker</a>
- - <a href="#community-general-5">community\.general</a>
- - <a href="#community-hrobot-1">community\.hrobot</a>
-- <a href="#bugfixes-1">Bugfixes</a>
- - <a href="#ansible-core-4">Ansible\-core</a>
- - <a href="#amazon-aws-4">amazon\.aws</a>
- - <a href="#ansible-windows-1">ansible\.windows</a>
- - <a href="#community-dns-2">community\.dns</a>
- - <a href="#community-docker-3">community\.docker</a>
- - <a href="#community-general-6">community\.general</a>
- - <a href="#community-windows-1">community\.windows</a>
- - <a href="#ibm-storage-virtualize-1">ibm\.storage\_virtualize</a>
- - <a href="#kubernetes-core">kubernetes\.core</a>
- - <a href="#lowlydba-sqlserver">lowlydba\.sqlserver</a>
- - <a href="#microsoft-ad-1">microsoft\.ad</a>
- - <a href="#purestorage-flasharray-1">purestorage\.flasharray</a>
- - <a href="#purestorage-flashblade-2">purestorage\.flashblade</a>
-- <a href="#new-plugins-1">New Plugins</a>
- - <a href="#filter-1">Filter</a>
-- <a href="#new-modules-1">New Modules</a>
- - <a href="#community-general-7">community\.general</a>
- - <a href="#community-hashi-vault-1">community\.hashi\_vault</a>
- - <a href="#dellemc-powerflex-3">dellemc\.powerflex</a>
-- <a href="#unchanged-collections-1">Unchanged Collections</a>
-
-<a id="release-summary-1"></a>
-### Release Summary
-
-Release Date\: 2024\-03\-27
-
-[Porting Guide](https\://docs\.ansible\.com/ansible/devel/porting\_guides\.html)
-
-<a id="ansible-core-2"></a>
-### 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\.
-
-<a id="changed-collections-1"></a>
-### 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 | |
-
-<a id="minor-changes-1"></a>
-### Minor Changes
-
-<a id="ansible-core-3"></a>
-#### Ansible\-core
-
-* ansible\-test \- Add a work\-around for permission denied errors when using <code>pytest \>\= 8</code> on multi\-user systems with an installed version of <code>ansible\-test</code>\.
-
-<a id="amazon-aws-2"></a>
-#### amazon\.aws
-
-* AnsibeAWSModule \- added <code>fail\_json\_aws\_error\(\)</code> as a wrapper for <code>fail\_json\(\)</code> and <code>fail\_json\_aws\(\)</code> when passed an <code>AnsibleAWSError</code> 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 <code>AnsibleIAMError</code> and <code>IAMErrorHandler</code> 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 <code>AnsibleIAMError</code> and <code>IAMErrorHandler</code> 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 <code>AnsibleIAMError</code> and <code>IAMErrorHandler</code> 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 <code>AnsibleIAMError</code> and <code>IAMErrorHandler</code> 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 <code>AnsibleIAMError</code> and <code>IAMErrorHandler</code> 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 <code>AnsibleIAMError</code> and <code>IAMErrorHandler</code> 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 <code>AnsibleIAMError</code> and <code>IAMErrorHandler</code> 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 <code>AnsibleIAMError</code> and <code>IAMErrorHandler</code> 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 <code>AnsibleIAMError</code> and <code>IAMErrorHandler</code> 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 <code>AnsibleIAMError</code> and <code>IAMErrorHandler</code> 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 <code>AnsibleIAMError</code> and <code>IAMErrorHandler</code> 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)\)\.
-
-<a id="ansible-windows"></a>
-#### 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
-
-<a id="cisco-dnac-1"></a>
-#### 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\'
-
-<a id="cisco-ise-1"></a>
-#### cisco\.ise
-
-* Changes the minimum supported version from Ansible v2\.9\.10 to v2\.14\.0
-
-<a id="community-general-4"></a>
-#### community\.general
-
-* bitwarden lookup plugin \- allows to fetch all records of a given collection ID\, by allowing to pass an empty value for <code>search\_value</code> when <code>collection\_id</code> 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 <code>group\_by\_hostgroups</code> 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 <code>owner</code>\, <code>group</code>\, <code>mode</code>\, 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 <code>/1\.0/instances</code> API endpoint\, if available\. Falls back to <code>/1\.0/containers</code> or <code>/1\.0/virtual\-machines</code>\. Fixes issue when using Incus or LXD 5\.19 due to migrating to <code>/1\.0/instances</code> endpoint \([https\://github\.com/ansible\-collections/community\.general/pull/7980](https\://github\.com/ansible\-collections/community\.general/pull/7980)\)\.
-* nmcli \- allow setting <code>MTU</code> for <code>bond\-slave</code> interface types \([https\://github\.com/ansible\-collections/community\.general/pull/8118](https\://github\.com/ansible\-collections/community\.general/pull/8118)\)\.
-* proxmox \- adds <code>startup</code> 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)\)\.
-
-<a id="community-hashi-vault"></a>
-#### community\.hashi\_vault
-
-* cert auth \- add option to set the <code>cert\_auth\_public\_key</code> and <code>cert\_auth\_private\_key</code> parameters using the variables <code>ansible\_hashi\_vault\_cert\_auth\_public\_key</code> and <code>ansible\_hashi\_vault\_cert\_auth\_private\_key</code> \([https\://github\.com/ansible\-collections/community\.hashi\_vault/issues/428](https\://github\.com/ansible\-collections/community\.hashi\_vault/issues/428)\)\.
-
-<a id="community-routeros-1"></a>
-#### community\.routeros
-
-* api\_info\, api\_modify \- add read\-only fields <code>installed\-version</code>\, <code>latest\-version</code> and <code>status</code> in <code>system package update</code> \([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 <code>interface wifi</code> 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 <code>running</code> field in <code>interface wireless</code> \([https\://github\.com/ansible\-collections/community\.routeros/pull/264](https\://github\.com/ansible\-collections/community\.routeros/pull/264)\)\.
-
-<a id="community-windows"></a>
-#### community\.windows
-
-* win\_regmerge \- Add content \'content\' parameter for specifying registry file contents directly
-
-<a id="dellemc-powerflex-2"></a>
-#### 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\.
-
-<a id="ibm-storage-virtualize"></a>
-#### 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
-
-<a id="microsoft-ad"></a>
-#### microsoft\.ad
-
-* Added <code>group/microsoft\.ad\.domain</code> module defaults group for the <code>computer</code>\, <code>group</code>\, <code>object\_info</code>\, <code>object</code>\, <code>ou</code>\, and <code>user</code> module\. Users can use this defaults group to set common connection options for these modules such as the <code>domain\_server</code>\, <code>domain\_username</code>\, and <code>domain\_password</code> options\.
-* Added support for Jinja2 templating in ldap inventory\.
-
-<a id="purestorage-flasharray"></a>
-#### 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 <code>present</code> and <code>absent</code> as valid <code>state</code> options
-* purefa\_ra \- Add connecting as valid status of RA to perform operations on
-* purefa\_ra \- Convert to REST v2
-* purefa\_syslog \- <code>name</code> becomes a required parameter as module converts to full REST 2 support
-* purefa\_vnc \- Convert to REST v2
-
-<a id="purestorage-flashblade-1"></a>
-#### purestorage\.flashblade
-
-* purefb\_ds \- Add <em class="title-reference">force\_bind\_password</em> parameter to allow module to be idempotent\.
-
-<a id="deprecated-features-1"></a>
-### Deprecated Features
-
-<a id="amazon-aws-3"></a>
-#### amazon\.aws
-
-* iam\_role\_info \- in a release after 2026\-05\-01 paths must begin and end with <code>/</code> \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1998](https\://github\.com/ansible\-collections/amazon\.aws/pull/1998)\)\.
-
-<a id="security-fixes"></a>
-### Security Fixes
-
-<a id="community-dns-1"></a>
-#### 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)\)\.
-
-<a id="community-docker-2"></a>
-#### 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)\)\.
-
-<a id="community-general-5"></a>
-#### 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)\)\.
-
-<a id="community-hrobot-1"></a>
-#### 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)\)\.
-
-<a id="bugfixes-1"></a>
-### Bugfixes
-
-<a id="ansible-core-4"></a>
-#### Ansible\-core
-
-* Fix an issue when setting a plugin name from an unsafe source resulted in <code>ValueError\: unmarshallable object</code> \([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 <code>libexpat</code> 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
-
-<a id="amazon-aws-4"></a>
-#### 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 <code>ClientSecret</code> parameter and <code>UseExistingClientSecret\=true</code> \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1877](https\://github\.com/ansible\-collections/amazon\.aws/issues/1877)\)\.
-
-<a id="ansible-windows-1"></a>
-#### 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)
-
-<a id="community-dns-2"></a>
-#### 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\.
-
-<a id="community-docker-3"></a>
-#### 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 <code>docker compose up</code> 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 <code>Warning</code> 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 <code>logfmt</code> 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 <code>policy\=always</code>\. This stops the module from reporting <code>changed\=true</code> 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)\)\.
-
-<a id="community-general-6"></a>
-#### 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 <code>accessor\_id</code> \([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 <code>ipaenabledflag</code> 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 <code>ipaenabledflag</code> 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)\)\.
-
-<a id="community-windows-1"></a>
-#### community\.windows
-
-* win\_format\, win\_partition \- Add support for Windows failover cluster disks
-* win\_psmodule \- Fix up error message with <code>state\=latest</code>
-* win\_robocopy \- Fix up <code>cmd</code> return value to include the executable <code>robocopy</code>
-
-<a id="ibm-storage-virtualize-1"></a>
-#### 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
-
-<a id="kubernetes-core"></a>
-#### 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)\)\.
-
-<a id="lowlydba-sqlserver"></a>
-#### 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)\)
-
-<a id="microsoft-ad-1"></a>
-#### 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 <code>domain\_ou\_path</code> \- [https\://github\.com/ansible\-collections/microsoft\.ad/issues/88](https\://github\.com/ansible\-collections/microsoft\.ad/issues/88)
-
-<a id="purestorage-flasharray-1"></a>
-#### 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\.
-
-<a id="purestorage-flashblade-2"></a>
-#### 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\.
-
-<a id="new-plugins-1"></a>
-### New Plugins
-
-<a id="filter-1"></a>
-#### Filter
-
-* microsoft\.ad\.dn\_escape \- Escape an LDAP DistinguishedName value string\.
-* microsoft\.ad\.parse\_dn \- Parses an LDAP DistinguishedName string into an object\.
-
-<a id="new-modules-1"></a>
-### New Modules
-
-<a id="community-general-7"></a>
-#### community\.general
-
-* community\.general\.usb\_facts \- Allows listing information about USB devices
-
-<a id="community-hashi-vault-1"></a>
-#### 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
-
-<a id="dellemc-powerflex-3"></a>
-#### dellemc\.powerflex
-
-* dellemc\.powerflex\.fault\_set \- Manage Fault Sets on Dell PowerFlex
-
-<a id="unchanged-collections-1"></a>
-### 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\)
-
-<a id="v9-3-0"></a>
-## v9\.3\.0
-
-- <a href="#release-summary-2">Release Summary</a>
-- <a href="#ansible-core-5">Ansible\-core</a>
-- <a href="#changed-collections-2">Changed Collections</a>
-- <a href="#major-changes-1">Major Changes</a>
- - <a href="#community-mysql">community\.mysql</a>
- - <a href="#fortinet-fortios-2">fortinet\.fortios</a>
-- <a href="#minor-changes-2">Minor Changes</a>
- - <a href="#amazon-aws-5">amazon\.aws</a>
- - <a href="#community-crypto-4">community\.crypto</a>
- - <a href="#community-docker-4">community\.docker</a>
- - <a href="#community-general-8">community\.general</a>
- - <a href="#community-grafana">community\.grafana</a>
- - <a href="#community-mysql-1">community\.mysql</a>
- - <a href="#community-postgresql">community\.postgresql</a>
- - <a href="#community-routeros-2">community\.routeros</a>
- - <a href="#community-vmware-3">community\.vmware</a>
- - <a href="#containers-podman-3">containers\.podman</a>
- - <a href="#fortinet-fortimanager">fortinet\.fortimanager</a>
- - <a href="#grafana-grafana">grafana\.grafana</a>
- - <a href="#hetzner-hcloud">hetzner\.hcloud</a>
- - <a href="#lowlydba-sqlserver-1">lowlydba\.sqlserver</a>
- - <a href="#netapp-ontap-2">netapp\.ontap</a>
- - <a href="#netapp-storagegrid">netapp\.storagegrid</a>
- - <a href="#netbox-netbox">netbox\.netbox</a>
- - <a href="#purestorage-fusion">purestorage\.fusion</a>
-- <a href="#deprecated-features-2">Deprecated Features</a>
- - <a href="#community-crypto-5">community\.crypto</a>
-- <a href="#bugfixes-2">Bugfixes</a>
- - <a href="#ansible-core-6">Ansible\-core</a>
- - <a href="#amazon-aws-6">amazon\.aws</a>
- - <a href="#community-crypto-6">community\.crypto</a>
- - <a href="#community-dns-3">community\.dns</a>
- - <a href="#community-docker-5">community\.docker</a>
- - <a href="#community-general-9">community\.general</a>
- - <a href="#community-grafana-1">community\.grafana</a>
- - <a href="#community-mysql-2">community\.mysql</a>
- - <a href="#community-postgresql-1">community\.postgresql</a>
- - <a href="#community-routeros-3">community\.routeros</a>
- - <a href="#containers-podman-4">containers\.podman</a>
- - <a href="#f5networks-f5-modules">f5networks\.f5\_modules</a>
- - <a href="#fortinet-fortimanager-1">fortinet\.fortimanager</a>
- - <a href="#fortinet-fortios-3">fortinet\.fortios</a>
- - <a href="#lowlydba-sqlserver-2">lowlydba\.sqlserver</a>
- - <a href="#netapp-ontap-3">netapp\.ontap</a>
- - <a href="#netapp-storagegrid-1">netapp\.storagegrid</a>
- - <a href="#netbox-netbox-1">netbox\.netbox</a>
-- <a href="#new-plugins-2">New Plugins</a>
- - <a href="#callback">Callback</a>
- - <a href="#filter-2">Filter</a>
-- <a href="#new-modules-2">New Modules</a>
- - <a href="#community-general-10">community\.general</a>
- - <a href="#containers-podman-5">containers\.podman</a>
- - <a href="#fortinet-fortimanager-2">fortinet\.fortimanager</a>
- - <a href="#hetzner-hcloud-1">hetzner\.hcloud</a>
- - <a href="#netbox-netbox-2">netbox\.netbox</a>
-- <a href="#unchanged-collections-2">Unchanged Collections</a>
-
-<a id="release-summary-2"></a>
-### Release Summary
-
-Release Date\: 2024\-02\-27
-
-[Porting Guide](https\://docs\.ansible\.com/ansible/devel/porting\_guides\.html)
-
-<a id="ansible-core-5"></a>
-### 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\.
-
-<a id="changed-collections-2"></a>
-### 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 | |
-
-<a id="major-changes-1"></a>
-### Major Changes
-
-<a id="community-mysql"></a>
-#### community\.mysql
-
-* Collection version 2\.\*\.\* is EOL\, no more bugfixes will be backported\. Please consider upgrading to the latest version\.
-
-<a id="fortinet-fortios-2"></a>
-#### 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\.
-
-<a id="minor-changes-2"></a>
-### Minor Changes
-
-<a id="amazon-aws-5"></a>
-#### amazon\.aws
-
-* backup\_plan \- Let user to set <code>schedule\_expression\_timezone</code> 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 <code>bucket\_versioning</code> 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)\)\.
-
-<a id="community-crypto-4"></a>
-#### community\.crypto
-
-* x509\_crl \- the new option <code>serial\_numbers</code> allow to configure in which format serial numbers can be provided to <code>revoked\_certificates\[\]\.serial\_number</code>\. The default is as integers \(<code>serial\_numbers\=integer</code>\) for backwards compatibility\; setting <code>serial\_numbers\=hex\-octets</code> allows to specify colon\-separated hex octet strings like <code>00\:11\:22\:FF</code> \([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)\)\.
-
-<a id="community-docker-4"></a>
-#### community\.docker
-
-* docker\_compose\_v2 \- allow to wait until containers are running/health when running <code>docker compose up</code> with the new <code>wait</code> 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 <code>pull\_check\_mode\_behavior</code> option now allows to control the module\'s behavior in check mode when <code>pull\=always</code> \([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 <code>pull</code> option now accepts the three values <code>never</code>\, <code>missing\_image</code> \(default\)\, and <code>never</code>\, next to the previously valid values <code>true</code> \(equivalent to <code>always</code>\) and <code>false</code> \(equivalent to <code>missing\_image</code>\)\. This allows the equivalent to <code>\-\-pull\=never</code> 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)\)\.
-
-<a id="community-general-8"></a>
-#### community\.general
-
-* bitwarden lookup plugin \- add <code>bw\_session</code> 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 <code>python\-gitlab</code> \([https\://github\.com/ansible\-collections/community\.general/pull/7790](https\://github\.com/ansible\-collections/community\.general/pull/7790)\)\.
-* gitlab\_hook \- adds <code>releases\_events</code> 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 <code>url</code>\, <code>user</code>\, and <code>password</code> 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 <code>transaction</code> \([https\://github\.com/ansible\-collections/community\.general/pull/7976](https\://github\.com/ansible\-collections/community\.general/pull/7976)\)\.
-* proxmox\_kvm \- add parameter <code>update\_unsafe</code> 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 <code>SetServiceIdentification</code> 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 <code>NOEXEC</code> tag in sudoers rules \([https\://github\.com/ansible\-collections/community\.general/pull/7983](https\://github\.com/ansible\-collections/community\.general/pull/7983)\)\.
-* terraform \- fix <code>diff\_mode</code> in state <code>absent</code> and when terraform <code>resource\_changes</code> does not exist \([https\://github\.com/ansible\-collections/community\.general/pull/7963](https\://github\.com/ansible\-collections/community\.general/pull/7963)\)\.
-
-<a id="community-grafana"></a>
-#### community\.grafana
-
-* Manage <em class="title-reference">grafana\_folder</em> for organizations
-* Merged ansible role telekom\-mms/ansible\-role\-grafana into ansible\-collections/community\.grafana
-* added <em class="title-reference">community\.grafana\.notification\_channel</em> to role
-* grafana\_dashboard \- add check\_mode support
-
-<a id="community-mysql-1"></a>
-#### community\.mysql
-
-* mysql\_user \- add the <code>password\_expire</code> and <code>password\_expire\_interval</code> 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 <code>attributes</code> parameter and return value \([https\://github\.com/ansible\-collections/community\.mysql/pull/604](https\://github\.com/ansible\-collections/community\.mysql/pull/604)\)\.
-
-<a id="community-postgresql"></a>
-#### community\.postgresql
-
-* postgresql\_db \- add the <code>icu\_locale</code> argument \([https\://github\.com/ansible\-collections/community\.postgresql/issues/666](https\://github\.com/ansible\-collections/community\.postgresql/issues/666)\)\.
-* postgresql\_db \- add the <code>locale\_provider</code> argument \([https\://github\.com/ansible\-collections/community\.postgresql/issues/666](https\://github\.com/ansible\-collections/community\.postgresql/issues/666)\)\.
-
-<a id="community-routeros-2"></a>
-#### community\.routeros
-
-* api\_info\, api\_modify \- make path <code>user group</code> modifiable and add <code>comment</code> 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 <code>ip vrf</code> path in RouterOS 7 \([https\://github\.com/ansible\-collections/community\.routeros/pull/259](https\://github\.com/ansible\-collections/community\.routeros/pull/259)\)
-
-<a id="community-vmware-3"></a>
-#### 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 <em class="title-reference">subproperties</em> \([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)\)\.
-
-<a id="containers-podman-3"></a>
-#### 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
-
-<a id="fortinet-fortimanager"></a>
-#### 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\.
-
-<a id="grafana-grafana"></a>
-#### 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 <em class="title-reference">oauth\_allow\_insecure\_email\_lookup</em> 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)
-
-<a id="hetzner-hcloud"></a>
-#### hetzner\.hcloud
-
-* Replace deprecated <em class="title-reference">ansible\.netcommon</em> ip utils with python <em class="title-reference">ipaddress</em> module\. The <em class="title-reference">ansible\.netcommon</em> 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 <em class="title-reference">applied\_to</em>\.
-* firewall\_info \- Add new <em class="title-reference">firewall\_info</em> module to gather firewalls info\.
-* firewall\_resource \- Add new <em class="title-reference">firewall\_resource</em> module to manage firewalls resources\.
-* inventory \- Add <em class="title-reference">hostvars\_prefix</em> and hostvars\_suffix\` options to customize the inventory host variables keys\.
-
-<a id="lowlydba-sqlserver-1"></a>
-#### 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)\)
-
-<a id="netapp-ontap-2"></a>
-#### netapp\.ontap
-
-* na\_ontap\_cifs\_server \- new option <em class="title-reference">is\_multichannel\_enabled</em> added in REST\, requires ONTAP 9\.10 or later\.
-* na\_ontap\_export\_policy\_rule \- added <em class="title-reference">actions</em> and <em class="title-reference">modify</em> in module output\.
-* na\_ontap\_file\_security\_permissions\_acl \- added <em class="title-reference">actions</em> and <em class="title-reference">modify</em> in module output\.
-* na\_ontap\_igroup\_initiator \- added <em class="title-reference">actions</em> in module output\.
-* na\_ontap\_lun\_map \- added <em class="title-reference">actions</em> in module output\.
-* na\_ontap\_lun\_map\_reporting\_nodes \- added <em class="title-reference">actions</em> in module output\.
-* na\_ontap\_name\_mappings \- added <em class="title-reference">actions</em> and <em class="title-reference">modify</em> in module output\.
-* na\_ontap\_node \- added <em class="title-reference">modify</em> in module output\.
-* na\_ontap\_rest\_info \- added warning message if given subset doesn\'t support option <em class="title-reference">owning\_resource</em>\.
-* 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\.
-
-<a id="netapp-storagegrid"></a>
-#### netapp\.storagegrid
-
-* na\_sg\_grid\_account \- New option <code>allow\_select\_object\_content</code> for enabling use of the S3 SelectObjectContent API\.
-* na\_sg\_grid\_account \- New option <code>description</code> for setting additional identifying information for the tenant account\.
-
-<a id="netbox-netbox"></a>
-#### 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)\)
-
-<a id="purestorage-fusion"></a>
-#### purestorage\.fusion
-
-* fusion\_volume \- Allow creating a new volume from already existing volume or volume snapshot
-
-<a id="deprecated-features-2"></a>
-### Deprecated Features
-
-* The <code>inspur\.sm</code> 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 <code>netapp\.storagegrid</code> 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 <code>purestorage\.fusion</code> 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)\)\.
-
-<a id="community-crypto-5"></a>
-#### 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 <code>\_pipe</code>\: if the object needs to be \(re\-\)generated\, only the <code>changed</code> 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 <code>check\_mode\: false</code> 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)\)\.
-
-<a id="bugfixes-2"></a>
-### Bugfixes
-
-<a id="ansible-core-6"></a>
-#### 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 <code>depth</code> 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)\)
-
-<a id="amazon-aws-6"></a>
-#### 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)\)\.
-
-<a id="community-crypto-6"></a>
-#### community\.crypto
-
-* luks\_device \- fixed module a bug that prevented using <code>remove\_keyslot</code> with the value <code>0</code> \([https\://github\.com/ansible\-collections/community\.crypto/pull/710](https\://github\.com/ansible\-collections/community\.crypto/pull/710)\)\.
-* luks\_device \- fixed module falsely outputting <code>changed\=false</code> 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)\)\.
-
-<a id="community-dns-3"></a>
-#### community\.dns
-
-* Update Public Suffix List\.
-
-<a id="community-docker-5"></a>
-#### community\.docker
-
-* docker\_compose\_v2 \- do not consider a <code>Waiting</code> 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 <code>changed\=true</code> return value of <code>pull\=always</code> \([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)\)\.
-
-<a id="community-general-9"></a>
-#### community\.general
-
-* cargo \- fix idempotency issues when using a custom installation path for packages \(using the <code>\-\-path</code> parameter\)\. The initial installation runs fine\, but subsequent runs use the <code>get\_installed\(\)</code> function which did not check the given installation location\, before running <code>cargo install</code>\. This resulted in a false <code>changed</code> state\. Also the removal of packeges using <code>state\: absent</code> 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 <code>search</code> keyword instead of <code>title</code> \([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 <code>/etc/modprobe\.d</code> or <code>/etc/modules\-load\.d</code> 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 <code>changed\=true</code> \([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 <code>GetUpdateStatus</code> 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 <code>Chassis</code> information \([https\://github\.com/ansible\-collections/community\.general/pull/7952](https\://github\.com/ansible\-collections/community\.general/pull/7952)\)\.
-
-<a id="community-grafana-1"></a>
-#### community\.grafana
-
-* test\: replace deprecated <em class="title-reference">TestCase\.assertEquals</em> to support Python 3\.12
-
-<a id="community-mysql-2"></a>
-#### community\.mysql
-
-* mysql\_info \- the <code>slave\_status</code> filter was returning an empty list on MariaDB with multiple replication channels\. It now returns all channels by running <code>SHOW ALL SLAVES STATUS</code> for MariaDB servers \([https\://github\.com/ansible\-collections/community\.mysql/issues/603](https\://github\.com/ansible\-collections/community\.mysql/issues/603)\)\.
-
-<a id="community-postgresql-1"></a>
-#### community\.postgresql
-
-* postgresql\_privs \- fix a failure when altering privileges with <code>grant\_option\: true</code> \([https\://github\.com/ansible\-collections/community\.postgresql/issues/668](https\://github\.com/ansible\-collections/community\.postgresql/issues/668)\)\.
-
-<a id="community-routeros-3"></a>
-#### 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)\)\.
-
-<a id="containers-podman-4"></a>
-#### 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
-
-<a id="f5networks-f5-modules"></a>
-#### 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\.
-
-<a id="fortinet-fortimanager-1"></a>
-#### 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\.
-
-<a id="fortinet-fortios-3"></a>
-#### fortinet\.fortios
-
-* Github issue
-
-<a id="lowlydba-sqlserver-2"></a>
-#### 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\)
-
-<a id="netapp-ontap-3"></a>
-#### netapp\.ontap
-
-* na\_ontap\_igroup\_initiator \- fixed issue with idempotency\.
-
-<a id="netapp-storagegrid-1"></a>
-#### netapp\.storagegrid
-
-* Removed fetch limit in API request and implemented pagination\.
-
-<a id="netbox-netbox-1"></a>
-#### 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)\)
-
-<a id="new-plugins-2"></a>
-### New Plugins
-
-<a id="callback"></a>
-#### Callback
-
-* community\.general\.default\_without\_diff \- The default ansible callback without diff output
-
-<a id="filter-2"></a>
-#### 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
-
-<a id="new-modules-2"></a>
-### New Modules
-
-<a id="community-general-10"></a>
-#### community\.general
-
-* community\.general\.gitlab\_group\_access\_token \- Manages GitLab group access tokens
-* community\.general\.gitlab\_project\_access\_token \- Manages GitLab project access tokens
-
-<a id="containers-podman-5"></a>
-#### containers\.podman
-
-* containers\.podman\.podman\_secret\_info \- Secrets info module
-
-<a id="fortinet-fortimanager-2"></a>
-#### 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\.
-
-<a id="hetzner-hcloud-1"></a>
-#### hetzner\.hcloud
-
-* hetzner\.hcloud\.firewall\_resource \- Manage Resources a Hetzner Cloud Firewall is applied to\.
-
-<a id="netbox-netbox-2"></a>
-#### netbox\.netbox
-
-* netbox\.netbox\.netbox\_virtual\_disk \- Create\, updates\, or removes a disk from a Virtual Machine
-
-<a id="unchanged-collections-2"></a>
-### 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\)
-
-<a id="v9-2-0"></a>
-## v9\.2\.0
-
-- <a href="#release-summary-3">Release Summary</a>
-- <a href="#added-collections">Added Collections</a>
-- <a href="#ansible-core-7">Ansible\-core</a>
-- <a href="#changed-collections-3">Changed Collections</a>
-- <a href="#major-changes-2">Major Changes</a>
- - <a href="#community-docker-6">community\.docker</a>
- - <a href="#community-hashi-vault-2">community\.hashi\_vault</a>
- - <a href="#dellemc-openmanage">dellemc\.openmanage</a>
- - <a href="#infoblox-nios-modules">infoblox\.nios\_modules</a>
-- <a href="#minor-changes-3">Minor Changes</a>
- - <a href="#amazon-aws-7">amazon\.aws</a>
- - <a href="#check-point-mgmt">check\_point\.mgmt</a>
- - <a href="#cisco-ise-2">cisco\.ise</a>
- - <a href="#cisco-meraki-1">cisco\.meraki</a>
- - <a href="#community-aws-3">community\.aws</a>
- - <a href="#community-crypto-7">community\.crypto</a>
- - <a href="#community-digitalocean">community\.digitalocean</a>
- - <a href="#community-dns-4">community\.dns</a>
- - <a href="#community-docker-7">community\.docker</a>
- - <a href="#community-general-11">community\.general</a>
- - <a href="#community-grafana-2">community\.grafana</a>
- - <a href="#community-hrobot-2">community\.hrobot</a>
- - <a href="#community-postgresql-2">community\.postgresql</a>
- - <a href="#community-routeros-4">community\.routeros</a>
- - <a href="#community-vmware-4">community\.vmware</a>
- - <a href="#community-zabbix">community\.zabbix</a>
- - <a href="#dellemc-enterprise-sonic">dellemc\.enterprise\_sonic</a>
- - <a href="#dellemc-openmanage-1">dellemc\.openmanage</a>
- - <a href="#grafana-grafana-1">grafana\.grafana</a>
- - <a href="#ibm-storage-virtualize-2">ibm\.storage\_virtualize</a>
- - <a href="#netapp-ontap-4">netapp\.ontap</a>
- - <a href="#netbox-netbox-3">netbox\.netbox</a>
- - <a href="#purestorage-flasharray-2">purestorage\.flasharray</a>
- - <a href="#purestorage-flashblade-3">purestorage\.flashblade</a>
- - <a href="#vultr-cloud">vultr\.cloud</a>
-- <a href="#deprecated-features-3">Deprecated Features</a>
- - <a href="#community-dns-5">community\.dns</a>
- - <a href="#community-docker-8">community\.docker</a>
- - <a href="#community-general-12">community\.general</a>
- - <a href="#community-hrobot-3">community\.hrobot</a>
-- <a href="#security-fixes-1">Security Fixes</a>
- - <a href="#ansible-core-8">Ansible\-core</a>
-- <a href="#bugfixes-3">Bugfixes</a>
- - <a href="#ansible-core-9">Ansible\-core</a>
- - <a href="#amazon-aws-8">amazon\.aws</a>
- - <a href="#check-point-mgmt-1">check\_point\.mgmt</a>
- - <a href="#cisco-meraki-2">cisco\.meraki</a>
- - <a href="#community-aws-4">community\.aws</a>
- - <a href="#community-crypto-8">community\.crypto</a>
- - <a href="#community-digitalocean-1">community\.digitalocean</a>
- - <a href="#community-dns-6">community\.dns</a>
- - <a href="#community-docker-9">community\.docker</a>
- - <a href="#community-general-13">community\.general</a>
- - <a href="#community-grafana-3">community\.grafana</a>
- - <a href="#community-postgresql-3">community\.postgresql</a>
- - <a href="#community-sap-libs">community\.sap\_libs</a>
- - <a href="#community-vmware-5">community\.vmware</a>
- - <a href="#community-zabbix-1">community\.zabbix</a>
- - <a href="#dellemc-enterprise-sonic-1">dellemc\.enterprise\_sonic</a>
- - <a href="#dellemc-openmanage-2">dellemc\.openmanage</a>
- - <a href="#fortinet-fortimanager-3">fortinet\.fortimanager</a>
- - <a href="#infoblox-nios-modules-1">infoblox\.nios\_modules</a>
- - <a href="#netapp-ontap-5">netapp\.ontap</a>
- - <a href="#netbox-netbox-4">netbox\.netbox</a>
- - <a href="#purestorage-flasharray-3">purestorage\.flasharray</a>
- - <a href="#purestorage-flashblade-4">purestorage\.flashblade</a>
- - <a href="#vultr-cloud-1">vultr\.cloud</a>
-- <a href="#known-issues">Known Issues</a>
- - <a href="#dellemc-openmanage-3">dellemc\.openmanage</a>
-- <a href="#new-plugins-3">New Plugins</a>
- - <a href="#connection">Connection</a>
- - <a href="#filter-3">Filter</a>
- - <a href="#lookup">Lookup</a>
-- <a href="#new-modules-3">New Modules</a>
- - <a href="#check-point-mgmt-2">check\_point\.mgmt</a>
- - <a href="#community-digitalocean-2">community\.digitalocean</a>
- - <a href="#community-docker-10">community\.docker</a>
- - <a href="#community-general-14">community\.general</a>
- - <a href="#dellemc-enterprise-sonic-2">dellemc\.enterprise\_sonic</a>
- - <a href="#dellemc-openmanage-4">dellemc\.openmanage</a>
- - <a href="#infoblox-nios-modules-2">infoblox\.nios\_modules</a>
- - <a href="#netapp-ontap-6">netapp\.ontap</a>
- - <a href="#purestorage-flashblade-5">purestorage\.flashblade</a>
- - <a href="#vultr-cloud-2">vultr\.cloud</a>
-- <a href="#unchanged-collections-3">Unchanged Collections</a>
-
-<a id="release-summary-3"></a>
-### Release Summary
-
-Release Date\: 2024\-01\-30
-
-[Porting Guide](https\://docs\.ansible\.com/ansible/devel/porting\_guides\.html)
-
-<a id="added-collections"></a>
-### Added Collections
-
-* community\.library\_inventory\_filtering\_v1 \(version 1\.0\.0\)
-
-<a id="ansible-core-7"></a>
-### 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\.
-
-<a id="changed-collections-3"></a>
-### 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 | |
-
-<a id="major-changes-2"></a>
-### Major Changes
-
-<a id="community-docker-6"></a>
-#### community\.docker
-
-* The <code>community\.docker</code> collection now depends on the <code>community\.library\_inventory\_filtering\_v1</code> 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 <code>ansible\-galaxy collection install</code>\, 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)\)\.
-
-<a id="community-hashi-vault-2"></a>
-#### community\.hashi\_vault
-
-* requirements \- the <code>requests</code> package which is required by <code>hvac</code> now has a more restrictive range for this collection in certain use cases due to breaking security changes in <code>ansible\-core</code> that were backported \([https\://github\.com/ansible\-collections/community\.hashi\_vault/pull/416](https\://github\.com/ansible\-collections/community\.hashi\_vault/pull/416)\)\.
-
-<a id="dellemc-openmanage"></a>
-#### dellemc\.openmanage
-
-* All OME modules are enhanced to support the environment variables <em class="title-reference">OME\_USERNAME</em> and <em class="title-reference">OME\_PASSWORD</em> as fallback for credentials\.
-* All iDRAC and Redfish modules are enhanced to support the environment variables <em class="title-reference">IDRAC\_USERNAME</em> and <em class="title-reference">IDRAC\_PASSWORD</em> as fallback for credentials\.
-* idrac\_certificates \- The module is enhanced to support the import and export of <em class="title-reference">CUSTOMCERTIFICATE</em>\.
-* idrac\_gather\_facts \- This role is enhanced to support secure boot\.
-* idrac\_license \- The module is introduced to configure iDRAC licenses\.
-
-<a id="infoblox-nios-modules"></a>
-#### infoblox\.nios\_modules
-
-* Upgrade Ansible version support from 2\.13 to 2\.16\.
-* Upgrade Python version support from 3\.8 to 3\.10\.
-
-<a id="minor-changes-3"></a>
-### Minor Changes
-
-<a id="amazon-aws-7"></a>
-#### 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 <code>get\_image\_attribute</code> 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 <code>ResourceTags</code> 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 <code>ResourceTags</code> 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 <code>ResourceTags</code> 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 <code>ResourceTags</code> 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 <code>tags</code> has been changed from <code>\{\}</code> to <code>None</code>\, 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 <code>ResourceTags</code> 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 <code>wait\_timeout</code> 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 <code>name</code> and <code>path</code> 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 \- <code>group\_name</code> has been added as an alias to <code>name</code> 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 <code>name</code> and <code>path</code> 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 <code>path</code> 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 <code>prefix</code> parameter has been renamed <code>path</code> for consistency with other IAM modules\, <code>prefix</code> 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 <code>path</code> has been removed\. New instances will still be created with a default path of <code>/</code>\. 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 <code>name</code> and <code>path</code> 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 \- <code>description</code> 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 \- <code>policy</code> 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 <code>path</code> \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1936](https\://github\.com/ansible\-collections/amazon\.aws/pull/1936)\)\.
-* iam\_managed\_policy \- the <code>policy\_description</code> parameter has been renamed <code>description</code> for consistency with other IAM modules\, <code>policy\_description</code> 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 <code>policy\_name</code> parameter has been renamed <code>name</code> for consistency with other IAM modules\, <code>policy\_name</code> 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 <code>name</code> and <code>path</code> 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 \- <code>prefix</code> and <code>path\_prefix</code> have been added as aliases to <code>path</code> 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 \- <code>role\_name</code> has been added as an alias to <code>name</code> 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 <code>path</code> 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 <code>path</code> has been removed\. New roles will still be created with a default path of <code>/</code>\. 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 \- <code>path</code> and <code>prefix</code> have been added as aliases to <code>path\_prefix</code> 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 <code>name</code> and <code>path</code> 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 \- <code>user\_name</code> has been added as an alias to <code>name</code> 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 <code>boundary</code> 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 <code>path</code> 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 <code>attached\_policies</code> 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 \- <code>prefix</code> has been added as an alias to <code>path\_prefix</code> 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 <code>path</code> parameter has been renamed <code>path\_prefix</code> for consistency with other IAM modules\, <code>path</code> 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)\)\.
-
-<a id="check-point-mgmt"></a>
-#### check\_point\.mgmt
-
-* New resource modules for R81\.20 JHF Take 43
-* meta/runtime\.yml \- update minimum Ansible version required to 2\.14\.0\.
-
-<a id="cisco-ise-2"></a>
-#### cisco\.ise
-
-* cisco\.ise collection now supports ansible\.utils v3
-
-<a id="cisco-meraki-1"></a>
-#### cisco\.meraki
-
-* Adding support to ansible\.utils \"\>\=2\.0\.0\, \<4\.00\"\.
-
-<a id="community-aws-3"></a>
-#### 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 <code>cache\_policy\_id</code> and <code>origin\_request\_policy\_id</code> 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 <code>wait</code> and <code>wait\_timeout</code> parameter values \([https\://github\.com/ansible\-collections/community\.aws/pull/1879](https\://github\.com/ansible\-collections/community\.aws/pull/1879)\)\.
-
-<a id="community-crypto-7"></a>
-#### 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)\)\.
-
-<a id="community-digitalocean"></a>
-#### 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)\)\.
-
-<a id="community-dns-4"></a>
-#### community\.dns
-
-* hetzner\_dns\_records and hosttech\_dns\_records inventory plugins \- the <code>filters</code> option has been renamed to <code>simple\_filters</code>\. The old name still works until community\.hrobot 2\.0\.0\. Then it will change to allow more complex filtering with the <code>community\.library\_inventory\_filtering\_v1</code> 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 <code>server</code> 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 <code>server</code> parameter to specify custom DNS servers \([https\://github\.com/ansible\-collections/community\.dns/pull/178](https\://github\.com/ansible\-collections/community\.dns/pull/178)\)\.
-
-<a id="community-docker-7"></a>
-#### community\.docker
-
-* The <code>ca\_cert</code> option available to almost all modules and plugins has been renamed to <code>ca\_path</code>\. The name <code>ca\_path</code> 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 <code>docker\_stack\*</code> modules now use the common CLI\-based module code added for the <code>docker\_image\_build</code> and <code>docker\_compose\_v2</code> 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 <code>community\.docker\.docker</code> and <code>docker</code> 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 <code>scale</code> 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 <code>files</code> 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 <code>networks\[\]\.mac\_address</code> option for Docker API 1\.44\+\. Note that Docker API 1\.44 no longer uses the global <code>mac\_address</code> 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 <code>platform</code> 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 <code>/dev/shm</code> 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 <code>filter</code> 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)\)\.
-
-<a id="community-general-11"></a>
-#### community\.general
-
-* consul\_auth\_method\, consul\_binding\_rule\, consul\_policy\, consul\_role\, consul\_session\, consul\_token \- added action group <code>community\.general\.consul</code> \([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 <code>requests</code> 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 \- <code>node\_identities</code> now expects a <code>node\_name</code> option to match the Consul API\, the old <code>name</code> 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 \- <code>service\_identities</code> now expects a <code>service\_name</code> option to match the Consul API\, the old <code>name</code> 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 <code>if</code> statements with a <code>for</code> 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 <code>maxrepeat</code>\, <code>maxsequence</code>\, <code>dictcheck</code>\, <code>usercheck</code>\, <code>gracelimit</code> 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 <code>config\.algorithm</code> 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 <code>config\.certificate</code> option value is no longer defined with <code>no\_log\=True</code> \([https\://github\.com/ansible\-collections/community\.general/pull/7698](https\://github\.com/ansible\-collections/community\.general/pull/7698)\)\.
-* keycloak\_realm\_key \- the <code>provider\_id</code> option now supports RSA encryption key usage \(value <code>rsa\-enc</code>\) \([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 <code>provider\_id</code> \([https\://github\.com/ansible\-collections/community\.general/pull/7789](https\://github\.com/ansible\-collections/community\.general/pull/7789)\)\.
-* mail \- add <code>Message\-ID</code> 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 <code>message\_id\_domain</code> option \([https\://github\.com/ansible\-collections/community\.general/pull/7765](https\://github\.com/ansible\-collections/community\.general/pull/7765)\)\.
-* redfish\_info \- add command <code>GetServiceIdentification</code> 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 <code>AddKeysToAgent</code> option to <code>yes</code> or <code>no</code> \([https\://github\.com/ansible\-collections/community\.general/pull/7703](https\://github\.com/ansible\-collections/community\.general/pull/7703)\)\.
-* ssh\_config \- new feature to set <code>IdentitiesOnly</code> option to <code>yes</code> or <code>no</code> \([https\://github\.com/ansible\-collections/community\.general/pull/7704](https\://github\.com/ansible\-collections/community\.general/pull/7704)\)\.
-* terraform \- add support for <code>diff\_mode</code> 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 \(<code>command\=PostResource</code> in <code>category\=Raw</code>\) without a specific action info \([https\://github\.com/ansible\-collections/community\.general/pull/7746](https\://github\.com/ansible\-collections/community\.general/pull/7746)\)\.
-
-<a id="community-grafana-2"></a>
-#### community\.grafana
-
-* Add Quickwit search engine datasource \([https\://quickwit\.io](https\://quickwit\.io)\)\.
-* Add parameter <em class="title-reference">org\_name</em> to <em class="title-reference">grafana\_dashboard</em>
-* Add parameter <em class="title-reference">org\_name</em> to <em class="title-reference">grafana\_datasource</em>
-* Add parameter <em class="title-reference">org\_name</em> to <em class="title-reference">grafana\_organization\_user</em>
-* 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
-
-<a id="community-hrobot-2"></a>
-#### community\.hrobot
-
-* robot inventory plugin \- the <code>filters</code> option has been renamed to <code>simple\_filters</code>\. The old name still works until community\.hrobot 2\.0\.0\. Then it will change to allow more complex filtering with the <code>community\.library\_inventory\_filtering\_v1</code> collection\'s functionality \([https\://github\.com/ansible\-collections/community\.hrobot/pull/94](https\://github\.com/ansible\-collections/community\.hrobot/pull/94)\)\.
-
-<a id="community-postgresql-2"></a>
-#### community\.postgresql
-
-* postgresql\_db \- add the <code>comment</code> argument \([https\://github\.com/ansible\-collections/community\.postgresql/issues/614](https\://github\.com/ansible\-collections/community\.postgresql/issues/614)\)\.
-* postgresql\_ext \- add the <code>comment</code> argument \([https\://github\.com/ansible\-collections/community\.postgresql/issues/354](https\://github\.com/ansible\-collections/community\.postgresql/issues/354)\)\.
-* postgresql\_publication \- add the <code>comment</code> argument \([https\://github\.com/ansible\-collections/community\.postgresql/issues/354](https\://github\.com/ansible\-collections/community\.postgresql/issues/354)\)\.
-* postgresql\_schema \- add the <code>comment</code> argument \([https\://github\.com/ansible\-collections/community\.postgresql/issues/354](https\://github\.com/ansible\-collections/community\.postgresql/issues/354)\)\.
-* postgresql\_subscription \- add the <code>comment</code> argument \([https\://github\.com/ansible\-collections/community\.postgresql/issues/354](https\://github\.com/ansible\-collections/community\.postgresql/issues/354)\)\.
-* postgresql\_tablespace \- add the <code>comment</code> argument \([https\://github\.com/ansible\-collections/community\.postgresql/issues/354](https\://github\.com/ansible\-collections/community\.postgresql/issues/354)\)\.
-
-<a id="community-routeros-4"></a>
-#### community\.routeros
-
-* api\_info\, api\_modify \- add <code>interface ovpn\-client</code> 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 <code>radius</code> 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 <code>routing rule</code> 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 <code>routing bgp template</code> \([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 <code>tx\-power</code> attribute in <code>interface wireless</code> \([https\://github\.com/ansible\-collections/community\.routeros/pull/239](https\://github\.com/ansible\-collections/community\.routeros/pull/239)\)\.
-* api\_info\, api\_modify \- removed <code>host</code> primary key in <code>tool netwatch</code> 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 <code>interface wifiwave2</code> \([https\://github\.com/ansible\-collections/community\.routeros/pull/226](https\://github\.com/ansible\-collections/community\.routeros/pull/226)\)\.
-
-<a id="community-vmware-4"></a>
-#### 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 <em class="title-reference">installer\_options</em> 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)\)\.
-
-<a id="community-zabbix"></a>
-#### 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
-
-<a id="dellemc-enterprise-sonic"></a>
-#### 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)\)\.
-
-<a id="dellemc-openmanage-1"></a>
-#### dellemc\.openmanage
-
-* For idrac\_certificate role\, added support for import operation of <em class="title-reference">HTTPS</em> certificate with the SSL key\.
-* For idrac\_certificates module\, below enhancements are made\: Added support for import operation of <em class="title-reference">HTTPS</em> certificate with the SSL key\. The <em class="title-reference">email\_address</em> has been made as an optional parameter\.
-* For idrac\_gather\_facts role\, added storage controller details in the role output\.
-
-<a id="grafana-grafana-1"></a>
-#### 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)
-
-<a id="ibm-storage-virtualize-2"></a>
-#### 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\'\.
-
-<a id="netapp-ontap-4"></a>
-#### netapp\.ontap
-
-* na\_ontap\_cifs\_server \- new option <em class="title-reference">lm\_compatibility\_level</em> added in REST\, requires ONTAP 9\.8 or later\.
-* na\_ontap\_cluster \- new option <em class="title-reference">certificate\.uuid</em> 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 <em class="title-reference">syslog</em>\, <em class="title-reference">port</em>\, <em class="title-reference">transport</em>\, <em class="title-reference">message\_format</em>\, <em class="title-reference">timestamp\_format\_override</em> and <em class="title-reference">hostname\_format\_override</em> added in REST\, requires ONTAP 9\.12\.1 or later\.
-* na\_ontap\_s3\_services \- create\, modify S3 service returns <em class="title-reference">s3\_service\_info</em> in module output\.
-* na\_ontap\_snapmirror \- updated resync and resume operation for synchronous snapmirror relationship in REST\.
-
-<a id="netbox-netbox-3"></a>
-#### 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)\)
-
-<a id="purestorage-flasharray-2"></a>
-#### purestorage\.flasharray
-
-* all \- <code>distro</code> 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
-
-<a id="purestorage-flashblade-3"></a>
-#### purestorage\.flashblade
-
-* purefb\_bucket \- Add support for public buckets
-* purefb\_bucket \- From REST 2\.12 the <em class="title-reference">mode</em> parameter default changes to <em class="title-reference">multi\-site\-writable</em>\.
-* 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 <code>hard\_limit</code> and <code>default\_hard\_limit</code>
-
-<a id="vultr-cloud"></a>
-#### 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 <code>default</code> 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 <code>user\_scheme</code> 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)\)\.
-
-<a id="deprecated-features-3"></a>
-### Deprecated Features
-
-<a id="community-dns-5"></a>
-#### community\.dns
-
-* hetzner\_dns\_records and hosttech\_dns\_records inventory plugins \- the <code>filters</code> option has been renamed to <code>simple\_filters</code>\. 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)\)\.
-
-<a id="community-docker-8"></a>
-#### community\.docker
-
-* docker\_container \- the default <code>ignore</code> for the <code>image\_name\_mismatch</code> parameter has been deprecated and will switch to <code>recreate</code> 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)\)\.
-
-<a id="community-general-12"></a>
-#### community\.general
-
-* consul\_acl \- the module has been deprecated and will be removed in community\.general 10\.0\.0\. <code>consul\_token</code> and <code>consul\_policy</code> can be used instead \([https\://github\.com/ansible\-collections/community\.general/pull/7901](https\://github\.com/ansible\-collections/community\.general/pull/7901)\)\.
-
-<a id="community-hrobot-3"></a>
-#### community\.hrobot
-
-* robot inventory plugin \- the <code>filters</code> option has been renamed to <code>simple\_filters</code>\. 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)\)\.
-
-<a id="security-fixes-1"></a>
-### Security Fixes
-
-<a id="ansible-core-8"></a>
-#### Ansible\-core
-
-* ANSIBLE\_NO\_LOG \- Address issue where ANSIBLE\_NO\_LOG was ignored \(CVE\-2024\-0690\)
-
-<a id="bugfixes-3"></a>
-### Bugfixes
-
-<a id="ansible-core-9"></a>
-#### Ansible\-core
-
-* Run all handlers with the same <code>listen</code> topic\, even when notified from another handler \([https\://github\.com/ansible/ansible/issues/82363](https\://github\.com/ansible/ansible/issues/82363)\)\.
-* <code>ansible\-galaxy role import</code> \- fix using the <code>role\_name</code> in a standalone role\'s <code>galaxy\_info</code> metadata by disabling automatic removal of the <code>ansible\-role\-</code> prefix\. This matches the behavior of the Galaxy UI which also no longer implicitly removes the <code>ansible\-role\-</code> prefix\. Use the <code>\-\-role\-name</code> option or add a <code>role\_name</code> to the <code>galaxy\_info</code> dictionary in the role\'s <code>meta/main\.yml</code> to use an alternate role name\.
-* <code>ansible\-test sanity \-\-test runtime\-metadata</code> \- add <code>action\_plugin</code> 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 <code>ansible\.utils\.path\.unfrackpath</code> 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 <code>public</code> setting is now determined once\, at role instantiation\.
-* roles\, the <code>static</code> property is now correctly set\, this will fix issues with <code>public</code> and <code>DEFAULT\_PRIVATE\_ROLE\_VARS</code> controls on exporting vars\.
-* unsafe data \- Address an incompatibility when iterating or getting a single index from <code>AnsibleUnsafeBytes</code>
-* unsafe data \- Address an incompatibility with <code>AnsibleUnsafeText</code> and <code>AnsibleUnsafeBytes</code> when pickling with <code>protocol\=0</code>
-* unsafe data \- Enable directly using <code>AnsibleUnsafeText</code> with Python <code>pathlib</code> \([https\://github\.com/ansible/ansible/issues/82414](https\://github\.com/ansible/ansible/issues/82414)\)
-
-<a id="amazon-aws-8"></a>
-#### 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 <code>overwrite\=latest</code> \([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 <code>Content\-Type</code> in metadata\, this module \(since 6\.0\.0\) erroneously set the <code>Content\-Type</code> to <code>None</code> causing the put to fail\. Fix now correctly honours the specified <code>Content\-Type</code> \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1881](https\://github\.com/ansible\-collections/amazon\.aws/issues/1881)\)\.
-
-<a id="check-point-mgmt-1"></a>
-#### check\_point\.mgmt
-
-* httpapi/checkpoint\.py \- Raise a fatal error if login wasn\'t successful\.
-
-<a id="cisco-meraki-2"></a>
-#### cisco\.meraki
-
-* Adding <em class="title-reference">smartquotes \= False</em> to <em class="title-reference">conf\.py</em> and romoving <em class="title-reference">\'</em> from rst files\.
-* Adding build\_ignore property to galaxy file\.
-* Adding support to ansible\.utils \>\=3\.0
-
-<a id="community-aws-4"></a>
-#### community\.aws
-
-* aws\_ssm \- disable <code>enable\-bracketed\-paste</code> 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)\)
-
-<a id="community-crypto-8"></a>
-#### 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 <code>cryptography</code> 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 \- <code>check\_consistency\=true</code> 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 \- <code>check\_consistency\=true</code> 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)\)\.
-
-<a id="community-digitalocean-1"></a>
-#### 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)\)\.
-
-<a id="community-dns-6"></a>
-#### community\.dns
-
-* Update Public Suffix List\.
-* wait\_for\_txt\, nameserver\_info\, nameserver\_record\_info \- when looking up nameservers for a domain\, do not treat <code>NXDOMAIN</code> as a fatal error \([https\://github\.com/ansible\-collections/community\.dns/pull/177](https\://github\.com/ansible\-collections/community\.dns/pull/177)\)\.
-
-<a id="community-docker-9"></a>
-#### community\.docker
-
-* Use <code>unix\:///var/run/docker\.sock</code> instead of the legacy <code>unix\://var/run/docker\.sock</code> as default for <code>docker\_host</code> \([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 <code>stderr</code> \([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 <code>community\.docker\.docker</code> 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 <code>ssl\_version</code> 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 <code>tls\_hostname</code> 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 <code>ssl\_version</code> and <code>tls\_hostname</code> 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)\)\.
-
-<a id="community-general-13"></a>
-#### community\.general
-
-* homebrew \- detect already installed formulae and casks using JSON output from <code>brew info</code> \([https\://github\.com/ansible\-collections/community\.general/issues/864](https\://github\.com/ansible\-collections/community\.general/issues/864)\)\.
-* incus connection plugin \- treats <code>inventory\_hostname</code> 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 <code>ipatokendisabled</code> as string but the <code>ipatokendisabled</code> 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 \- <code>mappers</code> 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\) <code>mappers</code> 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 <code>force</code> 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 <code>connection\.slave\-type</code> wired to <code>bond</code> and not with parameter <code>slave\_type</code> in case of connection type <code>wifi</code> \([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 <code>state\=template</code> 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)\)\.
-
-<a id="community-grafana-3"></a>
-#### community\.grafana
-
-* Add <em class="title-reference">grafana\_organiazion\_user</em> to <em class="title-reference">action\_groups\.grafana</em>
-* Fixed orgId handling in diff comparison for <em class="title-reference">grafana\_datasource</em> if using org\_name
-
-<a id="community-postgresql-3"></a>
-#### 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)\)\.
-
-<a id="community-sap-libs"></a>
-#### community\.sap\_libs
-
-* fixes failures in sanity test for all modules
-
-<a id="community-vmware-5"></a>
-#### community\.vmware
-
-* Fix InsecureRequestWarning for modules based on the VmwareRestClient module util when setting <code>validate\_certs</code> to <code>False</code> \([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)\)\.
-
-<a id="community-zabbix-1"></a>
-#### 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
-
-<a id="dellemc-enterprise-sonic-1"></a>
-#### 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)\)\.
-
-<a id="dellemc-openmanage-2"></a>
-#### dellemc\.openmanage
-
-* Fixed the issue for ignoring the environment variable <em class="title-reference">NO\_PROXY</em> 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 <em class="title-reference">email\_address</em> 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)\)
-
-<a id="fortinet-fortimanager-3"></a>
-#### 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
-
-<a id="infoblox-nios-modules-1"></a>
-#### 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)
-
-<a id="netapp-ontap-5"></a>
-#### netapp\.ontap
-
-* na\_ontap\_nfs \- fix error with <em class="title-reference">windows</em> 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 <em class="title-reference">type</em> to be case insensitive in REST\.
-
-<a id="netbox-netbox-4"></a>
-#### 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)\)
-
-<a id="purestorage-flasharray-3"></a>
-#### 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
-
-<a id="purestorage-flashblade-4"></a>
-#### purestorage\.flashblade
-
-* purefb\_info \- Added missing object lock retention details if enabledd
-
-<a id="vultr-cloud-1"></a>
-#### 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 <code>name</code> 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)\)\.
-
-<a id="known-issues"></a>
-### Known Issues
-
-<a id="dellemc-openmanage-3"></a>
-#### 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 <code>ome\_network\_attributes</code>\, 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 <code>power\_cap</code> is not within the supported range of 0 to 32767\, <code>Unable to complete the request because PowerCap does not exist or is not applicable for the resource URI\.</code>
-* 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\.
-
-<a id="new-plugins-3"></a>
-### New Plugins
-
-<a id="connection"></a>
-#### Connection
-
-* community\.general\.incus \- Run tasks in Incus instances via the Incus CLI\.
-
-<a id="filter-3"></a>
-#### Filter
-
-* community\.general\.from\_ini \- Converts INI text input into a dictionary
-* community\.general\.to\_ini \- Converts a dictionary to the INI file format
-
-<a id="lookup"></a>
-#### Lookup
-
-* community\.general\.github\_app\_access\_token \- Obtain short\-lived Github App Access tokens
-
-<a id="new-modules-3"></a>
-### New Modules
-
-<a id="check-point-mgmt-2"></a>
-#### 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\.
-
-<a id="community-digitalocean-2"></a>
-#### community\.digitalocean
-
-* community\.digitalocean\.digital\_ocean\_project\_resource\_info \- Gather information about DigitalOcean Project Resources
-
-<a id="community-docker-10"></a>
-#### 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
-
-<a id="community-general-14"></a>
-#### 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
-
-<a id="dellemc-enterprise-sonic-2"></a>
-#### 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
-
-<a id="dellemc-openmanage-4"></a>
-#### dellemc\.openmanage
-
-* dellemc\.openmanage\.idrac\_license \- This module allows to import\, export\, and delete licenses on iDRAC\.
-
-<a id="infoblox-nios-modules-2"></a>
-#### 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
-
-<a id="netapp-ontap-6"></a>
-#### 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\.
-
-<a id="purestorage-flashblade-5"></a>
-#### purestorage\.flashblade
-
-* purestorage\.flashblade\.purefb\_hardware \- Manage FlashBlade Hardware
-
-<a id="vultr-cloud-2"></a>
-#### vultr\.cloud
-
-* vultr\.cloud\.object\_storage \- Manages object storages on Vultr
-
-<a id="unchanged-collections-3"></a>
-### 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\)
-
-<a id="v9-1-0"></a>
-## v9\.1\.0
-
-- <a href="#release-summary-4">Release Summary</a>
-- <a href="#ansible-core-10">Ansible\-core</a>
-- <a href="#changed-collections-4">Changed Collections</a>
-- <a href="#minor-changes-4">Minor Changes</a>
- - <a href="#ansible-utils">ansible\.utils</a>
- - <a href="#ansible-windows-2">ansible\.windows</a>
- - <a href="#cisco-ios">cisco\.ios</a>
- - <a href="#cisco-ise-3">cisco\.ise</a>
- - <a href="#cisco-nxos">cisco\.nxos</a>
- - <a href="#community-general-15">community\.general</a>
- - <a href="#community-routeros-5">community\.routeros</a>
- - <a href="#community-windows-2">community\.windows</a>
- - <a href="#community-zabbix-2">community\.zabbix</a>
- - <a href="#dellemc-openmanage-5">dellemc\.openmanage</a>
- - <a href="#dellemc-powerflex-4">dellemc\.powerflex</a>
- - <a href="#f5networks-f5-modules-1">f5networks\.f5\_modules</a>
- - <a href="#google-cloud">google\.cloud</a>
- - <a href="#hetzner-hcloud-2">hetzner\.hcloud</a>
- - <a href="#inspur-ispim">inspur\.ispim</a>
- - <a href="#microsoft-ad-2">microsoft\.ad</a>
- - <a href="#purestorage-flasharray-4">purestorage\.flasharray</a>
- - <a href="#telekom-mms-icinga-director">telekom\_mms\.icinga\_director</a>
- - <a href="#theforeman-foreman">theforeman\.foreman</a>
-- <a href="#breaking-changes--porting-guide">Breaking Changes / Porting Guide</a>
- - <a href="#ansible-core-11">Ansible\-core</a>
-- <a href="#security-fixes-2">Security Fixes</a>
- - <a href="#ansible-core-12">Ansible\-core</a>
-- <a href="#bugfixes-4">Bugfixes</a>
- - <a href="#ansible-core-13">Ansible\-core</a>
- - <a href="#ansible-windows-3">ansible\.windows</a>
- - <a href="#arista-eos">arista\.eos</a>
- - <a href="#cisco-ios-1">cisco\.ios</a>
- - <a href="#cisco-iosxr">cisco\.iosxr</a>
- - <a href="#cisco-ise-4">cisco\.ise</a>
- - <a href="#cisco-meraki-3">cisco\.meraki</a>
- - <a href="#community-crypto-9">community\.crypto</a>
- - <a href="#community-dns-7">community\.dns</a>
- - <a href="#community-general-16">community\.general</a>
- - <a href="#community-vmware-6">community\.vmware</a>
- - <a href="#community-windows-3">community\.windows</a>
- - <a href="#community-zabbix-3">community\.zabbix</a>
- - <a href="#dellemc-openmanage-6">dellemc\.openmanage</a>
- - <a href="#hetzner-hcloud-3">hetzner\.hcloud</a>
- - <a href="#junipernetworks-junos">junipernetworks\.junos</a>
- - <a href="#microsoft-ad-3">microsoft\.ad</a>
- - <a href="#netapp-ontap-7">netapp\.ontap</a>
- - <a href="#purestorage-flasharray-5">purestorage\.flasharray</a>
- - <a href="#splunk-es">splunk\.es</a>
- - <a href="#theforeman-foreman-1">theforeman\.foreman</a>
- - <a href="#vultr-cloud-3">vultr\.cloud</a>
-- <a href="#known-issues-1">Known Issues</a>
- - <a href="#dellemc-openmanage-7">dellemc\.openmanage</a>
-- <a href="#new-plugins-4">New Plugins</a>
- - <a href="#filter-4">Filter</a>
- - <a href="#lookup-1">Lookup</a>
- - <a href="#test">Test</a>
-- <a href="#new-modules-4">New Modules</a>
- - <a href="#cisco-ios-2">cisco\.ios</a>
- - <a href="#community-general-17">community\.general</a>
- - <a href="#purestorage-flasharray-6">purestorage\.flasharray</a>
-- <a href="#unchanged-collections-4">Unchanged Collections</a>
-
-<a id="release-summary-4"></a>
-### Release Summary
-
-Release Date\: 2023\-12\-05
-
-[Porting Guide](https\://docs\.ansible\.com/ansible/devel/porting\_guides\.html)
-
-<a id="ansible-core-10"></a>
-### 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\.
-
-<a id="changed-collections-4"></a>
-### 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 | |
-
-<a id="minor-changes-4"></a>
-### Minor Changes
-
-<a id="ansible-utils"></a>
-#### 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)\)\.
-
-<a id="ansible-windows-2"></a>
-#### 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 <code>scope\_name</code> that allows file shares to be scoped for Windows Server failover cluster roles\.
-
-<a id="cisco-ios"></a>
-#### 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
-
-<a id="cisco-ise-3"></a>
-#### cisco\.ise
-
-* Services included configuration\, edda\, dataconnect\_services\, subscriber\.
-
-<a id="cisco-nxos"></a>
-#### 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)\)\.
-
-<a id="community-general-15"></a>
-#### community\.general
-
-* bitwarden lookup plugin \- when looking for items using an item ID\, the item is now accessed directly with <code>bw get item</code> 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 <code>add\_mode</code> option \([https\://github\.com/ansible\-collections/community\.general/pull/7260](https\://github\.com/ansible\-collections/community\.general/pull/7260)\)\.
-* git\_config \- the <code>after</code> and <code>before</code> fields in the <code>diff</code> 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 <code>ca\_path</code> option \([https\://github\.com/ansible\-collections/community\.general/pull/7472](https\://github\.com/ansible\-collections/community\.general/pull/7472)\)\.
-* gitlab modules \- remove duplicate <code>gitlab</code> 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 <code>passkey</code> choice to <code>ipauserauthtype</code> 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 <code>idp</code> and <code>passkey</code> choice to <code>ipauserauthtype</code> parameter\'s choices \([https\://github\.com/ansible\-collections/community\.general/pull/7589](https\://github\.com/ansible\-collections/community\.general/pull/7589)\)\.
-* irc \- add <code>validate\_certs</code> option\, and rename <code>use\_ssl</code> to <code>use\_tls</code>\, while keeping <code>use\_ssl</code> as an alias\. The default value for <code>validate\_certs</code> is <code>false</code> for backwards compatibility\. We recommend to every user of this module to explicitly set <code>use\_tls\=true</code> and <em class="title-reference">validate\_certs\=true\`</em> 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 <code>krbPrincipalAttribute</code> \([https\://github\.com/ansible\-collections/community\.general/pull/7538](https\://github\.com/ansible\-collections/community\.general/pull/7538)\)\.
-* lvol \- change <code>pvs</code> 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 <code>Instance not found</code> errors\, to avoid false detection on unrelated errors such as <code>/usr/bin/python3\: not found</code> \([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 <code>OPENPGPKEY</code>\, <code>SMIMEA</code>\, and <code>SSHFP</code> \([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 <code>loopback</code> \([https\://github\.com/ansible\-collections/community\.general/issues/6572](https\://github\.com/ansible\-collections/community\.general/issues/6572)\)\.
-* nmcli \- allow for <code>infiniband</code> slaves of <code>bond</code> 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 <code>MTU</code> for <code>infiniband</code> and <code>bond</code> 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 <code>timestamp</code> and <code>preserve</code> 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 <code>template</code> value to the <code>state</code> 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 <code>update</code> 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 <code>template</code> value to the <code>state</code> 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 <code>hookscript</code> 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 <code>ostype</code> 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 <code>BootProgress</code> property when getting <code>Systems</code> info \([https\://github\.com/ansible\-collections/community\.general/pull/7626](https\://github\.com/ansible\-collections/community\.general/pull/7626)\)\.
-* ssh\_config \- adds <code>controlmaster</code>\, <code>controlpath</code> and <code>controlpersist</code> parameters \([https\://github\.com/ansible\-collections/community\.general/pull/7456](https\://github\.com/ansible\-collections/community\.general/pull/7456)\)\.
-
-<a id="community-routeros-5"></a>
-#### community\.routeros
-
-* api\_info\, api\_modify \- add missing DoH parameters <code>doh\-max\-concurrent\-queries</code>\, <code>doh\-max\-server\-connections</code>\, and <code>doh\-timeout</code> to the <code>ip dns</code> 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 <code>address\-list</code>\, <code>address\-list\-timeout</code>\, <code>randomise\-ports</code>\, and <code>realm</code> to subpaths of the <code>ip firewall</code> 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 <code>interface wireless</code> parameter <code>running</code> 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 <code>false</code> for the <code>disabled</code> 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 <code>comment</code> attribute to <code>/routing id</code> \([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 <code>routing bgp connection</code> 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 <code>/tool e\-mail</code> 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 <code>/ip traffic\-flow target</code> a multiple value attribute \([https\://github\.com/ansible\-collections/community\.routeros/pull/234](https\://github\.com/ansible\-collections/community\.routeros/pull/234)\)\.
-
-<a id="community-windows-2"></a>
-#### community\.windows
-
-* Set minimum supported Ansible version to 2\.14 to align with the versions still supported by Ansible\.
-
-<a id="community-zabbix-2"></a>
-#### community\.zabbix
-
-* Added zabbix\_group\_events\_info module
-* action module \- Added notify\_if\_canceled property
-* agent and proxy roles \- Set default <em class="title-reference">zabbix\_api\_server\_port</em> to 80 or 443 based on <em class="title-reference">zabbix\_api\_use\_ssl</em>
-* 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)\)
-
-<a id="dellemc-openmanage-5"></a>
-#### dellemc\.openmanage
-
-* Ansible lint issues are fixed for the collections\.
-* Module <code>redfish\_storage\_volume</code> is enhanced to support reboot options and job tracking operation\.
-
-<a id="dellemc-powerflex-4"></a>
-#### dellemc\.powerflex
-
-* Added support for PowerFlex Denver version\(4\.5\.x\) to TB and Config role\.
-
-<a id="f5networks-f5-modules-1"></a>
-#### f5networks\.f5\_modules
-
-* bigiq\_device\_discovery \- Changes in documentation related to Provider block
-
-<a id="google-cloud"></a>
-#### 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\.
-
-<a id="hetzner-hcloud-2"></a>
-#### hetzner\.hcloud
-
-* Add the <em class="title-reference">hetzner\.hcloud\.all</em> group to configure all the modules using <em class="title-reference">module\_defaults</em>\.
-* Allow to set the <em class="title-reference">api\_endpoint</em> module argument using the <em class="title-reference">HCLOUD\_ENDPOINT</em> environment variable\.
-* Removed the <em class="title-reference">hcloud\_</em> prefix from all modules names\, e\.g\. <em class="title-reference">hetzner\.hcloud\.hcloud\_firewall</em> was renamed to <em class="title-reference">hetzner\.hcloud\.firewall</em>\. Old module names will continue working\.
-* Renamed the <em class="title-reference">endpoint</em> module argument to <em class="title-reference">api\_endpoint</em>\, backward compatibility is maintained using an alias\.
-* hcloud inventory \- Add the <em class="title-reference">api\_endpoint</em> option\.
-* hcloud inventory \- Deprecate the <em class="title-reference">api\_token\_env</em> option\, suggest using a lookup plugin \(<em class="title-reference">\{\{ lookup\(\'ansible\.builtin\.env\'\, \'YOUR\_ENV\_VAR\'\) \}\}</em>\) or use the well\-known <em class="title-reference">HCLOUD\_TOKEN</em> environment variable name\.
-* hcloud inventory \- Rename the <em class="title-reference">token\_env</em> option to <em class="title-reference">api\_token\_env</em>\, use aliases for backward compatibility\.
-* hcloud inventory \- Rename the <em class="title-reference">token</em> option to <em class="title-reference">api\_token</em>\, use aliases for backward compatibility\.
-
-<a id="inspur-ispim"></a>
-#### inspur\.ispim
-
-* Modify edit\_smtp\_com and add description information\.
-
-<a id="microsoft-ad-2"></a>
-#### microsoft\.ad
-
-* Make <code>name</code> an optional parameter for the AD modules\. Either <code>name</code> or <code>identity</code> needs to be set with their respective behaviours\. If creating a new AD user and only <code>identity</code> 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
-
-<a id="purestorage-flasharray-4"></a>
-#### 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 <em class="title-reference">hosts</em> response
-* purefa\_info \- Subset <em class="title-reference">pgroups</em> now also provides a new dict called <em class="title-reference">deleted\_pgroups</em>
-* purefa\_offload \- Remove <em class="title-reference">nfs</em> as an option when Purity//FA 6\.6\.0 or higher is detected
-* purefa\_snap \- Add support for suffix on remote offload snapshots
-
-<a id="telekom-mms-icinga-director"></a>
-#### 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)\)
-
-<a id="theforeman-foreman"></a>
-#### theforeman\.foreman
-
-* content\_view\_publish role \- allow passing <code>async</code> and <code>poll</code> to the module \([https\://github\.com/theforeman/foreman\-ansible\-modules/pull/1676](https\://github\.com/theforeman/foreman\-ansible\-modules/pull/1676)\)
-* convert2rhel role \- install <code>convert2rhel</code> from <code>cdn\-public\.redhat\.com</code>\, dropping the requirement of a custom CA cert
-
-<a id="breaking-changes--porting-guide"></a>
-### Breaking Changes / Porting Guide
-
-<a id="ansible-core-11"></a>
-#### Ansible\-core
-
-* assert \- Nested templating may result in an inability for the conditional to be evaluated\. See the porting guide for more information\.
-
-<a id="security-fixes-2"></a>
-### Security Fixes
-
-<a id="ansible-core-12"></a>
-#### Ansible\-core
-
-* templating \- Address issues where internal templating can cause unsafe variables to lose their unsafe designation \(CVE\-2023\-5764\)
-
-<a id="bugfixes-4"></a>
-### Bugfixes
-
-<a id="ansible-core-13"></a>
-#### Ansible\-core
-
-* Fix issue where an <code>include\_tasks</code> handler in a role was not able to locate a file in <code>tasks/</code> when <code>tasks\_from</code> was used as a role entry point and <code>main\.yml</code> 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 <code>\-d\|\-\-directory</code> 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 <code>force\_handlers</code> 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 <code>no\_log\_module\_parameter\=\'a\'</code> will no longer hide <code>changed\=False</code> 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\.
-
-<a id="ansible-windows-3"></a>
-#### ansible\.windows
-
-* Process\.cs \- Fix up the <code>ProcessCreationFlags\.CreateProtectedProcess</code> typo in the enum name
-* setup \- Fix up typo <code>collection \-\> collect</code> 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)
-
-<a id="arista-eos"></a>
-#### arista\.eos
-
-* correct the reference of string attribute \'reference\_bandwith\'\.
-
-<a id="cisco-ios-1"></a>
-#### 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
-
-<a id="cisco-iosxr"></a>
-#### 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)\)
-
-<a id="cisco-ise-4"></a>
-#### cisco\.ise
-
-* Added missing import re in endpoint module
-* Updated to use ciscoisesdk v2\.1\.1 or newer fixing ciscoisesdk problem\.
-
-<a id="cisco-meraki-3"></a>
-#### cisco\.meraki
-
-* Adding <em class="title-reference">network\_clients\_info</em> and <em class="title-reference">network\_client\_info</em>\.
-* Adding <em class="title-reference">platform\_meraki\.rst</em> to docs\.
-* Adding <em class="title-reference">product\_types</em> for update request on networks\.
-* Idempotency bugs fixed in devices\_switch\_ports\.
-* Parameter\`organization\_id\` change to <em class="title-reference">organizationId</em> organizations\_claim\.
-* Parameter\`organization\_id\` change to <em class="title-reference">organizationId</em> organizations\_clone\.
-* Parameter\`organization\_id\` change to <em class="title-reference">organizationId</em> organizations\_inventory\_claim\.
-* Parameter\`organization\_id\` change to <em class="title-reference">organizationId</em> organizations\_inventory\_onboarding\_cloud\_monitoring\_export\_events\.
-* Parameter\`organization\_id\` change to <em class="title-reference">organizationId</em> organizations\_inventory\_onboarding\_cloud\_monitoring\_prepare\.
-* Parameter\`organization\_id\` change to <em class="title-reference">organizationId</em> organizations\_inventory\_release\.
-* Parameter\`organization\_id\` change to <em class="title-reference">organizationId</em> organizations\_licenses\_assign\_seats\.
-* Parameter\`organization\_id\` change to <em class="title-reference">organizationId</em> organizations\_licenses\_move\.
-* Parameter\`organization\_id\` change to <em class="title-reference">organizationId</em> organizations\_licenses\_move\_seats\.
-* Parameter\`organization\_id\` change to <em class="title-reference">organizationId</em> organizations\_licenses\_renew\_seats\.
-* Parameter\`organization\_id\` change to <em class="title-reference">organizationId</em> organizations\_licensing\_coterm\_licenses\_move\.
-* Parameter\`organization\_id\` change to <em class="title-reference">organizationId</em> organizations\_networks\_combine\.
-* Parameter\`organization\_id\` change to <em class="title-reference">organizationId</em> organizations\_switch\_devices\_clone\.
-* Parameter\`organization\_id\` change to <em class="title-reference">organizationId</em> organizations\_users\.
-* Removing logs in meraki\.py\.
-* networks\_syslog\_servers is now just an Update action to API\.
-
-<a id="community-crypto-9"></a>
-#### 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)\)\.
-
-<a id="community-dns-7"></a>
-#### 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)\)\.
-
-<a id="community-general-16"></a>
-#### 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 <code>address\_family</code> when changing <code>option\=method</code> \([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 <code>ssl\.wrap\_socket</code> 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 <code>/</code> 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 <code>ssl\.wrap\_socket</code> 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 <code>stdout</code> and <code>stderr</code> \([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)\)\.
-
-<a id="community-vmware-6"></a>
-#### 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)\)\.
-
-<a id="community-windows-3"></a>
-#### 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 <code>Invoke\-Expression</code> 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)\)\.
-
-<a id="community-zabbix-3"></a>
-#### 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
-
-<a id="dellemc-openmanage-6"></a>
-#### 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)\)\.
-
-<a id="hetzner-hcloud-3"></a>
-#### hetzner\.hcloud
-
-* hcloud inventory \- Ensure the API client use a new cache for every <em>cached session</em>\.
-
-<a id="junipernetworks-junos"></a>
-#### junipernetworks\.junos
-
-* fix to gather l2\_interfaces facts with default port\-mode access\.
-
-<a id="microsoft-ad-3"></a>
-#### microsoft\.ad
-
-* debug\_ldap\_client \- handle failures when attempting to get the krb5 context and default CCache rather than fail with a traceback
-
-<a id="netapp-ontap-7"></a>
-#### netapp\.ontap
-
-* na\_ontap\_ems\_destination \- fix field error with <em class="title-reference">certificate\.name</em> 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\.
-
-<a id="purestorage-flasharray-5"></a>
-#### 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 <em class="title-reference">target</em> is specified as well as other objects\, such as <em class="title-reference">volumes</em> or <em class="title-reference">hosts</em>
-* purefa\_pgsched \- Fixed issue with disabling schedules
-* purefa\_pgsnap \- Fixed incorrect parameter name
-
-<a id="splunk-es"></a>
-#### splunk\.es
-
-* Fixed argspec validation for plugins with empty task attributes when run with Ansible 2\.9\.
-
-<a id="theforeman-foreman-1"></a>
-#### 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)\)
-
-<a id="vultr-cloud-3"></a>
-#### 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)\)\.
-
-<a id="known-issues-1"></a>
-### Known Issues
-
-<a id="dellemc-openmanage-7"></a>
-#### 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 <code>ome\_network\_attributes</code>\, 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 <code>power\_cap</code> is not within the supported range of 0 to 32767\, <code>Unable to complete the request because PowerCap does not exist or is not applicable for the resource URI\.</code>
-* 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\.
-
-<a id="new-plugins-4"></a>
-### New Plugins
-
-<a id="filter-4"></a>
-#### Filter
-
-* ansible\.utils\.fact\_diff \- Find the difference between currently set facts
-
-<a id="lookup-1"></a>
-#### Lookup
-
-* community\.general\.onepassword\_doc \- Fetch documents stored in 1Password
-
-<a id="test"></a>
-#### Test
-
-* community\.general\.fqdn\_valid \- Validates fully\-qualified domain names against RFC 1123
-
-<a id="new-modules-4"></a>
-### New Modules
-
-<a id="cisco-ios-2"></a>
-#### 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\.
-
-<a id="community-general-17"></a>
-#### 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
-
-<a id="purestorage-flasharray-6"></a>
-#### purestorage\.flasharray
-
-* purestorage\.flasharray\.purefa\_hardware \- Manage FlashArray Hardware Identification
-
-<a id="unchanged-collections-4"></a>
-### 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\)
-
-<a id="v9-0-1"></a>
-## v9\.0\.1
-
-- <a href="#release-summary-5">Release Summary</a>
-- <a href="#ansible-core-14">Ansible\-core</a>
-- <a href="#bugfixes-5">Bugfixes</a>
-- <a href="#unchanged-collections-5">Unchanged Collections</a>
-
-<a id="release-summary-5"></a>
-### Release Summary
-
-Release Date\: 2023\-11\-21
-
-[Porting Guide](https\://docs\.ansible\.com/ansible/devel/porting\_guides\.html)
-
-<a id="ansible-core-14"></a>
-### 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\.
-
-<a id="bugfixes-5"></a>
-### Bugfixes
-
-* Fix the Python package metadata in <code>setup\.cfg</code> to require Python <code>\>\=3\.10</code> to ensure that pip can properly install <code>ansible</code> on older Python versions\.
-
-<a id="unchanged-collections-5"></a>
-### 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\)
-
-<a id="v9-0-0"></a>
-## v9\.0\.0
-
-- <a href="#release-summary-6">Release Summary</a>
-- <a href="#removed-collections">Removed Collections</a>
-- <a href="#added-collections-1">Added Collections</a>
-- <a href="#ansible-core-15">Ansible\-core</a>
-- <a href="#included-collections">Included Collections</a>
-- <a href="#major-changes-3">Major Changes</a>
- - <a href="#amazon-aws-9">amazon\.aws</a>
- - <a href="#chocolatey-chocolatey">chocolatey\.chocolatey</a>
- - <a href="#cisco-ios-3">cisco\.ios</a>
- - <a href="#cisco-nxos-1">cisco\.nxos</a>
- - <a href="#cloudscale-ch-cloud">cloudscale\_ch\.cloud</a>
- - <a href="#community-mysql-3">community\.mysql</a>
- - <a href="#community-postgresql-4">community\.postgresql</a>
- - <a href="#community-sap">community\.sap</a>
- - <a href="#community-vmware-7">community\.vmware</a>
- - <a href="#fortinet-fortimanager-4">fortinet\.fortimanager</a>
- - <a href="#fortinet-fortios-4">fortinet\.fortios</a>
- - <a href="#grafana-grafana-2">grafana\.grafana</a>
-- <a href="#minor-changes-5">Minor Changes</a>
- - <a href="#ansible-core-16">Ansible\-core</a>
- - <a href="#amazon-aws-10">amazon\.aws</a>
- - <a href="#ansible-netcommon">ansible\.netcommon</a>
- - <a href="#ansible-utils-1">ansible\.utils</a>
- - <a href="#ansible-windows-4">ansible\.windows</a>
- - <a href="#arista-eos-1">arista\.eos</a>
- - <a href="#check-point-mgmt-3">check\_point\.mgmt</a>
- - <a href="#chocolatey-chocolatey-1">chocolatey\.chocolatey</a>
- - <a href="#cisco-aci-2">cisco\.aci</a>
- - <a href="#cisco-ios-4">cisco\.ios</a>
- - <a href="#cisco-iosxr-1">cisco\.iosxr</a>
- - <a href="#cisco-meraki-4">cisco\.meraki</a>
- - <a href="#cisco-mso-2">cisco\.mso</a>
- - <a href="#cisco-nxos-2">cisco\.nxos</a>
- - <a href="#community-aws-5">community\.aws</a>
- - <a href="#community-ciscosmb">community\.ciscosmb</a>
- - <a href="#community-crypto-10">community\.crypto</a>
- - <a href="#community-digitalocean-3">community\.digitalocean</a>
- - <a href="#community-dns-8">community\.dns</a>
- - <a href="#community-general-18">community\.general</a>
- - <a href="#community-grafana-4">community\.grafana</a>
- - <a href="#community-libvirt">community\.libvirt</a>
- - <a href="#community-mysql-4">community\.mysql</a>
- - <a href="#community-postgresql-5">community\.postgresql</a>
- - <a href="#community-routeros-6">community\.routeros</a>
- - <a href="#community-vmware-8">community\.vmware</a>
- - <a href="#community-windows-4">community\.windows</a>
- - <a href="#community-zabbix-4">community\.zabbix</a>
- - <a href="#containers-podman-6">containers\.podman</a>
- - <a href="#dellemc-enterprise-sonic-3">dellemc\.enterprise\_sonic</a>
- - <a href="#dellemc-openmanage-8">dellemc\.openmanage</a>
- - <a href="#dellemc-powerflex-5">dellemc\.powerflex</a>
- - <a href="#dellemc-unity">dellemc\.unity</a>
- - <a href="#f5networks-f5-modules-2">f5networks\.f5\_modules</a>
- - <a href="#fortinet-fortimanager-5">fortinet\.fortimanager</a>
- - <a href="#google-cloud-1">google\.cloud</a>
- - <a href="#grafana-grafana-3">grafana\.grafana</a>
- - <a href="#hetzner-hcloud-4">hetzner\.hcloud</a>
- - <a href="#inspur-ispim-1">inspur\.ispim</a>
- - <a href="#junipernetworks-junos-1">junipernetworks\.junos</a>
- - <a href="#lowlydba-sqlserver-3">lowlydba\.sqlserver</a>
- - <a href="#microsoft-ad-4">microsoft\.ad</a>
- - <a href="#netapp-ontap-8">netapp\.ontap</a>
- - <a href="#netbox-netbox-5">netbox\.netbox</a>
- - <a href="#ovirt-ovirt">ovirt\.ovirt</a>
- - <a href="#purestorage-flasharray-7">purestorage\.flasharray</a>
- - <a href="#purestorage-flashblade-6">purestorage\.flashblade</a>
- - <a href="#purestorage-fusion-1">purestorage\.fusion</a>
- - <a href="#sensu-sensu-go">sensu\.sensu\_go</a>
- - <a href="#t-systems-mms-icinga-director">t\_systems\_mms\.icinga\_director</a>
- - <a href="#theforeman-foreman-2">theforeman\.foreman</a>
- - <a href="#vultr-cloud-4">vultr\.cloud</a>
- - <a href="#vyos-vyos">vyos\.vyos</a>
-- <a href="#breaking-changes--porting-guide-1">Breaking Changes / Porting Guide</a>
- - <a href="#ansible-core-17">Ansible\-core</a>
- - <a href="#amazon-aws-11">amazon\.aws</a>
- - <a href="#community-aws-6">community\.aws</a>
- - <a href="#community-general-19">community\.general</a>
- - <a href="#community-hashi-vault-3">community\.hashi\_vault</a>
- - <a href="#community-vmware-9">community\.vmware</a>
- - <a href="#dellemc-enterprise-sonic-4">dellemc\.enterprise\_sonic</a>
- - <a href="#hetzner-hcloud-5">hetzner\.hcloud</a>
-- <a href="#deprecated-features-4">Deprecated Features</a>
- - <a href="#ansible-core-18">Ansible\-core</a>
- - <a href="#amazon-aws-12">amazon\.aws</a>
- - <a href="#ansible-netcommon-1">ansible\.netcommon</a>
- - <a href="#ansible-windows-5">ansible\.windows</a>
- - <a href="#cisco-ios-5">cisco\.ios</a>
- - <a href="#cisco-iosxr-2">cisco\.iosxr</a>
- - <a href="#community-ciscosmb-1">community\.ciscosmb</a>
- - <a href="#community-crypto-11">community\.crypto</a>
- - <a href="#community-general-20">community\.general</a>
- - <a href="#community-postgresql-6">community\.postgresql</a>
- - <a href="#community-sap-1">community\.sap</a>
- - <a href="#community-windows-5">community\.windows</a>
- - <a href="#junipernetworks-junos-2">junipernetworks\.junos</a>
- - <a href="#microsoft-ad-5">microsoft\.ad</a>
- - <a href="#purestorage-fusion-2">purestorage\.fusion</a>
- - <a href="#t-systems-mms-icinga-director-1">t\_systems\_mms\.icinga\_director</a>
-- <a href="#removed-features-previously-deprecated">Removed Features \(previously deprecated\)</a>
- - <a href="#ansible-core-19">Ansible\-core</a>
- - <a href="#ansible-windows-6">ansible\.windows</a>
- - <a href="#cisco-ios-6">cisco\.ios</a>
- - <a href="#cisco-nxos-3">cisco\.nxos</a>
- - <a href="#community-ciscosmb-2">community\.ciscosmb</a>
- - <a href="#community-general-21">community\.general</a>
- - <a href="#community-hashi-vault-4">community\.hashi\_vault</a>
- - <a href="#community-vmware-10">community\.vmware</a>
- - <a href="#community-windows-6">community\.windows</a>
- - <a href="#dellemc-openmanage-9">dellemc\.openmanage</a>
- - <a href="#hetzner-hcloud-6">hetzner\.hcloud</a>
-- <a href="#security-fixes-3">Security Fixes</a>
- - <a href="#ansible-core-20">Ansible\-core</a>
-- <a href="#bugfixes-6">Bugfixes</a>
- - <a href="#ansible-core-21">Ansible\-core</a>
- - <a href="#amazon-aws-13">amazon\.aws</a>
- - <a href="#ansible-netcommon-2">ansible\.netcommon</a>
- - <a href="#ansible-utils-2">ansible\.utils</a>
- - <a href="#ansible-windows-7">ansible\.windows</a>
- - <a href="#arista-eos-2">arista\.eos</a>
- - <a href="#check-point-mgmt-4">check\_point\.mgmt</a>
- - <a href="#chocolatey-chocolatey-2">chocolatey\.chocolatey</a>
- - <a href="#cisco-aci-3">cisco\.aci</a>
- - <a href="#cisco-ios-7">cisco\.ios</a>
- - <a href="#cisco-iosxr-3">cisco\.iosxr</a>
- - <a href="#cisco-ise-5">cisco\.ise</a>
- - <a href="#cisco-meraki-5">cisco\.meraki</a>
- - <a href="#cisco-mso-3">cisco\.mso</a>
- - <a href="#cisco-nxos-4">cisco\.nxos</a>
- - <a href="#cloud-common">cloud\.common</a>
- - <a href="#cloudscale-ch-cloud-1">cloudscale\_ch\.cloud</a>
- - <a href="#community-aws-7">community\.aws</a>
- - <a href="#community-ciscosmb-3">community\.ciscosmb</a>
- - <a href="#community-crypto-12">community\.crypto</a>
- - <a href="#community-digitalocean-4">community\.digitalocean</a>
- - <a href="#community-dns-9">community\.dns</a>
- - <a href="#community-docker-11">community\.docker</a>
- - <a href="#community-general-22">community\.general</a>
- - <a href="#community-grafana-5">community\.grafana</a>
- - <a href="#community-hashi-vault-5">community\.hashi\_vault</a>
- - <a href="#community-hrobot-4">community\.hrobot</a>
- - <a href="#community-libvirt-1">community\.libvirt</a>
- - <a href="#community-mysql-5">community\.mysql</a>
- - <a href="#community-network">community\.network</a>
- - <a href="#community-postgresql-7">community\.postgresql</a>
- - <a href="#community-routeros-7">community\.routeros</a>
- - <a href="#community-sops">community\.sops</a>
- - <a href="#community-vmware-11">community\.vmware</a>
- - <a href="#community-windows-7">community\.windows</a>
- - <a href="#community-zabbix-5">community\.zabbix</a>
- - <a href="#containers-podman-7">containers\.podman</a>
- - <a href="#dellemc-enterprise-sonic-5">dellemc\.enterprise\_sonic</a>
- - <a href="#dellemc-openmanage-10">dellemc\.openmanage</a>
- - <a href="#f5networks-f5-modules-3">f5networks\.f5\_modules</a>
- - <a href="#fortinet-fortimanager-6">fortinet\.fortimanager</a>
- - <a href="#fortinet-fortios-5">fortinet\.fortios</a>
- - <a href="#google-cloud-2">google\.cloud</a>
- - <a href="#hetzner-hcloud-7">hetzner\.hcloud</a>
- - <a href="#junipernetworks-junos-3">junipernetworks\.junos</a>
- - <a href="#microsoft-ad-6">microsoft\.ad</a>
- - <a href="#netapp-ontap-9">netapp\.ontap</a>
- - <a href="#netbox-netbox-6">netbox\.netbox</a>
- - <a href="#ovirt-ovirt-1">ovirt\.ovirt</a>
- - <a href="#purestorage-flasharray-8">purestorage\.flasharray</a>
- - <a href="#purestorage-flashblade-7">purestorage\.flashblade</a>
- - <a href="#purestorage-fusion-3">purestorage\.fusion</a>
- - <a href="#t-systems-mms-icinga-director-2">t\_systems\_mms\.icinga\_director</a>
- - <a href="#theforeman-foreman-3">theforeman\.foreman</a>
- - <a href="#vultr-cloud-5">vultr\.cloud</a>
- - <a href="#vyos-vyos-1">vyos\.vyos</a>
-- <a href="#known-issues-2">Known Issues</a>
- - <a href="#ansible-core-22">Ansible\-core</a>
- - <a href="#community-crypto-13">community\.crypto</a>
- - <a href="#community-dns-10">community\.dns</a>
- - <a href="#community-docker-12">community\.docker</a>
- - <a href="#community-general-23">community\.general</a>
- - <a href="#community-hrobot-5">community\.hrobot</a>
- - <a href="#community-routeros-8">community\.routeros</a>
- - <a href="#community-sops-1">community\.sops</a>
- - <a href="#dellemc-openmanage-11">dellemc\.openmanage</a>
-- <a href="#new-plugins-5">New Plugins</a>
- - <a href="#cliconf">Cliconf</a>
- - <a href="#filter-5">Filter</a>
- - <a href="#inventory">Inventory</a>
- - <a href="#lookup-2">Lookup</a>
-- <a href="#new-modules-5">New Modules</a>
- - <a href="#amazon-aws-14">amazon\.aws</a>
- - <a href="#cisco-ios-8">cisco\.ios</a>
- - <a href="#cisco-iosxr-4">cisco\.iosxr</a>
- - <a href="#cisco-nxos-5">cisco\.nxos</a>
- - <a href="#cloudscale-ch-cloud-2">cloudscale\_ch\.cloud</a>
- - <a href="#community-aws-8">community\.aws</a>
- - <a href="#community-dns-11">community\.dns</a>
- - <a href="#community-general-24">community\.general</a>
- - <a href="#community-grafana-6">community\.grafana</a>
- - <a href="#community-vmware-12">community\.vmware</a>
- - <a href="#community-zabbix-6">community\.zabbix</a>
- - <a href="#containers-podman-8">containers\.podman</a>
- - <a href="#dellemc-enterprise-sonic-6">dellemc\.enterprise\_sonic</a>
- - <a href="#dellemc-openmanage-12">dellemc\.openmanage</a>
- - <a href="#dellemc-powerflex-6">dellemc\.powerflex</a>
- - <a href="#dellemc-unity-1">dellemc\.unity</a>
- - <a href="#f5networks-f5-modules-4">f5networks\.f5\_modules</a>
- - <a href="#fortinet-fortimanager-7">fortinet\.fortimanager</a>
- - <a href="#inspur-ispim-2">inspur\.ispim</a>
- - <a href="#netapp-ontap-10">netapp\.ontap</a>
- - <a href="#netbox-netbox-7">netbox\.netbox</a>
- - <a href="#ngine-io-exoscale">ngine\_io\.exoscale</a>
- - <a href="#purestorage-flasharray-9">purestorage\.flasharray</a>
- - <a href="#sensu-sensu-go-1">sensu\.sensu\_go</a>
- - <a href="#t-systems-mms-icinga-director-3">t\_systems\_mms\.icinga\_director</a>
- - <a href="#theforeman-foreman-4">theforeman\.foreman</a>
- - <a href="#vultr-cloud-6">vultr\.cloud</a>
-- <a href="#new-roles">New Roles</a>
-- <a href="#unchanged-collections-6">Unchanged Collections</a>
-
-<a id="release-summary-6"></a>
-### Release Summary
-
-\[YANKED\] Release Date\: 2023\-11\-21 [Porting Guide](https\://docs\.ansible\.com/ansible/devel/porting\_guides\.html)
-
-<a id="removed-collections"></a>
-### 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\)
-
-<a id="added-collections-1"></a>
-### Added Collections
-
-* ibm\.storage\_virtualize \(version 2\.1\.0\)
-* telekom\_mms\.icinga\_director \(version 1\.34\.1\)
-
-<a id="ansible-core-15"></a>
-### 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\.
-
-<a id="included-collections"></a>
-### 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. |
-
-<a id="major-changes-3"></a>
-### Major Changes
-
-<a id="amazon-aws-9"></a>
-#### amazon\.aws
-
-* aws\_region\_info \- The module has been migrated from the <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.aws\_region\_info</code>\.
-* aws\_s3\_bucket\_info \- The module has been migrated from the <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.aws\_s3\_bucket\_info</code>\.
-* iam\_access\_key \- The module has been migrated from the <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.iam\_access\_key</code>\.
-* iam\_access\_key\_info \- The module has been migrated from the <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.iam\_access\_key\_info</code>\.
-* iam\_group \- The module has been migrated from the <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.iam\_group</code> \([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 <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.iam\_managed\_policy</code> \([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 <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.iam\_mfa\_device\_info</code> \([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 <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.iam\_password\_policy</code>\.
-* iam\_role \- The module has been migrated from the <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.iam\_role</code> \([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 <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.iam\_role\_info</code> \([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 <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.s3\_bucket\_info</code>\.
-* sts\_assume\_role \- The module has been migrated from the <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.sts\_assume\_role</code>\.
-
-<a id="chocolatey-chocolatey"></a>
-#### chocolatey\.chocolatey
-
-* win\_chocolatey \- add options for specifying checksums
-* win\_chocolatey\_facts \- add filter / gather\_subset option
-
-<a id="cisco-ios-3"></a>
-#### cisco\.ios
-
-* This release removes a previously deprecated modules\, and a few attributes from this collection\. Refer to <strong>Removed Features</strong> section for details\.
-
-<a id="cisco-nxos-1"></a>
-#### cisco\.nxos
-
-* Refer to <strong>Removed Features</strong> section for details\.
-* This release removes four of the previously deprecated modules from this collection\.
-
-<a id="cloudscale-ch-cloud"></a>
-#### cloudscale\_ch\.cloud
-
-* Bump minimum required Ansible version to 2\.13\.0
-
-<a id="community-mysql-3"></a>
-#### community\.mysql
-
-* The community\.mysql collection no longer supports <code>ansible\-core 2\.12</code> and <code>ansible\-core 2\.13</code>\. 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 <code>latest Ansible / ansible\-core 2\.15 or later</code> 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 <code>column\_case\_sensitive</code> argument\'s default value will be changed to <code>true</code> 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 <code>column\_case\_sensitive</code> argument\'s default value will be changed to <code>true</code> 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)\)\.
-
-<a id="community-postgresql-4"></a>
-#### 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 <code>order</code> argument\. The sortorder <code>sdu</code> 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 <code>usage\_on\_types</code> argument\. Use the <code>type</code> option of the <code>type</code> 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 <code>path\_to\_script</code> and <code>as\_single\_query</code> arguments\. Use the <code>postgresql\_script</code> 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 <code>privs</code> 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 <code>groups</code> argument\. Use the <code>postgresql\_membership</code> module instead \([https\://github\.com/ansible\-collections/community\.postgresql/issues/300](https\://github\.com/ansible\-collections/community\.postgresql/issues/300)\)\.
-
-<a id="community-sap"></a>
-#### community\.sap
-
-* all modules \- everything is now a redirect to the new collection community\.sap\_libs
-
-<a id="community-vmware-7"></a>
-#### 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\)
-
-<a id="fortinet-fortimanager-4"></a>
-#### 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\.
-
-<a id="fortinet-fortios-4"></a>
-#### fortinet\.fortios
-
-* Add new fortios version 7\.4\.1\.
-* Add readthedocs\.yaml file\.
-* Format the contents in the changelog\.yml file\.
-* Improve the <em class="title-reference">no\_log</em> 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 <em class="title-reference">seq\_num</em> in <em class="title-reference">fortios\_router\_static</em>\;
-* Improve the documentation for <em class="title-reference">member\_path</em> 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\.
-
-<a id="grafana-grafana-2"></a>
-#### 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
-
-<a id="minor-changes-5"></a>
-### Minor Changes
-
-* Move setuptools configuration into the declarative <code>setup\.cfg</code> format\. <code>ansible</code> sdists still contain a stub <code>setup\.py</code> file\, but we recommend that users move to tools like pip and build and the PEP 517 interface instead of setuptools\' deprecated <code>setup\.py</code> interface \([https\://github\.com/ansible\-community/antsibull/pull/530](https\://github\.com/ansible\-community/antsibull/pull/530)\)\.
-
-<a id="ansible-core-16"></a>
-#### 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 <code>GALAXY\_COLLECTIONS\_PATH\_WARNING</code> option to disable the warning given by <code>ansible\-galaxy collection install</code> when installing a collection to a path that isn\'t in the configured collection paths\.
-* Add <code>python3\.12</code> to the default <code>INTERPRETER\_PYTHON\_FALLBACK</code> list\.
-* Add <code>utcfromtimestamp</code> and <code>utcnow</code> to <code>ansible\.module\_utils\.compat\.datetime</code> to return fixed offset datetime objects\.
-* Add a general <code>GALAXY\_SERVER\_TIMEOUT</code> 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 <code>intersect</code>\, <code>difference</code>\, <code>symmetric\_difference</code> and <code>union</code> now states that the returned list items are in arbitrary order\.
-* Record <code>removal\_date</code> in runtime metadata as a string instead of a date\.
-* Remove the <code>CleansingNodeVisitor</code> class and its usage due to the templating changes that made it superfluous\. Also simplify the <code>Conditional</code> class\.
-* Removed <code>exclude</code> and <code>recursive\-exclude</code> commands for generated files from the <code>MANIFEST\.in</code> file\. These excludes were unnecessary since releases are expected to be built with a clean worktree\.
-* Removed <code>exclude</code> commands for sanity test files from the <code>MANIFEST\.in</code> 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 <code>include</code> commands from the <code>MANIFEST\.in</code> file\. These includes either duplicated default behavior or another command\.
-* The <code>ansible\-core</code> sdist no longer contains pre\-generated man pages\. Instead\, a <code>packaging/cli\-doc/build\.py</code> script is included in the sdist\. This script can generate man pages and standalone RST documentation for <code>ansible\-core</code> CLI programs\.
-* The <code>docs</code> and <code>examples</code> directories are no longer included in the <code>ansible\-core</code> sdist\. These directories have been moved to the [https\://github\.com/ansible/ansible\-documentation](https\://github\.com/ansible/ansible\-documentation) repository\.
-* The minimum required <code>setuptools</code> version is now 66\.1\.0\, as it is the oldest version to support Python 3\.12\.
-* Update <code>ansible\_service\_mgr</code> fact to include init system for SMGL OS family
-* Use <code>ansible\.module\_utils\.common\.text\.converters</code> instead of <code>ansible\.module\_utils\.\_text</code>\.
-* Use <code>importlib\.resources\.abc\.TraversableResources</code> instead of deprecated <code>importlib\.abc\.TraversableResources</code> where available \([https\:/github\.com/ansible/ansible/pull/81082](https\:/github\.com/ansible/ansible/pull/81082)\)\.
-* Use <code>include</code> where <code>recursive\-include</code> is unnecessary in the <code>MANIFEST\.in</code> file\.
-* Use <code>package\_data</code> instead of <code>include\_package\_data</code> for <code>setup\.cfg</code> to avoid <code>setuptools</code> warnings\.
-* Utilize gpg check provided internally by the <code>transaction\.run</code> method as oppose to calling it manually\.
-* <code>Templar</code> \- do not add the <code>dict</code> constructor to <code>globals</code> 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\, <code>\-\-ignore\-signature\-status\-codes NO\_PUBKEY UNEXPECTED</code>\)\.
-* ansible\-galaxy \- Remove internal configuration argument <code>v3</code> \([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 <code>\-\-pre</code> 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\.\, <code>my\$class\.jar</code> has a <code>\$</code> 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 <code>\# deprecated\:</code> 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 <code>\-\-timeout</code> option to the <code>env</code> command\. This simplifies testing\.
-* ansible\-test \- Enable <code>thread</code> code coverage in addition to the existing <code>multiprocessing</code> coverage\.
-* ansible\-test \- Make Python 3\.12 the default version used in the <code>base</code> and <code>default</code> containers\.
-* ansible\-test \- RHEL 8\.8 provisioning can now be used with the <code>\-\-python 3\.11</code> option\.
-* ansible\-test \- RHEL 9\.2 provisioning can now be used with the <code>\-\-python 3\.11</code> option\.
-* ansible\-test \- Refactored <code>env</code> 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 <em class="title-reference">\-\-remote</em> option\.
-* ansible\-test \- Removed <em class="title-reference">freebsd/12\.4</em> remote\.
-* ansible\-test \- Removed <em class="title-reference">freebsd/13\.1</em> remote\.
-* ansible\-test \- Removed test remotes\: rhel/8\.7\, rhel/9\.1
-* ansible\-test \- Removed the deprecated <code>\-\-docker\-no\-pull</code> option\.
-* ansible\-test \- Removed the deprecated <code>\-\-no\-pip\-check</code> option\.
-* ansible\-test \- Removed the deprecated <code>foreman</code> test plugin\.
-* ansible\-test \- Removed the deprecated <code>govcsim</code> support from the <code>vcenter</code> test plugin\.
-* ansible\-test \- Replace the <code>pytest\-forked</code> pytest plugin with a custom plugin\.
-* ansible\-test \- The <code>no\-get\-exception</code> sanity test is now limited to plugins in collections\. Previously any Python file in a collection was checked for <code>get\_exception</code> usage\.
-* ansible\-test \- The <code>replace\-urlopen</code> sanity test is now limited to plugins in collections\. Previously any Python file in a collection was checked for <code>urlopen</code> usage\.
-* ansible\-test \- The <code>use\-compat\-six</code> sanity test is now limited to plugins in collections\. Previously any Python file in a collection was checked for <code>six</code> usage\.
-* ansible\-test \- The openSUSE test container has been updated to openSUSE Leap 15\.5\.
-* ansible\-test \- Update pip to <code>23\.1\.2</code> and setuptools to <code>67\.7\.2</code>\.
-* ansible\-test \- Update the <code>default</code> containers\.
-* ansible\-test \- Update the <code>nios\-test\-container</code> to version 2\.0\.0\, which supports API version 2\.9\.
-* ansible\-test \- Update the logic used to detect when <code>ansible\-test</code> 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 <code>datetime\.datetime\.now</code> with <code>tz</code> specified instead of <code>datetime\.datetime\.utcnow</code>\.
-* ansible\-test \- Use a context manager to perform cleanup at exit instead of using the built\-in <code>atexit</code> module\.
-* ansible\-test \- When invoking <code>sleep</code> in containers during container setup\, the <code>env</code> 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 <code>coverage</code> v7\.3\.2\.
-* ansible\-test — <code>coverage</code> 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 <code>expand\_argument\_vars</code> 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 <code>cacheonly</code> 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 <code>retries</code> keyword can be specified without <code>until</code> in which case the task is retried until it succeeds but at most <code>retries</code> times \([https\://github\.com/ansible/ansible/issues/20802](https\://github\.com/ansible/ansible/issues/20802)\)
-* user \- add new option <code>password\_expire\_warn</code> \(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
-
-<a id="amazon-aws-10"></a>
-#### 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 <code>disable\_rollback</code> 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 <code>org\_arns</code> and <code>org\_unit\_arns</code> 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 <code>placement</code> options and <code>license\_specifications</code> 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 <code>include\_attributes</code> 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 <code>file\_name</code> 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 <code>include\_attributes</code>\, <code>include\_listeners</code> and <code>include\_listener\_rules</code> 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 <code>describe\_load\_balancers</code> call fetching <code>ip\_address\_type</code> \([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 <code>resource\_id</code> and <code>resource\_type</code> to <code>parse\_aws\_arn</code> return values \([https\://github\.com/ansible\-collections/amazon\.aws/pull/1619](https\://github\.com/ansible\-collections/amazon\.aws/pull/1619)\)\.
-* module\_utils\.arn \- added <code>validate\_aws\_arn</code> 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 <code>state</code> choice called <code>started</code>\. 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 <code>state</code> choice called <code>stopped</code>\. 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 <code>wait\_id</code> 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 <code>child\_health\_checks</code> 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 <code>health\_threshold</code> 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 <code>type</code> choice called <code>CALCULATED</code> \([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)\)\.
-
-<a id="ansible-netcommon"></a>
-#### ansible\.netcommon
-
-* Add a new cliconf plugin <code>default</code> that can be used when no cliconf plugin is found for a given network\_os\. This plugin only supports <code>get\(\)</code>\. \([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 <code>ca\_path</code>\, <code>client\_cert</code>\, <code>client\_key</code>\, and <code>http\_agent</code> 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)\)\.
-
-<a id="ansible-utils-1"></a>
-#### 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)\)
-
-<a id="ansible-windows-4"></a>
-#### ansible\.windows
-
-* win\_certificate\_store \- the private key check\, when exporting to pkcs12\, has been modified to handle the case where the <code>PrivateKey</code> property is null despite it being there
-* win\_find \- Added <code>depth</code> 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)
-
-<a id="arista-eos-1"></a>
-#### 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\)\.
-
-<a id="check-point-mgmt-3"></a>
-#### check\_point\.mgmt
-
-* cp\_mgmt\_vpn\_community\_star \- new fields added\.
-* show command modules \- no longer return result of changed\=True\.
-
-<a id="chocolatey-chocolatey-1"></a>
-#### 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
-
-<a id="cisco-aci-2"></a>
-#### 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
-
-<a id="cisco-ios-4"></a>
-#### cisco\.ios
-
-* Fixe an issue with some files that doesn\'t pass the PEP8 sanity check because <em class="title-reference">type\(\<obj\>\) \=\= \<type\></em> is not allowed\. We need to use <em class="title-reference">isinstance\(\<obj\>\,\<type\>\)</em> 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
-
-<a id="cisco-iosxr-1"></a>
-#### 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)\)\.
-
-<a id="cisco-meraki-4"></a>
-#### 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\.
-
-<a id="cisco-mso-2"></a>
-#### 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\)
-
-<a id="cisco-nxos-2"></a>
-#### 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)\)\.
-
-<a id="community-aws-5"></a>
-#### community\.aws
-
-* api\_gateway \- add support for parameters <code>name</code>\, <code>lookup</code>\, <code>tags</code> and <code>purge\_tags</code> \([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 <code>runtime\_platform</code> \([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 <code>wait\=\=True</code> \([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)\)\.
-
-<a id="community-ciscosmb"></a>
-#### community\.ciscosmb
-
-* added Ansible playbook examples <code>cismosmb\_inventory\_template\.yml</code>\, <code>cismosmb\_gather\_facts\.yml</code>\, <code>cismosmb\_commands\.yml</code>
-* 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
-
-<a id="community-crypto-10"></a>
-#### community\.crypto
-
-* acme\_certificate \- allow to use no challenge by providing <code>no challenge</code> for the <code>challenge</code> 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 <code>keyslot</code>\, <code>new\_keyslot</code>\, and <code>remove\_keyslot</code> 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 <code>path</code> parameter \([https\://github\.com/ansible\-collections/community\.crypto/issues/603](https\://github\.com/ansible\-collections/community\.crypto/issues/603)\)\.
-
-<a id="community-digitalocean-3"></a>
-#### 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)\)\.
-
-<a id="community-dns-8"></a>
-#### community\.dns
-
-* wait\_for\_txt \- add <code>servfail\_retries</code> 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)\)\.
-
-<a id="community-general-18"></a>
-#### 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 <code>VarDict\.as\_dict\(\)</code> to convert to a plain <code>dict</code> 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 <code>\.rpm</code> path when verifying
- installation success\. Allows installing packages from local <code>\.rpm</code> files
- \([https\://github\.com/ansible\-collections/community\.general/pull/7396](https\://github\.com/ansible\-collections/community\.general/pull/7396)\)\.
-* cargo \- add option <code>executable</code>\, 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 <code>locked</code> 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 <code>disable\_root\_check</code> 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 <code>exclude\_mgmt\_classes</code> and <code>include\_mgmt\_classes</code> 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 <code>inventory\_hostname</code> 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 <code>want\_ip\_addresses</code> 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 <code>cobbler\_ipv4\_address</code> and IPv6 address to <code>cobbler\_ipv6\_address</code> 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 <code>python\-consul</code> library to communicate with the Consul API\, instead relying on the existing <code>requests</code> 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 <code>dnf</code> python module is not available in <code>ansible\_python\_interpreter</code> \([https\://github\.com/ansible\-collections/community\.general/pull/6522](https\://github\.com/ansible\-collections/community\.general/pull/6522)\)\.
-* cpanm \- minor refactor when creating the <code>CmdRunner</code> object \([https\://github\.com/ansible\-collections/community\.general/pull/7231](https\://github\.com/ansible\-collections/community\.general/pull/7231)\)\.
-* datadog\_monitor \- adds <code>notification\_preset\_name</code>\, <code>renotify\_occurrences</code> and <code>renotify\_statuses</code> 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 <code>CmdRunner</code> to execute external command \([https\://github\.com/ansible\-collections/community\.general/pull/7075](https\://github\.com/ansible\-collections/community\.general/pull/7075)\)\.
-* filesystem \- add <code>uuid</code> 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 <code>force\_delete</code> \(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 <code>raw</code> 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 <code>raw</code> 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 <code>crypt\_scheme</code> is being renamed as <code>hash\_scheme</code> 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 <code>ip</code> 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 <code>ignore\_spaces</code> option \([https\://github\.com/ansible\-collections/community\.general/pull/7273](https\://github\.com/ansible\-collections/community\.general/pull/7273)\)\.
-* ini\_file \- add <code>modify\_inactive\_option</code> 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 <code>idp</code> choice to <code>ipauserauthtype</code> 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 <code>detach</code> 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 <code>time\_between\_checks</code> 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 <code>parents</code> \([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 <code>client\_cert</code> and <code>client\_key</code> 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 <code>page\_size</code> 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 <code>ModuleHelper</code> and <code>CmdRunner</code> \([https\://github\.com/ansible\-collections/community\.general/pull/6903](https\://github\.com/ansible\-collections/community\.general/pull/6903)\)\.
-* locale\_gen \- module now using <code>CmdRunner</code> to execute external commands \([https\://github\.com/ansible\-collections/community\.general/pull/6820](https\://github\.com/ansible\-collections/community\.general/pull/6820)\)\.
-* lvg \- add <code>active</code> and <code>inactive</code> values to the <code>state</code> 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 <code>reset\_vg\_uuid</code>\, <code>reset\_pv\_uuid</code> 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 <code>remote\_addr</code> option \([https\://github\.com/ansible\-collections/community\.general/pull/7373](https\://github\.com/ansible\-collections/community\.general/pull/7373)\)\.
-* lxd connection plugin \- automatically translate <code>remote\_addr</code> 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 <code>server\_cert</code> 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 <code>server\_check\_hostname</code> 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 <code>targets</code> parameter allowing multiple targets to be used with <code>make</code> \([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 <code>params</code> 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 <code>mas account</code> 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 <code>app\_name\_exact\_match</code>\, 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 <code>use\_arp\_ping</code> 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 <code>ipv4\.dns\-options</code> and <code>ipv6\.dns\-options</code> \([https\://github\.com/ansible\-collections/community\.general/pull/6902](https\://github\.com/ansible\-collections/community\.general/pull/6902)\)\.
-* nomad\_job\, nomad\_job\_info \- add <code>port</code> 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 <code>CmdRunner</code> 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 <code>account\_id</code> 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 <code>account\_id</code> 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 <code>executable</code> parameter allowing to specify the path of the <code>opkg</code> command \([https\://github\.com/ansible\-collections/community\.general/pull/6862](https\://github\.com/ansible\-collections/community\.general/pull/6862)\)\.
-* opkg \- remove default value <code>\"\"</code> for parameter <code>force</code> 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 <code>\-\-fix</code> 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 <code>validate\_certs</code> 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 <code>vmid</code> \(and <code>taskid</code> 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 <code>timezone</code> 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 <code>tpmstate0</code> 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 <code>force</code> 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 <code>timeout</code> module param to forcefully shutdown a virtual machine when <code>state</code> is <code>stopped</code> \([https\://github\.com/ansible\-collections/community\.general/issues/6257](https\://github\.com/ansible\-collections/community\.general/issues/6257)\)\.
-* proxmox\_snap \- add <code>retention</code> 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 \- <code>node</code> 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 <code>ignore\_similar\_chars</code> and <code>similar\_chars</code> 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 <code>MultipartHTTPPushUpdate</code> 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 <code>account\_types</code> and <code>oem\_account\_types</code> as optional inputs to <code>AddUser</code> \([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 <code>update\_oem\_params</code> for the <code>MultipartHTTPPushUpdate</code> command \([https\://github\.com/ansible\-collections/community\.general/issues/7331](https\://github\.com/ansible\-collections/community\.general/issues/7331)\)\.
-* redfish\_config \- add <code>CreateVolume</code> 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 <code>DeleteAllVolumes</code> 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 <code>SetSecureBoot</code> command \([https\://github\.com/ansible\-collections/community\.general/pull/7129](https\://github\.com/ansible\-collections/community\.general/pull/7129)\)\.
-* redfish\_info \- add <code>AccountTypes</code> and <code>OEMAccountTypes</code> to the output of <code>ListUsers</code> \([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 <code>GetBiosRegistries</code> command \([https\://github\.com/ansible\-collections/community\.general/pull/7144](https\://github\.com/ansible\-collections/community\.general/pull/7144)\)\.
-* redfish\_info \- adds <code>LinkStatus</code> to NIC inventory \([https\://github\.com/ansible\-collections/community\.general/pull/7318](https\://github\.com/ansible\-collections/community\.general/pull/7318)\)\.
-* redfish\_info \- adds <code>ProcessorArchitecture</code> 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 <code>GetVolumeInventory</code>\, 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 <code>Id</code> in the output of <code>GetManagerInventory</code> \([https\://github\.com/ansible\-collections/community\.general/pull/7140](https\://github\.com/ansible\-collections/community\.general/pull/7140)\)\.
-* redfish\_utils \- use <code>Controllers</code> 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 <code>PowerCycle</code> reset type for <code>redfish\_command</code> 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 <code>\@odata\.nextLink</code> pagination in <code>software\_inventory</code> 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 <code>Volumes</code> in response for <code>GetDiskInventory</code> \([https\://github\.com/ansible\-collections/community\.general/pull/6819](https\://github\.com/ansible\-collections/community\.general/pull/6819)\)\.
-* redhat\_subscription \- the internal <code>RegistrationBase</code> class was folded
- into the other internal <code>Rhsm</code> 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 <code>subscription\-manager</code> 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 <code>subscription\-manager</code> was
- refactored by grouping things together\, removing unused bits\, and hardening
- the way it is run\; also\, the parsing of <code>subscription\-manager repos \-\-list</code>
- 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 <code>shutdown \-p \.\.\.</code> 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 <code>dangerous</code> to the module\, that will map into the command line argument <code>\-\-dangerous</code>\, 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 <code>stop\_before\_removing\=true</code> \([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 <code>fetch\_secret\_ids\_from\_folder</code> 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 <code>secret\_path</code> 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 <code>check\_mode\_markers</code> 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 <code>VarDict</code> \([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)\)\.
-
-<a id="community-grafana-4"></a>
-#### community\.grafana
-
-* Add <em class="title-reference">grafana\_organization\_user</em> module
-* Bump version of Python used in tests to 3\.10
-* Enable datasource option <em class="title-reference">time\_interval</em> for prometheus
-* Fix documentation url for Ansible doc website
-* Now testing against Grafana 9\.5\.13\, 8\.5\.27\, 10\.2\.0
-
-<a id="community-libvirt"></a>
-#### community\.libvirt
-
-* virt \- add <em class="title-reference">mutate\_flags</em> 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 <code>\-\-diff</code> for <code>define</code> command \([https\://github\.com/ansible\-collections/community\.libvirt/pull/142/](https\://github\.com/ansible\-collections/community\.libvirt/pull/142/)\)\.
-
-<a id="community-mysql-4"></a>
-#### community\.mysql
-
-* mysql\_info \- add filter <code>users\_info</code> \([https\://github\.com/ansible\-collections/community\.mysql/pull/580](https\://github\.com/ansible\-collections/community\.mysql/pull/580)\)\.
-* mysql\_role \- add <code>column\_case\_sensitive</code> 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 <code>column\_case\_sensitive</code> 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)\)\.
-
-<a id="community-postgresql-5"></a>
-#### community\.postgresql
-
-* Collection core functions \- use <code>get\_server\_version</code> 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)\)\.
-
-<a id="community-routeros-6"></a>
-#### community\.routeros
-
-* api\_info \- add new <code>include\_read\_only</code> 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 <code>caps\-man channel</code> and enable path <code>caps\-man manager interface</code> \([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 <code>ip traffic\-flow target</code> \([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 <code>address\-list</code> and <code>match\-subdomain</code> introduced by RouterOS 7\.7 in the <code>ip dns static</code> 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 <code>user</code>\, <code>time</code> and <code>gmt\-offset</code> under the <code>system clock</code> 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 <code>interface ppp\-client</code> 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 <code>interface wireless</code> 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 <code>iot modbus</code> 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 <code>ip dhcp\-server option</code> and <code>ip dhcp\-server option sets</code> 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 <code>ip upnp interfaces</code>\, <code>tool graphing interface</code>\, <code>tool graphing resource</code> 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 <code>ipv6 firewall nat</code> 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 <code>mode</code> property in <code>ip neighbor discovery\-settings</code> 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 <code>port remote\-access</code> 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 <code>routing filter rule</code> and <code>routing filter select\-rule</code> 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 <code>routing table</code> 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 <code>tool netwatch</code> 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 <code>user settings</code> 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 <code>user</code> 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 <code>interface wireless security\-profiles</code> 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 <code>ppp profile</code> 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 <code>handle\_read\_only</code> and <code>handle\_write\_only</code> 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 <code>routing id</code>\, <code>routing bgp connection</code> \([https\://github\.com/ansible\-collections/community\.routeros/pull/220](https\://github\.com/ansible\-collections/community\.routeros/pull/220)\)\.
-
-<a id="community-vmware-8"></a>
-#### 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 <em class="title-reference">ovf\:userConfigurable\=false</em> 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 <em class="title-reference">instance\_uuid</em> to the result \([https\://github\.com/ansible\-collections/community\.vmware/issues/1805](https\://github\.com/ansible\-collections/community\.vmware/issues/1805)\)
-
-<a id="community-windows-4"></a>
-#### community\.windows
-
-* win\_dns\_record \- Added <code>zone\_scope</code> option to manage a record in a specific zone scope
-
-<a id="community-zabbix-4"></a>
-#### 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
-
-<a id="containers-podman-6"></a>
-#### 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
-
-<a id="dellemc-enterprise-sonic-3"></a>
-#### 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)\)\.
-
-<a id="dellemc-openmanage-8"></a>
-#### dellemc\.openmanage
-
-* All the module documentation and examples are updated to use true or false for Boolean values\.
-* Module <code>idrac\_user</code> is enhanced to configure custom privileges for an user\.
-* Module <code>ome\_application\_certificate</code> is enhanced to support subject alternative names\.
-* Module <code>ome\_diagnostics</code> is enhanced to update changed flag status in response\.
-* Module <code>ome\_discovery</code> is enhanced to add detailed job information of each IP discovered\.
-* Module <code>ome\_firmware\_baseline</code> is enhanced to support the option to select only components with no reboot required\.
-* Module <code>ome\_firmware\_catalog</code> is enhanced to support IPv6 address\.
-* Module <code>ome\_firmware</code> is enhanced to support reboot type options\.
-* Module <code>ome\_job\_info</code> is enhanced to return last execution details and execution histories\.
-* Module <code>redfish\_firmware</code> is enhanced to support IPv6 address\.
-* Module <code>redfish\_storage\_volume</code> is enhanced to support RAID6 and RAID60\.
-* Role <code>idrac\_os\_deployment</code> 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\.
-
-<a id="dellemc-powerflex-5"></a>
-#### 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\.
-
-<a id="dellemc-unity"></a>
-#### 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\.
-
-<a id="f5networks-f5-modules-2"></a>
-#### 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
-
-<a id="fortinet-fortimanager-5"></a>
-#### 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
-
-<a id="google-cloud-1"></a>
-#### google\.cloud
-
-* Add DataPlane V2 Support\.
-* Add auth support for GCP access tokens \(\#574\)\.
-* Add support for ip\_allocation\_policy\-\>stack\_type\.
-
-<a id="grafana-grafana-3"></a>
-#### 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
-
-<a id="hetzner-hcloud-4"></a>
-#### 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 <em class="title-reference">server\_types</em> 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 <em class="title-reference">load\_balancer</em> or <em class="title-reference">network</em> using its ID\.
-* hcloud\_load\_balancer\_service \- Allow selecting a <em class="title-reference">load\_balancer</em> using its ID\.
-* hcloud\_load\_balancer\_target \- Allow selecting a <em class="title-reference">load\_balancer</em> or <em class="title-reference">server</em> 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 <em class="title-reference">server</em>\, <em class="title-reference">floating\_ip</em>\, <em class="title-reference">primary\_ip</em> or <em class="title-reference">load\_balancer</em> using its ID\.
-* hcloud\_route \- Allow selecting a <em class="title-reference">network</em> using its ID\.
-* hcloud\_server \- Add <em class="title-reference">created</em> field
-* hcloud\_server Show warning if used server\_type is deprecated\.
-* hcloud\_server\_info \- Add <em class="title-reference">created</em> field
-* hcloud\_server\_network \- Allow selecting a <em class="title-reference">network</em> or <em class="title-reference">server</em> 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 <em class="title-reference">network</em> 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\.
-
-<a id="inspur-ispim-1"></a>
-#### 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\.
-
-<a id="junipernetworks-junos-1"></a>
-#### junipernetworks\.junos
-
-* <em class="title-reference">junos\_ospfv2</em> \- Fix the authentication config when password is configured
-* <em class="title-reference">junos\_ospfv2</em> \- Rename key ospf to ospfv2 in facts\.
-* <em class="title-reference">junos\_ospfv2</em> \- add area\_ranges attribute which supports list of dict attributes\.
-* <em class="title-reference">junos\_ospfv2</em> \- add attributes <em class="title-reference">allow\_route\_leaking</em>\, <em class="title-reference">stub\_network</em> and <em class="title-reference">as\-external</em> to overload dict\.
-* <em class="title-reference">junos\_ospfv2</em> \- add attributes <em class="title-reference">no\_ignore\_out\_externals</em> to spf\_options dict\.
-* <em class="title-reference">junos\_ospfv2</em> \- fix to gather reference\_bandwidth and rfc1583compatibility\.
-* add acl\_interfaces key for junos\_facts output\.
-* add overridden state opperation support\.
-
-<a id="lowlydba-sqlserver-3"></a>
-#### 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
-
-<a id="microsoft-ad-4"></a>
-#### microsoft\.ad
-
-* AD objects will no longer be moved to the default AD path for their type if no <code>path</code> was specified\. Use the value <code>microsoft\.ad\.default\_path</code> to explicitly set the path to the default path if that behaviour is desired\.
-* microsoft\.ad\.debug\_ldap\_client \- Add <code>dpapi\_ng</code> to list of packages checked
-* microsoft\.ad\.ldap \- Add support for decrypting LAPS encrypted password
-* microsoft\.ad\.ldap \- Added the option <code>filter\_without\_computer</code> to not add the AND clause <code>objectClass\=computer</code> 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)
-
-<a id="netapp-ontap-8"></a>
-#### 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 <em class="title-reference">default\_site</em> added in REST\, requires ONTAP 9\.13\.1 or later\.
-* na\_ontap\_ems\_destination \- new option <code>certificate</code>\, <code>ca</code> added\.
-* na\_ontap\_kerberos\_realm \- add REST support for <em class="title-reference">admin\_server\_ip</em>\, <em class="title-reference">admin\_server\_port</em>\, <em class="title-reference">pw\_server\_ip</em>\, <em class="title-reference">pw\_server\_port</em> and <em class="title-reference">clock\_skew</em> from ONTAP 9\.13\.1 or later
-* na\_ontap\_lun \- new option <em class="title-reference">qtree\_name</em> added in REST\.
-* na\_ontap\_name\_mappings \- added choices <code>s3\_win</code> and <code>s3\_unix</code> to <code>direction</code>\, requires ONTAP 9\.12\.1 or later\.
-* na\_ontap\_net\_ifgrp \- return <em class="title-reference">name</em> and other details of a newly created interface group in module output in REST\.
-* na\_ontap\_qos\_policy\_group \- added new REST only options <em class="title-reference">expected\_iops\_allocation</em> and <em class="title-reference">peak\_iops\_allocation</em>\, requires ONTAP 9\.10\.1 or later\.
-* na\_ontap\_rest\_info \- new option <em class="title-reference">hal\_linking</em> added to enable or disable HAL links\.
-* na\_ontap\_restit \- returns changed as False for GET method\.
-* na\_ontap\_s3\_buckets \- new option <code>nas\_path</code> 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 <em class="title-reference">atime\_update</em> requires ONTAP 9\.8 or later\, <em class="title-reference">snapdir\_access</em> and <em class="title-reference">snapshot\_auto\_delete</em> requires ONTAP 9\.13\.1 or later\.
-* na\_ontap\_volume \- added new REST only options <em class="title-reference">vol\_nearly\_full\_threshold\_percent</em> and <em class="title-reference">vol\_full\_threshold\_percent</em>\, requires ONTAP 9\.9 or later\.
-
-<a id="netbox-netbox-5"></a>
-#### 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)\)
-
-<a id="ovirt-ovirt"></a>
-#### 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)\)
-
-<a id="purestorage-flasharray-7"></a>
-#### purestorage\.flasharray
-
-* purefa\_eradication \- Added support for disabled and enabled timers from Purity//FA 6\.4\.10
-* purefa\_info \- Add <em class="title-reference">port\_connectivity</em> information for hosts
-* purefa\_info \- Add array subscription data
-* purefa\_info \- Add promotion status information for volumes
-* purefa\_info \- Added <em class="title-reference">nfs\_version</em> to policies and rules from Purity//FA 6\.4\.10
-* purefa\_info \- Added <em class="title-reference">total\_used</em> 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 \- <em class="title-reference">enabled</em> 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 <em class="title-reference">snap\_at</em> and <em class="title-reference">replicate\_at</em> 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
-
-<a id="purestorage-flashblade-6"></a>
-#### 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\.
-
-<a id="purestorage-fusion-1"></a>
-#### 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 <em class="title-reference">apartment\_id</em> argument\, which can be used when creating an array\.
-* fusion\_info \- <em class="title-reference">array</em> is None if missing in <em class="title-reference">volume</em>
-* fusion\_info \- <em class="title-reference">hardware\_types</em> is None if missing in <em class="title-reference">storage\_service</em>
-* fusion\_info \- <em class="title-reference">network\_interface\_groups</em> is None if missing in <em class="title-reference">iscsi\_interfaces</em> in <em class="title-reference">storage\_endpoint</em>
-* 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 <em class="title-reference">destroy\_snapshots\_on\_delete</em> 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 <em class="title-reference">destroy\_snapshots\_on\_delete</em> which\, if set to true\, ensures that before deleting protection policy\, snapshots within the protection policy will be deleted\.
-* fusion\_ra \- added <em class="title-reference">api\_client\_key</em> argument\, which can be used instead of <em class="title-reference">user</em> and <em class="title-reference">principal</em> argument
-* fusion\_ra \- added <em class="title-reference">principal</em> argument\, which is an ID of either API client or User and can be used instead of <em class="title-reference">user</em> argument
-* fusion\_se \- add support for CBS Storage Endpoint
-* fusion\_volume \- Allow creating a new volume from already existing volume or volume snapshot
-
-<a id="sensu-sensu-go"></a>
-#### 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
-
-<a id="t-systems-mms-icinga-director"></a>
-#### 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)\)
-
-<a id="theforeman-foreman-2"></a>
-#### 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 <em class="title-reference">content\_view\_version</em> 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 <code>recurrence purpose</code> and <code>description\_format</code> parameters
-* locations role \- New role to manage locations
-* organizations role \- accept <code>parameters</code> and <code>ignore\_types</code> like the module does
-* repositories role \- allow disabling/removing of repositories by setting the <code>state</code> parameter
-
-<a id="vultr-cloud-4"></a>
-#### vultr\.cloud
-
-* instance \- Implemented a new <code>state</code> equal <code>reinstalled</code> 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 <code>internal\_ip</code> 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)\)\.
-
-<a id="vyos-vyos"></a>
-#### 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)\)
-
-<a id="breaking-changes--porting-guide-1"></a>
-### Breaking Changes / Porting Guide
-
-<a id="ansible-core-17"></a>
-#### Ansible\-core
-
-* Any plugin using the config system and the <em class="title-reference">cli</em> entry to use the <em class="title-reference">timeout</em> 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\.
-
-<a id="amazon-aws-11"></a>
-#### amazon\.aws
-
-* The amazon\.aws collection has dropped support for <code>botocore\<1\.29\.0</code> and <code>boto3\<1\.26\.0</code>\. 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 \- <code>module\_utils\.urls</code> 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)\)\.
-
-<a id="community-aws-6"></a>
-#### community\.aws
-
-* The community\.aws collection has dropped support for <code>botocore\<1\.29\.0</code> and <code>boto3\<1\.26\.0</code>\. 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 <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.aws\_region\_info</code>\.
-* aws\_s3\_bucket\_info \- The module has been migrated from the <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.aws\_s3\_bucket\_info</code>\.
-* 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 <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.iam\_access\_key</code>\.
-* iam\_access\_key\_info \- The module has been migrated from the <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.iam\_access\_key\_info</code>\.
-* iam\_group \- The module has been migrated from the <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.iam\_group</code> \([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 <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.iam\_managed\_policy</code> \([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 <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.iam\_mfa\_device\_info</code> \([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 <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.iam\_password\_policy</code>\.
-* iam\_role \- The module has been migrated from the <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.iam\_role</code> \([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 <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.iam\_role\_info</code> \([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 <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.s3\_bucket\_info</code>\.
-* sts\_assume\_role \- The module has been migrated from the <code>community\.aws</code> collection\. Playbooks using the Fully Qualified Collection Name for this module should be updated to use <code>amazon\.aws\.sts\_assume\_role</code>\.
-
-<a id="community-general-19"></a>
-#### 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 <code>default\_branch</code> support for project update\. If you used the module so far with <code>default\_branch</code> to update a project\, the value of <code>default\_branch</code> 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 \- <code>VarDict</code> will no longer accept variables named <code>\_var</code>\, <code>get\_meta</code>\, and <code>as\_dict</code> \([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)\)\.
-
-<a id="community-hashi-vault-3"></a>
-#### community\.hashi\_vault
-
-* The minimum required version of <code>hvac</code> is now <code>1\.2\.1</code> \([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)\)\.
-
-<a id="community-vmware-9"></a>
-#### community\.vmware
-
-* Removed support for ansible\-core version \< 2\.15\.0\.
-* vmware\_dvs\_host \- removed defaults for <em class="title-reference">vmnics</em> and <em class="title-reference">lag\_uplinks</em> \([https\://github\.com/ansible\-collections/community\.vmware/issues/1516](https\://github\.com/ansible\-collections/community\.vmware/issues/1516)\)\.
-* vmware\_host\_acceptance \- removed <em class="title-reference">acceptance\_level</em> and used its options in <em class="title-reference">state</em>\. This also means there will be no state <em class="title-reference">list</em> anymore\. In order to get information about the current acceptance level\, use the new module <em class="title-reference">vmware\_host\_acceptance\_info</em> \([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)\)\.
-
-<a id="dellemc-enterprise-sonic-4"></a>
-#### 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)\)\.
-
-<a id="hetzner-hcloud-5"></a>
-#### 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 \(<em class="title-reference">image\_id</em>\, <em class="title-reference">image\_os\_flavor</em> and <em class="title-reference">image\_name</em>\) when the server image is not defined\.
-
-<a id="deprecated-features-4"></a>
-### Deprecated Features
-
-* The <code>community\.azure</code> collection is officially unmaintained and has been archived\. Therefore\, it will be removed from Ansible 10\. There is already a successor collection <code>azure\.azcollection</code> 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 <code>hpe\.nimble</code> 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 <code>community\.sap</code> has been renamed to <code>community\.sap\_libs</code>\. For now both collections are included in Ansible\. The content in <code>community\.sap</code> 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 <code>community\.sap</code>\.
-* The collection <code>ibm\.spectrum\_virtualize</code> has been renamed to <code>ibm\.storage\_virtualize</code>\. For now\, both collections are included in Ansible\. The content in <code>ibm\.spectrum\_virtualize</code> 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 <code>ibm\.spectrum\_virtualize</code>\.
-* The collection <code>t\_systems\_mms\.icinga\_director</code> has been renamed to <code>telekom\_mms\.icinga\_director</code>\. For now both collections are included in Ansible\. The content in <code>t\_systems\_mms\.icinga\_director</code> 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 <code>t\_systems\_mms\.icinga\_director</code>\.
-* 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)\)\.
-
-<a id="ansible-core-18"></a>
-#### Ansible\-core
-
-* Deprecated ini config option <code>collections\_paths</code>\, use the singular form <code>collections\_path</code> instead
-* Deprecated the env var <code>ANSIBLE\_COLLECTIONS\_PATHS</code>\, use the singular form <code>ANSIBLE\_COLLECTIONS\_PATH</code> instead
-* Old style vars plugins which use the entrypoints <em class="title-reference">get\_host\_vars</em> or <em class="title-reference">get\_group\_vars</em> are deprecated\. The plugin should be updated to inherit from <em class="title-reference">BaseVarsPlugin</em> and define a <em class="title-reference">get\_vars</em> 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\.
-* <code>STRING\_CONVERSION\_ACTION</code> 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 <code>vaultid</code> parameter is deprecated and will be removed in ansible\-core 2\.20\. Use <code>vault\_id</code> instead\.
-* yum\_repository \- deprecated parameter \'keepcache\' \([https\://github\.com/ansible/ansible/issues/78693](https\://github\.com/ansible/ansible/issues/78693)\)\.
-
-<a id="amazon-aws-12"></a>
-#### amazon\.aws
-
-* ec2\_instance \- deprecation of <code>tenancy</code> and <code>placement\_group</code> in favor of <code>placement</code> 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 <code>/</code> 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)\)\.
-
-<a id="ansible-netcommon-1"></a>
-#### ansible\.netcommon
-
-* libssh \- the ssh\_\*\_args options are now marked that they will be removed after 2026\-01\-01\.
-
-<a id="ansible-windows-5"></a>
-#### ansible\.windows
-
-* Add warning when using Server 2012 or 2012 R2 with the <code>setup</code> 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 <code>microsoft\.ad\.domain</code> module\, the <code>ansible\.windows\.win\_domain</code> module will be removed in the <code>3\.0\.0</code> release of this collection\.
-* win\_domain\_controller \- Module is deprecated in favour of the <code>microsoft\.ad\.domain\_controller</code> module\, the <code>ansible\.windows\.win\_domain\_controller</code> module will be removed in the <code>3\.0\.0</code> release of this collection\.
-* win\_domain\_membership \- Module is deprecated in favour of the <code>microsoft\.ad\.membership</code> module\, the <code>ansible\.windows\.win\_domain\_membership</code> module will be removed in the <code>3\.0\.0</code> release of this collection\.
-
-<a id="cisco-ios-5"></a>
-#### 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
-
-<a id="cisco-iosxr-2"></a>
-#### 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\"
-
-<a id="community-ciscosmb-1"></a>
-#### community\.ciscosmb
-
-* support for Python 2\.6 nad 2\.7
-* support for ansible 2\.9
-
-<a id="community-crypto-11"></a>
-#### community\.crypto
-
-* get\_certificate \- the default <code>false</code> of the <code>asn1\_base64</code> option is deprecated and will change to <code>true</code> in community\.crypto 3\.0\.0 \([https\://github\.com/ansible\-collections/community\.crypto/pull/600](https\://github\.com/ansible\-collections/community\.crypto/pull/600)\)\.
-
-<a id="community-general-20"></a>
-#### community\.general
-
-* CmdRunner module utils \- deprecate <code>cmd\_runner\_fmt\.as\_default\_type\(\)</code> formatter \([https\://github\.com/ansible\-collections/community\.general/pull/6601](https\://github\.com/ansible\-collections/community\.general/pull/6601)\)\.
-* MH VarsMixin module utils \- deprecates <code>VarsMixin</code> and supporting classes in favor of plain <code>vardict</code> 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 <code>ack\_ansible29</code> and <code>ack\_min\_ansiblecore211</code> 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 <code>ack\_params\_state\_absent</code> 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 <code>compatibility</code> is deprecated as default for parameter <code>mode</code> \([https\://github\.com/ansible\-collections/community\.general/pull/6512](https\://github\.com/ansible\-collections/community\.general/pull/6512)\)\.
-* ejabberd\_user \- deprecate the parameter <code>logging</code> 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 <code>proxmox\_default\_behavior</code> 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 <code>proxmox\_default\_behavior</code> \([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 <code>10</code> for the <code>timeout</code> option is deprecated and will change to <code>60</code> 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 <code>module\_utils\.redhat</code> module is deprecated\, as
- effectively unused\: the <code>Rhsm</code>\, <code>RhsmPool</code>\, and <code>RhsmPools</code> classes
- will be removed in community\.general 9\.0\.0\; the <code>RegistrationBase</code> class
- will be removed in community\.general 10\.0\.0 together with the
- <code>rhn\_register</code> module\, as it is the only user of this class\; this means
- that the whole <code>module\_utils\.redhat</code> 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 <code>autosubscribe</code> alias for the <code>auto\_attach</code> 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 <code>pool</code> option is deprecated in favour of the
- more precise and flexible <code>pool\_ids</code> option
- \([https\://github\.com/ansible\-collections/community\.general/pull/6650](https\://github\.com/ansible\-collections/community\.general/pull/6650)\)\.
-* rhsm\_repository \- <code>state\=present</code> 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
- <code>present</code> and <code>absent</code> values of the <code>state</code> 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)\)\.
-
-<a id="community-postgresql-6"></a>
-#### community\.postgresql
-
-* postgresql\_lang \- the module has been deprecated and will be removed in <code>community\.postgresql 4\.0\.0</code>\. Please use the <code>postgresql\_ext</code> module instead \([https\://github\.com/ansible\-collections/community\.postgresql/issues/559](https\://github\.com/ansible\-collections/community\.postgresql/issues/559)\)\.
-
-<a id="community-sap-1"></a>
-#### 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
-
-<a id="community-windows-5"></a>
-#### community\.windows
-
-* win\_domain\_computer \- Module is deprecated in favour of the <code>microsoft\.ad\.computer</code> module\, the <code>community\.windows\.win\_domain\_computer</code> module will be removed in the <code>3\.0\.0</code> release of this collection\.
-* win\_domain\_group \- Module is deprecated in favour of the <code>microsoft\.ad\.group</code> module\, the <code>community\.windows\.win\_domain\_group</code> module will be removed in the <code>3\.0\.0</code> release of this collection\.
-* win\_domain\_group\_membership \- Module is deprecated in favour of the <code>microsoft\.ad\.group</code> module\, the <code>community\.windows\.win\_domain\_group\_membership</code> module will be removed in the <code>3\.0\.0</code> release of this collection\.
-* win\_domain\_object\_info \- Module is deprecated in favour of the <code>microsoft\.ad\.object\_info</code> module\, the <code>community\.windows\.win\_domain\_object\_info</code> module will be removed in the <code>3\.0\.0</code> release of this collection\.
-* win\_domain\_ou \- Module is deprecated in favour of the <code>microsoft\.ad\.ou</code> module\, the <code>community\.windows\.win\_domain\_ou</code> module will be removed in the <code>3\.0\.0</code> release of this collection\.
-* win\_domain\_user \- Module is deprecated in favour of the <code>microsoft\.ad\.user</code> module\, the <code>community\.windows\.win\_domain\_user</code> module will be removed in the <code>3\.0\.0</code> release of this collection\.
-
-<a id="junipernetworks-junos-2"></a>
-#### junipernetworks\.junos
-
-* <em class="title-reference">junos\_ospfv2</em> \- add deprecate warning for area\_range\.
-* add deprecate warning for junos\_acl\_interfaces key for junos facts results\.
-
-<a id="microsoft-ad-5"></a>
-#### 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\.
-
-<a id="purestorage-fusion-2"></a>
-#### 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 <em class="title-reference">nqn</em>\, <em class="title-reference">wwns</em>\, <em class="title-reference">host\_password</em>\, <em class="title-reference">host\_user</em>\, <em class="title-reference">target\_password\`and \`target\_user</em> 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 \- <em class="title-reference">endpoint\_type</em> 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
-
-<a id="t-systems-mms-icinga-director-1"></a>
-#### t\_systems\_mms\.icinga\_director
-
-* All modules and plugins are moved to the new namespace telekom\_mms\. Please update your code accordingly\.
-
-<a id="removed-features-previously-deprecated"></a>
-### 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 <code>vultr\.cloud</code> \(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)\)\.
-* <code>cisco\.nso</code> 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 <code>ansible\-galaxy collection install cisco\.nso</code>\.
-* <code>community\.fortios</code> 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 <code>ansible\-galaxy collection install community\.fortios</code>\.
-* <code>community\.google</code> 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 <code>ansible\-galaxy collection install community\.google</code>\.
-* <code>community\.skydive</code> 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 <code>ansible\-galaxy collection install community\.skydive</code>\.
-
-<a id="ansible-core-19"></a>
-#### Ansible\-core
-
-* ActionBase \- remove deprecated <code>\_remote\_checksum</code> method
-* PlayIterator \- remove deprecated <code>cache\_block\_tasks</code> and <code>get\_original\_task</code> methods
-* Remove deprecated <code>FileLock</code> class
-* Removed Python 3\.9 as a supported version on the controller\. Python 3\.10 or newer is required\.
-* Removed <code>include</code> which has been deprecated in Ansible 2\.12\. Use <code>include\_tasks</code> or <code>import\_tasks</code> instead\.
-* <code>Templar</code> \- remove deprecated <code>shared\_loader\_obj</code> parameter of <code>\_\_init\_\_</code>
-* <code>fetch\_url</code> \- remove auto disabling <code>decompress</code> when gzip is not available
-* <code>get\_action\_args\_with\_defaults</code> \- remove deprecated <code>redirected\_names</code> method parameter
-* ansible\-test \- Removed support for the remote Windows targets 2012 and 2012\-R2
-* inventory\_cache \- remove deprecated <code>default\.fact\_caching\_prefix</code> ini configuration option\, use <code>defaults\.fact\_caching\_prefix</code> 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 <em class="title-reference">get\_md5</em> parameter\.
-
-<a id="ansible-windows-6"></a>
-#### ansible\.windows
-
-* win\_get\_url \- Removed the deprecated option alias <code>passwordd</code>\, use <code>url\_password</code> instead\.
-* win\_get\_url \- Removed the deprecated option alias <code>user</code> and <code>username</code>\, use <code>url\_username</code> instead\.
-* win\_package \- Removed deprecated module option <code>ensure</code>\, use <code>state</code> instead\.
-* win\_package \- Removed deprecated module option <code>productid</code>\, use <code>product\_id</code> instead\.
-* win\_package \- Removed deprecated module option <code>username</code>\, <code>user\_name</code>\, <code>password</code>\, and <code>user\_password</code>\. Use <code>become</code> with <code>become\_flags\: logon\_type\=new\_credentials logon\_flags\=netcredentials\_only</code> on the task instead to replicate the same functionality instead\.
-* win\_reboot \- Removed backwards compatibility check where <code>ignore\_errors\: true</code> will be treated like <code>ignore\_unreachable\: true</code>\. Going forward <code>ignore\_errors\: true</code> will only ignore errors the plugin encountered and not an unreachable host\. Use <code>ignore\_unreachable\: true</code> to ignore that error like any other module\.
-* win\_regedit \- Removed support for using a <code>path</code> with forward slashes as a key separator\. Using a forward slash has been deprecated since Ansible 2\.9\. If using forward slashes in the <code>win\_regedit</code> <code>path</code> value\, make sure to change the forward slash <code>/</code> to a backslash <code>\\</code>\. If enclosed in double quotes the backslash will have to be doubled up\.
-* win\_updates \- Removed deprecated alias <code>blacklist</code>\, use <code>reject\_list</code> instead\.
-* win\_updates \- Removed deprecated alias <code>whitelist</code>\, use <code>accept\_list</code> instead\.
-* win\_updates \- Removed deprecated module option <code>use\_scheduled\_task</code>\. 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 <code>password</code>\, use <code>url\_password</code> instead\.
-* win\_uri \- Removed the deprecated option alias <code>user</code> and <code>username</code>\, use <code>url\_username</code> instead\.
-
-<a id="cisco-ios-6"></a>
-#### cisco\.ios
-
-* Deprecated ios\_logging module in favor of ios\_logging\_global\.
-* Deprecated next\_hop\_self attribute for bgp\_address\_family with nexthop\_self\.
-
-<a id="cisco-nxos-3"></a>
-#### 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\.
-
-<a id="community-ciscosmb-2"></a>
-#### community\.ciscosmb
-
-* remove testing for Python 2\.6 nad 2\.7
-* remove testing for ansible 2\.9
-
-<a id="community-general-21"></a>
-#### 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 <code>state\=absent</code>\, the options <code>script</code>\, <code>ttl</code>\, <code>tcp</code>\, <code>http</code>\, and <code>interval</code> can no longer be specified \([https\://github\.com/ansible\-collections/community\.general/pull/7358](https\://github\.com/ansible\-collections/community\.general/pull/7358)\)\.
-* gconftool2 \- <code>state\=get</code> has been removed\. Use the module <code>community\.general\.gconftool2\_info</code> 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 <code>access\_level</code> option\. To restore the previous behavior\, explicitly set it to <code>ref\_protected</code> \([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 \- <code>state\=list</code> has been removed\. Use the module <code>community\.general\.manageiq\_policies\_info</code> instead \([https\://github\.com/ansible\-collections/community\.general/pull/7358](https\://github\.com/ansible\-collections/community\.general/pull/7358)\)\.
-* manageiq\_tags \- <code>state\=list</code> has been removed\. Use the module <code>community\.general\.manageiq\_tags\_info</code> 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 <code>ArgFormat</code> 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 <code>CmdMixin</code> mixin has been removed\. Use <code>community\.general\.plugins\.module\_utils\.cmd\_runner\.CmdRunner</code> 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 <code>CmdModuleHelper</code> and <code>CmdStateModuleHelper</code> classes have been removed\. Use <code>community\.general\.plugins\.module\_utils\.cmd\_runner\.CmdRunner</code> 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 <code>disable\_facts</code> option was removed \([https\://github\.com/ansible\-collections/community\.general/pull/7358](https\://github\.com/ansible\-collections/community\.general/pull/7358)\)\.
-
-<a id="community-hashi-vault-4"></a>
-#### community\.hashi\_vault
-
-* The minimum supported version of <code>ansible\-core</code> is now <code>2\.14</code>\, support for <code>2\.13</code> has been dropped \([https\://github\.com/ansible\-collections/community\.hashi\_vault/pull/403](https\://github\.com/ansible\-collections/community\.hashi\_vault/pull/403)\)\.
-
-<a id="community-vmware-10"></a>
-#### community\.vmware
-
-* Removed module util <em class="title-reference">version</em> \([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 <em class="title-reference">absent</em> and <em class="title-reference">present</em> \([https\://github\.com/ansible\-collections/community\.vmware/issues/1517](https\://github\.com/ansible\-collections/community\.vmware/issues/1517)\)\.
-* vmware\_rest\_client \- removed deprecated method <em class="title-reference">get\_tag\_by\_category\(\)</em> \([https\://github\.com/ansible\-collections/community\.vmware/issues/1898](https\://github\.com/ansible\-collections/community\.vmware/issues/1898)\)\.
-
-<a id="community-windows-6"></a>
-#### 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 <code>app\_parameters</code>\, use <code>arguments</code> instead\.
-* win\_psmodule \- Removed the deprecated module option <code>url</code>\, use <code>community\.windows\.win\_psrepository</code> to manage repositories instead
-* win\_psmodule \- Will no longer remove the <code>repository</code> specified when <code>state\: absent</code>\, use <code>community\.windows\.win\_psrepository</code> to manage repositories instead
-* win\_scheduled\_tasks \- Removed support for a trigger <code>repetition</code> to be defined as a list of dictionary entries\. Specify the <code>repetition</code> as a dictionary value rather than a list of dictionaries\.
-
-<a id="dellemc-openmanage-9"></a>
-#### dellemc\.openmanage
-
-* The <code>dellemc\_get\_firmware\_inventory</code> module is removed and replaced with the module <code>idrac\_firmware\_info</code>\.
-* The <code>dellemc\_get\_system\_inventory</code> module is removed and replaced with the module <code>idrac\_system\_info</code>\.
-
-<a id="hetzner-hcloud-6"></a>
-#### 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
-
-<a id="security-fixes-3"></a>
-### Security Fixes
-
-<a id="ansible-core-20"></a>
-#### Ansible\-core
-
-* ansible\-galaxy \- Prevent roles from using symlinks to overwrite files outside of the installation directory \(CVE\-2023\-5115\)
-
-<a id="bugfixes-6"></a>
-### Bugfixes
-
-<a id="ansible-core-21"></a>
-#### 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 <code>ansible\-config init</code> man page option indentation\.
-* Fix <code>ast</code> deprecation warnings for <code>Str</code> and <code>value\.s</code> when using Python 3\.12\.
-* Fix <code>run\_once</code> 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 <em class="title-reference">pip</em> module failure in case of usage quotes for <em class="title-reference">virtualenv\_command</em> 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 <code>FILE\_ATTRIBUTES</code> from <code>ansible\.module\_utils\.common\.file</code> in <code>ansible\.module\_utils\.basic</code> 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 <code>fromtimestamp</code> and <code>now</code> with UTC timezone instead of <code>utcfromtimestamp</code> and <code>utcnow</code>\, 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 <code>include\_role</code> \([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 <code>jinja2\_native</code> 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 <code>static</code> parameter of <code>include\_role</code>
-* Replace uses of <code>configparser\.ConfigParser\.readfp\(\)</code> which was removed in Python 3\.12 with <code>configparser\.ConfigParser\.read\_file\(\)</code> \([https\://github\.com/ansible/ansible/issues/81656](https\://github\.com/ansible/ansible/issues/81656)\)
-* Set filters <code>intersect</code>\, <code>difference</code>\, <code>symmetric\_difference</code> and <code>union</code> now always return a <code>list</code>\, never a <code>set</code>\. Previously\, a <code>set</code> would be returned if the inputs were a hashable type such as <code>str</code>\, instead of a collection\, such as a <code>list</code> or <code>tuple</code>\.
-* Set filters <code>intersect</code>\, <code>difference</code>\, <code>symmetric\_difference</code> and <code>union</code> now use set operations when the given items are hashable\. Previously\, list operations were performed unless the inputs were a hashable type such as <code>str</code>\, instead of a collection\, such as a <code>list</code> or <code>tuple</code>\.
-* Switch result queue from a <code>multiprocessing\.queues\.Queue\` to \`\`multiprocessing\.queues\.SimpleQueue</code>\, primarily to allow properly handling pickling errors\, to prevent an infinite hang waiting for task results
-* The <code>ansible\-config init</code> command now has a documentation description\.
-* The <code>ansible\-galaxy collection download</code> command now has a documentation description\.
-* The <code>ansible\-galaxy collection install</code> command documentation is now visible \(previously hidden by a decorator\)\.
-* The <code>ansible\-galaxy collection verify</code> command now has a documentation description\.
-* The <code>ansible\-galaxy role install</code> command documentation is now visible \(previously hidden by a decorator\)\.
-* The <code>ansible\-inventory</code> command command now has a documentation description \(previously used as the epilog\)\.
-* The <code>hostname</code> 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 <code>func</code> to find the command function instead of looking it up by the command name\.
-* <code>StrategyBase\.\_process\_pending\_results</code> \- create a <code>Templar</code> on demand for templating <code>changed\_when</code>/<code>failed\_when</code>\.
-* <code>ansible\-galaxy</code> now considers all collection paths when identifying which collection requirements are already installed\. Use the <code>COLLECTIONS\_PATHS</code> and <code>COLLECTIONS\_SCAN\_SYS\_PATHS</code> 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)\)
-* <code>ansible\.module\_utils\.service</code> \- ensure binary data transmission in <code>daemonize\(\)</code>
-* <code>ansible\.module\_utils\.service</code> \- fix inter\-process communication in <code>daemonize\(\)</code>
-* <code>import\_role</code> reverts to previous behavior of exporting vars at compile time\.
-* <code>pkg\_mgr</code> \- 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 <code>data</code> 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 <code>pylint</code> plugin to work around a known issue on Python 3\.12\.
-* ansible\-test \- Add support for <code>argcomplete</code> 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 <code>\:</code> 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 <code>\-e</code> option with sanity tests\.
-* ansible\-test \- Fix various cases where the test timeout could expire without terminating the tests\.
-* ansible\-test \- Include missing <code>pylint</code> 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 <code>import</code> 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 <code>pylint</code> to 2\.17\.2 to resolve several possible false positives\.
-* ansible\-test \- Update <code>pylint</code> to 2\.17\.3 to resolve several possible false positives\.
-* ansible\-test \- Update <code>pylint</code> to version 3\.0\.1\.
-* ansible\-test \- Use <code>raise \.\.\. from \.\.\.</code> when raising exceptions from within an exception handler\.
-* ansible\-test \- When bootstrapping remote FreeBSD instances\, use the OS packaged <code>setuptools</code> instead of installing the latest version from PyPI\.
-* ansible\-test local change detection \- use <code>git merge\-base \<branch\> HEAD</code> instead of <code>git merge\-base \-\-fork\-point \<branch\></code> \([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 <code>create\=true</code> \([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 <em class="title-reference">content</em> and <em class="title-reference">\-\-diff</em> \([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 <code>update\_only</code> 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 <code>transaction\.check\_gpg\_signatures</code> 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 <code>v2\_playbook\_on\_notify</code> callback not being called when notifying handlers
-* handlers \- the <code>listen</code> keyword can affect only one handler with the same name\, the last one defined as it is a case with the <code>notify</code> 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 <code>\_LOCK</code> \([https\://github\.com/ansible/ansible/issues/81613](https\://github\.com/ansible/ansible/issues/81613)\)
-* lookup/url\.py \- Fix incorrect var/env/ini entry for <em class="title-reference">force\_basic\_auth</em>
-* man page build \- Remove the dependency on the <code>docs</code> directory for building man pages\.
-* man page build \- Sub commands of <code>ansible\-galaxy role</code> and <code>ansible\-galaxy collection</code> 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 <code>crypt</code> \(only used if <code>passlib</code> is not installed\) for the <code>bcrypt</code> 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 <code>import\_module</code> import from <code>importlib</code>\.
-* pip module \- Update module to prefer use of the python <code>packaging</code> and <code>importlib\.metadata</code> modules due to <code>pkg\_resources</code> being deprecated \([https\://github\.com/ansible/ansible/issues/80488](https\://github\.com/ansible/ansible/issues/80488)\)
-* pkg\_mgr\.py \- Fix <em class="title-reference">ansible\_pkg\_mgr</em> incorrect in TencentOS Server Linux
-* pkg\_mgr\.py \- Fix <em class="title-reference">ansible\_pkg\_mgr</em> 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 <code>\-\-syntax\-check</code> to <code>ansible\-playbook</code> 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 <code>unsafe</code> value to <code>bool</code>
-* vault and unvault filters now properly take <code>vault\_id</code> 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
-
-<a id="amazon-aws-13"></a>
-#### 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 <code>NoRegionError</code> 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 <code>scrub\_none\_values</code> 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 <code>Conditions</code> 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 <code>InvalidInstanceID\.NotFound</code> 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 <code>Content\-Encoding\: gzip</code> \([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 <code>default\_create</code> 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 <code>create\_or\_update\_alb\(\)</code> 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 <code>AllocatedStorage</code>\, <code>DBClusterInstanceClass</code>\, <code>StorageType</code>\, <code>Iops</code>\, and <code>EngineMode</code> 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 <code>NoSuchTagSet</code> 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 <code>/</code> \([https\://github\.com/ansible\-collections/amazon\.aws/issues/1548](https\://github\.com/ansible\-collections/amazon\.aws/issues/1548)\)\.
-
-<a id="ansible-netcommon-2"></a>
-#### 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)\)
-
-<a id="ansible-utils-2"></a>
-#### 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)\)
-
-<a id="ansible-windows-7"></a>
-#### 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)
-
-<a id="arista-eos-2"></a>
-#### 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
-
-<a id="check-point-mgmt-4"></a>
-#### 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
-
-<a id="chocolatey-chocolatey-2"></a>
-#### chocolatey\.chocolatey
-
-* win\-chocolatey \- unable to install packages if a license is already installed and chocolatey\.extension is not installed
-
-<a id="cisco-aci-3"></a>
-#### 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\)
-
-<a id="cisco-ios-7"></a>
-#### 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 <em class="title-reference">private\_config\_encryption</em> 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\.
-
-<a id="cisco-iosxr-3"></a>
-#### 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 <code>replaced</code> 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 <code>gather</code> state of not gathering management interface\. \([https\://github\.com/ansible\-collections/cisco\.iosxr/issues/381](https\://github\.com/ansible\-collections/cisco\.iosxr/issues/381)\)
-
-<a id="cisco-ise-5"></a>
-#### 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\.
-
-<a id="cisco-meraki-5"></a>
-#### cisco\.meraki
-
-* Adding condition to avoid error on exists on devices\.
-* Bad naming <em class="title-reference">networkId</em> parameter in <em class="title-reference">networks\_appliance\_traffic\_shaping\_custom\_performance\_classes</em>\.
-* Bad naming <em class="title-reference">networkId</em> parameter in <em class="title-reference">networks\_appliance\_warm\_spare\_swap</em>\.
-* Bad naming <em class="title-reference">networkId</em> parameter in <em class="title-reference">networks\_bind</em>\.
-* Bad naming <em class="title-reference">networkId</em> parameter in <em class="title-reference">networks\_clients\_provision</em>\.
-* Bad naming <em class="title-reference">networkId</em> parameter in <em class="title-reference">networks\_devices\_remove</em> and <em class="title-reference">networks\_devices\_claim\_vmx</em>
-* Bad naming <em class="title-reference">networkId</em> parameter in <em class="title-reference">networks\_firmware\_upgrades\_rollbacks</em>\.
-* Bad naming <em class="title-reference">networkId</em> parameter in <em class="title-reference">networks\_firmware\_upgrades\_staged\_events\_rollbacks</em>\.
-* Bad naming <em class="title-reference">networkId</em> parameter in <em class="title-reference">networks\_mqtt\_brokers</em>\.
-* Bad naming <em class="title-reference">networkId</em> parameter in <em class="title-reference">networks\_pii\_requests\_delete</em>\.
-* Bad naming <em class="title-reference">networkId</em> parameter in <em class="title-reference">networks\_sm\_devices\_checkin</em>\.
-* Bad naming <em class="title-reference">networkId</em> parameter in <em class="title-reference">networks\_sm\_devices\_fields</em>\.
-* Bad naming <em class="title-reference">networkId</em> parameter in <em class="title-reference">networks\_sm\_devices\_lock</em>\.
-* Bad naming <em class="title-reference">networkId</em> parameter in <em class="title-reference">networks\_sm\_devices\_modify\_tags</em>\.
-* Bad naming <em class="title-reference">networkId</em> parameter in <em class="title-reference">networks\_sm\_devices\_move</em>\.
-* Bad naming <em class="title-reference">networkId</em> parameter in <em class="title-reference">networks\_sm\_devices\_refresh\_details</em>\.
-* Bad naming <em class="title-reference">networkId</em> parameter in <em class="title-reference">networks\_sm\_devices\_unenroll</em>\.
-* Bad naming <em class="title-reference">networkId</em> parameter in <em class="title-reference">networks\_sm\_devices\_wipe</em>\.
-* Bad naming <em class="title-reference">networkId</em> parameter in <em class="title-reference">networks\_sm\_user\_access\_devices\_delete</em>\.
-* Bad naming <em class="title-reference">networkId</em> parameter in <em class="title-reference">networks\_split</em>\.
-* Bad naming <em class="title-reference">networkId</em> parameter in <em class="title-reference">networks\_switch\_stacks\_add</em>\.
-* Bad naming <em class="title-reference">networkId</em> parameter in <em class="title-reference">networks\_switch\_stacks\_remove</em>\.
-* Bad naming <em class="title-reference">networkId</em> parameter in <em class="title-reference">networks\_unbind</em>\.
-* 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\'\.
-
-<a id="cisco-mso-3"></a>
-#### cisco\.mso
-
-* Fix mso\_tenant\_site \"site not found\" issue on absent \(\#368\)
-
-<a id="cisco-nxos-4"></a>
-#### 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)\)\.
-
-<a id="cloud-common"></a>
-#### 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)\)\.
-
-<a id="cloudscale-ch-cloud-1"></a>
-#### cloudscale\_ch\.cloud
-
-* Add missing modules to the \"cloudscale\_ch\.cloud\.cloudscale\" action group\.
-* Remove outdated Ansible version requirement from the README\.
-
-<a id="community-aws-7"></a>
-#### community\.aws
-
-* Remove <code>apigateway</code> and <code>apigateway\_deployment</code> 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 <code>compute\_environment\_name</code> 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 <code>enabled</code> 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 <code>compute\_environment\_name</code> 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 <code>aws</code> 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 <code>boundary</code> 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 <code>tags</code> 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 <code>aws</code> 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 <code>aws</code> partition \([https\://github\.com/ansible\-collections/community\.aws/issues/1846](https\://github\.com/ansible\-collections/community\.aws/issues/1846)\)\.
-
-<a id="community-ciscosmb-3"></a>
-#### community\.ciscosmb
-
-* added Cisco device config guide to address issue
-* added extra \"n\" to sending commands to address issue
-
-<a id="community-crypto-12"></a>
-#### community\.crypto
-
-* Fix PEM detection/identification to also accept random other lines before the line starting with <code>\-\-\-\-\-BEGIN</code> \([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 <code>type</code> \([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 <code>ssh</code> and <code>ssh\-keygen</code> 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)\)\.
-
-<a id="community-digitalocean-4"></a>
-#### community\.digitalocean
-
-* digital\_ocean\_domain \- fix <code>all\_domains</code> by using <code>get\_paginated\_data</code> 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)\)\.
-
-<a id="community-dns-9"></a>
-#### 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)\)\.
-
-<a id="community-docker-11"></a>
-#### 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 <code>service\=true</code> 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 <code>has\_different\_config\(\)</code> was raising an <code>AttributeError</code> because the <code>self\.existing\_volume\[\"Labels\"\]</code> dictionary was <code>None</code> \([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)\)\.
-
-<a id="community-general-22"></a>
-#### 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 <code>notes</code> \([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 <code>argument\_spec</code> has no type\, meaning it is implicitly a <code>str</code>\, <code>CmdRunner</code> would fail trying to find the <code>type</code> 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 <code>working\_dir</code> dependent commands\. The module was throwing an error when trying to run a <code>working\_dir</code> dependent command\, because it tried to get the command help without passing the <code>working\_dir</code> \([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 <code>rrule</code> 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 <code>ejabberdctl</code> 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 <code>None</code> 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 <code>gitlab\_group\_members</code> 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 <code>purge\=true</code> due to missing <code>raw</code> 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 <code>gitlab\_project\_members</code> 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 <code>purge\=true</code> due to missing <code>raw</code> 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 <code>gitlab\_protected\_branches</code> 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 <code>gitlab\_user</code> 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 <code>follow</code> 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 <code>http\_agent</code>\, <code>timeout</code>\, and <code>validate\_certs</code> <code>open\_url\(\)</code> parameters \([https\://github\.com/ansible\-collections/community\.general/pull/7067](https\://github\.com/ansible\-collections/community\.general/pull/7067)\)\.
-* keycloak module utils \- fix <code>is\_struct\_included</code> 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 <code>get\_user\_by\_username</code> now return the user representation or <code>None</code> 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 <code>base64\_attributes</code> 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 <code>C\.UTF\-8</code> \([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 <code>remote\_addr</code> defaulting to <code>inventory\_hostname</code> 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 <code>require\_tty</code> 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 <code>maxsplit</code> 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 <code>get\_option</code> calls \([https\://github\.com/ansible\-collections/community\.general/pull/7323](https\://github\.com/ansible\-collections/community\.general/pull/7323)\)\.
-* nmap inventory plugin \- now uses <code>get\_option</code> 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 <code>xmit\_hash\_policy</code> \([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 <code>list index out of range</code> 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 <code>type\(\)</code> calls with <code>isinstance\(\)</code> 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 <code>Can\'t find</code> 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 <code>yay</code> running as <code>root</code> \([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 <code>pip\_args</code> 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 <code>changed\_use</code> and <code>newuse</code> 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 <code>template</code> 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 <code>token\_name</code> and <code>token\_value</code> 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 <code>cdrom</code> media due to <code>size</code> always being appended \([https\://github\.com/ansible\-collections/community\.general/pull/6770](https\://github\.com/ansible\-collections/community\.general/pull/6770)\)\.
-* proxmox\_kvm \- <code>absent</code> state with <code>force</code> specified failed to stop the VM due to the <code>timeout</code> value not being passed to <code>stop\_vm</code> \([https\://github\.com/ansible\-collections/community\.general/pull/6827](https\://github\.com/ansible\-collections/community\.general/pull/6827)\)\.
-* proxmox\_kvm \- <code>restarted</code> state did not actually restart a VM in some VM configurations\. The state now uses the Proxmox reboot endpoint instead of calling the <code>stop\_vm</code> and <code>start\_vm</code> 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 <code>name</code> option is provided without <code>vmid</code> 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 <code>api\_user</code> \+ <code>api\_password</code> constraint from <code>required\_together</code> as it causes to require <code>api\_password</code> 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 <code>requests\_toolbelt</code> 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 <code>SimpleUpdate</code> and <code>MultipartHTTPPushUpdate</code> commands to treat the lack of a <code>MessageId</code> 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 <code>ListUsers</code> 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 <code>consumer\_type</code>
- \([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 <code>purge</code> option\, the <code>repositories</code>
- 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 <code>TypeError</code> 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 <code>latest</code> in parameter <code>channel</code> 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 <code>\-\-\-</code> 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 <code>\-backend\-config</code> option double encapsulating with <code>shlex\_quote</code> 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 <code>fetch\_attachments\=true</code> \([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)\)\.
-
-<a id="community-grafana-5"></a>
-#### community\.grafana
-
-* Fix error with datasources configured without basicAuth
-* grafana\_folder\, fix an issue during delete \(starting Grafana 9\.3\)
-
-<a id="community-hashi-vault-5"></a>
-#### community\.hashi\_vault
-
-* vault\_write \- the <code>vault\_write</code> lookup and module were not able to write data containing keys named <code>path</code> or <code>wrap\_ttl</code> due to a bug in the <code>hvac</code> library\. These plugins have now been updated to take advantage of fixes in <code>hvac\>\=1\.2</code> to address this \([https\://github\.com/ansible\-collections/community\.hashi\_vault/issues/389](https\://github\.com/ansible\-collections/community\.hashi\_vault/issues/389)\)\.
-
-<a id="community-hrobot-4"></a>
-#### 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)\)\.
-
-<a id="community-libvirt-1"></a>
-#### community\.libvirt
-
-* libvirt\_qemu \- connection plugin threw a warning about an improperly configured remote target\. Fix adds <em class="title-reference">inventory\_hostname</em> to <em class="title-reference">options\.remote\_addr\.vars</em> \([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 <code>listAllVolumes</code> with <code>listAllVolumes</code> 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 <code>listStoragePools</code> and <code>listDefinedStoragePools</code> with <code>listAllStoragePools</code> to fix potential race conditions \([https\://github\.com/ansible\-collections/community\.libvirt/pull/134](https\://github\.com/ansible\-collections/community\.libvirt/pull/134)\)\.
-
-<a id="community-mysql-5"></a>
-#### community\.mysql
-
-* mysql module utils \- use the connection arguments <code>db</code> instead of <code>database</code> and <code>passwd</code> instead of <code>password</code> 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)\)\.
-
-<a id="community-network"></a>
-#### 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 <code>defaults\: True</code>\. It happened because the command is <code>show configurationdetail</code> instead of <code>show configuration detail</code> \([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 <code>network\_cli</code>\. It happened because we send command without <code>no\-refresh</code> and script <code>cli2json\.py</code> 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)\)\.
-
-<a id="community-postgresql-7"></a>
-#### 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)\)\.
-
-<a id="community-routeros-7"></a>
-#### community\.routeros
-
-* api\_info\, api\_modify \- in the <code>snmp</code> path\, ensure that <code>engine\-id\-suffix</code> is only available on RouterOS 7\.10\+\, and that <code>engine\-id</code> 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 <code>engine\-id\-suffix</code> for the <code>snmp</code> 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 <code>tls</code> for the <code>tool e\-mail</code> 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)\)\.
-
-<a id="community-sops"></a>
-#### 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 <code>sops\_github\_latest\_detection\=latest\-release</code>\, 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 <code>pkg\_mgr</code> fact is definitely available when installing on <code>localhost</code>\. 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 <code>yaml</code> when the file extension <code>\.yml</code> is used\. Now both <code>\.yaml</code> and <code>\.yml</code> files use the SOPS <code>\-\-output\-type\=yaml</code> formatting \([https\://github\.com/ansible\-collections/community\.sops/issues/164](https\://github\.com/ansible\-collections/community\.sops/issues/164)\)\.
-
-<a id="community-vmware-11"></a>
-#### 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 <em class="title-reference">absent</em> 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)\)\.
-
-<a id="community-windows-7"></a>
-#### community\.windows
-
-* win\_psmodule \- fix requireLicenseAcceptance test so that it is no longer always true
-
-<a id="community-zabbix-5"></a>
-#### community\.zabbix
-
-* Proxy and Agent Roles \- Added <em class="title-reference">zabbix\_api\_use\_ssl</em> variable to allow secure API connections
-* Web Role \- Added defaults and documentation for <em class="title-reference">zabbix\_apache\_custom\_includes</em>
-* 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\.
-
-<a id="containers-podman-7"></a>
-#### 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 <em class="title-reference">podman\_generate\_systemd</em> 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
-
-<a id="dellemc-enterprise-sonic-5"></a>
-#### 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)\)\.
-
-<a id="dellemc-openmanage-10"></a>
-#### 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 <code>SNIMissingWarning</code> 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)\)\.
-
-<a id="f5networks-f5-modules-3"></a>
-#### 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
-
-<a id="fortinet-fortimanager-6"></a>
-#### 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\.
-
-<a id="fortinet-fortios-5"></a>
-#### 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\.
-
-<a id="google-cloud-2"></a>
-#### google\.cloud
-
-* Use default service account if <em class="title-reference">service\_account\_email</em> is unset\.
-
-<a id="hetzner-hcloud-7"></a>
-#### hetzner\.hcloud
-
-* <em class="title-reference">\*\_info</em> \- Consistently fail on invalid ID in <em class="title-reference">\*\_info</em> modules\.
-* hcloud\_firewall \- The port argument is required when the firewall rule protocol is <em class="title-reference">udp</em> or <em class="title-reference">tcp</em>\.
-* hcloud\_image\_info Fix facts modules deprecated result key
-* hcloud\_load\_balancer\_service \- In the returned data\, the invalid <em class="title-reference">health\_check\.http\.certificates</em> field was renamed to <em class="title-reference">health\_check\.http\.status\_codes</em>\.
-* 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
-
-<a id="junipernetworks-junos-3"></a>
-#### junipernetworks\.junos
-
-* fix <em class="title-reference">no\_advertise\_adjacency\_segment</em> config implementation\.
-* fix <em class="title-reference">no\_eligible\_backup</em> config implementation\.
-* fix <em class="title-reference">no\_eligible\_remote\_backup</em> config implementation\.
-* fix <em class="title-reference">no\_interface\_state\_traps</em> config implementation\.
-* fix <em class="title-reference">no\_neighbor\_down\_notification</em> config implementation\.
-* fix <em class="title-reference">node\_link\_protection</em> implementation\.
-* fix md5 authentication which allows list of keys to be configured\.
-
-<a id="microsoft-ad-6"></a>
-#### microsoft\.ad
-
-* Added the missing dependency <code>dpapi\-ng</code> to Ansible Execution Environments requirements file for LAPS decryption support
-* Ensure renaming and moving an object will be done with the <code>domain\_server</code> and <code>domain\_username</code> credentials specified \- [https\://github\.com/ansible\-collections/microsoft\.ad/issues/54](https\://github\.com/ansible\-collections/microsoft\.ad/issues/54)
-* Fix up <code>protect\_from\_deletion</code> 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 <code>scope\: domainlocal</code> 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 <code>scope</code> and <code>category</code> 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 <code>spn</code> diff after key is <code>spn</code> and not <code>kerberos\_encryption\_types</code>
-* microsoft\.ad\.user \- treat an expired account as a password that needs to be changed
-
-<a id="netapp-ontap-9"></a>
-#### 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 <code>banner</code> and <code>motd\_message</code> 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 <code>show\_cluster\_motd</code> option when try to set banner or motd\_message for the first time in REST\.
-* na\_ontap\_nfs \- fix <em class="title-reference">default\_user</em> under <em class="title-reference">windows</em> not getting modified if not set previously in REST\.
-* na\_ontap\_svm \- fix REST version warning for <em class="title-reference">ndmp</em> under <em class="title-reference">services</em>\.
-* na\_ontap\_volume \- fix invalid field error with \'space\.snapshot\.autodelete\' in REST\.
-
-<a id="netbox-netbox-6"></a>
-#### netbox\.netbox
-
-* Fix schema caching \[\#1053\]\([https\://github\.com/netbox\-community/ansible\_modules/pull/1053](https\://github\.com/netbox\-community/ansible\_modules/pull/1053)\)
-* <a href="#system-message-1"><span class="problematic">netbox\_</span></a> 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
-
- <details>
- <summary><strong>ERROR/3</strong> (&lt;string&gt;, line 1)</summary>
-
- Unknown target name\: \"netbox\"\.
-
- </details>
-
-<a id="ovirt-ovirt-1"></a>
-#### 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)\)\.
-
-<a id="purestorage-flasharray-8"></a>
-#### 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 <em class="title-reference">gateway</em> to be set as <em class="title-reference">0\.0\.0\.0</em> 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 <em class="title-reference">now</em> and <em class="title-reference">remote</em> 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\.
-
-<a id="purestorage-flashblade-7"></a>
-#### 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 <em class="title-reference">show</em> state for all user policies
-
-<a id="purestorage-fusion-3"></a>
-#### purestorage\.fusion
-
-* fusion\_info \- fix runtime errors caused when listing <em class="title-reference">interfaces</em>\, <em class="title-reference">arrays</em> and <em class="title-reference">snapshots</em> 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\'
-
-<a id="t-systems-mms-icinga-director-2"></a>
-#### 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)\)
-
-<a id="theforeman-foreman-3"></a>
-#### 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 <code>content\_type</code> and <code>content</code> 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 <code>content\_type</code> and <code>content</code> 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 <code>version</code> not <code>description</code> 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 <code>override</code> to <code>false</code> \([https\://github\.com/theforeman/foreman\-ansible\-modules/issues/1644](https\://github\.com/theforeman/foreman\-ansible\-modules/issues/1644)\)
-
-<a id="vultr-cloud-5"></a>
-#### vultr\.cloud
-
-* firewall\_rule \- Fixed an idempotency issue if parameter <code>port</code> 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)\)\.
-
-<a id="vyos-vyos-1"></a>
-#### 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)\)
-
-<a id="known-issues-2"></a>
-### Known Issues
-
-<a id="ansible-core-22"></a>
-#### 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 <code>pep8</code> 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)\)\.
-
-<a id="community-crypto-13"></a>
-#### 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/)\.
-
-<a id="community-dns-10"></a>
-#### 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/)\.
-
-<a id="community-docker-12"></a>
-#### 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/)\.
-
-<a id="community-general-23"></a>
-#### 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)\)\.
-
-<a id="community-hrobot-5"></a>
-#### 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/)\.
-
-<a id="community-routeros-8"></a>
-#### 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/)\.
-
-<a id="community-sops-1"></a>
-#### 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/)\.
-
-<a id="dellemc-openmanage-11"></a>
-#### 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 <code>ome\_network\_attributes</code>\, 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 <code>power\_cap</code> is not within the supported range of 0 to 32767\, <code>Unable to complete the request because PowerCap does not exist or is not applicable for the resource URI\.</code>
-* 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\.
-
-<a id="new-plugins-5"></a>
-### New Plugins
-
-<a id="cliconf"></a>
-#### Cliconf
-
-* ansible\.netcommon\.default \- General purpose cliconf plugin for new platforms
-
-<a id="filter-5"></a>
-#### 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
-
-<a id="inventory"></a>
-#### Inventory
-
-* community\.aws\.aws\_mq \- MQ broker inventory source
-
-<a id="lookup-2"></a>
-#### 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
-
-<a id="new-modules-5"></a>
-### New Modules
-
-<a id="amazon-aws-14"></a>
-#### 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
-
-<a id="cisco-ios-8"></a>
-#### cisco\.ios
-
-* cisco\.ios\.ios\_service \- Resource module to configure service\.
-
-<a id="cisco-iosxr-4"></a>
-#### cisco\.iosxr
-
-* cisco\.iosxr\.iosxr\_bgp\_templates \- Manages BGP templates resource module\.
-
-<a id="cisco-nxos-5"></a>
-#### cisco\.nxos
-
-* cisco\.nxos\.nxos\_fc\_interfaces \- Fc Interfaces resource module
-
-<a id="cloudscale-ch-cloud-2"></a>
-#### 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
-
-<a id="community-aws-8"></a>
-#### community\.aws
-
-* community\.aws\.route53\_wait \- wait for changes in Amazons Route 53 DNS service to propagate
-
-<a id="community-dns-11"></a>
-#### 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
-
-<a id="community-general-24"></a>
-#### 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
-
-<a id="community-grafana-6"></a>
-#### community\.grafana
-
-* community\.grafana\.grafana\_organization\_user \- Manage Grafana Organization Users\.
-
-<a id="community-vmware-12"></a>
-#### 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
-
-<a id="community-zabbix-6"></a>
-#### 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\.
-
-<a id="containers-podman-8"></a>
-#### containers\.podman
-
-* containers\.podman\.podman\_container\_exec \- Executes a command in a running container
-* containers\.podman\.podman\_runlabel \- Run given label from given image
-
-<a id="dellemc-enterprise-sonic-6"></a>
-#### 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
-
-<a id="dellemc-openmanage-12"></a>
-#### 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\.
-
-<a id="dellemc-powerflex-6"></a>
-#### dellemc\.powerflex
-
-* dellemc\.powerflex\.snapshot\_policy \- Manage snapshot policies on Dell PowerFlex
-
-<a id="dellemc-unity-1"></a>
-#### dellemc\.unity
-
-* dellemc\.unity\.replication\_session \- Manage replication session on the Unity storage system
-
-<a id="f5networks-f5-modules-4"></a>
-#### f5networks\.f5\_modules
-
-* f5networks\.f5\_modules\.bigip\_provision\_async \- Manage BIG\-IP module provisioning
-
-<a id="fortinet-fortimanager-7"></a>
-#### 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
-
-<a id="inspur-ispim-2"></a>
-#### inspur\.ispim
-
-* inspur\.ispim\.hba\_info \- Get CPU information
-* inspur\.ispim\.update\_psu \- Update PSU
-
-<a id="netapp-ontap-10"></a>
-#### 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\.
-
-<a id="netbox-netbox-7"></a>
-#### netbox\.netbox
-
-* netbox\.netbox\.netbox\_config\_template \- Creates\, updates\, or removed a config template from NetBox
-
-<a id="ngine-io-exoscale"></a>
-#### ngine\_io\.exoscale
-
-* ngine\_io\.exoscale\.instance\_rdns\_record \- Manages reverse DNS records for Exoscale compute instances\.
-
-<a id="purestorage-flasharray-9"></a>
-#### purestorage\.flasharray
-
-* purestorage\.flasharray\.purefa\_file \- Manage FlashArray File Copies
-* purestorage\.flasharray\.purefa\_logging \- Manage Pure Storage FlashArray Audit and Session logs
-
-<a id="sensu-sensu-go-1"></a>
-#### sensu\.sensu\_go
-
-* sensu\.sensu\_go\.pipeline \- Manage Sensu pipelines\.
-* sensu\.sensu\_go\.pipeline\_info \- List Sensu pipelines\.
-
-<a id="t-systems-mms-icinga-director-3"></a>
-#### 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
-
-<a id="theforeman-foreman-4"></a>
-#### theforeman\.foreman
-
-* theforeman\.foreman\.smart\_class\_parameter\_override\_value \- Manage Smart Class Parameter Override Values
-* theforeman\.foreman\.wait\_for\_task \- Wait for a task
-
-<a id="vultr-cloud-6"></a>
-#### 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
-
-<a id="new-roles"></a>
-### 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\.
-
-<a id="unchanged-collections-6"></a>
-### 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 <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).
-- 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 <packages>``, 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 <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).
-- 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 <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).
-- 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://github.com/ansible-collections/overview/blob/main/removal_from_ansible.rst#cancelling-removal-of-an-unmaintained-collection>`__ (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).
-- 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/new/choose>`__ (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 <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).
-
-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 <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)
-- 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 <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).
-
-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 <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
-======
-
-.. contents::
- :local:
- :depth: 2
-
-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).
-- 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(<obj>) == <type>` is not allowed. We need to use `isinstance(<obj>,<type>)` 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://en.wikipedia.org/wiki/Extension_Mechanisms_for_DNS>`__ (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-collections/overview/blob/main/removal_from_ansible.rst#cancelling-removal-of-an-unmaintained-collection>`__ (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).
-- 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).
-- 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).
-
-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 <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).
-- 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 <branch> HEAD`` instead of ``git merge-base --fork-point <branch>`` (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-community/antsibull-docs-parser/releases/tag/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
},
{
@@ -1331,6 +1331,20 @@
"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",
"chksum_type": "sha256",
@@ -1338,6 +1352,13 @@
"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",
"chksum_type": "sha256",
@@ -1348,7 +1369,7 @@
"name": "plugins/modules/rds_instance.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "504e06fb4396104e8862c84c168592fba08be53442290308b81851e118290d5c",
+ "chksum_sha256": "85e1518a78d5a4b6d1edd522ceb113fc68ffc9ca408f960a774e54da51535d5c",
"format": 1
},
{
@@ -1359,6 +1380,13 @@
"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",
"chksum_type": "sha256",
@@ -1380,13 +1408,6 @@
"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",
"chksum_type": "sha256",
@@ -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
},
{
@@ -5055,10 +5090,17 @@
"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
},
{
@@ -7897,6 +7953,48 @@
"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",
"chksum_type": null,
@@ -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
},
{
@@ -9430,6 +9528,20 @@
"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",
"chksum_type": null,
@@ -9451,10 +9563,17 @@
"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
},
{
@@ -10025,6 +10144,13 @@
"format": 1
},
{
+ "name": "tests/sanity/ignore-2.18.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a20cbabc70cf2098b78b862d252444c4699d58d9c4b7a71fe66dd3768c75c6af",
+ "format": 1
+ },
+ {
"name": "tests/unit",
"ftype": "dir",
"chksum_type": null,
@@ -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
},
{
@@ -10403,13 +10529,6 @@
"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",
"chksum_type": null,
@@ -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
},
{
@@ -11558,6 +11677,13 @@
"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",
"chksum_type": "sha256",
@@ -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
<!--start collection 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).
<!--end collection content-->
@@ -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:
@@ -462,12 +420,6 @@ from ansible_collections.amazon.aws.plugins.module_utils.tagging import compare_
@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")
return paginator.paginate().build_full_result()
@@ -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_param_group.py b/ansible_collections/amazon/aws/plugins/modules/rds_instance_param_group.py
index abdb57c9b..82d0112fd 100644
--- a/ansible_collections/amazon/aws/plugins/modules/rds_param_group.py
+++ b/ansible_collections/amazon/aws/plugins/modules/rds_instance_param_group.py
@@ -6,7 +6,7 @@
DOCUMENTATION = r"""
---
-module: rds_param_group
+module: rds_instance_param_group
version_added: 5.0.0
short_description: manage RDS parameter groups
description:
@@ -31,8 +31,7 @@ options:
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"'
+ - 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).
@@ -61,7 +60,7 @@ extends_documentation_fragment:
EXAMPLES = r"""
- name: Add or change a parameter group, in this case setting auto_increment_increment to 42 * 1024
- amazon.aws.rds_param_group:
+ amazon.aws.rds_instance_param_group:
state: present
name: norwegian-blue
description: 'My Fancy Ex Parrot Group'
@@ -73,7 +72,7 @@ EXAMPLES = r"""
Application: parrot
- name: Remove a parameter group
- amazon.aws.rds_param_group:
+ amazon.aws.rds_instance_param_group:
state: absent
name: norwegian-blue
"""
@@ -149,9 +148,9 @@ def convert_parameter(param, 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]
+ 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
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,48 +375,22 @@ 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:
if versioning is not None:
@@ -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/arista/eos/.github/workflows/ack.yml b/ansible_collections/ansible/netcommon/.github/workflows/check_label.yml
index fda595dc5..b120bfa32 100644
--- a/ansible_collections/arista/eos/.github/workflows/ack.yml
+++ b/ansible_collections/ansible/netcommon/.github/workflows/check_label.yml
@@ -1,15 +1,11 @@
---
-# See https://github.com/ansible-community/devtools/blob/main/.github/workflows/ack.yml
-name: ack
-
+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:
- ack:
- uses: ansible/devtools/.github/workflows/ack.yml@main
+ 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
@@ -8,10 +8,24 @@
"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
},
{
@@ -393,13 +421,6 @@
"format": 1
},
{
- "name": ".github/release-drafter.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7cbc785c8661033cd9dd7a60897484fce731cbe3dc124a689fc3e934b1d974fb",
- "format": 1
- },
- {
"name": ".github/workflows",
"ftype": "dir",
"chksum_type": null,
@@ -407,1028 +428,923 @@
"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",
- "format": 1
- },
- {
- "name": "plugins/become",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "7a8f132e5006ab3afc28cc649846e875e444098ee1956e7941133e5a3a59f505",
"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",
- "format": 1
- },
- {
- "name": "plugins/module_utils/network/grpc",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "7744c2e8dc35994dc90085c20ecc3725c331502335426febbed4d740e6cbe741",
"format": 1
},
{
- "name": "plugins/module_utils/network/grpc/grpc.py",
+ "name": "plugins/module_utils/cli_parser/cli_parsertemplate.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4d7efa4ee81ef34b9296c6d43e22772c2874088d770c8d0e0ecbcacd37c9964c",
+ "chksum_sha256": "52b5158c8924c2aa32e8c9ed5cd3f74ab5cf69e8e158ac1670e3ba298d7d06ea",
"format": 1
},
{
- "name": "plugins/module_utils/network/netconf",
+ "name": "plugins/module_utils/utils",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/netconf/netconf.py",
+ "name": "plugins/module_utils/utils/data.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "789521735521699d79d8d81889a91317c92cb1740cce872cb5f79a418fa8ff95",
+ "chksum_sha256": "c7007f9465ffc3bf435aa9df026e8c32be66ded154c408432335aea069cd51fb",
"format": 1
},
{
- "name": "plugins/module_utils/network/common",
+ "name": "plugins/module_utils/network",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/common/facts",
+ "name": "plugins/module_utils/network/restconf",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/common/facts/facts.py",
+ "name": "plugins/module_utils/network/restconf/restconf.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cebeff7f9f126b57118f1617a70428d0c45780f53974d3db7b3fc699b6f668dc",
+ "chksum_sha256": "befb0fefc07679bcddf18d67e21d608e3ed9fe94cfa8a137ffe6e91a5d23c92e",
"format": 1
},
{
- "name": "plugins/module_utils/network/common/cfg",
+ "name": "plugins/module_utils/network/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/common/cfg/base.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1bcd73c6b06714fd0d42365bc4b9613e9353519747bf73628f4392b60f697a35",
+ "name": "plugins/module_utils/network/common/rm_base",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/common/utils.py",
+ "name": "plugins/module_utils/network/common/rm_base/resource_module.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8d2362f9f323d8fcd35bafa1dd96dacc272a919e13096e3a8b820584b36e9b4d",
+ "chksum_sha256": "dc597d0e0ca16d8a13eafe0746e91e2c3a1a1e99d85fd3955be1fd26d0763ca5",
"format": 1
},
{
- "name": "plugins/module_utils/network/common/netconf.py",
+ "name": "plugins/module_utils/network/common/rm_base/network_template.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4befbe9e99dfb53df38261b4529a0c63548a09388047d95253def63dcb1634d8",
+ "chksum_sha256": "74951f1acab2b66f875cf0103618718688d4d3b10c064353c1bbb7ea4c874495",
"format": 1
},
{
- "name": "plugins/module_utils/network/common/config.py",
+ "name": "plugins/module_utils/network/common/rm_base/resource_module_base.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fed7e54d76887f95cc09fdadb2fc36a849fa30a9f0ec3d9b79bdbd325fccb1ea",
+ "chksum_sha256": "1f4a1af713cb0702623a786196097b8d7371d81ecc2a9d8b9b2a07590954e29f",
"format": 1
},
{
- "name": "plugins/module_utils/network/common/rm_base",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/module_utils/network/common/netconf.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4befbe9e99dfb53df38261b4529a0c63548a09388047d95253def63dcb1634d8",
"format": 1
},
{
- "name": "plugins/module_utils/network/common/rm_base/resource_module.py",
+ "name": "plugins/module_utils/network/common/config.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "98a161ebcb97831b138c00d0dbb0e1e010028e5b8d9fe9abc5a0c842efe85586",
+ "chksum_sha256": "fed7e54d76887f95cc09fdadb2fc36a849fa30a9f0ec3d9b79bdbd325fccb1ea",
"format": 1
},
{
- "name": "plugins/module_utils/network/common/rm_base/network_template.py",
+ "name": "plugins/module_utils/network/common/parsing.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "74951f1acab2b66f875cf0103618718688d4d3b10c064353c1bbb7ea4c874495",
+ "chksum_sha256": "330f819b5a384f216cbb12d0d1c2e37c6b33e4a9d94c554b23ce33f3c55b03cd",
"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/cfg",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/common/parsing.py",
+ "name": "plugins/module_utils/network/common/cfg/base.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "330f819b5a384f216cbb12d0d1c2e37c6b33e4a9d94c554b23ce33f3c55b03cd",
+ "chksum_sha256": "1bcd73c6b06714fd0d42365bc4b9613e9353519747bf73628f4392b60f697a35",
"format": 1
},
{
- "name": "plugins/module_utils/network/common/network.py",
+ "name": "plugins/module_utils/network/common/utils.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c60d2dae88ceafbf5e499f536d7a29f23392e3f6a162596c8ae3b2589660b4ce",
+ "chksum_sha256": "d1acd62e9dc53888e191d8e61d7ac21d8433470b2c623945aa45237b48735062",
"format": 1
},
{
- "name": "plugins/module_utils/cli_parser",
+ "name": "plugins/module_utils/network/common/facts",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/cli_parser/cli_parsertemplate.py",
+ "name": "plugins/module_utils/network/common/facts/facts.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "52b5158c8924c2aa32e8c9ed5cd3f74ab5cf69e8e158ac1670e3ba298d7d06ea",
+ "chksum_sha256": "cebeff7f9f126b57118f1617a70428d0c45780f53974d3db7b3fc699b6f668dc",
"format": 1
},
{
- "name": "plugins/module_utils/cli_parser/cli_parserbase.py",
+ "name": "plugins/module_utils/network/common/network.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7744c2e8dc35994dc90085c20ecc3725c331502335426febbed4d740e6cbe741",
+ "chksum_sha256": "c60d2dae88ceafbf5e499f536d7a29f23392e3f6a162596c8ae3b2589660b4ce",
"format": 1
},
{
- "name": "plugins/module_utils/utils",
+ "name": "plugins/module_utils/network/netconf",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/utils/data.py",
+ "name": "plugins/module_utils/network/netconf/netconf.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c7007f9465ffc3bf435aa9df026e8c32be66ded154c408432335aea069cd51fb",
+ "chksum_sha256": "789521735521699d79d8d81889a91317c92cb1740cce872cb5f79a418fa8ff95",
"format": 1
},
{
- "name": "plugins/netconf",
+ "name": "plugins/module_utils/network/grpc",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/netconf/default.py",
+ "name": "plugins/module_utils/network/grpc/grpc.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c96c6d9d3ec5e3c5248505e3f1f4e6728ceda00e38503b78cdc493d28bcca3b4",
+ "chksum_sha256": "4d7efa4ee81ef34b9296c6d43e22772c2874088d770c8d0e0ecbcacd37c9964c",
"format": 1
},
{
- "name": "plugins/action",
+ "name": "plugins/become",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/action/net_get.py",
+ "name": "plugins/become/enable.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "465c08750ad23645e914f08b7e23809f018f36c7607f0f4f810ee3b67004e09f",
+ "chksum_sha256": "0bbcfd4eac913f404d25ae35209d7f3ba62989009f6fa73be8a4d39de3b48ef4",
"format": 1
},
{
- "name": "plugins/action/net_put.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c3b3f7d7713cb8e178b2b38dbe114aaf2b4644bc10b3f2f3e3e80e03442baa34",
+ "name": "plugins/modules",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/action/netconf.py",
+ "name": "plugins/modules/cli_backup.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6f9928c9aa7036ddf8e40c6dab2769957374cf8e1611bc64b93dd9a483216764",
+ "chksum_sha256": "16e3cae6daa4a54560a367de150d2d5e01ff5808afbb6cb249cfaa19a839b326",
"format": 1
},
{
- "name": "plugins/action/network_resource.py",
+ "name": "plugins/modules/grpc_get.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "803d2f14fcf591141a911bd4fe2347207214fdcf51b24d86d20e149e701da1ce",
+ "chksum_sha256": "910218ce8d1a19312401814078bc98196ea2105dd1955ff26f94c035459ab09b",
"format": 1
},
{
- "name": "plugins/action/grpc.py",
+ "name": "plugins/modules/net_put.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2722eb0c61acd2fa06155215e99cb0f547690fb3fd5a5b4e656fad90ad091dea",
+ "chksum_sha256": "cb0fac80bee26d7417df12681dc714dc3cfba1862ce8468ec4d32c4ab2a81746",
"format": 1
},
{
- "name": "plugins/action/network.py",
+ "name": "plugins/modules/telnet.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "29df4ed0309595ee6317961ba7f9f8600c53cd9e71808111406e0f1df1b65d42",
+ "chksum_sha256": "4fd508b2faf1c6ab7042887e03197d90fc19a3832894db88462529ac4a729bf4",
"format": 1
},
{
- "name": "plugins/action/telnet.py",
+ "name": "plugins/modules/net_get.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "59f1760ccd5ead64f4b09ded6d4351658000d3b00551cc436e2021ad8a21d5d3",
+ "chksum_sha256": "2648915107fab66fde9e6d90d698445ba675974b702a1847354eb7ad8bd3600e",
"format": 1
},
{
- "name": "plugins/action/cli_config.py",
+ "name": "plugins/modules/netconf_rpc.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fb4dc58e8b24d2167d5b2e439c9e685160ca577d43589c0aa211b9b61202c5a4",
+ "chksum_sha256": "1ac88505fa9ba51da7cd97381cba46448c615be2025031ea6cba45b05b440211",
"format": 1
},
{
- "name": "plugins/action/net_ping.py",
+ "name": "plugins/modules/cli_config.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "272e933618a9020df35d879662acf8c2c9f771496e64b2ce2a27a0b114092aa2",
+ "chksum_sha256": "f4f56b6785ed2605d24193040f85774791a5be891b5dd357e1c7835a98adcbef",
"format": 1
},
{
- "name": "plugins/action/cli_command.py",
+ "name": "plugins/modules/net_ping.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6a944d8f77789b2d0dad27adbb438be747141fa4e415ee32784b934b3bf35eec",
+ "chksum_sha256": "22089b045eb7c35003893cbffac47304e16e9bc4f3b4fc1ea17a4d8d34a41524",
"format": 1
},
{
- "name": "plugins/action/cli_backup.py",
+ "name": "plugins/modules/restconf_config.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "50af044056f3bd7e53e235da97d782556b65322c32dc38354212b8f83d08774b",
- "format": 1
- },
- {
- "name": "plugins/filter",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "d72401fa8e8ab283c331ce10b1db90915cff9736bb6465843e424f97b28a5710",
"format": 1
},
{
- "name": "plugins/filter/comp_type5.py",
+ "name": "plugins/modules/netconf_config.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "84d21521b720af7a1ab82ece23e48a7eae3648060ea287fa1265bb95af8b10f9",
+ "chksum_sha256": "6efee4512b5737e3f13878757c3597973a9618f33fb4efbf2cf30c3d2ac04644",
"format": 1
},
{
- "name": "plugins/filter/type5_pw.py",
+ "name": "plugins/modules/network_resource.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c61265a99973814b46b45bd1cb803bfeae74e543c16be54e354af2eafc36019c",
+ "chksum_sha256": "cf30880d4a98ffffd07ad6dd6e5d129bc4d201655267e2da33a03212d0ba53e5",
"format": 1
},
{
- "name": "plugins/filter/parse_xml.py",
+ "name": "plugins/modules/netconf_get.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "026eb6ddb55446fba4bd0a55136bfadba032fa9096a808845429a78ed4307cb5",
+ "chksum_sha256": "c19f333c998de03a052c033fb6e32342f800e77b82eed4930cd505b15b882388",
"format": 1
},
{
- "name": "plugins/filter/vlan_parser.py",
+ "name": "plugins/modules/restconf_get.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "48d710e0758ae4be43e607b5d61c88109910e8ba00de1aba08280af8532831b1",
+ "chksum_sha256": "4422cc95796e468190815c334a65127345e9543bb7d2a2edff28183892e0ddeb",
"format": 1
},
{
- "name": "plugins/filter/parse_cli.py",
+ "name": "plugins/modules/grpc_config.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9d8dbc303de5ef03a3eddd852b05a699b68790f04baff05cb7b0341c8c1ea9e4",
+ "chksum_sha256": "4cbbd47b5b26f41c4b1047fd384144d32172a927e5cc0b7ed7386e8ddb78c332",
"format": 1
},
{
- "name": "plugins/filter/hash_salt.py",
+ "name": "plugins/modules/cli_command.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "98d4c28d99d131c24f40757ee84ed051b58bbb0ba41efc4da70a6465f6762f8e",
+ "chksum_sha256": "540443f95fa400cbd96c1d5ba23237b1038fceebac038ad46950ae474db6bd1a",
"format": 1
},
{
- "name": "plugins/filter/vlan_expander.py",
+ "name": "plugins/modules/cli_restore.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b557d97d3d0c9e0e46238e6e71c7160103f77eefb0edf394c76ba5bdd4d5cfbd",
+ "chksum_sha256": "ec3154e78c5c65f770897cdc4092ef6f81aea84547685c9eae52273e988842e6",
"format": 1
},
{
- "name": "plugins/filter/parse_cli_textfsm.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e5c994c3fd64b40dc12686699d8c2b6cd15e3a2af09372ecf7025b7621bc4bec",
+ "name": "plugins/cache",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/filter/pop_ace.py",
+ "name": "plugins/cache/memory.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7989a1755ff27d2adac10b533c8fd9378047394d94108274a55868dd8afac22e",
+ "chksum_sha256": "741033bfd18a35bc814b44e46fd213f5bc4b078b62dfa556baac1079211e3ea5",
"format": 1
},
{
- "name": "plugins/modules",
+ "name": "plugins/filter",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/net_get.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2648915107fab66fde9e6d90d698445ba675974b702a1847354eb7ad8bd3600e",
- "format": 1
- },
- {
- "name": "plugins/modules/net_put.py",
+ "name": "plugins/filter/parse_cli_textfsm.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cb0fac80bee26d7417df12681dc714dc3cfba1862ce8468ec4d32c4ab2a81746",
+ "chksum_sha256": "68f241fb0ed8bf886ec253bb1dddd72e1dea13e1ed2528f4c98a0b4fe03ca003",
"format": 1
},
{
- "name": "plugins/modules/netconf_rpc.py",
+ "name": "plugins/filter/parse_xml.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1ac88505fa9ba51da7cd97381cba46448c615be2025031ea6cba45b05b440211",
+ "chksum_sha256": "026eb6ddb55446fba4bd0a55136bfadba032fa9096a808845429a78ed4307cb5",
"format": 1
},
{
- "name": "plugins/modules/network_resource.py",
+ "name": "plugins/filter/vlan_parser.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cf30880d4a98ffffd07ad6dd6e5d129bc4d201655267e2da33a03212d0ba53e5",
+ "chksum_sha256": "48d710e0758ae4be43e607b5d61c88109910e8ba00de1aba08280af8532831b1",
"format": 1
},
{
- "name": "plugins/modules/netconf_get.py",
+ "name": "plugins/filter/vlan_expander.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dd3e5797b042f3a9ff4799b8d301682536451f93cf7dffba7725a6fa4c4a872e",
+ "chksum_sha256": "b557d97d3d0c9e0e46238e6e71c7160103f77eefb0edf394c76ba5bdd4d5cfbd",
"format": 1
},
{
- "name": "plugins/modules/restconf_get.py",
+ "name": "plugins/filter/hash_salt.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4422cc95796e468190815c334a65127345e9543bb7d2a2edff28183892e0ddeb",
+ "chksum_sha256": "98d4c28d99d131c24f40757ee84ed051b58bbb0ba41efc4da70a6465f6762f8e",
"format": 1
},
{
- "name": "plugins/modules/grpc_get.py",
+ "name": "plugins/filter/pop_ace.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7357483ebdc71acaa1f980a3ab3fc9e40990548f52b8aa76d2d7f6ec85ef3f27",
+ "chksum_sha256": "f06bfc970ebe8b0e50834346e6e3c9022439ef73881b66469db47cb6e43bcc48",
"format": 1
},
{
- "name": "plugins/modules/netconf_config.py",
+ "name": "plugins/filter/comp_type5.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7fb6f8dc7bd0989be8e6b445d4380ce05ee83118922c53211622206037eb2441",
+ "chksum_sha256": "84d21521b720af7a1ab82ece23e48a7eae3648060ea287fa1265bb95af8b10f9",
"format": 1
},
{
- "name": "plugins/modules/restconf_config.py",
+ "name": "plugins/filter/parse_cli.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d72401fa8e8ab283c331ce10b1db90915cff9736bb6465843e424f97b28a5710",
+ "chksum_sha256": "9d8dbc303de5ef03a3eddd852b05a699b68790f04baff05cb7b0341c8c1ea9e4",
"format": 1
},
{
- "name": "plugins/modules/telnet.py",
+ "name": "plugins/filter/type5_pw.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "877937eb7a9e97f97965360d7e53995f264be8655c9ea25c9bad5dcab46019c2",
+ "chksum_sha256": "c61265a99973814b46b45bd1cb803bfeae74e543c16be54e354af2eafc36019c",
"format": 1
},
{
- "name": "plugins/modules/grpc_config.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "43328e8b3e2180bef549852318ed050081286c25cab190611b96aad431e14c1e",
+ "name": "plugins/sub_plugins",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/cli_config.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5e886a698f1ee75a7fa6a7c59d2b237693cd1c46815ae630c344f663e147e746",
+ "name": "plugins/sub_plugins/cli_parser",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/net_ping.py",
+ "name": "plugins/sub_plugins/cli_parser/pyats_parser.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "22089b045eb7c35003893cbffac47304e16e9bc4f3b4fc1ea17a4d8d34a41524",
+ "chksum_sha256": "e17c6c56c2644c32ae60040d1011ee855c2b1ce48f6cae9df8625353e830e8d2",
"format": 1
},
{
- "name": "plugins/modules/cli_command.py",
+ "name": "plugins/sub_plugins/cli_parser/content_templates_parser.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d163ad595b9884e9e8d4152821ae13d054ed16a58464dc9a0dba57db2719b4a9",
+ "chksum_sha256": "5cb7b8eacbaf5a6101d8d3b83661a661f317cc2858e00e6480add8e3d326aeb5",
"format": 1
},
{
- "name": "plugins/modules/cli_backup.py",
+ "name": "plugins/sub_plugins/cli_parser/ntc_templates_parser.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "16e3cae6daa4a54560a367de150d2d5e01ff5808afbb6cb249cfaa19a839b326",
+ "chksum_sha256": "fd7f6149a055b84ea2740eb780f965369cf57b9e87cd438ca2511f650923566e",
"format": 1
},
{
- "name": ".gitignore",
+ "name": "plugins/sub_plugins/cli_parser/native_parser.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ff53015667831bfc9f6933b3ce958e5c5cf9d7125b121e415320dddc956fe291",
- "format": 1
- },
- {
- "name": "tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "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/prepare_nxos_tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "c7eec487e1e86bb1771cc20a82d5e73f50c5e1c1cdc040d0cd5c7a811bbc065f",
"format": 1
},
{
- "name": "tests/integration/targets/prepare_nxos_tests/tasks",
+ "name": "plugins/sub_plugins/grpc",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/prepare_nxos_tests/tasks/main.yaml",
+ "name": "plugins/sub_plugins/grpc/base.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "78bfd2a4e9e3170c5e4ebed70554b46d36a304358c68f34fba0c12fdecd78908",
- "format": 1
- },
- {
- "name": "tests/integration/targets/restconf_get",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "574c09c370cecbb87a829e3f2fa1c8aa4afc287ad2d06654e06aa220d9e3fa5f",
"format": 1
},
{
- "name": "tests/integration/targets/restconf_get/meta",
+ "name": "plugins/cliconf",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/restconf_get/meta/main.yml",
+ "name": "plugins/cliconf/default.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f217b1000606ebe64f449135a62b62813f672461ce258e4168b48ef56fdf7b55",
+ "chksum_sha256": "05007d881eebc12579435d8ce26e5c981786e6d1966958d061eaeef3b29b5742",
"format": 1
},
{
- "name": "tests/integration/targets/restconf_get/tasks",
+ "name": "plugins/httpapi",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/restconf_get/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "344d9c0ea63d8d064ef8a6c738551c1f1b48e68e26e5ccb64add0de511dc58c1",
- "format": 1
- },
- {
- "name": "tests/integration/targets/restconf_get/tasks/restconf.yaml",
+ "name": "plugins/httpapi/restconf.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8bfa6b3c0f514038aa61b510030d8399c36b0b4f4274474c9fe02f06eb0ab6f1",
+ "chksum_sha256": "f8191e84e02b82aa5c4aad0c52bb54c1bdbfdd9af15ad7b19abe90a152fa4aeb",
"format": 1
},
{
- "name": "tests/integration/targets/restconf_get/defaults",
+ "name": "plugins/doc_fragments",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/restconf_get/defaults/main.yaml",
+ "name": "plugins/doc_fragments/network_agnostic.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
- "format": 1
- },
- {
- "name": "tests/integration/targets/restconf_get/tests",
- "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,
+ "chksum_sha256": "7c296eab68967ae69f6ca50923781f1971e8e3ec1db26d51d5c9c84916c66dcb",
"format": 1
},
{
- "name": "tests/integration/targets/restconf_get/tests/iosxe/basic.yaml",
+ "name": "plugins/doc_fragments/connection_persistent.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "24c621004d39e45adac857d00e2ea4f985439b277342a1c1ea888cbcef5d930e",
+ "chksum_sha256": "5282e3baa0e06d00f59879b69ec959864189a27e6cb1f1020e13d4759f76d81c",
"format": 1
},
{
- "name": "tests/integration/targets/prepare_iosxr_tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": ".yamllint",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "386fa31449c09e5df093aa72eabcb7653011a90181dc30b539ac67dbe3b17bf4",
"format": 1
},
{
- "name": "tests/integration/targets/prepare_iosxr_tests/templates",
+ "name": "tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/prepare_iosxr_tests/templates/config.j2",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a21d7b66f513ecb424fd6e23df9f0737c855281f3a5d0be6c856a0d2ce7af23b",
- "format": 1
- },
- {
- "name": "tests/integration/targets/prepare_iosxr_tests/templates/config_grpc.j2",
+ "name": "tests/config.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4ab4bbfb41335abe51b4f0d03087c1df2ccb9bac7d0097685a28659113d1b9fd",
+ "chksum_sha256": "4129945061440c8d8c281590b8054b194f5958833c722aa40e878b09038c380e",
"format": 1
},
{
- "name": "tests/integration/targets/prepare_iosxr_tests/tasks",
+ "name": "tests/integration",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/prepare_iosxr_tests/tasks/main.yml",
+ "name": "tests/integration/target-prefixes.network",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "09715b279e8c38a57245d73b87891e03bbb2a04d8d83f6d041b0a772109ee12c",
- "format": 1
- },
- {
- "name": "tests/integration/targets/prepare_junos_tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "f44e56f8603c9ed8dbb4997dfadab9103c04098cb355329e2f3dee14254c7f85",
"format": 1
},
{
- "name": "tests/integration/targets/prepare_junos_tests/tasks",
+ "name": "tests/integration/targets",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/prepare_junos_tests/tasks/main.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "47056e43d318d03a0bdf1521b3cc82ea6b108ce752ae6ff889b0d309c1366bed",
- "format": 1
- },
- {
"name": "tests/integration/targets/prepare_sros_tests",
"ftype": "dir",
"chksum_type": null,
@@ -1450,199 +1366,185 @@
"format": 1
},
{
- "name": "tests/integration/targets/grpc_get",
+ "name": "tests/integration/targets/prepare_iosxr_tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/grpc_get/meta",
+ "name": "tests/integration/targets/prepare_iosxr_tests/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/grpc_get/meta/main.yml",
+ "name": "tests/integration/targets/prepare_iosxr_tests/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d25d95206718d482774753d23b1563530440c6c3c76e2b40afd18ad95595cddd",
+ "chksum_sha256": "09715b279e8c38a57245d73b87891e03bbb2a04d8d83f6d041b0a772109ee12c",
"format": 1
},
{
- "name": "tests/integration/targets/grpc_get/tasks",
+ "name": "tests/integration/targets/prepare_iosxr_tests/templates",
"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/prepare_iosxr_tests/templates/config_grpc.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "14aa6f229d2851f12ba6d10cce5e4b985e9ac66bf758ee656f52a6b90c655f2b",
- "format": 1
- },
- {
- "name": "tests/integration/targets/grpc_get/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "4ab4bbfb41335abe51b4f0d03087c1df2ccb9bac7d0097685a28659113d1b9fd",
"format": 1
},
{
- "name": "tests/integration/targets/grpc_get/defaults/main.yaml",
+ "name": "tests/integration/targets/prepare_iosxr_tests/templates/config.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
+ "chksum_sha256": "a21d7b66f513ecb424fd6e23df9f0737c855281f3a5d0be6c856a0d2ce7af23b",
"format": 1
},
{
- "name": "tests/integration/targets/grpc_get/tests",
+ "name": "tests/integration/targets/prepare_junos_tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/grpc_get/tests/iosxr",
+ "name": "tests/integration/targets/prepare_junos_tests/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/grpc_get/tests/iosxr/basic.yaml",
+ "name": "tests/integration/targets/prepare_junos_tests/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b3796d7e1a25ee4aa3fd7850e67da8c8fb8a6c0477d1fb494672ed261ad51c81",
+ "chksum_sha256": "47056e43d318d03a0bdf1521b3cc82ea6b108ce752ae6ff889b0d309c1366bed",
"format": 1
},
{
- "name": "tests/integration/targets/netconf_rpc",
+ "name": "tests/integration/targets/netconf_get",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/netconf_rpc/meta",
+ "name": "tests/integration/targets/netconf_get/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/netconf_rpc/meta/main.yml",
+ "name": "tests/integration/targets/netconf_get/tasks/sros.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "46e396f49311101eff0f58b4da2d90d75b0c228cbf950bcb899cf063bec95178",
+ "chksum_sha256": "1218ad2b1b5b61e8713fc05cfee850bfdd370d6bc9742072b90331098f9375fe",
"format": 1
},
{
- "name": "tests/integration/targets/netconf_rpc/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/netconf_get/tasks/iosxr.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0caec58b8f1303315ebec8315c9a982e7d42b520de10f8fe2a897e325775e466",
"format": 1
},
{
- "name": "tests/integration/targets/netconf_rpc/tasks/iosxr.yaml",
+ "name": "tests/integration/targets/netconf_get/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0caec58b8f1303315ebec8315c9a982e7d42b520de10f8fe2a897e325775e466",
+ "chksum_sha256": "fdfc66f2c0b2f48a76a2d363913150396dc08903e0ea323d12407f1737137e32",
"format": 1
},
{
- "name": "tests/integration/targets/netconf_rpc/tasks/junos.yaml",
+ "name": "tests/integration/targets/netconf_get/tasks/junos.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "3145cb145338f26f1f684809c05ca97cb2fc8b88a36a27ae8afba636af7c845d",
"format": 1
},
{
- "name": "tests/integration/targets/netconf_rpc/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4365fa9da3f9e124dee50e8ebe4f78e9f3383cd459cb72a389b202548ad9d13f",
+ "name": "tests/integration/targets/netconf_get/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/netconf_rpc/tasks/sros.yaml",
+ "name": "tests/integration/targets/netconf_get/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/netconf_get/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/netconf_rpc/defaults/main.yaml",
+ "name": "tests/integration/targets/netconf_get/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
+ "chksum_sha256": "dd9eb0bcc7ddb59a2e64954bd6c9213d715705b3928aa12e7cd34ee1cebeaca6",
"format": 1
},
{
- "name": "tests/integration/targets/netconf_rpc/tests",
+ "name": "tests/integration/targets/netconf_get/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/netconf_rpc/tests/sros",
+ "name": "tests/integration/targets/netconf_get/tests/iosxr",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/netconf_rpc/tests/sros/basic.yaml",
+ "name": "tests/integration/targets/netconf_get/tests/iosxr/basic.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6331e1e7c98fd776bb8199cda76eb0c3ab009fe9bf4d3bbfea41aa936393664",
+ "chksum_sha256": "054b9614669e5cb6cf0843782cac5df5dce7ffef6ddb16085663266700c8feb3",
"format": 1
},
{
- "name": "tests/integration/targets/netconf_rpc/tests/iosxr",
+ "name": "tests/integration/targets/netconf_get/tests/sros",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/netconf_rpc/tests/iosxr/basic.yaml",
+ "name": "tests/integration/targets/netconf_get/tests/sros/basic.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "57f49d0b2c38a17997be86a240f7e97850c55345904aac6d03c4a65aab2514a9",
+ "chksum_sha256": "d85290ce180158ecbb9a86840c79ed9966d3d7e27591537f75b0715df902ec36",
"format": 1
},
{
- "name": "tests/integration/targets/netconf_rpc/tests/junos",
+ "name": "tests/integration/targets/netconf_get/tests/junos",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/netconf_rpc/tests/junos/basic.yaml",
+ "name": "tests/integration/targets/netconf_get/tests/junos/basic.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "47502bae6b7bf9e00f3d69c55d9dfa3b780978d2116fe27992884b041eafab8e",
+ "chksum_sha256": "bb5c5b379e5e0c8325f82929af0ac53e2b619d4ae86e692cf25d489cac031325",
"format": 1
},
{
@@ -1653,17 +1555,17 @@
"format": 1
},
{
- "name": "tests/integration/targets/grpc_config/meta",
+ "name": "tests/integration/targets/grpc_config/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/grpc_config/meta/main.yml",
+ "name": "tests/integration/targets/grpc_config/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d25d95206718d482774753d23b1563530440c6c3c76e2b40afd18ad95595cddd",
+ "chksum_sha256": "a50f43b84486b9cff7f927e79c55df0b65ebd7e8caa47259cf997d14bbbca600",
"format": 1
},
{
@@ -1688,45 +1590,45 @@
"format": 1
},
{
- "name": "tests/integration/targets/grpc_config/tasks/junos.yaml",
+ "name": "tests/integration/targets/grpc_config/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "72ed3963ce3362399cc4464329f53c4841519baed0490dda545fa46daeb9c821",
+ "chksum_sha256": "8490b1578816963939834794088f0d3b3d9fb394957ce490908d51365610aefe",
"format": 1
},
{
- "name": "tests/integration/targets/grpc_config/tasks/main.yaml",
+ "name": "tests/integration/targets/grpc_config/tasks/junos.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8490b1578816963939834794088f0d3b3d9fb394957ce490908d51365610aefe",
+ "chksum_sha256": "72ed3963ce3362399cc4464329f53c4841519baed0490dda545fa46daeb9c821",
"format": 1
},
{
- "name": "tests/integration/targets/grpc_config/vars",
+ "name": "tests/integration/targets/grpc_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/grpc_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/grpc_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/grpc_config/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
+ "chksum_sha256": "d25d95206718d482774753d23b1563530440c6c3c76e2b40afd18ad95595cddd",
"format": 1
},
{
@@ -1772,549 +1674,661 @@
"format": 1
},
{
- "name": "tests/integration/targets/netconf_get",
+ "name": "tests/integration/targets/netconf_config",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/netconf_get/meta",
+ "name": "tests/integration/targets/netconf_config/tasks",
"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/tasks/nxos.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dd9eb0bcc7ddb59a2e64954bd6c9213d715705b3928aa12e7cd34ee1cebeaca6",
+ "chksum_sha256": "fabed4f0fdf2b4f0d12c542e0a99da9c4ce894c4607d1d1dc38b37103d20e767",
"format": 1
},
{
- "name": "tests/integration/targets/netconf_get/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/netconf_config/tasks/iosxr.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0caec58b8f1303315ebec8315c9a982e7d42b520de10f8fe2a897e325775e466",
"format": 1
},
{
- "name": "tests/integration/targets/netconf_get/tasks/iosxr.yaml",
+ "name": "tests/integration/targets/netconf_config/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0caec58b8f1303315ebec8315c9a982e7d42b520de10f8fe2a897e325775e466",
+ "chksum_sha256": "a0c882d71c283e7a2bbcf07fe588b5c6fa2e4c7a7953de637a0ad6e7bfa9333c",
"format": 1
},
{
- "name": "tests/integration/targets/netconf_get/tasks/junos.yaml",
+ "name": "tests/integration/targets/netconf_config/tasks/junos.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "3145cb145338f26f1f684809c05ca97cb2fc8b88a36a27ae8afba636af7c845d",
"format": 1
},
{
- "name": "tests/integration/targets/netconf_get/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "fdfc66f2c0b2f48a76a2d363913150396dc08903e0ea323d12407f1737137e32",
+ "name": "tests/integration/targets/netconf_config/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/netconf_get/tasks/sros.yaml",
+ "name": "tests/integration/targets/netconf_config/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1218ad2b1b5b61e8713fc05cfee850bfdd370d6bc9742072b90331098f9375fe",
+ "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/netconf_get/defaults",
+ "name": "tests/integration/targets/netconf_config/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/netconf_get/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/netconf_get/tests",
+ "name": "tests/integration/targets/netconf_config/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/netconf_get/tests/sros",
+ "name": "tests/integration/targets/netconf_config/tests/iosxr",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/netconf_get/tests/sros/basic.yaml",
+ "name": "tests/integration/targets/netconf_config/tests/iosxr/basic.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d85290ce180158ecbb9a86840c79ed9966d3d7e27591537f75b0715df902ec36",
+ "chksum_sha256": "dfc308fc2743595a553c7fb998a9f46d94f64e6b3477a910e2d54d59438cb53b",
"format": 1
},
{
- "name": "tests/integration/targets/netconf_get/tests/iosxr",
+ "name": "tests/integration/targets/netconf_config/tests/nxos",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/netconf_get/tests/iosxr/basic.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "054b9614669e5cb6cf0843782cac5df5dce7ffef6ddb16085663266700c8feb3",
- "format": 1
- },
- {
- "name": "tests/integration/targets/netconf_get/tests/junos",
+ "name": "tests/integration/targets/netconf_config/tests/nxos/fixtures",
"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_config/tests/nxos/fixtures/config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bb5c5b379e5e0c8325f82929af0ac53e2b619d4ae86e692cf25d489cac031325",
+ "chksum_sha256": "f9ba47cabeb67066eefc95614931221e4679c2bce0209c8ebc392098eb76ac7f",
"format": 1
},
{
- "name": "tests/integration/targets/prepare_iosxe_tests",
+ "name": "tests/integration/targets/netconf_config/tests/nxos/basic.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3d5e05ea2718e82441fba21c106a2c105aba6c7a0549808b8b112fe33de6ebbe",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/netconf_config/tests/junos",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/prepare_iosxe_tests/tasks",
+ "name": "tests/integration/targets/netconf_config/tests/junos/fixtures",
"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_config/tests/junos/fixtures/config.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "73ff1b38335fe80af4ef727cc8c1bc35bb4b370ee38f1fb794971f42c6413138",
+ "chksum_sha256": "582b6608893619dc4e1dc1293a06f3828808b2ee7fd0675e13dad5e43e3e5d54",
"format": 1
},
{
- "name": "tests/integration/targets/restconf_config",
+ "name": "tests/integration/targets/netconf_config/tests/junos/fixtures/invalid_config.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c1cfceeda701f71c8ee2b6ff01b3ec22ffe72d981a5f82e31b278a4554937261",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/netconf_config/tests/junos/basic.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1ea03d6c833790e420cba36674bd809bdf7155fdd3f8854507f7ec9f73d64fe4",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/netconf_rpc",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/restconf_config/meta",
+ "name": "tests/integration/targets/netconf_rpc/tasks",
"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/tasks/sros.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f217b1000606ebe64f449135a62b62813f672461ce258e4168b48ef56fdf7b55",
+ "chksum_sha256": "1218ad2b1b5b61e8713fc05cfee850bfdd370d6bc9742072b90331098f9375fe",
"format": 1
},
{
- "name": "tests/integration/targets/restconf_config/tasks",
- "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/restconf_config/tasks/main.yaml",
+ "name": "tests/integration/targets/netconf_rpc/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "83d68cb2489c764efacfccd9c7c3983f7fdb9727a74e216c12e445299ae5b915",
+ "chksum_sha256": "4365fa9da3f9e124dee50e8ebe4f78e9f3383cd459cb72a389b202548ad9d13f",
"format": 1
},
{
- "name": "tests/integration/targets/restconf_config/tasks/restconf.yaml",
+ "name": "tests/integration/targets/netconf_rpc/tasks/junos.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8bfa6b3c0f514038aa61b510030d8399c36b0b4f4274474c9fe02f06eb0ab6f1",
+ "chksum_sha256": "3145cb145338f26f1f684809c05ca97cb2fc8b88a36a27ae8afba636af7c845d",
"format": 1
},
{
- "name": "tests/integration/targets/restconf_config/defaults",
+ "name": "tests/integration/targets/netconf_rpc/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/restconf_config/defaults/main.yaml",
+ "name": "tests/integration/targets/netconf_rpc/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/restconf_config/tests",
+ "name": "tests/integration/targets/netconf_rpc/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/restconf_config/tests/iosxe",
+ "name": "tests/integration/targets/netconf_rpc/meta/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "46e396f49311101eff0f58b4da2d90d75b0c228cbf950bcb899cf063bec95178",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/netconf_rpc/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/restconf_config/tests/iosxe/basic.yaml",
+ "name": "tests/integration/targets/netconf_rpc/tests/iosxr",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/netconf_rpc/tests/iosxr/basic.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ff4b6188157975c3ba7b396443e415b264965d11029b6a7972e6927688458172",
+ "chksum_sha256": "57f49d0b2c38a17997be86a240f7e97850c55345904aac6d03c4a65aab2514a9",
"format": 1
},
{
- "name": "tests/integration/targets/cli_parse",
+ "name": "tests/integration/targets/netconf_rpc/tests/sros",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/cli_parse/templates",
+ "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/cli_parse/templates/nxos_show_version.textfsm",
+ "name": "tests/integration/targets/netconf_rpc/tests/junos/basic.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dfd59adde11de6285a62179e45db7b4e20e9ca61f276f6567c86c8455f796887",
+ "chksum_sha256": "47502bae6b7bf9e00f3d69c55d9dfa3b780978d2116fe27992884b041eafab8e",
"format": 1
},
{
- "name": "tests/integration/targets/cli_parse/templates/centos_touch_test_output.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090",
+ "name": "tests/integration/targets/grpc_get",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/cli_parse/templates/fedora_ps_-ef.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "839e6e4d259258b34851d64fd27a692c54c16062c104fb1caef0355c8e6cd258",
+ "name": "tests/integration/targets/grpc_get/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/cli_parse/templates/fedora_iptables_--list.yaml",
+ "name": "tests/integration/targets/grpc_get/tasks/iosxr.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "41f749e88e4d6a959350d34a9e887112d76e3f14a5bc15f2ce0485c2b17c7410",
+ "chksum_sha256": "9e79277116f2ec21962c6fb9c362521a619bc8e4e540571f8f2bb0e306fddc13",
"format": 1
},
{
- "name": "tests/integration/targets/cli_parse/templates/centos_ps_-ef.yaml",
+ "name": "tests/integration/targets/grpc_get/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "839e6e4d259258b34851d64fd27a692c54c16062c104fb1caef0355c8e6cd258",
+ "chksum_sha256": "14aa6f229d2851f12ba6d10cce5e4b985e9ac66bf758ee656f52a6b90c655f2b",
"format": 1
},
{
- "name": "tests/integration/targets/cli_parse/templates/nxos_show_interface.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "bcebc3ef1d3e94fd156e655704999ee16837a1c95b90c6d8bbd567e47e4ce272",
+ "name": "tests/integration/targets/grpc_get/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/cli_parse/templates/nxos_show_interface.ttp",
+ "name": "tests/integration/targets/grpc_get/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7b54c727fb9ab5731dbef7b5c271a41276278b15b7408bd24e25eda28e5c1a09",
+ "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/cli_parse/tasks",
+ "name": "tests/integration/targets/grpc_get/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/cli_parse/tasks/nxos_pyats.yaml",
+ "name": "tests/integration/targets/grpc_get/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6d3dbab19620dc96a3c99e11f7c6284f6e40c5e8899ff2c01ab06682678e5bac",
+ "chksum_sha256": "d25d95206718d482774753d23b1563530440c6c3c76e2b40afd18ad95595cddd",
"format": 1
},
{
- "name": "tests/integration/targets/cli_parse/tasks/nxos_native.yaml",
+ "name": "tests/integration/targets/grpc_get/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/grpc_get/tests/iosxr",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/grpc_get/tests/iosxr/basic.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7336cd006b8234f06e4602c67e629073a9ac02433fcbb8419c23d6afc453e6c4",
+ "chksum_sha256": "b3796d7e1a25ee4aa3fd7850e67da8c8fb8a6c0477d1fb494672ed261ad51c81",
"format": 1
},
{
- "name": "tests/integration/targets/cli_parse/tasks/centos_native.yaml",
+ "name": "tests/integration/targets/restconf_config",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/restconf_config/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/restconf_config/tasks/restconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e19f86cbdac31e9bbfaa474777fd34746b0116e54beedf0e354c058649f279b7",
+ "chksum_sha256": "8bfa6b3c0f514038aa61b510030d8399c36b0b4f4274474c9fe02f06eb0ab6f1",
"format": 1
},
{
- "name": "tests/integration/targets/cli_parse/tasks/nxos_ntc_templates.yaml",
+ "name": "tests/integration/targets/restconf_config/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c047b023876182c495f77393433c100ffa36efa44e4d341e1321c1225ac56879",
+ "chksum_sha256": "83d68cb2489c764efacfccd9c7c3983f7fdb9727a74e216c12e445299ae5b915",
"format": 1
},
{
- "name": "tests/integration/targets/cli_parse/tasks/fedora_native.yaml",
+ "name": "tests/integration/targets/restconf_config/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/restconf_config/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "095d4826ffe18c592c5bd1a346a8d82c4fa555b20c3b28ca4da49193dac53e19",
+ "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/cli_parse/tasks/main.yaml",
+ "name": "tests/integration/targets/restconf_config/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/restconf_config/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7986761fa4f1fa1fe2eace0ed13a4842d34aae39547b1856ffae5af399e6f8d3",
+ "chksum_sha256": "f217b1000606ebe64f449135a62b62813f672461ce258e4168b48ef56fdf7b55",
"format": 1
},
{
- "name": "tests/integration/targets/netconf_config",
+ "name": "tests/integration/targets/restconf_config/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/netconf_config/meta",
+ "name": "tests/integration/targets/restconf_config/tests/iosxe",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/netconf_config/meta/main.yml",
+ "name": "tests/integration/targets/restconf_config/tests/iosxe/basic.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9c4272cfbe5d7763f5d851cfa97e4bb480feb11df45c34a21616776c14c3f9ee",
+ "chksum_sha256": "ff4b6188157975c3ba7b396443e415b264965d11029b6a7972e6927688458172",
"format": 1
},
{
- "name": "tests/integration/targets/netconf_config/tasks",
+ "name": "tests/integration/targets/prepare_nxos_tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/netconf_config/tasks/nxos.yaml",
+ "name": "tests/integration/targets/prepare_nxos_tests/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/prepare_nxos_tests/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fabed4f0fdf2b4f0d12c542e0a99da9c4ce894c4607d1d1dc38b37103d20e767",
+ "chksum_sha256": "78bfd2a4e9e3170c5e4ebed70554b46d36a304358c68f34fba0c12fdecd78908",
"format": 1
},
{
- "name": "tests/integration/targets/netconf_config/tasks/iosxr.yaml",
+ "name": "tests/integration/targets/restconf_get",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/restconf_get/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "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,38 +2360,38 @@
"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",
+ "name": "tests/unit/module_utils/network/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f91ddfb8d29088cdbbca4290b4b7f68c8b8d84ebe52e64e430ee1478812bcf74",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/module_utils/network/common/test_config.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "47e508ce3db5f9dc98a587eee6a6cd79ad7a1f11bbe64d12ab561fe7a9b557ef",
+ "name": "tests/unit/module_utils/network/common",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/module_utils/network/common/test_utils.py",
+ "name": "tests/unit/module_utils/network/common/test_config.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d400a77ce4f49dd40d06f13970468e09583f0dda6f8e4166ffea7e25ef2a97e4",
+ "chksum_sha256": "47e508ce3db5f9dc98a587eee6a6cd79ad7a1f11bbe64d12ab561fe7a9b557ef",
"format": 1
},
{
@@ -2388,451 +2402,437 @@
"format": 1
},
{
- "name": "tests/unit/module_utils/network/__init__.py",
+ "name": "tests/unit/module_utils/network/common/test_parsing.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "e0c6e12f7d3207990c54fc6cafde27a57ace7e25050e9f9571757bd8b0593b0d",
"format": 1
},
{
- "name": "tests/unit/module_utils/__init__.py",
+ "name": "tests/unit/module_utils/network/common/test_utils.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "tests/unit/plugins",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "d400a77ce4f49dd40d06f13970468e09583f0dda6f8e4166ffea7e25ef2a97e4",
"format": 1
},
{
- "name": "tests/unit/plugins/connection",
+ "name": "tests/unit/modules",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/plugins/connection/test_netconf.py",
+ "name": "tests/unit/modules/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b77cfbdd44838320ba15b5571c0c283a70643fe94d8812465032490e48c95892",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/plugins/connection/test_network_cli.py",
+ "name": "tests/unit/modules/utils.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7d937945c16d327422b4db319dab8e4b2b87994026acce32b93c6cf056d1728b",
+ "chksum_sha256": "e76d6b7820ee52594fb2e6bed416d9038bd67d0f54678765244bbb5d7c4e1733",
"format": 1
},
{
- "name": "tests/unit/plugins/connection/test_libssh.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d55a657cfc186face72f66269210671f2351a838239d3066befbeaa0af05af44",
+ "name": "tests/unit/modules/network",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/plugins/connection/__init__.py",
+ "name": "tests/unit/modules/network/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/plugins/cli_parsers",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/plugins/cli_parsers/fixtures",
+ "name": "tests/unit/modules/network/cli",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/plugins/cli_parsers/fixtures/nxos_show_version.cfg",
+ "name": "tests/unit/modules/network/cli/cli_module.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "280b9a49752bd9ebddf26798b7df94115c3f3402877d350e60b3236a33fb3f68",
+ "chksum_sha256": "71adedc22e395cc0d3028043739c5a5b55cf9116e5b9661a14b6011849492921",
"format": 1
},
{
- "name": "tests/unit/plugins/cli_parsers/fixtures/ios_show_ip_interface_brief.cfg",
+ "name": "tests/unit/modules/network/cli/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cf7860ac3fe8175f2a062881ecc52f977f14fdcf92ae1a60df68edda493f645a",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/plugins/cli_parsers/test_pyats_parser.py",
+ "name": "tests/unit/modules/network/cli/test_cli_config.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "319bc81ce04b280f024b9fafff902ff9e9436cc729ce61d4b0265a662fa5a4fc",
+ "chksum_sha256": "e1fe40d6fb4ecef4a8b1af542c0254c5f37c80cfce65ea9f8404c72fd229c7de",
"format": 1
},
{
- "name": "tests/unit/plugins/cliconf",
+ "name": "tests/unit/mock",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/plugins/cliconf/test_default.py",
+ "name": "tests/unit/mock/vault_helper.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8fc4158d1269179c0c5eb1055d790f287583cf2b6e451087e2572c3b4c10bde8",
+ "chksum_sha256": "3bf7834d18bd34473d0f4b898253177229a131f14364874efba584ff985e4a41",
"format": 1
},
{
- "name": "tests/unit/plugins/plugin_utils",
- "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/unit/plugins/plugin_utils/test_version.py",
+ "name": "tests/unit/mock/path.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2bd3627d999c0ee500821e176a323e3094e0f3f1dab4c1891b45ce170f6a0fe0",
+ "chksum_sha256": "5561a16a302e55ea79227591afefc3a93f33001fc80155dd29b068b90502a446",
"format": 1
},
{
- "name": "tests/unit/plugins/action",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/mock/procenv.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e8f699f9697899526eda627e967fd0f1fbd72ada1c6cda698323bb39906d1edf",
"format": 1
},
{
- "name": "tests/unit/plugins/action/network",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/mock/yaml_helper.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5a7b891104628e0883dca322c59f5e933144b8682330853b6d49c20e80b72a89",
"format": 1
},
{
- "name": "tests/unit/plugins/action/network/test_network.py",
+ "name": "tests/unit/mock/loader.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "10b5f3f2e0327e89bfb9e0563585b2d86037d361ff8f2f87ee54ef3c0d2e5484",
+ "chksum_sha256": "62b34770bc51c9af0cee87370b448c8c8afb033ce2e704d6d2288743db916714",
"format": 1
},
{
- "name": "tests/unit/plugins/filter",
+ "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/test_type5_pw.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "74ad71f113f4a6e6befa4b954ac8985044331a2ec4075679535b3506aa539f25",
+ "name": "tests/unit/plugins/plugin_utils",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/plugins/filter/test_pop_ace.py",
+ "name": "tests/unit/plugins/plugin_utils/test_version.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fb2503fc6dc28187530d8ce344adca7617d1aa82441239a11c1519a6bf77a657",
+ "chksum_sha256": "2bd3627d999c0ee500821e176a323e3094e0f3f1dab4c1891b45ce170f6a0fe0",
"format": 1
},
{
- "name": "tests/unit/plugins/filter/comp_type5.py",
+ "name": "tests/unit/plugins/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "39f4225d65b491a8383fb004300ce486289bc4ed582007c875753f0e1eb6d736",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/plugins/filter/fixtures",
+ "name": "tests/unit/plugins/action",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/plugins/filter/fixtures/network",
+ "name": "tests/unit/plugins/action/network",
"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/action/network/test_network.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d6485e4874c8c58d4ce1bd7fc4e055a8de0c169392494971976dfee8a4fb4ded",
+ "chksum_sha256": "10b5f3f2e0327e89bfb9e0563585b2d86037d361ff8f2f87ee54ef3c0d2e5484",
"format": 1
},
{
- "name": "tests/unit/plugins/filter/fixtures/network/show_vlans_xml_single_value_spec.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "806a7c949715a66e5337e7b9755395d9534a348646412bdc22fc0544587e33bf",
+ "name": "tests/unit/plugins/connection",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/plugins/filter/fixtures/network/show_vlans_xml_spec.yml",
+ "name": "tests/unit/plugins/connection/test_network_cli.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "155ed3b225b5bb5312d3b4551e6cd46f8c00171b45a1102f95b97b9312d5f647",
+ "chksum_sha256": "7d937945c16d327422b4db319dab8e4b2b87994026acce32b93c6cf056d1728b",
"format": 1
},
{
- "name": "tests/unit/plugins/filter/fixtures/network/show_vlans_xml_output.txt",
+ "name": "tests/unit/plugins/connection/test_netconf.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c7ed33a3859e92f8bd04a8e07f3c782200b68e07aaa0e4ec3321bf8ef13a01dc",
+ "chksum_sha256": "b77cfbdd44838320ba15b5571c0c283a70643fe94d8812465032490e48c95892",
"format": 1
},
{
- "name": "tests/unit/plugins/filter/fixtures/network/show_vlans_xml_with_key_spec.yml",
+ "name": "tests/unit/plugins/connection/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "62102cf4c0ae9f7e57bca7999c52257bfe6aff62d1e24153e5f4da9efac8dab3",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/plugins/filter/fixtures/network/__init__.py",
+ "name": "tests/unit/plugins/connection/test_libssh.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "d55a657cfc186face72f66269210671f2351a838239d3066befbeaa0af05af44",
"format": 1
},
{
- "name": "tests/unit/plugins/filter/fixtures/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "name": "tests/unit/plugins/cli_parsers",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/plugins/filter/test_vlan_parser.py",
+ "name": "tests/unit/plugins/cli_parsers/test_pyats_parser.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f7fa75e676aee2068b18468314a0c6cdcd4cb848565597844f0a822c1a027ea8",
+ "chksum_sha256": "66c0077b7da4543148c25aaf74db1ead7c5754f3eda3d84e2a2720a5b964f982",
"format": 1
},
{
- "name": "tests/unit/plugins/filter/test_network.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3c7166b4606f40f93e81cc15a4d254cb341a91b3dcd6c4ac4cb06a813cf4efb1",
+ "name": "tests/unit/plugins/cli_parsers/fixtures",
+ "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/fixtures/ios_show_ip_interface_brief.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4460c2cb0872fb03d96c07d112bef10875957be1a76c501af931e74a4f2757c",
+ "chksum_sha256": "cf7860ac3fe8175f2a062881ecc52f977f14fdcf92ae1a60df68edda493f645a",
"format": 1
},
{
- "name": "tests/unit/plugins/filter/test_hash_salt.py",
+ "name": "tests/unit/plugins/cli_parsers/fixtures/nxos_show_version.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "320924be942e229b45d8a5629734971011d7706845cc00f996e09c7fd09523c5",
+ "chksum_sha256": "280b9a49752bd9ebddf26798b7df94115c3f3402877d350e60b3236a33fb3f68",
"format": 1
},
{
- "name": "tests/unit/plugins/filter/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "name": "tests/unit/plugins/filter",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/plugins/__init__.py",
+ "name": "tests/unit/plugins/filter/test_type5_pw.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "tests/unit/mock",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "162603351e0a35153c49e8165652efa9751601515eab8b88a96bbc6937023da9",
"format": 1
},
{
- "name": "tests/unit/mock/vault_helper.py",
+ "name": "tests/unit/plugins/filter/test_vlan_parser.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3bf7834d18bd34473d0f4b898253177229a131f14364874efba584ff985e4a41",
+ "chksum_sha256": "b2cb55e3d54aa330e0bc95300b7a57dc7604a41c3f36ed45c02b903addd8fa62",
"format": 1
},
{
- "name": "tests/unit/mock/procenv.py",
+ "name": "tests/unit/plugins/filter/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fae8515e6eb44dd87ca9a7b88eb572058b48f0b05d8be0483aab3960d6841a9b",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/mock/yaml_helper.py",
+ "name": "tests/unit/plugins/filter/test_network.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5a7b891104628e0883dca322c59f5e933144b8682330853b6d49c20e80b72a89",
+ "chksum_sha256": "c2a3b4c2aa5b4a65d37e75ee0c6d3a4b377bc42bfec0ce260fa39a61feefbc86",
"format": 1
},
{
- "name": "tests/unit/mock/path.py",
+ "name": "tests/unit/plugins/filter/test_hash_salt.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5561a16a302e55ea79227591afefc3a93f33001fc80155dd29b068b90502a446",
+ "chksum_sha256": "9c84086f1b1b50ebaf20664da76646f1d8fa69ad5bbd490562fcbf5063329c82",
"format": 1
},
{
- "name": "tests/unit/mock/loader.py",
+ "name": "tests/unit/plugins/filter/test_pop_ace.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "62b34770bc51c9af0cee87370b448c8c8afb033ce2e704d6d2288743db916714",
+ "chksum_sha256": "5a556c22b982c1901ac1c28ad6a76acaf380688c424dbb0bd739d70534993bf3",
"format": 1
},
{
- "name": "tests/unit/mock/__init__.py",
+ "name": "tests/unit/plugins/filter/comp_type5.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "ed7903c21be70c7ec62b336c51add40c414744e3efc326a57d09d1af00212211",
"format": 1
},
{
- "name": "tests/unit/modules",
+ "name": "tests/unit/plugins/filter/fixtures",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/plugins/filter/fixtures/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules/network/cli",
+ "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": "7a76e6b5a6a1b75c786e571fe854f37b69f1bf44883efae7b9efa0578ca98183",
+ "format": 1
+ },
+ {
+ "name": "tests/sanity/ignore-2.17.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8e053c08fd20ac8c8004c6b67837862b4ba3f2a36fd039ec44936cab4495c124",
+ "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://img.shields.io/codecov/c/github/ansible-collections/ansible.netcommon)](https://codecov.io/gh/ansible-collections/ansible.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``.
<!--start requires_ansible-->
## 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
- - <password>
- - y
+ - y
+ - <password>
+ - 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
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>filename</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>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.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>path</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>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,</div>
+ <div>For an IOSXE appliance the path pattern is flash://&lt;filename&gt;</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+
+Notes
+-----
+
+.. note::
+ - This module is supported on ``ansible_network_os`` network platforms. See the :ref:`Network Platform Options <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
- - <password>
- - y
+ - y
+ - <password>
+ - 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://<filename>
+ 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 <candidate/> datastore and then commit
- running, edit <running/> 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 <edit-config> 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 <edit-config> 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 <hostname>_config.<current-date>@<current-time>
+ - 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 <hostname>_config.<current-date>@<current-time>
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": "<rpc-reply>\n<data>\n<configuration>\n<version>17.3R1.10</version>...<--snip-->"
"before": "<rpc-reply>\n<data>\n<configuration>\n <version>17.3R1.10</version>...<--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.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.12.txt b/ansible_collections/ansible/netcommon/tests/sanity/ignore-2.18.txt
index 3fd7253af..3fd7253af 100644
--- a/ansible_collections/ansible/netcommon/tests/sanity/ignore-2.12.txt
+++ b/ansible_collections/ansible/netcommon/tests/sanity/ignore-2.18.txt
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/check_label.yml
index fda595dc5..b120bfa32 100644
--- a/ansible_collections/ansible/utils/.github/workflows/ack.yml
+++ b/ansible_collections/ansible/utils/.github/workflows/check_label.yml
@@ -1,15 +1,11 @@
---
-# See https://github.com/ansible-community/devtools/blob/main/.github/workflows/ack.yml
-name: ack
-
+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:
- ack:
- uses: ansible/devtools/.github/workflows/ack.yml@main
+ 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,3293 +78,3279 @@
"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",
+ "chksum_sha256": "c9a165e7e5a08cf5296d7046d99fd6b5f8a3c34672cbdb5a9520407dc7539774",
"format": 1
},
{
- "name": "plugins/plugin_utils/base",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "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",
+ "chksum_sha256": "31f365a6ff3ea383c64823f5ea04935b66f1bc7c7ad4372d3dc529cc86e684e2",
"format": 1
},
{
- "name": "plugins/sub_plugins",
+ "name": "plugins/test",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/sub_plugins/fact_diff",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/test/supernet_of.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2a6b4c721807169bbc864ea4d15c8e039178accc0ec489b2fa849f93ccae2ed4",
"format": 1
},
{
- "name": "plugins/sub_plugins/fact_diff/native.py",
+ "name": "plugins/test/ip_address.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a2479f9e5df195218a205fb173a285473865b0f8e62f7c6031689ede36dcab13",
+ "chksum_sha256": "cea11319e9678be2f3a3d5a16b30f082f5dad257a8b664e4328d62d57f0c2b49",
"format": 1
},
{
- "name": "plugins/sub_plugins/cli_parser",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/test/multicast.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "eccf99851826e32841328ccf4969d0f8e883165b43919d9e9c39f11a7de5b9bf",
"format": 1
},
{
- "name": "plugins/sub_plugins/cli_parser/ttp_parser.py",
+ "name": "plugins/test/ipv6_address.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "25449badac48fb9e6d026238b01ba30484f020618a8afcf1edd6f22cd3dce174",
+ "chksum_sha256": "f3a72d0f685d93b8e84b99baa5c3d1db05bfddf4cd985dd53043611c8a0fee9e",
"format": 1
},
{
- "name": "plugins/sub_plugins/cli_parser/json_parser.py",
+ "name": "plugins/test/subnet_of.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7a9ea4a244a755604aac78aad2fd06b1446c6fa8613445d5f397c40db55c1ca6",
+ "chksum_sha256": "4f7566252c1d60e649d1d6a14092cc3e01747c07c5b041c868428b58392cbc36",
"format": 1
},
{
- "name": "plugins/sub_plugins/cli_parser/textfsm_parser.py",
+ "name": "plugins/test/ipv4_address.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3c0958e6bde7978e06dd4ece8b05748065983af858002fecf0086123609fc7bd",
+ "chksum_sha256": "98748990e716b6666fa9fc5476168f34c16506b35230aa8c1170ab600c5796b9",
"format": 1
},
{
- "name": "plugins/sub_plugins/cli_parser/xml_parser.py",
+ "name": "plugins/test/unspecified.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7492d16f9edffd72d42e82e91ef611071bc6f9c20131e1b1b5829814787c6f0d",
+ "chksum_sha256": "b38ebc5ddc9100db236807514fea370a363a2896375330ac57ff502e78899786",
"format": 1
},
{
- "name": "plugins/sub_plugins/validate",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/test/ipv6_teredo.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "364e1b494bcbc6c2915d57631e89b0be09cb4537b0e593f7956f8e754c600083",
"format": 1
},
{
- "name": "plugins/sub_plugins/validate/jsonschema.py",
+ "name": "plugins/test/in_any_network.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0eb6c18e381fee9531223e593a5baee888933baad3c545ddf0d2c15ddd1160a2",
+ "chksum_sha256": "d77f655933ad85fbac201217d15d508f63b303606494afd0d46f5a202b06e847",
"format": 1
},
{
- "name": "plugins/sub_plugins/validate/config.py",
+ "name": "plugins/test/ipv4_hostmask.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0a744f7543ec776412dab52857aca2b324bc14526d042f4572dfc8f055d9b8ce",
+ "chksum_sha256": "19001bc8626d77ac20306bc2a41f8e71a2f277caeb2b3c563c5fbed932fc6fa0",
"format": 1
},
{
- "name": "plugins/lookup",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/test/ipv6_sixtofour.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "afc48874147e2a79e7af67029cac6c28646f21126473d6819e4261f172bcc544",
"format": 1
},
{
- "name": "plugins/lookup/validate.py",
+ "name": "plugins/test/ipv6.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ffde6732c51259be8453a2feb375de383de85cdd0d720e5795ff4031a66c4f0a",
+ "chksum_sha256": "85a3b8dcdb4d03b29c191533a0cb27108fb31fc767bebb1a8fbd691a38b5a137",
"format": 1
},
{
- "name": "plugins/lookup/get_path.py",
+ "name": "plugins/test/ipv4_netmask.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9323f1a2a3c0270f1f753d0bd801494ca2cec8cc5a2fcc462884aab2bfd269e1",
+ "chksum_sha256": "77112181a46287e3c24aeb39143c9d8e148abb741a5c5068b442df0ce27f2bb4",
"format": 1
},
{
- "name": "plugins/lookup/index_of.py",
+ "name": "plugins/test/mac.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "287e606a1a3667f5089e4d3c29de436da3b2ce1de821a51ad1e0093fbf7e0490",
+ "chksum_sha256": "62299ae2f27faa59e12edb01e50747245f85a27b5bba995ab79a4c98eaf0b884",
"format": 1
},
{
- "name": "plugins/lookup/to_paths.py",
+ "name": "plugins/test/resolvable.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "858cf146b61c8c860bcc3b87f5badc1493dfc20f6d3e48c8bad57b002f532a8c",
+ "chksum_sha256": "5bd0e507b6cbac09693ad5acd6f4761fdcda8f884c142100276bd0b8eed6a015",
"format": 1
},
{
- "name": "plugins/filter",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/test/validate.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5de8085727c146364a5cfdfd9989c3c72936b3f28aed5384aa3d98096d8499f9",
"format": 1
},
{
- "name": "plugins/filter/from_xml.py",
+ "name": "plugins/test/public.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5127b885570571c98046c6184c8366a42ec7b1c494e7e6c4c1046836ef184554",
+ "chksum_sha256": "dadcb1f62a3b8becba746215e97b37a784d0e7e5a856b8a226edbed3fea1d1ba",
"format": 1
},
{
- "name": "plugins/filter/param_list_compare.py",
+ "name": "plugins/test/in_one_network.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f02eda7836771f03e5ed78f444a67d2cabaf45231a15998b6ebbc77f18227348",
+ "chksum_sha256": "992f70b784ac66f64793ba11700b801a9d9b078f29b7cbea01dc101dfc174e34",
"format": 1
},
{
- "name": "plugins/filter/ipsubnet.py",
+ "name": "plugins/test/private.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ab7f64ca7b708643f99bac87c642f80549c233d29b2b9433200a33df3bc58ae2",
+ "chksum_sha256": "c9e72a11696482f5568dcaad79940dd7dd8d304a61ce3f942af4221a9ffd11c8",
"format": 1
},
{
- "name": "plugins/filter/remove_keys.py",
+ "name": "plugins/test/ipv4.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c65716a34c4c6c2687e10317201de892858cfe97733ae423b111c5d318e38e86",
+ "chksum_sha256": "096eb84875c30d1c00f61f0e8a39ee216432ce8cc83ce8677c17c51039019333",
"format": 1
},
{
- "name": "plugins/filter/hwaddr.py",
+ "name": "plugins/test/ip.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "537fa774d0c9e930f0bda854f715998a8128768421e9c416d54df187f236be66",
+ "chksum_sha256": "96f1d90050b18b606f076c12a1ce924fd5e1ea479569cab057134b8309ac408f",
"format": 1
},
{
- "name": "plugins/filter/ip4_hex.py",
+ "name": "plugins/test/in_network.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "595a83cef32d8c49c02984cffe23f63eb93a3b7e27121ccf14f5ef52ba4b5909",
+ "chksum_sha256": "4c8fe55367ab444d628034575baa9cccb265fd7cdd86cfaf76a526eca9d09bfb",
"format": 1
},
{
- "name": "plugins/filter/validate.py",
+ "name": "plugins/test/loopback.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "29141fcc4d8549d340e48f52b7f55da839a899b15f7d5f2c29c04d65646ab40a",
+ "chksum_sha256": "080dab36d15bf9d39b67a2f2e67450a2be46c6e9614fe7a49e7c1e70033efdf8",
"format": 1
},
{
- "name": "plugins/filter/network_in_network.py",
+ "name": "plugins/test/reserved.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "292e649c71a8981076624d907e2355fdcca5b77d34630a3ba1d94b10e949207f",
+ "chksum_sha256": "a141375f7758aea9daa18dcdb7d83fc9949dc1e9f5061b4fca3434f6b09c878b",
"format": 1
},
{
- "name": "plugins/filter/next_nth_usable.py",
+ "name": "plugins/test/ipv6_ipv4_mapped.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ad84e47fcf69f1bab8d390003f0c6bf93df183d532ac68c57252ac8ef4e68fb1",
+ "chksum_sha256": "f009b340f69e20836ac3f708691928485f65f69e96dc19f70db74c20bada8c05",
"format": 1
},
{
- "name": "plugins/filter/ipaddr.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "12e73edbd14f49ea629e53c8f17d4261f40f87e2c582f599073c69cbe66d0d27",
+ "name": "plugins/plugin_utils",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/filter/nthhost.py",
+ "name": "plugins/plugin_utils/fact_diff.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "338ca4a46c62a49b94e4994593a23cc998e2de3284777cbed9367e8de7bf02f9",
+ "chksum_sha256": "3889ceb1d3d5616cecdea885d7137aff5dbc6451fc0679576b3c1cdbd5cb00e1",
"format": 1
},
{
- "name": "plugins/filter/ipv6form.py",
+ "name": "plugins/plugin_utils/keep_keys.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d4ddfa7dc0dd44f5ff9e715708fc4da0ff590d09b10d3afab032046909ab2f56",
+ "chksum_sha256": "5a9884ffa745d38e76ab1a5e5d4ccf06019dd21eb4004be7a1c73ba55117b216",
"format": 1
},
{
- "name": "plugins/filter/to_xml.py",
+ "name": "plugins/plugin_utils/consolidate.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1200518068f615530e5e74fa4e1ee82657a5aee1af0e7a105b1b7ebeae3ce0d8",
+ "chksum_sha256": "96320d44fe7c45eb0bd2ae05c85882d57a27da46f8b0af135762bba61d22c8da",
"format": 1
},
{
- "name": "plugins/filter/reduce_on_network.py",
+ "name": "plugins/plugin_utils/remove_keys.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c55954c5d20e0243f2e3333d011c4021ae4294f29e1a7c4cbf369950dee0eab0",
+ "chksum_sha256": "17d513c637f1347a49a25aa99b3232a753c94e9507ffdb96c8a79a2eeb4a6f78",
"format": 1
},
{
- "name": "plugins/filter/get_path.py",
+ "name": "plugins/plugin_utils/index_of.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3ec4ffeb16940d5ad6cf7fcf3f6db1eb92eaf222dd30089a03994b072684b040",
+ "chksum_sha256": "54b89a6c481475f213a2233f497b7bd6eec37f2b2b52765a5d8a1e48efb20f52",
"format": 1
},
{
- "name": "plugins/filter/fact_diff.py",
+ "name": "plugins/plugin_utils/connection_base.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2d321017a94cbb430f30c4abd13aa56f8813e2cfb33102e5824a85abbef167ec",
+ "chksum_sha256": "89d3ba294058d651f4a5292bfe1d93d507a7719d303d3e665e069c80f44a9fe0",
"format": 1
},
{
- "name": "plugins/filter/ipmath.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "29f0b614d1ad648514eb619f02de360d479759924bbe79aca66a1ec775fdb4a8",
+ "name": "plugins/plugin_utils/base",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/filter/ipv6.py",
+ "name": "plugins/plugin_utils/base/fact_diff.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b8f517a01193ab2a7d9406971cb31a55488315ac0cde3b167bb6a7eae78caf93",
+ "chksum_sha256": "5e7c19600d05863ca5986107de3b259ff0475e7ec163dab2d7d16bfa7ee55ee2",
"format": 1
},
{
- "name": "plugins/filter/index_of.py",
+ "name": "plugins/plugin_utils/base/ipaddr_utils.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b8f72b0978db5536a546d0652287f6d59111ef6a21c281873fc51bd9345a8ff4",
+ "chksum_sha256": "f84645e04c4fe91599ec661a394b692e6060b333a326df5eea281b517d68c7e8",
"format": 1
},
{
- "name": "plugins/filter/to_paths.py",
+ "name": "plugins/plugin_utils/base/validate.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cfe1cb5a118b1d9547c2444d1ef9fd2dd8e0076587d58e724e756724768af228",
+ "chksum_sha256": "9e19d8da82d0af9891ad14977366193f3eb7caf51819f8b6fc6099eedc7c758e",
"format": 1
},
{
- "name": "plugins/filter/slaac.py",
+ "name": "plugins/plugin_utils/base/ipaddress_utils.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "93c561c589dc6c5bbe732a4d136616c7d9b5e6b105cb9cec40b26e0ef8a172a4",
+ "chksum_sha256": "c5239e0511f46858bd7169e8bbc2262dc1fc86b5ac7f37d96cfd49b5491e250e",
"format": 1
},
{
- "name": "plugins/filter/ipcut.py",
+ "name": "plugins/plugin_utils/base/cli_parser.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "68f81128b079b86a4f47a52991609d20405f1f21f17c428671971745aa872994",
+ "chksum_sha256": "1954b143c93cc8768ecc8f439f44738366ede93244ebcbe12ea4b9a96e028f4c",
"format": 1
},
{
- "name": "plugins/filter/macaddr.py",
+ "name": "plugins/plugin_utils/base/utils.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b702ad98dbbaef44c7d5ceaa8355a317bcb1f0deb5f0224da98f639f789c2b2f",
+ "chksum_sha256": "6ed1b297442abf5715528e12a9c68f3389d4743ef38d20400efc170737a1b088",
"format": 1
},
{
- "name": "plugins/filter/usable_range.py",
+ "name": "plugins/plugin_utils/to_xml.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b38fdf0f93feba1be5898bfb0af62144bb591f4dab0f5cc291ce72d70b93b56e",
+ "chksum_sha256": "49becc6bfa713f37dbda89285fc0db94f10e7ee767eca674556568e91e0d586b",
"format": 1
},
{
- "name": "plugins/filter/previous_nth_usable.py",
+ "name": "plugins/plugin_utils/replace_keys.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "60b550ba0f9e4afeb0db54e70e2c02fa7d12c14f3388d11fb24d3fefd2a51436",
+ "chksum_sha256": "99f8242cb941634d3ab6a6c800c0e460344212dd1a9d8a99f700a2bf1c68bc0a",
"format": 1
},
{
- "name": "plugins/filter/ipv4.py",
+ "name": "plugins/plugin_utils/from_xml.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3c6de45a25dd966988f545d0daf22af1aad6ff70dae439952b5dc9b04214f308",
+ "chksum_sha256": "ad392fe022d3c2ce88daf823e634e2060ca722cd370b1bfe8eccae04b2f9bffb",
"format": 1
},
{
- "name": "plugins/filter/cidr_merge.py",
+ "name": "plugins/sub_plugins",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "plugins/sub_plugins/validate",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "plugins/sub_plugins/validate/jsonschema.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1696ddbc8006f734b96ca793b0d97b20fd916d5e79689927116b9502e6b39720",
+ "chksum_sha256": "0eb6c18e381fee9531223e593a5baee888933baad3c545ddf0d2c15ddd1160a2",
"format": 1
},
{
- "name": "plugins/filter/replace_keys.py",
+ "name": "plugins/sub_plugins/validate/config.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3ed3f41aa165e732586a87a436b6b3a620aa4576d272d5dc24b570602d5cf9c3",
+ "chksum_sha256": "0a744f7543ec776412dab52857aca2b324bc14526d042f4572dfc8f055d9b8ce",
"format": 1
},
{
- "name": "plugins/filter/keep_keys.py",
+ "name": "plugins/sub_plugins/cli_parser",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "plugins/sub_plugins/cli_parser/xml_parser.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b8ad427ca5be903162a49b9b73f437262b7ddc47eec1328c165d42b86b51755f",
+ "chksum_sha256": "7492d16f9edffd72d42e82e91ef611071bc6f9c20131e1b1b5829814787c6f0d",
"format": 1
},
{
- "name": "plugins/filter/network_in_usable.py",
+ "name": "plugins/sub_plugins/cli_parser/ttp_parser.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "555d3639de75196fc6d6d4b15000794ede40565f6d87c7515ddc2d96888ecb92",
+ "chksum_sha256": "25449badac48fb9e6d026238b01ba30484f020618a8afcf1edd6f22cd3dce174",
"format": 1
},
{
- "name": "plugins/filter/ipwrap.py",
+ "name": "plugins/sub_plugins/cli_parser/json_parser.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9c18c1eac1f64f96be33092541430edb3d5de0b8f47483db09cff2c101c80fc3",
+ "chksum_sha256": "7a9ea4a244a755604aac78aad2fd06b1446c6fa8613445d5f397c40db55c1ca6",
"format": 1
},
{
- "name": "plugins/filter/consolidate.py",
+ "name": "plugins/sub_plugins/cli_parser/textfsm_parser.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f1d5948e33206851f8e47c39b0447302d922121a6da921151d04e9e52e15c70a",
+ "chksum_sha256": "3c0958e6bde7978e06dd4ece8b05748065983af858002fecf0086123609fc7bd",
"format": 1
},
{
- "name": "plugins/test",
+ "name": "plugins/sub_plugins/fact_diff",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/test/ipv6_address.py",
+ "name": "plugins/sub_plugins/fact_diff/native.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f3a72d0f685d93b8e84b99baa5c3d1db05bfddf4cd985dd53043611c8a0fee9e",
+ "chksum_sha256": "a2479f9e5df195218a205fb173a285473865b0f8e62f7c6031689ede36dcab13",
"format": 1
},
{
- "name": "plugins/test/unspecified.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b38ebc5ddc9100db236807514fea370a363a2896375330ac57ff502e78899786",
+ "name": "plugins/filter",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/test/ipv4_address.py",
+ "name": "plugins/filter/get_path.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "98748990e716b6666fa9fc5476168f34c16506b35230aa8c1170ab600c5796b9",
+ "chksum_sha256": "3ec4ffeb16940d5ad6cf7fcf3f6db1eb92eaf222dd30089a03994b072684b040",
"format": 1
},
{
- "name": "plugins/test/public.py",
+ "name": "plugins/filter/next_nth_usable.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dadcb1f62a3b8becba746215e97b37a784d0e7e5a856b8a226edbed3fea1d1ba",
+ "chksum_sha256": "ad84e47fcf69f1bab8d390003f0c6bf93df183d532ac68c57252ac8ef4e68fb1",
"format": 1
},
{
- "name": "plugins/test/validate.py",
+ "name": "plugins/filter/usable_range.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5de8085727c146364a5cfdfd9989c3c72936b3f28aed5384aa3d98096d8499f9",
+ "chksum_sha256": "b38fdf0f93feba1be5898bfb0af62144bb591f4dab0f5cc291ce72d70b93b56e",
"format": 1
},
{
- "name": "plugins/test/ipv6_sixtofour.py",
+ "name": "plugins/filter/fact_diff.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "afc48874147e2a79e7af67029cac6c28646f21126473d6819e4261f172bcc544",
+ "chksum_sha256": "dc0f8b28ff75dd863cbd5c6986f176204e204c745a979dc4b78cd89f22d952da",
"format": 1
},
{
- "name": "plugins/test/private.py",
+ "name": "plugins/filter/keep_keys.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c9e72a11696482f5568dcaad79940dd7dd8d304a61ce3f942af4221a9ffd11c8",
+ "chksum_sha256": "b8ad427ca5be903162a49b9b73f437262b7ddc47eec1328c165d42b86b51755f",
"format": 1
},
{
- "name": "plugins/test/resolvable.py",
+ "name": "plugins/filter/consolidate.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5bd0e507b6cbac09693ad5acd6f4761fdcda8f884c142100276bd0b8eed6a015",
+ "chksum_sha256": "f1d5948e33206851f8e47c39b0447302d922121a6da921151d04e9e52e15c70a",
"format": 1
},
{
- "name": "plugins/test/in_any_network.py",
+ "name": "plugins/filter/remove_keys.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d77f655933ad85fbac201217d15d508f63b303606494afd0d46f5a202b06e847",
+ "chksum_sha256": "c65716a34c4c6c2687e10317201de892858cfe97733ae423b111c5d318e38e86",
"format": 1
},
{
- "name": "plugins/test/reserved.py",
+ "name": "plugins/filter/ipv6form.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a141375f7758aea9daa18dcdb7d83fc9949dc1e9f5061b4fca3434f6b09c878b",
+ "chksum_sha256": "19971cd14e72dd73fb7426a81d406d17d96572ba912e2ae772395756a39259a1",
"format": 1
},
{
- "name": "plugins/test/loopback.py",
+ "name": "plugins/filter/index_of.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "080dab36d15bf9d39b67a2f2e67450a2be46c6e9614fe7a49e7c1e70033efdf8",
+ "chksum_sha256": "b8f72b0978db5536a546d0652287f6d59111ef6a21c281873fc51bd9345a8ff4",
"format": 1
},
{
- "name": "plugins/test/ipv6.py",
+ "name": "plugins/filter/previous_nth_usable.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "85a3b8dcdb4d03b29c191533a0cb27108fb31fc767bebb1a8fbd691a38b5a137",
+ "chksum_sha256": "60b550ba0f9e4afeb0db54e70e2c02fa7d12c14f3388d11fb24d3fefd2a51436",
"format": 1
},
{
- "name": "plugins/test/ipv4_hostmask.py",
+ "name": "plugins/filter/ipmath.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "19001bc8626d77ac20306bc2a41f8e71a2f277caeb2b3c563c5fbed932fc6fa0",
+ "chksum_sha256": "29f0b614d1ad648514eb619f02de360d479759924bbe79aca66a1ec775fdb4a8",
"format": 1
},
{
- "name": "plugins/test/ipv6_teredo.py",
+ "name": "plugins/filter/ipcut.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "364e1b494bcbc6c2915d57631e89b0be09cb4537b0e593f7956f8e754c600083",
+ "chksum_sha256": "68f81128b079b86a4f47a52991609d20405f1f21f17c428671971745aa872994",
"format": 1
},
{
- "name": "plugins/test/in_one_network.py",
+ "name": "plugins/filter/ip4_hex.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "992f70b784ac66f64793ba11700b801a9d9b078f29b7cbea01dc101dfc174e34",
+ "chksum_sha256": "595a83cef32d8c49c02984cffe23f63eb93a3b7e27121ccf14f5ef52ba4b5909",
"format": 1
},
{
- "name": "plugins/test/ip.py",
+ "name": "plugins/filter/slaac.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "96f1d90050b18b606f076c12a1ce924fd5e1ea479569cab057134b8309ac408f",
+ "chksum_sha256": "93c561c589dc6c5bbe732a4d136616c7d9b5e6b105cb9cec40b26e0ef8a172a4",
"format": 1
},
{
- "name": "plugins/test/ipv4.py",
+ "name": "plugins/filter/macaddr.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "096eb84875c30d1c00f61f0e8a39ee216432ce8cc83ce8677c17c51039019333",
+ "chksum_sha256": "b702ad98dbbaef44c7d5ceaa8355a317bcb1f0deb5f0224da98f639f789c2b2f",
"format": 1
},
{
- "name": "plugins/test/ipv6_ipv4_mapped.py",
+ "name": "plugins/filter/ipsubnet.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f009b340f69e20836ac3f708691928485f65f69e96dc19f70db74c20bada8c05",
+ "chksum_sha256": "ab7f64ca7b708643f99bac87c642f80549c233d29b2b9433200a33df3bc58ae2",
"format": 1
},
{
- "name": "plugins/test/supernet_of.py",
+ "name": "plugins/filter/to_paths.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2a6b4c721807169bbc864ea4d15c8e039178accc0ec489b2fa849f93ccae2ed4",
+ "chksum_sha256": "cfe1cb5a118b1d9547c2444d1ef9fd2dd8e0076587d58e724e756724768af228",
"format": 1
},
{
- "name": "plugins/test/multicast.py",
+ "name": "plugins/filter/to_xml.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eccf99851826e32841328ccf4969d0f8e883165b43919d9e9c39f11a7de5b9bf",
+ "chksum_sha256": "1200518068f615530e5e74fa4e1ee82657a5aee1af0e7a105b1b7ebeae3ce0d8",
"format": 1
},
{
- "name": "plugins/test/ipv4_netmask.py",
+ "name": "plugins/filter/ipv6.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "77112181a46287e3c24aeb39143c9d8e148abb741a5c5068b442df0ce27f2bb4",
+ "chksum_sha256": "b8f517a01193ab2a7d9406971cb31a55488315ac0cde3b167bb6a7eae78caf93",
"format": 1
},
{
- "name": "plugins/test/ip_address.py",
+ "name": "plugins/filter/nthhost.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cea11319e9678be2f3a3d5a16b30f082f5dad257a8b664e4328d62d57f0c2b49",
+ "chksum_sha256": "338ca4a46c62a49b94e4994593a23cc998e2de3284777cbed9367e8de7bf02f9",
"format": 1
},
{
- "name": "plugins/test/subnet_of.py",
+ "name": "plugins/filter/network_in_network.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4f7566252c1d60e649d1d6a14092cc3e01747c07c5b041c868428b58392cbc36",
+ "chksum_sha256": "292e649c71a8981076624d907e2355fdcca5b77d34630a3ba1d94b10e949207f",
"format": 1
},
{
- "name": "plugins/test/in_network.py",
+ "name": "plugins/filter/param_list_compare.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4c8fe55367ab444d628034575baa9cccb265fd7cdd86cfaf76a526eca9d09bfb",
+ "chksum_sha256": "f02eda7836771f03e5ed78f444a67d2cabaf45231a15998b6ebbc77f18227348",
"format": 1
},
{
- "name": "plugins/test/mac.py",
+ "name": "plugins/filter/network_in_usable.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "62299ae2f27faa59e12edb01e50747245f85a27b5bba995ab79a4c98eaf0b884",
+ "chksum_sha256": "555d3639de75196fc6d6d4b15000794ede40565f6d87c7515ddc2d96888ecb92",
"format": 1
},
{
- "name": "plugins/module_utils",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/filter/validate.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "29141fcc4d8549d340e48f52b7f55da839a899b15f7d5f2c29c04d65646ab40a",
"format": 1
},
{
- "name": "plugins/module_utils/common",
- "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/module_utils/common/get_path.py",
+ "name": "plugins/filter/ipwrap.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c4bc8fdf10776ac5f08e6292edcb7f55c4b8485b48616d0c598ba54df289aa77",
+ "chksum_sha256": "9c18c1eac1f64f96be33092541430edb3d5de0b8f47483db09cff2c101c80fc3",
"format": 1
},
{
- "name": "plugins/module_utils/common/to_paths.py",
+ "name": "plugins/filter/replace_keys.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e1ebc611982da989657275368f3e593496405bd13d4a5dcbd611c664cc784f8c",
+ "chksum_sha256": "3ed3f41aa165e732586a87a436b6b3a620aa4576d272d5dc24b570602d5cf9c3",
"format": 1
},
{
- "name": "plugins/module_utils/common/utils.py",
+ "name": "plugins/filter/ipv4.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "31f365a6ff3ea383c64823f5ea04935b66f1bc7c7ad4372d3dc529cc86e684e2",
+ "chksum_sha256": "3c6de45a25dd966988f545d0daf22af1aad6ff70dae439952b5dc9b04214f308",
"format": 1
},
{
- "name": "plugins/module_utils/common/argspec_validate.py",
+ "name": "plugins/filter/from_xml.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "39febfd9b1f02fde688c270b85a29693adffa8baa9f1d31128a6b32fd3f64d85",
+ "chksum_sha256": "5127b885570571c98046c6184c8366a42ec7b1c494e7e6c4c1046836ef184554",
"format": 1
},
{
- "name": "plugins/action",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/filter/reduce_on_network.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c55954c5d20e0243f2e3333d011c4021ae4294f29e1a7c4cbf369950dee0eab0",
"format": 1
},
{
- "name": "plugins/action/validate.py",
+ "name": "plugins/filter/hwaddr.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ab5ad1fefc1bc3d55eb256922e16a5d411b7463a1ad8b86cea0ab183273a0ebc",
+ "chksum_sha256": "537fa774d0c9e930f0bda854f715998a8128768421e9c416d54df187f236be66",
"format": 1
},
{
- "name": "plugins/action/update_fact.py",
+ "name": "plugins/filter/ipaddr.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "04a2b43f0b049c45a2fd7d409a40fd9c89a86f0f8ffd50a2bc81dad7d44f96b6",
+ "chksum_sha256": "12e73edbd14f49ea629e53c8f17d4261f40f87e2c582f599073c69cbe66d0d27",
"format": 1
},
{
- "name": "plugins/action/fact_diff.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ac3e5d5461a0054e5e95ab0af8db7de102f0c541c69ff67efd18a3a88f319967",
+ "name": "meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/action/cli_parse.py",
+ "name": "meta/runtime.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e06142628ca6ee2539f1e647daa7d65c3dd76fcb0c76ec67565a85c1454e5828",
+ "chksum_sha256": "211f3feb7161242e79e1eb543dff5881ec95b6153bd488b48fe7869239f153de",
"format": 1
},
{
- "name": "test-requirements.txt",
+ "name": ".ansible-lint",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6689ecab772d38bee7669927a1bd3423ff94800130e50cf9b514c58c9a874b70",
+ "chksum_sha256": "b47f72e159f93a5ff07ea2534752e0fa977b214e9ac05c667fa83ac13be4e50c",
"format": 1
},
{
- "name": "tests",
+ "name": ".config",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": ".config/dictionary.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9f02d159a5040696bada5c52a53d96ccccfb6f65d5a7c795f7cb6e188288e8cd",
"format": 1
},
{
- "name": "tests/unit/requirements.txt",
+ "name": ".config/ansible-lint.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fcea5298285c0542897536b02f5c7753645c7fa83abdcac6b0f3e15ec3d27160",
+ "chksum_sha256": "e8e320c3f66ceea4d43d9962ef7b136906a5ce378685067eb2febf36cc0bb34a",
"format": 1
},
{
- "name": "tests/unit/plugins",
- "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/plugin_utils",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "pyproject.toml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1aec538a80e3fbf00bfd922d2dcd4ffbc831018d75faffea7b4c3cd3a4f44730",
"format": 1
},
{
- "name": "tests/unit/plugins/plugin_utils/test_index_of.py",
+ "name": "README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "89419052a50570440fb15a637a2b6ca8c620b9529435e8328b9c1898476b6456",
+ "chksum_sha256": "0c3f32b1ee520bcb76eccc149100ab557dc9c85ee7ac76f653fe5a89fec56e3d",
"format": 1
},
{
- "name": "tests/unit/plugins/sub_plugins",
+ "name": "changelogs",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/plugins/sub_plugins/validate",
+ "name": "changelogs/fragments",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/plugins/sub_plugins/validate/__init__.py",
+ "name": "changelogs/fragments/.keep",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/plugins/sub_plugins/validate/test_config.py",
+ "name": "changelogs/config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7e1806206bbdc7d122851e64a5a8a2962a667e7fb1368891b039ea10d880da80",
+ "chksum_sha256": "570abd82d0ec7ac5220615baee2491d67a7551d8483509a0949ffe0e4dd996c0",
"format": 1
},
{
- "name": "tests/unit/plugins/sub_plugins/cli_parsers",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "changelogs/changelog.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "90a9d15965542693dd12b57db25e965566d7eb7bb215b578303c4468b026fd2d",
"format": 1
},
{
- "name": "tests/unit/plugins/sub_plugins/cli_parsers/test_textfsm_parser.py",
+ "name": ".isort.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d6d72c7155b4455f426a9de4b1f252cad7fa5278a7fffdb84bb4db7bdba1f118",
+ "chksum_sha256": "4ca0097b4a09ffae0f6cad7b280f8f7acf1b6cc0c4bfd28a79ddc81d3b840262",
"format": 1
},
{
- "name": "tests/unit/plugins/sub_plugins/cli_parsers/__init__.py",
+ "name": ".yamllint",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "827ef9e031ecdcaf137be239d33ef93fcbbc3611cbb6b30b0e507d0e03373d0e",
"format": 1
},
{
- "name": "tests/unit/plugins/sub_plugins/cli_parsers/test_xml_parser.py",
+ "name": "test-requirements.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d9d3b46bfd8ecbe84c3243254d3812c876e22ada4a52930ea72d3e9044dd4fb7",
+ "chksum_sha256": "222cbdd413170ef428c54a537e78255a2388333502fb66a108c42432d6732064",
"format": 1
},
{
- "name": "tests/unit/plugins/sub_plugins/cli_parsers/test_ttp_parser.py",
+ "name": ".prettierignore",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "22e97df559e5c6e071c5cc448a26ab2f1a25d2484a2f8724edc694846533e1a4",
+ "chksum_sha256": "5f34b5c1df98658cfd45b86975b7f782b1e3486ea712f3372d6eba685a3a826c",
"format": 1
},
{
- "name": "tests/unit/plugins/sub_plugins/cli_parsers/fixtures",
+ "name": "tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/plugins/sub_plugins/cli_parsers/fixtures/nxos_show_version_invalid.textfsm",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "70efa127c6437e5a9428fb9701dad0e5bdf1425f0ad87c4d18ff3a4042154bc8",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/sub_plugins/cli_parsers/fixtures/nxos_show_version.ttp",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "19b19fa15a9d932cf92cb94ecdca1b5b3c64e7961cef2d6574264930e6dfe466",
+ "name": "tests/integration",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/plugins/sub_plugins/cli_parsers/fixtures/nxos_show_version.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "280b9a49752bd9ebddf26798b7df94115c3f3402877d350e60b3236a33fb3f68",
+ "name": "tests/integration/targets",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"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/integration/targets/utils_keep_keys",
+ "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/targets/utils_keep_keys/vars",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/plugins/sub_plugins/cli_parsers/test_json_parser.py",
+ "name": "tests/integration/targets/utils_keep_keys/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "20013f2a16929892e2e9442d9a44d001b28d0b6f281e2db4c71995443e08ad86",
+ "chksum_sha256": "ef8940b0190398df13528e09eeeb4d70c7033b6dfbd55020d98cb65f87bd49e1",
"format": 1
},
{
- "name": "tests/unit/plugins/lookup",
+ "name": "tests/integration/targets/utils_keep_keys/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/plugins/lookup/test_validate.py",
+ "name": "tests/integration/targets/utils_keep_keys/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3b01bf969b7d6f0a86c322520cae5cddf9b828d43bf664097281ce89871e5323",
+ "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5",
"format": 1
},
{
- "name": "tests/unit/plugins/lookup/__init__.py",
+ "name": "tests/integration/targets/utils_keep_keys/tasks/simple.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "dde35ae44213bd57cf8d06af380a0ec047374e13f4b56a8af11c87da95cbd50e",
"format": 1
},
{
- "name": "tests/unit/plugins/filter",
+ "name": "tests/integration/targets/utils_index_of",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/plugins/filter/test_ipcut.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7e6b03f5937341a36002c2255a16cee62fcb4dcf73ccc1fac596c71f6123a2b9",
+ "name": "tests/integration/targets/utils_index_of/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/plugins/filter/test_from_xml.py",
+ "name": "tests/integration/targets/utils_index_of/tasks/examples_lookup.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1a6c4dbafc48c2c649ac3420cdc8cd02c3ed06f576f01110cbacc89315facbbd",
+ "chksum_sha256": "3606cec6d01105e1e0116a63ffc6cb3293184abafcf1472a8e473d1a16711f9c",
"format": 1
},
{
- "name": "tests/unit/plugins/filter/test_cidr_merge.py",
+ "name": "tests/integration/targets/utils_index_of/tasks/examples_filter.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e00bd19c3244b7fdbfcb8f2c99a000d0a1516732a4f38d001d8bdc9df2cc1a09",
+ "chksum_sha256": "d430649f6347b6327300fa07b06751508823293284efcb2d85cb0121fba493c5",
"format": 1
},
{
- "name": "tests/unit/plugins/filter/test_ipwrap.py",
+ "name": "tests/integration/targets/utils_index_of/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bd17ad7a4601700806fd5cf6697aeec4560518191d11010a7a8bdfe47e72d127",
+ "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5",
"format": 1
},
{
- "name": "tests/unit/plugins/filter/test_reduce_on_network.py",
+ "name": "tests/integration/targets/utils_index_of/tasks/simple.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "933a3b7185a7222f073bd2e509a9fdd3db38dcf6f20ad7037320c9cb419ca822",
+ "chksum_sha256": "1835e807efc8882163e2da83587baf64fa1c73611f649af1feba94b246c08a4a",
"format": 1
},
{
- "name": "tests/unit/plugins/filter/test_ip4_hex.py",
+ "name": "tests/integration/targets/utils_index_of/tasks/argspec.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "996e6a984667369003bf7b465d45ea6f181db074036618e46a4dd59befb020d7",
+ "chksum_sha256": "98d3173c95800792d144508ea1cabdb032d318d1cc77b9f0416a21e6cb732d4a",
"format": 1
},
{
- "name": "tests/unit/plugins/filter/test_ipv6form.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ec8cea7146804cc025a2675da007f5656b6faa917cf2fba4bbe78b64a7d14eb6",
+ "name": "tests/integration/targets/utils_remove_keys",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/plugins/filter/test_ipaddr.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2fa1e8c3f72bc7d15a8050bc7614e881d70aa3819768e743146e33bca5cd0248",
+ "name": "tests/integration/targets/utils_remove_keys/vars",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/plugins/filter/test_keep_keys.py",
+ "name": "tests/integration/targets/utils_remove_keys/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0c6e0bfb0202c7d441430b91e100b3c062ed67a44682fcd95f44c383aea13573",
+ "chksum_sha256": "f64c5b12c89da7b8a953d4ee3d58e5ff102206f34cef5092be9aefa45c93d34b",
"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/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/plugins/filter/test_param_list_compare.py",
+ "name": "tests/integration/targets/utils_remove_keys/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "25490e51429f7ff2fe9c968ec6a0be58f08f4f919f90c5dbd54234ee84264138",
+ "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5",
"format": 1
},
{
- "name": "tests/unit/plugins/filter/test_nthhost.py",
+ "name": "tests/integration/targets/utils_remove_keys/tasks/simple.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3eaa2b499b4ebb32ccc19a0d8cbaed7c36a3d7de187f68445f6bc94a6dcef7c6",
+ "chksum_sha256": "ac949eae4a5560d8ab122ea6a6dc2266bca438562a17071bc2339fe2e775dd09",
"format": 1
},
{
- "name": "tests/unit/plugins/filter/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "name": "tests/integration/targets/utils_ipaddr_filter",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/plugins/filter/test_macaddr.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "fdfe72d282d7427a22cddd1a5d26ae8e75c90cd44b4ab7a93c16764ceca8773c",
+ "name": "tests/integration/targets/utils_ipaddr_filter/vars",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/plugins/filter/test_next_nth_usable.py",
+ "name": "tests/integration/targets/utils_ipaddr_filter/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "26ae6a24d9578db4500e83e81955d42e001a5f1090d1a97d1e1703e1702d902b",
+ "chksum_sha256": "811f88ff83143ba7f25fa66defe9ecf378bb5076162ae102d8ae7478ac253416",
"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/tasks",
+ "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/tasks/previous_nth_usable.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "46819582bc63da415392abb987133ab91340b442c8b1c8767ab88f6d4c4792ff",
+ "chksum_sha256": "dba3b3b6be41729598da9ae343316e666d219e6fcc7c60bec22b163a8a7fc2c0",
"format": 1
},
{
- "name": "tests/unit/plugins/filter/test_fact_diff.py",
+ "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ipmath.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eaecf60002d342f52d53c24e6ea6d7e2589cbd8d8731fe9bd1b120364a54c467",
+ "chksum_sha256": "e4f81b95ab97909d5700ff50ab0c20b93d8f5be9b581a343b880c415243e2e5c",
"format": 1
},
{
- "name": "tests/unit/plugins/filter/test_network_in_network.py",
+ "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ipv6form.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "19df09a5ffdbeb96dc65b094c4c89fb66bf217477097fb5841f57504d0e6f526",
+ "chksum_sha256": "0484829f9afd48bac830f255435c598be0a6dacf9af7ef8244beeebcd9d357ca",
"format": 1
},
{
- "name": "tests/unit/plugins/filter/test_ipsubnet.py",
+ "name": "tests/integration/targets/utils_ipaddr_filter/tasks/network_in_usable.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6889529703c2c7335c210856f722b570e26fbf6a29e0b7a0c7b35ee322030511",
+ "chksum_sha256": "f7a4cc15d93654bfee1af885d8a9d49608219d0aefd42b3207742bcb8e913e3e",
"format": 1
},
{
- "name": "tests/unit/plugins/filter/test_remove_keys.py",
+ "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ipcut.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f878033dbdb5c50fa74f75fe704f84cb58d1fafdb8a9d9ecefc4c3cb2f768bd9",
+ "chksum_sha256": "11eca908bac30ceb6d2296a483d2d9ca137f427f34656b435474e7b9b838e1a4",
"format": 1
},
{
- "name": "tests/unit/plugins/filter/test_consolidate.py",
+ "name": "tests/integration/targets/utils_ipaddr_filter/tasks/cidr_merge.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "24a71575f578c675386bce107af762d580000db6da44dbb2fe038c29e9dfb4f8",
+ "chksum_sha256": "7424055f53f023017fb31c9f657d4852ab6105645f23f70ecb9ef8d2b8e24594",
"format": 1
},
{
- "name": "tests/unit/plugins/filter/test_ipv4.py",
+ "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ipv4.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "497f2b8723716dd2f88c437ad61e77393fc2d1f1560bd86f323ef8376886a1e4",
+ "chksum_sha256": "a8383abffdac0845a506803744ff43aafb6a69c2b748835ea3a5c9e07d73f969",
"format": 1
},
{
- "name": "tests/unit/plugins/filter/test_hwaddr.py",
+ "name": "tests/integration/targets/utils_ipaddr_filter/tasks/macaddr.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "87d0757f9fb9bbecece142e75b59f4a7fd4233e36d6787ed84ffac674ef3ae92",
+ "chksum_sha256": "0d9c2c75fdd7dba56d6dad2678ea8189dd3f72fba079b9c64f7327de94a8464d",
"format": 1
},
{
- "name": "tests/unit/plugins/filter/test_ipmath.py",
+ "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ipwrap.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3a624adc9eb72d71666661250763038fcedd57f7e0b8912c365b304506ab878c",
+ "chksum_sha256": "b340a4d9688caa6c62d57c83a61350ef476be72e956ddc2652be11f83bda9d82",
"format": 1
},
{
- "name": "tests/unit/plugins/filter/test_to_xml.py",
+ "name": "tests/integration/targets/utils_ipaddr_filter/tasks/hwaddr.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "da7dcc11c5b563d09c952cdfdd4ec9965ae72e514535f6c67f23515ef4e7157f",
+ "chksum_sha256": "d79ea40b43a1d173c26b0cbf3e86028476fc2ac535984110e9650fdb0cd5de85",
"format": 1
},
{
- "name": "tests/unit/plugins/filter/test_slaac.py",
+ "name": "tests/integration/targets/utils_ipaddr_filter/tasks/reduce_on_network.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7611332ebc70b87122384832aa726f22b3554c566ad166719e93a6dd66ab9ff4",
+ "chksum_sha256": "ce3a3f10c18b53a0e0530002482b206fe94f919afd70c47e553869adf08341f2",
"format": 1
},
{
- "name": "tests/unit/plugins/filter/test_network_in_usable.py",
+ "name": "tests/integration/targets/utils_ipaddr_filter/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "84a52a604ccea96bea1328554808af2630c53674fc940f3dd82afb8fc66b4a2a",
+ "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5",
"format": 1
},
{
- "name": "tests/unit/plugins/filter/test_ipv6.py",
+ "name": "tests/integration/targets/utils_ipaddr_filter/tasks/nthhost.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f9814233600ff2a2fb09202c51c4b0baa58f72caa0572328fa22ab089eb19406",
+ "chksum_sha256": "55b128379a8a764e2d12fb2d8ed54186572eecd15fce2ec9ca80391fdc56cea0",
"format": 1
},
{
- "name": "tests/unit/plugins/filter/test_replace_keys.py",
+ "name": "tests/integration/targets/utils_ipaddr_filter/tasks/next_nth_usable.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e4e037ed6fe34c11344f13a47c2ef1b9d489ea4318ea5f3ca8920e0b1ca838a8",
+ "chksum_sha256": "6d78051f7821f65a7ec231f6bf4d668fb5547aaf71598fbd5442c36044ca3d25",
"format": 1
},
{
- "name": "tests/unit/plugins/test",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/utils_ipaddr_filter/tasks/network_in_network.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e0b9961802edf76f585891f5b1128149be2c48718a337d7a26c3c15dbf0903e5",
"format": 1
},
{
- "name": "tests/unit/plugins/test/test_in_one_network.py",
+ "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ipaddr.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eb289246618116f2e2d09bb6d43899449262a3ca9eb53701dad906de6c77ad5f",
+ "chksum_sha256": "6b8a511909c70c8f1b2f1e8c7a1a2f5d278d299f6b66ac14bce90c77446ddd9e",
"format": 1
},
{
- "name": "tests/unit/plugins/test/test_unspecified.py",
+ "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ipv6.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e2120f97272e0256c656fe3a135b0410147a3997cc262abc4750b5eb214689ab",
+ "chksum_sha256": "e9f05b478b7cad442c6fdc31f6abe887e32a8c205b0acc24c49712d87fccc18c",
"format": 1
},
{
- "name": "tests/unit/plugins/test/test_mac.py",
+ "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ipsubnet.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5715bdb66e8e61366661f9d308f83aee53dc299184e8665e0519d99849dc94f5",
+ "chksum_sha256": "d3cfcf47ee32f59441573a19ab73383b433cbbc0788a9b8ffc0bb925cdffdf64",
"format": 1
},
{
- "name": "tests/unit/plugins/test/test_in_network.py",
+ "name": "tests/integration/targets/utils_ipaddr_filter/tasks/slaac.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c5dd5bdb61188b34b0fd0134aa20e9f94b11f8e188b82a95ef8aeca2a2879893",
+ "chksum_sha256": "104c76112b82ebbff3f9a8edc5d6e4f7403b813fc1ffdc1bed83fc6c1630bc0e",
"format": 1
},
{
- "name": "tests/unit/plugins/test/test_subnet_of.py",
+ "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ip4_hex.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "06895d47f5b0f5bf5fa24ce99534957be882e7a76f9df245ab8d328cd2a7dbba",
+ "chksum_sha256": "245f6e53dd8b2f6bcdde2ee8d7d2037de96e3438c8702475a2907423e3a036b3",
"format": 1
},
{
- "name": "tests/unit/plugins/test/test_ipv4_address.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2c881b8a384621755b114f8356b9142b46bec64fa90fc984831882c7dc4b7377",
+ "name": "tests/integration/targets/utils_usable_range",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"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/vars",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/plugins/test/test_supernet_of.py",
+ "name": "tests/integration/targets/utils_usable_range/vars/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "689e4f486489731d298a2dddccd2eaaa4b9a0c66059fcf6dfeca5b92fdde7a40",
+ "chksum_sha256": "cb30024867cbb7d7176c4459c7c6f1c798967e788af4b537789305cbf9659ba1",
"format": 1
},
{
- "name": "tests/unit/plugins/test/test_ipv4_netmask.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0a921af90905cd241e787292fa8338ba710510f6e2a5e7a4e4f641e5a72e116d",
+ "name": "tests/integration/targets/utils_usable_range/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/plugins/test/test_validate.py",
+ "name": "tests/integration/targets/utils_usable_range/tasks/argspec.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0da10d0aec55c3d00f67d193d73a7f53f9fcdf5c28a36c89edf30a31a698f835",
+ "chksum_sha256": "e7f5735cd4b1509e1d0b98d4857ede083995365ba6b5bf07639ac516e36e8c04",
"format": 1
},
{
- "name": "tests/unit/plugins/test/test_ipv6_ipv4_mapped.py",
+ "name": "tests/integration/targets/utils_usable_range/tasks/example_filter.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0cf6377c7e6fdab24f9ff780fead00cacd2c64cf33a2640254f225ba31380b41",
+ "chksum_sha256": "19a626c2c0fbe4235775b9bf9ae7b13e0c332faf940f6d733512b6f5ed3cb523",
"format": 1
},
{
- "name": "tests/unit/plugins/test/test_ipv4_hostmask.py",
+ "name": "tests/integration/targets/utils_usable_range/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6171d28f9a84a707665c1c195bed9468620be868cc15ed2cba4a8e41e7ff40c6",
+ "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5",
"format": 1
},
{
- "name": "tests/unit/plugins/test/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "name": "tests/integration/targets/utils_cli_parse",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"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/files",
+ "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/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",
+ "chksum_sha256": "e9d872c87bec35f958131f5a57469184dcb8364000a3fd2c764e698b0f7e7148",
"format": 1
},
{
- "name": "tests/integration/targets/utils_remove_keys",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/utils_validate/files/data/fail.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5bc357ee82697a6f8a4920451a0fdfc81f9f6af9522a134d26112abd20b41562",
"format": 1
},
{
- "name": "tests/integration/targets/utils_remove_keys/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/utils_validate/files/data/test_list_data.json",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "acc07b62f23f458923737c4cd4a66bd05d1e71eb4f384003baaf2dcc760d6349",
"format": 1
},
{
- "name": "tests/integration/targets/utils_remove_keys/tasks/main.yaml",
+ "name": "tests/integration/targets/utils_validate/files/data/test_format_checker.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5",
+ "chksum_sha256": "5d4327ea944ff2f274a6f4161c9c6f69782202d1455f383a973819e4fbb85f80",
"format": 1
},
{
- "name": "tests/integration/targets/utils_remove_keys/tasks/simple.yaml",
+ "name": "tests/integration/targets/utils_validate/files/data/warn.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ac949eae4a5560d8ab122ea6a6dc2266bca438562a17071bc2339fe2e775dd09",
+ "chksum_sha256": "9a5abf45b025490534361d18b5fd3e8c4ec56c52817d72a9d44c01d33e315d7c",
"format": 1
},
{
- "name": "tests/integration/targets/utils_remove_keys/vars",
+ "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_validate/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/utils_remove_keys/vars/main.yaml",
+ "name": "tests/integration/targets/utils_validate/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f64c5b12c89da7b8a953d4ee3d58e5ff102206f34cef5092be9aefa45c93d34b",
+ "chksum_sha256": "a0a2c468f24a66b8cea391acc05802e57275f212e1d4a467516bafd440f7765e",
"format": 1
},
{
- "name": "tests/integration/targets/utils_from_xml",
+ "name": "tests/integration/targets/utils_validate/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/utils_from_xml/tasks",
+ "name": "tests/integration/targets/utils_validate/tests/jsonschema",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/utils_from_xml/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_from_xml/tasks/simple.yaml",
+ "name": "tests/integration/targets/utils_validate/tests/jsonschema/filter.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8cc0c47302d38b9929e0d184b11cc10cf0359d1fc4a732039a4fb6b7ea111efd",
+ "chksum_sha256": "76f0a20334ee425bf11eaaa8a6d1eac22190389887c60f9c25453c960545adaf",
"format": 1
},
{
- "name": "tests/integration/targets/utils_consolidate",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/utils_validate/tests/jsonschema/module.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d1a87d40a955e4045360cb5b5537d4f3b46d925f03a91e00082ef0fba4a85333",
"format": 1
},
{
- "name": "tests/integration/targets/utils_consolidate/tasks",
+ "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_validate/tests/config",
"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/config/lookup.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5",
+ "chksum_sha256": "ba6482b4ff88840a1520a4a4a4f8ba25052b3fbc6b5e21a8e70abe93688e2728",
"format": 1
},
{
- "name": "tests/integration/targets/utils_consolidate/tasks/simple.yaml",
+ "name": "tests/integration/targets/utils_validate/tests/config/filter.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7105aaee542a860d153d0269d8dcfc07d3630986f2898f2f0c6a8a848df6467d",
+ "chksum_sha256": "ba908086e5fbc87673dac750de6dd341ddb7da9d9250571b759abd24a83fe35a",
"format": 1
},
{
- "name": "tests/integration/targets/utils_consolidate/vars",
+ "name": "tests/integration/targets/utils_validate/tests/config/module.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3899feac6b3f90205fed11d72cd13781de4d66f82dcffa497dd18d001d198298",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/utils_validate/tests/config/test.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "60c4bdf55c5ad5f5adeccc04df75d979f1b9739d6706bdf1e022d05e7e726a97",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/utils_validate/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/utils_consolidate/vars/main.yaml",
+ "name": "tests/integration/targets/utils_validate/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2b9863b06cb4ff53639a027557da3cd5ac6b6b08855a181fa95bbccea94a4568",
+ "chksum_sha256": "56fa753c51c136c218723eba14767e0da3fa34f0745a9d138791a29df3c91565",
"format": 1
},
{
- "name": "tests/integration/targets/utils_ipaddr_filter",
+ "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",
+ "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/ipv4.yaml",
+ "name": "tests/integration/targets/utils_param_list_compare/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a8383abffdac0845a506803744ff43aafb6a69c2b748835ea3a5c9e07d73f969",
+ "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5",
"format": 1
},
{
- "name": "tests/integration/targets/utils_ipaddr_filter/tasks/main.yaml",
+ "name": "tests/integration/targets/utils_param_list_compare/tasks/simple.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5",
+ "chksum_sha256": "e507d9cb6b6a4a4e93e9c7cacacaadeab166f8aae0d1b4372526cc9fc4148829",
"format": 1
},
{
- "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ipsubnet.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d3cfcf47ee32f59441573a19ab73383b433cbbc0788a9b8ffc0bb925cdffdf64",
+ "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/network_in_usable.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f7a4cc15d93654bfee1af885d8a9d49608219d0aefd42b3207742bcb8e913e3e",
+ "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/ipaddr.yaml",
+ "name": "tests/integration/targets/utils_get_path/tasks/examples_lookup.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e6275325481abe442067c2681cda3caf7e20efeb31ba8a0cf7e50d62af0e6c4a",
+ "chksum_sha256": "5633047145361740d866a7078aa2fab73b996ebd94533d1915a4aa287460e3ff",
"format": 1
},
{
- "name": "tests/integration/targets/utils_ipaddr_filter/tasks/hwaddr.yaml",
+ "name": "tests/integration/targets/utils_get_path/tasks/examples_filter.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d79ea40b43a1d173c26b0cbf3e86028476fc2ac535984110e9650fdb0cd5de85",
+ "chksum_sha256": "f68eb7831768f881ad74e6cabc72c2b831369028c100f5281d51a1a00665edfb",
"format": 1
},
{
- "name": "tests/integration/targets/utils_ipaddr_filter/tasks/cidr_merge.yaml",
+ "name": "tests/integration/targets/utils_get_path/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7424055f53f023017fb31c9f657d4852ab6105645f23f70ecb9ef8d2b8e24594",
+ "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5",
"format": 1
},
{
- "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ip4_hex.yaml",
+ "name": "tests/integration/targets/utils_get_path/tasks/simple.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "245f6e53dd8b2f6bcdde2ee8d7d2037de96e3438c8702475a2907423e3a036b3",
+ "chksum_sha256": "04026349ef6f6ef67b4240091acbda13f9f1e4bee2e2d5c0eb78e43e69d0ff63",
"format": 1
},
{
- "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ipwrap.yaml",
+ "name": "tests/integration/targets/utils_get_path/tasks/argspec.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b340a4d9688caa6c62d57c83a61350ef476be72e956ddc2652be11f83bda9d82",
+ "chksum_sha256": "11e998ff750cd816aac9742136193a407fed74fa25be42114a9b00fbf7ef4122",
"format": 1
},
{
- "name": "tests/integration/targets/utils_ipaddr_filter/tasks/macaddr.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0d9c2c75fdd7dba56d6dad2678ea8189dd3f72fba079b9c64f7327de94a8464d",
+ "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/network_in_network.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e0b9961802edf76f585891f5b1128149be2c48718a337d7a26c3c15dbf0903e5",
+ "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/slaac.yaml",
+ "name": "tests/integration/targets/utils_to_xml/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "104c76112b82ebbff3f9a8edc5d6e4f7403b813fc1ffdc1bed83fc6c1630bc0e",
+ "chksum_sha256": "b8405fb4146ef4dbfa941874b93d3c87e02310ddaabf8407f2691da3855f1093",
"format": 1
},
{
- "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ipmath.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e4f81b95ab97909d5700ff50ab0c20b93d8f5be9b581a343b880c415243e2e5c",
+ "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/tasks/reduce_on_network.yaml",
+ "name": "tests/integration/targets/utils_to_xml/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ce3a3f10c18b53a0e0530002482b206fe94f919afd70c47e553869adf08341f2",
+ "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5",
"format": 1
},
{
- "name": "tests/integration/targets/utils_ipaddr_filter/tasks/next_nth_usable.yaml",
+ "name": "tests/integration/targets/utils_to_xml/tasks/simple.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6d78051f7821f65a7ec231f6bf4d668fb5547aaf71598fbd5442c36044ca3d25",
+ "chksum_sha256": "7228288965760ffa35f3630bf7ebfc7a6b1709d5d97550e2a2da863b35648551",
"format": 1
},
{
- "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ipv6.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e9f05b478b7cad442c6fdc31f6abe887e32a8c205b0acc24c49712d87fccc18c",
+ "name": "tests/integration/targets/utils_consolidate",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ipv6form.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0484829f9afd48bac830f255435c598be0a6dacf9af7ef8244beeebcd9d357ca",
+ "name": "tests/integration/targets/utils_consolidate/vars",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/utils_ipaddr_filter/tasks/nthhost.yaml",
+ "name": "tests/integration/targets/utils_consolidate/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "55b128379a8a764e2d12fb2d8ed54186572eecd15fce2ec9ca80391fdc56cea0",
+ "chksum_sha256": "2b9863b06cb4ff53639a027557da3cd5ac6b6b08855a181fa95bbccea94a4568",
"format": 1
},
{
- "name": "tests/integration/targets/utils_ipaddr_filter/tasks/previous_nth_usable.yaml",
+ "name": "tests/integration/targets/utils_consolidate/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/utils_consolidate/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dba3b3b6be41729598da9ae343316e666d219e6fcc7c60bec22b163a8a7fc2c0",
+ "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5",
"format": 1
},
{
- "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ipcut.yaml",
+ "name": "tests/integration/targets/utils_consolidate/tasks/simple.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "11eca908bac30ceb6d2296a483d2d9ca137f427f34656b435474e7b9b838e1a4",
+ "chksum_sha256": "7105aaee542a860d153d0269d8dcfc07d3630986f2898f2f0c6a8a848df6467d",
"format": 1
},
{
- "name": "tests/integration/targets/utils_ipaddr_filter/vars",
+ "name": "tests/integration/targets/utils_update_fact",
"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_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": "67cd31f077c2e69839d170418f43f920c0c068508c4f6dd9d98f1b322c1bfedf",
+ "chksum_sha256": "8ebea41c6f8a93be2240cd0c45732a3d596cf571cb64547dc113217da56b575b",
"format": 1
},
{
- "name": "tests/integration/targets/utils_to_paths",
+ "name": "tests/integration/targets/utils_netaddr_test",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/utils_to_paths/tasks",
+ "name": "tests/integration/targets/utils_netaddr_test/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_netaddr_test/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b51d0464be1d5eebb303d003c62a7d549fa97d28b926a2c2d5f105bd888413e4",
+ "chksum_sha256": "c00756f4c7d02ea4d04b4237141685543b0c673a354774e61b2acb48f45837bd",
"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_netaddr_test/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_netaddr_test/tasks/subnet_of.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e7effabb7c07aeb379aceac6e0bc1dc79b3866a75af1780184cff1a716fa4a52",
+ "chksum_sha256": "83ff3bf515253a8a340e7690c88f580f56ec1e8397a1e67d4a34cd7f29ad6ef6",
"format": 1
},
{
- "name": "tests/integration/targets/utils_to_paths/tasks/main.yaml",
+ "name": "tests/integration/targets/utils_netaddr_test/tasks/ipv6_teredo.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5",
+ "chksum_sha256": "c1ff255343b3b1d352575ac914f4268ebca0dbbdb780f6827f75382ef4df536a",
"format": 1
},
{
- "name": "tests/integration/targets/utils_to_paths/tasks/empty_members.yaml",
+ "name": "tests/integration/targets/utils_netaddr_test/tasks/multicast.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2fe1cff51babbc914c2fb685bdbbb4a3930ca6914bf9a2b814804f088702cc6a",
+ "chksum_sha256": "d8e39c219e278db46e2486ad411fe474860431184fb5e432fe36e226e26d508c",
"format": 1
},
{
- "name": "tests/integration/targets/utils_to_paths/tasks/simple.yaml",
+ "name": "tests/integration/targets/utils_netaddr_test/tasks/ipv4_address.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aa868cb38568c82458b11d5cfc3af8b45caeea0a87f66cdedd57de808acd8eb1",
- "format": 1
- },
- {
- "name": "tests/integration/targets/utils_cli_parse",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/utils_cli_parse/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "615dbbb31b07b9482dc6ae37305ab4d5b5c019a59bc10361ac40218d5de79203",
"format": 1
},
{
- "name": "tests/integration/targets/utils_cli_parse/tasks/ubuntu_ttp.yaml",
+ "name": "tests/integration/targets/utils_netaddr_test/tasks/ip.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "86028821b368a285f488ff0fed9f417682e8e979810221189d781c6e09554fca",
+ "chksum_sha256": "93fe8c749063d99f6ee84648c75b90b12453f8144d0a26c145472a2f805ef5dd",
"format": 1
},
{
- "name": "tests/integration/targets/utils_cli_parse/tasks/centos_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/fedora_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/argspec.yaml",
+ "name": "tests/integration/targets/utils_netaddr_test/tasks/supernet_of.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "77982a1f454b2b6a7243fc01f68e48e1a8309baa510db00dc3f6bd3e0a0b4bdd",
+ "chksum_sha256": "c43c74df672831d7ec50692236de868518702232a9f18655e666cd317182773e",
"format": 1
},
{
- "name": "tests/integration/targets/utils_cli_parse/tasks/nxos_xml.yaml",
+ "name": "tests/integration/targets/utils_netaddr_test/tasks/public.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2da27258e5c5b2f59e994347df9c2024c1578366a598bdb9f92b7b6525375fde",
+ "chksum_sha256": "0e004a3450bd9e12583d55af195a3b07307cf91dba57ee7a43ba8717c3e3ff4b",
"format": 1
},
{
- "name": "tests/integration/targets/utils_cli_parse/tasks/main.yaml",
+ "name": "tests/integration/targets/utils_netaddr_test/tasks/ipv6_sixtofour.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9254cb4133f860ba7fe60ffa731c6c6c1af94d85f9a94b464523e85d0523b6f5",
+ "chksum_sha256": "0b1534121ecea3709d0fb5b8dd1506c57bc6a6dae5097cd7c90bd52bb9f6d16a",
"format": 1
},
{
- "name": "tests/integration/targets/utils_cli_parse/tasks/nxos_ttp.yaml",
+ "name": "tests/integration/targets/utils_netaddr_test/tasks/ipv6_address.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ab03e39f60d54339a10c8477ad323223de6508a729ab0d3635f234d15dcb2ec5",
+ "chksum_sha256": "b288eb0fa02b285827f29fe3cfc07240e41728bdb5cf774d95e47fdb3a1724da",
"format": 1
},
{
- "name": "tests/integration/targets/utils_cli_parse/tasks/fedora_textfsm.yaml",
+ "name": "tests/integration/targets/utils_netaddr_test/tasks/unspecified.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dca8446bfde97c3bcfae26d7d157d9600f9c3ca5f84f970b5d2e4aecb38cdfaf",
+ "chksum_sha256": "56dbed00bd55bbf9d35fa877fc0c09f3dc68dec8e0a59303911001ed781c589d",
"format": 1
},
{
- "name": "tests/integration/targets/utils_cli_parse/tasks/centos_ttp.yaml",
+ "name": "tests/integration/targets/utils_netaddr_test/tasks/reserved.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "86028821b368a285f488ff0fed9f417682e8e979810221189d781c6e09554fca",
+ "chksum_sha256": "ffe3ff53d0356e042999d9b0a78e95d27d1fa5d8d0912163eb593f5b5594ecb9",
"format": 1
},
{
- "name": "tests/integration/targets/utils_cli_parse/tasks/ubuntu_textfsm.yaml",
+ "name": "tests/integration/targets/utils_netaddr_test/tasks/ipv6.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dca8446bfde97c3bcfae26d7d157d9600f9c3ca5f84f970b5d2e4aecb38cdfaf",
+ "chksum_sha256": "17f7a28a9a7796ee29e99b080af194ba1923736bdc1e17cb6afb4bbfae1e3820",
"format": 1
},
{
- "name": "tests/integration/targets/utils_cli_parse/tasks/nxos_textfsm.yaml",
+ "name": "tests/integration/targets/utils_netaddr_test/tasks/ipv4.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3136ee047a0c7a86abe2d8b1bfaf6f71108b34836ac3a0784872ead1c4530e79",
+ "chksum_sha256": "afdc9774b465291d36a84a253f6b74b3be52e6534df4c09aed5edfe1702a38a4",
"format": 1
},
{
- "name": "tests/integration/targets/utils_cli_parse/tasks/nxos_json.yaml",
+ "name": "tests/integration/targets/utils_netaddr_test/tasks/ipv6_ipv4_mapped.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "732de9a24704cdad80002b5e469b7b82148ec777bceea0e093aba10548fc0638",
+ "chksum_sha256": "3bf41c07dfa38283acd03c2d9c837611736dba49158652a919afaeb6f3fafcfa",
"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/ip_address.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "21061cd07a8a22833eb928c528ec030c11cd183896a31074bdc83fd1e898a637",
"format": 1
},
{
- "name": "tests/integration/targets/utils_cli_parse/output/nxos_show_interface_json_text.txt",
+ "name": "tests/integration/targets/utils_netaddr_test/tasks/private.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6c28e733dc3473f0dd9a1cbe5c29b0f1be25906ddb0ecd9eb3c9cd5ec9cd4f83",
+ "chksum_sha256": "9a0e6c4c080e3a1e916dbd47a051553d38b485e778d55c20ca85498c4e482376",
"format": 1
},
{
- "name": "tests/integration/targets/utils_cli_parse/output/nxos_show_interface_xml_parsed.json",
+ "name": "tests/integration/targets/utils_netaddr_test/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "278afc0fc6a54b10bec893de1cce2a912fe55ea37993627c9b869451ccfa8523",
+ "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5",
"format": 1
},
{
- "name": "tests/integration/targets/utils_cli_parse/output/nxos_show_version_textfsm_parsed.json",
+ "name": "tests/integration/targets/utils_netaddr_test/tasks/in_one_network.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f397b4e90691b66a63829f2fa42874b5bea7e6558f712ce37582238e789746f7",
+ "chksum_sha256": "14eed91cb6c11783729c61e43077f02a8143a472f7c711d8ec32bb845ea0aa47",
"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_netmask.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1470ac4a29d08f6ef1dbf1ec6bc90fcd5cfaf200e8ad1dfee8389478ba522be7",
+ "chksum_sha256": "edbf017def035b5ca082756de8a91fcf4bfbcc4fc3414aa5fc60bd131a98129d",
"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/mac.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4ada1fd18ed85280d8f5bad674d7f5dfecec48ff379a8e707dbf7bbd8ab82111",
"format": 1
},
{
- "name": "tests/integration/targets/utils_cli_parse/files/nxos_show_interface.txt",
+ "name": "tests/integration/targets/utils_netaddr_test/tasks/ipv4_hostmask.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "85baa8eed232e6d7dd7a470efb6b4f3efce552c847d1f73c80c651d1441000e5",
+ "chksum_sha256": "97dbcf159a748ca1f99c839d55af01455cf68e005ca30008cd48215d097eb461",
"format": 1
},
{
- "name": "tests/integration/targets/utils_cli_parse/files/nxos_show_interface.xml",
+ "name": "tests/integration/targets/utils_netaddr_test/tasks/resolvable.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "363ab311f6ce9d7598f3ec3ce5546b33d634a8f079cd739ec478adc2a08fc9db",
+ "chksum_sha256": "66ec974d89255561d81d2a6a62ace155dd6cc4f028b8fd7f1e77ec3dc270fd27",
"format": 1
},
{
- "name": "tests/integration/targets/utils_cli_parse/files/nxos_show_version.txt",
+ "name": "tests/integration/targets/utils_netaddr_test/tasks/in_network.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7f264359b5e09e5093a59c73d9f844f55427b67177f0727ff3223f509d4fda83",
+ "chksum_sha256": "179f6a091bc6a3b788e4ab31205bc1de8762f31d5cd134f8910748e8f3f77d17",
"format": 1
},
{
- "name": "tests/integration/targets/utils_cli_parse/templates",
+ "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/centos_ifconfig.textfsm",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c1f10f192897c123e3e7fd0823384db59036d0c36b178bad57229e204688c2ba",
- "format": 1
- },
- {
- "name": "tests/integration/targets/utils_cli_parse/templates/nxos_show_interface.ttp",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7b54c727fb9ab5731dbef7b5c271a41276278b15b7408bd24e25eda28e5c1a09",
- "format": 1
- },
- {
- "name": "tests/integration/targets/utils_cli_parse/templates/centos_df_-h.ttp",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "83912bee5ca45c074370bf195532ee3172a4b2e687055d5639e933d5522c33d2",
+ "name": "tests/integration/targets/utils_to_paths/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/utils_cli_parse/templates/ubuntu_ifconfig.textfsm",
+ "name": "tests/integration/targets/utils_to_paths/tasks/examples_lookup.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c1f10f192897c123e3e7fd0823384db59036d0c36b178bad57229e204688c2ba",
+ "chksum_sha256": "e7effabb7c07aeb379aceac6e0bc1dc79b3866a75af1780184cff1a716fa4a52",
"format": 1
},
{
- "name": "tests/integration/targets/utils_cli_parse/templates/fedora_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/nxos_show_version.textfsm",
+ "name": "tests/integration/targets/utils_to_paths/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dfd59adde11de6285a62179e45db7b4e20e9ca61f276f6567c86c8455f796887",
+ "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5",
"format": 1
},
{
- "name": "tests/integration/targets/utils_cli_parse/templates/nxos_show_interface.yaml",
+ "name": "tests/integration/targets/utils_to_paths/tasks/simple.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bcebc3ef1d3e94fd156e655704999ee16837a1c95b90c6d8bbd567e47e4ce272",
+ "chksum_sha256": "aa868cb38568c82458b11d5cfc3af8b45caeea0a87f66cdedd57de808acd8eb1",
"format": 1
},
{
- "name": "tests/integration/targets/utils_cli_parse/templates/ubuntu_df_-h.ttp",
+ "name": "tests/integration/targets/utils_to_paths/tasks/argspec.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "83912bee5ca45c074370bf195532ee3172a4b2e687055d5639e933d5522c33d2",
+ "chksum_sha256": "e49e34f5831d822317ba67cd1c78a0bc7d3c7790fb8458ee17debda2c9b56cfa",
"format": 1
},
{
- "name": "tests/integration/targets/utils_cli_parse/templates/fedora_ifconfig.textfsm",
+ "name": "tests/integration/targets/utils_to_paths/tasks/empty_members.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c1f10f192897c123e3e7fd0823384db59036d0c36b178bad57229e204688c2ba",
+ "chksum_sha256": "2fe1cff51babbc914c2fb685bdbbb4a3930ca6914bf9a2b814804f088702cc6a",
"format": 1
},
{
- "name": "tests/integration/targets/utils_param_list_compare",
+ "name": "tests/integration/targets/utils_replace_keys",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/utils_param_list_compare/tasks",
+ "name": "tests/integration/targets/utils_replace_keys/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/utils_param_list_compare/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5",
- "format": 1
- },
- {
- "name": "tests/integration/targets/utils_param_list_compare/tasks/simple.yaml",
+ "name": "tests/integration/targets/utils_replace_keys/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e507d9cb6b6a4a4e93e9c7cacacaadeab166f8aae0d1b4372526cc9fc4148829",
- "format": 1
- },
- {
- "name": "tests/integration/targets/utils_get_path",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "7bd28edb6a57c74d136d92d4faa678d480d17c8db0239fa294da1ab69cb1437c",
"format": 1
},
{
- "name": "tests/integration/targets/utils_get_path/tasks",
+ "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",
+ "chksum_sha256": "a4cdde648197c46f6f387a94cde4376538f0de3f8a731c322f39534bd402ff47",
"format": 1
},
{
- "name": "tests/integration/targets/utils_validate/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "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",
+ "name": "tests/unit/plugins/sub_plugins/validate/test_config.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7e1806206bbdc7d122851e64a5a8a2962a667e7fb1368891b039ea10d880da80",
+ "format": 1
+ },
+ {
+ "name": "tests/unit/plugins/sub_plugins/validate/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "tests/unit/plugins/filter",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/utils_validate/files/criteria/in_rate_check.json",
+ "name": "tests/unit/plugins/filter/test_nthhost.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eaf0cb45846bc2ebd25ecfbe85308fd7e3358e4900da1ce0d4c9418b42ab7aa7",
+ "chksum_sha256": "d64e623888afa66c5ad67ecaae097f23291dcac857b5319b25d0e74acb5b0db8",
"format": 1
},
{
- "name": "tests/integration/targets/utils_validate/files/criteria/enabled_check.json",
+ "name": "tests/unit/plugins/filter/test_ipv6form.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d37e8293e59f15873c54a47542cb0a9190b0f2f615126f276c6177816bb608ed",
+ "chksum_sha256": "f0f438cfffcfc7d5bd5a9f1808c44de11334da483c6da0e5feeba393029b04b9",
"format": 1
},
{
- "name": "tests/integration/targets/utils_validate/files/criteria/check_list_data.json",
+ "name": "tests/unit/plugins/filter/test_fact_diff.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "80ed8bbc4b06991acb84b2b8c61bf8a45cfc0091c2b9b4b443f02fd030de16e8",
+ "chksum_sha256": "d22bfd2bdcaf646b644a484e6e7baac2787c9d7e5b2bea2a9fdfec4d9640c80b",
"format": 1
},
{
- "name": "tests/integration/targets/utils_validate/files/criteria/rules.yaml",
+ "name": "tests/unit/plugins/filter/test_network_in_network.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fff82706f9f040c45e3e8d927968dfb5297e7c99904c4aa5b34f6ad9262619b7",
+ "chksum_sha256": "afc6be94632b0a25f3adca23a4922bfe2c9c936c155da4d94cab3180c28b9863",
"format": 1
},
{
- "name": "tests/integration/targets/utils_validate/files/criteria/format_checker.json",
+ "name": "tests/unit/plugins/filter/test_ipaddr.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "734eab506a730d90e57069d5e1177135ffeb0ac68db61942576e49144b8a5094",
+ "chksum_sha256": "98d3bae45dce4a2f91c901fbd2d0cf5875e612dd7daf5fdcf8b27be9ed77683c",
"format": 1
},
{
- "name": "tests/integration/targets/utils_validate/files/criteria/crc_error_check.json",
+ "name": "tests/unit/plugins/filter/test_ipwrap.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a1ec6bca6330a50b33920472d576acf1d62287a8aadbcf9ee63aed6673a2d784",
+ "chksum_sha256": "d18ae8e036438873bcaec3bd7fe6137c9d0929d2481ed2899b40ad6a7f901e85",
"format": 1
},
{
- "name": "tests/integration/targets/utils_validate/files/criteria/oper_status_up.json",
+ "name": "tests/unit/plugins/filter/test_hwaddr.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2c1159ec568a023a818953cb77c8e1618af99a8ec217d6a3ac108d972b78790d",
+ "chksum_sha256": "2620d2aa47ec69704b63dcd186539279121f551d043776e2b81909beb0a3ebad",
"format": 1
},
{
- "name": "tests/integration/targets/utils_validate/files/data",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/plugins/filter/test_usable_range.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c7d295c3000fb8f4e4a6dd23fd945cbcf52e7d68928a20cbf89f6659a596e2a4",
"format": 1
},
{
- "name": "tests/integration/targets/utils_validate/files/data/show_interface.json",
+ "name": "tests/unit/plugins/filter/test_ipcut.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e9d872c87bec35f958131f5a57469184dcb8364000a3fd2c764e698b0f7e7148",
+ "chksum_sha256": "e5fdf693cb5159fede04b5094c9268902ba69ceea73ef35c85a6f81824d34052",
"format": 1
},
{
- "name": "tests/integration/targets/utils_validate/files/data/test_list_data.json",
+ "name": "tests/unit/plugins/filter/test_reduce_on_network.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "acc07b62f23f458923737c4cd4a66bd05d1e71eb4f384003baaf2dcc760d6349",
+ "chksum_sha256": "8ccf14584cf204bf359bb0711b40e099945f3a5717c4a149944ef4c4be48d345",
"format": 1
},
{
- "name": "tests/integration/targets/utils_validate/files/data/test_format_checker.json",
+ "name": "tests/unit/plugins/filter/test_param_list_compare.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5d4327ea944ff2f274a6f4161c9c6f69782202d1455f383a973819e4fbb85f80",
+ "chksum_sha256": "c65d22b9614e811d8eba570fca6c6194c59bf47b3b975f4853c48113a8ff7a6d",
"format": 1
},
{
- "name": "tests/integration/targets/utils_validate/files/data/fail.cfg",
+ "name": "tests/unit/plugins/filter/test_keep_keys.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5bc357ee82697a6f8a4920451a0fdfc81f9f6af9522a134d26112abd20b41562",
+ "chksum_sha256": "2b91b9860329439b4355c5f2cb1e89835ca61ea948d260baed93f57858185c32",
"format": 1
},
{
- "name": "tests/integration/targets/utils_validate/files/data/warn.cfg",
+ "name": "tests/unit/plugins/filter/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9a5abf45b025490534361d18b5fd3e8c4ec56c52817d72a9d44c01d33e315d7c",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/utils_validate/files/data/pass.cfg",
+ "name": "tests/unit/plugins/filter/test_to_xml.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1c97ae3826430fb1d113b8ed534f4609057b61cf2864a79eb1d603cf02281d25",
+ "chksum_sha256": "4e7ecded556df9d2432aa490781c7d2fc1907b5fe6621a1b3f6e8aca988b4cd3",
"format": 1
},
{
- "name": "tests/integration/targets/utils_validate/vars",
- "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_validate/vars/main.yaml",
+ "name": "tests/unit/plugins/filter/test_ipv4.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a0a2c468f24a66b8cea391acc05802e57275f212e1d4a467516bafd440f7765e",
+ "chksum_sha256": "6d1b99aad3d116523b262cffee6ab317ef75c2cb96c87f110f8a52ab295f4973",
"format": 1
},
{
- "name": "tests/integration/targets/utils_update_fact",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/plugins/filter/test_validate.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "dc44a7bc87a3424a4a2c2c4726a2e4cafdd8a3e2f7f55a5371b7ceec8a3be5fd",
"format": 1
},
{
- "name": "tests/integration/targets/utils_update_fact/tasks",
- "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_update_fact/tasks/main.yaml",
+ "name": "tests/unit/plugins/filter/test_replace_keys.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8ebea41c6f8a93be2240cd0c45732a3d596cf571cb64547dc113217da56b575b",
+ "chksum_sha256": "5522cfab5edfdf3739180b05c3bb65152336d07106a82a33076d52eaf399a4fe",
"format": 1
},
{
- "name": "tests/integration/targets/utils_to_xml",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/plugins/filter/test_next_nth_usable.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0980d4e0ef3664c878a618717efe41ccb836e781c068f028d8777e2b42c8ebb0",
"format": 1
},
{
- "name": "tests/integration/targets/utils_to_xml/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/plugins/filter/test_consolidate.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1dc8412704c61f5cb1b0cc52b6922a28e768cc6525453368ebebae8afbd8d6ce",
"format": 1
},
{
- "name": "tests/integration/targets/utils_to_xml/tasks/main.yaml",
+ "name": "tests/unit/plugins/filter/test_macaddr.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5",
+ "chksum_sha256": "5d586ac9c169f7dd133276ff0ac7078b4147face9fe39f7f6418a00473b25ded",
"format": 1
},
{
- "name": "tests/integration/targets/utils_to_xml/tasks/simple.yaml",
+ "name": "tests/unit/plugins/filter/test_from_xml.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7228288965760ffa35f3630bf7ebfc7a6b1709d5d97550e2a2da863b35648551",
+ "chksum_sha256": "01fe5504bddedec8fc5afc6de2b7b4ddc884fbf87148a52b9d1ece85b7482dfd",
"format": 1
},
{
- "name": "tests/integration/targets/utils_to_xml/vars",
- "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": "tests/integration/targets/utils_to_xml/vars/main.yaml",
+ "name": "tests/unit/plugins/filter/test_network_in_usable.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b8405fb4146ef4dbfa941874b93d3c87e02310ddaabf8407f2691da3855f1093",
+ "chksum_sha256": "e4073fdb1071ca2a9f332c7800bed27c47d425400a4c7ac50d60d89f4fb1b017",
"format": 1
},
{
- "name": "docs",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/plugins/filter/test_previous_nth_usable.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2940ec98b9252f37708c31c5c7be03397b382cbdb55617c48a91fe56203a5f37",
"format": 1
},
{
- "name": "docs/ansible.utils.to_xml_filter.rst",
+ "name": "tests/unit/plugins/filter/test_slaac.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dcbfe90179444aba2c77f5edb8aa3f2f1e46509b19a3b46ac1ce825c145c88c6",
+ "chksum_sha256": "d6f40ccd4972301f4d35acb137565f119b906e1a155bcf2ed7f9bdb3bafc37c0",
"format": 1
},
{
- "name": "docs/ansible.utils.cli_parse_module.rst",
+ "name": "tests/unit/plugins/filter/test_remove_keys.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d18023f4a52a2bf40a6973bff87a1507abe081e772b98c5ad0a88790fb41d00b",
+ "chksum_sha256": "d76ed7cf44390b9f18e53ed705a417d66e51d2479c1ab81c5f8015570947ac95",
"format": 1
},
{
- "name": "docs/ansible.utils.ipv6form_filter.rst",
+ "name": "tests/unit/plugins/filter/test_cidr_merge.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "120f6dc4a15f99fab9a5e40ae86121f2410061b06415310cc2873227639d2c96",
+ "chksum_sha256": "fa2633572c17bdb2493badbe31a368b10ec18327bcae10350d181a7f4cefaacd",
"format": 1
},
{
- "name": "docs/ansible.utils.network_in_usable_filter.rst",
+ "name": "tests/unit/plugins/filter/test_ipv6.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "74e58e97636306402fcc697a0478eabc57ecc2df6a02b8a8e00b8cbd23239db6",
+ "chksum_sha256": "7d0b81fe64f7e706c2043f1ab4e61f35536172922b281e47078996469a444636",
"format": 1
},
{
- "name": "docs/ansible.utils.replace_keys_filter.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c1861c5dccd6e4e9e24c5250c274237d4d5df62bbdcede41b78c1f808d2ddcf8",
+ "name": "tests/unit/module_utils",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/ansible.utils.keep_keys_filter.rst",
+ "name": "tests/unit/module_utils/fixtures",
+ "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": "57b1faf8874e35a682b8ac1f717bc43e3ab4b015bc7ac8bd984a458ab2444262",
+ "chksum_sha256": "1f147714958e065abe3622fa3e94ee26f70d06212de8cdbe54210c28a4e71b02",
"format": 1
},
{
- "name": "docs/ansible.utils.ipv6_filter.rst",
+ "name": "tests/unit/module_utils/fixtures/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4cbb8f9b4687b1da3daf647c14e19c1d0eb7672f5af3b9387b308da8f2e1e9c1",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "docs/ansible.utils.validate_filter.rst",
+ "name": "tests/unit/module_utils/fixtures/large.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7b3e3f7b9576c04425c56142667cd0ffc8f021e2624fa86e23f9e9f20745c13e",
+ "chksum_sha256": "56dadab818a719846f64c0fcfd7d0c2c1eeb34cdb8cc646033311ef90b0770a1",
"format": 1
},
{
- "name": "docs/ansible.utils.ip4_hex_filter.rst",
+ "name": "tests/unit/module_utils/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9568ea4894daa231731491939cdfb193bcc631f36580d0cb82e161e692870c15",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "docs/ansible.utils.cidr_merge_filter.rst",
+ "name": "tests/unit/module_utils/test_argspec_validate.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d214b5cda14a322db93269a17b361b4d8b56989b29a7808619cc5d177114a4c5",
+ "chksum_sha256": "5f83ac9ca3034d6af7b3b8fd42d52daf073981d1191c7d26bd094d23966488ff",
"format": 1
},
{
- "name": "docs/ansible.utils.ipv4_hostmask_test.rst",
+ "name": "tests/unit/module_utils/test_to_paths.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "95cdff320db4d31cf5fb9abe6144b39b1cf7f1da47f827341b0c52ba5475911a",
+ "chksum_sha256": "39db96610cc324a48b70fcd56b6d47995712fef01a6124ef5b87f390a7c2aabf",
"format": 1
},
{
- "name": "docs/ansible.utils.in_any_network_test.rst",
+ "name": "tests/unit/module_utils/test_dict_merge.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e9678218618d0bb3f526f0cdfaf3d09f24bbaadd6f7317b02cddc4f2bfc7598b",
+ "chksum_sha256": "8f1ef47e9e46b2f40a0043243467b56b4884bd4ad181eb7ffd0e1881d7fe50b2",
"format": 1
},
{
- "name": "docs/ansible.utils.remove_keys_filter.rst",
+ "name": "tests/unit/module_utils/test_sort_list.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4d8e87cf05341c85a46097cf933e6705ca0de7a189f078165772d21604188f9f",
+ "chksum_sha256": "df4ed8325d26693e4b170ac52084db62ccc7abb82b2a8706b491bb47c4c7501a",
"format": 1
},
{
- "name": "docs/ansible.utils.ipcut_filter.rst",
+ "name": "tests/unit/module_utils/test_get_path.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "150ecfe60509b1b0093de7ea4a911eb8ab291cd1b9398586fa96a69b09daa43f",
+ "chksum_sha256": "5bf169349a95316a5b30e3fe0181f00849447213b2247f072ff8788e339f1c67",
"format": 1
},
{
- "name": "docs/ansible.utils.validate_module.rst",
+ "name": "tests/unit/requirements.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "03f7c4bfe67c83a1c35bec20e80c0e9ed42a9b862db517ba6244d00049901022",
+ "chksum_sha256": "fcea5298285c0542897536b02f5c7753645c7fa83abdcac6b0f3e15ec3d27160",
"format": 1
},
{
- "name": "docs/ansible.utils.get_path_lookup.rst",
+ "name": "codecov.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0a5b58a4a23622668ac0b1ff8e8279973fba07c285d7621268259eecbcba8177",
+ "chksum_sha256": "d7119b3a96ece7bcd2df6e851e7e19783049f280918a801344d502c6ada4e582",
"format": 1
},
{
- "name": "docs/ansible.utils.macaddr_filter.rst",
+ "name": "tox-ansible.ini",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "549d998af199f3f60df3c87594d015379d4a674e7fa311df1edea8e54f613270",
+ "chksum_sha256": "fd009473385d7a79691dba3f6326b5dce9ded1705cc672917cf80e03317bf38b",
"format": 1
},
{
- "name": "docs/ansible.utils.index_of_filter.rst",
+ "name": ".gitignore",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cf5a4c7351a8a43b70c4efbcc6932d0a75f35d1dbb3c040918c470452c6d68ef",
+ "chksum_sha256": "c444cf81acd9153b71cd9ff418b980724cac7d29c77b57d453053923dffbdcc3",
"format": 1
},
{
- "name": "docs/ansible.utils.nthhost_filter.rst",
+ "name": "cspell.config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4504d31bfe9857b381ab5027d6e8979cce559db48e515ee220b47e9f83ab628d",
+ "chksum_sha256": "e1079e6d02ed34033bf83913e7b66ff7bd042e6d8ed4c113aea31123f557deb5",
"format": 1
},
{
- "name": "docs/ansible.utils.update_fact_module.rst",
+ "name": "LICENSE",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9a249c8e78a9da1ccc2f3a3f8532e0a3950652f678a22c232d9785e6adbdab2a",
+ "chksum_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986",
"format": 1
},
{
- "name": "docs/ansible.utils.fact_diff_module.rst",
+ "name": ".flake8",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c27b93299035cc8c6682dda0051e91d1db168007c2c73356808098cad41da3da",
+ "chksum_sha256": "e0ac43f26ecfa3094c442566f7ad9d637c2975a4072c2cbf438b59b3adcdf219",
"format": 1
},
{
- "name": "docs/ansible.utils.unspecified_test.rst",
+ "name": "CHANGELOG.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1eec59f8934a04b53d1615f3b207586fcd8fad2981b85d0665f0f57026a6f29c",
+ "chksum_sha256": "2427bdf40969757f62caf9b4315e943c5bbe39a84fd2802c19afa0f332759b74",
"format": 1
},
{
- "name": "docs/docsite",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "requirements.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b1867544249e1acedd6385529f7378e93f91208c7f27d11f1a2bb4403c68b8dd",
"format": 1
},
{
- "name": "docs/docsite/rst",
+ "name": "docs",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "docs/docsite/rst/filters_ipaddr.rst",
+ "name": "docs/ansible.utils.previous_nth_usable_filter.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c9775fb372228245e46eeff7beefdf3cd765ecfccd7e688eda2ec689e2ac2195",
+ "chksum_sha256": "94e6ce5e91e19ccb7249987bed4d5288f231e31900299698508ce3980f382e71",
"format": 1
},
{
- "name": "docs/docsite/extra-docs.yml",
+ "name": "docs/ansible.utils.unspecified_test.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "735531af48baf6de4e933219f147cf4b3187410f111ec9c188a06903675b757d",
+ "chksum_sha256": "1eec59f8934a04b53d1615f3b207586fcd8fad2981b85d0665f0f57026a6f29c",
"format": 1
},
{
- "name": "docs/ansible.utils.ip_address_test.rst",
+ "name": "docs/ansible.utils.ipv6_sixtofour_test.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0f9a4db063314e0acdf3dc69c1c669955a27927bbb6b25ea3fe69322d3a59390",
+ "chksum_sha256": "199d99f772c92d20a560fa5afbba8ac4df74a11eaccffb5c29a2d96c3e6dea02",
"format": 1
},
{
- "name": "docs/ansible.utils.ipv4_address_test.rst",
+ "name": "docs/ansible.utils.ipv6_test.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4842230a2ce840862d3366ecce677e56ad38600b5b07a27de3afbdc4e5b1759c",
+ "chksum_sha256": "05665d4cc703bf130c7593ad3e0a974e33bf1530318a32caf38bc2b9bd5ec3d0",
"format": 1
},
{
- "name": "docs/ansible.utils.next_nth_usable_filter.rst",
+ "name": "docs/ansible.utils.slaac_filter.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0702412f10dce01ad520ef2c44622bdf4b4e7e1eadbdb3f7cecaf17c79cff102",
+ "chksum_sha256": "dc9f60ef24b7ad1e30861adfb02e97efd3db05579c0790cb07e8535db03bc69b",
"format": 1
},
{
- "name": "docs/ansible.utils.private_test.rst",
+ "name": "docs/ansible.utils.macaddr_filter.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4e36e2bd85c58c001cd29b548979ab23adbcdd02290f375293db88c23ca55ae3",
+ "chksum_sha256": "549d998af199f3f60df3c87594d015379d4a674e7fa311df1edea8e54f613270",
"format": 1
},
{
- "name": "docs/ansible.utils.validate_test.rst",
+ "name": "docs/ansible.utils.fact_diff_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "81f6e37b6f9275cd8bb1240a7bfa7a8fcefbb744b68c027ab922321d4547d91f",
+ "chksum_sha256": "c27b93299035cc8c6682dda0051e91d1db168007c2c73356808098cad41da3da",
"format": 1
},
{
- "name": "docs/ansible.utils.ipmath_filter.rst",
+ "name": "docs/ansible.utils.replace_keys_filter.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0ad6e54b6e827dcf8235a8e237d94fd2ed8f7fbe34dd47aff5b5ed6fdd45e33c",
+ "chksum_sha256": "c1861c5dccd6e4e9e24c5250c274237d4d5df62bbdcede41b78c1f808d2ddcf8",
"format": 1
},
{
- "name": "docs/ansible.utils.supernet_of_test.rst",
+ "name": "docs/ansible.utils.validate_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f5a987278d1a641a79c672006b8eeb37b1e937f4f85baaefb600a3a6e4affae4",
+ "chksum_sha256": "b47930c113c23060d1281bade44f65abcfa57be02943ef2652710929fa9d6f27",
"format": 1
},
{
- "name": "docs/ansible.utils.hwaddr_filter.rst",
+ "name": "docs/ansible.utils.cidr_merge_filter.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "06004f98865238ad74c52a67c40b977315200c1dfd5b48e3666681b8a83f53f5",
+ "chksum_sha256": "d214b5cda14a322db93269a17b361b4d8b56989b29a7808619cc5d177114a4c5",
"format": 1
},
{
- "name": "docs/ansible.utils.ipv6_address_test.rst",
+ "name": "docs/ansible.utils.ipv4_filter.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "30a2515d6260cfda2181cb101c26063dc5b18529cd60576d39a88160714f5af0",
+ "chksum_sha256": "58d021685cdafba7cae88b47ae7b996e9cd4df7f4e3e4aa7e8519c06176f52bd",
"format": 1
},
{
- "name": "docs/ansible.utils.resolvable_test.rst",
+ "name": "docs/ansible.utils.multicast_test.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "62013972070a09452a421a061a891e8ceebc94ea610103b6b21e14441328bed1",
+ "chksum_sha256": "55c9f48ea04a80347fe42bc9c25fa0771578924f5afbff64a42feb04bbdb84be",
"format": 1
},
{
- "name": "docs/ansible.utils.ipwrap_filter.rst",
+ "name": "docs/ansible.utils.ipv4_address_test.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b26276300d797113d036be6eeac6fd76812cd8e3e32d8cae13e4421b4111d233",
+ "chksum_sha256": "4842230a2ce840862d3366ecce677e56ad38600b5b07a27de3afbdc4e5b1759c",
"format": 1
},
{
- "name": "docs/ansible.utils.ipv4_filter.rst",
+ "name": "docs/ansible.utils.ipv6form_filter.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "58d021685cdafba7cae88b47ae7b996e9cd4df7f4e3e4aa7e8519c06176f52bd",
+ "chksum_sha256": "f5cef46d5cde1a50882f319db18ea8421e11a92cfc51b0f9d25201040bdd4a23",
"format": 1
},
{
- "name": "docs/ansible.utils.multicast_test.rst",
+ "name": "docs/ansible.utils.validate_test.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "55c9f48ea04a80347fe42bc9c25fa0771578924f5afbff64a42feb04bbdb84be",
+ "chksum_sha256": "81f6e37b6f9275cd8bb1240a7bfa7a8fcefbb744b68c027ab922321d4547d91f",
"format": 1
},
{
- "name": "docs/ansible.utils.ipv6_test.rst",
+ "name": "docs/ansible.utils.cli_parse_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "05665d4cc703bf130c7593ad3e0a974e33bf1530318a32caf38bc2b9bd5ec3d0",
+ "chksum_sha256": "d18023f4a52a2bf40a6973bff87a1507abe081e772b98c5ad0a88790fb41d00b",
"format": 1
},
{
- "name": "docs/ansible.utils.ipaddr_filter.rst",
+ "name": "docs/ansible.utils.to_xml_filter.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b3e3890d2cf44c611439f215c3e9105af9975f72c5bbd4766ddbdec49c4d01b2",
+ "chksum_sha256": "dcbfe90179444aba2c77f5edb8aa3f2f1e46509b19a3b46ac1ce825c145c88c6",
"format": 1
},
{
"name": "docs/ansible.utils.validate_lookup.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "acbf3ebedc5525f291c1f8c453d03b0d774e84cc92c94935c3159e09f5e06fc4",
+ "chksum_sha256": "3cb9f3909679db84ec4e17f102eca4dc16872c39098254fa1dfae976e42136d9",
"format": 1
},
{
- "name": "docs/ansible.utils.ipv6_sixtofour_test.rst",
+ "name": "docs/ansible.utils.resolvable_test.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "199d99f772c92d20a560fa5afbba8ac4df74a11eaccffb5c29a2d96c3e6dea02",
+ "chksum_sha256": "62013972070a09452a421a061a891e8ceebc94ea610103b6b21e14441328bed1",
"format": 1
},
{
- "name": "docs/ansible.utils.in_network_test.rst",
+ "name": "docs/ansible.utils.fact_diff_filter.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6054c4414e7df289acca584d8cde0025fda866f5fd8fd268c1cdba7c1cb7bd9d",
+ "chksum_sha256": "0be4cf38c71bd11475f9a4dc73700ae11ec57cd0d27af3d3379c08e94e21de09",
"format": 1
},
{
- "name": "docs/ansible.utils.ip_test.rst",
+ "name": "docs/ansible.utils.ipsubnet_filter.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "423c666b424a893fed77918cd8afbd5acf4b95156ea109e4c1ae9b910333b39d",
+ "chksum_sha256": "04d4c6c32fcc688b3e4f226317ade21885628d39101cf797dafc36a0dd86ac3c",
"format": 1
},
{
- "name": "docs/ansible.utils.slaac_filter.rst",
+ "name": "docs/ansible.utils.remove_keys_filter.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dc9f60ef24b7ad1e30861adfb02e97efd3db05579c0790cb07e8535db03bc69b",
+ "chksum_sha256": "4d8e87cf05341c85a46097cf933e6705ca0de7a189f078165772d21604188f9f",
"format": 1
},
{
@@ -3389,52 +3361,52 @@
"format": 1
},
{
- "name": "docs/ansible.utils.reserved_test.rst",
+ "name": "docs/ansible.utils.ipv6_address_test.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "abfaea7206a74c57fabcf1116cbd0fc0ad510c1cab57c9da5ac29ce552370263",
+ "chksum_sha256": "30a2515d6260cfda2181cb101c26063dc5b18529cd60576d39a88160714f5af0",
"format": 1
},
{
- "name": "docs/ansible.utils.public_test.rst",
+ "name": "docs/ansible.utils.in_network_test.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4cb3046bae484b3de9facc9a12f078a1412af6c42dc729df3b821e8d2075fd46",
+ "chksum_sha256": "6054c4414e7df289acca584d8cde0025fda866f5fd8fd268c1cdba7c1cb7bd9d",
"format": 1
},
{
- "name": "docs/ansible.utils.from_xml_filter.rst",
+ "name": "docs/ansible.utils.ipaddr_filter.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1a197b87a3c3f47315f279e12775bf5c99f36ee003ff639e3f381e5342f98ed8",
+ "chksum_sha256": "b3e3890d2cf44c611439f215c3e9105af9975f72c5bbd4766ddbdec49c4d01b2",
"format": 1
},
{
- "name": "docs/ansible.utils.ipv4_netmask_test.rst",
+ "name": "docs/ansible.utils.ipcut_filter.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6d22ab2bffd5865608a1cdb0039226c116f4b086a0b15196e66181323acc4c6",
+ "chksum_sha256": "150ecfe60509b1b0093de7ea4a911eb8ab291cd1b9398586fa96a69b09daa43f",
"format": 1
},
{
- "name": "docs/ansible.utils.mac_test.rst",
+ "name": "docs/ansible.utils.ipv6_filter.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f0b1e210c490176d84983fca86cb4b83fd346e40176789ffb8d3c66b1dd17921",
+ "chksum_sha256": "4cbb8f9b4687b1da3daf647c14e19c1d0eb7672f5af3b9387b308da8f2e1e9c1",
"format": 1
},
{
- "name": "docs/ansible.utils.get_path_filter.rst",
+ "name": "docs/ansible.utils.validate_filter.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d93dd63925b87e4d57470f4cf6436b374a975bd6ee052a8283bfa8031923ed2b",
+ "chksum_sha256": "7b3e3f7b9576c04425c56142667cd0ffc8f021e2624fa86e23f9e9f20745c13e",
"format": 1
},
{
- "name": "docs/ansible.utils.previous_nth_usable_filter.rst",
+ "name": "docs/ansible.utils.index_of_lookup.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "94e6ce5e91e19ccb7249987bed4d5288f231e31900299698508ce3980f382e71",
+ "chksum_sha256": "9d3492d8a3db1ccc4e8449fc37e05a30449dec8a71cb0801d9056ad93af0cf57",
"format": 1
},
{
@@ -3445,283 +3417,276 @@
"format": 1
},
{
- "name": "docs/ansible.utils.to_paths_lookup.rst",
+ "name": "docs/ansible.utils.ipv6_teredo_test.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c3c9628ebc9e7ddfd0d478ff5b8dcbb15f86a0b85ce1607bc37e3e5e368421c1",
+ "chksum_sha256": "8019ff32d2d4a4b0796dc1f9a43a391edb75a5c9acc4a73c7b4b2216c54a242f",
"format": 1
},
{
- "name": "docs/ansible.utils.subnet_of_test.rst",
+ "name": "docs/ansible.utils.to_paths_filter.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bab2b4b9c50f9250332f845ab0d6e5b8d829301fa9c9cd1f168f31d306bfdad2",
+ "chksum_sha256": "f31c47be2c7013bdf8a52668c84e5b4beed859fe0ad77459138e42a3f0d61425",
"format": 1
},
{
- "name": "docs/ansible.utils.index_of_lookup.rst",
+ "name": "docs/ansible.utils.from_xml_filter.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9d3492d8a3db1ccc4e8449fc37e05a30449dec8a71cb0801d9056ad93af0cf57",
+ "chksum_sha256": "1a197b87a3c3f47315f279e12775bf5c99f36ee003ff639e3f381e5342f98ed8",
"format": 1
},
{
- "name": "docs/ansible.utils.network_in_network_filter.rst",
+ "name": "docs/ansible.utils.supernet_of_test.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "25caf49346a61296cab62448dec2253f7fe8d1d551de18006cb651b0a962d49d",
+ "chksum_sha256": "f5a987278d1a641a79c672006b8eeb37b1e937f4f85baaefb600a3a6e4affae4",
"format": 1
},
{
- "name": "docs/ansible.utils.to_paths_filter.rst",
+ "name": "docs/ansible.utils.ip_test.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f31c47be2c7013bdf8a52668c84e5b4beed859fe0ad77459138e42a3f0d61425",
+ "chksum_sha256": "423c666b424a893fed77918cd8afbd5acf4b95156ea109e4c1ae9b910333b39d",
"format": 1
},
{
- "name": "docs/ansible.utils.param_list_compare_filter.rst",
+ "name": "docs/ansible.utils.subnet_of_test.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b9a763a3b44b126a7bad44558f4e7b6d861d9a42e4978cfd5bc1f655c03dc5d3",
+ "chksum_sha256": "bab2b4b9c50f9250332f845ab0d6e5b8d829301fa9c9cd1f168f31d306bfdad2",
"format": 1
},
{
- "name": "docs/ansible.utils.reduce_on_network_filter.rst",
+ "name": "docs/ansible.utils.network_in_usable_filter.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b8a63a854939b7468f04a5d15680840c679c4d080a0b367a61693c3a27995f10",
+ "chksum_sha256": "74e58e97636306402fcc697a0478eabc57ecc2df6a02b8a8e00b8cbd23239db6",
"format": 1
},
{
- "name": "docs/ansible.utils.ipsubnet_filter.rst",
+ "name": "docs/ansible.utils.get_path_filter.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "04d4c6c32fcc688b3e4f226317ade21885628d39101cf797dafc36a0dd86ac3c",
+ "chksum_sha256": "d93dd63925b87e4d57470f4cf6436b374a975bd6ee052a8283bfa8031923ed2b",
"format": 1
},
{
- "name": "docs/ansible.utils.ipv6_ipv4_mapped_test.rst",
+ "name": "docs/ansible.utils.hwaddr_filter.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a2f80757dd33fb9253ed11d8de3cb8aa0fb27f880fe3fe193caa1eb13ab5ed9e",
+ "chksum_sha256": "06004f98865238ad74c52a67c40b977315200c1dfd5b48e3666681b8a83f53f5",
"format": 1
},
{
- "name": "docs/ansible.utils.usable_range_filter.rst",
+ "name": "docs/ansible.utils.update_fact_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1075aa159a55fbe12b3a53076111d509078ed5f08c54327d4f1fc3f85a3a29d8",
+ "chksum_sha256": "9a249c8e78a9da1ccc2f3a3f8532e0a3950652f678a22c232d9785e6adbdab2a",
"format": 1
},
{
- "name": "docs/ansible.utils.fact_diff_filter.rst",
+ "name": "docs/ansible.utils.mac_test.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1742955a1e39aeb4f88c7351148a6246d4ad87f9a4481f3c21ee4dd26a5a3885",
+ "chksum_sha256": "f0b1e210c490176d84983fca86cb4b83fd346e40176789ffb8d3c66b1dd17921",
"format": 1
},
{
- "name": "docs/ansible.utils.ipv6_teredo_test.rst",
+ "name": "docs/ansible.utils.public_test.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8019ff32d2d4a4b0796dc1f9a43a391edb75a5c9acc4a73c7b4b2216c54a242f",
+ "chksum_sha256": "4cb3046bae484b3de9facc9a12f078a1412af6c42dc729df3b821e8d2075fd46",
"format": 1
},
{
- "name": "docs/ansible.utils.consolidate_filter.rst",
+ "name": "docs/ansible.utils.ip4_hex_filter.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bf891d59082405b69a8bbc998ede84fac3b908dfb98f06c5eb4081288a8fcc6f",
+ "chksum_sha256": "9568ea4894daa231731491939cdfb193bcc631f36580d0cb82e161e692870c15",
"format": 1
},
{
- "name": "docs/ansible.utils.in_one_network_test.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9fc9e8aa7b1e66065f1fc6fe5d3813eabea32935c9010bd40bc8dd44cad350a7",
+ "name": "docs/docsite",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": ".isort.cfg",
+ "name": "docs/docsite/extra-docs.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4ca0097b4a09ffae0f6cad7b280f8f7acf1b6cc0c4bfd28a79ddc81d3b840262",
+ "chksum_sha256": "735531af48baf6de4e933219f147cf4b3187410f111ec9c188a06903675b757d",
"format": 1
},
{
- "name": "pyproject.toml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1aec538a80e3fbf00bfd922d2dcd4ffbc831018d75faffea7b4c3cd3a4f44730",
+ "name": "docs/docsite/rst",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": ".flake8",
+ "name": "docs/docsite/rst/filters_ipaddr.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c3619890addbe81b337523c7d31461089055b267a3665f5f5c93d47fa0dbee96",
+ "chksum_sha256": "c9775fb372228245e46eeff7beefdf3cd765ecfccd7e688eda2ec689e2ac2195",
"format": 1
},
{
- "name": ".darglint",
+ "name": "docs/ansible.utils.ipmath_filter.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "954a7045c6fa17fddfe80995f7f8251efb6df1a2b05eaf479afca6bbc6dfd4f2",
+ "chksum_sha256": "0ad6e54b6e827dcf8235a8e237d94fd2ed8f7fbe34dd47aff5b5ed6fdd45e33c",
"format": 1
},
{
- "name": "bindep.txt",
+ "name": "docs/ansible.utils.nthhost_filter.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "80645079eb025b3a905b4775ac545d080a3d7d35d537c31e04f7197c94315ab5",
- "format": 1
- },
- {
- "name": "changelogs",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "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
<!--start requires_ansible-->
## 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
@@ -73,6 +73,27 @@ Parameters
<tr>
<td colspan="3">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>common</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li><div style="color: blue"><b>no</b>&nbsp;&larr;</div></li>
+ <li>yes</li>
+ </ul>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Show all common lines.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="3">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>plugin</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
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
</div>
</td>
<td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>compress</li>
+ <li>expand</li>
+ <li>x509</li>
+ </ul>
</td>
<td>
</td>
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/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 <tkuratomi@ansible.com>
-#
-# 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 <http://www.gnu.org/licenses/>.
-
-# 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 <tkuratomi@ansible.com>
-#
-# 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 <http://www.gnu.org/licenses/>.
-
-# 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 = """<?xml version="1.0" encoding="utf-8"?>
</interface-configurations>"""
-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 = "<tag1><tag2 arg='foo'>text</tag2></tag1>"
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/ansible/utils/tests/unit/compat/__init__.py b/ansible_collections/arista/eos/.github/CODEOWNERS
index e69de29bb..e69de29bb 100644
--- a/ansible_collections/ansible/utils/tests/unit/compat/__init__.py
+++ b/ansible_collections/arista/eos/.github/CODEOWNERS
diff --git a/ansible_collections/cisco/ios/.github/workflows/ack.yml b/ansible_collections/arista/eos/.github/workflows/check_label.yml
index fda595dc5..b120bfa32 100644
--- a/ansible_collections/cisco/ios/.github/workflows/ack.yml
+++ b/ansible_collections/arista/eos/.github/workflows/check_label.yml
@@ -1,15 +1,11 @@
---
-# See https://github.com/ansible-community/devtools/blob/main/.github/workflows/ack.yml
-name: ack
-
+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:
- ack:
- uses: ansible/devtools/.github/workflows/ack.yml@main
+ 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/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": "acdc105c02de4ccd8d44e0dae9894189c936d9993ae6853a99caa80a40e9d10f",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": ".github/release-drafter.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7cbc785c8661033cd9dd7a60897484fce731cbe3dc124a689fc3e934b1d974fb",
"format": 1
},
{
@@ -64,675 +85,738 @@
"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,
+ "name": "plugins/modules/eos_facts.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4c7b074df78792a848f53b5fb6994a2673249e659dfc74cc181fb1569812425c",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/rm_templates/bgp_global.py",
+ "name": "plugins/modules/eos_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "024e8dbf0bec4943c24a26d99ce20e6c992f146c6dec61fd53ce3973e2a3d9f1",
+ "chksum_sha256": "6cbcf37f8e0d3a441c5923b65168ba380c1e78dd0d0081019ccc38b3209de2be",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/rm_templates/bgp_address_family.py",
+ "name": "plugins/modules/eos_acl_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "793f9c3e5428e09f3352cb561dc58c9707700305c419af539862702641177484",
+ "chksum_sha256": "dcea489708bed333c4d29737c4e57db3eaea6e0d19a3b9d0c77e21054ca5d68a",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/rm_templates/hostname.py",
+ "name": "plugins/modules/eos_command.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ad569ba6de7f63168a5a8b6dff50abb5fb40e8329ba52c2412408526e22a5ca9",
+ "chksum_sha256": "355cb38f9dfa902d56c0563dfcca9c4579221f341df5b64ff3c9e22086b70016",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/rm_templates/ntp_global.py",
+ "name": "plugins/modules/eos_lacp_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "44e6b60a7ba28b25feee1b18a38435d17fd0998e7f84925258ed15e9fcc5e335",
+ "chksum_sha256": "90ab8557eb680e0abea6fd8cdb5d463f0ef1fd73d0073ef47981a74bff0c84e7",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/rm_templates/snmp_server.py",
+ "name": "plugins/modules/eos_lldp_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "416f060b23612c3906a20fd5ac4276d2ad8577f73c44dfad6f159f742f0db2be",
+ "chksum_sha256": "32172bac4360cbd4c9aba0bc4776294eca0dda71a97f472a71c9424a5260fc78",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/rm_templates/__init__.py",
+ "name": "plugins/modules/eos_route_maps.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b2dc1be3caa9efc8e1f36a1bcfa6a7a0cfd5d780a5ebfce3273c19dd6354b997",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/rm_templates/ospfv3.py",
+ "name": "plugins/modules/eos_banner.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "84bdbe377db05a723806e43b45d4473a6659aa5f3cdc640838a6e91145e7d8e3",
+ "chksum_sha256": "c9a40fe93e2835e8e2ef138f63de065a737fee2710b108b7ac7c3fdbba5002a8",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/rm_templates/route_maps.py",
+ "name": "plugins/modules/eos_ospfv3.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cd769e2e13a0b7f1e201d647d70cec84eb7b374c31952da5a88e5436e9204f94",
+ "chksum_sha256": "01223340ad356c047ac03a72b8a6025f43c7a1d80f61d5e8b68c33631575fafa",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/rm_templates/ospf_interfaces.py",
+ "name": "plugins/modules/eos_bgp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "830240634630601293eab68bd902aaae19e5d83bad59bb91410bdf85fa8670e7",
+ "chksum_sha256": "8fb638856c7852953717ffd65e1e2b4a6dec7ec0a005fd4ef9506be5f2d09694",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/rm_templates/logging_global.py",
+ "name": "plugins/modules/eos_l3_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "99e1a95abbb6b1fd6dfe0544c955a4f8c209b5df57f538392a9277f03d529898",
+ "chksum_sha256": "aa387fe06abd306df299f1303069a805fad22466a56ce59d0854de6e4ed6212f",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/rm_templates/prefix_lists.py",
+ "name": "plugins/modules/eos_acls.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f4602d1d97809c09f7d472207a6b96b7ac058f33618cbcb5ad5b0ae593935a06",
+ "chksum_sha256": "01f152c6892474ad74fa3fe4d5f3828099f7d0db1eaf56d0d05f818ab6cfaf81",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/providers",
- "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/module.py",
+ "name": "plugins/modules/eos_ospfv2.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f01b61830d3543669f47b987507fb7b55933588f7a1a2f731e4f9c50d848a558",
+ "chksum_sha256": "a0eaa5f6b3d3704c84d8dbadb6e35cbc3810598bfc9a341a4df42e68847af0e0",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/providers/cli",
- "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/__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",
- "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/__init__.py",
+ "name": "plugins/modules/eos_config.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "75240b4868941e59b523617b9e01cadd64fd82061014a65183c20a2453d43d07",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/providers/cli/config/bgp",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/eos_prefix_lists.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "47bacc85ac1895d0be80898303dd039edfdf63370cf60e54efc3d9716332983e",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/providers/cli/config/bgp/neighbors.py",
+ "name": "plugins/modules/eos_bgp_address_family.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "177c15749b198e2780b1e512f2d5164999fa8e64b30647672c0a490360e76088",
+ "chksum_sha256": "9d785bf8b326b2abba6c6742b427cca2938d6dac15b6dd2c8fe26033fb8032e6",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/providers/cli/config/bgp/__init__.py",
+ "name": "plugins/modules/eos_static_routes.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "1b30f6f27a471fabda82eaf6ab7d9f310c5e1b39f64ad7effd01e2d5d0dae9fc",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/providers/cli/config/bgp/process.py",
+ "name": "plugins/modules/eos_hostname.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a47f5b38ed3ce70270b517d5d14afb25aabfae512da4891e55041c881f751878",
+ "chksum_sha256": "6973fb2c1d99bcd964c8c2e5124fea3acb52432c4859ca9f9911b22429e7eff3",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/providers/cli/config/bgp/address_family.py",
+ "name": "plugins/modules/eos_vrf.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bf393826b172df53d3cd8d0b59a39e4c8020bce080b6ea6d11ca5cdc305de992",
+ "chksum_sha256": "b1c2429c57cb33a31319937318bbadf0ba7f60d536f08ebcb7886e7f2f628df1",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/providers/providers.py",
+ "name": "plugins/modules/eos_user.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7c92fe09b2aa69b9556470313aaece6f91b79412bc7dd972634e8b891f8ee11b",
+ "chksum_sha256": "0ae4d5492d26aa27ee9b8d9937258914af7b4cbfe77064847e141d294652d925",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/providers/__init__.py",
+ "name": "plugins/modules/eos_l2_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "9d426533a5e9c6918115e53437bc078ff85eccefbafda1d7d4dadb796a8006f3",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/__init__.py",
+ "name": "plugins/modules/eos_ospf_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "929edf4a24cf11021732e8e530f293f5802343e7930b6de8d629e98c005a3683",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts",
+ "name": "plugins/modules/eos_eapi.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "38c5950430f09e4eb10546aa674b41c0b9ae5c85957108433008c260282cc2b0",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/eos_ntp_global.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0aa39b82eae1a84fbbcdb9b19ff2ca409799f31d72a4ddc7371540ddb360ef57",
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/bgp_address_family",
+ "name": "plugins/module_utils/__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,
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/bgp_address_family/bgp_address_family.py",
+ "name": "plugins/module_utils/network/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c4cb44586c09aa01ade548e7fd768cc5acdb6184657cc69f4b7e19ef3810cdbb",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/bgp_address_family/__init__.py",
+ "name": "plugins/module_utils/network/eos",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "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/static_routes",
+ "name": "plugins/module_utils/network/eos/utils",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/static_routes/static_routes.py",
+ "name": "plugins/module_utils/network/eos/utils/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3bc5db1d739a23b0c993f770d3cca4af6ee7ab514e3c7222d1ebc7985546033",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/static_routes/__init__.py",
+ "name": "plugins/module_utils/network/eos/utils/utils.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "3f7d9467ef57217864bdc55cd3cf38c58744ff24a124b7cb06f6914adcc67196",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/prefix_lists",
+ "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/prefix_lists/__init__.py",
+ "name": "plugins/module_utils/network/eos/rm_templates/hostname.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ad569ba6de7f63168a5a8b6dff50abb5fb40e8329ba52c2412408526e22a5ca9",
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils/network/eos/rm_templates/ntp_global.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "44e6b60a7ba28b25feee1b18a38435d17fd0998e7f84925258ed15e9fcc5e335",
+ "format": 1
+ },
+ {
+ "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/prefix_lists/prefix_lists.py",
+ "name": "plugins/module_utils/network/eos/rm_templates/snmp_server.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fcc290aaba4af1b68805d1d0f47147352c09109f364e113a9766e1af4500cb1f",
+ "chksum_sha256": "2887677e8217b91f894b836409995c416326ed65eeabae0a8a20cbba2f8f9cc1",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/hostname",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/module_utils/network/eos/rm_templates/ospfv3.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "84bdbe377db05a723806e43b45d4473a6659aa5f3cdc640838a6e91145e7d8e3",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/hostname/hostname.py",
+ "name": "plugins/module_utils/network/eos/rm_templates/bgp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0c91edb1d5112e43527a1eb7bcc9de697035a388267a2636b23546709b119aa3",
+ "chksum_sha256": "024e8dbf0bec4943c24a26d99ce20e6c992f146c6dec61fd53ce3973e2a3d9f1",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/hostname/__init__.py",
+ "name": "plugins/module_utils/network/eos/rm_templates/logging_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "99e1a95abbb6b1fd6dfe0544c955a4f8c209b5df57f538392a9277f03d529898",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/lldp_interfaces",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/module_utils/network/eos/rm_templates/ospf_interfaces.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "830240634630601293eab68bd902aaae19e5d83bad59bb91410bdf85fa8670e7",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/lldp_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/eos/rm_templates/route_maps.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "cd769e2e13a0b7f1e201d647d70cec84eb7b374c31952da5a88e5436e9204f94",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/lldp_interfaces/lldp_interfaces.py",
+ "name": "plugins/module_utils/network/eos/rm_templates/bgp_address_family.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "000d63e8514cc27c9f1bfaaeb16c5e689544b2c0062d5a05d7c62f010b35c982",
+ "chksum_sha256": "793f9c3e5428e09f3352cb561dc58c9707700305c419af539862702641177484",
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils/network/eos/rm_templates/prefix_lists.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f4602d1d97809c09f7d472207a6b96b7ac058f33618cbcb5ad5b0ae593935a06",
+ "format": 1
+ },
+ {
+ "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",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
@@ -757,192 +841,199 @@
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/ospfv2",
+ "name": "plugins/module_utils/network/eos/facts/facts.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e7331bdec12957b960b8e1951c7acb4fe7e90eb759bc1d77691a3efd97a0afe1",
+ "format": 1
+ },
+ {
+ "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/ospfv2/__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/ospfv2/ospfv2.py",
+ "name": "plugins/module_utils/network/eos/facts/legacy/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4c026c178eb5e79d3c4f721b90bf6a81a497563700b7bdaa0e275cbab1095689",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/logging_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/logging_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/logging_global/logging_global.py",
+ "name": "plugins/module_utils/network/eos/facts/ospfv2/ospfv2.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "347a952bb18e664542416104c269d623d0d74f4095e975e29bd38ffa6a8b9471",
+ "chksum_sha256": "4c026c178eb5e79d3c4f721b90bf6a81a497563700b7bdaa0e275cbab1095689",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/ospfv3",
+ "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/ospfv3/__init__.py",
+ "name": "plugins/module_utils/network/eos/facts/interfaces/interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "d77de5b9f125a7a3718689e11f951e3ccea22fc2a326ff403a51cbff5b95d850",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/ospfv3/ospfv3.py",
+ "name": "plugins/module_utils/network/eos/facts/interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3decdeb768d4beac99f8dac300d0dd3fc39a35e94d4b9eebf5796c4566eb6df8",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/legacy",
+ "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/legacy/base.py",
+ "name": "plugins/module_utils/network/eos/facts/acl_interfaces/acl_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ae7be9226844a6c41d306bf463c00087631931af57be3242325fe69994a022d7",
+ "chksum_sha256": "8223e431fab62ffe96492525da21806ce3dcc683b0bfad6535bacdbe20a5ec19",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/legacy/__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/l2_interfaces",
+ "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/l2_interfaces/__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/l2_interfaces/l2_interfaces.py",
+ "name": "plugins/module_utils/network/eos/facts/route_maps/route_maps.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c19ff2a5d085a131ceec0742c38a9eae468962d91f3250e7427d4caf432ce56d",
+ "chksum_sha256": "85cf372cc7a142671feee4678aca01c08f756a97dd036e080fc71e14d16e237c",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/ospf_interfaces",
+ "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/ospf_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/eos/facts/l2_interfaces/l2_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "c19ff2a5d085a131ceec0742c38a9eae468962d91f3250e7427d4caf432ce56d",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/ospf_interfaces/ospf_interfaces.py",
+ "name": "plugins/module_utils/network/eos/facts/l2_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "276c32be6cf47273f43a594743a08f0caefcc569821891a9ba26a6b5e688dc65",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/route_maps",
+ "name": "plugins/module_utils/network/eos/facts/lag_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/route_maps/__init__.py",
+ "name": "plugins/module_utils/network/eos/facts/lag_interfaces/lag_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "e4386e948fecd41b50251a68a1ae4e462ba32c0fff6aec18645cf9b9585fe196",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/route_maps/route_maps.py",
+ "name": "plugins/module_utils/network/eos/facts/lag_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "85cf372cc7a142671feee4678aca01c08f756a97dd036e080fc71e14d16e237c",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/acl_interfaces",
+ "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/acl_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/eos/facts/hostname/hostname.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "0c91edb1d5112e43527a1eb7bcc9de697035a388267a2636b23546709b119aa3",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/acl_interfaces/acl_interfaces.py",
+ "name": "plugins/module_utils/network/eos/facts/hostname/__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/lldp_interfaces",
"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/lldp_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/lldp_global/lldp_global.py",
+ "name": "plugins/module_utils/network/eos/facts/lldp_interfaces/lldp_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9070fe8b2f5532a17160617ef9396da4e9c60439f912065895d1115ab43b4845",
+ "chksum_sha256": "000d63e8514cc27c9f1bfaaeb16c5e689544b2c0062d5a05d7c62f010b35c982",
"format": 1
},
{
@@ -953,66 +1044,66 @@
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/snmp_server",
+ "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/snmp_server/snmp_server.py",
+ "name": "plugins/module_utils/network/eos/facts/lldp_global/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bfd8498527758e863e712edab89d198cdc41010ff53015fad8278302a2636305",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/snmp_server/__init__.py",
+ "name": "plugins/module_utils/network/eos/facts/lldp_global/lldp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "9070fe8b2f5532a17160617ef9396da4e9c60439f912065895d1115ab43b4845",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/lacp_interfaces",
+ "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/lacp_interfaces/lacp_interfaces.py",
+ "name": "plugins/module_utils/network/eos/facts/snmp_server/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "13672c35f2afb1139aea840803a5e5e7a8bacc7ad56310573829a7429f41f9a5",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/lacp_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/eos/facts/snmp_server/snmp_server.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "bfd8498527758e863e712edab89d198cdc41010ff53015fad8278302a2636305",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/acls",
+ "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/facts/acls/__init__.py",
+ "name": "plugins/module_utils/network/eos/facts/prefix_lists/__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/prefix_lists/prefix_lists.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4281e9c092fcf8592b3f4edc4652f84c2fc2f234ca12b49878d38ee7ee39302a",
+ "chksum_sha256": "fcc290aaba4af1b68805d1d0f47147352c09109f364e113a9766e1af4500cb1f",
"format": 1
},
{
@@ -1037,227 +1128,220 @@
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/lag_interfaces",
+ "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/facts/lag_interfaces/lag_interfaces.py",
+ "name": "plugins/module_utils/network/eos/facts/l3_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e4386e948fecd41b50251a68a1ae4e462ba32c0fff6aec18645cf9b9585fe196",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/lag_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/eos/facts/l3_interfaces/l3_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "81a152c689e6101b61ec6094742e4048bac91e192e4ce580b29ab9ca6958a9d0",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/vlans",
+ "name": "plugins/module_utils/network/eos/facts/acls",
"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/acls/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "36bb3a37dcee0798b2b9cda6bd4259fcb70e67e8974dad36a3ffb8e5fd718e16",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/vlans/__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/facts/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/facts/interfaces/interfaces.py",
+ "name": "plugins/module_utils/network/eos/facts/bgp_global/__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/bgp_global/bgp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "e526a761ad44c7d0b819eaf02202a1239807ea3d9831b9c0f7691203106d9731",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/l3_interfaces",
+ "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/facts/l3_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/eos/facts/static_routes/__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/static_routes/static_routes.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "81a152c689e6101b61ec6094742e4048bac91e192e4ce580b29ab9ca6958a9d0",
+ "chksum_sha256": "3e45c11fe94e338745919779ad379fd824b08282a3d255dac6187c83b60deb53",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/facts/bgp_global",
+ "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/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/logging_global/__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/logging_global/logging_global.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": "347a952bb18e664542416104c269d623d0d74f4095e975e29bd38ffa6a8b9471",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/argspec/bgp_address_family",
+ "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/bgp_address_family/bgp_address_family.py",
+ "name": "plugins/module_utils/network/eos/facts/ospf_interfaces/__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/ospf_interfaces/ospf_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "276c32be6cf47273f43a594743a08f0caefcc569821891a9ba26a6b5e688dc65",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/argspec/static_routes",
+ "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/static_routes/static_routes.py",
+ "name": "plugins/module_utils/network/eos/facts/bgp_address_family/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ba889e4244aec9094d7db701cac2eb5b815f8ed0046f8a3e9c04fe6aa2fa217b",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/argspec/static_routes/__init__.py",
+ "name": "plugins/module_utils/network/eos/facts/bgp_address_family/bgp_address_family.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "c4cb44586c09aa01ade548e7fd768cc5acdb6184657cc69f4b7e19ef3810cdbb",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/argspec/prefix_lists",
+ "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/prefix_lists/__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/prefix_lists/prefix_lists.py",
+ "name": "plugins/module_utils/network/eos/facts/vlans/vlans.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e6e8db5f08a08179db44df3aa76e7b82cfb54deb2bde8583a683a267d1695d5c",
+ "chksum_sha256": "38d86c590d2b3dbb803cad22c0d382b9ed97b1098d05253451d6ee67682044b3",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/argspec/hostname",
+ "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/hostname/hostname.py",
+ "name": "plugins/module_utils/network/eos/facts/lacp_interfaces/lacp_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "efb917c5d1ae4dda5fab13fad9f6132c614f22f1ea51046338715e8f5bdd2fa2",
+ "chksum_sha256": "13672c35f2afb1139aea840803a5e5e7a8bacc7ad56310573829a7429f41f9a5",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/argspec/hostname/__init__.py",
+ "name": "plugins/module_utils/network/eos/facts/lacp_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/argspec/lldp_interfaces",
+ "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/lldp_interfaces/__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/lldp_interfaces/lldp_interfaces.py",
+ "name": "plugins/module_utils/network/eos/facts/ospfv3/ospfv3.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "19867782c170d8d43dba9d1f18eaca89971df1a153528ff64ed5e0aca3251e97",
+ "chksum_sha256": "3decdeb768d4beac99f8dac300d0dd3fc39a35e94d4b9eebf5796c4566eb6df8",
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils/network/eos/argspec",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
@@ -1303,150 +1387,150 @@
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/argspec/logging_global",
+ "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/logging_global/__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/logging_global/logging_global.py",
+ "name": "plugins/module_utils/network/eos/argspec/interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2622ca645838091e8437dd720f2ed7574015fb51171e2f1b2414baf13b16a04c",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/argspec/ospfv3",
+ "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/ospfv3/__init__.py",
+ "name": "plugins/module_utils/network/eos/argspec/acl_interfaces/acl_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "6c0046bf6afab4a996e33f24201ed519569eb08acbf16761b5b11a314533c0d3",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/argspec/ospfv3/ospfv3.py",
+ "name": "plugins/module_utils/network/eos/argspec/acl_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8c05a7e649ddc285459fd9e69eb1b5f60988ce60c115d29961439b90cdd5fae8",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/argspec/l2_interfaces",
+ "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/l2_interfaces/__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/l2_interfaces/l2_interfaces.py",
+ "name": "plugins/module_utils/network/eos/argspec/route_maps/route_maps.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "65c41dc95f80ca90d8833a275cdb9e480a10b9a196dbe87f7f60fc52aec24cdb",
+ "chksum_sha256": "e56bf6c5fcac1647331f79af77bc2c75c80809ef6c2ff2323393094c320ff781",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/argspec/ospf_interfaces",
+ "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/ospf_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/eos/argspec/l2_interfaces/l2_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "65c41dc95f80ca90d8833a275cdb9e480a10b9a196dbe87f7f60fc52aec24cdb",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/argspec/ospf_interfaces/ospf_interfaces.py",
+ "name": "plugins/module_utils/network/eos/argspec/l2_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/argspec/lag_interfaces",
"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/argspec/lag_interfaces/lag_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "47ba1c980be914d8442a770d7e3f8d853ddd0b2f16cdf09e49626540a6b5ea54",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/argspec/route_maps/route_maps.py",
+ "name": "plugins/module_utils/network/eos/argspec/lag_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e56bf6c5fcac1647331f79af77bc2c75c80809ef6c2ff2323393094c320ff781",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/argspec/acl_interfaces",
+ "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/acl_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/eos/argspec/hostname/hostname.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "efb917c5d1ae4dda5fab13fad9f6132c614f22f1ea51046338715e8f5bdd2fa2",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/argspec/acl_interfaces/acl_interfaces.py",
+ "name": "plugins/module_utils/network/eos/argspec/hostname/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6c0046bf6afab4a996e33f24201ed519569eb08acbf16761b5b11a314533c0d3",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/argspec/lldp_global",
+ "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/lldp_global/__init__.py",
+ "name": "plugins/module_utils/network/eos/argspec/lldp_interfaces/__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/lldp_interfaces/lldp_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a7f1026b736127cb2e7700478502956fd2d82a3ae060d56843c34eeb59ed1cc3",
+ "chksum_sha256": "19867782c170d8d43dba9d1f18eaca89971df1a153528ff64ed5e0aca3251e97",
"format": 1
},
{
@@ -1457,325 +1541,325 @@
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/argspec/snmp_server",
+ "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/snmp_server/snmp_server.py",
+ "name": "plugins/module_utils/network/eos/argspec/lldp_global/__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/lldp_global/lldp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "a7f1026b736127cb2e7700478502956fd2d82a3ae060d56843c34eeb59ed1cc3",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/argspec/facts",
+ "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/facts/__init__.py",
+ "name": "plugins/module_utils/network/eos/argspec/snmp_server/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/argspec/facts/facts.py",
+ "name": "plugins/module_utils/network/eos/argspec/snmp_server/snmp_server.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f2c14a6c7b2ee25446a1d7eeda2dd5dc7acfb694719ffa90d8be271146291266",
+ "chksum_sha256": "1cfd87d2929d294b4921ef21b6db0d3e5f9eeb86ae1e997f7ed6ccb0d49d6104",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/argspec/lacp_interfaces",
+ "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/argspec/lacp_interfaces/lacp_interfaces.py",
+ "name": "plugins/module_utils/network/eos/argspec/prefix_lists/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "af428e8eafdfd3e0dd804f01995bb19ba139200c29d115f943bdea29f03cb9ba",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/argspec/lacp_interfaces/__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/argspec/acls",
+ "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/argspec/acls/__init__.py",
+ "name": "plugins/module_utils/network/eos/argspec/ntp_global/ntp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "56e9a6a4aa20da957e209497d8a486de5778d6566b9b59d01d8a753163b5455f",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/argspec/acls/acls.py",
+ "name": "plugins/module_utils/network/eos/argspec/ntp_global/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7edb5254efbad96919b6344dced7ca2825fea82ed161894fb32947c9230b5d6d",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/argspec/ntp_global",
+ "name": "plugins/module_utils/network/eos/argspec/facts",
"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/facts/facts.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "56e9a6a4aa20da957e209497d8a486de5778d6566b9b59d01d8a753163b5455f",
+ "chksum_sha256": "f2c14a6c7b2ee25446a1d7eeda2dd5dc7acfb694719ffa90d8be271146291266",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/argspec/ntp_global/__init__.py",
+ "name": "plugins/module_utils/network/eos/argspec/facts/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/argspec/lag_interfaces",
+ "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/argspec/lag_interfaces/lag_interfaces.py",
+ "name": "plugins/module_utils/network/eos/argspec/l3_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "47ba1c980be914d8442a770d7e3f8d853ddd0b2f16cdf09e49626540a6b5ea54",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/argspec/lag_interfaces/__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/argspec/vlans",
+ "name": "plugins/module_utils/network/eos/argspec/acls",
"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/acls/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7559652223d1ec6112b628ebb5ec5575ac0df8a7861c1d34e8e4383af157e972",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/argspec/vlans/__init__.py",
+ "name": "plugins/module_utils/network/eos/argspec/acls/acls.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "7edb5254efbad96919b6344dced7ca2825fea82ed161894fb32947c9230b5d6d",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/argspec/interfaces",
+ "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/argspec/interfaces/interfaces.py",
+ "name": "plugins/module_utils/network/eos/argspec/bgp_global/__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/bgp_global/bgp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "9cad63a8bae8aa7461c019d8cff5529b7a3453cdd5d37eb59050a53b94d68b3e",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/argspec/l3_interfaces",
+ "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/argspec/l3_interfaces/__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/argspec/l3_interfaces/l3_interfaces.py",
+ "name": "plugins/module_utils/network/eos/argspec/static_routes/static_routes.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0afcc24d23d35e458492c17efac75178b89d730a902907310aad2a2385c03d74",
+ "chksum_sha256": "ba889e4244aec9094d7db701cac2eb5b815f8ed0046f8a3e9c04fe6aa2fa217b",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/argspec/bgp_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/argspec/bgp_global/bgp_global.py",
+ "name": "plugins/module_utils/network/eos/argspec/logging_global/__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/logging_global/logging_global.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": "2622ca645838091e8437dd720f2ed7574015fb51171e2f1b2414baf13b16a04c",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/config/bgp_address_family",
+ "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/bgp_address_family/bgp_address_family.py",
+ "name": "plugins/module_utils/network/eos/argspec/ospf_interfaces/__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/ospf_interfaces/ospf_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "dfa1590c0c70ddef240ef5fb993014c24214e6fa4ea42a08c52b1a9144049ba1",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/config/static_routes",
+ "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/static_routes/static_routes.py",
+ "name": "plugins/module_utils/network/eos/argspec/bgp_address_family/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a9bb861e16329d067117e9cb3b0fef10a9e67a601bc95820303daf9e2b972d60",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/config/static_routes/__init__.py",
+ "name": "plugins/module_utils/network/eos/argspec/bgp_address_family/bgp_address_family.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "e219a1d388d9e62d9e5e8752ac2a6762bf30de1fe20367d9ec9e0a88c978b87d",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/config/prefix_lists",
+ "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/prefix_lists/__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/prefix_lists/prefix_lists.py",
+ "name": "plugins/module_utils/network/eos/argspec/vlans/vlans.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3d05e91016ebf5f6b8256a5118c25653c400cb61bad450fe5e046c36932ea656",
+ "chksum_sha256": "7559652223d1ec6112b628ebb5ec5575ac0df8a7861c1d34e8e4383af157e972",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/config/hostname",
+ "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/hostname/hostname.py",
+ "name": "plugins/module_utils/network/eos/argspec/lacp_interfaces/lacp_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ef3523fd8423c7145629ab9976979aec5e03bee95e211d5898e488300fe25328",
+ "chksum_sha256": "af428e8eafdfd3e0dd804f01995bb19ba139200c29d115f943bdea29f03cb9ba",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/config/hostname/__init__.py",
+ "name": "plugins/module_utils/network/eos/argspec/lacp_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/config/lldp_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/lldp_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/lldp_interfaces/lldp_interfaces.py",
+ "name": "plugins/module_utils/network/eos/argspec/ospfv3/ospfv3.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "adf36c086148185987dcdd19a201be6b090568800b814719800526329303728f",
+ "chksum_sha256": "c61585017405594b9a54868bd326c8b643bf4322fb71524aabce204162814097",
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils/network/eos/config",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
@@ -1821,150 +1905,150 @@
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/config/logging_global",
+ "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/logging_global/__init__.py",
+ "name": "plugins/module_utils/network/eos/config/interfaces/interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "0029737e5ba87bb4e877598e76612224530d61ec3bb691e14d5d50c050897fe3",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/config/logging_global/logging_global.py",
+ "name": "plugins/module_utils/network/eos/config/interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "707dc8dc34c94d1fb23ab69132240b92f96ec167938309189c1a7abb38179df2",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/config/ospfv3",
+ "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/ospfv3/__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/ospfv3/ospfv3.py",
+ "name": "plugins/module_utils/network/eos/config/acl_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "37dbf6d9294a56a3493931f12f6c963d086eac79aba42ca3ec34dd2f174ff7ce",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/config/l2_interfaces",
+ "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/l2_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/eos/config/route_maps/__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/config/route_maps/route_maps.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2a6862117f6bd1e9bf1672f8b9064d46ee1591fb666f451dd35aa5efe6e27400",
+ "chksum_sha256": "5aec84f3a36201ff7967cfb2213033e78601517c9d9e9950271e2c9d6b706ae4",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/config/ospf_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/ospf_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/eos/config/l2_interfaces/l2_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "2a6862117f6bd1e9bf1672f8b9064d46ee1591fb666f451dd35aa5efe6e27400",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/config/ospf_interfaces/ospf_interfaces.py",
+ "name": "plugins/module_utils/network/eos/config/l2_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ae0e49ac0a39b42b7e884e2f299b9ca9ac41cd7fab9477a0fcd67dbc662c5078",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/config/route_maps",
+ "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/route_maps/__init__.py",
+ "name": "plugins/module_utils/network/eos/config/lag_interfaces/lag_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "1f837132ef6cd38ae6a05e68dcc8f061e77eb811a27df2e763c26c57fdca5845",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/config/route_maps/route_maps.py",
+ "name": "plugins/module_utils/network/eos/config/lag_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/config/hostname",
"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/config/hostname/hostname.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "ef3523fd8423c7145629ab9976979aec5e03bee95e211d5898e488300fe25328",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/config/acl_interfaces/acl_interfaces.py",
+ "name": "plugins/module_utils/network/eos/config/hostname/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6d4dde06ac68d4d095efecb55bde60c39d70a82219586d244d2067de19ba81a",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/config/lldp_global",
+ "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/lldp_global/__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/lldp_global/lldp_global.py",
+ "name": "plugins/module_utils/network/eos/config/lldp_interfaces/lldp_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "27d08d64512225b47da179d0e081fc0608f1f48cd8cccab963e955e08df2c774",
+ "chksum_sha256": "adf36c086148185987dcdd19a201be6b090568800b814719800526329303728f",
"format": 1
},
{
@@ -1975,66 +2059,66 @@
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/config/snmp_server",
+ "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/snmp_server/snmp_server.py",
+ "name": "plugins/module_utils/network/eos/config/lldp_global/__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/lldp_global/lldp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "27d08d64512225b47da179d0e081fc0608f1f48cd8cccab963e955e08df2c774",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/config/lacp_interfaces",
+ "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/config/lacp_interfaces/lacp_interfaces.py",
+ "name": "plugins/module_utils/network/eos/config/snmp_server/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a9703e96ab5eda5b95d5c0069333b89dc0ff157359b1fbcdc912e8ee5e451631",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/config/lacp_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/eos/config/snmp_server/snmp_server.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "486843b85b3910419ae61b299ee310dcea42eba21d65bd9158b43dc65f3dcdd3",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/config/acls",
+ "name": "plugins/module_utils/network/eos/config/prefix_lists",
"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/prefix_lists/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/config/acls/acls.py",
+ "name": "plugins/module_utils/network/eos/config/prefix_lists/prefix_lists.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1a6be42cb681d771db7a2ed06959b2f4b5efb781ed41358f11c6f00a576ed7c8",
+ "chksum_sha256": "3d05e91016ebf5f6b8256a5118c25653c400cb61bad450fe5e046c36932ea656",
"format": 1
},
{
@@ -2059,465 +2143,465 @@
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/config/lag_interfaces",
+ "name": "plugins/module_utils/network/eos/config/l3_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/l3_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1f837132ef6cd38ae6a05e68dcc8f061e77eb811a27df2e763c26c57fdca5845",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/config/lag_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/eos/config/l3_interfaces/l3_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "02bfd7533ef86f4474fb202a0cd6d710ae65bd35c68b2e25f0c4b3410ea93c29",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/config/vlans",
+ "name": "plugins/module_utils/network/eos/config/acls",
"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/acls/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "731a58d75154de32049ade89361dc64cdfcf2153ef27f37fac8ac21ad9570f4a",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/config/vlans/__init__.py",
+ "name": "plugins/module_utils/network/eos/config/acls/acls.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "1a6be42cb681d771db7a2ed06959b2f4b5efb781ed41358f11c6f00a576ed7c8",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/config/interfaces",
+ "name": "plugins/module_utils/network/eos/config/bgp_global",
"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/bgp_global/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0029737e5ba87bb4e877598e76612224530d61ec3bb691e14d5d50c050897fe3",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/config/interfaces/__init__.py",
+ "name": "plugins/module_utils/network/eos/config/bgp_global/bgp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "c81b5c555f1df05264b446bf4697ca1e25ecef7464d10ef217584f34a12ed6ea",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/config/l3_interfaces",
+ "name": "plugins/module_utils/network/eos/config/static_routes",
"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/static_routes/__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/static_routes/static_routes.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "02bfd7533ef86f4474fb202a0cd6d710ae65bd35c68b2e25f0c4b3410ea93c29",
+ "chksum_sha256": "a9bb861e16329d067117e9cb3b0fef10a9e67a601bc95820303daf9e2b972d60",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/config/bgp_global",
+ "name": "plugins/module_utils/network/eos/config/logging_global",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/config/bgp_global/bgp_global.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c81b5c555f1df05264b446bf4697ca1e25ecef7464d10ef217584f34a12ed6ea",
- "format": 1
- },
- {
- "name": "plugins/module_utils/network/eos/config/bgp_global/__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/module_utils/network/eos/eos.py",
+ "name": "plugins/module_utils/network/eos/config/logging_global/logging_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "779df2cf7e60b4788a6c84848b7fbf892aa12e793d7f1e325cdafbe2d87ef114",
+ "chksum_sha256": "707dc8dc34c94d1fb23ab69132240b92f96ec167938309189c1a7abb38179df2",
"format": 1
},
{
- "name": "plugins/module_utils/network/eos/utils",
+ "name": "plugins/module_utils/network/eos/config/ospf_interfaces",
"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/ospf_interfaces/__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/ospf_interfaces/ospf_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3f7d9467ef57217864bdc55cd3cf38c58744ff24a124b7cb06f6914adcc67196",
+ "chksum_sha256": "ae0e49ac0a39b42b7e884e2f299b9ca9ac41cd7fab9477a0fcd67dbc662c5078",
"format": 1
},
{
- "name": "plugins/action",
+ "name": "plugins/module_utils/network/eos/config/bgp_address_family",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/action/bgp_global.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/lacp.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/vlans.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/eapi.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/lag_interfaces.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/l2_interface.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/user.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/interfaces.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/linkagg.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/bgp_address_family.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/system.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/static_routes.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6",
+ "name": "plugins/module_utils/network/eos/providers",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/action/l3_interface.py",
+ "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/hostname.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/lacp_interfaces.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/logging.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6",
+ "name": "plugins/module_utils/network/eos/providers/cli",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/action/ntp_global.py",
+ "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/snmp_server.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/__init__.py",
+ "name": "plugins/module_utils/network/eos/providers/cli/config/bgp/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/action/interface.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": "plugins/action/ospfv3.py",
+ "name": "plugins/module_utils/network/eos/providers/cli/config/bgp/address_family.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6",
+ "chksum_sha256": "bf393826b172df53d3cd8d0b59a39e4c8020bce080b6ea6d11ca5cdc305de992",
"format": 1
},
{
- "name": "plugins/action/route_maps.py",
+ "name": "plugins/module_utils/network/eos/providers/cli/config/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/action/bgp.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6",
+ "name": "plugins/terminal",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/action/l2_interfaces.py",
+ "name": "plugins/terminal/eos.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6",
+ "chksum_sha256": "6966d43cd1b18aa12c7abdd37278000985b69d3ffe827ed250146825246c40d3",
"format": 1
},
{
- "name": "plugins/action/command.py",
+ "name": "plugins/terminal/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/action/acl_interfaces.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6",
+ "name": "plugins/cliconf",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/action/ospfv2.py",
+ "name": "plugins/cliconf/eos.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6",
+ "chksum_sha256": "9252eb6292c7ad1b785ab029492cd65d36c3080f1a49f7e54563f1afdea23cda",
"format": 1
},
{
- "name": "plugins/action/config.py",
+ "name": "plugins/cliconf/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/action/eos.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6",
+ "name": "plugins/filter",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/action/acls.py",
+ "name": "plugins/filter/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/action/static_route.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6",
+ "name": "meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/action/lldp.py",
+ "name": "meta/runtime.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6",
+ "chksum_sha256": "5f6d803f340cd245abf00d69ccbb608eacf9c579536edde378c3416bbabb2c53",
"format": 1
},
{
- "name": "plugins/action/l3_interfaces.py",
+ "name": ".ansible-lint",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6",
+ "chksum_sha256": "d24c42e934dbb40a90a121d3dc31d4583c1781386ceb3a19c0401e2aa1295171",
"format": 1
},
{
- "name": "plugins/action/ospf_interfaces.py",
+ "name": ".pre-commit-config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6",
+ "chksum_sha256": "d13352770609525d83bf97a2a2100f02ebe67bbef09b25f201ac7dffa77a0a75",
"format": 1
},
{
- "name": "plugins/action/lldp_interfaces.py",
+ "name": "pyproject.toml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6",
+ "chksum_sha256": "1cb6a45dfa2625123890b93ad7fdc156b063c16e8ae6dba11511a1d1986b0fcc",
"format": 1
},
{
- "name": "plugins/action/logging_global.py",
+ "name": "README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6",
+ "chksum_sha256": "2bda8fcbebb01f38af1b1af69787d2bac8549743b8d121b6bdfdf1fab1338665",
"format": 1
},
{
- "name": "plugins/action/prefix_lists.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6",
+ "name": "changelogs",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/action/vlan.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6",
+ "name": "changelogs/fragments",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/action/banner.py",
+ "name": "changelogs/fragments/.keep",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/action/vrf.py",
+ "name": "changelogs/config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6",
+ "chksum_sha256": "03ddb712fc00dcdde125bd062a4fffc3ce5846d43ac90c3191c8ac8da4196303",
"format": 1
},
{
- "name": "plugins/action/facts.py",
+ "name": "changelogs/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6",
+ "chksum_sha256": "4467d07b9c09292415a9aa68144fc31d33ec2c357f41145186458a425a8712a1",
"format": 1
},
{
- "name": "plugins/action/lldp_global.py",
+ "name": ".isort.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6",
+ "chksum_sha256": "0ac83124be8cf24f40e7457c3a7ede4409108ee8caa89976cdb03d6d1ae336d1",
"format": 1
},
{
- "name": ".ansible-lint",
+ "name": ".yamllint",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b47f72e159f93a5ff07ea2534752e0fa977b214e9ac05c667fa83ac13be4e50c",
+ "chksum_sha256": "827ef9e031ecdcaf137be239d33ef93fcbbc3611cbb6b30b0e507d0e03373d0e",
"format": 1
},
{
"name": "test-requirements.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e8467be9cdbc47d5456dc3d15b1fb6821f730b7e4ceafac79bddf466a38eb053",
- "format": 1
- },
- {
- "name": ".vscode",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "ca239357ead93fd66122e6781f5cfc2cadff458397215db66775c312fd79a2a9",
"format": 1
},
{
- "name": ".vscode/settings.json",
+ "name": ".prettierignore",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "689cb2b210cace81743b1da8f00db7a4a7027b193dc85b17be2918b6f9977bfe",
+ "chksum_sha256": "29d6205739f8fa2ea1dfb82777cc64dd269e51fe58c7c713682f71ac8b1973c4",
"format": 1
},
{
@@ -2528,2873 +2612,2810 @@
"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",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8c562d6941e7798adfb9f88ff0791f32d9e867dcd22292a4d8041c32585285a1",
- "format": 1
- },
- {
- "name": "tests/sanity/ignore-2.13.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "eef9f110ac24f19f2bd0d195d6ab988d986929ea42f869864ba19a025c882e40",
- "format": 1
- },
- {
- "name": "tests/sanity/ignore-2.11.txt",
+ "name": "tests/integration/target-prefixes.network",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7c9647b2dee513f57df36fee1897a54856aeba3b5fed24f2b7d6612b225ead63",
+ "chksum_sha256": "ec96e8ef2e9e3856cae9bbefb51f64492bd044f17d17310cc560ec990ab14468",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.10.txt",
+ "name": "tests/integration/network-integration.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7c9647b2dee513f57df36fee1897a54856aeba3b5fed24f2b7d6612b225ead63",
+ "chksum_sha256": "d67b11263a8f50b30bf43c7c2b4bdd8dc4f173f0b5dd22761311360dfbd56a1d",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.14.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "eef9f110ac24f19f2bd0d195d6ab988d986929ea42f869864ba19a025c882e40",
+ "name": "tests/integration/targets",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/sanity/ignore-2.17.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "eef9f110ac24f19f2bd0d195d6ab988d986929ea42f869864ba19a025c882e40",
+ "name": "tests/integration/targets/eos_lldp",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/sanity/ignore-2.16.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "eef9f110ac24f19f2bd0d195d6ab988d986929ea42f869864ba19a025c882e40",
+ "name": "tests/integration/targets/eos_lldp/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/sanity/ignore-2.12.txt",
+ "name": "tests/integration/targets/eos_lldp/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7c9647b2dee513f57df36fee1897a54856aeba3b5fed24f2b7d6612b225ead63",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.15.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "eef9f110ac24f19f2bd0d195d6ab988d986929ea42f869864ba19a025c882e40",
+ "name": "tests/integration/targets/eos_lldp/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/config.yml",
+ "name": "tests/integration/targets/eos_lldp/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "de5087316490411841c67aa3307cfdd3acaea09875c9b4dee6852bca7c120764",
+ "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
"format": 1
},
{
- "name": "tests/unit",
+ "name": "tests/integration/targets/eos_lldp/tests",
"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/eos_lldp/tests/eapi",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/__init__.py",
+ "name": "tests/integration/targets/eos_lldp/tests/eapi/basic.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "f7b48fe0eac8caa3e2d627764dfa3fb2a4d9ccb00db62e4fad31670c2a390671",
"format": 1
},
{
- "name": "tests/unit/mock",
+ "name": "tests/integration/targets/eos_lldp/tests/cli",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/mock/vault_helper.py",
+ "name": "tests/integration/targets/eos_lldp/tests/cli/basic.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "55bd0e924dcc22d050612c944bff0ef745e51faac9260dce9b9b2018c4c8a661",
+ "chksum_sha256": "53b18d54488b69edfd167f85e21b91301fdea473379481f5d96be206edd7124f",
"format": 1
},
{
- "name": "tests/unit/mock/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "name": "tests/integration/targets/eos_lldp/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/mock/procenv.py",
+ "name": "tests/integration/targets/eos_lldp/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d0f54fd298f7888bfada6f867ee0f883f776a368916410abe2e5d31b8d17faec",
+ "chksum_sha256": "6c58c665f3d46c7e382b12352535b4c300ea576b2c8e2e075b93a6ce18f2031b",
"format": 1
},
{
- "name": "tests/unit/mock/loader.py",
+ "name": "tests/integration/targets/eos_lldp/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bea80cf14afd91d02e652a3a395bed3d74fdf373d12d5af6a41daf5516646663",
+ "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5",
"format": 1
},
{
- "name": "tests/unit/mock/yaml_helper.py",
+ "name": "tests/integration/targets/eos_lldp/tasks/eapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4dbe503c0585b634f72b82eef6b9f8d078ae383ed865bb016db31992dac97600",
+ "chksum_sha256": "1b14bb0d83e5f509721d34f537bb0812798e5b3d3ad6794f1cb7314c8a419202",
"format": 1
},
{
- "name": "tests/unit/mock/path.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "44b6e5b20c52ab9f4f57eaf79948d7ce9b6fa0546ae7d103abaa3bbfa66c5f19",
+ "name": "tests/integration/targets/eos_bgp_global",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules",
+ "name": "tests/integration/targets/eos_bgp_global/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/__init__.py",
+ "name": "tests/integration/targets/eos_bgp_global/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/unit/modules/conftest.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e0ae70fa7c2a5e56d7f02a47c3602398cff60c8eb021772ac59a76df2a234048",
+ "name": "tests/integration/targets/eos_bgp_global/vars",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/utils.py",
+ "name": "tests/integration/targets/eos_bgp_global/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1e9c58b776c4d76cfc671ebfddb1a290a50af7dd0aa1b69b2ad1c5ae1b2545b7",
+ "chksum_sha256": "a1c6b658736d10bad13d5b973aa9955f414ef50fa30aa23a890374ab544a2f3b",
"format": 1
},
{
- "name": "tests/unit/modules/network",
+ "name": "tests/integration/targets/eos_bgp_global/templates",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/__init__.py",
+ "name": "tests/integration/targets/eos_bgp_global/templates/populate_af.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "a890c9293ff8120b194c107a6f70bdca6d62433ed701398a8214feaecb42bba6",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos",
+ "name": "tests/integration/targets/eos_bgp_global/templates/populate.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "cbb352548a62d123453d921de875e2acb84594a405ddafe0c04460de66e62928",
+ "format": 1
+ },
+ {
+ "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_acl_interfaces.py",
+ "name": "tests/integration/targets/eos_bgp_global/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dc656eddee1d1e7d1e19f853e822ddd2e3278e8bbd2d3b3b3dbdb1b92ef881a7",
+ "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
"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_bgp_global/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/test_eos_static_routes.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9bff61e7421e9ead114f758cedede3e348e783e5b8962a4efc1737926a95a319",
+ "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/test_eos_user.py",
+ "name": "tests/integration/targets/eos_bgp_global/tests/common/_populate.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5c25ffa2c6c9151aa2917352cead5c31e710b989f478cbf1b2633414d8267d7c",
+ "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/eos_module.py",
+ "name": "tests/integration/targets/eos_bgp_global/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b3f4714ae9af0063ed76f955c15e8492b3f7d69ecc52b3c1e139f49f2a0ea4d4",
+ "chksum_sha256": "de7a1434091a39ef8cc7b4dd5439d3b37ae5b77a68f90ff04d5a83160cdbfc9b",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/test_eos_l3_interfaces.py",
+ "name": "tests/integration/targets/eos_bgp_global/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f0cd14e440fa9fde8c41f357b4349ecfb990b3e55079a95ee85c1047adf82bb6",
+ "chksum_sha256": "58ef58d4be3aa6e9478afcdb9010c490d331d3523a5d4804a0a68f3d1555d9d9",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/test_eos_bgp_global.py",
+ "name": "tests/integration/targets/eos_bgp_global/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "82670df14b058649c33891ba1a4c3bfdfda6ef39a1d199244626d9f051bf6675",
+ "chksum_sha256": "5c0343e2441998a70cccd7a221674cd22a585a30cb660edf3089ac0b090e798f",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/test_eos_command.py",
+ "name": "tests/integration/targets/eos_bgp_global/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e22eb99b373411967bf240388b482c5bdfe4448b00f963a6fbf0081517bca097",
+ "chksum_sha256": "5d8689ef6e49ccbba62ad1ebc44268ac6d8f82c7f001b21251b5d09c7ec7d32b",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/test_eos_lag_interfaces.py",
+ "name": "tests/integration/targets/eos_bgp_global/tests/common/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cba4b3add8c9d73648c923686cef9d7f824fdc4e73df92e831265b2e809e1744",
+ "chksum_sha256": "cbb352548a62d123453d921de875e2acb84594a405ddafe0c04460de66e62928",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/test_eos_ospfv2.py",
+ "name": "tests/integration/targets/eos_bgp_global/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "80ac2358e9441421006c95dfa8e0cde4fb72187c00abd27f1e90ffa887663365",
+ "chksum_sha256": "4d04fc66d72fa6c188227956f100f60c5653c829ef71f493379e1aaaed85fb60",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/test_eos_snmp_server.py",
+ "name": "tests/integration/targets/eos_bgp_global/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a8a1c34ad13c8b2fc1094b04fedd2d647e7dc8a5f067988a4739b3d84c076a29",
+ "chksum_sha256": "36c8fb15c11b0806cf005745d3430a56d953e9f6780a7cef5aafd2a09a0535ad",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/test_eos_lacp_interfaces.py",
+ "name": "tests/integration/targets/eos_bgp_global/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "70ae233aea97e698eecf3bd6bea988be6424762c798f685fafb45c23a850b75d",
+ "chksum_sha256": "02c017ff36027b957a2682c52ba544c014969f9b4ed9e9a725981a818191cd7b",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/test_eos_interfaces.py",
+ "name": "tests/integration/targets/eos_bgp_global/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6268f4ef47c8ae2582c0a4493cd2dab406ad317073fa51d33db5363714e991b9",
+ "chksum_sha256": "6fd9e647d40d57feb5aa630c4ad460edcc0a5053310451f19ede0fd8d741ffe3",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/__init__.py",
+ "name": "tests/integration/targets/eos_bgp_global/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "c43d6297de44a8d0ff51684af71b0f6837eaaa5d475561572902e6683b194247",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/test_eos_bgp.py",
+ "name": "tests/integration/targets/eos_bgp_global/tests/common/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "46cf0755d9c960c529dc800d9d05a42491ab167c1a5308c0b7ae11f04e1c8715",
+ "chksum_sha256": "f749361ee14f98e79fa6a1f95335d7c2e66d2c28f517b1852b5b7f4cfbb9d429",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/test_eos_acls.py",
+ "name": "tests/integration/targets/eos_bgp_global/tests/common/purged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8c8ec6d225cf7b4fe555df3f8b0496cbc214d8cd7d0eea0077e7b6939abc593c",
+ "chksum_sha256": "7c4383c852e0367d67b96145d03829375611f90a60fa91aebf9ae41e7f8de1d2",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/test_eos_l2_interfaces.py",
+ "name": "tests/integration/targets/eos_bgp_global/tests/common/_populate_af.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "02074974c27359bbd52ba8d27eda47a1c212abc5bfb2189e1384b34698286f8f",
+ "chksum_sha256": "4f02550439ab2971f3dedc3958ee676bf2f3dd53532dca527bc619cf2f1a1d9e",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/test_eos_ospf_interfaces.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8815ea63958a8ff0e2be4f247efe981ea816db5668ea2f6fe15cd719a863e875",
+ "name": "tests/integration/targets/eos_bgp_global/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/test_eos_vlans.py",
+ "name": "tests/integration/targets/eos_bgp_global/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6867734a8347edfe2b6ec59b80effe6cb821ed8092009502476b9f1bf7dce55c",
+ "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/test_eos_logging.py",
+ "name": "tests/integration/targets/eos_bgp_global/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c2aaac1a0154b77aadf3845c8222783d731cec4595c5b795c9d10654d54449de",
+ "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/test_eos_lldp_global.py",
+ "name": "tests/integration/targets/eos_bgp_global/tasks/eapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "606176c03a6d9a7e8414b4b432cb09112c00727e2fad9af2a5409a70faa4f040",
+ "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/test_eos_bgp_address_family.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "95e130c9d56b7b425c88a68932ae20fe75971f08455030fc6597f92d9bf7b666",
+ "name": "tests/integration/targets/eos_eapi",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/test_eos_route_maps.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "64c5e7252ff26e97a830919c94b339097fe2efacfded5072b7c47783deae9bd1",
+ "name": "tests/integration/targets/eos_eapi/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/test_eos_prefix_lists.py",
+ "name": "tests/integration/targets/eos_eapi/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dc8288bf978fd5a41ce1b5ede8df2cdeb53e034fca88e864dd1384c31df0fb8e",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/test_eos_lacp.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "50ed02ab288dbc74ddcf9c0d1b22f3871f21ffcb71a0d22c8b5c023175c31510",
+ "name": "tests/integration/targets/eos_eapi/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/test_eos_config.py",
+ "name": "tests/integration/targets/eos_eapi/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2226be54468edd007e582baa0bb937f2ad19460b0904084500b632388f55bfc4",
+ "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures",
+ "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_eapi_show_mgmt.json",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "963dde77e29e22955f66b6d4a4d880c327419e3c719556219b19cf2d9d515c07",
- "format": 1
- },
- {
- "name": "tests/unit/modules/network/eos/fixtures/eos_bgp_config.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7011ff501cdde31949153491b1f1092e8d8afa6a27510ab594deb1504403c2d0",
+ "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_config_config_updated.cfg",
+ "name": "tests/integration/targets/eos_eapi/tests/cli/stop.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "199f6fddff67988e4e15efde118949a06623ac6cda6cc56a43110fab3da655d9",
+ "chksum_sha256": "70621105e0b6c97e34047f0ce8408da1cb5e03868c8678df2f28bcf817c57527",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures/eos_eapi_show_mgmt_unconfigured.json",
+ "name": "tests/integration/targets/eos_eapi/tests/cli/off.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "09f3bdc48ce35e7200a5a5da2f2722dff46de4bd8ebc1d1718fa4ed7a08310df",
+ "chksum_sha256": "593ed779304b25cb537ca13fc88e95a91a938109f5d5f9f6722a29f37573c040",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures/eos_l2_interfaces_config.cfg",
+ "name": "tests/integration/targets/eos_eapi/tests/cli/on.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "501ad2cead9d2a90aa7529319befbf62a4f58f7988995788c5206c90fbec5afc",
+ "chksum_sha256": "626f6ef04d9b5eeec3c2633d9517c0c632fe4b758470326278e7df918eec58c1",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures/eos_route_maps_config.cfg",
+ "name": "tests/integration/targets/eos_eapi/tests/cli/start.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "64a5a2e160aff448bb567d8d4fdba4c3231f85ab0b44e2f596fe2784148e8554",
+ "chksum_sha256": "66702395e736d29c01bdfcf6f45a349937108ce757696dde4cef46ca1986ba7c",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures/eos_ospfv3_config.cfg",
+ "name": "tests/integration/targets/eos_eapi/tests/cli/vrf.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "97763a63f53b38b8c864ed38f800e4270d600065cdd4acde805c3b1ca384e6b5",
+ "chksum_sha256": "64545c869099218860beec3678baf8209b39d66a5841128afafc15775a6e9eff",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures/eos_ospfv2_config.cfg",
+ "name": "tests/integration/targets/eos_eapi/tests/cli/badtransport.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c4e0126af072bca2ca99eb356d26868e44adae27ffa3622f54fc431122e66ace",
+ "chksum_sha256": "1620fab5693bd0fb373e2d53372188eb73a2fe5a3d389b11052ea42df490ee26",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures/eos_lag_interfaces_config.cfg",
+ "name": "tests/integration/targets/eos_eapi/tests/cli/configure.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "996743ab19a23f6fbb30754d1f4beb2911c6b4ffa69a28665dfc79b5ad519b65",
+ "chksum_sha256": "6efb0ff5e69c8eb46e1101343bc93272549578ad68a74fede9781a99bfb5983a",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures/eos_ospf_interfaces_config.cfg",
+ "name": "tests/integration/targets/eos_eapi/tests/cli/config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2c664a8713d7ccd543333cca425528c1726d6790b8364bdd6a5e8720ce4183be",
+ "chksum_sha256": "37b279c3fc0c94ed140a3e3890e309424710bcd35856f31b4211d5e7841f4656",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures/eos_ospfv3_config_gather.cfg",
+ "name": "tests/integration/targets/eos_eapi/tests/cli/zzz_reset.1",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "091b340fe2578196b84cd9b133d0cc01e479a27a12caeb2a796355c571a39cb4",
+ "chksum_sha256": "01cd53e28355e0d65ba10accb15c95a17f824555796003f0225d7879a40382e9",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures/eos_config_candidate.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3352c8002ead9454c96fa97e82bc2bf245ac57a69edbf8a934bed4ef809de3de",
+ "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_acl_interfaces_config.cfg",
+ "name": "tests/integration/targets/eos_eapi/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "29bdd16b7032ccf6dd42d4c2e78ebe00aaaf155ea7f5d9049c638f742478f312",
+ "chksum_sha256": "8d0f3e120b5e0f83314d06ed429b515b98e122ebdd4111b4e5be0bf09098877c",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures/eos_static_routes_config.cfg",
+ "name": "tests/integration/targets/eos_eapi/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9de7fbc93c152431ec2baf2f7c8ba736ced12148e8bff2e7b54eb7dd39c4b04d",
+ "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5",
"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_vrf",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures/eos_l3_interfaces_config.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0989f0ad8aea46b6b4b7111aee264687387c44e8cc68154f8d9c054d22581d1d",
+ "name": "tests/integration/targets/eos_vrf/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures/eos_bgp_global_af_config.cfg",
+ "name": "tests/integration/targets/eos_vrf/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dd5318703b4822b5a27eb24bb0d1898c7e5559e96151114784e5a5e92d07f535",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures/eos_vlan_config.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6e71249b2afca7c80191a77d86753e21419042d51d570de0b3c717a204f01400",
+ "name": "tests/integration/targets/eos_vrf/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures/eos_command_show_version.txt",
+ "name": "tests/integration/targets/eos_vrf/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cd0ee8985d66e4cff1ebeff617108414d701cdb2acebf9327329f62e093f7062",
+ "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "name": "tests/integration/targets/eos_vrf/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures/eos_logging_global_config.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "616869cf79f4faf6f64276e039fbcad728d3e012eba2073b118b0296d9334013",
+ "name": "tests/integration/targets/eos_vrf/tests/cli",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures/eos_lldp_global_config.cfg",
+ "name": "tests/integration/targets/eos_vrf/tests/cli/basic.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "41eb838c679e2fd974f15bd92461a1627b29a0f2b8b1c5a5c3fef8a472efaad3",
+ "chksum_sha256": "cea011f04a3c8f2d06c412f8512259c89a2e3a57b55effeef99fa45434d9be15",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures/eos_interfaces_config.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "05edee2806d57e1a907026a24ea0fd51582008c1d24b63c5fc1463e86204683e",
+ "name": "tests/integration/targets/eos_vrf/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures/eos_ntp_global_config.cfg",
+ "name": "tests/integration/targets/eos_vrf/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1c841ab014af5105c26d977cfcac4de50919a8537bf632698f95e5ea5f2b5c0b",
+ "chksum_sha256": "8e0a1de7edebf8e1de1b1bd68c83fa3e6669085f9cd28e417cbb11f43da75068",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures/eos_bgp_global_config.cfg",
+ "name": "tests/integration/targets/eos_vrf/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3cef54b0f53689ccdd9a9de7e3d23fa7fa591582506b438f1b628752b5b0847b",
+ "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures/eos_snmp_server_config.cfg",
+ "name": "tests/integration/targets/eos_vrf/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "955317964226d2639660f6006be99a9c1d67e3a8dcea25ba7b2c4a569059a4f9",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures/eos_hostname_config.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "55cfe4746ef24943eac865d5b0fd9b6a6884e0e529983e253d5764175c01c6e9",
+ "name": "tests/integration/targets/eos_lag_interfaces",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures/eos_banner_show_banner.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "dc2e6349862de27bfb1d50da78684b7b6320c6c8626a7ae378ce07852d64f984",
+ "name": "tests/integration/targets/eos_lag_interfaces/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures/eos_lacp_config.cfg",
+ "name": "tests/integration/targets/eos_lag_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5a89a5f03e68185c4a50f5410ea4fb04caca756685c8d906c1b4558fa52896aa",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures/eos_prefix_lists_config.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ed6dda06d2158651429f03d9db644514e20f89e6d3c58331fc09e059c76a22ff",
+ "name": "tests/integration/targets/eos_lag_interfaces/vars",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures/eos_eapi_show_vrf.text",
+ "name": "tests/integration/targets/eos_lag_interfaces/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a43e222ce4d0e6aec92afabb2d5ff7f6cc7fd96ce4e055b6ffc02ad1492373d5",
+ "chksum_sha256": "594c6341406e70e47b7f9a9af53f481c6876cea084a03beca4068406e59f149c",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures/eos_logging_config.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d35c0e1702f10694008ce77f2d405c569d3745738fa4ceab306cdb638f5b465d",
+ "name": "tests/integration/targets/eos_lag_interfaces/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures/eos_lacp_interfaces_config.cfg",
+ "name": "tests/integration/targets/eos_lag_interfaces/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "414cc25eb0be567529b328993c191ea1f282c2620ff5f45b57462ec7e950ddca",
+ "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures/eos_bgp_af_config.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9cfca9294069868122bcad8e9a7bcfdfd6101949fd9959ec32766b682f635a68",
+ "name": "tests/integration/targets/eos_lag_interfaces/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"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_lag_interfaces/tests/cli",
+ "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_lag_interfaces/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2b11830bd90b2c0e492cba03f0af73a5229a4723e47959812544961bde1ac438",
+ "chksum_sha256": "c49e1972ec01b3646c6d93d8dce2d3672048797e780cd160b4b721a08b348d89",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures/eos_system_config.cfg",
+ "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d1cb12a14186402c703d639d484b7ea9829e52f9159afac4f7779bd396f5e43f",
+ "chksum_sha256": "0a09e158385c2158469622bdd80fbaacde054cc03c780e2f895973c59413eb38",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures/eos_ospfv2_config_gather.cfg",
+ "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6271cc911105743891d46bde906d969ad2ce562d8bfa9364d845da33cb9c3bde",
+ "chksum_sha256": "b05efe5f17248475b35be8de1008f92763eabc0a46f7e6e6ef721d0ed1c0d005",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/fixtures/eos_static_routes_config1.cfg",
+ "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "22d8eb393f411a1034b6d77b5137ca205b1d01b09a6488c5c30199145b99bf7c",
+ "chksum_sha256": "bb70b82e4f2780065245088e2a0868d4bd3ac4d78772c3533772904502384b7f",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/test_eos_hostname.py",
+ "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d475c839bd9eec611ad9226f604113e43f3ee337f7ae1fa839a5cd7812c74d99",
+ "chksum_sha256": "e8dd392df3bb210172a0fb991fafc904367293cc00e7dbdd2289ab477d58011b",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/test_eos_ntp_global.py",
+ "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f5c329f3a991e1aef099556f1b128a6d31e6bc16c160c8df7ac9c311278c6a3d",
+ "chksum_sha256": "b58309f8938bba932257668c1dd8e88057583702dd483304b451dc2bcb3d2389",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/test_eos_eapi.py",
+ "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/_reset_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "55469a55bf8e298dc208f9a8d85fe7a50d4b0e38979b1e8e68601b04455ad5a3",
+ "chksum_sha256": "e67fbf115a90966048b5dd75e61b370f6001fdebaf1da0c8cd8670e7593ef086",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/test_eos_system.py",
+ "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d70923c1e52358c5aca24ec7db07df4fc7f35482f9167494f5239ecd8b835ff9",
+ "chksum_sha256": "d4e9b522c4e33d097cea87a3bfbdb7d7c0420be389b4b2ae4b0ec2c1dc9c1589",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/test_eos_logging_global.py",
+ "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2a4e09637aeb8e41fbadb07cd02b0006f9a5c7ca1404ef912177a383f9e3a614",
+ "chksum_sha256": "ac0aaba7718ec98d92a4b78ded3ee5dd5c7b0f7bbf4eb62a00200769ebd84362",
"format": 1
},
{
- "name": "tests/unit/modules/network/eos/test_eos_banner.py",
+ "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "53e44aeafc087453c5a441b201e08dd8b11058cfc88f0b89fa60d9afaa8d2e44",
+ "chksum_sha256": "ec7f5172df48561a7661707c31befc2372876e79536cf8452cce42131e26efa3",
"format": 1
},
{
- "name": "tests/unit/compat",
+ "name": "tests/integration/targets/eos_lag_interfaces/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/compat/unittest.py",
+ "name": "tests/integration/targets/eos_lag_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "727203a3846be41893b78a4b77852a1658925e936fb19539551958a5d8e8fb81",
+ "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e",
"format": 1
},
{
- "name": "tests/unit/compat/__init__.py",
+ "name": "tests/integration/targets/eos_lag_interfaces/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "f53f0ae420b815a40999516a0df43dbf6be6478362d4fd00f938647cd31ea997",
"format": 1
},
{
- "name": "tests/unit/compat/mock.py",
+ "name": "tests/integration/targets/eos_lag_interfaces/tasks/eapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4e0ca26e6e2982bc40db782db3a0d4950e8c5a749171c0da22c27c85acd23ea",
+ "chksum_sha256": "6d01e053990d738bcb911756ab9be2a7659b592d0841d98a1efbe9f4abb2528c",
"format": 1
},
{
- "name": "tests/integration",
+ "name": "tests/integration/targets/eos_prefix_lists",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets",
+ "name": "tests/integration/targets/eos_prefix_lists/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_prefix_lists/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_prefix_lists/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp_global/tasks/main.yaml",
+ "name": "tests/integration/targets/eos_prefix_lists/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e",
+ "chksum_sha256": "fbdeab37387d1fd29e31ca469d49a5297e3fe095e30c0a02dd0f402a7bfe87a7",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp_global/tasks/cli.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f53f0ae420b815a40999516a0df43dbf6be6478362d4fd00f938647cd31ea997",
+ "name": "tests/integration/targets/eos_prefix_lists/templates",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp_global/tasks/eapi.yaml",
+ "name": "tests/integration/targets/eos_prefix_lists/templates/populate.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6d01e053990d738bcb911756ab9be2a7659b592d0841d98a1efbe9f4abb2528c",
+ "chksum_sha256": "f41196dd12570c02dff69372f0539ac676553a8c97da1637db552399aa691fcd",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp_global/meta",
+ "name": "tests/integration/targets/eos_prefix_lists/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_prefix_lists/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_prefix_lists/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp_global/defaults/main.yaml",
+ "name": "tests/integration/targets/eos_prefix_lists/tests/common",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/eos_prefix_lists/tests/common/_populate.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp_global/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/eos_prefix_lists/tests/common/parsed.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "40293ea4167e097760e7aeb5b43e229510ef4eefe55161f18756aea2410aca32",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp_global/tests/common",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/eos_prefix_lists/tests/common/rendered.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "412ce27b1e535cfda5876456c2355d78a394ef0db13ba99c334f632732efb388",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp_global/tests/common/deleted.yaml",
+ "name": "tests/integration/targets/eos_prefix_lists/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b4cce5198a2d66a44e8775b311ff670c877aed0d7d37c5f7b43d843f0f1e1f08",
+ "chksum_sha256": "75d1ef4096be7283925fda58180d9f70f9bbb42cc023228ee6bf69aab00052c8",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp_global/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/eos_prefix_lists/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4ac4431a75c62d1a70050d834f822be901e87b57cf6178b14069bd0dba8a95fe",
+ "chksum_sha256": "1246641c583926029ffa31cf7d9f68a5a3b5d9b6c3426323965a7ace18308646",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp_global/tests/common/empty_config.yaml",
+ "name": "tests/integration/targets/eos_prefix_lists/tests/common/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "44cb429ba9a7352289e7ce9c1f1b46965ea1c360510d031c554472b04012c4ae",
+ "chksum_sha256": "f41196dd12570c02dff69372f0539ac676553a8c97da1637db552399aa691fcd",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp_global/tests/common/merged.yaml",
+ "name": "tests/integration/targets/eos_prefix_lists/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "61363b2fbb08af548968fd3bef7e529f5f1a15d59d8c36732c9a430488d4d2ff",
+ "chksum_sha256": "5789eb8ee641ebf96faa3beaba1360916812f0b72bf79005dacf09038224eb1b",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp_global/tests/common/_parsed.cfg",
+ "name": "tests/integration/targets/eos_prefix_lists/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0048d6a4374fade15d938c1d79b79eb8b3d95500fe31a55b8e2509b3fc39cef6",
+ "chksum_sha256": "8184f88e334762f387e4baa6b3ab70c3c160a75c861d669a89b1f2940fa0b501",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp_global/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/eos_prefix_lists/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "13d7c23ac9137d74bd2614020c8d8c585f3fb9ae30d53d8a120a1abe168d47d0",
+ "chksum_sha256": "2481891014a0b474f98bbf7691a95628da7c0897b3ee4fc8046cbc79e0f54c75",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp_global/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/eos_prefix_lists/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ecfacbd7e8e994b8e1ca0db698eb1226a9f0cdecd0bc4dcaee71466d7fa237b3",
+ "chksum_sha256": "eee19a016590fc436d8be49414f1f5bd60598eac308df3f1581ec52677c6db1a",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp_global/tests/common/_reset_config.yaml",
+ "name": "tests/integration/targets/eos_prefix_lists/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "97c3ee1287e7584f46521ddc1bd32b3f6928c6f0c2f30fb00ded22272649ab1d",
+ "chksum_sha256": "40b71ec679a26a406e66f31dc4b561a0671ffc493ead69d80c60d7a58a8bb871",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp_global/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/eos_prefix_lists/tests/common/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cb37329f298bade2c13b44af8e8036f83bdda812f2acca9eead754340be8d829",
+ "chksum_sha256": "4b607978c8e64316d6196fa19665a85a0eadbf919ccb8875644857cf9b328407",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp_global/vars",
+ "name": "tests/integration/targets/eos_prefix_lists/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_prefix_lists/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_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",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/eos_hostname",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_logging_global/tasks",
+ "name": "tests/integration/targets/eos_hostname/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_hostname/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_hostname/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_hostname/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d",
+ "chksum_sha256": "9762cc4a787aec50485af807234f50902fde96f57e6ad904e62a9588c1f61373",
"format": 1
},
{
- "name": "tests/integration/targets/eos_logging_global/meta",
+ "name": "tests/integration/targets/eos_hostname/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_hostname/templates/populate.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
+ "chksum_sha256": "55cfe4746ef24943eac865d5b0fd9b6a6884e0e529983e253d5764175c01c6e9",
"format": 1
},
{
- "name": "tests/integration/targets/eos_logging_global/defaults",
+ "name": "tests/integration/targets/eos_hostname/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_hostname/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_hostname/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_hostname/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_hostname/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_hostname/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "653a99b2d157d5894d94aacc19083fc14c76b23077a390c15c6c6ef57aea62f5",
+ "chksum_sha256": "9093ee823c0145791216cf2d53f00df72c6ba361f525b2337b6645bdb7d3e8c5",
"format": 1
},
{
- "name": "tests/integration/targets/eos_logging_global/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/eos_hostname/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "61de4747e7132e7d8e54ec9eb6443f26e2896927739607b0dc6074d5369beae3",
+ "chksum_sha256": "d89644559714c65b378af2d9a1e23c0432a2f1abd4fb09f3538f844430dc06d3",
"format": 1
},
{
- "name": "tests/integration/targets/eos_logging_global/tests/common/empty_config.yaml",
+ "name": "tests/integration/targets/eos_hostname/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7c490f97548080abda0e8ebf836466a8a6bde8787bc433c6223ba3d59fd42170",
+ "chksum_sha256": "aed726bbfbc34673f8da380cceaac909741a8a4533d1abf057afb6d9f5b0b214",
"format": 1
},
{
- "name": "tests/integration/targets/eos_logging_global/tests/common/_populate.yaml",
+ "name": "tests/integration/targets/eos_hostname/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6",
+ "chksum_sha256": "969820bbaeb224608a4aab530cbeeb88627ac039bcacf2a1942ec42705e5514d",
"format": 1
},
{
- "name": "tests/integration/targets/eos_logging_global/tests/common/merged.yaml",
+ "name": "tests/integration/targets/eos_hostname/tests/common/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f7ae7444cf6cc04a2541fabd62ec1667d165cb39ce0b7d171f6efac9e4bd7638",
+ "chksum_sha256": "55cfe4746ef24943eac865d5b0fd9b6a6884e0e529983e253d5764175c01c6e9",
"format": 1
},
{
- "name": "tests/integration/targets/eos_logging_global/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/eos_hostname/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a3027ab685c832aec9f4b8cfa8e26cc8589f25f9fc802b246d3935ab7f1206c5",
+ "chksum_sha256": "e8f9622547f2e0fa5c603e7d1e76348d76da8bac90ebfa21179749ee691cd648",
"format": 1
},
{
- "name": "tests/integration/targets/eos_logging_global/tests/common/_parsed.cfg",
+ "name": "tests/integration/targets/eos_hostname/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1340381f48cc0d4caa0403bbab7b72de9484ba5fb9efa952068ef9af8234e596",
+ "chksum_sha256": "bbd01a1b82535d87fb2c5192c045a1452c02385b1d9325bdcb8013b03f3840d5",
"format": 1
},
{
- "name": "tests/integration/targets/eos_logging_global/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/eos_hostname/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "04ab08225d0e0b263fb06ebafa021ee73c6117852c370d5266d36a5c13fff449",
+ "chksum_sha256": "36160ee5a95d8b19e314fbe8b473f56c8dc87e209f3c9394803a1b7a900f9ed4",
"format": 1
},
{
- "name": "tests/integration/targets/eos_logging_global/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/eos_hostname/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5776e2445ac71c922c12d4f1a1aa667a2c824a3e4e6653bbe6f834a1da2dec19",
+ "chksum_sha256": "079da330b620d09b22c55b8c63db98278c3347639db086a2c86f0039f2d13f35",
"format": 1
},
{
- "name": "tests/integration/targets/eos_logging_global/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/eos_hostname/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "108321fdfd99cdb6ff1b98da4741aa931453d409480f06c8c9af67e1aaae93e9",
+ "chksum_sha256": "784e0e5db4b302883890287cd2ba18d7005403f1c05be8c8c23f7d8b1f807cea",
"format": 1
},
{
- "name": "tests/integration/targets/eos_logging_global/vars",
+ "name": "tests/integration/targets/eos_hostname/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_hostname/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c2b71c8e8843f1fa24e2f0bafd6c1bd7880c076e0f5ded8086f8ac71f46955d6",
+ "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d",
"format": 1
},
{
- "name": "tests/integration/targets/eos_logging_global/templates",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/eos_hostname/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_hostname/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_ntp_global",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_eapi/tasks",
+ "name": "tests/integration/targets/eos_ntp_global/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_ntp_global/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_ntp_global/vars",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/eos_ntp_global/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5",
+ "chksum_sha256": "b44421f37fc760a771a3a602eff1724eddc44e6dc49e6275afe538587c656a3c",
"format": 1
},
{
- "name": "tests/integration/targets/eos_eapi/meta",
+ "name": "tests/integration/targets/eos_ntp_global/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_ntp_global/templates/populate.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
+ "chksum_sha256": "db6ca3b0768262fced3ee97dd2e9b9b9f6085d81047770a3883c7b65973d51dc",
"format": 1
},
{
- "name": "tests/integration/targets/eos_eapi/defaults",
+ "name": "tests/integration/targets/eos_ntp_global/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_ntp_global/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_ntp_global/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_eapi/tests/cli",
+ "name": "tests/integration/targets/eos_ntp_global/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_ntp_global/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_ntp_global/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "70621105e0b6c97e34047f0ce8408da1cb5e03868c8678df2f28bcf817c57527",
+ "chksum_sha256": "8ad00ff561ee93d06eabfc81bfdd27c78dd622a1f9776da62893eb6a219fa338",
"format": 1
},
{
- "name": "tests/integration/targets/eos_eapi/tests/cli/vrf.yaml",
+ "name": "tests/integration/targets/eos_ntp_global/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "64545c869099218860beec3678baf8209b39d66a5841128afafc15775a6e9eff",
+ "chksum_sha256": "425b9069cbfe0e6daec1d28d3023f886464df76571975acfa14d43285eab3dd5",
"format": 1
},
{
- "name": "tests/integration/targets/eos_eapi/tests/cli/configure.yaml",
+ "name": "tests/integration/targets/eos_ntp_global/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6efb0ff5e69c8eb46e1101343bc93272549578ad68a74fede9781a99bfb5983a",
+ "chksum_sha256": "db285e5dba7f6690073a06d6fa2c71df3f551c1df280f25fc99a690c96b74053",
"format": 1
},
{
- "name": "tests/integration/targets/eos_eapi/tests/cli/off.yaml",
+ "name": "tests/integration/targets/eos_ntp_global/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "593ed779304b25cb537ca13fc88e95a91a938109f5d5f9f6722a29f37573c040",
+ "chksum_sha256": "65f05f9b573112dd4035eadd0ef4c037794e2c2d8575a9e57bce3363f9251e9d",
"format": 1
},
{
- "name": "tests/integration/targets/eos_eapi/tests/cli/zzz_reset.1",
+ "name": "tests/integration/targets/eos_ntp_global/tests/common/update.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "01cd53e28355e0d65ba10accb15c95a17f824555796003f0225d7879a40382e9",
+ "chksum_sha256": "a8d288c944ccb44045ad3ae954b9f8c24cd785b81a8d895a49601b8bdb3da459",
"format": 1
},
{
- "name": "tests/integration/targets/eos_eapi/tests/cli/on.yaml",
+ "name": "tests/integration/targets/eos_ntp_global/tests/common/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "626f6ef04d9b5eeec3c2633d9517c0c632fe4b758470326278e7df918eec58c1",
+ "chksum_sha256": "db6ca3b0768262fced3ee97dd2e9b9b9f6085d81047770a3883c7b65973d51dc",
"format": 1
},
{
- "name": "tests/integration/targets/eos_eapi/tests/cli/config.yaml",
+ "name": "tests/integration/targets/eos_ntp_global/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "37b279c3fc0c94ed140a3e3890e309424710bcd35856f31b4211d5e7841f4656",
+ "chksum_sha256": "80a3c218ee8aaefd8e3fccc016b73adede17f646b5cb7aeb92930b2ebf240e08",
"format": 1
},
{
- "name": "tests/integration/targets/eos_eapi/tests/cli/badtransport.yaml",
+ "name": "tests/integration/targets/eos_ntp_global/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1620fab5693bd0fb373e2d53372188eb73a2fe5a3d389b11052ea42df490ee26",
+ "chksum_sha256": "930ade9d4163376aae340574caca0dbcb60880eaabc6836d7357898b325a670c",
"format": 1
},
{
- "name": "tests/integration/targets/eos_snmp_server",
- "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/tasks",
+ "name": "tests/integration/targets/eos_ntp_global/tests/common/merged.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ad9aa73641fa04cef01184edad25e66075435e1190f1fd8dd6b35bf9a3da968d",
+ "format": 1
+ },
+ {
+ "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_ntp_global/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_ntp_global/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_snmp_server/tasks/cli.yaml",
+ "name": "tests/integration/targets/eos_ntp_global/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_ntp_global/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_logging_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_logging_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_logging_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_logging_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_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_snmp_server/tests/common/_remove_config.yaml",
+ "name": "tests/integration/targets/eos_logging_global/templates/populate.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "49411b2c85202029944048c9b98c93755510c85f9912a6de5c31987bd5fb199d",
+ "chksum_sha256": "0637d1b53afb46a8eec79f5c0763905f7f7c182db42f823402261479d71fae15",
"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_logging_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_logging_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_logging_global/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_snmp_server/tests/common/_populate.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6",
+ "name": "tests/integration/targets/eos_logging_global/tests/common",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_snmp_server/tests/common/merged.yaml",
+ "name": "tests/integration/targets/eos_logging_global/tests/common/_populate.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7de001d983e8873496684af8bbd816f668626f0cb61280f1e0d07326af32bdda",
+ "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6",
"format": 1
},
{
- "name": "tests/integration/targets/eos_snmp_server/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/eos_logging_global/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a65a37d14b4764392ea5d9ccfa3debe6b1bfdcb5f4501477a51714f1f38eeefa",
+ "chksum_sha256": "5776e2445ac71c922c12d4f1a1aa667a2c824a3e4e6653bbe6f834a1da2dec19",
"format": 1
},
{
- "name": "tests/integration/targets/eos_snmp_server/tests/common/_parsed.cfg",
+ "name": "tests/integration/targets/eos_logging_global/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "90b472eb859697c791cb385ea0972ab042ffe3af2afedd902bf780cbd29ceac7",
+ "chksum_sha256": "108321fdfd99cdb6ff1b98da4741aa931453d409480f06c8c9af67e1aaae93e9",
"format": 1
},
{
- "name": "tests/integration/targets/eos_snmp_server/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/eos_logging_global/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5498af2763ccdc85790108ce60fec119ee9ee184694ab4dbb73bcc84411931a2",
+ "chksum_sha256": "61de4747e7132e7d8e54ec9eb6443f26e2896927739607b0dc6074d5369beae3",
"format": 1
},
{
- "name": "tests/integration/targets/eos_snmp_server/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/eos_logging_global/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fd35e88f8ab1a36691e324cf1c5e98721a41035cc9ef210966b4f744869fbd17",
+ "chksum_sha256": "7c490f97548080abda0e8ebf836466a8a6bde8787bc433c6223ba3d59fd42170",
"format": 1
},
{
- "name": "tests/integration/targets/eos_snmp_server/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/eos_logging_global/tests/common/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c058c00472d829b53fb556f986cb2fbf9943b02212719a676530c1ca1ef3864e",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_snmp_server/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "1340381f48cc0d4caa0403bbab7b72de9484ba5fb9efa952068ef9af8234e596",
"format": 1
},
{
- "name": "tests/integration/targets/eos_snmp_server/vars/main.yaml",
+ "name": "tests/integration/targets/eos_logging_global/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ae7da77e7cf9b6b97d3b5f42e00cb9f2ab4b591724f14421ce31ecaa491a410a",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_snmp_server/templates",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "653a99b2d157d5894d94aacc19083fc14c76b23077a390c15c6c6ef57aea62f5",
"format": 1
},
{
- "name": "tests/integration/targets/eos_snmp_server/templates/populate.cfg",
+ "name": "tests/integration/targets/eos_logging_global/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "955317964226d2639660f6006be99a9c1d67e3a8dcea25ba7b2c4a569059a4f9",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_lldp",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_lldp/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "b2770a4c9d78449e45cb039ca95cc66215d4b5fca8aeca52e28280daacb29ee5",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp/tasks/main.yaml",
+ "name": "tests/integration/targets/eos_logging_global/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6c58c665f3d46c7e382b12352535b4c300ea576b2c8e2e075b93a6ce18f2031b",
+ "chksum_sha256": "a3027ab685c832aec9f4b8cfa8e26cc8589f25f9fc802b246d3935ab7f1206c5",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp/tasks/cli.yaml",
+ "name": "tests/integration/targets/eos_logging_global/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5",
+ "chksum_sha256": "f7ae7444cf6cc04a2541fabd62ec1667d165cb39ce0b7d171f6efac9e4bd7638",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp/tasks/eapi.yaml",
+ "name": "tests/integration/targets/eos_logging_global/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1b14bb0d83e5f509721d34f537bb0812798e5b3d3ad6794f1cb7314c8a419202",
+ "chksum_sha256": "04ab08225d0e0b263fb06ebafa021ee73c6117852c370d5266d36a5c13fff449",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp/meta",
+ "name": "tests/integration/targets/eos_logging_global/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp/meta/main.yaml",
+ "name": "tests/integration/targets/eos_logging_global/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
+ "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/eos_logging_global/tasks/cli.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp/defaults/main.yaml",
+ "name": "tests/integration/targets/eos_logging_global/tasks/eapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
+ "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp/tests",
+ "name": "tests/integration/targets/eos_l3_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp/tests/cli",
+ "name": "tests/integration/targets/eos_l3_interfaces/defaults",
"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_l3_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "53b18d54488b69edfd167f85e21b91301fdea473379481f5d96be206edd7124f",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp/tests/eapi",
+ "name": "tests/integration/targets/eos_l3_interfaces/vars",
"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_l3_interfaces/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f7b48fe0eac8caa3e2d627764dfa3fb2a4d9ccb00db62e4fad31670c2a390671",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_lldp_interfaces",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "9bd8cfc16471691295c6cc5b75efdef88860f2aad20ec00f62ffc614e2976776",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp_interfaces/tasks",
+ "name": "tests/integration/targets/eos_l3_interfaces/templates",
"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",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f53f0ae420b815a40999516a0df43dbf6be6478362d4fd00f938647cd31ea997",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_lldp_interfaces/tasks/eapi.yaml",
+ "name": "tests/integration/targets/eos_l3_interfaces/templates/reset.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6d01e053990d738bcb911756ab9be2a7659b592d0841d98a1efbe9f4abb2528c",
+ "chksum_sha256": "3e02b044e876b189ce336a3a4802eb8af3df7d69c9d74f94877a8ec495e240dc",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp_interfaces/meta",
+ "name": "tests/integration/targets/eos_l3_interfaces/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp_interfaces/meta/main.yml",
+ "name": "tests/integration/targets/eos_l3_interfaces/meta/main.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,
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_lldp_interfaces/defaults/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_lldp_interfaces/tests",
+ "name": "tests/integration/targets/eos_l3_interfaces/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp_interfaces/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_lldp_interfaces/tests/common/deleted.yaml",
+ "name": "tests/integration/targets/eos_l3_interfaces/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e10f178b46e0a654204ab75a7487641c6345c51592481e64d7c7d5d15317ac67",
+ "chksum_sha256": "03f049dcce225d8de33873ff4f8a2244b4e6053857d212b6bd473476cd429b14",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/eos_l3_interfaces/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7576f665b34ce43ec4245fd5765611aa031ffbf73096d9f8907b7e5a9f537c52",
+ "chksum_sha256": "c06867d92daaf7f51b661451f56dd63be75711f4f8c407a7f7365879cb4d295c",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/empty_config.yaml",
+ "name": "tests/integration/targets/eos_l3_interfaces/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0e5f55128df4f7326db45dfc8c478e59a39d68053caf563625473079580d6838",
+ "chksum_sha256": "7c4177bbc89805770c555ca12366593738cd4fcfe2830e23b35a286aecc43ed3",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/rtt.yaml",
+ "name": "tests/integration/targets/eos_l3_interfaces/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "61c502d64492d3127c5503a4c6180c49d6bfba16ce0b4db6d37f5547b8bed58c",
+ "chksum_sha256": "95215014c2825aee51c3c204de545ae03738dae62b0e268c617a498276643713",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/merged.yaml",
+ "name": "tests/integration/targets/eos_l3_interfaces/tests/common/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8fbe99406870ccff9922c49a2ae193a563edcfb51cd7a4e2797181d1a3edf3ec",
+ "chksum_sha256": "1be80d6bfade12c26b76660664893c1846149bb7eb9398fa5e610d48d54e9b78",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/eos_l3_interfaces/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2a49e3976aa794644e2cb1ed765367a39ad81b39a42c16bca3bf32c8043dc9b1",
+ "chksum_sha256": "cc35e0f775451453ac2c523a27b8ca29590551f20ba1dd504553b72cd3f48096",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/_parsed.cfg",
+ "name": "tests/integration/targets/eos_l3_interfaces/tests/common/_reset_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "73c669fdf692d5f7f3b578f6a4a46f8b0fff6d62da0f62ad903648405e9934dc",
+ "chksum_sha256": "cbf3a7bcba86ab51a41f5df9700c3361614a761a59c7a818e28b9e2b47e49826",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/eos_l3_interfaces/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "670d9e454375f4479720d7a70e5099afd23319aa52bf2d01ba9b916ffd385d8e",
+ "chksum_sha256": "f17e653bfdb385c99bf7db088d3269b67d962148561c5b4ae3248adfad050ce4",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/eos_l3_interfaces/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "23e7bceb1fd85748923512e2facfaf4cb2727570be530b30897febd6c79f2a1a",
+ "chksum_sha256": "a65aac4ca425465052942c3fd31c9d51ffb175047cbce064752fab288c7e4367",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/_reset_config.yaml",
+ "name": "tests/integration/targets/eos_l3_interfaces/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c711ecfe5d02de94fed82b58d3402e733c1e575fea60c3f9744f3379b01d1b33",
+ "chksum_sha256": "e8b467b03ab2c858ce56d5520307e0482341b16e05579f077e5bf8742d71fc95",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/eos_l3_interfaces/tests/common/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b4f0aac4ed1a3d18ee04a35d42b989ee6a3e2a8ad07ee8b98f56f275b027e826",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_route_maps",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "4660abfc6652a70079d0ea81ddca1be88fe04998d9396edef977e7c5ba5df1af",
"format": 1
},
{
- "name": "tests/integration/targets/eos_route_maps/tasks",
+ "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/tasks/main.yaml",
+ "name": "tests/integration/targets/eos_l3_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_route_maps/tasks/cli.yaml",
+ "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/tasks/eapi.yaml",
+ "name": "tests/integration/targets/eos_l3_interfaces/tasks/eapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d",
+ "chksum_sha256": "1629beb9c4c49792f78a1425442a6a6e0e5dd9a0ed824c1cced81e6e97a0e47c",
"format": 1
},
{
- "name": "tests/integration/targets/eos_route_maps/meta",
+ "name": "tests/integration/targets/eos_lacp_interfaces",
"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_lacp_interfaces/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/eos_lacp_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/eos_route_maps/defaults",
+ "name": "tests/integration/targets/eos_lacp_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_lacp_interfaces/meta/main.yml",
"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_lacp_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_lacp_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_lacp_interfaces/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "28c7426a5b17a56f3b95701a57e71358f555978f8411340e51b098932fbe5bc4",
+ "chksum_sha256": "e2bc98e817414304b3ad22cf0d6747e9908af6b692824cb5dd751058968e2de3",
"format": 1
},
{
- "name": "tests/integration/targets/eos_route_maps/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "15d0e603090321cfdddd64967bc56c26dfb3003af6930743aa03bc6171ff0a3f",
+ "chksum_sha256": "c417f982e3ee716d3de8a1bd93a0671eb29a513a6e4b62b7ec9ab6a06e038511",
"format": 1
},
{
- "name": "tests/integration/targets/eos_route_maps/tests/common/empty_config.yaml",
+ "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a089af65191e7c43d545eca51f782b7d202e2cb2d56494bface34b020cb45666",
+ "chksum_sha256": "1a8a850858d11124418c7fbc26742397895220754befde252ad24117705e3deb",
"format": 1
},
{
- "name": "tests/integration/targets/eos_route_maps/tests/common/rtt.yaml",
+ "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "60cc6ccf0b2663bfb35b98686d984c74580676ff0f846553237213ea77df4177",
+ "chksum_sha256": "2b46d6ceee61ab907fcb57229bf38f361785e90cba1c90ac5ff50d4e9513a3d7",
"format": 1
},
{
- "name": "tests/integration/targets/eos_route_maps/tests/common/_populate.yaml",
+ "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6",
+ "chksum_sha256": "a3796a2313899acffb35cddcaa5673d76efd8751d1fed12d820f5973a9476d8d",
"format": 1
},
{
- "name": "tests/integration/targets/eos_route_maps/tests/common/merged.yaml",
+ "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a43b4966005a8a7ff89e03d834bdafcc7bca6d64de605c312d06bce503883af5",
+ "chksum_sha256": "d6a728cf70443f8ffc3ff061c9ee8d1eb85866c930760f3b277200956f41fb99",
"format": 1
},
{
- "name": "tests/integration/targets/eos_route_maps/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/_reset_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "79312d821332f81704323f4a81c7a25bc6028b81da83946485016d95669068d7",
+ "chksum_sha256": "b36bf6f528c9b79fc7a9b7f2d3b182ca1f2ddd3339579701d92b36b019ec959d",
"format": 1
},
{
- "name": "tests/integration/targets/eos_route_maps/tests/common/_parsed.cfg",
+ "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "64a5a2e160aff448bb567d8d4fdba4c3231f85ab0b44e2f596fe2784148e8554",
+ "chksum_sha256": "f924be9202c965db71f4880a635ba5acc81f9cb91f0101907f3e96387674e8f7",
"format": 1
},
{
- "name": "tests/integration/targets/eos_route_maps/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "44f4351a9b5d2fe29f5ceb7b8da5353d19e68a3ee410ed12f362f8ae419faf42",
+ "chksum_sha256": "cce344c093d2137f12b8a9933298953bc3330081dcbae362088a5097b2514813",
"format": 1
},
{
- "name": "tests/integration/targets/eos_route_maps/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "351d48443390baf9e5ba8e9b8856931bb61b2dfa4b78ad8c1096ca9f02a1c663",
+ "chksum_sha256": "45ec3d12aef7d086d901f4bba8e6084fe7a13cf8b31f321621c598fa2cb88405",
"format": 1
},
{
- "name": "tests/integration/targets/eos_route_maps/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ef67fa3a5f7c2e93109b6fe7a8241945ba90f239fab62d805af4229984ffd5d0",
+ "chksum_sha256": "4bcd6ab1c2fc53eb4c774397a6ee078ce4382963c6ffb53e7514a13721c24974",
"format": 1
},
{
- "name": "tests/integration/targets/eos_route_maps/vars",
+ "name": "tests/integration/targets/eos_lacp_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_lacp_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d337f562d76680d2b85d2144b4897034f37423f7f160a16e9c9ea66cc41f0f50",
+ "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d",
"format": 1
},
{
- "name": "tests/integration/targets/eos_route_maps/templates",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/eos_lacp_interfaces/tasks/cli.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f53f0ae420b815a40999516a0df43dbf6be6478362d4fd00f938647cd31ea997",
"format": 1
},
{
- "name": "tests/integration/targets/eos_route_maps/templates/populate.cfg",
+ "name": "tests/integration/targets/eos_lacp_interfaces/tasks/eapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c74494f69023cfc97d41e81575736420b6f29e2d384b0e7f8f41c446ffdc603a",
+ "chksum_sha256": "6d01e053990d738bcb911756ab9be2a7659b592d0841d98a1efbe9f4abb2528c",
"format": 1
},
{
- "name": "tests/integration/targets/eos_prefix_lists",
+ "name": "tests/integration/targets/eos_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_prefix_lists/tasks",
+ "name": "tests/integration/targets/eos_interfaces/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_prefix_lists/tasks/main.yaml",
+ "name": "tests/integration/targets/eos_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/eos_prefix_lists/tasks/cli.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281",
+ "name": "tests/integration/targets/eos_interfaces/vars",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_prefix_lists/tasks/eapi.yaml",
+ "name": "tests/integration/targets/eos_interfaces/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d",
+ "chksum_sha256": "21f21b62a39efa62ebd86dc0b152614f89828c29b70b513a5eab734ba59bb230",
"format": 1
},
{
- "name": "tests/integration/targets/eos_prefix_lists/meta",
+ "name": "tests/integration/targets/eos_interfaces/templates",
"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_interfaces/templates/reset.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
+ "chksum_sha256": "0a096e71ea1c5a1c492cc2e33283e427338efdf9d837a590b582c2702ccee07e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_prefix_lists/defaults",
+ "name": "tests/integration/targets/eos_interfaces/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_prefix_lists/defaults/main.yaml",
+ "name": "tests/integration/targets/eos_interfaces/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
"format": 1
},
{
- "name": "tests/integration/targets/eos_prefix_lists/tests",
+ "name": "tests/integration/targets/eos_interfaces/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_prefix_lists/tests/common",
+ "name": "tests/integration/targets/eos_interfaces/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_prefix_lists/tests/common/_remove_config.yaml",
+ "name": "tests/integration/targets/eos_interfaces/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8184f88e334762f387e4baa6b3ab70c3c160a75c861d669a89b1f2940fa0b501",
+ "chksum_sha256": "0c3a7c9a205c5ff75308f7bb5b9ec60565eb624f45526d5712b3e1ed026e087a",
"format": 1
},
{
- "name": "tests/integration/targets/eos_prefix_lists/tests/common/deleted.yaml",
+ "name": "tests/integration/targets/eos_interfaces/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5789eb8ee641ebf96faa3beaba1360916812f0b72bf79005dacf09038224eb1b",
+ "chksum_sha256": "fed3bcba071a6d00304fba18b40062463af1e4f9098048ca4385c8ee7d3703ee",
"format": 1
},
{
- "name": "tests/integration/targets/eos_prefix_lists/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/eos_interfaces/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75d1ef4096be7283925fda58180d9f70f9bbb42cc023228ee6bf69aab00052c8",
+ "chksum_sha256": "7f0746803db7cb46077bb261ea73492246c9973b05d4369c4830edd6181bf453",
"format": 1
},
{
- "name": "tests/integration/targets/eos_prefix_lists/tests/common/empty_config.yaml",
+ "name": "tests/integration/targets/eos_interfaces/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1246641c583926029ffa31cf7d9f68a5a3b5d9b6c3426323965a7ace18308646",
+ "chksum_sha256": "bc26969057893c4516d300b795ab9a9ca599596ea075a83972b2af4ed2164596",
"format": 1
},
{
- "name": "tests/integration/targets/eos_prefix_lists/tests/common/rtt.yaml",
+ "name": "tests/integration/targets/eos_interfaces/tests/common/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4b607978c8e64316d6196fa19665a85a0eadbf919ccb8875644857cf9b328407",
+ "chksum_sha256": "36a0793cac2c404b733a21498bf803d7fc38942c11ea65ea26521ca4d64e04d8",
"format": 1
},
{
- "name": "tests/integration/targets/eos_prefix_lists/tests/common/_populate.yaml",
+ "name": "tests/integration/targets/eos_interfaces/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6",
+ "chksum_sha256": "a62f1fe641f551ad15f8c85593b987486f1099f5a9172a1b27e73b4520e8ee29",
"format": 1
},
{
- "name": "tests/integration/targets/eos_prefix_lists/tests/common/merged.yaml",
+ "name": "tests/integration/targets/eos_interfaces/tests/common/_reset_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eee19a016590fc436d8be49414f1f5bd60598eac308df3f1581ec52677c6db1a",
+ "chksum_sha256": "7ae46767fb3bead2365a6cc3aeb9acfb44d8ad8fdee5313f144fe1d248110eaf",
"format": 1
},
{
- "name": "tests/integration/targets/eos_prefix_lists/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/eos_interfaces/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2481891014a0b474f98bbf7691a95628da7c0897b3ee4fc8046cbc79e0f54c75",
+ "chksum_sha256": "2d7fe951ce7d79d1fee4fa2149e1f341d06c7910a220bda9e86118ea26349fef",
"format": 1
},
{
- "name": "tests/integration/targets/eos_prefix_lists/tests/common/_parsed.cfg",
+ "name": "tests/integration/targets/eos_interfaces/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f41196dd12570c02dff69372f0539ac676553a8c97da1637db552399aa691fcd",
+ "chksum_sha256": "5a0737935c23ff3552dcf975ee16cfa42adfbcea87cf8bb0b8926b2ccf09c8d0",
"format": 1
},
{
- "name": "tests/integration/targets/eos_prefix_lists/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/eos_interfaces/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "40b71ec679a26a406e66f31dc4b561a0671ffc493ead69d80c60d7a58a8bb871",
+ "chksum_sha256": "ca023a36a14d5f2de1b213f4e7626424523c01e952e08789e5cac48107ae0b4f",
"format": 1
},
{
- "name": "tests/integration/targets/eos_prefix_lists/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/eos_interfaces/tests/common/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "40293ea4167e097760e7aeb5b43e229510ef4eefe55161f18756aea2410aca32",
+ "chksum_sha256": "ca4a201cb5ed8e1649d04eba504fc0ba0584b9404df7d3fdc3df1d9cb708c992",
"format": 1
},
{
- "name": "tests/integration/targets/eos_prefix_lists/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/eos_interfaces/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/eos_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "412ce27b1e535cfda5876456c2355d78a394ef0db13ba99c334f632732efb388",
+ "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d",
"format": 1
},
{
- "name": "tests/integration/targets/eos_prefix_lists/vars",
+ "name": "tests/integration/targets/eos_interfaces/tasks/cli.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/eos_interfaces/tasks/eapi.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/eos_static_routes",
"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_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": "fbdeab37387d1fd29e31ca469d49a5297e3fe095e30c0a02dd0f402a7bfe87a7",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/eos_prefix_lists/templates",
+ "name": "tests/integration/targets/eos_static_routes/meta",
"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_static_routes/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f41196dd12570c02dff69372f0539ac676553a8c97da1637db552399aa691fcd",
+ "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
"format": 1
},
{
- "name": "tests/integration/targets/eos_user",
+ "name": "tests/integration/targets/eos_static_routes/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_user/tasks",
+ "name": "tests/integration/targets/eos_static_routes/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_user/tasks/main.yaml",
+ "name": "tests/integration/targets/eos_static_routes/tests/common/_populate.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e",
+ "chksum_sha256": "5c1986157b288504efba9959764aa6b8de99c79007f97a59c48e6ad72a496535",
"format": 1
},
{
- "name": "tests/integration/targets/eos_user/tasks/cli.yaml",
+ "name": "tests/integration/targets/eos_static_routes/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5",
+ "chksum_sha256": "bec9055d452548f078aec3418ef1d147865a0b03c739b9a8cb7609142959736c",
"format": 1
},
{
- "name": "tests/integration/targets/eos_user/tasks/eapi.yaml",
+ "name": "tests/integration/targets/eos_static_routes/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1b14bb0d83e5f509721d34f537bb0812798e5b3d3ad6794f1cb7314c8a419202",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_user/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "7efefbf1285c5fc94d42b155d5e3236241aea41a49727bf31e0d27710209a2e2",
"format": 1
},
{
- "name": "tests/integration/targets/eos_user/meta/main.yaml",
+ "name": "tests/integration/targets/eos_static_routes/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
+ "chksum_sha256": "f8d6eb37916d612ff4b460b42cb1f8689420f1607695d867bf5a1ea7505bf64a",
"format": 1
},
{
- "name": "tests/integration/targets/eos_user/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/eos_static_routes/tests/common/_parsed.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4df3d87f73db3368744f45083b9b822543ce447d77a6167922de9c3cc3908909",
"format": 1
},
{
- "name": "tests/integration/targets/eos_user/defaults/main.yaml",
+ "name": "tests/integration/targets/eos_static_routes/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
+ "chksum_sha256": "6022c467edbcead6301a2203a755a2ab12fe648877cb77cdc2ab32f5d0cf6581",
"format": 1
},
{
- "name": "tests/integration/targets/eos_user/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/eos_static_routes/tests/common/_remove_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "dbd2727c4906cba6e945896b24be521129405364dab6c4444652c2804f91a8ee",
"format": 1
},
{
- "name": "tests/integration/targets/eos_user/tests/cli",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/eos_static_routes/tests/common/overridden.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c93a2f5e26cee3ca747d7dacfb5233adb9c1448b72c54119fd32dce25988f0b8",
"format": 1
},
{
- "name": "tests/integration/targets/eos_user/tests/cli/auth.yaml",
+ "name": "tests/integration/targets/eos_static_routes/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ece4746e3d18508426ba2ab784a91bed28670217a75be85b234b03ebb66dfd89",
+ "chksum_sha256": "9ab33deec36ea6b8eea7be1b6eafb943f360759fe3b3e5c78211a9ab6cda58f3",
"format": 1
},
{
- "name": "tests/integration/targets/eos_user/tests/cli/basic.yaml",
+ "name": "tests/integration/targets/eos_static_routes/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "432c95aa920b1774308ea58ea6159647675bb2f7f1cffde182c64662dcc857fc",
+ "chksum_sha256": "08eaf829db084d4878287253871d6dde4d9027f179af071ba0b501eb474791bf",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospf_interfaces",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/eos_static_routes/tests/common/rtt.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2c42048158fb304b5951f30de6ce718b723ff26659c2f1ece7f577612f557675",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospf_interfaces/tasks",
+ "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/tasks/main.yaml",
+ "name": "tests/integration/targets/eos_static_routes/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospf_interfaces/tasks/cli.yaml",
+ "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/tasks/eapi.yaml",
+ "name": "tests/integration/targets/eos_static_routes/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_route_maps",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "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_ospf_interfaces/defaults",
+ "name": "tests/integration/targets/eos_route_maps/defaults",
"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_route_maps/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospf_interfaces/tests",
+ "name": "tests/integration/targets/eos_route_maps/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospf_interfaces/tests/common",
+ "name": "tests/integration/targets/eos_route_maps/vars/main.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d337f562d76680d2b85d2144b4897034f37423f7f160a16e9c9ea66cc41f0f50",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/eos_route_maps/templates",
"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_route_maps/templates/populate.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f61d79526410667fe97aa0c1fa0c6a0162e500c6abc373d025165382643b96a4",
+ "chksum_sha256": "c74494f69023cfc97d41e81575736420b6f29e2d384b0e7f8f41c446ffdc603a",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/deleted.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4f997c36cc9170f11226c5057f8a2a6b9da5717306c07a8dcfae8517d9b4152d",
+ "name": "tests/integration/targets/eos_route_maps/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/eos_route_maps/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7c607da23362194cb7a396214a601408e7ea7b78e895567b6a070205916f4677",
+ "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/empty_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e9086ad58ff3a415a829921047e1c805e34d6ae95488b9b1c937b20a922ae964",
+ "name": "tests/integration/targets/eos_route_maps/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/rtt.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cb5f91b025aa37891756c22bfae165a560c4c00bcee7f0d93005ddc79944886e",
+ "name": "tests/integration/targets/eos_route_maps/tests/common",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/_populate.yaml",
+ "name": "tests/integration/targets/eos_route_maps/tests/common/_populate.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/merged.yaml",
+ "name": "tests/integration/targets/eos_route_maps/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "698af51d7f6a6ced71a9415495684f30be35b26cb298b53e1de7792a3d857c18",
+ "chksum_sha256": "351d48443390baf9e5ba8e9b8856931bb61b2dfa4b78ad8c1096ca9f02a1c663",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/eos_route_maps/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3389b2ec80e9dfa1b851de623ba7bf990b39240feebc9e3cb18dac87b85250e",
+ "chksum_sha256": "ef67fa3a5f7c2e93109b6fe7a8241945ba90f239fab62d805af4229984ffd5d0",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/gathered_empty_config.yml",
+ "name": "tests/integration/targets/eos_route_maps/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6ff5c23745f6f182db2a1173cd25b5a98a29465a8bc37cae61678d8c577af23",
+ "chksum_sha256": "15d0e603090321cfdddd64967bc56c26dfb3003af6930743aa03bc6171ff0a3f",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/_parsed.cfg",
+ "name": "tests/integration/targets/eos_route_maps/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b5c505431c56a3bd030ee52a85e240626c905bfe2809aab18a2e761066e0ccbb",
+ "chksum_sha256": "a089af65191e7c43d545eca51f782b7d202e2cb2d56494bface34b020cb45666",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/eos_route_maps/tests/common/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4222a5770d1b912a7ac71103749ff82d93dd903e769e87690471a59be0c7e988",
+ "chksum_sha256": "64a5a2e160aff448bb567d8d4fdba4c3231f85ab0b44e2f596fe2784148e8554",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/eos_route_maps/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3fd4657ae775a57bdcda3537eaafb956b979f0a1569c80583364e96f16e2f201",
+ "chksum_sha256": "28c7426a5b17a56f3b95701a57e71358f555978f8411340e51b098932fbe5bc4",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/eos_route_maps/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c136e2d339db165c433d2b3bd05409e542892bb8a5a94f53737891fb082d16f8",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_ospf_interfaces/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "cdabf064aef1475c5f3ca82c999bf1b31e113c0dc8e8c23c043b792d4ea0d6f1",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospf_interfaces/vars/main.yaml",
+ "name": "tests/integration/targets/eos_route_maps/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bd015c6e2a8c0de8c44a813c8d30a6554cb1f7dec683760cd30a899ce85481c5",
+ "chksum_sha256": "79312d821332f81704323f4a81c7a25bc6028b81da83946485016d95669068d7",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospf_interfaces/templates",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/eos_route_maps/tests/common/merged.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a43b4966005a8a7ff89e03d834bdafcc7bca6d64de605c312d06bce503883af5",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospf_interfaces/templates/populate.cfg",
+ "name": "tests/integration/targets/eos_route_maps/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e2d645f551982b7ea8613b5d94260428dbcd4cd3207d34a4bb51fb8722b0ffc4",
+ "chksum_sha256": "44f4351a9b5d2fe29f5ceb7b8da5353d19e68a3ee410ed12f362f8ae419faf42",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/eos_route_maps/tests/common/rtt.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "60cc6ccf0b2663bfb35b98686d984c74580676ff0f846553237213ea77df4177",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tasks",
+ "name": "tests/integration/targets/eos_route_maps/tasks",
"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",
+ "name": "tests/integration/targets/eos_route_maps/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5",
+ "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tasks/eapi.yaml",
+ "name": "tests/integration/targets/eos_route_maps/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1b14bb0d83e5f509721d34f537bb0812798e5b3d3ad6794f1cb7314c8a419202",
+ "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tasks/cli_config.yaml",
+ "name": "tests/integration/targets/eos_route_maps/tasks/eapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cad1c35e72ece6063b7dd0600ae72e4e0f2f29b963d58733833bfb71db1ff1dc",
+ "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tasks/redirection.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b49deae160fc4dfe8307a0ffb0749eedf58bfe63871c77531866e164fe7f955b",
+ "name": "tests/integration/targets/eos_system",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/meta",
+ "name": "tests/integration/targets/eos_system/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/meta/main.yml",
+ "name": "tests/integration/targets/eos_system/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/defaults",
+ "name": "tests/integration/targets/eos_system/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_system/meta/main.yml",
"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_system/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tests/cli",
+ "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/cli/toplevel_before.yaml",
+ "name": "tests/integration/targets/eos_system/tests/eapi/set_domain_name.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "727839044c517b93bff6eeb4786a005f52b4c17adcca79db896113ef5a788ff5",
+ "chksum_sha256": "8cfd63ce023b45928d446783ffcd516e4ab736187d36102514859dd9aabcec05",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tests/cli/toplevel_after.yaml",
+ "name": "tests/integration/targets/eos_system/tests/eapi/set_hostname.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "caea8fad79205e27a673f4ee9fe66ae8337bed0172587d7f41f27f4c3354fa2d",
+ "chksum_sha256": "6bce01fac4d41bba5dc1495d183f86d153fbd010a3b1ac760bd07c32bcd3c5f2",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tests/cli/sublevel_strict.yaml",
+ "name": "tests/integration/targets/eos_system/tests/eapi/set_lookup_source.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eb86226952eb153150fe0e1b41d8bbd2d38bbb2323831ff4a865553f161ead28",
+ "chksum_sha256": "5ec0cefc6ecaf3e422116a57b7a77dac7c7e8de65543b445baaa5b08bb0c31a1",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tests/cli/diff_against_config.yaml",
+ "name": "tests/integration/targets/eos_system/tests/eapi/set_domain_list.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1ba680c356fa88e96ed721f29df59097b2aabe32030286f032e3f981db797276",
+ "chksum_sha256": "c864953ce83d0099b4f025894c10d502d1ecff22776b89688f784bf172b4f936",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tests/cli/src_match_none.yaml",
+ "name": "tests/integration/targets/eos_system/tests/eapi/set_name_servers.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e6f0ba65100459757c0b7dab013d12f4b901e2af19979c49047b6c403e2a1877",
+ "chksum_sha256": "3f151be120cd9e6e74b1778bf682f08879753fc2198c807e4ecebe4486d21c28",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tests/cli/sublevel_block.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f954e5787b9b7e557b058e9f4e8720bfe36b468b4822bf29913ed3d14042475c",
+ "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/cli/toplevel.yaml",
+ "name": "tests/integration/targets/eos_system/tests/cli/set_domain_name.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fb6ec870503106ced6935c661248ff3e9d637bafc418f9b50f6bd01329c26ce2",
+ "chksum_sha256": "96a436ed7ba93da80b30b7fde2babbd14d77e20c888843f12fbd37f368774c05",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tests/cli/sublevel_strict_mul_parents.yaml",
+ "name": "tests/integration/targets/eos_system/tests/cli/set_hostname.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3ab71a8f63f346ecaac7f063da41865f2e61466559bd8e3b01c5c8cd5d4e63ff",
+ "chksum_sha256": "3ddfe22c80b9e909d2cafe93380715fc7d695425a4bf23c0c549bbb1414fc8dc",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tests/cli/config.yaml",
+ "name": "tests/integration/targets/eos_system/tests/cli/set_lookup_source.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9a76cb30e8f9c86209fa61ebfd779b91e9f5996a527b4856ec5d1f91d5bdfb77",
+ "chksum_sha256": "9b571561204978b797cde9c09803bd0f35e3a4b1d0f032d549b0d8a479bb7742",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tests/cli/replace_block.yaml",
+ "name": "tests/integration/targets/eos_system/tests/cli/set_domain_list.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8229d1f16924795dadcae8472ba22a0d6ed7efdba4a7c8c12864f2915c1ed9c6",
+ "chksum_sha256": "382aace82bf0f7d0a09ba8f2a35a825bf9085cdca7d62d507096e65e361b6922",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tests/cli/sublevel_exact.yaml",
+ "name": "tests/integration/targets/eos_system/tests/cli/set_name_servers.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8a6f66fe3cca7fc667d32dd2de4f5bc6fc7d82d2d92953316ad3d6e4f16ec463",
+ "chksum_sha256": "5a6511f53c7475d55b01bd0fd150ecc8432e6a237a0634b9f7d0dab26473d88b",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tests/cli/src_basic.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "115d6ac4c64b7d029afd2ddb9588b5eeb323ccf12391cf9bc1ba7db051c0847e",
+ "name": "tests/integration/targets/eos_system/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tests/cli/check_mode.yaml",
+ "name": "tests/integration/targets/eos_system/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8b8ade7952b3bdfbe87a27bef6a6072bf1559fb682ed03477c2c4bbb95add14d",
+ "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tests/cli/defaults.yaml",
+ "name": "tests/integration/targets/eos_system/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4390d24f8debc9f9a06bd6f75cedac8f6de373193dd6f477329d0479908e66b7",
+ "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tests/cli/backup.yaml",
+ "name": "tests/integration/targets/eos_system/tasks/eapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6d9bdcefed31e07edf3c37a38a9bdd50b83b235723758b4f4afee6afddb1b9e5",
+ "chksum_sha256": "1b14bb0d83e5f509721d34f537bb0812798e5b3d3ad6794f1cb7314c8a419202",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tests/cli/src_invalid.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "52ca0bec01fc312731dc6e4be0b4439a1ffcbdb24716321987fbea517a5e145a",
+ "name": "tests/integration/targets/eos_lldp_global",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"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_lldp_global/defaults",
+ "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_lldp_global/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0f7743e4751629f7b7b985959361b7ac07cf23c267d74777401cd2e45bcff7d1",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tests/eapi",
+ "name": "tests/integration/targets/eos_lldp_global/vars",
"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_lldp_global/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7f7329aacb123f76e1a2df214a99787da817035c59e9c0e2664f7934daba6efe",
+ "chksum_sha256": "2e8be33a4b8c4f6ed1238e648834c66b382d5d0c9638b2aaa15d23e5433e181e",
"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_lldp_global/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tests/eapi/sublevel_strict.yaml",
+ "name": "tests/integration/targets/eos_lldp_global/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dbf1e3fd93dc6e50049a62d8107765cdbba14ee1f843606845bf30d0a982cd42",
+ "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tests/eapi/src_match_none.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c42bb681923e1aea5664c1a629c22da23afd186fbdcbaa1c8f6a5df716e69bec",
+ "name": "tests/integration/targets/eos_lldp_global/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tests/eapi/sublevel_block.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3dde12483d855a7b2da463f885ac18f0b10b36b9b6acc538de96c4de23157c61",
+ "name": "tests/integration/targets/eos_lldp_global/tests/common",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tests/eapi/toplevel.yaml",
+ "name": "tests/integration/targets/eos_lldp_global/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "45276c0a74aba09ed8c7c48de80af2dd32219a324303610bc9cf80c3c8bc283b",
+ "chksum_sha256": "ecfacbd7e8e994b8e1ca0db698eb1226a9f0cdecd0bc4dcaee71466d7fa237b3",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tests/eapi/sublevel_exact.yaml",
+ "name": "tests/integration/targets/eos_lldp_global/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5501acfbe1e6d31324268704c74ddf6bf1d7d9eb0e158edcbbe4ff4b214cc76a",
+ "chksum_sha256": "cb37329f298bade2c13b44af8e8036f83bdda812f2acca9eead754340be8d829",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tests/eapi/src_basic.yaml",
+ "name": "tests/integration/targets/eos_lldp_global/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bb891145f21b067fae034a29cded633ad42f8c834d477f8997b2517753fa7300",
+ "chksum_sha256": "4ac4431a75c62d1a70050d834f822be901e87b57cf6178b14069bd0dba8a95fe",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tests/eapi/defaults.yaml",
+ "name": "tests/integration/targets/eos_lldp_global/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0ece39d7ef9b05d0e14b28c199af6dd0181c05c687fcf8555b7e41f35406f4c6",
+ "chksum_sha256": "44cb429ba9a7352289e7ce9c1f1b46965ea1c360510d031c554472b04012c4ae",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tests/eapi/backup.yaml",
+ "name": "tests/integration/targets/eos_lldp_global/tests/common/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8b7ff6fa23044a1941225d49d2d23d85c1cede5f6d194625515b78a94ceccef0",
+ "chksum_sha256": "0048d6a4374fade15d938c1d79b79eb8b3d95500fe31a55b8e2509b3fc39cef6",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tests/eapi/src_invalid.yaml",
+ "name": "tests/integration/targets/eos_lldp_global/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "751ce477a9a859e0fe8c0a420a836a9aeb6ee4e4d00d58af9e96fa4b15731577",
+ "chksum_sha256": "b4cce5198a2d66a44e8775b311ff670c877aed0d7d37c5f7b43d843f0f1e1f08",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tests/eapi/save.yaml",
+ "name": "tests/integration/targets/eos_lldp_global/tests/common/_reset_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b10fe8c1dec1cc8276a16bcfeb6b70ac9667c8fc42cc5acd7f742fbdd2a2a2f6",
+ "chksum_sha256": "97c3ee1287e7584f46521ddc1bd32b3f6928c6f0c2f30fb00ded22272649ab1d",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tests/eapi/sublevel.yaml",
+ "name": "tests/integration/targets/eos_lldp_global/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "402e518d37d1d8a5c283de5593d26f4067c6ce3312b90e9f9b5c41c8c52892af",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_config/tests/redirection",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_config/tests/redirection/cli",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "61363b2fbb08af548968fd3bef7e529f5f1a15d59d8c36732c9a430488d4d2ff",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tests/redirection/cli/shortname.yaml",
+ "name": "tests/integration/targets/eos_lldp_global/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d944cd696544ff17ad20e40bea70421da8141a1c22b5b4227b8b2cec348ce085",
+ "chksum_sha256": "13d7c23ac9137d74bd2614020c8d8c585f3fb9ae30d53d8a120a1abe168d47d0",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tests/cli_config",
+ "name": "tests/integration/targets/eos_lldp_global/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tests/cli_config/cli_backup.yaml",
+ "name": "tests/integration/targets/eos_lldp_global/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3bd7e06189b2e0a2c94746eeacb0988676f417f3a6740b1ef65a39609ae5d735",
+ "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/tests/cli_config/cli_basic.yaml",
+ "name": "tests/integration/targets/eos_lldp_global/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "135e26aae8c87670f187e83c82608ece8fe523e21e51824780e082ed0b4bf4ff",
+ "chksum_sha256": "f53f0ae420b815a40999516a0df43dbf6be6478362d4fd00f938647cd31ea997",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/config.txt",
+ "name": "tests/integration/targets/eos_lldp_global/tasks/eapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9a925a8805c82634beb0a514ef8ab88912b8b3e296763329a74d7690b0429dc6",
+ "chksum_sha256": "6d01e053990d738bcb911756ab9be2a7659b592d0841d98a1efbe9f4abb2528c",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/templates",
+ "name": "tests/integration/targets/eos_snmp_server",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/templates/basic",
+ "name": "tests/integration/targets/eos_snmp_server/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_snmp_server/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_snmp_server/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_snmp_server/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6d6e2f3a34e61e1912c313154341699bc6398ccd884e4663bbdcefab7e76f6ec",
+ "chksum_sha256": "ae7da77e7cf9b6b97d3b5f42e00cb9f2ab4b591724f14421ce31ecaa491a410a",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/templates/defaults",
+ "name": "tests/integration/targets/eos_snmp_server/templates",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/templates/defaults/test.j2",
+ "name": "tests/integration/targets/eos_snmp_server/templates/populate.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6d6e2f3a34e61e1912c313154341699bc6398ccd884e4663bbdcefab7e76f6ec",
+ "chksum_sha256": "955317964226d2639660f6006be99a9c1d67e3a8dcea25ba7b2c4a569059a4f9",
"format": 1
},
{
- "name": "tests/integration/targets/eos_config/templates/defaults/config.j2",
+ "name": "tests/integration/targets/eos_snmp_server/meta",
+ "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": "82249ebe8dcfdb0ab85598bd0f7ba759187bfc19c5c04a772d3308f27d85eefe",
+ "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lacp",
+ "name": "tests/integration/targets/eos_snmp_server/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_lacp/tasks",
+ "name": "tests/integration/targets/eos_snmp_server/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_lacp/tasks/main.yaml",
+ "name": "tests/integration/targets/eos_snmp_server/tests/common/_populate.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e",
+ "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lacp/tasks/cli.yaml",
+ "name": "tests/integration/targets/eos_snmp_server/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f53f0ae420b815a40999516a0df43dbf6be6478362d4fd00f938647cd31ea997",
+ "chksum_sha256": "fd35e88f8ab1a36691e324cf1c5e98721a41035cc9ef210966b4f744869fbd17",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lacp/tasks/eapi.yaml",
+ "name": "tests/integration/targets/eos_snmp_server/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": "c058c00472d829b53fb556f986cb2fbf9943b02212719a676530c1ca1ef3864e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lacp/meta/main.yml",
+ "name": "tests/integration/targets/eos_snmp_server/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": "92b980a2b2ec6624a2d10d807e8026953ec336d0c8f56ee070d27b0b8cd66ed6",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lacp/defaults/main.yaml",
+ "name": "tests/integration/targets/eos_snmp_server/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,
+ "chksum_sha256": "03a12bd881dbe8be8c2a60638c8f2e564cc0b176ea9764af6a17d015098c8ac0",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lacp/tests/common",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/eos_snmp_server/tests/common/_parsed.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "90b472eb859697c791cb385ea0972ab042ffe3af2afedd902bf780cbd29ceac7",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lacp/tests/common/deleted.yaml",
+ "name": "tests/integration/targets/eos_snmp_server/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "256d175eb92a50a737d23b476ff3fe20d9999764b3cdac3fe3f625bc357bc809",
+ "chksum_sha256": "e15abd88634fd0d4e37994033dbad069c4c6a5a74032fbdcb28054fd2ce24f50",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lacp/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/eos_snmp_server/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "298c194b94ae3f3750c516e2245251ed37611565c429ccf4fd7427c22df368cd",
+ "chksum_sha256": "49411b2c85202029944048c9b98c93755510c85f9912a6de5c31987bd5fb199d",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lacp/tests/common/empty_config.yaml",
+ "name": "tests/integration/targets/eos_snmp_server/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7cc12a2c9c2b6154d7474af3cc090677b5067fa213c13ba6fb8b4203b9aa0149",
+ "chksum_sha256": "a65a37d14b4764392ea5d9ccfa3debe6b1bfdcb5f4501477a51714f1f38eeefa",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lacp/tests/common/merged.yaml",
+ "name": "tests/integration/targets/eos_snmp_server/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1567cbeeee2362aa296686ff39b8a1fb0e95ee41adfb130e8612826981e7113d",
+ "chksum_sha256": "7de001d983e8873496684af8bbd816f668626f0cb61280f1e0d07326af32bdda",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lacp/tests/common/_parsed.cfg",
+ "name": "tests/integration/targets/eos_snmp_server/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "800ead8f10e3d4bc50ddf469a53b358695197f47476eb4b3789aa011e16f1dea",
+ "chksum_sha256": "5498af2763ccdc85790108ce60fec119ee9ee184694ab4dbb73bcc84411931a2",
"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_snmp_server/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_snmp_server/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_snmp_server/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d0dcc0055c8b24c34f55531d55a1069274e7450a6592a5223e9976887437cd33",
+ "chksum_sha256": "2d8c084f757657a7a323a0fd6c49fef789d8ef373f770fb46f864563bc23c4ef",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lacp/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/eos_snmp_server/tasks/eapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bfdee3db7e752c613eb903f5b515c30d6ae3b5da4b641f9c575416aa32d77649",
+ "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d",
"format": 1
},
{
@@ -5405,66 +5426,59 @@
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_address_family/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_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_bgp_address_family/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_bgp_address_family/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_bgp_address_family/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7b61bd7a713c0b9735361ff90fb07b90d1b4fb97b9c822c2c979bd6eb82b892c",
+ "chksum_sha256": "80bb6f23199fee8ae2ed4149e4706e9a23f0b0093a9f03c982fc8f3590919fc5",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_address_family/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_bgp_address_family/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_bgp_address_family/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_bgp_address_family/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
},
{
@@ -5482,4133 +5496,3895 @@
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_address_family/tests/common/_remove_config.yaml",
+ "name": "tests/integration/targets/eos_bgp_address_family/tests/common/_populate.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "36c8fb15c11b0806cf005745d3430a56d953e9f6780a7cef5aafd2a09a0535ad",
+ "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_address_family/tests/common/deleted.yaml",
+ "name": "tests/integration/targets/eos_bgp_address_family/tests/common/_redirection.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2d367a172a6119e19318a7925d0f93ab844f3285d5e7818894d5754dff1c3879",
+ "chksum_sha256": "6ed262f5f0ecec25b856f900c3bf6d2b460b8988d495e8b8bd2a94be0e4b136f",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_address_family/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/eos_bgp_address_family/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5a72b2cdd640e76fd8cebc5dc40db9e7f021f219a006e0e202f38753e67f3e66",
+ "chksum_sha256": "e6039629f8dcaf5a5985dde73f3aeadf9a238c6bb09cba2cf52953fd33d75fdf",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_address_family/tests/common/empty_config.yaml",
+ "name": "tests/integration/targets/eos_bgp_address_family/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1e8015071f7ffcce80ad0ededdef7f16e73a69a32d9f045d358db22e27e0bc37",
+ "chksum_sha256": "501991afb657b98d52a6b17858e19fc4def44d6fc1b308af9d9339ed9b1bcbfc",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_address_family/tests/common/rtt.yaml",
+ "name": "tests/integration/targets/eos_bgp_address_family/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "768a7c9e05c637f812712a5de2588a2fae4c9296e89f082ef30ce5efefe0939a",
+ "chksum_sha256": "5a72b2cdd640e76fd8cebc5dc40db9e7f021f219a006e0e202f38753e67f3e66",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_address_family/tests/common/_populate.yaml",
+ "name": "tests/integration/targets/eos_bgp_address_family/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6",
+ "chksum_sha256": "1e8015071f7ffcce80ad0ededdef7f16e73a69a32d9f045d358db22e27e0bc37",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_address_family/tests/common/merged.yaml",
+ "name": "tests/integration/targets/eos_bgp_address_family/tests/common/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b2bbbe9bb69931adedbcb614bd349ce9dc7291f38b6dfa81420db786051dac73",
+ "chksum_sha256": "0b889f292c92b4630f9cd7f3ff38826eb0db4f2937fc2f9e5af1f266245cca74",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_address_family/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/eos_bgp_address_family/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "19423e7d29df73b400d5b47fea1fce275bcd2b04d184470aa5659097038915e1",
+ "chksum_sha256": "2d367a172a6119e19318a7925d0f93ab844f3285d5e7818894d5754dff1c3879",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_address_family/tests/common/_parsed.cfg",
+ "name": "tests/integration/targets/eos_bgp_address_family/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0b889f292c92b4630f9cd7f3ff38826eb0db4f2937fc2f9e5af1f266245cca74",
+ "chksum_sha256": "36c8fb15c11b0806cf005745d3430a56d953e9f6780a7cef5aafd2a09a0535ad",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_address_family/tests/common/_redirection.yaml",
+ "name": "tests/integration/targets/eos_bgp_address_family/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6ed262f5f0ecec25b856f900c3bf6d2b460b8988d495e8b8bd2a94be0e4b136f",
+ "chksum_sha256": "19423e7d29df73b400d5b47fea1fce275bcd2b04d184470aa5659097038915e1",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_address_family/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/eos_bgp_address_family/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b772bb07168e677fd6bf5c7cefdb28b4343d2c51f4463422e7b6a0cf9959f327",
+ "chksum_sha256": "b2bbbe9bb69931adedbcb614bd349ce9dc7291f38b6dfa81420db786051dac73",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_address_family/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/eos_bgp_address_family/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e6039629f8dcaf5a5985dde73f3aeadf9a238c6bb09cba2cf52953fd33d75fdf",
+ "chksum_sha256": "b772bb07168e677fd6bf5c7cefdb28b4343d2c51f4463422e7b6a0cf9959f327",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_address_family/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/eos_bgp_address_family/tests/common/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "501991afb657b98d52a6b17858e19fc4def44d6fc1b308af9d9339ed9b1bcbfc",
+ "chksum_sha256": "768a7c9e05c637f812712a5de2588a2fae4c9296e89f082ef30ce5efefe0939a",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_address_family/vars",
+ "name": "tests/integration/targets/eos_bgp_address_family/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_bgp_address_family/tasks/redirection.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "80bb6f23199fee8ae2ed4149e4706e9a23f0b0093a9f03c982fc8f3590919fc5",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_bgp_address_family/templates",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "7b61bd7a713c0b9735361ff90fb07b90d1b4fb97b9c822c2c979bd6eb82b892c",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_address_family/templates/populate.cfg",
+ "name": "tests/integration/targets/eos_bgp_address_family/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0b889f292c92b4630f9cd7f3ff38826eb0db4f2937fc2f9e5af1f266245cca74",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_static_routes",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_static_routes/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "e40fe291a7e7d70bd846b4acf8f4a1a465948b9a02b037d9b0fd0a4193055baa",
"format": 1
},
{
- "name": "tests/integration/targets/eos_static_routes/tasks/main.yaml",
+ "name": "tests/integration/targets/eos_bgp_address_family/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e",
+ "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281",
"format": 1
},
{
- "name": "tests/integration/targets/eos_static_routes/tasks/cli.yaml",
+ "name": "tests/integration/targets/eos_bgp_address_family/tasks/eapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281",
+ "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d",
"format": 1
},
{
- "name": "tests/integration/targets/eos_static_routes/tasks/eapi.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d",
+ "name": "tests/integration/targets/eos_smoke",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_static_routes/meta",
+ "name": "tests/integration/targets/eos_smoke/defaults",
"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_smoke/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
+ "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/eos_static_routes/defaults",
+ "name": "tests/integration/targets/eos_smoke/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_smoke/meta/main.yml",
"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_smoke/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_smoke/tests/eapi",
"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_smoke/tests/eapi/common_utils.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dbd2727c4906cba6e945896b24be521129405364dab6c4444652c2804f91a8ee",
+ "chksum_sha256": "a18fa7aed51409b4944aada8a31a413f1058fda4ca0e652f55296166b6c5a253",
"format": 1
},
{
- "name": "tests/integration/targets/eos_static_routes/tests/common/deleted.yaml",
+ "name": "tests/integration/targets/eos_smoke/tests/eapi/common_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6022c467edbcead6301a2203a755a2ab12fe648877cb77cdc2ab32f5d0cf6581",
+ "chksum_sha256": "8c0c76c10792321352005faed0ae9c51f1387f4964f2175e9a8e39af1c444ca1",
"format": 1
},
{
- "name": "tests/integration/targets/eos_static_routes/tests/common/gathered.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f8d6eb37916d612ff4b460b42cb1f8689420f1607695d867bf5a1ea7505bf64a",
+ "name": "tests/integration/targets/eos_smoke/tests/cli",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_static_routes/tests/common/rtt.yaml",
+ "name": "tests/integration/targets/eos_smoke/tests/cli/common_utils.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2c42048158fb304b5951f30de6ce718b723ff26659c2f1ece7f577612f557675",
+ "chksum_sha256": "16ff2cbec75c329d7ffaeff96467873aae0b48e203e9013b5643fc47af5d47aa",
"format": 1
},
{
- "name": "tests/integration/targets/eos_static_routes/tests/common/_populate.yaml",
+ "name": "tests/integration/targets/eos_smoke/tests/cli/misc_tests.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5c1986157b288504efba9959764aa6b8de99c79007f97a59c48e6ad72a496535",
+ "chksum_sha256": "8d12a8d25e86ab4cb05fbb567d3e602da96ccf9c7249a92d4e7b00175242085e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_static_routes/tests/common/merged.yaml",
+ "name": "tests/integration/targets/eos_smoke/tests/cli/common_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9ab33deec36ea6b8eea7be1b6eafb943f360759fe3b3e5c78211a9ab6cda58f3",
+ "chksum_sha256": "8c0c76c10792321352005faed0ae9c51f1387f4964f2175e9a8e39af1c444ca1",
"format": 1
},
{
- "name": "tests/integration/targets/eos_static_routes/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/eos_smoke/tests/cli/reboot.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c93a2f5e26cee3ca747d7dacfb5233adb9c1448b72c54119fd32dce25988f0b8",
+ "chksum_sha256": "f89bcad9703169bbc45f7cb7a306b81666f9ac935a912a144da191470dcf1102",
"format": 1
},
{
- "name": "tests/integration/targets/eos_static_routes/tests/common/_parsed.cfg",
+ "name": "tests/integration/targets/eos_smoke/tests/cli/caching.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4df3d87f73db3368744f45083b9b822543ce447d77a6167922de9c3cc3908909",
+ "chksum_sha256": "ea530ff631421e3a7a074f77dcaf5b511a4020d80f609a967362c7708b910c01",
"format": 1
},
{
- "name": "tests/integration/targets/eos_static_routes/tests/common/replaced.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": "08eaf829db084d4878287253871d6dde4d9027f179af071ba0b501eb474791bf",
+ "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_static_routes/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/eos_smoke/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bec9055d452548f078aec3418ef1d147865a0b03c739b9a8cb7609142959736c",
+ "chksum_sha256": "c7d7b1929079920b7a5922066471180e88e05b39a275e6e842f3d8bb6e5269c4",
"format": 1
},
{
- "name": "tests/integration/targets/eos_static_routes/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/eos_smoke/tasks/eapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7efefbf1285c5fc94d42b155d5e3236241aea41a49727bf31e0d27710209a2e2",
+ "chksum_sha256": "1b14bb0d83e5f509721d34f537bb0812798e5b3d3ad6794f1cb7314c8a419202",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lacp_interfaces",
+ "name": "tests/integration/targets/eos_l2_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_lacp_interfaces/tasks",
+ "name": "tests/integration/targets/eos_l2_interfaces/defaults",
"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": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_lacp_interfaces/tasks/cli.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f53f0ae420b815a40999516a0df43dbf6be6478362d4fd00f938647cd31ea997",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_lacp_interfaces/tasks/eapi.yaml",
+ "name": "tests/integration/targets/eos_l2_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6d01e053990d738bcb911756ab9be2a7659b592d0841d98a1efbe9f4abb2528c",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lacp_interfaces/meta",
+ "name": "tests/integration/targets/eos_l2_interfaces/vars",
"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_l2_interfaces/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
+ "chksum_sha256": "2d11de6e7c7e491f1f5247e77d3cc3367368e71c12900e057007742b5f69b93e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lacp_interfaces/defaults",
+ "name": "tests/integration/targets/eos_l2_interfaces/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_l2_interfaces/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_l2_interfaces/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_l2_interfaces/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/deleted.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d6a728cf70443f8ffc3ff061c9ee8d1eb85866c930760f3b277200956f41fb99",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/eos_l2_interfaces/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1a8a850858d11124418c7fbc26742397895220754befde252ad24117705e3deb",
+ "chksum_sha256": "edb8b0ac8acd4b5e054bbfa29800537c9b159ab96d7187400f26c80be72c7abf",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/empty_config.yaml",
+ "name": "tests/integration/targets/eos_l2_interfaces/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2b46d6ceee61ab907fcb57229bf38f361785e90cba1c90ac5ff50d4e9513a3d7",
+ "chksum_sha256": "e27eed12e565edc2ef8199044486e7df6759cf3a8fa2c4999c06d465b416ac11",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/rtt.yaml",
+ "name": "tests/integration/targets/eos_l2_interfaces/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4bcd6ab1c2fc53eb4c774397a6ee078ce4382963c6ffb53e7514a13721c24974",
+ "chksum_sha256": "c9f82a69c636f9d85ef893fb5d2fba696d0a47bc9fe1e2c3e316acb63b79453d",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/merged.yaml",
+ "name": "tests/integration/targets/eos_l2_interfaces/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cce344c093d2137f12b8a9933298953bc3330081dcbae362088a5097b2514813",
+ "chksum_sha256": "aaf8f107ec4a7699b08aba428c96066164570af0da4c031499210e65a9ac976a",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/eos_l2_interfaces/tests/common/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f924be9202c965db71f4880a635ba5acc81f9cb91f0101907f3e96387674e8f7",
+ "chksum_sha256": "9f5bae45f76d827baaed602070abd64acc8a7c7f22410e169b0871344f1023ba",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/_parsed.cfg",
+ "name": "tests/integration/targets/eos_l2_interfaces/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a3796a2313899acffb35cddcaa5673d76efd8751d1fed12d820f5973a9476d8d",
+ "chksum_sha256": "fce0cbcecc5da5700eadd7509b5ec52749d2161ff7b3f99b95a4d2796c158f4c",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/eos_l2_interfaces/tests/common/_reset_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "45ec3d12aef7d086d901f4bba8e6084fe7a13cf8b31f321621c598fa2cb88405",
+ "chksum_sha256": "cb38b9a77caba2c84ab6c80ba15134346ae856147e816086b43f2c90a0e8014e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/eos_l2_interfaces/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e2bc98e817414304b3ad22cf0d6747e9908af6b692824cb5dd751058968e2de3",
+ "chksum_sha256": "7fe18f0fa44accb4bdd0464888179e38186b2bc1bb7534786d823700eab75201",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/_reset_config.yaml",
+ "name": "tests/integration/targets/eos_l2_interfaces/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b36bf6f528c9b79fc7a9b7f2d3b182ca1f2ddd3339579701d92b36b019ec959d",
+ "chksum_sha256": "01c98f37d467b49d62c858aa1eb80e31829d3af8df1d67b17b95612b1e014d2f",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/eos_l2_interfaces/tests/common/_cleanup.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c417f982e3ee716d3de8a1bd93a0671eb29a513a6e4b62b7ec9ab6a06e038511",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_bgp",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_bgp/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "72c891a2b69fea4a08d88aef80ab42588f0761b3fcee4654ea769a82e2cad772",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp/tasks/main.yaml",
+ "name": "tests/integration/targets/eos_l2_interfaces/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8d0f3e120b5e0f83314d06ed429b515b98e122ebdd4111b4e5be0bf09098877c",
+ "chksum_sha256": "0ed56a5c9ced6b499dda2d9788c2021ea24b0d17f0d0931a7c11b9addc59f3e6",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp/tasks/cli.yaml",
+ "name": "tests/integration/targets/eos_l2_interfaces/tests/common/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5",
+ "chksum_sha256": "ab629c595374a5ff76a3d76f22278948131ccfd3f5de5e08f8bb0fae170883c0",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp/meta",
+ "name": "tests/integration/targets/eos_l2_interfaces/tasks",
"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/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
+ "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/eos_l2_interfaces/tasks/cli.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3d287a5645a94634b96fbeb33a93d7cc866421adb10d5e45810aae4ae003fd52",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp/defaults/main.yaml",
+ "name": "tests/integration/targets/eos_l2_interfaces/tasks/eapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
+ "chksum_sha256": "90b0fb30b63afdda9bc8d5bee03e2b6cc6f785a7af550690bf002a207fa42d9c",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp/tests",
+ "name": "tests/integration/targets/eos_ospf_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp/tests/cli",
+ "name": "tests/integration/targets/eos_ospf_interfaces/defaults",
"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_ospf_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bdebd0673be1e39039dcb426a889e569042dad0c5cb7b2bf01ba68d7091b894",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_acls",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/eos_acls/tasks",
+ "name": "tests/integration/targets/eos_ospf_interfaces/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_acls/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_acls/tasks/cli.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "123f47356786e4facd8bf8169639c0286878d1ad6e37b71c283d8729848ee841",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_acls/tasks/eapi.yaml",
+ "name": "tests/integration/targets/eos_ospf_interfaces/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9f3757d49c81f01e6fdc9ed127fe45328fca0d8bb2871cf5277a0af7f27ea533",
+ "chksum_sha256": "bd015c6e2a8c0de8c44a813c8d30a6554cb1f7dec683760cd30a899ce85481c5",
"format": 1
},
{
- "name": "tests/integration/targets/eos_acls/meta",
+ "name": "tests/integration/targets/eos_ospf_interfaces/templates",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_acls/meta/main.yaml",
+ "name": "tests/integration/targets/eos_ospf_interfaces/templates/populate.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
+ "chksum_sha256": "e2d645f551982b7ea8613b5d94260428dbcd4cd3207d34a4bb51fb8722b0ffc4",
"format": 1
},
{
- "name": "tests/integration/targets/eos_acls/defaults",
+ "name": "tests/integration/targets/eos_ospf_interfaces/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_acls/defaults/main.yaml",
+ "name": "tests/integration/targets/eos_ospf_interfaces/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
"format": 1
},
{
- "name": "tests/integration/targets/eos_acls/tests",
+ "name": "tests/integration/targets/eos_ospf_interfaces/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_acls/tests/common",
+ "name": "tests/integration/targets/eos_ospf_interfaces/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_acls/tests/common/_remove_config.yaml",
+ "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/_populate.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c567c0a070d35ae7dc0def99be6a57bdf14d0485dd785e72c4c9e192c98d12ec",
+ "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6",
"format": 1
},
{
- "name": "tests/integration/targets/eos_acls/tests/common/deleted.yaml",
+ "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6688f31ad22c98409e9af72340492edcfb288cef4d3c30037ed424b886cf634e",
+ "chksum_sha256": "3fd4657ae775a57bdcda3537eaafb956b979f0a1569c80583364e96f16e2f201",
"format": 1
},
{
- "name": "tests/integration/targets/eos_acls/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d9b49e9cd0c20334e2f3ac1aaa7cf75fa51acfe5d2d47b60d35d77260d77b145",
+ "chksum_sha256": "c136e2d339db165c433d2b3bd05409e542892bb8a5a94f53737891fb082d16f8",
"format": 1
},
{
- "name": "tests/integration/targets/eos_acls/tests/common/rtt.yaml",
+ "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0659d10743e2796f81f48bae653e0cdf722e3999e7c2593453290fd0eafaf63e",
+ "chksum_sha256": "7c607da23362194cb7a396214a601408e7ea7b78e895567b6a070205916f4677",
"format": 1
},
{
- "name": "tests/integration/targets/eos_acls/tests/common/_populate.yaml",
+ "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "adf72055e9bffeaa9a7d332e77898a2ff6f1748eb02046d0867c907601c72cc7",
+ "chksum_sha256": "e9086ad58ff3a415a829921047e1c805e34d6ae95488b9b1c937b20a922ae964",
"format": 1
},
{
- "name": "tests/integration/targets/eos_acls/tests/common/merged.yaml",
+ "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8ae640e0d6726b443b36e33c066555aab81c0c865d21f92a9218fb449839df17",
+ "chksum_sha256": "b5c505431c56a3bd030ee52a85e240626c905bfe2809aab18a2e761066e0ccbb",
"format": 1
},
{
- "name": "tests/integration/targets/eos_acls/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "161b63801d5e2e1ed876dc6929ab54c7f2f89bef189ab4b7f394679b6561b244",
+ "chksum_sha256": "4f997c36cc9170f11226c5057f8a2a6b9da5717306c07a8dcfae8517d9b4152d",
"format": 1
},
{
- "name": "tests/integration/targets/eos_acls/tests/common/_parsed.cfg",
+ "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "49fbf1221f7702466cfa35dc681b919b2e7f627e1649743147b80bdf021fd1f0",
+ "chksum_sha256": "f61d79526410667fe97aa0c1fa0c6a0162e500c6abc373d025165382643b96a4",
"format": 1
},
{
- "name": "tests/integration/targets/eos_acls/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "02a799009a3c14748b28e1ca595ec784e16f7589e3d08786991775bb73edc628",
+ "chksum_sha256": "e3389b2ec80e9dfa1b851de623ba7bf990b39240feebc9e3cb18dac87b85250e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_acls/tests/common/_parsed_cfg.yaml",
+ "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be71f5afa12feed2b7689ce870b7eda8b2b722b1968643f26951691612fa7822",
+ "chksum_sha256": "698af51d7f6a6ced71a9415495684f30be35b26cb298b53e1de7792a3d857c18",
"format": 1
},
{
- "name": "tests/integration/targets/eos_acls/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8b73e35944c74b107af433bbcc6e7b7c4cf64f928a29dadffa1f8d469c1c6d25",
+ "chksum_sha256": "4222a5770d1b912a7ac71103749ff82d93dd903e769e87690471a59be0c7e988",
"format": 1
},
{
- "name": "tests/integration/targets/eos_acls/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/gathered_empty_config.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "50f9aa1e9a9c7e29fc6efd923caa8cfb358bbd69417b539d2ecd978af5e1519c",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_acls/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "f6ff5c23745f6f182db2a1173cd25b5a98a29465a8bc37cae61678d8c577af23",
"format": 1
},
{
- "name": "tests/integration/targets/eos_acls/vars/main.yaml",
+ "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/rtt.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": "cb5f91b025aa37891756c22bfae165a560c4c00bcee7f0d93005ddc79944886e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_acl_interfaces/tasks",
+ "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/tasks/main.yaml",
+ "name": "tests/integration/targets/eos_ospf_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d",
+ "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_acl_interfaces/tasks/cli.yaml",
+ "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_acl_interfaces/tasks/eapi.yaml",
+ "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_acl_interfaces/meta",
+ "name": "tests/integration/targets/eos_lacp",
"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_lacp/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/eos_lacp/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/eos_acl_interfaces/defaults",
+ "name": "tests/integration/targets/eos_lacp/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_acl_interfaces/defaults/main.yaml",
+ "name": "tests/integration/targets/eos_lacp/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a79b77c93a1982c2682c177681bfcef5f3fb3421e3ef10be452fc81dc3ce8871",
+ "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
"format": 1
},
{
- "name": "tests/integration/targets/eos_acl_interfaces/tests",
+ "name": "tests/integration/targets/eos_lacp/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_acl_interfaces/tests/common",
+ "name": "tests/integration/targets/eos_lacp/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_acl_interfaces/tests/common/_remove_config.yaml",
+ "name": "tests/integration/targets/eos_lacp/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b87b082bd1a6efb8a4fcffbc804615955068460aa128235e5bc6833b551be9b2",
+ "chksum_sha256": "14973e3f346a4f8643baff860e9a35d46a16d7ed42212bc804ffa2b78f70c023",
"format": 1
},
{
- "name": "tests/integration/targets/eos_acl_interfaces/tests/common/deleted.yaml",
+ "name": "tests/integration/targets/eos_lacp/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dfc9f3e78036a19826feccd2fad6679dd22d05d44fdf5226540ce1f29256f261",
+ "chksum_sha256": "bfdee3db7e752c613eb903f5b515c30d6ae3b5da4b641f9c575416aa32d77649",
"format": 1
},
{
- "name": "tests/integration/targets/eos_acl_interfaces/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/eos_lacp/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e43043f8a8c88832634fb29c4839abc2be35598c34df4a953d0eda562a90c78e",
+ "chksum_sha256": "298c194b94ae3f3750c516e2245251ed37611565c429ccf4fd7427c22df368cd",
"format": 1
},
{
- "name": "tests/integration/targets/eos_acl_interfaces/tests/common/empty_config.yaml",
+ "name": "tests/integration/targets/eos_lacp/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e304de25e98dfbbd3e8b884f6478d7b841a022b232febe94380f256a50a51557",
+ "chksum_sha256": "7cc12a2c9c2b6154d7474af3cc090677b5067fa213c13ba6fb8b4203b9aa0149",
"format": 1
},
{
- "name": "tests/integration/targets/eos_acl_interfaces/tests/common/rtt.yaml",
+ "name": "tests/integration/targets/eos_lacp/tests/common/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f2b15009df3b8b2bd9936379027b7f544a9c81a23e5c33fb9847b25a0b54645c",
+ "chksum_sha256": "800ead8f10e3d4bc50ddf469a53b358695197f47476eb4b3789aa011e16f1dea",
"format": 1
},
{
- "name": "tests/integration/targets/eos_acl_interfaces/tests/common/_populate.yaml",
+ "name": "tests/integration/targets/eos_lacp/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4cfbb7d9c017eea2318fb53edf60ff9b83e6dfeccae2d6bc85f16d05d33a7ff0",
+ "chksum_sha256": "256d175eb92a50a737d23b476ff3fe20d9999764b3cdac3fe3f625bc357bc809",
"format": 1
},
{
- "name": "tests/integration/targets/eos_acl_interfaces/tests/common/merged.yaml",
+ "name": "tests/integration/targets/eos_lacp/tests/common/_reset_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1668ec34e8d2f67dc611925ddf3b4f00ae826f0a65c72d939a8b1046d64c873d",
+ "chksum_sha256": "d0dcc0055c8b24c34f55531d55a1069274e7450a6592a5223e9976887437cd33",
"format": 1
},
{
- "name": "tests/integration/targets/eos_acl_interfaces/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/eos_lacp/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1f5be632f4525a5de8591f6aa83113ccf37fd9cb62d0f5b6ef4c62dcfb1c6fa7",
+ "chksum_sha256": "1567cbeeee2362aa296686ff39b8a1fb0e95ee41adfb130e8612826981e7113d",
"format": 1
},
{
- "name": "tests/integration/targets/eos_acl_interfaces/tests/common/_parsed.cfg",
+ "name": "tests/integration/targets/eos_lacp/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dad0f95e9549bce843069bc4584803994e2549a64e70c6d844e5d37e41190630",
+ "chksum_sha256": "dade4172a3223fc93e1eca92c3303456eb1f6c154c4cbcedad9a1e267821a311",
"format": 1
},
{
- "name": "tests/integration/targets/eos_acl_interfaces/tests/common/replaced.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0d3dca47353e80e36f629fd572a1b64e2c49dd75d82bf4ab28fc53634d33803b",
+ "name": "tests/integration/targets/eos_lacp/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_acl_interfaces/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/eos_lacp/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "86b04f3482cda3dd386cac6bd225865c4f3637845bc2b38165814e6c89bbaa2a",
+ "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_acl_interfaces/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/eos_lacp/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "876b6b7da3c239e569da81974334a14293ce92683bae9643239bcd4bb083c94b",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_acl_interfaces/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "f53f0ae420b815a40999516a0df43dbf6be6478362d4fd00f938647cd31ea997",
"format": 1
},
{
- "name": "tests/integration/targets/eos_acl_interfaces/vars/main.yaml",
+ "name": "tests/integration/targets/eos_lacp/tasks/eapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8631d3b93d4bf6c66a2d3f5e5c11f188f364dc3a36a4bfa5614a51a045a1d49f",
+ "chksum_sha256": "6d01e053990d738bcb911756ab9be2a7659b592d0841d98a1efbe9f4abb2528c",
"format": 1
},
{
- "name": "tests/integration/targets/prepare_eos_tests",
+ "name": "tests/integration/targets/eos_banner",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/prepare_eos_tests/tasks",
+ "name": "tests/integration/targets/eos_banner/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_banner/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c53c149ac2c5c508711c2414d406b033110276eb4622949358a6e1efcf3cd505",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
- "name": "tests/integration/targets/prepare_eos_tests/meta",
+ "name": "tests/integration/targets/eos_banner/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_banner/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_banner/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_hostname/tasks",
+ "name": "tests/integration/targets/eos_banner/tests/eapi",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_hostname/tasks/main.yaml",
+ "name": "tests/integration/targets/eos_banner/tests/eapi/basic-motd.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d",
+ "chksum_sha256": "c8e94533c27b7c01e870af443aae37c16cb5180e86658a8de5a2a6b5599efb97",
"format": 1
},
{
- "name": "tests/integration/targets/eos_hostname/tasks/cli.yaml",
+ "name": "tests/integration/targets/eos_banner/tests/eapi/basic-login.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281",
+ "chksum_sha256": "d7cd4bec5ba015f96ac020675f8b4a256dcc1e2bdd9f4b59775237acaa8d809c",
"format": 1
},
{
- "name": "tests/integration/targets/eos_hostname/tasks/eapi.yaml",
+ "name": "tests/integration/targets/eos_banner/tests/cli",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/eos_banner/tests/cli/basic-motd.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d",
+ "chksum_sha256": "4b2551d785983506768deb63cd2f8ba8ae35c5e6ce5eae18e340fd75291e390a",
"format": 1
},
{
- "name": "tests/integration/targets/eos_hostname/meta",
+ "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_banner/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_hostname/meta/main.yaml",
+ "name": "tests/integration/targets/eos_banner/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
+ "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_hostname/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/eos_banner/tasks/cli.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5",
"format": 1
},
{
- "name": "tests/integration/targets/eos_hostname/defaults/main.yaml",
+ "name": "tests/integration/targets/eos_banner/tasks/eapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "1b14bb0d83e5f509721d34f537bb0812798e5b3d3ad6794f1cb7314c8a419202",
"format": 1
},
{
- "name": "tests/integration/targets/eos_hostname/tests",
+ "name": "tests/integration/targets/eos_command",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_hostname/tests/common",
+ "name": "tests/integration/targets/eos_command/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_hostname/tests/common/_remove_config.yaml",
+ "name": "tests/integration/targets/eos_command/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bbd01a1b82535d87fb2c5192c045a1452c02385b1d9325bdcb8013b03f3840d5",
+ "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"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_command/meta",
+ "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_command/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aed726bbfbc34673f8da380cceaac909741a8a4533d1abf057afb6d9f5b0b214",
+ "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
"format": 1
},
{
- "name": "tests/integration/targets/eos_hostname/tests/common/empty_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "969820bbaeb224608a4aab530cbeeb88627ac039bcacf2a1942ec42705e5514d",
+ "name": "tests/integration/targets/eos_command/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_hostname/tests/common/_populate.yaml",
+ "name": "tests/integration/targets/eos_command/tests/eapi",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/eos_command/tests/eapi/notequal.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6",
+ "chksum_sha256": "fa8076a05fc1d4cfc801e077a2204d20cb1c7eca29ee7efca969fb68bb4969a9",
"format": 1
},
{
- "name": "tests/integration/targets/eos_hostname/tests/common/merged.yaml",
+ "name": "tests/integration/targets/eos_command/tests/eapi/equal.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "079da330b620d09b22c55b8c63db98278c3347639db086a2c86f0039f2d13f35",
+ "chksum_sha256": "bf0a37bd334e4ac7039fa458189a52163c074d38da24e01b4e31b1a5df564bf5",
"format": 1
},
{
- "name": "tests/integration/targets/eos_hostname/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/eos_command/tests/eapi/greaterthanorequal.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "36160ee5a95d8b19e314fbe8b473f56c8dc87e209f3c9394803a1b7a900f9ed4",
+ "chksum_sha256": "58247b34643e80aa852c3069ab18673c02c98a30845b2edc808262ccd0e26a37",
"format": 1
},
{
- "name": "tests/integration/targets/eos_hostname/tests/common/_parsed.cfg",
+ "name": "tests/integration/targets/eos_command/tests/eapi/lessthanorequal.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "55cfe4746ef24943eac865d5b0fd9b6a6884e0e529983e253d5764175c01c6e9",
+ "chksum_sha256": "5762ba9c8c56c10a9473447afc5e4be6f14c8a13f64840fe001e0b1fb1a0cf9a",
"format": 1
},
{
- "name": "tests/integration/targets/eos_hostname/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/eos_command/tests/eapi/version.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "784e0e5db4b302883890287cd2ba18d7005403f1c05be8c8c23f7d8b1f807cea",
+ "chksum_sha256": "3a28c24b52f933e2a767f91719be61f48f473d42854b0f2bb17583d1ec9b6d6a",
"format": 1
},
{
- "name": "tests/integration/targets/eos_hostname/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/eos_command/tests/eapi/invalid.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9093ee823c0145791216cf2d53f00df72c6ba361f525b2337b6645bdb7d3e8c5",
+ "chksum_sha256": "e0ff41bbdbf781316e8f8b28ae72d5c6f2dd45d9040e340ed8e089632c62dfb5",
"format": 1
},
{
- "name": "tests/integration/targets/eos_hostname/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/eos_command/tests/eapi/timeout.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d89644559714c65b378af2d9a1e23c0432a2f1abd4fb09f3538f844430dc06d3",
+ "chksum_sha256": "77c15954650a439dd4fad91b81be94d802c38168a3ab63478d957492874362e5",
"format": 1
},
{
- "name": "tests/integration/targets/eos_hostname/vars",
- "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_hostname/vars/main.yaml",
+ "name": "tests/integration/targets/eos_command/tests/eapi/bad_operator.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9762cc4a787aec50485af807234f50902fde96f57e6ad904e62a9588c1f61373",
+ "chksum_sha256": "92b19c1a1597bad3fe8920c6d15810f2df039981b9488dc802e31b599255ca7c",
"format": 1
},
{
- "name": "tests/integration/targets/eos_hostname/templates",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "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_hostname/templates/populate.cfg",
+ "name": "tests/integration/targets/eos_command/tests/eapi/output.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "55cfe4746ef24943eac865d5b0fd9b6a6884e0e529983e253d5764175c01c6e9",
+ "chksum_sha256": "693de41c9288eff0fecd465d42917945b0304d9ed5e0ac8f0370e25daf21b8c3",
"format": 1
},
{
- "name": "tests/integration/targets/eos_smoke",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "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_smoke/tasks",
+ "name": "tests/integration/targets/eos_command/tests/cli",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_smoke/tasks/main.yaml",
+ "name": "tests/integration/targets/eos_command/tests/cli/notequal.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e",
+ "chksum_sha256": "3bb2dfd7a6a694105573c6eadaa72f817458acc9dcb0dd0a1a854d319d09cef5",
"format": 1
},
{
- "name": "tests/integration/targets/eos_smoke/tasks/cli.yaml",
+ "name": "tests/integration/targets/eos_command/tests/cli/equal.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c7d7b1929079920b7a5922066471180e88e05b39a275e6e842f3d8bb6e5269c4",
+ "chksum_sha256": "762cb51b120a123a9af5a8256b45ff6103bf26624e6425e4a8b42c1c34cb70df",
"format": 1
},
{
- "name": "tests/integration/targets/eos_smoke/tasks/eapi.yaml",
+ "name": "tests/integration/targets/eos_command/tests/cli/greaterthanorequal.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1b14bb0d83e5f509721d34f537bb0812798e5b3d3ad6794f1cb7314c8a419202",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_smoke/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "0410c3b348dcd910c449696a7ca05847e90d4e9d0504287ef1ede60d9f526308",
"format": 1
},
{
- "name": "tests/integration/targets/eos_smoke/meta/main.yml",
+ "name": "tests/integration/targets/eos_command/tests/cli/lessthanorequal.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
+ "chksum_sha256": "02dac1c05e69cfe6e0db11694305e27d5cf5c18b916c83725145a01c45d151ce",
"format": 1
},
{
- "name": "tests/integration/targets/eos_smoke/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/eos_command/tests/cli/version.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7e1ca984e5d0cff37df1d4029e0a9044daa287e5b6355387920054695dfd61cc",
"format": 1
},
{
- "name": "tests/integration/targets/eos_smoke/defaults/main.yaml",
+ "name": "tests/integration/targets/eos_command/tests/cli/invalid.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
+ "chksum_sha256": "b5fad1e7df8589dfd24573eb51f93dfb513d5fae99d434fd92edeb5ee1e96945",
"format": 1
},
{
- "name": "tests/integration/targets/eos_smoke/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/eos_command/tests/cli/timeout.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0710688d24996846459569d49568102b47517ceb62da0be0168f8f4cc10744b2",
"format": 1
},
{
- "name": "tests/integration/targets/eos_smoke/tests/cli",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/eos_command/tests/cli/lessthan.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6829309ca8cf687d623c0c9f497e1f145aea6dc7df99c832174e549c18c83620",
"format": 1
},
{
- "name": "tests/integration/targets/eos_smoke/tests/cli/common_utils.yaml",
+ "name": "tests/integration/targets/eos_command/tests/cli/cli_command.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "16ff2cbec75c329d7ffaeff96467873aae0b48e203e9013b5643fc47af5d47aa",
+ "chksum_sha256": "da86906ca5b2fd63ecc66e426e89f951058a3c90f0e9fd36accf6001837fda25",
"format": 1
},
{
- "name": "tests/integration/targets/eos_smoke/tests/cli/misc_tests.yaml",
+ "name": "tests/integration/targets/eos_command/tests/cli/bad_operator.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8d12a8d25e86ab4cb05fbb567d3e602da96ccf9c7249a92d4e7b00175242085e",
+ "chksum_sha256": "7519d9b6d82234763393ccb21be1c3b1aee3457627c963bddb6db8ddb11df7ea",
"format": 1
},
{
- "name": "tests/integration/targets/eos_smoke/tests/cli/common_config.yaml",
+ "name": "tests/integration/targets/eos_command/tests/cli/greaterthan.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8c0c76c10792321352005faed0ae9c51f1387f4964f2175e9a8e39af1c444ca1",
+ "chksum_sha256": "84cf8932e41d9e08041c38f84dfb9b1d62680abc42a4b645245ef5fd365b362a",
"format": 1
},
{
- "name": "tests/integration/targets/eos_smoke/tests/cli/caching.yaml",
+ "name": "tests/integration/targets/eos_command/tests/cli/output.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ea530ff631421e3a7a074f77dcaf5b511a4020d80f609a967362c7708b910c01",
+ "chksum_sha256": "c4f066d2e8544080a5cf534d49cac23b6af9380724df99f1ac2ea601fdae230d",
"format": 1
},
{
- "name": "tests/integration/targets/eos_smoke/tests/cli/reboot.yaml",
+ "name": "tests/integration/targets/eos_command/tests/cli/contains.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f89bcad9703169bbc45f7cb7a306b81666f9ac935a912a144da191470dcf1102",
+ "chksum_sha256": "e4e02af125647f0d0812ea8f3d43e8ca78a8ba11e4a572c39a8a061f836aada7",
"format": 1
},
{
- "name": "tests/integration/targets/eos_smoke/tests/eapi",
+ "name": "tests/integration/targets/eos_command/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_smoke/tests/eapi/common_utils.yaml",
+ "name": "tests/integration/targets/eos_command/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a18fa7aed51409b4944aada8a31a413f1058fda4ca0e652f55296166b6c5a253",
+ "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d",
"format": 1
},
{
- "name": "tests/integration/targets/eos_smoke/tests/eapi/common_config.yaml",
+ "name": "tests/integration/targets/eos_command/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8c0c76c10792321352005faed0ae9c51f1387f4964f2175e9a8e39af1c444ca1",
+ "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lag_interfaces",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/eos_command/tasks/eapi.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1b14bb0d83e5f509721d34f537bb0812798e5b3d3ad6794f1cb7314c8a419202",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lag_interfaces/tasks",
+ "name": "tests/integration/targets/eos_acls",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_lag_interfaces/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_lag_interfaces/tasks/cli.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f53f0ae420b815a40999516a0df43dbf6be6478362d4fd00f938647cd31ea997",
+ "name": "tests/integration/targets/eos_acls/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_lag_interfaces/tasks/eapi.yaml",
+ "name": "tests/integration/targets/eos_acls/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6d01e053990d738bcb911756ab9be2a7659b592d0841d98a1efbe9f4abb2528c",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lag_interfaces/meta",
+ "name": "tests/integration/targets/eos_acls/vars",
"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_acls/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
+ "chksum_sha256": "4ac57542e8c5b785dac916943f46c3166ab7e8ed158541a5f38c8d83ba8247c2",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lag_interfaces/defaults",
+ "name": "tests/integration/targets/eos_acls/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_lag_interfaces/defaults/main.yaml",
+ "name": "tests/integration/targets/eos_acls/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lag_interfaces/tests",
+ "name": "tests/integration/targets/eos_acls/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_lag_interfaces/tests/cli",
+ "name": "tests/integration/targets/eos_acls/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/eos_acls/tests/common/_populate.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b58309f8938bba932257668c1dd8e88057583702dd483304b451dc2bcb3d2389",
+ "chksum_sha256": "adf72055e9bffeaa9a7d332e77898a2ff6f1748eb02046d0867c907601c72cc7",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/eos_acls/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b05efe5f17248475b35be8de1008f92763eabc0a46f7e6e6ef721d0ed1c0d005",
+ "chksum_sha256": "8b73e35944c74b107af433bbcc6e7b7c4cf64f928a29dadffa1f8d469c1c6d25",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/eos_acls/tests/common/_parsed_cfg.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bb70b82e4f2780065245088e2a0868d4bd3ac4d78772c3533772904502384b7f",
+ "chksum_sha256": "be71f5afa12feed2b7689ce870b7eda8b2b722b1968643f26951691612fa7822",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/eos_acls/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ac0aaba7718ec98d92a4b78ded3ee5dd5c7b0f7bbf4eb62a00200769ebd84362",
+ "chksum_sha256": "50f9aa1e9a9c7e29fc6efd923caa8cfb358bbd69417b539d2ecd978af5e1519c",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/overridden.yaml",
+ "name": "tests/integration/targets/eos_acls/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d4e9b522c4e33d097cea87a3bfbdb7d7c0420be389b4b2ae4b0ec2c1dc9c1589",
+ "chksum_sha256": "d9b49e9cd0c20334e2f3ac1aaa7cf75fa51acfe5d2d47b60d35d77260d77b145",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/_parsed.cfg",
+ "name": "tests/integration/targets/eos_acls/tests/common/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e8dd392df3bb210172a0fb991fafc904367293cc00e7dbdd2289ab477d58011b",
+ "chksum_sha256": "49fbf1221f7702466cfa35dc681b919b2e7f627e1649743147b80bdf021fd1f0",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/eos_acls/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec7f5172df48561a7661707c31befc2372876e79536cf8452cce42131e26efa3",
+ "chksum_sha256": "6688f31ad22c98409e9af72340492edcfb288cef4d3c30037ed424b886cf634e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/parsed.yaml",
+ "name": "tests/integration/targets/eos_acls/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c49e1972ec01b3646c6d93d8dce2d3672048797e780cd160b4b721a08b348d89",
+ "chksum_sha256": "c567c0a070d35ae7dc0def99be6a57bdf14d0485dd785e72c4c9e192c98d12ec",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/_reset_config.yaml",
+ "name": "tests/integration/targets/eos_acls/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e67fbf115a90966048b5dd75e61b370f6001fdebaf1da0c8cd8670e7593ef086",
+ "chksum_sha256": "161b63801d5e2e1ed876dc6929ab54c7f2f89bef189ab4b7f394679b6561b244",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/eos_acls/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0a09e158385c2158469622bdd80fbaacde054cc03c780e2f895973c59413eb38",
+ "chksum_sha256": "8ae640e0d6726b443b36e33c066555aab81c0c865d21f92a9218fb449839df17",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lag_interfaces/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/eos_acls/tests/common/replaced.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "02a799009a3c14748b28e1ca595ec784e16f7589e3d08786991775bb73edc628",
"format": 1
},
{
- "name": "tests/integration/targets/eos_lag_interfaces/vars/main.yaml",
+ "name": "tests/integration/targets/eos_acls/tests/common/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "594c6341406e70e47b7f9a9af53f481c6876cea084a03beca4068406e59f149c",
+ "chksum_sha256": "0659d10743e2796f81f48bae653e0cdf722e3999e7c2593453290fd0eafaf63e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_logging",
+ "name": "tests/integration/targets/eos_acls/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_logging/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/eos_acls/tasks/main.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d",
"format": 1
},
{
- "name": "tests/integration/targets/eos_logging/tasks/main.yaml",
+ "name": "tests/integration/targets/eos_acls/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e",
+ "chksum_sha256": "123f47356786e4facd8bf8169639c0286878d1ad6e37b71c283d8729848ee841",
"format": 1
},
{
- "name": "tests/integration/targets/eos_logging/tasks/cli.yaml",
+ "name": "tests/integration/targets/eos_acls/tasks/eapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5",
+ "chksum_sha256": "9f3757d49c81f01e6fdc9ed127fe45328fca0d8bb2871cf5277a0af7f27ea533",
"format": 1
},
{
- "name": "tests/integration/targets/eos_logging/tasks/eapi.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1b14bb0d83e5f509721d34f537bb0812798e5b3d3ad6794f1cb7314c8a419202",
+ "name": "tests/integration/targets/eos_lldp_interfaces",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_logging/meta",
+ "name": "tests/integration/targets/eos_lldp_interfaces/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_logging/meta/main.yaml",
+ "name": "tests/integration/targets/eos_lldp_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/eos_logging/defaults",
+ "name": "tests/integration/targets/eos_lldp_interfaces/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_logging/defaults/main.yaml",
+ "name": "tests/integration/targets/eos_lldp_interfaces/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
+ "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
"format": 1
},
{
- "name": "tests/integration/targets/eos_logging/tests",
+ "name": "tests/integration/targets/eos_lldp_interfaces/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_logging/tests/cli",
+ "name": "tests/integration/targets/eos_lldp_interfaces/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_logging/tests/cli/basic.yaml",
+ "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a007ba121e4852763d37a3f6c644aa9eb28771279d1190aadcf77eb97675c5a4",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_logging/tests/eapi",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "23e7bceb1fd85748923512e2facfaf4cb2727570be530b30897febd6c79f2a1a",
"format": 1
},
{
- "name": "tests/integration/targets/eos_logging/tests/eapi/basic.yaml",
+ "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "90cbadb226481ddfba8e6981076e1d859499316b2c4018afea81607d469cd0ee",
+ "chksum_sha256": "b4f0aac4ed1a3d18ee04a35d42b989ee6a3e2a8ad07ee8b98f56f275b027e826",
"format": 1
},
{
- "name": "tests/integration/targets/eos_command",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/gathered.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7576f665b34ce43ec4245fd5765611aa031ffbf73096d9f8907b7e5a9f537c52",
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/empty_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0e5f55128df4f7326db45dfc8c478e59a39d68053caf563625473079580d6838",
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/tasks/main.yaml",
+ "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d",
+ "chksum_sha256": "73c669fdf692d5f7f3b578f6a4a46f8b0fff6d62da0f62ad903648405e9934dc",
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/tasks/cli.yaml",
+ "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5",
+ "chksum_sha256": "e10f178b46e0a654204ab75a7487641c6345c51592481e64d7c7d5d15317ac67",
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/tasks/eapi.yaml",
+ "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/_reset_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1b14bb0d83e5f509721d34f537bb0812798e5b3d3ad6794f1cb7314c8a419202",
+ "chksum_sha256": "c711ecfe5d02de94fed82b58d3402e733c1e575fea60c3f9744f3379b01d1b33",
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/overridden.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2a49e3976aa794644e2cb1ed765367a39ad81b39a42c16bca3bf32c8043dc9b1",
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/meta/main.yml",
+ "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
+ "chksum_sha256": "8fbe99406870ccff9922c49a2ae193a563edcfb51cd7a4e2797181d1a3edf3ec",
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/replaced.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "670d9e454375f4479720d7a70e5099afd23319aa52bf2d01ba9b916ffd385d8e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/defaults/main.yaml",
+ "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
+ "chksum_sha256": "61c502d64492d3127c5503a4c6180c49d6bfba16ce0b4db6d37f5547b8bed58c",
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/tests",
+ "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/cli",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "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_command/tests/cli/lessthan.yaml",
+ "name": "tests/integration/targets/eos_lldp_interfaces/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6829309ca8cf687d623c0c9f497e1f145aea6dc7df99c832174e549c18c83620",
+ "chksum_sha256": "f53f0ae420b815a40999516a0df43dbf6be6478362d4fd00f938647cd31ea997",
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/tests/cli/invalid.yaml",
+ "name": "tests/integration/targets/eos_lldp_interfaces/tasks/eapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b5fad1e7df8589dfd24573eb51f93dfb513d5fae99d434fd92edeb5ee1e96945",
+ "chksum_sha256": "6d01e053990d738bcb911756ab9be2a7659b592d0841d98a1efbe9f4abb2528c",
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/tests/cli/greaterthanorequal.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0410c3b348dcd910c449696a7ca05847e90d4e9d0504287ef1ede60d9f526308",
+ "name": "tests/integration/targets/eos_vlans",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/tests/cli/contains.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e4e02af125647f0d0812ea8f3d43e8ca78a8ba11e4a572c39a8a061f836aada7",
+ "name": "tests/integration/targets/eos_vlans/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/tests/cli/equal.yaml",
+ "name": "tests/integration/targets/eos_vlans/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "762cb51b120a123a9af5a8256b45ff6103bf26624e6425e4a8b42c1c34cb70df",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/tests/cli/bad_operator.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7519d9b6d82234763393ccb21be1c3b1aee3457627c963bddb6db8ddb11df7ea",
+ "name": "tests/integration/targets/eos_vlans/vars",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/tests/cli/lessthanorequal.yaml",
+ "name": "tests/integration/targets/eos_vlans/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "02dac1c05e69cfe6e0db11694305e27d5cf5c18b916c83725145a01c45d151ce",
+ "chksum_sha256": "361a49c0e4e03684a6718513ec6a800c844d872b6dba61efdb68249d61b34124",
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/tests/cli/output.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c4f066d2e8544080a5cf534d49cac23b6af9380724df99f1ac2ea601fdae230d",
+ "name": "tests/integration/targets/eos_vlans/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/tests/cli/greaterthan.yaml",
+ "name": "tests/integration/targets/eos_vlans/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "84cf8932e41d9e08041c38f84dfb9b1d62680abc42a4b645245ef5fd365b362a",
+ "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/tests/cli/timeout.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0710688d24996846459569d49568102b47517ceb62da0be0168f8f4cc10744b2",
+ "name": "tests/integration/targets/eos_vlans/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/tests/cli/notequal.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3bb2dfd7a6a694105573c6eadaa72f817458acc9dcb0dd0a1a854d319d09cef5",
+ "name": "tests/integration/targets/eos_vlans/tests/common",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/tests/cli/version.yaml",
+ "name": "tests/integration/targets/eos_vlans/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7e1ca984e5d0cff37df1d4029e0a9044daa287e5b6355387920054695dfd61cc",
+ "chksum_sha256": "97d8e342f7bee82d8027e115e1f5165d4a68e898b83813a2f710833e5fee4a33",
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/tests/cli/cli_command.yaml",
+ "name": "tests/integration/targets/eos_vlans/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "da86906ca5b2fd63ecc66e426e89f951058a3c90f0e9fd36accf6001837fda25",
+ "chksum_sha256": "fb1e1d667d069e7d04de886871344ca9fc0a0bded7b3c2a7437a4d95b95dd05d",
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/tests/eapi",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/eos_vlans/tests/common/gathered.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6512281e2fd290fd40f8f18191e72c127c2e3df9537c05559ecb25aed09ee4bb",
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/tests/eapi/lessthan.yaml",
+ "name": "tests/integration/targets/eos_vlans/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9cf1473ef81732265c8fab9d4aac0e2412a160b4cd1b8bccf474a6b4b872093a",
+ "chksum_sha256": "cdf7d6ea7f6f5c2ad9065b1b13e04198c38882991e60197c5c569fa6dce0d98d",
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/tests/eapi/invalid.yaml",
+ "name": "tests/integration/targets/eos_vlans/tests/common/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e0ff41bbdbf781316e8f8b28ae72d5c6f2dd45d9040e340ed8e089632c62dfb5",
+ "chksum_sha256": "24f8e0b4cb5d9b1444c92f7260088952ba7aa9a71949521dd331f5a434686783",
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/tests/eapi/greaterthanorequal.yaml",
+ "name": "tests/integration/targets/eos_vlans/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "58247b34643e80aa852c3069ab18673c02c98a30845b2edc808262ccd0e26a37",
+ "chksum_sha256": "d4df0e51ef94b5a4ef06900a79bd20e79f84a964710a14de559368071f405669",
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/tests/eapi/contains.yaml",
+ "name": "tests/integration/targets/eos_vlans/tests/common/_reset_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "35fa217e836688b2d7399c66f9408109429434afe4e85a78fa57ba9d440e7083",
+ "chksum_sha256": "31618630d4e82bffcf3ca7a4b12b835bb1b3bdf67d518eac68f72bb26b0d6924",
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/tests/eapi/equal.yaml",
+ "name": "tests/integration/targets/eos_vlans/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bf0a37bd334e4ac7039fa458189a52163c074d38da24e01b4e31b1a5df564bf5",
+ "chksum_sha256": "23f1318af4e38f802c10ac90ec7cce6573c0eac7665773f877059bcb90426bee",
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/tests/eapi/bad_operator.yaml",
+ "name": "tests/integration/targets/eos_vlans/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "92b19c1a1597bad3fe8920c6d15810f2df039981b9488dc802e31b599255ca7c",
+ "chksum_sha256": "fab8447a90775e038817655f20e15623512f87e042c86c7f93c6f5fe902aa37e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/tests/eapi/lessthanorequal.yaml",
+ "name": "tests/integration/targets/eos_vlans/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5762ba9c8c56c10a9473447afc5e4be6f14c8a13f64840fe001e0b1fb1a0cf9a",
+ "chksum_sha256": "8a2ed31515941cfc98d86db63eed394b71c6e749b8ef7a7433f5d3ff518f585a",
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/tests/eapi/output.yaml",
+ "name": "tests/integration/targets/eos_vlans/tests/common/idempotent.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "693de41c9288eff0fecd465d42917945b0304d9ed5e0ac8f0370e25daf21b8c3",
+ "chksum_sha256": "c41bbf0a4522e6f01b3e38067c543afb71b21fcbfa0a8ededd26d0683e50a81d",
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/tests/eapi/greaterthan.yaml",
+ "name": "tests/integration/targets/eos_vlans/tests/common/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c4156873ff938c4126af0092303770286cd3c1829ec579689a0413d85b57a7d6",
+ "chksum_sha256": "d33a3d3ddf38335484012ddc3a995f050d899f1f5686fae5e8ae88f8686f9d5b",
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/tests/eapi/timeout.yaml",
+ "name": "tests/integration/targets/eos_vlans/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/eos_vlans/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "77c15954650a439dd4fad91b81be94d802c38168a3ab63478d957492874362e5",
+ "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/tests/eapi/notequal.yaml",
+ "name": "tests/integration/targets/eos_vlans/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fa8076a05fc1d4cfc801e077a2204d20cb1c7eca29ee7efca969fb68bb4969a9",
+ "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281",
"format": 1
},
{
- "name": "tests/integration/targets/eos_command/tests/eapi/version.yaml",
+ "name": "tests/integration/targets/eos_vlans/tasks/eapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3a28c24b52f933e2a767f91719be61f48f473d42854b0f2bb17583d1ec9b6d6a",
+ "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d",
"format": 1
},
{
- "name": "tests/integration/targets/eos_interfaces",
+ "name": "tests/integration/targets/eos_ospfv2",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_interfaces/tasks",
+ "name": "tests/integration/targets/eos_ospfv2/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_ospfv2/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_ospfv2/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_ospfv2/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d",
+ "chksum_sha256": "c7cc18f6491766c65c2c46d595e731de7a188f6c8a4d85a511193825761fc5c1",
"format": 1
},
{
- "name": "tests/integration/targets/eos_interfaces/meta",
+ "name": "tests/integration/targets/eos_ospfv2/templates",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_interfaces/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_interfaces/defaults",
+ "name": "tests/integration/targets/eos_ospfv2/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_interfaces/defaults/main.yaml",
+ "name": "tests/integration/targets/eos_ospfv2/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
"format": 1
},
{
- "name": "tests/integration/targets/eos_interfaces/tests",
+ "name": "tests/integration/targets/eos_ospfv2/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_interfaces/tests/common",
+ "name": "tests/integration/targets/eos_ospfv2/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_interfaces/tests/common/deleted.yaml",
+ "name": "tests/integration/targets/eos_ospfv2/tests/common/_populate.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a62f1fe641f551ad15f8c85593b987486f1099f5a9172a1b27e73b4520e8ee29",
+ "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6",
"format": 1
},
{
- "name": "tests/integration/targets/eos_interfaces/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/eos_ospfv2/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7f0746803db7cb46077bb261ea73492246c9973b05d4369c4830edd6181bf453",
+ "chksum_sha256": "e8a3b87032a207d23558a38cd9b6dc25ec6af9ed0e9bc6b41725619fb0f180d0",
"format": 1
},
{
- "name": "tests/integration/targets/eos_interfaces/tests/common/empty_config.yaml",
+ "name": "tests/integration/targets/eos_ospfv2/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bc26969057893c4516d300b795ab9a9ca599596ea075a83972b2af4ed2164596",
+ "chksum_sha256": "63faa553716754def756ba24e2a6f899177afdad432eb183b788390d219e1901",
"format": 1
},
{
- "name": "tests/integration/targets/eos_interfaces/tests/common/rtt.yaml",
+ "name": "tests/integration/targets/eos_ospfv2/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ca4a201cb5ed8e1649d04eba504fc0ba0584b9404df7d3fdc3df1d9cb708c992",
+ "chksum_sha256": "2a7cd3925d54d03101a02b74c8b75fbf36fc335d3e53202ec6645f4b133f9cff",
"format": 1
},
{
- "name": "tests/integration/targets/eos_interfaces/tests/common/merged.yaml",
+ "name": "tests/integration/targets/eos_ospfv2/tests/common/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5a0737935c23ff3552dcf975ee16cfa42adfbcea87cf8bb0b8926b2ccf09c8d0",
+ "chksum_sha256": "efe02afcb1c79bf68872562eb02977725e731dfbe7536b270e0273e2766a6521",
"format": 1
},
{
- "name": "tests/integration/targets/eos_interfaces/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/eos_ospfv2/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2d7fe951ce7d79d1fee4fa2149e1f341d06c7910a220bda9e86118ea26349fef",
+ "chksum_sha256": "ebe46cf49f8af67c8cfe104d7c6e943b0280e000755907f8e718a035c9a622db",
"format": 1
},
{
- "name": "tests/integration/targets/eos_interfaces/tests/common/_parsed.cfg",
+ "name": "tests/integration/targets/eos_ospfv2/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "36a0793cac2c404b733a21498bf803d7fc38942c11ea65ea26521ca4d64e04d8",
+ "chksum_sha256": "0c38f23b440f4e2e1c0024d0c3e828cabea8b77cb08245223e9d1bd041824f55",
"format": 1
},
{
- "name": "tests/integration/targets/eos_interfaces/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/eos_ospfv2/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ca023a36a14d5f2de1b213f4e7626424523c01e952e08789e5cac48107ae0b4f",
+ "chksum_sha256": "d3e4c4999c892bdb9fca72e568774b2c986d7bdfa8fa419c651767c6d4482d50",
"format": 1
},
{
- "name": "tests/integration/targets/eos_interfaces/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/eos_ospfv2/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0c3a7c9a205c5ff75308f7bb5b9ec60565eb624f45526d5712b3e1ed026e087a",
+ "chksum_sha256": "e9e40c2f4be5c39a0bf44fc386944705e5fe6af989b7b2eab6ca282f7fb183a5",
"format": 1
},
{
- "name": "tests/integration/targets/eos_interfaces/tests/common/_reset_config.yaml",
+ "name": "tests/integration/targets/eos_ospfv2/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7ae46767fb3bead2365a6cc3aeb9acfb44d8ad8fdee5313f144fe1d248110eaf",
+ "chksum_sha256": "b7d761b36741b02edb289d71aaeac703a09dd50044f06b7a22efb65c1debf4e9",
"format": 1
},
{
- "name": "tests/integration/targets/eos_interfaces/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/eos_ospfv2/tests/common/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fed3bcba071a6d00304fba18b40062463af1e4f9098048ca4385c8ee7d3703ee",
+ "chksum_sha256": "e88142e55ffbbe41f70ee83358da99cd518becb3ff0901f786bb4d56cc098d30",
"format": 1
},
{
- "name": "tests/integration/targets/eos_interfaces/vars",
+ "name": "tests/integration/targets/eos_ospfv2/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_ospfv2/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "21f21b62a39efa62ebd86dc0b152614f89828c29b70b513a5eab734ba59bb230",
+ "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_interfaces/templates",
+ "name": "tests/integration/targets/eos_ospfv2/tasks/cli.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/eos_ospfv2/tasks/eapi.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/prepare_eos_tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_interfaces/templates/reset.cfg",
+ "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": "0a096e71ea1c5a1c492cc2e33283e427338efdf9d837a590b582c2702ccee07e",
+ "chksum_sha256": "851860fe2ed1258710d7fcf89ac5b7d8c3c87755e89ca56fdd79bea022eb2b92",
"format": 1
},
{
- "name": "tests/integration/targets/eos_system",
+ "name": "tests/integration/targets/prepare_eos_tests/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_system/tasks",
+ "name": "tests/integration/targets/prepare_eos_tests/tasks/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c53c149ac2c5c508711c2414d406b033110276eb4622949358a6e1efcf3cd505",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/eos_ospfv3",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_system/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e",
+ "name": "tests/integration/targets/eos_ospfv3/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_system/tasks/cli.yaml",
+ "name": "tests/integration/targets/eos_ospfv3/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/eos_system/tasks/eapi.yaml",
+ "name": "tests/integration/targets/eos_ospfv3/vars",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/eos_ospfv3/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1b14bb0d83e5f509721d34f537bb0812798e5b3d3ad6794f1cb7314c8a419202",
+ "chksum_sha256": "9917e16f0a7a0b7484fe0780a79f0b22180b634ad091fee3f94946946d87e030",
"format": 1
},
{
- "name": "tests/integration/targets/eos_system/meta",
+ "name": "tests/integration/targets/eos_ospfv3/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_ospfv3/templates/populate.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
+ "chksum_sha256": "96b764ff7795f328d12684eb2dd1aa60ea1e4d6d5d3e6ed638273aa7deb25686",
"format": 1
},
{
- "name": "tests/integration/targets/eos_system/defaults",
+ "name": "tests/integration/targets/eos_ospfv3/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_ospfv3/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_ospfv3/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_system/tests/cli",
+ "name": "tests/integration/targets/eos_ospfv3/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_ospfv3/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_ospfv3/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "96a436ed7ba93da80b30b7fde2babbd14d77e20c888843f12fbd37f368774c05",
+ "chksum_sha256": "c5780138500b761a2832d155ea8a30d7e78fa10a02ab581125af875994bb45c8",
"format": 1
},
{
- "name": "tests/integration/targets/eos_system/tests/cli/set_name_servers.yaml",
+ "name": "tests/integration/targets/eos_ospfv3/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5a6511f53c7475d55b01bd0fd150ecc8432e6a237a0634b9f7d0dab26473d88b",
+ "chksum_sha256": "db343d29422b68984563c86904ac0ad79845853240e757cc26248b267f8e6f11",
"format": 1
},
{
- "name": "tests/integration/targets/eos_system/tests/cli/set_domain_list.yaml",
+ "name": "tests/integration/targets/eos_ospfv3/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "382aace82bf0f7d0a09ba8f2a35a825bf9085cdca7d62d507096e65e361b6922",
+ "chksum_sha256": "ef28a5797b256528edd1bff83509babe07944218468f22f9bdeeef905b52a4b2",
"format": 1
},
{
- "name": "tests/integration/targets/eos_system/tests/cli/set_hostname.yaml",
+ "name": "tests/integration/targets/eos_ospfv3/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3ddfe22c80b9e909d2cafe93380715fc7d695425a4bf23c0c549bbb1414fc8dc",
+ "chksum_sha256": "dc8f776fa74a50716d8a0194c5a56a51305991e4295186c2f011afe0cd89a87a",
"format": 1
},
{
- "name": "tests/integration/targets/eos_system/tests/eapi",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/eos_ospfv3/tests/common/_parsed.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "96b764ff7795f328d12684eb2dd1aa60ea1e4d6d5d3e6ed638273aa7deb25686",
"format": 1
},
{
- "name": "tests/integration/targets/eos_system/tests/eapi/set_lookup_source.yaml",
+ "name": "tests/integration/targets/eos_ospfv3/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5ec0cefc6ecaf3e422116a57b7a77dac7c7e8de65543b445baaa5b08bb0c31a1",
+ "chksum_sha256": "18a10808206e727ecffe9b9714974da7d6c95edacd2758b0dd75d207fd6539d2",
"format": 1
},
{
- "name": "tests/integration/targets/eos_system/tests/eapi/set_domain_name.yaml",
+ "name": "tests/integration/targets/eos_ospfv3/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8cfd63ce023b45928d446783ffcd516e4ab736187d36102514859dd9aabcec05",
+ "chksum_sha256": "772202a71a3c35454372ee3e7d0a8bc98615b619f4cc37ebf1bc20ac7d5d55bf",
"format": 1
},
{
- "name": "tests/integration/targets/eos_system/tests/eapi/set_name_servers.yaml",
+ "name": "tests/integration/targets/eos_ospfv3/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3f151be120cd9e6e74b1778bf682f08879753fc2198c807e4ecebe4486d21c28",
+ "chksum_sha256": "704e3f910ea6a5ef1cab48ec4bbea46955189e811124fa2c1a8dce9a0efb6a17",
"format": 1
},
{
- "name": "tests/integration/targets/eos_system/tests/eapi/set_domain_list.yaml",
+ "name": "tests/integration/targets/eos_ospfv3/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c864953ce83d0099b4f025894c10d502d1ecff22776b89688f784bf172b4f936",
+ "chksum_sha256": "848be2a6e6d9c51844e1fc50931b124190b58f4e6250741c5adc4fd90b5a397e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_system/tests/eapi/set_hostname.yaml",
+ "name": "tests/integration/targets/eos_ospfv3/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6bce01fac4d41bba5dc1495d183f86d153fbd010a3b1ac760bd07c32bcd3c5f2",
+ "chksum_sha256": "c53dc625cf760dec12686ef99081361defb9dbbfaf9f6ce2d6d00cd6b0eda97a",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ntp_global",
- "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_ntp_global/tasks",
+ "name": "tests/integration/targets/eos_ospfv3/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_ospfv3/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_ospfv3/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_ospfv3/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/eos_user",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_ntp_global/meta/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_ntp_global/defaults",
+ "name": "tests/integration/targets/eos_user/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_ntp_global/defaults/main.yaml",
+ "name": "tests/integration/targets/eos_user/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_ntp_global/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ntp_global/tests/common",
+ "name": "tests/integration/targets/eos_user/meta",
"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_user/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "930ade9d4163376aae340574caca0dbcb60880eaabc6836d7357898b325a670c",
+ "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
"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_user/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_ntp_global/tests/common/gathered.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "db285e5dba7f6690073a06d6fa2c71df3f551c1df280f25fc99a690c96b74053",
+ "name": "tests/integration/targets/eos_user/tests/cli",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_ntp_global/tests/common/empty_config.yaml",
+ "name": "tests/integration/targets/eos_user/tests/cli/auth.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "65f05f9b573112dd4035eadd0ef4c037794e2c2d8575a9e57bce3363f9251e9d",
+ "chksum_sha256": "1a12965b11fc3ea92d23a9f7fd34b621c425c52c63a0f97c89baf0cb251152ac",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ntp_global/tests/common/_populate.yaml",
+ "name": "tests/integration/targets/eos_user/tests/cli/basic.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6",
+ "chksum_sha256": "432c95aa920b1774308ea58ea6159647675bb2f7f1cffde182c64662dcc857fc",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ntp_global/tests/common/update.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a8d288c944ccb44045ad3ae954b9f8c24cd785b81a8d895a49601b8bdb3da459",
+ "name": "tests/integration/targets/eos_user/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_ntp_global/tests/common/merged.yaml",
+ "name": "tests/integration/targets/eos_user/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ad9aa73641fa04cef01184edad25e66075435e1190f1fd8dd6b35bf9a3da968d",
+ "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ntp_global/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/eos_user/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "42c31c2540456a34184d4bab9fc456c8ac86f151e3fe42609f6acfac96638eeb",
+ "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ntp_global/tests/common/_parsed.cfg",
+ "name": "tests/integration/targets/eos_user/tasks/eapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "db6ca3b0768262fced3ee97dd2e9b9b9f6085d81047770a3883c7b65973d51dc",
+ "chksum_sha256": "1b14bb0d83e5f509721d34f537bb0812798e5b3d3ad6794f1cb7314c8a419202",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ntp_global/tests/common/replaced.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d755dec987689bb90c08d6864899ad17b02cc78e78ec8126d1ff75897f7aea77",
+ "name": "tests/integration/targets/eos_acl_interfaces",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_ntp_global/tests/common/parsed.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8ad00ff561ee93d06eabfc81bfdd27c78dd622a1f9776da62893eb6a219fa338",
+ "name": "tests/integration/targets/eos_acl_interfaces/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_ntp_global/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/eos_acl_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "425b9069cbfe0e6daec1d28d3023f886464df76571975acfa14d43285eab3dd5",
+ "chksum_sha256": "a79b77c93a1982c2682c177681bfcef5f3fb3421e3ef10be452fc81dc3ce8871",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ntp_global/vars",
+ "name": "tests/integration/targets/eos_acl_interfaces/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_ntp_global/vars/main.yaml",
+ "name": "tests/integration/targets/eos_acl_interfaces/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b44421f37fc760a771a3a602eff1724eddc44e6dc49e6275afe538587c656a3c",
+ "chksum_sha256": "8631d3b93d4bf6c66a2d3f5e5c11f188f364dc3a36a4bfa5614a51a045a1d49f",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ntp_global/templates",
+ "name": "tests/integration/targets/eos_acl_interfaces/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_ntp_global/templates/populate.cfg",
+ "name": "tests/integration/targets/eos_acl_interfaces/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "db6ca3b0768262fced3ee97dd2e9b9b9f6085d81047770a3883c7b65973d51dc",
+ "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv2",
+ "name": "tests/integration/targets/eos_acl_interfaces/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv2/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_ospfv2/tasks/main.yaml",
+ "name": "tests/integration/targets/eos_acl_interfaces/tests/common/_populate.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e",
+ "chksum_sha256": "4cfbb7d9c017eea2318fb53edf60ff9b83e6dfeccae2d6bc85f16d05d33a7ff0",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv2/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_ospfv2/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_ospfv2/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "876b6b7da3c239e569da81974334a14293ce92683bae9643239bcd4bb083c94b",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv2/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_ospfv2/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "e43043f8a8c88832634fb29c4839abc2be35598c34df4a953d0eda562a90c78e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv2/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_ospfv2/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_ospfv2/tests/common",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "e304de25e98dfbbd3e8b884f6478d7b841a022b232febe94380f256a50a51557",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv2/tests/common/_remove_config.yaml",
+ "name": "tests/integration/targets/eos_acl_interfaces/tests/common/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0c38f23b440f4e2e1c0024d0c3e828cabea8b77cb08245223e9d1bd041824f55",
+ "chksum_sha256": "dad0f95e9549bce843069bc4584803994e2549a64e70c6d844e5d37e41190630",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv2/tests/common/deleted.yaml",
+ "name": "tests/integration/targets/eos_acl_interfaces/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ebe46cf49f8af67c8cfe104d7c6e943b0280e000755907f8e718a035c9a622db",
+ "chksum_sha256": "dfc9f3e78036a19826feccd2fad6679dd22d05d44fdf5226540ce1f29256f261",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv2/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/eos_acl_interfaces/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "63faa553716754def756ba24e2a6f899177afdad432eb183b788390d219e1901",
+ "chksum_sha256": "b87b082bd1a6efb8a4fcffbc804615955068460aa128235e5bc6833b551be9b2",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv2/tests/common/empty_config.yaml",
+ "name": "tests/integration/targets/eos_acl_interfaces/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2a7cd3925d54d03101a02b74c8b75fbf36fc335d3e53202ec6645f4b133f9cff",
+ "chksum_sha256": "1f5be632f4525a5de8591f6aa83113ccf37fd9cb62d0f5b6ef4c62dcfb1c6fa7",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv2/tests/common/rtt.yaml",
+ "name": "tests/integration/targets/eos_acl_interfaces/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e88142e55ffbbe41f70ee83358da99cd518becb3ff0901f786bb4d56cc098d30",
+ "chksum_sha256": "1668ec34e8d2f67dc611925ddf3b4f00ae826f0a65c72d939a8b1046d64c873d",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv2/tests/common/_populate.yaml",
+ "name": "tests/integration/targets/eos_acl_interfaces/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6",
+ "chksum_sha256": "0d3dca47353e80e36f629fd572a1b64e2c49dd75d82bf4ab28fc53634d33803b",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv2/tests/common/merged.yaml",
+ "name": "tests/integration/targets/eos_acl_interfaces/tests/common/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e9e40c2f4be5c39a0bf44fc386944705e5fe6af989b7b2eab6ca282f7fb183a5",
+ "chksum_sha256": "f2b15009df3b8b2bd9936379027b7f544a9c81a23e5c33fb9847b25a0b54645c",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv2/tests/common/overridden.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d3e4c4999c892bdb9fca72e568774b2c986d7bdfa8fa419c651767c6d4482d50",
+ "name": "tests/integration/targets/eos_acl_interfaces/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv2/tests/common/_parsed.cfg",
+ "name": "tests/integration/targets/eos_acl_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "efe02afcb1c79bf68872562eb02977725e731dfbe7536b270e0273e2766a6521",
+ "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv2/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/eos_acl_interfaces/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b7d761b36741b02edb289d71aaeac703a09dd50044f06b7a22efb65c1debf4e9",
+ "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv2/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/eos_acl_interfaces/tasks/eapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e8a3b87032a207d23558a38cd9b6dc25ec6af9ed0e9bc6b41725619fb0f180d0",
+ "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv2/vars",
+ "name": "tests/integration/targets/eos_config",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv2/vars/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c7cc18f6491766c65c2c46d595e731de7a188f6c8a4d85a511193825761fc5c1",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_ospfv2/templates",
+ "name": "tests/integration/targets/eos_config/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv2/templates/populate.cfg",
+ "name": "tests/integration/targets/eos_config/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a50326c21eba1d983db933b7a18c112f2aa7c5f16d574dc908095d9258b1cdb3",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_global",
+ "name": "tests/integration/targets/eos_config/templates",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_global/tasks",
+ "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/tasks/main.yaml",
+ "name": "tests/integration/targets/eos_config/templates/defaults/config.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d",
+ "chksum_sha256": "82249ebe8dcfdb0ab85598bd0f7ba759187bfc19c5c04a772d3308f27d85eefe",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_global/tasks/cli.yaml",
+ "name": "tests/integration/targets/eos_config/templates/defaults/test.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281",
+ "chksum_sha256": "6d6e2f3a34e61e1912c313154341699bc6398ccd884e4663bbdcefab7e76f6ec",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_global/tasks/eapi.yaml",
+ "name": "tests/integration/targets/eos_config/templates/basic",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/eos_config/templates/basic/cmds.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d",
+ "chksum_sha256": "635043eb1da106cc08711181db0d52331cc4ba2cda07e30466641f4c7497f10f",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_global/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/eos_config/templates/basic/config.j2",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6d6e2f3a34e61e1912c313154341699bc6398ccd884e4663bbdcefab7e76f6ec",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_global/meta/main.yaml",
+ "name": "tests/integration/targets/eos_config/templates/basic/interface_config.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
+ "chksum_sha256": "6d6e2f3a34e61e1912c313154341699bc6398ccd884e4663bbdcefab7e76f6ec",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_global/defaults",
+ "name": "tests/integration/targets/eos_config/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_global/defaults/main.yaml",
+ "name": "tests/integration/targets/eos_config/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_global/tests",
+ "name": "tests/integration/targets/eos_config/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_global/tests/common",
+ "name": "tests/integration/targets/eos_config/tests/eapi",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_global/tests/common/_remove_config.yaml",
+ "name": "tests/integration/targets/eos_config/tests/eapi/toplevel_after.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "36c8fb15c11b0806cf005745d3430a56d953e9f6780a7cef5aafd2a09a0535ad",
+ "chksum_sha256": "90e106e955ff3865916079955ddf5af545cdaa7372c491bf0ba61076cd80bb4c",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_global/tests/common/deleted.yaml",
+ "name": "tests/integration/targets/eos_config/tests/eapi/sublevel_exact.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4d04fc66d72fa6c188227956f100f60c5653c829ef71f493379e1aaaed85fb60",
+ "chksum_sha256": "5501acfbe1e6d31324268704c74ddf6bf1d7d9eb0e158edcbbe4ff4b214cc76a",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_global/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/eos_config/tests/eapi/save.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5c0343e2441998a70cccd7a221674cd22a585a30cb660edf3089ac0b090e798f",
+ "chksum_sha256": "b10fe8c1dec1cc8276a16bcfeb6b70ac9667c8fc42cc5acd7f742fbdd2a2a2f6",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_global/tests/common/empty_config.yaml",
+ "name": "tests/integration/targets/eos_config/tests/eapi/src_invalid.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5d8689ef6e49ccbba62ad1ebc44268ac6d8f82c7f001b21251b5d09c7ec7d32b",
+ "chksum_sha256": "751ce477a9a859e0fe8c0a420a836a9aeb6ee4e4d00d58af9e96fa4b15731577",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_global/tests/common/_populate_af.yaml",
+ "name": "tests/integration/targets/eos_config/tests/eapi/src_match_none.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4f02550439ab2971f3dedc3958ee676bf2f3dd53532dca527bc619cf2f1a1d9e",
+ "chksum_sha256": "c42bb681923e1aea5664c1a629c22da23afd186fbdcbaa1c8f6a5df716e69bec",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_global/tests/common/rtt.yaml",
+ "name": "tests/integration/targets/eos_config/tests/eapi/sublevel.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f749361ee14f98e79fa6a1f95335d7c2e66d2c28f517b1852b5b7f4cfbb9d429",
+ "chksum_sha256": "402e518d37d1d8a5c283de5593d26f4067c6ce3312b90e9f9b5c41c8c52892af",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_global/tests/common/_populate.yaml",
+ "name": "tests/integration/targets/eos_config/tests/eapi/backup.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6",
+ "chksum_sha256": "8b7ff6fa23044a1941225d49d2d23d85c1cede5f6d194625515b78a94ceccef0",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_global/tests/common/merged.yaml",
+ "name": "tests/integration/targets/eos_config/tests/eapi/defaults.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6fd9e647d40d57feb5aa630c4ad460edcc0a5053310451f19ede0fd8d741ffe3",
+ "chksum_sha256": "0ece39d7ef9b05d0e14b28c199af6dd0181c05c687fcf8555b7e41f35406f4c6",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_global/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/eos_config/tests/eapi/toplevel.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "02c017ff36027b957a2682c52ba544c014969f9b4ed9e9a725981a818191cd7b",
+ "chksum_sha256": "45276c0a74aba09ed8c7c48de80af2dd32219a324303610bc9cf80c3c8bc283b",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_global/tests/common/_parsed.cfg",
+ "name": "tests/integration/targets/eos_config/tests/eapi/sublevel_strict.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cbb352548a62d123453d921de875e2acb84594a405ddafe0c04460de66e62928",
+ "chksum_sha256": "dbf1e3fd93dc6e50049a62d8107765cdbba14ee1f843606845bf30d0a982cd42",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_global/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/eos_config/tests/eapi/toplevel_before.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c43d6297de44a8d0ff51684af71b0f6837eaaa5d475561572902e6683b194247",
+ "chksum_sha256": "7f7329aacb123f76e1a2df214a99787da817035c59e9c0e2664f7934daba6efe",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_global/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/eos_config/tests/eapi/src_basic.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "de7a1434091a39ef8cc7b4dd5439d3b37ae5b77a68f90ff04d5a83160cdbfc9b",
+ "chksum_sha256": "bb891145f21b067fae034a29cded633ad42f8c834d477f8997b2517753fa7300",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_global/tests/common/purged.yaml",
+ "name": "tests/integration/targets/eos_config/tests/eapi/sublevel_block.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7c4383c852e0367d67b96145d03829375611f90a60fa91aebf9ae41e7f8de1d2",
+ "chksum_sha256": "3dde12483d855a7b2da463f885ac18f0b10b36b9b6acc538de96c4de23157c61",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_global/tests/common/rendered.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "58ef58d4be3aa6e9478afcdb9010c490d331d3523a5d4804a0a68f3d1555d9d9",
+ "name": "tests/integration/targets/eos_config/tests/redirection",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_global/vars",
+ "name": "tests/integration/targets/eos_config/tests/redirection/cli",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_global/vars/main.yaml",
+ "name": "tests/integration/targets/eos_config/tests/redirection/cli/shortname.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a1c6b658736d10bad13d5b973aa9955f414ef50fa30aa23a890374ab544a2f3b",
+ "chksum_sha256": "d944cd696544ff17ad20e40bea70421da8141a1c22b5b4227b8b2cec348ce085",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_global/templates",
+ "name": "tests/integration/targets/eos_config/tests/cli_config",
"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/tests/cli_config/cli_backup.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cbb352548a62d123453d921de875e2acb84594a405ddafe0c04460de66e62928",
+ "chksum_sha256": "3bd7e06189b2e0a2c94746eeacb0988676f417f3a6740b1ef65a39609ae5d735",
"format": 1
},
{
- "name": "tests/integration/targets/eos_bgp_global/templates/populate_af.cfg",
+ "name": "tests/integration/targets/eos_config/tests/cli_config/cli_basic.yaml",
"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": "135e26aae8c87670f187e83c82608ece8fe523e21e51824780e082ed0b4bf4ff",
"format": 1
},
{
- "name": "tests/integration/targets/eos_facts/tasks",
+ "name": "tests/integration/targets/eos_config/tests/cli",
"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/tests/cli/toplevel_after.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d",
+ "chksum_sha256": "1d3dca9f3f341cc31221c027c6db7a6973e4e25f8a2297c1f4843e7c591eed05",
"format": 1
},
{
- "name": "tests/integration/targets/eos_facts/tasks/cli.yaml",
+ "name": "tests/integration/targets/eos_config/tests/cli/sublevel_exact.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5",
+ "chksum_sha256": "8a6f66fe3cca7fc667d32dd2de4f5bc6fc7d82d2d92953316ad3d6e4f16ec463",
"format": 1
},
{
- "name": "tests/integration/targets/eos_facts/tasks/eapi.yaml",
+ "name": "tests/integration/targets/eos_config/tests/cli/save.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cb15ea77586a3f5e330abaeb5a693d1e431f3ba0d68e867fa6658ef1d00fc197",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_facts/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "b576d2db1098db6187c8dabf08b98f2f768c955c0fc76d32f946c50df47d3bc3",
"format": 1
},
{
- "name": "tests/integration/targets/eos_facts/meta/main.yml",
+ "name": "tests/integration/targets/eos_config/tests/cli/src_invalid.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
+ "chksum_sha256": "52ca0bec01fc312731dc6e4be0b4439a1ffcbdb24716321987fbea517a5e145a",
"format": 1
},
{
- "name": "tests/integration/targets/eos_facts/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/eos_config/tests/cli/check_mode.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8b8ade7952b3bdfbe87a27bef6a6072bf1559fb682ed03477c2c4bbb95add14d",
"format": 1
},
{
- "name": "tests/integration/targets/eos_facts/defaults/main.yaml",
+ "name": "tests/integration/targets/eos_config/tests/cli/sublevel_strict_mul_parents.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
+ "chksum_sha256": "3ab71a8f63f346ecaac7f063da41865f2e61466559bd8e3b01c5c8cd5d4e63ff",
"format": 1
},
{
- "name": "tests/integration/targets/eos_facts/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/eos_config/tests/cli/src_match_none.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e6f0ba65100459757c0b7dab013d12f4b901e2af19979c49047b6c403e2a1877",
"format": 1
},
{
- "name": "tests/integration/targets/eos_facts/tests/cli",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/eos_config/tests/cli/sublevel.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0f7743e4751629f7b7b985959361b7ac07cf23c267d74777401cd2e45bcff7d1",
"format": 1
},
{
- "name": "tests/integration/targets/eos_facts/tests/cli/not_hardware.yaml",
+ "name": "tests/integration/targets/eos_config/tests/cli/backup.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "347997e8a2b793de8202fa7c55fe8fb5befc15f804046653b24305aa96dea558",
+ "chksum_sha256": "6d9bdcefed31e07edf3c37a38a9bdd50b83b235723758b4f4afee6afddb1b9e5",
"format": 1
},
{
- "name": "tests/integration/targets/eos_facts/tests/cli/default_facts.yaml",
+ "name": "tests/integration/targets/eos_config/tests/cli/diff_against_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0ae6cae32ba80370ac7e8254cc4103412ad26ff7ef67467f860501a93bd7ba03",
+ "chksum_sha256": "1ba680c356fa88e96ed721f29df59097b2aabe32030286f032e3f981db797276",
"format": 1
},
{
- "name": "tests/integration/targets/eos_facts/tests/cli/invalid_subset.yaml",
+ "name": "tests/integration/targets/eos_config/tests/cli/defaults.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "30ebae89f553fe7b179031c471332dde8a564a6fa8c280d90044283b59d635cf",
+ "chksum_sha256": "4390d24f8debc9f9a06bd6f75cedac8f6de373193dd6f477329d0479908e66b7",
"format": 1
},
{
- "name": "tests/integration/targets/eos_facts/tests/cli/all_facts.yaml",
+ "name": "tests/integration/targets/eos_config/tests/cli/toplevel.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9e88adb456f3bf5b08ce7b72aaa11b73bfaebd5563b39ecf155ca55bc5e326ee",
+ "chksum_sha256": "3e835db5710bb920f585d443324bf7c30793f25df236c6f4d8622e1bf42095bf",
"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/cli/sublevel_strict.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "eb86226952eb153150fe0e1b41d8bbd2d38bbb2323831ff4a865553f161ead28",
"format": 1
},
{
- "name": "tests/integration/targets/eos_facts/tests/eapi/not_hardware.yaml",
+ "name": "tests/integration/targets/eos_config/tests/cli/toplevel_before.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "412ad00f379dfbf2c04c539173c7c88068c175cf54fc2336644e1f0bfbbdc1c0",
+ "chksum_sha256": "f4955cab6fdf4c6ff358e66481287548ba046ecb78b569315021cd4b4356873e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_facts/tests/eapi/default_facts.yaml",
+ "name": "tests/integration/targets/eos_config/tests/cli/config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "784e54cb91e72291cb7c430e617b1b70840fea8f67ab2667fe8c18ad3aff5c0e",
+ "chksum_sha256": "93ead3551d70c71fed4ffeb043f58c511891b4737f39ebfb2f26c8ce8b703dce",
"format": 1
},
{
- "name": "tests/integration/targets/eos_facts/tests/eapi/invalid_subset.yaml",
+ "name": "tests/integration/targets/eos_config/tests/cli/src_basic.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fb127eb858414a991f7de95891bc3fb5205f0cec63fab24c58717c26355a6b18",
+ "chksum_sha256": "115d6ac4c64b7d029afd2ddb9588b5eeb323ccf12391cf9bc1ba7db051c0847e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_facts/tests/eapi/all_facts.yaml",
+ "name": "tests/integration/targets/eos_config/tests/cli/replace_block.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "65f1bede3bea1ae5490850f77a0d8e0d5d369af4e05050b0cef51b7bc3430859",
+ "chksum_sha256": "8229d1f16924795dadcae8472ba22a0d6ed7efdba4a7c8c12864f2915c1ed9c6",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv3",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "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_ospfv3/tasks",
+ "name": "tests/integration/targets/eos_config/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv3/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_ospfv3/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_ospfv3/tasks/eapi.yaml",
+ "name": "tests/integration/targets/eos_config/tasks/cli_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_ospfv3/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "cad1c35e72ece6063b7dd0600ae72e4e0f2f29b963d58733833bfb71db1ff1dc",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv3/meta/main.yaml",
+ "name": "tests/integration/targets/eos_config/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
+ "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv3/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/eos_config/tasks/eapi.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1b14bb0d83e5f509721d34f537bb0812798e5b3d3ad6794f1cb7314c8a419202",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv3/defaults/main.yaml",
+ "name": "tests/integration/targets/eos_config/config.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "9a925a8805c82634beb0a514ef8ab88912b8b3e296763329a74d7690b0429dc6",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv3/tests",
+ "name": "tests/integration/targets/eos_facts",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv3/tests/common",
+ "name": "tests/integration/targets/eos_facts/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "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_ospfv3/tests/common/deleted.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "18a10808206e727ecffe9b9714974da7d6c95edacd2758b0dd75d207fd6539d2",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_ospfv3/tests/common/gathered.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ef28a5797b256528edd1bff83509babe07944218468f22f9bdeeef905b52a4b2",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_ospfv3/tests/common/empty_config.yaml",
+ "name": "tests/integration/targets/eos_facts/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dc8f776fa74a50716d8a0194c5a56a51305991e4295186c2f011afe0cd89a87a",
+ "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv3/tests/common/rtt.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8d5a2e7460ef5bb7f6647ee5902bb0e4a9322beec5011a3c84d47804f5ffed7e",
+ "name": "tests/integration/targets/eos_facts/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv3/tests/common/_populate.yaml",
+ "name": "tests/integration/targets/eos_facts/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6",
+ "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv3/tests/common/merged.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ccb7da45bb920569021036a8ad9757cd020f0012686b5d073f29f9621f7471e1",
+ "name": "tests/integration/targets/eos_facts/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv3/tests/common/overridden.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "704e3f910ea6a5ef1cab48ec4bbea46955189e811124fa2c1a8dce9a0efb6a17",
+ "name": "tests/integration/targets/eos_facts/tests/eapi",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv3/tests/common/_parsed.cfg",
+ "name": "tests/integration/targets/eos_facts/tests/eapi/not_hardware.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "96b764ff7795f328d12684eb2dd1aa60ea1e4d6d5d3e6ed638273aa7deb25686",
+ "chksum_sha256": "412ad00f379dfbf2c04c539173c7c88068c175cf54fc2336644e1f0bfbbdc1c0",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv3/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/eos_facts/tests/eapi/all_facts.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c53dc625cf760dec12686ef99081361defb9dbbfaf9f6ce2d6d00cd6b0eda97a",
+ "chksum_sha256": "65f1bede3bea1ae5490850f77a0d8e0d5d369af4e05050b0cef51b7bc3430859",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv3/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/eos_facts/tests/eapi/default_facts.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c5780138500b761a2832d155ea8a30d7e78fa10a02ab581125af875994bb45c8",
+ "chksum_sha256": "784e54cb91e72291cb7c430e617b1b70840fea8f67ab2667fe8c18ad3aff5c0e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv3/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/eos_facts/tests/eapi/invalid_subset.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "db343d29422b68984563c86904ac0ad79845853240e757cc26248b267f8e6f11",
+ "chksum_sha256": "fb127eb858414a991f7de95891bc3fb5205f0cec63fab24c58717c26355a6b18",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv3/vars",
+ "name": "tests/integration/targets/eos_facts/tests/cli",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv3/vars/main.yaml",
+ "name": "tests/integration/targets/eos_facts/tests/cli/not_hardware.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9917e16f0a7a0b7484fe0780a79f0b22180b634ad091fee3f94946946d87e030",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_ospfv3/templates",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "347997e8a2b793de8202fa7c55fe8fb5befc15f804046653b24305aa96dea558",
"format": 1
},
{
- "name": "tests/integration/targets/eos_ospfv3/templates/populate.cfg",
+ "name": "tests/integration/targets/eos_facts/tests/cli/all_facts.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "96b764ff7795f328d12684eb2dd1aa60ea1e4d6d5d3e6ed638273aa7deb25686",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_l3_interfaces",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_l3_interfaces/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "9e88adb456f3bf5b08ce7b72aaa11b73bfaebd5563b39ecf155ca55bc5e326ee",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l3_interfaces/tasks/main.yaml",
+ "name": "tests/integration/targets/eos_facts/tests/cli/network_facts",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e",
+ "chksum_sha256": "479cf1f759bce65d32176d8c9f885cb7abf5f8b99140389aaba24995760d601a",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l3_interfaces/tasks/cli.yaml",
+ "name": "tests/integration/targets/eos_facts/tests/cli/default_facts.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281",
+ "chksum_sha256": "0ae6cae32ba80370ac7e8254cc4103412ad26ff7ef67467f860501a93bd7ba03",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l3_interfaces/tasks/eapi.yaml",
+ "name": "tests/integration/targets/eos_facts/tests/cli/invalid_subset.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1629beb9c4c49792f78a1425442a6a6e0e5dd9a0ed824c1cced81e6e97a0e47c",
+ "chksum_sha256": "30ebae89f553fe7b179031c471332dde8a564a6fa8c280d90044283b59d635cf",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l3_interfaces/meta",
+ "name": "tests/integration/targets/eos_facts/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_l3_interfaces/meta/main.yaml",
+ "name": "tests/integration/targets/eos_facts/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_l3_interfaces/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l3_interfaces/defaults/main.yaml",
+ "name": "tests/integration/targets/eos_facts/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l3_interfaces/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/eos_facts/tasks/eapi.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "cb15ea77586a3f5e330abaeb5a693d1e431f3ba0d68e867fa6658ef1d00fc197",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l3_interfaces/tests/common",
+ "name": "tests/sanity",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_l3_interfaces/tests/common/deleted.yaml",
+ "name": "tests/sanity/ignore-2.11.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cc35e0f775451453ac2c523a27b8ca29590551f20ba1dd504553b72cd3f48096",
+ "chksum_sha256": "7c9647b2dee513f57df36fee1897a54856aeba3b5fed24f2b7d6612b225ead63",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l3_interfaces/tests/common/gathered.yaml",
+ "name": "tests/sanity/ignore-2.9.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7c4177bbc89805770c555ca12366593738cd4fcfe2830e23b35a286aecc43ed3",
+ "chksum_sha256": "8c562d6941e7798adfb9f88ff0791f32d9e867dcd22292a4d8041c32585285a1",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l3_interfaces/tests/common/empty_config.yaml",
+ "name": "tests/sanity/ignore-2.12.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "95215014c2825aee51c3c204de545ae03738dae62b0e268c617a498276643713",
+ "chksum_sha256": "7c9647b2dee513f57df36fee1897a54856aeba3b5fed24f2b7d6612b225ead63",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l3_interfaces/tests/common/rtt.yaml",
+ "name": "tests/sanity/ignore-2.15.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4660abfc6652a70079d0ea81ddca1be88fe04998d9396edef977e7c5ba5df1af",
+ "chksum_sha256": "eef9f110ac24f19f2bd0d195d6ab988d986929ea42f869864ba19a025c882e40",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l3_interfaces/tests/common/merged.yaml",
+ "name": "tests/sanity/ignore-2.14.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a65aac4ca425465052942c3fd31c9d51ffb175047cbce064752fab288c7e4367",
+ "chksum_sha256": "eef9f110ac24f19f2bd0d195d6ab988d986929ea42f869864ba19a025c882e40",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l3_interfaces/tests/common/overridden.yaml",
+ "name": "tests/sanity/ignore-2.18.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f17e653bfdb385c99bf7db088d3269b67d962148561c5b4ae3248adfad050ce4",
+ "chksum_sha256": "eef9f110ac24f19f2bd0d195d6ab988d986929ea42f869864ba19a025c882e40",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l3_interfaces/tests/common/_parsed.cfg",
+ "name": "tests/sanity/ignore-2.10.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1be80d6bfade12c26b76660664893c1846149bb7eb9398fa5e610d48d54e9b78",
+ "chksum_sha256": "7c9647b2dee513f57df36fee1897a54856aeba3b5fed24f2b7d6612b225ead63",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l3_interfaces/tests/common/replaced.yaml",
+ "name": "tests/sanity/ignore-2.17.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e8b467b03ab2c858ce56d5520307e0482341b16e05579f077e5bf8742d71fc95",
+ "chksum_sha256": "eef9f110ac24f19f2bd0d195d6ab988d986929ea42f869864ba19a025c882e40",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l3_interfaces/tests/common/parsed.yaml",
+ "name": "tests/sanity/ignore-2.16.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "03f049dcce225d8de33873ff4f8a2244b4e6053857d212b6bd473476cd429b14",
+ "chksum_sha256": "eef9f110ac24f19f2bd0d195d6ab988d986929ea42f869864ba19a025c882e40",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l3_interfaces/tests/common/_reset_config.yaml",
+ "name": "tests/sanity/ignore-2.13.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cbf3a7bcba86ab51a41f5df9700c3361614a761a59c7a818e28b9e2b47e49826",
+ "chksum_sha256": "eef9f110ac24f19f2bd0d195d6ab988d986929ea42f869864ba19a025c882e40",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l3_interfaces/tests/common/rendered.yaml",
+ "name": "tests/config.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c06867d92daaf7f51b661451f56dd63be75711f4f8c407a7f7365879cb4d295c",
+ "chksum_sha256": "4129945061440c8d8c281590b8054b194f5958833c722aa40e878b09038c380e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l3_interfaces/vars",
+ "name": "tests/unit",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_l3_interfaces/vars/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9bd8cfc16471691295c6cc5b75efdef88860f2aad20ec00f62ffc614e2976776",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_l3_interfaces/templates",
+ "name": "tests/unit/mock",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_l3_interfaces/templates/reset.cfg",
+ "name": "tests/unit/mock/loader.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3e02b044e876b189ce336a3a4802eb8af3df7d69c9d74f94877a8ec495e240dc",
+ "chksum_sha256": "bea80cf14afd91d02e652a3a395bed3d74fdf373d12d5af6a41daf5516646663",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l2_interfaces",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/mock/yaml_helper.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4dbe503c0585b634f72b82eef6b9f8d078ae383ed865bb016db31992dac97600",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l2_interfaces/tasks",
- "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/eos_l2_interfaces/tasks/main.yaml",
+ "name": "tests/unit/mock/vault_helper.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d",
+ "chksum_sha256": "55bd0e924dcc22d050612c944bff0ef745e51faac9260dce9b9b2018c4c8a661",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l2_interfaces/tasks/cli.yaml",
+ "name": "tests/unit/mock/procenv.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3d287a5645a94634b96fbeb33a93d7cc866421adb10d5e45810aae4ae003fd52",
+ "chksum_sha256": "3ff983479d7aa4b90efe73337f723c14224edabcdfde4efe49f24cd905f45f1a",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l2_interfaces/tasks/eapi.yaml",
+ "name": "tests/unit/mock/path.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "90b0fb30b63afdda9bc8d5bee03e2b6cc6f785a7af550690bf002a207fa42d9c",
+ "chksum_sha256": "110552d5ab0ffabe2bc6b6c57e9f389be3920da2e0f37ea5b628795d1b426bfd",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l2_interfaces/meta",
+ "name": "tests/unit/modules",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_l2_interfaces/meta/main.yml",
+ "name": "tests/unit/modules/conftest.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_l2_interfaces/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "e0ae70fa7c2a5e56d7f02a47c3602398cff60c8eb021772ac59a76df2a234048",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l2_interfaces/defaults/main.yaml",
+ "name": "tests/unit/modules/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l2_interfaces/tests",
+ "name": "tests/unit/modules/network",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_l2_interfaces/tests/common",
+ "name": "tests/unit/modules/network/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "tests/unit/modules/network/eos",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_l2_interfaces/tests/common/deleted.yaml",
+ "name": "tests/unit/modules/network/eos/test_eos_prefix_lists.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fce0cbcecc5da5700eadd7509b5ec52749d2161ff7b3f99b95a4d2796c158f4c",
+ "chksum_sha256": "661ea9a69d2e3b8f45af167d6ae80619d248379eb9a24a8ca5e00a2a5ce5c533",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l2_interfaces/tests/common/gathered.yaml",
+ "name": "tests/unit/modules/network/eos/test_eos_lacp.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c9f82a69c636f9d85ef893fb5d2fba696d0a47bc9fe1e2c3e316acb63b79453d",
+ "chksum_sha256": "b002b079441356772dd706ec1b61c49e31685a9b7d7bc6f2e596ab49c52e7938",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l2_interfaces/tests/common/empty_config.yaml",
+ "name": "tests/unit/modules/network/eos/test_eos_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aaf8f107ec4a7699b08aba428c96066164570af0da4c031499210e65a9ac976a",
+ "chksum_sha256": "3477c71403dbad66c8b51936403a0793c206830f8ffd97d169b24a400292a110",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l2_interfaces/tests/common/rtt.yaml",
+ "name": "tests/unit/modules/network/eos/test_eos_ntp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ab629c595374a5ff76a3d76f22278948131ccfd3f5de5e08f8bb0fae170883c0",
+ "chksum_sha256": "63417ff9fc378c2cca3ddba37e37a1683daadab22ebcefb642813da6260485b8",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l2_interfaces/tests/common/_cleanup.yml",
+ "name": "tests/unit/modules/network/eos/test_eos_acl_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "72c891a2b69fea4a08d88aef80ab42588f0761b3fcee4654ea769a82e2cad772",
+ "chksum_sha256": "07324539cdb0b8556e3a40d960a97f30ab3d40e665812307337e84e20b43b857",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l2_interfaces/tests/common/merged.yaml",
+ "name": "tests/unit/modules/network/eos/test_eos_logging_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "01c98f37d467b49d62c858aa1eb80e31829d3af8df1d67b17b95612b1e014d2f",
+ "chksum_sha256": "298820d41ac982e3feae9381645a83b6120a5d683d6e019ecf37ef9e5219c681",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l2_interfaces/tests/common/overridden.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7fe18f0fa44accb4bdd0464888179e38186b2bc1bb7534786d823700eab75201",
+ "name": "tests/unit/modules/network/eos/fixtures",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/eos_l2_interfaces/tests/common/_parsed.cfg",
+ "name": "tests/unit/modules/network/eos/fixtures/eos_command_show_version.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9f5bae45f76d827baaed602070abd64acc8a7c7f22410e169b0871344f1023ba",
+ "chksum_sha256": "cd0ee8985d66e4cff1ebeff617108414d701cdb2acebf9327329f62e093f7062",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l2_interfaces/tests/common/replaced.yaml",
+ "name": "tests/unit/modules/network/eos/fixtures/eos_system_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0ed56a5c9ced6b499dda2d9788c2021ea24b0d17f0d0931a7c11b9addc59f3e6",
+ "chksum_sha256": "d1cb12a14186402c703d639d484b7ea9829e52f9159afac4f7779bd396f5e43f",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l2_interfaces/tests/common/parsed.yaml",
+ "name": "tests/unit/modules/network/eos/fixtures/eos_eapi_show_vrf.text",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "edb8b0ac8acd4b5e054bbfa29800537c9b159ab96d7187400f26c80be72c7abf",
+ "chksum_sha256": "a43e222ce4d0e6aec92afabb2d5ff7f6cc7fd96ce4e055b6ffc02ad1492373d5",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l2_interfaces/tests/common/_reset_config.yaml",
+ "name": "tests/unit/modules/network/eos/fixtures/eos_ntp_global_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cb38b9a77caba2c84ab6c80ba15134346ae856147e816086b43f2c90a0e8014e",
+ "chksum_sha256": "1c841ab014af5105c26d977cfcac4de50919a8537bf632698f95e5ea5f2b5c0b",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l2_interfaces/tests/common/rendered.yaml",
+ "name": "tests/unit/modules/network/eos/fixtures/eos_banner_show_banner.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e27eed12e565edc2ef8199044486e7df6759cf3a8fa2c4999c06d465b416ac11",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_l2_interfaces/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "dc2e6349862de27bfb1d50da78684b7b6320c6c8626a7ae378ce07852d64f984",
"format": 1
},
{
- "name": "tests/integration/targets/eos_l2_interfaces/vars/main.yaml",
+ "name": "tests/unit/modules/network/eos/fixtures/eos_acls_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2d11de6e7c7e491f1f5247e77d3cc3367368e71c12900e057007742b5f69b93e",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_vlans",
- "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,
+ "chksum_sha256": "c58fb25414acf3b04a882b8172c4c048c637b5906670a1c3a5f36e8a3aad0380",
"format": 1
},
{
- "name": "tests/integration/targets/eos_vlans/tasks/main.yaml",
+ "name": "tests/unit/modules/network/eos/fixtures/eos_bgp_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e",
+ "chksum_sha256": "7011ff501cdde31949153491b1f1092e8d8afa6a27510ab594deb1504403c2d0",
"format": 1
},
{
- "name": "tests/integration/targets/eos_vlans/tasks/cli.yaml",
+ "name": "tests/unit/modules/network/eos/fixtures/eos_hostname_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281",
+ "chksum_sha256": "55cfe4746ef24943eac865d5b0fd9b6a6884e0e529983e253d5764175c01c6e9",
"format": 1
},
{
- "name": "tests/integration/targets/eos_vlans/tasks/eapi.yaml",
+ "name": "tests/unit/modules/network/eos/fixtures/eos_logging_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_vlans/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "d35c0e1702f10694008ce77f2d405c569d3745738fa4ceab306cdb638f5b465d",
"format": 1
},
{
- "name": "tests/integration/targets/eos_vlans/meta/main.yml",
+ "name": "tests/unit/modules/network/eos/fixtures/eos_snmp_server_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_vlans/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "955317964226d2639660f6006be99a9c1d67e3a8dcea25ba7b2c4a569059a4f9",
"format": 1
},
{
- "name": "tests/integration/targets/eos_vlans/defaults/main.yaml",
+ "name": "tests/unit/modules/network/eos/fixtures/eos_route_maps_config.cfg",
"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,
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_vlans/tests/common",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "64a5a2e160aff448bb567d8d4fdba4c3231f85ab0b44e2f596fe2784148e8554",
"format": 1
},
{
- "name": "tests/integration/targets/eos_vlans/tests/common/idempotent.yaml",
+ "name": "tests/unit/modules/network/eos/fixtures/eos_lldp_global_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c41bbf0a4522e6f01b3e38067c543afb71b21fcbfa0a8ededd26d0683e50a81d",
+ "chksum_sha256": "41eb838c679e2fd974f15bd92461a1627b29a0f2b8b1c5a5c3fef8a472efaad3",
"format": 1
},
{
- "name": "tests/integration/targets/eos_vlans/tests/common/deleted.yaml",
+ "name": "tests/unit/modules/network/eos/fixtures/eos_acl_interfaces_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d4df0e51ef94b5a4ef06900a79bd20e79f84a964710a14de559368071f405669",
+ "chksum_sha256": "29bdd16b7032ccf6dd42d4c2e78ebe00aaaf155ea7f5d9049c638f742478f312",
"format": 1
},
{
- "name": "tests/integration/targets/eos_vlans/tests/common/gathered.yaml",
+ "name": "tests/unit/modules/network/eos/fixtures/eos_ospfv2_config_gather.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6512281e2fd290fd40f8f18191e72c127c2e3df9537c05559ecb25aed09ee4bb",
+ "chksum_sha256": "6271cc911105743891d46bde906d969ad2ce562d8bfa9364d845da33cb9c3bde",
"format": 1
},
{
- "name": "tests/integration/targets/eos_vlans/tests/common/empty_config.yaml",
+ "name": "tests/unit/modules/network/eos/fixtures/eos_static_routes_config1.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cdf7d6ea7f6f5c2ad9065b1b13e04198c38882991e60197c5c569fa6dce0d98d",
+ "chksum_sha256": "22d8eb393f411a1034b6d77b5137ca205b1d01b09a6488c5c30199145b99bf7c",
"format": 1
},
{
- "name": "tests/integration/targets/eos_vlans/tests/common/rtt.yaml",
+ "name": "tests/unit/modules/network/eos/fixtures/eos_ospfv3_config_gather.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d33a3d3ddf38335484012ddc3a995f050d899f1f5686fae5e8ae88f8686f9d5b",
+ "chksum_sha256": "091b340fe2578196b84cd9b133d0cc01e479a27a12caeb2a796355c571a39cb4",
"format": 1
},
{
- "name": "tests/integration/targets/eos_vlans/tests/common/merged.yaml",
+ "name": "tests/unit/modules/network/eos/fixtures/eos_vlan_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fab8447a90775e038817655f20e15623512f87e042c86c7f93c6f5fe902aa37e",
+ "chksum_sha256": "6e71249b2afca7c80191a77d86753e21419042d51d570de0b3c717a204f01400",
"format": 1
},
{
- "name": "tests/integration/targets/eos_vlans/tests/common/overridden.yaml",
+ "name": "tests/unit/modules/network/eos/fixtures/eos_config_candidate.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "23f1318af4e38f802c10ac90ec7cce6573c0eac7665773f877059bcb90426bee",
+ "chksum_sha256": "3352c8002ead9454c96fa97e82bc2bf245ac57a69edbf8a934bed4ef809de3de",
"format": 1
},
{
- "name": "tests/integration/targets/eos_vlans/tests/common/_parsed.cfg",
+ "name": "tests/unit/modules/network/eos/fixtures/eos_ospf_interfaces_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "24f8e0b4cb5d9b1444c92f7260088952ba7aa9a71949521dd331f5a434686783",
+ "chksum_sha256": "2c664a8713d7ccd543333cca425528c1726d6790b8364bdd6a5e8720ce4183be",
"format": 1
},
{
- "name": "tests/integration/targets/eos_vlans/tests/common/replaced.yaml",
+ "name": "tests/unit/modules/network/eos/fixtures/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8a2ed31515941cfc98d86db63eed394b71c6e749b8ef7a7433f5d3ff518f585a",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/eos_vlans/tests/common/parsed.yaml",
+ "name": "tests/unit/modules/network/eos/fixtures/eos_eapi_show_mgmt_unconfigured.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "97d8e342f7bee82d8027e115e1f5165d4a68e898b83813a2f710833e5fee4a33",
+ "chksum_sha256": "09f3bdc48ce35e7200a5a5da2f2722dff46de4bd8ebc1d1718fa4ed7a08310df",
"format": 1
},
{
- "name": "tests/integration/targets/eos_vlans/tests/common/_reset_config.yaml",
+ "name": "tests/unit/modules/network/eos/fixtures/eos_lag_interfaces_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "31618630d4e82bffcf3ca7a4b12b835bb1b3bdf67d518eac68f72bb26b0d6924",
+ "chksum_sha256": "996743ab19a23f6fbb30754d1f4beb2911c6b4ffa69a28665dfc79b5ad519b65",
"format": 1
},
{
- "name": "tests/integration/targets/eos_vlans/tests/common/rendered.yaml",
+ "name": "tests/unit/modules/network/eos/fixtures/eos_logging_global_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fb1e1d667d069e7d04de886871344ca9fc0a0bded7b3c2a7437a4d95b95dd05d",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_vlans/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "616869cf79f4faf6f64276e039fbcad728d3e012eba2073b118b0296d9334013",
"format": 1
},
{
- "name": "tests/integration/targets/eos_vlans/vars/main.yaml",
+ "name": "tests/unit/modules/network/eos/fixtures/eos_bgp_global_af_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "361a49c0e4e03684a6718513ec6a800c844d872b6dba61efdb68249d61b34124",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_banner",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_banner/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "dd5318703b4822b5a27eb24bb0d1898c7e5559e96151114784e5a5e92d07f535",
"format": 1
},
{
- "name": "tests/integration/targets/eos_banner/tasks/main.yaml",
+ "name": "tests/unit/modules/network/eos/fixtures/eos_prefix_lists_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e",
+ "chksum_sha256": "ed6dda06d2158651429f03d9db644514e20f89e6d3c58331fc09e059c76a22ff",
"format": 1
},
{
- "name": "tests/integration/targets/eos_banner/tasks/cli.yaml",
+ "name": "tests/unit/modules/network/eos/fixtures/eos_interfaces_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5",
+ "chksum_sha256": "05edee2806d57e1a907026a24ea0fd51582008c1d24b63c5fc1463e86204683e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_banner/tasks/eapi.yaml",
+ "name": "tests/unit/modules/network/eos/fixtures/eos_ospfv2_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1b14bb0d83e5f509721d34f537bb0812798e5b3d3ad6794f1cb7314c8a419202",
- "format": 1
- },
- {
- "name": "tests/integration/targets/eos_banner/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "c4e0126af072bca2ca99eb356d26868e44adae27ffa3622f54fc431122e66ace",
"format": 1
},
{
- "name": "tests/integration/targets/eos_banner/meta/main.yml",
+ "name": "tests/unit/modules/network/eos/fixtures/eos_bgp_global_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
+ "chksum_sha256": "3cef54b0f53689ccdd9a9de7e3d23fa7fa591582506b438f1b628752b5b0847b",
"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_eapi_show_mgmt.json",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "963dde77e29e22955f66b6d4a4d880c327419e3c719556219b19cf2d9d515c07",
"format": 1
},
{
- "name": "tests/integration/targets/eos_banner/defaults/main.yaml",
+ "name": "tests/unit/modules/network/eos/fixtures/eos_static_routes_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
+ "chksum_sha256": "9de7fbc93c152431ec2baf2f7c8ba736ced12148e8bff2e7b54eb7dd39c4b04d",
"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_config_config_updated.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "199f6fddff67988e4e15efde118949a06623ac6cda6cc56a43110fab3da655d9",
"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_config_config.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "03abdcaedc2f739a12fd1c31f37164f02ed471aff024ad8e654a0d7ec3e611e6",
"format": 1
},
{
- "name": "tests/integration/targets/eos_banner/tests/cli/basic-login.yaml",
+ "name": "tests/unit/modules/network/eos/fixtures/eos_bgp_af_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5a6ff4ad57df259c1322d52be030e6bda317af6738e2e3ebf043ca14b5fc9d64",
+ "chksum_sha256": "9cfca9294069868122bcad8e9a7bcfdfd6101949fd9959ec32766b682f635a68",
"format": 1
},
{
- "name": "tests/integration/targets/eos_banner/tests/cli/basic-motd.yaml",
+ "name": "tests/unit/modules/network/eos/fixtures/eos_l2_interfaces_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4b2551d785983506768deb63cd2f8ba8ae35c5e6ce5eae18e340fd75291e390a",
+ "chksum_sha256": "501ad2cead9d2a90aa7529319befbf62a4f58f7988995788c5206c90fbec5afc",
"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_user_config.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2b11830bd90b2c0e492cba03f0af73a5229a4723e47959812544961bde1ac438",
"format": 1
},
{
- "name": "tests/integration/targets/eos_banner/tests/eapi/basic-login.yaml",
+ "name": "tests/unit/modules/network/eos/fixtures/eos_lacp_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d7cd4bec5ba015f96ac020675f8b4a256dcc1e2bdd9f4b59775237acaa8d809c",
+ "chksum_sha256": "5a89a5f03e68185c4a50f5410ea4fb04caca756685c8d906c1b4558fa52896aa",
"format": 1
},
{
- "name": "tests/integration/targets/eos_banner/tests/eapi/basic-motd.yaml",
+ "name": "tests/unit/modules/network/eos/fixtures/eos_l3_interfaces_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c8e94533c27b7c01e870af443aae37c16cb5180e86658a8de5a2a6b5599efb97",
+ "chksum_sha256": "0989f0ad8aea46b6b4b7111aee264687387c44e8cc68154f8d9c054d22581d1d",
"format": 1
},
{
- "name": "tests/integration/targets/eos_vrf",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/eos/fixtures/eos_lacp_interfaces_config.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "414cc25eb0be567529b328993c191ea1f282c2620ff5f45b57462ec7e950ddca",
"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_ospfv3_config.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "97763a63f53b38b8c864ed38f800e4270d600065cdd4acde805c3b1ca384e6b5",
"format": 1
},
{
- "name": "tests/integration/targets/eos_vrf/tasks/main.yaml",
+ "name": "tests/unit/modules/network/eos/test_eos_l2_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8e0a1de7edebf8e1de1b1bd68c83fa3e6669085f9cd28e417cbb11f43da75068",
+ "chksum_sha256": "a22acc199b608eaa81388ae90560832bdcfd9e18151093afb55d3fac6c79bb0e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_vrf/tasks/cli.yaml",
+ "name": "tests/unit/modules/network/eos/test_eos_lacp_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5",
+ "chksum_sha256": "9d9e2f2de94155c7b25b3e22b3f2d945348ba9cac930e31647e80c49f32d2e2b",
"format": 1
},
{
- "name": "tests/integration/targets/eos_vrf/meta",
- "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/meta/main.yml",
+ "name": "tests/unit/modules/network/eos/test_eos_user.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48",
+ "chksum_sha256": "fa4338232a2405c9435c72b47bf43adba9a77fa9f1e807c6e32939842fce1ace",
"format": 1
},
{
- "name": "tests/integration/targets/eos_vrf/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/eos/test_eos_bgp_address_family.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "78ddd666d2a3c42ff62cf41e2aa080cd4d756df6e84e3b87b1d251c0e01c58c9",
"format": 1
},
{
- "name": "tests/integration/targets/eos_vrf/defaults/main.yaml",
+ "name": "tests/unit/modules/network/eos/test_eos_ospf_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
+ "chksum_sha256": "2eaf0fb95775a20f7e0dbe6a5f95183e278dbd18a7f08649094a36a6174df92e",
"format": 1
},
{
- "name": "tests/integration/targets/eos_vrf/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/eos/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/eos_vrf/tests/cli",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/eos/test_eos_ospfv2.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "905a631997755cc518785f31f2baeb7a34bf1e6f02e66252d61ce6f155c6bbed",
"format": 1
},
{
- "name": "tests/integration/targets/eos_vrf/tests/cli/basic.yaml",
+ "name": "tests/unit/modules/network/eos/test_eos_eapi.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cea011f04a3c8f2d06c412f8512259c89a2e3a57b55effeef99fa45434d9be15",
+ "chksum_sha256": "b589a590266ed8e34f6360348ef1011aa397ea1e23f7ec14762d211435be1473",
"format": 1
},
{
- "name": "tests/integration/targets/eos_vrf/aliases",
+ "name": "tests/unit/modules/network/eos/test_eos_hostname.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "b08eaedb4f944efd3636cfeeebef411d71a64a222ee9d209004f31ad4804ad75",
"format": 1
},
{
- "name": "tests/integration/target-prefixes.network",
+ "name": "tests/unit/modules/network/eos/test_eos_lag_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec96e8ef2e9e3856cae9bbefb51f64492bd044f17d17310cc560ec990ab14468",
+ "chksum_sha256": "70a9eeb3e6ef95046e460f7c31934730ec5ccc22a3c05791caae48f5c67603c1",
"format": 1
},
{
- "name": "tests/integration/network-integration.cfg",
+ "name": "tests/unit/modules/network/eos/test_eos_static_routes.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d67b11263a8f50b30bf43c7c2b4bdd8dc4f173f0b5dd22761311360dfbd56a1d",
+ "chksum_sha256": "e0c1b2145831e16013e56db5f767f4256ab0a91e15bda47b86775a53f4e9d75b",
"format": 1
},
{
- "name": "tests/.gitignore",
+ "name": "tests/unit/modules/network/eos/test_eos_ospfv3.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b5726d3ec9335a09c124469eca039523847a6b0f08a083efaefd002b83326600",
+ "chksum_sha256": "ca8c440f919185f6532f28cc43a6967a7e6344f20b4504adf2d5871d5c5081c1",
"format": 1
},
{
- "name": "docs",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/eos/test_eos_banner.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b4d5a241b0c3a84829c2523efb6848d492ded2f58e4a8ef34ac8bf65e00f31ff",
"format": 1
},
{
- "name": "docs/arista.eos.eos_lldp_interfaces_module.rst",
+ "name": "tests/unit/modules/network/eos/test_eos_config.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7299a09dc0f8360ad7d8c95d13b8c0e9f07035e910f58efa4e6e6c550f5b377d",
+ "chksum_sha256": "8b337538bc350ea37c5be05ba18c6e6c9cee42541f787f94535f9eb41fe6a7b3",
"format": 1
},
{
- "name": "docs/arista.eos.eos_static_routes_module.rst",
+ "name": "tests/unit/modules/network/eos/test_eos_route_maps.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e556daa557e50664de8a09d706c314cddf9b54c82368f621d07afdcec06cc44d",
+ "chksum_sha256": "d1b91c7248ff3e522b2c9738bbd202f02663cd446c6582407a5e5f45030d27c7",
"format": 1
},
{
- "name": "docs/arista.eos.eos_logging_global_module.rst",
+ "name": "tests/unit/modules/network/eos/test_eos_bgp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c5ac61d63be154248e23a8b1d65878997ba5ee5c7c7cccc5134e557d6132c85f",
+ "chksum_sha256": "d64de59aeeb1314ad32d5d4d8b3c04f545dae54a4a9621c862ce732852d38299",
"format": 1
},
{
- "name": "docs/arista.eos.eos_ospfv2_module.rst",
+ "name": "tests/unit/modules/network/eos/test_eos_vlans.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cbb9fbfb8196b35682ea97231c66e5feb28fc0c59cc87c9ccfb5f4352bec573e",
+ "chksum_sha256": "9700e19afd5f9b5fa5929af623abdc7297851c38e95a4afa12b3d165b490f06c",
"format": 1
},
{
- "name": "docs/arista.eos.eos_route_maps_module.rst",
+ "name": "tests/unit/modules/network/eos/test_eos_acls.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c72fa7b5ddaa69adf74a0e20f10338bd9e00a4bcf8b80d8833d2508ec90e38a1",
+ "chksum_sha256": "7f27a55927d142e5d1b3d5daf9c4c70a0c7746bfb922757b8b61a87f0be84944",
"format": 1
},
{
- "name": "docs/arista.eos.eos_system_module.rst",
+ "name": "tests/unit/modules/network/eos/test_eos_snmp_server.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bb36d86019cdf27d92c314fdb25f037aaba0c7529ab40a18dac4b217e7fe4c01",
+ "chksum_sha256": "28c6260cb281011e88a06b56da8f776f3e74c74ce6483667c4f4694f0d84a2aa",
"format": 1
},
{
- "name": "docs/arista.eos.eos_interfaces_module.rst",
+ "name": "tests/unit/modules/network/eos/test_eos_command.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a455227b4df8d2346b1f77b5132247cd731082ffa814e451d75396c117b60cff",
+ "chksum_sha256": "e05c63bbf7d8d358e7aa4ca3265d6c0001122a46728e884313a7e7028fd33b49",
"format": 1
},
{
- "name": "docs/arista.eos.eos_ospf_interfaces_module.rst",
+ "name": "tests/unit/modules/network/eos/test_eos_system.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "83887e8f1a80e7472057297779adde8017ab6371a3c41c99e4ed4c21d7b34858",
+ "chksum_sha256": "f047d0ac15b59f5e571bd1777a52096a0036ba7fae0f4b0f297f044c589c9595",
"format": 1
},
{
- "name": "docs/arista.eos.eos_bgp_global_module.rst",
+ "name": "tests/unit/modules/network/eos/test_eos_l3_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "892272aec233fa0f0110eba45ab0a8f4107122a387cb00c3920860f4d002fc26",
+ "chksum_sha256": "67c6d4923cb8220bbf9dcc9c59db873c8f4bc0a2246473dc0ae5b76846ff9893",
"format": 1
},
{
- "name": "docs/arista.eos.eos_ntp_global_module.rst",
+ "name": "tests/unit/modules/network/eos/test_eos_lldp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "82bea9b37a6b60b3372f4ff510bfcd0e59b0a15f5e6fe5a850630125f7c10c3c",
+ "chksum_sha256": "688b40d8068764274c19a34ba2fe36721470b933dc966416d062b8b2e87c315f",
"format": 1
},
{
- "name": "docs/arista.eos.eos_ospfv3_module.rst",
+ "name": "tests/unit/modules/utils.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "54fe29219103c40dfdb961918efbe64f676c122b331d1151307ce95190424b05",
+ "chksum_sha256": "414c272e9a403bb6009460ec9502c5acfaa9c80b2159c742f6cb2e225938be3e",
"format": 1
},
{
- "name": "docs/arista.eos.eos_vrf_module.rst",
+ "name": "tests/unit/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0c6664519aa55395647325147639ccf77de85e600a1abefaf3f83755af82c32b",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "docs/arista.eos.eos_command_module.rst",
+ "name": "tests/unit/requirements.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c3d335bd1672f0a46e52990493ff4d829f18392f3bc1a7949bbc6a99837103d7",
+ "chksum_sha256": "49ba996dc4735c3463e9af561344346dfae14bcc1a68096ce78364b377f0df1f",
"format": 1
},
{
- "name": "docs/arista.eos.eos_lag_interfaces_module.rst",
+ "name": "tests/.gitignore",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "19ef80abb38cd39ff502c43f4ddca3883584376c19f1b20621f0fd11b565b920",
+ "chksum_sha256": "b5726d3ec9335a09c124469eca039523847a6b0f08a083efaefd002b83326600",
"format": 1
},
{
- "name": "docs/arista.eos.eos_banner_module.rst",
+ "name": "tox-ansible.ini",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b128807c32c6a491aa78a1b56512e2982f5d6811641d0b14e8e347d4cf8a5b06",
+ "chksum_sha256": "da802bfc2dc2671ca7caba028e8a635b459b131874041d119b698717333a7a49",
"format": 1
},
{
- "name": "docs/arista.eos.eos_eapi_module.rst",
+ "name": ".gitignore",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4ff82c55d35021b368eaeb719ad4c4b0e15111fcec0e038d13970e3db9b0a0f0",
+ "chksum_sha256": "a2ebfecdb6c1b58267fbe97e6e2ac02c2b963df7673fc1047270f0f0cff16732",
"format": 1
},
{
- "name": "docs/arista.eos.eos_l2_interfaces_module.rst",
+ "name": "LICENSE",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "875b8b13249159af500f7785bd39a89722dd4a01161c549b84efc5105e89fb10",
+ "chksum_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986",
"format": 1
},
{
- "name": "docs/arista.eos.eos_lacp_module.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "41c37120e15ed62a0b939ec0cce0e747fefcb74ef051d7c831bdd6a4831a73b6",
+ "name": ".vscode",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/arista.eos.eos_l3_interfaces_module.rst",
+ "name": ".vscode/settings.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "44ee5f610c3334d0c43e72a061217ec202d79042c97bf82f2a62eb6075cc8a4b",
+ "chksum_sha256": "689cb2b210cace81743b1da8f00db7a4a7027b193dc85b17be2918b6f9977bfe",
"format": 1
},
{
- "name": "docs/arista.eos.eos_prefix_lists_module.rst",
+ "name": ".flake8",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "77c510223083c0c16f010a59da50d32474093900d238ac7d985fe4b98454ce1a",
+ "chksum_sha256": "f357bc604a44fe8a5912ec2b9067b734a88d1026da98d5993905d7b34ab44357",
"format": 1
},
{
- "name": "docs/arista.eos.eos_user_module.rst",
+ "name": "CHANGELOG.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "820458159242af177985582cc6a0b35d82d9a44d3387e14c05b195a5baae2075",
+ "chksum_sha256": "19dc268d4f51e2246ddf2fcf471f20fec732ca99aea9ab27e1cbba7a87c8c5be",
"format": 1
},
{
- "name": "docs/arista.eos.eos_lacp_interfaces_module.rst",
+ "name": "requirements.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "734d129c2aed3bc167555a6a863d93361b7c4a96c4af55b45329d52b04cca95c",
+ "chksum_sha256": "883b106f13b0c6536f55619685ddca25968b4167dedb12e08fa37c93f4c63b25",
"format": 1
},
{
- "name": "docs/arista.eos.eos_vlans_module.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "dc743c4b64f6ac842967f495059b06ac5008a2fc93e73ab33ca06de5d9b5b322",
+ "name": "docs",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/arista.eos.eos_facts_module.rst",
+ "name": "docs/arista.eos.eos_ospfv2_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5a80619e2a2f0d283a69c669d9486243fce9d68a80ac07cd92b22c3845c1a124",
+ "chksum_sha256": "cbb9fbfb8196b35682ea97231c66e5feb28fc0c59cc87c9ccfb5f4352bec573e",
"format": 1
},
{
- "name": "docs/arista.eos.eos_lldp_module.rst",
+ "name": "docs/arista.eos.eos_static_routes_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7aa54a176f3d95e20db2127d8b7428ff5ccd511016b007f80d469c7e64922ee2",
+ "chksum_sha256": "e556daa557e50664de8a09d706c314cddf9b54c82368f621d07afdcec06cc44d",
"format": 1
},
{
- "name": "docs/arista.eos.eos_hostname_module.rst",
+ "name": "docs/arista.eos.eos_httpapi.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9803954ef010d617a8faea5d3bbd0b9f62a4f11d32d9d09bf0a03a7f32fa47d1",
+ "chksum_sha256": "74c0cc2f16ee0793613c76713e192749dcd24f3e73ecd49cca4599ed62c22f9e",
"format": 1
},
{
- "name": "docs/arista.eos.eos_bgp_address_family_module.rst",
+ "name": "docs/arista.eos.eos_vrf_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "db2a2a582e437d5ef5ecc712aa232a3263430cde26fd1e030f4f7d8fb945e7d1",
+ "chksum_sha256": "0c6664519aa55395647325147639ccf77de85e600a1abefaf3f83755af82c32b",
"format": 1
},
{
- "name": "docs/arista.eos.eos_logging_module.rst",
+ "name": "docs/arista.eos.eos_lldp_interfaces_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0ed61ec5ef8d86ad44bf605217913fc8d9979496766ca33ad196939f940fb5d9",
+ "chksum_sha256": "7299a09dc0f8360ad7d8c95d13b8c0e9f07035e910f58efa4e6e6c550f5b377d",
"format": 1
},
{
- "name": "docs/arista.eos.eos_httpapi.rst",
+ "name": "docs/arista.eos.eos_acl_interfaces_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "74c0cc2f16ee0793613c76713e192749dcd24f3e73ecd49cca4599ed62c22f9e",
+ "chksum_sha256": "7accbd8675612462d6345092960802e981932671f1a746f6a4581d0a63c5d943",
"format": 1
},
{
- "name": "docs/arista.eos.eos_snmp_server_module.rst",
+ "name": "docs/arista.eos.eos_user_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "95804c5a71ea18fc6ce044dc1711dfb10abf8dae9aacc61b6d5bb8888dbb3ddd",
+ "chksum_sha256": "820458159242af177985582cc6a0b35d82d9a44d3387e14c05b195a5baae2075",
"format": 1
},
{
- "name": "docs/arista.eos.eos_acl_interfaces_module.rst",
+ "name": "docs/arista.eos.eos_l3_interfaces_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7accbd8675612462d6345092960802e981932671f1a746f6a4581d0a63c5d943",
+ "chksum_sha256": "44ee5f610c3334d0c43e72a061217ec202d79042c97bf82f2a62eb6075cc8a4b",
"format": 1
},
{
- "name": "docs/arista.eos.eos_config_module.rst",
+ "name": "docs/arista.eos.eos_ntp_global_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a8534f76fb2956d6a825bca465195717143caeabb8dad0dbaeecd98cd87b831e",
+ "chksum_sha256": "82bea9b37a6b60b3372f4ff510bfcd0e59b0a15f5e6fe5a850630125f7c10c3c",
"format": 1
},
{
- "name": "docs/arista.eos.eos_cliconf.rst",
+ "name": "docs/arista.eos.eos_interfaces_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "52b6530cf3a4711a1b8e40dcff5063e73fc3e868e6cba0b91976e8ba53af8a14",
+ "chksum_sha256": "a455227b4df8d2346b1f77b5132247cd731082ffa814e451d75396c117b60cff",
"format": 1
},
{
- "name": "docs/arista.eos.eos_lldp_global_module.rst",
+ "name": "docs/arista.eos.eos_lacp_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f0fea31fef727f45440a5363e764f99345b4f7e3d079fe5e36388f0ac2b20948",
+ "chksum_sha256": "41c37120e15ed62a0b939ec0cce0e747fefcb74ef051d7c831bdd6a4831a73b6",
"format": 1
},
{
- "name": "docs/arista.eos.eos_bgp_module.rst",
+ "name": "docs/arista.eos.eos_command_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75e256d769047f67382bc69c8937d95106efe9c999392c69ec9ee212193dd857",
+ "chksum_sha256": "c3d335bd1672f0a46e52990493ff4d829f18392f3bc1a7949bbc6a99837103d7",
"format": 1
},
{
- "name": "docs/arista.eos.eos_acls_module.rst",
+ "name": "docs/arista.eos.eos_hostname_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5cf3899b43a7949c4079e95c026995a56e06fc5bf705d4c2687b8315a44c3a42",
+ "chksum_sha256": "9803954ef010d617a8faea5d3bbd0b9f62a4f11d32d9d09bf0a03a7f32fa47d1",
"format": 1
},
{
- "name": ".isort.cfg",
+ "name": "docs/arista.eos.eos_vlans_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0ac83124be8cf24f40e7457c3a7ede4409108ee8caa89976cdb03d6d1ae336d1",
+ "chksum_sha256": "dc743c4b64f6ac842967f495059b06ac5008a2fc93e73ab33ca06de5d9b5b322",
"format": 1
},
{
- "name": "pyproject.toml",
+ "name": "docs/arista.eos.eos_lldp_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1cb6a45dfa2625123890b93ad7fdc156b063c16e8ae6dba11511a1d1986b0fcc",
+ "chksum_sha256": "7aa54a176f3d95e20db2127d8b7428ff5ccd511016b007f80d469c7e64922ee2",
"format": 1
},
{
- "name": "bindep.txt",
+ "name": "docs/arista.eos.eos_facts_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2cb7d868bf5a674ff9531652c2f591c4767816c5ce240a75330c1585861e70b0",
+ "chksum_sha256": "5a80619e2a2f0d283a69c669d9486243fce9d68a80ac07cd92b22c3845c1a124",
"format": 1
},
{
- "name": "changelogs",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "docs/arista.eos.eos_snmp_server_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "95804c5a71ea18fc6ce044dc1711dfb10abf8dae9aacc61b6d5bb8888dbb3ddd",
"format": 1
},
{
- "name": "changelogs/fragments",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "docs/arista.eos.eos_bgp_global_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "892272aec233fa0f0110eba45ab0a8f4107122a387cb00c3920860f4d002fc26",
"format": 1
},
{
- "name": "changelogs/fragments/.keep",
+ "name": "docs/arista.eos.eos_lldp_global_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "f0fea31fef727f45440a5363e764f99345b4f7e3d079fe5e36388f0ac2b20948",
"format": 1
},
{
- "name": "changelogs/config.yaml",
+ "name": "docs/arista.eos.eos_lag_interfaces_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "03ddb712fc00dcdde125bd062a4fffc3ce5846d43ac90c3191c8ac8da4196303",
+ "chksum_sha256": "450f78cb5e371d925bc21c5ed5ffdc90fd098ca65de2e421f96c344ea094878c",
"format": 1
},
{
- "name": "changelogs/changelog.yaml",
+ "name": "docs/arista.eos.eos_lacp_interfaces_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "31b9728ef0a2dcdd94ebd9d93eb1fe948e3de0404c203f63f6dee275cb5943e8",
+ "chksum_sha256": "734d129c2aed3bc167555a6a863d93361b7c4a96c4af55b45329d52b04cca95c",
"format": 1
},
{
- "name": "tox.ini",
+ "name": "docs/arista.eos.eos_ospfv3_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4246b891e853d1fc828a1dff460bcd43c3ea3aa08d6686b8396bd17169806546",
+ "chksum_sha256": "756aa82267c7e0995dd8f88cfc6b12703fbcd68907fc8610f65204a2d8bb4faa",
"format": 1
},
{
- "name": "CHANGELOG.rst",
+ "name": "docs/arista.eos.eos_bgp_address_family_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "84daa7535f1cd39ce8c0ecaeb7254ed4ff201ff101d164177e4cbc4c985a3882",
+ "chksum_sha256": "db2a2a582e437d5ef5ecc712aa232a3263430cde26fd1e030f4f7d8fb945e7d1",
"format": 1
},
{
- "name": ".gitignore",
+ "name": "docs/arista.eos.eos_route_maps_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a2ebfecdb6c1b58267fbe97e6e2ac02c2b963df7673fc1047270f0f0cff16732",
+ "chksum_sha256": "c72fa7b5ddaa69adf74a0e20f10338bd9e00a4bcf8b80d8833d2508ec90e38a1",
"format": 1
},
{
- "name": ".pre-commit-config.yaml",
+ "name": "docs/arista.eos.eos_eapi_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f06cb69ac03a025140d5c35b162e6e045a101aa729d7805ba2b1e1d6b82d4aed",
+ "chksum_sha256": "4ff82c55d35021b368eaeb719ad4c4b0e15111fcec0e038d13970e3db9b0a0f0",
"format": 1
},
{
- "name": ".prettierignore",
+ "name": "docs/arista.eos.eos_l2_interfaces_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "29d6205739f8fa2ea1dfb82777cc64dd269e51fe58c7c713682f71ac8b1973c4",
+ "chksum_sha256": "875b8b13249159af500f7785bd39a89722dd4a01161c549b84efc5105e89fb10",
"format": 1
},
{
- "name": ".github",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "docs/arista.eos.eos_cliconf.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "52b6530cf3a4711a1b8e40dcff5063e73fc3e868e6cba0b91976e8ba53af8a14",
"format": 1
},
{
- "name": ".github/dependabot.yml",
+ "name": "docs/arista.eos.eos_acls_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "11ceee3c57116e9fd08bc423414b1095ff002aa012d6fb325b1a7e24d7e28461",
+ "chksum_sha256": "5cf3899b43a7949c4079e95c026995a56e06fc5bf705d4c2687b8315a44c3a42",
"format": 1
},
{
- "name": ".github/workflows",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "docs/arista.eos.eos_prefix_lists_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "77c510223083c0c16f010a59da50d32474093900d238ac7d985fe4b98454ce1a",
"format": 1
},
{
- "name": ".github/workflows/codecoverage.yml",
+ "name": "docs/arista.eos.eos_logging_global_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8bbcae622f5e51798b577df290135e846244399c2a6ccbfedac523b38a8330a3",
+ "chksum_sha256": "c5ac61d63be154248e23a8b1d65878997ba5ee5c7c7cccc5134e557d6132c85f",
"format": 1
},
{
- "name": ".github/workflows/ack.yml",
+ "name": "docs/arista.eos.eos_banner_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "24c6fbafaa69e3e3ee696f2cefa5120794b62cef7e870553dddce8b8af0a127c",
+ "chksum_sha256": "b128807c32c6a491aa78a1b56512e2982f5d6811641d0b14e8e347d4cf8a5b06",
"format": 1
},
{
- "name": ".github/workflows/release.yml",
+ "name": "docs/arista.eos.eos_ospf_interfaces_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c9b7dba505905600bbb9f0d8e9956b7cc20f80edfa742dfdae9395542f417aa1",
+ "chksum_sha256": "83887e8f1a80e7472057297779adde8017ab6371a3c41c99e4ed4c21d7b34858",
"format": 1
},
{
- "name": ".github/workflows/push.yml",
+ "name": "docs/arista.eos.eos_system_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3164180ee4d514fea284a79033515effa6270d70d25ef3da77da318c2ac6382e",
+ "chksum_sha256": "852c5c712440e5f7b2207343f9796e04c758cf9967854a29601c1e172153cd21",
"format": 1
},
{
- "name": ".github/workflows/tests.yml",
+ "name": "docs/arista.eos.eos_config_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a363c29cae8f4b799d88470e5cc5546312966f5559f25ffd680611119035dd29",
+ "chksum_sha256": "a8534f76fb2956d6a825bca465195717143caeabb8dad0dbaeecd98cd87b831e",
"format": 1
},
{
- "name": ".github/release-drafter.yml",
+ "name": "bindep.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7cbc785c8661033cd9dd7a60897484fce731cbe3dc124a689fc3e934b1d974fb",
+ "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.
<!--start requires_ansible-->
## 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
-
- <table border=0 cellpadding=0 class="documentation-table">
- <tr>
- <th colspan="4">Parameter</th>
- <th>Choices/<font color="blue">Defaults</font></th>
- <th width="100%">Comments</th>
- </tr>
- <tr>
- <td colspan="4">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>config</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">dictionary</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Specifies the BGP related configuration.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="3">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>address_family</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">list</span>
- / <span style="color: purple">elements=dictionary</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Specifies BGP address family related configurations.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>afi</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- / <span style="color: red">required</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>ipv4</li>
- <li>ipv6</li>
- </ul>
- </td>
- <td>
- <div>Type of address family to configure.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>neighbors</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">list</span>
- / <span style="color: purple">elements=dictionary</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Specifies BGP neighbor related configurations in Address Family configuration mode.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>activate</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">boolean</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li>yes</li>
- </ul>
- </td>
- <td>
- <div>Enable the Address Family for this Neighbor.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>default_originate</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">boolean</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li>yes</li>
- </ul>
- </td>
- <td>
- <div>Originate default route to this neighbor.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>graceful_restart</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">boolean</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li>yes</li>
- </ul>
- </td>
- <td>
- <div>Enable/disable graceful restart mode for this neighbor.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>neighbor</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- / <span style="color: red">required</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Neighbor router address.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>weight</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Assign weight for routes learnt from this neighbor.</div>
- <div>The range is from 0 to 65535</div>
- </td>
- </tr>
-
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>networks</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">list</span>
- / <span style="color: purple">elements=dictionary</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Specify Networks to announce via BGP.</div>
- <div>For operation replace, this option is mutually exclusive with root level networks option.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>masklen</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Subnet mask length for the Network to announce(e.g, 8, 16, 24, etc.).</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>prefix</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- / <span style="color: red">required</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Network ID to announce via BGP.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>route_map</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Route map to modify the attributes.</div>
- </td>
- </tr>
-
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>redistribute</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">list</span>
- / <span style="color: purple">elements=dictionary</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Specifies the redistribute information from another routing protocol.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>protocol</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- / <span style="color: red">required</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>ospfv3</li>
- <li>ospf</li>
- <li>isis</li>
- <li>static</li>
- <li>connected</li>
- <li>rip</li>
- </ul>
- </td>
- <td>
- <div>Specifies the protocol for configuring redistribute information.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>route_map</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Specifies the route map reference.</div>
- </td>
- </tr>
-
-
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="3">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>bgp_as</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- / <span style="color: red">required</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Specifies the BGP Autonomous System (AS) number to configure on the device.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="3">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>log_neighbor_changes</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">boolean</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li>yes</li>
- </ul>
- </td>
- <td>
- <div>Enable/disable logging neighbor up/down and reset reason.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="3">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>neighbors</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">list</span>
- / <span style="color: purple">elements=dictionary</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Specifies BGP neighbor related configurations.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>description</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Neighbor specific description.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>ebgp_multihop</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Specifies the maximum hop count for EBGP neighbors not on directly connected networks.</div>
- <div>The range is from 1 to 255.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>enabled</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">boolean</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li>yes</li>
- </ul>
- </td>
- <td>
- <div>Administratively shutdown or enable a neighbor.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>maximum_prefix</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Maximum number of prefixes to accept from this peer.</div>
- <div>The range is from 0 to 4294967294.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>neighbor</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- / <span style="color: red">required</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Neighbor router address.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>password</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Password to authenticate the BGP peer connection.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>peer_group</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Name of the peer group that the neighbor is a member of.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>remote_as</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- / <span style="color: red">required</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Remote AS of the BGP neighbor to configure.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>remove_private_as</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">boolean</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li>yes</li>
- </ul>
- </td>
- <td>
- <div>Remove the private AS number from outbound updates.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>route_reflector_client</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Specify a neighbor as a route reflector client.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>timers</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">dictionary</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Specifies BGP neighbor timer related configurations.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>holdtime</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- / <span style="color: red">required</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Interval (in seconds) after not receiving a keepalive message that device declares a peer dead.</div>
- <div>The range is from 3 to 7200.</div>
- <div>Setting this value to 0 will not send keep-alives (hold forever).</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>keepalive</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- / <span style="color: red">required</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Frequency (in seconds) with which the device sends keepalive messages to its peer.</div>
- <div>The range is from 0 to 3600.</div>
- </td>
- </tr>
-
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>update_source</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Source of the routing updates.</div>
- </td>
- </tr>
-
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="3">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>networks</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">list</span>
- / <span style="color: purple">elements=dictionary</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Specify Networks to announce via BGP.</div>
- <div>For operation replace, this option is mutually exclusive with networks option under address_family.</div>
- <div>For operation replace, if the device already has an address family activated, this option is not allowed.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>masklen</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Subnet mask length for the Network to announce(e.g, 8, 16, 24, etc.).</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>prefix</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- / <span style="color: red">required</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Network ID to announce via BGP.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>route_map</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Route map to modify the attributes.</div>
- </td>
- </tr>
-
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="3">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>redistribute</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">list</span>
- / <span style="color: purple">elements=dictionary</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Specifies the redistribute information from another routing protocol.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>protocol</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- / <span style="color: red">required</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>ospf</li>
- <li>ospfv3</li>
- <li>static</li>
- <li>connected</li>
- <li>rip</li>
- <li>isis</li>
- </ul>
- </td>
- <td>
- <div>Specifies the protocol for configuring redistribute information.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>route_map</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Specifies the route map reference.</div>
- </td>
- </tr>
-
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="3">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>router_id</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Configures the BGP routing process router-id value.</div>
- </td>
- </tr>
-
- <tr>
- <td colspan="4">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>operation</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li><div style="color: blue"><b>merge</b>&nbsp;&larr;</div></li>
- <li>replace</li>
- <li>override</li>
- <li>delete</li>
- </ul>
- </td>
- <td>
- <div>Specifies the operation to be performed on the BGP process configured on the device.</div>
- <div>In case of merge, the input configuration will be merged with the existing BGP configuration on the device.</div>
- <div>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.</div>
- <div>In case of override, all the existing BGP configuration will be removed from the device and replaced with the input configuration.</div>
- <div>In case of delete the existing BGP configuration will be removed from the device.</div>
- </td>
- </tr>
- </table>
- <br/>
-
-
-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 <https://docs.ansible.com/ansible/latest/reference_appendices/common_return_values.html#common-return-values>`_, the following are the fields unique to this module:
-
-.. raw:: html
-
- <table border=0 cellpadding=0 class="documentation-table">
- <tr>
- <th colspan="1">Key</th>
- <th>Returned</th>
- <th width="100%">Description</th>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="return-"></div>
- <b>commands</b>
- <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
- <div style="font-size: small">
- <span style="color: purple">list</span>
- </div>
- </td>
- <td>always</td>
- <td>
- <div>The list of configuration mode commands to send to the device</div>
- <br/>
- <div style="font-size: smaller"><b>Sample:</b></div>
- <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">[&#x27;router bgp 64496&#x27;, &#x27;bgp router-id 192.0.2.1&#x27;, &#x27;bgp log-neighbor-changes&#x27;, &#x27;neighbor 203.0.113.5 remote-as 64511&#x27;, &#x27;neighbor 203.0.113.5 timers 300 360&#x27;, &#x27;neighbor 198.51.100.2 remote-as 64498&#x27;, &#x27;network 198.51.100.0 route-map RMAP_1&#x27;, &#x27;network 192.0.2.0 mask 255.255.254.0&#x27;, &#x27;address-family ipv4&#x27;, &#x27;redistribute isis route-map RMAP_1&#x27;, &#x27;exit-address-family&#x27;]</div>
- </td>
- </tr>
- </table>
- <br/><br/>
-
-
-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
-
- <table border=0 cellpadding=0 class="documentation-table">
- <tr>
- <th colspan="2">Parameter</th>
- <th>Choices/<font color="blue">Defaults</font></th>
- <th width="100%">Comments</th>
- </tr>
- <tr>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>aggregate</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">list</span>
- / <span style="color: purple">elements=dictionary</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>List of logging definitions.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>dest</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>on</li>
- <li>host</li>
- <li>console</li>
- <li>monitor</li>
- <li>buffered</li>
- </ul>
- </td>
- <td>
- <div>Destination of the logs.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>facility</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Set logging facility.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>level</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>emergencies</li>
- <li>alerts</li>
- <li>critical</li>
- <li>errors</li>
- <li>warnings</li>
- <li>notifications</li>
- <li>informational</li>
- <li>debugging</li>
- </ul>
- </td>
- <td>
- <div>Set logging severity levels.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>name</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>The hostname or IP address of the destination.</div>
- <div>Required when <em>dest=host</em>.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>size</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Size of buffer. The acceptable value is in range from 10 to 2147483647 bytes.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>state</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li><div style="color: blue"><b>present</b>&nbsp;&larr;</div></li>
- <li>absent</li>
- </ul>
- </td>
- <td>
- <div>State of the logging configuration.</div>
- </td>
- </tr>
-
- <tr>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>dest</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>on</li>
- <li>host</li>
- <li>console</li>
- <li>monitor</li>
- <li>buffered</li>
- </ul>
- </td>
- <td>
- <div>Destination of the logs.</div>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>facility</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Set logging facility.</div>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>level</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>emergencies</li>
- <li>alerts</li>
- <li>critical</li>
- <li>errors</li>
- <li>warnings</li>
- <li>notifications</li>
- <li>informational</li>
- <li>debugging</li>
- </ul>
- </td>
- <td>
- <div>Set logging severity levels.</div>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>name</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>The hostname or IP address of the destination.</div>
- <div>Required when <em>dest=host</em>.</div>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>size</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Size of buffer. The acceptable value is in range from 10 to 2147483647 bytes.</div>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>state</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li><div style="color: blue"><b>present</b>&nbsp;&larr;</div></li>
- <li>absent</li>
- </ul>
- </td>
- <td>
- <div>State of the logging configuration.</div>
- </td>
- </tr>
- </table>
- <br/>
-
-
-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 <https://docs.ansible.com/ansible/latest/reference_appendices/common_return_values.html#common-return-values>`_, the following are the fields unique to this module:
-
-.. raw:: html
-
- <table border=0 cellpadding=0 class="documentation-table">
- <tr>
- <th colspan="1">Key</th>
- <th>Returned</th>
- <th width="100%">Description</th>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="return-"></div>
- <b>commands</b>
- <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
- <div style="font-size: small">
- <span style="color: purple">list</span>
- </div>
- </td>
- <td>always</td>
- <td>
- <div>The list of configuration mode commands to send to the device</div>
- <br/>
- <div style="font-size: smaller"><b>Sample:</b></div>
- <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">[&#x27;logging facility local7&#x27;, &#x27;logging host 172.16.0.1&#x27;]</div>
- </td>
- </tr>
- </table>
- <br/><br/>
-
-
-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
</td>
</tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="3">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>throttle</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">dictionary</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>This command is deprecated by &#x27;timers lsa&#x27; or &#x27;timers spf&#x27;.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>initial</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Initial SPF schedule delay in msecs.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>lsa</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">boolean</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li>yes</li>
- </ul>
- </td>
- <td>
- <div>Configure threshold for retransmission of lsa</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>max</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Max wait time between two SPFs in msecs.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>min</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Min Hold time between two SPFs in msecs</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>spf</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">boolean</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li>yes</li>
- </ul>
- </td>
- <td>
- <div>Configure time between SPF calculations</div>
- </td>
- </tr>
-
<tr>
@@ -3695,128 +3567,6 @@ Parameters
</td>
</tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="4">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>throttle</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">dictionary</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>This command is deprecated by &#x27;timers lsa&#x27; or &#x27;timers spf&#x27;.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="3">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>initial</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Initial SPF schedule delay in msecs.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="3">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>lsa</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">boolean</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li>yes</li>
- </ul>
- </td>
- <td>
- <div>Configure threshold for retransmission of lsa</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="3">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>max</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Max wait time between two SPFs in msecs.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="3">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>min</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Min Hold time between two SPFs in msecs</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="3">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>spf</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">boolean</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li>yes</li>
- </ul>
- </td>
- <td>
- <div>Configure time between SPF calculations</div>
- </td>
- </tr>
-
<tr>
<td class="elbow-placeholder"></td>
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
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
<span style="color: purple">list</span>
- / <span style="color: purple">elements=string</span>
+ / <span style="color: purple">elements=raw</span>
</div>
</td>
<td>
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 <size> <level>
- # logging buffered <same-size>
- #
- # 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 <size> <level>
-
- 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: <str>, vrf: <str> }
lookup_source=dict(type="list", elements="raw"),
# { server: <str>; vrf: <str> }
- 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
@@ -4,6 +4,12 @@
- name: setup
become: true
arista.eos.eos_config:
+ lines:
+ - no hostname
+
+- name: setup
+ become: true
+ arista.eos.eos_config:
lines: hostname {{ inventory_hostname_short }}
match: none
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
@@ -7,6 +7,12 @@
become: true
arista.eos.eos_config:
lines:
+ - no hostname
+
+- name: setup
+ become: true
+ arista.eos.eos_config:
+ lines:
- snmp-server contact ansible
- hostname {{ inventory_hostname_short }}
match: none
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
@@ -7,6 +7,12 @@
become: true
arista.eos.eos_config:
lines:
+ - no hostname
+
+- name: setup
+ become: true
+ arista.eos.eos_config:
+ lines:
- snmp-server contact ansible
- hostname {{ inventory_hostname_short }}
match: none
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/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 <tkuratomi@ansible.com>
-#
-# 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 <http://www.gnu.org/licenses/>.
-
-# 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 <tkuratomi@ansible.com>
-#
-# 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 <http://www.gnu.org/licenses/>.
-
-# 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 <http://www.gnu.org/licenses/>.
-
-# 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": "tests/integration/targets/application/tasks/main.yml",
+ "name": "test/awx/test_instance.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "42675b283f15715cccd1bba3f3d6be8d9d84e1bcf7c1e06e33a281ab4eb5c64f",
+ "chksum_sha256": "2b60fecf79c63341b0eece0d9941a655dfeac89b3565e78f5bb39c5ec77b91af",
"format": 1
},
{
- "name": "tests/integration/targets/instance_group",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "test/awx/test_role.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9d4aec4ecb6a4429c08125de3c7b1161db794a2ed32cebd9e593d14fd90375d4",
"format": 1
},
{
- "name": "tests/integration/targets/instance_group/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "test/awx/test_role_definition.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "da3d110330ea7f35d99701fb748e71ada4bc458b6c5f66be5a317c433e3976ea",
"format": 1
},
{
- "name": "tests/integration/targets/instance_group/tasks/main.yml",
+ "name": "test/awx/test_role_team_assignment.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5d38320dd4563f17fffd12b510a91dd26e40bfd5f408f75f96b930a38fcfd135",
+ "chksum_sha256": "f3ac9236893e4737e6eb32b3a3d217d13d520de63ecd6050debdf157a968ec7a",
"format": 1
},
{
- "name": "tests/integration/targets/settings",
+ "name": "test/awx/test_role_user_assignment.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "62e76a504873f12b631f99a7275a6673e98964258f0775606860a28d7e3efc73",
+ "format": 1
+ },
+ {
+ "name": "test/awx/test_workflow_job_template.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9e23b2e1055900a86dc2fb42165ca567936b319b69d3000c36434df28c6ae007",
+ "format": 1
+ },
+ {
+ "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 <awx-project@googlegroups.com>"
],
@@ -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
@@ -259,6 +262,11 @@ def job_template(project, inventory):
@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'})
@@ -332,6 +340,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(
credential_type=credentialtype_scm, name='scm-cred', inputs={'username': 'optimus', 'password': 'prime'}, organization=organization
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
@@ -136,6 +136,37 @@ def test_associate_only_on_success(run_module, admin_user, organization, project
@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)
result = run_module('workflow_job_template', {'name': 'foo-workflow', 'organization': organization.name, 'state': 'absent'}, admin_user)
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/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 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
- <component name="Black">
- <option name="sdkName" value="Python 3.10.12 WSL (Ubuntu-22.04): (/home/eric/workspace/ansible-workspace/mymodule/test/bin/python3)" />
- </component>
- <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10.12 WSL (Ubuntu-22.04): (/home/eric/workspace/ansible-workspace/mymodule/test/bin/python3)" project-jdk-type="Python SDK" />
-</project> \ 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 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
- <component name="AutoImportSettings">
- <option name="autoReloadType" value="SELECTIVE" />
- </component>
- <component name="ChangeListManager">
- <list default="true" id="d047ab49-1c87-4a80-9a8a-6e10b8f617c7" name="Changes" comment="deprecate tenant ID" />
- <option name="SHOW_DIALOG" value="false" />
- <option name="HIGHLIGHT_CONFLICTS" value="true" />
- <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
- <option name="LAST_RESOLUTION" value="IGNORE" />
- </component>
- <component name="Git.Settings">
- <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
- </component>
- <component name="MarkdownSettingsMigration">
- <option name="stateVersion" value="1" />
- </component>
- <component name="ProjectColorInfo">{
- &quot;associatedIndex&quot;: 3
-}</component>
- <component name="ProjectId" id="2V04ePwIacqirqMx6z2ILJcwwz8" />
- <component name="ProjectViewState">
- <option name="hideEmptyMiddlePackages" value="true" />
- <option name="showLibraryContents" value="true" />
- </component>
- <component name="PropertiesComponent">{
- &quot;keyToString&quot;: {
- &quot;RunOnceActivity.OpenProjectViewOnStart&quot;: &quot;true&quot;,
- &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
- &quot;WebServerToolWindowFactoryState&quot;: &quot;false&quot;,
- &quot;git-widget-placeholder&quot;: &quot;f/msgraph__beta&quot;,
- &quot;last_opened_file_path&quot;: &quot;//wsl$/Ubuntu-22.04/home/eric/workspace/ansible-workspace/azcollection&quot;,
- &quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
- &quot;node.js.detected.package.tslint&quot;: &quot;true&quot;,
- &quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
- &quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;,
- &quot;nodejs_package_manager_path&quot;: &quot;npm&quot;,
- &quot;settings.editor.selected.configurable&quot;: &quot;com.jetbrains.python.configuration.PyActiveSdkModuleConfigurable&quot;,
- &quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
- }
-}</component>
- <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
- <component name="TaskManager">
- <task active="true" id="Default" summary="Default task">
- <changelist id="d047ab49-1c87-4a80-9a8a-6e10b8f617c7" name="Changes" comment="" />
- <created>1693959760639</created>
- <option name="number" value="Default" />
- <option name="presentableId" value="Default" />
- <updated>1693959760639</updated>
- <workItem from="1693959762094" duration="3039000" />
- <workItem from="1693972601745" duration="6259000" />
- <workItem from="1694156355409" duration="318000" />
- <workItem from="1695017100314" duration="636000" />
- <workItem from="1697608879446" duration="1750000" />
- <workItem from="1697612810177" duration="444000" />
- <workItem from="1697697857011" duration="781000" />
- <workItem from="1698046408261" duration="2057000" />
- <workItem from="1698115035079" duration="743000" />
- </task>
- <task id="LOCAL-00001" summary="msgraph client">
- <option name="closed" value="true" />
- <created>1693977495938</created>
- <option name="number" value="00001" />
- <option name="presentableId" value="LOCAL-00001" />
- <option name="project" value="LOCAL" />
- <updated>1693977495938</updated>
- </task>
- <task id="LOCAL-00002" summary="msgraph client">
- <option name="closed" value="true" />
- <created>1693977569076</created>
- <option name="number" value="00002" />
- <option name="presentableId" value="LOCAL-00002" />
- <option name="project" value="LOCAL" />
- <updated>1693977569076</updated>
- </task>
- <task id="LOCAL-00003" summary="migrate account API from graphrbac to msgraph">
- <option name="closed" value="true" />
- <created>1693977622517</created>
- <option name="number" value="00003" />
- <option name="presentableId" value="LOCAL-00003" />
- <option name="project" value="LOCAL" />
- <updated>1693977622517</updated>
- </task>
- <task id="LOCAL-00004" summary="fix sanity">
- <option name="closed" value="true" />
- <created>1695017609087</created>
- <option name="number" value="00004" />
- <option name="presentableId" value="LOCAL-00004" />
- <option name="project" value="LOCAL" />
- <updated>1695017609087</updated>
- </task>
- <task id="LOCAL-00005" summary="fix sanity">
- <option name="closed" value="true" />
- <created>1697611839381</created>
- <option name="number" value="00005" />
- <option name="presentableId" value="LOCAL-00005" />
- <option name="project" value="LOCAL" />
- <updated>1697611839381</updated>
- </task>
- <task id="LOCAL-00006" summary="fix sanity">
- <option name="closed" value="true" />
- <created>1697613231431</created>
- <option name="number" value="00006" />
- <option name="presentableId" value="LOCAL-00006" />
- <option name="project" value="LOCAL" />
- <updated>1697613231431</updated>
- </task>
- <task id="LOCAL-00007" summary="deprecate tenant ID">
- <option name="closed" value="true" />
- <created>1697698300998</created>
- <option name="number" value="00007" />
- <option name="presentableId" value="LOCAL-00007" />
- <option name="project" value="LOCAL" />
- <updated>1697698300998</updated>
- </task>
- <task id="LOCAL-00008" summary="deprecate tenant ID">
- <option name="closed" value="true" />
- <created>1698048324225</created>
- <option name="number" value="00008" />
- <option name="presentableId" value="LOCAL-00008" />
- <option name="project" value="LOCAL" />
- <updated>1698048324225</updated>
- </task>
- <option name="localTasksCounter" value="9" />
- <servers />
- </component>
- <component name="TypeScriptGeneratedFilesManager">
- <option name="version" value="3" />
- </component>
- <component name="VcsManagerConfiguration">
- <MESSAGE value="msgraph client" />
- <MESSAGE value="migrate account API from graphrbac to msgraph" />
- <MESSAGE value="fix sanity" />
- <MESSAGE value="deprecate tenant ID" />
- <option name="LAST_COMMIT_MESSAGE" value="deprecate tenant ID" />
- </component>
-</project> \ 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,2845 +8,2845 @@
"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",
- "format": 1
- },
- {
- "name": "plugins/modules",
+ "name": "tests/integration/targets",
"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",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_gallery_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e1b22cd1253e69c51442a1e402ef64fbdccaa8ce61b05839041fd7c35a5a44ab",
+ "name": "tests/integration/targets/azure_rm_notificationhub/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_automationaccount_info.py",
+ "name": "tests/integration/targets/azure_rm_notificationhub/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "048a0c9b532196427437575202beaf31f8314efb70c67aa86733e6cccc14a98c",
+ "chksum_sha256": "a66dc9e034ad04e167bd52df4f75f2bea4499b25349fc42b3c8de9e2fe806996",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_privateendpointdnszonegroup_info.py",
+ "name": "tests/integration/targets/azure_rm_notificationhub/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "70582f1fa2c40f77e166f00242bd6bff2e7c018368beaa2ac960328c341faa77",
+ "chksum_sha256": "1be076424fbf717d678e202250426e9b368688f8d3029f0c5dc262b97df819af",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_virtualnetwork_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "39cbe4ccb66acb4dd36b893c9cb000846535c0726b8960e541a47f576fa2ed6f",
+ "name": "tests/integration/targets/azure_rm_notificationhub/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_rediscache.py",
+ "name": "tests/integration/targets/azure_rm_notificationhub/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2323900cb0386fdd65ca6edada0a669ae12d6d87a9c08afb9bc92e150612a36d",
+ "chksum_sha256": "7f519a0026da2e72a6633b7e82a4c2ae581c50b918a5291b3b4737360211276b",
"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",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_mysqlconfiguration.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "fff34c89e959affced009f321ef5cd6b6ad9955e711d69306f339ca4c15392e0",
+ "name": "tests/integration/targets/azure_rm_acs/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_loadbalancer_info.py",
+ "name": "tests/integration/targets/azure_rm_acs/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6b508842cc40fd4310a90e2bbad7733a50b7c43e29dc73dbccb304940b0f53c",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_ddosprotectionplan_info.py",
+ "name": "tests/integration/targets/azure_rm_acs/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9ea0ae1f2bcab647085f83b8223d763abf123afe3996d0aeb0f304fc8d4fc7d3",
+ "chksum_sha256": "2f7e954a810d0341b1aed1d34e5684bc502980bb6ebbe6a46fb03163ed0e11db",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_hostgroup.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7f3b26f577bb53702d0ed884da4c0c587dc6a186b7bdf9b87d3765c7dadcd89f",
+ "name": "tests/integration/targets/azure_rm_acs/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_datafactory.py",
+ "name": "tests/integration/targets/azure_rm_acs/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5e54eadbb395d175730960b6e089b78c76cefeebe08dca0ab1ae80e4d34e78fb",
+ "chksum_sha256": "ecad2cdce0986a34a8f64d2bcbcbd742d99a0083d4e2773cc6a5482a5d529b9c",
"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",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_dnszone_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "15da62156897e9dc73a74650198e57b4d6dce5bb761b1e0b0c86d19be31f1cce",
+ "name": "tests/integration/targets/azure_rm_webapp/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_rediscache_info.py",
+ "name": "tests/integration/targets/azure_rm_webapp/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "af3900d503ca2de80407fa58b2a09e2835a2087315d12a6ae70145f738a71120",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_iothub.py",
+ "name": "tests/integration/targets/azure_rm_webapp/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aee9f30afbc1989ff7cfe64101c59d842dc635e59b34411d4045c428f1109b1d",
+ "chksum_sha256": "75b6fa7694979e088e4b068016381f37a603045a395e3b8c660032f4008257d5",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_mysqlconfiguration_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d9e284a3a0c4c2ec47a44ac4a7419358ab7d897488fa29de3ae616cfed56ec4d",
+ "name": "tests/integration/targets/azure_rm_webapp/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_devtestlabvirtualmachine.py",
+ "name": "tests/integration/targets/azure_rm_webapp/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b851e89e72b71469d5eeefb555948de70ae6372728745fa25761ab952164ae08",
+ "chksum_sha256": "9774c1a314a6b5fef489d9405550a1395b9468bbea779af6ca95ae47af6386a9",
"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",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_batchaccount.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1010400ee7ceae601c41e97f30336b2732cdab7edf899ab95edf706f1470f0da",
+ "name": "tests/integration/targets/azure_rm_postgresqlserver/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_cognitivesearch_info.py",
+ "name": "tests/integration/targets/azure_rm_postgresqlserver/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8e5e926aea80ecc40b2a0c06745ed85287f4f6f83692af2ad78e7ea641c8d463",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_managementgroup_info.py",
+ "name": "tests/integration/targets/azure_rm_postgresqlserver/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "728bb535e8dbf3211e4a79123dfa981434dc51423efb046e2bfa6cb35c5949f6",
+ "chksum_sha256": "212c2162821130244834f49afd3460bb037d426eac902fc88de51afbe6bab522",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_lock_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a176ee61fc34ddb3afb0a07d267ce819f0b85f1e271ae4f52f51004869014d21",
+ "name": "tests/integration/targets/azure_rm_postgresqlserver/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_containerregistrytag.py",
+ "name": "tests/integration/targets/azure_rm_postgresqlserver/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9b6a6b029d0bff63cc6fd9cbbbc92f44337fd23d460747b942a4caf32731ad05",
+ "chksum_sha256": "957431198f2f2412d381532922a380b37d3a2941dce8f6fbcda89284fa7d3ca5",
"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",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_virtualmachinesize_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "24e4730a6256f17cd27877328ed90580bcd2ac93c1b3718b70e18d8c574769a5",
+ "name": "tests/integration/targets/azure_rm_monitordiagnosticsetting/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_vpnsite_info.py",
+ "name": "tests/integration/targets/azure_rm_monitordiagnosticsetting/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "63c87ba7508bb5c7e2f4968c4975b8e85e27260474dcb6f7d558295f9c56a946",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_keyvault_info.py",
+ "name": "tests/integration/targets/azure_rm_monitordiagnosticsetting/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "42dc1992f6870d92fb0c00e196491d148037561a16f1a3980da71a450d8d1150",
+ "chksum_sha256": "cc618d5714ddaae8f1482cf89dcf3327cf82fa378c16f6b5cf092339927261c3",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_virtualwan_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3e7d2fdf7181de1499b68196f176080a9563767764ee9bb27bf3e3411cb87a75",
+ "name": "tests/integration/targets/azure_rm_monitordiagnosticsetting/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_registrationassignment_info.py",
+ "name": "tests/integration/targets/azure_rm_monitordiagnosticsetting/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ebee000acc1f85898adb717c015209d78a231d7a4130d20293c103c1e01dc57f",
+ "chksum_sha256": "4c185b22edc1017409894f57875fe5db2c986c6d741cbd86dc78aa01b36a9fc9",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_sqlelasticpool.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a127cd3108b9eff43c793296f6239ee10df0810222dae4c44b380e45c01e36eb",
+ "name": "tests/integration/targets/azure_rm_subnet",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_routetable_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1e849400c3b71a0bb6652ab1d40e919288b3dccb94314230273850f31259de8b",
+ "name": "tests/integration/targets/azure_rm_subnet/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_diskencryptionset.py",
+ "name": "tests/integration/targets/azure_rm_subnet/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d4f85b7a7c7da95b7fbd3a084a15af87fd037134c527056a14f48ae1e58b9a9f",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_storageshare.py",
+ "name": "tests/integration/targets/azure_rm_subnet/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d70dd044b1bf421773c6438c7c9020906810f7e1e74523e8855133a8fae9360d",
+ "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_mariadbconfiguration.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f54c337f3d115d08dcac88d6e4fe16ef1db3d9dec1833b033928f227d89ea11b",
+ "name": "tests/integration/targets/azure_rm_subnet/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_eventhub.py",
+ "name": "tests/integration/targets/azure_rm_subnet/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aeadcc0ec44f966ae318556be223ecbbe4198c412c9d34d1360d724aa919ce0e",
+ "chksum_sha256": "6da3c97478624fb4d675d4787caedba75a8b159228bc39d6fccdd3db6a333c78",
"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",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_subnet_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "781c564f40087d071942dab53c627fed093764c5a244744874e2226ec174bee8",
+ "name": "tests/integration/targets/azure_rm_subscription/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_functionapp_info.py",
+ "name": "tests/integration/targets/azure_rm_subscription/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1e0f3de0ed340f2e1a5cb2b5b4cb8b7cc9c6c8eafe4483cdb38b58878482b589",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_iothub_info.py",
+ "name": "tests/integration/targets/azure_rm_subscription/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5ceef9d30aeb4826188b1c96a6d955955e99ae90a1e8b9ff437859f82a3cdd5a",
+ "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_batchaccount_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b823cdf2a1c2c41c40d0db12e5bd637598f388db9beb0eb2e79e1c940aed39d6",
+ "name": "tests/integration/targets/azure_rm_subscription/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_aks.py",
+ "name": "tests/integration/targets/azure_rm_subscription/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3da4a613aad9785a4d3b764ef386699d796167b12c9291019fb17a204fbd9db5",
+ "chksum_sha256": "cb18a11b4b6b14912f9fcc0131c232c9d3525d14a8d43ee4b2606cc2d3f7249c",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_networkinterface.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7216e23eac5fe34435ac3f8cb111b6c68cab283ec4dba61a4c9efc805221e8df",
+ "name": "tests/integration/targets/azure_rm_appgateway",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_subnet.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0b0cf9127582749f7d680b30cf94545c7ccf6b2a1d28903387ea3bae45e14ef7",
+ "name": "tests/integration/targets/azure_rm_appgateway/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_cdnprofile.py",
+ "name": "tests/integration/targets/azure_rm_appgateway/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8051fcf46e6ef1061831461ded14aa4fad1a59c7a5dfdfd3d90d6816db8df475",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_azurefirewall_info.py",
+ "name": "tests/integration/targets/azure_rm_appgateway/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6d62301f903c8d8e1075bb7d29412f91b65136344d0fb915eb5017f8936142d9",
+ "chksum_sha256": "21442459796e3c03ab3c6461c8251810f5545ff2320c4c814cce8b8c520e615c",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_roleassignment_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3287b7ad7063115ef66dc443b05f4ceb6bd22d46cd8fcec1350c6e9e64289b3f",
+ "name": "tests/integration/targets/azure_rm_appgateway/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_adserviceprincipal_info.py",
+ "name": "tests/integration/targets/azure_rm_appgateway/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6ec6a6ab5cd644af2cc67b32e41258e058a5e7cad8b9d45a25eb7865edceda0e",
+ "chksum_sha256": "7d8ffa4ec62e8b5bcf85c4c36004a71daf4b8bf455238a1b6a8a1749fd64bd4d",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_webappvnetconnection.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5f823a8fd9802af336c53b103f05d687a20989e92334d7bc122f7ccb62a6a410",
+ "name": "tests/integration/targets/azure_rm_appgateway/files",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_hdinsightcluster_info.py",
+ "name": "tests/integration/targets/azure_rm_appgateway/files/cert3b64.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9531f6f0a60132fb1ab9b2e49ab271ba1a630f75682b44197f61632daacb1a0b",
+ "chksum_sha256": "1375dc6f493fb760c6087c4cdd62c4ea898887070ad17dc84196b3d6ed0545ec",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_securitygroup_info.py",
+ "name": "tests/integration/targets/azure_rm_appgateway/files/cert2.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "961d9d5ad4d46ff1acf101c19ebd88813d5251f89ec7e1f4ea809827cc3b5392",
+ "chksum_sha256": "e4dc34faa2e8e94cd385be73c33a849f452dd57d061a8aec118e6d391e46bbc0",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_servicebus_info.py",
+ "name": "tests/integration/targets/azure_rm_appgateway/files/cert1.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "56677b7274f63fe629975901c0c3f2239a58b3b44d6f42d5e8327e283c49cf22",
+ "chksum_sha256": "7637ce7f36cca366294688f612f6456714088cca19583ae7e9475e572d85f4f5",
"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",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_deployment.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a51562a752c8d9f77ea8afa4ab966ece92c6d868f7eb939a9adcc28c800fbc2f",
+ "name": "tests/integration/targets/azure_rm_privatednszone/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_adgroup_info.py",
+ "name": "tests/integration/targets/azure_rm_privatednszone/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8e06b65183c867879b4f34b3b65c24e1d77d6fa1007b90c7f433e658b418d9cf",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_virtualmachine_info.py",
+ "name": "tests/integration/targets/azure_rm_privatednszone/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "371f0c2e8c15271dcede607bb8cfc52469b506a12b2e3f74adcb7d8beabff4b9",
+ "chksum_sha256": "e131092efb0e9d778baeb38471a15da9b4f8ab9e3425ec4f37aaece309220d47",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_privateendpointdnszonegroup.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d516440379341b68c65581c8d9da78f6a204845502e408c48875851c58229241",
+ "name": "tests/integration/targets/azure_rm_privatednszone/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_virtualmachineextension.py",
+ "name": "tests/integration/targets/azure_rm_privatednszone/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "09bd02e50c12aa9e602e8ac7b4312b2619be27b656114309625c9aa39fbcb97a",
+ "chksum_sha256": "b2de5836a16a64f95f0494dd53d54cd82716c1133e7707c0c2680d9502dfef5c",
"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",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_privatednsrecordset_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ca64fe771c93ee29952634b1acd63d8ae35c0f36b4ef3a33f6ac1ef0994e2e42",
+ "name": "tests/integration/targets/azure_rm_accesstoken_info/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_roledefinition.py",
+ "name": "tests/integration/targets/azure_rm_accesstoken_info/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2916e92b6ed98170b35ff1c4bbd3a970ffa11323b2bbb01e37271110072ed33d",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_proximityplacementgroup.py",
+ "name": "tests/integration/targets/azure_rm_accesstoken_info/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c39137e4926c1749a04adc516a027a08e7cf2ebe2b21e7a95675fd0a546777b9",
+ "chksum_sha256": "d57abe6f8fb0cbfb8ac22431c09126cd48bb4d2836a6d151faf92fb6fbecc6aa",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_virtualhubconnection.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2b3ba5bbf31b9e64c4e0978fa92768ce9115fe39450f5dd8085c775fe4ed2716",
+ "name": "tests/integration/targets/azure_rm_accesstoken_info/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_eventhub_info.py",
+ "name": "tests/integration/targets/azure_rm_accesstoken_info/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "840c5f5441849b9ae7c489f04bb2fd065cc4192ca4a8143c1fc052c2845e002f",
+ "chksum_sha256": "89df9eb85892a54536cf07ef674d75b60c910eee66147eefb074aef8c23108d4",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_sqldatabase.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4ad23bc0505f7a62a03434a0c94c2eaf90ed06c4d5e4ccbf05f169de465fd693",
+ "name": "tests/integration/targets/azure_rm_recoveryservicesvault",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_webappvnetconnection_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cbb81f50bdad8e9d738f6a8ff9566898df41fec03e92e3b03383228de5607fff",
+ "name": "tests/integration/targets/azure_rm_recoveryservicesvault/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_servicebustopic.py",
+ "name": "tests/integration/targets/azure_rm_recoveryservicesvault/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3061e6f04b67b71c3c7d09566a35916f130745ffc7dd1b472385d78587140da3",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_resource.py",
+ "name": "tests/integration/targets/azure_rm_recoveryservicesvault/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "546c902f77832ea142cffe5b07b7babab61081094e713733857f4efaaf71aa63",
+ "chksum_sha256": "923b442d786cff06e0b7a3ea4232f7bfe10835e93fb73b8df6ee997380099420",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_firewallpolicy_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1e1cebf4f29a286751549a9a5ccf06451bfb9648151d54ca813646f1289dc8b9",
+ "name": "tests/integration/targets/azure_rm_recoveryservicesvault/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_containerinstance.py",
+ "name": "tests/integration/targets/azure_rm_recoveryservicesvault/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b3c13189f840de2aa3047eeb145d3f1680c40a999a45b92325f70a92ff950296",
+ "chksum_sha256": "6e841ad32da809ed4a9782a8ce178f2c8399d98a56be2406142e898afffb65c0",
"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",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_postgresqlconfiguration.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c5a5c9f631bc9ef1eb1d64acd039457dc38a52c84e5246589b9f42df904aa37a",
+ "name": "tests/integration/targets/azure_rm_iothub/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_mariadbdatabase_info.py",
+ "name": "tests/integration/targets/azure_rm_iothub/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "abe1fd7778f01c877a7c8d74170c74a26e39de0d5295b3e856adcc39fc7367e8",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_backupazurevm_info.py",
+ "name": "tests/integration/targets/azure_rm_iothub/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4e25e335897973b2afb89187cbd96429e89fe688347be78a73dc4049c3dc3986",
+ "chksum_sha256": "8d4097a5a2543084f3eea11259e299ba87ade8dc8995e5745358931356bee79f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_cdnprofile_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "11acb43afaee020e3b3c252d5c1d3e9669ddcef8f3941635b1bce4d411b9c12e",
+ "name": "tests/integration/targets/azure_rm_iothub/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_backupazurevm.py",
+ "name": "tests/integration/targets/azure_rm_iothub/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b1d8a252ccfac8973cf591771b6d7149c2bbf4f788366e1dc2b16fef8d52cc61",
+ "chksum_sha256": "1e5e67ce46e6ae0d5e38dbc0526e3140c3f1f3d978883736c4c84e0732042dbf",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_resourcegroup.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "20900d4b10ee5f7032fc409be2eaafc00521f8799c56559d8ac88fce00e4b2eb",
+ "name": "tests/integration/targets/azure_rm_aksagentpool",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_datafactory_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "97332f814785d6c0aad03a37f0126454115c0f219379529fefa421bf9ea20b53",
+ "name": "tests/integration/targets/azure_rm_aksagentpool/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_virtualmachine.py",
+ "name": "tests/integration/targets/azure_rm_aksagentpool/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a71e48a19a1f43d47a46951e936b6cf187ea87170d247326449f9a6fbdd1bc79",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_gallery.py",
+ "name": "tests/integration/targets/azure_rm_aksagentpool/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d75d837aeb5b9292babe25fd49f7b24e516c4ae3ac3707afeab09bf801cdc711",
+ "chksum_sha256": "783d6dbd1b9cc4b0543d6e96d15206283018e0c291764a2a4106e860d41cb210",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_devtestlabenvironment_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a33bd3a6e60f1153b611e1f45fc4c99b01b9ff2342e92171e823bd8016b2be0c",
+ "name": "tests/integration/targets/azure_rm_aksagentpool/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_devtestlabvirtualnetwork.py",
+ "name": "tests/integration/targets/azure_rm_aksagentpool/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4c52da65b8749ffc924d5206dc8a4f29406dd208cefd20ca78cd5f30c9184e77",
+ "chksum_sha256": "88959c5262b2f543793b47314b9bce24d267e32f9c3f419f71a242dbbccadf12",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_containerinstance_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ab1aa37508addc2bf616e2c13664f2a1e5e0235af91db2bb84542449d01fc67b",
+ "name": "tests/integration/targets/azure_rm_virtualmachine",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_cosmosdbaccount.py",
+ "name": "tests/integration/targets/azure_rm_virtualmachine/runme.sh",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d6c644934b50c99c8839405f78cae5aea90c0f6b2a9ae4f74a9f761467ea7cd1",
+ "chksum_sha256": "8d9a70f8c75d9a856cd529ae8ccb6e589c0db9494da4bb08cead6963e98d9dd5",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_mariadbfirewallrule_info.py",
+ "name": "tests/integration/targets/azure_rm_virtualmachine/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7a2b125c6e0ed19d1fe70703e24ed9e4257713c492e927785fe35cdf789afcc2",
+ "chksum_sha256": "deefc8fe8e3699aa1e8852f316f52c0037219050b5b5d07919fa24d06ac14ed5",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_devtestlabartifactsource.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1b3f24465ae9f40d6adc4e61d6e1f34d78345b5ee88c5c5958ed401b3146b79d",
+ "name": "tests/integration/targets/azure_rm_virtualmachine/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_keyvaultkey_info.py",
+ "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_no_public_ip.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "23eaf4510c03b121fc24ba8a116b26e35563af5ee9875d7210557caf2e6ce9b2",
+ "chksum_sha256": "a7f201260799a21031f75d3ecbd6cc372007c3a2c5ef7a6c9d35053129b868cd",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_trafficmanagerendpoint.py",
+ "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_minimal_manageddisk.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "48772694d9d17d8d0f6b0e6d44c4359dbb35861116c38fa933b0db93981f7a76",
+ "chksum_sha256": "e10179f3c286b53a8347a1cd7d3672cc80e9184589dc7ea292489279fcc67ede",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_mysqlserver.py",
+ "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_dual_nic.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7f7cb3ce5875e72550cd314cc3df490cbbce0292265c927038897d026b573514",
+ "chksum_sha256": "270c196e70cd74c25954f6e5e2acd136aef9e3892f36051663ff6a96d5f984c8",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_mysqlserver_info.py",
+ "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/setup.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "595b1221845b1ff1d61c133eabb34930f9e9d0b59cd2ee853cddc487b182c57b",
+ "chksum_sha256": "1af862edc4a550cf631bcaa7a082d23451a3e7eacd0a248e4688bcc8dc6ef604",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_cdnendpoint.py",
+ "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_public_ip.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7e105391561b1552efc4ea6e587d5a9dc60c61c6e7847ea036481b5923a10f26",
+ "chksum_sha256": "fc7a86147194125bacfe94a37a05af001ff6d68b6ee5b759d6561ceea51b6b33",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_vpnsitelink_info.py",
+ "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_spot.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c12058e056680201ef2358025ed148b9338a50eebace5b8784cc9acdc525093f",
+ "chksum_sha256": "40cfa7a636a0741e3f17deb1c7b965fbc42074f3fb7a50503dc93b9c2515a2e4",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_multiplemanageddisks.py",
+ "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_minimal.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "95a1386da7e22dc74338466668e3542f37584f4272481fc56b298ee95053d23e",
+ "chksum_sha256": "6ec63fe982d7ce8d65dadd74eb7e5c3678fa88e008ddfeaa43b1d3b77e094583",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_iotdevicemodule.py",
+ "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/setup_des.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b8bc59ae66ec54ff0773dfe858b91a946df973f93e06c12b571b20d16a2142e6",
+ "chksum_sha256": "78451a10252f870ed0dffd1c7ef008265abf0573b7748d6518ced071c6a15df7",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_azurefirewall.py",
+ "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_image_latest.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "da90ad6d785772e86a709e378eca2143faf638bfe60f3d362d578ec54302a0ac",
+ "chksum_sha256": "1d3000da1ae66217ff40113749e77538bee7ebf49e1808ad36488ca33d89761f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_loadbalancer.py",
+ "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_image_specific.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "40bcb2a088750276d350e5170a7993a5e92117948835d6bd30dcf5989db2cf11",
+ "chksum_sha256": "41a71c6515836e0c1c764ae83a0c999403e1fb774a55c5ab7912bdf7f1e2fc89",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_trafficmanager.py",
+ "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_vm_identity.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9aba8d8ba13076c53f797b5c999af3dbc951849450ca138ce6572804eed67a22",
+ "chksum_sha256": "a7b73bb1af0583758961a25336d5faa2eb76fe6e84b3b9698b1bc5e53fbe4f9c",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_registrationassignment.py",
+ "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_encrypted.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "075669114ff7606dbf4aa144d0e7fc51441b7ec8230c36f2951884d40ea502b7",
+ "chksum_sha256": "75d1bcac216eed0c0d847c74ad9f5b79b0f7bfbe7a34f08c3918a9baeaeac106",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_galleryimageversion.py",
+ "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_no_nsg.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dfdc102dca75eaba97460f3f9a47a0ae0eb375714b030959a3781c9e12d675e2",
+ "chksum_sha256": "97017436c84bdbc87de46cee90cfab5edd108685b439253083f141cd5fd52a78",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_devtestlab.py",
+ "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_invalid.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e45418f49d7b45ab7a6c29f17bc6f12cc0607a21179fce4a4f428d1419b1abc1",
+ "chksum_sha256": "055893c82ae8b817fbcd3287b7435ae35ba8d6825ad3cb9545048ac599f9dd56",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_devtestlabcustomimage.py",
+ "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_ephemeral_os.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4398962a6b78efc7b3faabd07af0cf4c31eafe25ec2fc23430a7385fd3c2050a",
+ "chksum_sha256": "a7ecfe0131bd01e748de4f813746530f25a2bcd906e582767d0417827d784937",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_virtualnetworkpeering_info.py",
+ "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_deallocate.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "70b548cc3d9362d2c6a3c0ddedbded5ec61be98334bb43d0c59cad8a95065898",
+ "chksum_sha256": "6eb8b380f4e4e8f2dde24fe08098219bd067bf4b362e647df83b91d3e9133666",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_hostgroup_info.py",
+ "name": "tests/integration/targets/azure_rm_virtualmachine/inventory.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "05d3069e290c810fe454923e22f4aae4932aa8924b12d872039904d87b779a07",
+ "chksum_sha256": "dbfa6b4c9d720fa3c687dfb4c1101701708593184aaf0950ea66cca1f7bf63eb",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_openshiftmanagedcluster_info.py",
+ "name": "tests/integration/targets/azure_rm_virtualmachine/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "061e20df32528b861d5ccdabd7b7e8bd5abdcf0ea2c3c973f561e656223ce0b4",
+ "chksum_sha256": "49c03342521da6b25da0d4df975ee81e10e8b1e7ebd1bdabeba797463bceddbe",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_appgateway.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "04b1dd5413cdc81f642e470db6cdd1ae1ffa77d2b9b42e845b4bbf111235b650",
+ "name": "tests/integration/targets/azure_rm_functionapp",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_virtualmachinescaleset_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5925fb4d64f27c1460dc96e40aaa1eabda5612174aa598a717856b2861540662",
+ "name": "tests/integration/targets/azure_rm_functionapp/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_galleryimage_info.py",
+ "name": "tests/integration/targets/azure_rm_functionapp/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "89a14ee3f36038d0da78d7f7b586361e5acab82f1cd66c1c8278d840e12e2023",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_cdnendpoint_info.py",
+ "name": "tests/integration/targets/azure_rm_functionapp/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6d355f726042e8bb6f9729fbfe486980b2a88813cff5a9f92017a0df75ab2f48",
+ "chksum_sha256": "262ad6ab8a8087f2f21d4f26a2c2d02c347a7edf0fb1af8fdb931ab1c1087bbb",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_route_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ec951f25bdc8b4944f43e054e44fc1887fbdb8cfaf892f5ce57174cf251b442e",
+ "name": "tests/integration/targets/azure_rm_functionapp/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_automationaccount.py",
+ "name": "tests/integration/targets/azure_rm_functionapp/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5dd5fd70d816d33733de4bd4eb9f7569038760a5d13f9f932d7cc94b8077bbf4",
+ "chksum_sha256": "a5d18ded0b871348c349b69152916bc7b243670fdc7ec9a2f8ab479ce589e390",
"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",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_virtualmachinescalesetextension.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a8ef46432cfcc51726f0e9d1ce8003a5e9820432a253d897b420c8423c178f74",
+ "name": "tests/integration/targets/azure_rm_account_info/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_mariadbserver.py",
+ "name": "tests/integration/targets/azure_rm_account_info/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6c671f81b7aff21b252b4844b16135a8fef889b340f66337e394d87e249e4a28",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_firewallpolicy.py",
+ "name": "tests/integration/targets/azure_rm_account_info/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "58980ae98ef0f3eb07237bd685eaf312369a68a484aaebef40037697d83cdec1",
+ "chksum_sha256": "a58bdac3b7068e244f2cf71f0a1a0bf136bc8785d2a8947fecbafdd97313adb7",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_deployment_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2b2f239c18ae7533a69c8a3e380840171bedc20dc4330ffb0b0f14c9cc5bda25",
+ "name": "tests/integration/targets/azure_rm_account_info/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_publicipaddress_info.py",
+ "name": "tests/integration/targets/azure_rm_account_info/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7c60893a6d181b60254e2b8e2dca0aae0c83c1f98bf2e1a6f2ab6206a222112f",
+ "chksum_sha256": "4a18344a391206dc34d9e73134c7e2a2815ae3cdc36cf9b6791ac19e1bc07d6a",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_keyvault.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4689bcd312be6a35cf796ddbb8a5594232054f9a27c638b6e843c2adaa6b55ee",
+ "name": "tests/integration/targets/azure_rm_managementgroup",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_postgresqlserver_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "41eccd6933ff71ce9f0bbfe939057aeea30beaf4c6e475887a7bf21df6a48f67",
+ "name": "tests/integration/targets/azure_rm_managementgroup/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_devtestlabvirtualnetwork_info.py",
+ "name": "tests/integration/targets/azure_rm_managementgroup/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2e8336f66de22809f5693b7c84af84f768d51992685a1daa3ef42f1416eff4ce",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_manageddisk.py",
+ "name": "tests/integration/targets/azure_rm_managementgroup/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7fae72b490febd8d03292056a034e797aa68fb3fd52d9a849bebf3ac7b67d6d2",
+ "chksum_sha256": "e7fc1f0b30d75ba7b3a8f5a9a45a7703c06585edc0f3ce9231a9b2ca7a649864",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_trafficmanagerendpoint_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "19fa3f18fc08a32e65b2dfb6c0b74a7a4827a2afcb36409214de9887899e754e",
+ "name": "tests/integration/targets/azure_rm_managementgroup/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_keyvaultsecret_info.py",
+ "name": "tests/integration/targets/azure_rm_managementgroup/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "82a8e53b9e615d6d82467cb28b4572b1dfcb128f9a4b19ccd98c613465504c48",
+ "chksum_sha256": "52b6ea89da7341d8977b8f1ac1fb530b48eba4831b6c5224b2c136c9bfa91ad7",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_adapplication.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1169c9823bdf7024c552003dfbbdf1067eac2186883bf5cd7904be5d49b99352",
+ "name": "tests/integration/targets/azure_rm_storageaccount",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_devtestlabschedule_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "775594a1c43e4e67957e6f1ef498b2fc8e04fd2d60d8215d1471084f19f9b0f6",
+ "name": "tests/integration/targets/azure_rm_storageaccount/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_applicationsecuritygroup_info.py",
+ "name": "tests/integration/targets/azure_rm_storageaccount/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "805be7606a6145a9b4c942f63a9aa46ffc10366b8e3bf2af0c64b8009d0ac9eb",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_webappslot.py",
+ "name": "tests/integration/targets/azure_rm_storageaccount/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d7c28a3338c7a7ecfa0da50def079ab83286aa1750aa52d13944fbac4fbf2399",
+ "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_vmssnetworkinterface_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "968c1e5781fdca422d62eeea87dd9ac45132e5f03c7e3a91ca6b15d0683eb944",
+ "name": "tests/integration/targets/azure_rm_storageaccount/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_virtualhub.py",
+ "name": "tests/integration/targets/azure_rm_storageaccount/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be9396630b6c0d0cc7dae7688cd87421f4770dbba2ed92b2712761ff722ae8a5",
+ "chksum_sha256": "8d2c09bca13c2239c843af20b93b033b24b5abe133d4d8f9dcf08a9d1f6ad0df",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_cognitivesearch.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8665ce3ff083d18608c7ed9b5fb778d6248e9cfcc096b464535d041457d9af00",
+ "name": "tests/integration/targets/azure_rm_aks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_iotdevice.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6d0f2a6f2f913e9d1f9547a9b601d42f5462c867480915f6ab2cc54674e6f2ec",
+ "name": "tests/integration/targets/azure_rm_aks/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_virtualwan.py",
+ "name": "tests/integration/targets/azure_rm_aks/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4bf8e8dc2b63ad03eed2d1f50fc68f3026e00528651b132570b009e8d93232a5",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_openshiftmanagedcluster.py",
+ "name": "tests/integration/targets/azure_rm_aks/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1af54e81954603964c195560b80f5ae452877b564f5a86443f65b3d0f70a9e24",
+ "chksum_sha256": "783d6dbd1b9cc4b0543d6e96d15206283018e0c291764a2a4106e860d41cb210",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_aksupgrade_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e40923a0ba91ba10ec91ccd2960c60501d5e60c0287ab2578c66d756b865409f",
+ "name": "tests/integration/targets/azure_rm_aks/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_privatelinkservice_info.py",
+ "name": "tests/integration/targets/azure_rm_aks/tasks/minimal-cluster.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "02a72af00f3442e3cb5a19ba01bffc4cb2d47f646abf1a5ae0a125e80a8313ba",
+ "chksum_sha256": "2b2be2027bb762b22ccf731a32baf3fa8b2675369c08b76c1499b3ea10902add",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_adpassword.py",
+ "name": "tests/integration/targets/azure_rm_aks/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0dca5c21f80f4d60aba58dadbfb2581c5488ce7e1c6a9c2b2bfcc03d33863689",
+ "chksum_sha256": "683619ec3541848983b2f513eae4d885c97d3040ac188d252aec7304c3440c0b",
"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",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_natgateway.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "fe420872335d019070072b7541d79579eba9887f0d80e96d195ed1aaa051aea5",
+ "name": "tests/integration/targets/azure_rm_autoscale/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_automationrunbook_info.py",
+ "name": "tests/integration/targets/azure_rm_autoscale/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bf2d4439d7ef7f6b0f0ec04b345e5919fef980d15b6fb3fda111c2df53c18d16",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_devtestlabschedule.py",
+ "name": "tests/integration/targets/azure_rm_autoscale/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "183397504be9789656fe18261844a247d3ff49eb267693819ce1f265c8d6d6d6",
+ "chksum_sha256": "2019d6f29a1dbe1242200ff0a0485722bc57431db8265a741c5e501cd5a920dd",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_securitygroup.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "85ff31a12227b44cdb6c43ca52addfbfed8eeeb192f7d1747d2e66e828731c0c",
+ "name": "tests/integration/targets/azure_rm_autoscale/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_devtestlab_info.py",
+ "name": "tests/integration/targets/azure_rm_autoscale/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "84e99ed4f611c9c6d9551c77b83f0d056b68b7eb188b269860eebad6230ff299",
+ "chksum_sha256": "f7573c9960bd35c764fcdea5dc4542eaa1666c48dcbc33aef0c6b8e46caa23f5",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_bastionhost.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ade78abbea1c467a8bf4787d227a0a96979482b15d05e3dea2ede57f91ff6f7c",
+ "name": "tests/integration/targets/azure_rm_webappvnetconnection",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_registrationdefinition_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1c6615dbd5f7a904854e0dffad5b8ac364059a4fd93e86529a7257577423aaa6",
+ "name": "tests/integration/targets/azure_rm_webappvnetconnection/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_containerregistrytag_info.py",
+ "name": "tests/integration/targets/azure_rm_webappvnetconnection/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "99cde6ea4e4b3f5216131583a7f2ce0dc1777e836d93089733da276895c65b44",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_sqlelasticpool_info.py",
+ "name": "tests/integration/targets/azure_rm_webappvnetconnection/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "05959ef86783c8274fe64c2c1cec19208c37b3d038e6556ffb3a20b51813375c",
+ "chksum_sha256": "262ad6ab8a8087f2f21d4f26a2c2d02c347a7edf0fb1af8fdb931ab1c1087bbb",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_dnsrecordset_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ce13d83217e276a01bc5763cdfbd131090b35c64607738dc052b7ef9d25a3068",
+ "name": "tests/integration/targets/azure_rm_webappvnetconnection/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_backuppolicy.py",
+ "name": "tests/integration/targets/azure_rm_webappvnetconnection/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "37cfea022ca13c6ea40025ae4ec9d00f9e962fba506e1a5708bc00dcfcdc9116",
+ "chksum_sha256": "fe11d34bfc4836a138318153cd0df0bb89f64d2d6d64f9dc7843704f1bd60760",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_webappaccessrestriction_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c72ded459dbd8c58642c77aba5cfab56a86782f4e19958ded25f9754a32c1591",
+ "name": "tests/integration/targets/azure_rm_apimanagementservice",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_aksversion_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1bba9dd6d78f0d87c751b71c9ff5a29ae856cf4a3326813d8b07d9607e3af2db",
+ "name": "tests/integration/targets/azure_rm_apimanagementservice/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_mariadbfirewallrule.py",
+ "name": "tests/integration/targets/azure_rm_apimanagementservice/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_apimanagementservice/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "981eea70440c35499110fa7a97cc7259e7cac1ed2f790ffcb1c247a51bfa6fe3",
+ "chksum_sha256": "528893af1cac01f38ab277aec0138b83c74b2576464d96eb7f3da330784edaff",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_containerregistrywebhook_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "18b7a6844956e67318fe818bdafd0c94d6631657ec33d529e721e6e21b18ed89",
+ "name": "tests/integration/targets/azure_rm_apimanagementservice/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_adgroup.py",
+ "name": "tests/integration/targets/azure_rm_apimanagementservice/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c1117a3b1c468a121dc8a76aea672cb7c839dcb094a2a7fa331f925029699666",
+ "chksum_sha256": "db17a45674ec599ab8fb1890903d3bc49b3ded000197dd55cc82c3017a962565",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_keyvaultsecret.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ace3f948b102b233b72d82b67a5b9c74d9cf650b4c04d397e427ddc15f3d45e3",
+ "name": "tests/integration/targets/azure_rm_availabilityset",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_loganalyticsworkspace_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b2ea8f5bf029879cd6b7367c7c07d1f638453ff39e0c9f64c04db9afa3a57f8b",
+ "name": "tests/integration/targets/azure_rm_availabilityset/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_mariadbserver_info.py",
+ "name": "tests/integration/targets/azure_rm_availabilityset/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3b836969fea8c255c6aeddca297111eef43141755a9b61677661dd581bb2f1a4",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_sqlmanagedinstance.py",
+ "name": "tests/integration/targets/azure_rm_availabilityset/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f022f6e315be9d163c042e9253682d15faea83c067917cba012202532f84f955",
+ "chksum_sha256": "5647901b6198849a4dd58b7fb51aee85b889220f80acde88cea67bffff453d8d",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_managementgroup.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d0c2f5410b682701b672207c321041af369dfc116f79b5531c8942f573882eb8",
+ "name": "tests/integration/targets/azure_rm_availabilityset/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_galleryimageversion_info.py",
+ "name": "tests/integration/targets/azure_rm_availabilityset/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "04410811676cb31554c731e12e6803c9e24e238645d16332971573645d01d396",
+ "chksum_sha256": "0d096b5b5000fd2c1c259adae048dd6ac824c2441db10e6fe352282c8bb77b8a",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_privatednszonelink_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "93d488b4238c4631765dff43c9a6978f3bef9d8ff35294dba4f34772a85a4284",
+ "name": "tests/integration/targets/azure_rm_monitorlogprofile",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_privatednsrecordset.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2b2eceb8e654a1bc257a065f5ef324c69dd6f5b1e9b0126ffd49afa77ff51367",
+ "name": "tests/integration/targets/azure_rm_monitorlogprofile/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_containerregistryreplication.py",
+ "name": "tests/integration/targets/azure_rm_monitorlogprofile/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_monitorlogprofile/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b99d27f1679a3d1fafdec74448bfdf2977930e8cef05f0b6d720971b4f6b8c8d",
+ "chksum_sha256": "cc618d5714ddaae8f1482cf89dcf3327cf82fa378c16f6b5cf092339927261c3",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_privateendpointconnection_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a1c9260c99294e6c9f4579310504bf656d46b2ed16d22188859945cc53563fc0",
+ "name": "tests/integration/targets/azure_rm_monitorlogprofile/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_postgresqlfirewallrule_info.py",
+ "name": "tests/integration/targets/azure_rm_monitorlogprofile/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "53187b006213c221bd5391b2b45734080afcd9e63280f4181f6355b5db7258dc",
+ "chksum_sha256": "71fa19924e9ae73ca408e1fccec2a768f3b2fc113158c5718b7b870c081189f1",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_route.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f290a0e704d3225c8689ac3a7a9523facc263adace73b8193906cb5ee94bffbd",
+ "name": "tests/integration/targets/azure_rm_ddosprotectionplan",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_apimanagement_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2c6da107654adcf08a5e6cf5f49473ea21b5dd86db46d4e2ff10868449108a02",
+ "name": "tests/integration/targets/azure_rm_ddosprotectionplan/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_image_info.py",
+ "name": "tests/integration/targets/azure_rm_ddosprotectionplan/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c6dfd163560a3389f0d12d364e61a5a6e6bb87f50b2fc08965b19285002b600d",
+ "chksum_sha256": "a66dc9e034ad04e167bd52df4f75f2bea4499b25349fc42b3c8de9e2fe806996",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_apimanagementservice.py",
+ "name": "tests/integration/targets/azure_rm_ddosprotectionplan/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ff029a940b4e0f844a8623115c7b6fdcda06b8f9e192e20216f4b42d5093550a",
+ "chksum_sha256": "1be076424fbf717d678e202250426e9b368688f8d3029f0c5dc262b97df819af",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_ipgroup_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "dcb8c2107767aeeae8dad3a39e68b5a1c475d9eb91e0a9c72b3276461fe0f4cd",
+ "name": "tests/integration/targets/azure_rm_ddosprotectionplan/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_servicebus.py",
+ "name": "tests/integration/targets/azure_rm_ddosprotectionplan/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f7379123759b383d1c9b39442ddff6beb7910e1bb6c68ba570a8d59eed2c6e95",
+ "chksum_sha256": "cac8f7d2a8403213ad252934698c6c5eef6edc0ccd0eb6c5794990e6c30f05b0",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_privatelinkservice.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5c56fae085180b9c34424f1cb9fce62adaac67e7107f556702f1a8b9ae00025a",
+ "name": "tests/integration/targets/azure_rm_eventhub",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_sqlserver.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9b0f2f7674cdb4641de9a2b8b50cb74e91e36ce0a07e0c3a13330592574bee71",
+ "name": "tests/integration/targets/azure_rm_eventhub/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_devtestlabcustomimage_info.py",
+ "name": "tests/integration/targets/azure_rm_eventhub/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "39b5c1b0361bdbb8e5782066ba0593c4e4fbcdc52243e1b2ac05e6fa8451920a",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_servicebusqueue.py",
+ "name": "tests/integration/targets/azure_rm_eventhub/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5ba3c26da0e1437c64c3a7d945886563965b08c9fef67f099e97990ef5f50290",
+ "chksum_sha256": "1be076424fbf717d678e202250426e9b368688f8d3029f0c5dc262b97df819af",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_appserviceplan.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4230691a8fb4f96611ff509e19f598304daf58104bd7c4e01b0d3e90311a2a93",
+ "name": "tests/integration/targets/azure_rm_eventhub/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_privateendpoint_info.py",
+ "name": "tests/integration/targets/azure_rm_eventhub/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b34126d4fac558a5077869099cf1327fbecfeab36e6e34b30c4fe809d59b92de",
+ "chksum_sha256": "c4ef2c774f92b1d1c61c070407cb15cec4492593f03dfc095031136a6fc315e4",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_manageddisk_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3b7b7131b77965c67a34ae4c9ddb9def5c3d30a5a76498c51580486063693f71",
+ "name": "tests/integration/targets/azure_rm_virtualnetworkpeering",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_mysqldatabase_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "dad732afe34bb2972eb39f7fea721d46f644e46383da754563295ebe767e4c43",
+ "name": "tests/integration/targets/azure_rm_virtualnetworkpeering/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_resource_info.py",
+ "name": "tests/integration/targets/azure_rm_virtualnetworkpeering/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f893b49f22424b9a2d18d9e27cf088eda9e6afa89606a337ad6771ae728be1b8",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_virtualmachineimage_info.py",
+ "name": "tests/integration/targets/azure_rm_virtualnetworkpeering/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "81e679d55f2d54420d960d51e6f0318cec3b781dd37a062df0b0ff9e1756797e",
+ "chksum_sha256": "ee3b904aa8ab8d0a7e47983927157b420c195fe1d8606de015158339e7824a43",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_autoscale_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7494564289cd93cb8e34bf724deff6fd4fb7ea335233703e1aa2a930860e1d40",
+ "name": "tests/integration/targets/azure_rm_virtualnetworkpeering/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_privatednszonelink.py",
+ "name": "tests/integration/targets/azure_rm_virtualnetworkpeering/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4166cc9a7e671531be63455046c657896ef9ec1e35a84f7c9bf5bc39cd50bf11",
+ "chksum_sha256": "2fb7b589b1c4bd6ed3778e220fe5be14d351534db03c1473e45f03fd181cf0ac",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_containerregistryreplication_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b88adc68c275d1c2608313a8bca60f7805a473e33df0ff3b75b3ea0deb915195",
+ "name": "tests/integration/targets/azure_rm_resource",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_subscription_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "27171c677f1e2b5337edce509b64021d2bb2708d2b476137b3e4ac96df1631af",
+ "name": "tests/integration/targets/azure_rm_resource/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_virtualmachinescalesetinstance.py",
+ "name": "tests/integration/targets/azure_rm_resource/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dcc42ecdde859c43817703218fc0582a4e44750f21b9e8ff33131266c2422916",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_webappaccessrestriction.py",
+ "name": "tests/integration/targets/azure_rm_resource/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a31793686f398ccb3ea7c32aad8341b808e06449bfe5ed468303d74a5406cf2a",
+ "chksum_sha256": "b9685232ad3eab40ee59426a3dd04a8f71719dbfa1d6becb498bb416c8d1ff1c",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_hdinsightcluster.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3c7386b43f9f3278b17baf8b6e69bc3800389b1d84c34e49ca9e3f407d30a1eb",
+ "name": "tests/integration/targets/azure_rm_resource/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_sqlmanagedinstance_info.py",
+ "name": "tests/integration/targets/azure_rm_resource/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5b99b1ab21f96e28642c56ee1519c5a9189bc3c0b7c3beb40c11c471012dbe8d",
+ "chksum_sha256": "e51cbf401d0da7fb038fade492b102a3493b57c0c0e4f9ca927d726db890c4df",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_snapshot.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "11c8c5143b3a5229dbf2615d75f3b121b4ee6f008945607d5b7656de2b0ac861",
+ "name": "tests/integration/targets/azure_rm_sqlmanagedinstance",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_virtualhub_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3a9de2d79f400506887f8b86b4a8bbfffb0e0558eae4ce954d8410beff977af4",
+ "name": "tests/integration/targets/azure_rm_sqlmanagedinstance/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_storageblob.py",
+ "name": "tests/integration/targets/azure_rm_sqlmanagedinstance/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4c7ef09d4dd98bf61d0036a34e1d4e9f0df45c91b3d94c030e17dffa7cd91644",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_sqlserver_info.py",
+ "name": "tests/integration/targets/azure_rm_sqlmanagedinstance/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "31710e981ec3af5a7ab221d4679e06e7d7baad4e1cca7a1e9809536cf07c8899",
+ "chksum_sha256": "d19280a8d5d5c2523536ea5aed2c5a14d1b19cc49f3f21974ca3e9a9921bb7cd",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_virtualnetworkpeering.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f0ee463d7cbde4f3c704542e0ff6e8220b22f436b1014b15a355e8c832845ffd",
+ "name": "tests/integration/targets/azure_rm_sqlmanagedinstance/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_sqlfirewallrule.py",
+ "name": "tests/integration/targets/azure_rm_sqlmanagedinstance/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bf215ff5460bd7561374c1013e93dd13406286bedf9bb34fe5c63a423d65b996",
+ "chksum_sha256": "561193b252168d2eca301ab2c0f673e1a99acc2c807b9f9e8679f1e3b7058d5e",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_virtualnetwork.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d1f54cd77a98a82bbc32959ec20f38af893dc0a41c442c995ed64d42c53ceedc",
+ "name": "tests/integration/targets/azure_rm_servicebus",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_privateendpointconnection.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9ecc4f6823fed8b227500c7714851dcc9f398424d5774bf89f8dafca9afcbef3",
+ "name": "tests/integration/targets/azure_rm_servicebus/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_webapp_info.py",
+ "name": "tests/integration/targets/azure_rm_servicebus/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ea1c14d6f336c8e2a1fd62056450a013f912f7fa3a186921548ff7ff8fb59d29",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_image.py",
+ "name": "tests/integration/targets/azure_rm_servicebus/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4648f6095259498761c468442ee994954306f5a112c89ed427e4381dd1b9447",
+ "chksum_sha256": "923b442d786cff06e0b7a3ea4232f7bfe10835e93fb73b8df6ee997380099420",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_routetable.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "903a9d84fb9a4c7aac19a8c54c32e414e364570fe6d02b56427b8c9a8263e979",
+ "name": "tests/integration/targets/azure_rm_servicebus/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_devtestlabenvironment.py",
+ "name": "tests/integration/targets/azure_rm_servicebus/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3900fff1e5d5b5bf9c80ac7261f044f6b0de361eb7e31f1f48d741bfab9b00a",
+ "chksum_sha256": "a0528bf0af2a590fe46bced0ca843722543d5f10626604a887a7c278e97c38d2",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_recoveryservicesvault_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0f58e9dc7ce66f1695f5038e3e9bba321e93a1e5dfd98d9a37c8d8963587078e",
+ "name": "tests/integration/targets/azure_rm_dnszone",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_aduser_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1d2353c2a497cc22bf6e3cd4fe2f8c52f60f4f556645ada99f014423005a0937",
+ "name": "tests/integration/targets/azure_rm_dnszone/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_account_info.py",
+ "name": "tests/integration/targets/azure_rm_dnszone/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec36327053b86b179229d47231e614d5555b32d1c8bd6368f913743f07fa7f84",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_mysqldatabase.py",
+ "name": "tests/integration/targets/azure_rm_dnszone/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "69e4485770b2c839f24749ec8c5aa3ee693f8afd7ff6bd01c62c0df79275c8d6",
+ "chksum_sha256": "1af368a225674fcae08ea809c4dc605f03bc0334b44a9b17dfab0dfe49d93ac6",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_notificationhub_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "07c91492398c62e54b267d583d55287c485fbe4ca5112305e0c0cb0883500e89",
+ "name": "tests/integration/targets/azure_rm_dnszone/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_adapplication_info.py",
+ "name": "tests/integration/targets/azure_rm_dnszone/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6a61a1e98531303dc5b6a44bd86ee60bb9c45aee7569a9ce92ca34e5965724af",
+ "chksum_sha256": "b03603dc5bddfda055b5dfa51d9c769881822cd95a0953dfe82ef9afd446926a",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_iotdevice_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "87e22ba60e4ab700ee3bfad366690b044125b0f66091c88bc346dcc88e722262",
+ "name": "tests/integration/targets/azure_rm_adgroup",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_mariadbdatabase.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f8dc569f2de810f80a09d827c276f44fd85dc254766b82bed9769846f41008b6",
+ "name": "tests/integration/targets/azure_rm_adgroup/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_containerregistry_info.py",
+ "name": "tests/integration/targets/azure_rm_adgroup/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b176c5d28ade7bb04fb50a82ea0c59987cc004136fcfc37a50cfa240d8c29cc3",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_postgresqlfirewallrule.py",
+ "name": "tests/integration/targets/azure_rm_adgroup/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6a0ef8e59ec7d273bd94d6e8e40f6ffe8e0a313f8e8d912b9ecb71c5db6ea662",
+ "chksum_sha256": "0e90b0bd13c40122b87176faa412a83730dcc85c0060dffa0d7b0450d559ed40",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_recoveryservicesvault.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6e465a4c809eda3d9360a644350366ab9fd430da1720a2aa9df9407dd8e49621",
+ "name": "tests/integration/targets/azure_rm_adgroup/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_storageaccount.py",
+ "name": "tests/integration/targets/azure_rm_adgroup/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ccc3bf0ae991b6d1312489d910c777727be7c266f2c9f0c69f114ac73be0bdae",
+ "chksum_sha256": "716f9e691c4959caef10575abf4bf7b89fbfe795d4fb144fe4f5949fcd74f94f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_postgresqldatabase_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3c896791d9f215a0ab5c7cb5315bcc302392ba07eea4081b4c68cf392c7013c2",
+ "name": "tests/integration/targets/azure_rm_backupazurevm",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_applicationsecuritygroup.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "58f5338441960bf8824f1ed9eec52bd6c5c2ec9d8c6ab02e8a5872afd388ed39",
+ "name": "tests/integration/targets/azure_rm_backupazurevm/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_expressroute_info.py",
+ "name": "tests/integration/targets/azure_rm_backupazurevm/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5e302a549f10b209ec9b8d61051f3ddf478eea0e4d99d8eb9af1db568975994f",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_servicebustopicsubscription.py",
+ "name": "tests/integration/targets/azure_rm_backupazurevm/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7ffbac3a815640add669c05c8c29d78ac433ccd8e9762540746eef25457f6829",
+ "chksum_sha256": "91c612e6c7b96f80e7e1cede3dc0ef7431a2900356b7e85a7521e2679bfcfa49",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_availabilityset.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "685bb7c2dfeaac6f1042b164d014064dcad6b8865cbe764da3ea9ab5f23a9a76",
+ "name": "tests/integration/targets/azure_rm_backupazurevm/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_virtualhubconnection_info.py",
+ "name": "tests/integration/targets/azure_rm_backupazurevm/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "948b85322d1c84b4eee3709f69f2de166232472a675dd26e125c099ce13517cc",
+ "chksum_sha256": "4ac0d2995ac62544c567223a1e45c1b1fc568b840b645d5b42a0b41fd4df1661",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_automationrunbook.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c257d3afae0b00ae9b09d6d5f04373def1e678ea99cd8d5778c8425d64ea0058",
+ "name": "tests/integration/targets/azure_rm_virtualnetworkgateway",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_storageaccount_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "27c35c2191216b55c0af4ed133c20d78f95450cfb3d7bb3605268e7db1119ad0",
+ "name": "tests/integration/targets/azure_rm_virtualnetworkgateway/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_vmbackuppolicy.py",
+ "name": "tests/integration/targets/azure_rm_virtualnetworkgateway/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3f0d9e125fb25e8e1fe6e575c4b4f2a51a6a16c601d52003802d6836c5215ba2",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_postgresqlconfiguration_info.py",
+ "name": "tests/integration/targets/azure_rm_virtualnetworkgateway/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "61b7807ec717db7657e825a2c1bbd815ede63112b9ce0bd4811e1c486ef01fd3",
+ "chksum_sha256": "4f59a6f1fc64a79191d0110c2f203adee747fd1bb69ad631a279efa7d370eaec",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_functionapp.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b36955b4ade5a066cf353dc80387fb9e7419fabf07664db38510b29c6931282b",
+ "name": "tests/integration/targets/azure_rm_virtualnetworkgateway/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_postgresqlserver.py",
+ "name": "tests/integration/targets/azure_rm_virtualnetworkgateway/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "665e6153c4700277d41a5b0b83a65601d71b3088868f8e8f93229b91a3d660b1",
+ "chksum_sha256": "271094dd7a4e013c0da515000e4e6257bb716cf030c89dbe37af7ca74902841d",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_sqldatabase_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d97f650c2b9d89769f4089c17e2d64c1ee066e5295e757119f270be7be10b25a",
+ "name": "tests/integration/targets/azure_rm_privateendpoint",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_apimanagement.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c56dab10921ea4cf7c3244ca5a1f0f24074b3927f0d5f42e0fd82dfd2b305fa9",
+ "name": "tests/integration/targets/azure_rm_privateendpoint/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_webapp.py",
+ "name": "tests/integration/targets/azure_rm_privateendpoint/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5d6121e5cc0c2e61329fcade74dc3092db8e6d47db080d6734b6f20e9384d50f",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_devtestlabartifact_info.py",
+ "name": "tests/integration/targets/azure_rm_privateendpoint/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3e22ef863e1e999fce8e6dd95bda54e1f140e0c55de17fee5ebf40a51d35b53",
+ "chksum_sha256": "11c35de489a3da87eb40a2ce00a80a9992fc89c3b3fdee710301ba9faacd332d",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_registrationdefinition.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9f987c3e5b1b9ad19919ebe6b60ef05e8bb1d14980c25931d505994f07dcb4bb",
+ "name": "tests/integration/targets/azure_rm_privateendpoint/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_publicipaddress.py",
+ "name": "tests/integration/targets/azure_rm_privateendpoint/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e2ddc75d7edca49904c6025a1e1418c0ada1ed45fd56963a8e315cf7b2074362",
+ "chksum_sha256": "f5c8cc29641d123e237b894acc5d13e306e61d6cc553d15561730a42e63e55fc",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_virtualmachinescalesetinstance_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "bb85cde7c504168c0013e50472526bf8170839212efce46c1ddb1a781fe1dc7c",
+ "name": "tests/integration/targets/azure_rm_devtestlab",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_virtualmachinescalesetextension_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0c32b71b14bbb8c0609f20d2c522792ad6f6e5bd3b8477dfadae9bb34ae61cc2",
+ "name": "tests/integration/targets/azure_rm_devtestlab/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_aduser.py",
+ "name": "tests/integration/targets/azure_rm_devtestlab/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "de250268540b1d1b14e772c77d8860a5d4942ddf58557f1858a2043be8958df2",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_aksagentpool.py",
+ "name": "tests/integration/targets/azure_rm_devtestlab/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "35eede66b4539d8ebfabaeba04dc70f75614d3bc94b2d19a721b527269e44404",
+ "chksum_sha256": "435162ac2df7aa373bc2d191a07d79c283d3891a1278b0277f85e6112b96fc03",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_dnsrecordset.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c542f52ae53544606bc2c9e1c75ad25ebd0c8ce2d00485a43024aaa39e803adf",
+ "name": "tests/integration/targets/azure_rm_devtestlab/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_devtestlabpolicy_info.py",
+ "name": "tests/integration/targets/azure_rm_devtestlab/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f22d2afaf43d8b7a581c4f05f060829090d7294d19b6824ca59e86ccae69379d",
+ "chksum_sha256": "17fd6c08f41838809e461f199a62e373c8bf28c5d90199bf09340ae9762dd252",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_aksagentpoolversion_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "69fd5ecafb1b4dee2cbcb17f9b767f3fff6a9d717ca8548dec4f9735f3d213d6",
+ "name": "tests/integration/targets/azure_rm_registrationassignment",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_expressroute.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b7a0f0dd5862dbb3fc72329ed7c6790cc18a79e279a3e3f85896c075dda2ab1c",
+ "name": "tests/integration/targets/azure_rm_registrationassignment/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_resourcegroup_info.py",
+ "name": "tests/integration/targets/azure_rm_registrationassignment/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3336b070c7a607adde16279cdeaefe260b75c683a0ab0028b4ae6f262ebd32d8",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_devtestlabvirtualmachine_info.py",
+ "name": "tests/integration/targets/azure_rm_registrationassignment/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ae5aa0ceace675df82f2a76e4f852a222bc892f4e406d33745d97ce848b53a4a",
+ "chksum_sha256": "262ad6ab8a8087f2f21d4f26a2c2d02c347a7edf0fb1af8fdb931ab1c1087bbb",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_cosmosdbaccount_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "80461bffd0ad681f97b3eaafe9db453a700658748c02114d3128b8f87f7b79f2",
+ "name": "tests/integration/targets/azure_rm_registrationassignment/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_sqlfirewallrule_info.py",
+ "name": "tests/integration/targets/azure_rm_registrationassignment/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "71e6d450073de8c90623f4048d44bd6eabaa39c36031a9beba28171a53b302cd",
+ "chksum_sha256": "93912c71ac63373e058c38b29f7342b6350247484a190476098c6f8c33bdae53",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_availabilityset_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5210c3fbf5fd2f5b702cd82ba5cf7b44604231bebbe9f00a71ee71616a8e2e6b",
+ "name": "tests/integration/targets/azure_rm_bastionhost",
+ "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_bastionhost/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_autoscale.py",
+ "name": "tests/integration/targets/azure_rm_bastionhost/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_bastionhost/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8f48a0242d1d4246afa2a6c856e43023daee49ffbae58db30591733304d4c9c1",
+ "chksum_sha256": "d57abe6f8fb0cbfb8ac22431c09126cd48bb4d2836a6d151faf92fb6fbecc6aa",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_servicebussaspolicy.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "10d85532d9875ac3da016f15add256df6cf2cbb8a88d4a57ad316bce7df7a45c",
+ "name": "tests/integration/targets/azure_rm_bastionhost/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_galleryimage.py",
+ "name": "tests/integration/targets/azure_rm_bastionhost/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dff66513503b09036068848c5cc716f0047d15cafa59d063f833574948739db1",
+ "chksum_sha256": "1f4b63feed40dce0104c38b6ad43cb9e2709b25ae6642031888fcd9e6103d351",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_dnszone.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a9974fc3f305a83840b041b02158be7162a6c87c8fb3a3b909a2ac6255390668",
+ "name": "tests/integration/targets/azure_rm_virtualmachineextension",
+ "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_virtualmachineextension/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_ipgroup.py",
+ "name": "tests/integration/targets/azure_rm_virtualmachineextension/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_virtualmachineextension/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b911199637d90fb213eaf63e586745cfb8ab889af2f199340d0d4df59138362a",
+ "chksum_sha256": "0fdd66037c00d326e8724db280f591414ae437954cdedeeebb4b455784fcb4d3",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_vpnsite.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6d818f5250f12c9dee0a78f01f853640c25a583e022f8358355e78076c5b49b8",
+ "name": "tests/integration/targets/azure_rm_virtualmachineextension/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_privateendpoint.py",
+ "name": "tests/integration/targets/azure_rm_virtualmachineextension/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9cf71bc67a11a058b6eac5f7c06c3a003ecce968f6fe09285f43dbd81f91fdf9",
+ "chksum_sha256": "9e3cb1009bcddcf4db403356c71a3862d40d9978395362480795d87961229f8d",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_virtualnetworkgateway.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "59e1d99084af0027d2c970a9e6ab6088546f4768d151a045b70615cff47b05c3",
+ "name": "tests/integration/targets/azure_rm_virtualmachineextension/files",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_postgresqldatabase.py",
+ "name": "tests/integration/targets/azure_rm_virtualmachineextension/files/test-protected-settings.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e1d1f0a296460cb6a411cc926cff5476be07b16ced01f7b9a95e64802dacf9e2",
+ "chksum_sha256": "436711afe43e0c31f515a016fa56e64c70f1df35502725327b8c703773d4823b",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_iothubconsumergroup.py",
+ "name": "tests/integration/targets/azure_rm_virtualmachineextension/files/test-public-settings.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9d6fc8dba8ecd841d908a4b1226fa0a186c270a9eb3e8a5a054692e56c621876",
+ "chksum_sha256": "1063a36dc41ca530af7839c69ec22f2b92447be4c3b41e90429c970b23d9116b",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_mysqlfirewallrule.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8d012c884bd3e4f7880fee699b3b6c8210a1cc00c98a2166c68c8b7e6a052bc2",
+ "name": "tests/integration/targets/azure_rm_webappaccessrestriction",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_storageshare_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c30615415440ade0b39196ccd619a923cfce2162548c18c7edaec635f46e84e3",
+ "name": "tests/integration/targets/azure_rm_webappaccessrestriction/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_datalakestore_info.py",
+ "name": "tests/integration/targets/azure_rm_webappaccessrestriction/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "97d431f9a54962aa76ee516a8d3f0e51215e832509dc605a6bca1ede20ec9cfb",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_rediscachefirewallrule.py",
+ "name": "tests/integration/targets/azure_rm_webappaccessrestriction/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1dd3dd187f650d1083a42a7576b7f9a9ba1b8b5960804a0dc71e33470b2c2d73",
+ "chksum_sha256": "262ad6ab8a8087f2f21d4f26a2c2d02c347a7edf0fb1af8fdb931ab1c1087bbb",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_containerregistry.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "781782bcf6811e28b975d35abb3892b96dbf168421891a06e352d02ac4c00569",
+ "name": "tests/integration/targets/azure_rm_webappaccessrestriction/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_mysqlfirewallrule_info.py",
+ "name": "tests/integration/targets/azure_rm_webappaccessrestriction/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2c98b91e48ddf042f3fd0847c42b7d880fc00ed807437aa70d35ae1107ba1407",
+ "chksum_sha256": "23178ef47e9dbb43a51984becf44d72972a399952958fd2a76d71d6338864252",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_trafficmanagerprofile.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4df5198ca3361e221f283b8d1cc1d26dbb3ea265422c76ebb8d6357ab6b4d4b6",
+ "name": "tests/integration/targets/setup_azure",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_apimanagementservice_info.py",
+ "name": "tests/integration/targets/setup_azure/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5447d18ab74149d3c2b05b5cc516392d367b11e71d059d29207f9a749a334f89",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_aks_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "39e0afd38650dd8c802f4f405aa4f3469ddb0a741210b2c56ffe663fef2ce62c",
+ "name": "tests/integration/targets/azure_rm_mysqlserver",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_aksagentpool_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "92c6e3a0f537164ae87f3cf64dd071238a5c8349d7ca84a16826720fc5b82e44",
+ "name": "tests/integration/targets/azure_rm_mysqlserver/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_notificationhub.py",
+ "name": "tests/integration/targets/azure_rm_mysqlserver/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "025163a4ad192ec7b4ec14e8faf49b01e29a8a8f38cd8231aaddec9726f460bb",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_ddosprotectionplan.py",
+ "name": "tests/integration/targets/azure_rm_mysqlserver/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b5eb8ad5fe5b146e7b79f083f2f9747b1bc64432bc55660ac682e97e8235f023",
+ "chksum_sha256": "2c74420c4bc9cc5d8af14406a1d97ea762c6b8afa4de8728a4a833b2e742cf41",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_lock.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "858b4a4357dd80fbefb9c62265d91f31019794c9077526f6703c95b5d7c077a3",
+ "name": "tests/integration/targets/azure_rm_mysqlserver/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_networkinterface_info.py",
+ "name": "tests/integration/targets/azure_rm_mysqlserver/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "22a876dccd098bc68511e639f50b08e8a50ffd1dfa24704907beb9f0a96c3029",
+ "chksum_sha256": "743277ee9a1eda331e62acae9a94ba4820d4bef31de88a77008d62fdda27874c",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_adserviceprincipal.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e141818fea5c223278d4709af5c6ae47cf4841aa0e7e823d84be8949b085d1c3",
+ "name": "tests/integration/targets/azure_rm_adserviceprincipal",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_appserviceplan_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2feccbb74790330b291a4ab0f8bcf3d4ba44f5bd2c18490aff02c92f3d043e09",
+ "name": "tests/integration/targets/azure_rm_adserviceprincipal/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_appgateway_info.py",
+ "name": "tests/integration/targets/azure_rm_adserviceprincipal/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fbe1b90752ce94a33ab1c3e6771f90e4fe87d676e99819e15da631fe5fe2cea5",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_bastionhost_info.py",
+ "name": "tests/integration/targets/azure_rm_adserviceprincipal/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dcdf18934767abd5f6912ce0bb9cbbff6954c79fab3998fdf9ea3c75f5f9d604",
+ "chksum_sha256": "528893af1cac01f38ab277aec0138b83c74b2576464d96eb7f3da330784edaff",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_virtualmachinescaleset.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "425563f892c11a2e14fe22276c308af85268b2ef1a3c2b94e779a9e18dfe7786",
+ "name": "tests/integration/targets/azure_rm_adserviceprincipal/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_loganalyticsworkspace.py",
+ "name": "tests/integration/targets/azure_rm_adserviceprincipal/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5f5d8fa3f00c30d80ce2427ccb7c9d8a00e78c255ecfc67fb1de5f37256c3418",
+ "chksum_sha256": "bb43a07ea959812c8beca68d9e127bd236fbe5b7a32b984b8e715c7d97126860",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_monitorlogprofile.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0951e10121e28230e99e7a3143ce444c9bc4cbf8b7858033c6dd5d071e1ac579",
+ "name": "tests/integration/targets/azure_rm_containerregistry",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_privatednszone.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c4def272c347cc85f0e108b4392b69eabd6e9caf432cbb84b2acc902bd8a3f34",
+ "name": "tests/integration/targets/azure_rm_containerregistry/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/azure_rm_diskencryptionset_info.py",
+ "name": "tests/integration/targets/azure_rm_containerregistry/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "586109c40b10714b5280368db2802fca8d4fc87f797e2b0d5084bb5e7a4df3df",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_devtestlabpolicy.py",
+ "name": "tests/integration/targets/azure_rm_containerregistry/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0146075d793b46427030cb705c7db55a93b6402afe9401b04dfe56a1434dee26",
+ "chksum_sha256": "ec1ff0ecb096def7880d4a1aab74cae1ee3e46dbdba9df7f476b7311ee64f2ab",
"format": 1
},
{
- "name": "plugins/modules/azure_rm_monitordiagnosticsetting_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3fa25b176b8c073c9435901c2c8455577e64a998c71b5c6a472ae1044f48bed9",
+ "name": "tests/integration/targets/azure_rm_containerregistry/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "azure-pipelines.yml",
+ "name": "tests/integration/targets/azure_rm_containerregistry/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1f55cf75a25502f8322df2fc8640e52f85fed4459b8c26fee3c75295f9c45552",
+ "chksum_sha256": "7eab7dde3b4ad416e882a673e1b671770c760c1d2ff97f9c21606a24bb3a7540",
"format": 1
},
{
- "name": "tests",
+ "name": "tests/integration/targets/azure_rm_keyvault",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/utils",
+ "name": "tests/integration/targets/azure_rm_keyvault/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_keyvault/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_keyvault/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8d43591bdea6cbc13771abd458687415cadeb81242b5c706356e4554fb445e32",
+ "chksum_sha256": "726101a2dd7238a8ff7f94fec489e5fcfd8bb0db10ecd074fa0686b2eb9d6d24",
"format": 1
},
{
- "name": "tests/utils/shippable",
+ "name": "tests/integration/targets/azure_rm_keyvault/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/utils/shippable/timing.py",
+ "name": "tests/integration/targets/azure_rm_keyvault/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e4906097dcc02406930229bf0a026f667327fbe11ea6b9763bc76b4c3e98be29",
+ "chksum_sha256": "de8f88e9575ad797145737f6116de12c7443c09d4b9d6488a0d8a77747d564cf",
"format": 1
},
{
- "name": "tests/utils/shippable/timing.sh",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f3f3cc03a997cdba719b0542fe668fc612451841cbe840ab36865f30aa54a1bd",
+ "name": "tests/integration/targets/azure_rm_virtualnetwork",
+ "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_virtualnetwork/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/utils/shippable/sanity.sh",
+ "name": "tests/integration/targets/azure_rm_virtualnetwork/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_virtualnetwork/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_virtualnetwork/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/utils/shippable/azure.sh",
+ "name": "tests/integration/targets/azure_rm_virtualnetwork/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "99db6946e47cf9e49ab2fccbe0aca8ffc9aaa0918fdc9e3ef543601c55a98713",
+ "chksum_sha256": "e46b1abb1ab82874622d1821b564cee555be16ced454a9723f3cff45dcb5948c",
"format": 1
},
{
- "name": "tests/config.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "410698cc625c851ec21f2ef8ea020cf7a353590d10a995a3c57eb52d4d8065fb",
+ "name": "tests/integration/targets/azure_rm_sqlserver",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/lint",
+ "name": "tests/integration/targets/azure_rm_sqlserver/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/lint/ignore-lint.txt",
+ "name": "tests/integration/targets/azure_rm_sqlserver/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_sqlserver/aliases",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b497f92848d198221058a5f5aa42e37dc513f9d2a64f54b2ddc9029b80ab7219",
"format": 1
},
{
- "name": "tests/integration/targets",
+ "name": "tests/integration/targets/azure_rm_sqlserver/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_sqlserver",
+ "name": "tests/integration/targets/azure_rm_sqlserver/tasks/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4b9b3011d1cd399cf58fc8749d467300f6a19f2105a9455c6cc385c2468c1b02",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/azure_rm_roledefinition",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_sqlserver/meta",
+ "name": "tests/integration/targets/azure_rm_roledefinition/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_roledefinition/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_roledefinition/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b497f92848d198221058a5f5aa42e37dc513f9d2a64f54b2ddc9029b80ab7219",
+ "chksum_sha256": "cc618d5714ddaae8f1482cf89dcf3327cf82fa378c16f6b5cf092339927261c3",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_sqlserver/tasks",
+ "name": "tests/integration/targets/azure_rm_roledefinition/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_roledefinition/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4b9b3011d1cd399cf58fc8749d467300f6a19f2105a9455c6cc385c2468c1b02",
+ "chksum_sha256": "821801ed627b59f6418e9073527531be7f66a7e6069cfd50df025e197af04485",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_image",
+ "name": "tests/integration/targets/azure_rm_securitygroup",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_image/meta",
+ "name": "tests/integration/targets/azure_rm_securitygroup/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_securitygroup/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_securitygroup/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fca45b39c1e6a21b8fb8e1b6c8f5954d8accf0bc6fa436361d75b014b36a8fd6",
+ "chksum_sha256": "a390a5b729f05cbb0f6d91d7d663389c81a571a34bd2e931dc56fcdaee025754",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_image/tasks",
+ "name": "tests/integration/targets/azure_rm_securitygroup/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_securitygroup/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f15012224b91b0dcb340a2dfcd3d360a36bf2ed291b88a4206914ac5db295466",
+ "chksum_sha256": "09c95d217158fb888e0794bbfa0c39a501ace1c0686f0ee4c320bb0687e71bee",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_managementgroup",
+ "name": "tests/integration/targets/azure_rm_backuppolicy",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_managementgroup/meta",
+ "name": "tests/integration/targets/azure_rm_backuppolicy/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_backuppolicy/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_backuppolicy/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e7fc1f0b30d75ba7b3a8f5a9a45a7703c06585edc0f3ce9231a9b2ca7a649864",
+ "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_managementgroup/tasks",
+ "name": "tests/integration/targets/azure_rm_backuppolicy/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_backuppolicy/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "52b6ea89da7341d8977b8f1ac1fb530b48eba4831b6c5224b2c136c9bfa91ad7",
+ "chksum_sha256": "26b1ed48d843898e1dc63a09a119c74ee83613ed2f0066e2971f3056eda0ee88",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_privatednszonelink",
+ "name": "tests/integration/targets/azure_rm_sshpublickey",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_privatednszonelink/meta",
+ "name": "tests/integration/targets/azure_rm_sshpublickey/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_sshpublickey/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_sshpublickey/aliases",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_privatednszonelink/tasks",
+ "name": "tests/integration/targets/azure_rm_sshpublickey/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_sshpublickey/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fe73403f7245a8d8d762b068cc62624999c45eea47a08d7c370685370d73a216",
+ "chksum_sha256": "56333300b98e7c24a4c8361ae59287062db7667a8d70fa9d9982fae2f6bb145c",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_deployment",
+ "name": "tests/integration/targets/azure_rm_privateendpointdnszonegroup",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_deployment/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_deployment/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_deployment/aliases",
+ "name": "tests/integration/targets/azure_rm_privateendpointdnszonegroup/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "11d8df93f7c7fb0bd35df23550ce55cea64300cbd7b3a1282927d49c53f53951",
+ "chksum_sha256": "11c35de489a3da87eb40a2ce00a80a9992fc89c3b3fdee710301ba9faacd332d",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_deployment/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_deployment/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_privateendpointdnszonegroup/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7d55d04096bc98a7e4b9423ce7a67bd90ff057d8f2597489e018095d8c7747b0",
+ "chksum_sha256": "5118cdd6e0f6afa96aec75b0208d11b45f3c8c533c77df13ab117b5292331094",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_hostgroup",
+ "name": "tests/integration/targets/azure_rm_openshiftmanagedcluster",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_hostgroup/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_hostgroup/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_hostgroup/aliases",
+ "name": "tests/integration/targets/azure_rm_openshiftmanagedcluster/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0",
+ "chksum_sha256": "20ed61d096d02ba8d900ce019b1762e22889c502a78e1d8716fe4a78ed8c5315",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_hostgroup/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_hostgroup/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_openshiftmanagedcluster/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a11e09783bbddbc59c9ddb098a44d5e17aaac05fec0334ef225dd2d301651e17",
+ "chksum_sha256": "efdfeffba2b8c08435fb50245a8c29ee7ac7273a20a631abf82729ae5741e6ed",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_adapplication",
+ "name": "tests/integration/targets/azure_rm_appserviceplan",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_adapplication/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_adapplication/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_adapplication/aliases",
+ "name": "tests/integration/targets/azure_rm_appserviceplan/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0e90b0bd13c40122b87176faa412a83730dcc85c0060dffa0d7b0450d559ed40",
+ "chksum_sha256": "3d8b505b037b869206fe23e768d9d42e48dc8db7c83ac3023ec1be689261f907",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_adapplication/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_adapplication/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_appserviceplan/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b35d1ada403add1e0a23a265f11a6395959c863e48579a060b40ed7f4e2b8b66",
+ "chksum_sha256": "f3fd1981d472300a8b2044ffbd73e928a089c2d81b3c09d7d5dff19c5d6cd544",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_monitorlogprofile",
+ "name": "tests/integration/targets/azure_rm_apimanagement",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_monitorlogprofile/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_monitorlogprofile/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_monitorlogprofile/aliases",
+ "name": "tests/integration/targets/azure_rm_apimanagement/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cc618d5714ddaae8f1482cf89dcf3327cf82fa378c16f6b5cf092339927261c3",
+ "chksum_sha256": "592e63285615e1fe4768ff5027ae6a96e4dea5c875e1127e14c393cfacbc44fb",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_monitorlogprofile/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_monitorlogprofile/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_apimanagement/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "71fa19924e9ae73ca408e1fccec2a768f3b2fc113158c5718b7b870c081189f1",
+ "chksum_sha256": "169f954c7d4a5a375a80f3d3ddd3d224713bc9dd61d2d732247c752d1bc4297f",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualmachineextension",
+ "name": "tests/integration/targets/azure_rm_adpassword",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualmachineextension/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_virtualmachineextension/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_virtualmachineextension/aliases",
+ "name": "tests/integration/targets/azure_rm_adpassword/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0fdd66037c00d326e8724db280f591414ae437954cdedeeebb4b455784fcb4d3",
+ "chksum_sha256": "0e90b0bd13c40122b87176faa412a83730dcc85c0060dffa0d7b0450d559ed40",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualmachineextension/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_virtualmachineextension/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_adpassword/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9e3cb1009bcddcf4db403356c71a3862d40d9978395362480795d87961229f8d",
+ "chksum_sha256": "b611592114d3a2e8e6da4246fb2408dd7e24ebf1950e63916af2fc2c7d1b8ffb",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualmachineextension/files",
+ "name": "tests/integration/targets/azure_rm_postgresqlflexibleserver",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualmachineextension/files/test-public-settings.json",
+ "name": "tests/integration/targets/azure_rm_postgresqlflexibleserver/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/azure_rm_postgresqlflexibleserver/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1063a36dc41ca530af7839c69ec22f2b92447be4c3b41e90429c970b23d9116b",
+ "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualmachineextension/files/test-protected-settings.json",
+ "name": "tests/integration/targets/azure_rm_postgresqlflexibleserver/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "436711afe43e0c31f515a016fa56e64c70f1df35502725327b8c703773d4823b",
+ "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_automationrunbook",
+ "name": "tests/integration/targets/azure_rm_postgresqlflexibleserver/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_automationrunbook/meta",
+ "name": "tests/integration/targets/azure_rm_postgresqlflexibleserver/tasks/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b6fa3f158220b7cd8d38e7a773ee15e4f9781e627df4e3a209142f6c430414f1",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/azure_rm_virtualmachineimage_info",
"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_virtualmachineimage_info/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "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_automationrunbook/aliases",
+ "name": "tests/integration/targets/azure_rm_virtualmachineimage_info/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "522c2e1148926193596b31fa7cf086b9f57e17c7028abc638a2b6f5bb9269850",
+ "chksum_sha256": "8eb6da86566844e8278692f99177c27f5e17dfc808484e9168d842ce4ea822b2",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_automationrunbook/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_automationrunbook/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_virtualmachineimage_info/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a1368da2abfb774ea5e3fd1a9238e9fbadbbc6fb1a93c00685bdc1d966e401b4",
+ "chksum_sha256": "c1027dcaf3ce2f749a07c7b78ee56ff713901f0fa792e08ebfc2c31671426a1c",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_iothub",
+ "name": "tests/integration/targets/azure_rm_containerregistrytag",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_iothub/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_iothub/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_iothub/aliases",
+ "name": "tests/integration/targets/azure_rm_containerregistrytag/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8d4097a5a2543084f3eea11259e299ba87ade8dc8995e5745358931356bee79f",
+ "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_iothub/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_iothub/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_containerregistrytag/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1e5e67ce46e6ae0d5e38dbc0526e3140c3f1f3d978883736c4c84e0732042dbf",
+ "chksum_sha256": "c3f1c91c39a8986e9aaaaf4e0f2bd84796f20ede51d7868e74a37a7839d1759d",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_keyvaultkey",
+ "name": "tests/integration/targets/azure_rm_mariadbserver",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_keyvaultkey/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_keyvaultkey/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_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_mariadbserver/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9a2de112faff356ffd7328876a499692420544b0558695813205740517ddda32",
+ "chksum_sha256": "0f1123b3696957f55774d4316a4461182998975a0db1f960ef289b20b5e926c7",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_keyvaultkey/lookup_plugins",
+ "name": "tests/integration/targets/azure_rm_mariadbserver/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_mariadbserver/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ecf5403290d75ebf93dd07c1a0d1ec251482cde7952d5fc4c1f51ecde936e804",
+ "chksum_sha256": "b829d34d571be3c848284902c00755a940e2a629115fbbd3a78af1ce018a0ede",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_dnszone",
+ "name": "tests/integration/targets/azure_rm_hdinsightcluster",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_dnszone/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_dnszone/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_dnszone/aliases",
+ "name": "tests/integration/targets/azure_rm_hdinsightcluster/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1af368a225674fcae08ea809c4dc605f03bc0334b44a9b17dfab0dfe49d93ac6",
+ "chksum_sha256": "dffdf5ca6061cf1a43744d6b7e0bb18a4020eed3f693702082b2314f982c65a6",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_dnszone/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_dnszone/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_hdinsightcluster/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b03603dc5bddfda055b5dfa51d9c769881822cd95a0953dfe82ef9afd446926a",
+ "chksum_sha256": "2a0464f133b840983fad3fa552279ac8aca4a07023877e84bd273e8bde440f65",
"format": 1
},
{
@@ -2892,4385 +2892,4525 @@
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_roledefinition",
+ "name": "tests/integration/targets/azure_rm_vmbackuppolicy",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_roledefinition/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_roledefinition/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_roledefinition/aliases",
+ "name": "tests/integration/targets/azure_rm_vmbackuppolicy/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cc618d5714ddaae8f1482cf89dcf3327cf82fa378c16f6b5cf092339927261c3",
+ "chksum_sha256": "923b442d786cff06e0b7a3ea4232f7bfe10835e93fb73b8df6ee997380099420",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_roledefinition/tasks",
+ "name": "tests/integration/targets/azure_rm_vmbackuppolicy/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_vmbackuppolicy/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "821801ed627b59f6418e9073527531be7f66a7e6069cfd50df025e197af04485",
+ "chksum_sha256": "e990393d47f344ab98b507415273d6ec89117b52b4feba04783ab07d792e7243",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualhubconnection",
+ "name": "tests/integration/targets/azure_rm_rediscache",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualhubconnection/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_virtualhubconnection/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_virtualhubconnection/aliases",
+ "name": "tests/integration/targets/azure_rm_rediscache/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0",
+ "chksum_sha256": "5ba0bf8a7bf29813d54b53fd7c3e65698ee5f802eb2ccf76c1707680acc07f17",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualhubconnection/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_virtualhubconnection/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_rediscache/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2d37e8ad199f86a0ff21d8af2a5eb5555b9cc8f8f2ecd7b6597b0c9645696050",
+ "chksum_sha256": "60978e58b15da724fb1f16447071e7b33add290150dfbdd4173900c4edda9a91",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_azurefirewall",
+ "name": "tests/integration/targets/azure_rm_cognitivesearch",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_azurefirewall/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_azurefirewall/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_azurefirewall/aliases",
+ "name": "tests/integration/targets/azure_rm_cognitivesearch/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c00350cca0b02532fa9ae31b5fdf0d5b963615b521197b71ac4cc024aac9d037",
+ "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_azurefirewall/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_azurefirewall/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_cognitivesearch/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "99e09441ca9bb38a0844a3421ebdd6d6e496690d6aa853f111ec79d73108bef1",
+ "chksum_sha256": "e3712847b582b6a3a3f461055963ce51034e160b1e174d06b8b8f6eeecd4bc19",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_webapp",
+ "name": "tests/integration/targets/azure_rm_virtualmachinesize_info",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_webapp/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_webapp/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_webapp/aliases",
+ "name": "tests/integration/targets/azure_rm_virtualmachinesize_info/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b6fa7694979e088e4b068016381f37a603045a395e3b8c660032f4008257d5",
+ "chksum_sha256": "262ad6ab8a8087f2f21d4f26a2c2d02c347a7edf0fb1af8fdb931ab1c1087bbb",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_webapp/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_webapp/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_virtualmachinesize_info/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9c075ffff039ce42e02bf19ae7081bbfaa590fe56d36c10fe5552ade5e8d9964",
+ "chksum_sha256": "6684f96227d75c363a588e1be85cc7ce53025d7e13844638d100781003901db6",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_aduser",
+ "name": "tests/integration/targets/azure_rm_cosmosdbaccount",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_aduser/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_aduser/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_aduser/aliases",
+ "name": "tests/integration/targets/azure_rm_cosmosdbaccount/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1658975f0508387cde4cda499d7eb9524e31bc2f02cc49d6483d7e210d991234",
+ "chksum_sha256": "d9b370414fbcd599ba1e1fa7adb52887e0df75d2ffce2a609bd5af743b02f600",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_aduser/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_aduser/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_cosmosdbaccount/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5d5d5fecd3bd106cc7e4ea4412f28e287297cbd7f7c5699f4ed5e27c60d25610",
+ "chksum_sha256": "e44d0c16980fee5a6cca7dc10c26e4bb487b761eb6aa87c5cee17e527c37453d",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualnetworkpeering",
+ "name": "tests/integration/targets/azure_rm_publicipaddress",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualnetworkpeering/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_virtualnetworkpeering/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_virtualnetworkpeering/aliases",
+ "name": "tests/integration/targets/azure_rm_publicipaddress/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ee3b904aa8ab8d0a7e47983927157b420c195fe1d8606de015158339e7824a43",
+ "chksum_sha256": "ed3159c0b56e6e42548ed58456e5304d48aea0b4e3a0999591f863ae79b225ba",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualnetworkpeering/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_virtualnetworkpeering/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_publicipaddress/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2fb7b589b1c4bd6ed3778e220fe5be14d351534db03c1473e45f03fd181cf0ac",
+ "chksum_sha256": "0240ae96de6dabce7cd47a7793fb7a263717ea1b2e28423f47ba0c75333ed8cd",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_cosmosdbaccount",
+ "name": "tests/integration/targets/azure_rm_privatelinkservice",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_cosmosdbaccount/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_cosmosdbaccount/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_cosmosdbaccount/aliases",
+ "name": "tests/integration/targets/azure_rm_privatelinkservice/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d9b370414fbcd599ba1e1fa7adb52887e0df75d2ffce2a609bd5af743b02f600",
+ "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_cosmosdbaccount/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_cosmosdbaccount/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_privatelinkservice/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e44d0c16980fee5a6cca7dc10c26e4bb487b761eb6aa87c5cee17e527c37453d",
+ "chksum_sha256": "26d7dc158898d9dbc017b66108ef335ff0b4a5ba01d2566cecbec6ad767763be",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_loadbalancer",
+ "name": "tests/integration/targets/azure_rm_storageshare",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_loadbalancer/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_loadbalancer/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_loadbalancer/aliases",
+ "name": "tests/integration/targets/azure_rm_storageshare/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "923b442d786cff06e0b7a3ea4232f7bfe10835e93fb73b8df6ee997380099420",
+ "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_loadbalancer/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_loadbalancer/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_storageshare/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6b6dc390a0291155225b4305560c255bf3a36be60542213e2ad2fcc6fb9daf94",
+ "chksum_sha256": "8428a40d80a569d0c5ac929641e4befc59b86cf7c7cc4da72add3b5eb4570202",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_multiplemanageddisks",
+ "name": "tests/integration/targets/azure_rm_loadbalancer",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_multiplemanageddisks/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_multiplemanageddisks/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_multiplemanageddisks/aliases",
+ "name": "tests/integration/targets/azure_rm_loadbalancer/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ea124e6a615561c87b4dd84d829b1eb1d2bd1658d1caf6211019eeda3ffc8136",
+ "chksum_sha256": "923b442d786cff06e0b7a3ea4232f7bfe10835e93fb73b8df6ee997380099420",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_multiplemanageddisks/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_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_loadbalancer/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c7047ff5651f3faf6ac16b87e5434fd16dae5a620b45ed55723a208b27b9d4bc",
+ "chksum_sha256": "6b6dc390a0291155225b4305560c255bf3a36be60542213e2ad2fcc6fb9daf94",
"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_virtualhubconnection",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_multiplemanageddisks/defaults",
+ "name": "tests/integration/targets/azure_rm_virtualhubconnection/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_virtualhubconnection/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_virtualhubconnection/aliases",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/azure_rm_virtualhubconnection/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_virtualhubconnection/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d52e27205862487e08375c08ac7c8aa27c059db63c3fb83ebb8dd8eb0e7e11f6",
+ "chksum_sha256": "2d37e8ad199f86a0ff21d8af2a5eb5555b9cc8f8f2ecd7b6597b0c9645696050",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualwan",
+ "name": "tests/integration/targets/azure_rm_privatednszonelink",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualwan/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_virtualwan/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_virtualwan/aliases",
+ "name": "tests/integration/targets/azure_rm_privatednszonelink/aliases",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualwan/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_virtualwan/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_privatednszonelink/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9ab3ddca93908d5c847cccd627d21e6dd17c1d4c24cfe0f06331431717be8bfd",
+ "chksum_sha256": "fe73403f7245a8d8d762b068cc62624999c45eea47a08d7c370685370d73a216",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_openshiftmanagedcluster",
+ "name": "tests/integration/targets/azure_rm_virtualmachinescaleset",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_openshiftmanagedcluster/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_openshiftmanagedcluster/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_openshiftmanagedcluster/aliases",
+ "name": "tests/integration/targets/azure_rm_virtualmachinescaleset/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "20ed61d096d02ba8d900ce019b1762e22889c502a78e1d8716fe4a78ed8c5315",
+ "chksum_sha256": "5510a946bf7e1d1ad196eaa73474176b122ae491702a99f9160ad1d554fc08bf",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_openshiftmanagedcluster/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_openshiftmanagedcluster/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_virtualmachinescaleset/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3265ddca3e6f3be968be4b2d516c453c1c305f010ef7f1ab4deb0d9d70bb03eb",
+ "chksum_sha256": "2b560766f54992fab349101fb4528f9bf12022337f573ad7f8bc3a9b80e9dff7",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_trafficmanagerprofile",
+ "name": "tests/integration/targets/azure_rm_natgateway",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_trafficmanagerprofile/meta",
+ "name": "tests/integration/targets/azure_rm_natgateway/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_natgateway/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_natgateway/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b34b028873420b7fdba3b5e4f0b3a1283d3879fcf1ee2d91dbe8a732651ca04a",
+ "chksum_sha256": "21442459796e3c03ab3c6461c8251810f5545ff2320c4c814cce8b8c520e615c",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_trafficmanagerprofile/tasks",
+ "name": "tests/integration/targets/azure_rm_natgateway/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_natgateway/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d48b39bfcd3c3f106af3c9eedcc4005c40eb6642ce232ae4f834c93875ee74e9",
+ "chksum_sha256": "b0c6592fbe22d552060e636b988771db2fe2e14e50462d4ab5589a8f3f4f8e9f",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_natgateway",
+ "name": "tests/integration/targets/azure_rm_deployment",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_natgateway/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_natgateway/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_natgateway/aliases",
+ "name": "tests/integration/targets/azure_rm_deployment/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "21442459796e3c03ab3c6461c8251810f5545ff2320c4c814cce8b8c520e615c",
+ "chksum_sha256": "11d8df93f7c7fb0bd35df23550ce55cea64300cbd7b3a1282927d49c53f53951",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_natgateway/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_natgateway/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_deployment/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b0c6592fbe22d552060e636b988771db2fe2e14e50462d4ab5589a8f3f4f8e9f",
+ "chksum_sha256": "7d55d04096bc98a7e4b9423ce7a67bd90ff057d8f2597489e018095d8c7747b0",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_appgateway",
+ "name": "tests/integration/targets/azure_rm_containerinstance",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_appgateway/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_appgateway/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_appgateway/aliases",
+ "name": "tests/integration/targets/azure_rm_containerinstance/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "21442459796e3c03ab3c6461c8251810f5545ff2320c4c814cce8b8c520e615c",
+ "chksum_sha256": "059ec72ab54682d34b109880aa48f5b5b702d120042153371442c7293c011f31",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_appgateway/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_appgateway/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_containerinstance/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7d8ffa4ec62e8b5bcf85c4c36004a71daf4b8bf455238a1b6a8a1749fd64bd4d",
+ "chksum_sha256": "d5d577eb39a4533fea27bd3240b4ffaa278f64b5f56b5c6375c0d1e73b7ba382",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_appgateway/files",
+ "name": "tests/integration/targets/azure_rm_virtualwan",
"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_virtualwan/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/azure_rm_virtualwan/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_virtualwan/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7637ce7f36cca366294688f612f6456714088cca19583ae7e9475e572d85f4f5",
+ "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_appgateway/files/cert2.txt",
+ "name": "tests/integration/targets/azure_rm_virtualwan/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/azure_rm_virtualwan/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e4dc34faa2e8e94cd385be73c33a849f452dd57d061a8aec118e6d391e46bbc0",
+ "chksum_sha256": "9ab3ddca93908d5c847cccd627d21e6dd17c1d4c24cfe0f06331431717be8bfd",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualmachinescaleset",
+ "name": "tests/integration/targets/inventory_azure",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualmachinescaleset/meta",
+ "name": "tests/integration/targets/inventory_azure/playbooks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualmachinescaleset/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_virtualmachinescaleset/aliases",
+ "name": "tests/integration/targets/inventory_azure/playbooks/create_inventory_config.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5510a946bf7e1d1ad196eaa73474176b122ae491702a99f9160ad1d554fc08bf",
+ "chksum_sha256": "96709396441733bc7e0001d045f1f825170489df8eae9cfdb677722f70e034be",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualmachinescaleset/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_virtualmachinescaleset/tasks/main.yml",
+ "name": "tests/integration/targets/inventory_azure/playbooks/test_inventory.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "088fc01b37760ce34fafbf49d9cad124a44df1c8390c23c58480447c275bb9a5",
+ "chksum_sha256": "ec64466973b4afce9659407d0b56ac133028b3965a06bc27ebbe227cd5da8b11",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_datalakestore",
- "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_datalakestore/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_datalakestore/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_datalakestore/aliases",
+ "name": "tests/integration/targets/inventory_azure/templates/basic2.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0",
+ "chksum_sha256": "758f6dfaa158a3601eb9cd986357f1a40a04071ad62f3ba613002ffde00d6018",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_datalakestore/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_datalakestore/tasks/main.yml",
+ "name": "tests/integration/targets/inventory_azure/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2d7c9df4757ded6e5d8fdb419854a55eb85d7782884e81548d299a795998daa6",
+ "chksum_sha256": "e2e2f39006f1e6b83660c469a9c29e1dfb17b99cca9caa124626e14cd0658a0b",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_functionapp",
+ "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_functionapp/meta",
+ "name": "tests/integration/targets/azure_rm_trafficmanagerprofile/meta",
"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_trafficmanagerprofile/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_functionapp/aliases",
+ "name": "tests/integration/targets/azure_rm_trafficmanagerprofile/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "262ad6ab8a8087f2f21d4f26a2c2d02c347a7edf0fb1af8fdb931ab1c1087bbb",
+ "chksum_sha256": "b34b028873420b7fdba3b5e4f0b3a1283d3879fcf1ee2d91dbe8a732651ca04a",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_functionapp/tasks",
+ "name": "tests/integration/targets/azure_rm_trafficmanagerprofile/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_functionapp/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_trafficmanagerprofile/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a5d18ded0b871348c349b69152916bc7b243670fdc7ec9a2f8ab479ce589e390",
+ "chksum_sha256": "65beb0620dd28c47587519e4bb5eed48d9e4b66979521bc9cc88153702829b5e",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_subnet",
+ "name": "tests/integration/targets/azure_rm_image",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_subnet/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_subnet/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_subnet/aliases",
+ "name": "tests/integration/targets/azure_rm_image/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637",
+ "chksum_sha256": "fca45b39c1e6a21b8fb8e1b6c8f5954d8accf0bc6fa436361d75b014b36a8fd6",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_subnet/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_subnet/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_image/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6da3c97478624fb4d675d4787caedba75a8b159228bc39d6fccdd3db6a333c78",
+ "chksum_sha256": "f15012224b91b0dcb340a2dfcd3d360a36bf2ed291b88a4206914ac5db295466",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_ipgroup",
+ "name": "tests/integration/targets/azure_rm_multiplemanageddisks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_ipgroup/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_ipgroup/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_ipgroup/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_multiplemanageddisks/templates",
"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_multiplemanageddisks/templates/disk_config.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b2d66c35aafd2720cb487010156156302c28f3cd0e20fcfbed1a98d2ed42601f",
+ "chksum_sha256": "d52e27205862487e08375c08ac7c8aa27c059db63c3fb83ebb8dd8eb0e7e11f6",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_adserviceprincipal",
- "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_adserviceprincipal/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_adserviceprincipal/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_adserviceprincipal/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": "528893af1cac01f38ab277aec0138b83c74b2576464d96eb7f3da330784edaff",
+ "chksum_sha256": "347f0eb7c19d4e9cb7070d4eff76a456f649df4792a590d75b0258643d1c4282",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_adserviceprincipal/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_adserviceprincipal/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_multiplemanageddisks/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4a0a40666b1bd4ba719d5da58b623587b330007a776cac80dcd1d55df48a34ad",
+ "chksum_sha256": "8e23e36b5f9691d484992b8472b963aa9265f9e12c2b5eace4da7b532d66c3db",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_privatelinkservice",
+ "name": "tests/integration/targets/azure_rm_manageddisk",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_privatelinkservice/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_privatelinkservice/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_privatelinkservice/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_privatelinkservice/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_privatelinkservice/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_manageddisk/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "26d7dc158898d9dbc017b66108ef335ff0b4a5ba01d2566cecbec6ad767763be",
+ "chksum_sha256": "c8decdddddd8660e19da01320399ff9e5216c7733d9c755a9f812f81068f7ca5",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_workspace",
+ "name": "tests/integration/targets/azure_rm_hostgroup",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_workspace/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_workspace/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_workspace/aliases",
+ "name": "tests/integration/targets/azure_rm_hostgroup/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_hostgroup/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_hostgroup/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7ce589f76321d7c707ac86920720af5574f0d3e3685ef6c9aec9987393a09172",
+ "chksum_sha256": "a11e09783bbddbc59c9ddb098a44d5e17aaac05fec0334ef225dd2d301651e17",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_sqlmanagedinstance",
+ "name": "tests/integration/targets/azure_rm_azurefirewall",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_sqlmanagedinstance/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_sqlmanagedinstance/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_sqlmanagedinstance/aliases",
+ "name": "tests/integration/targets/azure_rm_azurefirewall/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d19280a8d5d5c2523536ea5aed2c5a14d1b19cc49f3f21974ca3e9a9921bb7cd",
+ "chksum_sha256": "c00350cca0b02532fa9ae31b5fdf0d5b963615b521197b71ac4cc024aac9d037",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_sqlmanagedinstance/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_sqlmanagedinstance/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_azurefirewall/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "561193b252168d2eca301ab2c0f673e1a99acc2c807b9f9e8679f1e3b7058d5e",
+ "chksum_sha256": "99e09441ca9bb38a0844a3421ebdd6d6e496690d6aa853f111ec79d73108bef1",
"format": 1
},
{
- "name": "tests/integration/targets/inventory_azure",
+ "name": "tests/integration/targets/azure_rm_firewallpolicy",
"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_firewallpolicy/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_firewallpolicy/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_firewallpolicy/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "86545d143dd65f74a63218943018bfad054837e6c813fd396442957c89e87a62",
+ "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0",
"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_firewallpolicy/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_firewallpolicy/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e95740d1317dda6c7a610a482d33b29e2035293ff74e10a2bcc0f2997ba85430",
+ "chksum_sha256": "83fbfafaa9f1fc5fddcfa245b6911f0e659bbe7ec05431f59ed455b2b7b0298c",
"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_ipgroup",
+ "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_ipgroup/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_ipgroup/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_ipgroup/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e2e2f39006f1e6b83660c469a9c29e1dfb17b99cca9caa124626e14cd0658a0b",
+ "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0",
"format": 1
},
{
- "name": "tests/integration/targets/inventory_azure/templates",
+ "name": "tests/integration/targets/azure_rm_ipgroup/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_ipgroup/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "758f6dfaa158a3601eb9cd986357f1a40a04071ad62f3ba613002ffde00d6018",
+ "chksum_sha256": "b2d66c35aafd2720cb487010156156302c28f3cd0e20fcfbed1a98d2ed42601f",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_vmbackuppolicy",
+ "name": "tests/integration/targets/azure_rm_cdnprofile",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_vmbackuppolicy/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_vmbackuppolicy/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_vmbackuppolicy/aliases",
+ "name": "tests/integration/targets/azure_rm_cdnprofile/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "923b442d786cff06e0b7a3ea4232f7bfe10835e93fb73b8df6ee997380099420",
+ "chksum_sha256": "d922663ea733e96e4da9178ebcd4baa17435a011302f3d609f7391e651d119f9",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_vmbackuppolicy/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_vmbackuppolicy/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_cdnprofile/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e990393d47f344ab98b507415273d6ec89117b52b4feba04783ab07d792e7243",
+ "chksum_sha256": "b9116be95e99a7a4650f95f59f2832c4c71c3ef74ed2b6362afea6eb5c57438c",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_firewallpolicy",
+ "name": "tests/integration/targets/azure_rm_publicipprefix",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_firewallpolicy/meta",
+ "name": "tests/integration/targets/azure_rm_publicipprefix/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_publicipprefix/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_publicipprefix/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0",
+ "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_firewallpolicy/tasks",
+ "name": "tests/integration/targets/azure_rm_publicipprefix/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_publicipprefix/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "83fbfafaa9f1fc5fddcfa245b6911f0e659bbe7ec05431f59ed455b2b7b0298c",
+ "chksum_sha256": "edf0f4922b32fc3156d9efabdd927eecb0dc8fbc826a0380e63b024b4e02c2fb",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_resource",
+ "name": "tests/integration/targets/azure_rm_gallery",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_resource/meta",
+ "name": "tests/integration/targets/azure_rm_gallery/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_gallery/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_gallery/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b9685232ad3eab40ee59426a3dd04a8f71719dbfa1d6becb498bb416c8d1ff1c",
+ "chksum_sha256": "e676d2331077a7a453c2694fef48b0b56195d00e5a1009e3f668a7e174abd16b",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_resource/tasks",
+ "name": "tests/integration/targets/azure_rm_gallery/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_gallery/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e51cbf401d0da7fb038fade492b102a3493b57c0c0e4f9ca927d726db890c4df",
+ "chksum_sha256": "7d4ccb5c3257f92a672129322d603c601bcdde23ed2828b0a4e18a610545f17e",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_adpassword",
+ "name": "tests/integration/targets/azure_rm_registrationdefinition",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_adpassword/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_adpassword/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_adpassword/aliases",
+ "name": "tests/integration/targets/azure_rm_registrationdefinition/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0e90b0bd13c40122b87176faa412a83730dcc85c0060dffa0d7b0450d559ed40",
+ "chksum_sha256": "262ad6ab8a8087f2f21d4f26a2c2d02c347a7edf0fb1af8fdb931ab1c1087bbb",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_adpassword/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_adpassword/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_registrationdefinition/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "448a3e37f44ca7e199c6184fedaf40e24a648ed1b1b2763b40d5c34e2763adfc",
+ "chksum_sha256": "b1eafe0d8ad74c931f977ad6bf378546181d7c65405504f2a68d515d453f465d",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_diskencryptionset",
+ "name": "tests/integration/targets/azure_rm_dnsrecordset",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_diskencryptionset/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_diskencryptionset/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_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_dnsrecordset/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7a0a7e26e52f22c56e37dcc3154036297160820fe9bfdc27f6b5fb5811e84e9b",
+ "chksum_sha256": "36614727374728e26b5686e9fac66641e5b9c268b6945f2dcd1b4a9c4d2232c3",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_diskencryptionset/lookup_plugins",
+ "name": "tests/integration/targets/azure_rm_dnsrecordset/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_dnsrecordset/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ecf5403290d75ebf93dd07c1a0d1ec251482cde7952d5fc4c1f51ecde936e804",
+ "chksum_sha256": "9d766be151f93042b7018bd39ac79b987e66389613ce426a70d5683952b5a841",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_mariadbserver",
+ "name": "tests/integration/targets/azure_rm_privatednsrecordset",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_mariadbserver/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_mariadbserver/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_mariadbserver/aliases",
+ "name": "tests/integration/targets/azure_rm_privatednsrecordset/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0f1123b3696957f55774d4316a4461182998975a0db1f960ef289b20b5e926c7",
+ "chksum_sha256": "36614727374728e26b5686e9fac66641e5b9c268b6945f2dcd1b4a9c4d2232c3",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_mariadbserver/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_mariadbserver/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_privatednsrecordset/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b829d34d571be3c848284902c00755a940e2a629115fbbd3a78af1ce018a0ede",
+ "chksum_sha256": "1fc82f73aab3fbd25c62ca6e740a796a286df28c3de2cc6d084619cdb7fd12eb",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_batchaccount",
+ "name": "tests/integration/targets/azure_rm_automationrunbook",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_batchaccount/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_batchaccount/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_batchaccount/aliases",
+ "name": "tests/integration/targets/azure_rm_automationrunbook/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "049e0b8480c14a44ea8525b83848582417405cd5352a0afc5fc9bc3f1c0f3941",
+ "chksum_sha256": "522c2e1148926193596b31fa7cf086b9f57e17c7028abc638a2b6f5bb9269850",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_batchaccount/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_batchaccount/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_automationrunbook/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f37479ad82f6ad6db65b64e25816f268071345bbfcd8f168ce2af930d0f99375",
+ "chksum_sha256": "a1368da2abfb774ea5e3fd1a9238e9fbadbbc6fb1a93c00685bdc1d966e401b4",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_autoscale",
+ "name": "tests/integration/targets/azure_rm_aduser",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_autoscale/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_autoscale/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_autoscale/aliases",
+ "name": "tests/integration/targets/azure_rm_aduser/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2019d6f29a1dbe1242200ff0a0485722bc57431db8265a741c5e501cd5a920dd",
+ "chksum_sha256": "1658975f0508387cde4cda499d7eb9524e31bc2f02cc49d6483d7e210d991234",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_autoscale/tasks",
+ "name": "tests/integration/targets/azure_rm_aduser/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_aduser/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c5faa6f6e4e1a6f51493f745f616201b1ed3447db1ec85f60ae676b8ecd334a0",
+ "chksum_sha256": "978e84fe852bac2909bcf4d707ecd577b164e6bd25c694464403ff855562b369",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualmachineimage_info",
+ "name": "tests/integration/targets/azure_rm_automationaccount",
"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_automationaccount/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_automationaccount/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_automationaccount/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8eb6da86566844e8278692f99177c27f5e17dfc808484e9168d842ce4ea822b2",
+ "chksum_sha256": "87c7ae7077faea9533bb827344f49dadfecfdbc5ea179058d72f7bad3ae81388",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualmachineimage_info/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_virtualmachineimage_info/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_automationaccount/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c1027dcaf3ce2f749a07c7b78ee56ff713901f0fa792e08ebfc2c31671426a1c",
+ "chksum_sha256": "c99286c45665b96d5deea95731688470a9a02c11d22f868cb0ba7a56b71c63c5",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_rediscache",
+ "name": "tests/integration/targets/azure_rm_virtualhub",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_rediscache/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_rediscache/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_rediscache/aliases",
+ "name": "tests/integration/targets/azure_rm_virtualhub/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_virtualhub/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_virtualhub/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "60978e58b15da724fb1f16447071e7b33add290150dfbdd4173900c4edda9a91",
+ "chksum_sha256": "8810084bf5132a43f31c425b77e96134af6d5855dcb4d4ab94ed2b691d555614",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_appserviceplan",
+ "name": "tests/integration/targets/azure_rm_batchaccount",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_appserviceplan/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_appserviceplan/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_appserviceplan/aliases",
+ "name": "tests/integration/targets/azure_rm_batchaccount/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3d8b505b037b869206fe23e768d9d42e48dc8db7c83ac3023ec1be689261f907",
+ "chksum_sha256": "049e0b8480c14a44ea8525b83848582417405cd5352a0afc5fc9bc3f1c0f3941",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_appserviceplan/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_appserviceplan/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_batchaccount/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f3fd1981d472300a8b2044ffbd73e928a089c2d81b3c09d7d5dff19c5d6cd544",
+ "chksum_sha256": "f37479ad82f6ad6db65b64e25816f268071345bbfcd8f168ce2af930d0f99375",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualnetworkgateway",
+ "name": "tests/integration/targets/azure_rm_keyvaultkey",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualnetworkgateway/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_virtualnetworkgateway/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_virtualnetworkgateway/aliases",
+ "name": "tests/integration/targets/azure_rm_keyvaultkey/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4f59a6f1fc64a79191d0110c2f203adee747fd1bb69ad631a279efa7d370eaec",
+ "chksum_sha256": "36614727374728e26b5686e9fac66641e5b9c268b6945f2dcd1b4a9c4d2232c3",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualnetworkgateway/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_virtualnetworkgateway/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_keyvaultkey/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "271094dd7a4e013c0da515000e4e6257bb716cf030c89dbe37af7ca74902841d",
+ "chksum_sha256": "06c0a1c5aa8570a5ada69eae73aecfaee636bcb8f958c7dfd170c39d69c4f69d",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_webappaccessrestriction",
+ "name": "tests/integration/targets/azure_rm_expressroute",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_webappaccessrestriction/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_webappaccessrestriction/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_webappaccessrestriction/aliases",
+ "name": "tests/integration/targets/azure_rm_expressroute/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "262ad6ab8a8087f2f21d4f26a2c2d02c347a7edf0fb1af8fdb931ab1c1087bbb",
+ "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_webappaccessrestriction/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_webappaccessrestriction/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_expressroute/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "23178ef47e9dbb43a51984becf44d72972a399952958fd2a76d71d6338864252",
+ "chksum_sha256": "0fee3fb92d49fcebdc6564a4becd35f638cfa294e5d893fc5adf2fff21ac072b",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_ddosprotectionplan",
+ "name": "tests/integration/targets/azure_rm_datalakestore",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_ddosprotectionplan/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_ddosprotectionplan/meta/main.yml",
+ "name": "tests/integration/targets/azure_rm_datalakestore/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_datalakestore/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1be076424fbf717d678e202250426e9b368688f8d3029f0c5dc262b97df819af",
+ "chksum_sha256": "528893af1cac01f38ab277aec0138b83c74b2576464d96eb7f3da330784edaff",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_ddosprotectionplan/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_ddosprotectionplan/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_datalakestore/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cac8f7d2a8403213ad252934698c6c5eef6edc0ccd0eb6c5794990e6c30f05b0",
+ "chksum_sha256": "0731e52280287102127653617210703eeb3bd7abf3125367f33df7fd8d0be818",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_recoveryservicesvault",
+ "name": "tests/integration/targets/azure_rm_resourcegroup",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_recoveryservicesvault/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_recoveryservicesvault/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_recoveryservicesvault/aliases",
+ "name": "tests/integration/targets/azure_rm_resourcegroup/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "923b442d786cff06e0b7a3ea4232f7bfe10835e93fb73b8df6ee997380099420",
+ "chksum_sha256": "cd30933c00554775a36ee6421935b7d8baf776db7cb35d5a103be9e18b7d2486",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_recoveryservicesvault/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_recoveryservicesvault/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_resourcegroup/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6e841ad32da809ed4a9782a8ce178f2c8399d98a56be2406142e898afffb65c0",
+ "chksum_sha256": "ccf92a54443b6b7b1df4139247acd0d9496fb6266d6a99defb4035fb76cb61a3",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_privateendpoint",
+ "name": "tests/integration/targets/azure_rm_networkinterface",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_privateendpoint/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_privateendpoint/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_privateendpoint/aliases",
+ "name": "tests/integration/targets/azure_rm_networkinterface/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "11c35de489a3da87eb40a2ce00a80a9992fc89c3b3fdee710301ba9faacd332d",
+ "chksum_sha256": "79cafc6b10612f907e2e4a97bac50c9948ac0a0dd5030875a9465204a6323b48",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_privateendpoint/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_privateendpoint/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_networkinterface/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f5c8cc29641d123e237b894acc5d13e306e61d6cc553d15561730a42e63e55fc",
+ "chksum_sha256": "cd2b9fd7ff5b256d26839ba3646b9347fa95f8fd6b1104e7f2835e1d7b7b2624",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_backuppolicy",
+ "name": "tests/integration/targets/azure_rm_adapplication",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_backuppolicy/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_backuppolicy/meta/main.yml",
+ "name": "tests/integration/targets/azure_rm_adapplication/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_adapplication/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637",
+ "chksum_sha256": "0e90b0bd13c40122b87176faa412a83730dcc85c0060dffa0d7b0450d559ed40",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_backuppolicy/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_backuppolicy/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_adapplication/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "26b1ed48d843898e1dc63a09a119c74ee83613ed2f0066e2971f3056eda0ee88",
+ "chksum_sha256": "e7b04ba312d08b8fdee715292776842a8533aed97ad6aae4c25ebcba04c8ccf2",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_apimanagement",
+ "name": "tests/integration/targets/azure_rm_workspace",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_apimanagement/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_apimanagement/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_apimanagement/aliases",
+ "name": "tests/integration/targets/azure_rm_workspace/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "592e63285615e1fe4768ff5027ae6a96e4dea5c875e1127e14c393cfacbc44fb",
+ "chksum_sha256": "08cf46c06f61ba50ecd182f45dfcf2ad7529f1df439d0ca713a8ceba58e14c99",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_apimanagement/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_apimanagement/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_workspace/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7be6584e05920691ae83bc434ef61feb54cf098cb187c6457e10234840ee6ff9",
+ "chksum_sha256": "7ce589f76321d7c707ac86920720af5574f0d3e3685ef6c9aec9987393a09172",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_cognitivesearch",
+ "name": "tests/integration/targets/azure_rm_keyvaultsecret",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_cognitivesearch/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_cognitivesearch/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_cognitivesearch/aliases",
+ "name": "tests/integration/targets/azure_rm_keyvaultsecret/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0",
+ "chksum_sha256": "c7bb4c8aa02376e55002499e1a01763a649ddf80c253e1da4556ab7719ed05ac",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_cognitivesearch/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_cognitivesearch/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_keyvaultsecret/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3712847b582b6a3a3f461055963ce51034e160b1e174d06b8b8f6eeecd4bc19",
+ "chksum_sha256": "e9a7c76b76aa6e2ec7471c617c9fca886aecd9f28eafb9442023426818771d7b",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualmachinesize_info",
+ "name": "tests/integration/targets/azure_rm_loganalyticsworkspace",
"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_loganalyticsworkspace/meta",
"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_loganalyticsworkspace/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_loganalyticsworkspace/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "262ad6ab8a8087f2f21d4f26a2c2d02c347a7edf0fb1af8fdb931ab1c1087bbb",
+ "chksum_sha256": "f6ab21fb1deaf7061dd270b8ca0bf7c6e585eac172153559349e997150abbcaf",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualmachinesize_info/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_virtualmachinesize_info/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_loganalyticsworkspace/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6684f96227d75c363a588e1be85cc7ce53025d7e13844638d100781003901db6",
+ "chksum_sha256": "529ae2dab2d63d3af2eab9ff5fe9b466a9c2bf3bf600d0a5221126ddec9be288",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_apimanagementservice",
+ "name": "tests/integration/targets/azure_rm_datafactory",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_apimanagementservice/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_apimanagementservice/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_apimanagementservice/aliases",
+ "name": "tests/integration/targets/azure_rm_datafactory/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "528893af1cac01f38ab277aec0138b83c74b2576464d96eb7f3da330784edaff",
+ "chksum_sha256": "a74040b53394bd68b1885c350f1f62603740e721ca38e01609660895693a3858",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_apimanagementservice/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_apimanagementservice/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_datafactory/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "db17a45674ec599ab8fb1890903d3bc49b3ded000197dd55cc82c3017a962565",
+ "chksum_sha256": "eedba69010cd9dad1b57c7e0f7f18eacb0feb43359922cb53c3ba98479e8dfcc",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_keyvaultsecret",
+ "name": "tests/integration/targets/azure_rm_storageblob",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_keyvaultsecret/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_keyvaultsecret/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_keyvaultsecret/aliases",
+ "name": "tests/integration/targets/azure_rm_storageblob/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c7bb4c8aa02376e55002499e1a01763a649ddf80c253e1da4556ab7719ed05ac",
+ "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_keyvaultsecret/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_keyvaultsecret/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_storageblob/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5c0ffa5a2e80c5c71996a8f4fe46816621d764b46f0f7bc23560b55e2072d5e7",
+ "chksum_sha256": "7175cd6cb47363104377b380cc011fa46f815bbc69b2d81cbd347786159bda9e",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_keyvaultsecret/lookup_plugins",
+ "name": "tests/integration/targets/azure_rm_storageblob/files",
"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_storageblob/files/Ratings.png",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ecf5403290d75ebf93dd07c1a0d1ec251482cde7952d5fc4c1f51ecde936e804",
+ "chksum_sha256": "20cdf86ae984fb64eefdc57a0e03f34c83cb8b27834b33c84768cc2b62cf9d68",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_eventhub",
+ "name": "tests/integration/targets/azure_rm_roleassignment",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_eventhub/meta",
+ "name": "tests/integration/targets/azure_rm_roleassignment/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_roleassignment/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_roleassignment/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_roleassignment/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_roleassignment/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c4ef2c774f92b1d1c61c070407cb15cec4492593f03dfc095031136a6fc315e4",
+ "chksum_sha256": "46a3ce70c6a099b76908d0787935c2fb80ab988391f5d91790e3157bec81a8c1",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_postgresqlserver",
+ "name": "tests/integration/targets/azure_rm_diskencryptionset",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_postgresqlserver/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_postgresqlserver/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_postgresqlserver/aliases",
+ "name": "tests/integration/targets/azure_rm_diskencryptionset/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "212c2162821130244834f49afd3460bb037d426eac902fc88de51afbe6bab522",
+ "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_postgresqlserver/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_postgresqlserver/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_diskencryptionset/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "957431198f2f2412d381532922a380b37d3a2941dce8f6fbcda89284fa7d3ca5",
+ "chksum_sha256": "a53089acc4661e0553413e5be4b73155cbe81c5774ffc33e53470b7f0a192709",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_publicipaddress",
+ "name": "tests/integration/targets/azure_rm_proximityplacementgroup",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_publicipaddress/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_publicipaddress/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_publicipaddress/aliases",
+ "name": "tests/integration/targets/azure_rm_proximityplacementgroup/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ed3159c0b56e6e42548ed58456e5304d48aea0b4e3a0999591f863ae79b225ba",
+ "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_publicipaddress/tasks",
+ "name": "tests/integration/targets/azure_rm_proximityplacementgroup/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_publicipaddress/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_proximityplacementgroup/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0240ae96de6dabce7cd47a7793fb7a263717ea1b2e28423f47ba0c75333ed8cd",
+ "chksum_sha256": "c5c88276931feb2e7c2b7386c1ed4885d19888d5f70cf8c76dd4088fa33fa79d",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_servicebus",
+ "name": "tests/integration/targets/azure_rm_vpnsite",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_servicebus/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_servicebus/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_servicebus/aliases",
+ "name": "tests/integration/targets/azure_rm_vpnsite/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "923b442d786cff06e0b7a3ea4232f7bfe10835e93fb73b8df6ee997380099420",
+ "chksum_sha256": "51bfa0d69b7c8b7e94b28aa9c60c921ace3971f50a385673a66791c31749678a",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_servicebus/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_servicebus/tasks/main.yml",
+ "name": "tests/integration/targets/azure_rm_vpnsite/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a0528bf0af2a590fe46bced0ca843722543d5f10626604a887a7c278e97c38d2",
+ "chksum_sha256": "bcfd0915de197ad7e6d01dd27e5ffe2a8f62d93303f19d5e4c09373a82dc7334",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_monitordiagnosticsetting",
+ "name": "shippable.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "515333579eea59619360d72e38cc2c5c9a8b43ff59cd3ddcc12c5b0172553b4a",
+ "format": 1
+ },
+ {
+ "name": "README.md",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "addfda03504e77be9156f1d5a1dec8ec3d9f81d08498ac814e7f782adbdc0e21",
+ "format": 1
+ },
+ {
+ "name": "CHANGELOG.md",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9968490b2917b41466fcf58ff804ea27213672db0b91ac0f55ce076246a69913",
+ "format": 1
+ },
+ {
+ "name": "requirements-azure.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5ed84a767e40fa7e5bdb9dccd739cb355185b1414a1beab6892a1bb8d3e6062d",
+ "format": 1
+ },
+ {
+ "name": "plugins",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_monitordiagnosticsetting/meta",
+ "name": "plugins/doc_fragments",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_monitordiagnosticsetting/meta/main.yml",
+ "name": "plugins/doc_fragments/azure_tags.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
+ "chksum_sha256": "e8c9d720dbc7605d3ee66799e8e81d0886e404c9a07b6b9b8edc844e0646de64",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_monitordiagnosticsetting/aliases",
+ "name": "plugins/doc_fragments/azure.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cc618d5714ddaae8f1482cf89dcf3327cf82fa378c16f6b5cf092339927261c3",
+ "chksum_sha256": "f2146d8b6b05f3dc1571069061663ff89f7527880e36a7f4fc4ac2e87ef0ee68",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_monitordiagnosticsetting/tasks",
+ "name": "plugins/doc_fragments/azure_rm.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0342c35022e2762f31a487c0434feda2cb4d74717e474c0f3ea6735266c36b6b",
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_monitordiagnosticsetting/tasks/main.yml",
+ "name": "plugins/module_utils/azure_rm_common_ext.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4c185b22edc1017409894f57875fe5db2c986c6d741cbd86dc78aa01b36a9fc9",
+ "chksum_sha256": "ebf7c0c6f4ad7a05a04d740ca989a05cc4b22728acbd6390d9aa90931eca1647",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_aksagentpool",
- "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_aksagentpool/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_aksagentpool/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_aksagentpool/aliases",
+ "name": "plugins/modules/azure_rm_storageshare.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "783d6dbd1b9cc4b0543d6e96d15206283018e0c291764a2a4106e860d41cb210",
+ "chksum_sha256": "d70dd044b1bf421773c6438c7c9020906810f7e1e74523e8855133a8fae9360d",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_aksagentpool/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_batchaccount_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "570fba1885df5ea2f8bcfef3e8ed9b30ca958e08aebbf85ec81724df89b76afc",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_aksagentpool/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_iotdevice_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4bc2ac2faed9ceba28dfb24dffff6d996da42cf6aac09cb3a57c044a17bc046b",
+ "chksum_sha256": "87e22ba60e4ab700ee3bfad366690b044125b0f66091c88bc346dcc88e722262",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_keyvault",
- "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_keyvault/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_privatednsrecordset.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d2332100a1ca9ed31dbc1a41c229aabbd02015e4f516faf8cc3dbf739bc41966",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_keyvault/meta/main.yml",
+ "name": "plugins/modules/azure_rm_iotdevicemodule.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
+ "chksum_sha256": "83d5ceb43eb948e8d5e766caa60e03a9978939ff7f0132ae5d71ad5622dad3bf",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_keyvault/aliases",
+ "name": "plugins/modules/azure_rm_mysqlfirewallrule_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "726101a2dd7238a8ff7f94fec489e5fcfd8bb0db10ecd074fa0686b2eb9d6d24",
+ "chksum_sha256": "2c98b91e48ddf042f3fd0847c42b7d880fc00ed807437aa70d35ae1107ba1407",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_keyvault/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_vmbackuppolicy.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f5053078d5ae59f0b466044d135108197c119a34d79f826be509d57dc2a6e2ce",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_keyvault/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_privateendpointdnszonegroup.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "85d1f060912261e42affe3f43fbe52750e62bc5d2fe7d9b55f604be778052033",
+ "chksum_sha256": "d516440379341b68c65581c8d9da78f6a204845502e408c48875851c58229241",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_keyvault/lookup_plugins",
- "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_keyvault/lookup_plugins/azure_service_principal_attribute.py",
+ "name": "plugins/modules/azure_rm_adapplication_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ecf5403290d75ebf93dd07c1a0d1ec251482cde7952d5fc4c1f51ecde936e804",
+ "chksum_sha256": "e04053b0c584772df10dcd46845772eefb57116b655ced27ee6786fff8334f12",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_bastionhost",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_containerinstance.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b3c13189f840de2aa3047eeb145d3f1680c40a999a45b92325f70a92ff950296",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_bastionhost/meta",
- "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_bastionhost/meta/main.yml",
+ "name": "plugins/modules/azure_rm_mariadbfirewallrule.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
+ "chksum_sha256": "6c028f0fdd933b4a02b6c92f20432fc3617072d8828898f628e02554d25c31e3",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_bastionhost/aliases",
+ "name": "plugins/modules/azure_rm_subscription_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d57abe6f8fb0cbfb8ac22431c09126cd48bb4d2836a6d151faf92fb6fbecc6aa",
+ "chksum_sha256": "27171c677f1e2b5337edce509b64021d2bb2708d2b476137b3e4ac96df1631af",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_bastionhost/tasks",
- "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_bastionhost/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_firewallpolicy_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b2adf15d8a7ef9e0b56dba6b3ebe750f09192d86ec56df6076088fd4edd444e3",
+ "chksum_sha256": "1e1cebf4f29a286751549a9a5ccf06451bfb9648151d54ca813646f1289dc8b9",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_containerinstance",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_automationrunbook.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c257d3afae0b00ae9b09d6d5f04373def1e678ea99cd8d5778c8425d64ea0058",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_containerinstance/meta",
- "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_containerinstance/meta/main.yml",
+ "name": "plugins/modules/azure_rm_webapp_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
+ "chksum_sha256": "a420da6e6d479985a088e2f2c614bc462ad003d5814d81e4a6db489aef906a83",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_containerinstance/aliases",
+ "name": "plugins/modules/azure_rm_galleryimageversion_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "059ec72ab54682d34b109880aa48f5b5b702d120042153371442c7293c011f31",
+ "chksum_sha256": "dc2dffd74aa500eb855ecebf3abbec93da09ef7cf2805edb11a498ed33f46205",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_containerinstance/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_iothub.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "aee9f30afbc1989ff7cfe64101c59d842dc635e59b34411d4045c428f1109b1d",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_containerinstance/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_cosmosdbaccount.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d5d577eb39a4533fea27bd3240b4ffaa278f64b5f56b5c6375c0d1e73b7ba382",
+ "chksum_sha256": "71100c8b3ba6cf9fd59776ae0b50d9e9ba4e34036ef6a5ba3821a6cf7c907d17",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_registrationassignment",
- "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_registrationassignment/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_akscredentials_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6635a6c530e584f50ba8d60da72e9d6e6814cd45ef73d155e9a9999bde3e70f8",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_registrationassignment/meta/main.yml",
+ "name": "plugins/modules/azure_rm_sqlfirewallrule_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
+ "chksum_sha256": "71e6d450073de8c90623f4048d44bd6eabaa39c36031a9beba28171a53b302cd",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_registrationassignment/aliases",
+ "name": "plugins/modules/azure_rm_adgroup.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "262ad6ab8a8087f2f21d4f26a2c2d02c347a7edf0fb1af8fdb931ab1c1087bbb",
+ "chksum_sha256": "152a3792aa58f812d46db9dc8b8ebfd3c78abf0406297d4b4c274ba23b398a1e",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_registrationassignment/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_virtualhub.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "be9396630b6c0d0cc7dae7688cd87421f4770dbba2ed92b2712761ff722ae8a5",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_registrationassignment/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_firewallpolicy.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "86581a9afe3f4c3e4f7021f214e089c84267a3b909312cba226a9011c223bc9b",
+ "chksum_sha256": "58980ae98ef0f3eb07237bd685eaf312369a68a484aaebef40037697d83cdec1",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_adgroup",
- "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_adgroup/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_publicipaddress.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e2ddc75d7edca49904c6025a1e1418c0ada1ed45fd56963a8e315cf7b2074362",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_adgroup/meta/main.yml",
+ "name": "plugins/modules/azure_rm_functionapp_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
+ "chksum_sha256": "1e0f3de0ed340f2e1a5cb2b5b4cb8b7cc9c6c8eafe4483cdb38b58878482b589",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_adgroup/aliases",
+ "name": "plugins/modules/azure_rm_webappaccessrestriction_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0e90b0bd13c40122b87176faa412a83730dcc85c0060dffa0d7b0450d559ed40",
+ "chksum_sha256": "c72ded459dbd8c58642c77aba5cfab56a86782f4e19958ded25f9754a32c1591",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_adgroup/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_manageddisk.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a4047fdb47da55f8bca9f6d0db734f6a74a0de61c644ca6ad98718f3eb808fe4",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_adgroup/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_aks_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f4adb4bc8784bbb857a39fbe58f45a1a47853538f3207e987b8bd64b1704238b",
+ "chksum_sha256": "3498eef981aba56a6540bf90b9a34c194dceb70503d43483c8ba64f367b2ba83",
"format": 1
},
{
- "name": "tests/integration/targets/setup_azure",
- "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/setup_azure/aliases",
+ "name": "plugins/modules/azure_rm_ddosprotectionplan.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "b5eb8ad5fe5b146e7b79f083f2f9747b1bc64432bc55660ac682e97e8235f023",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_aks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_loadbalancer_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b6b508842cc40fd4310a90e2bbad7733a50b7c43e29dc73dbccb304940b0f53c",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_aks/meta",
- "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_aks/meta/main.yml",
+ "name": "plugins/modules/azure_rm_ipgroup.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
+ "chksum_sha256": "2aaffe067e785adc4ccb4a78a2a2d665ee6e2bd5a28b79f75e2be4695a1ce115",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_aks/aliases",
+ "name": "plugins/modules/azure_rm_aduser_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "783d6dbd1b9cc4b0543d6e96d15206283018e0c291764a2a4106e860d41cb210",
+ "chksum_sha256": "59f317a97611776b87dd9d822f4234368027d5de8b98730851ba644ee9259031",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_aks/tasks",
- "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_aks/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_mysqlserver.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "683619ec3541848983b2f513eae4d885c97d3040ac188d252aec7304c3440c0b",
+ "chksum_sha256": "7f7cb3ce5875e72550cd314cc3df490cbbce0292265c927038897d026b573514",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_aks/tasks/minimal-cluster.yml",
+ "name": "plugins/modules/azure_rm_sqlelasticpool.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2b2be2027bb762b22ccf731a32baf3fa8b2675369c08b76c1499b3ea10902add",
+ "chksum_sha256": "a127cd3108b9eff43c793296f6239ee10df0810222dae4c44b380e45c01e36eb",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_containerregistrytag",
- "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_containerregistrytag/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_bastionhost.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ade78abbea1c467a8bf4787d227a0a96979482b15d05e3dea2ede57f91ff6f7c",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_containerregistrytag/meta/main.yml",
+ "name": "plugins/modules/azure_rm_mysqlfirewallrule.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
+ "chksum_sha256": "8d012c884bd3e4f7880fee699b3b6c8210a1cc00c98a2166c68c8b7e6a052bc2",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_containerregistrytag/aliases",
+ "name": "plugins/modules/azure_rm_trafficmanager.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637",
+ "chksum_sha256": "9aba8d8ba13076c53f797b5c999af3dbc951849450ca138ce6572804eed67a22",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_containerregistrytag/tasks",
- "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_containerregistrytag/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_diskencryptionset.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c3f1c91c39a8986e9aaaaf4e0f2bd84796f20ede51d7868e74a37a7839d1759d",
+ "chksum_sha256": "d4f85b7a7c7da95b7fbd3a084a15af87fd037134c527056a14f48ae1e58b9a9f",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_privateendpointdnszonegroup",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_recoveryservicesvault_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0049b577406a917161abd36167c9008e99975dda492874c3ed46c20875408c12",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_privateendpointdnszonegroup/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_mysqlconfiguration.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fff34c89e959affced009f321ef5cd6b6ad9955e711d69306f339ca4c15392e0",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_privateendpointdnszonegroup/meta/main.yml",
+ "name": "plugins/modules/azure_rm_rediscachefirewallrule.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
+ "chksum_sha256": "57d39a29b5d1e1241c24251018816439bb311f70311da75555af64edad9adbee",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_privateendpointdnszonegroup/aliases",
+ "name": "plugins/modules/azure_rm_routetable_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "11c35de489a3da87eb40a2ce00a80a9992fc89c3b3fdee710301ba9faacd332d",
+ "chksum_sha256": "1e849400c3b71a0bb6652ab1d40e919288b3dccb94314230273850f31259de8b",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_privateendpointdnszonegroup/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_virtualnetwork_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "39cbe4ccb66acb4dd36b893c9cb000846535c0726b8960e541a47f576fa2ed6f",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_privateendpointdnszonegroup/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_lock.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "408a60ac3331b6d89792e393613ca595886d842ab4ecc6825e6dc15bb02faf86",
+ "chksum_sha256": "858b4a4357dd80fbefb9c62265d91f31019794c9077526f6703c95b5d7c077a3",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualnetwork",
- "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_virtualnetwork/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_postgresqlfirewallrule_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "53187b006213c221bd5391b2b45734080afcd9e63280f4181f6355b5db7258dc",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualnetwork/meta/main.yml",
+ "name": "plugins/modules/azure_rm_iothubconsumergroup.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
+ "chksum_sha256": "9d6fc8dba8ecd841d908a4b1226fa0a186c270a9eb3e8a5a054692e56c621876",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualnetwork/aliases",
+ "name": "plugins/modules/azure_rm_servicebus_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637",
+ "chksum_sha256": "1ce20b5639787edf674d44a5896e7258cec1855d04bc619f49da51740dcccf82",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualnetwork/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_dnszone.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a9974fc3f305a83840b041b02158be7162a6c87c8fb3a3b909a2ac6255390668",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualnetwork/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_notificationhub_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e46b1abb1ab82874622d1821b564cee555be16ced454a9723f3cff45dcb5948c",
+ "chksum_sha256": "07c91492398c62e54b267d583d55287c485fbe4ca5112305e0c0cb0883500e89",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_cdnprofile",
- "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_cdnprofile/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_azurefirewall_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c0c5832150dbe6fc7675980c7107ca532191e9c8b1b6885456bb3c954c45aaab",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_cdnprofile/meta/main.yml",
+ "name": "plugins/modules/azure_rm_apimanagement.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
+ "chksum_sha256": "d414f8a53136b821e89e6adabf4be8bffe9e38b49350d547f1c2e1900b48d1e2",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_cdnprofile/aliases",
+ "name": "plugins/modules/azure_rm_rediscache.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d922663ea733e96e4da9178ebcd4baa17435a011302f3d609f7391e651d119f9",
+ "chksum_sha256": "c5363ae787f296df9b42f82727f81cfca5429ec971b67eac4132be52f6562400",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_cdnprofile/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_monitordiagnosticsetting_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3fa25b176b8c073c9435901c2c8455577e64a998c71b5c6a472ae1044f48bed9",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_cdnprofile/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_virtualnetworkgateway.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b292a101e30c2cf1ddb3541d9d1827483b29baea9a909cdfa57dfb9a24827741",
+ "chksum_sha256": "59e1d99084af0027d2c970a9e6ab6088546f4768d151a045b70615cff47b05c3",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_subscription",
- "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_subscription/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_autoscale.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d70f6911bb558f59f68dcc61f42155c1f108526ed47e7ad3bd8f653ade1a4f8f",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_subscription/meta/main.yml",
+ "name": "plugins/modules/azure_rm_proximityplacementgroup.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
+ "chksum_sha256": "c39137e4926c1749a04adc516a027a08e7cf2ebe2b21e7a95675fd0a546777b9",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_subscription/aliases",
+ "name": "plugins/modules/azure_rm_route_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637",
+ "chksum_sha256": "ec951f25bdc8b4944f43e054e44fc1887fbdb8cfaf892f5ce57174cf251b442e",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_subscription/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_subnet.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "356179dd240df193753fec302eae97fbf814fc4b8cd61868564449f9f8bd302b",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_subscription/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_snapshot.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cb18a11b4b6b14912f9fcc0131c232c9d3525d14a8d43ee4b2606cc2d3f7249c",
+ "chksum_sha256": "375ef0d94cddabb5e18bcaaa773b34cfbf7bc3885745ee4ed1e6f291974db559",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_notificationhub",
- "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_notificationhub/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_resourcegroup_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3336b070c7a607adde16279cdeaefe260b75c683a0ab0028b4ae6f262ebd32d8",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_notificationhub/meta/main.yml",
+ "name": "plugins/modules/azure_rm_natgateway.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a66dc9e034ad04e167bd52df4f75f2bea4499b25349fc42b3c8de9e2fe806996",
+ "chksum_sha256": "fe420872335d019070072b7541d79579eba9887f0d80e96d195ed1aaa051aea5",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_notificationhub/aliases",
+ "name": "plugins/modules/azure_rm_mariadbdatabase_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1be076424fbf717d678e202250426e9b368688f8d3029f0c5dc262b97df819af",
+ "chksum_sha256": "abe1fd7778f01c877a7c8d74170c74a26e39de0d5295b3e856adcc39fc7367e8",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_notificationhub/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_cognitivesearch.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8665ce3ff083d18608c7ed9b5fb778d6248e9cfcc096b464535d041457d9af00",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_notificationhub/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_manageddisk_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7f519a0026da2e72a6633b7e82a4c2ae581c50b918a5291b3b4737360211276b",
+ "chksum_sha256": "3b7b7131b77965c67a34ae4c9ddb9def5c3d30a5a76498c51580486063693f71",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_automationaccount",
- "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_automationaccount/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_appserviceplan.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4230691a8fb4f96611ff509e19f598304daf58104bd7c4e01b0d3e90311a2a93",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_automationaccount/meta/main.yml",
+ "name": "plugins/modules/azure_rm_virtualmachine.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
+ "chksum_sha256": "b002dccc80c26c8960dc842680bbcce59ec55561a5678d73c5ab1eb248183ce0",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_automationaccount/aliases",
+ "name": "plugins/modules/azure_rm_backupazurevm.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "87c7ae7077faea9533bb827344f49dadfecfdbc5ea179058d72f7bad3ae81388",
+ "chksum_sha256": "697611d8016ee00fdf81ee52c5d2174b670b3aa4a602498220cb4f1ffb455f9b",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_automationaccount/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_virtualmachineextension_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f845763404b68b32efe0187e0224cf30b7c71366531b4de508089df01f4849a3",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_automationaccount/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_resourcegroup.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c99286c45665b96d5deea95731688470a9a02c11d22f868cb0ba7a56b71c63c5",
+ "chksum_sha256": "20900d4b10ee5f7032fc409be2eaafc00521f8799c56559d8ac88fce00e4b2eb",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_account_info",
- "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_account_info/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_privateendpoint_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b34126d4fac558a5077869099cf1327fbecfeab36e6e34b30c4fe809d59b92de",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_account_info/meta/main.yml",
+ "name": "plugins/modules/azure_rm_azurefirewall.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
+ "chksum_sha256": "b4ca4d0d3c53b3b1cae912d609f7c50ad64e60ef826de3ea07ba2976a625f8dd",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_account_info/aliases",
+ "name": "plugins/modules/azure_rm_iotdevice.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a58bdac3b7068e244f2cf71f0a1a0bf136bc8785d2a8947fecbafdd97313adb7",
+ "chksum_sha256": "9e408c7a58814207bff9d92faf6725b49be428ddb10feffdcd311617c0ae2b8f",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_account_info/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_applicationsecuritygroup_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "805be7606a6145a9b4c942f63a9aa46ffc10366b8e3bf2af0c64b8009d0ac9eb",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_account_info/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_dnsrecordset_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4a18344a391206dc34d9e73134c7e2a2815ae3cdc36cf9b6791ac19e1bc07d6a",
+ "chksum_sha256": "ce13d83217e276a01bc5763cdfbd131090b35c64607738dc052b7ef9d25a3068",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualmachine",
- "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_virtualmachine/runme.sh",
+ "name": "plugins/modules/azure_rm_cdnprofile_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8d9a70f8c75d9a856cd529ae8ccb6e589c0db9494da4bb08cead6963e98d9dd5",
+ "chksum_sha256": "f860571746ea4763e349ddef498e678e62fbe5fb0af156aecd458c3b90801e96",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualmachine/main.yml",
+ "name": "plugins/modules/azure_rm_storageblob.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "49c03342521da6b25da0d4df975ee81e10e8b1e7ebd1bdabeba797463bceddbe",
+ "chksum_sha256": "25c3fe01b0eabad043577ed544d29f7014af8e68a2482ddda72830ef900ae7df",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualmachine/aliases",
+ "name": "plugins/modules/azure_rm_sqlserver.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "deefc8fe8e3699aa1e8852f316f52c0037219050b5b5d07919fa24d06ac14ed5",
+ "chksum_sha256": "9b0f2f7674cdb4641de9a2b8b50cb74e91e36ce0a07e0c3a13330592574bee71",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualmachine/inventory.yml",
+ "name": "plugins/modules/azure_rm_mysqldatabase.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "979c1f5123e61d083ca0ddb9816bd3381e6c2f830ae2a96648f2d4dd720a0f8d",
+ "chksum_sha256": "84c32c802f65e5ee577ec3e25aaab5d6d260376ddfd32368370b74ac08a24b6d",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualmachine/tasks",
- "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_virtualmachine/tasks/azure_test_dual_nic.yml",
+ "name": "plugins/modules/azure_rm_adpassword.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ee1ca82e2f43899c6dc17f2bd4710229f33c31aec6beb8ad9093e436d2df5b1f",
+ "chksum_sha256": "08837d90c0de64193acde245d3f3db12dac3e3fd548ee18275b7a847092c0698",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_spot.yml",
+ "name": "plugins/modules/azure_rm_roledefinition_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "40cfa7a636a0741e3f17deb1c7b965fbc42074f3fb7a50503dc93b9c2515a2e4",
+ "chksum_sha256": "0763daab445d3b0ce948955295bbe7a33f6aed80ffa01f86aa6d2b9808b9b6ae",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_public_ip.yml",
+ "name": "plugins/modules/azure_rm_cdnendpoint.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5dbfe466ae3aa493f04b91016c88318774d3e974304b90d882ed60c7ae8e2a93",
+ "chksum_sha256": "e42d48c18eb6e54441bb4ca6f973876cd88b083883e5a28bb634c1b39a049f6f",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_vm_identity.yml",
+ "name": "plugins/modules/azure_rm_privatelinkservice_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a7b73bb1af0583758961a25336d5faa2eb76fe6e84b3b9698b1bc5e53fbe4f9c",
+ "chksum_sha256": "02a72af00f3442e3cb5a19ba01bffc4cb2d47f646abf1a5ae0a125e80a8313ba",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_invalid.yml",
+ "name": "plugins/modules/azure_rm_devtestlabartifact_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "055893c82ae8b817fbcd3287b7435ae35ba8d6825ad3cb9545048ac599f9dd56",
+ "chksum_sha256": "714452d937c197d48b0197b3b5ed5b576cda49ffd49092581715d95f0436a4ff",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_minimal.yml",
+ "name": "plugins/modules/azure_rm_virtualmachinescaleset.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6ec63fe982d7ce8d65dadd74eb7e5c3678fa88e008ddfeaa43b1d3b77e094583",
+ "chksum_sha256": "98357220f8f1ad4fd4ecb6ac3d542487cd2e62abf7ad4e068f83c3d6797fe4fd",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_image_specific.yml",
+ "name": "plugins/modules/azure_rm_gallery_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "41a71c6515836e0c1c764ae83a0c999403e1fb774a55c5ab7912bdf7f1e2fc89",
+ "chksum_sha256": "13939381263c0bcd756261bcd5727bd7f33123f49dc1da05e88c652b468e66d9",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/setup.yml",
+ "name": "plugins/modules/azure_rm_applicationsecuritygroup.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1af862edc4a550cf631bcaa7a082d23451a3e7eacd0a248e4688bcc8dc6ef604",
+ "chksum_sha256": "58f5338441960bf8824f1ed9eec52bd6c5c2ec9d8c6ab02e8a5872afd388ed39",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_ephemeral_os.yml",
+ "name": "plugins/modules/azure_rm_roleassignment_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5f3d3633f808a35e23202cc9be4436f7ee590314694016377f7d40b357e4d00d",
+ "chksum_sha256": "3287b7ad7063115ef66dc443b05f4ceb6bd22d46cd8fcec1350c6e9e64289b3f",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_no_public_ip.yml",
+ "name": "plugins/modules/azure_rm_postgresqlflexibleserver.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a7f201260799a21031f75d3ecbd6cc372007c3a2c5ef7a6c9d35053129b868cd",
+ "chksum_sha256": "ea3b2ce15955406227c0367da00cebae6c44e18b9ef0c47720367e4fdd9397fc",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_image_latest.yml",
+ "name": "plugins/modules/azure_rm_cosmosdbaccount_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1d3000da1ae66217ff40113749e77538bee7ebf49e1808ad36488ca33d89761f",
+ "chksum_sha256": "b26c589e01d813fd752e5563ca77f5ed254c4b57699e23780d1d4ba23780b09f",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_deallocate.yml",
+ "name": "plugins/modules/azure_rm_postgresqlconfiguration.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fc53572c2732984518157aaff50942ab77426127a14f2e81faddfd45dd039e4c",
+ "chksum_sha256": "c5a5c9f631bc9ef1eb1d64acd039457dc38a52c84e5246589b9f42df904aa37a",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_minimal_manageddisk.yml",
+ "name": "plugins/modules/azure_rm_virtualhubconnection_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e10179f3c286b53a8347a1cd7d3672cc80e9184589dc7ea292489279fcc67ede",
+ "chksum_sha256": "948b85322d1c84b4eee3709f69f2de166232472a675dd26e125c099ce13517cc",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_no_nsg.yml",
+ "name": "plugins/modules/azure_rm_automationaccount.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "97017436c84bdbc87de46cee90cfab5edd108685b439253083f141cd5fd52a78",
+ "chksum_sha256": "5dd5fd70d816d33733de4bd4eb9f7569038760a5d13f9f932d7cc94b8077bbf4",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_roleassignment",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_virtualmachinescalesetextension_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0c32b71b14bbb8c0609f20d2c522792ad6f6e5bd3b8477dfadae9bb34ae61cc2",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_roleassignment/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_datafactory_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "97332f814785d6c0aad03a37f0126454115c0f219379529fefa421bf9ea20b53",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_roleassignment/meta/main.yml",
+ "name": "plugins/modules/azure_rm_devtestlabartifactsource.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
+ "chksum_sha256": "948df3ff5d5d5716e2fb15644bbf6fbacefbd51b422cbf99d7155c661216a700",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_roleassignment/aliases",
+ "name": "plugins/modules/azure_rm_openshiftmanagedcluster.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "51bfa0d69b7c8b7e94b28aa9c60c921ace3971f50a385673a66791c31749678a",
+ "chksum_sha256": "90da0b66cfa28d2a546a44d0e21e9b28c3165db49ded31034537b4785a4d37a5",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_roleassignment/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_devtestlabpolicy.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fc13943e64dc93aed3f76eff9b1715d5b95c5f528dbcfdf3214e4d69d29f2acc",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_roleassignment/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_privateendpointdnszonegroup_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "77fcaa43c9c8308f544b5ffa24411dcdcd67f1957ff1c7ff2831d451eb5fb9b2",
+ "chksum_sha256": "70582f1fa2c40f77e166f00242bd6bff2e7c018368beaa2ac960328c341faa77",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_securitygroup",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_keyvaultsecret_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "545d2ced807066e6a1d44b20bba6e589cc022654f099ef9087865b18759bc73d",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_securitygroup/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_ddosprotectionplan_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9ea0ae1f2bcab647085f83b8223d763abf123afe3996d0aeb0f304fc8d4fc7d3",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_securitygroup/meta/main.yml",
+ "name": "plugins/modules/azure_rm_subnet_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
+ "chksum_sha256": "781c564f40087d071942dab53c627fed093764c5a244744874e2226ec174bee8",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_securitygroup/aliases",
+ "name": "plugins/modules/azure_rm_virtualwan.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a390a5b729f05cbb0f6d91d7d663389c81a571a34bd2e931dc56fcdaee025754",
+ "chksum_sha256": "8586d543fd6b8ede929df540ee4d972c2dfb66fe775726f19f7b5c52a94dc029",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_securitygroup/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_deployment_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2b2f239c18ae7533a69c8a3e380840171bedc20dc4330ffb0b0f14c9cc5bda25",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_securitygroup/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_virtualmachine_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "436bac9c55273b36de74ec81c5c41e2c608843665dfec86ef85138d81a3c5b55",
+ "chksum_sha256": "3dc5595ff2ae8fd54fb291396a6b1a07b81fbc0454fe6e9d9e7055b4520324fb",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_manageddisk",
- "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_manageddisk/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_postgresqlflexiblefirewallrule_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a2dfe20b3135c2aabee049f886eaa54f797b5168ae6ed2bd579e7bbc63c21d76",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_manageddisk/meta/main.yml",
+ "name": "plugins/modules/azure_rm_aksagentpoolversion_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
+ "chksum_sha256": "69fd5ecafb1b4dee2cbcb17f9b767f3fff6a9d717ca8548dec4f9735f3d213d6",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_manageddisk/aliases",
+ "name": "plugins/modules/azure_rm_devtestlab_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b79d487ac5f66f90cfba1e03eb40daf31086e77447861b1cf4aeceee77d9745b",
+ "chksum_sha256": "973d2a0d1ad46717f41e2bb26169ad1eced874c034068674131ab480b7d496ed",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_manageddisk/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_containerinstance_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ab1aa37508addc2bf616e2c13664f2a1e5e0235af91db2bb84542449d01fc67b",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_manageddisk/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_datafactory.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c8decdddddd8660e19da01320399ff9e5216c7733d9c755a9f812f81068f7ca5",
+ "chksum_sha256": "5e54eadbb395d175730960b6e089b78c76cefeebe08dca0ab1ae80e4d34e78fb",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_vpnsite",
- "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_vpnsite/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_virtualwan_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3e7d2fdf7181de1499b68196f176080a9563767764ee9bb27bf3e3411cb87a75",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_vpnsite/meta/main.yml",
+ "name": "plugins/modules/azure_rm_registrationassignment.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
+ "chksum_sha256": "46371a2648227e97d625dbc25bdf9bdfac600b28b1fe2c07aa832186562dbe7a",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_vpnsite/aliases",
+ "name": "plugins/modules/azure_rm_roledefinition.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "51bfa0d69b7c8b7e94b28aa9c60c921ace3971f50a385673a66791c31749678a",
+ "chksum_sha256": "1f4fe12f44e9e0b030fc051e90e76d2f0383f4426331ebf72dd0a806cb32f580",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_vpnsite/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_aksagentpool.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "35eede66b4539d8ebfabaeba04dc70f75614d3bc94b2d19a721b527269e44404",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_vpnsite/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_mariadbserver.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bcfd0915de197ad7e6d01dd27e5ffe2a8f62d93303f19d5e4c09373a82dc7334",
+ "chksum_sha256": "6c671f81b7aff21b252b4844b16135a8fef889b340f66337e394d87e249e4a28",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_gallery",
- "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_gallery/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_mysqlconfiguration_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d9e284a3a0c4c2ec47a44ac4a7419358ab7d897488fa29de3ae616cfed56ec4d",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_gallery/meta/main.yml",
+ "name": "plugins/modules/azure_rm_galleryimage.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
+ "chksum_sha256": "ef785f694e97dfe2e003f9977873c77a3b0e68306bb9567cc6a366a3ff50e293",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_gallery/aliases",
+ "name": "plugins/modules/azure_rm_hdinsightcluster.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e676d2331077a7a453c2694fef48b0b56195d00e5a1009e3f668a7e174abd16b",
+ "chksum_sha256": "56f82f0e1dece88b1eb6f238dd564ec67d93ed521cc437233c41e805a2ce0bbc",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_gallery/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_aks.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d63a516ee5a970d80bea017097e3d474a59b34c0dc58f0d0ecaced542dfbb5fa",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_gallery/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_servicebustopic.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "22d0d3850e426784e4df1c303a1857ea5cbaf9735e5ed6df62442ac04aba5216",
+ "chksum_sha256": "3061e6f04b67b71c3c7d09566a35916f130745ffc7dd1b472385d78587140da3",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_dnsrecordset",
- "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_dnsrecordset/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_cognitivesearch_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e5e926aea80ecc40b2a0c06745ed85287f4f6f83692af2ad78e7ea641c8d463",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_dnsrecordset/meta/main.yml",
+ "name": "plugins/modules/azure_rm_postgresqlserver.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
+ "chksum_sha256": "665e6153c4700277d41a5b0b83a65601d71b3088868f8e8f93229b91a3d660b1",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_dnsrecordset/aliases",
+ "name": "plugins/modules/azure_rm_account_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "36614727374728e26b5686e9fac66641e5b9c268b6945f2dcd1b4a9c4d2232c3",
+ "chksum_sha256": "4ec8a4640333983bf88ff274ac7eb854329844cf696447b2ce9cdc070e9a093b",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_dnsrecordset/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_vmbackuppolicy_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1493048fce1c74d200efa796b75048be8562b854ce5211f2f8988c7ead43988a",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_dnsrecordset/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_devtestlabenvironment.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9d766be151f93042b7018bd39ac79b987e66389613ce426a70d5683952b5a841",
+ "chksum_sha256": "011a6997e971c489b239d38a889ed0bbf2c90513ebec62aadd64f0ca736e69a5",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_storageaccount",
- "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_storageaccount/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_devtestlabvirtualnetwork_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "abf1007b4b27cf62007827926b3494ca4fadd27670cdef0c8e6d965dafd6e0f5",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_storageaccount/meta/main.yml",
+ "name": "plugins/modules/azure_rm_appserviceplan_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
+ "chksum_sha256": "2feccbb74790330b291a4ab0f8bcf3d4ba44f5bd2c18490aff02c92f3d043e09",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_storageaccount/aliases",
+ "name": "plugins/modules/azure_rm_routetable.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637",
+ "chksum_sha256": "903a9d84fb9a4c7aac19a8c54c32e414e364570fe6d02b56427b8c9a8263e979",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_storageaccount/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_openshiftmanagedcluster_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "cfea70f6d3c1cb3fe2a04e7a06d9887a6d9b95ae68015f2455cde00bb48b8844",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_storageaccount/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_devtestlabenvironment_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cddf19a5eb8e886612cfea1a81f43967228e1375327c04e984a143e6bf5d495f",
+ "chksum_sha256": "1b274684226da721ee03fdd590bb307709565a0a989ddb1a409a07db7c3b2e50",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_mysqlserver",
- "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_mysqlserver/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_privatednszone.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c4def272c347cc85f0e108b4392b69eabd6e9caf432cbb84b2acc902bd8a3f34",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_mysqlserver/meta/main.yml",
+ "name": "plugins/modules/azure_rm_iothub_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
+ "chksum_sha256": "5ceef9d30aeb4826188b1c96a6d955955e99ae90a1e8b9ff437859f82a3cdd5a",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_mysqlserver/aliases",
+ "name": "plugins/modules/azure_rm_virtualmachineimage_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2c74420c4bc9cc5d8af14406a1d97ea762c6b8afa4de8728a4a833b2e742cf41",
+ "chksum_sha256": "81e679d55f2d54420d960d51e6f0318cec3b781dd37a062df0b0ff9e1756797e",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_mysqlserver/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_monitorlogprofile.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0951e10121e28230e99e7a3143ce444c9bc4cbf8b7858033c6dd5d071e1ac579",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_mysqlserver/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_postgresqlflexibledatabase_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "743277ee9a1eda331e62acae9a94ba4820d4bef31de88a77008d62fdda27874c",
+ "chksum_sha256": "e0e60a876bea1ad5af26ff70972b0ee0ada7f8435b51cb0a679ffd08f90212f6",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_expressroute",
- "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_expressroute/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_devtestlab.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2ee7422c462798a4b45173196c63c87773a6e863597e2aaa80608102d0e4d497",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_expressroute/meta/main.yml",
+ "name": "plugins/modules/azure_rm_devtestlabarmtemplate_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
+ "chksum_sha256": "92ab9069e528f924357f86307b0e0714d26a089381fe7ae5a833bd1a07071fc7",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_expressroute/aliases",
+ "name": "plugins/modules/azure_rm_keyvaultsecret.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0",
+ "chksum_sha256": "11ac0f42fd18e2f8480376dc2021d461cbe09bd15464c089a5863ea09953b157",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_expressroute/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_galleryimageversion.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5696dced8e1885d7512b1289d87a9165d65071b8f7dfad7fa3d172d1e00b354f",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_expressroute/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_availabilityset.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0fee3fb92d49fcebdc6564a4becd35f638cfa294e5d893fc5adf2fff21ac072b",
+ "chksum_sha256": "685bb7c2dfeaac6f1042b164d014064dcad6b8865cbe764da3ea9ab5f23a9a76",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_devtestlab",
- "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_devtestlab/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_mariadbdatabase.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f8dc569f2de810f80a09d827c276f44fd85dc254766b82bed9769846f41008b6",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_devtestlab/meta/main.yml",
+ "name": "plugins/modules/azure_rm_sshpublickey_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
+ "chksum_sha256": "b02d533ef59cd58cdc9668f7f5eda1b7df55d75f0c56293fcd8ba50c2f39aebb",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_devtestlab/aliases",
+ "name": "plugins/modules/azure_rm_virtualnetworkpeering.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "435162ac2df7aa373bc2d191a07d79c283d3891a1278b0277f85e6112b96fc03",
+ "chksum_sha256": "f0ee463d7cbde4f3c704542e0ff6e8220b22f436b1014b15a355e8c832845ffd",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_devtestlab/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_privatelinkservice.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5c56fae085180b9c34424f1cb9fce62adaac67e7107f556702f1a8b9ae00025a",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_devtestlab/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_webappvnetconnection.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "17fd6c08f41838809e461f199a62e373c8bf28c5d90199bf09340ae9762dd252",
+ "chksum_sha256": "5f823a8fd9802af336c53b103f05d687a20989e92334d7bc122f7ccb62a6a410",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_storageshare",
- "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_storageshare/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_appgateway_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fbe1b90752ce94a33ab1c3e6771f90e4fe87d676e99819e15da631fe5fe2cea5",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_storageshare/meta/main.yml",
+ "name": "plugins/modules/azure_rm_postgresqldatabase_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
+ "chksum_sha256": "3c896791d9f215a0ab5c7cb5315bcc302392ba07eea4081b4c68cf392c7013c2",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_storageshare/aliases",
+ "name": "plugins/modules/azure_rm_mariadbconfiguration_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637",
+ "chksum_sha256": "783f344263d15fef8444cab2f98286515b584c64945f759d1c45ab3363ae1304",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_storageshare/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_storageaccount_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3bd4cbd10fcd4f1ea3c79e717e5323436f9bea1f0f49000015d098ba01ba943e",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_storageshare/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_publicipaddress_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8428a40d80a569d0c5ac929641e4befc59b86cf7c7cc4da72add3b5eb4570202",
+ "chksum_sha256": "7c60893a6d181b60254e2b8e2dca0aae0c83c1f98bf2e1a6f2ab6206a222112f",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_containerregistry",
- "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_containerregistry/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_galleryimage_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fe094e6c2005824059c1dc30f851d8c0df973c8f75148f1f1a3b7ed7a69bb262",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_containerregistry/meta/main.yml",
+ "name": "plugins/modules/azure_rm_storageshare_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
+ "chksum_sha256": "c30615415440ade0b39196ccd619a923cfce2162548c18c7edaec635f46e84e3",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_containerregistry/aliases",
+ "name": "plugins/modules/azure_rm_sqlfirewallrule.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec1ff0ecb096def7880d4a1aab74cae1ee3e46dbdba9df7f476b7311ee64f2ab",
+ "chksum_sha256": "bf215ff5460bd7561374c1013e93dd13406286bedf9bb34fe5c63a423d65b996",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_containerregistry/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_expressroute_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5e302a549f10b209ec9b8d61051f3ddf478eea0e4d99d8eb9af1db568975994f",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_containerregistry/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_availabilityset_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7eab7dde3b4ad416e882a673e1b671770c760c1d2ff97f9c21606a24bb3a7540",
+ "chksum_sha256": "5210c3fbf5fd2f5b702cd82ba5cf7b44604231bebbe9f00a71ee71616a8e2e6b",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_acs",
- "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_acs/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_webapp.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3905f0d95ea3661bb716b8b1f6c7d0806ce92cb5eeec61824d0ec8657d75824f",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_acs/meta/main.yml",
+ "name": "plugins/modules/azure_rm_eventhub.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
+ "chksum_sha256": "aeadcc0ec44f966ae318556be223ecbbe4198c412c9d34d1360d724aa919ce0e",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_acs/aliases",
+ "name": "plugins/modules/azure_rm_postgresqlflexibleserver_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2f7e954a810d0341b1aed1d34e5684bc502980bb6ebbe6a46fb03163ed0e11db",
+ "chksum_sha256": "8be887b3634bf62a040d6ffbb5d1d5317d672761144d3967856a574cac4c7f17",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_acs/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_servicebustopicsubscription.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7ffbac3a815640add669c05c8c29d78ac433ccd8e9762540746eef25457f6829",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_acs/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_sshpublickey.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ecad2cdce0986a34a8f64d2bcbcbd742d99a0083d4e2773cc6a5482a5d529b9c",
+ "chksum_sha256": "b30925c6282e8eeb24532186779ef38ea30a1780f6ac2baf52b0d8d2f1380bbe",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_storageblob",
- "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_storageblob/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_devtestlabcustomimage_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b7cee683acac28bef8c299a125222c4f9d7ec64ebc9a56a3ae8aacc698d3a09b",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_storageblob/meta/main.yml",
+ "name": "plugins/modules/azure_rm_adpassword_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
+ "chksum_sha256": "133c3630a9e91f45a7c86c05453240143d77f15f0bc985bd8c36128821ae4b3d",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_storageblob/aliases",
+ "name": "plugins/modules/azure_rm_vpnsite.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637",
+ "chksum_sha256": "6f61d4a29a0d5b8270df41060245bdcd633e9b6d16e388cc97e19c828578872b",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_storageblob/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_apimanagementservice_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ed595234eeeeafd2c72aefcafbf6d13d86d057bfab2a41ae8b31b2690d74a2ff",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_storageblob/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_virtualmachineextension.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b93536f3d35eaa0d49a0bfb1ce75902b524b86c0db95f3e43122088dcfcac442",
+ "chksum_sha256": "09bd02e50c12aa9e602e8ac7b4312b2619be27b656114309625c9aa39fbcb97a",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_storageblob/files",
- "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_storageblob/files/Ratings.png",
+ "name": "plugins/modules/azure_rm_route.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "20cdf86ae984fb64eefdc57a0e03f34c83cb8b27834b33c84768cc2b62cf9d68",
+ "chksum_sha256": "f290a0e704d3225c8689ac3a7a9523facc263adace73b8193906cb5ee94bffbd",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_loganalyticsworkspace",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_mariadbserver_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3b836969fea8c255c6aeddca297111eef43141755a9b61677661dd581bb2f1a4",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_loganalyticsworkspace/meta",
- "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_loganalyticsworkspace/meta/main.yml",
+ "name": "plugins/modules/azure_rm_vmssnetworkinterface_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
+ "chksum_sha256": "968c1e5781fdca422d62eeea87dd9ac45132e5f03c7e3a91ca6b15d0683eb944",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_loganalyticsworkspace/aliases",
+ "name": "plugins/modules/azure_rm_sqlelasticpool_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6ab21fb1deaf7061dd270b8ca0bf7c6e585eac172153559349e997150abbcaf",
+ "chksum_sha256": "05959ef86783c8274fe64c2c1cec19208c37b3d038e6556ffb3a20b51813375c",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_loganalyticsworkspace/tasks",
- "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_loganalyticsworkspace/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_publicipprefix.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "529ae2dab2d63d3af2eab9ff5fe9b466a9c2bf3bf600d0a5221126ddec9be288",
+ "chksum_sha256": "fd96262bbb96e29f08befba0e8ce69102066161089584b8cdf2f3ab6789fb6fc",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_backupazurevm",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_cdnendpoint_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4311037a5b5f1a98e3c03b7fa222f259e996783695c05fc0409990f95aa2dacb",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_backupazurevm/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_hostgroup.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7f3b26f577bb53702d0ed884da4c0c587dc6a186b7bdf9b87d3765c7dadcd89f",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_backupazurevm/meta/main.yml",
+ "name": "plugins/modules/azure_rm_containerregistry_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
+ "chksum_sha256": "b176c5d28ade7bb04fb50a82ea0c59987cc004136fcfc37a50cfa240d8c29cc3",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_backupazurevm/aliases",
+ "name": "plugins/modules/azure_rm_aksupgrade_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "91c612e6c7b96f80e7e1cede3dc0ef7431a2900356b7e85a7521e2679bfcfa49",
+ "chksum_sha256": "e40923a0ba91ba10ec91ccd2960c60501d5e60c0287ab2578c66d756b865409f",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_backupazurevm/tasks",
- "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_backupazurevm/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_diskencryptionset_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4ac0d2995ac62544c567223a1e45c1b1fc568b840b645d5b42a0b41fd4df1661",
+ "chksum_sha256": "586109c40b10714b5280368db2802fca8d4fc87f797e2b0d5084bb5e7a4df3df",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_registrationdefinition",
- "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_registrationdefinition/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_registrationdefinition/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_registrationdefinition/aliases",
+ "name": "plugins/modules/azure_rm_aksagentpool_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "262ad6ab8a8087f2f21d4f26a2c2d02c347a7edf0fb1af8fdb931ab1c1087bbb",
+ "chksum_sha256": "92c6e3a0f537164ae87f3cf64dd071238a5c8349d7ca84a16826720fc5b82e44",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_registrationdefinition/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_registrationdefinition/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_privatednsrecordset_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b1e2343656426831e5aadf56883b897f520bfc13adee76347b787f396f037855",
+ "chksum_sha256": "ca64fe771c93ee29952634b1acd63d8ae35c0f36b4ef3a33f6ac1ef0994e2e42",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_availabilityset",
- "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_availabilityset/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_availabilityset/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_availabilityset/aliases",
+ "name": "plugins/modules/azure_rm_openshiftmanagedclusterkubeconfig_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5647901b6198849a4dd58b7fb51aee85b889220f80acde88cea67bffff453d8d",
+ "chksum_sha256": "611955771172bb4644da4c97ee0c5131b303bcb301677e636f55f3ee9df3abfe",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_availabilityset/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_availabilityset/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_privatednszonelink.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0d096b5b5000fd2c1c259adae048dd6ac824c2441db10e6fe352282c8bb77b8a",
+ "chksum_sha256": "4166cc9a7e671531be63455046c657896ef9ec1e35a84f7c9bf5bc39cd50bf11",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_hdinsightcluster",
- "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_hdinsightcluster/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_hdinsightcluster/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_hdinsightcluster/aliases",
+ "name": "plugins/modules/azure_rm_aduser.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dffdf5ca6061cf1a43744d6b7e0bb18a4020eed3f693702082b2314f982c65a6",
+ "chksum_sha256": "f455cefd4a7af853f672ef7bffbc09422cd9f659841ac35ddc60a4a29c5cde65",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_hdinsightcluster/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_hdinsightcluster/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_datalakestore_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2a0464f133b840983fad3fa552279ac8aca4a07023877e84bd273e8bde440f65",
+ "chksum_sha256": "64ced3d20472f4e29c76baed328f40e9bc1483583f04fbf7e69e9346b5ed07ad",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_webappvnetconnection",
- "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_webappvnetconnection/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_webappvnetconnection/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_webappvnetconnection/aliases",
+ "name": "plugins/modules/azure_rm_virtualmachinescaleset_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "262ad6ab8a8087f2f21d4f26a2c2d02c347a7edf0fb1af8fdb931ab1c1087bbb",
+ "chksum_sha256": "5925fb4d64f27c1460dc96e40aaa1eabda5612174aa598a717856b2861540662",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_webappvnetconnection/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_webappvnetconnection/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_dnsrecordset.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fe11d34bfc4836a138318153cd0df0bb89f64d2d6d64f9dc7843704f1bd60760",
+ "chksum_sha256": "291de8eb7d89ed612be3a3777aae9f947339745011f5f513cb14925f375c55a3",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_networkinterface",
- "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_networkinterface/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_networkinterface/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_networkinterface/aliases",
+ "name": "plugins/modules/azure_rm_virtualmachinescalesetinstance.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "79cafc6b10612f907e2e4a97bac50c9948ac0a0dd5030875a9465204a6323b48",
+ "chksum_sha256": "29c4528fce1aea43abda1fed65f9d49ef13b592592174c2305fd581e62cdcf8d",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_networkinterface/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_networkinterface/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_hostgroup_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cd2b9fd7ff5b256d26839ba3646b9347fa95f8fd6b1104e7f2835e1d7b7b2624",
+ "chksum_sha256": "05d3069e290c810fe454923e22f4aae4932aa8924b12d872039904d87b779a07",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_privatednsrecordset",
- "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_privatednsrecordset/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_privatednsrecordset/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_privatednsrecordset/aliases",
+ "name": "plugins/modules/azure_rm_virtualmachinesize_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "36614727374728e26b5686e9fac66641e5b9c268b6945f2dcd1b4a9c4d2232c3",
+ "chksum_sha256": "24e4730a6256f17cd27877328ed90580bcd2ac93c1b3718b70e18d8c574769a5",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_privatednsrecordset/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_privatednsrecordset/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_managementgroup_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1fc82f73aab3fbd25c62ca6e740a796a286df28c3de2cc6d084619cdb7fd12eb",
+ "chksum_sha256": "728bb535e8dbf3211e4a79123dfa981434dc51423efb046e2bfa6cb35c5949f6",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_proximityplacementgroup",
- "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_proximityplacementgroup/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_proximityplacementgroup/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_proximityplacementgroup/aliases",
+ "name": "plugins/modules/azure_rm_loganalyticsworkspace_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0",
+ "chksum_sha256": "b2ea8f5bf029879cd6b7367c7c07d1f638453ff39e0c9f64c04db9afa3a57f8b",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_proximityplacementgroup/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_proximityplacementgroup/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_monitordiagnosticsetting.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c5c88276931feb2e7c2b7386c1ed4885d19888d5f70cf8c76dd4088fa33fa79d",
+ "chksum_sha256": "a87a1032899109683876d6a6ce5eba1ee931f2c64442c0910d69242a05560b26",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_resourcegroup",
- "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_resourcegroup/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_resourcegroup/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_resourcegroup/aliases",
+ "name": "plugins/modules/azure_rm_trafficmanagerendpoint.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cd30933c00554775a36ee6421935b7d8baf776db7cb35d5a103be9e18b7d2486",
+ "chksum_sha256": "48772694d9d17d8d0f6b0e6d44c4359dbb35861116c38fa933b0db93981f7a76",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_resourcegroup/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_resourcegroup/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_devtestlabvirtualmachine.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ccf92a54443b6b7b1df4139247acd0d9496fb6266d6a99defb4035fb76cb61a3",
+ "chksum_sha256": "01373d3450d1449d03df275df6f2c64b6e067082e5a4ba0c5c6fa569224e58ee",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_virtualhub",
- "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_virtualhub/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_virtualhub/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_virtualhub/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_virtualhub/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_virtualhub/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_vpnsite_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8810084bf5132a43f31c425b77e96134af6d5855dcb4d4ab94ed2b691d555614",
+ "chksum_sha256": "63c87ba7508bb5c7e2f4968c4975b8e85e27260474dcb6f7d558295f9c56a946",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_privatednszone",
- "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_privatednszone/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_privatednszone/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_privatednszone/aliases",
+ "name": "plugins/modules/azure_rm_adgroup_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e131092efb0e9d778baeb38471a15da9b4f8ab9e3425ec4f37aaece309220d47",
+ "chksum_sha256": "c2802b5f00ffe0edaf458e13a4929c6949f61d4d75e1d2b965445eb923fdf206",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_privatednszone/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_privatednszone/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_devtestlabvirtualnetwork.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b2de5836a16a64f95f0494dd53d54cd82716c1133e7707c0c2680d9502dfef5c",
+ "chksum_sha256": "ba592f55f40cb7fa8986e924b493a8e8341db4f399085a963c488aef11626367",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_datafactory",
- "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_datafactory/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_datafactory/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_datafactory/aliases",
+ "name": "plugins/modules/azure_rm_webappslot.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a74040b53394bd68b1885c350f1f62603740e721ca38e01609660895693a3858",
+ "chksum_sha256": "d7c28a3338c7a7ecfa0da50def079ab83286aa1750aa52d13944fbac4fbf2399",
"format": 1
},
{
- "name": "tests/integration/targets/azure_rm_datafactory/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_datafactory/tasks/main.yml",
+ "name": "plugins/modules/azure_rm_loganalyticsworkspace.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eedba69010cd9dad1b57c7e0f7f18eacb0feb43359922cb53c3ba98479e8dfcc",
+ "chksum_sha256": "5f5d8fa3f00c30d80ce2427ccb7c9d8a00e78c255ecfc67fb1de5f37256c3418",
"format": 1
},
{
- "name": "tests/sanity",
- "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/sanity/ignore-2.13.txt",
+ "name": "plugins/modules/azure_rm_devtestlabvirtualmachine_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c88d45d86600e17b8da638521ccef69e6f48ce4a0e1486cb59e09ae1d0d65d57",
+ "chksum_sha256": "37c4b6bc2ca17c75ce12edccfce27959e1f157ed0bf72a78184b8293e96a0d11",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.15.txt",
+ "name": "plugins/modules/azure_rm_devtestlabartifactsource_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c88d45d86600e17b8da638521ccef69e6f48ce4a0e1486cb59e09ae1d0d65d57",
+ "chksum_sha256": "7b31a9bbe98afcb5510621d353069923e449532df0b4e01de5e4fc3b7f421f6b",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.14.txt",
+ "name": "plugins/modules/azure_rm_accesstoken_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c88d45d86600e17b8da638521ccef69e6f48ce4a0e1486cb59e09ae1d0d65d57",
+ "chksum_sha256": "05f2949f236a8f79c474c1caa57df258695e9f0a87f9072abe4aef9ca1d323d6",
"format": 1
},
{
- "name": "LICENSE",
+ "name": "plugins/modules/azure_rm_privateendpoint.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8b1ba204bb69a0ade2bfcf65ef294a920f6bb361b317dba43c7ef29d96332b9b",
+ "chksum_sha256": "9cf71bc67a11a058b6eac5f7c06c3a003ecce968f6fe09285f43dbd81f91fdf9",
"format": 1
},
{
- "name": "sanity-requirements-azure.txt",
+ "name": "plugins/modules/azure_rm_virtualhubconnection.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bd3de2a9921f5fcdfed1582123c18a91bd48b120d2e9c10d9879ef46d40e98f1",
+ "chksum_sha256": "2b3ba5bbf31b9e64c4e0978fa92768ce9115fe39450f5dd8085c775fe4ed2716",
"format": 1
},
{
- "name": "CHANGELOG.md",
+ "name": "plugins/modules/azure_rm_batchaccount.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7f464028041360717ad63fbeeb1a50c208c8d1c13792f1ac55f9aed2449af8da",
+ "chksum_sha256": "8da700f46228d2eda7ba617acfa096136ad1cf5923cb44ca9ea2e67c6ef0bbd0",
"format": 1
},
{
- "name": "release-pipelines.yml",
+ "name": "plugins/modules/azure_rm_mariadbconfiguration.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "26a84e5d665443b05c84c798e9d901a7681cf891436e04b4a16c9f9cfbab1f8a",
+ "chksum_sha256": "f54c337f3d115d08dcac88d6e4fe16ef1db3d9dec1833b033928f227d89ea11b",
"format": 1
},
{
- "name": "CONTRIBUTING.md",
+ "name": "plugins/modules/azure_rm_privatednszonelink_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "290a3dfba9b53aecbf86badacfdcb7f320c9a924e02a8f0b4824785a551d0a39",
+ "chksum_sha256": "93d488b4238c4631765dff43c9a6978f3bef9d8ff35294dba4f34772a85a4284",
"format": 1
},
{
- "name": ".idea",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/azure_rm_backupazurevm_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f347194586ae27419cecae08bec9340ce537b9c9eeb8bf785d25db8b60c99525",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/azure_rm_servicebussaspolicy.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "10d85532d9875ac3da016f15add256df6cf2cbb8a88d4a57ad316bce7df7a45c",
"format": 1
},
{
- "name": ".idea/misc.xml",
+ "name": "plugins/modules/azure_rm_rediscache_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e5df86803b5913746c8d40c348879d7f9442e4a6bfefbae93cc711a640fba506",
+ "chksum_sha256": "a10c697c6832b6d01d4c3645819ee5a8f254715d5b5ac4bdd8db94dbe8fa5602",
"format": 1
},
{
- "name": ".idea/azcollection.iml",
+ "name": "plugins/modules/azure_rm_lock_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a9e614b7294d32d9dd7d25fd7116079ac7e3ac6bbe3043f672cb3db0f828eeeb",
+ "chksum_sha256": "7e2b1cfcf35b517ad440bbb1457931c7481b5fd442e3f4fbd8a3710c549ac9a0",
"format": 1
},
{
- "name": ".idea/modules.xml",
+ "name": "plugins/modules/azure_rm_virtualmachinescalesetextension.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c8aa540922a578f85297bfb3bacf703eb49b573c6c229fc2323e6a90e33bdca6",
+ "chksum_sha256": "a8ef46432cfcc51726f0e9d1ce8003a5e9820432a253d897b420c8423c178f74",
"format": 1
},
{
- "name": ".idea/workspace.xml",
+ "name": "plugins/modules/azure_rm_virtualnetwork.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f87e05eb5e48aba1dff20dbea0fb919b6f3c848d2391064f56028ae939d7101d",
+ "chksum_sha256": "d1f54cd77a98a82bbc32959ec20f38af893dc0a41c442c995ed64d42c53ceedc",
"format": 1
},
{
- "name": ".idea/vcs.xml",
+ "name": "plugins/modules/azure_rm_devtestlabcustomimage.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "62be7e0a7f84ab3c35b4d4bafb890a4951d061eadafde1a10aa3f5d0406db5df",
+ "chksum_sha256": "9c9f8924ff79fc0b02518ff6a8142c1de2fe7ecf2164665def80420e31cd33e0",
"format": 1
},
{
- "name": ".idea/inspectionProfiles",
+ "name": "plugins/modules/azure_rm_bastionhost_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "dcdf18934767abd5f6912ce0bb9cbbff6954c79fab3998fdf9ea3c75f5f9d604",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/azure_rm_keyvault_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6f2320d935c3989cf5f0e0fa1b06e87cced44393b5e772310a9c4e6f49c2fc1f",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/azure_rm_postgresqlconfiguration_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "61b7807ec717db7657e825a2c1bbd815ede63112b9ce0bd4811e1c486ef01fd3",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/azure_rm_publicipprefix_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c7b5a5d41eff443ad1b8ef21a06d230a559c32f11523f09060ccd3ea1101c933",
+ "format": 1
+ },
+ {
+ "name": "plugins/inventory",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": ".idea/inspectionProfiles/profiles_settings.xml",
+ "name": "plugins/inventory/azure_rm.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "47b59006cb06078a81321afbd3b443cb9255af87a78989411a8d42c61f9b66ec",
+ "format": 1
+ },
+ {
+ "name": "plugins/lookup",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "plugins/lookup/azure_keyvault_secret.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "80c27a8f8599afe6734f00e807a39e293e3569cf09517d2e09254996fe8c8818",
+ "format": 1
+ },
+ {
+ "name": "plugins/lookup/azure_service_principal_attribute.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "32b87b6f2e4b429d14d2f428cb504a73d1e2ab75a36ac99556f58a036ab12c7b",
+ "format": 1
+ },
+ {
+ "name": "CONTRIBUTING.md",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "290a3dfba9b53aecbf86badacfdcb7f320c9a924e02a8f0b4824785a551d0a39",
+ "format": 1
+ },
+ {
+ "name": "azure-pipelines.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1f55cf75a25502f8322df2fc8640e52f85fed4459b8c26fee3c75295f9c45552",
+ "format": 1
+ },
+ {
+ "name": "CredScanSuppressions.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6172c5997eeb3cd19c9ca2b5b97d6e2983cdd1fa60b2460d7bbb74055edcaa46",
+ "chksum_sha256": "98c0ee6a0b7a115787cf109a8c0e2ea4a61df6751ecda37915b22ffb44a1128d",
"format": 1
},
{
- "name": ".idea/.gitignore",
+ "name": "sanity-requirements-azure.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1bfdece3645ed8ed356030f22cc2004dc3f401ff060ac3d24de811c3bcd82e16",
+ "chksum_sha256": "62326475a7ffd00afcdaf8a3d89158f778593e56e8b694a388daf9f523b53648",
"format": 1
},
{
"name": ".gitignore",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "702d6332d579931561017161f2d96eb3b023a006c94ed262d789411d0f21bd26",
+ "chksum_sha256": "38926e151151b0e009deae6bd0bfc42f6ac03c8d1f900d32acc6e3711447f321",
+ "format": 1
+ },
+ {
+ "name": "pr-pipelines.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ce013c171143675f4d44e20b4b7d3907c5cee12c53f055c2c3bf6edebb1342ea",
+ "format": 1
+ },
+ {
+ "name": "release-pipelines.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "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 <ansible@microsoft.com>"
],
@@ -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/tests/integration/targets/azure_rm_keyvault/lookup_plugins/azure_service_principal_attribute.py b/ansible_collections/azure/azcollection/plugins/lookup/azure_service_principal_attribute.py
index c6f488f13..1b1941026 100644
--- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvault/lookup_plugins/azure_service_principal_attribute.py
+++ b/ansible_collections/azure/azcollection/plugins/lookup/azure_service_principal_attribute.py
@@ -5,15 +5,16 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = """
-lookup: azure_service_principal_attribute
+---
+name: azure_service_principal_attribute
requirements:
- - azure-graphrbac
+ - msgraph-sdk
author:
- - Yunge Zhu <yungez@microsoft.com>
+ - Yunge Zhu (@yungezz)
-version_added: "2.7"
+version_added: "1.12.0"
short_description: Look up Azure service principal attributes.
@@ -49,12 +50,13 @@ 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
+ 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:
- raise AnsibleError(
- "The lookup azure_service_principal_attribute requires azure.graphrbac, msrest")
+ pass
class LookupModule(LookupBase):
@@ -72,21 +74,28 @@ class LookupModule(LookupBase):
_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'])
+ _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)
+ 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 = GraphRbacManagementClient(azure_credentials, credentials['azure_tenant'],
- base_url=_cloud_environment.endpoints.active_directory_graph_resource_id)
+ client = GraphServiceClient(azure_credential_track2)
- response = list(client.service_principals.list(filter="appId eq '{0}'".format(credentials['azure_client_id'])))
- sp = response[0]
-
- return sp.object_id.split(',')
+ 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/<subsid>/resourceGroups/<rg>/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 <haiyzhan@micosoft.com>
+#
+# 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/netapp/azure/tests/integration/targets/azure_rm_netapp_account/aliases b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_accesstoken_info/aliases
index 759eafa2d..3c63edec5 100644
--- a/ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_account/aliases
+++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_accesstoken_info/aliases
@@ -1,3 +1,3 @@
cloud/azure
-shippable/azure/group3
+shippable/azure/group15
destructive
diff --git a/ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_account/meta/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_accesstoken_info/meta/main.yml
index 95e1952f9..95e1952f9 100644
--- a/ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_account/meta/main.yml
+++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_accesstoken_info/meta/main.yml
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, <yungez@microsoft.com>
-# (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 <yungez@microsoft.com>
-
-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/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, <yungez@microsoft.com>
-# (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 <yungez@microsoft.com>
-
-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, <yungez@microsoft.com>
-# (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 <yungez@microsoft.com>
-
-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/netapp/azure/tests/integration/targets/azure_rm_netapp_snapshot/aliases b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_postgresqlflexibleserver/aliases
index 759eafa2d..5d29c6c4d 100644
--- a/ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_snapshot/aliases
+++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_postgresqlflexibleserver/aliases
@@ -1,3 +1,3 @@
cloud/azure
-shippable/azure/group3
+shippable/azure/group10
destructive
diff --git a/ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_snapshot/meta/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_postgresqlflexibleserver/meta/main.yml
index 95e1952f9..95e1952f9 100644
--- a/ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_snapshot/meta/main.yml
+++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_postgresqlflexibleserver/meta/main.yml
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/netapp/azure/tests/integration/targets/azure_rm_netapp_volume/aliases b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_publicipprefix/aliases
index 759eafa2d..aa77c071a 100644
--- a/ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_volume/aliases
+++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_publicipprefix/aliases
@@ -1,3 +1,3 @@
cloud/azure
-shippable/azure/group3
+shippable/azure/group2
destructive
diff --git a/ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_volume/meta/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_publicipprefix/meta/main.yml
index 95e1952f9..95e1952f9 100644
--- a/ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_volume/meta/main.yml
+++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_publicipprefix/meta/main.yml
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,724 +127,752 @@
"format": 1
},
{
- "name": "docs",
+ "name": "tox.ini",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c3d0045e391c8743eef92c7f130b1d800d7bfc38952a8537d13c7401a8f45e11",
+ "format": 1
+ },
+ {
+ "name": "requirements.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "883b106f13b0c6536f55619685ddca25968b4167dedb12e08fa37c93f4c63b25",
+ "format": 1
+ },
+ {
+ "name": "tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "docs/cisco.asa.asa_acls_module.rst",
+ "name": "tests/config.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4bf9ceee633d44f4509326f63e3c9f5aa7e21dfe85e1460ee899c4d155e54215",
+ "chksum_sha256": "4129945061440c8d8c281590b8054b194f5958833c722aa40e878b09038c380e",
"format": 1
},
{
- "name": "docs/cisco.asa.asa_cliconf.rst",
+ "name": "tests/sanity",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/sanity/ignore-2.10.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ad972424785be2caafac8900de928fb6dee9fdd793c66da9439f19ec031b72d6",
+ "chksum_sha256": "8000e45c60499f99ceece9b4c2e153a0b50d02906850dcfc758d08c42b9ac066",
"format": 1
},
{
- "name": "docs/cisco.asa.asa_command_module.rst",
+ "name": "tests/sanity/ignore-2.9.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "de89e062700396aecebc8688205cf4bb67f6c823f59ade25c8d0941e7f95e80e",
+ "chksum_sha256": "8000e45c60499f99ceece9b4c2e153a0b50d02906850dcfc758d08c42b9ac066",
"format": 1
},
{
- "name": "docs/cisco.asa.asa_config_module.rst",
+ "name": "tests/sanity/ignore-2.11.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cc3c3963268c8bc964ffefdc2d18bd767f74fdbddbddda33af421d8e9e6e41a0",
+ "chksum_sha256": "a726fa26f4d91f96be9d8d98ab93c32b82bc16a69f9ab116ddeee2c042cbe4b1",
"format": 1
},
{
- "name": "docs/cisco.asa.asa_facts_module.rst",
+ "name": "tests/sanity/ignore-2.12.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "54782ce3a5835e74bc09a4ec6fd3bd833230f10485bac2d7d1c374676192b925",
+ "chksum_sha256": "5e57cb2fa7cd31227fcf1fd7085c7213f560ce12895b80211aeba768ec9de041",
"format": 1
},
{
- "name": "docs/cisco.asa.asa_ogs_module.rst",
+ "name": "tests/sanity/ignore-2.16.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2187a61050ddfc69156df4780558b2f2fca740ebb5e1a17bf197ba220362e2f8",
+ "chksum_sha256": "9a01d39f278abada36c8f698d56c3a0c17efdf85178ceba34c1dc3c523679b9d",
"format": 1
},
{
- "name": "meta",
+ "name": "tests/sanity/ignore-2.17.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9a01d39f278abada36c8f698d56c3a0c17efdf85178ceba34c1dc3c523679b9d",
+ "format": 1
+ },
+ {
+ "name": "tests/sanity/ignore-2.13.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9a01d39f278abada36c8f698d56c3a0c17efdf85178ceba34c1dc3c523679b9d",
+ "format": 1
+ },
+ {
+ "name": "tests/sanity/ignore-2.14.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9a01d39f278abada36c8f698d56c3a0c17efdf85178ceba34c1dc3c523679b9d",
+ "format": 1
+ },
+ {
+ "name": "tests/sanity/ignore-2.15.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9a01d39f278abada36c8f698d56c3a0c17efdf85178ceba34c1dc3c523679b9d",
+ "format": 1
+ },
+ {
+ "name": "tests/.gitignore",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b5726d3ec9335a09c124469eca039523847a6b0f08a083efaefd002b83326600",
+ "format": 1
+ },
+ {
+ "name": "tests/integration",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "meta/runtime.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "483de672a6e528a7f5f2cd50f5d8d6a650b29e9ed55d72b0cb0965742286facb",
+ "name": "tests/integration/targets",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins",
+ "name": "tests/integration/targets/asa_facts",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/action",
+ "name": "tests/integration/targets/asa_facts/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/action/__init__.py",
+ "name": "tests/integration/targets/asa_facts/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
- "name": "plugins/action/asa.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7b92aa8d78762e91888d71583077ff00c127ebcde8551b94e6b96e495943157c",
+ "name": "tests/integration/targets/asa_facts/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/cliconf",
+ "name": "tests/integration/targets/asa_facts/tests/cli",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/cliconf/__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/cliconf/asa.py",
+ "name": "tests/integration/targets/asa_facts/tests/cli/default_facts.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dda3e968fc69abbddc6f0742420d8b0e11e2d44358a20239025a6f54ebc4f41c",
+ "chksum_sha256": "5bda0a98b84f8436c2a3d5ad6f22d3d63a5ed61e8173793e0d0f9cbc78c8c376",
"format": 1
},
{
- "name": "plugins/doc_fragments",
+ "name": "tests/integration/targets/asa_facts/tests/cli/all_facts.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "90f62bf5f42692f354534580d39774a8b65e1194b6fa268e1a81e2083c39b7e8",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/asa_facts/tests/cli/not_hardware.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0733ddb2fcf5a9e2d272f413b41df5d537db53231e049c10497a282e45f2885c",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/asa_facts/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/doc_fragments/__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/doc_fragments/asa.py",
+ "name": "tests/integration/targets/asa_facts/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "130cf43f0307ebbc4bc121d6b0616af8895c602bc9bc3e2abd0341fd10a49500",
+ "chksum_sha256": "615d4358df331e4239442a5b6656390598bf4e857bd6acd1bad18cee0542e6c2",
"format": 1
},
{
- "name": "plugins/module_utils",
+ "name": "tests/integration/targets/asa_config",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network",
+ "name": "tests/integration/targets/asa_config/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/asa",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/asa_config/defaults/main.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
- "name": "plugins/module_utils/network/asa/argspec",
+ "name": "tests/integration/targets/asa_config/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/asa/argspec/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/argspec/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/argspec/acls/acls.py",
+ "name": "tests/integration/targets/asa_config/tests/cli/backup.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fcae6ce706327a09b0ab8b82c91a55186f9974e5a0e190a5188c49bcc8cb93e7",
- "format": 1
- },
- {
- "name": "plugins/module_utils/network/asa/argspec/facts",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "b9a3f2fd164079dba1ce9b9d7c54f229b882c3d0bfd3adca82371c365383c89e",
"format": 1
},
{
- "name": "plugins/module_utils/network/asa/argspec/facts/__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/argspec/facts/facts.py",
+ "name": "tests/integration/targets/asa_config/tests/cli/save_when.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "58646002557f192f15baf87346550ea1a6b37b36596b47bc66a1465540e26e01",
+ "chksum_sha256": "3b5c27c229aa6cad17c276c37fdfdcd6599921f9cfe5872cb4b5ce6e5b9ae64f",
"format": 1
},
{
- "name": "plugins/module_utils/network/asa/argspec/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/argspec/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/argspec/ogs/ogs.py",
+ "name": "tests/integration/targets/asa_config/tests/cli/basic.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5d0487f754e8a1b8968ec7cda2bab9849ed0a920dfc9da1d77930c821b613bdc",
+ "chksum_sha256": "64c12ec0001e3a74b2eb4544ddfc7b6fd9b47120613675c836dceede1efecd14",
"format": 1
},
{
- "name": "plugins/module_utils/network/asa/argspec/__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/config",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/asa_config/tests/cli/sublevel.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "153e3da671217a483d8e6b8c3d6d10873164a3faa9f6af410125cba547e44027",
"format": 1
},
{
- "name": "plugins/module_utils/network/asa/config/acls",
- "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/config/acls/__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/config/acls/acls.py",
+ "name": "tests/integration/targets/asa_config/tests/cli/force.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "54d4f42507c10b4b994457008be4c8377e78ea71f719f1a08c8a8fe39793ba1d",
+ "chksum_sha256": "3a84229b96d4ab9bbabfa9dfc4045008a0476b2cd2dc9fd8ef565dcbaebd1b91",
"format": 1
},
{
- "name": "plugins/module_utils/network/asa/config/ogs",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/asa_config/tests/cli/defaults.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "380fa6f2c2dd6dd83478737e5e6752ef011256e76292d422c01a9e324c4810b9",
"format": 1
},
{
- "name": "plugins/module_utils/network/asa/config/ogs/__init__.py",
+ "name": "tests/integration/targets/asa_config/tests/cli/sublevel_exact.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "2a8ee340d192f59f19bafb617a8138e3e1c6b1b4962b66a2c93b9e5c940f7245",
"format": 1
},
{
- "name": "plugins/module_utils/network/asa/config/ogs/ogs.py",
+ "name": "tests/integration/targets/asa_config/tests/cli/removal_error.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fff92969cf78d6efb283bec90fcdf347f34c63011f01e97a06eeafce6bb6aea3",
+ "chksum_sha256": "a25a6865359950d61ae00f6bdd47fd4f952521ca0525bcf863741618cf23b2ca",
"format": 1
},
{
- "name": "plugins/module_utils/network/asa/config/__init__.py",
+ "name": "tests/integration/targets/asa_config/tests/cli/toplevel_nonidempotent.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "cdbbf917190b6c099d6205a64342c7dcd91ed499f2a81e024d4b28e27f7b53bf",
"format": 1
},
{
- "name": "plugins/module_utils/network/asa/facts",
+ "name": "tests/integration/targets/asa_config/tests/redirection",
"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/redirection/shortname.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6dbd8ee31865bbe879cb1a8b35b25bd529a84f8820525a0388a38ba147a66f66",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/asa_config/templates",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/asa/facts/acls/__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/facts/acls/acls.py",
+ "name": "tests/integration/targets/asa_config/templates/defaults/config.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b7289bcc81ad8747f031c4deb4c888e8eabed74ce40b5e0930d6c7e199fd8325",
+ "chksum_sha256": "fb99eb6895703bb60ee1260b4fda100bc0715b494b276bd30af5f86140e3636c",
"format": 1
},
{
- "name": "plugins/module_utils/network/asa/facts/legacy",
+ "name": "tests/integration/targets/asa_config/templates/basic",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/asa/facts/legacy/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "plugins/module_utils/network/asa/facts/legacy/base.py",
+ "name": "tests/integration/targets/asa_config/templates/basic/config.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1d90560b4d39f8e0adbe73753790528ba39dbe4b7edc70d8089706da1a84823e",
+ "chksum_sha256": "65308b2b6c691f26581d2c167f0bee0c6175d39279ec8578bb86ca795d7de6fb",
"format": 1
},
{
- "name": "plugins/module_utils/network/asa/facts/ogs",
+ "name": "tests/integration/targets/asa_config/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/asa/facts/ogs/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "plugins/module_utils/network/asa/facts/ogs/ogs.py",
+ "name": "tests/integration/targets/asa_config/tasks/redirection.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4889d0ef1f24d9aebaf0653e16669f19277989efb52ee0042f49fcd5cd903162",
+ "chksum_sha256": "090d83ccf27d81d1b7d2baace335d2ff9082f7cd8f79b6958daefdc33b8b17e3",
"format": 1
},
{
- "name": "plugins/module_utils/network/asa/facts/__init__.py",
+ "name": "tests/integration/targets/asa_config/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "56c0833e7848214f8dcfeffcd6d4d37828d80f9366ceef5eb25c61b0228979c1",
"format": 1
},
{
- "name": "plugins/module_utils/network/asa/facts/facts.py",
+ "name": "tests/integration/targets/asa_config/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "974b74159f6d3e59e5a56f8677c26e470860eae57ecb53c91c3e5cefe552df91",
+ "chksum_sha256": "4c98b618972ade76b972540d358cfee5e45ec0501c17df5120227fddd0ff3a83",
"format": 1
},
{
- "name": "plugins/module_utils/network/asa/providers",
+ "name": "tests/integration/targets/asa_smoke",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/asa/providers/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "plugins/module_utils/network/asa/providers/module.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9b87ca2036255d1dcd9080d73f0997df1a19af0fa9466f84e3a7eef8a803de9a",
+ "name": "tests/integration/targets/asa_smoke/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/asa/providers/providers.py",
+ "name": "tests/integration/targets/asa_smoke/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2d12b31ea6902b70db0eb9e71564b586d4e62b90655345669eb372f1f3f9c9cc",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "plugins/module_utils/network/asa/rm_templates",
+ "name": "tests/integration/targets/asa_smoke/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/asa/rm_templates/acls.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f244c13a86b80d08dae36977a2c7344baf8913b00df67128fc0caf4c7eb81865",
- "format": 1
- },
- {
- "name": "plugins/module_utils/network/asa/rm_templates/ogs.py",
+ "name": "tests/integration/targets/asa_smoke/tests/caching.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ff869d21e976eeeef522b52b44df1c276e97dbb90cee0aa13a9eedc42570ae0b",
+ "chksum_sha256": "4a956e5bd4218f18bd151bb253589e06d96f0ca012afeeb815a77f6213148945",
"format": 1
},
{
- "name": "plugins/module_utils/network/asa/utils",
+ "name": "tests/integration/targets/asa_smoke/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/asa/utils/__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/module_utils/network/asa/utils/utils.py",
+ "name": "tests/integration/targets/asa_smoke/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "869e911f1d710075554251977a255d09e8054cecce9ba0910f1b52027fc81c2f",
+ "chksum_sha256": "835db3bc2ab92dd760d6730f09922b1e5b90395db7d11c7e374c0ba09f78daf7",
"format": 1
},
{
- "name": "plugins/module_utils/network/asa/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "name": "tests/integration/targets/asa_command",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/asa/asa.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e924eeba5d9c9489c645c7bea52c1ef6ebcb0cb22c70746b78fd25f2fd385a85",
+ "name": "tests/integration/targets/asa_command/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/__init__.py",
+ "name": "tests/integration/targets/asa_command/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
- "name": "plugins/modules",
+ "name": "tests/integration/targets/asa_command/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "name": "tests/integration/targets/asa_command/tests/cli",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/asa_acls.py",
+ "name": "tests/integration/targets/asa_command/tests/cli/bad_operator.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b56a38b92596b7d22ebc6bed87c1587a7732f4a3d7680e274d0afa3553067490",
+ "chksum_sha256": "05d50d802310ba9d35f203b94bcd61bcad7f1a6cb06b678f8c95d4a56fd12c64",
"format": 1
},
{
- "name": "plugins/modules/asa_command.py",
+ "name": "tests/integration/targets/asa_command/tests/cli/timeout.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9fbb4c90a18d3945dfd710c5dbd17f8b81780528e2a9bb8fe3c6136acc76a907",
+ "chksum_sha256": "1fd92e197c788c603c8f4d8f4641d4fd93dd0484f10a1ed0402e54ff526f8080",
"format": 1
},
{
- "name": "plugins/modules/asa_config.py",
+ "name": "tests/integration/targets/asa_command/tests/cli/output.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5210224a3e633f4611401d71d0bb9699827647d3900547ed4f9bb0a27e099640",
+ "chksum_sha256": "e3f0e7ba5086de752b9a87fcac7187b27960487ef1264ed6eb82933ee5560fc9",
"format": 1
},
{
- "name": "plugins/modules/asa_facts.py",
+ "name": "tests/integration/targets/asa_command/tests/cli/contains.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "17fc0b752d583d54f38f878f8122a7fe8db0319b7fbee1519577b588d4034b6c",
+ "chksum_sha256": "03fe833b91682e8d58be13ac1e75c06dc58430cfdc4db46b55a1204e34352d60",
"format": 1
},
{
- "name": "plugins/modules/asa_ogs.py",
+ "name": "tests/integration/targets/asa_command/tests/cli/invalid.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "278c499570e2f0cf5a2c6a48929e9c40530e00ab0ecc4945689858e689808119",
+ "chksum_sha256": "854f342de74002bcae25bc676898bac7c44dccbcb17680ee98ff7d105cccef80",
"format": 1
},
{
- "name": "plugins/terminal",
+ "name": "tests/integration/targets/asa_command/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/terminal/__init__.py",
+ "name": "tests/integration/targets/asa_command/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_command/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3b24a952d8c6d070d4e29c7a6a58d6bc3c0f17741df33ad56b213b87372854f1",
- "format": 1
- },
- {
- "name": "tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "4c98b618972ade76b972540d358cfee5e45ec0501c17df5120227fddd0ff3a83",
"format": 1
},
{
- "name": "tests/integration",
+ "name": "tests/integration/targets/asa_ogs",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets",
+ "name": "tests/integration/targets/asa_ogs/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/asa_acls",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/asa_ogs/defaults/main.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/asa_acls/defaults",
+ "name": "tests/integration/targets/asa_ogs/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/asa_acls/defaults/main.yaml",
+ "name": "tests/integration/targets/asa_ogs/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "1418941753a214f960e5772742927306c42e64decf1f0cc4b7445167801ac377",
"format": 1
},
{
- "name": "tests/integration/targets/asa_acls/meta",
+ "name": "tests/integration/targets/asa_ogs/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/asa_acls/meta/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
- "format": 1
- },
- {
- "name": "tests/integration/targets/asa_acls/tasks",
+ "name": "tests/integration/targets/asa_ogs/tests/cli",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/asa_acls/tasks/cli.yaml",
+ "name": "tests/integration/targets/asa_ogs/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a22906fff9c3194905ad30497e247fa66145b848ec502e050b17332bd3cb148c",
+ "chksum_sha256": "2a00f9c6f94bdf5e1f2dc3431cab004b36946ca4baee07cece978f42254f2806",
"format": 1
},
{
- "name": "tests/integration/targets/asa_acls/tasks/main.yaml",
+ "name": "tests/integration/targets/asa_ogs/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ba31c87031318be43a61d696eab1ba755270c889cd5ae5dd78effad49953342c",
+ "chksum_sha256": "b46fa5bf7986ea33e69d718395dcd529756fae19695d858bb5f2cfddb69acf32",
"format": 1
},
{
- "name": "tests/integration/targets/asa_acls/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/asa_ogs/tests/cli/empty_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "abad4da95ec7d092272595de5569c28efef79203ef5de89e9b6455df5d0702ed",
"format": 1
},
{
- "name": "tests/integration/targets/asa_acls/tests/cli",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/asa_ogs/tests/cli/overridden.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "afe118ea3be25d57e9ab26348bdd52bc4b840490a85f11b9f79563a92eb51834",
"format": 1
},
{
- "name": "tests/integration/targets/asa_acls/tests/cli/_parsed.cfg",
+ "name": "tests/integration/targets/asa_ogs/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a3f566b6a9c72ca243265852b24e9d5a01f4b30b68058134001ecc88b75c00f3",
+ "chksum_sha256": "e775a90f35bf1d02c36f75947efd359595085f0b8d7cda9e70b295a064cb0840",
"format": 1
},
{
- "name": "tests/integration/targets/asa_acls/tests/cli/_populate_config.yaml",
+ "name": "tests/integration/targets/asa_ogs/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "84d196a881a4bc595bc580973d383ec06e46907bdb2188a786d1e080a9729199",
+ "chksum_sha256": "c12d15a33e441f5b5a1462c660d899ed33f258f437e81f1cf7954c11e50bed73",
"format": 1
},
{
- "name": "tests/integration/targets/asa_acls/tests/cli/_populate_network_og.yaml",
+ "name": "tests/integration/targets/asa_ogs/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "82201b0b674b40da9d8f1df8d332a5b0a92453962aa5d995398b61d271d60819",
+ "chksum_sha256": "6bdc390ed516bdb772e8b3e4e9498bb9f8e48c7a023d08e919809e66e62dd979",
"format": 1
},
{
- "name": "tests/integration/targets/asa_acls/tests/cli/_remove_config.yaml",
+ "name": "tests/integration/targets/asa_ogs/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4cf464b3bd8b5375ce936a39c61b4778d28ea9c92c1fc32669149d5dbcb1168e",
+ "chksum_sha256": "f149bbc1ec48feedc896079f15994dd6a5175514dc026e7d12fa417b88d48728",
"format": 1
},
{
- "name": "tests/integration/targets/asa_acls/tests/cli/_remove_og_config.yaml",
+ "name": "tests/integration/targets/asa_ogs/tests/cli/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "386c512bf4a392dfcd2c508a47a29ec7c45729775e0e209c76de3e5095eef7a3",
+ "chksum_sha256": "b902fb274a202ee8efbbe72f3a824a7b390d585235f3e5d9ec3a48682be07a3a",
"format": 1
},
{
- "name": "tests/integration/targets/asa_acls/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/asa_ogs/tests/cli/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eee00a3f750a8b6a6faf31771d210cf6b69745511007de23c4506728d18c1033",
+ "chksum_sha256": "a7f127a390e99667637b87bd4e9297e6d5cafd88d873587ae03cf88f88ec5288",
"format": 1
},
{
- "name": "tests/integration/targets/asa_acls/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/asa_ogs/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b8428ddd338848c6456cd8c991af2ee7dac84d296244187e99086166e552fac7",
+ "chksum_sha256": "0ab9e8d1c4ab5c6c8cff5dbcbd6de19807bc8a736ec05cac65a7358f3d919b1e",
"format": 1
},
{
- "name": "tests/integration/targets/asa_acls/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/asa_ogs/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "35bd267dd0c46ac2d87aba919a0d375caf5dbdd8202d58fc07c9e13a63fe6fea",
+ "chksum_sha256": "2ef178de83b73bbcbb57eec0a53bf1916400afe2a306df42e7421fb7bd1b49a4",
"format": 1
},
{
- "name": "tests/integration/targets/asa_acls/tests/cli/merged.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9601c55b51df1f3e8883106d1253fba4a9126420350a45a75d3486802533ec94",
+ "name": "tests/integration/targets/asa_ogs/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/asa_acls/tests/cli/overridden.yaml",
+ "name": "tests/integration/targets/asa_ogs/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dbf4e1e8f6ccffbb68cd5b42c3012ffcd8a91f4af94bc045bc73b82907c79f39",
+ "chksum_sha256": "ba31c87031318be43a61d696eab1ba755270c889cd5ae5dd78effad49953342c",
"format": 1
},
{
- "name": "tests/integration/targets/asa_acls/tests/cli/parsed.yaml",
+ "name": "tests/integration/targets/asa_ogs/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4d30d81ec523819eb2f59f34323392b89b8fa243485bcf1ce627a9d537e80adc",
+ "chksum_sha256": "7c0ac0f39eb8cbe127ea8c3f461dbbe9ebbc956b1bc3040ef6e4a56564ce4d30",
"format": 1
},
{
- "name": "tests/integration/targets/asa_acls/tests/cli/rendered.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ee80f2ddb0cd38198407d0499e9af0f4f6a4240e5e1dcdf0bc4cf73f907d040f",
+ "name": "tests/integration/targets/asa_acls",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/asa_acls/tests/cli/replaced.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "70fac1dc646c612f07d014d12796fe67e2799f711dca91d18761dd0a2aceef9f",
+ "name": "tests/integration/targets/asa_acls/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/asa_acls/tests/cli/rtt.yaml",
+ "name": "tests/integration/targets/asa_acls/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f7c3c0039b62a050d223a0324c538214989cdfb4ea11a95807519a980f157b0a",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
@@ -855,1039 +890,1053 @@
"format": 1
},
{
- "name": "tests/integration/targets/asa_command",
+ "name": "tests/integration/targets/asa_acls/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/asa_command/defaults",
+ "name": "tests/integration/targets/asa_acls/tests/cli",
"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/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
+ "chksum_sha256": "4cf464b3bd8b5375ce936a39c61b4778d28ea9c92c1fc32669149d5dbcb1168e",
"format": 1
},
{
- "name": "tests/integration/targets/asa_command/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/asa_acls/tests/cli/deleted.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "eee00a3f750a8b6a6faf31771d210cf6b69745511007de23c4506728d18c1033",
"format": 1
},
{
- "name": "tests/integration/targets/asa_command/tasks/cli.yaml",
+ "name": "tests/integration/targets/asa_acls/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4c98b618972ade76b972540d358cfee5e45ec0501c17df5120227fddd0ff3a83",
+ "chksum_sha256": "b8428ddd338848c6456cd8c991af2ee7dac84d296244187e99086166e552fac7",
"format": 1
},
{
- "name": "tests/integration/targets/asa_command/tasks/main.yaml",
+ "name": "tests/integration/targets/asa_acls/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ba31c87031318be43a61d696eab1ba755270c889cd5ae5dd78effad49953342c",
+ "chksum_sha256": "dbf4e1e8f6ccffbb68cd5b42c3012ffcd8a91f4af94bc045bc73b82907c79f39",
"format": 1
},
{
- "name": "tests/integration/targets/asa_command/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/asa_acls/tests/cli/_remove_og_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "386c512bf4a392dfcd2c508a47a29ec7c45729775e0e209c76de3e5095eef7a3",
"format": 1
},
{
- "name": "tests/integration/targets/asa_command/tests/cli",
- "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_command/tests/cli/bad_operator.yaml",
+ "name": "tests/integration/targets/asa_acls/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "05d50d802310ba9d35f203b94bcd61bcad7f1a6cb06b678f8c95d4a56fd12c64",
+ "chksum_sha256": "4d30d81ec523819eb2f59f34323392b89b8fa243485bcf1ce627a9d537e80adc",
"format": 1
},
{
- "name": "tests/integration/targets/asa_command/tests/cli/contains.yaml",
+ "name": "tests/integration/targets/asa_acls/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "03fe833b91682e8d58be13ac1e75c06dc58430cfdc4db46b55a1204e34352d60",
+ "chksum_sha256": "70fac1dc646c612f07d014d12796fe67e2799f711dca91d18761dd0a2aceef9f",
"format": 1
},
{
- "name": "tests/integration/targets/asa_command/tests/cli/invalid.yaml",
+ "name": "tests/integration/targets/asa_acls/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "854f342de74002bcae25bc676898bac7c44dccbcb17680ee98ff7d105cccef80",
+ "chksum_sha256": "9601c55b51df1f3e8883106d1253fba4a9126420350a45a75d3486802533ec94",
"format": 1
},
{
- "name": "tests/integration/targets/asa_command/tests/cli/output.yaml",
+ "name": "tests/integration/targets/asa_acls/tests/cli/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3f0e7ba5086de752b9a87fcac7187b27960487ef1264ed6eb82933ee5560fc9",
+ "chksum_sha256": "a3f566b6a9c72ca243265852b24e9d5a01f4b30b68058134001ecc88b75c00f3",
"format": 1
},
{
- "name": "tests/integration/targets/asa_command/tests/cli/timeout.yaml",
+ "name": "tests/integration/targets/asa_acls/tests/cli/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1fd92e197c788c603c8f4d8f4641d4fd93dd0484f10a1ed0402e54ff526f8080",
+ "chksum_sha256": "f7c3c0039b62a050d223a0324c538214989cdfb4ea11a95807519a980f157b0a",
"format": 1
},
{
- "name": "tests/integration/targets/asa_config",
- "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/defaults",
+ "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_acls/tests/cli/_populate_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "84d196a881a4bc595bc580973d383ec06e46907bdb2188a786d1e080a9729199",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/asa_acls/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/asa_config/defaults/main.yaml",
+ "name": "tests/integration/targets/asa_acls/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
+ "chksum_sha256": "ba31c87031318be43a61d696eab1ba755270c889cd5ae5dd78effad49953342c",
"format": 1
},
{
- "name": "tests/integration/targets/asa_config/tasks",
+ "name": "tests/integration/targets/asa_acls/tasks/cli.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a22906fff9c3194905ad30497e247fa66145b848ec502e050b17332bd3cb148c",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/asa_acls/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/asa_config/tasks/cli.yaml",
+ "name": "tests/integration/targets/asa_acls/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4c98b618972ade76b972540d358cfee5e45ec0501c17df5120227fddd0ff3a83",
+ "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
"format": 1
},
{
- "name": "tests/integration/targets/asa_config/tasks/main.yaml",
+ "name": "tests/integration/target-prefixes.network",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "56c0833e7848214f8dcfeffcd6d4d37828d80f9366ceef5eb25c61b0228979c1",
+ "chksum_sha256": "14f51b782822dec130f35894d08367652be7b29aa19102314e5f049ddc307445",
"format": 1
},
{
- "name": "tests/integration/targets/asa_config/tasks/redirection.yaml",
+ "name": "tests/integration/network-integration.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "090d83ccf27d81d1b7d2baace335d2ff9082f7cd8f79b6958daefdc33b8b17e3",
+ "chksum_sha256": "d67b11263a8f50b30bf43c7c2b4bdd8dc4f173f0b5dd22761311360dfbd56a1d",
"format": 1
},
{
- "name": "tests/integration/targets/asa_config/templates",
+ "name": "tests/unit",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/asa_config/templates/basic",
+ "name": "tests/unit/compat",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/asa_config/templates/basic/config.j2",
+ "name": "tests/unit/compat/mock.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "65308b2b6c691f26581d2c167f0bee0c6175d39279ec8578bb86ca795d7de6fb",
+ "chksum_sha256": "b91b074a0bb9cfda8560f02aa3cefe0bfaae9b045f8386597bfe342f1e5a0717",
"format": 1
},
{
- "name": "tests/integration/targets/asa_config/templates/defaults",
+ "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/requirements.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "49ba996dc4735c3463e9af561344346dfae14bcc1a68096ce78364b377f0df1f",
+ "format": 1
+ },
+ {
+ "name": "tests/unit/modules",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/asa_config/templates/defaults/config.j2",
+ "name": "tests/unit/modules/conftest.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fb99eb6895703bb60ee1260b4fda100bc0715b494b276bd30af5f86140e3636c",
+ "chksum_sha256": "e0ae70fa7c2a5e56d7f02a47c3602398cff60c8eb021772ac59a76df2a234048",
"format": 1
},
{
- "name": "tests/integration/targets/asa_config/tests",
+ "name": "tests/unit/modules/network",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/asa_config/tests/cli",
+ "name": "tests/unit/modules/network/asa",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/asa_config/tests/cli/backup.yaml",
+ "name": "tests/unit/modules/network/asa/asa_module.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b9a3f2fd164079dba1ce9b9d7c54f229b882c3d0bfd3adca82371c365383c89e",
+ "chksum_sha256": "92f0ead04504c5da2ad3d7b613b9832ad0f22fc379eee5b3c9be347064213b18",
"format": 1
},
{
- "name": "tests/integration/targets/asa_config/tests/cli/basic.yaml",
+ "name": "tests/unit/modules/network/asa/test_asa_acls.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "64c12ec0001e3a74b2eb4544ddfc7b6fd9b47120613675c836dceede1efecd14",
+ "chksum_sha256": "2725a0d5d4a680c056a3d644f824257f18af756aa028980c864ff495afb1692a",
"format": 1
},
{
- "name": "tests/integration/targets/asa_config/tests/cli/defaults.yaml",
+ "name": "tests/unit/modules/network/asa/test_asa_ogs.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "380fa6f2c2dd6dd83478737e5e6752ef011256e76292d422c01a9e324c4810b9",
+ "chksum_sha256": "68ad856224f437cdd22a45a3a8412f71fb9158f70558b9206d96da84280d9e03",
"format": 1
},
{
- "name": "tests/integration/targets/asa_config/tests/cli/force.yaml",
+ "name": "tests/unit/modules/network/asa/fixtures",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/unit/modules/network/asa/fixtures/asa_facts_show_version",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3a84229b96d4ab9bbabfa9dfc4045008a0476b2cd2dc9fd8ef565dcbaebd1b91",
+ "chksum_sha256": "740b1ca496b3d669bc243713a931477f995ccdc458c3d15e95de89adacf81f3d",
"format": 1
},
{
- "name": "tests/integration/targets/asa_config/tests/cli/more_system.yaml",
+ "name": "tests/unit/modules/network/asa/fixtures/asa_facts_show_memory",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7f0f4407ef0031cc4f52d2df23780638286bbd7efcf2de58d5beedfc42e85548",
+ "chksum_sha256": "ac8a97005ae66296bad1abcba64857ed3b9a9a3cdd3bc94c5b41272193458e32",
"format": 1
},
{
- "name": "tests/integration/targets/asa_config/tests/cli/removal_error.yaml",
+ "name": "tests/unit/modules/network/asa/fixtures/asa_og_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a25a6865359950d61ae00f6bdd47fd4f952521ca0525bcf863741618cf23b2ca",
+ "chksum_sha256": "8c324a36273027bf40c6aa8003cc355200cfbf67e34ab630e406f74c87a40aee",
"format": 1
},
{
- "name": "tests/integration/targets/asa_config/tests/cli/save_when.yaml",
+ "name": "tests/unit/modules/network/asa/fixtures/asa_ogs_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3b5c27c229aa6cad17c276c37fdfdcd6599921f9cfe5872cb4b5ce6e5b9ae64f",
+ "chksum_sha256": "ed1061977da5661fcb73e4399908fd271914e714716942cc9bfffaec4a82e90a",
"format": 1
},
{
- "name": "tests/integration/targets/asa_config/tests/cli/sublevel.yaml",
+ "name": "tests/unit/modules/network/asa/fixtures/asa_facts_dir",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "153e3da671217a483d8e6b8c3d6d10873164a3faa9f6af410125cba547e44027",
+ "chksum_sha256": "5e44f9ecbe09cf864c3d107d24eed7e34baa78b45a9edda1b35c28d232434ae9",
"format": 1
},
{
- "name": "tests/integration/targets/asa_config/tests/cli/sublevel_block.yaml",
+ "name": "tests/unit/modules/network/asa/fixtures/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "88b1cda079ba825b4c9d70fb3bfef738d6c02b4a75afc6aca262baf1bbab004c",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/asa_config/tests/cli/sublevel_exact.yaml",
+ "name": "tests/unit/modules/network/asa/fixtures/asa_acls_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2a8ee340d192f59f19bafb617a8138e3e1c6b1b4962b66a2c93b9e5c940f7245",
+ "chksum_sha256": "877c2b14dbd661c2235be0269f9e7ee0eeedc86ca3abc9b2883df838a2af2b99",
"format": 1
},
{
- "name": "tests/integration/targets/asa_config/tests/cli/sublevel_strict.yaml",
+ "name": "tests/unit/modules/network/asa/test_asa_facts.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1ea488e47a54ebbc99e07ef5fb149f267e1c90fb1a3efb47c596f4ba9b1988e8",
+ "chksum_sha256": "e21775c2419e680466d71213ce3ffd68d9b460e0ad4f1a0eb50e22c5c6462957",
"format": 1
},
{
- "name": "tests/integration/targets/asa_config/tests/cli/sublevel_strict_mul_parents.yaml",
+ "name": "tests/unit/modules/network/asa/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ea1fe24ae755b8040528bee28a832a6a87a1be74bd5d74695f84040de83d161b",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/asa_config/tests/cli/toplevel.yaml",
+ "name": "tests/unit/modules/network/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c3ce7a4e25b93db51b50f5025d899b6e84319439679cfe420ed2034ec9656d3c",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/asa_config/tests/cli/toplevel_after.yaml",
+ "name": "tests/unit/modules/utils.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0d5ab0be030639871c9d7d686ade4cafae0c8459eb0216579659aa0ea597ec49",
+ "chksum_sha256": "f2cca5cec1121f8e27ef6f4c0611b6ec246d47610f6411f2dc511cde612174c0",
"format": 1
},
{
- "name": "tests/integration/targets/asa_config/tests/cli/toplevel_before.yaml",
+ "name": "tests/unit/modules/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9811b1ef10b4e55b09414219c3ee8eaa915ef4927fd52c6cbc266d052576475d",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/asa_config/tests/cli/toplevel_nonidempotent.yaml",
+ "name": "tests/unit/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cdbbf917190b6c099d6205a64342c7dcd91ed499f2a81e024d4b28e27f7b53bf",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/asa_config/tests/redirection",
+ "name": "tests/unit/mock",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/asa_config/tests/redirection/shortname.yaml",
+ "name": "tests/unit/mock/yaml_helper.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6dbd8ee31865bbe879cb1a8b35b25bd529a84f8820525a0388a38ba147a66f66",
+ "chksum_sha256": "134eef238c83a9611799871b743e49e9bfbcd8bdddf2cc6a7bf69fd1000345b3",
"format": 1
},
{
- "name": "tests/integration/targets/asa_facts",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/mock/loader.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "bdaecf94a3bba53aa135687aecc6fc2c45f7ec5e85f5d2556f5a269aa3fe0c8a",
"format": 1
},
{
- "name": "tests/integration/targets/asa_facts/defaults",
- "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_facts/defaults/main.yaml",
+ "name": "tests/unit/mock/vault_helper.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
+ "chksum_sha256": "55bd0e924dcc22d050612c944bff0ef745e51faac9260dce9b9b2018c4c8a661",
"format": 1
},
{
- "name": "tests/integration/targets/asa_facts/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/mock/procenv.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d4362cb826d0529ad37056279571952424c356db10971c024fbab4ec382563d9",
"format": 1
},
{
- "name": "tests/integration/targets/asa_facts/tasks/cli.yaml",
+ "name": "tests/unit/mock/__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": "bindep.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ba31c87031318be43a61d696eab1ba755270c889cd5ae5dd78effad49953342c",
+ "chksum_sha256": "104adbad1acc69a10523807ae1b14344dddd76b712907ddc2b3ddf656d2c69c0",
"format": 1
},
{
- "name": "tests/integration/targets/asa_facts/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": ".pre-commit-config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2362c3114e5a6bd09e7809ca3b7f07bb49de8022acc9da443220f66cd1f637e3",
"format": 1
},
{
- "name": "tests/integration/targets/asa_facts/tests/cli",
+ "name": ".yamllint",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "827ef9e031ecdcaf137be239d33ef93fcbbc3611cbb6b30b0e507d0e03373d0e",
+ "format": 1
+ },
+ {
+ "name": "meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/asa_facts/tests/cli/all_facts.yaml",
+ "name": "meta/runtime.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "90f62bf5f42692f354534580d39774a8b65e1194b6fa268e1a81e2083c39b7e8",
+ "chksum_sha256": "5672e56b9931aa53ca58c3b166b83499535042e17a88fbc87bc7311309bb90a7",
"format": 1
},
{
- "name": "tests/integration/targets/asa_facts/tests/cli/default_facts.yaml",
+ "name": "test-requirements.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5bda0a98b84f8436c2a3d5ad6f22d3d63a5ed61e8173793e0d0f9cbc78c8c376",
+ "chksum_sha256": "92e26f12b6e7c3d4c8e73859c9dbbc26591dc317c0ba8bcfc98eadfe1fdefa25",
"format": 1
},
{
- "name": "tests/integration/targets/asa_facts/tests/cli/invalid_subset.yaml",
+ "name": "pyproject.toml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2667b18d98a0879804b84662b77a1337b2d5b13e6eb8dfa4ebcae52f1547f713",
+ "chksum_sha256": "1cb6a45dfa2625123890b93ad7fdc156b063c16e8ae6dba11511a1d1986b0fcc",
"format": 1
},
{
- "name": "tests/integration/targets/asa_facts/tests/cli/not_hardware.yaml",
+ "name": "LICENSE",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0733ddb2fcf5a9e2d272f413b41df5d537db53231e049c10497a282e45f2885c",
- "format": 1
- },
- {
- "name": "tests/integration/targets/asa_ogs",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986",
"format": 1
},
{
- "name": "tests/integration/targets/asa_ogs/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": ".gitignore",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e620f88c2366ee31df48a1a4efc69c2b06cfe8bef75979f9d6e32f0a872b2644",
"format": 1
},
{
- "name": "tests/integration/targets/asa_ogs/defaults/main.yaml",
+ "name": ".prettierignore",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "9881cacd6494858bc3c50f32917a7971c275f5dbeaa27d438985eacb344f9857",
"format": 1
},
{
- "name": "tests/integration/targets/asa_ogs/tasks",
+ "name": "plugins",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/asa_ogs/tasks/cli.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7c0ac0f39eb8cbe127ea8c3f461dbbe9ebbc956b1bc3040ef6e4a56564ce4d30",
- "format": 1
- },
- {
- "name": "tests/integration/targets/asa_ogs/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ba31c87031318be43a61d696eab1ba755270c889cd5ae5dd78effad49953342c",
+ "name": "plugins/module_utils",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/asa_ogs/tests",
+ "name": "plugins/module_utils/network",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/asa_ogs/tests/cli",
+ "name": "plugins/module_utils/network/asa",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/asa_ogs/tests/cli/_parsed.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b902fb274a202ee8efbbe72f3a824a7b390d585235f3e5d9ec3a48682be07a3a",
+ "name": "plugins/module_utils/network/asa/config",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/asa_ogs/tests/cli/_populate_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2ef178de83b73bbcbb57eec0a53bf1916400afe2a306df42e7421fb7bd1b49a4",
+ "name": "plugins/module_utils/network/asa/config/acls",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/asa_ogs/tests/cli/_remove_config.yaml",
+ "name": "plugins/module_utils/network/asa/config/acls/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2a00f9c6f94bdf5e1f2dc3431cab004b36946ca4baee07cece978f42254f2806",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/asa_ogs/tests/cli/deleted.yaml",
+ "name": "plugins/module_utils/network/asa/config/acls/acls.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b46fa5bf7986ea33e69d718395dcd529756fae19695d858bb5f2cfddb69acf32",
+ "chksum_sha256": "54d4f42507c10b4b994457008be4c8377e78ea71f719f1a08c8a8fe39793ba1d",
"format": 1
},
{
- "name": "tests/integration/targets/asa_ogs/tests/cli/empty_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "abad4da95ec7d092272595de5569c28efef79203ef5de89e9b6455df5d0702ed",
+ "name": "plugins/module_utils/network/asa/config/ogs",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/asa_ogs/tests/cli/gathered.yaml",
+ "name": "plugins/module_utils/network/asa/config/ogs/ogs.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e775a90f35bf1d02c36f75947efd359595085f0b8d7cda9e70b295a064cb0840",
+ "chksum_sha256": "fff92969cf78d6efb283bec90fcdf347f34c63011f01e97a06eeafce6bb6aea3",
"format": 1
},
{
- "name": "tests/integration/targets/asa_ogs/tests/cli/merged.yaml",
+ "name": "plugins/module_utils/network/asa/config/ogs/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f149bbc1ec48feedc896079f15994dd6a5175514dc026e7d12fa417b88d48728",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/asa_ogs/tests/cli/overridden.yaml",
+ "name": "plugins/module_utils/network/asa/config/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "afe118ea3be25d57e9ab26348bdd52bc4b840490a85f11b9f79563a92eb51834",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/asa_ogs/tests/cli/parsed.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c12d15a33e441f5b5a1462c660d899ed33f258f437e81f1cf7954c11e50bed73",
+ "name": "plugins/module_utils/network/asa/utils",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/asa_ogs/tests/cli/rendered.yaml",
+ "name": "plugins/module_utils/network/asa/utils/utils.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0ab9e8d1c4ab5c6c8cff5dbcbd6de19807bc8a736ec05cac65a7358f3d919b1e",
+ "chksum_sha256": "869e911f1d710075554251977a255d09e8054cecce9ba0910f1b52027fc81c2f",
"format": 1
},
{
- "name": "tests/integration/targets/asa_ogs/tests/cli/replaced.yaml",
+ "name": "plugins/module_utils/network/asa/utils/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6bdc390ed516bdb772e8b3e4e9498bb9f8e48c7a023d08e919809e66e62dd979",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"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/asa/facts",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/asa_ogs/vars",
+ "name": "plugins/module_utils/network/asa/facts/legacy",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/asa_ogs/vars/main.yaml",
+ "name": "plugins/module_utils/network/asa/facts/legacy/base.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1418941753a214f960e5772742927306c42e64decf1f0cc4b7445167801ac377",
- "format": 1
- },
- {
- "name": "tests/integration/targets/asa_smoke",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "1d90560b4d39f8e0adbe73753790528ba39dbe4b7edc70d8089706da1a84823e",
"format": 1
},
{
- "name": "tests/integration/targets/asa_smoke/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/module_utils/network/asa/facts/legacy/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/asa_smoke/defaults/main.yaml",
+ "name": "plugins/module_utils/network/asa/facts/facts.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "974b74159f6d3e59e5a56f8677c26e470860eae57ecb53c91c3e5cefe552df91",
"format": 1
},
{
- "name": "tests/integration/targets/asa_smoke/tasks",
+ "name": "plugins/module_utils/network/asa/facts/acls",
"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/facts/acls/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "835db3bc2ab92dd760d6730f09922b1e5b90395db7d11c7e374c0ba09f78daf7",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/asa_smoke/tasks/main.yaml",
+ "name": "plugins/module_utils/network/asa/facts/acls/acls.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ba31c87031318be43a61d696eab1ba755270c889cd5ae5dd78effad49953342c",
+ "chksum_sha256": "b7289bcc81ad8747f031c4deb4c888e8eabed74ce40b5e0930d6c7e199fd8325",
"format": 1
},
{
- "name": "tests/integration/targets/asa_smoke/tests",
+ "name": "plugins/module_utils/network/asa/facts/ogs",
"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/ogs/ogs.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4a956e5bd4218f18bd151bb253589e06d96f0ca012afeeb815a77f6213148945",
+ "chksum_sha256": "4889d0ef1f24d9aebaf0653e16669f19277989efb52ee0042f49fcd5cd903162",
"format": 1
},
{
- "name": "tests/integration/network-integration.cfg",
+ "name": "plugins/module_utils/network/asa/facts/ogs/__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/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "14f51b782822dec130f35894d08367652be7b29aa19102314e5f049ddc307445",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/sanity",
+ "name": "plugins/module_utils/network/asa/providers",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/sanity/ignore-2.10.txt",
+ "name": "plugins/module_utils/network/asa/providers/providers.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8000e45c60499f99ceece9b4c2e153a0b50d02906850dcfc758d08c42b9ac066",
+ "chksum_sha256": "2d12b31ea6902b70db0eb9e71564b586d4e62b90655345669eb372f1f3f9c9cc",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.11.txt",
+ "name": "plugins/module_utils/network/asa/providers/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a726fa26f4d91f96be9d8d98ab93c32b82bc16a69f9ab116ddeee2c042cbe4b1",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.12.txt",
+ "name": "plugins/module_utils/network/asa/providers/module.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5e57cb2fa7cd31227fcf1fd7085c7213f560ce12895b80211aeba768ec9de041",
+ "chksum_sha256": "9b87ca2036255d1dcd9080d73f0997df1a19af0fa9466f84e3a7eef8a803de9a",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.13.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.14.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.15.txt",
+ "name": "plugins/module_utils/network/asa/rm_templates/acls.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9a01d39f278abada36c8f698d56c3a0c17efdf85178ceba34c1dc3c523679b9d",
+ "chksum_sha256": "f244c13a86b80d08dae36977a2c7344baf8913b00df67128fc0caf4c7eb81865",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.16.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9a01d39f278abada36c8f698d56c3a0c17efdf85178ceba34c1dc3c523679b9d",
+ "name": "plugins/module_utils/network/asa/argspec",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/sanity/ignore-2.17.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9a01d39f278abada36c8f698d56c3a0c17efdf85178ceba34c1dc3c523679b9d",
+ "name": "plugins/module_utils/network/asa/argspec/facts",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/sanity/ignore-2.9.txt",
+ "name": "plugins/module_utils/network/asa/argspec/facts/facts.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8000e45c60499f99ceece9b4c2e153a0b50d02906850dcfc758d08c42b9ac066",
+ "chksum_sha256": "58646002557f192f15baf87346550ea1a6b37b36596b47bc66a1465540e26e01",
"format": 1
},
{
- "name": "tests/unit",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/module_utils/network/asa/argspec/facts/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/compat",
+ "name": "plugins/module_utils/network/asa/argspec/acls",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/compat/__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/compat/mock.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b91b074a0bb9cfda8560f02aa3cefe0bfaae9b045f8386597bfe342f1e5a0717",
- "format": 1
- },
- {
- "name": "tests/unit/compat/unittest.py",
+ "name": "plugins/module_utils/network/asa/argspec/acls/acls.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "727203a3846be41893b78a4b77852a1658925e936fb19539551958a5d8e8fb81",
+ "chksum_sha256": "fcae6ce706327a09b0ab8b82c91a55186f9974e5a0e190a5188c49bcc8cb93e7",
"format": 1
},
{
- "name": "tests/unit/mock",
+ "name": "plugins/module_utils/network/asa/argspec/ogs",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/mock/__init__.py",
+ "name": "plugins/module_utils/network/asa/argspec/ogs/ogs.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "5d0487f754e8a1b8968ec7cda2bab9849ed0a920dfc9da1d77930c821b613bdc",
"format": 1
},
{
- "name": "tests/unit/mock/loader.py",
+ "name": "plugins/module_utils/network/asa/argspec/ogs/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bdaecf94a3bba53aa135687aecc6fc2c45f7ec5e85f5d2556f5a269aa3fe0c8a",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/mock/path.py",
+ "name": "plugins/module_utils/network/asa/argspec/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1042460934c45b35a3bd39c9ddb9b06f25986c251c6ce9f5288e32406d2e2034",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/mock/procenv.py",
+ "name": "plugins/module_utils/network/asa/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d4362cb826d0529ad37056279571952424c356db10971c024fbab4ec382563d9",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/mock/vault_helper.py",
+ "name": "plugins/module_utils/network/asa/asa.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "55bd0e924dcc22d050612c944bff0ef745e51faac9260dce9b9b2018c4c8a661",
+ "chksum_sha256": "e924eeba5d9c9489c645c7bea52c1ef6ebcb0cb22c70746b78fd25f2fd385a85",
"format": 1
},
{
- "name": "tests/unit/mock/yaml_helper.py",
+ "name": "plugins/module_utils/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "134eef238c83a9611799871b743e49e9bfbcd8bdddf2cc6a7bf69fd1000345b3",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules",
+ "name": "plugins/doc_fragments",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network",
- "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/asa",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/doc_fragments/asa.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "130cf43f0307ebbc4bc121d6b0616af8895c602bc9bc3e2abd0341fd10a49500",
"format": 1
},
{
- "name": "tests/unit/modules/network/asa/fixtures",
+ "name": "plugins/cliconf",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/asa/fixtures/__init__.py",
+ "name": "plugins/cliconf/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules/network/asa/fixtures/asa_acls_config.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "877c2b14dbd661c2235be0269f9e7ee0eeedc86ca3abc9b2883df838a2af2b99",
- "format": 1
- },
- {
- "name": "tests/unit/modules/network/asa/fixtures/asa_facts_dir",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5e44f9ecbe09cf864c3d107d24eed7e34baa78b45a9edda1b35c28d232434ae9",
- "format": 1
- },
- {
- "name": "tests/unit/modules/network/asa/fixtures/asa_facts_show_memory",
+ "name": "plugins/cliconf/asa.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ac8a97005ae66296bad1abcba64857ed3b9a9a3cdd3bc94c5b41272193458e32",
+ "chksum_sha256": "dda3e968fc69abbddc6f0742420d8b0e11e2d44358a20239025a6f54ebc4f41c",
"format": 1
},
{
- "name": "tests/unit/modules/network/asa/fixtures/asa_facts_show_version",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "740b1ca496b3d669bc243713a931477f995ccdc458c3d15e95de89adacf81f3d",
+ "name": "plugins/modules",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/asa/fixtures/asa_og_config.cfg",
+ "name": "plugins/modules/asa_ogs.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8c324a36273027bf40c6aa8003cc355200cfbf67e34ab630e406f74c87a40aee",
+ "chksum_sha256": "278c499570e2f0cf5a2c6a48929e9c40530e00ab0ecc4945689858e689808119",
"format": 1
},
{
- "name": "tests/unit/modules/network/asa/fixtures/asa_ogs_config.cfg",
+ "name": "plugins/modules/asa_facts.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ed1061977da5661fcb73e4399908fd271914e714716942cc9bfffaec4a82e90a",
+ "chksum_sha256": "17fc0b752d583d54f38f878f8122a7fe8db0319b7fbee1519577b588d4034b6c",
"format": 1
},
{
- "name": "tests/unit/modules/network/asa/__init__.py",
+ "name": "plugins/modules/asa_command.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "9fbb4c90a18d3945dfd710c5dbd17f8b81780528e2a9bb8fe3c6136acc76a907",
"format": 1
},
{
- "name": "tests/unit/modules/network/asa/asa_module.py",
+ "name": "plugins/modules/asa_config.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "92f0ead04504c5da2ad3d7b613b9832ad0f22fc379eee5b3c9be347064213b18",
+ "chksum_sha256": "a9677bf1c1b654f58c292bf1eaab9e7d9fe3531e8eccbb7c7b03235ef2a0abb5",
"format": 1
},
{
- "name": "tests/unit/modules/network/asa/test_asa_acls.py",
+ "name": "plugins/modules/asa_acls.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2725a0d5d4a680c056a3d644f824257f18af756aa028980c864ff495afb1692a",
+ "chksum_sha256": "b56a38b92596b7d22ebc6bed87c1587a7732f4a3d7680e274d0afa3553067490",
"format": 1
},
{
- "name": "tests/unit/modules/network/asa/test_asa_facts.py",
+ "name": "plugins/modules/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e21775c2419e680466d71213ce3ffd68d9b460e0ad4f1a0eb50e22c5c6462957",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules/network/asa/test_asa_ogs.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "68ad856224f437cdd22a45a3a8412f71fb9158f70558b9206d96da84280d9e03",
+ "name": "plugins/terminal",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/__init__.py",
+ "name": "plugins/terminal/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules/__init__.py",
+ "name": "plugins/terminal/asa.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "3b24a952d8c6d070d4e29c7a6a58d6bc3c0f17741df33ad56b213b87372854f1",
"format": 1
},
{
- "name": "tests/unit/modules/conftest.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e0ae70fa7c2a5e56d7f02a47c3602398cff60c8eb021772ac59a76df2a234048",
+ "name": "plugins/action",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/utils.py",
+ "name": "plugins/action/ogs.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f2cca5cec1121f8e27ef6f4c0611b6ec246d47610f6411f2dc511cde612174c0",
+ "chksum_sha256": "7b92aa8d78762e91888d71583077ff00c127ebcde8551b94e6b96e495943157c",
"format": 1
},
{
- "name": "tests/unit/__init__.py",
+ "name": "plugins/action/facts.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "7b92aa8d78762e91888d71583077ff00c127ebcde8551b94e6b96e495943157c",
"format": 1
},
{
- "name": "tests/unit/requirements.txt",
+ "name": "plugins/action/config.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "49ba996dc4735c3463e9af561344346dfae14bcc1a68096ce78364b377f0df1f",
+ "chksum_sha256": "7b92aa8d78762e91888d71583077ff00c127ebcde8551b94e6b96e495943157c",
"format": 1
},
{
- "name": "tests/.gitignore",
+ "name": "plugins/action/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b5726d3ec9335a09c124469eca039523847a6b0f08a083efaefd002b83326600",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": ".gitignore",
+ "name": "plugins/action/command.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e620f88c2366ee31df48a1a4efc69c2b06cfe8bef75979f9d6e32f0a872b2644",
+ "chksum_sha256": "7b92aa8d78762e91888d71583077ff00c127ebcde8551b94e6b96e495943157c",
"format": 1
},
{
- "name": ".isort.cfg",
+ "name": "plugins/action/acls.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4e11dfc2dddd670a70b23d3c1504e08c2d3175a3b7323d912d94fa40c18d524a",
+ "chksum_sha256": "7b92aa8d78762e91888d71583077ff00c127ebcde8551b94e6b96e495943157c",
"format": 1
},
{
- "name": ".pre-commit-config.yaml",
+ "name": "plugins/action/asa.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9e58624a7144289a17cc3adc6b49c11ab58d9c9e80a05c4240a36b4b3968f368",
+ "chksum_sha256": "7b92aa8d78762e91888d71583077ff00c127ebcde8551b94e6b96e495943157c",
"format": 1
},
{
- "name": ".prettierignore",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9881cacd6494858bc3c50f32917a7971c275f5dbeaa27d438985eacb344f9857",
+ "name": ".github",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": ".yamllint",
+ "name": ".github/dependabot.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "827ef9e031ecdcaf137be239d33ef93fcbbc3611cbb6b30b0e507d0e03373d0e",
+ "chksum_sha256": "11ceee3c57116e9fd08bc423414b1095ff002aa012d6fb325b1a7e24d7e28461",
"format": 1
},
{
- "name": "CHANGELOG.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ebc72b854489f94f781844c4c506df9f923573b633e2a45a0b8170d696cb292c",
+ "name": ".github/workflows",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "LICENSE",
+ "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) <!--[![Codecov](https://img.shields.io/codecov/c/github/ansible-collections/cisco)](https://codecov.io/gh/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.
<!--start requires_ansible-->
## 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
<td>
</td>
<td>
- <div>This is a dict object containing configurable options related to backup file path. The value of this option is read only when <code>backup</code> is set to <em>yes</em>, if <code>backup</code> is set to <em>no</em> this option will be silently ignored.</div>
+ <div>This is a dict object containing configurable options related to backup file path. The value of this option is read only when <code>backup</code> is set to <em>true</em>, if <code>backup</code> is set to <em>no</em> this option will be silently ignored.</div>
</td>
</tr>
<tr>
@@ -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 <https://docs.ansible.com/ansible/late
<span style="color: purple">string</span>
</div>
</td>
- <td>when backup is yes</td>
+ <td>when backup is true</td>
<td>
<div>The full path to the backup file</div>
<br/>
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/ios/plugins/action/ntp.py b/ansible_collections/cisco/asa/plugins/action/acls.py
index 38c0ed229..4d4fcf32f 100644
--- a/ansible_collections/cisco/ios/plugins/action/ntp.py
+++ b/ansible_collections/cisco/asa/plugins/action/acls.py
@@ -21,7 +21,6 @@ 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,
@@ -36,11 +35,11 @@ class ActionModule(ActionNetworkModule):
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
+ 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 != "network_cli":
+ if persistent_connection not in ("network_cli"):
return {
"failed": True,
"msg": "Connection type %s is not valid for this module"
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 <http://www.gnu.org/licenses/>.
+#
+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 <http://www.gnu.org/licenses/>.
+#
+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 <http://www.gnu.org/licenses/>.
+#
+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 <http://www.gnu.org/licenses/>.
+#
+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
},
{
@@ -330,6 +330,13 @@
"format": 1
},
{
+ "name": "playbooks/count_vms.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6d4c73d070fa70eead9a41b3f4062398586d6ddca57a077a208d827baba110ae",
+ "format": 1
+ },
+ {
"name": "playbooks/roles",
"ftype": "dir",
"chksum_type": null,
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/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/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",
- "format": 1
- },
- {
- "name": "plugins/cliconf",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/cliconf/ios.py",
+ "name": "plugins/action/l2_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8c8e1266fc9979ffe143c1c97308ba48fac1a8b9a88ca2fbae116a52520dd6db",
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/cliconf/__init__.py",
+ "name": "plugins/action/hostname.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "plugins/plugin_utils",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/plugin_utils/__init__.py",
+ "name": "plugins/action/lldp.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "plugins/modules",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/modules/ios_facts.py",
+ "name": "plugins/action/facts.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "972575a88e6eaf128ecf1def334d75e696c872077ea91a5414a32dafb4866143",
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/modules/ios_evpn_global.py",
+ "name": "plugins/action/lacp.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7b39999ffe208c5d9c8486d1bbf1fb8403aeb12df591bb83f284cd4a36a8aef1",
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/modules/ios_linkagg.py",
+ "name": "plugins/action/acl_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/vrf.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4638e9583cab76097431b4f3d58906b5de755dd4251f831f85ad7b686d91f973",
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/modules/ios_prefix_lists.py",
+ "name": "plugins/action/bgp.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a5937aafcc9ffa0ea3bb0c118aafe6f51e599038092aac782e80470c17f2be54",
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/modules/ios_bgp_global.py",
+ "name": "plugins/action/interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4a7ccab9fecf8b77b750367f9bb26f78d68116658d1e0df3f7a9222cc9ce2368",
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/modules/ios_evpn_evi.py",
+ "name": "plugins/action/lag_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "648b3f87f6eaa9d4c154175f4e1678ac4cce819db19e87bf3715deb1e0ae64f1",
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/modules/ios_lag_interfaces.py",
+ "name": "plugins/action/command.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "15ab6e5cb7cd7556ec0a828795d5eebc0e3a12779de558d8c95c5c519e52b47b",
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/modules/ios_lldp_global.py",
+ "name": "plugins/action/ntp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6ed88f852a8fe1eee3d14965ba9700efcc11dfb4786169fa9f0ffff1888c54b",
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/modules/ios_command.py",
+ "name": "plugins/action/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d472c553267cd83de3d89409d05556068511b522139903551605098c26e81b0a",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/modules/ios_ntp.py",
+ "name": "plugins/action/system.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "60f03c439ea2646c81a9d78e4fa0b5a99fcabd51e3ec9056397d3397b9b50a13",
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/modules/ios_vxlan_vtep.py",
+ "name": "plugins/action/snmp_server.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3817c3561c4521f0d75e464101d50b45872da612cc463ad1d6d99a1233b95d82",
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/modules/ios_banner.py",
+ "name": "plugins/action/ospfv2.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3080e91ec01655a266e3052ce6b7d20f20a575adef570293e9b5d4c91e706010",
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/modules/__init__.py",
+ "name": "plugins/action/ospfv3.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/modules/ios_acls.py",
+ "name": "plugins/action/bgp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9d77e989734fcc228ba09fe0729353f598845030e5a450c6057106ece50a3ebb",
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/modules/ios_lacp.py",
+ "name": "plugins/action/linkagg.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/logging_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9e3d38788590802b2c9007594d0b008532e9314bc44e8a8c17083c1f70c0a35e",
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/modules/ios_lldp.py",
+ "name": "plugins/action/lldp_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ed7f699ea8b847870a2f99e9d42ecf55bb70cd2d1f38d39b65f6b35ea7bf7739",
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/modules/ios_logging_global.py",
+ "name": "plugins/action/service.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "74ba47a819e4473bdc366272680c4351f2a0cc8b95001ef437d7018011134e7c",
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/modules/ios_ping.py",
+ "name": "plugins/action/ospf_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "abd66507a7d8a768518d0925de79e6b81f8fea7a23f087177932df20f5702715",
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/modules/ios_ntp_global.py",
+ "name": "plugins/action/banner.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "76d59f676f660789f3ed3793b2b48672d240efe238a20f92c336515e1002b4b2",
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/modules/ios_ospfv3.py",
+ "name": "plugins/action/acls.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "15b349ce09d6168c98525de1a9225f510909629e737c754412168ee5e1800e1a",
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/modules/ios_ospf_interfaces.py",
+ "name": "plugins/action/route_maps.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "59e0db107b7b050f2d6910f14301bc17d72432526d96dee97d62d99c58502e15",
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/modules/ios_ospfv2.py",
+ "name": "plugins/action/user.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "64ed9313605ffaaae2385dc9d4a2b41e566dc760d2e5c4a2bc5fa0aeb9357982",
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/modules/ios_route_maps.py",
+ "name": "plugins/action/ios.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a8944dc9ce33fd98c154ac00a97ebf73fab242a3d42a11b0fda3a5b9a5556445",
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/modules/ios_snmp_server.py",
+ "name": "plugins/action/bgp_address_family.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "816d1f4bcf90311e4402e74d4bb76aa5fd78326535b2bd4860bce1957b091c8a",
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/modules/ios_bgp.py",
+ "name": "plugins/action/logging.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0db4f0011ef38cce8fe177deab111257d3012ab7e25d5cb5680a8d9b8640e2be",
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/modules/ios_config.py",
+ "name": "plugins/action/ping.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bcac658cede985e299d5e1d0079309784b1886e61bf5e789e8721975eeca0a51",
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/modules/ios_user.py",
+ "name": "plugins/action/l3_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec8c31c038a8a573be22c6cc7781b18f51fc3c35a9990d81f7fc51e30db66a37",
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/modules/ios_lacp_interfaces.py",
+ "name": "plugins/action/prefix_lists.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "16c553e3997af81f7fe41232b71f9548ab567a5430356e2904573441a1254ab5",
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/modules/ios_acl_interfaces.py",
+ "name": "plugins/action/lldp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ba34b07e15d390595759f5bda5f78d022cf3bde78d960c3a944b29b4ac78df0b",
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/modules/ios_lldp_interfaces.py",
+ "name": "plugins/action/static_routes.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bf57b49a9b78774f084d3bb6d1e6b3d8b69ab19c7f544e1c621dbcf75b0b740e",
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/modules/ios_hostname.py",
+ "name": "plugins/action/config.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bb285380781590a0c9712994169f032e2158e1a081c39ca587cf9b708835aea8",
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/modules/ios_static_routes.py",
+ "name": "plugins/action/vlans.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "005f38e5c7349ba72fe3a68bc0c55f2f88a0ea8569f72265a69eeaa8a0709a66",
+ "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
"format": 1
},
{
- "name": "plugins/modules/ios_interfaces.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "dbc7c65001c2d571718846580485ff91cc1937dc7b8c621c4593e84b1dfe7e41",
+ "name": "plugins/cache",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/ios_l2_interfaces.py",
+ "name": "plugins/cache/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8aa17b7de5645ef7d089251107a7c479c0c33a6078c87e319a5e0612f448e05c",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/modules/ios_vrf.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7d61b581c7b35b4c0ae9c56c2971fe32f9af84b86a84f01a91913d15fcb733c8",
+ "name": "plugins/inventory",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/ios_vlans.py",
+ "name": "plugins/inventory/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2343fe7113565914f6bc257a500e7d86a936969dfa86baee79f2eb4beebaaff3",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/modules/ios_service.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e4d9a134d041cf48669cbdb6cde10dd2337a8f6a577c967d0db062fecb3eec33",
+ "name": "plugins/modules",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/ios_system.py",
+ "name": "plugins/modules/ios_vxlan_vtep.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "04f36c07687618fd2cff763acdb88f9b1b4f600ca554d626abddff78d16887e0",
+ "chksum_sha256": "3897ab55eed7ce1de5b147dbafcc16005b8a3c0dd6139ef46f7406696153cd22",
"format": 1
},
{
- "name": "plugins/doc_fragments",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/ios_bgp_global.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3b9b312d3fb290ad3b748f8ab433a074a9796d1f9ce95c0effe353656b16bee2",
"format": 1
},
{
- "name": "plugins/doc_fragments/ios.py",
+ "name": "plugins/modules/ios_lldp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "183557f42150c3888baca407c30a651bb6d0c70a06ac55f409b271323dfcbacf",
+ "chksum_sha256": "b6ed88f852a8fe1eee3d14965ba9700efcc11dfb4786169fa9f0ffff1888c54b",
"format": 1
},
{
- "name": "plugins/doc_fragments/__init__.py",
+ "name": "plugins/modules/ios_lldp_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "bf57b49a9b78774f084d3bb6d1e6b3d8b69ab19c7f544e1c621dbcf75b0b740e",
"format": 1
},
{
- "name": "plugins/lookup",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/ios_l2_interfaces.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8aa17b7de5645ef7d089251107a7c479c0c33a6078c87e319a5e0612f448e05c",
"format": 1
},
{
- "name": "plugins/lookup/__init__.py",
+ "name": "plugins/modules/ios_hostname.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "bb285380781590a0c9712994169f032e2158e1a081c39ca587cf9b708835aea8",
"format": 1
},
{
- "name": "plugins/filter",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/ios_lacp.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "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,
+ "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",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/module_utils/network/ios/rm_templates/ospfv2.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7e020c96b0f338987d398ddb205e20b6bc9984ee2f9aa2fb1d91291714158e1a",
"format": 1
},
{
- "name": "plugins/module_utils/network/ios/facts/bgp_address_family/bgp_address_family.py",
+ "name": "plugins/module_utils/network/ios/rm_templates/ospfv3.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d02fd4c43363ca7df4e9e9879e4cea873334bc4ce10f86e7bd7ae0df041fa6a6",
+ "chksum_sha256": "dbd8f6a15c395b673de496acf55ac661dbf4911c6bf767b121a47240550ec2fb",
"format": 1
},
{
- "name": "plugins/module_utils/network/ios/facts/bgp_address_family/__init__.py",
+ "name": "plugins/module_utils/network/ios/rm_templates/bgp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "e63de89c1832db959e7cdddda37baf350dee719ab1a702cf9f039cf756f99061",
"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/logging_global.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "841f75df76900bfdcae91e9d7e44bfaf394e0d75b2a8d3e38e8e0b8e62997a33",
"format": 1
},
{
- "name": "plugins/module_utils/network/ios/facts/static_routes/static_routes.py",
+ "name": "plugins/module_utils/network/ios/rm_templates/service.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4219bf270bcc7f6c374128d1c721ade8c3f1622da5a7377ca6115973ab0b183b",
+ "chksum_sha256": "4a3a79e6c58e4de26c7d6e759b48befd4c79c541924c27ae6aad77f267e49aac",
"format": 1
},
{
- "name": "plugins/module_utils/network/ios/facts/static_routes/__init__.py",
+ "name": "plugins/module_utils/network/ios/rm_templates/ospf_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "f6e8876d90d0af81d076a4a10aca05c03ee0502b58e6ab3dc20e89dad38dda87",
"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/evpn_evi.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c224d0295c96f2645cd41d4fe3dff84d527e48c28a9122f0c35374045147d0c1",
"format": 1
},
{
- "name": "plugins/module_utils/network/ios/facts/prefix_lists/__init__.py",
+ "name": "plugins/module_utils/network/ios/rm_templates/acls.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "62bcf00cf29f836f2307ef4fa5ca20fd389bec0ab825c54e98f1246be1df9e8c",
"format": 1
},
{
- "name": "plugins/module_utils/network/ios/facts/prefix_lists/prefix_lists.py",
+ "name": "plugins/module_utils/network/ios/rm_templates/route_maps.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cb75d959c5be987f0bca13bda393af91ce11f97885fa64a22a6f1e5df4bf0bf8",
+ "chksum_sha256": "067d135760cdcf59985c9479e468232d9699649daf3354cf328660acd36f97a0",
"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/vxlan_vtep.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "982beb248da55ccc7ecf9fa011237ce35cdb9360467e8917d4ca599913ea2255",
"format": 1
},
{
- "name": "plugins/module_utils/network/ios/facts/vxlan_vtep/vxlan_vtep.py",
+ "name": "plugins/module_utils/network/ios/rm_templates/bgp_address_family.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fe7e6cd2e81720a21b23cd45a7893776528e66f9a236713e8fb97239966d8c4f",
+ "chksum_sha256": "cb9300a8408af5162e90bf6454d16cc1a1dea83ff67585ad2f0394990ac19e81",
"format": 1
},
{
- "name": "plugins/module_utils/network/ios/facts/vxlan_vtep/__init__.py",
+ "name": "plugins/module_utils/network/ios/rm_templates/ping.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "b1f3a2280507d4b378e65de305f7c0b9512106ea50adb00615cb834366540087",
"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/l3_interfaces.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5d2cd6f3c8e8a4c1b877d949e5868f51a9909011894e949ef729428bf75e1bdb",
"format": 1
},
{
- "name": "plugins/module_utils/network/ios/facts/hostname/hostname.py",
+ "name": "plugins/module_utils/network/ios/rm_templates/prefix_lists.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b66f9bbe31ee1de7a4acefb0fe020180477a46c7ed4787955bf5f11a714e9b3e",
+ "chksum_sha256": "5321943611897741c7d43b18f8540a1d9cf127dd62d38622b0b3d9611423e129",
"format": 1
},
{
- "name": "plugins/module_utils/network/ios/facts/hostname/__init__.py",
+ "name": "plugins/module_utils/network/ios/rm_templates/static_routes.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "aee1c6a1aca4f66c407d9a805b12471d1ed27959ed486bf46b34569c7a30d79e",
"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/vlans.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8c05a82ce71ca9ebeb5df66b257d7cdbd1b5da644c9e6c95abc77296e50a93f4",
"format": 1
},
{
- "name": "plugins/module_utils/network/ios/facts/lldp_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/ios/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/ios/facts/lldp_interfaces/lldp_interfaces.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0c0f5296b417c1eba895f8c8843cc99411f4a96fa560243ef92bf166776b3df3",
+ "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,3027 +2626,2740 @@
"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",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
- "format": 1
- },
- {
- "name": "plugins/action/lacp.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9",
- "format": 1
- },
- {
- "name": "plugins/action/vlans.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/lag_interfaces.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/user.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/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",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/cliconf/test_ios.py",
+ "name": "tests/integration/targets/ios_hostname/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f46dc137e8680947b460f18c891b28964607d14143c57a7fb7fc85d8e8b956aa",
+ "chksum_sha256": "febb64d561f5a456e89d59fb77210502df86daa4eca07014b96993b76d0bc5ba",
"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",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "28896cfd7a101f137f8433db1efdb33343aa43425aaedc2d4f7eebec7e71204d",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/cliconf/fixtures/ios/__init__.py",
+ "name": "tests/integration/targets/ios_hostname/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "9e463dfec9973774a7a87d75f8e492a829e08a207f7330616a23032087174429",
"format": 1
},
{
- "name": "tests/unit/__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/mock",
+ "name": "tests/integration/targets/ios_lldp",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/mock/vault_helper.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3bf7834d18bd34473d0f4b898253177229a131f14364874efba584ff985e4a41",
- "format": 1
- },
- {
- "name": "tests/unit/mock/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "tests/unit/mock/procenv.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e869c848191bb9586fa25214c452cd18497a737e30ff2747977f8b8d4da620c7",
- "format": 1
- },
- {
- "name": "tests/unit/mock/loader.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2343d1f644250d4b616f0bf0a826fdee8fe306243d8412d44dd0e033352b262b",
- "format": 1
- },
- {
- "name": "tests/unit/mock/yaml_helper.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "fa89194ba60856f51500efdd1f802c5ca3b2e4ded9461d7b88847c427a43a958",
- "format": 1
- },
- {
- "name": "tests/unit/mock/path.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "920ca3acb70a819bba26034101cf1e8497e8a5445f220a4df0cbacca03b21bd7",
- "format": 1
- },
- {
- "name": "tests/unit/modules",
+ "name": "tests/integration/targets/ios_lldp/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/__init__.py",
+ "name": "tests/integration/targets/ios_lldp/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/unit/modules/conftest.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "354440d86f684a9641f329807a687fe71fc66ab901207f7a166ecfa648935488",
+ "name": "tests/integration/targets/ios_lldp/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/utils.py",
+ "name": "tests/integration/targets/ios_lldp/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fec06b445abd9398a3dbed94e82c9e76f7daa125c13f09e7842a24aefbb216ee",
+ "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2",
"format": 1
},
{
- "name": "tests/unit/modules/network",
+ "name": "tests/integration/targets/ios_lldp/tests",
"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",
- "format": 1
- },
- {
- "name": "tests/unit/modules/network/ios",
+ "name": "tests/integration/targets/ios_lldp/tests/cli",
"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_lldp/tests/cli/basic.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c00bb9aff720be808ece114a8c4e3f18e4dff823186aa69f2502638a0f8658c2",
+ "chksum_sha256": "9f61afc65151115e5a86c79276acf3c3ced37cd6df01cf54550ef54252792ec7",
"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_lldp/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/test_ios_lacp_interfaces.py",
+ "name": "tests/integration/targets/ios_lldp/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d4ff68a41cb3751290da98519066dec8a071eb335b3edfb59511e5ae34567c9e",
+ "chksum_sha256": "b0906e69a469f54c61369370c1de70ece7ed9341c9647ae69f471544fad206e4",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/test_ios_logging_global.py",
+ "name": "tests/integration/targets/ios_lldp/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c06d947da67fb9595e789d26315d77f41cec2f9aa346d9fce452be9f15abc1d2",
+ "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/test_ios_ntp.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d2987bd3aa0842cc1aa97484424f9098814f539bccba1d94c12bf33d51200365",
+ "name": "tests/integration/targets/ios_system",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/test_ios_lldp_global.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cdfcb9c7988f951aeb3e45819d62db13c4974b0772c96937a15388cb3c2f2084",
+ "name": "tests/integration/targets/ios_system/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/test_ios_ospfv3.py",
+ "name": "tests/integration/targets/ios_system/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8171f1e8dab0e2da0cafc913dbc92d80f144acfaea650dbe1b029eebe28ccaa0",
+ "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/test_ios_hostname.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e8fd5109de3a0c00ef3bfc89d6673ef6ecd0b9ecc52742ec3215768172a2bb30",
+ "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_lag_interfaces.py",
+ "name": "tests/integration/targets/ios_system/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5c5afac7db102eec9b01bb5f185afb06fb118cb01c7ec2393af4a37c9829fc89",
+ "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/test_ios_vxlan_vtep.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "df24e333fa123be819420f2086e938d257e35283352cfff3ba34df001f9c2262",
+ "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_vrf.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "29d5dd5eb47eda13e50282508895716ec7d64cc528aae244ed02744f0891d5b3",
+ "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_ping.py",
+ "name": "tests/integration/targets/ios_system/tests/cli/set_domain_name.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b4b15f4a2ee334263a07bc2083dc599423f3cf5c34175d4b30e888fa99c932eb",
+ "chksum_sha256": "4bc85f65fcaa284e9503fe5643f16111f14daf7ba677abd84daa04302f8b007d",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/test_ios_ospf_interfaces.py",
+ "name": "tests/integration/targets/ios_system/tests/cli/set_hostname.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c3be97fd55cc742ad99ba812a26f13a25dbf18857f037854b563873f3522dc21",
+ "chksum_sha256": "810d48f3ce471254c763859c7d33ad70b06aaa28b45712179b4794f3b5a667c5",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/test_ios_evpn_global.py",
+ "name": "tests/integration/targets/ios_system/tests/cli/set_lookup_source.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cb1f69e919e200020e995d8794f0f030bd284b68b39013c31326394693b60afe",
+ "chksum_sha256": "10e512f2cf5dc0fe7c9d3cb0188fc3dc96dffa68beb61895d88c8dc422c886e7",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/test_ios_lacp.py",
+ "name": "tests/integration/targets/ios_system/tests/cli/set_domain_list.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec2e679151350238a5994704b6b6536b0b1592e7d1dbbfcdc96b20a52820122b",
+ "chksum_sha256": "592210cc1bf19177523967179ec83b786b9c60d9341acdb087e739911876007b",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/test_ios_acls.py",
+ "name": "tests/integration/targets/ios_system/tests/cli/set_name_servers.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fec5deeba545dbd9a3f0a08d8013929ec7f163487a8dbb476c269d39488bc1cc",
+ "chksum_sha256": "b59e7228e155bfcbaa1863f12fbbdc641e01c2fdef2d6bd4f4aeb2f3fa96bddf",
"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_system/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/__init__.py",
+ "name": "tests/integration/targets/ios_system/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "68e898ba92f5164ddc8cc51967c5e2876e9002699d528634a67f2183dd558d39",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/test_ios_bgp_global.py",
+ "name": "tests/integration/targets/ios_system/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "689d3fd1c81b87dac82c7758c3c1721d93b83a5affb05d02a5afe43b89a33439",
+ "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/test_ios_vlans.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f888b8198120a922adf3fd3a8788186da0958fa1ceb4c383f67f4e92189a42aa",
+ "name": "tests/integration/targets/ios_banner",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/test_ios_bgp.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "16e9b1cc88b73924484d635ee5a75a1906cb759e11316cc3ca2bc6884e03d216",
+ "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_l3_interfaces.py",
+ "name": "tests/integration/targets/ios_banner/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8fb3d1e70ac009d24328fe3680aaf7a62cd5382b8b985c5f41be8ab7aba03a9b",
+ "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"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/meta",
+ "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/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0b4f793aecb789530a6f3f0001fafbe618ffcdc464ca69ed105bed3bf070e8de",
+ "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/test_ios_facts.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "205430daf9d063ed7424fee04dd5fc937fc12771b13281a096ed259e394d166a",
+ "name": "tests/integration/targets/ios_banner/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/test_ios_l2_interfaces.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5f8c15e6ef5a1e936ff5be4975802e5653150bb926dd50ad90baa27747332733",
+ "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_user.py",
+ "name": "tests/integration/targets/ios_banner/tests/cli/basic-motd.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "af31457a05a3722eb39dbae567dcb89310cc242300e97b4f58cdfa7d8385fb84",
+ "chksum_sha256": "2f9346d2348dd942748aa47f61b6aff3cf6e6ad48f94121546f09266930d371b",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/test_ios_evpn_evi.py",
+ "name": "tests/integration/targets/ios_banner/tests/cli/basic-login.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e029ae1db0cc2e55e9a3b1ce9ff340f6f6a6cec55d49645adfd57f269ce7a1e9",
+ "chksum_sha256": "455be068cdb2741b681458831a33abbe656d86186a21d5dec3425add135dc14a",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/test_ios_lldp_inteface.py",
+ "name": "tests/integration/targets/ios_banner/tests/cli/multiple-login-exec.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aaefaf4ab2bfd58d99396bb634db067b881eecd359dab67de6fc872b46869853",
+ "chksum_sha256": "4c2ad7f508adfa637bf8f80e8afb4c68eeb24061eb0e54b670cb020133a38f63",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/test_ios_bgp_address_family.py",
+ "name": "tests/integration/targets/ios_banner/tests/cli/basic-no-login.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e262dda143867de45a2cf8344627aa9fd2cbe3c209c07a58c6b34d0cbbcbf58a",
+ "chksum_sha256": "3deefaccfe8f72086372732ab08319268107114dc4cf238dfef54e2974b29b26",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/test_ios_banner.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3f093e6f88c6c61cc9bf8f3d2f3e8bdc31d7462f5312506255e645fb55efd70",
+ "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_route_maps.py",
+ "name": "tests/integration/targets/ios_banner/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cc1fd7c6b70d2f623e2f348da1b65652e6fbee1b10911531d43bc2ce034b9d5d",
+ "chksum_sha256": "eebaf78d8d30ccd861ee6d250aec3bc87871e249b6875f8b0f44a4a3fc828680",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/test_ios_prefix_lists.py",
+ "name": "tests/integration/targets/ios_banner/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "017a9454d003407820fda4a0b61662bc7a4cccc82afeb867bf015fc210c11f1f",
+ "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95",
"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",
+ "name": "tests/integration/targets/ios_vxlan_vtep/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/show_version",
+ "name": "tests/integration/targets/ios_vxlan_vtep/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dc71e5e1dc8e16c64ad26477c7b0dc0d0278a20be9dc4a6d53224328f239f79b",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_route_maps.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a2764456add35e41e5109cefb0694cd6a708bcf77239259b47ed60d86fa06856",
+ "name": "tests/integration/targets/ios_vxlan_vtep/vars",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_ntp_config.cfg",
+ "name": "tests/integration/targets/ios_vxlan_vtep/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2dc4f5c356e2ba9f40ec1ad94b5bc4e597c39657662156764465f156ab6cd7cd",
+ "chksum_sha256": "7bbcfaab60d1b44f73192415eef696368496e56fecd0d5f6384a36f6ed0bf500",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_vlan_config.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "73a0c5b62bea4279d25deae4c2e04bf12c53fc3784297675a92eb98c911696fc",
+ "name": "tests/integration/targets/ios_vxlan_vtep/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_ip_interface",
+ "name": "tests/integration/targets/ios_vxlan_vtep/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_lldp",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ad64c29374175a8d737d01ae856c16364c442fca9ea7b9447ab8f22d9ed78dad",
+ "name": "tests/integration/targets/ios_vxlan_vtep/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_logging_config_ios12.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2923b7e2af16ca384a4c44c7fc1c9944367fffc1769b9ee6c41d73a9e0a2c1fb",
+ "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_banner_show_banner.txt",
+ "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fcbd9e21fbc41c072eed699ebf08ba9fc0e86b9084e4e54eb701cc12d4c764d0",
+ "chksum_sha256": "67f3d6703dbc41fb80ddc9360a8fd99addc2dbd17258b2e3d4bfc859c604d867",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_switch_virtual",
+ "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "db1b7ead274089538a05952a47f1e7800560ca1a552adc345c34dc2ab4c4f9de",
+ "chksum_sha256": "0b9a801456bd9db90925de5fb3ddf02130ebf6e4de5abbc8dd0a3d8785ade822",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_memory_statistics",
+ "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "38375b22d4c94dad4289ad32a3360980e0e8f30d69c4a0c2ab1d8181d4fb811b",
+ "chksum_sha256": "23ba22f2eacb69c8cda7d4bc0b8ffb9b9b4e3c8c2499e8512fdd09ed136e051f",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_config_config.cfg",
+ "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6fe81e446733fef4e3643a80042ab4111b9b0c927599c4b5972ecea4c18b4ffd",
+ "chksum_sha256": "149f7e871cffbb37baa730d0dc0a4964723f90d64d0f0a409ebd923b743e682a",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/__init__.py",
+ "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "9c7f20dee20d06af4441f5369836e86db1aba0bda93cb50caa49e6041ae98dba",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_prefix_lists.cfg",
+ "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dc8a935708bb8e0b18381fb2cbd56f7bd389aa02255d0b5cbfe36a5b633b1bf1",
+ "chksum_sha256": "c56eb808c76e38656a84bb5e725dc14af02482efdb85d2246613aff63e9b52cb",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_ipv6_interface",
+ "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "5665b8e91a6bb98092632ca9952389b634005325762d970aa987bf0523ccc882",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_config_defaults.cfg",
+ "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "114e89387a2b3cb37c475ed22f287f83dd93bd16a51845286b27f8355d1ae0e5",
+ "chksum_sha256": "6e7e8c2edb74ee0476b0c4d83a52c84e4230c16e3c3d051c63c6fc63018c4211",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_config_src.cfg",
+ "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "57d42d2e8e8b7a4b6cae566115ee42fecea077b525cace10cefc3b7dbd85f033",
+ "chksum_sha256": "2dbca0fd8e9d00593a5785ab68cb246e21a2ac99fff6970ff150710c246f1927",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_interfaces",
+ "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1cfa8bf44c06737f51019c8a3d7a6987fb91cb55c72a3a4a883f0eb75f13c27f",
+ "chksum_sha256": "61c3a851e2d056cec1479981c331fd2a4c1126bb8bbacd5c38ed0b4e4ff026c0",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_logging_global.cfg",
+ "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "89a3006dad756d356d14bf9704c493b1ebac4267dca6344c6af536d53dd1bbf4",
+ "chksum_sha256": "7d54c5dd89c14a5b02575b8e80f647bc66ba075563571e876e5d471beca81c10",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_ping_ping_10.255.255.250_repeat_2",
+ "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/_populate_vlan_vrf_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6102ec8eb37947bb6892dbb4c1252c794ef52376540c9d8ce2b9753aa613685",
+ "chksum_sha256": "455e27f59263b50ef9ec28db7556b9746070f5672cabe83cb0c03f6103ca3918",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_cdp",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5abf76b46295216c079870fba8c70f8f6064ccd667e80d91e31b47ab84f6fd70",
+ "name": "tests/integration/targets/ios_vxlan_vtep/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_vlans_config.cfg",
+ "name": "tests/integration/targets/ios_vxlan_vtep/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9e3b415848259747054d6586d9a85787a48f2a5d3fd5866c41f8b050eadfae90",
+ "chksum_sha256": "7607c1041a822e911d328c572b5986636a52054bad2895b89c4beb7861755017",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_l2_interfaces.cfg",
+ "name": "tests/integration/targets/ios_vxlan_vtep/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "743adf2fb8dcad62933e91c19b47b2b0437868c7e50db9a4e556431ed696f2f5",
+ "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
"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",
+ "name": "tests/integration/targets/ios_command",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_bgp_config.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8e1448b74254646dea1644addbebf552013bc999c32b8a90f3141fadfd2e045c",
+ "name": "tests/integration/targets/ios_command/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_ospfv2.cfg",
+ "name": "tests/integration/targets/ios_command/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f557ec41733d7040f5585b79e18b88623ace43d899ac80edc055e01c469240c1",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_cdp_neighbors_detail",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6e29939eafbbdcd5d64d8558cf6f5fe9d7fa1b806e62b5f19b65b0401c9c9c44",
+ "name": "tests/integration/targets/ios_command/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_virtual_switch",
+ "name": "tests/integration/targets/ios_command/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a3c3bbfb2fdcb11e3f9721d7596800690969e51e7fc66ee2e5adae3b524f7177",
+ "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2",
"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",
+ "name": "tests/integration/targets/ios_command/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_inventory",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "695c97917cde02fca97d816d92429a12142d6400180388630847a6938513829f",
+ "name": "tests/integration/targets/ios_command/tests/cli",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_banner_show_running_config_ios12.txt",
+ "name": "tests/integration/targets/ios_command/tests/cli/invalid.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ed9d617788c3a95226fda5a0dfa4271afe77626709937b27a3af70ffde7af53a",
+ "chksum_sha256": "9a5de37d3a4e9c0a0deb381515d7aad38814e2573570881499c2f37d01c33148",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_vrf_config.cfg",
+ "name": "tests/integration/targets/ios_command/tests/cli/error_regex.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9ee43d746654712aed9c1163d6130a7b6de350a3efef3e6e228355378b20be50",
+ "chksum_sha256": "9d8673ef0e332533bc520e1fc69282244014b33fe4fd67c9df97fb0c45389b35",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_logging_config.cfg",
+ "name": "tests/integration/targets/ios_command/tests/cli/timeout.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "547917e90b62a4ef7eb05c6a2527019acf8e3790d7d5a0c9f6b24af6a82a2fb3",
+ "chksum_sha256": "99999a86b0c912cd067669a525d1e0032db4e19aac5fedec7593bfc8868ae37b",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_l3_interfaces.cfg",
+ "name": "tests/integration/targets/ios_command/tests/cli/cli_command.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2836ef546936bc7b3ff57cd557f54d5c5024ecbf64451cbb4f0d9c937cdb71c6",
+ "chksum_sha256": "765a06846e98c1bc59b769855ba3c28f6ed2b7f8301b1aef0b8f0a9a4aef4863",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/configure_terminal",
+ "name": "tests/integration/targets/ios_command/tests/cli/bad_operator.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "114c1244968981a22617d661fe4e9de4734037af8970bce9b0c5b79102f8ae6e",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_ospfv3.cfg",
+ "name": "tests/integration/targets/ios_command/tests/cli/output.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b45b7eafd03c14cb0a9737561ddd60b86b708aabe1223697376c56066fabb29c",
+ "chksum_sha256": "90067084bae011b7afc19fc1569700cf0007d29ae86d423be0111fbdb7d9bf8d",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_lldp_neighbors_detail",
+ "name": "tests/integration/targets/ios_command/tests/cli/contains.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "11544c73f3e88ab5384140abf1bedd0c2501f4ed13132ab56bd22a53909183b0",
+ "chksum_sha256": "ac41c0332715a477675065b303c059029f452524c9613bfa6837221b3c8a4748",
"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",
+ "name": "tests/integration/targets/ios_command/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_system_config.cfg",
+ "name": "tests/integration/targets/ios_command/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ecb0f88d690961592ffec4c1dbeebb4b6883ed2fee08fd60117a3b7937b37949",
+ "chksum_sha256": "cbea343b9422e831a52eac293e12796cebaba8432a2a7c3ea24f3d7cfde98a01",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_facts_dir",
+ "name": "tests/integration/targets/ios_command/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bf4241a7402fd70614b668b90da04f80c7430f8f4535a1eb0a40e989a1d9d48b",
+ "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_version",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a6290b0be0cd8622c90617eace7c4c8bb1508a77d33c2b0e7bb9d6f7f8967282",
+ "name": "tests/integration/targets/ios_ping",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_processes_cpu",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e8edd6276089ec830cb2978305dcff0f77cbe3a39f393eb0969c671a981d8d89",
+ "name": "tests/integration/targets/ios_ping/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/test_ios_config.py",
+ "name": "tests/integration/targets/ios_ping/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ee85caaab9dcd66f7884d65ec2258b31e6e293815063df652bf5e855c4eb9e62",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/test_ios_ntp_global.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "40f53692102deb7518dcd712d547f7c69eb91ef39368f2580fae05c19007a8f1",
+ "name": "tests/integration/targets/ios_ping/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/test_ios_static_routes.py",
+ "name": "tests/integration/targets/ios_ping/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "21fb9e42e6cd9ad1100664fd9547d6e42780dd49021fb75c61695fbb75171063",
+ "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2",
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/test_ios_system.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f8bcc32990f03f7c3fcd480ba2166364190e718787fac98303dc45fe829dd545",
+ "name": "tests/integration/targets/ios_ping/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/test_ios_interfaces.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e4cde58f50818e45a86e4a41b795090fb15f98dbba58287705de31c480d0e28e",
+ "name": "tests/integration/targets/ios_ping/tests/cli",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/ios/test_ios_ospfv2.py",
+ "name": "tests/integration/targets/ios_ping/tests/cli/ping.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8ea2f5f1e4b14adda3c4a1e59b0ee3ee8ddf6cc65bb102efcf0a5def60f41a3b",
+ "chksum_sha256": "beb45b19b88ea64c61e0d67d7769275c18e3c12a0c572bea86d171bada913956",
"format": 1
},
{
- "name": "tests/unit/compat",
+ "name": "tests/integration/targets/ios_ping/tasks",
"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",
+ "name": "tests/integration/targets/ios_ping/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "d4fb9eae8dce0d7933579bdf2d3f8795995a4058621bb90be902cecbb7fda0da",
"format": 1
},
{
- "name": "tests/unit/compat/mock.py",
+ "name": "tests/integration/targets/ios_ping/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8ef8138e4a1226b85dfb3567d9be04aaef39270af32ae62765b745f8f46cb0ec",
+ "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95",
"format": 1
},
{
- "name": "tests/integration",
+ "name": "tests/integration/targets/ios_static_routes",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets",
+ "name": "tests/integration/targets/ios_static_routes/defaults",
"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,
+ "name": "tests/integration/targets/ios_static_routes/defaults/main.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/ios_logging_global/tasks",
+ "name": "tests/integration/targets/ios_static_routes/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_static_routes/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
+ "chksum_sha256": "9cbfbd72a07c59fa3718d4dd77eda9cfc144ecbd081561172b9cf09c5eeadf53",
"format": 1
},
{
- "name": "tests/integration/targets/ios_logging_global/meta",
+ "name": "tests/integration/targets/ios_static_routes/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_static_routes/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_static_routes/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_static_routes/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_static_routes/tests/cli/_remove_extra_ipv6_data.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a6ceabecece292ded2c58a0da2f9f147af26de4c6428584afa2f0c456afc5061",
"format": 1
},
{
- "name": "tests/integration/targets/ios_logging_global/tests/cli/_remove_config.yaml",
+ "name": "tests/integration/targets/ios_static_routes/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3b22fb7585f08098afcf881010b4d9348529e0f722c139b763f6b0c158965d9",
+ "chksum_sha256": "854a251b2b1da970c8de705b4a7d5605c18e2107d157feee9496805b811943a7",
"format": 1
},
{
- "name": "tests/integration/targets/ios_logging_global/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/ios_static_routes/tests/cli/_initial_setup_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f014b1c94475c54528d1f3680735baaf6f2e8f4712df5a77665b969c98a16228",
+ "chksum_sha256": "59e9f957b72ad03c69b153719c63dfa82fc76462044bf190464dd27e23b38ce8",
"format": 1
},
{
- "name": "tests/integration/targets/ios_logging_global/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/ios_static_routes/tests/cli/_add_extra_ipv6_data.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f808045f76ecfd2f709fb9a4af7907660e8dfb4efa55fefc3744c32da9c20bf9",
+ "chksum_sha256": "27fca9065f41504020492968e54b2e06402c06e0125a486302d1917a63ac1f43",
"format": 1
},
{
- "name": "tests/integration/targets/ios_logging_global/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/ios_static_routes/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4573b578a199c5195348871a4f8d0b0daee309e9ee60368db6968c6e64ee15f7",
+ "chksum_sha256": "e971b8839367066f0b190610a58229ed0599df3e17c4f97244b641a620b0e781",
"format": 1
},
{
- "name": "tests/integration/targets/ios_logging_global/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/ios_static_routes/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f25d81fb7693d57c2abd74e8739be232a9cbedbba1e9f8699050d04ea18d2b38",
+ "chksum_sha256": "d94e463bdb85337d3eec7c13b3a6f08547817fcb70bacc4b842ffe40fe11c13f",
"format": 1
},
{
- "name": "tests/integration/targets/ios_logging_global/tests/cli/overridden.yaml",
+ "name": "tests/integration/targets/ios_static_routes/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "09a264fcae252de2ac6ee85b8af26b74cc369cb29dc450cb21eb209818796182",
+ "chksum_sha256": "ab4fe0e6c364f83917063a0918a0cb632f8f9d26f6d4bca6c667e1e2e1181cd9",
"format": 1
},
{
- "name": "tests/integration/targets/ios_logging_global/tests/cli/_parsed.cfg",
+ "name": "tests/integration/targets/ios_static_routes/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2ecf2a5261b5c148d8c8142586318132ac92fd1663b20e91a2504ca2c2f9596c",
+ "chksum_sha256": "a789e3b6c7198a508bf40cd4e3cb57e546cda7632199c859f9099f6fb88f0f95",
"format": 1
},
{
- "name": "tests/integration/targets/ios_logging_global/tests/cli/_populate_config.yaml",
+ "name": "tests/integration/targets/ios_static_routes/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "94cb8dc2e04d8643d4feeedaaf3eb159c60bb1a997c8186a0ad7f33912a8b945",
+ "chksum_sha256": "0283a6e9bffb601b04610bc3005eecafab4424e7adffc0cd92d5f2ec80854451",
"format": 1
},
{
- "name": "tests/integration/targets/ios_logging_global/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/ios_static_routes/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7961543ce55fd097ff5b420ecabd3926f29b8631d0ef0e0a802ca601a177e2d0",
+ "chksum_sha256": "45bc3228d1228672490f41f89975c552acc03459b8d0879185ec00e9ae72e411",
"format": 1
},
{
- "name": "tests/integration/targets/ios_logging_global/tests/cli/parsed.yaml",
+ "name": "tests/integration/targets/ios_static_routes/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6752b5ded2fc4b5361215ef8163a1ac17f48da2d1a26796414a2f7d7d4aab1f3",
+ "chksum_sha256": "923d1055671a7fc041e16e4b245f7b31451ccee290adc60cc145da9e23101c29",
"format": 1
},
{
- "name": "tests/integration/targets/ios_logging_global/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/ios_static_routes/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d8b45e3678e544bb5e707a93e1155402218b01bb88ba710417db77102a7bb634",
+ "chksum_sha256": "c356f5c2db3137413b1235ce6ae54d6b2a5dc02f41074c65f2a0ba23370e3c38",
"format": 1
},
{
- "name": "tests/integration/targets/ios_logging_global/vars",
+ "name": "tests/integration/targets/ios_static_routes/tests/cli/rtt.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "dcdb366f9c765b9c097f4c406703abd2c9a03a524a6eb1d19b352d93fa2deef2",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/ios_static_routes/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_static_routes/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "54432abdc418154d2bc2d0a75a1a26d387c2ef5cc217cdcd6ddeb6cc19bc9ad5",
+ "chksum_sha256": "38d132ea3d937d0294148c6f3a04d55737b22d89d81da2b9a62d2f143db5c577",
"format": 1
},
{
- "name": "tests/integration/targets/prepare_ios_tests",
+ "name": "tests/integration/targets/ios_static_routes/tasks/cli.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/ios_route_maps",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/prepare_ios_tests/tasks",
+ "name": "tests/integration/targets/ios_route_maps/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/prepare_ios_tests/tasks/main.yml",
+ "name": "tests/integration/targets/ios_route_maps/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "044df3cbbc253645266ad8c2a377e8758a8fd53c7a7398818eeb2fe0220e0a1f",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/prepare_ios_tests/meta",
+ "name": "tests/integration/targets/ios_route_maps/vars",
"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_route_maps/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "851860fe2ed1258710d7fcf89ac5b7d8c3c87755e89ca56fdd79bea022eb2b92",
+ "chksum_sha256": "707242064a446604688cfa42b04d777ff801846293ade1154dcb3e82a9badfb8",
"format": 1
},
{
- "name": "tests/integration/targets/prepare_ios_tests/templates",
+ "name": "tests/integration/targets/ios_route_maps/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_route_maps/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a21d7b66f513ecb424fd6e23df9f0737c855281f3a5d0be6c856a0d2ce7af23b",
+ "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
"format": 1
},
{
- "name": "tests/integration/targets/ios_smoke",
+ "name": "tests/integration/targets/ios_route_maps/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_smoke/tasks",
+ "name": "tests/integration/targets/ios_route_maps/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_route_maps/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7f9fa924aaef2895a7bc9899ba35028617be0e242888fd3558903a9a5c621bf2",
+ "chksum_sha256": "3c56d9e9cfa1c23282710af3f23af288e856f3ff9134cc411a498b186c2df4c4",
"format": 1
},
{
- "name": "tests/integration/targets/ios_smoke/tasks/cli.yaml",
+ "name": "tests/integration/targets/ios_route_maps/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6cdc2604047d999342d2e29f3a546b9f8ceab22e37c2d4eaed5fb596bd4cd2f0",
+ "chksum_sha256": "49d07d449a90342c4a3b2605f7d2e5a99c3c04952701ea4a1d8b29b02577fa49",
"format": 1
},
{
- "name": "tests/integration/targets/ios_smoke/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/ios_route_maps/tests/cli/rendered.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "85fea8de40eb500f7b93f6842ded059cc8f3e346d902a06028a4869db7e19b01",
"format": 1
},
{
- "name": "tests/integration/targets/ios_smoke/meta/main.yaml",
+ "name": "tests/integration/targets/ios_route_maps/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2",
+ "chksum_sha256": "df41c3a26d7834ab66fdfe1b2faade9c312e8225c7bc99d736308371f3600ea2",
"format": 1
},
{
- "name": "tests/integration/targets/ios_smoke/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/ios_route_maps/tests/cli/empty_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7f164fe2b72297a0ed83c0dfde78abb1673ebf7715469c55d263904c54e75e8d",
"format": 1
},
{
- "name": "tests/integration/targets/ios_smoke/defaults/main.yaml",
+ "name": "tests/integration/targets/ios_route_maps/tests/cli/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
+ "chksum_sha256": "d0f8053909d848db5a593451794962888efd2e041f710294929ca1bdde0caff8",
"format": 1
},
{
- "name": "tests/integration/targets/ios_smoke/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/ios_route_maps/tests/cli/deleted.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b4046f281274bc9935c8cde1acc6b9be307f1b7ef9fb583957e1322b0c082d60",
"format": 1
},
{
- "name": "tests/integration/targets/ios_smoke/tests/cli",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/ios_route_maps/tests/cli/_remove_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ac7be197d9f1c5d050d19763c77777eb76e358ee919bb8f9cbb9f9844dc88223",
"format": 1
},
{
- "name": "tests/integration/targets/ios_smoke/tests/cli/misc_tests.yaml",
+ "name": "tests/integration/targets/ios_route_maps/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7eb9e4e697c8432c1a40e9408f7638d887c347aec871bfa157bbd7c3f0586b95",
+ "chksum_sha256": "9107ec621b5c648121c0917cd969eb12895ff1bbd5164798902d8fade0887608",
"format": 1
},
{
- "name": "tests/integration/targets/ios_smoke/tests/cli/common_config.yaml",
+ "name": "tests/integration/targets/ios_route_maps/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3cadb8dae7de5b5be84fcab95fd6e5f65816069841a996010af41c32b8438897",
+ "chksum_sha256": "9991663c3944fd60eb5c0dd904a88348ce7ebdb04550a3e596b92b67c312a8fc",
"format": 1
},
{
- "name": "tests/integration/targets/ios_smoke/tests/cli/caching.yaml",
+ "name": "tests/integration/targets/ios_route_maps/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "618ffe0e7bbd5a6d4e6172cdcca046317acbb06f8dc8b4de4e214fec6e642640",
+ "chksum_sha256": "ff7c6c2838c19016776a01f6d6704aada960e930a0829c0e47e847c70144b9f7",
"format": 1
},
{
- "name": "tests/integration/targets/ios_smoke/templates",
+ "name": "tests/integration/targets/ios_route_maps/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_smoke/templates/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/ios_route_maps/tasks/main.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e9a834620253664b73e74d67506006c5a301715f7b7a867c5bca4334f82ece7",
"format": 1
},
{
- "name": "tests/integration/targets/ios_smoke/templates/defaults/config.j2",
+ "name": "tests/integration/targets/ios_route_maps/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c67459067166baed6059b02907fb2692e34868270185b09fcd9f5d7c3ec013d0",
+ "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv2",
+ "name": "tests/integration/targets/ios_snmp_server",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv2/tasks",
+ "name": "tests/integration/targets/ios_snmp_server/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv2/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "bf9e0e41402b83f7506fedba9515bd73a0fef00d77e63f09f9b2eda0ee5c3754",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_ospfv2/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_ospfv2/meta",
+ "name": "tests/integration/targets/ios_snmp_server/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv2/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_ospfv2/defaults",
+ "name": "tests/integration/targets/ios_snmp_server/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv2/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
},
{
- "name": "tests/integration/targets/ios_ospfv2/tests",
+ "name": "tests/integration/targets/ios_snmp_server/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv2/tests/cli",
+ "name": "tests/integration/targets/ios_snmp_server/tests/cli",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "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_ospfv2/tests/cli/deleted.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "fcfa39efe63ec56350bd75b0b4ded134aa99c4f1a810039fcf0744eed952a0fd",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_ospfv2/tests/cli/gathered.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8554a710fa447dcbe0f7f0097a0f81b7129deecd19b5f4f6caafaf80bef690f8",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_ospfv2/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/ios_snmp_server/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b2013ced0c8268e36db6925558607e68fddb5887092aa3d520a2b6e1318fc7fb",
+ "chksum_sha256": "b950ea2795a909e67285cae4843c7dfadd52bc1521fd8d2138da9c7e6675aee6",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv2/tests/cli/_initial_vrf_setup.yaml",
+ "name": "tests/integration/targets/ios_snmp_server/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c35a0a936bc8f7a82cefc3c831cfed82f738026c5b5cf5832c06ed42f7098309",
+ "chksum_sha256": "7b544236b53c9b2e7df27b49d1c854d4fa0000d4508dbb639d366407fe35617c",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv2/tests/cli/rtt.yaml",
+ "name": "tests/integration/targets/ios_snmp_server/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3e11b9f26e0eb1e022969d8091b88bd0c02cb8e4e12649c63d2f526009bd6ec7",
+ "chksum_sha256": "cba89a05752a9e1102b676dab55609ea2cf326cd88b3900015a5e0b178032fab",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv2/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/ios_snmp_server/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "71aad36583afacee1f2d50726b8a99cffc3e17566f1297f8c06cda6cdb9483c5",
+ "chksum_sha256": "2288230f503cb44cb1872ec2fa86e0108853bcb9f0e9c4c65c26abbf60cddd64",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv2/tests/cli/overridden.yaml",
+ "name": "tests/integration/targets/ios_snmp_server/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be6663b98bbde670ccf5f4c019cc50bcf3461c7f1df79d59206e0dec1f9c87de",
+ "chksum_sha256": "ea45879cb4d6feb66cd45135335501892f30377f0ae7195e9caef0a6cf186f01",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv2/tests/cli/_parsed.cfg",
+ "name": "tests/integration/targets/ios_snmp_server/tests/cli/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "030a148d0e9b7d4e89581f3b82aeb06ce828a2a494fcebecac6a99a5fd9be893",
+ "chksum_sha256": "e229df97b6ba4cfa166b966f97b69f69c348cf1d3b61e42d82869a3c8b4cef45",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv2/tests/cli/_populate_config.yaml",
+ "name": "tests/integration/targets/ios_snmp_server/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e1995543982bd7f2a4aee73e5a9fce445b21af1d6ffb5f410d34b372dcd904ae",
+ "chksum_sha256": "5d324239706acbc0938a35cebdce4f126c4ac1619c44d71e8f1f7b6df123df26",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv2/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/ios_snmp_server/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c2c2d35e0efc547f71effa33a8e7de17a8c8447b28d79a00d0ad56fe4a29d130",
+ "chksum_sha256": "314132891ee35f3cd44df768368899b2b9fa9ee51d3f9510796e9f147660526d",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv2/tests/cli/parsed.yaml",
+ "name": "tests/integration/targets/ios_snmp_server/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e36682d7d591a6ebd1311a1b34bfbeb402c35f98f14f9d9521a9839f1a5fc081",
+ "chksum_sha256": "07644781622568558c597427f05f80ebb7da335eac6a6ab67dd37a7b6f86a60d",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv2/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/ios_snmp_server/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3c2988c367bd38b6fc431b3184c661086ae4bab311882e80c941cae6db04344c",
+ "chksum_sha256": "32f48d0476fccf4880ae5670b4c12afeb89951421b643296d3540a42970a2c3c",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv2/vars",
+ "name": "tests/integration/targets/ios_snmp_server/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv2/vars/main.yaml",
+ "name": "tests/integration/targets/ios_snmp_server/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8649ac5af985e516bc0be12ea860f9ada7a4454ab14ecf2d056dc16565a95e55",
+ "chksum_sha256": "e41e847b30cdc92d4ba8d8ad59e109a2acf5fdb2207b9b345199ae1692d5c386",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lldp",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/ios_snmp_server/tasks/cli.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lldp/tasks",
+ "name": "tests/integration/targets/prepare_ios_tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_lldp/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b0906e69a469f54c61369370c1de70ece7ed9341c9647ae69f471544fad206e4",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_lldp/tasks/cli.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_lldp/meta",
+ "name": "tests/integration/targets/prepare_ios_tests/templates",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_lldp/meta/main.yaml",
+ "name": "tests/integration/targets/prepare_ios_tests/templates/config.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2",
+ "chksum_sha256": "a21d7b66f513ecb424fd6e23df9f0737c855281f3a5d0be6c856a0d2ce7af23b",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lldp/defaults",
+ "name": "tests/integration/targets/prepare_ios_tests/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_lldp/defaults/main.yaml",
+ "name": "tests/integration/targets/prepare_ios_tests/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_lldp/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "851860fe2ed1258710d7fcf89ac5b7d8c3c87755e89ca56fdd79bea022eb2b92",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lldp/tests/cli",
+ "name": "tests/integration/targets/prepare_ios_tests/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_lldp/tests/cli/basic.yaml",
+ "name": "tests/integration/targets/prepare_ios_tests/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9f61afc65151115e5a86c79276acf3c3ced37cd6df01cf54550ef54252792ec7",
+ "chksum_sha256": "044df3cbbc253645266ad8c2a377e8758a8fd53c7a7398818eeb2fe0220e0a1f",
"format": 1
},
{
- "name": "tests/integration/targets/ios_evpn_global",
+ "name": "tests/integration/targets/ios_bgp_global",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_evpn_global/tasks",
+ "name": "tests/integration/targets/ios_bgp_global/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_bgp_global/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_bgp_global/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_bgp_global/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
+ "chksum_sha256": "294fb05c40c2dc3d7c4784a8cc61089bd1a705a9461e09fb33b05dbff99f9e33",
"format": 1
},
{
- "name": "tests/integration/targets/ios_evpn_global/defaults",
+ "name": "tests/integration/targets/ios_bgp_global/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_bgp_global/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_bgp_global/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_bgp_global/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_bgp_global/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bf27aff9be6f72a1bac5da95577b426f851356b9afa907bc35a5100f51b3500c",
+ "chksum_sha256": "b28f32004005582bc80fbc2a9c8db6728687c25d87f74a365e61e7a20ec853d5",
"format": 1
},
{
- "name": "tests/integration/targets/ios_evpn_global/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/ios_bgp_global/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "df48d4875d6c309498c93bf1654170b5de8dd36f00cad9b7dda06fa0ec6135d8",
+ "chksum_sha256": "ac9b0f35b9607c4dcd6ee6fe8c4c5a3a890eb3ffef2606e5d9935648df7d5b7e",
"format": 1
},
{
- "name": "tests/integration/targets/ios_evpn_global/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/ios_bgp_global/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8c950ea407d98e84ee9ef11ae5f11cdd1402a460f48159591eed290af69aa730",
+ "chksum_sha256": "75c019721cd809896e681cc3826abf70eb2a7d0616bc09817577e99c02ef7070",
"format": 1
},
{
- "name": "tests/integration/targets/ios_evpn_global/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/ios_bgp_global/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e6e04317befb43f382b3b5e4e37757fd905ea5f8099327bb255ce3031da38285",
+ "chksum_sha256": "22e70effcb2a1b4e95a65356aeb5851b46cc61d518aa81ce133b7934eb8c6d83",
"format": 1
},
{
- "name": "tests/integration/targets/ios_evpn_global/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/ios_bgp_global/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0b7ddb734d42978b5ebb82d436a354e8fae2fce18e60a1546f2d519cead08390",
+ "chksum_sha256": "b6479de2654937093427d57930e46c699ad3265ee6f67624b7414d03cd9888eb",
"format": 1
},
{
- "name": "tests/integration/targets/ios_evpn_global/tests/cli/_parsed.cfg",
+ "name": "tests/integration/targets/ios_bgp_global/tests/cli/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "54905a1be066debe036046408f5d40d3ceeccee3074090e3d1c459aeb4355e67",
+ "chksum_sha256": "87c9833d471a6b80a6c2cd0a14d29ef5b983fe7d8e9e61e6f43a8c0e1e8a89f6",
"format": 1
},
{
- "name": "tests/integration/targets/ios_evpn_global/tests/cli/_populate_config.yaml",
+ "name": "tests/integration/targets/ios_bgp_global/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1cb6068d536690bed4bb86b5901cc97b78325b5ff9a6104805278172427c9af3",
+ "chksum_sha256": "6fb296f62f074510365c9916869e8db44765c6cd34459320babfaee14deb6253",
"format": 1
},
{
- "name": "tests/integration/targets/ios_evpn_global/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/ios_bgp_global/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1c1eda73556b1082527e3387499aa6a6d5d6734bcdd7070409964563ef73734b",
+ "chksum_sha256": "3c6b76253c2d8e53a0df8c1f620ad1b90d537912cb81877fff08d39689a1537f",
"format": 1
},
{
- "name": "tests/integration/targets/ios_evpn_global/tests/cli/parsed.yaml",
+ "name": "tests/integration/targets/ios_bgp_global/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e0e4acad796d01a6db7a44d08d8ae4a7eefa3da818382224189c30eb5c6bbd92",
+ "chksum_sha256": "124e599b3086fa609f480a4a1904670d4501b436c5a927758b5399fae15e8124",
"format": 1
},
{
- "name": "tests/integration/targets/ios_evpn_global/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/ios_bgp_global/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1ee5e0cd3f90d1d5461cc3de8eec434fbb245688d2c99d12a477d0ee565f19c9",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_evpn_global/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "cfa79d338f05e3971ce8a30e951a60e8a3898786fecbf125898bfc20275377a4",
"format": 1
},
{
- "name": "tests/integration/targets/ios_evpn_global/vars/main.yaml",
+ "name": "tests/integration/targets/ios_bgp_global/tests/cli/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a930c7415288124acd312b6bc09b1120f8f8085b31c7267a1e183467377b70e0",
+ "chksum_sha256": "cca6983e388a8e06b3b72325026c23d5794b130d45a74adb6d2156525ff8335d",
"format": 1
},
{
- "name": "tests/integration/targets/ios_snmp_server",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/ios_bgp_global/tests/cli/purged.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "440e31a2f87615c703a8a25d436bebf5e076b729ab0316294b1aea01585fb9ae",
"format": 1
},
{
- "name": "tests/integration/targets/ios_snmp_server/tasks",
+ "name": "tests/integration/targets/ios_bgp_global/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_snmp_server/tasks/main.yaml",
+ "name": "tests/integration/targets/ios_bgp_global/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e41e847b30cdc92d4ba8d8ad59e109a2acf5fdb2207b9b345199ae1692d5c386",
+ "chksum_sha256": "3c1978dc1393f0ddade54f4568fbe2a213f323e71e9aa334266bad4fd016ea95",
"format": 1
},
{
- "name": "tests/integration/targets/ios_snmp_server/tasks/cli.yaml",
+ "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_snmp_server/meta",
+ "name": "tests/integration/targets/ios_user",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_snmp_server/meta/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_snmp_server/defaults",
+ "name": "tests/integration/targets/ios_user/defaults",
"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_user/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_snmp_server/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/ios_snmp_server/tests/cli",
+ "name": "tests/integration/targets/ios_user/files",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_snmp_server/tests/cli/_remove_config.yaml",
+ "name": "tests/integration/targets/ios_user/files/test_rsa",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "314132891ee35f3cd44df768368899b2b9fa9ee51d3f9510796e9f147660526d",
+ "chksum_sha256": "660b96e5ac6d6bd17900490c4749ff3a63898bb155db0a661fefbd6ac6f0fc44",
"format": 1
},
{
- "name": "tests/integration/targets/ios_snmp_server/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/ios_user/files/test_rsa.pub",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5d324239706acbc0938a35cebdce4f126c4ac1619c44d71e8f1f7b6df123df26",
+ "chksum_sha256": "4552b1d9416ac1be7c90b10b182a6ff4a4c56efcba53bb31851808c5d1fd787c",
"format": 1
},
{
- "name": "tests/integration/targets/ios_snmp_server/tests/cli/gathered.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2288230f503cb44cb1872ec2fa86e0108853bcb9f0e9c4c65c26abbf60cddd64",
+ "name": "tests/integration/targets/ios_user/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_snmp_server/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/ios_user/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ea45879cb4d6feb66cd45135335501892f30377f0ae7195e9caef0a6cf186f01",
+ "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2",
"format": 1
},
{
- "name": "tests/integration/targets/ios_snmp_server/tests/cli/merged.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "32f48d0476fccf4880ae5670b4c12afeb89951421b643296d3540a42970a2c3c",
+ "name": "tests/integration/targets/ios_user/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_snmp_server/tests/cli/overridden.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "07644781622568558c597427f05f80ebb7da335eac6a6ab67dd37a7b6f86a60d",
+ "name": "tests/integration/targets/ios_user/tests/cli",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_snmp_server/tests/cli/_parsed.cfg",
+ "name": "tests/integration/targets/ios_user/tests/cli/auth.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e229df97b6ba4cfa166b966f97b69f69c348cf1d3b61e42d82869a3c8b4cef45",
+ "chksum_sha256": "1f1317bad114d20ffe0ec55fcda33969a2575dc965be99b58cefda6742beaebe",
"format": 1
},
{
- "name": "tests/integration/targets/ios_snmp_server/tests/cli/_populate_config.yaml",
+ "name": "tests/integration/targets/ios_user/tests/cli/basic.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7b544236b53c9b2e7df27b49d1c854d4fa0000d4508dbb639d366407fe35617c",
+ "chksum_sha256": "6e0a3882e754b70b183dac98c191e5db07f0c629ecc69b466b63cb3e3b0ea0d0",
"format": 1
},
{
- "name": "tests/integration/targets/ios_snmp_server/tests/cli/parsed.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b950ea2795a909e67285cae4843c7dfadd52bc1521fd8d2138da9c7e6675aee6",
+ "name": "tests/integration/targets/ios_user/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_snmp_server/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/ios_user/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cba89a05752a9e1102b676dab55609ea2cf326cd88b3900015a5e0b178032fab",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_snmp_server/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "a8da0d0bc00401711103caf4be61022ba74b53c8296bfcd784db7ea4853111c5",
"format": 1
},
{
- "name": "tests/integration/targets/ios_snmp_server/vars/main.yaml",
+ "name": "tests/integration/targets/ios_user/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5e91e745876e69219bc6bfbd0cbdd32a8c148c856b1646dbbef806719634d3af",
+ "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95",
"format": 1
},
{
- "name": "tests/integration/targets/ios_acls",
+ "name": "tests/integration/targets/ios_l3_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_acls/tasks",
+ "name": "tests/integration/targets/ios_l3_interfaces/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_acls/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a35279615971415b54c2877e35c58f430c4b5ecf79ab75cf8b1145408aa2f1c8",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_acls/tasks/cli.yaml",
+ "name": "tests/integration/targets/ios_l3_interfaces/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_l3_interfaces/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_l3_interfaces/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
+ "chksum_sha256": "380802a37176afaba3d88556db35153b263ac7133e59292b1c2bc3633070ccd5",
"format": 1
},
{
- "name": "tests/integration/targets/ios_acls/defaults",
+ "name": "tests/integration/targets/ios_l3_interfaces/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_l3_interfaces/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_l3_interfaces/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_acls/tests/cli",
+ "name": "tests/integration/targets/ios_l3_interfaces/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_l3_interfaces/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "42615f514256b1a7d451a57c904dafc5c7887df9bd1c968f5332b28b65ee999a",
+ "chksum_sha256": "bfc3c984e0da8a8065696a6a4801d945bfaed1f84146f7c3c9745ba4468d0e1d",
"format": 1
},
{
- "name": "tests/integration/targets/ios_acls/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2110fa4eadb1937613e4b408e6d87ec92dd2e55ea8d01b22a3f058fe670aed83",
+ "chksum_sha256": "5a8e64e20ebea7d3a898216c6e256a3c0dccfcfb68a0671e3bf160e1f6c1b935",
"format": 1
},
{
- "name": "tests/integration/targets/ios_acls/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "46fbc34461ca07fa76173803e47b59638be46b109cf3033e12ab8e741e66d203",
+ "chksum_sha256": "ade890c5c428f4f2ada261b01e89f9149d27d8add293430df56161249cf0f6b2",
"format": 1
},
{
- "name": "tests/integration/targets/ios_acls/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9c3c4569c578ec8336fa353111482916a96d9b9f7ab0f3262e9fe3fb92ce0f1e",
+ "chksum_sha256": "030195c5574fcaa46ade5d2d9f640d1b1668c41025f0c78032cdebd9ebc4ef86",
"format": 1
},
{
- "name": "tests/integration/targets/ios_acls/tests/cli/rtt.yaml",
+ "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4aa123dc7a38645f48ca983339b0a43702f527b615514715a05689ddda18f592",
+ "chksum_sha256": "9c065775b6484b284e03beb65d1e250361c09fa4fc20e5006058f69e7c4eebc5",
"format": 1
},
{
- "name": "tests/integration/targets/ios_acls/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aaf7849f1fc016f09813c37599fa2f567313c681920a349d3976117ca61033bf",
+ "chksum_sha256": "74906256718324f2c376a9dcb3be7bbadb2487067b1617e6d90c16f0a109cfcd",
"format": 1
},
{
- "name": "tests/integration/targets/ios_acls/tests/cli/overridden.yaml",
+ "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ecf088fce17e2e3b5612311c4c10d551e1c0fc20716a2cba7f0424611b989fff",
+ "chksum_sha256": "77cc14435d04e3f72f0ab9457713fca28de7a508c865c08df619ce999d7ace03",
"format": 1
},
{
- "name": "tests/integration/targets/ios_acls/tests/cli/_parsed.cfg",
+ "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "40cfb30ce1b837e512a4e0a8e5d8aaa90026019732f6b712c49fa8f86c742f46",
+ "chksum_sha256": "4ed4649e2c9b10b71a7ae63117d06ec134eae6b2182f26bb8b04eb911e609707",
"format": 1
},
{
- "name": "tests/integration/targets/ios_acls/tests/cli/_populate_config.yaml",
+ "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7c7af067764f9e7823717d5b09d690789309bdb098c621a8886151cb7c5126f9",
+ "chksum_sha256": "d2a2840acaf208fa439d00dd3be862789bb3e249ca568c9e3a0f958ce4c92987",
"format": 1
},
{
- "name": "tests/integration/targets/ios_acls/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "22dff6930e31491a66e9b9f96b3adbb57e5619f9bb1cc04e699ad09651dfb23d",
+ "chksum_sha256": "f5380c447d728d61be3bdfc3dd1ba1d805186c04b0f400eeb39c91b93bbf332a",
"format": 1
},
{
- "name": "tests/integration/targets/ios_acls/tests/cli/parsed.yaml",
+ "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a6cc930a39872ad57c5b74919747421b13b0a0c985100d70763b27d0f646d0f4",
+ "chksum_sha256": "9ecda90386ebc75e0cb6e8a820a5c4bf172d4ca7bd4dbe399a4733aa6c08d07e",
"format": 1
},
{
- "name": "tests/integration/targets/ios_acls/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "855485788ef3b774a156a6a7780597f2c73639a9da4f7093bfe3289ca1e67853",
+ "chksum_sha256": "e3ccde47cab8fd1f7d6eb91c8a1744831097c27bebbf655e15d71fd2456db7f2",
"format": 1
},
{
- "name": "tests/integration/targets/ios_acls/vars",
+ "name": "tests/integration/targets/ios_l3_interfaces/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_l3_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3706a44db972213dcbf36515e04647a1cc508296cc5faea5afd0666dcf499dc9",
+ "chksum_sha256": "daa688f229d7e8db61d23cc61ebc79ccff40a6e9af6de742f4cf5fde2fab74be",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/ios_l3_interfaces/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_vlans",
"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_vlans/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_vlans/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2f113e17755cf29780c0366eea077fbf7d12d9332c0d31df993556813c20a9bf",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp/meta",
+ "name": "tests/integration/targets/ios_vlans/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp/meta/main.yaml",
+ "name": "tests/integration/targets/ios_vlans/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
+ "chksum_sha256": "1cade52f40e5745ea62114c4c0c970e7f03db0578670180c7ddbd4d968a0ebf1",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp/defaults",
+ "name": "tests/integration/targets/ios_vlans/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_vlans/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp/tests",
+ "name": "tests/integration/targets/ios_vlans/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp/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_lacp/tests/cli/_remove_config.yaml",
+ "name": "tests/integration/targets/ios_vlans/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be1b9226490c3801116b3325385dedad65ee514e21d853298e2aa94ca9f16766",
+ "chksum_sha256": "9dcb409a302fb60386633c000240bd99c7e1a925e59d940604e6b1319d138eb8",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/ios_vlans/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "83fb72d50e9f4e9ff7e3b906e1b4dba8ba4a08b0c8ff81c130a6b5c95c2c86cd",
+ "chksum_sha256": "1b9940730019c5607914c500f4e39e23b55fe858a6d0b276c96a28e72f222049",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/ios_vlans/tests/cli/_parsed_vlan_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bfe347a63f6fa9d686ee7151ca4344f94c3fdc8c7e1ce73a637ec9e4924f38fd",
+ "chksum_sha256": "5921afbe0954f8ced2a95ceba0ffe19b6d3e0b31e50dae387704727e4602aa50",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/ios_vlans/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2ae637240277ae729d901550cd50ce19b6b29b1eca663eaed8ce011bec832615",
+ "chksum_sha256": "7c3dead8718d5c971c74c59bf6c3eee8be63eb99fea05c03b0aba14e2994c4c4",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/ios_vlans/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ce393c8b6381d3030b5d2d12e7338fa4423cf1891c816db296f544467860992a",
+ "chksum_sha256": "19bfcf9b214bd48339bd025b2c044eb3a640bd46b88442f4dc5337faadc0e18c",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp/tests/cli/_parsed.cfg",
+ "name": "tests/integration/targets/ios_vlans/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "744f90515ff83553dfeff83df0ccf4aa826c3249574c42686fd9d6c41394d19c",
+ "chksum_sha256": "4ffdb8c877c749e808b435c833c92f3b7d7343d05c4ba8d8f1b39e519b1b63a2",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp/tests/cli/_populate_config.yaml",
+ "name": "tests/integration/targets/ios_vlans/tests/cli/rendered_vlan_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fc650f89a8a2ebce685210ae5fa3d65d1d31652a993164005d3327f4861881b6",
+ "chksum_sha256": "eb23b5c2bf1f0f35f49b160da45e45decfd895bb8d789a023f4ef8b975dc2dbc",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/ios_vlans/tests/cli/merged_vlan_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "68518c550a5a993fc26f2508bbf71ef506bcb2eb7101ac3005ec4b7163515459",
+ "chksum_sha256": "018078882c63dfba371d5ada153412afd132eacc280cf5fda138c0c663fb500d",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp/tests/cli/parsed.yaml",
+ "name": "tests/integration/targets/ios_vlans/tests/cli/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "45475bede19466ee41f4b1d966a80c10988ece6e1ea77232c4c9883ef2f22123",
+ "chksum_sha256": "31dcdedd876672aa1f15ac36c7b35b156cea9795b15f686e40b2eecaa0ea5392",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/ios_vlans/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "364387abef4d57a5903ef74f788703e41ed604a98ef24bcebcc837c85fad934a",
+ "chksum_sha256": "e7bc4328acfacc36056f4f9fd2ed9cebef987ba490730967a191721c62993aa5",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp/aliases",
+ "name": "tests/integration/targets/ios_vlans/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9b121bba6a0892e8ff599846aa1ea5c388ae3c8a9e6a85192f43b89cf992719f",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_lacp/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "2cee0574690e1a22ae1502659dbf76f95aa0f3adcc742e32a25241043c9eaa20",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp/vars/main.yaml",
+ "name": "tests/integration/targets/ios_vlans/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "34537c31909d55ab6461991eb2ddfae9e4dd32b1b7e01133aa040dfe08ae02b9",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_bgp",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_bgp/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "2d7773b3edea41259b34dbfefcc4c7a543c6ab3c1a1a2d85a334d0cefad37b91",
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp/tasks/main.yaml",
+ "name": "tests/integration/targets/ios_vlans/tests/cli/gathered_vlan_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e03ae6e52f8d7161565991a66935845e9141dd6b6bf67f939b1651c229cea114",
+ "chksum_sha256": "5fee35bae6ec5d9945f2f9f4b7c5bea83745b2316b00de19871379315d1db91e",
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp/tasks/cli.yaml",
+ "name": "tests/integration/targets/ios_vlans/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9739e364f374e25ab4075944df0f36a45c1937d5bcaee64b9120d651349f7297",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_bgp/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "96631f083020ab2d55c8ad66ef70bf26942bf12da2864a3b45b8afb934e5c7d7",
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp/meta/main.yaml",
+ "name": "tests/integration/targets/ios_vlans/tests/cli/_remove_config_vlan_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2",
+ "chksum_sha256": "552b6d2b0820aa662bcfdd52f55b169b4cee43dd29677494db263ba3a9e7a548",
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_bgp/defaults/main.yaml",
+ "name": "tests/integration/targets/ios_vlans/tests/cli/_populate_config_vlan_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_bgp/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_bgp/tests/cli",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "ea1418e61499a54da8b0fc871d438e4955dfc1ae371120f4abed0fa6dafd1836",
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp/tests/cli/basic.yaml",
+ "name": "tests/integration/targets/ios_vlans/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "93546203b3b3da6687b1f61844ce847c75681b3b2ca9d9456bb1ad296603de72",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_banner",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_banner/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "d90eba79cf10b15a5318824e1fbc6e877db3951526be828180d47a3d1f8aeb03",
"format": 1
},
{
- "name": "tests/integration/targets/ios_banner/tasks/main.yaml",
+ "name": "tests/integration/targets/ios_vlans/tests/cli/overridden_vlan_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eebaf78d8d30ccd861ee6d250aec3bc87871e249b6875f8b0f44a4a3fc828680",
+ "chksum_sha256": "5f85654bf5f219c1d3e2569e0bcefad7c12232329ce58ad42219373b88ea2c15",
"format": 1
},
{
- "name": "tests/integration/targets/ios_banner/tasks/cli.yaml",
+ "name": "tests/integration/targets/ios_vlans/tests/cli/deleted_vlan_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95",
+ "chksum_sha256": "c257655cbf982e357facbb58b224b180677889e1dd9803351435d85b834a7b9f",
"format": 1
},
{
- "name": "tests/integration/targets/ios_banner/meta",
- "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/tests/cli/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_banner/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "85a1aebb72960e9ca957302e141f03debf96a1ab54926905a182b6f12fc2bb55",
"format": 1
},
{
- "name": "tests/integration/targets/ios_banner/defaults/main.yaml",
+ "name": "tests/integration/targets/ios_vlans/tests/cli/parsed_vlan_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
+ "chksum_sha256": "a48ff2cab2dc7f5b92ac31b25fa52af940fc463ceb244c8fd28ee7b107ef08fa",
"format": 1
},
{
- "name": "tests/integration/targets/ios_banner/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/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_banner/tests/cli/basic-login.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "455be068cdb2741b681458831a33abbe656d86186a21d5dec3425add135dc14a",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_banner/tests/cli/basic-no-login.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3deefaccfe8f72086372732ab08319268107114dc4cf238dfef54e2974b29b26",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_banner/tests/cli/basic-motd.yaml",
+ "name": "tests/integration/targets/ios_vlans/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2f9346d2348dd942748aa47f61b6aff3cf6e6ad48f94121546f09266930d371b",
+ "chksum_sha256": "8fa2acc83e477a128ac38edeec64fee41b19c60ee0c81a9c4fc633958a687a73",
"format": 1
},
{
- "name": "tests/integration/targets/ios_banner/tests/cli/multiple-login-exec.yaml",
+ "name": "tests/integration/targets/ios_vlans/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4c2ad7f508adfa637bf8f80e8afb4c68eeb24061eb0e54b670cb020133a38f63",
+ "chksum_sha256": "2f113e17755cf29780c0366eea077fbf7d12d9332c0d31df993556813c20a9bf",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ntp_global",
+ "name": "tests/integration/targets/ios_logging_global",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_ntp_global/tasks",
+ "name": "tests/integration/targets/ios_logging_global/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_ntp_global/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7fc06936d093493791466cc5b227ef05b6a0175615a5ce00453f6effb74f9532",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_ntp_global/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_ntp_global/meta",
+ "name": "tests/integration/targets/ios_logging_global/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_ntp_global/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_ntp_global/defaults",
+ "name": "tests/integration/targets/ios_logging_global/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_ntp_global/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_ntp_global/tests",
+ "name": "tests/integration/targets/ios_logging_global/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_ntp_global/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_ntp_global/tests/cli/_remove_config.yaml",
+ "name": "tests/integration/targets/ios_logging_global/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bcff8a20978c31e6c69a155803657b695a5f65a32c494c6d83d65d008e8020d6",
+ "chksum_sha256": "6752b5ded2fc4b5361215ef8163a1ac17f48da2d1a26796414a2f7d7d4aab1f3",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ntp_global/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/ios_logging_global/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2b3bef8e48a4ebef6e417c5e919751cd9bd526308fdacd16395203eb4feb9f82",
+ "chksum_sha256": "94cb8dc2e04d8643d4feeedaaf3eb159c60bb1a997c8186a0ad7f33912a8b945",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ntp_global/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/ios_logging_global/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a6b0345d271e15e951a9a150a43aa0906c3c91a5290b27ae942ab9ece89cbeb4",
+ "chksum_sha256": "d8b45e3678e544bb5e707a93e1155402218b01bb88ba710417db77102a7bb634",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ntp_global/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/ios_logging_global/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d80307c7fbf6fc328ebf0395601768f230c08d052cba3e459e4b1755635a2a21",
+ "chksum_sha256": "f808045f76ecfd2f709fb9a4af7907660e8dfb4efa55fefc3744c32da9c20bf9",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ntp_global/tests/cli/rtt.yaml",
+ "name": "tests/integration/targets/ios_logging_global/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f41a107502fd7e4be2baf717aafa72bbafc34125fa229ec2e123f7dd7225176e",
+ "chksum_sha256": "4573b578a199c5195348871a4f8d0b0daee309e9ee60368db6968c6e64ee15f7",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ntp_global/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/ios_logging_global/tests/cli/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d9b1ee000ffc164233351430bc0f5f3c9d3a336fd09ef670bfa40a7e2eebafc3",
+ "chksum_sha256": "2ecf2a5261b5c148d8c8142586318132ac92fd1663b20e91a2504ca2c2f9596c",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ntp_global/tests/cli/overridden.yaml",
+ "name": "tests/integration/targets/ios_logging_global/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "306dedea01d094347dc69f10f2e68ed7787372ed087fa1c5ee2d5953a8767016",
+ "chksum_sha256": "f014b1c94475c54528d1f3680735baaf6f2e8f4712df5a77665b969c98a16228",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ntp_global/tests/cli/_parsed.cfg",
+ "name": "tests/integration/targets/ios_logging_global/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e350806f21caa0181d510feb9cb4e70185286e62aa3b52719b59d55172f2126a",
+ "chksum_sha256": "d3b22fb7585f08098afcf881010b4d9348529e0f722c139b763f6b0c158965d9",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ntp_global/tests/cli/_populate_config.yaml",
+ "name": "tests/integration/targets/ios_logging_global/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8cc9ea8d4a47459ec32d942855702c789ba3347e0693f57313003f45020d8a7a",
+ "chksum_sha256": "09a264fcae252de2ac6ee85b8af26b74cc369cb29dc450cb21eb209818796182",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ntp_global/tests/cli/parsed.yaml",
+ "name": "tests/integration/targets/ios_logging_global/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b633b4d6ccef76001f6764713b498278bf30e1dd964673e556fab42166480786",
+ "chksum_sha256": "f25d81fb7693d57c2abd74e8739be232a9cbedbba1e9f8699050d04ea18d2b38",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ntp_global/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/ios_logging_global/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9080f77ada9c677a1f4f275d42ed6bb0123286aa0ce5462bd2c580f47dda0d07",
+ "chksum_sha256": "7961543ce55fd097ff5b420ecabd3926f29b8631d0ef0e0a802ca601a177e2d0",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ntp_global/vars",
+ "name": "tests/integration/targets/ios_logging_global/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_logging_global/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "99f97d7709529ad5a370ef88ca759dd566abc45940443dbe28762778ab40c544",
+ "chksum_sha256": "16f3cc0b8e2e2d5d9776298fab6f9d5648e4c35498db7605af69c8e97e122464",
"format": 1
},
{
- "name": "tests/integration/targets/ios_static_routes",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/ios_logging_global/tasks/cli.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
"format": 1
},
{
- "name": "tests/integration/targets/ios_static_routes/tasks",
+ "name": "tests/integration/targets/ios_lacp_interfaces",
"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",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_static_routes/tasks/cli.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_static_routes/meta",
+ "name": "tests/integration/targets/ios_lacp_interfaces/defaults",
"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_lacp_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/ios_static_routes/defaults",
+ "name": "tests/integration/targets/ios_lacp_interfaces/vars",
"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_lacp_interfaces/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "866d49b9fb83bafefee3c2ed7ba79d894e2b28af83b4fed56ad48982c364a894",
"format": 1
},
{
- "name": "tests/integration/targets/ios_static_routes/tests",
+ "name": "tests/integration/targets/ios_lacp_interfaces/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_lacp_interfaces/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_lacp_interfaces/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "59e9f957b72ad03c69b153719c63dfa82fc76462044bf190464dd27e23b38ce8",
+ "chksum_sha256": "fc43ad13fcf0465249c1941a418f61f36fba08a55afaef2aa8a7949ed028a7fe",
"format": 1
},
{
- "name": "tests/integration/targets/ios_static_routes/tests/cli/_add_extra_ipv6_data.yaml",
+ "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "27fca9065f41504020492968e54b2e06402c06e0125a486302d1917a63ac1f43",
+ "chksum_sha256": "ac8361b624da0372fb79c80bd147c5b9bfed4d4140d0be7fe9957b75e414c61b",
"format": 1
},
{
- "name": "tests/integration/targets/ios_static_routes/tests/cli/_remove_config.yaml",
+ "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0283a6e9bffb601b04610bc3005eecafab4424e7adffc0cd92d5f2ec80854451",
+ "chksum_sha256": "e87a35985502b9c92eb9c60ed83fdefcc11a17e26b421e067dcf7be3624c8503",
"format": 1
},
{
- "name": "tests/integration/targets/ios_static_routes/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a789e3b6c7198a508bf40cd4e3cb57e546cda7632199c859f9099f6fb88f0f95",
+ "chksum_sha256": "5bb10615fc266a5079e9adaf3307602bdefac54f4e8c9fda96954eb59ddc1485",
"format": 1
},
{
- "name": "tests/integration/targets/ios_static_routes/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d94e463bdb85337d3eec7c13b3a6f08547817fcb70bacc4b842ffe40fe11c13f",
+ "chksum_sha256": "200cc72937b5aab4388efc5e85b4f590dfae9bbbfd9668c2c8390d42c73cb1a3",
"format": 1
},
{
- "name": "tests/integration/targets/ios_static_routes/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ab4fe0e6c364f83917063a0918a0cb632f8f9d26f6d4bca6c667e1e2e1181cd9",
+ "chksum_sha256": "05d13aca3673ed53547e84c3a96b852f6c6b21e31b250ccae1a3c9dc8a455415",
"format": 1
},
{
- "name": "tests/integration/targets/ios_static_routes/tests/cli/_remove_extra_ipv6_data.yaml",
+ "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a6ceabecece292ded2c58a0da2f9f147af26de4c6428584afa2f0c456afc5061",
+ "chksum_sha256": "6b15190694a3230175825f662ffc5be36c207a5508f8dd03e34d0f16dba801c3",
"format": 1
},
{
- "name": "tests/integration/targets/ios_static_routes/tests/cli/rtt.yaml",
+ "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dcdb366f9c765b9c097f4c406703abd2c9a03a524a6eb1d19b352d93fa2deef2",
+ "chksum_sha256": "337f2c06ea2b0c31adfc06bd0684edb480b1a333dc4d82fd36e74e6efad7d6ba",
"format": 1
},
{
- "name": "tests/integration/targets/ios_static_routes/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/_add_port_channels.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "923d1055671a7fc041e16e4b245f7b31451ccee290adc60cc145da9e23101c29",
+ "chksum_sha256": "37e0850a33908a4856f7167d6e488cbf3b6060950a032aae1f1006dae560d2aa",
"format": 1
},
{
- "name": "tests/integration/targets/ios_static_routes/tests/cli/overridden.yaml",
+ "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "45bc3228d1228672490f41f89975c552acc03459b8d0879185ec00e9ae72e411",
+ "chksum_sha256": "83acc10766bff99eaf1085cfc2fab4b54e4101edfc70d06c19f65eb5f90f0478",
"format": 1
},
{
- "name": "tests/integration/targets/ios_static_routes/tests/cli/_populate_config.yaml",
+ "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "854a251b2b1da970c8de705b4a7d5605c18e2107d157feee9496805b811943a7",
+ "chksum_sha256": "8a4d9930854480ec68685dfce6a5ca53170d519fa93b8b10ff89d84c2fef906d",
"format": 1
},
{
- "name": "tests/integration/targets/ios_static_routes/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c356f5c2db3137413b1235ce6ae54d6b2a5dc02f41074c65f2a0ba23370e3c38",
+ "chksum_sha256": "6fd2582bf431113cefd8a863baf6d1b6908f5cd142dccde32ef536feb29d0702",
"format": 1
},
{
- "name": "tests/integration/targets/ios_static_routes/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e971b8839367066f0b190610a58229ed0599df3e17c4f97244b641a620b0e781",
+ "chksum_sha256": "3de8041d6d7c288d7f421fc629c2bbcfd5b1faf29d3785fb1f8c39b6b5f36775",
"format": 1
},
{
- "name": "tests/integration/targets/ios_static_routes/vars",
+ "name": "tests/integration/targets/ios_lacp_interfaces/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_static_routes/vars/main.yaml",
+ "name": "tests/integration/targets/ios_lacp_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9cbfbd72a07c59fa3718d4dd77eda9cfc144ecbd081561172b9cf09c5eeadf53",
+ "chksum_sha256": "42f682d0706bde5cedd3667110b289d169b29ca20a1692b85c51bbe5f1e3131e",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/ios_lacp_interfaces/tasks/cli.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2f113e17755cf29780c0366eea077fbf7d12d9332c0d31df993556813c20a9bf",
"format": 1
},
{
@@ -5685,38 +5370,31 @@
"format": 1
},
{
- "name": "tests/integration/targets/ios_lldp_interfaces/tasks",
+ "name": "tests/integration/targets/ios_lldp_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_lldp_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_lldp_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_lldp_interfaces/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "887240ad30c1751c17e47be11a0cc78b5c323d442967b30457bba74054d6ada3",
"format": 1
},
{
@@ -5734,17 +5412,24 @@
"format": 1
},
{
- "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/_remove_config.yaml",
+ "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e44e3d1b77f9197ef4361d6dbf20eded541d03f581394845c3696a83e441f2ad",
+ "chksum_sha256": "007a1de94220246c924b2d51649d632c2caee32e05fdb91f25df2e14e0e602e8",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b9cdedfb409a6a585b41bbb846c76b74db84cecab5bdbfeef8886855f6cd1a51",
+ "chksum_sha256": "5beb898fd85dd55c16543656a24d0f3cf81103d0b4a3b9ac5c0986a4f630e703",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/rendered.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "def5a49dd2014e2079ca9312f36b626f9bfe5606d255f306eec9dc700ae9f7a0",
"format": 1
},
{
@@ -5762,38 +5447,38 @@
"format": 1
},
{
- "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/rtt.yaml",
+ "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c677840c5b24b7fbc56a54cbe609c24c198bf12cb1b9db9218316a45f9481211",
+ "chksum_sha256": "fccbbf49369445f70a482c85b55c078f9cadd67786a0a013fc6698b25100108c",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ebe78d90845598db5bbb9706a02725bbd5b4c78bc04e50afb888329367641945",
+ "chksum_sha256": "b9cdedfb409a6a585b41bbb846c76b74db84cecab5bdbfeef8886855f6cd1a51",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/overridden.yaml",
+ "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ca080f4e61b3ed9435f09d4ce2341f2851ab47817e80383ce5c329cb89216b8f",
+ "chksum_sha256": "e44e3d1b77f9197ef4361d6dbf20eded541d03f581394845c3696a83e441f2ad",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/_parsed.cfg",
+ "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fccbbf49369445f70a482c85b55c078f9cadd67786a0a013fc6698b25100108c",
+ "chksum_sha256": "ca080f4e61b3ed9435f09d4ce2341f2851ab47817e80383ce5c329cb89216b8f",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/_populate_config.yaml",
+ "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5beb898fd85dd55c16543656a24d0f3cf81103d0b4a3b9ac5c0986a4f630e703",
+ "chksum_sha256": "ebe78d90845598db5bbb9706a02725bbd5b4c78bc04e50afb888329367641945",
"format": 1
},
{
@@ -5811,31 +5496,31 @@
"format": 1
},
{
- "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/parsed.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "007a1de94220246c924b2d51649d632c2caee32e05fdb91f25df2e14e0e602e8",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "def5a49dd2014e2079ca9312f36b626f9bfe5606d255f306eec9dc700ae9f7a0",
+ "chksum_sha256": "c677840c5b24b7fbc56a54cbe609c24c198bf12cb1b9db9218316a45f9481211",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lldp_interfaces/vars",
+ "name": "tests/integration/targets/ios_lldp_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_lldp_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "887240ad30c1751c17e47be11a0cc78b5c323d442967b30457bba74054d6ada3",
+ "chksum_sha256": "5e606724f5e050623ada8c3ebac4a083abdd02767b5957a2a8904f043d62e05d",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/ios_lldp_interfaces/tasks/cli.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
"format": 1
},
{
@@ -5846,24 +5531,17 @@
"format": 1
},
{
- "name": "tests/integration/targets/ios_facts/tasks",
+ "name": "tests/integration/targets/ios_facts/defaults",
"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",
+ "name": "tests/integration/targets/ios_facts/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
@@ -5881,20 +5559,6 @@
"format": 1
},
{
- "name": "tests/integration/targets/ios_facts/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_facts/defaults/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
- "format": 1
- },
- {
"name": "tests/integration/targets/ios_facts/tests",
"ftype": "dir",
"chksum_type": null,
@@ -5916,6 +5580,13 @@
"format": 1
},
{
+ "name": "tests/integration/targets/ios_facts/tests/cli/all_facts.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e8dc5bf84ef359c8b9110d3263998c4104a821dce2f3d80475e69e3ca4d781b3",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/ios_facts/tests/cli/default_facts.yaml",
"ftype": "file",
"chksum_type": "sha256",
@@ -5930,1627 +5601,1732 @@
"format": 1
},
{
- "name": "tests/integration/targets/ios_facts/tests/cli/all_facts.yaml",
+ "name": "tests/integration/targets/ios_facts/tasks",
+ "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": "c5dd6cf0f7fe495fd14458aafe778ec70adcec1013d6bfd57baed70599f98c90",
+ "chksum_sha256": "093a68ecff9678aad9ed8e47c822c8dd795b7f5b6a14493bbbfe1d67a378c324",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lag_interfaces",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/ios_facts/tasks/cli.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lag_interfaces/tasks",
+ "name": "tests/integration/targets/ios_lacp",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_lag_interfaces/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "79c7a4587c7a00a2c7a91a5eab3b092671c730ab0c82458102614e087ae32030",
+ "name": "tests/integration/targets/ios_lacp/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_lag_interfaces/tasks/cli.yaml",
+ "name": "tests/integration/targets/ios_lacp/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2f113e17755cf29780c0366eea077fbf7d12d9332c0d31df993556813c20a9bf",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lag_interfaces/meta",
+ "name": "tests/integration/targets/ios_lacp/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_lag_interfaces/meta/main.yaml",
+ "name": "tests/integration/targets/ios_lacp/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
+ "chksum_sha256": "34537c31909d55ab6461991eb2ddfae9e4dd32b1b7e01133aa040dfe08ae02b9",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lag_interfaces/defaults",
+ "name": "tests/integration/targets/ios_lacp/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_lag_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_lag_interfaces/tests",
+ "name": "tests/integration/targets/ios_lacp/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_lag_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_lag_interfaces/tests/cli/_remove_config.yaml",
+ "name": "tests/integration/targets/ios_lacp/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d11cd0691705a44a06275d2438229562d70cb6eeafdfd7823c306fae55ab7974",
+ "chksum_sha256": "45475bede19466ee41f4b1d966a80c10988ece6e1ea77232c4c9883ef2f22123",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/ios_lacp/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9ae384d2d361bfec3e5ec8d4521923a328fd0a6b06ee0fad2dc813650f4867af",
+ "chksum_sha256": "fc650f89a8a2ebce685210ae5fa3d65d1d31652a993164005d3327f4861881b6",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/ios_lacp/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4a3bf0d0d675271115fbfcb01d220b647d351ba511dff0d16d9f8d7468ce8ac6",
+ "chksum_sha256": "364387abef4d57a5903ef74f788703e41ed604a98ef24bcebcc837c85fad934a",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/ios_lacp/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "41fc0f1077783f0157b1bdae02da05009bd55cf31cfffdce93f25490569c7eaa",
+ "chksum_sha256": "bfe347a63f6fa9d686ee7151ca4344f94c3fdc8c7e1ce73a637ec9e4924f38fd",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/_add_port_channels.yml",
+ "name": "tests/integration/targets/ios_lacp/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "37e0850a33908a4856f7167d6e488cbf3b6060950a032aae1f1006dae560d2aa",
+ "chksum_sha256": "2ae637240277ae729d901550cd50ce19b6b29b1eca663eaed8ce011bec832615",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/rtt.yaml",
+ "name": "tests/integration/targets/ios_lacp/tests/cli/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "45de9b52c7ab6864f1abd09fe743ffafdc10eb084285f98755c9ec21137e9bb0",
+ "chksum_sha256": "744f90515ff83553dfeff83df0ccf4aa826c3249574c42686fd9d6c41394d19c",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/ios_lacp/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a9ef52fd6e4d52c3bdf173bf2d2c13f4ad7515dfd508f93e70d00f951cebc8d5",
+ "chksum_sha256": "83fb72d50e9f4e9ff7e3b906e1b4dba8ba4a08b0c8ff81c130a6b5c95c2c86cd",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/overridden.yaml",
+ "name": "tests/integration/targets/ios_lacp/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dae7f6e33417854fdb686dc22ab25acf7ccd05b1cd088087f4b6777012ecd7c4",
+ "chksum_sha256": "be1b9226490c3801116b3325385dedad65ee514e21d853298e2aa94ca9f16766",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/_parsed.cfg",
+ "name": "tests/integration/targets/ios_lacp/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c30f577272b1c7bdc04fc0cf9a016b5c004a93f0e7d09cdb4bca3fa5aafeea8e",
+ "chksum_sha256": "ce393c8b6381d3030b5d2d12e7338fa4423cf1891c816db296f544467860992a",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/_populate_config.yaml",
+ "name": "tests/integration/targets/ios_lacp/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "af7be4e062acefec5cf61c6cc7ad3cb369db2b641ae00f229621ee62a47fe90e",
+ "chksum_sha256": "68518c550a5a993fc26f2508bbf71ef506bcb2eb7101ac3005ec4b7163515459",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/_populate_port_channel.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": "18e91e2791fb6dd738d3042718436ae3244dbd0a90b5f1886ed5a5daf1d46ceb",
+ "chksum_sha256": "42f682d0706bde5cedd3667110b289d169b29ca20a1692b85c51bbe5f1e3131e",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/ios_lacp/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "59d406ceef4165fcae86490c8251a719575a113ebe80cce578c1e4b67c974225",
+ "chksum_sha256": "2f113e17755cf29780c0366eea077fbf7d12d9332c0d31df993556813c20a9bf",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/parsed.yaml",
+ "name": "tests/integration/targets/ios_lacp/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "523ce08d67e26a55d5ae1004bdf73f5f785348437c918d98179f5bb01e403839",
+ "chksum_sha256": "9b121bba6a0892e8ff599846aa1ea5c388ae3c8a9e6a85192f43b89cf992719f",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/ios_linkagg",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "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": "0ce0f4b8f4ff19ca8202594612bfff8bbe94ce65867e3db6e3e9bde4354c4c16",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lag_interfaces/vars",
+ "name": "tests/integration/targets/ios_linkagg/meta",
"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_linkagg/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7548cef68905ad34af6e5c02e932c61e8eadc317b15831fca6346a128b89f7bb",
+ "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2",
"format": 1
},
{
- "name": "tests/integration/targets/ios_acl_interfaces",
+ "name": "tests/integration/targets/ios_linkagg/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_acl_interfaces/tasks",
+ "name": "tests/integration/targets/ios_linkagg/tests/cli",
"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_linkagg/tests/cli/basic.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9a46304602c050830a04642d790e2c32e7ca38138a3115617a321b0aaa966ac9",
+ "chksum_sha256": "01543795b9d0559974aa6eb2e501541a442c6d8a61361ab6ce30eb7d7a0610e3",
"format": 1
},
{
- "name": "tests/integration/targets/ios_acl_interfaces/tasks/cli.yaml",
+ "name": "tests/integration/targets/ios_linkagg/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/ios_linkagg/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
+ "chksum_sha256": "8171ce9eb1bd2474dcb5e0f86eeb142567bac349514708f53c24829283fd382e",
"format": 1
},
{
- "name": "tests/integration/targets/ios_acl_interfaces/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_acl_interfaces/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_acl_interfaces/tests",
+ "name": "tests/integration/targets/ios_ospfv3/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_acl_interfaces/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_acl_interfaces/tests/cli/_remove_config.yaml",
+ "name": "tests/integration/targets/ios_ospfv3/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3989e7f762cbbf518de2b3778ab60754ec12e403c145956777cbab0962368206",
+ "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
"format": 1
},
{
- "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/deleted.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "26b38d39df6a806126bb1981ac16b20707118f8d4b4bf77036dd328705ed3b76",
+ "name": "tests/integration/targets/ios_ospfv3/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/gathered.yaml",
+ "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": "b052384eec330f45bc81d36118752d8997371068252fc29e436bdb59391de045",
+ "chksum_sha256": "616e7d9e3cc11d85aa6f6948a80ba8ad080df33b6fa2574e58ea96dda1b8b4d7",
"format": 1
},
{
- "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/ios_ospfv3/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5e5d0eebcdf9df91bd9427cda551ac2faa5b3c91559e742a18ce0eb59d0b5755",
+ "chksum_sha256": "d825c44ce8c9cec4e8b41ce23a867b76e766c6e6a3491d6621585bce8bdd57c3",
"format": 1
},
{
- "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/rtt.yaml",
+ "name": "tests/integration/targets/ios_ospfv3/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "02c8c24f18a12ddb0ed2b7d21e39eac17a3c36787f8ff145223ca43af0c02e42",
+ "chksum_sha256": "21aabfd4dd00cabd0670087c3f46d8f3cf0dac51e013d14790546ec52612579c",
"format": 1
},
{
- "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/ios_ospfv3/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3077db7d9d462cc53d8a755d6ff91972855473a4303ea49862dd1c26b1345816",
+ "chksum_sha256": "72297b557d1b34d29b999d26e00a0b28d813fd1e458338acd1cd3b24b0a35aab",
"format": 1
},
{
- "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/overridden.yaml",
+ "name": "tests/integration/targets/ios_ospfv3/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5f0b6df959031fc5ab1736f470d21d0d029f71711b916b666e8172e5af4be64b",
+ "chksum_sha256": "2bfc27b217fab25508ee8dedb4819c40bdb98b3352c464065f8ef169622f4384",
"format": 1
},
{
- "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/_parsed.cfg",
+ "name": "tests/integration/targets/ios_ospfv3/tests/cli/_initial_vrf_setup.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "25ed4323da59a62b27fbd759263f146585f660557ae20c810f4a00602a4584d1",
+ "chksum_sha256": "7fb8dc743143aa6677f024b7333e02bb1f52f1a9c434cd86e1617b442dcc8a0b",
"format": 1
},
{
- "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/_populate_config.yaml",
+ "name": "tests/integration/targets/ios_ospfv3/tests/cli/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "135c4a4d72895e789f33ef5d20039e4dd8a1ddb92402b8fd25cbed9d3cf993b6",
+ "chksum_sha256": "75178f12ee6688bc6635aafb6d83adddbed9b5a0d12fb9d39c819afa14adba64",
"format": 1
},
{
- "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/ios_ospfv3/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3860df920e3f445383200f9261984c3a4bf72d7c93ad252ee8bb237fe2acc163",
+ "chksum_sha256": "844b1f73132324bcee3f3390fce22388df69b69e4266ffebbdd4c5d6a8a4c2e8",
"format": 1
},
{
- "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/parsed.yaml",
+ "name": "tests/integration/targets/ios_ospfv3/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e5e5626f01eb1f6cd90237efc8972743f594500e8f3fcb34f8f0e6752069ab2c",
+ "chksum_sha256": "238918c44b8752332fe7ee6df2e293a51da17252fdf2362b337e6a897cc224cc",
"format": 1
},
{
- "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/ios_ospfv3/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "168cef1691a6a4585ce66751fe0e9520573ac71ffbe016a9a3f239b195b9a8e3",
+ "chksum_sha256": "c8f73d52be036135d76b6157719db5f9bd4f7761ebeae5618e48a339ed14ae4e",
"format": 1
},
{
- "name": "tests/integration/targets/ios_acl_interfaces/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_acl_interfaces/vars/main.yaml",
+ "name": "tests/integration/targets/ios_ospfv3/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f860d0bfa1a178cc8f9426b3e865a1e8db7123ea9dbeed64494fb52dca4875c4",
+ "chksum_sha256": "23df18165ce662f9a6837926a752e92d9c0500334a68492ae8607c2385b4cb29",
"format": 1
},
{
- "name": "tests/integration/targets/ios_route_maps",
- "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_route_maps/tasks",
+ "name": "tests/integration/targets/ios_ospfv3/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_route_maps/tasks/main.yaml",
+ "name": "tests/integration/targets/ios_ospfv3/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8e9a834620253664b73e74d67506006c5a301715f7b7a867c5bca4334f82ece7",
+ "chksum_sha256": "2ee4493aa601f74dca37f18dfebff80578f8ad47283d1921825a9036bae468ad",
"format": 1
},
{
- "name": "tests/integration/targets/ios_route_maps/tasks/cli.yaml",
+ "name": "tests/integration/targets/ios_ospfv3/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
"format": 1
},
{
- "name": "tests/integration/targets/ios_route_maps/meta",
+ "name": "tests/integration/targets/ios_acl_interfaces",
"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_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": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/ios_route_maps/defaults",
+ "name": "tests/integration/targets/ios_acl_interfaces/vars",
"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_acl_interfaces/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "f860d0bfa1a178cc8f9426b3e865a1e8db7123ea9dbeed64494fb52dca4875c4",
"format": 1
},
{
- "name": "tests/integration/targets/ios_route_maps/tests",
+ "name": "tests/integration/targets/ios_acl_interfaces/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_route_maps/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_route_maps/tests/cli/_remove_config.yaml",
+ "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ac7be197d9f1c5d050d19763c77777eb76e358ee919bb8f9cbb9f9844dc88223",
+ "chksum_sha256": "e5e5626f01eb1f6cd90237efc8972743f594500e8f3fcb34f8f0e6752069ab2c",
"format": 1
},
{
- "name": "tests/integration/targets/ios_route_maps/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b4046f281274bc9935c8cde1acc6b9be307f1b7ef9fb583957e1322b0c082d60",
+ "chksum_sha256": "135c4a4d72895e789f33ef5d20039e4dd8a1ddb92402b8fd25cbed9d3cf993b6",
"format": 1
},
{
- "name": "tests/integration/targets/ios_route_maps/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "df41c3a26d7834ab66fdfe1b2faade9c312e8225c7bc99d736308371f3600ea2",
+ "chksum_sha256": "168cef1691a6a4585ce66751fe0e9520573ac71ffbe016a9a3f239b195b9a8e3",
"format": 1
},
{
- "name": "tests/integration/targets/ios_route_maps/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7f164fe2b72297a0ed83c0dfde78abb1673ebf7715469c55d263904c54e75e8d",
+ "chksum_sha256": "b052384eec330f45bc81d36118752d8997371068252fc29e436bdb59391de045",
"format": 1
},
{
- "name": "tests/integration/targets/ios_route_maps/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9991663c3944fd60eb5c0dd904a88348ce7ebdb04550a3e596b92b67c312a8fc",
+ "chksum_sha256": "5e5d0eebcdf9df91bd9427cda551ac2faa5b3c91559e742a18ce0eb59d0b5755",
"format": 1
},
{
- "name": "tests/integration/targets/ios_route_maps/tests/cli/overridden.yaml",
+ "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9107ec621b5c648121c0917cd969eb12895ff1bbd5164798902d8fade0887608",
+ "chksum_sha256": "25ed4323da59a62b27fbd759263f146585f660557ae20c810f4a00602a4584d1",
"format": 1
},
{
- "name": "tests/integration/targets/ios_route_maps/tests/cli/_parsed.cfg",
+ "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d0f8053909d848db5a593451794962888efd2e041f710294929ca1bdde0caff8",
+ "chksum_sha256": "26b38d39df6a806126bb1981ac16b20707118f8d4b4bf77036dd328705ed3b76",
"format": 1
},
{
- "name": "tests/integration/targets/ios_route_maps/tests/cli/_populate_config.yaml",
+ "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "49d07d449a90342c4a3b2605f7d2e5a99c3c04952701ea4a1d8b29b02577fa49",
+ "chksum_sha256": "3989e7f762cbbf518de2b3778ab60754ec12e403c145956777cbab0962368206",
"format": 1
},
{
- "name": "tests/integration/targets/ios_route_maps/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ff7c6c2838c19016776a01f6d6704aada960e930a0829c0e47e847c70144b9f7",
+ "chksum_sha256": "5f0b6df959031fc5ab1736f470d21d0d029f71711b916b666e8172e5af4be64b",
"format": 1
},
{
- "name": "tests/integration/targets/ios_route_maps/tests/cli/parsed.yaml",
+ "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3c56d9e9cfa1c23282710af3f23af288e856f3ff9134cc411a498b186c2df4c4",
+ "chksum_sha256": "3077db7d9d462cc53d8a755d6ff91972855473a4303ea49862dd1c26b1345816",
"format": 1
},
{
- "name": "tests/integration/targets/ios_route_maps/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "85fea8de40eb500f7b93f6842ded059cc8f3e346d902a06028a4869db7e19b01",
+ "chksum_sha256": "3860df920e3f445383200f9261984c3a4bf72d7c93ad252ee8bb237fe2acc163",
"format": 1
},
{
- "name": "tests/integration/targets/ios_route_maps/vars",
+ "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_route_maps/vars/main.yaml",
+ "name": "tests/integration/targets/ios_acl_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "707242064a446604688cfa42b04d777ff801846293ade1154dcb3e82a9badfb8",
+ "chksum_sha256": "9a46304602c050830a04642d790e2c32e7ca38138a3115617a321b0aaa966ac9",
"format": 1
},
{
- "name": "tests/integration/targets/ios_system",
+ "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_smoke",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_system/tasks",
+ "name": "tests/integration/targets/ios_smoke/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_system/tasks/main.yaml",
+ "name": "tests/integration/targets/ios_smoke/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "68e898ba92f5164ddc8cc51967c5e2876e9002699d528634a67f2183dd558d39",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
- "name": "tests/integration/targets/ios_system/tasks/cli.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95",
+ "name": "tests/integration/targets/ios_smoke/templates",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_system/meta",
+ "name": "tests/integration/targets/ios_smoke/templates/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_system/meta/main.yml",
+ "name": "tests/integration/targets/ios_smoke/templates/defaults/config.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2",
+ "chksum_sha256": "c67459067166baed6059b02907fb2692e34868270185b09fcd9f5d7c3ec013d0",
"format": 1
},
{
- "name": "tests/integration/targets/ios_system/defaults",
+ "name": "tests/integration/targets/ios_smoke/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_system/defaults/main.yaml",
+ "name": "tests/integration/targets/ios_smoke/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
+ "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2",
"format": 1
},
{
- "name": "tests/integration/targets/ios_system/tests",
+ "name": "tests/integration/targets/ios_smoke/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_system/tests/cli",
+ "name": "tests/integration/targets/ios_smoke/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_smoke/tests/cli/misc_tests.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "10e512f2cf5dc0fe7c9d3cb0188fc3dc96dffa68beb61895d88c8dc422c886e7",
+ "chksum_sha256": "7eb9e4e697c8432c1a40e9408f7638d887c347aec871bfa157bbd7c3f0586b95",
"format": 1
},
{
- "name": "tests/integration/targets/ios_system/tests/cli/set_domain_name.yaml",
+ "name": "tests/integration/targets/ios_smoke/tests/cli/common_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4bc85f65fcaa284e9503fe5643f16111f14daf7ba677abd84daa04302f8b007d",
+ "chksum_sha256": "3cadb8dae7de5b5be84fcab95fd6e5f65816069841a996010af41c32b8438897",
"format": 1
},
{
- "name": "tests/integration/targets/ios_system/tests/cli/set_name_servers.yaml",
+ "name": "tests/integration/targets/ios_smoke/tests/cli/caching.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b59e7228e155bfcbaa1863f12fbbdc641e01c2fdef2d6bd4f4aeb2f3fa96bddf",
+ "chksum_sha256": "618ffe0e7bbd5a6d4e6172cdcca046317acbb06f8dc8b4de4e214fec6e642640",
"format": 1
},
{
- "name": "tests/integration/targets/ios_system/tests/cli/set_domain_list.yaml",
+ "name": "tests/integration/targets/ios_smoke/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/ios_smoke/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "592210cc1bf19177523967179ec83b786b9c60d9341acdb087e739911876007b",
+ "chksum_sha256": "7f9fa924aaef2895a7bc9899ba35028617be0e242888fd3558903a9a5c621bf2",
"format": 1
},
{
- "name": "tests/integration/targets/ios_system/tests/cli/set_hostname.yaml",
+ "name": "tests/integration/targets/ios_smoke/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "810d48f3ce471254c763859c7d33ad70b06aaa28b45712179b4794f3b5a667c5",
+ "chksum_sha256": "6cdc2604047d999342d2e29f3a546b9f8ceab22e37c2d4eaed5fb596bd4cd2f0",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vxlan_vtep",
+ "name": "tests/integration/targets/ios_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_vxlan_vtep/tasks",
+ "name": "tests/integration/targets/ios_interfaces/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_vxlan_vtep/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7607c1041a822e911d328c572b5986636a52054bad2895b89c4beb7861755017",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_vxlan_vtep/tasks/cli.yaml",
+ "name": "tests/integration/targets/ios_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vxlan_vtep/meta",
+ "name": "tests/integration/targets/ios_interfaces/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_vxlan_vtep/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_vxlan_vtep/defaults",
+ "name": "tests/integration/targets/ios_interfaces/meta",
"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_interfaces/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vxlan_vtep/tests",
+ "name": "tests/integration/targets/ios_interfaces/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli",
+ "name": "tests/integration/targets/ios_interfaces/tests/cli",
"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",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/ios_interfaces/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5665b8e91a6bb98092632ca9952389b634005325762d970aa987bf0523ccc882",
+ "chksum_sha256": "c3aa08c205d7535bccd127dd4f2561e51a2ec026d151af29a27161cce05fc3fb",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/ios_interfaces/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "149f7e871cffbb37baa730d0dc0a4964723f90d64d0f0a409ebd923b743e682a",
+ "chksum_sha256": "ef6bdcebaf77721c230b529ea6d8930afd19840ad644b09d7a9d9e8b08042a64",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/ios_interfaces/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9c7f20dee20d06af4441f5369836e86db1aba0bda93cb50caa49e6041ae98dba",
+ "chksum_sha256": "c9f8c4f20831746975e125b2813af5a924c6ec65692e3b373b62cca70e07bac7",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/ios_interfaces/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "61c3a851e2d056cec1479981c331fd2a4c1126bb8bbacd5c38ed0b4e4ff026c0",
+ "chksum_sha256": "37d322a0d70e5051c2f54be098c6cb7261c5cba19d030d69c87c9a25d05b3a2e",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/overridden.yaml",
+ "name": "tests/integration/targets/ios_interfaces/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2dbca0fd8e9d00593a5785ab68cb246e21a2ac99fff6970ff150710c246f1927",
+ "chksum_sha256": "191fc3bbaf3d78756bb2ce23765cebb199b569f0f7b88689063d00ee049db9ec",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/_parsed.cfg",
+ "name": "tests/integration/targets/ios_interfaces/tests/cli/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c56eb808c76e38656a84bb5e725dc14af02482efdb85d2246613aff63e9b52cb",
+ "chksum_sha256": "3830de884a4d8a13874f4bb664a6dfe92240148a26f2414fd430051e40752b1f",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/_populate_config.yaml",
+ "name": "tests/integration/targets/ios_interfaces/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0b9a801456bd9db90925de5fb3ddf02130ebf6e4de5abbc8dd0a3d8785ade822",
+ "chksum_sha256": "8de2097894aadebd181dd7ae7d0f5dec4cb017ff95010899b37d3bcad6bd0860",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/_populate_vlan_vrf_config.yaml",
+ "name": "tests/integration/targets/ios_interfaces/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "455e27f59263b50ef9ec28db7556b9746070f5672cabe83cb0c03f6103ca3918",
+ "chksum_sha256": "7d6150da669c91be1f6470c7441e2bbac682c7b78c59eb2bccd837230b68e2d8",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/ios_interfaces/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7d54c5dd89c14a5b02575b8e80f647bc66ba075563571e876e5d471beca81c10",
+ "chksum_sha256": "b5f19e8e25cc5e2704ded61eb61d7ee0095acc136e1380809cdf47f12d8bbf17",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/parsed.yaml",
+ "name": "tests/integration/targets/ios_interfaces/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "67f3d6703dbc41fb80ddc9360a8fd99addc2dbd17258b2e3d4bfc859c604d867",
+ "chksum_sha256": "96501d4ff6cafdb68d01c77d5cfeaf6b9c92470d76db8d43b694671c2459e741",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/ios_interfaces/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "23ba22f2eacb69c8cda7d4bc0b8ffb9b9b4e3c8c2499e8512fdd09ed136e051f",
+ "chksum_sha256": "49b157678ba5cc812ab3a5344bc492003e8cb6b1f849ae168b81f48ebba8ff83",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vxlan_vtep/vars",
+ "name": "tests/integration/targets/ios_interfaces/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_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7bbcfaab60d1b44f73192415eef696368496e56fecd0d5f6384a36f6ed0bf500",
+ "chksum_sha256": "c8f9dc60a371baf0f3c770c2818e2feae840331bbf85a9c23ba3d2cfdfe13547",
"format": 1
},
{
- "name": "tests/integration/targets/ios_l2_interfaces",
- "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_l2_interfaces/tasks",
+ "name": "tests/integration/targets/ios_evpn_global",
"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_evpn_global/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_evpn_global/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_evpn_global/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_evpn_global/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
+ "chksum_sha256": "a930c7415288124acd312b6bc09b1120f8f8085b31c7267a1e183467377b70e0",
"format": 1
},
{
- "name": "tests/integration/targets/ios_l2_interfaces/defaults",
+ "name": "tests/integration/targets/ios_evpn_global/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_evpn_global/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
"format": 1
},
{
- "name": "tests/integration/targets/ios_l2_interfaces/tests",
+ "name": "tests/integration/targets/ios_evpn_global/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_l2_interfaces/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_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",
+ "name": "tests/integration/targets/ios_evpn_global/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e5c3d3a3d316de8d72b101a3200a8e81785710ef1f1386c0ea3dbf5da45eacda",
+ "chksum_sha256": "e0e4acad796d01a6db7a44d08d8ae4a7eefa3da818382224189c30eb5c6bbd92",
"format": 1
},
{
- "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/ios_evpn_global/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b04564f5e0e3b1f5527f25e60a42766131d47c8f14e5704c558156a2d901654c",
+ "chksum_sha256": "1cb6068d536690bed4bb86b5901cc97b78325b5ff9a6104805278172427c9af3",
"format": 1
},
{
- "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/ios_evpn_global/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ae60010ce6b859e677cd2fe0443293d0cbbfb6059f00416c2827998f8dba96c1",
+ "chksum_sha256": "1ee5e0cd3f90d1d5461cc3de8eec434fbb245688d2c99d12a477d0ee565f19c9",
"format": 1
},
{
- "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/ios_evpn_global/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2df68349950dac68eddcf5f1560371ca7d58868b3d5c978bb2047ec1d37a908e",
+ "chksum_sha256": "8c950ea407d98e84ee9ef11ae5f11cdd1402a460f48159591eed290af69aa730",
"format": 1
},
{
- "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/rtt.yaml",
+ "name": "tests/integration/targets/ios_evpn_global/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "094afbbdd9097ab670c41df21b081705791bd7efa1ff26a741ccd2f9a21ed2a5",
+ "chksum_sha256": "e6e04317befb43f382b3b5e4e37757fd905ea5f8099327bb255ce3031da38285",
"format": 1
},
{
- "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/ios_evpn_global/tests/cli/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "205a1557e675e86da5aa68c11e65648bc868852e81d2d483ffdacbd72e058181",
+ "chksum_sha256": "54905a1be066debe036046408f5d40d3ceeccee3074090e3d1c459aeb4355e67",
"format": 1
},
{
- "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/overridden.yaml",
+ "name": "tests/integration/targets/ios_evpn_global/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8b4e94db711765525756701212c456abfea84fb4c38cb4cd45c9010dbad93927",
+ "chksum_sha256": "df48d4875d6c309498c93bf1654170b5de8dd36f00cad9b7dda06fa0ec6135d8",
"format": 1
},
{
- "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/_parsed.cfg",
+ "name": "tests/integration/targets/ios_evpn_global/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "18a86eba9dd5b79bedad92815399beb362a10c96e402b18fc70884852a2c502e",
+ "chksum_sha256": "bf27aff9be6f72a1bac5da95577b426f851356b9afa907bc35a5100f51b3500c",
"format": 1
},
{
- "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/_populate_config.yaml",
+ "name": "tests/integration/targets/ios_evpn_global/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "557b6eac4dd1d40678d52e9f59e84d8f9cddaf70a6be82787d43785fae35539a",
+ "chksum_sha256": "0b7ddb734d42978b5ebb82d436a354e8fae2fce18e60a1546f2d519cead08390",
"format": 1
},
{
- "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/ios_evpn_global/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "91412f73bc4b57376bf22ae459899b858383999655c2365958695393758ff1ae",
+ "chksum_sha256": "1c1eda73556b1082527e3387499aa6a6d5d6734bcdd7070409964563ef73734b",
"format": 1
},
{
- "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/parsed.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "aa8e71b9953a2d70da7fac058ba031f21cfb5bfb71df81285552b5aedb16328b",
+ "name": "tests/integration/targets/ios_evpn_global/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/ios_evpn_global/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "05a8a3246332f26b13525220bfb3ae2df1369eafe66f255ee76dc5d7d801fbd8",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_l2_interfaces/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "40cba4a01ca4d7671041cd1c34aad247ab33b8027f3143233bab09d039780e3d",
"format": 1
},
{
- "name": "tests/integration/targets/ios_l2_interfaces/vars/main.yaml",
+ "name": "tests/integration/targets/ios_evpn_global/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c39e3586ef18b985c228717ae7eac1e306f5e77a15d450a24628cf72e2d7e0ab",
+ "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vlans",
+ "name": "tests/integration/targets/ios_evpn_evi",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_vlans/tasks",
+ "name": "tests/integration/targets/ios_evpn_evi/defaults",
"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",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_vlans/tasks/cli.yaml",
+ "name": "tests/integration/targets/ios_evpn_evi/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_evi/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_evi/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
+ "chksum_sha256": "d8d4519b069cabc7f791adda0fc239b41ce354dd4eccb8f1929e2503910fa16d",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vlans/defaults",
+ "name": "tests/integration/targets/ios_evpn_evi/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_evi/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_evi/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_evi/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_evi/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c2f157243c1f0874051f031c51813641fc2d08529e7d97971f10e15553acf3fe",
+ "chksum_sha256": "f152c59eea19452042fd7fd86a18ec51a8ba501b488f2a104e81e7a4099fa617",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vlans/tests/cli/_remove_config.yaml",
+ "name": "tests/integration/targets/ios_evpn_evi/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2cee0574690e1a22ae1502659dbf76f95aa0f3adcc742e32a25241043c9eaa20",
+ "chksum_sha256": "78274255f88531ce6799143d0f15f9dcc4d350c92ad3d792cc49a8b8ed5e45e7",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vlans/tests/cli/parsed_vlan_config.yaml",
+ "name": "tests/integration/targets/ios_evpn_evi/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "babf6f1d0227a6f5013632fbe2c7ab70a01b1991bf1683a11bf9d60d23cff0cf",
+ "chksum_sha256": "d2729d3bd7841494cddd0732bd7a9c75663bb18eeba552161426cd88ede87611",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vlans/tests/cli/merged_vlan_config.yaml",
+ "name": "tests/integration/targets/ios_evpn_evi/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1855d64d7d7700e8da4e69c4df727cdd37926f720867dcc87c05fc443b14ff99",
+ "chksum_sha256": "d6115bc64148a4cb99bde23fb20e1b7d90cb8e08a826d1ce988b56d1aa56f959",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vlans/tests/cli/rendered_vlan_config.yaml",
+ "name": "tests/integration/targets/ios_evpn_evi/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5bc3030e1201026ce580492c74f1762660e20ae6a9c6945972ecc0f65cf3a0dc",
+ "chksum_sha256": "0b5dffe39805b32781c56cf69f5dd7cb5102da1dd53eaa29f011001e009ecb83",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vlans/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/ios_evpn_evi/tests/cli/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e7bc4328acfacc36056f4f9fd2ed9cebef987ba490730967a191721c62993aa5",
+ "chksum_sha256": "7fc6dd9b2d30b6cb5e0785ee409ed4afc0ba34e469fe18e024bd003985a38b65",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vlans/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/ios_evpn_evi/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "19bfcf9b214bd48339bd025b2c044eb3a640bd46b88442f4dc5337faadc0e18c",
+ "chksum_sha256": "0a5f817b301780f98b42b3ff17ee875ec1da8cec84cc5196cf2e87eab9ecb05b",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vlans/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/ios_evpn_evi/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4ffdb8c877c749e808b435c833c92f3b7d7343d05c4ba8d8f1b39e519b1b63a2",
+ "chksum_sha256": "c8a64e95f6b485fa79daf39dd1f5c2e160ced25717df889d6c63f6054a227673",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vlans/tests/cli/_parsed_vlan_config.cfg",
+ "name": "tests/integration/targets/ios_evpn_evi/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5921afbe0954f8ced2a95ceba0ffe19b6d3e0b31e50dae387704727e4602aa50",
+ "chksum_sha256": "58d8e5d48d73a1c2b302830fc55a50f3c53e60f612a2e20f0debee651a912062",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vlans/tests/cli/_populate_config_vlan_config.yaml",
+ "name": "tests/integration/targets/ios_evpn_evi/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d96a7d3e3bfe8da463bf2dd734b70aa86db1e98fa4307435ef430e0574a732dd",
+ "chksum_sha256": "4244b8eb838cb04aa475d98824e7a4f314f6ad599111c8523185cf346b2074e3",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vlans/tests/cli/_remove_config_vlan_config.yaml",
+ "name": "tests/integration/targets/ios_evpn_evi/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f50d841acb552a2397492892efa62ca868a227651d2cdb2179a4bd3da66c9817",
+ "chksum_sha256": "39b3e0b71234dc27e4baf2b26606120f452be06e624dfd6242133ad5d49a13cf",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vlans/tests/cli/rtt.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "85a1aebb72960e9ca957302e141f03debf96a1ab54926905a182b6f12fc2bb55",
+ "name": "tests/integration/targets/ios_evpn_evi/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_vlans/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/ios_evpn_evi/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "96631f083020ab2d55c8ad66ef70bf26942bf12da2864a3b45b8afb934e5c7d7",
+ "chksum_sha256": "ef3434585fe8063da82d4d92c7cb20198bb9cb86fe82d49b0e8eba3fc398f561",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vlans/tests/cli/gathered_vlan_config.yaml",
+ "name": "tests/integration/targets/ios_evpn_evi/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4c50c17d5cc8d365e9df2d11698f67bd0a6f8650dcb2b3c7cdbc2bbd0ce82e58",
+ "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vlans/tests/cli/overridden.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2d7773b3edea41259b34dbfefcc4c7a543c6ab3c1a1a2d85a334d0cefad37b91",
+ "name": "tests/integration/targets/ios_config",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_vlans/tests/cli/_parsed.cfg",
+ "name": "tests/integration/targets/ios_config/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/ios_config/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "31dcdedd876672aa1f15ac36c7b35b156cea9795b15f686e40b2eecaa0ea5392",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vlans/tests/cli/deleted_vlan_config.yaml",
+ "name": "tests/integration/targets/ios_config/templates",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/ios_config/templates/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/ios_config/templates/defaults/config.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "56e174577879e139ac99b46f2588b9c101e1667faf4fd9ae1b59cab9466979d9",
+ "chksum_sha256": "c67459067166baed6059b02907fb2692e34868270185b09fcd9f5d7c3ec013d0",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vlans/tests/cli/_populate_config.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": "1b9940730019c5607914c500f4e39e23b55fe858a6d0b276c96a28e72f222049",
+ "chksum_sha256": "a112244df64f4360549463724af9ae4c598c3f39c22310a4d0a98c44cf034408",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vlans/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/ios_config/templates/basic/setupblock.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d90eba79cf10b15a5318824e1fbc6e877db3951526be828180d47a3d1f8aeb03",
+ "chksum_sha256": "c7e470728246324f9d35d7d1f36e53f10a1d424cb9b14aea8ebd22ae03384985",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vlans/tests/cli/parsed.yaml",
+ "name": "tests/integration/targets/ios_config/templates/basic/acl_config.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9dcb409a302fb60386633c000240bd99c7e1a925e59d940604e6b1319d138eb8",
+ "chksum_sha256": "819000cad7a1b4e27b8b206fe04b2d18c0bbba7876801d9f2786c94f76482050",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vlans/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/ios_config/templates/basic/macro.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7c3dead8718d5c971c74c59bf6c3eee8be63eb99fea05c03b0aba14e2994c4c4",
+ "chksum_sha256": "240ea6bffb5f8140b8fb61c0e4505e89f76ea5c0ade1103b63b25c6024e57892",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vlans/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/ios_config/templates/basic/intended_running_config",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0c8e4ffd5cb273c2c92fe0690fce9249386fbd72ac0e77872e8fa2cb1c256138",
"format": 1
},
{
- "name": "tests/integration/targets/ios_vlans/vars/main.yaml",
+ "name": "tests/integration/targets/ios_config/templates/basic/config.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1cade52f40e5745ea62114c4c0c970e7f03db0578670180c7ddbd4d968a0ebf1",
+ "chksum_sha256": "fed860520ec0b19850744af6be1c77939335d4a09539bf563d0c15aa6afc84ef",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospf_interfaces",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/ios_config/templates/basic/base_running_config",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7385f5112a2ea15a4ca3f480bf6830bf91439a67073d846367170819b02692c6",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospf_interfaces/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/ios_config/templates/basic/configstrict1.j2",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d7019ec0a3b0c34ed351eed7b9ea2979114804e6aac94b9433bd42789bec5b0c",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospf_interfaces/tasks/main.yaml",
+ "name": "tests/integration/targets/ios_config/templates/basic/configblock.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3ca85e538cabf8bda1ebd32dee2b5803e8e171ce955d7affe2f1417283cd92d6",
+ "chksum_sha256": "d7019ec0a3b0c34ed351eed7b9ea2979114804e6aac94b9433bd42789bec5b0c",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospf_interfaces/tasks/cli.yaml",
+ "name": "tests/integration/targets/ios_config/templates/basic/setupexact.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
+ "chksum_sha256": "78abef2216f92c74b21c0a935660fa35625c923e4d3b5d6eaa014a2f7b9d5182",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospf_interfaces/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/ios_config/templates/basic/setupstrict.j2",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "78abef2216f92c74b21c0a935660fa35625c923e4d3b5d6eaa014a2f7b9d5182",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospf_interfaces/meta/main.yaml",
+ "name": "tests/integration/targets/ios_config/templates/basic/configexact2.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
+ "chksum_sha256": "d7019ec0a3b0c34ed351eed7b9ea2979114804e6aac94b9433bd42789bec5b0c",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospf_interfaces/defaults",
+ "name": "tests/integration/targets/ios_config/meta",
"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/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospf_interfaces/tests",
+ "name": "tests/integration/targets/ios_config/tests",
"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/tests/redirection",
"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/tests/redirection/shortname.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c6645517abeb9ff0bea3331bc844b12c1382b0eea4178be0dfa523a3a38c5a97",
+ "chksum_sha256": "a9d8f38448bbc15b4db9520e986758afbb1e4332917cfa4e676c4726ecb1324c",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/ios_config/tests/cli_config",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/ios_config/tests/cli_config/cli_block_replace.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "338693405501e01ca57d2ddeb40f482891c029a986864fc98946fc266265bf13",
+ "chksum_sha256": "b9b16a4833c6d7626d43f1c1e90a106af469adc1f3a032875e78e13c6b563e5f",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/ios_config/tests/cli_config/cli_backup.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4395e95e40e7a0dfcf80e05ade1c443c37cfe70fe80fc4fdcfc0ee48ca7bca7b",
+ "chksum_sha256": "6c6e65aa217139078a0e172b54fc00eb2cfe51f2079cb7d9b0a5d9c5d2a74ca6",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/ios_config/tests/cli_config/cli_strict_match.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fd72a9b920445f668d61b31646621e0f9587851e61eaaa071f8034468e3fab43",
+ "chksum_sha256": "faee234111770cb64085b9a25509c53fbd3fcc6d783bebff7592a0cf5ee4e317",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/rtt.yaml",
+ "name": "tests/integration/targets/ios_config/tests/cli_config/cli_basic.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c0c23c50849c89a60cce7588ee594c9f12fc89ae710516e3371d9cdf23bbdfbc",
+ "chksum_sha256": "28f51d7f60e5fcd45a211c50797cc4142a3e4784cf8619ed41eadf1a630e4629",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/ios_config/tests/cli_config/cli_exact_match.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7ef2eb2c6dd20e38ac7f6058ced2a4902a838cfb902e8a32e33fc83bc8ffca5a",
+ "chksum_sha256": "3445b7155b0702ea632d8e846e514af4e58679edf35a1b00034c1f33611c7bcb",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/overridden.yaml",
+ "name": "tests/integration/targets/ios_config/tests/cli",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/ios_config/tests/cli/toplevel_after.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3d05e7ad3cd69bd4b423def7c76b0200ec3daff4ce28f945cf1b53a001c52d95",
+ "chksum_sha256": "c80fc079cc0294cc808809f7524cd26dce8746cb3cbceccae5947c26a53bba77",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/_parsed.cfg",
+ "name": "tests/integration/targets/ios_config/tests/cli/sublevel_exact.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "adda4ccbcef419623366dff6fd814799b732583587c8b71b9a49638079cf4c7d",
+ "chksum_sha256": "8ff88256789e8892cc5604826818b4a694faa8dd37d8de6f37a06535724dedd2",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/_populate_config.yaml",
+ "name": "tests/integration/targets/ios_config/tests/cli/save.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e822477d57a3e430f8e379be1528039e6e4ee5eff278141cdc2c3f5c4ea4ad1b",
+ "chksum_sha256": "2fbcbac7be1a2444b9866a0312ebd7f30691de74f434b693b301e1b667efbc34",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/_initial_ipv6_setup.yaml",
+ "name": "tests/integration/targets/ios_config/tests/cli/src_invalid.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8a2472a61a85371edf42157eb38de6446a90882922de4471337054194b698dff",
+ "chksum_sha256": "e37382eede72ae657893c3933a8e6731db78596f46d5fede249d4d050e8f12b6",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/ios_config/tests/cli/macro.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "843a2bd9f2693a11e665a5f552e9de54fcc379ca3e06ee80ba2530f9077acede",
+ "chksum_sha256": "c50af815c1122d68ec8aa76f0738a923e3100ffbdce96ec9f6eeda091001ff12",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/parsed.yaml",
+ "name": "tests/integration/targets/ios_config/tests/cli/sublevel_strict_mul_parents.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ff7d15cb956c6a22c1687aee06920653392f08ff0e53223afbab89ad7c7c98a9",
+ "chksum_sha256": "ca18a9f33f955ba25c6df6be5108b58cb0b159406b531931d7886b65ec1a0316",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/ios_config/tests/cli/src_match_none.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f097e25e0459371162a4d0d2b645ae9ca361ad5d7fce778cab8793d7bcd2f433",
+ "chksum_sha256": "3b6ae94a3a40d6baa6400753b0273af9e1f0c693c0b9d02a216b4d16c9afad67",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospf_interfaces/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/ios_config/tests/cli/sublevel.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "81e93d0c4240f0c189dcc3db9d2887404f6f79ccc22a7ae9d8c2c616a823ae23",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospf_interfaces/vars/main.yaml",
+ "name": "tests/integration/targets/ios_config/tests/cli/backup.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d904ba1b1ee67876b5c1db5e8a2c063c500c99af83e05fd36d7584745f906957",
+ "chksum_sha256": "e567e119083aae3e8dd3739d64db3927cb554387079640fbff99b1d6b79f267e",
"format": 1
},
{
- "name": "tests/integration/targets/ios_user",
- "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_user/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/ios_config/tests/cli/toplevel_nonidempotent.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "25ef9f513a03aa86771b90bd0d22940459f94fa3b2257ae7498b9217a405bb9a",
"format": 1
},
{
- "name": "tests/integration/targets/ios_user/tasks/main.yaml",
+ "name": "tests/integration/targets/ios_config/tests/cli/toplevel.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a8da0d0bc00401711103caf4be61022ba74b53c8296bfcd784db7ea4853111c5",
+ "chksum_sha256": "f45a6bb9f23763b221df958302548d88734cedb25ee2edc0fe1ec86be00b4e8b",
"format": 1
},
{
- "name": "tests/integration/targets/ios_user/tasks/cli.yaml",
+ "name": "tests/integration/targets/ios_config/tests/cli/diff.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95",
+ "chksum_sha256": "c4223635f760bffc17141049ab0cb3e09c3e9b2a53398754c740569c1244a548",
"format": 1
},
{
- "name": "tests/integration/targets/ios_user/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/ios_config/tests/cli/sublevel_strict.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ce6faa181c1fb7ab5ba44db51d418b0120a7d110a3f4373e91ce02987a76fefa",
"format": 1
},
{
- "name": "tests/integration/targets/ios_user/meta/main.yaml",
+ "name": "tests/integration/targets/ios_config/tests/cli/toplevel_before.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2",
+ "chksum_sha256": "289b05fea7a7180ab37fb5e04220fa7c387634fbfe67e997d39ea44e53b6b03d",
"format": 1
},
{
- "name": "tests/integration/targets/ios_user/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/ios_config/tests/cli/src_basic.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2544e95d1ed36fd4c73cad6dd719051035205bfd414ef4d6bbb73fe7e592b981",
"format": 1
},
{
- "name": "tests/integration/targets/ios_user/defaults/main.yaml",
+ "name": "tests/integration/targets/ios_config/tests/cli/replace_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
+ "chksum_sha256": "7cbde273238be56ec3dc2174913de0c2933067aa634987a04dd7fb72fefeac3f",
"format": 1
},
{
- "name": "tests/integration/targets/ios_user/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/ios_config/tests/cli/sublevel_block.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "91c95c35263639fde90b44f93f0612c0a7b3c510f325285afe281d9fc121e58b",
"format": 1
},
{
- "name": "tests/integration/targets/ios_user/tests/cli",
+ "name": "tests/integration/targets/ios_config/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_user/tests/cli/auth.yaml",
+ "name": "tests/integration/targets/ios_config/tasks/redirection.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1f1317bad114d20ffe0ec55fcda33969a2575dc965be99b58cefda6742beaebe",
+ "chksum_sha256": "4c45a3649d432bb34bfcde5f3557848f294212fdd78da9b1c0f9b98176f462ce",
"format": 1
},
{
- "name": "tests/integration/targets/ios_user/tests/cli/basic.yaml",
+ "name": "tests/integration/targets/ios_config/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "acbe615c9d6ee6c43971ed6986a31ed4e769c623d8f91f2258bbfb2255f76361",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_user/files",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "7011b000e1a4b28787b459b2a05c625052f68b10a1f108068ec805bb7a0875f4",
"format": 1
},
{
- "name": "tests/integration/targets/ios_user/files/test_rsa.pub",
+ "name": "tests/integration/targets/ios_config/tasks/cli_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4552b1d9416ac1be7c90b10b182a6ff4a4c56efcba53bb31851808c5d1fd787c",
+ "chksum_sha256": "5f583eec9d6129fbfe6d2b800c2013f2dff80308e21b59c9da1fa7382b6a401d",
"format": 1
},
{
- "name": "tests/integration/targets/ios_user/files/test_rsa",
+ "name": "tests/integration/targets/ios_config/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "660b96e5ac6d6bd17900490c4749ff3a63898bb155db0a661fefbd6ac6f0fc44",
+ "chksum_sha256": "100c25aa8e342471c45f4ced56d10739c8a7f50ffaf83531800819f0911615ac",
"format": 1
},
{
- "name": "tests/integration/targets/ios_evpn_evi",
+ "name": "tests/integration/targets/ios_acls",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_evpn_evi/tasks",
+ "name": "tests/integration/targets/ios_acls/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_evpn_evi/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ef3434585fe8063da82d4d92c7cb20198bb9cb86fe82d49b0e8eba3fc398f561",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_evpn_evi/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_evpn_evi/meta",
+ "name": "tests/integration/targets/ios_acls/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_evpn_evi/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_evpn_evi/defaults",
+ "name": "tests/integration/targets/ios_acls/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_evpn_evi/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_evpn_evi/tests",
+ "name": "tests/integration/targets/ios_acls/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_evpn_evi/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_evpn_evi/tests/cli/_remove_config.yaml",
+ "name": "tests/integration/targets/ios_acls/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c8a64e95f6b485fa79daf39dd1f5c2e160ced25717df889d6c63f6054a227673",
+ "chksum_sha256": "a6cc930a39872ad57c5b74919747421b13b0a0c985100d70763b27d0f646d0f4",
"format": 1
},
{
- "name": "tests/integration/targets/ios_evpn_evi/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/ios_acls/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0a5f817b301780f98b42b3ff17ee875ec1da8cec84cc5196cf2e87eab9ecb05b",
+ "chksum_sha256": "f94f4b6ca8fba96b34c1fde4b3bb9ddf97b049ace4232ea5c0549ac3be547ae0",
"format": 1
},
{
- "name": "tests/integration/targets/ios_evpn_evi/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/ios_acls/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d6115bc64148a4cb99bde23fb20e1b7d90cb8e08a826d1ce988b56d1aa56f959",
+ "chksum_sha256": "855485788ef3b774a156a6a7780597f2c73639a9da4f7093bfe3289ca1e67853",
"format": 1
},
{
- "name": "tests/integration/targets/ios_evpn_evi/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/ios_acls/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0b5dffe39805b32781c56cf69f5dd7cb5102da1dd53eaa29f011001e009ecb83",
+ "chksum_sha256": "46fbc34461ca07fa76173803e47b59638be46b109cf3033e12ab8e741e66d203",
"format": 1
},
{
- "name": "tests/integration/targets/ios_evpn_evi/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/ios_acls/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4244b8eb838cb04aa475d98824e7a4f314f6ad599111c8523185cf346b2074e3",
+ "chksum_sha256": "9c3c4569c578ec8336fa353111482916a96d9b9f7ab0f3262e9fe3fb92ce0f1e",
"format": 1
},
{
- "name": "tests/integration/targets/ios_evpn_evi/tests/cli/overridden.yaml",
+ "name": "tests/integration/targets/ios_acls/tests/cli/remarks_states.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "58d8e5d48d73a1c2b302830fc55a50f3c53e60f612a2e20f0debee651a912062",
+ "chksum_sha256": "e540d6f58dd558e2d1f05fc134c8c4694f405ce8decd5fbc174ab20d83c19256",
"format": 1
},
{
- "name": "tests/integration/targets/ios_evpn_evi/tests/cli/_parsed.cfg",
+ "name": "tests/integration/targets/ios_acls/tests/cli/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7fc6dd9b2d30b6cb5e0785ee409ed4afc0ba34e469fe18e024bd003985a38b65",
+ "chksum_sha256": "40cfb30ce1b837e512a4e0a8e5d8aaa90026019732f6b712c49fa8f86c742f46",
"format": 1
},
{
- "name": "tests/integration/targets/ios_evpn_evi/tests/cli/_populate_config.yaml",
+ "name": "tests/integration/targets/ios_acls/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "78274255f88531ce6799143d0f15f9dcc4d350c92ad3d792cc49a8b8ed5e45e7",
+ "chksum_sha256": "2110fa4eadb1937613e4b408e6d87ec92dd2e55ea8d01b22a3f058fe670aed83",
"format": 1
},
{
- "name": "tests/integration/targets/ios_evpn_evi/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/ios_acls/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "39b3e0b71234dc27e4baf2b26606120f452be06e624dfd6242133ad5d49a13cf",
+ "chksum_sha256": "42615f514256b1a7d451a57c904dafc5c7887df9bd1c968f5332b28b65ee999a",
"format": 1
},
{
- "name": "tests/integration/targets/ios_evpn_evi/tests/cli/parsed.yaml",
+ "name": "tests/integration/targets/ios_acls/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f152c59eea19452042fd7fd86a18ec51a8ba501b488f2a104e81e7a4099fa617",
+ "chksum_sha256": "ecf088fce17e2e3b5612311c4c10d551e1c0fc20716a2cba7f0424611b989fff",
"format": 1
},
{
- "name": "tests/integration/targets/ios_evpn_evi/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/ios_acls/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d2729d3bd7841494cddd0732bd7a9c75663bb18eeba552161426cd88ede87611",
+ "chksum_sha256": "aaf7849f1fc016f09813c37599fa2f567313c681920a349d3976117ca61033bf",
"format": 1
},
{
- "name": "tests/integration/targets/ios_evpn_evi/vars",
+ "name": "tests/integration/targets/ios_acls/tests/cli/replaced.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9c1d667ff016afc0e8e5dcfdf781ca4c5b871ce011ed3ae461133caee4fef0d9",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/ios_acls/tests/cli/rtt.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4aa123dc7a38645f48ca983339b0a43702f527b615514715a05689ddda18f592",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/ios_acls/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_evpn_evi/vars/main.yaml",
+ "name": "tests/integration/targets/ios_acls/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d8d4519b069cabc7f791adda0fc239b41ce354dd4eccb8f1929e2503910fa16d",
+ "chksum_sha256": "a35279615971415b54c2877e35c58f430c4b5ecf79ab75cf8b1145408aa2f1c8",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/ios_acls/tasks/cli.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
"format": 1
},
{
@@ -7561,52 +7337,45 @@
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp_address_family/tasks",
+ "name": "tests/integration/targets/ios_bgp_address_family/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_bgp_address_family/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_bgp_address_family/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_bgp_address_family/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
+ "chksum_sha256": "98104bf0b72b20bb2d54f132858264e8c8aa8ee26d19ec82834d92367f5e0654",
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp_address_family/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_bgp_address_family/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
},
{
@@ -7624,24 +7393,24 @@
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/_remove_config.yaml",
+ "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "46c2410786bf0f78b7645d8a6bf4dda5825d8949e13851505d83e30277257877",
+ "chksum_sha256": "4d452abe349d6f966fb7db5133c3039ff9ce202d6b98a16a157f405d7a6f1ce3",
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/_ospf_proc_setup.yaml",
+ "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4b82d41f2e4894c7d11e847a8e436b9e29fee5159acc72269f651697a7f62da",
+ "chksum_sha256": "6a2278af99b3d7b657b496333d700467810c0298ddaa567040b56c173f473182",
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8dc8ef4a203fd9de24d4afe860f25acd653f1f3512c445be6aec069b6bf4b22a",
+ "chksum_sha256": "e7aa25fcb776c99a3453c4929c00250575ca72bce253914a95fd21d769fb1f21",
"format": 1
},
{
@@ -7666,556 +7435,584 @@
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/_ospf_proc_setup.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "109f26ef884c25ffda307c25bf4180ebbb0c6a18b73e2509ade840be68f641c6",
+ "chksum_sha256": "a4b82d41f2e4894c7d11e847a8e436b9e29fee5159acc72269f651697a7f62da",
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/overridden.yaml",
+ "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6447bcd80411c1d8f04d26582c2ab5dfef6ced7cd2be9a0681e609601bfe27e1",
+ "chksum_sha256": "d6cba5ef4746373c30e85d18fdf83be09ad50d9ee4c312a64422d34cb325e4a8",
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/_parsed.cfg",
+ "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d6cba5ef4746373c30e85d18fdf83be09ad50d9ee4c312a64422d34cb325e4a8",
+ "chksum_sha256": "8dc8ef4a203fd9de24d4afe860f25acd653f1f3512c445be6aec069b6bf4b22a",
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/_populate_config.yaml",
+ "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6a2278af99b3d7b657b496333d700467810c0298ddaa567040b56c173f473182",
+ "chksum_sha256": "46c2410786bf0f78b7645d8a6bf4dda5825d8949e13851505d83e30277257877",
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ed4186a91d1cb41e8d7d24196821f6a055801eba77fc72c59af07eabb43f25b4",
+ "chksum_sha256": "6447bcd80411c1d8f04d26582c2ab5dfef6ced7cd2be9a0681e609601bfe27e1",
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/parsed.yaml",
+ "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4d452abe349d6f966fb7db5133c3039ff9ce202d6b98a16a157f405d7a6f1ce3",
+ "chksum_sha256": "109f26ef884c25ffda307c25bf4180ebbb0c6a18b73e2509ade840be68f641c6",
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e7aa25fcb776c99a3453c4929c00250575ca72bce253914a95fd21d769fb1f21",
+ "chksum_sha256": "ed4186a91d1cb41e8d7d24196821f6a055801eba77fc72c59af07eabb43f25b4",
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp_address_family/vars",
+ "name": "tests/integration/targets/ios_bgp_address_family/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_bgp_address_family/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "98104bf0b72b20bb2d54f132858264e8c8aa8ee26d19ec82834d92367f5e0654",
+ "chksum_sha256": "af949d2e120137280e403535d60cb3485ba4baa88a48d465d066d2151defacff",
"format": 1
},
{
- "name": "tests/integration/targets/ios_interfaces",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "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_interfaces/tasks",
+ "name": "tests/integration/targets/ios_l2_interfaces",
"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_l2_interfaces/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_l2_interfaces/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_l2_interfaces/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_l2_interfaces/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
+ "chksum_sha256": "c39e3586ef18b985c228717ae7eac1e306f5e77a15d450a24628cf72e2d7e0ab",
"format": 1
},
{
- "name": "tests/integration/targets/ios_interfaces/defaults",
+ "name": "tests/integration/targets/ios_l2_interfaces/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_l2_interfaces/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_l2_interfaces/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_interfaces/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_interfaces/tests/cli/_remove_config.yaml",
+ "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7d6150da669c91be1f6470c7441e2bbac682c7b78c59eb2bccd837230b68e2d8",
+ "chksum_sha256": "aa8e71b9953a2d70da7fac058ba031f21cfb5bfb71df81285552b5aedb16328b",
"format": 1
},
{
- "name": "tests/integration/targets/ios_interfaces/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8de2097894aadebd181dd7ae7d0f5dec4cb017ff95010899b37d3bcad6bd0860",
+ "chksum_sha256": "557b6eac4dd1d40678d52e9f59e84d8f9cddaf70a6be82787d43785fae35539a",
"format": 1
},
{
- "name": "tests/integration/targets/ios_interfaces/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "37d322a0d70e5051c2f54be098c6cb7261c5cba19d030d69c87c9a25d05b3a2e",
+ "chksum_sha256": "05a8a3246332f26b13525220bfb3ae2df1369eafe66f255ee76dc5d7d801fbd8",
"format": 1
},
{
- "name": "tests/integration/targets/ios_interfaces/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "191fc3bbaf3d78756bb2ce23765cebb199b569f0f7b88689063d00ee049db9ec",
+ "chksum_sha256": "ae60010ce6b859e677cd2fe0443293d0cbbfb6059f00416c2827998f8dba96c1",
"format": 1
},
{
- "name": "tests/integration/targets/ios_interfaces/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "53f65521e577ff3599a2a4d6e42bf504cf799976492d828573ca6239e9d41238",
+ "chksum_sha256": "2df68349950dac68eddcf5f1560371ca7d58868b3d5c978bb2047ec1d37a908e",
"format": 1
},
{
- "name": "tests/integration/targets/ios_interfaces/tests/cli/overridden.yaml",
+ "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/_remove_vlan_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b5f19e8e25cc5e2704ded61eb61d7ee0095acc136e1380809cdf47f12d8bbf17",
+ "chksum_sha256": "89eb56e9a96ba32ab65009fc09ebf8bbbeb74843839557a70f1c76c3ba2f2c58",
"format": 1
},
{
- "name": "tests/integration/targets/ios_interfaces/tests/cli/_parsed.cfg",
+ "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3830de884a4d8a13874f4bb664a6dfe92240148a26f2414fd430051e40752b1f",
+ "chksum_sha256": "18a86eba9dd5b79bedad92815399beb362a10c96e402b18fc70884852a2c502e",
"format": 1
},
{
- "name": "tests/integration/targets/ios_interfaces/tests/cli/_populate_config.yaml",
+ "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ef6bdcebaf77721c230b529ea6d8930afd19840ad644b09d7a9d9e8b08042a64",
+ "chksum_sha256": "b04564f5e0e3b1f5527f25e60a42766131d47c8f14e5704c558156a2d901654c",
"format": 1
},
{
- "name": "tests/integration/targets/ios_interfaces/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "49b157678ba5cc812ab3a5344bc492003e8cb6b1f849ae168b81f48ebba8ff83",
+ "chksum_sha256": "e5c3d3a3d316de8d72b101a3200a8e81785710ef1f1386c0ea3dbf5da45eacda",
"format": 1
},
{
- "name": "tests/integration/targets/ios_interfaces/tests/cli/parsed.yaml",
+ "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c3aa08c205d7535bccd127dd4f2561e51a2ec026d151af29a27161cce05fc3fb",
+ "chksum_sha256": "8b4e94db711765525756701212c456abfea84fb4c38cb4cd45c9010dbad93927",
"format": 1
},
{
- "name": "tests/integration/targets/ios_interfaces/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c9f8c4f20831746975e125b2813af5a924c6ec65692e3b373b62cca70e07bac7",
+ "chksum_sha256": "205a1557e675e86da5aa68c11e65648bc868852e81d2d483ffdacbd72e058181",
"format": 1
},
{
- "name": "tests/integration/targets/ios_interfaces/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/replaced.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "91412f73bc4b57376bf22ae459899b858383999655c2365958695393758ff1ae",
"format": 1
},
{
- "name": "tests/integration/targets/ios_interfaces/vars/main.yaml",
+ "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f8580c8328ba4d89ff30e52f044cc1c5c813a55e9234c9f722f655cc3f06fe56",
+ "chksum_sha256": "094afbbdd9097ab670c41df21b081705791bd7efa1ff26a741ccd2f9a21ed2a5",
"format": 1
},
{
- "name": "tests/integration/targets/ios_prefix_lists",
+ "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/tasks",
+ "name": "tests/integration/targets/ios_l2_interfaces/tasks/main.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0c72f070fd187ae7c13c368647de220f6b254ab856db38328f952f012461f480",
+ "format": 1
+ },
+ {
+ "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_ntp_global",
"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_ntp_global/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_ntp_global/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_ntp_global/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_ntp_global/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
+ "chksum_sha256": "99f97d7709529ad5a370ef88ca759dd566abc45940443dbe28762778ab40c544",
"format": 1
},
{
- "name": "tests/integration/targets/ios_prefix_lists/defaults",
+ "name": "tests/integration/targets/ios_ntp_global/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_ntp_global/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_ntp_global/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_ntp_global/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_ntp_global/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "db20920f776718e96e3c251c29423c0a28ac5000c6454f49943f65ac20fae7d8",
+ "chksum_sha256": "b633b4d6ccef76001f6764713b498278bf30e1dd964673e556fab42166480786",
"format": 1
},
{
- "name": "tests/integration/targets/ios_prefix_lists/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/ios_ntp_global/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0c4dfbbfd610bc72cc634465a0668fa3daabd76ab0771a293c38e366a32a6842",
+ "chksum_sha256": "8cc9ea8d4a47459ec32d942855702c789ba3347e0693f57313003f45020d8a7a",
"format": 1
},
{
- "name": "tests/integration/targets/ios_prefix_lists/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/ios_ntp_global/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "93cc5c3bd91b11ab509b884e143d023a851d0046e2118d1fc2eb22ae074d2d58",
+ "chksum_sha256": "9080f77ada9c677a1f4f275d42ed6bb0123286aa0ce5462bd2c580f47dda0d07",
"format": 1
},
{
- "name": "tests/integration/targets/ios_prefix_lists/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/ios_ntp_global/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1baa1acb44f8c05b1081b7d2d49d7d679a694b1eef20d63cf8b7eb33df4a441d",
+ "chksum_sha256": "a6b0345d271e15e951a9a150a43aa0906c3c91a5290b27ae942ab9ece89cbeb4",
"format": 1
},
{
- "name": "tests/integration/targets/ios_prefix_lists/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/ios_ntp_global/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c1842105d82cd689ea4cea57e9f151bca2e845204e00c78142b60cdac10b401f",
+ "chksum_sha256": "d80307c7fbf6fc328ebf0395601768f230c08d052cba3e459e4b1755635a2a21",
"format": 1
},
{
- "name": "tests/integration/targets/ios_prefix_lists/tests/cli/overridden.yaml",
+ "name": "tests/integration/targets/ios_ntp_global/tests/cli/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3718ece1e147c8f7a40932aeea280095591c481deeb46038cd3b070377d5f66f",
+ "chksum_sha256": "e350806f21caa0181d510feb9cb4e70185286e62aa3b52719b59d55172f2126a",
"format": 1
},
{
- "name": "tests/integration/targets/ios_prefix_lists/tests/cli/_parsed.cfg",
+ "name": "tests/integration/targets/ios_ntp_global/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dc8a935708bb8e0b18381fb2cbd56f7bd389aa02255d0b5cbfe36a5b633b1bf1",
+ "chksum_sha256": "2b3bef8e48a4ebef6e417c5e919751cd9bd526308fdacd16395203eb4feb9f82",
"format": 1
},
{
- "name": "tests/integration/targets/ios_prefix_lists/tests/cli/_populate_config.yaml",
+ "name": "tests/integration/targets/ios_ntp_global/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f1b300e29142c3cb1fa9e84e476577e0909a1f5e13c9f6bae1036eb2f021402f",
+ "chksum_sha256": "bcff8a20978c31e6c69a155803657b695a5f65a32c494c6d83d65d008e8020d6",
"format": 1
},
{
- "name": "tests/integration/targets/ios_prefix_lists/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/ios_ntp_global/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "97081ebf559f11a3701d87bc521f3d05be7a8a62a454d7f37194f651ccb053ab",
+ "chksum_sha256": "306dedea01d094347dc69f10f2e68ed7787372ed087fa1c5ee2d5953a8767016",
"format": 1
},
{
- "name": "tests/integration/targets/ios_prefix_lists/tests/cli/parsed.yaml",
+ "name": "tests/integration/targets/ios_ntp_global/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "10d8202df57a09927329626e4b89a45038167e54d9e9fbc4c6c6ade64129fff5",
+ "chksum_sha256": "d9b1ee000ffc164233351430bc0f5f3c9d3a336fd09ef670bfa40a7e2eebafc3",
"format": 1
},
{
- "name": "tests/integration/targets/ios_prefix_lists/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/ios_ntp_global/tests/cli/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "92341a0e0de58ed85e0e12651de37e00217256797d83723f5bf31f5a62ed8b10",
+ "chksum_sha256": "f41a107502fd7e4be2baf717aafa72bbafc34125fa229ec2e123f7dd7225176e",
"format": 1
},
{
- "name": "tests/integration/targets/ios_prefix_lists/vars",
+ "name": "tests/integration/targets/ios_ntp_global/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_ntp_global/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "54b02bf40251a3fd868d5c54f4cfa4eab85e5990b956a037f336c6814eeb19ea",
+ "chksum_sha256": "7fc06936d093493791466cc5b227ef05b6a0175615a5ce00453f6effb74f9532",
"format": 1
},
{
- "name": "tests/integration/targets/ios_l3_interfaces",
- "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_l3_interfaces/tasks",
+ "name": "tests/integration/targets/ios_ospfv2",
"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_ospfv2/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_ospfv2/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_ospfv2/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_ospfv2/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
+ "chksum_sha256": "8649ac5af985e516bc0be12ea860f9ada7a4454ab14ecf2d056dc16565a95e55",
"format": 1
},
{
- "name": "tests/integration/targets/ios_l3_interfaces/defaults",
+ "name": "tests/integration/targets/ios_ospfv2/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_ospfv2/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_ospfv2/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_ospfv2/tests/cli",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/_remove_config.yaml",
+ "name": "tests/integration/targets/ios_ospfv2/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4ed4649e2c9b10b71a7ae63117d06ec134eae6b2182f26bb8b04eb911e609707",
+ "chksum_sha256": "e36682d7d591a6ebd1311a1b34bfbeb402c35f98f14f9d9521a9839f1a5fc081",
"format": 1
},
{
- "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/ios_ospfv2/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "77cc14435d04e3f72f0ab9457713fca28de7a508c865c08df619ce999d7ace03",
+ "chksum_sha256": "e1995543982bd7f2a4aee73e5a9fce445b21af1d6ffb5f410d34b372dcd904ae",
"format": 1
},
{
- "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/ios_ospfv2/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "030195c5574fcaa46ade5d2d9f640d1b1668c41025f0c78032cdebd9ebc4ef86",
+ "chksum_sha256": "3c2988c367bd38b6fc431b3184c661086ae4bab311882e80c941cae6db04344c",
"format": 1
},
{
- "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/ios_ospfv2/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9c065775b6484b284e03beb65d1e250361c09fa4fc20e5006058f69e7c4eebc5",
+ "chksum_sha256": "8554a710fa447dcbe0f7f0097a0f81b7129deecd19b5f4f6caafaf80bef690f8",
"format": 1
},
{
- "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/rtt.yaml",
+ "name": "tests/integration/targets/ios_ospfv2/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3ccde47cab8fd1f7d6eb91c8a1744831097c27bebbf655e15d71fd2456db7f2",
+ "chksum_sha256": "b2013ced0c8268e36db6925558607e68fddb5887092aa3d520a2b6e1318fc7fb",
"format": 1
},
{
- "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/ios_ospfv2/tests/cli/_initial_vrf_setup.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4ce15cb1c54d6ba216f276f2622dca7eddceeda339ae1b775c4e82ed0eca5ae6",
+ "chksum_sha256": "c35a0a936bc8f7a82cefc3c831cfed82f738026c5b5cf5832c06ed42f7098309",
"format": 1
},
{
- "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/overridden.yaml",
+ "name": "tests/integration/targets/ios_ospfv2/tests/cli/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d2a2840acaf208fa439d00dd3be862789bb3e249ca568c9e3a0f958ce4c92987",
+ "chksum_sha256": "030a148d0e9b7d4e89581f3b82aeb06ce828a2a494fcebecac6a99a5fd9be893",
"format": 1
},
{
- "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/_parsed.cfg",
+ "name": "tests/integration/targets/ios_ospfv2/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "74906256718324f2c376a9dcb3be7bbadb2487067b1617e6d90c16f0a109cfcd",
+ "chksum_sha256": "fcfa39efe63ec56350bd75b0b4ded134aa99c4f1a810039fcf0744eed952a0fd",
"format": 1
},
{
- "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/_populate_config.yaml",
+ "name": "tests/integration/targets/ios_ospfv2/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5a8e64e20ebea7d3a898216c6e256a3c0dccfcfb68a0671e3bf160e1f6c1b935",
+ "chksum_sha256": "be91779003c353db09835a7ade40aa7e16311e93c3a111335d4caea13b27c3a4",
"format": 1
},
{
- "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/ios_ospfv2/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9ecda90386ebc75e0cb6e8a820a5c4bf172d4ca7bd4dbe399a4733aa6c08d07e",
+ "chksum_sha256": "be6663b98bbde670ccf5f4c019cc50bcf3461c7f1df79d59206e0dec1f9c87de",
"format": 1
},
{
- "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/parsed.yaml",
+ "name": "tests/integration/targets/ios_ospfv2/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bfc3c984e0da8a8065696a6a4801d945bfaed1f84146f7c3c9745ba4468d0e1d",
+ "chksum_sha256": "71aad36583afacee1f2d50726b8a99cffc3e17566f1297f8c06cda6cdb9483c5",
"format": 1
},
{
- "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/ios_ospfv2/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ade890c5c428f4f2ada261b01e89f9149d27d8add293430df56161249cf0f6b2",
+ "chksum_sha256": "c2c2d35e0efc547f71effa33a8e7de17a8c8447b28d79a00d0ad56fe4a29d130",
"format": 1
},
{
- "name": "tests/integration/targets/ios_l3_interfaces/vars",
+ "name": "tests/integration/targets/ios_ospfv2/tests/cli/rtt.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3e11b9f26e0eb1e022969d8091b88bd0c02cb8e4e12649c63d2f526009bd6ec7",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/ios_ospfv2/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_ospfv2/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4e225d3253a22e2f0eba465f6fff8324396a02ace3d628e848b7a909af026064",
+ "chksum_sha256": "bf9e0e41402b83f7506fedba9515bd73a0fef00d77e63f09f9b2eda0ee5c3754",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/ios_ospfv2/tasks/cli.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
"format": 1
},
{
@@ -8226,52 +8023,45 @@
"format": 1
},
{
- "name": "tests/integration/targets/ios_lldp_global/tasks",
+ "name": "tests/integration/targets/ios_lldp_global/defaults",
"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",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_lldp_global/tasks/cli.yaml",
+ "name": "tests/integration/targets/ios_lldp_global/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_lldp_global/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_lldp_global/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
+ "chksum_sha256": "1ec7b6b36ce360d258939c3b6b1e6679713dd2ffacd4bf6565d5c1b5391179dd",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lldp_global/defaults",
+ "name": "tests/integration/targets/ios_lldp_global/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_lldp_global/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
"format": 1
},
{
@@ -8289,38 +8079,38 @@
"format": 1
},
{
- "name": "tests/integration/targets/ios_lldp_global/tests/cli/_remove_config.yaml",
+ "name": "tests/integration/targets/ios_lldp_global/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f87546f50552f4a1138c7e95bdabd94215875db8393b6b709fac6727aaf5ad34",
+ "chksum_sha256": "a4ad1680c84aa5f112a608b29bdf2d1191092b3ad2648bb23ed9e30abe4cac8e",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lldp_global/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/ios_lldp_global/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8216a30d2b32742967f308a76000f8399ecd0578dd3117815dbb787313fec7bb",
+ "chksum_sha256": "7d38b25ae4e94caa126b9d4f02ffabb4adc05c8c73a3b58b0ae9ae4622ac28b4",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lldp_global/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/ios_lldp_global/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "67a19cc6b13772b6ef2c936eb3557dd877975467984a5d0532d83c6bd0c1a3c8",
+ "chksum_sha256": "511dd52c567ab5523749431d68ff8477640d6163210157e3a369ecb806e22ee9",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lldp_global/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/ios_lldp_global/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5495fe14050f0ab0b992284137587d261bb57260ba22d2570f2e180b52fa644a",
+ "chksum_sha256": "67a19cc6b13772b6ef2c936eb3557dd877975467984a5d0532d83c6bd0c1a3c8",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lldp_global/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/ios_lldp_global/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "676cecaa97263ace6d06824911abc2333a5ed828c5309a4333652f820ad1b28e",
+ "chksum_sha256": "5495fe14050f0ab0b992284137587d261bb57260ba22d2570f2e180b52fa644a",
"format": 1
},
{
@@ -8331,1774 +8121,1676 @@
"format": 1
},
{
- "name": "tests/integration/targets/ios_lldp_global/tests/cli/_populate_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7d38b25ae4e94caa126b9d4f02ffabb4adc05c8c73a3b58b0ae9ae4622ac28b4",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_lldp_global/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/ios_lldp_global/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "823669670f811bb65eb885121e0081a4072bcb061616296e3898a2f6ade10672",
+ "chksum_sha256": "8216a30d2b32742967f308a76000f8399ecd0578dd3117815dbb787313fec7bb",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lldp_global/tests/cli/parsed.yaml",
+ "name": "tests/integration/targets/ios_lldp_global/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4ad1680c84aa5f112a608b29bdf2d1191092b3ad2648bb23ed9e30abe4cac8e",
+ "chksum_sha256": "f87546f50552f4a1138c7e95bdabd94215875db8393b6b709fac6727aaf5ad34",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lldp_global/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/ios_lldp_global/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "511dd52c567ab5523749431d68ff8477640d6163210157e3a369ecb806e22ee9",
+ "chksum_sha256": "676cecaa97263ace6d06824911abc2333a5ed828c5309a4333652f820ad1b28e",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lldp_global/aliases",
+ "name": "tests/integration/targets/ios_lldp_global/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9b121bba6a0892e8ff599846aa1ea5c388ae3c8a9e6a85192f43b89cf992719f",
+ "chksum_sha256": "823669670f811bb65eb885121e0081a4072bcb061616296e3898a2f6ade10672",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lldp_global/vars",
+ "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/vars/main.yaml",
+ "name": "tests/integration/targets/ios_lldp_global/tasks/main.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": "d8347b048452c2aaf4b7f2315982f603d6955161adbd96ae61527b9fc9b4fcd2",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/ios_lldp_global/tasks/cli.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/tasks/main.yaml",
+ "name": "tests/integration/targets/ios_lldp_global/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7011b000e1a4b28787b459b2a05c625052f68b10a1f108068ec805bb7a0875f4",
+ "chksum_sha256": "9b121bba6a0892e8ff599846aa1ea5c388ae3c8a9e6a85192f43b89cf992719f",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/tasks/cli.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "100c25aa8e342471c45f4ced56d10739c8a7f50ffaf83531800819f0911615ac",
+ "name": "tests/integration/targets/ios_ospf_interfaces",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/tasks/cli_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5f583eec9d6129fbfe6d2b800c2013f2dff80308e21b59c9da1fa7382b6a401d",
+ "name": "tests/integration/targets/ios_ospf_interfaces/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/tasks/redirection.yaml",
+ "name": "tests/integration/targets/ios_ospf_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4c45a3649d432bb34bfcde5f3557848f294212fdd78da9b1c0f9b98176f462ce",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/meta",
+ "name": "tests/integration/targets/ios_ospf_interfaces/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/meta/main.yml",
+ "name": "tests/integration/targets/ios_ospf_interfaces/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2",
+ "chksum_sha256": "d904ba1b1ee67876b5c1db5e8a2c063c500c99af83e05fd36d7584745f906957",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/defaults",
+ "name": "tests/integration/targets/ios_ospf_interfaces/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/defaults/main.yaml",
+ "name": "tests/integration/targets/ios_ospf_interfaces/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
+ "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/tests",
+ "name": "tests/integration/targets/ios_ospf_interfaces/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/tests/cli",
+ "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/tests/cli/toplevel_before.yaml",
+ "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "289b05fea7a7180ab37fb5e04220fa7c387634fbfe67e997d39ea44e53b6b03d",
+ "chksum_sha256": "ff7d15cb956c6a22c1687aee06920653392f08ff0e53223afbab89ad7c7c98a9",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/tests/cli/toplevel_after.yaml",
+ "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c80fc079cc0294cc808809f7524cd26dce8746cb3cbceccae5947c26a53bba77",
+ "chksum_sha256": "e822477d57a3e430f8e379be1528039e6e4ee5eff278141cdc2c3f5c4ea4ad1b",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/tests/cli/replace_config.yaml",
+ "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7cbde273238be56ec3dc2174913de0c2933067aa634987a04dd7fb72fefeac3f",
+ "chksum_sha256": "f097e25e0459371162a4d0d2b645ae9ca361ad5d7fce778cab8793d7bcd2f433",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/tests/cli/diff.yaml",
+ "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c4223635f760bffc17141049ab0cb3e09c3e9b2a53398754c740569c1244a548",
+ "chksum_sha256": "4395e95e40e7a0dfcf80e05ade1c443c37cfe70fe80fc4fdcfc0ee48ca7bca7b",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/tests/cli/sublevel_strict.yaml",
+ "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ce6faa181c1fb7ab5ba44db51d418b0120a7d110a3f4373e91ce02987a76fefa",
+ "chksum_sha256": "fd72a9b920445f668d61b31646621e0f9587851e61eaaa071f8034468e3fab43",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/tests/cli/src_match_none.yaml",
+ "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/_initial_ipv6_setup.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3b6ae94a3a40d6baa6400753b0273af9e1f0c693c0b9d02a216b4d16c9afad67",
+ "chksum_sha256": "8a2472a61a85371edf42157eb38de6446a90882922de4471337054194b698dff",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/tests/cli/sublevel_block.yaml",
+ "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "91c95c35263639fde90b44f93f0612c0a7b3c510f325285afe281d9fc121e58b",
+ "chksum_sha256": "adda4ccbcef419623366dff6fd814799b732583587c8b71b9a49638079cf4c7d",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/tests/cli/toplevel_nonidempotent.yaml",
+ "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "25ef9f513a03aa86771b90bd0d22940459f94fa3b2257ae7498b9217a405bb9a",
+ "chksum_sha256": "338693405501e01ca57d2ddeb40f482891c029a986864fc98946fc266265bf13",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/tests/cli/toplevel.yaml",
+ "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f45a6bb9f23763b221df958302548d88734cedb25ee2edc0fe1ec86be00b4e8b",
+ "chksum_sha256": "c6645517abeb9ff0bea3331bc844b12c1382b0eea4178be0dfa523a3a38c5a97",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/tests/cli/sublevel_strict_mul_parents.yaml",
+ "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ca18a9f33f955ba25c6df6be5108b58cb0b159406b531931d7886b65ec1a0316",
+ "chksum_sha256": "3d05e7ad3cd69bd4b423def7c76b0200ec3daff4ce28f945cf1b53a001c52d95",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/tests/cli/sublevel_exact.yaml",
+ "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8ff88256789e8892cc5604826818b4a694faa8dd37d8de6f37a06535724dedd2",
+ "chksum_sha256": "7ef2eb2c6dd20e38ac7f6058ced2a4902a838cfb902e8a32e33fc83bc8ffca5a",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/tests/cli/src_basic.yaml",
+ "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2544e95d1ed36fd4c73cad6dd719051035205bfd414ef4d6bbb73fe7e592b981",
+ "chksum_sha256": "843a2bd9f2693a11e665a5f552e9de54fcc379ca3e06ee80ba2530f9077acede",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/tests/cli/defaults.yaml",
+ "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f299c02b02d7c454dd2eaa7eca83f4306f99b64430892077955f5159b3009031",
+ "chksum_sha256": "c0c23c50849c89a60cce7588ee594c9f12fc89ae710516e3371d9cdf23bbdfbc",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/tests/cli/macro.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c50af815c1122d68ec8aa76f0738a923e3100ffbdce96ec9f6eeda091001ff12",
+ "name": "tests/integration/targets/ios_ospf_interfaces/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/tests/cli/backup.yaml",
+ "name": "tests/integration/targets/ios_ospf_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e567e119083aae3e8dd3739d64db3927cb554387079640fbff99b1d6b79f267e",
+ "chksum_sha256": "3ca85e538cabf8bda1ebd32dee2b5803e8e171ce955d7affe2f1417283cd92d6",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/tests/cli/src_invalid.yaml",
+ "name": "tests/integration/targets/ios_ospf_interfaces/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e37382eede72ae657893c3933a8e6731db78596f46d5fede249d4d050e8f12b6",
+ "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/tests/cli/save.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2fbcbac7be1a2444b9866a0312ebd7f30691de74f434b693b301e1b667efbc34",
+ "name": "tests/integration/targets/ios_lag_interfaces",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/tests/cli/sublevel.yaml",
+ "name": "tests/integration/targets/ios_lag_interfaces/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/ios_lag_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "81e93d0c4240f0c189dcc3db9d2887404f6f79ccc22a7ae9d8c2c616a823ae23",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/tests/redirection",
+ "name": "tests/integration/targets/ios_lag_interfaces/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/tests/redirection/shortname.yaml",
+ "name": "tests/integration/targets/ios_lag_interfaces/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a9d8f38448bbc15b4db9520e986758afbb1e4332917cfa4e676c4726ecb1324c",
+ "chksum_sha256": "7548cef68905ad34af6e5c02e932c61e8eadc317b15831fca6346a128b89f7bb",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/tests/cli_config",
+ "name": "tests/integration/targets/ios_lag_interfaces/meta",
"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_lag_interfaces/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3445b7155b0702ea632d8e846e514af4e58679edf35a1b00034c1f33611c7bcb",
+ "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
"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_lag_interfaces/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/tests/cli_config/cli_backup.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6c6e65aa217139078a0e172b54fc00eb2cfe51f2079cb7d9b0a5d9c5d2a74ca6",
+ "name": "tests/integration/targets/ios_lag_interfaces/tests/cli",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/tests/cli_config/cli_block_replace.yaml",
+ "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b9b16a4833c6d7626d43f1c1e90a106af469adc1f3a032875e78e13c6b563e5f",
+ "chksum_sha256": "523ce08d67e26a55d5ae1004bdf73f5f785348437c918d98179f5bb01e403839",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/tests/cli_config/cli_basic.yaml",
+ "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "28f51d7f60e5fcd45a211c50797cc4142a3e4784cf8619ed41eadf1a630e4629",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_config/templates",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_config/templates/basic",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "af7be4e062acefec5cf61c6cc7ad3cb369db2b641ae00f229621ee62a47fe90e",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/templates/basic/setupblock.j2",
+ "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c7e470728246324f9d35d7d1f36e53f10a1d424cb9b14aea8ebd22ae03384985",
+ "chksum_sha256": "0ce0f4b8f4ff19ca8202594612bfff8bbe94ce65867e3db6e3e9bde4354c4c16",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/templates/basic/configstrict1.j2",
+ "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d7019ec0a3b0c34ed351eed7b9ea2979114804e6aac94b9433bd42789bec5b0c",
+ "chksum_sha256": "4a3bf0d0d675271115fbfcb01d220b647d351ba511dff0d16d9f8d7468ce8ac6",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/templates/basic/setupexact.j2",
+ "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "78abef2216f92c74b21c0a935660fa35625c923e4d3b5d6eaa014a2f7b9d5182",
+ "chksum_sha256": "41fc0f1077783f0157b1bdae02da05009bd55cf31cfffdce93f25490569c7eaa",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/templates/basic/setupstrict.j2",
+ "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/_populate_port_channel.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "78abef2216f92c74b21c0a935660fa35625c923e4d3b5d6eaa014a2f7b9d5182",
+ "chksum_sha256": "18e91e2791fb6dd738d3042718436ae3244dbd0a90b5f1886ed5a5daf1d46ceb",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/templates/basic/acl_config.j2",
+ "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "819000cad7a1b4e27b8b206fe04b2d18c0bbba7876801d9f2786c94f76482050",
+ "chksum_sha256": "c30f577272b1c7bdc04fc0cf9a016b5c004a93f0e7d09cdb4bca3fa5aafeea8e",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/templates/basic/macro.j2",
+ "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "240ea6bffb5f8140b8fb61c0e4505e89f76ea5c0ade1103b63b25c6024e57892",
+ "chksum_sha256": "9ae384d2d361bfec3e5ec8d4521923a328fd0a6b06ee0fad2dc813650f4867af",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/templates/basic/intended_running_config",
+ "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0c8e4ffd5cb273c2c92fe0690fce9249386fbd72ac0e77872e8fa2cb1c256138",
+ "chksum_sha256": "d11cd0691705a44a06275d2438229562d70cb6eeafdfd7823c306fae55ab7974",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/templates/basic/base_running_config",
+ "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/_add_port_channels.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7385f5112a2ea15a4ca3f480bf6830bf91439a67073d846367170819b02692c6",
+ "chksum_sha256": "37e0850a33908a4856f7167d6e488cbf3b6060950a032aae1f1006dae560d2aa",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/templates/basic/configblock.j2",
+ "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d7019ec0a3b0c34ed351eed7b9ea2979114804e6aac94b9433bd42789bec5b0c",
+ "chksum_sha256": "dae7f6e33417854fdb686dc22ab25acf7ccd05b1cd088087f4b6777012ecd7c4",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/templates/basic/configexact1.j2",
+ "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a112244df64f4360549463724af9ae4c598c3f39c22310a4d0a98c44cf034408",
+ "chksum_sha256": "a9ef52fd6e4d52c3bdf173bf2d2c13f4ad7515dfd508f93e70d00f951cebc8d5",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/templates/basic/configexact2.j2",
+ "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d7019ec0a3b0c34ed351eed7b9ea2979114804e6aac94b9433bd42789bec5b0c",
+ "chksum_sha256": "59d406ceef4165fcae86490c8251a719575a113ebe80cce578c1e4b67c974225",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/templates/basic/config.j2",
+ "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fed860520ec0b19850744af6be1c77939335d4a09539bf563d0c15aa6afc84ef",
+ "chksum_sha256": "45de9b52c7ab6864f1abd09fe743ffafdc10eb084285f98755c9ec21137e9bb0",
"format": 1
},
{
- "name": "tests/integration/targets/ios_config/templates/defaults",
+ "name": "tests/integration/targets/ios_lag_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_lag_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c67459067166baed6059b02907fb2692e34868270185b09fcd9f5d7c3ec013d0",
+ "chksum_sha256": "79c7a4587c7a00a2c7a91a5eab3b092671c730ab0c82458102614e087ae32030",
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp_global",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "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_bgp_global/tasks",
+ "name": "tests/integration/targets/ios_prefix_lists",
"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",
+ "name": "tests/integration/targets/ios_prefix_lists/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp_global/tasks/cli.yaml",
+ "name": "tests/integration/targets/ios_prefix_lists/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_prefix_lists/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_prefix_lists/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
+ "chksum_sha256": "54b02bf40251a3fd868d5c54f4cfa4eab85e5990b956a037f336c6814eeb19ea",
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp_global/defaults",
+ "name": "tests/integration/targets/ios_prefix_lists/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_prefix_lists/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_prefix_lists/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_prefix_lists/tests/cli",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp_global/tests/cli/_remove_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3c6b76253c2d8e53a0df8c1f620ad1b90d537912cb81877fff08d39689a1537f",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_bgp_global/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/ios_prefix_lists/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9c08349fdc001cdd463151f85c7bf4a5973c2dff048f27ef2ced9c769535edfc",
+ "chksum_sha256": "10d8202df57a09927329626e4b89a45038167e54d9e9fbc4c6c6ade64129fff5",
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp_global/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/ios_prefix_lists/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "22e70effcb2a1b4e95a65356aeb5851b46cc61d518aa81ce133b7934eb8c6d83",
+ "chksum_sha256": "f1b300e29142c3cb1fa9e84e476577e0909a1f5e13c9f6bae1036eb2f021402f",
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp_global/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/ios_prefix_lists/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6479de2654937093427d57930e46c699ad3265ee6f67624b7414d03cd9888eb",
+ "chksum_sha256": "92341a0e0de58ed85e0e12651de37e00217256797d83723f5bf31f5a62ed8b10",
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp_global/tests/cli/rtt.yaml",
+ "name": "tests/integration/targets/ios_prefix_lists/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cca6983e388a8e06b3b72325026c23d5794b130d45a74adb6d2156525ff8335d",
+ "chksum_sha256": "93cc5c3bd91b11ab509b884e143d023a851d0046e2118d1fc2eb22ae074d2d58",
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp_global/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/ios_prefix_lists/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5cbe172d53fbd26d8dc675b06a513f8e815008c6f263c8bfae14600cef46f964",
+ "chksum_sha256": "1baa1acb44f8c05b1081b7d2d49d7d679a694b1eef20d63cf8b7eb33df4a441d",
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp_global/tests/cli/_parsed.cfg",
+ "name": "tests/integration/targets/ios_prefix_lists/tests/cli/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "87c9833d471a6b80a6c2cd0a14d29ef5b983fe7d8e9e61e6f43a8c0e1e8a89f6",
+ "chksum_sha256": "dc8a935708bb8e0b18381fb2cbd56f7bd389aa02255d0b5cbfe36a5b633b1bf1",
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp_global/tests/cli/_populate_config.yaml",
+ "name": "tests/integration/targets/ios_prefix_lists/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ac9b0f35b9607c4dcd6ee6fe8c4c5a3a890eb3ffef2606e5d9935648df7d5b7e",
+ "chksum_sha256": "0c4dfbbfd610bc72cc634465a0668fa3daabd76ab0771a293c38e366a32a6842",
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp_global/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/ios_prefix_lists/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cfa79d338f05e3971ce8a30e951a60e8a3898786fecbf125898bfc20275377a4",
+ "chksum_sha256": "db20920f776718e96e3c251c29423c0a28ac5000c6454f49943f65ac20fae7d8",
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp_global/tests/cli/parsed.yaml",
+ "name": "tests/integration/targets/ios_prefix_lists/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b28f32004005582bc80fbc2a9c8db6728687c25d87f74a365e61e7a20ec853d5",
+ "chksum_sha256": "3718ece1e147c8f7a40932aeea280095591c481deeb46038cd3b070377d5f66f",
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp_global/tests/cli/purged.yaml",
+ "name": "tests/integration/targets/ios_prefix_lists/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "440e31a2f87615c703a8a25d436bebf5e076b729ab0316294b1aea01585fb9ae",
+ "chksum_sha256": "c1842105d82cd689ea4cea57e9f151bca2e845204e00c78142b60cdac10b401f",
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp_global/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/ios_prefix_lists/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75c019721cd809896e681cc3826abf70eb2a7d0616bc09817577e99c02ef7070",
+ "chksum_sha256": "97081ebf559f11a3701d87bc521f3d05be7a8a62a454d7f37194f651ccb053ab",
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp_global/vars",
+ "name": "tests/integration/targets/ios_prefix_lists/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_bgp_global/vars/main.yaml",
+ "name": "tests/integration/targets/ios_prefix_lists/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9748f49b5ce9a99a9ebc47bf062708794d4c7cc7ca1fa2f887b8220f2f45bc52",
+ "chksum_sha256": "8fe724448a906aa2a584f11792118430e87edaab920e85f9f8042786edd08daa",
"format": 1
},
{
- "name": "tests/integration/targets/ios_command",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "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_command/tasks",
+ "name": "tests/integration/targets/ios_cliconf",
"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_cliconf/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_cliconf/defaults/main.yml",
"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_cliconf/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_cliconf/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2",
+ "chksum_sha256": "3de9b3530a2bce1c236f2ddc4b95f4282226d88b6212be4d1ff1fbc85d5c131f",
"format": 1
},
{
- "name": "tests/integration/targets/ios_command/defaults",
+ "name": "tests/integration/targets/ios_cliconf/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_cliconf/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/ios_command/tests",
+ "name": "tests/integration/targets/ios_cliconf/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_command/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_command/tests/cli/invalid.yaml",
+ "name": "tests/integration/targets/ios_cliconf/tests/common/commit_conf.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9a5de37d3a4e9c0a0deb381515d7aad38814e2573570881499c2f37d01c33148",
+ "chksum_sha256": "86cde52806aad9c78253ffdb74022af60cb99ff51c80e04adbbfde1af72254cd",
"format": 1
},
{
- "name": "tests/integration/targets/ios_command/tests/cli/contains.yaml",
+ "name": "tests/integration/targets/ios_cliconf/tests/common/_test_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ac41c0332715a477675065b303c059029f452524c9613bfa6837221b3c8a4748",
+ "chksum_sha256": "c48a21095f6edaea997c25042855b8628c0ca7181366ee8488069286ab350873",
"format": 1
},
{
- "name": "tests/integration/targets/ios_command/tests/cli/bad_operator.yaml",
+ "name": "tests/integration/targets/ios_cliconf/tests/common/_enable_archiving.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "114c1244968981a22617d661fe4e9de4734037af8970bce9b0c5b79102f8ae6e",
+ "chksum_sha256": "63ff50f1f1f57a709881dd26a33223c2316775239e9fc21dfeff23adbaea7ebc",
"format": 1
},
{
- "name": "tests/integration/targets/ios_command/tests/cli/error_regex.yaml",
+ "name": "tests/integration/targets/ios_cliconf/tests/common/_cleanup.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9d8673ef0e332533bc520e1fc69282244014b33fe4fd67c9df97fb0c45389b35",
+ "chksum_sha256": "5386a829c04704371984f8ce25e2c63213c131dd62775410cb26568d37e923a6",
"format": 1
},
{
- "name": "tests/integration/targets/ios_command/tests/cli/output.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "90067084bae011b7afc19fc1569700cf0007d29ae86d423be0111fbdb7d9bf8d",
+ "name": "tests/integration/targets/ios_cliconf/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_command/tests/cli/timeout.yaml",
+ "name": "tests/integration/targets/ios_cliconf/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "99999a86b0c912cd067669a525d1e0032db4e19aac5fedec7593bfc8868ae37b",
+ "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822",
"format": 1
},
{
- "name": "tests/integration/targets/ios_command/tests/cli/cli_command.yaml",
+ "name": "tests/integration/targets/ios_cliconf/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "765a06846e98c1bc59b769855ba3c28f6ed2b7f8301b1aef0b8f0a9a4aef4863",
+ "chksum_sha256": "2d3350be00fa2af0f217f369684578df724bcf9550402e7a54ef1b84f32dcb53",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ping",
+ "name": "tests/sanity",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_ping/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/sanity/ignore-2.15.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4d5b86543c5d0e71325edbf6019f42e4999f5ef2b9121a0c2e30bd0eae3d0fb1",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ping/tasks/main.yaml",
+ "name": "tests/sanity/ignore-2.14.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d4fb9eae8dce0d7933579bdf2d3f8795995a4058621bb90be902cecbb7fda0da",
+ "chksum_sha256": "4d5b86543c5d0e71325edbf6019f42e4999f5ef2b9121a0c2e30bd0eae3d0fb1",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ping/tasks/cli.yaml",
+ "name": "tests/sanity/ignore-2.18.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95",
+ "chksum_sha256": "4d5b86543c5d0e71325edbf6019f42e4999f5ef2b9121a0c2e30bd0eae3d0fb1",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ping/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/sanity/ignore-2.17.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4d5b86543c5d0e71325edbf6019f42e4999f5ef2b9121a0c2e30bd0eae3d0fb1",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ping/meta/main.yaml",
+ "name": "tests/sanity/ignore-2.16.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2",
+ "chksum_sha256": "4d5b86543c5d0e71325edbf6019f42e4999f5ef2b9121a0c2e30bd0eae3d0fb1",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ping/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ping/defaults/main.yaml",
+ "name": "tests/config.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
+ "chksum_sha256": "4129945061440c8d8c281590b8054b194f5958833c722aa40e878b09038c380e",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ping/tests",
+ "name": "tests/unit",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_ping/tests/cli",
+ "name": "tests/unit/mock",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_ping/tests/cli/ping.yaml",
+ "name": "tests/unit/mock/loader.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "beb45b19b88ea64c61e0d67d7769275c18e3c12a0c572bea86d171bada913956",
+ "chksum_sha256": "2343d1f644250d4b616f0bf0a826fdee8fe306243d8412d44dd0e033352b262b",
"format": 1
},
{
- "name": "tests/integration/targets/ios_cliconf",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/mock/yaml_helper.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fa89194ba60856f51500efdd1f802c5ca3b2e4ded9461d7b88847c427a43a958",
"format": 1
},
{
- "name": "tests/integration/targets/ios_cliconf/tasks",
- "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_cliconf/tasks/main.yaml",
+ "name": "tests/unit/mock/vault_helper.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822",
+ "chksum_sha256": "3bf7834d18bd34473d0f4b898253177229a131f14364874efba584ff985e4a41",
"format": 1
},
{
- "name": "tests/integration/targets/ios_cliconf/tasks/cli.yaml",
+ "name": "tests/unit/mock/procenv.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2d3350be00fa2af0f217f369684578df724bcf9550402e7a54ef1b84f32dcb53",
+ "chksum_sha256": "3ff983479d7aa4b90efe73337f723c14224edabcdfde4efe49f24cd905f45f1a",
"format": 1
},
{
- "name": "tests/integration/targets/ios_cliconf/meta",
+ "name": "tests/unit/mock/path.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "110552d5ab0ffabe2bc6b6c57e9f389be3920da2e0f37ea5b628795d1b426bfd",
+ "format": 1
+ },
+ {
+ "name": "tests/unit/plugins",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_cliconf/meta/main.yml",
+ "name": "tests/unit/plugins/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/ios_cliconf/defaults",
+ "name": "tests/unit/plugins/cliconf",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_cliconf/defaults/main.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_cliconf/tests",
+ "name": "tests/unit/plugins/cliconf/fixtures",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_cliconf/tests/common",
+ "name": "tests/unit/plugins/cliconf/fixtures/nos",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_cliconf/tests/common/_test_config.yaml",
+ "name": "tests/unit/plugins/cliconf/fixtures/nos/show_running-config",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c48a21095f6edaea997c25042855b8628c0ca7181366ee8488069286ab350873",
+ "chksum_sha256": "42f2e50d84821d1ce5c9ddfa082e7a6086254ef9908166a0d4523a3dc5b6b2df",
"format": 1
},
{
- "name": "tests/integration/targets/ios_cliconf/tests/common/_enable_archiving.yaml",
+ "name": "tests/unit/plugins/cliconf/fixtures/nos/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "63ff50f1f1f57a709881dd26a33223c2316775239e9fc21dfeff23adbaea7ebc",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/ios_cliconf/tests/common/commit_conf.yaml",
+ "name": "tests/unit/plugins/cliconf/fixtures/nos/show_version",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "86cde52806aad9c78253ffdb74022af60cb99ff51c80e04adbbfde1af72254cd",
+ "chksum_sha256": "a21600440d1fbd2208fd81eeeaa632cfdf6b69c060bcff46e5a3f4a5f5c26f68",
"format": 1
},
{
- "name": "tests/integration/targets/ios_cliconf/tests/common/_cleanup.yaml",
+ "name": "tests/unit/plugins/cliconf/fixtures/nos/show_chassis",
"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": "a2890b7a8db9c1e8954a186fa311c8a2b44477b1d04bff9c32bf75b7797b4533",
"format": 1
},
{
- "name": "tests/integration/targets/ios_cliconf/vars/main.yaml",
+ "name": "tests/unit/plugins/cliconf/fixtures/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3de9b3530a2bce1c236f2ddc4b95f4282226d88b6212be4d1ff1fbc85d5c131f",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/ios_linkagg",
+ "name": "tests/unit/plugins/cliconf/fixtures/slxos",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_linkagg/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/plugins/cliconf/fixtures/slxos/show_running-config",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d1a135373ce559af818475189bbfc8ff838f5891869b62e159e38ac4c30b3284",
"format": 1
},
{
- "name": "tests/integration/targets/ios_linkagg/tasks/main.yaml",
+ "name": "tests/unit/plugins/cliconf/fixtures/slxos/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8171ce9eb1bd2474dcb5e0f86eeb142567bac349514708f53c24829283fd382e",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/ios_linkagg/tasks/cli.yaml",
+ "name": "tests/unit/plugins/cliconf/fixtures/slxos/show_version",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95",
+ "chksum_sha256": "e18e1a4f1640ca226a2f0d067a422af58218fa7f191a8b71394432a56177c7fd",
"format": 1
},
{
- "name": "tests/integration/targets/ios_linkagg/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/plugins/cliconf/fixtures/slxos/show_chassis",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1ab5008e1e19a8b1995b8c284856ae37ae5d242975b81057a3f0127fafa0f7a2",
"format": 1
},
{
- "name": "tests/integration/targets/ios_linkagg/meta/main.yaml",
+ "name": "tests/unit/plugins/cliconf/fixtures/slxos/show_startup-config",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2",
+ "chksum_sha256": "d1a135373ce559af818475189bbfc8ff838f5891869b62e159e38ac4c30b3284",
"format": 1
},
{
- "name": "tests/integration/targets/ios_linkagg/defaults",
+ "name": "tests/unit/plugins/cliconf/fixtures/ios",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_linkagg/defaults/main.yaml",
+ "name": "tests/unit/plugins/cliconf/fixtures/ios/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_linkagg/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/ios_linkagg/tests/cli",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/plugins/cliconf/fixtures/ios/show_version",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "28896cfd7a101f137f8433db1efdb33343aa43425aaedc2d4f7eebec7e71204d",
"format": 1
},
{
- "name": "tests/integration/targets/ios_linkagg/tests/cli/basic.yaml",
+ "name": "tests/unit/plugins/cliconf/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "01543795b9d0559974aa6eb2e501541a442c6d8a61361ab6ce30eb7d7a0610e3",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp_interfaces",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/plugins/cliconf/test_ios.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "976f42e2eb2d4bc2ca64724d7361549f46d0d1b56ed30a988a39b22d928c886e",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp_interfaces/tasks",
+ "name": "tests/unit/modules",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp_interfaces/tasks/main.yaml",
+ "name": "tests/unit/modules/conftest.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "42f682d0706bde5cedd3667110b289d169b29ca20a1692b85c51bbe5f1e3131e",
+ "chksum_sha256": "354440d86f684a9641f329807a687fe71fc66ab901207f7a166ecfa648935488",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp_interfaces/tasks/cli.yaml",
+ "name": "tests/unit/modules/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2f113e17755cf29780c0366eea077fbf7d12d9332c0d31df993556813c20a9bf",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp_interfaces/defaults",
+ "name": "tests/unit/modules/network",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp_interfaces/defaults/main.yaml",
+ "name": "tests/unit/modules/network/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_lacp_interfaces/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli",
+ "name": "tests/unit/modules/network/ios",
"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/modules/network/ios/test_ios_lacp.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "337f2c06ea2b0c31adfc06bd0684edb480b1a333dc4d82fd36e74e6efad7d6ba",
+ "chksum_sha256": "8c4a18f73cdb869f9b4951700395f4fc97dd6d7849222c22ec9568fa65f0c2a2",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/deleted.yaml",
+ "name": "tests/unit/modules/network/ios/test_ios_evpn_evi.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6b15190694a3230175825f662ffc5be36c207a5508f8dd03e34d0f16dba801c3",
+ "chksum_sha256": "8f30fe112c1b85b2b857971b8327404c2ecbc86a164181203d4361f642e54b3e",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/gathered.yaml",
+ "name": "tests/unit/modules/network/ios/test_ios_hostname.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5bb10615fc266a5079e9adaf3307602bdefac54f4e8c9fda96954eb59ddc1485",
+ "chksum_sha256": "47fda50478f19ef45ac929d8622ed877fa426bf5cf25d3184261a8c0f3898ef1",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/empty_config.yaml",
+ "name": "tests/unit/modules/network/ios/test_ios_service.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "200cc72937b5aab4388efc5e85b4f590dfae9bbbfd9668c2c8390d42c73cb1a3",
+ "chksum_sha256": "cdb28578a9734cdaa4aa74d2418a41f03960d462e068f8b0c9e4c69d9805a805",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/_add_port_channels.yml",
+ "name": "tests/unit/modules/network/ios/test_ios_lag_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "37e0850a33908a4856f7167d6e488cbf3b6060950a032aae1f1006dae560d2aa",
+ "chksum_sha256": "7724ac0aadb681867d7356a4ee4f4d141f4189731a5dc01d72e751f500f9e9d7",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/rtt.yaml",
+ "name": "tests/unit/modules/network/ios/test_ios_lldp_inteface.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3de8041d6d7c288d7f421fc629c2bbcfd5b1faf29d3785fb1f8c39b6b5f36775",
+ "chksum_sha256": "0fb33dee7e350597f8b9a6891467929a616cec88859af63feae411a69c237ca0",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/merged.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8a4d9930854480ec68685dfce6a5ca53170d519fa93b8b10ff89d84c2fef906d",
+ "name": "tests/unit/modules/network/ios/fixtures",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/overridden.yaml",
+ "name": "tests/unit/modules/network/ios/fixtures/ios_ping_ping_8.8.8.8_repeat_2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "83acc10766bff99eaf1085cfc2fab4b54e4101edfc70d06c19f65eb5f90f0478",
+ "chksum_sha256": "4962134fb2b2230a111b5b94f904ba094c12d0e0775e22c50b3db6599dbfcb36",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/_parsed.cfg",
+ "name": "tests/unit/modules/network/ios/fixtures/ios_vlans_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "05d13aca3673ed53547e84c3a96b852f6c6b21e31b250ccae1a3c9dc8a455415",
+ "chksum_sha256": "9e3b415848259747054d6586d9a85787a48f2a5d3fd5866c41f8b050eadfae90",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/_populate_config.yaml",
+ "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_memory_statistics",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ac8361b624da0372fb79c80bd147c5b9bfed4d4140d0be7fe9957b75e414c61b",
+ "chksum_sha256": "38375b22d4c94dad4289ad32a3360980e0e8f30d69c4a0c2ab1d8181d4fb811b",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/replaced.yaml",
+ "name": "tests/unit/modules/network/ios/fixtures/ios_ospfv2.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6fd2582bf431113cefd8a863baf6d1b6908f5cd142dccde32ef536feb29d0702",
+ "chksum_sha256": "f557ec41733d7040f5585b79e18b88623ace43d899ac80edc055e01c469240c1",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/parsed.yaml",
+ "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_switch_virtual",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fc43ad13fcf0465249c1941a418f61f36fba08a55afaef2aa8a7949ed028a7fe",
+ "chksum_sha256": "db1b7ead274089538a05952a47f1e7800560ca1a552adc345c34dc2ab4c4f9de",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/rendered.yaml",
+ "name": "tests/unit/modules/network/ios/fixtures/configure_terminal",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e87a35985502b9c92eb9c60ed83fdefcc11a17e26b421e067dcf7be3624c8503",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_lacp_interfaces/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/ios_lacp_interfaces/vars/main.yaml",
+ "name": "tests/unit/modules/network/ios/fixtures/ios_vrf_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "866d49b9fb83bafefee3c2ed7ba79d894e2b28af83b4fed56ad48982c364a894",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_ntp",
- "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,
+ "chksum_sha256": "9ee43d746654712aed9c1163d6130a7b6de350a3efef3e6e228355378b20be50",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ntp/tasks/main.yaml",
+ "name": "tests/unit/modules/network/ios/fixtures/ios_l3_interfaces.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ea10fd1166a91f0a0c747a5be6a85f313c52f5f3d9f33cdc68e9424f3cc56a42",
+ "chksum_sha256": "2836ef546936bc7b3ff57cd557f54d5c5024ecbf64451cbb4f0d9c937cdb71c6",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ntp/tasks/cli.yaml",
+ "name": "tests/unit/modules/network/ios/fixtures/ios_config_src.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_ntp/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "57d42d2e8e8b7a4b6cae566115ee42fecea077b525cace10cefc3b7dbd85f033",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ntp/meta/main.yml",
+ "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_cdp",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_ntp/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "5abf76b46295216c079870fba8c70f8f6064ccd667e80d91e31b47ab84f6fd70",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ntp/defaults/main.yaml",
+ "name": "tests/unit/modules/network/ios/fixtures/ios_vlan_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_ntp/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/ios_ntp/tests/cli",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "73a0c5b62bea4279d25deae4c2e04bf12c53fc3784297675a92eb98c911696fc",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ntp/tests/cli/ntp_configuration.yaml",
+ "name": "tests/unit/modules/network/ios/fixtures/ios_ntp_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "11d03d940194a739c19346b9e626e425de69706b572ff7a178b90cc21a6f36d0",
+ "chksum_sha256": "2dc4f5c356e2ba9f40ec1ad94b5bc4e597c39657662156764465f156ab6cd7cd",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv3",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/ios/fixtures/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"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_banner_show_banner.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fcbd9e21fbc41c072eed699ebf08ba9fc0e86b9084e4e54eb701cc12d4c764d0",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv3/tasks/main.yaml",
+ "name": "tests/unit/modules/network/ios/fixtures/show_version",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2ee4493aa601f74dca37f18dfebff80578f8ad47283d1921825a9036bae468ad",
+ "chksum_sha256": "dc71e5e1dc8e16c64ad26477c7b0dc0d0278a20be9dc4a6d53224328f239f79b",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv3/tasks/cli.yaml",
+ "name": "tests/unit/modules/network/ios/fixtures/ios_ping_ping_8.8.8.8_size_1400",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
+ "chksum_sha256": "825819c8953b25588aadeb8264ebc23a52d06537049b7e3f4f0b9edfda1b7e45",
"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_facts_show_inventory",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "695c97917cde02fca97d816d92429a12142d6400180388630847a6938513829f",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv3/meta/main.yaml",
+ "name": "tests/unit/modules/network/ios/fixtures/ios_ospfv3.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
+ "chksum_sha256": "b45b7eafd03c14cb0a9737561ddd60b86b708aabe1223697376c56066fabb29c",
"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_facts_show_cdp_neighbors_detail",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6e29939eafbbdcd5d64d8558cf6f5fe9d7fa1b806e62b5f19b65b0401c9c9c44",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv3/defaults/main.yaml",
+ "name": "tests/unit/modules/network/ios/fixtures/ios_system_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "ecb0f88d690961592ffec4c1dbeebb4b6883ed2fee08fd60117a3b7937b37949",
"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_logging_global.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "89a3006dad756d356d14bf9704c493b1ebac4267dca6344c6af536d53dd1bbf4",
"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_l2_interfaces.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "743adf2fb8dcad62933e91c19b47b2b0437868c7e50db9a4e556431ed696f2f5",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv3/tests/cli/_remove_config.yaml",
+ "name": "tests/unit/modules/network/ios/fixtures/ios_facts_dir",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "238918c44b8752332fe7ee6df2e293a51da17252fdf2362b337e6a897cc224cc",
+ "chksum_sha256": "bf4241a7402fd70614b668b90da04f80c7430f8f4535a1eb0a40e989a1d9d48b",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv3/tests/cli/deleted.yaml",
+ "name": "tests/unit/modules/network/ios/fixtures/ios_config_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "844b1f73132324bcee3f3390fce22388df69b69e4266ffebbdd4c5d6a8a4c2e8",
+ "chksum_sha256": "6fe81e446733fef4e3643a80042ab4111b9b0c927599c4b5972ecea4c18b4ffd",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv3/tests/cli/gathered.yaml",
+ "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_processes_cpu",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "72297b557d1b34d29b999d26e00a0b28d813fd1e458338acd1cd3b24b0a35aab",
+ "chksum_sha256": "e8edd6276089ec830cb2978305dcff0f77cbe3a39f393eb0969c671a981d8d89",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv3/tests/cli/empty_config.yaml",
+ "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_version",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2bfc27b217fab25508ee8dedb4819c40bdb98b3352c464065f8ef169622f4384",
+ "chksum_sha256": "a6290b0be0cd8622c90617eace7c4c8bb1508a77d33c2b0e7bb9d6f7f8967282",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv3/tests/cli/_initial_vrf_setup.yaml",
+ "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_ipv6_interface",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7fb8dc743143aa6677f024b7333e02bb1f52f1a9c434cd86e1617b442dcc8a0b",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv3/tests/cli/rtt.yaml",
+ "name": "tests/unit/modules/network/ios/fixtures/ios_route_maps.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8a735801dc4fc0769f2773722caa333ada8c5c41daad731c271c185ff1d6a040",
+ "chksum_sha256": "a2764456add35e41e5109cefb0694cd6a708bcf77239259b47ed60d86fa06856",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv3/tests/cli/merged.yaml",
+ "name": "tests/unit/modules/network/ios/fixtures/ios_banner_show_running_config_ios12.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c70156e646606c78e8221d3f09140d0be29bfc307756e6f0993b02b78b8fe9e9",
+ "chksum_sha256": "ed9d617788c3a95226fda5a0dfa4271afe77626709937b27a3af70ffde7af53a",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv3/tests/cli/overridden.yaml",
+ "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_interfaces",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c8f73d52be036135d76b6157719db5f9bd4f7761ebeae5618e48a339ed14ae4e",
+ "chksum_sha256": "b70d617a3d7b66351dd189740638da0a7558380e1edac4b74e43eeb54b4cf7c6",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv3/tests/cli/_parsed.cfg",
+ "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_lldp",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75178f12ee6688bc6635aafb6d83adddbed9b5a0d12fb9d39c819afa14adba64",
+ "chksum_sha256": "ad64c29374175a8d737d01ae856c16364c442fca9ea7b9447ab8f22d9ed78dad",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv3/tests/cli/_populate_config.yaml",
+ "name": "tests/unit/modules/network/ios/fixtures/ios_logging_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d825c44ce8c9cec4e8b41ce23a867b76e766c6e6a3491d6621585bce8bdd57c3",
+ "chksum_sha256": "547917e90b62a4ef7eb05c6a2527019acf8e3790d7d5a0c9f6b24af6a82a2fb3",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv3/tests/cli/replaced.yaml",
+ "name": "tests/unit/modules/network/ios/fixtures/ios_logging_config_ios12.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "23df18165ce662f9a6837926a752e92d9c0500334a68492ae8607c2385b4cb29",
+ "chksum_sha256": "2923b7e2af16ca384a4c44c7fc1c9944367fffc1769b9ee6c41d73a9e0a2c1fb",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv3/tests/cli/parsed.yaml",
+ "name": "tests/unit/modules/network/ios/fixtures/ios_ping_ping_10.255.255.250_repeat_2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "616e7d9e3cc11d85aa6f6948a80ba8ad080df33b6fa2574e58ea96dda1b8b4d7",
+ "chksum_sha256": "f6102ec8eb37947bb6892dbb4c1252c794ef52376540c9d8ce2b9753aa613685",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv3/tests/cli/rendered.yaml",
+ "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_ip_interface",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "21aabfd4dd00cabd0670087c3f46d8f3cf0dac51e013d14790546ec52612579c",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"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_facts_show_lldp_neighbors_detail",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "11544c73f3e88ab5384140abf1bedd0c2501f4ed13132ab56bd22a53909183b0",
"format": 1
},
{
- "name": "tests/integration/targets/ios_ospfv3/vars/main.yaml",
+ "name": "tests/unit/modules/network/ios/fixtures/ios_user_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5d9a640abfe561027b4afaadcf0306d9f52437a9ca11c8c6bd33aa39668cfc2b",
+ "chksum_sha256": "92081628d201c43cc40e2022f0ebac80f1ee5c1e78e19479d0b94780945a9657",
"format": 1
},
{
- "name": "tests/integration/targets/ios_hostname",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/ios/fixtures/ios_bgp_config.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e1448b74254646dea1644addbebf552013bc999c32b8a90f3141fadfd2e045c",
"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_virtual_switch",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a3c3bbfb2fdcb11e3f9721d7596800690969e51e7fc66ee2e5adae3b524f7177",
"format": 1
},
{
- "name": "tests/integration/targets/ios_hostname/tasks/main.yaml",
+ "name": "tests/unit/modules/network/ios/fixtures/ios_config_defaults.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9e463dfec9973774a7a87d75f8e492a829e08a207f7330616a23032087174429",
+ "chksum_sha256": "114e89387a2b3cb37c475ed22f287f83dd93bd16a51845286b27f8355d1ae0e5",
"format": 1
},
{
- "name": "tests/integration/targets/ios_hostname/tasks/cli.yaml",
+ "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": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
+ "chksum_sha256": "c8452a768d797ca829ff18314236a7275cf03a14f751c6f53c8b6711bc8a1d7f",
"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_prefix_lists.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "dc8a935708bb8e0b18381fb2cbd56f7bd389aa02255d0b5cbfe36a5b633b1bf1",
"format": 1
},
{
- "name": "tests/integration/targets/ios_hostname/meta/main.yaml",
+ "name": "tests/unit/modules/network/ios/test_ios_vrf.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
+ "chksum_sha256": "c8111b8105a96afc7e81b96808cda91611643dc49d0bdc5d5945d8a719b3c31e",
"format": 1
},
{
- "name": "tests/integration/targets/ios_hostname/defaults",
- "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/defaults/main.yaml",
+ "name": "tests/unit/modules/network/ios/ios_module.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "8a08cf8bab33ef88408880ffc6f8034be5e532945ca4f79d82b213426104876c",
"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_ospfv2.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4005f2c067beeb07ad752d35b4cf08c2641f28400006a638d63d5d758bec3a92",
"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_ping.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "518695ae331bd17c5635aca39e6af516e7a11473236412a9707eb12d5c7cb10f",
"format": 1
},
{
- "name": "tests/integration/targets/ios_hostname/tests/cli/_remove_config.yaml",
+ "name": "tests/unit/modules/network/ios/test_ios_ntp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "070883e8b78940daa953461fd32520d1bef4bdf4cf98664b3e82c7d0fae842b6",
+ "chksum_sha256": "784a79cd607c99396e7040a04dc142534261d39b04f5c3bfc5a8957a21879054",
"format": 1
},
{
- "name": "tests/integration/targets/ios_hostname/tests/cli/deleted.yaml",
+ "name": "tests/unit/modules/network/ios/test_ios_route_maps.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5b7529ae69029b3e22b4dec95b722595deebe267cb2f2735a85fd53a4c82bac8",
+ "chksum_sha256": "e520d761dedc8ab970293d2a725ee892518f7480bb2e97f0a3e2684460e443d4",
"format": 1
},
{
- "name": "tests/integration/targets/ios_hostname/tests/cli/gathered.yaml",
+ "name": "tests/unit/modules/network/ios/test_ios_evpn_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0a18425a89f8e85573729e8c29b8c45e491dd6814b221f9d42a0acf0960689e8",
+ "chksum_sha256": "b5bee6ad68b90176a467d9f7c0d348cf07e27b1995f085c64db9cbdb8a088929",
"format": 1
},
{
- "name": "tests/integration/targets/ios_hostname/tests/cli/empty_config.yaml",
+ "name": "tests/unit/modules/network/ios/test_ios_l3_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9313132bb4ea08fdfebbd76b6376eda299d1e61fef0b62973309894399193613",
+ "chksum_sha256": "d6716032d5b53020ccd29f08960acbd1ae9fe41a3c175339deb61a4b56f4dcf5",
"format": 1
},
{
- "name": "tests/integration/targets/ios_hostname/tests/cli/merged.yaml",
+ "name": "tests/unit/modules/network/ios/test_ios_acl_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8f0c8602b6863de3c09c0f29fb3fbe83fc0afa94d1358db7cb974628c616ebc4",
+ "chksum_sha256": "d39c73e566e5696e0f6c153aca54de2bee9085dff7156bde3fe128861d69aab2",
"format": 1
},
{
- "name": "tests/integration/targets/ios_hostname/tests/cli/_parsed.cfg",
+ "name": "tests/unit/modules/network/ios/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "334a751e168137370f8d5baaae2c017e63cd9870191a2476633bdb33f5aec915",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/ios_hostname/tests/cli/_populate_config.yaml",
+ "name": "tests/unit/modules/network/ios/test_ios_vxlan_vtep.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "909ad0ac69441e0c20405814bade15872ccc23e5b736632efcfd2880d863c6d7",
+ "chksum_sha256": "3a17f4db78edf67416a900d929d29f3384c5bf1c3df4ade474fb821703ffbe56",
"format": 1
},
{
- "name": "tests/integration/targets/ios_hostname/tests/cli/parsed.yaml",
+ "name": "tests/unit/modules/network/ios/test_ios_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e42472783ff99e3351a0a581b2ddcdaca689eb9cb8044af829d580473e17ac35",
+ "chksum_sha256": "41c9b2cac8e769dabfee1b1bb0605b20518dd345f91f1e3522287c5040cb6a78",
"format": 1
},
{
- "name": "tests/integration/targets/ios_hostname/tests/cli/rendered.yaml",
+ "name": "tests/unit/modules/network/ios/test_ios_bgp_address_family.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6cd846336af90bbf055ebce81f350f2187733b3580f5c227b07ad766e6c4bf9f",
+ "chksum_sha256": "6df2c02c70db2b5b94e8f1d57d17ca522e868e63726a5d440147898bafa6a90b",
"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_static_routes.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "cf947c20e29837dbf0e3a749e34e7039686d4fdc680dbedea6eaa84b9aff6394",
"format": 1
},
{
- "name": "tests/integration/targets/ios_hostname/vars/main.yaml",
+ "name": "tests/unit/modules/network/ios/test_ios_prefix_lists.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "febb64d561f5a456e89d59fb77210502df86daa4eca07014b96993b76d0bc5ba",
+ "chksum_sha256": "3b81d60b1aa8a42360235888b69fb75cf5c68a6232dba1df3d3e85726a85e01c",
"format": 1
},
{
- "name": "tests/integration/target-prefixes.network",
+ "name": "tests/unit/modules/network/ios/test_ios_facts.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "39053a91dac30879cf24512c4234e519681a1e88be8af8b18415df87fa4b9006",
+ "chksum_sha256": "1fda5506769c35be3d3d6db871c80807c9ed052c7d74701da7b1b9ee0c03058a",
"format": 1
},
{
- "name": "tests/integration/network-integration.cfg",
+ "name": "tests/unit/modules/network/ios/test_ios_ospf_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d67b11263a8f50b30bf43c7c2b4bdd8dc4f173f0b5dd22761311360dfbd56a1d",
+ "chksum_sha256": "4e00ef84b911124b4a4accd43340c7ecc9f23b59ae92801d4b1e44e14be30128",
"format": 1
},
{
- "name": "tests/.gitignore",
+ "name": "tests/unit/modules/network/ios/test_ios_l2_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b5726d3ec9335a09c124469eca039523847a6b0f08a083efaefd002b83326600",
+ "chksum_sha256": "789efea07aeca73695ac6318b8efa84135fd9bb01ab01287ad4f1caaaa2fac45",
"format": 1
},
{
- "name": "docs",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/ios/test_ios_lldp_global.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b0f11b5fdfc4778112633dbe23e79fcda458799d5a8fb31b2d8b2a79194aab60",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_vxlan_vtep_module.rst",
+ "name": "tests/unit/modules/network/ios/test_ios_config.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aa7c5614fed7ad1558e45d3d74eb3188cbe0958515593ce2c437d017406ee842",
+ "chksum_sha256": "53a89a15a20ad61a015b720b548f4cbd379e0d14bcdbe1d29b8a52816294be6b",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_lacp_interfaces_module.rst",
+ "name": "tests/unit/modules/network/ios/test_ios_user.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7bf92f7c407a17daa5b09137112c2d2764968e812b549b74cd7a8e8a45e255c5",
+ "chksum_sha256": "ec27ba6f7ff75fbb7089e3a8da2d02ef6ae88af4d46875802ae6a93db6d5f9c0",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_acl_interfaces_module.rst",
+ "name": "tests/unit/modules/network/ios/test_ios_logging_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cd05ed9845d1fc11685c746e9a9652f6bbd2670ec0a1d9ca39c5922ae46a64ba",
+ "chksum_sha256": "422ff5d9c0a8cc3ee7a6d94eb7bdfc035982af02dc1fcb1cbe970195e60e0490",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_acls_module.rst",
+ "name": "tests/unit/modules/network/ios/test_ios_vlans.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1aa35d1812bbb92f7b8ba18d3601df03851c682fde01e671f37ddc4c89ff7977",
+ "chksum_sha256": "617c226e92222fce590330664bc61fc898650e9f0a769a270cbb91aa7ced6ec3",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_bgp_module.rst",
+ "name": "tests/unit/modules/network/ios/test_ios_system.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3613c63ea42c85758bc78c1f2f5c970489a96411c41cc0ba7bf216994df8bdc1",
+ "chksum_sha256": "173cc0ea9b86c0a3672110ccf67e37bc9353519dfe556b22f969ee4a15e991cc",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_config_module.rst",
+ "name": "tests/unit/modules/network/ios/test_ios_bgp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3240939a84f27d689eacaf2ce4c89da3c03ee5a2a2739a127d196cb2691784b5",
+ "chksum_sha256": "f1d485573e2b2ea1ec54e44a085cb811501bb513294a6b8a497c9bdad942b0a7",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_static_routes_module.rst",
+ "name": "tests/unit/modules/network/ios/test_ios_acls.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "af3d82a1af37c9549d096096f205882d772383bb5c2535ad29efa8424cd413d4",
+ "chksum_sha256": "e659d95939b8e1e6dea3800b689a53b4df377ef1d4ddece5a738764eb5135b99",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_ospfv3_module.rst",
+ "name": "tests/unit/modules/network/ios/test_ios_ospfv3.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e832b1aef91fbd553177805605dd98df5f00f78c63be2a607b631d826e11e086",
+ "chksum_sha256": "d375c857fee27d16d1553b33bf5398356bb2563b924c4c1e30ce9b4da21289d9",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_ospfv2_module.rst",
+ "name": "tests/unit/modules/network/ios/test_ios_lacp_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1cda4e6568a61d285a6a2de4dffcfa476d33b65ab1b41565d981af4d3bee587b",
+ "chksum_sha256": "a3009a93056257774086045d682f2a979ae5d99b0e469c80b050d4bc4e10e662",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_bgp_address_family_module.rst",
+ "name": "tests/unit/modules/network/ios/test_ios_command.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ef1f1c1bce1238a8e1c30e174c361edb41440f8a4ca5892a51651d687e885b9a",
+ "chksum_sha256": "977da72df67bef7c5c2a6a0af6ce67292634f3f3b76bc4533bb4f9684302ac31",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_l3_interfaces_module.rst",
+ "name": "tests/unit/modules/network/ios/test_ios_banner.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "51ba7650c179e3da62a417f92608431f7d46cf9fb6206772ecd3d5f703d856ee",
+ "chksum_sha256": "82953a03a9f12f373907684cb7fd0838e83e61619ea7861e8664ba2608b52ef9",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_user_module.rst",
+ "name": "tests/unit/modules/utils.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3e0e3e1d9ad718db52097b1754064e310a3a434709203a7905f6e1a72fb71722",
+ "chksum_sha256": "414c272e9a403bb6009460ec9502c5acfaa9c80b2159c742f6cb2e225938be3e",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_facts_module.rst",
+ "name": "tests/unit/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "827c48cf4385cff2d361bfc60df1d6678cbb046f3ed39ff42426057448cdba1a",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_logging_global_module.rst",
+ "name": "tests/unit/requirements.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6ec4443978907eee51ca4b9f1dc2ffe6534b3c3479e7555aacfdb82895d45594",
+ "chksum_sha256": "49ba996dc4735c3463e9af561344346dfae14bcc1a68096ce78364b377f0df1f",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_ntp_global_module.rst",
+ "name": "tests/.gitignore",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aac96eeacf4a0b344b25dca00c91f780a8b9233e9ceed3a71e0fbd339739a1b5",
+ "chksum_sha256": "b5726d3ec9335a09c124469eca039523847a6b0f08a083efaefd002b83326600",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_vlans_module.rst",
+ "name": "codecov.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "913875bef455036cf1ee302748251aa802719e0ef415a6599df62f4afaaf843d",
+ "chksum_sha256": "4aa7e485dd4db6f8a55b046088c745def2b3145d9499ccda4e9a3336467dcea2",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_snmp_server_module.rst",
+ "name": "tox-ansible.ini",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fd2156ed69609eb4271746660a9b338a4a1b2e5d7fbf9533ac350f1a5d84a407",
+ "chksum_sha256": "da802bfc2dc2671ca7caba028e8a635b459b131874041d119b698717333a7a49",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_prefix_lists_module.rst",
+ "name": ".gitignore",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c6d0a0fe60c76d6c91776efcc420942c78f5ccbdc3e0f413e4ca3e7ead839506",
+ "chksum_sha256": "179a6d0780422c32653a71b9395a3ecb8b3859346ffa3e38ca3c8d90f8063fd2",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_lag_interfaces_module.rst",
+ "name": "cspell.config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "97da1f7af33eae5e26a4537ddd3cbf0fc4fd811da0609dea6db3af82af8f53bd",
+ "chksum_sha256": "e1079e6d02ed34033bf83913e7b66ff7bd042e6d8ed4c113aea31123f557deb5",
"format": 1
},
{
- "name": "docs/__init__.py",
+ "name": "LICENSE",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_evpn_evi_module.rst",
+ "name": "mypy.ini",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "10749ddf85943d2fe186d9ba9bf1fef8326bd267408ee21e9497e7b751f09e9a",
+ "chksum_sha256": "5cc01a9c3e2a80b779ca004be5e4df814eebd494db650387b1bde98267a0b317",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_linkagg_module.rst",
+ "name": ".flake8",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b123e1380c285f81d808170a79e2e82972af3c1b2e438cfb698a5d373c6be3cf",
+ "chksum_sha256": "7214cfc0a1b4e8b89190e868962196874d9396503f77e47d7dfa342bd29b2a74",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_service_module.rst",
+ "name": "CHANGELOG.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "339ca54b72e461c16788f0a63bdf71786b9a45a4d848251916811ecfe9254a4b",
+ "chksum_sha256": "22c466a51fb52639d7668078c84f1bb384fcd9c4a8b2522999f698edef8d061c",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_route_maps_module.rst",
+ "name": "requirements.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "af30dade8c6261c751142d983650af7a4c8c2e142f2fceaaf3bb604e88d9beb4",
+ "chksum_sha256": "47d9fe78273fd64c750e78a317b1a59a6f87ebb93d8d4cf9ae6d98a0f2fc9f9e",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_ntp_module.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0ddbf43a41134d7100e58365a10c02a60674a1b37152d4bb07a2dd42b2e54d97",
+ "name": "docs",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/cisco.ios.ios_lldp_module.rst",
+ "name": "docs/cisco.ios.ios_config_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f499f07239788d95c91a8413b7324e5370a88992e41ded149aeb130412e4f3b5",
+ "chksum_sha256": "3240939a84f27d689eacaf2ce4c89da3c03ee5a2a2739a127d196cb2691784b5",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_interfaces_module.rst",
+ "name": "docs/cisco.ios.ios_command_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f2081011b7cdb08c36dea3476b69ae849614273cd5e800e374edc9123fc04d71",
+ "chksum_sha256": "8b4546a6a039b29fb5919487fe5b8339d5cb34464e23cf1b07b2d82baf55bbed",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_system_module.rst",
+ "name": "docs/cisco.ios.ios_linkagg_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2d9c9ff70523a1f9db7b5d860607252a06b799c12ea8e001944075338f0c32c7",
+ "chksum_sha256": "b123e1380c285f81d808170a79e2e82972af3c1b2e438cfb698a5d373c6be3cf",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_vrf_module.rst",
+ "name": "docs/cisco.ios.ios_ping_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6ffdd6a11d84d30baee6bf9a10859470627b4ba0521d3d3eb85def9758078a4d",
+ "chksum_sha256": "2cc3e7247773d272c66efe02e9791b27bd7ae28afb28a26d597d80741042467f",
"format": 1
},
{
@@ -10109,269 +9801,255 @@
"format": 1
},
{
- "name": "docs/cisco.ios.ios_l2_interfaces_module.rst",
+ "name": "docs/cisco.ios.ios_lldp_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0a4f000d638f6ee2223d344c7b3c260cfcead1d04793e33c84da4cbbd30b1358",
+ "chksum_sha256": "f499f07239788d95c91a8413b7324e5370a88992e41ded149aeb130412e4f3b5",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_lldp_global_module.rst",
+ "name": "docs/cisco.ios.ios_logging_global_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "12967941c3851fa6f982162e20ce5a0a3c4eeec8f948b367b8ba680af7c50202",
+ "chksum_sha256": "6ec4443978907eee51ca4b9f1dc2ffe6534b3c3479e7555aacfdb82895d45594",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_ping_module.rst",
+ "name": "docs/cisco.ios.ios_ospfv3_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2cc3e7247773d272c66efe02e9791b27bd7ae28afb28a26d597d80741042467f",
+ "chksum_sha256": "e832b1aef91fbd553177805605dd98df5f00f78c63be2a607b631d826e11e086",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_bgp_global_module.rst",
+ "name": "docs/cisco.ios.ios_l3_interfaces_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "89a09f8b1c1900b6dba84033c17963299db060d02fc6b79b1c252c5605765aea",
+ "chksum_sha256": "bc4a295c5de44164ad073994aea4eb7a7b38b51e503848e11312e354fe567a7d",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_ospf_interfaces_module.rst",
+ "name": "docs/cisco.ios.ios_vxlan_vtep_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "736695017ca633989a5ce8d1e661fee1cf6d545cf98f975a8ecc42897e352dcb",
+ "chksum_sha256": "fe7e11d2742a5c657e48ca08d56b4eee718e65518eae65f3df640c611275eadd",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_banner_module.rst",
+ "name": "docs/cisco.ios.ios_ospfv2_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "347f291cfde6d03ea4e5d58a4e81b565cb29450c980cb453d41807836ec60c1f",
+ "chksum_sha256": "1cda4e6568a61d285a6a2de4dffcfa476d33b65ab1b41565d981af4d3bee587b",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_hostname_module.rst",
+ "name": "docs/cisco.ios.ios_vlans_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c17247e2b97de9179680bdd136c547b0b8a4b15d8f6faf22d79543f6e9800246",
+ "chksum_sha256": "1929d51d16b155395fe24200115859d3107378a420162bf57889a9931d1f1861",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_evpn_global_module.rst",
+ "name": "docs/cisco.ios.ios_facts_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ea291a372120106d38f214b7e0585cc40768c3459232a46d717042872c3ed18d",
+ "chksum_sha256": "827c48cf4385cff2d361bfc60df1d6678cbb046f3ed39ff42426057448cdba1a",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_command_module.rst",
+ "name": "docs/cisco.ios.ios_route_maps_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8b4546a6a039b29fb5919487fe5b8339d5cb34464e23cf1b07b2d82baf55bbed",
+ "chksum_sha256": "af30dade8c6261c751142d983650af7a4c8c2e142f2fceaaf3bb604e88d9beb4",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_cliconf.rst",
+ "name": "docs/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a17502a2fd8ed08d762ce2e747b95c2b5dfe106d69afbaf97b8e141ac0597668",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "docs/cisco.ios.ios_lldp_interfaces_module.rst",
+ "name": "docs/cisco.ios.ios_user_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "619db6d298ab8b20cac142e84d3b24258ae70d3b5c092605a4c6ae2fa7d49e12",
+ "chksum_sha256": "f96397bba27708b066076c0a259766a30ffa86a6711ff56f35201477bec8b28b",
"format": 1
},
{
- "name": ".isort.cfg",
+ "name": "docs/cisco.ios.ios_bgp_address_family_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f287de31c528e7d37475770952855fb25ec053d0bcaedd577091d13807b4c5dc",
+ "chksum_sha256": "fd627997ec9ae45c6c26bde87fde2ac21ce4b0b47bf5f2431037e95751dd48b1",
"format": 1
},
{
- "name": "pyproject.toml",
+ "name": "docs/cisco.ios.ios_cliconf.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1cb6a45dfa2625123890b93ad7fdc156b063c16e8ae6dba11511a1d1986b0fcc",
+ "chksum_sha256": "a17502a2fd8ed08d762ce2e747b95c2b5dfe106d69afbaf97b8e141ac0597668",
"format": 1
},
{
- "name": ".flake8",
+ "name": "docs/cisco.ios.ios_static_routes_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c3619890addbe81b337523c7d31461089055b267a3665f5f5c93d47fa0dbee96",
+ "chksum_sha256": "af3d82a1af37c9549d096096f205882d772383bb5c2535ad29efa8424cd413d4",
"format": 1
},
{
- "name": ".darglint",
+ "name": "docs/cisco.ios.ios_lag_interfaces_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "954a7045c6fa17fddfe80995f7f8251efb6df1a2b05eaf479afca6bbc6dfd4f2",
+ "chksum_sha256": "97da1f7af33eae5e26a4537ddd3cbf0fc4fd811da0609dea6db3af82af8f53bd",
"format": 1
},
{
- "name": "bindep.txt",
+ "name": "docs/cisco.ios.ios_banner_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "80645079eb025b3a905b4775ac545d080a3d7d35d537c31e04f7197c94315ab5",
- "format": 1
- },
- {
- "name": "changelogs",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "changelogs/fragments",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "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.
<!--start requires_ansible-->
## 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
<div>The remarks/description of the ACL.</div>
<div>The remarks attribute used within an ace with or without a sequence number will produce remarks that are pushed before the ace entry.</div>
<div>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.</div>
+ <div>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.</div>
+ <div>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.</div>
</td>
</tr>
<tr>
@@ -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
@@ -1467,6 +1467,88 @@ Parameters
<td class="elbow-placeholder"></td>
<td colspan="5">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>default</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configure BGP defaults</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="4">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>ipv4_unicast</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>no</li>
+ <li><div style="color: blue"><b>yes</b>&nbsp;&larr;</div></li>
+ </ul>
+ </td>
+ <td>
+ <div>Activate ipv4-unicast for a peer by default</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="4">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>route_target</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Control behavior based on Route-Target attributes</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="3">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>filter</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>no</li>
+ <li><div style="color: blue"><b>yes</b>&nbsp;&larr;</div></li>
+ </ul>
+ </td>
+ <td>
+ <div>Control automatic VPN Route-Target filtering</div>
+ </td>
+ </tr>
+
+
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="5">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>deterministic_med</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -9269,7 +9351,6 @@ Parameters
</td>
<td>
<div>Enter template command mode</div>
- <div>This option is DEPRECATED as is not valid within the scope of module, this attribute will be removed after 2024-06-01.</div>
</td>
</tr>
<tr>
@@ -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
-
- <table border=0 cellpadding=0 class="documentation-table">
- <tr>
- <th colspan="4">Parameter</th>
- <th>Choices/<font color="blue">Defaults</font></th>
- <th width="100%">Comments</th>
- </tr>
- <tr>
- <td colspan="4">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>config</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">dictionary</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Specifies the BGP related configuration.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="3">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>address_family</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">list</span>
- / <span style="color: purple">elements=dictionary</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Specifies BGP address family related configurations.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>afi</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- / <span style="color: red">required</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>ipv4</li>
- <li>ipv6</li>
- </ul>
- </td>
- <td>
- <div>Type of address family to configure.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>auto_summary</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">boolean</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li>yes</li>
- </ul>
- </td>
- <td>
- <div>Enable/disable automatic network number summarization.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>neighbors</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">list</span>
- / <span style="color: purple">elements=dictionary</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Specifies BGP neighbor related configurations in Address Family configuration mode.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>activate</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">boolean</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li>yes</li>
- </ul>
- </td>
- <td>
- <div>Enable the Address Family for this Neighbor.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>advertisement_interval</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Minimum interval between sending BGP routing updates for this neighbor.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>maximum_prefix</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Maximum number of prefixes to accept from this peer.</div>
- <div>The range is from 1 to 2147483647.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>neighbor</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- / <span style="color: red">required</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Neighbor router address.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>next_hop_self</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">boolean</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li>yes</li>
- </ul>
- </td>
- <td>
- <div>Enable/disable the next hop calculation for this neighbor.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>next_hop_unchanged</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">boolean</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li>yes</li>
- </ul>
- </td>
- <td>
- <div>Propagate next hop unchanged for iBGP paths to this neighbor.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>prefix_list_in</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Name of ip prefix-list to apply to incoming prefixes.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>prefix_list_out</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Name of ip prefix-list to apply to outgoing prefixes.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>remove_private_as</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">boolean</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li>yes</li>
- </ul>
- </td>
- <td>
- <div>Remove the private AS number from outbound updates.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>route_reflector_client</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">boolean</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li>yes</li>
- </ul>
- </td>
- <td>
- <div>Specify a neighbor as a route reflector client.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>route_server_client</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">boolean</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li>yes</li>
- </ul>
- </td>
- <td>
- <div>Specify a neighbor as a route server client.</div>
- </td>
- </tr>
-
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>networks</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">list</span>
- / <span style="color: purple">elements=dictionary</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Specify Networks to announce via BGP.</div>
- <div>For operation replace, this option is mutually exclusive with root level networks option.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>masklen</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Subnet mask length for the Network to announce(e.g, 8, 16, 24, etc.).</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>prefix</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- / <span style="color: red">required</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Network ID to announce via BGP.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>route_map</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Route map to modify the attributes.</div>
- </td>
- </tr>
-
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>redistribute</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">list</span>
- / <span style="color: purple">elements=dictionary</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Specifies the redistribute information from another routing protocol.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>id</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Identifier for the routing protocol for configuring redistribute information.</div>
- <div>Valid for protocols &#x27;ospf&#x27;, &#x27;ospfv3&#x27; and &#x27;eigrp&#x27;.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>metric</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Specifies the metric for redistributed routes.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>protocol</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- / <span style="color: red">required</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>ospf</li>
- <li>ospfv3</li>
- <li>eigrp</li>
- <li>isis</li>
- <li>static</li>
- <li>connected</li>
- <li>odr</li>
- <li>lisp</li>
- <li>mobile</li>
- <li>rip</li>
- </ul>
- </td>
- <td>
- <div>Specifies the protocol for configuring redistribute information.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>route_map</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Specifies the route map reference.</div>
- </td>
- </tr>
-
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>safi</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>flowspec</li>
- <li><div style="color: blue"><b>unicast</b>&nbsp;&larr;</div></li>
- <li>multicast</li>
- <li>labeled-unicast</li>
- </ul>
- </td>
- <td>
- <div>Specifies the type of cast for the address family.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>synchronization</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">boolean</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li>yes</li>
- </ul>
- </td>
- <td>
- <div>Enable/disable IGP synchronization.</div>
- </td>
- </tr>
-
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="3">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>bgp_as</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- / <span style="color: red">required</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Specifies the BGP Autonomous System (AS) number to configure on the device.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="3">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>log_neighbor_changes</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">boolean</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li>yes</li>
- </ul>
- </td>
- <td>
- <div>Enable/disable logging neighbor up/down and reset reason.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="3">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>neighbors</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">list</span>
- / <span style="color: purple">elements=dictionary</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Specifies BGP neighbor related configurations.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>description</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Neighbor specific description.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>ebgp_multihop</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Specifies the maximum hop count for EBGP neighbors not on directly connected networks.</div>
- <div>The range is from 1 to 255.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>enabled</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">boolean</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li>yes</li>
- </ul>
- </td>
- <td>
- <div>Administratively shutdown or enable a neighbor.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>local_as</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>The local AS number for the neighbor.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>neighbor</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- / <span style="color: red">required</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Neighbor router address.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>password</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Password to authenticate the BGP peer connection.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>peer_group</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Name of the peer group that the neighbor is a member of.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>remote_as</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- / <span style="color: red">required</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Remote AS of the BGP neighbor to configure.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>timers</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">dictionary</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Specifies BGP neighbor timer related configurations.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>holdtime</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- / <span style="color: red">required</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Interval (in seconds) after not receiving a keepalive message that IOS declares a peer dead.</div>
- <div>The range is from 0 to 65535.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>keepalive</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- / <span style="color: red">required</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Frequency (in seconds) with which the device sends keepalive messages to its peer.</div>
- <div>The range is from 0 to 65535.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>min_neighbor_holdtime</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Interval (in seconds) specifying the minimum acceptable hold-time from a BGP neighbor.</div>
- <div>The minimum acceptable hold-time must be less than, or equal to, the interval specified in the holdtime argument.</div>
- <div>The range is from 0 to 65535.</div>
- </td>
- </tr>
-
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>update_source</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Source of the routing updates.</div>
- </td>
- </tr>
-
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="3">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>networks</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">list</span>
- / <span style="color: purple">elements=dictionary</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Specify Networks to announce via BGP.</div>
- <div>For operation replace, this option is mutually exclusive with networks option under address_family.</div>
- <div>For operation replace, if the device already has an address family activated, this option is not allowed.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>masklen</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Subnet mask length for the Network to announce(e.g, 8, 16, 24, etc.).</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>prefix</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- / <span style="color: red">required</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Network ID to announce via BGP.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td class="elbow-placeholder"></td>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>route_map</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Route map to modify the attributes.</div>
- </td>
- </tr>
-
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="3">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>router_id</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <b>Default:</b><br/><div style="color: blue">null</div>
- </td>
- <td>
- <div>Configures the BGP routing process router-id value.</div>
- </td>
- </tr>
-
- <tr>
- <td colspan="4">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>operation</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li><div style="color: blue"><b>merge</b>&nbsp;&larr;</div></li>
- <li>replace</li>
- <li>override</li>
- <li>delete</li>
- </ul>
- </td>
- <td>
- <div>Specifies the operation to be performed on the BGP process configured on the device.</div>
- <div>In case of merge, the input configuration will be merged with the existing BGP configuration on the device.</div>
- <div>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.</div>
- <div>In case of override, all the existing BGP configuration will be removed from the device and replaced with the input configuration.</div>
- <div>In case of delete the existing BGP configuration will be removed from the device.</div>
- </td>
- </tr>
- </table>
- <br/>
-
-
-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 <https://docs.ansible.com/ansible/latest/reference_appendices/common_return_values.html#common-return-values>`_, the following are the fields unique to this module:
-
-.. raw:: html
-
- <table border=0 cellpadding=0 class="documentation-table">
- <tr>
- <th colspan="1">Key</th>
- <th>Returned</th>
- <th width="100%">Description</th>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="return-"></div>
- <b>commands</b>
- <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
- <div style="font-size: small">
- <span style="color: purple">list</span>
- </div>
- </td>
- <td>always</td>
- <td>
- <div>The list of configuration mode commands to send to the device</div>
- <br/>
- <div style="font-size: smaller"><b>Sample:</b></div>
- <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">[&#x27;router bgp 64496&#x27;, &#x27;bgp router-id 192.0.2.1&#x27;, &#x27;bgp log-neighbor-changes&#x27;, &#x27;neighbor 203.0.113.5 remote-as 64511&#x27;, &#x27;neighbor 203.0.113.5 timers 300 360 360&#x27;, &#x27;neighbor 198.51.100.2 remote-as 64498&#x27;, &#x27;network 198.51.100.0 route-map RMAP_1&#x27;, &#x27;network 192.0.2.0 mask 255.255.254.0&#x27;, &#x27;address-family ipv4&#x27;, &#x27;redistribute ospf 223 metric 70&#x27;, &#x27;exit-address-family&#x27;]</div>
- </td>
- </tr>
- </table>
- <br/><br/>
-
-
-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
@@ -53,6 +53,26 @@ Parameters
<td class="elbow-placeholder"></td>
<td colspan="3">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>autostate</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>no</li>
+ <li>yes</li>
+ </ul>
+ </td>
+ <td>
+ <div>Enable autostate determination for VLAN.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="3">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>ipv4</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -234,6 +254,86 @@ Parameters
<div>Configures the IP address as a secondary address.</div>
</td>
</tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>source_interface</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Enable IP processing without an explicit address</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>name</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Interface name</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>point_to_point</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>no</li>
+ <li>yes</li>
+ </ul>
+ </td>
+ <td>
+ <div>Enable point-to-point connection</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>poll</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>no</li>
+ <li>yes</li>
+ </ul>
+ </td>
+ <td>
+ <div>Enable IP connected host polling</div>
+ </td>
+ </tr>
+
<tr>
<td class="elbow-placeholder"></td>
@@ -441,6 +541,27 @@ Parameters
<td class="elbow-placeholder"></td>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>enable</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>no</li>
+ <li>yes</li>
+ </ul>
+ </td>
+ <td>
+ <div>Enable IPv6 on interface</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>eui</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -567,6 +688,22 @@ Parameters
<td class="elbow-placeholder"></td>
<td colspan="3">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>mac_address</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Manually set interface MAC address.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="3">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>name</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -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
-
- <table border=0 cellpadding=0 class="documentation-table">
- <tr>
- <th colspan="1">Parameter</th>
- <th>Choices/<font color="blue">Defaults</font></th>
- <th width="100%">Comments</th>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>acl</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>ACL for peer/server access restricition.</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>auth</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">boolean</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li><div style="color: blue"><b>no</b>&nbsp;&larr;</div></li>
- <li>yes</li>
- </ul>
- </td>
- <td>
- <div>Enable NTP authentication. Data type boolean.</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>auth_key</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>md5 NTP authentication key of tye 7.</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>key_id</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>auth_key id. Data type string</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>logging</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">boolean</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li><div style="color: blue"><b>no</b>&nbsp;&larr;</div></li>
- <li>yes</li>
- </ul>
- </td>
- <td>
- <div>Enable NTP logs. Data type boolean.</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>server</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Network address of NTP server.</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>source_int</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Source interface for NTP packets.</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>state</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li><div style="color: blue"><b>present</b>&nbsp;&larr;</div></li>
- <li>absent</li>
- </ul>
- </td>
- <td>
- <div>Manage the state of the resource.</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>vrf</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>VRF configuration for NTP servers</div>
- </td>
- </tr>
- </table>
- <br/>
-
-
-Notes
------
-
-.. note::
- - For more information on using Ansible to manage network devices see the :ref:`Ansible Network Guide <network_guide>`
- - For more information on using Ansible to manage Cisco devices see the `Cisco integration page <https://www.ansible.com/integrations/networks/cisco>`_.
-
-
-
-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 <https://docs.ansible.com/ansible/latest/reference_appendices/common_return_values.html#common-return-values>`_, the following are the fields unique to this module:
-
-.. raw:: html
-
- <table border=0 cellpadding=0 class="documentation-table">
- <tr>
- <th colspan="1">Key</th>
- <th>Returned</th>
- <th width="100%">Description</th>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="return-"></div>
- <b>commands</b>
- <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
- <div style="font-size: small">
- <span style="color: purple">list</span>
- </div>
- </td>
- <td>always</td>
- <td>
- <div>command sent to the device</div>
- <br/>
- <div style="font-size: smaller"><b>Sample:</b></div>
- <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">[&#x27;no ntp server 10.0.255.10&#x27;, &#x27;no ntp source Loopback0&#x27;]</div>
- </td>
- </tr>
- </table>
- <br/><br/>
-
-
-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
@@ -273,25 +273,6 @@ Parameters
<tr>
<td colspan="3">
<div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>configuration</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">boolean</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li>yes</li>
- </ul>
- </td>
- <td>
- <div>When set to true, deals with vlan configuration CLIs</div>
- </td>
- </tr>
- <tr>
- <td colspan="3">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>running_config</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -323,6 +304,7 @@ Parameters
<li>deleted</li>
<li>rendered</li>
<li>gathered</li>
+ <li>purged</li>
<li>parsed</li>
</ul>
</td>
@@ -331,7 +313,7 @@ Parameters
<div>The states <em>rendered</em>, <em>gathered</em> and <em>parsed</em> does not perform any change on the device.</div>
<div>The state <em>rendered</em> will transform the configuration in <code>config</code> option to platform specific CLI commands which will be returned in the <em>rendered</em> key within the result. For state <em>rendered</em> active connection to remote host is not required.</div>
<div>The state <em>gathered</em> 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 <em>gathered</em> key within the result.</div>
- <div>The state <em>parsed</em> reads the configuration from <code>running_config</code> option and transforms it into JSON format as per the resource module parameters and the value is returned in the <em>parsed</em> key within the result. The value of <code>running_config</code> option should be the same format as the output of command <em>show running-config | include ip route|ipv6 route</em> executed on device. For state <em>parsed</em> active connection to remote host is not required.</div>
+ <div>The state <em>parsed</em> reads the configuration from <code>running_config</code> option and transforms it into JSON format as per the resource module parameters and the value is returned in the <em>parsed</em> key within the result. The value of <code>running_config</code> option should be the same format as the output of commands <em>show vlan</em> and <em>show running-config | sec ^vlan configuration .+</em> executed on device. For state <em>parsed</em> active connection to remote host is not required.</div>
</td>
</tr>
</table>
@@ -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 <https://docs.ansible.com/ansible/late
<b>after</b>
<a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
<div style="font-size: small">
- <span style="color: purple">list</span>
+ <span style="color: purple">dictionary</span>
</div>
</td>
<td>when changed</td>
<td>
- <div>The configuration as structured data after module completion.</div>
+ <div>The resulting configuration after module execution.</div>
<br/>
<div style="font-size: smaller"><b>Sample:</b></div>
- <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">The configuration returned will always be in the same format
- of the parameters above.</div>
+ <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">This output will always be in the same format as the module argspec.</div>
</td>
</tr>
<tr>
@@ -1158,16 +1255,15 @@ Common return values are documented `here <https://docs.ansible.com/ansible/late
<b>before</b>
<a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
<div style="font-size: small">
- <span style="color: purple">list</span>
+ <span style="color: purple">dictionary</span>
</div>
</td>
- <td>always</td>
+ <td>when <em>state</em> is <code>merged</code>, <code>replaced</code>, <code>overridden</code>, <code>deleted</code> or <code>purged</code></td>
<td>
- <div>The configuration as structured data prior to module invocation.</div>
+ <div>The configuration prior to the module execution.</div>
<br/>
<div style="font-size: smaller"><b>Sample:</b></div>
- <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">The configuration returned will always be in the same format
- of the parameters above.</div>
+ <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">This output will always be in the same format as the module argspec.</div>
</td>
</tr>
<tr>
@@ -1179,12 +1275,63 @@ Common return values are documented `here <https://docs.ansible.com/ansible/late
<span style="color: purple">list</span>
</div>
</td>
- <td>always</td>
+ <td>when <em>state</em> is <code>merged</code>, <code>replaced</code>, <code>overridden</code>, <code>deleted</code> or <code>purged</code></td>
<td>
<div>The set of commands pushed to the remote device.</div>
<br/>
<div style="font-size: smaller"><b>Sample:</b></div>
- <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">[&#x27;vlan 20&#x27;, &#x27;name vlan_20&#x27;, &#x27;mtu 600&#x27;, &#x27;remote-span&#x27;]</div>
+ <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">[&#x27;vlan configuration 202&#x27;, &#x27;state active&#x27;, &#x27;remote-span&#x27;]</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-"></div>
+ <b>gathered</b>
+ <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ </div>
+ </td>
+ <td>when <em>state</em> is <code>gathered</code></td>
+ <td>
+ <div>Facts about the network resource gathered from the remote device as structured data.</div>
+ <br/>
+ <div style="font-size: smaller"><b>Sample:</b></div>
+ <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">This output will always be in the same format as the module argspec.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-"></div>
+ <b>parsed</b>
+ <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ </div>
+ </td>
+ <td>when <em>state</em> is <code>parsed</code></td>
+ <td>
+ <div>The device native config provided in <em>running_config</em> option parsed into structured data as per module argspec.</div>
+ <br/>
+ <div style="font-size: smaller"><b>Sample:</b></div>
+ <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">This output will always be in the same format as the module argspec.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-"></div>
+ <b>rendered</b>
+ <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ </div>
+ </td>
+ <td>when <em>state</em> is <code>rendered</code></td>
+ <td>
+ <div>The provided configuration in the task rendered in device-native format (offline).</div>
+ <br/>
+ <div style="font-size: smaller"><b>Sample:</b></div>
+ <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">[&#x27;vlan configuration 202&#x27;, &#x27;member evpn-instance 202 vni 10202&#x27;, &#x27;vlan 200&#x27;]</div>
</td>
</tr>
</table>
@@ -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
<table border=0 cellpadding=0 class="documentation-table">
<tr>
- <th colspan="1">Parameter</th>
+ <th colspan="5">Parameter</th>
<th>Choices/<font color="blue">Defaults</font></th>
<th width="100%">Comments</th>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="5">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>address_family</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -49,9 +49,303 @@ Parameters
<div>The list of address families with MDT parameters to be configured on the remote IOS device.</div>
</td>
</tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="4">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>afi</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>ipv4</li>
+ <li>ipv6</li>
+ </ul>
+ </td>
+ <td>
+ <div>Address family identifier.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="4">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>mdt</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>MDT parameters.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="3">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>auto_discovery</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Auto-discovery parameters.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>vxlan</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Vxlan parameters.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>enable</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>no</li>
+ <li>yes</li>
+ </ul>
+ </td>
+ <td>
+ <div>Enable VXLAN.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>inter_as</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>no</li>
+ <li>yes</li>
+ </ul>
+ </td>
+ <td>
+ <div>Enable inter-as.</div>
+ </td>
+ </tr>
+
+
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="3">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>data</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Parameters for data option.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>threshold</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Threshold value.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>vxlan_mcast_group</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>VXLAN multicast group value.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="3">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>default</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Parameters for default option.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>vxlan_mcast_group</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>VXLAN multicast group value.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="3">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>overlay</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Parameters for overlay option.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>use_bgp</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>parameters for BGP option.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>enable</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>no</li>
+ <li>yes</li>
+ </ul>
+ </td>
+ <td>
+ <div>Enable use BGP.</div>
+ </td>
+ </tr>
<tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
<td colspan="1">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>spt_only</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>no</li>
+ <li>yes</li>
+ </ul>
+ </td>
+ <td>
+ <div>Enable SPT only.</div>
+ </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="5">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>associated_interfaces</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -66,7 +360,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="5">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>delay</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -82,7 +376,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="5">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>description</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -97,7 +391,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="5">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>interfaces</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -113,7 +407,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="5">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>name</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -128,7 +422,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="5">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>purge</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -147,7 +441,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="5">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>rd</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -162,7 +456,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="5">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>route_both</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -178,7 +472,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="5">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>route_both_ipv4</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -194,7 +488,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="5">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>route_both_ipv6</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -210,7 +504,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="5">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>route_export</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -226,7 +520,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="5">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>route_export_ipv4</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -242,7 +536,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="5">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>route_export_ipv6</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -258,7 +552,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="5">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>route_import</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -274,7 +568,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="5">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>route_import_ipv4</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -290,7 +584,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="5">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>route_import_ipv6</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -306,7 +600,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="5">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>state</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -325,7 +619,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="5">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>vrfs</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
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 <https://galaxy.ansible.com/ui/repo/published/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 <https://docs.ansible.com/ansible/latest/network/getting_started/network_connection_options.html#timeout-options>`_
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<vlan>\d+)$")
- re2 = re.compile(r"^member +(evpn\-instance +(?P<evi>\d+) )?vni (?P<vni>[\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/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/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<order>^\d+)\s*remark\s(?P<remarks>.+)$""",
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<sequence>\d+))?
+ r"""^\s*((?P<sequence>\d+))?
(\s(?P<grant>deny|permit))
(\s+(?P<address>((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<wildcard>((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<sequence>\d+))?
- (\s*sequence\s(?P<sequence_ipv6>\d+))?
- (\s*(?P<grant>deny|permit))
+ r"""^\s*((?P<sequence>\d+))?
+ (\ssequence\s(?P<sequence_ipv6>\d+))?
+ (\s(?P<grant>deny|permit))
(\sevaluate\s(?P<evaluate>\S+))?
- (\s(?P<protocol_num>\d+))?
+ (\s(?P<protocol_num>\d+)\s)?
(\s*(?P<protocol>ahp|eigrp|esp|gre|icmp|igmp|ipinip|ipv6|ip|nos|ospf|pcp|pim|sctp|tcp|ip|udp))?
- ((\s(?P<source_any>any))|
- (\sobject-group\s(?P<source_obj_grp>\S+))|
- (\shost\s(?P<source_host>\S+))|
- (\s(?P<ipv6_source_address>\S+/\d+))|
- (\s(?P<source_address>(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})\s\S+)))?
+ ((\s*(?P<source_any>any))|
+ (\s*object-group\s(?P<source_obj_grp>\S+))|
+ (\s*host\s(?P<source_host>\S+))|
+ (\s*(?P<ipv6_source_address>\S+/\d+))|
+ (\s*(?P<source_address>(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})\s\S+)))?
(\seq\s(?P<seq>(\S+|\d+)))?
(\sgt\s(?P<sgt>(\S+|\d+)))?
(\slt\s(?P<slt>(\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",
@@ -476,6 +476,36 @@ class Bgp_globalTemplate(NetworkTemplate):
},
},
{
+ "name": "template.peer_policy",
+ "getval": re.compile(
+ r"""
+ \stemplate\speer-policy
+ (\s(?P<peer_policy>\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<peer_session>\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(
r"""
@@ -745,6 +775,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),
"setval": "bgp deterministic-med",
@@ -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
@@ -66,6 +66,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<mac_address>\S+))
+ $""",
+ re.VERBOSE,
+ ),
+ "setval": "mac-address {{ mac_address }}",
+ "result": {"{{ name }}": {"mac_address": "{{ mac_address }}"}},
+ },
+ {
"name": "name",
"getval": re.compile(
r"""^interface
@@ -146,6 +163,33 @@ class L3_interfacesTemplate(NetworkTemplate):
},
},
{
+ "name": "ipv4.source_interface",
+ "getval": re.compile(
+ r"""\s+ip\sunnumbered
+ (\s(?P<name>\S+))
+ (\s(?P<poll>poll))?
+ (\s(?P<point_to_point>point-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(
r"""\s+ipv6\saddress
@@ -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<read>\S+))?
(\swrite\s(?P<write>\S+))?
(\snotify\s(?P<notify>\S+))?
- (\saccess\s(?P<acl_v4>\S+))?
- (\saccess\sipv6\s(?P<acl_v6>\S+))?
+ (\saccess(\sipv6\s(?P<acl_v6>\S+))?(\s(?P<acl_v4>\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<udp_port>\d+))?
(\s(?P<version>v1|v3|v2c))?
(\s(?P<version_option>encrypted))?
- (\saccess\sipv6\s(?P<acl_v6>\S+))?
- (\saccess\s(?P<acl_v4>\S+|\d+))?
+ (\saccess(\sipv6\s(?P<acl_v6>\S+))?(\s(?P<acl_v4>\S+|\d+))?)?
(\svrf\s(?P<vrf>\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<vlan_id>\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<inst_vlan_id>\d+))?
+ (\svni\s(?P<vni>\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 <ipv4 address>/<mask>, got invalid format {0}".format(value),
+ msg="address format is <ipv4 address>/<mask>, 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 <ipv6 address>/<mask>, 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 <http://www.gnu.org/licenses/>.
-#
-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 <http://www.gnu.org/licenses/>.
-#
-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.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.12.txt b/ansible_collections/cisco/ios/tests/sanity/ignore-2.18.txt
index d7ff17ca8..d7ff17ca8 100644
--- a/ansible_collections/cisco/ios/tests/sanity/ignore-2.12.txt
+++ b/ansible_collections/cisco/ios/tests/sanity/ignore-2.18.txt
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/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 <tkuratomi@ansible.com>
-#
-# 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 <http://www.gnu.org/licenses/>.
-
-# 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 <tkuratomi@ansible.com>
-#
-# 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 <http://www.gnu.org/licenses/>.
-
-# 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,
@@ -1710,6 +1940,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",
"aces": [
@@ -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,10 +101,16 @@ 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 <http://www.gnu.org/licenses/>.
-
-# 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/arista/eos/tests/unit/compat/__init__.py b/ansible_collections/cisco/iosxr/.github/CODEOWNERS
index e69de29bb..e69de29bb 100644
--- a/ansible_collections/arista/eos/tests/unit/compat/__init__.py
+++ b/ansible_collections/cisco/iosxr/.github/CODEOWNERS
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,367 +8,416 @@
"format": 1
},
{
- "name": "codecov.yml",
+ "name": ".github",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": ".github/dependabot.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4aa7e485dd4db6f8a55b046088c745def2b3145d9499ccda4e9a3336467dcea2",
+ "chksum_sha256": "11ceee3c57116e9fd08bc423414b1095ff002aa012d6fb325b1a7e24d7e28461",
"format": 1
},
{
- "name": ".zuul.yaml",
+ "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": "98905acf2eec9aa791cbf5a9effe6e7402bfaa3d2d204c30013120e00668da6e",
+ "chksum_sha256": "57e1fa3c1edef3b462e23b36f5ea116f8675a71d7f49731193e38b708c859742",
"format": 1
},
{
- "name": "LICENSE",
+ "name": ".github/workflows/draft_release.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986",
+ "chksum_sha256": "21ca3cc510cc10bdf4e5e307ddb88f579a61d9930590df5aa0f9651138e48c96",
"format": 1
},
{
- "name": ".yamllint",
+ "name": ".github/workflows/check_label.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "827ef9e031ecdcaf137be239d33ef93fcbbc3611cbb6b30b0e507d0e03373d0e",
+ "chksum_sha256": "9eb6abad2038b10cd6ea70310aa88d163f10c374d1728df29bb553eff2acfaba",
"format": 1
},
{
- "name": "requirements.txt",
+ "name": ".github/workflows/tests.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0aaeda602db4a8ddfe5bc8dd02ee4f0b3f9bb6ca8cdbf621f182aa97684f9cf3",
+ "chksum_sha256": "b008151848bb3b3ae567b7e86cc9427a92d3d6a1251d5f5bcc8b006c43e1db00",
"format": 1
},
{
- "name": "meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": ".github/workflows/release.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2e3f90a3147d93b97347d8418352f23e201417e05539a466399dd258a65d699c",
"format": 1
},
{
- "name": "meta/runtime.yml",
+ "name": ".github/CODEOWNERS",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "282baf25a62b30df4890c49e1c801e8cae2c99f5ae8fbc2b8cdfde9696b0fd86",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "meta/__init__.py",
+ "name": ".github/release-drafter.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "7cbc785c8661033cd9dd7a60897484fce731cbe3dc124a689fc3e934b1d974fb",
"format": 1
},
{
- "name": ".config",
+ "name": "plugins",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": ".config/ansible-lint.yml",
+ "name": "plugins/doc_fragments",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "plugins/doc_fragments/iosxr.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f9938ba933b832ccd61f3871926f0e9f9380d87b1eae1b678f4faf8e2a43caaa",
+ "chksum_sha256": "183557f42150c3888baca407c30a651bb6d0c70a06ac55f409b271323dfcbacf",
"format": 1
},
{
- "name": "README.md",
+ "name": "plugins/doc_fragments/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dc53e9f4e2f3828eb3c7759244b530b25b54fc4cc8d036b43110b170cd875d6d",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins",
+ "name": "plugins/lookup",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/terminal",
+ "name": "plugins/lookup/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "plugins/action",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/terminal/iosxr.py",
+ "name": "plugins/action/lacp_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d394b38929e905705fa833d4b590809c2af92af65a020d0ae91d5d2d1db72552",
+ "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
"format": 1
},
{
- "name": "plugins/terminal/__init__.py",
+ "name": "plugins/action/l2_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
"format": 1
},
{
- "name": "plugins/inventory",
- "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/inventory/__init__.py",
+ "name": "plugins/action/facts.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
"format": 1
},
{
- "name": "plugins/netconf",
- "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/netconf/iosxr.py",
+ "name": "plugins/action/interface.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "73becb51b5fb1fb658f10fb8e769968743f8568c6e51dc1efda0849ca47eb8e0",
+ "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
"format": 1
},
{
- "name": "plugins/netconf/__init__.py",
+ "name": "plugins/action/acl_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/bgp.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
"format": 1
},
{
- "name": "plugins/cache/__init__.py",
+ "name": "plugins/action/interfaces.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/lag_interfaces.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
"format": 1
},
{
- "name": "plugins/cliconf/iosxr.py",
+ "name": "plugins/action/iosxr.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0f18b848a9e72c90c0ce622e251140d5f1382feb76ead150b765b21691ca271b",
+ "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
"format": 1
},
{
- "name": "plugins/cliconf/__init__.py",
+ "name": "plugins/action/command.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/ntp_global.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
"format": 1
},
{
- "name": "plugins/plugin_utils/__init__.py",
+ "name": "plugins/action/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/modules",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/action/system.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
"format": 1
},
{
- "name": "plugins/modules/iosxr_prefix_lists.py",
+ "name": "plugins/action/bgp_neighbor_address_family.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0b3f0327ec949a4b8ab7a5048a103a5cb3289b024622abec4bbe2b3492804c6c",
+ "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
"format": 1
},
{
- "name": "plugins/modules/iosxr_lldp_global.py",
+ "name": "plugins/action/snmp_server.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "49bc5864ee42613d3a0cac34d9c146fb97297ef461d7fa497c94162662160e59",
+ "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
"format": 1
},
{
- "name": "plugins/modules/iosxr_l3_interfaces.py",
+ "name": "plugins/action/ospfv2.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c6c6340d2945f3e168b9a9fcd03b8abae7ee52871b76579ff65b0b4903da00f6",
+ "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
"format": 1
},
{
- "name": "plugins/modules/iosxr_ntp_global.py",
+ "name": "plugins/action/ospfv3.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "44b57fde643c0f5a18af667beb17595dfc30158fe67ca88402360fda946eceaa",
+ "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
"format": 1
},
{
- "name": "plugins/modules/iosxr_logging.py",
+ "name": "plugins/action/bgp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bb44b2574a5805f3a9c9a404975b04cf08a9904909005d03af66af013d84457c",
+ "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
"format": 1
},
{
- "name": "plugins/modules/iosxr_ospf_interfaces.py",
+ "name": "plugins/action/logging_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ab437abd41913bd6920581de125b9066482173009f6b622f626274d8836cda86",
+ "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
"format": 1
},
{
- "name": "plugins/modules/iosxr_lag_interfaces.py",
+ "name": "plugins/action/lldp_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "569864637dc35847d5a0aacf66c5409fb65f4710a2e84e9799a80eab0339294b",
+ "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
"format": 1
},
{
- "name": "plugins/modules/iosxr_config.py",
+ "name": "plugins/action/ospf_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ba4792a4d08586afb467f7e0cf3dd6d6d5fcc47d36422a959f5184fc8d57cc06",
+ "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
"format": 1
},
{
- "name": "plugins/modules/iosxr_bgp_templates.py",
+ "name": "plugins/action/banner.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "40ee7eb47dd6a3033bc45b091baa7ae3fba0526bca4fe37df5bf10a6689db834",
+ "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
"format": 1
},
{
- "name": "plugins/modules/iosxr_interfaces.py",
+ "name": "plugins/action/acls.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c1e798a795b46dff95909b6b4011b547615e62f5dc54386937db8295093e2d18",
+ "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
"format": 1
},
{
- "name": "plugins/modules/iosxr_hostname.py",
+ "name": "plugins/action/user.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1f8d7e5854c1c58c1042dbccaa889a900ee6cea16e60d4e07bddedb78e6f47bf",
+ "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
"format": 1
},
{
- "name": "plugins/modules/iosxr_bgp_global.py",
+ "name": "plugins/action/bgp_address_family.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bbdd49a43dc1e503dc098cee9c4674e6361f84ca2ed4322f61f8cb13cca170ad",
+ "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
"format": 1
},
{
- "name": "plugins/modules/iosxr_banner.py",
+ "name": "plugins/action/logging.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8eb8ad5c48dd48fad1e11367cd855dc063ce885756af15ffebdc7f532c4df8d0",
+ "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
"format": 1
},
{
- "name": "plugins/modules/__init__.py",
+ "name": "plugins/action/l3_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
"format": 1
},
{
- "name": "plugins/modules/iosxr_command.py",
+ "name": "plugins/action/prefix_lists.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "196518472d9b34a2a21ae411f2502cf727a43a514cd6ddc41c7f8901ba324d09",
+ "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
"format": 1
},
{
- "name": "plugins/modules/iosxr_facts.py",
+ "name": "plugins/action/lldp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4c6cb58faec6618afd00f86a150b6c988ec45eee37374b68dba4ebea2fbad540",
+ "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
"format": 1
},
{
- "name": "plugins/modules/iosxr_acl_interfaces.py",
+ "name": "plugins/action/static_routes.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "275c9849b7acc55cbe09e5e0f0ad131d5a5d353b81afae668cb09bf3790adf33",
+ "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
"format": 1
},
{
- "name": "plugins/modules/iosxr_logging_global.py",
+ "name": "plugins/action/config.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1077c960c02152e04c430f7cd1d297fb13561bdc69f57487aa1f5f1a4812c476",
+ "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
"format": 1
},
{
- "name": "plugins/modules/iosxr_acls.py",
+ "name": "plugins/action/netconf.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bc4cd90965c93b844a1f92b190ee7d7b04a9f9db28a3ffe06827f5019e37aace",
+ "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
"format": 1
},
{
- "name": "plugins/modules/iosxr_ping.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": "6ef89908231a1608a01697d48679fa84d68ec3c15b92578121f404f992f261cb",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/modules/iosxr_l2_interfaces.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": "8c1d442ca73d5a3659890b219f3644d6f6017a1741a774003e21f8f9d93fdaec",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/modules/iosxr_snmp_server.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": "61a2f4ec4c96619ce0f0a2a17e16c4b60782521b37c092a1d9e902e59b21743b",
+ "chksum_sha256": "aa830b22d8c7b638523ce66b715e546f426f9fcde1ea6397d4fdf2475fe05610",
"format": 1
},
{
- "name": "plugins/modules/iosxr_bgp_address_family.py",
+ "name": "plugins/modules/iosxr_bgp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4f4ad72baa6d8b68c826b6847e8a596f71412bc4df59baedadfa8442886de4b3",
+ "chksum_sha256": "bbdd49a43dc1e503dc098cee9c4674e6361f84ca2ed4322f61f8cb13cca170ad",
"format": 1
},
{
- "name": "plugins/modules/iosxr_netconf.py",
+ "name": "plugins/modules/iosxr_config.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e82057821034292044e1bf88de21e27e440ab0c733dabc12538937fffb0f92c6",
+ "chksum_sha256": "ba4792a4d08586afb467f7e0cf3dd6d6d5fcc47d36422a959f5184fc8d57cc06",
"format": 1
},
{
@@ -379,45 +428,66 @@
"format": 1
},
{
- "name": "plugins/modules/iosxr_ospfv3.py",
+ "name": "plugins/modules/iosxr_bgp_neighbor_address_family.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aa830b22d8c7b638523ce66b715e546f426f9fcde1ea6397d4fdf2475fe05610",
+ "chksum_sha256": "87230dbd424079c81dc5421fc16b8621e18a931b2328cb5929bda29bb561ac66",
"format": 1
},
{
- "name": "plugins/modules/iosxr_lacp_interfaces.py",
+ "name": "plugins/modules/iosxr_lag_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "72e780af8c3b18294edbe23fd39c1a2a9d180b0866f61be108dc3e5ce40e7cf8",
+ "chksum_sha256": "569864637dc35847d5a0aacf66c5409fb65f4710a2e84e9799a80eab0339294b",
"format": 1
},
{
- "name": "plugins/modules/iosxr_lacp.py",
+ "name": "plugins/modules/iosxr_command.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8a4e892df5e655246bac1268b8830f4aedabe3da7f5589cf658b88d81119e972",
+ "chksum_sha256": "196518472d9b34a2a21ae411f2502cf727a43a514cd6ddc41c7f8901ba324d09",
"format": 1
},
{
- "name": "plugins/modules/iosxr_ospfv2.py",
+ "name": "plugins/modules/iosxr_bgp_address_family.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f05278972e5a7fac3caea9d2373c1dc4c2cd13d8f686fd8fc14c46d86426e676",
+ "chksum_sha256": "4f4ad72baa6d8b68c826b6847e8a596f71412bc4df59baedadfa8442886de4b3",
"format": 1
},
{
- "name": "plugins/modules/iosxr_system.py",
+ "name": "plugins/modules/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "193c0aa18d31526387e4b0c84826661613da5ebe5dca17b66ec02e3c21f6fc82",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/modules/iosxr_bgp_neighbor_address_family.py",
+ "name": "plugins/modules/iosxr_lacp_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "87230dbd424079c81dc5421fc16b8621e18a931b2328cb5929bda29bb561ac66",
+ "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
},
{
@@ -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,24 +736,17 @@
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/rm_templates/ospfv3.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ea3917736e2a559bd42a445aba19a6995ea8667f10175ffe97a08bf503c8fbd2",
- "format": 1
- },
- {
- "name": "plugins/module_utils/network/iosxr/rm_templates/bgp_templates.py",
+ "name": "plugins/module_utils/network/iosxr/rm_templates/bgp_neighbor_address_family.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "876b6f3b7e30fee8a44bfebeab37157ea103bca3b352d0cdc70939ef2b8861eb",
+ "chksum_sha256": "ccb3f34513a75b6eb7f2935db597bea5be13fb3e4241c5fee2ba0b1b5ead559b",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/rm_templates/acl_interfaces.py",
+ "name": "plugins/module_utils/network/iosxr/rm_templates/snmp_server.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6ade3f90bab09cd4105e319c9c003b9d9fc7f5a5c75b507bd3f4ec1f3f8089f3",
+ "chksum_sha256": "d4e7c9a631f91d84ba1224891fe4397e69b51ba23d06c4c3469e2f8ec6b1fc2e",
"format": 1
},
{
@@ -680,17 +757,17 @@
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/rm_templates/ping.py",
+ "name": "plugins/module_utils/network/iosxr/rm_templates/ospfv3.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b790e08ba0a4c1a36274554607d74f62cb773680cd8a326075694d8eee4db64c",
+ "chksum_sha256": "ea3917736e2a559bd42a445aba19a6995ea8667f10175ffe97a08bf503c8fbd2",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/rm_templates/ospf_interfaces.py",
+ "name": "plugins/module_utils/network/iosxr/rm_templates/bgp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "717412153f156fc55f24bfe0247c7fe5346271d070be519e33b466ab7f3bad49",
+ "chksum_sha256": "25b8c064cd99853d76b014b92f3c76a338938acf94adb3a72fa542472406b942",
"format": 1
},
{
@@ -701,154 +778,98 @@
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/rm_templates/prefix_lists.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5f3032f6828fe63605f2360f996d3981b6d0677758ff33e87fc60ad2dda1f151",
- "format": 1
- },
- {
- "name": "plugins/module_utils/network/iosxr/iosxr.py",
+ "name": "plugins/module_utils/network/iosxr/rm_templates/ospf_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6657f778058c2d8d464841539530043d63499640944be209a90bbd886c1d55e",
+ "chksum_sha256": "717412153f156fc55f24bfe0247c7fe5346271d070be519e33b466ab7f3bad49",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/__init__.py",
+ "name": "plugins/module_utils/network/iosxr/rm_templates/bgp_address_family.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "plugins/module_utils/network/iosxr/facts",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "plugins/module_utils/network/iosxr/facts/bgp_address_family",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "f1e960a978c09f2a52b03c805161f233eb8ceae9410cec582fac8844654c34f1",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/facts/bgp_address_family/bgp_address_family.py",
+ "name": "plugins/module_utils/network/iosxr/rm_templates/bgp_templates.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b24aa48cc4250d0c35970a15b79a1ebc374b3fb85ffa93ce1da93d50770faf6c",
+ "chksum_sha256": "876b6f3b7e30fee8a44bfebeab37157ea103bca3b352d0cdc70939ef2b8861eb",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/facts/bgp_address_family/__init__.py",
+ "name": "plugins/module_utils/network/iosxr/rm_templates/ping.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,
+ "chksum_sha256": "b790e08ba0a4c1a36274554607d74f62cb773680cd8a326075694d8eee4db64c",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/facts/static_routes/static_routes.py",
+ "name": "plugins/module_utils/network/iosxr/rm_templates/prefix_lists.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d0fa9a0327c99fbf0af8fe66e68927427e0550c651bd0c20d98a0867e64e4c17",
+ "chksum_sha256": "5f3032f6828fe63605f2360f996d3981b6d0677758ff33e87fc60ad2dda1f151",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/facts/static_routes/__init__.py",
+ "name": "plugins/module_utils/network/iosxr/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/facts/prefix_lists",
+ "name": "plugins/module_utils/network/iosxr/facts",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "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/prefix_lists/prefix_lists.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0f5787451ba55b8bbb7d7e7bce4d4b63362f83fe13c7f6df8bacd71c26cc9e6f",
- "format": 1
- },
- {
- "name": "plugins/module_utils/network/iosxr/facts/hostname",
+ "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/hostname/hostname.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "778551a6d5240dc85297041639ae94c4a4d6ec0d1781f44b2527081702e62fdc",
- "format": 1
- },
- {
- "name": "plugins/module_utils/network/iosxr/facts/hostname/__init__.py",
+ "name": "plugins/module_utils/network/iosxr/facts/lacp/lacp.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "plugins/module_utils/network/iosxr/facts/lldp_interfaces",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "080864178932c583b11f29ceec1d86ba31f0f4d4751dce9d4bcdb30a4136162e",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/facts/lldp_interfaces/__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/lldp_interfaces/lldp_interfaces.py",
+ "name": "plugins/module_utils/network/iosxr/facts/facts.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f4b71b3d54842146e02ab84d93e0d2616790e7039db63b04a3f6ffc618b15bca",
+ "chksum_sha256": "be87e4de33120eb7c34ddae26f81cce6b290a2031e890782af82ab5200bb953a",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/facts/lacp",
+ "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/lacp/lacp.py",
+ "name": "plugins/module_utils/network/iosxr/facts/legacy/base.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "080864178932c583b11f29ceec1d86ba31f0f4d4751dce9d4bcdb30a4136162e",
+ "chksum_sha256": "1b3e042fe5528b6be3d3a3830e3856f36348a1ac02d9264774753c2feded3300",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/facts/lacp/__init__.py",
+ "name": "plugins/module_utils/network/iosxr/facts/legacy/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
@@ -876,171 +897,150 @@
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/facts/logging_global",
+ "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/logging_global/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "plugins/module_utils/network/iosxr/facts/logging_global/logging_global.py",
+ "name": "plugins/module_utils/network/iosxr/facts/interfaces/interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "50e7cebaa5d2b4073eb83908be1cdc2e616b90a76a3683fe4909ca55c9fe1e6a",
- "format": 1
- },
- {
- "name": "plugins/module_utils/network/iosxr/facts/ospfv3",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "9a6f4b29fc202cb7c343598c50d0de15708207c98e723bea1333bf3451877ff2",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/facts/ospfv3/__init__.py",
+ "name": "plugins/module_utils/network/iosxr/facts/interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"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
- },
- {
- "name": "plugins/module_utils/network/iosxr/facts/bgp_neighbor_address_family",
+ "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/bgp_neighbor_address_family/bgp_neighbor_address_family.py",
+ "name": "plugins/module_utils/network/iosxr/facts/acl_interfaces/acl_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "76c598a854f41b6c0b661c3b53e5f4d57577d5fe5055f67f291d92b08b612192",
+ "chksum_sha256": "1bbe7d9835d9c8d883a86444d77ea71c61bf0e9b5927bd4036c880b8b1e57e52",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/facts/bgp_neighbor_address_family/__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/legacy",
+ "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/legacy/base.py",
+ "name": "plugins/module_utils/network/iosxr/facts/l2_interfaces/l2_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3eef25f6033d14eeac6bd15f29a4da63b9096c8acb1003688f66106100da3650",
+ "chksum_sha256": "a92bb174bb343d43cc987bc2bef2c1a213be19c0b3fc775e1220d88961a1ab4e",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/facts/legacy/__init__.py",
+ "name": "plugins/module_utils/network/iosxr/facts/l2_interfaces/__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/lag_interfaces",
"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/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/l2_interfaces/l2_interfaces.py",
+ "name": "plugins/module_utils/network/iosxr/facts/lag_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a92bb174bb343d43cc987bc2bef2c1a213be19c0b3fc775e1220d88961a1ab4e",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/facts/ospf_interfaces",
+ "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/ospf_interfaces/__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/ospf_interfaces/ospf_interfaces.py",
+ "name": "plugins/module_utils/network/iosxr/facts/bgp_templates/bgp_templates.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d04195c95a2e1ff3a77ee404f87cd42fd9483514de5b3feece08a22bdfe77724",
+ "chksum_sha256": "ae637abb3b5e35bf8b0c7b9992af8918fe0dcd2086d99c193bc7242f765faa07",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/facts/acl_interfaces",
+ "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/acl_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/iosxr/facts/hostname/hostname.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "778551a6d5240dc85297041639ae94c4a4d6ec0d1781f44b2527081702e62fdc",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/facts/acl_interfaces/acl_interfaces.py",
+ "name": "plugins/module_utils/network/iosxr/facts/hostname/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1bbe7d9835d9c8d883a86444d77ea71c61bf0e9b5927bd4036c880b8b1e57e52",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/facts/lldp_global",
+ "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/lldp_global/__init__.py",
+ "name": "plugins/module_utils/network/iosxr/facts/lldp_interfaces/__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/lldp_interfaces/lldp_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec3fd5ec1b45f898ae1c2ff3d3e8d51351e2b1c3e8ab821a3848530eb623a538",
+ "chksum_sha256": "f4b71b3d54842146e02ab84d93e0d2616790e7039db63b04a3f6ffc618b15bca",
"format": 1
},
{
@@ -1051,66 +1051,66 @@
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/facts/snmp_server",
+ "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/snmp_server/snmp_server.py",
+ "name": "plugins/module_utils/network/iosxr/facts/lldp_global/__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/lldp_global/lldp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "ec3fd5ec1b45f898ae1c2ff3d3e8d51351e2b1c3e8ab821a3848530eb623a538",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/facts/lacp_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/lacp_interfaces/lacp_interfaces.py",
+ "name": "plugins/module_utils/network/iosxr/facts/snmp_server/__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/snmp_server/snmp_server.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "095dd110baacfacf73b1c5b46462eae782157028bfdf6609ddda26c5ce87ced3",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/facts/acls",
+ "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/acls/__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/acls/acls.py",
+ "name": "plugins/module_utils/network/iosxr/facts/prefix_lists/prefix_lists.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fb7c38fda930b446242c070d0708451b1230fec8bb7029dedde3fdb2c98c1ab3",
+ "chksum_sha256": "0f5787451ba55b8bbb7d7e7bce4d4b63362f83fe13c7f6df8bacd71c26cc9e6f",
"format": 1
},
{
@@ -1135,227 +1135,220 @@
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/facts/lag_interfaces",
+ "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/lag_interfaces/lag_interfaces.py",
+ "name": "plugins/module_utils/network/iosxr/facts/bgp_neighbor_address_family/__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/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/bgp_templates",
+ "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/bgp_templates/__init__.py",
+ "name": "plugins/module_utils/network/iosxr/facts/l3_interfaces/__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/l3_interfaces/l3_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ae637abb3b5e35bf8b0c7b9992af8918fe0dcd2086d99c193bc7242f765faa07",
+ "chksum_sha256": "20944d6b40f8e0edb1fde36d862f69a34350dbe3a4277270dfd8b7fcaf8cac0e",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/facts/interfaces",
+ "name": "plugins/module_utils/network/iosxr/facts/acls",
"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/acls/__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/acls/acls.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "fb7c38fda930b446242c070d0708451b1230fec8bb7029dedde3fdb2c98c1ab3",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/facts/l3_interfaces",
+ "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/l3_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/iosxr/facts/bgp_global/__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_global/bgp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "20944d6b40f8e0edb1fde36d862f69a34350dbe3a4277270dfd8b7fcaf8cac0e",
+ "chksum_sha256": "edf76eb5396aa5b5fd6bdc185a974f51a6ceae7020fd28b5a3cd1fd1a2a99ef4",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/facts/bgp_global",
+ "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/bgp_global/bgp_global.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "edf76eb5396aa5b5fd6bdc185a974f51a6ceae7020fd28b5a3cd1fd1a2a99ef4",
- "format": 1
- },
- {
- "name": "plugins/module_utils/network/iosxr/facts/bgp_global/__init__.py",
+ "name": "plugins/module_utils/network/iosxr/facts/static_routes/__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/static_routes/static_routes.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be87e4de33120eb7c34ddae26f81cce6b290a2031e890782af82ab5200bb953a",
- "format": 1
- },
- {
- "name": "plugins/module_utils/network/iosxr/argspec",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "d0fa9a0327c99fbf0af8fe66e68927427e0550c651bd0c20d98a0867e64e4c17",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/argspec/bgp_address_family",
+ "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/argspec/bgp_address_family/bgp_address_family.py",
+ "name": "plugins/module_utils/network/iosxr/facts/logging_global/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cb06c342c63aebbc811d95083567b4a051d9aa5a2f8c2fa952931e7a90777e5d",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/argspec/bgp_address_family/__init__.py",
+ "name": "plugins/module_utils/network/iosxr/facts/logging_global/logging_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "50e7cebaa5d2b4073eb83908be1cdc2e616b90a76a3683fe4909ca55c9fe1e6a",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/argspec/static_routes",
+ "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/argspec/static_routes/static_routes.py",
+ "name": "plugins/module_utils/network/iosxr/facts/ospf_interfaces/__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/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/argspec/prefix_lists",
+ "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/argspec/prefix_lists/__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/argspec/prefix_lists/prefix_lists.py",
+ "name": "plugins/module_utils/network/iosxr/facts/bgp_address_family/bgp_address_family.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7b35f3445ce05129c8c3b771faf4db6ef5bafbadcdca4d865cd07ada52fac061",
+ "chksum_sha256": "b24aa48cc4250d0c35970a15b79a1ebc374b3fb85ffa93ce1da93d50770faf6c",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/argspec/hostname",
+ "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/argspec/hostname/hostname.py",
+ "name": "plugins/module_utils/network/iosxr/facts/lacp_interfaces/lacp_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "87eada9722f328072f51f75820ced43c8024a3a195d275316144ecb833b8d8e2",
+ "chksum_sha256": "9f3737faee14179f8265f8f1c3a2039bb32de6e6c884161801d09179a813568e",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/argspec/hostname/__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/argspec/lldp_interfaces",
+ "name": "plugins/module_utils/network/iosxr/facts/ospfv3",
"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/facts/ospfv3/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/argspec/lldp_interfaces/lldp_interfaces.py",
+ "name": "plugins/module_utils/network/iosxr/facts/ospfv3/ospfv3.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1b762584a0f4d5b03103e4aa1d901bce30408fa11fce113cbc7941929490b852",
+ "chksum_sha256": "3d9f7585ec696598b8adfbeb1d46670ea49ef94e4811fd41dd5d62cb9574460d",
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils/network/iosxr/argspec",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
@@ -1401,150 +1394,150 @@
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/argspec/logging_global",
+ "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/logging_global/__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/logging_global/logging_global.py",
+ "name": "plugins/module_utils/network/iosxr/argspec/interfaces/__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/acl_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/acl_interfaces/acl_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "7759ff598b56bc07a99921ff4f94cd65b96ea927ddacf27c7ae00c237dc6c9ce",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/argspec/ospfv3/ospfv3.py",
+ "name": "plugins/module_utils/network/iosxr/argspec/acl_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fda0edcc4ebdc1b2da68bc918fc9a72551c1f266dffe0999faab28934cca882d",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/argspec/bgp_neighbor_address_family",
+ "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/bgp_neighbor_address_family/bgp_neighbor_address_family.py",
+ "name": "plugins/module_utils/network/iosxr/argspec/l2_interfaces/l2_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0cd93cff30a775adcc07eaf0c792817bfe1562d83777cd6d6956a81e01750739",
+ "chksum_sha256": "3ea8177f270f8a430fa3e62d2589406a854d350b1c732cf8ca27643c102a1c68",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/argspec/bgp_neighbor_address_family/__init__.py",
+ "name": "plugins/module_utils/network/iosxr/argspec/l2_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/argspec/l2_interfaces",
+ "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/l2_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/iosxr/argspec/lag_interfaces/lag_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "3212b99c8dc4190c1bd4fdf5b31ab6a0d0d70125bbc8c6f7b3594bd5753cb480",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/argspec/l2_interfaces/l2_interfaces.py",
+ "name": "plugins/module_utils/network/iosxr/argspec/lag_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3ea8177f270f8a430fa3e62d2589406a854d350b1c732cf8ca27643c102a1c68",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/argspec/ospf_interfaces",
+ "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/ospf_interfaces/__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/ospf_interfaces/ospf_interfaces.py",
+ "name": "plugins/module_utils/network/iosxr/argspec/bgp_templates/bgp_templates.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "20b179841cf2cebbea24a8bda72e5edd74be5419bd476ca734567aa4499cbf52",
+ "chksum_sha256": "f3ab5cccdddf5c608840b57b814d9b2d4631f0d376f380e8c2d5ef2832625976",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/argspec/acl_interfaces",
+ "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/acl_interfaces/__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/acl_interfaces/acl_interfaces.py",
+ "name": "plugins/module_utils/network/iosxr/argspec/hostname/__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/lldp_interfaces",
"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/lldp_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/argspec/lldp_global/lldp_global.py",
+ "name": "plugins/module_utils/network/iosxr/argspec/lldp_interfaces/lldp_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c698527971eb9394265200984d070719a047cd3c3c1443ab385510e99d39f74b",
+ "chksum_sha256": "1b762584a0f4d5b03103e4aa1d901bce30408fa11fce113cbc7941929490b852",
"format": 1
},
{
@@ -1555,346 +1548,346 @@
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/argspec/snmp_server",
+ "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/snmp_server/snmp_server.py",
+ "name": "plugins/module_utils/network/iosxr/argspec/lldp_global/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6e8abca564d7d892efe70b5aaa391567175176cd5494cd1238029deffcc4174d",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/argspec/snmp_server/__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/ping",
+ "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/ping/__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/ping/ping.py",
+ "name": "plugins/module_utils/network/iosxr/argspec/snmp_server/snmp_server.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3a9e672170633f82bf0c1323bc7431b6d88eff5f096c40fdfbed7f851d95ce7c",
+ "chksum_sha256": "6e8abca564d7d892efe70b5aaa391567175176cd5494cd1238029deffcc4174d",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/argspec/facts",
+ "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/facts/__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/facts/facts.py",
+ "name": "plugins/module_utils/network/iosxr/argspec/prefix_lists/prefix_lists.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be8244aad794929184f824e21f498740f90b47f810cc1ed37cd07b37f8d596e3",
+ "chksum_sha256": "7b35f3445ce05129c8c3b771faf4db6ef5bafbadcdca4d865cd07ada52fac061",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/argspec/lacp_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/lacp_interfaces/lacp_interfaces.py",
+ "name": "plugins/module_utils/network/iosxr/argspec/ntp_global/ntp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9531600850e779f65072369be05a2dc142aa10b044864a5aecf72b8305afe1d9",
+ "chksum_sha256": "b801e133d8d321e12dc7289bf1ccd9992d1d7502e683a2cd5d62ef4463ae784b",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/argspec/lacp_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/iosxr/argspec/ntp_global/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/argspec/acls",
+ "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/acls/__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/acls/acls.py",
+ "name": "plugins/module_utils/network/iosxr/argspec/bgp_neighbor_address_family/bgp_neighbor_address_family.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0bb198af8188b36cb1235a3b0e1931f4910908076a5c8c3f5fd7d877cbc038d0",
+ "chksum_sha256": "0cd93cff30a775adcc07eaf0c792817bfe1562d83777cd6d6956a81e01750739",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/argspec/ntp_global",
+ "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/ntp_global/ntp_global.py",
+ "name": "plugins/module_utils/network/iosxr/argspec/facts/facts.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b801e133d8d321e12dc7289bf1ccd9992d1d7502e683a2cd5d62ef4463ae784b",
+ "chksum_sha256": "be8244aad794929184f824e21f498740f90b47f810cc1ed37cd07b37f8d596e3",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/argspec/ntp_global/__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/lag_interfaces",
+ "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/lag_interfaces/lag_interfaces.py",
+ "name": "plugins/module_utils/network/iosxr/argspec/l3_interfaces/__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/l3_interfaces/l3_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "e46afb2541c2aaec2fc690973b351f23ffbc3f07624616e61a7d13d57cf3798f",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/argspec/bgp_templates",
+ "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/bgp_templates/__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/bgp_templates/bgp_templates.py",
+ "name": "plugins/module_utils/network/iosxr/argspec/acls/acls.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "83017eb412cf98eadb8eaefdf7460d6a39f7a634c36dd756b2634a02c8b73dab",
+ "chksum_sha256": "0bb198af8188b36cb1235a3b0e1931f4910908076a5c8c3f5fd7d877cbc038d0",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/argspec/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/interfaces/interfaces.py",
+ "name": "plugins/module_utils/network/iosxr/argspec/ping/__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/ping/ping.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "3a9e672170633f82bf0c1323bc7431b6d88eff5f096c40fdfbed7f851d95ce7c",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/argspec/l3_interfaces",
+ "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/l3_interfaces/__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/l3_interfaces/l3_interfaces.py",
+ "name": "plugins/module_utils/network/iosxr/argspec/bgp_global/bgp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e46afb2541c2aaec2fc690973b351f23ffbc3f07624616e61a7d13d57cf3798f",
+ "chksum_sha256": "93b1c8d33c5d79a7efac59125f8af5ecca0009cf051810a1aac6234d38bdfaef",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/argspec/bgp_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/bgp_global/bgp_global.py",
+ "name": "plugins/module_utils/network/iosxr/argspec/static_routes/__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/static_routes/static_routes.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "plugins/module_utils/network/iosxr/config",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "dc45db620ae60f0508046c12e231a33435e8d4b5433be6b778965e615173698d",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/config/bgp_address_family",
+ "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/config/bgp_address_family/bgp_address_family.py",
+ "name": "plugins/module_utils/network/iosxr/argspec/logging_global/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cf952b8205f5fb618712816947770ae4b88100b8a5206a5618b0403d2a17ad16",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/config/bgp_address_family/__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/config/static_routes",
+ "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/config/static_routes/static_routes.py",
+ "name": "plugins/module_utils/network/iosxr/argspec/ospf_interfaces/__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/argspec/ospf_interfaces/ospf_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "20b179841cf2cebbea24a8bda72e5edd74be5419bd476ca734567aa4499cbf52",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/config/prefix_lists",
+ "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/config/prefix_lists/__init__.py",
+ "name": "plugins/module_utils/network/iosxr/argspec/bgp_address_family/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/config/prefix_lists/prefix_lists.py",
+ "name": "plugins/module_utils/network/iosxr/argspec/bgp_address_family/bgp_address_family.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2cd165d87a347df66575587a0221e4bd80c26bb6d12098fcf15244aa81c0cd7b",
+ "chksum_sha256": "cb06c342c63aebbc811d95083567b4a051d9aa5a2f8c2fa952931e7a90777e5d",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/config/hostname",
+ "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/config/hostname/hostname.py",
+ "name": "plugins/module_utils/network/iosxr/argspec/lacp_interfaces/lacp_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2baccb28e2ac374f4ff89eecd211fbfd3bb72b535ca95d424ce60f494eb47f5d",
+ "chksum_sha256": "9531600850e779f65072369be05a2dc142aa10b044864a5aecf72b8305afe1d9",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/config/hostname/__init__.py",
+ "name": "plugins/module_utils/network/iosxr/argspec/lacp_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/argspec/ospfv3",
"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/argspec/ospfv3/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/config/lldp_interfaces/lldp_interfaces.py",
+ "name": "plugins/module_utils/network/iosxr/argspec/ospfv3/ospfv3.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d43c06ced71873fc30c4be7d4f919e2c14207452bb1a365620516cf746b9fbcf",
+ "chksum_sha256": "fda0edcc4ebdc1b2da68bc918fc9a72551c1f266dffe0999faab28934cca882d",
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils/network/iosxr/config",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
@@ -1940,150 +1933,150 @@
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/config/logging_global",
+ "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/logging_global/__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/logging_global/logging_global.py",
+ "name": "plugins/module_utils/network/iosxr/config/interfaces/__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/acl_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/acl_interfaces/acl_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "26b0b473826e35e9f9ae20509e7c5f7bc00f095b3f487138b018a945291b0174",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/config/ospfv3/ospfv3.py",
+ "name": "plugins/module_utils/network/iosxr/config/acl_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b21b6481a508c8684ef679bb101893df292ff9b04af0b18b5cedaf3d2132ce3f",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/config/bgp_neighbor_address_family",
+ "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/bgp_neighbor_address_family/bgp_neighbor_address_family.py",
+ "name": "plugins/module_utils/network/iosxr/config/l2_interfaces/l2_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cd69a43075b1e4572a1bb830d8efc31ba218141246e16cf7154725bc608e2da6",
+ "chksum_sha256": "0a9eba4f5bf6d26f534ff9919152e939ce0cc21b8501a0d2df2b61b8890163ee",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/config/bgp_neighbor_address_family/__init__.py",
+ "name": "plugins/module_utils/network/iosxr/config/l2_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/config/l2_interfaces",
+ "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/l2_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/iosxr/config/lag_interfaces/lag_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "e81b0808b1dd9667a81e09a4c39a1d9d2ae30c9d4848385d5222a801c6b9a9dc",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/config/l2_interfaces/l2_interfaces.py",
+ "name": "plugins/module_utils/network/iosxr/config/lag_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0a9eba4f5bf6d26f534ff9919152e939ce0cc21b8501a0d2df2b61b8890163ee",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/config/ospf_interfaces",
+ "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/ospf_interfaces/__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/ospf_interfaces/ospf_interfaces.py",
+ "name": "plugins/module_utils/network/iosxr/config/bgp_templates/bgp_templates.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b75e4e77ddc6c397561c1c39fa7aa6608606ba2d815b2fd75f0b8ec9004162b8",
+ "chksum_sha256": "78761e9389083d5e2ad18725a37721ba994404b29e2f5fef0f83d5e626ed7eb7",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/config/acl_interfaces",
+ "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/acl_interfaces/__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/acl_interfaces/acl_interfaces.py",
+ "name": "plugins/module_utils/network/iosxr/config/hostname/__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/lldp_interfaces",
"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/lldp_interfaces/__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/lldp_interfaces/lldp_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2b5809b893d79700a7ee8e10c0e36fc8c10ba66a4008abf07fc2e2548a360100",
+ "chksum_sha256": "d43c06ced71873fc30c4be7d4f919e2c14207452bb1a365620516cf746b9fbcf",
"format": 1
},
{
@@ -2094,2229 +2087,2229 @@
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/config/snmp_server",
+ "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/snmp_server/snmp_server.py",
+ "name": "plugins/module_utils/network/iosxr/config/lldp_global/__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/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/ping",
+ "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/ping/__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/ping/ping.py",
+ "name": "plugins/module_utils/network/iosxr/config/snmp_server/snmp_server.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7087eb892779e8640ca52189aedce205150066e1b661949130004359bf833f9b",
+ "chksum_sha256": "e6aa8e4aaf697e464a933218032e82e3c0dc0f62308ba5d38c3d06ec154708af",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/config/lacp_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/lacp_interfaces/lacp_interfaces.py",
+ "name": "plugins/module_utils/network/iosxr/config/prefix_lists/__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/prefix_lists/prefix_lists.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "2cd165d87a347df66575587a0221e4bd80c26bb6d12098fcf15244aa81c0cd7b",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/config/acls",
+ "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/acls/__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/acls/acls.py",
+ "name": "plugins/module_utils/network/iosxr/config/ntp_global/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1b6c923aacec2f03fd8efd5566f5eb388817dafbe91a709a17286cfba77acfbb",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/config/ntp_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/ntp_global/ntp_global.py",
+ "name": "plugins/module_utils/network/iosxr/config/bgp_neighbor_address_family/__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/bgp_neighbor_address_family/bgp_neighbor_address_family.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "cd69a43075b1e4572a1bb830d8efc31ba218141246e16cf7154725bc608e2da6",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/config/lag_interfaces",
+ "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/lag_interfaces/lag_interfaces.py",
+ "name": "plugins/module_utils/network/iosxr/config/l3_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/l3_interfaces/l3_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "61ed9c696fa29d39b6efcb385d4d9e265370abf60a7b74116072c9e8cc715dfe",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/config/bgp_templates",
+ "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/bgp_templates/__init__.py",
+ "name": "plugins/module_utils/network/iosxr/config/acls/__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/acls/acls.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "78761e9389083d5e2ad18725a37721ba994404b29e2f5fef0f83d5e626ed7eb7",
+ "chksum_sha256": "1b6c923aacec2f03fd8efd5566f5eb388817dafbe91a709a17286cfba77acfbb",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/config/interfaces",
+ "name": "plugins/module_utils/network/iosxr/config/ping",
"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/ping/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "119d56ea0c0849feb466022d5905927a19c96299fcb1164078eb7481b26b1d59",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/config/interfaces/__init__.py",
+ "name": "plugins/module_utils/network/iosxr/config/ping/ping.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "7087eb892779e8640ca52189aedce205150066e1b661949130004359bf833f9b",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/config/l3_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/l3_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/iosxr/config/bgp_global/__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/bgp_global/bgp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "61ed9c696fa29d39b6efcb385d4d9e265370abf60a7b74116072c9e8cc715dfe",
+ "chksum_sha256": "d9e3408e81e0d8e65e9c623ec4262089393937bd354fcd42d1fa6cb0bfb88f0b",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/config/bgp_global",
+ "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/bgp_global/bgp_global.py",
+ "name": "plugins/module_utils/network/iosxr/config/static_routes/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d9e3408e81e0d8e65e9c623ec4262089393937bd354fcd42d1fa6cb0bfb88f0b",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/config/bgp_global/__init__.py",
+ "name": "plugins/module_utils/network/iosxr/config/static_routes/static_routes.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "4e18a21b3b395e6a88135b71f877f41b66e9aeff88c534b832f45419817a8de1",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/utils",
+ "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/utils/__init__.py",
+ "name": "plugins/module_utils/network/iosxr/config/logging_global/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/iosxr/utils/utils.py",
+ "name": "plugins/module_utils/network/iosxr/config/logging_global/logging_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c445382425553068e00713ecd367720b9b4d4081558e4d8f5cb35c96d511fea9",
+ "chksum_sha256": "781ef51a098b082d8e3d5cde9be910382c6acf0506270063e604d04a7237129b",
"format": 1
},
{
- "name": "plugins/action",
+ "name": "plugins/module_utils/network/iosxr/config/ospf_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/action/bgp_global.py",
+ "name": "plugins/module_utils/network/iosxr/config/ospf_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/action/lacp.py",
+ "name": "plugins/module_utils/network/iosxr/config/ospf_interfaces/ospf_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
+ "chksum_sha256": "b75e4e77ddc6c397561c1c39fa7aa6608606ba2d815b2fd75f0b8ec9004162b8",
"format": 1
},
{
- "name": "plugins/action/lag_interfaces.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
+ "name": "plugins/module_utils/network/iosxr/config/bgp_address_family",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/action/user.py",
+ "name": "plugins/module_utils/network/iosxr/config/bgp_address_family/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/action/interfaces.py",
+ "name": "plugins/module_utils/network/iosxr/config/bgp_address_family/bgp_address_family.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
+ "chksum_sha256": "cf952b8205f5fb618712816947770ae4b88100b8a5206a5618b0403d2a17ad16",
"format": 1
},
{
- "name": "plugins/action/bgp_address_family.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
+ "name": "plugins/module_utils/network/iosxr/config/lacp_interfaces",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/action/bgp_neighbor_address_family.py",
+ "name": "plugins/module_utils/network/iosxr/config/lacp_interfaces/lacp_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
+ "chksum_sha256": "72f8f047d8c9bc3795d281b6b3daf88886c6b12b5a0a4d30898daf923c92d4ec",
"format": 1
},
{
- "name": "plugins/action/system.py",
+ "name": "plugins/module_utils/network/iosxr/config/lacp_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/action/static_routes.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
+ "name": "plugins/module_utils/network/iosxr/config/ospfv3",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/action/netconf.py",
+ "name": "plugins/module_utils/network/iosxr/config/ospfv3/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/action/hostname.py",
+ "name": "plugins/module_utils/network/iosxr/config/ospfv3/ospfv3.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
+ "chksum_sha256": "b21b6481a508c8684ef679bb101893df292ff9b04af0b18b5cedaf3d2132ce3f",
"format": 1
},
{
- "name": "plugins/action/lacp_interfaces.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
+ "name": "plugins/terminal",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/action/logging.py",
+ "name": "plugins/terminal/iosxr.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
+ "chksum_sha256": "d394b38929e905705fa833d4b590809c2af92af65a020d0ae91d5d2d1db72552",
"format": 1
},
{
- "name": "plugins/action/iosxr.py",
+ "name": "plugins/terminal/__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/test",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/action/snmp_server.py",
+ "name": "plugins/test/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/action/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "name": "plugins/cliconf",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/action/interface.py",
+ "name": "plugins/cliconf/iosxr.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
+ "chksum_sha256": "9dd6b778419c39c2a0e4b6c9bd64572545e57159a016b8b9e48589d7beb0a672",
"format": 1
},
{
- "name": "plugins/action/ospfv3.py",
+ "name": "plugins/cliconf/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/action/bgp.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/l2_interfaces.py",
+ "name": "plugins/plugin_utils/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/action/command.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/acl_interfaces.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/ospfv2.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/config.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/acls.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/l3_interfaces.py",
+ "name": "plugins/sub_plugins/grpc/iosxr.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
+ "chksum_sha256": "8003d9ffb32e5cd8ab1926463a1ff2f9443eb0566ada4a9150cbf3a82d231293",
"format": 1
},
{
- "name": "plugins/action/ospf_interfaces.py",
+ "name": "plugins/sub_plugins/grpc/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/action/lldp_interfaces.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/logging_global.py",
+ "name": "plugins/filter/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/action/prefix_lists.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/banner.py",
+ "name": "plugins/netconf/iosxr.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
+ "chksum_sha256": "73becb51b5fb1fb658f10fb8e769968743f8568c6e51dc1efda0849ca47eb8e0",
"format": 1
},
{
- "name": "plugins/action/facts.py",
+ "name": "plugins/netconf/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/action/lldp_global.py",
+ "name": "meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "meta/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "test-requirements.txt",
+ "name": "meta/runtime.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "67ac8fa83eab8c43a702d5aa224225a1c5ff1e4de72df613c63cf60398e51058",
+ "chksum_sha256": "f1730a69a7cc01e0d832e312c991c5c72435ced82a8fccfdc027ed6596ed6751",
"format": 1
},
{
- "name": "tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": ".ansible-lint",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e363e6b28b1163bc175b7be848ecf6925803462b9287745d1672dcfd098b095",
"format": 1
},
{
- "name": "tests/sanity",
+ "name": ".config",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/sanity/ignore-2.9.txt",
+ "name": ".config/ansible-lint.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "158e0096bade515d4b5ffdf147a7d68dc5533c6bb8facd1e079639e7e49d9cfb",
+ "chksum_sha256": "f9938ba933b832ccd61f3871926f0e9f9380d87b1eae1b678f4faf8e2a43caaa",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.13.txt",
+ "name": ".pre-commit-config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8cb3b8f8fe3db0b589c4b3949ddbf715c7faa8917bc28c7d83958164dc2e9678",
+ "chksum_sha256": "1320c5ff9b11290023c644644c9aabd686c2a042b82808a041c81b89709323b8",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.11.txt",
+ "name": "pyproject.toml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a78ebdfd69db8e98d3c61a6296c6b69e1a854edff052dc62a418ee0b4f0c2f48",
+ "chksum_sha256": "1cb6a45dfa2625123890b93ad7fdc156b063c16e8ae6dba11511a1d1986b0fcc",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.10.txt",
+ "name": "README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f5883f3880f187de0b2e7bcfd12f602d51ce7d2e5ce8b7950bf6be9b54625ea0",
+ "chksum_sha256": "02f71abaa2298e288406d32303715d8cf7ed39c626c68c0e7aa481629b4e8990",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.14.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e0874c9664e754bdf0781fc3ab4189276f92a38ed1ebd1c35c88063ee3b4badc",
+ "name": "changelogs",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/sanity/ignore-2.17.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4f6ecb77dad740fd70c0551acbed97a8df654127247051c541b091b07d1c415b",
+ "name": "changelogs/fragments",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/sanity/ignore-2.16.txt",
+ "name": "changelogs/fragments/.keep",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4f6ecb77dad740fd70c0551acbed97a8df654127247051c541b091b07d1c415b",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.12.txt",
+ "name": "changelogs/config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "02023c72751a2b4b25bba12df7722b2546c2be0af2a2279ccccb43845bbf27b7",
+ "chksum_sha256": "e9313ae1bb365e94e03fc01e2c0bd2df437019a987f388ae98e8ec669d498984",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.15.txt",
+ "name": "changelogs/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e0874c9664e754bdf0781fc3ab4189276f92a38ed1ebd1c35c88063ee3b4badc",
+ "chksum_sha256": "0cd0de0b505afc09149bad60bf51162f2c9129c378eebaecc7da9764f8f664cb",
"format": 1
},
{
- "name": "tests/__init__.py",
+ "name": ".isort.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "5328af170b936cfea2a47b7155e4647a89662e559bc2664cfb93dbab968aaea4",
"format": 1
},
{
- "name": "tests/config.yml",
+ "name": ".yamllint",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "de5087316490411841c67aa3307cfdd3acaea09875c9b4dee6852bca7c120764",
- "format": 1
- },
- {
- "name": "tests/unit",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "827ef9e031ecdcaf137be239d33ef93fcbbc3611cbb6b30b0e507d0e03373d0e",
"format": 1
},
{
- "name": "tests/unit/requirements.txt",
+ "name": "test-requirements.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "49ba996dc4735c3463e9af561344346dfae14bcc1a68096ce78364b377f0df1f",
+ "chksum_sha256": "9827b21d24f3ff2ebbcc07b56cb49e610f901f22e0b5fe91fdb329ead368c1f4",
"format": 1
},
{
- "name": "tests/unit/__init__.py",
+ "name": ".prettierignore",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "6fd3c3897f57e5447aa2809cf63ff611cbe624192bcc5e0f849cbb699a39eff8",
"format": 1
},
{
- "name": "tests/unit/mock",
+ "name": "tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/mock/vault_helper.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "55bd0e924dcc22d050612c944bff0ef745e51faac9260dce9b9b2018c4c8a661",
+ "name": "tests/integration",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/mock/__init__.py",
+ "name": "tests/integration/target-prefixes.network",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "d577d6580d29511474adecf53c2c66b66aced6b624c4f6c3781138d69870707a",
"format": 1
},
{
- "name": "tests/unit/mock/procenv.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8355a91c013778f8b70896222e8223d67b743fd8ba2bf541f4ea4d7d460b01ef",
+ "name": "tests/integration/targets",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/mock/loader.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2343d1f644250d4b616f0bf0a826fdee8fe306243d8412d44dd0e033352b262b",
+ "name": "tests/integration/targets/iosxr_ntp_global",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/mock/yaml_helper.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "134eef238c83a9611799871b743e49e9bfbcd8bdddf2cc6a7bf69fd1000345b3",
+ "name": "tests/integration/targets/iosxr_ntp_global/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/mock/path.py",
+ "name": "tests/integration/targets/iosxr_ntp_global/defaults/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cb57942afe0176fd422c5d6575f6b0bdbbd65d6293fe9709629b43febde81bef",
+ "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
"format": 1
},
{
- "name": "tests/unit/modules",
+ "name": "tests/integration/targets/iosxr_ntp_global/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/__init__.py",
+ "name": "tests/integration/targets/iosxr_ntp_global/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "33b4175617133438627a3921128a558f7c3cfd5e70b930808c06634e4fe3cbc1",
"format": 1
},
{
- "name": "tests/unit/modules/conftest.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e0ae70fa7c2a5e56d7f02a47c3602398cff60c8eb021772ac59a76df2a234048",
+ "name": "tests/integration/targets/iosxr_ntp_global/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/utils.py",
+ "name": "tests/integration/targets/iosxr_ntp_global/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "28eb2c4f6e6e313a757a627b1f895640d085503b0c65cbca688e55d8679a45de",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules/network",
+ "name": "tests/integration/targets/iosxr_ntp_global/tests",
"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",
- "format": 1
- },
- {
- "name": "tests/unit/modules/network/iosxr",
+ "name": "tests/integration/targets/iosxr_ntp_global/tests/common",
"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_ntp_global/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6c32855b7994966c3f0d9fe82b64d5da43c752733ad6d56ef317a9f589d484e",
+ "chksum_sha256": "37b4fdb1a797393df3d182478993235633244c539af30725013db77cec0d1178",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/test_iosxr_lacp_interfaces.py",
+ "name": "tests/integration/targets/iosxr_ntp_global/tests/common/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2b12a50fc121b717616624ff7fc723da7e7b0763020c601f6e15efdaa882e14c",
+ "chksum_sha256": "3ed2c59015cb8f315b1a7d5475e42fa855009b2e5d26f656eb6f80eaacf718da",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/test_iosxr_system.py",
+ "name": "tests/integration/targets/iosxr_ntp_global/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "18ca4af2bfd36878d3dcc62621e3ac8867ed6bd633cb0eb67b9a8c6cd042e827",
+ "chksum_sha256": "be949100104e75250b3f92b5f02d93e8a471631a4ef398d2c24d2030c1b3a57a",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/test_iosxr_bgp_templates.py",
+ "name": "tests/integration/targets/iosxr_ntp_global/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "06b203f1f68645ccb42a0209f60daefa26a2772027c6ec7d81ff0279ccdd2287",
+ "chksum_sha256": "c8999671a348fba3821b25049396c8971fe8a24a577d5d704c8c220c81d0ecf8",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/test_iosxr_prefix_lists.py",
+ "name": "tests/integration/targets/iosxr_ntp_global/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ac76602c2d3f50846008443db4ccfa0e6d860026c8a4fece9d1eb314826f6a27",
+ "chksum_sha256": "07b3031d563cd5f7a06f39a5e4edb6f5b3334d8dd70070337cec600a6355b08f",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/test_iosxr_ospfv2.py",
+ "name": "tests/integration/targets/iosxr_ntp_global/tests/common/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b0b8f75d7702691fda578c450ab02ae3b7a82ed7618b118eff602993dbe27678",
+ "chksum_sha256": "5ecf37c4d4f8799590d36debba286353a94b76fc0f89929f5cef6cf762337fe3",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/test_iosxr_bgp_address_family.py",
+ "name": "tests/integration/targets/iosxr_ntp_global/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1a48bb138dd97608d6ed2fe493f87712a857546e88afde6d5a3e0e72e28ddd9b",
+ "chksum_sha256": "12edb69044ee3a03f3bba8317b8d590ab8f7cb428e0b6047c6e86acbf91cfa23",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/test_iosxr_config.py",
+ "name": "tests/integration/targets/iosxr_ntp_global/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f4c979c923fc77ac99724a0e652ca77888ee74c2f8620fb1f87622b8d77a6aea",
+ "chksum_sha256": "3116e5b1f3807158456527c7d2ec5c4ba73c2f53d75a464c9aa0257257279ef1",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/test_iosxr_ospf_interfaces.py",
+ "name": "tests/integration/targets/iosxr_ntp_global/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "029def7ced9274ddb6ffa947069e9b7f4cb67a481822387cf0ed13b79b5f3632",
+ "chksum_sha256": "4c551ac7c741dcae87dfa4237c9c2387202c54e86e04d9140b8d7684d3560fb2",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/test_iosxr_lldp_interfaces.py",
+ "name": "tests/integration/targets/iosxr_ntp_global/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "51ec0015ee4e9ad9303753f8ea77c9e4de1f1bd1108e5d3f45d878282e62ef2b",
+ "chksum_sha256": "fd90f3a750d4f51a1d947cd1952156f4b8245d1d09d4741d57b882a9ee302c2f",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/__init__.py",
+ "name": "tests/integration/targets/iosxr_ntp_global/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "aa640d9b74a58c56f1bff39b0d710b0f9e072c59d1029e8028071ad927e83119",
"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_ntp_global/tasks",
+ "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_ntp_global/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "40ffd132d0493144e4355bedf9abfeed11ac6856f166454f4e34469eace23dd6",
+ "chksum_sha256": "afc73a39f8a8861930e2a6a542ccd07426663ec0584b218987ef2b456d8c00d7",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/test_iosxr_snmp_server.py",
+ "name": "tests/integration/targets/iosxr_ntp_global/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2f4639f4ce6651e4726f86fd0c52a432ce6a7398139f13531d7cf7f003923c3b",
+ "chksum_sha256": "73e48db0c23a63565816ea0d938e972a0a9daee404ea69b57fc39f403f1288ac",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/test_iosxr_ntp_global.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2f3f86a923d260fd853c936a01615c9626f63fe702759023143e80d2e169a24b",
+ "name": "tests/integration/targets/iosxr_facts",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"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_facts/defaults",
+ "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_facts/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4d83cdd234712c9b7e4335f30089919d5e22887f7868d6213f8247f64f8b44de",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/test_iosxr_bgp_global.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "22382fff971a2ef07e1ab7cb5fd0be7be02b4ef61d4ae226edd9dc32a3d1b550",
+ "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_l3_interfaces.py",
+ "name": "tests/integration/targets/iosxr_facts/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "87bcc3b439fe7a4d2166355b970e6bbd4ec1fd4dd11fecff65259938ed15fb4b",
+ "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/test_iosxr_lacp.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3a62abd2facd0bdd05c83b5487b9e43bb14fb2b8a100202670f964b3cf928e6f",
+ "name": "tests/integration/targets/iosxr_facts/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/test_hostname.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "674a5e683e09243e122946f5964cee3109ae4d909e192aee76cd78523ca4e480",
+ "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_logging_global.py",
+ "name": "tests/integration/targets/iosxr_facts/tests/cli/not_hardware.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cc84941d8983e27592dd930181b352a71f143a67aa30e0db98642cd1ba575691",
+ "chksum_sha256": "d45c23f2fed05fea77e4d6081381f243f895035b72a52be4a28d46215dd9026a",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/test_iosxr_user.py",
+ "name": "tests/integration/targets/iosxr_facts/tests/cli/all_facts.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4777b0df4a2e3ca72b179a9955d2d5ba8907f1b80e00f3be50699f3d8a90a61b",
+ "chksum_sha256": "09ddaf160ad114c35a1a1abee7ec06230e2c0c1c20a7e465aa479d25ec892e3a",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/test_iosxr_ping.py",
+ "name": "tests/integration/targets/iosxr_facts/tests/cli/default_facts.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7b7870144513d4063568e7b3ae7b21b8e353b286252c43f7efcb3ff5f1b8e9fc",
+ "chksum_sha256": "1db28925de61b31d4d1494430b130beb85579fe7f3ac582b05ef26ced8161c28",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/test_iosxr_n540.py",
+ "name": "tests/integration/targets/iosxr_facts/tests/cli/invalid_subset.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "25af4a8b6f30f904cef024bfb673c553f73039ff3dc44dd31d4d5bdf5720e735",
+ "chksum_sha256": "9dc93102aaeb6318fa47c746d0ef7e6eecfc39757b5e0af1e9503a309c6118db",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/test_iosxr_acls.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7f5f7deb3c6e2835f74cf3eaac1f8fca7893e84117071dba2f235b42fbf681c7",
+ "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_banner.py",
+ "name": "tests/integration/targets/iosxr_facts/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "08ca981cb107565a78d51790ad4d9fdccf1f744b6ce5098ce101da34b0294fad",
+ "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/test_iosxr_static_routes.py",
+ "name": "tests/integration/targets/iosxr_facts/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "789b96b3f9a9a76acd2cf9e2eb4a2743203b8baf72ea8872b64f095189ffb659",
+ "chksum_sha256": "aeaea690f4a27b4af77c33a24968cdc89de2ca73e590d9ec1db4b80842750bb7",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures",
+ "name": "tests/integration/targets/iosxr_lacp_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/show_lldp",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4135607fe98acfedbef4f2d3305b4ade7e5e833130f049f310b68f32ce451c66",
+ "name": "tests/integration/targets/iosxr_lacp_interfaces/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_config_config.cfg",
+ "name": "tests/integration/targets/iosxr_lacp_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6fe81e446733fef4e3643a80042ab4111b9b0c927599c4b5972ecea4c18b4ffd",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"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_lacp_interfaces/vars",
+ "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_lacp_interfaces/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8a6d31304503f7cd58289c7ab493bab726a003a69dbcfff3177f82e051180ff4",
+ "chksum_sha256": "29a8acf3766df1e54abe6a3dadfc393571647722393b132444952162b30a60ae",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/show_version",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "089ab6658c475d1146f913b1cdee2671b46051958e2b7f562da626d327456726",
+ "name": "tests/integration/targets/iosxr_lacp_interfaces/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/show_processes_cpu___include_CPU_utilization",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c6eca4811fafb01f204de26b037fee16d63aca082ce05d57b9f0c52fb502ef66",
+ "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_lldp_interfaces_config.cfg",
+ "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/_populate.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1c4e458ac2250cfbfacd5b53e5937c792bdf09a36bf42c7d27cb5add93ffb693",
+ "chksum_sha256": "2b84773b00c039d32e50e18779dfd48fc98e4f0012351d6d6c1ecbd740d25936",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_acl_interfaces_config.cfg",
+ "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a5870ad2392bc344f5d7c254ecf5f1b5d317527c2efa346a55a3a73fb0ccd10e",
+ "chksum_sha256": "417f4d3094f95606aac731b14ae567a97c7b703114b88423cb677e0f6b2cc06c",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_lacp_config.cfg",
+ "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1ca4b510769bcfc42967e42d1b560e18908724b345676fb68e76571dfb84e847",
+ "chksum_sha256": "9dad2238d7ee4b8fb78919028c1bb64ba29d4e2088f53ecf5fa99ea9c5e29c87",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_static_routes_config.cfg",
+ "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6e148c74b09c0b22e87e8e55b815a0250281aa8daabde38b951b425cfbec2442",
+ "chksum_sha256": "d6ba2253349b074129effa793f31923b22ae2448ce58a9549023db855839460d",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/show_lldp_neighbors_detail",
+ "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4135607fe98acfedbef4f2d3305b4ade7e5e833130f049f310b68f32ce451c66",
+ "chksum_sha256": "14d91239138aa32bb7f451a89aefff422136e57427583623a172747eb5814453",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_lldp_global_config.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cc8ece13d91edafdb680a275bf4c794d642f584b24963f75e91d399d26e90dce",
+ "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/fixtures",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_lacp_interfaces_config.cfg",
+ "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "04b1c2fbc56979e8df559dc3a499adaff452c0815be45fe4a0e2b1b74f740831",
+ "chksum_sha256": "81e585cfbf29f1293be9881382ce419c6a2b0cbf9c1f87be057a241de2f44f98",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/show_memory_summary",
+ "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c0fedc43463c95b152254b43d741b62c704ffc82b2707b758d1294283384c4e0",
+ "chksum_sha256": "be06b4f3cb25a95c6d1950c4919025c1cb15e114624d59b18c0eaa5a7d79b52f",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/__init__.py",
+ "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "ec8d829135a6074a8ad75ee76a2a1a4079e03325d92c0e830515cbf90f31eb6f",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/show_running-config",
+ "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9442b8aa3e29caa5725d8968da29fa173e998d7c664c92b3ddd66a7aea76a71e",
+ "chksum_sha256": "a8d21a0b454b78c9643c6d1c47de95eafb44e9199b1a8bca7588c0d9c91cca02",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_config_src.cfg",
+ "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "57d42d2e8e8b7a4b6cae566115ee42fecea077b525cace10cefc3b7dbd85f033",
+ "chksum_sha256": "6e7cf195c2dfadb34e7393d4c74acbbfcb568899d7461c2bb6b4fa5acbc48b70",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_interface_config.cfg",
+ "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cafb0268e9f22c966719d76a2b7267d966ef98748f68cf3594ea55a3efd03945",
+ "chksum_sha256": "717d1fb8c96130db8d6288c45c7c8dc46222d03917bf77b322b871ffcafd3a99",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/show_version_brief",
+ "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e4eb1b26a35a3c5bcf1e45eab472c8d59ff0559cfbfe701cd60c17ee6d9d6957",
- "format": 1
- },
- {
- "name": "tests/unit/modules/network/iosxr/fixtures/cliconf",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "f5bdefcaae69fa3cffe08302fb9dc9f706c3fd00edd4d2c86d032983d66bedbf",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/cliconf/iosxr",
+ "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/cliconf/iosxr/show_running-config_hostname",
+ "name": "tests/integration/targets/iosxr_lacp_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "749f869982a235df56c1c7e404744c441340ff6da90dece0c8b83d63ff47e7af",
+ "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/cliconf/iosxr/show_version__utility_head_-n_20",
+ "name": "tests/integration/targets/iosxr_lacp_interfaces/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cc08220e9647a2a3d34640ffabc08fd34f9601e229ab7cdf5ce4224f62cc158b",
+ "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/show_version___utility_head_-n_20",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e4eb1b26a35a3c5bcf1e45eab472c8d59ff0559cfbfe701cd60c17ee6d9d6957",
+ "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_banner_config.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "373fefe369cd647022df09438152a869d3c407cb05c51b3bd8214b81471d76e9",
+ "name": "tests/integration/targets/iosxr_lldp_interfaces/defaults",
+ "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_lldp_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "151235002e58119649b79a98cbacb5ce155225e31aa0188dd8085ee0961feacf",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"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_lldp_interfaces/vars",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_ospfv2.cfg",
+ "name": "tests/integration/targets/iosxr_lldp_interfaces/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "27b9a4a53478778c5781170c052ba66bcc09dcb40aab0709d28018f6cd332126",
+ "chksum_sha256": "0dca88a635c4df7935a64b62dcc4e29afc8ea29e79c5a69790d9fa39248aa593",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_system_config.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "18ae20e11b3f557435b212a739a50c59c95e4162dc13989695e6c14ae35e58f7",
+ "name": "tests/integration/targets/iosxr_lldp_interfaces/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_acl_replace_config.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "197b575ae7d14aeb340f84bcb05ca1e4c7f84786dec07881afb650cc75106c20",
+ "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/show_interfaces",
+ "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/_populate.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e37745f7a4d614d0aa5da44df8a0acaea5820a5900d65cabe9640ddcb7e6ccd1",
+ "chksum_sha256": "1fb4c8047c353cd10a83ff0a2f9eb2c3455e1b72e81165bfecb475a5969d11c1",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_acls_config.cfg",
+ "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7415a69cdd33bff4395ad90a4cf6a930082691564493b998844e499a5039d13d",
+ "chksum_sha256": "e2d359d45a561dcc99db2945a7e3de3c4e3564caaac19c643672331b7a2c26e0",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_l2_interface_config.cfg",
+ "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1c18f829582b9ed3a84bc5226dfd05be9c736dc0c949d61f719c71284e747e1d",
+ "chksum_sha256": "095271b41184a0146f918498fb43a1d4808359cad386c08f3ff6ff8ae3991fc4",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_ospf_interfaces.cfg",
+ "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c3e8a76362099f436fe64dbd9dfc6401c862dac9c7b36be4ec83b36d125be2b8",
+ "chksum_sha256": "bac4a7214f9a2a43940bb7ea473ad5c479dfed034cb1f092169751886339a4ab",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/cliconf_ncs540",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/empty_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3c0a26973a1f425dcb788f4de6ffb431f0fb3cb439b285427e259545f81d6079",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/cliconf_ncs540/iosxr",
+ "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/fixtures",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/cliconf_ncs540/iosxr/show_running-config_hostname",
+ "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "749f869982a235df56c1c7e404744c441340ff6da90dece0c8b83d63ff47e7af",
+ "chksum_sha256": "09906ee86cc2c5b1a515dafa190e3576def507f53ed9563c471db011ab76eb54",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/cliconf_ncs540/iosxr/show_version__utility_head_-n_20",
+ "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ca53ef4a0ab10529e7d5df9fd669fae547be148b08ee7075141212ab90a1e929",
+ "chksum_sha256": "0bdd704c64456dc5bd746f258448a6c7c132cd3b2f06849f59bc8454e1b93189",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/dir_7all",
+ "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c5e2c218c5731bee3f874af0bc5d5694a426ceba650efc03795a5739235f0120",
+ "chksum_sha256": "78ab712357d68b164ba677cffc2bc61cf9184dbe7eb616461b039880544c9d4f",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_user_config.cfg",
+ "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e387d5d8b668b1f290872aab2a3e8f8de3d4bdcb99906b8bbf618b950f0c60e9",
+ "chksum_sha256": "2c10d1cc4272407919910b0b6c62badf94ef67f853fa1ac99a581603cc9ed7da",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_lag_interface_config.cfg",
+ "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "25aaec36c88ca1c78bdae21f0a0e072929ce56e56f569967927ab6def72d972e",
+ "chksum_sha256": "4c33155ba2ec1dea7921b926e4baa656122f8bdf75ab4e39c85fba98e981d7f6",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/test_iosxr_acl_interfaces.py",
+ "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8ec7f7a7253a073da59b55053ac9d52714a9f6ddfe55966a4333730f9fe6a355",
+ "chksum_sha256": "aa7e3e3c95400ac64035e994ec52bc2663674bb98562dd66e70cd1a18cab813b",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/test_iosxr_netconf.py",
+ "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "209aa02e404cf255e643c487b9c44442ed9b5e17ac62c5526c0c02825c6694d7",
+ "chksum_sha256": "6e0d64d1e1033c62bbc4da61e6f2e49fb79ca27eba372a6c557a6fabc8b01548",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/test_iosxr_facts.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b1949ff68f966a8319f8243b815ea48024ce7e72b3e98606155c205a40568280",
+ "name": "tests/integration/targets/iosxr_lldp_interfaces/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/test_iosxr.py",
+ "name": "tests/integration/targets/iosxr_lldp_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "775a3f292dd11bbf06389c191e39f326f65655899f046cd2f9d0fc53c527b972",
+ "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/iosxr_module.py",
+ "name": "tests/integration/targets/iosxr_lldp_interfaces/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "44fe73a4355f43b735971cdf2927a17ca35a317d8d3dcf7eba3679e42f827bf7",
+ "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
"format": 1
},
{
- "name": "tests/unit/modules/network/iosxr/test_iosxr_interfaces.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "980a9645e0fb54365d3ba45c0965ee1c82884870a8cb239bbf38ac0910450a42",
+ "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/test_iosxr_l2_interfaces.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "fff7eae63c3d46e98264e6bdd9ab6c2009bd84bb53ff4a53575228f774a4036e",
+ "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/test_iosxr_lag_interfaces.py",
+ "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e64ba104e28f652f4300a8e7c43d4aec50ab8bb28f8f97d5bde22099f8f20b6b",
+ "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
"format": 1
},
{
- "name": "tests/unit/compat",
+ "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/compat/unittest.py",
+ "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/vars/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "727203a3846be41893b78a4b77852a1658925e936fb19539551958a5d8e8fb81",
+ "chksum_sha256": "f9a9d7ca96d490c22c02070c8c68ba92103e69f4a072341a141d204d7173fe9f",
"format": 1
},
{
- "name": "tests/unit/compat/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/compat/mock.py",
+ "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4e0ca26e6e2982bc40db782db3a0d4950e8c5a749171c0da22c27c85acd23ea",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration",
+ "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets",
+ "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_banner",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/parsed.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "312204dc90b5c1572a58a7a44d7590f6da0274af0a9ac9102c9c1e762694d64f",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_banner/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/_populate_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "018ace52485c2b1609f5d7d8893cfe0b99b5204eecee7eea3d3b634d614a1e1e",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_banner/tasks/main.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/_populate_vrf_base_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "303b9dff6309fcb32b8eb1e05d36298973519248849c1ddb442a6ce54e4ae491",
+ "chksum_sha256": "9d94b9491a045f06789eaaa96222a72a7dd8f65c48d45d88dba16fac049fd704",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_banner/tasks/cli.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aeaea690f4a27b4af77c33a24968cdc89de2ca73e590d9ec1db4b80842750bb7",
+ "chksum_sha256": "52cb77efeb2277f2766261efd23be1b385eb0a279a4858a160fbb23e6790f898",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_banner/tasks/netconf.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "74e0fd06296ba78b354273f00e39a2cb9f77e8102eddc40deb284d83c52255ba",
+ "chksum_sha256": "9c36f82fabc3726780c6dcef3a0fa8d4d7fa7d019fef1d97e076b8fe18a443fa",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_banner/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/_populate_base_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a6c17c3999a6aa6f3d39720a51223d01ceba114a4e704ed27bec76342cd0abe0",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_banner/meta/main.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06",
+ "chksum_sha256": "bb4ab173f008550df0cc48f83ecb505db4299ee8a9f026dff12c5af63d14b7fb",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_banner/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/_parsed.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f559ed5b722bfebecf0cb6a696f9bbcb6ec56cf63c25e47be07bf9478e556e4e",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_banner/defaults/main.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
+ "chksum_sha256": "faf8165e1aa4827820ee0e9a0ff2c418cf23c682592ada66b626266facf9d1b9",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_banner/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/_remove_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c455861f770ac7341d3e29ba6804ffdd075bd6fac56f4e5f07b494eb12aa6cc7",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_banner/tests/cli",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/_populate_vrf_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "19489912900216d55b30d715921bf8e1edad2d1945ce967383c9b10bf045aa1e",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_banner/tests/cli/basic-login.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "00656d9558735dc363fc4ba83a58620f10aa6ad82ab4554f00ed2655922f59bd",
+ "chksum_sha256": "70746bef62da91f4d74143ebbaee0b443f901bda32a4f1e5a841b32d4c6f6f66",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_banner/tests/cli/basic-no-login.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "25e88c9b68237bdf23639108d7085f04bedec5592b86fb12467e7e3ba449ca2a",
+ "chksum_sha256": "80bdc3eb58879b59242b45b0227e215f0c14772fb790850a5c4614c1d040852d",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_banner/tests/cli/basic-motd.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/_route_policy.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a63b5980f97093dfa1ff3c6f3730f2ca0eb3c011af4430267f16cccdc0234d72",
+ "chksum_sha256": "0357901519ac8ac68f6c7059838c4cec150ef91418cbe8f82efc4c0d43f6fa9c",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_banner/tests/netconf",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/replaced.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "cb254762f05493022cfab5268eb344f0aa9c5f62129bd422903006e890d1f01f",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_banner/tests/netconf/basic-login.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d831f48454277a06c4809abc0d238b1963f16278853be6be3eee834b0bffd3ba",
+ "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_banner/tests/netconf/basic-no-login.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/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_bgp_neighbor_address_family/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "52cb507d481aa76f0a7685583fa5c7828e6271804fe2a90b34fa7159c24eae54",
+ "chksum_sha256": "73e48db0c23a63565816ea0d938e972a0a9daee404ea69b57fc39f403f1288ac",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_interfaces",
+ "name": "tests/integration/targets/iosxr_hostname",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_interfaces/tasks",
+ "name": "tests/integration/targets/iosxr_hostname/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_hostname/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_hostname/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_hostname/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
+ "chksum_sha256": "8fb0722d13cbb07c9e9d85b76efbdae857bfdd1801b6aa0501a52946e6b6d588",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_interfaces/defaults",
+ "name": "tests/integration/targets/iosxr_hostname/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_hostname/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_hostname/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_interfaces/tests/cli",
+ "name": "tests/integration/targets/iosxr_hostname/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_hostname/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "44b35581001d7173e1b8f2fb5c3f8804692c59c87594ba3f4bdf1458cdd56256",
+ "chksum_sha256": "823462a54fe9b7f711ce0331124bd72c3c4029547fd7d1c2e5bd1da25582cebf",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_interfaces/tests/cli/_overridden.yaml",
+ "name": "tests/integration/targets/iosxr_hostname/tests/common/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "26eb03219bcc0caba6d5b3be37a6bce7fa846c1e5ea6d2df9a5fba581597d7af",
+ "chksum_sha256": "b3905393cfeb5a880d6f501a9813b52d787c771504efb07291ea4bdf91a83457",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_interfaces/tests/cli/_deleted.yaml",
+ "name": "tests/integration/targets/iosxr_hostname/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d1264641b82c36fe0d15026aa6bcf379dcde00c183ca8f1283a7e9db9880c50d",
+ "chksum_sha256": "1fb084918ff5f04f5da804437d0287f888c6b225be719b39e7599e4d2928890d",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_interfaces/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/iosxr_hostname/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4b561e6501b1861665d181d39f4882f6c99b610c359d7294443b5e37722edf6b",
+ "chksum_sha256": "348ce984e68aabc275d61e8143b23c6cc59765f2510b073a4c611fa62254a4b7",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_interfaces/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/iosxr_hostname/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9e989cbdc6bc0299a75483abb2bc9f771224d13dbdd084992fd71e6ef57f1a5a",
+ "chksum_sha256": "a89c158ee6a5732379e2b446d1d6e307cb116b5a4f602e32781b5e11598f3c9a",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_interfaces/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/iosxr_hostname/tests/common/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6957f1a450e714240cdf34121eaf5099db25f1bda037680c8af357fef80839b",
+ "chksum_sha256": "1b0de89ec88a4c3c844244ea9b8a24ef5d12fe4ec4932c525b720742d77334fd",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_interfaces/tests/cli/_populate_config.yaml",
+ "name": "tests/integration/targets/iosxr_hostname/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": "0c727923bf03a87bd59efc3eb98d414cf99ea84ac3748d32412b7eee33996553",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_interfaces/tests/cli/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/iosxr_hostname/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e7f495f2b2f098efc4830e55aecc165536ef8cacbf35fcefc030cfa3a6a5a345",
+ "chksum_sha256": "33bb48f812aef67e24ce8cffc06916f7f8adbb8977853170aeb32dd150bf334e",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_interfaces/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/iosxr_hostname/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3915314d2bb6a8c96a0f18c7cc4d1bdbb6a16e78a660baf7328ca5f6fc854a1",
+ "chksum_sha256": "e2591c3d8f9408a6d1879a028da5491a9275c44601b28d5d1341818ecab434a0",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_interfaces/tests/cli/parsed.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9d90b33bba17d4d2ae74d79879e9163f0c413e1d4f076d7817c3a856e456e41f",
+ "name": "tests/integration/targets/iosxr_hostname/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_interfaces/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/iosxr_hostname/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c2426117bdd1320e641684a463c4b947c1864f76710eda7ed9a36c06c1b3615f",
- "format": 1
- },
- {
- "name": "tests/integration/targets/iosxr_interfaces/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "afc73a39f8a8861930e2a6a542ccd07426663ec0584b218987ef2b456d8c00d7",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_interfaces/vars/main.yaml",
+ "name": "tests/integration/targets/iosxr_hostname/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "628f1746159ca78d2b44a74e2309d2db9b380b5a8582fb2c0f0b92c3ba38e95f",
+ "chksum_sha256": "2d3350be00fa2af0f217f369684578df724bcf9550402e7a54ef1b84f32dcb53",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ntp_global",
+ "name": "tests/integration/targets/iosxr_snmp_server",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ntp_global/tasks",
+ "name": "tests/integration/targets/iosxr_snmp_server/defaults",
"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",
+ "name": "tests/integration/targets/iosxr_snmp_server/defaults/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "73e48db0c23a63565816ea0d938e972a0a9daee404ea69b57fc39f403f1288ac",
+ "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ntp_global/meta",
+ "name": "tests/integration/targets/iosxr_snmp_server/vars",
"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_snmp_server/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "0f9c668532272c0b616e70d3d77dae2fb25871e3d07b04cc8702b25f51ec4ab1",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ntp_global/defaults",
+ "name": "tests/integration/targets/iosxr_snmp_server/meta",
"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_snmp_server/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ntp_global/tests",
+ "name": "tests/integration/targets/iosxr_snmp_server/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_snmp_server/tests/common",
"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_snmp_server/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3116e5b1f3807158456527c7d2ec5c4ba73c2f53d75a464c9aa0257257279ef1",
+ "chksum_sha256": "990985bc43befcb4befb0737e5dc22784856b95aa04a8139dee5020628aca31d",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ntp_global/tests/common/deleted.yaml",
+ "name": "tests/integration/targets/iosxr_snmp_server/tests/common/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "12edb69044ee3a03f3bba8317b8d590ab8f7cb428e0b6047c6e86acbf91cfa23",
+ "chksum_sha256": "51190a6fdbc4b50898f72ccb49c0e3f7c8856ed9483e53bffbae15805d583c7c",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ntp_global/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/iosxr_snmp_server/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c8999671a348fba3821b25049396c8971fe8a24a577d5d704c8c220c81d0ecf8",
+ "chksum_sha256": "81d07f1d66f078236899a5e835c4d53479004393bfb1ca80caccd1afa0cdea90",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ntp_global/tests/common/empty_config.yaml",
+ "name": "tests/integration/targets/iosxr_snmp_server/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "07b3031d563cd5f7a06f39a5e4edb6f5b3334d8dd70070337cec600a6355b08f",
+ "chksum_sha256": "4d26d4eb07781e55845119a7c3513bc94bd975804d6a5e2f86a63086bffaea4a",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ntp_global/tests/common/merged.yaml",
+ "name": "tests/integration/targets/iosxr_snmp_server/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fd90f3a750d4f51a1d947cd1952156f4b8245d1d09d4741d57b882a9ee302c2f",
+ "chksum_sha256": "d365f215fa2285f64eaffc334997ac4ba381ba0fe72d1f0ddcfecac8b076eda0",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ntp_global/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/iosxr_snmp_server/tests/common/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4c551ac7c741dcae87dfa4237c9c2387202c54e86e04d9140b8d7684d3560fb2",
+ "chksum_sha256": "a4e26c01ab8c4e0f46bbacc76fc290c380ef19ae68f2f3e48db74c3f3e0554f8",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ntp_global/tests/common/_parsed.cfg",
+ "name": "tests/integration/targets/iosxr_snmp_server/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5ecf37c4d4f8799590d36debba286353a94b76fc0f89929f5cef6cf762337fe3",
+ "chksum_sha256": "ae3ae2d79689b84f4e7d6094ce2e78a4ff7e4ab351b50893aa2ffbb47377e75d",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ntp_global/tests/common/_populate_config.yaml",
+ "name": "tests/integration/targets/iosxr_snmp_server/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3ed2c59015cb8f315b1a7d5475e42fa855009b2e5d26f656eb6f80eaacf718da",
+ "chksum_sha256": "c84f687a0d23e760666157720b95281a7e02562f1304efbb9c904f542c7ef969",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ntp_global/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/iosxr_snmp_server/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aa640d9b74a58c56f1bff39b0d710b0f9e072c59d1029e8028071ad927e83119",
+ "chksum_sha256": "92a61d453a67eba0f68f754f46ae9ef6b90567ad40e8555fd46868a595bef998",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ntp_global/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/iosxr_snmp_server/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "37b4fdb1a797393df3d182478993235633244c539af30725013db77cec0d1178",
+ "chksum_sha256": "d537c09198b49b391f157eba859faa21d25fe4e4db79228887b12586b2207ef7",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ntp_global/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/iosxr_snmp_server/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be949100104e75250b3f92b5f02d93e8a471631a4ef398d2c24d2030c1b3a57a",
+ "chksum_sha256": "a38d54a4fd46f4c94df79af4550ad013eb6cf28a11f2ddab930527a035c6349a",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ntp_global/vars",
+ "name": "tests/integration/targets/iosxr_snmp_server/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_snmp_server/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "33b4175617133438627a3921128a558f7c3cfd5e70b930808c06634e4fe3cbc1",
+ "chksum_sha256": "afc73a39f8a8861930e2a6a542ccd07426663ec0584b218987ef2b456d8c00d7",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_logging_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_logging_global/tasks",
+ "name": "tests/integration/targets/iosxr_lacp",
"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",
- "format": 1
- },
- {
- "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_logging_global/meta",
+ "name": "tests/integration/targets/iosxr_lacp/defaults",
"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_lacp/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_logging_global/defaults",
+ "name": "tests/integration/targets/iosxr_lacp/vars",
"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_lacp/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
+ "chksum_sha256": "28efea0049957f8eb23160dce61b09a38b89b1fa61bc53f4f53b7f809b4eebd1",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_logging_global/tests",
+ "name": "tests/integration/targets/iosxr_lacp/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_lacp/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_lacp/tests/cli/_populate.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6b79a9c0fb64ffb5ea3b2499161f3d284af835a1e17ff12cbfe838a09a936573",
+ "chksum_sha256": "fe0b5773fcd48afa2ba50bdb1cc2318f5d4dc3d46362db64195210f5ff26acf2",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_logging_global/tests/common/deleted.yaml",
+ "name": "tests/integration/targets/iosxr_lacp/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "279dfdbc6e8e658f0034995198e414253f0a512c6590a311da073cae0a52d15b",
+ "chksum_sha256": "c9445f3494ae6fab46f8a866ba98cccfa586ddf8b3c467ca3e6da1a757d83e7b",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_logging_global/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/iosxr_lacp/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8149279cc0a1da197893f2b231b99e89d35f72f7eca43c0ded62a1f7938af73e",
+ "chksum_sha256": "3f35e7101f1490cb9fb6467b196a0b527dd72ef2a8d72925ec6567770bd58832",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_logging_global/tests/common/empty_config.yaml",
+ "name": "tests/integration/targets/iosxr_lacp/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2b6b32698c946e6caf83b8d756358cf0fe146dcdf81efd2b020ce595eba38bd4",
+ "chksum_sha256": "ba2306dde118373ceb847e377f4d6017846446a5d4f20350f3dab7ef76ed6c9a",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_logging_global/tests/common/merged.yaml",
+ "name": "tests/integration/targets/iosxr_lacp/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8e2c26f79a8f6cc6611dd48d408df870cc43853b8d8dd9ebe0af83465119b0df",
+ "chksum_sha256": "d208dc3d0e8a9a35951844e6a916db895790ccda6bd7bb550b824a7eb4477b30",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_logging_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": "d72b330e428d01f36ce0ba454497558efb2aaa4a3d2f4423378d93febb7025a4",
+ "chksum_sha256": "b053b09f9388c7f6208c51e8b9e53867bd6352bf37c9688f28b02ab348ed3767",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_logging_global/tests/common/_parsed.cfg",
+ "name": "tests/integration/targets/iosxr_lacp/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e9111575d03ca3e8cae1744708bc4329dd05fdd40ab5468d722198a6728b1dac",
+ "chksum_sha256": "66d389919e87982a7de0c3a90adfb49bb46d953079385a160b96eade8ab816d0",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_logging_global/tests/common/_populate_config.yaml",
+ "name": "tests/integration/targets/iosxr_lacp/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "909a21409e28a252b2c0d6fccf1e6c0e2cb51d710665aa7c0cafc11d6679a727",
+ "chksum_sha256": "93f1a75fd2d40c2d5b43a04650b66fd0d98e638e951373de1fbe2f5e22b79ce8",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_logging_global/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/iosxr_lacp/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "02dd8a9273d456e158f8810372ee5f70c1b4ea56d70cfa11eb6dab8f9023b558",
+ "chksum_sha256": "b8a5a0ab330416618101c508230864f1c4d2956b5d3babe9e74ac3c295439a3c",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_logging_global/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/iosxr_lacp/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "10bb238d21d24df6fe4e476d542492839c1943430ea17c6cf9275eb4790da423",
+ "chksum_sha256": "26c4083f5bd77b0b8a4a7866d3a93116bb2f0a0e9a3620beb2651b37cd2eabbb",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_logging_global/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/iosxr_lacp/tests/cli/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "32b4a5eb23f7544ff53968c2f2f714963b86c198caa83facbb6e36be9cb85d49",
+ "chksum_sha256": "1539a41e787502ec7781cbcb2c00157799a196ce6da851d0565b96d14db4059b",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_logging_global/vars",
+ "name": "tests/integration/targets/iosxr_lacp/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_lacp/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4a069b29e331858b268f0a2ab9ace19d5bf793703a8b5c452ac8724a6570506e",
+ "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospfv3",
+ "name": "tests/integration/targets/iosxr_lacp/tasks/cli.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/iosxr_l2_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospfv3/tasks",
+ "name": "tests/integration/targets/iosxr_l2_interfaces/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospfv3/tasks/main.yaml",
+ "name": "tests/integration/targets/iosxr_l2_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospfv3/tasks/cli.yaml",
+ "name": "tests/integration/targets/iosxr_l2_interfaces/vars",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/iosxr_l2_interfaces/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
+ "chksum_sha256": "c659daf4218da5a2de29b769dc1250d37a6a80151c93a58fb3958289f5d8d59f",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospfv3/defaults",
+ "name": "tests/integration/targets/iosxr_l2_interfaces/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_l2_interfaces/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospfv3/tests",
+ "name": "tests/integration/targets/iosxr_l2_interfaces/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospfv3/tests/cli",
+ "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli",
"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_l2_interfaces/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "46bf472822cc2a45ce47c1ac6c8059fc5f228be53f0ee692765832aa1541f811",
+ "chksum_sha256": "9eb5c038a48458b36702ea94d1bc8172511a8eadeec71fe922d406cfebf4b5c7",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b353f038fe3608efaa4fe240c2490e4d96479df9fac05c5e65b382b2b5eb45e5",
+ "chksum_sha256": "86dfa2d949109a946c52fca30228bdf700908e44f122a528c64d6952f5d45a78",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b74c20ce7b08e53ee2f6ad55e8964e7d763329b130c8a57f5962395f1daf2a13",
+ "chksum_sha256": "ca461ff84f99d15126252d878ef50b92ce916783f8cb6ff91f2e2342144dcd7a",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "771f96cd83c9a893ed5ea4eb2d25b331fa2728f8399f0fb2327327a2eea69eb8",
+ "chksum_sha256": "133cc3a327728f918408d45c77742cd31e4cc17537871f0d02674a5a48c394c7",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/rtt.yaml",
+ "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fe864b51e70814be13bf52e56f90108c6f6f874ddf23fc9c229019215bab349f",
+ "chksum_sha256": "a4d9508554b3caf42a189031a45bbe918f8d87ab46b49670f824f45e84f1f73b",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/merged.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": "0432f28e01aa6fcf74a9f27e1d245b6e7368bdf7c4e6cada6911becc1a5d8cd6",
+ "chksum_sha256": "26b4e7ee16aab6f1a3a11e5b8dcd55412e8afba623415469b2aa057b23126745",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/overridden.yaml",
+ "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "296f132a73194b9b2d134f6cba1b69da8f2e1f3345c4cf5952c8fe686e1eac91",
+ "chksum_sha256": "b908ec71d04a400c46745f5f6aa67edc06711a6fa409bb6ed2570d7b7bbc7f88",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/_populate_config.yaml",
+ "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "97c41a9ab68d27a209106c1f47557a5659ca2e8914fdef8e29514b208c8c771b",
+ "chksum_sha256": "50d4197872d8d2199638a7049cfcaac7c3d9332ccdc4b432d84ab9eac3fe0899",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "38ac896b32ffc759f2b4e498126f827b96d1cb0cec61a9c8e1669aee7d68af1c",
+ "chksum_sha256": "9b651c37d64cbc8d8ce70ebbf64f9edf9f32ec1b9986713f8e786bb8dd1a5b93",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/parsed.yaml",
+ "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "820c9d8378bc3893f82eef7b74466761336b9e7acf36c99a76ab549c03fefab0",
+ "chksum_sha256": "18a4c9c8fa0b4717435de1c5b0c06e1bcc37099d4e1e2f50cd52755b5382d90f",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "959f73cb330969c6963963b3a9c6ced291c02803d8b43e0d280691e1abb94a88",
+ "chksum_sha256": "8735a17ccab3ecd1af096f3d1c722e7db3b0ae5c7e48667aba20f9ec6b155d08",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospfv3/fixtures",
+ "name": "tests/integration/targets/iosxr_l2_interfaces/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospfv3/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/iosxr_l2_interfaces/tasks/main.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": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospfv3/vars/main.yaml",
+ "name": "tests/integration/targets/iosxr_l2_interfaces/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fa66fb8ce0cc80369445c497f68d5e087540f12ad98f96f181e99c7500e5f232",
+ "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acl_interfaces",
+ "name": "tests/integration/targets/iosxr_bgp_global",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acl_interfaces/tasks",
+ "name": "tests/integration/targets/iosxr_bgp_global/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acl_interfaces/tasks/main.yaml",
+ "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_acl_interfaces/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": "cdac5ecec5537510649ea64ca19a23351ebc7e9783ff4fe4f220079ed2c37bf7",
+ "chksum_sha256": "744a98c76b992e1adb641f9f1770a9d7aafe06e4c75ae8a26c889b6fd99b376f",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acl_interfaces/defaults",
+ "name": "tests/integration/targets/iosxr_bgp_global/meta",
"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/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acl_interfaces/tests",
+ "name": "tests/integration/targets/iosxr_bgp_global/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acl_interfaces/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_acl_interfaces/tests/cli/deleted_all.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_global/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3fe49d80821c922d19f9db8e41eb9a60b6328f43791322450bf5d78899332dcf",
+ "chksum_sha256": "2ada9252d595d233bb3b7e2a01900965416d147291a2ac3b443c70c9478cad60",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/_remove_config.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_global/tests/common/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6950308b0007d4bd83a9207819818cafea411ea68e0e0d16cd0b142257082729",
+ "chksum_sha256": "73d93464c7e118949c3a6da1e915242a227681ab6ba766d5de54953c3cd6dd9b",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_global/tests/common/deleted_af.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e428186b1eddbc63e5395419d8183ba503bfb276767d1c1e7fff71da95af734d",
+ "chksum_sha256": "7c45590bfc752fc39a81b8b358968e75e75335e4c3d6449f6a8ca051999fd2ea",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_global/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "107424d86e345ce03603238560177493367356c6fa158092d8c272e20f8b3572",
+ "chksum_sha256": "05d664f2d11d59132b41ab8f93edcb49d06d8f827796db4c9dab60549b4166b3",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_global/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ce73c16381b1f6d60eb2a28255e2c73d3e440383faf5b4c592be6a2a17ec4cf0",
+ "chksum_sha256": "0d3f42e30ecfd27dca2f459e67fcb29aa7eb221087dff2125a4b50e24de047c9",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/rtt.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_global/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ed9f2b98d464bf8603d35a074fe2d50eb66d3a2c595967f48de1264a2038dcab",
+ "chksum_sha256": "5dd7dce83c0f85059155d19b0844f40613a98e42f0718a0fa319c1bfafc0b775",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/_populate.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_global/tests/common/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "25049f0c45154ecc9748bca191fbeb5239511e4a87cc68964b1899d9731f178b",
+ "chksum_sha256": "69b28ec7e3b77375e263157ffdbc2e5c7dea56353f9a906f0efdab44aaba2efe",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_global/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "646caf77a4a5a75a19987a0316b75e38bcdf89ee4cf21a2e7e6a0f2ff925eca0",
+ "chksum_sha256": "0fa5a58884c54913bb3233265309e71f17a41edebbb6e521712db35088bddcc8",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/overridden.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_global/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e7dbd305d647109e42dac7d09473eab83bb832b522169b0d9ae7ae0a6a8e33d0",
+ "chksum_sha256": "03ffdfe82c9b009133361192299521b9457798b577daa4aee23d17cdffc2d78e",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/fixtures",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "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_acl_interfaces/tests/cli/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/iosxr_bgp_global/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "85013bce86eea3299281d203601b99b8f56cc72e1ffe45075f6147bb5b090742",
+ "chksum_sha256": "6c983c5b8e7bdc4997dfda6709c7d4a8c719b507c82b73041b3159cca9d6a039",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_global/tests/common/replaced_af.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "47e2e6914d5891922ec91d009954863a86a6ce47df64b1db65d886ff8a9c7d0c",
+ "chksum_sha256": "1adc26fbed5ebfa1eebe6013b93d3341c85b9e55a579bb5615cbf02e5a650536",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/parsed.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_global/tests/common/_populate_vrf.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3e4615b224f5c3f3beb526a6112487ea2f90880deefa2eed6e7903c023dee300",
+ "chksum_sha256": "73cebb0d68942b9cebc4449c12ecdbf9d07ad5ab0375875f6b2dd9a03bd87ca8",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_global/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f86e8be0f7d1983eb2350200ecb588e258b5712eb5a6e027fbd540fb3664ebe9",
+ "chksum_sha256": "63d9fa98fdd8596f997fa6c705bf0ac62ad1f9d958b656b0c4b29f5ee7c2e3d3",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acl_interfaces/vars",
+ "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_bgp_global/tests/common/_populate_af.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d225cb9e1c413befc498bed1759effe731146fb93a8275cc5f28a9fb6cd62733",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/iosxr_bgp_global/tests/common/deleted_af_with_vrf.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a04a3326feb2ff3aa7d9895fba630bba0d39c7e0ac0335c378d6c9c726dea9a7",
+ "format": 1
+ },
+ {
+ "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/vars/main.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_global/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c9c186e5b37c704de87faa743ec5ba48edef1722215a550914539801cc5f67fb",
+ "chksum_sha256": "afc73a39f8a8861930e2a6a542ccd07426663ec0584b218987ef2b456d8c00d7",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/iosxr_bgp_global/tasks/cli.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "73e48db0c23a63565816ea0d938e972a0a9daee404ea69b57fc39f403f1288ac",
"format": 1
},
{
@@ -4327,52 +4320,45 @@
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_cliconf/tasks",
+ "name": "tests/integration/targets/iosxr_cliconf/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_cliconf/defaults/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2d3350be00fa2af0f217f369684578df724bcf9550402e7a54ef1b84f32dcb53",
+ "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_cliconf/meta",
+ "name": "tests/integration/targets/iosxr_cliconf/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_cliconf/meta/main.yml",
+ "name": "tests/integration/targets/iosxr_cliconf/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "9c35198fab18c93963cab948cace1ebf7409e6bfd720d8e3d2d39d40e9d20458",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_cliconf/defaults",
+ "name": "tests/integration/targets/iosxr_cliconf/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_cliconf/defaults/main.yml",
+ "name": "tests/integration/targets/iosxr_cliconf/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
@@ -4397,4497 +4383,4378 @@
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_cliconf/vars",
+ "name": "tests/integration/targets/iosxr_cliconf/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_cliconf/vars/main.yaml",
+ "name": "tests/integration/targets/iosxr_cliconf/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9c35198fab18c93963cab948cace1ebf7409e6bfd720d8e3d2d39d40e9d20458",
+ "chksum_sha256": "afc73a39f8a8861930e2a6a542ccd07426663ec0584b218987ef2b456d8c00d7",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_prefix_lists",
+ "name": "tests/integration/targets/iosxr_cliconf/tasks/cli.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2d3350be00fa2af0f217f369684578df724bcf9550402e7a54ef1b84f32dcb53",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/iosxr_config",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_prefix_lists/tasks",
+ "name": "tests/integration/targets/iosxr_config/defaults",
"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/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_prefix_lists/tasks/cli.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
+ "name": "tests/integration/targets/iosxr_config/templates",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_prefix_lists/defaults",
+ "name": "tests/integration/targets/iosxr_config/templates/defaults",
"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/templates/defaults/config.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
- "format": 1
- },
- {
- "name": "tests/integration/targets/iosxr_prefix_lists/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "c67459067166baed6059b02907fb2692e34868270185b09fcd9f5d7c3ec013d0",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli",
+ "name": "tests/integration/targets/iosxr_config/templates/basic",
"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/templates/basic/route_policy_clean.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "351ab25b2412eee119ffee510ebe0b70b40b13e8111e0c4b2b5c519bdda51634",
+ "chksum_sha256": "baa2f889363d8827d04378ac81e1516d840d64a721e4cc8284c937390206904c",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/iosxr_config/templates/basic/config.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "00f68885674a79797fd718487a3df7e70af4782785456212e76c50cf85495517",
+ "chksum_sha256": "fed860520ec0b19850744af6be1c77939335d4a09539bf563d0c15aa6afc84ef",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/iosxr_config/templates/basic/interface_config.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f40f0a57eb589df2ee64a1628873874408bf7504b5620c6b275450116f81dae0",
+ "chksum_sha256": "3209d667d131c751b8cb1954bceec81eccb663a5e257b81b7394a9edcb9e0d70",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/iosxr_config/templates/basic/route_policy.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0b1cc12f4914b97b943e06edd3ffa0a27d298e50fdde3170dd1257a1c9fdf07c",
+ "chksum_sha256": "83c3226c2070afbe01cde658ec7852261ac925abed96766989888c70a2f8bc92",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/rtt.yaml",
+ "name": "tests/integration/targets/iosxr_config/templates/basic/init_prefix_set.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "98eb3a3642a23b70e1b74c890a478169edcb4a079cb75d158fceb89da2e9a16c",
+ "chksum_sha256": "92dec92ecf095d1c33c493f4769541caa745787d80e498d6ae81decc93351e0a",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/iosxr_config/templates/basic/change_prefix_set.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a43a99763a924f63fec89ac15da6a0e52887599d1f3c8c22df8e5b083fdf9f38",
+ "chksum_sha256": "91a0239cde35ce8e75ad24c8f9c853014cd0c7a5554171ee3b0ad50cc8ed67f5",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/overridden.yaml",
+ "name": "tests/integration/targets/iosxr_config/templates/basic/configuration.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "293a473418d1ab4abe4b92f1ad395d0798f956c6e81b60b8a9c96ef6423702b9",
+ "chksum_sha256": "1fd4692dc95cf561f544f8f680c9046add01c85c6fb83c17db2690cb854d3bb8",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/_populate_config.yaml",
+ "name": "tests/integration/targets/iosxr_config/templates/basic/route_policy_change.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "faa07f9fa788bf1fe18e07fb1d06f797b05da7a822318916f969975dfaac5478",
+ "chksum_sha256": "95c74f6778f25c6385437de97ec5ffbbef5414ed42115d8b7ee276fe5d7fdd64",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/fixtures",
+ "name": "tests/integration/targets/iosxr_config/fixtures",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/fixtures/parsed.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6124272ed18483b35ecc3e79e5dc7a97fb53f4cd02ad193d1d860f408711fd5b",
- "format": 1
- },
- {
- "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/replaced.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "35f8c72cfa440d55ad5148e38ef607e05bbb6cd1632a6ac7425d351ac301680b",
- "format": 1
- },
- {
- "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/parsed.yaml",
+ "name": "tests/integration/targets/iosxr_config/fixtures/config_add_interface.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0cd46bf6eb4382f30d13e184852377422958a6f882a49dd694b3a82709265ac8",
+ "chksum_sha256": "ab5bf303021e5250cd67b0f4ad25b8127b74dd2d8630266a382d9ab2aa4c248b",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/iosxr_config/fixtures/config_del_interface.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2bc68f81719327ba9af3add49753b86806a773ae4d1dd82cc28b1d082056aa25",
+ "chksum_sha256": "087d7655b24ffcd3191a5cab8015486b1da1488345f6e7617b0523f575b0400c",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_prefix_lists/vars",
+ "name": "tests/integration/targets/iosxr_config/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_prefix_lists/vars/main.yaml",
+ "name": "tests/integration/targets/iosxr_config/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "056300e86e33d8bd4c6a91441a5aebdb0f1c0aac51930895ad3862211ead4b78",
+ "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospf_interfaces",
+ "name": "tests/integration/targets/iosxr_config/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospf_interfaces/tasks",
+ "name": "tests/integration/targets/iosxr_config/tests/redirection",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospf_interfaces/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822",
- "format": 1
- },
- {
- "name": "tests/integration/targets/iosxr_ospf_interfaces/tasks/cli.yaml",
+ "name": "tests/integration/targets/iosxr_config/tests/redirection/shortname.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
+ "chksum_sha256": "c82a2cf83917d7934e758a867235e53629945aa1739c3101bbf61adfb9f248cb",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospf_interfaces/defaults",
+ "name": "tests/integration/targets/iosxr_config/tests/cli_config",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospf_interfaces/defaults/main.yaml",
+ "name": "tests/integration/targets/iosxr_config/tests/cli_config/cli_backup.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "6c6e65aa217139078a0e172b54fc00eb2cfe51f2079cb7d9b0a5d9c5d2a74ca6",
"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_config/cli_basic.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "256bd79f69876e184c69f562b22d1954e91f78e0386e273f4f11c5cf74b1d350",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli",
+ "name": "tests/integration/targets/iosxr_config/tests/cli",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/_remove_config.yaml",
+ "name": "tests/integration/targets/iosxr_config/tests/cli/toplevel_after.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b4377cdd354c797bde70b1ab79c25b8126309a735c3e52ada4dd3cf2c61db4c3",
+ "chksum_sha256": "75053a4dca4669bd74e8c0edca7056cd31c40751cba6379774c337e466203cd6",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/iosxr_config/tests/cli/prefix_set_remark.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a06cf74352024ffccea204ef3822fe08618aba04915148c8736f6387331f3662",
+ "chksum_sha256": "0fb66964d634451765de4922678ada90649e02acb0bc6f5b5ab6c723a506bc1d",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/iosxr_config/tests/cli/commit_confirmed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "40b9f6860fef89f7797529730ca794a03fef91355da74053086820283a821df5",
+ "chksum_sha256": "9653c9ff2afc35783f116961cb926bb5f1943c963d05125998cf71c2d18bc182",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/iosxr_config/tests/cli/commit_label.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "52c1f9bebbf6821f0b098ff9cbcdb8a1b30b1044a88f3b89e8fb8e76ea9b37c8",
+ "chksum_sha256": "873e365af69c26af8ed84b963e8f670dfbf86dca68811b164b1465417160070a",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/rtt.yaml",
+ "name": "tests/integration/targets/iosxr_config/tests/cli/sublevel_exact.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b92b9c34db1ed38368a5daa18ab827267e694b837a278a42224c5652f0f3d876",
+ "chksum_sha256": "e18cbd1b58ce8368d11e0948fc75860f2b21e4092c74129d894fb7e4fa46dda1",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/iosxr_config/tests/cli/comment.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6627fdd69a02636b86a4d138377f7e54897986e3f16878ff6a55e573eeac3793",
+ "chksum_sha256": "d78c09db16606b84fe8cadf629fe73ef6d41f3eb81db7a19fc53bc00bc936de1",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/overridden.yaml",
+ "name": "tests/integration/targets/iosxr_config/tests/cli/src_invalid.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b9a8c7d0bff4202802918716797b5c1a831da98ca2bebe674f77d3e13de6b1f6",
+ "chksum_sha256": "ceaff4b3620df90e8208f020adfa3d1b12ca9bef955fd8e01ef5f0395b4fdcd1",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/_populate_config.yaml",
+ "name": "tests/integration/targets/iosxr_config/tests/cli/sublevel_strict_mul_parents.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "96c0644d6833fa509126bfa843bb259b9c9963e2e53d5fee080bb3cdece99de7",
+ "chksum_sha256": "8e641ad89ffb073b8597de019fae0ac2a48482a6a33ff9a3cadd97f364100c70",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/iosxr_config/tests/cli/src_match_none.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4ea507d63e8a9cff4eb0a1fc7dbb6a4bf4e85fe8bf3f0075dbbc6e3505648d69",
+ "chksum_sha256": "7d11c76ae5a12b13a67769e0b7b49d0817c69cff27bc564ea39869b8a2517840",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/parsed.yaml",
+ "name": "tests/integration/targets/iosxr_config/tests/cli/sublevel.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c1cd77375707ee0397f1efbd07a4f7fdfcfbec26c86042f65c7f29f3cca9a9c3",
+ "chksum_sha256": "81d687e492374044859a0efcfa6dc922fb526648b8631faf70b621ae6742489d",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/iosxr_config/tests/cli/route_policy.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "50f480556a54480a5cff156bcb4a8fad88e60404f4ca0ffd94df379667fd7bac",
- "format": 1
- },
- {
- "name": "tests/integration/targets/iosxr_ospf_interfaces/fixtures",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "604f5b5f96027a1c3e5768650bdfd7687d1fed0a5045a3e5b9805dddd5fae6a7",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospf_interfaces/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/iosxr_config/tests/cli/backup.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d11bd78a2d74e8dc46a2880b54b3500e2f88cc4e3e6fd42a249138556e94964a",
+ "chksum_sha256": "219bedf133ffab88c2bcd3bf803296ac143b96a71b45aad351811d07898f7c6d",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospf_interfaces/vars",
- "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_config/tests/cli/replace_config.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "934f6f7a277e34f616d5459e1989f9e0faeaf4e0a61444289abfaf37ee120659",
- "format": 1
- },
- {
- "name": "tests/integration/targets/iosxr_snmp_server",
- "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,
+ "chksum_sha256": "520231e3fab8fd0eed892322eb5e630667f32730b89f1a06e01c22a72d33ff45",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_snmp_server/tasks/main.yaml",
+ "name": "tests/integration/targets/iosxr_config/tests/cli/comment-too-long.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "afc73a39f8a8861930e2a6a542ccd07426663ec0584b218987ef2b456d8c00d7",
+ "chksum_sha256": "441fd0dae9c75894224eb8056ba369437d96056005466872f0b850546eda0933",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_snmp_server/tasks/cli.yaml",
+ "name": "tests/integration/targets/iosxr_config/tests/cli/misplaced_sublevel.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2d3350be00fa2af0f217f369684578df724bcf9550402e7a54ef1b84f32dcb53",
- "format": 1
- },
- {
- "name": "tests/integration/targets/iosxr_snmp_server/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "55ebc624d7356f89f6c2bb32d13aceff80e8df04d57c28f463023a7aca814ee3",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_snmp_server/meta/main.yml",
+ "name": "tests/integration/targets/iosxr_config/tests/cli/extcommunity_set_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "cb9f1df2b57e8364e823fb60276e322bd994be2df12b42a7cfddb461bb3e0dc0",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_snmp_server/defaults",
- "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_snmp_server/defaults/main.yml",
+ "name": "tests/integration/targets/iosxr_config/tests/cli/toplevel.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
+ "chksum_sha256": "98194ad2b27b0a9722de6305af5d2446201c488a21e52d33f31b82f51dcb9dbc",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_snmp_server/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/iosxr_config/tests/cli/sublevel_strict.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "33a343c4930c4bd86c2f660177d059bdf6c44e52b4224ecd7e8ade878687544a",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_snmp_server/tests/common",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/iosxr_config/tests/cli/toplevel_before.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "19a5a9e3043bd0b74fd7e71956374e204626d4346262c0c4cd3d9c579bb89f87",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_snmp_server/tests/common/_remove_config.yaml",
+ "name": "tests/integration/targets/iosxr_config/tests/cli/src_basic.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c84f687a0d23e760666157720b95281a7e02562f1304efbb9c904f542c7ef969",
+ "chksum_sha256": "474793b496f46c63df13e87815973af49d18fbc707f1d8dcd47060dce4344005",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_snmp_server/tests/common/deleted.yaml",
+ "name": "tests/integration/targets/iosxr_config/tests/cli/replace_block.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ae3ae2d79689b84f4e7d6094ce2e78a4ff7e4ab351b50893aa2ffbb47377e75d",
+ "chksum_sha256": "c25a28559f6b20688ba8f74a807251df375f9d3b938d100531569e723f908d1d",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_snmp_server/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/iosxr_config/tests/cli/sublevel_block.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4d26d4eb07781e55845119a7c3513bc94bd975804d6a5e2f86a63086bffaea4a",
+ "chksum_sha256": "45be4aed01d01d3a88065e21b231390a90c01575db70fe99bc373d253a483945",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_snmp_server/tests/common/empty_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d365f215fa2285f64eaffc334997ac4ba381ba0fe72d1f0ddcfecac8b076eda0",
+ "name": "tests/integration/targets/iosxr_config/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_snmp_server/tests/common/merged.yaml",
+ "name": "tests/integration/targets/iosxr_config/tasks/redirection.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d537c09198b49b391f157eba859faa21d25fe4e4db79228887b12586b2207ef7",
+ "chksum_sha256": "4dda061736323dd09fa0832d73a74f4dec4a7c4665357ad20c914f15778cf99f",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_snmp_server/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/iosxr_config/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "92a61d453a67eba0f68f754f46ae9ef6b90567ad40e8555fd46868a595bef998",
+ "chksum_sha256": "3ba11d0a6ecc4c096ca24c09fc0f707954d3dc64ac8964ea17901fe60887213a",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_snmp_server/tests/common/_parsed.cfg",
+ "name": "tests/integration/targets/iosxr_config/tasks/cli_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4e26c01ab8c4e0f46bbacc76fc290c380ef19ae68f2f3e48db74c3f3e0554f8",
+ "chksum_sha256": "c2b1c324c2399a7589d2fd4a7ed9b201f8a8299424924277b67298903db1d3cd",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_snmp_server/tests/common/_populate_config.yaml",
+ "name": "tests/integration/targets/iosxr_config/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "51190a6fdbc4b50898f72ccb49c0e3f7c8856ed9483e53bffbae15805d583c7c",
+ "chksum_sha256": "aeaea690f4a27b4af77c33a24968cdc89de2ca73e590d9ec1db4b80842750bb7",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_snmp_server/tests/common/replaced.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a38d54a4fd46f4c94df79af4550ad013eb6cf28a11f2ddab930527a035c6349a",
+ "name": "tests/integration/targets/iosxr_acls",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_snmp_server/tests/common/parsed.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "990985bc43befcb4befb0737e5dc22784856b95aa04a8139dee5020628aca31d",
+ "name": "tests/integration/targets/iosxr_acls/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_snmp_server/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/iosxr_acls/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "81d07f1d66f078236899a5e835c4d53479004393bfb1ca80caccd1afa0cdea90",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_snmp_server/vars",
+ "name": "tests/integration/targets/iosxr_acls/vars",
"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_acls/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0f9c668532272c0b616e70d3d77dae2fb25871e3d07b04cc8702b25f51ec4ab1",
+ "chksum_sha256": "a07cda33c597dd4e76d3b812b962e5718c936287134221c1fbe55ff3a3490d6e",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_facts",
+ "name": "tests/integration/targets/iosxr_acls/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_facts/tasks",
+ "name": "tests/integration/targets/iosxr_acls/tests/cli",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_facts/tasks/main.yaml",
+ "name": "tests/integration/targets/iosxr_acls/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822",
+ "chksum_sha256": "25ae2d218ceb84438e1135380d5e3f55dbede18338f5c4826bf253fbb1b91545",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_facts/tasks/cli.yaml",
+ "name": "tests/integration/targets/iosxr_acls/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aeaea690f4a27b4af77c33a24968cdc89de2ca73e590d9ec1db4b80842750bb7",
- "format": 1
- },
- {
- "name": "tests/integration/targets/iosxr_facts/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "fad593c0a30c05a9399505505e33bb99d75913b2ca333fa0f5d198ecb52d3fc6",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_facts/meta/main.yml",
+ "name": "tests/integration/targets/iosxr_acls/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06",
+ "chksum_sha256": "8ba58ba01382b709d04ad2b8b0f82c2d53d7a71a6a1a3bbfbd2b68b09de23dd8",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_facts/defaults",
- "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_facts/defaults/main.yaml",
+ "name": "tests/integration/targets/iosxr_acls/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
+ "chksum_sha256": "a3de6c6599cbd3a7950c303559545975838139e9c4b6899dc85727669925a168",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_facts/tests",
+ "name": "tests/integration/targets/iosxr_acls/tests/cli/fixtures",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_facts/tests/cli",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/iosxr_acls/tests/cli/fixtures/parsed.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6edd326a3c4a5b18f2a041ef8e9313e870c9eff81940294307cc07a3ff90e5e5",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_facts/tests/cli/not_hardware.yaml",
+ "name": "tests/integration/targets/iosxr_acls/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d45c23f2fed05fea77e4d6081381f243f895035b72a52be4a28d46215dd9026a",
+ "chksum_sha256": "3f167ba03527e52c6b3236cf547eaad59e5c22cbb7378a1a90eb2a8ab736633e",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_facts/tests/cli/default_facts.yaml",
+ "name": "tests/integration/targets/iosxr_acls/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1db28925de61b31d4d1494430b130beb85579fe7f3ac582b05ef26ced8161c28",
+ "chksum_sha256": "60a105434aaf3d04dde592ece9cdf1017cb0b3172120288810d97715fe2fd431",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_facts/tests/cli/invalid_subset.yaml",
+ "name": "tests/integration/targets/iosxr_acls/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9dc93102aaeb6318fa47c746d0ef7e6eecfc39757b5e0af1e9503a309c6118db",
+ "chksum_sha256": "1e4d53cd354dc5e35745d702bd43dc67c57ed1548f94168f687b0cd380e30432",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_facts/tests/cli/all_facts.yaml",
+ "name": "tests/integration/targets/iosxr_acls/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "09ddaf160ad114c35a1a1abee7ec06230e2c0c1c20a7e465aa479d25ec892e3a",
+ "chksum_sha256": "69c219c2446281fb3697154ddfb3a06e77f320193cd04d461a20b0362a4447e8",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_address_family",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/iosxr_acls/tests/cli/replaced.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d324ad8894b55b2586831251fbedab24cb4924fb90a7bb9ebe42bf6e57437ff5",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_address_family/tasks",
+ "name": "tests/integration/targets/iosxr_acls/tests/cli/rtt.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fed7af68aca997e00c7816b282d84fe5b3858ba27497fdfb1f3f87fd1ad7c268",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/iosxr_acls/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_acls/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_acls/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_ospfv2",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_address_family/meta/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "tests/integration/targets/iosxr_bgp_address_family/defaults",
+ "name": "tests/integration/targets/iosxr_ospfv2/defaults",
"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_ospfv2/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_address_family/tests",
+ "name": "tests/integration/targets/iosxr_ospfv2/vars",
"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_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_bgp_address_family/tests/common/_remove_config.yaml",
+ "name": "tests/integration/targets/iosxr_ospfv2/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "03ffdfe82c9b009133361192299521b9457798b577daa4aee23d17cdffc2d78e",
+ "chksum_sha256": "7200105e66871ab7b8ae409eacde75f173708b19fbc46b5dfd512816beb5c0fd",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/deleted.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9ff639e39ecc88528745c050f97fd0192efeec27230a6073001e29c5af17293a",
+ "name": "tests/integration/targets/iosxr_ospfv2/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/gathered.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d6eea25c602c2e11df4f7138d2d4836e224a971a6c3c971562d444b18724fe8a",
+ "name": "tests/integration/targets/iosxr_ospfv2/tests/cli",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/_populate_config1.yaml",
+ "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0090f727c6e68f3abf6755ad0c74d65c0a406d5de0675985e5109432903f9680",
+ "chksum_sha256": "c081530d7ea0a30fdfefe7b92a48f9d7570b66ade21694b8faa1857d3624cfd4",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/empty_config.yaml",
+ "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "14c0028b5d36b2482930e55607a441ae5e913ebf74e07cd5c086bb72e2a15b2d",
+ "chksum_sha256": "249c1fec66619c9576dd1c47f0b9abcd5377d408dc6f33b101639b8962161bc1",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/_populate_base_vrf.yaml",
+ "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a90dce5c848e047ee6b15a9875807caf3834be025a1a84a912f385f650b8b083",
+ "chksum_sha256": "b18aabdd28ded7ce5eaeb2fc8e20e3609e78091d172c9e4467e953cf15e3b2c6",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/merged.yaml",
+ "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7ef8a2b601776d796e19b13b6a7d7f7e8c91da5c876488ce935e47976908dc4e",
+ "chksum_sha256": "05982ef9644df8c28203ff858981fc5883a0c479fae9f391262eaf5dd2b976d4",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0b7c84c2fb381806cbfc487a06b97ec8dff7f6e3533c44a2876d1b934b644e7d",
+ "chksum_sha256": "43bd5bb5c07bc5ce5ae41802cd97f60b7474505e994ad6e03d82b615f8bbc03f",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/_parsed.cfg",
+ "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b3130bb3936b59d324966976cb9028b960cefbeb74b0a4f57ee73f8b51f80e63",
+ "chksum_sha256": "bc3a8aadf532ef7cd6f55ca3fcc220ad1a1597d43b8927da151c3f8b6b3ab4f4",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/_populate_config.yaml",
+ "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0912064fd6e2456af64546781d84b7e1463836226ef076f85276e67b9804fed2",
+ "chksum_sha256": "58dd8f904e17dfd4fffd6a6e1e3a4d5387fa38bde6454ae2c5a53a34d058eca3",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/_populate_vrf.yaml",
+ "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8f4218bdca10a45c9080e2f6b03a0143e44e984ba634245ccd1bf8ba62dbbca3",
+ "chksum_sha256": "95564208ef074169b8b022b09f16f311333ff57c4c8dc16ea7c0a049441fdf7a",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d2d812affc5ccd626806375d3324a9354d0bce0db2eeca99dc2142cb80f6534d",
+ "chksum_sha256": "fb1d0eb3798a289e286e8175801c5c1e4624e15cde7976d5afe06bc98f677658",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6756cc71ee7f4b36a79a2a9adc5d58b3f7ba4752d4bc7d0532adf8b203d01952",
+ "chksum_sha256": "fc50952bf32ba9c19dc8ce51fd6a75f07328b80b00e3105f3bd746797d027501",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f0831e2ebf2b374d0528523f153d63aa05c51c9427cd1d978e6bb1b3541fb30e",
+ "chksum_sha256": "88ca6319ff4d07831545abca9e5c0cfde8baa1013cbbcf73dd697ffad6ce0b79",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_address_family/vars",
+ "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/vars/main.yaml",
+ "name": "tests/integration/targets/iosxr_ospfv2/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_ospfv2/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_prefix_lists",
"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",
- "format": 1
- },
- {
- "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_bgp_global/meta",
+ "name": "tests/integration/targets/iosxr_prefix_lists/defaults",
"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_prefix_lists/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_global/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_global/defaults/main.yml",
+ "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_global/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_global/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_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",
+ "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0fa5a58884c54913bb3233265309e71f17a41edebbb6e521712db35088bddcc8",
+ "chksum_sha256": "0cd46bf6eb4382f30d13e184852377422958a6f882a49dd694b3a82709265ac8",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_global/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0d3f42e30ecfd27dca2f459e67fcb29aa7eb221087dff2125a4b50e24de047c9",
+ "chksum_sha256": "faa07f9fa788bf1fe18e07fb1d06f797b05da7a822318916f969975dfaac5478",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_global/tests/common/empty_config.yaml",
+ "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5dd7dce83c0f85059155d19b0844f40613a98e42f0718a0fa319c1bfafc0b775",
+ "chksum_sha256": "2bc68f81719327ba9af3add49753b86806a773ae4d1dd82cc28b1d082056aa25",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_global/tests/common/replaced_af.yaml",
+ "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1adc26fbed5ebfa1eebe6013b93d3341c85b9e55a579bb5615cbf02e5a650536",
+ "chksum_sha256": "f40f0a57eb589df2ee64a1628873874408bf7504b5620c6b275450116f81dae0",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_global/tests/common/_populate_af.yml",
+ "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d225cb9e1c413befc498bed1759effe731146fb93a8275cc5f28a9fb6cd62733",
+ "chksum_sha256": "0b1cc12f4914b97b943e06edd3ffa0a27d298e50fdde3170dd1257a1c9fdf07c",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_global/tests/common/deleted_af_with_vrf.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a04a3326feb2ff3aa7d9895fba630bba0d39c7e0ac0335c378d6c9c726dea9a7",
+ "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_global/tests/common/merged.yaml",
+ "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6c983c5b8e7bdc4997dfda6709c7d4a8c719b507c82b73041b3159cca9d6a039",
+ "chksum_sha256": "6124272ed18483b35ecc3e79e5dc7a97fb53f4cd02ad193d1d860f408711fd5b",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_global/tests/common/_parsed.cfg",
+ "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "69b28ec7e3b77375e263157ffdbc2e5c7dea56353f9a906f0efdab44aaba2efe",
+ "chksum_sha256": "00f68885674a79797fd718487a3df7e70af4782785456212e76c50cf85495517",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_global/tests/common/_populate_config.yaml",
+ "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "73d93464c7e118949c3a6da1e915242a227681ab6ba766d5de54953c3cd6dd9b",
+ "chksum_sha256": "351ab25b2412eee119ffee510ebe0b70b40b13e8111e0c4b2b5c519bdda51634",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_global/tests/common/_populate_vrf.yaml",
+ "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "73cebb0d68942b9cebc4449c12ecdbf9d07ad5ab0375875f6b2dd9a03bd87ca8",
+ "chksum_sha256": "293a473418d1ab4abe4b92f1ad395d0798f956c6e81b60b8a9c96ef6423702b9",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_global/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "63d9fa98fdd8596f997fa6c705bf0ac62ad1f9d958b656b0c4b29f5ee7c2e3d3",
+ "chksum_sha256": "a43a99763a924f63fec89ac15da6a0e52887599d1f3c8c22df8e5b083fdf9f38",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_global/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2ada9252d595d233bb3b7e2a01900965416d147291a2ac3b443c70c9478cad60",
+ "chksum_sha256": "35f8c72cfa440d55ad5148e38ef607e05bbb6cd1632a6ac7425d351ac301680b",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_global/tests/common/purged.yaml",
+ "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2cce29019f0726c03e53a2daa42ff31d962e2df7b0bcb6b6a75cb120950ff68c",
+ "chksum_sha256": "98eb3a3642a23b70e1b74c890a478169edcb4a079cb75d158fceb89da2e9a16c",
"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_prefix_lists/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_prefix_lists/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": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_global/vars/main.yaml",
+ "name": "tests/integration/targets/iosxr_prefix_lists/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "744a98c76b992e1adb641f9f1770a9d7aafe06e4c75ae8a26c889b6fd99b376f",
+ "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ping",
+ "name": "tests/integration/targets/iosxr_bgp_templates",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ping/tasks",
+ "name": "tests/integration/targets/iosxr_bgp_templates/defaults",
"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/iosxr_bgp_templates/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
+ "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ping/defaults",
+ "name": "tests/integration/targets/iosxr_bgp_templates/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ping/defaults/main.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_templates/vars/main.yml",
"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": "74c848224ffad63d69ccdb5967ad262f67070521cc6e66d3e4a007f864e2971e",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ping/tests/cli",
+ "name": "tests/integration/targets/iosxr_bgp_templates/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ping/tests/cli/ping.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_templates/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5c196cce06bc05f3315cddb3f355cb0b4d6417314c420e64d3af66765d697551",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l3_interfaces",
+ "name": "tests/integration/targets/iosxr_bgp_templates/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l3_interfaces/tasks",
+ "name": "tests/integration/targets/iosxr_bgp_templates/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l3_interfaces/tasks/main.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822",
+ "chksum_sha256": "0c48041607d4f3f9751372d34ec71b765e96d62f3d2a162c324a5ef048958c4c",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l3_interfaces/tasks/cli.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
- "format": 1
- },
- {
- "name": "tests/integration/targets/iosxr_l3_interfaces/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "ff31325e71e86e7007d9b29d08c9f407956972156df495ac07024154d928513a",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l3_interfaces/meta/main.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
- "format": 1
- },
- {
- "name": "tests/integration/targets/iosxr_l3_interfaces/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "b943b447000b4e451ac3dc7544d79fe0691086f8eb2a4d34d1e248ad9934d378",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l3_interfaces/defaults/main.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "cfa2236ca0b46e39df7b3b571cee8c62dabba518ce4e518d0dafa7eb3a2600ec",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l3_interfaces/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/empty_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3dc246fb3ff4a02172d4d73bf3c4f014ea0093abfd61810dcc85900e37d693e4",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/_parsed.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "90d0a8d5622c81922045271d739a7cb2dfcadfa85af7468cac5b06e8b365440a",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/_remove_config.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9aae7589fd152283c827668756aa807df73d6b0e3b02a39329aa5adb982a34aa",
+ "chksum_sha256": "48d0d8085ccfdfbdf58b9b8ddb7159d979047292981053056aa4028091d6f8bf",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8c4d2b031234ceb533507d437a610a5d19f6dc3b4622650baf62a06d21c864e1",
+ "chksum_sha256": "03ffdfe82c9b009133361192299521b9457798b577daa4aee23d17cdffc2d78e",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dc7ca7650fea2420e7d244a0042773bcb8b71f6102996f7317d971038011f69e",
+ "chksum_sha256": "797b55ca951af676c97415a0b258709a60f737dc9710f351380a10c9eacc5566",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a24591a78ea4cd2fedffa114fa012bf8f93071c26adf6e8810415f2c4121b18c",
+ "chksum_sha256": "5bde50a48af939d0c8b43a2da46351d1acedb5dd33c69b5b2ded9f4a613f04b7",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/rtt.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "13f8f39d5a62294c86bcb4d28e2d5ab0f307e32cfdd5b9790ba4d48b6f8b363d",
+ "chksum_sha256": "6731146ad09a00a0ea8505b832cc08a897090e74ff69d2b5f37e3aec40689555",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/merged.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6a05e793c4dee9a71aa7360480ff679ff1ac5901b01b5b8b847f0ee8919daa53",
+ "name": "tests/integration/targets/iosxr_bgp_templates/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/overridden.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_templates/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9c6bcba044debf2f522bd4cc8acc2be21c0534b4429bf491b01c7c4c4d6ba1e4",
+ "chksum_sha256": "afc73a39f8a8861930e2a6a542ccd07426663ec0584b218987ef2b456d8c00d7",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/_populate_config.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_templates/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cea9a33ea739964862b47059bb71915e721d9153f0ae11f448eb2aa0f3e63555",
+ "chksum_sha256": "73e48db0c23a63565816ea0d938e972a0a9daee404ea69b57fc39f403f1288ac",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/fixtures",
+ "name": "tests/integration/targets/prepare_iosxr_tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/fixtures/parsed.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5b02fe37e4efac9a20e9480b4f9268dacac3fb2c1ed7b07b897606d06b353f53",
+ "name": "tests/integration/targets/prepare_iosxr_tests/templates",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/prepare_iosxr_tests/templates/config.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "59dc8c2804a3b783878bb6af8d7c390e7ecd8c78e024aae5d329d253ae0439f0",
+ "chksum_sha256": "a21d7b66f513ecb424fd6e23df9f0737c855281f3a5d0be6c856a0d2ce7af23b",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/parsed.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2012e92a9c0896356f0e74af36986c6f11b2e88c3d3f33eddd25202b5eff5450",
+ "name": "tests/integration/targets/prepare_iosxr_tests/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/prepare_iosxr_tests/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ac4d19dd0c70447823eab99d6b2c5f1007985f20bd560c8275ac1ae2f8bef43b",
+ "chksum_sha256": "851860fe2ed1258710d7fcf89ac5b7d8c3c87755e89ca56fdd79bea022eb2b92",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l3_interfaces/vars",
+ "name": "tests/integration/targets/prepare_iosxr_tests/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/prepare_iosxr_tests/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a7439fd1d36352ee12daaf2487b7e6c8c013a1f0fb366cf6e3900bfeb0580ec9",
+ "chksum_sha256": "31ae6f9228a0fabc3db6d87215aa04e1cb642f5b96cf95d40056dba6ddfcbae0",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acls",
+ "name": "tests/integration/targets/iosxr_bgp_address_family",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acls/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_acls/tasks/main.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_address_family/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822",
+ "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acls/tasks/cli.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_address_family/vars",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/iosxr_bgp_address_family/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
+ "chksum_sha256": "0afc6b42287dd3380bccf43815067aa662d4e3ea573c31bf16d78fa37d6ee429",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acls/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_acls/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_acls/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_acls/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_acls/tests/cli/_remove_config.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "60a105434aaf3d04dde592ece9cdf1017cb0b3172120288810d97715fe2fd431",
+ "chksum_sha256": "6756cc71ee7f4b36a79a2a9adc5d58b3f7ba4752d4bc7d0532adf8b203d01952",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acls/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3f167ba03527e52c6b3236cf547eaad59e5c22cbb7378a1a90eb2a8ab736633e",
+ "chksum_sha256": "0912064fd6e2456af64546781d84b7e1463836226ef076f85276e67b9804fed2",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acls/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a582c68cd840533e05aaf3367b334d02dd74684b0af6a23269ff0b208bf06f5c",
+ "chksum_sha256": "f0831e2ebf2b374d0528523f153d63aa05c51c9427cd1d978e6bb1b3541fb30e",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acls/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a3de6c6599cbd3a7950c303559545975838139e9c4b6899dc85727669925a168",
+ "chksum_sha256": "d6eea25c602c2e11df4f7138d2d4836e224a971a6c3c971562d444b18724fe8a",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acls/tests/cli/rtt.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fed7af68aca997e00c7816b282d84fe5b3858ba27497fdfb1f3f87fd1ad7c268",
+ "chksum_sha256": "14c0028b5d36b2482930e55607a441ae5e913ebf74e07cd5c086bb72e2a15b2d",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acls/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "69c219c2446281fb3697154ddfb3a06e77f320193cd04d461a20b0362a4447e8",
+ "chksum_sha256": "b3130bb3936b59d324966976cb9028b960cefbeb74b0a4f57ee73f8b51f80e63",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acls/tests/cli/overridden.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1e4d53cd354dc5e35745d702bd43dc67c57ed1548f94168f687b0cd380e30432",
+ "chksum_sha256": "9ff639e39ecc88528745c050f97fd0192efeec27230a6073001e29c5af17293a",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acls/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": "fad593c0a30c05a9399505505e33bb99d75913b2ca333fa0f5d198ecb52d3fc6",
- "format": 1
- },
- {
- "name": "tests/integration/targets/iosxr_acls/tests/cli/fixtures",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "0090f727c6e68f3abf6755ad0c74d65c0a406d5de0675985e5109432903f9680",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acls/tests/cli/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6edd326a3c4a5b18f2a041ef8e9313e870c9eff81940294307cc07a3ff90e5e5",
+ "chksum_sha256": "03ffdfe82c9b009133361192299521b9457798b577daa4aee23d17cdffc2d78e",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acls/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d324ad8894b55b2586831251fbedab24cb4924fb90a7bb9ebe42bf6e57437ff5",
+ "chksum_sha256": "0b7c84c2fb381806cbfc487a06b97ec8dff7f6e3533c44a2876d1b934b644e7d",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acls/tests/cli/parsed.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "25ae2d218ceb84438e1135380d5e3f55dbede18338f5c4826bf253fbb1b91545",
+ "chksum_sha256": "7ef8a2b601776d796e19b13b6a7d7f7e8c91da5c876488ce935e47976908dc4e",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acls/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/_populate_base_vrf.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8ba58ba01382b709d04ad2b8b0f82c2d53d7a71a6a1a3bbfbd2b68b09de23dd8",
- "format": 1
- },
- {
- "name": "tests/integration/targets/iosxr_acls/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "a90dce5c848e047ee6b15a9875807caf3834be025a1a84a912f385f650b8b083",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_acls/vars/main.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/_populate_vrf.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a07cda33c597dd4e76d3b812b962e5718c936287134221c1fbe55ff3a3490d6e",
+ "chksum_sha256": "8f4218bdca10a45c9080e2f6b03a0143e44e984ba634245ccd1bf8ba62dbbca3",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_system",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "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_system/tasks",
+ "name": "tests/integration/targets/iosxr_bgp_address_family/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_system/tasks/main.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_address_family/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "303b9dff6309fcb32b8eb1e05d36298973519248849c1ddb442a6ce54e4ae491",
+ "chksum_sha256": "afc73a39f8a8861930e2a6a542ccd07426663ec0584b218987ef2b456d8c00d7",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_system/tasks/cli.yaml",
+ "name": "tests/integration/targets/iosxr_bgp_address_family/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "226f3a6bf7002dddaa01371fffd0478b580563bdd21ca7212f2d768935f5be13",
+ "chksum_sha256": "2d3350be00fa2af0f217f369684578df724bcf9550402e7a54ef1b84f32dcb53",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_system/tasks/netconf.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2ec33b881eaf97c9bfd901055dc833ab4f2e49f22f124da655fb04ada98dc14e",
+ "name": "tests/integration/targets/iosxr_acl_interfaces",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_system/meta",
+ "name": "tests/integration/targets/iosxr_acl_interfaces/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_system/meta/main.yml",
+ "name": "tests/integration/targets/iosxr_acl_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_system/defaults",
+ "name": "tests/integration/targets/iosxr_acl_interfaces/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_system/defaults/main.yaml",
+ "name": "tests/integration/targets/iosxr_acl_interfaces/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
+ "chksum_sha256": "c9c186e5b37c704de87faa743ec5ba48edef1722215a550914539801cc5f67fb",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_system/tests",
+ "name": "tests/integration/targets/iosxr_acl_interfaces/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_system/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_system/tests/cli/set_lookup_source.yaml",
+ "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/_populate.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "754a7df244f40b48ec9ff6d792154255135fd7b9be267890a273eff7ad9e9799",
+ "chksum_sha256": "25049f0c45154ecc9748bca191fbeb5239511e4a87cc68964b1899d9731f178b",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_system/tests/cli/set_domain_name.yaml",
+ "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9076279454f7438bf2047b19f82ddffc2fe20c0e4d4e7ebfdd9e71d0b9ba408b",
+ "chksum_sha256": "3e4615b224f5c3f3beb526a6112487ea2f90880deefa2eed6e7903c023dee300",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_system/tests/cli/set_name_servers.yaml",
+ "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/deleted_all.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "71122c961b8e1745598abef3fab16c200697475242a403da4a724d91a709ced8",
+ "chksum_sha256": "3fe49d80821c922d19f9db8e41eb9a60b6328f43791322450bf5d78899332dcf",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_system/tests/cli/set_domain_list.yaml",
+ "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2d754474af95b48e0e6357e87a0133cca7ad10883053223f12df8c5c049b8393",
+ "chksum_sha256": "f86e8be0f7d1983eb2350200ecb588e258b5712eb5a6e027fbd540fb3664ebe9",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_system/tests/cli/set_hostname.yaml",
+ "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2897acaae31a983f24ec8d6f97a95190092a82f7af610ca8a18a3d7bc2805e75",
+ "chksum_sha256": "107424d86e345ce03603238560177493367356c6fa158092d8c272e20f8b3572",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_system/tests/netconf",
+ "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/empty_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ce73c16381b1f6d60eb2a28255e2c73d3e440383faf5b4c592be6a2a17ec4cf0",
+ "format": 1
+ },
+ {
+ "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_system/tests/netconf/set_lookup_source.yaml",
+ "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d018618970e16e1784aaf8e1e1af0fe66be828e75ac88630726d2cb687f77e9c",
+ "chksum_sha256": "85013bce86eea3299281d203601b99b8f56cc72e1ffe45075f6147bb5b090742",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_system/tests/netconf/set_domain_name.yaml",
+ "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ac4ac4212045c4d53698a46f935b4f7755174a0a59311ee6abfd47503af63425",
+ "chksum_sha256": "e428186b1eddbc63e5395419d8183ba503bfb276767d1c1e7fff71da95af734d",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_system/tests/netconf/set_name_servers.yaml",
+ "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5ef987744cf3dad479a759862ff62b6bf3149a5fb8e0933ff023a92405af3146",
+ "chksum_sha256": "6950308b0007d4bd83a9207819818cafea411ea68e0e0d16cd0b142257082729",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_system/tests/netconf/set_domain_list.yaml",
+ "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "72a77a732b1e7f734d27236d5339fe22dd7e4239f3bf8364df87140313fca83f",
+ "chksum_sha256": "e7dbd305d647109e42dac7d09473eab83bb832b522169b0d9ae7ae0a6a8e33d0",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_system/tests/netconf/set_hostname.yaml",
+ "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f13d423556dcce1658d29446113c6e4da7fbe03defa9517c210b86100ddaba26",
+ "chksum_sha256": "646caf77a4a5a75a19987a0316b75e38bcdf89ee4cf21a2e7e6a0f2ff925eca0",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/replaced.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "47e2e6914d5891922ec91d009954863a86a6ce47df64b1db65d886ff8a9c7d0c",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp/tasks",
+ "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/rtt.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ed9f2b98d464bf8603d35a074fe2d50eb66d3a2c595967f48de1264a2038dcab",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/iosxr_acl_interfaces/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_acl_interfaces/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_acl_interfaces/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
+ "chksum_sha256": "cdac5ecec5537510649ea64ca19a23351ebc7e9783ff4fe4f220079ed2c37bf7",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp/defaults",
+ "name": "tests/integration/targets/iosxr_ospfv3",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp/defaults/main.yaml",
+ "name": "tests/integration/targets/iosxr_ospfv3/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/iosxr_ospfv3/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp/tests",
+ "name": "tests/integration/targets/iosxr_ospfv3/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp/tests/cli",
+ "name": "tests/integration/targets/iosxr_ospfv3/vars/main.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fa66fb8ce0cc80369445c497f68d5e087540f12ad98f96f181e99c7500e5f232",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/iosxr_ospfv3/fixtures",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp/tests/cli/_remove_config.yaml",
+ "name": "tests/integration/targets/iosxr_ospfv3/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "93f1a75fd2d40c2d5b43a04650b66fd0d98e638e951373de1fbe2f5e22b79ce8",
+ "chksum_sha256": "717d5351bebea57a2f0ccd874a2517595c2dda6c4ca8cb3c6de7c0902aa14b75",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/iosxr_ospfv3/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/iosxr_ospfv3/tests/cli",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "66d389919e87982a7de0c3a90adfb49bb46d953079385a160b96eade8ab816d0",
+ "chksum_sha256": "820c9d8378bc3893f82eef7b74466761336b9e7acf36c99a76ab549c03fefab0",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ba2306dde118373ceb847e377f4d6017846446a5d4f20350f3dab7ef76ed6c9a",
+ "chksum_sha256": "97c41a9ab68d27a209106c1f47557a5659ca2e8914fdef8e29514b208c8c771b",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d208dc3d0e8a9a35951844e6a916db895790ccda6bd7bb550b824a7eb4477b30",
+ "chksum_sha256": "959f73cb330969c6963963b3a9c6ced291c02803d8b43e0d280691e1abb94a88",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp/tests/cli/rtt.yaml",
+ "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1539a41e787502ec7781cbcb2c00157799a196ce6da851d0565b96d14db4059b",
+ "chksum_sha256": "b74c20ce7b08e53ee2f6ad55e8964e7d763329b130c8a57f5962395f1daf2a13",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp/tests/cli/_populate.yaml",
+ "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fe0b5773fcd48afa2ba50bdb1cc2318f5d4dc3d46362db64195210f5ff26acf2",
+ "chksum_sha256": "771f96cd83c9a893ed5ea4eb2d25b331fa2728f8399f0fb2327327a2eea69eb8",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b8a5a0ab330416618101c508230864f1c4d2956b5d3babe9e74ac3c295439a3c",
+ "chksum_sha256": "b353f038fe3608efaa4fe240c2490e4d96479df9fac05c5e65b382b2b5eb45e5",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp/tests/cli/fixtures",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/_remove_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "46bf472822cc2a45ce47c1ac6c8059fc5f228be53f0ee692765832aa1541f811",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp/tests/cli/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b053b09f9388c7f6208c51e8b9e53867bd6352bf37c9688f28b02ab348ed3767",
+ "chksum_sha256": "296f132a73194b9b2d134f6cba1b69da8f2e1f3345c4cf5952c8fe686e1eac91",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "26c4083f5bd77b0b8a4a7866d3a93116bb2f0a0e9a3620beb2651b37cd2eabbb",
+ "chksum_sha256": "0432f28e01aa6fcf74a9f27e1d245b6e7368bdf7c4e6cada6911becc1a5d8cd6",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp/tests/cli/parsed.yaml",
+ "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c9445f3494ae6fab46f8a866ba98cccfa586ddf8b3c467ca3e6da1a757d83e7b",
+ "chksum_sha256": "38ac896b32ffc759f2b4e498126f827b96d1cb0cec61a9c8e1669aee7d68af1c",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3f35e7101f1490cb9fb6467b196a0b527dd72ef2a8d72925ec6567770bd58832",
+ "chksum_sha256": "fe864b51e70814be13bf52e56f90108c6f6f874ddf23fc9c229019215bab349f",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp/vars",
+ "name": "tests/integration/targets/iosxr_ospfv3/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp/vars/main.yaml",
+ "name": "tests/integration/targets/iosxr_ospfv3/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "28efea0049957f8eb23160dce61b09a38b89b1fa61bc53f4f53b7f809b4eebd1",
+ "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospfv2",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/iosxr_ospfv3/tasks/cli.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_ospfv2/tasks",
+ "name": "tests/integration/targets/iosxr_system",
"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",
+ "name": "tests/integration/targets/iosxr_system/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"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",
+ "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_l3_interfaces/tests/cli/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "797b55ca951af676c97415a0b258709a60f737dc9710f351380a10c9eacc5566",
+ "chksum_sha256": "5b02fe37e4efac9a20e9480b4f9268dacac3fb2c1ed7b07b897606d06b353f53",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/_parsed.cfg",
+ "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "90d0a8d5622c81922045271d739a7cb2dfcadfa85af7468cac5b06e8b365440a",
+ "chksum_sha256": "8c4d2b031234ceb533507d437a610a5d19f6dc3b4622650baf62a06d21c864e1",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/_populate_config.yaml",
+ "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ff31325e71e86e7007d9b29d08c9f407956972156df495ac07024154d928513a",
+ "chksum_sha256": "9aae7589fd152283c827668756aa807df73d6b0e3b02a39329aa5adb982a34aa",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6731146ad09a00a0ea8505b832cc08a897090e74ff69d2b5f37e3aec40689555",
+ "chksum_sha256": "9c6bcba044debf2f522bd4cc8acc2be21c0534b4429bf491b01c7c4c4d6ba1e4",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0c48041607d4f3f9751372d34ec71b765e96d62f3d2a162c324a5ef048958c4c",
+ "chksum_sha256": "6a05e793c4dee9a71aa7360480ff679ff1ac5901b01b5b8b847f0ee8919daa53",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b943b447000b4e451ac3dc7544d79fe0691086f8eb2a4d34d1e248ad9934d378",
+ "chksum_sha256": "59dc8c2804a3b783878bb6af8d7c390e7ecd8c78e024aae5d329d253ae0439f0",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_templates/vars",
+ "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_l3_interfaces/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_templates/vars/main.yml",
+ "name": "tests/integration/targets/iosxr_l3_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "74c848224ffad63d69ccdb5967ad262f67070521cc6e66d3e4a007f864e2971e",
+ "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_logging",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/iosxr_l3_interfaces/tasks/cli.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_logging/tasks",
+ "name": "tests/integration/targets/iosxr_ping",
"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",
+ "name": "tests/integration/targets/iosxr_ping/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_logging/tasks/cli.yaml",
+ "name": "tests/integration/targets/iosxr_ping/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "226f3a6bf7002dddaa01371fffd0478b580563bdd21ca7212f2d768935f5be13",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_logging/tasks/netconf.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "fa9c4a9fe2092e91f2ea6b09ad81329cfee0b30084180265f361621d15caddfc",
+ "name": "tests/integration/targets/iosxr_ping/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_logging/meta",
+ "name": "tests/integration/targets/iosxr_ping/tests/cli",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_logging/meta/main.yaml",
+ "name": "tests/integration/targets/iosxr_ping/tests/cli/ping.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06",
+ "chksum_sha256": "5c196cce06bc05f3315cddb3f355cb0b4d6417314c420e64d3af66765d697551",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_logging/defaults",
+ "name": "tests/integration/targets/iosxr_ping/tasks",
"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/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
+ "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_logging/tests",
+ "name": "tests/integration/targets/iosxr_ping/tasks/cli.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/iosxr_netconf",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_logging/tests/cli",
+ "name": "tests/integration/targets/iosxr_netconf/defaults",
"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_netconf/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0ed1aa824bbd24c758b317e46cea14e2b97fb05ab28b8699aa8f790bee3b9334",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_logging/tests/netconf",
+ "name": "tests/integration/targets/iosxr_netconf/meta",
"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_netconf/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c9206e795c6094a95fd7200603ecda2c2320e0eb1420ecab9ae76c047d31a27f",
+ "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_static_routes",
+ "name": "tests/integration/targets/iosxr_netconf/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_static_routes/tasks",
+ "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/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "132a5c51daf268caea032e927c4d608384e0e212a9d2db31417238aa9e7f7d06",
- "format": 1
- },
- {
- "name": "tests/integration/targets/iosxr_static_routes/tasks/cli.yaml",
+ "name": "tests/integration/targets/iosxr_netconf/tests/cli/basic.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8c378f7a2ccabe54f2708379bb4258b6687e55d75f71f23690a7bf19a89895f5",
+ "chksum_sha256": "e68ba6599b56873a91e4b0002751395d61ce254351af0256b215d553229d0984",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_static_routes/defaults",
+ "name": "tests/integration/targets/iosxr_netconf/tasks",
"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/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_static_routes/tests",
+ "name": "tests/integration/targets/iosxr_netconf/tasks/cli.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "19f48e1c0e26a39016c6e5d4b89a0cb15fdaa31aa34a29e64f7e595e3c1fe967",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/iosxr_banner",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_static_routes/tests/cli",
+ "name": "tests/integration/targets/iosxr_banner/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_static_routes/tests/cli/_remove_config.yaml",
+ "name": "tests/integration/targets/iosxr_banner/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "db869687ce8a3c6f01b918be52a77e107f74116a43fe8fc9bcae14d5def7994b",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_static_routes/tests/cli/deleted.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "00937ba6bd39c8d9b9d57e9afafa09812ac1f9be681301623220ce59ad57de5d",
+ "name": "tests/integration/targets/iosxr_banner/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_static_routes/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/iosxr_banner/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f241eedfb974aee95dacdb64a7a2bd4120059f7854460bda9d3e4acf0d806fab",
+ "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_static_routes/tests/cli/empty_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "83dc069647949b99a4cbf01a41fce4b29ef2eb0e420bf3f27b8b7e40de474542",
+ "name": "tests/integration/targets/iosxr_banner/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_static_routes/tests/cli/rtt.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9a63bcc02761c785c2d76ea2af8ec715510cab7a13e2cb65223a0b2dc105f290",
+ "name": "tests/integration/targets/iosxr_banner/tests/cli",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_static_routes/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/iosxr_banner/tests/cli/basic-motd.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9dd1cf36a11cfb51274f12498a802efb7767a084a8c55f431f777060da24c70e",
+ "chksum_sha256": "a63b5980f97093dfa1ff3c6f3730f2ca0eb3c011af4430267f16cccdc0234d72",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_static_routes/tests/cli/overridden.yaml",
+ "name": "tests/integration/targets/iosxr_banner/tests/cli/basic-login.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "43f8d39f847501b94cbd8af0deb64f4e30353fc524822f2b2ed585fac61e0b63",
+ "chksum_sha256": "00656d9558735dc363fc4ba83a58620f10aa6ad82ab4554f00ed2655922f59bd",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_static_routes/tests/cli/delete_specific.yaml",
+ "name": "tests/integration/targets/iosxr_banner/tests/cli/basic-no-login.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4f228479698428bdefd45f559f3bfe6413dc9f46f01c8ceb54a6474dbf16b5c9",
+ "chksum_sha256": "25e88c9b68237bdf23639108d7085f04bedec5592b86fb12467e7e3ba449ca2a",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_static_routes/tests/cli/_populate_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1735d21dcfcca3b2e613b10c51eb2a0ecaad2a6f6f44fc71baae6e3a8704c0ff",
+ "name": "tests/integration/targets/iosxr_banner/tests/netconf",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_static_routes/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/iosxr_banner/tests/netconf/basic-motd.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2feedb5681526e889cbf30419b57f28143f328d184b986a53fcd106a3014b490",
+ "chksum_sha256": "52cb507d481aa76f0a7685583fa5c7828e6271804fe2a90b34fa7159c24eae54",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_static_routes/tests/cli/parsed.yaml",
+ "name": "tests/integration/targets/iosxr_banner/tests/netconf/basic-login.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6db71c5ade8ac5f359f7bb484d517f21dd6c163ee24c64d281992184ee4c783",
+ "chksum_sha256": "d831f48454277a06c4809abc0d238b1963f16278853be6be3eee834b0bffd3ba",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_static_routes/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/iosxr_banner/tests/netconf/basic-no-login.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "854e3935b164f2f04624c7fef6c59a8dca0808cd4d063a9da2f632f85f94dc3e",
+ "chksum_sha256": "50f1c5622a99ec54a98a3b978dee91614909adcedf67378c13cd2f3cb09e48b7",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_static_routes/fixtures",
+ "name": "tests/integration/targets/iosxr_banner/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_static_routes/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/iosxr_banner/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6e148c74b09c0b22e87e8e55b815a0250281aa8daabde38b951b425cfbec2442",
+ "chksum_sha256": "303b9dff6309fcb32b8eb1e05d36298973519248849c1ddb442a6ce54e4ae491",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_static_routes/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/iosxr_banner/tasks/cli.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "aeaea690f4a27b4af77c33a24968cdc89de2ca73e590d9ec1db4b80842750bb7",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_static_routes/vars/main.yaml",
+ "name": "tests/integration/targets/iosxr_banner/tasks/netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d2335eeeaa4ace8094a5daa3fa60d634693f9b07c483babba9e3c6c265d77508",
+ "chksum_sha256": "74e0fd06296ba78b354273f00e39a2cb9f77e8102eddc40deb284d83c52255ba",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family",
+ "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/tasks",
+ "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/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "afc73a39f8a8861930e2a6a542ccd07426663ec0584b218987ef2b456d8c00d7",
- "format": 1
- },
- {
- "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tasks/cli.yaml",
+ "name": "tests/integration/targets/iosxr_command/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "73e48db0c23a63565816ea0d938e972a0a9daee404ea69b57fc39f403f1288ac",
+ "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/meta",
+ "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/meta/main.yaml",
+ "name": "tests/integration/targets/iosxr_command/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/defaults",
+ "name": "tests/integration/targets/iosxr_command/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/defaults/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
- "format": 1
- },
- {
- "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests",
+ "name": "tests/integration/targets/iosxr_command/tests/cli",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/iosxr_command/tests/cli/invalid.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "985f58c4989f203f257c68725a9877e3ee3b5f4783af27429698e9a335d40605",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/_route_policy.cfg",
+ "name": "tests/integration/targets/iosxr_command/tests/cli/timeout.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0357901519ac8ac68f6c7059838c4cec150ef91418cbe8f82efc4c0d43f6fa9c",
+ "chksum_sha256": "96843e537eee47517c5049885b84061a141b2eeba5680c11c5b66693d7be09b5",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/_remove_config.yaml",
+ "name": "tests/integration/targets/iosxr_command/tests/cli/cli_command.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c455861f770ac7341d3e29ba6804ffdd075bd6fac56f4e5f07b494eb12aa6cc7",
+ "chksum_sha256": "36008ced825f92916c9c1a8063d7d3af07a89cc64d6692a28d825eb1c6a020be",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/_populate_vrf_base_config.yaml",
+ "name": "tests/integration/targets/iosxr_command/tests/cli/bad_operator.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9d94b9491a045f06789eaaa96222a72a7dd8f65c48d45d88dba16fac049fd704",
+ "chksum_sha256": "9d53587f24caf85f74a90aa38d629e1821967b99c42a52603745a2536000bc64",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/deleted.yaml",
+ "name": "tests/integration/targets/iosxr_command/tests/cli/output.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "faf8165e1aa4827820ee0e9a0ff2c418cf23c682592ada66b626266facf9d1b9",
+ "chksum_sha256": "53ebb6e7f4ab53c74c9baa8d4f0bb7b62453e6cdd0e974df88dc334d573aaf6f",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/iosxr_command/tests/cli/prompt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9c36f82fabc3726780c6dcef3a0fa8d4d7fa7d019fef1d97e076b8fe18a443fa",
+ "chksum_sha256": "1c2d2d6c07d37bbd84190440034126fc5d74de4e55e824813974e059a9413ec2",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/empty_config.yaml",
+ "name": "tests/integration/targets/iosxr_command/tests/cli/contains.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bb4ab173f008550df0cc48f83ecb505db4299ee8a9f026dff12c5af63d14b7fb",
+ "chksum_sha256": "7d9716e753ba5366a03ac74d4787a8cc31547382904b1316605503d481afb1b7",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/_populate_base_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a6c17c3999a6aa6f3d39720a51223d01ceba114a4e704ed27bec76342cd0abe0",
+ "name": "tests/integration/targets/iosxr_command/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/merged.yaml",
+ "name": "tests/integration/targets/iosxr_command/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "80bdc3eb58879b59242b45b0227e215f0c14772fb790850a5c4614c1d040852d",
+ "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/iosxr_command/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "70746bef62da91f4d74143ebbaee0b443f901bda32a4f1e5a841b32d4c6f6f66",
+ "chksum_sha256": "2dbe0b4a48613e36db6dc24d1cc5587a9339d560c7be5fb830643a5e9a97f6db",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/_parsed.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f559ed5b722bfebecf0cb6a696f9bbcb6ec56cf63c25e47be07bf9478e556e4e",
+ "name": "tests/integration/targets/iosxr_lag_interfaces",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/_populate_config.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": "018ace52485c2b1609f5d7d8893cfe0b99b5204eecee7eea3d3b634d614a1e1e",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/_populate_vrf_config.yaml",
+ "name": "tests/integration/targets/iosxr_lag_interfaces/vars",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/iosxr_lag_interfaces/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "19489912900216d55b30d715921bf8e1edad2d1945ce967383c9b10bf045aa1e",
+ "chksum_sha256": "e2e959c351c31c2016e6bb08f5f6ebad88c3e8bf6525d6f67c5d64e998fa9d82",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/iosxr_lag_interfaces/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cb254762f05493022cfab5268eb344f0aa9c5f62129bd422903006e890d1f01f",
+ "chksum_sha256": "9b815ed33546d40ccc361d9255a0b79a50a034a48262a0e9d92fea684e83938c",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "312204dc90b5c1572a58a7a44d7590f6da0274af0a9ac9102c9c1e762694d64f",
+ "chksum_sha256": "64195a6619101530f2cd471d76d6dbfea7ab3165c4f2763346f3c7ce3162077b",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "52cb77efeb2277f2766261efd23be1b385eb0a279a4858a160fbb23e6790f898",
+ "chksum_sha256": "9f9e3fec02b4ecb3c5316ec824369cfea049c05a0b2a95443a63d6afdac4d4bd",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/gathered.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4077106b1998d758480ba741ca583bcea9685e8d9df81838902a74f5da0b4e4f",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/vars/main.yml",
+ "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f9a9d7ca96d490c22c02070c8c68ba92103e69f4a072341a141d204d7173fe9f",
+ "chksum_sha256": "f847af0e5e79e0763bed170eb13e60c0cb994688d0b70f14d0ac7bd371ab1d1d",
"format": 1
},
{
- "name": "tests/integration/targets/prepare_iosxr_tests",
+ "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/fixtures",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/prepare_iosxr_tests/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/fixtures/parsed.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "161c4405c145118f98f3efc7f81cd20f53fd4eca7c0604a2e06824676426191b",
"format": 1
},
{
- "name": "tests/integration/targets/prepare_iosxr_tests/tasks/main.yml",
+ "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "31ae6f9228a0fabc3db6d87215aa04e1cb642f5b96cf95d40056dba6ddfcbae0",
+ "chksum_sha256": "4662bfa7d0b5cf776e2fbaedb8b5302d292f0454cacdea054518fd1e337d9fef",
"format": 1
},
{
- "name": "tests/integration/targets/prepare_iosxr_tests/meta",
- "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/prepare_iosxr_tests/meta/main.yaml",
+ "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "851860fe2ed1258710d7fcf89ac5b7d8c3c87755e89ca56fdd79bea022eb2b92",
+ "chksum_sha256": "05b0d34519c01bd8145069ef131b8c42b2d948fb308f4bd50c8d5cae88b6e285",
"format": 1
},
{
- "name": "tests/integration/targets/prepare_iosxr_tests/templates",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/merged.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "75580d3b17d3e54d3542f54410a63f647fd78e4e1167a42b01095baf6681164d",
"format": 1
},
{
- "name": "tests/integration/targets/prepare_iosxr_tests/templates/config.j2",
+ "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a21d7b66f513ecb424fd6e23df9f0737c855281f3a5d0be6c856a0d2ce7af23b",
+ "chksum_sha256": "0e74e052ae15e52a8d70aa1788ea86e4a2ca5287a18231c67c4fb8b65e3fc63f",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l2_interfaces",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/rtt.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "44b26adc92992ebff6de4aa4d43b0ccd72c5efb44b09416469866ca3eda28180",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l2_interfaces/tasks",
+ "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/tasks/main.yaml",
+ "name": "tests/integration/targets/iosxr_lag_interfaces/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_lag_interfaces/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l2_interfaces/meta",
+ "name": "tests/integration/targets/iosxr_lldp_global",
"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_lldp_global/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/iosxr_lldp_global/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_lldp_global/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_lldp_global/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "3a4ed71b399bcf1bbc0fd2978888ebf6d151bee360e2ab4d1c87fbe35198c936",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l2_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_l2_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_l2_interfaces/tests/cli/_remove_config.yaml",
+ "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/_populate.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "50d4197872d8d2199638a7049cfcaac7c3d9332ccdc4b432d84ab9eac3fe0899",
+ "chksum_sha256": "ad57db9e94ca2aadfd2f45b32c2e81e8e1704d7d5a195ce520512c16821edda5",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b908ec71d04a400c46745f5f6aa67edc06711a6fa409bb6ed2570d7b7bbc7f88",
+ "chksum_sha256": "1fc1699dbbe7a8cbfdf21bf4f22fb223de156d8a7d23ca00d8f623a4bb3e7837",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "133cc3a327728f918408d45c77742cd31e4cc17537871f0d02674a5a48c394c7",
+ "chksum_sha256": "8f1df41b44d45fac6172c094147565b4e877bb60cfae594134a6b1c43bca0f3b",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4d9508554b3caf42a189031a45bbe918f8d87ab46b49670f824f45e84f1f73b",
+ "chksum_sha256": "eb7802fd324a06c4462213a656f1cf305b31210533f51e9d741eb2d2493d289c",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "18a4c9c8fa0b4717435de1c5b0c06e1bcc37099d4e1e2f50cd52755b5382d90f",
+ "chksum_sha256": "c142d0fed11008b1a62e7486b30db686dba853439164655fafdef54909bc63bd",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/overridden.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9b651c37d64cbc8d8ce70ebbf64f9edf9f32ec1b9986713f8e786bb8dd1a5b93",
+ "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_l2_interfaces/tests/cli/_populate_config.yaml",
+ "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "86dfa2d949109a946c52fca30228bdf700908e44f122a528c64d6952f5d45a78",
+ "chksum_sha256": "cc8ece13d91edafdb680a275bf4c794d642f584b24963f75e91d399d26e90dce",
"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_lldp_global/tests/cli/deleted.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e7f5a8b2f177d64272fc6a947921672ba402efae9f50df985f9b026c4ed26f59",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l2_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": "26b4e7ee16aab6f1a3a11e5b8dcd55412e8afba623415469b2aa057b23126745",
+ "chksum_sha256": "95e5e93bdf0c29777aa2b210fd1cf1890625966262998e2661116ec817049717",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8735a17ccab3ecd1af096f3d1c722e7db3b0ae5c7e48667aba20f9ec6b155d08",
+ "chksum_sha256": "e49f9c535fa7caa99d4f479101a39f837189d97b785fb02af518895f2c0fe9f1",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/parsed.yaml",
+ "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9eb5c038a48458b36702ea94d1bc8172511a8eadeec71fe922d406cfebf4b5c7",
+ "chksum_sha256": "a9dcf714eef59cc87ef2c4f4f117074297213b19694e6a8cedbd50760f2b39b3",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ca461ff84f99d15126252d878ef50b92ce916783f8cb6ff91f2e2342144dcd7a",
+ "chksum_sha256": "c23d2dbb51d7164eab5fed3e834136b9c58d8912110cde108a85f0e20e091aac",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_l2_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_l2_interfaces/vars/main.yaml",
+ "name": "tests/integration/targets/iosxr_lldp_global/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c659daf4218da5a2de29b769dc1250d37a6a80151c93a58fb3958289f5d8d59f",
+ "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lag_interfaces",
+ "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_ospf_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lag_interfaces/tasks",
+ "name": "tests/integration/targets/iosxr_ospf_interfaces/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lag_interfaces/tasks/main.yaml",
+ "name": "tests/integration/targets/iosxr_ospf_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lag_interfaces/tasks/cli.yaml",
+ "name": "tests/integration/targets/iosxr_ospf_interfaces/vars",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/iosxr_ospf_interfaces/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
+ "chksum_sha256": "934f6f7a277e34f616d5459e1989f9e0faeaf4e0a61444289abfaf37ee120659",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lag_interfaces/defaults",
+ "name": "tests/integration/targets/iosxr_ospf_interfaces/fixtures",
"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_ospf_interfaces/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "d11bd78a2d74e8dc46a2880b54b3500e2f88cc4e3e6fd42a249138556e94964a",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lag_interfaces/tests",
+ "name": "tests/integration/targets/iosxr_ospf_interfaces/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_ospf_interfaces/tests/cli",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "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_lag_interfaces/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4662bfa7d0b5cf776e2fbaedb8b5302d292f0454cacdea054518fd1e337d9fef",
+ "chksum_sha256": "c1cd77375707ee0397f1efbd07a4f7fdfcfbec26c86042f65c7f29f3cca9a9c3",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4077106b1998d758480ba741ca583bcea9685e8d9df81838902a74f5da0b4e4f",
+ "chksum_sha256": "96c0644d6833fa509126bfa843bb259b9c9963e2e53d5fee080bb3cdece99de7",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f847af0e5e79e0763bed170eb13e60c0cb994688d0b70f14d0ac7bd371ab1d1d",
+ "chksum_sha256": "50f480556a54480a5cff156bcb4a8fad88e60404f4ca0ffd94df379667fd7bac",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/rtt.yaml",
+ "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "44b26adc92992ebff6de4aa4d43b0ccd72c5efb44b09416469866ca3eda28180",
+ "chksum_sha256": "40b9f6860fef89f7797529730ca794a03fef91355da74053086820283a821df5",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75580d3b17d3e54d3542f54410a63f647fd78e4e1167a42b01095baf6681164d",
+ "chksum_sha256": "52c1f9bebbf6821f0b098ff9cbcdb8a1b30b1044a88f3b89e8fb8e76ea9b37c8",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/overridden.yaml",
+ "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "05b0d34519c01bd8145069ef131b8c42b2d948fb308f4bd50c8d5cae88b6e285",
+ "chksum_sha256": "a06cf74352024ffccea204ef3822fe08618aba04915148c8736f6387331f3662",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/_populate_config.yaml",
+ "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/_remove_config.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": "b4377cdd354c797bde70b1ab79c25b8126309a735c3e52ada4dd3cf2c61db4c3",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "161c4405c145118f98f3efc7f81cd20f53fd4eca7c0604a2e06824676426191b",
+ "chksum_sha256": "b9a8c7d0bff4202802918716797b5c1a831da98ca2bebe674f77d3e13de6b1f6",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0e74e052ae15e52a8d70aa1788ea86e4a2ca5287a18231c67c4fb8b65e3fc63f",
+ "chksum_sha256": "6627fdd69a02636b86a4d138377f7e54897986e3f16878ff6a55e573eeac3793",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/parsed.yaml",
+ "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9b815ed33546d40ccc361d9255a0b79a50a034a48262a0e9d92fea684e83938c",
+ "chksum_sha256": "4ea507d63e8a9cff4eb0a1fc7dbb6a4bf4e85fe8bf3f0075dbbc6e3505648d69",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9f9e3fec02b4ecb3c5316ec824369cfea049c05a0b2a95443a63d6afdac4d4bd",
+ "chksum_sha256": "b92b9c34db1ed38368a5daa18ab827267e694b837a278a42224c5652f0f3d876",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lag_interfaces/vars",
+ "name": "tests/integration/targets/iosxr_ospf_interfaces/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_ospf_interfaces/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_ospf_interfaces/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_static_routes",
"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_static_routes/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_static_routes/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_static_routes/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_static_routes/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06",
+ "chksum_sha256": "d2335eeeaa4ace8094a5daa3fa60d634693f9b07c483babba9e3c6c265d77508",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_command/defaults",
+ "name": "tests/integration/targets/iosxr_static_routes/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_static_routes/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
+ "chksum_sha256": "6e148c74b09c0b22e87e8e55b815a0250281aa8daabde38b951b425cfbec2442",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_command/tests",
+ "name": "tests/integration/targets/iosxr_static_routes/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_command/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_command/tests/cli/prompt.yaml",
+ "name": "tests/integration/targets/iosxr_static_routes/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1c2d2d6c07d37bbd84190440034126fc5d74de4e55e824813974e059a9413ec2",
+ "chksum_sha256": "f6db71c5ade8ac5f359f7bb484d517f21dd6c163ee24c64d281992184ee4c783",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_command/tests/cli/invalid.yaml",
+ "name": "tests/integration/targets/iosxr_static_routes/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "985f58c4989f203f257c68725a9877e3ee3b5f4783af27429698e9a335d40605",
+ "chksum_sha256": "1735d21dcfcca3b2e613b10c51eb2a0ecaad2a6f6f44fc71baae6e3a8704c0ff",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_command/tests/cli/contains.yaml",
+ "name": "tests/integration/targets/iosxr_static_routes/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7d9716e753ba5366a03ac74d4787a8cc31547382904b1316605503d481afb1b7",
+ "chksum_sha256": "854e3935b164f2f04624c7fef6c59a8dca0808cd4d063a9da2f632f85f94dc3e",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_command/tests/cli/bad_operator.yaml",
+ "name": "tests/integration/targets/iosxr_static_routes/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9d53587f24caf85f74a90aa38d629e1821967b99c42a52603745a2536000bc64",
+ "chksum_sha256": "f241eedfb974aee95dacdb64a7a2bd4120059f7854460bda9d3e4acf0d806fab",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_command/tests/cli/output.yaml",
+ "name": "tests/integration/targets/iosxr_static_routes/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "53ebb6e7f4ab53c74c9baa8d4f0bb7b62453e6cdd0e974df88dc334d573aaf6f",
+ "chksum_sha256": "83dc069647949b99a4cbf01a41fce4b29ef2eb0e420bf3f27b8b7e40de474542",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_command/tests/cli/timeout.yaml",
+ "name": "tests/integration/targets/iosxr_static_routes/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "96843e537eee47517c5049885b84061a141b2eeba5680c11c5b66693d7be09b5",
+ "chksum_sha256": "00937ba6bd39c8d9b9d57e9afafa09812ac1f9be681301623220ce59ad57de5d",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_command/tests/cli/cli_command.yaml",
+ "name": "tests/integration/targets/iosxr_static_routes/tests/cli/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "36008ced825f92916c9c1a8063d7d3af07a89cc64d6692a28d825eb1c6a020be",
- "format": 1
- },
- {
- "name": "tests/integration/targets/iosxr_netconf",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "db869687ce8a3c6f01b918be52a77e107f74116a43fe8fc9bcae14d5def7994b",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_netconf/tasks",
- "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_netconf/tasks/main.yaml",
+ "name": "tests/integration/targets/iosxr_static_routes/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822",
+ "chksum_sha256": "9dd1cf36a11cfb51274f12498a802efb7767a084a8c55f431f777060da24c70e",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_netconf/tasks/cli.yaml",
+ "name": "tests/integration/targets/iosxr_static_routes/tests/cli/delete_specific.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "19f48e1c0e26a39016c6e5d4b89a0cb15fdaa31aa34a29e64f7e595e3c1fe967",
+ "chksum_sha256": "4f228479698428bdefd45f559f3bfe6413dc9f46f01c8ceb54a6474dbf16b5c9",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_netconf/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "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_netconf/meta/main.yaml",
+ "name": "tests/integration/targets/iosxr_static_routes/tests/cli/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06",
+ "chksum_sha256": "9a63bcc02761c785c2d76ea2af8ec715510cab7a13e2cb65223a0b2dc105f290",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_netconf/defaults",
+ "name": "tests/integration/targets/iosxr_static_routes/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_netconf/defaults/main.yaml",
+ "name": "tests/integration/targets/iosxr_static_routes/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
+ "chksum_sha256": "132a5c51daf268caea032e927c4d608384e0e212a9d2db31417238aa9e7f7d06",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_netconf/tests",
+ "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_netconf/tests/cli",
+ "name": "tests/integration/targets/iosxr_logging_global/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_logging_global/defaults/main.yml",
"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": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lldp_global/tasks",
+ "name": "tests/integration/targets/iosxr_logging_global/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_logging_global/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
+ "chksum_sha256": "4a069b29e331858b268f0a2ab9ace19d5bf793703a8b5c452ac8724a6570506e",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lldp_global/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_global/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_global/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_global/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_global/tests/cli/_remove_config.yaml",
+ "name": "tests/integration/targets/iosxr_logging_global/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "95e5e93bdf0c29777aa2b210fd1cf1890625966262998e2661116ec817049717",
+ "chksum_sha256": "10bb238d21d24df6fe4e476d542492839c1943430ea17c6cf9275eb4790da423",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/iosxr_logging_global/tests/common/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e7f5a8b2f177d64272fc6a947921672ba402efae9f50df985f9b026c4ed26f59",
+ "chksum_sha256": "909a21409e28a252b2c0d6fccf1e6c0e2cb51d710665aa7c0cafc11d6679a727",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/iosxr_logging_global/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eb7802fd324a06c4462213a656f1cf305b31210533f51e9d741eb2d2493d289c",
+ "chksum_sha256": "32b4a5eb23f7544ff53968c2f2f714963b86c198caa83facbb6e36be9cb85d49",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/iosxr_logging_global/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c142d0fed11008b1a62e7486b30db686dba853439164655fafdef54909bc63bd",
+ "chksum_sha256": "8149279cc0a1da197893f2b231b99e89d35f72f7eca43c0ded62a1f7938af73e",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/rtt.yaml",
+ "name": "tests/integration/targets/iosxr_logging_global/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c23d2dbb51d7164eab5fed3e834136b9c58d8912110cde108a85f0e20e091aac",
+ "chksum_sha256": "2b6b32698c946e6caf83b8d756358cf0fe146dcdf81efd2b020ce595eba38bd4",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/_populate.yaml",
+ "name": "tests/integration/targets/iosxr_logging_global/tests/common/_parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ad57db9e94ca2aadfd2f45b32c2e81e8e1704d7d5a195ce520512c16821edda5",
+ "chksum_sha256": "e9111575d03ca3e8cae1744708bc4329dd05fdd40ab5468d722198a6728b1dac",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/iosxr_logging_global/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e49f9c535fa7caa99d4f479101a39f837189d97b785fb02af518895f2c0fe9f1",
- "format": 1
- },
- {
- "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/fixtures",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "279dfdbc6e8e658f0034995198e414253f0a512c6590a311da073cae0a52d15b",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/iosxr_logging_global/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cc8ece13d91edafdb680a275bf4c794d642f584b24963f75e91d399d26e90dce",
+ "chksum_sha256": "6b79a9c0fb64ffb5ea3b2499161f3d284af835a1e17ff12cbfe838a09a936573",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/iosxr_logging_global/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a9dcf714eef59cc87ef2c4f4f117074297213b19694e6a8cedbd50760f2b39b3",
+ "chksum_sha256": "d72b330e428d01f36ce0ba454497558efb2aaa4a3d2f4423378d93febb7025a4",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/parsed.yaml",
+ "name": "tests/integration/targets/iosxr_logging_global/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1fc1699dbbe7a8cbfdf21bf4f22fb223de156d8a7d23ca00d8f623a4bb3e7837",
+ "chksum_sha256": "8e2c26f79a8f6cc6611dd48d408df870cc43853b8d8dd9ebe0af83465119b0df",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/iosxr_logging_global/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8f1df41b44d45fac6172c094147565b4e877bb60cfae594134a6b1c43bca0f3b",
+ "chksum_sha256": "02dd8a9273d456e158f8810372ee5f70c1b4ea56d70cfa11eb6dab8f9023b558",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lldp_global/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_global/vars/main.yaml",
+ "name": "tests/integration/targets/iosxr_logging_global/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3a4ed71b399bcf1bbc0fd2978888ebf6d151bee360e2ab4d1c87fbe35198c936",
+ "chksum_sha256": "afc73a39f8a8861930e2a6a542ccd07426663ec0584b218987ef2b456d8c00d7",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lldp_interfaces",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "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_lldp_interfaces/tasks",
+ "name": "tests/integration/targets/iosxr_user",
"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": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822",
+ "name": "tests/integration/targets/iosxr_user/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lldp_interfaces/tasks/cli.yaml",
+ "name": "tests/integration/targets/iosxr_user/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lldp_interfaces/defaults",
+ "name": "tests/integration/targets/iosxr_user/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_user/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lldp_interfaces/tests",
+ "name": "tests/integration/targets/iosxr_user/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_user/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/_remove_config.yaml",
+ "name": "tests/integration/targets/iosxr_user/tests/common/_auth.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "78ab712357d68b164ba677cffc2bc61cf9184dbe7eb616461b039880544c9d4f",
+ "chksum_sha256": "00191a8605978a3eb0394bd610914da6e741774b1c863542f02e33e0c1684187",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/deleted.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0bdd704c64456dc5bd746f258448a6c7c132cd3b2f06849f59bc8454e1b93189",
+ "name": "tests/integration/targets/iosxr_user/tests/cli",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/gathered.yaml",
+ "name": "tests/integration/targets/iosxr_user/tests/cli/basic.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bac4a7214f9a2a43940bb7ea473ad5c479dfed034cb1f092169751886339a4ab",
+ "chksum_sha256": "c0e5876713521246628445bdb96a184c1e60d03021606d7a36756530776b349e",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/empty_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3c0a26973a1f425dcb788f4de6ffb431f0fb3cb439b285427e259545f81d6079",
+ "name": "tests/integration/targets/iosxr_user/tests/netconf",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/rtt.yaml",
+ "name": "tests/integration/targets/iosxr_user/tests/netconf/basic.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6e0d64d1e1033c62bbc4da61e6f2e49fb79ca27eba372a6c557a6fabc8b01548",
+ "chksum_sha256": "9d98246d4804b3d836796e4bba10fe7ebf0fa0ecd3c991fb0e1273feba169520",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/_populate.yaml",
+ "name": "tests/integration/targets/iosxr_user/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/iosxr_user/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1fb4c8047c353cd10a83ff0a2f9eb2c3455e1b72e81165bfecb475a5969d11c1",
+ "chksum_sha256": "303b9dff6309fcb32b8eb1e05d36298973519248849c1ddb442a6ce54e4ae491",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/iosxr_user/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4c33155ba2ec1dea7921b926e4baa656122f8bdf75ab4e39c85fba98e981d7f6",
+ "chksum_sha256": "70521f927ee1761e08f277a254437be92c536918337892bcf0c5c0368957d99a",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/overridden.yaml",
+ "name": "tests/integration/targets/iosxr_user/tasks/netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2c10d1cc4272407919910b0b6c62badf94ef67f853fa1ac99a581603cc9ed7da",
+ "chksum_sha256": "6650a55f6db383c6dea0285df827b038a5080894e176da4ff5ba05a71d8f007d",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/fixtures",
+ "name": "tests/integration/targets/iosxr_interfaces",
"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": "09906ee86cc2c5b1a515dafa190e3576def507f53ed9563c471db011ab76eb54",
+ "name": "tests/integration/targets/iosxr_interfaces/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/replaced.yaml",
+ "name": "tests/integration/targets/iosxr_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aa7e3e3c95400ac64035e994ec52bc2663674bb98562dd66e70cd1a18cab813b",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/parsed.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e2d359d45a561dcc99db2945a7e3de3c4e3564caaac19c643672331b7a2c26e0",
+ "name": "tests/integration/targets/iosxr_interfaces/vars",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/rendered.yaml",
+ "name": "tests/integration/targets/iosxr_interfaces/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "095271b41184a0146f918498fb43a1d4808359cad386c08f3ff6ff8ae3991fc4",
+ "chksum_sha256": "628f1746159ca78d2b44a74e2309d2db9b380b5a8582fb2c0f0b92c3ba38e95f",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lldp_interfaces/vars",
+ "name": "tests/integration/targets/iosxr_interfaces/meta",
"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_interfaces/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0dca88a635c4df7935a64b62dcc4e29afc8ea29e79c5a69790d9fa39248aa593",
+ "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_smoke",
+ "name": "tests/integration/targets/iosxr_interfaces/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_smoke/tasks",
+ "name": "tests/integration/targets/iosxr_interfaces/tests/cli",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_smoke/tasks/main.yaml",
+ "name": "tests/integration/targets/iosxr_interfaces/tests/cli/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "303b9dff6309fcb32b8eb1e05d36298973519248849c1ddb442a6ce54e4ae491",
+ "chksum_sha256": "9d90b33bba17d4d2ae74d79879e9163f0c413e1d4f076d7817c3a856e456e41f",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_smoke/tasks/cli.yaml",
+ "name": "tests/integration/targets/iosxr_interfaces/tests/cli/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "40afb148ddcbe35a254f1ce45c8ba687b3b892aab717f66681c6be8bde22e308",
+ "chksum_sha256": "2390ab9c8c2958dd0623138f888fa1db1e40d20023bb803e5a1fdc9906be8504",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_smoke/tasks/netconf.yaml",
+ "name": "tests/integration/targets/iosxr_interfaces/tests/cli/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4ad5dae3d18e72e98b8a55fdd73f3b01d51db09ebb761501da3b84d54a36a945",
+ "chksum_sha256": "c2426117bdd1320e641684a463c4b947c1864f76710eda7ed9a36c06c1b3615f",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_smoke/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/iosxr_interfaces/tests/cli/gathered.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4b561e6501b1861665d181d39f4882f6c99b610c359d7294443b5e37722edf6b",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_smoke/meta/main.yaml",
+ "name": "tests/integration/targets/iosxr_interfaces/tests/cli/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06",
+ "chksum_sha256": "9e989cbdc6bc0299a75483abb2bc9f771224d13dbdd084992fd71e6ef57f1a5a",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_smoke/defaults",
+ "name": "tests/integration/targets/iosxr_interfaces/tests/cli/fixtures",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_smoke/defaults/main.yaml",
+ "name": "tests/integration/targets/iosxr_interfaces/tests/cli/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
+ "chksum_sha256": "e7f495f2b2f098efc4830e55aecc165536ef8cacbf35fcefc030cfa3a6a5a345",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_smoke/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/iosxr_interfaces/tests/cli/_remove_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "44b35581001d7173e1b8f2fb5c3f8804692c59c87594ba3f4bdf1458cdd56256",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_smoke/tests/cli",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/iosxr_interfaces/tests/cli/merged.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f6957f1a450e714240cdf34121eaf5099db25f1bda037680c8af357fef80839b",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_smoke/tests/cli/common_config.yaml",
+ "name": "tests/integration/targets/iosxr_interfaces/tests/cli/_overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1090b517c30bb3086c8e82909cafae786ef234aa5e49db4073cd7ed94a1339be",
+ "chksum_sha256": "26eb03219bcc0caba6d5b3be37a6bce7fa846c1e5ea6d2df9a5fba581597d7af",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_smoke/tests/cli/caching.yaml",
+ "name": "tests/integration/targets/iosxr_interfaces/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e1dba81f68c64f197ee9bf87378ce1306b01740319f063a555bc3ed23ede1a01",
+ "chksum_sha256": "d3915314d2bb6a8c96a0f18c7cc4d1bdbb6a16e78a660baf7328ca5f6fc854a1",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_smoke/tests/netconf",
+ "name": "tests/integration/targets/iosxr_interfaces/tests/cli/_deleted.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d1264641b82c36fe0d15026aa6bcf379dcde00c183ca8f1283a7e9db9880c50d",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/iosxr_interfaces/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_smoke/tests/netconf/common_netconf.yaml",
+ "name": "tests/integration/targets/iosxr_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "101eb3edf7114ed0a02320acc9b5a3d91add238079336f8e6a020bead66924d0",
+ "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp_interfaces",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/iosxr_interfaces/tasks/cli.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp_interfaces/tasks",
+ "name": "tests/integration/targets/iosxr_smoke",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp_interfaces/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822",
+ "name": "tests/integration/targets/iosxr_smoke/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp_interfaces/tasks/cli.yaml",
+ "name": "tests/integration/targets/iosxr_smoke/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp_interfaces/defaults",
+ "name": "tests/integration/targets/iosxr_smoke/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_smoke/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp_interfaces/tests",
+ "name": "tests/integration/targets/iosxr_smoke/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_smoke/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_smoke/tests/cli/common_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec8d829135a6074a8ad75ee76a2a1a4079e03325d92c0e830515cbf90f31eb6f",
+ "chksum_sha256": "1090b517c30bb3086c8e82909cafae786ef234aa5e49db4073cd7ed94a1339be",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/iosxr_smoke/tests/cli/caching.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be06b4f3cb25a95c6d1950c4919025c1cb15e114624d59b18c0eaa5a7d79b52f",
+ "chksum_sha256": "e1dba81f68c64f197ee9bf87378ce1306b01740319f063a555bc3ed23ede1a01",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/gathered.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d6ba2253349b074129effa793f31923b22ae2448ce58a9549023db855839460d",
+ "name": "tests/integration/targets/iosxr_smoke/tests/netconf",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/empty_config.yaml",
+ "name": "tests/integration/targets/iosxr_smoke/tests/netconf/common_netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "14d91239138aa32bb7f451a89aefff422136e57427583623a172747eb5814453",
+ "chksum_sha256": "9a5d023cd3bf0c576500f9f1e668d87d626b8d7c36d45771b7f02837bcfcbbc4",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/rtt.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f5bdefcaae69fa3cffe08302fb9dc9f706c3fd00edd4d2c86d032983d66bedbf",
+ "name": "tests/integration/targets/iosxr_smoke/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/_populate.yaml",
+ "name": "tests/integration/targets/iosxr_smoke/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2b84773b00c039d32e50e18779dfd48fc98e4f0012351d6d6c1ecbd740d25936",
+ "chksum_sha256": "303b9dff6309fcb32b8eb1e05d36298973519248849c1ddb442a6ce54e4ae491",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/iosxr_smoke/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6e7cf195c2dfadb34e7393d4c74acbbfcb568899d7461c2bb6b4fa5acbc48b70",
+ "chksum_sha256": "40afb148ddcbe35a254f1ce45c8ba687b3b892aab717f66681c6be8bde22e308",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/overridden.yaml",
+ "name": "tests/integration/targets/iosxr_smoke/tasks/netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a8d21a0b454b78c9643c6d1c47de95eafb44e9199b1a8bca7588c0d9c91cca02",
+ "chksum_sha256": "4ad5dae3d18e72e98b8a55fdd73f3b01d51db09ebb761501da3b84d54a36a945",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/fixtures",
+ "name": "tests/sanity",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/fixtures/parsed.cfg",
+ "name": "tests/sanity/ignore-2.15.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "81e585cfbf29f1293be9881382ce419c6a2b0cbf9c1f87be057a241de2f44f98",
+ "chksum_sha256": "b7a7260f01ad97d899400efb85c91ed3a63d922bc40a0dfda0d99a9f7f55b995",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/replaced.yaml",
+ "name": "tests/sanity/ignore-2.14.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "717d1fb8c96130db8d6288c45c7c8dc46222d03917bf77b322b871ffcafd3a99",
+ "chksum_sha256": "b7a7260f01ad97d899400efb85c91ed3a63d922bc40a0dfda0d99a9f7f55b995",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/parsed.yaml",
+ "name": "tests/sanity/ignore-2.18.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "417f4d3094f95606aac731b14ae567a97c7b703114b88423cb677e0f6b2cc06c",
+ "chksum_sha256": "a8ce632758a8bb8372e36359bbc44782b2b964f48b353e18ad5a9fd3cc91a67f",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/rendered.yaml",
+ "name": "tests/sanity/ignore-2.17.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9dad2238d7ee4b8fb78919028c1bb64ba29d4e2088f53ecf5fa99ea9c5e29c87",
+ "chksum_sha256": "a8ce632758a8bb8372e36359bbc44782b2b964f48b353e18ad5a9fd3cc91a67f",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp_interfaces/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/sanity/ignore-2.16.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a8ce632758a8bb8372e36359bbc44782b2b964f48b353e18ad5a9fd3cc91a67f",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_lacp_interfaces/vars/main.yaml",
+ "name": "tests/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "29a8acf3766df1e54abe6a3dadfc393571647722393b132444952162b30a60ae",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config",
+ "name": "tests/config.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4129945061440c8d8c281590b8054b194f5958833c722aa40e878b09038c380e",
+ "format": 1
+ },
+ {
+ "name": "tests/unit",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/tasks",
+ "name": "tests/unit/mock",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/tasks/main.yaml",
+ "name": "tests/unit/mock/loader.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3ba11d0a6ecc4c096ca24c09fc0f707954d3dc64ac8964ea17901fe60887213a",
+ "chksum_sha256": "2343d1f644250d4b616f0bf0a826fdee8fe306243d8412d44dd0e033352b262b",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/tasks/cli.yaml",
+ "name": "tests/unit/mock/yaml_helper.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aeaea690f4a27b4af77c33a24968cdc89de2ca73e590d9ec1db4b80842750bb7",
+ "chksum_sha256": "134eef238c83a9611799871b743e49e9bfbcd8bdddf2cc6a7bf69fd1000345b3",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/tasks/cli_config.yaml",
+ "name": "tests/unit/mock/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c2b1c324c2399a7589d2fd4a7ed9b201f8a8299424924277b67298903db1d3cd",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/tasks/redirection.yaml",
+ "name": "tests/unit/mock/vault_helper.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4dda061736323dd09fa0832d73a74f4dec4a7c4665357ad20c914f15778cf99f",
+ "chksum_sha256": "55bd0e924dcc22d050612c944bff0ef745e51faac9260dce9b9b2018c4c8a661",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/mock/procenv.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8355a91c013778f8b70896222e8223d67b743fd8ba2bf541f4ea4d7d460b01ef",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/meta/main.yml",
+ "name": "tests/unit/mock/path.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06",
+ "chksum_sha256": "110552d5ab0ffabe2bc6b6c57e9f389be3920da2e0f37ea5b628795d1b426bfd",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/defaults",
+ "name": "tests/unit/modules",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/defaults/main.yaml",
+ "name": "tests/unit/modules/conftest.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
+ "chksum_sha256": "e0ae70fa7c2a5e56d7f02a47c3602398cff60c8eb021772ac59a76df2a234048",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/tests",
- "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/integration/targets/iosxr_config/tests/cli",
+ "name": "tests/unit/modules/network",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/tests/cli/toplevel_before.yaml",
+ "name": "tests/unit/modules/network/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "19a5a9e3043bd0b74fd7e71956374e204626d4346262c0c4cd3d9c579bb89f87",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/tests/cli/toplevel_after.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "75053a4dca4669bd74e8c0edca7056cd31c40751cba6379774c337e466203cd6",
+ "name": "tests/unit/modules/network/iosxr",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/tests/cli/sublevel_strict.yaml",
+ "name": "tests/unit/modules/network/iosxr/test_iosxr_snmp_server.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "33a343c4930c4bd86c2f660177d059bdf6c44e52b4224ecd7e8ade878687544a",
+ "chksum_sha256": "85bff5db9dde7093986838c4c2d7772f2efc2b64ffcd04b6757f2986d63c16ca",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/tests/cli/extcommunity_set_config.yaml",
+ "name": "tests/unit/modules/network/iosxr/test_iosxr_bgp_neighbor_address_family.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cb9f1df2b57e8364e823fb60276e322bd994be2df12b42a7cfddb461bb3e0dc0",
+ "chksum_sha256": "a20f0580ae955a5fc59f6a8d7bf0c85eb26a62b2145b1e6c398944ba46badd90",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/tests/cli/commit_label.yaml",
+ "name": "tests/unit/modules/network/iosxr/test_iosxr_netconf.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "873e365af69c26af8ed84b963e8f670dfbf86dca68811b164b1465417160070a",
+ "chksum_sha256": "9bb0d664660d05259b1bdbb4f443cae4233eed8bcbdd0f694024b367a195e892",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/tests/cli/commit_confirmed.yaml",
+ "name": "tests/unit/modules/network/iosxr/iosxr_module.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9653c9ff2afc35783f116961cb926bb5f1943c963d05125998cf71c2d18bc182",
+ "chksum_sha256": "44fe73a4355f43b735971cdf2927a17ca35a317d8d3dcf7eba3679e42f827bf7",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/tests/cli/src_match_none.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "21a37a276566385dcce522dd5b49dbcc7615ee5ef44b197b753875c469efa34a",
+ "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/sublevel_block.yaml",
+ "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_system_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "45be4aed01d01d3a88065e21b231390a90c01575db70fe99bc373d253a483945",
+ "chksum_sha256": "18ae20e11b3f557435b212a739a50c59c95e4162dc13989695e6c14ae35e58f7",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/tests/cli/toplevel_nonidempotent.yaml",
+ "name": "tests/unit/modules/network/iosxr/fixtures/show_memory_summary",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4b629cb3f6c037494f307266e968320063f5533907d7b2b73a2f4c0cb8b91508",
+ "chksum_sha256": "c0fedc43463c95b152254b43d741b62c704ffc82b2707b758d1294283384c4e0",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/tests/cli/toplevel.yaml",
+ "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_l3_interface_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "98194ad2b27b0a9722de6305af5d2446201c488a21e52d33f31b82f51dcb9dbc",
+ "chksum_sha256": "50f889004120619f090c295fe5f40c5575c0a4feaed60a14d863d00bf25bd2a0",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/tests/cli/sublevel_strict_mul_parents.yaml",
+ "name": "tests/unit/modules/network/iosxr/fixtures/show_lldp",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8e641ad89ffb073b8597de019fae0ac2a48482a6a33ff9a3cadd97f364100c70",
+ "chksum_sha256": "4135607fe98acfedbef4f2d3305b4ade7e5e833130f049f310b68f32ce451c66",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/tests/cli/comment.yaml",
+ "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_ospfv3.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1880bcdadc904a2cb1d98478fc780763371648a392c6e383eb2102d26bff1ba1",
+ "chksum_sha256": "8a6d31304503f7cd58289c7ab493bab726a003a69dbcfff3177f82e051180ff4",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/tests/cli/prefix_set_remark.yaml",
+ "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_acl_interfaces_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0fb66964d634451765de4922678ada90649e02acb0bc6f5b5ab6c723a506bc1d",
+ "chksum_sha256": "a5870ad2392bc344f5d7c254ecf5f1b5d317527c2efa346a55a3a73fb0ccd10e",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/tests/cli/replace_block.yaml",
+ "name": "tests/unit/modules/network/iosxr/fixtures/dir_7all",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "864b44dbf232d2e1d731ad33a2fb89523b94a21ebba2b8fa9cf1d87f53d4a4d3",
+ "chksum_sha256": "c5e2c218c5731bee3f874af0bc5d5694a426ceba650efc03795a5739235f0120",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/tests/cli/sublevel_exact.yaml",
+ "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_l2_interface_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e18cbd1b58ce8368d11e0948fc75860f2b21e4092c74129d894fb7e4fa46dda1",
+ "chksum_sha256": "1c18f829582b9ed3a84bc5226dfd05be9c736dc0c949d61f719c71284e747e1d",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/tests/cli/comment-too-long.yaml",
+ "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_config_src.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3620ac43ca5135f0c0a49e2aeba5ab73a4c2704554d27c87ee4284f87f784bfc",
+ "chksum_sha256": "57d42d2e8e8b7a4b6cae566115ee42fecea077b525cace10cefc3b7dbd85f033",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/tests/cli/src_basic.yaml",
+ "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_config_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5cd6945ede088394c6599ee3b5f2aeddc0c3ed856db44fd8864a626576b79c38",
+ "chksum_sha256": "6fe81e446733fef4e3643a80042ab4111b9b0c927599c4b5972ecea4c18b4ffd",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/tests/cli/route_policy.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "604f5b5f96027a1c3e5768650bdfd7687d1fed0a5045a3e5b9805dddd5fae6a7",
+ "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/tests/cli/backup.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e89b8bf2ae0c1dd3d859a77494f6f89abfccbfb1e6be30c2d5d17d3296b0cb8b",
+ "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/tests/cli/src_invalid.yaml",
+ "name": "tests/unit/modules/network/iosxr/fixtures/cliconf_ncs540/iosxr/show_version__utility_head_-n_20",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ceaff4b3620df90e8208f020adfa3d1b12ca9bef955fd8e01ef5f0395b4fdcd1",
+ "chksum_sha256": "ca53ef4a0ab10529e7d5df9fd669fae547be148b08ee7075141212ab90a1e929",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/tests/cli/misplaced_sublevel.yaml",
+ "name": "tests/unit/modules/network/iosxr/fixtures/cliconf_ncs540/iosxr/show_running-config_hostname",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "55ebc624d7356f89f6c2bb32d13aceff80e8df04d57c28f463023a7aca814ee3",
+ "chksum_sha256": "749f869982a235df56c1c7e404744c441340ff6da90dece0c8b83d63ff47e7af",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/tests/cli/replace_config.yml",
+ "name": "tests/unit/modules/network/iosxr/fixtures/show_cdp_neighbors_detail",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "520231e3fab8fd0eed892322eb5e630667f32730b89f1a06e01c22a72d33ff45",
+ "chksum_sha256": "bbc4b792c6b18344cac105ae9b0d6916d5f170dd4b0413de0faecc9a845c46e9",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/tests/cli/sublevel.yaml",
+ "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_ospf_interfaces.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "81d687e492374044859a0efcfa6dc922fb526648b8631faf70b621ae6742489d",
- "format": 1
- },
- {
- "name": "tests/integration/targets/iosxr_config/tests/redirection",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "c3e8a76362099f436fe64dbd9dfc6401c862dac9c7b36be4ec83b36d125be2b8",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/tests/redirection/shortname.yaml",
+ "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_ospfv2.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c82a2cf83917d7934e758a867235e53629945aa1739c3101bbf61adfb9f248cb",
- "format": 1
- },
- {
- "name": "tests/integration/targets/iosxr_config/tests/cli_config",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "27b9a4a53478778c5781170c052ba66bcc09dcb40aab0709d28018f6cd332126",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/tests/cli_config/cli_backup.yaml",
+ "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_static_routes_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6c6e65aa217139078a0e172b54fc00eb2cfe51f2079cb7d9b0a5d9c5d2a74ca6",
+ "chksum_sha256": "6e148c74b09c0b22e87e8e55b815a0250281aa8daabde38b951b425cfbec2442",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/tests/cli_config/cli_basic.yaml",
+ "name": "tests/unit/modules/network/iosxr/fixtures/show_running-config",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "256bd79f69876e184c69f562b22d1954e91f78e0386e273f4f11c5cf74b1d350",
+ "chksum_sha256": "9442b8aa3e29caa5725d8968da29fa173e998d7c664c92b3ddd66a7aea76a71e",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/fixtures",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/iosxr/fixtures/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/fixtures/config_add_interface.txt",
+ "name": "tests/unit/modules/network/iosxr/fixtures/show_interfaces",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ab5bf303021e5250cd67b0f4ad25b8127b74dd2d8630266a382d9ab2aa4c248b",
+ "chksum_sha256": "e37745f7a4d614d0aa5da44df8a0acaea5820a5900d65cabe9640ddcb7e6ccd1",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/fixtures/config_del_interface.txt",
+ "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_banner_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "087d7655b24ffcd3191a5cab8015486b1da1488345f6e7617b0523f575b0400c",
+ "chksum_sha256": "373fefe369cd647022df09438152a869d3c407cb05c51b3bd8214b81471d76e9",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/templates",
+ "name": "tests/unit/modules/network/iosxr/fixtures/cliconf",
"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/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/iosxr/show_version__utility_head_-n_20",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "92dec92ecf095d1c33c493f4769541caa745787d80e498d6ae81decc93351e0a",
+ "chksum_sha256": "cc08220e9647a2a3d34640ffabc08fd34f9601e229ab7cdf5ce4224f62cc158b",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/templates/basic/configuration.j2",
+ "name": "tests/unit/modules/network/iosxr/fixtures/cliconf/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_ipv6_interface",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "95c74f6778f25c6385437de97ec5ffbbef5414ed42115d8b7ee276fe5d7fdd64",
+ "chksum_sha256": "151235002e58119649b79a98cbacb5ce155225e31aa0188dd8085ee0961feacf",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/templates/basic/route_policy_clean.j2",
+ "name": "tests/unit/modules/network/iosxr/fixtures/show_version_brief",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "baa2f889363d8827d04378ac81e1516d840d64a721e4cc8284c937390206904c",
+ "chksum_sha256": "e4eb1b26a35a3c5bcf1e45eab472c8d59ff0559cfbfe701cd60c17ee6d9d6957",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/templates/basic/interface_config.j2",
+ "name": "tests/unit/modules/network/iosxr/fixtures/show_version",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3209d667d131c751b8cb1954bceec81eccb663a5e257b81b7394a9edcb9e0d70",
+ "chksum_sha256": "089ab6658c475d1146f913b1cdee2671b46051958e2b7f562da626d327456726",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/templates/basic/config.j2",
+ "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_interface_gathered.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fed860520ec0b19850744af6be1c77939335d4a09539bf563d0c15aa6afc84ef",
+ "chksum_sha256": "06b46488db2b8cecffa505d7a8d7f3c0566df2beadef2fb795f3963e26bb1504",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/templates/basic/route_policy.j2",
+ "name": "tests/unit/modules/network/iosxr/fixtures/show_version___utility_head_-n_20",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "83c3226c2070afbe01cde658ec7852261ac925abed96766989888c70a2f8bc92",
+ "chksum_sha256": "e4eb1b26a35a3c5bcf1e45eab472c8d59ff0559cfbfe701cd60c17ee6d9d6957",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/templates/basic/change_prefix_set.j2",
+ "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_acls_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "91a0239cde35ce8e75ad24c8f9c853014cd0c7a5554171ee3b0ad50cc8ed67f5",
- "format": 1
- },
- {
- "name": "tests/integration/targets/iosxr_config/templates/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "7415a69cdd33bff4395ad90a4cf6a930082691564493b998844e499a5039d13d",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_config/templates/defaults/config.j2",
+ "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_acl_replace_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c67459067166baed6059b02907fb2692e34868270185b09fcd9f5d7c3ec013d0",
- "format": 1
- },
- {
- "name": "tests/integration/targets/iosxr_hostname",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/iosxr_hostname/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "197b575ae7d14aeb340f84bcb05ca1e4c7f84786dec07881afb650cc75106c20",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_hostname/tasks/main.yaml",
+ "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_lacp_interfaces_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "afc73a39f8a8861930e2a6a542ccd07426663ec0584b218987ef2b456d8c00d7",
+ "chksum_sha256": "04b1c2fbc56979e8df559dc3a499adaff452c0815be45fe4a0e2b1b74f740831",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_hostname/tasks/cli.yaml",
+ "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_interface_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2d3350be00fa2af0f217f369684578df724bcf9550402e7a54ef1b84f32dcb53",
- "format": 1
- },
- {
- "name": "tests/integration/targets/iosxr_hostname/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "cafb0268e9f22c966719d76a2b7267d966ef98748f68cf3594ea55a3efd03945",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_hostname/meta/main.yml",
+ "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_lag_interface_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "tests/integration/targets/iosxr_hostname/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "25aaec36c88ca1c78bdae21f0a0e072929ce56e56f569967927ab6def72d972e",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_hostname/defaults/main.yml",
+ "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_lacp_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
- "format": 1
- },
- {
- "name": "tests/integration/targets/iosxr_hostname/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/iosxr_hostname/tests/common",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "1ca4b510769bcfc42967e42d1b560e18908724b345676fb68e76571dfb84e847",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_hostname/tests/common/_remove_config.yaml",
+ "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_lldp_interfaces_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "33bb48f812aef67e24ce8cffc06916f7f8adbb8977853170aeb32dd150bf334e",
+ "chksum_sha256": "1c4e458ac2250cfbfacd5b53e5937c792bdf09a36bf42c7d27cb5add93ffb693",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_hostname/tests/common/deleted.yaml",
+ "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_user_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0c727923bf03a87bd59efc3eb98d414cf99ea84ac3748d32412b7eee33996553",
+ "chksum_sha256": "e387d5d8b668b1f290872aab2a3e8f8de3d4bdcb99906b8bbf618b950f0c60e9",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_hostname/tests/common/gathered.yaml",
+ "name": "tests/unit/modules/network/iosxr/fixtures/show_cdp",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "348ce984e68aabc275d61e8143b23c6cc59765f2510b073a4c611fa62254a4b7",
+ "chksum_sha256": "56578d8143a06834835f0c9cd4901a573514adf51a4dc5cbd2db1e02afcddecc",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_hostname/tests/common/empty_config.yaml",
+ "name": "tests/unit/modules/network/iosxr/fixtures/show_processes_cpu___include_CPU_utilization",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a89c158ee6a5732379e2b446d1d6e307cb116b5a4f602e32781b5e11598f3c9a",
+ "chksum_sha256": "c6eca4811fafb01f204de26b037fee16d63aca082ce05d57b9f0c52fb502ef66",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_hostname/tests/common/merged.yaml",
+ "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_lldp_global_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e2591c3d8f9408a6d1879a028da5491a9275c44601b28d5d1341818ecab434a0",
+ "chksum_sha256": "cc8ece13d91edafdb680a275bf4c794d642f584b24963f75e91d399d26e90dce",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_hostname/tests/common/_parsed.cfg",
+ "name": "tests/unit/modules/network/iosxr/fixtures/show_lldp_neighbors_detail",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1b0de89ec88a4c3c844244ea9b8a24ef5d12fe4ec4932c525b720742d77334fd",
+ "chksum_sha256": "4135607fe98acfedbef4f2d3305b4ade7e5e833130f049f310b68f32ce451c66",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_hostname/tests/common/_populate_config.yaml",
+ "name": "tests/unit/modules/network/iosxr/test_iosxr_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b3905393cfeb5a880d6f501a9813b52d787c771504efb07291ea4bdf91a83457",
+ "chksum_sha256": "72a840bc71e4264bd1a81b5bf3fc850b33c72e2420d5b26c6f6f2cfdaa165ba9",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_hostname/tests/common/parsed.yaml",
+ "name": "tests/unit/modules/network/iosxr/test_iosxr_ospf_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "823462a54fe9b7f711ce0331124bd72c3c4029547fd7d1c2e5bd1da25582cebf",
+ "chksum_sha256": "e4159ca266e4725a08075ed053970e7717d718d59ab1629983de5735b62ca572",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_hostname/tests/common/rendered.yaml",
+ "name": "tests/unit/modules/network/iosxr/test_iosxr_prefix_lists.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1fb084918ff5f04f5da804437d0287f888c6b225be719b39e7599e4d2928890d",
+ "chksum_sha256": "201a085820e80e365853eeea7e5ae7132161640c42d5fdc2ec89ea753c012956",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_hostname/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/iosxr_hostname/vars/main.yaml",
+ "name": "tests/unit/modules/network/iosxr/test_iosxr_ping.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8fb0722d13cbb07c9e9d85b76efbdae857bfdd1801b6aa0501a52946e6b6d588",
+ "chksum_sha256": "fb9665da189a72020612074ebc184341d968bbb7bdaf1a4414694bcac34c1f40",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_user",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "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_n540.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0b919ddfe1c043e96a522c559cd58e30b83e0f57482e7c5cfe678667d52b3581",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_user/tasks/main.yaml",
+ "name": "tests/unit/modules/network/iosxr/test_iosxr_utils.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "303b9dff6309fcb32b8eb1e05d36298973519248849c1ddb442a6ce54e4ae491",
+ "chksum_sha256": "9aa4570454de5df5c836f3753f9575b9c603179c3f5ef19a462c839d7127b828",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_user/tasks/cli.yaml",
+ "name": "tests/unit/modules/network/iosxr/test_hostname.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "70521f927ee1761e08f277a254437be92c536918337892bcf0c5c0368957d99a",
+ "chksum_sha256": "b404fb2dd81ef767eca09da0717a897bedce394093c59c560243ec214b8baede",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_user/tasks/netconf.yaml",
+ "name": "tests/unit/modules/network/iosxr/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6650a55f6db383c6dea0285df827b038a5080894e176da4ff5ba05a71d8f007d",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"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_config.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9df1284eb7eaca076e95f4179209490ebe211e2854674581e324ac1a68beadb7",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_user/meta/main.yaml",
+ "name": "tests/unit/modules/network/iosxr/test_iosxr_ntp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06",
+ "chksum_sha256": "c39b59d0219d7b96f78476b4625257ca7fb4d89273d8f542f399a0fd2fefb202",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_user/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/iosxr/test_iosxr_lag_interfaces.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e698d9b46a555dd444d0cdc3a9cde31f4e6255cb3d759731d35ee2e74fe1c020",
"format": 1
},
{
- "name": "tests/integration/targets/iosxr_user/defaults/main.yaml",
+ "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
<!--start requires_ansible-->
## 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.
<!--end requires_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
<!--start collection 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
<ul style="margin: 0; padding: 0"><b>Choices:</b>
<li>ipv4</li>
<li>ipv6</li>
+ <li>vpnv4</li>
+ <li>vpnv6</li>
+ <li>link-state</li>
+ <li>l2vpn</li>
</ul>
</td>
<td>
@@ -1419,6 +1423,10 @@ Parameters
<li>unicast</li>
<li>labeled-unicast</li>
<li>sr-policy</li>
+ <li>link-state</li>
+ <li>evpn</li>
+ <li>mspw</li>
+ <li>vpls-vpws</li>
</ul>
</td>
<td>
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 <https://docs.ansible.com/ansible/late
</td>
<td>when interfaces is configured</td>
<td>
- <div>The list of LLDP neighbors from the remote device</div>
+ <div>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.</div>
<br/>
</td>
</tr>
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
-
- <table border=0 cellpadding=0 class="documentation-table">
- <tr>
- <th colspan="2">Parameter</th>
- <th>Choices/<font color="blue">Defaults</font></th>
- <th width="100%">Comments</th>
- </tr>
- <tr>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>aggregate</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">list</span>
- / <span style="color: purple">elements=dictionary</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>List of syslog logging configuration definitions.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>dest</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>host</li>
- <li>console</li>
- <li>monitor</li>
- <li>buffered</li>
- <li>file</li>
- </ul>
- </td>
- <td>
- <div>Destination for system logging (syslog) messages.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>facility</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>To configure the type of syslog facility in which system logging (syslog) messages are sent to syslog servers Optional config for <code>dest</code> = <code>host</code></div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>hostnameprefix</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>To append a hostname prefix to system logging (syslog) messages logged to syslog servers. Optional config for <code>dest</code> = <code>host</code></div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>level</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>emergencies</li>
- <li>alerts</li>
- <li>critical</li>
- <li>errors</li>
- <li>warning</li>
- <li>notifications</li>
- <li>informational</li>
- <li>debugging</li>
- </ul>
- </td>
- <td>
- <div>Specifies the severity level for the logging.</div>
- <div style="font-size: small; color: darkgreen"><br/>aliases: severity</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>name</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>When <code>dest</code> = <em>file</em> name indicates file-name</div>
- <div>When <code>dest</code> = <em>host</em> name indicates the host-name or ip-address of syslog server.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>path</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Set file path.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>size</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Size of buffer when <code>dest</code> = <code>buffered</code>. The acceptable value is in the range <em>307200 to 125000000 bytes</em>. Default 307200</div>
- <div>Size of file when <code>dest</code> = <code>file</code>. The acceptable value is in the range <em>1 to 2097152</em>KB. Default 2 GB</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>state</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>present</li>
- <li>absent</li>
- </ul>
- </td>
- <td>
- <div>Existential state of the logging configuration on the node.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>vrf</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>vrf name when syslog server is configured, <code>dest</code> = <code>host</code></div>
- </td>
- </tr>
-
- <tr>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>dest</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>host</li>
- <li>console</li>
- <li>monitor</li>
- <li>buffered</li>
- <li>file</li>
- </ul>
- </td>
- <td>
- <div>Destination for system logging (syslog) messages.</div>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>facility</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <b>Default:</b><br/><div style="color: blue">"local7"</div>
- </td>
- <td>
- <div>To configure the type of syslog facility in which system logging (syslog) messages are sent to syslog servers Optional config for <code>dest</code> = <code>host</code></div>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>hostnameprefix</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>To append a hostname prefix to system logging (syslog) messages logged to syslog servers. Optional config for <code>dest</code> = <code>host</code></div>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>level</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>emergencies</li>
- <li>alerts</li>
- <li>critical</li>
- <li>errors</li>
- <li>warning</li>
- <li>notifications</li>
- <li>informational</li>
- <li><div style="color: blue"><b>debugging</b>&nbsp;&larr;</div></li>
- </ul>
- </td>
- <td>
- <div>Specifies the severity level for the logging.</div>
- <div style="font-size: small; color: darkgreen"><br/>aliases: severity</div>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>name</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>When <code>dest</code> = <em>file</em> name indicates file-name</div>
- <div>When <code>dest</code> = <em>host</em> name indicates the host-name or ip-address of syslog server.</div>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>path</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Set file path.</div>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>size</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Size of buffer when <code>dest</code> = <code>buffered</code>. The acceptable value is in the range <em>307200 to 125000000 bytes</em>. Default 307200</div>
- <div>Size of file when <code>dest</code> = <code>file</code>. The acceptable value is in the range <em>1 to 2097152</em>KB. Default 2 GB</div>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>state</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li><div style="color: blue"><b>present</b>&nbsp;&larr;</div></li>
- <li>absent</li>
- </ul>
- </td>
- <td>
- <div>Existential state of the logging configuration on the node.</div>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>vrf</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <b>Default:</b><br/><div style="color: blue">"default"</div>
- </td>
- <td>
- <div>vrf name when syslog server is configured, <code>dest</code> = <code>host</code></div>
- </td>
- </tr>
- </table>
- <br/>
-
-
-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 <network_guide>`
- - For more information on using Ansible to manage Cisco devices see the `Cisco integration page <https://www.ansible.com/integrations/networks/cisco>`_.
-
-
-
-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 <https://docs.ansible.com/ansible/latest/reference_appendices/common_return_values.html#common-return-values>`_, the following are the fields unique to this module:
-
-.. raw:: html
-
- <table border=0 cellpadding=0 class="documentation-table">
- <tr>
- <th colspan="1">Key</th>
- <th>Returned</th>
- <th width="100%">Description</th>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="return-"></div>
- <b>commands</b>
- <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
- <div style="font-size: small">
- <span style="color: purple">list</span>
- </div>
- </td>
- <td>always (empty list when no commands to send)</td>
- <td>
- <div>The list of configuration mode commands to send to the device</div>
- <br/>
- <div style="font-size: smaller"><b>Sample:</b></div>
- <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">[&#x27;logging 10.10.10.1 vrf default severity debugging&#x27;, &#x27;logging facility local7&#x27;, &#x27;logging hostnameprefix host1&#x27;, &#x27;logging console critical&#x27;, &#x27;logging buffered 2097153&#x27;, &#x27;logging buffered warnings&#x27;, &#x27;logging monitor errors&#x27;, &#x27;logging file log_file maxfilesize 1024 severity info&#x27;]</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="return-"></div>
- <b>xml</b>
- <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
- <div style="font-size: small">
- <span style="color: purple">list</span>
- </div>
- </td>
- <td>always (empty list when no xml rpc to send)</td>
- <td>
- <div>NetConf rpc xml sent to device with transport <code>netconf</code></div>
- <br/>
- <div style="font-size: smaller"><b>Sample:</b></div>
- <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">[&#x27;&lt;config xmlns:xc=&quot;urn:ietf:params:xml:ns:netconf:base:1.0&quot;&gt; &lt;syslog xmlns=&quot;http://cisco.com/ns/yang/Cisco-IOS-XR-infra-syslog-cfg&quot;&gt; &lt;files&gt; &lt;file xc:operation=&quot;delete&quot;&gt; &lt;file-name&gt;file1&lt;/file-name&gt; &lt;file-log-attributes&gt; &lt;max-file-size&gt;2097152&lt;/max-file-size&gt; &lt;severity&gt;2&lt;/severity&gt; &lt;/file-log-attributes&gt; &lt;/file&gt; &lt;/files&gt; &lt;/syslog&gt; &lt;/config&gt;&#x27;]</div>
- </td>
- </tr>
- </table>
- <br/><br/>
-
-
-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 <https://galaxy.ansible.com/ui/repo/published/cisco/iosxr>`_ 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 <https://docs.ansible.com/ansible/latest/network/getting_started/network_connection_options.html#timeout-options>`_
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:
- - '<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>'
-"""
-
-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/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 <tkuratomi@ansible.com>
-#
-# 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 <http://www.gnu.org/licenses/>.
-
-# 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 <tkuratomi@ansible.com>
-#
-# 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 <http://www.gnu.org/licenses/>.
-
-# 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
--- /dev/null
+++ b/ansible_collections/cisco/ise/.DS_Store
Binary files 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
@@ -8,6 +8,13 @@
"format": 1
},
{
+ "name": ".DS_Store",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "437cf9da8611bcc8837aef2444e9e00fc44f8f071f750224be185a74168f2e5f",
+ "format": 1
+ },
+ {
"name": "LICENSE",
"ftype": "file",
"chksum_type": "sha256",
@@ -18,7 +25,7 @@
"name": "requirements.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b5a620581f1eb701a6e7bce54457bc44c196732cc5b8d82ae728c285e8d51264",
+ "chksum_sha256": "b600386bb9438017eed5b1eec6a8cfc7ea2879afef9adb1013e15ebf581deb12",
"format": 1
},
{
@@ -29,6 +36,13 @@
"format": 1
},
{
+ "name": "plugins/.DS_Store",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "389b6b15b162e5db97c1c6d4ddc0f1161590c016eb06e49734d10373aabc3c56",
+ "format": 1
+ },
+ {
"name": "plugins/doc_fragments",
"ftype": "dir",
"chksum_type": null,
@@ -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
},
{
@@ -3907,1543 +4579,1781 @@
"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 <rcampos@altus.cr>",
"William Astorga <wastorga@altus.cr>",
@@ -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=<A.B.C.D>
export ISE_USERNAME=<username>
export ISE_PASSWORD=<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: <A.B.C.D>
ise_username: <username>
ise_password: <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: <A.B.C.D>
ise_username: <username>
ise_password: <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: <A.B.C.D>
ise_username: <username>
ise_password: <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
--- /dev/null
+++ b/ansible_collections/cisco/ise/plugins/.DS_Store
Binary files 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/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/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/dictionary_references_info.py b/ansible_collections/cisco/ise/plugins/action/ipsec_certificates_info.py
index 4b4d92cbe..f8a1dd1a7 100644
--- a/ansible_collections/cisco/ise/plugins/action/dictionary_references_info.py
+++ b/ansible_collections/cisco/ise/plugins/action/ipsec_certificates_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
@@ -81,8 +81,8 @@ class ActionModule(ActionBase):
name = self._task.args.get("name")
if not name and not id:
response = ise.exec(
- family="edda",
- function='get_edda_dictionary_references',
+ family="native_ipsec",
+ function='get_ip_sec_certificates',
params=self.get_object(self._task.args)
).response['response']
self._result.update(dict(ise_response=response))
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/connector_config.py b/ansible_collections/cisco/ise/plugins/action/px_grid_direct.py
index 8e124b7ed..c1861824f 100644
--- a/ansible_collections/cisco/ise/plugins/action/connector_config.py
+++ b/ansible_collections/cisco/ise/plugins/action/px_grid_direct.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
@@ -55,7 +55,7 @@ mutually_exclusive = []
required_together = []
-class ConnectorConfig(object):
+class PxGridDirect(object):
def __init__(self, params, ise):
self.ise = ise
self.new_object = dict(
@@ -75,12 +75,12 @@ class ConnectorConfig(object):
def get_object_by_name(self, name):
try:
result = self.ise.exec(
- family="edda",
+ family="px_grid_direct",
function="get_connector_config_by_connector_name",
- params={"connector_name": name},
+ params={"name": name},
handle_func_exception=False,
).response['response']
- result = get_dict_result(result, 'connectorName', name)
+ result = get_dict_result(result, 'name', name)
except (TypeError, AttributeError) as e:
self.ise.fail_json(
msg=(
@@ -105,7 +105,7 @@ class ConnectorConfig(object):
name_exists = False
prev_obj = None
o_id = self.new_object.get("id")
- name = self.new_object.get("connectorName")
+ 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)
@@ -143,7 +143,7 @@ class ConnectorConfig(object):
def create(self):
result = self.ise.exec(
- family="edda",
+ family="px_grid_direct",
function="create_connector_config",
params=self.new_object,
).response
@@ -157,7 +157,7 @@ class ConnectorConfig(object):
name_ = self.get_object_by_id(id).get("name")
self.new_object.update(dict(name=name_))
result = self.ise.exec(
- family="edda",
+ family="px_grid_direct",
function="update_connector_config_by_connector_name",
params=self.new_object
).response
@@ -171,7 +171,7 @@ class ConnectorConfig(object):
name_ = self.get_object_by_id(id).get("name")
self.new_object.update(dict(name=name_))
result = self.ise.exec(
- family="edda",
+ family="px_grid_direct",
function="delete_connector_config_by_connector_name",
params=self.new_object
).response
@@ -212,7 +212,7 @@ class ActionModule(ActionBase):
self._check_argspec()
ise = ISESDK(params=self._task.args)
- obj = ConnectorConfig(self._task.args, ise)
+ obj = PxGridDirect(self._task.args, ise)
state = self._task.args.get("state")
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/connector_config_info.py b/ansible_collections/cisco/ise/plugins/action/px_grid_direct_info.py
index 05bd40cbe..a07394aef 100644
--- a/ansible_collections/cisco/ise/plugins/action/connector_config_info.py
+++ b/ansible_collections/cisco/ise/plugins/action/px_grid_direct_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
@@ -83,7 +83,7 @@ class ActionModule(ActionBase):
name = self._task.args.get("connectorName")
if name:
response = ise.exec(
- family="edda",
+ family="px_grid_direct",
function='get_connector_config_by_connector_name',
params=self.get_object(self._task.args)
).response['response']
@@ -92,7 +92,7 @@ class ActionModule(ActionBase):
return self._result
if not name and not id:
response = ise.exec(
- family="edda",
+ family="px_grid_direct",
function='get_connector_config',
params=self.get_object(self._task.args)
).response['response']
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/test_connector.py b/ansible_collections/cisco/ise/plugins/action/px_grid_direct_test_connector.py
index f3a1b5797..940e1d2c5 100644
--- a/ansible_collections/cisco/ise/plugins/action/test_connector.py
+++ b/ansible_collections/cisco/ise/plugins/action/px_grid_direct_test_connector.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
@@ -31,6 +31,7 @@ argument_spec.update(dict(
authValues=dict(type="dict"),
connectorName=dict(type="str"),
responseParsing=dict(type="str"),
+ skipCertificateValidations=dict(type="bool"),
uniqueID=dict(type="str"),
url=dict(type="str"),
))
@@ -74,6 +75,7 @@ class ActionModule(ActionBase):
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"),
)
@@ -88,7 +90,7 @@ class ActionModule(ActionBase):
ise = ISESDK(params=self._task.args)
response = ise.exec(
- family="edda",
+ family="px_grid_direct",
function="test_connector",
params=self.get_object(self._task.args),
).response
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/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/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/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/dictionary_references_info.py b/ansible_collections/cisco/ise/plugins/modules/endpoints_device_type_info.py
index 85bb07b7b..4df2926bd 100644
--- a/ansible_collections/cisco/ise/plugins/modules/dictionary_references_info.py
+++ b/ansible_collections/cisco/ise/plugins/modules/endpoints_device_type_info.py
@@ -6,31 +6,30 @@
DOCUMENTATION = r"""
---
-module: dictionary_references_info
-short_description: Information module for Dictionary References Info
+module: endpoints_device_type_info
+short_description: Information module for Endpoints Device Type Info
description:
-- Get all Dictionary References Info.
-- EDDA - Get a map of references to EDDA dictionaries.
-version_added: '2.8.0'
+- 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.0.1
+- ciscoisesdk >= 2.2.1
- python >= 3.5
notes:
- SDK Method used are
- edda.Edda.get_edda_dictionary_references,
+ endpoints.Endpoints.get_device_type_summary,
- Paths used are
- get /api/v1/edda/dictionary-references,
+ get /api/v1/endpoint/deviceType/summary,
"""
EXAMPLES = r"""
-- name: Get all Dictionary References Info
- cisco.ise.dictionary_references_info:
+- 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}}"
@@ -43,7 +42,13 @@ RETURN = r"""
ise_response:
description: A dictionary or list with the response returned by the Cisco ISE Python SDK
returned: always
- type: dict
+ 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: <p>This field should contain a NDG Root, comma, and an NDG
+ description: <p>This field should contain a tuple with NDG Root, comma, and an NDG
(that it under the root).<br> Line format - NDG Root Name, NDG, Port</p>.
elements: str
type: list
deviceList:
- description: <p>This field should contain Device-Name,port-number. The device
- name must be the same as the name field in a Network Device object.<br> Line
- format - Device Name,Port</p>.
+ description: <p>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</p>.
elements: str
type: list
id:
description: Network Access Network Condition's id.
type: str
ipAddrList:
- description: <p>This field should contain IP-address-or-subnet,port number<br>
- IP address can be IPV4 format (n.n.n.n) or IPV6 format (n n n n n n n n).<br>
- IP subnet can be IPV4 format (n.n.n.n/m) or IPV6 format (n n n n n n n n/m).<br>
- Line format - IP Address or subnet,Port</p>.
+ description: <p>This field should contain IP address or subnet.<br> IP address can
+ be IPV4 format (n.n.n.n) or IPV6 format (n n n n n n n n).<br> IP subnet can be
+ IPV4 format (n.n.n.n/m) or IPV6 format (n n n n n n n n/m).<br> Line format -
+ IP Address or subnet</p>.
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/connector_config.py b/ansible_collections/cisco/ise/plugins/modules/px_grid_direct.py
index b374012b1..69fefc242 100644
--- a/ansible_collections/cisco/ise/plugins/modules/connector_config.py
+++ b/ansible_collections/cisco/ise/plugins/modules/px_grid_direct.py
@@ -6,20 +6,20 @@
DOCUMENTATION = r"""
---
-module: connector_config
-short_description: Resource module for Connector Config
+module: px_grid_direct
+short_description: Resource module for Px Grid Direct
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'
+- 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: Connector Config's additionalProperties.
+ description: Px Grid Direct's additionalProperties.
type: dict
attributes:
description: ConnectorName.
@@ -29,16 +29,16 @@ options:
elements: dict
suboptions:
dictionaryAttribute:
- description: Connector Config's dictionaryAttribute.
+ description: Px Grid Direct's dictionaryAttribute.
type: str
includeInDictionary:
description: IncludeInDictionary flag.
type: bool
jsonAttribute:
- description: Connector Config's jsonAttribute.
+ description: Px Grid Direct's jsonAttribute.
type: str
type: list
- bulkUniqueIdentifier:
+ correlationIdentifier:
description: Uniqueness to identify.
type: str
topLevelObject:
@@ -58,7 +58,7 @@ options:
description: Connector Type list.
type: str
deltasyncSchedule:
- description: Connector Config's deltasyncSchedule.
+ description: Px Grid Direct's deltasyncSchedule.
suboptions:
interval:
description: Run at interval (hours).
@@ -77,7 +77,7 @@ options:
description: Enabled flag.
type: bool
fullsyncSchedule:
- description: Connector Config's fullsyncSchedule.
+ description: Px Grid Direct's fullsyncSchedule.
suboptions:
interval:
description: Run at interval (hours).
@@ -96,58 +96,43 @@ options:
description: SkipCertificateValidations flag.
type: bool
url:
- description: Connector Config's url.
+ description: Px Grid Direct'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
+- ciscoisesdk >= 2.2.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,
+ 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/edda/connector-config,
- delete /api/v1/edda/connector-config/{connectorName},
- put /api/v1/edda/connector-config/{connectorName},
+ 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.connector_config:
+ cisco.ise.px_grid_direct:
ise_hostname: "{{ise_hostname}}"
ise_username: "{{ise_username}}"
ise_password: "{{ise_password}}"
@@ -159,7 +144,7 @@ EXAMPLES = r"""
- dictionaryAttribute: string
includeInDictionary: true
jsonAttribute: string
- bulkUniqueIdentifier: string
+ correlationIdentifier: string
topLevelObject: string
uniqueIdentifier: string
versionIdentifier: string
@@ -178,19 +163,14 @@ EXAMPLES = r"""
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:
+ cisco.ise.px_grid_direct:
ise_hostname: "{{ise_hostname}}"
ise_username: "{{ise_username}}"
ise_password: "{{ise_password}}"
@@ -202,7 +182,7 @@ EXAMPLES = r"""
- dictionaryAttribute: string
includeInDictionary: true
jsonAttribute: string
- bulkUniqueIdentifier: string
+ correlationIdentifier: string
topLevelObject: string
uniqueIdentifier: string
versionIdentifier: string
@@ -221,19 +201,14 @@ EXAMPLES = r"""
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:
+ cisco.ise.px_grid_direct:
ise_hostname: "{{ise_hostname}}"
ise_username: "{{ise_username}}"
ise_password: "{{ise_password}}"
@@ -260,7 +235,7 @@ ise_response:
"jsonAttribute": "string"
}
],
- "bulkUniqueIdentifier": "string",
+ "correlationIdentifier": "string",
"topLevelObject": "string",
"uniqueIdentifier": "string",
"versionIdentifier": "string"
@@ -282,15 +257,10 @@ ise_response:
"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"
}
}
@@ -299,6 +269,7 @@ ise_response:
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/connector_config_info.py b/ansible_collections/cisco/ise/plugins/modules/px_grid_direct_info.py
index 698dd2fd7..c9a65591c 100644
--- a/ansible_collections/cisco/ise/plugins/modules/connector_config_info.py
+++ b/ansible_collections/cisco/ise/plugins/modules/px_grid_direct_info.py
@@ -6,14 +6,14 @@
DOCUMENTATION = r"""
---
-module: connector_config_info
-short_description: Information module for Connector Config
+module: px_grid_direct_info
+short_description: Information module for Px Grid Direct Info
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'
+- 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)
@@ -23,30 +23,30 @@ options:
- ConnectorName path parameter. Update or delete or retrieve the connector config.
type: str
requirements:
-- ciscoisesdk >= 2.0.1
+- ciscoisesdk >= 2.2.1
- python >= 3.5
notes:
- SDK Method used are
- edda.Edda.get_connector_config,
- edda.Edda.get_connector_config_by_connector_name,
+ px_grid_direct.PxGridDirect.get_connector_config,
+ px_grid_direct.PxGridDirect.get_connector_config_by_connector_name,
- Paths used are
- get /api/v1/edda/connector-config,
- get /api/v1/edda/connector-config/{connectorName},
+ get /api/v1/pxgrid-direct/connector-config,
+ get /api/v1/pxgrid-direct/connector-config/{connectorName},
"""
EXAMPLES = r"""
-- name: Get all Connector Config
- cisco.ise.connector_config_info:
+- 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 Connector Config by name
- cisco.ise.connector_config_info:
+- 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}}"
@@ -73,7 +73,7 @@ ise_response:
"jsonAttribute": "string"
}
],
- "bulkUniqueIdentifier": "string",
+ "correlationIdentifier": "string",
"topLevelObject": "string",
"uniqueIdentifier": "string",
"versionIdentifier": "string"
@@ -95,15 +95,10 @@ ise_response:
"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/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/test_connector.py b/ansible_collections/cisco/ise/plugins/modules/px_grid_direct_test_connector.py
index 4caaadc4b..7fc243fe3 100644
--- a/ansible_collections/cisco/ise/plugins/modules/test_connector.py
+++ b/ansible_collections/cisco/ise/plugins/modules/px_grid_direct_test_connector.py
@@ -6,12 +6,12 @@
DOCUMENTATION = r"""
---
-module: test_connector
-short_description: Resource module for Test Connector
+module: px_grid_direct_test_connector
+short_description: Resource module for Px Grid Direct Test Connector
description:
-- Manage operation create of the resource Test Connector.
-- EDDA - test the Connector.
-version_added: '2.8.0'
+- 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)
@@ -35,6 +35,9 @@ options:
responseParsing:
description: Uniqueness to identify.
type: str
+ skipCertificateValidations:
+ description: SkipCertificateValidations.
+ type: bool
uniqueID:
description: Uniqueness to identify.
type: str
@@ -42,20 +45,20 @@ options:
description: BulkUrl.
type: str
requirements:
-- ciscoisesdk >= 2.0.1
+- ciscoisesdk >= 2.2.1
- python >= 3.5
notes:
- SDK Method used are
- edda.Edda.test_connector,
+ px_grid_direct.PxGridDirect.test_connector,
- Paths used are
- post /api/v1/edda/test-connector,
+ post /api/v1/pxgrid-direct/test-connector,
"""
EXAMPLES = r"""
- name: Create
- cisco.ise.test_connector:
+ cisco.ise.px_grid_direct_test_connector:
ise_hostname: "{{ise_hostname}}"
ise_username: "{{ise_username}}"
ise_password: "{{ise_password}}"
@@ -66,6 +69,7 @@ EXAMPLES = r"""
userName: string
connectorName: string
responseParsing: string
+ skipCertificateValidations: true
uniqueID: string
url: string
@@ -81,6 +85,7 @@ ise_response:
"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/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
},
{
@@ -8268,6 +8268,13 @@
"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",
"chksum_type": "sha256",
@@ -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 <fmunoz@cloverhound.com>",
"Bryan Vargas <bvargas@cloverhound.com>",
@@ -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",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "plugins/module_utils/network/nxos/facts/lldp_global/lldp_global.py",
+ "name": "plugins/module_utils/network/nxos/argspec/telemetry/telemetry.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5a4c38941c0836cfcbe5870de76c13b5e991772d2514d919b52a0eb8861b1b8b",
+ "chksum_sha256": "735fed6cdb3cf9f532186ddcbd9caeceae6c66e803344bacfba16aae44312018",
"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,2971 +1919,3069 @@
"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",
+ "name": "plugins/module_utils/network/nxos/utils/telemetry",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils/network/nxos/utils/telemetry/telemetry.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "15cbafc9ce0f497e532fd5f677ac7fc847d0d94081f71d7538517699dcd59e30",
+ "format": 1
+ },
+ {
+ "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/acls/acls.py",
+ "name": "plugins/module_utils/network/nxos/utils/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b04b56fe6b5f62801329741e2707a9c0d2030ba1963590ad4608fb28eba36706",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/nxos/config/ntp_global",
+ "name": "plugins/module_utils/network/nxos/utils/utils.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "061a3ad9eb413c3b48d2c4a77c060e11d499b21fa1830ab4a236f35d7f184fc9",
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils/network/nxos/cmdref",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/nxos/config/ntp_global/ntp_global.py",
+ "name": "plugins/module_utils/network/nxos/cmdref/telemetry",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils/network/nxos/cmdref/telemetry/telemetry.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6936bf5deb7b2708e4a6373b325c3155a14bbc454419ed7f516999e92946415c",
+ "chksum_sha256": "8da77084260edf236893c1758664c60ed4aa2a53f45d259db357712fb902c5cd",
"format": 1
},
{
- "name": "plugins/module_utils/network/nxos/config/ntp_global/__init__.py",
+ "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/lag_interfaces",
+ "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",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/nxos/config/lag_interfaces/lag_interfaces.py",
+ "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/l3_interfaces/l3_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cb71721dc87b58474b79a72e3ef13d436c3cc5c65ddf79383e6a2a849c94bad9",
+ "chksum_sha256": "e63f600eb2827bdd4a6fd5d16a728fe5a179a1bb8e29baa6da806e21bcf9cac9",
"format": 1
},
{
- "name": "plugins/module_utils/network/nxos/config/lag_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/nxos/config/l3_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/nxos/config/bfd_interfaces",
+ "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/bfd_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/nxos/config/telemetry/telemetry.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "727e58c53e65e0803777cc288930ceb07f415e2202e6cf5a8b58ebbdffbd46d8",
"format": 1
},
{
- "name": "plugins/module_utils/network/nxos/config/bfd_interfaces/bfd_interfaces.py",
+ "name": "plugins/module_utils/network/nxos/config/telemetry/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "149dfe5bc61c80053e6fc498e2b98b70d1482ef8dd51ebb8ae7f84776e3b69b6",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/nxos/config/bgp_templates",
+ "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/bgp_templates/__init__.py",
+ "name": "plugins/module_utils/network/nxos/config/ospfv2/ospfv2.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "9294a53417222ea7bd4cf1b003780c5774924a288309b70bb353b0c64e74bd7e",
"format": 1
},
{
- "name": "plugins/module_utils/network/nxos/config/bgp_templates/bgp_templates.py",
+ "name": "plugins/module_utils/network/nxos/config/ospfv2/__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/lldp_interfaces",
"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/lldp_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dd731a6f5a475a54f70cfc7f872737ebdc7b06e5a6b5f612ce2e92c0cc6bbfdc",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/nxos/config/vlans/__init__.py",
+ "name": "plugins/module_utils/network/nxos/config/lldp_interfaces/lldp_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "6c15204ad386b15117fcb44a6e62be71db4eb03b7f9aac53f7bbdd29020a4690",
"format": 1
},
{
- "name": "plugins/module_utils/network/nxos/config/interfaces",
+ "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/interfaces/interfaces.py",
+ "name": "plugins/module_utils/network/nxos/config/ospfv3/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bc036b0cfa2f0993c0a313334e3c849ef731671d917c75a9b0e5c2381bdbe5b4",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/nxos/config/interfaces/__init__.py",
+ "name": "plugins/module_utils/network/nxos/config/ospfv3/ospfv3.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "0ee78999cd1450377200ffd92fa3e925ecf413b3c1cb1a4f11e084facf5844d9",
"format": 1
},
{
- "name": "plugins/module_utils/network/nxos/config/l3_interfaces",
+ "name": "plugins/module_utils/network/nxos/config/acls",
"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/acls/__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/acls/acls.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e63f600eb2827bdd4a6fd5d16a728fe5a179a1bb8e29baa6da806e21bcf9cac9",
+ "chksum_sha256": "b04b56fe6b5f62801329741e2707a9c0d2030ba1963590ad4608fb28eba36706",
"format": 1
},
{
- "name": "plugins/module_utils/network/nxos/config/bgp_global",
+ "name": "plugins/module_utils/network/nxos/config/hostname",
"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/hostname/hostname.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e0d590ee1bf37a813910101a74b0d52709cfb6e174828990d34125a06a2ae570",
+ "chksum_sha256": "ab919426e1bd33f667ae875af49ed837d5f3f1e3598b878a290c3bc35004765d",
"format": 1
},
{
- "name": "plugins/module_utils/network/nxos/config/bgp_global/__init__.py",
+ "name": "plugins/module_utils/network/nxos/config/hostname/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/nxos/cmdref",
+ "name": "plugins/module_utils/network/nxos/config/vlans",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/nxos/cmdref/telemetry",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/module_utils/network/nxos/config/vlans/vlans.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "dd731a6f5a475a54f70cfc7f872737ebdc7b06e5a6b5f612ce2e92c0cc6bbfdc",
"format": 1
},
{
- "name": "plugins/module_utils/network/nxos/cmdref/telemetry/__init__.py",
+ "name": "plugins/module_utils/network/nxos/config/vlans/__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",
+ "name": "plugins/module_utils/network/nxos/config/bgp_address_family",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/nxos/cmdref/__init__.py",
+ "name": "plugins/module_utils/network/nxos/config/bgp_address_family/__init__.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,
+ "name": "plugins/module_utils/network/nxos/config/bgp_address_family/bgp_address_family.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ab2d098a5e4d9f5dfccc95ec69210831e191ce526eb08fb55029517f27bca8f2",
"format": 1
},
{
- "name": "plugins/module_utils/network/nxos/utils/telemetry",
+ "name": "plugins/module_utils/network/nxos/config/ntp_global",
"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/ntp_global/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/nxos/utils/telemetry/telemetry.py",
+ "name": "plugins/module_utils/network/nxos/config/ntp_global/ntp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2f684bba2373a2a665e1b9ac34aa2822d33ab1a7f1e2919dd686a4395d07cab9",
+ "chksum_sha256": "6936bf5deb7b2708e4a6373b325c3155a14bbc454419ed7f516999e92946415c",
"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/interfaces",
+ "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/interfaces/interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "061a3ad9eb413c3b48d2c4a77c060e11d499b21fa1830ab4a236f35d7f184fc9",
+ "chksum_sha256": "32368a2909b02f1b25206c7ee67e5e8da1ecfdc80800905a260decb71b2b873f",
"format": 1
},
{
- "name": "plugins/module_utils/network/__init__.py",
+ "name": "plugins/module_utils/network/nxos/config/interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/action",
+ "name": "plugins/module_utils/network/nxos/config/logging_global",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/action/feature.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/udld_interface.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/bgp_af.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/bgp_global.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/evpn_global.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/vxlan_vtep_vni.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/lacp.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/vlans.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/pim.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/lag_interfaces.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_contact.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/l2_interface.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/user.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/interfaces.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/snapshot.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/nxapi.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/linkagg.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/hsrp_interfaces.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/vsan.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/snmp_user.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/bgp_address_family.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/bgp_neighbor_address_family.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/system.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/static_routes.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/gir_profile_management.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/l3_interface.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/install_os.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/hostname.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/vxlan_vtep.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/lacp_interfaces.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/ospf.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/vtp_version.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/snmp_community.py",
+ "name": "plugins/module_utils/network/nxos/config/hsrp_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/bgp_templates",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/action/ntp_global.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/hsrp.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/interface_ospf.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/ntp.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/smu.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/snmp_server.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/vpc.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/__init__.py",
+ "name": "plugins/module_utils/network/nxos/config/snmp_server/__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/lag_interfaces",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/action/ospfv3.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/devicealias.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/file_copy.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/telemetry.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/nxos.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/route_maps.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/aaa_server_host.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/igmp_interface.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/zone_zoneset.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/igmp_snooping.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/pim_interface.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/bgp.py",
+ "name": "plugins/module_utils/network/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/action/reboot.py",
+ "name": "plugins/module_utils/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/action/l2_interfaces.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/gir.py",
+ "name": "plugins/cliconf/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/action/command.py",
+ "name": "plugins/cliconf/nxos.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "13c8aee982db809a18709e985a54757e2390122a5a27461c2fbfbcde1286c926",
"format": 1
},
{
- "name": "plugins/action/rpm.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/snmp_location.py",
+ "name": "plugins/action/bgp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/ntp_options.py",
+ "name": "plugins/action/static_routes.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/bfd_global.py",
+ "name": "plugins/action/feature.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/ospf_vrf.py",
+ "name": "plugins/action/vxlan_vtep_vni.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/igmp.py",
+ "name": "plugins/action/smu.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/pim_rp_address.py",
+ "name": "plugins/action/ospfv2.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/acl_interfaces.py",
+ "name": "plugins/action/evpn_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/ospfv2.py",
+ "name": "plugins/action/route_maps.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/config.py",
+ "name": "plugins/action/hostname.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/vpc_interface.py",
+ "name": "plugins/action/l2_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/acls.py",
+ "name": "plugins/action/snmp_contact.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/udld.py",
+ "name": "plugins/action/devicealias.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/static_route.py",
+ "name": "plugins/action/ntp.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/lldp.py",
+ "name": "plugins/action/pim.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/l3_interfaces.py",
+ "name": "plugins/action/acl.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/vrf_af.py",
+ "name": "plugins/action/interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/vrrp.py",
+ "name": "plugins/action/vrf_af.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/ping.py",
+ "name": "plugins/action/bfd_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/ospf_interfaces.py",
+ "name": "plugins/action/bgp.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/lldp_interfaces.py",
+ "name": "plugins/action/logging.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/logging_global.py",
+ "name": "plugins/action/igmp_snooping.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/vtp_domain.py",
+ "name": "plugins/action/prefix_lists.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/ntp_auth.py",
+ "name": "plugins/action/vrf.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/prefix_lists.py",
+ "name": "plugins/action/lacp_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/evpn_vni.py",
+ "name": "plugins/action/snapshot.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/bgp_neighbor.py",
+ "name": "plugins/action/vxlan_vtep.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/vrf_interface.py",
+ "name": "plugins/action/ping.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/vlan.py",
+ "name": "plugins/action/zone_zoneset.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/bfd_interfaces.py",
+ "name": "plugins/action/facts.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/bgp_neighbor_af.py",
+ "name": "plugins/action/gir.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/banner.py",
+ "name": "plugins/action/snmp_server.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/vrf.py",
+ "name": "plugins/action/system.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/rollback.py",
+ "name": "plugins/action/vpc.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/acl.py",
+ "name": "plugins/action/telemetry.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/aaa_server.py",
+ "name": "plugins/action/vlans.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/facts.py",
+ "name": "plugins/action/bgp_af.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/snmp_traps.py",
+ "name": "plugins/action/ospf_vrf.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/overlay_global.py",
+ "name": "plugins/action/aaa_server.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/vtp_password.py",
+ "name": "plugins/action/linkagg.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/lldp_global.py",
+ "name": "plugins/action/snmp_community.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/acl_interface.py",
+ "name": "plugins/action/ospf_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "plugins/action/snmp_host.py",
+ "name": "plugins/action/lldp.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": ".ansible-lint",
+ "name": "plugins/action/snmp_location.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b47f72e159f93a5ff07ea2534752e0fa977b214e9ac05c667fa83ac13be4e50c",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "test-requirements.txt",
+ "name": "plugins/action/snmp_host.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ef11b7e31c53ed88a2352faacda33806dda00f45d4e9cce540a40e6a47ccbe73",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/sanity",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/action/overlay_global.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.9.txt",
+ "name": "plugins/action/pim_rp_address.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5aed10757064babb8aa6dafee78f2c9f9aac004c2188c70ea3c0f018db82cbae",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.13.txt",
+ "name": "plugins/action/snmp_user.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "935199601f3c767ca623e1a8c6f73032f3cfee0536e4aed1cf5842b157956671",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.11.txt",
+ "name": "plugins/action/bgp_neighbor_af.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dffc0e474e545fd47798cbc252ee5836ff87b5f4eb0c7dfed83e78c29101d622",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.10.txt",
+ "name": "plugins/action/l3_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/vtp_version.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "935199601f3c767ca623e1a8c6f73032f3cfee0536e4aed1cf5842b157956671",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.17.txt",
+ "name": "plugins/action/hsrp.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "935199601f3c767ca623e1a8c6f73032f3cfee0536e4aed1cf5842b157956671",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.16.txt",
+ "name": "plugins/action/bgp_neighbor.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "935199601f3c767ca623e1a8c6f73032f3cfee0536e4aed1cf5842b157956671",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.12.txt",
+ "name": "plugins/action/evpn_vni.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9f183c744ea1c27c189e2d0da7a45ae3fb50f69e4c658e4aa55b023061181518",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.15.txt",
+ "name": "plugins/action/igmp_interface.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "935199601f3c767ca623e1a8c6f73032f3cfee0536e4aed1cf5842b157956671",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "tests/config.yml",
+ "name": "plugins/action/vtp_domain.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/file_copy.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "tests/unit/requirements.txt",
+ "name": "plugins/action/vrrp.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "49ba996dc4735c3463e9af561344346dfae14bcc1a68096ce78364b377f0df1f",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "tests/unit/__init__.py",
+ "name": "plugins/action/install_os.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/lag_interfaces.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "tests/unit/mock/vault_helper.py",
+ "name": "plugins/action/rollback.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3bf7834d18bd34473d0f4b898253177229a131f14364874efba584ff985e4a41",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "tests/unit/mock/__init__.py",
+ "name": "plugins/action/rpm.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "tests/unit/mock/procenv.py",
+ "name": "plugins/action/lacp.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a1e05e3b412bb02d16ec786919f6395c813a4e10d73ca7ca4d0ffcf5066e6947",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "tests/unit/mock/loader.py",
+ "name": "plugins/action/vsan.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2343d1f644250d4b616f0bf0a826fdee8fe306243d8412d44dd0e033352b262b",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "tests/unit/mock/yaml_helper.py",
+ "name": "plugins/action/ospf.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fc4f4d5d2968ced8e3a04653354945d720e7c6369aad67ba7724c5981c82b6ea",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "tests/unit/mock/path.py",
+ "name": "plugins/action/config.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/hsrp_interfaces.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "tests/unit/modules/__init__.py",
+ "name": "plugins/action/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules/conftest.py",
+ "name": "plugins/action/nxapi.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "354440d86f684a9641f329807a687fe71fc66ab901207f7a166ecfa648935488",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "tests/unit/modules/utils.py",
+ "name": "plugins/action/nxos.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a0cf9489868d4ed6f549bf4133f50fd4f594850a6458e6c07a913078355c1385",
- "format": 1
- },
- {
- "name": "tests/unit/modules/network",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/action/l3_interface.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/pim_interface.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/vtp_password.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/bfd_global.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/vpc_interface.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8f6e383e73a654e461b447f8b5721c4d7ba491da63c1c9d6aa0ee4a25d402af0",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/test_nxos_lacp_interfaces.py",
+ "name": "plugins/action/command.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",
+ "name": "plugins/action/banner.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "32d30a2580844412a612a3a35fc32bfa5c6f5231f841a16574cc125bc856e02d",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/test_nxos_hostname.py",
+ "name": "plugins/action/logging_global.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/user.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/acl_interfaces.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/bgp_address_family.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/lldp_interfaces.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/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/ntp_options.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/aaa_server_host.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/bgp_neighbor_address_family.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/static_route.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/vlan.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/lldp_global.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/vrf_interface.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/ntp_auth.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/udld.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/acl_interface.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/udld_interface.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/interface_ospf.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/igmp.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/ntp_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/l2_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/snmp_traps.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/gir_profile_management.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/acls.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/reboot.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/ospfv3.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a59fd945009509ca8eec7fb78bc6000d692230ef505bcadf48e8b843904987af",
+ "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/test_nxos_vsan.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5912485637b9720e5f61c4364e65aa9c52fe1f5f3c9f06516bde908bd4d28f1c",
+ "name": "plugins/doc_fragments",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/test_nxos_system.py",
+ "name": "plugins/doc_fragments/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bbd7e38463b30523fee2bda727e81518950dc70a423c0e8d4a26bfc96f3cf600",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/test_nxos_user.py",
+ "name": "plugins/doc_fragments/nxos.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8bdccd30ccc686e727cb486c80e3868097a43faeb27bc0d1b674acf77411c577",
+ "chksum_sha256": "75b71c234b0886b9a8c7cb54e9b1a2de2e433f8a19608a3ba45e67037c942943",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/test_nxos_hsrp_interfaces.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "da3a8f5c346182514bae4d4447628462c9b3271f1e36b27dd4b1372d44d6c46c",
+ "name": "plugins/filter",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/test_nxos_route_maps.py",
+ "name": "plugins/filter/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "007fc4813c28fa488eea78d446db221cba0d12b5bd80ef34160ee799acc85f70",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/test_nxos_ntp_global.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "03208457ac4c50b9400c38c3ab8ee060254142d253743a71666b182f087ade8b",
+ "name": "plugins/netconf",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/test_nxos_bfd_interfaces.py",
+ "name": "plugins/netconf/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dcb920f198f159f4c9c043913dcbb346ee07cc5c5524f747f064b09c5d25f1eb",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/test_nxos_vxlan_vtep_vni.py",
+ "name": "plugins/netconf/nxos.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bc31efebfb5c1f6c256006c77678efef031c5b1d289e8873460b998db795318c",
+ "chksum_sha256": "3dceb9254be3c61b493715b4d993f42ab9c088dd103eb6b59563832aec26c22e",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures",
+ "name": "plugins/httpapi",
"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/httpapi/__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/httpapi/nxos.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "de922c7abca31dbb4d597cc485a02b9affe0c85fbaf1d268b15d38d8fe6ba069",
+ "chksum_sha256": "acfbda7df81189f8211a3d8af3d7e567bc719328e075531c154671cd97bd92be",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim_interface/show_ip_pim_interface_eth2_1",
+ "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": "88ad9b709dae48e373fcf04c158d6714de1f94e808fa033204d3b7b4e48bf8bb",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim_interface/config.cfg",
+ "name": ".flake8",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "25600ba56e8e7066889af660ff87eb22aec3ce587ad60c1a7eca25c627064a5c",
+ "chksum_sha256": "f357bc604a44fe8a5912ec2b9067b734a88d1026da98d5993905d7b34ab44357",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim_interface/__init__.py",
+ "name": "pyproject.toml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "82a737e4c91699b90905fc2d347acaf5c3eb4567cc0750cf122c859d0eed78ed",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim_interface/sh_run_interface_eth2_1_all",
+ "name": ".isort.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "3fc5fcc23727e7c5b9f1a7035303990229f796a171a84e21051dd1d242b90c52",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_acl_interface",
+ "name": "meta",
"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": "meta/__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": "meta/runtime.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "40c6ab1595d2252393db7e834d0de46f776beddd1bd701a49a29a9d7b1a7c876",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlan",
+ "name": "changelogs",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlan/config.cfg",
+ "name": "changelogs/fragments",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "changelogs/fragments/.keep",
"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": "changelogs/config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "54c802c2ade537e8b71ba45d10c73a422778a62aab0093bc6805c75ab8c7f448",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlan/show_vlan_brief.txt",
+ "name": "changelogs/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c60b1775765492c72f6cf744aa56574aeea9b6c57ac19c974ebc73146cf4920a",
+ "chksum_sha256": "679e0f7cfe3b1161eb8979912c5997848b879a8b3fa353578f61d866b1b9490e",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlan/agg_show_vlan_brief.txt",
+ "name": ".pre-commit-config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a6ad270b50167f7b13c3e7f40f83ebc812ceb7ef7d3455c0ce7b404ede9d6238",
+ "chksum_sha256": "395482dc9117c2fbc52da3a2d5b78a06f526834f5959ff6091229f4e2d0035b2",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc_interface",
- "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_vpc_interface/__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_vpc_interface/show_vpc_brief",
+ "name": ".prettierignore",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1901ac7c063992cfcebb4ba110637bc241aa0fb122959d9af40be8957b47bf54",
+ "chksum_sha256": "fe21cf5ca4606d16ccedb1bccc85ef06771ee697924ca50ecd8ca4c98acce5cc",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc_interface/show_port-channel_summary",
+ "name": "platform_guide.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bc24581fc9c635989ae2926270c03c4c85c642b768f6685cff7cfdcd924e70f6",
+ "chksum_sha256": "48467b2534cf719f3925b1b62e10a587eb68c1afbc19bf69d801dbec119a9277",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_telemetry",
- "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_telemetry/N9K_SGs.cfg",
+ "name": "test-requirements.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "af042e9ae8d0a2e6b6ddc28f13ce438e7b49050385ca546bdb5f1a1b51c1da1e",
+ "chksum_sha256": "cf0a6736e79a79f5ea107f0b74c38957ece4a6e4b5c00b01d2c1ea679d876089",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_telemetry/__init__.py",
+ "name": ".ansible-lint",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "b47f72e159f93a5ff07ea2534752e0fa977b214e9ac05c667fa83ac13be4e50c",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_telemetry/N9K.cfg",
+ "name": "codecov.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8d4c2bff81ce036402bf1bfc5a01191ead2507ea6deb7e7d4930ceb35965b1e5",
+ "chksum_sha256": "4aa7e485dd4db6f8a55b046088c745def2b3145d9499ccda4e9a3336467dcea2",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_nxapi",
+ "name": "tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_nxapi/n7k",
+ "name": "tests/config.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4129945061440c8d8c281590b8054b194f5958833c722aa40e878b09038c380e",
+ "format": 1
+ },
+ {
+ "name": "tests/sanity",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_nxapi/n7k/__init__.py",
+ "name": "tests/sanity/ignore-2.15.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "935199601f3c767ca623e1a8c6f73032f3cfee0536e4aed1cf5842b157956671",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_nxapi/n7k/show_run_all",
+ "name": "tests/sanity/ignore-2.17.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0f487063d9698ed988f461a0f1d90be2406db893a1881d162720dd0587a0ddd9",
+ "chksum_sha256": "935199601f3c767ca623e1a8c6f73032f3cfee0536e4aed1cf5842b157956671",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_nxapi/__init__.py",
+ "name": "tests/sanity/ignore-2.18.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "935199601f3c767ca623e1a8c6f73032f3cfee0536e4aed1cf5842b157956671",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_nxapi/n3k",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/sanity/ignore-2.16.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "935199601f3c767ca623e1a8c6f73032f3cfee0536e4aed1cf5842b157956671",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_nxapi/n3k/__init__.py",
+ "name": "tests/sanity/ignore-2.14.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "935199601f3c767ca623e1a8c6f73032f3cfee0536e4aed1cf5842b157956671",
+ "format": 1
+ },
+ {
+ "name": "tests/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_nxapi/n3k/show_run_all",
+ "name": "tests/.gitignore",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "db42fd8881e10bf436a6712d228152f2ca6e627e0aa07531751009df2153fc3d",
+ "chksum_sha256": "b5726d3ec9335a09c124469eca039523847a6b0f08a083efaefd002b83326600",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_system",
+ "name": "tests/unit",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_system/vrf_only",
+ "name": "tests/unit/modules",
"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",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c65fd0fea85d4421908dcb50a8778a562d62c2723ccb10520cb9c62c57f32977",
+ "name": "tests/unit/modules/network",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim_rp_address",
+ "name": "tests/unit/modules/network/nxos",
"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/unit/modules/network/nxos/test_nxos_acls.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "358b10ada00b4a323c671eaa193bc4c62bfa6e6600042382003a8efe5708bddf",
+ "chksum_sha256": "5a7acd1fa7f58e389510c0b12262c3ccad13fdbfa263a052df7ced07b51ae4a0",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim_rp_address/__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_switchport",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_switchport/__init__.py",
+ "name": "tests/unit/modules/network/nxos/test_nxos_overlay_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "84c43269ad7e4c30ec87b50598018aa176ecc5fa6a5cf83c04163549df700c11",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_switchport/show_vlan",
+ "name": "tests/unit/modules/network/nxos/test_nxos_vrf.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "864e06b1e9befc20919e723ee5f9bcb2f51a88e524e8ce8e112ac9ec12bf38fc",
+ "chksum_sha256": "ce6b30fdf5ea958858abea77348d845b53c2430333dbd879d9d8dbcf3f438432",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_switchport/show_interface_ethernet_switchport",
+ "name": "tests/unit/modules/network/nxos/test_nxos_bfd_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8b266354ff8d44bc8987e97565cba41afedb2fbe282c577c8d371516e84d01bc",
+ "chksum_sha256": "5c791a5a862edc717ae75ce62fcd53f8f2f2c629f267194482909a8350946457",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_switchport/show_interface_ethernet",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3eba930c712f346d62428fc829d411a3c7f3b32d00ac0b54bee3e25f5a239876",
+ "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_bgp",
+ "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_bgp/config_32_bits_as.cfg",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlans/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "deed874c21f6472915657eed44c550ff438995b132d365fedb8b94deb510c856",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_bgp/config.cfg",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlans/show_running-config",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f971230c61be923533c3ea1eb63e9938cdf701f3884d511105d551d7ee531554",
+ "chksum_sha256": "6b793f9fc0770084b8babcdd914c4c42b2d1d3256be53d0cba3a78c19a616dec",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_bgp/__init__.py",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlans/show_vlan",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "6ac358cca25afd3bbc1aa11515f5e31ea9d548abdbcdf0563949e446d76f0c3c",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/__init__.py",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlans/show_vlan_no_facts",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "ca3d163bab055381827226140568f3bef7eaac187cebd76878e0b63e9e442356",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf_af",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlans/show_running-config_no_facts",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "783b64a65f752ecfbf2ab084cb164df5d5a818d3dc9980856037a47853bcbfd8",
+ "format": 1
+ },
+ {
+ "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_vrf_af/config.cfg",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vxlan_vtep/config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a11a202b4b688d09c6b7cb78a74d139f2b599c85973dd068b1ec18892926cbf4",
+ "chksum_sha256": "cea4ee76cbd062bd53302a5c1f37bc78584c8677950c99eb145c106a8852b278",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf_af/__init__.py",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vxlan_vtep/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset",
+ "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/shzonestatus_3.cfg",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf/show_run_all",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3fee2a63052400d50f93de5abc0dfd7897a48269d71af99f53182139461c3bb0",
+ "chksum_sha256": "f2a24625313932312f1d5e1c1d2c3935f99e5ab28880315c7dd39698df72daf8",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/show_zone_vsan.out",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf/show_vrf_default_interface",
"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_vrf/show_vrf_management_interface",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "010172dc57589c93d51b95aa50feecbda06ee706fd623422a088de23ccc9e723",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzone_1.cfg",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf/show_vrf_management",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "abb9d2504120327f0b55c36a6c130c9180a0f455ae397737ecfaaa4e6f891ef5",
+ "chksum_sha256": "ca2359ed30a431281f356f0bb15f8bc2abb7169e21a6022034d8a4411fc413f6",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzoneset_0.cfg",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf/show_vrf_ntc",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cae1aca46b8d82f44a8f728182fafd1030040360725fb7367040392c1d52c018",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzonestatus_1.cfg",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "46c16cd03a600d15085abf2052ed33830fed61424a02004021ce4dd82f0086e2",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/__init__.py",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf/show_vrf_default",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzone_2.cfg",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf/show_vrf_ntc_interface",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6e109ddbe7ad8d251edbe3ebe5bf960c055ac9a1d3d5bc3865596bf0d65d83a5",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzoneset_1.cfg",
+ "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_pim_interface/config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bcdd326b9710f2b1f56ac59ed3bdccaa6e853cfb24af1445743d3254ce458166",
+ "chksum_sha256": "25600ba56e8e7066889af660ff87eb22aec3ce587ad60c1a7eca25c627064a5c",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzone_bug339.cfg",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim_interface/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6c45bdddc81417a51bdb8256cc024efef8d8cf432083297902ef8fcda9850703",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"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_pim_interface/show_interface_eth2_1",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eef09bfcfaae85faa6c0b10f2ac4207c73947496c77783c7aa6bac45a9d02d3a",
+ "chksum_sha256": "de922c7abca31dbb4d597cc485a02b9affe0c85fbaf1d268b15d38d8fe6ba069",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzoneset_2.cfg",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim_interface/sh_run_interface_eth2_1_all",
"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_pim_interface/show_ip_pim_interface_eth2_1",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "171f743817a7ffe74398b6d78a0600ec0126dc2fe0890694a62eb6db89225a58",
+ "chksum_sha256": "88ad9b709dae48e373fcf04c158d6714de1f94e808fa033204d3b7b4e48bf8bb",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/show_zoneset_vsan.out",
+ "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_interface/show_interface_loopback0",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fc71e64aa30f5e4da11b419ac36c9b36cae8057bd8bef47b2da5bc293ebaaebb",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzone_0.cfg",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_interface/show_interface_Ethernet2_1",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "13fa7bba46e2967e5c1bc2254620c4cd5337daab92a23d8aa6d6dec1ea7905ae",
+ "chksum_sha256": "de922c7abca31dbb4d597cc485a02b9affe0c85fbaf1d268b15d38d8fe6ba069",
"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_interface/show_run_interface_Ethernet2_1",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "42ca86dc445e87a4cba4d08cbd217173af42f60181eb44017d852837c17e9a47",
+ "chksum_sha256": "6fda3eb0c249234e367f3e6d981a9957902f3443ff892ee35c3fbb87f8b2760b",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzonestatus_4.cfg",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_interface/__init__.py",
"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_interface/show_run_interface_loopback0",
"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_interface/show_interface",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3152065a242771a7e158ce7a8a6da2f5e62f0a35807389d62d0b927830d2ab04",
+ "format": 1
+ },
+ {
+ "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_evpn_global/__init__.py",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc_interface/show_port-channel_summary",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "bc24581fc9c635989ae2926270c03c4c85c642b768f6685cff7cfdcd924e70f6",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_evpn_global/unconfigured.cfg",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc_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_vpc_interface/show_vpc_brief",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "53ca3e78de8cd1b9ec6e040ece7bec23ea29663d1eebd1aed66a2980e832dc19",
+ "chksum_sha256": "1901ac7c063992cfcebb4ba110637bc241aa0fb122959d9af40be8957b47bf54",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vxlan_vtep_vni",
+ "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_vxlan_vtep_vni/config.cfg",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_acl/__init__.py",
"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_acl/show_ip_access-list.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "61de402089db40d19ac51c2e8a52894c45d9002156027c09ab17d0cc3fea635d",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_command",
+ "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/nxos_command/__init__.py",
+ "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/nxos_system/vrf_only/config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "78c6c60ac86950ccc102c733222dc40ca42ae78622fecbee3af27f61bb015adb",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_command/show_version.txt",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_system/config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c45a343dc5192f50ef68b6bebee3da8cb980be9ec3cd5b75b00a20658fde6748",
+ "chksum_sha256": "c65fd0fea85d4421908dcb50a8778a562d62c2723ccb10520cb9c62c57f32977",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_bfd_global",
+ "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/nxos_bfd_global/__init__.py",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_feature/show_feature.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d7be73f626f2d19d384bda2c214b58505da78232c84a1b5c971495510e950db8",
+ "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_bfd_global/N7K.cfg",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_feature/show_feature_mds.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "406c13868678145de8fa80ab6540d805084b62c191a928a466fd44e6e59ccd78",
+ "chksum_sha256": "aca22131f56ec81f704e0b11d93c03bec037cd2b33a9964143b8c7bf53fa7878",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_bfd_global/N9K.cfg",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_overlay_global_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9089fae22c9d5b25f815c43f8de1b95041c2fd012d721e29e009e47f64fa66ff",
+ "chksum_sha256": "aeb566110f15e114259185610a7e1a17ba8a4a8380f590120292eceab885bccd",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc",
+ "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_vpc/show_vrf_all",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf_af/config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a690233a51aeef35190bd4fd440a65fd819bc0153ea20b1b362c25392329e04c",
+ "chksum_sha256": "a11a202b4b688d09c6b7cb78a74d139f2b599c85973dd068b1ec18892926cbf4",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc/vrf_test_show_inventory",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf_af/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3d501010723eb3675a96a954862a0210ac023095947f8e09ea951e15faa96545",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "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_vpc/vrf_test_vpc_config",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_bfd_global/N9K.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f68fa10ece2a3162e69d8bc6ae207437f76b07a956782d6637214ae088346557",
+ "chksum_sha256": "9089fae22c9d5b25f815c43f8de1b95041c2fd012d721e29e009e47f64fa66ff",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc/vrf_test_show_vpc",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_bfd_global/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d5e079e4fa7499d1ee8e1f0ef98ba4908b5abe9bb146f2d07909c5e139940ff7",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc/vrf_test_show_vrf_all",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_bfd_global/N7K.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f9b34cc87b238b789fa2c54dd008597f37aa0a859cf06c25e5ce60aefdd0ed12",
+ "chksum_sha256": "406c13868678145de8fa80ab6540d805084b62c191a928a466fd44e6e59ccd78",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc/vrf_test_show_hardware",
+ "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_command/show_version.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cf21f74cb2df54e19dae270c2b973eea492c3d9925ad7a1b8b59ff9f0e575287",
+ "chksum_sha256": "c45a343dc5192f50ef68b6bebee3da8cb980be9ec3cd5b75b00a20658fde6748",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc/show_vpc",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_command/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4876569ce50a9bb5a00412d9e0e3bd17aed2d739613b28796c3224ae5397b705",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
@@ -4880,11049 +5034,10545 @@
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_feature",
+ "name": "tests/unit/modules/network/nxos/fixtures/_nxos_ip_interface.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ce28d8e36e6ed0776c23f9d57050b68a3dd4cace82f8d3909de89bf98c2b3401",
+ "format": 1
+ },
+ {
+ "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_feature/show_feature_mds.txt",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_acl_interface/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aca22131f56ec81f704e0b11d93c03bec037cd2b33a9964143b8c7bf53fa7878",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_feature/__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_feature/show_feature.txt",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_static_route.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d7be73f626f2d19d384bda2c214b58505da78232c84a1b5c971495510e950db8",
+ "chksum_sha256": "8787db2297394f70dfa9ea3550d604fcaef84c40d973c498b147d346422b8585",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vsan",
+ "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_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_vxlan_vtep_vni/config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "91b604b4bdd22922dfbfb776dc40a760428806a2f845e8c9e76d42beef14bbb8",
+ "chksum_sha256": "9676910539593a9a50989e688d7848de6074092a58e720ebbb437fa02859bd5f",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vsan/shvsan.cfg",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vxlan_vtep_vni/__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_pim_rp_address",
"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_pim_rp_address/config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "03abdcaedc2f739a12fd1c31f37164f02ed471aff024ad8e654a0d7ec3e611e6",
+ "chksum_sha256": "358b10ada00b4a323c671eaa193bc4c62bfa6e6600042382003a8efe5708bddf",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_config/__init__.py",
+ "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_config/candidate.cfg",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_evpn_vni_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3352c8002ead9454c96fa97e82bc2bf245ac57a69edbf8a934bed4ef809de3de",
+ "chksum_sha256": "f12c0f2a38e284dde284dd4042cda86d71671289619456a3438a58f88ab929e7",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vxlan_vtep",
+ "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_vxlan_vtep/config.cfg",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_bgp/config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cea4ee76cbd062bd53302a5c1f37bc78584c8677950c99eb145c106a8852b278",
+ "chksum_sha256": "f971230c61be923533c3ea1eb63e9938cdf701f3884d511105d551d7ee531554",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vxlan_vtep/__init__.py",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_bgp/__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/nxos_bgp/config_32_bits_as.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "deed874c21f6472915657eed44c550ff438995b132d365fedb8b94deb510c856",
+ "format": 1
+ },
+ {
+ "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_interface/show_run_interface_Ethernet2_1",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_l3_interface/ethernet_noshut_multiple_ipv6",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6fda3eb0c249234e367f3e6d981a9957902f3443ff892ee35c3fbb87f8b2760b",
+ "chksum_sha256": "93f0654869c15b0670ae97f78615662b35f5f3aefccfb3c1e2e463ae3759a6d0",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_interface/show_run_interface_loopback0",
+ "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_interface/show_interface_Ethernet2_1",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "de922c7abca31dbb4d597cc485a02b9affe0c85fbaf1d268b15d38d8fe6ba069",
- "format": 1
- },
- {
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_interface/__init__.py",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_l3_interface/ethernet_noshut",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "96a17611067db53f8bdee41ec48055b8ec808b2968d4f3dd784dfae1d6d85d4e",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_interface/show_interface",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_l3_interface/ethernet_noshut_ipv4_ipv6",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3152065a242771a7e158ce7a8a6da2f5e62f0a35807389d62d0b927830d2ab04",
+ "chksum_sha256": "9b65b76df737c6da986a8850a5874d6f6733c26b8209c778d7d861ce0b5cb894",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_interface/show_interface_loopback0",
+ "name": "tests/unit/modules/network/nxos/fixtures/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_interface_ospf",
+ "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_interface_ospf/config.cfg",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc/vrf_test_vpc_config",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5251c622e0f68d8c94e0215bd6a9f8c5d7ab755fc8879ceff8a9cac9b09caf9c",
+ "chksum_sha256": "f68fa10ece2a3162e69d8bc6ae207437f76b07a956782d6637214ae088346557",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_interface_ospf/__init__.py",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc/show_vrf_all",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "a690233a51aeef35190bd4fd440a65fd819bc0153ea20b1b362c25392329e04c",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_evpn_vni_config.cfg",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc/vrf_test_show_vpc",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f12c0f2a38e284dde284dd4042cda86d71671289619456a3438a58f88ab929e7",
+ "chksum_sha256": "d5e079e4fa7499d1ee8e1f0ef98ba4908b5abe9bb146f2d07909c5e139940ff7",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc/vrf_test_show_vrf_all",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f9b34cc87b238b789fa2c54dd008597f37aa0a859cf06c25e5ce60aefdd0ed12",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf/show_vrf_ntc",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc/show_vpc",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "4876569ce50a9bb5a00412d9e0e3bd17aed2d739613b28796c3224ae5397b705",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf/show_vrf_management_interface",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf/__init__.py",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc/vrf_test_show_inventory",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "3d501010723eb3675a96a954862a0210ac023095947f8e09ea951e15faa96545",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf/show_vrf_management",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc/vrf_test_show_hardware",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ca2359ed30a431281f356f0bb15f8bc2abb7169e21a6022034d8a4411fc413f6",
+ "chksum_sha256": "cf21f74cb2df54e19dae270c2b973eea492c3d9925ad7a1b8b59ff9f0e575287",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf/show_vrf_default_interface",
+ "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_evpn_global/configured.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "53ca3e78de8cd1b9ec6e040ece7bec23ea29663d1eebd1aed66a2980e832dc19",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf/show_vrf_default",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_evpn_global/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf/show_run_all",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_evpn_global/unconfigured.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f2a24625313932312f1d5e1c1d2c3935f99e5ab28880315c7dd39698df72daf8",
+ "chksum_sha256": "84f47e5f6bde50931928544ec35970db216f2bffd80cff2d7b7350903d86a5c1",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf/show_vrf_ntc_interface",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "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_static_route.cfg",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim/config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8787db2297394f70dfa9ea3550d604fcaef84c40d973c498b147d346422b8585",
+ "chksum_sha256": "c0c10e6761048c3f05f7143dc844703c76c41ed38e9f0175479874c183cef2ac",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/_nxos_ip_interface.cfg",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ce28d8e36e6ed0776c23f9d57050b68a3dd4cace82f8d3909de89bf98c2b3401",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_devicealias",
+ "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_devicealias/shdastatus_mansi.cfg",
+ "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_nxapi/n3k/show_run_all",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b47fe27d3b8f630988803930db4eb009b8ef93e5f7838e4d3a49adf1859d43f5",
+ "chksum_sha256": "db42fd8881e10bf436a6712d228152f2ca6e627e0aa07531751009df2153fc3d",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_devicealias/__init__.py",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_nxapi/n3k/__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_nxapi/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5426bfb2d55edf2003ff250d0730cf4ea9ace4f44da02ce6664ed3bc77c7867d",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_devicealias/shdastatuslock.cfg",
+ "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/fixtures/nxos_nxapi/n7k/show_run_all",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ba24a69173bd06b6a025d176427b5619878da807c2a2b8a42aced27ac16d607c",
+ "chksum_sha256": "0f487063d9698ed988f461a0f1d90be2406db893a1881d162720dd0587a0ddd9",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_devicealias/shdadatabse.cfg",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_nxapi/n7k/__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_interface_ospf",
"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_interface_ospf/config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c0c10e6761048c3f05f7143dc844703c76c41ed38e9f0175479874c183cef2ac",
+ "chksum_sha256": "5251c622e0f68d8c94e0215bd6a9f8c5d7ab755fc8879ceff8a9cac9b09caf9c",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim/__init__.py",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_interface_ospf/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_l3_interface",
+ "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/fixtures/nxos_l3_interface/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_l3_interface/ethernet_noshut",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_telemetry/N9K_SGs.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "96a17611067db53f8bdee41ec48055b8ec808b2968d4f3dd784dfae1d6d85d4e",
+ "chksum_sha256": "af042e9ae8d0a2e6b6ddc28f13ce438e7b49050385ca546bdb5f1a1b51c1da1e",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_l3_interface/ethernet_noshut_ipv4_ipv6",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_telemetry/N9K.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9b65b76df737c6da986a8850a5874d6f6733c26b8209c778d7d861ce0b5cb894",
+ "chksum_sha256": "8d4c2bff81ce036402bf1bfc5a01191ead2507ea6deb7e7d4930ceb35965b1e5",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_l3_interface/ethernet_noshut_multiple_ipv6",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_telemetry/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "93f0654869c15b0670ae97f78615662b35f5f3aefccfb3c1e2e463ae3759a6d0",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlans",
+ "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_vlans/__init__.py",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_config/config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "03abdcaedc2f739a12fd1c31f37164f02ed471aff024ad8e654a0d7ec3e611e6",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlans/show_running-config",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_config/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6b793f9fc0770084b8babcdd914c4c42b2d1d3256be53d0cba3a78c19a616dec",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlans/show_running-config_no_facts",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_config/candidate.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "783b64a65f752ecfbf2ab084cb164df5d5a818d3dc9980856037a47853bcbfd8",
+ "chksum_sha256": "3352c8002ead9454c96fa97e82bc2bf245ac57a69edbf8a934bed4ef809de3de",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlans/show_vlan",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6ac358cca25afd3bbc1aa11515f5e31ea9d548abdbcdf0563949e446d76f0c3c",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_switchport",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlans/show_vlan_no_facts",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_switchport/show_interface_ethernet",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ca3d163bab055381827226140568f3bef7eaac187cebd76878e0b63e9e442356",
+ "chksum_sha256": "3eba930c712f346d62428fc829d411a3c7f3b32d00ac0b54bee3e25f5a239876",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_acl_interfaces",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_switchport/show_interface_ethernet_switchport",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8b266354ff8d44bc8987e97565cba41afedb2fbe282c577c8d371516e84d01bc",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_acl_interfaces/__init__.py",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_switchport/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_acl_interfaces/nxos_acl_interfaces.cfg",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_switchport/show_vlan",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "764024b1837b2491a2e87e60ba305df48bc64541f6caf244fe4eea63653ee340",
+ "chksum_sha256": "864e06b1e9befc20919e723ee5f9bcb2f51a88e524e8ce8e112ac9ec12bf38fc",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_acl",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_acl/__init__.py",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzoneset_2.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "08f7f3dc2d44ed61e7002bc417cea69f8407d7f4b0a62634c1f449f5338f7384",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_acl/show_ip_access-list.txt",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/show_zoneset_vsan.out",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "61de402089db40d19ac51c2e8a52894c45d9002156027c09ab17d0cc3fea635d",
+ "chksum_sha256": "fc71e64aa30f5e4da11b419ac36c9b36cae8057bd8bef47b2da5bc293ebaaebb",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/fixtures/nxos_overlay_global_config.cfg",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/show_zoneset_active_vsan.out",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aeb566110f15e114259185610a7e1a17ba8a4a8380f590120292eceab885bccd",
+ "chksum_sha256": "eef09bfcfaae85faa6c0b10f2ac4207c73947496c77783c7aa6bac45a9d02d3a",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/test_nxos_pim_interface.py",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzonestatus_1.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7c5937f68440ccc096dd950939c41e9dd41a824489a76043b332c1cf7be3e35f",
+ "chksum_sha256": "46c16cd03a600d15085abf2052ed33830fed61424a02004021ce4dd82f0086e2",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/test_nxos_l3_interfaces.py",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/show_zone_vsan.out",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "92733ffae6656acc3fe5a549f92b8380cef8870e0cc1c8048dda5d10da856fbb",
+ "chksum_sha256": "74aee6c5327fabe2de027ca0907e76be2628510e125976c8918575bbf09ea703",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/test_nxos_vlans.py",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzoneset_0.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5bbc41cc6074ab22083413658f1ff7b3e1880add6b03be2d0ef30dc2a85bf163",
+ "chksum_sha256": "cae1aca46b8d82f44a8f728182fafd1030040360725fb7367040392c1d52c018",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/test_nxos_pim.py",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzone_2.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fe1f59aa59b32a791b714b6ba94f5db95d63ecb36919a976fece5768c620de26",
+ "chksum_sha256": "6e109ddbe7ad8d251edbe3ebe5bf960c055ac9a1d3d5bc3865596bf0d65d83a5",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/test_nxos_vxlan_vtep.py",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzonestatus_4.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1fb26930f7397caf4e73360e986af9a6bdce38f9109603afa5688907b2a46719",
+ "chksum_sha256": "5005380753639cd3afd7e1b4ed90452d5d9492bb05c0852563009949e285db0e",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/test_nxos_acls.py",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzonesetactive_0.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3a022041902a02465149c84cdd3bdee33f6d54a5d161a9e1a7aca79e49c43ba2",
+ "chksum_sha256": "1836db8862dd990ea4008e3c10d16d7a5563561ac27a8f846f2d2bfee8d805f0",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/test_nxos_fc_interfaces.py",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzonestatus_0.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "010172dc57589c93d51b95aa50feecbda06ee706fd623422a088de23ccc9e723",
+ "format": 1
+ },
+ {
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/__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",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/show_zone_status_vsan.out",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "31ba29ac58679593dc02bb181382bee8b76f4728eb007ba2291681b64dfb783e",
+ "chksum_sha256": "42ca86dc445e87a4cba4d08cbd217173af42f60181eb44017d852837c17e9a47",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/test_nxos_logging_global.py",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzonestatus_2.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ba671c099009dae25cf68d105fcada6f520d1c1becf042270df92a2b42e17218",
+ "chksum_sha256": "171f743817a7ffe74398b6d78a0600ec0126dc2fe0890694a62eb6db89225a58",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/test_nxos_pim_rp_address.py",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzone_0.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e451350df730941297d3a8b19b3464a5dc0f1a6265e9528fff50165972eca894",
+ "chksum_sha256": "13fa7bba46e2967e5c1bc2254620c4cd5337daab92a23d8aa6d6dec1ea7905ae",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/test_nxos_bfd_global.py",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzone_1.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6810dbdbe6eca1cb36fe8b377e9a51e7d4604a019db7ec3f1d7c44f8ad53bceb",
+ "chksum_sha256": "abb9d2504120327f0b55c36a6c130c9180a0f455ae397737ecfaaa4e6f891ef5",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/test_nxos_snmp_server.py",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzonestatus_3.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "762a88d4f3946c107d8dc3738799fefa5d6e1647531aedfc7ce27ab01122838b",
+ "chksum_sha256": "3fee2a63052400d50f93de5abc0dfd7897a48269d71af99f53182139461c3bb0",
"format": 1
},
{
- "name": "tests/unit/modules/network/nxos/test_nxos_bgp_address_family.py",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzoneset_1.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f7060edef96542abbf9e9eefd25477e5599dfb63c1e5360e6c8eeb9d3cda9bb6",
+ "chksum_sha256": "bcdd326b9710f2b1f56ac59ed3bdccaa6e853cfb24af1445743d3254ce458166",
"format": 1
},
{
- "name": "tests/unit/modules/network/__init__.py",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzone_bug339.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "6c45bdddc81417a51bdb8256cc024efef8d8cf432083297902ef8fcda9850703",
"format": 1
},
{
- "name": "tests/unit/compat",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_acl_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/compat/unittest.py",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_acl_interfaces/nxos_acl_interfaces.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "727203a3846be41893b78a4b77852a1658925e936fb19539551958a5d8e8fb81",
+ "chksum_sha256": "764024b1837b2491a2e87e60ba305df48bc64541f6caf244fe4eea63653ee340",
"format": 1
},
{
- "name": "tests/unit/compat/__init__.py",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_acl_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/compat/mock.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d000c79c38a69b736cdc65ac48952cbb7ec574ab2e3b13f81bb213b8381b8f8c",
- "format": 1
- },
- {
- "name": "tests/integration",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_devicealias",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/network-integration.requirements.txt",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_devicealias/shdastatus_mansi.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "234d0353684f5a41c84eabb03e13539abf602dc0de061a90e129618976b3c106",
- "format": 1
- },
- {
- "name": "tests/integration/targets",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "b47fe27d3b8f630988803930db4eb009b8ef93e5f7838e4d3a49adf1859d43f5",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_static_routes",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_devicealias/shdastatus.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5426bfb2d55edf2003ff250d0730cf4ea9ace4f44da02ce6664ed3bc77c7867d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_static_routes/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_devicealias/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_static_routes/tasks/main.yaml",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_devicealias/shdastatuslock.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "40fe4fe85031868241ac9845115f925a1c7be1ad8c4f932f4896fdaad51da36c",
+ "chksum_sha256": "ba24a69173bd06b6a025d176427b5619878da807c2a2b8a42aced27ac16d607c",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_static_routes/tasks/cli.yaml",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_devicealias/shdadatabse.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2eacf5012e1fb8a88bd7663844178dc5f6b617535d4bc2ddf0037ce474a33b1e",
+ "chksum_sha256": "2e912812c9084c8676a32afd1e2522f00bfd75d164fbb86113f01a88f164ebb8",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_static_routes/meta",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vsan",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_static_routes/meta/main.yml",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vsan/shvsan.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_static_routes/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "63e5ef2ff7dfbb786b21f77d0e047b16a5af1477901433189032c59f0d2e4988",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_static_routes/defaults/main.yaml",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vsan/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"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_vsan/shvsanmem.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "91b604b4bdd22922dfbfb776dc40a760428806a2f845e8c9e76d42beef14bbb8",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_static_routes/tests/common",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlan",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_static_routes/tests/common/_remove_config.yaml",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlan/show_vlan_brief.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "244c13d831c6419ec7e7a46e3e00e82fc1be5a476e5204561deae0efce659d93",
+ "chksum_sha256": "c60b1775765492c72f6cf744aa56574aeea9b6c57ac19c974ebc73146cf4920a",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_static_routes/tests/common/parsed.yml",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlan/agg_show_vlan_brief.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4a2cd09da60d6b0bc0904e3f313e959fc3efbba7979d14309764e11aaefab96d",
+ "chksum_sha256": "a6ad270b50167f7b13c3e7f40f83ebc812ceb7ef7d3455c0ce7b404ede9d6238",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_static_routes/tests/common/gathered.yml",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlan/config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f58a5e229e9cb4a2cd367d9bd3d36dfc7b8a03598bd35d77c19ea701e70b8976",
+ "chksum_sha256": "4cd4cba4fba8bd0ceca02c0cea325b38c65d82a1b01633f59776902dfc00010c",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_static_routes/tests/common/merged.yml",
+ "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlan/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d8a7a44814c334c50589139d3473b014a953fda361f2d88075fe1538f65a580e",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_static_routes/tests/common/replaced.yml",
+ "name": "tests/unit/modules/network/nxos/test_nxos_bgp_templates.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5c23e4c252c1cd1583fd56550d8d702f0b09b867eb03c50886e83f3c24197690",
+ "chksum_sha256": "9ef2f97c111f9f0a6155a7353fde97cf4cbea592f715578a4df20893bad2e7ff",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_static_routes/tests/common/deleted.yml",
+ "name": "tests/unit/modules/network/nxos/test_nxos_ntp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "10271b66076c4d1659a13c85ae4ba02c903ba2eb771ba8a2e31f0910c46de739",
+ "chksum_sha256": "21b73c3764e98cb997bfd28ed8b5ce52bd4b3fa3f499feab3802ca37e5de012f",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_static_routes/tests/common/rtt.yml",
+ "name": "tests/unit/modules/network/nxos/test_nxos_ospfv2.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ac26dd65c91afd1fd0e3734c2d3b9c361904f6af8fed0fbce8ee7746c96b64bf",
+ "chksum_sha256": "fae6c56a4916171573a12ad3ab0071c82488062af9e6562078262a50c699b83f",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_static_routes/tests/common/overridden.yml",
+ "name": "tests/unit/modules/network/nxos/test_nxos_lldp_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ff14829c4bb5758e9c2bcce36a6a134e5fd2d02af7586147e25ce45f5d3c6197",
+ "chksum_sha256": "d61028deb5268fdf63e8cfa7bcfa10f99738fb475e42f31911e3e264360eda34",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_static_routes/tests/common/_populate_config.yaml",
+ "name": "tests/unit/modules/network/nxos/test_nxos_nxapi.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d486bec06fd92b15f491fc77298d00447520a955e2dbf3d84a5a739d1a2703c2",
+ "chksum_sha256": "c79a89af6839dbb8a41461dd0c68ff33e88b2d8ed3447f3b4fc7fd1be0419394",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_static_routes/tests/common/rendered.yml",
+ "name": "tests/unit/modules/network/nxos/test_nxos_hostname.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b9734f5468d080e059ad191471f78497c2ce42fa6d87de56f9f2e273bc0d8e28",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_static_routes/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "0c65ec8fcd4ddd139ae9947a00ec54a04c2c4da5a5376b0d106d903c2f37a9a1",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_static_routes/vars/main.yml",
+ "name": "tests/unit/modules/network/nxos/test_nxos_telemetry.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3eda3cf170b296ca5e5f4996c8b03c030d87a4e3e6197f7770e2b14e739e4ab3",
+ "chksum_sha256": "d5a38ca859e81c05061d9ee2f6cceefe3beccaa0587eb427a040be3c1e7e00f3",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_pim_interface",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/nxos/nxos_module.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0d1a4eadc6d91ab91db07ea6ac3a5576e417f1339c1520079de065451b87fd3c",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_pim_interface/tasks",
- "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_pim_interface/tasks/nxapi.yaml",
+ "name": "tests/unit/modules/network/nxos/test_nxos_vlans.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
+ "chksum_sha256": "320bd35df7abc52ebbb1a9cbb5286dcaed02a736d1051666fe5adcdf1a57a043",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_pim_interface/tasks/main.yaml",
+ "name": "tests/unit/modules/network/nxos/test_nxos_pim_interface.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca",
+ "chksum_sha256": "caa9723150e6b388c6ac57ac58e581317fe3b31757c2da99e00b1695d362358a",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_pim_interface/tasks/cli.yaml",
+ "name": "tests/unit/modules/network/nxos/test_nxos_vpc.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
+ "chksum_sha256": "fd868cf29e78bcc57d8d983ff6fcd4bbfcd1d0e34c63ab99737878827ec83d7c",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_pim_interface/meta",
- "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_pim_interface/meta/main.yml",
+ "name": "tests/unit/modules/network/nxos/test_nxos_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
+ "chksum_sha256": "e983acf04cb96f85df2b16c5ad63601cb4b87de6e74f5003751d4090e5350ced",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_pim_interface/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/nxos/test_nxos_route_maps.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4ac86722ca4d5b62b0d586b4df8c59a207c76932b7b0596003de9722359d7872",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_pim_interface/defaults/main.yaml",
+ "name": "tests/unit/modules/network/nxos/test_nxos_vxlan_vtep_vni.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
+ "chksum_sha256": "eb233dc0fead25086cf7310ea386b8e51b17bf00468ab2a1dbb08f44a1aa03b7",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_pim_interface/tests",
- "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_pim_interface/tests/common",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/nxos/test_nxos_evpn_vni.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "71aa392dfc446e9f3fe0af4c32cba761151a0bae41be4831d6b560e332b2bea9",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_pim_interface/tests/common/sanity.yaml",
+ "name": "tests/unit/modules/network/nxos/test_nxos_bgp_address_family.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "acc020ce7729ff57e637de9f3cd1f3aae98af404b208386a852c6c804d0006fd",
+ "chksum_sha256": "b94c2ad86ce7c380e6080a791526f868016e43350612dfd321a92964c8f9a04a",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_overlay_global",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/nxos/test_nxos_banner.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "491dacb2d554279466c694b6c0266fcc0dc9be308b3bfe338cb1312ea0f2488c",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_overlay_global/tasks",
- "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_overlay_global/tasks/nxapi.yaml",
+ "name": "tests/unit/modules/network/nxos/test_nxos_vpc_interface.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
+ "chksum_sha256": "d6e27d691e0dc50b4659403bb76593fef84cfa193d36933dd299a1e486525fe0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_overlay_global/tasks/main.yaml",
+ "name": "tests/unit/modules/network/nxos/test_nxos_hsrp_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca",
+ "chksum_sha256": "c9bd24f31dec735e5b7f5862c3e9cd48d692b6b528dcfa0114830aedcad227e5",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_overlay_global/tasks/cli.yaml",
+ "name": "tests/unit/modules/network/nxos/__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_ospfv3.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2759b15fdeec5305cbf7fb599142511bd89e5af0c772b3739c39c28880a49e1b",
"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_fc_interfaces.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "320e6449e95a55c156623eaaeeb69f81a2c66c66ec1d8a5c06702040595ec95e",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_overlay_global/tasks/platform/n7k/cleanup.yaml",
+ "name": "tests/unit/modules/network/nxos/test_nxos_pim_rp_address.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6fe5dccac28d950d4f93db2d5dd8d2d53f974b51a0c07a9371165a7fd9b20585",
+ "chksum_sha256": "aba5914ef5c9e367924aaafd1b555e2200d2f6c0aeaad5d5a2170880bd8f2cdf",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_overlay_global/tasks/platform/n7k/setup.yaml",
+ "name": "tests/unit/modules/network/nxos/test_nxos_lacp_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1f41e716a6ee3d52141e15b1cf8d8a62a6656066f9761e5438f18b03b64148ba",
+ "chksum_sha256": "8b284eb5232ddef43ad1619acb13d73a7c48f20d736372b212a4d7352bd1e420",
"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_bgp_neighbor_address_family.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f23808fbf9f008c689f4e1c02b7916bd261d6118037deb6fa58977cf805cee8f",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_overlay_global/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_overlay_global/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_overlay_global/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_overlay_global/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_overlay_global/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_overlay_global/tests/common/sanity.yaml",
+ "name": "tests/unit/modules/network/nxos/test_nxos_vsan.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "10d3d02705dac2e31ab7424914f1dc74d20c5cf799141c26ac2e47ec2c68e1b4",
+ "chksum_sha256": "8af4c5d2ddc4255350bdeea291e5661e3b5f07f5fd6cb755c9151cd8751394c5",
"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.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2d93cfe3962b0a2c9ba309e973bf3db9087727c2459fa64f1c2fe0c4dfe61627",
"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_ospf_interfaces.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "19c4359cb20e2df0f649d97f3207a5861ebcdc6a2430db3ff94019ba14a38c73",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_community/tasks/nxapi.yaml",
+ "name": "tests/unit/modules/network/nxos/test_nxos_command.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
+ "chksum_sha256": "d2a3122d72313abb8ad6da5ba19c9070e95def315019bcc16cbc8ff835428411",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_community/tasks/main.yaml",
+ "name": "tests/unit/modules/network/nxos/test_nxos_user.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca",
+ "chksum_sha256": "1e084a512bff94fcf880a610ec5dd779c64ad7a3feea58bbc10e141e5eaf282c",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_community/tasks/cli.yaml",
+ "name": "tests/unit/modules/network/nxos/test_nxos_system.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
+ "chksum_sha256": "a7ea6f26526b9e4ead960a1c161b83de2581ca9d8a90d95925340e2fa8e17c8b",
"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_pim.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7e108bcc18c5b82ce1cb4cd46d8996147683f30a2f18d2a9eab8367dddb07bb1",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_community/meta/main.yml",
+ "name": "tests/unit/modules/network/nxos/test_nxos_logging_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
+ "chksum_sha256": "569405484ee944ef07a45c205f8588b8a00e4b626f64ad52c2da5f13d1d599b3",
"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_bfd_global.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "642bb2c06d13b8c2354bd9e46c01bef3beccde28fdbe5efa8af16cef2dc2a21f",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_community/defaults/main.yaml",
+ "name": "tests/unit/modules/network/nxos/test_nxos_vrf_af.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
+ "chksum_sha256": "25bca3233974b76c3830c4d3b603c73dcb0032036a1752e0804c8cbc473a9973",
"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_config.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f1acec58b3eaf968e8273380ab7d9170e37605cf1a1b5f66e08e568bf7d94e04",
"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_acl_interfaces.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6c9f9ef53093b66901ca6deaacd5cb8eeb43f20bf80782d5ce721a57290a7288",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_community/tests/common/sanity.yaml",
+ "name": "tests/unit/modules/network/nxos/test_nxos_static_routes.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7a31444a04409e8b5f9d58864e5405ec3ded7ec744e6e731b3ca0d22ec1a6ee0",
+ "chksum_sha256": "319d8c2d4417de66f5a808ab30acbe1e9edf6cbe6d9c3a26c78f891031d2a233",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acls",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/nxos/test_nxos_evpn_global.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7cb868c9311b9810788e13862c9b74c809e19a9f9b57ad9e46ff4124fef884dd",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acls/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acls/tasks/nxapi.yaml",
+ "name": "tests/unit/modules/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "280d285e1a9b531b25d8b880d3a032933d7135004c4658b7f1eb4872c60cc666",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acls/tasks/main.yaml",
+ "name": "tests/unit/modules/utils.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dc2e669d7f6ccc6f6bd958fc52376105ef28a808ec084c11f2dfcecf1471760a",
+ "chksum_sha256": "414c272e9a403bb6009460ec9502c5acfaa9c80b2159c742f6cb2e225938be3e",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acls/tasks/cli.yaml",
+ "name": "tests/unit/modules/conftest.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c57c3ff656bb8daf9febb3c7a7bff934b952d1ccb83604d93e23ccfc3ea88724",
+ "chksum_sha256": "354440d86f684a9641f329807a687fe71fc66ab901207f7a166ecfa648935488",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acls/meta",
+ "name": "tests/unit/mock",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acls/meta/main.yml",
+ "name": "tests/unit/mock/loader.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_acls/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "2343d1f644250d4b616f0bf0a826fdee8fe306243d8412d44dd0e033352b262b",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acls/defaults/main.yaml",
+ "name": "tests/unit/mock/path.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
+ "chksum_sha256": "5561a16a302e55ea79227591afefc3a93f33001fc80155dd29b068b90502a446",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acls/tests",
- "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/integration/targets/nxos_acls/tests/common",
- "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_acls/tests/common/remove_config.yaml",
+ "name": "tests/unit/mock/yaml_helper.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6b36b668815324ab75f641e80f9341c4f7b4f264585d07409b01704c5f8a018d",
+ "chksum_sha256": "fc4f4d5d2968ced8e3a04653354945d720e7c6369aad67ba7724c5981c82b6ea",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acls/tests/common/populate_config.yaml",
+ "name": "tests/unit/mock/procenv.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ea179f0b4974165f1ad36daff838b34a663eb136543c6a908df7b8fe73027eaa",
+ "chksum_sha256": "3ff983479d7aa4b90efe73337f723c14224edabcdfde4efe49f24cd905f45f1a",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acls/tests/common/parsed.yml",
+ "name": "tests/unit/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9c6e2f1a0b9c9d9dc2c33b7906490f5acde968592b9257f095b4cfc38eee3dd9",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acls/tests/common/gathered.yml",
+ "name": "tests/unit/requirements.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8c6126ef877c72fdb6e19f6499e4c3ac4219a5fb4cde44f4529306aac3fd7966",
+ "chksum_sha256": "49ba996dc4735c3463e9af561344346dfae14bcc1a68096ce78364b377f0df1f",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acls/tests/common/merged.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "fc2db360c49a4f960de158645c43115dec175da832363eeaba86a8ea97d1e62b",
+ "name": "tests/integration",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acls/tests/common/replaced.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2b9ce3eb07fb30eb390fc555830b61b4118c485523bf85538a805feb06ea0fb0",
+ "name": "tests/integration/labs",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acls/tests/common/deleted.yml",
+ "name": "tests/integration/labs/single.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "14f12dadd4d09d23feee07007209b1eae18bc9c013a50f79ed39ae022e652226",
+ "chksum_sha256": "fe76aae4b59ac2c628191394f5cfce79e8564ecb72be6157e14f32c7e8a97093",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acls/tests/common/rtt.yml",
+ "name": "tests/integration/network-integration.requirements.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4912e31a951706d32e6682e65095ad1794df0cdedeeeec3d5e9ba139e14a0409",
+ "chksum_sha256": "234d0353684f5a41c84eabb03e13539abf602dc0de061a90e129618976b3c106",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acls/tests/common/overridden.yml",
+ "name": "tests/integration/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9e261e0e1a8b1778739d5bb1c17c75a378186c5c2efd72a351d604e0d7560318",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acls/tests/common/rendered.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "aa791c7d2f4a1989dd888e3880d230146cee3a448116cb224c31066a7f7573fe",
+ "name": "tests/integration/targets",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_user",
+ "name": "tests/integration/targets/nxos_vlans",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_user/tasks",
+ "name": "tests/integration/targets/nxos_vlans/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_user/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_user/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_vlans/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_user/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_user/meta",
+ "name": "tests/integration/targets/nxos_vlans/fixtures",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_user/meta/main.yaml",
+ "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_user/defaults",
+ "name": "tests/integration/targets/nxos_vlans/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_user/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_user/tests",
+ "name": "tests/integration/targets/nxos_vlans/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_user/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_user/tests/common/auth.yaml",
+ "name": "tests/integration/targets/nxos_vlans/vars/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "db7a57ed2e804cae9aea360123df898848cc2e772fcab84d843aac01ca0b6b61",
+ "chksum_sha256": "fd3723c027909807b1d6ef73222d5bfc96f98c680a9f86f3e89c0366bdd22116",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_user/tests/common/sanity.yaml",
+ "name": "tests/integration/targets/nxos_vlans/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/nxos_vlans/tests/common",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/nxos_vlans/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bd39b32f02401670bfda98c14839d0da9c76ae8446c151dc7f10131c9531ded6",
+ "chksum_sha256": "fe16be9cd5316c7526ea489bad81d693f40c2f2351c01f60a4074802f208164e",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_user/tests/common/basic.yaml",
+ "name": "tests/integration/targets/nxos_vlans/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ba9e801ff2ad1ae02085f83753b4f2e51565888a0fa5822ea0f671ee8a54229f",
+ "chksum_sha256": "6f9623efb3904d185246e618c1cb0726553a5556941e5c2e91b7c9025de0e89c",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_gir_profile_management",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_vlans/tests/common/deleted.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e2964f468cfe2c92dbee0504a71845636d76ff4e079dd07ad7f8656cba328221",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_gir_profile_management/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_vlans/tests/common/replaced.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1f1efb47f41f82d4be94cca66acf388791ed71b63f1f3897f769f7e4110f1be6",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_gir_profile_management/tasks/nxapi.yaml",
+ "name": "tests/integration/targets/nxos_vlans/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
+ "chksum_sha256": "c70b2b7642402aeef4772a4a8cc7b7abde208bfedd65fbdcf95231b2ab5a74db",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_gir_profile_management/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_vlans/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
+ "chksum_sha256": "9d0b9b581e3e45b412907eecbc4ba5ad1632595e8cb58f397365287ce091bee0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_gir_profile_management/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_vlans/tests/common/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
+ "chksum_sha256": "65b9276bee903c86af57ed5a6afee1d84461bf6c7bf3a3cf95aa8369e0c7df57",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_gir_profile_management/meta",
- "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_gir_profile_management/meta/main.yml",
+ "name": "tests/integration/targets/nxos_vlans/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
+ "chksum_sha256": "69cfb989d7be0b980e8fc3eb9d33154c66e2cde5df1a9f8b17b1ea0894879212",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_gir_profile_management/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_vlans/tests/common/rendered.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5745013bf8f6e23f513cea1bb8878e4ca80ba61a331a5a5d2a7097673b786ed2",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_gir_profile_management/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_vlans/tests/common/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
+ "chksum_sha256": "0fef283f3a139da74d869920dfc1b12b127b20e505c060d30b893d457ea980bc",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_gir_profile_management/tests",
+ "name": "tests/integration/targets/nxos_vxlan_vtep",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_gir_profile_management/tests/common",
+ "name": "tests/integration/targets/nxos_vxlan_vtep/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_gir_profile_management/tests/common/sanity.yaml",
+ "name": "tests/integration/targets/nxos_vxlan_vtep/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d0237be40a79468b006b7bc99f59a3b8b9227b61b780adcd94fef59ea697e6fb",
+ "chksum_sha256": "1e03994e82f05167e558b19e20c435e80ed92b6ff4f62f71fb93ed9082d30f94",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp",
+ "name": "tests/integration/targets/nxos_vxlan_vtep/tasks/main.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
+ "format": 1
+ },
+ {
+ "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/tasks",
+ "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/tasks/nxapi.yaml",
+ "name": "tests/integration/targets/nxos_vxlan_vtep/tasks/platform/n7k/cleanup.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
+ "chksum_sha256": "6fe5dccac28d950d4f93db2d5dd8d2d53f974b51a0c07a9371165a7fd9b20585",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_vxlan_vtep/tasks/platform/n7k/setup.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca",
+ "chksum_sha256": "b569f1de86c96331c196b935a58a716b5314f80ebd5b9130aeaa56f44c45f047",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_vxlan_vtep/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp/meta",
+ "name": "tests/integration/targets/nxos_vxlan_vtep/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp/meta/main.yml",
+ "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_ntp/defaults",
+ "name": "tests/integration/targets/nxos_vxlan_vtep/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp/defaults/main.yaml",
+ "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_ntp/tests",
+ "name": "tests/integration/targets/nxos_vxlan_vtep/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp/tests/common",
+ "name": "tests/integration/targets/nxos_vxlan_vtep/tests/common",
"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_vxlan_vtep/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e73dcd5a6b36e1b9d5a9dccbe433f93ed19375686c161e0045ca92ccf2ca7053",
+ "chksum_sha256": "6f5876cdb7e7636f06c87e462e6002cd2694520079c83f7103450520ff14b3b9",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_global",
+ "name": "tests/integration/targets/nxos_vxlan_vtep/tests/common/multisite.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6e9df57ea06843b691dc030437dd9190193ddb70664dd0254133417e3a8b5cdc",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/nxos_vrf",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_global/tasks",
+ "name": "tests/integration/targets/nxos_vrf/tasks",
"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_vrf/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201",
+ "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_global/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_vrf/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2396a1bb62aa2d673208deb59766a787971d061630b8467afa525b7fdcb2e95e",
+ "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_global/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_vrf/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245",
+ "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_global/meta",
+ "name": "tests/integration/targets/nxos_vrf/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_global/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_ntp_global/defaults",
+ "name": "tests/integration/targets/nxos_vrf/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_global/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_vrf/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
+ "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_global/tests",
+ "name": "tests/integration/targets/nxos_vrf/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_global/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_ntp_global/tests/common/_remove_config.yaml",
+ "name": "tests/integration/targets/nxos_vrf/tests/common/intent.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2a828ee760fb0dfc1ce2906e7498216901248da978df3b7a90ce842c1041a157",
+ "chksum_sha256": "b49015c20a19ae1f270a3b5e69d370744549a23915fb03c23f6e84ad40f8ef74",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_global/tests/common/deleted.yaml",
+ "name": "tests/integration/targets/nxos_vrf/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e4c2d740371ba62f8ce9a298147acad6ef15cb6b851a8ea32e7682934e5c4294",
+ "chksum_sha256": "b8fb2d6249a8d9311ec67a31c87ad94a8184c7351dbf190d833bb1d7bafd4e7a",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_global/tests/common/gathered.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "060aecc4cf5c2f2c7d5785001728b97f6913dd3900aa2dcb0c37436509d9d92e",
+ "name": "tests/integration/targets/nxos_banner",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"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_banner/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_global/tests/common/merged.yaml",
+ "name": "tests/integration/targets/nxos_banner/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "159d739b15a17d8f62cbb4c9dfcd2fa3b7ede51f02fa6e9ac2bde196643b60fd",
+ "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_global/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/nxos_banner/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1581f91ffd8c1c23bb4676eab5c8b75109777725856083ae7e8f3f2e0993b3be",
+ "chksum_sha256": "c35d2ac52b14846e9fb2bba91ef7ba5f946b1cd2e47ed10c0b30941d6f9de766",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_global/tests/common/_populate_config.yaml",
+ "name": "tests/integration/targets/nxos_banner/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "08e70b7bf07e9f6621e1389be04c654a23a2f975aa49fc4aabc7ecb593bc5cfa",
+ "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_global/tests/common/fixtures",
+ "name": "tests/integration/targets/nxos_banner/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_global/tests/common/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/nxos_banner/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f7771e974db6ccc58fcb0a69ff17e00e208d57c09d96c7b8dfe8f5ecae8c879b",
+ "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_global/tests/common/replaced.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6b602368f7b9b4aba2e9a3e88b73abf107d658eb335fe4ce1a4cd4c0dca3a4c6",
+ "name": "tests/integration/targets/nxos_banner/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_global/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/nxos_banner/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bcba4c729094da821fbbcce077fce21c817d1f560df1dc97ede6c6ff9cc4565",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_global/tests/common/rendered.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "eb766ac5e824552d743eb36cfc738ad9abd7985d945bdea3d22a0d9130f839ca",
+ "name": "tests/integration/targets/nxos_banner/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_global/vars",
+ "name": "tests/integration/targets/nxos_banner/tests/common",
"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_banner/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2c37457ec8af62c1519304e787a4e2ca6be4c156f8cf7bc2293106f38aaa2957",
+ "chksum_sha256": "dcccaebec31acf1f9adfe71c2e5067fcb6c1416a7c63b077490beedfff6078ca",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_user",
+ "name": "tests/integration/targets/nxos_snmp_location",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_user/tasks",
+ "name": "tests/integration/targets/nxos_snmp_location/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_user/tasks/nxapi.yaml",
+ "name": "tests/integration/targets/nxos_snmp_location/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_user/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_snmp_location/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_user/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_snmp_location/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_user/meta",
+ "name": "tests/integration/targets/nxos_snmp_location/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_user/meta/main.yml",
+ "name": "tests/integration/targets/nxos_snmp_location/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_snmp_location/defaults",
"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_snmp_location/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_user/tests",
+ "name": "tests/integration/targets/nxos_snmp_location/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_user/tests/common",
+ "name": "tests/integration/targets/nxos_snmp_location/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_user/tests/common/sanity.yaml",
+ "name": "tests/integration/targets/nxos_snmp_location/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cc18bce3cf7f8a257784f7d4e432ef00b535bfe73b057d661756f364bcc9d176",
+ "chksum_sha256": "3e00a1c43687d39e22e8835b039f398d7bdebbcc45399d8cd01d6ca7d4ef6e96",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_igmp",
+ "name": "tests/integration/targets/nxos_pim_interface",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_igmp/tasks",
+ "name": "tests/integration/targets/nxos_pim_interface/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_pim_interface/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_pim_interface/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
+ "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_igmp/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_pim_interface/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_pim_interface/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_pim_interface/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_pim_interface/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_pim_interface/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_pim_interface/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_igmp/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_igmp/tests/common/sanity.yaml",
+ "name": "tests/integration/targets/nxos_pim_interface/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3f3aa30512b55460b5e6c82887f66d7642c56b86c7eabd5801148a945ce2ef4",
+ "chksum_sha256": "acc020ce7729ff57e637de9f3cd1f3aae98af404b208386a852c6c804d0006fd",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l2_interfaces",
+ "name": "tests/integration/targets/nxos_ospf_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l2_interfaces/tasks",
+ "name": "tests/integration/targets/nxos_ospf_interfaces/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_ospf_interfaces/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l2_interfaces/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_ospf_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c0ff0c24a2fb4a8aa58a6356c5029065acb6cf1aba1e14add135ff69c8d1387b",
+ "chksum_sha256": "e9eff3b2082e2a94e384711077fcb0a67b0410a72a0d7425367798c7fe1c4c75",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l2_interfaces/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_ospf_interfaces/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l2_interfaces/meta",
+ "name": "tests/integration/targets/nxos_ospf_interfaces/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_ospf_interfaces/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l2_interfaces/defaults",
+ "name": "tests/integration/targets/nxos_ospf_interfaces/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_ospf_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l2_interfaces/tests",
+ "name": "tests/integration/targets/nxos_ospf_interfaces/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l2_interfaces/tests/common",
+ "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_ospf_interfaces/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/_remove_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3644170fb7b4322fa4d272cd5d5e351480018b485a065fa7131fb3f6f5e2f353",
+ "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/deleted.yaml",
+ "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_ospf_interfaces/tests/common/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c58134a7c574f9d19d3012c238b2be0d4983d6d856a11e9f6ee089c3df5ec6b4",
+ "chksum_sha256": "77f5af82eeb76922d66d564b1b3b713644b5154cd160ed32686613453f6ffb08",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6c1ffa21ffa7a57ae8edbb0a72820f4ec4e7947ba1ee5a1548473e81efec8724",
+ "chksum_sha256": "aa4d4d9ae4687f27e044a7c2ba6c6ffe31491031d9cfb724c69a54e4a1248b2e",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/empty_config.yaml",
+ "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a2a0ff901006be504934a514a2f337a699091eef58ab871fb32e426af1d6f6fa",
+ "chksum_sha256": "6563a046c325a1872e9c20c3a80658c02bc684d828e1d8c0dbfbfb23ede1da1c",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/rtt.yaml",
+ "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "148ed76eb41828c2417439c0b443097a6f2f9d1fa88a4abad48bd8e62de30c4e",
+ "chksum_sha256": "3e19f34c70b0982c9c03cc96e3fcf57b88c084597eae9036b3e4c6bbd0860dc1",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/merged.yaml",
+ "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6d84fa1c22c5e2d37b017a18ed59903fab43314717b4d632a46200d745318c0",
+ "chksum_sha256": "22709a3fdba9d6c94de7e53132bf6178989f0ea494f7779069913fc918ffa131",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/_setup.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aeb7c65908e1aee314df87a9afe8c2f4dc1e1b21e41ca8a03f2991597dfd0685",
+ "chksum_sha256": "5153443ed073b0cc035110ac96d297361e22abe390c84014d0a7dbc83ede74e4",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/_populate_config.yaml",
+ "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b9322c7dd05de65b972eb0bb02c699c4368fc68bb97dd155a05ed98dd304448f",
+ "chksum_sha256": "f4d88bbce44a9ca14508aebf3a495f3ced56b859aa74951b92922d613d0addbd",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9e1b2b7044a678c22cccca3dcc5c677fccf40a509764b7ecf5c8dfeecf4781d8",
+ "chksum_sha256": "b76239c8dec85299b177fa8a11a790932f64db53e155a64222321eff524af8b7",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3c30f97c6ae729fd7b3d88a3e7b6671c761ea07061ead87487979c013835b99c",
+ "chksum_sha256": "772abaa4b30e45bb3a3e0b168b9b50f62e75e5db9d1ee54915707631af8bc3a9",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f018dcb8d9a42d8930b0d10f62ed931546d66f2998aa42ce95f655d299dbb35b",
+ "chksum_sha256": "b880b29ecb1b59489b0d82bfaf1ebecc35e47cc4ae7d860d616a0e1c4c17b8f6",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l2_interfaces/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "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_l2_interfaces/vars/main.yml",
+ "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "80f38875da077b4094678a1b0d5fa1dbb55a586037c541d4daec3b3b8adca944",
+ "chksum_sha256": "947100dd1e56c9ebd17cb32e1caa66f7c5a540d038dd36f4d0482271627ffa10",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vpc_interface",
+ "name": "tests/integration/targets/nxos_bfd_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vpc_interface/tasks",
+ "name": "tests/integration/targets/nxos_bfd_interfaces/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_bfd_interfaces/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
+ "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vpc_interface/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_bfd_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca",
+ "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vpc_interface/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_bfd_interfaces/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8d37308cf2225418b5fab604f2b171a1aafbaa84be0c933a48ec0f153d7119ad",
+ "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vpc_interface/meta",
+ "name": "tests/integration/targets/nxos_bfd_interfaces/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_bfd_interfaces/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_bfd_interfaces/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_bfd_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_vpc_interface/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vpc_interface/tests/common",
+ "name": "tests/integration/targets/nxos_bfd_interfaces/vars",
"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_bfd_interfaces/vars/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "03b61d6df7de21547cead303ca85a6e4139660eb2df5e5e2af81ddfefc206951",
+ "chksum_sha256": "ab74ba6b07626a0723ca4ba193159ba14bc7011f11acd94ca9b5f13f817def19",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_options",
+ "name": "tests/integration/targets/nxos_bfd_interfaces/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_options/tasks",
+ "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common",
"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_bfd_interfaces/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
+ "chksum_sha256": "c7ce5887a89b7e2b67eb2b4bae794a1e0a77c77c2c98c1fbd123bca9ecbf78f3",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_options/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
+ "chksum_sha256": "b7125a5bf2a88b3a35ff6aa0d06f3afd1474431c753306f1390613c7892f8217",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_options/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
+ "chksum_sha256": "1ef608de6174de4a28060255b4f85b5c00beb4bf2c8c4083a85d4132fe06341f",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_options/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/replaced.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "57b05a37ab33678d00ceac9fa16256aa5ce862265fb330cf2045a6f06bd40331",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_options/meta/main.yml",
+ "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
+ "chksum_sha256": "903605fdce930f7ab623ddda18bc721d07632ae35cede2608f93d0178fffff86",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_options/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/_remove_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "35032ab6b2376156d9cc4386e0c3ae950aeea92146c89106e92963e5d9f30abd",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_options/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
+ "chksum_sha256": "e8b8f05c67f53717f791d5fa39768a09589083927c1b288181a9a2b28d3f19fd",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_options/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/empty_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a07b5658b8543fad6adbc03cc3dedf24b925d6c15ab96cba887e4057adde9af4",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_options/tests/common",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/rendered.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "879575bd8531da7b1f7752bc36e8b1d92d654dadebf3ac9e372c71ead2cd75d0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_options/tests/common/sanity.yaml",
+ "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "21d676594b169612943330f80f0fc7f0caafca537c991d9671fee07e9639a30d",
+ "chksum_sha256": "febb1078f232f6b64f4600db4e81e08b293f9c1b5959937b92458ea3228ac8ce",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vrrp",
+ "name": "tests/integration/targets/nxos_install_os",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vrrp/tasks",
+ "name": "tests/integration/targets/nxos_install_os/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vrrp/tasks/nxapi.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_vrrp/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_vrrp/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_install_os/tasks/httpapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
+ "chksum_sha256": "1c9ccfa8d43479520eb4cffae188c452027a694dd86a02bd92d31b5843301ad5",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vrrp/meta",
+ "name": "tests/integration/targets/nxos_install_os/tasks/upgrade",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vrrp/meta/main.yml",
+ "name": "tests/integration/targets/nxos_install_os/tasks/upgrade/install_os.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_vrrp/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "d774b3f202b5780184d96cdb5ac41b3db3540d09f575f0c8b0840a3509fd75bb",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vrrp/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_install_os/tasks/upgrade/delete_files.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
+ "chksum_sha256": "f770f6c4e52488ddd7b0c1dd5c61ef6f7f2dfb329cbae4337e0845567fa3e113",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vrrp/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "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_vrrp/tests/common",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "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_vrrp/tests/common/sanity.yaml",
+ "name": "tests/integration/targets/nxos_install_os/tasks/upgrade/install_with_kick.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a7766c42cc22f1bb7cc7fa396978f2db1df0d1c744e3241f371f55912f3cd610",
+ "chksum_sha256": "bf39d3606053aeface47d66b776a0f8ed281c130cf0258ac09e8a0a759076df4",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospf_interfaces",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "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_ospf_interfaces/tasks",
- "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_ospf_interfaces/tasks/nxapi.yaml",
+ "name": "tests/integration/targets/nxos_install_os/tasks/upgrade/install_system.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201",
+ "chksum_sha256": "d7225266ebf0be4737420a6d63a5cd3c77d3b6cfde7bd0f1c7eded1ebfad70b7",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospf_interfaces/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_install_os/tasks/network_cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e9eff3b2082e2a94e384711077fcb0a67b0410a72a0d7425367798c7fe1c4c75",
+ "chksum_sha256": "29b863033e05757e739075e995a668f9bcc014a0e214ac894ffa9af68bd781ce",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospf_interfaces/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_install_os/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245",
+ "chksum_sha256": "5a0047c8f02776d1bffe8d2ced68ea4c0f823708554f48419af32b1b7172a1a9",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospf_interfaces/meta",
+ "name": "tests/integration/targets/nxos_install_os/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_install_os/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
+ "chksum_sha256": "efb275d54a7c21fd007e1d1c8b10b65d148a9121af425a4e7fbd60abacd23fc8",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospf_interfaces/defaults",
+ "name": "tests/integration/targets/nxos_install_os/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_install_os/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
+ "chksum_sha256": "a79b77c93a1982c2682c177681bfcef5f3fb3421e3ef10be452fc81dc3ce8871",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospf_interfaces/tests",
+ "name": "tests/integration/targets/nxos_install_os/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common",
+ "name": "tests/integration/targets/nxos_install_os/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/_remove_config.yaml",
+ "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n7k_helsinki.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b76239c8dec85299b177fa8a11a790932f64db53e155a64222321eff524af8b7",
+ "chksum_sha256": "c023ec2f8677adcd41bd418bb5e35d3c82dc0636d9d41c45a2074b32891214be",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/deleted.yaml",
+ "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n5k_730_N11.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3e19f34c70b0982c9c03cc96e3fcf57b88c084597eae9036b3e4c6bbd0860dc1",
+ "chksum_sha256": "744e3327618fd03cced8667aa2dee9cd691c358777ecb1dc741abf3c8dc18484",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n7k_atherton.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "772abaa4b30e45bb3a3e0b168b9b50f62e75e5db9d1ee54915707631af8bc3a9",
+ "chksum_sha256": "f72c407c1bedf043f2a763f9db8de4c28cb40cd3f55a99180c0b54f46bc9910c",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/empty_config.yaml",
+ "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n9k_greensboro.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b880b29ecb1b59489b0d82bfaf1ebecc35e47cc4ae7d860d616a0e1c4c17b8f6",
+ "chksum_sha256": "7a09f37097e9dbedf717f83715339eb5397073ac3909bfd0cae6f874d3cd6342",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/merged.yaml",
+ "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n3172_u61a.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6563a046c325a1872e9c20c3a80658c02bc684d828e1d8c0dbfbfb23ede1da1c",
+ "chksum_sha256": "147279cb89618d50352ab1e86d4e939a3f3e0594cf28aec862eb867e1bdfc307",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n9k_hamilton.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f4d88bbce44a9ca14508aebf3a495f3ced56b859aa74951b92922d613d0addbd",
+ "chksum_sha256": "669ba59d9d909f0d42d6e69ae0ef3e6e1d4c33995a4658761f0b2884113cc041",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/_populate_config.yaml",
+ "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n35_greensboro.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": "bf8414d8d1327c0db9056739e1b39b673abe37e939356efd1ef96ade985ccffc",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n3172_u63a.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "77f5af82eeb76922d66d564b1b3b713644b5154cd160ed32686613453f6ffb08",
+ "chksum_sha256": "c37931cb7c45570fe30f100fb278e26b7b94b7848d59ad8b6dbdda0670534452",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/_setup.yaml",
+ "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n3172_u62a.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5153443ed073b0cc035110ac96d297361e22abe390c84014d0a7dbc83ede74e4",
+ "chksum_sha256": "9ee1eb9e5b4f1fea2c930c8a7c48eaf4708576b9af88c29f280f3dabcec163fb",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n35_62a88.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "22709a3fdba9d6c94de7e53132bf6178989f0ea494f7779069913fc918ffa131",
+ "chksum_sha256": "c041886e29ede3a58d17f0e6d281d5dd458095369130bed0e617ffb200824743",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n5k_733_N11.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aa4d4d9ae4687f27e044a7c2ba6c6ffe31491031d9cfb724c69a54e4a1248b2e",
+ "chksum_sha256": "7efa46e2021391e0fc9114f1b132861cd3614b7ec0064425b46ed876c81ea0f1",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n3172_greensboro.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "df5bdd37b5f9ceac0c9cba9185dfd3c1c3d13d839447eca07daca2717b7261f0",
+ "chksum_sha256": "f26347411b88b126bce20f80dca17f5726cc830996a1d8bd6119b73647bea681",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospf_interfaces/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "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_ospf_interfaces/vars/main.yml",
+ "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "254903ea468078a13337c27e4ffbfe0aad84710a36cdfeca8027eba5a16b48bf",
+ "chksum_sha256": "ee3909a9cbc7c9f42f3b146f122a61bdc2adada843b80ee111fe024dfa5c0d33",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_contact",
+ "name": "tests/integration/targets/nxos_hsrp",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_contact/tasks",
+ "name": "tests/integration/targets/nxos_hsrp/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_contact/tasks/nxapi.yaml",
+ "name": "tests/integration/targets/nxos_hsrp/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_contact/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_hsrp/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
+ "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_contact/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_hsrp/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_contact/meta",
+ "name": "tests/integration/targets/nxos_hsrp/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_contact/meta/main.yml",
+ "name": "tests/integration/targets/nxos_hsrp/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_contact/defaults",
+ "name": "tests/integration/targets/nxos_hsrp/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_contact/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_hsrp/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_contact/tests",
+ "name": "tests/integration/targets/nxos_hsrp/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_contact/tests/common",
+ "name": "tests/integration/targets/nxos_hsrp/tests/common",
"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_hsrp/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "21c997106ed806dbad5a3cdba01f5e201161020b6498a5d92ac003b702fa579a",
+ "chksum_sha256": "a9c0076bb37472ad1bcf0815ed5845032be77683ffc6e967f2577c29cc28f8a8",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_telemetry",
+ "name": "tests/integration/targets/nxos_igmp_interface",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_telemetry/tasks",
+ "name": "tests/integration/targets/nxos_igmp_interface/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_telemetry/tasks/nxapi.yaml",
+ "name": "tests/integration/targets/nxos_igmp_interface/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_telemetry/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_igmp_interface/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4fe8ec88364fed45512b5f8e5687038986edd9b03ab1962afa6476aed1ab2f5a",
+ "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_telemetry/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_igmp_interface/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_telemetry/meta",
+ "name": "tests/integration/targets/nxos_igmp_interface/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_telemetry/meta/main.yml",
+ "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_telemetry/defaults",
+ "name": "tests/integration/targets/nxos_igmp_interface/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_telemetry/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_igmp_interface/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_telemetry/tests",
+ "name": "tests/integration/targets/nxos_igmp_interface/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_telemetry/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_telemetry/tests/common/deleted.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d231b07bd5ab608ddebbdbbdbbcbed5e4648ac7ad05dfbbf1df4e2a21c063389",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_telemetry/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/nxos_igmp_interface/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0f66a09ea372c1fa2c05027c0a2097da33a0912daf4355ff6cab34a77e057acd",
+ "chksum_sha256": "3f1f412736c7af33d14c2be45d461f6f96778bc221e6abdabdc579247c32d72d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_telemetry/tests/common/merged.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b1ac88fec698b51b1f358987e65b5793cd9488ea085606963409a7b9d9b2b4cc",
+ "name": "tests/integration/targets/nxos_vpc_interface",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_telemetry/tests/common/fixtures",
+ "name": "tests/integration/targets/nxos_vpc_interface/tasks",
"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_vpc_interface/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_vpc_interface/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_vpc_interface/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9248b8354ba01bd1fecb1d24494a6098ee9547fa34a9d8840068abbb9a80fd92",
+ "chksum_sha256": "8d37308cf2225418b5fab604f2b171a1aafbaa84be0c933a48ec0f153d7119ad",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_telemetry/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/nxos_vpc_interface/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/nxos_vpc_interface/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_vpc_interface/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_vpc_interface/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_vpc_interface/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_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": "160c96e0f5f10f0cd536d1fcd93fad3b60a8eac159a64755ac8617a702f032b7",
+ "chksum_sha256": "03b61d6df7de21547cead303ca85a6e4139660eb2df5e5e2af81ddfefc206951",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_global",
+ "name": "tests/integration/targets/nxos_prefix_lists",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_global/tasks",
+ "name": "tests/integration/targets/nxos_prefix_lists/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_prefix_lists/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_global/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_prefix_lists/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "05625917ea950a0b177ebb25c692ba215e247b2f17a15309a86430a5871f5672",
+ "chksum_sha256": "2396a1bb62aa2d673208deb59766a787971d061630b8467afa525b7fdcb2e95e",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_global/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_prefix_lists/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_global/meta",
+ "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/meta/main.yml",
+ "name": "tests/integration/targets/nxos_prefix_lists/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_prefix_lists/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_prefix_lists/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_global/tests",
+ "name": "tests/integration/targets/nxos_prefix_lists/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_global/tests/common",
+ "name": "tests/integration/targets/nxos_prefix_lists/vars/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f869515b8a1ec55c8346c13f87eff1b4bef627722f02ba89f143fec41ea52254",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/nxos_prefix_lists/tests",
"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_prefix_lists/tests/.DS_Store",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c07047642c717ad5e564697143a11e7cc93a18376d91ee56dc5f44f3d19e22b5",
+ "chksum_sha256": "af891bb95ebcc39dfd38131bf64fba6eb7bb8e84f59a428b6af5477588fbc6b6",
"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_prefix_lists/tests/common",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_global/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/nxos_prefix_lists/tests/common/.DS_Store",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d96baf5dc0a51ac1a75147a0591b62dd0d0429b6f48ed375f6e41e73d43a21ed",
+ "chksum_sha256": "5b8c3589c79b71429938a827331899d13ac16c156374f8c45ec59068bd2d2060",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_global/tests/common/empty_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b605ca79e5cc2cdb7f664f1aec94711594f2f485adfc760cbcea01b01e2b25f9",
+ "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_bgp_global/tests/common/replaced_af.yaml",
+ "name": "tests/integration/targets/nxos_prefix_lists/tests/common/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bf31728c79fcf0b446ffd43fe431bc399513af80a6e363931a9f16fc611bf921",
+ "chksum_sha256": "f7f1e53d17acf3059197aa476e1715028d571930c8cff8eabada2af3da2e7819",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_global/tests/common/sanity.yaml",
+ "name": "tests/integration/targets/nxos_prefix_lists/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e6dc32ce625064b12bbb4bf361b4b9a56df6792af52c16d6bcda508de05bea6f",
+ "chksum_sha256": "53a49d08552e563da400b6c13475d9e2a020cc039eee9985b1c5a3e930fb3843",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_global/tests/common/merged.yaml",
+ "name": "tests/integration/targets/nxos_prefix_lists/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "35205173a9b4c2cdbf46f89706c24e10a7db1671892f25e7598957b6cd5424c2",
+ "chksum_sha256": "b63842b6c47d71229bd8ad567bce61e119a9da6f44fb987d22a5348d9b67f1e7",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_global/tests/common/_populate_config.yaml",
+ "name": "tests/integration/targets/nxos_prefix_lists/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "acd7172ee28b6a88b6f7a8a95548988e2c6ed27804288daec18676481280cb08",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_bgp_global/tests/common/fixtures",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "8c7dfc255e4fdc2e873e375b7b4a24b1098f63ebc6f80b18ddaf4bb4e62a9a46",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_global/tests/common/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/nxos_prefix_lists/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "52efea9c016168ecd2fcd4012748fdd81f2753c77b4cd322e5628278cf36a227",
+ "chksum_sha256": "7bf73d5bf1f98884b2c8dedfcdc762af1c6542276fc649a04bf360fe10400cff",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_global/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/nxos_prefix_lists/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "73a38ab49a6c4f73b8e5d6b5ff301846e40a8d55b18fe61d0647b6c54cac5688",
+ "chksum_sha256": "56599df6259a9ed56f2794f1171dba7cd811995b228ee29610d679201d7094f0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_global/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/nxos_prefix_lists/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5ad0de011701b4094ceef2432d855f96f3441d92e71e69dcd959cb05e86ba9ef",
+ "chksum_sha256": "b94ddd8f6e3aef1be0b00d88c934c971a436d3595b760e10dd388b6dacfac7d3",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_global/tests/common/purged.yaml",
+ "name": "tests/integration/targets/nxos_prefix_lists/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "43b3e83056042eb41ac0a74dc11eca0c07bec178548807f56d79e5d211f75360",
+ "chksum_sha256": "c10395ec2b03209c79681dd09690cb615195b8adaae1cdfa3fabc0fd68ef0565",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_global/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/nxos_prefix_lists/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ff3eb25121425c6e970238566923eca969ba8f67f60e6fa8ef5c1516ca5757bd",
+ "chksum_sha256": "56b14e2fd373b2211c65f09454a4c39137bb1f1a06ad96f007e377d8b2b51851",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_global/tests/common/deleted_af.yaml",
+ "name": "tests/integration/targets/nxos_prefix_lists/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ef14541859231625e08fe2b53fbf4b8f6e64bcea02d4bb987038b915725abeab",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_bgp_global/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "742244e5eb090968dbbab6b3bce1d5d52404f476371439bf2404e4467534b488",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_global/vars/main.yml",
+ "name": "tests/integration/targets/nxos_prefix_lists/tests/common/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5664e0d1a4c541d53f188ff988aafdf4f1802b97ff08c51fc128574ae38ce63b",
+ "chksum_sha256": "2233813d83a2cf367f99e9348cfb36ea295efcebe61d310a4580abbab8836d5c",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_nxapi",
+ "name": "tests/integration/targets/prepare_nxos_tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_nxapi/tasks",
+ "name": "tests/integration/targets/prepare_nxos_tests/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_nxapi/tasks/nxapi.yaml",
+ "name": "tests/integration/targets/prepare_nxos_tests/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7022927c86a437ced8d1f9058b25af83150ab1d87223183b1c61bbf4c0d6523f",
+ "chksum_sha256": "8d49ed36175f83090c361ca918f66c751d9a55d3e57ed4097366dda3f04434ff",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_nxapi/tasks/main.yaml",
+ "name": "tests/integration/targets/prepare_nxos_tests/tasks/prepare.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
+ "chksum_sha256": "6dc1745aa3d09766233e4522d935898ecfdf07caf0b7d2a3ab7e20e40bbdc4a5",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_nxapi/tasks/cli.yaml",
+ "name": "tests/integration/targets/prepare_nxos_tests/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/prepare_nxos_tests/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
+ "chksum_sha256": "851860fe2ed1258710d7fcf89ac5b7d8c3c87755e89ca56fdd79bea022eb2b92",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_nxapi/tasks/platform",
+ "name": "tests/integration/targets/nxos_rollback",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n7k",
+ "name": "tests/integration/targets/nxos_rollback/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n7k/assert_changes_https.yaml",
+ "name": "tests/integration/targets/nxos_rollback/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d826b7762b3ab39ad7d294ca171272d1ff3213c35f8040c3657228f259d331d5",
+ "chksum_sha256": "1e03994e82f05167e558b19e20c435e80ed92b6ff4f62f71fb93ed9082d30f94",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n7k/assert_changes_https_http.yaml",
+ "name": "tests/integration/targets/nxos_rollback/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "97089a108cc1eac9afae028c6da9bf6f7017afcfc3f1a85776cfe6af31f2c6af",
+ "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n7k/assert_changes_http.yaml",
+ "name": "tests/integration/targets/nxos_rollback/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "35222b27a54a701db0042dd5fb6069d48d9e27a70821a1707a4aad0d19bc227f",
+ "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n7k/assert_changes_https_http_ports.yaml",
+ "name": "tests/integration/targets/nxos_rollback/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/nxos_rollback/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5d5a7bc39789b15cf95dd49af7ab1636f3a4589a2be3ee5ca341dbb4414eb95b",
+ "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n5k",
+ "name": "tests/integration/targets/nxos_rollback/defaults",
"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_rollback/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4f99598e0507cfb4e0e625a4075deabb91c5de5e1c0e5531846b9467a6faeaa9",
+ "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n5k/assert_changes_https_http.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "79ee713da7a48ad0b493f6e07690138be3eb4d04d890126aec488e2242e7a442",
+ "name": "tests/integration/targets/nxos_rollback/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n5k/assert_changes_http.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ed763ee2de2c730ea2783225dc132f5c28f22ea272213a36b9b3bb4471492e08",
+ "name": "tests/integration/targets/nxos_rollback/tests/common",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n5k/assert_changes_https_http_ports.yaml",
+ "name": "tests/integration/targets/nxos_rollback/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3cef9d277e717f6956a9d5136862c72616d866eb04d8f8c0da44c0777739c92c",
+ "chksum_sha256": "394570f3e6f1edf503b6782dd89ffa589499a778fc5336c8c610b01d473a7bb8",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_nxapi/tasks/platform/default",
+ "name": "tests/integration/targets/nxos_system",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_nxapi/tasks/platform/default/assert_changes_https.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "bfae052c7df36024a59df89f314dc7e03019ad1649f4132cb34bb2a8f50fe903",
+ "name": "tests/integration/targets/nxos_system/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_nxapi/tasks/platform/default/assert_changes_https_http.yaml",
+ "name": "tests/integration/targets/nxos_system/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b055af4a4779d412640cee585ef493e52c3937782e095218164d2719d5223d29",
+ "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_nxapi/tasks/platform/default/assert_changes_http.yaml",
+ "name": "tests/integration/targets/nxos_system/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "db4865169c3dc97c5ca5e24083550b243b685cfaeaaba16333b1f55754dd265a",
+ "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_nxapi/tasks/platform/default/assert_changes_https_http_ports.yaml",
+ "name": "tests/integration/targets/nxos_system/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "04e8b8ae8842f40c777282e979ea824c7c886f3e8ae1d9e2710ff466d1fc2ae0",
+ "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_nxapi/meta",
+ "name": "tests/integration/targets/nxos_system/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_nxapi/meta/main.yml",
+ "name": "tests/integration/targets/nxos_system/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_nxapi/defaults",
+ "name": "tests/integration/targets/nxos_system/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_nxapi/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_system/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_nxapi/tests",
+ "name": "tests/integration/targets/nxos_system/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_nxapi/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_nxapi/tests/cli/nxapi_ssl.yaml",
+ "name": "tests/integration/targets/nxos_system/tests/nxapi/set_domain_name.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dae84b45affca730b7c9158216bf18dc9ab9c92bbce4701b6ba881f192ae47f4",
+ "chksum_sha256": "c3c9fe4f41326a05c53fb03a14ab15d9aca59b0cd5276ca5e28b7c7b7e24e1a5",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_nxapi/tests/cli/enable.yaml",
+ "name": "tests/integration/targets/nxos_system/tests/nxapi/set_domain_list.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "abdd34478d7db89533c9d3d8cc0fb2f26a5324ab85212086aa1fecc220e7d1c8",
+ "chksum_sha256": "4f58661081e4b16a1b96f55d176abaa163d8eeb2d530a96420da6d15de4bb0ac",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_nxapi/tests/cli/configure.yaml",
+ "name": "tests/integration/targets/nxos_system/tests/nxapi/set_name_servers.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b4853e02af108065809baebdb1f8e957bc48184f9a24e3510826d28f734d17a6",
+ "chksum_sha256": "bbee414220275ff9a13a61bb40c3f4aa127cf63ebb07221abf01f8995b22b252",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_nxapi/tests/cli/disable.yaml",
+ "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/cli/set_domain_name.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "94889efb465f8b55120a28becc23705cd11dc1bc9aebc91204105ba9f8207302",
+ "chksum_sha256": "fa3289fe04fe5f8a8259ca69cee34e575e690589e3c4b5a1e8ade6a724c81246",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_nxapi/tests/nxapi",
+ "name": "tests/integration/targets/nxos_system/tests/cli/set_domain_list.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "494d4bd1f0afc278a5422adec3684980a21807274f3887cc64743335104fc95f",
+ "format": 1
+ },
+ {
+ "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/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_nxapi/tests/nxapi/badtransport.yaml",
+ "name": "tests/integration/targets/nxos_system/tests/common/set_hostname.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "28a2dfdf7ba13f8dd757c8d9095797a0b91437b5bfd9d9c1c8bfe65508e15901",
+ "chksum_sha256": "1f80d47b8482b052d64571ffd74d3e08219c8180e0bdfd38785cbdcb80b4dc01",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_reboot",
+ "name": "tests/integration/targets/nxos_system/tests/common/sanity.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e76a24280e763ab2423dbd4062e39dd0c4b54131b361582bc4de92183c9fe32f",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/nxos_feature",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_reboot/tasks",
+ "name": "tests/integration/targets/nxos_feature/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_feature/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b93ca9bd41e9b2ddb1e47c5782c7104ad85b67441154a82ac8954fdaebc62cfc",
+ "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_reboot/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_feature/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_feature/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_feature/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_feature/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_feature/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_feature/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_feature/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_reboot/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_reboot/tests/common/sanity.yaml",
+ "name": "tests/integration/targets/nxos_feature/tests/common/invalid.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b4c67bb49d21e284b5a0589f01582abe664f16d3361279b26463e6db76fd2425",
+ "chksum_sha256": "9876fc00630984bf3f7c6a0ce6e7a75b67d4c2dc198fe91c2d4dcaef40fec816",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_system",
+ "name": "tests/integration/targets/nxos_feature/tests/common/configure.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "89d6028b9ede5f5589b6786b029044d9cdf739f164d0a593ecacb564588acfe5",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/nxos_vrf_interface",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_system/tasks",
+ "name": "tests/integration/targets/nxos_vrf_interface/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_system/tasks/nxapi.yaml",
+ "name": "tests/integration/targets/nxos_vrf_interface/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_system/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_vrf_interface/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
+ "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_system/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_vrf_interface/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_system/meta",
+ "name": "tests/integration/targets/nxos_vrf_interface/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_system/meta/main.yml",
+ "name": "tests/integration/targets/nxos_vrf_interface/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_system/defaults",
+ "name": "tests/integration/targets/nxos_vrf_interface/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_system/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_vrf_interface/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_system/tests",
+ "name": "tests/integration/targets/nxos_vrf_interface/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_system/tests/cli",
+ "name": "tests/integration/targets/nxos_vrf_interface/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_system/tests/cli/set_domain_name.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "fa3289fe04fe5f8a8259ca69cee34e575e690589e3c4b5a1e8ade6a724c81246",
- "format": 1
- },
- {
- "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/cli/set_domain_list.yaml",
+ "name": "tests/integration/targets/nxos_vrf_interface/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "494d4bd1f0afc278a5422adec3684980a21807274f3887cc64743335104fc95f",
+ "chksum_sha256": "7f97e455b1bd40d8c37f4c473ba8a86d18cb742022dface71269898bcf9d6594",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_system/tests/common",
+ "name": "tests/integration/targets/nxos_bgp_address_family",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_system/tests/common/sanity.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e76a24280e763ab2423dbd4062e39dd0c4b54131b361582bc4de92183c9fe32f",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_system/tests/common/set_hostname.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1f80d47b8482b052d64571ffd74d3e08219c8180e0bdfd38785cbdcb80b4dc01",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_system/tests/nxapi",
+ "name": "tests/integration/targets/nxos_bgp_address_family/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_system/tests/nxapi/set_domain_name.yaml",
+ "name": "tests/integration/targets/nxos_bgp_address_family/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c3c9fe4f41326a05c53fb03a14ab15d9aca59b0cd5276ca5e28b7c7b7e24e1a5",
+ "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_system/tests/nxapi/set_name_servers.yaml",
+ "name": "tests/integration/targets/nxos_bgp_address_family/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bbee414220275ff9a13a61bb40c3f4aa127cf63ebb07221abf01f8995b22b252",
+ "chksum_sha256": "918e266fd84500fc8a9d7958437789683bd47b7875371afaf4941b60f4594bc7",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_system/tests/nxapi/set_domain_list.yaml",
+ "name": "tests/integration/targets/nxos_bgp_address_family/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4f58661081e4b16a1b96f55d176abaa163d8eeb2d530a96420da6d15de4bb0ac",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_interfaces",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_interfaces/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_interfaces/tasks/nxapi.yaml",
+ "name": "tests/integration/targets/nxos_bgp_address_family/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201",
+ "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_interfaces/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "64ca5b4de950cd0d788bdd92389f7741e663d949ee6b0e343f1038c573564b64",
+ "name": "tests/integration/targets/nxos_bgp_address_family/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_interfaces/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_bgp_address_family/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245",
+ "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_interfaces/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_interfaces/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_interfaces/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_interfaces/defaults/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_interfaces/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_interfaces/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_interfaces/tests/common/_remove_config.yaml",
+ "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a639b04de3b8a2a70660b4034c291526f9e1f4bee9e24e4e543bd719a4f65a50",
+ "chksum_sha256": "f6189829f4b10872e4553b8c55db04c742cca9c7598d067ddb3eea05e0ab2f0d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_interfaces/tests/common/deleted.yaml",
+ "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d5ba532156bd9771e2ec35bb085d404ed049b88e1da827ab9eb6d4dd38a3c871",
+ "chksum_sha256": "29d4c709454554edeef9e3a0e394a93ff71200d5ae09e04d855d8edcedc24549",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_interfaces/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3f875bd8877a898338a0402b34179ad17f45b84d1623c72741490f52913eb064",
+ "chksum_sha256": "a6f21fe892ff7e532f40e0d7ecb6bba83f26bb1765ac4177b453d85f896dc633",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_interfaces/tests/common/empty_config.yaml",
+ "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c5a2d4d2fa3245673307a06eb29fd3b751fad50fde2dac24f84aaff5498a5af7",
+ "chksum_sha256": "e76deb0ccd6d015af64ec4b54fc1da88ccf401b0aa373bda8d4cfabd23b9b1d9",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_interfaces/tests/common/rtt.yaml",
+ "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0eb7659a55ab72845d72bf76bcac9618bf84c8d5d55c6fa8f04ff9c15c68a92a",
+ "chksum_sha256": "0a2cbefd9d104a0f9e0370a13ed7e87feb1e74175d922f33d786e604e775a498",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_interfaces/tests/common/merged.yaml",
+ "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "49898e976fb440f5b1ebc404e489b6e2511049c950c8c0d8fe75e251dc5c3671",
+ "chksum_sha256": "ba2591fcb1bd54b023d7d45818463cb4d7efb6c7a918133129505ab24d3c9b7d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_interfaces/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "52f0f66116a7b07a9bfd39bcc2cdabc5a2db68ed24d92751f3f53f08332f0ed0",
+ "chksum_sha256": "c07047642c717ad5e564697143a11e7cc93a18376d91ee56dc5f44f3d19e22b5",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_interfaces/tests/common/_populate_config.yaml",
+ "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eb7918401f281cb2d25ccebc214ac1fd9ae10975f3ca4f77f56a53f3cc485a40",
+ "chksum_sha256": "0aefe84d03b67ec239027816ac3522c7b7cfabac56bd979c781c74cab4b01955",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_interfaces/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c8d1e0d8e50dd46dc84c73912990ffca760b0f5e1a8ad8ab2f10a90bce902369",
+ "chksum_sha256": "fed0782bb5669d310ba18f8a49c51be3b1c8b16b0951f388e2280ed4a1769b50",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_interfaces/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e26569250511575d31ea2338e2abede7fda11240bd583ac7896adccb24abd7f2",
+ "chksum_sha256": "7121942f388ee7ab8d2484101d1a980b1d666be25f8388c6f00438f36a99736d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_interfaces/tests/common/purged.yaml",
+ "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "832b01df3053b44b5e69f7b1e62fede8df0291af913f7b4abd1d4545439ef718",
+ "chksum_sha256": "4ad5b3d3c16b81ea4fcf40639099f5191577136f0cf3ff4970ed630d8248ec66",
"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_lacp_interfaces",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_interfaces/vars",
+ "name": "tests/integration/targets/nxos_lacp_interfaces/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_interfaces/vars/main.yml",
+ "name": "tests/integration/targets/nxos_lacp_interfaces/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c7aa68e2e8b3bb1d6b4258ed279670b1a8e5fc5e6a63b446eab511c3963db1c1",
+ "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
"format": 1
},
{
- "name": "tests/integration/targets/prepare_nxos_tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_lacp_interfaces/tasks/main.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c0ff0c24a2fb4a8aa58a6356c5029065acb6cf1aba1e14add135ff69c8d1387b",
"format": 1
},
{
- "name": "tests/integration/targets/prepare_nxos_tests/tasks",
+ "name": "tests/integration/targets/nxos_lacp_interfaces/tasks/cli.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/nxos_lacp_interfaces/meta",
"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_lacp_interfaces/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8d49ed36175f83090c361ca918f66c751d9a55d3e57ed4097366dda3f04434ff",
+ "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
"format": 1
},
{
- "name": "tests/integration/targets/prepare_nxos_tests/tasks/prepare.yml",
+ "name": "tests/integration/targets/nxos_lacp_interfaces/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/nxos_lacp_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6dc1745aa3d09766233e4522d935898ecfdf07caf0b7d2a3ab7e20e40bbdc4a5",
+ "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
"format": 1
},
{
- "name": "tests/integration/targets/prepare_nxos_tests/meta",
+ "name": "tests/integration/targets/nxos_lacp_interfaces/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/prepare_nxos_tests/meta/main.yaml",
+ "name": "tests/integration/targets/nxos_lacp_interfaces/vars/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "851860fe2ed1258710d7fcf89ac5b7d8c3c87755e89ca56fdd79bea022eb2b92",
+ "chksum_sha256": "adb8824233c88430d3737a53e2cf1a939138f4f56b1aee31f730895793eb72b2",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_aaa_server_host",
+ "name": "tests/integration/targets/nxos_lacp_interfaces/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_aaa_server_host/tasks",
+ "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common",
"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_lacp_interfaces/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
+ "chksum_sha256": "3e5be532a772bae7c777ccff5a0bd7873f6d67fd9cfc19ee1148d34381a7e6a7",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_aaa_server_host/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
+ "chksum_sha256": "7619a726b4e64d1bd47dadee8ec75a16d3b2bdc44b6d82d82bd56e38ada9c86b",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_aaa_server_host/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_aaa_server_host/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "62ca1f227ad278d7c4554e39d7368212b7004426b9c43bcc2bf1456f27e6ab98",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_aaa_server_host/meta/main.yml",
+ "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
+ "chksum_sha256": "7fba7cbbd3ce552b4dbe95b0929f2264f20fca017fd8d49dcbfcf704234fee03",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_aaa_server_host/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/overridden.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0f9f2f61c2ed959758be49bd3a688b41c8a536d857d83e57cded8dbf1b1a72b2",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_aaa_server_host/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
+ "chksum_sha256": "5ae69e8c5e516df2c81671c0360b711f53a426f7e2a4b1f7a24b422257f304a4",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_aaa_server_host/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "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_aaa_server_host/tests/common",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "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_aaa_server_host/tests/common/tacacs.yaml",
+ "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b669c11c0bee9b899cb3075b446411bac7b4fd7c79396e5add683a2d5ab8b725",
+ "chksum_sha256": "d3e63a62df68b89bd619c1bd5632735df0c735ed4fa2cd9201bd1ba31faf87e7",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_aaa_server_host/tests/common/radius.yaml",
+ "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "10dec61711d8e2e9660491a3ac36bda92ef57264b44ce2fafd5c0512b2ecfd13",
+ "chksum_sha256": "d8f3f3ddd194db7f9b22519fac0e45a4c3529b3beaf85c2f15780daaa1cac4a0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_udld_interface",
+ "name": "tests/integration/targets/nxos_vrf_af",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_udld_interface/tasks",
+ "name": "tests/integration/targets/nxos_vrf_af/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_udld_interface/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_udld_interface/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_vrf_af/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_udld_interface/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_udld_interface/meta",
+ "name": "tests/integration/targets/nxos_vrf_af/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_udld_interface/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_udld_interface/defaults",
+ "name": "tests/integration/targets/nxos_vrf_af/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_udld_interface/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_udld_interface/tests",
+ "name": "tests/integration/targets/nxos_vrf_af/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_udld_interface/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_udld_interface/tests/common/sanity.yaml",
+ "name": "tests/integration/targets/nxos_vrf_af/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3cd8d7eab5171ab6ad59ea7fd737a7de66bff01398491e83f7d3904da0c5e451",
+ "chksum_sha256": "df6d2b3a3d7a67ce3759464bf144b6a71d61afa348cfda6faea7707ab93acf21",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_pim_rp_address",
+ "name": "tests/integration/targets/nxos_snmp_user",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_pim_rp_address/tasks",
+ "name": "tests/integration/targets/nxos_snmp_user/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_snmp_user/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_snmp_user/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
+ "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_pim_rp_address/tasks/cli.yaml",
+ "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_pim_rp_address/meta",
+ "name": "tests/integration/targets/nxos_snmp_user/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_snmp_user/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_snmp_user/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_snmp_user/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_pim_rp_address/tests",
+ "name": "tests/integration/targets/nxos_snmp_user/tests",
"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_snmp_user/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_pim_rp_address/tests/common/configure.yaml",
+ "name": "tests/integration/targets/nxos_snmp_user/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5860ed215f27147987c62a8541f96530427cfadc64b6ce13e849a6785275c8ca",
+ "chksum_sha256": "cc18bce3cf7f8a257784f7d4e432ef00b535bfe73b057d661756f364bcc9d176",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vtp_domain",
+ "name": "tests/integration/targets/nxos_evpn_vni",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vtp_domain/tasks",
+ "name": "tests/integration/targets/nxos_evpn_vni/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vtp_domain/tasks/nxapi.yaml",
+ "name": "tests/integration/targets/nxos_evpn_vni/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1e03994e82f05167e558b19e20c435e80ed92b6ff4f62f71fb93ed9082d30f94",
+ "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vtp_domain/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_evpn_vni/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vtp_domain/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_evpn_vni/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vtp_domain/meta",
+ "name": "tests/integration/targets/nxos_evpn_vni/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vtp_domain/meta/main.yml",
+ "name": "tests/integration/targets/nxos_evpn_vni/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vtp_domain/defaults",
+ "name": "tests/integration/targets/nxos_evpn_vni/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vtp_domain/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_evpn_vni/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vtp_domain/tests",
+ "name": "tests/integration/targets/nxos_evpn_vni/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vtp_domain/tests/common",
+ "name": "tests/integration/targets/nxos_evpn_vni/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vtp_domain/tests/common/sanity.yaml",
+ "name": "tests/integration/targets/nxos_evpn_vni/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,
+ "chksum_sha256": "feb636a1cf337d091e427267dc9639d6fd2a5a481a9fd73cc830618990dc12af",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_install_os/tasks",
+ "name": "tests/integration/targets/nxos_vtp_version",
"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",
+ "name": "tests/integration/targets/nxos_vtp_version/tasks",
"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",
+ "name": "tests/integration/targets/nxos_vtp_version/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d7225266ebf0be4737420a6d63a5cd3c77d3b6cfde7bd0f1c7eded1ebfad70b7",
+ "chksum_sha256": "1e03994e82f05167e558b19e20c435e80ed92b6ff4f62f71fb93ed9082d30f94",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_install_os/tasks/upgrade/clear_persistent_sockets.yaml",
+ "name": "tests/integration/targets/nxos_vtp_version/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2fcf3f5178da21851bf3cd61610f645b242d841bb553acc94fa88c003c8849e5",
+ "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_install_os/tasks/httpapi.yaml",
+ "name": "tests/integration/targets/nxos_vtp_version/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1c9ccfa8d43479520eb4cffae188c452027a694dd86a02bd92d31b5843301ad5",
+ "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_install_os/meta",
+ "name": "tests/integration/targets/nxos_vtp_version/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_install_os/meta/main.yml",
+ "name": "tests/integration/targets/nxos_vtp_version/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "efb275d54a7c21fd007e1d1c8b10b65d148a9121af425a4e7fbd60abacd23fc8",
+ "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_install_os/defaults",
+ "name": "tests/integration/targets/nxos_vtp_version/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_install_os/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_vtp_version/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a79b77c93a1982c2682c177681bfcef5f3fb3421e3ef10be452fc81dc3ce8871",
+ "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_install_os/tests",
+ "name": "tests/integration/targets/nxos_vtp_version/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_vtp_version/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",
+ "name": "tests/integration/targets/nxos_vtp_version/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7a09f37097e9dbedf717f83715339eb5397073ac3909bfd0cae6f874d3cd6342",
+ "chksum_sha256": "e33039720ba0e6ccc73fe5d38aaa4c2d1284afbb89058f6fe98c1a09d2a30638",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n7k_atherton.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f72c407c1bedf043f2a763f9db8de4c28cb40cd3f55a99180c0b54f46bc9910c",
+ "name": "tests/integration/targets/nxos_ospfv2",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n5k_730_N11.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "744e3327618fd03cced8667aa2dee9cd691c358777ecb1dc741abf3c8dc18484",
+ "name": "tests/integration/targets/nxos_ospfv2/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n3172_u63a.yaml",
+ "name": "tests/integration/targets/nxos_ospfv2/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c37931cb7c45570fe30f100fb278e26b7b94b7848d59ad8b6dbdda0670534452",
+ "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n9k_hamilton.yaml",
+ "name": "tests/integration/targets/nxos_ospfv2/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "669ba59d9d909f0d42d6e69ae0ef3e6e1d4c33995a4658761f0b2884113cc041",
+ "chksum_sha256": "7826463ba77fb2f0f2bb32a0e02ce314ce3a06762e189598970cc26dd17828b1",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n35_greensboro.yaml",
+ "name": "tests/integration/targets/nxos_ospfv2/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bf8414d8d1327c0db9056739e1b39b673abe37e939356efd1ef96ade985ccffc",
+ "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n9k_greensboro_force.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "13e87f23b456e285da0593775bfe2b876d167922ce61a4ba47a668cb0b0d82bb",
+ "name": "tests/integration/targets/nxos_ospfv2/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade.yaml",
+ "name": "tests/integration/targets/nxos_ospfv2/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ee3909a9cbc7c9f42f3b146f122a61bdc2adada843b80ee111fe024dfa5c0d33",
+ "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n35_62a88.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c041886e29ede3a58d17f0e6d281d5dd458095369130bed0e617ffb200824743",
+ "name": "tests/integration/targets/nxos_ospfv2/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n7k_helsinki.yaml",
+ "name": "tests/integration/targets/nxos_ospfv2/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c023ec2f8677adcd41bd418bb5e35d3c82dc0636d9d41c45a2074b32891214be",
+ "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n3172_u61a.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "147279cb89618d50352ab1e86d4e939a3f3e0594cf28aec862eb867e1bdfc307",
+ "name": "tests/integration/targets/nxos_ospfv2/vars",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n3172_u62a.yaml",
+ "name": "tests/integration/targets/nxos_ospfv2/vars/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9ee1eb9e5b4f1fea2c930c8a7c48eaf4708576b9af88c29f280f3dabcec163fb",
+ "chksum_sha256": "61311d9ddd2174a10efead34de8526412e4c4d438600cf5a3ff852ec8692c4f6",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n5k_733_N11.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7efa46e2021391e0fc9114f1b132861cd3614b7ec0064425b46ed876c81ea0f1",
+ "name": "tests/integration/targets/nxos_ospfv2/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_aaa_server",
+ "name": "tests/integration/targets/nxos_ospfv2/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_aaa_server/tasks",
+ "name": "tests/integration/targets/nxos_ospfv2/tests/common/fixtures",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_aaa_server/tasks/nxapi.yaml",
+ "name": "tests/integration/targets/nxos_ospfv2/tests/common/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
+ "chksum_sha256": "4ad11ae9e094b6bc2d4286b05967979551104857b314aa8af9afee18cdec2d4a",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_aaa_server/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_ospfv2/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
+ "chksum_sha256": "b1738278980bd3d3426805bcd85053668078a6b992627d9119043bc29161ea8e",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_aaa_server/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_ospfv2/tests/common/merged.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": "ddfff25fc88c57f108a7ed89d11d6df5c2233b27eac626512dc63709325fcf85",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_aaa_server/meta/main.yml",
+ "name": "tests/integration/targets/nxos_ospfv2/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
+ "chksum_sha256": "69ef5f767607840c90b3cb9b80ca6eae206df8ec8a48b850dc47adbcf4b11aa5",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_aaa_server/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_ospfv2/tests/common/replaced.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7a00b8609854d6a88cc33f870793ec8972cd5d81ae8dcfed33fbbca19938ce69",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_aaa_server/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_ospfv2/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
+ "chksum_sha256": "de58bef72adb70191cc8d212367d3332359130dbaf399807962787d1df375915",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_aaa_server/tests",
- "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_aaa_server/tests/common",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_ospfv2/tests/common/gathered.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b8b689385d369d30980492e63bb16f13719d27452d738494899f85539130b2b5",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_aaa_server/tests/common/tacacs.yaml",
+ "name": "tests/integration/targets/nxos_ospfv2/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "309cf43dacad631085bfede9a52ee2e7bdb4763488463bfb96dde11184bbe0fc",
+ "chksum_sha256": "77ed312700fb0471e6e108949f8b983d6c418f0187b84b569551ce3c8205ce0c",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_aaa_server/tests/common/radius.yaml",
+ "name": "tests/integration/targets/nxos_ospfv2/tests/common/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "08fe50e81078371eff5d9482f9b7721eb6fd1288ccc88f11b8b42f94270df4ef",
+ "chksum_sha256": "0a3077084e8ed39aae3bc10055bbff711e7d40af65e514c7ecd99bffaad96bfc",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_auth",
+ "name": "tests/integration/targets/nxos_bfd_global",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_auth/tasks",
+ "name": "tests/integration/targets/nxos_bfd_global/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_bfd_global/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_bfd_global/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ntp_auth/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_ntp_auth/meta",
+ "name": "tests/integration/targets/nxos_bfd_global/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_bfd_global/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_bfd_global/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_bfd_global/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_bfd_global/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_bfd_global/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_bfd_global/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8e17189f259b91c17e7264d272ac181275b6b550180c1703b6c97e7dd4ed5b46",
+ "chksum_sha256": "302caab98adbe8644dc6652426b6e9300fc4d8fbc1a479ee7aeaf54d6a23da59",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp_interfaces",
+ "name": "tests/integration/targets/nxos_l2_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp_interfaces/tasks",
+ "name": "tests/integration/targets/nxos_l2_interfaces/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_l2_interfaces/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
+ "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp_interfaces/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_l2_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "c0ff0c24a2fb4a8aa58a6356c5029065acb6cf1aba1e14add135ff69c8d1387b",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp_interfaces/tasks/cli.yaml",
+ "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_lacp_interfaces/meta",
+ "name": "tests/integration/targets/nxos_l2_interfaces/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_l2_interfaces/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_l2_interfaces/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_l2_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp_interfaces/tests",
+ "name": "tests/integration/targets/nxos_l2_interfaces/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common",
+ "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_lacp_interfaces/tests/common/_remove_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5ae69e8c5e516df2c81671c0360b711f53a426f7e2a4b1f7a24b422257f304a4",
+ "name": "tests/integration/targets/nxos_l2_interfaces/tests/common",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/deleted.yaml",
+ "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "62ca1f227ad278d7c4554e39d7368212b7004426b9c43bcc2bf1456f27e6ab98",
+ "chksum_sha256": "3c30f97c6ae729fd7b3d88a3e7b6671c761ea07061ead87487979c013835b99c",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ea101ba2a00ebe731b075245fdac99f96d8536a8dbd4b1f3f41aa0bf3863713e",
+ "chksum_sha256": "b6d84fa1c22c5e2d37b017a18ed59903fab43314717b4d632a46200d745318c0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/empty_config.yaml",
+ "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c290a62babd394680c978ea09017b67507be0351b51e46c746a874320362e8ec",
+ "chksum_sha256": "c58134a7c574f9d19d3012c238b2be0d4983d6d856a11e9f6ee089c3df5ec6b4",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/merged.yaml",
+ "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7619a726b4e64d1bd47dadee8ec75a16d3b2bdc44b6d82d82bd56e38ada9c86b",
+ "chksum_sha256": "9e1b2b7044a678c22cccca3dcc5c677fccf40a509764b7ecf5c8dfeecf4781d8",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0f9f2f61c2ed959758be49bd3a688b41c8a536d857d83e57cded8dbf1b1a72b2",
+ "chksum_sha256": "aeb7c65908e1aee314df87a9afe8c2f4dc1e1b21e41ca8a03f2991597dfd0685",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/_populate_config.yaml",
+ "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d8f3f3ddd194db7f9b22519fac0e45a4c3529b3beaf85c2f15780daaa1cac4a0",
+ "chksum_sha256": "3644170fb7b4322fa4d272cd5d5e351480018b485a065fa7131fb3f6f5e2f353",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7fba7cbbd3ce552b4dbe95b0929f2264f20fca017fd8d49dcbfcf704234fee03",
+ "chksum_sha256": "148ed76eb41828c2417439c0b443097a6f2f9d1fa88a4abad48bd8e62de30c4e",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3e5be532a772bae7c777ccff5a0bd7873f6d67fd9cfc19ee1148d34381a7e6a7",
+ "chksum_sha256": "6c1ffa21ffa7a57ae8edbb0a72820f4ec4e7947ba1ee5a1548473e81efec8724",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3e63a62df68b89bd619c1bd5632735df0c735ed4fa2cd9201bd1ba31faf87e7",
+ "chksum_sha256": "a2a0ff901006be504934a514a2f337a699091eef58ab871fb32e426af1d6f6fa",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp_interfaces/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/rendered.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f018dcb8d9a42d8930b0d10f62ed931546d66f2998aa42ce95f655d299dbb35b",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp_interfaces/vars/main.yml",
+ "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "adb8824233c88430d3737a53e2cf1a939138f4f56b1aee31f730895793eb72b2",
+ "chksum_sha256": "b9322c7dd05de65b972eb0bb02c699c4368fc68bb97dd155a05ed98dd304448f",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lag_interfaces",
+ "name": "tests/integration/targets/nxos_snapshot",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lag_interfaces/tasks",
+ "name": "tests/integration/targets/nxos_snapshot/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lag_interfaces/tasks/nxapi.yaml",
+ "name": "tests/integration/targets/nxos_snapshot/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lag_interfaces/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_snapshot/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b9647339f89f9eeca01a09cd4f31da21e0c0c2f10793ea3ea06c24fd8664046e",
+ "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lag_interfaces/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_snapshot/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245",
+ "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lag_interfaces/meta",
+ "name": "tests/integration/targets/nxos_snapshot/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lag_interfaces/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_lag_interfaces/defaults",
+ "name": "tests/integration/targets/nxos_snapshot/defaults",
"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_snapshot/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
+ "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lag_interfaces/tests",
+ "name": "tests/integration/targets/nxos_snapshot/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lag_interfaces/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_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_snapshot/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2e4441e52874693cf2caa332a4639c23ad59350a6eda4e9c5109a9792a306447",
+ "chksum_sha256": "171022870f501d3dcb8c73978ee34038cb5e65c32786bbabc9f638c9ae04be4d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/empty_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "96cae582141397682d092a6b5d6de9651b6203157e891342063c439ffb130a4d",
+ "name": "tests/integration/targets/nxos_command",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/merged.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "53c3cd45c91dd6078cf71ea7a9973d65069a61eaef47c49a51c7b66355970a63",
+ "name": "tests/integration/targets/nxos_command/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/nxos_command/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "96e1c7636b178b2ae705ac0d7dd2ea67a4d4c1aaf29122900549bde0da43b4de",
+ "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/_populate_config.yaml",
+ "name": "tests/integration/targets/nxos_command/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "76ea0558de38d30dd8813738f9d92fba9867c7d37fcb2a104acaaf5aeebb12af",
+ "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/nxos_command/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "08e830f9373a4a360949e7c56cf2c374dad94a559adbde314f3b66daa642a0c8",
+ "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/parsed.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c10b8ab6302c0df3b5d8c99d1f67a9d92b80b518250c11e650dde96bc8f6b886",
+ "name": "tests/integration/targets/nxos_command/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/nxos_command/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6eb88f454c810cee9cf1be9fc56eb6a574516fc49bddc50e81f329dc98cfb9eb",
+ "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lag_interfaces/vars",
+ "name": "tests/integration/targets/nxos_command/defaults",
"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_command/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "05455a29f1db6e4d3602a83b356d9d7353037b1ef0627d2d2943b43520af76e6",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vrf_af",
+ "name": "tests/integration/targets/nxos_command/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vrf_af/tasks",
+ "name": "tests/integration/targets/nxos_command/tests/nxapi",
"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_command/tests/nxapi/contains.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca",
+ "chksum_sha256": "5e366cc4b346ae49a4b6ffc53630caa1c99a8e85cd28c8adaf7b1bf4cdc0cf9c",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vrf_af/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_command/tests/nxapi/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8d37308cf2225418b5fab604f2b171a1aafbaa84be0c933a48ec0f153d7119ad",
+ "chksum_sha256": "54d18e3242c76aa88bc82a7a916bbdb6beff7ce3b5b70a651a821cf6c7942e79",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vrf_af/meta",
+ "name": "tests/integration/targets/nxos_command/tests/cli",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vrf_af/meta/main.yml",
+ "name": "tests/integration/targets/nxos_command/tests/cli/contains.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_vrf_af/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "ac46a36b0b073fcb691e33c0602443a2bef31fac538dd68d2c9d78edce98f1d4",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vrf_af/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_command/tests/cli/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_vrf_af/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_vrf_af/tests/common",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "41b22e35084ef1e82fe5fbe12cb7eec0591d256af60a6acdea4c26138a4b4b97",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vrf_af/tests/common/sanity.yaml",
+ "name": "tests/integration/targets/nxos_command/tests/cli/cli_command.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "df6d2b3a3d7a67ce3759464bf144b6a71d61afa348cfda6faea7707ab93acf21",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_zone_zoneset",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "c8dc21d11e5f13aacc82d1a8872ad62b00551edff6284a36a02eea970b73a9d2",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_zone_zoneset/tasks",
+ "name": "tests/integration/targets/nxos_command/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_zone_zoneset/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_command/tests/common/output.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f47853340600c1c9b76ed00695079b203ae45896e40acfac2f48e28f2ad98b40",
+ "chksum_sha256": "afc13fd26c10d41c29bd89f7b874d6c06a2636cbb434069506a9f30cb9da907a",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_zone_zoneset/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_command/tests/common/bad_operator.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
+ "chksum_sha256": "a929284d3616cf3d0ce228bff6a002588943bcf4a85f5403b519a1e46950a3b9",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_zone_zoneset/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_command/tests/common/lessthan.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "eb9067d3cfdd75f94ac2748f0742c1c61717a3798292cba7042c806fc0488fb3",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_zone_zoneset/meta/main.yml",
+ "name": "tests/integration/targets/nxos_command/tests/common/equal.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090",
+ "chksum_sha256": "78ffc32b0c96adc09c9321e1d12fbb5c91908419e857e25e4a4ac7839cc0610c",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_zone_zoneset/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_command/tests/common/greaterthanorequal.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d6f816b5c0dcbe205f7d8e6f1a773d71276fcb9874a1c4b8a0d10e4804632301",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_zone_zoneset/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_command/tests/common/invalid.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
+ "chksum_sha256": "f8d3206de3a49dfbf253bca6957a915f6fb10c3f0411f102de10841ff6094d90",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_zone_zoneset/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_command/tests/common/greaterthan.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3dde04a006eb5b001ed0f80589e92b4fdaa9a939dd4ae904cd63af915bd938f5",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_zone_zoneset/tests/common",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_command/tests/common/not_comparison_operator.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "30280c74bc0f1e1a85cafed4144bf12ba196ca4e86db30161f64b26d84951012",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_zone_zoneset/tests/common/sanity.yaml",
+ "name": "tests/integration/targets/nxos_command/tests/common/timeout.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "781a480d71c224fb90d67eba3072492ff3f2d263df13ec8c735cabec41956751",
+ "chksum_sha256": "c859bb27d5fc01d07c00c6ce3125c74666663ccd7a9b08d9cf1a1b7385115f0e",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_zone_zoneset/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_command/tests/common/lessthanorequal.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5c90dcce9d2d647a50d1c9db4248293535b7d75352ecffd152e877ab13940787",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_zone_zoneset/vars/main.yml",
+ "name": "tests/integration/targets/nxos_command/tests/common/notequal.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "97b10ee26b05c01b328d79887c41479bd2bf559184fb1df4af53645db6e109ba",
+ "chksum_sha256": "b12ffe1eb63e9b2854d5c509145508207bb471df7e881218c014a7fab0f41bb5",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_file_copy",
+ "name": "tests/integration/targets/nxos_vtp_domain",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_file_copy/tasks",
+ "name": "tests/integration/targets/nxos_vtp_domain/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_vtp_domain/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
+ "chksum_sha256": "1e03994e82f05167e558b19e20c435e80ed92b6ff4f62f71fb93ed9082d30f94",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_file_copy/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_vtp_domain/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_vtp_domain/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_vtp_domain/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_vtp_domain/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_vtp_domain/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_vtp_domain/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_file_copy/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_file_copy/tests/cli",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_file_copy/tests/cli/input_validation.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "86642c6a7b15cbac85986a618de3eea6d741cb9819a4b7896570ab07e6033a8c",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_file_copy/tests/cli/negative.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0a918d9c6433c61aea340e1c0c94ef62d409893bfe7fd1858386da4422c5e208",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_file_copy/tests/cli/sanity.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "021893730c6fa627193f1b0189476630b88aef49449b7b7e2b0516acc288231d",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_file_copy/tests/nxapi",
+ "name": "tests/integration/targets/nxos_vtp_domain/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_file_copy/tests/nxapi/badtransport.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "21427f41984508b9839c2f35a72d67fd2cf22fcd68d619118a5b5515d2268668",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_file_copy/fixtures",
+ "name": "tests/integration/targets/nxos_vtp_domain/tests/common",
"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_vtp_domain/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ef43c9adc8aeec6910b4373ba0d9fbf28048ed53ec631ab9fd6fa8ad00a8a3a0",
+ "chksum_sha256": "d5ce98107789e4105c99fef3d305b6b7099cf14b564000fe960cc6861772e803",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_evpn_global",
+ "name": "tests/integration/targets/nxos_udld_interface",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_evpn_global/tasks",
+ "name": "tests/integration/targets/nxos_udld_interface/tasks",
"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_udld_interface/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_evpn_global/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_udld_interface/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
+ "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_evpn_global/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_udld_interface/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_evpn_global/meta",
+ "name": "tests/integration/targets/nxos_udld_interface/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_evpn_global/meta/main.yml",
+ "name": "tests/integration/targets/nxos_udld_interface/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_evpn_global/defaults",
+ "name": "tests/integration/targets/nxos_udld_interface/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_evpn_global/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_udld_interface/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_evpn_global/tests",
+ "name": "tests/integration/targets/nxos_udld_interface/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_evpn_global/tests/common",
+ "name": "tests/integration/targets/nxos_udld_interface/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_evpn_global/tests/common/sanity.yaml",
+ "name": "tests/integration/targets/nxos_udld_interface/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9190f2d0dae47c3b29ebe68f89ec9e3b88f0af56af489b15624cf99c86415d9f",
+ "chksum_sha256": "3cd8d7eab5171ab6ad59ea7fd737a7de66bff01398491e83f7d3904da0c5e451",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vxlan_vtep_vni",
+ "name": "tests/integration/targets/nxos_aaa_server",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vxlan_vtep_vni/tasks",
+ "name": "tests/integration/targets/nxos_aaa_server/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_aaa_server/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_aaa_server/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_aaa_server/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_aaa_server/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_aaa_server/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_aaa_server/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_aaa_server/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_aaa_server/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_aaa_server/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vxlan_vtep_vni/tests/common/sanity.yaml",
+ "name": "tests/integration/targets/nxos_aaa_server/tests/common/tacacs.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "81ba6bdc57dba2f0adc0b293862db415cb6aea44ae3793cbb0c755ea01c073a9",
+ "chksum_sha256": "309cf43dacad631085bfede9a52ee2e7bdb4763488463bfb96dde11184bbe0fc",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vxlan_vtep_vni/tests/common/multisite.yaml",
+ "name": "tests/integration/targets/nxos_aaa_server/tests/common/radius.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7127fe8481d55865ca7043a159fb4c4a6e02423899c7143bbb548aff0f3728e4",
+ "chksum_sha256": "08fe50e81078371eff5d9482f9b7721eb6fd1288ccc88f11b8b42f94270df4ef",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_command",
+ "name": "tests/integration/targets/nxos_l3_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_command/tasks",
+ "name": "tests/integration/targets/nxos_l3_interfaces/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_command/tasks/nxapi.yaml",
+ "name": "tests/integration/targets/nxos_l3_interfaces/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
+ "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_command/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_l3_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
+ "chksum_sha256": "2418a2ada8700c06969324411c9be328b4d4ad913c6eb93fb824dff96900ff8f",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_command/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_l3_interfaces/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
+ "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_command/meta",
+ "name": "tests/integration/targets/nxos_l3_interfaces/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_command/meta/main.yml",
+ "name": "tests/integration/targets/nxos_l3_interfaces/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_command/defaults",
+ "name": "tests/integration/targets/nxos_l3_interfaces/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_command/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_l3_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
+ "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_command/tests",
+ "name": "tests/integration/targets/nxos_l3_interfaces/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_command/tests/cli",
+ "name": "tests/integration/targets/nxos_l3_interfaces/vars/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "24e5a4f2e7330b185775678aa68b4645786e83617b90d5a32fb4ff4b77b345ad",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/nxos_l3_interfaces/tests",
"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",
+ "name": "tests/integration/targets/nxos_l3_interfaces/tests/common",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_command/tests/cli/sanity.yaml",
+ "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "41b22e35084ef1e82fe5fbe12cb7eec0591d256af60a6acdea4c26138a4b4b97",
+ "chksum_sha256": "5e2abf21e437435b96d94e3a1c900ac1284a39092f3b0b1d19e8d5d7544a8424",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_command/tests/cli/cli_command.yaml",
+ "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c8dc21d11e5f13aacc82d1a8872ad62b00551edff6284a36a02eea970b73a9d2",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_command/tests/common",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "e7555ee3d0322003861d6c2d810ec490027b8d792e8800c7e9a46fab869b1c92",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_command/tests/common/lessthan.yaml",
+ "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eb9067d3cfdd75f94ac2748f0742c1c61717a3798292cba7042c806fc0488fb3",
+ "chksum_sha256": "1676a953c0e740cc280155ea76e6368fd5628556cdc0acae19e1834b40721681",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_command/tests/common/invalid.yaml",
+ "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f8d3206de3a49dfbf253bca6957a915f6fb10c3f0411f102de10841ff6094d90",
+ "chksum_sha256": "ef91b776e8c9627a55cc9759549aaa7482e0f7da4385079443b8e8f1d8d40b8c",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_command/tests/common/greaterthanorequal.yaml",
+ "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/multisite.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d6f816b5c0dcbe205f7d8e6f1a773d71276fcb9874a1c4b8a0d10e4804632301",
+ "chksum_sha256": "b0b3ebe6d2d7db422ec1a046818ce06ddf83ef9f32a9178691d732b0824b4da1",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_command/tests/common/equal.yaml",
+ "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "78ffc32b0c96adc09c9321e1d12fbb5c91908419e857e25e4a4ac7839cc0610c",
+ "chksum_sha256": "c670083adeabaa18419eea52a2297aeea81b1a5635718b95aebf3d1955f78385",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_command/tests/common/bad_operator.yaml",
+ "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a929284d3616cf3d0ce228bff6a002588943bcf4a85f5403b519a1e46950a3b9",
+ "chksum_sha256": "9dbc4efa7c9e6843b987aa6286ba0de836129c75b66249ab846fee2012fc2394",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_command/tests/common/lessthanorequal.yaml",
+ "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5c90dcce9d2d647a50d1c9db4248293535b7d75352ecffd152e877ab13940787",
+ "chksum_sha256": "d660e4e5717467104076599f04b44aca40bbe45b79eb5e5554cb1ff390feb405",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_command/tests/common/output.yaml",
+ "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "afc13fd26c10d41c29bd89f7b874d6c06a2636cbb434069506a9f30cb9da907a",
+ "chksum_sha256": "4c8ea6a0bd93a5ae1092362c88b1eb6ed13a086968841b5d68654677741714dc",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_command/tests/common/greaterthan.yaml",
+ "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3dde04a006eb5b001ed0f80589e92b4fdaa9a939dd4ae904cd63af915bd938f5",
+ "chksum_sha256": "858bc39fea4f9cedff070a248b5119124852eeb9237388ef833c414510dbf24c",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_command/tests/common/timeout.yaml",
+ "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c859bb27d5fc01d07c00c6ce3125c74666663ccd7a9b08d9cf1a1b7385115f0e",
+ "chksum_sha256": "f274f91771b34f2246ee4fa58bae6acd7fafb0ea1f1efb04ffb362cfd1678de3",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_command/tests/common/notequal.yaml",
+ "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b12ffe1eb63e9b2854d5c509145508207bb471df7e881218c014a7fab0f41bb5",
+ "chksum_sha256": "3a640fd87c6717d5876b64797f7d0092fd6673272fc5a674bde3cf5ed78e8b79",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_command/tests/common/not_comparison_operator.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "30280c74bc0f1e1a85cafed4144bf12ba196ca4e86db30161f64b26d84951012",
+ "name": "tests/integration/targets/nxos_overlay_global",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_command/tests/nxapi",
+ "name": "tests/integration/targets/nxos_overlay_global/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_command/tests/nxapi/contains.yaml",
+ "name": "tests/integration/targets/nxos_overlay_global/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5e366cc4b346ae49a4b6ffc53630caa1c99a8e85cd28c8adaf7b1bf4cdc0cf9c",
+ "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_command/tests/nxapi/sanity.yaml",
+ "name": "tests/integration/targets/nxos_overlay_global/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "54d18e3242c76aa88bc82a7a916bbdb6beff7ce3b5b70a651a821cf6c7942e79",
+ "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lldp_global",
+ "name": "tests/integration/targets/nxos_overlay_global/tasks/platform",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lldp_global/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_lldp_global/tasks/nxapi.yaml",
+ "name": "tests/integration/targets/nxos_overlay_global/tasks/platform/n7k/cleanup.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "280d285e1a9b531b25d8b880d3a032933d7135004c4658b7f1eb4872c60cc666",
+ "chksum_sha256": "6fe5dccac28d950d4f93db2d5dd8d2d53f974b51a0c07a9371165a7fd9b20585",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lldp_global/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_overlay_global/tasks/platform/n7k/setup.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
+ "chksum_sha256": "1f41e716a6ee3d52141e15b1cf8d8a62a6656066f9761e5438f18b03b64148ba",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lldp_global/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_overlay_global/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_overlay_global/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_overlay_global/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_overlay_global/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_overlay_global/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_overlay_global/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_overlay_global/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lldp_global/tests/common/parsed.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ca1cd52e0c16bb7a97f9e1aa4eb9c49600b25854f35a93b0bcfeaf3ead1e7c07",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_lldp_global/tests/common/_remove_config.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "339639545338297ee483c8e1370eeefc88356fceb240523dbbc6d8c237444982",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_lldp_global/tests/common/gathered.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e5f9f21d8529dd8144e8259391a04642355d3f3c9063db5a27472a5180d6b7dd",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_lldp_global/tests/common/merged.yml",
+ "name": "tests/integration/targets/nxos_overlay_global/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e82eb173fbdc3209c167bc096bf1665240e72b24a34f75c19ec1a3b7c5d4c8d1",
+ "chksum_sha256": "10d3d02705dac2e31ab7424914f1dc74d20c5cf799141c26ac2e47ec2c68e1b4",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lldp_global/tests/common/replaced.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a62a8ac1f40b48c56dbd06eb543897331236925608b859a758f1c91037f17455",
+ "name": "tests/integration/targets/nxos_bgp_global",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lldp_global/tests/common/deleted.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ffe0021fbc8bd39a7990267dc791d78f2571f3285efd5fd1244c68159ffca98f",
+ "name": "tests/integration/targets/nxos_bgp_global/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lldp_global/tests/common/overridden.yml",
+ "name": "tests/integration/targets/nxos_bgp_global/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8aeec5521c22e513a4e736c9b51461285abce953173508ae28fb02ecef95952a",
+ "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lldp_global/tests/common/_populate_config.yml",
+ "name": "tests/integration/targets/nxos_bgp_global/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c7bacd3b7cb077dc6895ecf350711c1bf39e18739a361f6cf514e9dd4d6355f3",
+ "chksum_sha256": "05625917ea950a0b177ebb25c692ba215e247b2f17a15309a86430a5871f5672",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lldp_global/tests/common/rendered.yml",
+ "name": "tests/integration/targets/nxos_bgp_global/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "18c1848ef28d20fffd52045955b5a54ca72aea45d5c2ff9060d8856aeeb7162a",
+ "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lldp_global/vars",
+ "name": "tests/integration/targets/nxos_bgp_global/meta",
"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_bgp_global/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ac136582618b2844cd5bb84e0aaf52f6b4e7a6ea581a0fa0ec5466e9c9c3bd68",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_bfd_global",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bfd_global/tasks",
+ "name": "tests/integration/targets/nxos_bgp_global/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "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_bfd_global/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_bgp_global/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
+ "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bfd_global/meta",
+ "name": "tests/integration/targets/nxos_bgp_global/vars",
"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_bgp_global/vars/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
+ "chksum_sha256": "5664e0d1a4c541d53f188ff988aafdf4f1802b97ff08c51fc128574ae38ce63b",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bfd_global/defaults",
+ "name": "tests/integration/targets/nxos_bgp_global/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "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_bfd_global/tests",
+ "name": "tests/integration/targets/nxos_bgp_global/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bfd_global/tests/common",
+ "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_bfd_global/tests/common/sanity.yaml",
+ "name": "tests/integration/targets/nxos_bgp_global/tests/common/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "302caab98adbe8644dc6652426b6e9300fc4d8fbc1a479ee7aeaf54d6a23da59",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_logging_global",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_logging_global/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "52efea9c016168ecd2fcd4012748fdd81f2753c77b4cd322e5628278cf36a227",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_logging_global/tasks/nxapi.yaml",
+ "name": "tests/integration/targets/nxos_bgp_global/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201",
+ "chksum_sha256": "5ad0de011701b4094ceef2432d855f96f3441d92e71e69dcd959cb05e86ba9ef",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_logging_global/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_bgp_global/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2396a1bb62aa2d673208deb59766a787971d061630b8467afa525b7fdcb2e95e",
+ "chksum_sha256": "35205173a9b4c2cdbf46f89706c24e10a7db1671892f25e7598957b6cd5424c2",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_logging_global/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_bgp_global/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_logging_global/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "bf494eb0d9629da4381465012ca762ab8ec270ac5b9270f7b2206f6e50eb2df6",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_logging_global/meta/main.yml",
+ "name": "tests/integration/targets/nxos_bgp_global/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_logging_global/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "73a38ab49a6c4f73b8e5d6b5ff301846e40a8d55b18fe61d0647b6c54cac5688",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_logging_global/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_bgp_global/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_logging_global/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "e6dc32ce625064b12bbb4bf361b4b9a56df6792af52c16d6bcda508de05bea6f",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_logging_global/tests/common",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_bgp_global/tests/common/deleted_af.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ef14541859231625e08fe2b53fbf4b8f6e64bcea02d4bb987038b915725abeab",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_logging_global/tests/common/_remove_config.yaml",
+ "name": "tests/integration/targets/nxos_bgp_global/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "619954ad3ae24e83760fb7b9f09daaf010f96020056398fe49a04001326f72c8",
+ "chksum_sha256": "c07047642c717ad5e564697143a11e7cc93a18376d91ee56dc5f44f3d19e22b5",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_logging_global/tests/common/deleted.yaml",
+ "name": "tests/integration/targets/nxos_bgp_global/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "926b1b20a7babe989cc2f1b3e34a16d08368817d3ef38d6903650a294a42cc3a",
+ "chksum_sha256": "d96baf5dc0a51ac1a75147a0591b62dd0d0429b6f48ed375f6e41e73d43a21ed",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_logging_global/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/nxos_bgp_global/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7c13b226487605fb6b6c73406c97a1972ed4c1995825124cb426d64eaac1a2ec",
+ "chksum_sha256": "b605ca79e5cc2cdb7f664f1aec94711594f2f485adfc760cbcea01b01e2b25f9",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_logging_global/tests/common/empty_config.yaml",
+ "name": "tests/integration/targets/nxos_bgp_global/tests/common/replaced_af.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b1658713d71b118aec3c1e27ae2d2453c239d56b32e3c6d816f5187796b40c7c",
+ "chksum_sha256": "bf31728c79fcf0b446ffd43fe431bc399513af80a6e363931a9f16fc611bf921",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_logging_global/tests/common/merged.yaml",
+ "name": "tests/integration/targets/nxos_bgp_global/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "82ec13620a0c096e01a22d68b13c59798667ca68d3ddbbc1be802ff3f415a562",
+ "chksum_sha256": "ff3eb25121425c6e970238566923eca969ba8f67f60e6fa8ef5c1516ca5757bd",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_logging_global/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/nxos_bgp_global/tests/common/purged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "04822e2f3237fcae131842012a520b5fde51c1fd4b381ab86aa055d7c076f867",
+ "chksum_sha256": "43b3e83056042eb41ac0a74dc11eca0c07bec178548807f56d79e5d211f75360",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_logging_global/tests/common/_populate_config.yaml",
+ "name": "tests/integration/targets/nxos_bgp_global/tests/common/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dd0584d7e6d6a3aa5942acda6002b2e13a2bd64d59ee04dc5122274268676cc8",
+ "chksum_sha256": "acd7172ee28b6a88b6f7a8a95548988e2c6ed27804288daec18676481280cb08",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_logging_global/tests/common/fixtures",
+ "name": "tests/integration/targets/nxos_file_copy",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_logging_global/tests/common/fixtures/parsed.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3a97c562338de257e93908f409c770a5439d362fcddcdb8d939dc7ff2e7002c6",
+ "name": "tests/integration/targets/nxos_file_copy/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_logging_global/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/nxos_file_copy/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dadff9821e586c3a062c7ac4b2936903359a8fc4b2f4cceeb466f558c82b52d1",
+ "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_logging_global/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/nxos_file_copy/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d952ab3ac507f65ff98eb58e380db0abe1583198f653d77beaa4e384929ad698",
+ "chksum_sha256": "f6bf1e5e97ebdee9d3da5227017b650cf6de337ae6ce68cee739acf39a32ec81",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_logging_global/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/nxos_file_copy/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b4a5f8a10bd86d7609cb6688523bc611e052260c4a06bf9cf202f33eee40a1f5",
+ "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_logging_global/vars",
+ "name": "tests/integration/targets/nxos_file_copy/fixtures",
"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_file_copy/fixtures/data.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "15f80d89c3629bea0c669753c52136268f11e94a83ba6e69411fc96ab8449457",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_vpc",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "ef43c9adc8aeec6910b4373ba0d9fbf28048ed53ec631ab9fd6fa8ad00a8a3a0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vpc/tasks",
+ "name": "tests/integration/targets/nxos_file_copy/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vpc/tasks/nxapi.yaml",
+ "name": "tests/integration/targets/nxos_file_copy/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
+ "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vpc/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca",
+ "name": "tests/integration/targets/nxos_file_copy/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vpc/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_file_copy/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
+ "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vpc/meta",
+ "name": "tests/integration/targets/nxos_file_copy/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vpc/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_file_copy/tests/nxapi",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vpc/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_file_copy/tests/nxapi/badtransport.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
+ "chksum_sha256": "21427f41984508b9839c2f35a72d67fd2cf22fcd68d619118a5b5515d2268668",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vpc/tests",
+ "name": "tests/integration/targets/nxos_file_copy/tests/cli",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vpc/tests/common",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_file_copy/tests/cli/negative.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0a918d9c6433c61aea340e1c0c94ef62d409893bfe7fd1858386da4422c5e208",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vpc/tests/common/sanity.yaml",
+ "name": "tests/integration/targets/nxos_file_copy/tests/cli/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2df57c902caed23947093482590483584784db8850c51e6efe545b314895eaed",
+ "chksum_sha256": "25a997ce10f97d08a348b04eb8e123dd4b6b7a6aaa035e5f2c45ef99f985f94c",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp",
+ "name": "tests/integration/targets/nxos_file_copy/tests/cli/input_validation.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "86642c6a7b15cbac85986a618de3eea6d741cb9819a4b7896570ab07e6033a8c",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/nxos_ospfv3",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp/tasks",
+ "name": "tests/integration/targets/nxos_ospfv3/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_ospfv3/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_ospfv3/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c0ff0c24a2fb4a8aa58a6356c5029065acb6cf1aba1e14add135ff69c8d1387b",
+ "chksum_sha256": "dd759468c5cc871fb7737ff3d8d736515fc4a391944ba48e311bd8e9cf4015bf",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_ospfv3/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_ospfv3/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_ospfv3/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_ospfv3/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_ospfv3/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_ospfv3/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp/tests/common",
+ "name": "tests/integration/targets/nxos_ospfv3/vars/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a58f6902557b2603f0814004741aba525b7a0950e5a11aa66b37c4955c16f39e",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/nxos_ospfv3/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp/tests/common/_remove_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6c963e6f41c7e38e88e7f37dd8025ee75cd3970358d2568dc84a25bf0833c221",
+ "name": "tests/integration/targets/nxos_ospfv3/tests/common",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp/tests/common/deleted.yaml",
+ "name": "tests/integration/targets/nxos_ospfv3/tests/common/fixtures",
+ "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": "5e8603749c8d553899ed39b13b3acd136e23d7bd3b09098fc55d615557712b8e",
+ "chksum_sha256": "98780d78ffa7990bb331aa22eb22a241c513c360e240824d45a7bf1de5be2ecc",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/nxos_ospfv3/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dc7919875ac197ca437f1f27d4ace434975e7b0ebc59f0b9e76779b7c13300bd",
+ "chksum_sha256": "1668f415528b25d80c75d0b7d1429ad1f2998999e48a9c1103c194437b8d53c6",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp/tests/common/empty_config.yaml",
+ "name": "tests/integration/targets/nxos_ospfv3/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d05b5fe9f03352e3b8f7827b2dcf181df0e3c72fe956593e4da447c9d4f8869c",
+ "chksum_sha256": "3351bbfbf0d6d47b6d974a6520e49d2c2e37fe82c909425bc2b35fbd2a1c3619",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp/tests/common/merged.yaml",
+ "name": "tests/integration/targets/nxos_ospfv3/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d7f405af0ba053d9e613e791943bc8133e6dbf994db877e876b7dbfcfead68cb",
+ "chksum_sha256": "dd6501583c6d35a54f84e67f7a3c089c3d327af513f2843227d760ec81b09f26",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/nxos_ospfv3/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c6245af2941f9a747ea7774bdad73686d4d453173680ea526ab20b52dba2f283",
+ "chksum_sha256": "c47c9c8159c406510ed5c37a849752430af675f5f74b2dee2d4361c5a4647ada",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp/tests/common/_populate_config.yaml",
+ "name": "tests/integration/targets/nxos_ospfv3/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a10bac016859ecead883b3a70c3eb13f70718ad9cdd2796b92294bb73bbee29d",
+ "chksum_sha256": "d97a097d36258f90bedf8acd4609bba2c4840b38c56f3cd6517e9fc394600f61",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/nxos_ospfv3/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "546c7e8f53d5167a0c5fb320ccd6b5e7db098829ce47de467b2e20856dd402c2",
+ "chksum_sha256": "6e1cddebab71b07ac4b62257a57ee91bb813c2d2a627f21fd1ddc848c5c71242",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/nxos_ospfv3/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "82e18104dcb23f633ded1a694fa4ecbf1df4e14a09620d260473341a8920698a",
+ "chksum_sha256": "52b75fde8bd0aeae9fa656b94f228d66f550904e311166923cfbd6ad3504ec3b",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/nxos_ospfv3/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b9a08d012138636068569151cf4f74205676ea00cc6fccdc2e2627447110156c",
+ "chksum_sha256": "fbe1d547c87e7fce94633ac9d2659cf83c9f705225abd47e025752589adf5206",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_ospfv3/tests/common/rendered.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fdb04181004019fce7d2aa47598c99683fa0c17efda91a40679e647ae1080926",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lacp/vars/main.yml",
+ "name": "tests/integration/targets/nxos_ospfv3/tests/common/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d990ef6f460be1be57ee33ce95b7fd66d05175e93e1e2716cce708d420a5d466",
+ "chksum_sha256": "cef0853f045225f3cfd3ac7b2362e20d12372005f8a175b973e60fa22c30e3b0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_banner",
+ "name": "tests/integration/targets/nxos_vxlan_vtep_vni",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_banner/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_banner/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_banner/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_vxlan_vtep_vni/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c35d2ac52b14846e9fb2bba91ef7ba5f946b1cd2e47ed10c0b30941d6f9de766",
+ "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_banner/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_banner/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_banner/meta/main.yaml",
+ "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_banner/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_banner/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_vxlan_vtep_vni/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_vxlan_vtep_vni/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_banner/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_banner/tests/common/sanity.yaml",
+ "name": "tests/integration/targets/nxos_vxlan_vtep_vni/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dcccaebec31acf1f9adfe71c2e5067fcb6c1416a7c63b077490beedfff6078ca",
+ "chksum_sha256": "81ba6bdc57dba2f0adc0b293862db415cb6aea44ae3793cbb0c755ea01c073a9",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vtp_version",
+ "name": "tests/integration/targets/nxos_vxlan_vtep_vni/tests/common/multisite.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7127fe8481d55865ca7043a159fb4c4a6e02423899c7143bbb548aff0f3728e4",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/nxos_pim_rp_address",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vtp_version/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_vtp_version/tasks/nxapi.yaml",
+ "name": "tests/integration/targets/nxos_pim_rp_address/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1e03994e82f05167e558b19e20c435e80ed92b6ff4f62f71fb93ed9082d30f94",
+ "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vtp_version/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_vtp_version/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_vtp_version/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_vtp_version/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_vtp_version/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_vtp_version/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_vtp_version/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_vtp_version/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_vtp_version/tests/common/sanity.yaml",
+ "name": "tests/integration/targets/nxos_pim_rp_address/tests/common/configure.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e33039720ba0e6ccc73fe5d38aaa4c2d1284afbb89058f6fe98c1a09d2a30638",
+ "chksum_sha256": "5860ed215f27147987c62a8541f96530427cfadc64b6ce13e849a6785275c8ca",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_facts",
+ "name": "tests/integration/targets/nxos_rpm",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_facts/tasks",
+ "name": "tests/integration/targets/nxos_rpm/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_facts/tasks/nxapi.yaml",
+ "name": "tests/integration/targets/nxos_rpm/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
+ "chksum_sha256": "1e03994e82f05167e558b19e20c435e80ed92b6ff4f62f71fb93ed9082d30f94",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_facts/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_rpm/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_facts/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_rpm/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_facts/meta",
+ "name": "tests/integration/targets/nxos_rpm/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_facts/meta/main.yml",
+ "name": "tests/integration/targets/nxos_rpm/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_facts/defaults",
+ "name": "tests/integration/targets/nxos_rpm/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_facts/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_rpm/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_facts/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_facts/tests/common",
+ "name": "tests/integration/targets/nxos_rpm/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_facts/tests/common/not_hardware.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "933c388db57e0042a75290223a48d69efad1e524bce14f28f64694d34e3475e3",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_facts/tests/common/default_facts.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "08c3680a5a839d8e3b53515643f3773bb1d25de670124063d41ff3e0a7fd2713",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_facts/tests/common/invalid_subset.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d7ef14aa0d9ae451bba34e5fb2952f2034793f826a441cd042b03c34e0d78422",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_facts/tests/common/all_facts.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f737c75bd85a50361bfb755799335e3bf0044448e43308c6f4c3f9186a80b65f",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_facts/tests/common/sanity.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f15ccd5a6a25f5358288fb8ddb955a1b024c33c0d1f04df3811e03aabe460c32",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_facts/vars",
+ "name": "tests/integration/targets/nxos_rpm/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_facts/vars/main.yml",
+ "name": "tests/integration/targets/nxos_rpm/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "90b4146d19a8448ba711a28645cf964f8251d544bf1de77f552e08a1e60a9914",
+ "chksum_sha256": "70447866be2605ad11b7abd82e4ae0000992bbdb0d143e90b86c0b4905ba1d19",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_feature",
+ "name": "tests/integration/targets/nxos_gir",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_feature/tasks",
+ "name": "tests/integration/targets/nxos_gir/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_gir/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_feature/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_gir/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_feature/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_gir/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_gir/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_gir/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_gir/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_gir/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_gir/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_feature/tests/common",
+ "name": "tests/integration/targets/nxos_gir/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_feature/tests/common/invalid.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9876fc00630984bf3f7c6a0ce6e7a75b67d4c2dc198fe91c2d4dcaef40fec816",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_feature/tests/common/configure.yaml",
+ "name": "tests/integration/targets/nxos_gir/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "89d6028b9ede5f5589b6786b029044d9cdf739f164d0a593ecacb564588acfe5",
+ "chksum_sha256": "13582ac62b7614778bc62c5a6f93a36a920e8664812b73a2b0903af35c2fe1da",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_evpn_vni",
+ "name": "tests/integration/targets/nxos_igmp",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_evpn_vni/tasks",
+ "name": "tests/integration/targets/nxos_igmp/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_igmp/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_igmp/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_igmp/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_igmp/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_igmp/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_igmp/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_igmp/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_igmp/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_igmp/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_igmp/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "feb636a1cf337d091e427267dc9639d6fd2a5a481a9fd73cc830618990dc12af",
+ "chksum_sha256": "e3f3aa30512b55460b5e6c82887f66d7642c56b86c7eabd5801148a945ce2ef4",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospfv2",
+ "name": "tests/integration/targets/nxos_ntp_global",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospfv2/tasks",
+ "name": "tests/integration/targets/nxos_ntp_global/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_ntp_global/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospfv2/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_ntp_global/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7826463ba77fb2f0f2bb32a0e02ce314ce3a06762e189598970cc26dd17828b1",
+ "chksum_sha256": "2396a1bb62aa2d673208deb59766a787971d061630b8467afa525b7fdcb2e95e",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospfv2/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_ntp_global/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospfv2/meta",
+ "name": "tests/integration/targets/nxos_ntp_global/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_ntp_global/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_ntp_global/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_ntp_global/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospfv2/tests",
+ "name": "tests/integration/targets/nxos_ntp_global/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospfv2/tests/common",
+ "name": "tests/integration/targets/nxos_ntp_global/vars/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2c37457ec8af62c1519304e787a4e2ca6be4c156f8cf7bc2293106f38aaa2957",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/nxos_ntp_global/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospfv2/tests/common/_remove_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c5bb202379b75e7aaffb216dd2e42b234acf1ab4fc0679f470fc01c67b309b27",
+ "name": "tests/integration/targets/nxos_ntp_global/tests/common",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"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_ntp_global/tests/common/fixtures",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospfv2/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/nxos_ntp_global/tests/common/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b8b689385d369d30980492e63bb16f13719d27452d738494899f85539130b2b5",
+ "chksum_sha256": "f7771e974db6ccc58fcb0a69ff17e00e208d57c09d96c7b8dfe8f5ecae8c879b",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospfv2/tests/common/merged.yaml",
+ "name": "tests/integration/targets/nxos_ntp_global/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ddfff25fc88c57f108a7ed89d11d6df5c2233b27eac626512dc63709325fcf85",
+ "chksum_sha256": "9bcba4c729094da821fbbcce077fce21c817d1f560df1dc97ede6c6ff9cc4565",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospfv2/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/nxos_ntp_global/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "de58bef72adb70191cc8d212367d3332359130dbaf399807962787d1df375915",
+ "chksum_sha256": "159d739b15a17d8f62cbb4c9dfcd2fa3b7ede51f02fa6e9ac2bde196643b60fd",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospfv2/tests/common/_populate_config.yaml",
+ "name": "tests/integration/targets/nxos_ntp_global/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0a3077084e8ed39aae3bc10055bbff711e7d40af65e514c7ecd99bffaad96bfc",
+ "chksum_sha256": "e4c2d740371ba62f8ce9a298147acad6ef15cb6b851a8ea32e7682934e5c4294",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospfv2/tests/common/fixtures",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_ntp_global/tests/common/replaced.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6b602368f7b9b4aba2e9a3e88b73abf107d658eb335fe4ce1a4cd4c0dca3a4c6",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospfv2/tests/common/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/nxos_ntp_global/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4ad11ae9e094b6bc2d4286b05967979551104857b314aa8af9afee18cdec2d4a",
+ "chksum_sha256": "1581f91ffd8c1c23bb4676eab5c8b75109777725856083ae7e8f3f2e0993b3be",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospfv2/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/nxos_ntp_global/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7a00b8609854d6a88cc33f870793ec8972cd5d81ae8dcfed33fbbca19938ce69",
+ "chksum_sha256": "2a828ee760fb0dfc1ce2906e7498216901248da978df3b7a90ce842c1041a157",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospfv2/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/nxos_ntp_global/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b1738278980bd3d3426805bcd85053668078a6b992627d9119043bc29161ea8e",
+ "chksum_sha256": "060aecc4cf5c2f2c7d5785001728b97f6913dd3900aa2dcb0c37436509d9d92e",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospfv2/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/nxos_ntp_global/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "77ed312700fb0471e6e108949f8b983d6c418f0187b84b569551ce3c8205ce0c",
+ "chksum_sha256": "f836d5207479f29e09d0669ff7c58dd23bde729eda06dce4649cdc3e60be53a9",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospfv2/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "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_ospfv2/vars/main.yml",
+ "name": "tests/integration/targets/nxos_ntp_global/tests/common/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "61311d9ddd2174a10efead34de8526412e4c4d438600cf5a3ff852ec8692c4f6",
+ "chksum_sha256": "08e70b7bf07e9f6621e1389be04c654a23a2f975aa49fc4aabc7ecb593bc5cfa",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospfv3",
+ "name": "tests/integration/targets/nxos_vrrp",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospfv3/tasks",
+ "name": "tests/integration/targets/nxos_vrrp/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_vrrp/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_vrrp/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_vrrp/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_vrrp/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_vrrp/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_vrrp/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_vrrp/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_vrrp/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospfv3/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_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_vrrp/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dd6501583c6d35a54f84e67f7a3c089c3d327af513f2843227d760ec81b09f26",
+ "chksum_sha256": "a7766c42cc22f1bb7cc7fa396978f2db1df0d1c744e3241f371f55912f3cd610",
"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_lacp",
+ "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_lacp/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_lacp/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_lacp/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d97a097d36258f90bedf8acd4609bba2c4840b38c56f3cd6517e9fc394600f61",
+ "chksum_sha256": "c0ff0c24a2fb4a8aa58a6356c5029065acb6cf1aba1e14add135ff69c8d1387b",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_ospfv3/tests/common/_populate_config.yaml",
+ "name": "tests/integration/targets/nxos_lacp/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_lacp/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_lacp/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_lacp/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_lacp/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_lacp/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_lacp/vars/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a58f6902557b2603f0814004741aba525b7a0950e5a11aa66b37c4955c16f39e",
+ "chksum_sha256": "d990ef6f460be1be57ee33ce95b7fd66d05175e93e1e2716cce708d420a5d466",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_rpm",
+ "name": "tests/integration/targets/nxos_lacp/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_rpm/tasks",
+ "name": "tests/integration/targets/nxos_lacp/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_lacp/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1e03994e82f05167e558b19e20c435e80ed92b6ff4f62f71fb93ed9082d30f94",
+ "chksum_sha256": "82e18104dcb23f633ded1a694fa4ecbf1df4e14a09620d260473341a8920698a",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_rpm/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_rpm/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_rpm/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_rpm/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_rpm/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_rpm/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_rpm/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_rpm/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_rpm/tests/common/sanity.yaml",
+ "name": "tests/integration/targets/nxos_lacp/tests/common/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "70447866be2605ad11b7abd82e4ae0000992bbdb0d143e90b86c0b4905ba1d19",
+ "chksum_sha256": "a10bac016859ecead883b3a70c3eb13f70718ad9cdd2796b92294bb73bbee29d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_server",
+ "name": "tests/integration/targets/nxos_igmp_snooping",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_server/tasks",
+ "name": "tests/integration/targets/nxos_igmp_snooping/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_igmp_snooping/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_igmp_snooping/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_igmp_snooping/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_igmp_snooping/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_igmp_snooping/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_igmp_snooping/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_igmp_snooping/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_igmp_snooping/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_igmp_snooping/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_igmp_snooping/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5e57172ca560cf57a5a6cda0d4427ef723ff0c2041494801839810d37f2dc448",
+ "chksum_sha256": "a4a73bc840e125f41372313d58b550980ef7c1642f87ba9bb8ee85d8d026ff42",
"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_gir_profile_management",
+ "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_gir_profile_management/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_gir_profile_management/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f8669a63ac0d96789d4722d662bf1568b86c5433817147820023d2b323b2c14e",
+ "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_server/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/nxos_gir_profile_management/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7fd565877939a79d2e7d7d25da2c520c9ea6d42572d5d4fc8110716dff0f961a",
+ "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_server/tests/common/_populate_config.yaml",
+ "name": "tests/integration/targets/nxos_gir_profile_management/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "af12998368091442ef220d6e85760264d3d8b49b44ab62a34598479e622d6d61",
+ "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_server/tests/common/fixtures",
+ "name": "tests/integration/targets/nxos_gir_profile_management/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",
+ "name": "tests/integration/targets/nxos_gir_profile_management/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5153443ed073b0cc035110ac96d297361e22abe390c84014d0a7dbc83ede74e4",
+ "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_server/tests/common/replaced.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f6e477bd3b8bdcdbdb4a581d99fc15745c21c823d54c364ea2b1a1fbfb43958d",
+ "name": "tests/integration/targets/nxos_gir_profile_management/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_server/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/nxos_gir_profile_management/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0a2278a138afa16699d2018af1c1e1e616a0898336bf1632352195a4d2be36ec",
+ "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_server/tests/common/rendered.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "84c00378264bacd0d235c0b7a80ebf88d754fb93b1e85b00047fac028b29275c",
+ "name": "tests/integration/targets/nxos_gir_profile_management/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_server/vars",
+ "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_snmp_server/vars/main.yml",
+ "name": "tests/integration/targets/nxos_gir_profile_management/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8668c98a492f96e42640c00cc5b31c0b73f071b7a61dac9e872c31602833ade2",
+ "chksum_sha256": "d0237be40a79468b006b7bc99f59a3b8b9227b61b780adcd94fef59ea697e6fb",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_rollback",
+ "name": "tests/integration/targets/nxos_vpc",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_rollback/tasks",
+ "name": "tests/integration/targets/nxos_vpc/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_rollback/tasks/nxapi.yaml",
+ "name": "tests/integration/targets/nxos_vpc/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1e03994e82f05167e558b19e20c435e80ed92b6ff4f62f71fb93ed9082d30f94",
+ "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_rollback/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_vpc/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
+ "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_rollback/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_vpc/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_rollback/meta",
+ "name": "tests/integration/targets/nxos_vpc/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_rollback/meta/main.yml",
+ "name": "tests/integration/targets/nxos_vpc/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_rollback/defaults",
+ "name": "tests/integration/targets/nxos_vpc/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_rollback/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_vpc/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_rollback/tests",
+ "name": "tests/integration/targets/nxos_vpc/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_rollback/tests/common",
+ "name": "tests/integration/targets/nxos_vpc/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_rollback/tests/common/sanity.yaml",
+ "name": "tests/integration/targets/nxos_vpc/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "394570f3e6f1edf503b6782dd89ffa589499a778fc5336c8c610b01d473a7bb8",
+ "chksum_sha256": "2df57c902caed23947093482590483584784db8850c51e6efe545b314895eaed",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vsan",
+ "name": "tests/integration/targets/nxos_vtp_password",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vsan/tasks",
+ "name": "tests/integration/targets/nxos_vtp_password/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_vtp_password/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_vtp_password/tasks/main.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/nxos_vtp_password/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_vtp_password/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_vtp_password/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_vtp_password/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_vtp_password/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_vtp_password/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_vtp_password/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_vtp_password/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "97b10ee26b05c01b328d79887c41479bd2bf559184fb1df4af53645db6e109ba",
+ "chksum_sha256": "3146095b01817bec07dd315c90e066bd664e16b5438d62d337a7ebfc0c48884e",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_prefix_lists",
+ "name": "tests/integration/targets/nxos_lldp_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_prefix_lists/tasks",
+ "name": "tests/integration/targets/nxos_lldp_interfaces/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_lldp_interfaces/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201",
+ "chksum_sha256": "280d285e1a9b531b25d8b880d3a032933d7135004c4658b7f1eb4872c60cc666",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_prefix_lists/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_lldp_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2396a1bb62aa2d673208deb59766a787971d061630b8467afa525b7fdcb2e95e",
+ "chksum_sha256": "c0ff0c24a2fb4a8aa58a6356c5029065acb6cf1aba1e14add135ff69c8d1387b",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_prefix_lists/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_lldp_interfaces/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245",
+ "chksum_sha256": "c57c3ff656bb8daf9febb3c7a7bff934b952d1ccb83604d93e23ccfc3ea88724",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_prefix_lists/meta",
+ "name": "tests/integration/targets/nxos_lldp_interfaces/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_lldp_interfaces/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_lldp_interfaces/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_lldp_interfaces/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_lldp_interfaces/vars",
"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",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_prefix_lists/tests/common/deleted.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8c7dfc255e4fdc2e873e375b7b4a24b1098f63ebc6f80b18ddaf4bb4e62a9a46",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_prefix_lists/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/nxos_lldp_interfaces/vars/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c10395ec2b03209c79681dd09690cb615195b8adaae1cdfa3fabc0fd68ef0565",
+ "chksum_sha256": "823ad4608bc4788ff160348fe4e6be75f267c9f2a55bf2043875eb2d76084f39",
"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_lldp_interfaces/tests",
+ "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_lldp_interfaces/tests/common",
+ "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_lldp_interfaces/tests/common/overridden.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "56599df6259a9ed56f2794f1171dba7cd811995b228ee29610d679201d7094f0",
+ "chksum_sha256": "b4403fc48624d3990b76b682c8b17543e81f43f152f1afe573bdde1722248ea1",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_prefix_lists/tests/common/.DS_Store",
+ "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/rtt.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5b8c3589c79b71429938a827331899d13ac16c156374f8c45ec59068bd2d2060",
+ "chksum_sha256": "23d20e20e06201967d2847f91f879c7741ac48c9e08bc1b9b3f63ef8c111ad29",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_prefix_lists/tests/common/_populate_config.yaml",
+ "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/rendered.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2233813d83a2cf367f99e9348cfb36ea295efcebe61d310a4580abbab8836d5c",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_prefix_lists/tests/common/fixtures",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "05a26c146d796dee090a8d9931d7f38b5cf3ea87682c7f50f73597a6cff1a4cb",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_prefix_lists/tests/common/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f7f1e53d17acf3059197aa476e1715028d571930c8cff8eabada2af3da2e7819",
+ "chksum_sha256": "303bc0ba56d6f13d152987aaf4b6953d88e4461e8958c7db467d52d247a63dce",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_prefix_lists/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/gathered.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7bf73d5bf1f98884b2c8dedfcdc762af1c6542276fc649a04bf360fe10400cff",
+ "chksum_sha256": "d559bcc46e44d101f2fa43a97d785b4476d6053486294e513a7cafbaf67b6bae",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_prefix_lists/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/merged.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "53a49d08552e563da400b6c13475d9e2a020cc039eee9985b1c5a3e930fb3843",
+ "chksum_sha256": "2399f3e2619a3b82bcf30be4b9a2be7c660d0f53450d25a46b87fd8ee4abb25b",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_prefix_lists/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/replaced.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "742244e5eb090968dbbab6b3bce1d5d52404f476371439bf2404e4467534b488",
+ "chksum_sha256": "2c101fa94fc443f0335f4fb75c440dc5c0fe47363d3463d0eccc2c340b39e6cf",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_prefix_lists/tests/.DS_Store",
+ "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/deleted.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "af891bb95ebcc39dfd38131bf64fba6eb7bb8e84f59a428b6af5477588fbc6b6",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_prefix_lists/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "8695d048ec2623b31a194a213ef80da6add19468e0f90a4ca97d5b8257979529",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_prefix_lists/vars/main.yml",
+ "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/parsed.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f869515b8a1ec55c8346c13f87eff1b4bef627722f02ba89f143fec41ea52254",
+ "chksum_sha256": "e63afbeefadaaf0dcc22637aaeebfc27980cb517c68aabda8338c05976255320",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_hsrp_interfaces",
+ "name": "tests/integration/targets/nxos_evpn_global",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_hsrp_interfaces/tasks",
+ "name": "tests/integration/targets/nxos_evpn_global/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_evpn_global/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_evpn_global/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_hsrp_interfaces/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_evpn_global/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_evpn_global/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_evpn_global/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_evpn_global/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_evpn_global/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_evpn_global/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_evpn_global/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "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_hsrp_interfaces/tests/common/deleted.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6e9f0e87988c4ded07d518b67a5118d9d6894e2fab2c86c9cd90ffcf5f56beab",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_hsrp_interfaces/tests/common/gathered.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0ef96315e1d8b08e76b5d905207c1d85c0ddea43e8efa07b54896132e7d772e1",
- "format": 1
- },
- {
- "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_hsrp_interfaces/tests/common/merged.yaml",
+ "name": "tests/integration/targets/nxos_evpn_global/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "da6b8a879ff9188026a3b1aa01b53289a7517026aff1a7d1954d1bdaead6dec0",
+ "chksum_sha256": "9190f2d0dae47c3b29ebe68f89ec9e3b88f0af56af489b15624cf99c86415d9f",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_hsrp_interfaces/tests/common/overridden.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "45a5f0f9979ffcd5b7ef73f95de39a4c6ad35b3f7f05a61b7f6770eb17166dcb",
+ "name": "tests/integration/targets/nxos_bgp_templates",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"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_bgp_templates/tasks",
+ "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_bgp_templates/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d1c4df45348332e927abe784ea39438ab014af521a169cc07ca76ff6d8d7c52d",
+ "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_hsrp_interfaces/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/nxos_bgp_templates/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9db583ddb82a512ca231ffb3a5ba6c672aa653ec28834c17328fd56190b4a558",
+ "chksum_sha256": "918e266fd84500fc8a9d7958437789683bd47b7875371afaf4941b60f4594bc7",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_hsrp_interfaces/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/nxos_bgp_templates/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4f2c908e56c100ed364248792037843ebe703124cb856054bba1a7904494edd3",
+ "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_hsrp_interfaces/vars",
+ "name": "tests/integration/targets/nxos_bgp_templates/meta",
"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_bgp_templates/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a06be45c7fcb5fbb624b33983db74636889ef05ed32ce0f3ba56485272e3db09",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_hostname",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_hostname/tasks",
+ "name": "tests/integration/targets/nxos_bgp_templates/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_hostname/tasks/nxapi.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_hostname/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c100293cbf1e43e53f2ff874e3e1079621ae414e404db0078a26044ececac0b1",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_hostname/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_bgp_templates/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245",
+ "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_hostname/meta",
+ "name": "tests/integration/targets/nxos_bgp_templates/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_hostname/meta/main.yml",
+ "name": "tests/integration/targets/nxos_bgp_templates/vars/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
+ "chksum_sha256": "320a4fb71862d3232cd18205318c3a960d55b06bb1fd7fa7afd49ff122c04605",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_hostname/defaults",
+ "name": "tests/integration/targets/nxos_bgp_templates/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_hostname/defaults/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_hostname/tests",
+ "name": "tests/integration/targets/nxos_bgp_templates/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_hostname/tests/common",
+ "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_hostname/tests/common/_remove_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3c610838a6fa946c2237c8292c07b688a1ba7e8096a2d35d75f12f0b58866ed7",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_hostname/tests/common/deleted.yaml",
+ "name": "tests/integration/targets/nxos_bgp_templates/tests/common/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ce390e649cf85c4eddff7df5c0d545f57e389bb36774ae580dadafec45cf2a1b",
+ "chksum_sha256": "e921d4fa370873c1b237ba6b3ee2d3c0a70520b08f5097e960152137a57ed123",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_hostname/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/nxos_bgp_templates/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0b28a51b56bc716da4598490f3cb3302329f0113eb3ab32fa9a860223eae43f6",
+ "chksum_sha256": "a1ffab53eece71058929fba7b157214cd3aeea388b6bf8aae94e146b03e5eb25",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_hostname/tests/common/empty_config.yaml",
+ "name": "tests/integration/targets/nxos_bgp_templates/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c48e9bf3dac84165ae9953b7ad26ecec061cc599fd5cc78290d048b36119ce19",
+ "chksum_sha256": "09f60138ddf3d5c8a6782f9f5f937091c37a58ea72c0304384034becdf946850",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_hostname/tests/common/merged.yaml",
+ "name": "tests/integration/targets/nxos_bgp_templates/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b2db6ef6d129f976a7c1dd3d1543020bba577d399fa4e780311e9942d0e39a21",
+ "chksum_sha256": "425c2ab3097932fcb46a43b4d5b8bcaeed500348e760e77a5b6f1d4e4fca9eea",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_hostname/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/nxos_bgp_templates/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c76970334ac8f7dea1c52d4a2e9785b43fe9754ed2cece81e49036d8efce6507",
+ "chksum_sha256": "d307cdaf9d9ecb2c711093d4f9879deb595a843ed2d17b6ae1036d918b22cf2f",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_hostname/tests/common/_populate_config.yaml",
+ "name": "tests/integration/targets/nxos_bgp_templates/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "55288117a1ba1770a3e0bcac6e550c318807316ce84c65e536ba34cc449f62b0",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_hostname/tests/common/fixtures",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "1197072828ecfc518dd9ac00389c239db31f18e8d566fbe5a37fd80ff479f104",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_hostname/tests/common/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/nxos_bgp_templates/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6cd019ca4bbc9dc9a7657ccbc89a52a8505890bda564813765bc2bb004ef3814",
+ "chksum_sha256": "c07047642c717ad5e564697143a11e7cc93a18376d91ee56dc5f44f3d19e22b5",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_hostname/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/nxos_bgp_templates/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8564938ffbfc1d998d5ce080e9bc6cb612cf2aeefa19ac79bf9bf6f895800a2e",
+ "chksum_sha256": "2326d2afd434fadf9b8d2ef427e3918e6a5947eb39d58c4fc1988df599c58510",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_hostname/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/nxos_bgp_templates/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "292e2e1750dcd0b5114b4c1b2f8fe93125754fa76c1869f64f87e6055da6338f",
+ "chksum_sha256": "37be696dfcec49e17974100e3ea8181b391da9cdad82f8667aa2f5df0ff8aaca",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_hostname/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/nxos_bgp_templates/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6e0e085de3251f1846bf350484b27a639383cf70f82effdb6d8aa0b73f105c60",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_hostname/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "56e1c2649908ef81810457cc96bc917c530d7096e907b516389ef7cdbe3c9ba3",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_hostname/vars/main.yml",
+ "name": "tests/integration/targets/nxos_bgp_templates/tests/common/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "372a997c3a0ce9aa7b42746d99a75295a66504416d94fd1b0c545e58717a6a9d",
+ "chksum_sha256": "0f7753a98712bcde737fce34f1a0af8d5a655bba229b306685e5ae6f8c26257d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config",
+ "name": "tests/integration/targets/nxos_pim",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tasks",
+ "name": "tests/integration/targets/nxos_pim/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_pim/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_pim/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a069f9e3d9d905e5a1d7e2b316e284944bc38cddc390470831451fb4672fbde2",
+ "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_pim/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
"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_pim/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_pim/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4f04d0bc1463bb36c212620e786d8ce8d18681fd03f641c1a37351b6d0dfac8",
+ "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/meta",
+ "name": "tests/integration/targets/nxos_pim/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_pim/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
+ "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/defaults",
+ "name": "tests/integration/targets/nxos_pim/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_pim/tests/common",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/nxos_pim/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
+ "chksum_sha256": "ab1efb1a3ca7cc688042b32d2d0660eeb0e25ff2bb2c833e9bcdeab5d6a1e0a0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tests",
+ "name": "tests/integration/targets/nxos_smoke",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tests/cli",
+ "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/toplevel_before.yaml",
+ "name": "tests/integration/targets/nxos_smoke/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "da70c4dcf111e0de17abc736ab6b4cfef245ca202d235dd1d9e611b40bbab8b2",
+ "chksum_sha256": "7277ec56762ca20a3617b1da87631d8dde35556a4c004e7c82974e49fab50d92",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tests/cli/toplevel_after.yaml",
+ "name": "tests/integration/targets/nxos_smoke/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7792c748c17cf012bd7462753459725b9b2d4e8418a3edb3f4f76eb84f8b5914",
+ "chksum_sha256": "849f2a2746300bf950bfe382b3f2b80990bbee773cbdbd2d1e2a897a9ed1e261",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tests/cli/diff.yaml",
+ "name": "tests/integration/targets/nxos_smoke/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d890138033f9812260dfd304fb4888d77e0c78b71f0afb2f8f97ce71f11a2491",
+ "chksum_sha256": "62a31764ef528947cdefe8eb150e20bdaba422d40bac12a3609948ca1575cf8f",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tests/cli/sublevel_strict.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "057bf9a3f64bb1abb24a5dc5a530553401a32850185af62cb278c85228ac6465",
+ "name": "tests/integration/targets/nxos_smoke/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tests/cli/multilevel.yaml",
+ "name": "tests/integration/targets/nxos_smoke/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b91edced261b04cd778d86a702fd71159bcb7e37050b2b59d66f5fbd0485ca6e",
+ "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tests/cli/replace_block.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e0eef2496cf4af6b50d6274c1b6ef30dbe7955e60ab6695c4cc0660ee5e8a51e",
+ "name": "tests/integration/targets/nxos_smoke/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tests/cli/sublevel_exact.yaml",
+ "name": "tests/integration/targets/nxos_smoke/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b755c791e3a1b329e7da5896f70e10b01bdc5237bbe2e80316a4515d6f8d8bd8",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tests/cli/sublevel.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "937eb38ce64f2eaaab0f4c8f86a336d6fa022a96d75e285baaf7c85f45fb0b09",
+ "name": "tests/integration/targets/nxos_smoke/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tests/common",
+ "name": "tests/integration/targets/nxos_smoke/tests/cli",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tests/common/src_match_none.yaml",
+ "name": "tests/integration/targets/nxos_smoke/tests/cli/misc_tests.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f485a516ee779d29f9c4bef94249e47c885743481d409fedaad14bd49ecbafe0",
+ "chksum_sha256": "dedfb27511bd8fde863a0aa430bdd23272cd766d0c23694764d01852c9586073",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tests/common/sublevel_block.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "45748bd39c32ff0675cebcff8ed674384c0fcbd51797f2110edfbef816394801",
+ "name": "tests/integration/targets/nxos_smoke/tests/common",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tests/common/toplevel_nonidempotent.yaml",
+ "name": "tests/integration/targets/nxos_smoke/tests/common/common_utils.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "48fbcde0f38c5b06062ccb0f93d50a5b7a7554edf66ee7ed4779d9d4ce524ac1",
+ "chksum_sha256": "a60e645271b0b349228daf7eac3948d5651a32abd8cb578005202d4c1ed80236",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tests/common/toplevel.yaml",
+ "name": "tests/integration/targets/nxos_smoke/tests/common/common_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2bc1969eeb4a97775fd72dd6e5109d499c24cf5735c2c54bf75dcf7d49690bea",
+ "chksum_sha256": "dea32a9f41f8c2367181bfb2fc2821e4304e393ac781dd02e19d6cb01c6273ae",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tests/common/sanity.yaml",
+ "name": "tests/integration/targets/nxos_smoke/tests/common/caching.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "55efec005b7a96d5dbd8739cfce99c359f047d1aacbee36ad6bc04bcf8283f26",
+ "chksum_sha256": "2db51e2d9c925d2773d4bcf45ee241c75cc02547793d07cad590f1d9657eb36c",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tests/common/src_basic.yaml",
+ "name": "tests/integration/targets/nxos_smoke/tests/common/misc_tests.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eccd369dee1af74d2b9f2888107f438904ae0c58705d800ad95e913965991608",
+ "chksum_sha256": "ca259adfd9eabd17072e03cae98011aa82cf2e1b6d8fc88fb0ada2ebaca18d7a",
"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_user",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tests/common/backup.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "098fa1e9566ae02a5c089a7ab7a235ce53f1bc78b431e01595556f623f718c82",
+ "name": "tests/integration/targets/nxos_user/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tests/common/src_invalid.yaml",
+ "name": "tests/integration/targets/nxos_user/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "000c3c67b80eab4be77858bbb29844ec788342c63d8570c1db6166ca5a9539b5",
+ "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tests/common/save.yaml",
+ "name": "tests/integration/targets/nxos_user/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bc462c07044762a41b8eddbe29be65aa51e6d6cea05d1e0630555e8cb4a9e446",
+ "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tests/redirection",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_user/tasks/cli.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tests/redirection/cli",
+ "name": "tests/integration/targets/nxos_user/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_user/meta/main.yaml",
"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_user/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tests/nxapi/toplevel_before.yaml",
+ "name": "tests/integration/targets/nxos_user/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1d150adeed3e6e02c3adc3871d29b6a153d504ab7a861cd401b02c480008ba5b",
+ "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tests/nxapi/toplevel_after.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7b8ad2836c7ec7360561cb0f4319bbe95feae70b134c5dac9deb2ba18a17638e",
+ "name": "tests/integration/targets/nxos_user/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"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_user/tests/common",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tests/nxapi/multilevel.yaml",
+ "name": "tests/integration/targets/nxos_user/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ff4c8dc408f5b4296300c4d7d983fcbdf19ee303fc95fe44ddb3d72a8b2aa08e",
+ "chksum_sha256": "bd39b32f02401670bfda98c14839d0da9c76ae8446c151dc7f10131c9531ded6",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tests/nxapi/sublevel_exact.yaml",
+ "name": "tests/integration/targets/nxos_user/tests/common/basic.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "694ab236d9c21462b423d507666dfe90caceca03e8a2f8fa3759f9f51b6d06e0",
+ "chksum_sha256": "ba9e801ff2ad1ae02085f83753b4f2e51565888a0fa5822ea0f671ee8a54229f",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tests/nxapi/sublevel.yaml",
+ "name": "tests/integration/targets/nxos_user/tests/common/auth.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dc08a002e9e00d36590098bfe308ca825954a3e43755650cb5809684512433cb",
+ "chksum_sha256": "db7a57ed2e804cae9aea360123df898848cc2e772fcab84d843aac01ca0b6b61",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tests/cli_config",
+ "name": "tests/integration/targets/nxos_facts",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tests/cli_config/cli_exact_match.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5eb01810e15ac6b6941a7b9b79ca5ca3be016f16ee7f534eea9be0115fb53a46",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_config/tests/cli_config/cli_strict_match.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6329b5bab571f5218aeff32c54936052c2188466f842b4364d80dc9c6d800450",
+ "name": "tests/integration/targets/nxos_facts/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tests/cli_config/cli_backup.yaml",
+ "name": "tests/integration/targets/nxos_facts/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "02aa5aa3478284c141cb3741eb86bf919a560bc25b5a911f453e05ce25737bd7",
+ "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tests/cli_config/cli_block_replace.yaml",
+ "name": "tests/integration/targets/nxos_facts/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9058efd9127aa10094d23e72b8d7b8e0426d2707a113d7be2d539c15a1b9d229",
+ "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/tests/cli_config/cli_basic.yaml",
+ "name": "tests/integration/targets/nxos_facts/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7b3703086ba8415b259a2c8353dc03d9295173092ba3dc15170ae9718b10626e",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_config/templates",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/templates/basic",
+ "name": "tests/integration/targets/nxos_facts/meta",
"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_facts/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "da30d9c2fbe9c9473f957d26568b2cb42baa620e261efbce7d604535ec532cf5",
+ "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
"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_facts/defaults",
+ "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_facts/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b358f8f54eb293ce2eac2ead8f8bc2e3aae7383c2981c9c192530d6bcbff3d6f",
+ "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/templates/basic/acl_config.j2",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f8cfadc33b5527be5bd82a279cbcc769a882135ce815cb6d42177cb51d325e4e",
+ "name": "tests/integration/targets/nxos_facts/vars",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/templates/basic/intended_running_config",
+ "name": "tests/integration/targets/nxos_facts/vars/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b478553dd335d5085c847219eae58a8daac0902372a5e8fbbd133da3850332b2",
+ "chksum_sha256": "90b4146d19a8448ba711a28645cf964f8251d544bf1de77f552e08a1e60a9914",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/templates/basic/base_running_config",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "85528fb2bdea51956f0b6d9a7cb07c7bc75e498553f9b5301b904db35ed0f929",
+ "name": "tests/integration/targets/nxos_facts/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"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_facts/tests/common",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/templates/basic/configexact1.j2",
+ "name": "tests/integration/targets/nxos_facts/tests/common/invalid_subset.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f8cfadc33b5527be5bd82a279cbcc769a882135ce815cb6d42177cb51d325e4e",
+ "chksum_sha256": "d7ef14aa0d9ae451bba34e5fb2952f2034793f826a441cd042b03c34e0d78422",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/templates/basic/configexact2.j2",
+ "name": "tests/integration/targets/nxos_facts/tests/common/default_facts.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b5884db197b0f69276768f1f6e5e8b4214ead32869dab90d76fae353425a4b28",
+ "chksum_sha256": "08c3680a5a839d8e3b53515643f3773bb1d25de670124063d41ff3e0a7fd2713",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/templates/basic/config.j2",
+ "name": "tests/integration/targets/nxos_facts/tests/common/not_hardware.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d62440fb734cd4db3dd623ab8e77214ff7f82e44c7dfca249b20dcd83d83a9af",
+ "chksum_sha256": "933c388db57e0042a75290223a48d69efad1e524bce14f28f64694d34e3475e3",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/templates/config.js",
+ "name": "tests/integration/targets/nxos_facts/tests/common/all_facts.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c6d65e4fbe26ecfdf18d8eba2eac04aecfdd65e59e6b6db1c2aa2d29ed5a5847",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_config/templates/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "f737c75bd85a50361bfb755799335e3bf0044448e43308c6f4c3f9186a80b65f",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/templates/defaults/test.j2",
+ "name": "tests/integration/targets/nxos_facts/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "356d51cb39cbc26b408ca0b3aeacc83634ee2f6e061811a3a8fafb63955ffa4d",
+ "chksum_sha256": "f15ccd5a6a25f5358288fb8ddb955a1b024c33c0d1f04df3811e03aabe460c32",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_config/templates/defaults/config.j2",
+ "name": "tests/integration/targets/nxos_facts/tests/common/interface_facts.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "522484a8eb35e809c1ebd645a73ca12f02b09c6cf237f1db1ed577088c149c51",
+ "chksum_sha256": "5c7fa4749d973f3993d84e4ae324dfefa8a62167452abcbdd66de1cb668fdba0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bfd_interfaces",
+ "name": "tests/integration/targets/nxos_udld",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bfd_interfaces/tasks",
+ "name": "tests/integration/targets/nxos_udld/tasks",
"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_udld/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201",
+ "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bfd_interfaces/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_bfd_interfaces/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_udld/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245",
+ "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bfd_interfaces/meta",
+ "name": "tests/integration/targets/nxos_udld/meta",
"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_udld/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bfd_interfaces/defaults",
+ "name": "tests/integration/targets/nxos_udld/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bfd_interfaces/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_udld/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
+ "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bfd_interfaces/tests",
+ "name": "tests/integration/targets/nxos_udld/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common",
+ "name": "tests/integration/targets/nxos_udld/tests/common",
"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_udld/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "35032ab6b2376156d9cc4386e0c3ae950aeea92146c89106e92963e5d9f30abd",
+ "chksum_sha256": "327f500b5a3e5f79399f7a93e74613eec32ee87f52ea77b89af0bb84862a89d2",
"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_nxapi",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/gathered.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e8b8f05c67f53717f791d5fa39768a09589083927c1b288181a9a2b28d3f19fd",
+ "name": "tests/integration/targets/nxos_nxapi/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/empty_config.yaml",
+ "name": "tests/integration/targets/nxos_nxapi/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a07b5658b8543fad6adbc03cc3dedf24b925d6c15ab96cba887e4057adde9af4",
+ "chksum_sha256": "7022927c86a437ced8d1f9058b25af83150ab1d87223183b1c61bbf4c0d6523f",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/merged.yaml",
+ "name": "tests/integration/targets/nxos_nxapi/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b7125a5bf2a88b3a35ff6aa0d06f3afd1474431c753306f1390613c7892f8217",
+ "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/overridden.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "903605fdce930f7ab623ddda18bc721d07632ae35cede2608f93d0178fffff86",
+ "name": "tests/integration/targets/nxos_nxapi/tasks/platform",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/_populate_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "febb1078f232f6b64f4600db4e81e08b293f9c1b5959937b92458ea3228ac8ce",
+ "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n5k",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n5k/assert_changes_https.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "57b05a37ab33678d00ceac9fa16256aa5ce862265fb330cf2045a6f06bd40331",
+ "chksum_sha256": "4f99598e0507cfb4e0e625a4075deabb91c5de5e1c0e5531846b9467a6faeaa9",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n5k/assert_changes_https_http.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c7ce5887a89b7e2b67eb2b4bae794a1e0a77c77c2c98c1fbd123bca9ecbf78f3",
+ "chksum_sha256": "79ee713da7a48ad0b493f6e07690138be3eb4d04d890126aec488e2242e7a442",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n5k/assert_changes_https_http_ports.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": "3cef9d277e717f6956a9d5136862c72616d866eb04d8f8c0da44c0777739c92c",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bfd_interfaces/vars/main.yml",
+ "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n5k/assert_changes_http.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ab74ba6b07626a0723ca4ba193159ba14bc7011f11acd94ca9b5f13f817def19",
+ "chksum_sha256": "ed763ee2de2c730ea2783225dc132f5c28f22ea272213a36b9b3bb4471492e08",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vxlan_vtep",
+ "name": "tests/integration/targets/nxos_nxapi/tasks/platform/default",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vxlan_vtep/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_nxapi/tasks/platform/default/assert_changes_https.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "bfae052c7df36024a59df89f314dc7e03019ad1649f4132cb34bb2a8f50fe903",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vxlan_vtep/tasks/nxapi.yaml",
+ "name": "tests/integration/targets/nxos_nxapi/tasks/platform/default/assert_changes_https_http.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1e03994e82f05167e558b19e20c435e80ed92b6ff4f62f71fb93ed9082d30f94",
+ "chksum_sha256": "b055af4a4779d412640cee585ef493e52c3937782e095218164d2719d5223d29",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vxlan_vtep/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_nxapi/tasks/platform/default/assert_changes_https_http_ports.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
+ "chksum_sha256": "04e8b8ae8842f40c777282e979ea824c7c886f3e8ae1d9e2710ff466d1fc2ae0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vxlan_vtep/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_nxapi/tasks/platform/default/assert_changes_http.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
+ "chksum_sha256": "db4865169c3dc97c5ca5e24083550b243b685cfaeaaba16333b1f55754dd265a",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vxlan_vtep/tasks/platform",
+ "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n7k",
"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_nxapi/tasks/platform/n7k/assert_changes_https.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d826b7762b3ab39ad7d294ca171272d1ff3213c35f8040c3657228f259d331d5",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vxlan_vtep/tasks/platform/n7k/cleanup.yaml",
+ "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n7k/assert_changes_https_http.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6fe5dccac28d950d4f93db2d5dd8d2d53f974b51a0c07a9371165a7fd9b20585",
+ "chksum_sha256": "97089a108cc1eac9afae028c6da9bf6f7017afcfc3f1a85776cfe6af31f2c6af",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vxlan_vtep/tasks/platform/n7k/setup.yaml",
+ "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n7k/assert_changes_https_http_ports.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b569f1de86c96331c196b935a58a716b5314f80ebd5b9130aeaa56f44c45f047",
+ "chksum_sha256": "5d5a7bc39789b15cf95dd49af7ab1636f3a4589a2be3ee5ca341dbb4414eb95b",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vxlan_vtep/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n7k/assert_changes_http.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "35222b27a54a701db0042dd5fb6069d48d9e27a70821a1707a4aad0d19bc227f",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vxlan_vtep/meta/main.yml",
+ "name": "tests/integration/targets/nxos_nxapi/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
+ "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vxlan_vtep/defaults",
+ "name": "tests/integration/targets/nxos_nxapi/meta",
"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_nxapi/meta/main.yml",
"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,
+ "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vxlan_vtep/tests/common",
+ "name": "tests/integration/targets/nxos_nxapi/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vxlan_vtep/tests/common/sanity.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6f5876cdb7e7636f06c87e462e6002cd2694520079c83f7103450520ff14b3b9",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_vxlan_vtep/tests/common/multisite.yaml",
+ "name": "tests/integration/targets/nxos_nxapi/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6e9df57ea06843b691dc030437dd9190193ddb70664dd0254133417e3a8b5cdc",
+ "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_udld",
+ "name": "tests/integration/targets/nxos_nxapi/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_udld/tasks",
+ "name": "tests/integration/targets/nxos_nxapi/tests/nxapi",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_udld/tasks/nxapi.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_udld/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_udld/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_nxapi/tests/nxapi/badtransport.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
+ "chksum_sha256": "28a2dfdf7ba13f8dd757c8d9095797a0b91437b5bfd9d9c1c8bfe65508e15901",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_udld/meta",
+ "name": "tests/integration/targets/nxos_nxapi/tests/cli",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_udld/meta/main.yml",
+ "name": "tests/integration/targets/nxos_nxapi/tests/cli/nxapi_ssl.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_udld/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "dae84b45affca730b7c9158216bf18dc9ab9c92bbce4701b6ba881f192ae47f4",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_udld/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_nxapi/tests/cli/disable.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_udld/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "94889efb465f8b55120a28becc23705cd11dc1bc9aebc91204105ba9f8207302",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_udld/tests/common",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_nxapi/tests/cli/configure.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b4853e02af108065809baebdb1f8e957bc48184f9a24e3510826d28f734d17a6",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_udld/tests/common/sanity.yaml",
+ "name": "tests/integration/targets/nxos_nxapi/tests/cli/enable.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "327f500b5a3e5f79399f7a93e74613eec32ee87f52ea77b89af0bb84862a89d2",
+ "chksum_sha256": "abdd34478d7db89533c9d3d8cc0fb2f26a5324ab85212086aa1fecc220e7d1c8",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l3_interfaces",
+ "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/tasks",
+ "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_l3_interfaces/tasks/nxapi.yaml",
+ "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l3_interfaces/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2418a2ada8700c06969324411c9be328b4d4ad913c6eb93fb824dff96900ff8f",
+ "chksum_sha256": "0defcb7ce6f353926624c2c3e045b403af33c34a6bc1c49b08e71ec602cd21f2",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l3_interfaces/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l3_interfaces/meta",
+ "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_l3_interfaces/meta/main.yml",
+ "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
+ "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l3_interfaces/defaults",
+ "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_l3_interfaces/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l3_interfaces/tests",
+ "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/tests/common",
+ "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/vars/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c9c20222a6eea75718e72f0e12a439d0f2a36eee5fc85db00a855c0ca4a72f99",
+ "format": 1
+ },
+ {
+ "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_l3_interfaces/tests/common/_remove_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9dbc4efa7c9e6843b987aa6286ba0de836129c75b66249ab846fee2012fc2394",
+ "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_l3_interfaces/tests/common/deleted.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1676a953c0e740cc280155ea76e6368fd5628556cdc0acae19e1834b40721681",
+ "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_l3_interfaces/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4c8ea6a0bd93a5ae1092362c88b1eb6ed13a086968841b5d68654677741714dc",
+ "chksum_sha256": "b2a00e0d2590a7c6caff9c7d3d3df8eddf7a04bcb142a5900735574cf7d7ba14",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/empty_config.yaml",
+ "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "858bc39fea4f9cedff070a248b5119124852eeb9237388ef833c414510dbf24c",
+ "chksum_sha256": "40d8f8cfc0bfd8a2d5da53d9e61f2d398e4ed50e2cc17915359ba02b980d16d0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/rtt.yaml",
+ "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d660e4e5717467104076599f04b44aca40bbe45b79eb5e5554cb1ff390feb405",
+ "chksum_sha256": "ebe2088087a911826370430ed7e8029bee349d39be051ef9ce89f96ebb2d4118",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/merged.yaml",
+ "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e7555ee3d0322003861d6c2d810ec490027b8d792e8800c7e9a46fab869b1c92",
+ "chksum_sha256": "dc0718832154ed173f9ada21e4072a3f3c7fc9202d9a83e0b18c26d72991702e",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c670083adeabaa18419eea52a2297aeea81b1a5635718b95aebf3d1955f78385",
+ "chksum_sha256": "bc402cfd6f07870283877fcd9c3158fdef7f756c7ea88c1aeebdd73629628a00",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/multisite.yaml",
+ "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b0b3ebe6d2d7db422ec1a046818ce06ddf83ef9f32a9178691d732b0824b4da1",
+ "chksum_sha256": "9c296bdd111a832466197719e7d3a6da9215aaaa0ab6aeca20b16e5284c61b52",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/_populate_config.yaml",
+ "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3a640fd87c6717d5876b64797f7d0092fd6673272fc5a674bde3cf5ed78e8b79",
+ "chksum_sha256": "c07047642c717ad5e564697143a11e7cc93a18376d91ee56dc5f44f3d19e22b5",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ef91b776e8c9627a55cc9759549aaa7482e0f7da4385079443b8e8f1d8d40b8c",
+ "chksum_sha256": "367b5c49d11893b14160cf94e6675588ac07bf0ee93574f6a1e9a9d4c6df70d9",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5e2abf21e437435b96d94e3a1c900ac1284a39092f3b0b1d19e8d5d7544a8424",
+ "chksum_sha256": "ed006b0b9dbb7b7c16264d7c9304040f7ddf7104c0aef4d084dd0380d81c0f0d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f274f91771b34f2246ee4fa58bae6acd7fafb0ea1f1efb04ffb362cfd1678de3",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_l3_interfaces/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "a8055703f881f09873f851f1e0c212ac66aa662b744b5cc81a6bd07a7e854643",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_l3_interfaces/vars/main.yml",
+ "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "24e5a4f2e7330b185775678aa68b4645786e83617b90d5a32fb4ff4b77b345ad",
+ "chksum_sha256": "047f1c0feea67e71c51f1eed5b1434e093a7b9f98494aa230acea01f7b68a91b",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lldp_interfaces",
+ "name": "tests/integration/targets/nxos_snmp_host",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lldp_interfaces/tasks",
+ "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/tasks/nxapi.yaml",
+ "name": "tests/integration/targets/nxos_snmp_host/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "280d285e1a9b531b25d8b880d3a032933d7135004c4658b7f1eb4872c60cc666",
+ "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lldp_interfaces/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_snmp_host/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c0ff0c24a2fb4a8aa58a6356c5029065acb6cf1aba1e14add135ff69c8d1387b",
+ "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lldp_interfaces/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_snmp_host/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c57c3ff656bb8daf9febb3c7a7bff934b952d1ccb83604d93e23ccfc3ea88724",
+ "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lldp_interfaces/meta",
+ "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/meta/main.yml",
+ "name": "tests/integration/targets/nxos_snmp_host/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lldp_interfaces/defaults",
+ "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/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_snmp_host/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lldp_interfaces/tests",
+ "name": "tests/integration/targets/nxos_snmp_host/tests",
"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/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/remove_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "303bc0ba56d6f13d152987aaf4b6953d88e4461e8958c7db467d52d247a63dce",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/parsed.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e63afbeefadaaf0dcc22637aaeebfc27980cb517c68aabda8338c05976255320",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/gathered.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d559bcc46e44d101f2fa43a97d785b4476d6053486294e513a7cafbaf67b6bae",
- "format": 1
- },
- {
- "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_lldp_interfaces/tests/common/replaced.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2c101fa94fc443f0335f4fb75c440dc5c0fe47363d3463d0eccc2c340b39e6cf",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/deleted.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8695d048ec2623b31a194a213ef80da6add19468e0f90a4ca97d5b8257979529",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/rtt.yml",
+ "name": "tests/integration/targets/nxos_snmp_host/tests/common/sanity_snmp_v3_trap.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "23d20e20e06201967d2847f91f879c7741ac48c9e08bc1b9b3f63ef8c111ad29",
+ "chksum_sha256": "1e10b5c9c01f39edff0f76171c81720d458aca5775d0f5f97f20bd2e6c21f57f",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/overridden.yml",
+ "name": "tests/integration/targets/nxos_snmp_host/tests/common/sanity_snmp_v2_inform.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b4403fc48624d3990b76b682c8b17543e81f43f152f1afe573bdde1722248ea1",
+ "chksum_sha256": "54b2c813dda14d97a1eef23c8a3b3ff2bdc194b60ec4cf15d7f6e0068802afa5",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/rendered.yml",
+ "name": "tests/integration/targets/nxos_snmp_host/tests/common/sanity_snmp_v3_inform.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "05a26c146d796dee090a8d9931d7f38b5cf3ea87682c7f50f73597a6cff1a4cb",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_lldp_interfaces/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "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",
+ "name": "tests/integration/targets/nxos_static_routes/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7277ec56762ca20a3617b1da87631d8dde35556a4c004e7c82974e49fab50d92",
+ "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_smoke/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "849f2a2746300bf950bfe382b3f2b80990bbee773cbdbd2d1e2a897a9ed1e261",
+ "name": "tests/integration/targets/nxos_static_routes/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_smoke/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_static_routes/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "62a31764ef528947cdefe8eb150e20bdaba422d40bac12a3609948ca1575cf8f",
+ "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_smoke/meta",
+ "name": "tests/integration/targets/nxos_static_routes/vars",
"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/vars/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
+ "chksum_sha256": "3eda3cf170b296ca5e5f4996c8b03c030d87a4e3e6197f7770e2b14e739e4ab3",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_smoke/defaults",
+ "name": "tests/integration/targets/nxos_static_routes/tests",
"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/tests/common",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/nxos_static_routes/tests/common/overridden.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
+ "chksum_sha256": "ff14829c4bb5758e9c2bcce36a6a134e5fd2d02af7586147e25ce45f5d3c6197",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_smoke/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_static_routes/tests/common/rtt.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ac26dd65c91afd1fd0e3734c2d3b9c361904f6af8fed0fbce8ee7746c96b64bf",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_smoke/tests/cli",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_static_routes/tests/common/rendered.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b9734f5468d080e059ad191471f78497c2ce42fa6d87de56f9f2e273bc0d8e28",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_smoke/tests/cli/misc_tests.yaml",
+ "name": "tests/integration/targets/nxos_static_routes/tests/common/gathered.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dedfb27511bd8fde863a0aa430bdd23272cd766d0c23694764d01852c9586073",
+ "chksum_sha256": "f58a5e229e9cb4a2cd367d9bd3d36dfc7b8a03598bd35d77c19ea701e70b8976",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_smoke/tests/common",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_static_routes/tests/common/merged.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d8a7a44814c334c50589139d3473b014a953fda361f2d88075fe1538f65a580e",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_smoke/tests/common/common_utils.yaml",
+ "name": "tests/integration/targets/nxos_static_routes/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a60e645271b0b349228daf7eac3948d5651a32abd8cb578005202d4c1ed80236",
+ "chksum_sha256": "244c13d831c6419ec7e7a46e3e00e82fc1be5a476e5204561deae0efce659d93",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_smoke/tests/common/misc_tests.yaml",
+ "name": "tests/integration/targets/nxos_static_routes/tests/common/replaced.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ca259adfd9eabd17072e03cae98011aa82cf2e1b6d8fc88fb0ada2ebaca18d7a",
+ "chksum_sha256": "5c23e4c252c1cd1583fd56550d8d702f0b09b867eb03c50886e83f3c24197690",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_smoke/tests/common/common_config.yaml",
+ "name": "tests/integration/targets/nxos_static_routes/tests/common/deleted.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dea32a9f41f8c2367181bfb2fc2821e4304e393ac781dd02e19d6cb01c6273ae",
+ "chksum_sha256": "10271b66076c4d1659a13c85ae4ba02c903ba2eb771ba8a2e31f0910c46de739",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_smoke/tests/common/caching.yaml",
+ "name": "tests/integration/targets/nxos_static_routes/tests/common/parsed.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2db51e2d9c925d2773d4bcf45ee241c75cc02547793d07cad590f1d9657eb36c",
+ "chksum_sha256": "4a2cd09da60d6b0bc0904e3f313e959fc3efbba7979d14309764e11aaefab96d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_templates",
+ "name": "tests/integration/targets/nxos_static_routes/tests/common/_populate_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d486bec06fd92b15f491fc77298d00447520a955e2dbf3d84a5a739d1a2703c2",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/nxos_config",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_templates/tasks",
+ "name": "tests/integration/targets/nxos_config/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_templates/tasks/nxapi.yaml",
+ "name": "tests/integration/targets/nxos_config/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201",
+ "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_templates/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_config/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "918e266fd84500fc8a9d7958437789683bd47b7875371afaf4941b60f4594bc7",
+ "chksum_sha256": "a069f9e3d9d905e5a1d7e2b316e284944bc38cddc390470831451fb4672fbde2",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_templates/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_config/tasks/redirection.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245",
+ "chksum_sha256": "a4f04d0bc1463bb36c212620e786d8ce8d18681fd03f641c1a37351b6d0dfac8",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_templates/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_config/tasks/cli_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "244797b68a9ec0f73b3fecca59e21469c0bc8126f36a5b7ffe2fe20ebdf22f19",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_templates/meta/main.yml",
+ "name": "tests/integration/targets/nxos_config/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090",
+ "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_templates/defaults",
+ "name": "tests/integration/targets/nxos_config/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_templates/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_config/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
+ "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_templates/tests",
+ "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",
+ "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/_remove_config.yaml",
+ "name": "tests/integration/targets/nxos_config/templates/basic/acl_config.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c07047642c717ad5e564697143a11e7cc93a18376d91ee56dc5f44f3d19e22b5",
+ "chksum_sha256": "f8cfadc33b5527be5bd82a279cbcc769a882135ce815cb6d42177cb51d325e4e",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_templates/tests/common/deleted.yaml",
+ "name": "tests/integration/targets/nxos_config/templates/basic/base_running_config",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "425c2ab3097932fcb46a43b4d5b8bcaeed500348e760e77a5b6f1d4e4fca9eea",
+ "chksum_sha256": "85528fb2bdea51956f0b6d9a7cb07c7bc75e498553f9b5301b904db35ed0f929",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_templates/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/nxos_config/templates/basic/intended_running_config",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2326d2afd434fadf9b8d2ef427e3918e6a5947eb39d58c4fc1988df599c58510",
+ "chksum_sha256": "b478553dd335d5085c847219eae58a8daac0902372a5e8fbbd133da3850332b2",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_templates/tests/common/empty_config.yaml",
+ "name": "tests/integration/targets/nxos_config/templates/basic/configstrict1.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "37be696dfcec49e17974100e3ea8181b391da9cdad82f8667aa2f5df0ff8aaca",
+ "chksum_sha256": "da30d9c2fbe9c9473f957d26568b2cb42baa620e261efbce7d604535ec532cf5",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_templates/tests/common/merged.yaml",
+ "name": "tests/integration/targets/nxos_config/templates/basic/setupstrict.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "09f60138ddf3d5c8a6782f9f5f937091c37a58ea72c0304384034becdf946850",
+ "chksum_sha256": "b358f8f54eb293ce2eac2ead8f8bc2e3aae7383c2981c9c192530d6bcbff3d6f",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_templates/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/nxos_config/templates/basic/config.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1197072828ecfc518dd9ac00389c239db31f18e8d566fbe5a37fd80ff479f104",
+ "chksum_sha256": "d62440fb734cd4db3dd623ab8e77214ff7f82e44c7dfca249b20dcd83d83a9af",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_templates/tests/common/_populate_config.yaml",
+ "name": "tests/integration/targets/nxos_config/templates/basic/setupexact.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0f7753a98712bcde737fce34f1a0af8d5a655bba229b306685e5ae6f8c26257d",
+ "chksum_sha256": "b358f8f54eb293ce2eac2ead8f8bc2e3aae7383c2981c9c192530d6bcbff3d6f",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_templates/tests/common/fixtures",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_config/templates/basic/configexact2.j2",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b5884db197b0f69276768f1f6e5e8b4214ead32869dab90d76fae353425a4b28",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_templates/tests/common/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/nxos_config/templates/basic/configblock.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e921d4fa370873c1b237ba6b3ee2d3c0a70520b08f5097e960152137a57ed123",
+ "chksum_sha256": "f8cfadc33b5527be5bd82a279cbcc769a882135ce815cb6d42177cb51d325e4e",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_templates/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/nxos_config/templates/basic/configexact1.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/config.js",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a1ffab53eece71058929fba7b157214cd3aeea388b6bf8aae94e146b03e5eb25",
+ "chksum_sha256": "c6d65e4fbe26ecfdf18d8eba2eac04aecfdd65e59e6b6db1c2aa2d29ed5a5847",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_templates/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/nxos_config/templates/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/nxos_config/templates/defaults/test.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "56e1c2649908ef81810457cc96bc917c530d7096e907b516389ef7cdbe3c9ba3",
+ "chksum_sha256": "356d51cb39cbc26b408ca0b3aeacc83634ee2f6e061811a3a8fafb63955ffa4d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_templates/vars",
+ "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_config/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_templates/vars/main.yml",
+ "name": "tests/integration/targets/nxos_config/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "320a4fb71862d3232cd18205318c3a960d55b06bb1fd7fa7afd49ff122c04605",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_igmp_snooping",
+ "name": "tests/integration/targets/nxos_config/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_igmp_snooping/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_igmp_snooping/tasks/nxapi.yaml",
+ "name": "tests/integration/targets/nxos_config/tests/cli_config/cli_basic.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
+ "chksum_sha256": "7b3703086ba8415b259a2c8353dc03d9295173092ba3dc15170ae9718b10626e",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_igmp_snooping/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_config/tests/cli_config/cli_exact_match.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
+ "chksum_sha256": "5eb01810e15ac6b6941a7b9b79ca5ca3be016f16ee7f534eea9be0115fb53a46",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_igmp_snooping/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_config/tests/cli_config/cli_backup.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
+ "chksum_sha256": "02aa5aa3478284c141cb3741eb86bf919a560bc25b5a911f453e05ce25737bd7",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_igmp_snooping/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_igmp_snooping/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_igmp_snooping/defaults",
+ "name": "tests/integration/targets/nxos_config/tests/nxapi",
"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/tests/nxapi/sublevel_strict.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
+ "chksum_sha256": "acaded71377fcc8c8b288d527caf6fc777c8d0f50079c8b409d1007f821cc9d3",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_igmp_snooping/tests",
- "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_igmp_snooping/tests/common",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_config/tests/nxapi/toplevel_after.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7b8ad2836c7ec7360561cb0f4319bbe95feae70b134c5dac9deb2ba18a17638e",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_igmp_snooping/tests/common/sanity.yaml",
+ "name": "tests/integration/targets/nxos_config/tests/nxapi/multilevel.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4a73bc840e125f41372313d58b550980ef7c1642f87ba9bb8ee85d8d026ff42",
+ "chksum_sha256": "ff4c8dc408f5b4296300c4d7d983fcbdf19ee303fc95fe44ddb3d72a8b2aa08e",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_route_maps",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_config/tests/nxapi/sublevel_exact.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "694ab236d9c21462b423d507666dfe90caceca03e8a2f8fa3759f9f51b6d06e0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_route_maps/tasks",
+ "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/cli",
"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/sublevel_strict.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201",
+ "chksum_sha256": "057bf9a3f64bb1abb24a5dc5a530553401a32850185af62cb278c85228ac6465",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_route_maps/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_config/tests/cli/diff.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2396a1bb62aa2d673208deb59766a787971d061630b8467afa525b7fdcb2e95e",
+ "chksum_sha256": "d890138033f9812260dfd304fb4888d77e0c78b71f0afb2f8f97ce71f11a2491",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_route_maps/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_config/tests/cli/sublevel.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245",
+ "chksum_sha256": "937eb38ce64f2eaaab0f4c8f86a336d6fa022a96d75e285baaf7c85f45fb0b09",
"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/toplevel_after.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7792c748c17cf012bd7462753459725b9b2d4e8418a3edb3f4f76eb84f8b5914",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_route_maps/meta/main.yml",
+ "name": "tests/integration/targets/nxos_config/tests/cli/replace_block.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
+ "chksum_sha256": "e0eef2496cf4af6b50d6274c1b6ef30dbe7955e60ab6695c4cc0660ee5e8a51e",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_route_maps/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_config/tests/cli/multilevel.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b91edced261b04cd778d86a702fd71159bcb7e37050b2b59d66f5fbd0485ca6e",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_route_maps/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_config/tests/cli/sublevel_exact.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
+ "chksum_sha256": "b755c791e3a1b329e7da5896f70e10b01bdc5237bbe2e80316a4515d6f8d8bd8",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_route_maps/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "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_route_maps/tests/common",
+ "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/tests/common/_remove_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cdf825a17b7761cfbd225079ec5d366f4584e7f97111e0af086884f87fda0fde",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_route_maps/tests/common/deleted.yaml",
+ "name": "tests/integration/targets/nxos_config/tests/common/src_invalid.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c276d4c6888f077b84280f79606acb632995c8f1bf32e8c1c0bcb9c02055ee76",
+ "chksum_sha256": "000c3c67b80eab4be77858bbb29844ec788342c63d8570c1db6166ca5a9539b5",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_route_maps/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/nxos_config/tests/common/src_basic.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "562a6817ca710cc4c1b6c4babb9b7bca97334312e19d963f8df83a98b7e94512",
+ "chksum_sha256": "eccd369dee1af74d2b9f2888107f438904ae0c58705d800ad95e913965991608",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_route_maps/tests/common/empty_config.yaml",
+ "name": "tests/integration/targets/nxos_config/tests/common/save.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ff60a5603326c1ae214cbac1f9411495c0cab6360f7880234d1b2e3be1a2ffbb",
+ "chksum_sha256": "bc462c07044762a41b8eddbe29be65aa51e6d6cea05d1e0630555e8cb4a9e446",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_route_maps/tests/common/merged.yaml",
+ "name": "tests/integration/targets/nxos_config/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3b2a9d97ae8aa59ee542363b43e7051f5d8492e4f45ba0db862a9d071e1ef820",
+ "chksum_sha256": "55efec005b7a96d5dbd8739cfce99c359f047d1aacbee36ad6bc04bcf8283f26",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_route_maps/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/nxos_config/tests/common/toplevel_nonidempotent.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d8ea6575a0570f9ce32c1d3211f075ee42f56a4ba2d87115c6fccd3409b6b5d0",
+ "chksum_sha256": "48fbcde0f38c5b06062ccb0f93d50a5b7a7554edf66ee7ed4779d9d4ce524ac1",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_route_maps/tests/common/_populate_config.yaml",
+ "name": "tests/integration/targets/nxos_config/tests/common/backup.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "036af452cc03bdec84720356e6c7013b4f39c2a6800e1f8303120d785b2955e7",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_route_maps/tests/common/fixtures",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "098fa1e9566ae02a5c089a7ab7a235ce53f1bc78b431e01595556f623f718c82",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_route_maps/tests/common/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/nxos_config/tests/common/toplevel.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "09e1c1e0b37433d900624319d7037eb3672c94053d18f87f22552dceeec1dc96",
+ "chksum_sha256": "2bc1969eeb4a97775fd72dd6e5109d499c24cf5735c2c54bf75dcf7d49690bea",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_route_maps/tests/common/_setup.yaml",
+ "name": "tests/integration/targets/nxos_config/tests/common/defaults.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5153443ed073b0cc035110ac96d297361e22abe390c84014d0a7dbc83ede74e4",
+ "chksum_sha256": "db431603f9429be57048a8789d1f0af71d6cdae47a26878a608c082768a1244d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_route_maps/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/nxos_config/tests/common/sublevel_block.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "56653dab75b72e7a40ed1dbff928b5fd2dedf7651dcf2155747903b1a64803e4",
+ "chksum_sha256": "45748bd39c32ff0675cebcff8ed674384c0fcbd51797f2110edfbef816394801",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_route_maps/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/nxos_config/tests/common/src_match_none.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ab508eea7234bac851c3c482330fa0c4afb0e8bd2af87d91901c230754d9779d",
+ "chksum_sha256": "f485a516ee779d29f9c4bef94249e47c885743481d409fedaad14bd49ecbafe0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_route_maps/tests/common/rendered.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4e59d332194a4bb9ce27f445771203088b05b31a191b59d0e9e049deb72552a8",
+ "name": "tests/integration/targets/nxos_config/tests/redirection",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_route_maps/vars",
+ "name": "tests/integration/targets/nxos_config/tests/redirection/cli",
"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/redirection/cli/shortname.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2e01454e13b8195b24273afb60288d0cb4a32a1ca4e7f1fff3bfea0fd2610f18",
+ "chksum_sha256": "00bb1bd085c826013b04f4eaf7f74ff0de45ec8330aa386f4cd0263d468df9f1",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vrf_interface",
+ "name": "tests/integration/targets/nxos_route_maps",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vrf_interface/tasks",
+ "name": "tests/integration/targets/nxos_route_maps/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vrf_interface/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_vrf_interface/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_vrf_interface/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_vrf_interface/meta",
+ "name": "tests/integration/targets/nxos_route_maps/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vrf_interface/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_vrf_interface/defaults",
+ "name": "tests/integration/targets/nxos_route_maps/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vrf_interface/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_route_maps/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
+ "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vrf_interface/tests",
+ "name": "tests/integration/targets/nxos_route_maps/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vrf_interface/tests/common",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_route_maps/vars/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2e01454e13b8195b24273afb60288d0cb4a32a1ca4e7f1fff3bfea0fd2610f18",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vrf_interface/tests/common/sanity.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7f97e455b1bd40d8c37f4c473ba8a86d18cb742022dface71269898bcf9d6594",
+ "name": "tests/integration/targets/nxos_route_maps/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_location",
+ "name": "tests/integration/targets/nxos_route_maps/tests/common",
"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/tests/common/fixtures",
"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/tests/common/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
+ "chksum_sha256": "09e1c1e0b37433d900624319d7037eb3672c94053d18f87f22552dceeec1dc96",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_location/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_route_maps/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca",
+ "chksum_sha256": "ab508eea7234bac851c3c482330fa0c4afb0e8bd2af87d91901c230754d9779d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_location/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_route_maps/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
+ "chksum_sha256": "3b2a9d97ae8aa59ee542363b43e7051f5d8492e4f45ba0db862a9d071e1ef820",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_location/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_route_maps/tests/common/deleted.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c276d4c6888f077b84280f79606acb632995c8f1bf32e8c1c0bcb9c02055ee76",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_location/meta/main.yml",
+ "name": "tests/integration/targets/nxos_route_maps/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
+ "chksum_sha256": "56653dab75b72e7a40ed1dbff928b5fd2dedf7651dcf2155747903b1a64803e4",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_location/defaults",
- "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_snmp_location/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_route_maps/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
+ "chksum_sha256": "d8ea6575a0570f9ce32c1d3211f075ee42f56a4ba2d87115c6fccd3409b6b5d0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_location/tests",
- "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_snmp_location/tests/common",
- "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_snmp_location/tests/common/sanity.yaml",
+ "name": "tests/integration/targets/nxos_route_maps/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3e00a1c43687d39e22e8835b039f398d7bdebbcc45399d8cd01d6ca7d4ef6e96",
+ "chksum_sha256": "ff60a5603326c1ae214cbac1f9411495c0cab6360f7880234d1b2e3be1a2ffbb",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_devicealias",
+ "name": "tests/integration/targets/nxos_route_maps/tests/common/rendered.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4e59d332194a4bb9ce27f445771203088b05b31a191b59d0e9e049deb72552a8",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/nxos_route_maps/tests/common/_populate_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "036af452cc03bdec84720356e6c7013b4f39c2a6800e1f8303120d785b2955e7",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/nxos_zone_zoneset",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_devicealias/tasks",
+ "name": "tests/integration/targets/nxos_zone_zoneset/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_devicealias/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_zone_zoneset/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "f47853340600c1c9b76ed00695079b203ae45896e40acfac2f48e28f2ad98b40",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_devicealias/tasks/cli.yaml",
+ "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_devicealias/meta",
+ "name": "tests/integration/targets/nxos_zone_zoneset/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_devicealias/meta/main.yml",
+ "name": "tests/integration/targets/nxos_zone_zoneset/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_devicealias/defaults",
+ "name": "tests/integration/targets/nxos_zone_zoneset/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_devicealias/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_zone_zoneset/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_devicealias/tests",
+ "name": "tests/integration/targets/nxos_zone_zoneset/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_devicealias/tests/common",
+ "name": "tests/integration/targets/nxos_zone_zoneset/vars/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "97b10ee26b05c01b328d79887c41479bd2bf559184fb1df4af53645db6e109ba",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/nxos_zone_zoneset/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_devicealias/tests/common/sanity.yaml",
+ "name": "tests/integration/targets/nxos_zone_zoneset/tests/common",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/nxos_zone_zoneset/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a93b103d12183553437c6808898ac57aa27e80ef5d1547e496e4ce5d5039baa9",
+ "chksum_sha256": "781a480d71c224fb90d67eba3072492ff3f2d263df13ec8c735cabec41956751",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_igmp_interface",
+ "name": "tests/integration/targets/nxos_acl_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_igmp_interface/tasks",
+ "name": "tests/integration/targets/nxos_acl_interfaces/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_igmp_interface/tasks/nxapi.yaml",
+ "name": "tests/integration/targets/nxos_acl_interfaces/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
+ "chksum_sha256": "280d285e1a9b531b25d8b880d3a032933d7135004c4658b7f1eb4872c60cc666",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_igmp_interface/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_acl_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
+ "chksum_sha256": "7be6dc51b2f6fb5601e0d7f3498991d34f0910206fe6ed537217c8eba86a3cf5",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_igmp_interface/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_acl_interfaces/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
+ "chksum_sha256": "c57c3ff656bb8daf9febb3c7a7bff934b952d1ccb83604d93e23ccfc3ea88724",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_igmp_interface/meta",
+ "name": "tests/integration/targets/nxos_acl_interfaces/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_igmp_interface/meta/main.yml",
+ "name": "tests/integration/targets/nxos_acl_interfaces/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_acl_interfaces/templates",
"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_acl_interfaces/templates/populate_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
+ "chksum_sha256": "6dd477232ff3b52e84f25f81712afb11874700566d9c52d923c012ad1d770cf0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_igmp_interface/tests",
+ "name": "tests/integration/targets/nxos_acl_interfaces/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_igmp_interface/tests/common",
+ "name": "tests/integration/targets/nxos_acl_interfaces/defaults/main.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/nxos_acl_interfaces/vars",
"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_acl_interfaces/vars/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3f1f412736c7af33d14c2be45d461f6f96778bc221e6abdabdc579247c32d72d",
+ "chksum_sha256": "6a97fa118eda919bd0c4d9b45fbacbb04ef221e6d264073eda5612e7b57228c9",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_pim",
+ "name": "tests/integration/targets/nxos_acl_interfaces/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_pim/tasks",
+ "name": "tests/integration/targets/nxos_acl_interfaces/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_pim/tasks/nxapi.yaml",
+ "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/populate_acl.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
+ "chksum_sha256": "d44542c7c93f7edcef7326941f254a969cc90fca962286a98a576a1979064cd0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_pim/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/overridden.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca",
+ "chksum_sha256": "603d8a6ba49dd33261b0c7a152e55df28f2c3e10f09e9ec0f3eebde8d6c5c7ad",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_pim/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/empty_config.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
+ "chksum_sha256": "46c8e8809399bcd1bdfe1242e346ac1c340668e32fdbfcba0cfe6a4ad9ff6f4d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_pim/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/rtt.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "832178be08db3abba5b2d95b0c57c79f8a4d5b132f1f01f9dfe786c2a3b5cb31",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_pim/meta/main.yml",
+ "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/rendered.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
+ "chksum_sha256": "9ab726e93c94df77ac9671e7dfa0b8c89104ea4333e25b56f04830f9bda81942",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_pim/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/remove_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4b97c05adf25534f7d6e4ac7a67e541969eb7e1060b6360f956c5dcae418e5f7",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_pim/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/gathered.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
+ "chksum_sha256": "698995afdf69835fb4ba540353a3e4f213d7954d21073c0cc754b1787cd05231",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_pim/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/merged.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8eae4ac211ea7861be4677520f4962046223747c3f400208cad64b245998d0df",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_pim/tests/common",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/replaced.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "155aa10a15be7eea0049eb7035993970089c76ee53bcd152999c6055e8586aa1",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_pim/tests/common/sanity.yaml",
+ "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/deleted.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ab1efb1a3ca7cc688042b32d2d0660eeb0e25ff2bb2c833e9bcdeab5d6a1e0a0",
+ "chksum_sha256": "3c80a977c86fd76c2bbf06ab9878e383170afc5cba3f336e2d4f8ca2de3500fa",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vlans",
+ "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/parsed.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ac628812931497d1846e45df02f6c9fc4ba4b8d61fba9a559793b8b217e08484",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/populate_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ff18091eda8eab8839ce8b146409c956a16da2af0d78204879e2a0d844835c46",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/nxos_hostname",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vlans/tasks",
+ "name": "tests/integration/targets/nxos_hostname/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vlans/tasks/nxapi.yaml",
+ "name": "tests/integration/targets/nxos_hostname/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
+ "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vlans/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_hostname/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
+ "chksum_sha256": "c100293cbf1e43e53f2ff874e3e1079621ae414e404db0078a26044ececac0b1",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vlans/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_hostname/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vlans/meta",
+ "name": "tests/integration/targets/nxos_hostname/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vlans/meta/main.yml",
+ "name": "tests/integration/targets/nxos_hostname/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
+ "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vlans/defaults",
+ "name": "tests/integration/targets/nxos_hostname/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vlans/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_hostname/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vlans/tests",
+ "name": "tests/integration/targets/nxos_hostname/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vlans/tests/common",
+ "name": "tests/integration/targets/nxos_hostname/vars/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "372a997c3a0ce9aa7b42746d99a75295a66504416d94fd1b0c545e58717a6a9d",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/nxos_hostname/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vlans/tests/common/_remove_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9d0b9b581e3e45b412907eecbc4ba5ad1632595e8cb58f397365287ce091bee0",
+ "name": "tests/integration/targets/nxos_hostname/tests/common",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vlans/tests/common/deleted.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e2964f468cfe2c92dbee0504a71845636d76ff4e079dd07ad7f8656cba328221",
+ "name": "tests/integration/targets/nxos_hostname/tests/common/fixtures",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vlans/tests/common/gathered.yaml",
+ "name": "tests/integration/targets/nxos_hostname/tests/common/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "87888ec93930b5630192fd9f60d931700a43910cfe6a3d092b04099ac88eb612",
+ "chksum_sha256": "6cd019ca4bbc9dc9a7657ccbc89a52a8505890bda564813765bc2bb004ef3814",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vlans/tests/common/empty_config.yaml",
+ "name": "tests/integration/targets/nxos_hostname/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "69cfb989d7be0b980e8fc3eb9d33154c66e2cde5df1a9f8b17b1ea0894879212",
+ "chksum_sha256": "292e2e1750dcd0b5114b4c1b2f8fe93125754fa76c1869f64f87e6055da6338f",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vlans/tests/common/rtt.yaml",
+ "name": "tests/integration/targets/nxos_hostname/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "65b9276bee903c86af57ed5a6afee1d84461bf6c7bf3a3cf95aa8369e0c7df57",
+ "chksum_sha256": "b2db6ef6d129f976a7c1dd3d1543020bba577d399fa4e780311e9942d0e39a21",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vlans/tests/common/merged.yaml",
+ "name": "tests/integration/targets/nxos_hostname/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6f9623efb3904d185246e618c1cb0726553a5556941e5c2e91b7c9025de0e89c",
+ "chksum_sha256": "ce390e649cf85c4eddff7df5c0d545f57e389bb36774ae580dadafec45cf2a1b",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vlans/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/nxos_hostname/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c70b2b7642402aeef4772a4a8cc7b7abde208bfedd65fbdcf95231b2ab5a74db",
+ "chksum_sha256": "8564938ffbfc1d998d5ce080e9bc6cb612cf2aeefa19ac79bf9bf6f895800a2e",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vlans/tests/common/_populate_config.yaml",
+ "name": "tests/integration/targets/nxos_hostname/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0fef283f3a139da74d869920dfc1b12b127b20e505c060d30b893d457ea980bc",
+ "chksum_sha256": "c76970334ac8f7dea1c52d4a2e9785b43fe9754ed2cece81e49036d8efce6507",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vlans/tests/common/replaced.yaml",
+ "name": "tests/integration/targets/nxos_hostname/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1f1efb47f41f82d4be94cca66acf388791ed71b63f1f3897f769f7e4110f1be6",
+ "chksum_sha256": "3c610838a6fa946c2237c8292c07b688a1ba7e8096a2d35d75f12f0b58866ed7",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vlans/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/nxos_hostname/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fe16be9cd5316c7526ea489bad81d693f40c2f2351c01f60a4074802f208164e",
+ "chksum_sha256": "0b28a51b56bc716da4598490f3cb3302329f0113eb3ab32fa9a860223eae43f6",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vlans/tests/common/rendered.yaml",
+ "name": "tests/integration/targets/nxos_hostname/tests/common/empty_config.yaml",
"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": "c48e9bf3dac84165ae9953b7ad26ecec061cc599fd5cc78290d048b36119ce19",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vlans/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/nxos_hostname/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9d00aff551522b3a0a61d5ba2b38944de36985bd3353dc67987d76d650ccbea3",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_vlans/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "6e0e085de3251f1846bf350484b27a639383cf70f82effdb6d8aa0b73f105c60",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_vlans/vars/main.yml",
+ "name": "tests/integration/targets/nxos_hostname/tests/common/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fd3723c027909807b1d6ef73222d5bfc96f98c680a9f86f3e89c0366bdd22116",
+ "chksum_sha256": "55288117a1ba1770a3e0bcac6e550c318807316ce84c65e536ba34cc449f62b0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acl_interfaces",
+ "name": "tests/integration/targets/nxos_devicealias",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acl_interfaces/tasks",
+ "name": "tests/integration/targets/nxos_devicealias/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acl_interfaces/tasks/nxapi.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "280d285e1a9b531b25d8b880d3a032933d7135004c4658b7f1eb4872c60cc666",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_acl_interfaces/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_devicealias/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7be6dc51b2f6fb5601e0d7f3498991d34f0910206fe6ed537217c8eba86a3cf5",
+ "chksum_sha256": "f47853340600c1c9b76ed00695079b203ae45896e40acfac2f48e28f2ad98b40",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acl_interfaces/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_devicealias/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c57c3ff656bb8daf9febb3c7a7bff934b952d1ccb83604d93e23ccfc3ea88724",
+ "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acl_interfaces/meta",
+ "name": "tests/integration/targets/nxos_devicealias/meta",
"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_devicealias/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
+ "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acl_interfaces/defaults",
+ "name": "tests/integration/targets/nxos_devicealias/defaults",
"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_devicealias/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acl_interfaces/tests",
+ "name": "tests/integration/targets/nxos_devicealias/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_devicealias/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/remove_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4a810ecec7ad98918852e116b1723828e387fe649b66384bcce7ac7eeda9a3c3",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/populate_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ff18091eda8eab8839ce8b146409c956a16da2af0d78204879e2a0d844835c46",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/parsed.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ac628812931497d1846e45df02f6c9fc4ba4b8d61fba9a559793b8b217e08484",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/empty_config.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "46c8e8809399bcd1bdfe1242e346ac1c340668e32fdbfcba0cfe6a4ad9ff6f4d",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/gathered.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "698995afdf69835fb4ba540353a3e4f213d7954d21073c0cc754b1787cd05231",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/merged.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8eae4ac211ea7861be4677520f4962046223747c3f400208cad64b245998d0df",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/replaced.yml",
+ "name": "tests/integration/targets/nxos_devicealias/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "155aa10a15be7eea0049eb7035993970089c76ee53bcd152999c6055e8586aa1",
+ "chksum_sha256": "a93b103d12183553437c6808898ac57aa27e80ef5d1547e496e4ce5d5039baa9",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/populate_acl.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d44542c7c93f7edcef7326941f254a969cc90fca962286a98a576a1979064cd0",
+ "name": "tests/integration/targets/nxos_acls",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/deleted.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3c80a977c86fd76c2bbf06ab9878e383170afc5cba3f336e2d4f8ca2de3500fa",
+ "name": "tests/integration/targets/nxos_acls/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/rtt.yml",
+ "name": "tests/integration/targets/nxos_acls/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "96d777b4974044947557f7ae5f9400640b0376086e15759c8dd8befb6a65d4b2",
+ "chksum_sha256": "280d285e1a9b531b25d8b880d3a032933d7135004c4658b7f1eb4872c60cc666",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/overridden.yml",
+ "name": "tests/integration/targets/nxos_acls/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "603d8a6ba49dd33261b0c7a152e55df28f2c3e10f09e9ec0f3eebde8d6c5c7ad",
+ "chksum_sha256": "dc2e669d7f6ccc6f6bd958fc52376105ef28a808ec084c11f2dfcecf1471760a",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/rendered.yml",
+ "name": "tests/integration/targets/nxos_acls/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9ab726e93c94df77ac9671e7dfa0b8c89104ea4333e25b56f04830f9bda81942",
+ "chksum_sha256": "c57c3ff656bb8daf9febb3c7a7bff934b952d1ccb83604d93e23ccfc3ea88724",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acl_interfaces/vars",
+ "name": "tests/integration/targets/nxos_acls/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_acls/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6a97fa118eda919bd0c4d9b45fbacbb04ef221e6d264073eda5612e7b57228c9",
+ "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_acl_interfaces/templates",
+ "name": "tests/integration/targets/nxos_acls/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_acls/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_acls/tests",
"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/tests/common",
"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/tests/common/overridden.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201",
+ "chksum_sha256": "9e261e0e1a8b1778739d5bb1c17c75a378186c5c2efd72a351d604e0d7560318",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_address_family/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_acls/tests/common/rtt.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "918e266fd84500fc8a9d7958437789683bd47b7875371afaf4941b60f4594bc7",
+ "chksum_sha256": "4912e31a951706d32e6682e65095ad1794df0cdedeeeec3d5e9ba139e14a0409",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_address_family/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_acls/tests/common/rendered.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_bgp_address_family/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "aa791c7d2f4a1989dd888e3880d230146cee3a448116cb224c31066a7f7573fe",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_address_family/meta/main.yml",
+ "name": "tests/integration/targets/nxos_acls/tests/common/remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090",
+ "chksum_sha256": "6b36b668815324ab75f641e80f9341c4f7b4f264585d07409b01704c5f8a018d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_address_family/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_acls/tests/common/gathered.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8c6126ef877c72fdb6e19f6499e4c3ac4219a5fb4cde44f4529306aac3fd7966",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_address_family/defaults/main.yaml",
+ "name": "tests/integration/targets/nxos_acls/tests/common/merged.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
+ "chksum_sha256": "fc2db360c49a4f960de158645c43115dec175da832363eeaba86a8ea97d1e62b",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_address_family/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_acls/tests/common/replaced.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2b9ce3eb07fb30eb390fc555830b61b4118c485523bf85538a805feb06ea0fb0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_address_family/tests/common",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/nxos_acls/tests/common/deleted.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "14f12dadd4d09d23feee07007209b1eae18bc9c013a50f79ed39ae022e652226",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/_remove_config.yaml",
+ "name": "tests/integration/targets/nxos_acls/tests/common/parsed.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c07047642c717ad5e564697143a11e7cc93a18376d91ee56dc5f44f3d19e22b5",
+ "chksum_sha256": "9c6e2f1a0b9c9d9dc2c33b7906490f5acde968592b9257f095b4cfc38eee3dd9",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/deleted.yaml",
+ "name": "tests/integration/targets/nxos_acls/tests/common/populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e76deb0ccd6d015af64ec4b54fc1da88ccf401b0aa373bda8d4cfabd23b9b1d9",
+ "chksum_sha256": "ea179f0b4974165f1ad36daff838b34a663eb136543c6a908df7b8fe73027eaa",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/gathered.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0aefe84d03b67ec239027816ac3522c7b7cfabac56bd979c781c74cab4b01955",
+ "name": "tests/integration/targets/nxos_snmp_contact",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/empty_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "fed0782bb5669d310ba18f8a49c51be3b1c8b16b0951f388e2280ed4a1769b50",
+ "name": "tests/integration/targets/nxos_snmp_contact/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/merged.yaml",
+ "name": "tests/integration/targets/nxos_snmp_contact/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a6f21fe892ff7e532f40e0d7ecb6bba83f26bb1765ac4177b453d85f896dc633",
+ "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/overridden.yaml",
+ "name": "tests/integration/targets/nxos_snmp_contact/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ba2591fcb1bd54b023d7d45818463cb4d7efb6c7a918133129505ab24d3c9b7d",
+ "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/_populate_config.yaml",
+ "name": "tests/integration/targets/nxos_snmp_contact/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4ad5b3d3c16b81ea4fcf40639099f5191577136f0cf3ff4970ed630d8248ec66",
+ "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/fixtures",
+ "name": "tests/integration/targets/nxos_snmp_contact/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/nxos_snmp_contact/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6189829f4b10872e4553b8c55db04c742cca9c7598d067ddb3eea05e0ab2f0d",
+ "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/replaced.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0a2cbefd9d104a0f9e0370a13ed7e87feb1e74175d922f33d786e604e775a498",
+ "name": "tests/integration/targets/nxos_snmp_contact/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/parsed.yaml",
+ "name": "tests/integration/targets/nxos_snmp_contact/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "29d4c709454554edeef9e3a0e394a93ff71200d5ae09e04d855d8edcedc24549",
+ "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/rendered.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7121942f388ee7ab8d2484101d1a980b1d666be25f8388c6f00438f36a99736d",
+ "name": "tests/integration/targets/nxos_snmp_contact/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_address_family/vars",
+ "name": "tests/integration/targets/nxos_snmp_contact/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_bgp_address_family/vars/main.yml",
+ "name": "tests/integration/targets/nxos_snmp_contact/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "528513c35a708d559281b5758e5c998565f110acf10803504b3cdbf2accf1988",
+ "chksum_sha256": "21c997106ed806dbad5a3cdba01f5e201161020b6498a5d92ac003b702fa579a",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snapshot",
+ "name": "tests/integration/targets/nxos_reboot",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snapshot/tasks",
+ "name": "tests/integration/targets/nxos_reboot/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_reboot/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
+ "chksum_sha256": "b93ca9bd41e9b2ddb1e47c5782c7104ad85b67441154a82ac8954fdaebc62cfc",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snapshot/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_reboot/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
+ "chksum_sha256": "0789afb380e4ee3da221b8e5904d1fc0309acaaf7afce7e63c9ba4c75c34ef57",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snapshot/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_snapshot/meta",
+ "name": "tests/integration/targets/nxos_reboot/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_reboot/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_reboot/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_reboot/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_reboot/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snapshot/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_snapshot/tests/common/sanity.yaml",
+ "name": "tests/integration/targets/nxos_reboot/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "171022870f501d3dcb8c73978ee34038cb5e65c32786bbabc9f638c9ae04be4d",
+ "chksum_sha256": "b4c67bb49d21e284b5a0589f01582abe664f16d3361279b26463e6db76fd2425",
"format": 1
},
{
@@ -16010,906 +15660,864 @@
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_host",
+ "name": "tests/integration/targets/nxos_logging_global",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_host/tasks",
+ "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/tasks/nxapi.yaml",
+ "name": "tests/integration/targets/nxos_logging_global/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
+ "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_host/tasks/main.yaml",
+ "name": "tests/integration/targets/nxos_logging_global/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca",
+ "chksum_sha256": "2396a1bb62aa2d673208deb59766a787971d061630b8467afa525b7fdcb2e95e",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_host/tasks/cli.yaml",
+ "name": "tests/integration/targets/nxos_logging_global/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
+ "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_host/meta",
+ "name": "tests/integration/targets/nxos_logging_global/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_logging_global/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_logging_global/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_logging_global/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
- "format": 1
- },
- {
- "name": "tests/integration/targets/nxos_snmp_host/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_host/tests/common",
+ "name": "tests/integration/targets/nxos_logging_global/vars",
"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_logging_global/vars/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "54b2c813dda14d97a1eef23c8a3b3ff2bdc194b60ec4cf15d7f6e0068802afa5",
+ "chksum_sha256": "15f80d89c3629bea0c669753c52136268f11e94a83ba6e69411fc96ab8449457",
"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/tests",
+ "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/tests/common",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/nxos_snmp_host/tests/common/sanity_snmp_v3_inform.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0156bedc287881d6d9d767fd9720c5821708b9ad3c9c217c5c4b1df0a72a6891",
+ "name": "tests/integration/targets/nxos_logging_global/tests/common/fixtures",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/target-prefixes.network",
+ "name": "tests/integration/targets/nxos_logging_global/tests/common/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1d281d4e38e720eeeee03bdd1df2429947e358ec15ab276b0b29765d99953d63",
+ "chksum_sha256": "3a97c562338de257e93908f409c770a5439d362fcddcdb8d939dc7ff2e7002c6",
"format": 1
},
{
- "name": "tests/.gitignore",
+ "name": "tests/integration/targets/nxos_logging_global/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b5726d3ec9335a09c124469eca039523847a6b0f08a083efaefd002b83326600",
- "format": 1
- },
- {
- "name": "docs",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "d952ab3ac507f65ff98eb58e380db0abe1583198f653d77beaa4e384929ad698",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_vrf_af_module.rst",
+ "name": "tests/integration/targets/nxos_logging_global/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "505afd306e1f21c5940397a50a876c3a2413e197d166db33f9196dfc1b9cb677",
+ "chksum_sha256": "82ec13620a0c096e01a22d68b13c59798667ca68d3ddbbc1be802ff3f415a562",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_user_module.rst",
+ "name": "tests/integration/targets/nxos_logging_global/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d655e1b47fea4edf25adb1fdd20fa7191ef114caaa31d5ce1c2b9edf46b1c63c",
+ "chksum_sha256": "926b1b20a7babe989cc2f1b3e34a16d08368817d3ef38d6903650a294a42cc3a",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_pim_rp_address_module.rst",
+ "name": "tests/integration/targets/nxos_logging_global/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "94630c630affe8dedd940b41d0fcdab02712ade527964334956ca5698280d13d",
+ "chksum_sha256": "dadff9821e586c3a062c7ac4b2936903359a8fc4b2f4cceeb466f558c82b52d1",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_system_module.rst",
+ "name": "tests/integration/targets/nxos_logging_global/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2c8e2849fa4d54b78f6e1d87d2ce57d052b37b75b8ac2739b62ad111e326b617",
+ "chksum_sha256": "04822e2f3237fcae131842012a520b5fde51c1fd4b381ab86aa055d7c076f867",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_ntp_options_module.rst",
+ "name": "tests/integration/targets/nxos_logging_global/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "adeee3c976eeaec6027d4327f520832708c6ecdffabfd321a854c8b6b821e07b",
+ "chksum_sha256": "619954ad3ae24e83760fb7b9f09daaf010f96020056398fe49a04001326f72c8",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_evpn_global_module.rst",
+ "name": "tests/integration/targets/nxos_logging_global/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "993ea85ff1bf02311f55646f0c5dcadc2d216a2819b7902f43470a645d1b90d7",
+ "chksum_sha256": "7c13b226487605fb6b6c73406c97a1972ed4c1995825124cb426d64eaac1a2ec",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_aaa_server_module.rst",
+ "name": "tests/integration/targets/nxos_logging_global/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ae7d06f89fb79b0ff5b7dbb41b289db70e8c602a08c1baac5b059adc72775665",
+ "chksum_sha256": "b1658713d71b118aec3c1e27ae2d2453c239d56b32e3c6d816f5187796b40c7c",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_config_module.rst",
+ "name": "tests/integration/targets/nxos_logging_global/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c973074149659b0f0130eaf0a7339a039cd5d496f13cfbb4e51c59d0af957096",
+ "chksum_sha256": "b4a5f8a10bd86d7609cb6688523bc611e052260c4a06bf9cf202f33eee40a1f5",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_aaa_server_host_module.rst",
+ "name": "tests/integration/targets/nxos_logging_global/tests/common/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e8d1dc8303a82ca59e70c37d6852f8dd1ba6b002e896a9f4f2182148a6944ef7",
+ "chksum_sha256": "dd0584d7e6d6a3aa5942acda6002b2e13a2bd64d59ee04dc5122274268676cc8",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_pim_interface_module.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b7fa1c8e28a128af94059b3d66e3e40c97e7d748a858ff74e77a0e313641c3ff",
+ "name": "tests/integration/targets/nxos_lldp_global",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_fc_interfaces_module.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cd8685843982e7d823622c7c11bbb1fa2bc89409a7759f943a649c39540841d6",
+ "name": "tests/integration/targets/nxos_lldp_global/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_httpapi.rst",
+ "name": "tests/integration/targets/nxos_lldp_global/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eb7f6fd0b46ad4b478746f0518b8d443e541f44ba8d77f999a42a760671ea015",
+ "chksum_sha256": "280d285e1a9b531b25d8b880d3a032933d7135004c4658b7f1eb4872c60cc666",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_overlay_global_module.rst",
+ "name": "tests/integration/targets/nxos_lldp_global/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c8362ed52554894dd979a332e946ede7fa0834c17d8980a08a282320a2a18391",
+ "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_lacp_module.rst",
+ "name": "tests/integration/targets/nxos_lldp_global/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bf3920fe2dbbd42f322d4a0f4dd23c875d01f6a5545dbc648ae5ae3aa62320de",
+ "chksum_sha256": "fe84894e2a9ff992a755f52f856ff23c23dd249fb9fe14dc4f264cd1a6070e12",
"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/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_vrrp_module.rst",
+ "name": "tests/integration/targets/nxos_lldp_global/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "26a52da59610c540242b40091c3fc689cf5b1672a4f36084202ebba38f5589e0",
+ "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_gir_module.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2969b2a880bc98f5272720086059bc55d861fc1ce00c8854c75aa061ba3aa8bf",
+ "name": "tests/integration/targets/nxos_lldp_global/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_bgp_global_module.rst",
+ "name": "tests/integration/targets/nxos_lldp_global/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b21cb51d17f350ce70cf1731fca38c9a502e4b0b35c275a0214c976b9c0ce2c9",
+ "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_file_copy_module.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c38e717848ddfc093b17245d08c45e6beda5d7b1c263453ef0a43171d5008f47",
+ "name": "tests/integration/targets/nxos_lldp_global/vars",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_l2_interfaces_module.rst",
+ "name": "tests/integration/targets/nxos_lldp_global/vars/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0f0b13631588f0c4e04951537a83c446d484cc89ea73b5f3cb7472518f9524ef",
+ "chksum_sha256": "ac136582618b2844cd5bb84e0aaf52f6b4e7a6ea581a0fa0ec5466e9c9c3bd68",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_vtp_domain_module.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "18a52103976ba1d930a98e0e7fa45de34d95a86ca222e59b0ffc9629585cdf6a",
+ "name": "tests/integration/targets/nxos_lldp_global/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"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/tests/common",
+ "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/tests/common/overridden.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "302ee60d5fd7f5ab60ba47c4e55e45c094002dfd3203119bef8fcd7a2a030d3d",
+ "chksum_sha256": "8aeec5521c22e513a4e736c9b51461285abce953173508ae28fb02ecef95952a",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_telemetry_module.rst",
+ "name": "tests/integration/targets/nxos_lldp_global/tests/common/rendered.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2461b4210c818c4300ebd11916a38e830c129d01b644c205846e90a3e1e470c9",
+ "chksum_sha256": "18c1848ef28d20fffd52045955b5a54ca72aea45d5c2ff9060d8856aeeb7162a",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_lldp_interfaces_module.rst",
+ "name": "tests/integration/targets/nxos_lldp_global/tests/common/gathered.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d351b81a44cbdf2e64c1c745af9cdd81b1a6ed89bc5b1e5d960b199a818c23c0",
+ "chksum_sha256": "e5f9f21d8529dd8144e8259391a04642355d3f3c9063db5a27472a5180d6b7dd",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_snmp_community_module.rst",
+ "name": "tests/integration/targets/nxos_lldp_global/tests/common/merged.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "273905bc36e919c6f348d146018b77d4b028457714b0f3b4b2fad6a078680fe7",
+ "chksum_sha256": "e82eb173fbdc3209c167bc096bf1665240e72b24a34f75c19ec1a3b7c5d4c8d1",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_igmp_interface_module.rst",
+ "name": "tests/integration/targets/nxos_lldp_global/tests/common/_remove_config.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1e6eb10d1c630069ea01a42ae07b033d7c7b5aa72fa3a758a74805dc59b6688a",
+ "chksum_sha256": "339639545338297ee483c8e1370eeefc88356fceb240523dbbc6d8c237444982",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_vtp_password_module.rst",
+ "name": "tests/integration/targets/nxos_lldp_global/tests/common/replaced.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aba8c49ea83acf4e1ad8de779ebc06e21940537ce459b53bcfbdabdf72dacd06",
+ "chksum_sha256": "a62a8ac1f40b48c56dbd06eb543897331236925608b859a758f1c91037f17455",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_snmp_user_module.rst",
+ "name": "tests/integration/targets/nxos_lldp_global/tests/common/deleted.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0ebfbf6a1bdda73a9f3e5943dc33bbb38d636865ab213c2e79501baca180a6ef",
+ "chksum_sha256": "ffe0021fbc8bd39a7990267dc791d78f2571f3285efd5fd1244c68159ffca98f",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_evpn_vni_module.rst",
+ "name": "tests/integration/targets/nxos_lldp_global/tests/common/parsed.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7ab07a1a0137a0b43f2fee0160fff6af516646ec848a811a1a46e012c00cefbb",
+ "chksum_sha256": "ca1cd52e0c16bb7a97f9e1aa4eb9c49600b25854f35a93b0bcfeaf3ead1e7c07",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_ping_module.rst",
+ "name": "tests/integration/targets/nxos_lldp_global/tests/common/_populate_config.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "74122faa018ba84c3628abadef990f3888d58a72897d4b56ec41882348a12141",
+ "chksum_sha256": "c7bacd3b7cb077dc6895ecf350711c1bf39e18739a361f6cf514e9dd4d6355f3",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_snmp_server_module.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2dfc1bc683bd7bd38223bf73283e1680999597e4bbef9f73a3a93f829e1e9bce",
+ "name": "tests/integration/targets/nxos_interfaces",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_hsrp_module.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "41fd5b3b6c57a33c8ce81d03798b35d598496b89d13327c18dfe27dedaf99ae4",
+ "name": "tests/integration/targets/nxos_interfaces/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_snmp_contact_module.rst",
+ "name": "tests/integration/targets/nxos_interfaces/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cbb715723ead144ae09062bf77f7f4a73e4a5035a81a7ecec925b00410e8579b",
+ "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_facts_module.rst",
+ "name": "tests/integration/targets/nxos_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bd70b6a7af989f66c15280934d332c07b93afcc7b1e106ea41ff3157ccd66f7f",
+ "chksum_sha256": "64ca5b4de950cd0d788bdd92389f7741e663d949ee6b0e343f1038c573564b64",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_install_os_module.rst",
+ "name": "tests/integration/targets/nxos_interfaces/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "60aba080258dbcb6a750738a28130c662db2bdb378f5a9301974d1b35eb559a0",
+ "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_snapshot_module.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a0e3fad000d677b7f24bf64090f02742004a9cf100306a97f51aff9594fe8d9f",
+ "name": "tests/integration/targets/nxos_interfaces/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_igmp_snooping_module.rst",
+ "name": "tests/integration/targets/nxos_interfaces/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a31b9e7cac6c66069bc1b9a46fbf4f3e778fec3cdbdb55f4b6d672abeaf7d795",
+ "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_ospf_interfaces_module.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "14b703fc053e0bb1480660ba83c421a75d064f6ccc5b036d614cd9fb260045a0",
+ "name": "tests/integration/targets/nxos_interfaces/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_igmp_module.rst",
+ "name": "tests/integration/targets/nxos_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9f12f1c5cb360aa1634964c6343e14141cfce7fc49e37e0062c2957b20459399",
+ "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_bgp_address_family_module.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6110c639e4f6c1ecbf4b26eae3c5cee417711f047ef02b28ac30a6d802fd5152",
+ "name": "tests/integration/targets/nxos_interfaces/vars",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_vrf_interface_module.rst",
+ "name": "tests/integration/targets/nxos_interfaces/vars/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "64296c4de9145ceec2a49e4f09b2573fd163bbe33247b395769cb6833cdd16ba",
+ "chksum_sha256": "c7aa68e2e8b3bb1d6b4258ed279670b1a8e5fc5e6a63b446eab511c3963db1c1",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_vpc_interface_module.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "941e607951f2fe1347329a6f68d9303ff04fcebedfd0792fe5ab181625e120d3",
+ "name": "tests/integration/targets/nxos_interfaces/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "name": "tests/integration/targets/nxos_interfaces/tests/common",
+ "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/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "321573507ba209d6e730e742919ab4a4dd106bb60fbc63e34cf974b9868890b5",
+ "chksum_sha256": "e26569250511575d31ea2338e2abede7fda11240bd583ac7896adccb24abd7f2",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_vlans_module.rst",
+ "name": "tests/integration/targets/nxos_interfaces/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "92873fb2eb3e2513027457a149812b55bcdb3bc05a488ff1eb448a97fcc45be0",
+ "chksum_sha256": "49898e976fb440f5b1ebc404e489b6e2511049c950c8c0d8fe75e251dc5c3671",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_rpm_module.rst",
+ "name": "tests/integration/targets/nxos_interfaces/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e928284ecee7ed27ef75a660db2e02900d8de4cf0d255bfd31a819f4e2abe036",
+ "chksum_sha256": "d5ba532156bd9771e2ec35bb085d404ed049b88e1da827ab9eb6d4dd38a3c871",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_lldp_global_module.rst",
+ "name": "tests/integration/targets/nxos_interfaces/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6994ab2f365796541f268d6d3051e4a192e2b911495e12342d6d3cad12016f2b",
+ "chksum_sha256": "c8d1e0d8e50dd46dc84c73912990ffca760b0f5e1a8ad8ab2f10a90bce902369",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_gir_profile_management_module.rst",
+ "name": "tests/integration/targets/nxos_interfaces/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a61bb74ddc282c53b69e51c4b4cbad0edbe362819e4bc3e823fb2dc892052418",
+ "chksum_sha256": "52f0f66116a7b07a9bfd39bcc2cdabc5a2db68ed24d92751f3f53f08332f0ed0",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_acl_interfaces_module.rst",
+ "name": "tests/integration/targets/nxos_interfaces/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "274afa56a270c6d4b216af200a3bde7d6b964f281fe641ef4e5b0eeacb27c844",
+ "chksum_sha256": "a639b04de3b8a2a70660b4034c291526f9e1f4bee9e24e4e543bd719a4f65a50",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_interfaces_module.rst",
+ "name": "tests/integration/targets/nxos_interfaces/tests/common/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ccbb66492488e26ebf3982743505a0b9fadaa7c6a63adf3d93190064d6419669",
+ "chksum_sha256": "0eb7659a55ab72845d72bf76bcac9618bf84c8d5d55c6fa8f04ff9c15c68a92a",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_snmp_location_module.rst",
+ "name": "tests/integration/targets/nxos_interfaces/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "321530eb77aa27eecab0eb6090a189eee7b9a7431cc94750c1f0f38718058d4d",
+ "chksum_sha256": "3f875bd8877a898338a0402b34179ad17f45b84d1623c72741490f52913eb064",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_devicealias_module.rst",
+ "name": "tests/integration/targets/nxos_interfaces/tests/common/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4b7ad5d619f577089e5a87b5b628c6c869bd4adf86eb8e8c547b491154361dc6",
+ "chksum_sha256": "c5a2d4d2fa3245673307a06eb29fd3b751fad50fde2dac24f84aaff5498a5af7",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_udld_interface_module.rst",
+ "name": "tests/integration/targets/nxos_interfaces/tests/common/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7786920d50729a8a8a73a20bcd0d4296af8095f52590076177511dc0c696dda5",
+ "chksum_sha256": "454396b9f57fd4895a1d8063b565bde8a053291bc6f6e5f934397c75e99ac6cb",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_vpc_module.rst",
+ "name": "tests/integration/targets/nxos_interfaces/tests/common/purged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0aeb5a090773bcf219cb3ab181424bde284e9669ccc3ace93175b739fec4f81a",
+ "chksum_sha256": "832b01df3053b44b5e69f7b1e62fede8df0291af913f7b4abd1d4545439ef718",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_hostname_module.rst",
+ "name": "tests/integration/targets/nxos_interfaces/tests/common/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2cc61e3ea5053c4ee1bb14f41a85e67e4790010b7142e21bb72fcc88a5e715aa",
+ "chksum_sha256": "eb7918401f281cb2d25ccebc214ac1fd9ae10975f3ca4f77f56a53f3cc485a40",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_acls_module.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2a87f6ac4c6d930a3561852c685ea70e75e34f7653b1cfbade26432a94e2b736",
+ "name": "tests/integration/targets/nxos_snmp_community",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_l3_interfaces_module.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a3839881ddd3679d82e6376c6aab14f88f57d9b2b626414e90c1845d02f2e6df",
+ "name": "tests/integration/targets/nxos_snmp_community/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_netconf.rst",
+ "name": "tests/integration/targets/nxos_snmp_community/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "da11bd9904bba75e1ca0484cf6ddc0ebcd0a2ffc12b1e9132d60f8a0bc54705c",
+ "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_logging_global_module.rst",
+ "name": "tests/integration/targets/nxos_snmp_community/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "727f844d56c2eef418f10b022c0295ade96365f73b0654b00b5b586b42dfcf44",
+ "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_snmp_traps_module.rst",
+ "name": "tests/integration/targets/nxos_snmp_community/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "25326502a9e485b1bfe99093b316af67686f797fb8ce8d972c9ae914d8e9da27",
+ "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
"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/meta",
+ "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/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3931a7ccbc77cb049c8d06798076797b250d4fb3b2ad60da12b799b62cf01285",
+ "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_pim_module.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f974bc3ca8293d0e60b7dd26ef3babfc02003702ea5632feee97fbba59fc59a0",
+ "name": "tests/integration/targets/nxos_snmp_community/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_command_module.rst",
+ "name": "tests/integration/targets/nxos_snmp_community/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ceaf1d413d6a78bb8b3611ff936316cd03c6e6bbef6b99d95e9998695f9f3a85",
+ "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"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/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_vxlan_vtep_module.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "920cbc7cf6b2d9736bbeacbf6751674c6b8985af13183432f027070235ed745e",
+ "name": "tests/integration/targets/nxos_snmp_community/tests/common",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_banner_module.rst",
+ "name": "tests/integration/targets/nxos_snmp_community/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f33242bd0d3b632cb5e97dc9ce3e6a9029060e204c87a3554aff1ed36a7d19f0",
+ "chksum_sha256": "7a31444a04409e8b5f9d58864e5405ec3ded7ec744e6e731b3ca0d22ec1a6ee0",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_bfd_global_module.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1ff1d376f71be1de3dc5e97bfae1ea331e92430adb9e31b61e6fdde8da710538",
+ "name": "tests/integration/targets/nxos_vsan",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_bgp_templates_module.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "00bb83305a1e55e1fa99e7008ff4131123f6702514a66409c524e6ca1374c00e",
+ "name": "tests/integration/targets/nxos_vsan/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_ospfv3_module.rst",
+ "name": "tests/integration/targets/nxos_vsan/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ecb974bec3af1412bb18f229492198eaf19c2de8102d65176de90d2f2810566c",
+ "chksum_sha256": "f47853340600c1c9b76ed00695079b203ae45896e40acfac2f48e28f2ad98b40",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_bfd_interfaces_module.rst",
+ "name": "tests/integration/targets/nxos_vsan/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "17874cc21b8abc82fc53aace972f6d49833e45d5c1a2cc672ebe97c5c98c2102",
+ "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_rollback_module.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "04cf041066c5d09e1a5317b7cb7cc1eb2504f0d1faeb9a28d3d59f3ae98c783f",
+ "name": "tests/integration/targets/nxos_vsan/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_reboot_module.rst",
+ "name": "tests/integration/targets/nxos_vsan/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "194778e502ec450e673e2562baf84d459a9d844c3c3f281cd6ed2f2bc2618087",
+ "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_hsrp_interfaces_module.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "717413f42fcf927466b00bb8a1e38f17e5e7391794b8a7431edf822a7a71da9d",
+ "name": "tests/integration/targets/nxos_vsan/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_zone_zoneset_module.rst",
+ "name": "tests/integration/targets/nxos_vsan/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7e6e8c9e520a4ae76c3532b010ea67997a01a555775c112b89d094d129999c3b",
+ "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_cliconf.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "546fc754b81109404a33285c90c3bba565b1a2529e00b7284609b62bb25b4d8b",
+ "name": "tests/integration/targets/nxos_vsan/vars",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_feature_module.rst",
+ "name": "tests/integration/targets/nxos_vsan/vars/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e31d99494f87afad1ecdce42d483a32e523e8e978f42b1955de1f3b0033bcf80",
+ "chksum_sha256": "97b10ee26b05c01b328d79887c41479bd2bf559184fb1df4af53645db6e109ba",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_vrf_module.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9e68ccbcf499b55feecf2b3c6b57f4b79b6dae43fd2671946ae3a65cd16d5ad6",
+ "name": "tests/integration/targets/nxos_vsan/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_lag_interfaces_module.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3ef2ea1a3291066c3f7260b2247a47058a65afae30226465b6b6be9994617789",
+ "name": "tests/integration/targets/nxos_vsan/tests/common",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_ntp_global_module.rst",
+ "name": "tests/integration/targets/nxos_vsan/tests/common/sanity.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4fce862cb2f944fdb7438e8c9796fc1138b700a4acfc3654181d589bfaa170cb",
+ "chksum_sha256": "cb88ac95adfc25626d2c81d7dc7d45341c006ac0490dda44c675101938ec4bcc",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_prefix_lists_module.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e411c76a91d77aac63c31c51864f7247f91fb48226b134bbb1b2cbc29029bfa3",
+ "name": "tests/integration/targets/nxos_lag_interfaces",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_route_maps_module.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "501f2b75dfc0dbbe3054ebcdfad739b3a8ba8f4c367e8d22baabe987addea62c",
+ "name": "tests/integration/targets/nxos_lag_interfaces/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_udld_module.rst",
+ "name": "tests/integration/targets/nxos_lag_interfaces/tasks/nxapi.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "26d0773b5cbd658f39b2c08b9949e45ae5aa8a94405c4f1ef9ed0708c682c4a3",
+ "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_lacp_interfaces_module.rst",
+ "name": "tests/integration/targets/nxos_lag_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "34e04733378368d79deb4513e17315978468b0180b5e9c1d2e4ac863ba3ad1b1",
+ "chksum_sha256": "b9647339f89f9eeca01a09cd4f31da21e0c0c2f10793ea3ea06c24fd8664046e",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_vxlan_vtep_vni_module.rst",
+ "name": "tests/integration/targets/nxos_lag_interfaces/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7aebad3ad5c1c53036df468c782c366a17fea865b15a189f99aff17c171e464b",
+ "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245",
"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/meta",
+ "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/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "738d6be19ec9aea9158035e6f1a2302d3484500ee9b3148e2d01628bf2f9fcdc",
+ "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de",
"format": 1
},
{
- "name": "docs/cisco.nxos.nxos_ntp_auth_module.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "fade0c737ea69c03d4075d1ed2a53eed91225b511d5c18e8b36ce965cd53f724",
+ "name": "tests/integration/targets/nxos_lag_interfaces/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": ".isort.cfg",
+ "name": "tests/integration/targets/nxos_lag_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3fc5fcc23727e7c5b9f1a7035303990229f796a171a84e21051dd1d242b90c52",
+ "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0",
"format": 1
},
{
- "name": "pyproject.toml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1cb6a45dfa2625123890b93ad7fdc156b063c16e8ae6dba11511a1d1986b0fcc",
+ "name": "tests/integration/targets/nxos_lag_interfaces/vars",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "bindep.txt",
+ "name": "tests/integration/targets/nxos_lag_interfaces/vars/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f0e2709e0a523d84f824ccfb6883f62e9d27f70bd7a38be0d18506223ccfe60e",
+ "chksum_sha256": "05455a29f1db6e4d3602a83b356d9d7353037b1ef0627d2d2943b43520af76e6",
"format": 1
},
{
- "name": "changelogs",
+ "name": "tests/integration/targets/nxos_lag_interfaces/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "changelogs/fragments",
+ "name": "tests/integration/targets/nxos_lag_interfaces/tests/common",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "changelogs/fragments/.keep",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "changelogs/config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "54c802c2ade537e8b71ba45d10c73a422778a62aab0093bc6805c75ab8c7f448",
- "format": 1
- },
- {
- "name": "changelogs/changelog.yaml",
+ "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bd41980acf38b47c9690052ff587311d4130c6f8180315df9540e1060d14c8e9",
+ "chksum_sha256": "c10b8ab6302c0df3b5d8c99d1f67a9d92b80b518250c11e650dde96bc8f6b886",
"format": 1
},
{
- "name": "tox.ini",
+ "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "beb3313789623e5570d0871f6115ba563a0d92ea75e8e89cbd9f79045b4fe279",
+ "chksum_sha256": "53c3cd45c91dd6078cf71ea7a9973d65069a61eaef47c49a51c7b66355970a63",
"format": 1
},
{
- "name": "CHANGELOG.rst",
+ "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4ee70734d5e5b80f6503635de8d1655903b775ccf03679361cbb9cec895fc3f0",
+ "chksum_sha256": "4af7dc65128b02d59c3c12d5f94cfc4a77c266e867b79b172fc6425c871f9ffd",
"format": 1
},
{
- "name": ".gitignore",
+ "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "179a6d0780422c32653a71b9395a3ecb8b3859346ffa3e38ca3c8d90f8063fd2",
+ "chksum_sha256": "08e830f9373a4a360949e7c56cf2c374dad94a559adbde314f3b66daa642a0c8",
"format": 1
},
{
- "name": ".pre-commit-config.yaml",
+ "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0f78200450af191fc02f788182fbe9253661ce2257435654c5806b4482487901",
+ "chksum_sha256": "96e1c7636b178b2ae705ac0d7dd2ea67a4d4c1aaf29122900549bde0da43b4de",
"format": 1
},
{
- "name": ".prettierignore",
+ "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fe21cf5ca4606d16ccedb1bccc85ef06771ee697924ca50ecd8ca4c98acce5cc",
- "format": 1
- },
- {
- "name": ".github",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "d6daa4d3b2cb43c7b62b7606b80b4f212348ecb1e28a516d16ac90e02f459266",
"format": 1
},
{
- "name": ".github/dependabot.yml",
+ "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c4d7b4c429faafe0eb46a070eafcd3d8d84d9083b5fe72943d627b5f4ccf0dd8",
- "format": 1
- },
- {
- "name": ".github/workflows",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "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) <!--[![Codecov](https://img.shields.io/codecov/c/github/ansible-collections/vyos)](https://codecov.io/gh/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
<!--start requires_ansible-->
## 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.
<!--end requires_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
<!--start collection 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
</ul>
</td>
<td>
- <div>Administrative state of the interface. Set the value to <code>true</code> to administratively enable the interface or <code>false</code> to disable it</div>
+ <div>Administrative state of the interface. Set the value to <code>true</code> to administratively enable the interface or <code>true</code> to disable it</div>
</td>
</tr>
<tr>
@@ -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
-
- <table border=0 cellpadding=0 class="documentation-table">
- <tr>
- <th colspan="1">Parameter</th>
- <th>Choices/<font color="blue">Defaults</font></th>
- <th width="100%">Comments</th>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>aggregate</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">list</span>
- / <span style="color: purple">elements=dictionary</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>List of logging definitions.</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>dest</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>console</li>
- <li>logfile</li>
- <li>module</li>
- <li>monitor</li>
- <li>server</li>
- </ul>
- </td>
- <td>
- <div>Destination of the logs.</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>dest_level</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Set logging severity levels.</div>
- <div style="font-size: small; color: darkgreen"><br/>aliases: level</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>event</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>link-enable</li>
- <li>link-default</li>
- <li>trunk-enable</li>
- <li>trunk-default</li>
- </ul>
- </td>
- <td>
- <div>Link/trunk enable/default interface configuration logging</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>facility</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Facility name for logging.</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>facility_level</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Set logging severity levels for facility based log messages.</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>facility_link_status</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>link-down-notif</li>
- <li>link-down-error</li>
- <li>link-up-notif</li>
- <li>link-up-error</li>
- </ul>
- </td>
- <td>
- <div>Set logging facility ethpm link status. Not idempotent with version 6.0 images.</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>file_size</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Set logfile size</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>interface</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Interface to be used while configuring source-interface for logging (e.g., &#x27;Ethernet1/2&#x27;, &#x27;mgmt0&#x27;)</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>interface_message</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>add-interface-description</li>
- </ul>
- </td>
- <td>
- <div>Add interface description to interface syslogs. Does not work with version 6.0 images using nxapi as a transport.</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>name</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>If value of <code>dest</code> is <em>logfile</em> it indicates file-name.</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>purge</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">boolean</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li><div style="color: blue"><b>no</b>&nbsp;&larr;</div></li>
- <li>yes</li>
- </ul>
- </td>
- <td>
- <div>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.</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>remote_server</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Hostname or IP Address for remote logging (when dest is &#x27;server&#x27;).</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>state</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li><div style="color: blue"><b>present</b>&nbsp;&larr;</div></li>
- <li>absent</li>
- </ul>
- </td>
- <td>
- <div>State of the logging configuration.</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>timestamp</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>microseconds</li>
- <li>milliseconds</li>
- <li>seconds</li>
- </ul>
- </td>
- <td>
- <div>Set logging timestamp format</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>use_vrf</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>VRF to be used while configuring remote logging (when dest is &#x27;server&#x27;).</div>
- </td>
- </tr>
- </table>
- <br/>
-
-
-Notes
------
-
-.. note::
- - Limited Support for Cisco MDS
- - For information on using CLI and NX-API see the :ref:`NXOS Platform Options guide <nxos_platform_options>`
- - For more information on using Ansible to manage network devices see the :ref:`Ansible Network Guide <network_guide>`
- - For more information on using Ansible to manage Cisco devices see the `Cisco integration page <https://www.ansible.com/integrations/networks/cisco>`_.
-
-
-
-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 <https://docs.ansible.com/ansible/latest/reference_appendices/common_return_values.html#common-return-values>`_, the following are the fields unique to this module:
-
-.. raw:: html
-
- <table border=0 cellpadding=0 class="documentation-table">
- <tr>
- <th colspan="1">Key</th>
- <th>Returned</th>
- <th width="100%">Description</th>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="return-"></div>
- <b>commands</b>
- <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
- <div style="font-size: small">
- <span style="color: purple">list</span>
- </div>
- </td>
- <td>always</td>
- <td>
- <div>The list of configuration mode commands to send to the device</div>
- <br/>
- <div style="font-size: smaller"><b>Sample:</b></div>
- <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">[&#x27;logging console 2&#x27;, &#x27;logging logfile testfile 3&#x27;, &#x27;logging level daemon 0&#x27;]</div>
- </td>
- </tr>
- </table>
- <br/><br/>
-
-
-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
-
- <table border=0 cellpadding=0 class="documentation-table">
- <tr>
- <th colspan="1">Parameter</th>
- <th>Choices/<font color="blue">Defaults</font></th>
- <th width="100%">Comments</th>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>auth_type</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li><div style="color: blue"><b>text</b>&nbsp;&larr;</div></li>
- <li>encrypt</li>
- </ul>
- </td>
- <td>
- <div>Whether the given md5string is in cleartext or has been encrypted. If in cleartext, the device will encrypt it before storing it.</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>authentication</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>on</li>
- <li>off</li>
- </ul>
- </td>
- <td>
- <div>Turns NTP authentication on or off.</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>key_id</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Authentication key identifier (numeric).</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>md5string</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>MD5 String.</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>state</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li><div style="color: blue"><b>present</b>&nbsp;&larr;</div></li>
- <li>absent</li>
- </ul>
- </td>
- <td>
- <div>Manage the state of the resource.</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>trusted_key</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li><div style="color: blue"><b>false</b>&nbsp;&larr;</div></li>
- <li>true</li>
- </ul>
- </td>
- <td>
- <div>Whether the given key is required to be supplied by a time source for the device to synchronize to the time source.</div>
- </td>
- </tr>
- </table>
- <br/>
-
-
-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 <nxos_platform_options>`
- - For more information on using Ansible to manage network devices see the :ref:`Ansible Network Guide <network_guide>`
- - For more information on using Ansible to manage Cisco devices see the `Cisco integration page <https://www.ansible.com/integrations/networks/cisco>`_.
-
-
-
-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 <https://docs.ansible.com/ansible/latest/reference_appendices/common_return_values.html#common-return-values>`_, the following are the fields unique to this module:
-
-.. raw:: html
-
- <table border=0 cellpadding=0 class="documentation-table">
- <tr>
- <th colspan="1">Key</th>
- <th>Returned</th>
- <th width="100%">Description</th>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="return-"></div>
- <b>commands</b>
- <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
- <div style="font-size: small">
- <span style="color: purple">list</span>
- </div>
- </td>
- <td>always</td>
- <td>
- <div>command sent to the device</div>
- <br/>
- <div style="font-size: smaller"><b>Sample:</b></div>
- <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">[&#x27;ntp authentication-key 32 md5 helloWorld 0&#x27;, &#x27;ntp trusted-key 32&#x27;]</div>
- </td>
- </tr>
- </table>
- <br/><br/>
-
-
-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
-
- <table border=0 cellpadding=0 class="documentation-table">
- <tr>
- <th colspan="1">Parameter</th>
- <th>Choices/<font color="blue">Defaults</font></th>
- <th width="100%">Comments</th>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>key_id</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Authentication key identifier to use with given NTP server or peer or keyword &#x27;default&#x27;.</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>peer</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Network address of NTP peer.</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>prefer</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>enabled</li>
- <li>disabled</li>
- </ul>
- </td>
- <td>
- <div>Makes given NTP server or peer the preferred NTP server or peer for the device.</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>server</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Network address of NTP server.</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>source_addr</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Local source address from which NTP messages are sent or keyword &#x27;default&#x27;.</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>source_int</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Local source interface from which NTP messages are sent. Must be fully qualified interface name or keyword &#x27;default&#x27;</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>state</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li><div style="color: blue"><b>present</b>&nbsp;&larr;</div></li>
- <li>absent</li>
- </ul>
- </td>
- <td>
- <div>Manage the state of the resource.</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>vrf_name</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Makes the device communicate with the given NTP server or peer over a specific VRF or keyword &#x27;default&#x27;.</div>
- </td>
- </tr>
- </table>
- <br/>
-
-
-Notes
------
-
-.. note::
- - Limited Support for Cisco MDS
- - For information on using CLI and NX-API see the :ref:`NXOS Platform Options guide <nxos_platform_options>`
- - For more information on using Ansible to manage network devices see the :ref:`Ansible Network Guide <network_guide>`
- - For more information on using Ansible to manage Cisco devices see the `Cisco integration page <https://www.ansible.com/integrations/networks/cisco>`_.
-
-
-
-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 <https://docs.ansible.com/ansible/latest/reference_appendices/common_return_values.html#common-return-values>`_, the following are the fields unique to this module:
-
-.. raw:: html
-
- <table border=0 cellpadding=0 class="documentation-table">
- <tr>
- <th colspan="1">Key</th>
- <th>Returned</th>
- <th width="100%">Description</th>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="return-"></div>
- <b>changed</b>
- <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
- <div style="font-size: small">
- <span style="color: purple">boolean</span>
- </div>
- </td>
- <td>always</td>
- <td>
- <div>check to see if a change was made on the device</div>
- <br/>
- <div style="font-size: smaller"><b>Sample:</b></div>
- <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">True</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="return-"></div>
- <b>end_state</b>
- <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
- <div style="font-size: small">
- <span style="color: purple">dictionary</span>
- </div>
- </td>
- <td>always</td>
- <td>
- <div>k/v pairs of ntp info after module execution</div>
- <br/>
- <div style="font-size: smaller"><b>Sample:</b></div>
- <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">{&#x27;address&#x27;: &#x27;192.0.2.2&#x27;, &#x27;key_id&#x27;: &#x27;48&#x27;, &#x27;peer_type&#x27;: &#x27;server&#x27;, &#x27;prefer&#x27;: &#x27;enabled&#x27;, &#x27;source&#x27;: &#x27;192.0.2.3&#x27;, &#x27;source_type&#x27;: &#x27;source&#x27;}</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="return-"></div>
- <b>existing</b>
- <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
- <div style="font-size: small">
- <span style="color: purple">dictionary</span>
- </div>
- </td>
- <td>always</td>
- <td>
- <div>k/v pairs of existing ntp server/peer</div>
- <br/>
- <div style="font-size: smaller"><b>Sample:</b></div>
- <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">{&#x27;address&#x27;: &#x27;192.0.2.2&#x27;, &#x27;key_id&#x27;: &#x27;32&#x27;, &#x27;peer_type&#x27;: &#x27;server&#x27;, &#x27;prefer&#x27;: &#x27;enabled&#x27;, &#x27;source&#x27;: &#x27;ethernet2/1&#x27;, &#x27;source_type&#x27;: &#x27;source-interface&#x27;}</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="return-"></div>
- <b>proposed</b>
- <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
- <div style="font-size: small">
- <span style="color: purple">dictionary</span>
- </div>
- </td>
- <td>always</td>
- <td>
- <div>k/v pairs of parameters passed into module</div>
- <br/>
- <div style="font-size: smaller"><b>Sample:</b></div>
- <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">{&#x27;address&#x27;: &#x27;192.0.2.2&#x27;, &#x27;key_id&#x27;: &#x27;48&#x27;, &#x27;peer_type&#x27;: &#x27;server&#x27;, &#x27;prefer&#x27;: &#x27;enabled&#x27;, &#x27;source&#x27;: &#x27;192.0.2.3&#x27;, &#x27;source_type&#x27;: &#x27;source&#x27;}</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="return-"></div>
- <b>updates</b>
- <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
- <div style="font-size: small">
- <span style="color: purple">list</span>
- </div>
- </td>
- <td>always</td>
- <td>
- <div>command sent to the device</div>
- <br/>
- <div style="font-size: smaller"><b>Sample:</b></div>
- <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">[&#x27;ntp server 192.0.2.2 prefer key 48&#x27;, &#x27;no ntp source-interface ethernet2/1&#x27;, &#x27;ntp source 192.0.2.3&#x27;]</div>
- </td>
- </tr>
- </table>
- <br/><br/>
-
-
-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
-
- <table border=0 cellpadding=0 class="documentation-table">
- <tr>
- <th colspan="1">Parameter</th>
- <th>Choices/<font color="blue">Defaults</font></th>
- <th width="100%">Comments</th>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>logging</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">boolean</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li>yes</li>
- </ul>
- </td>
- <td>
- <div>Sets whether NTP logging is enabled on the device.</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>master</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">boolean</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li>yes</li>
- </ul>
- </td>
- <td>
- <div>Sets whether the device is an authoritative NTP server.</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>state</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li><div style="color: blue"><b>present</b>&nbsp;&larr;</div></li>
- <li>absent</li>
- </ul>
- </td>
- <td>
- <div>Manage the state of the resource.</div>
- </td>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>stratum</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>If <code>master=true</code>, an optional stratum can be supplied (1-15). The device default is 8.</div>
- </td>
- </tr>
- </table>
- <br/>
-
-
-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 <nxos_platform_options>`
- - For more information on using Ansible to manage network devices see the :ref:`Ansible Network Guide <network_guide>`
- - For more information on using Ansible to manage Cisco devices see the `Cisco integration page <https://www.ansible.com/integrations/networks/cisco>`_.
-
-
-
-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 <https://docs.ansible.com/ansible/latest/reference_appendices/common_return_values.html#common-return-values>`_, the following are the fields unique to this module:
-
-.. raw:: html
-
- <table border=0 cellpadding=0 class="documentation-table">
- <tr>
- <th colspan="1">Key</th>
- <th>Returned</th>
- <th width="100%">Description</th>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="return-"></div>
- <b>updates</b>
- <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
- <div style="font-size: small">
- <span style="color: purple">list</span>
- </div>
- </td>
- <td>always</td>
- <td>
- <div>command sent to the device</div>
- <br/>
- <div style="font-size: smaller"><b>Sample:</b></div>
- <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">[&#x27;no ntp logging&#x27;, &#x27;ntp master 12&#x27;]</div>
- </td>
- </tr>
- </table>
- <br/><br/>
-
-
-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 <https://galaxy.ansible.com/ui/repo/published/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 <nxos_nxapi_module>` 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 <https://docs.ansible.com/ansible/latest/network/getting_started/network_connection_options.html#timeout-options>`_
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<rstart>\S+)\s(?P<rend>\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 <id> under <destination_groups> 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 <destination> under <destination_groups> 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<address>\S+)|peer\s(?P<peer_address>\S+))"
- r"\s*((?P<prefer>prefer)\s*)?(use-vrf\s(?P<vrf_name>\S+)\s*)?"
- r"(key\s(?P<key_id>\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 <http://www.gnu.org/licenses/>.
-#
-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<key_id>\d+)\smd5\s(?P<md5string>\S+)\s(?P<atype>\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 <http://www.gnu.org/licenses/>.
-#
-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/ios/plugins/module_utils/network/ios/providers/cli/__init__.py b/ansible_collections/cisco/nxos/tests/__init__.py
index e69de29bb..e69de29bb 100644
--- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/__init__.py
+++ b/ansible_collections/cisco/nxos/tests/__init__.py
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/ios/plugins/module_utils/network/ios/providers/cli/config/__init__.py b/ansible_collections/cisco/nxos/tests/integration/__init__.py
index e69de29bb..e69de29bb 100644
--- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/__init__.py
+++ b/ansible_collections/cisco/nxos/tests/integration/__init__.py
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.18.txt
index 46cfbc643..46cfbc643 100644
--- a/ansible_collections/cisco/nxos/tests/sanity/ignore-2.13.txt
+++ b/ansible_collections/cisco/nxos/tests/sanity/ignore-2.18.txt
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
--- a/ansible_collections/cisco/nxos/tests/unit/compat/__init__.py
+++ /dev/null
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 <tkuratomi@ansible.com>
-#
-# 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 <http://www.gnu.org/licenses/>.
-
-# 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 <tkuratomi@ansible.com>
-#
-# 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 <http://www.gnu.org/licenses/>.
-
-# 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 <id> under <destination_groups> is required" in str(testdata["msg"])
+ assert "Parameter <id> under <destination_groups> 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 <id> under <sensor_groups> is required" in str(testdata["msg"])
+ assert "Parameter <id> under <sensor_groups> 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 <path> under <sensor_groups> requires <name> key" in str(testdata["msg"])
+ assert "Parameter <path> under <sensor_groups> requires <name> 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 <deleted>" in str(testdata["msg"])
+ assert "Remove config key from playbook when state is <deleted>" 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.yml b/ansible_collections/cloud/common/.github/workflows/changelog.yaml
index 40b5bccf9..21ed48ed6 100644
--- a/ansible_collections/cloud/common/.github/workflows/changelog.yml
+++ b/ansible_collections/cloud/common/.github/workflows/changelog.yaml
@@ -1,8 +1,7 @@
---
-name: CI
-
+name: Changelog
concurrency:
- group: changelog-${{ github.ref }}
+ group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
on:
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
},
{
@@ -400,6 +414,13 @@
"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",
"chksum_type": "sha256",
@@ -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
},
{
@@ -9094,34 +9094,6 @@
"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",
"chksum_type": "sha256",
@@ -9150,13 +9122,6 @@
"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",
"chksum_type": "sha256",
@@ -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
<!--start collection 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).
<!--end collection content-->
@@ -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
--- a/ansible_collections/community/aws/tests/sanity/ignore-2.10.txt
+++ /dev/null
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
--- a/ansible_collections/community/aws/tests/sanity/ignore-2.11.txt
+++ /dev/null
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
--- a/ansible_collections/community/aws/tests/sanity/ignore-2.12.txt
+++ /dev/null
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
--- a/ansible_collections/community/aws/tests/sanity/ignore-2.13.txt
+++ /dev/null
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
--- a/ansible_collections/community/aws/tests/sanity/ignore-2.9.txt
+++ /dev/null
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<attempt>[0-9]+) (?P<label>.+)$', name)
- label = match.group('label')
- attempt = int(match.group('attempt'))
- jobs[label] = max(attempt, jobs.get(label, 0))
-
- for label, attempt in jobs.items():
- name = 'Coverage {attempt} {label}'.format(label=label, attempt=attempt)
- source = os.path.join(source_directory, name)
- source_files = os.listdir(source)
-
- for source_file in source_files:
- source_path = os.path.join(source, source_file)
- destination_path = os.path.join(destination_directory, source_file + '.' + label)
- print('"%s" -> "%s"' % (source_path, destination_path))
- shutil.copyfile(source_path, destination_path)
- count += 1
-
- print('Coverage file count: %d' % count)
- print('##vso[task.setVariable variable=coverageFileCount]%d' % count)
- print('##vso[task.setVariable variable=outputPath]%s' % output_path)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/azure/.azure-pipelines/scripts/process-results.sh b/ansible_collections/community/azure/.azure-pipelines/scripts/process-results.sh
deleted file mode 100755
index f3f1d1bae..000000000
--- a/ansible_collections/community/azure/.azure-pipelines/scripts/process-results.sh
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env bash
-# Check the test results and set variables for use in later steps.
-
-set -o pipefail -eu
-
-if [[ "$PWD" =~ /ansible_collections/ ]]; then
- output_path="tests/output"
-else
- output_path="test/results"
-fi
-
-echo "##vso[task.setVariable variable=outputPath]${output_path}"
-
-if compgen -G "${output_path}"'/junit/*.xml' > /dev/null; then
- echo "##vso[task.setVariable variable=haveTestResults]true"
-fi
-
-if compgen -G "${output_path}"'/bot/ansible-test-*' > /dev/null; then
- echo "##vso[task.setVariable variable=haveBotResults]true"
-fi
-
-if compgen -G "${output_path}"'/coverage/*' > /dev/null; then
- echo "##vso[task.setVariable variable=haveCoverageData]true"
-fi
diff --git a/ansible_collections/community/azure/.azure-pipelines/scripts/publish-codecov.sh b/ansible_collections/community/azure/.azure-pipelines/scripts/publish-codecov.sh
deleted file mode 100755
index 6d184f0b8..000000000
--- a/ansible_collections/community/azure/.azure-pipelines/scripts/publish-codecov.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/env bash
-# Upload code coverage reports to codecov.io.
-# Multiple coverage files from multiple languages are accepted and aggregated after upload.
-# Python coverage, as well as PowerShell and Python stubs can all be uploaded.
-
-set -o pipefail -eu
-
-output_path="$1"
-
-curl --silent --show-error https://ansible-ci-files.s3.us-east-1.amazonaws.com/codecov/codecov.sh > codecov.sh
-
-for file in "${output_path}"/reports/coverage*.xml; do
- name="${file}"
- name="${name##*/}" # remove path
- name="${name##coverage=}" # remove 'coverage=' prefix if present
- name="${name%.xml}" # remove '.xml' suffix
-
- bash codecov.sh \
- -f "${file}" \
- -n "${name}" \
- -X coveragepy \
- -X gcov \
- -X fix \
- -X search \
- -X xcode \
- || echo "Failed to upload code coverage report to codecov.io: ${file}"
-done
diff --git a/ansible_collections/community/azure/.azure-pipelines/scripts/report-coverage.sh b/ansible_collections/community/azure/.azure-pipelines/scripts/report-coverage.sh
deleted file mode 100755
index 1bd91bdc9..000000000
--- a/ansible_collections/community/azure/.azure-pipelines/scripts/report-coverage.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/usr/bin/env bash
-# Generate code coverage reports for uploading to Azure Pipelines and codecov.io.
-
-set -o pipefail -eu
-
-PATH="${PWD}/bin:${PATH}"
-
-if ! ansible-test --help >/dev/null 2>&1; then
- # Install the devel version of ansible-test for generating code coverage reports.
- # This is only used by Ansible Collections, which are typically tested against multiple Ansible versions (in separate jobs).
- # Since a version of ansible-test is required that can work the output from multiple older releases, the devel version is used.
- pip install https://github.com/ansible/ansible/archive/devel.tar.gz --disable-pip-version-check
-fi
-
-ansible-test coverage xml --stub --venv --venv-system-site-packages --color -v
diff --git a/ansible_collections/community/azure/.azure-pipelines/scripts/run-tests.sh b/ansible_collections/community/azure/.azure-pipelines/scripts/run-tests.sh
deleted file mode 100755
index a947fdf01..000000000
--- a/ansible_collections/community/azure/.azure-pipelines/scripts/run-tests.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/usr/bin/env bash
-# Configure the test environment and run the tests.
-
-set -o pipefail -eu
-
-entry_point="$1"
-test="$2"
-read -r -a coverage_branches <<< "$3" # space separated list of branches to run code coverage on for scheduled builds
-
-export COMMIT_MESSAGE
-export COMPLETE
-export COVERAGE
-export IS_PULL_REQUEST
-
-if [ "${SYSTEM_PULLREQUEST_TARGETBRANCH:-}" ]; then
- IS_PULL_REQUEST=true
- COMMIT_MESSAGE=$(git log --format=%B -n 1 HEAD^2)
-else
- IS_PULL_REQUEST=
- COMMIT_MESSAGE=$(git log --format=%B -n 1 HEAD)
-fi
-
-COMPLETE=
-COVERAGE=
-
-if [ "${BUILD_REASON}" = "Schedule" ]; then
- COMPLETE=yes
-
- if printf '%s\n' "${coverage_branches[@]}" | grep -q "^${BUILD_SOURCEBRANCHNAME}$"; then
- COVERAGE=yes
- fi
-fi
-
-"${entry_point}" "${test}" 2>&1 | "$(dirname "$0")/time-command.py"
diff --git a/ansible_collections/community/azure/.azure-pipelines/scripts/time-command.py b/ansible_collections/community/azure/.azure-pipelines/scripts/time-command.py
deleted file mode 100755
index 5e8eb8d4c..000000000
--- a/ansible_collections/community/azure/.azure-pipelines/scripts/time-command.py
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/env python
-"""Prepends a relative timestamp to each input line from stdin and writes it to stdout."""
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-
-import sys
-import time
-
-
-def main():
- """Main program entry point."""
- start = time.time()
-
- sys.stdin.reconfigure(errors='surrogateescape')
- sys.stdout.reconfigure(errors='surrogateescape')
-
- for line in sys.stdin:
- seconds = time.time() - start
- sys.stdout.write('%02d:%02d %s' % (seconds // 60, seconds % 60, line))
- sys.stdout.flush()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/azure/.azure-pipelines/templates/coverage.yml b/ansible_collections/community/azure/.azure-pipelines/templates/coverage.yml
deleted file mode 100644
index 1864e4441..000000000
--- a/ansible_collections/community/azure/.azure-pipelines/templates/coverage.yml
+++ /dev/null
@@ -1,39 +0,0 @@
-# This template adds a job for processing code coverage data.
-# It will upload results to Azure Pipelines and codecov.io.
-# Use it from a job stage that completes after all other jobs have completed.
-# This can be done by placing it in a separate summary stage that runs after the test stage(s) have completed.
-
-jobs:
- - job: Coverage
- displayName: Code Coverage
- container: default
- workspace:
- clean: all
- steps:
- - checkout: self
- fetchDepth: $(fetchDepth)
- path: $(checkoutPath)
- - task: DownloadPipelineArtifact@2
- displayName: Download Coverage Data
- inputs:
- path: coverage/
- patterns: "Coverage */*=coverage.combined"
- - bash: .azure-pipelines/scripts/combine-coverage.py coverage/
- displayName: Combine Coverage Data
- - bash: .azure-pipelines/scripts/report-coverage.sh
- displayName: Generate Coverage Report
- condition: gt(variables.coverageFileCount, 0)
- - task: PublishCodeCoverageResults@1
- inputs:
- codeCoverageTool: Cobertura
- # Azure Pipelines only accepts a single coverage data file.
- # That means only Python or PowerShell coverage can be uploaded, but not both.
- # Set the "pipelinesCoverage" variable to determine which type is uploaded.
- # Use "coverage" for Python and "coverage-powershell" for PowerShell.
- summaryFileLocation: "$(outputPath)/reports/$(pipelinesCoverage).xml"
- displayName: Publish to Azure Pipelines
- condition: gt(variables.coverageFileCount, 0)
- - bash: .azure-pipelines/scripts/publish-codecov.sh "$(outputPath)"
- displayName: Publish to codecov.io
- condition: gt(variables.coverageFileCount, 0)
- continueOnError: true
diff --git a/ansible_collections/community/azure/.azure-pipelines/templates/matrix.yml b/ansible_collections/community/azure/.azure-pipelines/templates/matrix.yml
deleted file mode 100644
index 4e9555dd3..000000000
--- a/ansible_collections/community/azure/.azure-pipelines/templates/matrix.yml
+++ /dev/null
@@ -1,55 +0,0 @@
-# This template uses the provided targets and optional groups to generate a matrix which is then passed to the test template.
-# If this matrix template does not provide the required functionality, consider using the test template directly instead.
-
-parameters:
- # A required list of dictionaries, one per test target.
- # Each item in the list must contain a "test" or "name" key.
- # Both may be provided. If one is omitted, the other will be used.
- - name: targets
- type: object
-
- # An optional list of values which will be used to multiply the targets list into a matrix.
- # Values can be strings or numbers.
- - name: groups
- type: object
- default: []
-
- # An optional format string used to generate the job name.
- # - {0} is the name of an item in the targets list.
- - name: nameFormat
- type: string
- default: "{0}"
-
- # An optional format string used to generate the test name.
- # - {0} is the name of an item in the targets list.
- - name: testFormat
- type: string
- default: "{0}"
-
- # An optional format string used to add the group to the job name.
- # {0} is the formatted name of an item in the targets list.
- # {{1}} is the group -- be sure to include the double "{{" and "}}".
- - name: nameGroupFormat
- type: string
- default: "{0} - {{1}}"
-
- # An optional format string used to add the group to the test name.
- # {0} is the formatted test of an item in the targets list.
- # {{1}} is the group -- be sure to include the double "{{" and "}}".
- - name: testGroupFormat
- type: string
- default: "{0}/{{1}}"
-
-jobs:
- - template: test.yml
- parameters:
- jobs:
- - ${{ if eq(length(parameters.groups), 0) }}:
- - ${{ each target in parameters.targets }}:
- - name: ${{ format(parameters.nameFormat, coalesce(target.name, target.test)) }}
- test: ${{ format(parameters.testFormat, coalesce(target.test, target.name)) }}
- - ${{ if not(eq(length(parameters.groups), 0)) }}:
- - ${{ each group in parameters.groups }}:
- - ${{ each target in parameters.targets }}:
- - name: ${{ format(format(parameters.nameGroupFormat, parameters.nameFormat), coalesce(target.name, target.test), group) }}
- test: ${{ format(format(parameters.testGroupFormat, parameters.testFormat), coalesce(target.test, target.name), group) }}
diff --git a/ansible_collections/community/azure/.azure-pipelines/templates/test.yml b/ansible_collections/community/azure/.azure-pipelines/templates/test.yml
deleted file mode 100644
index 5250ed802..000000000
--- a/ansible_collections/community/azure/.azure-pipelines/templates/test.yml
+++ /dev/null
@@ -1,45 +0,0 @@
-# This template uses the provided list of jobs to create test one or more test jobs.
-# It can be used directly if needed, or through the matrix template.
-
-parameters:
- # A required list of dictionaries, one per test job.
- # Each item in the list must contain a "job" and "name" key.
- - name: jobs
- type: object
-
-jobs:
- - ${{ each job in parameters.jobs }}:
- - job: test_${{ replace(replace(replace(job.test, '/', '_'), '.', '_'), '-', '_') }}
- displayName: ${{ job.name }}
- container: default
- workspace:
- clean: all
- steps:
- - checkout: self
- fetchDepth: $(fetchDepth)
- path: $(checkoutPath)
- - bash: .azure-pipelines/scripts/run-tests.sh "$(entryPoint)" "${{ job.test }}" "$(coverageBranches)"
- displayName: Run Tests
- - bash: .azure-pipelines/scripts/process-results.sh
- condition: succeededOrFailed()
- displayName: Process Results
- - bash: .azure-pipelines/scripts/aggregate-coverage.sh "$(Agent.TempDirectory)"
- condition: eq(variables.haveCoverageData, 'true')
- displayName: Aggregate Coverage Data
- - task: PublishTestResults@2
- condition: eq(variables.haveTestResults, 'true')
- inputs:
- testResultsFiles: "$(outputPath)/junit/*.xml"
- displayName: Publish Test Results
- - task: PublishPipelineArtifact@1
- condition: eq(variables.haveBotResults, 'true')
- displayName: Publish Bot Results
- inputs:
- targetPath: "$(outputPath)/bot/"
- artifactName: "Bot $(System.JobAttempt) $(System.StageDisplayName) $(System.JobDisplayName)"
- - task: PublishPipelineArtifact@1
- condition: eq(variables.haveCoverageData, 'true')
- displayName: Publish Coverage Data
- inputs:
- targetPath: "$(Agent.TempDirectory)/coverage/"
- artifactName: "Coverage $(System.JobAttempt) $(System.StageDisplayName) $(System.JobDisplayName)"
diff --git a/ansible_collections/community/azure/CHANGELOG.rst b/ansible_collections/community/azure/CHANGELOG.rst
deleted file mode 100644
index 8f24761cf..000000000
--- a/ansible_collections/community/azure/CHANGELOG.rst
+++ /dev/null
@@ -1,108 +0,0 @@
-=============================
-Community Azure Release Notes
-=============================
-
-.. contents:: Topics
-
-
-v2.0.0
-======
-
-Release Summary
----------------
-
-This release removes all deprecated content - which is all content in this collection. Please remove all FQCNs mentioning this collection and replace them with the appropriate modules from azure.azcollection.
-
-Removed Features (previously deprecated)
-----------------------------------------
-
-- azure_rm_aks_facts, azure_rm_aks_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_aks_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_aksversion_facts, azure_rm_aksversion_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_aksversion_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_applicationsecuritygroup_facts, azure_rm_applicationsecuritygroup_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_applicationsecuritygroup_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_appserviceplan_facts, azure_rm_appserviceplan_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_appserviceplan_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_automationaccount_facts, azure_rm_automationaccount_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_automationaccount_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_autoscale_facts, azure_rm_autoscale_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_autoscale_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_availabilityset_facts, azure_rm_availabilityset_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_availabilityset_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_cdnendpoint_facts, azure_rm_cdnendpoint_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_cdnendpoint_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_cdnprofile_facts, azure_rm_cdnprofile_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_cdnprofile_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_containerinstance_facts, azure_rm_containerinstance_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_containerinstance_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_containerregistry_facts, azure_rm_containerregistry_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_containerregistry_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_cosmosdbaccount_facts, azure_rm_cosmosdbaccount_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_cosmosdbaccount_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_deployment_facts, azure_rm_deployment_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_deployment_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_devtestlab_facts, azure_rm_devtestlab_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_devtestlab_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_devtestlabarmtemplate_facts, azure_rm_devtestlabarmtemplate_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_devtestlabarmtemplate_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_devtestlabartifact_facts, azure_rm_devtestlabartifact_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_devtestlabartifact_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_devtestlabartifactsource_facts, azure_rm_devtestlabartifactsource_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_devtestlabartifactsource_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_devtestlabcustomimage_facts, azure_rm_devtestlabcustomimage_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_devtestlabcustomimage_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_devtestlabenvironment_facts, azure_rm_devtestlabenvironment_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_devtestlabenvironment_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_devtestlabpolicy_facts, azure_rm_devtestlabpolicy_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_devtestlabpolicy_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_devtestlabschedule_facts, azure_rm_devtestlabschedule_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_devtestlabschedule_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_devtestlabvirtualmachine_facts, azure_rm_devtestlabvirtualmachine_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_devtestlabvirtualmachine_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_devtestlabvirtualnetwork_facts, azure_rm_devtestlabvirtualnetwork_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_devtestlabvirtualnetwork_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_dnsrecordset_facts, azure_rm_dnsrecordset_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_dnsrecordset_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_dnszone_facts, azure_rm_dnszone_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_dnszone_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_functionapp_facts, azure_rm_functionapp_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_functionapp_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_hdinsightcluster_facts, azure_rm_hdinsightcluster_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_hdinsightcluster_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_image_facts, azure_rm_image_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_image_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_loadbalancer_facts, azure_rm_loadbalancer_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_loadbalancer_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_lock_facts, azure_rm_lock_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_lock_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_loganalyticsworkspace_facts, azure_rm_loganalyticsworkspace_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_loganalyticsworkspace_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_managed_disk, azure_rm_manageddisk - the deprecated modules have been removed. Use azure.azcollection.azure_rm_manageddisk instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_managed_disk_facts, azure_rm_manageddisk_facts, azure_rm_manageddisk_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_manageddisk_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_mariadbconfiguration_facts, azure_rm_mariadbconfiguration_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_mariadbconfiguration_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_mariadbdatabase_facts, azure_rm_mariadbdatabase_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_mariadbdatabase_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_mariadbfirewallrule_facts, azure_rm_mariadbfirewallrule_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_mariadbfirewallrule_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_mariadbserver_facts, azure_rm_mariadbserver_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_mariadbserver_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_mysqlconfiguration_facts, azure_rm_mysqlconfiguration_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_mysqlconfiguration_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_mysqldatabase_facts, azure_rm_mysqldatabase_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_mysqldatabase_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_mysqlfirewallrule_facts, azure_rm_mysqlfirewallrule_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_mysqlfirewallrule_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_mysqlserver_facts, azure_rm_mysqlserver_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_mysqlserver_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_networkinterface_facts, azure_rm_networkinterface_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_networkinterface_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_postgresqlconfiguration_facts, azure_rm_postgresqlconfiguration_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_postgresqlconfiguration_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_postgresqldatabase_facts, azure_rm_postgresqldatabase_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_postgresqldatabase_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_postgresqlfirewallrule_facts, azure_rm_postgresqlfirewallrule_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_postgresqlfirewallrule_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_postgresqlserver_facts, azure_rm_postgresqlserver_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_postgresqlserver_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_publicipaddress_facts, azure_rm_publicipaddress_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_publicipaddress_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_rediscache_facts, azure_rm_rediscache_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_rediscache_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_resource_facts, azure_rm_resource_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_resource_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_resourcegroup_facts, azure_rm_resourcegroup_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_resourcegroup_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_roleassignment_facts, azure_rm_roleassignment_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_roleassignment_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_roledefinition_facts, azure_rm_roledefinition_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_roledefinition_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_routetable_facts, azure_rm_routetable_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_routetable_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_securitygroup_facts, azure_rm_securitygroup_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_securitygroup_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_servicebus_facts, azure_rm_servicebus_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_servicebus_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_sqldatabase_facts, azure_rm_sqldatabase_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_sqldatabase_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_sqlfirewallrule_facts, azure_rm_sqlfirewallrule_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_sqlfirewallrule_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_sqlserver_facts, azure_rm_sqlserver_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_sqlserver_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_storageaccount_facts, azure_rm_storageaccount_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_storageaccount_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_subnet_facts, azure_rm_subnet_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_subnet_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_trafficmanagerendpoint_facts, azure_rm_trafficmanagerendpoint_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_trafficmanagerendpoint_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_trafficmanagerprofile_facts, azure_rm_trafficmanagerprofile_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_trafficmanagerprofile_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_virtualmachine_extension, azure_rm_virtualmachineextension - the deprecated modules have been removed. Use azure.azcollection.azure_rm_virtualmachineextension instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_virtualmachine_facts, azure_rm_virtualmachine_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_virtualmachine_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_virtualmachine_scaleset, azure_rm_virtualmachinescaleset - the deprecated modules have been removed. Use azure.azcollection.azure_rm_virtualmachinescaleset instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_virtualmachine_scaleset_facts, azure_rm_virtualmachinescaleset_facts, azure_rm_virtualmachinescaleset_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_virtualmachinescaleset_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_virtualmachineextension_facts, azure_rm_virtualmachineextension_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_virtualmachineextension_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_virtualmachineimage_facts, azure_rm_virtualmachineimage_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_virtualmachineimage_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_virtualmachinescalesetextension_facts, azure_rm_virtualmachinescalesetextension_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_virtualmachinescalesetextension_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_virtualmachinescalesetinstance_facts, azure_rm_virtualmachinescalesetinstance_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_virtualmachinescalesetinstance_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_virtualnetwork_facts, azure_rm_virtualnetwork_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_virtualnetwork_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_virtualnetworkpeering_facts, azure_rm_virtualnetworkpeering_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_virtualnetworkpeering_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-- azure_rm_webapp_facts, azure_rm_webapp_info - the deprecated modules have been removed. Use azure.azcollection.azure_rm_webapp_info instead (https://github.com/ansible-collections/community.azure/pull/31).
-
-v1.1.0
-======
-
-Release Summary
----------------
-
-The community.azure Ansible collection is being deprecated in favor of azure.azcollection which provide the same modules in addition to maintenance and updates (https://github.com/ansible-collections/community.azure/pull/24).
-
-Deprecated Features
--------------------
-
-- All community.azure.azure_rm_<resource>_facts modules are deprecated. Use azure.azcollection.azure_rm_<resource>_info modules instead (https://github.com/ansible-collections/community.azure/pull/24).
-- All community.azure.azure_rm_<resource>_info modules are deprecated. Use azure.azcollection.azure_rm_<resource>_info modules instead (https://github.com/ansible-collections/community.azure/pull/24).
-- community.azure.azure_rm_managed_disk and community.azure.azure_rm_manageddisk are deprecated. Use azure.azcollection.azure_rm_manageddisk instead (https://github.com/ansible-collections/community.azure/pull/24).
-- community.azure.azure_rm_virtualmachine_extension and community.azure.azure_rm_virtualmachineextension are deprecated. Use azure.azcollection.azure_rm_virtualmachineextension instead (https://github.com/ansible-collections/community.azure/pull/24).
-- community.azure.azure_rm_virtualmachine_scaleset and community.azure.azure_rm_virtualmachinescaleset are deprecated. Use azure.azcollection.azure_rm_virtualmachinescaleset instead (https://github.com/ansible-collections/community.azure/pull/24).
diff --git a/ansible_collections/community/azure/COPYING b/ansible_collections/community/azure/COPYING
deleted file mode 100644
index 10926e87f..000000000
--- a/ansible_collections/community/azure/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
- The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works. By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users. We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors. You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
- To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights. Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received. You must make sure that they, too, receive
-or can get the source code. And you must show them these terms so they
-know their rights.
-
- Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
- For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software. For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
- Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so. This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software. The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable. Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products. If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
- Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary. To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS
-
- 0. Definitions.
-
- "This License" refers to version 3 of the GNU General Public License.
-
- "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
- "The Program" refers to any copyrightable work licensed under this
-License. Each licensee is addressed as "you". "Licensees" and
-"recipients" may be individuals or organizations.
-
- To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy. The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
- A "covered work" means either the unmodified Program or a work based
-on the Program.
-
- To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy. Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
- To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies. Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
- An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License. If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
- 1. Source Code.
-
- The "source code" for a work means the preferred form of the work
-for making modifications to it. "Object code" means any non-source
-form of a work.
-
- A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
- The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form. A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
- The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities. However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work. For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
- The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
- The Corresponding Source for a work in source code form is that
-same work.
-
- 2. Basic Permissions.
-
- All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met. This License explicitly affirms your unlimited
-permission to run the unmodified Program. The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work. This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
- You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force. You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright. Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
- Conveying under any other circumstances is permitted solely under
-the conditions stated below. Sublicensing is not allowed; section 10
-makes it unnecessary.
-
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
- No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
- When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
- 4. Conveying Verbatim Copies.
-
- You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
- You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
- 5. Conveying Modified Source Versions.
-
- You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
- a) The work must carry prominent notices stating that you modified
- it, and giving a relevant date.
-
- b) The work must carry prominent notices stating that it is
- released under this License and any conditions added under section
- 7. This requirement modifies the requirement in section 4 to
- "keep intact all notices".
-
- c) You must license the entire work, as a whole, under this
- License to anyone who comes into possession of a copy. This
- License will therefore apply, along with any applicable section 7
- additional terms, to the whole of the work, and all its parts,
- regardless of how they are packaged. This License gives no
- permission to license the work in any other way, but it does not
- invalidate such permission if you have separately received it.
-
- d) If the work has interactive user interfaces, each must display
- Appropriate Legal Notices; however, if the Program has interactive
- interfaces that do not display Appropriate Legal Notices, your
- work need not make them do so.
-
- A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit. Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
- 6. Conveying Non-Source Forms.
-
- You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
- a) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by the
- Corresponding Source fixed on a durable physical medium
- customarily used for software interchange.
-
- b) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that product
- model, to give anyone who possesses the object code either (1) a
- copy of the Corresponding Source for all the software in the
- product that is covered by this License, on a durable physical
- medium customarily used for software interchange, for a price no
- more than your reasonable cost of physically performing this
- conveying of source, or (2) access to copy the
- Corresponding Source from a network server at no charge.
-
- c) Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
- alternative is allowed only occasionally and noncommercially, and
- only if you received the object code with such an offer, in accord
- with subsection 6b.
-
- d) Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to the
- Corresponding Source in the same way through the same place at no
- further charge. You need not require recipients to copy the
- Corresponding Source along with the object code. If the place to
- copy the object code is a network server, the Corresponding Source
- may be on a different server (operated by you or a third party)
- that supports equivalent copying facilities, provided you maintain
- clear directions next to the object code saying where to find the
- Corresponding Source. Regardless of what server hosts the
- Corresponding Source, you remain obligated to ensure that it is
- available for as long as needed to satisfy these requirements.
-
- e) Convey the object code using peer-to-peer transmission, provided
- you inform other peers where the object code and Corresponding
- Source of the work are being offered to the general public at no
- charge under subsection 6d.
-
- A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
- A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling. In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage. For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product. A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
- "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source. The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
- If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information. But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
- The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed. Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
- Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
- 7. Additional Terms.
-
- "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law. If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
- When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it. (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.) You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
- Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
- a) Disclaiming warranty or limiting liability differently from the
- terms of sections 15 and 16 of this License; or
-
- b) Requiring preservation of specified reasonable legal notices or
- author attributions in that material or in the Appropriate Legal
- Notices displayed by works containing it; or
-
- c) Prohibiting misrepresentation of the origin of that material, or
- requiring that modified versions of such material be marked in
- reasonable ways as different from the original version; or
-
- d) Limiting the use for publicity purposes of names of licensors or
- authors of the material; or
-
- e) Declining to grant rights under trademark law for use of some
- trade names, trademarks, or service marks; or
-
- f) Requiring indemnification of licensors and authors of that
- material by anyone who conveys the material (or modified versions of
- it) with contractual assumptions of liability to the recipient, for
- any liability that these contractual assumptions directly impose on
- those licensors and authors.
-
- All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10. If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term. If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
- If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
- Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
- 8. Termination.
-
- You may not propagate or modify a covered work except as expressly
-provided under this License. Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
- However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
- Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
- Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
- 9. Acceptance Not Required for Having Copies.
-
- You are not required to accept this License in order to receive or
-run a copy of the Program. Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance. However,
-nothing other than this License grants you permission to propagate or
-modify any covered work. These actions infringe copyright if you do
-not accept this License. Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
- 10. Automatic Licensing of Downstream Recipients.
-
- Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License. You are not responsible
-for enforcing compliance by third parties with this License.
-
- An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations. If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
- You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License. For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
- 11. Patents.
-
- A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based. The
-work thus licensed is called the contributor's "contributor version".
-
- A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version. For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
- Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
- In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement). To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
- If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients. "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
- If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
- A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License. You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
- Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
- 12. No Surrender of Others' Freedom.
-
- If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all. For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
- 13. Use with the GNU Affero General Public License.
-
- Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work. The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
- 14. Revised Versions of this License.
-
- The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
- If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
- Later license versions may give you additional or different
-permissions. However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
- 15. Disclaimer of Warranty.
-
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. Limitation of Liability.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
- 17. Interpretation of Sections 15 and 16.
-
- If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program 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.
-
- This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
- If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
- <program> Copyright (C) <year> <name of author>
- This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
- You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
- The GNU General Public License does not permit incorporating your program
-into proprietary programs. If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License. But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/ansible_collections/community/azure/FILES.json b/ansible_collections/community/azure/FILES.json
deleted file mode 100644
index 77cc99511..000000000
--- a/ansible_collections/community/azure/FILES.json
+++ /dev/null
@@ -1,334 +0,0 @@
-{
- "files": [
- {
- "name": ".",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": ".azure-pipelines",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": ".azure-pipelines/scripts",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": ".azure-pipelines/scripts/aggregate-coverage.sh",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "820353ffde6fd3ad655118772547549d84ccf0a7ba951e8fb1325f912ef640a0",
- "format": 1
- },
- {
- "name": ".azure-pipelines/scripts/combine-coverage.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e34d4e863a65b9f53c4ca8ae37655858969898a949e050e9cb3cb0d5f02342d0",
- "format": 1
- },
- {
- "name": ".azure-pipelines/scripts/process-results.sh",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c03d7273fe58882a439b6723e92ab89f1e127772b5ce35aa67c546dd62659741",
- "format": 1
- },
- {
- "name": ".azure-pipelines/scripts/publish-codecov.sh",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "70c795c8dbca2534b7909b17911630b7afaa693bbd7154e63a51340bc8b28dad",
- "format": 1
- },
- {
- "name": ".azure-pipelines/scripts/report-coverage.sh",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f6a373322759ccc2736fb25d25d8c402dfe16b5d9a57cfccb1ca8cb136e09663",
- "format": 1
- },
- {
- "name": ".azure-pipelines/scripts/run-tests.sh",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cb08a3ec5715b00d476ae6d63ca22e11a9ad8887239439937d2a7ea342e5a623",
- "format": 1
- },
- {
- "name": ".azure-pipelines/scripts/time-command.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0232f415efeb583ddff907c058986963b775441eaf129d7162aee0acb0d36834",
- "format": 1
- },
- {
- "name": ".azure-pipelines/templates",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": ".azure-pipelines/templates/coverage.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "daf1930264760d47b54588f05c6339fd69ca2d239c77c44bc4cee3c4e9f76447",
- "format": 1
- },
- {
- "name": ".azure-pipelines/templates/matrix.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4fb0d3ffb2125d5806c7597e4f9d4b2af69cf8c337e9d57803081eddd4a6b081",
- "format": 1
- },
- {
- "name": ".azure-pipelines/templates/test.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2cfa1271f94c71f05ffa0b1f763d8946394b5636e14579cda8ee14bb38bbcf1c",
- "format": 1
- },
- {
- "name": ".azure-pipelines/README.md",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "61f20decd3c8fb34ac2cc6ff79f598fc5136e642130a7ba065ccc5aa37960cd2",
- "format": 1
- },
- {
- "name": ".azure-pipelines/azure-pipelines.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d3193a7a5803efaf917abedde39c2042ec02944bddd543282a2879b7f763ce29",
- "format": 1
- },
- {
- "name": "changelogs",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "changelogs/fragments",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "changelogs/fragments/.keep",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "changelogs/changelog.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "58044ac766b9c97d21095147b81632265fdb0c7f314e91d8a4bebd54e78f1ec2",
- "format": 1
- },
- {
- "name": "changelogs/config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "725e6a5f873017468763ab099f7d218cafdeafdf5971130e2305c0de915e5285",
- "format": 1
- },
- {
- "name": "meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "meta/action_groups.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "17900c5cb6c043d1c90df45db9c3e6aafaf48e42869ec20b5c2fe97cae327b43",
- "format": 1
- },
- {
- "name": "meta/runtime.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d6ddd241bee2e5199a655700ca9582aa1e4be78b65d86ae330ef7e1be9354fd6",
- "format": 1
- },
- {
- "name": "tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/sanity",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/sanity/ignore-2.10.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8b8815dcc93330716312b23095ad47d984bd7a039d20a5baa1127ce6d73ca6e8",
- "format": 1
- },
- {
- "name": "tests/sanity/ignore-2.11.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8b8815dcc93330716312b23095ad47d984bd7a039d20a5baa1127ce6d73ca6e8",
- "format": 1
- },
- {
- "name": "tests/sanity/ignore-2.12.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8b8815dcc93330716312b23095ad47d984bd7a039d20a5baa1127ce6d73ca6e8",
- "format": 1
- },
- {
- "name": "tests/sanity/ignore-2.13.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8b8815dcc93330716312b23095ad47d984bd7a039d20a5baa1127ce6d73ca6e8",
- "format": 1
- },
- {
- "name": "tests/sanity/ignore-2.14.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8b8815dcc93330716312b23095ad47d984bd7a039d20a5baa1127ce6d73ca6e8",
- "format": 1
- },
- {
- "name": "tests/utils",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/utils/ado",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/utils/ado/ado.sh",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "879019cb9fa8ea2ac1ae81197ebc880b20071f7e582407a7ba1d30002e9cb968",
- "format": 1
- },
- {
- "name": "tests/utils/shippable",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/utils/shippable/azure.sh",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "dd953f7e779b9962e76492c389142e03174e84a8115f53e56628e2af9e66b818",
- "format": 1
- },
- {
- "name": "tests/utils/shippable/check_matrix.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b228ec82e84aa69522362aa3f41c5b36e6f4e98553511362854456a474d99403",
- "format": 1
- },
- {
- "name": "tests/utils/shippable/cloud.sh",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "dd953f7e779b9962e76492c389142e03174e84a8115f53e56628e2af9e66b818",
- "format": 1
- },
- {
- "name": "tests/utils/shippable/sanity.sh",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a01d92ca36ea457c0e7032ece03a0b485377eef8c8598d8f7c04a185fba279ed",
- "format": 1
- },
- {
- "name": "tests/utils/shippable/shippable.sh",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4cb1454fbf19a21fd59aba82b302e4df97e8960e2f243c3e9cc6410fd121b239",
- "format": 1
- },
- {
- "name": "tests/utils/shippable/timing.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ebb7d3553349747ad41d80899ed353e13cf32fcbecbb6566cf36e9d2bc33703e",
- "format": 1
- },
- {
- "name": "tests/utils/shippable/timing.sh",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f3f3cc03a997cdba719b0542fe668fc612451841cbe840ab36865f30aa54a1bd",
- "format": 1
- },
- {
- "name": "tests/.gitignore",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b5726d3ec9335a09c124469eca039523847a6b0f08a083efaefd002b83326600",
- "format": 1
- },
- {
- "name": "CHANGELOG.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a74258d7ee46a864abfe4793fee43fe90e1156a156fbbfee9c9230b5ee67dc9b",
- "format": 1
- },
- {
- "name": "COPYING",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0ae0485a5bd37a63e63603596417e4eb0e653334fa6c7f932ca3a0e85d4af227",
- "format": 1
- },
- {
- "name": "README.md",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3ec683d47faa8f5de129b70de6cba4adea8c80bd655dc3c56421a48bfcadbd58",
- "format": 1
- },
- {
- "name": "shippable.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "bf58f0d30ac91d3e80bd4217f433c2b1c5cba5e7702506ab72d245e0669d0f5b",
- "format": 1
- }
- ],
- "format": 1
-} \ No newline at end of file
diff --git a/ansible_collections/community/azure/MANIFEST.json b/ansible_collections/community/azure/MANIFEST.json
deleted file mode 100644
index ec7172262..000000000
--- a/ansible_collections/community/azure/MANIFEST.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "collection_info": {
- "namespace": "community",
- "name": "azure",
- "version": "2.0.0",
- "authors": [
- "Ansible (github.com/ansible)"
- ],
- "readme": "README.md",
- "tags": [
- "azure"
- ],
- "description": "The Community Azure Collection",
- "license": [],
- "license_file": "COPYING",
- "dependencies": {
- "azure.azcollection": ">=1.0.0"
- },
- "repository": "https://github.com/ansible-collections/community.azure",
- "documentation": "https://docs.ansible.com/ansible/2.10/collections/community/azure/",
- "homepage": "https://github.com/ansible-collections/community.azure",
- "issues": "https://github.com/ansible-collections/community.azure/issues"
- },
- "file_manifest_file": {
- "name": "FILES.json",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8e7ca871abb1ba686b6502e222d6aa4a8e5c4661a2e1cf437f86c0e945260c9e",
- "format": 1
- },
- "format": 1
-} \ No newline at end of file
diff --git a/ansible_collections/community/azure/README.md b/ansible_collections/community/azure/README.md
deleted file mode 100644
index 765e232f5..000000000
--- a/ansible_collections/community/azure/README.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# Ansible Community Azure Collection
-
-THIS COLLECTION IS DEPRECATED, USE [azure.azcollection](https://github.com/ansible-collections/azure) INSTEAD!
-
-[![Build Status](https://dev.azure.com/ansible/community.azure/_apis/build/status/CI?branchName=master)](https://dev.azure.com/ansible/community.azure/_build?definitionId=30)
-[![Codecov](https://img.shields.io/codecov/c/github/ansible-collections/community.azure)](https://codecov.io/gh/ansible-collections/community.azure)
-
-Provides modules for [Ansible](https://www.ansible.com/community) for various Azure operations.
-
-## Requirements
-
-- ansible version >= 2.9
-
-## Installation
-
-To install Azure collection hosted in Galaxy:
-
-```bash
-ansible-galaxy collection install community.azure
-```
-
-To upgrade to the latest version of Azure collection:
-
-```bash
-ansible-galaxy collection install community.azure --force
-```
-
-## More information
-
-- [Ansible Collection overview](https://github.com/ansible-collections/overview)
-- [Ansible User guide](https://docs.ansible.com/ansible/latest/user_guide/index.html)
-- [Ansible Developer guide](https://docs.ansible.com/ansible/latest/dev_guide/index.html)
-- [Ansible Community code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html)
-
-## Licensing
-
-GNU General Public License v3.0 or later.
-
-See [COPYING](https://www.gnu.org/licenses/gpl-3.0.txt) to see the full text.
diff --git a/ansible_collections/community/azure/changelogs/changelog.yaml b/ansible_collections/community/azure/changelogs/changelog.yaml
deleted file mode 100644
index 7af7fc5d1..000000000
--- a/ansible_collections/community/azure/changelogs/changelog.yaml
+++ /dev/null
@@ -1,228 +0,0 @@
-ancestor: null
-releases:
- 1.1.0:
- changes:
- deprecated_features:
- - All community.azure.azure_rm_<resource>_facts modules are deprecated. Use
- azure.azcollection.azure_rm_<resource>_info modules instead (https://github.com/ansible-collections/community.azure/pull/24).
- - All community.azure.azure_rm_<resource>_info modules are deprecated. Use azure.azcollection.azure_rm_<resource>_info
- modules instead (https://github.com/ansible-collections/community.azure/pull/24).
- - community.azure.azure_rm_managed_disk and community.azure.azure_rm_manageddisk
- are deprecated. Use azure.azcollection.azure_rm_manageddisk instead (https://github.com/ansible-collections/community.azure/pull/24).
- - community.azure.azure_rm_virtualmachine_extension and community.azure.azure_rm_virtualmachineextension
- are deprecated. Use azure.azcollection.azure_rm_virtualmachineextension instead
- (https://github.com/ansible-collections/community.azure/pull/24).
- - community.azure.azure_rm_virtualmachine_scaleset and community.azure.azure_rm_virtualmachinescaleset
- are deprecated. Use azure.azcollection.azure_rm_virtualmachinescaleset instead
- (https://github.com/ansible-collections/community.azure/pull/24).
- release_summary: The community.azure Ansible collection is being deprecated
- in favor of azure.azcollection which provide the same modules in addition
- to maintenance and updates (https://github.com/ansible-collections/community.azure/pull/24).
- fragments:
- - 1.1.0.yaml
- release_date: '2021-11-01'
- 2.0.0:
- changes:
- release_summary: This release removes all deprecated content - which is all
- content in this collection. Please remove all FQCNs mentioning this collection
- and replace them with the appropriate modules from azure.azcollection.
- removed_features:
- - azure_rm_aks_facts, azure_rm_aks_info - the deprecated modules have been removed.
- Use azure.azcollection.azure_rm_aks_info instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_aksversion_facts, azure_rm_aksversion_info - the deprecated modules
- have been removed. Use azure.azcollection.azure_rm_aksversion_info instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_applicationsecuritygroup_facts, azure_rm_applicationsecuritygroup_info
- - the deprecated modules have been removed. Use azure.azcollection.azure_rm_applicationsecuritygroup_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_appserviceplan_facts, azure_rm_appserviceplan_info - the deprecated
- modules have been removed. Use azure.azcollection.azure_rm_appserviceplan_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_automationaccount_facts, azure_rm_automationaccount_info - the deprecated
- modules have been removed. Use azure.azcollection.azure_rm_automationaccount_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_autoscale_facts, azure_rm_autoscale_info - the deprecated modules
- have been removed. Use azure.azcollection.azure_rm_autoscale_info instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_availabilityset_facts, azure_rm_availabilityset_info - the deprecated
- modules have been removed. Use azure.azcollection.azure_rm_availabilityset_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_cdnendpoint_facts, azure_rm_cdnendpoint_info - the deprecated modules
- have been removed. Use azure.azcollection.azure_rm_cdnendpoint_info instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_cdnprofile_facts, azure_rm_cdnprofile_info - the deprecated modules
- have been removed. Use azure.azcollection.azure_rm_cdnprofile_info instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_containerinstance_facts, azure_rm_containerinstance_info - the deprecated
- modules have been removed. Use azure.azcollection.azure_rm_containerinstance_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_containerregistry_facts, azure_rm_containerregistry_info - the deprecated
- modules have been removed. Use azure.azcollection.azure_rm_containerregistry_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_cosmosdbaccount_facts, azure_rm_cosmosdbaccount_info - the deprecated
- modules have been removed. Use azure.azcollection.azure_rm_cosmosdbaccount_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_deployment_facts, azure_rm_deployment_info - the deprecated modules
- have been removed. Use azure.azcollection.azure_rm_deployment_info instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_devtestlab_facts, azure_rm_devtestlab_info - the deprecated modules
- have been removed. Use azure.azcollection.azure_rm_devtestlab_info instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_devtestlabarmtemplate_facts, azure_rm_devtestlabarmtemplate_info
- - the deprecated modules have been removed. Use azure.azcollection.azure_rm_devtestlabarmtemplate_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_devtestlabartifact_facts, azure_rm_devtestlabartifact_info - the
- deprecated modules have been removed. Use azure.azcollection.azure_rm_devtestlabartifact_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_devtestlabartifactsource_facts, azure_rm_devtestlabartifactsource_info
- - the deprecated modules have been removed. Use azure.azcollection.azure_rm_devtestlabartifactsource_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_devtestlabcustomimage_facts, azure_rm_devtestlabcustomimage_info
- - the deprecated modules have been removed. Use azure.azcollection.azure_rm_devtestlabcustomimage_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_devtestlabenvironment_facts, azure_rm_devtestlabenvironment_info
- - the deprecated modules have been removed. Use azure.azcollection.azure_rm_devtestlabenvironment_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_devtestlabpolicy_facts, azure_rm_devtestlabpolicy_info - the deprecated
- modules have been removed. Use azure.azcollection.azure_rm_devtestlabpolicy_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_devtestlabschedule_facts, azure_rm_devtestlabschedule_info - the
- deprecated modules have been removed. Use azure.azcollection.azure_rm_devtestlabschedule_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_devtestlabvirtualmachine_facts, azure_rm_devtestlabvirtualmachine_info
- - the deprecated modules have been removed. Use azure.azcollection.azure_rm_devtestlabvirtualmachine_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_devtestlabvirtualnetwork_facts, azure_rm_devtestlabvirtualnetwork_info
- - the deprecated modules have been removed. Use azure.azcollection.azure_rm_devtestlabvirtualnetwork_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_dnsrecordset_facts, azure_rm_dnsrecordset_info - the deprecated modules
- have been removed. Use azure.azcollection.azure_rm_dnsrecordset_info instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_dnszone_facts, azure_rm_dnszone_info - the deprecated modules have
- been removed. Use azure.azcollection.azure_rm_dnszone_info instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_functionapp_facts, azure_rm_functionapp_info - the deprecated modules
- have been removed. Use azure.azcollection.azure_rm_functionapp_info instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_hdinsightcluster_facts, azure_rm_hdinsightcluster_info - the deprecated
- modules have been removed. Use azure.azcollection.azure_rm_hdinsightcluster_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_image_facts, azure_rm_image_info - the deprecated modules have been
- removed. Use azure.azcollection.azure_rm_image_info instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_loadbalancer_facts, azure_rm_loadbalancer_info - the deprecated modules
- have been removed. Use azure.azcollection.azure_rm_loadbalancer_info instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_lock_facts, azure_rm_lock_info - the deprecated modules have been
- removed. Use azure.azcollection.azure_rm_lock_info instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_loganalyticsworkspace_facts, azure_rm_loganalyticsworkspace_info
- - the deprecated modules have been removed. Use azure.azcollection.azure_rm_loganalyticsworkspace_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_managed_disk, azure_rm_manageddisk - the deprecated modules have
- been removed. Use azure.azcollection.azure_rm_manageddisk instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_managed_disk_facts, azure_rm_manageddisk_facts, azure_rm_manageddisk_info
- - the deprecated modules have been removed. Use azure.azcollection.azure_rm_manageddisk_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_mariadbconfiguration_facts, azure_rm_mariadbconfiguration_info -
- the deprecated modules have been removed. Use azure.azcollection.azure_rm_mariadbconfiguration_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_mariadbdatabase_facts, azure_rm_mariadbdatabase_info - the deprecated
- modules have been removed. Use azure.azcollection.azure_rm_mariadbdatabase_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_mariadbfirewallrule_facts, azure_rm_mariadbfirewallrule_info - the
- deprecated modules have been removed. Use azure.azcollection.azure_rm_mariadbfirewallrule_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_mariadbserver_facts, azure_rm_mariadbserver_info - the deprecated
- modules have been removed. Use azure.azcollection.azure_rm_mariadbserver_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_mysqlconfiguration_facts, azure_rm_mysqlconfiguration_info - the
- deprecated modules have been removed. Use azure.azcollection.azure_rm_mysqlconfiguration_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_mysqldatabase_facts, azure_rm_mysqldatabase_info - the deprecated
- modules have been removed. Use azure.azcollection.azure_rm_mysqldatabase_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_mysqlfirewallrule_facts, azure_rm_mysqlfirewallrule_info - the deprecated
- modules have been removed. Use azure.azcollection.azure_rm_mysqlfirewallrule_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_mysqlserver_facts, azure_rm_mysqlserver_info - the deprecated modules
- have been removed. Use azure.azcollection.azure_rm_mysqlserver_info instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_networkinterface_facts, azure_rm_networkinterface_info - the deprecated
- modules have been removed. Use azure.azcollection.azure_rm_networkinterface_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_postgresqlconfiguration_facts, azure_rm_postgresqlconfiguration_info
- - the deprecated modules have been removed. Use azure.azcollection.azure_rm_postgresqlconfiguration_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_postgresqldatabase_facts, azure_rm_postgresqldatabase_info - the
- deprecated modules have been removed. Use azure.azcollection.azure_rm_postgresqldatabase_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_postgresqlfirewallrule_facts, azure_rm_postgresqlfirewallrule_info
- - the deprecated modules have been removed. Use azure.azcollection.azure_rm_postgresqlfirewallrule_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_postgresqlserver_facts, azure_rm_postgresqlserver_info - the deprecated
- modules have been removed. Use azure.azcollection.azure_rm_postgresqlserver_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_publicipaddress_facts, azure_rm_publicipaddress_info - the deprecated
- modules have been removed. Use azure.azcollection.azure_rm_publicipaddress_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_rediscache_facts, azure_rm_rediscache_info - the deprecated modules
- have been removed. Use azure.azcollection.azure_rm_rediscache_info instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_resource_facts, azure_rm_resource_info - the deprecated modules have
- been removed. Use azure.azcollection.azure_rm_resource_info instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_resourcegroup_facts, azure_rm_resourcegroup_info - the deprecated
- modules have been removed. Use azure.azcollection.azure_rm_resourcegroup_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_roleassignment_facts, azure_rm_roleassignment_info - the deprecated
- modules have been removed. Use azure.azcollection.azure_rm_roleassignment_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_roledefinition_facts, azure_rm_roledefinition_info - the deprecated
- modules have been removed. Use azure.azcollection.azure_rm_roledefinition_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_routetable_facts, azure_rm_routetable_info - the deprecated modules
- have been removed. Use azure.azcollection.azure_rm_routetable_info instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_securitygroup_facts, azure_rm_securitygroup_info - the deprecated
- modules have been removed. Use azure.azcollection.azure_rm_securitygroup_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_servicebus_facts, azure_rm_servicebus_info - the deprecated modules
- have been removed. Use azure.azcollection.azure_rm_servicebus_info instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_sqldatabase_facts, azure_rm_sqldatabase_info - the deprecated modules
- have been removed. Use azure.azcollection.azure_rm_sqldatabase_info instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_sqlfirewallrule_facts, azure_rm_sqlfirewallrule_info - the deprecated
- modules have been removed. Use azure.azcollection.azure_rm_sqlfirewallrule_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_sqlserver_facts, azure_rm_sqlserver_info - the deprecated modules
- have been removed. Use azure.azcollection.azure_rm_sqlserver_info instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_storageaccount_facts, azure_rm_storageaccount_info - the deprecated
- modules have been removed. Use azure.azcollection.azure_rm_storageaccount_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_subnet_facts, azure_rm_subnet_info - the deprecated modules have
- been removed. Use azure.azcollection.azure_rm_subnet_info instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_trafficmanagerendpoint_facts, azure_rm_trafficmanagerendpoint_info
- - the deprecated modules have been removed. Use azure.azcollection.azure_rm_trafficmanagerendpoint_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_trafficmanagerprofile_facts, azure_rm_trafficmanagerprofile_info
- - the deprecated modules have been removed. Use azure.azcollection.azure_rm_trafficmanagerprofile_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_virtualmachine_extension, azure_rm_virtualmachineextension - the
- deprecated modules have been removed. Use azure.azcollection.azure_rm_virtualmachineextension
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_virtualmachine_facts, azure_rm_virtualmachine_info - the deprecated
- modules have been removed. Use azure.azcollection.azure_rm_virtualmachine_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_virtualmachine_scaleset, azure_rm_virtualmachinescaleset - the deprecated
- modules have been removed. Use azure.azcollection.azure_rm_virtualmachinescaleset
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_virtualmachine_scaleset_facts, azure_rm_virtualmachinescaleset_facts,
- azure_rm_virtualmachinescaleset_info - the deprecated modules have been removed.
- Use azure.azcollection.azure_rm_virtualmachinescaleset_info instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_virtualmachineextension_facts, azure_rm_virtualmachineextension_info
- - the deprecated modules have been removed. Use azure.azcollection.azure_rm_virtualmachineextension_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_virtualmachineimage_facts, azure_rm_virtualmachineimage_info - the
- deprecated modules have been removed. Use azure.azcollection.azure_rm_virtualmachineimage_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_virtualmachinescalesetextension_facts, azure_rm_virtualmachinescalesetextension_info
- - the deprecated modules have been removed. Use azure.azcollection.azure_rm_virtualmachinescalesetextension_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_virtualmachinescalesetinstance_facts, azure_rm_virtualmachinescalesetinstance_info
- - the deprecated modules have been removed. Use azure.azcollection.azure_rm_virtualmachinescalesetinstance_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_virtualnetwork_facts, azure_rm_virtualnetwork_info - the deprecated
- modules have been removed. Use azure.azcollection.azure_rm_virtualnetwork_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_virtualnetworkpeering_facts, azure_rm_virtualnetworkpeering_info
- - the deprecated modules have been removed. Use azure.azcollection.azure_rm_virtualnetworkpeering_info
- instead (https://github.com/ansible-collections/community.azure/pull/31).
- - azure_rm_webapp_facts, azure_rm_webapp_info - the deprecated modules have
- been removed. Use azure.azcollection.azure_rm_webapp_info instead (https://github.com/ansible-collections/community.azure/pull/31).
- fragments:
- - 2.0.0.yml
- release_date: '2022-07-26'
diff --git a/ansible_collections/community/azure/meta/action_groups.yml b/ansible_collections/community/azure/meta/action_groups.yml
deleted file mode 100644
index 927052875..000000000
--- a/ansible_collections/community/azure/meta/action_groups.yml
+++ /dev/null
@@ -1,27 +0,0 @@
-azure:
-- azure_rm_aks_facts
-- azure_rm_dnsrecordset_facts
-- azure_rm_dnszone_facts
-- azure_rm_networkinterface_facts
-- azure_rm_publicipaddress_facts
-- azure_rm_securitygroup_facts
-- azure_rm_storageaccount_facts
-- azure_rm_virtualmachine_facts
-- azure_rm_virtualnetwork_facts
-- azure_rm_mysqldatabase_facts
-- azure_rm_loadbalancer_facts
-- azure_rm_manageddisk_facts
-- azure_rm_mysqlserver_facts
-- azure_rm_resource_facts
-- azure_rm_virtualmachine_extension
-- azure_rm_availabilityset_facts
-- azure_rm_appserviceplan_facts
-- azure_rm_functionapp_facts
-- azure_rm_virtualmachineimage_facts
-- azure_rm_sqlserver_facts
-- azure_rm_postgresqldatabase_facts
-- azure_rm_virtualmachine_scaleset
-- azure_rm_managed_disk
-- azure_rm_managed_disk_facts
-- azure_rm_resourcegroup_facts
-- azure_rm_virtualmachine_scaleset_facts
diff --git a/ansible_collections/community/azure/meta/runtime.yml b/ansible_collections/community/azure/meta/runtime.yml
deleted file mode 100644
index 092a03569..000000000
--- a/ansible_collections/community/azure/meta/runtime.yml
+++ /dev/null
@@ -1,596 +0,0 @@
----
-requires_ansible: '>=2.9.10'
-plugin_routing:
- modules:
- azure_rm_aks_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_aks_info instead.
- azure_rm_dnsrecordset_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_dnsrecordset_info instead.
- azure_rm_dnszone_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_dnszone_info instead.
- azure_rm_networkinterface_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_networkinterface_info instead.
- azure_rm_publicipaddress_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_publicipaddress_info instead.
- azure_rm_securitygroup_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_securitygroup_info instead.
- azure_rm_storageaccount_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_storageaccount_info instead.
- azure_rm_virtualmachine_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_virtualmachine_info instead.
- azure_rm_virtualnetwork_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_virtualnetwork_info instead.
- azure_rm_roledefinition_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_roledefinition_info instead.
- azure_rm_autoscale_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_autoscale_info instead.
- azure_rm_mysqldatabase_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_mysqldatabase_info instead.
- azure_rm_devtestlabschedule_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_devtestlabschedule_info instead.
- azure_rm_virtualmachinescaleset_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_virtualmachinescaleset_info instead.
- azure_rm_devtestlabcustomimage_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_devtestlabcustomimage_info instead.
- azure_rm_cosmosdbaccount_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_cosmosdbaccount_info instead.
- azure_rm_subnet_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_subnet_info instead.
- azure_rm_aksversion_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_aksversion_info instead.
- azure_rm_hdinsightcluster_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_hdinsightcluster_info instead.
- azure_rm_virtualmachinescalesetextension_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_virtualmachinescalesetextension_info instead.
- azure_rm_loadbalancer_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_loadbalancer_info instead.
- azure_rm_roleassignment_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_roleassignment_info instead.
- azure_rm_manageddisk_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_manageddisk_info instead.
- azure_rm_mysqlserver_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_mysqlserver_info instead.
- azure_rm_servicebus_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_servicebus_info instead.
- azure_rm_rediscache_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_rediscache_info instead.
- azure_rm_resource_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_resource_info instead.
- azure_rm_routetable_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_routetable_info instead.
- azure_rm_virtualmachine_extension:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_virtualmachineextension instead.
- azure_rm_loganalyticsworkspace_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_loganalyticsworkspace_info instead.
- azure_rm_sqldatabase_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_sqldatabase_info instead.
- azure_rm_devtestlabartifactsource_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_devtestlabartifactsource_info instead.
- azure_rm_deployment_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_deployment_info instead.
- azure_rm_virtualmachineextension_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_virtualmachineextension_info instead.
- azure_rm_applicationsecuritygroup_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_applicationsecuritygroup_info instead.
- azure_rm_availabilityset_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_availabilityset_info instead.
- azure_rm_mariadbdatabase_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_mariadbdatabase_info instead.
- azure_rm_devtestlabenvironment_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_devtestlabenvironment_info instead.
- azure_rm_appserviceplan_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_appserviceplan_info instead.
- azure_rm_containerinstance_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_containerinstance_info instead.
- azure_rm_devtestlabarmtemplate_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_devtestlabarmtemplate_info instead.
- azure_rm_devtestlabartifact_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_devtestlabartifact_info instead.
- azure_rm_virtualmachinescalesetinstance_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_virtualmachinescalesetinstance_info instead.
- azure_rm_cdnendpoint_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_cdnendpoint_info instead.
- azure_rm_trafficmanagerprofile_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_trafficmanagerprofile_info instead.
- azure_rm_functionapp_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_functionapp_info instead.
- azure_rm_virtualmachineimage_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_virtualmachineimage_info instead.
- azure_rm_mariadbconfiguration_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_mariadbconfiguration_info instead.
- azure_rm_virtualnetworkpeering_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_virtualnetworkpeering_info instead.
- azure_rm_sqlserver_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_sqlserver_info instead.
- azure_rm_mariadbfirewallrule_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_mariadbfirewallrule_info instead.
- azure_rm_mysqlconfiguration_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_mysqlconfiguration_info instead.
- azure_rm_mysqlfirewallrule_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_mysqlfirewallrule_info instead.
- azure_rm_postgresqlfirewallrule_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_postgresqlfirewallrule_info instead.
- azure_rm_mariadbserver_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_mariadbserver_info instead.
- azure_rm_postgresqldatabase_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_postgresqldatabase_info instead.
- azure_rm_devtestlabvirtualnetwork_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_devtestlabvirtualnetwork_info instead.
- azure_rm_devtestlabpolicy_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_devtestlabpolicy_info instead.
- azure_rm_trafficmanagerendpoint_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_trafficmanagerendpoint_info instead.
- azure_rm_sqlfirewallrule_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_sqlfirewallrule_info instead.
- azure_rm_containerregistry_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_containerregistry_info instead.
- azure_rm_postgresqlconfiguration_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_postgresqlconfiguration_info instead.
- azure_rm_postgresqlserver_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_postgresqlserver_info instead.
- azure_rm_devtestlab_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_devtestlab_info instead.
- azure_rm_cdnprofile_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_cdnprofile_info instead.
- azure_rm_virtualmachine_scaleset:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_virtualmachinescaleset instead.
- azure_rm_webapp_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_webapp_info instead.
- azure_rm_devtestlabvirtualmachine_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_devtestlabvirtualmachine_info instead.
- azure_rm_image_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_image_info instead.
- azure_rm_managed_disk:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_manageddisk instead.
- azure_rm_automationaccount_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_automationaccount_info instead.
- azure_rm_lock_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_lock_info instead.
- azure_rm_managed_disk_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_manageddisk_info instead.
- azure_rm_resourcegroup_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_resourcegroup_info instead.
- azure_rm_virtualmachine_scaleset_facts:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_virtualmachinescaleset_info instead.
- azure_rm_virtualmachineextension:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_virtualmachineextension instead.
- azure_rm_virtualmachinescaleset:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_virtualmachinescaleset instead.
- azure_rm_mariadbserver_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_mariadbserver_info instead.
- azure_rm_devtestlabartifactsource_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_devtestlabartifactsource_info instead.
- azure_rm_autoscale_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_autoscale_info instead.
- azure_rm_postgresqlconfiguration_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_postgresqlconfiguration_info instead.
- azure_rm_securitygroup_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_securitygroup_info instead.
- azure_rm_functionapp_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_functionapp_info instead.
- azure_rm_resourcegroup_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_resourcegroup_info instead.
- azure_rm_manageddisk_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_manageddisk_info instead.
- azure_rm_manageddisk:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_manageddisk instead.
- azure_rm_devtestlabschedule_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_devtestlabschedule_info instead.
- azure_rm_containerinstance_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_containerinstance_info instead.
- azure_rm_networkinterface_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_networkinterface_info instead.
- azure_rm_devtestlabvirtualnetwork_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_devtestlabvirtualnetwork_info instead.
- azure_rm_devtestlabcustomimage_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_devtestlabcustomimage_info instead.
- azure_rm_resource_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_resource_info instead.
- azure_rm_mariadbfirewallrule_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_mariadbfirewallrule_info instead.
- azure_rm_roleassignment_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_roleassignment_info instead.
- azure_rm_trafficmanagerendpoint_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_trafficmanagerendpoint_info instead.
- azure_rm_mysqlconfiguration_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_mysqlconfiguration_info instead.
- azure_rm_mysqlserver_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_mysqlserver_info instead.
- azure_rm_postgresqldatabase_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_postgresqldatabase_info instead.
- azure_rm_subnet_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_subnet_info instead.
- azure_rm_virtualnetworkpeering_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_virtualnetworkpeering_info instead.
- azure_rm_containerregistry_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_containerregistry_info instead.
- azure_rm_routetable_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_routetable_info instead.
- azure_rm_devtestlabvirtualmachine_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_devtestlabvirtualmachine_info instead.
- azure_rm_virtualmachineimage_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_virtualmachineimage_info instead.
- azure_rm_aksversion_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_aksversion_info instead.
- azure_rm_mysqldatabase_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_mysqldatabase_info instead.
- azure_rm_availabilityset_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_availabilityset_info instead.
- azure_rm_automationaccount_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_automationaccount_info instead.
- azure_rm_virtualmachine_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_virtualmachine_info instead.
- azure_rm_virtualnetwork_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_virtualnetwork_info instead.
- azure_rm_virtualmachinescalesetinstance_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_virtualmachinescalesetinstance_info instead.
- azure_rm_rediscache_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_rediscache_info instead.
- azure_rm_deployment_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_deployment_info instead.
- azure_rm_devtestlabenvironment_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_devtestlabenvironment_info instead.
- azure_rm_dnszone_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_dnszone_info instead.
- azure_rm_applicationsecuritygroup_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_applicationsecuritygroup_info instead.
- azure_rm_postgresqlfirewallrule_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_postgresqlfirewallrule_info instead.
- azure_rm_webapp_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_webapp_info instead.
- azure_rm_devtestlabartifact_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_devtestlabartifact_info instead.
- azure_rm_cdnprofile_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_cdnprofile_info instead.
- azure_rm_lock_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_lock_info instead.
- azure_rm_cdnendpoint_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_cdnendpoint_info instead.
- azure_rm_loadbalancer_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_loadbalancer_info instead.
- azure_rm_publicipaddress_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_publicipaddress_info instead.
- azure_rm_image_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_image_info instead.
- azure_rm_postgresqlserver_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_postgresqlserver_info instead.
- azure_rm_appserviceplan_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_appserviceplan_info instead.
- azure_rm_devtestlab_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_devtestlab_info instead.
- azure_rm_devtestlabpolicy_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_devtestlabpolicy_info instead.
- azure_rm_dnsrecordset_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_dnsrecordset_info instead.
- azure_rm_roledefinition_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_roledefinition_info instead.
- azure_rm_virtualmachinescaleset_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_virtualmachinescaleset_info instead.
- azure_rm_mysqlfirewallrule_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_mysqlfirewallrule_info instead.
- azure_rm_cosmosdbaccount_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_cosmosdbaccount_info instead.
- azure_rm_sqlfirewallrule_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_sqlfirewallrule_info instead.
- azure_rm_sqldatabase_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_sqldatabase_info instead.
- azure_rm_sqlserver_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_sqlserver_info instead.
- azure_rm_servicebus_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_servicebus_info instead.
- azure_rm_virtualmachineextension_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_virtualmachineextension_info instead.
- azure_rm_trafficmanagerprofile_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_trafficmanagerprofile_info instead.
- azure_rm_virtualmachinescalesetextension_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_virtualmachinescalesetextension_info instead.
- azure_rm_mariadbconfiguration_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_mariadbconfiguration_info instead.
- azure_rm_storageaccount_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_storageaccount_info instead.
- azure_rm_mariadbdatabase_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_mariadbdatabase_info instead.
- azure_rm_aks_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_aks_info instead.
- azure_rm_loganalyticsworkspace_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_loganalyticsworkspace_info instead.
- azure_rm_devtestlabarmtemplate_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_devtestlabarmtemplate_info instead.
- azure_rm_hdinsightcluster_info:
- tombstone:
- removal_version: 2.0.0
- warning_text: Use azure.azcollection.azure_rm_hdinsightcluster_info instead.
diff --git a/ansible_collections/community/azure/shippable.yml b/ansible_collections/community/azure/shippable.yml
deleted file mode 100644
index 2f43c46a3..000000000
--- a/ansible_collections/community/azure/shippable.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-language: python
-
-env:
- matrix:
- - T=none
-
-matrix:
- exclude:
- - env: T=none
- include:
- - env: T=devel/sanity/1
- - env: T=devel/sanity/extra
-# - env: T=2.10/sanity
-
-# - env: T=devel/azure/2.7/1
-# - env: T=devel/azure/3.6/1
-# - env: T=2.10/azure/2.7/1
-# - env: T=2.10/azure/3.6/1
-
-
-branches:
- except:
- - "*-patch-*"
- - "revert-*-*"
-
-build:
- ci:
- - tests/utils/shippable/timing.sh tests/utils/shippable/shippable.sh $T
-
-integrations:
- notifications:
- - integrationName: email
- type: email
- on_success: never
- on_failure: never
- on_start: never
- on_pull_request: never
diff --git a/ansible_collections/community/azure/tests/.gitignore b/ansible_collections/community/azure/tests/.gitignore
deleted file mode 100644
index ea1472ec1..000000000
--- a/ansible_collections/community/azure/tests/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-output/
diff --git a/ansible_collections/community/azure/tests/sanity/ignore-2.10.txt b/ansible_collections/community/azure/tests/sanity/ignore-2.10.txt
deleted file mode 100644
index caf221794..000000000
--- a/ansible_collections/community/azure/tests/sanity/ignore-2.10.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-tests/utils/shippable/check_matrix.py replace-urlopen
-tests/utils/shippable/timing.py shebang
diff --git a/ansible_collections/community/azure/tests/sanity/ignore-2.11.txt b/ansible_collections/community/azure/tests/sanity/ignore-2.11.txt
deleted file mode 100644
index caf221794..000000000
--- a/ansible_collections/community/azure/tests/sanity/ignore-2.11.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-tests/utils/shippable/check_matrix.py replace-urlopen
-tests/utils/shippable/timing.py shebang
diff --git a/ansible_collections/community/azure/tests/sanity/ignore-2.12.txt b/ansible_collections/community/azure/tests/sanity/ignore-2.12.txt
deleted file mode 100644
index caf221794..000000000
--- a/ansible_collections/community/azure/tests/sanity/ignore-2.12.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-tests/utils/shippable/check_matrix.py replace-urlopen
-tests/utils/shippable/timing.py shebang
diff --git a/ansible_collections/community/azure/tests/sanity/ignore-2.13.txt b/ansible_collections/community/azure/tests/sanity/ignore-2.13.txt
deleted file mode 100644
index caf221794..000000000
--- a/ansible_collections/community/azure/tests/sanity/ignore-2.13.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-tests/utils/shippable/check_matrix.py replace-urlopen
-tests/utils/shippable/timing.py shebang
diff --git a/ansible_collections/community/azure/tests/sanity/ignore-2.14.txt b/ansible_collections/community/azure/tests/sanity/ignore-2.14.txt
deleted file mode 100644
index caf221794..000000000
--- a/ansible_collections/community/azure/tests/sanity/ignore-2.14.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-tests/utils/shippable/check_matrix.py replace-urlopen
-tests/utils/shippable/timing.py shebang
diff --git a/ansible_collections/community/azure/tests/utils/ado/ado.sh b/ansible_collections/community/azure/tests/utils/ado/ado.sh
deleted file mode 100755
index 55d7f66da..000000000
--- a/ansible_collections/community/azure/tests/utils/ado/ado.sh
+++ /dev/null
@@ -1,124 +0,0 @@
-#!/usr/bin/env bash
-
-set -o pipefail -eux
-
-declare -a args
-IFS='/:' read -ra args <<< "$1"
-
-group="${args[0]}"
-
-command -v python
-python -V
-
-if [ "$2" = "2.7" ]
-then
- command -v pip
- pip --version
- pip list --disable-pip-version-check
-else
- command -v pip3
- pip3 --version
- pip3 list --disable-pip-version-check
-fi
-
-export PATH="${PWD}/bin:${PATH}"
-export PYTHONIOENCODING="UTF-8"
-export LC_ALL="en_US.utf-8"
-
-if [ "$2" = "2.7" ]
-then
- pip install virtualenv
- virtualenv --python /usr/bin/python2.7 ~/ansible-venv
-else
- pip3 install virtualenv
- virtualenv --python /usr/bin/python"$2" ~/ansible-venv
-fi
-
-set +ux
-. ~/ansible-venv/bin/activate
-set -ux
-
-if [ "$2" = "2.7" ]
-then
- if [ "$3" = "devel" ]
- then
- pip install git+https://github.com/ansible/ansible.git@devel --disable-pip-version-check
- else
- git clone https://github.com/ansible/ansible.git
- cd "ansible"
- git checkout "stable-$3"
- source hacking/env-setup
- pip install paramiko PyYAML Jinja2 httplib2 six
- fi
-else
- if [ "$3" = "devel" ]
- then
- pip3 install git+https://github.com/ansible/ansible.git@devel --disable-pip-version-check
- else
- git clone https://github.com/ansible/ansible.git
- cd "ansible"
- git checkout "stable-$3"
- source hacking/env-setup
- pip3 install paramiko PyYAML Jinja2 httplib2 six
- fi
-fi
-
-TEST_DIR="${HOME}/.ansible/ansible_collections/azure/azcollection"
-mkdir -p "${TEST_DIR}"
-cp -aT "${SHIPPABLE_BUILD_DIR}" "${TEST_DIR}"
-cd "${TEST_DIR}"
-mkdir -p shippable/testresults
-
-if [ "$2" = "2.7" ]
-then
- pip install --upgrade pip
- pip install -I -r "${TEST_DIR}/requirements-azure.txt"
- pip3 install setuptools
- pip3 install -I -r "${TEST_DIR}/sanity-requirements-azure.txt"
- pip3 list
-else
- pip3 install -I -r "${TEST_DIR}/requirements-azure.txt"
- pip3 install -I -r "${TEST_DIR}/sanity-requirements-azure.txt"
- pip3 list
-fi
-
-timeout=60
-
-if [ "$4" = "all" ]
-then
- echo "All module need test"
-else
- path_dir="${TEST_DIR}/tests/integration/targets/"
- for item in "$path_dir"*
- do
- if [ "${item}" = "$path_dir""$4" ]
- then
- echo "PASS"
- else
- echo " " >> "${item}"/aliases
- echo "disabled" >> "${item}"/aliases
- fi
- done
-fi
-echo '--------------------------------------------'
-ansible --version
-echo '--------------------------------------------'
-
-ansible-test env --dump --show --timeout "${timeout}" --color -v
-
-cat <<EOF >> "${TEST_DIR}"/tests/integration/cloud-config-azure.ini
-[default]
-AZURE_CLIENT_ID:${AZURE_CLIENT_ID}
-AZURE_SECRET:${AZURE_SECRET}
-AZURE_SUBSCRIPTION_ID:${AZURE_SUBSCRIPTION_ID}
-AZURE_TENANT:${AZURE_TENANT}
-RESOURCE_GROUP:${RESOURCE_GROUP}
-RESOURCE_GROUP_SECONDARY:${RESOURCE_GROUP_SECONDARY}
-EOF
-
-if [ "sanity" = "${group}" ]
-then
- ansible-test sanity --color -v --junit
-else
- ansible-test integration --color -v --retry-on-error "shippable/azure/group${group}/" --allow-destructive
-fi
diff --git a/ansible_collections/community/azure/tests/utils/shippable/azure.sh b/ansible_collections/community/azure/tests/utils/shippable/azure.sh
deleted file mode 100755
index d76c32282..000000000
--- a/ansible_collections/community/azure/tests/utils/shippable/azure.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/env bash
-
-set -o pipefail -eux
-
-declare -a args
-IFS='/:' read -ra args <<< "$1"
-
-cloud="${args[0]}"
-python="${args[1]}"
-group="${args[2]}"
-
-target="shippable/${cloud}/group${group}/"
-
-stage="${S:-prod}"
-
-# shellcheck disable=SC2086
-ansible-test integration --color -v --retry-on-error "${target}" ${COVERAGE:+"$COVERAGE"} ${CHANGED:+"$CHANGED"} ${UNSTABLE:+"$UNSTABLE"} \
- --remote-terminate always --remote-stage "${stage}" \
- --docker --python "${python}"
diff --git a/ansible_collections/community/azure/tests/utils/shippable/check_matrix.py b/ansible_collections/community/azure/tests/utils/shippable/check_matrix.py
deleted file mode 100755
index fb5594668..000000000
--- a/ansible_collections/community/azure/tests/utils/shippable/check_matrix.py
+++ /dev/null
@@ -1,120 +0,0 @@
-#!/usr/bin/env python
-"""Verify the currently executing Shippable test matrix matches the one defined in the "shippable.yml" file."""
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-
-import datetime
-import json
-import os
-import re
-import sys
-import time
-
-try:
- from typing import NoReturn
-except ImportError:
- NoReturn = None
-
-try:
- # noinspection PyCompatibility
- from urllib2 import urlopen # pylint: disable=ansible-bad-import-from
-except ImportError:
- # noinspection PyCompatibility
- from urllib.request import urlopen
-
-
-def main(): # type: () -> None
- """Main entry point."""
- repo_full_name = os.environ['REPO_FULL_NAME']
- required_repo_full_name = 'ansible-collections/community.azure'
-
- if repo_full_name != required_repo_full_name:
- sys.stderr.write('Skipping matrix check on repo "%s" which is not "%s".\n' % (repo_full_name, required_repo_full_name))
- return
-
- with open('shippable.yml', 'rb') as yaml_file:
- yaml = yaml_file.read().decode('utf-8').splitlines()
-
- defined_matrix = [match.group(1) for match in [re.search(r'^ *- env: T=(.*)$', line) for line in yaml] if match and match.group(1) != 'none']
-
- if not defined_matrix:
- fail('No matrix entries found in the "shippable.yml" file.',
- 'Did you modify the "shippable.yml" file?')
-
- run_id = os.environ['SHIPPABLE_BUILD_ID']
- sleep = 1
- jobs = []
-
- for attempts_remaining in range(4, -1, -1):
- try:
- jobs = json.loads(urlopen('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)
-
- break
- except Exception as ex:
- if not attempts_remaining:
- fail('Unable to retrieve Shippable run %s matrix.' % run_id,
- str(ex))
-
- sys.stderr.write('Unable to retrieve Shippable run %s matrix: %s\n' % (run_id, ex))
- sys.stderr.write('Trying again in %d seconds...\n' % sleep)
- time.sleep(sleep)
- sleep *= 2
-
- if len(jobs) != len(defined_matrix):
- if len(jobs) == 1:
- hint = '\n\nMake sure you do not use the "Rebuild with SSH" option.'
- else:
- hint = ''
-
- fail('Shippable run %s has %d jobs instead of the expected %d jobs.' % (run_id, len(jobs), len(defined_matrix)),
- 'Try re-running the entire matrix.%s' % hint)
-
- actual_matrix = dict((job.get('jobNumber'), dict(tuple(line.split('=', 1)) for line in job.get('env', [])).get('T', '')) for job in jobs)
- errors = [(job_number, test, actual_matrix.get(job_number)) for job_number, test in enumerate(defined_matrix, 1) if actual_matrix.get(job_number) != test]
-
- if len(errors):
- error_summary = '\n'.join('Job %s expected "%s" but found "%s" instead.' % (job_number, expected, actual) for job_number, expected, actual in errors)
-
- fail('Shippable run %s has a job matrix mismatch.' % run_id,
- 'Try re-running the entire matrix.\n\n%s' % error_summary)
-
-
-def fail(message, output): # type: (str, str) -> NoReturn
- # Include a leading newline to improve readability on Shippable "Tests" tab.
- # Without this, the first line becomes indented.
- output = '\n' + output.strip()
-
- timestamp = datetime.datetime.utcnow().replace(microsecond=0).isoformat()
-
- # hack to avoid requiring junit-xml, which isn't pre-installed on Shippable outside our test containers
- xml = '''
-<?xml version="1.0" encoding="utf-8"?>
-<testsuites disabled="0" errors="1" failures="0" tests="1" time="0.0">
-\t<testsuite disabled="0" errors="1" failures="0" file="None" log="None" name="ansible-test" skipped="0" tests="1" time="0" timestamp="%s" url="None">
-\t\t<testcase classname="timeout" name="timeout">
-\t\t\t<error message="%s" type="error">%s</error>
-\t\t</testcase>
-\t</testsuite>
-</testsuites>
-''' % (timestamp, message, output)
-
- path = 'shippable/testresults/check-matrix.xml'
- dir_path = os.path.dirname(path)
-
- if not os.path.exists(dir_path):
- os.makedirs(dir_path)
-
- with open(path, 'w') as junit_fd:
- junit_fd.write(xml.lstrip())
-
- sys.stderr.write(message + '\n')
- sys.stderr.write(output + '\n')
-
- sys.exit(1)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/azure/tests/utils/shippable/cloud.sh b/ansible_collections/community/azure/tests/utils/shippable/cloud.sh
deleted file mode 100755
index d76c32282..000000000
--- a/ansible_collections/community/azure/tests/utils/shippable/cloud.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/env bash
-
-set -o pipefail -eux
-
-declare -a args
-IFS='/:' read -ra args <<< "$1"
-
-cloud="${args[0]}"
-python="${args[1]}"
-group="${args[2]}"
-
-target="shippable/${cloud}/group${group}/"
-
-stage="${S:-prod}"
-
-# shellcheck disable=SC2086
-ansible-test integration --color -v --retry-on-error "${target}" ${COVERAGE:+"$COVERAGE"} ${CHANGED:+"$CHANGED"} ${UNSTABLE:+"$UNSTABLE"} \
- --remote-terminate always --remote-stage "${stage}" \
- --docker --python "${python}"
diff --git a/ansible_collections/community/azure/tests/utils/shippable/sanity.sh b/ansible_collections/community/azure/tests/utils/shippable/sanity.sh
deleted file mode 100755
index c216220e8..000000000
--- a/ansible_collections/community/azure/tests/utils/shippable/sanity.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/env bash
-
-set -o pipefail -eux
-
-declare -a args
-IFS='/:' read -ra args <<< "$1"
-
-group="${args[1]}"
-
-if [ "${BASE_BRANCH:-}" ]; then
- base_branch="origin/${BASE_BRANCH}"
-else
- base_branch=""
-fi
-
-if [ "${group}" == "extra" ]; then
- # ansible-galaxy -vvv collection install community.internal_test_tools
- git clone --single-branch --depth 1 https://github.com/ansible-collections/community.internal_test_tools.git ../internal_test_tools
-
- ../internal_test_tools/tools/run.py --color
- exit
-fi
-
-# shellcheck disable=SC2086
-ansible-test sanity --color -v --junit ${COVERAGE:+"$COVERAGE"} ${CHANGED:+"$CHANGED"} \
- --docker --base-branch "${base_branch}" \
- --allow-disabled
diff --git a/ansible_collections/community/azure/tests/utils/shippable/shippable.sh b/ansible_collections/community/azure/tests/utils/shippable/shippable.sh
deleted file mode 100755
index 363f06bcd..000000000
--- a/ansible_collections/community/azure/tests/utils/shippable/shippable.sh
+++ /dev/null
@@ -1,203 +0,0 @@
-#!/usr/bin/env bash
-
-set -o pipefail -eux
-
-declare -a args
-IFS='/:' read -ra args <<< "$1"
-
-ansible_version="${args[0]}"
-script="${args[1]}"
-
-function join {
- local IFS="$1";
- shift;
- echo "$*";
-}
-
-test="$(join / "${args[@]:1}")"
-
-docker images ansible/ansible
-docker images quay.io/ansible/*
-docker ps
-
-for container in $(docker ps --format '{{.Image}} {{.ID}}' | grep -v -e '^drydock/' -e '^quay.io/ansible/azure-pipelines-test-container:' | sed 's/^.* //'); do
- docker rm -f "${container}" || true # ignore errors
-done
-
-docker ps
-
-if [ -d /home/shippable/cache/ ]; then
- ls -la /home/shippable/cache/
-fi
-
-command -v python
-python -V
-
-function retry
-{
- # shellcheck disable=SC2034
- for repetition in 1 2 3; do
- set +e
- "$@"
- result=$?
- set -e
- if [ ${result} == 0 ]; then
- return ${result}
- fi
- echo "@* -> ${result}"
- done
- echo "Command '@*' failed 3 times!"
- exit 255
-}
-
-command -v pip
-pip --version
-pip list --disable-pip-version-check
-if [ "${ansible_version}" == "devel" ]; then
- retry pip install https://github.com/ansible/ansible/archive/devel.tar.gz --disable-pip-version-check
-else
- retry pip install "https://github.com/ansible/ansible/archive/stable-${ansible_version}.tar.gz" --disable-pip-version-check
-fi
-
-if [ "${SHIPPABLE_BUILD_ID:-}" ]; then
- export ANSIBLE_COLLECTIONS_PATHS="${HOME}/.ansible"
- SHIPPABLE_RESULT_DIR="$(pwd)/shippable"
- TEST_DIR="${ANSIBLE_COLLECTIONS_PATHS}/ansible_collections/community/azure"
- mkdir -p "${TEST_DIR}"
- cp -aT "${SHIPPABLE_BUILD_DIR}" "${TEST_DIR}"
- cd "${TEST_DIR}"
-else
- export ANSIBLE_COLLECTIONS_PATHS="${PWD}/../../../"
-fi
-
-# START: HACK install dependencies
-# retry ansible-galaxy -vvv collection install azure.azcollection
-
-# END: HACK
-
-export PYTHONIOENCODING='utf-8'
-
-if [ "${JOB_TRIGGERED_BY_NAME:-}" == "nightly-trigger" ]; then
- COVERAGE=yes
- COMPLETE=yes
-fi
-
-if [ -n "${COVERAGE:-}" ]; then
- # on-demand coverage reporting triggered by setting the COVERAGE environment variable to a non-empty value
- export COVERAGE="--coverage"
-elif [[ "${COMMIT_MESSAGE}" =~ ci_coverage ]]; then
- # on-demand coverage reporting triggered by having 'ci_coverage' in the latest commit message
- export COVERAGE="--coverage"
-else
- # on-demand coverage reporting disabled (default behavior, always-on coverage reporting remains enabled)
- export COVERAGE="--coverage-check"
-fi
-
-if [ -n "${COMPLETE:-}" ]; then
- # disable change detection triggered by setting the COMPLETE environment variable to a non-empty value
- export CHANGED=""
-elif [[ "${COMMIT_MESSAGE}" =~ ci_complete ]]; then
- # disable change detection triggered by having 'ci_complete' in the latest commit message
- export CHANGED=""
-else
- # enable change detection (default behavior)
- export CHANGED="--changed"
-fi
-
-if [ "${IS_PULL_REQUEST:-}" == "true" ]; then
- # run unstable tests which are targeted by focused changes on PRs
- export UNSTABLE="--allow-unstable-changed"
-else
- # do not run unstable tests outside PRs
- export UNSTABLE=""
-fi
-
-function cleanup
-{
- # for complete on-demand coverage generate a report for all files with no coverage on the "sanity/5" job so we only have one copy
- if [ "${COVERAGE}" == "--coverage" ] && [ "${CHANGED}" == "" ] && [ "${test}" == "sanity/5" ]; then
- stub="--stub"
- # trigger coverage reporting for stubs even if no other coverage data exists
- mkdir -p tests/output/coverage/
- else
- stub=""
- fi
-
- if [ -d tests/output/coverage/ ]; then
- if find tests/output/coverage/ -mindepth 1 -name '.*' -prune -o -print -quit | grep -q .; then
- process_coverage='yes' # process existing coverage files
- elif [ "${stub}" ]; then
- process_coverage='yes' # process coverage when stubs are enabled
- else
- process_coverage=''
- fi
-
- if [ "${process_coverage}" ]; then
- # use python 3.7 for coverage to avoid running out of memory during coverage xml processing
- # only use it for coverage to avoid the additional overhead of setting up a virtual environment for a potential no-op job
- virtualenv --python /usr/bin/python3.7 ~/ansible-venv
- set +ux
- . ~/ansible-venv/bin/activate
- set -ux
-
- # shellcheck disable=SC2086
- ansible-test coverage xml --color -v --requirements --group-by command --group-by version ${stub:+"$stub"}
- cp -a tests/output/reports/coverage=*.xml "$SHIPPABLE_RESULT_DIR/codecoverage/"
-
- if [ "${ansible_version}" != "2.9" ]; then
- # analyze and capture code coverage aggregated by integration test target
- ansible-test coverage analyze targets generate -v "$SHIPPABLE_RESULT_DIR/testresults/coverage-analyze-targets.json"
- fi
-
- # upload coverage report to codecov.io only when using complete on-demand coverage
- if [ "${COVERAGE}" == "--coverage" ] && [ "${CHANGED}" == "" ]; then
- for file in tests/output/reports/coverage=*.xml; do
- flags="${file##*/coverage=}"
- flags="${flags%-powershell.xml}"
- flags="${flags%.xml}"
- # remove numbered component from stub files when converting to tags
- flags="${flags//stub-[0-9]*/stub}"
- flags="${flags//=/,}"
- flags="${flags//[^a-zA-Z0-9_,]/_}"
-
- bash <(curl -s https://ansible-ci-files.s3.us-east-1.amazonaws.com/codecov/codecov.sh) \
- -f "${file}" \
- -F "${flags}" \
- -n "${test}" \
- -t 47041dbd-4bef-43b8-8873-4c6a1a8a3711 \
- -X coveragepy \
- -X gcov \
- -X fix \
- -X search \
- -X xcode \
- || echo "Failed to upload code coverage report to codecov.io: ${file}"
- done
- fi
- fi
- fi
-
- if [ -d tests/output/junit/ ]; then
- cp -aT tests/output/junit/ "$SHIPPABLE_RESULT_DIR/testresults/"
- fi
-
- if [ -d tests/output/data/ ]; then
- cp -a tests/output/data/ "$SHIPPABLE_RESULT_DIR/testresults/"
- fi
-
- if [ -d tests/output/bot/ ]; then
- cp -aT tests/output/bot/ "$SHIPPABLE_RESULT_DIR/testresults/"
- fi
-}
-
-if [ "${SHIPPABLE_BUILD_ID:-}" ]; then trap cleanup EXIT; fi
-
-if [[ "${COVERAGE:-}" == "--coverage" ]]; then
- timeout=60
-else
- timeout=50
-fi
-
-ansible-test env --dump --show --timeout "${timeout}" --color -v
-
-if [ "${SHIPPABLE_BUILD_ID:-}" ]; then "tests/utils/shippable/check_matrix.py"; fi
-"tests/utils/shippable/${script}.sh" "${test}"
diff --git a/ansible_collections/community/azure/tests/utils/shippable/timing.py b/ansible_collections/community/azure/tests/utils/shippable/timing.py
deleted file mode 100755
index fb538271b..000000000
--- a/ansible_collections/community/azure/tests/utils/shippable/timing.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/usr/bin/env python3.7
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-
-import sys
-import time
-
-start = time.time()
-
-sys.stdin.reconfigure(errors='surrogateescape')
-sys.stdout.reconfigure(errors='surrogateescape')
-
-for line in sys.stdin:
- seconds = time.time() - start
- sys.stdout.write('%02d:%02d %s' % (seconds // 60, seconds % 60, line))
- sys.stdout.flush()
diff --git a/ansible_collections/community/azure/tests/utils/shippable/timing.sh b/ansible_collections/community/azure/tests/utils/shippable/timing.sh
deleted file mode 100755
index 77e257830..000000000
--- a/ansible_collections/community/azure/tests/utils/shippable/timing.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/usr/bin/env bash
-
-set -o pipefail -eu
-
-"$@" 2>&1 | "$(dirname "$0")/timing.py"
diff --git a/ansible_collections/community/ciscosmb/.github/workflows/CI.yml b/ansible_collections/community/ciscosmb/.github/workflows/CI.yml
index 6d07a3edc..73c71b48e 100644
--- a/ansible_collections/community/ciscosmb/.github/workflows/CI.yml
+++ b/ansible_collections/community/ciscosmb/.github/workflows/CI.yml
@@ -33,40 +33,31 @@ jobs:
# https://docs.ansible.com/ansible/latest/dev_guide/testing_sanity.html
sanity:
- name: Sanity (Ansible ${{ matrix.ansible }})
+ name: Sanity tests
+ runs-on: ${{ matrix.os }}
strategy:
+ fail-fast: false
matrix:
+ # Ansible Support Matrix
+ # https://docs.ansible.com/ansible/latest/reference_appendices/release_and_maintenance.html#ansible-core-support-matrix
ansible:
- # It's important that Sanity is tested against all stable-X.Y branches
- # Testing against `devel` may fail as new tests are added.
- # An alternative to `devel` is the `milestone` branch with
- # gets synchronized with `devel` every few weeks and therefore
- # tends to be a more stable target. Be aware that it is not updated
- # around creation of a new stable branch, this might cause a problem
- # that two different versions of ansible-test use the same sanity test
- # ignore.txt file.
- # - stable-2.9 # Only if your collection supports Ansible 2.9
- - stable-2.10 # Only if your collection supports ansible-base 2.10
- - stable-2.11
- - stable-2.12
- - stable-2.13
- stable-2.14
+ - stable-2.15
+ - stable-2.16
- devel
- # - milestone
- runs-on: ubuntu-latest
+ python:
+ - 3.11
+ os:
+ - ubuntu-22.04
steps:
- # Run sanity tests inside a Docker container.
- # The docker container has all the pinned dependencies that are
- # required and all Python versions Ansible supports.
- - name: Perform sanity testing
+ - name: Sanity testing
uses: ansible-community/ansible-test-gh-action@release/v1
with:
ansible-core-version: ${{ matrix.ansible }}
+ target-python-version: ${{ matrix.python }}
testing-type: sanity
- # OPTIONAL If your sanity tests require code
- # from other collections, install them like this
test-deps: >-
- git+https://github.com/ansible-collections/ansible.netcommon.git
+ ansible.netcommon
###
# Unit tests (OPTIONAL)
@@ -74,44 +65,52 @@ jobs:
# https://docs.ansible.com/ansible/latest/dev_guide/testing_units.html
units:
- runs-on: ubuntu-latest
- name: Units (Ansible ${{ matrix.ansible }}+py${{ matrix.python }})
+ name: Unit tests (${{ matrix.ansible }}+py${{ matrix.python }})
+ runs-on: ${{ matrix.os }}
strategy:
- # As soon as the first unit test fails, cancel the others to free up the CI queue
fail-fast: false
matrix:
+ # Ansible Support matrix
+ # https://docs.ansible.com/ansible/latest/reference_appendices/release_and_maintenance.html#ansible-core-support-matrix
ansible:
- # - stable-2.9 # Only if your collection supports Ansible 2.9
- - stable-2.10 # Only if your collection supports ansible-base 2.10
- - stable-2.11
- - stable-2.12
- - stable-2.13
- stable-2.14
+ - stable-2.15
+ - stable-2.16
- devel
- # - milestone
python:
+ # - "2.7" no support for old Python
+ - "3.5"
- "3.6"
- "3.7"
- "3.8"
- "3.9"
- "3.10"
+ - "3.11"
+ - "3.12"
+ os:
+ - ubuntu-22.04
exclude:
# no support
- - ansible: stable-2.10
- python: "3.10"
- - ansible: stable-2.11
- python: "3.10"
+ - ansible: stable-2.14
+ python: "3.12"
+ - ansible: stable-2.15
+ python: "3.12"
+ - ansible: stable-2.16
+ python: "3.5"
+ - ansible: devel
+ python: "3.5"
+ - ansible: devel
+ python: "3.6"
+ - ansible: devel
+ python: "3.7"
+
steps:
- - name: >-
- Perform unit testing against
- Ansible version ${{ matrix.ansible }}
+ - name: Unit testing
uses: ansible-community/ansible-test-gh-action@release/v1
with:
ansible-core-version: ${{ matrix.ansible }}
target-python-version: ${{ matrix.python }}
testing-type: units
- # OPTIONAL If your unit tests require code
- # from other collections, install them like this
test-deps: >-
ansible.netcommon
ansible.utils
diff --git a/ansible_collections/community/ciscosmb/.github/workflows/FastCI.yml b/ansible_collections/community/ciscosmb/.github/workflows/FastCI.yml
index ab8b17874..867757d51 100644
--- a/ansible_collections/community/ciscosmb/.github/workflows/FastCI.yml
+++ b/ansible_collections/community/ciscosmb/.github/workflows/FastCI.yml
@@ -28,72 +28,52 @@ jobs:
# https://docs.ansible.com/ansible/latest/dev_guide/testing_sanity.html
sanity:
- name: Fast Sanity (Ansible ${{ matrix.ansible }})
+ name: Sanity tests
+ runs-on: ${{ matrix.os }}
strategy:
+ fail-fast: false
matrix:
+ # Ansible Support matrix
+ # https://docs.ansible.com/ansible/latest/reference_appendices/release_and_maintenance.html#ansible-core-support-matrix
ansible:
- # It's important that Sanity is tested against all stable-X.Y branches
- # Testing against `devel` may fail as new tests are added.
- # An alternative to `devel` is the `milestone` branch with
- # gets synchronized with `devel` every few weeks and therefore
- # tends to be a more stable target. Be aware that it is not updated
- # around creation of a new stable branch, this might cause a problem
- # that two different versions of ansible-test use the same sanity test
- # ignore.txt file.
- # - stable-2.9 # Only if your collection supports Ansible 2.9
- # - stable-2.10 # Only if your collection supports ansible-base 2.10
- # - stable-2.11
- # - stable-2.12
- - stable-2.13
- # - stable-2.14
- # - devel
- # - milestone
- runs-on: ubuntu-latest
+ - stable-2.14
+ python:
+ - 3.11
+ os:
+ - ubuntu-22.04
+
steps:
- # Run sanity tests inside a Docker container.
- # The docker container has all the pinned dependencies that are
- # required and all Python versions Ansible supports.
- - name: Perform sanity testing
+ - name: Sanity testing
uses: ansible-community/ansible-test-gh-action@release/v1
with:
ansible-core-version: ${{ matrix.ansible }}
+ target-python-version: ${{ matrix.python }}
testing-type: sanity
- # OPTIONAL If your sanity tests require code
- # from other collections, install them like this
test-deps: >-
- git+https://github.com/ansible-collections/ansible.netcommon.git
-
-###
-# Unit tests (OPTIONAL)
-#
-# https://docs.ansible.com/ansible/latest/dev_guide/testing_units.html
+ ansible.netcommon
- units:
- runs-on: ubuntu-latest
- name: Fast Units (Ansible ${{ matrix.ansible }}+py${{ matrix.python }})
+ unit:
+ name: Unit tests
+ runs-on: ${{ matrix.os }}
strategy:
- # As soon as the first unit test fails, cancel the others to free up the CI queue
fail-fast: false
matrix:
+ # Ansible Support matrix
+ # https://docs.ansible.com/ansible/latest/reference_appendices/release_and_maintenance.html#ansible-core-support-matrix
ansible:
- # - stable-2.9 # Only if your collection supports Ansible 2.9
- # - stable-2.10 # Only if your collection supports ansible-base 2.10
- # - stable-2.11
- # - stable-2.12
- - stable-2.13
- # - stable-2.14
- # - devel
- # - milestone
+ - stable-2.14
+ python:
+ - 3.11
+ os:
+ - ubuntu-22.04
+
steps:
- - name: >-
- Perform unit testing against
- Ansible version ${{ matrix.ansible }}
+ - name: Unit testing
uses: ansible-community/ansible-test-gh-action@release/v1
with:
ansible-core-version: ${{ matrix.ansible }}
+ target-python-version: ${{ matrix.python }}
testing-type: units
- # OPTIONAL If your unit tests require code
- # from other collections, install them like this
test-deps: >-
ansible.netcommon
ansible.utils
diff --git a/ansible_collections/community/ciscosmb/CHANGELOG.rst b/ansible_collections/community/ciscosmb/CHANGELOG.rst
index fb3bc6cc0..1f16349ea 100644
--- a/ansible_collections/community/ciscosmb/CHANGELOG.rst
+++ b/ansible_collections/community/ciscosmb/CHANGELOG.rst
@@ -4,6 +4,54 @@ CiscoSMB Ansible module Release Notes
.. contents:: Topics
+v1.0.9
+======
+
+Release Summary
+---------------
+
+Primarily revert release. Previous release (1.0.8) fixed typo in attribute name, but it was breaking change.
+This release brought the typo back (bandwith) and just added the new attribute with correct name "bandwidth" as a copy of the mistypped attribute.
+
+Attribude "bandwith" will be removed in next minor release.
+
+Minor Changes
+-------------
+
+- added additional attribute - add interface 'bandwidth' attribute
+- reverted attribute change - keep interface 'bandwith' attribute
+
+Bugfixes
+--------
+
+- typo in changelog fragment template
+- typo in test script
+
+v1.0.8
+======
+
+Release Summary
+---------------
+
+Release Date: 2024-04-09
+
+ Minor bugfixes, updated CI
+
+Minor Changes
+-------------
+
+- docs - addeed info about SG-250 support and testing
+
+Breaking Changes / Porting Guide
+--------------------------------
+
+- in facts of interface 'bandwith' changed to 'bandwidth'
+
+Bugfixes
+--------
+
+- issue
+- solved issue
v1.0.7
======
@@ -15,7 +63,6 @@ Release Date: 2023-10-30
Fix issue on CSB-350 #69
Clarify configuration doc #66 #64
-
Bugfixes
--------
@@ -30,7 +77,6 @@ Release Summary
Code cleaning, better documentation
-
Minor Changes
-------------
@@ -68,7 +114,6 @@ Release Summary
Release Date: 2021-09-13
-
Bugfixes
--------
@@ -83,7 +128,6 @@ Release Summary
Release Date: 2019-10-31
Minor changes in documentation, adding Python 3.6 as a supported version
-
Minor Changes
-------------
diff --git a/ansible_collections/community/ciscosmb/FILES.json b/ansible_collections/community/ciscosmb/FILES.json
index cc62fa878..6c096d426 100644
--- a/ansible_collections/community/ciscosmb/FILES.json
+++ b/ansible_collections/community/ciscosmb/FILES.json
@@ -25,14 +25,14 @@
"name": ".github/workflows/CI.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c9a8a6506530fe75912e7c5a4f088ea5faf7ffa2f423425b2805f4b0961a5f37",
+ "chksum_sha256": "123b77a907e54d2342804810653b910173ff576f19f27d113822aab39c53667f",
"format": 1
},
{
"name": ".github/workflows/FastCI.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "94a5e1a4be780b591cee49ad059ce07e8e89de89453daf0d3fd6bc3d9e5fd5d5",
+ "chksum_sha256": "3f8607ef0946ef96025c3f7cd6977db800e150594b77340617247defcdeb7bfb",
"format": 1
},
{
@@ -53,14 +53,14 @@
"name": "changelogs/fragments/.keep",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4a458bd648a360c285839f2e2ad6994993c035eb278b64bde2c08a3665a84e4c",
+ "chksum_sha256": "a02e74b2342d643d4eb450f87cc2f2c7f608be6061321555b1d71ecdf90e3938",
"format": 1
},
{
"name": "changelogs/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a3610efbe7df3df55e25d674d38c6f9681680cc6807e3af36cac886440c6346c",
+ "chksum_sha256": "caa1a1be21ebfefcf82b3bb041e7b0489c684dfb189c6023c55ed69096e03803",
"format": 1
},
{
@@ -158,7 +158,7 @@
"name": "plugins/modules/facts.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "06cbfc8b6ee23c25089ac592d9d21ce0a086dd9c080852cf50f14833e90ce210",
+ "chksum_sha256": "710465293235ea44b25f55d81f083086549adabb87cc83b3e535f2275222d5bd",
"format": 1
},
{
@@ -172,7 +172,7 @@
"name": "plugins/terminal/ciscosmb.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "58fdbc076d66763501c686e9f2394f8c9db2b104469d50feae65bee55634eb68",
+ "chksum_sha256": "1f92f1abb0c83531a3de62936d337a401b8adac1c8356879f7a2c55de19d4fff",
"format": 1
},
{
@@ -214,7 +214,7 @@
"name": "tests/unit/compat/mock.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0af958450cf6de3fbafe94b1111eae8ba5a8dbe1d785ffbb9df81f26e4946d99",
+ "chksum_sha256": "7ebc6613b5c5f9e6d3726bec3406a5d670ca04ef69f7eb21c5ee83ef94ef5445",
"format": 1
},
{
@@ -627,7 +627,7 @@
"name": "tests/unit/plugins/modules/ciscosmb/test_ciscosmb_facts-SG500-52-K9.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b9ff43b3f0e29480f539528c72abfe7a2d2fa80e4affa834245e78d73a04947a",
+ "chksum_sha256": "de8e5dc48a066d75be282819a947f132edaf27462f5572ff1fceede749346be4",
"format": 1
},
{
@@ -704,7 +704,7 @@
"name": "CHANGELOG.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "482e1b4cebbd09bb0d8f7b0876ddffd6477af428618f284e1180a583401a8cbb",
+ "chksum_sha256": "64accbe17f9d81d7bcb88b4c90f58d2536e9fc8defa7bd19d878b71bc865c4d2",
"format": 1
},
{
@@ -732,7 +732,7 @@
"name": "README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "40d7260f4d76c77e48a364647b75e113ce91d0e18ad67b13207e14cec08718e1",
+ "chksum_sha256": "8b7d0c6c412dd63b33cb45e4fe981241150fa1a6d48516e75f91783831022b19",
"format": 1
},
{
diff --git a/ansible_collections/community/ciscosmb/MANIFEST.json b/ansible_collections/community/ciscosmb/MANIFEST.json
index 2a98111d7..220aa5caf 100644
--- a/ansible_collections/community/ciscosmb/MANIFEST.json
+++ b/ansible_collections/community/ciscosmb/MANIFEST.json
@@ -2,7 +2,7 @@
"collection_info": {
"namespace": "community",
"name": "ciscosmb",
- "version": "1.0.7",
+ "version": "1.0.9",
"authors": [
"Petr Kl\u00edma <qaxi@seznam.cz>"
],
@@ -35,7 +35,7 @@
"name": "FILES.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "922f00a582a76f8d668444f41338cfc356b64945bfe4149e7a12ac1e838c03b4",
+ "chksum_sha256": "0184b4a8b12bb7fd53db5eba127a744f66f90bdf37070164de7b6825a4b0f3d6",
"format": 1
},
"format": 1
diff --git a/ansible_collections/community/ciscosmb/README.md b/ansible_collections/community/ciscosmb/README.md
index 0ddae236a..4382b1d65 100644
--- a/ansible_collections/community/ciscosmb/README.md
+++ b/ansible_collections/community/ciscosmb/README.md
@@ -1,6 +1,8 @@
# Ansible Cisco Small Bussiness Switches (SMB) module
-Ansible Galaxy module for Cisco SMB switches - SG300, SG500, SG350, SG550, CBS350
+Thorough project check - [![CI](https://github.com/ansible-collections/community.ciscosmb/actions/workflows/CI.yml/badge.svg?branch=main)](https://github.com/ansible-collections/community.ciscosmb/actions/workflows/CI.yml)
+
+Ansible Galaxy module for Cisco SMB switches - SG250, SG300, SG500, SG350, SG550, CBS350
## Install
@@ -11,6 +13,7 @@ ansible-galaxy collection install community.ciscosmb
## Usage examples
Tested on devices:
+* SG250-10P
* SG350-10-K9
* SG350-28-K9
* SG500-52-K9
@@ -58,6 +61,8 @@ Tested on Python versions:
* 3.8
* 3.9
* 3.10
+* 3.11
+* 3.12
### Running examples
@@ -140,7 +145,7 @@ vim galaxy.yml
# edit changelog fragments (template in changelogs/fragments/.keep)
cp changelogs/fragments/.keep changelogs/fragments/release-x.y.z.yml
-vim changelogs/fragments/fragment.yml
+vim changelogs/fragments/release-x.y.z.yml
# change and generate CHANGELOG.rst
antsibull-changelog lint -v
diff --git a/ansible_collections/community/ciscosmb/changelogs/changelog.yaml b/ansible_collections/community/ciscosmb/changelogs/changelog.yaml
index 41e81a1b7..490b8c7e6 100644
--- a/ansible_collections/community/ciscosmb/changelogs/changelog.yaml
+++ b/ansible_collections/community/ciscosmb/changelogs/changelog.yaml
@@ -191,3 +191,41 @@ releases:
- issue69.yml
- release-1.0.7.yml
release_date: '2023-10-30'
+ 1.0.8:
+ changes:
+ breaking_changes:
+ - in facts of interface 'bandwith' changed to 'bandwidth'
+ bugfixes:
+ - issue
+ - solved issue
+ minor_changes:
+ - docs - addeed info about SG-250 support and testing
+ release_summary: "Release Date: 2024-04-09\n\n Minor bugfixes, updated CI\n"
+ fragments:
+ - CI.yml
+ - add-SG250.yml
+ - bandwidth.yml
+ - on_become.yml
+ - release-1.0.8.yml
+ release_date: '2024-04-09'
+ 1.0.9:
+ changes:
+ bugfixes:
+ - typo in changelog fragment template
+ - typo in test script
+ minor_changes:
+ - added additional attribute - add interface 'bandwidth' attribute
+ - reverted attribute change - keep interface 'bandwith' attribute
+ release_summary: 'Primarily revert release. Previous release (1.0.8) fixed typo
+ in attribute name, but it was breaking change.
+
+ This release brought the typo back (bandwith) and just added the new attribute
+ with correct name "bandwidth" as a copy of the mistypped attribute.
+
+
+ Attribude "bandwith" will be removed in next minor release.
+
+ '
+ fragments:
+ - 75-versioning_violation.yml
+ release_date: '2024-05-03'
diff --git a/ansible_collections/community/ciscosmb/changelogs/fragments/.keep b/ansible_collections/community/ciscosmb/changelogs/fragments/.keep
index 7b3ecc4f0..c61804f01 100644
--- a/ansible_collections/community/ciscosmb/changelogs/fragments/.keep
+++ b/ansible_collections/community/ciscosmb/changelogs/fragments/.keep
@@ -1,4 +1,4 @@
-# fragment.xml
+# fragment.yml
release_summary: |
Release Date: 2019-10-31
`Porting Guide <https://docs.ansible.com/ansible/devel/porting_guides.html>`
diff --git a/ansible_collections/community/ciscosmb/plugins/modules/facts.py b/ansible_collections/community/ciscosmb/plugins/modules/facts.py
index 23cd9820a..a8744ef3c 100644
--- a/ansible_collections/community/ciscosmb/plugins/modules/facts.py
+++ b/ansible_collections/community/ciscosmb/plugins/modules/facts.py
@@ -423,9 +423,11 @@ class Interfaces(FactsBase):
interface["mode"] = i[8].lower()
if i[6] == "Up":
- interface["bandwith"] = int(i[3]) * 1000 # to get speed in kb
+ interface["bandwidth"] = int(i[3]) * 1000 # to get speed in kb
+ interface["bandwith"] = interface["bandwidth"]
else:
- interface["bandwith"] = None
+ interface["bandwidth"] = None
+ interface["bandwith"] = interface["bandwidth"]
for key in interface:
if interface[key] == "--":
@@ -449,9 +451,11 @@ class Interfaces(FactsBase):
interface["control"] = i[5].lower()
if i[6] == "Up":
- interface["bandwith"] = int(i[3]) * 1000 # to get speed in kb
+ interface["bandwidth"] = int(i[3]) * 1000 # to get speed in kb
+ interface["bandwith"] = interface["bandwidth"]
else:
- interface["bandwith"] = None
+ interface["bandwidth"] = None
+ interface["bandwith"] = interface["bandwidth"]
for key in interface:
if interface[key] == "--":
@@ -624,6 +628,7 @@ class Interfaces(FactsBase):
self.facts["interfaces"][interface]["admin_state"] = "up"
self.facts["interfaces"][interface]["description"] = None
self.facts["interfaces"][interface]["state"] = "up"
+ self.facts["interfaces"][interface]["bandwidth"] = None
self.facts["interfaces"][interface]["bandwith"] = None
self.facts["interfaces"][interface]["duplex"] = None
self.facts["interfaces"][interface]["negotiation"] = None
diff --git a/ansible_collections/community/ciscosmb/plugins/terminal/ciscosmb.py b/ansible_collections/community/ciscosmb/plugins/terminal/ciscosmb.py
index e8aa46d9b..6bb4d8a89 100644
--- a/ansible_collections/community/ciscosmb/plugins/terminal/ciscosmb.py
+++ b/ansible_collections/community/ciscosmb/plugins/terminal/ciscosmb.py
@@ -80,9 +80,6 @@ class TerminalModule(TerminalBase):
)
def on_become(self, passwd=None):
- if self._get_prompt().endswith(b"#"):
- return
-
cmd = {u"command": u"enable"}
if passwd:
# Note: python-3.5 cannot combine u"" and r"" together. Thus make
diff --git a/ansible_collections/community/ciscosmb/tests/unit/compat/mock.py b/ansible_collections/community/ciscosmb/tests/unit/compat/mock.py
index 0972cd2e8..5d25fbe16 100644
--- a/ansible_collections/community/ciscosmb/tests/unit/compat/mock.py
+++ b/ansible_collections/community/ciscosmb/tests/unit/compat/mock.py
@@ -64,8 +64,7 @@ if sys.version_info >= (3,) and sys.version_info < (3, 4, 4):
# newline that our naive format() added
data_as_list[-1] = data_as_list[-1][:-1]
- for line in data_as_list:
- yield line
+ yield data_as_list
def mock_open(mock=None, read_data=''):
"""
@@ -93,8 +92,7 @@ if sys.version_info >= (3,) and sys.version_info < (3, 4, 4):
if handle.readline.return_value is not None:
while True:
yield handle.readline.return_value
- for line in _data:
- yield line
+ yield _data
global file_spec
if file_spec is None:
diff --git a/ansible_collections/community/ciscosmb/tests/unit/plugins/modules/ciscosmb/test_ciscosmb_facts-SG500-52-K9.py b/ansible_collections/community/ciscosmb/tests/unit/plugins/modules/ciscosmb/test_ciscosmb_facts-SG500-52-K9.py
index 98a185dd7..107c365ca 100644
--- a/ansible_collections/community/ciscosmb/tests/unit/plugins/modules/ciscosmb/test_ciscosmb_facts-SG500-52-K9.py
+++ b/ansible_collections/community/ciscosmb/tests/unit/plugins/modules/ciscosmb/test_ciscosmb_facts-SG500-52-K9.py
@@ -116,6 +116,13 @@ class TestCiscoSMBFactsModule(TestCiscoSMBModule):
len(result['ansible_facts']['ansible_net_neighbors']), 9
)
+ interfaces = result['ansible_facts']['ansible_net_interfaces']
+ ge42 = interfaces['GigabitEthernet1/42']
+
+ self.assertEqual(ge42['bandwidth'], 1000000)
+
+ self.assertEqual(ge42['bandwidth'], ge42['bandwith'])
+
# def test_ciscosmb_facts_routing(self):
# set_module_args(dict(gather_subset='routing'))
# result = self.execute_module()
diff --git a/ansible_collections/community/crypto/.azure-pipelines/azure-pipelines.yml b/ansible_collections/community/crypto/.azure-pipelines/azure-pipelines.yml
index 19a36fb46..3505f5d99 100644
--- a/ansible_collections/community/crypto/.azure-pipelines/azure-pipelines.yml
+++ b/ansible_collections/community/crypto/.azure-pipelines/azure-pipelines.yml
@@ -176,7 +176,7 @@ stages:
- name: Debian Bookworm
test: debian-bookworm/3.11
- name: ArchLinux
- test: archlinux/3.11
+ test: archlinux/3.12
groups:
- 1
- 2
diff --git a/ansible_collections/community/crypto/.github/workflows/ansible-test.yml b/ansible_collections/community/crypto/.github/workflows/ansible-test.yml
index d31e861c4..dac31b04c 100644
--- a/ansible_collections/community/crypto/.github/workflows/ansible-test.yml
+++ b/ansible_collections/community/crypto/.github/workflows/ansible-test.yml
@@ -50,6 +50,7 @@ jobs:
with:
ansible-core-github-repository-slug: ${{ contains(fromJson('["2.10", "2.11"]'), matrix.ansible) && 'felixfontein/ansible' || 'ansible/ansible' }}
ansible-core-version: stable-${{ matrix.ansible }}
+ codecov-token: ${{ secrets.CODECOV_TOKEN }}
coverage: ${{ github.event_name == 'schedule' && 'always' || 'never' }}
pull-request-change-detection: 'true'
testing-type: sanity
@@ -85,6 +86,7 @@ jobs:
with:
ansible-core-github-repository-slug: ${{ contains(fromJson('["2.10", "2.11"]'), matrix.ansible) && 'felixfontein/ansible' || 'ansible/ansible' }}
ansible-core-version: stable-${{ matrix.ansible }}
+ codecov-token: ${{ secrets.CODECOV_TOKEN }}
coverage: ${{ github.event_name == 'schedule' && 'always' || 'never' }}
pull-request-change-detection: 'true'
testing-type: units
@@ -282,6 +284,7 @@ jobs:
with:
ansible-core-github-repository-slug: ${{ contains(fromJson('["2.10", "2.11"]'), matrix.ansible) && 'felixfontein/ansible' || 'ansible/ansible' }}
ansible-core-version: stable-${{ matrix.ansible }}
+ codecov-token: ${{ secrets.CODECOV_TOKEN }}
coverage: ${{ github.event_name == 'schedule' && 'always' || 'never' }}
docker-image: ${{ matrix.docker }}
integration-continue-on-error: 'false'
diff --git a/ansible_collections/community/crypto/CHANGELOG.md b/ansible_collections/community/crypto/CHANGELOG.md
index 1652a3ad2..abb97442d 100644
--- a/ansible_collections/community/crypto/CHANGELOG.md
+++ b/ansible_collections/community/crypto/CHANGELOG.md
@@ -2,269 +2,328 @@
**Topics**
-- <a href="#v2-19-0">v2\.19\.0</a>
+- <a href="#v2-20-0">v2\.20\.0</a>
- <a href="#release-summary">Release Summary</a>
- <a href="#minor-changes">Minor Changes</a>
- <a href="#deprecated-features">Deprecated Features</a>
- <a href="#bugfixes">Bugfixes</a>
- <a href="#new-modules">New Modules</a>
-- <a href="#v2-18-0">v2\.18\.0</a>
+- <a href="#v2-19-1">v2\.19\.1</a>
- <a href="#release-summary-1">Release Summary</a>
- - <a href="#minor-changes-1">Minor Changes</a>
- - <a href="#deprecated-features-1">Deprecated Features</a>
- <a href="#bugfixes-1">Bugfixes</a>
- - <a href="#new-plugins">New Plugins</a>
- - <a href="#filter">Filter</a>
-- <a href="#v2-17-1">v2\.17\.1</a>
+- <a href="#v2-19-0">v2\.19\.0</a>
- <a href="#release-summary-2">Release Summary</a>
+ - <a href="#minor-changes-1">Minor Changes</a>
+ - <a href="#deprecated-features-1">Deprecated Features</a>
- <a href="#bugfixes-2">Bugfixes</a>
-- <a href="#v2-17-0">v2\.17\.0</a>
+ - <a href="#new-modules-1">New Modules</a>
+- <a href="#v2-18-0">v2\.18\.0</a>
- <a href="#release-summary-3">Release Summary</a>
- <a href="#minor-changes-2">Minor Changes</a>
-- <a href="#v2-16-2">v2\.16\.2</a>
- - <a href="#release-summary-4">Release Summary</a>
+ - <a href="#deprecated-features-2">Deprecated Features</a>
- <a href="#bugfixes-3">Bugfixes</a>
-- <a href="#v2-16-1">v2\.16\.1</a>
- - <a href="#release-summary-5">Release Summary</a>
+ - <a href="#new-plugins">New Plugins</a>
+ - <a href="#filter">Filter</a>
+- <a href="#v2-17-1">v2\.17\.1</a>
+ - <a href="#release-summary-4">Release Summary</a>
- <a href="#bugfixes-4">Bugfixes</a>
-- <a href="#v2-16-0">v2\.16\.0</a>
- - <a href="#release-summary-6">Release Summary</a>
+- <a href="#v2-17-0">v2\.17\.0</a>
+ - <a href="#release-summary-5">Release Summary</a>
- <a href="#minor-changes-3">Minor Changes</a>
+- <a href="#v2-16-2">v2\.16\.2</a>
+ - <a href="#release-summary-6">Release Summary</a>
- <a href="#bugfixes-5">Bugfixes</a>
-- <a href="#v2-15-1">v2\.15\.1</a>
+- <a href="#v2-16-1">v2\.16\.1</a>
- <a href="#release-summary-7">Release Summary</a>
- <a href="#bugfixes-6">Bugfixes</a>
-- <a href="#v2-15-0">v2\.15\.0</a>
+- <a href="#v2-16-0">v2\.16\.0</a>
- <a href="#release-summary-8">Release Summary</a>
- <a href="#minor-changes-4">Minor Changes</a>
- - <a href="#deprecated-features-2">Deprecated Features</a>
- <a href="#bugfixes-7">Bugfixes</a>
+- <a href="#v2-15-1">v2\.15\.1</a>
+ - <a href="#release-summary-9">Release Summary</a>
+ - <a href="#bugfixes-8">Bugfixes</a>
+- <a href="#v2-15-0">v2\.15\.0</a>
+ - <a href="#release-summary-10">Release Summary</a>
+ - <a href="#minor-changes-5">Minor Changes</a>
+ - <a href="#deprecated-features-3">Deprecated Features</a>
+ - <a href="#bugfixes-9">Bugfixes</a>
- <a href="#new-plugins-1">New Plugins</a>
- <a href="#filter-1">Filter</a>
- <a href="#lookup">Lookup</a>
- <a href="#v2-14-1">v2\.14\.1</a>
- - <a href="#release-summary-9">Release Summary</a>
- - <a href="#bugfixes-8">Bugfixes</a>
+ - <a href="#release-summary-11">Release Summary</a>
+ - <a href="#bugfixes-10">Bugfixes</a>
- <a href="#known-issues">Known Issues</a>
- <a href="#v2-14-0">v2\.14\.0</a>
- - <a href="#release-summary-10">Release Summary</a>
- - <a href="#minor-changes-5">Minor Changes</a>
-- <a href="#v2-13-1">v2\.13\.1</a>
- - <a href="#release-summary-11">Release Summary</a>
- - <a href="#bugfixes-9">Bugfixes</a>
-- <a href="#v2-13-0">v2\.13\.0</a>
- <a href="#release-summary-12">Release Summary</a>
- <a href="#minor-changes-6">Minor Changes</a>
- - <a href="#deprecated-features-3">Deprecated Features</a>
- - <a href="#bugfixes-10">Bugfixes</a>
-- <a href="#v2-12-0">v2\.12\.0</a>
+- <a href="#v2-13-1">v2\.13\.1</a>
- <a href="#release-summary-13">Release Summary</a>
- - <a href="#minor-changes-7">Minor Changes</a>
-- <a href="#v2-11-1">v2\.11\.1</a>
+ - <a href="#bugfixes-11">Bugfixes</a>
+- <a href="#v2-13-0">v2\.13\.0</a>
- <a href="#release-summary-14">Release Summary</a>
-- <a href="#v2-11-0">v2\.11\.0</a>
+ - <a href="#minor-changes-7">Minor Changes</a>
+ - <a href="#deprecated-features-4">Deprecated Features</a>
+ - <a href="#bugfixes-12">Bugfixes</a>
+- <a href="#v2-12-0">v2\.12\.0</a>
- <a href="#release-summary-15">Release Summary</a>
- <a href="#minor-changes-8">Minor Changes</a>
- - <a href="#bugfixes-11">Bugfixes</a>
-- <a href="#v2-10-0">v2\.10\.0</a>
+- <a href="#v2-11-1">v2\.11\.1</a>
- <a href="#release-summary-16">Release Summary</a>
- - <a href="#bugfixes-12">Bugfixes</a>
- - <a href="#new-plugins-2">New Plugins</a>
- - <a href="#filter-2">Filter</a>
-- <a href="#v2-9-0">v2\.9\.0</a>
+- <a href="#v2-11-0">v2\.11\.0</a>
- <a href="#release-summary-17">Release Summary</a>
- <a href="#minor-changes-9">Minor Changes</a>
-- <a href="#v2-8-1">v2\.8\.1</a>
+ - <a href="#bugfixes-13">Bugfixes</a>
+- <a href="#v2-10-0">v2\.10\.0</a>
- <a href="#release-summary-18">Release Summary</a>
-- <a href="#v2-8-0">v2\.8\.0</a>
+ - <a href="#bugfixes-14">Bugfixes</a>
+ - <a href="#new-plugins-2">New Plugins</a>
+ - <a href="#filter-2">Filter</a>
+- <a href="#v2-9-0">v2\.9\.0</a>
- <a href="#release-summary-19">Release Summary</a>
- <a href="#minor-changes-10">Minor Changes</a>
-- <a href="#v2-7-1">v2\.7\.1</a>
+- <a href="#v2-8-1">v2\.8\.1</a>
- <a href="#release-summary-20">Release Summary</a>
- - <a href="#bugfixes-13">Bugfixes</a>
-- <a href="#v2-7-0">v2\.7\.0</a>
+- <a href="#v2-8-0">v2\.8\.0</a>
- <a href="#release-summary-21">Release Summary</a>
- <a href="#minor-changes-11">Minor Changes</a>
- - <a href="#bugfixes-14">Bugfixes</a>
-- <a href="#v2-6-0">v2\.6\.0</a>
+- <a href="#v2-7-1">v2\.7\.1</a>
- <a href="#release-summary-22">Release Summary</a>
- - <a href="#minor-changes-12">Minor Changes</a>
-- <a href="#v2-5-0">v2\.5\.0</a>
+ - <a href="#bugfixes-15">Bugfixes</a>
+- <a href="#v2-7-0">v2\.7\.0</a>
- <a href="#release-summary-23">Release Summary</a>
- - <a href="#minor-changes-13">Minor Changes</a>
-- <a href="#v2-4-0">v2\.4\.0</a>
+ - <a href="#minor-changes-12">Minor Changes</a>
+ - <a href="#bugfixes-16">Bugfixes</a>
+- <a href="#v2-6-0">v2\.6\.0</a>
- <a href="#release-summary-24">Release Summary</a>
- - <a href="#deprecated-features-4">Deprecated Features</a>
- - <a href="#bugfixes-15">Bugfixes</a>
-- <a href="#v2-3-4">v2\.3\.4</a>
+ - <a href="#minor-changes-13">Minor Changes</a>
+- <a href="#v2-5-0">v2\.5\.0</a>
- <a href="#release-summary-25">Release Summary</a>
-- <a href="#v2-3-3">v2\.3\.3</a>
+ - <a href="#minor-changes-14">Minor Changes</a>
+- <a href="#v2-4-0">v2\.4\.0</a>
- <a href="#release-summary-26">Release Summary</a>
- - <a href="#bugfixes-16">Bugfixes</a>
-- <a href="#v2-3-2">v2\.3\.2</a>
- - <a href="#release-summary-27">Release Summary</a>
+ - <a href="#deprecated-features-5">Deprecated Features</a>
- <a href="#bugfixes-17">Bugfixes</a>
-- <a href="#v2-3-1">v2\.3\.1</a>
+- <a href="#v2-3-4">v2\.3\.4</a>
+ - <a href="#release-summary-27">Release Summary</a>
+- <a href="#v2-3-3">v2\.3\.3</a>
- <a href="#release-summary-28">Release Summary</a>
- <a href="#bugfixes-18">Bugfixes</a>
-- <a href="#v2-3-0">v2\.3\.0</a>
+- <a href="#v2-3-2">v2\.3\.2</a>
- <a href="#release-summary-29">Release Summary</a>
- - <a href="#minor-changes-14">Minor Changes</a>
- <a href="#bugfixes-19">Bugfixes</a>
-- <a href="#v2-2-4">v2\.2\.4</a>
+- <a href="#v2-3-1">v2\.3\.1</a>
- <a href="#release-summary-30">Release Summary</a>
- <a href="#bugfixes-20">Bugfixes</a>
-- <a href="#v2-2-3">v2\.2\.3</a>
+- <a href="#v2-3-0">v2\.3\.0</a>
- <a href="#release-summary-31">Release Summary</a>
+ - <a href="#minor-changes-15">Minor Changes</a>
- <a href="#bugfixes-21">Bugfixes</a>
-- <a href="#v2-2-2">v2\.2\.2</a>
+- <a href="#v2-2-4">v2\.2\.4</a>
- <a href="#release-summary-32">Release Summary</a>
- <a href="#bugfixes-22">Bugfixes</a>
-- <a href="#v2-2-1">v2\.2\.1</a>
+- <a href="#v2-2-3">v2\.2\.3</a>
- <a href="#release-summary-33">Release Summary</a>
- <a href="#bugfixes-23">Bugfixes</a>
-- <a href="#v2-2-0">v2\.2\.0</a>
+- <a href="#v2-2-2">v2\.2\.2</a>
- <a href="#release-summary-34">Release Summary</a>
- - <a href="#minor-changes-15">Minor Changes</a>
- <a href="#bugfixes-24">Bugfixes</a>
-- <a href="#v2-1-0">v2\.1\.0</a>
+- <a href="#v2-2-1">v2\.2\.1</a>
- <a href="#release-summary-35">Release Summary</a>
- - <a href="#minor-changes-16">Minor Changes</a>
- <a href="#bugfixes-25">Bugfixes</a>
- - <a href="#new-modules-1">New Modules</a>
-- <a href="#v2-0-2">v2\.0\.2</a>
+- <a href="#v2-2-0">v2\.2\.0</a>
- <a href="#release-summary-36">Release Summary</a>
-- <a href="#v2-0-1">v2\.0\.1</a>
+ - <a href="#minor-changes-16">Minor Changes</a>
+ - <a href="#bugfixes-26">Bugfixes</a>
+- <a href="#v2-1-0">v2\.1\.0</a>
- <a href="#release-summary-37">Release Summary</a>
- <a href="#minor-changes-17">Minor Changes</a>
- - <a href="#bugfixes-26">Bugfixes</a>
-- <a href="#v2-0-0">v2\.0\.0</a>
- - <a href="#release-summary-38">Release Summary</a>
- - <a href="#minor-changes-18">Minor Changes</a>
- - <a href="#breaking-changes--porting-guide">Breaking Changes / Porting Guide</a>
- - <a href="#deprecated-features-5">Deprecated Features</a>
- - <a href="#removed-features-previously-deprecated">Removed Features \(previously deprecated\)</a>
- <a href="#bugfixes-27">Bugfixes</a>
-- <a href="#v1-9-4">v1\.9\.4</a>
+ - <a href="#new-modules-2">New Modules</a>
+- <a href="#v2-0-2">v2\.0\.2</a>
+ - <a href="#release-summary-38">Release Summary</a>
+- <a href="#v2-0-1">v2\.0\.1</a>
- <a href="#release-summary-39">Release Summary</a>
+ - <a href="#minor-changes-18">Minor Changes</a>
- <a href="#bugfixes-28">Bugfixes</a>
-- <a href="#v1-9-3">v1\.9\.3</a>
+- <a href="#v2-0-0">v2\.0\.0</a>
- <a href="#release-summary-40">Release Summary</a>
+ - <a href="#minor-changes-19">Minor Changes</a>
+ - <a href="#breaking-changes--porting-guide">Breaking Changes / Porting Guide</a>
+ - <a href="#deprecated-features-6">Deprecated Features</a>
+ - <a href="#removed-features-previously-deprecated">Removed Features \(previously deprecated\)</a>
- <a href="#bugfixes-29">Bugfixes</a>
-- <a href="#v1-9-2">v1\.9\.2</a>
+- <a href="#v1-9-4">v1\.9\.4</a>
- <a href="#release-summary-41">Release Summary</a>
-- <a href="#v1-9-1">v1\.9\.1</a>
+ - <a href="#bugfixes-30">Bugfixes</a>
+- <a href="#v1-9-3">v1\.9\.3</a>
- <a href="#release-summary-42">Release Summary</a>
-- <a href="#v1-9-0">v1\.9\.0</a>
+ - <a href="#bugfixes-31">Bugfixes</a>
+- <a href="#v1-9-2">v1\.9\.2</a>
- <a href="#release-summary-43">Release Summary</a>
- - <a href="#minor-changes-19">Minor Changes</a>
- - <a href="#bugfixes-30">Bugfixes</a>
-- <a href="#v1-8-0">v1\.8\.0</a>
+- <a href="#v1-9-1">v1\.9\.1</a>
- <a href="#release-summary-44">Release Summary</a>
- - <a href="#minor-changes-20">Minor Changes</a>
- - <a href="#bugfixes-31">Bugfixes</a>
-- <a href="#v1-7-1">v1\.7\.1</a>
+- <a href="#v1-9-0">v1\.9\.0</a>
- <a href="#release-summary-45">Release Summary</a>
+ - <a href="#minor-changes-20">Minor Changes</a>
- <a href="#bugfixes-32">Bugfixes</a>
-- <a href="#v1-7-0">v1\.7\.0</a>
+- <a href="#v1-8-0">v1\.8\.0</a>
- <a href="#release-summary-46">Release Summary</a>
- <a href="#minor-changes-21">Minor Changes</a>
- <a href="#bugfixes-33">Bugfixes</a>
- - <a href="#new-modules-2">New Modules</a>
-- <a href="#v1-6-2">v1\.6\.2</a>
+- <a href="#v1-7-1">v1\.7\.1</a>
- <a href="#release-summary-47">Release Summary</a>
- <a href="#bugfixes-34">Bugfixes</a>
-- <a href="#v1-6-1">v1\.6\.1</a>
+- <a href="#v1-7-0">v1\.7\.0</a>
- <a href="#release-summary-48">Release Summary</a>
+ - <a href="#minor-changes-22">Minor Changes</a>
- <a href="#bugfixes-35">Bugfixes</a>
-- <a href="#v1-6-0">v1\.6\.0</a>
+ - <a href="#new-modules-3">New Modules</a>
+- <a href="#v1-6-2">v1\.6\.2</a>
- <a href="#release-summary-49">Release Summary</a>
- - <a href="#minor-changes-22">Minor Changes</a>
- - <a href="#deprecated-features-6">Deprecated Features</a>
- <a href="#bugfixes-36">Bugfixes</a>
-- <a href="#v1-5-0">v1\.5\.0</a>
+- <a href="#v1-6-1">v1\.6\.1</a>
- <a href="#release-summary-50">Release Summary</a>
- - <a href="#minor-changes-23">Minor Changes</a>
- - <a href="#deprecated-features-7">Deprecated Features</a>
- <a href="#bugfixes-37">Bugfixes</a>
-- <a href="#v1-4-0">v1\.4\.0</a>
+- <a href="#v1-6-0">v1\.6\.0</a>
- <a href="#release-summary-51">Release Summary</a>
- - <a href="#minor-changes-24">Minor Changes</a>
+ - <a href="#minor-changes-23">Minor Changes</a>
+ - <a href="#deprecated-features-7">Deprecated Features</a>
- <a href="#bugfixes-38">Bugfixes</a>
-- <a href="#v1-3-0">v1\.3\.0</a>
+- <a href="#v1-5-0">v1\.5\.0</a>
- <a href="#release-summary-52">Release Summary</a>
- - <a href="#minor-changes-25">Minor Changes</a>
+ - <a href="#minor-changes-24">Minor Changes</a>
+ - <a href="#deprecated-features-8">Deprecated Features</a>
- <a href="#bugfixes-39">Bugfixes</a>
- - <a href="#new-modules-3">New Modules</a>
-- <a href="#v1-2-0">v1\.2\.0</a>
+- <a href="#v1-4-0">v1\.4\.0</a>
- <a href="#release-summary-53">Release Summary</a>
- - <a href="#minor-changes-26">Minor Changes</a>
- - <a href="#security-fixes">Security Fixes</a>
+ - <a href="#minor-changes-25">Minor Changes</a>
- <a href="#bugfixes-40">Bugfixes</a>
-- <a href="#v1-1-1">v1\.1\.1</a>
+- <a href="#v1-3-0">v1\.3\.0</a>
- <a href="#release-summary-54">Release Summary</a>
+ - <a href="#minor-changes-26">Minor Changes</a>
- <a href="#bugfixes-41">Bugfixes</a>
-- <a href="#v1-1-0">v1\.1\.0</a>
+ - <a href="#new-modules-4">New Modules</a>
+- <a href="#v1-2-0">v1\.2\.0</a>
- <a href="#release-summary-55">Release Summary</a>
- <a href="#minor-changes-27">Minor Changes</a>
+ - <a href="#security-fixes">Security Fixes</a>
- <a href="#bugfixes-42">Bugfixes</a>
- - <a href="#new-modules-4">New Modules</a>
-- <a href="#v1-0-0">v1\.0\.0</a>
+- <a href="#v1-1-1">v1\.1\.1</a>
- <a href="#release-summary-56">Release Summary</a>
- - <a href="#minor-changes-28">Minor Changes</a>
- - <a href="#deprecated-features-8">Deprecated Features</a>
- - <a href="#removed-features-previously-deprecated-1">Removed Features \(previously deprecated\)</a>
- <a href="#bugfixes-43">Bugfixes</a>
+- <a href="#v1-1-0">v1\.1\.0</a>
+ - <a href="#release-summary-57">Release Summary</a>
+ - <a href="#minor-changes-28">Minor Changes</a>
+ - <a href="#bugfixes-44">Bugfixes</a>
- <a href="#new-modules-5">New Modules</a>
+- <a href="#v1-0-0">v1\.0\.0</a>
+ - <a href="#release-summary-58">Release Summary</a>
+ - <a href="#minor-changes-29">Minor Changes</a>
+ - <a href="#deprecated-features-9">Deprecated Features</a>
+ - <a href="#removed-features-previously-deprecated-1">Removed Features \(previously deprecated\)</a>
+ - <a href="#bugfixes-45">Bugfixes</a>
+ - <a href="#new-modules-6">New Modules</a>
+
+<a id="v2-20-0"></a>
+## v2\.20\.0
+
+<a id="release-summary"></a>
+### Release Summary
+
+Feature and bugfix release\.
+
+The deprecations in this release are only relevant for collections that use shared
+code or docs fragments from this collection\.
+
+<a id="minor-changes"></a>
+### Minor Changes
+
+* acme\_certificate \- add <code>include\_renewal\_cert\_id</code> 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)\)\.
+
+<a id="deprecated-features"></a>
+### Deprecated Features
+
+* acme documentation fragment \- the default <code>community\.crypto\.acme\[\.documentation\]</code> docs fragment is deprecated and will be removed from community\.crypto 3\.0\.0\. Replace it with both the new <code>community\.crypto\.acme\.basic</code> and <code>community\.crypto\.acme\.account</code> fragments \([https\://github\.com/ansible\-collections/community\.crypto/pull/735](https\://github\.com/ansible\-collections/community\.crypto/pull/735)\)\.
+* acme\.backends module utils \- the <code>get\_cert\_information\(\)</code> 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 <code>crypto\.module\_backends\.common</code> module utils is deprecated and will be removed from community\.crypto 3\.0\.0\. Use the improved <code>argspec</code> module util instead \([https\://github\.com/ansible\-collections/community\.crypto/pull/749](https\://github\.com/ansible\-collections/community\.crypto/pull/749)\)\.
+
+<a id="bugfixes"></a>
+### Bugfixes
+
+* 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)\)\.
+
+<a id="new-modules"></a>
+### New Modules
+
+* 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\.
+
+<a id="v2-19-1"></a>
+## v2\.19\.1
+
+<a id="release-summary-1"></a>
+### Release Summary
+
+Bugfix release\.
+
+<a id="bugfixes-1"></a>
+### Bugfixes
+
+* crypto\.math module utils \- change return values for <code>quick\_is\_not\_prime\(\)</code> and <code>convert\_int\_to\_bytes\(0\, 0\)</code> 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 <code>csr</code> 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)\)\.
+* x509\_certificate \- since community\.crypto 2\.19\.0 the module was no longer idempotent with respect to <code>not\_before</code> and <code>not\_after</code> 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)\)\.
<a id="v2-19-0"></a>
## v2\.19\.0
-<a id="release-summary"></a>
+<a id="release-summary-2"></a>
### Release Summary
Bugfix and feature release\.
-<a id="minor-changes"></a>
+<a id="minor-changes-1"></a>
### Minor Changes
* When using cryptography \>\= 42\.0\.0\, use offset\-aware <code>datetime\.datetime</code> 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)\)\.
-<a id="deprecated-features"></a>
+<a id="deprecated-features-1"></a>
### Deprecated Features
* acme\.backends module utils \- from community\.crypto on\, all implementations of <code>CryptoBackend</code> must override <code>get\_ordered\_csr\_identifiers\(\)</code>\. The current default implementation\, which simply sorts the result of <code>get\_csr\_identifiers\(\)</code>\, will then be removed \([https\://github\.com/ansible\-collections/community\.crypto/pull/725](https\://github\.com/ansible\-collections/community\.crypto/pull/725)\)\.
-<a id="bugfixes"></a>
+<a id="bugfixes-2"></a>
### Bugfixes
* 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)\)\.
-<a id="new-modules"></a>
+<a id="new-modules-1"></a>
### New Modules
-* x509\_certificate\_convert \- Convert X\.509 certificates
+* community\.crypto\.x509\_certificate\_convert \- Convert X\.509 certificates
<a id="v2-18-0"></a>
## v2\.18\.0
-<a id="release-summary-1"></a>
+<a id="release-summary-3"></a>
### Release Summary
Bugfix and feature release\.
-<a id="minor-changes-1"></a>
+<a id="minor-changes-2"></a>
### Minor Changes
* x509\_crl \- the new option <code>serial\_numbers</code> allow to configure in which format serial numbers can be provided to <code>revoked\_certificates\[\]\.serial\_number</code>\. The default is as integers \(<code>serial\_numbers\=integer</code>\) for backwards compatibility\; setting <code>serial\_numbers\=hex\-octets</code> allows to specify colon\-separated hex octet strings like <code>00\:11\:22\:FF</code> \([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)\)\.
-<a id="deprecated-features-1"></a>
+<a id="deprecated-features-2"></a>
### Deprecated Features
* 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 <code>\_pipe</code>\: if the object needs to be \(re\-\)generated\, only the <code>changed</code> 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 <code>check\_mode\: false</code> 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)\)\.
-<a id="bugfixes-1"></a>
+<a id="bugfixes-3"></a>
### Bugfixes
* luks\_device \- fixed module a bug that prevented using <code>remove\_keyslot</code> with the value <code>0</code> \([https\://github\.com/ansible\-collections/community\.crypto/pull/710](https\://github\.com/ansible\-collections/community\.crypto/pull/710)\)\.
@@ -277,18 +336,18 @@ Bugfix and feature release\.
<a id="filter"></a>
#### Filter
-* parse\_serial \- Convert a serial number as a colon\-separated list of hex numbers to an integer
-* to\_serial \- Convert an integer to a colon\-separated list of hex numbers
+* 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
<a id="v2-17-1"></a>
## v2\.17\.1
-<a id="release-summary-2"></a>
+<a id="release-summary-4"></a>
### Release Summary
Bugfix release for compatibility with cryptography 42\.0\.0\.
-<a id="bugfixes-2"></a>
+<a id="bugfixes-4"></a>
### Bugfixes
* openssl\_dhparam \- was using an internal function instead of the public API to load DH param files when using the <code>cryptography</code> 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)\)\.
@@ -298,12 +357,12 @@ Bugfix release for compatibility with cryptography 42\.0\.0\.
<a id="v2-17-0"></a>
## v2\.17\.0
-<a id="release-summary-3"></a>
+<a id="release-summary-5"></a>
### Release Summary
Feature release\.
-<a id="minor-changes-2"></a>
+<a id="minor-changes-3"></a>
### Minor Changes
* luks\_device \- add allow discards option \([https\://github\.com/ansible\-collections/community\.crypto/pull/693](https\://github\.com/ansible\-collections/community\.crypto/pull/693)\)\.
@@ -311,12 +370,12 @@ Feature release\.
<a id="v2-16-2"></a>
## v2\.16\.2
-<a id="release-summary-4"></a>
+<a id="release-summary-6"></a>
### Release Summary
Bugfix release\.
-<a id="bugfixes-3"></a>
+<a id="bugfixes-5"></a>
### Bugfixes
* 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)\)\.
@@ -327,12 +386,12 @@ Bugfix release\.
<a id="v2-16-1"></a>
## v2\.16\.1
-<a id="release-summary-5"></a>
+<a id="release-summary-7"></a>
### Release Summary
Bugfix release\.
-<a id="bugfixes-4"></a>
+<a id="bugfixes-6"></a>
### Bugfixes
* 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)\)\.
@@ -340,17 +399,17 @@ Bugfix release\.
<a id="v2-16-0"></a>
## v2\.16\.0
-<a id="release-summary-6"></a>
+<a id="release-summary-8"></a>
### Release Summary
Bugfix release\.
-<a id="minor-changes-3"></a>
+<a id="minor-changes-4"></a>
### Minor Changes
* luks\_devices \- add new options <code>keyslot</code>\, <code>new\_keyslot</code>\, and <code>remove\_keyslot</code> 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)\)\.
-<a id="bugfixes-5"></a>
+<a id="bugfixes-7"></a>
### Bugfixes
* 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)\)\.
@@ -358,12 +417,12 @@ Bugfix release\.
<a id="v2-15-1"></a>
## v2\.15\.1
-<a id="release-summary-7"></a>
+<a id="release-summary-9"></a>
### Release Summary
Bugfix release\.
-<a id="bugfixes-6"></a>
+<a id="bugfixes-8"></a>
### Bugfixes
* acme\_\* modules \- correctly handle error documents without <code>type</code> \([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)\)\.
@@ -371,22 +430,22 @@ Bugfix release\.
<a id="v2-15-0"></a>
## v2\.15\.0
-<a id="release-summary-8"></a>
+<a id="release-summary-10"></a>
### Release Summary
Bugfix and feature release\.
-<a id="minor-changes-4"></a>
+<a id="minor-changes-5"></a>
### Minor Changes
* 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)\)\.
-<a id="deprecated-features-2"></a>
+<a id="deprecated-features-3"></a>
### Deprecated Features
* get\_certificate \- the default <code>false</code> of the <code>asn1\_base64</code> option is deprecated and will change to <code>true</code> in community\.crypto 3\.0\.0 \([https\://github\.com/ansible\-collections/community\.crypto/pull/600](https\://github\.com/ansible\-collections/community\.crypto/pull/600)\)\.
-<a id="bugfixes-7"></a>
+<a id="bugfixes-9"></a>
### Bugfixes
* openssh\_cert\, openssh\_keypair \- the modules ignored return codes of <code>ssh</code> and <code>ssh\-keygen</code> 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)\)\.
@@ -398,17 +457,17 @@ Bugfix and feature release\.
<a id="filter-1"></a>
#### Filter
-* gpg\_fingerprint \- Retrieve a GPG fingerprint from a GPG public or private key
+* community\.crypto\.gpg\_fingerprint \- Retrieve a GPG fingerprint from a GPG public or private key
<a id="lookup"></a>
#### Lookup
-* gpg\_fingerprint \- Retrieve a GPG fingerprint from a GPG public or private key file
+* community\.crypto\.gpg\_fingerprint \- Retrieve a GPG fingerprint from a GPG public or private key file
<a id="v2-14-1"></a>
## v2\.14\.1
-<a id="release-summary-9"></a>
+<a id="release-summary-11"></a>
### Release Summary
Bugfix and maintenance release with updated documentation\.
@@ -421,7 +480,7 @@ ansible\-core 2\.15 or later to see it as it is intended\. Alternatively you can
look at [the devel docsite](https\://docs\.ansible\.com/ansible/devel/collections/community/crypto/)
for the rendered HTML version of the documentation of the latest release\.
-<a id="bugfixes-8"></a>
+<a id="bugfixes-10"></a>
### Bugfixes
* Fix PEM detection/identification to also accept random other lines before the line starting with <code>\-\-\-\-\-BEGIN</code> \([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)\)\.
@@ -434,12 +493,12 @@ for the rendered HTML version of the documentation of the latest release\.
<a id="v2-14-0"></a>
## v2\.14\.0
-<a id="release-summary-10"></a>
+<a id="release-summary-12"></a>
### Release Summary
Feature release\.
-<a id="minor-changes-5"></a>
+<a id="minor-changes-6"></a>
### Minor Changes
* acme\_certificate \- allow to use no challenge by providing <code>no challenge</code> for the <code>challenge</code> 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)\)\.
@@ -449,12 +508,12 @@ Feature release\.
<a id="v2-13-1"></a>
## v2\.13\.1
-<a id="release-summary-11"></a>
+<a id="release-summary-13"></a>
### Release Summary
Bugfix release\.
-<a id="bugfixes-9"></a>
+<a id="bugfixes-11"></a>
### Bugfixes
* execution environment definition \- fix installation of <code>python3\-pyOpenSSL</code> package on CentOS and RHEL \([https\://github\.com/ansible\-collections/community\.crypto/pull/606](https\://github\.com/ansible\-collections/community\.crypto/pull/606)\)\.
@@ -463,22 +522,22 @@ Bugfix release\.
<a id="v2-13-0"></a>
## v2\.13\.0
-<a id="release-summary-12"></a>
+<a id="release-summary-14"></a>
### Release Summary
Bugfix and maintenance release\.
-<a id="minor-changes-6"></a>
+<a id="minor-changes-7"></a>
### Minor Changes
* x509\_crl \- the <code>crl\_mode</code> option has been added to replace the existing <code>mode</code> option \([https\://github\.com/ansible\-collections/community\.crypto/issues/596](https\://github\.com/ansible\-collections/community\.crypto/issues/596)\)\.
-<a id="deprecated-features-3"></a>
+<a id="deprecated-features-4"></a>
### Deprecated Features
* x509\_crl \- the <code>mode</code> option is deprecated\; use <code>crl\_mode</code> instead\. The <code>mode</code> option will change its meaning in community\.crypto 3\.0\.0\, and will refer to the CRL file\'s mode instead \([https\://github\.com/ansible\-collections/community\.crypto/issues/596](https\://github\.com/ansible\-collections/community\.crypto/issues/596)\)\.
-<a id="bugfixes-10"></a>
+<a id="bugfixes-12"></a>
### Bugfixes
* openssh\_keypair \- always generate a new key pair if the private key does not exist\. Previously\, the module would fail when <code>regenerate\=fail</code> without an existing key\, contradicting the documentation \([https\://github\.com/ansible\-collections/community\.crypto/pull/598](https\://github\.com/ansible\-collections/community\.crypto/pull/598)\)\.
@@ -487,12 +546,12 @@ Bugfix and maintenance release\.
<a id="v2-12-0"></a>
## v2\.12\.0
-<a id="release-summary-13"></a>
+<a id="release-summary-15"></a>
### Release Summary
Feature release\.
-<a id="minor-changes-7"></a>
+<a id="minor-changes-8"></a>
### Minor Changes
* get\_certificate \- add <code>asn1\_base64</code> option to control whether the ASN\.1 included in the <code>extensions</code> return value is binary data or Base64 encoded \([https\://github\.com/ansible\-collections/community\.crypto/pull/592](https\://github\.com/ansible\-collections/community\.crypto/pull/592)\)\.
@@ -500,7 +559,7 @@ Feature release\.
<a id="v2-11-1"></a>
## v2\.11\.1
-<a id="release-summary-14"></a>
+<a id="release-summary-16"></a>
### Release Summary
Maintenance release with improved documentation\.
@@ -508,17 +567,17 @@ Maintenance release with improved documentation\.
<a id="v2-11-0"></a>
## v2\.11\.0
-<a id="release-summary-15"></a>
+<a id="release-summary-17"></a>
### Release Summary
Feature and bugfix release\.
-<a id="minor-changes-8"></a>
+<a id="minor-changes-9"></a>
### Minor Changes
* get\_certificate \- adds <code>ciphers</code> option for custom cipher selection \([https\://github\.com/ansible\-collections/community\.crypto/pull/571](https\://github\.com/ansible\-collections/community\.crypto/pull/571)\)\.
-<a id="bugfixes-11"></a>
+<a id="bugfixes-13"></a>
### Bugfixes
* action plugin helper \- fix handling of deprecations for ansible\-core 2\.14\.2 \([https\://github\.com/ansible\-collections/community\.crypto/pull/572](https\://github\.com/ansible\-collections/community\.crypto/pull/572)\)\.
@@ -528,12 +587,12 @@ Feature and bugfix release\.
<a id="v2-10-0"></a>
## v2\.10\.0
-<a id="release-summary-16"></a>
+<a id="release-summary-18"></a>
### Release Summary
Bugfix and feature release\.
-<a id="bugfixes-12"></a>
+<a id="bugfixes-14"></a>
### Bugfixes
* openssl\_csr\, openssl\_csr\_pipe \- prevent invalid values for <code>crl\_distribution\_points</code> that do not have one of <code>full\_name</code>\, <code>relative\_name</code>\, and <code>crl\_issuer</code> \([https\://github\.com/ansible\-collections/community\.crypto/pull/560](https\://github\.com/ansible\-collections/community\.crypto/pull/560)\)\.
@@ -545,22 +604,22 @@ Bugfix and feature release\.
<a id="filter-2"></a>
#### Filter
-* openssl\_csr\_info \- Retrieve information from OpenSSL Certificate Signing Requests \(CSR\)
-* openssl\_privatekey\_info \- Retrieve information from OpenSSL private keys
-* openssl\_publickey\_info \- Retrieve information from OpenSSL public keys in PEM format
-* split\_pem \- Split PEM file contents into multiple objects
-* x509\_certificate\_info \- Retrieve information from X\.509 certificates in PEM format
-* x509\_crl\_info \- Retrieve information from X\.509 CRLs in PEM format
+* community\.crypto\.openssl\_csr\_info \- Retrieve information from OpenSSL Certificate Signing Requests \(CSR\)
+* community\.crypto\.openssl\_privatekey\_info \- Retrieve information from OpenSSL private keys
+* community\.crypto\.openssl\_publickey\_info \- Retrieve information from OpenSSL public keys in PEM format
+* community\.crypto\.split\_pem \- Split PEM file contents into multiple objects
+* community\.crypto\.x509\_certificate\_info \- Retrieve information from X\.509 certificates in PEM format
+* community\.crypto\.x509\_crl\_info \- Retrieve information from X\.509 CRLs in PEM format
<a id="v2-9-0"></a>
## v2\.9\.0
-<a id="release-summary-17"></a>
+<a id="release-summary-19"></a>
### Release Summary
Regular feature release\.
-<a id="minor-changes-9"></a>
+<a id="minor-changes-10"></a>
### Minor Changes
* x509\_certificate\_info \- adds <code>issuer\_uri</code> field in return value based on Authority Information Access data \([https\://github\.com/ansible\-collections/community\.crypto/pull/530](https\://github\.com/ansible\-collections/community\.crypto/pull/530)\)\.
@@ -568,7 +627,7 @@ Regular feature release\.
<a id="v2-8-1"></a>
## v2\.8\.1
-<a id="release-summary-18"></a>
+<a id="release-summary-20"></a>
### Release Summary
Maintenance release with improved documentation\.
@@ -576,12 +635,12 @@ Maintenance release with improved documentation\.
<a id="v2-8-0"></a>
## v2\.8\.0
-<a id="release-summary-19"></a>
+<a id="release-summary-21"></a>
### Release Summary
Feature release\.
-<a id="minor-changes-10"></a>
+<a id="minor-changes-11"></a>
### Minor Changes
* acme\_\* modules \- handle more gracefully if CA\'s new nonce call does not return a nonce \([https\://github\.com/ansible\-collections/community\.crypto/pull/525](https\://github\.com/ansible\-collections/community\.crypto/pull/525)\)\.
@@ -591,12 +650,12 @@ Feature release\.
<a id="v2-7-1"></a>
## v2\.7\.1
-<a id="release-summary-20"></a>
+<a id="release-summary-22"></a>
### Release Summary
Maintenance release\.
-<a id="bugfixes-13"></a>
+<a id="bugfixes-15"></a>
### Bugfixes
* acme\_\* modules \- improve feedback when importing <code>cryptography</code> does not work \([https\://github\.com/ansible\-collections/community\.crypto/issues/518](https\://github\.com/ansible\-collections/community\.crypto/issues/518)\, [https\://github\.com/ansible\-collections/community\.crypto/pull/519](https\://github\.com/ansible\-collections/community\.crypto/pull/519)\)\.
@@ -604,17 +663,17 @@ Maintenance release\.
<a id="v2-7-0"></a>
## v2\.7\.0
-<a id="release-summary-21"></a>
+<a id="release-summary-23"></a>
### Release Summary
Feature release\.
-<a id="minor-changes-11"></a>
+<a id="minor-changes-12"></a>
### Minor Changes
* acme\* modules \- also support the HTTP 503 Service Unavailable and 408 Request Timeout response status for automatic retries \([https\://github\.com/ansible\-collections/community\.crypto/pull/513](https\://github\.com/ansible\-collections/community\.crypto/pull/513)\)\.
-<a id="bugfixes-14"></a>
+<a id="bugfixes-16"></a>
### Bugfixes
* openssl\_privatekey\_pipe \- ensure compatibility with newer versions of ansible\-core \([https\://github\.com/ansible\-collections/community\.crypto/pull/515](https\://github\.com/ansible\-collections/community\.crypto/pull/515)\)\.
@@ -622,12 +681,12 @@ Feature release\.
<a id="v2-6-0"></a>
## v2\.6\.0
-<a id="release-summary-22"></a>
+<a id="release-summary-24"></a>
### Release Summary
Feature release\.
-<a id="minor-changes-12"></a>
+<a id="minor-changes-13"></a>
### Minor Changes
* acme\* modules \- support the HTTP 429 Too Many Requests response status \([https\://github\.com/ansible\-collections/community\.crypto/pull/508](https\://github\.com/ansible\-collections/community\.crypto/pull/508)\)\.
@@ -636,12 +695,12 @@ Feature release\.
<a id="v2-5-0"></a>
## v2\.5\.0
-<a id="release-summary-23"></a>
+<a id="release-summary-25"></a>
### Release Summary
Maintenance release with improved licensing declaration and documentation fixes\.
-<a id="minor-changes-13"></a>
+<a id="minor-changes-14"></a>
### Minor Changes
* All software licenses are now in the <code>LICENSES/</code> directory of the collection root\. Moreover\, <code>SPDX\-License\-Identifier\:</code> is used to declare the applicable license for every file that is not automatically generated \([https\://github\.com/ansible\-collections/community\.crypto/pull/491](https\://github\.com/ansible\-collections/community\.crypto/pull/491)\)\.
@@ -649,17 +708,17 @@ Maintenance release with improved licensing declaration and documentation fixes\
<a id="v2-4-0"></a>
## v2\.4\.0
-<a id="release-summary-24"></a>
+<a id="release-summary-26"></a>
### Release Summary
Deprecation and bugfix release\. No new features this time\.
-<a id="deprecated-features-4"></a>
+<a id="deprecated-features-5"></a>
### Deprecated Features
* Support for Ansible 2\.9 and ansible\-base 2\.10 is deprecated\, and will be removed in the next major release \(community\.crypto 3\.0\.0\)\. Some modules might still work with these versions afterwards\, but we will no longer keep compatibility code that was needed to support them \([https\://github\.com/ansible\-collections/community\.crypto/pull/460](https\://github\.com/ansible\-collections/community\.crypto/pull/460)\)\.
-<a id="bugfixes-15"></a>
+<a id="bugfixes-17"></a>
### Bugfixes
* openssl\_pkcs12 \- when using the pyOpenSSL backend\, do not crash when trying to read non\-existing other certificates \([https\://github\.com/ansible\-collections/community\.crypto/issues/486](https\://github\.com/ansible\-collections/community\.crypto/issues/486)\, [https\://github\.com/ansible\-collections/community\.crypto/pull/487](https\://github\.com/ansible\-collections/community\.crypto/pull/487)\)\.
@@ -667,7 +726,7 @@ Deprecation and bugfix release\. No new features this time\.
<a id="v2-3-4"></a>
## v2\.3\.4
-<a id="release-summary-25"></a>
+<a id="release-summary-27"></a>
### Release Summary
Re\-release of what was intended to be 2\.3\.3\.
@@ -683,12 +742,12 @@ has been added\.
<a id="v2-3-3"></a>
## v2\.3\.3
-<a id="release-summary-26"></a>
+<a id="release-summary-28"></a>
### Release Summary
Bugfix release\.
-<a id="bugfixes-16"></a>
+<a id="bugfixes-18"></a>
### Bugfixes
* Include <code>Apache\-2\.0\.txt</code> file for <code>plugins/module\_utils/crypto/\_obj2txt\.py</code> and <code>plugins/module\_utils/crypto/\_objects\_data\.py</code>\.
@@ -698,12 +757,12 @@ Bugfix release\.
<a id="v2-3-2"></a>
## v2\.3\.2
-<a id="release-summary-27"></a>
+<a id="release-summary-29"></a>
### Release Summary
Maintenance and bugfix release\.
-<a id="bugfixes-17"></a>
+<a id="bugfixes-19"></a>
### Bugfixes
* Include <code>simplified\_bsd\.txt</code> license file for the ECS module utils\.
@@ -712,12 +771,12 @@ Maintenance and bugfix release\.
<a id="v2-3-1"></a>
## v2\.3\.1
-<a id="release-summary-28"></a>
+<a id="release-summary-30"></a>
### Release Summary
Maintenance release\.
-<a id="bugfixes-18"></a>
+<a id="bugfixes-20"></a>
### Bugfixes
* Include <code>PSF\-license\.txt</code> file for <code>plugins/module\_utils/\_version\.py</code>\.
@@ -725,12 +784,12 @@ Maintenance release\.
<a id="v2-3-0"></a>
## v2\.3\.0
-<a id="release-summary-29"></a>
+<a id="release-summary-31"></a>
### Release Summary
Feature and bugfix release\.
-<a id="minor-changes-14"></a>
+<a id="minor-changes-15"></a>
### Minor Changes
* Prepare collection for inclusion in an Execution Environment by declaring its dependencies\. Please note that system packages are used for cryptography and PyOpenSSL\, which can be rather limited\. If you need features from newer cryptography versions\, you will have to manually force a newer version to be installed by pip by specifying something like <code>cryptography \>\= 37\.0\.0</code> in your Execution Environment\'s Python dependencies file \([https\://github\.com/ansible\-collections/community\.crypto/pull/440](https\://github\.com/ansible\-collections/community\.crypto/pull/440)\)\.
@@ -744,7 +803,7 @@ Feature and bugfix release\.
* x509\_crl \- add <code>name\_encoding</code> option to control the encoding \(IDNA\, Unicode\) used to return domain names in general names \([https\://github\.com/ansible\-collections/community\.crypto/pull/436](https\://github\.com/ansible\-collections/community\.crypto/pull/436)\)\.
* x509\_crl\_info \- add <code>name\_encoding</code> option to control the encoding \(IDNA\, Unicode\) used to return domain names in general names \([https\://github\.com/ansible\-collections/community\.crypto/pull/436](https\://github\.com/ansible\-collections/community\.crypto/pull/436)\)\.
-<a id="bugfixes-19"></a>
+<a id="bugfixes-21"></a>
### Bugfixes
* Make collection more robust when PyOpenSSL is used with an incompatible cryptography version \([https\://github\.com/ansible\-collections/community\.crypto/pull/445](https\://github\.com/ansible\-collections/community\.crypto/pull/445)\)\.
@@ -753,12 +812,12 @@ Feature and bugfix release\.
<a id="v2-2-4"></a>
## v2\.2\.4
-<a id="release-summary-30"></a>
+<a id="release-summary-32"></a>
### Release Summary
Regular maintenance release\.
-<a id="bugfixes-20"></a>
+<a id="bugfixes-22"></a>
### Bugfixes
* openssh\_\* modules \- fix exception handling to report traceback to users for enhanced traceability \([https\://github\.com/ansible\-collections/community\.crypto/pull/417](https\://github\.com/ansible\-collections/community\.crypto/pull/417)\)\.
@@ -766,12 +825,12 @@ Regular maintenance release\.
<a id="v2-2-3"></a>
## v2\.2\.3
-<a id="release-summary-31"></a>
+<a id="release-summary-33"></a>
### Release Summary
Regular bugfix release\.
-<a id="bugfixes-21"></a>
+<a id="bugfixes-23"></a>
### Bugfixes
* luks\_device \- fix parsing of <code>lsblk</code> output when device name ends with <code>crypt</code> \([https\://github\.com/ansible\-collections/community\.crypto/issues/409](https\://github\.com/ansible\-collections/community\.crypto/issues/409)\, [https\://github\.com/ansible\-collections/community\.crypto/pull/410](https\://github\.com/ansible\-collections/community\.crypto/pull/410)\)\.
@@ -779,14 +838,14 @@ Regular bugfix release\.
<a id="v2-2-2"></a>
## v2\.2\.2
-<a id="release-summary-32"></a>
+<a id="release-summary-34"></a>
### Release Summary
Regular bugfix release\.
In this release\, we extended the test matrix to include Alpine 3\, ArchLinux\, Debian Bullseye\, and CentOS Stream 8\. CentOS 8 was removed from the test matrix\.
-<a id="bugfixes-22"></a>
+<a id="bugfixes-24"></a>
### Bugfixes
* certificate\_complete\_chain \- allow multiple potential intermediate certificates to have the same subject \([https\://github\.com/ansible\-collections/community\.crypto/issues/399](https\://github\.com/ansible\-collections/community\.crypto/issues/399)\, [https\://github\.com/ansible\-collections/community\.crypto/pull/403](https\://github\.com/ansible\-collections/community\.crypto/pull/403)\)\.
@@ -798,12 +857,12 @@ In this release\, we extended the test matrix to include Alpine 3\, ArchLinux\,
<a id="v2-2-1"></a>
## v2\.2\.1
-<a id="release-summary-33"></a>
+<a id="release-summary-35"></a>
### Release Summary
Bugfix release\.
-<a id="bugfixes-23"></a>
+<a id="bugfixes-25"></a>
### Bugfixes
* openssh\_cert \- fixed false <code>changed</code> status for <code>host</code> certificates when using <code>full\_idempotence</code> \([https\://github\.com/ansible\-collections/community\.crypto/issues/395](https\://github\.com/ansible\-collections/community\.crypto/issues/395)\, [https\://github\.com/ansible\-collections/community\.crypto/pull/396](https\://github\.com/ansible\-collections/community\.crypto/pull/396)\)\.
@@ -811,17 +870,17 @@ Bugfix release\.
<a id="v2-2-0"></a>
## v2\.2\.0
-<a id="release-summary-34"></a>
+<a id="release-summary-36"></a>
### Release Summary
Regular bugfix and feature release\.
-<a id="minor-changes-15"></a>
+<a id="minor-changes-16"></a>
### Minor Changes
* openssh\_cert \- added <code>ignore\_timestamps</code> parameter so it can be used semi\-idempotent with relative timestamps in <code>valid\_to</code>/<code>valid\_from</code> \([https\://github\.com/ansible\-collections/community\.crypto/issues/379](https\://github\.com/ansible\-collections/community\.crypto/issues/379)\)\.
-<a id="bugfixes-24"></a>
+<a id="bugfixes-26"></a>
### Bugfixes
* luks\_devices \- set <code>LANG</code> and similar environment variables to avoid translated output\, which can break some of the module\'s functionality like key management \([https\://github\.com/ansible\-collections/community\.crypto/pull/388](https\://github\.com/ansible\-collections/community\.crypto/pull/388)\, [https\://github\.com/ansible\-collections/community\.crypto/issues/385](https\://github\.com/ansible\-collections/community\.crypto/issues/385)\)\.
@@ -829,33 +888,33 @@ Regular bugfix and feature release\.
<a id="v2-1-0"></a>
## v2\.1\.0
-<a id="release-summary-35"></a>
+<a id="release-summary-37"></a>
### Release Summary
Feature and bugfix release\.
-<a id="minor-changes-16"></a>
+<a id="minor-changes-17"></a>
### Minor Changes
* Adjust error messages that indicate <code>cryptography</code> is not installed from <code>Can\'t</code> to <code>Cannot</code> \([https\://github\.com/ansible\-collections/community\.crypto/pull/374](https\://github\.com/ansible\-collections/community\.crypto/pull/374)\)\.
-<a id="bugfixes-25"></a>
+<a id="bugfixes-27"></a>
### Bugfixes
* Various modules and plugins \- use vendored version of <code>distutils\.version</code> instead of the deprecated Python standard library <code>distutils</code> \([https\://github\.com/ansible\-collections/community\.crypto/pull/353](https\://github\.com/ansible\-collections/community\.crypto/pull/353)\)\.
* certificate\_complete\_chain \- do not append root twice if the chain already ends with a root certificate \([https\://github\.com/ansible\-collections/community\.crypto/pull/360](https\://github\.com/ansible\-collections/community\.crypto/pull/360)\)\.
* certificate\_complete\_chain \- do not hang when infinite loop is found \([https\://github\.com/ansible\-collections/community\.crypto/issues/355](https\://github\.com/ansible\-collections/community\.crypto/issues/355)\, [https\://github\.com/ansible\-collections/community\.crypto/pull/360](https\://github\.com/ansible\-collections/community\.crypto/pull/360)\)\.
-<a id="new-modules-1"></a>
+<a id="new-modules-2"></a>
### New Modules
-* crypto\_info \- Retrieve cryptographic capabilities
-* openssl\_privatekey\_convert \- Convert OpenSSL private keys
+* community\.crypto\.crypto\_info \- Retrieve cryptographic capabilities
+* community\.crypto\.openssl\_privatekey\_convert \- Convert OpenSSL private keys
<a id="v2-0-2"></a>
## v2\.0\.2
-<a id="release-summary-36"></a>
+<a id="release-summary-38"></a>
### Release Summary
Documentation fix release\. No actual code changes\.
@@ -863,17 +922,17 @@ Documentation fix release\. No actual code changes\.
<a id="v2-0-1"></a>
## v2\.0\.1
-<a id="release-summary-37"></a>
+<a id="release-summary-39"></a>
### Release Summary
Bugfix release with extra forward compatibility for newer versions of cryptography\.
-<a id="minor-changes-17"></a>
+<a id="minor-changes-18"></a>
### Minor Changes
* acme\_\* modules \- fix usage of <code>fetch\_url</code> with changes in latest ansible\-core <code>devel</code> branch \([https\://github\.com/ansible\-collections/community\.crypto/pull/339](https\://github\.com/ansible\-collections/community\.crypto/pull/339)\)\.
-<a id="bugfixes-26"></a>
+<a id="bugfixes-28"></a>
### Bugfixes
* acme\_certificate \- avoid passing multiple certificates to <code>cryptography</code>\'s X\.509 certificate loader when <code>fullchain\_dest</code> is used \([https\://github\.com/ansible\-collections/community\.crypto/pull/324](https\://github\.com/ansible\-collections/community\.crypto/pull/324)\)\.
@@ -884,12 +943,12 @@ Bugfix release with extra forward compatibility for newer versions of cryptograp
<a id="v2-0-0"></a>
## v2\.0\.0
-<a id="release-summary-38"></a>
+<a id="release-summary-40"></a>
### Release Summary
A new major release of the <code>community\.crypto</code> collection\. The main changes are removal of the PyOpenSSL backends for almost all modules \(<code>openssl\_pkcs12</code> being the only exception\)\, and removal of the <code>assertonly</code> provider in the <code>x509\_certificate</code> provider\. There are also some other breaking changes which should improve the user interface/experience of this collection long\-term\.
-<a id="minor-changes-18"></a>
+<a id="minor-changes-19"></a>
### Minor Changes
* acme\_certificate \- the <code>subject</code> and <code>issuer</code> fields in in the <code>select\_chain</code> entries are now more strictly validated \([https\://github\.com/ansible\-collections/community\.crypto/pull/316](https\://github\.com/ansible\-collections/community\.crypto/pull/316)\)\.
@@ -914,7 +973,7 @@ A new major release of the <code>community\.crypto</code> collection\. The main
* openssl\_privatekey\_info \- by default consistency checks are not run\; they need to be explicitly requested by passing <code>check\_consistency\=true</code> \([https\://github\.com/ansible\-collections/community\.crypto/pull/309](https\://github\.com/ansible\-collections/community\.crypto/pull/309)\)\.
* x509\_crl \- for idempotency checks\, the <code>issuer</code> order is ignored\. If order is important\, use the new <code>issuer\_ordered</code> option \([https\://github\.com/ansible\-collections/community\.crypto/pull/316](https\://github\.com/ansible\-collections/community\.crypto/pull/316)\)\.
-<a id="deprecated-features-5"></a>
+<a id="deprecated-features-6"></a>
### Deprecated Features
* acme\_\* modules \- ACME version 1 is now deprecated and support for it will be removed in community\.crypto 2\.0\.0 \([https\://github\.com/ansible\-collections/community\.crypto/pull/288](https\://github\.com/ansible\-collections/community\.crypto/pull/288)\)\.
@@ -946,7 +1005,7 @@ A new major release of the <code>community\.crypto</code> collection\. The main
* x509\_certificate\_info \- removed the <code>pyopenssl</code> backend \([https\://github\.com/ansible\-collections/community\.crypto/pull/273](https\://github\.com/ansible\-collections/community\.crypto/pull/273)\)\.
* x509\_certificate\_pipe \- removed the <code>pyopenssl</code> backend \([https\://github\.com/ansible\-collections/community\.crypto/pull/273](https\://github\.com/ansible\-collections/community\.crypto/pull/273)\)\.
-<a id="bugfixes-27"></a>
+<a id="bugfixes-29"></a>
### Bugfixes
* cryptography backend \- improve Unicode handling for Python 2 \([https\://github\.com/ansible\-collections/community\.crypto/pull/313](https\://github\.com/ansible\-collections/community\.crypto/pull/313)\)\.
@@ -958,12 +1017,12 @@ A new major release of the <code>community\.crypto</code> collection\. The main
<a id="v1-9-4"></a>
## v1\.9\.4
-<a id="release-summary-39"></a>
+<a id="release-summary-41"></a>
### Release Summary
Regular bugfix release\.
-<a id="bugfixes-28"></a>
+<a id="bugfixes-30"></a>
### Bugfixes
* acme\_\* modules \- fix commands composed for OpenSSL backend to retrieve information on CSRs and certificates from stdin to use <code>/dev/stdin</code> instead of <code>\-</code>\. This is needed for OpenSSL 1\.0\.1 and 1\.0\.2\, apparently \([https\://github\.com/ansible\-collections/community\.crypto/pull/279](https\://github\.com/ansible\-collections/community\.crypto/pull/279)\)\.
@@ -972,12 +1031,12 @@ Regular bugfix release\.
<a id="v1-9-3"></a>
## v1\.9\.3
-<a id="release-summary-40"></a>
+<a id="release-summary-42"></a>
### Release Summary
Regular bugfix release\.
-<a id="bugfixes-29"></a>
+<a id="bugfixes-31"></a>
### Bugfixes
* openssl\_csr and openssl\_csr\_pipe \- make sure that Unicode strings are used to compare strings with the cryptography backend\. This fixes idempotency problems with non\-ASCII letters on Python 2 \([https\://github\.com/ansible\-collections/community\.crypto/issues/270](https\://github\.com/ansible\-collections/community\.crypto/issues/270)\, [https\://github\.com/ansible\-collections/community\.crypto/pull/271](https\://github\.com/ansible\-collections/community\.crypto/pull/271)\)\.
@@ -985,7 +1044,7 @@ Regular bugfix release\.
<a id="v1-9-2"></a>
## v1\.9\.2
-<a id="release-summary-41"></a>
+<a id="release-summary-43"></a>
### Release Summary
Bugfix release to fix the changelog\. No other change compared to 1\.9\.0\.
@@ -993,7 +1052,7 @@ Bugfix release to fix the changelog\. No other change compared to 1\.9\.0\.
<a id="v1-9-1"></a>
## v1\.9\.1
-<a id="release-summary-42"></a>
+<a id="release-summary-44"></a>
### Release Summary
Accidental 1\.9\.1 release\. Identical to 1\.9\.0\.
@@ -1001,18 +1060,18 @@ Accidental 1\.9\.1 release\. Identical to 1\.9\.0\.
<a id="v1-9-0"></a>
## v1\.9\.0
-<a id="release-summary-43"></a>
+<a id="release-summary-45"></a>
### Release Summary
Regular feature release\.
-<a id="minor-changes-19"></a>
+<a id="minor-changes-20"></a>
### Minor Changes
* get\_certificate \- added <code>starttls</code> option to retrieve certificates from servers which require clients to request an encrypted connection \([https\://github\.com/ansible\-collections/community\.crypto/pull/264](https\://github\.com/ansible\-collections/community\.crypto/pull/264)\)\.
* openssh\_keypair \- added <code>diff</code> support \([https\://github\.com/ansible\-collections/community\.crypto/pull/260](https\://github\.com/ansible\-collections/community\.crypto/pull/260)\)\.
-<a id="bugfixes-30"></a>
+<a id="bugfixes-32"></a>
### Bugfixes
* keypair\_backend module utils \- simplify code to pass sanity tests \([https\://github\.com/ansible\-collections/community\.crypto/pull/263](https\://github\.com/ansible\-collections/community\.crypto/pull/263)\)\.
@@ -1023,12 +1082,12 @@ Regular feature release\.
<a id="v1-8-0"></a>
## v1\.8\.0
-<a id="release-summary-44"></a>
+<a id="release-summary-46"></a>
### Release Summary
Regular bugfix and feature release\.
-<a id="minor-changes-20"></a>
+<a id="minor-changes-21"></a>
### Minor Changes
* Avoid internal ansible\-core module\_utils in favor of equivalent public API available since at least Ansible 2\.9 \([https\://github\.com/ansible\-collections/community\.crypto/pull/253](https\://github\.com/ansible\-collections/community\.crypto/pull/253)\)\.
@@ -1036,7 +1095,7 @@ Regular bugfix and feature release\.
* openssh\_cert \- added <code>regenerate</code> option to validate additional certificate parameters which trigger regeneration of an existing certificate \([https\://github\.com/ansible\-collections/community\.crypto/pull/256](https\://github\.com/ansible\-collections/community\.crypto/pull/256)\)\.
* openssh\_cert \- adding <code>diff</code> support \([https\://github\.com/ansible\-collections/community\.crypto/pull/255](https\://github\.com/ansible\-collections/community\.crypto/pull/255)\)\.
-<a id="bugfixes-31"></a>
+<a id="bugfixes-33"></a>
### Bugfixes
* openssh\_cert \- fixed certificate generation to restore original certificate if an error is encountered \([https\://github\.com/ansible\-collections/community\.crypto/pull/255](https\://github\.com/ansible\-collections/community\.crypto/pull/255)\)\.
@@ -1045,12 +1104,12 @@ Regular bugfix and feature release\.
<a id="v1-7-1"></a>
## v1\.7\.1
-<a id="release-summary-45"></a>
+<a id="release-summary-47"></a>
### Release Summary
Bugfix release\.
-<a id="bugfixes-32"></a>
+<a id="bugfixes-34"></a>
### Bugfixes
* openssl\_pkcs12 \- fix crash when loading passphrase\-protected PKCS\#12 files with <code>cryptography</code> backend \([https\://github\.com/ansible\-collections/community\.crypto/issues/247](https\://github\.com/ansible\-collections/community\.crypto/issues/247)\, [https\://github\.com/ansible\-collections/community\.crypto/pull/248](https\://github\.com/ansible\-collections/community\.crypto/pull/248)\)\.
@@ -1058,12 +1117,12 @@ Bugfix release\.
<a id="v1-7-0"></a>
## v1\.7\.0
-<a id="release-summary-46"></a>
+<a id="release-summary-48"></a>
### Release Summary
Regular feature and bugfix release\.
-<a id="minor-changes-21"></a>
+<a id="minor-changes-22"></a>
### Minor Changes
* cryptography\_openssh module utils \- new module\_utils for managing asymmetric keypairs and OpenSSH formatted/encoded asymmetric keypairs \([https\://github\.com/ansible\-collections/community\.crypto/pull/213](https\://github\.com/ansible\-collections/community\.crypto/pull/213)\)\.
@@ -1086,27 +1145,27 @@ Regular feature and bugfix release\.
* x509\_crl\_info \- add <code>list\_revoked\_certificates</code> option to avoid enumerating all revoked certificates \([https\://github\.com/ansible\-collections/community\.crypto/pull/232](https\://github\.com/ansible\-collections/community\.crypto/pull/232)\)\.
* x509\_crl\_info \- refactor module to allow code reuse for diff mode \([https\://github\.com/ansible\-collections/community\.crypto/pull/203](https\://github\.com/ansible\-collections/community\.crypto/pull/203)\)\.
-<a id="bugfixes-33"></a>
+<a id="bugfixes-35"></a>
### Bugfixes
* openssh\_keypair \- fix <code>check\_mode</code> to populate return values for existing keypairs \([https\://github\.com/ansible\-collections/community\.crypto/issues/113](https\://github\.com/ansible\-collections/community\.crypto/issues/113)\, [https\://github\.com/ansible\-collections/community\.crypto/pull/230](https\://github\.com/ansible\-collections/community\.crypto/pull/230)\)\.
* various modules \- prevent crashes when modules try to set attributes on not yet existing files in check mode\. This will be fixed in ansible\-core 2\.12\, but it is not backported to every Ansible version we support \([https\://github\.com/ansible\-collections/community\.crypto/issue/242](https\://github\.com/ansible\-collections/community\.crypto/issue/242)\, [https\://github\.com/ansible\-collections/community\.crypto/pull/243](https\://github\.com/ansible\-collections/community\.crypto/pull/243)\)\.
* x509\_certificate \- fix crash when <code>assertonly</code> provider is used and some error conditions should be reported \([https\://github\.com/ansible\-collections/community\.crypto/issues/240](https\://github\.com/ansible\-collections/community\.crypto/issues/240)\, [https\://github\.com/ansible\-collections/community\.crypto/pull/241](https\://github\.com/ansible\-collections/community\.crypto/pull/241)\)\.
-<a id="new-modules-2"></a>
+<a id="new-modules-3"></a>
### New Modules
-* openssl\_publickey\_info \- Provide information for OpenSSL public keys
+* community\.crypto\.openssl\_publickey\_info \- Provide information for OpenSSL public keys
<a id="v1-6-2"></a>
## v1\.6\.2
-<a id="release-summary-47"></a>
+<a id="release-summary-49"></a>
### Release Summary
Bugfix release\. Fixes compatibility issue of ACME modules with step\-ca\.
-<a id="bugfixes-34"></a>
+<a id="bugfixes-36"></a>
### Bugfixes
* acme\_\* modules \- avoid crashing for ACME servers where the <code>meta</code> directory key is not present \([https\://github\.com/ansible\-collections/community\.crypto/issues/220](https\://github\.com/ansible\-collections/community\.crypto/issues/220)\, [https\://github\.com/ansible\-collections/community\.crypto/pull/221](https\://github\.com/ansible\-collections/community\.crypto/pull/221)\)\.
@@ -1114,12 +1173,12 @@ Bugfix release\. Fixes compatibility issue of ACME modules with step\-ca\.
<a id="v1-6-1"></a>
## v1\.6\.1
-<a id="release-summary-48"></a>
+<a id="release-summary-50"></a>
### Release Summary
Bugfix release\.
-<a id="bugfixes-35"></a>
+<a id="bugfixes-37"></a>
### Bugfixes
* acme\_\* modules \- fix wrong usages of <code>ACMEProtocolException</code> \([https\://github\.com/ansible\-collections/community\.crypto/pull/216](https\://github\.com/ansible\-collections/community\.crypto/pull/216)\, [https\://github\.com/ansible\-collections/community\.crypto/pull/217](https\://github\.com/ansible\-collections/community\.crypto/pull/217)\)\.
@@ -1127,12 +1186,12 @@ Bugfix release\.
<a id="v1-6-0"></a>
## v1\.6\.0
-<a id="release-summary-49"></a>
+<a id="release-summary-51"></a>
### Release Summary
Fixes compatibility issues with the latest ansible\-core 2\.11 beta\, and contains a lot of internal refactoring for the ACME modules and support for private key passphrases for them\.
-<a id="minor-changes-22"></a>
+<a id="minor-changes-23"></a>
### Minor Changes
* acme module\_utils \- the <code>acme</code> module\_utils has been split up into several Python modules \([https\://github\.com/ansible\-collections/community\.crypto/pull/184](https\://github\.com/ansible\-collections/community\.crypto/pull/184)\)\.
@@ -1141,12 +1200,12 @@ Fixes compatibility issues with the latest ansible\-core 2\.11 beta\, and contai
* acme\_certificate\_revoke \- support revoking by private keys that are passphrase protected for <code>cryptography</code> backend \([https\://github\.com/ansible\-collections/community\.crypto/pull/207](https\://github\.com/ansible\-collections/community\.crypto/pull/207)\)\.
* acme\_challenge\_cert\_helper \- add <code>private\_key\_passphrase</code> parameter \([https\://github\.com/ansible\-collections/community\.crypto/pull/207](https\://github\.com/ansible\-collections/community\.crypto/pull/207)\)\.
-<a id="deprecated-features-6"></a>
+<a id="deprecated-features-7"></a>
### Deprecated Features
* acme module\_utils \- the <code>acme</code> module\_utils \(<code>ansible\_collections\.community\.crypto\.plugins\.module\_utils\.acme</code>\) is deprecated and will be removed in community\.crypto 2\.0\.0\. Use the new Python modules in the <code>acme</code> package instead \(<code>ansible\_collections\.community\.crypto\.plugins\.module\_utils\.acme\.xxx</code>\) \([https\://github\.com/ansible\-collections/community\.crypto/pull/184](https\://github\.com/ansible\-collections/community\.crypto/pull/184)\)\.
-<a id="bugfixes-36"></a>
+<a id="bugfixes-38"></a>
### Bugfixes
* action\_module plugin helper \- make compatible with latest changes in ansible\-core 2\.11\.0b3 \([https\://github\.com/ansible\-collections/community\.crypto/pull/202](https\://github\.com/ansible\-collections/community\.crypto/pull/202)\)\.
@@ -1155,23 +1214,23 @@ Fixes compatibility issues with the latest ansible\-core 2\.11 beta\, and contai
<a id="v1-5-0"></a>
## v1\.5\.0
-<a id="release-summary-50"></a>
+<a id="release-summary-52"></a>
### Release Summary
Regular feature and bugfix release\. Deprecates a return value\.
-<a id="minor-changes-23"></a>
+<a id="minor-changes-24"></a>
### Minor Changes
* acme\_account\_info \- when <code>retrieve\_orders</code> is not <code>ignore</code> and the ACME server allows to query orders\, the new return value <code>order\_uris</code> is always populated with a list of URIs \([https\://github\.com/ansible\-collections/community\.crypto/pull/178](https\://github\.com/ansible\-collections/community\.crypto/pull/178)\)\.
* luks\_device \- allow to specify sector size for LUKS2 containers with new <code>sector\_size</code> parameter \([https\://github\.com/ansible\-collections/community\.crypto/pull/193](https\://github\.com/ansible\-collections/community\.crypto/pull/193)\)\.
-<a id="deprecated-features-7"></a>
+<a id="deprecated-features-8"></a>
### Deprecated Features
* acme\_account\_info \- when <code>retrieve\_orders\=url\_list</code>\, <code>orders</code> will no longer be returned in community\.crypto 2\.0\.0\. Use <code>order\_uris</code> instead \([https\://github\.com/ansible\-collections/community\.crypto/pull/178](https\://github\.com/ansible\-collections/community\.crypto/pull/178)\)\.
-<a id="bugfixes-37"></a>
+<a id="bugfixes-39"></a>
### Bugfixes
* openssl\_csr \- no longer fails when comparing CSR without basic constraint when <code>basic\_constraints</code> is specified \([https\://github\.com/ansible\-collections/community\.crypto/issues/179](https\://github\.com/ansible\-collections/community\.crypto/issues/179)\, [https\://github\.com/ansible\-collections/community\.crypto/pull/180](https\://github\.com/ansible\-collections/community\.crypto/pull/180)\)\.
@@ -1179,12 +1238,12 @@ Regular feature and bugfix release\. Deprecates a return value\.
<a id="v1-4-0"></a>
## v1\.4\.0
-<a id="release-summary-51"></a>
+<a id="release-summary-53"></a>
### Release Summary
Release with several new features and bugfixes\.
-<a id="minor-changes-24"></a>
+<a id="minor-changes-25"></a>
### Minor Changes
* The ACME module\_utils has been relicensed back from the Simplified BSD License \([https\://opensource\.org/licenses/BSD\-2\-Clause](https\://opensource\.org/licenses/BSD\-2\-Clause)\) to the GPLv3\+ \(same license used by most other code in this collection\)\. This undoes a licensing change when the original GPLv3\+ licensed code was moved to module\_utils in [https\://github\.com/ansible/ansible/pull/40697](https\://github\.com/ansible/ansible/pull/40697) \([https\://github\.com/ansible\-collections/community\.crypto/pull/165](https\://github\.com/ansible\-collections/community\.crypto/pull/165)\)\.
@@ -1194,7 +1253,7 @@ Release with several new features and bugfixes\.
* openssl\_csr\, openssl\_csr\_pipe \- allow to specify CRL distribution endpoints with <code>crl\_distribution\_points</code> \([https\://github\.com/ansible\-collections/community\.crypto/issues/147](https\://github\.com/ansible\-collections/community\.crypto/issues/147)\, [https\://github\.com/ansible\-collections/community\.crypto/pull/167](https\://github\.com/ansible\-collections/community\.crypto/pull/167)\)\.
* openssl\_pkcs12 \- allow to specify certificate bundles in <code>other\_certificates</code> by using new option <code>other\_certificates\_parse\_all</code> \([https\://github\.com/ansible\-collections/community\.crypto/issues/149](https\://github\.com/ansible\-collections/community\.crypto/issues/149)\, [https\://github\.com/ansible\-collections/community\.crypto/pull/166](https\://github\.com/ansible\-collections/community\.crypto/pull/166)\)\.
-<a id="bugfixes-38"></a>
+<a id="bugfixes-40"></a>
### Bugfixes
* acme\_certificate \- error when requested challenge type is not found for non\-valid challenges\, instead of hanging on step 2 \([https\://github\.com/ansible\-collections/community\.crypto/issues/171](https\://github\.com/ansible\-collections/community\.crypto/issues/171)\, [https\://github\.com/ansible\-collections/community\.crypto/pull/173](https\://github\.com/ansible\-collections/community\.crypto/pull/173)\)\.
@@ -1202,12 +1261,12 @@ Release with several new features and bugfixes\.
<a id="v1-3-0"></a>
## v1\.3\.0
-<a id="release-summary-52"></a>
+<a id="release-summary-54"></a>
### Release Summary
Contains new modules <code>openssl\_privatekey\_pipe</code>\, <code>openssl\_csr\_pipe</code> and <code>x509\_certificate\_pipe</code> which allow to create or update private keys\, CSRs and X\.509 certificates without having to write them to disk\.
-<a id="minor-changes-25"></a>
+<a id="minor-changes-26"></a>
### Minor Changes
* openssh\_cert \- add module parameter <code>use\_agent</code> to enable using signing keys stored in ssh\-agent \([https\://github\.com/ansible\-collections/community\.crypto/issues/116](https\://github\.com/ansible\-collections/community\.crypto/issues/116)\)\.
@@ -1217,29 +1276,29 @@ Contains new modules <code>openssl\_privatekey\_pipe</code>\, <code>openssl\_csr
* x509\_certificate \- for the <code>selfsigned</code> provider\, a CSR is not required anymore\. If no CSR is provided\, the module behaves as if a minimal CSR which only contains the public key has been provided \([https\://github\.com/ansible\-collections/community\.crypto/issues/32](https\://github\.com/ansible\-collections/community\.crypto/issues/32)\, [https\://github\.com/ansible\-collections/community\.crypto/pull/129](https\://github\.com/ansible\-collections/community\.crypto/pull/129)\)\.
* x509\_certificate \- refactor module to allow code reuse by x509\_certificate\_pipe \([https\://github\.com/ansible\-collections/community\.crypto/pull/135](https\://github\.com/ansible\-collections/community\.crypto/pull/135)\)\.
-<a id="bugfixes-39"></a>
+<a id="bugfixes-41"></a>
### Bugfixes
* openssl\_pkcs12 \- report the correct state when <code>action</code> is <code>parse</code> \([https\://github\.com/ansible\-collections/community\.crypto/issues/143](https\://github\.com/ansible\-collections/community\.crypto/issues/143)\)\.
* support code \- improve handling of certificate and certificate signing request \(CSR\) loading with the <code>cryptography</code> backend when errors occur \([https\://github\.com/ansible\-collections/community\.crypto/issues/138](https\://github\.com/ansible\-collections/community\.crypto/issues/138)\, [https\://github\.com/ansible\-collections/community\.crypto/pull/139](https\://github\.com/ansible\-collections/community\.crypto/pull/139)\)\.
* x509\_certificate \- fix <code>entrust</code> provider\, which was broken since community\.crypto 0\.1\.0 due to a feature added before the collection move \([https\://github\.com/ansible\-collections/community\.crypto/pull/135](https\://github\.com/ansible\-collections/community\.crypto/pull/135)\)\.
-<a id="new-modules-3"></a>
+<a id="new-modules-4"></a>
### New Modules
-* openssl\_csr\_pipe \- Generate OpenSSL Certificate Signing Request \(CSR\)
-* openssl\_privatekey\_pipe \- Generate OpenSSL private keys without disk access
-* x509\_certificate\_pipe \- Generate and/or check OpenSSL certificates
+* community\.crypto\.openssl\_csr\_pipe \- Generate OpenSSL Certificate Signing Request \(CSR\)
+* community\.crypto\.openssl\_privatekey\_pipe \- Generate OpenSSL private keys without disk access
+* community\.crypto\.x509\_certificate\_pipe \- Generate and/or check OpenSSL certificates
<a id="v1-2-0"></a>
## v1\.2\.0
-<a id="release-summary-53"></a>
+<a id="release-summary-55"></a>
### Release Summary
Please note that this release fixes a security issue \(CVE\-2020\-25646\)\.
-<a id="minor-changes-26"></a>
+<a id="minor-changes-27"></a>
### Minor Changes
* acme\_certificate \- allow to pass CSR file as content with new option <code>csr\_content</code> \([https\://github\.com/ansible\-collections/community\.crypto/pull/115](https\://github\.com/ansible\-collections/community\.crypto/pull/115)\)\.
@@ -1255,7 +1314,7 @@ Please note that this release fixes a security issue \(CVE\-2020\-25646\)\.
* x509\_certificate \- the options <code>privatekey\_content</code> and <code>ownca\_privatekey\_content</code> were not marked as <code>no\_log</code>\, resulting in it being dumped into the system log by default\, and returned in the registered results in the <code>invocation</code> field \(CVE\-2020\-25646\, [https\://github\.com/ansible\-collections/community\.crypto/pull/125](https\://github\.com/ansible\-collections/community\.crypto/pull/125)\)\.
* x509\_crl \- the option <code>privatekey\_content</code> was not marked as <code>no\_log</code>\, resulting in it being dumped into the system log by default\, and returned in the registered results in the <code>invocation</code> field \(CVE\-2020\-25646\, [https\://github\.com/ansible\-collections/community\.crypto/pull/125](https\://github\.com/ansible\-collections/community\.crypto/pull/125)\)\.
-<a id="bugfixes-40"></a>
+<a id="bugfixes-42"></a>
### Bugfixes
* openssl\_pkcs12 \- do not crash when reading PKCS\#12 file which has no private key and/or no main certificate \([https\://github\.com/ansible\-collections/community\.crypto/issues/103](https\://github\.com/ansible\-collections/community\.crypto/issues/103)\)\.
@@ -1263,12 +1322,12 @@ Please note that this release fixes a security issue \(CVE\-2020\-25646\)\.
<a id="v1-1-1"></a>
## v1\.1\.1
-<a id="release-summary-54"></a>
+<a id="release-summary-56"></a>
### Release Summary
Bugfixes for Ansible 2\.10\.0\.
-<a id="bugfixes-41"></a>
+<a id="bugfixes-43"></a>
### Bugfixes
* meta/runtime\.yml \- convert Ansible version numbers for old names of modules to collection version numbers \([https\://github\.com/ansible\-collections/community\.crypto/pull/108](https\://github\.com/ansible\-collections/community\.crypto/pull/108)\)\.
@@ -1277,12 +1336,12 @@ Bugfixes for Ansible 2\.10\.0\.
<a id="v1-1-0"></a>
## v1\.1\.0
-<a id="release-summary-55"></a>
+<a id="release-summary-57"></a>
### Release Summary
Release for Ansible 2\.10\.0\.
-<a id="minor-changes-27"></a>
+<a id="minor-changes-28"></a>
### Minor Changes
* acme\_account \- add <code>external\_account\_binding</code> option to allow creation of ACME accounts with External Account Binding \([https\://github\.com/ansible\-collections/community\.crypto/issues/89](https\://github\.com/ansible\-collections/community\.crypto/issues/89)\)\.
@@ -1295,28 +1354,28 @@ Release for Ansible 2\.10\.0\.
* openssl\_csr \- add support for name constraints extension \([https\://github\.com/ansible\-collections/community\.crypto/issues/46](https\://github\.com/ansible\-collections/community\.crypto/issues/46)\)\.
* openssl\_csr\_info \- add support for name constraints extension \([https\://github\.com/ansible\-collections/community\.crypto/issues/46](https\://github\.com/ansible\-collections/community\.crypto/issues/46)\)\.
-<a id="bugfixes-42"></a>
+<a id="bugfixes-44"></a>
### Bugfixes
* acme\_inspect \- fix problem with Python 3\.5 that JSON was not decoded \([https\://github\.com/ansible\-collections/community\.crypto/issues/86](https\://github\.com/ansible\-collections/community\.crypto/issues/86)\)\.
* get\_certificate \- fix <code>ca\_cert</code> option handling when <code>proxy\_host</code> is used \([https\://github\.com/ansible\-collections/community\.crypto/pull/84](https\://github\.com/ansible\-collections/community\.crypto/pull/84)\)\.
* openssl\_\*\, x509\_\* modules \- fix handling of general names which refer to IP networks and not IP addresses \([https\://github\.com/ansible\-collections/community\.crypto/pull/92](https\://github\.com/ansible\-collections/community\.crypto/pull/92)\)\.
-<a id="new-modules-4"></a>
+<a id="new-modules-5"></a>
### New Modules
-* openssl\_signature \- Sign data with openssl
-* openssl\_signature\_info \- Verify signatures with openssl
+* community\.crypto\.openssl\_signature \- Sign data with openssl
+* community\.crypto\.openssl\_signature\_info \- Verify signatures with openssl
<a id="v1-0-0"></a>
## v1\.0\.0
-<a id="release-summary-56"></a>
+<a id="release-summary-58"></a>
### Release Summary
This is the first proper release of the <code>community\.crypto</code> collection\. This changelog contains all changes to the modules in this collection that were added after the release of Ansible 2\.9\.0\.
-<a id="minor-changes-28"></a>
+<a id="minor-changes-29"></a>
### Minor Changes
* luks\_device \- accept <code>passphrase</code>\, <code>new\_passphrase</code> and <code>remove\_passphrase</code>\.
@@ -1345,7 +1404,7 @@ This is the first proper release of the <code>community\.crypto</code> collectio
* openssl\_publickey \- allow to provide private key content via <code>private\_key\_content</code> option\.
* openssl\_publickey \- allow to return the existing/generated public key directly as <code>publickey</code> by setting <code>return\_content</code> to <code>yes</code>\.
-<a id="deprecated-features-8"></a>
+<a id="deprecated-features-9"></a>
### Deprecated Features
* openssl\_csr \- all values for the <code>version</code> option except <code>1</code> are deprecated\. The value 1 denotes the current only standardized CSR version\.
@@ -1355,7 +1414,7 @@ This is the first proper release of the <code>community\.crypto</code> collectio
* The <code>letsencrypt</code> module has been removed\. Use <code>acme\_certificate</code> instead\.
-<a id="bugfixes-43"></a>
+<a id="bugfixes-45"></a>
### Bugfixes
* ACME modules\: fix bug in ACME v1 account update code
@@ -1378,9 +1437,9 @@ This is the first proper release of the <code>community\.crypto</code> collectio
* openssl\_csr \- the module will now enforce that <code>privatekey\_path</code> is specified when <code>state\=present</code>\.
* openssl\_publickey \- fix a module crash caused when pyOpenSSL is not installed \([https\://github\.com/ansible/ansible/issues/67035](https\://github\.com/ansible/ansible/issues/67035)\)\.
-<a id="new-modules-5"></a>
+<a id="new-modules-6"></a>
### New Modules
-* ecs\_domain \- Request validation of a domain with the Entrust Certificate Services \(ECS\) API
-* x509\_crl \- Generate Certificate Revocation Lists \(CRLs\)
-* x509\_crl\_info \- Retrieve information on Certificate Revocation Lists \(CRLs\)
+* community\.crypto\.ecs\_domain \- Request validation of a domain with the Entrust Certificate Services \(ECS\) API
+* community\.crypto\.x509\_crl \- Generate Certificate Revocation Lists \(CRLs\)
+* community\.crypto\.x509\_crl\_info \- Retrieve information on Certificate Revocation Lists \(CRLs\)
diff --git a/ansible_collections/community/crypto/CHANGELOG.rst b/ansible_collections/community/crypto/CHANGELOG.rst
index b2dca8e3f..2ba4c8704 100644
--- a/ansible_collections/community/crypto/CHANGELOG.rst
+++ b/ansible_collections/community/crypto/CHANGELOG.rst
@@ -4,6 +4,56 @@ Community Crypto Release Notes
.. contents:: Topics
+v2.20.0
+=======
+
+Release Summary
+---------------
+
+Feature and bugfix release.
+
+The deprecations in this release are only relevant for collections that use shared
+code or docs fragments from this collection.
+
+Minor Changes
+-------------
+
+- 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).
+
+Deprecated Features
+-------------------
+
+- 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 - 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).
+
+Bugfixes
+--------
+
+- 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).
+
+New Modules
+-----------
+
+- 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.
+
+v2.19.1
+=======
+
+Release Summary
+---------------
+
+Bugfix release.
+
+Bugfixes
+--------
+
+- 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).
+- 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).
+
v2.19.0
=======
@@ -31,7 +81,7 @@ Bugfixes
New Modules
-----------
-- x509_certificate_convert - Convert X.509 certificates
+- community.crypto.x509_certificate_convert - Convert X.509 certificates
v2.18.0
=======
@@ -64,8 +114,8 @@ New Plugins
Filter
~~~~~~
-- parse_serial - Convert a serial number as a colon-separated list of hex numbers to an integer
-- to_serial - Convert an integer to a colon-separated list of hex numbers
+- 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
v2.17.1
=======
@@ -185,12 +235,12 @@ New Plugins
Filter
~~~~~~
-- gpg_fingerprint - Retrieve a GPG fingerprint from a GPG public or private key
+- community.crypto.gpg_fingerprint - Retrieve a GPG fingerprint from a GPG public or private key
Lookup
~~~~~~
-- gpg_fingerprint - Retrieve a GPG fingerprint from a GPG public or private key file
+- community.crypto.gpg_fingerprint - Retrieve a GPG fingerprint from a GPG public or private key file
v2.14.1
=======
@@ -333,12 +383,12 @@ New Plugins
Filter
~~~~~~
-- openssl_csr_info - Retrieve information from OpenSSL Certificate Signing Requests (CSR)
-- openssl_privatekey_info - Retrieve information from OpenSSL private keys
-- openssl_publickey_info - Retrieve information from OpenSSL public keys in PEM format
-- split_pem - Split PEM file contents into multiple objects
-- x509_certificate_info - Retrieve information from X.509 certificates in PEM format
-- x509_crl_info - Retrieve information from X.509 CRLs in PEM format
+- community.crypto.openssl_csr_info - Retrieve information from OpenSSL Certificate Signing Requests (CSR)
+- community.crypto.openssl_privatekey_info - Retrieve information from OpenSSL private keys
+- community.crypto.openssl_publickey_info - Retrieve information from OpenSSL public keys in PEM format
+- community.crypto.split_pem - Split PEM file contents into multiple objects
+- community.crypto.x509_certificate_info - Retrieve information from X.509 certificates in PEM format
+- community.crypto.x509_crl_info - Retrieve information from X.509 CRLs in PEM format
v2.9.0
======
@@ -637,8 +687,8 @@ Bugfixes
New Modules
-----------
-- crypto_info - Retrieve cryptographic capabilities
-- openssl_privatekey_convert - Convert OpenSSL private keys
+- community.crypto.crypto_info - Retrieve cryptographic capabilities
+- community.crypto.openssl_privatekey_convert - Convert OpenSSL private keys
v2.0.2
======
@@ -884,7 +934,7 @@ Bugfixes
New Modules
-----------
-- openssl_publickey_info - Provide information for OpenSSL public keys
+- community.crypto.openssl_publickey_info - Provide information for OpenSSL public keys
v1.6.2
======
@@ -1015,9 +1065,9 @@ Bugfixes
New Modules
-----------
-- openssl_csr_pipe - Generate OpenSSL Certificate Signing Request (CSR)
-- openssl_privatekey_pipe - Generate OpenSSL private keys without disk access
-- x509_certificate_pipe - Generate and/or check OpenSSL certificates
+- community.crypto.openssl_csr_pipe - Generate OpenSSL Certificate Signing Request (CSR)
+- community.crypto.openssl_privatekey_pipe - Generate OpenSSL private keys without disk access
+- community.crypto.x509_certificate_pipe - Generate and/or check OpenSSL certificates
v1.2.0
======
@@ -1093,8 +1143,8 @@ Bugfixes
New Modules
-----------
-- openssl_signature - Sign data with openssl
-- openssl_signature_info - Verify signatures with openssl
+- community.crypto.openssl_signature - Sign data with openssl
+- community.crypto.openssl_signature_info - Verify signatures with openssl
v1.0.0
======
@@ -1169,6 +1219,6 @@ Bugfixes
New Modules
-----------
-- ecs_domain - Request validation of a domain with the Entrust Certificate Services (ECS) API
-- x509_crl - Generate Certificate Revocation Lists (CRLs)
-- x509_crl_info - Retrieve information on Certificate Revocation Lists (CRLs)
+- community.crypto.ecs_domain - Request validation of a domain with the Entrust Certificate Services (ECS) API
+- community.crypto.x509_crl - Generate Certificate Revocation Lists (CRLs)
+- community.crypto.x509_crl_info - Retrieve information on Certificate Revocation Lists (CRLs)
diff --git a/ansible_collections/community/crypto/FILES.json b/ansible_collections/community/crypto/FILES.json
index e98f9499c..866c6794f 100644
--- a/ansible_collections/community/crypto/FILES.json
+++ b/ansible_collections/community/crypto/FILES.json
@@ -109,7 +109,7 @@
"name": ".azure-pipelines/azure-pipelines.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6e277188c1cbc0030cb55f73f6ebde233c77c66e2aa0d19476f9b7bae729d345",
+ "chksum_sha256": "76c14d937f8357d3124b959de775de59a0f2b6488d17b209d40bfe62217f579d",
"format": 1
},
{
@@ -130,7 +130,7 @@
"name": ".github/workflows/ansible-test.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4250c0cd843d1a134c3d806ef9030b55f9a1b949902d1a746ccd19edb9f51a95",
+ "chksum_sha256": "5fefc24aaf86bfa9ba76bbde513f7919a48a049bb05ee7f07a054adbc21d8d1b",
"format": 1
},
{
@@ -263,7 +263,7 @@
"name": "changelogs/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7dcaea3df82e79d7b11bb628e95889ccfb31077902d6ddaee8655a83f577b418",
+ "chksum_sha256": "feb7cda6ba4ab1719a468f5a61415bcc67ba5342f67063a5687dd1d367947db9",
"format": 1
},
{
@@ -277,7 +277,7 @@
"name": "changelogs/config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "57d7548204ea1fd0b699f4cca0181e85a556bff89d5a35e52073d6dd44010b99",
+ "chksum_sha256": "3b2469377b8c18712f2566949b703be5a3b35ba07c336f060447313b9c44c58d",
"format": 1
},
{
@@ -368,7 +368,7 @@
"name": "meta/runtime.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "78f0817cd6a1f61ef403cff6f944799c473b2fe01fc618f8e4b94a996af77d75",
+ "chksum_sha256": "1a42d6a02d5627cd6b698fca894d464254b3fb3c99df0bc4880d20eefcc510f8",
"format": 1
},
{
@@ -403,7 +403,7 @@
"name": "plugins/doc_fragments/acme.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "72d44b4b7dc88ed9cedd76eec52a796b60da62283a14e68ad41e6adce69665f4",
+ "chksum_sha256": "0c59e90ff8eb2e5af6400a81d1f787dde63ceb400a37149e2c5224d9246883ce",
"format": 1
},
{
@@ -564,28 +564,28 @@
"name": "plugins/module_utils/acme/acme.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5d7f05fdab25dcbef2a8ce8d1edcd4c27fcc53c13c735a5c74e46aabc0098724",
+ "chksum_sha256": "8bb87a9023f0d079de2c496225a2e475177a98344a551d4c7e386313c3887277",
"format": 1
},
{
"name": "plugins/module_utils/acme/backend_cryptography.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5bccf4747fa4ef5853858db1683bfa4d31951fc1da78341c36063617eb4b2719",
+ "chksum_sha256": "67d1744bad142efd42898be008e4f2a94adfcd365b0ffe6f9066ea864e432fd5",
"format": 1
},
{
"name": "plugins/module_utils/acme/backend_openssl_cli.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7a722bedddbc63e4d6e66b10659f63531c2675e19740ccc3381b70f6ed3fdba4",
+ "chksum_sha256": "c2b87c74fc95a7e58689c912e715b2444774782c0690def4ef07790ef1385f9a",
"format": 1
},
{
"name": "plugins/module_utils/acme/backends.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e2c50aaec5b7404e7a8437d34f8246adcb6a7390dff505ce772d04b9a9530177",
+ "chksum_sha256": "aae3ba1f3e918957864d5773519e96f218b2af395a81d58b7760a525b175bb6d",
"format": 1
},
{
@@ -599,7 +599,7 @@
"name": "plugins/module_utils/acme/challenges.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f425838b07c8ec95b9ea9afe07e58f724c7ef5cb1a876e1dcfa9e4997d7f31ab",
+ "chksum_sha256": "87536afccc41f2138a433bf3c1247ea29a60b09c77b81f3e38cf4d1387492e3d",
"format": 1
},
{
@@ -620,14 +620,14 @@
"name": "plugins/module_utils/acme/orders.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bc139936871d65b9f4c0b0e5b772114eac5103bc291c4db907b650d0da63ea0d",
+ "chksum_sha256": "47a9091426fb8e0a1ac164aab8e38575360a9b5c101c8fcdb629e41072cb5ed1",
"format": 1
},
{
"name": "plugins/module_utils/acme/utils.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e4856fa1ff751214f8fabdb30c4813191e891b18c778439913fef72e5c421267",
+ "chksum_sha256": "fd81b1f8eaa63794b95d8909d9497af50578ac49b9e13d9408c7bf76cb1b81b4",
"format": 1
},
{
@@ -648,7 +648,7 @@
"name": "plugins/module_utils/crypto/module_backends/certificate.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c8858dddd2447413319f622af45c004f3b64eb6038e3e288454b76418d28d0f2",
+ "chksum_sha256": "1ac6dc3d2ed16216e8d4cb3dfffbcd83f85a92a1c357369c8ccb77dd40f5395e",
"format": 1
},
{
@@ -662,35 +662,35 @@
"name": "plugins/module_utils/crypto/module_backends/certificate_entrust.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "79486afc80b485e4c4c930b59f44c8320e5ece7eb63408bf5f5ac2bc66c3eeed",
+ "chksum_sha256": "117f7999f887c02e9d7c19657be67d169e6d1b2399d6cb3778a0e00ed1976b4a",
"format": 1
},
{
"name": "plugins/module_utils/crypto/module_backends/certificate_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cd9c993f1c224036eba267820de7e21cec8a06a138d943b776541be214f1d14f",
+ "chksum_sha256": "95c2b6df3f6e777c30ab1f24be70a384a1d60df2b4d2e9f6d2e4bd287178cf53",
"format": 1
},
{
"name": "plugins/module_utils/crypto/module_backends/certificate_ownca.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6c58c55efbdec1869fc10fe63785242aee81f2dc8fff03397de5b75303ed724d",
+ "chksum_sha256": "10c22ee5cf387d5b09e6d07b1e12f6eff324e34b2fcacdd929c96b84cafb4ea3",
"format": 1
},
{
"name": "plugins/module_utils/crypto/module_backends/certificate_selfsigned.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d46e3f53d82fe161efdc94f337126f66fcfb8e49647367c08a68ee2232ca6e8c",
+ "chksum_sha256": "0b4ee017b21abf3a7c2d5b65f34a2db09defa6b5725e3c5b19977672f03ee470",
"format": 1
},
{
"name": "plugins/module_utils/crypto/module_backends/common.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7624320b1ddd2c5661df4ace026ed0b29282125755951e13356dab6f8efba374",
+ "chksum_sha256": "3dce4b1ee5f50da338fe62a245f61e4725c8702a645299d433cf082b64b18135",
"format": 1
},
{
@@ -704,7 +704,7 @@
"name": "plugins/module_utils/crypto/module_backends/csr.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b3a7c30f3f7aaedb29f3e493fc6020c135cb0827c8e7bd53c49c68b3e97277da",
+ "chksum_sha256": "91d5019af08c4dda7e5d21611b9578d6a7bf35615f9f02335d732d2824ab6877",
"format": 1
},
{
@@ -718,14 +718,14 @@
"name": "plugins/module_utils/crypto/module_backends/privatekey.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "40ee4181c816995341ea4bd07d3de0d4c19b3d2076f7d6903fa15fc803543aff",
+ "chksum_sha256": "86051e9a9993ed441bfe364531071a202f5c60b44c45ce85026782bfd93c79bd",
"format": 1
},
{
"name": "plugins/module_utils/crypto/module_backends/privatekey_convert.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "90d164b2b338e8e15533df91394b5c8b9a425ee8d13812dbf5050e7d9b2d0388",
+ "chksum_sha256": "4d60f08fe8ee0d08a06641aef00f2ae31af22de034f4c13f3914b9b47e8193f3",
"format": 1
},
{
@@ -795,7 +795,7 @@
"name": "plugins/module_utils/crypto/math.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d91f76043cd78a1c9dec5d22a7775be984e5796efb78b30792042ac5a4ebbee8",
+ "chksum_sha256": "abc08963caaa5bf31d68049074b9f7199d53f207cc72cf0e9359178ae34b7ea9",
"format": 1
},
{
@@ -816,7 +816,7 @@
"name": "plugins/module_utils/crypto/support.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7d27f0bf007ccdb80a8d144381545f6406abad02396dbd39def186147a6efa91",
+ "chksum_sha256": "17a65c2c15ad982fb9efbbda36f39ed1d31dcb800cbff5e15cdc25f7d8b90acb",
"format": 1
},
{
@@ -879,7 +879,7 @@
"name": "plugins/module_utils/openssh/certificate.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2febea40e9db5c2f560a0e399603812f520b575b00cec33bfae2e536962d24c7",
+ "chksum_sha256": "982bf6955620eeb74f586ec90e561f5ee4fc0ae94e728a3c5c3d56cd698e18bb",
"format": 1
},
{
@@ -904,6 +904,13 @@
"format": 1
},
{
+ "name": "plugins/module_utils/argspec.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2bcda588b1ee3c1972389dd575d84c4c4d9d58ec29a6056f6dc69c57baaaed21",
+ "format": 1
+ },
+ {
"name": "plugins/module_utils/io.py",
"ftype": "file",
"chksum_type": "sha256",
@@ -918,6 +925,13 @@
"format": 1
},
{
+ "name": "plugins/module_utils/time.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7f673b24a2e5e79b35857131b416ec519b661c084397d36970963cc6f3c08aad",
+ "format": 1
+ },
+ {
"name": "plugins/module_utils/version.py",
"ftype": "file",
"chksum_type": "sha256",
@@ -935,42 +949,63 @@
"name": "plugins/modules/acme_account.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a9c3a88169fd7a7a8bfeedad92cace558ad6ec9aed11c641bd1f84a2382c9013",
+ "chksum_sha256": "99a0e35216a5b948f2023ed4f07198af7c76f4c09dc700dfd36be80804b908e7",
"format": 1
},
{
"name": "plugins/modules/acme_account_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7c83dcc40c140a22ec7131f77524aef58b07556c9268f2625741fc6a2c338b6c",
+ "chksum_sha256": "636a47fe3fe6bdf98fc464e72d95aff8d18fe5a37d95e4b733e820165ffae925",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/acme_ari_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "32425edb18282abb4161a369ec62d237ff1be803440f288e289fe36eb6041398",
"format": 1
},
{
"name": "plugins/modules/acme_certificate.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5f0f0039f146654c43e4a2a44e7be9becfc9a1d0566e11bef39ad591b472725d",
+ "chksum_sha256": "6d7f9006b87ab1c8b220668a7206cc223a72bfb992162b1d90c238dc8b148761",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/acme_certificate_deactivate_authz.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "09cf6f4fdd51244aade38600f6ed59c55640ee6652fe42705d19f4a29511328c",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/acme_certificate_renewal_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ec814b1f26e26701691f709f3abfc578f953e5200f554ce920d8673148cbedb6",
"format": 1
},
{
"name": "plugins/modules/acme_certificate_revoke.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "04f1b9f3dba82c5351a0ae1eae0c8360a6af3aad6e8df118d320271e3efb04c9",
+ "chksum_sha256": "a2d515f9a05cc38adb5e7817c991a7443582210c7843e9e7e2738864d16a18c2",
"format": 1
},
{
"name": "plugins/modules/acme_challenge_cert_helper.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8484e4dc9508cffab80145f63ebabf0e88e6d203a3e466f2c000ca3e465596cb",
+ "chksum_sha256": "b10d22bb7a15d7f70f8bfd82991a273d6fdcd08f02e9dd61cc84051d099468ba",
"format": 1
},
{
"name": "plugins/modules/acme_inspect.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "490494d06240823440e81a5539c91c52f7359fade12e9e19aa28f8dfc5f725da",
+ "chksum_sha256": "45be39256ee327763add7f5978cc9aeae485a4e23abcfbd86052b09b2e7eb179",
"format": 1
},
{
@@ -991,7 +1026,7 @@
"name": "plugins/modules/ecs_certificate.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0a5264350a46f4a5e7bf97a2b4bdf4d35391c4032dc8e3011ea6cdfe1a17e292",
+ "chksum_sha256": "3a81d2db16e086212b8ae6beee2300c3410649797fce664fe18174f6789bccee",
"format": 1
},
{
@@ -1005,7 +1040,7 @@
"name": "plugins/modules/get_certificate.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3ea3b665adf3bbc3c2dc8e92cf9efd6c7b273aec0c8f1ef29e6414b0a9c50dd9",
+ "chksum_sha256": "18a87dc709c74ab15fabf4ef66e1c7db408a997b7d3154373f2066064e9c72a2",
"format": 1
},
{
@@ -1138,7 +1173,7 @@
"name": "plugins/modules/x509_certificate_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e39c0d16a89cc7cac74d2c81e0406c9e5c1ebe8da0dd9c9c5ef9c26a78d5eae0",
+ "chksum_sha256": "806ee56458a3e0a54b2c8fdb0cb9ebe182f886dd9f8d93e55ae4af6e15f41cd0",
"format": 1
},
{
@@ -1152,7 +1187,7 @@
"name": "plugins/modules/x509_crl.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eb2dfed3b7ec2739444923eb22812533901e9f6e7b6f19e127db7d34b3f6c6aa",
+ "chksum_sha256": "c19c2ab9d506103cb57b6b3f5473713b032e82074e2ff3f24cd7d562b61470b6",
"format": 1
},
{
@@ -1597,6 +1632,139 @@
"format": 1
},
{
+ "name": "tests/integration/targets/acme_certificate_deactivate_authz",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/acme_certificate_deactivate_authz/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/acme_certificate_deactivate_authz/meta/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6f5821968427f3784e3f2ed2bf186dd0b0c198dabb3129c58aa1a5b5d487065d",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/acme_certificate_deactivate_authz/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/acme_certificate_deactivate_authz/tasks/impl.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a3be6b0b0acfc57621d7fa623a290e0edcbf4671f3116b5c859b362e26d9df21",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/acme_certificate_deactivate_authz/tasks/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c3f80b8fa9ebbd81fa9674493ba9bc538f90f23d0e44a0262e772804714e29ba",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/acme_certificate_deactivate_authz/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/acme_certificate_deactivate_authz/tests/validate.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1b4b04590787e09f7621322d34e8dd36e2d2a7e7ec541ed89979fb8687e6ef2c",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/acme_certificate_deactivate_authz/aliases",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1846e9b081766a9ad0f4c13f42d014e82cd235f0cf8b1fd8d7eb41287c6a165f",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/acme_certificate_renewal_info",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/acme_certificate_renewal_info/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/acme_certificate_renewal_info/meta/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6f5821968427f3784e3f2ed2bf186dd0b0c198dabb3129c58aa1a5b5d487065d",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/acme_certificate_renewal_info/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/acme_certificate_renewal_info/tasks/obtain-cert.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4ad45f93e26e6683cee0b57a66ddabe0147dd5d3af96fadc2209ab4d501b407a",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/acme_certificate_renewal_info/tasks/impl.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "28f228dbb86eb0077126a9c05fa98f95e961698eba37efda6ba251ed8dac88b1",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/acme_certificate_renewal_info/tasks/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c3f80b8fa9ebbd81fa9674493ba9bc538f90f23d0e44a0262e772804714e29ba",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/acme_certificate_renewal_info/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/acme_certificate_renewal_info/tests/validate.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2a55b59480a69b659a2d208fdff116f6dbc09e9b7075e1dd11eee88eeeff476b",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/acme_certificate_renewal_info/aliases",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1846e9b081766a9ad0f4c13f42d014e82cd235f0cf8b1fd8d7eb41287c6a165f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/acme_certificate_revoke",
"ftype": "dir",
"chksum_type": null,
@@ -1747,7 +1915,7 @@
"name": "tests/integration/targets/acme_inspect/tasks/impl.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d8366b412ff8b4002d339b97fb4b7b7ee9475120e0e6890a464c3701aeef45ac",
+ "chksum_sha256": "2caf144a1cce04ab28b5e5568c79ab571d362992eecb7f3cf629d81dc8ec234c",
"format": 1
},
{
@@ -4547,7 +4715,7 @@
"name": "tests/integration/targets/x509_certificate/tasks/ownca.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "318ebf03e19480212efdeb7a1643858fc5d7eb761c414c9de4d234f5fdc24232",
+ "chksum_sha256": "fb30c2c92d5264236bc6c0f41288487347c56d7cbc174e0f75e73ae5cc8013de",
"format": 1
},
{
@@ -4561,7 +4729,7 @@
"name": "tests/integration/targets/x509_certificate/tasks/selfsigned.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6b085441e03a22f8d7a87b902b0f17d17239982fe53d7522ef8b6ef2e68b8f41",
+ "chksum_sha256": "a9cf4be468603320f28ec7107cb54bd582ba4419b689941b6ec58d474d9995ae",
"format": 1
},
{
@@ -4575,14 +4743,14 @@
"name": "tests/integration/targets/x509_certificate/tests/validate_ownca.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "af825159e41199c2d1f1db026d1440dd6b84b14e6b684de12b76971812d10ec5",
+ "chksum_sha256": "cb548f9b1aadc89104d2b4c31b9151213b56006f0a43f1f63dab2c86a302f97e",
"format": 1
},
{
"name": "tests/integration/targets/x509_certificate/tests/validate_selfsigned.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fea7c0daa838f7449053a70b563857991d919c281980ca1d4323123b4ae39862",
+ "chksum_sha256": "f0dfd5f5011f3416fababc4c4685c4950d4c7567effd7769bd25d70692e601ad",
"format": 1
},
{
@@ -5132,6 +5300,62 @@
"format": 1
},
{
+ "name": "tests/unit/plugins/module_utils/acme/fixtures/cert_1.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a14802e2b54e6c33073b0fcc8a208b1e4b0c9e0da26c39e3771430327e1c32b7",
+ "format": 1
+ },
+ {
+ "name": "tests/unit/plugins/module_utils/acme/fixtures/cert_1.txt.license",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6eb915239f9f35407fa68fdc41ed6522f1fdcce11badbdcd6057548023179ac1",
+ "format": 1
+ },
+ {
+ "name": "tests/unit/plugins/module_utils/acme/fixtures/cert_2-b.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "aa565ba566a86a6c4fdfe3c12d2e816a5e7dd929d03e43025e02cd79c11fd373",
+ "format": 1
+ },
+ {
+ "name": "tests/unit/plugins/module_utils/acme/fixtures/cert_2-b.txt.license",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6eb915239f9f35407fa68fdc41ed6522f1fdcce11badbdcd6057548023179ac1",
+ "format": 1
+ },
+ {
+ "name": "tests/unit/plugins/module_utils/acme/fixtures/cert_2.pem",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "eced04a43a5c76e168a808dd0739d36ff38973b7d94c210df622302efc5d003e",
+ "format": 1
+ },
+ {
+ "name": "tests/unit/plugins/module_utils/acme/fixtures/cert_2.pem.license",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6eb915239f9f35407fa68fdc41ed6522f1fdcce11badbdcd6057548023179ac1",
+ "format": 1
+ },
+ {
+ "name": "tests/unit/plugins/module_utils/acme/fixtures/cert_2.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "15452d352f015272474d30ba1e1f2c3043d658cfc2628873833a1abe940153dc",
+ "format": 1
+ },
+ {
+ "name": "tests/unit/plugins/module_utils/acme/fixtures/cert_2.txt.license",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6eb915239f9f35407fa68fdc41ed6522f1fdcce11badbdcd6057548023179ac1",
+ "format": 1
+ },
+ {
"name": "tests/unit/plugins/module_utils/acme/fixtures/csr_1.pem",
"ftype": "file",
"chksum_type": "sha256",
@@ -5233,21 +5457,21 @@
"name": "tests/unit/plugins/module_utils/acme/backend_data.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9b69baa0e28c3a4dc12e281c326a7f2280e2666fbbd3f51d8b34262b65640c52",
+ "chksum_sha256": "4b360ecd947ec58934ef86809c36a606ea84571a9f3cdc8924ab536d9b811925",
"format": 1
},
{
"name": "tests/unit/plugins/module_utils/acme/test_backend_cryptography.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fccabe7cb7879c3189d18a3057cd9768544c6c8f5d9416aac48687b59ee20de5",
+ "chksum_sha256": "d2c5a8487bb2ef25d9f735df6e37d0bb51afecf2bfe5e845f8e37b0a1b5db487",
"format": 1
},
{
"name": "tests/unit/plugins/module_utils/acme/test_backend_openssl_cli.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "810e5201c70b6e3bc1466d468c5fa822b7e8f5ed381f95de33b386b3a504cab4",
+ "chksum_sha256": "956ddae25c410ef809ace952a5d2457a68914a82065650d8f94d9abe5ce0b910",
"format": 1
},
{
@@ -5282,7 +5506,7 @@
"name": "tests/unit/plugins/module_utils/acme/test_utils.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3658a226ba4a966807e1b4b07b1afb25b38663e95fe2053909fb93eb3339d72e",
+ "chksum_sha256": "98a935f74f8d0f3a597b0a63de78854795ef22c340700c3c74f121a7d6a8edda",
"format": 1
},
{
@@ -5307,6 +5531,13 @@
"format": 1
},
{
+ "name": "tests/unit/plugins/module_utils/crypto/test_math.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "451713c4ad9f0efc68073978274740e8abdcab922861ae69d8a55e034cbb4c46",
+ "format": 1
+ },
+ {
"name": "tests/unit/plugins/module_utils/crypto/test_pem.py",
"ftype": "file",
"chksum_type": "sha256",
@@ -5342,6 +5573,13 @@
"format": 1
},
{
+ "name": "tests/unit/plugins/module_utils/test_time.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1546079502474355c20c41a193a338aa34512af2ba192067dbd303ed50b5d57a",
+ "format": 1
+ },
+ {
"name": "tests/unit/plugins/modules",
"ftype": "dir",
"chksum_type": null,
@@ -5506,7 +5744,7 @@
"name": "CHANGELOG.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ca2c6e6efdcfdb7ee6ee1b3bbb095989678081d32fa9aca67b65f57e96a37026",
+ "chksum_sha256": "4aa8a179caafc747a16ed4a1e21627199d7d97fdce382e169af3b497872c74a9",
"format": 1
},
{
@@ -5520,7 +5758,7 @@
"name": "CHANGELOG.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6ba9093a33e39e50b4a9436cbfdb36c2591a15c0aeadc8e7072b980df760ee6d",
+ "chksum_sha256": "d5b9954b1c1f6a83c292ced179112425246c2570642961d0056cc1fd3bb614c4",
"format": 1
},
{
@@ -5541,7 +5779,7 @@
"name": "README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "704b9171377cd1c819ac83f7603438188432dfc6296bb7c6bfa7291c85d3b8b6",
+ "chksum_sha256": "10d998a15b33191f0fbc4a3c8ef7eebc95ee59d5144025142834e50b608f6e73",
"format": 1
}
],
diff --git a/ansible_collections/community/crypto/MANIFEST.json b/ansible_collections/community/crypto/MANIFEST.json
index 40dbbd275..7ceac0b47 100644
--- a/ansible_collections/community/crypto/MANIFEST.json
+++ b/ansible_collections/community/crypto/MANIFEST.json
@@ -2,7 +2,7 @@
"collection_info": {
"namespace": "community",
"name": "crypto",
- "version": "2.19.0",
+ "version": "2.20.0",
"authors": [
"Ansible (github.com/ansible)"
],
@@ -41,7 +41,7 @@
"name": "FILES.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b8a70c677576d6f7bda75b45d97af355a4f371b9269a791bdef8976361b39f75",
+ "chksum_sha256": "18d1adbc1789a8e0f32412b5f07fbecb376933288258b709f7a91ff4c951d56f",
"format": 1
},
"format": 1
diff --git a/ansible_collections/community/crypto/README.md b/ansible_collections/community/crypto/README.md
index 99c6a4f62..7e8136227 100644
--- a/ansible_collections/community/crypto/README.md
+++ b/ansible_collections/community/crypto/README.md
@@ -66,7 +66,9 @@ If you use the Ansible package and do not update collections independently, use
- ACME modules and plugins:
- acme_account_info module
- acme_account module
+ - acme_ari_info module
- acme_certificate module
+ - acme_certificate_deactivate_authz module
- acme_certificate_revoke module
- acme_challenge_cert_helper module
- acme_inspect module
diff --git a/ansible_collections/community/crypto/changelogs/changelog.yaml b/ansible_collections/community/crypto/changelogs/changelog.yaml
index 856a965ec..13eba21e1 100644
--- a/ansible_collections/community/crypto/changelogs/changelog.yaml
+++ b/ansible_collections/community/crypto/changelogs/changelog.yaml
@@ -1079,6 +1079,25 @@ releases:
name: x509_certificate_convert
namespace: ''
release_date: '2024-04-20'
+ 2.19.1:
+ changes:
+ bugfixes:
+ - 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).
+ - 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).
+ release_summary: Bugfix release.
+ fragments:
+ - 2.19.1.yml
+ - 733-math-prime.yml
+ - 740-ecs_certificate-renewal-without-csr.yml
+ - 754-x509_certificate-time.yml
+ release_date: '2024-05-11'
2.2.0:
changes:
bugfixes:
@@ -1153,6 +1172,54 @@ releases:
- 2.2.4.yml
- 417-openssh_modules-fix-exception-reporting.yml
release_date: '2022-03-22'
+ 2.20.0:
+ changes:
+ bugfixes:
+ - 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).
+ deprecated_features:
+ - 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 - 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).
+ minor_changes:
+ - 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).
+ release_summary: 'Feature and bugfix release.
+
+
+ The deprecations in this release are only relevant for collections that use
+ shared
+
+ code or docs fragments from this collection.
+
+ '
+ fragments:
+ - 2.20.0.yml
+ - 735-acme-docs-fragment.yml
+ - 736-cert-info.yml
+ - 739-acme_certificate-include_renewal_cert_id.yml
+ - 745-absolute-time.yml
+ - 749-argspec.yml
+ modules:
+ - description: Retrieves ACME Renewal Information (ARI) for a certificate.
+ name: acme_ari_info
+ namespace: ''
+ - description: Deactivate all authz for an ACME v2 order.
+ name: acme_certificate_deactivate_authz
+ namespace: ''
+ - description: Determine whether a certificate should be renewed or not.
+ name: acme_certificate_renewal_info
+ namespace: ''
+ release_date: '2024-05-20'
2.3.0:
changes:
bugfixes:
diff --git a/ansible_collections/community/crypto/changelogs/config.yaml b/ansible_collections/community/crypto/changelogs/config.yaml
index 93ceb6472..c4cf310cf 100644
--- a/ansible_collections/community/crypto/changelogs/config.yaml
+++ b/ansible_collections/community/crypto/changelogs/config.yaml
@@ -34,3 +34,6 @@ sections:
- - known_issues
- Known Issues
title: Community Crypto
+trivial_section_name: trivial
+use_fqcn: true
+add_plugin_period: true
diff --git a/ansible_collections/community/crypto/meta/runtime.yml b/ansible_collections/community/crypto/meta/runtime.yml
index 76500748c..9c7592dc7 100644
--- a/ansible_collections/community/crypto/meta/runtime.yml
+++ b/ansible_collections/community/crypto/meta/runtime.yml
@@ -8,6 +8,7 @@ requires_ansible: '>=2.9.10'
action_groups:
acme:
- acme_inspect
+ - acme_certificate_deactivate_authz
- acme_certificate_revoke
- acme_certificate
- acme_account
diff --git a/ansible_collections/community/crypto/plugins/doc_fragments/acme.py b/ansible_collections/community/crypto/plugins/doc_fragments/acme.py
index 2b5bfc231..e5ee3ec4e 100644
--- a/ansible_collections/community/crypto/plugins/doc_fragments/acme.py
+++ b/ansible_collections/community/crypto/plugins/doc_fragments/acme.py
@@ -11,6 +11,9 @@ __metaclass__ = type
class ModuleDocFragment(object):
# Standard files documentation fragment
+ #
+ # NOTE: This document fragment is DEPRECATED and will be removed from community.crypto 3.0.0.
+ # Use both the BASIC and ACCOUNT fragments as a replacement.
DOCUMENTATION = r'''
notes:
- "If a new enough version of the C(cryptography) library
@@ -137,3 +140,178 @@ options:
default: 10
version_added: 2.3.0
'''
+
+ # Basic documentation fragment without account data
+ BASIC = r'''
+notes:
+ - "Although the defaults are chosen so that the module can be used with
+ the L(Let's Encrypt,https://letsencrypt.org/) CA, the module can in
+ principle be used with any CA providing an ACME endpoint, such as
+ L(Buypass Go SSL,https://www.buypass.com/ssl/products/acme)."
+ - "So far, the ACME modules have only been tested by the developers against
+ Let's Encrypt (staging and production), Buypass (staging and production), ZeroSSL (production),
+ and L(Pebble testing server,https://github.com/letsencrypt/Pebble). We have got
+ community feedback that they also work with Sectigo ACME Service for InCommon.
+ If you experience problems with another ACME server, please
+ L(create an issue,https://github.com/ansible-collections/community.crypto/issues/new/choose)
+ to help us supporting it. Feedback that an ACME server not mentioned does work
+ is also appreciated."
+requirements:
+ - either openssl or L(cryptography,https://cryptography.io/) >= 1.5
+ - ipaddress
+options:
+ acme_version:
+ description:
+ - "The ACME version of the endpoint."
+ - "Must be V(1) for the classic Let's Encrypt and Buypass ACME endpoints,
+ or V(2) for standardized ACME v2 endpoints."
+ - "The value V(1) is deprecated since community.crypto 2.0.0 and will be
+ removed from community.crypto 3.0.0."
+ required: true
+ type: int
+ choices: [ 1, 2 ]
+ acme_directory:
+ description:
+ - "The ACME directory to use. This is the entry point URL to access
+ the ACME CA server API."
+ - "For safety reasons the default is set to the Let's Encrypt staging
+ server (for the ACME v1 protocol). This will create technically correct,
+ but untrusted certificates."
+ - "For Let's Encrypt, all staging endpoints can be found here:
+ U(https://letsencrypt.org/docs/staging-environment/). For Buypass, all
+ endpoints can be found here:
+ U(https://community.buypass.com/t/63d4ay/buypass-go-ssl-endpoints)"
+ - "For B(Let's Encrypt), the production directory URL for ACME v2 is
+ U(https://acme-v02.api.letsencrypt.org/directory)."
+ - "For B(Buypass), the production directory URL for ACME v2 and v1 is
+ U(https://api.buypass.com/acme/directory)."
+ - "For B(ZeroSSL), the production directory URL for ACME v2 is
+ U(https://acme.zerossl.com/v2/DV90)."
+ - "For B(Sectigo), the production directory URL for ACME v2 is
+ U(https://acme-qa.secure.trust-provider.com/v2/DV)."
+ - The notes for this module contain a list of ACME services this module has
+ been tested against.
+ required: true
+ type: str
+ validate_certs:
+ description:
+ - Whether calls to the ACME directory will validate TLS certificates.
+ - "B(Warning:) Should B(only ever) be set to V(false) for testing purposes,
+ for example when testing against a local Pebble server."
+ type: bool
+ default: true
+ select_crypto_backend:
+ description:
+ - Determines which crypto backend to use.
+ - The default choice is V(auto), which tries to use C(cryptography) if available, and falls back to
+ C(openssl).
+ - If set to V(openssl), will try to use the C(openssl) binary.
+ - If set to V(cryptography), will try to use the
+ L(cryptography,https://cryptography.io/) library.
+ type: str
+ default: auto
+ choices: [ auto, cryptography, openssl ]
+ request_timeout:
+ description:
+ - The time Ansible should wait for a response from the ACME API.
+ - This timeout is applied to all HTTP(S) requests (HEAD, GET, POST).
+ type: int
+ default: 10
+ version_added: 2.3.0
+'''
+
+ # Account data documentation fragment
+ ACCOUNT = r'''
+notes:
+ - "If a new enough version of the C(cryptography) library
+ is available (see Requirements for details), it will be used
+ instead of the C(openssl) binary. This can be explicitly disabled
+ or enabled with the O(select_crypto_backend) option. Note that using
+ the C(openssl) binary will be slower and less secure, as private key
+ contents always have to be stored on disk (see
+ O(account_key_content))."
+options:
+ account_key_src:
+ description:
+ - "Path to a file containing the ACME account RSA or Elliptic Curve
+ key."
+ - "Private keys can be created with the
+ M(community.crypto.openssl_privatekey) or M(community.crypto.openssl_privatekey_pipe)
+ modules. If the requisite (cryptography) is not available,
+ keys can also be created directly with the C(openssl) command line tool:
+ RSA keys can be created with C(openssl genrsa ...). Elliptic curve keys
+ can be created with C(openssl ecparam -genkey ...). Any other tool creating
+ private keys in PEM format can be used as well."
+ - "Mutually exclusive with O(account_key_content)."
+ - "Required if O(account_key_content) is not used."
+ type: path
+ aliases: [ account_key ]
+ account_key_content:
+ description:
+ - "Content of the ACME account RSA or Elliptic Curve key."
+ - "Mutually exclusive with O(account_key_src)."
+ - "Required if O(account_key_src) is not used."
+ - "B(Warning:) the content will be written into a temporary file, which will
+ be deleted by Ansible when the module completes. Since this is an
+ important private key — it can be used to change the account key,
+ or to revoke your certificates without knowing their private keys
+ —, this might not be acceptable."
+ - "In case C(cryptography) is used, the content is not written into a
+ temporary file. It can still happen that it is written to disk by
+ Ansible in the process of moving the module with its argument to
+ the node where it is executed."
+ type: str
+ account_key_passphrase:
+ description:
+ - Phassphrase to use to decode the account key.
+ - "B(Note:) this is not supported by the C(openssl) backend, only by the C(cryptography) backend."
+ type: str
+ version_added: 1.6.0
+ account_uri:
+ description:
+ - "If specified, assumes that the account URI is as given. If the
+ account key does not match this account, or an account with this
+ URI does not exist, the module fails."
+ type: str
+'''
+
+ # No account data documentation fragment
+ NO_ACCOUNT = r'''
+notes:
+ - "If a new enough version of the C(cryptography) library
+ is available (see Requirements for details), it will be used
+ instead of the C(openssl) binary. This can be explicitly disabled
+ or enabled with the O(select_crypto_backend) option. Note that using
+ the C(openssl) binary will be slower."
+options: {}
+'''
+
+ CERTIFICATE = r'''
+options:
+ csr:
+ description:
+ - "File containing the CSR for the new certificate."
+ - "Can be created with M(community.crypto.openssl_csr)."
+ - "The CSR may contain multiple Subject Alternate Names, but each one
+ will lead to an individual challenge that must be fulfilled for the
+ CSR to be signed."
+ - "B(Note): the private key used to create the CSR B(must not) be the
+ account key. This is a bad idea from a security point of view, and
+ the CA should not accept the CSR. The ACME server should return an
+ error in this case."
+ - Precisely one of O(csr) or O(csr_content) must be specified.
+ type: path
+ csr_content:
+ description:
+ - "Content of the CSR for the new certificate."
+ - "Can be created with M(community.crypto.openssl_csr_pipe)."
+ - "The CSR may contain multiple Subject Alternate Names, but each one
+ will lead to an individual challenge that must be fulfilled for the
+ CSR to be signed."
+ - "B(Note): the private key used to create the CSR B(must not) be the
+ account key. This is a bad idea from a security point of view, and
+ the CA should not accept the CSR. The ACME server should return an
+ error in this case."
+ - Precisely one of O(csr) or O(csr_content) must be specified.
+ type: str
+'''
diff --git a/ansible_collections/community/crypto/plugins/module_utils/acme/acme.py b/ansible_collections/community/crypto/plugins/module_utils/acme/acme.py
index 74d0bc1ea..7f9b954c0 100644
--- a/ansible_collections/community/crypto/plugins/module_utils/acme/acme.py
+++ b/ansible_collections/community/crypto/plugins/module_utils/acme/acme.py
@@ -21,6 +21,8 @@ from ansible.module_utils.common.text.converters import to_bytes
from ansible.module_utils.urls import fetch_url
from ansible.module_utils.six import PY3
+from ansible_collections.community.crypto.plugins.module_utils.argspec import ArgumentSpec
+
from ansible_collections.community.crypto.plugins.module_utils.acme.backend_openssl_cli import (
OpenSSLCLIBackend,
)
@@ -42,7 +44,9 @@ from ansible_collections.community.crypto.plugins.module_utils.acme.errors impor
)
from ansible_collections.community.crypto.plugins.module_utils.acme.utils import (
+ compute_cert_id,
nopad_b64,
+ parse_retry_after,
)
try:
@@ -153,6 +157,9 @@ class ACMEDirectory(object):
self.module, msg='Was not able to obtain nonce, giving up after 5 retries', info=info, response=response)
retry_count += 1
+ def has_renewal_info_endpoint(self):
+ return 'renewalInfo' in self.directory
+
class ACMEClient(object):
'''
@@ -168,9 +175,9 @@ class ACMEClient(object):
self.backend = backend
self.version = module.params['acme_version']
# account_key path and content are mutually exclusive
- self.account_key_file = module.params['account_key_src']
- self.account_key_content = module.params['account_key_content']
- self.account_key_passphrase = module.params['account_key_passphrase']
+ self.account_key_file = module.params.get('account_key_src')
+ self.account_key_content = module.params.get('account_key_content')
+ self.account_key_passphrase = module.params.get('account_key_passphrase')
# Grab account URI from module parameters.
# Make sure empty string is treated as None.
@@ -383,24 +390,94 @@ class ACMEClient(object):
self.module, msg=error_msg, info=info, content=content, content_json=result if parsed_json_result else None)
return result, info
+ def get_renewal_info(
+ self,
+ cert_id=None,
+ cert_info=None,
+ cert_filename=None,
+ cert_content=None,
+ include_retry_after=False,
+ retry_after_relative_with_timezone=True,
+ ):
+ if not self.directory.has_renewal_info_endpoint():
+ raise ModuleFailException('The ACME endpoint does not support ACME Renewal Information retrieval')
+
+ if cert_id is None:
+ cert_id = compute_cert_id(self.backend, cert_info=cert_info, cert_filename=cert_filename, cert_content=cert_content)
+ url = '{base}{cert_id}'.format(base=self.directory.directory['renewalInfo'], cert_id=cert_id)
+
+ data, info = self.get_request(url, parse_json_result=True, fail_on_error=True, get_only=True)
+
+ # Include Retry-After header if asked for
+ if include_retry_after and 'retry-after' in info:
+ try:
+ data['retryAfter'] = parse_retry_after(
+ info['retry-after'],
+ relative_with_timezone=retry_after_relative_with_timezone,
+ )
+ except ValueError:
+ pass
+ return data
+
def get_default_argspec():
'''
Provides default argument spec for the options documented in the acme doc fragment.
+
+ DEPRECATED: will be removed in community.crypto 3.0.0
'''
return dict(
- account_key_src=dict(type='path', aliases=['account_key']),
- account_key_content=dict(type='str', no_log=True),
- account_key_passphrase=dict(type='str', no_log=True),
- account_uri=dict(type='str'),
acme_directory=dict(type='str', required=True),
acme_version=dict(type='int', required=True, choices=[1, 2]),
validate_certs=dict(type='bool', default=True),
select_crypto_backend=dict(type='str', default='auto', choices=['auto', 'openssl', 'cryptography']),
request_timeout=dict(type='int', default=10),
+ account_key_src=dict(type='path', aliases=['account_key']),
+ account_key_content=dict(type='str', no_log=True),
+ account_key_passphrase=dict(type='str', no_log=True),
+ account_uri=dict(type='str'),
)
+def create_default_argspec(
+ with_account=True,
+ require_account_key=True,
+ with_certificate=False,
+):
+ '''
+ Provides default argument spec for the options documented in the acme doc fragment.
+ '''
+ result = ArgumentSpec(
+ argument_spec=dict(
+ acme_directory=dict(type='str', required=True),
+ acme_version=dict(type='int', required=True, choices=[1, 2]),
+ validate_certs=dict(type='bool', default=True),
+ select_crypto_backend=dict(type='str', default='auto', choices=['auto', 'openssl', 'cryptography']),
+ request_timeout=dict(type='int', default=10),
+ ),
+ )
+ if with_account:
+ result.update_argspec(
+ account_key_src=dict(type='path', aliases=['account_key']),
+ account_key_content=dict(type='str', no_log=True),
+ account_key_passphrase=dict(type='str', no_log=True),
+ account_uri=dict(type='str'),
+ )
+ if require_account_key:
+ result.update(required_one_of=[['account_key_src', 'account_key_content']])
+ result.update(mutually_exclusive=[['account_key_src', 'account_key_content']])
+ if with_certificate:
+ result.update_argspec(
+ csr=dict(type='path'),
+ csr_content=dict(type='str'),
+ )
+ result.update(
+ required_one_of=[['csr', 'csr_content']],
+ mutually_exclusive=[['csr', 'csr_content']],
+ )
+ return result
+
+
def create_backend(module, needs_acme_v2):
if not HAS_IPADDRESS:
module.fail_json(msg=missing_required_lib('ipaddress'), exception=IPADDRESS_IMPORT_ERROR)
diff --git a/ansible_collections/community/crypto/plugins/module_utils/acme/backend_cryptography.py b/ansible_collections/community/crypto/plugins/module_utils/acme/backend_cryptography.py
index 0722c1f99..b652240dc 100644
--- a/ansible_collections/community/crypto/plugins/module_utils/acme/backend_cryptography.py
+++ b/ansible_collections/community/crypto/plugins/module_utils/acme/backend_cryptography.py
@@ -11,6 +11,7 @@ __metaclass__ = type
import base64
import binascii
+import datetime
import os
import traceback
@@ -19,7 +20,9 @@ from ansible.module_utils.common.text.converters import to_bytes, to_native, to_
from ansible_collections.community.crypto.plugins.module_utils.version import LooseVersion
from ansible_collections.community.crypto.plugins.module_utils.acme.backends import (
+ CertificateInformation,
CryptoBackend,
+ _parse_acme_timestamp,
)
from ansible_collections.community.crypto.plugins.module_utils.acme.certificates import (
@@ -35,27 +38,40 @@ from ansible_collections.community.crypto.plugins.module_utils.acme.io import re
from ansible_collections.community.crypto.plugins.module_utils.acme.utils import nopad_b64
+from ansible_collections.community.crypto.plugins.module_utils.crypto.basic import (
+ OpenSSLObjectError,
+)
+
from ansible_collections.community.crypto.plugins.module_utils.crypto.math import (
convert_int_to_bytes,
convert_int_to_hex,
)
-from ansible_collections.community.crypto.plugins.module_utils.crypto.support import (
- get_now_datetime,
- ensure_utc_timezone,
- parse_name_field,
-)
-
from ansible_collections.community.crypto.plugins.module_utils.crypto.cryptography_support import (
CRYPTOGRAPHY_TIMEZONE,
cryptography_name_to_oid,
+ cryptography_serial_number_of_cert,
get_not_valid_after,
+ get_not_valid_before,
)
from ansible_collections.community.crypto.plugins.module_utils.crypto.pem import (
extract_first_pem,
)
+from ansible_collections.community.crypto.plugins.module_utils.crypto.support import (
+ parse_name_field,
+)
+
+from ansible_collections.community.crypto.plugins.module_utils.time import (
+ ensure_utc_timezone,
+ from_epoch_seconds,
+ get_epoch_seconds,
+ get_now_datetime,
+ get_relative_time_option,
+ UTC,
+)
+
CRYPTOGRAPHY_MINIMAL_VERSION = '1.5'
CRYPTOGRAPHY_ERROR = None
@@ -170,6 +186,32 @@ class CryptographyBackend(CryptoBackend):
def __init__(self, module):
super(CryptographyBackend, self).__init__(module)
+ def get_now(self):
+ return get_now_datetime(with_timezone=CRYPTOGRAPHY_TIMEZONE)
+
+ def parse_acme_timestamp(self, timestamp_str):
+ return _parse_acme_timestamp(timestamp_str, with_timezone=CRYPTOGRAPHY_TIMEZONE)
+
+ def parse_module_parameter(self, value, name):
+ try:
+ return get_relative_time_option(value, name, backend='cryptography', with_timezone=CRYPTOGRAPHY_TIMEZONE)
+ except OpenSSLObjectError as exc:
+ raise BackendException(to_native(exc))
+
+ def interpolate_timestamp(self, timestamp_start, timestamp_end, percentage):
+ start = get_epoch_seconds(timestamp_start)
+ end = get_epoch_seconds(timestamp_end)
+ return from_epoch_seconds(start + percentage * (end - start), with_timezone=CRYPTOGRAPHY_TIMEZONE)
+
+ def get_utc_datetime(self, *args, **kwargs):
+ kwargs_ext = dict(kwargs)
+ if CRYPTOGRAPHY_TIMEZONE and ('tzinfo' not in kwargs_ext and len(args) < 8):
+ kwargs_ext['tzinfo'] = UTC
+ result = datetime.datetime(*args, **kwargs_ext)
+ if CRYPTOGRAPHY_TIMEZONE and ('tzinfo' in kwargs or len(args) >= 8):
+ result = ensure_utc_timezone(result)
+ return result
+
def parse_key(self, key_file=None, key_content=None, passphrase=None):
'''
Parses an RSA or Elliptic Curve key file in PEM format and returns key_data.
@@ -376,7 +418,7 @@ class CryptographyBackend(CryptoBackend):
raise BackendException('Cannot parse certificate {0}: {1}'.format(cert_filename, e))
if now is None:
- now = get_now_datetime(with_timezone=CRYPTOGRAPHY_TIMEZONE)
+ now = self.get_now()
elif CRYPTOGRAPHY_TIMEZONE:
now = ensure_utc_timezone(now)
return (get_not_valid_after(cert) - now).days
@@ -386,3 +428,44 @@ class CryptographyBackend(CryptoBackend):
Given a Criterium object, creates a ChainMatcher object.
'''
return CryptographyChainMatcher(criterium, self.module)
+
+ def get_cert_information(self, cert_filename=None, cert_content=None):
+ '''
+ Return some information on a X.509 certificate as a CertificateInformation object.
+ '''
+ if cert_filename is not None:
+ cert_content = read_file(cert_filename)
+ else:
+ cert_content = to_bytes(cert_content)
+
+ # Make sure we have at most one PEM. Otherwise cryptography 36.0.0 will barf.
+ cert_content = to_bytes(extract_first_pem(to_text(cert_content)) or '')
+
+ try:
+ cert = cryptography.x509.load_pem_x509_certificate(cert_content, _cryptography_backend)
+ except Exception as e:
+ if cert_filename is None:
+ raise BackendException('Cannot parse certificate: {0}'.format(e))
+ raise BackendException('Cannot parse certificate {0}: {1}'.format(cert_filename, e))
+
+ ski = None
+ try:
+ ext = cert.extensions.get_extension_for_class(cryptography.x509.SubjectKeyIdentifier)
+ ski = ext.value.digest
+ except cryptography.x509.ExtensionNotFound:
+ pass
+
+ aki = None
+ try:
+ ext = cert.extensions.get_extension_for_class(cryptography.x509.AuthorityKeyIdentifier)
+ aki = ext.value.key_identifier
+ except cryptography.x509.ExtensionNotFound:
+ pass
+
+ return CertificateInformation(
+ not_valid_after=get_not_valid_after(cert),
+ not_valid_before=get_not_valid_before(cert),
+ serial_number=cryptography_serial_number_of_cert(cert),
+ subject_key_identifier=ski,
+ authority_key_identifier=aki,
+ )
diff --git a/ansible_collections/community/crypto/plugins/module_utils/acme/backend_openssl_cli.py b/ansible_collections/community/crypto/plugins/module_utils/acme/backend_openssl_cli.py
index 9a1ed1f5a..9aab187ac 100644
--- a/ansible_collections/community/crypto/plugins/module_utils/acme/backend_openssl_cli.py
+++ b/ansible_collections/community/crypto/plugins/module_utils/acme/backend_openssl_cli.py
@@ -20,6 +20,7 @@ import traceback
from ansible.module_utils.common.text.converters import to_native, to_text, to_bytes
from ansible_collections.community.crypto.plugins.module_utils.acme.backends import (
+ CertificateInformation,
CryptoBackend,
)
@@ -30,6 +31,8 @@ from ansible_collections.community.crypto.plugins.module_utils.acme.errors impor
from ansible_collections.community.crypto.plugins.module_utils.acme.utils import nopad_b64
+from ansible_collections.community.crypto.plugins.module_utils.crypto.math import convert_bytes_to_int
+
try:
import ipaddress
except ImportError:
@@ -39,6 +42,33 @@ except ImportError:
_OPENSSL_ENVIRONMENT_UPDATE = dict(LANG='C', LC_ALL='C', LC_MESSAGES='C', LC_CTYPE='C')
+def _extract_date(out_text, name, cert_filename_suffix=""):
+ try:
+ date_str = re.search(r"\s+%s\s*:\s+(.*)" % name, out_text).group(1)
+ return datetime.datetime.strptime(date_str, '%b %d %H:%M:%S %Y %Z')
+ except AttributeError:
+ raise BackendException("No '{0}' date found{1}".format(name, cert_filename_suffix))
+ except ValueError as exc:
+ raise BackendException("Failed to parse '{0}' date{1}: {2}".format(name, cert_filename_suffix, exc))
+
+
+def _decode_octets(octets_text):
+ return binascii.unhexlify(re.sub(r"(\s|:)", "", octets_text).encode("utf-8"))
+
+
+def _extract_octets(out_text, name, required=True, potential_prefixes=None):
+ regexp = r"\s+%s:\s*\n\s+%s([A-Fa-f0-9]{2}(?::[A-Fa-f0-9]{2})*)\s*\n" % (
+ name,
+ ('(?:%s)' % '|'.join(re.escape(pp) for pp in potential_prefixes)) if potential_prefixes else '',
+ )
+ match = re.search(regexp, out_text, re.MULTILINE | re.DOTALL)
+ if match is not None:
+ return _decode_octets(match.group(1))
+ if not required:
+ return None
+ raise BackendException("No '{0}' octet string found".format(name))
+
+
class OpenSSLCLIBackend(CryptoBackend):
def __init__(self, module, openssl_binary=None):
super(OpenSSLCLIBackend, self).__init__(module)
@@ -89,10 +119,12 @@ class OpenSSLCLIBackend(CryptoBackend):
dummy, out, dummy = self.module.run_command(
openssl_keydump_cmd, check_rc=True, environ_update=_OPENSSL_ENVIRONMENT_UPDATE)
+ out_text = to_text(out, errors='surrogate_or_strict')
+
if account_key_type == 'rsa':
- pub_hex, pub_exp = re.search(
- r"modulus:\n\s+00:([a-f0-9\:\s]+?)\npublicExponent: ([0-9]+)",
- to_text(out, errors='surrogate_or_strict'), re.MULTILINE | re.DOTALL).groups()
+ pub_hex = re.search(r"modulus:\n\s+00:([a-f0-9\:\s]+?)\npublicExponent", out_text, re.MULTILINE | re.DOTALL).group(1)
+
+ pub_exp = re.search(r"\npublicExponent: ([0-9]+)", out_text, re.MULTILINE | re.DOTALL).group(1)
pub_exp = "{0:x}".format(int(pub_exp))
if len(pub_exp) % 2:
pub_exp = "0{0}".format(pub_exp)
@@ -104,17 +136,19 @@ class OpenSSLCLIBackend(CryptoBackend):
'jwk': {
"kty": "RSA",
"e": nopad_b64(binascii.unhexlify(pub_exp.encode("utf-8"))),
- "n": nopad_b64(binascii.unhexlify(re.sub(r"(\s|:)", "", pub_hex).encode("utf-8"))),
+ "n": nopad_b64(_decode_octets(pub_hex)),
},
'hash': 'sha256',
}
elif account_key_type == 'ec':
pub_data = re.search(
r"pub:\s*\n\s+04:([a-f0-9\:\s]+?)\nASN1 OID: (\S+)(?:\nNIST CURVE: (\S+))?",
- to_text(out, errors='surrogate_or_strict'), re.MULTILINE | re.DOTALL)
+ out_text,
+ re.MULTILINE | re.DOTALL,
+ )
if pub_data is None:
raise KeyParsingError('cannot parse elliptic curve key')
- pub_hex = binascii.unhexlify(re.sub(r"(\s|:)", "", pub_data.group(1)).encode("utf-8"))
+ pub_hex = _decode_octets(pub_data.group(1))
asn1_oid_curve = pub_data.group(2).lower()
nist_curve = pub_data.group(3).lower() if pub_data.group(3) else None
if asn1_oid_curve == 'prime256v1' or nist_curve == 'p-256':
@@ -303,13 +337,8 @@ class OpenSSLCLIBackend(CryptoBackend):
openssl_cert_cmd = [self.openssl_binary, "x509", "-in", filename, "-noout", "-text"]
dummy, out, dummy = self.module.run_command(
openssl_cert_cmd, data=data, check_rc=True, binary_data=True, environ_update=_OPENSSL_ENVIRONMENT_UPDATE)
- try:
- not_after_str = re.search(r"\s+Not After\s*:\s+(.*)", to_text(out, errors='surrogate_or_strict')).group(1)
- not_after = datetime.datetime.strptime(not_after_str, '%b %d %H:%M:%S %Y %Z')
- except AttributeError:
- raise BackendException("No 'Not after' date found{0}".format(cert_filename_suffix))
- except ValueError:
- raise BackendException("Failed to parse 'Not after' date{0}".format(cert_filename_suffix))
+ out_text = to_text(out, errors='surrogate_or_strict')
+ not_after = _extract_date(out_text, 'Not After', cert_filename_suffix=cert_filename_suffix)
if now is None:
now = datetime.datetime.now()
return (not_after - now).days
@@ -319,3 +348,43 @@ class OpenSSLCLIBackend(CryptoBackend):
Given a Criterium object, creates a ChainMatcher object.
'''
raise BackendException('Alternate chain matching can only be used with the "cryptography" backend.')
+
+ def get_cert_information(self, cert_filename=None, cert_content=None):
+ '''
+ Return some information on a X.509 certificate as a CertificateInformation object.
+ '''
+ filename = cert_filename
+ data = None
+ if cert_filename is not None:
+ cert_filename_suffix = ' in {0}'.format(cert_filename)
+ else:
+ filename = '/dev/stdin'
+ data = to_bytes(cert_content)
+ cert_filename_suffix = ''
+
+ openssl_cert_cmd = [self.openssl_binary, "x509", "-in", filename, "-noout", "-text"]
+ dummy, out, dummy = self.module.run_command(
+ openssl_cert_cmd, data=data, check_rc=True, binary_data=True, environ_update=_OPENSSL_ENVIRONMENT_UPDATE)
+ out_text = to_text(out, errors='surrogate_or_strict')
+
+ not_after = _extract_date(out_text, 'Not After', cert_filename_suffix=cert_filename_suffix)
+ not_before = _extract_date(out_text, 'Not Before', cert_filename_suffix=cert_filename_suffix)
+
+ sn = re.search(
+ r" Serial Number: ([0-9]+)",
+ to_text(out, errors='surrogate_or_strict'), re.MULTILINE | re.DOTALL)
+ if sn:
+ serial = int(sn.group(1))
+ else:
+ serial = convert_bytes_to_int(_extract_octets(out_text, 'Serial Number', required=True))
+
+ ski = _extract_octets(out_text, 'X509v3 Subject Key Identifier', required=False)
+ aki = _extract_octets(out_text, 'X509v3 Authority Key Identifier', required=False, potential_prefixes=['keyid:', ''])
+
+ return CertificateInformation(
+ not_valid_after=not_after,
+ not_valid_before=not_before,
+ serial_number=serial,
+ subject_key_identifier=ski,
+ authority_key_identifier=aki,
+ )
diff --git a/ansible_collections/community/crypto/plugins/module_utils/acme/backends.py b/ansible_collections/community/crypto/plugins/module_utils/acme/backends.py
index 2d95a3ee3..7c08fae95 100644
--- a/ansible_collections/community/crypto/plugins/module_utils/acme/backends.py
+++ b/ansible_collections/community/crypto/plugins/module_utils/acme/backends.py
@@ -9,9 +9,78 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
+from collections import namedtuple
import abc
+import datetime
+import re
from ansible.module_utils import six
+from ansible.module_utils.common.text.converters import to_native
+
+from ansible_collections.community.crypto.plugins.module_utils.acme.errors import (
+ BackendException,
+)
+
+from ansible_collections.community.crypto.plugins.module_utils.crypto.basic import (
+ OpenSSLObjectError,
+)
+
+from ansible_collections.community.crypto.plugins.module_utils.time import (
+ ensure_utc_timezone,
+ from_epoch_seconds,
+ get_epoch_seconds,
+ get_now_datetime,
+ get_relative_time_option,
+ remove_timezone,
+)
+
+
+CertificateInformation = namedtuple(
+ 'CertificateInformation',
+ (
+ 'not_valid_after',
+ 'not_valid_before',
+ 'serial_number',
+ 'subject_key_identifier',
+ 'authority_key_identifier',
+ ),
+)
+
+
+_FRACTIONAL_MATCHER = re.compile(r'^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2})(|\.\d+)(Z|[+-]\d{2}:?\d{2}.*)$')
+
+
+def _reduce_fractional_digits(timestamp_str):
+ """
+ Given a RFC 3339 timestamp that includes too many digits for the fractional seconds part, reduces these to at most 6.
+ """
+ # RFC 3339 (https://www.rfc-editor.org/info/rfc3339)
+ m = _FRACTIONAL_MATCHER.match(timestamp_str)
+ if not m:
+ raise BackendException('Cannot parse ISO 8601 timestamp {0!r}'.format(timestamp_str))
+ timestamp, fractional, timezone = m.groups()
+ if len(fractional) > 7:
+ # Python does not support anything smaller than microseconds
+ # (Golang supports nanoseconds, Boulder often emits more fractional digits, which Python chokes on)
+ fractional = fractional[:7]
+ return '%s%s%s' % (timestamp, fractional, timezone)
+
+
+def _parse_acme_timestamp(timestamp_str, with_timezone):
+ """
+ Parses a RFC 3339 timestamp.
+ """
+ # RFC 3339 (https://www.rfc-editor.org/info/rfc3339)
+ timestamp_str = _reduce_fractional_digits(timestamp_str)
+ for format in ('%Y-%m-%dT%H:%M:%SZ', '%Y-%m-%dT%H:%M:%S.%fZ', '%Y-%m-%dT%H:%M:%S%z', '%Y-%m-%dT%H:%M:%S.%f%z'):
+ # Note that %z won't work with Python 2... https://stackoverflow.com/a/27829491
+ try:
+ result = datetime.datetime.strptime(timestamp_str, format)
+ except ValueError:
+ pass
+ else:
+ return ensure_utc_timezone(result) if with_timezone else remove_timezone(result)
+ raise BackendException('Cannot parse ISO 8601 timestamp {0!r}'.format(timestamp_str))
@six.add_metaclass(abc.ABCMeta)
@@ -19,6 +88,30 @@ class CryptoBackend(object):
def __init__(self, module):
self.module = module
+ def get_now(self):
+ return get_now_datetime(with_timezone=False)
+
+ def parse_acme_timestamp(self, timestamp_str):
+ # RFC 3339 (https://www.rfc-editor.org/info/rfc3339)
+ return _parse_acme_timestamp(timestamp_str, with_timezone=False)
+
+ def parse_module_parameter(self, value, name):
+ try:
+ return get_relative_time_option(value, name, backend='cryptography', with_timezone=False)
+ except OpenSSLObjectError as exc:
+ raise BackendException(to_native(exc))
+
+ def interpolate_timestamp(self, timestamp_start, timestamp_end, percentage):
+ start = get_epoch_seconds(timestamp_start)
+ end = get_epoch_seconds(timestamp_end)
+ return from_epoch_seconds(start + percentage * (end - start), with_timezone=False)
+
+ def get_utc_datetime(self, *args, **kwargs):
+ result = datetime.datetime(*args, **kwargs)
+ if 'tzinfo' in kwargs or len(args) >= 8:
+ result = remove_timezone(result)
+ return result
+
@abc.abstractmethod
def parse_key(self, key_file=None, key_content=None, passphrase=None):
'''
@@ -74,3 +167,12 @@ class CryptoBackend(object):
'''
Given a Criterium object, creates a ChainMatcher object.
'''
+
+ def get_cert_information(self, cert_filename=None, cert_content=None):
+ '''
+ Return some information on a X.509 certificate as a CertificateInformation object.
+ '''
+ # Not implementing this method in a backend is DEPRECATED and will be
+ # disallowed in community.crypto 3.0.0. This method will be marked as
+ # @abstractmethod by then.
+ raise BackendException('This backend does not support get_cert_information()')
diff --git a/ansible_collections/community/crypto/plugins/module_utils/acme/challenges.py b/ansible_collections/community/crypto/plugins/module_utils/acme/challenges.py
index 3a87ffec1..116ca4206 100644
--- a/ansible_collections/community/crypto/plugins/module_utils/acme/challenges.py
+++ b/ansible_collections/community/crypto/plugins/module_utils/acme/challenges.py
@@ -103,7 +103,7 @@ class Challenge(object):
# https://tools.ietf.org/html/rfc8555#section-8.4
resource = '_acme-challenge'
value = nopad_b64(hashlib.sha256(to_bytes(key_authorization)).digest())
- record = (resource + identifier[1:]) if identifier.startswith('*.') else '{0}.{1}'.format(resource, identifier)
+ record = '{0}.{1}'.format(resource, identifier[2:] if identifier.startswith('*.') else identifier)
return {
'resource': resource,
'resource_value': value,
@@ -283,13 +283,21 @@ class Authorization(object):
return self.status == 'valid'
return self.wait_for_validation(client, challenge_type)
+ def can_deactivate(self):
+ '''
+ Deactivates this authorization.
+ https://community.letsencrypt.org/t/authorization-deactivation/19860/2
+ https://tools.ietf.org/html/rfc8555#section-7.5.2
+ '''
+ return self.status in ('valid', 'pending')
+
def deactivate(self, client):
'''
Deactivates this authorization.
https://community.letsencrypt.org/t/authorization-deactivation/19860/2
https://tools.ietf.org/html/rfc8555#section-7.5.2
'''
- if self.status != 'valid':
+ if not self.can_deactivate():
return
authz_deactivate = {
'status': 'deactivated'
diff --git a/ansible_collections/community/crypto/plugins/module_utils/acme/orders.py b/ansible_collections/community/crypto/plugins/module_utils/acme/orders.py
index 732b430df..98c28445f 100644
--- a/ansible_collections/community/crypto/plugins/module_utils/acme/orders.py
+++ b/ansible_collections/community/crypto/plugins/module_utils/acme/orders.py
@@ -32,6 +32,7 @@ class Order(object):
self.identifiers = []
for identifier in data['identifiers']:
self.identifiers.append((identifier['type'], identifier['value']))
+ self.replaces_cert_id = data.get('replaces')
self.finalize_uri = data.get('finalize')
self.certificate_uri = data.get('certificate')
self.authorization_uris = data['authorizations']
@@ -44,6 +45,7 @@ class Order(object):
self.status = None
self.identifiers = []
+ self.replaces_cert_id = None
self.finalize_uri = None
self.certificate_uri = None
self.authorization_uris = []
@@ -62,7 +64,7 @@ class Order(object):
return result
@classmethod
- def create(cls, client, identifiers):
+ def create(cls, client, identifiers, replaces_cert_id=None):
'''
Start a new certificate order (ACME v2 protocol).
https://tools.ietf.org/html/rfc8555#section-7.4
@@ -76,6 +78,8 @@ class Order(object):
new_order = {
"identifiers": acme_identifiers
}
+ if replaces_cert_id is not None:
+ new_order["replaces"] = replaces_cert_id
result, info = client.send_signed_request(
client.directory['newOrder'], new_order, error_msg='Failed to start new order', expected_status_codes=[201])
return cls.from_json(client, result, info['location'])
diff --git a/ansible_collections/community/crypto/plugins/module_utils/acme/utils.py b/ansible_collections/community/crypto/plugins/module_utils/acme/utils.py
index 217b6de47..ba460444b 100644
--- a/ansible_collections/community/crypto/plugins/module_utils/acme/utils.py
+++ b/ansible_collections/community/crypto/plugins/module_utils/acme/utils.py
@@ -10,6 +10,7 @@ __metaclass__ = type
import base64
+import datetime
import re
import textwrap
import traceback
@@ -19,6 +20,10 @@ from ansible.module_utils.six.moves.urllib.parse import unquote
from ansible_collections.community.crypto.plugins.module_utils.acme.errors import ModuleFailException
+from ansible_collections.community.crypto.plugins.module_utils.crypto.math import convert_int_to_bytes
+
+from ansible_collections.community.crypto.plugins.module_utils.time import get_now_datetime
+
def nopad_b64(data):
return base64.urlsafe_b64encode(data).decode('utf8').replace("=", "")
@@ -65,8 +70,61 @@ def pem_to_der(pem_filename=None, pem_content=None):
def process_links(info, callback):
'''
Process link header, calls callback for every link header with the URL and relation as options.
+
+ https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Link
'''
if 'link' in info:
link = info['link']
for url, relation in re.findall(r'<([^>]+)>;\s*rel="(\w+)"', link):
callback(unquote(url), relation)
+
+
+def parse_retry_after(value, relative_with_timezone=True, now=None):
+ '''
+ Parse the value of a Retry-After header and return a timestamp.
+
+ https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After
+ '''
+ # First try a number of seconds
+ try:
+ delta = datetime.timedelta(seconds=int(value))
+ if now is None:
+ now = get_now_datetime(relative_with_timezone)
+ return now + delta
+ except ValueError:
+ pass
+
+ try:
+ return datetime.datetime.strptime(value, '%a, %d %b %Y %H:%M:%S GMT')
+ except ValueError:
+ pass
+
+ raise ValueError('Cannot parse Retry-After header value %s' % repr(value))
+
+
+def compute_cert_id(
+ backend,
+ cert_info=None,
+ cert_filename=None,
+ cert_content=None,
+ none_if_required_information_is_missing=False,
+):
+ # Obtain certificate info if not provided
+ if cert_info is None:
+ cert_info = backend.get_cert_information(cert_filename=cert_filename, cert_content=cert_content)
+
+ # Convert Authority Key Identifier to string
+ if cert_info.authority_key_identifier is None:
+ if none_if_required_information_is_missing:
+ return None
+ raise ModuleFailException('Certificate has no Authority Key Identifier extension')
+ aki = to_native(base64.urlsafe_b64encode(cert_info.authority_key_identifier)).replace('=', '')
+
+ # Convert serial number to string
+ serial_bytes = convert_int_to_bytes(cert_info.serial_number)
+ if ord(serial_bytes[:1]) >= 128:
+ serial_bytes = b'\x00' + serial_bytes
+ serial = to_native(base64.urlsafe_b64encode(serial_bytes)).replace('=', '')
+
+ # Compose cert ID
+ return '{aki}.{serial}'.format(aki=aki, serial=serial)
diff --git a/ansible_collections/community/crypto/plugins/module_utils/argspec.py b/ansible_collections/community/crypto/plugins/module_utils/argspec.py
new file mode 100644
index 000000000..e583609dd
--- /dev/null
+++ b/ansible_collections/community/crypto/plugins/module_utils/argspec.py
@@ -0,0 +1,75 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright (c) 2020, Felix Fontein <felix@fontein.de>
+# 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
+
+
+from ansible.module_utils.basic import AnsibleModule
+
+
+def _ensure_list(value):
+ if value is None:
+ return []
+ return list(value)
+
+
+class ArgumentSpec:
+ def __init__(self, argument_spec=None, mutually_exclusive=None, required_together=None, required_one_of=None, required_if=None, required_by=None):
+ self.argument_spec = argument_spec or {}
+ self.mutually_exclusive = _ensure_list(mutually_exclusive)
+ self.required_together = _ensure_list(required_together)
+ self.required_one_of = _ensure_list(required_one_of)
+ self.required_if = _ensure_list(required_if)
+ self.required_by = required_by or {}
+
+ def update_argspec(self, **kwargs):
+ self.argument_spec.update(kwargs)
+ return self
+
+ def update(self, mutually_exclusive=None, required_together=None, required_one_of=None, required_if=None, required_by=None):
+ if mutually_exclusive:
+ self.mutually_exclusive.extend(mutually_exclusive)
+ if required_together:
+ self.required_together.extend(required_together)
+ if required_one_of:
+ self.required_one_of.extend(required_one_of)
+ if required_if:
+ self.required_if.extend(required_if)
+ if required_by:
+ for k, v in required_by.items():
+ if k in self.required_by:
+ v = list(self.required_by[k]) + list(v)
+ self.required_by[k] = v
+ return self
+
+ def merge(self, other):
+ self.update_argspec(**other.argument_spec)
+ self.update(
+ mutually_exclusive=other.mutually_exclusive,
+ required_together=other.required_together,
+ required_one_of=other.required_one_of,
+ required_if=other.required_if,
+ required_by=other.required_by,
+ )
+ return self
+
+ def create_ansible_module_helper(self, clazz, args, **kwargs):
+ return clazz(
+ *args,
+ argument_spec=self.argument_spec,
+ mutually_exclusive=self.mutually_exclusive,
+ required_together=self.required_together,
+ required_one_of=self.required_one_of,
+ required_if=self.required_if,
+ required_by=self.required_by,
+ **kwargs)
+
+ def create_ansible_module(self, **kwargs):
+ return self.create_ansible_module_helper(AnsibleModule, (), **kwargs)
+
+
+__all__ = ('ArgumentSpec', )
diff --git a/ansible_collections/community/crypto/plugins/module_utils/crypto/math.py b/ansible_collections/community/crypto/plugins/module_utils/crypto/math.py
index f56f22d33..1ec43e9f2 100644
--- a/ansible_collections/community/crypto/plugins/module_utils/crypto/math.py
+++ b/ansible_collections/community/crypto/plugins/module_utils/crypto/math.py
@@ -42,9 +42,18 @@ def quick_is_not_prime(n):
that we could not detect quickly whether it is not prime.
'''
if n <= 2:
- return True
+ return n < 2
# The constant in the next line is the product of all primes < 200
- if simple_gcd(n, 7799922041683461553249199106329813876687996789903550945093032474868511536164700810) > 1:
+ prime_product = 7799922041683461553249199106329813876687996789903550945093032474868511536164700810
+ gcd = simple_gcd(n, prime_product)
+ if gcd > 1:
+ if n < 200 and gcd == n:
+ # Explicitly check for all primes < 200
+ return n not in (
+ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83,
+ 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179,
+ 181, 191, 193, 197, 199,
+ )
return True
# TODO: maybe do some iterations of Miller-Rabin to increase confidence
# (https://en.wikipedia.org/wiki/Miller%E2%80%93Rabin_primality_test)
@@ -101,16 +110,27 @@ if sys.version_info[0] >= 3:
def _convert_int_to_bytes(count, no):
return no.to_bytes(count, byteorder='big')
+ def _convert_bytes_to_int(data):
+ return int.from_bytes(data, byteorder='big', signed=False)
+
def _to_hex(no):
return hex(no)[2:]
else:
# Python 2
def _convert_int_to_bytes(count, n):
+ if n == 0 and count == 0:
+ return ''
h = '%x' % n
if len(h) > 2 * count:
raise Exception('Number {1} needs more than {0} bytes!'.format(count, n))
return ('0' * (2 * count - len(h)) + h).decode('hex')
+ def _convert_bytes_to_int(data):
+ v = 0
+ for x in data:
+ v = (v << 8) | ord(x)
+ return v
+
def _to_hex(no):
return '%x' % no
@@ -144,3 +164,10 @@ def convert_int_to_hex(no, digits=None):
if digits is not None and len(value) < digits:
value = '0' * (digits - len(value)) + value
return value
+
+
+def convert_bytes_to_int(data):
+ """
+ Convert a byte string to an unsigned integer in network byte order.
+ """
+ return _convert_bytes_to_int(data)
diff --git a/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/certificate.py b/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/certificate.py
index 7bc93d934..595748fb9 100644
--- a/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/certificate.py
+++ b/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/certificate.py
@@ -15,9 +15,9 @@ import traceback
from ansible.module_utils import six
from ansible.module_utils.basic import missing_required_lib
-from ansible_collections.community.crypto.plugins.module_utils.version import LooseVersion
+from ansible_collections.community.crypto.plugins.module_utils.argspec import ArgumentSpec
-from ansible_collections.community.crypto.plugins.module_utils.crypto.module_backends.common import ArgumentSpec
+from ansible_collections.community.crypto.plugins.module_utils.version import LooseVersion
from ansible_collections.community.crypto.plugins.module_utils.crypto.basic import (
OpenSSLObjectError,
diff --git a/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/certificate_entrust.py b/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/certificate_entrust.py
index 7dc4641e1..37351daeb 100644
--- a/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/certificate_entrust.py
+++ b/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/certificate_entrust.py
@@ -18,8 +18,6 @@ from ansible_collections.community.crypto.plugins.module_utils.ecs.api import EC
from ansible_collections.community.crypto.plugins.module_utils.crypto.support import (
load_certificate,
- get_now_datetime,
- get_relative_time_option,
)
from ansible_collections.community.crypto.plugins.module_utils.crypto.cryptography_support import (
@@ -34,6 +32,11 @@ from ansible_collections.community.crypto.plugins.module_utils.crypto.module_bac
CertificateProvider,
)
+from ansible_collections.community.crypto.plugins.module_utils.time import (
+ get_now_datetime,
+ get_relative_time_option,
+)
+
try:
from cryptography.x509.oid import NameOID
except ImportError:
@@ -44,7 +47,12 @@ class EntrustCertificateBackend(CertificateBackend):
def __init__(self, module, backend):
super(EntrustCertificateBackend, self).__init__(module, backend)
self.trackingId = None
- self.notAfter = get_relative_time_option(module.params['entrust_not_after'], 'entrust_not_after', backend=self.backend)
+ self.notAfter = get_relative_time_option(
+ module.params['entrust_not_after'],
+ 'entrust_not_after',
+ backend=self.backend,
+ with_timezone=CRYPTOGRAPHY_TIMEZONE,
+ )
if self.csr_content is None and self.csr_path is None:
raise CertificateError(
diff --git a/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/certificate_info.py b/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/certificate_info.py
index 5db6c3586..b612f8b18 100644
--- a/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/certificate_info.py
+++ b/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/certificate_info.py
@@ -23,7 +23,6 @@ from ansible_collections.community.crypto.plugins.module_utils.version import Lo
from ansible_collections.community.crypto.plugins.module_utils.crypto.support import (
load_certificate,
get_fingerprint_of_bytes,
- get_now_datetime,
)
from ansible_collections.community.crypto.plugins.module_utils.crypto.cryptography_support import (
@@ -40,6 +39,10 @@ from ansible_collections.community.crypto.plugins.module_utils.crypto.module_bac
get_publickey_info,
)
+from ansible_collections.community.crypto.plugins.module_utils.time import (
+ get_now_datetime,
+)
+
MINIMAL_CRYPTOGRAPHY_VERSION = '1.6'
CRYPTOGRAPHY_IMP_ERR = None
diff --git a/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/certificate_ownca.py b/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/certificate_ownca.py
index 4d312e6b7..bd4860dff 100644
--- a/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/certificate_ownca.py
+++ b/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/certificate_ownca.py
@@ -22,11 +22,11 @@ from ansible_collections.community.crypto.plugins.module_utils.crypto.basic impo
from ansible_collections.community.crypto.plugins.module_utils.crypto.support import (
load_privatekey,
load_certificate,
- get_relative_time_option,
select_message_digest,
)
from ansible_collections.community.crypto.plugins.module_utils.crypto.cryptography_support import (
+ CRYPTOGRAPHY_TIMEZONE,
cryptography_compare_public_keys,
cryptography_key_needs_digest_for_signing,
cryptography_serial_number_of_cert,
@@ -44,6 +44,10 @@ from ansible_collections.community.crypto.plugins.module_utils.crypto.module_bac
CertificateProvider,
)
+from ansible_collections.community.crypto.plugins.module_utils.time import (
+ get_relative_time_option,
+)
+
try:
import cryptography
from cryptography import x509
@@ -59,8 +63,18 @@ class OwnCACertificateBackendCryptography(CertificateBackend):
self.create_subject_key_identifier = module.params['ownca_create_subject_key_identifier']
self.create_authority_key_identifier = module.params['ownca_create_authority_key_identifier']
- self.notBefore = get_relative_time_option(module.params['ownca_not_before'], 'ownca_not_before', backend=self.backend)
- self.notAfter = get_relative_time_option(module.params['ownca_not_after'], 'ownca_not_after', backend=self.backend)
+ self.notBefore = get_relative_time_option(
+ module.params['ownca_not_before'],
+ 'ownca_not_before',
+ backend=self.backend,
+ with_timezone=CRYPTOGRAPHY_TIMEZONE,
+ )
+ self.notAfter = get_relative_time_option(
+ module.params['ownca_not_after'],
+ 'ownca_not_after',
+ backend=self.backend,
+ with_timezone=CRYPTOGRAPHY_TIMEZONE,
+ )
self.digest = select_message_digest(module.params['ownca_digest'])
self.version = module.params['ownca_version']
self.serial_number = x509.random_serial_number()
diff --git a/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/certificate_selfsigned.py b/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/certificate_selfsigned.py
index edd8d8d77..d7135d355 100644
--- a/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/certificate_selfsigned.py
+++ b/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/certificate_selfsigned.py
@@ -14,11 +14,11 @@ import os
from random import randrange
from ansible_collections.community.crypto.plugins.module_utils.crypto.support import (
- get_relative_time_option,
select_message_digest,
)
from ansible_collections.community.crypto.plugins.module_utils.crypto.cryptography_support import (
+ CRYPTOGRAPHY_TIMEZONE,
cryptography_key_needs_digest_for_signing,
cryptography_serial_number_of_cert,
cryptography_verify_certificate_signature,
@@ -34,6 +34,10 @@ from ansible_collections.community.crypto.plugins.module_utils.crypto.module_bac
CertificateProvider,
)
+from ansible_collections.community.crypto.plugins.module_utils.time import (
+ get_relative_time_option,
+)
+
try:
import cryptography
from cryptography import x509
@@ -48,8 +52,18 @@ class SelfSignedCertificateBackendCryptography(CertificateBackend):
super(SelfSignedCertificateBackendCryptography, self).__init__(module, 'cryptography')
self.create_subject_key_identifier = module.params['selfsigned_create_subject_key_identifier']
- self.notBefore = get_relative_time_option(module.params['selfsigned_not_before'], 'selfsigned_not_before', backend=self.backend)
- self.notAfter = get_relative_time_option(module.params['selfsigned_not_after'], 'selfsigned_not_after', backend=self.backend)
+ self.notBefore = get_relative_time_option(
+ module.params['selfsigned_not_before'],
+ 'selfsigned_not_before',
+ backend=self.backend,
+ with_timezone=CRYPTOGRAPHY_TIMEZONE,
+ )
+ self.notAfter = get_relative_time_option(
+ module.params['selfsigned_not_after'],
+ 'selfsigned_not_after',
+ backend=self.backend,
+ with_timezone=CRYPTOGRAPHY_TIMEZONE,
+ )
self.digest = select_message_digest(module.params['selfsigned_digest'])
self.version = module.params['selfsigned_version']
self.serial_number = x509.random_serial_number()
diff --git a/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/common.py b/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/common.py
index 67f87dd0c..6616249c4 100644
--- a/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/common.py
+++ b/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/common.py
@@ -10,26 +10,19 @@ __metaclass__ = type
from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.community.crypto.plugins.module_utils.argspec import ArgumentSpec as _ArgumentSpec
-class ArgumentSpec:
- def __init__(self, argument_spec, mutually_exclusive=None, required_together=None, required_one_of=None, required_if=None, required_by=None):
- self.argument_spec = argument_spec
- self.mutually_exclusive = mutually_exclusive or []
- self.required_together = required_together or []
- self.required_one_of = required_one_of or []
- self.required_if = required_if or []
- self.required_by = required_by or {}
+class ArgumentSpec(_ArgumentSpec):
def create_ansible_module_helper(self, clazz, args, **kwargs):
- return clazz(
- *args,
- argument_spec=self.argument_spec,
- mutually_exclusive=self.mutually_exclusive,
- required_together=self.required_together,
- required_one_of=self.required_one_of,
- required_if=self.required_if,
- required_by=self.required_by,
- **kwargs)
-
- def create_ansible_module(self, **kwargs):
- return self.create_ansible_module_helper(AnsibleModule, (), **kwargs)
+ result = super(ArgumentSpec, self).create_ansible_module_helper(clazz, args, **kwargs)
+ result.deprecate(
+ "The crypto.module_backends.common module utils is deprecated and will be removed from community.crypto 3.0.0."
+ " Use the argspec module utils from community.crypto instead.",
+ version='3.0.0',
+ collection_name='community.crypto',
+ )
+ return result
+
+
+__all__ = ('AnsibleModule', 'ArgumentSpec')
diff --git a/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/csr.py b/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/csr.py
index 4ab14e527..6ce7e2438 100644
--- a/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/csr.py
+++ b/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/csr.py
@@ -17,6 +17,8 @@ from ansible.module_utils import six
from ansible.module_utils.basic import missing_required_lib
from ansible.module_utils.common.text.converters import to_native, to_text
+from ansible_collections.community.crypto.plugins.module_utils.argspec import ArgumentSpec
+
from ansible_collections.community.crypto.plugins.module_utils.version import LooseVersion
from ansible_collections.community.crypto.plugins.module_utils.crypto.basic import (
@@ -49,8 +51,6 @@ from ansible_collections.community.crypto.plugins.module_utils.crypto.module_bac
get_csr_info,
)
-from ansible_collections.community.crypto.plugins.module_utils.crypto.module_backends.common import ArgumentSpec
-
MINIMAL_CRYPTOGRAPHY_VERSION = '1.3'
diff --git a/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/privatekey.py b/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/privatekey.py
index dc13107b7..36d50ae3c 100644
--- a/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/privatekey.py
+++ b/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/privatekey.py
@@ -17,6 +17,8 @@ from ansible.module_utils import six
from ansible.module_utils.basic import missing_required_lib
from ansible.module_utils.common.text.converters import to_bytes
+from ansible_collections.community.crypto.plugins.module_utils.argspec import ArgumentSpec
+
from ansible_collections.community.crypto.plugins.module_utils.version import LooseVersion
from ansible_collections.community.crypto.plugins.module_utils.crypto.basic import (
@@ -42,8 +44,6 @@ from ansible_collections.community.crypto.plugins.module_utils.crypto.module_bac
get_privatekey_info,
)
-from ansible_collections.community.crypto.plugins.module_utils.crypto.module_backends.common import ArgumentSpec
-
MINIMAL_CRYPTOGRAPHY_VERSION = '1.2.3'
diff --git a/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/privatekey_convert.py b/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/privatekey_convert.py
index fdcc901e0..4a1aca600 100644
--- a/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/privatekey_convert.py
+++ b/ansible_collections/community/crypto/plugins/module_utils/crypto/module_backends/privatekey_convert.py
@@ -15,12 +15,14 @@ from ansible.module_utils import six
from ansible.module_utils.basic import missing_required_lib
from ansible.module_utils.common.text.converters import to_bytes
-from ansible_collections.community.crypto.plugins.module_utils.version import LooseVersion
+from ansible_collections.community.crypto.plugins.module_utils.argspec import ArgumentSpec
from ansible_collections.community.crypto.plugins.module_utils.io import (
load_file,
)
+from ansible_collections.community.crypto.plugins.module_utils.version import LooseVersion
+
from ansible_collections.community.crypto.plugins.module_utils.crypto.basic import (
CRYPTOGRAPHY_HAS_X25519,
CRYPTOGRAPHY_HAS_X448,
@@ -37,8 +39,6 @@ from ansible_collections.community.crypto.plugins.module_utils.crypto.pem import
identify_private_key_format,
)
-from ansible_collections.community.crypto.plugins.module_utils.crypto.module_backends.common import ArgumentSpec
-
MINIMAL_CRYPTOGRAPHY_VERSION = '1.2.3'
diff --git a/ansible_collections/community/crypto/plugins/module_utils/crypto/support.py b/ansible_collections/community/crypto/plugins/module_utils/crypto/support.py
index 8b59a3b70..862f5b8fc 100644
--- a/ansible_collections/community/crypto/plugins/module_utils/crypto/support.py
+++ b/ansible_collections/community/crypto/plugins/module_utils/crypto/support.py
@@ -9,19 +9,25 @@ __metaclass__ = type
import abc
-import datetime
import errno
import hashlib
import os
-import re
from ansible.module_utils import six
-from ansible.module_utils.common.text.converters import to_native, to_bytes
+from ansible.module_utils.common.text.converters import to_bytes
from ansible_collections.community.crypto.plugins.module_utils.crypto.pem import (
identify_pem_format,
)
+from ansible_collections.community.crypto.plugins.module_utils.time import ( # noqa: F401, pylint: disable=unused-import
+ # These imports are for backwards compatibility
+ get_now_datetime,
+ ensure_utc_timezone,
+ convert_relative_to_datetime,
+ get_relative_time_option,
+)
+
try:
from OpenSSL import crypto
HAS_PYOPENSSL = True
@@ -279,86 +285,6 @@ def parse_ordered_name_field(input_list, name_field_name):
return result
-def get_now_datetime(with_timezone):
- if with_timezone:
- return datetime.datetime.now(tz=datetime.timezone.utc)
- return datetime.datetime.utcnow()
-
-
-def ensure_utc_timezone(timestamp):
- if timestamp.tzinfo is not None:
- return timestamp
- return timestamp.astimezone(datetime.timezone.utc)
-
-
-def convert_relative_to_datetime(relative_time_string, with_timezone=False):
- """Get a datetime.datetime or None from a string in the time format described in sshd_config(5)"""
-
- parsed_result = re.match(
- r"^(?P<prefix>[+-])((?P<weeks>\d+)[wW])?((?P<days>\d+)[dD])?((?P<hours>\d+)[hH])?((?P<minutes>\d+)[mM])?((?P<seconds>\d+)[sS]?)?$",
- relative_time_string)
-
- if parsed_result is None or len(relative_time_string) == 1:
- # not matched or only a single "+" or "-"
- return None
-
- offset = datetime.timedelta(0)
- if parsed_result.group("weeks") is not None:
- offset += datetime.timedelta(weeks=int(parsed_result.group("weeks")))
- if parsed_result.group("days") is not None:
- offset += datetime.timedelta(days=int(parsed_result.group("days")))
- if parsed_result.group("hours") is not None:
- offset += datetime.timedelta(hours=int(parsed_result.group("hours")))
- if parsed_result.group("minutes") is not None:
- offset += datetime.timedelta(
- minutes=int(parsed_result.group("minutes")))
- if parsed_result.group("seconds") is not None:
- offset += datetime.timedelta(
- seconds=int(parsed_result.group("seconds")))
-
- now = get_now_datetime(with_timezone=with_timezone)
- if parsed_result.group("prefix") == "+":
- return now + offset
- else:
- return now - offset
-
-
-def get_relative_time_option(input_string, input_name, backend='cryptography', with_timezone=False):
- """Return an absolute timespec if a relative timespec or an ASN1 formatted
- string is provided.
-
- The return value will be a datetime object for the cryptography backend,
- and a ASN1 formatted string for the pyopenssl backend."""
- result = to_native(input_string)
- if result is None:
- raise OpenSSLObjectError(
- 'The timespec "%s" for %s is not valid' %
- input_string, input_name)
- # Relative time
- if result.startswith("+") or result.startswith("-"):
- result_datetime = convert_relative_to_datetime(result, with_timezone=with_timezone)
- if backend == 'pyopenssl':
- return result_datetime.strftime("%Y%m%d%H%M%SZ")
- elif backend == 'cryptography':
- return result_datetime
- # Absolute time
- if backend == 'cryptography':
- for date_fmt in ['%Y%m%d%H%M%SZ', '%Y%m%d%H%MZ', '%Y%m%d%H%M%S%z', '%Y%m%d%H%M%z']:
- try:
- res = datetime.datetime.strptime(result, date_fmt)
- except ValueError:
- pass
- else:
- if with_timezone:
- res = res.astimezone(datetime.timezone.utc)
- return res
-
- raise OpenSSLObjectError(
- 'The time spec "%s" for %s is invalid' %
- (input_string, input_name)
- )
-
-
def select_message_digest(digest_string):
digest = None
if digest_string == 'sha256':
diff --git a/ansible_collections/community/crypto/plugins/module_utils/openssh/certificate.py b/ansible_collections/community/crypto/plugins/module_utils/openssh/certificate.py
index f59766651..8efb2ad9c 100644
--- a/ansible_collections/community/crypto/plugins/module_utils/openssh/certificate.py
+++ b/ansible_collections/community/crypto/plugins/module_utils/openssh/certificate.py
@@ -31,11 +31,15 @@ from hashlib import sha256
from ansible.module_utils import six
from ansible.module_utils.common.text.converters import to_text
-from ansible_collections.community.crypto.plugins.module_utils.crypto.support import convert_relative_to_datetime
from ansible_collections.community.crypto.plugins.module_utils.openssh.utils import (
OpensshParser,
_OpensshWriter,
)
+from ansible_collections.community.crypto.plugins.module_utils.time import (
+ add_or_remove_timezone as _add_or_remove_timezone,
+ convert_relative_to_datetime,
+ UTC as _UTC,
+)
# See https://cvsweb.openbsd.org/src/usr.bin/ssh/PROTOCOL.certkeys?annotate=HEAD
_USER_TYPE = 1
@@ -66,14 +70,8 @@ _ECDSA_CURVE_IDENTIFIERS_LOOKUP = {
_USE_TIMEZONE = sys.version_info >= (3, 6)
-def _ensure_utc_timezone_if_use_timezone(value):
- if not _USE_TIMEZONE or value.tzinfo is not None:
- return value
- return value.astimezone(_datetime.timezone.utc)
-
-
-_ALWAYS = _ensure_utc_timezone_if_use_timezone(datetime(1970, 1, 1))
-_FOREVER = datetime(9999, 12, 31, 23, 59, 59, 999999, _datetime.timezone.utc) if _USE_TIMEZONE else datetime.max
+_ALWAYS = _add_or_remove_timezone(datetime(1970, 1, 1), with_timezone=_USE_TIMEZONE)
+_FOREVER = datetime(9999, 12, 31, 23, 59, 59, 999999, _UTC) if _USE_TIMEZONE else datetime.max
_CRITICAL_OPTIONS = (
'force-command',
@@ -198,7 +196,7 @@ class OpensshCertificateTimeParameters(object):
else:
for time_format in ("%Y-%m-%d", "%Y-%m-%d %H:%M:%S", "%Y-%m-%dT%H:%M:%S"):
try:
- result = _ensure_utc_timezone_if_use_timezone(datetime.strptime(time_string, time_format))
+ result = _add_or_remove_timezone(datetime.strptime(time_string, time_format), with_timezone=_USE_TIMEZONE)
except ValueError:
pass
if result is None:
diff --git a/ansible_collections/community/crypto/plugins/module_utils/time.py b/ansible_collections/community/crypto/plugins/module_utils/time.py
new file mode 100644
index 000000000..4adc4620e
--- /dev/null
+++ b/ansible_collections/community/crypto/plugins/module_utils/time.py
@@ -0,0 +1,171 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright (c) 2024, Felix Fontein <felix@fontein.de>
+# 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
+
+
+import datetime
+import re
+import sys
+
+from ansible.module_utils.common.text.converters import to_native
+
+from ansible_collections.community.crypto.plugins.module_utils.crypto.basic import (
+ OpenSSLObjectError,
+)
+
+
+try:
+ UTC = datetime.timezone.utc
+except AttributeError:
+ _DURATION_ZERO = datetime.timedelta(0)
+
+ class _UTCClass(datetime.tzinfo):
+ def utcoffset(self, dt):
+ return _DURATION_ZERO
+
+ def dst(self, dt):
+ return _DURATION_ZERO
+
+ def tzname(self, dt):
+ return 'UTC'
+
+ def fromutc(self, dt):
+ return dt
+
+ def __repr__(self):
+ return 'UTC'
+
+ UTC = _UTCClass()
+
+
+def get_now_datetime(with_timezone):
+ if with_timezone:
+ return datetime.datetime.now(tz=UTC)
+ return datetime.datetime.utcnow()
+
+
+def ensure_utc_timezone(timestamp):
+ if timestamp.tzinfo is UTC:
+ return timestamp
+ if timestamp.tzinfo is None:
+ # We assume that naive datetime objects use timezone UTC!
+ return timestamp.replace(tzinfo=UTC)
+ return timestamp.astimezone(UTC)
+
+
+def remove_timezone(timestamp):
+ # Convert to native datetime object
+ if timestamp.tzinfo is None:
+ return timestamp
+ if timestamp.tzinfo is not UTC:
+ timestamp = timestamp.astimezone(UTC)
+ return timestamp.replace(tzinfo=None)
+
+
+def add_or_remove_timezone(timestamp, with_timezone):
+ return ensure_utc_timezone(timestamp) if with_timezone else remove_timezone(timestamp)
+
+
+if sys.version_info < (3, 3):
+ def get_epoch_seconds(timestamp):
+ epoch = datetime.datetime(1970, 1, 1, tzinfo=UTC if timestamp.tzinfo is not None else None)
+ delta = timestamp - epoch
+ try:
+ return delta.total_seconds()
+ except AttributeError:
+ # Python 2.6 and earlier: total_seconds() does not yet exist, so we use the formula from
+ # https://docs.python.org/2/library/datetime.html#datetime.timedelta.total_seconds
+ return (delta.microseconds + (delta.seconds + delta.days * 24 * 3600) * 10**6) / 10**6
+else:
+ def get_epoch_seconds(timestamp):
+ return timestamp.timestamp()
+
+
+def from_epoch_seconds(timestamp, with_timezone):
+ if with_timezone:
+ return datetime.datetime.fromtimestamp(timestamp, UTC)
+ return datetime.datetime.utcfromtimestamp(timestamp)
+
+
+def convert_relative_to_datetime(relative_time_string, with_timezone=False, now=None):
+ """Get a datetime.datetime or None from a string in the time format described in sshd_config(5)"""
+
+ parsed_result = re.match(
+ r"^(?P<prefix>[+-])((?P<weeks>\d+)[wW])?((?P<days>\d+)[dD])?((?P<hours>\d+)[hH])?((?P<minutes>\d+)[mM])?((?P<seconds>\d+)[sS]?)?$",
+ relative_time_string)
+
+ if parsed_result is None or len(relative_time_string) == 1:
+ # not matched or only a single "+" or "-"
+ return None
+
+ offset = datetime.timedelta(0)
+ if parsed_result.group("weeks") is not None:
+ offset += datetime.timedelta(weeks=int(parsed_result.group("weeks")))
+ if parsed_result.group("days") is not None:
+ offset += datetime.timedelta(days=int(parsed_result.group("days")))
+ if parsed_result.group("hours") is not None:
+ offset += datetime.timedelta(hours=int(parsed_result.group("hours")))
+ if parsed_result.group("minutes") is not None:
+ offset += datetime.timedelta(
+ minutes=int(parsed_result.group("minutes")))
+ if parsed_result.group("seconds") is not None:
+ offset += datetime.timedelta(
+ seconds=int(parsed_result.group("seconds")))
+
+ if now is None:
+ now = get_now_datetime(with_timezone=with_timezone)
+ else:
+ now = add_or_remove_timezone(now, with_timezone=with_timezone)
+
+ if parsed_result.group("prefix") == "+":
+ return now + offset
+ else:
+ return now - offset
+
+
+def get_relative_time_option(input_string, input_name, backend='cryptography', with_timezone=False, now=None):
+ """Return an absolute timespec if a relative timespec or an ASN1 formatted
+ string is provided.
+
+ The return value will be a datetime object for the cryptography backend,
+ and a ASN1 formatted string for the pyopenssl backend."""
+ result = to_native(input_string)
+ if result is None:
+ raise OpenSSLObjectError(
+ 'The timespec "%s" for %s is not valid' %
+ input_string, input_name)
+ # Relative time
+ if result.startswith("+") or result.startswith("-"):
+ result_datetime = convert_relative_to_datetime(result, with_timezone=with_timezone, now=now)
+ if backend == 'pyopenssl':
+ return result_datetime.strftime("%Y%m%d%H%M%SZ")
+ elif backend == 'cryptography':
+ return result_datetime
+ # Absolute time
+ if backend == 'pyopenssl':
+ return input_string
+ elif backend == 'cryptography':
+ for date_fmt, length in [
+ ('%Y%m%d%H%M%SZ', 15), # this also parses '202401020304Z', but as datetime(2024, 1, 2, 3, 0, 4)
+ ('%Y%m%d%H%MZ', 13),
+ ('%Y%m%d%H%M%S%z', 14 + 5), # this also parses '202401020304+0000', but as datetime(2024, 1, 2, 3, 0, 4, tzinfo=...)
+ ('%Y%m%d%H%M%z', 12 + 5),
+ ]:
+ if len(result) != length:
+ continue
+ try:
+ res = datetime.datetime.strptime(result, date_fmt)
+ except ValueError:
+ pass
+ else:
+ return add_or_remove_timezone(res, with_timezone=with_timezone)
+
+ raise OpenSSLObjectError(
+ 'The time spec "%s" for %s is invalid' %
+ (input_string, input_name)
+ )
diff --git a/ansible_collections/community/crypto/plugins/modules/acme_account.py b/ansible_collections/community/crypto/plugins/modules/acme_account.py
index 1e8d64a57..960bad313 100644
--- a/ansible_collections/community/crypto/plugins/modules/acme_account.py
+++ b/ansible_collections/community/crypto/plugins/modules/acme_account.py
@@ -37,7 +37,8 @@ seealso:
- module: community.crypto.acme_inspect
description: Allows to debug problems.
extends_documentation_fragment:
- - community.crypto.acme
+ - community.crypto.acme.basic
+ - community.crypto.acme.account
- community.crypto.attributes
- community.crypto.attributes.actiongroup_acme
attributes:
@@ -169,11 +170,9 @@ account_uri:
import base64
-from ansible.module_utils.basic import AnsibleModule
-
from ansible_collections.community.crypto.plugins.module_utils.acme.acme import (
create_backend,
- get_default_argspec,
+ create_default_argspec,
ACMEClient,
)
@@ -188,8 +187,8 @@ from ansible_collections.community.crypto.plugins.module_utils.acme.errors impor
def main():
- argument_spec = get_default_argspec()
- argument_spec.update(dict(
+ argument_spec = create_default_argspec()
+ argument_spec.update_argspec(
terms_agreed=dict(type='bool', default=False),
state=dict(type='str', required=True, choices=['absent', 'present', 'changed_key']),
allow_creation=dict(type='bool', default=True),
@@ -202,14 +201,9 @@ def main():
alg=dict(type='str', required=True, choices=['HS256', 'HS384', 'HS512']),
key=dict(type='str', required=True, no_log=True),
))
- ))
- module = AnsibleModule(
- argument_spec=argument_spec,
- required_one_of=(
- ['account_key_src', 'account_key_content'],
- ),
+ )
+ argument_spec.update(
mutually_exclusive=(
- ['account_key_src', 'account_key_content'],
['new_account_key_src', 'new_account_key_content'],
),
required_if=(
@@ -217,8 +211,8 @@ def main():
# new_account_key_src and new_account_key_content are specified
['state', 'changed_key', ['new_account_key_src', 'new_account_key_content'], True],
),
- supports_check_mode=True,
)
+ module = argument_spec.create_ansible_module(supports_check_mode=True)
backend = create_backend(module, True)
if module.params['external_account_binding']:
diff --git a/ansible_collections/community/crypto/plugins/modules/acme_account_info.py b/ansible_collections/community/crypto/plugins/modules/acme_account_info.py
index ac4617c90..33313fe75 100644
--- a/ansible_collections/community/crypto/plugins/modules/acme_account_info.py
+++ b/ansible_collections/community/crypto/plugins/modules/acme_account_info.py
@@ -25,7 +25,8 @@ notes:
- "This module was called C(acme_account_facts) before Ansible 2.8. The usage
did not change."
extends_documentation_fragment:
- - community.crypto.acme
+ - community.crypto.acme.basic
+ - community.crypto.acme.account
- community.crypto.attributes
- community.crypto.attributes.actiongroup_acme
- community.crypto.attributes.info_module
@@ -213,11 +214,9 @@ order_uris:
version_added: 1.5.0
'''
-from ansible.module_utils.basic import AnsibleModule
-
from ansible_collections.community.crypto.plugins.module_utils.acme.acme import (
create_backend,
- get_default_argspec,
+ create_default_argspec,
ACMEClient,
)
@@ -270,20 +269,11 @@ def get_order(client, order_url):
def main():
- argument_spec = get_default_argspec()
- argument_spec.update(dict(
+ argument_spec = create_default_argspec()
+ argument_spec.update_argspec(
retrieve_orders=dict(type='str', default='ignore', choices=['ignore', 'url_list', 'object_list']),
- ))
- module = AnsibleModule(
- argument_spec=argument_spec,
- required_one_of=(
- ['account_key_src', 'account_key_content'],
- ),
- mutually_exclusive=(
- ['account_key_src', 'account_key_content'],
- ),
- supports_check_mode=True,
)
+ module = argument_spec.create_ansible_module(supports_check_mode=True)
backend = create_backend(module, True)
try:
diff --git a/ansible_collections/community/crypto/plugins/modules/acme_ari_info.py b/ansible_collections/community/crypto/plugins/modules/acme_ari_info.py
new file mode 100644
index 000000000..7783236f0
--- /dev/null
+++ b/ansible_collections/community/crypto/plugins/modules/acme_ari_info.py
@@ -0,0 +1,142 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2018 Felix Fontein <felix@fontein.de>
+# 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: acme_ari_info
+author: "Felix Fontein (@felixfontein)"
+version_added: 2.20.0
+short_description: Retrieves ACME Renewal Information (ARI) for a certificate
+description:
+ - "Allows to retrieve renewal information on a certificate obtained with the
+ L(ACME protocol,https://tools.ietf.org/html/rfc8555)."
+ - "This module only works with the ACME v2 protocol, and requires the ACME server
+ to support the ARI extension (U(https://datatracker.ietf.org/doc/draft-ietf-acme-ari/)).
+ This module implements version 3 of the ARI draft."
+extends_documentation_fragment:
+ - community.crypto.acme.basic
+ - community.crypto.acme.no_account
+ - community.crypto.attributes
+ - community.crypto.attributes.info_module
+options:
+ certificate_path:
+ description:
+ - A path to the X.509 certificate to request information for.
+ - Exactly one of O(certificate_path) and O(certificate_content) must be provided.
+ type: path
+ certificate_content:
+ description:
+ - The content of the X.509 certificate to request information for.
+ - Exactly one of O(certificate_path) and O(certificate_content) must be provided.
+ type: str
+seealso:
+ - module: community.crypto.acme_certificate
+ description: Allows to obtain a certificate using the ACME protocol
+ - module: community.crypto.acme_certificate_revoke
+ description: Allows to revoke a certificate using the ACME protocol
+'''
+
+EXAMPLES = '''
+- name: Retrieve renewal information for a certificate
+ community.crypto.acme_ari_info:
+ certificate_path: /etc/httpd/ssl/sample.com.crt
+ register: cert_data
+
+- name: Show the certificate renewal information
+ ansible.builtin.debug:
+ var: cert_data.renewal_info
+'''
+
+RETURN = '''
+renewal_info:
+ description: The ARI renewal info object (U(https://www.ietf.org/archive/id/draft-ietf-acme-ari-03.html#section-4.2)).
+ returned: success
+ type: dict
+ contains:
+ suggestedWindow:
+ description:
+ - Describes the window during which the certificate should be renewed.
+ type: dict
+ returned: always
+ contains:
+ start:
+ description:
+ - The start of the window during which the certificate should be renewed.
+ - The format is specified in L(RFC 3339,https://www.rfc-editor.org/info/rfc3339).
+ returned: always
+ type: str
+ sample: '2021-01-03T00:00:00Z'
+ end:
+ description:
+ - The end of the window during which the certificate should be renewed.
+ - The format is specified in L(RFC 3339,https://www.rfc-editor.org/info/rfc3339).
+ returned: always
+ type: str
+ sample: '2021-01-03T00:00:00Z'
+ explanationURL:
+ description:
+ - A URL pointing to a page which may explain why the suggested renewal window is what it is.
+ - For example, it may be a page explaining the CA's dynamic load-balancing strategy, or a
+ page documenting which certificates are affected by a mass revocation event. Should be shown
+ to the user.
+ returned: depends on the ACME server
+ type: str
+ sample: https://example.com/docs/ari
+ retryAfter:
+ description:
+ - A timestamp before the next retry to ask for this information should not be made.
+ returned: depends on the ACME server
+ type: str
+ sample: '2024-04-29T01:17:10.236921+00:00'
+'''
+
+from ansible_collections.community.crypto.plugins.module_utils.acme.acme import (
+ create_backend,
+ create_default_argspec,
+ ACMEClient,
+)
+
+from ansible_collections.community.crypto.plugins.module_utils.acme.errors import ModuleFailException
+
+
+def main():
+ argument_spec = create_default_argspec(with_account=False)
+ argument_spec.update_argspec(
+ certificate_path=dict(type='path'),
+ certificate_content=dict(type='str'),
+ )
+ argument_spec.update(
+ required_one_of=(
+ ['certificate_path', 'certificate_content'],
+ ),
+ mutually_exclusive=(
+ ['certificate_path', 'certificate_content'],
+ ),
+ )
+ module = argument_spec.create_ansible_module(supports_check_mode=True)
+ backend = create_backend(module, True)
+
+ try:
+ client = ACMEClient(module, backend)
+ if not client.directory.has_renewal_info_endpoint():
+ module.fail_json(msg='The ACME endpoint does not support ACME Renewal Information retrieval')
+ renewal_info = client.get_renewal_info(
+ cert_filename=module.params['certificate_path'],
+ cert_content=module.params['certificate_content'],
+ include_retry_after=True,
+ )
+ module.exit_json(renewal_info=renewal_info)
+ except ModuleFailException as e:
+ e.do_fail(module)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/community/crypto/plugins/modules/acme_certificate.py b/ansible_collections/community/crypto/plugins/modules/acme_certificate.py
index 21a6d6ae9..8729996c0 100644
--- a/ansible_collections/community/crypto/plugins/modules/acme_certificate.py
+++ b/ansible_collections/community/crypto/plugins/modules/acme_certificate.py
@@ -58,7 +58,7 @@ seealso:
link: https://tools.ietf.org/html/rfc8555
- name: ACME TLS ALPN Challenge Extension
description: The specification of the V(tls-alpn-01) challenge (RFC 8737).
- link: https://www.rfc-editor.org/rfc/rfc8737.html-05
+ link: https://www.rfc-editor.org/rfc/rfc8737.html
- module: community.crypto.acme_challenge_cert_helper
description: Helps preparing V(tls-alpn-01) challenges.
- module: community.crypto.openssl_privatekey
@@ -77,8 +77,12 @@ seealso:
description: Allows to create, modify or delete an ACME account.
- module: community.crypto.acme_inspect
description: Allows to debug problems.
+ - module: community.crypto.acme_certificate_deactivate_authz
+ description: Allows to deactivate (invalidate) ACME v2 orders.
extends_documentation_fragment:
- - community.crypto.acme
+ - community.crypto.acme.basic
+ - community.crypto.acme.account
+ - community.crypto.acme.certificate
- community.crypto.attributes
- community.crypto.attributes.files
- community.crypto.attributes.actiongroup_acme
@@ -138,32 +142,8 @@ options:
- 'tls-alpn-01'
- 'no challenge'
csr:
- description:
- - "File containing the CSR for the new certificate."
- - "Can be created with M(community.crypto.openssl_csr) or C(openssl req ...)."
- - "The CSR may contain multiple Subject Alternate Names, but each one
- will lead to an individual challenge that must be fulfilled for the
- CSR to be signed."
- - "I(Note): the private key used to create the CSR I(must not) be the
- account key. This is a bad idea from a security point of view, and
- the CA should not accept the CSR. The ACME server should return an
- error in this case."
- - Precisely one of O(csr) or O(csr_content) must be specified.
- type: path
aliases: ['src']
csr_content:
- description:
- - "Content of the CSR for the new certificate."
- - "Can be created with M(community.crypto.openssl_csr_pipe) or C(openssl req ...)."
- - "The CSR may contain multiple Subject Alternate Names, but each one
- will lead to an individual challenge that must be fulfilled for the
- CSR to be signed."
- - "I(Note): the private key used to create the CSR I(must not) be the
- account key. This is a bad idea from a security point of view, and
- the CA should not accept the CSR. The ACME server should return an
- error in this case."
- - Precisely one of O(csr) or O(csr_content) must be specified.
- type: str
version_added: 1.2.0
data:
description:
@@ -292,6 +272,32 @@ options:
- "The identifier must be of the form
V(C4:A7:B1:A4:7B:2C:71:FA:DB:E1:4B:90:75:FF:C4:15:60:85:89:10)."
type: str
+ include_renewal_cert_id:
+ description:
+ - Determines whether to request renewal of an existing certificate according to
+ L(the ACME ARI draft 3, https://www.ietf.org/archive/id/draft-ietf-acme-ari-03.html#section-5).
+ - This is only used when the certificate specified in O(dest) or O(fullchain_dest) already exists.
+ - V(never) never sends the certificate ID of the certificate to renew. V(always) will always send it.
+ - V(when_ari_supported) only sends the certificate ID if the ARI endpoint is found in the ACME directory.
+ - Generally you should use V(when_ari_supported) if you know that the ACME service supports a compatible
+ draft (or final version, once it is out) of the ARI extension. V(always) should never be necessary.
+ If you are not sure, or if you receive strange errors on invalid C(replaces) values in order objects,
+ use V(never), which also happens to be the default.
+ - ACME servers might refuse to create new orders with C(replaces) for certificates that already have an
+ existing order. This can happen if this module is used to create an order, and then the playbook/role
+ fails in case the challenges cannot be set up. If the playbook/role does not record the order data to
+ continue with the existing order, but tries to create a new one on the next run, creating the new order
+ might fail. For this reason, this option should only be set to a value different from V(never) if the
+ role/playbook using it keeps track of order data accross restarts, or if it takes care to deactivate
+ orders whose processing is aborted. Orders can be deactivated with the
+ M(community.crypto.acme_certificate_deactivate_authz) module.
+ type: str
+ choices:
+ - never
+ - when_ari_supported
+ - always
+ default: never
+ version_added: 2.20.0
'''
EXAMPLES = r'''
@@ -375,7 +381,7 @@ EXAMPLES = r'''
# state: present
# wait: true
# # Note: route53 requires TXT entries to be enclosed in quotes
-# value: "{{ sample_com_challenge.challenge_data['sample.com']['dns-01'].resource_value | regex_replace('^(.*)$', '\"\\1\"') }}"
+# value: "{{ sample_com_challenge.challenge_data['sample.com']['dns-01'].resource_value | community.dns.quote_txt(always_quote=true) }}"
# when: sample_com_challenge is changed and 'sample.com' in sample_com_challenge.challenge_data
#
# Alternative way:
@@ -390,7 +396,7 @@ EXAMPLES = r'''
# wait: true
# # Note: item.value is a list of TXT entries, and route53
# # requires every entry to be enclosed in quotes
-# value: "{{ item.value | map('regex_replace', '^(.*)$', '\"\\1\"' ) | list }}"
+# value: "{{ item.value | map('community.dns.quote_txt', always_quote=true) | list }}"
# loop: "{{ sample_com_challenge.challenge_data_dns | dict2items }}"
# when: sample_com_challenge is changed
@@ -446,39 +452,55 @@ challenge_data:
- Per identifier / challenge type challenge data.
- Since Ansible 2.8.5, only challenges which are not yet valid are returned.
returned: changed
- type: list
- elements: dict
+ type: dict
contains:
- resource:
- description: The challenge resource that must be created for validation.
- returned: changed
- type: str
- sample: .well-known/acme-challenge/evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ-PCt92wr-oA
- resource_original:
- description:
- - The original challenge resource including type identifier for V(tls-alpn-01)
- challenges.
- returned: changed and O(challenge) is V(tls-alpn-01)
- type: str
- sample: DNS:example.com
- resource_value:
+ identifier:
description:
- - The value the resource has to produce for the validation.
- - For V(http-01) and V(dns-01) challenges, the value can be used as-is.
- - "For V(tls-alpn-01) challenges, note that this return value contains a
- Base64 encoded version of the correct binary blob which has to be put
- into the acmeValidation x509 extension; see
- U(https://www.rfc-editor.org/rfc/rfc8737.html#section-3)
- for details. To do this, you might need the P(ansible.builtin.b64decode#filter) Jinja filter
- to extract the binary blob from this return value."
+ - For every identifier, provides a dictionary of challenge types mapping to challenge data.
+ - The keys in this dictionary are the identifiers. C(identifier) is a placeholder used in the documentation.
+ - Note that the keys are not valid Jinja2 identifiers.
returned: changed
- type: str
- sample: IlirfxKKXA...17Dt3juxGJ-PCt92wr-oA
- record:
- description: The full DNS record's name for the challenge.
- returned: changed and challenge is V(dns-01)
- type: str
- sample: _acme-challenge.example.com
+ type: dict
+ contains:
+ challenge-type:
+ description:
+ - Data for every challenge type.
+ - The keys in this dictionary are the challenge types. C(challenge-type) is a placeholder used in the documentation.
+ Possible keys are V(http-01), V(dns-01), and V(tls-alpn-01).
+ - Note that the keys are not valid Jinja2 identifiers.
+ returned: changed
+ type: dict
+ contains:
+ resource:
+ description: The challenge resource that must be created for validation.
+ returned: changed
+ type: str
+ sample: .well-known/acme-challenge/evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ-PCt92wr-oA
+ resource_original:
+ description:
+ - The original challenge resource including type identifier for V(tls-alpn-01)
+ challenges.
+ returned: changed and O(challenge) is V(tls-alpn-01)
+ type: str
+ sample: DNS:example.com
+ resource_value:
+ description:
+ - The value the resource has to produce for the validation.
+ - For V(http-01) and V(dns-01) challenges, the value can be used as-is.
+ - "For V(tls-alpn-01) challenges, note that this return value contains a
+ Base64 encoded version of the correct binary blob which has to be put
+ into the acmeValidation x509 extension; see
+ U(https://www.rfc-editor.org/rfc/rfc8737.html#section-3)
+ for details. To do this, you might need the P(ansible.builtin.b64decode#filter) Jinja filter
+ to extract the binary blob from this return value."
+ returned: changed
+ type: str
+ sample: IlirfxKKXA...17Dt3juxGJ-PCt92wr-oA
+ record:
+ description: The full DNS record's name for the challenge.
+ returned: changed and challenge is V(dns-01)
+ type: str
+ sample: _acme-challenge.example.com
challenge_data_dns:
description:
- List of TXT values per DNS record, in case challenge is V(dns-01).
@@ -547,11 +569,9 @@ all_chains:
import os
-from ansible.module_utils.basic import AnsibleModule
-
from ansible_collections.community.crypto.plugins.module_utils.acme.acme import (
create_backend,
- get_default_argspec,
+ create_default_argspec,
ACMEClient,
)
@@ -585,6 +605,7 @@ from ansible_collections.community.crypto.plugins.module_utils.acme.orders impor
)
from ansible_collections.community.crypto.plugins.module_utils.acme.utils import (
+ compute_cert_id,
pem_to_der,
)
@@ -621,6 +642,7 @@ class ACMECertificateClient(object):
self.order_uri = self.data.get('order_uri') if self.data else None
self.all_chains = None
self.select_chain_matcher = []
+ self.include_renewal_cert_id = module.params['include_renewal_cert_id']
if self.module.params['select_chain']:
for criterium_idx, criterium in enumerate(self.module.params['select_chain']):
@@ -678,6 +700,15 @@ class ACMECertificateClient(object):
# stored in self.order_uri by the constructor).
return self.order_uri is None
+ def _get_cert_info_or_none(self):
+ if self.module.params.get('dest'):
+ filename = self.module.params['dest']
+ else:
+ filename = self.module.params['fullchain_dest']
+ if not os.path.exists(filename):
+ return None
+ return self.client.backend.get_cert_information(cert_filename=filename)
+
def start_challenges(self):
'''
Create new authorizations for all identifiers of the CSR,
@@ -692,7 +723,19 @@ class ACMECertificateClient(object):
authz = Authorization.create(self.client, identifier_type, identifier)
self.authorizations[authz.combined_identifier] = authz
else:
- self.order = Order.create(self.client, self.identifiers)
+ replaces_cert_id = None
+ if (
+ self.include_renewal_cert_id == 'always' or
+ (self.include_renewal_cert_id == 'when_ari_supported' and self.client.directory.has_renewal_info_endpoint())
+ ):
+ cert_info = self._get_cert_info_or_none()
+ if cert_info is not None:
+ replaces_cert_id = compute_cert_id(
+ self.client.backend,
+ cert_info=cert_info,
+ none_if_required_information_is_missing=True,
+ )
+ self.order = Order.create(self.client, self.identifiers, replaces_cert_id)
self.order_uri = self.order.url
self.order.load_authorizations(self.client)
self.authorizations.update(self.order.authorizations)
@@ -854,15 +897,14 @@ class ACMECertificateClient(object):
def main():
- argument_spec = get_default_argspec()
- argument_spec.update(dict(
+ argument_spec = create_default_argspec(with_certificate=True)
+ argument_spec.argument_spec['csr']['aliases'] = ['src']
+ argument_spec.update_argspec(
modify_account=dict(type='bool', default=True),
account_email=dict(type='str'),
agreement=dict(type='str'),
terms_agreed=dict(type='bool', default=False),
challenge=dict(type='str', default='http-01', choices=['http-01', 'dns-01', 'tls-alpn-01', NO_CHALLENGE]),
- csr=dict(type='path', aliases=['src']),
- csr_content=dict(type='str'),
data=dict(type='dict'),
dest=dict(type='path', aliases=['cert']),
fullchain_dest=dict(type='path', aliases=['fullchain']),
@@ -878,20 +920,14 @@ def main():
subject_key_identifier=dict(type='str'),
authority_key_identifier=dict(type='str'),
)),
- ))
- module = AnsibleModule(
- argument_spec=argument_spec,
- required_one_of=(
- ['account_key_src', 'account_key_content'],
+ include_renewal_cert_id=dict(type='str', choices=['never', 'when_ari_supported', 'always'], default='never'),
+ )
+ argument_spec.update(
+ required_one_of=[
['dest', 'fullchain_dest'],
- ['csr', 'csr_content'],
- ),
- mutually_exclusive=(
- ['account_key_src', 'account_key_content'],
- ['csr', 'csr_content'],
- ),
- supports_check_mode=True,
+ ],
)
+ module = argument_spec.create_ansible_module(supports_check_mode=True)
backend = create_backend(module, False)
try:
diff --git a/ansible_collections/community/crypto/plugins/modules/acme_certificate_deactivate_authz.py b/ansible_collections/community/crypto/plugins/modules/acme_certificate_deactivate_authz.py
new file mode 100644
index 000000000..133f777d6
--- /dev/null
+++ b/ansible_collections/community/crypto/plugins/modules/acme_certificate_deactivate_authz.py
@@ -0,0 +1,119 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2016 Michael Gruener <michael.gruener@chaosmoon.net>
+# 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: acme_certificate_deactivate_authz
+author: "Felix Fontein (@felixfontein)"
+version_added: 2.20.0
+short_description: Deactivate all authz for an ACME v2 order
+description:
+ - "Deactivate all authentication objects (authz) for an ACME v2 order,
+ which effectively deactivates (invalidates) the order itself."
+ - "Authentication objects are bound to an account key and remain valid
+ for a certain amount of time, and can be used to issue certificates
+ without having to re-authenticate the domain. This can be a security
+ concern."
+ - "Another reason to use this module is to deactivate an order whose
+ processing failed when using O(community.crypto.acme_certificate#module:include_renewal_cert_id)."
+seealso:
+ - module: community.crypto.acme_certificate
+extends_documentation_fragment:
+ - community.crypto.acme.basic
+ - community.crypto.acme.account
+ - community.crypto.attributes
+ - community.crypto.attributes.actiongroup_acme
+attributes:
+ check_mode:
+ support: full
+ diff_mode:
+ support: none
+options:
+ order_uri:
+ description:
+ - The ACME v2 order to deactivate.
+ - Can be obtained from RV(community.crypto.acme_certificate#module:order_uri).
+ type: str
+ required: true
+'''
+
+EXAMPLES = r'''
+- name: Deactivate all authzs for an order
+ community.crypto.acme_certificate_deactivate_authz:
+ account_key_content: "{{ account_private_key }}"
+ order_uri: "{{ certificate_result.order_uri }}"
+'''
+
+RETURN = '''#'''
+
+from ansible_collections.community.crypto.plugins.module_utils.acme.acme import (
+ create_backend,
+ create_default_argspec,
+ ACMEClient,
+)
+
+from ansible_collections.community.crypto.plugins.module_utils.acme.account import (
+ ACMEAccount,
+)
+
+from ansible_collections.community.crypto.plugins.module_utils.acme.errors import (
+ ModuleFailException,
+)
+
+from ansible_collections.community.crypto.plugins.module_utils.acme.orders import (
+ Order,
+)
+
+
+def main():
+ argument_spec = create_default_argspec()
+ argument_spec.update_argspec(
+ order_uri=dict(type='str', required=True),
+ )
+ module = argument_spec.create_ansible_module(supports_check_mode=True)
+ if module.params['acme_version'] == 1:
+ module.fail_json('The module does not support acme_version=1')
+
+ backend = create_backend(module, False)
+
+ try:
+ client = ACMEClient(module, backend)
+ account = ACMEAccount(client)
+
+ dummy, account_data = account.setup_account(allow_creation=False)
+ if account_data is None:
+ raise ModuleFailException(msg='Account does not exist or is deactivated.')
+
+ order = Order.from_url(client, module.params['order_uri'])
+ order.load_authorizations(client)
+
+ changed = False
+ for authz in order.authorizations.values():
+ if not authz.can_deactivate():
+ continue
+ changed = True
+ if module.check_mode:
+ continue
+ try:
+ authz.deactivate(client)
+ except Exception:
+ # ignore errors
+ pass
+ if authz.status != 'deactivated':
+ module.warn(warning='Could not deactivate authz object {0}.'.format(authz.url))
+
+ module.exit_json(changed=changed)
+ except ModuleFailException as e:
+ e.do_fail(module)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/community/crypto/plugins/modules/acme_certificate_renewal_info.py b/ansible_collections/community/crypto/plugins/modules/acme_certificate_renewal_info.py
new file mode 100644
index 000000000..1e2b16918
--- /dev/null
+++ b/ansible_collections/community/crypto/plugins/modules/acme_certificate_renewal_info.py
@@ -0,0 +1,245 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2018 Felix Fontein <felix@fontein.de>
+# 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: acme_certificate_renewal_info
+author: "Felix Fontein (@felixfontein)"
+version_added: 2.20.0
+short_description: Determine whether a certificate should be renewed or not
+description:
+ - Uses various information to determine whether a certificate should be renewed or not.
+ - If available, the ARI extension (ACME Renewal Information, U(https://datatracker.ietf.org/doc/draft-ietf-acme-ari/))
+ is used. This module implements version 3 of the ARI draft."
+extends_documentation_fragment:
+ - community.crypto.acme.basic
+ - community.crypto.acme.no_account
+ - community.crypto.attributes
+ - community.crypto.attributes.info_module
+options:
+ certificate_path:
+ description:
+ - A path to the X.509 certificate to determine renewal of.
+ - In case the certificate does not exist, the module will always return RV(should_renew=true).
+ - O(certificate_path) and O(certificate_content) are mutually exclusive.
+ type: path
+ certificate_content:
+ description:
+ - The content of the X.509 certificate to determine renewal of.
+ - O(certificate_path) and O(certificate_content) are mutually exclusive.
+ type: str
+ use_ari:
+ description:
+ - Whether to use ARI information, if available.
+ - Set this to V(false) if the ACME server implements ARI in a way that is incompatible with this module.
+ type: bool
+ default: true
+ ari_algorithm:
+ description:
+ - If ARI information is used, selects which algorithm is used to determine whether to renew now.
+ - V(standard) selects the L(algorithm provided in the the ARI specification,
+ https://www.ietf.org/archive/id/draft-ietf-acme-ari-03.html#name-renewalinfo-objects).
+ - V(start) returns RV(should_renew=true) once the start of the renewal interval has been reached.
+ type: str
+ choices:
+ - standard
+ - start
+ default: standard
+ remaining_days:
+ description:
+ - The number of days the certificate must have left being valid.
+ - For example, if O(remaining_days=20), this check causes RV(should_renew=true) if the
+ certificate is valid for less than 20 days.
+ type: int
+ remaining_percentage:
+ description:
+ - The percentage of the certificate's validity period that should be left.
+ - For example, if O(remaining_percentage=0.1), and the certificate's validity period is 90 days,
+ this check causes RV(should_renew=true) if the certificate is valid for less than 9 days.
+ - Must be a value between 0 and 1.
+ type: float
+ now:
+ description:
+ - Use this timestamp instead of the current timestamp to determine whether a certificate should be renewed.
+ - Time can be specified either as relative time or as absolute timestamp.
+ - Time will always be interpreted as UTC.
+ - Valid format is C([+-]timespec | ASN.1 TIME) where timespec can be an integer
+ + C([w | d | h | m | s]) (for example V(+32w1d2h)).
+ type: str
+seealso:
+ - module: community.crypto.acme_certificate
+ description: Allows to obtain a certificate using the ACME protocol
+ - module: community.crypto.acme_ari_info
+ description: Obtain renewal information for a certificate
+'''
+
+EXAMPLES = '''
+- name: Retrieve renewal information for a certificate
+ community.crypto.acme_certificate_renewal_info:
+ certificate_path: /etc/httpd/ssl/sample.com.crt
+ register: cert_data
+
+- name: Should the certificate be renewed?
+ ansible.builtin.debug:
+ var: cert_data.should_renew
+'''
+
+RETURN = '''
+should_renew:
+ description:
+ - Whether the certificate should be renewed.
+ - If no certificate is provided, or the certificate is expired, will always be V(true).
+ returned: success
+ type: bool
+ sample: true
+
+msg:
+ description:
+ - Information on the reason for renewal.
+ - Should be shown to the user, as in case of ARI triggered renewal it can contain important
+ information, for example on forced revocations for misissued certificates.
+ type: str
+ returned: success
+ sample: The certificate does not exist.
+
+supports_ari:
+ description:
+ - Whether ARI information was used to determine renewal. This can be used to determine whether to
+ specify O(community.crypto.acme_certificate#module:include_renewal_cert_id=when_ari_supported)
+ for the M(community.crypto.acme_certificate) module.
+ - If O(use_ari=false), this will always be V(false).
+ returned: success
+ type: bool
+ sample: true
+
+cert_id:
+ description:
+ - The certificate ID according to the L(ARI specification, https://www.ietf.org/archive/id/draft-ietf-acme-ari-03.html#section-4.1).
+ returned: success, the certificate exists, and has an Authority Key Identifier X.509 extension
+ type: str
+ sample: aYhba4dGQEHhs3uEe6CuLN4ByNQ.AIdlQyE
+'''
+
+import os
+import random
+
+from ansible_collections.community.crypto.plugins.module_utils.acme.acme import (
+ create_backend,
+ create_default_argspec,
+ ACMEClient,
+)
+
+from ansible_collections.community.crypto.plugins.module_utils.acme.errors import ModuleFailException
+
+from ansible_collections.community.crypto.plugins.module_utils.acme.utils import compute_cert_id
+
+
+def main():
+ argument_spec = create_default_argspec(with_account=False)
+ argument_spec.update_argspec(
+ certificate_path=dict(type='path'),
+ certificate_content=dict(type='str'),
+ use_ari=dict(type='bool', default=True),
+ ari_algorithm=dict(type='str', choices=['standard', 'start'], default='standard'),
+ remaining_days=dict(type='int'),
+ remaining_percentage=dict(type='float'),
+ now=dict(type='str'),
+ )
+ argument_spec.update(
+ mutually_exclusive=(
+ ['certificate_path', 'certificate_content'],
+ ),
+ )
+ module = argument_spec.create_ansible_module(supports_check_mode=True)
+ backend = create_backend(module, True)
+
+ result = dict(
+ changed=False,
+ msg='The certificate is still valid and no condition was reached',
+ supports_ari=False,
+ )
+
+ def complete(should_renew, **kwargs):
+ result['should_renew'] = should_renew
+ result.update(kwargs)
+ module.exit_json(**result)
+
+ if not module.params['certificate_path'] and not module.params['certificate_content']:
+ complete(True, msg='No certificate was specified')
+
+ if module.params['certificate_path'] is not None and not os.path.exists(module.params['certificate_path']):
+ complete(True, msg='The certificate file does not exist')
+
+ try:
+ cert_info = backend.get_cert_information(
+ cert_filename=module.params['certificate_path'],
+ cert_content=module.params['certificate_content'],
+ )
+ cert_id = compute_cert_id(backend, cert_info=cert_info, none_if_required_information_is_missing=True)
+ if cert_id is not None:
+ result['cert_id'] = cert_id
+
+ if module.params['now']:
+ now = backend.parse_module_parameter(module.params['now'], 'now')
+ else:
+ now = backend.get_now()
+
+ if now >= cert_info.not_valid_after:
+ complete(True, msg='The certificate has already expired')
+
+ client = ACMEClient(module, backend)
+ if cert_id is not None and module.params['use_ari'] and client.directory.has_renewal_info_endpoint():
+ renewal_info = client.get_renewal_info(cert_id=cert_id)
+ window_start = backend.parse_acme_timestamp(renewal_info['suggestedWindow']['start'])
+ window_end = backend.parse_acme_timestamp(renewal_info['suggestedWindow']['end'])
+ msg_append = ''
+ if 'explanationURL' in renewal_info:
+ msg_append = '. Information on renewal interval: {0}'.format(renewal_info['explanationURL'])
+ result['supports_ari'] = True
+ if now > window_end:
+ complete(True, msg='The suggested renewal interval provided by ARI is in the past{0}'.format(msg_append))
+ if module.params['ari_algorithm'] == 'start':
+ if now > window_start:
+ complete(True, msg='The suggested renewal interval provided by ARI has begun{0}'.format(msg_append))
+ else:
+ random_time = backend.interpolate_timestamp(window_start, window_end, random.random())
+ if now > random_time:
+ complete(
+ True,
+ msg='The picked random renewal time {0} in sugested renewal internal provided by ARI is in the past{1}'.format(
+ random_time,
+ msg_append,
+ ),
+ )
+
+ if module.params['remaining_days'] is not None:
+ remaining_days = (cert_info.not_valid_after - now).days
+ if remaining_days < module.params['remaining_days']:
+ complete(True, msg='The certificate expires in {0} days'.format(remaining_days))
+
+ if module.params['remaining_percentage'] is not None:
+ timestamp = backend.interpolate_timestamp(cert_info.not_valid_before, cert_info.not_valid_after, 1 - module.params['remaining_percentage'])
+ if timestamp < now:
+ complete(
+ True,
+ msg="The remaining percentage {0}% of the certificate's lifespan was reached on {1}".format(
+ module.params['remaining_percentage'] * 100,
+ timestamp,
+ ),
+ )
+
+ complete(False)
+ except ModuleFailException as e:
+ e.do_fail(module)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/community/crypto/plugins/modules/acme_certificate_revoke.py b/ansible_collections/community/crypto/plugins/modules/acme_certificate_revoke.py
index 022862e60..2661a1525 100644
--- a/ansible_collections/community/crypto/plugins/modules/acme_certificate_revoke.py
+++ b/ansible_collections/community/crypto/plugins/modules/acme_certificate_revoke.py
@@ -37,7 +37,8 @@ seealso:
- module: community.crypto.acme_inspect
description: Allows to debug problems.
extends_documentation_fragment:
- - community.crypto.acme
+ - community.crypto.acme.basic
+ - community.crypto.acme.account
- community.crypto.attributes
- community.crypto.attributes.actiongroup_acme
attributes:
@@ -127,11 +128,9 @@ EXAMPLES = '''
RETURN = '''#'''
-from ansible.module_utils.basic import AnsibleModule
-
from ansible_collections.community.crypto.plugins.module_utils.acme.acme import (
create_backend,
- get_default_argspec,
+ create_default_argspec,
ACMEClient,
)
@@ -152,24 +151,23 @@ from ansible_collections.community.crypto.plugins.module_utils.acme.utils import
def main():
- argument_spec = get_default_argspec()
- argument_spec.update(dict(
+ argument_spec = create_default_argspec(require_account_key=False)
+ argument_spec.update_argspec(
private_key_src=dict(type='path'),
private_key_content=dict(type='str', no_log=True),
private_key_passphrase=dict(type='str', no_log=True),
certificate=dict(type='path', required=True),
revoke_reason=dict(type='int'),
- ))
- module = AnsibleModule(
- argument_spec=argument_spec,
+ )
+ argument_spec.update(
required_one_of=(
['account_key_src', 'account_key_content', 'private_key_src', 'private_key_content'],
),
mutually_exclusive=(
['account_key_src', 'account_key_content', 'private_key_src', 'private_key_content'],
),
- supports_check_mode=False,
)
+ module = argument_spec.create_ansible_module()
backend = create_backend(module, False)
try:
diff --git a/ansible_collections/community/crypto/plugins/modules/acme_challenge_cert_helper.py b/ansible_collections/community/crypto/plugins/modules/acme_challenge_cert_helper.py
index 48b65f998..edd2c3331 100644
--- a/ansible_collections/community/crypto/plugins/modules/acme_challenge_cert_helper.py
+++ b/ansible_collections/community/crypto/plugins/modules/acme_challenge_cert_helper.py
@@ -165,16 +165,16 @@ from ansible_collections.community.crypto.plugins.module_utils.acme.io import (
read_file,
)
-from ansible_collections.community.crypto.plugins.module_utils.crypto.support import (
- get_now_datetime,
-)
-
from ansible_collections.community.crypto.plugins.module_utils.crypto.cryptography_support import (
CRYPTOGRAPHY_TIMEZONE,
set_not_valid_after,
set_not_valid_before,
)
+from ansible_collections.community.crypto.plugins.module_utils.time import (
+ get_now_datetime,
+)
+
CRYPTOGRAPHY_IMP_ERR = None
try:
import cryptography
diff --git a/ansible_collections/community/crypto/plugins/modules/acme_inspect.py b/ansible_collections/community/crypto/plugins/modules/acme_inspect.py
index a2c76507e..c7ee49765 100644
--- a/ansible_collections/community/crypto/plugins/modules/acme_inspect.py
+++ b/ansible_collections/community/crypto/plugins/modules/acme_inspect.py
@@ -42,7 +42,8 @@ seealso:
description: The specification of the C(tls-alpn-01) challenge (RFC 8737).
link: https://www.rfc-editor.org/rfc/rfc8737.html
extends_documentation_fragment:
- - community.crypto.acme
+ - community.crypto.acme.basic
+ - community.crypto.acme.account
- community.crypto.attributes
- community.crypto.attributes.actiongroup_acme
attributes:
@@ -247,12 +248,11 @@ output_json:
- ...
'''
-from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.common.text.converters import to_native, to_bytes, to_text
from ansible_collections.community.crypto.plugins.module_utils.acme.acme import (
create_backend,
- get_default_argspec,
+ create_default_argspec,
ACMEClient,
)
@@ -263,18 +263,14 @@ from ansible_collections.community.crypto.plugins.module_utils.acme.errors impor
def main():
- argument_spec = get_default_argspec()
- argument_spec.update(dict(
+ argument_spec = create_default_argspec(require_account_key=False)
+ argument_spec.update_argspec(
url=dict(type='str'),
method=dict(type='str', choices=['get', 'post', 'directory-only'], default='get'),
content=dict(type='str'),
fail_on_acme_error=dict(type='bool', default=True),
- ))
- module = AnsibleModule(
- argument_spec=argument_spec,
- mutually_exclusive=(
- ['account_key_src', 'account_key_content'],
- ),
+ )
+ argument_spec.update(
required_if=(
['method', 'get', ['url']],
['method', 'post', ['url', 'content']],
@@ -282,6 +278,7 @@ def main():
['method', 'post', ['account_key_src', 'account_key_content'], True],
),
)
+ module = argument_spec.create_ansible_module()
backend = create_backend(module, False)
result = dict()
diff --git a/ansible_collections/community/crypto/plugins/modules/ecs_certificate.py b/ansible_collections/community/crypto/plugins/modules/ecs_certificate.py
index 2c1238d48..0276556ab 100644
--- a/ansible_collections/community/crypto/plugins/modules/ecs_certificate.py
+++ b/ansible_collections/community/crypto/plugins/modules/ecs_certificate.py
@@ -938,8 +938,8 @@ def main():
module.fail_json(msg='The cert_expiry field is invalid when request_type="reissue".')
elif module.params['cert_lifetime']:
module.fail_json(msg='The cert_lifetime field is invalid when request_type="reissue".')
- # Only a reissued request can omit the CSR
- else:
+ # Reissued or renew request can omit the CSR
+ elif module.params['request_type'] != 'renew':
module_params_csr = module.params['csr']
if module_params_csr is None:
module.fail_json(msg='The csr field is required when request_type={0}'.format(module.params['request_type']))
diff --git a/ansible_collections/community/crypto/plugins/modules/get_certificate.py b/ansible_collections/community/crypto/plugins/modules/get_certificate.py
index 6ae9439d3..d4b38afbd 100644
--- a/ansible_collections/community/crypto/plugins/modules/get_certificate.py
+++ b/ansible_collections/community/crypto/plugins/modules/get_certificate.py
@@ -220,10 +220,6 @@ from ansible.module_utils.common.text.converters import to_bytes
from ansible_collections.community.crypto.plugins.module_utils.version import LooseVersion
-from ansible_collections.community.crypto.plugins.module_utils.crypto.support import (
- get_now_datetime,
-)
-
from ansible_collections.community.crypto.plugins.module_utils.crypto.cryptography_support import (
CRYPTOGRAPHY_TIMEZONE,
cryptography_oid_to_name,
@@ -232,6 +228,10 @@ from ansible_collections.community.crypto.plugins.module_utils.crypto.cryptograp
get_not_valid_before,
)
+from ansible_collections.community.crypto.plugins.module_utils.time import (
+ get_now_datetime,
+)
+
MINIMAL_CRYPTOGRAPHY_VERSION = '1.6'
CREATE_DEFAULT_CONTEXT_IMP_ERR = None
diff --git a/ansible_collections/community/crypto/plugins/modules/x509_certificate_info.py b/ansible_collections/community/crypto/plugins/modules/x509_certificate_info.py
index 8379937f7..9e8c20e29 100644
--- a/ansible_collections/community/crypto/plugins/modules/x509_certificate_info.py
+++ b/ansible_collections/community/crypto/plugins/modules/x509_certificate_info.py
@@ -406,10 +406,6 @@ from ansible_collections.community.crypto.plugins.module_utils.crypto.basic impo
OpenSSLObjectError,
)
-from ansible_collections.community.crypto.plugins.module_utils.crypto.support import (
- get_relative_time_option,
-)
-
from ansible_collections.community.crypto.plugins.module_utils.crypto.cryptography_support import (
CRYPTOGRAPHY_TIMEZONE,
)
@@ -418,6 +414,10 @@ from ansible_collections.community.crypto.plugins.module_utils.crypto.module_bac
select_backend,
)
+from ansible_collections.community.crypto.plugins.module_utils.time import (
+ get_relative_time_option,
+)
+
def main():
module = AnsibleModule(
diff --git a/ansible_collections/community/crypto/plugins/modules/x509_crl.py b/ansible_collections/community/crypto/plugins/modules/x509_crl.py
index 527975b88..f8eb8d85e 100644
--- a/ansible_collections/community/crypto/plugins/modules/x509_crl.py
+++ b/ansible_collections/community/crypto/plugins/modules/x509_crl.py
@@ -470,7 +470,6 @@ from ansible_collections.community.crypto.plugins.module_utils.crypto.support im
load_certificate,
parse_name_field,
parse_ordered_name_field,
- get_relative_time_option,
select_message_digest,
)
@@ -506,6 +505,10 @@ from ansible_collections.community.crypto.plugins.module_utils.crypto.module_bac
get_crl_info,
)
+from ansible_collections.community.crypto.plugins.module_utils.time import (
+ get_relative_time_option,
+)
+
MINIMAL_CRYPTOGRAPHY_VERSION = '1.2'
CRYPTOGRAPHY_IMP_ERR = None
diff --git a/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_deactivate_authz/aliases b/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_deactivate_authz/aliases
new file mode 100644
index 000000000..b7f6d4f48
--- /dev/null
+++ b/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_deactivate_authz/aliases
@@ -0,0 +1,10 @@
+# Copyright (c) Ansible Project
+# 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
+
+azp/generic/1
+azp/posix/1
+cloud/acme
+
+# For some reason connecting to helper containers does not work on the Alpine VMs
+skip/alpine
diff --git a/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_deactivate_authz/meta/main.yml b/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_deactivate_authz/meta/main.yml
new file mode 100644
index 000000000..2e8ad10b8
--- /dev/null
+++ b/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_deactivate_authz/meta/main.yml
@@ -0,0 +1,8 @@
+---
+# Copyright (c) Ansible Project
+# 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
+
+dependencies:
+ - setup_acme
+ - setup_remote_tmp_dir
diff --git a/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_deactivate_authz/tasks/impl.yml b/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_deactivate_authz/tasks/impl.yml
new file mode 100644
index 000000000..28a889684
--- /dev/null
+++ b/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_deactivate_authz/tasks/impl.yml
@@ -0,0 +1,154 @@
+---
+# Copyright (c) Ansible Project
+# 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
+
+- vars:
+ certificate_name: cert-1
+ subject_alt_name: DNS:example.com
+ account_email: example@example.org
+ block:
+ - name: Generate account key
+ openssl_privatekey:
+ path: "{{ remote_tmp_dir }}/account-ec256.pem"
+ type: ECC
+ curve: secp256r1
+ force: true
+ - name: Create cert private key
+ openssl_privatekey:
+ path: "{{ remote_tmp_dir }}/{{ certificate_name }}.key"
+ type: ECC
+ curve: secp256r1
+ force: true
+ - name: Create cert CSR
+ openssl_csr:
+ path: "{{ remote_tmp_dir }}/{{ certificate_name }}.csr"
+ privatekey_path: "{{ remote_tmp_dir }}/{{ certificate_name }}.key"
+ subject_alt_name: "{{ subject_alt_name }}"
+ - name: Start process of obtaining certificate
+ acme_certificate:
+ select_crypto_backend: "{{ select_crypto_backend }}"
+ acme_version: 2
+ acme_directory: https://{{ acme_host }}:14000/dir
+ validate_certs: false
+ account_key_src: "{{ remote_tmp_dir }}/account-ec256.pem"
+ modify_account: true
+ csr: "{{ remote_tmp_dir }}/{{ certificate_name }}.csr"
+ dest: "{{ remote_tmp_dir }}/{{ certificate_name }}.pem"
+ challenge: http-01
+ force: true
+ terms_agreed: true
+ account_email: "{{ account_email }}"
+ register: certificate_data
+
+- name: Inspect order
+ acme_inspect:
+ acme_directory: https://{{ acme_host }}:14000/dir
+ acme_version: 2
+ validate_certs: false
+ account_key_src: "{{ remote_tmp_dir }}/account-ec256.pem"
+ account_uri: "{{ certificate_data.account_uri }}"
+ url: "{{ certificate_data.order_uri }}"
+ method: get
+ register: order_1
+- name: Show order
+ debug:
+ var: order_1.output_json
+
+- name: Deactivate order (check mode)
+ acme_certificate_deactivate_authz:
+ acme_directory: https://{{ acme_host }}:14000/dir
+ acme_version: 2
+ validate_certs: false
+ account_key_src: "{{ remote_tmp_dir }}/account-ec256.pem"
+ account_uri: "{{ certificate_data.account_uri }}"
+ order_uri: "{{ certificate_data.order_uri }}"
+ check_mode: true
+ register: deactivate_1
+
+- name: Inspect order again
+ acme_inspect:
+ acme_directory: https://{{ acme_host }}:14000/dir
+ acme_version: 2
+ validate_certs: false
+ account_key_src: "{{ remote_tmp_dir }}/account-ec256.pem"
+ account_uri: "{{ certificate_data.account_uri }}"
+ url: "{{ certificate_data.order_uri }}"
+ method: get
+ register: order_2
+- name: Show order
+ debug:
+ var: order_2.output_json
+
+- name: Deactivate order
+ acme_certificate_deactivate_authz:
+ acme_directory: https://{{ acme_host }}:14000/dir
+ acme_version: 2
+ validate_certs: false
+ account_key_src: "{{ remote_tmp_dir }}/account-ec256.pem"
+ account_uri: "{{ certificate_data.account_uri }}"
+ order_uri: "{{ certificate_data.order_uri }}"
+ register: deactivate_2
+
+- name: Inspect order again
+ acme_inspect:
+ acme_directory: https://{{ acme_host }}:14000/dir
+ acme_version: 2
+ validate_certs: false
+ account_key_src: "{{ remote_tmp_dir }}/account-ec256.pem"
+ account_uri: "{{ certificate_data.account_uri }}"
+ url: "{{ certificate_data.order_uri }}"
+ method: get
+ register: order_3
+- name: Show order
+ debug:
+ var: order_3.output_json
+
+- name: Deactivate order (check mode, idempotent)
+ acme_certificate_deactivate_authz:
+ acme_directory: https://{{ acme_host }}:14000/dir
+ acme_version: 2
+ validate_certs: false
+ account_key_src: "{{ remote_tmp_dir }}/account-ec256.pem"
+ account_uri: "{{ certificate_data.account_uri }}"
+ order_uri: "{{ certificate_data.order_uri }}"
+ check_mode: true
+ register: deactivate_3
+
+- name: Inspect order again
+ acme_inspect:
+ acme_directory: https://{{ acme_host }}:14000/dir
+ acme_version: 2
+ validate_certs: false
+ account_key_src: "{{ remote_tmp_dir }}/account-ec256.pem"
+ account_uri: "{{ certificate_data.account_uri }}"
+ url: "{{ certificate_data.order_uri }}"
+ method: get
+ register: order_4
+- name: Show order
+ debug:
+ var: order_4.output_json
+
+- name: Deactivate order (idempotent)
+ acme_certificate_deactivate_authz:
+ acme_directory: https://{{ acme_host }}:14000/dir
+ acme_version: 2
+ validate_certs: false
+ account_key_src: "{{ remote_tmp_dir }}/account-ec256.pem"
+ account_uri: "{{ certificate_data.account_uri }}"
+ order_uri: "{{ certificate_data.order_uri }}"
+ register: deactivate_4
+
+- name: Inspect order again
+ acme_inspect:
+ acme_directory: https://{{ acme_host }}:14000/dir
+ acme_version: 2
+ validate_certs: false
+ account_key_src: "{{ remote_tmp_dir }}/account-ec256.pem"
+ account_uri: "{{ certificate_data.account_uri }}"
+ url: "{{ certificate_data.order_uri }}"
+ method: get
+ register: order_5
+- name: Show order
+ debug:
+ var: order_5.output_json
diff --git a/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_deactivate_authz/tasks/main.yml b/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_deactivate_authz/tasks/main.yml
new file mode 100644
index 000000000..68d47973d
--- /dev/null
+++ b/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_deactivate_authz/tasks/main.yml
@@ -0,0 +1,40 @@
+---
+# Copyright (c) Ansible Project
+# 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
+
+####################################################################
+# WARNING: These are designed specifically for Ansible tests #
+# and should not be used as examples of how to write Ansible roles #
+####################################################################
+
+- block:
+ - name: Running tests with OpenSSL backend
+ include_tasks: impl.yml
+ vars:
+ select_crypto_backend: openssl
+
+ - import_tasks: ../tests/validate.yml
+
+ # Old 0.9.8 versions have insufficient CLI support for signing with EC keys
+ when: openssl_version.stdout is version('1.0.0', '>=')
+
+- name: Remove output directory
+ file:
+ path: "{{ remote_tmp_dir }}"
+ state: absent
+
+- name: Re-create output directory
+ file:
+ path: "{{ remote_tmp_dir }}"
+ state: directory
+
+- block:
+ - name: Running tests with cryptography backend
+ include_tasks: impl.yml
+ vars:
+ select_crypto_backend: cryptography
+
+ - import_tasks: ../tests/validate.yml
+
+ when: cryptography_version.stdout is version('1.5', '>=')
diff --git a/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_deactivate_authz/tests/validate.yml b/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_deactivate_authz/tests/validate.yml
new file mode 100644
index 000000000..603c7d7cc
--- /dev/null
+++ b/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_deactivate_authz/tests/validate.yml
@@ -0,0 +1,17 @@
+---
+# Copyright (c) Ansible Project
+# 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
+
+- name: Checks
+ assert:
+ that:
+ - order_1.output_json.status == 'pending'
+ - deactivate_1 is changed
+ - order_2.output_json.status == 'pending'
+ - deactivate_2 is changed
+ - order_3.output_json.status == 'deactivated'
+ - deactivate_3 is not changed
+ - order_4.output_json.status == 'deactivated'
+ - deactivate_4 is not changed
+ - order_5.output_json.status == 'deactivated'
diff --git a/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/aliases b/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/aliases
new file mode 100644
index 000000000..b7f6d4f48
--- /dev/null
+++ b/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/aliases
@@ -0,0 +1,10 @@
+# Copyright (c) Ansible Project
+# 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
+
+azp/generic/1
+azp/posix/1
+cloud/acme
+
+# For some reason connecting to helper containers does not work on the Alpine VMs
+skip/alpine
diff --git a/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/meta/main.yml b/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/meta/main.yml
new file mode 100644
index 000000000..2e8ad10b8
--- /dev/null
+++ b/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/meta/main.yml
@@ -0,0 +1,8 @@
+---
+# Copyright (c) Ansible Project
+# 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
+
+dependencies:
+ - setup_acme
+ - setup_remote_tmp_dir
diff --git a/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/tasks/impl.yml b/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/tasks/impl.yml
new file mode 100644
index 000000000..b30808ed5
--- /dev/null
+++ b/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/tasks/impl.yml
@@ -0,0 +1,145 @@
+---
+# Copyright (c) Ansible Project
+# 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
+
+## SET UP ACCOUNT KEYS ########################################################################
+- block:
+ - name: Generate account keys
+ openssl_privatekey:
+ path: "{{ remote_tmp_dir }}/{{ item.name }}.pem"
+ type: "{{ item.type }}"
+ size: "{{ item.size | default(omit) }}"
+ curve: "{{ item.curve | default(omit) }}"
+ force: true
+ loop: "{{ account_keys }}"
+
+ vars:
+ account_keys:
+ - name: account-ec256
+ type: ECC
+ curve: secp256r1
+## CREATE ACCOUNTS AND OBTAIN CERTIFICATES ####################################################
+- name: Obtain cert 1
+ include_tasks: obtain-cert.yml
+ vars:
+ certgen_title: Certificate 1 for renewal check
+ certificate_name: cert-1
+ key_type: rsa
+ rsa_bits: "{{ default_rsa_key_size }}"
+ subject_alt_name: "DNS:example.com"
+ subject_alt_name_critical: false
+ account_key: account-ec256
+ challenge: http-01
+ modify_account: true
+ deactivate_authzs: false
+ force: true
+ remaining_days: "{{ omit }}"
+ terms_agreed: true
+ account_email: "example@example.org"
+## OBTAIN CERTIFICATE INFOS ###################################################################
+- name: Dump OpenSSL x509 info
+ command:
+ cmd: openssl x509 -in {{ remote_tmp_dir }}/cert-1.pem -noout -text
+- name: Obtain certificate information
+ x509_certificate_info:
+ path: "{{ remote_tmp_dir }}/cert-1.pem"
+ register: cert_1_info
+- name: Read certificate
+ slurp:
+ src: '{{ remote_tmp_dir }}/cert-1.pem'
+ register: slurp_cert_1
+- name: Obtain certificate information (1/9)
+ acme_certificate_renewal_info:
+ select_crypto_backend: "{{ select_crypto_backend }}"
+ certificate_path: "{{ remote_tmp_dir }}/cert-1.pem"
+ acme_version: 2
+ acme_directory: https://{{ acme_host }}:14000/dir
+ validate_certs: false
+ # Certificate is valid for ~1826 days
+ register: cert_1_renewal_1
+- name: Obtain certificate information (2/9)
+ acme_certificate_renewal_info:
+ select_crypto_backend: "{{ select_crypto_backend }}"
+ certificate_path: "{{ remote_tmp_dir }}/cert-1.pem"
+ acme_version: 2
+ acme_directory: https://{{ acme_host }}:14000/dir
+ validate_certs: false
+ # Certificate is valid for ~1826 days
+ remaining_days: 1000
+ remaining_percentage: 0.5
+ register: cert_1_renewal_2
+- name: Obtain certificate information (3/9)
+ acme_certificate_renewal_info:
+ select_crypto_backend: "{{ select_crypto_backend }}"
+ certificate_content: "{{ slurp_cert_1.content | b64decode }}"
+ acme_version: 2
+ acme_directory: https://{{ acme_host }}:14000/dir
+ validate_certs: false
+ now: +1800d
+ # Certificate is valid for ~26 days
+ register: cert_1_renewal_3
+- name: Obtain certificate information (4/9)
+ acme_certificate_renewal_info:
+ select_crypto_backend: "{{ select_crypto_backend }}"
+ certificate_path: "{{ remote_tmp_dir }}/cert-1.pem"
+ acme_version: 2
+ acme_directory: https://{{ acme_host }}:14000/dir
+ validate_certs: false
+ now: +1800d
+ # Certificate is valid for ~26 days
+ remaining_days: 30
+ remaining_percentage: 0.1
+ register: cert_1_renewal_4
+- name: Obtain certificate information (5/9)
+ acme_certificate_renewal_info:
+ select_crypto_backend: "{{ select_crypto_backend }}"
+ certificate_path: "{{ remote_tmp_dir }}/cert-1.pem"
+ acme_version: 2
+ acme_directory: https://{{ acme_host }}:14000/dir
+ validate_certs: false
+ now: +1800d
+ # Certificate is valid for ~26 days
+ remaining_days: 30
+ remaining_percentage: 0.01
+ register: cert_1_renewal_5
+- name: Obtain certificate information (6/9)
+ acme_certificate_renewal_info:
+ select_crypto_backend: "{{ select_crypto_backend }}"
+ certificate_path: "{{ remote_tmp_dir }}/cert-1.pem"
+ acme_version: 2
+ acme_directory: https://{{ acme_host }}:14000/dir
+ validate_certs: false
+ now: +1800d
+ # Certificate is valid for ~26 days
+ remaining_days: 10
+ remaining_percentage: 0.03
+ register: cert_1_renewal_6
+- name: Obtain certificate information (7/9)
+ acme_certificate_renewal_info:
+ select_crypto_backend: "{{ select_crypto_backend }}"
+ certificate_path: "{{ remote_tmp_dir }}/cert-1.pem"
+ acme_version: 2
+ acme_directory: https://{{ acme_host }}:14000/dir
+ validate_certs: false
+ now: +1830d
+ # Certificate is no longer valid
+ register: cert_1_renewal_7
+- name: Obtain certificate information (8/9)
+ acme_certificate_renewal_info:
+ select_crypto_backend: "{{ select_crypto_backend }}"
+ acme_version: 2
+ acme_directory: https://{{ acme_host }}:14000/dir
+ validate_certs: false
+ now: +1830d
+ # Certificate is no longer valid
+ register: cert_1_renewal_8
+- name: Obtain certificate information (9/9)
+ acme_certificate_renewal_info:
+ select_crypto_backend: "{{ select_crypto_backend }}"
+ certificate_path: "{{ remote_tmp_dir }}/cert-does-not-exist.pem"
+ acme_version: 2
+ acme_directory: https://{{ acme_host }}:14000/dir
+ validate_certs: false
+ # Certificate is no longer valid
+ register: cert_1_renewal_9
diff --git a/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/tasks/main.yml b/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/tasks/main.yml
new file mode 100644
index 000000000..68d47973d
--- /dev/null
+++ b/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/tasks/main.yml
@@ -0,0 +1,40 @@
+---
+# Copyright (c) Ansible Project
+# 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
+
+####################################################################
+# WARNING: These are designed specifically for Ansible tests #
+# and should not be used as examples of how to write Ansible roles #
+####################################################################
+
+- block:
+ - name: Running tests with OpenSSL backend
+ include_tasks: impl.yml
+ vars:
+ select_crypto_backend: openssl
+
+ - import_tasks: ../tests/validate.yml
+
+ # Old 0.9.8 versions have insufficient CLI support for signing with EC keys
+ when: openssl_version.stdout is version('1.0.0', '>=')
+
+- name: Remove output directory
+ file:
+ path: "{{ remote_tmp_dir }}"
+ state: absent
+
+- name: Re-create output directory
+ file:
+ path: "{{ remote_tmp_dir }}"
+ state: directory
+
+- block:
+ - name: Running tests with cryptography backend
+ include_tasks: impl.yml
+ vars:
+ select_crypto_backend: cryptography
+
+ - import_tasks: ../tests/validate.yml
+
+ when: cryptography_version.stdout is version('1.5', '>=')
diff --git a/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/tasks/obtain-cert.yml b/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/tasks/obtain-cert.yml
new file mode 100644
index 000000000..6882e5339
--- /dev/null
+++ b/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/tasks/obtain-cert.yml
@@ -0,0 +1,159 @@
+---
+# Copyright (c) Ansible Project
+# 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
+
+## PRIVATE KEY ################################################################################
+- name: ({{ certgen_title }}) Create cert private key
+ openssl_privatekey:
+ path: "{{ remote_tmp_dir }}/{{ certificate_name }}.key"
+ type: "{{ 'RSA' if key_type == 'rsa' else 'ECC' }}"
+ size: "{{ rsa_bits if key_type == 'rsa' else omit }}"
+ curve: >-
+ {{ omit if key_type == 'rsa' else
+ 'secp256r1' if key_type == 'ec256' else
+ 'secp384r1' if key_type == 'ec384' else
+ 'secp521r1' if key_type == 'ec521' else
+ 'invalid value for key_type!' }}
+ passphrase: "{{ certificate_passphrase | default(omit) | default(omit, true) }}"
+ cipher: "{{ 'auto' if certificate_passphrase | default() else omit }}"
+ force: true
+## CSR ########################################################################################
+- name: ({{ certgen_title }}) Create cert CSR
+ openssl_csr:
+ path: "{{ remote_tmp_dir }}/{{ certificate_name }}.csr"
+ privatekey_path: "{{ remote_tmp_dir }}/{{ certificate_name }}.key"
+ privatekey_passphrase: "{{ certificate_passphrase | default(omit) | default(omit, true) }}"
+ subject_alt_name: "{{ subject_alt_name }}"
+ subject_alt_name_critical: "{{ subject_alt_name_critical }}"
+ return_content: true
+ register: csr_result
+## ACME STEP 1 ################################################################################
+- name: ({{ certgen_title }}) Obtain cert, step 1
+ acme_certificate:
+ select_crypto_backend: "{{ select_crypto_backend }}"
+ acme_version: 2
+ acme_directory: https://{{ acme_host }}:14000/dir
+ validate_certs: false
+ account_key: "{{ (remote_tmp_dir ~ '/' ~ account_key ~ '.pem') if account_key_content is not defined else omit }}"
+ account_key_content: "{{ account_key_content | default(omit) }}"
+ account_key_passphrase: "{{ account_key_passphrase | default(omit) | default(omit, true) }}"
+ modify_account: "{{ modify_account }}"
+ csr: "{{ omit if use_csr_content | default(false) else remote_tmp_dir ~ '/' ~ certificate_name ~ '.csr' }}"
+ csr_content: "{{ csr_result.csr if use_csr_content | default(false) else omit }}"
+ dest: "{{ remote_tmp_dir }}/{{ certificate_name }}.pem"
+ fullchain_dest: "{{ remote_tmp_dir }}/{{ certificate_name }}-fullchain.pem"
+ chain_dest: "{{ remote_tmp_dir }}/{{ certificate_name }}-chain.pem"
+ challenge: "{{ challenge }}"
+ deactivate_authzs: "{{ deactivate_authzs }}"
+ force: "{{ force }}"
+ remaining_days: "{{ remaining_days }}"
+ terms_agreed: "{{ terms_agreed }}"
+ account_email: "{{ account_email }}"
+ register: challenge_data
+- name: ({{ certgen_title }}) Print challenge data
+ debug:
+ var: challenge_data
+- name: ({{ certgen_title }}) Create HTTP challenges
+ uri:
+ url: "http://{{ acme_host }}:5000/http/{{ item.key }}/{{ item.value['http-01'].resource[('.well-known/acme-challenge/'|length):] }}"
+ method: PUT
+ body_format: raw
+ body: "{{ item.value['http-01'].resource_value }}"
+ headers:
+ content-type: "application/octet-stream"
+ with_dict: "{{ challenge_data.challenge_data }}"
+ when: "challenge_data is changed and challenge == 'http-01'"
+- name: ({{ certgen_title }}) Create DNS challenges
+ uri:
+ url: "http://{{ acme_host }}:5000/dns/{{ item.key }}"
+ method: PUT
+ body_format: json
+ body: "{{ item.value }}"
+ with_dict: "{{ challenge_data.challenge_data_dns }}"
+ when: "challenge_data is changed and challenge == 'dns-01'"
+- name: ({{ certgen_title }}) Create TLS ALPN challenges (acme_challenge_cert_helper)
+ acme_challenge_cert_helper:
+ challenge: tls-alpn-01
+ challenge_data: "{{ item.value['tls-alpn-01'] }}"
+ private_key_src: "{{ remote_tmp_dir }}/{{ certificate_name }}.key"
+ private_key_passphrase: "{{ certificate_passphrase | default(omit) | default(omit, true) }}"
+ with_dict: "{{ challenge_data.challenge_data if challenge_data is changed and challenge == 'tls-alpn-01' and (challenge_alpn_tls | default('der-value-b64') == 'acme_challenge_cert_helper') else {} }}"
+ register: tls_alpn_challenges
+ when: "challenge_data is changed and challenge == 'tls-alpn-01' and (challenge_alpn_tls | default('der-value-b64') == 'acme_challenge_cert_helper')"
+- name: ({{ certgen_title }}) Read private key
+ slurp:
+ src: '{{ remote_tmp_dir }}/{{ certificate_name }}.key'
+ register: slurp
+ when: "challenge_data is changed and challenge == 'tls-alpn-01' and (challenge_alpn_tls | default('der-value-b64') == 'acme_challenge_cert_helper')"
+- name: ({{ certgen_title }}) Set TLS ALPN challenges (acme_challenge_cert_helper)
+ uri:
+ url: "http://{{ acme_host }}:5000/tls-alpn/{{ item.domain }}/{{ item.identifier }}/certificate-and-key"
+ method: PUT
+ body_format: raw
+ body: "{{ item.challenge_certificate }}\n{{ slurp.content | b64decode }}"
+ headers:
+ content-type: "application/pem-certificate-chain"
+ with_items: "{{ tls_alpn_challenges.results if challenge_data is changed and challenge == 'tls-alpn-01' and (challenge_alpn_tls | default('der-value-b64') == 'acme_challenge_cert_helper') else [] }}"
+ when: "challenge_data is changed and challenge == 'tls-alpn-01' and (challenge_alpn_tls | default('der-value-b64') == 'acme_challenge_cert_helper')"
+- name: ({{ certgen_title }}) Create TLS ALPN challenges (der-value-b64)
+ uri:
+ url: "http://{{ acme_host }}:5000/tls-alpn/{{ item.value['tls-alpn-01'].resource }}/{{ item.value['tls-alpn-01'].resource_original }}/der-value-b64"
+ method: PUT
+ body_format: raw
+ body: "{{ item.value['tls-alpn-01'].resource_value }}"
+ headers:
+ content-type: "application/octet-stream"
+ with_dict: "{{ challenge_data.challenge_data if challenge_data is changed and challenge == 'tls-alpn-01' and (challenge_alpn_tls | default('der-value-b64') == 'der-value-b64') else {} }}"
+ when: "challenge_data is changed and challenge == 'tls-alpn-01' and (challenge_alpn_tls | default('der-value-b64') == 'der-value-b64')"
+## ACME STEP 2 ################################################################################
+- name: ({{ certgen_title }}) Obtain cert, step 2
+ acme_certificate:
+ select_crypto_backend: "{{ select_crypto_backend }}"
+ acme_version: 2
+ acme_directory: https://{{ acme_host }}:14000/dir
+ validate_certs: false
+ account_key: "{{ (remote_tmp_dir ~ '/' ~ account_key ~ '.pem') if account_key_content is not defined else omit }}"
+ account_key_content: "{{ account_key_content | default(omit) }}"
+ account_key_passphrase: "{{ account_key_passphrase | default(omit) | default(omit, true) }}"
+ account_uri: "{{ challenge_data.account_uri }}"
+ modify_account: "{{ modify_account }}"
+ csr: "{{ omit if use_csr_content | default(false) else remote_tmp_dir ~ '/' ~ certificate_name ~ '.csr' }}"
+ csr_content: "{{ csr_result.csr if use_csr_content | default(false) else omit }}"
+ dest: "{{ remote_tmp_dir }}/{{ certificate_name }}.pem"
+ fullchain_dest: "{{ remote_tmp_dir }}/{{ certificate_name }}-fullchain.pem"
+ chain_dest: "{{ remote_tmp_dir }}/{{ certificate_name }}-chain.pem"
+ challenge: "{{ challenge }}"
+ deactivate_authzs: "{{ deactivate_authzs }}"
+ force: "{{ force }}"
+ remaining_days: "{{ remaining_days }}"
+ terms_agreed: "{{ terms_agreed }}"
+ account_email: "{{ account_email }}"
+ data: "{{ challenge_data }}"
+ retrieve_all_alternates: "{{ retrieve_all_alternates | default(omit) }}"
+ select_chain: "{{ select_chain | default(omit) if select_crypto_backend == 'cryptography' else omit }}"
+ register: certificate_obtain_result
+ when: challenge_data is changed
+- name: ({{ certgen_title }}) Deleting HTTP challenges
+ uri:
+ url: "http://{{ acme_host }}:5000/http/{{ item.key }}/{{ item.value['http-01'].resource[('.well-known/acme-challenge/'|length):] }}"
+ method: DELETE
+ with_dict: "{{ challenge_data.challenge_data }}"
+ when: "challenge_data is changed and challenge == 'http-01'"
+- name: ({{ certgen_title }}) Deleting DNS challenges
+ uri:
+ url: "http://{{ acme_host }}:5000/dns/{{ item.key }}"
+ method: DELETE
+ with_dict: "{{ challenge_data.challenge_data_dns }}"
+ when: "challenge_data is changed and challenge == 'dns-01'"
+- name: ({{ certgen_title }}) Deleting TLS ALPN challenges
+ uri:
+ url: "http://{{ acme_host }}:5000/tls-alpn/{{ item.value['tls-alpn-01'].resource }}"
+ method: DELETE
+ with_dict: "{{ challenge_data.challenge_data }}"
+ when: "challenge_data is changed and challenge == 'tls-alpn-01'"
+- name: ({{ certgen_title }}) Get root certificate
+ get_url:
+ url: "http://{{ acme_host }}:5000/root-certificate-for-ca/{{ acme_expected_root_number | default(0) if select_crypto_backend == 'cryptography' else 0 }}"
+ dest: "{{ remote_tmp_dir }}/{{ certificate_name }}-root.pem"
+###############################################################################################
diff --git a/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/tests/validate.yml b/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/tests/validate.yml
new file mode 100644
index 000000000..116e524c4
--- /dev/null
+++ b/ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/tests/validate.yml
@@ -0,0 +1,47 @@
+---
+# Copyright (c) Ansible Project
+# 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
+
+- name: Validate results
+ assert:
+ that:
+ - cert_1_renewal_1.should_renew == false
+ - cert_1_renewal_1.msg == 'The certificate is still valid and no condition was reached'
+ - cert_1_renewal_1.supports_ari == supports_ari
+ - cert_1_renewal_1.cert_id is string or not can_have_cert_id
+ - cert_1_renewal_2.should_renew == false
+ - cert_1_renewal_2.msg == 'The certificate is still valid and no condition was reached'
+ - cert_1_renewal_2.supports_ari == supports_ari
+ - cert_1_renewal_2.cert_id is string or not can_have_cert_id
+ - cert_1_renewal_3.should_renew == false
+ - cert_1_renewal_3.msg == 'The certificate is still valid and no condition was reached'
+ - cert_1_renewal_3.supports_ari == supports_ari
+ - cert_1_renewal_3.cert_id is string or not can_have_cert_id
+ - cert_1_renewal_4.should_renew == true
+ - cert_1_renewal_4.msg == 'The certificate expires in 25 days'
+ - cert_1_renewal_4.supports_ari == supports_ari
+ - cert_1_renewal_4.cert_id is string or not can_have_cert_id
+ - cert_1_renewal_5.should_renew == true
+ - cert_1_renewal_5.msg == 'The certificate expires in 25 days'
+ - cert_1_renewal_5.supports_ari == supports_ari
+ - cert_1_renewal_5.cert_id is string or not can_have_cert_id
+ - cert_1_renewal_6.should_renew == true
+ - cert_1_renewal_6.msg.startswith("The remaining percentage 3.0% of the certificate's lifespan was reached on ")
+ - cert_1_renewal_6.supports_ari == supports_ari
+ - cert_1_renewal_6.cert_id is string or not can_have_cert_id
+ - cert_1_renewal_7.should_renew == true
+ - cert_1_renewal_7.msg == 'The certificate has already expired'
+ - cert_1_renewal_7.supports_ari == false
+ - cert_1_renewal_7.cert_id is string or not can_have_cert_id
+ - cert_1_renewal_8.should_renew == true
+ - cert_1_renewal_8.msg == 'No certificate was specified'
+ - cert_1_renewal_8.supports_ari == false
+ - cert_1_renewal_8.cert_id is not defined
+ - cert_1_renewal_9.should_renew == true
+ - cert_1_renewal_9.msg == 'The certificate file does not exist'
+ - cert_1_renewal_9.supports_ari == false
+ - cert_1_renewal_9.cert_id is not defined
+ vars:
+ can_have_cert_id: cert_1_info.authority_key_identifier is string
+ supports_ari: false
diff --git a/ansible_collections/community/crypto/tests/integration/targets/acme_inspect/tasks/impl.yml b/ansible_collections/community/crypto/tests/integration/targets/acme_inspect/tasks/impl.yml
index 4eed1031a..d87501884 100644
--- a/ansible_collections/community/crypto/tests/integration/targets/acme_inspect/tasks/impl.yml
+++ b/ansible_collections/community/crypto/tests/integration/targets/acme_inspect/tasks/impl.yml
@@ -28,6 +28,7 @@
acme_version: 2
validate_certs: false
method: directory-only
+ select_crypto_backend: "{{ select_crypto_backend }}"
register: directory
- debug: var=directory
@@ -40,6 +41,7 @@
url: "{{ directory.directory.newAccount}}"
method: post
content: '{"termsOfServiceAgreed":true}'
+ select_crypto_backend: "{{ select_crypto_backend }}"
register: account_creation
# account_creation.headers.location contains the account URI
# if creation was successful
@@ -54,6 +56,7 @@
account_uri: "{{ account_creation.headers.location }}"
url: "{{ account_creation.headers.location }}"
method: get
+ select_crypto_backend: "{{ select_crypto_backend }}"
register: account_get
- debug: var=account_get
@@ -67,6 +70,7 @@
url: "{{ account_creation.headers.location }}"
method: post
content: '{{ account_info | to_json }}'
+ select_crypto_backend: "{{ select_crypto_backend }}"
vars:
account_info:
# For valid values, see
@@ -86,6 +90,7 @@
url: "{{ directory.directory.newOrder }}"
method: post
content: '{{ create_order | to_json }}'
+ select_crypto_backend: "{{ select_crypto_backend }}"
vars:
create_order:
# For valid values, see
@@ -108,6 +113,7 @@
account_uri: "{{ account_creation.headers.location }}"
url: "{{ new_order.headers.location }}"
method: get
+ select_crypto_backend: "{{ select_crypto_backend }}"
register: order
- debug: var=order
@@ -120,6 +126,7 @@
account_uri: "{{ account_creation.headers.location }}"
url: "{{ item }}"
method: get
+ select_crypto_backend: "{{ select_crypto_backend }}"
loop: "{{ order.output_json.authorizations }}"
register: authz
- debug: var=authz
@@ -133,6 +140,7 @@
account_uri: "{{ account_creation.headers.location }}"
url: "{{ (item.challenges | selectattr('type', 'equalto', 'http-01') | list)[0].url }}"
method: get
+ select_crypto_backend: "{{ select_crypto_backend }}"
register: http01challenge
loop: "{{ authz.results | map(attribute='output_json') | list }}"
- debug: var=http01challenge
@@ -147,6 +155,7 @@
url: "{{ item.url }}"
method: post
content: '{}'
+ select_crypto_backend: "{{ select_crypto_backend }}"
register: activation
loop: "{{ http01challenge.results | map(attribute='output_json') | list }}"
- debug: var=activation
@@ -160,6 +169,7 @@
account_uri: "{{ account_creation.headers.location }}"
url: "{{ item.url }}"
method: get
+ select_crypto_backend: "{{ select_crypto_backend }}"
register: validation_result
loop: "{{ http01challenge.results | map(attribute='output_json') | list }}"
until: "validation_result.output_json.status not in ['pending', 'processing']"
diff --git a/ansible_collections/community/crypto/tests/integration/targets/x509_certificate/tasks/ownca.yml b/ansible_collections/community/crypto/tests/integration/targets/x509_certificate/tasks/ownca.yml
index 99832a517..4bbd818ee 100644
--- a/ansible_collections/community/crypto/tests/integration/targets/x509_certificate/tasks/ownca.yml
+++ b/ansible_collections/community/crypto/tests/integration/targets/x509_certificate/tasks/ownca.yml
@@ -249,10 +249,24 @@
ownca_not_after: 20191023133742Z
path: "{{ remote_tmp_dir }}/ownca_cert3.pem"
csr_path: "{{ remote_tmp_dir }}/csr.csr"
- privatekey_path: "{{ remote_tmp_dir }}/privatekey3.pem"
+ privatekey_path: "{{ remote_tmp_dir }}/privatekey.pem"
+ ownca_path: '{{ remote_tmp_dir }}/ca_cert.pem'
+ ownca_privatekey_path: '{{ remote_tmp_dir }}/ca_privatekey.pem'
+ select_crypto_backend: '{{ select_crypto_backend }}'
+
+- name: (OwnCA, {{select_crypto_backend}}) Create ownca certificate with notBefore and notAfter (idempotent)
+ x509_certificate:
+ provider: ownca
+ ownca_not_before: 20181023133742Z
+ ownca_not_after: 20191023133742Z
+ ignore_timestamps: false
+ path: "{{ remote_tmp_dir }}/ownca_cert3.pem"
+ csr_path: "{{ remote_tmp_dir }}/csr.csr"
+ privatekey_path: "{{ remote_tmp_dir }}/privatekey.pem"
ownca_path: '{{ remote_tmp_dir }}/ca_cert.pem'
ownca_privatekey_path: '{{ remote_tmp_dir }}/ca_privatekey.pem'
select_crypto_backend: '{{ select_crypto_backend }}'
+ register: ownca_cert3_idem
- name: (OwnCA, {{select_crypto_backend}}) Create ownca certificate with relative notBefore and notAfter
x509_certificate:
diff --git a/ansible_collections/community/crypto/tests/integration/targets/x509_certificate/tasks/selfsigned.yml b/ansible_collections/community/crypto/tests/integration/targets/x509_certificate/tasks/selfsigned.yml
index a0f23643b..eeea25ddd 100644
--- a/ansible_collections/community/crypto/tests/integration/targets/x509_certificate/tasks/selfsigned.yml
+++ b/ansible_collections/community/crypto/tests/integration/targets/x509_certificate/tasks/selfsigned.yml
@@ -220,6 +220,18 @@
privatekey_path: "{{ remote_tmp_dir }}/privatekey3.pem"
select_crypto_backend: '{{ select_crypto_backend }}'
+- name: (Selfsigned, {{select_crypto_backend}}) Create certificate3 with notBefore and notAfter (idempotent)
+ x509_certificate:
+ provider: selfsigned
+ selfsigned_not_before: 20181023133742Z
+ selfsigned_not_after: 20191023133742Z
+ ignore_timestamps: false
+ path: "{{ remote_tmp_dir }}/cert3.pem"
+ csr_path: "{{ remote_tmp_dir }}/csr3.pem"
+ privatekey_path: "{{ remote_tmp_dir }}/privatekey3.pem"
+ select_crypto_backend: '{{ select_crypto_backend }}'
+ register: cert3_selfsigned_idem
+
- name: (Selfsigned, {{select_crypto_backend}}) Generate privatekey
openssl_privatekey:
path: '{{ remote_tmp_dir }}/privatekey_ecc.pem'
diff --git a/ansible_collections/community/crypto/tests/integration/targets/x509_certificate/tests/validate_ownca.yml b/ansible_collections/community/crypto/tests/integration/targets/x509_certificate/tests/validate_ownca.yml
index ac25b6295..ade7e6f51 100644
--- a/ansible_collections/community/crypto/tests/integration/targets/x509_certificate/tests/validate_ownca.yml
+++ b/ansible_collections/community/crypto/tests/integration/targets/x509_certificate/tests/validate_ownca.yml
@@ -98,6 +98,11 @@
that:
- ownca_cert3_notAfter.stdout == 'Oct 23 13:37:42 2019'
+- name: (OwnCA validation, {{select_crypto_backend}}) Validate idempotency
+ assert:
+ that:
+ - ownca_cert3_idem is not changed
+
- name: (OwnCA validation, {{select_crypto_backend}}) Validate ownca ECC certificate (test - ownca certificate pubkey)
shell: '{{ openssl_binary }} x509 -noout -pubkey -in {{ remote_tmp_dir }}/ownca_cert_ecc.pem'
register: ownca_cert_ecc_pubkey
diff --git a/ansible_collections/community/crypto/tests/integration/targets/x509_certificate/tests/validate_selfsigned.yml b/ansible_collections/community/crypto/tests/integration/targets/x509_certificate/tests/validate_selfsigned.yml
index c76310437..c7254eb3e 100644
--- a/ansible_collections/community/crypto/tests/integration/targets/x509_certificate/tests/validate_selfsigned.yml
+++ b/ansible_collections/community/crypto/tests/integration/targets/x509_certificate/tests/validate_selfsigned.yml
@@ -139,6 +139,11 @@
that:
- cert3_notAfter.stdout == 'Oct 23 13:37:42 2019'
+- name: (Selfsigned validation, {{select_crypto_backend}}) Validate idempotency
+ assert:
+ that:
+ - cert3_selfsigned_idem is not changed
+
- name: (Selfsigned validation, {{select_crypto_backend}}) Validate ECC certificate (test - privatekey's pubkey)
shell: '{{ openssl_binary }} ec -pubout -in {{ remote_tmp_dir }}/privatekey_ecc.pem'
register: privatekey_ecc_pubkey
diff --git a/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/backend_data.py b/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/backend_data.py
index 988bcdaeb..c4aa09a6a 100644
--- a/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/backend_data.py
+++ b/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/backend_data.py
@@ -9,8 +9,10 @@ __metaclass__ = type
import base64
import datetime
import os
+import sys
from ansible_collections.community.crypto.plugins.module_utils.acme.backends import (
+ CertificateInformation,
CryptoBackend,
)
@@ -79,6 +81,12 @@ TEST_CSRS = [
TEST_CERT = load_fixture("cert_1.pem")
+TEST_CERT_2 = load_fixture("cert_2.pem")
+
+
+TEST_CERT_OPENSSL_OUTPUT = load_fixture("cert_1.txt") # OpenSSL 3.3.0 output
+TEST_CERT_OPENSSL_OUTPUT_2 = load_fixture("cert_2.txt") # OpenSSL 3.3.0 output
+TEST_CERT_OPENSSL_OUTPUT_2B = load_fixture("cert_2-b.txt") # OpenSSL 1.1.1f output
TEST_CERT_DAYS = [
@@ -88,6 +96,81 @@ TEST_CERT_DAYS = [
]
+TEST_CERT_INFO = CertificateInformation(
+ not_valid_after=datetime.datetime(2018, 11, 26, 15, 28, 24),
+ not_valid_before=datetime.datetime(2018, 11, 25, 15, 28, 23),
+ serial_number=1,
+ subject_key_identifier=b'\x98\xD2\xFD\x3C\xCC\xCD\x69\x45\xFB\xE2\x8C\x30\x2C\x54\x62\x18\x34\xB7\x07\x73',
+ authority_key_identifier=None,
+)
+
+
+TEST_CERT_INFO_2 = CertificateInformation(
+ not_valid_before=datetime.datetime(2024, 5, 4, 20, 42, 21),
+ not_valid_after=datetime.datetime(2029, 5, 4, 20, 42, 20),
+ serial_number=4218235397573492796,
+ subject_key_identifier=b'\x17\xE5\x83\x22\x14\xEF\x74\xD3\xBE\x7E\x30\x76\x56\x1F\x51\x74\x65\x1F\xE9\xF0',
+ authority_key_identifier=b'\x13\xC3\x4C\x3E\x59\x45\xDD\xE3\x63\x51\xA3\x46\x80\xC4\x08\xC7\x14\xC0\x64\x4E',
+)
+
+
+TEST_CERT_INFO = [
+ (TEST_CERT, TEST_CERT_INFO, TEST_CERT_OPENSSL_OUTPUT),
+ (TEST_CERT_2, TEST_CERT_INFO_2, TEST_CERT_OPENSSL_OUTPUT_2),
+ (TEST_CERT_2, TEST_CERT_INFO_2, TEST_CERT_OPENSSL_OUTPUT_2B),
+]
+
+
+TEST_PARSE_ACME_TIMESTAMP = [
+ (
+ '2024-01-01T00:11:22Z',
+ dict(year=2024, month=1, day=1, hour=0, minute=11, second=22),
+ ),
+ (
+ '2024-01-01T00:11:22.123Z',
+ dict(year=2024, month=1, day=1, hour=0, minute=11, second=22, microsecond=123000),
+ ),
+ (
+ '2024-04-17T06:54:13.333333334Z',
+ dict(year=2024, month=4, day=17, hour=6, minute=54, second=13, microsecond=333333),
+ ),
+]
+
+if sys.version_info >= (3, 5):
+ TEST_PARSE_ACME_TIMESTAMP.extend([
+ (
+ '2024-01-01T00:11:22+0100',
+ dict(year=2023, month=12, day=31, hour=23, minute=11, second=22),
+ ),
+ (
+ '2024-01-01T00:11:22.123+0100',
+ dict(year=2023, month=12, day=31, hour=23, minute=11, second=22, microsecond=123000),
+ ),
+ ])
+
+
+TEST_INTERPOLATE_TIMESTAMP = [
+ (
+ dict(year=2024, month=1, day=1, hour=0, minute=0, second=0),
+ dict(year=2024, month=1, day=1, hour=1, minute=0, second=0),
+ 0.0,
+ dict(year=2024, month=1, day=1, hour=0, minute=0, second=0),
+ ),
+ (
+ dict(year=2024, month=1, day=1, hour=0, minute=0, second=0),
+ dict(year=2024, month=1, day=1, hour=1, minute=0, second=0),
+ 0.5,
+ dict(year=2024, month=1, day=1, hour=0, minute=30, second=0),
+ ),
+ (
+ dict(year=2024, month=1, day=1, hour=0, minute=0, second=0),
+ dict(year=2024, month=1, day=1, hour=1, minute=0, second=0),
+ 1.0,
+ dict(year=2024, month=1, day=1, hour=1, minute=0, second=0),
+ ),
+]
+
+
class FakeBackend(CryptoBackend):
def parse_key(self, key_file=None, key_content=None, passphrase=None):
raise BackendException('Not implemented in fake backend')
@@ -98,6 +181,9 @@ class FakeBackend(CryptoBackend):
def create_mac_key(self, alg, key):
raise BackendException('Not implemented in fake backend')
+ def get_ordered_csr_identifiers(self, csr_filename=None, csr_content=None):
+ raise BackendException('Not implemented in fake backend')
+
def get_csr_identifiers(self, csr_filename=None, csr_content=None):
raise BackendException('Not implemented in fake backend')
@@ -106,3 +192,6 @@ class FakeBackend(CryptoBackend):
def create_chain_matcher(self, criterium):
raise BackendException('Not implemented in fake backend')
+
+ def get_cert_information(self, cert_filename=None, cert_content=None):
+ raise BackendException('Not implemented in fake backend')
diff --git a/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_1.txt b/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_1.txt
new file mode 100644
index 000000000..e989d914d
--- /dev/null
+++ b/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_1.txt
@@ -0,0 +1,38 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 1 (0x1)
+ Signature Algorithm: ecdsa-with-SHA256
+ Issuer: CN=ansible.com
+ Validity
+ Not Before: Nov 25 15:28:23 2018 GMT
+ Not After : Nov 26 15:28:24 2018 GMT
+ Subject: CN=ansible.com
+ Subject Public Key Info:
+ Public Key Algorithm: id-ecPublicKey
+ Public-Key: (256 bit)
+ pub:
+ 04:00:9c:f4:c8:00:17:03:01:26:3a:14:d1:92:35:
+ f1:c2:07:9d:6d:63:ba:82:86:d8:33:79:56:b3:3a:
+ d2:eb:c1:bc:41:2c:e1:5d:1e:80:99:0d:c8:cd:90:
+ e2:9a:74:d3:5c:ee:d7:85:5c:a5:0d:3f:12:2f:31:
+ 38:e3:f1:29:9b
+ ASN1 OID: prime256v1
+ NIST CURVE: P-256
+ X509v3 extensions:
+ X509v3 Subject Alternative Name:
+ DNS:example.com, DNS:example.org
+ X509v3 Basic Constraints: critical
+ CA:FALSE
+ X509v3 Key Usage: critical
+ Digital Signature
+ X509v3 Extended Key Usage:
+ TLS Web Server Authentication
+ X509v3 Subject Key Identifier:
+ 98:D2:FD:3C:CC:CD:69:45:FB:E2:8C:30:2C:54:62:18:34:B7:07:73
+ Signature Algorithm: ecdsa-with-SHA256
+ Signature Value:
+ 30:46:02:21:00:bc:fb:52:bf:7a:93:2d:0e:7c:ce:43:f4:cc:
+ 05:98:28:36:8d:c7:2a:9b:f5:20:94:62:3d:fb:82:9e:38:42:
+ 32:02:21:00:c0:55:f8:b5:d9:65:41:2a:dd:d4:76:3f:8c:cb:
+ 07:c1:d2:b9:c0:7d:c9:90:af:fd:f9:f1:b0:c9:13:f5:d5:52
diff --git a/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_1.txt.license b/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_1.txt.license
new file mode 100644
index 000000000..edff8c768
--- /dev/null
+++ b/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_1.txt.license
@@ -0,0 +1,3 @@
+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
+SPDX-FileCopyrightText: Ansible Project
diff --git a/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2-b.txt b/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2-b.txt
new file mode 100644
index 000000000..78326443b
--- /dev/null
+++ b/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2-b.txt
@@ -0,0 +1,57 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 4218235397573492796 (0x3a8a2ebeb358c03c)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer: CN = Pebble Intermediate CA 734609
+ Validity
+ Not Before: May 4 20:42:21 2024 GMT
+ Not After : May 4 20:42:20 2029 GMT
+ Subject: CN = example.com
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ RSA Public-Key: (1024 bit)
+ Modulus:
+ 00:c1:43:a5:f9:ad:00:b7:bb:1b:73:27:00:b3:a2:
+ 4e:27:0d:ff:ae:64:3e:a0:7e:f9:28:56:48:47:21:
+ 9e:0f:d8:fb:69:b5:21:e8:98:84:60:6c:aa:73:b9:
+ 6e:d9:f6:19:ad:85:e0:c2:f6:80:d3:22:b8:5a:d6:
+ 3a:89:3e:2a:7a:fc:1d:bf:fc:69:20:e5:91:b8:34:
+ 52:26:c8:15:74:e1:36:0c:cd:ab:01:4a:ad:83:f5:
+ 0b:77:96:31:cf:1c:ea:6f:88:75:23:ac:51:a6:d8:
+ 77:43:1b:b3:44:93:2c:8d:05:25:fb:77:41:36:94:
+ 81:d5:ca:56:ff:b5:23:b2:a5
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Key Usage: critical
+ Digital Signature, Key Encipherment
+ X509v3 Extended Key Usage:
+ TLS Web Server Authentication, TLS Web Client Authentication
+ X509v3 Basic Constraints: critical
+ CA:FALSE
+ X509v3 Subject Key Identifier:
+ 17:E5:83:22:14:EF:74:D3:BE:7E:30:76:56:1F:51:74:65:1F:E9:F0
+ X509v3 Authority Key Identifier:
+ keyid:13:C3:4C:3E:59:45:DD:E3:63:51:A3:46:80:C4:08:C7:14:C0:64:4E
+
+ Authority Information Access:
+ OCSP - URI:http://10.88.0.74:5000/ocsp
+
+ X509v3 Subject Alternative Name:
+ DNS:example.com
+ Signature Algorithm: sha256WithRSAEncryption
+ 31:43:de:b6:48:f4:b8:30:46:25:65:e6:91:22:33:1b:d1:ba:
+ 3f:60:f8:c3:18:32:72:e9:f8:d1:88:11:5a:0a:86:dc:1d:6d:
+ a5:ea:58:cd:05:ea:cd:5e:40:86:c1:ae:d5:cd:2e:8a:ca:50:
+ ee:df:bd:cf:6c:d9:20:3b:4b:49:f8:d5:8a:e3:be:f3:dd:24:
+ b2:7f:3f:3b:bf:e6:8d:7a:f8:8f:4b:6e:25:60:80:33:6f:0f:
+ 53:b7:7d:94:2a:d2:4a:db:3a:2f:70:79:d7:bf:05:ed:df:10:
+ 61:e7:24:ac:b2:fc:03:bd:ad:8c:e1:f3:1d:cc:78:99:e3:22:
+ 59:bf:c5:92:57:95:92:56:35:fc:05:8b:26:10:c5:1b:87:17:
+ 64:0b:bd:33:a9:54:d5:c0:2b:43:56:1b:52:d3:4f:8b:6f:25:
+ 06:58:7f:6f:aa:27:35:05:d5:57:6d:83:a0:73:de:40:3f:67:
+ 1c:5a:92:c6:37:e6:8f:c7:b8:91:d7:50:b9:4d:d4:f2:92:1f:
+ 8b:93:0c:e2:b4:b8:d7:1d:8e:ce:6d:19:dc:8f:12:8e:c0:f2:
+ 92:3b:95:5a:8c:c8:69:0e:0b:f7:fa:1f:55:62:80:7c:e2:f6:
+ 41:3f:7d:69:36:9e:7c:90:7e:d7:3b:e6:a3:15:de:a4:7d:95:
+ 13:46:c6:1a
diff --git a/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2-b.txt.license b/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2-b.txt.license
new file mode 100644
index 000000000..edff8c768
--- /dev/null
+++ b/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2-b.txt.license
@@ -0,0 +1,3 @@
+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
+SPDX-FileCopyrightText: Ansible Project
diff --git a/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2.pem b/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2.pem
new file mode 100644
index 000000000..92aecb621
--- /dev/null
+++ b/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDDjCCAfagAwIBAgIIOoouvrNYwDwwDQYJKoZIhvcNAQELBQAwKDEmMCQGA1UE
+AxMdUGViYmxlIEludGVybWVkaWF0ZSBDQSA3MzQ2MDkwHhcNMjQwNTA0MjA0MjIx
+WhcNMjkwNTA0MjA0MjIwWjAWMRQwEgYDVQQDEwtleGFtcGxlLmNvbTCBnzANBgkq
+hkiG9w0BAQEFAAOBjQAwgYkCgYEAwUOl+a0At7sbcycAs6JOJw3/rmQ+oH75KFZI
+RyGeD9j7abUh6JiEYGyqc7lu2fYZrYXgwvaA0yK4WtY6iT4qevwdv/xpIOWRuDRS
+JsgVdOE2DM2rAUqtg/ULd5Yxzxzqb4h1I6xRpth3QxuzRJMsjQUl+3dBNpSB1cpW
+/7UjsqUCAwEAAaOB0TCBzjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYB
+BQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFBflgyIU73TT
+vn4wdlYfUXRlH+nwMB8GA1UdIwQYMBaAFBPDTD5ZRd3jY1GjRoDECMcUwGROMDcG
+CCsGAQUFBwEBBCswKTAnBggrBgEFBQcwAYYbaHR0cDovLzEwLjg4LjAuNzQ6NTAw
+MC9vY3NwMBYGA1UdEQQPMA2CC2V4YW1wbGUuY29tMA0GCSqGSIb3DQEBCwUAA4IB
+AQAxQ962SPS4MEYlZeaRIjMb0bo/YPjDGDJy6fjRiBFaCobcHW2l6ljNBerNXkCG
+wa7VzS6KylDu373PbNkgO0tJ+NWK477z3SSyfz87v+aNeviPS24lYIAzbw9Tt32U
+KtJK2zovcHnXvwXt3xBh5ySssvwDva2M4fMdzHiZ4yJZv8WSV5WSVjX8BYsmEMUb
+hxdkC70zqVTVwCtDVhtS00+LbyUGWH9vqic1BdVXbYOgc95AP2ccWpLGN+aPx7iR
+11C5TdTykh+LkwzitLjXHY7ObRncjxKOwPKSO5VajMhpDgv3+h9VYoB84vZBP31p
+Np58kH7XO+ajFd6kfZUTRsYa
+-----END CERTIFICATE-----
diff --git a/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2.pem.license b/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2.pem.license
new file mode 100644
index 000000000..edff8c768
--- /dev/null
+++ b/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2.pem.license
@@ -0,0 +1,3 @@
+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
+SPDX-FileCopyrightText: Ansible Project
diff --git a/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2.txt b/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2.txt
new file mode 100644
index 000000000..3cda74955
--- /dev/null
+++ b/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2.txt
@@ -0,0 +1,56 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 4218235397573492796 (0x3a8a2ebeb358c03c)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer: CN=Pebble Intermediate CA 734609
+ Validity
+ Not Before: May 4 20:42:21 2024 GMT
+ Not After : May 4 20:42:20 2029 GMT
+ Subject: CN=example.com
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ Public-Key: (1024 bit)
+ Modulus:
+ 00:c1:43:a5:f9:ad:00:b7:bb:1b:73:27:00:b3:a2:
+ 4e:27:0d:ff:ae:64:3e:a0:7e:f9:28:56:48:47:21:
+ 9e:0f:d8:fb:69:b5:21:e8:98:84:60:6c:aa:73:b9:
+ 6e:d9:f6:19:ad:85:e0:c2:f6:80:d3:22:b8:5a:d6:
+ 3a:89:3e:2a:7a:fc:1d:bf:fc:69:20:e5:91:b8:34:
+ 52:26:c8:15:74:e1:36:0c:cd:ab:01:4a:ad:83:f5:
+ 0b:77:96:31:cf:1c:ea:6f:88:75:23:ac:51:a6:d8:
+ 77:43:1b:b3:44:93:2c:8d:05:25:fb:77:41:36:94:
+ 81:d5:ca:56:ff:b5:23:b2:a5
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Key Usage: critical
+ Digital Signature, Key Encipherment
+ X509v3 Extended Key Usage:
+ TLS Web Server Authentication, TLS Web Client Authentication
+ X509v3 Basic Constraints: critical
+ CA:FALSE
+ X509v3 Subject Key Identifier:
+ 17:E5:83:22:14:EF:74:D3:BE:7E:30:76:56:1F:51:74:65:1F:E9:F0
+ X509v3 Authority Key Identifier:
+ 13:C3:4C:3E:59:45:DD:E3:63:51:A3:46:80:C4:08:C7:14:C0:64:4E
+ Authority Information Access:
+ OCSP - URI:http://10.88.0.74:5000/ocsp
+ X509v3 Subject Alternative Name:
+ DNS:example.com
+ Signature Algorithm: sha256WithRSAEncryption
+ Signature Value:
+ 31:43:de:b6:48:f4:b8:30:46:25:65:e6:91:22:33:1b:d1:ba:
+ 3f:60:f8:c3:18:32:72:e9:f8:d1:88:11:5a:0a:86:dc:1d:6d:
+ a5:ea:58:cd:05:ea:cd:5e:40:86:c1:ae:d5:cd:2e:8a:ca:50:
+ ee:df:bd:cf:6c:d9:20:3b:4b:49:f8:d5:8a:e3:be:f3:dd:24:
+ b2:7f:3f:3b:bf:e6:8d:7a:f8:8f:4b:6e:25:60:80:33:6f:0f:
+ 53:b7:7d:94:2a:d2:4a:db:3a:2f:70:79:d7:bf:05:ed:df:10:
+ 61:e7:24:ac:b2:fc:03:bd:ad:8c:e1:f3:1d:cc:78:99:e3:22:
+ 59:bf:c5:92:57:95:92:56:35:fc:05:8b:26:10:c5:1b:87:17:
+ 64:0b:bd:33:a9:54:d5:c0:2b:43:56:1b:52:d3:4f:8b:6f:25:
+ 06:58:7f:6f:aa:27:35:05:d5:57:6d:83:a0:73:de:40:3f:67:
+ 1c:5a:92:c6:37:e6:8f:c7:b8:91:d7:50:b9:4d:d4:f2:92:1f:
+ 8b:93:0c:e2:b4:b8:d7:1d:8e:ce:6d:19:dc:8f:12:8e:c0:f2:
+ 92:3b:95:5a:8c:c8:69:0e:0b:f7:fa:1f:55:62:80:7c:e2:f6:
+ 41:3f:7d:69:36:9e:7c:90:7e:d7:3b:e6:a3:15:de:a4:7d:95:
+ 13:46:c6:1a
diff --git a/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2.txt.license b/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2.txt.license
new file mode 100644
index 000000000..edff8c768
--- /dev/null
+++ b/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2.txt.license
@@ -0,0 +1,3 @@
+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
+SPDX-FileCopyrightText: Ansible Project
diff --git a/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/test_backend_cryptography.py b/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/test_backend_cryptography.py
index 59da68a3b..9186e2430 100644
--- a/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/test_backend_cryptography.py
+++ b/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/test_backend_cryptography.py
@@ -16,11 +16,22 @@ from ansible_collections.community.crypto.plugins.module_utils.acme.backend_cryp
CryptographyBackend,
)
+from ansible_collections.community.crypto.plugins.module_utils.crypto.support import (
+ ensure_utc_timezone,
+)
+
+from ansible_collections.community.crypto.plugins.module_utils.crypto.cryptography_support import (
+ CRYPTOGRAPHY_TIMEZONE,
+)
+
from .backend_data import (
TEST_KEYS,
TEST_CSRS,
TEST_CERT,
TEST_CERT_DAYS,
+ TEST_CERT_INFO,
+ TEST_PARSE_ACME_TIMESTAMP,
+ TEST_INTERPOLATE_TIMESTAMP,
)
@@ -64,3 +75,49 @@ def test_certdays_cryptography(now, expected_days, tmpdir):
assert days == expected_days
days = backend.get_cert_days(cert_content=TEST_CERT, now=now)
assert days == expected_days
+
+
+@pytest.mark.parametrize("cert_content, expected_cert_info, openssl_output", TEST_CERT_INFO)
+def test_get_cert_information(cert_content, expected_cert_info, openssl_output, tmpdir):
+ fn = tmpdir / 'test-cert.pem'
+ fn.write(cert_content)
+ module = MagicMock()
+ backend = CryptographyBackend(module)
+
+ if CRYPTOGRAPHY_TIMEZONE:
+ expected_cert_info = expected_cert_info._replace(
+ not_valid_after=ensure_utc_timezone(expected_cert_info.not_valid_after),
+ not_valid_before=ensure_utc_timezone(expected_cert_info.not_valid_before),
+ )
+
+ cert_info = backend.get_cert_information(cert_filename=str(fn))
+ assert cert_info == expected_cert_info
+ cert_info = backend.get_cert_information(cert_content=cert_content)
+ assert cert_info == expected_cert_info
+
+
+def test_now():
+ module = MagicMock()
+ backend = CryptographyBackend(module)
+ now = backend.get_now()
+ assert CRYPTOGRAPHY_TIMEZONE == (now.tzinfo is not None)
+
+
+@pytest.mark.parametrize("input, expected", TEST_PARSE_ACME_TIMESTAMP)
+def test_parse_acme_timestamp(input, expected):
+ module = MagicMock()
+ backend = CryptographyBackend(module)
+ ts_expected = backend.get_utc_datetime(**expected)
+ timestamp = backend.parse_acme_timestamp(input)
+ assert ts_expected == timestamp
+
+
+@pytest.mark.parametrize("start, end, percentage, expected", TEST_INTERPOLATE_TIMESTAMP)
+def test_interpolate_timestamp(start, end, percentage, expected):
+ module = MagicMock()
+ backend = CryptographyBackend(module)
+ ts_start = backend.get_utc_datetime(**start)
+ ts_end = backend.get_utc_datetime(**end)
+ ts_expected = backend.get_utc_datetime(**expected)
+ timestamp = backend.interpolate_timestamp(ts_start, ts_end, percentage)
+ assert ts_expected == timestamp
diff --git a/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/test_backend_openssl_cli.py b/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/test_backend_openssl_cli.py
index dd30cf795..5138a6202 100644
--- a/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/test_backend_openssl_cli.py
+++ b/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/test_backend_openssl_cli.py
@@ -18,6 +18,12 @@ from ansible_collections.community.crypto.plugins.module_utils.acme.backend_open
from .backend_data import (
TEST_KEYS,
TEST_CSRS,
+ TEST_CERT,
+ TEST_CERT_OPENSSL_OUTPUT,
+ TEST_CERT_DAYS,
+ TEST_CERT_INFO,
+ TEST_PARSE_ACME_TIMESTAMP,
+ TEST_INTERPOLATE_TIMESTAMP,
)
@@ -61,3 +67,56 @@ def test_normalize_ip(ip, result):
module = MagicMock()
backend = OpenSSLCLIBackend(module, openssl_binary='openssl')
assert backend._normalize_ip(ip) == result
+
+
+@pytest.mark.parametrize("now, expected_days", TEST_CERT_DAYS)
+def test_certdays_cryptography(now, expected_days, tmpdir):
+ fn = tmpdir / 'test-cert.pem'
+ fn.write(TEST_CERT)
+ module = MagicMock()
+ module.run_command = MagicMock(return_value=(0, TEST_CERT_OPENSSL_OUTPUT, 0))
+ backend = OpenSSLCLIBackend(module, openssl_binary='openssl')
+ days = backend.get_cert_days(cert_filename=str(fn), now=now)
+ assert days == expected_days
+ days = backend.get_cert_days(cert_content=TEST_CERT, now=now)
+ assert days == expected_days
+
+
+@pytest.mark.parametrize("cert_content, expected_cert_info, openssl_output", TEST_CERT_INFO)
+def test_get_cert_information(cert_content, expected_cert_info, openssl_output, tmpdir):
+ fn = tmpdir / 'test-cert.pem'
+ fn.write(cert_content)
+ module = MagicMock()
+ module.run_command = MagicMock(return_value=(0, openssl_output, 0))
+ backend = OpenSSLCLIBackend(module, openssl_binary='openssl')
+ cert_info = backend.get_cert_information(cert_filename=str(fn))
+ assert cert_info == expected_cert_info
+ cert_info = backend.get_cert_information(cert_content=cert_content)
+ assert cert_info == expected_cert_info
+
+
+def test_now():
+ module = MagicMock()
+ backend = OpenSSLCLIBackend(module, openssl_binary='openssl')
+ now = backend.get_now()
+ assert now.tzinfo is None
+
+
+@pytest.mark.parametrize("input, expected", TEST_PARSE_ACME_TIMESTAMP)
+def test_parse_acme_timestamp(input, expected):
+ module = MagicMock()
+ backend = OpenSSLCLIBackend(module, openssl_binary='openssl')
+ ts_expected = backend.get_utc_datetime(**expected)
+ timestamp = backend.parse_acme_timestamp(input)
+ assert ts_expected == timestamp
+
+
+@pytest.mark.parametrize("start, end, percentage, expected", TEST_INTERPOLATE_TIMESTAMP)
+def test_interpolate_timestamp(start, end, percentage, expected):
+ module = MagicMock()
+ backend = OpenSSLCLIBackend(module, openssl_binary='openssl')
+ ts_start = backend.get_utc_datetime(**start)
+ ts_end = backend.get_utc_datetime(**end)
+ ts_expected = backend.get_utc_datetime(**expected)
+ timestamp = backend.interpolate_timestamp(ts_start, ts_end, percentage)
+ assert ts_expected == timestamp
diff --git a/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/test_utils.py b/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/test_utils.py
index 9bdd8eb6e..5cc318ac2 100644
--- a/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/test_utils.py
+++ b/ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/test_utils.py
@@ -6,12 +6,20 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
+import datetime
+
import pytest
+from ansible_collections.community.crypto.plugins.module_utils.acme.backends import (
+ CertificateInformation,
+)
from ansible_collections.community.crypto.plugins.module_utils.acme.utils import (
nopad_b64,
pem_to_der,
+ process_links,
+ parse_retry_after,
+ compute_cert_id,
)
from .backend_data import (
@@ -27,6 +35,73 @@ NOPAD_B64 = [
]
+TEST_LINKS_HEADER = [
+ (
+ {},
+ [],
+ ),
+ (
+ {
+ 'link': '<foo>; rel="bar"'
+ },
+ [
+ ('foo', 'bar'),
+ ],
+ ),
+ (
+ {
+ 'link': '<foo>; rel="bar", <baz>; rel="bam"'
+ },
+ [
+ ('foo', 'bar'),
+ ('baz', 'bam'),
+ ],
+ ),
+ (
+ {
+ 'link': '<https://one.example.com>; rel="preconnect", <https://two.example.com>; rel="preconnect", <https://three.example.com>; rel="preconnect"'
+ },
+ [
+ ('https://one.example.com', 'preconnect'),
+ ('https://two.example.com', 'preconnect'),
+ ('https://three.example.com', 'preconnect'),
+ ],
+ ),
+]
+
+
+TEST_RETRY_AFTER_HEADER = [
+ ('120', datetime.datetime(2024, 4, 29, 0, 2, 0)),
+ ('Wed, 21 Oct 2015 07:28:00 GMT', datetime.datetime(2015, 10, 21, 7, 28, 0)),
+]
+
+
+TEST_COMPUTE_CERT_ID = [
+ (
+ CertificateInformation(
+ not_valid_after=datetime.datetime(2018, 11, 26, 15, 28, 24),
+ not_valid_before=datetime.datetime(2018, 11, 25, 15, 28, 23),
+ serial_number=1,
+ subject_key_identifier=None,
+ authority_key_identifier=b'\x00\xff',
+ ),
+ 'AP8.AQ',
+ ),
+ (
+ # AKI, serial number, and expected result taken from
+ # https://letsencrypt.org/2024/04/25/guide-to-integrating-ari-into-existing-acme-clients.html#step-3-constructing-the-ari-certid
+ CertificateInformation(
+ not_valid_after=datetime.datetime(2018, 11, 26, 15, 28, 24),
+ not_valid_before=datetime.datetime(2018, 11, 25, 15, 28, 23),
+ serial_number=0x87654321,
+ subject_key_identifier=None,
+ authority_key_identifier=b'\x69\x88\x5B\x6B\x87\x46\x40\x41\xE1\xB3\x7B\x84\x7B\xA0\xAE\x2C\xDE\x01\xC8\xD4',
+ ),
+ 'aYhba4dGQEHhs3uEe6CuLN4ByNQ.AIdlQyE',
+ ),
+]
+
+
@pytest.mark.parametrize("value, result", NOPAD_B64)
def test_nopad_b64(value, result):
assert nopad_b64(value.encode('utf-8')) == result
@@ -37,3 +112,25 @@ def test_pem_to_der(pem, der, tmpdir):
fn = tmpdir / 'test.pem'
fn.write(pem)
assert pem_to_der(str(fn)) == der
+
+
+@pytest.mark.parametrize("value, expected_result", TEST_LINKS_HEADER)
+def test_process_links(value, expected_result):
+ data = []
+
+ def callback(url, rel):
+ data.append((url, rel))
+
+ process_links(value, callback)
+
+ assert expected_result == data
+
+
+@pytest.mark.parametrize("value, expected_result", TEST_RETRY_AFTER_HEADER)
+def test_parse_retry_after(value, expected_result):
+ assert expected_result == parse_retry_after(value, now=datetime.datetime(2024, 4, 29, 0, 0, 0))
+
+
+@pytest.mark.parametrize("cert_info, expected_result", TEST_COMPUTE_CERT_ID)
+def test_compute_cert_id(cert_info, expected_result):
+ assert expected_result == compute_cert_id(backend=None, cert_info=cert_info)
diff --git a/ansible_collections/community/crypto/tests/unit/plugins/module_utils/crypto/test_math.py b/ansible_collections/community/crypto/tests/unit/plugins/module_utils/crypto/test_math.py
new file mode 100644
index 000000000..4fd917713
--- /dev/null
+++ b/ansible_collections/community/crypto/tests/unit/plugins/module_utils/crypto/test_math.py
@@ -0,0 +1,117 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2024, Felix Fontein <felix@fontein.de>
+# 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
+
+import pytest
+
+from ansible_collections.community.crypto.plugins.module_utils.crypto.math import (
+ binary_exp_mod,
+ simple_gcd,
+ quick_is_not_prime,
+ convert_int_to_bytes,
+ convert_int_to_hex,
+ convert_bytes_to_int,
+)
+
+
+@pytest.mark.parametrize('f, e, m, result', [
+ (0, 0, 5, 1),
+ (0, 1, 5, 0),
+ (2, 1, 5, 2),
+ (2, 2, 5, 4),
+ (2, 3, 5, 3),
+ (2, 10, 5, 4),
+])
+def test_binary_exp_mod(f, e, m, result):
+ value = binary_exp_mod(f, e, m)
+ print(value)
+ assert value == result
+
+
+@pytest.mark.parametrize('a, b, result', [
+ (0, -123, -123),
+ (0, 123, 123),
+ (-123, 0, -123),
+ (123, 0, 123),
+ (-123, 1, 1),
+ (123, 1, 1),
+ (1, -123, -1),
+ (1, 123, 1),
+ (1024, 10, 2),
+])
+def test_simple_gcd(a, b, result):
+ value = simple_gcd(a, b)
+ print(value)
+ assert value == result
+
+
+@pytest.mark.parametrize('n, result', [
+ (-2, True),
+ (0, True),
+ (1, True),
+ (2, False),
+ (3, False),
+ (4, True),
+ (5, False),
+ (6, True),
+ (7, False),
+ (8, True),
+ (9, True),
+ (10, True),
+ (211, False), # the smallest prime number >= 200
+])
+def test_quick_is_not_prime(n, result):
+ value = quick_is_not_prime(n)
+ print(value)
+ assert value == result
+
+
+@pytest.mark.parametrize('no, count, result', [
+ (0, None, b''),
+ (0, 1, b'\x00'),
+ (0, 2, b'\x00\x00'),
+ (1, None, b'\x01'),
+ (1, 2, b'\x00\x01'),
+ (255, None, b'\xff'),
+ (256, None, b'\x01\x00'),
+])
+def test_convert_int_to_bytes(no, count, result):
+ value = convert_int_to_bytes(no, count=count)
+ print(value)
+ assert value == result
+
+
+@pytest.mark.parametrize('no, digits, result', [
+ (0, None, '0'),
+ (1, None, '1'),
+ (16, None, '10'),
+ (1, 3, '001'),
+ (255, None, 'ff'),
+ (256, None, '100'),
+ (256, 2, '100'),
+ (256, 3, '100'),
+ (256, 4, '0100'),
+])
+def test_convert_int_to_hex(no, digits, result):
+ value = convert_int_to_hex(no, digits=digits)
+ print(value)
+ assert value == result
+
+
+@pytest.mark.parametrize('data, result', [
+ (b'', 0),
+ (b'\x00', 0),
+ (b'\x00\x01', 1),
+ (b'\x01', 1),
+ (b'\xff', 255),
+ (b'\x01\x00', 256),
+])
+def test_convert_bytes_to_int(data, result):
+ value = convert_bytes_to_int(data)
+ print(value)
+ assert value == result
diff --git a/ansible_collections/community/crypto/tests/unit/plugins/module_utils/test_time.py b/ansible_collections/community/crypto/tests/unit/plugins/module_utils/test_time.py
new file mode 100644
index 000000000..35a83f4e4
--- /dev/null
+++ b/ansible_collections/community/crypto/tests/unit/plugins/module_utils/test_time.py
@@ -0,0 +1,323 @@
+# Copyright (c) Ansible Project
+# 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
+
+
+import datetime
+import sys
+
+import pytest
+
+
+from ansible_collections.community.crypto.plugins.module_utils.time import (
+ add_or_remove_timezone,
+ get_now_datetime,
+ convert_relative_to_datetime,
+ ensure_utc_timezone,
+ from_epoch_seconds,
+ get_epoch_seconds,
+ get_relative_time_option,
+ remove_timezone,
+ UTC,
+)
+
+
+TEST_REMOVE_TIMEZONE = [
+ (
+ datetime.datetime(2024, 1, 1, 0, 1, 2, tzinfo=UTC),
+ datetime.datetime(2024, 1, 1, 0, 1, 2),
+ ),
+ (
+ datetime.datetime(2024, 1, 1, 0, 1, 2),
+ datetime.datetime(2024, 1, 1, 0, 1, 2),
+ ),
+]
+
+TEST_UTC_TIMEZONE = [
+ (
+ datetime.datetime(2024, 1, 1, 0, 1, 2),
+ datetime.datetime(2024, 1, 1, 0, 1, 2, tzinfo=UTC),
+ ),
+ (
+ datetime.datetime(2024, 1, 1, 0, 1, 2, tzinfo=UTC),
+ datetime.datetime(2024, 1, 1, 0, 1, 2, tzinfo=UTC),
+ ),
+]
+
+TEST_EPOCH_SECONDS = [
+ (0, dict(year=1970, day=1, month=1, hour=0, minute=0, second=0, microsecond=0)),
+ (1E-6, dict(year=1970, day=1, month=1, hour=0, minute=0, second=0, microsecond=1)),
+ (1E-3, dict(year=1970, day=1, month=1, hour=0, minute=0, second=0, microsecond=1000)),
+ (3691.2, dict(year=1970, day=1, month=1, hour=1, minute=1, second=31, microsecond=200000)),
+]
+
+TEST_EPOCH_TO_SECONDS = [
+ (datetime.datetime(1970, 1, 1, 0, 1, 2, 0), 62),
+ (datetime.datetime(1970, 1, 1, 0, 1, 2, 0, tzinfo=UTC), 62),
+]
+
+TEST_CONVERT_RELATIVE_TO_DATETIME = [
+ (
+ '+0',
+ False,
+ datetime.datetime(2024, 1, 1, 0, 0, 0),
+ datetime.datetime(2024, 1, 1, 0, 0, 0),
+ ),
+ (
+ '+1s',
+ False,
+ datetime.datetime(2024, 1, 1, 0, 0, 0, tzinfo=UTC),
+ datetime.datetime(2024, 1, 1, 0, 0, 1),
+ ),
+ (
+ '-10w20d30h40m50s',
+ False,
+ datetime.datetime(2024, 1, 1, 0, 0, 0, tzinfo=UTC),
+ datetime.datetime(2023, 10, 1, 17, 19, 10),
+ ),
+ (
+ '+0',
+ True,
+ datetime.datetime(2024, 1, 1, 0, 0, 0),
+ datetime.datetime(2024, 1, 1, 0, 0, 0, tzinfo=UTC),
+ ),
+ (
+ '+1s',
+ True,
+ datetime.datetime(2024, 1, 1, 0, 0, 0, tzinfo=UTC),
+ datetime.datetime(2024, 1, 1, 0, 0, 1, tzinfo=UTC),
+ ),
+ (
+ '-10w20d30h40m50s',
+ True,
+ datetime.datetime(2024, 1, 1, 0, 0, 0),
+ datetime.datetime(2023, 10, 1, 17, 19, 10, tzinfo=UTC),
+ ),
+]
+
+TEST_GET_RELATIVE_TIME_OPTION = [
+ (
+ '+1d2h3m4s',
+ 'foo',
+ 'cryptography',
+ False,
+ datetime.datetime(2024, 1, 1, 0, 0, 0),
+ datetime.datetime(2024, 1, 2, 2, 3, 4),
+ ),
+ (
+ '-1w10d24h',
+ 'foo',
+ 'cryptography',
+ False,
+ datetime.datetime(2024, 1, 1, 0, 0, 0),
+ datetime.datetime(2023, 12, 14, 0, 0, 0),
+ ),
+ (
+ '20240102040506Z',
+ 'foo',
+ 'cryptography',
+ False,
+ datetime.datetime(2024, 1, 1, 0, 0, 0),
+ datetime.datetime(2024, 1, 2, 4, 5, 6),
+ ),
+ (
+ '202401020405Z',
+ 'foo',
+ 'cryptography',
+ False,
+ datetime.datetime(2024, 1, 1, 0, 0, 0),
+ datetime.datetime(2024, 1, 2, 4, 5, 0),
+ ),
+ (
+ '+1d2h3m4s',
+ 'foo',
+ 'cryptography',
+ True,
+ datetime.datetime(2024, 1, 1, 0, 0, 0),
+ datetime.datetime(2024, 1, 2, 2, 3, 4, tzinfo=UTC),
+ ),
+ (
+ '-1w10d24h',
+ 'foo',
+ 'cryptography',
+ True,
+ datetime.datetime(2024, 1, 1, 0, 0, 0),
+ datetime.datetime(2023, 12, 14, 0, 0, 0, tzinfo=UTC),
+ ),
+ (
+ '20240102040506Z',
+ 'foo',
+ 'cryptography',
+ True,
+ datetime.datetime(2024, 1, 1, 0, 0, 0),
+ datetime.datetime(2024, 1, 2, 4, 5, 6, tzinfo=UTC),
+ ),
+ (
+ '202401020405Z',
+ 'foo',
+ 'cryptography',
+ True,
+ datetime.datetime(2024, 1, 1, 0, 0, 0),
+ datetime.datetime(2024, 1, 2, 4, 5, 0, tzinfo=UTC),
+ ),
+ (
+ '+1d2h3m4s',
+ 'foo',
+ 'pyopenssl',
+ False,
+ datetime.datetime(2024, 1, 1, 0, 0, 0),
+ '20240102020304Z',
+ ),
+ (
+ '-1w10d24h',
+ 'foo',
+ 'pyopenssl',
+ False,
+ datetime.datetime(2024, 1, 1, 0, 0, 0),
+ '20231214000000Z',
+ ),
+ (
+ '20240102040506Z',
+ 'foo',
+ 'pyopenssl',
+ False,
+ datetime.datetime(2024, 1, 1, 0, 0, 0),
+ '20240102040506Z',
+ ),
+ (
+ '202401020405Z',
+ 'foo',
+ 'pyopenssl',
+ False,
+ datetime.datetime(2024, 1, 1, 0, 0, 0),
+ '202401020405Z',
+ ),
+]
+
+
+if sys.version_info >= (3, 5):
+ ONE_HOUR_PLUS = datetime.timezone(datetime.timedelta(hours=1))
+
+ TEST_REMOVE_TIMEZONE.extend([
+ (
+ datetime.datetime(2024, 1, 1, 0, 1, 2, tzinfo=ONE_HOUR_PLUS),
+ datetime.datetime(2023, 12, 31, 23, 1, 2),
+ ),
+ ])
+ TEST_UTC_TIMEZONE.extend([
+ (
+ datetime.datetime(2024, 1, 1, 0, 1, 2, tzinfo=ONE_HOUR_PLUS),
+ datetime.datetime(2023, 12, 31, 23, 1, 2, tzinfo=UTC),
+ ),
+ ])
+ TEST_EPOCH_TO_SECONDS.extend([
+ (datetime.datetime(1970, 1, 1, 0, 1, 2, 0, tzinfo=ONE_HOUR_PLUS), 62 - 3600),
+ ])
+ TEST_GET_RELATIVE_TIME_OPTION.extend([
+ (
+ '20240102040506+0100',
+ 'foo',
+ 'cryptography',
+ False,
+ datetime.datetime(2024, 1, 1, 0, 0, 0),
+ datetime.datetime(2024, 1, 2, 3, 5, 6),
+ ),
+ (
+ '202401020405+0100',
+ 'foo',
+ 'cryptography',
+ False,
+ datetime.datetime(2024, 1, 1, 0, 0, 0),
+ datetime.datetime(2024, 1, 2, 3, 5, 0),
+ ),
+ (
+ '20240102040506+0100',
+ 'foo',
+ 'cryptography',
+ True,
+ datetime.datetime(2024, 1, 1, 0, 0, 0),
+ datetime.datetime(2024, 1, 2, 3, 5, 6, tzinfo=UTC),
+ ),
+ (
+ '202401020405+0100',
+ 'foo',
+ 'cryptography',
+ True,
+ datetime.datetime(2024, 1, 1, 0, 0, 0),
+ datetime.datetime(2024, 1, 2, 3, 5, 0, tzinfo=UTC),
+ ),
+ (
+ '20240102040506+0100',
+ 'foo',
+ 'pyopenssl',
+ False,
+ datetime.datetime(2024, 1, 1, 0, 0, 0),
+ '20240102040506+0100',
+ ),
+ (
+ '202401020405+0100',
+ 'foo',
+ 'pyopenssl',
+ False,
+ datetime.datetime(2024, 1, 1, 0, 0, 0),
+ '202401020405+0100',
+ ),
+ ])
+
+
+@pytest.mark.parametrize("input, expected", TEST_REMOVE_TIMEZONE)
+def test_remove_timezone(input, expected):
+ output_1 = remove_timezone(input)
+ assert expected == output_1
+ output_2 = add_or_remove_timezone(input, with_timezone=False)
+ assert expected == output_2
+
+
+@pytest.mark.parametrize("input, expected", TEST_UTC_TIMEZONE)
+def test_utc_timezone(input, expected):
+ output_1 = ensure_utc_timezone(input)
+ assert expected == output_1
+ output_2 = add_or_remove_timezone(input, with_timezone=True)
+ assert expected == output_2
+
+
+def test_get_now_datetime():
+ output_1 = get_now_datetime(with_timezone=False)
+ assert output_1.tzinfo is None
+ output_2 = get_now_datetime(with_timezone=True)
+ assert output_2.tzinfo is not None
+ assert output_2.tzinfo == UTC
+
+
+@pytest.mark.parametrize("seconds, timestamp", TEST_EPOCH_SECONDS)
+def test_epoch_seconds(seconds, timestamp):
+ ts_wo_tz = datetime.datetime(**timestamp)
+ assert seconds == get_epoch_seconds(ts_wo_tz)
+ timestamp_w_tz = dict(timestamp)
+ timestamp_w_tz['tzinfo'] = UTC
+ ts_w_tz = datetime.datetime(**timestamp_w_tz)
+ assert seconds == get_epoch_seconds(ts_w_tz)
+ output_1 = from_epoch_seconds(seconds, with_timezone=False)
+ assert ts_wo_tz == output_1
+ output_2 = from_epoch_seconds(seconds, with_timezone=True)
+ assert ts_w_tz == output_2
+
+
+@pytest.mark.parametrize("timestamp, expected_seconds", TEST_EPOCH_TO_SECONDS)
+def test_epoch_to_seconds(timestamp, expected_seconds):
+ assert expected_seconds == get_epoch_seconds(timestamp)
+
+
+@pytest.mark.parametrize("relative_time_string, with_timezone, now, expected", TEST_CONVERT_RELATIVE_TO_DATETIME)
+def test_convert_relative_to_datetime(relative_time_string, with_timezone, now, expected):
+ output = convert_relative_to_datetime(relative_time_string, with_timezone=with_timezone, now=now)
+ assert expected == output
+
+
+@pytest.mark.parametrize("input_string, input_name, backend, with_timezone, now, expected", TEST_GET_RELATIVE_TIME_OPTION)
+def test_get_relative_time_option(input_string, input_name, backend, with_timezone, now, expected):
+ output = get_relative_time_option(input_string, input_name, backend=backend, with_timezone=with_timezone, now=now)
+ assert expected == output
diff --git a/ansible_collections/community/dns/.github/workflows/ansible-test.yml b/ansible_collections/community/dns/.github/workflows/ansible-test.yml
index 186079a41..d8121c8f7 100644
--- a/ansible_collections/community/dns/.github/workflows/ansible-test.yml
+++ b/ansible_collections/community/dns/.github/workflows/ansible-test.yml
@@ -29,53 +29,30 @@ jobs:
ansible:
# It's important that Sanity is tested against all stable-X.Y branches
# Testing against `devel` may fail as new tests are added.
- - stable-2.9
- - stable-2.10
- - stable-2.11
- - stable-2.12
- - stable-2.13
- stable-2.14
- stable-2.15
- stable-2.16
- stable-2.17
- devel
- # Ansible-test on various stable branches does not yet work well with cgroups v2.
- # Since ubuntu-latest now uses Ubuntu 22.04, we need to fall back to the ubuntu-20.04
- # image for these stable branches. The list of branches where this is necessary will
- # shrink over time, check out https://github.com/ansible-collections/news-for-maintainers/issues/28
- # for the latest list.
- runs-on: >-
- ${{ contains(fromJson(
- '["stable-2.9", "stable-2.10", "stable-2.11"]'
- ), matrix.ansible) && 'ubuntu-20.04' || 'ubuntu-latest' }}
+ runs-on: ubuntu-latest
steps:
- name: Perform sanity testing
uses: felixfontein/ansible-test-gh-action@main
with:
ansible-core-version: ${{ matrix.ansible }}
+ codecov-token: ${{ secrets.CODECOV_TOKEN }}
testing-type: sanity
+ test-deps: >-
+ git+https://github.com/ansible-collections/community.library_inventory_filtering.git,stable-1
units:
- # Ansible-test on various stable branches does not yet work well with cgroups v2.
- # Since ubuntu-latest now uses Ubuntu 22.04, we need to fall back to the ubuntu-20.04
- # image for these stable branches. The list of branches where this is necessary will
- # shrink over time, check out https://github.com/ansible-collections/news-for-maintainers/issues/28
- # for the latest list.
- runs-on: >-
- ${{ contains(fromJson(
- '["stable-2.9", "stable-2.10", "stable-2.11"]'
- ), matrix.ansible) && 'ubuntu-20.04' || 'ubuntu-latest' }}
+ runs-on: ubuntu-latest
name: Units (Ⓐ${{ matrix.ansible }})
strategy:
# As soon as the first unit test fails, cancel the others to free up the CI queue
fail-fast: true
matrix:
ansible:
- - stable-2.9
- - stable-2.10
- - stable-2.11
- - stable-2.12
- - stable-2.13
- stable-2.14
- stable-2.15
- stable-2.16
@@ -89,12 +66,13 @@ jobs:
uses: felixfontein/ansible-test-gh-action@main
with:
ansible-core-version: ${{ matrix.ansible }}
+ codecov-token: ${{ secrets.CODECOV_TOKEN }}
testing-type: units
- # NOTE: we're installing with git to work around Galaxy being a huge PITA (https://github.com/ansible/galaxy/issues/2429)
pre-test-cmd: >-
- git clone --depth=1 --single-branch https://github.com/ansible-collections/community.internal_test_tools.git ../../community/internal_test_tools
- ;
tests/unit/replace-requirements.sh requirements-${{ matrix.ansible }}.txt
+ test-deps: >-
+ git+https://github.com/ansible-collections/community.internal_test_tools.git,main
+ git+https://github.com/ansible-collections/community.library_inventory_filtering.git,stable-1
integration:
# Ansible-test on various stable branches does not yet work well with cgroups v2.
@@ -119,26 +97,11 @@ jobs:
- "3.11"
- "3.12"
include:
- # 2.9
- - ansible: stable-2.9
- python: "2.7"
- - ansible: stable-2.9
- python: "3.6"
- # 2.10
- - ansible: stable-2.10
- python: "3.5"
- # 2.11
- - ansible: stable-2.11
+ # 2.14
+ - ansible: stable-2.14
python: "2.7"
- # 2.12
- - ansible: stable-2.12
- python: "2.6"
- - ansible: stable-2.12
+ - ansible: stable-2.14
python: "3.5"
- # 2.13
- - ansible: stable-2.13
- python: "3.6"
- # 2.14
- ansible: stable-2.14
python: "3.9"
# 2.15
@@ -165,11 +128,13 @@ jobs:
uses: felixfontein/ansible-test-gh-action@main
with:
ansible-core-version: ${{ matrix.ansible }}
+ codecov-token: ${{ secrets.CODECOV_TOKEN }}
integration-continue-on-error: 'false'
integration-diff: 'false'
integration-retry-on-error: 'true'
- # NOTE: we're installing with git to work around Galaxy being a huge PITA (https://github.com/ansible/galaxy/issues/2429)
pre-test-cmd: >-
tests/integration/replace-requirements.sh requirements-${{ matrix.ansible }}.txt
+ test-deps: >-
+ git+https://github.com/ansible-collections/community.library_inventory_filtering.git,stable-1
target-python-version: ${{ matrix.python }}
testing-type: integration
diff --git a/ansible_collections/community/dns/.github/workflows/ee.yml b/ansible_collections/community/dns/.github/workflows/ee.yml
index 9a2f1164b..afa820d0d 100644
--- a/ansible_collections/community/dns/.github/workflows/ee.yml
+++ b/ansible_collections/community/dns/.github/workflows/ee.yml
@@ -62,22 +62,6 @@ jobs:
ansible_runner: ansible-runner
base_image: quay.io/centos/centos:stream9
pre_base: '"#"'
- - name: ansible-core 2.13 @ RHEL UBI 8
- ansible_core: https://github.com/ansible/ansible/archive/stable-2.13.tar.gz
- ansible_runner: ansible-runner
- other_deps: |2
- python_interpreter:
- package_system: python39 python39-pip python39-wheel python39-cryptography
- base_image: docker.io/redhat/ubi8:latest
- pre_base: '"#"'
- - name: ansible-core 2.12 @ CentOS Stream 8
- ansible_core: https://github.com/ansible/ansible/archive/stable-2.12.tar.gz
- ansible_runner: ansible-runner
- other_deps: |2
- python_interpreter:
- package_system: python39 python39-pip python39-wheel python39-cryptography
- base_image: quay.io/centos/centos:stream8
- pre_base: '"#"'
runs-on: ubuntu-latest
steps:
- name: Check out code
@@ -88,7 +72,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v5
with:
- python-version: '3.11'
+ python-version: '3.12'
- name: Install ansible-builder and ansible-navigator
run: pip install ansible-builder ansible-navigator
diff --git a/ansible_collections/community/dns/.github/workflows/extra-tests.yml b/ansible_collections/community/dns/.github/workflows/extra-tests.yml
index 975404fa5..397b22af7 100644
--- a/ansible_collections/community/dns/.github/workflows/extra-tests.yml
+++ b/ansible_collections/community/dns/.github/workflows/extra-tests.yml
@@ -33,15 +33,16 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v5
with:
- python-version: '3.11'
+ python-version: '3.12'
- name: Install ansible-core
run: pip install https://github.com/ansible/ansible/archive/devel.tar.gz --disable-pip-version-check
- name: Install collection dependencies
- run: git clone --depth=1 --single-branch https://github.com/ansible-collections/community.internal_test_tools.git ./ansible_collections/community/internal_test_tools
- # NOTE: we're installing with git to work around Galaxy being a huge PITA (https://github.com/ansible/galaxy/issues/2429)
- # run: ansible-galaxy collection install community.internal_test_tools -p .
+ run: >-
+ ansible-galaxy collection install -p .
+ git+https://github.com/ansible-collections/community.internal_test_tools.git,main
+ git+https://github.com/ansible-collections/community.library_inventory_filtering.git,stable-1
- name: Run sanity tests
run: ../../community/internal_test_tools/tools/run.py --color
diff --git a/ansible_collections/community/dns/CHANGELOG.md b/ansible_collections/community/dns/CHANGELOG.md
index 9881ee7ed..95a940b1c 100644
--- a/ansible_collections/community/dns/CHANGELOG.md
+++ b/ansible_collections/community/dns/CHANGELOG.md
@@ -2,193 +2,239 @@
**Topics**
-- <a href="#v2-9-0">v2\.9\.0</a>
+- <a href="#v3-0-0">v3\.0\.0</a>
- <a href="#release-summary">Release Summary</a>
+ - <a href="#major-changes">Major Changes</a>
+ - <a href="#minor-changes">Minor Changes</a>
+ - <a href="#breaking-changes--porting-guide">Breaking Changes / Porting Guide</a>
+ - <a href="#removed-features-previously-deprecated">Removed Features \(previously deprecated\)</a>
- <a href="#bugfixes">Bugfixes</a>
+- <a href="#v2-9-0">v2\.9\.0</a>
+ - <a href="#release-summary-1">Release Summary</a>
+ - <a href="#bugfixes-1">Bugfixes</a>
- <a href="#new-plugins">New Plugins</a>
- <a href="#filter">Filter</a>
- <a href="#v2-8-3">v2\.8\.3</a>
- - <a href="#release-summary-1">Release Summary</a>
- - <a href="#bugfixes-1">Bugfixes</a>
-- <a href="#v2-8-2">v2\.8\.2</a>
- <a href="#release-summary-2">Release Summary</a>
- - <a href="#security-fixes">Security Fixes</a>
- <a href="#bugfixes-2">Bugfixes</a>
-- <a href="#v2-8-1">v2\.8\.1</a>
+- <a href="#v2-8-2">v2\.8\.2</a>
- <a href="#release-summary-3">Release Summary</a>
+ - <a href="#security-fixes">Security Fixes</a>
- <a href="#bugfixes-3">Bugfixes</a>
-- <a href="#v2-8-0">v2\.8\.0</a>
+- <a href="#v2-8-1">v2\.8\.1</a>
- <a href="#release-summary-4">Release Summary</a>
- - <a href="#minor-changes">Minor Changes</a>
- - <a href="#deprecated-features">Deprecated Features</a>
- <a href="#bugfixes-4">Bugfixes</a>
-- <a href="#v2-7-0">v2\.7\.0</a>
+- <a href="#v2-8-0">v2\.8\.0</a>
- <a href="#release-summary-5">Release Summary</a>
- <a href="#minor-changes-1">Minor Changes</a>
+ - <a href="#deprecated-features">Deprecated Features</a>
- <a href="#bugfixes-5">Bugfixes</a>
-- <a href="#v2-6-4">v2\.6\.4</a>
+- <a href="#v2-7-0">v2\.7\.0</a>
- <a href="#release-summary-6">Release Summary</a>
+ - <a href="#minor-changes-2">Minor Changes</a>
- <a href="#bugfixes-6">Bugfixes</a>
-- <a href="#v2-6-3">v2\.6\.3</a>
+- <a href="#v2-6-4">v2\.6\.4</a>
- <a href="#release-summary-7">Release Summary</a>
- <a href="#bugfixes-7">Bugfixes</a>
-- <a href="#v2-6-2">v2\.6\.2</a>
+- <a href="#v2-6-3">v2\.6\.3</a>
- <a href="#release-summary-8">Release Summary</a>
- <a href="#bugfixes-8">Bugfixes</a>
-- <a href="#v2-6-1">v2\.6\.1</a>
+- <a href="#v2-6-2">v2\.6\.2</a>
- <a href="#release-summary-9">Release Summary</a>
- <a href="#bugfixes-9">Bugfixes</a>
-- <a href="#v2-6-0">v2\.6\.0</a>
+- <a href="#v2-6-1">v2\.6\.1</a>
- <a href="#release-summary-10">Release Summary</a>
- - <a href="#minor-changes-2">Minor Changes</a>
- <a href="#bugfixes-10">Bugfixes</a>
+- <a href="#v2-6-0">v2\.6\.0</a>
+ - <a href="#release-summary-11">Release Summary</a>
+ - <a href="#minor-changes-3">Minor Changes</a>
+ - <a href="#bugfixes-11">Bugfixes</a>
- <a href="#new-plugins-1">New Plugins</a>
- <a href="#lookup">Lookup</a>
- <a href="#new-modules">New Modules</a>
- <a href="#v2-5-7">v2\.5\.7</a>
- - <a href="#release-summary-11">Release Summary</a>
- - <a href="#bugfixes-11">Bugfixes</a>
-- <a href="#v2-5-6">v2\.5\.6</a>
- <a href="#release-summary-12">Release Summary</a>
+ - <a href="#bugfixes-12">Bugfixes</a>
+- <a href="#v2-5-6">v2\.5\.6</a>
+ - <a href="#release-summary-13">Release Summary</a>
- <a href="#known-issues">Known Issues</a>
- <a href="#v2-5-5">v2\.5\.5</a>
- - <a href="#release-summary-13">Release Summary</a>
- - <a href="#bugfixes-12">Bugfixes</a>
-- <a href="#v2-5-4">v2\.5\.4</a>
- <a href="#release-summary-14">Release Summary</a>
- <a href="#bugfixes-13">Bugfixes</a>
-- <a href="#v2-5-3">v2\.5\.3</a>
+- <a href="#v2-5-4">v2\.5\.4</a>
- <a href="#release-summary-15">Release Summary</a>
- <a href="#bugfixes-14">Bugfixes</a>
-- <a href="#v2-5-2">v2\.5\.2</a>
+- <a href="#v2-5-3">v2\.5\.3</a>
- <a href="#release-summary-16">Release Summary</a>
- <a href="#bugfixes-15">Bugfixes</a>
-- <a href="#v2-5-1">v2\.5\.1</a>
+- <a href="#v2-5-2">v2\.5\.2</a>
- <a href="#release-summary-17">Release Summary</a>
- <a href="#bugfixes-16">Bugfixes</a>
-- <a href="#v2-5-0">v2\.5\.0</a>
+- <a href="#v2-5-1">v2\.5\.1</a>
- <a href="#release-summary-18">Release Summary</a>
- - <a href="#minor-changes-3">Minor Changes</a>
- - <a href="#deprecated-features-1">Deprecated Features</a>
- <a href="#bugfixes-17">Bugfixes</a>
-- <a href="#v2-4-2">v2\.4\.2</a>
+- <a href="#v2-5-0">v2\.5\.0</a>
- <a href="#release-summary-19">Release Summary</a>
+ - <a href="#minor-changes-4">Minor Changes</a>
+ - <a href="#deprecated-features-1">Deprecated Features</a>
- <a href="#bugfixes-18">Bugfixes</a>
-- <a href="#v2-4-1">v2\.4\.1</a>
+- <a href="#v2-4-2">v2\.4\.2</a>
- <a href="#release-summary-20">Release Summary</a>
- <a href="#bugfixes-19">Bugfixes</a>
-- <a href="#v2-4-0">v2\.4\.0</a>
+- <a href="#v2-4-1">v2\.4\.1</a>
- <a href="#release-summary-21">Release Summary</a>
- - <a href="#minor-changes-4">Minor Changes</a>
- <a href="#bugfixes-20">Bugfixes</a>
-- <a href="#v2-3-4">v2\.3\.4</a>
+- <a href="#v2-4-0">v2\.4\.0</a>
- <a href="#release-summary-22">Release Summary</a>
+ - <a href="#minor-changes-5">Minor Changes</a>
- <a href="#bugfixes-21">Bugfixes</a>
-- <a href="#v2-3-3">v2\.3\.3</a>
+- <a href="#v2-3-4">v2\.3\.4</a>
- <a href="#release-summary-23">Release Summary</a>
- <a href="#bugfixes-22">Bugfixes</a>
-- <a href="#v2-3-2">v2\.3\.2</a>
+- <a href="#v2-3-3">v2\.3\.3</a>
- <a href="#release-summary-24">Release Summary</a>
- <a href="#bugfixes-23">Bugfixes</a>
-- <a href="#v2-3-1">v2\.3\.1</a>
+- <a href="#v2-3-2">v2\.3\.2</a>
- <a href="#release-summary-25">Release Summary</a>
- - <a href="#minor-changes-5">Minor Changes</a>
- <a href="#bugfixes-24">Bugfixes</a>
-- <a href="#v2-3-0">v2\.3\.0</a>
+- <a href="#v2-3-1">v2\.3\.1</a>
- <a href="#release-summary-26">Release Summary</a>
- <a href="#minor-changes-6">Minor Changes</a>
- <a href="#bugfixes-25">Bugfixes</a>
-- <a href="#v2-2-1">v2\.2\.1</a>
+- <a href="#v2-3-0">v2\.3\.0</a>
- <a href="#release-summary-27">Release Summary</a>
+ - <a href="#minor-changes-7">Minor Changes</a>
- <a href="#bugfixes-26">Bugfixes</a>
-- <a href="#v2-2-0">v2\.2\.0</a>
+- <a href="#v2-2-1">v2\.2\.1</a>
- <a href="#release-summary-28">Release Summary</a>
- - <a href="#minor-changes-7">Minor Changes</a>
- <a href="#bugfixes-27">Bugfixes</a>
-- <a href="#v2-1-1">v2\.1\.1</a>
+- <a href="#v2-2-0">v2\.2\.0</a>
- <a href="#release-summary-29">Release Summary</a>
+ - <a href="#minor-changes-8">Minor Changes</a>
- <a href="#bugfixes-28">Bugfixes</a>
-- <a href="#v2-1-0">v2\.1\.0</a>
+- <a href="#v2-1-1">v2\.1\.1</a>
- <a href="#release-summary-30">Release Summary</a>
- - <a href="#minor-changes-8">Minor Changes</a>
- <a href="#bugfixes-29">Bugfixes</a>
-- <a href="#v2-0-9">v2\.0\.9</a>
+- <a href="#v2-1-0">v2\.1\.0</a>
- <a href="#release-summary-31">Release Summary</a>
+ - <a href="#minor-changes-9">Minor Changes</a>
- <a href="#bugfixes-30">Bugfixes</a>
-- <a href="#v2-0-8">v2\.0\.8</a>
+- <a href="#v2-0-9">v2\.0\.9</a>
- <a href="#release-summary-32">Release Summary</a>
- <a href="#bugfixes-31">Bugfixes</a>
-- <a href="#v2-0-7">v2\.0\.7</a>
+- <a href="#v2-0-8">v2\.0\.8</a>
- <a href="#release-summary-33">Release Summary</a>
- <a href="#bugfixes-32">Bugfixes</a>
-- <a href="#v2-0-6">v2\.0\.6</a>
+- <a href="#v2-0-7">v2\.0\.7</a>
- <a href="#release-summary-34">Release Summary</a>
- <a href="#bugfixes-33">Bugfixes</a>
-- <a href="#v2-0-5">v2\.0\.5</a>
+- <a href="#v2-0-6">v2\.0\.6</a>
- <a href="#release-summary-35">Release Summary</a>
- <a href="#bugfixes-34">Bugfixes</a>
-- <a href="#v2-0-4">v2\.0\.4</a>
+- <a href="#v2-0-5">v2\.0\.5</a>
- <a href="#release-summary-36">Release Summary</a>
- <a href="#bugfixes-35">Bugfixes</a>
-- <a href="#v2-0-3">v2\.0\.3</a>
+- <a href="#v2-0-4">v2\.0\.4</a>
- <a href="#release-summary-37">Release Summary</a>
- - <a href="#minor-changes-9">Minor Changes</a>
-- <a href="#v2-0-2">v2\.0\.2</a>
- - <a href="#release-summary-38">Release Summary</a>
- <a href="#bugfixes-36">Bugfixes</a>
-- <a href="#v2-0-1">v2\.0\.1</a>
+- <a href="#v2-0-3">v2\.0\.3</a>
+ - <a href="#release-summary-38">Release Summary</a>
+ - <a href="#minor-changes-10">Minor Changes</a>
+- <a href="#v2-0-2">v2\.0\.2</a>
- <a href="#release-summary-39">Release Summary</a>
- <a href="#bugfixes-37">Bugfixes</a>
-- <a href="#v2-0-0">v2\.0\.0</a>
+- <a href="#v2-0-1">v2\.0\.1</a>
- <a href="#release-summary-40">Release Summary</a>
- - <a href="#minor-changes-10">Minor Changes</a>
- - <a href="#breaking-changes--porting-guide">Breaking Changes / Porting Guide</a>
- - <a href="#deprecated-features-2">Deprecated Features</a>
- <a href="#bugfixes-38">Bugfixes</a>
+- <a href="#v2-0-0">v2\.0\.0</a>
+ - <a href="#release-summary-41">Release Summary</a>
+ - <a href="#minor-changes-11">Minor Changes</a>
+ - <a href="#breaking-changes--porting-guide-1">Breaking Changes / Porting Guide</a>
+ - <a href="#deprecated-features-2">Deprecated Features</a>
+ - <a href="#bugfixes-39">Bugfixes</a>
- <a href="#new-plugins-2">New Plugins</a>
- <a href="#inventory">Inventory</a>
- <a href="#new-modules-1">New Modules</a>
- <a href="#v1-2-0">v1\.2\.0</a>
- - <a href="#release-summary-41">Release Summary</a>
- - <a href="#minor-changes-11">Minor Changes</a>
- - <a href="#bugfixes-39">Bugfixes</a>
-- <a href="#v1-1-0">v1\.1\.0</a>
- <a href="#release-summary-42">Release Summary</a>
- <a href="#minor-changes-12">Minor Changes</a>
- <a href="#bugfixes-40">Bugfixes</a>
-- <a href="#v1-0-1">v1\.0\.1</a>
+- <a href="#v1-1-0">v1\.1\.0</a>
- <a href="#release-summary-43">Release Summary</a>
+ - <a href="#minor-changes-13">Minor Changes</a>
- <a href="#bugfixes-41">Bugfixes</a>
-- <a href="#v1-0-0">v1\.0\.0</a>
+- <a href="#v1-0-1">v1\.0\.1</a>
- <a href="#release-summary-44">Release Summary</a>
- <a href="#bugfixes-42">Bugfixes</a>
-- <a href="#v0-3-0">v0\.3\.0</a>
+- <a href="#v1-0-0">v1\.0\.0</a>
- <a href="#release-summary-45">Release Summary</a>
- - <a href="#minor-changes-13">Minor Changes</a>
- <a href="#bugfixes-43">Bugfixes</a>
- - <a href="#new-modules-2">New Modules</a>
-- <a href="#v0-2-0">v0\.2\.0</a>
+- <a href="#v0-3-0">v0\.3\.0</a>
- <a href="#release-summary-46">Release Summary</a>
- - <a href="#major-changes">Major Changes</a>
- <a href="#minor-changes-14">Minor Changes</a>
- - <a href="#breaking-changes--porting-guide-1">Breaking Changes / Porting Guide</a>
- <a href="#bugfixes-44">Bugfixes</a>
+ - <a href="#new-modules-2">New Modules</a>
+- <a href="#v0-2-0">v0\.2\.0</a>
+ - <a href="#release-summary-47">Release Summary</a>
+ - <a href="#major-changes-1">Major Changes</a>
+ - <a href="#minor-changes-15">Minor Changes</a>
+ - <a href="#breaking-changes--porting-guide-2">Breaking Changes / Porting Guide</a>
+ - <a href="#bugfixes-45">Bugfixes</a>
- <a href="#new-modules-3">New Modules</a>
- <a href="#v0-1-0">v0\.1\.0</a>
- - <a href="#release-summary-47">Release Summary</a>
+ - <a href="#release-summary-48">Release Summary</a>
- <a href="#new-plugins-3">New Plugins</a>
- <a href="#filter-1">Filter</a>
- <a href="#new-modules-4">New Modules</a>
+<a id="v3-0-0"></a>
+## v3\.0\.0
+
+<a id="release-summary"></a>
+### Release Summary
+
+\.\.\.
+
+<a id="major-changes"></a>
+### Major Changes
+
+* The <code>community\.dns</code> collection now depends on the <code>community\.library\_inventory\_filtering\_v1</code> 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 <code>ansible\-galaxy collection install</code>\, 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)\)\.
+
+<a id="minor-changes"></a>
+### Minor Changes
+
+* inventory plugins \- add <code>filter</code> 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 \(<code>search\=false</code>\)\, or potentially as a relative domain name \(<code>search\=true</code>\) \([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)\)\.
+
+<a id="breaking-changes--porting-guide"></a>
+### Breaking Changes / Porting Guide
+
+* The default for the <code>txt\_character\_encoding</code> options in various modules and plugins changed from <code>octal</code> to <code>decimal</code> \([https\://github\.com/ansible\-collections/community\.dns/pull/196](https\://github\.com/ansible\-collections/community\.dns/pull/196)\)\.
+* inventory plugins \- <code>filters</code> is now no longer an alias of <code>simple\_filters</code>\, 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 <code>plugin</code> 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 <code>search</code> changed from <code>false</code> \(implicit default for community\.dns 2\.x\.y\) to <code>true</code> \([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)\)\.
+
+<a id="removed-features-previously-deprecated"></a>
+### Removed Features \(previously deprecated\)
+
+* 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 <code>name</code> 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 <code>hosttech\_dns\_record\_sets</code> module has been removed \([https\://github\.com/ansible\-collections/community\.dns/pull/196](https\://github\.com/ansible\-collections/community\.dns/pull/196)\)\.
+
+<a id="bugfixes"></a>
+### Bugfixes
+
+* Update Public Suffix List\.
+
<a id="v2-9-0"></a>
## v2\.9\.0
-<a id="release-summary"></a>
+<a id="release-summary-1"></a>
### Release Summary
Feature and bugfix release\.
-<a id="bugfixes"></a>
+<a id="bugfixes-1"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -206,12 +252,12 @@ Feature and bugfix release\.
<a id="v2-8-3"></a>
## v2\.8\.3
-<a id="release-summary-1"></a>
+<a id="release-summary-2"></a>
### Release Summary
Bugfix release\.
-<a id="bugfixes-1"></a>
+<a id="bugfixes-2"></a>
### Bugfixes
* 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)\)\.
@@ -220,7 +266,7 @@ Bugfix release\.
<a id="v2-8-2"></a>
## v2\.8\.2
-<a id="release-summary-2"></a>
+<a id="release-summary-3"></a>
### Release Summary
Bugfix release\.
@@ -230,7 +276,7 @@ Bugfix release\.
* 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)\)\.
-<a id="bugfixes-2"></a>
+<a id="bugfixes-3"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -238,12 +284,12 @@ Bugfix release\.
<a id="v2-8-1"></a>
## v2\.8\.1
-<a id="release-summary-3"></a>
+<a id="release-summary-4"></a>
### Release Summary
Maintenance release with updated PSL\.
-<a id="bugfixes-3"></a>
+<a id="bugfixes-4"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -251,12 +297,12 @@ Maintenance release with updated PSL\.
<a id="v2-8-0"></a>
## v2\.8\.0
-<a id="release-summary-4"></a>
+<a id="release-summary-5"></a>
### Release Summary
Feature and maintenance release with updated PSL\.
-<a id="minor-changes"></a>
+<a id="minor-changes-1"></a>
### Minor Changes
* hetzner\_dns\_records and hosttech\_dns\_records inventory plugins \- the <code>filters</code> option has been renamed to <code>simple\_filters</code>\. The old name still works until community\.hrobot 2\.0\.0\. Then it will change to allow more complex filtering with the <code>community\.library\_inventory\_filtering\_v1</code> collection\'s functionality \([https\://github\.com/ansible\-collections/community\.dns/pull/181](https\://github\.com/ansible\-collections/community\.dns/pull/181)\)\.
@@ -266,7 +312,7 @@ Feature and maintenance release with updated PSL\.
* hetzner\_dns\_records and hosttech\_dns\_records inventory plugins \- the <code>filters</code> option has been renamed to <code>simple\_filters</code>\. 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)\)\.
-<a id="bugfixes-4"></a>
+<a id="bugfixes-5"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -274,18 +320,18 @@ Feature and maintenance release with updated PSL\.
<a id="v2-7-0"></a>
## v2\.7\.0
-<a id="release-summary-5"></a>
+<a id="release-summary-6"></a>
### Release Summary
Bugfix and feature release with updated PSL\.
-<a id="minor-changes-1"></a>
+<a id="minor-changes-2"></a>
### Minor Changes
* nameserver\_info and nameserver\_record\_info \- add <code>server</code> 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 <code>server</code> parameter to specify custom DNS servers \([https\://github\.com/ansible\-collections/community\.dns/pull/178](https\://github\.com/ansible\-collections/community\.dns/pull/178)\)\.
-<a id="bugfixes-5"></a>
+<a id="bugfixes-6"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -294,12 +340,12 @@ Bugfix and feature release with updated PSL\.
<a id="v2-6-4"></a>
## v2\.6\.4
-<a id="release-summary-6"></a>
+<a id="release-summary-7"></a>
### Release Summary
Bugfix and maintenance version\.
-<a id="bugfixes-6"></a>
+<a id="bugfixes-7"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -308,12 +354,12 @@ Bugfix and maintenance version\.
<a id="v2-6-3"></a>
## v2\.6\.3
-<a id="release-summary-7"></a>
+<a id="release-summary-8"></a>
### Release Summary
Maintenance release with updated PSL\.
-<a id="bugfixes-7"></a>
+<a id="bugfixes-8"></a>
### Bugfixes
* 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)\)\.
@@ -322,12 +368,12 @@ Maintenance release with updated PSL\.
<a id="v2-6-2"></a>
## v2\.6\.2
-<a id="release-summary-8"></a>
+<a id="release-summary-9"></a>
### Release Summary
Maintenance release with updated PSL\.
-<a id="bugfixes-8"></a>
+<a id="bugfixes-9"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -335,12 +381,12 @@ Maintenance release with updated PSL\.
<a id="v2-6-1"></a>
## v2\.6\.1
-<a id="release-summary-9"></a>
+<a id="release-summary-10"></a>
### Release Summary
Maintenance release with updated PSL\.
-<a id="bugfixes-9"></a>
+<a id="bugfixes-10"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -348,18 +394,18 @@ Maintenance release with updated PSL\.
<a id="v2-6-0"></a>
## v2\.6\.0
-<a id="release-summary-10"></a>
+<a id="release-summary-11"></a>
### Release Summary
Feature release with an updated Public Suffix List\.
-<a id="minor-changes-2"></a>
+<a id="minor-changes-3"></a>
### Minor Changes
* wait\_for\_txt \- add <code>servfail\_retries</code> 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)\)\.
-<a id="bugfixes-10"></a>
+<a id="bugfixes-11"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -383,12 +429,12 @@ Feature release with an updated Public Suffix List\.
<a id="v2-5-7"></a>
## v2\.5\.7
-<a id="release-summary-11"></a>
+<a id="release-summary-12"></a>
### Release Summary
Regular maintenance release with updated Public Suffix List\.
-<a id="bugfixes-11"></a>
+<a id="bugfixes-12"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -396,7 +442,7 @@ Regular maintenance release with updated Public Suffix List\.
<a id="v2-5-6"></a>
## v2\.5\.6
-<a id="release-summary-12"></a>
+<a id="release-summary-13"></a>
### Release Summary
Maintenance release\.
@@ -417,12 +463,12 @@ for the rendered HTML version of the documentation of the latest release\.
<a id="v2-5-5"></a>
## v2\.5\.5
-<a id="release-summary-13"></a>
+<a id="release-summary-14"></a>
### Release Summary
Maintenance release with updated PSL\.
-<a id="bugfixes-12"></a>
+<a id="bugfixes-13"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -430,12 +476,12 @@ Maintenance release with updated PSL\.
<a id="v2-5-4"></a>
## v2\.5\.4
-<a id="release-summary-14"></a>
+<a id="release-summary-15"></a>
### Release Summary
Maintenance release with updated PSL\.
-<a id="bugfixes-13"></a>
+<a id="bugfixes-14"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -443,12 +489,12 @@ Maintenance release with updated PSL\.
<a id="v2-5-3"></a>
## v2\.5\.3
-<a id="release-summary-15"></a>
+<a id="release-summary-16"></a>
### Release Summary
Maintenance release with updated PSL\.
-<a id="bugfixes-14"></a>
+<a id="bugfixes-15"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -456,12 +502,12 @@ Maintenance release with updated PSL\.
<a id="v2-5-2"></a>
## v2\.5\.2
-<a id="release-summary-16"></a>
+<a id="release-summary-17"></a>
### Release Summary
Maintenance release with improved documentation and updated PSL\.
-<a id="bugfixes-15"></a>
+<a id="bugfixes-16"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -469,12 +515,12 @@ Maintenance release with improved documentation and updated PSL\.
<a id="v2-5-1"></a>
## v2\.5\.1
-<a id="release-summary-17"></a>
+<a id="release-summary-18"></a>
### Release Summary
Maintenance release \(updated PSL\)\.
-<a id="bugfixes-16"></a>
+<a id="bugfixes-17"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -482,12 +528,12 @@ Maintenance release \(updated PSL\)\.
<a id="v2-5-0"></a>
## v2\.5\.0
-<a id="release-summary-18"></a>
+<a id="release-summary-19"></a>
### Release Summary
Feature and bugfix release with updated PSL\.
-<a id="minor-changes-3"></a>
+<a id="minor-changes-4"></a>
### Minor Changes
* hosttech inventory plugin \- allow to configure token\, username\, and password with <code>ANSIBLE\_HOSTTECH\_DNS\_TOKEN</code>\, <code>ANSIBLE\_HOSTTECH\_API\_USERNAME</code>\, and <code>ANSIBLE\_HOSTTECH\_API\_PASSWORD</code> environment variables\, respectively \([https\://github\.com/ansible\-collections/community\.dns/pull/131](https\://github\.com/ansible\-collections/community\.dns/pull/131)\)\.
@@ -498,7 +544,7 @@ Feature and bugfix release with updated PSL\.
* The default of the newly added option <code>txt\_character\_encoding</code> will change from <code>octal</code> to <code>decimal</code> in community\.dns 3\.0\.0\. The new default will be compatible with [RFC 1035](https\://www\.ietf\.org/rfc/rfc1035\.txt) \([https\://github\.com/ansible\-collections/community\.dns/pull/134](https\://github\.com/ansible\-collections/community\.dns/pull/134)\)\.
-<a id="bugfixes-17"></a>
+<a id="bugfixes-18"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -507,12 +553,12 @@ Feature and bugfix release with updated PSL\.
<a id="v2-4-2"></a>
## v2\.4\.2
-<a id="release-summary-19"></a>
+<a id="release-summary-20"></a>
### Release Summary
Maintenance release with updated Public Suffix List\.
-<a id="bugfixes-18"></a>
+<a id="bugfixes-19"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -520,12 +566,12 @@ Maintenance release with updated Public Suffix List\.
<a id="v2-4-1"></a>
## v2\.4\.1
-<a id="release-summary-20"></a>
+<a id="release-summary-21"></a>
### Release Summary
Regular maintenance release\.
-<a id="bugfixes-19"></a>
+<a id="bugfixes-20"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -534,19 +580,19 @@ Regular maintenance release\.
<a id="v2-4-0"></a>
## v2\.4\.0
-<a id="release-summary-21"></a>
+<a id="release-summary-22"></a>
### Release Summary
Feature and maintenance release\.
-<a id="minor-changes-4"></a>
+<a id="minor-changes-5"></a>
### Minor Changes
* Added a <code>community\.dns\.hetzner</code> module defaults group / action group\. Use with <code>group/community\.dns\.hetzner</code> to provide options for all Hetzner DNS modules \([https\://github\.com/ansible\-collections/community\.dns/pull/119](https\://github\.com/ansible\-collections/community\.dns/pull/119)\)\.
* Added a <code>community\.dns\.hosttech</code> module defaults group / action group\. Use with <code>group/community\.dns\.hosttech</code> to provide options for all Hosttech DNS modules \([https\://github\.com/ansible\-collections/community\.dns/pull/119](https\://github\.com/ansible\-collections/community\.dns/pull/119)\)\.
* wait\_for\_txt \- the module now supports check mode\. The only practical change in behavior is that in check mode\, the module is now executed instead of skipped\. Since the module does not change anything\, it should have been marked as supporting check mode since it was originally added \([https\://github\.com/ansible\-collections/community\.dns/pull/119](https\://github\.com/ansible\-collections/community\.dns/pull/119)\)\.
-<a id="bugfixes-20"></a>
+<a id="bugfixes-21"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -554,12 +600,12 @@ Feature and maintenance release\.
<a id="v2-3-4"></a>
## v2\.3\.4
-<a id="release-summary-22"></a>
+<a id="release-summary-23"></a>
### Release Summary
Maintenance release with updated Public Suffix List\.
-<a id="bugfixes-21"></a>
+<a id="bugfixes-22"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -567,12 +613,12 @@ Maintenance release with updated Public Suffix List\.
<a id="v2-3-3"></a>
## v2\.3\.3
-<a id="release-summary-23"></a>
+<a id="release-summary-24"></a>
### Release Summary
Maintenance release including an updated Public Suffix List\.
-<a id="bugfixes-22"></a>
+<a id="bugfixes-23"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -580,12 +626,12 @@ Maintenance release including an updated Public Suffix List\.
<a id="v2-3-2"></a>
## v2\.3\.2
-<a id="release-summary-24"></a>
+<a id="release-summary-25"></a>
### Release Summary
Maintenance release with updated Public Suffix List\.
-<a id="bugfixes-23"></a>
+<a id="bugfixes-24"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -593,17 +639,17 @@ Maintenance release with updated Public Suffix List\.
<a id="v2-3-1"></a>
## v2\.3\.1
-<a id="release-summary-25"></a>
+<a id="release-summary-26"></a>
### Release Summary
Maintenance release including an updated Public Suffix List\.
-<a id="minor-changes-5"></a>
+<a id="minor-changes-6"></a>
### Minor Changes
* The collection repository conforms to the [REUSE specification](https\://reuse\.software/spec/) except for the changelog fragments \([https\://github\.com/ansible\-collections/community\.dns/pull/112](https\://github\.com/ansible\-collections/community\.dns/pull/112)\)\.
-<a id="bugfixes-24"></a>
+<a id="bugfixes-25"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -611,17 +657,17 @@ Maintenance release including an updated Public Suffix List\.
<a id="v2-3-0"></a>
## v2\.3\.0
-<a id="release-summary-26"></a>
+<a id="release-summary-27"></a>
### Release Summary
Maintenance release including an updated Public Suffix List\.
-<a id="minor-changes-6"></a>
+<a id="minor-changes-7"></a>
### Minor Changes
* All software licenses are now in the <code>LICENSES/</code> directory of the collection root\. Moreover\, <code>SPDX\-License\-Identifier\:</code> is used to declare the applicable license for every file that is not automatically generated \([https\://github\.com/ansible\-collections/community\.dns/pull/109](https\://github\.com/ansible\-collections/community\.dns/pull/109)\)\.
-<a id="bugfixes-25"></a>
+<a id="bugfixes-26"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -629,12 +675,12 @@ Maintenance release including an updated Public Suffix List\.
<a id="v2-2-1"></a>
## v2\.2\.1
-<a id="release-summary-27"></a>
+<a id="release-summary-28"></a>
### Release Summary
Maintenance release with updated Public Suffix List\.
-<a id="bugfixes-26"></a>
+<a id="bugfixes-27"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -642,18 +688,18 @@ Maintenance release with updated Public Suffix List\.
<a id="v2-2-0"></a>
## v2\.2\.0
-<a id="release-summary-28"></a>
+<a id="release-summary-29"></a>
### Release Summary
Feature release\.
-<a id="minor-changes-7"></a>
+<a id="minor-changes-8"></a>
### Minor Changes
* hetzner\_dns\_records and hosttech\_dns\_records inventory plugins \- allow to template provider\-specific credentials and the <code>zone\_name</code>\, <code>zone\_id</code> options \([https\://github\.com/ansible\-collections/community\.dns/pull/106](https\://github\.com/ansible\-collections/community\.dns/pull/106)\)\.
* wait\_for\_txt \- improve error messages so that in case of SERVFAILs or other DNS errors it is clear which record was queried from which DNS server \([https\://github\.com/ansible\-collections/community\.dns/pull/105](https\://github\.com/ansible\-collections/community\.dns/pull/105)\)\.
-<a id="bugfixes-27"></a>
+<a id="bugfixes-28"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -661,12 +707,12 @@ Feature release\.
<a id="v2-1-1"></a>
## v2\.1\.1
-<a id="release-summary-29"></a>
+<a id="release-summary-30"></a>
### Release Summary
Maintenance release with updated Public Suffix List\.
-<a id="bugfixes-28"></a>
+<a id="bugfixes-29"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -674,17 +720,17 @@ Maintenance release with updated Public Suffix List\.
<a id="v2-1-0"></a>
## v2\.1\.0
-<a id="release-summary-30"></a>
+<a id="release-summary-31"></a>
### Release Summary
Feature and maintenance release with updated PSL\.
-<a id="minor-changes-8"></a>
+<a id="minor-changes-9"></a>
### Minor Changes
* Prepare collection for inclusion in an Execution Environment by declaring its dependencies \([https\://github\.com/ansible\-collections/community\.dns/pull/93](https\://github\.com/ansible\-collections/community\.dns/pull/93)\)\.
-<a id="bugfixes-29"></a>
+<a id="bugfixes-30"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -692,12 +738,12 @@ Feature and maintenance release with updated PSL\.
<a id="v2-0-9"></a>
## v2\.0\.9
-<a id="release-summary-31"></a>
+<a id="release-summary-32"></a>
### Release Summary
Maintenance release with updated Public Suffix List and added collection links file\.
-<a id="bugfixes-30"></a>
+<a id="bugfixes-31"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -705,12 +751,12 @@ Maintenance release with updated Public Suffix List and added collection links f
<a id="v2-0-8"></a>
## v2\.0\.8
-<a id="release-summary-32"></a>
+<a id="release-summary-33"></a>
### Release Summary
Maintenance release with updated Public Suffix List\.
-<a id="bugfixes-31"></a>
+<a id="bugfixes-32"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -718,12 +764,12 @@ Maintenance release with updated Public Suffix List\.
<a id="v2-0-7"></a>
## v2\.0\.7
-<a id="release-summary-33"></a>
+<a id="release-summary-34"></a>
### Release Summary
Maintenance release with updated Public Suffix List\.
-<a id="bugfixes-32"></a>
+<a id="bugfixes-33"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -731,12 +777,12 @@ Maintenance release with updated Public Suffix List\.
<a id="v2-0-6"></a>
## v2\.0\.6
-<a id="release-summary-34"></a>
+<a id="release-summary-35"></a>
### Release Summary
Bugfix release\.
-<a id="bugfixes-33"></a>
+<a id="bugfixes-34"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -745,12 +791,12 @@ Bugfix release\.
<a id="v2-0-5"></a>
## v2\.0\.5
-<a id="release-summary-35"></a>
+<a id="release-summary-36"></a>
### Release Summary
Maintenance release with updated Public Suffix List\.
-<a id="bugfixes-34"></a>
+<a id="bugfixes-35"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -758,12 +804,12 @@ Maintenance release with updated Public Suffix List\.
<a id="v2-0-4"></a>
## v2\.0\.4
-<a id="release-summary-36"></a>
+<a id="release-summary-37"></a>
### Release Summary
Maintenance release with updated Public Suffix List\.
-<a id="bugfixes-35"></a>
+<a id="bugfixes-36"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -771,12 +817,12 @@ Maintenance release with updated Public Suffix List\.
<a id="v2-0-3"></a>
## v2\.0\.3
-<a id="release-summary-37"></a>
+<a id="release-summary-38"></a>
### Release Summary
Bugfix release\.
-<a id="minor-changes-9"></a>
+<a id="minor-changes-10"></a>
### Minor Changes
* HTTP API module utils \- fix usage of <code>fetch\_url</code> with changes in latest ansible\-core <code>devel</code> branch \([https\://github\.com/ansible\-collections/community\.dns/pull/73](https\://github\.com/ansible\-collections/community\.dns/pull/73)\)\.
@@ -784,12 +830,12 @@ Bugfix release\.
<a id="v2-0-2"></a>
## v2\.0\.2
-<a id="release-summary-38"></a>
+<a id="release-summary-39"></a>
### Release Summary
Regular maintenance release\.
-<a id="bugfixes-36"></a>
+<a id="bugfixes-37"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -797,12 +843,12 @@ Regular maintenance release\.
<a id="v2-0-1"></a>
## v2\.0\.1
-<a id="release-summary-39"></a>
+<a id="release-summary-40"></a>
### Release Summary
Maintenance release with Public Suffix List updates\.
-<a id="bugfixes-37"></a>
+<a id="bugfixes-38"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -810,12 +856,12 @@ Maintenance release with Public Suffix List updates\.
<a id="v2-0-0"></a>
## v2\.0\.0
-<a id="release-summary-40"></a>
+<a id="release-summary-41"></a>
### Release Summary
This release contains many new features\, modules and plugins\, but also has several breaking changes to the 1\.x\.y versions\. Please read the changelog carefully to determine what to change if you used an earlier version of this collection\.
-<a id="minor-changes-10"></a>
+<a id="minor-changes-11"></a>
### Minor Changes
* Add support for Hetzner DNS \([https\://github\.com/ansible\-collections/community\.dns/pull/27](https\://github\.com/ansible\-collections/community\.dns/pull/27)\)\.
@@ -831,7 +877,7 @@ This release contains many new features\, modules and plugins\, but also has sev
* hosttech\_dns\_record\_sets \- <code>records</code> has been renamed to <code>record\_sets</code>\. The old name <code>records</code> can still be used as an alias \([https\://github\.com/ansible\-collections/community\.dns/pull/31](https\://github\.com/ansible\-collections/community\.dns/pull/31)\)\.
* hosttech\_dns\_zone\_info \- return extra information as <code>zone\_info</code> \([https\://github\.com/ansible\-collections/community\.dns/pull/38](https\://github\.com/ansible\-collections/community\.dns/pull/38)\)\.
-<a id="breaking-changes--porting-guide"></a>
+<a id="breaking-changes--porting-guide-1"></a>
### Breaking Changes / Porting Guide
* All Hetzner modules and plugins which handle DNS records now work with unquoted TXT values by default\. The old behavior can be obtained by setting <code>txt\_transformation\=api</code> \([https\://github\.com/ansible\-collections/community\.dns/issues/48](https\://github\.com/ansible\-collections/community\.dns/issues/48)\, [https\://github\.com/ansible\-collections/community\.dns/pull/57](https\://github\.com/ansible\-collections/community\.dns/pull/57)\, [https\://github\.com/ansible\-collections/community\.dns/pull/60](https\://github\.com/ansible\-collections/community\.dns/pull/60)\)\.
@@ -850,7 +896,7 @@ This release contains many new features\, modules and plugins\, but also has sev
* The hosttech\_dns\_records module has been renamed to hosttech\_dns\_record\_sets\. The old name will stop working in community\.dns 3\.0\.0 \([https\://github\.com/ansible\-collections/community\.dns/pull/31](https\://github\.com/ansible\-collections/community\.dns/pull/31)\)\.
-<a id="bugfixes-38"></a>
+<a id="bugfixes-39"></a>
### Bugfixes
* Hetzner API \- interpret missing TTL as 300\, which is what the web console also does \([https\://github\.com/ansible\-collections/community\.dns/pull/42](https\://github\.com/ansible\-collections/community\.dns/pull/42)\)\.
@@ -888,19 +934,19 @@ This release contains many new features\, modules and plugins\, but also has sev
<a id="v1-2-0"></a>
## v1\.2\.0
-<a id="release-summary-41"></a>
+<a id="release-summary-42"></a>
### Release Summary
Last minor 1\.x\.0 version\. The 2\.0\.0 version will have some backwards incompatible changes to the <code>hosttech\_dns\_record</code> and <code>hosttech\_dns\_records</code> modules which will require user intervention\. These changes should result in a better UX\.
-<a id="minor-changes-11"></a>
+<a id="minor-changes-12"></a>
### Minor Changes
* hosttech modules \- add <code>api\_token</code> alias for <code>hosttech\_token</code> \([https\://github\.com/ansible\-collections/community\.dns/pull/26](https\://github\.com/ansible\-collections/community\.dns/pull/26)\)\.
* hosttech\_dns\_record \- in <code>diff</code> mode\, also return <code>diff</code> data structure when <code>changed</code> is <code>false</code> \([https\://github\.com/ansible\-collections/community\.dns/pull/28](https\://github\.com/ansible\-collections/community\.dns/pull/28)\)\.
* module utils \- add default implementation for some zone/record API functions\, and move common JSON API code to helper class \([https\://github\.com/ansible\-collections/community\.dns/pull/26](https\://github\.com/ansible\-collections/community\.dns/pull/26)\)\.
-<a id="bugfixes-39"></a>
+<a id="bugfixes-40"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -909,17 +955,17 @@ Last minor 1\.x\.0 version\. The 2\.0\.0 version will have some backwards incomp
<a id="v1-1-0"></a>
## v1\.1\.0
-<a id="release-summary-42"></a>
+<a id="release-summary-43"></a>
### Release Summary
Regular maintenance release\.
-<a id="minor-changes-12"></a>
+<a id="minor-changes-13"></a>
### Minor Changes
* Avoid internal ansible\-core module\_utils in favor of equivalent public API available since at least Ansible 2\.9 \([https\://github\.com/ansible\-collections/community\.dns/pull/24](https\://github\.com/ansible\-collections/community\.dns/pull/24)\)\.
-<a id="bugfixes-40"></a>
+<a id="bugfixes-41"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -927,12 +973,12 @@ Regular maintenance release\.
<a id="v1-0-1"></a>
## v1\.0\.1
-<a id="release-summary-43"></a>
+<a id="release-summary-44"></a>
### Release Summary
Regular maintenance release\.
-<a id="bugfixes-41"></a>
+<a id="bugfixes-42"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -940,12 +986,12 @@ Regular maintenance release\.
<a id="v1-0-0"></a>
## v1\.0\.0
-<a id="release-summary-44"></a>
+<a id="release-summary-45"></a>
### Release Summary
First stable release\.
-<a id="bugfixes-42"></a>
+<a id="bugfixes-43"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -953,17 +999,17 @@ First stable release\.
<a id="v0-3-0"></a>
## v0\.3\.0
-<a id="release-summary-45"></a>
+<a id="release-summary-46"></a>
### Release Summary
Fixes bugs\, adds rate limiting for Hosttech JSON API\, and adds a new bulk synchronization module\.
-<a id="minor-changes-13"></a>
+<a id="minor-changes-14"></a>
### Minor Changes
* hosttech\_dns\_\* \- handle <code>419 Too Many Requests</code> with proper rate limiting for JSON API \([https\://github\.com/ansible\-collections/community\.dns/pull/14](https\://github\.com/ansible\-collections/community\.dns/pull/14)\)\.
-<a id="bugfixes-43"></a>
+<a id="bugfixes-44"></a>
### Bugfixes
* Avoid converting ASCII labels which contain underscores or other printable ASCII characters outside <code>\[a\-zA\-Z0\-9\-\]</code> to alabels during normalization \([https\://github\.com/ansible\-collections/community\.dns/pull/13](https\://github\.com/ansible\-collections/community\.dns/pull/13)\)\.
@@ -977,17 +1023,17 @@ Fixes bugs\, adds rate limiting for Hosttech JSON API\, and adds a new bulk sync
<a id="v0-2-0"></a>
## v0\.2\.0
-<a id="release-summary-46"></a>
+<a id="release-summary-47"></a>
### Release Summary
Major refactoring release\, which adds a zone information module and supports HostTech\'s new REST API\.
-<a id="major-changes"></a>
+<a id="major-changes-1"></a>
### Major Changes
* hosttech\_\* modules \- support the new JSON API at [https\://api\.ns1\.hosttech\.eu/api/documentation/](https\://api\.ns1\.hosttech\.eu/api/documentation/) \([https\://github\.com/ansible\-collections/community\.dns/pull/4](https\://github\.com/ansible\-collections/community\.dns/pull/4)\)\.
-<a id="minor-changes-14"></a>
+<a id="minor-changes-15"></a>
### Minor Changes
* hosttech\_dns\_record\* modules \- allow to specify <code>prefix</code> instead of <code>record</code> \([https\://github\.com/ansible\-collections/community\.dns/pull/8](https\://github\.com/ansible\-collections/community\.dns/pull/8)\)\.
@@ -997,12 +1043,12 @@ Major refactoring release\, which adds a zone information module and supports Ho
* hosttech\_dns\_record\_info \- also return <code>prefix</code> for a record set \([https\://github\.com/ansible\-collections/community\.dns/pull/8](https\://github\.com/ansible\-collections/community\.dns/pull/8)\)\.
* hosttech\_record \- allow to delete records without querying their content first by specifying <code>overwrite\=true</code> \([https\://github\.com/ansible\-collections/community\.dns/pull/4](https\://github\.com/ansible\-collections/community\.dns/pull/4)\)\.
-<a id="breaking-changes--porting-guide-1"></a>
+<a id="breaking-changes--porting-guide-2"></a>
### Breaking Changes / Porting Guide
* hosttech\_\* module\_utils \- completely rewrite and refactor to support new JSON API and allow to reuse provider\-independent module logic \([https\://github\.com/ansible\-collections/community\.dns/pull/4](https\://github\.com/ansible\-collections/community\.dns/pull/4)\)\.
-<a id="bugfixes-44"></a>
+<a id="bugfixes-45"></a>
### Bugfixes
* Update Public Suffix List\.
@@ -1017,7 +1063,7 @@ Major refactoring release\, which adds a zone information module and supports Ho
<a id="v0-1-0"></a>
## v0\.1\.0
-<a id="release-summary-47"></a>
+<a id="release-summary-48"></a>
### Release Summary
Initial public release\.
diff --git a/ansible_collections/community/dns/CHANGELOG.rst b/ansible_collections/community/dns/CHANGELOG.rst
index e91d83ebf..9aef9afb1 100644
--- a/ansible_collections/community/dns/CHANGELOG.rst
+++ b/ansible_collections/community/dns/CHANGELOG.rst
@@ -4,6 +4,45 @@ Community DNS Collection Release Notes
.. contents:: Topics
+v3.0.0
+======
+
+Release Summary
+---------------
+
+...
+
+Major Changes
+-------------
+
+- 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).
+
+Minor Changes
+-------------
+
+- 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).
+
+Breaking Changes / Porting Guide
+--------------------------------
+
+- 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).
+
+Removed Features (previously deprecated)
+----------------------------------------
+
+- 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).
+
+Bugfixes
+--------
+
+- Update Public Suffix List.
+
v2.9.0
======
diff --git a/ansible_collections/community/dns/FILES.json b/ansible_collections/community/dns/FILES.json
index 52b3239cd..32915c500 100644
--- a/ansible_collections/community/dns/FILES.json
+++ b/ansible_collections/community/dns/FILES.json
@@ -25,7 +25,7 @@
"name": ".github/workflows/ansible-test.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4ef2a19d9715b2b9a70a6fe716ec40726b3c425f3c2b96d9bfe5d12489f74574",
+ "chksum_sha256": "02ff9da8ae9991541407a1f05a5b2bafa3d558213b44c63287665d370c4091da",
"format": 1
},
{
@@ -53,14 +53,14 @@
"name": ".github/workflows/ee.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bcef35a96fa3202cfec5d7adcb76b93124fa08e1a8c6dd914bf8cbb8aed28f11",
+ "chksum_sha256": "dcd1d5b0f91b932e5b535b9e5c08a3b02123e089a1ac1846f8bad9ba892e9893",
"format": 1
},
{
"name": ".github/workflows/extra-tests.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c7ed351192ec963495e9a1752c3ecd914698582affd90dec5065c7f2180fe1dc",
+ "chksum_sha256": "67094594a3f5090d92cbc78fd0c1020ed3c1a30f69a850b92de3a226692a01e0",
"format": 1
},
{
@@ -151,7 +151,7 @@
"name": "changelogs/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d6afad220bd94bbf6ffd765666b7589d04b014238a3e02973e066958c44acf43",
+ "chksum_sha256": "1f73967d9bae45a0341f90dd810cd70afa17786df1d296e5803f18f4d5c4d33c",
"format": 1
},
{
@@ -200,7 +200,7 @@
"name": "docs/docsite/rst/hetzner_guide.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b7f406b5c5d7921909eb2196feae0ec9a28e18ee5a2ce08e0a8db50c3e2506f6",
+ "chksum_sha256": "06fa52a3c1e246e5cee3b9b556c412b842a109ab37a56121754a81819327f9d3",
"format": 1
},
{
@@ -256,7 +256,7 @@
"name": "meta/runtime.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a0f15da8558a0fcbe370883adaa3a3982a99ae3d93e785523b126d1912bcc30a",
+ "chksum_sha256": "402e41b8f52840f3e00165fbac091febdb9542600fec9626c654f16569fa4b82",
"format": 1
},
{
@@ -305,7 +305,7 @@
"name": "plugins/doc_fragments/inventory_records.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ca51ab2e9350f36f68827a2fa86145ad0865838ac43313e07e09f853fd6e1f3c",
+ "chksum_sha256": "acae110608db050d3f39ae87490c4d94c80a6fc0d7eff427eb3b39b3c1c443ae",
"format": 1
},
{
@@ -354,7 +354,7 @@
"name": "plugins/doc_fragments/options.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d6187dcb10a41b78a6bf385d22a3fafe2c1a8e69b296aeb8292d109edfab3b22",
+ "chksum_sha256": "99f9e241c2b7937cfe03684be5d83b5b5fba46f114776731da4b81de244603db",
"format": 1
},
{
@@ -431,14 +431,14 @@
"name": "plugins/inventory/hetzner_dns_records.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6531b5ee8da29ac4909eeb4db27b9d5c232c8acfd8741dc99cc6d5877ccf213",
+ "chksum_sha256": "2321c6f2bbf813769d033a2ea087874c59b165503e6e9d63e7538485eafd7745",
"format": 1
},
{
"name": "plugins/inventory/hosttech_dns_records.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ed0fef2e327ea3103a8e3c08a0af587f1cc48c6239ad14e3164f706e86d7f160",
+ "chksum_sha256": "ceb63f67d1c2b3c60d50b6bd8838cf1125057e6e79dcfe87295bf9700d1acac0",
"format": 1
},
{
@@ -452,14 +452,14 @@
"name": "plugins/lookup/lookup.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6571e35773f4c9116eaf7c21e5c25ab95d803e54d3c929e6b94b82eaa503d8ee",
+ "chksum_sha256": "8bdcf8b3091a59c20b4aa656150055959b8c24d378a0d96b565629d99d49ce77",
"format": 1
},
{
"name": "plugins/lookup/lookup_as_dict.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2eb51bdf708dc19c84dd15e16c8804570922cdf0b5cfad337c7a85c93b326750",
+ "chksum_sha256": "707a51ebeff3a2cbf1ae4324e1dcf7fb7e589af3ef44c67cb0336c95c81c75dc",
"format": 1
},
{
@@ -487,7 +487,7 @@
"name": "plugins/module_utils/conversion/converter.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "06a3d891a5c81bc1552ba2be7d7bca8cae84c1d7a9e51fb0bd9d7e957e02b575",
+ "chksum_sha256": "db2ac83bb84e53abafccd7ec6974059c37e03b18e6265ea07490bcc23879dafe",
"format": 1
},
{
@@ -641,14 +641,14 @@
"name": "plugins/module_utils/options.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9ab338a1f293a6bb6b041a8a01d99885dc6388b672a8ca01f78ac37615089f09",
+ "chksum_sha256": "40ae1e4a499762415df77dc1778b6c8679d71a8b004945537f0c631afef926f0",
"format": 1
},
{
"name": "plugins/module_utils/provider.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "894a0fb9f647b50f80ec6cad79181804cc0a2be8aa5fb3c9875d0524647445f3",
+ "chksum_sha256": "248dbb61a2c77dd8389e7d9cb6fe53650ce9d4b7a9a6c973c6f41e5bc7ab4d00",
"format": 1
},
{
@@ -662,7 +662,7 @@
"name": "plugins/module_utils/resolver.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2d0ceedf04f529e982d7865daa9c7d56b4ba49361e665a5e246fb4f3f4de569a",
+ "chksum_sha256": "5b3faecab5ba159a7208509ed2511519343cdae5ed3def6d511e4458a4df3ccf",
"format": 1
},
{
@@ -701,17 +701,10 @@
"format": 1
},
{
- "name": "plugins/modules/hosttech_dns_records.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "fe2c760eaf5bccaed8abbefe6dd6952b428fd05c0cc48919dc579acc7ad57141",
- "format": 1
- },
- {
"name": "plugins/modules/hetzner_dns_record.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "235b7a73ce5f2a9e74098f8c4100fbe2ca828a13ec021872392e5f0442cc6e56",
+ "chksum_sha256": "eb5ecec9883413c8ba73e29877c051561eb62b0ba15cd947ee0bb679744106af",
"format": 1
},
{
@@ -725,7 +718,7 @@
"name": "plugins/modules/hetzner_dns_record_set.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "35f71b7b8f680261f51b78d7c34cf4d89f490ba5937674614055cd6593e578d3",
+ "chksum_sha256": "8b6617b6ffc67eab9ea1bdd3d7eab779588d6bea372b55cc051e3a33c2f077c1",
"format": 1
},
{
@@ -830,7 +823,7 @@
"name": "plugins/plugin_utils/inventory/records.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "768ceedc4f0b624a22f9b777452f143e0b88639c1bd7e5f861d789ec0269e6e1",
+ "chksum_sha256": "6f8073358134147fc4c46631dff39aaac94215423a68c622b29802459acb61c6",
"format": 1
},
{
@@ -872,7 +865,7 @@
"name": "plugins/public_suffix_list.dat",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "27ae0b652366e8c5675942482de87819cf7947f5f4dc7bc661dc82b9b5da2d04",
+ "chksum_sha256": "437ffb5d25e5dee3fa4fef0109aac0e37f2f67b03a6787eeb22db831e308efe9",
"format": 1
},
{
@@ -1012,7 +1005,7 @@
"name": "tests/integration/targets/filter_txt/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec0d81efcabab342ec8b892fdf9bcd54bf488a3b92a81a0efbe09f26e2d80c27",
+ "chksum_sha256": "089c3a08e5c4c1111c6a429944ceb1ecccd22ad4f3991ddfbbd07fd9ae4b3ccd",
"format": 1
},
{
@@ -1579,14 +1572,14 @@
"name": "tests/unit/plugins/inventory/test_hetzner_dns_records.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fcb263ece98ce1696cd5bbe594b86911d3365d9e8dfd9858ffbf6735c5dd46d2",
+ "chksum_sha256": "2695e818ea088c60143c39a2fa7610b885af292ff6b182559e77d3d2189070de",
"format": 1
},
{
"name": "tests/unit/plugins/inventory/test_hosttech_dns_records.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "20aafd958aa2e24b07b610c7d4efbee67cab74ecaada25876889564de7fe01d6",
+ "chksum_sha256": "c630d5dc0c2fbf2c0eb421e906e1f443c65b4fae6321ee76e72ebec2a3be8dd4",
"format": 1
},
{
@@ -1600,14 +1593,14 @@
"name": "tests/unit/plugins/lookup/test_lookup.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a888fcf181730c2aae23357e0a073cbf1996a2172b13ea8c96e0ab17623937af",
+ "chksum_sha256": "0e84b4e2cb5b44d4bf325440a9a20e1392d1f1b70af31cc077b6375d377abdf0",
"format": 1
},
{
"name": "tests/unit/plugins/lookup/test_lookup_as_dict.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "283ff7237b352e16cc23b413fd05b39bcb474c047f1662507f7c078a56d0814e",
+ "chksum_sha256": "65ec26898c31f97e5f155b520779aace7f0a056ea9654c662aadb4931630dee8",
"format": 1
},
{
@@ -1698,7 +1691,7 @@
"name": "tests/unit/plugins/module_utils/resolver_helper.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1732b34b946b6911c9cc9690330f589691a71eccc1344d1973f31d3814327bf8",
+ "chksum_sha256": "8a4819cb5ff96f0f58fac8407282943e51afa11807bc7334f54515c6b7c71568",
"format": 1
},
{
@@ -1817,7 +1810,7 @@
"name": "tests/unit/plugins/modules/test_hetzner_dns_record_set_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f69a48413b461b5b7232b3eb6aab1ce61475922d47372bb621052366ce9e185d",
+ "chksum_sha256": "c4a5ab6f9c3bdd64c04321fe7d0bda4f0a9a5ffac691ae5d1a94979997e0ecd6",
"format": 1
},
{
@@ -1926,6 +1919,13 @@
"format": 1
},
{
+ "name": "tests/unit/plugins/plugin_utils/test_unsafe.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a48876d3a7e7dbc9fca656b2476824138ca1cd1c630a9b116c6398cf63d9f0ca",
+ "format": 1
+ },
+ {
"name": "tests/unit/replace-requirements.sh",
"ftype": "file",
"chksum_type": "sha256",
@@ -1971,7 +1971,7 @@
"name": "CHANGELOG.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bc56ad1ca72650697ca9f41b004a70f54ef329c79938268b1430d0dac8fa51d6",
+ "chksum_sha256": "1489e680b9d05205a48e068d84dc804325584d49005222f1f506f42ad49ae63a",
"format": 1
},
{
@@ -1985,7 +1985,7 @@
"name": "CHANGELOG.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6dd1dbacede2c19ab983288d1fccde3d6369642593b1da10029cdf53e6b3176c",
+ "chksum_sha256": "8d243919ca88dbc2725a0b5a94ee622f405d42abcef4d6072f76c6539d1eef5a",
"format": 1
},
{
@@ -2013,7 +2013,7 @@
"name": "README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "61615f641d8efd57833806770c66a86dfe2ceb595df9fe1e9ef1fc0d9e2bfab4",
+ "chksum_sha256": "216c0accaebda45205edabf0713d372f195393f49be5a94d6ba5e3fb6847502a",
"format": 1
},
{
diff --git a/ansible_collections/community/dns/MANIFEST.json b/ansible_collections/community/dns/MANIFEST.json
index 0c60fe528..08e4d9c66 100644
--- a/ansible_collections/community/dns/MANIFEST.json
+++ b/ansible_collections/community/dns/MANIFEST.json
@@ -2,7 +2,7 @@
"collection_info": {
"namespace": "community",
"name": "dns",
- "version": "2.9.0",
+ "version": "3.0.0",
"authors": [
"Felix Fontein (github.com/felixfontein)",
"Markus Bergholz (github.com/markuman)"
@@ -20,7 +20,9 @@
"MPL-2.0"
],
"license_file": null,
- "dependencies": {},
+ "dependencies": {
+ "community.library_inventory_filtering_v1": ">=1.0.0"
+ },
"repository": "https://github.com/ansible-collections/community.dns",
"documentation": "https://docs.ansible.com/ansible/devel/collections/community/dns/",
"homepage": "https://github.com/ansible-collections/community.dns",
@@ -30,7 +32,7 @@
"name": "FILES.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "723a758354360ce388c0f83a88527e05dc67d3bcad6495e66deca44b8a169d12",
+ "chksum_sha256": "ba0f38847eafe7b48453fb5a53d01010332adb7982622a61061c9df456b18e68",
"format": 1
},
"format": 1
diff --git a/ansible_collections/community/dns/README.md b/ansible_collections/community/dns/README.md
index 32257a110..5a0ab4d42 100644
--- a/ansible_collections/community/dns/README.md
+++ b/ansible_collections/community/dns/README.md
@@ -9,6 +9,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
[![CI](https://github.com/ansible-collections/community.dns/workflows/CI/badge.svg?event=push)](https://github.com/ansible-collections/community.dns/actions)
[![Public Suffix List up-to-date](https://github.com/ansible-collections/community.dns/workflows/Check%20for%20Public%20Suffix%20List%20updates/badge.svg?branch=main)](https://github.com/ansible-collections/community.dns/actions?query=workflow%3A%22Check+for+Public+Suffix+List+updates%22+branch%3Amain)
[![Codecov](https://img.shields.io/codecov/c/github/ansible-collections/community.dns)](https://codecov.io/gh/ansible-collections/community.dns)
+[![REUSE status](https://api.reuse.software/badge/github.com/ansible-collections/community.dns)](https://api.reuse.software/info/github.com/ansible-collections/community.dns)
This repository contains the `community.dns` Ansible Collection. The collection includes plugins and modules to work with DNS.
@@ -16,7 +17,7 @@ Please note that this collection does **not** support Windows targets.
## Tested with Ansible
-Tested with the current Ansible 2.9, ansible-base 2.10, ansible-core 2.11, ansible-core 2.12, ansible-core 2.13, ansible-core 2.14, ansible-core 2.15, ansible-core 2.16, and ansible-core 2.17 releases and the current development version of ansible-core. Ansible versions before 2.9.10 are not supported.
+Tested with the current ansible-core 2.14, ansible-core 2.15, ansible-core 2.16, and ansible-core 2.17 releases and the current development version of ansible-core. Ansible versions before 2.9.10 are not supported.
## External requirements
diff --git a/ansible_collections/community/dns/changelogs/changelog.yaml b/ansible_collections/community/dns/changelogs/changelog.yaml
index 3eafad115..230527b2b 100644
--- a/ansible_collections/community/dns/changelogs/changelog.yaml
+++ b/ansible_collections/community/dns/changelogs/changelog.yaml
@@ -829,3 +829,52 @@ releases:
name: unquote_txt
namespace: null
release_date: '2024-04-21'
+ 3.0.0:
+ changes:
+ breaking_changes:
+ - 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).
+ bugfixes:
+ - Update Public Suffix List.
+ major_changes:
+ - 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).
+ minor_changes:
+ - 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).
+ release_summary: '...
+
+ '
+ removed_features:
+ - 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).
+ fragments:
+ - 201-lookup-search.yml
+ - 3.0.0.yml
+ - update-psl.yml
+ release_date: '2024-05-19'
diff --git a/ansible_collections/community/dns/docs/docsite/rst/hetzner_guide.rst b/ansible_collections/community/dns/docs/docsite/rst/hetzner_guide.rst
index 8c0e34e26..f22412286 100644
--- a/ansible_collections/community/dns/docs/docsite/rst/hetzner_guide.rst
+++ b/ansible_collections/community/dns/docs/docsite/rst/hetzner_guide.rst
@@ -463,7 +463,7 @@ When :ansopt:`value` is not specified, the ``markuman.hetzner_dns.record`` modul
# 'type' does not change:
type: A
-A last step is replacing the deprecated alias :ansopt:`community.dns.hetzner_dns_record_set#module:name` of :ansopt:`community.dns.hetzner_dns_record_set#module:prefix` by :ansopt:`community.dns.hetzner_dns_record_set#module:prefix`. This can be done later though, if you do not mind the deprecation warnings.
+A last step is replacing the removed alias ``name`` of :ansopt:`community.dns.hetzner_dns_record_set#module:prefix` by :ansopt:`community.dns.hetzner_dns_record_set#module:prefix`.
The markuman.hetzner_dns.record_info module
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/ansible_collections/community/dns/meta/runtime.yml b/ansible_collections/community/dns/meta/runtime.yml
index 25f52c7a8..2cb1350ea 100644
--- a/ansible_collections/community/dns/meta/runtime.yml
+++ b/ansible_collections/community/dns/meta/runtime.yml
@@ -3,7 +3,7 @@
# 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
-requires_ansible: '>=2.9.10'
+requires_ansible: '>=2.14.0'
action_groups:
hetzner:
- hetzner_dns_record_info
@@ -18,12 +18,10 @@ action_groups:
- hosttech_dns_record_set_info
- hosttech_dns_record_set
- hosttech_dns_record_sets
- - hosttech_dns_records # deprecated redirect
- hosttech_dns_zone_info
plugin_routing:
modules:
hosttech_dns_records:
- redirect: community.dns.hosttech_dns_record_sets
- deprecation:
+ tombstone:
removal_version: 3.0.0
warning_text: The hosttech_dns_records module has been renamed to hosttech_dns_record_sets.
diff --git a/ansible_collections/community/dns/plugins/doc_fragments/inventory_records.py b/ansible_collections/community/dns/plugins/doc_fragments/inventory_records.py
index e7a90a7b7..760ba1590 100644
--- a/ansible_collections/community/dns/plugins/doc_fragments/inventory_records.py
+++ b/ansible_collections/community/dns/plugins/doc_fragments/inventory_records.py
@@ -34,11 +34,10 @@ options:
simple_filters:
description:
- A dictionary of filter value pairs.
- - This option has been renamed from O(filters) to O(simple_filters) in community.dns 2.8.0.
- The old name can still be used until community.dns 3.0.0.
+ - This option used to be called O(filters) before community.dns 3.0.0. It has been renamed from
+ O(filters) to O(simple_filters) in community.dns 2.8.0, and the old name was still available
+ as an alias until community.dns 3.0.0. O(filters) is now used for something else.
type: dict
- aliases:
- - filters
default: {}
suboptions:
# (The following must be kept in sync with the equivalent lines in <provider_name>.py!)
diff --git a/ansible_collections/community/dns/plugins/doc_fragments/options.py b/ansible_collections/community/dns/plugins/doc_fragments/options.py
index 55c83f1b2..9b892c711 100644
--- a/ansible_collections/community/dns/plugins/doc_fragments/options.py
+++ b/ansible_collections/community/dns/plugins/doc_fragments/options.py
@@ -55,11 +55,12 @@ options:
description:
- Whether to treat numeric escape sequences (V(\\xyz)) as octal or decimal numbers.
This is only used when O(txt_transformation=quoted).
- - The current default is V(octal) which is deprecated. It will change to V(decimal) in
- community.dns 3.0.0. The value V(decimal) is compatible to L(RFC 1035, https://www.ietf.org/rfc/rfc1035.txt).
+ - The default changed to V(decimal) in community.dns 3.0.0. Before, the default used to be V(octal).
+ The value V(decimal) is compatible to L(RFC 1035, https://www.ietf.org/rfc/rfc1035.txt).
type: str
choices:
- decimal
- octal
+ default: decimal
version_added: 2.5.0
'''
diff --git a/ansible_collections/community/dns/plugins/inventory/hetzner_dns_records.py b/ansible_collections/community/dns/plugins/inventory/hetzner_dns_records.py
index 7982c23f0..8fe1d9465 100644
--- a/ansible_collections/community/dns/plugins/inventory/hetzner_dns_records.py
+++ b/ansible_collections/community/dns/plugins/inventory/hetzner_dns_records.py
@@ -24,12 +24,14 @@ description:
options:
plugin:
description: The name of this plugin. Should always be set to V(community.dns.hetzner_dns_records) for this plugin to recognize it as its own.
- # TODO: add `required: true` in 3.0.0
- # required: true
+ required: true
choices:
- community.dns.hetzner_dns_records
type: str
+ filters:
+ version_added: 3.0.0
+
extends_documentation_fragment:
- community.dns.hetzner
- community.dns.hetzner.plugin
@@ -37,6 +39,7 @@ extends_documentation_fragment:
- community.dns.hetzner.zone_id_type
- community.dns.inventory_records
- community.dns.options.record_transformation
+ - community.library_inventory_filtering_v1.inventory_filter
notes:
- The provider-specific O(hetzner_token) option can be templated.
@@ -58,6 +61,10 @@ zone_name: domain.de
simple_filters:
type:
- TXT
+filters:
+ - include: >-
+ not ansible_host.startswith('v=')
+ - exclude: true
txt_transformation: unquoted
# You can also configure the token by putting secret value into this file,
@@ -67,6 +74,7 @@ hetzner_token: >-
{{ (lookup('community.sops.sops', 'keys/hetzner.sops.yml') | from_yaml).hetzner_dns_token }}
'''
+
from ansible_collections.community.dns.plugins.module_utils.http import (
OpenURLHelper,
)
diff --git a/ansible_collections/community/dns/plugins/inventory/hosttech_dns_records.py b/ansible_collections/community/dns/plugins/inventory/hosttech_dns_records.py
index d14cf73ed..e5573de5d 100644
--- a/ansible_collections/community/dns/plugins/inventory/hosttech_dns_records.py
+++ b/ansible_collections/community/dns/plugins/inventory/hosttech_dns_records.py
@@ -24,8 +24,7 @@ description:
options:
plugin:
description: The name of this plugin. Should always be set to V(community.dns.hosttech_dns_records) for this plugin to recognize it as its own.
- # TODO: add `required: true` in 3.0.0
- # required: true
+ required: true
choices:
- community.dns.hosttech_dns_records
type: str
@@ -38,6 +37,9 @@ options:
# compatibility with previous type=int...
# type: string
+ filters:
+ version_added: 3.0.0
+
extends_documentation_fragment:
- community.dns.hosttech
- community.dns.hosttech.plugin
@@ -45,6 +47,7 @@ extends_documentation_fragment:
- community.dns.hosttech.zone_id_type
- community.dns.inventory_records
- community.dns.options.record_transformation
+ - community.library_inventory_filtering_v1.inventory_filter
notes:
- The provider-specific O(hosttech_username), O(hosttech_password), and O(hosttech_token) options can be templated.
@@ -66,6 +69,10 @@ zone_name: domain.ch
simple_filters:
type:
- AAAA
+filters:
+ - include: >-
+ '*.' not in inventory_hostname
+ - exclude: true
# You can also configure the token by putting secret value into this file,
# but this is discouraged. Use a lookup like below, or leave it away and
diff --git a/ansible_collections/community/dns/plugins/lookup/lookup.py b/ansible_collections/community/dns/plugins/lookup/lookup.py
index 9f18164b1..0e968d81a 100644
--- a/ansible_collections/community/dns/plugins/lookup/lookup.py
+++ b/ansible_collections/community/dns/plugins/lookup/lookup.py
@@ -89,6 +89,17 @@ options:
- fail
- message
default: empty
+ search:
+ description:
+ - If V(false), the input is assumed to be an absolute domain name.
+ - If V(true), the input is assumed to be a relative domain name if it does not end with C(.),
+ the search list configured in the system's resolver configuration will be used for relative
+ names, and the resolver's domain may be added to relative names.
+ - Note that this behavior changed in community.dns 3.0.0. In community.dns 2.x.y, O(search=false)
+ was the only available choice.
+ type: bool
+ default: true
+ version_added: 3.0.0
notes:
- Note that when using this lookup plugin with V(lookup(\)), and the result is a one-element list,
Ansible simply returns the one element not as a list. Since this behavior is surprising and
@@ -151,7 +162,7 @@ except ImportError:
class LookupModule(LookupBase):
@staticmethod
- def _resolve(resolver, name, rdtype, server_addresses, nxdomain_handling):
+ def _resolve(resolver, name, rdtype, server_addresses, nxdomain_handling, target_can_be_relative=True, search=True):
def callback():
try:
rrset = resolver.resolve(
@@ -159,6 +170,8 @@ class LookupModule(LookupBase):
rdtype=rdtype,
server_addresses=server_addresses,
nxdomain_is_empty=nxdomain_handling == 'empty',
+ target_can_be_relative=target_can_be_relative,
+ search=search,
)
if not rrset:
return []
@@ -189,6 +202,8 @@ class LookupModule(LookupBase):
nxdomain_handling = self.get_option('nxdomain_handling')
+ search = self.get_option('search')
+
server_addresses = None
if self.get_option('server'):
server_addresses = []
@@ -206,5 +221,5 @@ class LookupModule(LookupBase):
result = []
for name in terms:
- result.extend(self._resolve(resolver, name, rdtype, server_addresses, nxdomain_handling))
+ result.extend(self._resolve(resolver, name, rdtype, server_addresses, nxdomain_handling, target_can_be_relative=search, search=search))
return result
diff --git a/ansible_collections/community/dns/plugins/lookup/lookup_as_dict.py b/ansible_collections/community/dns/plugins/lookup/lookup_as_dict.py
index 8783d86c1..3650b2094 100644
--- a/ansible_collections/community/dns/plugins/lookup/lookup_as_dict.py
+++ b/ansible_collections/community/dns/plugins/lookup/lookup_as_dict.py
@@ -87,6 +87,17 @@ options:
- empty
- fail
default: empty
+ search:
+ description:
+ - If V(false), the input is assumed to be an absolute domain name.
+ - If V(true), the input is assumed to be a relative domain name if it does not end with C(.),
+ the search list configured in the system's resolver configuration will be used for relative
+ names, and the resolver's domain may be added to relative names.
+ - Note that this behavior changed in community.dns 3.0.0. In community.dns 2.x.y, O(search=false)
+ was the only available choice.
+ type: bool
+ default: true
+ version_added: 3.0.0
notes:
- Note that when using this lookup plugin with V(lookup(\)), and the result is a one-element list,
Ansible simply returns the one element not as a list. Since this behavior is surprising and
@@ -440,7 +451,7 @@ except ImportError:
class LookupModule(LookupBase):
@staticmethod
- def _resolve(resolver, name, rdtype, server_addresses, nxdomain_handling):
+ def _resolve(resolver, name, rdtype, server_addresses, nxdomain_handling, target_can_be_relative=True, search=True):
def callback():
try:
rrset = resolver.resolve(
@@ -448,6 +459,8 @@ class LookupModule(LookupBase):
rdtype=rdtype,
server_addresses=server_addresses,
nxdomain_is_empty=nxdomain_handling == 'empty',
+ target_can_be_relative=target_can_be_relative,
+ search=search,
)
if not rrset:
return []
@@ -476,6 +489,8 @@ class LookupModule(LookupBase):
nxdomain_handling = self.get_option('nxdomain_handling')
+ search = self.get_option('search')
+
server_addresses = None
if self.get_option('server'):
server_addresses = []
@@ -493,5 +508,5 @@ class LookupModule(LookupBase):
result = []
for name in terms:
- result.extend(self._resolve(resolver, name, rdtype, server_addresses, nxdomain_handling))
+ result.extend(self._resolve(resolver, name, rdtype, server_addresses, nxdomain_handling, target_can_be_relative=search, search=search))
return result
diff --git a/ansible_collections/community/dns/plugins/module_utils/conversion/converter.py b/ansible_collections/community/dns/plugins/module_utils/conversion/converter.py
index b8a9f4a8d..c6667d50e 100644
--- a/ansible_collections/community/dns/plugins/module_utils/conversion/converter.py
+++ b/ansible_collections/community/dns/plugins/module_utils/conversion/converter.py
@@ -44,23 +44,9 @@ class RecordConverter(object):
self._txt_transformation = self._option_provider.get_option('txt_transformation')
# Valid values: 'decimal', 'octal'
self._txt_character_encoding = self._option_provider.get_option('txt_character_encoding')
- self._txt_character_encoding_deprecation = False
- if self._txt_character_encoding is None:
- # TODO: remove implicit default in community.dns 3.0.0
- self._txt_character_encoding = 'octal'
- if self._txt_transformation == 'quoted':
- self._txt_character_encoding_deprecation = True
def emit_deprecations(self, deprecator):
- if self._txt_character_encoding_deprecation:
- deprecator(
- 'The default of the txt_character_encoding option will change from "octal" to "decimal" in community.dns 3.0.0.'
- ' This potentially affects you since you use txt_transformation=quoted. You can explicitly set txt_character_encoding'
- ' to "octal" to keep the current behavior, or "decimal" to already now switch to the new behavior. We recommend'
- ' switching to the new behavior, and using check/diff mode to figure out potential changes',
- version='3.0.0',
- collection_name='community.dns',
- )
+ pass
def _handle_txt_api(self, to_api, record):
"""
diff --git a/ansible_collections/community/dns/plugins/module_utils/options.py b/ansible_collections/community/dns/plugins/module_utils/options.py
index 3906b4b6c..3b88ebae8 100644
--- a/ansible_collections/community/dns/plugins/module_utils/options.py
+++ b/ansible_collections/community/dns/plugins/module_utils/options.py
@@ -32,6 +32,6 @@ def create_record_transformation_argspec():
return ArgumentSpec(
argument_spec=dict(
txt_transformation=dict(type='str', default='unquoted', choices=['api', 'quoted', 'unquoted']),
- txt_character_encoding=dict(type='str', choices=['decimal', 'octal']),
+ txt_character_encoding=dict(type='str', default='decimal', choices=['decimal', 'octal']),
),
)
diff --git a/ansible_collections/community/dns/plugins/module_utils/provider.py b/ansible_collections/community/dns/plugins/module_utils/provider.py
index 56282d9c9..f5bf08a81 100644
--- a/ansible_collections/community/dns/plugins/module_utils/provider.py
+++ b/ansible_collections/community/dns/plugins/module_utils/provider.py
@@ -104,6 +104,6 @@ class ProviderInformation(object):
This return value is only used if txt_record_handling returns 'encoded'.
- WARNING: the default return value will change to 'decimal' for community.dns 3.0.0!
+ Note: the default return value changed from 'octal' to 'decimal' in community.dns 3.0.0.
"""
- return 'octal'
+ return 'decimal'
diff --git a/ansible_collections/community/dns/plugins/module_utils/resolver.py b/ansible_collections/community/dns/plugins/module_utils/resolver.py
index 280b697d4..3814b164b 100644
--- a/ansible_collections/community/dns/plugins/module_utils/resolver.py
+++ b/ansible_collections/community/dns/plugins/module_utils/resolver.py
@@ -73,7 +73,7 @@ class _Resolve(object):
response = self._handle_timeout(resolver.resolve, dnsname, lifetime=self.timeout, **kwargs)
except AttributeError:
# For dnspython < 2.0.0
- resolver.search = False
+ resolver.search = kwargs.pop('search', False)
try:
response = self._handle_timeout(resolver.query, dnsname, lifetime=self.timeout, **kwargs)
except TypeError:
@@ -101,8 +101,11 @@ class SimpleResolver(_Resolve):
servfail_retries=servfail_retries,
)
- def resolve(self, target, nxdomain_is_empty=True, server_addresses=None, **kwargs):
- dnsname = dns.name.from_unicode(to_text(target))
+ def resolve(self, target, nxdomain_is_empty=True, server_addresses=None, target_can_be_relative=False, **kwargs):
+ if target_can_be_relative:
+ dnsname = dns.name.from_unicode(to_text(target), origin=None)
+ else:
+ dnsname = dns.name.from_unicode(to_text(target))
resolver = self.default_resolver
if server_addresses:
diff --git a/ansible_collections/community/dns/plugins/modules/hetzner_dns_record.py b/ansible_collections/community/dns/plugins/modules/hetzner_dns_record.py
index 23c873322..c27c152c3 100644
--- a/ansible_collections/community/dns/plugins/modules/hetzner_dns_record.py
+++ b/ansible_collections/community/dns/plugins/modules/hetzner_dns_record.py
@@ -43,11 +43,6 @@ attributes:
diff_mode:
support: full
-options:
- prefix:
- aliases:
- - name
-
author:
- Markus Bergholz (@markuman) <markuman+spambelongstogoogle@gmail.com>
- Felix Fontein (@felixfontein)
@@ -109,8 +104,6 @@ def main():
provider_information = create_hetzner_provider_information()
argument_spec = create_hetzner_argument_spec()
argument_spec.merge(create_module_argument_spec(provider_information=provider_information))
- argument_spec.argument_spec['prefix']['aliases'] = ['name']
- argument_spec.argument_spec['prefix']['deprecated_aliases'] = [dict(name='name', version='3.0.0', collection_name='community.dns')]
module = AnsibleModule(supports_check_mode=True, **argument_spec.to_kwargs())
run_module(module, lambda: create_hetzner_api(ModuleOptionProvider(module), ModuleHTTPHelper(module)), provider_information=provider_information)
diff --git a/ansible_collections/community/dns/plugins/modules/hetzner_dns_record_set.py b/ansible_collections/community/dns/plugins/modules/hetzner_dns_record_set.py
index ce3ad313a..61cfca634 100644
--- a/ansible_collections/community/dns/plugins/modules/hetzner_dns_record_set.py
+++ b/ansible_collections/community/dns/plugins/modules/hetzner_dns_record_set.py
@@ -40,11 +40,6 @@ attributes:
diff_mode:
support: full
-options:
- prefix:
- aliases:
- - name
-
author:
- Markus Bergholz (@markuman) <markuman+spambelongstogoogle@gmail.com>
- Felix Fontein (@felixfontein)
@@ -224,8 +219,6 @@ def main():
provider_information = create_hetzner_provider_information()
argument_spec = create_hetzner_argument_spec()
argument_spec.merge(create_module_argument_spec(provider_information=provider_information))
- argument_spec.argument_spec['prefix']['aliases'] = ['name']
- argument_spec.argument_spec['prefix']['deprecated_aliases'] = [dict(name='name', version='3.0.0', collection_name='community.dns')]
module = AnsibleModule(supports_check_mode=True, **argument_spec.to_kwargs())
run_module(module, lambda: create_hetzner_api(ModuleOptionProvider(module), ModuleHTTPHelper(module)), provider_information=provider_information)
diff --git a/ansible_collections/community/dns/plugins/modules/hosttech_dns_records.py b/ansible_collections/community/dns/plugins/modules/hosttech_dns_records.py
deleted file mode 100644
index 583cfa58e..000000000
--- a/ansible_collections/community/dns/plugins/modules/hosttech_dns_records.py
+++ /dev/null
@@ -1,129 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-#
-# Copyright (c) 2017-2021 Felix Fontein
-# 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: hosttech_dns_record_sets
-
-short_description: Bulk synchronize DNS record sets in Hosttech DNS service
-
-version_added: 2.0.0
-
-description:
- - Bulk synchronize DNS record sets in Hosttech DNS service.
- - This module replaces C(hosttech_dns_records) from community.dns before 2.0.0.
-
-extends_documentation_fragment:
- - community.dns.hosttech
- - community.dns.hosttech.record_notes
- - community.dns.hosttech.record_type_choices_record_sets_module
- - community.dns.hosttech.zone_id_type
- - community.dns.module_record_sets
- - community.dns.options.record_transformation
- - community.dns.attributes
- - community.dns.attributes.actiongroup_hosttech
-
-attributes:
- action_group:
- version_added: 2.4.0
- check_mode:
- support: full
- diff_mode:
- support: full
-
-author:
- - Felix Fontein (@felixfontein)
-
-'''
-
-EXAMPLES = '''
-- name: Make sure some records exist and have the expected values
- community.dns.hosttech_dns_record_sets:
- zone_name: foo.com
- records:
- - prefix: new
- type: A
- ttl: 7200
- value:
- - 1.1.1.1
- - 2.2.2.2
- - prefix: new
- type: AAAA
- ttl: 7200
- value:
- - "::1"
- - record: foo.com
- type: TXT
- value:
- - test
- hosttech_token: access_token
-
-- name: Synchronize DNS zone with a fixed set of records
- # If a record exists that is not mentioned here, it will be deleted
- community.dns.hosttech_dns_record_sets:
- zone_id: 23
- purge: true
- records:
- - prefix: ''
- type: A
- value: 127.0.0.1
- - prefix: ''
- type: AAAA
- value: "::1"
- - prefix: ''
- type: NS
- value:
- - ns-1.hoster.com
- - ns-2.hoster.com
- - ns-3.hoster.com
- hosttech_token: access_token
-'''
-
-RETURN = '''
-zone_id:
- description: The ID of the zone.
- type: int
- returned: success
- sample: 23
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-
-from ansible_collections.community.dns.plugins.module_utils.argspec import (
- ModuleOptionProvider,
-)
-
-from ansible_collections.community.dns.plugins.module_utils.http import (
- ModuleHTTPHelper,
-)
-
-from ansible_collections.community.dns.plugins.module_utils.hosttech.api import (
- create_hosttech_argument_spec,
- create_hosttech_api,
- create_hosttech_provider_information,
-)
-
-from ansible_collections.community.dns.plugins.module_utils.module.record_sets import (
- create_module_argument_spec,
- run_module,
-)
-
-
-def main():
- provider_information = create_hosttech_provider_information()
- argument_spec = create_hosttech_argument_spec()
- argument_spec.merge(create_module_argument_spec(provider_information=provider_information))
- module = AnsibleModule(supports_check_mode=True, **argument_spec.to_kwargs())
- run_module(module, lambda: create_hosttech_api(ModuleOptionProvider(module), ModuleHTTPHelper(module)), provider_information=provider_information)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/dns/plugins/plugin_utils/inventory/records.py b/ansible_collections/community/dns/plugins/plugin_utils/inventory/records.py
index 1d6827f2f..2ecfb1949 100644
--- a/ansible_collections/community/dns/plugins/plugin_utils/inventory/records.py
+++ b/ansible_collections/community/dns/plugins/plugin_utils/inventory/records.py
@@ -17,6 +17,8 @@ from ansible.plugins.inventory import BaseInventoryPlugin
from ansible.utils.display import Display
from ansible.template import Templar
+from ansible_collections.community.library_inventory_filtering_v1.plugins.plugin_utils.inventory_filter import parse_filters, filter_host
+
from ansible_collections.community.dns.plugins.module_utils.provider import (
ensure_type,
)
@@ -67,15 +69,7 @@ class RecordsInventoryModule(BaseInventoryPlugin):
def parse(self, inventory, loader, path, cache=False):
super(RecordsInventoryModule, self).parse(inventory, loader, path, cache)
- orig_config = self._read_config_data(path)
-
- if 'filters' in orig_config:
- display.deprecated(
- 'The `filters` option of the %s inventory plugin has been renamed to `simple_filters`. '
- 'The old name will stop working in community.dns 3.0.0.' % self.NAME,
- collection_name='community.dns',
- version='3.0.0',
- )
+ self._read_config_data(path)
self.templar = Templar(loader=loader)
@@ -119,9 +113,10 @@ class RecordsInventoryModule(BaseInventoryPlugin):
except DNSAPIError as e:
raise AnsibleError('Error: %s' % e)
- filters = self.get_option('simple_filters')
+ simple_filters = self.get_option('simple_filters')
+ filters = parse_filters(self.get_option('filters'))
- filter_types = filters.get('type') or ['A', 'AAAA', 'CNAME']
+ filter_types = simple_filters.get('type') or ['A', 'AAAA', 'CNAME']
if not isinstance(filter_types, Sequence) or isinstance(filter_types, six.string_types):
filter_types = [filter_types]
@@ -130,5 +125,12 @@ class RecordsInventoryModule(BaseInventoryPlugin):
name = zone_with_records.zone.name
if record.prefix:
name = '%s.%s' % (record.prefix, name)
+ facts = {
+ 'ansible_host': make_unsafe(record.target),
+ }
+ if not filter_host(self, name, facts, filters):
+ continue
+
self.inventory.add_host(name)
- self.inventory.set_variable(name, 'ansible_host', make_unsafe(record.target))
+ for key, value in facts.items():
+ self.inventory.set_variable(name, key, value)
diff --git a/ansible_collections/community/dns/plugins/public_suffix_list.dat b/ansible_collections/community/dns/plugins/public_suffix_list.dat
index 125f1e3d7..05df0af89 100644
--- a/ansible_collections/community/dns/plugins/public_suffix_list.dat
+++ b/ansible_collections/community/dns/plugins/public_suffix_list.dat
@@ -6710,7 +6710,7 @@ org.zw
// newGTLDs
-// List of new gTLDs imported from https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 2024-03-28T15:13:37Z
+// List of new gTLDs imported from https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 2024-05-04T15:12:50Z
// This list is auto-generated, don't edit it manually.
// aaa : American Automobile Association, Inc.
// https://www.iana.org/domains/root/db/aaa.html
@@ -6896,7 +6896,7 @@ anquan
// https://www.iana.org/domains/root/db/anz.html
anz
-// aol : Oath Inc.
+// aol : Yahoo Inc.
// https://www.iana.org/domains/root/db/aol.html
aol
@@ -11120,7 +11120,7 @@ xyz
// https://www.iana.org/domains/root/db/yachts.html
yachts
-// yahoo : Oath Inc.
+// yahoo : Yahoo Inc.
// https://www.iana.org/domains/root/db/yahoo.html
yahoo
@@ -11200,6 +11200,10 @@ ltd.ua
// 611coin : https://611project.org/
611.to
+// AAA workspace : https://aaa.vodka
+// Submitted by Kirill Rezraf <admin@aaa.vodka>
+aaa.vodka
+
// A2 Hosting
// Submitted by Tyler Hall <sysadmin@a2hosting.com>
a2hosted.com
@@ -11346,23 +11350,28 @@ cloudfront.net
// Amazon Cognito
// Submitted by AWS Security <psl-maintainers@amazon.com>
-// Reference: 7bee1013-f456-47df-bfe8-03c78d946d61
+// Reference: 09588633-91fe-49d8-b4e7-ec36496d11f3
auth.af-south-1.amazoncognito.com
auth.ap-northeast-1.amazoncognito.com
auth.ap-northeast-2.amazoncognito.com
auth.ap-northeast-3.amazoncognito.com
auth.ap-south-1.amazoncognito.com
+auth.ap-south-2.amazoncognito.com
auth.ap-southeast-1.amazoncognito.com
auth.ap-southeast-2.amazoncognito.com
auth.ap-southeast-3.amazoncognito.com
+auth.ap-southeast-4.amazoncognito.com
auth.ca-central-1.amazoncognito.com
auth.eu-central-1.amazoncognito.com
+auth.eu-central-2.amazoncognito.com
auth.eu-north-1.amazoncognito.com
auth.eu-south-1.amazoncognito.com
+auth.eu-south-2.amazoncognito.com
auth.eu-west-1.amazoncognito.com
auth.eu-west-2.amazoncognito.com
auth.eu-west-3.amazoncognito.com
auth.il-central-1.amazoncognito.com
+auth.me-central-1.amazoncognito.com
auth.me-south-1.amazoncognito.com
auth.sa-east-1.amazoncognito.com
auth.us-east-1.amazoncognito.com
@@ -11385,7 +11394,7 @@ us-east-1.amazonaws.com
// Amazon EMR
// Submitted by AWS Security <psl-maintainers@amazon.com>
-// Reference: 597f3f8e-9283-4e48-8e32-7ee25a1ff6ab
+// Reference: 82f43f9f-bbb8-400e-8349-854f5a62f20d
emrappui-prod.cn-north-1.amazonaws.com.cn
emrnotebooks-prod.cn-north-1.amazonaws.com.cn
emrstudio-prod.cn-north-1.amazonaws.com.cn
@@ -11410,6 +11419,9 @@ emrstudio-prod.ap-northeast-3.amazonaws.com
emrappui-prod.ap-south-1.amazonaws.com
emrnotebooks-prod.ap-south-1.amazonaws.com
emrstudio-prod.ap-south-1.amazonaws.com
+emrappui-prod.ap-south-2.amazonaws.com
+emrnotebooks-prod.ap-south-2.amazonaws.com
+emrstudio-prod.ap-south-2.amazonaws.com
emrappui-prod.ap-southeast-1.amazonaws.com
emrnotebooks-prod.ap-southeast-1.amazonaws.com
emrstudio-prod.ap-southeast-1.amazonaws.com
@@ -11419,18 +11431,30 @@ emrstudio-prod.ap-southeast-2.amazonaws.com
emrappui-prod.ap-southeast-3.amazonaws.com
emrnotebooks-prod.ap-southeast-3.amazonaws.com
emrstudio-prod.ap-southeast-3.amazonaws.com
+emrappui-prod.ap-southeast-4.amazonaws.com
+emrnotebooks-prod.ap-southeast-4.amazonaws.com
+emrstudio-prod.ap-southeast-4.amazonaws.com
emrappui-prod.ca-central-1.amazonaws.com
emrnotebooks-prod.ca-central-1.amazonaws.com
emrstudio-prod.ca-central-1.amazonaws.com
+emrappui-prod.ca-west-1.amazonaws.com
+emrnotebooks-prod.ca-west-1.amazonaws.com
+emrstudio-prod.ca-west-1.amazonaws.com
emrappui-prod.eu-central-1.amazonaws.com
emrnotebooks-prod.eu-central-1.amazonaws.com
emrstudio-prod.eu-central-1.amazonaws.com
+emrappui-prod.eu-central-2.amazonaws.com
+emrnotebooks-prod.eu-central-2.amazonaws.com
+emrstudio-prod.eu-central-2.amazonaws.com
emrappui-prod.eu-north-1.amazonaws.com
emrnotebooks-prod.eu-north-1.amazonaws.com
emrstudio-prod.eu-north-1.amazonaws.com
emrappui-prod.eu-south-1.amazonaws.com
emrnotebooks-prod.eu-south-1.amazonaws.com
emrstudio-prod.eu-south-1.amazonaws.com
+emrappui-prod.eu-south-2.amazonaws.com
+emrnotebooks-prod.eu-south-2.amazonaws.com
+emrstudio-prod.eu-south-2.amazonaws.com
emrappui-prod.eu-west-1.amazonaws.com
emrnotebooks-prod.eu-west-1.amazonaws.com
emrstudio-prod.eu-west-1.amazonaws.com
@@ -11440,6 +11464,9 @@ emrstudio-prod.eu-west-2.amazonaws.com
emrappui-prod.eu-west-3.amazonaws.com
emrnotebooks-prod.eu-west-3.amazonaws.com
emrstudio-prod.eu-west-3.amazonaws.com
+emrappui-prod.il-central-1.amazonaws.com
+emrnotebooks-prod.il-central-1.amazonaws.com
+emrstudio-prod.il-central-1.amazonaws.com
emrappui-prod.me-central-1.amazonaws.com
emrnotebooks-prod.me-central-1.amazonaws.com
emrstudio-prod.me-central-1.amazonaws.com
@@ -11470,9 +11497,11 @@ emrstudio-prod.us-west-2.amazonaws.com
// Amazon Managed Workflows for Apache Airflow
// Submitted by AWS Security <psl-maintainers@amazon.com>
-// Reference: 4ab55e6f-90c0-4a8d-b6a0-52ca5dbb1c2e
+// Reference: 87f24ece-a77e-40e8-bb4a-f6b74fe9f975
*.cn-north-1.airflow.amazonaws.com.cn
*.cn-northwest-1.airflow.amazonaws.com.cn
+*.af-south-1.airflow.amazonaws.com
+*.ap-east-1.airflow.amazonaws.com
*.ap-northeast-1.airflow.amazonaws.com
*.ap-northeast-2.airflow.amazonaws.com
*.ap-south-1.airflow.amazonaws.com
@@ -11481,12 +11510,15 @@ emrstudio-prod.us-west-2.amazonaws.com
*.ca-central-1.airflow.amazonaws.com
*.eu-central-1.airflow.amazonaws.com
*.eu-north-1.airflow.amazonaws.com
+*.eu-south-1.airflow.amazonaws.com
*.eu-west-1.airflow.amazonaws.com
*.eu-west-2.airflow.amazonaws.com
*.eu-west-3.airflow.amazonaws.com
+*.me-south-1.airflow.amazonaws.com
*.sa-east-1.airflow.amazonaws.com
*.us-east-1.airflow.amazonaws.com
*.us-east-2.airflow.amazonaws.com
+*.us-west-1.airflow.amazonaws.com
*.us-west-2.airflow.amazonaws.com
// Amazon S3
@@ -11780,9 +11812,25 @@ s3-fips.us-west-2.amazonaws.com
s3-object-lambda.us-west-2.amazonaws.com
s3-website.us-west-2.amazonaws.com
+// Amazon SageMaker Ground Truth
+// Submitted by AWS Security <psl-maintainers@amazon.com>
+// Reference: 98dbfde4-7802-48c3-8751-b60f204e0d9c
+labeling.ap-northeast-1.sagemaker.aws
+labeling.ap-northeast-2.sagemaker.aws
+labeling.ap-south-1.sagemaker.aws
+labeling.ap-southeast-1.sagemaker.aws
+labeling.ap-southeast-2.sagemaker.aws
+labeling.ca-central-1.sagemaker.aws
+labeling.eu-central-1.sagemaker.aws
+labeling.eu-west-1.sagemaker.aws
+labeling.eu-west-2.sagemaker.aws
+labeling.us-east-1.sagemaker.aws
+labeling.us-east-2.sagemaker.aws
+labeling.us-west-2.sagemaker.aws
+
// Amazon SageMaker Notebook Instances
// Submitted by AWS Security <psl-maintainers@amazon.com>
-// Reference: ce8ae0b1-0070-496d-be88-37c31837af9d
+// Reference: b5ea56df-669e-43cc-9537-14aa172f5dfc
notebook.af-south-1.sagemaker.aws
notebook.ap-east-1.sagemaker.aws
notebook.ap-northeast-1.sagemaker.aws
@@ -11819,6 +11867,7 @@ notebook-fips.us-gov-east-1.sagemaker.aws
notebook.us-gov-west-1.sagemaker.aws
notebook-fips.us-gov-west-1.sagemaker.aws
notebook.us-west-1.sagemaker.aws
+notebook-fips.us-west-1.sagemaker.aws
notebook.us-west-2.sagemaker.aws
notebook-fips.us-west-2.sagemaker.aws
notebook.cn-north-1.sagemaker.com.cn
@@ -11826,7 +11875,7 @@ notebook.cn-northwest-1.sagemaker.com.cn
// Amazon SageMaker Studio
// Submitted by AWS Security <psl-maintainers@amazon.com>
-// Reference: 057ee397-6bf8-4f20-b807-d7bc145ac980
+// Reference: 69c723d9-6e1a-4bff-a203-48eecd203183
studio.af-south-1.sagemaker.aws
studio.ap-east-1.sagemaker.aws
studio.ap-northeast-1.sagemaker.aws
@@ -11840,6 +11889,7 @@ studio.ca-central-1.sagemaker.aws
studio.eu-central-1.sagemaker.aws
studio.eu-north-1.sagemaker.aws
studio.eu-south-1.sagemaker.aws
+studio.eu-south-2.sagemaker.aws
studio.eu-west-1.sagemaker.aws
studio.eu-west-2.sagemaker.aws
studio.eu-west-3.sagemaker.aws
@@ -11951,6 +12001,11 @@ webview-assets.aws-cloud9.us-west-2.amazonaws.com
vfs.cloud9.us-west-2.amazonaws.com
webview-assets.cloud9.us-west-2.amazonaws.com
+// AWS Directory Service
+// Submitted by AWS Security <psl-maintainers@amazon.com>
+// Reference: a13203e8-42dc-4045-a0d2-2ee67bed1068
+awsapps.com
+
// AWS Elastic Beanstalk
// Submitted by AWS Security <psl-maintainers@amazon.com>
// Reference: bb5a965c-dec3-4967-aa22-e306ad064797
@@ -12144,6 +12199,10 @@ pages.gay
// Submitted by Adrian <adrian@betainabox.com>
betainabox.com
+// University of Bielsko-Biala regional domain: http://dns.bielsko.pl/
+// Submitted by Marcin <dns@ath.bielsko.pl>
+bielsko.pl
+
// BinaryLane : http://www.binarylane.com
// Submitted by Nathan O'Sullivan <nathan@mammoth.com.au>
bnr.la
@@ -12190,7 +12249,8 @@ square7.net
*.s.brave.io
// Brendly : https://brendly.rs
-// Submitted by Dusan Radovanovic <dusan.radovanovic@brendly.rs>
+// Submitted by Dusan Radovanovic <administracija@brendly.rs>
+shop.brendly.hr
shop.brendly.rs
// BrowserSafetyMark
@@ -12307,7 +12367,10 @@ discourse.team
// Clever Cloud : https://www.clever-cloud.com/
// Submitted by Quentin Adam <noc@clever-cloud.com>
+cleverapps.cc
+*.services.clever-cloud.com
cleverapps.io
+cleverapps.tech
// Clerk : https://www.clerk.dev
// Submitted by Colin Sidoti <systems@clerk.dev>
@@ -13093,6 +13156,11 @@ us-2.evennode.com
us-3.evennode.com
us-4.evennode.com
+// Expo : https://expo.dev/
+// Submitted by James Ide <psl@expo.dev>
+expo.app
+staging.expo.app
+
// eDirect Corp. : https://hosting.url.com.tw/
// Submitted by C.S. chang <cschang@corp.url.com.tw>
twmail.cc
@@ -13391,10 +13459,6 @@ localcert.net
localhostcert.net
corpnet.work
-// Ghost Foundation : https://ghost.org
-// Submitted by Matt Hanley <security@ghost.org>
-ghost.io
-
// GignoSystemJapan: http://gsj.bz
// Submitted by GignoSystemJapan <kakutou-ec@gsj.bz>
gsj.bz
@@ -13559,7 +13623,8 @@ ro.im
goip.de
// Google, Inc.
-// Submitted by Eduardo Vela <evn@google.com>
+// Submitted by Shannon McCabe <public-suffix-editors@google.com>
+*.hosted.app
*.run.app
web.app
*.0emm.com
@@ -14063,10 +14128,6 @@ co.network
co.place
co.technology
-// Lightmaker Property Manager, Inc. : https://app.lmpm.com/
-// Submitted by Greg Holland <greg.holland@lmpm.com>
-app.lmpm.com
-
// linkyard ldt: https://www.linkyard.ch/
// Submitted by Mario Siegenthaler <mario.siegenthaler@linkyard.ch>
linkyard.cloud
@@ -14312,6 +14373,10 @@ netlify.app
// Submitted by Trung Tran <Trung.Tran@neustar.biz>
4u.com
+// NGO.US Registry : https://nic.ngo.us
+// Submitted by Alstra Solutions Ltd. Networking Team <admin@alstra.org>
+ngo.us
+
// ngrok : https://ngrok.com/
// Submitted by Alan Shreve <alan@ngrok.com>
ngrok.app
@@ -14362,6 +14427,10 @@ noop.app
// Submitted by Laurent Pellegrino <security@noticeable.io>
noticeable.news
+// Notion Labs, Inc : https://www.notion.so/
+// Submitted by Jess Yao <trust-core-team@makenotion.com>
+notion.site
+
// Now-DNS : https://now-dns.com
// Submitted by Steve Russell <steve@now-dns.com>
dnsking.ch
@@ -14495,8 +14564,13 @@ pcloud.host
// Submitted by Matthew Brown <mattbrown@nyc.mn>
nyc.mn
+// O3O.Foundation : https://o3o.foundation/
+// Submitted by the prvcy.page Registry Team <psl@registry.prvcy.page>
+prvcy.page
+
// Observable, Inc. : https://observablehq.com
// Submitted by Mike Bostock <dns@observablehq.com>
+observablehq.cloud
static.observableusercontent.com
// Octopodal Solutions, LLC. : https://ulterius.io/
@@ -14624,6 +14698,7 @@ pagexl.com
// pcarrier.ca Software Inc: https://pcarrier.ca/
// Submitted by Pierre Carrier <pc@rrier.ca>
*.xmit.co
+xmit.dev
srv.us
gh.srv.us
gl.srv.us
@@ -14714,10 +14789,6 @@ xen.prgmr.com
// Submitted by registry <lendl@nic.at>
priv.at
-// privacytools.io : https://www.privacytools.io/
-// Submitted by Jonah Aragon <jonah@privacytools.io>
-prvcy.page
-
// Protocol Labs : https://protocol.ai/
// Submitted by Michael Burns <noc@protocol.ai>
*.dweb.link
@@ -15062,6 +15133,10 @@ biz.ua
co.ua
pp.ua
+// Sheezy.Art : https://sheezy.art
+// Submitted by Nyoom <admin@sheezy.art>
+sheezy.games
+
// Shift Crypto AG : https://shiftcrypto.ch
// Submitted by alex <alex@shiftcrypto.ch>
shiftcrypto.dev
@@ -15484,6 +15559,11 @@ dnsupdate.info
// Submitted by Ed Moore <Ed.Moore@lib.de.us>
lib.de.us
+// Val Town, Inc : https://val.town/
+// Submitted by Tom MacWright <security@val.town>
+express.val.run
+web.val.run
+
// VeryPositive SIA : http://very.lv
// Submitted by Danko Aleksejevs <danko@very.lv>
2038.io
@@ -15548,6 +15628,10 @@ wedeploy.sh
// Submitted by Jung Jin <jungseok.jin@wdc.com>
remotewd.com
+// Whatbox Inc. : https://whatbox.ca/
+// Submitted by Anthony Ryan <servers@whatbox.ca>
+box.ca
+
// WIARD Enterprises : https://wiardweb.com
// Submitted by Kidd Hustle <kiddhustle@wiardweb.com>
pages.wiardweb.com
@@ -15650,6 +15734,10 @@ za.org
// Submitted by Julian Alker <security@zap-hosting.com>
zap.cloud
+// Zeabur : https://zeabur.com/
+// Submitted by Zeabur Team <contact@zeabur.com>
+zeabur.app
+
// Zine EOOD : https://zine.bg/
// Submitted by Martin Angelov <martin@zine.bg>
bss.design
diff --git a/ansible_collections/community/dns/tests/integration/targets/filter_txt/tasks/main.yml b/ansible_collections/community/dns/tests/integration/targets/filter_txt/tasks/main.yml
index c0afffcea..63c7d8424 100644
--- a/ansible_collections/community/dns/tests/integration/targets/filter_txt/tasks/main.yml
+++ b/ansible_collections/community/dns/tests/integration/targets/filter_txt/tasks/main.yml
@@ -47,3 +47,47 @@
'"foo" "bar"' | community.dns.unquote_txt == "foobar"
- >
'foo "bar baz" bam' | community.dns.unquote_txt == "foobar bazbam"
+
+- name: quote_txt failure - input not string
+ set_fact:
+ output: "{{ 1 | community.dns.quote_txt }}"
+ register: quote_failure_1
+ ignore_errors: true
+
+- name: quote_txt failure - always_quote not a boolean
+ set_fact:
+ output: "{{ '' | community.dns.quote_txt(always_quote=1) }}"
+ register: quote_failure_2
+ ignore_errors: true
+
+- name: quote_txt failure - character_encoding has invalid value
+ set_fact:
+ output: "{{ '' | community.dns.quote_txt(character_encoding='foo') }}"
+ register: quote_failure_3
+ ignore_errors: true
+
+- name: unquote_txt failure - input not string
+ set_fact:
+ output: "{{ 1 | community.dns.unquote_txt }}"
+ register: unquote_failure_1
+ ignore_errors: true
+
+- name: unquote_txt failure - character_encoding has invalid value
+ set_fact:
+ output: "{{ '' | community.dns.unquote_txt(character_encoding='foo') }}"
+ register: unquote_failure_2
+ ignore_errors: true
+
+- name: Validate errors
+ assert:
+ that:
+ - quote_failure_1 is failed
+ - quote_failure_1.msg == 'Input for community.dns.quote_txt must be a string'
+ - quote_failure_2 is failed
+ - quote_failure_2.msg == 'always_quote must be a boolean, not 1'
+ - quote_failure_3 is failed
+ - quote_failure_3.msg == "character_encoding must be \"decimal\" or \"octal\", not 'foo'"
+ - unquote_failure_1 is failed
+ - unquote_failure_1.msg == 'Input for community.dns.unquote_txt must be a string'
+ - unquote_failure_2 is failed
+ - unquote_failure_2.msg == "character_encoding must be \"decimal\" or \"octal\", not 'foo'"
diff --git a/ansible_collections/community/dns/tests/unit/plugins/inventory/test_hetzner_dns_records.py b/ansible_collections/community/dns/tests/unit/plugins/inventory/test_hetzner_dns_records.py
index 44f694708..2dadf2643 100644
--- a/ansible_collections/community/dns/tests/unit/plugins/inventory/test_hetzner_dns_records.py
+++ b/ansible_collections/community/dns/tests/unit/plugins/inventory/test_hetzner_dns_records.py
@@ -236,7 +236,7 @@ def test_inventory_file_simple(mocker):
plugin: community.dns.hetzner_dns_records
hetzner_token: foo
zone_name: example.com
- filters:
+ simple_filters:
type: A
""")}
@@ -289,7 +289,7 @@ def test_inventory_file_collision(mocker):
plugin: community.dns.hetzner_dns_records
hetzner_token: '{{ "foo" }}'
zone_name: '{{ "example." ~ "com" }}'
- filters:
+ simple_filters:
type:
- A
- AAAA
diff --git a/ansible_collections/community/dns/tests/unit/plugins/inventory/test_hosttech_dns_records.py b/ansible_collections/community/dns/tests/unit/plugins/inventory/test_hosttech_dns_records.py
index 11995198c..dd56623df 100644
--- a/ansible_collections/community/dns/tests/unit/plugins/inventory/test_hosttech_dns_records.py
+++ b/ansible_collections/community/dns/tests/unit/plugins/inventory/test_hosttech_dns_records.py
@@ -220,7 +220,7 @@ def test_inventory_file_simple(mocker):
plugin: community.dns.hosttech_dns_records
hosttech_token: foo
zone_name: example.com
- filters:
+ simple_filters:
type: A
""")}
@@ -270,7 +270,7 @@ def test_inventory_file_collision(mocker):
plugin: community.dns.hosttech_dns_records
hosttech_token: "{{ 'foo' }}"
zone_name: "{{ 'example' ~ '.com' }}"
- filters:
+ simple_filters:
type:
- A
- AAAA
diff --git a/ansible_collections/community/dns/tests/unit/plugins/lookup/test_lookup.py b/ansible_collections/community/dns/tests/unit/plugins/lookup/test_lookup.py
index 0982d8704..010fe8ac0 100644
--- a/ansible_collections/community/dns/tests/unit/plugins/lookup/test_lookup.py
+++ b/ansible_collections/community/dns/tests/unit/plugins/lookup/test_lookup.py
@@ -35,7 +35,8 @@ class TestLookup(TestCase):
resolver = mock_resolver(['1.1.1.1'], {
('1.1.1.1', ): [
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'result': create_mock_answer(dns.rrset.from_rdata(
@@ -57,29 +58,60 @@ class TestLookup(TestCase):
assert result[0] == '127.0.0.1'
assert result[1] == '127.0.0.2'
- def test_retry_success(self):
+ def test_no_search(self):
resolver = mock_resolver(['1.1.1.1'], {
('1.1.1.1', ): [
{
'target': dns.name.from_unicode(u'www.example.com'),
+ 'search': False,
+ 'rdtype': dns.rdatatype.A,
+ 'lifetime': 10,
+ 'result': create_mock_answer(dns.rrset.from_rdata(
+ 'www.example.com',
+ 300,
+ dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, '127.0.0.1'),
+ dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, '127.0.0.2'),
+ )),
+ },
+ ],
+ })
+ with patch('dns.resolver.get_default_resolver', resolver):
+ with patch('dns.resolver.Resolver', resolver):
+ with patch('dns.query.udp', mock_query_udp([])):
+ result = self.lookup.run(['www.example.com'], search=False)
+
+ print(result)
+ assert len(result) == 2
+ assert result[0] == '127.0.0.1'
+ assert result[1] == '127.0.0.2'
+
+ def test_retry_success(self):
+ resolver = mock_resolver(['1.1.1.1'], {
+ ('1.1.1.1', ): [
+ {
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'raise': dns.exception.Timeout(timeout=10),
},
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'raise': dns.exception.Timeout(timeout=10),
},
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'raise': dns.exception.Timeout(timeout=10),
},
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'result': create_mock_answer(dns.rrset.from_rdata(
@@ -105,25 +137,29 @@ class TestLookup(TestCase):
resolver = mock_resolver(['1.1.1.1'], {
('1.1.1.1', ): [
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'raise': dns.exception.Timeout(timeout=10),
},
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'raise': dns.exception.Timeout(timeout=10),
},
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'raise': dns.exception.Timeout(timeout=10),
},
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'raise': dns.exception.Timeout(timeout=10),
@@ -143,7 +179,8 @@ class TestLookup(TestCase):
resolver = mock_resolver(['1.1.1.1'], {
('1.1.1.1', ): [
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'result': create_mock_answer(rcode=dns.rcode.NXDOMAIN),
@@ -162,7 +199,8 @@ class TestLookup(TestCase):
resolver = mock_resolver(['1.1.1.1'], {
('1.1.1.1', ): [
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'result': create_mock_answer(rcode=dns.rcode.NXDOMAIN),
@@ -181,7 +219,8 @@ class TestLookup(TestCase):
resolver = mock_resolver(['1.1.1.1'], {
('1.1.1.1', ): [
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'result': create_mock_answer(rcode=dns.rcode.NXDOMAIN),
@@ -200,7 +239,8 @@ class TestLookup(TestCase):
resolver = mock_resolver(['1.1.1.1'], {
('1.1.1.1', ): [
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'result': create_mock_answer(rcode=dns.rcode.NXDOMAIN),
@@ -220,7 +260,8 @@ class TestLookup(TestCase):
resolver = mock_resolver(['1.1.1.1'], {
('1.1.1.1', ): [
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'result': create_mock_answer(rcode=dns.rcode.NXDOMAIN),
@@ -240,7 +281,8 @@ class TestLookup(TestCase):
resolver = mock_resolver(['1.1.1.1'], {
('1.1.1.1', ): [
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'result': create_mock_answer(rcode=dns.rcode.SERVFAIL),
@@ -260,19 +302,22 @@ class TestLookup(TestCase):
resolver = mock_resolver(['1.1.1.1'], {
('1.1.1.1', ): [
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'result': create_mock_answer(rcode=dns.rcode.SERVFAIL),
},
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'result': create_mock_answer(rcode=dns.rcode.SERVFAIL),
},
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'result': create_mock_answer(rcode=dns.rcode.NXDOMAIN),
@@ -291,19 +336,22 @@ class TestLookup(TestCase):
resolver = mock_resolver(['1.1.1.1'], {
('1.1.1.1', ): [
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'result': create_mock_answer(rcode=dns.rcode.SERVFAIL),
},
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'result': create_mock_answer(rcode=dns.rcode.SERVFAIL),
},
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'result': create_mock_answer(rcode=dns.rcode.SERVFAIL),
@@ -323,7 +371,8 @@ class TestLookup(TestCase):
resolver = mock_resolver(['1.1.1.1'], {
('1.1.1.1', ): [
{
- 'target': dns.name.from_unicode(u'example.com'),
+ 'target': dns.name.from_unicode(u'example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.TXT,
'lifetime': 10,
'result': create_mock_answer(dns.rrset.from_rdata(
@@ -351,7 +400,8 @@ class TestLookup(TestCase):
resolver = mock_resolver(['1.1.1.1'], {
('2.2.2.2', '3.3.3.3'): [
{
- 'target': dns.name.from_unicode(u'example.org'),
+ 'target': dns.name.from_unicode(u'example.org', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.AAAA,
'lifetime': 10,
'result': create_mock_answer(dns.rrset.from_rdata(
@@ -397,7 +447,8 @@ class TestLookup(TestCase):
],
('1.2.3.4', '1::2', '2.2.2.2', '3.3.3.3'): [
{
- 'target': dns.name.from_unicode(u'example.org'),
+ 'target': dns.name.from_unicode(u'example.org', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.AAAA,
'lifetime': 10,
'result': create_mock_answer(dns.rrset.from_rdata(
@@ -477,7 +528,8 @@ class TestLookup(TestCase):
],
('3.3.3.3', ): [
{
- 'target': dns.name.from_unicode(u'example.org'),
+ 'target': dns.name.from_unicode(u'example.org', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.AAAA,
'lifetime': 5,
'raise': dns.resolver.NoAnswer(response=fake_query),
diff --git a/ansible_collections/community/dns/tests/unit/plugins/lookup/test_lookup_as_dict.py b/ansible_collections/community/dns/tests/unit/plugins/lookup/test_lookup_as_dict.py
index f29d73143..57c3655a9 100644
--- a/ansible_collections/community/dns/tests/unit/plugins/lookup/test_lookup_as_dict.py
+++ b/ansible_collections/community/dns/tests/unit/plugins/lookup/test_lookup_as_dict.py
@@ -35,7 +35,8 @@ class TestLookupAsDict(TestCase):
resolver = mock_resolver(['1.1.1.1'], {
('1.1.1.1', ): [
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'result': create_mock_answer(dns.rrset.from_rdata(
@@ -61,29 +62,64 @@ class TestLookupAsDict(TestCase):
'address': '127.0.0.2',
}
- def test_retry_success(self):
+ def test_no_search(self):
resolver = mock_resolver(['1.1.1.1'], {
('1.1.1.1', ): [
{
'target': dns.name.from_unicode(u'www.example.com'),
+ 'search': False,
+ 'rdtype': dns.rdatatype.A,
+ 'lifetime': 10,
+ 'result': create_mock_answer(dns.rrset.from_rdata(
+ 'www.example.com',
+ 300,
+ dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, '127.0.0.1'),
+ dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, '127.0.0.2'),
+ )),
+ },
+ ],
+ })
+ with patch('dns.resolver.get_default_resolver', resolver):
+ with patch('dns.resolver.Resolver', resolver):
+ with patch('dns.query.udp', mock_query_udp([])):
+ result = self.lookup.run(['www.example.com'], search=False)
+
+ print(result)
+ assert len(result) == 2
+ assert result[0] == {
+ 'address': '127.0.0.1',
+ }
+ assert result[1] == {
+ 'address': '127.0.0.2',
+ }
+
+ def test_retry_success(self):
+ resolver = mock_resolver(['1.1.1.1'], {
+ ('1.1.1.1', ): [
+ {
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'raise': dns.exception.Timeout(timeout=10),
},
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'raise': dns.exception.Timeout(timeout=10),
},
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'raise': dns.exception.Timeout(timeout=10),
},
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'result': create_mock_answer(dns.rrset.from_rdata(
@@ -113,25 +149,29 @@ class TestLookupAsDict(TestCase):
resolver = mock_resolver(['1.1.1.1'], {
('1.1.1.1', ): [
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'raise': dns.exception.Timeout(timeout=10),
},
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'raise': dns.exception.Timeout(timeout=10),
},
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'raise': dns.exception.Timeout(timeout=10),
},
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'raise': dns.exception.Timeout(timeout=10),
@@ -151,7 +191,8 @@ class TestLookupAsDict(TestCase):
resolver = mock_resolver(['1.1.1.1'], {
('1.1.1.1', ): [
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'result': create_mock_answer(rcode=dns.rcode.NXDOMAIN),
@@ -170,7 +211,8 @@ class TestLookupAsDict(TestCase):
resolver = mock_resolver(['1.1.1.1'], {
('1.1.1.1', ): [
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'result': create_mock_answer(rcode=dns.rcode.NXDOMAIN),
@@ -190,7 +232,8 @@ class TestLookupAsDict(TestCase):
resolver = mock_resolver(['1.1.1.1'], {
('1.1.1.1', ): [
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'result': create_mock_answer(rcode=dns.rcode.SERVFAIL),
@@ -210,19 +253,22 @@ class TestLookupAsDict(TestCase):
resolver = mock_resolver(['1.1.1.1'], {
('1.1.1.1', ): [
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'result': create_mock_answer(rcode=dns.rcode.SERVFAIL),
},
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'result': create_mock_answer(rcode=dns.rcode.SERVFAIL),
},
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'result': create_mock_answer(rcode=dns.rcode.NXDOMAIN),
@@ -241,19 +287,22 @@ class TestLookupAsDict(TestCase):
resolver = mock_resolver(['1.1.1.1'], {
('1.1.1.1', ): [
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'result': create_mock_answer(rcode=dns.rcode.SERVFAIL),
},
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'result': create_mock_answer(rcode=dns.rcode.SERVFAIL),
},
{
- 'target': dns.name.from_unicode(u'www.example.com'),
+ 'target': dns.name.from_unicode(u'www.example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.A,
'lifetime': 10,
'result': create_mock_answer(rcode=dns.rcode.SERVFAIL),
@@ -273,7 +322,8 @@ class TestLookupAsDict(TestCase):
resolver = mock_resolver(['1.1.1.1'], {
('1.1.1.1', ): [
{
- 'target': dns.name.from_unicode(u'example.com'),
+ 'target': dns.name.from_unicode(u'example.com', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.TXT,
'lifetime': 10,
'result': create_mock_answer(dns.rrset.from_rdata(
@@ -310,7 +360,8 @@ class TestLookupAsDict(TestCase):
resolver = mock_resolver(['1.1.1.1'], {
('2.2.2.2', '3.3.3.3'): [
{
- 'target': dns.name.from_unicode(u'example.org'),
+ 'target': dns.name.from_unicode(u'example.org', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.AAAA,
'lifetime': 10,
'result': create_mock_answer(dns.rrset.from_rdata(
@@ -358,7 +409,8 @@ class TestLookupAsDict(TestCase):
],
('1.2.3.4', '1::2', '2.2.2.2', '3.3.3.3'): [
{
- 'target': dns.name.from_unicode(u'example.org'),
+ 'target': dns.name.from_unicode(u'example.org', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.AAAA,
'lifetime': 10,
'result': create_mock_answer(dns.rrset.from_rdata(
@@ -440,7 +492,8 @@ class TestLookupAsDict(TestCase):
],
('3.3.3.3', ): [
{
- 'target': dns.name.from_unicode(u'example.org'),
+ 'target': dns.name.from_unicode(u'example.org', origin=None),
+ 'search': True,
'rdtype': dns.rdatatype.AAAA,
'lifetime': 5,
'raise': dns.resolver.NoAnswer(response=fake_query),
diff --git a/ansible_collections/community/dns/tests/unit/plugins/module_utils/resolver_helper.py b/ansible_collections/community/dns/tests/unit/plugins/module_utils/resolver_helper.py
index 7fa213c9f..71a0af989 100644
--- a/ansible_collections/community/dns/tests/unit/plugins/module_utils/resolver_helper.py
+++ b/ansible_collections/community/dns/tests/unit/plugins/module_utils/resolver_helper.py
@@ -22,7 +22,7 @@ def mock_resolver(default_nameservers, nameserver_resolve_sequence):
resolver = MagicMock()
resolver.nameservers = default_nameservers if configure else []
- def mock_resolver_resolve(target, rdtype=None, lifetime=None):
+ def mock_resolver_resolve(target, rdtype=None, lifetime=None, search=None):
resolver_index = tuple(sorted(resolver.nameservers))
assert resolver_index in nameserver_resolve_sequence, 'No resolver sequence for {0}'.format(resolver_index)
resolve_sequence = nameserver_resolve_sequence[resolver_index]
@@ -33,6 +33,7 @@ def mock_resolver(default_nameservers, nameserver_resolve_sequence):
assert target == resolve_data['target'], 'target: {0!r} vs {1!r}'.format(target, resolve_data['target'])
assert rdtype == resolve_data.get('rdtype'), 'rdtype: {0!r} vs {1!r}'.format(rdtype, resolve_data.get('rdtype'))
assert lifetime == resolve_data['lifetime'], 'lifetime: {0!r} vs {1!r}'.format(lifetime, resolve_data['lifetime'])
+ assert search == resolve_data.get('search'), 'search: {0!r} vs {1!r}'.format(search, resolve_data.get('search'))
if 'raise' in resolve_data:
raise resolve_data['raise']
diff --git a/ansible_collections/community/dns/tests/unit/plugins/modules/test_hetzner_dns_record_set_info.py b/ansible_collections/community/dns/tests/unit/plugins/modules/test_hetzner_dns_record_set_info.py
index a42add09d..e6894f97c 100644
--- a/ansible_collections/community/dns/tests/unit/plugins/modules/test_hetzner_dns_record_set_info.py
+++ b/ansible_collections/community/dns/tests/unit/plugins/modules/test_hetzner_dns_record_set_info.py
@@ -627,7 +627,7 @@ class TestHetznerDNSRecordSetInfoJSON(BaseTestModule):
assert result['set']['value'] == [u'"b\\195\\164r \\"with quotes\\" (use \\\\ to escape)"']
assert 'sets' not in result
- def test_get_single_txt_quoted_deprecation(self, mocker):
+ def test_get_single_txt_quoted_octal(self, mocker):
with patch('time.sleep', mock_sleep):
result = self.run_module_success(mocker, hetzner_dns_record_set_info, {
'hetzner_token': 'foo',
@@ -635,6 +635,7 @@ class TestHetznerDNSRecordSetInfoJSON(BaseTestModule):
'prefix': 'foo',
'type': 'TXT',
'txt_transformation': 'quoted',
+ 'txt_character_encoding': 'octal',
'_ansible_remote_tmp': '/tmp/tmp',
'_ansible_keep_remote_files': True,
}, [
@@ -678,19 +679,3 @@ class TestHetznerDNSRecordSetInfoJSON(BaseTestModule):
assert result['set']['type'] == 'TXT'
assert result['set']['value'] == [u'"b\\303\\244r \\"with quotes\\" (use \\\\ to escape)"']
assert 'sets' not in result
- assert 'deprecations' in result
- found = False
- for deprecation in result['deprecations']:
- if 'collection_name' in deprecation and deprecation['collection_name'] != 'community.dns':
- continue
- found = True
- assert deprecation['msg'] == (
- 'The default of the txt_character_encoding option will change from "octal" to "decimal" in community.dns 3.0.0.'
- ' This potentially affects you since you use txt_transformation=quoted.'
- ' You can explicitly set txt_character_encoding to "octal" to keep the current behavior,'
- ' or "decimal" to already now switch to the new behavior.'
- ' We recommend switching to the new behavior, and using check/diff mode to figure out potential changes'
- )
- assert deprecation['version'] == '3.0.0'
- assert deprecation.get('date') is None
- assert found
diff --git a/ansible_collections/community/dns/tests/unit/plugins/plugin_utils/test_unsafe.py b/ansible_collections/community/dns/tests/unit/plugins/plugin_utils/test_unsafe.py
new file mode 100644
index 000000000..cbda5f142
--- /dev/null
+++ b/ansible_collections/community/dns/tests/unit/plugins/plugin_utils/test_unsafe.py
@@ -0,0 +1,133 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2024, Felix Fontein <felix@fontein.de>
+# 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
+
+# Make coding more python3-ish
+from __future__ import absolute_import, division, print_function
+
+__metaclass__ = type
+
+
+import pytest
+
+from ansible.utils.unsafe_proxy import AnsibleUnsafe
+
+from ansible_collections.community.dns.plugins.plugin_utils.unsafe import (
+ make_unsafe,
+)
+
+
+TEST_MAKE_UNSAFE = [
+ (
+ u'text',
+ [],
+ [
+ (),
+ ],
+ ),
+ (
+ u'{{text}}',
+ [
+ (),
+ ],
+ [],
+ ),
+ (
+ b'text',
+ [],
+ [
+ (),
+ ],
+ ),
+ (
+ b'{{text}}',
+ [
+ (),
+ ],
+ [],
+ ),
+ (
+ {
+ 'skey': 'value',
+ 'ukey': '{{value}}',
+ 1: [
+ 'value',
+ '{{value}}',
+ {
+ 1.0: '{{value}}',
+ 2.0: 'value',
+ },
+ ],
+ },
+ [
+ ('ukey', ),
+ (1, 1),
+ (1, 2, 1.0),
+ ],
+ [
+ ('skey', ),
+ (1, 0),
+ (1, 2, 2.0),
+ ],
+ ),
+ (
+ ['value', '{{value}}'],
+ [
+ (1, ),
+ ],
+ [
+ (0, ),
+ ],
+ ),
+]
+
+
+@pytest.mark.parametrize("value, check_unsafe_paths, check_safe_paths", TEST_MAKE_UNSAFE)
+def test_make_unsafe(value, check_unsafe_paths, check_safe_paths):
+ unsafe_value = make_unsafe(value)
+ assert unsafe_value == value
+ for check_path in check_unsafe_paths:
+ obj = unsafe_value
+ for elt in check_path:
+ obj = obj[elt]
+ assert isinstance(obj, AnsibleUnsafe)
+ for check_path in check_safe_paths:
+ obj = unsafe_value
+ for elt in check_path:
+ obj = obj[elt]
+ assert not isinstance(obj, AnsibleUnsafe)
+
+
+def test_make_unsafe_dict_key():
+ value = {
+ b'test': 1,
+ u'test': 2,
+ }
+ unsafe_value = make_unsafe(value)
+ assert unsafe_value == value
+ for obj in unsafe_value:
+ assert not isinstance(obj, AnsibleUnsafe)
+
+ value = {
+ b'{{test}}': 1,
+ u'{{test}}': 2,
+ }
+ unsafe_value = make_unsafe(value)
+ assert unsafe_value == value
+ for obj in unsafe_value:
+ assert isinstance(obj, AnsibleUnsafe)
+
+
+def test_make_unsafe_set():
+ value = set([b'test', u'test'])
+ unsafe_value = make_unsafe(value)
+ assert unsafe_value == value
+ for obj in unsafe_value:
+ assert not isinstance(obj, AnsibleUnsafe)
+
+ value = set([b'{{test}}', u'{{test}}'])
+ unsafe_value = make_unsafe(value)
+ assert unsafe_value == value
+ for obj in unsafe_value:
+ assert isinstance(obj, AnsibleUnsafe)
diff --git a/ansible_collections/community/docker/.azure-pipelines/azure-pipelines.yml b/ansible_collections/community/docker/.azure-pipelines/azure-pipelines.yml
index e5d55cf6e..ae4197a4a 100644
--- a/ansible_collections/community/docker/.azure-pipelines/azure-pipelines.yml
+++ b/ansible_collections/community/docker/.azure-pipelines/azure-pipelines.yml
@@ -186,7 +186,7 @@ stages:
- name: Debian Bookworm
test: debian-bookworm/3.11
- name: ArchLinux
- test: archlinux/3.11
+ test: archlinux/3.12
groups:
- 4
- 5
diff --git a/ansible_collections/community/docker/.github/workflows/ansible-test.yml b/ansible_collections/community/docker/.github/workflows/ansible-test.yml
index d0f253d35..d4778e091 100644
--- a/ansible_collections/community/docker/.github/workflows/ansible-test.yml
+++ b/ansible_collections/community/docker/.github/workflows/ansible-test.yml
@@ -48,6 +48,7 @@ jobs:
with:
ansible-core-github-repository-slug: ${{ contains(fromJson('["2.10", "2.11"]'), matrix.ansible) && 'felixfontein/ansible' || 'ansible/ansible' }}
ansible-core-version: stable-${{ matrix.ansible }}
+ codecov-token: ${{ secrets.CODECOV_TOKEN }}
coverage: ${{ github.event_name == 'schedule' && 'always' || 'never' }}
pull-request-change-detection: 'true'
testing-type: sanity
@@ -81,6 +82,7 @@ jobs:
with:
ansible-core-github-repository-slug: ${{ contains(fromJson('["2.10", "2.11"]'), matrix.ansible) && 'felixfontein/ansible' || 'ansible/ansible' }}
ansible-core-version: stable-${{ matrix.ansible }}
+ codecov-token: ${{ secrets.CODECOV_TOKEN }}
coverage: ${{ github.event_name == 'schedule' && 'always' || 'never' }}
pull-request-change-detection: 'true'
testing-type: units
@@ -236,6 +238,7 @@ jobs:
with:
ansible-core-github-repository-slug: ${{ contains(fromJson('["2.10", "2.11"]'), matrix.ansible) && 'felixfontein/ansible' || 'ansible/ansible' }}
ansible-core-version: stable-${{ matrix.ansible }}
+ codecov-token: ${{ secrets.CODECOV_TOKEN }}
coverage: ${{ github.event_name == 'schedule' && 'always' || 'never' }}
docker-image: ${{ matrix.docker }}
integration-continue-on-error: 'false'
diff --git a/ansible_collections/community/docker/CHANGELOG.md b/ansible_collections/community/docker/CHANGELOG.md
index f3a4b7af6..13d287f2e 100644
--- a/ansible_collections/community/docker/CHANGELOG.md
+++ b/ansible_collections/community/docker/CHANGELOG.md
@@ -2,241 +2,331 @@
**Topics**
-- <a href="#v3-9-0">v3\.9\.0</a>
+- <a href="#v3-10-3">v3\.10\.3</a>
- <a href="#release-summary">Release Summary</a>
- - <a href="#minor-changes">Minor Changes</a>
- <a href="#bugfixes">Bugfixes</a>
-- <a href="#v3-8-1">v3\.8\.1</a>
+- <a href="#v3-10-2">v3\.10\.2</a>
- <a href="#release-summary-1">Release Summary</a>
- - <a href="#security-fixes">Security Fixes</a>
- <a href="#bugfixes-1">Bugfixes</a>
-- <a href="#v3-8-0">v3\.8\.0</a>
+- <a href="#v3-10-1">v3\.10\.1</a>
- <a href="#release-summary-2">Release Summary</a>
- - <a href="#minor-changes-1">Minor Changes</a>
- <a href="#bugfixes-2">Bugfixes</a>
-- <a href="#v3-7-0">v3\.7\.0</a>
+ - <a href="#known-issues">Known Issues</a>
+- <a href="#v3-10-0">v3\.10\.0</a>
- <a href="#release-summary-3">Release Summary</a>
- - <a href="#minor-changes-2">Minor Changes</a>
+ - <a href="#minor-changes">Minor Changes</a>
+ - <a href="#deprecated-features">Deprecated Features</a>
+- <a href="#v3-9-0">v3\.9\.0</a>
+ - <a href="#release-summary-4">Release Summary</a>
+ - <a href="#minor-changes-1">Minor Changes</a>
- <a href="#bugfixes-3">Bugfixes</a>
+- <a href="#v3-8-1">v3\.8\.1</a>
+ - <a href="#release-summary-5">Release Summary</a>
+ - <a href="#security-fixes">Security Fixes</a>
+ - <a href="#bugfixes-4">Bugfixes</a>
+- <a href="#v3-8-0">v3\.8\.0</a>
+ - <a href="#release-summary-6">Release Summary</a>
+ - <a href="#minor-changes-2">Minor Changes</a>
+ - <a href="#bugfixes-5">Bugfixes</a>
+- <a href="#v3-7-0">v3\.7\.0</a>
+ - <a href="#release-summary-7">Release Summary</a>
+ - <a href="#minor-changes-3">Minor Changes</a>
+ - <a href="#bugfixes-6">Bugfixes</a>
- <a href="#new-modules">New Modules</a>
- <a href="#v3-6-0">v3\.6\.0</a>
- - <a href="#release-summary-4">Release Summary</a>
+ - <a href="#release-summary-8">Release Summary</a>
- <a href="#major-changes">Major Changes</a>
- - <a href="#minor-changes-3">Minor Changes</a>
- - <a href="#bugfixes-4">Bugfixes</a>
- - <a href="#new-modules-1">New Modules</a>
-- <a href="#v3-5-0">v3\.5\.0</a>
- - <a href="#release-summary-5">Release Summary</a>
- <a href="#minor-changes-4">Minor Changes</a>
- - <a href="#deprecated-features">Deprecated Features</a>
- - <a href="#bugfixes-5">Bugfixes</a>
-- <a href="#v3-4-11">v3\.4\.11</a>
- - <a href="#release-summary-6">Release Summary</a>
- - <a href="#bugfixes-6">Bugfixes</a>
-- <a href="#v3-4-10">v3\.4\.10</a>
- - <a href="#release-summary-7">Release Summary</a>
- <a href="#bugfixes-7">Bugfixes</a>
-- <a href="#v3-4-9">v3\.4\.9</a>
- - <a href="#release-summary-8">Release Summary</a>
- - <a href="#bugfixes-8">Bugfixes</a>
-- <a href="#v3-4-8">v3\.4\.8</a>
+ - <a href="#new-modules-1">New Modules</a>
+- <a href="#v3-5-0">v3\.5\.0</a>
- <a href="#release-summary-9">Release Summary</a>
- - <a href="#known-issues">Known Issues</a>
-- <a href="#v3-4-7">v3\.4\.7</a>
+ - <a href="#minor-changes-5">Minor Changes</a>
+ - <a href="#deprecated-features-1">Deprecated Features</a>
+ - <a href="#bugfixes-8">Bugfixes</a>
+- <a href="#v3-4-11">v3\.4\.11</a>
- <a href="#release-summary-10">Release Summary</a>
- <a href="#bugfixes-9">Bugfixes</a>
-- <a href="#v3-4-6">v3\.4\.6</a>
+- <a href="#v3-4-10">v3\.4\.10</a>
- <a href="#release-summary-11">Release Summary</a>
- <a href="#bugfixes-10">Bugfixes</a>
- - <a href="#known-issues-1">Known Issues</a>
-- <a href="#v3-4-5">v3\.4\.5</a>
+- <a href="#v3-4-9">v3\.4\.9</a>
- <a href="#release-summary-12">Release Summary</a>
- <a href="#bugfixes-11">Bugfixes</a>
-- <a href="#v3-4-4">v3\.4\.4</a>
+- <a href="#v3-4-8">v3\.4\.8</a>
- <a href="#release-summary-13">Release Summary</a>
- - <a href="#minor-changes-5">Minor Changes</a>
- - <a href="#known-issues-2">Known Issues</a>
-- <a href="#v3-4-3">v3\.4\.3</a>
+ - <a href="#known-issues-1">Known Issues</a>
+- <a href="#v3-4-7">v3\.4\.7</a>
- <a href="#release-summary-14">Release Summary</a>
-- <a href="#v3-4-2">v3\.4\.2</a>
- - <a href="#release-summary-15">Release Summary</a>
- <a href="#bugfixes-12">Bugfixes</a>
-- <a href="#v3-4-1">v3\.4\.1</a>
- - <a href="#release-summary-16">Release Summary</a>
+- <a href="#v3-4-6">v3\.4\.6</a>
+ - <a href="#release-summary-15">Release Summary</a>
- <a href="#bugfixes-13">Bugfixes</a>
-- <a href="#v3-4-0">v3\.4\.0</a>
+ - <a href="#known-issues-2">Known Issues</a>
+- <a href="#v3-4-5">v3\.4\.5</a>
+ - <a href="#release-summary-16">Release Summary</a>
+ - <a href="#bugfixes-14">Bugfixes</a>
+- <a href="#v3-4-4">v3\.4\.4</a>
- <a href="#release-summary-17">Release Summary</a>
- <a href="#minor-changes-6">Minor Changes</a>
- - <a href="#bugfixes-14">Bugfixes</a>
- - <a href="#new-modules-2">New Modules</a>
-- <a href="#v3-3-2">v3\.3\.2</a>
+ - <a href="#known-issues-3">Known Issues</a>
+- <a href="#v3-4-3">v3\.4\.3</a>
- <a href="#release-summary-18">Release Summary</a>
- - <a href="#bugfixes-15">Bugfixes</a>
-- <a href="#v3-3-1">v3\.3\.1</a>
+- <a href="#v3-4-2">v3\.4\.2</a>
- <a href="#release-summary-19">Release Summary</a>
- - <a href="#bugfixes-16">Bugfixes</a>
-- <a href="#v3-3-0">v3\.3\.0</a>
+ - <a href="#bugfixes-15">Bugfixes</a>
+- <a href="#v3-4-1">v3\.4\.1</a>
- <a href="#release-summary-20">Release Summary</a>
+ - <a href="#bugfixes-16">Bugfixes</a>
+- <a href="#v3-4-0">v3\.4\.0</a>
+ - <a href="#release-summary-21">Release Summary</a>
- <a href="#minor-changes-7">Minor Changes</a>
- <a href="#bugfixes-17">Bugfixes</a>
-- <a href="#v3-2-2">v3\.2\.2</a>
- - <a href="#release-summary-21">Release Summary</a>
- - <a href="#bugfixes-18">Bugfixes</a>
-- <a href="#v3-2-1">v3\.2\.1</a>
+ - <a href="#new-modules-2">New Modules</a>
+- <a href="#v3-3-2">v3\.3\.2</a>
- <a href="#release-summary-22">Release Summary</a>
-- <a href="#v3-2-0">v3\.2\.0</a>
+ - <a href="#bugfixes-18">Bugfixes</a>
+- <a href="#v3-3-1">v3\.3\.1</a>
- <a href="#release-summary-23">Release Summary</a>
- - <a href="#minor-changes-8">Minor Changes</a>
- - <a href="#deprecated-features-1">Deprecated Features</a>
-- <a href="#v3-1-0">v3\.1\.0</a>
+ - <a href="#bugfixes-19">Bugfixes</a>
+- <a href="#v3-3-0">v3\.3\.0</a>
- <a href="#release-summary-24">Release Summary</a>
+ - <a href="#minor-changes-8">Minor Changes</a>
+ - <a href="#bugfixes-20">Bugfixes</a>
+- <a href="#v3-2-2">v3\.2\.2</a>
+ - <a href="#release-summary-25">Release Summary</a>
+ - <a href="#bugfixes-21">Bugfixes</a>
+- <a href="#v3-2-1">v3\.2\.1</a>
+ - <a href="#release-summary-26">Release Summary</a>
+- <a href="#v3-2-0">v3\.2\.0</a>
+ - <a href="#release-summary-27">Release Summary</a>
- <a href="#minor-changes-9">Minor Changes</a>
+ - <a href="#deprecated-features-2">Deprecated Features</a>
+- <a href="#v3-1-0">v3\.1\.0</a>
+ - <a href="#release-summary-28">Release Summary</a>
+ - <a href="#minor-changes-10">Minor Changes</a>
- <a href="#v3-0-2">v3\.0\.2</a>
- - <a href="#release-summary-25">Release Summary</a>
- - <a href="#bugfixes-19">Bugfixes</a>
+ - <a href="#release-summary-29">Release Summary</a>
+ - <a href="#bugfixes-22">Bugfixes</a>
- <a href="#v3-0-1">v3\.0\.1</a>
- - <a href="#release-summary-26">Release Summary</a>
- - <a href="#bugfixes-20">Bugfixes</a>
+ - <a href="#release-summary-30">Release Summary</a>
+ - <a href="#bugfixes-23">Bugfixes</a>
- <a href="#v3-0-0">v3\.0\.0</a>
- - <a href="#release-summary-27">Release Summary</a>
+ - <a href="#release-summary-31">Release Summary</a>
- <a href="#major-changes-1">Major Changes</a>
- - <a href="#minor-changes-10">Minor Changes</a>
+ - <a href="#minor-changes-11">Minor Changes</a>
- <a href="#breaking-changes--porting-guide">Breaking Changes / Porting Guide</a>
- <a href="#removed-features-previously-deprecated">Removed Features \(previously deprecated\)</a>
- <a href="#security-fixes-1">Security Fixes</a>
- - <a href="#bugfixes-21">Bugfixes</a>
+ - <a href="#bugfixes-24">Bugfixes</a>
- <a href="#v2-7-0">v2\.7\.0</a>
- - <a href="#release-summary-28">Release Summary</a>
- - <a href="#minor-changes-11">Minor Changes</a>
- - <a href="#deprecated-features-2">Deprecated Features</a>
- - <a href="#bugfixes-22">Bugfixes</a>
-- <a href="#v2-6-0">v2\.6\.0</a>
- - <a href="#release-summary-29">Release Summary</a>
+ - <a href="#release-summary-32">Release Summary</a>
- <a href="#minor-changes-12">Minor Changes</a>
- <a href="#deprecated-features-3">Deprecated Features</a>
- - <a href="#bugfixes-23">Bugfixes</a>
-- <a href="#v2-5-1">v2\.5\.1</a>
- - <a href="#release-summary-30">Release Summary</a>
- - <a href="#bugfixes-24">Bugfixes</a>
-- <a href="#v2-5-0">v2\.5\.0</a>
- - <a href="#release-summary-31">Release Summary</a>
- - <a href="#minor-changes-13">Minor Changes</a>
-- <a href="#v2-4-0">v2\.4\.0</a>
- - <a href="#release-summary-32">Release Summary</a>
- - <a href="#minor-changes-14">Minor Changes</a>
- <a href="#bugfixes-25">Bugfixes</a>
-- <a href="#v2-3-0">v2\.3\.0</a>
+- <a href="#v2-6-0">v2\.6\.0</a>
- <a href="#release-summary-33">Release Summary</a>
- - <a href="#minor-changes-15">Minor Changes</a>
+ - <a href="#minor-changes-13">Minor Changes</a>
+ - <a href="#deprecated-features-4">Deprecated Features</a>
- <a href="#bugfixes-26">Bugfixes</a>
-- <a href="#v2-2-1">v2\.2\.1</a>
+- <a href="#v2-5-1">v2\.5\.1</a>
- <a href="#release-summary-34">Release Summary</a>
- <a href="#bugfixes-27">Bugfixes</a>
-- <a href="#v2-2-0">v2\.2\.0</a>
+- <a href="#v2-5-0">v2\.5\.0</a>
- <a href="#release-summary-35">Release Summary</a>
- - <a href="#minor-changes-16">Minor Changes</a>
- - <a href="#bugfixes-28">Bugfixes</a>
-- <a href="#v2-1-1">v2\.1\.1</a>
+ - <a href="#minor-changes-14">Minor Changes</a>
+- <a href="#v2-4-0">v2\.4\.0</a>
- <a href="#release-summary-36">Release Summary</a>
- - <a href="#bugfixes-29">Bugfixes</a>
-- <a href="#v2-1-0">v2\.1\.0</a>
+ - <a href="#minor-changes-15">Minor Changes</a>
+ - <a href="#bugfixes-28">Bugfixes</a>
+- <a href="#v2-3-0">v2\.3\.0</a>
- <a href="#release-summary-37">Release Summary</a>
- - <a href="#minor-changes-17">Minor Changes</a>
- - <a href="#bugfixes-30">Bugfixes</a>
-- <a href="#v2-0-2">v2\.0\.2</a>
+ - <a href="#minor-changes-16">Minor Changes</a>
+ - <a href="#bugfixes-29">Bugfixes</a>
+- <a href="#v2-2-1">v2\.2\.1</a>
- <a href="#release-summary-38">Release Summary</a>
- - <a href="#bugfixes-31">Bugfixes</a>
-- <a href="#v2-0-1">v2\.0\.1</a>
+ - <a href="#bugfixes-30">Bugfixes</a>
+- <a href="#v2-2-0">v2\.2\.0</a>
- <a href="#release-summary-39">Release Summary</a>
-- <a href="#v2-0-0">v2\.0\.0</a>
+ - <a href="#minor-changes-17">Minor Changes</a>
+ - <a href="#bugfixes-31">Bugfixes</a>
+- <a href="#v2-1-1">v2\.1\.1</a>
- <a href="#release-summary-40">Release Summary</a>
- - <a href="#breaking-changes--porting-guide-1">Breaking Changes / Porting Guide</a>
- - <a href="#deprecated-features-4">Deprecated Features</a>
- - <a href="#removed-features-previously-deprecated-1">Removed Features \(previously deprecated\)</a>
-- <a href="#v1-10-0">v1\.10\.0</a>
+ - <a href="#bugfixes-32">Bugfixes</a>
+- <a href="#v2-1-0">v2\.1\.0</a>
- <a href="#release-summary-41">Release Summary</a>
- <a href="#minor-changes-18">Minor Changes</a>
-- <a href="#v1-9-1">v1\.9\.1</a>
+ - <a href="#bugfixes-33">Bugfixes</a>
+- <a href="#v2-0-2">v2\.0\.2</a>
- <a href="#release-summary-42">Release Summary</a>
- - <a href="#bugfixes-32">Bugfixes</a>
-- <a href="#v1-9-0">v1\.9\.0</a>
+ - <a href="#bugfixes-34">Bugfixes</a>
+- <a href="#v2-0-1">v2\.0\.1</a>
- <a href="#release-summary-43">Release Summary</a>
- - <a href="#minor-changes-19">Minor Changes</a>
- - <a href="#deprecated-features-5">Deprecated Features</a>
- - <a href="#bugfixes-33">Bugfixes</a>
- - <a href="#new-plugins">New Plugins</a>
- - <a href="#connection">Connection</a>
-- <a href="#v1-8-0">v1\.8\.0</a>
+- <a href="#v2-0-0">v2\.0\.0</a>
- <a href="#release-summary-44">Release Summary</a>
- - <a href="#minor-changes-20">Minor Changes</a>
- - <a href="#bugfixes-34">Bugfixes</a>
-- <a href="#v1-7-0">v1\.7\.0</a>
+ - <a href="#breaking-changes--porting-guide-1">Breaking Changes / Porting Guide</a>
+ - <a href="#deprecated-features-5">Deprecated Features</a>
+ - <a href="#removed-features-previously-deprecated-1">Removed Features \(previously deprecated\)</a>
+- <a href="#v1-10-0">v1\.10\.0</a>
- <a href="#release-summary-45">Release Summary</a>
- - <a href="#minor-changes-21">Minor Changes</a>
-- <a href="#v1-6-1">v1\.6\.1</a>
+ - <a href="#minor-changes-19">Minor Changes</a>
+- <a href="#v1-9-1">v1\.9\.1</a>
- <a href="#release-summary-46">Release Summary</a>
- <a href="#bugfixes-35">Bugfixes</a>
-- <a href="#v1-6-0">v1\.6\.0</a>
+- <a href="#v1-9-0">v1\.9\.0</a>
- <a href="#release-summary-47">Release Summary</a>
- - <a href="#minor-changes-22">Minor Changes</a>
+ - <a href="#minor-changes-20">Minor Changes</a>
- <a href="#deprecated-features-6">Deprecated Features</a>
- <a href="#bugfixes-36">Bugfixes</a>
-- <a href="#v1-5-0">v1\.5\.0</a>
+ - <a href="#new-plugins">New Plugins</a>
+ - <a href="#connection">Connection</a>
+- <a href="#v1-8-0">v1\.8\.0</a>
- <a href="#release-summary-48">Release Summary</a>
- - <a href="#minor-changes-23">Minor Changes</a>
+ - <a href="#minor-changes-21">Minor Changes</a>
- <a href="#bugfixes-37">Bugfixes</a>
- - <a href="#new-modules-3">New Modules</a>
-- <a href="#v1-4-0">v1\.4\.0</a>
+- <a href="#v1-7-0">v1\.7\.0</a>
- <a href="#release-summary-49">Release Summary</a>
+ - <a href="#minor-changes-22">Minor Changes</a>
+- <a href="#v1-6-1">v1\.6\.1</a>
+ - <a href="#release-summary-50">Release Summary</a>
+ - <a href="#bugfixes-38">Bugfixes</a>
+- <a href="#v1-6-0">v1\.6\.0</a>
+ - <a href="#release-summary-51">Release Summary</a>
+ - <a href="#minor-changes-23">Minor Changes</a>
+ - <a href="#deprecated-features-7">Deprecated Features</a>
+ - <a href="#bugfixes-39">Bugfixes</a>
+- <a href="#v1-5-0">v1\.5\.0</a>
+ - <a href="#release-summary-52">Release Summary</a>
- <a href="#minor-changes-24">Minor Changes</a>
+ - <a href="#bugfixes-40">Bugfixes</a>
+ - <a href="#new-modules-3">New Modules</a>
+- <a href="#v1-4-0">v1\.4\.0</a>
+ - <a href="#release-summary-53">Release Summary</a>
+ - <a href="#minor-changes-25">Minor Changes</a>
- <a href="#breaking-changes--porting-guide-2">Breaking Changes / Porting Guide</a>
- <a href="#security-fixes-2">Security Fixes</a>
- - <a href="#bugfixes-38">Bugfixes</a>
+ - <a href="#bugfixes-41">Bugfixes</a>
- <a href="#v1-3-0">v1\.3\.0</a>
- - <a href="#release-summary-50">Release Summary</a>
- - <a href="#minor-changes-25">Minor Changes</a>
- - <a href="#bugfixes-39">Bugfixes</a>
+ - <a href="#release-summary-54">Release Summary</a>
+ - <a href="#minor-changes-26">Minor Changes</a>
+ - <a href="#bugfixes-42">Bugfixes</a>
- <a href="#new-modules-4">New Modules</a>
- <a href="#v1-2-2">v1\.2\.2</a>
- - <a href="#release-summary-51">Release Summary</a>
+ - <a href="#release-summary-55">Release Summary</a>
- <a href="#security-fixes-3">Security Fixes</a>
- <a href="#v1-2-1">v1\.2\.1</a>
- - <a href="#release-summary-52">Release Summary</a>
- - <a href="#bugfixes-40">Bugfixes</a>
+ - <a href="#release-summary-56">Release Summary</a>
+ - <a href="#bugfixes-43">Bugfixes</a>
- <a href="#v1-2-0">v1\.2\.0</a>
- - <a href="#release-summary-53">Release Summary</a>
- - <a href="#minor-changes-26">Minor Changes</a>
- - <a href="#bugfixes-41">Bugfixes</a>
-- <a href="#v1-1-0">v1\.1\.0</a>
- - <a href="#release-summary-54">Release Summary</a>
+ - <a href="#release-summary-57">Release Summary</a>
- <a href="#minor-changes-27">Minor Changes</a>
- - <a href="#deprecated-features-7">Deprecated Features</a>
- - <a href="#bugfixes-42">Bugfixes</a>
+ - <a href="#bugfixes-44">Bugfixes</a>
+- <a href="#v1-1-0">v1\.1\.0</a>
+ - <a href="#release-summary-58">Release Summary</a>
+ - <a href="#minor-changes-28">Minor Changes</a>
+ - <a href="#deprecated-features-8">Deprecated Features</a>
+ - <a href="#bugfixes-45">Bugfixes</a>
- <a href="#new-plugins-1">New Plugins</a>
- <a href="#connection-1">Connection</a>
- <a href="#inventory">Inventory</a>
- <a href="#new-modules-5">New Modules</a>
- <a href="#v1-0-1">v1\.0\.1</a>
- - <a href="#release-summary-55">Release Summary</a>
- - <a href="#bugfixes-43">Bugfixes</a>
+ - <a href="#release-summary-59">Release Summary</a>
+ - <a href="#bugfixes-46">Bugfixes</a>
- <a href="#v1-0-0">v1\.0\.0</a>
- - <a href="#release-summary-56">Release Summary</a>
- - <a href="#minor-changes-28">Minor Changes</a>
-- <a href="#v0-1-0">v0\.1\.0</a>
- - <a href="#release-summary-57">Release Summary</a>
+ - <a href="#release-summary-60">Release Summary</a>
- <a href="#minor-changes-29">Minor Changes</a>
+- <a href="#v0-1-0">v0\.1\.0</a>
+ - <a href="#release-summary-61">Release Summary</a>
+ - <a href="#minor-changes-30">Minor Changes</a>
- <a href="#removed-features-previously-deprecated-2">Removed Features \(previously deprecated\)</a>
- - <a href="#bugfixes-44">Bugfixes</a>
+ - <a href="#bugfixes-47">Bugfixes</a>
+
+<a id="v3-10-3"></a>
+## v3\.10\.3
+
+<a id="release-summary"></a>
+### Release Summary
+
+Bugfix release\.
+
+<a id="bugfixes"></a>
+### Bugfixes
+
+* docker and nsenter connection plugins\, docker\_container\_exec module \- avoid using the deprecated <code>ansible\.module\_utils\.compat\.selectors</code> 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)\)\.
+
+<a id="v3-10-2"></a>
+## v3\.10\.2
+
+<a id="release-summary-1"></a>
+### Release Summary
+
+Bugfix release\.
+
+<a id="bugfixes-1"></a>
+### Bugfixes
+
+* 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)\)\.
+
+<a id="v3-10-1"></a>
+## v3\.10\.1
+
+<a id="release-summary-2"></a>
+### Release Summary
+
+Hotfix release for requests 2\.32\.0 compatibility\.
+
+<a id="bugfixes-2"></a>
+### Bugfixes
+
+* 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)\)\.
+
+<a id="known-issues"></a>
+### Known Issues
+
+* Please note that the fix for requests 2\.32\.0 included in community\.docker 3\.10\.1 only
+ fixes problems with the <em>vendored</em> 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
+ <code>Not supported URL scheme http\+docker</code>\, please restrict requests to <code>\<2\.32\.0</code>\.
+
+<a id="v3-10-0"></a>
+## v3\.10\.0
+
+<a id="release-summary-3"></a>
+### Release Summary
+
+Feature release\.
+
+<a id="minor-changes"></a>
+### Minor Changes
+
+* docker\_container \- adds <code>healthcheck\.start\_interval</code> 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 <code>healthcheck\.test\_cli\_compatible</code> 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\_image\_build \- add <code>outputs</code> 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 <code>secrets</code> 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 <code>platform</code> 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 <code>config\_only</code> and <code>config\_from</code> 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 <code>builder\_cache\_all</code>\, <code>builder\_cache\_filters</code>\, and <code>builder\_cache\_keep\_storage</code>\, and a new return value <code>builder\_cache\_caches\_deleted</code> 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 <code>sysctls</code> 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)\)\.
+
+<a id="deprecated-features"></a>
+### Deprecated Features
+
+* docker\_compose \- the Docker Compose v1 module is deprecated and will be removed from community\.docker 4\.0\.0\. Please migrate to the <code>community\.docker\.docker\_compose\_v2</code> 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)\)\.
+* various modules and plugins \- the <code>ssl\_version</code> 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)\)\.
<a id="v3-9-0"></a>
## v3\.9\.0
-<a id="release-summary"></a>
+<a id="release-summary-4"></a>
### Release Summary
Bugfix and feature release\.
-<a id="minor-changes"></a>
+<a id="minor-changes-1"></a>
### Minor Changes
* The EE requirements now include PyYAML\, since the <code>docker\_compose\_v2\*</code> modules depend on it when the <code>definition</code> 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)\)\.
@@ -244,7 +334,7 @@ Bugfix and feature release\.
* docker\_compose\_v2\* modules \- allow to provide an inline definition of the compose content instead of having to provide a <code>project\_src</code> 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)\)\.
-<a id="bugfixes"></a>
+<a id="bugfixes-3"></a>
### Bugfixes
* docker\_compose\_v2\* \- allow <code>project\_src</code> 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)\)\.
@@ -254,7 +344,7 @@ Bugfix and feature release\.
<a id="v3-8-1"></a>
## v3\.8\.1
-<a id="release-summary-1"></a>
+<a id="release-summary-5"></a>
### Release Summary
Bugfix release
@@ -264,7 +354,7 @@ Bugfix release
* 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)\)\.
-<a id="bugfixes-1"></a>
+<a id="bugfixes-4"></a>
### Bugfixes
* 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 <code>docker compose up</code> 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)\)\.
@@ -275,19 +365,19 @@ Bugfix release
<a id="v3-8-0"></a>
## v3\.8\.0
-<a id="release-summary-2"></a>
+<a id="release-summary-6"></a>
### Release Summary
Bugfix and feature release\.
-<a id="minor-changes-1"></a>
+<a id="minor-changes-2"></a>
### Minor Changes
* docker\_compose\_v2 \- allow to wait until containers are running/health when running <code>docker compose up</code> with the new <code>wait</code> 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 <code>pull\_check\_mode\_behavior</code> option now allows to control the module\'s behavior in check mode when <code>pull\=always</code> \([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 <code>pull</code> option now accepts the three values <code>never</code>\, <code>missing\_image</code> \(default\)\, and <code>never</code>\, next to the previously valid values <code>true</code> \(equivalent to <code>always</code>\) and <code>false</code> \(equivalent to <code>missing\_image</code>\)\. This allows the equivalent to <code>\-\-pull\=never</code> 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)\)\.
-<a id="bugfixes-2"></a>
+<a id="bugfixes-5"></a>
### Bugfixes
* docker\_compose\_v2 \- do not consider a <code>Waiting</code> event as an action/change \([https\://github\.com/ansible\-collections/community\.docker/pull/804](https\://github\.com/ansible\-collections/community\.docker/pull/804)\)\.
@@ -297,18 +387,18 @@ Bugfix and feature release\.
<a id="v3-7-0"></a>
## v3\.7\.0
-<a id="release-summary-3"></a>
+<a id="release-summary-7"></a>
### Release Summary
Bugfix and feature release\.
-<a id="minor-changes-2"></a>
+<a id="minor-changes-3"></a>
### Minor Changes
* docker\_compose\_v2 \- add <code>scale</code> 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 <code>files</code> 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)\)\.
-<a id="bugfixes-3"></a>
+<a id="bugfixes-6"></a>
### Bugfixes
* docker\_compose\_v2 \- properly parse dry\-run build events from <code>stderr</code> \([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)\)\.
@@ -317,12 +407,12 @@ Bugfix and feature release\.
<a id="new-modules"></a>
### New Modules
-* docker\_image\_export \- Export \(archive\) Docker images
+* community\.docker\.docker\_image\_export \- Export \(archive\) Docker images
<a id="v3-6-0"></a>
## v3\.6\.0
-<a id="release-summary-4"></a>
+<a id="release-summary-8"></a>
### Release Summary
Bugfix and feature release\.
@@ -342,7 +432,7 @@ so the main difference is that instead of some Python requirements\, they depend
* The <code>community\.docker</code> collection now depends on the <code>community\.library\_inventory\_filtering\_v1</code> 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 <code>ansible\-galaxy collection install</code>\, 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)\)\.
-<a id="minor-changes-3"></a>
+<a id="minor-changes-4"></a>
### Minor Changes
* The <code>ca\_cert</code> option available to almost all modules and plugins has been renamed to <code>ca\_path</code>\. The name <code>ca\_path</code> 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)\)\.
@@ -352,7 +442,7 @@ so the main difference is that instead of some Python requirements\, they depend
* 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 <code>filter</code> 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)\)\.
-<a id="bugfixes-4"></a>
+<a id="bugfixes-7"></a>
### Bugfixes
* Use <code>unix\:///var/run/docker\.sock</code> instead of the legacy <code>unix\://var/run/docker\.sock</code> as default for <code>docker\_host</code> \([https\://github\.com/ansible\-collections/community\.docker/pull/736](https\://github\.com/ansible\-collections/community\.docker/pull/736)\)\.
@@ -361,34 +451,34 @@ so the main difference is that instead of some Python requirements\, they depend
<a id="new-modules-1"></a>
### New Modules
-* docker\_compose\_v2 \- Manage multi\-container Docker applications with Docker Compose CLI plugin
-* docker\_compose\_v2\_pull \- Pull a Docker compose project
-* docker\_image\_build \- Build Docker images using Docker buildx
-* docker\_image\_pull \- Pull Docker images from registries
-* docker\_image\_push \- Push Docker images to registries
-* docker\_image\_remove \- Remove Docker images
-* docker\_image\_tag \- Tag Docker images with new names and/or tags
+* 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\_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
<a id="v3-5-0"></a>
## v3\.5\.0
-<a id="release-summary-5"></a>
+<a id="release-summary-9"></a>
### Release Summary
Bugfix and feature release\.
-<a id="minor-changes-4"></a>
+<a id="minor-changes-5"></a>
### Minor Changes
* docker\_container \- implement better <code>platform</code> 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)\)\.
-<a id="deprecated-features"></a>
+<a id="deprecated-features-1"></a>
### Deprecated Features
* docker\_container \- the default <code>ignore</code> for the <code>image\_name\_mismatch</code> parameter has been deprecated and will switch to <code>recreate</code> 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)\)\.
-<a id="bugfixes-5"></a>
+<a id="bugfixes-8"></a>
### Bugfixes
* modules and plugins using the Docker SDK for Python \- remove <code>ssl\_version</code> 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)\)\.
@@ -398,12 +488,12 @@ Bugfix and feature release\.
<a id="v3-4-11"></a>
## v3\.4\.11
-<a id="release-summary-6"></a>
+<a id="release-summary-10"></a>
### Release Summary
Bugfix release\.
-<a id="bugfixes-6"></a>
+<a id="bugfixes-9"></a>
### Bugfixes
* docker\_volume \- fix crash caused by accessing an empty dictionary\. The <code>has\_different\_config\(\)</code> was raising an <code>AttributeError</code> because the <code>self\.existing\_volume\[\"Labels\"\]</code> dictionary was <code>None</code> \([https\://github\.com/ansible\-collections/community\.docker/pull/702](https\://github\.com/ansible\-collections/community\.docker/pull/702)\)\.
@@ -411,12 +501,12 @@ Bugfix release\.
<a id="v3-4-10"></a>
## v3\.4\.10
-<a id="release-summary-7"></a>
+<a id="release-summary-11"></a>
### Release Summary
Bugfix release\.
-<a id="bugfixes-7"></a>
+<a id="bugfixes-10"></a>
### Bugfixes
* 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)\)\.
@@ -424,12 +514,12 @@ Bugfix release\.
<a id="v3-4-9"></a>
## v3\.4\.9
-<a id="release-summary-8"></a>
+<a id="release-summary-12"></a>
### Release Summary
Maintenance release with updated documentation and vendored Docker SDK for Python code\.
-<a id="bugfixes-8"></a>
+<a id="bugfixes-11"></a>
### Bugfixes
* 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)\)\.
@@ -437,7 +527,7 @@ Maintenance release with updated documentation and vendored Docker SDK for Pytho
<a id="v3-4-8"></a>
## v3\.4\.8
-<a id="release-summary-9"></a>
+<a id="release-summary-13"></a>
### Release Summary
Maintenance release with updated documentation\.
@@ -450,7 +540,7 @@ ansible\-core 2\.15 or later to see it as it is intended\. Alternatively you can
look at [the devel docsite](https\://docs\.ansible\.com/ansible/devel/collections/community/docker/)
for the rendered HTML version of the documentation of the latest release\.
-<a id="known-issues"></a>
+<a id="known-issues-1"></a>
### Known Issues
* 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/)\.
@@ -458,12 +548,12 @@ for the rendered HTML version of the documentation of the latest release\.
<a id="v3-4-7"></a>
## v3\.4\.7
-<a id="release-summary-10"></a>
+<a id="release-summary-14"></a>
### Release Summary
Bugfix release\.
-<a id="bugfixes-9"></a>
+<a id="bugfixes-12"></a>
### Bugfixes
* docker\_swarm\_info \- if <code>service\=true</code> 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)\)\.
@@ -471,12 +561,12 @@ Bugfix release\.
<a id="v3-4-6"></a>
## v3\.4\.6
-<a id="release-summary-11"></a>
+<a id="release-summary-15"></a>
### Release Summary
Bugfix release with documentation warnings about using certain functionality when connecting to the Docker daemon with TCP TLS\.
-<a id="bugfixes-10"></a>
+<a id="bugfixes-13"></a>
### Bugfixes
* socket\_handler module utils \- make sure this fully works when Docker SDK for Python is not available \([https\://github\.com/ansible\-collections/community\.docker/pull/620](https\://github\.com/ansible\-collections/community\.docker/pull/620)\)\.
@@ -484,7 +574,7 @@ Bugfix release with documentation warnings about using certain functionality whe
* vendored Docker SDK for Python code \- respect timeouts on Windows named pipes \([https\://github\.com/ansible\-collections/community\.docker/pull/619](https\://github\.com/ansible\-collections/community\.docker/pull/619)\)\.
* vendored Docker SDK for Python code \- use <code>poll\(\)</code> instead of <code>select\(\)</code> except on Windows \([https\://github\.com/ansible\-collections/community\.docker/pull/619](https\://github\.com/ansible\-collections/community\.docker/pull/619)\)\.
-<a id="known-issues-1"></a>
+<a id="known-issues-2"></a>
### Known Issues
* docker\_api connection plugin \- does <strong>not work with TCP TLS sockets</strong>\! This is caused by the inability to send an <code>close\_notify</code> TLS alert without closing the connection with Python\'s <code>SSLSocket</code> \([https\://github\.com/ansible\-collections/community\.docker/issues/605](https\://github\.com/ansible\-collections/community\.docker/issues/605)\, [https\://github\.com/ansible\-collections/community\.docker/pull/621](https\://github\.com/ansible\-collections/community\.docker/pull/621)\)\.
@@ -493,12 +583,12 @@ Bugfix release with documentation warnings about using certain functionality whe
<a id="v3-4-5"></a>
## v3\.4\.5
-<a id="release-summary-12"></a>
+<a id="release-summary-16"></a>
### Release Summary
Maintenance release which adds compatibility with requests 2\.29\.0 and 2\.30\.0 and urllib3 2\.0\.
-<a id="bugfixes-11"></a>
+<a id="bugfixes-14"></a>
### Bugfixes
* Make vendored Docker SDK for Python code compatible with requests 2\.29\.0 and urllib3 2\.0 \([https\://github\.com/ansible\-collections/community\.docker/pull/613](https\://github\.com/ansible\-collections/community\.docker/pull/613)\)\.
@@ -506,17 +596,17 @@ Maintenance release which adds compatibility with requests 2\.29\.0 and 2\.30\.0
<a id="v3-4-4"></a>
## v3\.4\.4
-<a id="release-summary-13"></a>
+<a id="release-summary-17"></a>
### Release Summary
Maintenance release with updated EE requirements and updated documentation\.
-<a id="minor-changes-5"></a>
+<a id="minor-changes-6"></a>
### Minor Changes
* Restrict requests to versions before 2\.29\.0\, and urllib3 to versions before 2\.0\.0\. This is necessary until the vendored code from Docker SDK for Python has been fully adjusted to work with a feature of urllib3 that is used since requests 2\.29\.0 \([https\://github\.com/ansible\-collections/community\.docker/issues/611](https\://github\.com/ansible\-collections/community\.docker/issues/611)\, [https\://github\.com/ansible\-collections/community\.docker/pull/612](https\://github\.com/ansible\-collections/community\.docker/pull/612)\)\.
-<a id="known-issues-2"></a>
+<a id="known-issues-3"></a>
### Known Issues
* The modules and plugins using the vendored code from Docker SDK for Python currently do not work with requests 2\.29\.0 and/or urllib3 2\.0\.0\. The same is currently true for the latest version of Docker SDK for Python itself \([https\://github\.com/ansible\-collections/community\.docker/issues/611](https\://github\.com/ansible\-collections/community\.docker/issues/611)\, [https\://github\.com/ansible\-collections/community\.docker/pull/612](https\://github\.com/ansible\-collections/community\.docker/pull/612)\)\.
@@ -524,7 +614,7 @@ Maintenance release with updated EE requirements and updated documentation\.
<a id="v3-4-3"></a>
## v3\.4\.3
-<a id="release-summary-14"></a>
+<a id="release-summary-18"></a>
### Release Summary
Maintenance release with improved documentation\.
@@ -532,12 +622,12 @@ Maintenance release with improved documentation\.
<a id="v3-4-2"></a>
## v3\.4\.2
-<a id="release-summary-15"></a>
+<a id="release-summary-19"></a>
### Release Summary
Bugfix release\.
-<a id="bugfixes-12"></a>
+<a id="bugfixes-15"></a>
### Bugfixes
* docker\_prune \- return correct value for <code>changed</code>\. So far the module always claimed that nothing changed \([https\://github\.com/ansible\-collections/community\.docker/pull/593](https\://github\.com/ansible\-collections/community\.docker/pull/593)\)\.
@@ -545,12 +635,12 @@ Bugfix release\.
<a id="v3-4-1"></a>
## v3\.4\.1
-<a id="release-summary-16"></a>
+<a id="release-summary-20"></a>
### Release Summary
Regular bugfix release\.
-<a id="bugfixes-13"></a>
+<a id="bugfixes-16"></a>
### Bugfixes
* docker\_api connection plugin\, docker\_container\_exec\, docker\_container\_copy\_into \- properly close socket to Daemon after executing commands in containers \([https\://github\.com/ansible\-collections/community\.docker/pull/582](https\://github\.com/ansible\-collections/community\.docker/pull/582)\)\.
@@ -560,18 +650,18 @@ Regular bugfix release\.
<a id="v3-4-0"></a>
## v3\.4\.0
-<a id="release-summary-17"></a>
+<a id="release-summary-21"></a>
### Release Summary
Regular bugfix and feature release\.
-<a id="minor-changes-6"></a>
+<a id="minor-changes-7"></a>
### Minor Changes
* docker\_api connection plugin \- when copying files to/from a container\, stream the file contents instead of first reading them to memory \([https\://github\.com/ansible\-collections/community\.docker/pull/545](https\://github\.com/ansible\-collections/community\.docker/pull/545)\)\.
* docker\_host\_info \- allow to list all containers with new option <code>containers\_all</code> \([https\://github\.com/ansible\-collections/community\.docker/issues/535](https\://github\.com/ansible\-collections/community\.docker/issues/535)\, [https\://github\.com/ansible\-collections/community\.docker/pull/538](https\://github\.com/ansible\-collections/community\.docker/pull/538)\)\.
-<a id="bugfixes-14"></a>
+<a id="bugfixes-17"></a>
### Bugfixes
* docker\_api connection plugin \- fix error handling when 409 Conflict is returned by the Docker daemon in case of a stopped container \([https\://github\.com/ansible\-collections/community\.docker/pull/546](https\://github\.com/ansible\-collections/community\.docker/pull/546)\)\.
@@ -582,17 +672,17 @@ Regular bugfix and feature release\.
<a id="new-modules-2"></a>
### New Modules
-* docker\_container\_copy\_into \- Copy a file into a Docker container
+* community\.docker\.docker\_container\_copy\_into \- Copy a file into a Docker container
<a id="v3-3-2"></a>
## v3\.3\.2
-<a id="release-summary-18"></a>
+<a id="release-summary-22"></a>
### Release Summary
Bugfix release\.
-<a id="bugfixes-15"></a>
+<a id="bugfixes-18"></a>
### Bugfixes
* docker\_container \- when <code>detach\=false</code>\, wait indefinitely and not at most one minute\. This was the behavior with Docker SDK for Python\, and was accidentally changed in 3\.0\.0 \([https\://github\.com/ansible\-collections/community\.docker/issues/526](https\://github\.com/ansible\-collections/community\.docker/issues/526)\, [https\://github\.com/ansible\-collections/community\.docker/pull/527](https\://github\.com/ansible\-collections/community\.docker/pull/527)\)\.
@@ -600,12 +690,12 @@ Bugfix release\.
<a id="v3-3-1"></a>
## v3\.3\.1
-<a id="release-summary-19"></a>
+<a id="release-summary-23"></a>
### Release Summary
Bugfix release\.
-<a id="bugfixes-16"></a>
+<a id="bugfixes-19"></a>
### Bugfixes
* current\_container\_facts \- make container detection work better in more cases \([https\://github\.com/ansible\-collections/community\.docker/pull/522](https\://github\.com/ansible\-collections/community\.docker/pull/522)\)\.
@@ -613,18 +703,18 @@ Bugfix release\.
<a id="v3-3-0"></a>
## v3\.3\.0
-<a id="release-summary-20"></a>
+<a id="release-summary-24"></a>
### Release Summary
Feature and bugfix release\.
-<a id="minor-changes-7"></a>
+<a id="minor-changes-8"></a>
### Minor Changes
* current\_container\_facts \- make work with current Docker version\, also support Podman \([https\://github\.com/ansible\-collections/community\.docker/pull/510](https\://github\.com/ansible\-collections/community\.docker/pull/510)\)\.
* docker\_image \- when using <code>archive\_path</code>\, detect whether changes are necessary based on the image ID \(hash\)\. If the existing tar archive matches the source\, do nothing\. Previously\, each task execution re\-created the archive \([https\://github\.com/ansible\-collections/community\.docker/pull/500](https\://github\.com/ansible\-collections/community\.docker/pull/500)\)\.
-<a id="bugfixes-17"></a>
+<a id="bugfixes-20"></a>
### Bugfixes
* docker\_container\_exec \- fix <code>chdir</code> option which was ignored since community\.docker 3\.0\.0 \([https\://github\.com/ansible\-collections/community\.docker/issues/517](https\://github\.com/ansible\-collections/community\.docker/issues/517)\, [https\://github\.com/ansible\-collections/community\.docker/pull/518](https\://github\.com/ansible\-collections/community\.docker/pull/518)\)\.
@@ -633,12 +723,12 @@ Feature and bugfix release\.
<a id="v3-2-2"></a>
## v3\.2\.2
-<a id="release-summary-21"></a>
+<a id="release-summary-25"></a>
### Release Summary
Bugfix release\.
-<a id="bugfixes-18"></a>
+<a id="bugfixes-21"></a>
### Bugfixes
* docker\_container \- the <code>kill\_signal</code> option erroneously did not accept strings anymore since 3\.0\.0 \([https\://github\.com/ansible\-collections/community\.docker/issues/505](https\://github\.com/ansible\-collections/community\.docker/issues/505)\, [https\://github\.com/ansible\-collections/community\.docker/pull/506](https\://github\.com/ansible\-collections/community\.docker/pull/506)\)\.
@@ -646,7 +736,7 @@ Bugfix release\.
<a id="v3-2-1"></a>
## v3\.2\.1
-<a id="release-summary-22"></a>
+<a id="release-summary-26"></a>
### Release Summary
Maintenance release with improved documentation\.
@@ -654,17 +744,17 @@ Maintenance release with improved documentation\.
<a id="v3-2-0"></a>
## v3\.2\.0
-<a id="release-summary-23"></a>
+<a id="release-summary-27"></a>
### Release Summary
Feature and deprecation release\.
-<a id="minor-changes-8"></a>
+<a id="minor-changes-9"></a>
### Minor Changes
* docker\_container \- added <code>image\_name\_mismatch</code> option which allows to control the behavior if the container uses the image specified\, but the container\'s configuration uses a different name for the image than the one provided to the module \([https\://github\.com/ansible\-collections/community\.docker/issues/485](https\://github\.com/ansible\-collections/community\.docker/issues/485)\, [https\://github\.com/ansible\-collections/community\.docker/pull/488](https\://github\.com/ansible\-collections/community\.docker/pull/488)\)\.
-<a id="deprecated-features-1"></a>
+<a id="deprecated-features-2"></a>
### Deprecated Features
* docker\_container \- the <code>ignore\_image</code> option is deprecated and will be removed in community\.docker 4\.0\.0\. Use <code>image\: ignore</code> in <code>comparisons</code> instead \([https\://github\.com/ansible\-collections/community\.docker/pull/487](https\://github\.com/ansible\-collections/community\.docker/pull/487)\)\.
@@ -673,12 +763,12 @@ Feature and deprecation release\.
<a id="v3-1-0"></a>
## v3\.1\.0
-<a id="release-summary-24"></a>
+<a id="release-summary-28"></a>
### Release Summary
Feature release\.
-<a id="minor-changes-9"></a>
+<a id="minor-changes-10"></a>
### Minor Changes
* The collection repository conforms to the [REUSE specification](https\://reuse\.software/spec/) except for the changelog fragments \([https\://github\.com/ansible\-collections/community\.docker/pull/462](https\://github\.com/ansible\-collections/community\.docker/pull/462)\)\.
@@ -687,12 +777,12 @@ Feature release\.
<a id="v3-0-2"></a>
## v3\.0\.2
-<a id="release-summary-25"></a>
+<a id="release-summary-29"></a>
### Release Summary
Bugfix release\.
-<a id="bugfixes-19"></a>
+<a id="bugfixes-22"></a>
### Bugfixes
* docker\_image \- fix build argument handling \([https\://github\.com/ansible\-collections/community\.docker/issues/455](https\://github\.com/ansible\-collections/community\.docker/issues/455)\, [https\://github\.com/ansible\-collections/community\.docker/pull/456](https\://github\.com/ansible\-collections/community\.docker/pull/456)\)\.
@@ -700,12 +790,12 @@ Bugfix release\.
<a id="v3-0-1"></a>
## v3\.0\.1
-<a id="release-summary-26"></a>
+<a id="release-summary-30"></a>
### Release Summary
Bugfix release\.
-<a id="bugfixes-20"></a>
+<a id="bugfixes-23"></a>
### Bugfixes
* docker\_container \- fix handling of <code>env\_file</code> \([https\://github\.com/ansible\-collections/community\.docker/issues/451](https\://github\.com/ansible\-collections/community\.docker/issues/451)\, [https\://github\.com/ansible\-collections/community\.docker/pull/452](https\://github\.com/ansible\-collections/community\.docker/pull/452)\)\.
@@ -713,7 +803,7 @@ Bugfix release\.
<a id="v3-0-0"></a>
## v3\.0\.0
-<a id="release-summary-27"></a>
+<a id="release-summary-31"></a>
### Release Summary
The 3\.0\.0 release features a rewrite of the <code>docker\_container</code> module\, and many modules and plugins no longer depend on the Docker SDK for Python\.
@@ -740,7 +830,7 @@ The 3\.0\.0 release features a rewrite of the <code>docker\_container</code> mod
* docker\_volume \- no longer uses the Docker SDK for Python\. It requires <code>requests</code> to be installed\, and depending on the features used has some more requirements\. If the Docker SDK for Python is installed\, these requirements are likely met \([https\://github\.com/ansible\-collections/community\.docker/pull/411](https\://github\.com/ansible\-collections/community\.docker/pull/411)\)\.
* docker\_volume\_info \- no longer uses the Docker SDK for Python\. It requires <code>requests</code> to be installed\, and depending on the features used has some more requirements\. If the Docker SDK for Python is installed\, these requirements are likely met \([https\://github\.com/ansible\-collections/community\.docker/pull/412](https\://github\.com/ansible\-collections/community\.docker/pull/412)\)\.
-<a id="minor-changes-10"></a>
+<a id="minor-changes-11"></a>
### Minor Changes
* All software licenses are now in the <code>LICENSES/</code> directory of the collection root\. Moreover\, <code>SPDX\-License\-Identifier\:</code> is used to declare the applicable license for every file that is not automatically generated \([https\://github\.com/ansible\-collections/community\.docker/pull/430](https\://github\.com/ansible\-collections/community\.docker/pull/430)\)\.
@@ -780,7 +870,7 @@ The 3\.0\.0 release features a rewrite of the <code>docker\_container</code> mod
* modules and plugins communicating directly with the Docker daemon \- when connecting by SSH and not using <code>use\_ssh\_client\=true</code>\, reject unknown host keys instead of accepting them\. This is only a change relative to older community\.docker 3\.0\.0 pre\-releases or with respect to Docker SDK for Python \< 6\.0\.0\. Docker SDK for Python 6\.0\.0 will also include this change \([https\://github\.com/ansible\-collections/community\.docker/pull/434](https\://github\.com/ansible\-collections/community\.docker/pull/434)\)\.
-<a id="bugfixes-21"></a>
+<a id="bugfixes-24"></a>
### Bugfixes
* docker\_image \- when composing the build context\, trim trailing whitespace from <code>\.dockerignore</code> entries\. This is only a change relative to older community\.docker 3\.0\.0 pre\-releases or with respect to Docker SDK for Python \< 6\.0\.0\. Docker SDK for Python 6\.0\.0 will also include this change \([https\://github\.com/ansible\-collections/community\.docker/pull/434](https\://github\.com/ansible\-collections/community\.docker/pull/434)\)\.
@@ -794,23 +884,23 @@ The 3\.0\.0 release features a rewrite of the <code>docker\_container</code> mod
<a id="v2-7-0"></a>
## v2\.7\.0
-<a id="release-summary-28"></a>
+<a id="release-summary-32"></a>
### Release Summary
Bugfix and deprecation release\. The next 2\.x\.y releases will only be bugfix releases\, the next expect minor/major release will be 3\.0\.0 with some major changes\.
-<a id="minor-changes-11"></a>
+<a id="minor-changes-12"></a>
### Minor Changes
* Move common utility functions from the <code>common</code> module\_util to a new module\_util called <code>util</code>\. This should not have any user\-visible effect \([https\://github\.com/ansible\-collections/community\.docker/pull/390](https\://github\.com/ansible\-collections/community\.docker/pull/390)\)\.
-<a id="deprecated-features-2"></a>
+<a id="deprecated-features-3"></a>
### Deprecated Features
* Support for Docker API version 1\.20 to 1\.24 has been deprecated and will be removed in community\.docker 3\.0\.0\. The first Docker version supporting API version 1\.25 was Docker 1\.13\, released in January 2017\. This affects the modules <code>docker\_container</code>\, <code>docker\_container\_exec</code>\, <code>docker\_container\_info</code>\, <code>docker\_compose</code>\, <code>docker\_login</code>\, <code>docker\_image</code>\, <code>docker\_image\_info</code>\, <code>docker\_image\_load</code>\, <code>docker\_host\_info</code>\, <code>docker\_network</code>\, <code>docker\_network\_info</code>\, <code>docker\_node\_info</code>\, <code>docker\_swarm\_info</code>\, <code>docker\_swarm\_service</code>\, <code>docker\_swarm\_service\_info</code>\, <code>docker\_volume\_info</code>\, and <code>docker\_volume</code>\, whose minimally supported API version is between 1\.20 and 1\.24 \([https\://github\.com/ansible\-collections/community\.docker/pull/396](https\://github\.com/ansible\-collections/community\.docker/pull/396)\)\.
* Support for Python 2\.6 is deprecated and will be removed in the next major release \(community\.docker 3\.0\.0\)\. Some modules might still work with Python 2\.6\, but we will no longer try to ensure compatibility \([https\://github\.com/ansible\-collections/community\.docker/pull/388](https\://github\.com/ansible\-collections/community\.docker/pull/388)\)\.
-<a id="bugfixes-22"></a>
+<a id="bugfixes-25"></a>
### Bugfixes
* Docker SDK for Python based modules and plugins \- if the API version is specified as an option\, use that one to validate API version requirements of module/plugin options instead of the latest API version supported by the Docker daemon\. This also avoids one unnecessary API call per module/plugin \([https\://github\.com/ansible\-collections/community\.docker/pull/389](https\://github\.com/ansible\-collections/community\.docker/pull/389)\)\.
@@ -818,17 +908,17 @@ Bugfix and deprecation release\. The next 2\.x\.y releases will only be bugfix r
<a id="v2-6-0"></a>
## v2\.6\.0
-<a id="release-summary-29"></a>
+<a id="release-summary-33"></a>
### Release Summary
Bugfix and feature release\.
-<a id="minor-changes-12"></a>
+<a id="minor-changes-13"></a>
### Minor Changes
* docker\_container \- added <code>image\_label\_mismatch</code> parameter \([https\://github\.com/ansible\-collections/community\.docker/issues/314](https\://github\.com/ansible\-collections/community\.docker/issues/314)\, [https\://github\.com/ansible\-collections/community\.docker/pull/370](https\://github\.com/ansible\-collections/community\.docker/pull/370)\)\.
-<a id="deprecated-features-3"></a>
+<a id="deprecated-features-4"></a>
### Deprecated Features
* Support for Ansible 2\.9 and ansible\-base 2\.10 is deprecated\, and will be removed in the next major release \(community\.docker 3\.0\.0\)\. Some modules might still work with these versions afterwards\, but we will no longer keep compatibility code that was needed to support them \([https\://github\.com/ansible\-collections/community\.docker/pull/361](https\://github\.com/ansible\-collections/community\.docker/pull/361)\)\.
@@ -836,7 +926,7 @@ Bugfix and feature release\.
* Various modules \- the default of <code>tls\_hostname</code> that was supposed to be removed in community\.docker 2\.0\.0 will now be removed in version 3\.0\.0 \([https\://github\.com/ansible\-collections/community\.docker/pull/362](https\://github\.com/ansible\-collections/community\.docker/pull/362)\)\.
* docker\_stack \- the return values <code>out</code> and <code>err</code> that were supposed to be removed in community\.docker 2\.0\.0 will now be removed in version 3\.0\.0 \([https\://github\.com/ansible\-collections/community\.docker/pull/362](https\://github\.com/ansible\-collections/community\.docker/pull/362)\)\.
-<a id="bugfixes-23"></a>
+<a id="bugfixes-26"></a>
### Bugfixes
* docker\_container \- fail with a meaningful message instead of crashing if a port is specified with more than three colon\-separated parts \([https\://github\.com/ansible\-collections/community\.docker/pull/367](https\://github\.com/ansible\-collections/community\.docker/pull/367)\, [https\://github\.com/ansible\-collections/community\.docker/issues/365](https\://github\.com/ansible\-collections/community\.docker/issues/365)\)\.
@@ -845,12 +935,12 @@ Bugfix and feature release\.
<a id="v2-5-1"></a>
## v2\.5\.1
-<a id="release-summary-30"></a>
+<a id="release-summary-34"></a>
### Release Summary
Maintenance release\.
-<a id="bugfixes-24"></a>
+<a id="bugfixes-27"></a>
### Bugfixes
* Include <code>PSF\-license\.txt</code> file for <code>plugins/module\_utils/\_version\.py</code>\.
@@ -858,12 +948,12 @@ Maintenance release\.
<a id="v2-5-0"></a>
## v2\.5\.0
-<a id="release-summary-31"></a>
+<a id="release-summary-35"></a>
### Release Summary
Regular feature release\.
-<a id="minor-changes-13"></a>
+<a id="minor-changes-14"></a>
### Minor Changes
* docker\_config \- add support for <code>template\_driver</code> with one option <code>golang</code> \([https\://github\.com/ansible\-collections/community\.docker/issues/332](https\://github\.com/ansible\-collections/community\.docker/issues/332)\, [https\://github\.com/ansible\-collections/community\.docker/pull/345](https\://github\.com/ansible\-collections/community\.docker/pull/345)\)\.
@@ -872,19 +962,19 @@ Regular feature release\.
<a id="v2-4-0"></a>
## v2\.4\.0
-<a id="release-summary-32"></a>
+<a id="release-summary-36"></a>
### Release Summary
Regular feature and bugfix release\.
-<a id="minor-changes-14"></a>
+<a id="minor-changes-15"></a>
### Minor Changes
* Prepare collection for inclusion in an Execution Environment by declaring its dependencies\. The <code>docker\_stack\*</code> modules are not supported \([https\://github\.com/ansible\-collections/community\.docker/pull/336](https\://github\.com/ansible\-collections/community\.docker/pull/336)\)\.
* current\_container\_facts \- add detection for GitHub Actions \([https\://github\.com/ansible\-collections/community\.docker/pull/336](https\://github\.com/ansible\-collections/community\.docker/pull/336)\)\.
* docker\_container \- support returning Docker container log output when using Docker\'s <code>local</code> logging driver\, an optimized local logging driver introduced in Docker 18\.09 \([https\://github\.com/ansible\-collections/community\.docker/pull/337](https\://github\.com/ansible\-collections/community\.docker/pull/337)\)\.
-<a id="bugfixes-25"></a>
+<a id="bugfixes-28"></a>
### Bugfixes
* docker connection plugin \- make sure that <code>docker\_extra\_args</code> is used for querying the Docker version\. Also ensures that the Docker version is only queried when needed\. This is currently the case if a remote user is specified \([https\://github\.com/ansible\-collections/community\.docker/issues/325](https\://github\.com/ansible\-collections/community\.docker/issues/325)\, [https\://github\.com/ansible\-collections/community\.docker/pull/327](https\://github\.com/ansible\-collections/community\.docker/pull/327)\)\.
@@ -892,12 +982,12 @@ Regular feature and bugfix release\.
<a id="v2-3-0"></a>
## v2\.3\.0
-<a id="release-summary-33"></a>
+<a id="release-summary-37"></a>
### Release Summary
Regular feature and bugfix release\.
-<a id="minor-changes-15"></a>
+<a id="minor-changes-16"></a>
### Minor Changes
* docker connection plugin \- implement connection reset by clearing internal container user cache \([https\://github\.com/ansible\-collections/community\.docker/pull/312](https\://github\.com/ansible\-collections/community\.docker/pull/312)\)\.
@@ -906,7 +996,7 @@ Regular feature and bugfix release\.
* docker\_api connection plugin \- implement connection reset by clearing internal container user/group ID cache \([https\://github\.com/ansible\-collections/community\.docker/pull/312](https\://github\.com/ansible\-collections/community\.docker/pull/312)\)\.
* docker\_api connection plugin \- the plugin supports new ways to define the timeout\. These are the <code>ANSIBLE\_DOCKER\_TIMEOUT</code> environment variable\, the <code>timeout</code> setting in the <code>docker\_connection</code> section of <code>ansible\.cfg</code>\, and the <code>ansible\_docker\_timeout</code> variable \([https\://github\.com/ansible\-collections/community\.docker/pull/308](https\://github\.com/ansible\-collections/community\.docker/pull/308)\)\.
-<a id="bugfixes-26"></a>
+<a id="bugfixes-29"></a>
### Bugfixes
* docker connection plugin \- fix option handling to be compatible with ansible\-core 2\.13 \([https\://github\.com/ansible\-collections/community\.docker/pull/297](https\://github\.com/ansible\-collections/community\.docker/pull/297)\, [https\://github\.com/ansible\-collections/community\.docker/issues/307](https\://github\.com/ansible\-collections/community\.docker/issues/307)\)\.
@@ -915,12 +1005,12 @@ Regular feature and bugfix release\.
<a id="v2-2-1"></a>
## v2\.2\.1
-<a id="release-summary-34"></a>
+<a id="release-summary-38"></a>
### Release Summary
Regular bugfix release\.
-<a id="bugfixes-27"></a>
+<a id="bugfixes-30"></a>
### Bugfixes
* docker\_compose \- fix Python 3 type error when extracting warnings or errors from docker\-compose\'s output \([https\://github\.com/ansible\-collections/community\.docker/pull/305](https\://github\.com/ansible\-collections/community\.docker/pull/305)\)\.
@@ -928,19 +1018,19 @@ Regular bugfix release\.
<a id="v2-2-0"></a>
## v2\.2\.0
-<a id="release-summary-35"></a>
+<a id="release-summary-39"></a>
### Release Summary
Regular feature and bugfix release\.
-<a id="minor-changes-16"></a>
+<a id="minor-changes-17"></a>
### Minor Changes
* docker\_config \- add support for rolling update\, set <code>rolling\_versions</code> to <code>true</code> to enable \([https\://github\.com/ansible\-collections/community\.docker/pull/295](https\://github\.com/ansible\-collections/community\.docker/pull/295)\, [https\://github\.com/ansible\-collections/community\.docker/issues/109](https\://github\.com/ansible\-collections/community\.docker/issues/109)\)\.
* docker\_secret \- add support for rolling update\, set <code>rolling\_versions</code> to <code>true</code> to enable \([https\://github\.com/ansible\-collections/community\.docker/pull/293](https\://github\.com/ansible\-collections/community\.docker/pull/293)\, [https\://github\.com/ansible\-collections/community\.docker/issues/21](https\://github\.com/ansible\-collections/community\.docker/issues/21)\)\.
* docker\_swarm\_service \- add support for setting capabilities with the <code>cap\_add</code> and <code>cap\_drop</code> parameters\. Usage is the same as with the <code>capabilities</code> and <code>cap\_drop</code> parameters for <code>docker\_container</code> \([https\://github\.com/ansible\-collections/community\.docker/pull/294](https\://github\.com/ansible\-collections/community\.docker/pull/294)\)\.
-<a id="bugfixes-28"></a>
+<a id="bugfixes-31"></a>
### Bugfixes
* docker\_container\, docker\_image \- adjust image finding code to peculiarities of <code>podman\-docker</code>\'s API emulation when Docker short names like <code>redis</code> are used \([https\://github\.com/ansible\-collections/community\.docker/issues/292](https\://github\.com/ansible\-collections/community\.docker/issues/292)\)\.
@@ -948,12 +1038,12 @@ Regular feature and bugfix release\.
<a id="v2-1-1"></a>
## v2\.1\.1
-<a id="release-summary-36"></a>
+<a id="release-summary-40"></a>
### Release Summary
Emergency release to amend breaking change in previous release\.
-<a id="bugfixes-29"></a>
+<a id="bugfixes-32"></a>
### Bugfixes
* Fix unintended breaking change caused by [an earlier fix](https\://github\.com/ansible\-collections/community\.docker/pull/258) by vendoring the deprecated Python standard library <code>distutils\.version</code> until this collection stops supporting Ansible 2\.9 and ansible\-base 2\.10 \([https\://github\.com/ansible\-collections/community\.docker/issues/267](https\://github\.com/ansible\-collections/community\.docker/issues/267)\, [https\://github\.com/ansible\-collections/community\.docker/pull/269](https\://github\.com/ansible\-collections/community\.docker/pull/269)\)\.
@@ -961,18 +1051,18 @@ Emergency release to amend breaking change in previous release\.
<a id="v2-1-0"></a>
## v2\.1\.0
-<a id="release-summary-37"></a>
+<a id="release-summary-41"></a>
### Release Summary
Feature and bugfix release\.
-<a id="minor-changes-17"></a>
+<a id="minor-changes-18"></a>
### Minor Changes
* docker\_container\_exec \- add <code>detach</code> parameter \([https\://github\.com/ansible\-collections/community\.docker/issues/250](https\://github\.com/ansible\-collections/community\.docker/issues/250)\, [https\://github\.com/ansible\-collections/community\.docker/pull/255](https\://github\.com/ansible\-collections/community\.docker/pull/255)\)\.
* docker\_container\_exec \- add <code>env</code> option \([https\://github\.com/ansible\-collections/community\.docker/issues/248](https\://github\.com/ansible\-collections/community\.docker/issues/248)\, [https\://github\.com/ansible\-collections/community\.docker/pull/254](https\://github\.com/ansible\-collections/community\.docker/pull/254)\)\.
-<a id="bugfixes-30"></a>
+<a id="bugfixes-33"></a>
### Bugfixes
* Various modules and plugins \- use vendored version of <code>distutils\.version</code> included in ansible\-core 2\.12 if available\. This avoids breakage when <code>distutils</code> is removed from the standard library of Python 3\.12\. Note that ansible\-core 2\.11\, ansible\-base 2\.10 and Ansible 2\.9 are right now not compatible with Python 3\.12\, hence this fix does not target these ansible\-core/\-base/2\.9 versions \([https\://github\.com/ansible\-collections/community\.docker/pull/258](https\://github\.com/ansible\-collections/community\.docker/pull/258)\)\.
@@ -982,12 +1072,12 @@ Feature and bugfix release\.
<a id="v2-0-2"></a>
## v2\.0\.2
-<a id="release-summary-38"></a>
+<a id="release-summary-42"></a>
### Release Summary
Bugfix release\.
-<a id="bugfixes-31"></a>
+<a id="bugfixes-34"></a>
### Bugfixes
* docker\_api connection plugin \- avoid passing an unnecessary argument to a Docker SDK for Python call that is only supported by version 3\.0\.0 or later \([https\://github\.com/ansible\-collections/community\.docker/pull/243](https\://github\.com/ansible\-collections/community\.docker/pull/243)\)\.
@@ -998,7 +1088,7 @@ Bugfix release\.
<a id="v2-0-1"></a>
## v2\.0\.1
-<a id="release-summary-39"></a>
+<a id="release-summary-43"></a>
### Release Summary
Maintenance release with some documentation fixes\.
@@ -1006,7 +1096,7 @@ Maintenance release with some documentation fixes\.
<a id="v2-0-0"></a>
## v2\.0\.0
-<a id="release-summary-40"></a>
+<a id="release-summary-44"></a>
### Release Summary
New major release with some deprecations removed and a breaking change in the <code>docker\_compose</code> module regarding the <code>timeout</code> parameter\.
@@ -1016,7 +1106,7 @@ New major release with some deprecations removed and a breaking change in the <c
* docker\_compose \- fixed <code>timeout</code> defaulting behavior so that <code>stop\_grace\_period</code>\, if defined in the compose file\, will be used if <code>timeout</code> is not specified \([https\://github\.com/ansible\-collections/community\.docker/pull/163](https\://github\.com/ansible\-collections/community\.docker/pull/163)\)\.
-<a id="deprecated-features-4"></a>
+<a id="deprecated-features-5"></a>
### Deprecated Features
* docker\_container \- using the special value <code>all</code> in <code>published\_ports</code> has been deprecated\. Use <code>publish\_all\_ports\=true</code> instead \([https\://github\.com/ansible\-collections/community\.docker/pull/210](https\://github\.com/ansible\-collections/community\.docker/pull/210)\)\.
@@ -1032,12 +1122,12 @@ New major release with some deprecations removed and a breaking change in the <c
<a id="v1-10-0"></a>
## v1\.10\.0
-<a id="release-summary-41"></a>
+<a id="release-summary-45"></a>
### Release Summary
Regular feature and bugfix release\.
-<a id="minor-changes-18"></a>
+<a id="minor-changes-19"></a>
### Minor Changes
* Add the modules docker\_container\_exec\, docker\_image\_load and docker\_plugin to the <code>docker</code> module defaults group \([https\://github\.com/ansible\-collections/community\.docker/pull/209](https\://github\.com/ansible\-collections/community\.docker/pull/209)\)\.
@@ -1047,12 +1137,12 @@ Regular feature and bugfix release\.
<a id="v1-9-1"></a>
## v1\.9\.1
-<a id="release-summary-42"></a>
+<a id="release-summary-46"></a>
### Release Summary
Regular bugfix release\.
-<a id="bugfixes-32"></a>
+<a id="bugfixes-35"></a>
### Bugfixes
* docker\_compose \- fixed incorrect <code>changed</code> status for services with <code>profiles</code> defined\, but none enabled \([https\://github\.com/ansible\-collections/community\.docker/pull/192](https\://github\.com/ansible\-collections/community\.docker/pull/192)\)\.
@@ -1060,12 +1150,12 @@ Regular bugfix release\.
<a id="v1-9-0"></a>
## v1\.9\.0
-<a id="release-summary-43"></a>
+<a id="release-summary-47"></a>
### Release Summary
New bugfixes and features release\.
-<a id="minor-changes-19"></a>
+<a id="minor-changes-20"></a>
### Minor Changes
* docker\_\* modules \- include <code>ImportError</code> traceback when reporting that Docker SDK for Python could not be found \([https\://github\.com/ansible\-collections/community\.docker/pull/188](https\://github\.com/ansible\-collections/community\.docker/pull/188)\)\.
@@ -1074,12 +1164,12 @@ New bugfixes and features release\.
* docker\_container \- added new <code>command\_handling</code> option with current deprecated default value <code>compatibility</code> which allows to control how the module handles shell quoting when interpreting lists\, and how the module handles empty lists/strings\. The default will switch to <code>correct</code> in community\.docker 3\.0\.0 \([https\://github\.com/ansible\-collections/community\.docker/pull/186](https\://github\.com/ansible\-collections/community\.docker/pull/186)\)\.
* docker\_container \- lifted restriction preventing the creation of anonymous volumes with the <code>mounts</code> option \([https\://github\.com/ansible\-collections/community\.docker/pull/181](https\://github\.com/ansible\-collections/community\.docker/pull/181)\)\.
-<a id="deprecated-features-5"></a>
+<a id="deprecated-features-6"></a>
### Deprecated Features
* docker\_container \- the new <code>command\_handling</code>\'s default value\, <code>compatibility</code>\, is deprecated and will change to <code>correct</code> in community\.docker 3\.0\.0\. A deprecation warning is emitted by the module in cases where the behavior will change\. Please note that ansible\-core will output a deprecation warning only once\, so if it is shown for an earlier task\, there could be more tasks with this warning where it is not shown \([https\://github\.com/ansible\-collections/community\.docker/pull/186](https\://github\.com/ansible\-collections/community\.docker/pull/186)\)\.
-<a id="bugfixes-33"></a>
+<a id="bugfixes-36"></a>
### Bugfixes
* docker\_compose \- fixes task failures when bringing up services while using <code>docker\-compose \<1\.17\.0</code> \([https\://github\.com/ansible\-collections/community\.docker/issues/180](https\://github\.com/ansible\-collections/community\.docker/issues/180)\)\.
@@ -1093,17 +1183,17 @@ New bugfixes and features release\.
<a id="connection"></a>
#### Connection
-* nsenter \- execute on host running controller container
+* community\.docker\.nsenter \- execute on host running controller container
<a id="v1-8-0"></a>
## v1\.8\.0
-<a id="release-summary-44"></a>
+<a id="release-summary-48"></a>
### Release Summary
Regular bugfix and feature release\.
-<a id="minor-changes-20"></a>
+<a id="minor-changes-21"></a>
### Minor Changes
* Avoid internal ansible\-core module\_utils in favor of equivalent public API available since at least Ansible 2\.9 \([https\://github\.com/ansible\-collections/community\.docker/pull/164](https\://github\.com/ansible\-collections/community\.docker/pull/164)\)\.
@@ -1112,7 +1202,7 @@ Regular bugfix and feature release\.
* docker\_host\_info \- allow values for keys in <code>containers\_filters</code>\, <code>images\_filters</code>\, <code>networks\_filters</code>\, and <code>volumes\_filters</code> to be passed as YAML lists \([https\://github\.com/ansible\-collections/community\.docker/pull/160](https\://github\.com/ansible\-collections/community\.docker/pull/160)\)\.
* docker\_plugin \- added <code>alias</code> option to specify local names for docker plugins \([https\://github\.com/ansible\-collections/community\.docker/pull/161](https\://github\.com/ansible\-collections/community\.docker/pull/161)\)\.
-<a id="bugfixes-34"></a>
+<a id="bugfixes-37"></a>
### Bugfixes
* docker\_compose \- fix idempotence bug when using <code>stopped\: true</code> \([https\://github\.com/ansible\-collections/community\.docker/issues/142](https\://github\.com/ansible\-collections/community\.docker/issues/142)\, [https\://github\.com/ansible\-collections/community\.docker/pull/159](https\://github\.com/ansible\-collections/community\.docker/pull/159)\)\.
@@ -1120,12 +1210,12 @@ Regular bugfix and feature release\.
<a id="v1-7-0"></a>
## v1\.7\.0
-<a id="release-summary-45"></a>
+<a id="release-summary-49"></a>
### Release Summary
Small feature and bugfix release\.
-<a id="minor-changes-21"></a>
+<a id="minor-changes-22"></a>
### Minor Changes
* docker\_image \- allow to tag images by ID \([https\://github\.com/ansible\-collections/community\.docker/pull/149](https\://github\.com/ansible\-collections/community\.docker/pull/149)\)\.
@@ -1133,12 +1223,12 @@ Small feature and bugfix release\.
<a id="v1-6-1"></a>
## v1\.6\.1
-<a id="release-summary-46"></a>
+<a id="release-summary-50"></a>
### Release Summary
Bugfix release to reduce deprecation warning spam\.
-<a id="bugfixes-35"></a>
+<a id="bugfixes-38"></a>
### Bugfixes
* docker\_\* modules and plugins\, except <code>docker\_swarm</code> connection plugin and <code>docker\_compose</code> and <code>docker\_stack\*\` modules \- only emit \`\`tls\_hostname</code> deprecation message if TLS is actually used \([https\://github\.com/ansible\-collections/community\.docker/pull/143](https\://github\.com/ansible\-collections/community\.docker/pull/143)\)\.
@@ -1146,23 +1236,23 @@ Bugfix release to reduce deprecation warning spam\.
<a id="v1-6-0"></a>
## v1\.6\.0
-<a id="release-summary-47"></a>
+<a id="release-summary-51"></a>
### Release Summary
Regular bugfix and feature release\.
-<a id="minor-changes-22"></a>
+<a id="minor-changes-23"></a>
### Minor Changes
* common module utils \- correct error messages for guiding to install proper Docker SDK for Python module \([https\://github\.com/ansible\-collections/community\.docker/pull/125](https\://github\.com/ansible\-collections/community\.docker/pull/125)\)\.
* docker\_container \- allow <code>memory\_swap\: \-1</code> to set memory swap limit to unlimited\. This is useful when the user cannot set memory swap limits due to cgroup limitations or other reasons\, as by default Docker will try to set swap usage to two times the value of <code>memory</code> \([https\://github\.com/ansible\-collections/community\.docker/pull/138](https\://github\.com/ansible\-collections/community\.docker/pull/138)\)\.
-<a id="deprecated-features-6"></a>
+<a id="deprecated-features-7"></a>
### Deprecated Features
* docker\_\* modules and plugins\, except <code>docker\_swarm</code> connection plugin and <code>docker\_compose</code> and <code>docker\_stack\*\` modules \- the current default \`\`localhost</code> for <code>tls\_hostname</code> is deprecated\. In community\.docker 2\.0\.0 it will be computed from <code>docker\_host</code> instead \([https\://github\.com/ansible\-collections/community\.docker/pull/134](https\://github\.com/ansible\-collections/community\.docker/pull/134)\)\.
-<a id="bugfixes-36"></a>
+<a id="bugfixes-39"></a>
### Bugfixes
* docker\-compose \- fix not pulling when <code>state\: present</code> and <code>stopped\: true</code> \([https\://github\.com/ansible\-collections/community\.docker/issues/12](https\://github\.com/ansible\-collections/community\.docker/issues/12)\, [https\://github\.com/ansible\-collections/community\.docker/pull/119](https\://github\.com/ansible\-collections/community\.docker/pull/119)\)\.
@@ -1172,17 +1262,17 @@ Regular bugfix and feature release\.
<a id="v1-5-0"></a>
## v1\.5\.0
-<a id="release-summary-48"></a>
+<a id="release-summary-52"></a>
### Release Summary
Regular feature release\.
-<a id="minor-changes-23"></a>
+<a id="minor-changes-24"></a>
### Minor Changes
* Add the <code>use\_ssh\_client</code> option to most docker modules and plugins \([https\://github\.com/ansible\-collections/community\.docker/issues/108](https\://github\.com/ansible\-collections/community\.docker/issues/108)\, [https\://github\.com/ansible\-collections/community\.docker/pull/114](https\://github\.com/ansible\-collections/community\.docker/pull/114)\)\.
-<a id="bugfixes-37"></a>
+<a id="bugfixes-40"></a>
### Bugfixes
* all modules \- use <code>to\_native</code> to convert exceptions to strings \([https\://github\.com/ansible\-collections/community\.docker/pull/121](https\://github\.com/ansible\-collections/community\.docker/pull/121)\)\.
@@ -1190,17 +1280,17 @@ Regular feature release\.
<a id="new-modules-3"></a>
### New Modules
-* docker\_container\_exec \- Execute command in a docker container
+* community\.docker\.docker\_container\_exec \- Execute command in a docker container
<a id="v1-4-0"></a>
## v1\.4\.0
-<a id="release-summary-49"></a>
+<a id="release-summary-53"></a>
### Release Summary
Security release to address another potential secret leak\. Also includes regular bugfixes and features\.
-<a id="minor-changes-24"></a>
+<a id="minor-changes-25"></a>
### Minor Changes
* docker\_swarm\_service \- change <code>publish\.published\_port</code> option from mandatory to optional\. Docker will assign random high port if not specified \([https\://github\.com/ansible\-collections/community\.docker/issues/99](https\://github\.com/ansible\-collections/community\.docker/issues/99)\)\.
@@ -1215,7 +1305,7 @@ Security release to address another potential secret leak\. Also includes regula
* docker\_swarm \- the <code>join\_token</code> option is now marked as <code>no\_log</code> so it is no longer written into logs \([https\://github\.com/ansible\-collections/community\.docker/pull/103](https\://github\.com/ansible\-collections/community\.docker/pull/103)\)\.
-<a id="bugfixes-38"></a>
+<a id="bugfixes-41"></a>
### Bugfixes
* <code>docker\_swarm\_service</code> \- fix KeyError on caused by reference to deprecated option <code>update\_failure\_action</code> \([https\://github\.com/ansible\-collections/community\.docker/pull/100](https\://github\.com/ansible\-collections/community\.docker/pull/100)\)\.
@@ -1224,12 +1314,12 @@ Security release to address another potential secret leak\. Also includes regula
<a id="v1-3-0"></a>
## v1\.3\.0
-<a id="release-summary-50"></a>
+<a id="release-summary-54"></a>
### Release Summary
Regular feature and bugfix release\.
-<a id="minor-changes-25"></a>
+<a id="minor-changes-26"></a>
### Minor Changes
* docker\_container \- add <code>storage\_opts</code> option to specify storage options \([https\://github\.com/ansible\-collections/community\.docker/issues/91](https\://github\.com/ansible\-collections/community\.docker/issues/91)\, [https\://github\.com/ansible\-collections/community\.docker/pull/93](https\://github\.com/ansible\-collections/community\.docker/pull/93)\)\.
@@ -1237,7 +1327,7 @@ Regular feature and bugfix release\.
* docker\_image \- properly support image IDs \(hashes\) for loading and tagging images \([https\://github\.com/ansible\-collections/community\.docker/issues/86](https\://github\.com/ansible\-collections/community\.docker/issues/86)\, [https\://github\.com/ansible\-collections/community\.docker/pull/87](https\://github\.com/ansible\-collections/community\.docker/pull/87)\)\.
* docker\_swarm\_service \- adding support for maximum number of tasks per node \(<code>replicas\_max\_per\_node</code>\) when running swarm service in replicated mode\. Introduced in API 1\.40 \([https\://github\.com/ansible\-collections/community\.docker/issues/7](https\://github\.com/ansible\-collections/community\.docker/issues/7)\, [https\://github\.com/ansible\-collections/community\.docker/pull/92](https\://github\.com/ansible\-collections/community\.docker/pull/92)\)\.
-<a id="bugfixes-39"></a>
+<a id="bugfixes-42"></a>
### Bugfixes
* docker\_container \- fix healthcheck disabling idempotency issue with strict comparison \([https\://github\.com/ansible\-collections/community\.docker/issues/85](https\://github\.com/ansible\-collections/community\.docker/issues/85)\)\.
@@ -1249,13 +1339,13 @@ Regular feature and bugfix release\.
<a id="new-modules-4"></a>
### New Modules
-* docker\_image\_load \- Load docker image\(s\) from archives
-* docker\_plugin \- Manage Docker plugins
+* community\.docker\.docker\_image\_load \- Load docker image\(s\) from archives
+* community\.docker\.docker\_plugin \- Manage Docker plugins
<a id="v1-2-2"></a>
## v1\.2\.2
-<a id="release-summary-51"></a>
+<a id="release-summary-55"></a>
### Release Summary
Security bugfix release to address CVE\-2021\-20191\.
@@ -1268,12 +1358,12 @@ Security bugfix release to address CVE\-2021\-20191\.
<a id="v1-2-1"></a>
## v1\.2\.1
-<a id="release-summary-52"></a>
+<a id="release-summary-56"></a>
### Release Summary
Bugfix release\.
-<a id="bugfixes-40"></a>
+<a id="bugfixes-43"></a>
### Bugfixes
* docker connection plugin \- fix Docker version parsing\, as some docker versions have a leading <code>v</code> in the output of the command <code>docker version \-\-format \"\{\{\.Server\.Version\}\}\"</code> \([https\://github\.com/ansible\-collections/community\.docker/pull/76](https\://github\.com/ansible\-collections/community\.docker/pull/76)\)\.
@@ -1281,17 +1371,17 @@ Bugfix release\.
<a id="v1-2-0"></a>
## v1\.2\.0
-<a id="release-summary-53"></a>
+<a id="release-summary-57"></a>
### Release Summary
Feature release with one new feature and two bugfixes\.
-<a id="minor-changes-26"></a>
+<a id="minor-changes-27"></a>
### Minor Changes
* docker\_container \- added <code>default\_host\_ip</code> option which allows to explicitly set the default IP string for published ports without explicitly specified IPs\. When using IPv6 binds with Docker 20\.10\.2 or newer\, this needs to be set to an empty string \(<code>\"\"</code>\) \([https\://github\.com/ansible\-collections/community\.docker/issues/70](https\://github\.com/ansible\-collections/community\.docker/issues/70)\, [https\://github\.com/ansible\-collections/community\.docker/pull/71](https\://github\.com/ansible\-collections/community\.docker/pull/71)\)\.
-<a id="bugfixes-41"></a>
+<a id="bugfixes-44"></a>
### Bugfixes
* docker\_container \- allow IPv6 zones \(RFC 4007\) in bind IPs \([https\://github\.com/ansible\-collections/community\.docker/pull/66](https\://github\.com/ansible\-collections/community\.docker/pull/66)\)\.
@@ -1300,24 +1390,24 @@ Feature release with one new feature and two bugfixes\.
<a id="v1-1-0"></a>
## v1\.1\.0
-<a id="release-summary-54"></a>
+<a id="release-summary-58"></a>
### Release Summary
Feature release with three new plugins and modules\.
-<a id="minor-changes-27"></a>
+<a id="minor-changes-28"></a>
### Minor Changes
* docker\_container \- support specifying <code>cgroup\_parent</code> \([https\://github\.com/ansible\-collections/community\.docker/issues/6](https\://github\.com/ansible\-collections/community\.docker/issues/6)\, [https\://github\.com/ansible\-collections/community\.docker/pull/59](https\://github\.com/ansible\-collections/community\.docker/pull/59)\)\.
* docker\_container \- when a container is started with <code>detached\=false</code>\, <code>status</code> is now also returned when it is 0 \([https\://github\.com/ansible\-collections/community\.docker/issues/26](https\://github\.com/ansible\-collections/community\.docker/issues/26)\, [https\://github\.com/ansible\-collections/community\.docker/pull/58](https\://github\.com/ansible\-collections/community\.docker/pull/58)\)\.
* docker\_image \- support <code>platform</code> when building images \([https\://github\.com/ansible\-collections/community\.docker/issues/22](https\://github\.com/ansible\-collections/community\.docker/issues/22)\, [https\://github\.com/ansible\-collections/community\.docker/pull/54](https\://github\.com/ansible\-collections/community\.docker/pull/54)\)\.
-<a id="deprecated-features-7"></a>
+<a id="deprecated-features-8"></a>
### Deprecated Features
* docker\_container \- currently <code>published\_ports</code> can contain port mappings next to the special value <code>all</code>\, in which case the port mappings are ignored\. This behavior is deprecated for community\.docker 2\.0\.0\, at which point it will either be forbidden\, or this behavior will be properly implemented similar to how the Docker CLI tool handles this \([https\://github\.com/ansible\-collections/community\.docker/issues/8](https\://github\.com/ansible\-collections/community\.docker/issues/8)\, [https\://github\.com/ansible\-collections/community\.docker/pull/60](https\://github\.com/ansible\-collections/community\.docker/pull/60)\)\.
-<a id="bugfixes-42"></a>
+<a id="bugfixes-45"></a>
### Bugfixes
* docker\_image \- if <code>push\=true</code> is used with <code>repository</code>\, and the image does not need to be tagged\, still push\. This can happen if <code>repository</code> and <code>name</code> are equal \([https\://github\.com/ansible\-collections/community\.docker/issues/52](https\://github\.com/ansible\-collections/community\.docker/issues/52)\, [https\://github\.com/ansible\-collections/community\.docker/pull/53](https\://github\.com/ansible\-collections/community\.docker/pull/53)\)\.
@@ -1330,27 +1420,27 @@ Feature release with three new plugins and modules\.
<a id="connection-1"></a>
#### Connection
-* docker\_api \- Run tasks in docker containers
+* community\.docker\.docker\_api \- Run tasks in docker containers
<a id="inventory"></a>
#### Inventory
-* docker\_containers \- Ansible dynamic inventory plugin for Docker containers\.
+* community\.docker\.docker\_containers \- Ansible dynamic inventory plugin for Docker containers\.
<a id="new-modules-5"></a>
### New Modules
-* current\_container\_facts \- Return facts about whether the module runs in a Docker container
+* community\.docker\.current\_container\_facts \- Return facts about whether the module runs in a Docker container
<a id="v1-0-1"></a>
## v1\.0\.1
-<a id="release-summary-55"></a>
+<a id="release-summary-59"></a>
### Release Summary
Maintenance release with a bugfix for <code>docker\_container</code>\.
-<a id="bugfixes-43"></a>
+<a id="bugfixes-46"></a>
### Bugfixes
* docker\_container \- the validation for <code>capabilities</code> in <code>device\_requests</code> was incorrect \([https\://github\.com/ansible\-collections/community\.docker/issues/42](https\://github\.com/ansible\-collections/community\.docker/issues/42)\, [https\://github\.com/ansible\-collections/community\.docker/pull/43](https\://github\.com/ansible\-collections/community\.docker/pull/43)\)\.
@@ -1358,12 +1448,12 @@ Maintenance release with a bugfix for <code>docker\_container</code>\.
<a id="v1-0-0"></a>
## v1\.0\.0
-<a id="release-summary-56"></a>
+<a id="release-summary-60"></a>
### Release Summary
This is the first production \(non\-prerelease\) release of <code>community\.docker</code>\.
-<a id="minor-changes-28"></a>
+<a id="minor-changes-29"></a>
### Minor Changes
* Add collection\-side support of the <code>docker</code> action group / module defaults group \([https\://github\.com/ansible\-collections/community\.docker/pull/17](https\://github\.com/ansible\-collections/community\.docker/pull/17)\)\.
@@ -1373,14 +1463,14 @@ This is the first production \(non\-prerelease\) release of <code>community\.doc
<a id="v0-1-0"></a>
## v0\.1\.0
-<a id="release-summary-57"></a>
+<a id="release-summary-61"></a>
### Release Summary
The <code>community\.docker</code> continues the work on the Ansible docker modules and plugins from their state in <code>community\.general</code> 1\.2\.0\. The changes listed here are thus relative to the modules and plugins <code>community\.general\.docker\*</code>\.
All deprecation removals planned for <code>community\.general</code> 2\.0\.0 have been applied\. All deprecation removals scheduled for <code>community\.general</code> 3\.0\.0 have been re\-scheduled for <code>community\.docker</code> 2\.0\.0\.
-<a id="minor-changes-29"></a>
+<a id="minor-changes-30"></a>
### Minor Changes
* docker\_container \- now supports the <code>device\_requests</code> option\, which allows to request additional resources such as GPUs \([https\://github\.com/ansible/ansible/issues/65748](https\://github\.com/ansible/ansible/issues/65748)\, [https\://github\.com/ansible\-collections/community\.general/pull/1119](https\://github\.com/ansible\-collections/community\.general/pull/1119)\)\.
@@ -1411,7 +1501,7 @@ All deprecation removals planned for <code>community\.general</code> 2\.0\.0 hav
* docker\_volume \- no longer returns <code>ansible\_facts</code> \([https\://github\.com/ansible\-collections/community\.docker/pull/1](https\://github\.com/ansible\-collections/community\.docker/pull/1)\)\.
* docker\_volume \- the <code>force</code> option has been removed\. Use <code>recreate</code> instead \([https\://github\.com/ansible\-collections/community\.docker/pull/1](https\://github\.com/ansible\-collections/community\.docker/pull/1)\)\.
-<a id="bugfixes-44"></a>
+<a id="bugfixes-47"></a>
### Bugfixes
* docker\_login \- fix internal config file storage to handle credentials for more than one registry \([https\://github\.com/ansible\-collections/community\.general/issues/1117](https\://github\.com/ansible\-collections/community\.general/issues/1117)\)\.
diff --git a/ansible_collections/community/docker/CHANGELOG.rst b/ansible_collections/community/docker/CHANGELOG.rst
index 1e2ef58a6..dff8b150b 100644
--- a/ansible_collections/community/docker/CHANGELOG.rst
+++ b/ansible_collections/community/docker/CHANGELOG.rst
@@ -4,6 +4,82 @@ Docker Community Collection Release Notes
.. contents:: Topics
+v3.10.3
+=======
+
+Release Summary
+---------------
+
+Bugfix release.
+
+Bugfixes
+--------
+
+- 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).
+
+v3.10.2
+=======
+
+Release Summary
+---------------
+
+Bugfix release.
+
+Bugfixes
+--------
+
+- 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).
+
+v3.10.1
+=======
+
+Release Summary
+---------------
+
+Hotfix release for requests 2.32.0 compatibility.
+
+Bugfixes
+--------
+
+- 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).
+
+Known Issues
+------------
+
+- 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``.
+
+v3.10.0
+=======
+
+Release Summary
+---------------
+
+Feature release.
+
+Minor Changes
+-------------
+
+- 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_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).
+
+Deprecated Features
+-------------------
+
+- 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).
+- 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).
+
v3.9.0
======
@@ -93,7 +169,7 @@ Bugfixes
New Modules
-----------
-- docker_image_export - Export (archive) Docker images
+- community.docker.docker_image_export - Export (archive) Docker images
v3.6.0
======
@@ -137,13 +213,13 @@ Bugfixes
New Modules
-----------
-- docker_compose_v2 - Manage multi-container Docker applications with Docker Compose CLI plugin
-- docker_compose_v2_pull - Pull a Docker compose project
-- docker_image_build - Build Docker images using Docker buildx
-- docker_image_pull - Pull Docker images from registries
-- docker_image_push - Push Docker images to registries
-- docker_image_remove - Remove Docker images
-- docker_image_tag - Tag Docker images with new names and/or tags
+- 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_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
v3.5.0
======
@@ -359,7 +435,7 @@ Bugfixes
New Modules
-----------
-- docker_container_copy_into - Copy a file into a Docker container
+- community.docker.docker_container_copy_into - Copy a file into a Docker container
v3.3.2
======
@@ -870,7 +946,7 @@ New Plugins
Connection
~~~~~~~~~~
-- nsenter - execute on host running controller container
+- community.docker.nsenter - execute on host running controller container
v1.8.0
======
@@ -967,7 +1043,7 @@ Bugfixes
New Modules
-----------
-- docker_container_exec - Execute command in a docker container
+- community.docker.docker_container_exec - Execute command in a docker container
v1.4.0
======
@@ -1026,8 +1102,8 @@ Bugfixes
New Modules
-----------
-- docker_image_load - Load docker image(s) from archives
-- docker_plugin - Manage Docker plugins
+- community.docker.docker_image_load - Load docker image(s) from archives
+- community.docker.docker_plugin - Manage Docker plugins
v1.2.2
======
@@ -1107,17 +1183,17 @@ New Plugins
Connection
~~~~~~~~~~
-- docker_api - Run tasks in docker containers
+- community.docker.docker_api - Run tasks in docker containers
Inventory
~~~~~~~~~
-- docker_containers - Ansible dynamic inventory plugin for Docker containers.
+- community.docker.docker_containers - Ansible dynamic inventory plugin for Docker containers.
New Modules
-----------
-- current_container_facts - Return facts about whether the module runs in a Docker container
+- community.docker.current_container_facts - Return facts about whether the module runs in a Docker container
v1.0.1
======
diff --git a/ansible_collections/community/docker/FILES.json b/ansible_collections/community/docker/FILES.json
index da52548f1..c2f6a28c3 100644
--- a/ansible_collections/community/docker/FILES.json
+++ b/ansible_collections/community/docker/FILES.json
@@ -109,7 +109,7 @@
"name": ".azure-pipelines/azure-pipelines.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "84dc585b738c2bfea68ee8e9cd6d4417f36627bd96a67f92b6f8073449b2d7af",
+ "chksum_sha256": "eed726931f1b030bc5f6c4165c0251704a098760de49fe58cad4c56aa91522e0",
"format": 1
},
{
@@ -130,7 +130,7 @@
"name": ".github/workflows/ansible-test.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4082845558609060198c2628d77b14eb18b28f48faf0fc08116fee817b4e056c",
+ "chksum_sha256": "b36f9ccf4acf3c6d9358268de4c973d43406516c7f2b09f4303fa7c9672ae69a",
"format": 1
},
{
@@ -242,7 +242,7 @@
"name": "changelogs/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3068c91410e1c891056bfdefa3812fb91ed3ccd41fe97b6aaa428debcd5b663",
+ "chksum_sha256": "e678850bfb28299b51297b445b2319e25d84b492364f236ee0154baefcb7d8ce",
"format": 1
},
{
@@ -256,7 +256,7 @@
"name": "changelogs/config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "89ca51ecae2759b4987976d346e16fa930be4a4e05062a1385764626e3aca951",
+ "chksum_sha256": "21105a71a6783da90a5b108563acfeadf066ef571db64d0d36d55c5886ba1dcd",
"format": 1
},
{
@@ -284,7 +284,7 @@
"name": "docs/docsite/rst/scenario_guide.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b7460de972dad8dba6ffbaacd46a84f2b673a74e78f5eb3db617fd3eb574ba6d",
+ "chksum_sha256": "dcbef6d865e38902c5a8b88e7bddf940f62cf31067f29cd041a215cd6a0a6f19",
"format": 1
},
{
@@ -340,7 +340,7 @@
"name": "meta/runtime.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "edcb1bfa37eaf30f16b8a081dcd80ac6406972a894d4f3f5f7fd320e4f309c38",
+ "chksum_sha256": "9c6256715af06a03c0a93beac94757d47be3b0125ccce5d874ffd9227890d09f",
"format": 1
},
{
@@ -375,21 +375,21 @@
"name": "plugins/connection/docker.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "499dc980904433196409bc04a10faf38801123c8a22871026037f4bad6d13bab",
+ "chksum_sha256": "4d013442683d88f48c73695a8cf5d6acb11b4528db1d195c41209a641dd9ebda",
"format": 1
},
{
"name": "plugins/connection/docker_api.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eb3275f36134a45b5acc0620f5b0b849c9cde8cf1975c7cd45b683d56e2e4258",
+ "chksum_sha256": "f04f25bf107d119641444104cf76284c7bb42d6407de0b881eb5b554ae147edd",
"format": 1
},
{
"name": "plugins/connection/nsenter.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2f246a2f8dcb35feb42d2a1d7f28ead845ae4854da097781489233f5a5920e94",
+ "chksum_sha256": "0b3e97b145df0862f75ea03ead386929d6e4faae67123e0421b19a2fa3575347",
"format": 1
},
{
@@ -417,7 +417,7 @@
"name": "plugins/doc_fragments/docker.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "89dae4973d0a843ba52d8ac81197045dcdc136df4ca685210efe815366dbb70f",
+ "chksum_sha256": "15bc8148d241ed95343e15632933a9d6d15b53d690c2f1b7b8a0d7cf56c2adc2",
"format": 1
},
{
@@ -431,7 +431,7 @@
"name": "plugins/inventory/docker_containers.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4feea030c92ca0b3541d679ad49ae060430c0f5a3994fb589485a330613941a",
+ "chksum_sha256": "a4571bbd61633d474b092157351d19ce4ca99893402cb9bfeb316e03427eb357",
"format": 1
},
{
@@ -445,7 +445,7 @@
"name": "plugins/inventory/docker_swarm.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "04e5cf494bac339905130787fbdfe0ca23ab7caad8fec2f784d014937f86eeb1",
+ "chksum_sha256": "73d1a797b773c037c755480b245ad7cfc11b6eb7310c1f015c52729c4e842dab",
"format": 1
},
{
@@ -529,7 +529,7 @@
"name": "plugins/module_utils/_api/transport/basehttpadapter.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "73da87364c86548cdf16f52608349443f02f9926b52e736649a417f1238376ea",
+ "chksum_sha256": "2e88df15eeb6be839c78e777bc093d3f2c727b185395d2616d0cd6d92a4675f5",
"format": 1
},
{
@@ -697,14 +697,14 @@
"name": "plugins/module_utils/module_container/base.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3ef56885b8746ef1ae068412cd9a608dcb83f5b7aa06670d5ae6216aa845a940",
+ "chksum_sha256": "3a1b4d8958005daf4724c037e7419ddbba384eda142a55c6088f5045617f2672",
"format": 1
},
{
"name": "plugins/module_utils/module_container/docker_api.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2d0e757e6b3439e7445531b1be278c283e2a442747f86f51ef831739ddf158c5",
+ "chksum_sha256": "c21b7f1c3d8e1d188ffec2b460589da857ec44d550874f0fb7016e083e7071c2",
"format": 1
},
{
@@ -778,6 +778,13 @@
"format": 1
},
{
+ "name": "plugins/module_utils/selectors.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a48ff68d6dd79eb5d9509e3acae79a6179c9646c51654108ca6873d1eafdb817",
+ "format": 1
+ },
+ {
"name": "plugins/module_utils/socket_handler.py",
"ftype": "file",
"chksum_type": "sha256",
@@ -802,7 +809,7 @@
"name": "plugins/module_utils/util.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cd9d4863ea58408543821688b7093aed25a1323109de82c13c8489f6cd45651a",
+ "chksum_sha256": "b300136bb10e2a9a51862b6b10eb5ce9032c551a13cebba97200ccb501e1a450",
"format": 1
},
{
@@ -830,7 +837,7 @@
"name": "plugins/modules/docker_compose.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ae76fdb37a3517ffcdc50047d900d33a94a9c5e85dcc76ebdd1bbc6dfa9c3b8b",
+ "chksum_sha256": "973b8aee68fcb76dd620c243904c64dee7f234ca1f69019b87c83ca72a8efc48",
"format": 1
},
{
@@ -858,7 +865,7 @@
"name": "plugins/modules/docker_container.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "20ff6513c8c1d81c477c58c1cbe943e383005bcf8c110cfb3b58f96240339da7",
+ "chksum_sha256": "24722b19a3ea8c32bdade25e9f5e061ede3fed5bb01c3db238a5cb45e28b2a1b",
"format": 1
},
{
@@ -872,7 +879,7 @@
"name": "plugins/modules/docker_container_exec.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "088ebb7b7c11d7d7ee8a9e30a9813dc7acfd0bac32782a8a128ac3fe613ab797",
+ "chksum_sha256": "9828790f19f268519de01fa41df37adf89f5a6af88438b4dab5fd225b7a68a88",
"format": 1
},
{
@@ -900,7 +907,7 @@
"name": "plugins/modules/docker_image_build.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0c56e7842f5681b3ca5081ee263fc33ee2a677ce07d19407c04be97f66352720",
+ "chksum_sha256": "ced5bedc7d1ad287717dc2ea39357db5ca584973d04b4f2225180c8fd20ece22",
"format": 1
},
{
@@ -963,7 +970,7 @@
"name": "plugins/modules/docker_network.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d8f6a678e09487346b7ab007dcef3d8c5cb494ede7ccadc43be42c205902de40",
+ "chksum_sha256": "f0b7ab1dd6aac89762fd6ab9b30267eb48bb0906ade41805ff5df79d5e3685c0",
"format": 1
},
{
@@ -998,7 +1005,7 @@
"name": "plugins/modules/docker_prune.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "83107f0243ee1c6706686da15f65e8aa2e5fc96e0d346934210557a97ca38292",
+ "chksum_sha256": "57a0ca1bfd08ac4f16afcaf8a925697bd8cd53a4aa33d1c07b53992174e3eeab",
"format": 1
},
{
@@ -1047,7 +1054,7 @@
"name": "plugins/modules/docker_swarm_service.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a123422ef5020a31efc1f19872e62bd1374af3352640a62df3f01dc8a4c0a3df",
+ "chksum_sha256": "355ed4ec943f881394333a58cc442803c36c85c0e2232374bc9970be977444bd",
"format": 1
},
{
@@ -1096,7 +1103,7 @@
"name": "plugins/plugin_utils/socket_handler.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "35cd4e8636a9d7bc209996b7a384c183f14f205485939744d2164d86a70c8e9b",
+ "chksum_sha256": "56157c15e13defbde6a392ba2804bdb2734316d559c2e61c08361d65deae3ae0",
"format": 1
},
{
@@ -1586,7 +1593,7 @@
"name": "tests/integration/targets/docker_compose_v2/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "375f957e7348b7c72fac3e7ce7634b9424daf98122537ff7b803b56aa4b3079d",
+ "chksum_sha256": "c2a2b069e45658c6089293227752efeb565e01191414706424ce74de797120f2",
"format": 1
},
{
@@ -1649,7 +1656,7 @@
"name": "tests/integration/targets/docker_compose_v2_pull/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "375f957e7348b7c72fac3e7ce7634b9424daf98122537ff7b803b56aa4b3079d",
+ "chksum_sha256": "8e6319cebc310a53e60a30c57416f87baf55918cb8264ae0cf1a070821cb63ba",
"format": 1
},
{
@@ -2237,7 +2244,7 @@
"name": "tests/integration/targets/docker_image_build/tasks/tests/options.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "175cbbaf36639ee9c054d814400835d571416b48df606c9ed7ccaf009f98032c",
+ "chksum_sha256": "8fe987d38f4065b152a05d845709946504903321342d99184c10aa7cf86ae74b",
"format": 1
},
{
@@ -2258,7 +2265,7 @@
"name": "tests/integration/targets/docker_image_build/tasks/test.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d96b8ee07ced0cad104066cce1c1ccbd8569008924dc2669c43f363dcfec9c6f",
+ "chksum_sha256": "4ee523d71f919551cb6c11ae760fe05d24990867ab5a08be86e554a3a8fed861",
"format": 1
},
{
@@ -2297,6 +2304,13 @@
"format": 1
},
{
+ "name": "tests/integration/targets/docker_image_build/templates/SecretsDockerfile",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d65014cfb0da5082a68731d539360be8b0e522df6da3d8054dfa216910ba63a6",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/docker_image_build/templates/StagedDockerfile",
"ftype": "file",
"chksum_type": "sha256",
@@ -3147,7 +3161,7 @@
"name": "tests/integration/targets/docker_prune/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "277ac80b8d8597c2654bac67cd19434f0c478efe5f97cd341a5c90e1214c0463",
+ "chksum_sha256": "e1128cf980ee7ef055acc2d4e41f36e4b7d798f6e73a22ba34f3be0b261b2ca1",
"format": 1
},
{
@@ -3763,7 +3777,7 @@
"name": "tests/integration/targets/docker_swarm_service/vars/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fe5d12fec25ef974db885fd92993fc20baf102c5db843c58dd4263fc80c46ccf",
+ "chksum_sha256": "380d6716f8abcfa414e9174dffc3bb2b86aafc97ec7594f473b2ac1a3ffa9974",
"format": 1
},
{
@@ -3987,7 +4001,7 @@
"name": "tests/integration/targets/generic_connection_tests/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "880a774a7c576b4d4f18dc7308387997278fadb052687da474dfe4c060922cff",
+ "chksum_sha256": "da42f5ed16ff85517f2feb4316aa384d68c3a69f1ba3b3402b472ebc5b771f43",
"format": 1
},
{
@@ -4442,7 +4456,7 @@
"name": "tests/integration/targets/setup_docker/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3e5d213ee69aa2b33302bc83ce9d56fde52956a4070fde9c3e2de3c7564ad88c",
+ "chksum_sha256": "55ce15cf1ed1c55a7819cccd60385f8368b79ee831c8c458fab6eaef4d4f7f28",
"format": 1
},
{
@@ -4736,7 +4750,7 @@
"name": "tests/integration/targets/setup_docker_cli_compose/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4c8d8ec38064dacd5357eee4cab893855454ebe75e9f30c638071735a596776e",
+ "chksum_sha256": "574619bac82e7a65751db428c58b2c44a12e827c723289dc0dcaaef2a97867cf",
"format": 1
},
{
@@ -4883,7 +4897,7 @@
"name": "tests/integration/targets/setup_docker_compose_v1/vars/Alpine.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0554ad7767703892ec32552f8d6119dcc9015f694aa90e4aa4dc4d65a069840e",
+ "chksum_sha256": "95ea3c984062c116932d4d4608d7f25d9e0f9a328c98b5be8ff135ccf3c9ffc7",
"format": 1
},
{
@@ -5814,7 +5828,7 @@
"name": "tests/sanity/ignore-2.11.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9a24bca3a941c3895d8443f5467ad500972776bf79973430315dc60666ca395d",
+ "chksum_sha256": "9e75ee9b11ed3f5847b55c01cf200d637634bb9a81a8dcfa491bf100ac21d1e2",
"format": 1
},
{
@@ -5828,7 +5842,7 @@
"name": "tests/sanity/ignore-2.12.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "253e2f40d466107ec1ec5ec4a936056f7a25a47c9eff9c1541faed239e954847",
+ "chksum_sha256": "8c94911e1d8e017201a95be684853df3667c9c2dcbd5a8b975925abbccb411f2",
"format": 1
},
{
@@ -5842,7 +5856,7 @@
"name": "tests/sanity/ignore-2.13.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7633370c8868422bb5746752325d5799c4054b89347bfe284a5d562f1aa1ca75",
+ "chksum_sha256": "6d447377ca8ae39bbcce6dd990637444a59444529537371720003f13da4f5fd4",
"format": 1
},
{
@@ -5856,7 +5870,7 @@
"name": "tests/sanity/ignore-2.14.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ccc7d836b365401a29253c3db1fef85f976a8977eb57332de1136187ac45f39a",
+ "chksum_sha256": "66b5d2222c0ea982efa4ccbc5fffad980cfbc17001a6cf39b072297715cc22b8",
"format": 1
},
{
@@ -5870,7 +5884,7 @@
"name": "tests/sanity/ignore-2.15.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ccc7d836b365401a29253c3db1fef85f976a8977eb57332de1136187ac45f39a",
+ "chksum_sha256": "66b5d2222c0ea982efa4ccbc5fffad980cfbc17001a6cf39b072297715cc22b8",
"format": 1
},
{
@@ -5884,7 +5898,7 @@
"name": "tests/sanity/ignore-2.16.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "77e2580c039e9062bb354b79bad043392a7e343f11e1797b35b3d28b6955de79",
+ "chksum_sha256": "6a8d217bd175553fa6b355e3a2ce4d891d6593ffcacc639d44f6c84a45feaaa1",
"format": 1
},
{
@@ -6252,6 +6266,20 @@
"format": 1
},
{
+ "name": "tests/unit/plugins/plugin_utils",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/unit/plugins/plugin_utils/test_unsafe.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1568c3ce2e4607a182d8fcafd8d70a78000eec9bd4577ac943af0ab09ef30243",
+ "format": 1
+ },
+ {
"name": "tests/unit/plugins/test_support",
"ftype": "dir",
"chksum_type": null,
@@ -6388,7 +6416,7 @@
"name": "CHANGELOG.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b7838b371ac49712b398b2cc47e2959e020fbe727275fc1052c8e49489bc3596",
+ "chksum_sha256": "42e61d2b2354fbf9c5f2da9873c0477a1c16afede7b23e7fa222f25a158f7590",
"format": 1
},
{
@@ -6402,7 +6430,7 @@
"name": "CHANGELOG.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8593cb523e7f0bfece19e9dd82a25d06277269451d1334d15c15a868272bcb63",
+ "chksum_sha256": "5f823c49d14587f6dfa983c8f2359a9a5ff36e0e34c73615f01eb6504d9d0f9b",
"format": 1
},
{
@@ -6423,7 +6451,7 @@
"name": "README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "18391f2b88eae674b860ad2cd1ac1426dc64299c91965aa4d30b69ff269aac5f",
+ "chksum_sha256": "12a411f378daee55c2ac25a7a41f2ee0884183830ff2df254a54ebe58f188c62",
"format": 1
}
],
diff --git a/ansible_collections/community/docker/MANIFEST.json b/ansible_collections/community/docker/MANIFEST.json
index 447bfc1ce..69ffc1b62 100644
--- a/ansible_collections/community/docker/MANIFEST.json
+++ b/ansible_collections/community/docker/MANIFEST.json
@@ -2,7 +2,7 @@
"collection_info": {
"namespace": "community",
"name": "docker",
- "version": "3.9.0",
+ "version": "3.10.3",
"authors": [
"Ansible Docker Working Group"
],
@@ -28,7 +28,7 @@
"name": "FILES.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f1b0cee31d5d2e869134e845593489c03632024171cd300f35688fb089e7bf2d",
+ "chksum_sha256": "c5b11456e6a1ea1ee5144451aa5a1c46f7f835b3102db5ad06d16a005b4af551",
"format": 1
},
"format": 1
diff --git a/ansible_collections/community/docker/README.md b/ansible_collections/community/docker/README.md
index 0d169c54a..2a2a9cc3f 100644
--- a/ansible_collections/community/docker/README.md
+++ b/ansible_collections/community/docker/README.md
@@ -9,6 +9,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
[![Doc](https://img.shields.io/badge/docs-brightgreen.svg)](https://docs.ansible.com/ansible/latest/collections/community/docker/)
[![Build Status](https://dev.azure.com/ansible/community.docker/_apis/build/status/CI?branchName=main)](https://dev.azure.com/ansible/community.docker/_build?definitionId=25)
[![Codecov](https://img.shields.io/codecov/c/github/ansible-collections/community.docker)](https://codecov.io/gh/ansible-collections/community.docker)
+[![REUSE status](https://api.reuse.software/badge/github.com/ansible-collections/community.docker)](https://api.reuse.software/info/github.com/ansible-collections/community.docker)
This repo contains the `community.docker` Ansible Collection. The collection includes many modules and plugins to work with Docker.
@@ -78,7 +79,7 @@ If you use the Ansible package and do not update collections independently, use
- community.docker.docker_volume: manage Docker volumes
- community.docker.docker_volume_info: retrieve information on Docker volumes
* Docker Compose:
- - community.docker.docker_compose: manage Docker Compose files (legacy Docker Compose v1)
+ - community.docker.docker_compose: manage Docker Compose files (legacy Docker Compose v1; the module is deprecated and will be removed from community.docker 4.0.0)
- community.docker.docker_compose_v2: manage Docker Compose files (Docker compose CLI plugin)
- community.docker.docker_compose_v2_pull: pull a Docker compose project
* Docker Swarm:
diff --git a/ansible_collections/community/docker/changelogs/changelog.yaml b/ansible_collections/community/docker/changelogs/changelog.yaml
index fc22ba446..ba40629e7 100644
--- a/ansible_collections/community/docker/changelogs/changelog.yaml
+++ b/ansible_collections/community/docker/changelogs/changelog.yaml
@@ -1002,6 +1002,102 @@ releases:
- 466-add-data-path-port.yml
- licenses.yml
release_date: '2022-09-08'
+ 3.10.0:
+ changes:
+ deprecated_features:
+ - 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).
+ - 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).
+ minor_changes:
+ - 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_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).
+ release_summary: Feature release.
+ fragments:
+ - 3.10.0.yml
+ - 836-docker_swarm_service-sysctls.yml
+ - 843-docker_network-config-from-config-only.yml
+ - 845-docker_prune.yml
+ - 847-docker_container-heackcheck-test_cli_compatible.yml
+ - 848-docker_api-healthcheck-start-interval.yml
+ - 852-docker_image_build.yml
+ - 853-ssl_version.yml
+ - deprecate-compose-v1.yml
+ release_date: '2024-05-19'
+ 3.10.1:
+ changes:
+ bugfixes:
+ - 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).
+ known_issues:
+ - '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``.
+
+ '
+ release_summary: 'Hotfix release for requests 2.32.0 compatibility.
+
+ '
+ fragments:
+ - 3.10.1.yml
+ - 862-requests.yml
+ release_date: '2024-05-20'
+ 3.10.2:
+ changes:
+ bugfixes:
+ - 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).
+ release_summary: Bugfix release.
+ fragments:
+ - 3.10.2.yml
+ - 864-requests.yml
+ release_date: '2024-05-21'
+ 3.10.3:
+ changes:
+ bugfixes:
+ - 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).
+ release_summary: Bugfix release.
+ fragments:
+ - 3.10.3.yml
+ - 871-selectors.yml
+ release_date: '2024-05-26'
3.2.0:
changes:
deprecated_features:
diff --git a/ansible_collections/community/docker/changelogs/config.yaml b/ansible_collections/community/docker/changelogs/config.yaml
index 1fd1d794d..2959c161e 100644
--- a/ansible_collections/community/docker/changelogs/config.yaml
+++ b/ansible_collections/community/docker/changelogs/config.yaml
@@ -35,3 +35,5 @@ sections:
- Known Issues
title: Docker Community Collection
trivial_section_name: trivial
+use_fqcn: true
+add_plugin_period: true
diff --git a/ansible_collections/community/docker/docs/docsite/rst/scenario_guide.rst b/ansible_collections/community/docker/docs/docsite/rst/scenario_guide.rst
index 203aa57d2..395b71003 100644
--- a/ansible_collections/community/docker/docs/docsite/rst/scenario_guide.rst
+++ b/ansible_collections/community/docker/docs/docsite/rst/scenario_guide.rst
@@ -272,12 +272,13 @@ No further requirements next to to the CLI tool and its Docker Compose plugin ar
Docker Compose v1
.................
-The :ansplugin:`community.docker.docker_compose module <community.docker.docker_compose#module>`
+The deprecated :ansplugin:`community.docker.docker_compose module <community.docker.docker_compose#module>`
allows you to use your existing Docker compose files to orchestrate containers on a single Docker daemon or on Swarm.
This module uses the out-dated and End of Life version 1.x of Docker Compose. It should mainly be used for legacy systems
-which still have to use that version of Docker Compose.
+which still have to use that version of Docker Compose. **The module is deprecated and will be removed from community.docker 4.0.0.**
+Please use the Docker Compose v2 modules instead.
-You need to install the `old Python docker-compose <https://pypi.org/project/docker-compose/>`_ on the remote machines to use the module.
+You need to install the `old Python docker-compose <https://pypi.org/project/docker-compose/>`_ on the remote machines to use the Docker Compose v1 module.
Docker Machine
diff --git a/ansible_collections/community/docker/meta/runtime.yml b/ansible_collections/community/docker/meta/runtime.yml
index 0ddd09fa3..e29f84be1 100644
--- a/ansible_collections/community/docker/meta/runtime.yml
+++ b/ansible_collections/community/docker/meta/runtime.yml
@@ -41,3 +41,10 @@ action_groups:
- docker_swarm_service_info
- docker_volume
- docker_volume_info
+
+plugin_routing:
+ modules:
+ docker_compose:
+ deprecation:
+ removal_version: 4.0.0
+ warning_text: This module uses docker-compose v1, which is End of Life since July 2022. Please migrate to community.docker.docker_compose_v2.
diff --git a/ansible_collections/community/docker/plugins/connection/docker.py b/ansible_collections/community/docker/plugins/connection/docker.py
index 68247dae2..133fe6a75 100644
--- a/ansible_collections/community/docker/plugins/connection/docker.py
+++ b/ansible_collections/community/docker/plugins/connection/docker.py
@@ -83,7 +83,6 @@ import os.path
import subprocess
import re
-from ansible.compat import selectors
from ansible.errors import AnsibleError, AnsibleFileNotFound
from ansible.module_utils.six.moves import shlex_quote
from ansible.module_utils.common.process import get_bin_path
@@ -91,6 +90,7 @@ from ansible.module_utils.common.text.converters import to_bytes, to_native, to_
from ansible.plugins.connection import ConnectionBase, BUFSIZE
from ansible.utils.display import Display
+from ansible_collections.community.docker.plugins.module_utils.selectors import selectors
from ansible_collections.community.docker.plugins.module_utils.version import LooseVersion
display = Display()
diff --git a/ansible_collections/community/docker/plugins/connection/docker_api.py b/ansible_collections/community/docker/plugins/connection/docker_api.py
index 3b99281c3..a6dec85aa 100644
--- a/ansible_collections/community/docker/plugins/connection/docker_api.py
+++ b/ansible_collections/community/docker/plugins/connection/docker_api.py
@@ -21,6 +21,7 @@ notes:
with Python's C(SSLSocket)s. See U(https://github.com/ansible-collections/community.docker/issues/605) for more information.
extends_documentation_fragment:
- community.docker.docker.api_documentation
+ - community.docker.docker.ssl_version_deprecation
- community.docker.docker.var_names
options:
remote_user:
diff --git a/ansible_collections/community/docker/plugins/connection/nsenter.py b/ansible_collections/community/docker/plugins/connection/nsenter.py
index f429f8cef..ccc660b99 100644
--- a/ansible_collections/community/docker/plugins/connection/nsenter.py
+++ b/ansible_collections/community/docker/plugins/connection/nsenter.py
@@ -50,13 +50,15 @@ import fcntl
import ansible.constants as C
from ansible.errors import AnsibleError
-from ansible.module_utils.compat import selectors
from ansible.module_utils.six import binary_type, text_type
from ansible.module_utils.common.text.converters import to_bytes, to_native, to_text
from ansible.plugins.connection import ConnectionBase
from ansible.utils.display import Display
from ansible.utils.path import unfrackpath
+from ansible_collections.community.docker.plugins.module_utils.selectors import selectors
+
+
display = Display()
diff --git a/ansible_collections/community/docker/plugins/doc_fragments/docker.py b/ansible_collections/community/docker/plugins/doc_fragments/docker.py
index 92989a97b..2c78c5fae 100644
--- a/ansible_collections/community/docker/plugins/doc_fragments/docker.py
+++ b/ansible_collections/community/docker/plugins/doc_fragments/docker.py
@@ -392,3 +392,12 @@ notes:
- This module does B(not) use the L(Docker SDK for Python,https://docker-py.readthedocs.io/en/stable/) to
communicate with the Docker daemon. It directly calls the Docker CLI program.
'''
+
+ # DEPRECATED: this will be removed from community.docker 4.0.0! Use with care!
+ SSL_VERSION_DEPRECATION = '''
+options:
+ ssl_version:
+ deprecated:
+ why: This was necessary a long time ago to handle problems with older TLS/SSL versions. It is no longer necessary nowadays.
+ version: 4.0.0
+'''
diff --git a/ansible_collections/community/docker/plugins/inventory/docker_containers.py b/ansible_collections/community/docker/plugins/inventory/docker_containers.py
index 0cae05472..f353b03bd 100644
--- a/ansible_collections/community/docker/plugins/inventory/docker_containers.py
+++ b/ansible_collections/community/docker/plugins/inventory/docker_containers.py
@@ -21,6 +21,7 @@ author:
extends_documentation_fragment:
- ansible.builtin.constructed
- community.docker.docker.api_documentation
+ - community.docker.docker.ssl_version_deprecation
- community.library_inventory_filtering_v1.inventory_filter
description:
- Reads inventories from the Docker API.
diff --git a/ansible_collections/community/docker/plugins/inventory/docker_swarm.py b/ansible_collections/community/docker/plugins/inventory/docker_swarm.py
index acceac86c..6d1556ff5 100644
--- a/ansible_collections/community/docker/plugins/inventory/docker_swarm.py
+++ b/ansible_collections/community/docker/plugins/inventory/docker_swarm.py
@@ -78,6 +78,9 @@ DOCUMENTATION = '''
- Provide a valid SSL version number. Default value determined
by L(SSL Python module, https://docs.python.org/3/library/ssl.html).
type: str
+ deprecated:
+ why: This was necessary a long time ago to handle problems with SSL versions. It is no longer necessary nowadays.
+ version: 4.0.0
api_version:
description:
- The version of the Docker API running on the Docker Host.
diff --git a/ansible_collections/community/docker/plugins/module_utils/_api/transport/basehttpadapter.py b/ansible_collections/community/docker/plugins/module_utils/_api/transport/basehttpadapter.py
index 2afa60aea..14062a0ba 100644
--- a/ansible_collections/community/docker/plugins/module_utils/_api/transport/basehttpadapter.py
+++ b/ansible_collections/community/docker/plugins/module_utils/_api/transport/basehttpadapter.py
@@ -18,3 +18,15 @@ class BaseHTTPAdapter(_HTTPAdapter):
super(BaseHTTPAdapter, self).close()
if hasattr(self, 'pools'):
self.pools.clear()
+
+ # Hotfix for requests 2.32.0 and 2.32.1: its commit
+ # https://github.com/psf/requests/commit/c0813a2d910ea6b4f8438b91d315b8d181302356
+ # changes requests.adapters.HTTPAdapter to no longer call get_connection() from
+ # send(), but instead call _get_connection().
+ def _get_connection(self, request, *args, **kwargs):
+ return self.get_connection(request.url, kwargs.get('proxies'))
+
+ # Fix for requests 2.32.2+:
+ # https://github.com/psf/requests/commit/c98e4d133ef29c46a9b68cd783087218a8075e05
+ def get_connection_with_tls_context(self, request, verify, proxies=None, cert=None):
+ return self.get_connection(request.url, proxies)
diff --git a/ansible_collections/community/docker/plugins/module_utils/module_container/base.py b/ansible_collections/community/docker/plugins/module_utils/module_container/base.py
index 0f776aa5c..410ffb153 100644
--- a/ansible_collections/community/docker/plugins/module_utils/module_container/base.py
+++ b/ansible_collections/community/docker/plugins/module_utils/module_container/base.py
@@ -935,9 +935,11 @@ OPTION_HEALTHCHECK = (
OptionGroup(preprocess=_preprocess_healthcheck)
.add_option('healthcheck', type='dict', ansible_suboptions=dict(
test=dict(type='raw'),
+ test_cli_compatible=dict(type='bool', default=False),
interval=dict(type='str'),
timeout=dict(type='str'),
start_period=dict(type='str'),
+ start_interval=dict(type='str'),
retries=dict(type='int'),
))
)
diff --git a/ansible_collections/community/docker/plugins/module_utils/module_container/docker_api.py b/ansible_collections/community/docker/plugins/module_utils/module_container/docker_api.py
index 61a5500c9..d3da84fe5 100644
--- a/ansible_collections/community/docker/plugins/module_utils/module_container/docker_api.py
+++ b/ansible_collections/community/docker/plugins/module_utils/module_container/docker_api.py
@@ -436,6 +436,7 @@ class DockerAPIEngine(Engine):
min_api_version=None,
preprocess_value=None,
update_parameter=None,
+ extra_option_minimal_versions=None,
):
def preprocess_value_(module, client, api_version, options, values):
if len(options) != 1:
@@ -499,6 +500,7 @@ class DockerAPIEngine(Engine):
set_value=set_value,
min_api_version=min_api_version,
update_value=update_value,
+ extra_option_minimal_versions=extra_option_minimal_versions,
)
@classmethod
@@ -512,6 +514,7 @@ class DockerAPIEngine(Engine):
min_api_version=None,
preprocess_value=None,
update_parameter=None,
+ extra_option_minimal_versions=None,
):
def preprocess_value_(module, client, api_version, options, values):
if len(options) != 1:
@@ -577,6 +580,7 @@ class DockerAPIEngine(Engine):
set_value=set_value,
min_api_version=min_api_version,
update_value=update_value,
+ extra_option_minimal_versions=extra_option_minimal_versions,
)
@@ -742,7 +746,7 @@ def _preprocess_etc_hosts(module, client, api_version, value):
def _preprocess_healthcheck(module, client, api_version, value):
if value is None:
return value
- if not value or not value.get('test'):
+ if not value or not (value.get('test') or (value.get('test_cli_compatible') and value.get('test') is None)):
value = {'test': ['NONE']}
elif 'test' in value:
value['test'] = normalize_healthcheck_test(value['test'])
@@ -751,6 +755,7 @@ def _preprocess_healthcheck(module, client, api_version, value):
'Interval': value.get('interval'),
'Timeout': value.get('timeout'),
'StartPeriod': value.get('start_period'),
+ 'StartInterval': value.get('start_interval'),
'Retries': value.get('retries'),
})
@@ -1300,7 +1305,16 @@ OPTION_ETC_HOSTS.add_engine('docker_api', DockerAPIEngine.host_config_value('Ext
OPTION_GROUPS.add_engine('docker_api', DockerAPIEngine.host_config_value('GroupAdd'))
OPTION_HEALTHCHECK.add_engine('docker_api', DockerAPIEngine.config_value(
- 'Healthcheck', preprocess_value=_preprocess_healthcheck, postprocess_for_get=_postprocess_healthcheck_get_value))
+ 'Healthcheck',
+ preprocess_value=_preprocess_healthcheck,
+ postprocess_for_get=_postprocess_healthcheck_get_value,
+ extra_option_minimal_versions={
+ 'healthcheck.start_interval': {
+ 'docker_api_version': '1.44',
+ 'detect_usage': lambda c: c.module.params['healthcheck'] and c.module.params['healthcheck']['start_interval'] is not None,
+ },
+ },
+))
OPTION_HOSTNAME.add_engine('docker_api', DockerAPIEngine.config_value('Hostname'))
diff --git a/ansible_collections/community/docker/plugins/module_utils/selectors.py b/ansible_collections/community/docker/plugins/module_utils/selectors.py
new file mode 100644
index 000000000..ca52cc877
--- /dev/null
+++ b/ansible_collections/community/docker/plugins/module_utils/selectors.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2024, Felix Fontein <felix@fontein.de>
+# 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
+
+"""Provide selectors import."""
+
+from __future__ import absolute_import, division, print_function
+__metaclass__ = type
+
+
+# Once we drop support for ansible-core 2.16, we can remove the try/except.
+
+from sys import version_info as _python_version_info
+
+
+if _python_version_info < (3, 4):
+ from ansible.module_utils.compat import selectors # noqa: F401, pylint: disable=unused-import
+else:
+ import selectors # noqa: F401, pylint: disable=unused-import
diff --git a/ansible_collections/community/docker/plugins/module_utils/util.py b/ansible_collections/community/docker/plugins/module_utils/util.py
index efd3301f1..9235e34d7 100644
--- a/ansible_collections/community/docker/plugins/module_utils/util.py
+++ b/ansible_collections/community/docker/plugins/module_utils/util.py
@@ -29,7 +29,12 @@ DOCKER_COMMON_ARGS = dict(
ca_path=dict(type='path', aliases=['ca_cert', 'tls_ca_cert', 'cacert_path']),
client_cert=dict(type='path', aliases=['tls_client_cert', 'cert_path']),
client_key=dict(type='path', aliases=['tls_client_key', 'key_path']),
- ssl_version=dict(type='str', fallback=(env_fallback, ['DOCKER_SSL_VERSION'])),
+ ssl_version=dict(
+ type='str',
+ fallback=(env_fallback, ['DOCKER_SSL_VERSION']),
+ removed_in_version='4.0.0',
+ removed_from_collection='community.docker',
+ ),
tls=dict(type='bool', default=DEFAULT_TLS, fallback=(env_fallback, ['DOCKER_TLS'])),
use_ssh_client=dict(type='bool', default=False),
validate_certs=dict(type='bool', default=DEFAULT_TLS_VERIFY, fallback=(env_fallback, ['DOCKER_TLS_VERIFY']), aliases=['tls_verify']),
@@ -348,9 +353,9 @@ def normalize_healthcheck(healthcheck, normalize_test=False):
result = dict()
# All supported healthcheck parameters
- options = ('test', 'interval', 'timeout', 'start_period', 'retries')
+ options = ('test', 'test_cli_compatible', 'interval', 'timeout', 'start_period', 'start_interval', 'retries')
- duration_options = ('interval', 'timeout', 'start_period')
+ duration_options = ('interval', 'timeout', 'start_period', 'start_interval')
for key in options:
if key in healthcheck:
@@ -361,7 +366,7 @@ def normalize_healthcheck(healthcheck, normalize_test=False):
continue
if key in duration_options:
value = convert_duration_to_nanosecond(value)
- if not value:
+ if not value and not (healthcheck.get('test_cli_compatible') and key == 'test'):
continue
if key == 'retries':
try:
@@ -371,7 +376,7 @@ def normalize_healthcheck(healthcheck, normalize_test=False):
'Cannot parse number of retries for healthcheck. '
'Expected an integer, got "{0}".'.format(value)
)
- if key == 'test' and normalize_test:
+ if key == 'test' and value and normalize_test:
value = normalize_healthcheck_test(value)
result[key] = value
diff --git a/ansible_collections/community/docker/plugins/modules/docker_compose.py b/ansible_collections/community/docker/plugins/modules/docker_compose.py
index f8edbee4b..3af3bebb1 100644
--- a/ansible_collections/community/docker/plugins/modules/docker_compose.py
+++ b/ansible_collections/community/docker/plugins/modules/docker_compose.py
@@ -14,6 +14,11 @@ module: docker_compose
short_description: Manage multi-container Docker applications with Docker Compose V1
+deprecated:
+ removed_in: 4.0.0
+ why: This module uses docker-compose v1, which is End of Life since July 2022.
+ alternative: Migrate to M(community.docker.docker_compose_v2)
+
author: "Chris Houseknecht (@chouseknecht)"
description:
diff --git a/ansible_collections/community/docker/plugins/modules/docker_container.py b/ansible_collections/community/docker/plugins/modules/docker_container.py
index d7dbc3780..60768637f 100644
--- a/ansible_collections/community/docker/plugins/modules/docker_container.py
+++ b/ansible_collections/community/docker/plugins/modules/docker_container.py
@@ -369,7 +369,7 @@ options:
- Configure a check that is run to determine whether or not containers for this service are "healthy".
- "See the docs for the L(HEALTHCHECK Dockerfile instruction,https://docs.docker.com/engine/reference/builder/#healthcheck)
for details on how healthchecks work."
- - "O(healthcheck.interval), O(healthcheck.timeout) and O(healthcheck.start_period) are specified as durations.
+ - "O(healthcheck.interval), O(healthcheck.timeout), O(healthcheck.start_period), and O(healthcheck.start_interval) are specified as durations.
They accept duration as a string in a format that look like: V(5h34m56s), V(1m30s), and so on.
The supported units are V(us), V(ms), V(s), V(m) and V(h)."
type: dict
@@ -379,6 +379,16 @@ options:
- Command to run to check health.
- Must be either a string or a list. If it is a list, the first item must be one of V(NONE), V(CMD) or V(CMD-SHELL).
type: raw
+ test_cli_compatible:
+ description:
+ - If set to V(true), omitting O(healthcheck.test) while providing O(healthcheck) does not disable healthchecks,
+ but simply overwrites the image's values by the ones specified in O(healthcheck). This is
+ the behavior used by the Docker CLI.
+ - If set to V(false), omitting O(healthcheck.test) will disable the container's health check.
+ This is the classical behavior of the module and currently the default behavior.
+ default: false
+ type: bool
+ version_added: 3.10.0
interval:
description:
- Time between running the check.
@@ -399,6 +409,12 @@ options:
- Start period for the container to initialize before starting health-retries countdown.
- The default used by the Docker daemon is V(0s).
type: str
+ start_interval:
+ description:
+ - Time between health checks during the start period. This option requires Docker Engine version 25.0 or later.
+ - The default used by the Docker daemon is V(5s).
+ type: str
+ version_added: 3.10.0
hostname:
description:
- The container's hostname.
@@ -1196,6 +1212,7 @@ EXAMPLES = '''
timeout: 10s
retries: 3
start_period: 30s
+ start_interval: 10s
- name: Remove healthcheck from container
community.docker.docker_container:
diff --git a/ansible_collections/community/docker/plugins/modules/docker_container_exec.py b/ansible_collections/community/docker/plugins/modules/docker_container_exec.py
index 0d92dad96..251af5bcd 100644
--- a/ansible_collections/community/docker/plugins/modules/docker_container_exec.py
+++ b/ansible_collections/community/docker/plugins/modules/docker_container_exec.py
@@ -162,7 +162,6 @@ import shlex
import traceback
from ansible.module_utils.common.text.converters import to_text, to_bytes, to_native
-from ansible.module_utils.compat import selectors
from ansible.module_utils.six import string_types
from ansible_collections.community.docker.plugins.module_utils.common_api import (
@@ -170,6 +169,8 @@ from ansible_collections.community.docker.plugins.module_utils.common_api import
RequestException,
)
+from ansible_collections.community.docker.plugins.module_utils.selectors import selectors
+
from ansible_collections.community.docker.plugins.module_utils.socket_handler import (
DockerSocketHandlerModule,
)
diff --git a/ansible_collections/community/docker/plugins/modules/docker_image_build.py b/ansible_collections/community/docker/plugins/modules/docker_image_build.py
index 7f9502098..48478b550 100644
--- a/ansible_collections/community/docker/plugins/modules/docker_image_build.py
+++ b/ansible_collections/community/docker/plugins/modules/docker_image_build.py
@@ -18,6 +18,9 @@ version_added: 3.6.0
description:
- This module allows you to build Docker images using Docker's buildx plugin (BuildKit).
+ - Note that the module is B(not idempotent) in the sense of classical Ansible modules.
+ The only idempotence check is whether the built image already exists. This check can
+ be disabled with the O(rebuild) option.
extends_documentation_fragment:
- community.docker.docker.cli_documentation
@@ -89,8 +92,10 @@ options:
type: str
platform:
description:
- - Platform in the format C(os[/arch[/variant]]).
- type: str
+ - Platforms in the format C(os[/arch[/variant]]).
+ - Since community.docker 3.10.0 this can be a list of platforms, instead of just a single platform.
+ type: list
+ elements: str
shm_size:
description:
- "Size of C(/dev/shm) in format C(<number>[<unit>]). Number is positive integer.
@@ -110,7 +115,121 @@ options:
- never
- always
default: never
-
+ secrets:
+ description:
+ - Secrets to expose to the build.
+ type: list
+ elements: dict
+ version_added: 3.10.0
+ suboptions:
+ id:
+ description:
+ - The secret identifier.
+ - The secret will be made available as a file in the container under C(/run/secrets/<id>).
+ type: str
+ required: true
+ type:
+ description:
+ - Type of the secret.
+ type: str
+ choices:
+ file:
+ - Reads the secret from a file on the target.
+ - The file must be specified in O(secrets[].src).
+ env:
+ - Reads the secret from an environment variable on the target.
+ - The environment variable must be named in O(secrets[].env).
+ - Note that this requires the Buildkit plugin to have version 0.6.0 or newer.
+ value:
+ - Provides the secret from a given value O(secrets[].value).
+ - B(Note) that the secret will be passed as an environment variable to C(docker compose).
+ Use another mean of transport if you consider this not safe enough.
+ - Note that this requires the Buildkit plugin to have version 0.6.0 or newer.
+ required: true
+ src:
+ description:
+ - Source path of the secret.
+ - Only supported and required for O(secrets[].type=file).
+ type: path
+ env:
+ description:
+ - Environment value of the secret.
+ - Only supported and required for O(secrets[].type=env).
+ type: str
+ value:
+ description:
+ - Value of the secret.
+ - B(Note) that the secret will be passed as an environment variable to C(docker compose).
+ Use another mean of transport if you consider this not safe enough.
+ - Only supported and required for O(secrets[].type=value).
+ type: str
+ outputs:
+ description:
+ - Output destinations.
+ - You can provide a list of exporters to export the built image in various places.
+ Note that not all exporters might be supported by the build driver used.
+ - Note that depending on how this option is used, no image with name O(name) and tag O(tag) might
+ be created, which can cause the basic idempotency this module offers to not work.
+ - Providing an empty list to this option is equivalent to not specifying it at all.
+ The default behavior is a single entry with O(outputs[].type=image).
+ type: list
+ elements: dict
+ version_added: 3.10.0
+ suboptions:
+ type:
+ description:
+ - The type of exporter to use.
+ type: str
+ choices:
+ local:
+ - This export type writes all result files to a directory on the client.
+ The new files will be owned by the current user.
+ On multi-platform builds, all results will be put in subdirectories by their platform.
+ - The destination has to be provided in O(outputs[].dest).
+ tar:
+ - This export type export type writes all result files as a single tarball on the client.
+ On multi-platform builds, all results will be put in subdirectories by their platform.
+ - The destination has to be provided in O(outputs[].dest).
+ oci:
+ - This export type writes the result image or manifest list as an
+ L(OCI image layout, https://github.com/opencontainers/image-spec/blob/v1.0.1/image-layout.md)
+ tarball on the client.
+ - The destination has to be provided in O(outputs[].dest).
+ docker:
+ - This export type writes the single-platform result image as a Docker image specification tarball on the client.
+ Tarballs created by this exporter are also OCI compatible.
+ - The destination can be provided in O(outputs[].dest).
+ If not specified, the tar will be loaded automatically to the local image store.
+ - The Docker context where to import the result can be provided in O(outputs[].context).
+ image:
+ - This exporter writes the build result as an image or a manifest list.
+ When using this driver, the image will appear in C(docker images).
+ - The image name can be provided in O(outputs[].name). If it is not provided, the
+ - Optionally, image can be automatically pushed to a registry by setting O(outputs[].push=true).
+ required: true
+ dest:
+ description:
+ - The destination path.
+ - Required for O(outputs[].type=local), O(outputs[].type=tar), O(outputs[].type=oci).
+ - Optional for O(outputs[].type=docker).
+ type: path
+ context:
+ description:
+ - Name for the Docker context where to import the result.
+ - Optional for O(outputs[].type=docker).
+ type: str
+ name:
+ description:
+ - Name under which the image is stored under.
+ - If not provided, O(name) and O(tag) will be used.
+ - Optional for O(outputs[].type=image).
+ type: str
+ push:
+ description:
+ - Whether to push the built image to a registry.
+ - Only used for O(outputs[].type=image).
+ type: bool
+ default: false
requirements:
- "Docker CLI with Docker buildx plugin"
@@ -128,6 +247,15 @@ EXAMPLES = '''
name: localhost/python/3.12:latest
path: /home/user/images/python
dockerfile: Dockerfile-3.12
+
+- name: Build multi-platform image
+ community.docker.docker_image_build:
+ name: multi-platform-image
+ tag: "1.5.2"
+ path: /home/user/images/multi-platform
+ platform:
+ - linux/amd64
+ - linux/arm64/v8
'''
RETURN = '''
@@ -138,6 +266,7 @@ image:
sample: {}
'''
+import base64
import os
import traceback
@@ -156,6 +285,8 @@ from ansible_collections.community.docker.plugins.module_utils.util import (
is_valid_tag,
)
+from ansible_collections.community.docker.plugins.module_utils.version import LooseVersion
+
from ansible_collections.community.docker.plugins.module_utils._api.utils.utils import (
parse_repository_tag,
)
@@ -194,10 +325,26 @@ class ImageBuilder(DockerBaseClass):
self.shm_size = convert_to_bytes(parameters['shm_size'], self.client.module, 'shm_size')
self.labels = clean_dict_booleans_for_docker_api(parameters['labels'])
self.rebuild = parameters['rebuild']
+ self.secrets = parameters['secrets']
+ self.outputs = parameters['outputs']
buildx = self.client.get_client_plugin_info('buildx')
if buildx is None:
self.fail('Docker CLI {0} does not have the buildx plugin installed'.format(self.client.get_cli()))
+ buildx_version = buildx['Version'].lstrip('v')
+
+ if self.secrets:
+ for secret in self.secrets:
+ if secret['type'] in ('env', 'value'):
+ if LooseVersion(buildx_version) < LooseVersion('0.6.0'):
+ self.fail('The Docker buildx plugin has version {version}, but 0.6.0 is needed for secrets of type=env and type=value'.format(
+ version=buildx_version,
+ ))
+ if self.outputs and len(self.outputs) > 1:
+ if LooseVersion(buildx_version) < LooseVersion('0.13.0'):
+ self.fail('The Docker buildx plugin has version {version}, but 0.13.0 is needed to specify more than one output'.format(
+ version=buildx_version,
+ ))
self.path = parameters['path']
if not os.path.isdir(self.path):
@@ -230,6 +377,7 @@ class ImageBuilder(DockerBaseClass):
args.extend([option, value])
def add_args(self, args):
+ environ_update = {}
args.extend(['--tag', '%s:%s' % (self.name, self.tag)])
if self.dockerfile:
args.extend(['--file', os.path.join(self.path, self.dockerfile)])
@@ -248,11 +396,54 @@ class ImageBuilder(DockerBaseClass):
if self.target:
args.extend(['--target', self.target])
if self.platform:
- args.extend(['--platform', self.platform])
+ for platform in self.platform:
+ args.extend(['--platform', platform])
if self.shm_size:
args.extend(['--shm-size', str(self.shm_size)])
if self.labels:
self.add_list_arg(args, '--label', dict_to_list(self.labels))
+ if self.secrets:
+ random_prefix = None
+ for index, secret in enumerate(self.secrets):
+ if secret['type'] == 'file':
+ args.extend(['--secret', 'id={id},type=file,src={src}'.format(id=secret['id'], src=secret['src'])])
+ if secret['type'] == 'env':
+ args.extend(['--secret', 'id={id},type=env,env={env}'.format(id=secret['id'], env=secret['src'])])
+ if secret['type'] == 'value':
+ # We pass values on using environment variables. The user has been warned in the documentation
+ # that they should only use this mechanism when being comfortable with it.
+ if random_prefix is None:
+ # Use /dev/urandom to generate some entropy to make the environment variable's name unguessable
+ random_prefix = base64.b64encode(os.urandom(16)).decode('utf-8').replace('=', '')
+ env_name = 'ANSIBLE_DOCKER_COMPOSE_ENV_SECRET_{random}_{id}'.format(
+ random=random_prefix,
+ id=index,
+ )
+ environ_update[env_name] = secret['value']
+ args.extend(['--secret', 'id={id},type=env,env={env}'.format(id=secret['id'], env=env_name)])
+ if self.outputs:
+ for output in self.outputs:
+ if output['type'] == 'local':
+ args.extend(['--output', 'type=local,dest={dest}'.format(dest=output['dest'])])
+ if output['type'] == 'tar':
+ args.extend(['--output', 'type=tar,dest={dest}'.format(dest=output['dest'])])
+ if output['type'] == 'oci':
+ args.extend(['--output', 'type=oci,dest={dest}'.format(dest=output['dest'])])
+ if output['type'] == 'docker':
+ more = []
+ if output['dest'] is not None:
+ more.append('dest={dest}'.format(dest=output['dest']))
+ if output['dest'] is not None:
+ more.append('context={context}'.format(context=output['context']))
+ args.extend(['--output', 'type=docker,{more}'.format(more=','.join(more))])
+ if output['type'] == 'image':
+ more = []
+ if output['name'] is not None:
+ more.append('name={name}'.format(name=output['name']))
+ if output['push']:
+ more.append('push=true')
+ args.extend(['--output', 'type=image,{more}'.format(more=','.join(more))])
+ return environ_update
def build_image(self):
image = self.client.find_image(self.name, self.tag)
@@ -269,9 +460,9 @@ class ImageBuilder(DockerBaseClass):
results['changed'] = True
if not self.check_mode:
args = ['buildx', 'build', '--progress', 'plain']
- self.add_args(args)
+ environ_update = self.add_args(args)
args.extend(['--', self.path])
- rc, stdout, stderr = self.client.call_cli(*args)
+ rc, stdout, stderr = self.client.call_cli(*args, environ_update=environ_update)
if rc != 0:
self.fail('Building %s:%s failed' % (self.name, self.tag), stdout=to_native(stdout), stderr=to_native(stderr))
results['stdout'] = to_native(stdout)
@@ -294,10 +485,52 @@ def main():
etc_hosts=dict(type='dict'),
args=dict(type='dict'),
target=dict(type='str'),
- platform=dict(type='str'),
+ platform=dict(type='list', elements='str'),
shm_size=dict(type='str'),
labels=dict(type='dict'),
rebuild=dict(type='str', choices=['never', 'always'], default='never'),
+ secrets=dict(
+ type='list',
+ elements='dict',
+ options=dict(
+ id=dict(type='str', required=True),
+ type=dict(type='str', choices=['file', 'env', 'value'], required=True),
+ src=dict(type='path'),
+ env=dict(type='str'),
+ value=dict(type='str', no_log=True),
+ ),
+ required_if=[
+ ('type', 'file', ['src']),
+ ('type', 'env', ['env']),
+ ('type', 'value', ['value']),
+ ],
+ mutually_exclusive=[
+ ('src', 'env', 'value'),
+ ],
+ no_log=False,
+ ),
+ outputs=dict(
+ type='list',
+ elements='dict',
+ options=dict(
+ type=dict(type='str', choices=['local', 'tar', 'oci', 'docker', 'image'], required=True),
+ dest=dict(type='path'),
+ context=dict(type='str'),
+ name=dict(type='str'),
+ push=dict(type='bool', default=False),
+ ),
+ required_if=[
+ ('type', 'local', ['dest']),
+ ('type', 'tar', ['dest']),
+ ('type', 'oci', ['dest']),
+ ],
+ mutually_exclusive=[
+ ('dest', 'name'),
+ ('dest', 'push'),
+ ('context', 'name'),
+ ('context', 'push'),
+ ],
+ ),
)
client = AnsibleModuleDockerClient(
diff --git a/ansible_collections/community/docker/plugins/modules/docker_network.py b/ansible_collections/community/docker/plugins/modules/docker_network.py
index 5670ceea0..c5dd3b229 100644
--- a/ansible_collections/community/docker/plugins/modules/docker_network.py
+++ b/ansible_collections/community/docker/plugins/modules/docker_network.py
@@ -35,6 +35,18 @@ options:
aliases:
- network_name
+ config_from:
+ description:
+ - Specifies the config only network to use the config from.
+ type: str
+ version_added: 3.10.0
+
+ config_only:
+ description:
+ - Sets that this is a config only network.
+ type: bool
+ version_added: 3.10.0
+
connected:
description:
- List of container names or container IDs to connect to a network.
@@ -283,6 +295,8 @@ class TaskParameters(DockerBaseClass):
self.name = None
self.connected = None
+ self.config_from = None
+ self.config_only = None
self.driver = None
self.driver_options = None
self.ipam_driver = None
@@ -300,6 +314,11 @@ class TaskParameters(DockerBaseClass):
for key, value in client.module.params.items():
setattr(self, key, value)
+ # config_only sets driver to 'null' (and scope to 'local') so force that here. Otherwise we get
+ # diffs of 'null' --> 'bridge' given that the driver option defaults to 'bridge'.
+ if self.config_only:
+ self.driver = 'null'
+
def container_names_in_network(network):
return [c['Name'] for c in network['Containers'].values()] if network['Containers'] else []
@@ -401,6 +420,14 @@ class DockerNetworkManager(object):
:return: (bool, list)
'''
differences = DifferenceTracker()
+ if self.parameters.config_only is not None and self.parameters.config_only != net.get('ConfigOnly', False):
+ differences.add('config_only',
+ parameter=self.parameters.config_only,
+ active=net.get('ConfigOnly', False))
+ if self.parameters.config_from is not None and self.parameters.config_from != net.get('ConfigFrom', {}).get('Network', ''):
+ differences.add('config_from',
+ parameter=self.parameters.config_from,
+ active=net.get('ConfigFrom', {}).get('Network', ''))
if self.parameters.driver and self.parameters.driver != net['Driver']:
differences.add('driver',
parameter=self.parameters.driver,
@@ -503,6 +530,10 @@ class DockerNetworkManager(object):
'CheckDuplicate': None,
}
+ if self.parameters.config_only is not None:
+ data['ConfigOnly'] = self.parameters.config_only
+ if self.parameters.config_from:
+ data['ConfigFrom'] = {'Network': self.parameters.config_from}
if self.parameters.enable_ipv6:
data['EnableIPv6'] = True
if self.parameters.internal:
@@ -630,6 +661,8 @@ class DockerNetworkManager(object):
def main():
argument_spec = dict(
name=dict(type='str', required=True, aliases=['network_name']),
+ config_from=dict(type='str'),
+ config_only=dict(type='bool'),
connected=dict(type='list', default=[], elements='str', aliases=['containers']),
state=dict(type='str', default='present', choices=['present', 'absent']),
driver=dict(type='str', default='bridge'),
@@ -653,6 +686,8 @@ def main():
)
option_minimal_versions = dict(
+ config_from=dict(docker_api_version='1.30'),
+ config_only=dict(docker_api_version='1.30'),
scope=dict(docker_api_version='1.30'),
attachable=dict(docker_api_version='1.26'),
)
diff --git a/ansible_collections/community/docker/plugins/modules/docker_prune.py b/ansible_collections/community/docker/plugins/modules/docker_prune.py
index 1dfbf290e..a333c52fe 100644
--- a/ansible_collections/community/docker/plugins/modules/docker_prune.py
+++ b/ansible_collections/community/docker/plugins/modules/docker_prune.py
@@ -81,6 +81,28 @@ options:
- Whether to prune the builder cache.
type: bool
default: false
+ builder_cache_all:
+ description:
+ - Whether to remove all types of build cache.
+ type: bool
+ default: false
+ version_added: 3.10.0
+ builder_cache_filters:
+ description:
+ - A dictionary of filter values used for selecting images to delete.
+ - "For example, C(until: 10m)."
+ - See L(the API documentation,https://docs.docker.com/engine/api/v1.44/#tag/Image/operation/BuildPrune)
+ for more information on possible filters.
+ type: dict
+ version_added: 3.10.0
+ builder_cache_keep_storage:
+ description:
+ - Amount of disk space to keep for cache in format C(<number>[<unit>])."
+ - "Number is a positive integer. Unit can be one of V(B) (byte), V(K) (kibibyte, 1024B), V(M) (mebibyte), V(G) (gibibyte),
+ V(T) (tebibyte), or V(P) (pebibyte)."
+ - "Omitting the unit defaults to bytes."
+ type: str
+ version_added: 3.10.0
author:
- "Felix Fontein (@felixfontein)"
@@ -181,11 +203,20 @@ builder_cache_space_reclaimed:
returned: O(builder_cache=true)
type: int
sample: 0
+builder_cache_caches_deleted:
+ description:
+ - The build caches that were deleted.
+ returned: O(builder_cache=true) and API version is 1.39 or later
+ type: list
+ elements: str
+ sample: []
+ version_added: 3.10.0
'''
import traceback
from ansible.module_utils.common.text.converters import to_native
+from ansible.module_utils.common.text.formatters import human_to_bytes
from ansible_collections.community.docker.plugins.module_utils.common_api import (
AnsibleDockerClient,
@@ -209,13 +240,29 @@ def main():
volumes=dict(type='bool', default=False),
volumes_filters=dict(type='dict'),
builder_cache=dict(type='bool', default=False),
+ builder_cache_all=dict(type='bool', default=False),
+ builder_cache_filters=dict(type='dict'),
+ builder_cache_keep_storage=dict(type='str'), # convert to bytes
)
client = AnsibleDockerClient(
argument_spec=argument_spec,
+ option_minimal_versions=dict(
+ builder_cache=dict(docker_py_version='1.31'),
+ builder_cache_all=dict(docker_py_version='1.39'),
+ builder_cache_filters=dict(docker_py_version='1.31'),
+ builder_cache_keep_storage=dict(docker_py_version='1.39'),
+ ),
# supports_check_mode=True,
)
+ builder_cache_keep_storage = None
+ if client.module.params.get('builder_cache_keep_storage') is not None:
+ try:
+ builder_cache_keep_storage = human_to_bytes(client.module.params.get('builder_cache_keep_storage'))
+ except ValueError as exc:
+ client.module.fail_json(msg='Error while parsing value of builder_cache_keep_storage: {0}'.format(exc))
+
try:
result = dict()
changed = False
@@ -256,10 +303,21 @@ def main():
changed = True
if client.module.params['builder_cache']:
- res = client.post_to_json('/build/prune')
+ filters = clean_dict_booleans_for_docker_api(client.module.params.get('builder_cache_filters'))
+ params = {'filters': convert_filters(filters)}
+ if client.module.params.get('builder_cache_all'):
+ params['all'] = 'true'
+ if builder_cache_keep_storage is not None:
+ params['keep-storage'] = builder_cache_keep_storage
+ res = client.post_to_json('/build/prune', params=params)
result['builder_cache_space_reclaimed'] = res['SpaceReclaimed']
if result['builder_cache_space_reclaimed']:
changed = True
+ if 'CachesDeleted' in res:
+ # API version 1.39+: return value CachesDeleted (list of str)
+ result['builder_cache_caches_deleted'] = res['CachesDeleted']
+ if result['builder_cache_caches_deleted']:
+ changed = True
result['changed'] = changed
client.module.exit_json(**result)
diff --git a/ansible_collections/community/docker/plugins/modules/docker_swarm_service.py b/ansible_collections/community/docker/plugins/modules/docker_swarm_service.py
index 95cc10366..4660d1138 100644
--- a/ansible_collections/community/docker/plugins/modules/docker_swarm_service.py
+++ b/ansible_collections/community/docker/plugins/modules/docker_swarm_service.py
@@ -83,6 +83,11 @@ options:
- Dictionary of key value pairs.
- Corresponds to the C(--container-label) option of C(docker service create).
type: dict
+ sysctls:
+ description:
+ - Dictionary of key, value pairs.
+ version_added: 3.10.0
+ type: dict
dns:
description:
- List of custom DNS servers.
@@ -681,6 +686,7 @@ swarm_service:
"engine.labels.operatingsystem == ubuntu 14.04"
],
"container_labels": null,
+ "sysctls": null,
"dns": null,
"dns_options": null,
"dns_search": null,
@@ -1226,6 +1232,7 @@ class DockerService(DockerBaseClass):
self.log_driver_options = None
self.labels = None
self.container_labels = None
+ self.sysctls = None
self.limit_cpu = None
self.limit_memory = None
self.reserve_cpu = None
@@ -1292,6 +1299,7 @@ class DockerService(DockerBaseClass):
'placement_preferences': self.placement_preferences,
'labels': self.labels,
'container_labels': self.container_labels,
+ 'sysctls': self.sysctls,
'mode': self.mode,
'replicas': self.replicas,
'endpoint_mode': self.endpoint_mode,
@@ -1539,6 +1547,7 @@ class DockerService(DockerBaseClass):
s.tty = ap['tty']
s.labels = ap['labels']
s.container_labels = ap['container_labels']
+ s.sysctls = ap['sysctls']
s.mode = ap['mode']
s.stop_signal = ap['stop_signal']
s.user = ap['user']
@@ -1740,6 +1749,8 @@ class DockerService(DockerBaseClass):
differences.add('reserve_memory', parameter=self.reserve_memory, active=os.reserve_memory)
if self.container_labels is not None and self.container_labels != (os.container_labels or {}):
differences.add('container_labels', parameter=self.container_labels, active=os.container_labels)
+ if self.sysctls is not None and self.sysctls != (os.sysctls or {}):
+ differences.add('sysctls', parameter=self.sysctls, active=os.sysctls)
if self.stop_signal is not None and self.stop_signal != os.stop_signal:
differences.add('stop_signal', parameter=self.stop_signal, active=os.stop_signal)
if self.stop_grace_period is not None and self.stop_grace_period != os.stop_grace_period:
@@ -1934,6 +1945,8 @@ class DockerService(DockerBaseClass):
container_spec_args['user'] = self.user
if self.container_labels is not None:
container_spec_args['labels'] = self.container_labels
+ if self.sysctls is not None:
+ container_spec_args['sysctls'] = self.sysctls
if self.healthcheck is not None:
container_spec_args['healthcheck'] = types.Healthcheck(**self.healthcheck)
elif self.healthcheck_disabled:
@@ -2163,6 +2176,7 @@ class DockerServiceManager(object):
ds.read_only = task_template_data['ContainerSpec'].get('ReadOnly')
ds.cap_add = task_template_data['ContainerSpec'].get('CapabilityAdd')
ds.cap_drop = task_template_data['ContainerSpec'].get('CapabilityDrop')
+ ds.sysctls = task_template_data['ContainerSpec'].get('Sysctls')
healthcheck_data = task_template_data['ContainerSpec'].get('Healthcheck')
if healthcheck_data:
@@ -2676,6 +2690,7 @@ def main():
hosts=dict(type='dict'),
labels=dict(type='dict'),
container_labels=dict(type='dict'),
+ sysctls=dict(type='dict'),
mode=dict(
type='str',
default='replicated',
@@ -2751,6 +2766,7 @@ def main():
init=dict(docker_py_version='4.0.0', docker_api_version='1.37'),
cap_add=dict(docker_py_version='5.0.3', docker_api_version='1.41'),
cap_drop=dict(docker_py_version='5.0.3', docker_api_version='1.41'),
+ sysctls=dict(docker_py_version='6.0.0', docker_api_version='1.40'),
# specials
publish_mode=dict(
docker_py_version='3.0.0',
diff --git a/ansible_collections/community/docker/plugins/plugin_utils/socket_handler.py b/ansible_collections/community/docker/plugins/plugin_utils/socket_handler.py
index 204996f24..e8fd266c8 100644
--- a/ansible_collections/community/docker/plugins/plugin_utils/socket_handler.py
+++ b/ansible_collections/community/docker/plugins/plugin_utils/socket_handler.py
@@ -6,7 +6,7 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
-from ansible.compat import selectors
+from ansible_collections.community.docker.plugins.module_utils.selectors import selectors
from ansible_collections.community.docker.plugins.module_utils.socket_handler import (
DockerSocketHandlerBase,
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2/tasks/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2/tasks/main.yml
index 8813f0e71..dbb2ece71 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2/tasks/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2/tasks/main.yml
@@ -20,7 +20,8 @@
# Run the tests
- block:
- - command: docker compose --help
+ - name: Show docker compose --help output
+ command: docker compose --help
- include_tasks: run-test.yml
with_fileglob:
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2_pull/tasks/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2_pull/tasks/main.yml
index 8813f0e71..d2c8497b1 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2_pull/tasks/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2_pull/tasks/main.yml
@@ -18,9 +18,13 @@
- debug:
msg: "Using name prefix {{ name_prefix }}"
+- name: Show images
+ command: docker images --all --digests
+
# Run the tests
- block:
- - command: docker compose --help
+ - name: Show docker compose --help output
+ command: docker compose --help
- include_tasks: run-test.yml
with_fileglob:
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_build/tasks/test.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_build/tasks/test.yml
index af6e75b22..57130ef1a 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_image_build/tasks/test.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_build/tasks/test.yml
@@ -28,12 +28,24 @@
- Dockerfile
- EtcHostsDockerfile
- MyDockerfile
+ - SecretsDockerfile
- StagedDockerfile
- debug:
msg: "Has buildx plugin: {{ docker_has_buildx }}"
- block:
+ - name: Determine plugin versions
+ command: docker info -f '{{ "{{" }}json .ClientInfo.Plugins{{ "}}" }}'
+ register: plugin_versions
+
+ - name: Determine buildx plugin version
+ set_fact:
+ buildx_version: >-
+ {{
+ (plugin_versions.stdout | from_json | selectattr('Name', 'eq', 'buildx') | map(attribute='Version') | first).lstrip('v')
+ }}
+
- include_tasks: run-test.yml
with_fileglob:
- "tests/*.yml"
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_build/tasks/tests/options.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_build/tasks/tests/options.yml
index 990035788..5c1211c71 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_image_build/tasks/tests/options.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_build/tasks/tests/options.yml
@@ -202,3 +202,88 @@
- labels_1 is changed
- labels_1.image.Config.Labels.FOO == 'BAR'
- labels_1.image.Config.Labels["this is a label"] == "this is the label's value"
+
+####################################################################
+## secrets #########################################################
+####################################################################
+
+- name: Generate secret
+ set_fact:
+ docker_image_build_secret_value: this is my secret {{ '%0x' % ((2**32) | random) }}
+
+- when: buildx_version is version('0.6.0', '>=')
+ block:
+ - name: Build image with secrets via environment variables
+ docker_image_build:
+ name: "{{ iname }}"
+ path: "{{ remote_tmp_dir }}/files"
+ dockerfile: "SecretsDockerfile"
+ pull: false
+ secrets:
+ - id: my-awesome-secret
+ type: value
+ value: '{{ docker_image_build_secret_value }}'
+ nocache: true # using a cache can result in the output step being CACHED
+ register: secrets_1
+
+ - name: cleanup
+ docker_image_remove:
+ name: "{{ iname }}"
+
+ - name: Show image information
+ debug:
+ var: secrets_1.stderr_lines
+
+ - assert:
+ that:
+ - secrets_1 is changed
+ - (docker_image_build_secret_value | b64encode) in secrets_1.stderr
+
+####################################################################
+## outputs #########################################################
+####################################################################
+
+- name: Make sure the image is not there
+ docker_image_remove:
+ name: "{{ iname }}"
+
+- name: Make sure the image tarball is not there
+ file:
+ path: "{{ remote_tmp_dir }}/container.tar"
+ state: absent
+
+- name: Build image with outputs
+ docker_image_build:
+ name: "{{ iname }}"
+ path: "{{ remote_tmp_dir }}/files"
+ dockerfile: "Dockerfile"
+ pull: false
+ outputs:
+ - type: tar
+ dest: "{{ remote_tmp_dir }}/container.tar"
+ register: outputs_1
+
+- name: cleanup (should not be changed)
+ docker_image_remove:
+ name: "{{ iname }}"
+ register: outputs_1_cleanup
+
+- name: Gather information on tarball
+ stat:
+ path: "{{ remote_tmp_dir }}/container.tar"
+ register: outputs_1_stat
+
+- name: Show image information
+ debug:
+ var: outputs_1.image
+
+- name: Show tarball information
+ debug:
+ var: outputs_1_stat.stat
+
+- assert:
+ that:
+ - outputs_1 is changed
+ - outputs_1.image | length == 0
+ - outputs_1_cleanup is not changed
+ - outputs_1_stat.stat.exists
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_build/templates/SecretsDockerfile b/ansible_collections/community/docker/tests/integration/targets/docker_image_build/templates/SecretsDockerfile
new file mode 100644
index 000000000..31bec8262
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_build/templates/SecretsDockerfile
@@ -0,0 +1,7 @@
+# Copyright (c) 2024, Felix Fontein
+# 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 {{ docker_test_image_busybox }}
+RUN --mount=type=secret,id=my-awesome-secret \
+ cat /run/secrets/my-awesome-secret | base64
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_prune/tasks/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_prune/tasks/main.yml
index b2160ef0e..8c1309bc4 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_prune/tasks/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_prune/tasks/main.yml
@@ -126,6 +126,28 @@
debug:
var: result
+ - name: Prune build cache (API version 1.39+)
+ when: docker_api_version is version('1.39', '>=')
+ block:
+ - name: Prune build cache with option
+ docker_prune:
+ builder_cache: true
+ builder_cache_all: true
+ builder_cache_filters:
+ until: 10m
+ builder_cache_keep_storage: 1MB
+ register: result
+
+ - name: Show results
+ debug:
+ var: result
+
+ - name: Check results
+ assert:
+ that:
+ - "'builder_cache_space_reclaimed' in result"
+ - "'builder_cache_caches_deleted' in result"
+
- name: Prune volumes with all filter (API version 1.42+)
when: docker_api_version is version('1.42', '>=')
block:
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_swarm_service/vars/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_swarm_service/vars/main.yml
index 836ee41c4..bd8c799e2 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_swarm_service/vars/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_swarm_service/vars/main.yml
@@ -58,3 +58,4 @@ service_expected_output:
user: null
working_dir: null
init: null
+ sysctls: null
diff --git a/ansible_collections/community/docker/tests/integration/targets/generic_connection_tests/tasks/main.yml b/ansible_collections/community/docker/tests/integration/targets/generic_connection_tests/tasks/main.yml
index abbb02956..e43833b8d 100644
--- a/ansible_collections/community/docker/tests/integration/targets/generic_connection_tests/tasks/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/generic_connection_tests/tasks/main.yml
@@ -174,7 +174,8 @@
- (output_direct.host_info | sanitize_host_info) == (output_https.host_info | sanitize_host_info)
always:
- - command: docker logs {{ daemon_nginx_frontend }}
+ - name: Obtain logs from the nginx frontend
+ command: docker logs {{ daemon_nginx_frontend }}
register: output
ignore_errors: true
- debug:
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker/tasks/main.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker/tasks/main.yml
index e3d7c413f..54c27e43e 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker/tasks/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker/tasks/main.yml
@@ -91,7 +91,8 @@
- block:
# Cleanup docker daemon
- - command: 'docker ps --no-trunc --format {% raw %}"{{.Names}}"{% endraw %}'
+ - name: Show all containers
+ command: 'docker ps --no-trunc --format {% raw %}"{{.Names}}"{% endraw %}'
- name: "Remove all ansible-docker-test-* docker containers"
shell: 'docker ps --no-trunc --format {% raw %}"{{.Names}}"{% endraw %} | grep "^ansible-docker-test-" | xargs -r docker rm -f'
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/main.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/main.yml
index 7a971c229..5a58c982c 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/main.yml
@@ -52,7 +52,8 @@
- name: Obtain Docker Compose version
when: docker_has_compose
block:
- - command:
+ - name: Obtain docker info
+ command:
cmd: docker info --format '{% raw %}{{ json .ClientInfo.Plugins }}{% endraw %}'
register: docker_cli_plugins_stdout
- set_fact:
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Alpine.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Alpine.yml
index fb03ae738..65f6f4326 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Alpine.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Alpine.yml
@@ -9,3 +9,5 @@ docker_compose_pip_packages:
- docker-compose
# Force PyYAML to 5.3.1
- PyYAML==5.3.1
+ # Force requests to < 2.32.0 (https://github.com/docker/docker-py/issues/3256)
+ - requests<2.32.0
diff --git a/ansible_collections/community/docker/tests/sanity/ignore-2.11.txt b/ansible_collections/community/docker/tests/sanity/ignore-2.11.txt
index 2bc38ac22..8dce572fc 100644
--- a/ansible_collections/community/docker/tests/sanity/ignore-2.11.txt
+++ b/ansible_collections/community/docker/tests/sanity/ignore-2.11.txt
@@ -11,3 +11,4 @@ plugins/modules/docker_compose_v2.py validate-modules:return-syntax-error
plugins/modules/docker_compose_v2_pull.py validate-modules:return-syntax-error
plugins/modules/docker_container.py import-2.6!skip # Import uses Python 2.7+ syntax
plugins/modules/docker_container_copy_into.py validate-modules:undocumented-parameter # _max_file_size_for_diff is used by the action plugin
+plugins/modules/docker_image_build.py validate-modules:invalid-documentation
diff --git a/ansible_collections/community/docker/tests/sanity/ignore-2.12.txt b/ansible_collections/community/docker/tests/sanity/ignore-2.12.txt
index f3c4575fb..a3d961e4d 100644
--- a/ansible_collections/community/docker/tests/sanity/ignore-2.12.txt
+++ b/ansible_collections/community/docker/tests/sanity/ignore-2.12.txt
@@ -3,3 +3,4 @@ plugins/modules/current_container_facts.py validate-modules:return-syntax-error
plugins/modules/docker_compose_v2.py validate-modules:return-syntax-error
plugins/modules/docker_compose_v2_pull.py validate-modules:return-syntax-error
plugins/modules/docker_container_copy_into.py validate-modules:undocumented-parameter # _max_file_size_for_diff is used by the action plugin
+plugins/modules/docker_image_build.py validate-modules:invalid-documentation
diff --git a/ansible_collections/community/docker/tests/sanity/ignore-2.13.txt b/ansible_collections/community/docker/tests/sanity/ignore-2.13.txt
index c0d5c549c..ef8aab6c4 100644
--- a/ansible_collections/community/docker/tests/sanity/ignore-2.13.txt
+++ b/ansible_collections/community/docker/tests/sanity/ignore-2.13.txt
@@ -1,3 +1,4 @@
.azure-pipelines/scripts/publish-codecov.py replace-urlopen
plugins/modules/docker_compose_v2.py validate-modules:return-syntax-error
plugins/modules/docker_container_copy_into.py validate-modules:undocumented-parameter # _max_file_size_for_diff is used by the action plugin
+plugins/modules/docker_image_build.py validate-modules:invalid-documentation
diff --git a/ansible_collections/community/docker/tests/sanity/ignore-2.14.txt b/ansible_collections/community/docker/tests/sanity/ignore-2.14.txt
index 2a06013da..f717d24a7 100644
--- a/ansible_collections/community/docker/tests/sanity/ignore-2.14.txt
+++ b/ansible_collections/community/docker/tests/sanity/ignore-2.14.txt
@@ -1,2 +1,3 @@
.azure-pipelines/scripts/publish-codecov.py replace-urlopen
plugins/modules/docker_container_copy_into.py validate-modules:undocumented-parameter # _max_file_size_for_diff is used by the action plugin
+plugins/modules/docker_image_build.py validate-modules:invalid-documentation
diff --git a/ansible_collections/community/docker/tests/sanity/ignore-2.15.txt b/ansible_collections/community/docker/tests/sanity/ignore-2.15.txt
index 2a06013da..f717d24a7 100644
--- a/ansible_collections/community/docker/tests/sanity/ignore-2.15.txt
+++ b/ansible_collections/community/docker/tests/sanity/ignore-2.15.txt
@@ -1,2 +1,3 @@
.azure-pipelines/scripts/publish-codecov.py replace-urlopen
plugins/modules/docker_container_copy_into.py validate-modules:undocumented-parameter # _max_file_size_for_diff is used by the action plugin
+plugins/modules/docker_image_build.py validate-modules:invalid-documentation
diff --git a/ansible_collections/community/docker/tests/sanity/ignore-2.16.txt b/ansible_collections/community/docker/tests/sanity/ignore-2.16.txt
index 12e0b26f9..b60ad3445 100644
--- a/ansible_collections/community/docker/tests/sanity/ignore-2.16.txt
+++ b/ansible_collections/community/docker/tests/sanity/ignore-2.16.txt
@@ -1 +1,2 @@
plugins/modules/docker_container_copy_into.py validate-modules:undocumented-parameter # _max_file_size_for_diff is used by the action plugin
+plugins/modules/docker_image_build.py validate-modules:invalid-documentation
diff --git a/ansible_collections/community/docker/tests/unit/plugins/plugin_utils/test_unsafe.py b/ansible_collections/community/docker/tests/unit/plugins/plugin_utils/test_unsafe.py
new file mode 100644
index 000000000..286c51cfe
--- /dev/null
+++ b/ansible_collections/community/docker/tests/unit/plugins/plugin_utils/test_unsafe.py
@@ -0,0 +1,133 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2024, Felix Fontein <felix@fontein.de>
+# 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
+
+# Make coding more python3-ish
+from __future__ import absolute_import, division, print_function
+
+__metaclass__ = type
+
+
+import pytest
+
+from ansible.utils.unsafe_proxy import AnsibleUnsafe
+
+from ansible_collections.community.docker.plugins.plugin_utils.unsafe import (
+ make_unsafe,
+)
+
+
+TEST_MAKE_UNSAFE = [
+ (
+ u'text',
+ [],
+ [
+ (),
+ ],
+ ),
+ (
+ u'{{text}}',
+ [
+ (),
+ ],
+ [],
+ ),
+ (
+ b'text',
+ [],
+ [
+ (),
+ ],
+ ),
+ (
+ b'{{text}}',
+ [
+ (),
+ ],
+ [],
+ ),
+ (
+ {
+ 'skey': 'value',
+ 'ukey': '{{value}}',
+ 1: [
+ 'value',
+ '{{value}}',
+ {
+ 1.0: '{{value}}',
+ 2.0: 'value',
+ },
+ ],
+ },
+ [
+ ('ukey', ),
+ (1, 1),
+ (1, 2, 1.0),
+ ],
+ [
+ ('skey', ),
+ (1, 0),
+ (1, 2, 2.0),
+ ],
+ ),
+ (
+ ['value', '{{value}}'],
+ [
+ (1, ),
+ ],
+ [
+ (0, ),
+ ],
+ ),
+]
+
+
+@pytest.mark.parametrize("value, check_unsafe_paths, check_safe_paths", TEST_MAKE_UNSAFE)
+def test_make_unsafe(value, check_unsafe_paths, check_safe_paths):
+ unsafe_value = make_unsafe(value)
+ assert unsafe_value == value
+ for check_path in check_unsafe_paths:
+ obj = unsafe_value
+ for elt in check_path:
+ obj = obj[elt]
+ assert isinstance(obj, AnsibleUnsafe)
+ for check_path in check_safe_paths:
+ obj = unsafe_value
+ for elt in check_path:
+ obj = obj[elt]
+ assert not isinstance(obj, AnsibleUnsafe)
+
+
+def test_make_unsafe_dict_key():
+ value = {
+ b'test': 1,
+ u'test': 2,
+ }
+ unsafe_value = make_unsafe(value)
+ assert unsafe_value == value
+ for obj in unsafe_value:
+ assert not isinstance(obj, AnsibleUnsafe)
+
+ value = {
+ b'{{test}}': 1,
+ u'{{test}}': 2,
+ }
+ unsafe_value = make_unsafe(value)
+ assert unsafe_value == value
+ for obj in unsafe_value:
+ assert isinstance(obj, AnsibleUnsafe)
+
+
+def test_make_unsafe_set():
+ value = set([b'test', u'test'])
+ unsafe_value = make_unsafe(value)
+ assert unsafe_value == value
+ for obj in unsafe_value:
+ assert not isinstance(obj, AnsibleUnsafe)
+
+ value = set([b'{{test}}', u'{{test}}'])
+ unsafe_value = make_unsafe(value)
+ assert unsafe_value == value
+ for obj in unsafe_value:
+ assert isinstance(obj, AnsibleUnsafe)
diff --git a/ansible_collections/community/general/.azure-pipelines/azure-pipelines.yml b/ansible_collections/community/general/.azure-pipelines/azure-pipelines.yml
index be8f011bd..7dc438ad3 100644
--- a/ansible_collections/community/general/.azure-pipelines/azure-pipelines.yml
+++ b/ansible_collections/community/general/.azure-pipelines/azure-pipelines.yml
@@ -29,14 +29,14 @@ schedules:
always: true
branches:
include:
+ - stable-9
- stable-8
- - stable-7
- cron: 0 11 * * 0
displayName: Weekly (old stable branches)
always: true
branches:
include:
- - stable-6
+ - stable-7
variables:
- name: checkoutPath
@@ -336,7 +336,7 @@ stages:
- name: Debian Bookworm
test: debian-bookworm/3.11
- name: ArchLinux
- test: archlinux/3.11
+ test: archlinux/3.12
groups:
- 1
- 2
diff --git a/ansible_collections/community/general/.github/BOTMETA.yml b/ansible_collections/community/general/.github/BOTMETA.yml
index e21d0c81c..add324935 100644
--- a/ansible_collections/community/general/.github/BOTMETA.yml
+++ b/ansible_collections/community/general/.github/BOTMETA.yml
@@ -33,6 +33,8 @@ files:
maintainers: $team_ansible_core
$becomes/pmrun.py:
maintainers: $team_ansible_core
+ $becomes/run0.py:
+ maintainers: konstruktoid
$becomes/sesu.py:
maintainers: nekonyuu
$becomes/sudosu.py:
@@ -89,6 +91,8 @@ files:
maintainers: ryancurrah
$callbacks/syslog_json.py:
maintainers: imjoseangel
+ $callbacks/timestamp.py:
+ maintainers: kurokobo
$callbacks/unixy.py:
labels: unixy
maintainers: akatch
@@ -117,6 +121,8 @@ files:
maintainers: $team_ansible_core
$doc_fragments/:
labels: docs_fragments
+ $doc_fragments/django.py:
+ maintainers: russoz
$doc_fragments/hpe3par.py:
labels: hpe3par
maintainers: farhan7500 gautamphegde
@@ -294,8 +300,12 @@ files:
labels: module_utils
$module_utils/btrfs.py:
maintainers: gnfzdz
+ $module_utils/cmd_runner.py:
+ maintainers: russoz
$module_utils/deps.py:
maintainers: russoz
+ $module_utils/django.py:
+ maintainers: russoz
$module_utils/gconftool2.py:
labels: gconftool2
maintainers: russoz
@@ -339,6 +349,8 @@ files:
$module_utils/pipx.py:
labels: pipx
maintainers: russoz
+ $module_utils/python_runner.py:
+ maintainers: russoz
$module_utils/puppet.py:
labels: puppet
maintainers: russoz
@@ -494,6 +506,8 @@ files:
ignore: scottanderson42 tastychutney
labels: django_manage
maintainers: russoz
+ $modules/django_command.py:
+ maintainers: russoz
$modules/dnf_versionlock.py:
maintainers: moreda
$modules/dnf_config_manager.py:
@@ -532,8 +546,6 @@ files:
maintainers: $team_flatpak
$modules/flatpak_remote.py:
maintainers: $team_flatpak
- $modules/flowdock.py:
- ignore: mcodd
$modules/gandi_livedns.py:
maintainers: gthiemonge
$modules/gconftool2.py:
@@ -1096,46 +1108,6 @@ files:
$modules/python_requirements_info.py:
ignore: ryansb
maintainers: willthames
- $modules/rax:
- ignore: ryansb sivel
- $modules/rax.py:
- maintainers: omgjlk sivel
- $modules/rax_cbs.py:
- maintainers: claco
- $modules/rax_cbs_attachments.py:
- maintainers: claco
- $modules/rax_cdb.py:
- maintainers: jails
- $modules/rax_cdb_database.py:
- maintainers: jails
- $modules/rax_cdb_user.py:
- maintainers: jails
- $modules/rax_clb.py:
- maintainers: claco
- $modules/rax_clb_nodes.py:
- maintainers: neuroid
- $modules/rax_clb_ssl.py:
- maintainers: smashwilson
- $modules/rax_files.py:
- maintainers: angstwad
- $modules/rax_files_objects.py:
- maintainers: angstwad
- $modules/rax_identity.py:
- maintainers: claco
- $modules/rax_mon_alarm.py:
- maintainers: smashwilson
- $modules/rax_mon_check.py:
- maintainers: smashwilson
- $modules/rax_mon_entity.py:
- maintainers: smashwilson
- $modules/rax_mon_notification.py:
- maintainers: smashwilson
- $modules/rax_mon_notification_plan.py:
- maintainers: smashwilson
- $modules/rax_network.py:
- maintainers: claco omgjlk
- $modules/rax_queue.py:
- maintainers: claco
$modules/read_csv.py:
maintainers: dagwieers
$modules/redfish_:
@@ -1300,8 +1272,6 @@ files:
maintainers: farhan7500 gautamphegde
$modules/ssh_config.py:
maintainers: gaqzi Akasurde
- $modules/stackdriver.py:
- maintainers: bwhaley
$modules/stacki_host.py:
labels: stacki_host
maintainers: bsanders bbyhuy
@@ -1394,8 +1364,6 @@ files:
maintainers: $team_wdc
$modules/wdc_redfish_info.py:
maintainers: $team_wdc
- $modules/webfaction_:
- maintainers: quentinsf
$modules/xattr.py:
labels: xattr
maintainers: bcoca
diff --git a/ansible_collections/community/general/.github/workflows/ansible-test.yml b/ansible_collections/community/general/.github/workflows/ansible-test.yml
index ecfc36565..e57213e9f 100644
--- a/ansible_collections/community/general/.github/workflows/ansible-test.yml
+++ b/ansible_collections/community/general/.github/workflows/ansible-test.yml
@@ -42,6 +42,7 @@ jobs:
uses: felixfontein/ansible-test-gh-action@main
with:
ansible-core-version: stable-${{ matrix.ansible }}
+ codecov-token: ${{ secrets.CODECOV_TOKEN }}
coverage: ${{ github.event_name == 'schedule' && 'always' || 'never' }}
pull-request-change-detection: 'true'
testing-type: sanity
@@ -83,6 +84,7 @@ jobs:
uses: felixfontein/ansible-test-gh-action@main
with:
ansible-core-version: stable-${{ matrix.ansible }}
+ codecov-token: ${{ secrets.CODECOV_TOKEN }}
coverage: ${{ github.event_name == 'schedule' && 'always' || 'never' }}
pre-test-cmd: >-
mkdir -p ../../ansible
@@ -183,6 +185,7 @@ jobs:
uses: felixfontein/ansible-test-gh-action@main
with:
ansible-core-version: stable-${{ matrix.ansible }}
+ codecov-token: ${{ secrets.CODECOV_TOKEN }}
coverage: ${{ github.event_name == 'schedule' && 'always' || 'never' }}
docker-image: ${{ matrix.docker }}
integration-continue-on-error: 'false'
diff --git a/ansible_collections/community/general/.gitignore b/ansible_collections/community/general/.gitignore
index b7868a9e4..cf1f74e41 100644
--- a/ansible_collections/community/general/.gitignore
+++ b/ansible_collections/community/general/.gitignore
@@ -512,3 +512,7 @@ $RECYCLE.BIN/
# Integration tests cloud configs
tests/integration/cloud-config-*.ini
+
+
+# VSCode specific extensions
+.vscode/settings.json
diff --git a/ansible_collections/community/general/CHANGELOG.md b/ansible_collections/community/general/CHANGELOG.md
index 8f23931fe..91922fb7a 100644
--- a/ansible_collections/community/general/CHANGELOG.md
+++ b/ansible_collections/community/general/CHANGELOG.md
@@ -2,234 +2,79 @@
**Topics**
-- <a href="#v8-6-0">v8\.6\.0</a>
+- <a href="#v9-0-1">v9\.0\.1</a>
- <a href="#release-summary">Release Summary</a>
- <a href="#minor-changes">Minor Changes</a>
- - <a href="#deprecated-features">Deprecated Features</a>
- <a href="#bugfixes">Bugfixes</a>
- - <a href="#new-modules">New Modules</a>
-- <a href="#v8-5-0">v8\.5\.0</a>
+- <a href="#v9-0-0">v9\.0\.0</a>
- <a href="#release-summary-1">Release Summary</a>
- <a href="#minor-changes-1">Minor Changes</a>
+ - <a href="#breaking-changes--porting-guide">Breaking Changes / Porting Guide</a>
+ - <a href="#deprecated-features">Deprecated Features</a>
+ - <a href="#removed-features-previously-deprecated">Removed Features \(previously deprecated\)</a>
- <a href="#security-fixes">Security Fixes</a>
- <a href="#bugfixes-1">Bugfixes</a>
- - <a href="#new-modules-1">New Modules</a>
-- <a href="#v8-4-0">v8\.4\.0</a>
- - <a href="#release-summary-2">Release Summary</a>
- - <a href="#minor-changes-2">Minor Changes</a>
- - <a href="#bugfixes-2">Bugfixes</a>
- <a href="#new-plugins">New Plugins</a>
+ - <a href="#become">Become</a>
- <a href="#callback">Callback</a>
- - <a href="#filter">Filter</a>
- - <a href="#new-modules-2">New Modules</a>
-- <a href="#v8-3-0">v8\.3\.0</a>
- - <a href="#release-summary-3">Release Summary</a>
- - <a href="#minor-changes-3">Minor Changes</a>
- - <a href="#deprecated-features-1">Deprecated Features</a>
- - <a href="#bugfixes-3">Bugfixes</a>
- - <a href="#new-modules-3">New Modules</a>
-- <a href="#v8-2-0">v8\.2\.0</a>
- - <a href="#release-summary-4">Release Summary</a>
- - <a href="#minor-changes-4">Minor Changes</a>
- - <a href="#bugfixes-4">Bugfixes</a>
- - <a href="#new-plugins-1">New Plugins</a>
- <a href="#connection">Connection</a>
- - <a href="#filter-1">Filter</a>
+ - <a href="#filter">Filter</a>
- <a href="#lookup">Lookup</a>
- - <a href="#new-modules-4">New Modules</a>
-- <a href="#v8-1-0">v8\.1\.0</a>
- - <a href="#release-summary-5">Release Summary</a>
- - <a href="#minor-changes-5">Minor Changes</a>
- - <a href="#bugfixes-5">Bugfixes</a>
- - <a href="#new-plugins-2">New Plugins</a>
- - <a href="#lookup-1">Lookup</a>
- <a href="#test">Test</a>
- - <a href="#new-modules-5">New Modules</a>
-- <a href="#v8-0-2">v8\.0\.2</a>
- - <a href="#release-summary-6">Release Summary</a>
- - <a href="#bugfixes-6">Bugfixes</a>
-- <a href="#v8-0-1">v8\.0\.1</a>
- - <a href="#release-summary-7">Release Summary</a>
- - <a href="#bugfixes-7">Bugfixes</a>
-- <a href="#v8-0-0">v8\.0\.0</a>
- - <a href="#release-summary-8">Release Summary</a>
- - <a href="#minor-changes-6">Minor Changes</a>
- - <a href="#breaking-changes--porting-guide">Breaking Changes / Porting Guide</a>
- - <a href="#deprecated-features-2">Deprecated Features</a>
- - <a href="#removed-features-previously-deprecated">Removed Features \(previously deprecated\)</a>
- - <a href="#bugfixes-8">Bugfixes</a>
- - <a href="#known-issues">Known Issues</a>
- - <a href="#new-plugins-3">New Plugins</a>
- - <a href="#lookup-2">Lookup</a>
- - <a href="#new-modules-6">New Modules</a>
-This changelog describes changes after version 7\.0\.0\.
+ - <a href="#new-modules">New Modules</a>
+This changelog describes changes after version 8\.0\.0\.
-<a id="v8-6-0"></a>
-## v8\.6\.0
+<a id="v9-0-1"></a>
+## v9\.0\.1
<a id="release-summary"></a>
### Release Summary
-Regular bugfix and features release\.
+Bugfix release for inclusion in Ansible 10\.0\.0rc1\.
<a id="minor-changes"></a>
### Minor Changes
-* Use offset\-aware <code>datetime\.datetime</code> 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 <code>latest</code> and <code>present\_not\_latest</code>\. The value <code>latest</code> is equivalent to the current behavior of <code>present</code>\, which will upgrade a package if a newer version exists\. <code>present\_not\_latest</code> does what most users would expect <code>present</code> to do\: it does not upgrade if the package is already installed\. The current behavior of <code>present</code> will be deprecated in a later version\, and eventually changed to that of <code>present\_not\_latest</code> \([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 <code>section\_has\_values</code>\. If the target ini file contains more than one <code>section</code>\, use <code>section\_has\_values</code> 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 <code>cert\_content</code> 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 <code>docker\-v2</code> 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 <code>type</code> values <code>ovs\-port</code>\, <code>ovs\-interface</code>\, and <code>ovs\-bridge</code>\, and new <code>slave\_type</code> value <code>ovs\-port</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8154](https\://github\.com/ansible\-collections/community\.general/pull/8154)\)\.
-* osx\_defaults \- add option <code>check\_types</code> 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 <code>missing\_subkey</code> 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 <code>ResetToDefaults</code> 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 <code>MultipartHttpPush</code> to <code>GetFirmwareUpdateCapabilities</code> \([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 <code>accept\-new</code> as valid value for <code>strict\_host\_key\_checking</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8257](https\://github\.com/ansible\-collections/community\.general/pull/8257)\)\.
-
-<a id="deprecated-features"></a>
-### Deprecated Features
-
-* 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)\)\.
+* 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)\)\.
<a id="bugfixes"></a>
### Bugfixes
-* aix\_filesystem \- fix <code>\_validate\_vg</code> not passing VG name to <code>lsvg\_cmd</code> \([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 <code>apt\-get \-y install \<packages\></code>\, 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 <code>ConfigParser</code> to allow converting values with a <code>\%</code> 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 <code>\{</code> or <code>\}</code> 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 <code>defaultClientScopes</code> and <code>optionalClientScopes</code> 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 <code>enabledEventTypes</code> and <code>supportedLocales</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8224](https\://github\.com/ansible\-collections/community\.general/pull/8224)\)\.
-* puppet \- add option <code>environment\_lang</code> to set the environment language encoding\. Defaults to lang <code>C</code>\. It is recommended to set it to <code>C\.UTF\-8</code> or <code>en\_US\.UTF\-8</code> 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 <code>riak admin</code> sub\-command in newer Riak KV versions beside the legacy <code>riak\-admin</code> 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 <code>ConfigParser</code> to allow converting values with a <code>\%</code> 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)\)\.
-
-<a id="new-modules"></a>
-### New Modules
-
-* keycloak\_client\_rolescope \- Allows administration of Keycloak client roles scope to restrict the usage of certain roles to a other specific client applications\.
-
-<a id="v8-5-0"></a>
-## v8\.5\.0
+* cpanm \- use new <code>VarDict</code> 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 <code>VarDict</code> 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)\)\.
+* gconftool2\_info \- use new <code>VarDict</code> 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)\)\.
+* 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)\)\.
+* hponcfg \- use new <code>VarDict</code> 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)\)\.
+* kernel\_blacklist \- use new <code>VarDict</code> 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\_client \- fix TypeError when sanitizing the <code>saml\.signing\.private\.key</code> attribute in the module\'s diff or state output\. The <code>sanitize\_cr</code> 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)\)\.
+* locale\_gen \- use new <code>VarDict</code> 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)\)\.
+* mksysb \- use new <code>VarDict</code> 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)\)\.
+* pipx\_info \- use new <code>VarDict</code> 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 \- use new <code>VarDict</code> 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 <code>VarDict</code> 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)\)\.
+
+<a id="v9-0-0"></a>
+## v9\.0\.0
<a id="release-summary-1"></a>
### Release Summary
-Regular feature and bugfix release with security fixes\.
+This is release 9\.0\.0 of <code>community\.general</code>\, released on 2024\-05\-20\.
<a id="minor-changes-1"></a>
### Minor Changes
-* bitwarden lookup plugin \- allows to fetch all records of a given collection ID\, by allowing to pass an empty value for <code>search\_value</code> when <code>collection\_id</code> 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 <code>group\_by\_hostgroups</code> 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 <code>owner</code>\, <code>group</code>\, <code>mode</code>\, 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 <code>/1\.0/instances</code> API endpoint\, if available\. Falls back to <code>/1\.0/containers</code> or <code>/1\.0/virtual\-machines</code>\. Fixes issue when using Incus or LXD 5\.19 due to migrating to <code>/1\.0/instances</code> endpoint \([https\://github\.com/ansible\-collections/community\.general/pull/7980](https\://github\.com/ansible\-collections/community\.general/pull/7980)\)\.
-* nmcli \- allow setting <code>MTU</code> for <code>bond\-slave</code> interface types \([https\://github\.com/ansible\-collections/community\.general/pull/8118](https\://github\.com/ansible\-collections/community\.general/pull/8118)\)\.
-* proxmox \- adds <code>startup</code> 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)\)\.
-
-<a id="security-fixes"></a>
-### Security Fixes
-
-* 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)\)\.
-
-<a id="bugfixes-1"></a>
-### Bugfixes
-
-* 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 <code>accessor\_id</code> \([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 <code>ipaenabledflag</code> 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 <code>ipaenabledflag</code> 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)\)\.
-
-<a id="new-modules-1"></a>
-### New Modules
-
-* usb\_facts \- Allows listing information about USB devices
-
-<a id="v8-4-0"></a>
-## v8\.4\.0
-
-<a id="release-summary-2"></a>
-### Release Summary
-
-Regular bugfix and feature release\.
-
-<a id="minor-changes-2"></a>
-### Minor Changes
-
+* PythonRunner module utils \- specialisation of <code>CmdRunner</code> 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 <code>datetime\.datetime</code> 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 <code>module\.run\_command\(\)</code> 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)\)\.
+* apt\_rpm \- add new states <code>latest</code> and <code>present\_not\_latest</code>\. The value <code>latest</code> is equivalent to the current behavior of <code>present</code>\, which will upgrade a package if a newer version exists\. <code>present\_not\_latest</code> does what most users would expect <code>present</code> to do\: it does not upgrade if the package is already installed\. The current behavior of <code>present</code> will be deprecated in a later version\, and eventually changed to that of <code>present\_not\_latest</code> \([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 <code>module\.run\_command\(\)</code> 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 <code>bw\_session</code> 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 <code>python\-gitlab</code> \([https\://github\.com/ansible\-collections/community\.general/pull/7790](https\://github\.com/ansible\-collections/community\.general/pull/7790)\)\.
-* gitlab\_hook \- adds <code>releases\_events</code> 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 <code>url</code>\, <code>user</code>\, and <code>password</code> 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 <code>transaction</code> \([https\://github\.com/ansible\-collections/community\.general/pull/7976](https\://github\.com/ansible\-collections/community\.general/pull/7976)\)\.
-* proxmox\_kvm \- add parameter <code>update\_unsafe</code> 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 <code>SetServiceIdentification</code> 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 <code>NOEXEC</code> tag in sudoers rules \([https\://github\.com/ansible\-collections/community\.general/pull/7983](https\://github\.com/ansible\-collections/community\.general/pull/7983)\)\.
-* terraform \- fix <code>diff\_mode</code> in state <code>absent</code> and when terraform <code>resource\_changes</code> does not exist \([https\://github\.com/ansible\-collections/community\.general/pull/7963](https\://github\.com/ansible\-collections/community\.general/pull/7963)\)\.
-
-<a id="bugfixes-2"></a>
-### Bugfixes
-
-* cargo \- fix idempotency issues when using a custom installation path for packages \(using the <code>\-\-path</code> parameter\)\. The initial installation runs fine\, but subsequent runs use the <code>get\_installed\(\)</code> function which did not check the given installation location\, before running <code>cargo install</code>\. This resulted in a false <code>changed</code> state\. Also the removal of packeges using <code>state\: absent</code> 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 <code>search</code> keyword instead of <code>title</code> \([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 <code>/etc/modprobe\.d</code> or <code>/etc/modules\-load\.d</code> 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 <code>changed\=true</code> \([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 <code>GetUpdateStatus</code> 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 <code>Chassis</code> information \([https\://github\.com/ansible\-collections/community\.general/pull/7952](https\://github\.com/ansible\-collections/community\.general/pull/7952)\)\.
-
-<a id="new-plugins"></a>
-### New Plugins
-
-<a id="callback"></a>
-#### Callback
-
-* default\_without\_diff \- The default ansible callback without diff output
-
-<a id="filter"></a>
-#### Filter
-
-* lists\_difference \- Difference of lists with a predictive order
-* lists\_intersect \- Intersection of lists with a predictive order
-* lists\_symmetric\_difference \- Symmetric Difference of lists with a predictive order
-* lists\_union \- Union of lists with a predictive order
-
-<a id="new-modules-2"></a>
-### New Modules
-
-* gitlab\_group\_access\_token \- Manages GitLab group access tokens
-* gitlab\_project\_access\_token \- Manages GitLab project access tokens
-
-<a id="v8-3-0"></a>
-## v8\.3\.0
-
-<a id="release-summary-3"></a>
-### Release Summary
-
-Regular bugfix and feature release\.
-
-<a id="minor-changes-3"></a>
-### Minor Changes
-
+* 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 <code>search\_value</code> when <code>collection\_id</code> 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 <code>bw get item</code> 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 <code>module\.run\_command\(\)</code> 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 <code>cmd\_runner\_fmt\.as\_list\(\)</code> \([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 <code>community\.general\.consul</code> \([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 <code>requests</code> 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)\)\.
@@ -237,532 +82,289 @@ Regular bugfix and feature release\.
* consul\_role \- <code>service\_identities</code> now expects a <code>service\_name</code> option to match the Consul API\, the old <code>name</code> 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)\)\.
-* redfish\_info \- add command <code>GetServiceIdentification</code> to get service identification \([https\://github\.com/ansible\-collections/community\.general/issues/7882](https\://github\.com/ansible\-collections/community\.general/issues/7882)\)\.
-* terraform \- add support for <code>diff\_mode</code> for terraform resource\_changes \([https\://github\.com/ansible\-collections/community\.general/pull/7896](https\://github\.com/ansible\-collections/community\.general/pull/7896)\)\.
-
-<a id="deprecated-features-1"></a>
-### Deprecated Features
-
-* consul\_acl \- the module has been deprecated and will be removed in community\.general 10\.0\.0\. <code>consul\_token</code> and <code>consul\_policy</code> can be used instead \([https\://github\.com/ansible\-collections/community\.general/pull/7901](https\://github\.com/ansible\-collections/community\.general/pull/7901)\)\.
-
-<a id="bugfixes-3"></a>
-### Bugfixes
-
-* homebrew \- detect already installed formulae and casks using JSON output from <code>brew info</code> \([https\://github\.com/ansible\-collections/community\.general/issues/864](https\://github\.com/ansible\-collections/community\.general/issues/864)\)\.
-* incus connection plugin \- treats <code>inventory\_hostname</code> 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 <code>ipatokendisabled</code> as string but the <code>ipatokendisabled</code> value is returned as a boolean \([https\://github\.com/ansible\-collections/community\.general/pull/7795](https\://github\.com/ansible\-collections/community\.general/pull/7795)\)\.
-* 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 <code>connection\.slave\-type</code> wired to <code>bond</code> and not with parameter <code>slave\_type</code> in case of connection type <code>wifi</code> \([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)\)\.
-
-<a id="new-modules-3"></a>
-### New Modules
-
-* consul\_acl\_bootstrap \- Bootstrap ACLs in Consul
-* consul\_auth\_method \- Manipulate Consul auth methods
-* consul\_binding\_rule \- Manipulate Consul binding rules
-* consul\_token \- Manipulate Consul tokens
-* gitlab\_label \- Creates/updates/deletes GitLab Labels belonging to project or group\.
-* gitlab\_milestone \- Creates/updates/deletes GitLab Milestones belonging to project or group
-
-<a id="v8-2-0"></a>
-## v8\.2\.0
-
-<a id="release-summary-4"></a>
-### Release Summary
-
-Regular bugfix and feature release\.
-
-<a id="minor-changes-4"></a>
-### Minor Changes
-
-* 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 <code>if</code> statements with a <code>for</code> 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 <code>maxrepeat</code>\, <code>maxsequence</code>\, <code>dictcheck</code>\, <code>usercheck</code>\, <code>gracelimit</code> 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 <code>config\.algorithm</code> 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 <code>config\.certificate</code> option value is no longer defined with <code>no\_log\=True</code> \([https\://github\.com/ansible\-collections/community\.general/pull/7698](https\://github\.com/ansible\-collections/community\.general/pull/7698)\)\.
-* keycloak\_realm\_key \- the <code>provider\_id</code> option now supports RSA encryption key usage \(value <code>rsa\-enc</code>\) \([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 <code>provider\_id</code> \([https\://github\.com/ansible\-collections/community\.general/pull/7789](https\://github\.com/ansible\-collections/community\.general/pull/7789)\)\.
-* mail \- add <code>Message\-ID</code> 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 <code>message\_id\_domain</code> option \([https\://github\.com/ansible\-collections/community\.general/pull/7765](https\://github\.com/ansible\-collections/community\.general/pull/7765)\)\.
-* ssh\_config \- new feature to set <code>AddKeysToAgent</code> option to <code>yes</code> or <code>no</code> \([https\://github\.com/ansible\-collections/community\.general/pull/7703](https\://github\.com/ansible\-collections/community\.general/pull/7703)\)\.
-* ssh\_config \- new feature to set <code>IdentitiesOnly</code> option to <code>yes</code> or <code>no</code> \([https\://github\.com/ansible\-collections/community\.general/pull/7704](https\://github\.com/ansible\-collections/community\.general/pull/7704)\)\.
-* xcc\_redfish\_command \- added support for raw POSTs \(<code>command\=PostResource</code> in <code>category\=Raw</code>\) without a specific action info \([https\://github\.com/ansible\-collections/community\.general/pull/7746](https\://github\.com/ansible\-collections/community\.general/pull/7746)\)\.
-
-<a id="bugfixes-4"></a>
-### Bugfixes
-
-* keycloak\_identity\_provider \- <code>mappers</code> 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\) <code>mappers</code> 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 <code>force</code> 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)\)\.
-* proxmox\_kvm \- running <code>state\=template</code> 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)\)\.
-
-<a id="new-plugins-1"></a>
-### New Plugins
-
-<a id="connection"></a>
-#### Connection
-
-* incus \- Run tasks in Incus instances via the Incus CLI\.
-
-<a id="filter-1"></a>
-#### Filter
-
-* from\_ini \- Converts INI text input into a dictionary
-* to\_ini \- Converts a dictionary to the INI file format
-
-<a id="lookup"></a>
-#### Lookup
-
-* github\_app\_access\_token \- Obtain short\-lived Github App Access tokens
-
-<a id="new-modules-4"></a>
-### New Modules
-
-* dnf\_config\_manager \- Enable or disable dnf repositories using config\-manager
-* keycloak\_component\_info \- Retrive component info in Keycloak
-* keycloak\_realm\_rolemapping \- Allows administration of Keycloak realm role mappings into groups with the Keycloak API
-* proxmox\_node\_info \- Retrieve information about one or more Proxmox VE nodes
-* proxmox\_storage\_contents\_info \- List content from a Proxmox VE storage
-
-<a id="v8-1-0"></a>
-## v8\.1\.0
-
-<a id="release-summary-5"></a>
-### Release Summary
-
-Regular bugfix and feature release\.
-
-<a id="minor-changes-5"></a>
-### Minor Changes
-
-* bitwarden lookup plugin \- when looking for items using an item ID\, the item is now accessed directly with <code>bw get item</code> 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)\)\.
+* 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 <code>ModuleHelper</code> with <code>VarDict</code> \([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 <code>add\_mode</code> option \([https\://github\.com/ansible\-collections/community\.general/pull/7260](https\://github\.com/ansible\-collections/community\.general/pull/7260)\)\.
* git\_config \- the <code>after</code> and <code>before</code> fields in the <code>diff</code> 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 <code>ca\_path</code> option \([https\://github\.com/ansible\-collections/community\.general/pull/7472](https\://github\.com/ansible\-collections/community\.general/pull/7472)\)\.
* gitlab modules \- remove duplicate <code>gitlab</code> 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 <code>python\-gitlab</code> \([https\://github\.com/ansible\-collections/community\.general/pull/7790](https\://github\.com/ansible\-collections/community\.general/pull/7790)\)\.
+* gitlab\_hook \- adds <code>releases\_events</code> 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 <code>force\_formula</code> 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 <code>homebrew</code> 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 <code>url</code>\, <code>user</code>\, and <code>password</code> 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 <code>group\_by\_hostgroups</code> 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 <code>section\_has\_values</code>\. If the target ini file contains more than one <code>section</code>\, use <code>section\_has\_values</code> 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 <code>module\.run\_command\(\)</code> 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 <code>passkey</code> choice to <code>ipauserauthtype</code> 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 <code>if</code> statements with a <code>for</code> 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 <code>maxrepeat</code>\, <code>maxsequence</code>\, <code>dictcheck</code>\, <code>usercheck</code>\, <code>gracelimit</code> 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 <code>idp</code> and <code>passkey</code> choice to <code>ipauserauthtype</code> parameter\'s choices \([https\://github\.com/ansible\-collections/community\.general/pull/7589](https\://github\.com/ansible\-collections/community\.general/pull/7589)\)\.
* irc \- add <code>validate\_certs</code> option\, and rename <code>use\_ssl</code> to <code>use\_tls</code>\, while keeping <code>use\_ssl</code> as an alias\. The default value for <code>validate\_certs</code> is <code>false</code> for backwards compatibility\. We recommend to every user of this module to explicitly set <code>use\_tls\=true</code> and <em class="title-reference">validate\_certs\=true\`</em> 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 <code>cert\_content</code> argument \([https\://github\.com/ansible\-collections/community\.general/pull/8153](https\://github\.com/ansible\-collections/community\.general/pull/8153)\)\.
+* java\_cert \- enable <code>owner</code>\, <code>group</code>\, <code>mode</code>\, 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 <code>ModuleHelper</code> with <code>VarDict</code> \([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 <code>docker\-v2</code> 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 <code>config\.algorithm</code> 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 <code>config\.certificate</code> option value is no longer defined with <code>no\_log\=True</code> \([https\://github\.com/ansible\-collections/community\.general/pull/7698](https\://github\.com/ansible\-collections/community\.general/pull/7698)\)\.
+* keycloak\_realm\_key \- the <code>provider\_id</code> option now supports RSA encryption key usage \(value <code>rsa\-enc</code>\) \([https\://github\.com/ansible\-collections/community\.general/pull/7698](https\://github\.com/ansible\-collections/community\.general/pull/7698)\)\.
* keycloak\_user\_federation \- add option for <code>krbPrincipalAttribute</code> \([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 <code>provider\_id</code> \([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 <code>module\.run\_command\(\)</code> 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 <code>pvs</code> 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 <code>module\.run\_command\(\)</code> 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 <code>Instance not found</code> errors\, to avoid false detection on unrelated errors such as <code>/usr/bin/python3\: not found</code> \([https\://github\.com/ansible\-collections/community\.general/pull/7521](https\://github\.com/ansible\-collections/community\.general/pull/7521)\)\.
+* lxd\_container \- uses <code>/1\.0/instances</code> API endpoint\, if available\. Falls back to <code>/1\.0/containers</code> or <code>/1\.0/virtual\-machines</code>\. Fixes issue when using Incus or LXD 5\.19 due to migrating to <code>/1\.0/instances</code> 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 <code>module\.run\_command\(\)</code> 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 <code>Message\-ID</code> 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 <code>message\_id\_domain</code> 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 <code>transaction</code> \([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 <code>OPENPGPKEY</code>\, <code>SMIMEA</code>\, and <code>SSHFP</code> \([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 <code>loopback</code> \([https\://github\.com/ansible\-collections/community\.general/issues/6572](https\://github\.com/ansible\-collections/community\.general/issues/6572)\)\.
+* nmcli \- adds OpenvSwitch support with new <code>type</code> values <code>ovs\-port</code>\, <code>ovs\-interface</code>\, and <code>ovs\-bridge</code>\, and new <code>slave\_type</code> value <code>ovs\-port</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8154](https\://github\.com/ansible\-collections/community\.general/pull/8154)\)\.
* nmcli \- allow for <code>infiniband</code> slaves of <code>bond</code> 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 <code>MTU</code> for <code>infiniband</code> and <code>bond</code> interface types \([https\://github\.com/ansible\-collections/community\.general/pull/7499](https\://github\.com/ansible\-collections/community\.general/pull/7499)\)\.
+* nmcli \- allow setting <code>MTU</code> for <code>bond\-slave</code> 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 <code>OTEL\_EXPORTER\_OTLP\_TRACES\_PROTOCOL</code> \([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 <code>ANSIBLE\_OPENTELEMETRY\_STORE\_SPANS\_IN\_FILE</code> \([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 <code>ModuleHelper</code> with <code>VarDict</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8226](https\://github\.com/ansible\-collections/community\.general/pull/8226)\)\.
+* osx\_defaults \- add option <code>check\_types</code> 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 <code>module\.run\_command\(\)</code> 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 <code>timestamp</code> and <code>preserve</code> 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 <code>missing\_subkey</code> 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 <code>ModuleHelper</code> with <code>VarDict</code> \([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 <code>module\.run\_command\(\)</code> 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 <code>module\.run\_command\(\)</code> 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 <code>startup</code> 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 <code>template</code> value to the <code>state</code> 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 <code>update</code> 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 <code>community\.general\.proxmox</code> 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 <code>update\_unsafe</code> 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 <code>template</code> value to the <code>state</code> 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 <code>hookscript</code> 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 <code>ostype</code> 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 <code>\-\-waitforlock</code> option \([https\://github\.com/ansible\-collections/community\.general/pull/8282](https\://github\.com/ansible\-collections/community\.general/pull/8282)\)\.
+* redfish\_command \- add command <code>ResetToDefaults</code> 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 <code>SetServiceIdentification</code> 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 <code>MultipartHttpPush</code> to <code>GetFirmwareUpdateCapabilities</code> \([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 <code>GetServiceIdentification</code> 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 <code>BootProgress</code> property when getting <code>Systems</code> 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 <code>Content\-Type</code> 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 <code>module\.run\_command\(\)</code> 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 <code>controlmaster</code>\, <code>controlpath</code> and <code>controlpersist</code> parameters \([https\://github\.com/ansible\-collections/community\.general/pull/7456](https\://github\.com/ansible\-collections/community\.general/pull/7456)\)\.
+* ssh\_config \- allow <code>accept\-new</code> as valid value for <code>strict\_host\_key\_checking</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8257](https\://github\.com/ansible\-collections/community\.general/pull/8257)\)\.
+* ssh\_config \- new feature to set <code>AddKeysToAgent</code> option to <code>yes</code> or <code>no</code> \([https\://github\.com/ansible\-collections/community\.general/pull/7703](https\://github\.com/ansible\-collections/community\.general/pull/7703)\)\.
+* ssh\_config \- new feature to set <code>IdentitiesOnly</code> option to <code>yes</code> or <code>no</code> \([https\://github\.com/ansible\-collections/community\.general/pull/7704](https\://github\.com/ansible\-collections/community\.general/pull/7704)\)\.
+* sudoers \- add support for the <code>NOEXEC</code> 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 <code>module\.run\_command\(\)</code> 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 <code>module\.run\_command\(\)</code> 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 <code>diff\_mode</code> for terraform resource\_changes \([https\://github\.com/ansible\-collections/community\.general/pull/7896](https\://github\.com/ansible\-collections/community\.general/pull/7896)\)\.
+* terraform \- fix <code>diff\_mode</code> in state <code>absent</code> and when terraform <code>resource\_changes</code> 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 \(<code>command\=PostResource</code> in <code>category\=Raw</code>\) 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 <code>ModuleHelper</code> with <code>VarDict</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8226](https\://github\.com/ansible\-collections/community\.general/pull/8226)\)\.
+* xfconf\_info \- use <code>ModuleHelper</code> with <code>VarDict</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8226](https\://github\.com/ansible\-collections/community\.general/pull/8226)\)\.
+
+<a id="breaking-changes--porting-guide"></a>
+### Breaking Changes / Porting Guide
+
+* cpanm \- the default of the <code>mode</code> option changed from <code>compatibility</code> to <code>new</code> \([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 <code>virtualenv</code> 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 <code>timeout</code> from 10 to 60 \([https\://github\.com/ansible\-collections/community\.general/pull/8198](https\://github\.com/ansible\-collections/community\.general/pull/8198)\)\.
+
+<a id="deprecated-features"></a>
+### Deprecated Features
+
+* MH DependencyCtxMgr module\_utils \- deprecate <code>module\_utils\.mh\.mixin\.deps\.DependencyCtxMgr</code> in favour of <code>module\_utils\.deps</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8280](https\://github\.com/ansible\-collections/community\.general/pull/8280)\)\.
+* ModuleHelper module\_utils \- deprecate <code>plugins\.module\_utils\.module\_helper\.AnsibleModule</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8280](https\://github\.com/ansible\-collections/community\.general/pull/8280)\)\.
+* ModuleHelper module\_utils \- deprecate <code>plugins\.module\_utils\.module\_helper\.DependencyCtxMgr</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8280](https\://github\.com/ansible\-collections/community\.general/pull/8280)\)\.
+* ModuleHelper module\_utils \- deprecate <code>plugins\.module\_utils\.module\_helper\.StateMixin</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8280](https\://github\.com/ansible\-collections/community\.general/pull/8280)\)\.
+* ModuleHelper module\_utils \- deprecate <code>plugins\.module\_utils\.module\_helper\.VarDict\,</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8280](https\://github\.com/ansible\-collections/community\.general/pull/8280)\)\.
+* ModuleHelper module\_utils \- deprecate <code>plugins\.module\_utils\.module\_helper\.VarMeta</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8280](https\://github\.com/ansible\-collections/community\.general/pull/8280)\)\.
+* ModuleHelper module\_utils \- deprecate <code>plugins\.module\_utils\.module\_helper\.VarsMixin</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8280](https\://github\.com/ansible\-collections/community\.general/pull/8280)\)\.
+* ModuleHelper module\_utils \- deprecate use of <code>VarsMixin</code> in favor of using the <code>VardDict</code> 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 <code>VarMeta</code>\, <code>VarDict</code> and <code>VarsMixin</code> 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 <code>state\=present</code> and <code>state\=installed</code> 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 <code>state\=latest</code> if you want this behavior\, and switch to <code>state\=present\_not\_latest</code> if you do not want to upgrade the package if it is already installed\. In community\.general 11\.0\.0 the behavior of <code>state\=present</code> and <code>state\=installed</code> will change to that of <code>state\=present\_not\_latest</code> \([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\. <code>consul\_token</code> and <code>consul\_policy</code> 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 <code>ack\_venv\_creation\_deprecation</code> 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 <code>false</code> for <code>use\_tls</code> and <code>validate\_certs</code> have been deprecated and will change to <code>true</code> in community\.general 10\.0\.0 to improve security\. You can already improve security now by explicitly setting them to <code>true</code>\. 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)\)\.
+
+<a id="removed-features-previously-deprecated"></a>
+### Removed Features \(previously deprecated\)
-<a id="bugfixes-5"></a>
+* The deprecated redirects for internal module names have been removed\. These internal redirects were extra\-long FQCNs like <code>community\.general\.packaging\.os\.apt\_rpm</code> that redirect to the short FQCN <code>community\.general\.apt\_rpm</code>\. 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 <code>ack\_ansible29</code> and <code>ack\_min\_ansiblecore211</code> 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 <code>command</code> values <code>cleanup</code>\, <code>syncdb</code>\, and <code>validate</code> were removed\. Use <code>clearsessions</code>\, <code>migrate</code>\, and <code>check</code> 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 <code>DependencyMixin</code> has been removed\. Use the <code>deps</code> module utils instead \([https\://github\.com/ansible\-collections/community\.general/pull/8198](https\://github\.com/ansible\-collections/community\.general/pull/8198)\)\.
+* proxmox \- the <code>proxmox\_default\_behavior</code> 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 <code>pyrax</code> 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 <code>Rhsm</code>\, <code>RhsmPool</code>\, and <code>RhsmPools</code> 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 <code>autosubscribe</code> of the <code>auto\_attach</code> 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)\)\.
+
+<a id="security-fixes"></a>
+### Security Fixes
+
+* 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 <code>proposed</code>\, <code>existing</code>\, and <code>end\_state</code>\, 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)\)\.
+
+<a id="bugfixes-1"></a>
### Bugfixes
+* aix\_filesystem \- fix <code>\_validate\_vg</code> not passing VG name to <code>lsvg\_cmd</code> \([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 <code>apt\-get \-y install \<packages\></code>\, 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 <code>\-\-path</code> parameter\)\. The initial installation runs fine\, but subsequent runs use the <code>get\_installed\(\)</code> function which did not check the given installation location\, before running <code>cargo install</code>\. This resulted in a false <code>changed</code> state\. Also the removal of packeges using <code>state\: absent</code> 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 <code>accessor\_id</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8091](https\://github\.com/ansible\-collections/community\.general/pull/8091)\)\.
+* from\_ini filter plugin \- disabling interpolation of <code>ConfigParser</code> to allow converting values with a <code>\%</code> 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\_group\_members \- fix gitlab constants call in <code>gitlab\_group\_members</code> 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 <code>search</code> keyword instead of <code>title</code> \([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 <code>gitlab\_project\_members</code> 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 <code>gitlab\_protected\_branches</code> 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 <code>gitlab\_user</code> 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 <code>brew info</code> \([https\://github\.com/ansible\-collections/community\.general/issues/864](https\://github\.com/ansible\-collections/community\.general/issues/864)\)\.
+* 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)\)\.
+* incus connection plugin \- treats <code>inventory\_hostname</code> 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 <code>address\_family</code> when changing <code>option\=method</code> \([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 <code>\{</code> or <code>\}</code> 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 <code>ipaenabledflag</code> 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 <code>ipatokendisabled</code> as string but the <code>ipatokendisabled</code> 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 <code>ipaenabledflag</code> 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 <code>ssl\.wrap\_socket</code> 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 <code>/</code> 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 <code>defaultClientScopes</code> and <code>optionalClientScopes</code> to normalizations \([https\://github\.com/ansible\-collections/community\.general/pull/8223](https\://github\.com/ansible\-collections/community\.general/pull/8223)\)\.
+* 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 \- <code>mappers</code> 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\) <code>mappers</code> 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 <code>enabledEventTypes</code> and <code>supportedLocales</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8224](https\://github\.com/ansible\-collections/community\.general/pull/8224)\)\.
+* keycloak\_user \- when <code>force</code> 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 <code>krbPrincipalAttribute</code> \([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)\)\.
* log\_entries callback plugin \- replace <code>ssl\.wrap\_socket</code> 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 <code>stdout</code> and <code>stderr</code> \([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)\)\.
+* modprobe \- listing modules files or modprobe files could trigger a FileNotFoundError if <code>/etc/modprobe\.d</code> or <code>/etc/modules\-load\.d</code> 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 <code>connection\.slave\-type</code> wired to <code>bond</code> and not with parameter <code>slave\_type</code> in case of connection type <code>wifi</code> \([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 <code>type\(\)</code> calls with <code>isinstance\(\)</code> 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 <code>disable\_logs</code> 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 <code>pip\_args</code> 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)\)\.
+* pkgin \- pkgin \(pkgsrc package manager used by SmartOS\) raises erratic exceptions and spurious <code>changed\=true</code> \([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 <code>state\=template</code> 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 <code>environment\_lang</code> to set the environment language encoding\. Defaults to lang <code>C</code>\. It is recommended to set it to <code>C\.UTF\-8</code> or <code>en\_US\.UTF\-8</code> 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 <code>SimpleUpdate</code> and <code>MultipartHTTPPushUpdate</code> commands to treat the lack of a <code>MessageId</code> 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 <code>GetUpdateStatus</code> 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 <code>Chassis</code> 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 <code>riak admin</code> sub\-command in newer Riak KV versions beside the legacy <code>riak\-admin</code> main command \([https\://github\.com/ansible\-collections/community\.general/pull/8211](https\://github\.com/ansible\-collections/community\.general/pull/8211)\)\.
+* 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 <code>ConfigParser</code> to allow converting values with a <code>\%</code> 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)\)\.
-<a id="new-plugins-2"></a>
+<a id="new-plugins"></a>
### New Plugins
-<a id="lookup-1"></a>
-#### Lookup
-
-* onepassword\_doc \- Fetch documents stored in 1Password
-
-<a id="test"></a>
-#### Test
-
-* fqdn\_valid \- Validates fully\-qualified domain names against RFC 1123
-
-<a id="new-modules-5"></a>
-### New Modules
-
-* git\_config\_info \- Read git configuration
-* gitlab\_issue \- Create\, update\, or delete GitLab issues
-* nomad\_token \- Manage Nomad ACL tokens
+<a id="become"></a>
+#### Become
-<a id="v8-0-2"></a>
-## v8\.0\.2
+* community\.general\.run0 \- Systemd\'s run0\.
-<a id="release-summary-6"></a>
-### Release Summary
-
-Bugfix release for inclusion in Ansible 9\.0\.0rc1\.
-
-<a id="bugfixes-6"></a>
-### Bugfixes
-
-* ocapi\_utils\, oci\_utils\, redfish\_utils module utils \- replace <code>type\(\)</code> calls with <code>isinstance\(\)</code> calls \([https\://github\.com/ansible\-collections/community\.general/pull/7501](https\://github\.com/ansible\-collections/community\.general/pull/7501)\)\.
-* pipx module utils \- change the CLI argument formatter for the <code>pip\_args</code> 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)\)\.
-
-<a id="v8-0-1"></a>
-## v8\.0\.1
-
-<a id="release-summary-7"></a>
-### Release Summary
-
-Bugfix release for inclusion in Ansible 9\.0\.0b1\.
-
-<a id="bugfixes-7"></a>
-### Bugfixes
-
-* gitlab\_group\_members \- fix gitlab constants call in <code>gitlab\_group\_members</code> module \([https\://github\.com/ansible\-collections/community\.general/issues/7467](https\://github\.com/ansible\-collections/community\.general/issues/7467)\)\.
-* gitlab\_project\_members \- fix gitlab constants call in <code>gitlab\_project\_members</code> 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 <code>gitlab\_protected\_branches</code> 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 <code>gitlab\_user</code> module \([https\://github\.com/ansible\-collections/community\.general/issues/7467](https\://github\.com/ansible\-collections/community\.general/issues/7467)\)\.
-* 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)\)\.
-* redfish\_command \- fix usage of message parsing in <code>SimpleUpdate</code> and <code>MultipartHTTPPushUpdate</code> commands to treat the lack of a <code>MessageId</code> 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)\)\.
-
-<a id="v8-0-0"></a>
-## v8\.0\.0
-
-<a id="release-summary-8"></a>
-### Release Summary
-
-This is release 8\.0\.0 of <code>community\.general</code>\, released on 2023\-11\-01\.
-
-<a id="minor-changes-6"></a>
-### Minor Changes
-
-* 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 <code>VarDict\.as\_dict\(\)</code> to convert to a plain <code>dict</code> 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 <code>\.rpm</code> path when verifying
- installation success\. Allows installing packages from local <code>\.rpm</code> files
- \([https\://github\.com/ansible\-collections/community\.general/pull/7396](https\://github\.com/ansible\-collections/community\.general/pull/7396)\)\.
-* cargo \- add option <code>executable</code>\, 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 <code>locked</code> 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 <code>disable\_root\_check</code> 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 <code>exclude\_mgmt\_classes</code> and <code>include\_mgmt\_classes</code> 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 <code>inventory\_hostname</code> 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 <code>want\_ip\_addresses</code> 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 <code>cobbler\_ipv4\_address</code> and IPv6 address to <code>cobbler\_ipv6\_address</code> 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 <code>python\-consul</code> library to communicate with the Consul API\, instead relying on the existing <code>requests</code> 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 <code>dnf</code> python module is not available in <code>ansible\_python\_interpreter</code> \([https\://github\.com/ansible\-collections/community\.general/pull/6522](https\://github\.com/ansible\-collections/community\.general/pull/6522)\)\.
-* cpanm \- minor refactor when creating the <code>CmdRunner</code> object \([https\://github\.com/ansible\-collections/community\.general/pull/7231](https\://github\.com/ansible\-collections/community\.general/pull/7231)\)\.
-* datadog\_monitor \- adds <code>notification\_preset\_name</code>\, <code>renotify\_occurrences</code> and <code>renotify\_statuses</code> 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 <code>CmdRunner</code> to execute external command \([https\://github\.com/ansible\-collections/community\.general/pull/7075](https\://github\.com/ansible\-collections/community\.general/pull/7075)\)\.
-* filesystem \- add <code>uuid</code> 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 <code>force\_delete</code> \(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 <code>raw</code> 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 <code>raw</code> 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 <code>crypt\_scheme</code> is being renamed as <code>hash\_scheme</code> 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 <code>ip</code> 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 <code>ignore\_spaces</code> option \([https\://github\.com/ansible\-collections/community\.general/pull/7273](https\://github\.com/ansible\-collections/community\.general/pull/7273)\)\.
-* ini\_file \- add <code>modify\_inactive\_option</code> 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 <code>idp</code> choice to <code>ipauserauthtype</code> 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 <code>detach</code> 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 <code>time\_between\_checks</code> 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 <code>parents</code> \([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 <code>client\_cert</code> and <code>client\_key</code> 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 <code>page\_size</code> 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 <code>ModuleHelper</code> and <code>CmdRunner</code> \([https\://github\.com/ansible\-collections/community\.general/pull/6903](https\://github\.com/ansible\-collections/community\.general/pull/6903)\)\.
-* locale\_gen \- module now using <code>CmdRunner</code> to execute external commands \([https\://github\.com/ansible\-collections/community\.general/pull/6820](https\://github\.com/ansible\-collections/community\.general/pull/6820)\)\.
-* lvg \- add <code>active</code> and <code>inactive</code> values to the <code>state</code> 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 <code>reset\_vg\_uuid</code>\, <code>reset\_pv\_uuid</code> 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 <code>remote\_addr</code> option \([https\://github\.com/ansible\-collections/community\.general/pull/7373](https\://github\.com/ansible\-collections/community\.general/pull/7373)\)\.
-* lxd connection plugin \- automatically translate <code>remote\_addr</code> 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 <code>server\_cert</code> 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 <code>server\_check\_hostname</code> 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 <code>targets</code> parameter allowing multiple targets to be used with <code>make</code> \([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 <code>params</code> 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 <code>mas account</code> 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 <code>app\_name\_exact\_match</code>\, 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 <code>use\_arp\_ping</code> 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 <code>ipv4\.dns\-options</code> and <code>ipv6\.dns\-options</code> \([https\://github\.com/ansible\-collections/community\.general/pull/6902](https\://github\.com/ansible\-collections/community\.general/pull/6902)\)\.
-* nomad\_job\, nomad\_job\_info \- add <code>port</code> 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 <code>CmdRunner</code> 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 <code>account\_id</code> 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 <code>account\_id</code> 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 <code>executable</code> parameter allowing to specify the path of the <code>opkg</code> command \([https\://github\.com/ansible\-collections/community\.general/pull/6862](https\://github\.com/ansible\-collections/community\.general/pull/6862)\)\.
-* opkg \- remove default value <code>\"\"</code> for parameter <code>force</code> 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 <code>\-\-fix</code> 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 <code>validate\_certs</code> 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 <code>vmid</code> \(and <code>taskid</code> 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 <code>timezone</code> 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 <code>tpmstate0</code> 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 <code>force</code> 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 <code>timeout</code> module param to forcefully shutdown a virtual machine when <code>state</code> is <code>stopped</code> \([https\://github\.com/ansible\-collections/community\.general/issues/6257](https\://github\.com/ansible\-collections/community\.general/issues/6257)\)\.
-* proxmox\_snap \- add <code>retention</code> 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 \- <code>node</code> 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 <code>ignore\_similar\_chars</code> and <code>similar\_chars</code> 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 <code>MultipartHTTPPushUpdate</code> 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 <code>account\_types</code> and <code>oem\_account\_types</code> as optional inputs to <code>AddUser</code> \([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 <code>update\_oem\_params</code> for the <code>MultipartHTTPPushUpdate</code> command \([https\://github\.com/ansible\-collections/community\.general/issues/7331](https\://github\.com/ansible\-collections/community\.general/issues/7331)\)\.
-* redfish\_config \- add <code>CreateVolume</code> 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 <code>DeleteAllVolumes</code> 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 <code>SetSecureBoot</code> command \([https\://github\.com/ansible\-collections/community\.general/pull/7129](https\://github\.com/ansible\-collections/community\.general/pull/7129)\)\.
-* redfish\_info \- add <code>AccountTypes</code> and <code>OEMAccountTypes</code> to the output of <code>ListUsers</code> \([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 <code>GetBiosRegistries</code> command \([https\://github\.com/ansible\-collections/community\.general/pull/7144](https\://github\.com/ansible\-collections/community\.general/pull/7144)\)\.
-* redfish\_info \- adds <code>LinkStatus</code> to NIC inventory \([https\://github\.com/ansible\-collections/community\.general/pull/7318](https\://github\.com/ansible\-collections/community\.general/pull/7318)\)\.
-* redfish\_info \- adds <code>ProcessorArchitecture</code> 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 <code>GetVolumeInventory</code>\, 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 <code>Id</code> in the output of <code>GetManagerInventory</code> \([https\://github\.com/ansible\-collections/community\.general/pull/7140](https\://github\.com/ansible\-collections/community\.general/pull/7140)\)\.
-* redfish\_utils \- use <code>Controllers</code> 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 <code>PowerCycle</code> reset type for <code>redfish\_command</code> 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 <code>\@odata\.nextLink</code> pagination in <code>software\_inventory</code> 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 <code>Volumes</code> in response for <code>GetDiskInventory</code> \([https\://github\.com/ansible\-collections/community\.general/pull/6819](https\://github\.com/ansible\-collections/community\.general/pull/6819)\)\.
-* redhat\_subscription \- the internal <code>RegistrationBase</code> class was folded
- into the other internal <code>Rhsm</code> 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 <code>subscription\-manager</code> 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 <code>subscription\-manager</code> was
- refactored by grouping things together\, removing unused bits\, and hardening
- the way it is run\; also\, the parsing of <code>subscription\-manager repos \-\-list</code>
- 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 <code>shutdown \-p \.\.\.</code> 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 <code>dangerous</code> to the module\, that will map into the command line argument <code>\-\-dangerous</code>\, 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 <code>stop\_before\_removing\=true</code> \([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 <code>fetch\_secret\_ids\_from\_folder</code> 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 <code>secret\_path</code> 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 <code>check\_mode\_markers</code> 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 <code>VarDict</code> \([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)\)\.
+<a id="callback"></a>
+#### Callback
-<a id="breaking-changes--porting-guide"></a>
-### Breaking Changes / Porting Guide
+* community\.general\.default\_without\_diff \- The default ansible callback without diff output\.
+* community\.general\.timestamp \- Adds simple timestamp for each header\.
-* 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 <code>default\_branch</code> support for project update\. If you used the module so far with <code>default\_branch</code> to update a project\, the value of <code>default\_branch</code> 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 \- <code>VarDict</code> will no longer accept variables named <code>\_var</code>\, <code>get\_meta</code>\, and <code>as\_dict</code> \([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)\)\.
+<a id="connection"></a>
+#### Connection
-<a id="deprecated-features-2"></a>
-### Deprecated Features
+* community\.general\.incus \- Run tasks in Incus instances via the Incus CLI\.
-* CmdRunner module utils \- deprecate <code>cmd\_runner\_fmt\.as\_default\_type\(\)</code> formatter \([https\://github\.com/ansible\-collections/community\.general/pull/6601](https\://github\.com/ansible\-collections/community\.general/pull/6601)\)\.
-* MH VarsMixin module utils \- deprecates <code>VarsMixin</code> and supporting classes in favor of plain <code>vardict</code> module util \([https\://github\.com/ansible\-collections/community\.general/pull/6649](https\://github\.com/ansible\-collections/community\.general/pull/6649)\)\.
-* ansible\_galaxy\_install \- the <code>ack\_ansible29</code> and <code>ack\_min\_ansiblecore211</code> 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 <code>ack\_params\_state\_absent</code> 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 <code>compatibility</code> is deprecated as default for parameter <code>mode</code> \([https\://github\.com/ansible\-collections/community\.general/pull/6512](https\://github\.com/ansible\-collections/community\.general/pull/6512)\)\.
-* ejabberd\_user \- deprecate the parameter <code>logging</code> 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 <code>proxmox\_default\_behavior</code> 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 <code>proxmox\_default\_behavior</code> \([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 <code>10</code> for the <code>timeout</code> option is deprecated and will change to <code>60</code> 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 <code>module\_utils\.redhat</code> module is deprecated\, as
- effectively unused\: the <code>Rhsm</code>\, <code>RhsmPool</code>\, and <code>RhsmPools</code> classes
- will be removed in community\.general 9\.0\.0\; the <code>RegistrationBase</code> class
- will be removed in community\.general 10\.0\.0 together with the
- <code>rhn\_register</code> module\, as it is the only user of this class\; this means
- that the whole <code>module\_utils\.redhat</code> 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 <code>autosubscribe</code> alias for the <code>auto\_attach</code> 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 <code>pool</code> option is deprecated in favour of the
- more precise and flexible <code>pool\_ids</code> option
- \([https\://github\.com/ansible\-collections/community\.general/pull/6650](https\://github\.com/ansible\-collections/community\.general/pull/6650)\)\.
-* rhsm\_repository \- <code>state\=present</code> 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
- <code>present</code> and <code>absent</code> values of the <code>state</code> 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)\)\.
+<a id="filter"></a>
+#### Filter
-<a id="removed-features-previously-deprecated"></a>
-### Removed Features \(previously deprecated\)
+* 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\.
-* 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 <code>state\=absent</code>\, the options <code>script</code>\, <code>ttl</code>\, <code>tcp</code>\, <code>http</code>\, and <code>interval</code> can no longer be specified \([https\://github\.com/ansible\-collections/community\.general/pull/7358](https\://github\.com/ansible\-collections/community\.general/pull/7358)\)\.
-* gconftool2 \- <code>state\=get</code> has been removed\. Use the module <code>community\.general\.gconftool2\_info</code> 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 <code>access\_level</code> option\. To restore the previous behavior\, explicitly set it to <code>ref\_protected</code> \([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 \- <code>state\=list</code> has been removed\. Use the module <code>community\.general\.manageiq\_policies\_info</code> instead \([https\://github\.com/ansible\-collections/community\.general/pull/7358](https\://github\.com/ansible\-collections/community\.general/pull/7358)\)\.
-* manageiq\_tags \- <code>state\=list</code> has been removed\. Use the module <code>community\.general\.manageiq\_tags\_info</code> 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 <code>ArgFormat</code> 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 <code>CmdMixin</code> mixin has been removed\. Use <code>community\.general\.plugins\.module\_utils\.cmd\_runner\.CmdRunner</code> 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 <code>CmdModuleHelper</code> and <code>CmdStateModuleHelper</code> classes have been removed\. Use <code>community\.general\.plugins\.module\_utils\.cmd\_runner\.CmdRunner</code> 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 <code>disable\_facts</code> option was removed \([https\://github\.com/ansible\-collections/community\.general/pull/7358](https\://github\.com/ansible\-collections/community\.general/pull/7358)\)\.
-
-<a id="bugfixes-8"></a>
-### Bugfixes
+<a id="lookup"></a>
+#### Lookup
-* 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 <code>notes</code> \([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 <code>argument\_spec</code> has no type\, meaning it is implicitly a <code>str</code>\, <code>CmdRunner</code> would fail trying to find the <code>type</code> 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 <code>working\_dir</code> dependent commands\. The module was throwing an error when trying to run a <code>working\_dir</code> dependent command\, because it tried to get the command help without passing the <code>working\_dir</code> \([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 <code>rrule</code> 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 <code>ejabberdctl</code> 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 <code>None</code> values to remediate this \([https\://github\.com/ansible\-collections/community\.general/pull/6712](https\://github\.com/ansible\-collections/community\.general/pull/6712)\)\.
-* gitlab\_group\_variable \- deleted all variables when used with <code>purge\=true</code> due to missing <code>raw</code> property in KNOWN attributes \([https\://github\.com/ansible\-collections/community\.general/issues/7250](https\://github\.com/ansible\-collections/community\.general/issues/7250)\)\.
-* gitlab\_project\_variable \- deleted all variables when used with <code>purge\=true</code> due to missing <code>raw</code> property in KNOWN attributes \([https\://github\.com/ansible\-collections/community\.general/issues/7250](https\://github\.com/ansible\-collections/community\.general/issues/7250)\)\.
-* 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 <code>follow</code> 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 <code>http\_agent</code>\, <code>timeout</code>\, and <code>validate\_certs</code> <code>open\_url\(\)</code> parameters \([https\://github\.com/ansible\-collections/community\.general/pull/7067](https\://github\.com/ansible\-collections/community\.general/pull/7067)\)\.
-* keycloak module utils \- fix <code>is\_struct\_included</code> 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 <code>get\_user\_by\_username</code> now return the user representation or <code>None</code> 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 <code>base64\_attributes</code> 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 <code>C\.UTF\-8</code> \([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 <code>remote\_addr</code> defaulting to <code>inventory\_hostname</code> 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 <code>require\_tty</code> 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 <code>maxsplit</code> 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 <code>get\_option</code> calls \([https\://github\.com/ansible\-collections/community\.general/pull/7323](https\://github\.com/ansible\-collections/community\.general/pull/7323)\)\.
-* nmap inventory plugin \- now uses <code>get\_option</code> 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 <code>xmit\_hash\_policy</code> \([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 <code>list index out of range</code> exception \([https\://github\.com/ansible\-collections/community\.general/issues/836](https\://github\.com/ansible\-collections/community\.general/issues/836)\)\.
-* 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 <code>Can\'t find</code> 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 <code>yay</code> running as <code>root</code> \([https\://github\.com/ansible\-collections/community\.general/pull/6713](https\://github\.com/ansible\-collections/community\.general/pull/6713)\)\.
-* portage \- fix <code>changed\_use</code> and <code>newuse</code> 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 <code>template</code> 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 <code>token\_name</code> and <code>token\_value</code> 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 <code>cdrom</code> media due to <code>size</code> always being appended \([https\://github\.com/ansible\-collections/community\.general/pull/6770](https\://github\.com/ansible\-collections/community\.general/pull/6770)\)\.
-* proxmox\_kvm \- <code>absent</code> state with <code>force</code> specified failed to stop the VM due to the <code>timeout</code> value not being passed to <code>stop\_vm</code> \([https\://github\.com/ansible\-collections/community\.general/pull/6827](https\://github\.com/ansible\-collections/community\.general/pull/6827)\)\.
-* proxmox\_kvm \- <code>restarted</code> state did not actually restart a VM in some VM configurations\. The state now uses the Proxmox reboot endpoint instead of calling the <code>stop\_vm</code> and <code>start\_vm</code> 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 <code>name</code> option is provided without <code>vmid</code> 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\_tasks\_info \- remove <code>api\_user</code> \+ <code>api\_password</code> constraint from <code>required\_together</code> as it causes to require <code>api\_password</code> 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 <code>requests\_toolbelt</code> 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\_info \- fix <code>ListUsers</code> 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 <code>consumer\_type</code>
- \([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 <code>purge</code> option\, the <code>repositories</code>
- 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 <code>TypeError</code> 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 <code>latest</code> in parameter <code>channel</code> 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 <code>\-\-\-</code> 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 <code>\-backend\-config</code> option double encapsulating with <code>shlex\_quote</code> 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 <code>fetch\_attachments\=true</code> \([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)\)\.
-
-<a id="known-issues"></a>
-### Known Issues
-
-* 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)\)\.
-
-<a id="new-plugins-3"></a>
-### New Plugins
+* community\.general\.github\_app\_access\_token \- Obtain short\-lived Github App Access tokens\.
+* community\.general\.onepassword\_doc \- Fetch documents stored in 1Password\.
-<a id="lookup-2"></a>
-#### Lookup
+<a id="test"></a>
+#### Test
-* bitwarden\_secrets\_manager \- Retrieve secrets from Bitwarden Secrets Manager
+* community\.general\.fqdn\_valid \- Validates fully\-qualified domain names against RFC 1123\.
-<a id="new-modules-6"></a>
+<a id="new-modules"></a>
### New Modules
-* consul\_policy \- Manipulate Consul policies
-* consul\_role \- Manipulate Consul roles
-* facter\_facts \- Runs the discovery program C\(facter\) on the remote system and return Ansible facts
-* gio\_mime \- Set default handler for MIME type\, for applications using Gnome GIO
-* gitlab\_instance\_variable \- Creates\, updates\, or deletes GitLab instance variables
-* gitlab\_merge\_request \- Create\, update\, or delete GitLab merge requests
-* jenkins\_build\_info \- Get information about Jenkins builds
-* keycloak\_authentication\_required\_actions \- Allows administration of Keycloak authentication required actions
-* keycloak\_authz\_custom\_policy \- Allows administration of Keycloak client custom Javascript policies via Keycloak API
-* keycloak\_authz\_permission \- Allows administration of Keycloak client authorization permissions via Keycloak API
-* keycloak\_authz\_permission\_info \- Query Keycloak client authorization permissions information
-* keycloak\_realm\_key \- Allows administration of Keycloak realm keys via Keycloak API
-* keycloak\_user \- Create and configure a user in Keycloak
-* lvg\_rename \- Renames LVM volume groups
-* pnpm \- Manage node\.js packages with pnpm
-* proxmox\_pool \- Pool management for Proxmox VE cluster
-* proxmox\_pool\_member \- Add or delete members from Proxmox VE cluster pools
-* proxmox\_vm\_info \- Retrieve information about one or more Proxmox VE virtual machines
-* simpleinit\_msb \- Manage services on Source Mage GNU/Linux
+* 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\.
diff --git a/ansible_collections/community/general/CHANGELOG.rst b/ansible_collections/community/general/CHANGELOG.rst
index 5a5a0cb7c..384bee747 100644
--- a/ansible_collections/community/general/CHANGELOG.rst
+++ b/ansible_collections/community/general/CHANGELOG.rst
@@ -4,174 +4,59 @@ Community General Release Notes
.. contents:: Topics
-This changelog describes changes after version 7.0.0.
+This changelog describes changes after version 8.0.0.
-v8.6.0
+v9.0.1
======
Release Summary
---------------
-Regular bugfix and features release.
+Bugfix release for inclusion in Ansible 10.0.0rc1.
Minor Changes
-------------
-- 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).
-
-Deprecated Features
--------------------
-
-- 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).
-
-Bugfixes
---------
-
-- 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 <packages>``, 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).
-
-New Modules
------------
-
-- keycloak_client_rolescope - Allows administration of Keycloak client roles scope to restrict the usage of certain roles to a other specific client applications.
-
-v8.5.0
-======
-
-Release Summary
----------------
-
-Regular feature and bugfix release with security fixes.
-
-Minor Changes
--------------
-
-- 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).
-
-Security Fixes
---------------
-
-- 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).
+- ansible_galaxy_install - minor refactor in the module (https://github.com/ansible-collections/community.general/pull/8413).
Bugfixes
--------
-- 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).
-
-New Modules
------------
-
-- usb_facts - Allows listing information about USB devices
-
-v8.4.0
+- 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).
+- 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).
+- 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).
+- 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).
+- 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_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).
+- 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).
+- 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).
+- 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).
+- 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).
+
+v9.0.0
======
Release Summary
---------------
-Regular bugfix and feature release.
+This is release 9.0.0 of ``community.general``, released on 2024-05-20.
Minor Changes
-------------
+- 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).
+- 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).
-- 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).
-
-Bugfixes
---------
-
-- 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).
-
-New Plugins
------------
-
-Callback
-~~~~~~~~
-
-- default_without_diff - The default ansible callback without diff output
-
-Filter
-~~~~~~
-
-- lists_difference - Difference of lists with a predictive order
-- lists_intersect - Intersection of lists with a predictive order
-- lists_symmetric_difference - Symmetric Difference of lists with a predictive order
-- lists_union - Union of lists with a predictive order
-
-New Modules
------------
-
-- gitlab_group_access_token - Manages GitLab group access tokens
-- gitlab_project_access_token - Manages GitLab project access tokens
-
-v8.3.0
-======
-
-Release Summary
----------------
-
-Regular bugfix and feature release.
-
-Minor Changes
--------------
-
+- 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).
@@ -179,532 +64,289 @@ Minor Changes
- 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).
-- redfish_info - add command ``GetServiceIdentification`` to get service identification (https://github.com/ansible-collections/community.general/issues/7882).
-- terraform - add support for ``diff_mode`` for terraform resource_changes (https://github.com/ansible-collections/community.general/pull/7896).
-
-Deprecated Features
--------------------
-
-- 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).
-
-Bugfixes
---------
-
-- 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).
-- 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).
-
-New Modules
------------
-
-- consul_acl_bootstrap - Bootstrap ACLs in Consul
-- consul_auth_method - Manipulate Consul auth methods
-- consul_binding_rule - Manipulate Consul binding rules
-- consul_token - Manipulate Consul tokens
-- gitlab_label - Creates/updates/deletes GitLab Labels belonging to project or group.
-- gitlab_milestone - Creates/updates/deletes GitLab Milestones belonging to project or group
-
-v8.2.0
-======
-
-Release Summary
----------------
-
-Regular bugfix and feature release.
-
-Minor Changes
--------------
-
-- 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).
-- 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).
-- 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).
-
-Bugfixes
---------
-
-- 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).
-- 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).
-
-New Plugins
------------
-
-Connection
-~~~~~~~~~~
-
-- incus - Run tasks in Incus instances via the Incus CLI.
-
-Filter
-~~~~~~
-
-- from_ini - Converts INI text input into a dictionary
-- to_ini - Converts a dictionary to the INI file format
-
-Lookup
-~~~~~~
-
-- github_app_access_token - Obtain short-lived Github App Access tokens
-
-New Modules
------------
-
-- dnf_config_manager - Enable or disable dnf repositories using config-manager
-- keycloak_component_info - Retrive component info in Keycloak
-- keycloak_realm_rolemapping - Allows administration of Keycloak realm role mappings into groups with the Keycloak API
-- proxmox_node_info - Retrieve information about one or more Proxmox VE nodes
-- proxmox_storage_contents_info - List content from a Proxmox VE storage
-
-v8.1.0
-======
-
-Release Summary
----------------
-
-Regular bugfix and feature release.
-
-Minor Changes
--------------
-
-- 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).
+- 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).
+
+Breaking Changes / Porting Guide
+--------------------------------
+
+- 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).
+
+Deprecated Features
+-------------------
+
+- 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).
+
+Removed Features (previously deprecated)
+----------------------------------------
+
+- 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).
+
+Security Fixes
+--------------
+
+- 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).
Bugfixes
--------
+- 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 <packages>``, 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).
+- 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_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 - 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).
+- 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).
- 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 - 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).
- 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).
+- 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).
+- 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).
+- 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).
New Plugins
-----------
-Lookup
+Become
~~~~~~
-- onepassword_doc - Fetch documents stored in 1Password
-
-Test
-~~~~
-
-- fqdn_valid - Validates fully-qualified domain names against RFC 1123
-
-New Modules
------------
-
-- git_config_info - Read git configuration
-- gitlab_issue - Create, update, or delete GitLab issues
-- nomad_token - Manage Nomad ACL tokens
-
-v8.0.2
-======
-
-Release Summary
----------------
-
-Bugfix release for inclusion in Ansible 9.0.0rc1.
-
-Bugfixes
---------
-
-- ocapi_utils, oci_utils, redfish_utils module utils - replace ``type()`` calls with ``isinstance()`` calls (https://github.com/ansible-collections/community.general/pull/7501).
-- 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).
+- community.general.run0 - Systemd's run0.
-v8.0.1
-======
-
-Release Summary
----------------
-
-Bugfix release for inclusion in Ansible 9.0.0b1.
-
-Bugfixes
---------
-
-- gitlab_group_members - fix gitlab constants call in ``gitlab_group_members`` module (https://github.com/ansible-collections/community.general/issues/7467).
-- 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_user - fix gitlab constants call in ``gitlab_user`` module (https://github.com/ansible-collections/community.general/issues/7467).
-- proxmox_pool_member - absent state for type VM did not delete VMs from the pools (https://github.com/ansible-collections/community.general/pull/7464).
-- 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).
-
-v8.0.0
-======
-
-Release Summary
----------------
-
-This is release 8.0.0 of ``community.general``, released on 2023-11-01.
-
-Minor Changes
--------------
-
-- 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).
-
-Breaking Changes / Porting Guide
---------------------------------
-
-- 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).
-
-Deprecated Features
--------------------
-
-- 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).
-- 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).
+Callback
+~~~~~~~~
-Removed Features (previously deprecated)
-----------------------------------------
+- community.general.default_without_diff - The default ansible callback without diff output.
+- community.general.timestamp - Adds simple timestamp for each header.
-- 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).
+Connection
+~~~~~~~~~~
-Bugfixes
---------
+- community.general.incus - Run tasks in Incus instances via the Incus CLI.
-- 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_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_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).
-- 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).
-- 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).
-- 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_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_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).
-
-Known Issues
-------------
-
-- 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).
+Filter
+~~~~~~
-New Plugins
------------
+- 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.
Lookup
~~~~~~
-- bitwarden_secrets_manager - Retrieve secrets from Bitwarden Secrets Manager
+- 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
-----------
-- consul_policy - Manipulate Consul policies
-- consul_role - Manipulate Consul roles
-- facter_facts - Runs the discovery program C(facter) on the remote system and return Ansible facts
-- gio_mime - Set default handler for MIME type, for applications using Gnome GIO
-- gitlab_instance_variable - Creates, updates, or deletes GitLab instance variables
-- gitlab_merge_request - Create, update, or delete GitLab merge requests
-- jenkins_build_info - Get information about Jenkins builds
-- keycloak_authentication_required_actions - Allows administration of Keycloak authentication required actions
-- keycloak_authz_custom_policy - Allows administration of Keycloak client custom Javascript policies via Keycloak API
-- keycloak_authz_permission - Allows administration of Keycloak client authorization permissions via Keycloak API
-- keycloak_authz_permission_info - Query Keycloak client authorization permissions information
-- keycloak_realm_key - Allows administration of Keycloak realm keys via Keycloak API
-- keycloak_user - Create and configure a user in Keycloak
-- lvg_rename - Renames LVM volume groups
-- pnpm - Manage node.js packages with pnpm
-- proxmox_pool - Pool management for Proxmox VE cluster
-- proxmox_pool_member - Add or delete members from Proxmox VE cluster pools
-- proxmox_vm_info - Retrieve information about one or more Proxmox VE virtual machines
-- simpleinit_msb - Manage services on Source Mage GNU/Linux
+- 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.
diff --git a/ansible_collections/community/general/CONTRIBUTING.md b/ansible_collections/community/general/CONTRIBUTING.md
index 199e90c5b..5363b4dac 100644
--- a/ansible_collections/community/general/CONTRIBUTING.md
+++ b/ansible_collections/community/general/CONTRIBUTING.md
@@ -31,7 +31,9 @@ Also, consider taking up a valuable, reviewed, but abandoned pull request which
* Try committing your changes with an informative but short commit message.
* Do not squash your commits and force-push to your branch if not needed. Reviews of your pull request are much easier with individual commits to comprehend the pull request history. All commits of your pull request branch will be squashed into one commit by GitHub upon merge.
* Do not add merge commits to your PR. The bot will complain and you will have to rebase ([instructions for rebasing](https://docs.ansible.com/ansible/latest/dev_guide/developing_rebasing.html)) to remove them before your PR can be merged. To avoid that git automatically does merges during pulls, you can configure it to do rebases instead by running `git config pull.rebase true` inside the repository checkout.
-* Make sure your PR includes a [changelog fragment](https://docs.ansible.com/ansible/devel/community/development_process.html#creating-changelog-fragments). (You must not include a fragment for new modules or new plugins. Also you shouldn't include one for docs-only changes. If you're not sure, simply don't include one, we'll tell you whether one is needed or not :) )
+* Make sure your PR includes a [changelog fragment](https://docs.ansible.com/ansible/devel/community/collection_development_process.html#creating-a-changelog-fragment).
+ * You must not include a fragment for new modules or new plugins. Also you shouldn't include one for docs-only changes. (If you're not sure, simply don't include one, we'll tell you whether one is needed or not :) )
+ * Please always include a link to the pull request itself, and if the PR is about an issue, also a link to the issue. Also make sure the fragment ends with a period, and begins with a lower-case letter after `-`. (Again, if you don't do this, we'll add suggestions to fix it, so don't worry too much :) )
* Avoid reformatting unrelated parts of the codebase in your PR. These types of changes will likely be requested for reversion, create additional work for reviewers, and may cause approval to be delayed.
You can also read [our Quick-start development guide](https://github.com/ansible/community-docs/blob/main/create_pr_quick_start_guide.rst).
diff --git a/ansible_collections/community/general/FILES.json b/ansible_collections/community/general/FILES.json
index cbe1d8808..87fdd5c9a 100644
--- a/ansible_collections/community/general/FILES.json
+++ b/ansible_collections/community/general/FILES.json
@@ -109,7 +109,7 @@
"name": ".azure-pipelines/azure-pipelines.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "370fe873607691433d32772c07c53712f66f3745026442838d9d7ca9af953e48",
+ "chksum_sha256": "48eb26e372a37363159b6a17ba403c830d01c2cb29c106bfa8e9748ad534ff50",
"format": 1
},
{
@@ -165,7 +165,7 @@
"name": ".github/workflows/ansible-test.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ef0a066aa753e5667b6b1d4e2887f13add9b692f6373bbac695bcbe43e73e73f",
+ "chksum_sha256": "80d4eb6531dc8ba6970eb580ad0f0778f91177d100a99ebf29c93b09795338a1",
"format": 1
},
{
@@ -193,7 +193,7 @@
"name": ".github/BOTMETA.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5d44cab4aa242ff60409d95adf43c4be0bc3d4eace180b0f04da04bcf2d0e119",
+ "chksum_sha256": "95b932042b339875673fcbe218094b962576d3900511a041b9b7fb91a858e68c",
"format": 1
},
{
@@ -312,7 +312,7 @@
"name": "changelogs/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cc2e8e92892d291b60d26135122e9017acb600db7f386a6ccd71d77846436776",
+ "chksum_sha256": "0014fa74832def0e1d47b994b7aee9fbe393a30553ac051acc1f9a2ac886be6a",
"format": 1
},
{
@@ -326,7 +326,7 @@
"name": "changelogs/config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e207e9de9d07482a7e441694cf7228b7032639e7c85c56d5d9af454d3bf4e86f",
+ "chksum_sha256": "f2506c25332d5cf5120aa3ca826b2943747cf9d3d8848b7d1f26065f0ee84661",
"format": 1
},
{
@@ -802,7 +802,7 @@
"name": "meta/runtime.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7aed4acf161705fece142c2d79ed08c7a5fdf3239644406203cb494b2e74c7a2",
+ "chksum_sha256": "bdd7473e27902ea009dac03f604dd957a93413ee0275b561aff956ff26caf391",
"format": 1
},
{
@@ -865,7 +865,7 @@
"name": "plugins/become/machinectl.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec9263bc03779820095278c25e9ecbf9a0b8eaefbc8b3372d2f24750a6dd0169",
+ "chksum_sha256": "067c3f6db30dc27550874acab3dd46dcd7151d128a6902806d12febb582a9c0a",
"format": 1
},
{
@@ -890,6 +890,13 @@
"format": 1
},
{
+ "name": "plugins/become/run0.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "427a697d7ac599466ff675649f806c33a06fe94979dda516e27e3ebdbb454302",
+ "format": 1
+ },
+ {
"name": "plugins/become/sesu.py",
"ftype": "file",
"chksum_type": "sha256",
@@ -1068,7 +1075,7 @@
"name": "plugins/callback/opentelemetry.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "06ee85c4b296298fc04a5c1fc85408761c5e6c2c2be40fa1302a5148be6aaac4",
+ "chksum_sha256": "6eb005c02c46afa1b07d7d7861b54496d30ced27113f10b156719b3f151b3014",
"format": 1
},
{
@@ -1114,6 +1121,13 @@
"format": 1
},
{
+ "name": "plugins/callback/timestamp.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3c39c34c1071b004138605f290b4cd4da7a34023a6b551dcad2098f9da7deaa5",
+ "format": 1
+ },
+ {
"name": "plugins/callback/unixy.py",
"ftype": "file",
"chksum_type": "sha256",
@@ -1124,7 +1138,7 @@
"name": "plugins/callback/yaml.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "55f2e5bcd2ef0216231384b40ee1024cc827a71e1d79da82cf42208c5a94fa98",
+ "chksum_sha256": "1e51212b04fd709f1a7ad42c73757d8a68dd670a6d9bcc001faefc6cc83d7059",
"format": 1
},
{
@@ -1243,7 +1257,7 @@
"name": "plugins/doc_fragments/consul.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "16c9b8dc132b77db794a3a96cb75b44900671648edf7962e64f49f65b5b263f3",
+ "chksum_sha256": "04a5d36742f2d94f8e956eff66e36e9a50f915c9a03ae6e24b0a7a1ca8fb873c",
"format": 1
},
{
@@ -1261,6 +1275,13 @@
"format": 1
},
{
+ "name": "plugins/doc_fragments/django.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0836d2f746a8b62a1408455fdd54bcbd8f41342eb2f07a681b378b0efef5f3c8",
+ "format": 1
+ },
+ {
"name": "plugins/doc_fragments/emc.py",
"ftype": "file",
"chksum_type": "sha256",
@@ -1432,7 +1453,7 @@
"name": "plugins/doc_fragments/proxmox.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "37b7c45f450b785105492a38def5db93c9f37b75b00a0c0bc3c0cc6319e8e6bf",
+ "chksum_sha256": "daa7d15e8a1ffc6e4c539712099537ab9c0f667684d2bcf4ba89e196caf9e460",
"format": 1
},
{
@@ -1443,13 +1464,6 @@
"format": 1
},
{
- "name": "plugins/doc_fragments/rackspace.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cfca4c2528ec42c0f1c6ae9a67f6f4f76887dbbd44db5f5f1688ee49be5bdbe0",
- "format": 1
- },
- {
"name": "plugins/doc_fragments/redis.py",
"ftype": "file",
"chksum_type": "sha256",
@@ -1992,7 +2006,7 @@
"name": "plugins/lookup/merge_variables.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ad758294be13db2a7cf07d9fae8fb187e87f0875360d5c61d909f99d18f707f9",
+ "chksum_sha256": "51f19a61631b9c6932c81608694e5a0a044f7a9d953bda2c60aa7bbc74630eca",
"format": 1
},
{
@@ -2132,7 +2146,7 @@
"name": "plugins/module_utils/mh/mixins/deps.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3aaf0f3bee07c87b4e9108cb474bcb96b715bbad0e77f578987d71ce7fe8dbdf",
+ "chksum_sha256": "bdf853ce77b23f077e4db35e1db8a9f3698c8daa28f39703704e161ffeba1d8c",
"format": 1
},
{
@@ -2146,7 +2160,7 @@
"name": "plugins/module_utils/mh/mixins/vars.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a34c555587e819fa58b076b872b7d7ae05e129818a98b259ead8c4f1a2fbc733",
+ "chksum_sha256": "7bfa206ebd47e9170e6d445f2f4eb6158b4d671b9df038916a06515d97ca68fb",
"format": 1
},
{
@@ -2174,7 +2188,7 @@
"name": "plugins/module_utils/mh/module_helper.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f5070037ffb959097becab8baac019d21ee6fbb305f46f687977500fbcd5fa5f",
+ "chksum_sha256": "7cfecdcceb7062f7f4fec2037ac3cf1c25e1f102b58b5c14a48c281be46ef4d4",
"format": 1
},
{
@@ -2328,7 +2342,7 @@
"name": "plugins/module_utils/cmd_runner.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "62306950ca87a1a83c8e7bb6e3072609181175687ac02e4ad30de2481112b5e4",
+ "chksum_sha256": "9b9f5d0e0ed818b1bdc80e8a6a4a858ba23f92bcaf6d5b224073b4e4a5de1e4c",
"format": 1
},
{
@@ -2374,10 +2388,17 @@
"format": 1
},
{
+ "name": "plugins/module_utils/django.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "78e63b0a1b6304d42171f878bcb50bfd1ff96bfead0ba41220c0b43b6ad1f7cb",
+ "format": 1
+ },
+ {
"name": "plugins/module_utils/gandi_livedns_api.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "77ca8211234201bd301a6728b0e7943ddba5e1c946f8b4c603a1035527fc8ff9",
+ "chksum_sha256": "dd137070737fc1a2da7e03195defcc4a89f8ddb2bb774b7428ba495154ca880b",
"format": 1
},
{
@@ -2398,7 +2419,7 @@
"name": "plugins/module_utils/gitlab.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f0edcbd8ae4a68f9c003e48360e3c4247768a801e34580ed035d04f15d6857a4",
+ "chksum_sha256": "8fc9d765547b03fd9a9902aea741cb6e093f9e31ef621136da55ea5d5218e5ce",
"format": 1
},
{
@@ -2409,6 +2430,13 @@
"format": 1
},
{
+ "name": "plugins/module_utils/homebrew.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4b44f82f141fcc6094b883a2837acb107ba9bf1712c8bf9ec1058f8da65ac888",
+ "format": 1
+ },
+ {
"name": "plugins/module_utils/hwc_utils.py",
"ftype": "file",
"chksum_type": "sha256",
@@ -2503,7 +2531,7 @@
"name": "plugins/module_utils/module_helper.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7eb6f642db5f83ec87a06e04f8d62436a9eec0058cff531cdebf20865c571b09",
+ "chksum_sha256": "cf731e21c346c5c06726b4610c8c55c5833c92491f8659dab7515b267291a901",
"format": 1
},
{
@@ -2566,7 +2594,7 @@
"name": "plugins/module_utils/puppet.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d0c7e2106d6247342b11f2de422240b828a122acd98d9c4ffe5b91899b8893ff",
+ "chksum_sha256": "6d7a9eff010096b299b458427dc2e20a6c0be50527a1f32b9f7ba621e16134da",
"format": 1
},
{
@@ -2577,10 +2605,10 @@
"format": 1
},
{
- "name": "plugins/module_utils/rax.py",
+ "name": "plugins/module_utils/python_runner.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "80bd4c38be7acfedc8542a541c753c87753b249419e06eb20c13884e643408b3",
+ "chksum_sha256": "17e95f6bb431a79a1383d0e29d14cf11a1a4e18ef32af51fb62e62b5831fb4db",
"format": 1
},
{
@@ -2594,7 +2622,7 @@
"name": "plugins/module_utils/redhat.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "43b96c1bce480ed6f9ed9d2a9aafed370295838ed6e5c235e0b7ca3381baf5aa",
+ "chksum_sha256": "29dd2363092ce6ae24719c3c1b442012ea9b75fb07b1dcc099b71aff1467cd7f",
"format": 1
},
{
@@ -2608,7 +2636,7 @@
"name": "plugins/module_utils/rundeck.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0718e463e10a42f9ded1851f689829e05f101ed42888f1abb5c058a90a52fe7e",
+ "chksum_sha256": "f783c1667e85f96c15841bebca24d26da30fc4e31ba647ba8235da209f7bf27b",
"format": 1
},
{
@@ -2657,7 +2685,7 @@
"name": "plugins/module_utils/vardict.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d784bdbf44eb700303730e03a0c0082dcdd52c65c076bbdb5088eb79d556c4a2",
+ "chksum_sha256": "18eca4737619cdceeca1743bb2b0df8d350484fbec5c45decd5bbd5a1bff005e",
"format": 1
},
{
@@ -2748,7 +2776,7 @@
"name": "plugins/modules/aix_lvol.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0e9cb99ceb284742b25feb71e5a105881cf8a31d5601e09dc7666106337b5449",
+ "chksum_sha256": "bbedcb9530c08fc7f9e7fd2e3344da447c1ed3268e6ad9a0aed8da88372b5f85",
"format": 1
},
{
@@ -2783,7 +2811,7 @@
"name": "plugins/modules/ansible_galaxy_install.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b69574b683937c5b7dbc4d541886fb370d8942f0d37c26bfee469456414d8022",
+ "chksum_sha256": "7d6e02e1a7306d048c97e5e9f2e5553fe8ece50ded61a39f014af2fecd51da2a",
"format": 1
},
{
@@ -2818,7 +2846,7 @@
"name": "plugins/modules/apt_rpm.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f0570e79b53c66ebfb69e175ff0edb87f3ea9c10ce4efc791ed0720644459350",
+ "chksum_sha256": "87b7c57c6799012635a126204e30cb04d843d6ee13a5c73e2e4ae2d4bbb78bc3",
"format": 1
},
{
@@ -2923,7 +2951,7 @@
"name": "plugins/modules/btrfs_subvolume.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ef8b5869c7b17e906409346ace86ccba1686bccea5f4f7ae90c7d40744b9fcce",
+ "chksum_sha256": "e3453e87bb110f6d223d4fc3e1603707d6be96e29436274d09b44b0466a81e5b",
"format": 1
},
{
@@ -3063,7 +3091,7 @@
"name": "plugins/modules/cloudflare_dns.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bfe75b2d6815280e55121b0958c219cca514b7d2498ad38b0bafd1ff3581dde1",
+ "chksum_sha256": "b31a62d880737f33437b2dbbc57286a9603ef9771fcdf1e7ec55ff8f6ede6baf",
"format": 1
},
{
@@ -3133,28 +3161,28 @@
"name": "plugins/modules/consul_policy.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9fde6fe3a216b54e45b2946d83bb3d377ad73c094ef0f11ae374b240272b36b2",
+ "chksum_sha256": "05fcd6bd9085bb781d7f9bdc8a808f1e63f493d018299ce3dcb6a8c7f89ae729",
"format": 1
},
{
"name": "plugins/modules/consul_role.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c4f9290e7af434c6f9431da4ebae95a5acf1857fcffe99340737e2748f3ebde2",
+ "chksum_sha256": "f18b68eab0c232b18fefe5d66164dfa49e4e9c11396616200e23b0774c98c5ae",
"format": 1
},
{
"name": "plugins/modules/consul_session.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bf47bd1c93f8b046b6b744eae2972a221f74b4c3ff79c3c9557c243ab1de8ce3",
+ "chksum_sha256": "81d9abf14083b0a074f1eb49bab6783a58c3b204260a93f4ca374557efc4b6d5",
"format": 1
},
{
"name": "plugins/modules/consul_token.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "209599b1c6016b6758413d349c547b3483d6adee030c39824e3fbb23753fdf20",
+ "chksum_sha256": "8572e2337ce15303534844ed997859fc6e26b3b5537ea80fbea280f1bfa17419",
"format": 1
},
{
@@ -3168,7 +3196,7 @@
"name": "plugins/modules/cpanm.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "876e283af86e02ac15cd33a266827b173a6537807fe0c1f7f6ae7c47f04a2f63",
+ "chksum_sha256": "6cdbd7b1b70e4313064f5a409c989c8a45eb43c91b8cc4413ef47d08c289238a",
"format": 1
},
{
@@ -3242,10 +3270,17 @@
"format": 1
},
{
+ "name": "plugins/modules/django_command.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2d3a5411d94f19ca456b07b87d15855f5f5a7e4f9689c26281dca8723f079c89",
+ "format": 1
+ },
+ {
"name": "plugins/modules/django_manage.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f4bb7005611249c174550fa37b5f889c610b2c9b43a91357a549212983518ed4",
+ "chksum_sha256": "de348d4b89f74e04e326b92e81679553f8cf4ae497af025cd7f986dca12af459",
"format": 1
},
{
@@ -3368,31 +3403,24 @@
"format": 1
},
{
- "name": "plugins/modules/flowdock.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "10c9409960f0d5596746d6452e62cc8e9061be52746eca51eded7acf4675c299",
- "format": 1
- },
- {
"name": "plugins/modules/gandi_livedns.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3f2c3fb34518d6c96b87de85eed6fe35dedd51f7a4296b92c0e900c216a5611d",
+ "chksum_sha256": "1fce07336b93fd15824223254e8728602ceb0767463fa1048f035d797373f396",
"format": 1
},
{
"name": "plugins/modules/gconftool2.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec975973c83bd7130c8fcf2b4176a9b28017e43448852a8b61464f1278f0dcab",
+ "chksum_sha256": "962a743f1dd645556dabba645f4471dc0327aa841576f814c1ee7c86a42d713b",
"format": 1
},
{
"name": "plugins/modules/gconftool2_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d720513958b1ce71503a8826fdd50e81c19c1fbbc19ac20f9164fe0841dcf212",
+ "chksum_sha256": "4665218f56e9722f3929c75b21ef668502a2521204e8b2684709838b425b1f6e",
"format": 1
},
{
@@ -3602,7 +3630,7 @@
"name": "plugins/modules/gitlab_runner.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "53194f5b56d5cf12630f312b1d8af77dd883d1910a50ae91577f5857e2de6f9c",
+ "chksum_sha256": "c5fd5ab6207b5b061fe8fee6d33db0f676590bae7b31e55bf45902b2cddb117a",
"format": 1
},
{
@@ -3658,14 +3686,14 @@
"name": "plugins/modules/homebrew.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "daf7098503d9cc6414a32fe5bf895506264c1dcb9bdd008842e111de5b0279d2",
+ "chksum_sha256": "98ae30cdc14eedb6c381c081a98dbb6ffc6ba2829f37d3315cb7c352c2607b37",
"format": 1
},
{
"name": "plugins/modules/homebrew_cask.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6f5750acbb0afa275d2564e270c28f6afe1202e337e50a0ea0403fafc5cbedfe",
+ "chksum_sha256": "d998aab283569425e1c9da2b2189808b7910da211508b3dda08aed5c7941b33f",
"format": 1
},
{
@@ -3707,7 +3735,7 @@
"name": "plugins/modules/hponcfg.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b8e6e150c96dad033824e7157cd1a31e079064f8e712af23815455e6377cfd61",
+ "chksum_sha256": "9063370c9a8f82e3b9d53519a01277cee764f057932c0fefa5da8ed35860f2bd",
"format": 1
},
{
@@ -3966,7 +3994,7 @@
"name": "plugins/modules/installp.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8c8d4f1272851b63589575bb29db5dca18627fab5f04c26e3917a14960ac2224",
+ "chksum_sha256": "fc3cabbbd25dd3bf4192b82391df7354146b5aadb199b3cf18c07c4a9c3c1613",
"format": 1
},
{
@@ -4162,7 +4190,7 @@
"name": "plugins/modules/irc.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "baf14942dc3f145739b1c8a666e9eb876d33eabfa552455a450c64e891a5f4fc",
+ "chksum_sha256": "f92ac90d9bbb3afe6eae306a71f32b618c42e254dabfa58b5f18a62701607f78",
"format": 1
},
{
@@ -4274,7 +4302,7 @@
"name": "plugins/modules/kernel_blacklist.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "587992974b9adf733a25ee79241b68786b1425efa422ad6d4cd6d75e4c3b3a2a",
+ "chksum_sha256": "b66b3cf5de6d10848b783e0df64104798ae86bf0ca8a307c86e8d71d02a4c50c",
"format": 1
},
{
@@ -4323,7 +4351,7 @@
"name": "plugins/modules/keycloak_client.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9065934124dc12b01077cd9c2caea2640c2f76a5d00541af2a1b1500cbbcba57",
+ "chksum_sha256": "7870103accbfbd0204f1b7adeee0e20b9a6b8cddad0edda0bd31ec252572f186",
"format": 1
},
{
@@ -4393,7 +4421,7 @@
"name": "plugins/modules/keycloak_identity_provider.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fdcb1beb383507dad083dd2ee7ede5f0fc1df884f8ae5548a0740b0cc4fdf5c2",
+ "chksum_sha256": "05f1030efe66d6f0a18689d63b22295169c31ab9a469b87088ef664706ea91cf",
"format": 1
},
{
@@ -4442,7 +4470,7 @@
"name": "plugins/modules/keycloak_user_federation.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1c7c871ab324312ba3730df9a30bd017220a89a09282d465ee6dbc234402181f",
+ "chksum_sha256": "935a9ded4d3ae8651ff215f28aa0d9e420a1643081b2c7d3e0fa6332b83eae84",
"format": 1
},
{
@@ -4519,7 +4547,7 @@
"name": "plugins/modules/ldap_search.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6d79f510a11d341738466cfbf4f59a6bda3d5bd4df45f3692b0653ab37d81946",
+ "chksum_sha256": "d4389e9402a1d367a1069c81319bbb6864f23cc9a6388922f04365eaeb002ce2",
"format": 1
},
{
@@ -4561,7 +4589,7 @@
"name": "plugins/modules/locale_gen.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "871d02439c640ec2f3ad62cae96a6093ffbb27d87bf80bb4638bdb2688fb32e6",
+ "chksum_sha256": "66fcfb84b3417d52cb1fc54cd6fde1bfa3d0ecdc6d4b9664b7a94099585e5976",
"format": 1
},
{
@@ -4589,7 +4617,7 @@
"name": "plugins/modules/lvg.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2b6d4d2fcc2a1b942dd81c4527ae89eef09e955f5f7dac84080741e3629c54a0",
+ "chksum_sha256": "8b55f99113f59765dc7d6a43eda0aca5f22190e4cf0d9685f705c1ea913441e5",
"format": 1
},
{
@@ -4603,7 +4631,7 @@
"name": "plugins/modules/lvol.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c1009f4bb6c0c892f867827fd64ac299c644b634ec838d9c52f2a9be0e0ab71d",
+ "chksum_sha256": "7c931526bbd16c65fe786369e791dfcbe453fdc581acd5da194385e2ec908586",
"format": 1
},
{
@@ -4631,7 +4659,7 @@
"name": "plugins/modules/lxd_container.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3421f907d434f83dd6a346507a607c5ad7cc0b727673b74badf5003841974b4d",
+ "chksum_sha256": "7291ced8278ab06dabee884b06aa37846ec6032bc1d45d00bf7e55e397ac513e",
"format": 1
},
{
@@ -4652,7 +4680,7 @@
"name": "plugins/modules/macports.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "488f95a9d1944fd4aab3aa6cbd32adb06d3727d01c371c9f5d7de00a47ad8fd2",
+ "chksum_sha256": "f40102fb67c8a753de76477793cab247c16e462533b35cba5641ffe1bab6c64d",
"format": 1
},
{
@@ -4813,7 +4841,7 @@
"name": "plugins/modules/mksysb.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "411a53424247600bae0a604ae3fecec02afb97d91283cd389e44310ab8a8d977",
+ "chksum_sha256": "53c173b29bdd8e2ef4ffc2d446a2330b7b20bb7ff0bce830892a3e778347705b",
"format": 1
},
{
@@ -5226,7 +5254,7 @@
"name": "plugins/modules/opkg.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6fafc31bdc0f356419069a1b9f7c4f56d7ea2ba5059eecf3ebda5989b314f8a3",
+ "chksum_sha256": "b30c69db03c0ee20399e242e050b00f90a2d80ba31ad0d20ced0ea15ce1870a7",
"format": 1
},
{
@@ -5366,7 +5394,7 @@
"name": "plugins/modules/parted.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d7a222fa387aae5a78895f665d587f84416ad11f90b049a6d08b4ad8eca1886a",
+ "chksum_sha256": "fcb7ec22fb13a7c15738a296120581204f2ead2fa63ab1736ef3938d74b932c3",
"format": 1
},
{
@@ -5401,21 +5429,21 @@
"name": "plugins/modules/pipx.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4c808a7b43647413be9b220f668517b0a0c263038c5c61e757af52b989942760",
+ "chksum_sha256": "e569818bfa803569a24e9a97033f369486f3119a84ce09343e59127729aa3c1c",
"format": 1
},
{
"name": "plugins/modules/pipx_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "85e936162c11a4fd2736b26644903c3533842d31d92c3a6161dc29ef0f36f3ed",
+ "chksum_sha256": "f92a24ebc20accf94de8b1b5dab13dc4387a71901fcf751dd48a6068bffd28b6",
"format": 1
},
{
"name": "plugins/modules/pkg5.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "64feebf19704a6c42841471d1b0cf4f398f7410361541c91d274a35d01813d43",
+ "chksum_sha256": "e6ad2a1d12ddb2f615609d086765f61a1b575ead60739434fc89477e8688ac87",
"format": 1
},
{
@@ -5429,7 +5457,7 @@
"name": "plugins/modules/pkgin.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1cf640944de02dc6028c8a0130bff6a3de7ee26a2dc6045b45950514e0bf8812",
+ "chksum_sha256": "243f01c0ed2ef3648375458f7949874ecb4ab89bd0ad824c84eff543ce5219e3",
"format": 1
},
{
@@ -5471,7 +5499,7 @@
"name": "plugins/modules/portinstall.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d0fff5d00287f10a07a7108260e747d3ea02eb79f3f56eba22bb382d9657f5fd",
+ "chksum_sha256": "542489c4dd465b6322717c244bce1d85819bdfc882176cd388ef5b5defae377f",
"format": 1
},
{
@@ -5541,112 +5569,112 @@
"name": "plugins/modules/proxmox.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cbaf13c0a56641888d956a3f66827656027362667c00a5da98cfd9fb9c53709c",
+ "chksum_sha256": "62c447303cb615080f4286576bc232c4afe5b20076efe92e9c2760d0fac13364",
"format": 1
},
{
"name": "plugins/modules/proxmox_disk.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7eaf98c0876bdf7959cf06e68dbe617c86dd61c45dd1614d86ced3a3b00c8a6e",
+ "chksum_sha256": "fa088e1c9c1b25860531667e2f7cb9b408fe605bc7cb4969d4c741ac6e1f41f7",
"format": 1
},
{
"name": "plugins/modules/proxmox_domain_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8c15c31af9b758101cd6598e626cc8245d01998205e24a36037e71ba212fbbb1",
+ "chksum_sha256": "74f66feaa8dae01d745fe0edc17bffe2d62f28007f93a738bdd6e877c46e3584",
"format": 1
},
{
"name": "plugins/modules/proxmox_group_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "35430f3908046b38ff12572e85bd305b0d477bbde47066fb522ee8984b3dafe4",
+ "chksum_sha256": "6a4ce8142e20132aae5b1eccda03bfbb5a059f783a9c8164161173890e4581db",
"format": 1
},
{
"name": "plugins/modules/proxmox_kvm.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c148eb6fca047327772da3210a9fe947c4a14fda1405836f0f4c3ffa58da5385",
+ "chksum_sha256": "030cd0ca64eb1eac59e15bd62ce58239e6466b01391a6abc314feff1c8a32614",
"format": 1
},
{
"name": "plugins/modules/proxmox_nic.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "52492a58319b75a634c109c5951be0f9fd1bfced0ac6ee97d00b103ab76087ff",
+ "chksum_sha256": "b65d963ab60b4ed6e0ac0e991c30b6e71fea0847a10e0e53e46e28d93b246f65",
"format": 1
},
{
"name": "plugins/modules/proxmox_node_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3f7053d278a05a60894b5cddb8091e09a27f6d6070b1f41282259cabb41960a1",
+ "chksum_sha256": "55d4166c1f372896d375efed2e0fdbaa415b9a5e410bb1b5db80816a6917ffeb",
"format": 1
},
{
"name": "plugins/modules/proxmox_pool.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "83e86f259c2483e804efbe2966ead9e2eb38b3e1007ff6420e647eb57c6e4e17",
+ "chksum_sha256": "199414912145e8ba5020db36acd042f619a3d313642f05bc30407f280d5c731f",
"format": 1
},
{
"name": "plugins/modules/proxmox_pool_member.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "77fdae49fd415dc3a8f88139a023bb2c2180d5d60f7b493aba9ddd25b3e6fb52",
+ "chksum_sha256": "d1c49690874a6774181bae82fbe9cbf34bfcdd9e71046db98e1dbccdc719c00e",
"format": 1
},
{
"name": "plugins/modules/proxmox_snap.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a79a064dc6522db3c959e678ae66e54e8fe113fa6cca38c379824f429a9230c2",
+ "chksum_sha256": "a1973a4724bff339c462cea5349ea7b8a5c191577cf2d18bbb6c3c19d022cf60",
"format": 1
},
{
"name": "plugins/modules/proxmox_storage_contents_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "207afdc6920a8da3a49b025dade19f6da69bccecee48ef4c1e8508c3baa3a509",
+ "chksum_sha256": "00e2d01f956ca77f3dfc9e5da347406feb15e05d634001972a16fb026263bf5c",
"format": 1
},
{
"name": "plugins/modules/proxmox_storage_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d860af5716ba13e1c0260dba4bcfb4e31d33c9c667063860565166d0ea766d72",
+ "chksum_sha256": "5f98b53b27f0b83b1a4752508981405948da2523892e150051e6fddeec9a09ee",
"format": 1
},
{
"name": "plugins/modules/proxmox_tasks_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "781bdf531b30904b52fde1a5da54433b2c812b6efed34ead3733149f7b16dfbf",
+ "chksum_sha256": "5df3ecdf411646f553a391b3e6c7ab0f4049fd13f96214451c6817c90b0daf23",
"format": 1
},
{
"name": "plugins/modules/proxmox_template.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9c24e106b6dbcfb6a8d5830b7240c6c39bf6959f56591d8ad21cf4023a3cedd6",
+ "chksum_sha256": "112bfc675f756efcca0e21ef96d1d6669e5bdfb31b44108d6f916bc6e19fd190",
"format": 1
},
{
"name": "plugins/modules/proxmox_user_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "085403351a23432173b41649b7bedd8653d48a4f690b427751f4ab09a99195d5",
+ "chksum_sha256": "ade5222d85a933e7cf8e26d08a5c51285b697aec7a83402f1e69ade3efbd7fc8",
"format": 1
},
{
"name": "plugins/modules/proxmox_vm_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4850ad8b78e13bee186bcb49d2e9682723b86ca3fbf4dfba67d4760fc14fdfca",
+ "chksum_sha256": "9bb1491ad5da16bd483f659726e5d99a29ac784a23f615244165ad4d9bde0120",
"format": 1
},
{
@@ -5667,7 +5695,7 @@
"name": "plugins/modules/puppet.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2e8fa36104ad52a85bcbfffadfe873b1dadf91eb5e9f5e1fe843e712ec972708",
+ "chksum_sha256": "4910c9548d2727ddeb25caf1c90a94a7bc99c98877d3042a00394ab59bf8351c",
"format": 1
},
{
@@ -5692,188 +5720,6 @@
"format": 1
},
{
- "name": "plugins/modules/rax.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d5d71364c01d578d124b4f7064cb0850562144e68bb8f8a62000132703cf2776",
- "format": 1
- },
- {
- "name": "plugins/modules/rax_cbs.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "be5f3f94c241633837d888da6abb20f1c54d204f0077147efba813a56f835906",
- "format": 1
- },
- {
- "name": "plugins/modules/rax_cbs_attachments.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "bb83467fd0fdaf72e0ecdb7ccfe67e73b365edeee122cb339f06718364ea1a50",
- "format": 1
- },
- {
- "name": "plugins/modules/rax_cdb.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1a761ea8d19fb0492b758b4408be987712f64078f367ad9fd1e00d434aaa5bc0",
- "format": 1
- },
- {
- "name": "plugins/modules/rax_cdb_database.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "83ad50782f35ed29183048e2e16655f14fa5178bef73537b5a08c641b4df9e15",
- "format": 1
- },
- {
- "name": "plugins/modules/rax_cdb_user.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "50013e448f5b9136937d1cb028de27da11b6e4a68621b3c10be61f0614f7fce6",
- "format": 1
- },
- {
- "name": "plugins/modules/rax_clb.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "da925aea1e07ae825b7bc40cc2e76feba747bfd173c3c6308c4a169b6a2f4230",
- "format": 1
- },
- {
- "name": "plugins/modules/rax_clb_nodes.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4a3dd3afe7a509edf5b1caedc8cb047c3b7493d5b3624a64735054df080c715c",
- "format": 1
- },
- {
- "name": "plugins/modules/rax_clb_ssl.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3832d09feaac166d5c2d13e974bef481a931398a016f492637036ce7eac1a4e8",
- "format": 1
- },
- {
- "name": "plugins/modules/rax_dns.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2538f8f54a408dd0874028a7af529c3405b537341e5b12cf813ad9c3ae3922fd",
- "format": 1
- },
- {
- "name": "plugins/modules/rax_dns_record.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "36e1fd0124f8aef93f7cff308588a7c3e31f13485ccc06a97a7a29b23e9d2f67",
- "format": 1
- },
- {
- "name": "plugins/modules/rax_facts.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ef7335464fa3a7419b240dfe9e686e2ef4492c066638afe2bec23f196deff45b",
- "format": 1
- },
- {
- "name": "plugins/modules/rax_files.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ea66624516f6e40f8e5325587ce6adfd5a7eed178d458952078fbc298e92191a",
- "format": 1
- },
- {
- "name": "plugins/modules/rax_files_objects.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "52860b588511beb773f68c0986529ab633a7480dc93ecb5e72db9d319b9f22e8",
- "format": 1
- },
- {
- "name": "plugins/modules/rax_identity.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6056f23c9de97fc542dd9a3d34153cb19bae33aa4b2748122efc19b091151e70",
- "format": 1
- },
- {
- "name": "plugins/modules/rax_keypair.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8ddbde316caea7e8d4471de2f0cf977b9a5095731f6904347fe254b97c8cdee8",
- "format": 1
- },
- {
- "name": "plugins/modules/rax_meta.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "096049737ae955b66423fd4b3d106c744002e83868dbe94ca5eb38f43cde5d78",
- "format": 1
- },
- {
- "name": "plugins/modules/rax_mon_alarm.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8faccb337eb09e5dd3d179227a4f21701fa3ffce159ce1398a65e49cc2f949ab",
- "format": 1
- },
- {
- "name": "plugins/modules/rax_mon_check.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "966510c6e07ecdc533ae86afe9aaa973f11554a0568766c158c5f77e118d7193",
- "format": 1
- },
- {
- "name": "plugins/modules/rax_mon_entity.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f64424b7cd32fafcafaeb1b4c04b33462c50131758d0a94feddee8b30e55c908",
- "format": 1
- },
- {
- "name": "plugins/modules/rax_mon_notification.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b4d41086547e52926f63bef2cf657e39bfe7a18609721e6ebb43f11fff33e5fa",
- "format": 1
- },
- {
- "name": "plugins/modules/rax_mon_notification_plan.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "626442facabc3ed149f70be592093e36c3e347ddf49a6c77b61316253a271b5a",
- "format": 1
- },
- {
- "name": "plugins/modules/rax_network.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "66f617814f7229b709e6cd393a18ff0c5e295b95e16395134b689b543bfe051b",
- "format": 1
- },
- {
- "name": "plugins/modules/rax_queue.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5d47ee58bb21549c6cf732396adca95150332637ddccbd647b6ef3a0804b80b3",
- "format": 1
- },
- {
- "name": "plugins/modules/rax_scaling_group.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8cb942ee1f1ea3ea1b45f3699ba09f3fb7827c1376fefefc6f6cd03635c42f64",
- "format": 1
- },
- {
- "name": "plugins/modules/rax_scaling_policy.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ee634c11356221ce4ee2b1f65b0d3b4b1faf5f7b4df612df10efd0c525053da6",
- "format": 1
- },
- {
"name": "plugins/modules/read_csv.py",
"ftype": "file",
"chksum_type": "sha256",
@@ -5884,28 +5730,28 @@
"name": "plugins/modules/redfish_command.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "38a449fe1a3ce5e62028e851bece4137f2f919f2ab6869f0fc23dc09dfd735f2",
+ "chksum_sha256": "3a06abd918e13f440dcd7bd66a1eae9d77a414aa80dc231eba9ddad2c3fc16d7",
"format": 1
},
{
"name": "plugins/modules/redfish_config.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dc243175c35ab4ffa2d385a92972533c5e1d8ab24060d991a4f9a0b8e850133b",
+ "chksum_sha256": "2a0bad42f9e2ab902beadeb55a1ad309c5e0c1c3f714e6d8f4d483b02d962090",
"format": 1
},
{
"name": "plugins/modules/redfish_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bf2d8f80cadc119e53e6b2626d515a09799e4931d0bfc6d39c39020b65b8bf46",
+ "chksum_sha256": "3f14d5645eb692b829ab83dac5e38eac9ea9fc7bae38f87ffd532ad2e8d49de5",
"format": 1
},
{
"name": "plugins/modules/redhat_subscription.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6de85514d4fd75fa4ce6d76ad7889008d67a5625c3d7e20b62ace3e0df76f57",
+ "chksum_sha256": "c528d69c6db58dffd6888f30234ab7022f88c2936538fe57ca71da779883240b",
"format": 1
},
{
@@ -6353,7 +6199,7 @@
"name": "plugins/modules/slackpkg.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bbe9e23ec032f7a25bdb7b0fd8f20811d08b058d1976def4b5011851229f4d88",
+ "chksum_sha256": "1ca50585df5578e45594cbfedc789b2b5f12063fa34cad44851bb16fc1c7b471",
"format": 1
},
{
@@ -6367,14 +6213,14 @@
"name": "plugins/modules/snap.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6d0a8e28420c83431d829397011eab016d1e2dd482632e43cb00967db7bfdb7c",
+ "chksum_sha256": "139806babe00b6836e0f630fdcfedf37960b9b29d4c8d4865c91d1a77887528c",
"format": 1
},
{
"name": "plugins/modules/snap_alias.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b588f7b2969ce34f0071ab4a8c4a58a883eb165c3f4696c3ed91f3a95d287a0d",
+ "chksum_sha256": "889e1ff4d1da8e29c100d47a3a82be7d27c098b717e7de76332acbbf051c7d6d",
"format": 1
},
{
@@ -6434,13 +6280,6 @@
"format": 1
},
{
- "name": "plugins/modules/stackdriver.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "260859e428425f3c3ac4bb559a3d4c82273e87301894ac350d8cdf2e193200ab",
- "format": 1
- },
- {
"name": "plugins/modules/stacki_host.py",
"ftype": "file",
"chksum_type": "sha256",
@@ -6486,14 +6325,14 @@
"name": "plugins/modules/svr4pkg.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8194a64057dee3897d1d5c74d4dc557128183315f34bb102dbb47f9bdc8de1c4",
+ "chksum_sha256": "56c3ac1ff64c9da6252c4e749385c6782d1fde4d02df152f9315547e06ec6840",
"format": 1
},
{
"name": "plugins/modules/swdepot.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "548386259af581cf1c3ded8d4ea2ad595e3cedb5c6c7df3533c59d608161712b",
+ "chksum_sha256": "76bd0f44688dd5c7e1cc9b932b12c1e3c8a402991044e4d8c34ac136df9574c4",
"format": 1
},
{
@@ -6812,41 +6651,6 @@
"format": 1
},
{
- "name": "plugins/modules/webfaction_app.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6883576548556701abe0dae9e225b8cfd752d0f228fb9357db083b0ebe26b4a4",
- "format": 1
- },
- {
- "name": "plugins/modules/webfaction_db.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "40b0caf3268e4866ca3adbd73e29f3f340648eaa267dc52467b36b3215ba9bef",
- "format": 1
- },
- {
- "name": "plugins/modules/webfaction_domain.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d46377b3af3d19a097ced017bebe348c843bf715397e18ef5f5d27803f0e696a",
- "format": 1
- },
- {
- "name": "plugins/modules/webfaction_mailbox.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "966032efd5039669f873f8a33d85573ca7536a261ea3b2eb11e7a1c00978365e",
- "format": 1
- },
- {
- "name": "plugins/modules/webfaction_site.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1715e8e46b23d2cacda5560e722957ff3440e1f3800461c94c27c13c0582e325",
- "format": 1
- },
- {
"name": "plugins/modules/xattr.py",
"ftype": "file",
"chksum_type": "sha256",
@@ -6899,14 +6703,14 @@
"name": "plugins/modules/xfconf.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dfde9c9bb1f06fc648e437411d5036530781b9753e939a04c2aee066883868b5",
+ "chksum_sha256": "e39ad342c6eb276e06a4f5f96355962d3bf1ee65919306b4a4ebe0cfdcbb8b5c",
"format": 1
},
{
"name": "plugins/modules/xfconf_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fe226ac61a1a542d0a68fedbfa614b92953e557a35bc33daa85238f8579200fa",
+ "chksum_sha256": "8298c11a2fa145f8a1774d08178aaf0470f140074bbacd92143dcada1520bfc2",
"format": 1
},
{
@@ -7771,6 +7575,34 @@
"format": 1
},
{
+ "name": "tests/integration/targets/callback_timestamp",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/callback_timestamp/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/callback_timestamp/tasks/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "59fb52bebe9fcf0239c444a3102565e0951c17b66e804b4f00027661545849e7",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/callback_timestamp/aliases",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d40d8366b202f652a10750cf49c0db353a8e9f87994196e3415bba3fc231acf4",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/callback_yaml",
"ftype": "dir",
"chksum_type": null,
@@ -8376,7 +8208,7 @@
"name": "tests/integration/targets/cpanm/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "653dbd5100adc070f54638e9c11add3e9b1164d35754d1309a2057fc4f78e2ee",
+ "chksum_sha256": "faa6f84aefea52ab8b9e6508716ffa25fedd4f0f3d1440b1d1afc0b5ebfb45b6",
"format": 1
},
{
@@ -8670,7 +8502,7 @@
"name": "tests/integration/targets/django_manage/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "acf2895219fc5b757396f9d77d4c878c5b36a574043dd9fbb847937d412725ca",
+ "chksum_sha256": "e438e0c590ab3275c054f5478d058d45d84766d160a34d1c3036d6197b76c345",
"format": 1
},
{
@@ -8831,7 +8663,7 @@
"name": "tests/integration/targets/ejabberd_user/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "947101155a8d19ee0d8bf4d74cd963d80ec75d6bd6b7fee8241631f2cf044583",
+ "chksum_sha256": "cf30d0191fdbcdea15cb4fed557820bc300f423103a460cf45a0329d9cc7be4c",
"format": 1
},
{
@@ -9937,7 +9769,7 @@
"name": "tests/integration/targets/gandi_livedns/tasks/create_record.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "446bc960f355726f7738046f5265c5a7d6414157a548f6f7f4c5d59ae8220830",
+ "chksum_sha256": "17221c4ffbf3d7d0fca39430b16cf2af45cd4b592c3614bb8de377b5535e9a15",
"format": 1
},
{
@@ -9965,7 +9797,7 @@
"name": "tests/integration/targets/gandi_livedns/tasks/update_record.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8a72b53a9dfd67149da89b1f827a0a922fa09fb56835a6b87da00010fc1c40ff",
+ "chksum_sha256": "a9c91a60c39152d32812fa5009cae494b88f7e6f899c3108d9376363628c4fc0",
"format": 1
},
{
@@ -11257,6 +11089,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/homebrew/handlers",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/homebrew/handlers/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fc600871f7f35c7a11dcd66037c79ea9d6269cfc5d0fc788eb8e481531bdd9b3",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/homebrew/tasks",
"ftype": "dir",
"chksum_type": null,
@@ -11267,21 +11113,28 @@
"name": "tests/integration/targets/homebrew/tasks/casks.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6dea53684420b39d7e51987f3cb6b74e57a7eec45999c4963d9b9208a518b887",
+ "chksum_sha256": "494edfbdfb54e5b0a6bce7fb9df26d3d782781f778108c3aef8b779070540f36",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/homebrew/tasks/docker.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0d278d82d50c06804ac32c230d915a94b5f48f4ffd69dda3a349b89a03b12238",
"format": 1
},
{
"name": "tests/integration/targets/homebrew/tasks/formulae.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f3b0ace4227b32e8e9a7c3a35da793720787e2617f21621f8836d88f5d356b80",
+ "chksum_sha256": "10fcd06a88646913b4c26d724d749f414e36852a44c9f01913ecfc45079427db",
"format": 1
},
{
"name": "tests/integration/targets/homebrew/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "63b4898f3fec452093d5f26f0d0d2ea42365739d61bbb92ef4973c3115d636f9",
+ "chksum_sha256": "365fe427f14e14e94b5aacdc0d391ab1a42e75839b081862784f053d5fbacb3c",
"format": 1
},
{
@@ -13556,7 +13409,7 @@
"name": "tests/integration/targets/keycloak_identity_provider/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "32177a1221cd9929bb79d40beed27c7ec9ac6a21f35767e6e467b6b40594d27f",
+ "chksum_sha256": "1e540794e75ec59a5f755e39525df423fbd1d5fd55eed5d24d553a532bb05017",
"format": 1
},
{
@@ -14662,7 +14515,7 @@
"name": "tests/integration/targets/lookup_merge_variables/runme.sh",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7e7ed20f6d74549dffd00a8f003cfab56317142535b49ff647ec90c0ce8c844e",
+ "chksum_sha256": "d6c4c416f684874bf12d7c11cdec5e2b259a1bbf057a62a9726fde8a46ef2ae1",
"format": 1
},
{
@@ -14680,6 +14533,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/lookup_merge_variables/test_cross_host_merge_inventory.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3a64a4122077842c8d48942132c3675e4a6070168f996e13f43c04a740948917",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/lookup_merge_variables/test_cross_host_merge_play.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b5de72989e9b21f89f2b7cbbacbfa50df800bfad9c996b81cab5ad0522feed5e",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/lookup_merge_variables/test_inventory_all_hosts.yml",
"ftype": "file",
"chksum_type": "sha256",
@@ -15621,7 +15488,7 @@
"name": "tests/integration/targets/module_helper/library/mdepfail.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6ccb5898901617cf6976b660ed6025f61d0ae4c73b01beddf1f6946b88c5643c",
+ "chksum_sha256": "70d8bfa27cad12848db324ae66a12de86abceb01bf06f0fe0fa93b884be2ff62",
"format": 1
},
{
@@ -15642,7 +15509,7 @@
"name": "tests/integration/targets/module_helper/library/mstate.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "feaf0076b48a59004d93f7e9d18b13b919d2a35b3e4d8ede711f9f3ff9c7a510",
+ "chksum_sha256": "5903e88c5a2a5904402d121c151d0448f4afdb9dfb648f55335a91d5400ffef3",
"format": 1
},
{
@@ -20255,7 +20122,7 @@
"name": "tests/integration/targets/snap/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f8e05e7aa1de2b74a9aab47cbdac6f6053fd59d6113d1e968521544a5b9b8285",
+ "chksum_sha256": "73e25e2cdcd2e177465f1ac043858749ecabb7cc1b3158e985de0f7767ee7155",
"format": 1
},
{
@@ -20276,7 +20143,7 @@
"name": "tests/integration/targets/snap/tasks/test_channel.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "06b6a509058dca27433debe5f007f8ea36f69a53ba25ca0f1d5d0bf71ab751ab",
+ "chksum_sha256": "1b44aa52796d0622449e4dacdc2c3385c34a848d200f1ad6372620656ac4a15c",
"format": 1
},
{
@@ -22432,7 +22299,7 @@
"name": "tests/sanity/ignore-2.13.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "96fb0c5067f95b7ce1398bd26cc039eedf03fd8309844d7e59dec097ec594a2c",
+ "chksum_sha256": "b44fa4121d447d611e4099c62f163fa83f7983bbd8a271ddefd8e2c05ff61205",
"format": 1
},
{
@@ -22446,7 +22313,7 @@
"name": "tests/sanity/ignore-2.14.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f1746096cd6755590272792fff8aa9884bde3a011fc8c71e24d9d43e6e847e4b",
+ "chksum_sha256": "0b2cdc0de13edb8c6a5a1dc241f58cadc89ca1bd7378217d3c4116140bcd7704",
"format": 1
},
{
@@ -22460,7 +22327,7 @@
"name": "tests/sanity/ignore-2.15.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1960b0bd13753051ea1250ed6b1de8eb19b8f9e57901350c044d9cd884dc66a6",
+ "chksum_sha256": "df47d504ef24f7ccf8e645e2a330c86642201d942eab2df12a52b584f236eb5e",
"format": 1
},
{
@@ -22474,7 +22341,7 @@
"name": "tests/sanity/ignore-2.16.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b49ac32679f36df6f32acffd654013de426897c51bb40e2024c1baa9b6044ae1",
+ "chksum_sha256": "e549ec441d29f3908b8210c52903dc1db711dc5a16928787e4527706013d3a5a",
"format": 1
},
{
@@ -22488,7 +22355,7 @@
"name": "tests/sanity/ignore-2.17.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4aa6d180dd919a19b80a38b282923231f636556e4bf343b2cf36527d999b2124",
+ "chksum_sha256": "1f44f41aa9a1e5198129a18be0aed641e3859e196aaca08c3cff2d8813ff5490",
"format": 1
},
{
@@ -22502,7 +22369,7 @@
"name": "tests/sanity/ignore-2.18.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4aa6d180dd919a19b80a38b282923231f636556e4bf343b2cf36527d999b2124",
+ "chksum_sha256": "1f44f41aa9a1e5198129a18be0aed641e3859e196aaca08c3cff2d8813ff5490",
"format": 1
},
{
@@ -22660,6 +22527,13 @@
"format": 1
},
{
+ "name": "tests/unit/plugins/become/test_run0.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8c8701c9a8050a55b6ce76546768f86e600f52aaafab02acd9d1c34c051feecf",
+ "format": 1
+ },
+ {
"name": "tests/unit/plugins/become/test_sudosu.py",
"ftype": "file",
"chksum_type": "sha256",
@@ -23048,7 +22922,7 @@
"name": "tests/unit/plugins/lookup/test_merge_variables.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "96beb7ae4b4dc2eed0102f7f08d298ba619d167356771e4d4f2aa00b9507b18c",
+ "chksum_sha256": "92466922629e3e6beae89f5ca814c538ff85f527897b5c749ff50b1955ea214f",
"format": 1
},
{
@@ -23363,7 +23237,7 @@
"name": "tests/unit/plugins/module_utils/test_cmd_runner.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fc1a28545ad32bc5c937219a3188ea421f7b177bf7c412b64c2081f3dffaaf58",
+ "chksum_sha256": "5e44ed79ba57b534227340b6e97849f84d20811597aaed62aa697d09ab6243f6",
"format": 1
},
{
@@ -23416,6 +23290,13 @@
"format": 1
},
{
+ "name": "tests/unit/plugins/module_utils/test_python_runner.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "63da895b9259d9db9650e5d7b1b998dc546a15c083e61becc9527cc145028015",
+ "format": 1
+ },
+ {
"name": "tests/unit/plugins/module_utils/test_saslprep.py",
"ftype": "file",
"chksum_type": "sha256",
@@ -26513,7 +26394,7 @@
"name": "tests/unit/plugins/modules/helper.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d92529c5e737c7a3b5aa3d9100502ea7b875f233d86f435c2453f9c77ae012f7",
+ "chksum_sha256": "304e697c86b572f7ec8711a75eb120dd7f013ceff5405ee987af887bd35895f1",
"format": 1
},
{
@@ -26632,7 +26513,7 @@
"name": "tests/unit/plugins/modules/test_cpanm.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9f34f3edb8ae8ba4e017eab4740265089a1986d55066b8e6c70759604cc018b0",
+ "chksum_sha256": "e602576120a85701ecd7af5845fb5944f7f1b134d3f80b14f8934f835cd3485f",
"format": 1
},
{
@@ -26657,6 +26538,20 @@
"format": 1
},
{
+ "name": "tests/unit/plugins/modules/test_django_command.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1507459a2607edf5c63f2f3d171457e869019bf33e95066c365d9eba0942aa87",
+ "format": 1
+ },
+ {
+ "name": "tests/unit/plugins/modules/test_django_command.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c5e03ba9fde5c84f8f11a85870829f5c530a29c2c44fbb551df62263202546eb",
+ "format": 1
+ },
+ {
"name": "tests/unit/plugins/modules/test_dnf_config_manager.py",
"ftype": "file",
"chksum_type": "sha256",
@@ -26814,7 +26709,7 @@
"name": "tests/unit/plugins/modules/test_homebrew.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e69d96b396482e1418d7159092f4985ed1eb5ecf4370e9ee1efabb0b7e970398",
+ "chksum_sha256": "fe49d9f40e41b14a956d090b955a7270609439e91118fa1eaee33bbf325d4ec0",
"format": 1
},
{
@@ -27332,7 +27227,7 @@
"name": "tests/unit/plugins/modules/test_puppet.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fd0aef324a3206562948e4dc8c7e756a2adaf9f43a7a0447c80f941c3d4ce153",
+ "chksum_sha256": "bd699d9b1ed9c6e8d0f4e9f7ad57e170e4c4207fdf3eeba04f6359910b4e7e66",
"format": 1
},
{
@@ -27574,6 +27469,20 @@
"format": 1
},
{
+ "name": "tests/unit/plugins/plugin_utils",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/unit/plugins/plugin_utils/test_unsafe.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9f8bcb10a66f8398da56f6508697a0d199f0f77f6c0484a64fbecb10997bcdfc",
+ "format": 1
+ },
+ {
"name": "tests/unit/requirements.txt",
"ftype": "file",
"chksum_type": "sha256",
@@ -27738,14 +27647,14 @@
"name": ".gitignore",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6aef8926f289080d8a3ab9cbf9dddcd411a1e2d2e4ccd2c138aa056805ebfb77",
+ "chksum_sha256": "b3e3a5980835432f1db97655c0d123de6e06a98065a19b6453cbf778456c0006",
"format": 1
},
{
"name": "CHANGELOG.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aa9310c1dd52b555a85d449e50a3ba1bc9de9e5a3474c66e156488463be1cc36",
+ "chksum_sha256": "2fc9c5d7b462624c77da1320ae1acaa13e7e4f765f0fe3393278146104281693",
"format": 1
},
{
@@ -27759,7 +27668,7 @@
"name": "CHANGELOG.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7192b128389810ee514466d24b34c430fd3e044eafc1db4c3b092a3a630d9985",
+ "chksum_sha256": "28d86e5061f86ee8a49776681a2f660ee38c29d057b9c23c6d2ab473c0f218a5",
"format": 1
},
{
@@ -27773,7 +27682,7 @@
"name": "CONTRIBUTING.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2b729d659927dbf2ef866dc1160a32a704123c9e2be3fe1c1c8d2daa053a83ae",
+ "chksum_sha256": "a7b150aea1da9c4c36ba4e4f8ce7fc40cab2aad7ad0505c3429540fe94270bf9",
"format": 1
},
{
@@ -27787,7 +27696,7 @@
"name": "README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "980347a93d90e0b8f8507f59be3be73f0f3026521be645861f2b30880c7ee9fe",
+ "chksum_sha256": "e773d31d8a52af357cddde045bc0682c1f14432496f72b4bd71b76556af876dc",
"format": 1
},
{
diff --git a/ansible_collections/community/general/MANIFEST.json b/ansible_collections/community/general/MANIFEST.json
index 4d700a4c7..ffbae1e0e 100644
--- a/ansible_collections/community/general/MANIFEST.json
+++ b/ansible_collections/community/general/MANIFEST.json
@@ -2,7 +2,7 @@
"collection_info": {
"namespace": "community",
"name": "general",
- "version": "8.6.0",
+ "version": "9.0.1",
"authors": [
"Ansible (https://github.com/ansible)"
],
@@ -23,7 +23,7 @@
"name": "FILES.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "42be361f601f0df607b62621323c3fb70f485cd57cd2d7eecca85d6590836b01",
+ "chksum_sha256": "be2f78923401a69f1bb6105804257106a4092634b2fa6a02058fea1e14de1bff",
"format": 1
},
"format": 1
diff --git a/ansible_collections/community/general/README.md b/ansible_collections/community/general/README.md
index 162cc06b0..fb95bf0c7 100644
--- a/ansible_collections/community/general/README.md
+++ b/ansible_collections/community/general/README.md
@@ -6,9 +6,10 @@ SPDX-License-Identifier: GPL-3.0-or-later
# Community General Collection
-[![Build Status](https://dev.azure.com/ansible/community.general/_apis/build/status/CI?branchName=stable-8)](https://dev.azure.com/ansible/community.general/_build?definitionId=31)
+[![Build Status](https://dev.azure.com/ansible/community.general/_apis/build/status/CI?branchName=stable-9)](https://dev.azure.com/ansible/community.general/_build?definitionId=31)
[![EOL CI](https://github.com/ansible-collections/community.general/workflows/EOL%20CI/badge.svg?event=push)](https://github.com/ansible-collections/community.general/actions)
[![Codecov](https://img.shields.io/codecov/c/github/ansible-collections/community.general)](https://codecov.io/gh/ansible-collections/community.general)
+[![REUSE status](https://api.reuse.software/badge/github.com/ansible-collections/community.general)](https://api.reuse.software/info/github.com/ansible-collections/community.general)
This repository contains the `community.general` Ansible Collection. The collection is a part of the Ansible package and includes many modules and plugins supported by Ansible community which are not part of more specialized community collections.
@@ -115,7 +116,7 @@ See the [Releasing guidelines](https://github.com/ansible/community-docs/blob/ma
## Release notes
-See the [changelog](https://github.com/ansible-collections/community.general/blob/stable-8/CHANGELOG.md).
+See the [changelog](https://github.com/ansible-collections/community.general/blob/stable-9/CHANGELOG.md).
## Roadmap
@@ -134,8 +135,8 @@ See [this issue](https://github.com/ansible-collections/community.general/issues
This collection is primarily licensed and distributed as a whole under the GNU General Public License v3.0 or later.
-See [LICENSES/GPL-3.0-or-later.txt](https://github.com/ansible-collections/community.general/blob/main/COPYING) for the full text.
+See [LICENSES/GPL-3.0-or-later.txt](https://github.com/ansible-collections/community.general/blob/stable-9/COPYING) for the full text.
-Parts of the collection are licensed under the [BSD 2-Clause license](https://github.com/ansible-collections/community.general/blob/main/LICENSES/BSD-2-Clause.txt), the [MIT license](https://github.com/ansible-collections/community.general/blob/main/LICENSES/MIT.txt), and the [PSF 2.0 license](https://github.com/ansible-collections/community.general/blob/main/LICENSES/PSF-2.0.txt).
+Parts of the collection are licensed under the [BSD 2-Clause license](https://github.com/ansible-collections/community.general/blob/stable-9/LICENSES/BSD-2-Clause.txt), the [MIT license](https://github.com/ansible-collections/community.general/blob/stable-9/LICENSES/MIT.txt), and the [PSF 2.0 license](https://github.com/ansible-collections/community.general/blob/stable-9/LICENSES/PSF-2.0.txt).
All files have a machine readable `SDPX-License-Identifier:` comment denoting its respective license(s) or an equivalent entry in an accompanying `.license` file. Only changelog fragments (which will not be part of a release) are covered by a blanket statement in `.reuse/dep5`. This conforms to the [REUSE specification](https://reuse.software/spec/).
diff --git a/ansible_collections/community/general/changelogs/changelog.yaml b/ansible_collections/community/general/changelogs/changelog.yaml
index b45d41276..6215a89ce 100644
--- a/ansible_collections/community/general/changelogs/changelog.yaml
+++ b/ansible_collections/community/general/changelogs/changelog.yaml
@@ -1,850 +1,158 @@
-ancestor: 7.0.0
+ancestor: 8.0.0
releases:
- 8.0.0:
+ 9.0.0:
changes:
breaking_changes:
- - 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).
- bugfixes:
- - 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_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_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).
- - 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).
- - 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).
- - 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_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_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).
- deprecated_features:
- - 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).
- - 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).
- known_issues:
- - 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).
- minor_changes:
- - 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).
- release_summary: This is release 8.0.0 of ``community.general``, released on
- 2023-11-01.
- removed_features:
- - 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).
- fragments:
- - 3787-pass-composer-working-dir.yml
- - 6134-add-locked-option-for-cargo.yml
- - 6223-get-secret-ids-by-folderid.yml
- - 6435-snap-channel-aware.yml
- - 6469-add-composites-support-for-keycloak-role.yml
- - 6471-redfish-add-multipart-http-push-command.yml
- - 6502-cobbler-inventory_hostname.yml
- - 6510-proxmox-create-support_timezone.yaml
- - 6512-cpanm-default-mode.yml
- - 6513-opkg-default-force.yml
- - 6520-mas-disable-signin.yaml
- - 6522-copr-respawn.yaml
- - 6523-datadog-monitor-notification-preset-name-and-renotify.yaml
- - 6525-sorcery-import.yaml
- - 6527-nmcli-bond-fix-xmit_hash_policy.yml
- - 6531-opentelemetry-add-event-attributes.yml
- - 6533-proxmox_kvm-tpmstate0-support.yaml
- - 6534-zypper-exitcode-102-handled.yaml
- - 6539-semantic-markup.yml
- - 6548-portage-changed_use-newuse.yml
- - 6554-proxmox-tasks-info-fix-required-password.yaml
- - 6568-fix-get-user-by-username-in-keycloak-module-utils.yml
- - 6570-handle-shutdown-timeout.yaml
- - 6576-proxmox-snap-allow-to-remove-old-snapshots.yml
- - 6601-cmdrunner-deprecate-default-type.yml
- - 6602-vardict-as-dict.yml
- - 6640-proxmox-composite-variables-support.yml
- - 6644-dependencymixin-fix.yml
- - 6646-redhat_subscription-deprecate-autosubscribe.yml
- - 6647-vardict-methods.yml
- - 6648_ldap_search_page_size.yml
- - 6649-varsmixin-deprecation.yml
- - 6650-redhat_subscription-deprecate-pool.yml
- - 6658-redhat_subscription-internal-rhsm-refactor.yml
- - 6660-onepassword-lookup-service-account.yaml
- - 6662-csv-bom.yml
- - 6663-deprecate-module_utils-redhat.yml
- - 6668-ldap-client-cert.yml
- - 6669-rhsm_release-internal-sub-man-exec.yml
- - 6673-rhsm_repository-deprecate-present-absent.yml
- - 6676-rhsm_repository-fix-returned-repositories-with-purge.yml
- - 6680-filesystem-uuid-change.yml
- - 6682-lvg-clonesupport.yml
- - 6687-support-subgroups-for-keycloak-client-rolemapping.yml
- - 6688-is-struct-included-bug-in-keycloak-py.yml
- - 6709-proxmox-create-vm-with-existing-name.yml
- - 6711-cobbler-ip-address.yml
- - 6712-gitlab_group-filtered-for-none-values.yml
- - 6713-yay-become.yml
- - 6719-redfish-utils-fix-for-get-volume-inventory.yml
- - 6720-tss-fix-fetch-attachments.yml
- - 6734-keycloak-auth-management-indexing.yml
- - 6748-icinga2_host-datafix.yml
- - 6755-refactor-consul-session-to-use-requests-lib-instead-of-consul.yml
- - 6757-proxmox-template-fix-upload-error.yml
- - 6763-keycloak-auth-provider-choices.yml
- - 6769-nmcli-fix-empty-list.yml
- - 6770-proxmox_disk_create_cdrom.yml
- - 6771-redfish-filter-empty-account-slots.yml
- - 6773-proxmox_kvm-restarted-state-bug-fix.yaml
- - 6774-locale-gen-fix.yml
- - 6783-6837-rhsm_repository-internal-refactor.yml
- - 6785-openbsd_pkg_pkg_info_handling.yml
- - 6811-datadog-downtime-rrule-type.yaml
- - 6813-redfish-config-add-create-volume.yml
- - 6814-redfish-config-add-delete-all-volumes.yml
- - 6819-redfish-utils-add-links-parameter-for-get_disk_inventory.yml
- - 6820-locale-gen-cmdrunner.yml
- - 6823-redfish-add-account-type-management.yml
- - 6826-snap-out-strip.yml
- - 6827-proxmox_kvm-force-delete-bug-fix.yaml
- - 6835-snap-missing-track.yml
- - 6836-proxmox-deprecate-compatibility.yml
- - 6838-proxmox-dict-template.yml
- - 6839-promoxer-tokens.yml
- - 6841-htpasswd-crypt-scheme.yml
- - 6848-npm-required-if.yml
- - 6861-yum_versionlock_minor_change_add-pinning-specific-versions.yml
- - 6862-opkg-exec.yml
- - 6864-redfish-utils-fix-for-processorarchitecture-in-cpu-inventory.yaml
- - 6873-proxmox-imports.yml
- - 6882-make-multiple-targets.yml
- - 6883-redfish-utils-changing-variable-names-in-get-volume-inventory.yml
- - 6887-deprecate-stackdrive.yml
- - 6901-htpasswd-refactor.yml
- - 6902-added-support-in-nmcli-for-ipvx-dns-options.yml
- - 6903-locale-gen-refactor.yml
- - 6905-ipa_dnszone-key-error-fix.yml
- - 6908-snap-dangerous.yml
- - 6909-deprecate-webfaction.yml
- - 6914-proxmox_kvm-enable-force-restart.yml
- - 6923-cobbler-inventory_unicode.yml
- - 6925-cobbler-inventory-bugfix.yml
- - 6927-pylint-comments.yml
- - 6928-noqa-comments.yml
- - 6930-deprecate-flowdock.yml
- - 6931-keycloak_client-inventory-bugfix.yml
- - 6935-machinectl-become.yml
- - 6949-ejabberdctl-error.yml
- - 6968-cmdrunner-implicit-type.yml
- - 6976-proxmox-vm-info-not-require-node.yml
- - 6980-proxmox-fix-token-auth.yml
- - 6981-proxmox-fix-vm-creation-when-only-name-provided.yml
- - 6983-rundeck-fix-typerrror-on-404-api-response.yml
- - 6989-npm-cmdrunner.yml
- - 7012-sorcery-grimoire-mgmt.yml
- - 7019-ipa_config-user-and-group-objectclasses.yml
- - 7020-redfish-utils-pagination.yml
- - 7033-ejabberd-user-bugs.yml
- - 7043-ejabberd-user-deprecate-logging.yml
- - 7046-snap-newline-before-separator.yml
- - 7049-proxmox-vm-info-empty-results.yml
- - 7051-ipa-config-new-choice-idp-to-ipauserauthtype.yml
- - 7061-fix-bitwarden-get_field.yml
- - 7067-keycloak-api-paramerter-fix.yml
- - 7075-ejabberd-user-cmdrunner.yml
- - 7081-redfish-utils-fix-for-storagecontrollers-deprecated-key.yaml
- - 7085-sanity.yml
- - 7099-chroot-disable-root-check-option.yml
- - 7102-freebsd-shutdown-p.yml
- - 7104_fix_lxc_remoteaddr_default.yml
- - 7113-redfish-utils-power-cycle.yml
- - 7118-nmap_inv_plugin_no_arp_option.yml
- - 7124-snap-empty-list.yml
- - 7125-fix-inappropriate-comparison.yml
- - 7129-adding_set_secure_boot_command_to_redfish_config.yml
- - 7132-gitlab-raw-variables.yml
- - 7140-id-getmanagerinv-output.yml
- - 7144-add-getbiosregistry-command-to-redfish-info.yml
- - 7156-ensure-validate-certs-parameter-is-honoured.yml
- - 7158-gitlab-project-default-branch-update.yml
- - 7161-fix-incorrect-post-parameter.yml
- - 7179-unixy-support-checkmode-markers.yml
- - 7180-make_params_without_value.yml
- - 7184-cobbler-mgmt-classes.yml
- - 7200-cmd-runner-abs-path.yml
- - 7219-fix-nsupdate-cname.yaml
- - 7231-cpanm-adjustments.yml
- - 7241-prevent-key-error-when-value-does-not-exist.yml
- - 7242_ignore_similar_chars.yml
- - 7251-gitlab-variables-deleteing-all-variables.yml
- - 7263-proxmox-return-vmid-and-taskid.yaml
- - 7264-ldap_search-strings.yml
- - 7267-redis_info.yml
- - 7273-ini_file_ignore_spaces.yml
- - 7284-supervisorctl-stop-before-remove.yaml
- - 7295-adding_deprecation_for_timeout_in_redfish_info_config_command.yml
- - 7301-fix-backend-config-string-encapsulation.yml
- - 7303-mail-incorrect-header-parsing.yml
- - 7304-prevent-parted-warnings.yml
- - 7308-onepassword-multi-acc.yml
- - 7318-add-linkstatus-attribute-to-nic-inventory.yml
- - 7323-nmap.yml
- - 7330-redfish-utils-oem-params.yml
- - 7339-pnpm-correct-version-when-state-latest.yml
- - 7340-snap-fix.yml
- - 7343-dig-tcp-option.yml
- - 7352-add-executable-option-for-cargo.yml
- - 7355-newrelic-deployment-add-exact-name.yml
- - 7360-lxd-remote-addr-host.yml
- - 7364-add-option-force-gitlab-group.yml
- - 7369-fix-lxc-options.yml
- - 7373-lxc-remote-addr-change.yml
- - 7374-fix-selective-callback-taskname-length.yml
- - 7375-fix-github-deploy-key-pagination.yml
- - 7377-proxmox-kvm-deprecate-flag.yml
- - 7378-redhat_subscription-dbus-consumer-type.yaml
- - 7379-url.yml
- - 7382-kernel-blacklist-bugfix.yml
- - 7392-lxd-inventory-server-cert.yml
- - 7396-fix-apt_rpm-local-rpm-installation.yml
- - 7399-cloudflare_dns-add-CAA-record-support.yml
- - 7401-ini-file-modify-inactive-option.yaml
- - 7412-add-port-for-nomad-connection.yaml
- - 7452-fix-icinga2_host-requiring-ip-key.yml
- - 8.0.0.yml
- - ansible-core-2.11-2.12.yml
- - get-secret-by-path.yml
- - improvements-to-jenkins-build-module.yml
- - ini_file-preserve-symlink.yml
- - ini_file-use-inactive-options-when-possible.yml
- - lvol-pct-of-origin.yml
- - removals.yml
- - update-v2-pagerduty-alert.yml
- modules:
- - description: Manipulate Consul policies
- name: consul_policy
- namespace: ''
- - description: Manipulate Consul roles
- name: consul_role
- namespace: ''
- - description: Runs the discovery program C(facter) on the remote system and return
- Ansible facts
- name: facter_facts
- namespace: ''
- - description: Set default handler for MIME type, for applications using Gnome
- GIO
- name: gio_mime
- namespace: ''
- - description: Creates, updates, or deletes GitLab instance variables
- name: gitlab_instance_variable
- namespace: ''
- - description: Create, update, or delete GitLab merge requests
- name: gitlab_merge_request
- namespace: ''
- - description: Get information about Jenkins builds
- name: jenkins_build_info
- namespace: ''
- - description: Allows administration of Keycloak authentication required actions
- name: keycloak_authentication_required_actions
- namespace: ''
- - description: Allows administration of Keycloak client custom Javascript policies
- via Keycloak API
- name: keycloak_authz_custom_policy
- namespace: ''
- - description: Allows administration of Keycloak client authorization permissions
- via Keycloak API
- name: keycloak_authz_permission
- namespace: ''
- - description: Query Keycloak client authorization permissions information
- name: keycloak_authz_permission_info
- namespace: ''
- - description: Allows administration of Keycloak realm keys via Keycloak API
- name: keycloak_realm_key
- namespace: ''
- - description: Create and configure a user in Keycloak
- name: keycloak_user
- namespace: ''
- - description: Renames LVM volume groups
- name: lvg_rename
- namespace: ''
- - description: Manage node.js packages with pnpm
- name: pnpm
- namespace: ''
- - description: Pool management for Proxmox VE cluster
- name: proxmox_pool
- namespace: ''
- - description: Add or delete members from Proxmox VE cluster pools
- name: proxmox_pool_member
- namespace: ''
- - description: Retrieve information about one or more Proxmox VE virtual machines
- name: proxmox_vm_info
- namespace: ''
- - description: Manage services on Source Mage GNU/Linux
- name: simpleinit_msb
- namespace: ''
- plugins:
- lookup:
- - description: Retrieve secrets from Bitwarden Secrets Manager
- name: bitwarden_secrets_manager
- namespace: null
- release_date: '2023-11-01'
- 8.0.1:
- changes:
+ - 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).
bugfixes:
+ - 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 <packages>``, 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).
+ - 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_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).
- - proxmox_pool_member - absent state for type VM did not delete VMs from the
- pools (https://github.com/ansible-collections/community.general/pull/7464).
- - 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).
- release_summary: Bugfix release for inclusion in Ansible 9.0.0b1.
- fragments:
- - 7464-fix-vm-removal-in-proxmox_pool_member.yml
- - 7465-redfish-firmware-update-message-id-hardening.yml
- - 7467-fix-gitlab-constants-calls.yml
- - 8.0.1.yml
- release_date: '2023-11-06'
- 8.0.2:
- changes:
- bugfixes:
- - ocapi_utils, oci_utils, redfish_utils module utils - replace ``type()`` calls
- with ``isinstance()`` calls (https://github.com/ansible-collections/community.general/pull/7501).
- - 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).
- release_summary: Bugfix release for inclusion in Ansible 9.0.0rc1.
- fragments:
- - 7501-type.yml
- - 7506-pipx-pipargs.yml
- - 8.0.2.yml
- release_date: '2023-11-13'
- 8.1.0:
- changes:
- bugfixes:
- - 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).
+ - 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 - 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).
+ - 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).
- 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 - 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).
- 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).'
+ - 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).
+ - 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
@@ -854,12 +162,105 @@ releases:
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).
+ - 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).
+ deprecated_features:
+ - 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).
minor_changes:
+ - 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).
+ - '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
@@ -869,9 +270,37 @@ releases:
(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).
@@ -880,26 +309,84 @@ releases:
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
@@ -908,18 +395,98 @@ releases:
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).
- release_summary: Regular bugfix and feature release.
+ - 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).
+ release_summary: This is release 9.0.0 of ``community.general``, released on
+ 2024-05-20.
+ removed_features:
+ - 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).
+ security_fixes:
+ - 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).
fragments:
- 000-redhat_subscription-dbus-on-7.4-plus.yaml
- 5588-support-1password-connect.yml
@@ -928,25 +495,34 @@ releases:
- 7151-fix-keycloak_authz_permission-incorrect-resource-payload.yml
- 7199-gitlab-runner-new-creation-workflow.yml
- 7242-multi-values-for-same-name-in-git-config.yml
+ - 7389-nmcli-issue-with-creating-a-wifi-bridge-slave.yml
+ - 7418-kc_identity_provider-mapper-reconfiguration-fixes.yml
- 7426-add-timestamp-and-preserve-options-for-passwordstore.yaml
- 7456-add-ssh-control-master.yml
- 7461-proxmox-inventory-add-exclude-nodes.yaml
- 7462-Add-ostype-parameter-in-LXC-container-clone-of-ProxmoxVE.yaml
+ - 7464-fix-vm-removal-in-proxmox_pool_member.yml
+ - 7465-redfish-firmware-update-message-id-hardening.yml
+ - 7467-fix-gitlab-constants-calls.yml
- 7472-gitlab-add-ca-path-option.yml
- 7485-proxmox_vm_info-config.yml
- 7486-gitlab-refactor-package-check.yml
- 7489-netcup-dns-record-types.yml
- 7495-proxmox_disk-manipulate-cdrom.yml
- 7499-allow-mtu-setting-on-bond-and-infiniband-interfaces.yml
+ - 7501-type.yml
+ - 7505-ini_file-section_has.yml
+ - 7506-pipx-pipargs.yml
- 7517-elastic-close-client.yaml
- 7535-terraform-fix-multiline-string-handling-in-complex-variables.yml
- 7538-add-krbprincipalattribute-option.yml
- - 7540-proxmox-update config.yml
+ - 7540-proxmox-update-config.yml
- 7542-irc-logentries-ssl.yml
- 7550-irc-use_tls-validate_certs.yml
- 7564-onepassword-lookup-case-insensitive.yaml
- 7569-infiniband-slave-support.yml
- 7577-fix-apt_rpm-module.yml
+ - 7578-irc-tls.yml
- 7588-ipa-config-new-choice-passkey-to-ipauserauthtype.yml
- 7589-ipa-config-new-choices-idp-and-passkey-to-ipauserauthtype.yml
- 7600-proxmox_kvm-hookscript.yml
@@ -955,257 +531,43 @@ releases:
- 7626-redfish-info-add-boot-progress-property.yml
- 7641-fix-keycloak-api-client-to-quote-properly.yml
- 7645-Keycloak-print-error-msg-from-server.yml
+ - 7646-fix-order-number-detection-in-dn.yml
- 7653-fix-cloudflare-lookup.yml
- 7676-lvol-pvs-as-list.yml
- - 8.1.0.yml
- - add-ipa-sudorule-deny-cmd.yml
- - bitwarden-lookup-performance.yaml
- - lxd-instance-not-found-avoid-false-positives.yml
- modules:
- - description: Read git configuration
- name: git_config_info
- namespace: ''
- - description: Create, update, or delete GitLab issues
- name: gitlab_issue
- namespace: ''
- - description: Manage Nomad ACL tokens
- name: nomad_token
- namespace: ''
- plugins:
- lookup:
- - description: Fetch documents stored in 1Password
- name: onepassword_doc
- namespace: null
- test:
- - description: Validates fully-qualified domain names against RFC 1123
- name: fqdn_valid
- namespace: null
- release_date: '2023-12-04'
- 8.2.0:
- changes:
- bugfixes:
- - 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).
- - 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).
- minor_changes:
- - 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).
- - 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).
- - 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).
- release_summary: Regular bugfix and feature release.
- fragments:
- - 7418-kc_identity_provider-mapper-reconfiguration-fixes.yml
+ - 7683-added-contenttype-parameter.yml
- 7696-avoid-attempt-to-delete-non-existing-user.yml
- 7698-improvements-to-keycloak_realm_key.yml
- 7703-ssh_config_add_keys_to_agent_option.yml
- 7704-ssh_config_identities_only_option.yml
+ - 7717-prevent-modprobe-error.yml
- 7723-ipa-pwpolicy-update-pwpolicy-module.yml
- 7737-add-ipa-dnsrecord-ns-type.yml
- 7740-add-message-id-header-to-mail-module.yml
- 7746-raw_post-without-actions.yml
- 7754-fixed-payload-format.yml
- 7765-mail-message-id.yml
+ - 7782-cloudflare_dns-spf.yml
- 7789-keycloak-user-federation-custom-provider-type.yml
+ - 7790-gitlab-runner-api-pagination.yml
- 7791-proxmox_kvm-state-template-will-check-status-first.yaml
- - 8.2.0.yml
- modules:
- - description: Enable or disable dnf repositories using config-manager
- name: dnf_config_manager
- namespace: ''
- - description: Retrive component info in Keycloak
- name: keycloak_component_info
- namespace: ''
- - description: Allows administration of Keycloak realm role mappings into groups
- with the Keycloak API
- name: keycloak_realm_rolemapping
- namespace: ''
- - description: Retrieve information about one or more Proxmox VE nodes
- name: proxmox_node_info
- namespace: ''
- - description: List content from a Proxmox VE storage
- name: proxmox_storage_contents_info
- namespace: ''
- plugins:
- connection:
- - description: Run tasks in Incus instances via the Incus CLI.
- name: incus
- namespace: null
- filter:
- - description: Converts INI text input into a dictionary
- name: from_ini
- namespace: null
- - description: Converts a dictionary to the INI file format
- name: to_ini
- namespace: null
- lookup:
- - description: Obtain short-lived Github App Access tokens
- name: github_app_access_token
- namespace: null
- release_date: '2024-01-01'
- 8.3.0:
- changes:
- bugfixes:
- - 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).
- - 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).
- deprecated_features:
- - 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).
- minor_changes:
- - 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).
- - redfish_info - add command ``GetServiceIdentification`` to get service identification
- (https://github.com/ansible-collections/community.general/issues/7882).
- - terraform - add support for ``diff_mode`` for terraform resource_changes (https://github.com/ansible-collections/community.general/pull/7896).
- release_summary: Regular bugfix and feature release.
- fragments:
- - 7389-nmcli-issue-with-creating-a-wifi-bridge-slave.yml
- - 7646-fix-order-number-detection-in-dn.yml
- 7797-ipa-fix-otp-idempotency.yml
- 7821-mssql_script-py2.yml
- 7826-consul-modules-refactoring.yaml
+ - 7843-proxmox_kvm-update_unsafe.yml
+ - 7847-gitlab-issue-title.yml
- 7870-homebrew-cask-installed-detection.yml
- 7872-proxmox_fix-update-if-setting-doesnt-exist.yaml
- 7874-incus_connection_treats_inventory_hostname_as_literal_in_remotes.yml
+ - 7880-ipa-fix-sudo-and-hbcalrule-idempotence.yml
+ - 7881-fix-keycloak-client-ckeckmode.yml
- 7882-add-redfish-get-service-identification.yml
- 7896-add-terraform-diff-mode.yml
- 7897-consul-action-group.yaml
- 7901-consul-acl-deprecation.yaml
- - 8.3.0.yml
- modules:
- - description: Bootstrap ACLs in Consul
- name: consul_acl_bootstrap
- namespace: ''
- - description: Manipulate Consul auth methods
- name: consul_auth_method
- namespace: ''
- - description: Manipulate Consul binding rules
- name: consul_binding_rule
- namespace: ''
- - description: Manipulate Consul tokens
- name: consul_token
- namespace: ''
- - description: Creates/updates/deletes GitLab Labels belonging to project or group.
- name: gitlab_label
- namespace: ''
- - description: Creates/updates/deletes GitLab Milestones belonging to project
- or group
- name: gitlab_milestone
- namespace: ''
- release_date: '2024-01-29'
- 8.4.0:
- changes:
- bugfixes:
- - '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).
- minor_changes:
- - 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).
- release_summary: Regular bugfix and feature release.
- fragments:
- - 7717-prevent-modprobe-error.yml
- - 7790-gitlab-runner-api-pagination.yml
- - 7843-proxmox_kvm-update_unsafe.yml
- - 7847-gitlab-issue-title.yml
- - 7881-fix-keycloak-client-ckeckmode.yml
- 7916-add-redfish-set-service-identification.yml
- 7919-onepassword-fieldname-casing.yaml
- 7951-fix-redfish_info-exception.yml
+ - 7953-proxmox_kvm-fix_status_check.yml
- 7956-adding-releases_events-option-to-gitlab_hook-module.yaml
- 7963-fix-terraform-diff-absent.yml
- 7970-fix-cargo-path-idempotency.yaml
@@ -1213,92 +575,8 @@ releases:
- 7983-sudoers-add-support-noexec.yml
- 7994-bitwarden-session-arg.yaml
- 7996-add-templating-support-to-icinga2-inventory.yml
- - 8.4.0.yml
- - 8003-redfish-get-update-status-empty-response.yml
- - pkgin.yml
- modules:
- - description: Manages GitLab group access tokens
- name: gitlab_group_access_token
- namespace: ''
- - description: Manages GitLab project access tokens
- name: gitlab_project_access_token
- namespace: ''
- plugins:
- callback:
- - description: The default ansible callback without diff output
- name: default_without_diff
- namespace: null
- filter:
- - description: Difference of lists with a predictive order
- name: lists_difference
- namespace: null
- - description: Intersection of lists with a predictive order
- name: lists_intersect
- namespace: null
- - description: Symmetric Difference of lists with a predictive order
- name: lists_symmetric_difference
- namespace: null
- - description: Union of lists with a predictive order
- name: lists_union
- namespace: null
- release_date: '2024-02-26'
- 8.5.0:
- changes:
- bugfixes:
- - 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).
- minor_changes:
- - 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).
- release_summary: Regular feature and bugfix release with security fixes.
- security_fixes:
- - 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).
- fragments:
- - 7880-ipa-fix-sudo-and-hbcalrule-idempotence.yml
- - 7953-proxmox_kvm-fix_status_check.yml
- 7998-icinga2-inventory-group_by_hostgroups-parameter.yml
- - 8.5.0.yml
+ - 8003-redfish-get-update-status-empty-response.yml
- 8013-bitwarden-full-collection-item-list.yaml
- 8029-iptables-state-restore-check-mode.yml
- 8038-proxmox-startup.yml
@@ -1308,99 +586,11 @@ releases:
- 8075-optional-space-around-section-names.yaml
- 8087-removed-redundant-unicode-prefixes.yml
- 8091-consul-token-fixes.yaml
+ - 8100-haproxy-drain-fails-on-down-backend.yml
- 8116-java_cert-enable-owner-group-mode-args.yml
- 8118-fix-bond-slave-honoring-mtu.yml
- - 8133-add-error-message-for-linode-inventory-plugin.yaml
- - aix_filesystem-crfs-issue.yml
- - inventory-rce.yml
- - lxd-instances-api-endpoint-added.yml
- - pacemaker-cluster.yml
- modules:
- - description: Allows listing information about USB devices
- name: usb_facts
- namespace: ''
- release_date: '2024-03-25'
- 8.6.0:
- changes:
- bugfixes:
- - 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 <packages>``, 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).
- deprecated_features:
- - 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).
- minor_changes:
- - 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).
- release_summary: Regular bugfix and features release.
- fragments:
- - 7505-ini_file-section_has.yml
- - 8.6.0.yml
- - 8100-haproxy-drain-fails-on-down-backend.yml
- 8126-filesystem-bcachefs-support.yaml
+ - 8133-add-error-message-for-linode-inventory-plugin.yaml
- 8151-fix-lsvg_cmd-failed.yml
- 8153-java_cert-add-cert_content-arg.yml
- 8154-add-ovs-commands-to-nmcli-module.yml
@@ -1413,22 +603,194 @@ releases:
- 8183-from_ini_to_ini.yml
- 8188-bitwarden-add-organization_id.yml
- 8194-redfish-add-multipart-to-capabilities.yml
+ - 8199-added-usb-support-to-proxmox-module.yml
- 8211-riak-admin-sub-command-support.yml
- 8215-add-docker-v2-protocol.yml
- 8222-datetime.yml
- 8223-keycloak_client-additional-normalizations.yaml
- 8224-keycloak_realm-add-normalizations.yaml
- 8225-unsafe.yml
+ - 8226-mh-vardict.yml
- 8236-portage-select-feature.yml
- 8238-bitwarden-secrets-manager-rate-limit-retry-with-backoff.yml
- 8247-apt_rpm-latest.yml
- 8257-ssh-config-hostkey-support-accept-new.yaml
- 8263-apt_rpm-install-check.yml
+ - 8264-run_command.yml
+ - 8274-homebrew-force-formula.yml
+ - 8280-mh-deprecations.yml
+ - 8281-puppet-waitforlock.yaml
+ - 8285-apt_rpm-state-deprecate.yml
+ - 8288-cmdrunner-fmt-list-len-limits.yml
+ - 8289-python-runner.yml
+ - 8290-gandi-livedns-personal-access-token.yml
+ - 8303-fix-rendering-foreign-variables.yaml
+ - 8320-keycloak_user_federation-fix-diff-krbPrincipalAttribute.yaml
+ - 8321-fix-opentelemetry-callback.yml
+ - 8323-refactor-homebrew-logic-module-utils.yml
+ - 8334-proxmox-action-group.yml
+ - 8355-keycloak-idp-sanitize.yaml
+ - 8363-opentelemetry-export-to-a-file.yml
+ - 8367-fix-close-span-if-no-logs.yaml
+ - 8373-honour-disable-logs.yaml
+ - 8379-verbose-mode-pkg5.yml
+ - 8383-deprecate-gitlab-basic-auth.yml
+ - 9.0.0.yml
+ - add-ipa-sudorule-deny-cmd.yml
+ - aix_filesystem-crfs-issue.yml
+ - bitwarden-lookup-performance.yaml
- hipchat.yml
+ - internal-redirects.yml
+ - inventory-rce.yml
+ - lxd-instance-not-found-avoid-false-positives.yml
+ - lxd-instances-api-endpoint-added.yml
+ - pacemaker-cluster.yml
+ - pkgin.yml
- puppet_lang_force.yml
+ - remove_deprecated.yml
modules:
+ - description: Bootstrap ACLs in Consul.
+ name: consul_acl_bootstrap
+ namespace: ''
+ - description: Manipulate Consul auth methods.
+ name: consul_auth_method
+ namespace: ''
+ - description: Manipulate Consul binding rules.
+ name: consul_binding_rule
+ namespace: ''
+ - description: Manipulate Consul tokens.
+ name: consul_token
+ namespace: ''
+ - description: Run Django admin commands.
+ name: django_command
+ namespace: ''
+ - description: Enable or disable dnf repositories using config-manager.
+ name: dnf_config_manager
+ namespace: ''
+ - description: Read git configuration.
+ name: git_config_info
+ namespace: ''
+ - description: Manages GitLab group access tokens.
+ name: gitlab_group_access_token
+ namespace: ''
+ - description: Create, update, or delete GitLab issues.
+ name: gitlab_issue
+ namespace: ''
+ - description: Creates/updates/deletes GitLab Labels belonging to project or group.
+ name: gitlab_label
+ namespace: ''
+ - description: Creates/updates/deletes GitLab Milestones belonging to project
+ or group.
+ name: gitlab_milestone
+ namespace: ''
+ - description: Manages GitLab project access tokens.
+ name: gitlab_project_access_token
+ namespace: ''
- description: Allows administration of Keycloak client roles scope to restrict
the usage of certain roles to a other specific client applications.
name: keycloak_client_rolescope
namespace: ''
- release_date: '2024-04-22'
+ - description: Retrive component info in Keycloak.
+ name: keycloak_component_info
+ namespace: ''
+ - description: Allows administration of Keycloak realm role mappings into groups
+ with the Keycloak API.
+ name: keycloak_realm_rolemapping
+ namespace: ''
+ - description: Manage Nomad ACL tokens.
+ name: nomad_token
+ namespace: ''
+ - description: Retrieve information about one or more Proxmox VE nodes.
+ name: proxmox_node_info
+ namespace: ''
+ - description: List content from a Proxmox VE storage.
+ name: proxmox_storage_contents_info
+ namespace: ''
+ - description: Allows listing information about USB devices.
+ name: usb_facts
+ namespace: ''
+ plugins:
+ become:
+ - description: Systemd's run0.
+ name: run0
+ namespace: null
+ callback:
+ - description: The default ansible callback without diff output.
+ name: default_without_diff
+ namespace: null
+ - description: Adds simple timestamp for each header.
+ name: timestamp
+ namespace: null
+ connection:
+ - description: Run tasks in Incus instances via the Incus CLI.
+ name: incus
+ namespace: null
+ filter:
+ - description: Converts INI text input into a dictionary.
+ name: from_ini
+ namespace: null
+ - description: Difference of lists with a predictive order.
+ name: lists_difference
+ namespace: null
+ - description: Intersection of lists with a predictive order.
+ name: lists_intersect
+ namespace: null
+ - description: Symmetric Difference of lists with a predictive order.
+ name: lists_symmetric_difference
+ namespace: null
+ - description: Union of lists with a predictive order.
+ name: lists_union
+ namespace: null
+ - description: Converts a dictionary to the INI file format.
+ name: to_ini
+ namespace: null
+ lookup:
+ - description: Obtain short-lived Github App Access tokens.
+ name: github_app_access_token
+ namespace: null
+ - description: Fetch documents stored in 1Password.
+ name: onepassword_doc
+ namespace: null
+ test:
+ - description: Validates fully-qualified domain names against RFC 1123.
+ name: fqdn_valid
+ namespace: null
+ release_date: '2024-05-20'
+ 9.0.1:
+ changes:
+ bugfixes:
+ - 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).
+ - 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).
+ - 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).
+ - 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).
+ - 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_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).
+ - 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).
+ - 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).
+ - 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).
+ - 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).
+ minor_changes:
+ - ansible_galaxy_install - minor refactor in the module (https://github.com/ansible-collections/community.general/pull/8413).
+ release_summary: Bugfix release for inclusion in Ansible 10.0.0rc1.
+ fragments:
+ - 8403-fix-typeerror-in-keycloak-client.yaml
+ - 8406-fix-homebrew-cask-warning.yaml
+ - 8411-locale-gen-vardict.yml
+ - 8413-galaxy-refactor.yml
+ - 9.0.1.yml
+ release_date: '2024-05-27'
diff --git a/ansible_collections/community/general/changelogs/config.yaml b/ansible_collections/community/general/changelogs/config.yaml
index 23afe36d2..2cef6e26f 100644
--- a/ansible_collections/community/general/changelogs/config.yaml
+++ b/ansible_collections/community/general/changelogs/config.yaml
@@ -35,3 +35,6 @@ sections:
- - known_issues
- Known Issues
title: Community General
+trivial_section_name: trivial
+use_fqcn: true
+add_plugin_period: true
diff --git a/ansible_collections/community/general/meta/runtime.yml b/ansible_collections/community/general/meta/runtime.yml
index a9354aab3..edeb53005 100644
--- a/ansible_collections/community/general/meta/runtime.yml
+++ b/ansible_collections/community/general/meta/runtime.yml
@@ -12,6 +12,23 @@ action_groups:
- consul_role
- consul_session
- consul_token
+ proxmox:
+ - proxmox
+ - proxmox_disk
+ - proxmox_domain_info
+ - proxmox_group_info
+ - proxmox_kvm
+ - proxmox_nic
+ - proxmox_node_info
+ - proxmox_pool
+ - proxmox_pool_member
+ - proxmox_snap
+ - proxmox_storage_contents_info
+ - proxmox_storage_info
+ - proxmox_tasks_info
+ - proxmox_template
+ - proxmox_user_info
+ - proxmox_vm_info
plugin_routing:
callback:
actionable:
@@ -57,109 +74,109 @@ plugin_routing:
removal_version: 10.0.0
warning_text: Use community.general.consul_token and/or community.general.consul_policy instead.
rax_cbs_attachments:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on the deprecated package pyrax.
+ warning_text: This module relied on the deprecated package pyrax.
rax_cbs:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on the deprecated package pyrax.
+ warning_text: This module relied on the deprecated package pyrax.
rax_cdb_database:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on the deprecated package pyrax.
+ warning_text: This module relied on the deprecated package pyrax.
rax_cdb_user:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on the deprecated package pyrax.
+ warning_text: This module relied on the deprecated package pyrax.
rax_cdb:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on the deprecated package pyrax.
+ warning_text: This module relied on the deprecated package pyrax.
rax_clb_nodes:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on the deprecated package pyrax.
+ warning_text: This module relied on the deprecated package pyrax.
rax_clb_ssl:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on the deprecated package pyrax.
+ warning_text: This module relied on the deprecated package pyrax.
rax_clb:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on the deprecated package pyrax.
+ warning_text: This module relied on the deprecated package pyrax.
rax_dns_record:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on the deprecated package pyrax.
+ warning_text: This module relied on the deprecated package pyrax.
rax_dns:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on the deprecated package pyrax.
+ warning_text: This module relied on the deprecated package pyrax.
rax_facts:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on the deprecated package pyrax.
+ warning_text: This module relied on the deprecated package pyrax.
rax_files_objects:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on the deprecated package pyrax.
+ warning_text: This module relied on the deprecated package pyrax.
rax_files:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on the deprecated package pyrax.
+ warning_text: This module relied on the deprecated package pyrax.
rax_identity:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on the deprecated package pyrax.
+ warning_text: This module relied on the deprecated package pyrax.
rax_keypair:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on the deprecated package pyrax.
+ warning_text: This module relied on the deprecated package pyrax.
rax_meta:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on the deprecated package pyrax.
+ warning_text: This module relied on the deprecated package pyrax.
rax_mon_alarm:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on the deprecated package pyrax.
+ warning_text: This module relied on the deprecated package pyrax.
rax:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on the deprecated package pyrax.
+ warning_text: This module relied on the deprecated package pyrax.
rax_mon_check:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on the deprecated package pyrax.
+ warning_text: This module relied on the deprecated package pyrax.
rax_mon_entity:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on the deprecated package pyrax.
+ warning_text: This module relied on the deprecated package pyrax.
rax_mon_notification_plan:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on the deprecated package pyrax.
+ warning_text: This module relied on the deprecated package pyrax.
rax_mon_notification:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on the deprecated package pyrax.
+ warning_text: This module relied on the deprecated package pyrax.
rax_network:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on the deprecated package pyrax.
+ warning_text: This module relied on the deprecated package pyrax.
rax_queue:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on the deprecated package pyrax.
+ warning_text: This module relied on the deprecated package pyrax.
rax_scaling_group:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on the deprecated package pyrax.
+ warning_text: This module relied on the deprecated package pyrax.
rax_scaling_policy:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on the deprecated package pyrax.
+ warning_text: This module relied on the deprecated package pyrax.
rhn_channel:
deprecation:
removal_version: 10.0.0
@@ -170,543 +187,18 @@ plugin_routing:
removal_version: 10.0.0
warning_text: RHN is EOL, please contact the community.general maintainers
if still using this; see the module documentation for more details.
- database.aerospike.aerospike_migrations:
- redirect: community.general.aerospike_migrations
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.aerospike_migrations
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- monitoring.airbrake_deployment:
- redirect: community.general.airbrake_deployment
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.airbrake_deployment
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
stackdriver:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on HTTPS APIs that do not exist anymore,
+ warning_text: This module relied on HTTPS APIs that do not exist anymore,
and any new development in the direction of providing an alternative should
happen in the context of the google.cloud collection.
- system.aix_devices:
- redirect: community.general.aix_devices
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.aix_devices
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.aix_filesystem:
- redirect: community.general.aix_filesystem
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.aix_filesystem
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.aix_inittab:
- redirect: community.general.aix_inittab
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.aix_inittab
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.aix_lvg:
- redirect: community.general.aix_lvg
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.aix_lvg
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.aix_lvol:
- redirect: community.general.aix_lvol
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.aix_lvol
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- monitoring.alerta_customer:
- redirect: community.general.alerta_customer
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.alerta_customer
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.alicloud.ali_instance:
- redirect: community.general.ali_instance
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ali_instance
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
ali_instance_facts:
tombstone:
removal_version: 3.0.0
warning_text: Use community.general.ali_instance_info instead.
- cloud.alicloud.ali_instance_info:
- redirect: community.general.ali_instance_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ali_instance_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.alternatives:
- redirect: community.general.alternatives
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.alternatives
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.language.ansible_galaxy_install:
- redirect: community.general.ansible_galaxy_install
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ansible_galaxy_install
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- web_infrastructure.apache2_mod_proxy:
- redirect: community.general.apache2_mod_proxy
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.apache2_mod_proxy
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- web_infrastructure.apache2_module:
- redirect: community.general.apache2_module
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.apache2_module
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.apk:
- redirect: community.general.apk
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.apk
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.apt_repo:
- redirect: community.general.apt_repo
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.apt_repo
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.apt_rpm:
- redirect: community.general.apt_rpm
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.apt_rpm
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- files.archive:
- redirect: community.general.archive
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.archive
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.atomic.atomic_container:
- redirect: community.general.atomic_container
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.atomic_container
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.atomic.atomic_host:
- redirect: community.general.atomic_host
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.atomic_host
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.atomic.atomic_image:
- redirect: community.general.atomic_image
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.atomic_image
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.awall:
- redirect: community.general.awall
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.awall
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.beadm:
- redirect: community.general.beadm
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.beadm
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- notification.bearychat:
- redirect: community.general.bearychat
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.bearychat
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- monitoring.bigpanda:
- redirect: community.general.bigpanda
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.bigpanda
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- source_control.bitbucket.bitbucket_access_key:
- redirect: community.general.bitbucket_access_key
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.bitbucket_access_key
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- source_control.bitbucket.bitbucket_pipeline_key_pair:
- redirect: community.general.bitbucket_pipeline_key_pair
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.bitbucket_pipeline_key_pair
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- source_control.bitbucket.bitbucket_pipeline_known_host:
- redirect: community.general.bitbucket_pipeline_known_host
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.bitbucket_pipeline_known_host
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- source_control.bitbucket.bitbucket_pipeline_variable:
- redirect: community.general.bitbucket_pipeline_variable
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.bitbucket_pipeline_variable
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.language.bower:
- redirect: community.general.bower
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.bower
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.language.bundler:
- redirect: community.general.bundler
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.bundler
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- source_control.bzr:
- redirect: community.general.bzr
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.bzr
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- notification.campfire:
- redirect: community.general.campfire
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.campfire
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.capabilities:
- redirect: community.general.capabilities
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.capabilities
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.language.cargo:
- redirect: community.general.cargo
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.cargo
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- notification.catapult:
- redirect: community.general.catapult
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.catapult
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- monitoring.circonus_annotation:
- redirect: community.general.circonus_annotation
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.circonus_annotation
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
cisco_spark:
redirect: community.general.cisco_webex
- notification.cisco_spark:
- redirect: community.general.cisco_webex
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.cisco_webex
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- notification.cisco_webex:
- redirect: community.general.cisco_webex
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.cisco_webex
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.centurylink.clc_aa_policy:
- redirect: community.general.clc_aa_policy
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.clc_aa_policy
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.centurylink.clc_alert_policy:
- redirect: community.general.clc_alert_policy
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.clc_alert_policy
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.centurylink.clc_blueprint_package:
- redirect: community.general.clc_blueprint_package
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.clc_blueprint_package
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.centurylink.clc_firewall_policy:
- redirect: community.general.clc_firewall_policy
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.clc_firewall_policy
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.centurylink.clc_group:
- redirect: community.general.clc_group
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.clc_group
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.centurylink.clc_loadbalancer:
- redirect: community.general.clc_loadbalancer
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.clc_loadbalancer
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.centurylink.clc_modify_server:
- redirect: community.general.clc_modify_server
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.clc_modify_server
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.centurylink.clc_publicip:
- redirect: community.general.clc_publicip
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.clc_publicip
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.centurylink.clc_server:
- redirect: community.general.clc_server
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.clc_server
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.centurylink.clc_server_snapshot:
- redirect: community.general.clc_server_snapshot
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.clc_server_snapshot
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.misc.cloud_init_data_facts:
- redirect: community.general.cloud_init_data_facts
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.cloud_init_data_facts
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- net_tools.cloudflare_dns:
- redirect: community.general.cloudflare_dns
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.cloudflare_dns
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.cobbler.cobbler_sync:
- redirect: community.general.cobbler_sync
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.cobbler_sync
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.cobbler.cobbler_system:
- redirect: community.general.cobbler_system
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.cobbler_system
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.language.composer:
- redirect: community.general.composer
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.composer
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- clustering.consul.consul:
- redirect: community.general.consul
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.consul
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- clustering.consul.consul_acl:
- redirect: community.general.consul_acl
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.consul_acl
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- clustering.consul.consul_kv:
- redirect: community.general.consul_kv
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.consul_kv
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- clustering.consul.consul_session:
- redirect: community.general.consul_session
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.consul_session
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.copr:
- redirect: community.general.copr
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.copr
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.language.cpanm:
- redirect: community.general.cpanm
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.cpanm
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.cronvar:
- redirect: community.general.cronvar
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.cronvar
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.crypttab:
- redirect: community.general.crypttab
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.crypttab
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- monitoring.datadog.datadog_downtime:
- redirect: community.general.datadog_downtime
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.datadog_downtime
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- monitoring.datadog.datadog_event:
- redirect: community.general.datadog_event
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.datadog_event
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- monitoring.datadog.datadog_monitor:
- redirect: community.general.datadog_monitor
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.datadog_monitor
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.dconf:
- redirect: community.general.dconf
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.dconf
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- web_infrastructure.deploy_helper:
- redirect: community.general.deploy_helper
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.deploy_helper
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.dimensiondata.dimensiondata_network:
- redirect: community.general.dimensiondata_network
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.dimensiondata_network
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.dimensiondata.dimensiondata_vlan:
- redirect: community.general.dimensiondata_vlan
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.dimensiondata_vlan
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- notification.discord:
- redirect: community.general.discord
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.discord
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- web_infrastructure.django_manage:
- redirect: community.general.django_manage
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.django_manage
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.dnf_versionlock:
- redirect: community.general.dnf_versionlock
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.dnf_versionlock
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- net_tools.dnsimple:
- redirect: community.general.dnsimple
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.dnsimple
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- net_tools.dnsimple_info:
- redirect: community.general.dnsimple_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.dnsimple_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- net_tools.dnsmadeeasy:
- redirect: community.general.dnsmadeeasy
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.dnsmadeeasy
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
docker_compose:
redirect: community.docker.docker_compose
docker_config:
@@ -761,106 +253,15 @@ plugin_routing:
redirect: community.docker.docker_volume
docker_volume_info:
redirect: community.docker.docker_volume_info
- system.dpkg_divert:
- redirect: community.general.dpkg_divert
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.dpkg_divert
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.language.easy_install:
- redirect: community.general.easy_install
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.easy_install
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- web_infrastructure.ejabberd_user:
- redirect: community.general.ejabberd_user
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ejabberd_user
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- database.misc.elasticsearch_plugin:
- redirect: community.general.elasticsearch_plugin
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.elasticsearch_plugin
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- storage.emc.emc_vnx_sg_member:
- redirect: community.general.emc_vnx_sg_member
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.emc_vnx_sg_member
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- clustering.etcd3:
- redirect: community.general.etcd3
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.etcd3
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.facter:
- redirect: community.general.facter
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.facter
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- files.filesize:
- redirect: community.general.filesize
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.filesize
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.filesystem:
- redirect: community.general.filesystem
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.filesystem
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.flatpak:
- redirect: community.general.flatpak
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.flatpak
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.flatpak_remote:
- redirect: community.general.flatpak_remote
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.flatpak_remote
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
flowdock:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on HTTPS APIs that do not exist anymore and
+ warning_text: This module relied on HTTPS APIs that do not exist anymore and
there is no clear path to update.
- notification.flowdock:
- redirect: community.general.flowdock
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.flowdock
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
foreman:
tombstone:
removal_version: 2.0.0
warning_text: Use the modules from the theforeman.foreman collection instead.
- net_tools.gandi_livedns:
- redirect: community.general.gandi_livedns
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.gandi_livedns
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
gc_storage:
redirect: community.google.gc_storage
gcdns_record:
@@ -895,20 +296,6 @@ plugin_routing:
redirect: community.google.gce_snapshot
gce_tag:
redirect: community.google.gce_tag
- system.gconftool2:
- redirect: community.general.gconftool2
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.gconftool2
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.gconftool2_info:
- redirect: community.general.gconftool2_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.gconftool2_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
gcp_backend_service:
tombstone:
removal_version: 2.0.0
@@ -944,193 +331,11 @@ plugin_routing:
removal_version: 2.0.0
warning_text: Use google.cloud.gcp_spanner_database and/or google.cloud.gcp_spanner_instance
instead.
- packaging.language.gem:
- redirect: community.general.gem
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.gem
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- source_control.git_config:
- redirect: community.general.git_config
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.git_config
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- source_control.github.github_deploy_key:
- redirect: community.general.github_deploy_key
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.github_deploy_key
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
github_hooks:
tombstone:
removal_version: 2.0.0
warning_text: Use community.general.github_webhook and community.general.github_webhook_info
instead.
- source_control.github.github_issue:
- redirect: community.general.github_issue
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.github_issue
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- source_control.github.github_key:
- redirect: community.general.github_key
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.github_key
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- source_control.github.github_release:
- redirect: community.general.github_release
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.github_release
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- source_control.github.github_repo:
- redirect: community.general.github_repo
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.github_repo
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- source_control.github.github_webhook:
- redirect: community.general.github_webhook
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.github_webhook
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- source_control.github.github_webhook_info:
- redirect: community.general.github_webhook_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.github_webhook_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- source_control.gitlab.gitlab_branch:
- redirect: community.general.gitlab_branch
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.gitlab_branch
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- source_control.gitlab.gitlab_deploy_key:
- redirect: community.general.gitlab_deploy_key
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.gitlab_deploy_key
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- source_control.gitlab.gitlab_group:
- redirect: community.general.gitlab_group
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.gitlab_group
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- source_control.gitlab.gitlab_group_members:
- redirect: community.general.gitlab_group_members
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.gitlab_group_members
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- source_control.gitlab.gitlab_group_variable:
- redirect: community.general.gitlab_group_variable
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.gitlab_group_variable
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- source_control.gitlab.gitlab_hook:
- redirect: community.general.gitlab_hook
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.gitlab_hook
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- source_control.gitlab.gitlab_project:
- redirect: community.general.gitlab_project
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.gitlab_project
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- source_control.gitlab.gitlab_project_members:
- redirect: community.general.gitlab_project_members
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.gitlab_project_members
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- source_control.gitlab.gitlab_project_variable:
- redirect: community.general.gitlab_project_variable
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.gitlab_project_variable
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- source_control.gitlab.gitlab_protected_branch:
- redirect: community.general.gitlab_protected_branch
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.gitlab_protected_branch
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- source_control.gitlab.gitlab_runner:
- redirect: community.general.gitlab_runner
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.gitlab_runner
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- source_control.gitlab.gitlab_user:
- redirect: community.general.gitlab_user
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.gitlab_user
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- notification.grove:
- redirect: community.general.grove
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.grove
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- web_infrastructure.gunicorn:
- redirect: community.general.gunicorn
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.gunicorn
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- database.saphana.hana_query:
- redirect: community.general.hana_query
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.hana_query
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- net_tools.haproxy:
- redirect: community.general.haproxy
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.haproxy
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.heroku.heroku_collaborator:
- redirect: community.general.heroku_collaborator
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.heroku_collaborator
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
hana_query:
redirect: community.sap_libs.sap_hdbsql
hetzner_failover_ip:
@@ -1141,740 +346,26 @@ plugin_routing:
redirect: community.hrobot.firewall
hetzner_firewall_info:
redirect: community.hrobot.firewall_info
- source_control.hg:
- redirect: community.general.hg
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.hg
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- notification.hipchat:
- redirect: community.general.hipchat
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.hipchat
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.homebrew:
- redirect: community.general.homebrew
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.homebrew
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.homebrew_cask:
- redirect: community.general.homebrew_cask
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.homebrew_cask
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.homebrew_tap:
- redirect: community.general.homebrew_tap
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.homebrew_tap
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.homectl:
- redirect: community.general.homectl
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.homectl
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- monitoring.honeybadger_deployment:
- redirect: community.general.honeybadger_deployment
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.honeybadger_deployment
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.hpilo.hpilo_boot:
- redirect: community.general.hpilo_boot
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.hpilo_boot
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
hpilo_facts:
tombstone:
removal_version: 3.0.0
warning_text: Use community.general.hpilo_info instead.
- remote_management.hpilo.hpilo_info:
- redirect: community.general.hpilo_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.hpilo_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.hpilo.hponcfg:
- redirect: community.general.hponcfg
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.hponcfg
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- web_infrastructure.htpasswd:
- redirect: community.general.htpasswd
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.htpasswd
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.huawei.hwc_ecs_instance:
- redirect: community.general.hwc_ecs_instance
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.hwc_ecs_instance
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.huawei.hwc_evs_disk:
- redirect: community.general.hwc_evs_disk
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.hwc_evs_disk
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.huawei.hwc_network_vpc:
- redirect: community.general.hwc_network_vpc
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.hwc_network_vpc
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.huawei.hwc_smn_topic:
- redirect: community.general.hwc_smn_topic
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.hwc_smn_topic
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.huawei.hwc_vpc_eip:
- redirect: community.general.hwc_vpc_eip
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.hwc_vpc_eip
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.huawei.hwc_vpc_peering_connect:
- redirect: community.general.hwc_vpc_peering_connect
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.hwc_vpc_peering_connect
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.huawei.hwc_vpc_port:
- redirect: community.general.hwc_vpc_port
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.hwc_vpc_port
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.huawei.hwc_vpc_private_ip:
- redirect: community.general.hwc_vpc_private_ip
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.hwc_vpc_private_ip
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.huawei.hwc_vpc_route:
- redirect: community.general.hwc_vpc_route
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.hwc_vpc_route
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.huawei.hwc_vpc_security_group:
- redirect: community.general.hwc_vpc_security_group
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.hwc_vpc_security_group
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.huawei.hwc_vpc_security_group_rule:
- redirect: community.general.hwc_vpc_security_group_rule
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.hwc_vpc_security_group_rule
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.huawei.hwc_vpc_subnet:
- redirect: community.general.hwc_vpc_subnet
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.hwc_vpc_subnet
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- storage.ibm.ibm_sa_domain:
- redirect: community.general.ibm_sa_domain
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ibm_sa_domain
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- storage.ibm.ibm_sa_host:
- redirect: community.general.ibm_sa_host
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ibm_sa_host
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- storage.ibm.ibm_sa_host_ports:
- redirect: community.general.ibm_sa_host_ports
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ibm_sa_host_ports
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- storage.ibm.ibm_sa_pool:
- redirect: community.general.ibm_sa_pool
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ibm_sa_pool
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- storage.ibm.ibm_sa_vol:
- redirect: community.general.ibm_sa_vol
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ibm_sa_vol
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- storage.ibm.ibm_sa_vol_map:
- redirect: community.general.ibm_sa_vol_map
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ibm_sa_vol_map
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- monitoring.icinga2_feature:
- redirect: community.general.icinga2_feature
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.icinga2_feature
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- monitoring.icinga2_host:
- redirect: community.general.icinga2_host
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.icinga2_host
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
idrac_firmware:
redirect: dellemc.openmanage.idrac_firmware
- remote_management.redfish.idrac_redfish_command:
- redirect: community.general.idrac_redfish_command
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.idrac_redfish_command
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.redfish.idrac_redfish_config:
- redirect: community.general.idrac_redfish_config
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.idrac_redfish_config
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
idrac_redfish_facts:
tombstone:
removal_version: 3.0.0
warning_text: Use community.general.idrac_redfish_info instead.
- remote_management.redfish.idrac_redfish_info:
- redirect: community.general.idrac_redfish_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.idrac_redfish_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
idrac_server_config_profile:
redirect: dellemc.openmanage.idrac_server_config_profile
- remote_management.redfish.ilo_redfish_config:
- redirect: community.general.ilo_redfish_config
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ilo_redfish_config
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.redfish.ilo_redfish_info:
- redirect: community.general.ilo_redfish_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ilo_redfish_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.imc.imc_rest:
- redirect: community.general.imc_rest
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.imc_rest
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.smartos.imgadm:
- redirect: community.general.imgadm
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.imgadm
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- net_tools.infinity.infinity:
- redirect: community.general.infinity
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.infinity
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- database.influxdb.influxdb_database:
- redirect: community.general.influxdb_database
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.influxdb_database
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- database.influxdb.influxdb_query:
- redirect: community.general.influxdb_query
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.influxdb_query
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- database.influxdb.influxdb_retention_policy:
- redirect: community.general.influxdb_retention_policy
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.influxdb_retention_policy
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- database.influxdb.influxdb_user:
- redirect: community.general.influxdb_user
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.influxdb_user
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- database.influxdb.influxdb_write:
- redirect: community.general.influxdb_write
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.influxdb_write
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- files.ini_file:
- redirect: community.general.ini_file
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ini_file
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.installp:
- redirect: community.general.installp
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.installp
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.interfaces_file:
- redirect: community.general.interfaces_file
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.interfaces_file
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- net_tools.ip_netns:
- redirect: community.general.ip_netns
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ip_netns
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- identity.ipa.ipa_config:
- redirect: community.general.ipa_config
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ipa_config
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- identity.ipa.ipa_dnsrecord:
- redirect: community.general.ipa_dnsrecord
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ipa_dnsrecord
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- identity.ipa.ipa_dnszone:
- redirect: community.general.ipa_dnszone
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ipa_dnszone
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- identity.ipa.ipa_group:
- redirect: community.general.ipa_group
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ipa_group
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- identity.ipa.ipa_hbacrule:
- redirect: community.general.ipa_hbacrule
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ipa_hbacrule
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- identity.ipa.ipa_host:
- redirect: community.general.ipa_host
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ipa_host
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- identity.ipa.ipa_hostgroup:
- redirect: community.general.ipa_hostgroup
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ipa_hostgroup
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- identity.ipa.ipa_otpconfig:
- redirect: community.general.ipa_otpconfig
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ipa_otpconfig
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- identity.ipa.ipa_otptoken:
- redirect: community.general.ipa_otptoken
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ipa_otptoken
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- identity.ipa.ipa_pwpolicy:
- redirect: community.general.ipa_pwpolicy
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ipa_pwpolicy
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- identity.ipa.ipa_role:
- redirect: community.general.ipa_role
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ipa_role
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- identity.ipa.ipa_service:
- redirect: community.general.ipa_service
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ipa_service
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- identity.ipa.ipa_subca:
- redirect: community.general.ipa_subca
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ipa_subca
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- identity.ipa.ipa_sudocmd:
- redirect: community.general.ipa_sudocmd
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ipa_sudocmd
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- identity.ipa.ipa_sudocmdgroup:
- redirect: community.general.ipa_sudocmdgroup
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ipa_sudocmdgroup
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- identity.ipa.ipa_sudorule:
- redirect: community.general.ipa_sudorule
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ipa_sudorule
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- identity.ipa.ipa_user:
- redirect: community.general.ipa_user
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ipa_user
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- identity.ipa.ipa_vault:
- redirect: community.general.ipa_vault
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ipa_vault
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- net_tools.ipify_facts:
- redirect: community.general.ipify_facts
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ipify_facts
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- net_tools.ipinfoio_facts:
- redirect: community.general.ipinfoio_facts
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ipinfoio_facts
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.ipmi.ipmi_boot:
- redirect: community.general.ipmi_boot
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ipmi_boot
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.ipmi.ipmi_power:
- redirect: community.general.ipmi_power
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ipmi_power
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.iptables_state:
- redirect: community.general.iptables_state
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.iptables_state
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- net_tools.ipwcli_dns:
- redirect: community.general.ipwcli_dns
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ipwcli_dns
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- notification.irc:
- redirect: community.general.irc
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.irc
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- files.iso_create:
- redirect: community.general.iso_create
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.iso_create
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- files.iso_extract:
- redirect: community.general.iso_extract
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.iso_extract
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- files.iso_customize:
- redirect: community.general.iso_customize
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.iso_customize
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- notification.jabber:
- redirect: community.general.jabber
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.jabber
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.java_cert:
- redirect: community.general.java_cert
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.java_cert
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.java_keystore:
- redirect: community.general.java_keystore
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.java_keystore
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- web_infrastructure.jboss:
- redirect: community.general.jboss
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.jboss
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- web_infrastructure.jenkins_build:
- redirect: community.general.jenkins_build
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.jenkins_build
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- web_infrastructure.jenkins_job:
- redirect: community.general.jenkins_job
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.jenkins_job
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
jenkins_job_facts:
tombstone:
removal_version: 3.0.0
warning_text: Use community.general.jenkins_job_info instead.
- web_infrastructure.jenkins_job_info:
- redirect: community.general.jenkins_job_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.jenkins_job_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- web_infrastructure.jenkins_plugin:
- redirect: community.general.jenkins_plugin
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.jenkins_plugin
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- web_infrastructure.jenkins_script:
- redirect: community.general.jenkins_script
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.jenkins_script
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- web_infrastructure.jira:
- redirect: community.general.jira
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.jira
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
katello:
tombstone:
removal_version: 2.0.0
warning_text: Use the modules from the theforeman.foreman collection instead.
- system.kernel_blacklist:
- redirect: community.general.kernel_blacklist
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.kernel_blacklist
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- identity.keycloak.keycloak_authentication:
- redirect: community.general.keycloak_authentication
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.keycloak_authentication
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- identity.keycloak.keycloak_client:
- redirect: community.general.keycloak_client
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.keycloak_client
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- identity.keycloak.keycloak_client_rolemapping:
- redirect: community.general.keycloak_client_rolemapping
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.keycloak_client_rolemapping
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- identity.keycloak.keycloak_clientscope:
- redirect: community.general.keycloak_clientscope
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.keycloak_clientscope
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- identity.keycloak.keycloak_clienttemplate:
- redirect: community.general.keycloak_clienttemplate
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.keycloak_clienttemplate
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- identity.keycloak.keycloak_group:
- redirect: community.general.keycloak_group
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.keycloak_group
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- identity.keycloak.keycloak_identity_provider:
- redirect: community.general.keycloak_identity_provider
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.keycloak_identity_provider
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- identity.keycloak.keycloak_realm:
- redirect: community.general.keycloak_realm
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.keycloak_realm
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- identity.keycloak.keycloak_realm_info:
- redirect: community.general.keycloak_realm_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.keycloak_realm_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- identity.keycloak.keycloak_role:
- redirect: community.general.keycloak_role
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.keycloak_role
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- identity.keycloak.keycloak_user_federation:
- redirect: community.general.keycloak_user_federation
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.keycloak_user_federation
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- identity.keycloak.keycloak_user_rolemapping:
- redirect: community.general.keycloak_user_rolemapping
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.keycloak_user_rolemapping
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.keyring:
- redirect: community.general.keyring
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.keyring
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.keyring_info:
- redirect: community.general.keyring_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.keyring_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- database.misc.kibana_plugin:
- redirect: community.general.kibana_plugin
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.kibana_plugin
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
kubevirt_cdi_upload:
redirect: community.kubevirt.kubevirt_cdi_upload
kubevirt_preset:
@@ -1887,115 +378,10 @@ plugin_routing:
redirect: community.kubevirt.kubevirt_template
kubevirt_vm:
redirect: community.kubevirt.kubevirt_vm
- system.launchd:
- redirect: community.general.launchd
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.launchd
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.layman:
- redirect: community.general.layman
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.layman
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.lbu:
- redirect: community.general.lbu
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.lbu
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
ldap_attr:
tombstone:
removal_version: 3.0.0
warning_text: Use community.general.ldap_attrs instead.
- net_tools.ldap.ldap_attrs:
- redirect: community.general.ldap_attrs
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ldap_attrs
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- net_tools.ldap.ldap_entry:
- redirect: community.general.ldap_entry
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ldap_entry
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- net_tools.ldap.ldap_passwd:
- redirect: community.general.ldap_passwd
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ldap_passwd
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- net_tools.ldap.ldap_search:
- redirect: community.general.ldap_search
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ldap_search
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- monitoring.librato_annotation:
- redirect: community.general.librato_annotation
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.librato_annotation
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.linode.linode:
- redirect: community.general.linode
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.linode
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.linode.linode_v4:
- redirect: community.general.linode_v4
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.linode_v4
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.listen_ports_facts:
- redirect: community.general.listen_ports_facts
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.listen_ports_facts
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- net_tools.lldp:
- redirect: community.general.lldp
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.lldp
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.locale_gen:
- redirect: community.general.locale_gen
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.locale_gen
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- monitoring.logentries:
- redirect: community.general.logentries
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.logentries
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- notification.logentries_msg:
- redirect: community.general.logentries_msg
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.logentries_msg
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
logicmonitor:
tombstone:
removal_version: 1.0.0
@@ -2006,280 +392,14 @@ plugin_routing:
removal_version: 1.0.0
warning_text: The logicmonitor_facts module is no longer maintained and the
API used has been disabled in 2017.
- monitoring.logstash_plugin:
- redirect: community.general.logstash_plugin
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.logstash_plugin
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.lvg:
- redirect: community.general.lvg
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.lvg
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.lvol:
- redirect: community.general.lvol
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.lvol
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.lxc.lxc_container:
- redirect: community.general.lxc_container
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.lxc_container
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.lxca.lxca_cmms:
- redirect: community.general.lxca_cmms
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.lxca_cmms
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.lxca.lxca_nodes:
- redirect: community.general.lxca_nodes
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.lxca_nodes
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.lxd.lxd_container:
- redirect: community.general.lxd_container
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.lxd_container
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.lxd.lxd_profile:
- redirect: community.general.lxd_profile
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.lxd_profile
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.lxd.lxd_project:
- redirect: community.general.lxd_project
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.lxd_project
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.macports:
- redirect: community.general.macports
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.macports
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- notification.mail:
- redirect: community.general.mail
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.mail
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.make:
- redirect: community.general.make
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.make
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.manageiq.manageiq_alert_profiles:
- redirect: community.general.manageiq_alert_profiles
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.manageiq_alert_profiles
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.manageiq.manageiq_alerts:
- redirect: community.general.manageiq_alerts
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.manageiq_alerts
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.manageiq.manageiq_group:
- redirect: community.general.manageiq_group
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.manageiq_group
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.manageiq.manageiq_policies:
- redirect: community.general.manageiq_policies
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.manageiq_policies
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.manageiq.manageiq_policies_info:
- redirect: community.general.manageiq_policies_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.manageiq_policies_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.manageiq.manageiq_provider:
- redirect: community.general.manageiq_provider
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.manageiq_provider
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.manageiq.manageiq_tags:
- redirect: community.general.manageiq_tags
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.manageiq_tags
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.manageiq.manageiq_tags_info:
- redirect: community.general.manageiq_tags_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.manageiq_tags_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.manageiq.manageiq_tenant:
- redirect: community.general.manageiq_tenant
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.manageiq_tenant
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.manageiq.manageiq_user:
- redirect: community.general.manageiq_user
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.manageiq_user
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.mas:
- redirect: community.general.mas
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.mas
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- notification.matrix:
- redirect: community.general.matrix
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.matrix
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- notification.mattermost:
- redirect: community.general.mattermost
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.mattermost
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.language.maven_artifact:
- redirect: community.general.maven_artifact
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.maven_artifact
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.memset.memset_dns_reload:
- redirect: community.general.memset_dns_reload
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.memset_dns_reload
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
memset_memstore_facts:
tombstone:
removal_version: 3.0.0
warning_text: Use community.general.memset_memstore_info instead.
- cloud.memset.memset_memstore_info:
- redirect: community.general.memset_memstore_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.memset_memstore_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
memset_server_facts:
tombstone:
removal_version: 3.0.0
warning_text: Use community.general.memset_server_info instead.
- cloud.memset.memset_server_info:
- redirect: community.general.memset_server_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.memset_server_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.memset.memset_zone:
- redirect: community.general.memset_zone
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.memset_zone
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.memset.memset_zone_domain:
- redirect: community.general.memset_zone_domain
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.memset_zone_domain
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.memset.memset_zone_record:
- redirect: community.general.memset_zone_record
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.memset_zone_record
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.mksysb:
- redirect: community.general.mksysb
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.mksysb
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.modprobe:
- redirect: community.general.modprobe
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.modprobe
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- monitoring.monit:
- redirect: community.general.monit
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.monit
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- notification.mqtt:
- redirect: community.general.mqtt
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.mqtt
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- database.mssql.mssql_db:
- redirect: community.general.mssql_db
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.mssql_db
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- database.mssql.mssql_script:
- redirect: community.general.mssql_script
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.mssql_script
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
na_cdot_aggregate:
tombstone:
removal_version: 2.0.0
@@ -2316,52 +436,10 @@ plugin_routing:
tombstone:
removal_version: 3.0.0
warning_text: Use netapp.ontap.na_ontap_info instead.
- monitoring.nagios:
- redirect: community.general.nagios
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.nagios
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- net_tools.netcup_dns:
- redirect: community.general.netcup_dns
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.netcup_dns
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- monitoring.newrelic_deployment:
- redirect: community.general.newrelic_deployment
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.newrelic_deployment
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- notification.nexmo:
- redirect: community.general.nexmo
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.nexmo
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
nginx_status_facts:
tombstone:
removal_version: 3.0.0
warning_text: Use community.general.nginx_status_info instead.
- web_infrastructure.nginx_status_info:
- redirect: community.general.nginx_status_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.nginx_status_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.smartos.nictagadm:
- redirect: community.general.nictagadm
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.nictagadm
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
nios_a_record:
redirect: infoblox.nios_modules.nios_a_record
nios_aaaa_record:
@@ -2394,400 +472,57 @@ plugin_routing:
redirect: infoblox.nios_modules.nios_txt_record
nios_zone:
redirect: infoblox.nios_modules.nios_zone
- net_tools.nmcli:
- redirect: community.general.nmcli
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.nmcli
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- clustering.nomad.nomad_job:
- redirect: community.general.nomad_job
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.nomad_job
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- clustering.nomad.nomad_job_info:
- redirect: community.general.nomad_job_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.nomad_job_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.nosh:
- redirect: community.general.nosh
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.nosh
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.language.npm:
- redirect: community.general.npm
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.npm
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- net_tools.nsupdate:
- redirect: community.general.nsupdate
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.nsupdate
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.oracle.oci_vcn:
- redirect: community.general.oci_vcn
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.oci_vcn
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- database.misc.odbc:
- redirect: community.general.odbc
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.odbc
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- notification.office_365_connector_card:
- redirect: community.general.office_365_connector_card
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.office_365_connector_card
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.ohai:
- redirect: community.general.ohai
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ohai
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- net_tools.omapi_host:
- redirect: community.general.omapi_host
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.omapi_host
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
ome_device_info:
redirect: dellemc.openmanage.ome_device_info
- cloud.opennebula.one_host:
- redirect: community.general.one_host
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.one_host
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.opennebula.one_image:
- redirect: community.general.one_image
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.one_image
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
one_image_facts:
tombstone:
removal_version: 3.0.0
warning_text: Use community.general.one_image_info instead.
- cloud.opennebula.one_image_info:
- redirect: community.general.one_image_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.one_image_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.opennebula.one_service:
- redirect: community.general.one_service
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.one_service
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.opennebula.one_template:
- redirect: community.general.one_template
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.one_template
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.opennebula.one_vm:
- redirect: community.general.one_vm
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.one_vm
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.oneandone.oneandone_firewall_policy:
- redirect: community.general.oneandone_firewall_policy
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.oneandone_firewall_policy
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.oneandone.oneandone_load_balancer:
- redirect: community.general.oneandone_load_balancer
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.oneandone_load_balancer
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.oneandone.oneandone_monitoring_policy:
- redirect: community.general.oneandone_monitoring_policy
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.oneandone_monitoring_policy
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.oneandone.oneandone_private_network:
- redirect: community.general.oneandone_private_network
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.oneandone_private_network
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.oneandone.oneandone_public_ip:
- redirect: community.general.oneandone_public_ip
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.oneandone_public_ip
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.oneandone.oneandone_server:
- redirect: community.general.oneandone_server
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.oneandone_server
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
onepassword_facts:
tombstone:
removal_version: 3.0.0
warning_text: Use community.general.onepassword_info instead.
- identity.onepassword_info:
- redirect: community.general.onepassword_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.onepassword_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
oneview_datacenter_facts:
tombstone:
removal_version: 3.0.0
warning_text: Use community.general.oneview_datacenter_info instead.
- remote_management.oneview.oneview_datacenter_info:
- redirect: community.general.oneview_datacenter_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.oneview_datacenter_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
oneview_enclosure_facts:
tombstone:
removal_version: 3.0.0
warning_text: Use community.general.oneview_enclosure_info instead.
- remote_management.oneview.oneview_enclosure_info:
- redirect: community.general.oneview_enclosure_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.oneview_enclosure_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.oneview.oneview_ethernet_network:
- redirect: community.general.oneview_ethernet_network
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.oneview_ethernet_network
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
oneview_ethernet_network_facts:
tombstone:
removal_version: 3.0.0
warning_text: Use community.general.oneview_ethernet_network_info instead.
- remote_management.oneview.oneview_ethernet_network_info:
- redirect: community.general.oneview_ethernet_network_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.oneview_ethernet_network_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.oneview.oneview_fc_network:
- redirect: community.general.oneview_fc_network
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.oneview_fc_network
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
oneview_fc_network_facts:
tombstone:
removal_version: 3.0.0
warning_text: Use community.general.oneview_fc_network_info instead.
- remote_management.oneview.oneview_fc_network_info:
- redirect: community.general.oneview_fc_network_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.oneview_fc_network_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.oneview.oneview_fcoe_network:
- redirect: community.general.oneview_fcoe_network
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.oneview_fcoe_network
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
oneview_fcoe_network_facts:
tombstone:
removal_version: 3.0.0
warning_text: Use community.general.oneview_fcoe_network_info instead.
- remote_management.oneview.oneview_fcoe_network_info:
- redirect: community.general.oneview_fcoe_network_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.oneview_fcoe_network_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.oneview.oneview_logical_interconnect_group:
- redirect: community.general.oneview_logical_interconnect_group
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.oneview_logical_interconnect_group
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
oneview_logical_interconnect_group_facts:
tombstone:
removal_version: 3.0.0
warning_text: Use community.general.oneview_logical_interconnect_group_info
instead.
- remote_management.oneview.oneview_logical_interconnect_group_info:
- redirect: community.general.oneview_logical_interconnect_group_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.oneview_logical_interconnect_group_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.oneview.oneview_network_set:
- redirect: community.general.oneview_network_set
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.oneview_network_set
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
oneview_network_set_facts:
tombstone:
removal_version: 3.0.0
warning_text: Use community.general.oneview_network_set_info instead.
- remote_management.oneview.oneview_network_set_info:
- redirect: community.general.oneview_network_set_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.oneview_network_set_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.oneview.oneview_san_manager:
- redirect: community.general.oneview_san_manager
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.oneview_san_manager
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
oneview_san_manager_facts:
tombstone:
removal_version: 3.0.0
warning_text: Use community.general.oneview_san_manager_info instead.
- remote_management.oneview.oneview_san_manager_info:
- redirect: community.general.oneview_san_manager_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.oneview_san_manager_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
online_server_facts:
tombstone:
removal_version: 3.0.0
warning_text: Use community.general.online_server_info instead.
- cloud.online.online_server_info:
- redirect: community.general.online_server_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.online_server_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
online_user_facts:
tombstone:
removal_version: 3.0.0
warning_text: Use community.general.online_user_info instead.
- cloud.online.online_user_info:
- redirect: community.general.online_user_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.online_user_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.open_iscsi:
- redirect: community.general.open_iscsi
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.open_iscsi
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.openbsd_pkg:
- redirect: community.general.openbsd_pkg
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.openbsd_pkg
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- identity.opendj.opendj_backendprop:
- redirect: community.general.opendj_backendprop
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.opendj_backendprop
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.openwrt_init:
- redirect: community.general.openwrt_init
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.openwrt_init
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.opkg:
- redirect: community.general.opkg
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.opkg
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.osx_defaults:
- redirect: community.general.osx_defaults
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.osx_defaults
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.ovh.ovh_ip_failover:
- redirect: community.general.ovh_ip_failover
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ovh_ip_failover
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.ovh.ovh_ip_loadbalancing_backend:
- redirect: community.general.ovh_ip_loadbalancing_backend
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ovh_ip_loadbalancing_backend
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.ovh.ovh_monthly_billing:
- redirect: community.general.ovh_monthly_billing
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ovh_monthly_billing
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
ovirt:
tombstone:
removal_version: 3.0.0
@@ -2888,216 +623,6 @@ plugin_routing:
tombstone:
removal_version: 3.0.0
warning_text: Use ovirt.ovirt.ovirt_vmpool_info instead.
- clustering.pacemaker_cluster:
- redirect: community.general.pacemaker_cluster
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.pacemaker_cluster
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.packet.packet_device:
- redirect: community.general.packet_device
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.packet_device
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.packet.packet_ip_subnet:
- redirect: community.general.packet_ip_subnet
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.packet_ip_subnet
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.packet.packet_project:
- redirect: community.general.packet_project
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.packet_project
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.packet.packet_sshkey:
- redirect: community.general.packet_sshkey
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.packet_sshkey
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.packet.packet_volume:
- redirect: community.general.packet_volume
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.packet_volume
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.packet.packet_volume_attachment:
- redirect: community.general.packet_volume_attachment
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.packet_volume_attachment
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.pacman:
- redirect: community.general.pacman
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.pacman
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.pacman_key:
- redirect: community.general.pacman_key
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.pacman_key
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- monitoring.pagerduty:
- redirect: community.general.pagerduty
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.pagerduty
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- monitoring.pagerduty_alert:
- redirect: community.general.pagerduty_alert
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.pagerduty_alert
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- monitoring.pagerduty_change:
- redirect: community.general.pagerduty_change
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.pagerduty_change
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- monitoring.pagerduty_user:
- redirect: community.general.pagerduty_user
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.pagerduty_user
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.pam_limits:
- redirect: community.general.pam_limits
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.pam_limits
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.pamd:
- redirect: community.general.pamd
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.pamd
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.parted:
- redirect: community.general.parted
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.parted
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.language.pear:
- redirect: community.general.pear
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.pear
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.pids:
- redirect: community.general.pids
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.pids
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- monitoring.pingdom:
- redirect: community.general.pingdom
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.pingdom
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.language.pip_package_info:
- redirect: community.general.pip_package_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.pip_package_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.language.pipx:
- redirect: community.general.pipx
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.pipx
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.language.pipx_info:
- redirect: community.general.pipx_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.pipx_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.pkg5:
- redirect: community.general.pkg5
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.pkg5
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.pkg5_publisher:
- redirect: community.general.pkg5_publisher
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.pkg5_publisher
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.pkgin:
- redirect: community.general.pkgin
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.pkgin
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.pkgng:
- redirect: community.general.pkgng
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.pkgng
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.pkgutil:
- redirect: community.general.pkgutil
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.pkgutil
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- storage.pmem.pmem:
- redirect: community.general.pmem
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.pmem
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.portage:
- redirect: community.general.portage
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.portage
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.portinstall:
- redirect: community.general.portinstall
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.portinstall
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
postgresql_copy:
redirect: community.postgresql.postgresql_copy
postgresql_db:
@@ -3142,167 +667,6 @@ plugin_routing:
redirect: community.postgresql.postgresql_user
postgresql_user_obj_stat_info:
redirect: community.postgresql.postgresql_user_obj_stat_info
- net_tools.pritunl.pritunl_org:
- redirect: community.general.pritunl_org
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.pritunl_org
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- net_tools.pritunl.pritunl_org_info:
- redirect: community.general.pritunl_org_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.pritunl_org_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- net_tools.pritunl.pritunl_user:
- redirect: community.general.pritunl_user
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.pritunl_user
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- net_tools.pritunl.pritunl_user_info:
- redirect: community.general.pritunl_user_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.pritunl_user_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.profitbricks.profitbricks:
- redirect: community.general.profitbricks
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.profitbricks
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.profitbricks.profitbricks_datacenter:
- redirect: community.general.profitbricks_datacenter
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.profitbricks_datacenter
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.profitbricks.profitbricks_nic:
- redirect: community.general.profitbricks_nic
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.profitbricks_nic
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.profitbricks.profitbricks_volume:
- redirect: community.general.profitbricks_volume
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.profitbricks_volume
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.profitbricks.profitbricks_volume_attachments:
- redirect: community.general.profitbricks_volume_attachments
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.profitbricks_volume_attachments
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.misc.proxmox:
- redirect: community.general.proxmox
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.proxmox
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.misc.proxmox_disk:
- redirect: community.general.proxmox_disk
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.proxmox_disk
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.misc.proxmox_domain_info:
- redirect: community.general.proxmox_domain_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.proxmox_domain_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.misc.proxmox_group_info:
- redirect: community.general.proxmox_group_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.proxmox_group_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.misc.proxmox_kvm:
- redirect: community.general.proxmox_kvm
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.proxmox_kvm
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.misc.proxmox_nic:
- redirect: community.general.proxmox_nic
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.proxmox_nic
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.misc.proxmox_snap:
- redirect: community.general.proxmox_snap
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.proxmox_snap
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.misc.proxmox_storage_info:
- redirect: community.general.proxmox_storage_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.proxmox_storage_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.misc.proxmox_tasks_info:
- redirect: community.general.proxmox_tasks_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.proxmox_tasks_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.misc.proxmox_template:
- redirect: community.general.proxmox_template
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.proxmox_template
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.misc.proxmox_user_info:
- redirect: community.general.proxmox_user_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.proxmox_user_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.pubnub.pubnub_blocks:
- redirect: community.general.pubnub_blocks
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.pubnub_blocks
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.pulp_repo:
- redirect: community.general.pulp_repo
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.pulp_repo
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.puppet:
- redirect: community.general.puppet
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.puppet
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
purefa_facts:
tombstone:
removal_version: 3.0.0
@@ -3311,669 +675,46 @@ plugin_routing:
tombstone:
removal_version: 3.0.0
warning_text: Use purestorage.flashblade.purefb_info instead.
- notification.pushbullet:
- redirect: community.general.pushbullet
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.pushbullet
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- notification.pushover:
- redirect: community.general.pushover
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.pushover
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
python_requirements_facts:
tombstone:
removal_version: 3.0.0
warning_text: Use community.general.python_requirements_info instead.
- system.python_requirements_info:
- redirect: community.general.python_requirements_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.python_requirements_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.rackspace.rax:
- redirect: community.general.rax
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rax
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.rackspace.rax_cbs:
- redirect: community.general.rax_cbs
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rax_cbs
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.rackspace.rax_cbs_attachments:
- redirect: community.general.rax_cbs_attachments
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rax_cbs_attachments
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.rackspace.rax_cdb:
- redirect: community.general.rax_cdb
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rax_cdb
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.rackspace.rax_cdb_database:
- redirect: community.general.rax_cdb_database
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rax_cdb_database
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.rackspace.rax_cdb_user:
- redirect: community.general.rax_cdb_user
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rax_cdb_user
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.rackspace.rax_clb:
- redirect: community.general.rax_clb
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rax_clb
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.rackspace.rax_clb_nodes:
- redirect: community.general.rax_clb_nodes
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rax_clb_nodes
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.rackspace.rax_clb_ssl:
- redirect: community.general.rax_clb_ssl
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rax_clb_ssl
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.rackspace.rax_dns:
- redirect: community.general.rax_dns
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rax_dns
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.rackspace.rax_dns_record:
- redirect: community.general.rax_dns_record
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rax_dns_record
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.rackspace.rax_facts:
- redirect: community.general.rax_facts
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rax_facts
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.rackspace.rax_files:
- redirect: community.general.rax_files
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rax_files
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.rackspace.rax_files_objects:
- redirect: community.general.rax_files_objects
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rax_files_objects
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.rackspace.rax_identity:
- redirect: community.general.rax_identity
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rax_identity
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.rackspace.rax_keypair:
- redirect: community.general.rax_keypair
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rax_keypair
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.rackspace.rax_meta:
- redirect: community.general.rax_meta
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rax_meta
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.rackspace.rax_mon_alarm:
- redirect: community.general.rax_mon_alarm
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rax_mon_alarm
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.rackspace.rax_mon_check:
- redirect: community.general.rax_mon_check
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rax_mon_check
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.rackspace.rax_mon_entity:
- redirect: community.general.rax_mon_entity
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rax_mon_entity
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.rackspace.rax_mon_notification:
- redirect: community.general.rax_mon_notification
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rax_mon_notification
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.rackspace.rax_mon_notification_plan:
- redirect: community.general.rax_mon_notification_plan
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rax_mon_notification_plan
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.rackspace.rax_network:
- redirect: community.general.rax_network
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rax_network
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.rackspace.rax_queue:
- redirect: community.general.rax_queue
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rax_queue
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.rackspace.rax_scaling_group:
- redirect: community.general.rax_scaling_group
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rax_scaling_group
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.rackspace.rax_scaling_policy:
- redirect: community.general.rax_scaling_policy
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rax_scaling_policy
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- files.read_csv:
- redirect: community.general.read_csv
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.read_csv
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.redfish.redfish_command:
- redirect: community.general.redfish_command
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.redfish_command
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.redfish.redfish_config:
- redirect: community.general.redfish_config
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.redfish_config
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
redfish_facts:
tombstone:
removal_version: 3.0.0
warning_text: Use community.general.redfish_info instead.
- remote_management.redfish.redfish_info:
- redirect: community.general.redfish_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.redfish_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
sapcar_extract:
redirect: community.sap_libs.sapcar_extract
sap_task_list_execute:
redirect: community.sap_libs.sap_task_list_execute
- packaging.os.redhat_subscription:
- redirect: community.general.redhat_subscription
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.redhat_subscription
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- database.misc.redis:
- redirect: community.general.redis
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.redis
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- database.misc.redis_data:
- redirect: community.general.redis_data
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.redis_data
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- database.misc.redis_data_incr:
- redirect: community.general.redis_data_incr
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.redis_data_incr
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- database.misc.redis_data_info:
- redirect: community.general.redis_data_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.redis_data_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- database.misc.redis_info:
- redirect: community.general.redis_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.redis_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.misc.rhevm:
- redirect: community.general.rhevm
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rhevm
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.rhn_channel:
- redirect: community.general.rhn_channel
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rhn_channel
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.rhn_register:
- redirect: community.general.rhn_register
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rhn_register
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.rhsm_release:
- redirect: community.general.rhsm_release
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rhsm_release
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.rhsm_repository:
- redirect: community.general.rhsm_repository
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rhsm_repository
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- database.misc.riak:
- redirect: community.general.riak
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.riak
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- notification.rocketchat:
- redirect: community.general.rocketchat
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rocketchat
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- monitoring.rollbar_deployment:
- redirect: community.general.rollbar_deployment
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rollbar_deployment
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.rpm_ostree_pkg:
- redirect: community.general.rpm_ostree_pkg
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rpm_ostree_pkg
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- web_infrastructure.rundeck_acl_policy:
- redirect: community.general.rundeck_acl_policy
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rundeck_acl_policy
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- web_infrastructure.rundeck_job_executions_info:
- redirect: community.general.rundeck_job_executions_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rundeck_job_executions_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- web_infrastructure.rundeck_job_run:
- redirect: community.general.rundeck_job_run
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rundeck_job_run
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- web_infrastructure.rundeck_project:
- redirect: community.general.rundeck_project
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.rundeck_project
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.runit:
- redirect: community.general.runit
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.runit
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.sap_task_list_execute:
- redirect: community.general.sap_task_list_execute
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.sap_task_list_execute
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- files.sapcar_extract:
- redirect: community.general.sapcar_extract
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.sapcar_extract
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- notification.say:
- redirect: community.general.say
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.say
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.scaleway.scaleway_compute:
- redirect: community.general.scaleway_compute
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.scaleway_compute
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.scaleway.scaleway_compute_private_network:
- redirect: community.general.scaleway_compute_private_network
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.scaleway_compute_private_network
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.scaleway.scaleway_container_registry:
- redirect: community.general.scaleway_container_registry
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.scaleway_container_registry
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.scaleway.scaleway_container_registry_info:
- redirect: community.general.scaleway_container_registry_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.scaleway_container_registry_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.scaleway.scaleway_database_backup:
- redirect: community.general.scaleway_database_backup
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.scaleway_database_backup
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.scaleway.scaleway_function_namespace:
- redirect: community.general.scaleway_function_namespace
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.scaleway_function_namespace
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.scaleway.scaleway_function_namespace_info:
- redirect: community.general.scaleway_function_namespace_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.scaleway_function_namespace_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
scaleway_image_facts:
tombstone:
removal_version: 3.0.0
warning_text: Use community.general.scaleway_image_info instead.
- cloud.scaleway.scaleway_image_info:
- redirect: community.general.scaleway_image_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.scaleway_image_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.scaleway.scaleway_ip:
- redirect: community.general.scaleway_ip
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.scaleway_ip
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
scaleway_ip_facts:
tombstone:
removal_version: 3.0.0
warning_text: Use community.general.scaleway_ip_info instead.
- cloud.scaleway.scaleway_ip_info:
- redirect: community.general.scaleway_ip_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.scaleway_ip_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.scaleway.scaleway_lb:
- redirect: community.general.scaleway_lb
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.scaleway_lb
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
scaleway_organization_facts:
tombstone:
removal_version: 3.0.0
warning_text: Use community.general.scaleway_organization_info instead.
- cloud.scaleway.scaleway_organization_info:
- redirect: community.general.scaleway_organization_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.scaleway_organization_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.scaleway.scaleway_private_network:
- redirect: community.general.scaleway_private_network
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.scaleway_private_network
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.scaleway.scaleway_security_group:
- redirect: community.general.scaleway_security_group
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.scaleway_security_group
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
scaleway_security_group_facts:
tombstone:
removal_version: 3.0.0
warning_text: Use community.general.scaleway_security_group_info instead.
- cloud.scaleway.scaleway_security_group_info:
- redirect: community.general.scaleway_security_group_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.scaleway_security_group_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.scaleway.scaleway_security_group_rule:
- redirect: community.general.scaleway_security_group_rule
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.scaleway_security_group_rule
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
scaleway_server_facts:
tombstone:
removal_version: 3.0.0
warning_text: Use community.general.scaleway_server_info instead.
- cloud.scaleway.scaleway_server_info:
- redirect: community.general.scaleway_server_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.scaleway_server_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
scaleway_snapshot_facts:
tombstone:
removal_version: 3.0.0
warning_text: Use community.general.scaleway_snapshot_info instead.
- cloud.scaleway.scaleway_snapshot_info:
- redirect: community.general.scaleway_snapshot_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.scaleway_snapshot_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.scaleway.scaleway_sshkey:
- redirect: community.general.scaleway_sshkey
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.scaleway_sshkey
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.scaleway.scaleway_user_data:
- redirect: community.general.scaleway_user_data
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.scaleway_user_data
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.scaleway.scaleway_volume:
- redirect: community.general.scaleway_volume
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.scaleway_volume
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
scaleway_volume_facts:
tombstone:
removal_version: 3.0.0
warning_text: Use community.general.scaleway_volume_info instead.
- cloud.scaleway.scaleway_volume_info:
- redirect: community.general.scaleway_volume_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.scaleway_volume_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.sefcontext:
- redirect: community.general.sefcontext
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.sefcontext
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.selinux_permissive:
- redirect: community.general.selinux_permissive
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.selinux_permissive
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.selogin:
- redirect: community.general.selogin
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.selogin
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- notification.sendgrid:
- redirect: community.general.sendgrid
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.sendgrid
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- monitoring.sensu.sensu_check:
- redirect: community.general.sensu_check
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.sensu_check
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- monitoring.sensu.sensu_client:
- redirect: community.general.sensu_client
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.sensu_client
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- monitoring.sensu.sensu_handler:
- redirect: community.general.sensu_handler
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.sensu_handler
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- monitoring.sensu.sensu_silence:
- redirect: community.general.sensu_silence
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.sensu_silence
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- monitoring.sensu.sensu_subscription:
- redirect: community.general.sensu_subscription
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.sensu_subscription
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.seport:
- redirect: community.general.seport
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.seport
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.misc.serverless:
- redirect: community.general.serverless
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.serverless
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
sf_account_manager:
tombstone:
removal_version: 2.0.0
@@ -3994,699 +735,48 @@ plugin_routing:
tombstone:
removal_version: 2.0.0
warning_text: Use netapp.elementsw.na_elementsw_volume instead.
- system.shutdown:
- redirect: community.general.shutdown
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.shutdown
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.softlayer.sl_vm:
- redirect: community.general.sl_vm
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.sl_vm
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- notification.slack:
- redirect: community.general.slack
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.slack
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.slackpkg:
- redirect: community.general.slackpkg
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.slackpkg
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
smartos_image_facts:
tombstone:
removal_version: 3.0.0
warning_text: Use community.general.smartos_image_info instead.
- cloud.smartos.smartos_image_info:
- redirect: community.general.smartos_image_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.smartos_image_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.snap:
- redirect: community.general.snap
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.snap
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.snap_alias:
- redirect: community.general.snap_alias
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.snap_alias
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- net_tools.snmp_facts:
- redirect: community.general.snmp_facts
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.snmp_facts
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.solaris_zone:
- redirect: community.general.solaris_zone
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.solaris_zone
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.sorcery:
- redirect: community.general.sorcery
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.sorcery
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- monitoring.spectrum_device:
- redirect: community.general.spectrum_device
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.spectrum_device
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- monitoring.spectrum_model_attrs:
- redirect: community.general.spectrum_model_attrs
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.spectrum_model_attrs
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.spotinst.spotinst_aws_elastigroup:
- redirect: community.general.spotinst_aws_elastigroup
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.spotinst_aws_elastigroup
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- storage.hpe3par.ss_3par_cpg:
- redirect: community.general.ss_3par_cpg
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ss_3par_cpg
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.ssh_config:
- redirect: community.general.ssh_config
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ssh_config
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- monitoring.stackdriver:
- redirect: community.general.stackdriver
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.stackdriver
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.stacki.stacki_host:
- redirect: community.general.stacki_host
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.stacki_host
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- monitoring.statsd:
- redirect: community.general.statsd
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.statsd
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- monitoring.statusio_maintenance:
- redirect: community.general.statusio_maintenance
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.statusio_maintenance
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.sudoers:
- redirect: community.general.sudoers
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.sudoers
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- web_infrastructure.supervisorctl:
- redirect: community.general.supervisorctl
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.supervisorctl
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.svc:
- redirect: community.general.svc
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.svc
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.svr4pkg:
- redirect: community.general.svr4pkg
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.svr4pkg
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.swdepot:
- redirect: community.general.swdepot
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.swdepot
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.swupd:
- redirect: community.general.swupd
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.swupd
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- notification.syslogger:
- redirect: community.general.syslogger
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.syslogger
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.syspatch:
- redirect: community.general.syspatch
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.syspatch
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.sysrc:
- redirect: community.general.sysrc
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.sysrc
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.sysupgrade:
- redirect: community.general.sysupgrade
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.sysupgrade
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- web_infrastructure.taiga_issue:
- redirect: community.general.taiga_issue
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.taiga_issue
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- notification.telegram:
- redirect: community.general.telegram
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.telegram
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.misc.terraform:
- redirect: community.general.terraform
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.terraform
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.timezone:
- redirect: community.general.timezone
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.timezone
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- notification.twilio:
- redirect: community.general.twilio
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.twilio
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- notification.typetalk:
- redirect: community.general.typetalk
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.typetalk
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.univention.udm_dns_record:
- redirect: community.general.udm_dns_record
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.udm_dns_record
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.univention.udm_dns_zone:
- redirect: community.general.udm_dns_zone
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.udm_dns_zone
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.univention.udm_group:
- redirect: community.general.udm_group
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.udm_group
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.univention.udm_share:
- redirect: community.general.udm_share
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.udm_share
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.univention.udm_user:
- redirect: community.general.udm_user
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.udm_user
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.ufw:
- redirect: community.general.ufw
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.ufw
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- monitoring.uptimerobot:
- redirect: community.general.uptimerobot
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.uptimerobot
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.urpmi:
- redirect: community.general.urpmi
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.urpmi
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- web_infrastructure.sophos_utm.utm_aaa_group:
- redirect: community.general.utm_aaa_group
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.utm_aaa_group
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- web_infrastructure.sophos_utm.utm_aaa_group_info:
- redirect: community.general.utm_aaa_group_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.utm_aaa_group_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- web_infrastructure.sophos_utm.utm_ca_host_key_cert:
- redirect: community.general.utm_ca_host_key_cert
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.utm_ca_host_key_cert
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- web_infrastructure.sophos_utm.utm_ca_host_key_cert_info:
- redirect: community.general.utm_ca_host_key_cert_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.utm_ca_host_key_cert_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- web_infrastructure.sophos_utm.utm_dns_host:
- redirect: community.general.utm_dns_host
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.utm_dns_host
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- web_infrastructure.sophos_utm.utm_network_interface_address:
- redirect: community.general.utm_network_interface_address
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.utm_network_interface_address
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- web_infrastructure.sophos_utm.utm_network_interface_address_info:
- redirect: community.general.utm_network_interface_address_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.utm_network_interface_address_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- web_infrastructure.sophos_utm.utm_proxy_auth_profile:
- redirect: community.general.utm_proxy_auth_profile
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.utm_proxy_auth_profile
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- web_infrastructure.sophos_utm.utm_proxy_exception:
- redirect: community.general.utm_proxy_exception
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.utm_proxy_exception
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- web_infrastructure.sophos_utm.utm_proxy_frontend:
- redirect: community.general.utm_proxy_frontend
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.utm_proxy_frontend
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- web_infrastructure.sophos_utm.utm_proxy_frontend_info:
- redirect: community.general.utm_proxy_frontend_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.utm_proxy_frontend_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- web_infrastructure.sophos_utm.utm_proxy_location:
- redirect: community.general.utm_proxy_location
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.utm_proxy_location
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- web_infrastructure.sophos_utm.utm_proxy_location_info:
- redirect: community.general.utm_proxy_location_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.utm_proxy_location_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.vdo:
- redirect: community.general.vdo
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.vdo
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- database.vertica.vertica_configuration:
- redirect: community.general.vertica_configuration
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.vertica_configuration
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
vertica_facts:
tombstone:
removal_version: 3.0.0
warning_text: Use community.general.vertica_info instead.
- database.vertica.vertica_info:
- redirect: community.general.vertica_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.vertica_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- database.vertica.vertica_role:
- redirect: community.general.vertica_role
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.vertica_role
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- database.vertica.vertica_schema:
- redirect: community.general.vertica_schema
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.vertica_schema
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- database.vertica.vertica_user:
- redirect: community.general.vertica_user
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.vertica_user
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- storage.vexata.vexata_eg:
- redirect: community.general.vexata_eg
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.vexata_eg
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- storage.vexata.vexata_volume:
- redirect: community.general.vexata_volume
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.vexata_volume
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.smartos.vmadm:
- redirect: community.general.vmadm
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.vmadm
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.wakeonlan:
- redirect: community.general.wakeonlan
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.wakeonlan
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.redfish.wdc_redfish_command:
- redirect: community.general.wdc_redfish_command
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.wdc_redfish_command
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.redfish.wdc_redfish_info:
- redirect: community.general.wdc_redfish_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.wdc_redfish_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
webfaction_app:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on HTTPS APIs that do not exist anymore and
+ warning_text: This module relied on HTTPS APIs that do not exist anymore and
there is no clear path to update.
- cloud.webfaction.webfaction_app:
- redirect: community.general.webfaction_app
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.webfaction_app
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
webfaction_db:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on HTTPS APIs that do not exist anymore and
+ warning_text: This module relied on HTTPS APIs that do not exist anymore and
there is no clear path to update.
- cloud.webfaction.webfaction_db:
- redirect: community.general.webfaction_db
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.webfaction_db
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
webfaction_domain:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on HTTPS APIs that do not exist anymore and
+ warning_text: This module relied on HTTPS APIs that do not exist anymore and
there is no clear path to update.
- cloud.webfaction.webfaction_domain:
- redirect: community.general.webfaction_domain
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.webfaction_domain
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
webfaction_mailbox:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on HTTPS APIs that do not exist anymore and
+ warning_text: This module relied on HTTPS APIs that do not exist anymore and
there is no clear path to update.
- cloud.webfaction.webfaction_mailbox:
- redirect: community.general.webfaction_mailbox
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.webfaction_mailbox
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
webfaction_site:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module relies on HTTPS APIs that do not exist anymore and
+ warning_text: This module relied on HTTPS APIs that do not exist anymore and
there is no clear path to update.
- cloud.webfaction.webfaction_site:
- redirect: community.general.webfaction_site
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.webfaction_site
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- files.xattr:
- redirect: community.general.xattr
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.xattr
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.xbps:
- redirect: community.general.xbps
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.xbps
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- remote_management.lenovoxcc.xcc_redfish_command:
- redirect: community.general.xcc_redfish_command
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.xcc_redfish_command
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.misc.xenserver_facts:
- redirect: community.general.xenserver_facts
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.xenserver_facts
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.xenserver.xenserver_guest:
- redirect: community.general.xenserver_guest
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.xenserver_guest
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
xenserver_guest_facts:
tombstone:
removal_version: 3.0.0
warning_text: Use community.general.xenserver_guest_info instead.
- cloud.xenserver.xenserver_guest_info:
- redirect: community.general.xenserver_guest_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.xenserver_guest_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- cloud.xenserver.xenserver_guest_powerstate:
- redirect: community.general.xenserver_guest_powerstate
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.xenserver_guest_powerstate
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.xfconf:
- redirect: community.general.xfconf
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.xfconf
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.xfconf_info:
- redirect: community.general.xfconf_info
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.xfconf_info
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.xfs_quota:
- redirect: community.general.xfs_quota
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.xfs_quota
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- files.xml:
- redirect: community.general.xml
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.xml
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.language.yarn:
- redirect: community.general.yarn
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.yarn
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.yum_versionlock:
- redirect: community.general.yum_versionlock
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.yum_versionlock
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- storage.zfs.zfs:
- redirect: community.general.zfs
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.zfs
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- storage.zfs.zfs_delegate_admin:
- redirect: community.general.zfs_delegate_admin
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.zfs_delegate_admin
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- storage.zfs.zfs_facts:
- redirect: community.general.zfs_facts
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.zfs_facts
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- clustering.znode:
- redirect: community.general.znode
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.znode
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- storage.zfs.zpool_facts:
- redirect: community.general.zpool_facts
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.zpool_facts
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.zypper:
- redirect: community.general.zypper
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.zypper
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- packaging.os.zypper_repository:
- redirect: community.general.zypper_repository
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.zypper_repository
- modules. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
doc_fragments:
rackspace:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This doc fragment is used by rax modules, that rely on the deprecated
+ warning_text: This doc fragment was used by rax modules, that relied on the deprecated
package pyrax.
_gcp:
redirect: community.google._gcp
@@ -4704,9 +794,9 @@ plugin_routing:
redirect: community.postgresql.postgresql
module_utils:
rax:
- deprecation:
+ tombstone:
removal_version: 9.0.0
- warning_text: This module util relies on the deprecated package pyrax.
+ warning_text: This module util relied on the deprecated package pyrax.
docker.common:
redirect: community.docker.common
docker.swarm:
@@ -4746,18 +836,3 @@ plugin_routing:
# for Ansible 2.9 or earlier. Now we only will have the redirect until we
# eventually will deprecate and then remove it.
redirect: ansible.builtin.path_join
- action:
- system.iptables_state:
- redirect: community.general.iptables_state
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.iptables_state
- action. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
- system.shutdown:
- redirect: community.general.shutdown
- deprecation:
- removal_version: 9.0.0
- warning_text: You are using an internal name to access the community.general.shutdown
- action. This has never been supported or documented, and will stop working
- in community.general 9.0.0.
diff --git a/ansible_collections/community/general/plugins/become/machinectl.py b/ansible_collections/community/general/plugins/become/machinectl.py
index 9b9ac7ec5..e2773ed6a 100644
--- a/ansible_collections/community/general/plugins/become/machinectl.py
+++ b/ansible_collections/community/general/plugins/become/machinectl.py
@@ -78,12 +78,13 @@ DOCUMENTATION = '''
EXAMPLES = r'''
# A polkit rule needed to use the module with a non-root user.
# See the Notes section for details.
-60-machinectl-fast-user-auth.rules: |
- polkit.addRule(function(action, subject) {
- if(action.id == "org.freedesktop.machine1.host-shell" && subject.isInGroup("wheel")) {
- return polkit.Result.AUTH_SELF_KEEP;
- }
- });
+/etc/polkit-1/rules.d/60-machinectl-fast-user-auth.rules: |
+ polkit.addRule(function(action, subject) {
+ if(action.id == "org.freedesktop.machine1.host-shell" &&
+ subject.isInGroup("wheel")) {
+ return polkit.Result.AUTH_SELF_KEEP;
+ }
+ });
'''
from re import compile as re_compile
diff --git a/ansible_collections/community/general/plugins/become/run0.py b/ansible_collections/community/general/plugins/become/run0.py
new file mode 100644
index 000000000..a718e86f2
--- /dev/null
+++ b/ansible_collections/community/general/plugins/become/run0.py
@@ -0,0 +1,128 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2024, Ansible Project
+# 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 = """
+ name: run0
+ short_description: Systemd's run0
+ description:
+ - This become plugins allows your remote/login user to execute commands as another user via the C(run0) utility.
+ author:
+ - Thomas Sjögren (@konstruktoid)
+ version_added: '9.0.0'
+ options:
+ become_user:
+ description: User you 'become' to execute the task.
+ default: root
+ ini:
+ - section: privilege_escalation
+ key: become_user
+ - section: run0_become_plugin
+ key: user
+ vars:
+ - name: ansible_become_user
+ - name: ansible_run0_user
+ env:
+ - name: ANSIBLE_BECOME_USER
+ - name: ANSIBLE_RUN0_USER
+ type: string
+ become_exe:
+ description: The C(run0) executable.
+ default: run0
+ ini:
+ - section: privilege_escalation
+ key: become_exe
+ - section: run0_become_plugin
+ key: executable
+ vars:
+ - name: ansible_become_exe
+ - name: ansible_run0_exe
+ env:
+ - name: ANSIBLE_BECOME_EXE
+ - name: ANSIBLE_RUN0_EXE
+ type: string
+ become_flags:
+ description: Options to pass to run0.
+ default: ''
+ ini:
+ - section: privilege_escalation
+ key: become_flags
+ - section: run0_become_plugin
+ key: flags
+ vars:
+ - name: ansible_become_flags
+ - name: ansible_run0_flags
+ env:
+ - name: ANSIBLE_BECOME_FLAGS
+ - name: ANSIBLE_RUN0_FLAGS
+ type: string
+ notes:
+ - This plugin will only work when a polkit rule is in place.
+"""
+
+EXAMPLES = r"""
+# An example polkit rule that allows the user 'ansible' in the 'wheel' group
+# to execute commands using run0 without authentication.
+/etc/polkit-1/rules.d/60-run0-fast-user-auth.rules: |
+ polkit.addRule(function(action, subject) {
+ if(action.id == "org.freedesktop.systemd1.manage-units" &&
+ subject.isInGroup("wheel") &&
+ subject.user == "ansible") {
+ return polkit.Result.YES;
+ }
+ });
+"""
+
+from re import compile as re_compile
+
+from ansible.plugins.become import BecomeBase
+from ansible.module_utils._text import to_bytes
+
+ansi_color_codes = re_compile(to_bytes(r"\x1B\[[0-9;]+m"))
+
+
+class BecomeModule(BecomeBase):
+
+ name = "community.general.run0"
+
+ prompt = "Password: "
+ fail = ("==== AUTHENTICATION FAILED ====",)
+ success = ("==== AUTHENTICATION COMPLETE ====",)
+ require_tty = (
+ True # see https://github.com/ansible-collections/community.general/issues/6932
+ )
+
+ @staticmethod
+ def remove_ansi_codes(line):
+ return ansi_color_codes.sub(b"", line)
+
+ def build_become_command(self, cmd, shell):
+ super().build_become_command(cmd, shell)
+
+ if not cmd:
+ return cmd
+
+ become = self.get_option("become_exe")
+ flags = self.get_option("become_flags")
+ user = self.get_option("become_user")
+
+ return (
+ f"{become} --user={user} {flags} {self._build_success_command(cmd, shell)}"
+ )
+
+ def check_success(self, b_output):
+ b_output = self.remove_ansi_codes(b_output)
+ return super().check_success(b_output)
+
+ def check_incorrect_password(self, b_output):
+ b_output = self.remove_ansi_codes(b_output)
+ return super().check_incorrect_password(b_output)
+
+ def check_missing_password(self, b_output):
+ b_output = self.remove_ansi_codes(b_output)
+ return super().check_missing_password(b_output)
diff --git a/ansible_collections/community/general/plugins/callback/opentelemetry.py b/ansible_collections/community/general/plugins/callback/opentelemetry.py
index 492e42071..58cfa057b 100644
--- a/ansible_collections/community/general/plugins/callback/opentelemetry.py
+++ b/ansible_collections/community/general/plugins/callback/opentelemetry.py
@@ -84,6 +84,33 @@ DOCUMENTATION = '''
- section: callback_opentelemetry
key: disable_attributes_in_logs
version_added: 7.1.0
+ store_spans_in_file:
+ default: None
+ type: str
+ description:
+ - It stores the exported spans in the given file
+ env:
+ - name: ANSIBLE_OPENTELEMETRY_STORE_SPANS_IN_FILE
+ ini:
+ - section: callback_opentelemetry
+ key: store_spans_in_file
+ version_added: 9.0.0
+ otel_exporter_otlp_traces_protocol:
+ type: str
+ description:
+ - E(OTEL_EXPORTER_OTLP_TRACES_PROTOCOL) represents the the transport protocol for spans.
+ - See
+ U(https://opentelemetry-python.readthedocs.io/en/latest/sdk/environment_variables.html#envvar-OTEL_EXPORTER_OTLP_TRACES_PROTOCOL).
+ default: grpc
+ choices:
+ - grpc
+ - http/protobuf
+ env:
+ - name: OTEL_EXPORTER_OTLP_TRACES_PROTOCOL
+ ini:
+ - section: callback_opentelemetry
+ key: otel_exporter_otlp_traces_protocol
+ version_added: 9.0.0
requirements:
- opentelemetry-api (Python library)
- opentelemetry-exporter-otlp (Python library)
@@ -107,6 +134,7 @@ examples: |
'''
import getpass
+import json
import os
import socket
import sys
@@ -124,15 +152,19 @@ from ansible.plugins.callback import CallbackBase
try:
from opentelemetry import trace
from opentelemetry.trace import SpanKind
- from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
+ from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter as GRPCOTLPSpanExporter
+ from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter as HTTPOTLPSpanExporter
from opentelemetry.sdk.resources import SERVICE_NAME, Resource
from opentelemetry.trace.status import Status, StatusCode
from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapPropagator
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import (
- BatchSpanProcessor
+ BatchSpanProcessor,
+ SimpleSpanProcessor
+ )
+ from opentelemetry.sdk.trace.export.in_memory_span_exporter import (
+ InMemorySpanExporter
)
-
# Support for opentelemetry-api <= 1.12
try:
from opentelemetry.util._time import _time_ns
@@ -255,7 +287,16 @@ class OpenTelemetrySource(object):
task.dump = dump
task.add_host(HostData(host_uuid, host_name, status, result))
- def generate_distributed_traces(self, otel_service_name, ansible_playbook, tasks_data, status, traceparent, disable_logs, disable_attributes_in_logs):
+ def generate_distributed_traces(self,
+ otel_service_name,
+ ansible_playbook,
+ tasks_data,
+ status,
+ traceparent,
+ disable_logs,
+ disable_attributes_in_logs,
+ otel_exporter_otlp_traces_protocol,
+ store_spans_in_file):
""" generate distributed traces from the collected TaskData and HostData """
tasks = []
@@ -271,7 +312,16 @@ class OpenTelemetrySource(object):
)
)
- processor = BatchSpanProcessor(OTLPSpanExporter())
+ otel_exporter = None
+ if store_spans_in_file:
+ otel_exporter = InMemorySpanExporter()
+ processor = SimpleSpanProcessor(otel_exporter)
+ else:
+ if otel_exporter_otlp_traces_protocol == 'grpc':
+ otel_exporter = GRPCOTLPSpanExporter()
+ else:
+ otel_exporter = HTTPOTLPSpanExporter()
+ processor = BatchSpanProcessor(otel_exporter)
trace.get_tracer_provider().add_span_processor(processor)
@@ -293,6 +343,8 @@ class OpenTelemetrySource(object):
with tracer.start_as_current_span(task.name, start_time=task.start, end_on_exit=False) as span:
self.update_span_data(task, host_data, span, disable_logs, disable_attributes_in_logs)
+ return otel_exporter
+
def update_span_data(self, task_data, host_data, span, disable_logs, disable_attributes_in_logs):
""" update the span with the given TaskData and HostData """
@@ -350,7 +402,8 @@ class OpenTelemetrySource(object):
if not disable_logs:
# This will avoid populating span attributes to the logs
span.add_event(task_data.dump, attributes={} if disable_attributes_in_logs else attributes)
- span.end(end_time=host_data.finish)
+ # Close span always
+ span.end(end_time=host_data.finish)
def set_span_attributes(self, span, attributes):
""" update the span attributes with the given attributes if not None """
@@ -462,6 +515,8 @@ class CallbackModule(CallbackBase):
self.errors = 0
self.disabled = False
self.traceparent = False
+ self.store_spans_in_file = False
+ self.otel_exporter_otlp_traces_protocol = None
if OTEL_LIBRARY_IMPORT_ERROR:
raise_from(
@@ -489,6 +544,8 @@ class CallbackModule(CallbackBase):
self.disable_logs = self.get_option('disable_logs')
+ self.store_spans_in_file = self.get_option('store_spans_in_file')
+
self.otel_service_name = self.get_option('otel_service_name')
if not self.otel_service_name:
@@ -497,6 +554,14 @@ class CallbackModule(CallbackBase):
# See https://github.com/open-telemetry/opentelemetry-specification/issues/740
self.traceparent = self.get_option('traceparent')
+ self.otel_exporter_otlp_traces_protocol = self.get_option('otel_exporter_otlp_traces_protocol')
+
+ def dump_results(self, result):
+ """ dump the results if disable_logs is not enabled """
+ if self.disable_logs:
+ return ""
+ return self._dump_results(result._result)
+
def v2_playbook_on_start(self, playbook):
self.ansible_playbook = basename(playbook._file_name)
@@ -546,7 +611,7 @@ class CallbackModule(CallbackBase):
self.tasks_data,
status,
result,
- self._dump_results(result._result)
+ self.dump_results(result)
)
def v2_runner_on_ok(self, result):
@@ -554,7 +619,7 @@ class CallbackModule(CallbackBase):
self.tasks_data,
'ok',
result,
- self._dump_results(result._result)
+ self.dump_results(result)
)
def v2_runner_on_skipped(self, result):
@@ -562,7 +627,7 @@ class CallbackModule(CallbackBase):
self.tasks_data,
'skipped',
result,
- self._dump_results(result._result)
+ self.dump_results(result)
)
def v2_playbook_on_include(self, included_file):
@@ -578,15 +643,22 @@ class CallbackModule(CallbackBase):
status = Status(status_code=StatusCode.OK)
else:
status = Status(status_code=StatusCode.ERROR)
- self.opentelemetry.generate_distributed_traces(
+ otel_exporter = self.opentelemetry.generate_distributed_traces(
self.otel_service_name,
self.ansible_playbook,
self.tasks_data,
status,
self.traceparent,
self.disable_logs,
- self.disable_attributes_in_logs
+ self.disable_attributes_in_logs,
+ self.otel_exporter_otlp_traces_protocol,
+ self.store_spans_in_file
)
+ if self.store_spans_in_file:
+ spans = [json.loads(span.to_json()) for span in otel_exporter.get_finished_spans()]
+ with open(self.store_spans_in_file, "w", encoding="utf-8") as output:
+ json.dump({"spans": spans}, output, indent=4)
+
def v2_runner_on_async_failed(self, result, **kwargs):
self.errors += 1
diff --git a/ansible_collections/community/general/plugins/callback/timestamp.py b/ansible_collections/community/general/plugins/callback/timestamp.py
new file mode 100644
index 000000000..07cd8d239
--- /dev/null
+++ b/ansible_collections/community/general/plugins/callback/timestamp.py
@@ -0,0 +1,127 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2024, kurokobo <kurokobo@protonmail.com>
+# Copyright (c) 2014, Michael DeHaan <michael.dehaan@gmail.com>
+# 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 = r"""
+ name: timestamp
+ type: stdout
+ short_description: Adds simple timestamp for each header
+ version_added: 9.0.0
+ description:
+ - This callback adds simple timestamp for each header.
+ author: kurokobo (@kurokobo)
+ options:
+ timezone:
+ description:
+ - Timezone to use for the timestamp in IANA time zone format.
+ - For example C(America/New_York), C(Asia/Tokyo)). Ignored on Python < 3.9.
+ ini:
+ - section: callback_timestamp
+ key: timezone
+ env:
+ - name: ANSIBLE_CALLBACK_TIMESTAMP_TIMEZONE
+ type: string
+ format_string:
+ description:
+ - Format of the timestamp shown to user in 1989 C standard format.
+ - >
+ Refer to L(the Python documentation,https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes)
+ for the available format codes.
+ ini:
+ - section: callback_timestamp
+ key: format_string
+ env:
+ - name: ANSIBLE_CALLBACK_TIMESTAMP_FORMAT_STRING
+ default: "%H:%M:%S"
+ type: string
+ seealso:
+ - plugin: ansible.posix.profile_tasks
+ plugin_type: callback
+ description: >
+ You can use P(ansible.posix.profile_tasks#callback) callback plugin to time individual tasks and overall execution time
+ with detailed timestamps.
+ extends_documentation_fragment:
+ - ansible.builtin.default_callback
+ - ansible.builtin.result_format_callback
+"""
+
+
+from ansible.plugins.callback.default import CallbackModule as Default
+from ansible.utils.display import get_text_width
+from ansible.module_utils.common.text.converters import to_text
+from datetime import datetime
+import types
+import sys
+
+# Store whether the zoneinfo module is available
+_ZONEINFO_AVAILABLE = sys.version_info >= (3, 9)
+
+
+def get_datetime_now(tz):
+ """
+ Returns the current timestamp with the specified timezone
+ """
+ return datetime.now(tz=tz)
+
+
+def banner(self, msg, color=None, cows=True):
+ """
+ Prints a header-looking line with cowsay or stars with length depending on terminal width (3 minimum) with trailing timestamp
+
+ Based on the banner method of Display class from ansible.utils.display
+
+ https://github.com/ansible/ansible/blob/4403519afe89138042108e237aef317fd5f09c33/lib/ansible/utils/display.py#L511
+ """
+ timestamp = get_datetime_now(self.timestamp_tzinfo).strftime(self.timestamp_format_string)
+ timestamp_len = get_text_width(timestamp) + 1 # +1 for leading space
+
+ msg = to_text(msg)
+ if self.b_cowsay and cows:
+ try:
+ self.banner_cowsay("%s @ %s" % (msg, timestamp))
+ return
+ except OSError:
+ self.warning("somebody cleverly deleted cowsay or something during the PB run. heh.")
+
+ msg = msg.strip()
+ try:
+ star_len = self.columns - get_text_width(msg) - timestamp_len
+ except EnvironmentError:
+ star_len = self.columns - len(msg) - timestamp_len
+ if star_len <= 3:
+ star_len = 3
+ stars = "*" * star_len
+ self.display("\n%s %s %s" % (msg, stars, timestamp), color=color)
+
+
+class CallbackModule(Default):
+ CALLBACK_VERSION = 2.0
+ CALLBACK_TYPE = "stdout"
+ CALLBACK_NAME = "community.general.timestamp"
+
+ def __init__(self):
+ super(CallbackModule, self).__init__()
+
+ # Replace the banner method of the display object with the custom one
+ self._display.banner = types.MethodType(banner, self._display)
+
+ def set_options(self, task_keys=None, var_options=None, direct=None):
+ super(CallbackModule, self).set_options(task_keys=task_keys, var_options=var_options, direct=direct)
+
+ # Store zoneinfo for specified timezone if available
+ tzinfo = None
+ if _ZONEINFO_AVAILABLE and self.get_option("timezone"):
+ from zoneinfo import ZoneInfo
+
+ tzinfo = ZoneInfo(self.get_option("timezone"))
+
+ # Inject options into the display object
+ setattr(self._display, "timestamp_tzinfo", tzinfo)
+ setattr(self._display, "timestamp_format_string", self.get_option("format_string"))
diff --git a/ansible_collections/community/general/plugins/callback/yaml.py b/ansible_collections/community/general/plugins/callback/yaml.py
index ae2c8f881..e41f69ec5 100644
--- a/ansible_collections/community/general/plugins/callback/yaml.py
+++ b/ansible_collections/community/general/plugins/callback/yaml.py
@@ -19,6 +19,16 @@ DOCUMENTATION = '''
- default_callback
requirements:
- set as stdout in configuration
+ seealso:
+ - plugin: ansible.builtin.default
+ plugin_type: callback
+ description: >
+ There is a parameter O(ansible.builtin.default#callback:result_format) in P(ansible.builtin.default#callback)
+ that allows you to change the output format to YAML.
+ notes:
+ - >
+ With ansible-core 2.13 or newer, you can instead specify V(yaml) for the parameter O(ansible.builtin.default#callback:result_format)
+ in P(ansible.builtin.default#callback).
'''
import yaml
diff --git a/ansible_collections/community/general/plugins/doc_fragments/consul.py b/ansible_collections/community/general/plugins/doc_fragments/consul.py
index fbe3f33d4..d4cf11995 100644
--- a/ansible_collections/community/general/plugins/doc_fragments/consul.py
+++ b/ansible_collections/community/general/plugins/doc_fragments/consul.py
@@ -56,5 +56,4 @@ attributes:
support: full
membership:
- community.general.consul
- version_added: 8.3.0
"""
diff --git a/ansible_collections/community/general/plugins/doc_fragments/django.py b/ansible_collections/community/general/plugins/doc_fragments/django.py
new file mode 100644
index 000000000..d92799937
--- /dev/null
+++ b/ansible_collections/community/general/plugins/doc_fragments/django.py
@@ -0,0 +1,53 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2024, Alexei Znamensky <russoz@gmail.com>
+# 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
+
+
+class ModuleDocFragment(object):
+ DOCUMENTATION = r'''
+options:
+ venv:
+ description:
+ - Use the the Python interpreter from this virtual environment.
+ - Pass the path to the root of the virtualenv, not the C(bin/) directory nor the C(python) executable.
+ type: path
+ settings:
+ description:
+ - Specifies the settings module to use.
+ - The value will be passed as is to the C(--settings) argument in C(django-admin).
+ type: str
+ required: true
+ pythonpath:
+ description:
+ - Adds the given filesystem path to the Python import search path.
+ - The value will be passed as is to the C(--pythonpath) argument in C(django-admin).
+ type: path
+ traceback:
+ description:
+ - Provides a full stack trace in the output when a C(CommandError) is raised.
+ type: bool
+ verbosity:
+ description:
+ - Specifies the amount of notification and debug information in the output of C(django-admin).
+ type: int
+ choices: [0, 1, 2, 3]
+ skip_checks:
+ description:
+ - Skips running system checks prior to running the command.
+ type: bool
+
+
+notes:
+ - The C(django-admin) command is always executed using the C(C) locale, and the option C(--no-color) is always passed.
+
+seealso:
+ - name: django-admin and manage.py in official Django documentation
+ description: >-
+ Refer to this documentation for the builtin commands and options of C(django-admin).
+ Please make sure that you select the right version of Django in the version selector on that page.
+ link: https://docs.djangoproject.com/en/5.0/ref/django-admin/
+'''
diff --git a/ansible_collections/community/general/plugins/doc_fragments/proxmox.py b/ansible_collections/community/general/plugins/doc_fragments/proxmox.py
index 4972da498..cb533fefa 100644
--- a/ansible_collections/community/general/plugins/doc_fragments/proxmox.py
+++ b/ansible_collections/community/general/plugins/doc_fragments/proxmox.py
@@ -65,3 +65,13 @@ options:
- Add the new VM to the specified pool.
type: str
'''
+
+ ACTIONGROUP_PROXMOX = r"""
+options: {}
+attributes:
+ action_group:
+ description: Use C(group/community.general.proxmox) in C(module_defaults) to set defaults for this module.
+ support: full
+ membership:
+ - community.general.proxmox
+"""
diff --git a/ansible_collections/community/general/plugins/doc_fragments/rackspace.py b/ansible_collections/community/general/plugins/doc_fragments/rackspace.py
deleted file mode 100644
index f28be777c..000000000
--- a/ansible_collections/community/general/plugins/doc_fragments/rackspace.py
+++ /dev/null
@@ -1,120 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2014, Matt Martz <matt@sivel.net>
-# 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
-
-
-class ModuleDocFragment(object):
-
- # Standard Rackspace only documentation fragment
- DOCUMENTATION = r'''
-options:
- api_key:
- description:
- - Rackspace API key, overrides O(credentials).
- type: str
- aliases: [ password ]
- credentials:
- description:
- - File to find the Rackspace credentials in. Ignored if O(api_key) and
- O(username) are provided.
- type: path
- aliases: [ creds_file ]
- env:
- description:
- - Environment as configured in C(~/.pyrax.cfg),
- see U(https://github.com/rackspace/pyrax/blob/master/docs/getting_started.md#pyrax-configuration).
- type: str
- region:
- description:
- - Region to create an instance in.
- type: str
- username:
- description:
- - Rackspace username, overrides O(credentials).
- type: str
- validate_certs:
- description:
- - Whether or not to require SSL validation of API endpoints.
- type: bool
- aliases: [ verify_ssl ]
-requirements:
- - pyrax
-notes:
- - The following environment variables can be used, E(RAX_USERNAME),
- E(RAX_API_KEY), E(RAX_CREDS_FILE), E(RAX_CREDENTIALS), E(RAX_REGION).
- - E(RAX_CREDENTIALS) and E(RAX_CREDS_FILE) point to a credentials file
- appropriate for pyrax. See U(https://github.com/rackspace/pyrax/blob/master/docs/getting_started.md#authenticating).
- - E(RAX_USERNAME) and E(RAX_API_KEY) obviate the use of a credentials file.
- - E(RAX_REGION) defines a Rackspace Public Cloud region (DFW, ORD, LON, ...).
-'''
-
- # Documentation fragment including attributes to enable communication
- # of other OpenStack clouds. Not all rax modules support this.
- OPENSTACK = r'''
-options:
- api_key:
- type: str
- description:
- - Rackspace API key, overrides O(credentials).
- aliases: [ password ]
- auth_endpoint:
- type: str
- description:
- - The URI of the authentication service.
- - If not specified will be set to U(https://identity.api.rackspacecloud.com/v2.0/).
- credentials:
- type: path
- description:
- - File to find the Rackspace credentials in. Ignored if O(api_key) and
- O(username) are provided.
- aliases: [ creds_file ]
- env:
- type: str
- description:
- - Environment as configured in C(~/.pyrax.cfg),
- see U(https://github.com/rackspace/pyrax/blob/master/docs/getting_started.md#pyrax-configuration).
- identity_type:
- type: str
- description:
- - Authentication mechanism to use, such as rackspace or keystone.
- default: rackspace
- region:
- type: str
- description:
- - Region to create an instance in.
- tenant_id:
- type: str
- description:
- - The tenant ID used for authentication.
- tenant_name:
- type: str
- description:
- - The tenant name used for authentication.
- username:
- type: str
- description:
- - Rackspace username, overrides O(credentials).
- validate_certs:
- description:
- - Whether or not to require SSL validation of API endpoints.
- type: bool
- aliases: [ verify_ssl ]
-deprecated:
- removed_in: 9.0.0
- why: This module relies on the deprecated package pyrax.
- alternative: Use the Openstack modules instead.
-requirements:
- - pyrax
-notes:
- - The following environment variables can be used, E(RAX_USERNAME),
- E(RAX_API_KEY), E(RAX_CREDS_FILE), E(RAX_CREDENTIALS), E(RAX_REGION).
- - E(RAX_CREDENTIALS) and E(RAX_CREDS_FILE) points to a credentials file
- appropriate for pyrax. See U(https://github.com/rackspace/pyrax/blob/master/docs/getting_started.md#authenticating).
- - E(RAX_USERNAME) and E(RAX_API_KEY) obviate the use of a credentials file.
- - E(RAX_REGION) defines a Rackspace Public Cloud region (DFW, ORD, LON, ...).
-'''
diff --git a/ansible_collections/community/general/plugins/lookup/merge_variables.py b/ansible_collections/community/general/plugins/lookup/merge_variables.py
index 4fc33014c..ce7621ad2 100644
--- a/ansible_collections/community/general/plugins/lookup/merge_variables.py
+++ b/ansible_collections/community/general/plugins/lookup/merge_variables.py
@@ -157,7 +157,9 @@ class LookupModule(LookupBase):
cross_host_merge_result = initial_value
for host in variables["hostvars"]:
if self._is_host_in_allowed_groups(variables["hostvars"][host]["group_names"]):
- cross_host_merge_result = self._merge_vars(term, cross_host_merge_result, variables["hostvars"][host])
+ host_variables = dict(variables["hostvars"].raw_get(host))
+ host_variables["hostvars"] = variables["hostvars"] # re-add hostvars
+ cross_host_merge_result = self._merge_vars(term, cross_host_merge_result, host_variables)
ret.append(cross_host_merge_result)
return ret
@@ -195,7 +197,8 @@ class LookupModule(LookupBase):
result = initial_value
for var_name in var_merge_names:
- var_value = self._templar.template(variables[var_name]) # Render jinja2 templates
+ with self._templar.set_temporary_context(available_variables=variables): # tmp. switch renderer to context of current variables
+ var_value = self._templar.template(variables[var_name]) # Render jinja2 templates
var_type = _verify_and_get_type(var_value)
if prev_var_type is None:
diff --git a/ansible_collections/community/general/plugins/module_utils/cmd_runner.py b/ansible_collections/community/general/plugins/module_utils/cmd_runner.py
index 864987120..2bf2b32e8 100644
--- a/ansible_collections/community/general/plugins/module_utils/cmd_runner.py
+++ b/ansible_collections/community/general/plugins/module_utils/cmd_runner.py
@@ -129,8 +129,15 @@ class _Format(object):
return _ArgFormat(lambda value: ["{0}={1}".format(arg, value)], ignore_none=ignore_none)
@staticmethod
- def as_list(ignore_none=None):
- return _ArgFormat(_ensure_list, ignore_none=ignore_none)
+ def as_list(ignore_none=None, min_len=0, max_len=None):
+ def func(value):
+ value = _ensure_list(value)
+ if len(value) < min_len:
+ raise ValueError("Parameter must have at least {0} element(s)".format(min_len))
+ if max_len is not None and len(value) > max_len:
+ raise ValueError("Parameter must have at most {0} element(s)".format(max_len))
+ return value
+ return _ArgFormat(func, ignore_none=ignore_none)
@staticmethod
def as_fixed(args):
diff --git a/ansible_collections/community/general/plugins/module_utils/django.py b/ansible_collections/community/general/plugins/module_utils/django.py
new file mode 100644
index 000000000..fbaf840db
--- /dev/null
+++ b/ansible_collections/community/general/plugins/module_utils/django.py
@@ -0,0 +1,85 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2024, Alexei Znamensky <russoz@gmail.com>
+# 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
+
+
+from ansible_collections.community.general.plugins.module_utils.cmd_runner import cmd_runner_fmt
+from ansible_collections.community.general.plugins.module_utils.python_runner import PythonRunner
+from ansible_collections.community.general.plugins.module_utils.module_helper import ModuleHelper
+
+
+django_std_args = dict(
+ # environmental options
+ venv=dict(type="path"),
+ # default options of django-admin
+ settings=dict(type="str", required=True),
+ pythonpath=dict(type="path"),
+ traceback=dict(type="bool"),
+ verbosity=dict(type="int", choices=[0, 1, 2, 3]),
+ skip_checks=dict(type="bool"),
+)
+
+_django_std_arg_fmts = dict(
+ command=cmd_runner_fmt.as_list(),
+ settings=cmd_runner_fmt.as_opt_eq_val("--settings"),
+ pythonpath=cmd_runner_fmt.as_opt_eq_val("--pythonpath"),
+ traceback=cmd_runner_fmt.as_bool("--traceback"),
+ verbosity=cmd_runner_fmt.as_opt_val("--verbosity"),
+ no_color=cmd_runner_fmt.as_fixed("--no-color"),
+ skip_checks=cmd_runner_fmt.as_bool("--skip-checks"),
+)
+
+
+class _DjangoRunner(PythonRunner):
+ def __init__(self, module, arg_formats=None, **kwargs):
+ arg_fmts = dict(arg_formats) if arg_formats else {}
+ arg_fmts.update(_django_std_arg_fmts)
+
+ super(_DjangoRunner, self).__init__(module, ["-m", "django"], arg_formats=arg_fmts, **kwargs)
+
+ def __call__(self, output_process=None, ignore_value_none=True, check_mode_skip=False, check_mode_return=None, **kwargs):
+ args_order = (
+ ("command", "no_color", "settings", "pythonpath", "traceback", "verbosity", "skip_checks") + self._prepare_args_order(self.default_args_order)
+ )
+ return super(_DjangoRunner, self).__call__(args_order, output_process, ignore_value_none, check_mode_skip, check_mode_return, **kwargs)
+
+
+class DjangoModuleHelper(ModuleHelper):
+ module = {}
+ use_old_vardict = False
+ django_admin_cmd = None
+ arg_formats = {}
+ django_admin_arg_order = ()
+ use_old_vardict = False
+
+ def __init__(self):
+ argument_spec = dict(django_std_args)
+ argument_spec.update(self.module.get("argument_spec", {}))
+ self.module["argument_spec"] = argument_spec
+ super(DjangoModuleHelper, self).__init__(self.module)
+ if self.django_admin_cmd is not None:
+ self.vars.command = self.django_admin_cmd
+
+ def __run__(self):
+ runner = _DjangoRunner(self.module,
+ default_args_order=self.django_admin_arg_order,
+ arg_formats=self.arg_formats,
+ venv=self.vars.venv,
+ check_rc=True)
+ with runner() as ctx:
+ results = ctx.run()
+ self.vars.stdout = ctx.results_out
+ self.vars.stderr = ctx.results_err
+ self.vars.cmd = ctx.cmd
+ if self.verbosity >= 3:
+ self.vars.run_info = ctx.run_info
+
+ return results
+
+ @classmethod
+ def execute(cls):
+ cls().run()
diff --git a/ansible_collections/community/general/plugins/module_utils/gandi_livedns_api.py b/ansible_collections/community/general/plugins/module_utils/gandi_livedns_api.py
index 53245d44d..824fea46e 100644
--- a/ansible_collections/community/general/plugins/module_utils/gandi_livedns_api.py
+++ b/ansible_collections/community/general/plugins/module_utils/gandi_livedns_api.py
@@ -33,6 +33,7 @@ class GandiLiveDNSAPI(object):
def __init__(self, module):
self.module = module
self.api_key = module.params['api_key']
+ self.personal_access_token = module.params['personal_access_token']
def _build_error_message(self, module, info):
s = ''
@@ -50,7 +51,12 @@ class GandiLiveDNSAPI(object):
return s
def _gandi_api_call(self, api_call, method='GET', payload=None, error_on_404=True):
- headers = {'Authorization': 'Apikey {0}'.format(self.api_key),
+ authorization_header = (
+ 'Bearer {0}'.format(self.personal_access_token)
+ if self.personal_access_token
+ else 'Apikey {0}'.format(self.api_key)
+ )
+ headers = {'Authorization': authorization_header,
'Content-Type': 'application/json'}
data = None
if payload:
diff --git a/ansible_collections/community/general/plugins/module_utils/gitlab.py b/ansible_collections/community/general/plugins/module_utils/gitlab.py
index b1354d8a9..224789a71 100644
--- a/ansible_collections/community/general/plugins/module_utils/gitlab.py
+++ b/ansible_collections/community/general/plugins/module_utils/gitlab.py
@@ -115,6 +115,11 @@ def gitlab_authentication(module, min_version=None):
# Changelog : https://github.com/python-gitlab/python-gitlab/releases/tag/v1.13.0
# This condition allow to still support older version of the python-gitlab library
if LooseVersion(gitlab.__version__) < LooseVersion("1.13.0"):
+ module.deprecate(
+ "GitLab basic auth is deprecated and will be removed in next major version, "
+ "using another auth method (API token or OAuth) is strongly recommended.",
+ version='10.0.0',
+ collection_name='community.general')
gitlab_instance = gitlab.Gitlab(url=gitlab_url, ssl_verify=verify, email=gitlab_user, password=gitlab_password,
private_token=gitlab_token, api_version=4)
else:
diff --git a/ansible_collections/community/general/plugins/module_utils/homebrew.py b/ansible_collections/community/general/plugins/module_utils/homebrew.py
new file mode 100644
index 000000000..281683210
--- /dev/null
+++ b/ansible_collections/community/general/plugins/module_utils/homebrew.py
@@ -0,0 +1,115 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) Ansible project
+# Simplified BSD License (see LICENSES/BSD-2-Clause.txt or https://opensource.org/licenses/BSD-2-Clause)
+# SPDX-License-Identifier: BSD-2-Clause
+
+from __future__ import absolute_import, division, print_function
+
+__metaclass__ = type
+
+import os
+import re
+from ansible.module_utils.six import string_types
+
+
+def _create_regex_group_complement(s):
+ lines = (line.strip() for line in s.split("\n") if line.strip())
+ chars = filter(None, (line.split("#")[0].strip() for line in lines))
+ group = r"[^" + r"".join(chars) + r"]"
+ return re.compile(group)
+
+
+class HomebrewValidate(object):
+ # class regexes ------------------------------------------------ {{{
+ VALID_PATH_CHARS = r"""
+ \w # alphanumeric characters (i.e., [a-zA-Z0-9_])
+ \s # spaces
+ : # colons
+ {sep} # the OS-specific path separator
+ . # dots
+ \- # dashes
+ """.format(
+ sep=os.path.sep
+ )
+
+ VALID_BREW_PATH_CHARS = r"""
+ \w # alphanumeric characters (i.e., [a-zA-Z0-9_])
+ \s # spaces
+ {sep} # the OS-specific path separator
+ . # dots
+ \- # dashes
+ """.format(
+ sep=os.path.sep
+ )
+
+ VALID_PACKAGE_CHARS = r"""
+ \w # alphanumeric characters (i.e., [a-zA-Z0-9_])
+ . # dots
+ / # slash (for taps)
+ \+ # plusses
+ \- # dashes
+ : # colons (for URLs)
+ @ # at-sign
+ """
+
+ INVALID_PATH_REGEX = _create_regex_group_complement(VALID_PATH_CHARS)
+ INVALID_BREW_PATH_REGEX = _create_regex_group_complement(VALID_BREW_PATH_CHARS)
+ INVALID_PACKAGE_REGEX = _create_regex_group_complement(VALID_PACKAGE_CHARS)
+ # /class regexes ----------------------------------------------- }}}
+
+ # class validations -------------------------------------------- {{{
+ @classmethod
+ def valid_path(cls, path):
+ """
+ `path` must be one of:
+ - list of paths
+ - a string containing only:
+ - alphanumeric characters
+ - dashes
+ - dots
+ - spaces
+ - colons
+ - os.path.sep
+ """
+
+ if isinstance(path, string_types):
+ return not cls.INVALID_PATH_REGEX.search(path)
+
+ try:
+ iter(path)
+ except TypeError:
+ return False
+ else:
+ paths = path
+ return all(cls.valid_brew_path(path_) for path_ in paths)
+
+ @classmethod
+ def valid_brew_path(cls, brew_path):
+ """
+ `brew_path` must be one of:
+ - None
+ - a string containing only:
+ - alphanumeric characters
+ - dashes
+ - dots
+ - spaces
+ - os.path.sep
+ """
+
+ if brew_path is None:
+ return True
+
+ return isinstance(
+ brew_path, string_types
+ ) and not cls.INVALID_BREW_PATH_REGEX.search(brew_path)
+
+ @classmethod
+ def valid_package(cls, package):
+ """A valid package is either None or alphanumeric."""
+
+ if package is None:
+ return True
+
+ return isinstance(
+ package, string_types
+ ) and not cls.INVALID_PACKAGE_REGEX.search(package)
diff --git a/ansible_collections/community/general/plugins/module_utils/mh/mixins/deps.py b/ansible_collections/community/general/plugins/module_utils/mh/mixins/deps.py
index 772df8c0e..dd879ff4b 100644
--- a/ansible_collections/community/general/plugins/module_utils/mh/mixins/deps.py
+++ b/ansible_collections/community/general/plugins/module_utils/mh/mixins/deps.py
@@ -7,13 +7,14 @@
from __future__ import absolute_import, division, print_function
__metaclass__ = type
-import traceback
-
-from ansible_collections.community.general.plugins.module_utils.mh.base import ModuleHelperBase
-from ansible_collections.community.general.plugins.module_utils.mh.deco import module_fails_on_exception
-
class DependencyCtxMgr(object):
+ """
+ DEPRECATION WARNING
+
+ This class is deprecated and will be removed in community.general 11.0.0
+ Modules should use plugins/module_utils/deps.py instead.
+ """
def __init__(self, name, msg=None):
self.name = name
self.msg = msg
@@ -35,39 +36,3 @@ class DependencyCtxMgr(object):
@property
def text(self):
return self.msg or str(self.exc_val)
-
-
-class DependencyMixin(ModuleHelperBase):
- """
- THIS CLASS IS BEING DEPRECATED.
- See the deprecation notice in ``DependencyMixin.fail_on_missing_deps()`` below.
-
- Mixin for mapping module options to running a CLI command with its arguments.
- """
- _dependencies = []
-
- @classmethod
- def dependency(cls, name, msg):
- cls._dependencies.append(DependencyCtxMgr(name, msg))
- return cls._dependencies[-1]
-
- def fail_on_missing_deps(self):
- if not self._dependencies:
- return
- self.module.deprecate(
- 'The DependencyMixin is being deprecated. '
- 'Modules should use community.general.plugins.module_utils.deps instead.',
- version='9.0.0',
- collection_name='community.general',
- )
- for d in self._dependencies:
- if not d.has_it:
- self.module.fail_json(changed=False,
- exception="\n".join(traceback.format_exception(d.exc_type, d.exc_val, d.exc_tb)),
- msg=d.text,
- **self.output)
-
- @module_fails_on_exception
- def run(self):
- self.fail_on_missing_deps()
- super(DependencyMixin, self).run()
diff --git a/ansible_collections/community/general/plugins/module_utils/mh/mixins/vars.py b/ansible_collections/community/general/plugins/module_utils/mh/mixins/vars.py
index 91f4e4a18..161560973 100644
--- a/ansible_collections/community/general/plugins/module_utils/mh/mixins/vars.py
+++ b/ansible_collections/community/general/plugins/module_utils/mh/mixins/vars.py
@@ -14,7 +14,7 @@ class VarMeta(object):
"""
DEPRECATION WARNING
- This class is deprecated and will be removed in community.general 10.0.0
+ This class is deprecated and will be removed in community.general 11.0.0
Modules should use the VarDict from plugins/module_utils/vardict.py instead.
"""
@@ -70,7 +70,7 @@ class VarDict(object):
"""
DEPRECATION WARNING
- This class is deprecated and will be removed in community.general 10.0.0
+ This class is deprecated and will be removed in community.general 11.0.0
Modules should use the VarDict from plugins/module_utils/vardict.py instead.
"""
def __init__(self):
@@ -139,7 +139,7 @@ class VarsMixin(object):
"""
DEPRECATION WARNING
- This class is deprecated and will be removed in community.general 10.0.0
+ This class is deprecated and will be removed in community.general 11.0.0
Modules should use the VarDict from plugins/module_utils/vardict.py instead.
"""
def __init__(self, module=None):
diff --git a/ansible_collections/community/general/plugins/module_utils/mh/module_helper.py b/ansible_collections/community/general/plugins/module_utils/mh/module_helper.py
index c33efb16b..ca95199d9 100644
--- a/ansible_collections/community/general/plugins/module_utils/mh/module_helper.py
+++ b/ansible_collections/community/general/plugins/module_utils/mh/module_helper.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-# (c) 2020, Alexei Znamensky <russoz@gmail.com>
-# Copyright (c) 2020, Ansible Project
+# (c) 2020-2024, Alexei Znamensky <russoz@gmail.com>
+# Copyright (c) 2020-2024, Ansible Project
# Simplified BSD License (see LICENSES/BSD-2-Clause.txt or https://opensource.org/licenses/BSD-2-Clause)
# SPDX-License-Identifier: BSD-2-Clause
@@ -10,23 +10,40 @@ __metaclass__ = type
from ansible.module_utils.common.dict_transformations import dict_merge
+from ansible_collections.community.general.plugins.module_utils.vardict import VarDict as _NewVarDict # remove "as NewVarDict" in 11.0.0
# (TODO: remove AnsibleModule!) pylint: disable-next=unused-import
-from ansible_collections.community.general.plugins.module_utils.mh.base import ModuleHelperBase, AnsibleModule # noqa: F401
+from ansible_collections.community.general.plugins.module_utils.mh.base import AnsibleModule # noqa: F401 DEPRECATED, remove in 11.0.0
+from ansible_collections.community.general.plugins.module_utils.mh.base import ModuleHelperBase
from ansible_collections.community.general.plugins.module_utils.mh.mixins.state import StateMixin
-from ansible_collections.community.general.plugins.module_utils.mh.mixins.deps import DependencyMixin
-from ansible_collections.community.general.plugins.module_utils.mh.mixins.vars import VarsMixin
+# (TODO: remove mh.mixins.vars!) pylint: disable-next=unused-import
+from ansible_collections.community.general.plugins.module_utils.mh.mixins.vars import VarsMixin, VarDict as _OldVarDict # noqa: F401 remove in 11.0.0
from ansible_collections.community.general.plugins.module_utils.mh.mixins.deprecate_attrs import DeprecateAttrsMixin
-class ModuleHelper(DeprecateAttrsMixin, VarsMixin, DependencyMixin, ModuleHelperBase):
+class ModuleHelper(DeprecateAttrsMixin, ModuleHelperBase):
facts_name = None
output_params = ()
diff_params = ()
change_params = ()
facts_params = ()
+ use_old_vardict = True # remove in 11.0.0
+ mute_vardict_deprecation = False
def __init__(self, module=None):
- super(ModuleHelper, self).__init__(module)
+ if self.use_old_vardict: # remove first half of the if in 11.0.0
+ self.vars = _OldVarDict()
+ super(ModuleHelper, self).__init__(module)
+ if not self.mute_vardict_deprecation:
+ self.module.deprecate(
+ "This class is using the old VarDict from ModuleHelper, which is deprecated. "
+ "Set the class variable use_old_vardict to False and make the necessary adjustments."
+ "The old VarDict class will be removed in community.general 11.0.0",
+ version="11.0.0", collection_name="community.general"
+ )
+ else:
+ self.vars = _NewVarDict()
+ super(ModuleHelper, self).__init__(module)
+
for name, value in self.module.params.items():
self.vars.set(
name, value,
@@ -36,6 +53,12 @@ class ModuleHelper(DeprecateAttrsMixin, VarsMixin, DependencyMixin, ModuleHelper
fact=name in self.facts_params,
)
+ def update_vars(self, meta=None, **kwargs):
+ if meta is None:
+ meta = {}
+ for k, v in kwargs.items():
+ self.vars.set(k, v, **meta)
+
def update_output(self, **kwargs):
self.update_vars(meta={"output": True}, **kwargs)
@@ -43,7 +66,10 @@ class ModuleHelper(DeprecateAttrsMixin, VarsMixin, DependencyMixin, ModuleHelper
self.update_vars(meta={"fact": True}, **kwargs)
def _vars_changed(self):
- return any(self.vars.has_changed(v) for v in self.vars.change_vars())
+ if self.use_old_vardict:
+ return any(self.vars.has_changed(v) for v in self.vars.change_vars())
+
+ return self.vars.has_changed
def has_changed(self):
return self.changed or self._vars_changed()
diff --git a/ansible_collections/community/general/plugins/module_utils/module_helper.py b/ansible_collections/community/general/plugins/module_utils/module_helper.py
index 5aa16c057..366699329 100644
--- a/ansible_collections/community/general/plugins/module_utils/module_helper.py
+++ b/ansible_collections/community/general/plugins/module_utils/module_helper.py
@@ -9,14 +9,14 @@ __metaclass__ = type
# pylint: disable=unused-import
-
from ansible_collections.community.general.plugins.module_utils.mh.module_helper import (
- ModuleHelper, StateModuleHelper, AnsibleModule
+ ModuleHelper, StateModuleHelper,
+ AnsibleModule # remove in 11.0.0
)
-from ansible_collections.community.general.plugins.module_utils.mh.mixins.state import StateMixin # noqa: F401
-from ansible_collections.community.general.plugins.module_utils.mh.mixins.deps import DependencyCtxMgr, DependencyMixin # noqa: F401
+from ansible_collections.community.general.plugins.module_utils.mh.mixins.state import StateMixin # noqa: F401 remove in 11.0.0
+from ansible_collections.community.general.plugins.module_utils.mh.mixins.deps import DependencyCtxMgr # noqa: F401 remove in 11.0.0
from ansible_collections.community.general.plugins.module_utils.mh.exceptions import ModuleHelperException # noqa: F401
from ansible_collections.community.general.plugins.module_utils.mh.deco import (
cause_changes, module_fails_on_exception, check_mode_skip, check_mode_skip_returns,
)
-from ansible_collections.community.general.plugins.module_utils.mh.mixins.vars import VarMeta, VarDict, VarsMixin # noqa: F401
+from ansible_collections.community.general.plugins.module_utils.mh.mixins.vars import VarMeta, VarDict, VarsMixin # noqa: F401 remove in 11.0.0
diff --git a/ansible_collections/community/general/plugins/module_utils/puppet.py b/ansible_collections/community/general/plugins/module_utils/puppet.py
index f05b0673f..e06683b3e 100644
--- a/ansible_collections/community/general/plugins/module_utils/puppet.py
+++ b/ansible_collections/community/general/plugins/module_utils/puppet.py
@@ -103,6 +103,7 @@ def puppet_runner(module):
modulepath=cmd_runner_fmt.as_opt_eq_val("--modulepath"),
_execute=cmd_runner_fmt.as_func(execute_func),
summarize=cmd_runner_fmt.as_bool("--summarize"),
+ waitforlock=cmd_runner_fmt.as_opt_val("--waitforlock"),
debug=cmd_runner_fmt.as_bool("--debug"),
verbose=cmd_runner_fmt.as_bool("--verbose"),
),
diff --git a/ansible_collections/community/general/plugins/module_utils/python_runner.py b/ansible_collections/community/general/plugins/module_utils/python_runner.py
new file mode 100644
index 000000000..f678f247b
--- /dev/null
+++ b/ansible_collections/community/general/plugins/module_utils/python_runner.py
@@ -0,0 +1,34 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2024, Alexei Znamensky <russoz@gmail.com>
+# 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
+
+import os
+
+from ansible_collections.community.general.plugins.module_utils.cmd_runner import CmdRunner, _ensure_list
+
+
+class PythonRunner(CmdRunner):
+ def __init__(self, module, command, arg_formats=None, default_args_order=(),
+ check_rc=False, force_lang="C", path_prefix=None, environ_update=None,
+ python="python", venv=None):
+ self.python = python
+ self.venv = venv
+ self.has_venv = venv is not None
+
+ if (os.path.isabs(python) or '/' in python):
+ self.python = python
+ elif self.has_venv:
+ path_prefix = os.path.join(venv, "bin")
+ if environ_update is None:
+ environ_update = {}
+ environ_update["PATH"] = "%s:%s" % (path_prefix, os.environ["PATH"])
+ environ_update["VIRTUAL_ENV"] = venv
+
+ python_cmd = [self.python] + _ensure_list(command)
+
+ super(PythonRunner, self).__init__(module, python_cmd, arg_formats, default_args_order,
+ check_rc, force_lang, path_prefix, environ_update)
diff --git a/ansible_collections/community/general/plugins/module_utils/rax.py b/ansible_collections/community/general/plugins/module_utils/rax.py
deleted file mode 100644
index 6331c0d1b..000000000
--- a/ansible_collections/community/general/plugins/module_utils/rax.py
+++ /dev/null
@@ -1,334 +0,0 @@
-# -*- coding: utf-8 -*-
-# This code is part of Ansible, but is an independent component.
-# This particular file snippet, and this file snippet only, is BSD licensed.
-# Modules you write using this snippet, which is embedded dynamically by
-# Ansible still belong to the author of the module, and may assign their own
-# license to the complete work.
-#
-# Copyright (c), Michael DeHaan <michael.dehaan@gmail.com>, 2012-2013
-#
-# Simplified BSD License (see LICENSES/BSD-2-Clause.txt or https://opensource.org/licenses/BSD-2-Clause)
-# SPDX-License-Identifier: BSD-2-Clause
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-
-
-import os
-import re
-from uuid import UUID
-
-from ansible.module_utils.six import text_type, binary_type
-
-FINAL_STATUSES = ('ACTIVE', 'ERROR')
-VOLUME_STATUS = ('available', 'attaching', 'creating', 'deleting', 'in-use',
- 'error', 'error_deleting')
-
-CLB_ALGORITHMS = ['RANDOM', 'LEAST_CONNECTIONS', 'ROUND_ROBIN',
- 'WEIGHTED_LEAST_CONNECTIONS', 'WEIGHTED_ROUND_ROBIN']
-CLB_PROTOCOLS = ['DNS_TCP', 'DNS_UDP', 'FTP', 'HTTP', 'HTTPS', 'IMAPS',
- 'IMAPv4', 'LDAP', 'LDAPS', 'MYSQL', 'POP3', 'POP3S', 'SMTP',
- 'TCP', 'TCP_CLIENT_FIRST', 'UDP', 'UDP_STREAM', 'SFTP']
-
-NON_CALLABLES = (text_type, binary_type, bool, dict, int, list, type(None))
-PUBLIC_NET_ID = "00000000-0000-0000-0000-000000000000"
-SERVICE_NET_ID = "11111111-1111-1111-1111-111111111111"
-
-
-def rax_slugify(value):
- """Prepend a key with rax_ and normalize the key name"""
- return 'rax_%s' % (re.sub(r'[^\w-]', '_', value).lower().lstrip('_'))
-
-
-def rax_clb_node_to_dict(obj):
- """Function to convert a CLB Node object to a dict"""
- if not obj:
- return {}
- node = obj.to_dict()
- node['id'] = obj.id
- node['weight'] = obj.weight
- return node
-
-
-def rax_to_dict(obj, obj_type='standard'):
- """Generic function to convert a pyrax object to a dict
-
- obj_type values:
- standard
- clb
- server
-
- """
- instance = {}
- for key in dir(obj):
- value = getattr(obj, key)
- if obj_type == 'clb' and key == 'nodes':
- instance[key] = []
- for node in value:
- instance[key].append(rax_clb_node_to_dict(node))
- elif (isinstance(value, list) and len(value) > 0 and
- not isinstance(value[0], NON_CALLABLES)):
- instance[key] = []
- for item in value:
- instance[key].append(rax_to_dict(item))
- elif (isinstance(value, NON_CALLABLES) and not key.startswith('_')):
- if obj_type == 'server':
- if key == 'image':
- if not value:
- instance['rax_boot_source'] = 'volume'
- else:
- instance['rax_boot_source'] = 'local'
- key = rax_slugify(key)
- instance[key] = value
-
- if obj_type == 'server':
- for attr in ['id', 'accessIPv4', 'name', 'status']:
- instance[attr] = instance.get(rax_slugify(attr))
-
- return instance
-
-
-def rax_find_bootable_volume(module, rax_module, server, exit=True):
- """Find a servers bootable volume"""
- cs = rax_module.cloudservers
- cbs = rax_module.cloud_blockstorage
- server_id = rax_module.utils.get_id(server)
- volumes = cs.volumes.get_server_volumes(server_id)
- bootable_volumes = []
- for volume in volumes:
- vol = cbs.get(volume)
- if module.boolean(vol.bootable):
- bootable_volumes.append(vol)
- if not bootable_volumes:
- if exit:
- module.fail_json(msg='No bootable volumes could be found for '
- 'server %s' % server_id)
- else:
- return False
- elif len(bootable_volumes) > 1:
- if exit:
- module.fail_json(msg='Multiple bootable volumes found for server '
- '%s' % server_id)
- else:
- return False
-
- return bootable_volumes[0]
-
-
-def rax_find_image(module, rax_module, image, exit=True):
- """Find a server image by ID or Name"""
- cs = rax_module.cloudservers
- try:
- UUID(image)
- except ValueError:
- try:
- image = cs.images.find(human_id=image)
- except (cs.exceptions.NotFound, cs.exceptions.NoUniqueMatch):
- try:
- image = cs.images.find(name=image)
- except (cs.exceptions.NotFound,
- cs.exceptions.NoUniqueMatch):
- if exit:
- module.fail_json(msg='No matching image found (%s)' %
- image)
- else:
- return False
-
- return rax_module.utils.get_id(image)
-
-
-def rax_find_volume(module, rax_module, name):
- """Find a Block storage volume by ID or name"""
- cbs = rax_module.cloud_blockstorage
- try:
- UUID(name)
- volume = cbs.get(name)
- except ValueError:
- try:
- volume = cbs.find(name=name)
- except rax_module.exc.NotFound:
- volume = None
- except Exception as e:
- module.fail_json(msg='%s' % e)
- return volume
-
-
-def rax_find_network(module, rax_module, network):
- """Find a cloud network by ID or name"""
- cnw = rax_module.cloud_networks
- try:
- UUID(network)
- except ValueError:
- if network.lower() == 'public':
- return cnw.get_server_networks(PUBLIC_NET_ID)
- elif network.lower() == 'private':
- return cnw.get_server_networks(SERVICE_NET_ID)
- else:
- try:
- network_obj = cnw.find_network_by_label(network)
- except (rax_module.exceptions.NetworkNotFound,
- rax_module.exceptions.NetworkLabelNotUnique):
- module.fail_json(msg='No matching network found (%s)' %
- network)
- else:
- return cnw.get_server_networks(network_obj)
- else:
- return cnw.get_server_networks(network)
-
-
-def rax_find_server(module, rax_module, server):
- """Find a Cloud Server by ID or name"""
- cs = rax_module.cloudservers
- try:
- UUID(server)
- server = cs.servers.get(server)
- except ValueError:
- servers = cs.servers.list(search_opts=dict(name='^%s$' % server))
- if not servers:
- module.fail_json(msg='No Server was matched by name, '
- 'try using the Server ID instead')
- if len(servers) > 1:
- module.fail_json(msg='Multiple servers matched by name, '
- 'try using the Server ID instead')
-
- # We made it this far, grab the first and hopefully only server
- # in the list
- server = servers[0]
- return server
-
-
-def rax_find_loadbalancer(module, rax_module, loadbalancer):
- """Find a Cloud Load Balancer by ID or name"""
- clb = rax_module.cloud_loadbalancers
- try:
- found = clb.get(loadbalancer)
- except Exception:
- found = []
- for lb in clb.list():
- if loadbalancer == lb.name:
- found.append(lb)
-
- if not found:
- module.fail_json(msg='No loadbalancer was matched')
-
- if len(found) > 1:
- module.fail_json(msg='Multiple loadbalancers matched')
-
- # We made it this far, grab the first and hopefully only item
- # in the list
- found = found[0]
-
- return found
-
-
-def rax_argument_spec():
- """Return standard base dictionary used for the argument_spec
- argument in AnsibleModule
-
- """
- return dict(
- api_key=dict(type='str', aliases=['password'], no_log=True),
- auth_endpoint=dict(type='str'),
- credentials=dict(type='path', aliases=['creds_file']),
- env=dict(type='str'),
- identity_type=dict(type='str', default='rackspace'),
- region=dict(type='str'),
- tenant_id=dict(type='str'),
- tenant_name=dict(type='str'),
- username=dict(type='str'),
- validate_certs=dict(type='bool', aliases=['verify_ssl']),
- )
-
-
-def rax_required_together():
- """Return the default list used for the required_together argument to
- AnsibleModule"""
- return [['api_key', 'username']]
-
-
-def setup_rax_module(module, rax_module, region_required=True):
- """Set up pyrax in a standard way for all modules"""
- rax_module.USER_AGENT = 'ansible/%s %s' % (module.ansible_version,
- rax_module.USER_AGENT)
-
- api_key = module.params.get('api_key')
- auth_endpoint = module.params.get('auth_endpoint')
- credentials = module.params.get('credentials')
- env = module.params.get('env')
- identity_type = module.params.get('identity_type')
- region = module.params.get('region')
- tenant_id = module.params.get('tenant_id')
- tenant_name = module.params.get('tenant_name')
- username = module.params.get('username')
- verify_ssl = module.params.get('validate_certs')
-
- if env is not None:
- rax_module.set_environment(env)
-
- rax_module.set_setting('identity_type', identity_type)
- if verify_ssl is not None:
- rax_module.set_setting('verify_ssl', verify_ssl)
- if auth_endpoint is not None:
- rax_module.set_setting('auth_endpoint', auth_endpoint)
- if tenant_id is not None:
- rax_module.set_setting('tenant_id', tenant_id)
- if tenant_name is not None:
- rax_module.set_setting('tenant_name', tenant_name)
-
- try:
- username = username or os.environ.get('RAX_USERNAME')
- if not username:
- username = rax_module.get_setting('keyring_username')
- if username:
- api_key = 'USE_KEYRING'
- if not api_key:
- api_key = os.environ.get('RAX_API_KEY')
- credentials = (credentials or os.environ.get('RAX_CREDENTIALS') or
- os.environ.get('RAX_CREDS_FILE'))
- region = (region or os.environ.get('RAX_REGION') or
- rax_module.get_setting('region'))
- except KeyError as e:
- module.fail_json(msg='Unable to load %s' % e.message)
-
- try:
- if api_key and username:
- if api_key == 'USE_KEYRING':
- rax_module.keyring_auth(username, region=region)
- else:
- rax_module.set_credentials(username, api_key=api_key,
- region=region)
- elif credentials:
- credentials = os.path.expanduser(credentials)
- rax_module.set_credential_file(credentials, region=region)
- else:
- raise Exception('No credentials supplied!')
- except Exception as e:
- if e.message:
- msg = str(e.message)
- else:
- msg = repr(e)
- module.fail_json(msg=msg)
-
- if region_required and region not in rax_module.regions:
- module.fail_json(msg='%s is not a valid region, must be one of: %s' %
- (region, ','.join(rax_module.regions)))
-
- return rax_module
-
-
-def rax_scaling_group_personality_file(module, files):
- if not files:
- return []
-
- results = []
- for rpath, lpath in files.items():
- lpath = os.path.expanduser(lpath)
- try:
- with open(lpath, 'r') as f:
- results.append({
- 'path': rpath,
- 'contents': f.read(),
- })
- except Exception as e:
- module.fail_json(msg='Failed to load %s: %s' % (lpath, str(e)))
- return results
diff --git a/ansible_collections/community/general/plugins/module_utils/redhat.py b/ansible_collections/community/general/plugins/module_utils/redhat.py
index 110159ddf..321386a0a 100644
--- a/ansible_collections/community/general/plugins/module_utils/redhat.py
+++ b/ansible_collections/community/general/plugins/module_utils/redhat.py
@@ -15,10 +15,8 @@ __metaclass__ = type
import os
-import re
import shutil
import tempfile
-import types
from ansible.module_utils.six.moves import configparser
@@ -76,241 +74,3 @@ class RegistrationBase(object):
def subscribe(self, **kwargs):
raise NotImplementedError("Must be implemented by a sub-class")
-
-
-class Rhsm(RegistrationBase):
- """
- DEPRECATION WARNING
-
- This class is deprecated and will be removed in community.general 9.0.0.
- There is no replacement for it; please contact the community.general
- maintainers in case you are using it.
- """
-
- def __init__(self, module, username=None, password=None):
- RegistrationBase.__init__(self, module, username, password)
- self.config = self._read_config()
- self.module = module
- self.module.deprecate(
- 'The Rhsm class is deprecated with no replacement.',
- version='9.0.0',
- collection_name='community.general',
- )
-
- def _read_config(self, rhsm_conf='/etc/rhsm/rhsm.conf'):
- '''
- Load RHSM configuration from /etc/rhsm/rhsm.conf.
- Returns:
- * ConfigParser object
- '''
-
- # Read RHSM defaults ...
- cp = configparser.ConfigParser()
- cp.read(rhsm_conf)
-
- # Add support for specifying a default value w/o having to standup some configuration
- # Yeah, I know this should be subclassed ... but, oh well
- def get_option_default(self, key, default=''):
- sect, opt = key.split('.', 1)
- if self.has_section(sect) and self.has_option(sect, opt):
- return self.get(sect, opt)
- else:
- return default
-
- cp.get_option = types.MethodType(get_option_default, cp, configparser.ConfigParser)
-
- return cp
-
- def enable(self):
- '''
- Enable the system to receive updates from subscription-manager.
- This involves updating affected yum plugins and removing any
- conflicting yum repositories.
- '''
- RegistrationBase.enable(self)
- self.update_plugin_conf('rhnplugin', False)
- self.update_plugin_conf('subscription-manager', True)
-
- def configure(self, **kwargs):
- '''
- Configure the system as directed for registration with RHN
- Raises:
- * Exception - if error occurs while running command
- '''
- args = ['subscription-manager', 'config']
-
- # Pass supplied **kwargs as parameters to subscription-manager. Ignore
- # non-configuration parameters and replace '_' with '.'. For example,
- # 'server_hostname' becomes '--system.hostname'.
- for k, v in kwargs.items():
- if re.search(r'^(system|rhsm)_', k):
- args.append('--%s=%s' % (k.replace('_', '.'), v))
-
- self.module.run_command(args, check_rc=True)
-
- @property
- def is_registered(self):
- '''
- Determine whether the current system
- Returns:
- * Boolean - whether the current system is currently registered to
- RHN.
- '''
- args = ['subscription-manager', 'identity']
- rc, stdout, stderr = self.module.run_command(args, check_rc=False)
- if rc == 0:
- return True
- else:
- return False
-
- def register(self, username, password, autosubscribe, activationkey):
- '''
- Register the current system to the provided RHN server
- Raises:
- * Exception - if error occurs while running command
- '''
- args = ['subscription-manager', 'register']
-
- # Generate command arguments
- if activationkey:
- args.append('--activationkey "%s"' % activationkey)
- else:
- if autosubscribe:
- args.append('--autosubscribe')
- if username:
- args.extend(['--username', username])
- if password:
- args.extend(['--password', password])
-
- # Do the needful...
- rc, stderr, stdout = self.module.run_command(args, check_rc=True)
-
- def unsubscribe(self):
- '''
- Unsubscribe a system from all subscribed channels
- Raises:
- * Exception - if error occurs while running command
- '''
- args = ['subscription-manager', 'unsubscribe', '--all']
- rc, stderr, stdout = self.module.run_command(args, check_rc=True)
-
- def unregister(self):
- '''
- Unregister a currently registered system
- Raises:
- * Exception - if error occurs while running command
- '''
- args = ['subscription-manager', 'unregister']
- rc, stderr, stdout = self.module.run_command(args, check_rc=True)
- self.update_plugin_conf('rhnplugin', False)
- self.update_plugin_conf('subscription-manager', False)
-
- def subscribe(self, regexp):
- '''
- Subscribe current system to available pools matching the specified
- regular expression
- Raises:
- * Exception - if error occurs while running command
- '''
-
- # Available pools ready for subscription
- available_pools = RhsmPools(self.module)
-
- for pool in available_pools.filter(regexp):
- pool.subscribe()
-
-
-class RhsmPool(object):
- """
- Convenience class for housing subscription information
-
- DEPRECATION WARNING
-
- This class is deprecated and will be removed in community.general 9.0.0.
- There is no replacement for it; please contact the community.general
- maintainers in case you are using it.
- """
-
- def __init__(self, module, **kwargs):
- self.module = module
- for k, v in kwargs.items():
- setattr(self, k, v)
- self.module.deprecate(
- 'The RhsmPool class is deprecated with no replacement.',
- version='9.0.0',
- collection_name='community.general',
- )
-
- def __str__(self):
- return str(self.__getattribute__('_name'))
-
- def subscribe(self):
- args = "subscription-manager subscribe --pool %s" % self.PoolId
- rc, stdout, stderr = self.module.run_command(args, check_rc=True)
- if rc == 0:
- return True
- else:
- return False
-
-
-class RhsmPools(object):
- """
- This class is used for manipulating pools subscriptions with RHSM
-
- DEPRECATION WARNING
-
- This class is deprecated and will be removed in community.general 9.0.0.
- There is no replacement for it; please contact the community.general
- maintainers in case you are using it.
- """
-
- def __init__(self, module):
- self.module = module
- self.products = self._load_product_list()
- self.module.deprecate(
- 'The RhsmPools class is deprecated with no replacement.',
- version='9.0.0',
- collection_name='community.general',
- )
-
- def __iter__(self):
- return self.products.__iter__()
-
- def _load_product_list(self):
- """
- Loads list of all available pools for system in data structure
- """
- args = "subscription-manager list --available"
- rc, stdout, stderr = self.module.run_command(args, check_rc=True)
-
- products = []
- for line in stdout.split('\n'):
- # Remove leading+trailing whitespace
- line = line.strip()
- # An empty line implies the end of an output group
- if len(line) == 0:
- continue
- # If a colon ':' is found, parse
- elif ':' in line:
- (key, value) = line.split(':', 1)
- key = key.strip().replace(" ", "") # To unify
- value = value.strip()
- if key in ['ProductName', 'SubscriptionName']:
- # Remember the name for later processing
- products.append(RhsmPool(self.module, _name=value, key=value))
- elif products:
- # Associate value with most recently recorded product
- products[-1].__setattr__(key, value)
- # FIXME - log some warning?
- # else:
- # warnings.warn("Unhandled subscription key/value: %s/%s" % (key,value))
- return products
-
- def filter(self, regexp='^$'):
- '''
- Return a list of RhsmPools whose name matches the provided regular expression
- '''
- r = re.compile(regexp)
- for product in self.products:
- if r.search(product._name):
- yield product
diff --git a/ansible_collections/community/general/plugins/module_utils/rundeck.py b/ansible_collections/community/general/plugins/module_utils/rundeck.py
index 7df68a360..cffca7b4e 100644
--- a/ansible_collections/community/general/plugins/module_utils/rundeck.py
+++ b/ansible_collections/community/general/plugins/module_utils/rundeck.py
@@ -28,7 +28,7 @@ def api_argument_spec():
return api_argument_spec
-def api_request(module, endpoint, data=None, method="GET"):
+def api_request(module, endpoint, data=None, method="GET", content_type="application/json"):
"""Manages Rundeck API requests via HTTP(S)
:arg module: The AnsibleModule (used to get url, api_version, api_token, etc).
@@ -63,7 +63,7 @@ def api_request(module, endpoint, data=None, method="GET"):
data=json.dumps(data),
method=method,
headers={
- "Content-Type": "application/json",
+ "Content-Type": content_type,
"Accept": "application/json",
"X-Rundeck-Auth-Token": module.params["api_token"]
}
diff --git a/ansible_collections/community/general/plugins/module_utils/vardict.py b/ansible_collections/community/general/plugins/module_utils/vardict.py
index cfcce4d4d..51f802483 100644
--- a/ansible_collections/community/general/plugins/module_utils/vardict.py
+++ b/ansible_collections/community/general/plugins/module_utils/vardict.py
@@ -100,7 +100,7 @@ class _Variable(object):
return
def __str__(self):
- return "<_Variable: value={0!r}, initial={1!r}, diff={2}, output={3}, change={4}, verbosity={5}>".format(
+ return "<Variable: value={0!r}, initial={1!r}, diff={2}, output={3}, change={4}, verbosity={5}>".format(
self.value, self.initial_value, self.diff, self.output, self.change, self.verbosity
)
diff --git a/ansible_collections/community/general/plugins/modules/aix_lvol.py b/ansible_collections/community/general/plugins/modules/aix_lvol.py
index 1e7b42568..7d0fb1ee0 100644
--- a/ansible_collections/community/general/plugins/modules/aix_lvol.py
+++ b/ansible_collections/community/general/plugins/modules/aix_lvol.py
@@ -240,8 +240,6 @@ def main():
state = module.params['state']
pvs = module.params['pvs']
- pv_list = ' '.join(pvs)
-
if policy == 'maximum':
lv_policy = 'x'
else:
@@ -249,16 +247,16 @@ def main():
# Add echo command when running in check-mode
if module.check_mode:
- test_opt = 'echo '
+ test_opt = [module.get_bin_path("echo", required=True)]
else:
- test_opt = ''
+ test_opt = []
# check if system commands are available
lsvg_cmd = module.get_bin_path("lsvg", required=True)
lslv_cmd = module.get_bin_path("lslv", required=True)
# Get information on volume group requested
- rc, vg_info, err = module.run_command("%s %s" % (lsvg_cmd, vg))
+ rc, vg_info, err = module.run_command([lsvg_cmd, vg])
if rc != 0:
if state == 'absent':
@@ -273,8 +271,7 @@ def main():
lv_size = round_ppsize(convert_size(module, size), base=this_vg['pp_size'])
# Get information on logical volume requested
- rc, lv_info, err = module.run_command(
- "%s %s" % (lslv_cmd, lv))
+ rc, lv_info, err = module.run_command([lslv_cmd, lv])
if rc != 0:
if state == 'absent':
@@ -296,7 +293,7 @@ def main():
# create LV
mklv_cmd = module.get_bin_path("mklv", required=True)
- cmd = "%s %s -t %s -y %s -c %s -e %s %s %s %sM %s" % (test_opt, mklv_cmd, lv_type, lv, copies, lv_policy, opts, vg, lv_size, pv_list)
+ cmd = test_opt + [mklv_cmd, "-t", lv_type, "-y", lv, "-c", copies, "-e", lv_policy, opts, vg, "%sM" % (lv_size, )] + pvs
rc, out, err = module.run_command(cmd)
if rc == 0:
module.exit_json(changed=True, msg="Logical volume %s created." % lv)
@@ -306,7 +303,7 @@ def main():
if state == 'absent':
# remove LV
rmlv_cmd = module.get_bin_path("rmlv", required=True)
- rc, out, err = module.run_command("%s %s -f %s" % (test_opt, rmlv_cmd, this_lv['name']))
+ rc, out, err = module.run_command(test_opt + [rmlv_cmd, "-f", this_lv['name']])
if rc == 0:
module.exit_json(changed=True, msg="Logical volume %s deleted." % lv)
else:
@@ -315,7 +312,7 @@ def main():
if this_lv['policy'] != policy:
# change lv allocation policy
chlv_cmd = module.get_bin_path("chlv", required=True)
- rc, out, err = module.run_command("%s %s -e %s %s" % (test_opt, chlv_cmd, lv_policy, this_lv['name']))
+ rc, out, err = module.run_command(test_opt + [chlv_cmd, "-e", lv_policy, this_lv['name']])
if rc == 0:
module.exit_json(changed=True, msg="Logical volume %s policy changed: %s." % (lv, policy))
else:
@@ -331,7 +328,7 @@ def main():
# resize LV based on absolute values
if int(lv_size) > this_lv['size']:
extendlv_cmd = module.get_bin_path("extendlv", required=True)
- cmd = "%s %s %s %sM" % (test_opt, extendlv_cmd, lv, lv_size - this_lv['size'])
+ cmd = test_opt + [extendlv_cmd, lv, "%sM" % (lv_size - this_lv['size'], )]
rc, out, err = module.run_command(cmd)
if rc == 0:
module.exit_json(changed=True, msg="Logical volume %s size extended to %sMB." % (lv, lv_size))
diff --git a/ansible_collections/community/general/plugins/modules/ansible_galaxy_install.py b/ansible_collections/community/general/plugins/modules/ansible_galaxy_install.py
index 3b0a8fd47..d382ed93a 100644
--- a/ansible_collections/community/general/plugins/modules/ansible_galaxy_install.py
+++ b/ansible_collections/community/general/plugins/modules/ansible_galaxy_install.py
@@ -73,16 +73,6 @@ options:
- Using O(force=true) is mandatory when downgrading.
type: bool
default: false
- ack_ansible29:
- description:
- - This option has no longer any effect and will be removed in community.general 9.0.0.
- type: bool
- default: false
- ack_min_ansiblecore211:
- description:
- - This option has no longer any effect and will be removed in community.general 9.0.0.
- type: bool
- default: false
"""
EXAMPLES = """
@@ -181,7 +171,7 @@ RETURN = """
import re
-from ansible_collections.community.general.plugins.module_utils.cmd_runner import CmdRunner, cmd_runner_fmt as fmt
+from ansible_collections.community.general.plugins.module_utils.cmd_runner import CmdRunner, cmd_runner_fmt
from ansible_collections.community.general.plugins.module_utils.module_helper import ModuleHelper, ModuleHelperException
@@ -190,7 +180,9 @@ class AnsibleGalaxyInstall(ModuleHelper):
_RE_LIST_PATH = re.compile(r'^# (?P<path>.*)$')
_RE_LIST_COLL = re.compile(r'^(?P<elem>\w+\.\w+)\s+(?P<version>[\d\.]+)\s*$')
_RE_LIST_ROLE = re.compile(r'^- (?P<elem>\w+\.\w+),\s+(?P<version>[\d\.]+)\s*$')
- _RE_INSTALL_OUTPUT = None # Set after determining ansible version, see __init_module__()
+ _RE_INSTALL_OUTPUT = re.compile(
+ r'^(?:(?P<collection>\w+\.\w+):(?P<cversion>[\d\.]+)|- (?P<role>\w+\.\w+) \((?P<rversion>[\d\.]+)\)) was installed successfully$'
+ )
ansible_version = None
output_params = ('type', 'name', 'dest', 'requirements_file', 'force', 'no_deps')
@@ -202,35 +194,24 @@ class AnsibleGalaxyInstall(ModuleHelper):
dest=dict(type='path'),
force=dict(type='bool', default=False),
no_deps=dict(type='bool', default=False),
- ack_ansible29=dict(
- type='bool',
- default=False,
- removed_in_version='9.0.0',
- removed_from_collection='community.general',
- ),
- ack_min_ansiblecore211=dict(
- type='bool',
- default=False,
- removed_in_version='9.0.0',
- removed_from_collection='community.general',
- ),
),
mutually_exclusive=[('name', 'requirements_file')],
required_one_of=[('name', 'requirements_file')],
required_if=[('type', 'both', ['requirements_file'])],
supports_check_mode=False,
)
+ use_old_vardict = False
command = 'ansible-galaxy'
command_args_formats = dict(
- type=fmt.as_func(lambda v: [] if v == 'both' else [v]),
- galaxy_cmd=fmt.as_list(),
- requirements_file=fmt.as_opt_val('-r'),
- dest=fmt.as_opt_val('-p'),
- force=fmt.as_bool("--force"),
- no_deps=fmt.as_bool("--no-deps"),
- version=fmt.as_bool("--version"),
- name=fmt.as_list(),
+ type=cmd_runner_fmt.as_func(lambda v: [] if v == 'both' else [v]),
+ galaxy_cmd=cmd_runner_fmt.as_list(),
+ requirements_file=cmd_runner_fmt.as_opt_val('-r'),
+ dest=cmd_runner_fmt.as_opt_val('-p'),
+ force=cmd_runner_fmt.as_bool("--force"),
+ no_deps=cmd_runner_fmt.as_bool("--no-deps"),
+ version=cmd_runner_fmt.as_fixed("--version"),
+ name=cmd_runner_fmt.as_list(),
)
def _make_runner(self, lang):
@@ -254,25 +235,18 @@ class AnsibleGalaxyInstall(ModuleHelper):
try:
runner = self._make_runner("C.UTF-8")
with runner("version", check_rc=False, output_process=process) as ctx:
- return runner, ctx.run(version=True)
- except UnsupportedLocale as e:
+ return runner, ctx.run()
+ except UnsupportedLocale:
runner = self._make_runner("en_US.UTF-8")
with runner("version", check_rc=True, output_process=process) as ctx:
- return runner, ctx.run(version=True)
+ return runner, ctx.run()
def __init_module__(self):
- # self.runner = CmdRunner(self.module, command=self.command, arg_formats=self.command_args_formats, force_lang=self.force_lang)
self.runner, self.ansible_version = self._get_ansible_galaxy_version()
if self.ansible_version < (2, 11):
self.module.fail_json(
- msg="Support for Ansible 2.9 and ansible-base 2.10 has ben removed."
+ msg="Support for Ansible 2.9 and ansible-base 2.10 has been removed."
)
- # Collection install output changed:
- # ansible-base 2.10: "coll.name (x.y.z)"
- # ansible-core 2.11+: "coll.name:x.y.z"
- self._RE_INSTALL_OUTPUT = re.compile(r'^(?:(?P<collection>\w+\.\w+)(?: \(|:)(?P<cversion>[\d\.]+)\)?'
- r'|- (?P<role>\w+\.\w+) \((?P<rversion>[\d\.]+)\))'
- r' was installed successfully$')
self.vars.set("new_collections", {}, change=True)
self.vars.set("new_roles", {}, change=True)
if self.vars.type != "collection":
diff --git a/ansible_collections/community/general/plugins/modules/apt_rpm.py b/ansible_collections/community/general/plugins/modules/apt_rpm.py
index 03b87e78f..3a0b6d805 100644
--- a/ansible_collections/community/general/plugins/modules/apt_rpm.py
+++ b/ansible_collections/community/general/plugins/modules/apt_rpm.py
@@ -170,7 +170,7 @@ def local_rpm_package_name(path):
def query_package(module, name):
# rpm -q returns 0 if the package is installed,
# 1 if it is not installed
- rc, out, err = module.run_command("%s -q %s" % (RPM_PATH, name))
+ rc, out, err = module.run_command([RPM_PATH, "-q", name])
if rc == 0:
return True
else:
@@ -203,7 +203,7 @@ def query_package_provides(module, name, allow_upgrade=False):
name = local_rpm_package_name(name)
- rc, out, err = module.run_command("%s -q --provides %s" % (RPM_PATH, name))
+ rc, out, err = module.run_command([RPM_PATH, "-q", "--provides", name])
if rc == 0:
if not allow_upgrade:
return True
@@ -253,7 +253,7 @@ def remove_packages(module, packages):
if not query_package(module, package):
continue
- rc, out, err = module.run_command("%s -y remove %s" % (APT_PATH, package), environ_update={"LANG": "C"})
+ rc, out, err = module.run_command([APT_PATH, "-y", "remove", package], environ_update={"LANG": "C"})
if rc != 0:
module.fail_json(msg="failed to remove %s: %s" % (package, err))
@@ -271,14 +271,14 @@ def install_packages(module, pkgspec, allow_upgrade=False):
if pkgspec is None:
return (False, "Empty package list")
- packages = ""
+ packages = []
for package in pkgspec:
if not query_package_provides(module, package, allow_upgrade=allow_upgrade):
- packages += "'%s' " % package
+ packages.append(package)
- if len(packages) != 0:
-
- rc, out, err = module.run_command("%s -y install %s" % (APT_PATH, packages), environ_update={"LANG": "C"})
+ if packages:
+ command = [APT_PATH, "-y", "install"] + packages
+ rc, out, err = module.run_command(command, environ_update={"LANG": "C"})
installed = True
for package in pkgspec:
@@ -287,7 +287,7 @@ def install_packages(module, pkgspec, allow_upgrade=False):
# apt-rpm always have 0 for exit code if --force is used
if rc or not installed:
- module.fail_json(msg="'apt-get -y install %s' failed: %s" % (packages, err))
+ module.fail_json(msg="'%s' failed: %s" % (" ".join(command), err))
else:
return (True, "%s present(s)" % packages)
else:
@@ -310,6 +310,18 @@ def main():
module.fail_json(msg="cannot find /usr/bin/apt-get and/or /usr/bin/rpm")
p = module.params
+ if p['state'] in ['installed', 'present']:
+ module.deprecate(
+ 'state=%s currently behaves unexpectedly by always upgrading to the latest version if'
+ ' the package is already installed. This behavior is deprecated and will change in'
+ ' community.general 11.0.0. You can use state=latest to explicitly request this behavior'
+ ' or state=present_not_latest to explicitly request the behavior that state=%s will have'
+ ' in community.general 11.0.0, namely that the package will not be upgraded if it is'
+ ' already installed.' % (p['state'], p['state']),
+ version='11.0.0',
+ collection_name='community.general',
+ )
+
modified = False
output = ""
diff --git a/ansible_collections/community/general/plugins/modules/btrfs_subvolume.py b/ansible_collections/community/general/plugins/modules/btrfs_subvolume.py
index 864bb65a6..35327bfe0 100644
--- a/ansible_collections/community/general/plugins/modules/btrfs_subvolume.py
+++ b/ansible_collections/community/general/plugins/modules/btrfs_subvolume.py
@@ -572,10 +572,7 @@ class BtrfsSubvolumeModule(object):
self.__temporary_mounts[cache_key] = mountpoint
mount = self.module.get_bin_path("mount", required=True)
- command = "%s -o noatime,subvolid=%d %s %s " % (mount,
- subvolid,
- device,
- mountpoint)
+ command = [mount, "-o", "noatime,subvolid=%d" % subvolid, device, mountpoint]
result = self.module.run_command(command, check_rc=True)
return mountpoint
@@ -586,10 +583,10 @@ class BtrfsSubvolumeModule(object):
def __cleanup_mount(self, mountpoint):
umount = self.module.get_bin_path("umount", required=True)
- result = self.module.run_command("%s %s" % (umount, mountpoint))
+ result = self.module.run_command([umount, mountpoint])
if result[0] == 0:
rmdir = self.module.get_bin_path("rmdir", required=True)
- self.module.run_command("%s %s" % (rmdir, mountpoint))
+ self.module.run_command([rmdir, mountpoint])
# Format and return results
def get_results(self):
diff --git a/ansible_collections/community/general/plugins/modules/cloudflare_dns.py b/ansible_collections/community/general/plugins/modules/cloudflare_dns.py
index d2bea4266..190497644 100644
--- a/ansible_collections/community/general/plugins/modules/cloudflare_dns.py
+++ b/ansible_collections/community/general/plugins/modules/cloudflare_dns.py
@@ -148,9 +148,9 @@ options:
type:
description:
- The type of DNS record to create. Required if O(state=present).
- - Note that V(SPF) is no longer supported by CloudFlare. Support for it will be removed from community.general 9.0.0.
+ - Support for V(SPF) has been removed from community.general 9.0.0 since that record type is no longer supported by CloudFlare.
type: str
- choices: [ A, AAAA, CNAME, DS, MX, NS, SPF, SRV, SSHFP, TLSA, CAA, TXT ]
+ choices: [ A, AAAA, CNAME, DS, MX, NS, SRV, SSHFP, TLSA, CAA, TXT ]
value:
description:
- The record value.
@@ -674,7 +674,7 @@ class CloudflareAPI(object):
if (params['type'] is None) or (params['record'] is None):
self.module.fail_json(msg="You must provide a type and a record to create a new record")
- if (params['type'] in ['A', 'AAAA', 'CNAME', 'TXT', 'MX', 'NS', 'SPF']):
+ if (params['type'] in ['A', 'AAAA', 'CNAME', 'TXT', 'MX', 'NS']):
if not params['value']:
self.module.fail_json(msg="You must provide a non-empty value to create this record type")
@@ -869,7 +869,7 @@ def main():
state=dict(type='str', default='present', choices=['absent', 'present']),
timeout=dict(type='int', default=30),
ttl=dict(type='int', default=1),
- type=dict(type='str', choices=['A', 'AAAA', 'CNAME', 'DS', 'MX', 'NS', 'SPF', 'SRV', 'SSHFP', 'TLSA', 'CAA', 'TXT']),
+ type=dict(type='str', choices=['A', 'AAAA', 'CNAME', 'DS', 'MX', 'NS', 'SRV', 'SSHFP', 'TLSA', 'CAA', 'TXT']),
value=dict(type='str', aliases=['content']),
weight=dict(type='int', default=1),
zone=dict(type='str', required=True, aliases=['domain']),
diff --git a/ansible_collections/community/general/plugins/modules/consul_policy.py b/ansible_collections/community/general/plugins/modules/consul_policy.py
index f020622a0..2ed6021b0 100644
--- a/ansible_collections/community/general/plugins/modules/consul_policy.py
+++ b/ansible_collections/community/general/plugins/modules/consul_policy.py
@@ -33,6 +33,8 @@ attributes:
version_added: 8.3.0
details:
- In check mode the diff will miss operational attributes.
+ action_group:
+ version_added: 8.3.0
options:
state:
description:
diff --git a/ansible_collections/community/general/plugins/modules/consul_role.py b/ansible_collections/community/general/plugins/modules/consul_role.py
index 0da71507a..e07e2036f 100644
--- a/ansible_collections/community/general/plugins/modules/consul_role.py
+++ b/ansible_collections/community/general/plugins/modules/consul_role.py
@@ -32,6 +32,8 @@ attributes:
details:
- In check mode the diff will miss operational attributes.
version_added: 8.3.0
+ action_group:
+ version_added: 8.3.0
options:
name:
description:
diff --git a/ansible_collections/community/general/plugins/modules/consul_session.py b/ansible_collections/community/general/plugins/modules/consul_session.py
index bd03b561a..87a5f1914 100644
--- a/ansible_collections/community/general/plugins/modules/consul_session.py
+++ b/ansible_collections/community/general/plugins/modules/consul_session.py
@@ -29,6 +29,8 @@ attributes:
support: none
diff_mode:
support: none
+ action_group:
+ version_added: 8.3.0
options:
id:
description:
diff --git a/ansible_collections/community/general/plugins/modules/consul_token.py b/ansible_collections/community/general/plugins/modules/consul_token.py
index eee419863..02bc544da 100644
--- a/ansible_collections/community/general/plugins/modules/consul_token.py
+++ b/ansible_collections/community/general/plugins/modules/consul_token.py
@@ -31,6 +31,8 @@ attributes:
support: partial
details:
- In check mode the diff will miss operational attributes.
+ action_group:
+ version_added: 8.3.0
options:
state:
description:
diff --git a/ansible_collections/community/general/plugins/modules/cpanm.py b/ansible_collections/community/general/plugins/modules/cpanm.py
index 20ac3e714..3beae895d 100644
--- a/ansible_collections/community/general/plugins/modules/cpanm.py
+++ b/ansible_collections/community/general/plugins/modules/cpanm.py
@@ -68,9 +68,10 @@ options:
mode:
description:
- Controls the module behavior. See notes below for more details.
- - Default is V(compatibility) but that behavior is deprecated and will be changed to V(new) in community.general 9.0.0.
+ - The default changed from V(compatibility) to V(new) in community.general 9.0.0.
type: str
choices: [compatibility, new]
+ default: new
version_added: 3.0.0
name_check:
description:
@@ -80,12 +81,16 @@ options:
notes:
- Please note that U(http://search.cpan.org/dist/App-cpanminus/bin/cpanm, cpanm) must be installed on the remote host.
- "This module now comes with a choice of execution O(mode): V(compatibility) or V(new)."
- - "O(mode=compatibility): When using V(compatibility) mode, the module will keep backward compatibility. This is the default mode.
+ - >
+ O(mode=compatibility): When using V(compatibility) mode, the module will keep backward compatibility.
+ This was the default mode before community.general 9.0.0.
O(name) must be either a module name or a distribution file. If the perl module given by O(name) is installed (at the exact O(version)
when specified), then nothing happens. Otherwise, it will be installed using the C(cpanm) executable. O(name) cannot be an URL, or a git URL.
- C(cpanm) version specifiers do not work in this mode."
- - "O(mode=new): When using V(new) mode, the module will behave differently. The O(name) parameter may refer to a module name, a distribution file,
- a HTTP URL or a git repository URL as described in C(cpanminus) documentation. C(cpanm) version specifiers are recognized."
+ C(cpanm) version specifiers do not work in this mode.
+ - >
+ O(mode=new): When using V(new) mode, the module will behave differently. The O(name) parameter may refer to a module name, a distribution file,
+ a HTTP URL or a git repository URL as described in C(cpanminus) documentation. C(cpanm) version specifiers are recognized.
+ This is the default mode from community.general 9.0.0 onwards.
author:
- "Franck Cuny (@fcuny)"
- "Alexei Znamensky (@russoz)"
@@ -150,7 +155,7 @@ class CPANMinus(ModuleHelper):
mirror_only=dict(type='bool', default=False),
installdeps=dict(type='bool', default=False),
executable=dict(type='path'),
- mode=dict(type='str', choices=['compatibility', 'new']),
+ mode=dict(type='str', default='new', choices=['compatibility', 'new']),
name_check=dict(type='str')
),
required_one_of=[('name', 'from_path')],
@@ -165,17 +170,10 @@ class CPANMinus(ModuleHelper):
installdeps=cmd_runner_fmt.as_bool("--installdeps"),
pkg_spec=cmd_runner_fmt.as_list(),
)
+ use_old_vardict = False
def __init_module__(self):
v = self.vars
- if v.mode is None:
- self.deprecate(
- "The default value 'compatibility' for parameter 'mode' is being deprecated "
- "and it will be replaced by 'new'",
- version="9.0.0",
- collection_name="community.general"
- )
- v.mode = "compatibility"
if v.mode == "compatibility":
if v.name_check:
self.do_raise("Parameter name_check can only be used with mode=new")
diff --git a/ansible_collections/community/general/plugins/modules/django_command.py b/ansible_collections/community/general/plugins/modules/django_command.py
new file mode 100644
index 000000000..788f4a100
--- /dev/null
+++ b/ansible_collections/community/general/plugins/modules/django_command.py
@@ -0,0 +1,83 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+# Copyright (c) 2024, Alexei Znamensky <russoz@gmail.com>
+# 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: django_command
+author:
+ - Alexei Znamensky (@russoz)
+short_description: Run Django admin commands
+version_added: 9.0.0
+description:
+ - This module allows the execution of arbitrary Django admin commands.
+extends_documentation_fragment:
+ - community.general.attributes
+ - community.general.django
+attributes:
+ check_mode:
+ support: none
+ diff_mode:
+ support: none
+options:
+ command:
+ description:
+ - Django admin command. It must be a valid command accepted by C(python -m django) at the target system.
+ type: str
+ required: true
+ extra_args:
+ type: list
+ elements: str
+ description:
+ - List of extra arguments passed to the django admin command.
+"""
+
+EXAMPLES = """
+- name: Check the project
+ community.general.django_command:
+ command: check
+ settings: myproject.settings
+
+- name: Check the project in specified python path, using virtual environment
+ community.general.django_command:
+ command: check
+ settings: fancysite.settings
+ pythonpath: /home/joedoe/project/fancysite
+ venv: /home/joedoe/project/fancysite/venv
+"""
+
+RETURN = """
+run_info:
+ description: Command-line execution information.
+ type: dict
+ returned: success and O(verbosity) >= 3
+"""
+
+from ansible_collections.community.general.plugins.module_utils.django import DjangoModuleHelper
+from ansible_collections.community.general.plugins.module_utils.cmd_runner import cmd_runner_fmt
+
+
+class DjangoCommand(DjangoModuleHelper):
+ module = dict(
+ argument_spec=dict(
+ command=dict(type="str", required=True),
+ extra_args=dict(type="list", elements="str"),
+ ),
+ supports_check_mode=False,
+ )
+ arg_formats = dict(
+ extra_args=cmd_runner_fmt.as_list(),
+ )
+ django_admin_arg_order = "extra_args"
+
+
+def main():
+ DjangoCommand.execute()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/community/general/plugins/modules/django_manage.py b/ansible_collections/community/general/plugins/modules/django_manage.py
index 114ec0353..352bfe4b5 100644
--- a/ansible_collections/community/general/plugins/modules/django_manage.py
+++ b/ansible_collections/community/general/plugins/modules/django_manage.py
@@ -28,23 +28,16 @@ options:
command:
description:
- The name of the Django management command to run. The commands listed below are built in this module and have some basic parameter validation.
- - >
- V(cleanup) - clean up old data from the database (deprecated in Django 1.5). This parameter will be
- removed in community.general 9.0.0. Use V(clearsessions) instead.
- V(collectstatic) - Collects the static files into C(STATIC_ROOT).
- V(createcachetable) - Creates the cache tables for use with the database cache backend.
- V(flush) - Removes all data from the database.
- V(loaddata) - Searches for and loads the contents of the named O(fixtures) into the database.
- V(migrate) - Synchronizes the database state with models and migrations.
- - >
- V(syncdb) - Synchronizes the database state with models and migrations (deprecated in Django 1.7).
- This parameter will be removed in community.general 9.0.0. Use V(migrate) instead.
- V(test) - Runs tests for all installed apps.
- - >
- V(validate) - Validates all installed models (deprecated in Django 1.7). This parameter will be
- removed in community.general 9.0.0. Use V(check) instead.
- - Other commands can be entered, but will fail if they are unknown to Django. Other commands that may
+ - Other commands can be entered, but will fail if they are unknown to Django. Other commands that may
prompt for user input should be run with the C(--noinput) flag.
+ - Support for the values V(cleanup), V(syncdb), V(validate) was removed in community.general 9.0.0.
+ See note about supported versions of Django.
type: str
required: true
project_path:
@@ -69,6 +62,7 @@ options:
virtualenv:
description:
- An optional path to a C(virtualenv) installation to use while running the manage application.
+ - The virtual environment must exist, otherwise the module will fail.
type: path
aliases: [virtual_env]
apps:
@@ -132,31 +126,24 @@ options:
aliases: [test_runner]
ack_venv_creation_deprecation:
description:
- - >-
- When a O(virtualenv) is set but the virtual environment does not exist, the current behavior is
- to create a new virtual environment. That behavior is deprecated and if that case happens it will
- generate a deprecation warning. Set this flag to V(true) to suppress the deprecation warning.
- - Please note that you will receive no further warning about this being removed until the module
- will start failing in such cases from community.general 9.0.0 on.
+ - This option no longer has any effect since community.general 9.0.0.
+ - It will be removed from community.general 11.0.0.
type: bool
version_added: 5.8.0
notes:
- >
- B(ATTENTION - DEPRECATION): Support for Django releases older than 4.1 will be removed in
- community.general version 9.0.0 (estimated to be released in May 2024).
- Please notice that Django 4.1 requires Python 3.8 or greater.
- - C(virtualenv) (U(http://www.virtualenv.org)) must be installed on the remote host if the O(virtualenv) parameter
- is specified. This requirement is deprecated and will be removed in community.general version 9.0.0.
- - This module will create a virtualenv if the O(virtualenv) parameter is specified and a virtual environment does not already
- exist at the given location. This behavior is deprecated and will be removed in community.general version 9.0.0.
- - The parameter O(virtualenv) will remain in use, but it will require the specified virtualenv to exist.
- The recommended way to create one in Ansible is by using M(ansible.builtin.pip).
+ B(ATTENTION): Support for Django releases older than 4.1 has been removed in
+ community.general version 9.0.0. While the module allows for free-form commands
+ does not verify the version of Django being used, it is B(strongly recommended)
+ to use a more recent version of Django.
+ - Please notice that Django 4.1 requires Python 3.8 or greater.
+ - This module will not create a virtualenv if the O(virtualenv) parameter is specified and a virtual environment
+ does not already exist at the given location. This behavior changed in community.general version 9.0.0.
+ - The recommended way to create a virtual environment in Ansible is by using M(ansible.builtin.pip).
- This module assumes English error messages for the V(createcachetable) command to detect table existence,
unfortunately.
- - To be able to use the V(migrate) command with django versions < 1.7, you must have C(south) installed and added
- as an app in your settings.
- - To be able to use the V(collectstatic) command, you must have enabled staticfiles in your settings.
+ - To be able to use the V(collectstatic) command, you must have enabled C(staticfiles) in your settings.
- Your C(manage.py) application must be executable (C(rwxr-xr-x)), and must have a valid shebang,
for example C(#!/usr/bin/env python), for invoking the appropriate Python interpreter.
seealso:
@@ -169,7 +156,7 @@ seealso:
- name: What Python version can I use with Django?
description: From the Django FAQ, the response to Python requirements for the framework.
link: https://docs.djangoproject.com/en/dev/faq/install/#what-python-version-can-i-use-with-django
-requirements: [ "virtualenv", "django" ]
+requirements: [ "django >= 4.1" ]
author:
- Alexei Znamensky (@russoz)
- Scott Anderson (@tastychutney)
@@ -178,7 +165,7 @@ author:
EXAMPLES = """
- name: Run cleanup on the application installed in django_dir
community.general.django_manage:
- command: cleanup
+ command: clearsessions
project_path: "{{ django_dir }}"
- name: Load the initial_data fixture into the application
@@ -189,7 +176,7 @@ EXAMPLES = """
- name: Run syncdb on the application
community.general.django_manage:
- command: syncdb
+ command: migrate
project_path: "{{ django_dir }}"
settings: "{{ settings_app_name }}"
pythonpath: "{{ settings_dir }}"
@@ -233,22 +220,7 @@ def _ensure_virtualenv(module):
activate = os.path.join(vbin, 'activate')
if not os.path.exists(activate):
- # In version 9.0.0, if the venv is not found, it should fail_json() here.
- if not module.params['ack_venv_creation_deprecation']:
- module.deprecate(
- 'The behavior of "creating the virtual environment when missing" is being '
- 'deprecated and will be removed in community.general version 9.0.0. '
- 'Set the module parameter `ack_venv_creation_deprecation: true` to '
- 'prevent this message from showing up when creating a virtualenv.',
- version='9.0.0',
- collection_name='community.general',
- )
-
- virtualenv = module.get_bin_path('virtualenv', True)
- vcmd = [virtualenv, venv_param]
- rc, out_venv, err_venv = module.run_command(vcmd)
- if rc != 0:
- _fail(module, vcmd, out_venv, err_venv)
+ module.fail_json(msg='%s does not point to a valid virtual environment' % venv_param)
os.environ["PATH"] = "%s:%s" % (vbin, os.environ["PATH"])
os.environ["VIRTUAL_ENV"] = venv_param
@@ -266,11 +238,6 @@ def loaddata_filter_output(line):
return "Installed" in line and "Installed 0 object" not in line
-def syncdb_filter_output(line):
- return ("Creating table " in line) \
- or ("Installed" in line and "Installed 0 object" not in line)
-
-
def migrate_filter_output(line):
return ("Migrating forwards " in line) \
or ("Installed" in line and "Installed 0 object" not in line) \
@@ -283,13 +250,10 @@ def collectstatic_filter_output(line):
def main():
command_allowed_param_map = dict(
- cleanup=(),
createcachetable=('cache_table', 'database', ),
flush=('database', ),
loaddata=('database', 'fixtures', ),
- syncdb=('database', ),
test=('failfast', 'testrunner', 'apps', ),
- validate=(),
migrate=('apps', 'skip', 'merge', 'database',),
collectstatic=('clear', 'link', ),
)
@@ -301,7 +265,6 @@ def main():
# forces --noinput on every command that needs it
noinput_commands = (
'flush',
- 'syncdb',
'migrate',
'test',
'collectstatic',
@@ -333,7 +296,7 @@ def main():
skip=dict(type='bool'),
merge=dict(type='bool'),
link=dict(type='bool'),
- ack_venv_creation_deprecation=dict(type='bool'),
+ ack_venv_creation_deprecation=dict(type='bool', removed_in_version='11.0.0', removed_from_collection='community.general'),
),
)
@@ -342,21 +305,6 @@ def main():
project_path = module.params['project_path']
virtualenv = module.params['virtualenv']
- try:
- _deprecation = dict(
- cleanup="clearsessions",
- syncdb="migrate",
- validate="check",
- )
- module.deprecate(
- 'The command {0} has been deprecated as it is no longer supported in recent Django versions.'
- 'Please use the command {1} instead that provide similar capability.'.format(command_bin, _deprecation[command_bin]),
- version='9.0.0',
- collection_name='community.general'
- )
- except KeyError:
- pass
-
for param in specific_params:
value = module.params[param]
if value and param not in command_allowed_param_map[command_bin]:
diff --git a/ansible_collections/community/general/plugins/modules/flowdock.py b/ansible_collections/community/general/plugins/modules/flowdock.py
deleted file mode 100644
index 0e8a7461d..000000000
--- a/ansible_collections/community/general/plugins/modules/flowdock.py
+++ /dev/null
@@ -1,211 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# Copyright 2013 Matt Coddington <coddington@gmail.com>
-# 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 = '''
----
-
-deprecated:
- removed_in: 9.0.0
- why: the endpoints this module relies on do not exist any more and do not resolve to IPs in DNS.
- alternative: no known alternative at this point
-
-module: flowdock
-author: "Matt Coddington (@mcodd)"
-short_description: Send a message to a flowdock
-description:
- - Send a message to a flowdock team inbox or chat using the push API (see https://www.flowdock.com/api/team-inbox and https://www.flowdock.com/api/chat)
-extends_documentation_fragment:
- - community.general.attributes
-attributes:
- check_mode:
- support: full
- diff_mode:
- support: none
-options:
- token:
- type: str
- description:
- - API token.
- required: true
- type:
- type: str
- description:
- - Whether to post to 'inbox' or 'chat'
- required: true
- choices: [ "inbox", "chat" ]
- msg:
- type: str
- description:
- - Content of the message
- required: true
- tags:
- type: str
- description:
- - tags of the message, separated by commas
- required: false
- external_user_name:
- type: str
- description:
- - (chat only - required) Name of the "user" sending the message
- required: false
- from_address:
- type: str
- description:
- - (inbox only - required) Email address of the message sender
- required: false
- source:
- type: str
- description:
- - (inbox only - required) Human readable identifier of the application that uses the Flowdock API
- required: false
- subject:
- type: str
- description:
- - (inbox only - required) Subject line of the message
- required: false
- from_name:
- type: str
- description:
- - (inbox only) Name of the message sender
- required: false
- reply_to:
- type: str
- description:
- - (inbox only) Email address for replies
- required: false
- project:
- type: str
- description:
- - (inbox only) Human readable identifier for more detailed message categorization
- required: false
- link:
- type: str
- description:
- - (inbox only) Link associated with the message. This will be used to link the message subject in Team Inbox.
- required: false
- validate_certs:
- description:
- - If V(false), SSL certificates will not be validated. This should only be used
- on personally controlled sites using self-signed certificates.
- required: false
- default: true
- type: bool
-
-requirements: [ ]
-'''
-
-EXAMPLES = '''
-- name: Send a message to a flowdock
- community.general.flowdock:
- type: inbox
- token: AAAAAA
- from_address: user@example.com
- source: my cool app
- msg: test from ansible
- subject: test subject
-
-- name: Send a message to a flowdock
- community.general.flowdock:
- type: chat
- token: AAAAAA
- external_user_name: testuser
- msg: test from ansible
- tags: tag1,tag2,tag3
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.six.moves.urllib.parse import urlencode
-from ansible.module_utils.urls import fetch_url
-
-
-# ===========================================
-# Module execution.
-#
-
-def main():
-
- module = AnsibleModule(
- argument_spec=dict(
- token=dict(required=True, no_log=True),
- msg=dict(required=True),
- type=dict(required=True, choices=["inbox", "chat"]),
- external_user_name=dict(required=False),
- from_address=dict(required=False),
- source=dict(required=False),
- subject=dict(required=False),
- from_name=dict(required=False),
- reply_to=dict(required=False),
- project=dict(required=False),
- tags=dict(required=False),
- link=dict(required=False),
- validate_certs=dict(default=True, type='bool'),
- ),
- supports_check_mode=True
- )
-
- type = module.params["type"]
- token = module.params["token"]
- if type == 'inbox':
- url = "https://api.flowdock.com/v1/messages/team_inbox/%s" % (token)
- else:
- url = "https://api.flowdock.com/v1/messages/chat/%s" % (token)
-
- params = {}
-
- # required params
- params['content'] = module.params["msg"]
-
- # required params for the 'chat' type
- if module.params['external_user_name']:
- if type == 'inbox':
- module.fail_json(msg="external_user_name is not valid for the 'inbox' type")
- else:
- params['external_user_name'] = module.params["external_user_name"]
- elif type == 'chat':
- module.fail_json(msg="external_user_name is required for the 'chat' type")
-
- # required params for the 'inbox' type
- for item in ['from_address', 'source', 'subject']:
- if module.params[item]:
- if type == 'chat':
- module.fail_json(msg="%s is not valid for the 'chat' type" % item)
- else:
- params[item] = module.params[item]
- elif type == 'inbox':
- module.fail_json(msg="%s is required for the 'inbox' type" % item)
-
- # optional params
- if module.params["tags"]:
- params['tags'] = module.params["tags"]
-
- # optional params for the 'inbox' type
- for item in ['from_name', 'reply_to', 'project', 'link']:
- if module.params[item]:
- if type == 'chat':
- module.fail_json(msg="%s is not valid for the 'chat' type" % item)
- else:
- params[item] = module.params[item]
-
- # If we're in check mode, just exit pretending like we succeeded
- if module.check_mode:
- module.exit_json(changed=False)
-
- # Send the data to Flowdock
- data = urlencode(params)
- response, info = fetch_url(module, url, data=data)
- if info['status'] != 200:
- module.fail_json(msg="unable to send msg: %s" % info['msg'])
-
- module.exit_json(changed=True, msg=module.params["msg"])
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/gandi_livedns.py b/ansible_collections/community/general/plugins/modules/gandi_livedns.py
index fdb7993a5..ad2e96fd1 100644
--- a/ansible_collections/community/general/plugins/modules/gandi_livedns.py
+++ b/ansible_collections/community/general/plugins/modules/gandi_livedns.py
@@ -25,11 +25,19 @@ attributes:
diff_mode:
support: none
options:
+ personal_access_token:
+ description:
+ - Scoped API token.
+ - One of O(personal_access_token) and O(api_key) must be specified.
+ type: str
+ version_added: 9.0.0
api_key:
description:
- Account API token.
+ - Note that these type of keys are deprecated and might stop working at some point.
+ Use personal access tokens instead.
+ - One of O(personal_access_token) and O(api_key) must be specified.
type: str
- required: true
record:
description:
- Record to add.
@@ -73,7 +81,7 @@ EXAMPLES = r'''
values:
- 127.0.0.1
ttl: 7200
- api_key: dummyapitoken
+ personal_access_token: dummytoken
register: record
- name: Create a mail CNAME record to www.my.com domain
@@ -84,7 +92,7 @@ EXAMPLES = r'''
values:
- www
ttl: 7200
- api_key: dummyapitoken
+ personal_access_token: dummytoken
state: present
- name: Change its TTL
@@ -95,7 +103,7 @@ EXAMPLES = r'''
values:
- www
ttl: 10800
- api_key: dummyapitoken
+ personal_access_token: dummytoken
state: present
- name: Delete the record
@@ -103,8 +111,18 @@ EXAMPLES = r'''
domain: my.com
type: CNAME
record: mail
- api_key: dummyapitoken
+ personal_access_token: dummytoken
state: absent
+
+- name: Use a (deprecated) API Key
+ community.general.gandi_livedns:
+ domain: my.com
+ record: test
+ type: A
+ values:
+ - 127.0.0.1
+ ttl: 7200
+ api_key: dummyapikey
'''
RETURN = r'''
@@ -151,7 +169,8 @@ from ansible_collections.community.general.plugins.module_utils.gandi_livedns_ap
def main():
module = AnsibleModule(
argument_spec=dict(
- api_key=dict(type='str', required=True, no_log=True),
+ api_key=dict(type='str', no_log=True),
+ personal_access_token=dict(type='str', no_log=True),
record=dict(type='str', required=True),
state=dict(type='str', default='present', choices=['absent', 'present']),
ttl=dict(type='int'),
@@ -163,6 +182,12 @@ def main():
required_if=[
('state', 'present', ['values', 'ttl']),
],
+ mutually_exclusive=[
+ ('api_key', 'personal_access_token'),
+ ],
+ required_one_of=[
+ ('api_key', 'personal_access_token'),
+ ],
)
gandi_api = GandiLiveDNSAPI(module)
diff --git a/ansible_collections/community/general/plugins/modules/gconftool2.py b/ansible_collections/community/general/plugins/modules/gconftool2.py
index a40304a16..db7c6dc88 100644
--- a/ansible_collections/community/general/plugins/modules/gconftool2.py
+++ b/ansible_collections/community/general/plugins/modules/gconftool2.py
@@ -123,6 +123,7 @@ class GConftool(StateModuleHelper):
],
supports_check_mode=True,
)
+ use_old_vardict = False
def __init_module__(self):
self.runner = gconftool2_runner(self.module, check_rc=True)
diff --git a/ansible_collections/community/general/plugins/modules/gconftool2_info.py b/ansible_collections/community/general/plugins/modules/gconftool2_info.py
index 282065b95..f66e2da8f 100644
--- a/ansible_collections/community/general/plugins/modules/gconftool2_info.py
+++ b/ansible_collections/community/general/plugins/modules/gconftool2_info.py
@@ -60,6 +60,7 @@ class GConftoolInfo(ModuleHelper):
),
supports_check_mode=True,
)
+ use_old_vardict = False
def __init_module__(self):
self.runner = gconftool2_runner(self.module, check_rc=True)
diff --git a/ansible_collections/community/general/plugins/modules/gitlab_runner.py b/ansible_collections/community/general/plugins/modules/gitlab_runner.py
index e6163a6b6..96b3eb3fa 100644
--- a/ansible_collections/community/general/plugins/modules/gitlab_runner.py
+++ b/ansible_collections/community/general/plugins/modules/gitlab_runner.py
@@ -15,17 +15,20 @@ DOCUMENTATION = '''
module: gitlab_runner
short_description: Create, modify and delete GitLab Runners
description:
- - Register, update and delete runners with the GitLab API.
+ - Register, update and delete runners on GitLab Server side with the GitLab API.
- All operations are performed using the GitLab API v4.
- - For details, consult the full API documentation at U(https://docs.gitlab.com/ee/api/runners.html).
+ - For details, consult the full API documentation at U(https://docs.gitlab.com/ee/api/runners.html)
+ and U(https://docs.gitlab.com/ee/api/users.html#create-a-runner-linked-to-a-user).
- A valid private API token is required for all operations. You can create as many tokens as you like using the GitLab web interface at
U(https://$GITLAB_URL/profile/personal_access_tokens).
- A valid registration token is required for registering a new runner.
To create shared runners, you need to ask your administrator to give you this token.
It can be found at U(https://$GITLAB_URL/admin/runners/).
+ - This module does not handle the C(gitlab-runner) process part, but only manages the runner on GitLab Server side through its API.
+ Once the module has created the runner, you may use the generated token to run C(gitlab-runner register) command
notes:
- To create a new runner at least the O(api_token), O(description) and O(api_url) options are required.
- - Runners need to have unique descriptions.
+ - Runners need to have unique descriptions, since this attribute is used as key for idempotency
author:
- Samy Coenen (@SamyCoenen)
- Guillaume Martinez (@Lunik)
@@ -153,7 +156,45 @@ options:
'''
EXAMPLES = '''
-- name: "Register runner"
+- name: Create an instance-level runner
+ community.general.gitlab_runner:
+ api_url: https://gitlab.example.com/
+ api_token: "{{ access_token }}"
+ description: Docker Machine t1
+ state: present
+ active: true
+ tag_list: ['docker']
+ run_untagged: false
+ locked: false
+ register: runner # Register module output to run C(gitlab-runner register) command in another task
+
+- name: Create a group-level runner
+ community.general.gitlab_runner:
+ api_url: https://gitlab.example.com/
+ api_token: "{{ access_token }}"
+ description: Docker Machine t1
+ state: present
+ active: true
+ tag_list: ['docker']
+ run_untagged: false
+ locked: false
+ group: top-level-group/subgroup
+ register: runner # Register module output to run C(gitlab-runner register) command in another task
+
+- name: Create a project-level runner
+ community.general.gitlab_runner:
+ api_url: https://gitlab.example.com/
+ api_token: "{{ access_token }}"
+ description: Docker Machine t1
+ state: present
+ active: true
+ tag_list: ['docker']
+ run_untagged: false
+ locked: false
+ project: top-level-group/subgroup/project
+ register: runner # Register module output to run C(gitlab-runner register) command in another task
+
+- name: "Register instance-level runner with registration token (deprecated)"
community.general.gitlab_runner:
api_url: https://gitlab.example.com/
api_token: "{{ access_token }}"
@@ -164,6 +205,7 @@ EXAMPLES = '''
tag_list: ['docker']
run_untagged: false
locked: false
+ register: runner # Register module output to run C(gitlab-runner register) command in another task
- name: "Delete runner"
community.general.gitlab_runner:
@@ -180,7 +222,7 @@ EXAMPLES = '''
owned: true
state: absent
-- name: Register runner for a specific project
+- name: "Register a project-level runner with registration token (deprecated)"
community.general.gitlab_runner:
api_url: https://gitlab.example.com/
api_token: "{{ access_token }}"
@@ -188,6 +230,7 @@ EXAMPLES = '''
description: MyProject runner
state: present
project: mygroup/mysubgroup/myproject
+ register: runner # Register module output to run C(gitlab-runner register) command in another task
'''
RETURN = '''
diff --git a/ansible_collections/community/general/plugins/modules/homebrew.py b/ansible_collections/community/general/plugins/modules/homebrew.py
index 5d471797a..2b60846b4 100644
--- a/ansible_collections/community/general/plugins/modules/homebrew.py
+++ b/ansible_collections/community/general/plugins/modules/homebrew.py
@@ -76,6 +76,13 @@ options:
type: list
elements: str
version_added: '0.2.0'
+ force_formula:
+ description:
+ - Force the package(s) to be treated as a formula (equivalent to C(brew --formula)).
+ - To install a cask, use the M(community.general.homebrew_cask) module.
+ type: bool
+ default: false
+ version_added: 9.0.0
notes:
- When used with a C(loop:) each package will be processed individually,
it is much more efficient to pass the list directly to the O(name) option.
@@ -141,6 +148,12 @@ EXAMPLES = '''
community.general.homebrew:
upgrade_all: true
upgrade_options: ignore-pinned
+
+- name: Force installing a formula whose name is also a cask name
+ community.general.homebrew:
+ name: ambiguous_formula
+ state: present
+ force_formula: true
'''
RETURN = '''
@@ -166,9 +179,10 @@ changed_pkgs:
'''
import json
-import os.path
import re
+from ansible_collections.community.general.plugins.module_utils.homebrew import HomebrewValidate
+
from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.six import iteritems, string_types
@@ -195,99 +209,8 @@ def _check_package_in_json(json_output, package_type):
class Homebrew(object):
'''A class to manage Homebrew packages.'''
- # class regexes ------------------------------------------------ {{{
- VALID_PATH_CHARS = r'''
- \w # alphanumeric characters (i.e., [a-zA-Z0-9_])
- \s # spaces
- : # colons
- {sep} # the OS-specific path separator
- . # dots
- \- # dashes
- '''.format(sep=os.path.sep)
-
- VALID_BREW_PATH_CHARS = r'''
- \w # alphanumeric characters (i.e., [a-zA-Z0-9_])
- \s # spaces
- {sep} # the OS-specific path separator
- . # dots
- \- # dashes
- '''.format(sep=os.path.sep)
-
- VALID_PACKAGE_CHARS = r'''
- \w # alphanumeric characters (i.e., [a-zA-Z0-9_])
- . # dots
- / # slash (for taps)
- \+ # plusses
- \- # dashes
- : # colons (for URLs)
- @ # at-sign
- '''
-
- INVALID_PATH_REGEX = _create_regex_group_complement(VALID_PATH_CHARS)
- INVALID_BREW_PATH_REGEX = _create_regex_group_complement(VALID_BREW_PATH_CHARS)
- INVALID_PACKAGE_REGEX = _create_regex_group_complement(VALID_PACKAGE_CHARS)
- # /class regexes ----------------------------------------------- }}}
-
# class validations -------------------------------------------- {{{
@classmethod
- def valid_path(cls, path):
- '''
- `path` must be one of:
- - list of paths
- - a string containing only:
- - alphanumeric characters
- - dashes
- - dots
- - spaces
- - colons
- - os.path.sep
- '''
-
- if isinstance(path, string_types):
- return not cls.INVALID_PATH_REGEX.search(path)
-
- try:
- iter(path)
- except TypeError:
- return False
- else:
- paths = path
- return all(cls.valid_brew_path(path_) for path_ in paths)
-
- @classmethod
- def valid_brew_path(cls, brew_path):
- '''
- `brew_path` must be one of:
- - None
- - a string containing only:
- - alphanumeric characters
- - dashes
- - dots
- - spaces
- - os.path.sep
- '''
-
- if brew_path is None:
- return True
-
- return (
- isinstance(brew_path, string_types)
- and not cls.INVALID_BREW_PATH_REGEX.search(brew_path)
- )
-
- @classmethod
- def valid_package(cls, package):
- '''A valid package is either None or alphanumeric.'''
-
- if package is None:
- return True
-
- return (
- isinstance(package, string_types)
- and not cls.INVALID_PACKAGE_REGEX.search(package)
- )
-
- @classmethod
def valid_state(cls, state):
'''
A valid state is one of:
@@ -346,7 +269,7 @@ class Homebrew(object):
@path.setter
def path(self, path):
- if not self.valid_path(path):
+ if not HomebrewValidate.valid_path(path):
self._path = []
self.failed = True
self.message = 'Invalid path: {0}.'.format(path)
@@ -366,7 +289,7 @@ class Homebrew(object):
@brew_path.setter
def brew_path(self, brew_path):
- if not self.valid_brew_path(brew_path):
+ if not HomebrewValidate.valid_brew_path(brew_path):
self._brew_path = None
self.failed = True
self.message = 'Invalid brew_path: {0}.'.format(brew_path)
@@ -391,7 +314,7 @@ class Homebrew(object):
@current_package.setter
def current_package(self, package):
- if not self.valid_package(package):
+ if not HomebrewValidate.valid_package(package):
self._current_package = None
self.failed = True
self.message = 'Invalid package: {0}.'.format(package)
@@ -404,7 +327,8 @@ class Homebrew(object):
def __init__(self, module, path, packages=None, state=None,
update_homebrew=False, upgrade_all=False,
- install_options=None, upgrade_options=None):
+ install_options=None, upgrade_options=None,
+ force_formula=False):
if not install_options:
install_options = list()
if not upgrade_options:
@@ -414,7 +338,8 @@ class Homebrew(object):
state=state, update_homebrew=update_homebrew,
upgrade_all=upgrade_all,
install_options=install_options,
- upgrade_options=upgrade_options,)
+ upgrade_options=upgrade_options,
+ force_formula=force_formula)
self._prep()
@@ -476,7 +401,7 @@ class Homebrew(object):
# checks ------------------------------------------------------- {{{
def _current_package_is_installed(self):
- if not self.valid_package(self.current_package):
+ if not HomebrewValidate.valid_package(self.current_package):
self.failed = True
self.message = 'Invalid package: {0}.'.format(self.current_package)
raise HomebrewException(self.message)
@@ -487,17 +412,19 @@ class Homebrew(object):
"--json=v2",
self.current_package,
]
+ if self.force_formula:
+ cmd.append("--formula")
rc, out, err = self.module.run_command(cmd)
- if err:
+ if rc != 0:
self.failed = True
- self.message = err.strip()
+ self.message = err.strip() or ("Unknown failure with exit code %d" % rc)
raise HomebrewException(self.message)
data = json.loads(out)
return _check_package_in_json(data, "formulae") or _check_package_in_json(data, "casks")
def _current_package_is_outdated(self):
- if not self.valid_package(self.current_package):
+ if not HomebrewValidate.valid_package(self.current_package):
return False
rc, out, err = self.module.run_command([
@@ -509,7 +436,7 @@ class Homebrew(object):
return rc != 0
def _current_package_is_installed_from_head(self):
- if not Homebrew.valid_package(self.current_package):
+ if not HomebrewValidate.valid_package(self.current_package):
return False
elif not self._current_package_is_installed():
return False
@@ -607,7 +534,7 @@ class Homebrew(object):
# installed ------------------------------ {{{
def _install_current_package(self):
- if not self.valid_package(self.current_package):
+ if not HomebrewValidate.valid_package(self.current_package):
self.failed = True
self.message = 'Invalid package: {0}.'.format(self.current_package)
raise HomebrewException(self.message)
@@ -632,10 +559,15 @@ class Homebrew(object):
else:
head = None
+ if self.force_formula:
+ formula = '--formula'
+ else:
+ formula = None
+
opts = (
[self.brew_path, 'install']
+ self.install_options
- + [self.current_package, head]
+ + [self.current_package, head, formula]
)
cmd = [opt for opt in opts if opt]
rc, out, err = self.module.run_command(cmd)
@@ -663,7 +595,7 @@ class Homebrew(object):
def _upgrade_current_package(self):
command = 'upgrade'
- if not self.valid_package(self.current_package):
+ if not HomebrewValidate.valid_package(self.current_package):
self.failed = True
self.message = 'Invalid package: {0}.'.format(self.current_package)
raise HomebrewException(self.message)
@@ -734,7 +666,7 @@ class Homebrew(object):
# uninstalled ---------------------------- {{{
def _uninstall_current_package(self):
- if not self.valid_package(self.current_package):
+ if not HomebrewValidate.valid_package(self.current_package):
self.failed = True
self.message = 'Invalid package: {0}.'.format(self.current_package)
raise HomebrewException(self.message)
@@ -783,7 +715,7 @@ class Homebrew(object):
# linked --------------------------------- {{{
def _link_current_package(self):
- if not self.valid_package(self.current_package):
+ if not HomebrewValidate.valid_package(self.current_package):
self.failed = True
self.message = 'Invalid package: {0}.'.format(self.current_package)
raise HomebrewException(self.message)
@@ -830,7 +762,7 @@ class Homebrew(object):
# unlinked ------------------------------- {{{
def _unlink_current_package(self):
- if not self.valid_package(self.current_package):
+ if not HomebrewValidate.valid_package(self.current_package):
self.failed = True
self.message = 'Invalid package: {0}.'.format(self.current_package)
raise HomebrewException(self.message)
@@ -919,7 +851,11 @@ def main():
default=None,
type='list',
elements='str',
- )
+ ),
+ force_formula=dict(
+ default=False,
+ type='bool',
+ ),
),
supports_check_mode=True,
)
@@ -951,6 +887,7 @@ def main():
if state in ('absent', 'removed', 'uninstalled'):
state = 'absent'
+ force_formula = p['force_formula']
update_homebrew = p['update_homebrew']
if not update_homebrew:
module.run_command_environ_update.update(
@@ -967,7 +904,7 @@ def main():
brew = Homebrew(module=module, path=path, packages=packages,
state=state, update_homebrew=update_homebrew,
upgrade_all=upgrade_all, install_options=install_options,
- upgrade_options=upgrade_options)
+ upgrade_options=upgrade_options, force_formula=force_formula)
(failed, changed, message) = brew.run()
changed_pkgs = brew.changed_pkgs
unchanged_pkgs = brew.unchanged_pkgs
diff --git a/ansible_collections/community/general/plugins/modules/homebrew_cask.py b/ansible_collections/community/general/plugins/modules/homebrew_cask.py
index c992693b6..dc9aea5db 100644
--- a/ansible_collections/community/general/plugins/modules/homebrew_cask.py
+++ b/ansible_collections/community/general/plugins/modules/homebrew_cask.py
@@ -158,6 +158,7 @@ import re
import tempfile
from ansible_collections.community.general.plugins.module_utils.version import LooseVersion
+from ansible_collections.community.general.plugins.module_utils.homebrew import HomebrewValidate
from ansible.module_utils.common.text.converters import to_bytes
from ansible.module_utils.basic import AnsibleModule
@@ -183,23 +184,6 @@ class HomebrewCask(object):
'''A class to manage Homebrew casks.'''
# class regexes ------------------------------------------------ {{{
- VALID_PATH_CHARS = r'''
- \w # alphanumeric characters (i.e., [a-zA-Z0-9_])
- \s # spaces
- : # colons
- {sep} # the OS-specific path separator
- . # dots
- \- # dashes
- '''.format(sep=os.path.sep)
-
- VALID_BREW_PATH_CHARS = r'''
- \w # alphanumeric characters (i.e., [a-zA-Z0-9_])
- \s # spaces
- {sep} # the OS-specific path separator
- . # dots
- \- # dashes
- '''.format(sep=os.path.sep)
-
VALID_CASK_CHARS = r'''
\w # alphanumeric characters (i.e., [a-zA-Z0-9_])
. # dots
@@ -208,59 +192,11 @@ class HomebrewCask(object):
@ # at symbol
'''
- INVALID_PATH_REGEX = _create_regex_group_complement(VALID_PATH_CHARS)
- INVALID_BREW_PATH_REGEX = _create_regex_group_complement(VALID_BREW_PATH_CHARS)
INVALID_CASK_REGEX = _create_regex_group_complement(VALID_CASK_CHARS)
# /class regexes ----------------------------------------------- }}}
# class validations -------------------------------------------- {{{
@classmethod
- def valid_path(cls, path):
- '''
- `path` must be one of:
- - list of paths
- - a string containing only:
- - alphanumeric characters
- - dashes
- - dots
- - spaces
- - colons
- - os.path.sep
- '''
-
- if isinstance(path, (string_types)):
- return not cls.INVALID_PATH_REGEX.search(path)
-
- try:
- iter(path)
- except TypeError:
- return False
- else:
- paths = path
- return all(cls.valid_brew_path(path_) for path_ in paths)
-
- @classmethod
- def valid_brew_path(cls, brew_path):
- '''
- `brew_path` must be one of:
- - None
- - a string containing only:
- - alphanumeric characters
- - dashes
- - dots
- - spaces
- - os.path.sep
- '''
-
- if brew_path is None:
- return True
-
- return (
- isinstance(brew_path, string_types)
- and not cls.INVALID_BREW_PATH_REGEX.search(brew_path)
- )
-
- @classmethod
def valid_cask(cls, cask):
'''A valid cask is either None or alphanumeric + backslashes.'''
@@ -321,7 +257,7 @@ class HomebrewCask(object):
@path.setter
def path(self, path):
- if not self.valid_path(path):
+ if not HomebrewValidate.valid_path(path):
self._path = []
self.failed = True
self.message = 'Invalid path: {0}.'.format(path)
@@ -341,7 +277,7 @@ class HomebrewCask(object):
@brew_path.setter
def brew_path(self, brew_path):
- if not self.valid_brew_path(brew_path):
+ if not HomebrewValidate.valid_brew_path(brew_path):
self._brew_path = None
self.failed = True
self.message = 'Invalid brew_path: {0}.'.format(brew_path)
diff --git a/ansible_collections/community/general/plugins/modules/hponcfg.py b/ansible_collections/community/general/plugins/modules/hponcfg.py
index 612a20d92..206565a23 100644
--- a/ansible_collections/community/general/plugins/modules/hponcfg.py
+++ b/ansible_collections/community/general/plugins/modules/hponcfg.py
@@ -98,6 +98,7 @@ class HPOnCfg(ModuleHelper):
verbose=cmd_runner_fmt.as_bool("-v"),
minfw=cmd_runner_fmt.as_opt_val("-m"),
)
+ use_old_vardict = False
def __run__(self):
runner = CmdRunner(
diff --git a/ansible_collections/community/general/plugins/modules/installp.py b/ansible_collections/community/general/plugins/modules/installp.py
index 4b5a6949c..1531d2cad 100644
--- a/ansible_collections/community/general/plugins/modules/installp.py
+++ b/ansible_collections/community/general/plugins/modules/installp.py
@@ -106,7 +106,7 @@ def _check_new_pkg(module, package, repository_path):
if os.path.isdir(repository_path):
installp_cmd = module.get_bin_path('installp', True)
- rc, package_result, err = module.run_command("%s -l -MR -d %s" % (installp_cmd, repository_path))
+ rc, package_result, err = module.run_command([installp_cmd, "-l", "-MR", "-d", repository_path])
if rc != 0:
module.fail_json(msg="Failed to run installp.", rc=rc, err=err)
@@ -142,7 +142,7 @@ def _check_installed_pkg(module, package, repository_path):
"""
lslpp_cmd = module.get_bin_path('lslpp', True)
- rc, lslpp_result, err = module.run_command("%s -lcq %s*" % (lslpp_cmd, package))
+ rc, lslpp_result, err = module.run_command([lslpp_cmd, "-lcq", "%s*" % (package, )])
if rc == 1:
package_state = ' '.join(err.split()[-2:])
@@ -173,7 +173,7 @@ def remove(module, installp_cmd, packages):
if pkg_check:
if not module.check_mode:
- rc, remove_out, err = module.run_command("%s -u %s" % (installp_cmd, package))
+ rc, remove_out, err = module.run_command([installp_cmd, "-u", package])
if rc != 0:
module.fail_json(msg="Failed to run installp.", rc=rc, err=err)
remove_count += 1
@@ -202,8 +202,8 @@ def install(module, installp_cmd, packages, repository_path, accept_license):
already_installed_pkgs = {}
accept_license_param = {
- True: '-Y',
- False: '',
+ True: ['-Y'],
+ False: [],
}
# Validate if package exists on repository path.
@@ -230,7 +230,8 @@ def install(module, installp_cmd, packages, repository_path, accept_license):
else:
if not module.check_mode:
- rc, out, err = module.run_command("%s -a %s -X -d %s %s" % (installp_cmd, accept_license_param[accept_license], repository_path, package))
+ rc, out, err = module.run_command(
+ [installp_cmd, "-a"] + accept_license_param[accept_license] + ["-X", "-d", repository_path, package])
if rc != 0:
module.fail_json(msg="Failed to run installp", rc=rc, err=err)
installed_pkgs.append(package)
diff --git a/ansible_collections/community/general/plugins/modules/irc.py b/ansible_collections/community/general/plugins/modules/irc.py
index 00ff299ee..e40ba2d0b 100644
--- a/ansible_collections/community/general/plugins/modules/irc.py
+++ b/ansible_collections/community/general/plugins/modules/irc.py
@@ -85,8 +85,10 @@ options:
was exlusively called O(use_ssl). The latter is now an alias of O(use_tls).
- B(Note:) for security reasons, you should always set O(use_tls=true) and
O(validate_certs=true) whenever possible.
+ - The option currently defaults to V(false). The default has been B(deprecated) and will
+ change to V(true) in community.general 10.0.0. To avoid deprecation warnings, explicitly
+ set this option to a value (preferably V(true)).
type: bool
- default: false
aliases:
- use_ssl
part:
@@ -108,7 +110,9 @@ options:
if the network between between Ansible and the IRC server is known to be safe.
- B(Note:) for security reasons, you should always set O(use_tls=true) and
O(validate_certs=true) whenever possible.
- default: false
+ - The option currently defaults to V(false). The default has been B(deprecated) and will
+ change to V(true) in community.general 10.0.0. To avoid deprecation warnings, explicitly
+ set this option to a value (preferably V(true)).
type: bool
version_added: 8.1.0
@@ -309,8 +313,8 @@ def main():
passwd=dict(no_log=True),
timeout=dict(type='int', default=30),
part=dict(type='bool', default=True),
- use_tls=dict(type='bool', default=False, aliases=['use_ssl']),
- validate_certs=dict(type='bool', default=False),
+ use_tls=dict(type='bool', aliases=['use_ssl']),
+ validate_certs=dict(type='bool'),
),
supports_check_mode=True,
required_one_of=[['channel', 'nick_to']]
@@ -334,6 +338,25 @@ def main():
style = module.params["style"]
validate_certs = module.params["validate_certs"]
+ if use_tls is None:
+ module.deprecate(
+ 'The default of use_tls will change to true in community.general 10.0.0.'
+ ' Set a value now (preferably true, if possible) to avoid the deprecation warning.',
+ version='10.0.0',
+ collection_name='community.general',
+ )
+ use_tls = False
+
+ if validate_certs is None:
+ if use_tls:
+ module.deprecate(
+ 'The default of validate_certs will change to true in community.general 10.0.0.'
+ ' Set a value now (prefarably true, if possible) to avoid the deprecation warning.',
+ version='10.0.0',
+ collection_name='community.general',
+ )
+ validate_certs = False
+
try:
send_msg(msg, server, port, channel, nick_to, key, topic, nick, color, passwd, timeout, use_tls, validate_certs, part, style)
except Exception as e:
diff --git a/ansible_collections/community/general/plugins/modules/kernel_blacklist.py b/ansible_collections/community/general/plugins/modules/kernel_blacklist.py
index b5bd90403..224b5bba8 100644
--- a/ansible_collections/community/general/plugins/modules/kernel_blacklist.py
+++ b/ansible_collections/community/general/plugins/modules/kernel_blacklist.py
@@ -67,6 +67,7 @@ class Blacklist(StateModuleHelper):
),
supports_check_mode=True,
)
+ use_old_vardict = False
def __init_module__(self):
self.pattern = re.compile(r'^blacklist\s+{0}$'.format(re.escape(self.vars.name)))
diff --git a/ansible_collections/community/general/plugins/modules/keycloak_client.py b/ansible_collections/community/general/plugins/modules/keycloak_client.py
index cd9c60bac..3628e5a51 100644
--- a/ansible_collections/community/general/plugins/modules/keycloak_client.py
+++ b/ansible_collections/community/general/plugins/modules/keycloak_client.py
@@ -775,8 +775,9 @@ def sanitize_cr(clientrep):
if 'secret' in result:
result['secret'] = 'no_log'
if 'attributes' in result:
- if 'saml.signing.private.key' in result['attributes']:
- result['attributes']['saml.signing.private.key'] = 'no_log'
+ attributes = result['attributes']
+ if isinstance(attributes, dict) and 'saml.signing.private.key' in attributes:
+ attributes['saml.signing.private.key'] = 'no_log'
return normalise_cr(result)
diff --git a/ansible_collections/community/general/plugins/modules/keycloak_identity_provider.py b/ansible_collections/community/general/plugins/modules/keycloak_identity_provider.py
index 588f553e8..2eca3a06d 100644
--- a/ansible_collections/community/general/plugins/modules/keycloak_identity_provider.py
+++ b/ansible_collections/community/general/plugins/modules/keycloak_identity_provider.py
@@ -437,7 +437,7 @@ def sanitize(idp):
idpcopy = deepcopy(idp)
if 'config' in idpcopy:
if 'clientSecret' in idpcopy['config']:
- idpcopy['clientSecret'] = '**********'
+ idpcopy['config']['clientSecret'] = '**********'
return idpcopy
diff --git a/ansible_collections/community/general/plugins/modules/keycloak_user_federation.py b/ansible_collections/community/general/plugins/modules/keycloak_user_federation.py
index fee0d1265..f87ef936c 100644
--- a/ansible_collections/community/general/plugins/modules/keycloak_user_federation.py
+++ b/ansible_collections/community/general/plugins/modules/keycloak_user_federation.py
@@ -719,6 +719,9 @@ def sanitize(comp):
compcopy['config'] = dict((k, v[0]) for k, v in compcopy['config'].items())
if 'bindCredential' in compcopy['config']:
compcopy['config']['bindCredential'] = '**********'
+ # an empty string is valid for krbPrincipalAttribute but is filtered out in diff
+ if 'krbPrincipalAttribute' not in compcopy['config']:
+ compcopy['config']['krbPrincipalAttribute'] = ''
if 'mappers' in compcopy:
for mapper in compcopy['mappers']:
if 'config' in mapper:
diff --git a/ansible_collections/community/general/plugins/modules/ldap_search.py b/ansible_collections/community/general/plugins/modules/ldap_search.py
index 45744e634..7958f86e0 100644
--- a/ansible_collections/community/general/plugins/modules/ldap_search.py
+++ b/ansible_collections/community/general/plugins/modules/ldap_search.py
@@ -44,6 +44,8 @@ options:
type: str
description:
- The LDAP scope to use.
+ - V(subordinate) requires the LDAPv3 subordinate feature extension.
+ - V(children) is equivalent to a "subtree" scope.
filter:
default: '(objectClass=*)'
type: str
diff --git a/ansible_collections/community/general/plugins/modules/locale_gen.py b/ansible_collections/community/general/plugins/modules/locale_gen.py
index 0dd76c9ab..fe501e023 100644
--- a/ansible_collections/community/general/plugins/modules/locale_gen.py
+++ b/ansible_collections/community/general/plugins/modules/locale_gen.py
@@ -79,6 +79,7 @@ class LocaleGen(StateModuleHelper):
),
supports_check_mode=True,
)
+ use_old_vardict = False
def __init_module__(self):
self.vars.set("ubuntu_mode", False)
diff --git a/ansible_collections/community/general/plugins/modules/lvg.py b/ansible_collections/community/general/plugins/modules/lvg.py
index 8a6384369..7ff7e3a2e 100644
--- a/ansible_collections/community/general/plugins/modules/lvg.py
+++ b/ansible_collections/community/general/plugins/modules/lvg.py
@@ -179,7 +179,7 @@ def parse_vgs(data):
def find_mapper_device_name(module, dm_device):
dmsetup_cmd = module.get_bin_path('dmsetup', True)
mapper_prefix = '/dev/mapper/'
- rc, dm_name, err = module.run_command("%s info -C --noheadings -o name %s" % (dmsetup_cmd, dm_device))
+ rc, dm_name, err = module.run_command([dmsetup_cmd, "info", "-C", "--noheadings", "-o", "name", dm_device])
if rc != 0:
module.fail_json(msg="Failed executing dmsetup command.", rc=rc, err=err)
mapper_device = mapper_prefix + dm_name.rstrip()
@@ -204,7 +204,7 @@ def find_vg(module, vg):
if not vg:
return None
vgs_cmd = module.get_bin_path('vgs', True)
- dummy, current_vgs, dummy = module.run_command("%s --noheadings -o vg_name,pv_count,lv_count --separator ';'" % vgs_cmd, check_rc=True)
+ dummy, current_vgs, dummy = module.run_command([vgs_cmd, "--noheadings", "-o", "vg_name,pv_count,lv_count", "--separator", ";"], check_rc=True)
vgs = parse_vgs(current_vgs)
@@ -431,10 +431,10 @@ def main():
for x in itertools.chain(dev_list, module.params['pvs'])
)
pvs_filter_vg_name = 'vg_name = {0}'.format(vg)
- pvs_filter = "--select '{0} || {1}' ".format(pvs_filter_pv_name, pvs_filter_vg_name)
+ pvs_filter = ["--select", "{0} || {1}".format(pvs_filter_pv_name, pvs_filter_vg_name)]
else:
- pvs_filter = ''
- rc, current_pvs, err = module.run_command("%s --noheadings -o pv_name,vg_name --separator ';' %s" % (pvs_cmd, pvs_filter))
+ pvs_filter = []
+ rc, current_pvs, err = module.run_command([pvs_cmd, "--noheadings", "-o", "pv_name,vg_name", "--separator", ";"] + pvs_filter)
if rc != 0:
module.fail_json(msg="Failed executing pvs command.", rc=rc, err=err)
@@ -473,7 +473,7 @@ def main():
if this_vg['lv_count'] == 0 or force:
# remove VG
vgremove_cmd = module.get_bin_path('vgremove', True)
- rc, dummy, err = module.run_command("%s --force %s" % (vgremove_cmd, vg))
+ rc, dummy, err = module.run_command([vgremove_cmd, "--force", vg])
if rc == 0:
module.exit_json(changed=True)
else:
@@ -509,7 +509,6 @@ def main():
changed = True
else:
if devs_to_add:
- devs_to_add_string = ' '.join(devs_to_add)
# create PV
pvcreate_cmd = module.get_bin_path('pvcreate', True)
for current_dev in devs_to_add:
@@ -520,21 +519,20 @@ def main():
module.fail_json(msg="Creating physical volume '%s' failed" % current_dev, rc=rc, err=err)
# add PV to our VG
vgextend_cmd = module.get_bin_path('vgextend', True)
- rc, dummy, err = module.run_command("%s %s %s" % (vgextend_cmd, vg, devs_to_add_string))
+ rc, dummy, err = module.run_command([vgextend_cmd, vg] + devs_to_add)
if rc == 0:
changed = True
else:
- module.fail_json(msg="Unable to extend %s by %s." % (vg, devs_to_add_string), rc=rc, err=err)
+ module.fail_json(msg="Unable to extend %s by %s." % (vg, ' '.join(devs_to_add)), rc=rc, err=err)
# remove some PV from our VG
if devs_to_remove:
- devs_to_remove_string = ' '.join(devs_to_remove)
vgreduce_cmd = module.get_bin_path('vgreduce', True)
- rc, dummy, err = module.run_command("%s --force %s %s" % (vgreduce_cmd, vg, devs_to_remove_string))
+ rc, dummy, err = module.run_command([vgreduce_cmd, "--force", vg] + devs_to_remove)
if rc == 0:
changed = True
else:
- module.fail_json(msg="Unable to reduce %s by %s." % (vg, devs_to_remove_string), rc=rc, err=err)
+ module.fail_json(msg="Unable to reduce %s by %s." % (vg, ' '.join(devs_to_remove)), rc=rc, err=err)
module.exit_json(changed=changed)
diff --git a/ansible_collections/community/general/plugins/modules/lvol.py b/ansible_collections/community/general/plugins/modules/lvol.py
index a2a870260..3a2f5c7cd 100644
--- a/ansible_collections/community/general/plugins/modules/lvol.py
+++ b/ansible_collections/community/general/plugins/modules/lvol.py
@@ -236,6 +236,7 @@ EXAMPLES = '''
'''
import re
+import shlex
from ansible.module_utils.basic import AnsibleModule
@@ -281,7 +282,7 @@ def parse_vgs(data):
def get_lvm_version(module):
ver_cmd = module.get_bin_path("lvm", required=True)
- rc, out, err = module.run_command("%s version" % (ver_cmd))
+ rc, out, err = module.run_command([ver_cmd, "version"])
if rc != 0:
return None
m = re.search(r"LVM version:\s+(\d+)\.(\d+)\.(\d+).*(\d{4}-\d{2}-\d{2})", out)
@@ -320,14 +321,14 @@ def main():
module.fail_json(msg="Failed to get LVM version number")
version_yesopt = mkversion(2, 2, 99) # First LVM with the "--yes" option
if version_found >= version_yesopt:
- yesopt = "--yes"
+ yesopt = ["--yes"]
else:
- yesopt = ""
+ yesopt = []
vg = module.params['vg']
lv = module.params['lv']
size = module.params['size']
- opts = module.params['opts']
+ opts = shlex.split(module.params['opts'] or '')
state = module.params['state']
force = module.boolean(module.params['force'])
shrink = module.boolean(module.params['shrink'])
@@ -338,21 +339,13 @@ def main():
size_unit = 'm'
size_operator = None
snapshot = module.params['snapshot']
- pvs = module.params['pvs']
-
- if pvs is None:
- pvs = ""
- else:
- pvs = " ".join(pvs)
-
- if opts is None:
- opts = ""
+ pvs = module.params['pvs'] or []
# Add --test option when running in check-mode
if module.check_mode:
- test_opt = ' --test'
+ test_opt = ['--test']
else:
- test_opt = ''
+ test_opt = []
if size:
# LVEXTEND(8)/LVREDUCE(8) -l, -L options: Check for relative value for resizing
@@ -400,7 +393,7 @@ def main():
# Get information on volume group requested
vgs_cmd = module.get_bin_path("vgs", required=True)
rc, current_vgs, err = module.run_command(
- "%s --noheadings --nosuffix -o vg_name,size,free,vg_extent_size --units %s --separator ';' %s" % (vgs_cmd, unit.lower(), vg))
+ [vgs_cmd, "--noheadings", "--nosuffix", "-o", "vg_name,size,free,vg_extent_size", "--units", unit.lower(), "--separator", ";", vg])
if rc != 0:
if state == 'absent':
@@ -414,7 +407,7 @@ def main():
# Get information on logical volume requested
lvs_cmd = module.get_bin_path("lvs", required=True)
rc, current_lvs, err = module.run_command(
- "%s -a --noheadings --nosuffix -o lv_name,size,lv_attr --units %s --separator ';' %s" % (lvs_cmd, unit.lower(), vg))
+ [lvs_cmd, "-a", "--noheadings", "--nosuffix", "-o", "lv_name,size,lv_attr", "--units", unit.lower(), "--separator", ";", vg])
if rc != 0:
if state == 'absent':
@@ -474,20 +467,23 @@ def main():
# create LV
lvcreate_cmd = module.get_bin_path("lvcreate", required=True)
+ cmd = [lvcreate_cmd] + test_opt + yesopt
if snapshot is not None:
if size:
- cmd = "%s %s %s -%s %s%s -s -n %s %s %s/%s" % (lvcreate_cmd, test_opt, yesopt, size_opt, size, size_unit, snapshot, opts, vg, lv)
- else:
- cmd = "%s %s %s -s -n %s %s %s/%s" % (lvcreate_cmd, test_opt, yesopt, snapshot, opts, vg, lv)
- elif thinpool and lv:
- if size_opt == 'l':
- module.fail_json(changed=False, msg="Thin volume sizing with percentage not supported.")
- size_opt = 'V'
- cmd = "%s %s %s -n %s -%s %s%s %s -T %s/%s" % (lvcreate_cmd, test_opt, yesopt, lv, size_opt, size, size_unit, opts, vg, thinpool)
- elif thinpool and not lv:
- cmd = "%s %s %s -%s %s%s %s -T %s/%s" % (lvcreate_cmd, test_opt, yesopt, size_opt, size, size_unit, opts, vg, thinpool)
+ cmd += ["-%s" % size_opt, "%s%s" % (size, size_unit)]
+ cmd += ["-s", "-n", snapshot] + opts + ["%s/%s" % (vg, lv)]
+ elif thinpool:
+ if lv:
+ if size_opt == 'l':
+ module.fail_json(changed=False, msg="Thin volume sizing with percentage not supported.")
+ size_opt = 'V'
+ cmd += ["-n", lv]
+ cmd += ["-%s" % size_opt, "%s%s" % (size, size_unit)]
+ cmd += opts + ["-T", "%s/%s" % (vg, thinpool)]
else:
- cmd = "%s %s %s -n %s -%s %s%s %s %s %s" % (lvcreate_cmd, test_opt, yesopt, lv, size_opt, size, size_unit, opts, vg, pvs)
+ cmd += ["-n", lv]
+ cmd += ["-%s" % size_opt, "%s%s" % (size, size_unit)]
+ cmd += opts + [vg] + pvs
rc, dummy, err = module.run_command(cmd)
if rc == 0:
changed = True
@@ -499,7 +495,7 @@ def main():
if not force:
module.fail_json(msg="Sorry, no removal of logical volume %s without force=true." % (this_lv['name']))
lvremove_cmd = module.get_bin_path("lvremove", required=True)
- rc, dummy, err = module.run_command("%s %s --force %s/%s" % (lvremove_cmd, test_opt, vg, this_lv['name']))
+ rc, dummy, err = module.run_command([lvremove_cmd] + test_opt + ["--force", "%s/%s" % (vg, this_lv['name'])])
if rc == 0:
module.exit_json(changed=True)
else:
@@ -527,7 +523,7 @@ def main():
if this_lv['size'] < size_requested:
if (size_free > 0) and (size_free >= (size_requested - this_lv['size'])):
- tool = module.get_bin_path("lvextend", required=True)
+ tool = [module.get_bin_path("lvextend", required=True)]
else:
module.fail_json(
msg="Logical Volume %s could not be extended. Not enough free space left (%s%s required / %s%s available)" %
@@ -539,16 +535,17 @@ def main():
elif not force:
module.fail_json(msg="Sorry, no shrinking of %s without force=true" % (this_lv['name']))
else:
- tool = module.get_bin_path("lvreduce", required=True)
- tool = '%s %s' % (tool, '--force')
+ tool = [module.get_bin_path("lvreduce", required=True), '--force']
if tool:
if resizefs:
- tool = '%s %s' % (tool, '--resizefs')
+ tool += ['--resizefs']
+ cmd = tool + test_opt
if size_operator:
- cmd = "%s %s -%s %s%s%s %s/%s %s" % (tool, test_opt, size_opt, size_operator, size, size_unit, vg, this_lv['name'], pvs)
+ cmd += ["-%s" % size_opt, "%s%s%s" % (size_operator, size, size_unit)]
else:
- cmd = "%s %s -%s %s%s %s/%s %s" % (tool, test_opt, size_opt, size, size_unit, vg, this_lv['name'], pvs)
+ cmd += ["-%s" % size_opt, "%s%s" % (size, size_unit)]
+ cmd += ["%s/%s" % (vg, this_lv['name'])] + pvs
rc, out, err = module.run_command(cmd)
if "Reached maximum COW size" in out:
module.fail_json(msg="Unable to resize %s to %s%s" % (lv, size, size_unit), rc=rc, err=err, out=out)
@@ -566,23 +563,24 @@ def main():
# resize LV based on absolute values
tool = None
if float(size) > this_lv['size'] or size_operator == '+':
- tool = module.get_bin_path("lvextend", required=True)
+ tool = [module.get_bin_path("lvextend", required=True)]
elif shrink and float(size) < this_lv['size'] or size_operator == '-':
if float(size) == 0:
module.fail_json(msg="Sorry, no shrinking of %s to 0 permitted." % (this_lv['name']))
if not force:
module.fail_json(msg="Sorry, no shrinking of %s without force=true." % (this_lv['name']))
else:
- tool = module.get_bin_path("lvreduce", required=True)
- tool = '%s %s' % (tool, '--force')
+ tool = [module.get_bin_path("lvreduce", required=True), '--force']
if tool:
if resizefs:
- tool = '%s %s' % (tool, '--resizefs')
+ tool += ['--resizefs']
+ cmd = tool + test_opt
if size_operator:
- cmd = "%s %s -%s %s%s%s %s/%s %s" % (tool, test_opt, size_opt, size_operator, size, size_unit, vg, this_lv['name'], pvs)
+ cmd += ["-%s" % size_opt, "%s%s%s" % (size_operator, size, size_unit)]
else:
- cmd = "%s %s -%s %s%s %s/%s %s" % (tool, test_opt, size_opt, size, size_unit, vg, this_lv['name'], pvs)
+ cmd += ["-%s" % size_opt, "%s%s" % (size, size_unit)]
+ cmd += ["%s/%s" % (vg, this_lv['name'])] + pvs
rc, out, err = module.run_command(cmd)
if "Reached maximum COW size" in out:
module.fail_json(msg="Unable to resize %s to %s%s" % (lv, size, size_unit), rc=rc, err=err, out=out)
@@ -598,14 +596,14 @@ def main():
if this_lv is not None:
if active:
lvchange_cmd = module.get_bin_path("lvchange", required=True)
- rc, dummy, err = module.run_command("%s -ay %s/%s" % (lvchange_cmd, vg, this_lv['name']))
+ rc, dummy, err = module.run_command([lvchange_cmd, "-ay", "%s/%s" % (vg, this_lv['name'])])
if rc == 0:
module.exit_json(changed=((not this_lv['active']) or changed), vg=vg, lv=this_lv['name'], size=this_lv['size'])
else:
module.fail_json(msg="Failed to activate logical volume %s" % (lv), rc=rc, err=err)
else:
lvchange_cmd = module.get_bin_path("lvchange", required=True)
- rc, dummy, err = module.run_command("%s -an %s/%s" % (lvchange_cmd, vg, this_lv['name']))
+ rc, dummy, err = module.run_command([lvchange_cmd, "-an", "%s/%s" % (vg, this_lv['name'])])
if rc == 0:
module.exit_json(changed=(this_lv['active'] or changed), vg=vg, lv=this_lv['name'], size=this_lv['size'])
else:
diff --git a/ansible_collections/community/general/plugins/modules/lxd_container.py b/ansible_collections/community/general/plugins/modules/lxd_container.py
index b82e2be9b..f44523a75 100644
--- a/ansible_collections/community/general/plugins/modules/lxd_container.py
+++ b/ansible_collections/community/general/plugins/modules/lxd_container.py
@@ -400,7 +400,7 @@ EXAMPLES = '''
protocol: simplestreams
type: image
mode: pull
- server: https://images.linuxcontainers.org
+ server: [...] # URL to the image server
alias: debian/11
timeout: 600
'''
diff --git a/ansible_collections/community/general/plugins/modules/macports.py b/ansible_collections/community/general/plugins/modules/macports.py
index e81fb9142..cd620687d 100644
--- a/ansible_collections/community/general/plugins/modules/macports.py
+++ b/ansible_collections/community/general/plugins/modules/macports.py
@@ -111,7 +111,7 @@ from ansible.module_utils.basic import AnsibleModule
def selfupdate(module, port_path):
""" Update Macports and the ports tree. """
- rc, out, err = module.run_command("%s -v selfupdate" % port_path)
+ rc, out, err = module.run_command([port_path, "-v", "selfupdate"])
if rc == 0:
updated = any(
@@ -135,7 +135,7 @@ def selfupdate(module, port_path):
def upgrade(module, port_path):
""" Upgrade outdated ports. """
- rc, out, err = module.run_command("%s upgrade outdated" % port_path)
+ rc, out, err = module.run_command([port_path, "upgrade", "outdated"])
# rc is 1 when nothing to upgrade so check stdout first.
if out.strip() == "Nothing to upgrade.":
@@ -182,7 +182,7 @@ def remove_ports(module, port_path, ports, stdout, stderr):
if not query_port(module, port_path, port):
continue
- rc, out, err = module.run_command("%s uninstall %s" % (port_path, port))
+ rc, out, err = module.run_command([port_path, "uninstall", port])
stdout += out
stderr += err
if query_port(module, port_path, port):
@@ -206,7 +206,7 @@ def install_ports(module, port_path, ports, variant, stdout, stderr):
if query_port(module, port_path, port):
continue
- rc, out, err = module.run_command("%s install %s %s" % (port_path, port, variant))
+ rc, out, err = module.run_command([port_path, "install", port, variant])
stdout += out
stderr += err
if not query_port(module, port_path, port):
@@ -232,7 +232,7 @@ def activate_ports(module, port_path, ports, stdout, stderr):
if query_port(module, port_path, port, state="active"):
continue
- rc, out, err = module.run_command("%s activate %s" % (port_path, port))
+ rc, out, err = module.run_command([port_path, "activate", port])
stdout += out
stderr += err
@@ -259,7 +259,7 @@ def deactivate_ports(module, port_path, ports, stdout, stderr):
if not query_port(module, port_path, port, state="active"):
continue
- rc, out, err = module.run_command("%s deactivate %s" % (port_path, port))
+ rc, out, err = module.run_command([port_path, "deactivate", port])
stdout += out
stderr += err
if query_port(module, port_path, port, state="active"):
diff --git a/ansible_collections/community/general/plugins/modules/mksysb.py b/ansible_collections/community/general/plugins/modules/mksysb.py
index 8272dbf7d..1280f04d5 100644
--- a/ansible_collections/community/general/plugins/modules/mksysb.py
+++ b/ansible_collections/community/general/plugins/modules/mksysb.py
@@ -138,6 +138,7 @@ class MkSysB(ModuleHelper):
backup_dmapi_fs=cmd_runner_fmt.as_bool("-A"),
combined_path=cmd_runner_fmt.as_func(cmd_runner_fmt.unpack_args(lambda p, n: ["%s/%s" % (p, n)])),
)
+ use_old_vardict = False
def __init_module__(self):
if not os.path.isdir(self.vars.storage_path):
diff --git a/ansible_collections/community/general/plugins/modules/opkg.py b/ansible_collections/community/general/plugins/modules/opkg.py
index 757c88c5d..2f9794ab8 100644
--- a/ansible_collections/community/general/plugins/modules/opkg.py
+++ b/ansible_collections/community/general/plugins/modules/opkg.py
@@ -127,6 +127,7 @@ class Opkg(StateModuleHelper):
executable=dict(type="path"),
),
)
+ use_old_vardict = False
def __init_module__(self):
self.vars.set("install_c", 0, output=False, change=True)
diff --git a/ansible_collections/community/general/plugins/modules/parted.py b/ansible_collections/community/general/plugins/modules/parted.py
index 382e47a47..b3616a8ec 100644
--- a/ansible_collections/community/general/plugins/modules/parted.py
+++ b/ansible_collections/community/general/plugins/modules/parted.py
@@ -480,12 +480,12 @@ def get_device_info(device, unit):
if label_needed:
return get_unlabeled_device_info(device, unit)
- command = "%s -s -m %s -- unit '%s' print" % (parted_exec, device, unit)
+ command = [parted_exec, "-s", "-m", device, "--", "unit", unit, "print"]
rc, out, err = module.run_command(command)
if rc != 0 and 'unrecognised disk label' not in err:
module.fail_json(msg=(
"Error while getting device information with parted "
- "script: '%s'" % command),
+ "script: '%s'" % " ".join(command)),
rc=rc, out=out, err=err
)
@@ -506,7 +506,7 @@ def check_parted_label(device):
return False
# Older parted versions return a message in the stdout and RC > 0.
- rc, out, err = module.run_command("%s -s -m %s print" % (parted_exec, device))
+ rc, out, err = module.run_command([parted_exec, "-s", "-m", device, "print"])
if rc != 0 and 'unrecognised disk label' in out.lower():
return True
@@ -546,7 +546,7 @@ def parted_version():
"""
global module, parted_exec # pylint: disable=global-variable-not-assigned
- rc, out, err = module.run_command("%s --version" % parted_exec)
+ rc, out, err = module.run_command([parted_exec, "--version"])
if rc != 0:
module.fail_json(
msg="Failed to get parted version.", rc=rc, out=out, err=err
@@ -580,6 +580,7 @@ def parted(script, device, align):
script_option = '-s'
if script and not module.check_mode:
+ # TODO: convert run_comand() argument to list!
command = "%s %s -m %s %s -- %s" % (parted_exec, script_option, align_option, device, script)
rc, out, err = module.run_command(command)
diff --git a/ansible_collections/community/general/plugins/modules/pipx.py b/ansible_collections/community/general/plugins/modules/pipx.py
index 705cc71a7..e82e4c32a 100644
--- a/ansible_collections/community/general/plugins/modules/pipx.py
+++ b/ansible_collections/community/general/plugins/modules/pipx.py
@@ -201,6 +201,7 @@ class PipX(StateModuleHelper):
],
supports_check_mode=True,
)
+ use_old_vardict = False
def _retrieve_installed(self):
def process_list(rc, out, err):
diff --git a/ansible_collections/community/general/plugins/modules/pipx_info.py b/ansible_collections/community/general/plugins/modules/pipx_info.py
index 34f9681b0..992ca7941 100644
--- a/ansible_collections/community/general/plugins/modules/pipx_info.py
+++ b/ansible_collections/community/general/plugins/modules/pipx_info.py
@@ -150,6 +150,7 @@ class PipXInfo(ModuleHelper):
),
supports_check_mode=True,
)
+ use_old_vardict = False
def __init_module__(self):
if self.vars.executable:
diff --git a/ansible_collections/community/general/plugins/modules/pkg5.py b/ansible_collections/community/general/plugins/modules/pkg5.py
index c4aace9f2..08fa9272f 100644
--- a/ansible_collections/community/general/plugins/modules/pkg5.py
+++ b/ansible_collections/community/general/plugins/modules/pkg5.py
@@ -54,6 +54,12 @@ options:
- Refresh publishers before execution.
type: bool
default: true
+ verbose:
+ description:
+ - Set to V(true) to disable quiet execution.
+ type: bool
+ default: false
+ version_added: 9.0.0
'''
EXAMPLES = '''
- name: Install Vim
@@ -90,6 +96,7 @@ def main():
accept_licenses=dict(type='bool', default=False, aliases=['accept', 'accept_licences']),
be_name=dict(type='str'),
refresh=dict(type='bool', default=True),
+ verbose=dict(type='bool', default=False),
),
supports_check_mode=True,
)
@@ -156,9 +163,15 @@ def ensure(module, state, packages, params):
else:
no_refresh = ['--no-refresh']
+ if params['verbose']:
+ verbosity = []
+ else:
+ verbosity = ['-q']
+
to_modify = list(filter(behaviour[state]['filter'], packages))
if to_modify:
- rc, out, err = module.run_command(['pkg', behaviour[state]['subcommand']] + dry_run + accept_licenses + beadm + no_refresh + ['-q', '--'] + to_modify)
+ rc, out, err = module.run_command(
+ ['pkg', behaviour[state]['subcommand']] + dry_run + accept_licenses + beadm + no_refresh + verbosity + ['--'] + to_modify)
response['rc'] = rc
response['results'].append(out)
response['msg'] += err
diff --git a/ansible_collections/community/general/plugins/modules/pkgin.py b/ansible_collections/community/general/plugins/modules/pkgin.py
index 5b2e478b8..8b29655d3 100644
--- a/ansible_collections/community/general/plugins/modules/pkgin.py
+++ b/ansible_collections/community/general/plugins/modules/pkgin.py
@@ -145,18 +145,18 @@ def query_package(module, name):
"""
# test whether '-p' (parsable) flag is supported.
- rc, out, err = module.run_command("%s -p -v" % PKGIN_PATH)
+ rc, out, err = module.run_command([PKGIN_PATH, "-p", "-v"])
if rc == 0:
- pflag = '-p'
+ pflag = ['-p']
splitchar = ';'
else:
- pflag = ''
+ pflag = []
splitchar = ' '
# Use "pkgin search" to find the package. The regular expression will
# only match on the complete name.
- rc, out, err = module.run_command("%s %s search \"^%s$\"" % (PKGIN_PATH, pflag, name))
+ rc, out, err = module.run_command([PKGIN_PATH] + pflag + ["search", "^%s$" % name])
# rc will not be 0 unless the search was a success
if rc == 0:
@@ -234,22 +234,19 @@ def format_pkgin_command(module, command, package=None):
# an empty string. Some commands (e.g. 'update') will ignore extra
# arguments, however this behaviour cannot be relied on for others.
if package is None:
- package = ""
+ packages = []
+ else:
+ packages = [package]
if module.params["force"]:
- force = "-F"
+ force = ["-F"]
else:
- force = ""
-
- vars = {"pkgin": PKGIN_PATH,
- "command": command,
- "package": package,
- "force": force}
+ force = []
if module.check_mode:
- return "%(pkgin)s -n %(command)s %(package)s" % vars
+ return [PKGIN_PATH, "-n", command] + packages
else:
- return "%(pkgin)s -y %(force)s %(command)s %(package)s" % vars
+ return [PKGIN_PATH, "-y"] + force + [command] + packages
def remove_packages(module, packages):
diff --git a/ansible_collections/community/general/plugins/modules/portinstall.py b/ansible_collections/community/general/plugins/modules/portinstall.py
index e263b7181..59dafb1eb 100644
--- a/ansible_collections/community/general/plugins/modules/portinstall.py
+++ b/ansible_collections/community/general/plugins/modules/portinstall.py
@@ -79,12 +79,13 @@ def query_package(module, name):
if pkg_info_path:
pkgng = False
pkg_glob_path = module.get_bin_path('pkg_glob', True)
+ # TODO: convert run_comand() argument to list!
rc, out, err = module.run_command("%s -e `pkg_glob %s`" % (pkg_info_path, shlex_quote(name)), use_unsafe_shell=True)
+ pkg_info_path = [pkg_info_path]
else:
pkgng = True
- pkg_info_path = module.get_bin_path('pkg', True)
- pkg_info_path = pkg_info_path + " info"
- rc, out, err = module.run_command("%s %s" % (pkg_info_path, name))
+ pkg_info_path = [module.get_bin_path('pkg', True), "info"]
+ rc, out, err = module.run_command(pkg_info_path + [name])
found = rc == 0
@@ -94,10 +95,7 @@ def query_package(module, name):
# some package is installed
name_without_digits = re.sub('[0-9]', '', name)
if name != name_without_digits:
- if pkgng:
- rc, out, err = module.run_command("%s %s" % (pkg_info_path, name_without_digits))
- else:
- rc, out, err = module.run_command("%s %s" % (pkg_info_path, name_without_digits))
+ rc, out, err = module.run_command(pkg_info_path + [name_without_digits])
found = rc == 0
@@ -107,13 +105,13 @@ def query_package(module, name):
def matching_packages(module, name):
ports_glob_path = module.get_bin_path('ports_glob', True)
- rc, out, err = module.run_command("%s %s" % (ports_glob_path, name))
+ rc, out, err = module.run_command([ports_glob_path, name])
# counts the number of packages found
occurrences = out.count('\n')
if occurrences == 0:
name_without_digits = re.sub('[0-9]', '', name)
if name != name_without_digits:
- rc, out, err = module.run_command("%s %s" % (ports_glob_path, name_without_digits))
+ rc, out, err = module.run_command([ports_glob_path, name_without_digits])
occurrences = out.count('\n')
return occurrences
@@ -135,10 +133,12 @@ def remove_packages(module, packages):
if not query_package(module, package):
continue
+ # TODO: convert run_comand() argument to list!
rc, out, err = module.run_command("%s `%s %s`" % (pkg_delete_path, pkg_glob_path, shlex_quote(package)), use_unsafe_shell=True)
if query_package(module, package):
name_without_digits = re.sub('[0-9]', '', package)
+ # TODO: convert run_comand() argument to list!
rc, out, err = module.run_command("%s `%s %s`" % (pkg_delete_path, pkg_glob_path,
shlex_quote(name_without_digits)),
use_unsafe_shell=True)
@@ -163,13 +163,13 @@ def install_packages(module, packages, use_packages):
if not portinstall_path:
pkg_path = module.get_bin_path('pkg', False)
if pkg_path:
- module.run_command("pkg install -y portupgrade")
+ module.run_command([pkg_path, "install", "-y", "portupgrade"])
portinstall_path = module.get_bin_path('portinstall', True)
if use_packages:
- portinstall_params = "--use-packages"
+ portinstall_params = ["--use-packages"]
else:
- portinstall_params = ""
+ portinstall_params = []
for package in packages:
if query_package(module, package):
@@ -178,7 +178,7 @@ def install_packages(module, packages, use_packages):
# TODO: check how many match
matches = matching_packages(module, package)
if matches == 1:
- rc, out, err = module.run_command("%s --batch %s %s" % (portinstall_path, portinstall_params, package))
+ rc, out, err = module.run_command([portinstall_path, "--batch"] + portinstall_params + [package])
if not query_package(module, package):
module.fail_json(msg="failed to install %s: %s" % (package, out))
elif matches == 0:
diff --git a/ansible_collections/community/general/plugins/modules/proxmox.py b/ansible_collections/community/general/plugins/modules/proxmox.py
index 47f3faa4f..73afd952e 100644
--- a/ansible_collections/community/general/plugins/modules/proxmox.py
+++ b/ansible_collections/community/general/plugins/modules/proxmox.py
@@ -15,12 +15,14 @@ short_description: Management of instances in Proxmox VE cluster
description:
- Allows you to create/delete/stop instances in Proxmox VE cluster.
- The module automatically detects containerization type (lxc for PVE 4, openvz for older).
- - Since community.general 4.0.0 on, there are no more default values, see O(proxmox_default_behavior).
+ - Since community.general 4.0.0 on, there are no more default values.
attributes:
check_mode:
support: none
diff_mode:
support: none
+ action_group:
+ version_added: 9.0.0
options:
password:
description:
@@ -47,28 +49,23 @@ options:
comma-delimited list C([volume=]<volume> [,acl=<1|0>] [,mountoptions=<opt[;opt...]>] [,quota=<1|0>]
[,replicate=<1|0>] [,ro=<1|0>] [,shared=<1|0>] [,size=<DiskSize>])."
- See U(https://pve.proxmox.com/wiki/Linux_Container) for a full description.
- - This option has no default unless O(proxmox_default_behavior) is set to V(compatibility); then the default is V(3).
- Should not be used in conjunction with O(storage).
type: str
cores:
description:
- Specify number of cores per socket.
- - This option has no default unless O(proxmox_default_behavior) is set to V(compatibility); then the default is V(1).
type: int
cpus:
description:
- numbers of allocated cpus for instance
- - This option has no default unless O(proxmox_default_behavior) is set to V(compatibility); then the default is V(1).
type: int
memory:
description:
- memory size in MB for instance
- - This option has no default unless O(proxmox_default_behavior) is set to V(compatibility); then the default is V(512).
type: int
swap:
description:
- swap memory size in MB for instance
- - This option has no default unless O(proxmox_default_behavior) is set to V(compatibility); then the default is V(0).
type: int
netif:
description:
@@ -101,7 +98,6 @@ options:
onboot:
description:
- specifies whether a VM will be started during system bootup
- - This option has no default unless O(proxmox_default_behavior) is set to V(compatibility); then the default is V(false).
type: bool
storage:
description:
@@ -120,7 +116,6 @@ options:
cpuunits:
description:
- CPU weight for a VM
- - This option has no default unless O(proxmox_default_behavior) is set to V(compatibility); then the default is V(1000).
type: int
nameserver:
description:
@@ -200,25 +195,6 @@ options:
- The special value V(host) configures the same timezone used by Proxmox host.
type: str
version_added: '7.1.0'
- proxmox_default_behavior:
- description:
- - As of community.general 4.0.0, various options no longer have default values.
- These default values caused problems when users expected different behavior from Proxmox
- by default or filled options which caused problems when set.
- - The value V(compatibility) (default before community.general 4.0.0) will ensure that the default values
- are used when the values are not explicitly specified by the user. The new default is V(no_defaults),
- which makes sure these options have no defaults.
- - This affects the O(disk), O(cores), O(cpus), O(memory), O(onboot), O(swap), and O(cpuunits) options.
- - >
- This parameter is now B(deprecated) and it will be removed in community.general 10.0.0.
- By then, the module's behavior should be to not set default values, equivalent to V(no_defaults).
- If a consistent set of defaults is needed, the playbook or role should be responsible for setting it.
- type: str
- default: no_defaults
- choices:
- - compatibility
- - no_defaults
- version_added: "1.3.0"
clone:
description:
- ID of the container to be cloned.
@@ -242,6 +218,7 @@ author: Sergei Antipov (@UnderGreen)
seealso:
- module: community.general.proxmox_vm_info
extends_documentation_fragment:
+ - community.general.proxmox.actiongroup_proxmox
- community.general.proxmox.documentation
- community.general.proxmox.selection
- community.general.attributes
@@ -785,8 +762,6 @@ def main():
description=dict(type='str'),
hookscript=dict(type='str'),
timezone=dict(type='str'),
- proxmox_default_behavior=dict(type='str', default='no_defaults', choices=['compatibility', 'no_defaults'],
- removed_in_version='9.0.0', removed_from_collection='community.general'),
clone=dict(type='int'),
clone_type=dict(default='opportunistic', choices=['full', 'linked', 'opportunistic']),
tags=dict(type='list', elements='str')
@@ -827,20 +802,6 @@ def main():
timeout = module.params['timeout']
clone = module.params['clone']
- if module.params['proxmox_default_behavior'] == 'compatibility':
- old_default_values = dict(
- disk="3",
- cores=1,
- cpus=1,
- memory=512,
- swap=0,
- onboot=False,
- cpuunits=1000,
- )
- for param, value in old_default_values.items():
- if module.params[param] is None:
- module.params[param] = value
-
# If vmid not set get the Next VM id from ProxmoxAPI
# If hostname is set get the VM id from ProxmoxAPI
if not vmid and state == 'present':
diff --git a/ansible_collections/community/general/plugins/modules/proxmox_disk.py b/ansible_collections/community/general/plugins/modules/proxmox_disk.py
index 69a7300df..83cdbeee5 100644
--- a/ansible_collections/community/general/plugins/modules/proxmox_disk.py
+++ b/ansible_collections/community/general/plugins/modules/proxmox_disk.py
@@ -21,6 +21,8 @@ attributes:
support: none
diff_mode:
support: none
+ action_group:
+ version_added: 9.0.0
options:
name:
description:
@@ -325,6 +327,7 @@ options:
- The drive's worldwide name, encoded as 16 bytes hex string, prefixed by V(0x).
type: str
extends_documentation_fragment:
+ - community.general.proxmox.actiongroup_proxmox
- community.general.proxmox.documentation
- community.general.attributes
'''
diff --git a/ansible_collections/community/general/plugins/modules/proxmox_domain_info.py b/ansible_collections/community/general/plugins/modules/proxmox_domain_info.py
index 7435695a9..f3ff212bf 100644
--- a/ansible_collections/community/general/plugins/modules/proxmox_domain_info.py
+++ b/ansible_collections/community/general/plugins/modules/proxmox_domain_info.py
@@ -16,6 +16,9 @@ short_description: Retrieve information about one or more Proxmox VE domains
version_added: 1.3.0
description:
- Retrieve information about one or more Proxmox VE domains.
+attributes:
+ action_group:
+ version_added: 9.0.0
options:
domain:
description:
@@ -24,6 +27,7 @@ options:
type: str
author: Tristan Le Guern (@tleguern)
extends_documentation_fragment:
+ - community.general.proxmox.actiongroup_proxmox
- community.general.proxmox.documentation
- community.general.attributes
- community.general.attributes.info_module
diff --git a/ansible_collections/community/general/plugins/modules/proxmox_group_info.py b/ansible_collections/community/general/plugins/modules/proxmox_group_info.py
index 531a9dae7..eda1fe04d 100644
--- a/ansible_collections/community/general/plugins/modules/proxmox_group_info.py
+++ b/ansible_collections/community/general/plugins/modules/proxmox_group_info.py
@@ -16,6 +16,9 @@ short_description: Retrieve information about one or more Proxmox VE groups
version_added: 1.3.0
description:
- Retrieve information about one or more Proxmox VE groups
+attributes:
+ action_group:
+ version_added: 9.0.0
options:
group:
description:
@@ -24,6 +27,7 @@ options:
type: str
author: Tristan Le Guern (@tleguern)
extends_documentation_fragment:
+ - community.general.proxmox.actiongroup_proxmox
- community.general.proxmox.documentation
- community.general.attributes
- community.general.attributes.info_module
diff --git a/ansible_collections/community/general/plugins/modules/proxmox_kvm.py b/ansible_collections/community/general/plugins/modules/proxmox_kvm.py
index 8779dcdc1..9fe805c7a 100644
--- a/ansible_collections/community/general/plugins/modules/proxmox_kvm.py
+++ b/ansible_collections/community/general/plugins/modules/proxmox_kvm.py
@@ -21,6 +21,8 @@ attributes:
support: none
diff_mode:
support: none
+ action_group:
+ version_added: 9.0.0
options:
archive:
description:
@@ -517,6 +519,16 @@ options:
default: '2.0'
type: dict
version_added: 7.1.0
+ usb:
+ description:
+ - A hash/dictionary of USB devices for the VM. O(usb='{"key":"value", "key":"value"}').
+ - Keys allowed are - C(usb[n]) where 0 ≤ n ≤ N.
+ - Values allowed are - C(host="value|spice",mapping="value",usb3="1|0").
+ - host is either C(spice) or the USB id/port.
+ - Option C(mapping) is the mapped USB device name.
+ - Option C(usb3) enables USB 3 support.
+ type: dict
+ version_added: 9.0.0
update:
description:
- If V(true), the VM will be updated with new value.
@@ -579,6 +591,7 @@ options:
seealso:
- module: community.general.proxmox_vm_info
extends_documentation_fragment:
+ - community.general.proxmox.actiongroup_proxmox
- community.general.proxmox.documentation
- community.general.proxmox.selection
- community.general.attributes
@@ -1091,7 +1104,7 @@ class ProxmoxKvmAnsible(ProxmoxAnsible):
)
# Convert all dict in kwargs to elements.
- # For hostpci[n], ide[n], net[n], numa[n], parallel[n], sata[n], scsi[n], serial[n], virtio[n], ipconfig[n]
+ # For hostpci[n], ide[n], net[n], numa[n], parallel[n], sata[n], scsi[n], serial[n], virtio[n], ipconfig[n], usb[n]
for k in list(kwargs.keys()):
if isinstance(kwargs[k], dict):
kwargs.update(kwargs[k])
@@ -1308,6 +1321,7 @@ def main():
storage=dict(type='str', required=True),
version=dict(type='str', choices=['2.0', '1.2'], default='2.0')
)),
+ usb=dict(type='dict'),
update=dict(type='bool', default=False),
update_unsafe=dict(type='bool', default=False),
vcpus=dict(type='int'),
@@ -1513,6 +1527,7 @@ def main():
tdf=module.params['tdf'],
template=module.params['template'],
tpmstate0=module.params['tpmstate0'],
+ usb=module.params['usb'],
vcpus=module.params['vcpus'],
vga=module.params['vga'],
virtio=module.params['virtio'],
diff --git a/ansible_collections/community/general/plugins/modules/proxmox_nic.py b/ansible_collections/community/general/plugins/modules/proxmox_nic.py
index 9afe49447..6e94ed0bb 100644
--- a/ansible_collections/community/general/plugins/modules/proxmox_nic.py
+++ b/ansible_collections/community/general/plugins/modules/proxmox_nic.py
@@ -21,6 +21,8 @@ attributes:
support: full
diff_mode:
support: none
+ action_group:
+ version_added: 9.0.0
options:
bridge:
description:
@@ -94,6 +96,7 @@ options:
- Specifies the instance ID.
type: int
extends_documentation_fragment:
+ - community.general.proxmox.actiongroup_proxmox
- community.general.proxmox.documentation
- community.general.attributes
'''
diff --git a/ansible_collections/community/general/plugins/modules/proxmox_node_info.py b/ansible_collections/community/general/plugins/modules/proxmox_node_info.py
index 82ef7aa38..51d8745c0 100644
--- a/ansible_collections/community/general/plugins/modules/proxmox_node_info.py
+++ b/ansible_collections/community/general/plugins/modules/proxmox_node_info.py
@@ -17,7 +17,11 @@ version_added: 8.2.0
description:
- Retrieve information about one or more Proxmox VE nodes.
author: John Berninger (@jwbernin)
+attributes:
+ action_group:
+ version_added: 9.0.0
extends_documentation_fragment:
+ - community.general.proxmox.actiongroup_proxmox
- community.general.proxmox.documentation
- community.general.attributes
- community.general.attributes.info_module
diff --git a/ansible_collections/community/general/plugins/modules/proxmox_pool.py b/ansible_collections/community/general/plugins/modules/proxmox_pool.py
index 704632070..5089ec3be 100644
--- a/ansible_collections/community/general/plugins/modules/proxmox_pool.py
+++ b/ansible_collections/community/general/plugins/modules/proxmox_pool.py
@@ -21,6 +21,8 @@ attributes:
support: full
diff_mode:
support: none
+ action_group:
+ version_added: 9.0.0
options:
poolid:
description:
@@ -42,8 +44,9 @@ options:
type: str
extends_documentation_fragment:
- - community.general.proxmox.documentation
- - community.general.attributes
+ - community.general.proxmox.actiongroup_proxmox
+ - community.general.proxmox.documentation
+ - community.general.attributes
"""
EXAMPLES = """
diff --git a/ansible_collections/community/general/plugins/modules/proxmox_pool_member.py b/ansible_collections/community/general/plugins/modules/proxmox_pool_member.py
index 7d6b24949..b26082f97 100644
--- a/ansible_collections/community/general/plugins/modules/proxmox_pool_member.py
+++ b/ansible_collections/community/general/plugins/modules/proxmox_pool_member.py
@@ -20,6 +20,8 @@ attributes:
support: full
diff_mode:
support: full
+ action_group:
+ version_added: 9.0.0
options:
poolid:
description:
@@ -48,8 +50,9 @@ options:
type: str
extends_documentation_fragment:
- - community.general.proxmox.documentation
- - community.general.attributes
+ - community.general.proxmox.actiongroup_proxmox
+ - community.general.proxmox.documentation
+ - community.general.attributes
"""
EXAMPLES = """
diff --git a/ansible_collections/community/general/plugins/modules/proxmox_snap.py b/ansible_collections/community/general/plugins/modules/proxmox_snap.py
index 4991423c2..4f7b345b8 100644
--- a/ansible_collections/community/general/plugins/modules/proxmox_snap.py
+++ b/ansible_collections/community/general/plugins/modules/proxmox_snap.py
@@ -21,6 +21,8 @@ attributes:
support: full
diff_mode:
support: none
+ action_group:
+ version_added: 9.0.0
options:
hostname:
description:
@@ -89,8 +91,9 @@ notes:
requirements: [ "proxmoxer", "requests" ]
author: Jeffrey van Pelt (@Thulium-Drake)
extends_documentation_fragment:
- - community.general.proxmox.documentation
- - community.general.attributes
+ - community.general.proxmox.actiongroup_proxmox
+ - community.general.proxmox.documentation
+ - community.general.attributes
'''
EXAMPLES = r'''
diff --git a/ansible_collections/community/general/plugins/modules/proxmox_storage_contents_info.py b/ansible_collections/community/general/plugins/modules/proxmox_storage_contents_info.py
index 498490fe4..b777870e5 100644
--- a/ansible_collections/community/general/plugins/modules/proxmox_storage_contents_info.py
+++ b/ansible_collections/community/general/plugins/modules/proxmox_storage_contents_info.py
@@ -17,6 +17,9 @@ short_description: List content from a Proxmox VE storage
version_added: 8.2.0
description:
- Retrieves information about stored objects on a specific storage attached to a node.
+attributes:
+ action_group:
+ version_added: 9.0.0
options:
storage:
description:
@@ -41,6 +44,7 @@ options:
type: int
author: Julian Vanden Broeck (@l00ptr)
extends_documentation_fragment:
+ - community.general.proxmox.actiongroup_proxmox
- community.general.proxmox.documentation
- community.general.attributes
- community.general.attributes.info_module
diff --git a/ansible_collections/community/general/plugins/modules/proxmox_storage_info.py b/ansible_collections/community/general/plugins/modules/proxmox_storage_info.py
index 3c29e59cf..fd5a6ee0d 100644
--- a/ansible_collections/community/general/plugins/modules/proxmox_storage_info.py
+++ b/ansible_collections/community/general/plugins/modules/proxmox_storage_info.py
@@ -16,6 +16,9 @@ short_description: Retrieve information about one or more Proxmox VE storages
version_added: 2.2.0
description:
- Retrieve information about one or more Proxmox VE storages.
+attributes:
+ action_group:
+ version_added: 9.0.0
options:
storage:
description:
@@ -28,6 +31,7 @@ options:
type: str
author: Tristan Le Guern (@tleguern)
extends_documentation_fragment:
+ - community.general.proxmox.actiongroup_proxmox
- community.general.proxmox.documentation
- community.general.attributes
- community.general.attributes.info_module
diff --git a/ansible_collections/community/general/plugins/modules/proxmox_tasks_info.py b/ansible_collections/community/general/plugins/modules/proxmox_tasks_info.py
index d31a04980..65a07566a 100644
--- a/ansible_collections/community/general/plugins/modules/proxmox_tasks_info.py
+++ b/ansible_collections/community/general/plugins/modules/proxmox_tasks_info.py
@@ -17,6 +17,9 @@ version_added: 3.8.0
description:
- Retrieve information about one or more Proxmox VE tasks.
author: 'Andreas Botzner (@paginabianca) <andreas at botzner dot com>'
+attributes:
+ action_group:
+ version_added: 9.0.0
options:
node:
description:
@@ -29,9 +32,10 @@ options:
aliases: ['upid', 'name']
type: str
extends_documentation_fragment:
- - community.general.proxmox.documentation
- - community.general.attributes
- - community.general.attributes.info_module
+ - community.general.proxmox.actiongroup_proxmox
+ - community.general.proxmox.documentation
+ - community.general.attributes
+ - community.general.attributes.info_module
'''
diff --git a/ansible_collections/community/general/plugins/modules/proxmox_template.py b/ansible_collections/community/general/plugins/modules/proxmox_template.py
index 615bfc182..f73109931 100644
--- a/ansible_collections/community/general/plugins/modules/proxmox_template.py
+++ b/ansible_collections/community/general/plugins/modules/proxmox_template.py
@@ -20,6 +20,8 @@ attributes:
support: none
diff_mode:
support: none
+ action_group:
+ version_added: 9.0.0
options:
node:
description:
@@ -69,6 +71,7 @@ notes:
- C(proxmoxer) >= 1.2.0 requires C(requests_toolbelt) to upload files larger than 256 MB.
author: Sergei Antipov (@UnderGreen)
extends_documentation_fragment:
+ - community.general.proxmox.actiongroup_proxmox
- community.general.proxmox.documentation
- community.general.attributes
'''
diff --git a/ansible_collections/community/general/plugins/modules/proxmox_user_info.py b/ansible_collections/community/general/plugins/modules/proxmox_user_info.py
index 20154528a..8680dec7c 100644
--- a/ansible_collections/community/general/plugins/modules/proxmox_user_info.py
+++ b/ansible_collections/community/general/plugins/modules/proxmox_user_info.py
@@ -16,6 +16,9 @@ short_description: Retrieve information about one or more Proxmox VE users
version_added: 1.3.0
description:
- Retrieve information about one or more Proxmox VE users
+attributes:
+ action_group:
+ version_added: 9.0.0
options:
domain:
description:
@@ -33,6 +36,7 @@ options:
type: str
author: Tristan Le Guern (@tleguern)
extends_documentation_fragment:
+ - community.general.proxmox.actiongroup_proxmox
- community.general.proxmox.documentation
- community.general.attributes
- community.general.attributes.info_module
diff --git a/ansible_collections/community/general/plugins/modules/proxmox_vm_info.py b/ansible_collections/community/general/plugins/modules/proxmox_vm_info.py
index 30342b684..39d8307a4 100644
--- a/ansible_collections/community/general/plugins/modules/proxmox_vm_info.py
+++ b/ansible_collections/community/general/plugins/modules/proxmox_vm_info.py
@@ -17,6 +17,9 @@ version_added: 7.2.0
description:
- Retrieve information about one or more Proxmox VE virtual machines.
author: 'Sergei Antipov (@UnderGreen) <greendayonfire at gmail dot com>'
+attributes:
+ action_group:
+ version_added: 9.0.0
options:
node:
description:
@@ -55,9 +58,10 @@ options:
default: none
version_added: 8.1.0
extends_documentation_fragment:
- - community.general.proxmox.documentation
- - community.general.attributes
- - community.general.attributes.info_module
+ - community.general.proxmox.actiongroup_proxmox
+ - community.general.proxmox.documentation
+ - community.general.attributes
+ - community.general.attributes.info_module
"""
EXAMPLES = """
diff --git a/ansible_collections/community/general/plugins/modules/puppet.py b/ansible_collections/community/general/plugins/modules/puppet.py
index b28583fe0..073a08324 100644
--- a/ansible_collections/community/general/plugins/modules/puppet.py
+++ b/ansible_collections/community/general/plugins/modules/puppet.py
@@ -101,6 +101,12 @@ options:
- Whether to print a transaction summary.
type: bool
default: false
+ waitforlock:
+ description:
+ - The maximum amount of time C(puppet) should wait for an already running C(puppet) agent to finish before starting.
+ - If a number without unit is provided, it is assumed to be a number of seconds. Allowed units are V(m) for minutes and V(h) for hours.
+ type: str
+ version_added: 9.0.0
verbose:
description:
- Print extra information.
@@ -159,6 +165,14 @@ EXAMPLES = r'''
skip_tags:
- service
+- name: Wait 30 seconds for any current puppet runs to finish
+ community.general.puppet:
+ waitforlock: 30
+
+- name: Wait 5 minutes for any current puppet runs to finish
+ community.general.puppet:
+ waitforlock: 5m
+
- name: Run puppet agent in noop mode
community.general.puppet:
noop: true
@@ -214,6 +228,7 @@ def main():
skip_tags=dict(type='list', elements='str'),
execute=dict(type='str'),
summarize=dict(type='bool', default=False),
+ waitforlock=dict(type='str'),
debug=dict(type='bool', default=False),
verbose=dict(type='bool', default=False),
use_srv_records=dict(type='bool'),
@@ -247,11 +262,11 @@ def main():
runner = puppet_utils.puppet_runner(module)
if not p['manifest'] and not p['execute']:
- args_order = "_agent_fixed puppetmaster show_diff confdir environment tags skip_tags certname noop use_srv_records"
+ args_order = "_agent_fixed puppetmaster show_diff confdir environment tags skip_tags certname noop use_srv_records waitforlock"
with runner(args_order) as ctx:
rc, stdout, stderr = ctx.run()
else:
- args_order = "_apply_fixed logdest modulepath environment certname tags skip_tags noop _execute summarize debug verbose"
+ args_order = "_apply_fixed logdest modulepath environment certname tags skip_tags noop _execute summarize debug verbose waitforlock"
with runner(args_order) as ctx:
rc, stdout, stderr = ctx.run(_execute=[p['execute'], p['manifest']])
diff --git a/ansible_collections/community/general/plugins/modules/rax.py b/ansible_collections/community/general/plugins/modules/rax.py
deleted file mode 100644
index 76e429944..000000000
--- a/ansible_collections/community/general/plugins/modules/rax.py
+++ /dev/null
@@ -1,903 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-# Copyright Ansible Project
-# 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: rax
-short_description: Create / delete an instance in Rackspace Public Cloud
-description:
- - creates / deletes a Rackspace Public Cloud instance and optionally
- waits for it to be 'running'.
-attributes:
- check_mode:
- support: none
- diff_mode:
- support: none
-options:
- auto_increment:
- description:
- - Whether or not to increment a single number with the name of the
- created servers. Only applicable when used with the O(group) attribute
- or meta key.
- type: bool
- default: true
- boot_from_volume:
- description:
- - Whether or not to boot the instance from a Cloud Block Storage volume.
- If V(true) and O(image) is specified a new volume will be created at
- boot time. O(boot_volume_size) is required with O(image) to create a
- new volume at boot time.
- type: bool
- default: false
- boot_volume:
- type: str
- description:
- - Cloud Block Storage ID or Name to use as the boot volume of the
- instance
- boot_volume_size:
- type: int
- description:
- - Size of the volume to create in Gigabytes. This is only required with
- O(image) and O(boot_from_volume).
- default: 100
- boot_volume_terminate:
- description:
- - Whether the O(boot_volume) or newly created volume from O(image) will
- be terminated when the server is terminated
- type: bool
- default: false
- config_drive:
- description:
- - Attach read-only configuration drive to server as label config-2
- type: bool
- default: false
- count:
- type: int
- description:
- - number of instances to launch
- default: 1
- count_offset:
- type: int
- description:
- - number count to start at
- default: 1
- disk_config:
- type: str
- description:
- - Disk partitioning strategy
- - If not specified it will assume the value V(auto).
- choices:
- - auto
- - manual
- exact_count:
- description:
- - Explicitly ensure an exact count of instances, used with
- state=active/present. If specified as V(true) and O(count) is less than
- the servers matched, servers will be deleted to match the count. If
- the number of matched servers is fewer than specified in O(count)
- additional servers will be added.
- type: bool
- default: false
- extra_client_args:
- type: dict
- default: {}
- description:
- - A hash of key/value pairs to be used when creating the cloudservers
- client. This is considered an advanced option, use it wisely and
- with caution.
- extra_create_args:
- type: dict
- default: {}
- description:
- - A hash of key/value pairs to be used when creating a new server.
- This is considered an advanced option, use it wisely and with caution.
- files:
- type: dict
- default: {}
- description:
- - Files to insert into the instance. remotefilename:localcontent
- flavor:
- type: str
- description:
- - flavor to use for the instance
- group:
- type: str
- description:
- - host group to assign to server, is also used for idempotent operations
- to ensure a specific number of instances
- image:
- type: str
- description:
- - image to use for the instance. Can be an C(id), C(human_id) or C(name).
- With O(boot_from_volume), a Cloud Block Storage volume will be created
- with this image
- instance_ids:
- type: list
- elements: str
- description:
- - list of instance ids, currently only used when state='absent' to
- remove instances
- key_name:
- type: str
- description:
- - key pair to use on the instance
- aliases:
- - keypair
- meta:
- type: dict
- default: {}
- description:
- - A hash of metadata to associate with the instance
- name:
- type: str
- description:
- - Name to give the instance
- networks:
- type: list
- elements: str
- description:
- - The network to attach to the instances. If specified, you must include
- ALL networks including the public and private interfaces. Can be C(id)
- or C(label).
- default:
- - public
- - private
- state:
- type: str
- description:
- - Indicate desired state of the resource
- choices:
- - present
- - absent
- default: present
- user_data:
- type: str
- description:
- - Data to be uploaded to the servers config drive. This option implies
- O(config_drive). Can be a file path or a string
- wait:
- description:
- - wait for the instance to be in state 'running' before returning
- type: bool
- default: false
- wait_timeout:
- type: int
- description:
- - how long before wait gives up, in seconds
- default: 300
-author:
- - "Jesse Keating (@omgjlk)"
- - "Matt Martz (@sivel)"
-notes:
- - O(exact_count) can be "destructive" if the number of running servers in
- the O(group) is larger than that specified in O(count). In such a case, the
- O(state) is effectively set to V(absent) and the extra servers are deleted.
- In the case of deletion, the returned data structure will have RV(ignore:action)
- set to V(delete), and the oldest servers in the group will be deleted.
-extends_documentation_fragment:
- - community.general.rackspace.openstack
- - community.general.attributes
-
-'''
-
-EXAMPLES = '''
-- name: Build a Cloud Server
- gather_facts: false
- tasks:
- - name: Server build request
- local_action:
- module: rax
- credentials: ~/.raxpub
- name: rax-test1
- flavor: 5
- image: b11d9567-e412-4255-96b9-bd63ab23bcfe
- key_name: my_rackspace_key
- files:
- /root/test.txt: /home/localuser/test.txt
- wait: true
- state: present
- networks:
- - private
- - public
- register: rax
-
-- name: Build an exact count of cloud servers with incremented names
- hosts: local
- gather_facts: false
- tasks:
- - name: Server build requests
- local_action:
- module: rax
- credentials: ~/.raxpub
- name: test%03d.example.org
- flavor: performance1-1
- image: ubuntu-1204-lts-precise-pangolin
- state: present
- count: 10
- count_offset: 10
- exact_count: true
- group: test
- wait: true
- register: rax
-'''
-
-import json
-import os
-import re
-import time
-
-try:
- import pyrax
- HAS_PYRAX = True
-except ImportError:
- HAS_PYRAX = False
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.community.general.plugins.module_utils.rax import (FINAL_STATUSES, rax_argument_spec, rax_find_bootable_volume,
- rax_find_image, rax_find_network, rax_find_volume,
- rax_required_together, rax_to_dict, setup_rax_module)
-from ansible.module_utils.six.moves import xrange
-from ansible.module_utils.six import string_types
-
-
-def rax_find_server_image(module, server, image, boot_volume):
- if not image and boot_volume:
- vol = rax_find_bootable_volume(module, pyrax, server,
- exit=False)
- if not vol:
- return None
- volume_image_metadata = vol.volume_image_metadata
- vol_image_id = volume_image_metadata.get('image_id')
- if vol_image_id:
- server_image = rax_find_image(module, pyrax,
- vol_image_id, exit=False)
- if server_image:
- server.image = dict(id=server_image)
-
- # Match image IDs taking care of boot from volume
- if image and not server.image:
- vol = rax_find_bootable_volume(module, pyrax, server)
- volume_image_metadata = vol.volume_image_metadata
- vol_image_id = volume_image_metadata.get('image_id')
- if not vol_image_id:
- return None
- server_image = rax_find_image(module, pyrax,
- vol_image_id, exit=False)
- if image != server_image:
- return None
-
- server.image = dict(id=server_image)
- elif image and server.image['id'] != image:
- return None
-
- return server.image
-
-
-def create(module, names=None, flavor=None, image=None, meta=None, key_name=None,
- files=None, wait=True, wait_timeout=300, disk_config=None,
- group=None, nics=None, extra_create_args=None, user_data=None,
- config_drive=False, existing=None, block_device_mapping_v2=None):
- names = [] if names is None else names
- meta = {} if meta is None else meta
- files = {} if files is None else files
- nics = [] if nics is None else nics
- extra_create_args = {} if extra_create_args is None else extra_create_args
- existing = [] if existing is None else existing
- block_device_mapping_v2 = [] if block_device_mapping_v2 is None else block_device_mapping_v2
-
- cs = pyrax.cloudservers
- changed = False
-
- if user_data:
- config_drive = True
-
- if user_data and os.path.isfile(os.path.expanduser(user_data)):
- try:
- user_data = os.path.expanduser(user_data)
- f = open(user_data)
- user_data = f.read()
- f.close()
- except Exception as e:
- module.fail_json(msg='Failed to load %s' % user_data)
-
- # Handle the file contents
- for rpath in files.keys():
- lpath = os.path.expanduser(files[rpath])
- try:
- fileobj = open(lpath, 'r')
- files[rpath] = fileobj.read()
- fileobj.close()
- except Exception as e:
- module.fail_json(msg='Failed to load %s' % lpath)
- try:
- servers = []
- bdmv2 = block_device_mapping_v2
- for name in names:
- servers.append(cs.servers.create(name=name, image=image,
- flavor=flavor, meta=meta,
- key_name=key_name,
- files=files, nics=nics,
- disk_config=disk_config,
- config_drive=config_drive,
- userdata=user_data,
- block_device_mapping_v2=bdmv2,
- **extra_create_args))
- except Exception as e:
- if e.message:
- msg = str(e.message)
- else:
- msg = repr(e)
- module.fail_json(msg=msg)
- else:
- changed = True
-
- if wait:
- end_time = time.time() + wait_timeout
- infinite = wait_timeout == 0
- while infinite or time.time() < end_time:
- for server in servers:
- try:
- server.get()
- except Exception:
- server.status = 'ERROR'
-
- if not filter(lambda s: s.status not in FINAL_STATUSES,
- servers):
- break
- time.sleep(5)
-
- success = []
- error = []
- timeout = []
- for server in servers:
- try:
- server.get()
- except Exception:
- server.status = 'ERROR'
- instance = rax_to_dict(server, 'server')
- if server.status == 'ACTIVE' or not wait:
- success.append(instance)
- elif server.status == 'ERROR':
- error.append(instance)
- elif wait:
- timeout.append(instance)
-
- untouched = [rax_to_dict(s, 'server') for s in existing]
- instances = success + untouched
-
- results = {
- 'changed': changed,
- 'action': 'create',
- 'instances': instances,
- 'success': success,
- 'error': error,
- 'timeout': timeout,
- 'instance_ids': {
- 'instances': [i['id'] for i in instances],
- 'success': [i['id'] for i in success],
- 'error': [i['id'] for i in error],
- 'timeout': [i['id'] for i in timeout]
- }
- }
-
- if timeout:
- results['msg'] = 'Timeout waiting for all servers to build'
- elif error:
- results['msg'] = 'Failed to build all servers'
-
- if 'msg' in results:
- module.fail_json(**results)
- else:
- module.exit_json(**results)
-
-
-def delete(module, instance_ids=None, wait=True, wait_timeout=300, kept=None):
- instance_ids = [] if instance_ids is None else instance_ids
- kept = [] if kept is None else kept
-
- cs = pyrax.cloudservers
-
- changed = False
- instances = {}
- servers = []
-
- for instance_id in instance_ids:
- servers.append(cs.servers.get(instance_id))
-
- for server in servers:
- try:
- server.delete()
- except Exception as e:
- module.fail_json(msg=e.message)
- else:
- changed = True
-
- instance = rax_to_dict(server, 'server')
- instances[instance['id']] = instance
-
- # If requested, wait for server deletion
- if wait:
- end_time = time.time() + wait_timeout
- infinite = wait_timeout == 0
- while infinite or time.time() < end_time:
- for server in servers:
- instance_id = server.id
- try:
- server.get()
- except Exception:
- instances[instance_id]['status'] = 'DELETED'
- instances[instance_id]['rax_status'] = 'DELETED'
-
- if not filter(lambda s: s['status'] not in ('', 'DELETED',
- 'ERROR'),
- instances.values()):
- break
-
- time.sleep(5)
-
- timeout = filter(lambda s: s['status'] not in ('', 'DELETED', 'ERROR'),
- instances.values())
- error = filter(lambda s: s['status'] in ('ERROR'),
- instances.values())
- success = filter(lambda s: s['status'] in ('', 'DELETED'),
- instances.values())
-
- instances = [rax_to_dict(s, 'server') for s in kept]
-
- results = {
- 'changed': changed,
- 'action': 'delete',
- 'instances': instances,
- 'success': success,
- 'error': error,
- 'timeout': timeout,
- 'instance_ids': {
- 'instances': [i['id'] for i in instances],
- 'success': [i['id'] for i in success],
- 'error': [i['id'] for i in error],
- 'timeout': [i['id'] for i in timeout]
- }
- }
-
- if timeout:
- results['msg'] = 'Timeout waiting for all servers to delete'
- elif error:
- results['msg'] = 'Failed to delete all servers'
-
- if 'msg' in results:
- module.fail_json(**results)
- else:
- module.exit_json(**results)
-
-
-def cloudservers(module, state=None, name=None, flavor=None, image=None,
- meta=None, key_name=None, files=None, wait=True, wait_timeout=300,
- disk_config=None, count=1, group=None, instance_ids=None,
- exact_count=False, networks=None, count_offset=0,
- auto_increment=False, extra_create_args=None, user_data=None,
- config_drive=False, boot_from_volume=False,
- boot_volume=None, boot_volume_size=None,
- boot_volume_terminate=False):
- meta = {} if meta is None else meta
- files = {} if files is None else files
- instance_ids = [] if instance_ids is None else instance_ids
- networks = [] if networks is None else networks
- extra_create_args = {} if extra_create_args is None else extra_create_args
-
- cs = pyrax.cloudservers
- cnw = pyrax.cloud_networks
- if not cnw:
- module.fail_json(msg='Failed to instantiate client. This '
- 'typically indicates an invalid region or an '
- 'incorrectly capitalized region name.')
-
- if state == 'present' or (state == 'absent' and instance_ids is None):
- if not boot_from_volume and not boot_volume and not image:
- module.fail_json(msg='image is required for the "rax" module')
-
- for arg, value in dict(name=name, flavor=flavor).items():
- if not value:
- module.fail_json(msg='%s is required for the "rax" module' %
- arg)
-
- if boot_from_volume and not image and not boot_volume:
- module.fail_json(msg='image or boot_volume are required for the '
- '"rax" with boot_from_volume')
-
- if boot_from_volume and image and not boot_volume_size:
- module.fail_json(msg='boot_volume_size is required for the "rax" '
- 'module with boot_from_volume and image')
-
- if boot_from_volume and image and boot_volume:
- image = None
-
- servers = []
-
- # Add the group meta key
- if group and 'group' not in meta:
- meta['group'] = group
- elif 'group' in meta and group is None:
- group = meta['group']
-
- # Normalize and ensure all metadata values are strings
- for k, v in meta.items():
- if isinstance(v, list):
- meta[k] = ','.join(['%s' % i for i in v])
- elif isinstance(v, dict):
- meta[k] = json.dumps(v)
- elif not isinstance(v, string_types):
- meta[k] = '%s' % v
-
- # When using state=absent with group, the absent block won't match the
- # names properly. Use the exact_count functionality to decrease the count
- # to the desired level
- was_absent = False
- if group is not None and state == 'absent':
- exact_count = True
- state = 'present'
- was_absent = True
-
- if image:
- image = rax_find_image(module, pyrax, image)
-
- nics = []
- if networks:
- for network in networks:
- nics.extend(rax_find_network(module, pyrax, network))
-
- # act on the state
- if state == 'present':
- # Idempotent ensurance of a specific count of servers
- if exact_count is not False:
- # See if we can find servers that match our options
- if group is None:
- module.fail_json(msg='"group" must be provided when using '
- '"exact_count"')
-
- if auto_increment:
- numbers = set()
-
- # See if the name is a printf like string, if not append
- # %d to the end
- try:
- name % 0
- except TypeError as e:
- if e.message.startswith('not all'):
- name = '%s%%d' % name
- else:
- module.fail_json(msg=e.message)
-
- # regex pattern to match printf formatting
- pattern = re.sub(r'%\d*[sd]', r'(\d+)', name)
- for server in cs.servers.list():
- # Ignore DELETED servers
- if server.status == 'DELETED':
- continue
- if server.metadata.get('group') == group:
- servers.append(server)
- match = re.search(pattern, server.name)
- if match:
- number = int(match.group(1))
- numbers.add(number)
-
- number_range = xrange(count_offset, count_offset + count)
- available_numbers = list(set(number_range)
- .difference(numbers))
- else: # Not auto incrementing
- for server in cs.servers.list():
- # Ignore DELETED servers
- if server.status == 'DELETED':
- continue
- if server.metadata.get('group') == group:
- servers.append(server)
- # available_numbers not needed here, we inspect auto_increment
- # again later
-
- # If state was absent but the count was changed,
- # assume we only wanted to remove that number of instances
- if was_absent:
- diff = len(servers) - count
- if diff < 0:
- count = 0
- else:
- count = diff
-
- if len(servers) > count:
- # We have more servers than we need, set state='absent'
- # and delete the extras, this should delete the oldest
- state = 'absent'
- kept = servers[:count]
- del servers[:count]
- instance_ids = []
- for server in servers:
- instance_ids.append(server.id)
- delete(module, instance_ids=instance_ids, wait=wait,
- wait_timeout=wait_timeout, kept=kept)
- elif len(servers) < count:
- # we have fewer servers than we need
- if auto_increment:
- # auto incrementing server numbers
- names = []
- name_slice = count - len(servers)
- numbers_to_use = available_numbers[:name_slice]
- for number in numbers_to_use:
- names.append(name % number)
- else:
- # We are not auto incrementing server numbers,
- # create a list of 'name' that matches how many we need
- names = [name] * (count - len(servers))
- else:
- # we have the right number of servers, just return info
- # about all of the matched servers
- instances = []
- instance_ids = []
- for server in servers:
- instances.append(rax_to_dict(server, 'server'))
- instance_ids.append(server.id)
- module.exit_json(changed=False, action=None,
- instances=instances,
- success=[], error=[], timeout=[],
- instance_ids={'instances': instance_ids,
- 'success': [], 'error': [],
- 'timeout': []})
- else: # not called with exact_count=True
- if group is not None:
- if auto_increment:
- # we are auto incrementing server numbers, but not with
- # exact_count
- numbers = set()
-
- # See if the name is a printf like string, if not append
- # %d to the end
- try:
- name % 0
- except TypeError as e:
- if e.message.startswith('not all'):
- name = '%s%%d' % name
- else:
- module.fail_json(msg=e.message)
-
- # regex pattern to match printf formatting
- pattern = re.sub(r'%\d*[sd]', r'(\d+)', name)
- for server in cs.servers.list():
- # Ignore DELETED servers
- if server.status == 'DELETED':
- continue
- if server.metadata.get('group') == group:
- servers.append(server)
- match = re.search(pattern, server.name)
- if match:
- number = int(match.group(1))
- numbers.add(number)
-
- number_range = xrange(count_offset,
- count_offset + count + len(numbers))
- available_numbers = list(set(number_range)
- .difference(numbers))
- names = []
- numbers_to_use = available_numbers[:count]
- for number in numbers_to_use:
- names.append(name % number)
- else:
- # Not auto incrementing
- names = [name] * count
- else:
- # No group was specified, and not using exact_count
- # Perform more simplistic matching
- search_opts = {
- 'name': '^%s$' % name,
- 'flavor': flavor
- }
- servers = []
- for server in cs.servers.list(search_opts=search_opts):
- # Ignore DELETED servers
- if server.status == 'DELETED':
- continue
-
- if not rax_find_server_image(module, server, image,
- boot_volume):
- continue
-
- # Ignore servers with non matching metadata
- if server.metadata != meta:
- continue
- servers.append(server)
-
- if len(servers) >= count:
- # We have more servers than were requested, don't do
- # anything. Not running with exact_count=True, so we assume
- # more is OK
- instances = []
- for server in servers:
- instances.append(rax_to_dict(server, 'server'))
-
- instance_ids = [i['id'] for i in instances]
- module.exit_json(changed=False, action=None,
- instances=instances, success=[], error=[],
- timeout=[],
- instance_ids={'instances': instance_ids,
- 'success': [], 'error': [],
- 'timeout': []})
-
- # We need more servers to reach out target, create names for
- # them, we aren't performing auto_increment here
- names = [name] * (count - len(servers))
-
- block_device_mapping_v2 = []
- if boot_from_volume:
- mapping = {
- 'boot_index': '0',
- 'delete_on_termination': boot_volume_terminate,
- 'destination_type': 'volume',
- }
- if image:
- mapping.update({
- 'uuid': image,
- 'source_type': 'image',
- 'volume_size': boot_volume_size,
- })
- image = None
- elif boot_volume:
- volume = rax_find_volume(module, pyrax, boot_volume)
- mapping.update({
- 'uuid': pyrax.utils.get_id(volume),
- 'source_type': 'volume',
- })
- block_device_mapping_v2.append(mapping)
-
- create(module, names=names, flavor=flavor, image=image,
- meta=meta, key_name=key_name, files=files, wait=wait,
- wait_timeout=wait_timeout, disk_config=disk_config, group=group,
- nics=nics, extra_create_args=extra_create_args,
- user_data=user_data, config_drive=config_drive,
- existing=servers,
- block_device_mapping_v2=block_device_mapping_v2)
-
- elif state == 'absent':
- if instance_ids is None:
- # We weren't given an explicit list of server IDs to delete
- # Let's match instead
- search_opts = {
- 'name': '^%s$' % name,
- 'flavor': flavor
- }
- for server in cs.servers.list(search_opts=search_opts):
- # Ignore DELETED servers
- if server.status == 'DELETED':
- continue
-
- if not rax_find_server_image(module, server, image,
- boot_volume):
- continue
-
- # Ignore servers with non matching metadata
- if meta != server.metadata:
- continue
-
- servers.append(server)
-
- # Build a list of server IDs to delete
- instance_ids = []
- for server in servers:
- if len(instance_ids) < count:
- instance_ids.append(server.id)
- else:
- break
-
- if not instance_ids:
- # No server IDs were matched for deletion, or no IDs were
- # explicitly provided, just exit and don't do anything
- module.exit_json(changed=False, action=None, instances=[],
- success=[], error=[], timeout=[],
- instance_ids={'instances': [],
- 'success': [], 'error': [],
- 'timeout': []})
-
- delete(module, instance_ids=instance_ids, wait=wait,
- wait_timeout=wait_timeout)
-
-
-def main():
- argument_spec = rax_argument_spec()
- argument_spec.update(
- dict(
- auto_increment=dict(default=True, type='bool'),
- boot_from_volume=dict(default=False, type='bool'),
- boot_volume=dict(type='str'),
- boot_volume_size=dict(type='int', default=100),
- boot_volume_terminate=dict(type='bool', default=False),
- config_drive=dict(default=False, type='bool'),
- count=dict(default=1, type='int'),
- count_offset=dict(default=1, type='int'),
- disk_config=dict(choices=['auto', 'manual']),
- exact_count=dict(default=False, type='bool'),
- extra_client_args=dict(type='dict', default={}),
- extra_create_args=dict(type='dict', default={}),
- files=dict(type='dict', default={}),
- flavor=dict(),
- group=dict(),
- image=dict(),
- instance_ids=dict(type='list', elements='str'),
- key_name=dict(aliases=['keypair']),
- meta=dict(type='dict', default={}),
- name=dict(),
- networks=dict(type='list', elements='str', default=['public', 'private']),
- state=dict(default='present', choices=['present', 'absent']),
- user_data=dict(no_log=True),
- wait=dict(default=False, type='bool'),
- wait_timeout=dict(default=300, type='int'),
- )
- )
-
- module = AnsibleModule(
- argument_spec=argument_spec,
- required_together=rax_required_together(),
- )
-
- if not HAS_PYRAX:
- module.fail_json(msg='pyrax is required for this module')
-
- auto_increment = module.params.get('auto_increment')
- boot_from_volume = module.params.get('boot_from_volume')
- boot_volume = module.params.get('boot_volume')
- boot_volume_size = module.params.get('boot_volume_size')
- boot_volume_terminate = module.params.get('boot_volume_terminate')
- config_drive = module.params.get('config_drive')
- count = module.params.get('count')
- count_offset = module.params.get('count_offset')
- disk_config = module.params.get('disk_config')
- if disk_config:
- disk_config = disk_config.upper()
- exact_count = module.params.get('exact_count', False)
- extra_client_args = module.params.get('extra_client_args')
- extra_create_args = module.params.get('extra_create_args')
- files = module.params.get('files')
- flavor = module.params.get('flavor')
- group = module.params.get('group')
- image = module.params.get('image')
- instance_ids = module.params.get('instance_ids')
- key_name = module.params.get('key_name')
- meta = module.params.get('meta')
- name = module.params.get('name')
- networks = module.params.get('networks')
- state = module.params.get('state')
- user_data = module.params.get('user_data')
- wait = module.params.get('wait')
- wait_timeout = int(module.params.get('wait_timeout'))
-
- setup_rax_module(module, pyrax)
-
- if extra_client_args:
- pyrax.cloudservers = pyrax.connect_to_cloudservers(
- region=pyrax.cloudservers.client.region_name,
- **extra_client_args)
- client = pyrax.cloudservers.client
- if 'bypass_url' in extra_client_args:
- client.management_url = extra_client_args['bypass_url']
-
- if pyrax.cloudservers is None:
- module.fail_json(msg='Failed to instantiate client. This '
- 'typically indicates an invalid region or an '
- 'incorrectly capitalized region name.')
-
- cloudservers(module, state=state, name=name, flavor=flavor,
- image=image, meta=meta, key_name=key_name, files=files,
- wait=wait, wait_timeout=wait_timeout, disk_config=disk_config,
- count=count, group=group, instance_ids=instance_ids,
- exact_count=exact_count, networks=networks,
- count_offset=count_offset, auto_increment=auto_increment,
- extra_create_args=extra_create_args, user_data=user_data,
- config_drive=config_drive, boot_from_volume=boot_from_volume,
- boot_volume=boot_volume, boot_volume_size=boot_volume_size,
- boot_volume_terminate=boot_volume_terminate)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/rax_cbs.py b/ansible_collections/community/general/plugins/modules/rax_cbs.py
deleted file mode 100644
index 77e7cebad..000000000
--- a/ansible_collections/community/general/plugins/modules/rax_cbs.py
+++ /dev/null
@@ -1,235 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-# Copyright Ansible Project
-# 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: rax_cbs
-short_description: Manipulate Rackspace Cloud Block Storage Volumes
-description:
- - Manipulate Rackspace Cloud Block Storage Volumes
-attributes:
- check_mode:
- support: none
- diff_mode:
- support: none
-options:
- description:
- type: str
- description:
- - Description to give the volume being created.
- image:
- type: str
- description:
- - Image to use for bootable volumes. Can be an C(id), C(human_id) or
- C(name). This option requires C(pyrax>=1.9.3).
- meta:
- type: dict
- default: {}
- description:
- - A hash of metadata to associate with the volume.
- name:
- type: str
- description:
- - Name to give the volume being created.
- required: true
- size:
- type: int
- description:
- - Size of the volume to create in Gigabytes.
- default: 100
- snapshot_id:
- type: str
- description:
- - The id of the snapshot to create the volume from.
- state:
- type: str
- description:
- - Indicate desired state of the resource.
- choices:
- - present
- - absent
- default: present
- volume_type:
- type: str
- description:
- - Type of the volume being created.
- choices:
- - SATA
- - SSD
- default: SATA
- wait:
- description:
- - Wait for the volume to be in state C(available) before returning.
- type: bool
- default: false
- wait_timeout:
- type: int
- description:
- - how long before wait gives up, in seconds.
- default: 300
-author:
- - "Christopher H. Laco (@claco)"
- - "Matt Martz (@sivel)"
-extends_documentation_fragment:
- - community.general.rackspace.openstack
- - community.general.attributes
-
-'''
-
-EXAMPLES = '''
-- name: Build a Block Storage Volume
- gather_facts: false
- hosts: local
- connection: local
- tasks:
- - name: Storage volume create request
- local_action:
- module: rax_cbs
- credentials: ~/.raxpub
- name: my-volume
- description: My Volume
- volume_type: SSD
- size: 150
- region: DFW
- wait: true
- state: present
- meta:
- app: my-cool-app
- register: my_volume
-'''
-
-from ansible_collections.community.general.plugins.module_utils.version import LooseVersion
-
-try:
- import pyrax
- HAS_PYRAX = True
-except ImportError:
- HAS_PYRAX = False
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.community.general.plugins.module_utils.rax import (VOLUME_STATUS, rax_argument_spec, rax_find_image, rax_find_volume,
- rax_required_together, rax_to_dict, setup_rax_module)
-
-
-def cloud_block_storage(module, state, name, description, meta, size,
- snapshot_id, volume_type, wait, wait_timeout,
- image):
- changed = False
- volume = None
- instance = {}
-
- cbs = pyrax.cloud_blockstorage
-
- if cbs is None:
- module.fail_json(msg='Failed to instantiate client. This '
- 'typically indicates an invalid region or an '
- 'incorrectly capitalized region name.')
-
- if image:
- # pyrax<1.9.3 did not have support for specifying an image when
- # creating a volume which is required for bootable volumes
- if LooseVersion(pyrax.version.version) < LooseVersion('1.9.3'):
- module.fail_json(msg='Creating a bootable volume requires '
- 'pyrax>=1.9.3')
- image = rax_find_image(module, pyrax, image)
-
- volume = rax_find_volume(module, pyrax, name)
-
- if state == 'present':
- if not volume:
- kwargs = dict()
- if image:
- kwargs['image'] = image
- try:
- volume = cbs.create(name, size=size, volume_type=volume_type,
- description=description,
- metadata=meta,
- snapshot_id=snapshot_id, **kwargs)
- changed = True
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
- else:
- if wait:
- attempts = wait_timeout // 5
- pyrax.utils.wait_for_build(volume, interval=5,
- attempts=attempts)
-
- volume.get()
- instance = rax_to_dict(volume)
-
- result = dict(changed=changed, volume=instance)
-
- if volume.status == 'error':
- result['msg'] = '%s failed to build' % volume.id
- elif wait and volume.status not in VOLUME_STATUS:
- result['msg'] = 'Timeout waiting on %s' % volume.id
-
- if 'msg' in result:
- module.fail_json(**result)
- else:
- module.exit_json(**result)
-
- elif state == 'absent':
- if volume:
- instance = rax_to_dict(volume)
- try:
- volume.delete()
- changed = True
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
-
- module.exit_json(changed=changed, volume=instance)
-
-
-def main():
- argument_spec = rax_argument_spec()
- argument_spec.update(
- dict(
- description=dict(type='str'),
- image=dict(type='str'),
- meta=dict(type='dict', default={}),
- name=dict(required=True),
- size=dict(type='int', default=100),
- snapshot_id=dict(),
- state=dict(default='present', choices=['present', 'absent']),
- volume_type=dict(choices=['SSD', 'SATA'], default='SATA'),
- wait=dict(type='bool', default=False),
- wait_timeout=dict(type='int', default=300)
- )
- )
-
- module = AnsibleModule(
- argument_spec=argument_spec,
- required_together=rax_required_together()
- )
-
- if not HAS_PYRAX:
- module.fail_json(msg='pyrax is required for this module')
-
- description = module.params.get('description')
- image = module.params.get('image')
- meta = module.params.get('meta')
- name = module.params.get('name')
- size = module.params.get('size')
- snapshot_id = module.params.get('snapshot_id')
- state = module.params.get('state')
- volume_type = module.params.get('volume_type')
- wait = module.params.get('wait')
- wait_timeout = module.params.get('wait_timeout')
-
- setup_rax_module(module, pyrax)
-
- cloud_block_storage(module, state, name, description, meta, size,
- snapshot_id, volume_type, wait, wait_timeout,
- image)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/rax_cbs_attachments.py b/ansible_collections/community/general/plugins/modules/rax_cbs_attachments.py
deleted file mode 100644
index 00b860a90..000000000
--- a/ansible_collections/community/general/plugins/modules/rax_cbs_attachments.py
+++ /dev/null
@@ -1,226 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-# Copyright Ansible Project
-# 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: rax_cbs_attachments
-short_description: Manipulate Rackspace Cloud Block Storage Volume Attachments
-description:
- - Manipulate Rackspace Cloud Block Storage Volume Attachments
-attributes:
- check_mode:
- support: none
- diff_mode:
- support: none
-options:
- device:
- type: str
- description:
- - The device path to attach the volume to, e.g. /dev/xvde.
- - Before 2.4 this was a required field. Now it can be left to null to auto assign the device name.
- volume:
- type: str
- description:
- - Name or id of the volume to attach/detach
- required: true
- server:
- type: str
- description:
- - Name or id of the server to attach/detach
- required: true
- state:
- type: str
- description:
- - Indicate desired state of the resource
- choices:
- - present
- - absent
- default: present
- wait:
- description:
- - wait for the volume to be in 'in-use'/'available' state before returning
- type: bool
- default: false
- wait_timeout:
- type: int
- description:
- - how long before wait gives up, in seconds
- default: 300
-author:
- - "Christopher H. Laco (@claco)"
- - "Matt Martz (@sivel)"
-extends_documentation_fragment:
- - community.general.rackspace.openstack
- - community.general.attributes
-
-'''
-
-EXAMPLES = '''
-- name: Attach a Block Storage Volume
- gather_facts: false
- hosts: local
- connection: local
- tasks:
- - name: Storage volume attach request
- local_action:
- module: rax_cbs_attachments
- credentials: ~/.raxpub
- volume: my-volume
- server: my-server
- device: /dev/xvdd
- region: DFW
- wait: true
- state: present
- register: my_volume
-'''
-
-try:
- import pyrax
- HAS_PYRAX = True
-except ImportError:
- HAS_PYRAX = False
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.community.general.plugins.module_utils.rax import (NON_CALLABLES,
- rax_argument_spec,
- rax_find_server,
- rax_find_volume,
- rax_required_together,
- rax_to_dict,
- setup_rax_module,
- )
-
-
-def cloud_block_storage_attachments(module, state, volume, server, device,
- wait, wait_timeout):
- cbs = pyrax.cloud_blockstorage
- cs = pyrax.cloudservers
-
- if cbs is None or cs is None:
- module.fail_json(msg='Failed to instantiate client. This '
- 'typically indicates an invalid region or an '
- 'incorrectly capitalized region name.')
-
- changed = False
- instance = {}
-
- volume = rax_find_volume(module, pyrax, volume)
-
- if not volume:
- module.fail_json(msg='No matching storage volumes were found')
-
- if state == 'present':
- server = rax_find_server(module, pyrax, server)
-
- if (volume.attachments and
- volume.attachments[0]['server_id'] == server.id):
- changed = False
- elif volume.attachments:
- module.fail_json(msg='Volume is attached to another server')
- else:
- try:
- volume.attach_to_instance(server, mountpoint=device)
- changed = True
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
-
- volume.get()
-
- for key, value in vars(volume).items():
- if (isinstance(value, NON_CALLABLES) and
- not key.startswith('_')):
- instance[key] = value
-
- result = dict(changed=changed)
-
- if volume.status == 'error':
- result['msg'] = '%s failed to build' % volume.id
- elif wait:
- attempts = wait_timeout // 5
- pyrax.utils.wait_until(volume, 'status', 'in-use',
- interval=5, attempts=attempts)
-
- volume.get()
- result['volume'] = rax_to_dict(volume)
-
- if 'msg' in result:
- module.fail_json(**result)
- else:
- module.exit_json(**result)
-
- elif state == 'absent':
- server = rax_find_server(module, pyrax, server)
-
- if (volume.attachments and
- volume.attachments[0]['server_id'] == server.id):
- try:
- volume.detach()
- if wait:
- pyrax.utils.wait_until(volume, 'status', 'available',
- interval=3, attempts=0,
- verbose=False)
- changed = True
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
-
- volume.get()
- changed = True
- elif volume.attachments:
- module.fail_json(msg='Volume is attached to another server')
-
- result = dict(changed=changed, volume=rax_to_dict(volume))
-
- if volume.status == 'error':
- result['msg'] = '%s failed to build' % volume.id
-
- if 'msg' in result:
- module.fail_json(**result)
- else:
- module.exit_json(**result)
-
- module.exit_json(changed=changed, volume=instance)
-
-
-def main():
- argument_spec = rax_argument_spec()
- argument_spec.update(
- dict(
- device=dict(required=False),
- volume=dict(required=True),
- server=dict(required=True),
- state=dict(default='present', choices=['present', 'absent']),
- wait=dict(type='bool', default=False),
- wait_timeout=dict(type='int', default=300)
- )
- )
-
- module = AnsibleModule(
- argument_spec=argument_spec,
- required_together=rax_required_together()
- )
-
- if not HAS_PYRAX:
- module.fail_json(msg='pyrax is required for this module')
-
- device = module.params.get('device')
- volume = module.params.get('volume')
- server = module.params.get('server')
- state = module.params.get('state')
- wait = module.params.get('wait')
- wait_timeout = module.params.get('wait_timeout')
-
- setup_rax_module(module, pyrax)
-
- cloud_block_storage_attachments(module, state, volume, server, device,
- wait, wait_timeout)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/rax_cdb.py b/ansible_collections/community/general/plugins/modules/rax_cdb.py
deleted file mode 100644
index 9538579fa..000000000
--- a/ansible_collections/community/general/plugins/modules/rax_cdb.py
+++ /dev/null
@@ -1,266 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-# Copyright Ansible Project
-# 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: rax_cdb
-short_description: Create/delete or resize a Rackspace Cloud Databases instance
-description:
- - creates / deletes or resize a Rackspace Cloud Databases instance
- and optionally waits for it to be 'running'. The name option needs to be
- unique since it's used to identify the instance.
-attributes:
- check_mode:
- support: none
- diff_mode:
- support: none
-options:
- name:
- type: str
- description:
- - Name of the databases server instance
- required: true
- flavor:
- type: int
- description:
- - flavor to use for the instance 1 to 6 (i.e. 512MB to 16GB)
- default: 1
- volume:
- type: int
- description:
- - Volume size of the database 1-150GB
- default: 2
- cdb_type:
- type: str
- description:
- - type of instance (i.e. MySQL, MariaDB, Percona)
- default: MySQL
- aliases: ['type']
- cdb_version:
- type: str
- description:
- - version of database (MySQL supports 5.1 and 5.6, MariaDB supports 10, Percona supports 5.6)
- - "The available choices are: V(5.1), V(5.6) and V(10)."
- default: '5.6'
- aliases: ['version']
- state:
- type: str
- description:
- - Indicate desired state of the resource
- choices: ['present', 'absent']
- default: present
- wait:
- description:
- - wait for the instance to be in state 'running' before returning
- type: bool
- default: false
- wait_timeout:
- type: int
- description:
- - how long before wait gives up, in seconds
- default: 300
-author: "Simon JAILLET (@jails)"
-extends_documentation_fragment:
- - community.general.rackspace
- - community.general.rackspace.openstack
- - community.general.attributes
-
-'''
-
-EXAMPLES = '''
-- name: Build a Cloud Databases
- gather_facts: false
- tasks:
- - name: Server build request
- local_action:
- module: rax_cdb
- credentials: ~/.raxpub
- region: IAD
- name: db-server1
- flavor: 1
- volume: 2
- cdb_type: MySQL
- cdb_version: 5.6
- wait: true
- state: present
- register: rax_db_server
-'''
-
-try:
- import pyrax
- HAS_PYRAX = True
-except ImportError:
- HAS_PYRAX = False
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.community.general.plugins.module_utils.rax import rax_argument_spec, rax_required_together, rax_to_dict, setup_rax_module
-
-
-def find_instance(name):
-
- cdb = pyrax.cloud_databases
- instances = cdb.list()
- if instances:
- for instance in instances:
- if instance.name == name:
- return instance
- return False
-
-
-def save_instance(module, name, flavor, volume, cdb_type, cdb_version, wait,
- wait_timeout):
-
- for arg, value in dict(name=name, flavor=flavor,
- volume=volume, type=cdb_type, version=cdb_version
- ).items():
- if not value:
- module.fail_json(msg='%s is required for the "rax_cdb"'
- ' module' % arg)
-
- if not (volume >= 1 and volume <= 150):
- module.fail_json(msg='volume is required to be between 1 and 150')
-
- cdb = pyrax.cloud_databases
-
- flavors = []
- for item in cdb.list_flavors():
- flavors.append(item.id)
-
- if not (flavor in flavors):
- module.fail_json(msg='unexisting flavor reference "%s"' % str(flavor))
-
- changed = False
-
- instance = find_instance(name)
-
- if not instance:
- action = 'create'
- try:
- instance = cdb.create(name=name, flavor=flavor, volume=volume,
- type=cdb_type, version=cdb_version)
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
- else:
- changed = True
-
- else:
- action = None
-
- if instance.volume.size != volume:
- action = 'resize'
- if instance.volume.size > volume:
- module.fail_json(changed=False, action=action,
- msg='The new volume size must be larger than '
- 'the current volume size',
- cdb=rax_to_dict(instance))
- instance.resize_volume(volume)
- changed = True
-
- if int(instance.flavor.id) != flavor:
- action = 'resize'
- pyrax.utils.wait_until(instance, 'status', 'ACTIVE',
- attempts=wait_timeout)
- instance.resize(flavor)
- changed = True
-
- if wait:
- pyrax.utils.wait_until(instance, 'status', 'ACTIVE',
- attempts=wait_timeout)
-
- if wait and instance.status != 'ACTIVE':
- module.fail_json(changed=changed, action=action,
- cdb=rax_to_dict(instance),
- msg='Timeout waiting for "%s" databases instance to '
- 'be created' % name)
-
- module.exit_json(changed=changed, action=action, cdb=rax_to_dict(instance))
-
-
-def delete_instance(module, name, wait, wait_timeout):
-
- if not name:
- module.fail_json(msg='name is required for the "rax_cdb" module')
-
- changed = False
-
- instance = find_instance(name)
- if not instance:
- module.exit_json(changed=False, action='delete')
-
- try:
- instance.delete()
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
- else:
- changed = True
-
- if wait:
- pyrax.utils.wait_until(instance, 'status', 'SHUTDOWN',
- attempts=wait_timeout)
-
- if wait and instance.status != 'SHUTDOWN':
- module.fail_json(changed=changed, action='delete',
- cdb=rax_to_dict(instance),
- msg='Timeout waiting for "%s" databases instance to '
- 'be deleted' % name)
-
- module.exit_json(changed=changed, action='delete',
- cdb=rax_to_dict(instance))
-
-
-def rax_cdb(module, state, name, flavor, volume, cdb_type, cdb_version, wait,
- wait_timeout):
-
- # act on the state
- if state == 'present':
- save_instance(module, name, flavor, volume, cdb_type, cdb_version, wait,
- wait_timeout)
- elif state == 'absent':
- delete_instance(module, name, wait, wait_timeout)
-
-
-def main():
- argument_spec = rax_argument_spec()
- argument_spec.update(
- dict(
- name=dict(type='str', required=True),
- flavor=dict(type='int', default=1),
- volume=dict(type='int', default=2),
- cdb_type=dict(type='str', default='MySQL', aliases=['type']),
- cdb_version=dict(type='str', default='5.6', aliases=['version']),
- state=dict(default='present', choices=['present', 'absent']),
- wait=dict(type='bool', default=False),
- wait_timeout=dict(type='int', default=300),
- )
- )
-
- module = AnsibleModule(
- argument_spec=argument_spec,
- required_together=rax_required_together(),
- )
-
- if not HAS_PYRAX:
- module.fail_json(msg='pyrax is required for this module')
-
- name = module.params.get('name')
- flavor = module.params.get('flavor')
- volume = module.params.get('volume')
- cdb_type = module.params.get('cdb_type')
- cdb_version = module.params.get('cdb_version')
- state = module.params.get('state')
- wait = module.params.get('wait')
- wait_timeout = module.params.get('wait_timeout')
-
- setup_rax_module(module, pyrax)
- rax_cdb(module, state, name, flavor, volume, cdb_type, cdb_version, wait, wait_timeout)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/rax_cdb_database.py b/ansible_collections/community/general/plugins/modules/rax_cdb_database.py
deleted file mode 100644
index b0db11814..000000000
--- a/ansible_collections/community/general/plugins/modules/rax_cdb_database.py
+++ /dev/null
@@ -1,179 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-# Copyright Ansible Project
-# 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: rax_cdb_database
-short_description: Create / delete a database in the Cloud Databases
-description:
- - create / delete a database in the Cloud Databases.
-attributes:
- check_mode:
- support: none
- diff_mode:
- support: none
-options:
- cdb_id:
- type: str
- description:
- - The databases server UUID
- required: true
- name:
- type: str
- description:
- - Name to give to the database
- required: true
- character_set:
- type: str
- description:
- - Set of symbols and encodings
- default: 'utf8'
- collate:
- type: str
- description:
- - Set of rules for comparing characters in a character set
- default: 'utf8_general_ci'
- state:
- type: str
- description:
- - Indicate desired state of the resource
- choices: ['present', 'absent']
- default: present
-author: "Simon JAILLET (@jails)"
-extends_documentation_fragment:
- - community.general.rackspace
- - community.general.rackspace.openstack
- - community.general.attributes
-
-'''
-
-EXAMPLES = '''
-- name: Build a database in Cloud Databases
- tasks:
- - name: Database build request
- local_action:
- module: rax_cdb_database
- credentials: ~/.raxpub
- region: IAD
- cdb_id: 323e7ce0-9cb0-11e3-a5e2-0800200c9a66
- name: db1
- state: present
- register: rax_db_database
-'''
-
-try:
- import pyrax
- HAS_PYRAX = True
-except ImportError:
- HAS_PYRAX = False
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.community.general.plugins.module_utils.rax import rax_argument_spec, rax_required_together, rax_to_dict, setup_rax_module
-
-
-def find_database(instance, name):
- try:
- database = instance.get_database(name)
- except Exception:
- return False
-
- return database
-
-
-def save_database(module, cdb_id, name, character_set, collate):
- cdb = pyrax.cloud_databases
-
- try:
- instance = cdb.get(cdb_id)
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
-
- changed = False
-
- database = find_database(instance, name)
-
- if not database:
- try:
- database = instance.create_database(name=name,
- character_set=character_set,
- collate=collate)
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
- else:
- changed = True
-
- module.exit_json(changed=changed, action='create',
- database=rax_to_dict(database))
-
-
-def delete_database(module, cdb_id, name):
- cdb = pyrax.cloud_databases
-
- try:
- instance = cdb.get(cdb_id)
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
-
- changed = False
-
- database = find_database(instance, name)
-
- if database:
- try:
- database.delete()
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
- else:
- changed = True
-
- module.exit_json(changed=changed, action='delete',
- database=rax_to_dict(database))
-
-
-def rax_cdb_database(module, state, cdb_id, name, character_set, collate):
-
- # act on the state
- if state == 'present':
- save_database(module, cdb_id, name, character_set, collate)
- elif state == 'absent':
- delete_database(module, cdb_id, name)
-
-
-def main():
- argument_spec = rax_argument_spec()
- argument_spec.update(
- dict(
- cdb_id=dict(type='str', required=True),
- name=dict(type='str', required=True),
- character_set=dict(type='str', default='utf8'),
- collate=dict(type='str', default='utf8_general_ci'),
- state=dict(default='present', choices=['present', 'absent'])
- )
- )
-
- module = AnsibleModule(
- argument_spec=argument_spec,
- required_together=rax_required_together(),
- )
-
- if not HAS_PYRAX:
- module.fail_json(msg='pyrax is required for this module')
-
- cdb_id = module.params.get('cdb_id')
- name = module.params.get('name')
- character_set = module.params.get('character_set')
- collate = module.params.get('collate')
- state = module.params.get('state')
-
- setup_rax_module(module, pyrax)
- rax_cdb_database(module, state, cdb_id, name, character_set, collate)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/rax_cdb_user.py b/ansible_collections/community/general/plugins/modules/rax_cdb_user.py
deleted file mode 100644
index 6ee86c4fe..000000000
--- a/ansible_collections/community/general/plugins/modules/rax_cdb_user.py
+++ /dev/null
@@ -1,227 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-# Copyright Ansible Project
-# 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: rax_cdb_user
-short_description: Create / delete a Rackspace Cloud Database
-description:
- - create / delete a database in the Cloud Databases.
-attributes:
- check_mode:
- support: none
- diff_mode:
- support: none
-options:
- cdb_id:
- type: str
- description:
- - The databases server UUID
- required: true
- db_username:
- type: str
- description:
- - Name of the database user
- required: true
- db_password:
- type: str
- description:
- - Database user password
- required: true
- databases:
- type: list
- elements: str
- description:
- - Name of the databases that the user can access
- default: []
- host:
- type: str
- description:
- - Specifies the host from which a user is allowed to connect to
- the database. Possible values are a string containing an IPv4 address
- or "%" to allow connecting from any host
- default: '%'
- state:
- type: str
- description:
- - Indicate desired state of the resource
- choices: ['present', 'absent']
- default: present
-author: "Simon JAILLET (@jails)"
-extends_documentation_fragment:
- - community.general.rackspace
- - community.general.rackspace.openstack
- - community.general.attributes
-
-'''
-
-EXAMPLES = '''
-- name: Build a user in Cloud Databases
- tasks:
- - name: User build request
- local_action:
- module: rax_cdb_user
- credentials: ~/.raxpub
- region: IAD
- cdb_id: 323e7ce0-9cb0-11e3-a5e2-0800200c9a66
- db_username: user1
- db_password: user1
- databases: ['db1']
- state: present
- register: rax_db_user
-'''
-
-try:
- import pyrax
- HAS_PYRAX = True
-except ImportError:
- HAS_PYRAX = False
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_text
-from ansible_collections.community.general.plugins.module_utils.rax import rax_argument_spec, rax_required_together, rax_to_dict, setup_rax_module
-
-
-def find_user(instance, name):
- try:
- user = instance.get_user(name)
- except Exception:
- return False
-
- return user
-
-
-def save_user(module, cdb_id, name, password, databases, host):
-
- for arg, value in dict(cdb_id=cdb_id, name=name).items():
- if not value:
- module.fail_json(msg='%s is required for the "rax_cdb_user" '
- 'module' % arg)
-
- cdb = pyrax.cloud_databases
-
- try:
- instance = cdb.get(cdb_id)
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
-
- changed = False
-
- user = find_user(instance, name)
-
- if not user:
- action = 'create'
- try:
- user = instance.create_user(name=name,
- password=password,
- database_names=databases,
- host=host)
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
- else:
- changed = True
- else:
- action = 'update'
-
- if user.host != host:
- changed = True
-
- user.update(password=password, host=host)
-
- former_dbs = set([item.name for item in user.list_user_access()])
- databases = set(databases)
-
- if databases != former_dbs:
- try:
- revoke_dbs = [db for db in former_dbs if db not in databases]
- user.revoke_user_access(db_names=revoke_dbs)
-
- new_dbs = [db for db in databases if db not in former_dbs]
- user.grant_user_access(db_names=new_dbs)
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
- else:
- changed = True
-
- module.exit_json(changed=changed, action=action, user=rax_to_dict(user))
-
-
-def delete_user(module, cdb_id, name):
-
- for arg, value in dict(cdb_id=cdb_id, name=name).items():
- if not value:
- module.fail_json(msg='%s is required for the "rax_cdb_user"'
- ' module' % arg)
-
- cdb = pyrax.cloud_databases
-
- try:
- instance = cdb.get(cdb_id)
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
-
- changed = False
-
- user = find_user(instance, name)
-
- if user:
- try:
- user.delete()
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
- else:
- changed = True
-
- module.exit_json(changed=changed, action='delete')
-
-
-def rax_cdb_user(module, state, cdb_id, name, password, databases, host):
-
- # act on the state
- if state == 'present':
- save_user(module, cdb_id, name, password, databases, host)
- elif state == 'absent':
- delete_user(module, cdb_id, name)
-
-
-def main():
- argument_spec = rax_argument_spec()
- argument_spec.update(
- dict(
- cdb_id=dict(type='str', required=True),
- db_username=dict(type='str', required=True),
- db_password=dict(type='str', required=True, no_log=True),
- databases=dict(type='list', elements='str', default=[]),
- host=dict(type='str', default='%'),
- state=dict(default='present', choices=['present', 'absent'])
- )
- )
-
- module = AnsibleModule(
- argument_spec=argument_spec,
- required_together=rax_required_together(),
- )
-
- if not HAS_PYRAX:
- module.fail_json(msg='pyrax is required for this module')
-
- cdb_id = module.params.get('cdb_id')
- name = module.params.get('db_username')
- password = module.params.get('db_password')
- databases = module.params.get('databases')
- host = to_text(module.params.get('host'), errors='surrogate_or_strict')
- state = module.params.get('state')
-
- setup_rax_module(module, pyrax)
- rax_cdb_user(module, state, cdb_id, name, password, databases, host)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/rax_clb.py b/ansible_collections/community/general/plugins/modules/rax_clb.py
deleted file mode 100644
index 23c795f39..000000000
--- a/ansible_collections/community/general/plugins/modules/rax_clb.py
+++ /dev/null
@@ -1,320 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-# Copyright Ansible Project
-# 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: rax_clb
-short_description: Create / delete a load balancer in Rackspace Public Cloud
-description:
- - creates / deletes a Rackspace Public Cloud load balancer.
-attributes:
- check_mode:
- support: none
- diff_mode:
- support: none
-options:
- algorithm:
- type: str
- description:
- - algorithm for the balancer being created
- choices:
- - RANDOM
- - LEAST_CONNECTIONS
- - ROUND_ROBIN
- - WEIGHTED_LEAST_CONNECTIONS
- - WEIGHTED_ROUND_ROBIN
- default: LEAST_CONNECTIONS
- meta:
- type: dict
- default: {}
- description:
- - A hash of metadata to associate with the instance
- name:
- type: str
- description:
- - Name to give the load balancer
- required: true
- port:
- type: int
- description:
- - Port for the balancer being created
- default: 80
- protocol:
- type: str
- description:
- - Protocol for the balancer being created
- choices:
- - DNS_TCP
- - DNS_UDP
- - FTP
- - HTTP
- - HTTPS
- - IMAPS
- - IMAPv4
- - LDAP
- - LDAPS
- - MYSQL
- - POP3
- - POP3S
- - SMTP
- - TCP
- - TCP_CLIENT_FIRST
- - UDP
- - UDP_STREAM
- - SFTP
- default: HTTP
- state:
- type: str
- description:
- - Indicate desired state of the resource
- choices:
- - present
- - absent
- default: present
- timeout:
- type: int
- description:
- - timeout for communication between the balancer and the node
- default: 30
- type:
- type: str
- description:
- - type of interface for the balancer being created
- choices:
- - PUBLIC
- - SERVICENET
- default: PUBLIC
- vip_id:
- type: str
- description:
- - Virtual IP ID to use when creating the load balancer for purposes of
- sharing an IP with another load balancer of another protocol
- wait:
- description:
- - wait for the balancer to be in state 'running' before returning
- type: bool
- default: false
- wait_timeout:
- type: int
- description:
- - how long before wait gives up, in seconds
- default: 300
-author:
- - "Christopher H. Laco (@claco)"
- - "Matt Martz (@sivel)"
-extends_documentation_fragment:
- - community.general.rackspace
- - community.general.rackspace.openstack
- - community.general.attributes
-
-'''
-
-EXAMPLES = '''
-- name: Build a Load Balancer
- gather_facts: false
- hosts: local
- connection: local
- tasks:
- - name: Load Balancer create request
- local_action:
- module: rax_clb
- credentials: ~/.raxpub
- name: my-lb
- port: 8080
- protocol: HTTP
- type: SERVICENET
- timeout: 30
- region: DFW
- wait: true
- state: present
- meta:
- app: my-cool-app
- register: my_lb
-'''
-
-
-try:
- import pyrax
- HAS_PYRAX = True
-except ImportError:
- HAS_PYRAX = False
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.community.general.plugins.module_utils.rax import (CLB_ALGORITHMS,
- CLB_PROTOCOLS,
- rax_argument_spec,
- rax_required_together,
- rax_to_dict,
- setup_rax_module,
- )
-
-
-def cloud_load_balancer(module, state, name, meta, algorithm, port, protocol,
- vip_type, timeout, wait, wait_timeout, vip_id):
- if int(timeout) < 30:
- module.fail_json(msg='"timeout" must be greater than or equal to 30')
-
- changed = False
- balancers = []
-
- clb = pyrax.cloud_loadbalancers
- if not clb:
- module.fail_json(msg='Failed to instantiate client. This '
- 'typically indicates an invalid region or an '
- 'incorrectly capitalized region name.')
-
- balancer_list = clb.list()
- while balancer_list:
- retrieved = clb.list(marker=balancer_list.pop().id)
- balancer_list.extend(retrieved)
- if len(retrieved) < 2:
- break
-
- for balancer in balancer_list:
- if name != balancer.name and name != balancer.id:
- continue
-
- balancers.append(balancer)
-
- if len(balancers) > 1:
- module.fail_json(msg='Multiple Load Balancers were matched by name, '
- 'try using the Load Balancer ID instead')
-
- if state == 'present':
- if isinstance(meta, dict):
- metadata = [dict(key=k, value=v) for k, v in meta.items()]
-
- if not balancers:
- try:
- virtual_ips = [clb.VirtualIP(type=vip_type, id=vip_id)]
- balancer = clb.create(name, metadata=metadata, port=port,
- algorithm=algorithm, protocol=protocol,
- timeout=timeout, virtual_ips=virtual_ips)
- changed = True
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
- else:
- balancer = balancers[0]
- setattr(balancer, 'metadata',
- [dict(key=k, value=v) for k, v in
- balancer.get_metadata().items()])
- atts = {
- 'name': name,
- 'algorithm': algorithm,
- 'port': port,
- 'protocol': protocol,
- 'timeout': timeout
- }
- for att, value in atts.items():
- current = getattr(balancer, att)
- if current != value:
- changed = True
-
- if changed:
- balancer.update(**atts)
-
- if balancer.metadata != metadata:
- balancer.set_metadata(meta)
- changed = True
-
- virtual_ips = [clb.VirtualIP(type=vip_type)]
- current_vip_types = set([v.type for v in balancer.virtual_ips])
- vip_types = set([v.type for v in virtual_ips])
- if current_vip_types != vip_types:
- module.fail_json(msg='Load balancer Virtual IP type cannot '
- 'be changed')
-
- if wait:
- attempts = wait_timeout // 5
- pyrax.utils.wait_for_build(balancer, interval=5, attempts=attempts)
-
- balancer.get()
- instance = rax_to_dict(balancer, 'clb')
-
- result = dict(changed=changed, balancer=instance)
-
- if balancer.status == 'ERROR':
- result['msg'] = '%s failed to build' % balancer.id
- elif wait and balancer.status not in ('ACTIVE', 'ERROR'):
- result['msg'] = 'Timeout waiting on %s' % balancer.id
-
- if 'msg' in result:
- module.fail_json(**result)
- else:
- module.exit_json(**result)
-
- elif state == 'absent':
- if balancers:
- balancer = balancers[0]
- try:
- balancer.delete()
- changed = True
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
-
- instance = rax_to_dict(balancer, 'clb')
-
- if wait:
- attempts = wait_timeout // 5
- pyrax.utils.wait_until(balancer, 'status', ('DELETED'),
- interval=5, attempts=attempts)
- else:
- instance = {}
-
- module.exit_json(changed=changed, balancer=instance)
-
-
-def main():
- argument_spec = rax_argument_spec()
- argument_spec.update(
- dict(
- algorithm=dict(choices=CLB_ALGORITHMS,
- default='LEAST_CONNECTIONS'),
- meta=dict(type='dict', default={}),
- name=dict(required=True),
- port=dict(type='int', default=80),
- protocol=dict(choices=CLB_PROTOCOLS, default='HTTP'),
- state=dict(default='present', choices=['present', 'absent']),
- timeout=dict(type='int', default=30),
- type=dict(choices=['PUBLIC', 'SERVICENET'], default='PUBLIC'),
- vip_id=dict(),
- wait=dict(type='bool', default=False),
- wait_timeout=dict(type='int', default=300),
- )
- )
-
- module = AnsibleModule(
- argument_spec=argument_spec,
- required_together=rax_required_together(),
- )
-
- if not HAS_PYRAX:
- module.fail_json(msg='pyrax is required for this module')
-
- algorithm = module.params.get('algorithm')
- meta = module.params.get('meta')
- name = module.params.get('name')
- port = module.params.get('port')
- protocol = module.params.get('protocol')
- state = module.params.get('state')
- timeout = int(module.params.get('timeout'))
- vip_id = module.params.get('vip_id')
- vip_type = module.params.get('type')
- wait = module.params.get('wait')
- wait_timeout = int(module.params.get('wait_timeout'))
-
- setup_rax_module(module, pyrax)
-
- cloud_load_balancer(module, state, name, meta, algorithm, port, protocol,
- vip_type, timeout, wait, wait_timeout, vip_id)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/rax_clb_nodes.py b/ansible_collections/community/general/plugins/modules/rax_clb_nodes.py
deleted file mode 100644
index c076dced7..000000000
--- a/ansible_collections/community/general/plugins/modules/rax_clb_nodes.py
+++ /dev/null
@@ -1,291 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-# Copyright Ansible Project
-# 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: rax_clb_nodes
-short_description: Add, modify and remove nodes from a Rackspace Cloud Load Balancer
-description:
- - Adds, modifies and removes nodes from a Rackspace Cloud Load Balancer
-attributes:
- check_mode:
- support: none
- diff_mode:
- support: none
-options:
- address:
- type: str
- required: false
- description:
- - IP address or domain name of the node
- condition:
- type: str
- required: false
- choices:
- - enabled
- - disabled
- - draining
- description:
- - Condition for the node, which determines its role within the load
- balancer
- load_balancer_id:
- type: int
- required: true
- description:
- - Load balancer id
- node_id:
- type: int
- required: false
- description:
- - Node id
- port:
- type: int
- required: false
- description:
- - Port number of the load balanced service on the node
- state:
- type: str
- required: false
- default: "present"
- choices:
- - present
- - absent
- description:
- - Indicate desired state of the node
- type:
- type: str
- required: false
- choices:
- - primary
- - secondary
- description:
- - Type of node
- wait:
- required: false
- default: false
- type: bool
- description:
- - Wait for the load balancer to become active before returning
- wait_timeout:
- type: int
- required: false
- default: 30
- description:
- - How long to wait before giving up and returning an error
- weight:
- type: int
- required: false
- description:
- - Weight of node
- virtualenv:
- type: path
- description:
- - Virtualenv to execute this module in
-author: "Lukasz Kawczynski (@neuroid)"
-extends_documentation_fragment:
- - community.general.rackspace
- - community.general.rackspace.openstack
- - community.general.attributes
-
-'''
-
-EXAMPLES = '''
-- name: Add a new node to the load balancer
- local_action:
- module: rax_clb_nodes
- load_balancer_id: 71
- address: 10.2.2.3
- port: 80
- condition: enabled
- type: primary
- wait: true
- credentials: /path/to/credentials
-
-- name: Drain connections from a node
- local_action:
- module: rax_clb_nodes
- load_balancer_id: 71
- node_id: 410
- condition: draining
- wait: true
- credentials: /path/to/credentials
-
-- name: Remove a node from the load balancer
- local_action:
- module: rax_clb_nodes
- load_balancer_id: 71
- node_id: 410
- state: absent
- wait: true
- credentials: /path/to/credentials
-'''
-
-import os
-
-try:
- import pyrax
- HAS_PYRAX = True
-except ImportError:
- HAS_PYRAX = False
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.community.general.plugins.module_utils.rax import rax_argument_spec, rax_clb_node_to_dict, rax_required_together, setup_rax_module
-
-
-def _activate_virtualenv(path):
- activate_this = os.path.join(path, 'bin', 'activate_this.py')
- with open(activate_this) as f:
- code = compile(f.read(), activate_this, 'exec')
- exec(code)
-
-
-def _get_node(lb, node_id=None, address=None, port=None):
- """Return a matching node"""
- for node in getattr(lb, 'nodes', []):
- match_list = []
- if node_id is not None:
- match_list.append(getattr(node, 'id', None) == node_id)
- if address is not None:
- match_list.append(getattr(node, 'address', None) == address)
- if port is not None:
- match_list.append(getattr(node, 'port', None) == port)
-
- if match_list and all(match_list):
- return node
-
- return None
-
-
-def main():
- argument_spec = rax_argument_spec()
- argument_spec.update(
- dict(
- address=dict(),
- condition=dict(choices=['enabled', 'disabled', 'draining']),
- load_balancer_id=dict(required=True, type='int'),
- node_id=dict(type='int'),
- port=dict(type='int'),
- state=dict(default='present', choices=['present', 'absent']),
- type=dict(choices=['primary', 'secondary']),
- virtualenv=dict(type='path'),
- wait=dict(default=False, type='bool'),
- wait_timeout=dict(default=30, type='int'),
- weight=dict(type='int'),
- )
- )
-
- module = AnsibleModule(
- argument_spec=argument_spec,
- required_together=rax_required_together(),
- )
-
- if not HAS_PYRAX:
- module.fail_json(msg='pyrax is required for this module')
-
- address = module.params['address']
- condition = (module.params['condition'] and
- module.params['condition'].upper())
- load_balancer_id = module.params['load_balancer_id']
- node_id = module.params['node_id']
- port = module.params['port']
- state = module.params['state']
- typ = module.params['type'] and module.params['type'].upper()
- virtualenv = module.params['virtualenv']
- wait = module.params['wait']
- wait_timeout = module.params['wait_timeout'] or 1
- weight = module.params['weight']
-
- if virtualenv:
- try:
- _activate_virtualenv(virtualenv)
- except IOError as e:
- module.fail_json(msg='Failed to activate virtualenv %s (%s)' % (
- virtualenv, e))
-
- setup_rax_module(module, pyrax)
-
- if not pyrax.cloud_loadbalancers:
- module.fail_json(msg='Failed to instantiate client. This '
- 'typically indicates an invalid region or an '
- 'incorrectly capitalized region name.')
-
- try:
- lb = pyrax.cloud_loadbalancers.get(load_balancer_id)
- except pyrax.exc.PyraxException as e:
- module.fail_json(msg='%s' % e.message)
-
- node = _get_node(lb, node_id, address, port)
-
- result = rax_clb_node_to_dict(node)
-
- if state == 'absent':
- if not node: # Removing a non-existent node
- module.exit_json(changed=False, state=state)
- try:
- lb.delete_node(node)
- result = {}
- except pyrax.exc.NotFound:
- module.exit_json(changed=False, state=state)
- except pyrax.exc.PyraxException as e:
- module.fail_json(msg='%s' % e.message)
- else: # present
- if not node:
- if node_id: # Updating a non-existent node
- msg = 'Node %d not found' % node_id
- if lb.nodes:
- msg += (' (available nodes: %s)' %
- ', '.join([str(x.id) for x in lb.nodes]))
- module.fail_json(msg=msg)
- else: # Creating a new node
- try:
- node = pyrax.cloudloadbalancers.Node(
- address=address, port=port, condition=condition,
- weight=weight, type=typ)
- resp, body = lb.add_nodes([node])
- result.update(body['nodes'][0])
- except pyrax.exc.PyraxException as e:
- module.fail_json(msg='%s' % e.message)
- else: # Updating an existing node
- mutable = {
- 'condition': condition,
- 'type': typ,
- 'weight': weight,
- }
-
- for name in list(mutable):
- value = mutable[name]
- if value is None or value == getattr(node, name):
- mutable.pop(name)
-
- if not mutable:
- module.exit_json(changed=False, state=state, node=result)
-
- try:
- # The diff has to be set explicitly to update node's weight and
- # type; this should probably be fixed in pyrax
- lb.update_node(node, diff=mutable)
- result.update(mutable)
- except pyrax.exc.PyraxException as e:
- module.fail_json(msg='%s' % e.message)
-
- if wait:
- pyrax.utils.wait_until(lb, "status", "ACTIVE", interval=1,
- attempts=wait_timeout)
- if lb.status != 'ACTIVE':
- module.fail_json(
- msg='Load balancer not active after %ds (current status: %s)' %
- (wait_timeout, lb.status.lower()))
-
- kwargs = {'node': result} if result else {}
- module.exit_json(changed=True, state=state, **kwargs)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/rax_clb_ssl.py b/ansible_collections/community/general/plugins/modules/rax_clb_ssl.py
deleted file mode 100644
index b794130cf..000000000
--- a/ansible_collections/community/general/plugins/modules/rax_clb_ssl.py
+++ /dev/null
@@ -1,289 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-# Copyright Ansible Project
-# 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: rax_clb_ssl
-short_description: Manage SSL termination for a Rackspace Cloud Load Balancer
-description:
-- Set up, reconfigure, or remove SSL termination for an existing load balancer.
-attributes:
- check_mode:
- support: none
- diff_mode:
- support: none
-options:
- loadbalancer:
- type: str
- description:
- - Name or ID of the load balancer on which to manage SSL termination.
- required: true
- state:
- type: str
- description:
- - If set to "present", SSL termination will be added to this load balancer.
- - If "absent", SSL termination will be removed instead.
- choices:
- - present
- - absent
- default: present
- enabled:
- description:
- - If set to "false", temporarily disable SSL termination without discarding
- - existing credentials.
- default: true
- type: bool
- private_key:
- type: str
- description:
- - The private SSL key as a string in PEM format.
- certificate:
- type: str
- description:
- - The public SSL certificates as a string in PEM format.
- intermediate_certificate:
- type: str
- description:
- - One or more intermediate certificate authorities as a string in PEM
- - format, concatenated into a single string.
- secure_port:
- type: int
- description:
- - The port to listen for secure traffic.
- default: 443
- secure_traffic_only:
- description:
- - If "true", the load balancer will *only* accept secure traffic.
- default: false
- type: bool
- https_redirect:
- description:
- - If "true", the load balancer will redirect HTTP traffic to HTTPS.
- - Requires "secure_traffic_only" to be true. Incurs an implicit wait if SSL
- - termination is also applied or removed.
- type: bool
- wait:
- description:
- - Wait for the balancer to be in state "running" before turning.
- default: false
- type: bool
- wait_timeout:
- type: int
- description:
- - How long before "wait" gives up, in seconds.
- default: 300
-author: Ash Wilson (@smashwilson)
-extends_documentation_fragment:
- - community.general.rackspace
- - community.general.rackspace.openstack
- - community.general.attributes
-
-'''
-
-EXAMPLES = '''
-- name: Enable SSL termination on a load balancer
- community.general.rax_clb_ssl:
- loadbalancer: the_loadbalancer
- state: present
- private_key: "{{ lookup('file', 'credentials/server.key' ) }}"
- certificate: "{{ lookup('file', 'credentials/server.crt' ) }}"
- intermediate_certificate: "{{ lookup('file', 'credentials/trust-chain.crt') }}"
- secure_traffic_only: true
- wait: true
-
-- name: Disable SSL termination
- community.general.rax_clb_ssl:
- loadbalancer: "{{ registered_lb.balancer.id }}"
- state: absent
- wait: true
-'''
-
-try:
- import pyrax
- HAS_PYRAX = True
-except ImportError:
- HAS_PYRAX = False
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.community.general.plugins.module_utils.rax import (rax_argument_spec,
- rax_find_loadbalancer,
- rax_required_together,
- rax_to_dict,
- setup_rax_module,
- )
-
-
-def cloud_load_balancer_ssl(module, loadbalancer, state, enabled, private_key,
- certificate, intermediate_certificate, secure_port,
- secure_traffic_only, https_redirect,
- wait, wait_timeout):
- # Validate arguments.
-
- if state == 'present':
- if not private_key:
- module.fail_json(msg="private_key must be provided.")
- else:
- private_key = private_key.strip()
-
- if not certificate:
- module.fail_json(msg="certificate must be provided.")
- else:
- certificate = certificate.strip()
-
- attempts = wait_timeout // 5
-
- # Locate the load balancer.
-
- balancer = rax_find_loadbalancer(module, pyrax, loadbalancer)
- existing_ssl = balancer.get_ssl_termination()
-
- changed = False
-
- if state == 'present':
- # Apply or reconfigure SSL termination on the load balancer.
- ssl_attrs = dict(
- securePort=secure_port,
- privatekey=private_key,
- certificate=certificate,
- intermediateCertificate=intermediate_certificate,
- enabled=enabled,
- secureTrafficOnly=secure_traffic_only
- )
-
- needs_change = False
-
- if existing_ssl:
- for ssl_attr, value in ssl_attrs.items():
- if ssl_attr == 'privatekey':
- # The private key is not included in get_ssl_termination's
- # output (as it shouldn't be). Also, if you're changing the
- # private key, you'll also be changing the certificate,
- # so we don't lose anything by not checking it.
- continue
-
- if value is not None and existing_ssl.get(ssl_attr) != value:
- # module.fail_json(msg='Unnecessary change', attr=ssl_attr, value=value, existing=existing_ssl.get(ssl_attr))
- needs_change = True
- else:
- needs_change = True
-
- if needs_change:
- try:
- balancer.add_ssl_termination(**ssl_attrs)
- except pyrax.exceptions.PyraxException as e:
- module.fail_json(msg='%s' % e.message)
- changed = True
- elif state == 'absent':
- # Remove SSL termination if it's already configured.
- if existing_ssl:
- try:
- balancer.delete_ssl_termination()
- except pyrax.exceptions.PyraxException as e:
- module.fail_json(msg='%s' % e.message)
- changed = True
-
- if https_redirect is not None and balancer.httpsRedirect != https_redirect:
- if changed:
- # This wait is unavoidable because load balancers are immutable
- # while the SSL termination changes above are being applied.
- pyrax.utils.wait_for_build(balancer, interval=5, attempts=attempts)
-
- try:
- balancer.update(httpsRedirect=https_redirect)
- except pyrax.exceptions.PyraxException as e:
- module.fail_json(msg='%s' % e.message)
- changed = True
-
- if changed and wait:
- pyrax.utils.wait_for_build(balancer, interval=5, attempts=attempts)
-
- balancer.get()
- new_ssl_termination = balancer.get_ssl_termination()
-
- # Intentionally omit the private key from the module output, so you don't
- # accidentally echo it with `ansible-playbook -v` or `debug`, and the
- # certificate, which is just long. Convert other attributes to snake_case
- # and include https_redirect at the top-level.
- if new_ssl_termination:
- new_ssl = dict(
- enabled=new_ssl_termination['enabled'],
- secure_port=new_ssl_termination['securePort'],
- secure_traffic_only=new_ssl_termination['secureTrafficOnly']
- )
- else:
- new_ssl = None
-
- result = dict(
- changed=changed,
- https_redirect=balancer.httpsRedirect,
- ssl_termination=new_ssl,
- balancer=rax_to_dict(balancer, 'clb')
- )
- success = True
-
- if balancer.status == 'ERROR':
- result['msg'] = '%s failed to build' % balancer.id
- success = False
- elif wait and balancer.status not in ('ACTIVE', 'ERROR'):
- result['msg'] = 'Timeout waiting on %s' % balancer.id
- success = False
-
- if success:
- module.exit_json(**result)
- else:
- module.fail_json(**result)
-
-
-def main():
- argument_spec = rax_argument_spec()
- argument_spec.update(dict(
- loadbalancer=dict(required=True),
- state=dict(default='present', choices=['present', 'absent']),
- enabled=dict(type='bool', default=True),
- private_key=dict(no_log=True),
- certificate=dict(),
- intermediate_certificate=dict(),
- secure_port=dict(type='int', default=443),
- secure_traffic_only=dict(type='bool', default=False),
- https_redirect=dict(type='bool'),
- wait=dict(type='bool', default=False),
- wait_timeout=dict(type='int', default=300)
- ))
-
- module = AnsibleModule(
- argument_spec=argument_spec,
- required_together=rax_required_together(),
- )
-
- if not HAS_PYRAX:
- module.fail_json(msg='pyrax is required for this module.')
-
- loadbalancer = module.params.get('loadbalancer')
- state = module.params.get('state')
- enabled = module.boolean(module.params.get('enabled'))
- private_key = module.params.get('private_key')
- certificate = module.params.get('certificate')
- intermediate_certificate = module.params.get('intermediate_certificate')
- secure_port = module.params.get('secure_port')
- secure_traffic_only = module.boolean(module.params.get('secure_traffic_only'))
- https_redirect = module.boolean(module.params.get('https_redirect'))
- wait = module.boolean(module.params.get('wait'))
- wait_timeout = module.params.get('wait_timeout')
-
- setup_rax_module(module, pyrax)
-
- cloud_load_balancer_ssl(
- module, loadbalancer, state, enabled, private_key, certificate,
- intermediate_certificate, secure_port, secure_traffic_only,
- https_redirect, wait, wait_timeout
- )
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/rax_dns.py b/ansible_collections/community/general/plugins/modules/rax_dns.py
deleted file mode 100644
index 31782cd88..000000000
--- a/ansible_collections/community/general/plugins/modules/rax_dns.py
+++ /dev/null
@@ -1,180 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-# Copyright Ansible Project
-# 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: rax_dns
-short_description: Manage domains on Rackspace Cloud DNS
-description:
- - Manage domains on Rackspace Cloud DNS
-attributes:
- check_mode:
- support: none
- diff_mode:
- support: none
-options:
- comment:
- type: str
- description:
- - Brief description of the domain. Maximum length of 160 characters
- email:
- type: str
- description:
- - Email address of the domain administrator
- name:
- type: str
- description:
- - Domain name to create
- state:
- type: str
- description:
- - Indicate desired state of the resource
- choices:
- - present
- - absent
- default: present
- ttl:
- type: int
- description:
- - Time to live of domain in seconds
- default: 3600
-notes:
- - "It is recommended that plays utilizing this module be run with
- C(serial: 1) to avoid exceeding the API request limit imposed by
- the Rackspace CloudDNS API"
-author: "Matt Martz (@sivel)"
-extends_documentation_fragment:
- - community.general.rackspace
- - community.general.rackspace.openstack
- - community.general.attributes
-
-'''
-
-EXAMPLES = '''
-- name: Create domain
- hosts: all
- gather_facts: false
- tasks:
- - name: Domain create request
- local_action:
- module: rax_dns
- credentials: ~/.raxpub
- name: example.org
- email: admin@example.org
- register: rax_dns
-'''
-
-try:
- import pyrax
- HAS_PYRAX = True
-except ImportError:
- HAS_PYRAX = False
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.community.general.plugins.module_utils.rax import (rax_argument_spec,
- rax_required_together,
- rax_to_dict,
- setup_rax_module,
- )
-
-
-def rax_dns(module, comment, email, name, state, ttl):
- changed = False
-
- dns = pyrax.cloud_dns
- if not dns:
- module.fail_json(msg='Failed to instantiate client. This '
- 'typically indicates an invalid region or an '
- 'incorrectly capitalized region name.')
-
- if state == 'present':
- if not email:
- module.fail_json(msg='An "email" attribute is required for '
- 'creating a domain')
-
- try:
- domain = dns.find(name=name)
- except pyrax.exceptions.NoUniqueMatch as e:
- module.fail_json(msg='%s' % e.message)
- except pyrax.exceptions.NotFound:
- try:
- domain = dns.create(name=name, emailAddress=email, ttl=ttl,
- comment=comment)
- changed = True
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
-
- update = {}
- if comment != getattr(domain, 'comment', None):
- update['comment'] = comment
- if ttl != getattr(domain, 'ttl', None):
- update['ttl'] = ttl
- if email != getattr(domain, 'emailAddress', None):
- update['emailAddress'] = email
-
- if update:
- try:
- domain.update(**update)
- changed = True
- domain.get()
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
-
- elif state == 'absent':
- try:
- domain = dns.find(name=name)
- except pyrax.exceptions.NotFound:
- domain = {}
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
-
- if domain:
- try:
- domain.delete()
- changed = True
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
-
- module.exit_json(changed=changed, domain=rax_to_dict(domain))
-
-
-def main():
- argument_spec = rax_argument_spec()
- argument_spec.update(
- dict(
- comment=dict(),
- email=dict(),
- name=dict(),
- state=dict(default='present', choices=['present', 'absent']),
- ttl=dict(type='int', default=3600),
- )
- )
-
- module = AnsibleModule(
- argument_spec=argument_spec,
- required_together=rax_required_together(),
- )
-
- if not HAS_PYRAX:
- module.fail_json(msg='pyrax is required for this module')
-
- comment = module.params.get('comment')
- email = module.params.get('email')
- name = module.params.get('name')
- state = module.params.get('state')
- ttl = module.params.get('ttl')
-
- setup_rax_module(module, pyrax, False)
-
- rax_dns(module, comment, email, name, state, ttl)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/rax_dns_record.py b/ansible_collections/community/general/plugins/modules/rax_dns_record.py
deleted file mode 100644
index cb3cd279e..000000000
--- a/ansible_collections/community/general/plugins/modules/rax_dns_record.py
+++ /dev/null
@@ -1,358 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-# Copyright Ansible Project
-# 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: rax_dns_record
-short_description: Manage DNS records on Rackspace Cloud DNS
-description:
- - Manage DNS records on Rackspace Cloud DNS
-attributes:
- check_mode:
- support: none
- diff_mode:
- support: none
-options:
- comment:
- type: str
- description:
- - Brief description of the domain. Maximum length of 160 characters
- data:
- type: str
- description:
- - IP address for A/AAAA record, FQDN for CNAME/MX/NS, or text data for
- SRV/TXT
- required: true
- domain:
- type: str
- description:
- - Domain name to create the record in. This is an invalid option when
- type=PTR
- loadbalancer:
- type: str
- description:
- - Load Balancer ID to create a PTR record for. Only used with type=PTR
- name:
- type: str
- description:
- - FQDN record name to create
- required: true
- overwrite:
- description:
- - Add new records if data doesn't match, instead of updating existing
- record with matching name. If there are already multiple records with
- matching name and overwrite=true, this module will fail.
- default: true
- type: bool
- priority:
- type: int
- description:
- - Required for MX and SRV records, but forbidden for other record types.
- If specified, must be an integer from 0 to 65535.
- server:
- type: str
- description:
- - Server ID to create a PTR record for. Only used with type=PTR
- state:
- type: str
- description:
- - Indicate desired state of the resource
- choices:
- - present
- - absent
- default: present
- ttl:
- type: int
- description:
- - Time to live of record in seconds
- default: 3600
- type:
- type: str
- description:
- - DNS record type
- choices:
- - A
- - AAAA
- - CNAME
- - MX
- - NS
- - SRV
- - TXT
- - PTR
- required: true
-notes:
- - "It is recommended that plays utilizing this module be run with
- C(serial: 1) to avoid exceeding the API request limit imposed by
- the Rackspace CloudDNS API."
- - To manipulate a C(PTR) record either C(loadbalancer) or C(server) must be
- supplied.
-author: "Matt Martz (@sivel)"
-extends_documentation_fragment:
- - community.general.rackspace
- - community.general.rackspace.openstack
- - community.general.attributes
-
-'''
-
-EXAMPLES = '''
-- name: Create DNS Records
- hosts: all
- gather_facts: false
- tasks:
- - name: Create A record
- local_action:
- module: rax_dns_record
- credentials: ~/.raxpub
- domain: example.org
- name: www.example.org
- data: "{{ rax_accessipv4 }}"
- type: A
- register: a_record
-
- - name: Create PTR record
- local_action:
- module: rax_dns_record
- credentials: ~/.raxpub
- server: "{{ rax_id }}"
- name: "{{ inventory_hostname }}"
- region: DFW
- register: ptr_record
-'''
-
-try:
- import pyrax
- HAS_PYRAX = True
-except ImportError:
- HAS_PYRAX = False
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.community.general.plugins.module_utils.rax import (rax_argument_spec,
- rax_find_loadbalancer,
- rax_find_server,
- rax_required_together,
- rax_to_dict,
- setup_rax_module,
- )
-
-
-def rax_dns_record_ptr(module, data=None, comment=None, loadbalancer=None,
- name=None, server=None, state='present', ttl=7200):
- changed = False
- results = []
-
- dns = pyrax.cloud_dns
-
- if not dns:
- module.fail_json(msg='Failed to instantiate client. This '
- 'typically indicates an invalid region or an '
- 'incorrectly capitalized region name.')
-
- if loadbalancer:
- item = rax_find_loadbalancer(module, pyrax, loadbalancer)
- elif server:
- item = rax_find_server(module, pyrax, server)
-
- if state == 'present':
- current = dns.list_ptr_records(item)
- for record in current:
- if record.data == data:
- if record.ttl != ttl or record.name != name:
- try:
- dns.update_ptr_record(item, record, name, data, ttl)
- changed = True
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
- record.ttl = ttl
- record.name = name
- results.append(rax_to_dict(record))
- break
- else:
- results.append(rax_to_dict(record))
- break
-
- if not results:
- record = dict(name=name, type='PTR', data=data, ttl=ttl,
- comment=comment)
- try:
- results = dns.add_ptr_records(item, [record])
- changed = True
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
-
- module.exit_json(changed=changed, records=results)
-
- elif state == 'absent':
- current = dns.list_ptr_records(item)
- for record in current:
- if record.data == data:
- results.append(rax_to_dict(record))
- break
-
- if results:
- try:
- dns.delete_ptr_records(item, data)
- changed = True
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
-
- module.exit_json(changed=changed, records=results)
-
-
-def rax_dns_record(module, comment=None, data=None, domain=None, name=None,
- overwrite=True, priority=None, record_type='A',
- state='present', ttl=7200):
- """Function for manipulating record types other than PTR"""
-
- changed = False
-
- dns = pyrax.cloud_dns
- if not dns:
- module.fail_json(msg='Failed to instantiate client. This '
- 'typically indicates an invalid region or an '
- 'incorrectly capitalized region name.')
-
- if state == 'present':
- if not priority and record_type in ['MX', 'SRV']:
- module.fail_json(msg='A "priority" attribute is required for '
- 'creating a MX or SRV record')
-
- try:
- domain = dns.find(name=domain)
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
-
- try:
- if overwrite:
- record = domain.find_record(record_type, name=name)
- else:
- record = domain.find_record(record_type, name=name, data=data)
- except pyrax.exceptions.DomainRecordNotUnique as e:
- module.fail_json(msg='overwrite=true and there are multiple matching records')
- except pyrax.exceptions.DomainRecordNotFound as e:
- try:
- record_data = {
- 'type': record_type,
- 'name': name,
- 'data': data,
- 'ttl': ttl
- }
- if comment:
- record_data.update(dict(comment=comment))
- if priority and record_type.upper() in ['MX', 'SRV']:
- record_data.update(dict(priority=priority))
-
- record = domain.add_records([record_data])[0]
- changed = True
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
-
- update = {}
- if comment != getattr(record, 'comment', None):
- update['comment'] = comment
- if ttl != getattr(record, 'ttl', None):
- update['ttl'] = ttl
- if priority != getattr(record, 'priority', None):
- update['priority'] = priority
- if data != getattr(record, 'data', None):
- update['data'] = data
-
- if update:
- try:
- record.update(**update)
- changed = True
- record.get()
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
-
- elif state == 'absent':
- try:
- domain = dns.find(name=domain)
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
-
- try:
- record = domain.find_record(record_type, name=name, data=data)
- except pyrax.exceptions.DomainRecordNotFound as e:
- record = {}
- except pyrax.exceptions.DomainRecordNotUnique as e:
- module.fail_json(msg='%s' % e.message)
-
- if record:
- try:
- record.delete()
- changed = True
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
-
- module.exit_json(changed=changed, record=rax_to_dict(record))
-
-
-def main():
- argument_spec = rax_argument_spec()
- argument_spec.update(
- dict(
- comment=dict(),
- data=dict(required=True),
- domain=dict(),
- loadbalancer=dict(),
- name=dict(required=True),
- overwrite=dict(type='bool', default=True),
- priority=dict(type='int'),
- server=dict(),
- state=dict(default='present', choices=['present', 'absent']),
- ttl=dict(type='int', default=3600),
- type=dict(required=True, choices=['A', 'AAAA', 'CNAME', 'MX', 'NS',
- 'SRV', 'TXT', 'PTR'])
- )
- )
-
- module = AnsibleModule(
- argument_spec=argument_spec,
- required_together=rax_required_together(),
- mutually_exclusive=[
- ['server', 'loadbalancer', 'domain'],
- ],
- required_one_of=[
- ['server', 'loadbalancer', 'domain'],
- ],
- )
-
- if not HAS_PYRAX:
- module.fail_json(msg='pyrax is required for this module')
-
- comment = module.params.get('comment')
- data = module.params.get('data')
- domain = module.params.get('domain')
- loadbalancer = module.params.get('loadbalancer')
- name = module.params.get('name')
- overwrite = module.params.get('overwrite')
- priority = module.params.get('priority')
- server = module.params.get('server')
- state = module.params.get('state')
- ttl = module.params.get('ttl')
- record_type = module.params.get('type')
-
- setup_rax_module(module, pyrax, False)
-
- if record_type.upper() == 'PTR':
- if not server and not loadbalancer:
- module.fail_json(msg='one of the following is required: '
- 'server,loadbalancer')
- rax_dns_record_ptr(module, data=data, comment=comment,
- loadbalancer=loadbalancer, name=name, server=server,
- state=state, ttl=ttl)
- else:
- rax_dns_record(module, comment=comment, data=data, domain=domain,
- name=name, overwrite=overwrite, priority=priority,
- record_type=record_type, state=state, ttl=ttl)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/rax_facts.py b/ansible_collections/community/general/plugins/modules/rax_facts.py
deleted file mode 100644
index f8bb0e050..000000000
--- a/ansible_collections/community/general/plugins/modules/rax_facts.py
+++ /dev/null
@@ -1,152 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-# Copyright Ansible Project
-# 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: rax_facts
-short_description: Gather facts for Rackspace Cloud Servers
-description:
- - Gather facts for Rackspace Cloud Servers.
-attributes:
- check_mode:
- version_added: 3.3.0
- # This was backported to 2.5.4 and 1.3.11 as well, since this was a bugfix
-options:
- address:
- type: str
- description:
- - Server IP address to retrieve facts for, will match any IP assigned to
- the server
- id:
- type: str
- description:
- - Server ID to retrieve facts for
- name:
- type: str
- description:
- - Server name to retrieve facts for
-author: "Matt Martz (@sivel)"
-extends_documentation_fragment:
- - community.general.rackspace.openstack
- - community.general.attributes
- - community.general.attributes.facts
- - community.general.attributes.facts_module
-
-'''
-
-EXAMPLES = '''
-- name: Gather info about servers
- hosts: all
- gather_facts: false
- tasks:
- - name: Get facts about servers
- local_action:
- module: rax_facts
- credentials: ~/.raxpub
- name: "{{ inventory_hostname }}"
- region: DFW
- - name: Map some facts
- ansible.builtin.set_fact:
- ansible_ssh_host: "{{ rax_accessipv4 }}"
-'''
-
-try:
- import pyrax
- HAS_PYRAX = True
-except ImportError:
- HAS_PYRAX = False
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.community.general.plugins.module_utils.rax import (rax_argument_spec,
- rax_required_together,
- rax_to_dict,
- setup_rax_module,
- )
-
-
-def rax_facts(module, address, name, server_id):
- changed = False
-
- cs = pyrax.cloudservers
-
- if cs is None:
- module.fail_json(msg='Failed to instantiate client. This '
- 'typically indicates an invalid region or an '
- 'incorrectly capitalized region name.')
-
- ansible_facts = {}
-
- search_opts = {}
- if name:
- search_opts = dict(name='^%s$' % name)
- try:
- servers = cs.servers.list(search_opts=search_opts)
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
- elif address:
- servers = []
- try:
- for server in cs.servers.list():
- for addresses in server.networks.values():
- if address in addresses:
- servers.append(server)
- break
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
- elif server_id:
- servers = []
- try:
- servers.append(cs.servers.get(server_id))
- except Exception as e:
- pass
-
- servers[:] = [server for server in servers if server.status != "DELETED"]
-
- if len(servers) > 1:
- module.fail_json(msg='Multiple servers found matching provided '
- 'search parameters')
- elif len(servers) == 1:
- ansible_facts = rax_to_dict(servers[0], 'server')
-
- module.exit_json(changed=changed, ansible_facts=ansible_facts)
-
-
-def main():
- argument_spec = rax_argument_spec()
- argument_spec.update(
- dict(
- address=dict(),
- id=dict(),
- name=dict(),
- )
- )
-
- module = AnsibleModule(
- argument_spec=argument_spec,
- required_together=rax_required_together(),
- mutually_exclusive=[['address', 'id', 'name']],
- required_one_of=[['address', 'id', 'name']],
- supports_check_mode=True,
- )
-
- if not HAS_PYRAX:
- module.fail_json(msg='pyrax is required for this module')
-
- address = module.params.get('address')
- server_id = module.params.get('id')
- name = module.params.get('name')
-
- setup_rax_module(module, pyrax)
-
- rax_facts(module, address, name, server_id)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/rax_files.py b/ansible_collections/community/general/plugins/modules/rax_files.py
deleted file mode 100644
index a63e107eb..000000000
--- a/ansible_collections/community/general/plugins/modules/rax_files.py
+++ /dev/null
@@ -1,400 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-# Copyright (c) 2013, Paul Durivage <paul.durivage@rackspace.com>
-# 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: rax_files
-short_description: Manipulate Rackspace Cloud Files Containers
-description:
- - Manipulate Rackspace Cloud Files Containers
-attributes:
- check_mode:
- support: none
- diff_mode:
- support: none
-options:
- clear_meta:
- description:
- - Optionally clear existing metadata when applying metadata to existing containers.
- Selecting this option is only appropriate when setting type=meta
- type: bool
- default: false
- container:
- type: str
- description:
- - The container to use for container or metadata operations.
- meta:
- type: dict
- default: {}
- description:
- - A hash of items to set as metadata values on a container
- private:
- description:
- - Used to set a container as private, removing it from the CDN. B(Warning!)
- Private containers, if previously made public, can have live objects
- available until the TTL on cached objects expires
- type: bool
- default: false
- public:
- description:
- - Used to set a container as public, available via the Cloud Files CDN
- type: bool
- default: false
- region:
- type: str
- description:
- - Region to create an instance in
- state:
- type: str
- description:
- - Indicate desired state of the resource
- choices: ['present', 'absent', 'list']
- default: present
- ttl:
- type: int
- description:
- - In seconds, set a container-wide TTL for all objects cached on CDN edge nodes.
- Setting a TTL is only appropriate for containers that are public
- type:
- type: str
- description:
- - Type of object to do work on, i.e. metadata object or a container object
- choices:
- - container
- - meta
- default: container
- web_error:
- type: str
- description:
- - Sets an object to be presented as the HTTP error page when accessed by the CDN URL
- web_index:
- type: str
- description:
- - Sets an object to be presented as the HTTP index page when accessed by the CDN URL
-author: "Paul Durivage (@angstwad)"
-extends_documentation_fragment:
- - community.general.rackspace
- - community.general.rackspace.openstack
- - community.general.attributes
-
-'''
-
-EXAMPLES = '''
-- name: "Test Cloud Files Containers"
- hosts: local
- gather_facts: false
- tasks:
- - name: "List all containers"
- community.general.rax_files:
- state: list
-
- - name: "Create container called 'mycontainer'"
- community.general.rax_files:
- container: mycontainer
-
- - name: "Create container 'mycontainer2' with metadata"
- community.general.rax_files:
- container: mycontainer2
- meta:
- key: value
- file_for: someuser@example.com
-
- - name: "Set a container's web index page"
- community.general.rax_files:
- container: mycontainer
- web_index: index.html
-
- - name: "Set a container's web error page"
- community.general.rax_files:
- container: mycontainer
- web_error: error.html
-
- - name: "Make container public"
- community.general.rax_files:
- container: mycontainer
- public: true
-
- - name: "Make container public with a 24 hour TTL"
- community.general.rax_files:
- container: mycontainer
- public: true
- ttl: 86400
-
- - name: "Make container private"
- community.general.rax_files:
- container: mycontainer
- private: true
-
-- name: "Test Cloud Files Containers Metadata Storage"
- hosts: local
- gather_facts: false
- tasks:
- - name: "Get mycontainer2 metadata"
- community.general.rax_files:
- container: mycontainer2
- type: meta
-
- - name: "Set mycontainer2 metadata"
- community.general.rax_files:
- container: mycontainer2
- type: meta
- meta:
- uploaded_by: someuser@example.com
-
- - name: "Remove mycontainer2 metadata"
- community.general.rax_files:
- container: "mycontainer2"
- type: meta
- state: absent
- meta:
- key: ""
- file_for: ""
-'''
-
-try:
- import pyrax
- HAS_PYRAX = True
-except ImportError as e:
- HAS_PYRAX = False
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.community.general.plugins.module_utils.rax import rax_argument_spec, rax_required_together, setup_rax_module
-
-
-EXIT_DICT = dict(success=True)
-META_PREFIX = 'x-container-meta-'
-
-
-def _get_container(module, cf, container):
- try:
- return cf.get_container(container)
- except pyrax.exc.NoSuchContainer as e:
- module.fail_json(msg=e.message)
-
-
-def _fetch_meta(module, container):
- EXIT_DICT['meta'] = dict()
- try:
- for k, v in container.get_metadata().items():
- split_key = k.split(META_PREFIX)[-1]
- EXIT_DICT['meta'][split_key] = v
- except Exception as e:
- module.fail_json(msg=e.message)
-
-
-def meta(cf, module, container_, state, meta_, clear_meta):
- c = _get_container(module, cf, container_)
-
- if meta_ and state == 'present':
- try:
- meta_set = c.set_metadata(meta_, clear=clear_meta)
- except Exception as e:
- module.fail_json(msg=e.message)
- elif meta_ and state == 'absent':
- remove_results = []
- for k, v in meta_.items():
- c.remove_metadata_key(k)
- remove_results.append(k)
- EXIT_DICT['deleted_meta_keys'] = remove_results
- elif state == 'absent':
- remove_results = []
- for k, v in c.get_metadata().items():
- c.remove_metadata_key(k)
- remove_results.append(k)
- EXIT_DICT['deleted_meta_keys'] = remove_results
-
- _fetch_meta(module, c)
- _locals = locals().keys()
-
- EXIT_DICT['container'] = c.name
- if 'meta_set' in _locals or 'remove_results' in _locals:
- EXIT_DICT['changed'] = True
-
- module.exit_json(**EXIT_DICT)
-
-
-def container(cf, module, container_, state, meta_, clear_meta, ttl, public,
- private, web_index, web_error):
- if public and private:
- module.fail_json(msg='container cannot be simultaneously '
- 'set to public and private')
-
- if state == 'absent' and (meta_ or clear_meta or public or private or web_index or web_error):
- module.fail_json(msg='state cannot be omitted when setting/removing '
- 'attributes on a container')
-
- if state == 'list':
- # We don't care if attributes are specified, let's list containers
- EXIT_DICT['containers'] = cf.list_containers()
- module.exit_json(**EXIT_DICT)
-
- try:
- c = cf.get_container(container_)
- except pyrax.exc.NoSuchContainer as e:
- # Make the container if state=present, otherwise bomb out
- if state == 'present':
- try:
- c = cf.create_container(container_)
- except Exception as e:
- module.fail_json(msg=e.message)
- else:
- EXIT_DICT['changed'] = True
- EXIT_DICT['created'] = True
- else:
- module.fail_json(msg=e.message)
- else:
- # Successfully grabbed a container object
- # Delete if state is absent
- if state == 'absent':
- try:
- cont_deleted = c.delete()
- except Exception as e:
- module.fail_json(msg=e.message)
- else:
- EXIT_DICT['deleted'] = True
-
- if meta_:
- try:
- meta_set = c.set_metadata(meta_, clear=clear_meta)
- except Exception as e:
- module.fail_json(msg=e.message)
- finally:
- _fetch_meta(module, c)
-
- if ttl:
- try:
- c.cdn_ttl = ttl
- except Exception as e:
- module.fail_json(msg=e.message)
- else:
- EXIT_DICT['ttl'] = c.cdn_ttl
-
- if public:
- try:
- cont_public = c.make_public()
- except Exception as e:
- module.fail_json(msg=e.message)
- else:
- EXIT_DICT['container_urls'] = dict(url=c.cdn_uri,
- ssl_url=c.cdn_ssl_uri,
- streaming_url=c.cdn_streaming_uri,
- ios_uri=c.cdn_ios_uri)
-
- if private:
- try:
- cont_private = c.make_private()
- except Exception as e:
- module.fail_json(msg=e.message)
- else:
- EXIT_DICT['set_private'] = True
-
- if web_index:
- try:
- cont_web_index = c.set_web_index_page(web_index)
- except Exception as e:
- module.fail_json(msg=e.message)
- else:
- EXIT_DICT['set_index'] = True
- finally:
- _fetch_meta(module, c)
-
- if web_error:
- try:
- cont_err_index = c.set_web_error_page(web_error)
- except Exception as e:
- module.fail_json(msg=e.message)
- else:
- EXIT_DICT['set_error'] = True
- finally:
- _fetch_meta(module, c)
-
- EXIT_DICT['container'] = c.name
- EXIT_DICT['objs_in_container'] = c.object_count
- EXIT_DICT['total_bytes'] = c.total_bytes
-
- _locals = locals().keys()
- if ('cont_deleted' in _locals
- or 'meta_set' in _locals
- or 'cont_public' in _locals
- or 'cont_private' in _locals
- or 'cont_web_index' in _locals
- or 'cont_err_index' in _locals):
- EXIT_DICT['changed'] = True
-
- module.exit_json(**EXIT_DICT)
-
-
-def cloudfiles(module, container_, state, meta_, clear_meta, typ, ttl, public,
- private, web_index, web_error):
- """ Dispatch from here to work with metadata or file objects """
- cf = pyrax.cloudfiles
-
- if cf is None:
- module.fail_json(msg='Failed to instantiate client. This '
- 'typically indicates an invalid region or an '
- 'incorrectly capitalized region name.')
-
- if typ == "container":
- container(cf, module, container_, state, meta_, clear_meta, ttl,
- public, private, web_index, web_error)
- else:
- meta(cf, module, container_, state, meta_, clear_meta)
-
-
-def main():
- argument_spec = rax_argument_spec()
- argument_spec.update(
- dict(
- container=dict(),
- state=dict(choices=['present', 'absent', 'list'],
- default='present'),
- meta=dict(type='dict', default=dict()),
- clear_meta=dict(default=False, type='bool'),
- type=dict(choices=['container', 'meta'], default='container'),
- ttl=dict(type='int'),
- public=dict(default=False, type='bool'),
- private=dict(default=False, type='bool'),
- web_index=dict(),
- web_error=dict()
- )
- )
-
- module = AnsibleModule(
- argument_spec=argument_spec,
- required_together=rax_required_together()
- )
-
- if not HAS_PYRAX:
- module.fail_json(msg='pyrax is required for this module')
-
- container_ = module.params.get('container')
- state = module.params.get('state')
- meta_ = module.params.get('meta')
- clear_meta = module.params.get('clear_meta')
- typ = module.params.get('type')
- ttl = module.params.get('ttl')
- public = module.params.get('public')
- private = module.params.get('private')
- web_index = module.params.get('web_index')
- web_error = module.params.get('web_error')
-
- if state in ['present', 'absent'] and not container_:
- module.fail_json(msg='please specify a container name')
- if clear_meta and not typ == 'meta':
- module.fail_json(msg='clear_meta can only be used when setting '
- 'metadata')
-
- setup_rax_module(module, pyrax)
- cloudfiles(module, container_, state, meta_, clear_meta, typ, ttl, public,
- private, web_index, web_error)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/rax_files_objects.py b/ansible_collections/community/general/plugins/modules/rax_files_objects.py
deleted file mode 100644
index bbcdfe4f8..000000000
--- a/ansible_collections/community/general/plugins/modules/rax_files_objects.py
+++ /dev/null
@@ -1,556 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-# Copyright (c) 2013, Paul Durivage <paul.durivage@rackspace.com>
-# 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: rax_files_objects
-short_description: Upload, download, and delete objects in Rackspace Cloud Files
-description:
- - Upload, download, and delete objects in Rackspace Cloud Files.
-attributes:
- check_mode:
- support: none
- diff_mode:
- support: none
-options:
- clear_meta:
- description:
- - Optionally clear existing metadata when applying metadata to existing objects.
- Selecting this option is only appropriate when setting O(type=meta).
- type: bool
- default: false
- container:
- type: str
- description:
- - The container to use for file object operations.
- required: true
- dest:
- type: str
- description:
- - The destination of a C(get) operation; i.e. a local directory, C(/home/user/myfolder).
- Used to specify the destination of an operation on a remote object; i.e. a file name,
- V(file1), or a comma-separated list of remote objects, V(file1,file2,file17).
- expires:
- type: int
- description:
- - Used to set an expiration in seconds on an uploaded file or folder.
- meta:
- type: dict
- default: {}
- description:
- - Items to set as metadata values on an uploaded file or folder.
- method:
- type: str
- description:
- - >
- The method of operation to be performed: V(put) to upload files, V(get) to download files or
- V(delete) to remove remote objects in Cloud Files.
- choices:
- - get
- - put
- - delete
- default: get
- src:
- type: str
- description:
- - Source from which to upload files. Used to specify a remote object as a source for
- an operation, i.e. a file name, V(file1), or a comma-separated list of remote objects,
- V(file1,file2,file17). Parameters O(src) and O(dest) are mutually exclusive on remote-only object operations
- structure:
- description:
- - Used to specify whether to maintain nested directory structure when downloading objects
- from Cloud Files. Setting to false downloads the contents of a container to a single,
- flat directory
- type: bool
- default: true
- type:
- type: str
- description:
- - Type of object to do work on
- - Metadata object or a file object
- choices:
- - file
- - meta
- default: file
-author: "Paul Durivage (@angstwad)"
-extends_documentation_fragment:
- - community.general.rackspace
- - community.general.rackspace.openstack
- - community.general.attributes
-
-'''
-
-EXAMPLES = '''
-- name: "Test Cloud Files Objects"
- hosts: local
- gather_facts: false
- tasks:
- - name: "Get objects from test container"
- community.general.rax_files_objects:
- container: testcont
- dest: ~/Downloads/testcont
-
- - name: "Get single object from test container"
- community.general.rax_files_objects:
- container: testcont
- src: file1
- dest: ~/Downloads/testcont
-
- - name: "Get several objects from test container"
- community.general.rax_files_objects:
- container: testcont
- src: file1,file2,file3
- dest: ~/Downloads/testcont
-
- - name: "Delete one object in test container"
- community.general.rax_files_objects:
- container: testcont
- method: delete
- dest: file1
-
- - name: "Delete several objects in test container"
- community.general.rax_files_objects:
- container: testcont
- method: delete
- dest: file2,file3,file4
-
- - name: "Delete all objects in test container"
- community.general.rax_files_objects:
- container: testcont
- method: delete
-
- - name: "Upload all files to test container"
- community.general.rax_files_objects:
- container: testcont
- method: put
- src: ~/Downloads/onehundred
-
- - name: "Upload one file to test container"
- community.general.rax_files_objects:
- container: testcont
- method: put
- src: ~/Downloads/testcont/file1
-
- - name: "Upload one file to test container with metadata"
- community.general.rax_files_objects:
- container: testcont
- src: ~/Downloads/testcont/file2
- method: put
- meta:
- testkey: testdata
- who_uploaded_this: someuser@example.com
-
- - name: "Upload one file to test container with TTL of 60 seconds"
- community.general.rax_files_objects:
- container: testcont
- method: put
- src: ~/Downloads/testcont/file3
- expires: 60
-
- - name: "Attempt to get remote object that does not exist"
- community.general.rax_files_objects:
- container: testcont
- method: get
- src: FileThatDoesNotExist.jpg
- dest: ~/Downloads/testcont
- ignore_errors: true
-
- - name: "Attempt to delete remote object that does not exist"
- community.general.rax_files_objects:
- container: testcont
- method: delete
- dest: FileThatDoesNotExist.jpg
- ignore_errors: true
-
-- name: "Test Cloud Files Objects Metadata"
- hosts: local
- gather_facts: false
- tasks:
- - name: "Get metadata on one object"
- community.general.rax_files_objects:
- container: testcont
- type: meta
- dest: file2
-
- - name: "Get metadata on several objects"
- community.general.rax_files_objects:
- container: testcont
- type: meta
- src: file2,file1
-
- - name: "Set metadata on an object"
- community.general.rax_files_objects:
- container: testcont
- type: meta
- dest: file17
- method: put
- meta:
- key1: value1
- key2: value2
- clear_meta: true
-
- - name: "Verify metadata is set"
- community.general.rax_files_objects:
- container: testcont
- type: meta
- src: file17
-
- - name: "Delete metadata"
- community.general.rax_files_objects:
- container: testcont
- type: meta
- dest: file17
- method: delete
- meta:
- key1: ''
- key2: ''
-
- - name: "Get metadata on all objects"
- community.general.rax_files_objects:
- container: testcont
- type: meta
-'''
-
-import os
-
-try:
- import pyrax
- HAS_PYRAX = True
-except ImportError:
- HAS_PYRAX = False
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.community.general.plugins.module_utils.rax import rax_argument_spec, rax_required_together, setup_rax_module
-
-
-EXIT_DICT = dict(success=False)
-META_PREFIX = 'x-object-meta-'
-
-
-def _get_container(module, cf, container):
- try:
- return cf.get_container(container)
- except pyrax.exc.NoSuchContainer as e:
- module.fail_json(msg=e.message)
-
-
-def _upload_folder(cf, folder, container, ttl=None, headers=None):
- """ Uploads a folder to Cloud Files.
- """
- total_bytes = 0
- for root, dummy, files in os.walk(folder):
- for fname in files:
- full_path = os.path.join(root, fname)
- obj_name = os.path.relpath(full_path, folder)
- obj_size = os.path.getsize(full_path)
- cf.upload_file(container, full_path, obj_name=obj_name, return_none=True, ttl=ttl, headers=headers)
- total_bytes += obj_size
- return total_bytes
-
-
-def upload(module, cf, container, src, dest, meta, expires):
- """ Uploads a single object or a folder to Cloud Files Optionally sets an
- metadata, TTL value (expires), or Content-Disposition and Content-Encoding
- headers.
- """
- if not src:
- module.fail_json(msg='src must be specified when uploading')
-
- c = _get_container(module, cf, container)
- src = os.path.abspath(os.path.expanduser(src))
- is_dir = os.path.isdir(src)
-
- if not is_dir and not os.path.isfile(src) or not os.path.exists(src):
- module.fail_json(msg='src must be a file or a directory')
- if dest and is_dir:
- module.fail_json(msg='dest cannot be set when whole '
- 'directories are uploaded')
-
- cont_obj = None
- total_bytes = 0
- try:
- if dest and not is_dir:
- cont_obj = c.upload_file(src, obj_name=dest, ttl=expires, headers=meta)
- elif is_dir:
- total_bytes = _upload_folder(cf, src, c, ttl=expires, headers=meta)
- else:
- cont_obj = c.upload_file(src, ttl=expires, headers=meta)
- except Exception as e:
- module.fail_json(msg=e.message)
-
- EXIT_DICT['success'] = True
- EXIT_DICT['container'] = c.name
- EXIT_DICT['msg'] = "Uploaded %s to container: %s" % (src, c.name)
- if cont_obj or total_bytes > 0:
- EXIT_DICT['changed'] = True
- if meta:
- EXIT_DICT['meta'] = dict(updated=True)
-
- if cont_obj:
- EXIT_DICT['bytes'] = cont_obj.total_bytes
- EXIT_DICT['etag'] = cont_obj.etag
- else:
- EXIT_DICT['bytes'] = total_bytes
-
- module.exit_json(**EXIT_DICT)
-
-
-def download(module, cf, container, src, dest, structure):
- """ Download objects from Cloud Files to a local path specified by "dest".
- Optionally disable maintaining a directory structure by by passing a
- false value to "structure".
- """
- # Looking for an explicit destination
- if not dest:
- module.fail_json(msg='dest is a required argument when '
- 'downloading from Cloud Files')
-
- # Attempt to fetch the container by name
- c = _get_container(module, cf, container)
-
- # Accept a single object name or a comma-separated list of objs
- # If not specified, get the entire container
- if src:
- objs = map(str.strip, src.split(','))
- else:
- objs = c.get_object_names()
-
- dest = os.path.abspath(os.path.expanduser(dest))
- is_dir = os.path.isdir(dest)
-
- if not is_dir:
- module.fail_json(msg='dest must be a directory')
-
- try:
- results = [c.download_object(obj, dest, structure=structure) for obj in objs]
- except Exception as e:
- module.fail_json(msg=e.message)
-
- len_results = len(results)
- len_objs = len(objs)
-
- EXIT_DICT['container'] = c.name
- EXIT_DICT['requested_downloaded'] = results
- if results:
- EXIT_DICT['changed'] = True
- if len_results == len_objs:
- EXIT_DICT['success'] = True
- EXIT_DICT['msg'] = "%s objects downloaded to %s" % (len_results, dest)
- else:
- EXIT_DICT['msg'] = "Error: only %s of %s objects were " \
- "downloaded" % (len_results, len_objs)
- module.exit_json(**EXIT_DICT)
-
-
-def delete(module, cf, container, src, dest):
- """ Delete specific objects by proving a single file name or a
- comma-separated list to src OR dest (but not both). Omitting file name(s)
- assumes the entire container is to be deleted.
- """
- if src and dest:
- module.fail_json(msg="Error: ambiguous instructions; files to be deleted "
- "have been specified on both src and dest args")
-
- c = _get_container(module, cf, container)
-
- objs = dest or src
- if objs:
- objs = map(str.strip, objs.split(','))
- else:
- objs = c.get_object_names()
-
- num_objs = len(objs)
-
- try:
- results = [c.delete_object(obj) for obj in objs]
- except Exception as e:
- module.fail_json(msg=e.message)
-
- num_deleted = results.count(True)
-
- EXIT_DICT['container'] = c.name
- EXIT_DICT['deleted'] = num_deleted
- EXIT_DICT['requested_deleted'] = objs
-
- if num_deleted:
- EXIT_DICT['changed'] = True
-
- if num_objs == num_deleted:
- EXIT_DICT['success'] = True
- EXIT_DICT['msg'] = "%s objects deleted" % num_deleted
- else:
- EXIT_DICT['msg'] = ("Error: only %s of %s objects "
- "deleted" % (num_deleted, num_objs))
- module.exit_json(**EXIT_DICT)
-
-
-def get_meta(module, cf, container, src, dest):
- """ Get metadata for a single file, comma-separated list, or entire
- container
- """
- if src and dest:
- module.fail_json(msg="Error: ambiguous instructions; files to be deleted "
- "have been specified on both src and dest args")
-
- c = _get_container(module, cf, container)
-
- objs = dest or src
- if objs:
- objs = map(str.strip, objs.split(','))
- else:
- objs = c.get_object_names()
-
- try:
- results = dict()
- for obj in objs:
- meta = c.get_object(obj).get_metadata()
- results[obj] = dict((k.split(META_PREFIX)[-1], v) for k, v in meta.items())
- except Exception as e:
- module.fail_json(msg=e.message)
-
- EXIT_DICT['container'] = c.name
- if results:
- EXIT_DICT['meta_results'] = results
- EXIT_DICT['success'] = True
- module.exit_json(**EXIT_DICT)
-
-
-def put_meta(module, cf, container, src, dest, meta, clear_meta):
- """ Set metadata on a container, single file, or comma-separated list.
- Passing a true value to clear_meta clears the metadata stored in Cloud
- Files before setting the new metadata to the value of "meta".
- """
- if src and dest:
- module.fail_json(msg="Error: ambiguous instructions; files to set meta"
- " have been specified on both src and dest args")
- objs = dest or src
- objs = map(str.strip, objs.split(','))
-
- c = _get_container(module, cf, container)
-
- try:
- results = [c.get_object(obj).set_metadata(meta, clear=clear_meta) for obj in objs]
- except Exception as e:
- module.fail_json(msg=e.message)
-
- EXIT_DICT['container'] = c.name
- EXIT_DICT['success'] = True
- if results:
- EXIT_DICT['changed'] = True
- EXIT_DICT['num_changed'] = True
- module.exit_json(**EXIT_DICT)
-
-
-def delete_meta(module, cf, container, src, dest, meta):
- """ Removes metadata keys and values specified in meta, if any. Deletes on
- all objects specified by src or dest (but not both), if any; otherwise it
- deletes keys on all objects in the container
- """
- if src and dest:
- module.fail_json(msg="Error: ambiguous instructions; meta keys to be "
- "deleted have been specified on both src and dest"
- " args")
- objs = dest or src
- objs = map(str.strip, objs.split(','))
-
- c = _get_container(module, cf, container)
-
- try:
- for obj in objs:
- o = c.get_object(obj)
- results = [
- o.remove_metadata_key(k)
- for k in (meta or o.get_metadata())
- ]
- except Exception as e:
- module.fail_json(msg=e.message)
-
- EXIT_DICT['container'] = c.name
- EXIT_DICT['success'] = True
- if results:
- EXIT_DICT['changed'] = True
- EXIT_DICT['num_deleted'] = len(results)
- module.exit_json(**EXIT_DICT)
-
-
-def cloudfiles(module, container, src, dest, method, typ, meta, clear_meta,
- structure, expires):
- """ Dispatch from here to work with metadata or file objects """
- cf = pyrax.cloudfiles
-
- if cf is None:
- module.fail_json(msg='Failed to instantiate client. This '
- 'typically indicates an invalid region or an '
- 'incorrectly capitalized region name.')
-
- if typ == "file":
- if method == 'get':
- download(module, cf, container, src, dest, structure)
-
- if method == 'put':
- upload(module, cf, container, src, dest, meta, expires)
-
- if method == 'delete':
- delete(module, cf, container, src, dest)
-
- else:
- if method == 'get':
- get_meta(module, cf, container, src, dest)
-
- if method == 'put':
- put_meta(module, cf, container, src, dest, meta, clear_meta)
-
- if method == 'delete':
- delete_meta(module, cf, container, src, dest, meta)
-
-
-def main():
- argument_spec = rax_argument_spec()
- argument_spec.update(
- dict(
- container=dict(required=True),
- src=dict(),
- dest=dict(),
- method=dict(default='get', choices=['put', 'get', 'delete']),
- type=dict(default='file', choices=['file', 'meta']),
- meta=dict(type='dict', default=dict()),
- clear_meta=dict(default=False, type='bool'),
- structure=dict(default=True, type='bool'),
- expires=dict(type='int'),
- )
- )
-
- module = AnsibleModule(
- argument_spec=argument_spec,
- required_together=rax_required_together(),
- )
-
- if not HAS_PYRAX:
- module.fail_json(msg='pyrax is required for this module')
-
- container = module.params.get('container')
- src = module.params.get('src')
- dest = module.params.get('dest')
- method = module.params.get('method')
- typ = module.params.get('type')
- meta = module.params.get('meta')
- clear_meta = module.params.get('clear_meta')
- structure = module.params.get('structure')
- expires = module.params.get('expires')
-
- if clear_meta and not typ == 'meta':
- module.fail_json(msg='clear_meta can only be used when setting metadata')
-
- setup_rax_module(module, pyrax)
- cloudfiles(module, container, src, dest, method, typ, meta, clear_meta, structure, expires)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/rax_identity.py b/ansible_collections/community/general/plugins/modules/rax_identity.py
deleted file mode 100644
index b2eb15627..000000000
--- a/ansible_collections/community/general/plugins/modules/rax_identity.py
+++ /dev/null
@@ -1,110 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-# Copyright Ansible Project
-# 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: rax_identity
-short_description: Load Rackspace Cloud Identity
-description:
- - Verifies Rackspace Cloud credentials and returns identity information
-attributes:
- check_mode:
- support: none
- diff_mode:
- support: none
-options:
- state:
- type: str
- description:
- - Indicate desired state of the resource
- choices: ['present']
- default: present
- required: false
-author:
- - "Christopher H. Laco (@claco)"
- - "Matt Martz (@sivel)"
-extends_documentation_fragment:
- - community.general.rackspace.openstack
- - community.general.attributes
-
-'''
-
-EXAMPLES = '''
-- name: Load Rackspace Cloud Identity
- gather_facts: false
- hosts: local
- connection: local
- tasks:
- - name: Load Identity
- local_action:
- module: rax_identity
- credentials: ~/.raxpub
- region: DFW
- register: rackspace_identity
-'''
-
-try:
- import pyrax
- HAS_PYRAX = True
-except ImportError:
- HAS_PYRAX = False
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.community.general.plugins.module_utils.rax import (rax_argument_spec, rax_required_together, rax_to_dict,
- setup_rax_module)
-
-
-def cloud_identity(module, state, identity):
- instance = dict(
- authenticated=identity.authenticated,
- credentials=identity._creds_file
- )
- changed = False
-
- instance.update(rax_to_dict(identity))
- instance['services'] = instance.get('services', {}).keys()
-
- if state == 'present':
- if not identity.authenticated:
- module.fail_json(msg='Credentials could not be verified!')
-
- module.exit_json(changed=changed, identity=instance)
-
-
-def main():
- argument_spec = rax_argument_spec()
- argument_spec.update(
- dict(
- state=dict(default='present', choices=['present'])
- )
- )
-
- module = AnsibleModule(
- argument_spec=argument_spec,
- required_together=rax_required_together()
- )
-
- if not HAS_PYRAX:
- module.fail_json(msg='pyrax is required for this module')
-
- state = module.params.get('state')
-
- setup_rax_module(module, pyrax)
-
- if not pyrax.identity:
- module.fail_json(msg='Failed to instantiate client. This '
- 'typically indicates an invalid region or an '
- 'incorrectly capitalized region name.')
-
- cloud_identity(module, state, pyrax.identity)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/rax_keypair.py b/ansible_collections/community/general/plugins/modules/rax_keypair.py
deleted file mode 100644
index d7d7a2cc3..000000000
--- a/ansible_collections/community/general/plugins/modules/rax_keypair.py
+++ /dev/null
@@ -1,179 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-# Copyright Ansible Project
-# 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: rax_keypair
-short_description: Create a keypair for use with Rackspace Cloud Servers
-description:
- - Create a keypair for use with Rackspace Cloud Servers
-attributes:
- check_mode:
- support: none
- diff_mode:
- support: none
-options:
- name:
- type: str
- description:
- - Name of keypair
- required: true
- public_key:
- type: str
- description:
- - Public Key string to upload. Can be a file path or string
- state:
- type: str
- description:
- - Indicate desired state of the resource
- choices:
- - present
- - absent
- default: present
-author: "Matt Martz (@sivel)"
-notes:
- - Keypairs cannot be manipulated, only created and deleted. To "update" a
- keypair you must first delete and then recreate.
- - The ability to specify a file path for the public key was added in 1.7
-extends_documentation_fragment:
- - community.general.rackspace.openstack
- - community.general.attributes
-
-'''
-
-EXAMPLES = '''
-- name: Create a keypair
- hosts: localhost
- gather_facts: false
- tasks:
- - name: Keypair request
- local_action:
- module: rax_keypair
- credentials: ~/.raxpub
- name: my_keypair
- region: DFW
- register: keypair
- - name: Create local public key
- local_action:
- module: copy
- content: "{{ keypair.keypair.public_key }}"
- dest: "{{ inventory_dir }}/{{ keypair.keypair.name }}.pub"
- - name: Create local private key
- local_action:
- module: copy
- content: "{{ keypair.keypair.private_key }}"
- dest: "{{ inventory_dir }}/{{ keypair.keypair.name }}"
-
-- name: Create a keypair
- hosts: localhost
- gather_facts: false
- tasks:
- - name: Keypair request
- local_action:
- module: rax_keypair
- credentials: ~/.raxpub
- name: my_keypair
- public_key: "{{ lookup('file', 'authorized_keys/id_rsa.pub') }}"
- region: DFW
- register: keypair
-'''
-import os
-
-try:
- import pyrax
- HAS_PYRAX = True
-except ImportError:
- HAS_PYRAX = False
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.community.general.plugins.module_utils.rax import (rax_argument_spec,
- rax_required_together,
- rax_to_dict,
- setup_rax_module,
- )
-
-
-def rax_keypair(module, name, public_key, state):
- changed = False
-
- cs = pyrax.cloudservers
-
- if cs is None:
- module.fail_json(msg='Failed to instantiate client. This '
- 'typically indicates an invalid region or an '
- 'incorrectly capitalized region name.')
-
- keypair = {}
-
- if state == 'present':
- if public_key and os.path.isfile(public_key):
- try:
- f = open(public_key)
- public_key = f.read()
- f.close()
- except Exception as e:
- module.fail_json(msg='Failed to load %s' % public_key)
-
- try:
- keypair = cs.keypairs.find(name=name)
- except cs.exceptions.NotFound:
- try:
- keypair = cs.keypairs.create(name, public_key)
- changed = True
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
-
- elif state == 'absent':
- try:
- keypair = cs.keypairs.find(name=name)
- except Exception:
- pass
-
- if keypair:
- try:
- keypair.delete()
- changed = True
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
-
- module.exit_json(changed=changed, keypair=rax_to_dict(keypair))
-
-
-def main():
- argument_spec = rax_argument_spec()
- argument_spec.update(
- dict(
- name=dict(required=True),
- public_key=dict(),
- state=dict(default='present', choices=['absent', 'present']),
- )
- )
-
- module = AnsibleModule(
- argument_spec=argument_spec,
- required_together=rax_required_together(),
- )
-
- if not HAS_PYRAX:
- module.fail_json(msg='pyrax is required for this module')
-
- name = module.params.get('name')
- public_key = module.params.get('public_key')
- state = module.params.get('state')
-
- setup_rax_module(module, pyrax)
-
- rax_keypair(module, name, public_key, state)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/rax_meta.py b/ansible_collections/community/general/plugins/modules/rax_meta.py
deleted file mode 100644
index 7b52e906f..000000000
--- a/ansible_collections/community/general/plugins/modules/rax_meta.py
+++ /dev/null
@@ -1,182 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-# Copyright Ansible Project
-# 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: rax_meta
-short_description: Manipulate metadata for Rackspace Cloud Servers
-description:
- - Manipulate metadata for Rackspace Cloud Servers
-attributes:
- check_mode:
- support: none
- diff_mode:
- support: none
-options:
- address:
- type: str
- description:
- - Server IP address to modify metadata for, will match any IP assigned to
- the server
- id:
- type: str
- description:
- - Server ID to modify metadata for
- name:
- type: str
- description:
- - Server name to modify metadata for
- meta:
- type: dict
- default: {}
- description:
- - A hash of metadata to associate with the instance
-author: "Matt Martz (@sivel)"
-extends_documentation_fragment:
- - community.general.rackspace.openstack
- - community.general.attributes
-
-'''
-
-EXAMPLES = '''
-- name: Set metadata for a server
- hosts: all
- gather_facts: false
- tasks:
- - name: Set metadata
- local_action:
- module: rax_meta
- credentials: ~/.raxpub
- name: "{{ inventory_hostname }}"
- region: DFW
- meta:
- group: primary_group
- groups:
- - group_two
- - group_three
- app: my_app
-
- - name: Clear metadata
- local_action:
- module: rax_meta
- credentials: ~/.raxpub
- name: "{{ inventory_hostname }}"
- region: DFW
-'''
-
-import json
-
-try:
- import pyrax
- HAS_PYRAX = True
-except ImportError:
- HAS_PYRAX = False
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.community.general.plugins.module_utils.rax import rax_argument_spec, rax_required_together, setup_rax_module
-from ansible.module_utils.six import string_types
-
-
-def rax_meta(module, address, name, server_id, meta):
- changed = False
-
- cs = pyrax.cloudservers
-
- if cs is None:
- module.fail_json(msg='Failed to instantiate client. This '
- 'typically indicates an invalid region or an '
- 'incorrectly capitalized region name.')
-
- search_opts = {}
- if name:
- search_opts = dict(name='^%s$' % name)
- try:
- servers = cs.servers.list(search_opts=search_opts)
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
- elif address:
- servers = []
- try:
- for server in cs.servers.list():
- for addresses in server.networks.values():
- if address in addresses:
- servers.append(server)
- break
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
- elif server_id:
- servers = []
- try:
- servers.append(cs.servers.get(server_id))
- except Exception as e:
- pass
-
- if len(servers) > 1:
- module.fail_json(msg='Multiple servers found matching provided '
- 'search parameters')
- elif not servers:
- module.fail_json(msg='Failed to find a server matching provided '
- 'search parameters')
-
- # Normalize and ensure all metadata values are strings
- for k, v in meta.items():
- if isinstance(v, list):
- meta[k] = ','.join(['%s' % i for i in v])
- elif isinstance(v, dict):
- meta[k] = json.dumps(v)
- elif not isinstance(v, string_types):
- meta[k] = '%s' % v
-
- server = servers[0]
- if server.metadata == meta:
- changed = False
- else:
- changed = True
- removed = set(server.metadata.keys()).difference(meta.keys())
- cs.servers.delete_meta(server, list(removed))
- cs.servers.set_meta(server, meta)
- server.get()
-
- module.exit_json(changed=changed, meta=server.metadata)
-
-
-def main():
- argument_spec = rax_argument_spec()
- argument_spec.update(
- dict(
- address=dict(),
- id=dict(),
- name=dict(),
- meta=dict(type='dict', default=dict()),
- )
- )
-
- module = AnsibleModule(
- argument_spec=argument_spec,
- required_together=rax_required_together(),
- mutually_exclusive=[['address', 'id', 'name']],
- required_one_of=[['address', 'id', 'name']],
- )
-
- if not HAS_PYRAX:
- module.fail_json(msg='pyrax is required for this module')
-
- address = module.params.get('address')
- server_id = module.params.get('id')
- name = module.params.get('name')
- meta = module.params.get('meta')
-
- setup_rax_module(module, pyrax)
-
- rax_meta(module, address, name, server_id, meta)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/rax_mon_alarm.py b/ansible_collections/community/general/plugins/modules/rax_mon_alarm.py
deleted file mode 100644
index b66611a90..000000000
--- a/ansible_collections/community/general/plugins/modules/rax_mon_alarm.py
+++ /dev/null
@@ -1,235 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-# Copyright Ansible Project
-# 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: rax_mon_alarm
-short_description: Create or delete a Rackspace Cloud Monitoring alarm
-description:
-- Create or delete a Rackspace Cloud Monitoring alarm that associates an
- existing rax_mon_entity, rax_mon_check, and rax_mon_notification_plan with
- criteria that specify what conditions will trigger which levels of
- notifications. Rackspace monitoring module flow | rax_mon_entity ->
- rax_mon_check -> rax_mon_notification -> rax_mon_notification_plan ->
- *rax_mon_alarm*
-attributes:
- check_mode:
- support: none
- diff_mode:
- support: none
-options:
- state:
- type: str
- description:
- - Ensure that the alarm with this O(label) exists or does not exist.
- choices: [ "present", "absent" ]
- required: false
- default: present
- label:
- type: str
- description:
- - Friendly name for this alarm, used to achieve idempotence. Must be a String
- between 1 and 255 characters long.
- required: true
- entity_id:
- type: str
- description:
- - ID of the entity this alarm is attached to. May be acquired by registering
- the value of a rax_mon_entity task.
- required: true
- check_id:
- type: str
- description:
- - ID of the check that should be alerted on. May be acquired by registering
- the value of a rax_mon_check task.
- required: true
- notification_plan_id:
- type: str
- description:
- - ID of the notification plan to trigger if this alarm fires. May be acquired
- by registering the value of a rax_mon_notification_plan task.
- required: true
- criteria:
- type: str
- description:
- - Alarm DSL that describes alerting conditions and their output states. Must
- be between 1 and 16384 characters long. See
- http://docs.rackspace.com/cm/api/v1.0/cm-devguide/content/alerts-language.html
- for a reference on the alerting language.
- disabled:
- description:
- - If yes, create this alarm, but leave it in an inactive state. Defaults to
- no.
- type: bool
- default: false
- metadata:
- type: dict
- description:
- - Arbitrary key/value pairs to accompany the alarm. Must be a hash of String
- keys and values between 1 and 255 characters long.
-author: Ash Wilson (@smashwilson)
-extends_documentation_fragment:
- - community.general.rackspace.openstack
- - community.general.attributes
-
-'''
-
-EXAMPLES = '''
-- name: Alarm example
- gather_facts: false
- hosts: local
- connection: local
- tasks:
- - name: Ensure that a specific alarm exists.
- community.general.rax_mon_alarm:
- credentials: ~/.rax_pub
- state: present
- label: uhoh
- entity_id: "{{ the_entity['entity']['id'] }}"
- check_id: "{{ the_check['check']['id'] }}"
- notification_plan_id: "{{ defcon1['notification_plan']['id'] }}"
- criteria: >
- if (rate(metric['average']) > 10) {
- return new AlarmStatus(WARNING);
- }
- return new AlarmStatus(OK);
- register: the_alarm
-'''
-
-try:
- import pyrax
- HAS_PYRAX = True
-except ImportError:
- HAS_PYRAX = False
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.community.general.plugins.module_utils.rax import rax_argument_spec, rax_required_together, setup_rax_module
-
-
-def alarm(module, state, label, entity_id, check_id, notification_plan_id, criteria,
- disabled, metadata):
-
- if len(label) < 1 or len(label) > 255:
- module.fail_json(msg='label must be between 1 and 255 characters long')
-
- if criteria and len(criteria) < 1 or len(criteria) > 16384:
- module.fail_json(msg='criteria must be between 1 and 16384 characters long')
-
- # Coerce attributes.
-
- changed = False
- alarm = None
-
- cm = pyrax.cloud_monitoring
- if not cm:
- module.fail_json(msg='Failed to instantiate client. This typically '
- 'indicates an invalid region or an incorrectly '
- 'capitalized region name.')
-
- existing = [a for a in cm.list_alarms(entity_id) if a.label == label]
-
- if existing:
- alarm = existing[0]
-
- if state == 'present':
- should_create = False
- should_update = False
- should_delete = False
-
- if len(existing) > 1:
- module.fail_json(msg='%s existing alarms have the label %s.' %
- (len(existing), label))
-
- if alarm:
- if check_id != alarm.check_id or notification_plan_id != alarm.notification_plan_id:
- should_delete = should_create = True
-
- should_update = (disabled and disabled != alarm.disabled) or \
- (metadata and metadata != alarm.metadata) or \
- (criteria and criteria != alarm.criteria)
-
- if should_update and not should_delete:
- cm.update_alarm(entity=entity_id, alarm=alarm,
- criteria=criteria, disabled=disabled,
- label=label, metadata=metadata)
- changed = True
-
- if should_delete:
- alarm.delete()
- changed = True
- else:
- should_create = True
-
- if should_create:
- alarm = cm.create_alarm(entity=entity_id, check=check_id,
- notification_plan=notification_plan_id,
- criteria=criteria, disabled=disabled, label=label,
- metadata=metadata)
- changed = True
- else:
- for a in existing:
- a.delete()
- changed = True
-
- if alarm:
- alarm_dict = {
- "id": alarm.id,
- "label": alarm.label,
- "check_id": alarm.check_id,
- "notification_plan_id": alarm.notification_plan_id,
- "criteria": alarm.criteria,
- "disabled": alarm.disabled,
- "metadata": alarm.metadata
- }
- module.exit_json(changed=changed, alarm=alarm_dict)
- else:
- module.exit_json(changed=changed)
-
-
-def main():
- argument_spec = rax_argument_spec()
- argument_spec.update(
- dict(
- state=dict(default='present', choices=['present', 'absent']),
- label=dict(required=True),
- entity_id=dict(required=True),
- check_id=dict(required=True),
- notification_plan_id=dict(required=True),
- criteria=dict(),
- disabled=dict(type='bool', default=False),
- metadata=dict(type='dict')
- )
- )
-
- module = AnsibleModule(
- argument_spec=argument_spec,
- required_together=rax_required_together()
- )
-
- if not HAS_PYRAX:
- module.fail_json(msg='pyrax is required for this module')
-
- state = module.params.get('state')
- label = module.params.get('label')
- entity_id = module.params.get('entity_id')
- check_id = module.params.get('check_id')
- notification_plan_id = module.params.get('notification_plan_id')
- criteria = module.params.get('criteria')
- disabled = module.boolean(module.params.get('disabled'))
- metadata = module.params.get('metadata')
-
- setup_rax_module(module, pyrax)
-
- alarm(module, state, label, entity_id, check_id, notification_plan_id,
- criteria, disabled, metadata)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/rax_mon_check.py b/ansible_collections/community/general/plugins/modules/rax_mon_check.py
deleted file mode 100644
index 253c26dcf..000000000
--- a/ansible_collections/community/general/plugins/modules/rax_mon_check.py
+++ /dev/null
@@ -1,329 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-# Copyright Ansible Project
-# 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: rax_mon_check
-short_description: Create or delete a Rackspace Cloud Monitoring check for an
- existing entity.
-description:
-- Create or delete a Rackspace Cloud Monitoring check associated with an
- existing rax_mon_entity. A check is a specific test or measurement that is
- performed, possibly from different monitoring zones, on the systems you
- monitor. Rackspace monitoring module flow | rax_mon_entity ->
- *rax_mon_check* -> rax_mon_notification -> rax_mon_notification_plan ->
- rax_mon_alarm
-attributes:
- check_mode:
- support: none
- diff_mode:
- support: none
-options:
- state:
- type: str
- description:
- - Ensure that a check with this O(label) exists or does not exist.
- choices: ["present", "absent"]
- default: present
- entity_id:
- type: str
- description:
- - ID of the rax_mon_entity to target with this check.
- required: true
- label:
- type: str
- description:
- - Defines a label for this check, between 1 and 64 characters long.
- required: true
- check_type:
- type: str
- description:
- - The type of check to create. C(remote.) checks may be created on any
- rax_mon_entity. C(agent.) checks may only be created on rax_mon_entities
- that have a non-null C(agent_id).
- - |
- Choices for this option are:
- - V(remote.dns)
- - V(remote.ftp-banner)
- - V(remote.http)
- - V(remote.imap-banner)
- - V(remote.mssql-banner)
- - V(remote.mysql-banner)
- - V(remote.ping)
- - V(remote.pop3-banner)
- - V(remote.postgresql-banner)
- - V(remote.smtp-banner)
- - V(remote.smtp)
- - V(remote.ssh)
- - V(remote.tcp)
- - V(remote.telnet-banner)
- - V(agent.filesystem)
- - V(agent.memory)
- - V(agent.load_average)
- - V(agent.cpu)
- - V(agent.disk)
- - V(agent.network)
- - V(agent.plugin)
- required: true
- monitoring_zones_poll:
- type: str
- description:
- - Comma-separated list of the names of the monitoring zones the check should
- run from. Available monitoring zones include mzdfw, mzhkg, mziad, mzlon,
- mzord and mzsyd. Required for remote.* checks; prohibited for agent.* checks.
- target_hostname:
- type: str
- description:
- - One of O(target_hostname) and O(target_alias) is required for remote.* checks,
- but prohibited for agent.* checks. The hostname this check should target.
- Must be a valid IPv4, IPv6, or FQDN.
- target_alias:
- type: str
- description:
- - One of O(target_alias) and O(target_hostname) is required for remote.* checks,
- but prohibited for agent.* checks. Use the corresponding key in the entity's
- C(ip_addresses) hash to resolve an IP address to target.
- details:
- type: dict
- default: {}
- description:
- - Additional details specific to the check type. Must be a hash of strings
- between 1 and 255 characters long, or an array or object containing 0 to
- 256 items.
- disabled:
- description:
- - If V(true), ensure the check is created, but don't actually use it yet.
- type: bool
- default: false
- metadata:
- type: dict
- default: {}
- description:
- - Hash of arbitrary key-value pairs to accompany this check if it fires.
- Keys and values must be strings between 1 and 255 characters long.
- period:
- type: int
- description:
- - The number of seconds between each time the check is performed. Must be
- greater than the minimum period set on your account.
- timeout:
- type: int
- description:
- - The number of seconds this check will wait when attempting to collect
- results. Must be less than the period.
-author: Ash Wilson (@smashwilson)
-extends_documentation_fragment:
- - community.general.rackspace.openstack
- - community.general.attributes
-
-'''
-
-EXAMPLES = '''
-- name: Create a monitoring check
- gather_facts: false
- hosts: local
- connection: local
- tasks:
- - name: Associate a check with an existing entity.
- community.general.rax_mon_check:
- credentials: ~/.rax_pub
- state: present
- entity_id: "{{ the_entity['entity']['id'] }}"
- label: the_check
- check_type: remote.ping
- monitoring_zones_poll: mziad,mzord,mzdfw
- details:
- count: 10
- meta:
- hurf: durf
- register: the_check
-'''
-
-try:
- import pyrax
- HAS_PYRAX = True
-except ImportError:
- HAS_PYRAX = False
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.community.general.plugins.module_utils.rax import rax_argument_spec, rax_required_together, setup_rax_module
-
-
-def cloud_check(module, state, entity_id, label, check_type,
- monitoring_zones_poll, target_hostname, target_alias, details,
- disabled, metadata, period, timeout):
-
- # Coerce attributes.
-
- if monitoring_zones_poll and not isinstance(monitoring_zones_poll, list):
- monitoring_zones_poll = [monitoring_zones_poll]
-
- if period:
- period = int(period)
-
- if timeout:
- timeout = int(timeout)
-
- changed = False
- check = None
-
- cm = pyrax.cloud_monitoring
- if not cm:
- module.fail_json(msg='Failed to instantiate client. This typically '
- 'indicates an invalid region or an incorrectly '
- 'capitalized region name.')
-
- entity = cm.get_entity(entity_id)
- if not entity:
- module.fail_json(msg='Failed to instantiate entity. "%s" may not be'
- ' a valid entity id.' % entity_id)
-
- existing = [e for e in entity.list_checks() if e.label == label]
-
- if existing:
- check = existing[0]
-
- if state == 'present':
- if len(existing) > 1:
- module.fail_json(msg='%s existing checks have a label of %s.' %
- (len(existing), label))
-
- should_delete = False
- should_create = False
- should_update = False
-
- if check:
- # Details may include keys set to default values that are not
- # included in the initial creation.
- #
- # Only force a recreation of the check if one of the *specified*
- # keys is missing or has a different value.
- if details:
- for (key, value) in details.items():
- if key not in check.details:
- should_delete = should_create = True
- elif value != check.details[key]:
- should_delete = should_create = True
-
- should_update = label != check.label or \
- (target_hostname and target_hostname != check.target_hostname) or \
- (target_alias and target_alias != check.target_alias) or \
- (disabled != check.disabled) or \
- (metadata and metadata != check.metadata) or \
- (period and period != check.period) or \
- (timeout and timeout != check.timeout) or \
- (monitoring_zones_poll and monitoring_zones_poll != check.monitoring_zones_poll)
-
- if should_update and not should_delete:
- check.update(label=label,
- disabled=disabled,
- metadata=metadata,
- monitoring_zones_poll=monitoring_zones_poll,
- timeout=timeout,
- period=period,
- target_alias=target_alias,
- target_hostname=target_hostname)
- changed = True
- else:
- # The check doesn't exist yet.
- should_create = True
-
- if should_delete:
- check.delete()
-
- if should_create:
- check = cm.create_check(entity,
- label=label,
- check_type=check_type,
- target_hostname=target_hostname,
- target_alias=target_alias,
- monitoring_zones_poll=monitoring_zones_poll,
- details=details,
- disabled=disabled,
- metadata=metadata,
- period=period,
- timeout=timeout)
- changed = True
- elif state == 'absent':
- if check:
- check.delete()
- changed = True
- else:
- module.fail_json(msg='state must be either present or absent.')
-
- if check:
- check_dict = {
- "id": check.id,
- "label": check.label,
- "type": check.type,
- "target_hostname": check.target_hostname,
- "target_alias": check.target_alias,
- "monitoring_zones_poll": check.monitoring_zones_poll,
- "details": check.details,
- "disabled": check.disabled,
- "metadata": check.metadata,
- "period": check.period,
- "timeout": check.timeout
- }
- module.exit_json(changed=changed, check=check_dict)
- else:
- module.exit_json(changed=changed)
-
-
-def main():
- argument_spec = rax_argument_spec()
- argument_spec.update(
- dict(
- entity_id=dict(required=True),
- label=dict(required=True),
- check_type=dict(required=True),
- monitoring_zones_poll=dict(),
- target_hostname=dict(),
- target_alias=dict(),
- details=dict(type='dict', default={}),
- disabled=dict(type='bool', default=False),
- metadata=dict(type='dict', default={}),
- period=dict(type='int'),
- timeout=dict(type='int'),
- state=dict(default='present', choices=['present', 'absent'])
- )
- )
-
- module = AnsibleModule(
- argument_spec=argument_spec,
- required_together=rax_required_together()
- )
-
- if not HAS_PYRAX:
- module.fail_json(msg='pyrax is required for this module')
-
- entity_id = module.params.get('entity_id')
- label = module.params.get('label')
- check_type = module.params.get('check_type')
- monitoring_zones_poll = module.params.get('monitoring_zones_poll')
- target_hostname = module.params.get('target_hostname')
- target_alias = module.params.get('target_alias')
- details = module.params.get('details')
- disabled = module.boolean(module.params.get('disabled'))
- metadata = module.params.get('metadata')
- period = module.params.get('period')
- timeout = module.params.get('timeout')
-
- state = module.params.get('state')
-
- setup_rax_module(module, pyrax)
-
- cloud_check(module, state, entity_id, label, check_type,
- monitoring_zones_poll, target_hostname, target_alias, details,
- disabled, metadata, period, timeout)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/rax_mon_entity.py b/ansible_collections/community/general/plugins/modules/rax_mon_entity.py
deleted file mode 100644
index fbad9f98f..000000000
--- a/ansible_collections/community/general/plugins/modules/rax_mon_entity.py
+++ /dev/null
@@ -1,201 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-# Copyright Ansible Project
-# 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: rax_mon_entity
-short_description: Create or delete a Rackspace Cloud Monitoring entity
-description:
-- Create or delete a Rackspace Cloud Monitoring entity, which represents a device
- to monitor. Entities associate checks and alarms with a target system and
- provide a convenient, centralized place to store IP addresses. Rackspace
- monitoring module flow | *rax_mon_entity* -> rax_mon_check ->
- rax_mon_notification -> rax_mon_notification_plan -> rax_mon_alarm
-attributes:
- check_mode:
- support: none
- diff_mode:
- support: none
-options:
- label:
- type: str
- description:
- - Defines a name for this entity. Must be a non-empty string between 1 and
- 255 characters long.
- required: true
- state:
- type: str
- description:
- - Ensure that an entity with this C(name) exists or does not exist.
- choices: ["present", "absent"]
- default: present
- agent_id:
- type: str
- description:
- - Rackspace monitoring agent on the target device to which this entity is
- bound. Necessary to collect C(agent.) rax_mon_checks against this entity.
- named_ip_addresses:
- type: dict
- default: {}
- description:
- - Hash of IP addresses that may be referenced by name by rax_mon_checks
- added to this entity. Must be a dictionary of with keys that are names
- between 1 and 64 characters long, and values that are valid IPv4 or IPv6
- addresses.
- metadata:
- type: dict
- default: {}
- description:
- - Hash of arbitrary C(name), C(value) pairs that are passed to associated
- rax_mon_alarms. Names and values must all be between 1 and 255 characters
- long.
-author: Ash Wilson (@smashwilson)
-extends_documentation_fragment:
- - community.general.rackspace.openstack
- - community.general.attributes
-
-'''
-
-EXAMPLES = '''
-- name: Entity example
- gather_facts: false
- hosts: local
- connection: local
- tasks:
- - name: Ensure an entity exists
- community.general.rax_mon_entity:
- credentials: ~/.rax_pub
- state: present
- label: my_entity
- named_ip_addresses:
- web_box: 192.0.2.4
- db_box: 192.0.2.5
- meta:
- hurf: durf
- register: the_entity
-'''
-
-try:
- import pyrax
- HAS_PYRAX = True
-except ImportError:
- HAS_PYRAX = False
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.community.general.plugins.module_utils.rax import rax_argument_spec, rax_required_together, setup_rax_module
-
-
-def cloud_monitoring(module, state, label, agent_id, named_ip_addresses,
- metadata):
-
- if len(label) < 1 or len(label) > 255:
- module.fail_json(msg='label must be between 1 and 255 characters long')
-
- changed = False
-
- cm = pyrax.cloud_monitoring
- if not cm:
- module.fail_json(msg='Failed to instantiate client. This typically '
- 'indicates an invalid region or an incorrectly '
- 'capitalized region name.')
-
- existing = []
- for entity in cm.list_entities():
- if label == entity.label:
- existing.append(entity)
-
- entity = None
-
- if existing:
- entity = existing[0]
-
- if state == 'present':
- should_update = False
- should_delete = False
- should_create = False
-
- if len(existing) > 1:
- module.fail_json(msg='%s existing entities have the label %s.' %
- (len(existing), label))
-
- if entity:
- if named_ip_addresses and named_ip_addresses != entity.ip_addresses:
- should_delete = should_create = True
-
- # Change an existing Entity, unless there's nothing to do.
- should_update = agent_id and agent_id != entity.agent_id or \
- (metadata and metadata != entity.metadata)
-
- if should_update and not should_delete:
- entity.update(agent_id, metadata)
- changed = True
-
- if should_delete:
- entity.delete()
- else:
- should_create = True
-
- if should_create:
- # Create a new Entity.
- entity = cm.create_entity(label=label, agent=agent_id,
- ip_addresses=named_ip_addresses,
- metadata=metadata)
- changed = True
- else:
- # Delete the existing Entities.
- for e in existing:
- e.delete()
- changed = True
-
- if entity:
- entity_dict = {
- "id": entity.id,
- "name": entity.name,
- "agent_id": entity.agent_id,
- }
- module.exit_json(changed=changed, entity=entity_dict)
- else:
- module.exit_json(changed=changed)
-
-
-def main():
- argument_spec = rax_argument_spec()
- argument_spec.update(
- dict(
- state=dict(default='present', choices=['present', 'absent']),
- label=dict(required=True),
- agent_id=dict(),
- named_ip_addresses=dict(type='dict', default={}),
- metadata=dict(type='dict', default={})
- )
- )
-
- module = AnsibleModule(
- argument_spec=argument_spec,
- required_together=rax_required_together()
- )
-
- if not HAS_PYRAX:
- module.fail_json(msg='pyrax is required for this module')
-
- state = module.params.get('state')
-
- label = module.params.get('label')
- agent_id = module.params.get('agent_id')
- named_ip_addresses = module.params.get('named_ip_addresses')
- metadata = module.params.get('metadata')
-
- setup_rax_module(module, pyrax)
-
- cloud_monitoring(module, state, label, agent_id, named_ip_addresses, metadata)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/rax_mon_notification.py b/ansible_collections/community/general/plugins/modules/rax_mon_notification.py
deleted file mode 100644
index 7539f2a37..000000000
--- a/ansible_collections/community/general/plugins/modules/rax_mon_notification.py
+++ /dev/null
@@ -1,182 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-# Copyright Ansible Project
-# 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: rax_mon_notification
-short_description: Create or delete a Rackspace Cloud Monitoring notification
-description:
-- Create or delete a Rackspace Cloud Monitoring notification that specifies a
- channel that can be used to communicate alarms, such as email, webhooks, or
- PagerDuty. Rackspace monitoring module flow | rax_mon_entity -> rax_mon_check ->
- *rax_mon_notification* -> rax_mon_notification_plan -> rax_mon_alarm
-attributes:
- check_mode:
- support: none
- diff_mode:
- support: none
-options:
- state:
- type: str
- description:
- - Ensure that the notification with this O(label) exists or does not exist.
- choices: ['present', 'absent']
- default: present
- label:
- type: str
- description:
- - Defines a friendly name for this notification. String between 1 and 255
- characters long.
- required: true
- notification_type:
- type: str
- description:
- - A supported notification type.
- choices: ["webhook", "email", "pagerduty"]
- required: true
- details:
- type: dict
- description:
- - Dictionary of key-value pairs used to initialize the notification.
- Required keys and meanings vary with notification type. See
- http://docs.rackspace.com/cm/api/v1.0/cm-devguide/content/
- service-notification-types-crud.html for details.
- required: true
-author: Ash Wilson (@smashwilson)
-extends_documentation_fragment:
- - community.general.rackspace.openstack
- - community.general.attributes
-
-'''
-
-EXAMPLES = '''
-- name: Monitoring notification example
- gather_facts: false
- hosts: local
- connection: local
- tasks:
- - name: Email me when something goes wrong.
- rax_mon_entity:
- credentials: ~/.rax_pub
- label: omg
- type: email
- details:
- address: me@mailhost.com
- register: the_notification
-'''
-
-try:
- import pyrax
- HAS_PYRAX = True
-except ImportError:
- HAS_PYRAX = False
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.community.general.plugins.module_utils.rax import rax_argument_spec, rax_required_together, setup_rax_module
-
-
-def notification(module, state, label, notification_type, details):
-
- if len(label) < 1 or len(label) > 255:
- module.fail_json(msg='label must be between 1 and 255 characters long')
-
- changed = False
- notification = None
-
- cm = pyrax.cloud_monitoring
- if not cm:
- module.fail_json(msg='Failed to instantiate client. This typically '
- 'indicates an invalid region or an incorrectly '
- 'capitalized region name.')
-
- existing = []
- for n in cm.list_notifications():
- if n.label == label:
- existing.append(n)
-
- if existing:
- notification = existing[0]
-
- if state == 'present':
- should_update = False
- should_delete = False
- should_create = False
-
- if len(existing) > 1:
- module.fail_json(msg='%s existing notifications are labelled %s.' %
- (len(existing), label))
-
- if notification:
- should_delete = (notification_type != notification.type)
-
- should_update = (details != notification.details)
-
- if should_update and not should_delete:
- notification.update(details=notification.details)
- changed = True
-
- if should_delete:
- notification.delete()
- else:
- should_create = True
-
- if should_create:
- notification = cm.create_notification(notification_type,
- label=label, details=details)
- changed = True
- else:
- for n in existing:
- n.delete()
- changed = True
-
- if notification:
- notification_dict = {
- "id": notification.id,
- "type": notification.type,
- "label": notification.label,
- "details": notification.details
- }
- module.exit_json(changed=changed, notification=notification_dict)
- else:
- module.exit_json(changed=changed)
-
-
-def main():
- argument_spec = rax_argument_spec()
- argument_spec.update(
- dict(
- state=dict(default='present', choices=['present', 'absent']),
- label=dict(required=True),
- notification_type=dict(required=True, choices=['webhook', 'email', 'pagerduty']),
- details=dict(required=True, type='dict')
- )
- )
-
- module = AnsibleModule(
- argument_spec=argument_spec,
- required_together=rax_required_together()
- )
-
- if not HAS_PYRAX:
- module.fail_json(msg='pyrax is required for this module')
-
- state = module.params.get('state')
-
- label = module.params.get('label')
- notification_type = module.params.get('notification_type')
- details = module.params.get('details')
-
- setup_rax_module(module, pyrax)
-
- notification(module, state, label, notification_type, details)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/rax_mon_notification_plan.py b/ansible_collections/community/general/plugins/modules/rax_mon_notification_plan.py
deleted file mode 100644
index 31647304b..000000000
--- a/ansible_collections/community/general/plugins/modules/rax_mon_notification_plan.py
+++ /dev/null
@@ -1,191 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-# Copyright Ansible Project
-# 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: rax_mon_notification_plan
-short_description: Create or delete a Rackspace Cloud Monitoring notification
- plan.
-description:
-- Create or delete a Rackspace Cloud Monitoring notification plan by
- associating existing rax_mon_notifications with severity levels. Rackspace
- monitoring module flow | rax_mon_entity -> rax_mon_check ->
- rax_mon_notification -> *rax_mon_notification_plan* -> rax_mon_alarm
-attributes:
- check_mode:
- support: none
- diff_mode:
- support: none
-options:
- state:
- type: str
- description:
- - Ensure that the notification plan with this O(label) exists or does not
- exist.
- choices: ['present', 'absent']
- default: present
- label:
- type: str
- description:
- - Defines a friendly name for this notification plan. String between 1 and
- 255 characters long.
- required: true
- critical_state:
- type: list
- elements: str
- description:
- - Notification list to use when the alarm state is CRITICAL. Must be an
- array of valid rax_mon_notification ids.
- warning_state:
- type: list
- elements: str
- description:
- - Notification list to use when the alarm state is WARNING. Must be an array
- of valid rax_mon_notification ids.
- ok_state:
- type: list
- elements: str
- description:
- - Notification list to use when the alarm state is OK. Must be an array of
- valid rax_mon_notification ids.
-author: Ash Wilson (@smashwilson)
-extends_documentation_fragment:
- - community.general.rackspace.openstack
- - community.general.attributes
-
-'''
-
-EXAMPLES = '''
-- name: Example notification plan
- gather_facts: false
- hosts: local
- connection: local
- tasks:
- - name: Establish who gets called when.
- community.general.rax_mon_notification_plan:
- credentials: ~/.rax_pub
- state: present
- label: defcon1
- critical_state:
- - "{{ everyone['notification']['id'] }}"
- warning_state:
- - "{{ opsfloor['notification']['id'] }}"
- register: defcon1
-'''
-
-try:
- import pyrax
- HAS_PYRAX = True
-except ImportError:
- HAS_PYRAX = False
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.community.general.plugins.module_utils.rax import rax_argument_spec, rax_required_together, setup_rax_module
-
-
-def notification_plan(module, state, label, critical_state, warning_state, ok_state):
-
- if len(label) < 1 or len(label) > 255:
- module.fail_json(msg='label must be between 1 and 255 characters long')
-
- changed = False
- notification_plan = None
-
- cm = pyrax.cloud_monitoring
- if not cm:
- module.fail_json(msg='Failed to instantiate client. This typically '
- 'indicates an invalid region or an incorrectly '
- 'capitalized region name.')
-
- existing = []
- for n in cm.list_notification_plans():
- if n.label == label:
- existing.append(n)
-
- if existing:
- notification_plan = existing[0]
-
- if state == 'present':
- should_create = False
- should_delete = False
-
- if len(existing) > 1:
- module.fail_json(msg='%s notification plans are labelled %s.' %
- (len(existing), label))
-
- if notification_plan:
- should_delete = (critical_state and critical_state != notification_plan.critical_state) or \
- (warning_state and warning_state != notification_plan.warning_state) or \
- (ok_state and ok_state != notification_plan.ok_state)
-
- if should_delete:
- notification_plan.delete()
- should_create = True
- else:
- should_create = True
-
- if should_create:
- notification_plan = cm.create_notification_plan(label=label,
- critical_state=critical_state,
- warning_state=warning_state,
- ok_state=ok_state)
- changed = True
- else:
- for np in existing:
- np.delete()
- changed = True
-
- if notification_plan:
- notification_plan_dict = {
- "id": notification_plan.id,
- "critical_state": notification_plan.critical_state,
- "warning_state": notification_plan.warning_state,
- "ok_state": notification_plan.ok_state,
- "metadata": notification_plan.metadata
- }
- module.exit_json(changed=changed, notification_plan=notification_plan_dict)
- else:
- module.exit_json(changed=changed)
-
-
-def main():
- argument_spec = rax_argument_spec()
- argument_spec.update(
- dict(
- state=dict(default='present', choices=['present', 'absent']),
- label=dict(required=True),
- critical_state=dict(type='list', elements='str'),
- warning_state=dict(type='list', elements='str'),
- ok_state=dict(type='list', elements='str'),
- )
- )
-
- module = AnsibleModule(
- argument_spec=argument_spec,
- required_together=rax_required_together()
- )
-
- if not HAS_PYRAX:
- module.fail_json(msg='pyrax is required for this module')
-
- state = module.params.get('state')
-
- label = module.params.get('label')
- critical_state = module.params.get('critical_state')
- warning_state = module.params.get('warning_state')
- ok_state = module.params.get('ok_state')
-
- setup_rax_module(module, pyrax)
-
- notification_plan(module, state, label, critical_state, warning_state, ok_state)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/rax_network.py b/ansible_collections/community/general/plugins/modules/rax_network.py
deleted file mode 100644
index 22f148366..000000000
--- a/ansible_collections/community/general/plugins/modules/rax_network.py
+++ /dev/null
@@ -1,146 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-# Copyright Ansible Project
-# 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: rax_network
-short_description: Create / delete an isolated network in Rackspace Public Cloud
-description:
- - creates / deletes a Rackspace Public Cloud isolated network.
-attributes:
- check_mode:
- support: none
- diff_mode:
- support: none
-options:
- state:
- type: str
- description:
- - Indicate desired state of the resource
- choices:
- - present
- - absent
- default: present
- label:
- type: str
- description:
- - Label (name) to give the network
- required: true
- cidr:
- type: str
- description:
- - cidr of the network being created
-author:
- - "Christopher H. Laco (@claco)"
- - "Jesse Keating (@omgjlk)"
-extends_documentation_fragment:
- - community.general.rackspace.openstack
- - community.general.attributes
-
-'''
-
-EXAMPLES = '''
-- name: Build an Isolated Network
- gather_facts: false
-
- tasks:
- - name: Network create request
- local_action:
- module: rax_network
- credentials: ~/.raxpub
- label: my-net
- cidr: 192.168.3.0/24
- state: present
-'''
-
-try:
- import pyrax
- HAS_PYRAX = True
-except ImportError:
- HAS_PYRAX = False
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.community.general.plugins.module_utils.rax import rax_argument_spec, rax_required_together, setup_rax_module
-
-
-def cloud_network(module, state, label, cidr):
- changed = False
- network = None
- networks = []
-
- if not pyrax.cloud_networks:
- module.fail_json(msg='Failed to instantiate client. This '
- 'typically indicates an invalid region or an '
- 'incorrectly capitalized region name.')
-
- if state == 'present':
- if not cidr:
- module.fail_json(msg='missing required arguments: cidr')
-
- try:
- network = pyrax.cloud_networks.find_network_by_label(label)
- except pyrax.exceptions.NetworkNotFound:
- try:
- network = pyrax.cloud_networks.create(label, cidr=cidr)
- changed = True
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
-
- elif state == 'absent':
- try:
- network = pyrax.cloud_networks.find_network_by_label(label)
- network.delete()
- changed = True
- except pyrax.exceptions.NetworkNotFound:
- pass
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
-
- if network:
- instance = dict(id=network.id,
- label=network.label,
- cidr=network.cidr)
- networks.append(instance)
-
- module.exit_json(changed=changed, networks=networks)
-
-
-def main():
- argument_spec = rax_argument_spec()
- argument_spec.update(
- dict(
- state=dict(default='present',
- choices=['present', 'absent']),
- label=dict(required=True),
- cidr=dict()
- )
- )
-
- module = AnsibleModule(
- argument_spec=argument_spec,
- required_together=rax_required_together(),
- )
-
- if not HAS_PYRAX:
- module.fail_json(msg='pyrax is required for this module')
-
- state = module.params.get('state')
- label = module.params.get('label')
- cidr = module.params.get('cidr')
-
- setup_rax_module(module, pyrax)
-
- cloud_network(module, state, label, cidr)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/rax_queue.py b/ansible_collections/community/general/plugins/modules/rax_queue.py
deleted file mode 100644
index 00f730b27..000000000
--- a/ansible_collections/community/general/plugins/modules/rax_queue.py
+++ /dev/null
@@ -1,147 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-# Copyright Ansible Project
-# 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: rax_queue
-short_description: Create / delete a queue in Rackspace Public Cloud
-description:
- - creates / deletes a Rackspace Public Cloud queue.
-attributes:
- check_mode:
- support: none
- diff_mode:
- support: none
-options:
- name:
- type: str
- description:
- - Name to give the queue
- state:
- type: str
- description:
- - Indicate desired state of the resource
- choices:
- - present
- - absent
- default: present
-author:
- - "Christopher H. Laco (@claco)"
- - "Matt Martz (@sivel)"
-extends_documentation_fragment:
- - community.general.rackspace
- - community.general.rackspace.openstack
- - community.general.attributes
-
-'''
-
-EXAMPLES = '''
-- name: Build a Queue
- gather_facts: false
- hosts: local
- connection: local
- tasks:
- - name: Queue create request
- local_action:
- module: rax_queue
- credentials: ~/.raxpub
- name: my-queue
- region: DFW
- state: present
- register: my_queue
-'''
-
-try:
- import pyrax
- HAS_PYRAX = True
-except ImportError:
- HAS_PYRAX = False
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.community.general.plugins.module_utils.rax import rax_argument_spec, rax_required_together, setup_rax_module
-
-
-def cloud_queue(module, state, name):
- for arg in (state, name):
- if not arg:
- module.fail_json(msg='%s is required for rax_queue' % arg)
-
- changed = False
- queues = []
- instance = {}
-
- cq = pyrax.queues
- if not cq:
- module.fail_json(msg='Failed to instantiate client. This '
- 'typically indicates an invalid region or an '
- 'incorrectly capitalized region name.')
-
- for queue in cq.list():
- if name != queue.name:
- continue
-
- queues.append(queue)
-
- if len(queues) > 1:
- module.fail_json(msg='Multiple Queues were matched by name')
-
- if state == 'present':
- if not queues:
- try:
- queue = cq.create(name)
- changed = True
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
- else:
- queue = queues[0]
-
- instance = dict(name=queue.name)
- result = dict(changed=changed, queue=instance)
- module.exit_json(**result)
-
- elif state == 'absent':
- if queues:
- queue = queues[0]
- try:
- queue.delete()
- changed = True
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
-
- module.exit_json(changed=changed, queue=instance)
-
-
-def main():
- argument_spec = rax_argument_spec()
- argument_spec.update(
- dict(
- name=dict(),
- state=dict(default='present', choices=['present', 'absent']),
- )
- )
-
- module = AnsibleModule(
- argument_spec=argument_spec,
- required_together=rax_required_together()
- )
-
- if not HAS_PYRAX:
- module.fail_json(msg='pyrax is required for this module')
-
- name = module.params.get('name')
- state = module.params.get('state')
-
- setup_rax_module(module, pyrax)
-
- cloud_queue(module, state, name)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/rax_scaling_group.py b/ansible_collections/community/general/plugins/modules/rax_scaling_group.py
deleted file mode 100644
index f4bb79025..000000000
--- a/ansible_collections/community/general/plugins/modules/rax_scaling_group.py
+++ /dev/null
@@ -1,441 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-# Copyright Ansible Project
-# 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: rax_scaling_group
-short_description: Manipulate Rackspace Cloud Autoscale Groups
-description:
- - Manipulate Rackspace Cloud Autoscale Groups
-attributes:
- check_mode:
- support: none
- diff_mode:
- support: none
-options:
- config_drive:
- description:
- - Attach read-only configuration drive to server as label config-2
- type: bool
- default: false
- cooldown:
- type: int
- description:
- - The period of time, in seconds, that must pass before any scaling can
- occur after the previous scaling. Must be an integer between 0 and
- 86400 (24 hrs).
- default: 300
- disk_config:
- type: str
- description:
- - Disk partitioning strategy
- - If not specified, it will fallback to V(auto).
- choices:
- - auto
- - manual
- files:
- type: dict
- default: {}
- description:
- - 'Files to insert into the instance. Hash of C(remotepath: localpath)'
- flavor:
- type: str
- description:
- - flavor to use for the instance
- required: true
- image:
- type: str
- description:
- - image to use for the instance. Can be an C(id), C(human_id) or C(name).
- required: true
- key_name:
- type: str
- description:
- - key pair to use on the instance
- loadbalancers:
- type: list
- elements: dict
- description:
- - List of load balancer C(id) and C(port) hashes
- max_entities:
- type: int
- description:
- - The maximum number of entities that are allowed in the scaling group.
- Must be an integer between 0 and 1000.
- required: true
- meta:
- type: dict
- default: {}
- description:
- - A hash of metadata to associate with the instance
- min_entities:
- type: int
- description:
- - The minimum number of entities that are allowed in the scaling group.
- Must be an integer between 0 and 1000.
- required: true
- name:
- type: str
- description:
- - Name to give the scaling group
- required: true
- networks:
- type: list
- elements: str
- description:
- - The network to attach to the instances. If specified, you must include
- ALL networks including the public and private interfaces. Can be C(id)
- or C(label).
- default:
- - public
- - private
- server_name:
- type: str
- description:
- - The base name for servers created by Autoscale
- required: true
- state:
- type: str
- description:
- - Indicate desired state of the resource
- choices:
- - present
- - absent
- default: present
- user_data:
- type: str
- description:
- - Data to be uploaded to the servers config drive. This option implies
- O(config_drive). Can be a file path or a string
- wait:
- description:
- - wait for the scaling group to finish provisioning the minimum amount of
- servers
- type: bool
- default: false
- wait_timeout:
- type: int
- description:
- - how long before wait gives up, in seconds
- default: 300
-author: "Matt Martz (@sivel)"
-extends_documentation_fragment:
- - community.general.rackspace
- - community.general.rackspace.openstack
- - community.general.attributes
-
-'''
-
-EXAMPLES = '''
----
-- hosts: localhost
- gather_facts: false
- connection: local
- tasks:
- - community.general.rax_scaling_group:
- credentials: ~/.raxpub
- region: ORD
- cooldown: 300
- flavor: performance1-1
- image: bb02b1a3-bc77-4d17-ab5b-421d89850fca
- min_entities: 5
- max_entities: 10
- name: ASG Test
- server_name: asgtest
- loadbalancers:
- - id: 228385
- port: 80
- register: asg
-'''
-
-import base64
-import json
-import os
-import time
-
-try:
- import pyrax
- HAS_PYRAX = True
-except ImportError:
- HAS_PYRAX = False
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.community.general.plugins.module_utils.rax import (
- rax_argument_spec, rax_find_image, rax_find_network,
- rax_required_together, rax_to_dict, setup_rax_module,
- rax_scaling_group_personality_file,
-)
-from ansible.module_utils.six import string_types
-
-
-def rax_asg(module, cooldown=300, disk_config=None, files=None, flavor=None,
- image=None, key_name=None, loadbalancers=None, meta=None,
- min_entities=0, max_entities=0, name=None, networks=None,
- server_name=None, state='present', user_data=None,
- config_drive=False, wait=True, wait_timeout=300):
- files = {} if files is None else files
- loadbalancers = [] if loadbalancers is None else loadbalancers
- meta = {} if meta is None else meta
- networks = [] if networks is None else networks
-
- changed = False
-
- au = pyrax.autoscale
- if not au:
- module.fail_json(msg='Failed to instantiate clients. This '
- 'typically indicates an invalid region or an '
- 'incorrectly capitalized region name.')
-
- if user_data:
- config_drive = True
-
- if user_data and os.path.isfile(user_data):
- try:
- f = open(user_data)
- user_data = f.read()
- f.close()
- except Exception as e:
- module.fail_json(msg='Failed to load %s' % user_data)
-
- if state == 'present':
- # Normalize and ensure all metadata values are strings
- if meta:
- for k, v in meta.items():
- if isinstance(v, list):
- meta[k] = ','.join(['%s' % i for i in v])
- elif isinstance(v, dict):
- meta[k] = json.dumps(v)
- elif not isinstance(v, string_types):
- meta[k] = '%s' % v
-
- if image:
- image = rax_find_image(module, pyrax, image)
-
- nics = []
- if networks:
- for network in networks:
- nics.extend(rax_find_network(module, pyrax, network))
-
- for nic in nics:
- # pyrax is currently returning net-id, but we need uuid
- # this check makes this forward compatible for a time when
- # pyrax uses uuid instead
- if nic.get('net-id'):
- nic.update(uuid=nic['net-id'])
- del nic['net-id']
-
- # Handle the file contents
- personality = rax_scaling_group_personality_file(module, files)
-
- lbs = []
- if loadbalancers:
- for lb in loadbalancers:
- try:
- lb_id = int(lb.get('id'))
- except (ValueError, TypeError):
- module.fail_json(msg='Load balancer ID is not an integer: '
- '%s' % lb.get('id'))
- try:
- port = int(lb.get('port'))
- except (ValueError, TypeError):
- module.fail_json(msg='Load balancer port is not an '
- 'integer: %s' % lb.get('port'))
- if not lb_id or not port:
- continue
- lbs.append((lb_id, port))
-
- try:
- sg = au.find(name=name)
- except pyrax.exceptions.NoUniqueMatch as e:
- module.fail_json(msg='%s' % e.message)
- except pyrax.exceptions.NotFound:
- try:
- sg = au.create(name, cooldown=cooldown,
- min_entities=min_entities,
- max_entities=max_entities,
- launch_config_type='launch_server',
- server_name=server_name, image=image,
- flavor=flavor, disk_config=disk_config,
- metadata=meta, personality=personality,
- networks=nics, load_balancers=lbs,
- key_name=key_name, config_drive=config_drive,
- user_data=user_data)
- changed = True
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
-
- if not changed:
- # Scaling Group Updates
- group_args = {}
- if cooldown != sg.cooldown:
- group_args['cooldown'] = cooldown
-
- if min_entities != sg.min_entities:
- group_args['min_entities'] = min_entities
-
- if max_entities != sg.max_entities:
- group_args['max_entities'] = max_entities
-
- if group_args:
- changed = True
- sg.update(**group_args)
-
- # Launch Configuration Updates
- lc = sg.get_launch_config()
- lc_args = {}
- if server_name != lc.get('name'):
- lc_args['server_name'] = server_name
-
- if image != lc.get('image'):
- lc_args['image'] = image
-
- if flavor != lc.get('flavor'):
- lc_args['flavor'] = flavor
-
- disk_config = disk_config or 'AUTO'
- if ((disk_config or lc.get('disk_config')) and
- disk_config != lc.get('disk_config', 'AUTO')):
- lc_args['disk_config'] = disk_config
-
- if (meta or lc.get('meta')) and meta != lc.get('metadata'):
- lc_args['metadata'] = meta
-
- test_personality = []
- for p in personality:
- test_personality.append({
- 'path': p['path'],
- 'contents': base64.b64encode(p['contents'])
- })
- if ((test_personality or lc.get('personality')) and
- test_personality != lc.get('personality')):
- lc_args['personality'] = personality
-
- if nics != lc.get('networks'):
- lc_args['networks'] = nics
-
- if lbs != lc.get('load_balancers'):
- # Work around for https://github.com/rackspace/pyrax/pull/393
- lc_args['load_balancers'] = sg.manager._resolve_lbs(lbs)
-
- if key_name != lc.get('key_name'):
- lc_args['key_name'] = key_name
-
- if config_drive != lc.get('config_drive', False):
- lc_args['config_drive'] = config_drive
-
- if (user_data and
- base64.b64encode(user_data) != lc.get('user_data')):
- lc_args['user_data'] = user_data
-
- if lc_args:
- # Work around for https://github.com/rackspace/pyrax/pull/389
- if 'flavor' not in lc_args:
- lc_args['flavor'] = lc.get('flavor')
- changed = True
- sg.update_launch_config(**lc_args)
-
- sg.get()
-
- if wait:
- end_time = time.time() + wait_timeout
- infinite = wait_timeout == 0
- while infinite or time.time() < end_time:
- state = sg.get_state()
- if state["pending_capacity"] == 0:
- break
-
- time.sleep(5)
-
- module.exit_json(changed=changed, autoscale_group=rax_to_dict(sg))
-
- else:
- try:
- sg = au.find(name=name)
- sg.delete()
- changed = True
- except pyrax.exceptions.NotFound as e:
- sg = {}
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
-
- module.exit_json(changed=changed, autoscale_group=rax_to_dict(sg))
-
-
-def main():
- argument_spec = rax_argument_spec()
- argument_spec.update(
- dict(
- config_drive=dict(default=False, type='bool'),
- cooldown=dict(type='int', default=300),
- disk_config=dict(choices=['auto', 'manual']),
- files=dict(type='dict', default={}),
- flavor=dict(required=True),
- image=dict(required=True),
- key_name=dict(),
- loadbalancers=dict(type='list', elements='dict'),
- meta=dict(type='dict', default={}),
- min_entities=dict(type='int', required=True),
- max_entities=dict(type='int', required=True),
- name=dict(required=True),
- networks=dict(type='list', elements='str', default=['public', 'private']),
- server_name=dict(required=True),
- state=dict(default='present', choices=['present', 'absent']),
- user_data=dict(no_log=True),
- wait=dict(default=False, type='bool'),
- wait_timeout=dict(default=300, type='int'),
- )
- )
-
- module = AnsibleModule(
- argument_spec=argument_spec,
- required_together=rax_required_together(),
- )
-
- if not HAS_PYRAX:
- module.fail_json(msg='pyrax is required for this module')
-
- config_drive = module.params.get('config_drive')
- cooldown = module.params.get('cooldown')
- disk_config = module.params.get('disk_config')
- if disk_config:
- disk_config = disk_config.upper()
- files = module.params.get('files')
- flavor = module.params.get('flavor')
- image = module.params.get('image')
- key_name = module.params.get('key_name')
- loadbalancers = module.params.get('loadbalancers')
- meta = module.params.get('meta')
- min_entities = module.params.get('min_entities')
- max_entities = module.params.get('max_entities')
- name = module.params.get('name')
- networks = module.params.get('networks')
- server_name = module.params.get('server_name')
- state = module.params.get('state')
- user_data = module.params.get('user_data')
-
- if not 0 <= min_entities <= 1000 or not 0 <= max_entities <= 1000:
- module.fail_json(msg='min_entities and max_entities must be an '
- 'integer between 0 and 1000')
-
- if not 0 <= cooldown <= 86400:
- module.fail_json(msg='cooldown must be an integer between 0 and 86400')
-
- setup_rax_module(module, pyrax)
-
- rax_asg(module, cooldown=cooldown, disk_config=disk_config,
- files=files, flavor=flavor, image=image, meta=meta,
- key_name=key_name, loadbalancers=loadbalancers,
- min_entities=min_entities, max_entities=max_entities,
- name=name, networks=networks, server_name=server_name,
- state=state, config_drive=config_drive, user_data=user_data)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/rax_scaling_policy.py b/ansible_collections/community/general/plugins/modules/rax_scaling_policy.py
deleted file mode 100644
index 2869a6910..000000000
--- a/ansible_collections/community/general/plugins/modules/rax_scaling_policy.py
+++ /dev/null
@@ -1,294 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-# Copyright Ansible Project
-# 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: rax_scaling_policy
-short_description: Manipulate Rackspace Cloud Autoscale Scaling Policy
-description:
- - Manipulate Rackspace Cloud Autoscale Scaling Policy
-attributes:
- check_mode:
- support: none
- diff_mode:
- support: none
-options:
- at:
- type: str
- description:
- - The UTC time when this policy will be executed. The time must be
- formatted according to C(yyyy-MM-dd'T'HH:mm:ss.SSS) such as
- V(2013-05-19T08:07:08Z)
- change:
- type: int
- description:
- - The change, either as a number of servers or as a percentage, to make
- in the scaling group. If this is a percentage, you must set
- O(is_percent) to V(true) also.
- cron:
- type: str
- description:
- - The time when the policy will be executed, as a cron entry. For
- example, if this is parameter is set to V(1 0 * * *).
- cooldown:
- type: int
- description:
- - The period of time, in seconds, that must pass before any scaling can
- occur after the previous scaling. Must be an integer between 0 and
- 86400 (24 hrs).
- default: 300
- desired_capacity:
- type: int
- description:
- - The desired server capacity of the scaling the group; that is, how
- many servers should be in the scaling group.
- is_percent:
- description:
- - Whether the value in O(change) is a percent value
- default: false
- type: bool
- name:
- type: str
- description:
- - Name to give the policy
- required: true
- policy_type:
- type: str
- description:
- - The type of policy that will be executed for the current release.
- choices:
- - webhook
- - schedule
- required: true
- scaling_group:
- type: str
- description:
- - Name of the scaling group that this policy will be added to
- required: true
- state:
- type: str
- description:
- - Indicate desired state of the resource
- choices:
- - present
- - absent
- default: present
-author: "Matt Martz (@sivel)"
-extends_documentation_fragment:
- - community.general.rackspace
- - community.general.rackspace.openstack
- - community.general.attributes
-
-'''
-
-EXAMPLES = '''
----
-- hosts: localhost
- gather_facts: false
- connection: local
- tasks:
- - community.general.rax_scaling_policy:
- credentials: ~/.raxpub
- region: ORD
- at: '2013-05-19T08:07:08Z'
- change: 25
- cooldown: 300
- is_percent: true
- name: ASG Test Policy - at
- policy_type: schedule
- scaling_group: ASG Test
- register: asps_at
-
- - community.general.rax_scaling_policy:
- credentials: ~/.raxpub
- region: ORD
- cron: '1 0 * * *'
- change: 25
- cooldown: 300
- is_percent: true
- name: ASG Test Policy - cron
- policy_type: schedule
- scaling_group: ASG Test
- register: asp_cron
-
- - community.general.rax_scaling_policy:
- credentials: ~/.raxpub
- region: ORD
- cooldown: 300
- desired_capacity: 5
- name: ASG Test Policy - webhook
- policy_type: webhook
- scaling_group: ASG Test
- register: asp_webhook
-'''
-
-try:
- import pyrax
- HAS_PYRAX = True
-except ImportError:
- HAS_PYRAX = False
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.community.general.plugins.module_utils.rax import (UUID, rax_argument_spec, rax_required_together, rax_to_dict,
- setup_rax_module)
-
-
-def rax_asp(module, at=None, change=0, cron=None, cooldown=300,
- desired_capacity=0, is_percent=False, name=None,
- policy_type=None, scaling_group=None, state='present'):
- changed = False
-
- au = pyrax.autoscale
- if not au:
- module.fail_json(msg='Failed to instantiate client. This '
- 'typically indicates an invalid region or an '
- 'incorrectly capitalized region name.')
-
- try:
- UUID(scaling_group)
- except ValueError:
- try:
- sg = au.find(name=scaling_group)
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
- else:
- try:
- sg = au.get(scaling_group)
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
-
- if state == 'present':
- policies = filter(lambda p: name == p.name, sg.list_policies())
- if len(policies) > 1:
- module.fail_json(msg='No unique policy match found by name')
- if at:
- args = dict(at=at)
- elif cron:
- args = dict(cron=cron)
- else:
- args = None
-
- if not policies:
- try:
- policy = sg.add_policy(name, policy_type=policy_type,
- cooldown=cooldown, change=change,
- is_percent=is_percent,
- desired_capacity=desired_capacity,
- args=args)
- changed = True
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
-
- else:
- policy = policies[0]
- kwargs = {}
- if policy_type != policy.type:
- kwargs['policy_type'] = policy_type
-
- if cooldown != policy.cooldown:
- kwargs['cooldown'] = cooldown
-
- if hasattr(policy, 'change') and change != policy.change:
- kwargs['change'] = change
-
- if hasattr(policy, 'changePercent') and is_percent is False:
- kwargs['change'] = change
- kwargs['is_percent'] = False
- elif hasattr(policy, 'change') and is_percent is True:
- kwargs['change'] = change
- kwargs['is_percent'] = True
-
- if hasattr(policy, 'desiredCapacity') and change:
- kwargs['change'] = change
- elif ((hasattr(policy, 'change') or
- hasattr(policy, 'changePercent')) and desired_capacity):
- kwargs['desired_capacity'] = desired_capacity
-
- if hasattr(policy, 'args') and args != policy.args:
- kwargs['args'] = args
-
- if kwargs:
- policy.update(**kwargs)
- changed = True
-
- policy.get()
-
- module.exit_json(changed=changed, autoscale_policy=rax_to_dict(policy))
-
- else:
- try:
- policies = filter(lambda p: name == p.name, sg.list_policies())
- if len(policies) > 1:
- module.fail_json(msg='No unique policy match found by name')
- elif not policies:
- policy = {}
- else:
- policy.delete()
- changed = True
- except Exception as e:
- module.fail_json(msg='%s' % e.message)
-
- module.exit_json(changed=changed, autoscale_policy=rax_to_dict(policy))
-
-
-def main():
- argument_spec = rax_argument_spec()
- argument_spec.update(
- dict(
- at=dict(),
- change=dict(type='int'),
- cron=dict(),
- cooldown=dict(type='int', default=300),
- desired_capacity=dict(type='int'),
- is_percent=dict(type='bool', default=False),
- name=dict(required=True),
- policy_type=dict(required=True, choices=['webhook', 'schedule']),
- scaling_group=dict(required=True),
- state=dict(default='present', choices=['present', 'absent']),
- )
- )
-
- module = AnsibleModule(
- argument_spec=argument_spec,
- required_together=rax_required_together(),
- mutually_exclusive=[
- ['cron', 'at'],
- ['change', 'desired_capacity'],
- ]
- )
-
- if not HAS_PYRAX:
- module.fail_json(msg='pyrax is required for this module')
-
- at = module.params.get('at')
- change = module.params.get('change')
- cron = module.params.get('cron')
- cooldown = module.params.get('cooldown')
- desired_capacity = module.params.get('desired_capacity')
- is_percent = module.params.get('is_percent')
- name = module.params.get('name')
- policy_type = module.params.get('policy_type')
- scaling_group = module.params.get('scaling_group')
- state = module.params.get('state')
-
- if (at or cron) and policy_type == 'webhook':
- module.fail_json(msg='policy_type=schedule is required for a time '
- 'based policy')
-
- setup_rax_module(module, pyrax)
-
- rax_asp(module, at=at, change=change, cron=cron, cooldown=cooldown,
- desired_capacity=desired_capacity, is_percent=is_percent,
- name=name, policy_type=policy_type, scaling_group=scaling_group,
- state=state)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/redfish_command.py b/ansible_collections/community/general/plugins/modules/redfish_command.py
index 06224235a..d351e7c1d 100644
--- a/ansible_collections/community/general/plugins/modules/redfish_command.py
+++ b/ansible_collections/community/general/plugins/modules/redfish_command.py
@@ -109,9 +109,10 @@ options:
timeout:
description:
- Timeout in seconds for HTTP requests to OOB controller.
- - The default value for this param is C(10) but that is being deprecated
- and it will be replaced with C(60) in community.general 9.0.0.
+ - The default value for this parameter changed from V(10) to V(60)
+ in community.general 9.0.0.
type: int
+ default: 60
boot_override_mode:
description:
- Boot mode when using an override.
@@ -805,7 +806,7 @@ def main():
update_username=dict(type='str', aliases=["account_updatename"]),
account_properties=dict(type='dict', default={}),
bootdevice=dict(),
- timeout=dict(type='int'),
+ timeout=dict(type='int', default=60),
uefi_target=dict(),
boot_next=dict(),
boot_override_mode=dict(choices=['Legacy', 'UEFI']),
@@ -854,16 +855,6 @@ def main():
supports_check_mode=False
)
- if module.params['timeout'] is None:
- timeout = 10
- module.deprecate(
- 'The default value {0} for parameter param1 is being deprecated and it will be replaced by {1}'.format(
- 10, 60
- ),
- version='9.0.0',
- collection_name='community.general'
- )
-
category = module.params['category']
command_list = module.params['command']
diff --git a/ansible_collections/community/general/plugins/modules/redfish_config.py b/ansible_collections/community/general/plugins/modules/redfish_config.py
index 1fea9e7cd..129b33b2e 100644
--- a/ansible_collections/community/general/plugins/modules/redfish_config.py
+++ b/ansible_collections/community/general/plugins/modules/redfish_config.py
@@ -64,9 +64,10 @@ options:
timeout:
description:
- Timeout in seconds for HTTP requests to OOB controller.
- - The default value for this param is C(10) but that is being deprecated
- and it will be replaced with C(60) in community.general 9.0.0.
+ - The default value for this parameter changed from V(10) to V(60)
+ in community.general 9.0.0.
type: int
+ default: 60
boot_order:
required: false
description:
@@ -384,7 +385,7 @@ def main():
password=dict(no_log=True),
auth_token=dict(no_log=True),
bios_attributes=dict(type='dict', default={}),
- timeout=dict(type='int'),
+ timeout=dict(type='int', default=60),
boot_order=dict(type='list', elements='str', default=[]),
network_protocols=dict(
type='dict',
@@ -418,16 +419,6 @@ def main():
supports_check_mode=False
)
- if module.params['timeout'] is None:
- timeout = 10
- module.deprecate(
- 'The default value {0} for parameter param1 is being deprecated and it will be replaced by {1}'.format(
- 10, 60
- ),
- version='9.0.0',
- collection_name='community.general'
- )
-
category = module.params['category']
command_list = module.params['command']
diff --git a/ansible_collections/community/general/plugins/modules/redfish_info.py b/ansible_collections/community/general/plugins/modules/redfish_info.py
index 0b39bb6fa..3b594b7a2 100644
--- a/ansible_collections/community/general/plugins/modules/redfish_info.py
+++ b/ansible_collections/community/general/plugins/modules/redfish_info.py
@@ -63,9 +63,10 @@ options:
timeout:
description:
- Timeout in seconds for HTTP requests to OOB controller.
- - The default value for this param is C(10) but that is being deprecated
- and it will be replaced with C(60) in community.general 9.0.0.
+ - The default value for this parameter changed from V(10) to V(60)
+ in community.general 9.0.0.
type: int
+ default: 60
update_handle:
required: false
description:
@@ -407,7 +408,7 @@ def main():
username=dict(),
password=dict(no_log=True),
auth_token=dict(no_log=True),
- timeout=dict(type='int'),
+ timeout=dict(type='int', default=60),
update_handle=dict(),
manager=dict(),
),
@@ -423,16 +424,6 @@ def main():
supports_check_mode=True,
)
- if module.params['timeout'] is None:
- timeout = 10
- module.deprecate(
- 'The default value {0} for parameter param1 is being deprecated and it will be replaced by {1}'.format(
- 10, 60
- ),
- version='9.0.0',
- collection_name='community.general'
- )
-
# admin credentials used for authentication
creds = {'user': module.params['username'],
'pswd': module.params['password'],
diff --git a/ansible_collections/community/general/plugins/modules/redhat_subscription.py b/ansible_collections/community/general/plugins/modules/redhat_subscription.py
index d4b47d5d5..4a7aac483 100644
--- a/ansible_collections/community/general/plugins/modules/redhat_subscription.py
+++ b/ansible_collections/community/general/plugins/modules/redhat_subscription.py
@@ -123,10 +123,9 @@ options:
description:
- Upon successful registration, auto-consume available subscriptions
- |
- Please note that the alias O(autosubscribe) will be removed in
+ Please note that the alias O(ignore:autosubscribe) was removed in
community.general 9.0.0.
type: bool
- aliases: [autosubscribe]
activationkey:
description:
- supply an activation key for use with registration
@@ -1106,17 +1105,7 @@ def main():
'server_port': {},
'rhsm_baseurl': {},
'rhsm_repo_ca_cert': {},
- 'auto_attach': {
- 'type': 'bool',
- 'aliases': ['autosubscribe'],
- 'deprecated_aliases': [
- {
- 'name': 'autosubscribe',
- 'version': '9.0.0',
- 'collection_name': 'community.general',
- },
- ],
- },
+ 'auto_attach': {'type': 'bool'},
'activationkey': {'no_log': True},
'org_id': {},
'environment': {},
diff --git a/ansible_collections/community/general/plugins/modules/slackpkg.py b/ansible_collections/community/general/plugins/modules/slackpkg.py
index e3d7a1542..9347db159 100644
--- a/ansible_collections/community/general/plugins/modules/slackpkg.py
+++ b/ansible_collections/community/general/plugins/modules/slackpkg.py
@@ -106,9 +106,8 @@ def remove_packages(module, slackpkg_path, packages):
continue
if not module.check_mode:
- rc, out, err = module.run_command("%s -default_answer=y -batch=on \
- remove %s" % (slackpkg_path,
- package))
+ rc, out, err = module.run_command(
+ [slackpkg_path, "-default_answer=y", "-batch=on", "remove", package])
if not module.check_mode and query_package(module, slackpkg_path,
package):
@@ -132,9 +131,8 @@ def install_packages(module, slackpkg_path, packages):
continue
if not module.check_mode:
- rc, out, err = module.run_command("%s -default_answer=y -batch=on \
- install %s" % (slackpkg_path,
- package))
+ rc, out, err = module.run_command(
+ [slackpkg_path, "-default_answer=y", "-batch=on", "install", package])
if not module.check_mode and not query_package(module, slackpkg_path,
package):
@@ -155,9 +153,8 @@ def upgrade_packages(module, slackpkg_path, packages):
for package in packages:
if not module.check_mode:
- rc, out, err = module.run_command("%s -default_answer=y -batch=on \
- upgrade %s" % (slackpkg_path,
- package))
+ rc, out, err = module.run_command(
+ [slackpkg_path, "-default_answer=y", "-batch=on", "upgrade", package])
if not module.check_mode and not query_package(module, slackpkg_path,
package):
@@ -174,7 +171,8 @@ def upgrade_packages(module, slackpkg_path, packages):
def update_cache(module, slackpkg_path):
- rc, out, err = module.run_command("%s -batch=on update" % (slackpkg_path))
+ rc, out, err = module.run_command(
+ [slackpkg_path, "-batch=on", "update"])
if rc != 0:
module.fail_json(msg="Could not update package cache")
diff --git a/ansible_collections/community/general/plugins/modules/snap.py b/ansible_collections/community/general/plugins/modules/snap.py
index fd1676480..16c3aec48 100644
--- a/ansible_collections/community/general/plugins/modules/snap.py
+++ b/ansible_collections/community/general/plugins/modules/snap.py
@@ -194,6 +194,7 @@ class Snap(StateModuleHelper):
},
supports_check_mode=True,
)
+ use_old_vardict = False
@staticmethod
def _first_non_zero(a):
@@ -405,8 +406,8 @@ class Snap(StateModuleHelper):
def state_present(self):
- self.vars.meta('classic').set(output=True)
- self.vars.meta('channel').set(output=True)
+ self.vars.set_meta('classic', output=True)
+ self.vars.set_meta('channel', output=True)
actionable_refresh = [snap for snap in self.vars.name if self.vars.snap_status_map[snap] == Snap.CHANNEL_MISMATCH]
if actionable_refresh:
diff --git a/ansible_collections/community/general/plugins/modules/snap_alias.py b/ansible_collections/community/general/plugins/modules/snap_alias.py
index 54448c6f3..ba54a9e15 100644
--- a/ansible_collections/community/general/plugins/modules/snap_alias.py
+++ b/ansible_collections/community/general/plugins/modules/snap_alias.py
@@ -105,6 +105,7 @@ class SnapAlias(StateModuleHelper):
],
supports_check_mode=True,
)
+ use_old_vardict = False
def _aliases(self):
n = self.vars.name
diff --git a/ansible_collections/community/general/plugins/modules/stackdriver.py b/ansible_collections/community/general/plugins/modules/stackdriver.py
deleted file mode 100644
index 35b2b0dc1..000000000
--- a/ansible_collections/community/general/plugins/modules/stackdriver.py
+++ /dev/null
@@ -1,228 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-# Copyright Ansible Project
-# 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 = '''
-
-deprecated:
- removed_in: 9.0.0
- why: the endpoints this module relies on do not exist any more and do not resolve to IPs in DNS.
- alternative: no known alternative at this point
-
-module: stackdriver
-short_description: Send code deploy and annotation events to stackdriver
-description:
- - Send code deploy and annotation events to Stackdriver
-author: "Ben Whaley (@bwhaley)"
-extends_documentation_fragment:
- - community.general.attributes
-attributes:
- check_mode:
- support: full
- diff_mode:
- support: none
-options:
- key:
- type: str
- description:
- - API key.
- required: true
- event:
- type: str
- description:
- - The type of event to send, either annotation or deploy
- choices: ['annotation', 'deploy']
- required: true
- revision_id:
- type: str
- description:
- - The revision of the code that was deployed. Required for deploy events
- deployed_by:
- type: str
- description:
- - The person or robot responsible for deploying the code
- default: "Ansible"
- deployed_to:
- type: str
- description:
- - "The environment code was deployed to. (ie: development, staging, production)"
- repository:
- type: str
- description:
- - The repository (or project) deployed
- msg:
- type: str
- description:
- - The contents of the annotation message, in plain text. Limited to 256 characters. Required for annotation.
- annotated_by:
- type: str
- description:
- - The person or robot who the annotation should be attributed to.
- default: "Ansible"
- level:
- type: str
- description:
- - one of INFO/WARN/ERROR, defaults to INFO if not supplied. May affect display.
- choices: ['INFO', 'WARN', 'ERROR']
- default: 'INFO'
- instance_id:
- type: str
- description:
- - id of an EC2 instance that this event should be attached to, which will limit the contexts where this event is shown
- event_epoch:
- type: str
- description:
- - "Unix timestamp of where the event should appear in the timeline, defaults to now. Be careful with this."
-'''
-
-EXAMPLES = '''
-- name: Send a code deploy event to stackdriver
- community.general.stackdriver:
- key: AAAAAA
- event: deploy
- deployed_to: production
- deployed_by: leeroyjenkins
- repository: MyWebApp
- revision_id: abcd123
-
-- name: Send an annotation event to stackdriver
- community.general.stackdriver:
- key: AAAAAA
- event: annotation
- msg: Greetings from Ansible
- annotated_by: leeroyjenkins
- level: WARN
- instance_id: i-abcd1234
-'''
-
-# ===========================================
-# Stackdriver module specific support methods.
-#
-
-import json
-import traceback
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
-from ansible.module_utils.urls import fetch_url
-
-
-def send_deploy_event(module, key, revision_id, deployed_by='Ansible', deployed_to=None, repository=None):
- """Send a deploy event to Stackdriver"""
- deploy_api = "https://event-gateway.stackdriver.com/v1/deployevent"
-
- params = {}
- params['revision_id'] = revision_id
- params['deployed_by'] = deployed_by
- if deployed_to:
- params['deployed_to'] = deployed_to
- if repository:
- params['repository'] = repository
-
- return do_send_request(module, deploy_api, params, key)
-
-
-def send_annotation_event(module, key, msg, annotated_by='Ansible', level=None, instance_id=None, event_epoch=None):
- """Send an annotation event to Stackdriver"""
- annotation_api = "https://event-gateway.stackdriver.com/v1/annotationevent"
-
- params = {}
- params['message'] = msg
- if annotated_by:
- params['annotated_by'] = annotated_by
- if level:
- params['level'] = level
- if instance_id:
- params['instance_id'] = instance_id
- if event_epoch:
- params['event_epoch'] = event_epoch
-
- return do_send_request(module, annotation_api, params, key)
-
-
-def do_send_request(module, url, params, key):
- data = json.dumps(params)
- headers = {
- 'Content-Type': 'application/json',
- 'x-stackdriver-apikey': key
- }
- response, info = fetch_url(module, url, headers=headers, data=data, method='POST')
- if info['status'] != 200:
- module.fail_json(msg="Unable to send msg: %s" % info['msg'])
-
-
-# ===========================================
-# Module execution.
-#
-
-def main():
-
- module = AnsibleModule(
- argument_spec=dict( # @TODO add types
- key=dict(required=True, no_log=True),
- event=dict(required=True, choices=['deploy', 'annotation']),
- msg=dict(),
- revision_id=dict(),
- annotated_by=dict(default='Ansible'),
- level=dict(default='INFO', choices=['INFO', 'WARN', 'ERROR']),
- instance_id=dict(),
- event_epoch=dict(), # @TODO int?
- deployed_by=dict(default='Ansible'),
- deployed_to=dict(),
- repository=dict(),
- ),
- supports_check_mode=True
- )
-
- key = module.params["key"]
- event = module.params["event"]
-
- # Annotation params
- msg = module.params["msg"]
- annotated_by = module.params["annotated_by"]
- level = module.params["level"]
- instance_id = module.params["instance_id"]
- event_epoch = module.params["event_epoch"]
-
- # Deploy params
- revision_id = module.params["revision_id"]
- deployed_by = module.params["deployed_by"]
- deployed_to = module.params["deployed_to"]
- repository = module.params["repository"]
-
- ##################################################################
- # deploy requires revision_id
- # annotation requires msg
- # We verify these manually
- ##################################################################
-
- if event == 'deploy':
- if not revision_id:
- module.fail_json(msg="revision_id required for deploy events")
- try:
- send_deploy_event(module, key, revision_id, deployed_by, deployed_to, repository)
- except Exception as e:
- module.fail_json(msg="unable to sent deploy event: %s" % to_native(e),
- exception=traceback.format_exc())
-
- if event == 'annotation':
- if not msg:
- module.fail_json(msg="msg required for annotation events")
- try:
- send_annotation_event(module, key, msg, annotated_by, level, instance_id, event_epoch)
- except Exception as e:
- module.fail_json(msg="unable to sent annotation event: %s" % to_native(e),
- exception=traceback.format_exc())
-
- changed = True
- module.exit_json(changed=changed, deployed_by=deployed_by)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/svr4pkg.py b/ansible_collections/community/general/plugins/modules/svr4pkg.py
index db9902c77..56ded66e6 100644
--- a/ansible_collections/community/general/plugins/modules/svr4pkg.py
+++ b/ansible_collections/community/general/plugins/modules/svr4pkg.py
@@ -120,7 +120,7 @@ def package_installed(module, name, category):
if category:
cmd.append('-c')
cmd.append(name)
- rc, out, err = module.run_command(' '.join(cmd))
+ rc, out, err = module.run_command(cmd)
if rc == 0:
return True
else:
diff --git a/ansible_collections/community/general/plugins/modules/swdepot.py b/ansible_collections/community/general/plugins/modules/swdepot.py
index 28a8ce314..9ba1b02b3 100644
--- a/ansible_collections/community/general/plugins/modules/swdepot.py
+++ b/ansible_collections/community/general/plugins/modules/swdepot.py
@@ -68,7 +68,6 @@ EXAMPLES = '''
import re
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.six.moves import shlex_quote
def compare_package(version1, version2):
@@ -94,13 +93,13 @@ def compare_package(version1, version2):
def query_package(module, name, depot=None):
""" Returns whether a package is installed or not and version. """
- cmd_list = '/usr/sbin/swlist -a revision -l product'
+ cmd_list = ['/usr/sbin/swlist', '-a', 'revision', '-l', 'product']
if depot:
- rc, stdout, stderr = module.run_command("%s -s %s %s | grep %s" % (cmd_list, shlex_quote(depot), shlex_quote(name), shlex_quote(name)),
- use_unsafe_shell=True)
- else:
- rc, stdout, stderr = module.run_command("%s %s | grep %s" % (cmd_list, shlex_quote(name), shlex_quote(name)), use_unsafe_shell=True)
+ cmd_list.extend(['-s', depot])
+ cmd_list.append(name)
+ rc, stdout, stderr = module.run_command(cmd_list)
if rc == 0:
+ stdout = ''.join(line for line in stdout.splitlines(True) if name in line)
version = re.sub(r"\s\s+|\t", " ", stdout).strip().split()[1]
else:
version = None
@@ -112,7 +111,7 @@ def remove_package(module, name):
""" Uninstall package if installed. """
cmd_remove = '/usr/sbin/swremove'
- rc, stdout, stderr = module.run_command("%s %s" % (cmd_remove, name))
+ rc, stdout, stderr = module.run_command([cmd_remove, name])
if rc == 0:
return rc, stdout
@@ -123,8 +122,8 @@ def remove_package(module, name):
def install_package(module, depot, name):
""" Install package if not already installed """
- cmd_install = '/usr/sbin/swinstall -x mount_all_filesystems=false'
- rc, stdout, stderr = module.run_command("%s -s %s %s" % (cmd_install, depot, name))
+ cmd_install = ['/usr/sbin/swinstall', '-x', 'mount_all_filesystems=false']
+ rc, stdout, stderr = module.run_command(cmd_install + ["-s", depot, name])
if rc == 0:
return rc, stdout
else:
diff --git a/ansible_collections/community/general/plugins/modules/webfaction_app.py b/ansible_collections/community/general/plugins/modules/webfaction_app.py
deleted file mode 100644
index 81bfc8b68..000000000
--- a/ansible_collections/community/general/plugins/modules/webfaction_app.py
+++ /dev/null
@@ -1,213 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2015, Quentin Stafford-Fraser, with contributions gratefully acknowledged from:
-# * Andy Baker
-# * Federico Tarantini
-#
-# 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
-
-# Create a Webfaction application using Ansible and the Webfaction API
-#
-# Valid application types can be found by looking here:
-# https://docs.webfaction.com/xmlrpc-api/apps.html#application-types
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-DOCUMENTATION = '''
----
-
-deprecated:
- removed_in: 9.0.0
- why: the endpoints this module relies on do not exist any more and do not resolve to IPs in DNS.
- alternative: no known alternative at this point
-
-module: webfaction_app
-short_description: Add or remove applications on a Webfaction host
-description:
- - Add or remove applications on a Webfaction host. Further documentation at U(https://github.com/quentinsf/ansible-webfaction).
-author: Quentin Stafford-Fraser (@quentinsf)
-notes:
- - >
- You can run playbooks that use this on a local machine, or on a Webfaction host, or elsewhere, since the scripts use the remote webfaction API.
- The location is not important. However, running them on multiple hosts I(simultaneously) is best avoided. If you do not specify C(localhost) as
- your host, you may want to add C(serial=1) to the plays.
- - See L(the webfaction API, https://docs.webfaction.com/xmlrpc-api/) for more info.
-
-extends_documentation_fragment:
- - community.general.attributes
-
-attributes:
- check_mode:
- support: full
- diff_mode:
- support: none
-
-options:
- name:
- description:
- - The name of the application
- required: true
- type: str
-
- state:
- description:
- - Whether the application should exist
- choices: ['present', 'absent']
- default: "present"
- type: str
-
- type:
- description:
- - The type of application to create. See the Webfaction docs at U(https://docs.webfaction.com/xmlrpc-api/apps.html) for a list.
- required: true
- type: str
-
- autostart:
- description:
- - Whether the app should restart with an C(autostart.cgi) script
- type: bool
- default: false
-
- extra_info:
- description:
- - Any extra parameters required by the app
- default: ''
- type: str
-
- port_open:
- description:
- - IF the port should be opened
- type: bool
- default: false
-
- login_name:
- description:
- - The webfaction account to use
- required: true
- type: str
-
- login_password:
- description:
- - The webfaction password to use
- required: true
- type: str
-
- machine:
- description:
- - The machine name to use (optional for accounts with only one machine)
- type: str
-
-'''
-
-EXAMPLES = '''
- - name: Create a test app
- community.general.webfaction_app:
- name: "my_wsgi_app1"
- state: present
- type: mod_wsgi35-python27
- login_name: "{{webfaction_user}}"
- login_password: "{{webfaction_passwd}}"
- machine: "{{webfaction_machine}}"
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.six.moves import xmlrpc_client
-
-
-webfaction = xmlrpc_client.ServerProxy('https://api.webfaction.com/')
-
-
-def main():
-
- module = AnsibleModule(
- argument_spec=dict(
- name=dict(required=True),
- state=dict(choices=['present', 'absent'], default='present'),
- type=dict(required=True),
- autostart=dict(type='bool', default=False),
- extra_info=dict(default=""),
- port_open=dict(type='bool', default=False),
- login_name=dict(required=True),
- login_password=dict(required=True, no_log=True),
- machine=dict(),
- ),
- supports_check_mode=True
- )
- app_name = module.params['name']
- app_type = module.params['type']
- app_state = module.params['state']
-
- if module.params['machine']:
- session_id, account = webfaction.login(
- module.params['login_name'],
- module.params['login_password'],
- module.params['machine']
- )
- else:
- session_id, account = webfaction.login(
- module.params['login_name'],
- module.params['login_password']
- )
-
- app_list = webfaction.list_apps(session_id)
- app_map = dict([(i['name'], i) for i in app_list])
- existing_app = app_map.get(app_name)
-
- result = {}
-
- # Here's where the real stuff happens
-
- if app_state == 'present':
-
- # Does an app with this name already exist?
- if existing_app:
- if existing_app['type'] != app_type:
- module.fail_json(msg="App already exists with different type. Please fix by hand.")
-
- # If it exists with the right type, we don't change it
- # Should check other parameters.
- module.exit_json(
- changed=False,
- result=existing_app,
- )
-
- if not module.check_mode:
- # If this isn't a dry run, create the app
- result.update(
- webfaction.create_app(
- session_id, app_name, app_type,
- module.boolean(module.params['autostart']),
- module.params['extra_info'],
- module.boolean(module.params['port_open'])
- )
- )
-
- elif app_state == 'absent':
-
- # If the app's already not there, nothing changed.
- if not existing_app:
- module.exit_json(
- changed=False,
- )
-
- if not module.check_mode:
- # If this isn't a dry run, delete the app
- result.update(
- webfaction.delete_app(session_id, app_name)
- )
-
- else:
- module.fail_json(msg="Unknown state specified: {0}".format(app_state))
-
- module.exit_json(
- changed=True,
- result=result
- )
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/webfaction_db.py b/ansible_collections/community/general/plugins/modules/webfaction_db.py
deleted file mode 100644
index 5428de5b6..000000000
--- a/ansible_collections/community/general/plugins/modules/webfaction_db.py
+++ /dev/null
@@ -1,209 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2015, Quentin Stafford-Fraser, with contributions gratefully acknowledged from:
-# * Andy Baker
-# * Federico Tarantini
-#
-# 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
-
-# Create a webfaction database using Ansible and the Webfaction API
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-DOCUMENTATION = '''
----
-
-deprecated:
- removed_in: 9.0.0
- why: the endpoints this module relies on do not exist any more and do not resolve to IPs in DNS.
- alternative: no known alternative at this point
-
-module: webfaction_db
-short_description: Add or remove a database on Webfaction
-description:
- - Add or remove a database on a Webfaction host. Further documentation at https://github.com/quentinsf/ansible-webfaction.
-author: Quentin Stafford-Fraser (@quentinsf)
-notes:
- - >
- You can run playbooks that use this on a local machine, or on a Webfaction host, or elsewhere, since the scripts use the remote webfaction API.
- The location is not important. However, running them on multiple hosts I(simultaneously) is best avoided. If you do not specify C(localhost) as
- your host, you may want to add C(serial=1) to the plays.
- - See L(the webfaction API, https://docs.webfaction.com/xmlrpc-api/) for more info.
-extends_documentation_fragment:
- - community.general.attributes
-attributes:
- check_mode:
- support: full
- diff_mode:
- support: none
-options:
-
- name:
- description:
- - The name of the database
- required: true
- type: str
-
- state:
- description:
- - Whether the database should exist
- choices: ['present', 'absent']
- default: "present"
- type: str
-
- type:
- description:
- - The type of database to create.
- required: true
- choices: ['mysql', 'postgresql']
- type: str
-
- password:
- description:
- - The password for the new database user.
- type: str
-
- login_name:
- description:
- - The webfaction account to use
- required: true
- type: str
-
- login_password:
- description:
- - The webfaction password to use
- required: true
- type: str
-
- machine:
- description:
- - The machine name to use (optional for accounts with only one machine)
- type: str
-'''
-
-EXAMPLES = '''
- # This will also create a default DB user with the same
- # name as the database, and the specified password.
-
- - name: Create a database
- community.general.webfaction_db:
- name: "{{webfaction_user}}_db1"
- password: mytestsql
- type: mysql
- login_name: "{{webfaction_user}}"
- login_password: "{{webfaction_passwd}}"
- machine: "{{webfaction_machine}}"
-
- # Note that, for symmetry's sake, deleting a database using
- # 'state: absent' will also delete the matching user.
-
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.six.moves import xmlrpc_client
-
-
-webfaction = xmlrpc_client.ServerProxy('https://api.webfaction.com/')
-
-
-def main():
-
- module = AnsibleModule(
- argument_spec=dict(
- name=dict(required=True),
- state=dict(choices=['present', 'absent'], default='present'),
- # You can specify an IP address or hostname.
- type=dict(required=True, choices=['mysql', 'postgresql']),
- password=dict(no_log=True),
- login_name=dict(required=True),
- login_password=dict(required=True, no_log=True),
- machine=dict(),
- ),
- supports_check_mode=True
- )
- db_name = module.params['name']
- db_state = module.params['state']
- db_type = module.params['type']
- db_passwd = module.params['password']
-
- if module.params['machine']:
- session_id, account = webfaction.login(
- module.params['login_name'],
- module.params['login_password'],
- module.params['machine']
- )
- else:
- session_id, account = webfaction.login(
- module.params['login_name'],
- module.params['login_password']
- )
-
- db_list = webfaction.list_dbs(session_id)
- db_map = dict([(i['name'], i) for i in db_list])
- existing_db = db_map.get(db_name)
-
- user_list = webfaction.list_db_users(session_id)
- user_map = dict([(i['username'], i) for i in user_list])
- existing_user = user_map.get(db_name)
-
- result = {}
-
- # Here's where the real stuff happens
-
- if db_state == 'present':
-
- # Does a database with this name already exist?
- if existing_db:
- # Yes, but of a different type - fail
- if existing_db['db_type'] != db_type:
- module.fail_json(msg="Database already exists but is a different type. Please fix by hand.")
-
- # If it exists with the right type, we don't change anything.
- module.exit_json(
- changed=False,
- )
-
- if not module.check_mode:
- # If this isn't a dry run, create the db
- # and default user.
- result.update(
- webfaction.create_db(
- session_id, db_name, db_type, db_passwd
- )
- )
-
- elif db_state == 'absent':
-
- # If this isn't a dry run...
- if not module.check_mode:
-
- if not (existing_db or existing_user):
- module.exit_json(changed=False,)
-
- if existing_db:
- # Delete the db if it exists
- result.update(
- webfaction.delete_db(session_id, db_name, db_type)
- )
-
- if existing_user:
- # Delete the default db user if it exists
- result.update(
- webfaction.delete_db_user(session_id, db_name, db_type)
- )
-
- else:
- module.fail_json(msg="Unknown state specified: {0}".format(db_state))
-
- module.exit_json(
- changed=True,
- result=result
- )
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/webfaction_domain.py b/ansible_collections/community/general/plugins/modules/webfaction_domain.py
deleted file mode 100644
index 4c87a539a..000000000
--- a/ansible_collections/community/general/plugins/modules/webfaction_domain.py
+++ /dev/null
@@ -1,184 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2015, Quentin Stafford-Fraser
-# 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
-
-# Create Webfaction domains and subdomains using Ansible and the Webfaction API
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-DOCUMENTATION = '''
----
-
-deprecated:
- removed_in: 9.0.0
- why: the endpoints this module relies on do not exist any more and do not resolve to IPs in DNS.
- alternative: no known alternative at this point
-
-module: webfaction_domain
-short_description: Add or remove domains and subdomains on Webfaction
-description:
- - Add or remove domains or subdomains on a Webfaction host. Further documentation at https://github.com/quentinsf/ansible-webfaction.
-author: Quentin Stafford-Fraser (@quentinsf)
-notes:
- - If you are I(deleting) domains by using O(state=absent), then note that if you specify subdomains, just those particular subdomains will be deleted.
- If you do not specify subdomains, the domain will be deleted.
- - >
- You can run playbooks that use this on a local machine, or on a Webfaction host, or elsewhere, since the scripts use the remote webfaction API.
- The location is not important. However, running them on multiple hosts I(simultaneously) is best avoided. If you do not specify C(localhost) as
- your host, you may want to add C(serial=1) to the plays.
- - See L(the webfaction API, https://docs.webfaction.com/xmlrpc-api/) for more info.
-
-extends_documentation_fragment:
- - community.general.attributes
-
-attributes:
- check_mode:
- support: full
- diff_mode:
- support: none
-
-options:
-
- name:
- description:
- - The name of the domain
- required: true
- type: str
-
- state:
- description:
- - Whether the domain should exist
- choices: ['present', 'absent']
- default: "present"
- type: str
-
- subdomains:
- description:
- - Any subdomains to create.
- default: []
- type: list
- elements: str
-
- login_name:
- description:
- - The webfaction account to use
- required: true
- type: str
-
- login_password:
- description:
- - The webfaction password to use
- required: true
- type: str
-'''
-
-EXAMPLES = '''
- - name: Create a test domain
- community.general.webfaction_domain:
- name: mydomain.com
- state: present
- subdomains:
- - www
- - blog
- login_name: "{{webfaction_user}}"
- login_password: "{{webfaction_passwd}}"
-
- - name: Delete test domain and any subdomains
- community.general.webfaction_domain:
- name: mydomain.com
- state: absent
- login_name: "{{webfaction_user}}"
- login_password: "{{webfaction_passwd}}"
-
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.six.moves import xmlrpc_client
-
-
-webfaction = xmlrpc_client.ServerProxy('https://api.webfaction.com/')
-
-
-def main():
-
- module = AnsibleModule(
- argument_spec=dict(
- name=dict(required=True),
- state=dict(choices=['present', 'absent'], default='present'),
- subdomains=dict(default=[], type='list', elements='str'),
- login_name=dict(required=True),
- login_password=dict(required=True, no_log=True),
- ),
- supports_check_mode=True
- )
- domain_name = module.params['name']
- domain_state = module.params['state']
- domain_subdomains = module.params['subdomains']
-
- session_id, account = webfaction.login(
- module.params['login_name'],
- module.params['login_password']
- )
-
- domain_list = webfaction.list_domains(session_id)
- domain_map = dict([(i['domain'], i) for i in domain_list])
- existing_domain = domain_map.get(domain_name)
-
- result = {}
-
- # Here's where the real stuff happens
-
- if domain_state == 'present':
-
- # Does an app with this name already exist?
- if existing_domain:
-
- if set(existing_domain['subdomains']) >= set(domain_subdomains):
- # If it exists with the right subdomains, we don't change anything.
- module.exit_json(
- changed=False,
- )
-
- positional_args = [session_id, domain_name] + domain_subdomains
-
- if not module.check_mode:
- # If this isn't a dry run, create the app
- # print positional_args
- result.update(
- webfaction.create_domain(
- *positional_args
- )
- )
-
- elif domain_state == 'absent':
-
- # If the app's already not there, nothing changed.
- if not existing_domain:
- module.exit_json(
- changed=False,
- )
-
- positional_args = [session_id, domain_name] + domain_subdomains
-
- if not module.check_mode:
- # If this isn't a dry run, delete the app
- result.update(
- webfaction.delete_domain(*positional_args)
- )
-
- else:
- module.fail_json(msg="Unknown state specified: {0}".format(domain_state))
-
- module.exit_json(
- changed=True,
- result=result
- )
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/webfaction_mailbox.py b/ansible_collections/community/general/plugins/modules/webfaction_mailbox.py
deleted file mode 100644
index 119dfd283..000000000
--- a/ansible_collections/community/general/plugins/modules/webfaction_mailbox.py
+++ /dev/null
@@ -1,152 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2015, Quentin Stafford-Fraser and Andy Baker
-# 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
-
-# Create webfaction mailbox using Ansible and the Webfaction API
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-DOCUMENTATION = '''
----
-
-deprecated:
- removed_in: 9.0.0
- why: the endpoints this module relies on do not exist any more and do not resolve to IPs in DNS.
- alternative: no known alternative at this point
-
-module: webfaction_mailbox
-short_description: Add or remove mailboxes on Webfaction
-description:
- - Add or remove mailboxes on a Webfaction account. Further documentation at https://github.com/quentinsf/ansible-webfaction.
-author: Quentin Stafford-Fraser (@quentinsf)
-notes:
- - >
- You can run playbooks that use this on a local machine, or on a Webfaction host, or elsewhere, since the scripts use the remote webfaction API.
- The location is not important. However, running them on multiple hosts I(simultaneously) is best avoided. If you do not specify C(localhost) as
- your host, you may want to add C(serial=1) to the plays.
- - See L(the webfaction API, https://docs.webfaction.com/xmlrpc-api/) for more info.
-
-extends_documentation_fragment:
- - community.general.attributes
-
-attributes:
- check_mode:
- support: full
- diff_mode:
- support: none
-
-options:
-
- mailbox_name:
- description:
- - The name of the mailbox
- required: true
- type: str
-
- mailbox_password:
- description:
- - The password for the mailbox
- required: true
- type: str
-
- state:
- description:
- - Whether the mailbox should exist
- choices: ['present', 'absent']
- default: "present"
- type: str
-
- login_name:
- description:
- - The webfaction account to use
- required: true
- type: str
-
- login_password:
- description:
- - The webfaction password to use
- required: true
- type: str
-'''
-
-EXAMPLES = '''
- - name: Create a mailbox
- community.general.webfaction_mailbox:
- mailbox_name="mybox"
- mailbox_password="myboxpw"
- state=present
- login_name={{webfaction_user}}
- login_password={{webfaction_passwd}}
-'''
-
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.six.moves import xmlrpc_client
-
-
-webfaction = xmlrpc_client.ServerProxy('https://api.webfaction.com/')
-
-
-def main():
-
- module = AnsibleModule(
- argument_spec=dict(
- mailbox_name=dict(required=True),
- mailbox_password=dict(required=True, no_log=True),
- state=dict(required=False, choices=['present', 'absent'], default='present'),
- login_name=dict(required=True),
- login_password=dict(required=True, no_log=True),
- ),
- supports_check_mode=True
- )
-
- mailbox_name = module.params['mailbox_name']
- site_state = module.params['state']
-
- session_id, account = webfaction.login(
- module.params['login_name'],
- module.params['login_password']
- )
-
- mailbox_list = [x['mailbox'] for x in webfaction.list_mailboxes(session_id)]
- existing_mailbox = mailbox_name in mailbox_list
-
- result = {}
-
- # Here's where the real stuff happens
-
- if site_state == 'present':
-
- # Does a mailbox with this name already exist?
- if existing_mailbox:
- module.exit_json(changed=False,)
-
- positional_args = [session_id, mailbox_name]
-
- if not module.check_mode:
- # If this isn't a dry run, create the mailbox
- result.update(webfaction.create_mailbox(*positional_args))
-
- elif site_state == 'absent':
-
- # If the mailbox is already not there, nothing changed.
- if not existing_mailbox:
- module.exit_json(changed=False)
-
- if not module.check_mode:
- # If this isn't a dry run, delete the mailbox
- result.update(webfaction.delete_mailbox(session_id, mailbox_name))
-
- else:
- module.fail_json(msg="Unknown state specified: {0}".format(site_state))
-
- module.exit_json(changed=True, result=result)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/webfaction_site.py b/ansible_collections/community/general/plugins/modules/webfaction_site.py
deleted file mode 100644
index 7795c45fe..000000000
--- a/ansible_collections/community/general/plugins/modules/webfaction_site.py
+++ /dev/null
@@ -1,223 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2015, Quentin Stafford-Fraser
-# 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
-
-# Create Webfaction website using Ansible and the Webfaction API
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-DOCUMENTATION = '''
----
-
-deprecated:
- removed_in: 9.0.0
- why: the endpoints this module relies on do not exist any more and do not resolve to IPs in DNS.
- alternative: no known alternative at this point
-
-module: webfaction_site
-short_description: Add or remove a website on a Webfaction host
-description:
- - Add or remove a website on a Webfaction host. Further documentation at https://github.com/quentinsf/ansible-webfaction.
-author: Quentin Stafford-Fraser (@quentinsf)
-notes:
- - Sadly, you I(do) need to know your webfaction hostname for the C(host) parameter. But at least, unlike the API, you do not need to know the IP
- address. You can use a DNS name.
- - If a site of the same name exists in the account but on a different host, the operation will exit.
- - >
- You can run playbooks that use this on a local machine, or on a Webfaction host, or elsewhere, since the scripts use the remote webfaction API.
- The location is not important. However, running them on multiple hosts I(simultaneously) is best avoided. If you do not specify C(localhost) as
- your host, you may want to add C(serial=1) to the plays.
- - See L(the webfaction API, https://docs.webfaction.com/xmlrpc-api/) for more info.
-
-extends_documentation_fragment:
- - community.general.attributes
-
-attributes:
- check_mode:
- support: full
- diff_mode:
- support: none
-
-options:
-
- name:
- description:
- - The name of the website
- required: true
- type: str
-
- state:
- description:
- - Whether the website should exist
- choices: ['present', 'absent']
- default: "present"
- type: str
-
- host:
- description:
- - The webfaction host on which the site should be created.
- required: true
- type: str
-
- https:
- description:
- - Whether or not to use HTTPS
- type: bool
- default: false
-
- site_apps:
- description:
- - A mapping of URLs to apps
- default: []
- type: list
- elements: list
-
- subdomains:
- description:
- - A list of subdomains associated with this site.
- default: []
- type: list
- elements: str
-
- login_name:
- description:
- - The webfaction account to use
- required: true
- type: str
-
- login_password:
- description:
- - The webfaction password to use
- required: true
- type: str
-'''
-
-EXAMPLES = '''
- - name: Create website
- community.general.webfaction_site:
- name: testsite1
- state: present
- host: myhost.webfaction.com
- subdomains:
- - 'testsite1.my_domain.org'
- site_apps:
- - ['testapp1', '/']
- https: false
- login_name: "{{webfaction_user}}"
- login_password: "{{webfaction_passwd}}"
-'''
-
-import socket
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.six.moves import xmlrpc_client
-
-
-webfaction = xmlrpc_client.ServerProxy('https://api.webfaction.com/')
-
-
-def main():
-
- module = AnsibleModule(
- argument_spec=dict(
- name=dict(required=True),
- state=dict(choices=['present', 'absent'], default='present'),
- # You can specify an IP address or hostname.
- host=dict(required=True),
- https=dict(required=False, type='bool', default=False),
- subdomains=dict(type='list', elements='str', default=[]),
- site_apps=dict(type='list', elements='list', default=[]),
- login_name=dict(required=True),
- login_password=dict(required=True, no_log=True),
- ),
- supports_check_mode=True
- )
- site_name = module.params['name']
- site_state = module.params['state']
- site_host = module.params['host']
- site_ip = socket.gethostbyname(site_host)
-
- session_id, account = webfaction.login(
- module.params['login_name'],
- module.params['login_password']
- )
-
- site_list = webfaction.list_websites(session_id)
- site_map = dict([(i['name'], i) for i in site_list])
- existing_site = site_map.get(site_name)
-
- result = {}
-
- # Here's where the real stuff happens
-
- if site_state == 'present':
-
- # Does a site with this name already exist?
- if existing_site:
-
- # If yes, but it's on a different IP address, then fail.
- # If we wanted to allow relocation, we could add a 'relocate=true' option
- # which would get the existing IP address, delete the site there, and create it
- # at the new address. A bit dangerous, perhaps, so for now we'll require manual
- # deletion if it's on another host.
-
- if existing_site['ip'] != site_ip:
- module.fail_json(msg="Website already exists with a different IP address. Please fix by hand.")
-
- # If it's on this host and the key parameters are the same, nothing needs to be done.
-
- if (existing_site['https'] == module.boolean(module.params['https'])) and \
- (set(existing_site['subdomains']) == set(module.params['subdomains'])) and \
- (dict(existing_site['website_apps']) == dict(module.params['site_apps'])):
- module.exit_json(
- changed=False
- )
-
- positional_args = [
- session_id, site_name, site_ip,
- module.boolean(module.params['https']),
- module.params['subdomains'],
- ]
- for a in module.params['site_apps']:
- positional_args.append((a[0], a[1]))
-
- if not module.check_mode:
- # If this isn't a dry run, create or modify the site
- result.update(
- webfaction.create_website(
- *positional_args
- ) if not existing_site else webfaction.update_website(
- *positional_args
- )
- )
-
- elif site_state == 'absent':
-
- # If the site's already not there, nothing changed.
- if not existing_site:
- module.exit_json(
- changed=False,
- )
-
- if not module.check_mode:
- # If this isn't a dry run, delete the site
- result.update(
- webfaction.delete_website(session_id, site_name, site_ip)
- )
-
- else:
- module.fail_json(msg="Unknown state specified: {0}".format(site_state))
-
- module.exit_json(
- changed=True,
- result=result
- )
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/community/general/plugins/modules/xfconf.py b/ansible_collections/community/general/plugins/modules/xfconf.py
index 8ed44c675..15943ae59 100644
--- a/ansible_collections/community/general/plugins/modules/xfconf.py
+++ b/ansible_collections/community/general/plugins/modules/xfconf.py
@@ -187,6 +187,7 @@ class XFConfProperty(StateModuleHelper):
required_together=[('value', 'value_type')],
supports_check_mode=True,
)
+ use_old_vardict = False
default_state = 'present'
@@ -196,7 +197,7 @@ class XFConfProperty(StateModuleHelper):
self.vars.channel)
self.vars.set('previous_value', self._get())
self.vars.set('type', self.vars.value_type)
- self.vars.meta('value').set(initial_value=self.vars.previous_value)
+ self.vars.set_meta('value', initial_value=self.vars.previous_value)
def process_command_output(self, rc, out, err):
if err.rstrip() == self.does_not:
diff --git a/ansible_collections/community/general/plugins/modules/xfconf_info.py b/ansible_collections/community/general/plugins/modules/xfconf_info.py
index 844ef3c11..3d56a70cb 100644
--- a/ansible_collections/community/general/plugins/modules/xfconf_info.py
+++ b/ansible_collections/community/general/plugins/modules/xfconf_info.py
@@ -139,6 +139,7 @@ class XFConfInfo(ModuleHelper):
),
supports_check_mode=True,
)
+ use_old_vardict = False
def __init_module__(self):
self.runner = xfconf_runner(self.module, check_rc=True)
@@ -176,7 +177,7 @@ class XFConfInfo(ModuleHelper):
proc = self._process_list_properties
with self.runner.context('list_arg channel property', output_process=proc) as ctx:
- result = ctx.run(**self.vars)
+ result = ctx.run(**self.vars.as_dict())
if not self.vars.list_arg and self.vars.is_array:
output = "value_array"
diff --git a/ansible_collections/community/general/tests/integration/targets/callback_timestamp/aliases b/ansible_collections/community/general/tests/integration/targets/callback_timestamp/aliases
new file mode 100644
index 000000000..124adcfb8
--- /dev/null
+++ b/ansible_collections/community/general/tests/integration/targets/callback_timestamp/aliases
@@ -0,0 +1,6 @@
+# Copyright (c) 2024, kurokobo <kurokobo@protonmail.com>
+# 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
+
+azp/posix/1
+needs/target/callback
diff --git a/ansible_collections/community/general/tests/integration/targets/callback_timestamp/tasks/main.yml b/ansible_collections/community/general/tests/integration/targets/callback_timestamp/tasks/main.yml
new file mode 100644
index 000000000..5e0acc15f
--- /dev/null
+++ b/ansible_collections/community/general/tests/integration/targets/callback_timestamp/tasks/main.yml
@@ -0,0 +1,66 @@
+---
+####################################################################
+# WARNING: These are designed specifically for Ansible tests #
+# and should not be used as examples of how to write Ansible roles #
+####################################################################
+
+# Copyright (c) 2024, kurokobo <kurokobo@protonmail.com>
+# 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
+
+- name: Run tests
+ include_role:
+ name: callback
+ vars:
+ tests:
+ - name: Enable timestamp in the default length
+ environment:
+ ANSIBLE_NOCOLOR: 'true'
+ ANSIBLE_FORCE_COLOR: 'false'
+ ANSIBLE_STDOUT_CALLBACK: community.general.timestamp
+ ANSIBLE_CALLBACK_TIMESTAMP_FORMAT_STRING: "15:04:05"
+ playbook: |
+ - hosts: testhost
+ gather_facts: false
+ tasks:
+ - name: Sample task name
+ debug:
+ msg: sample debug msg
+ expected_output: [
+ "",
+ "PLAY [testhost] ******************************************************* 15:04:05",
+ "",
+ "TASK [Sample task name] *********************************************** 15:04:05",
+ "ok: [testhost] => {",
+ " \"msg\": \"sample debug msg\"",
+ "}",
+ "",
+ "PLAY RECAP ************************************************************ 15:04:05",
+ "testhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 "
+ ]
+
+ - name: Enable timestamp in the longer length
+ environment:
+ ANSIBLE_NOCOLOR: 'true'
+ ANSIBLE_FORCE_COLOR: 'false'
+ ANSIBLE_STDOUT_CALLBACK: community.general.timestamp
+ ANSIBLE_CALLBACK_TIMESTAMP_FORMAT_STRING: "2006-01-02T15:04:05"
+ playbook: |
+ - hosts: testhost
+ gather_facts: false
+ tasks:
+ - name: Sample task name
+ debug:
+ msg: sample debug msg
+ expected_output: [
+ "",
+ "PLAY [testhost] ******************************************** 2006-01-02T15:04:05",
+ "",
+ "TASK [Sample task name] ************************************ 2006-01-02T15:04:05",
+ "ok: [testhost] => {",
+ " \"msg\": \"sample debug msg\"",
+ "}",
+ "",
+ "PLAY RECAP ************************************************* 2006-01-02T15:04:05",
+ "testhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 "
+ ]
diff --git a/ansible_collections/community/general/tests/integration/targets/cpanm/tasks/main.yml b/ansible_collections/community/general/tests/integration/targets/cpanm/tasks/main.yml
index c9adc1ca6..89650154f 100644
--- a/ansible_collections/community/general/tests/integration/targets/cpanm/tasks/main.yml
+++ b/ansible_collections/community/general/tests/integration/targets/cpanm/tasks/main.yml
@@ -6,7 +6,8 @@
- name: bail out for non-supported platforms
meta: end_play
when:
- - (ansible_os_family != "RedHat" or ansible_distribution_major_version|int < 7)
+ - (ansible_os_family != "RedHat" or ansible_distribution_major_version|int < 8) # TODO: bump back to 7
+ - (ansible_distribution != 'CentOS' or ansible_distribution_major_version|int < 8) # TODO: remove
- ansible_os_family != "Debian"
- name: install perl development package for Red Hat family
diff --git a/ansible_collections/community/general/tests/integration/targets/django_manage/tasks/main.yaml b/ansible_collections/community/general/tests/integration/targets/django_manage/tasks/main.yaml
index c07b53893..5307fb664 100644
--- a/ansible_collections/community/general/tests/integration/targets/django_manage/tasks/main.yaml
+++ b/ansible_collections/community/general/tests/integration/targets/django_manage/tasks/main.yaml
@@ -43,6 +43,11 @@
chdir: "{{ tmp_django_root.path }}/startproj"
cmd: "{{ tmp_django_root.path }}/venv/bin/django-admin startapp app1"
+- name: Make manage.py executable
+ file:
+ path: "{{ tmp_django_root.path }}/startproj/test_django_manage_1/manage.py"
+ mode: "0755"
+
- name: Check
community.general.django_manage:
project_path: "{{ tmp_django_root.path }}/startproj/test_django_manage_1"
diff --git a/ansible_collections/community/general/tests/integration/targets/ejabberd_user/tasks/main.yml b/ansible_collections/community/general/tests/integration/targets/ejabberd_user/tasks/main.yml
index 33e07b785..349b3f952 100644
--- a/ansible_collections/community/general/tests/integration/targets/ejabberd_user/tasks/main.yml
+++ b/ansible_collections/community/general/tests/integration/targets/ejabberd_user/tasks/main.yml
@@ -10,7 +10,8 @@
- name: Bail out if not supported
ansible.builtin.meta: end_play
- when: ansible_distribution in ('Alpine', 'openSUSE Leap', 'CentOS', 'Fedora')
+ # TODO: remove Archlinux from the list
+ when: ansible_distribution in ('Alpine', 'openSUSE Leap', 'CentOS', 'Fedora', 'Archlinux')
- name: Remove ejabberd
diff --git a/ansible_collections/community/general/tests/integration/targets/gandi_livedns/tasks/create_record.yml b/ansible_collections/community/general/tests/integration/targets/gandi_livedns/tasks/create_record.yml
index c3f1c1798..87056aa86 100644
--- a/ansible_collections/community/general/tests/integration/targets/gandi_livedns/tasks/create_record.yml
+++ b/ansible_collections/community/general/tests/integration/targets/gandi_livedns/tasks/create_record.yml
@@ -45,10 +45,10 @@
assert:
that:
- result is changed
- - result.record['values'] == {{ item['values'] }}
- - result.record.record == "{{ item.record }}"
- - result.record.type == "{{ item.type }}"
- - result.record.ttl == {{ item.ttl }}
+ - result.record['values'] == item['values']
+ - result.record.record == item.record
+ - result.record.type == item.type
+ - result.record.ttl == item.ttl
- name: test create a dns record idempotence
community.general.gandi_livedns:
@@ -63,7 +63,16 @@
assert:
that:
- result is not changed
- - result.record['values'] == {{ item['values'] }}
- - result.record.record == "{{ item.record }}"
- - result.record.type == "{{ item.type }}"
- - result.record.ttl == {{ item.ttl }}
+ - result.record['values'] == item['values']
+ - result.record.record == item.record
+ - result.record.type == item.type
+ - result.record.ttl == item.ttl
+
+- name: test create a DNS record with personal access token
+ community.general.gandi_livedns:
+ personal_access_token: "{{ gandi_personal_access_token }}"
+ record: "{{ item.record }}"
+ domain: "{{ gandi_livedns_domain_name }}"
+ values: "{{ item['values'] }}"
+ ttl: "{{ item.ttl }}"
+ type: "{{ item.type }}"
diff --git a/ansible_collections/community/general/tests/integration/targets/gandi_livedns/tasks/update_record.yml b/ansible_collections/community/general/tests/integration/targets/gandi_livedns/tasks/update_record.yml
index a080560a7..5f19bfa24 100644
--- a/ansible_collections/community/general/tests/integration/targets/gandi_livedns/tasks/update_record.yml
+++ b/ansible_collections/community/general/tests/integration/targets/gandi_livedns/tasks/update_record.yml
@@ -17,10 +17,10 @@
assert:
that:
- result is changed
- - result.record['values'] == {{ item.update_values | default(item['values']) }}
- - result.record.record == "{{ item.record }}"
- - result.record.type == "{{ item.type }}"
- - result.record.ttl == {{ item.update_ttl | default(item.ttl) }}
+ - result.record['values'] == (item.update_values | default(item['values']))
+ - result.record.record == item.record
+ - result.record.type == item.type
+ - result.record.ttl == (item.update_ttl | default(item.ttl))
- name: test update or add another dns record
community.general.gandi_livedns:
@@ -35,10 +35,10 @@
assert:
that:
- result is changed
- - result.record['values'] == {{ item.update_values | default(item['values']) }}
- - result.record.record == "{{ item.record }}"
- - result.record.ttl == {{ item.update_ttl | default(item.ttl) }}
- - result.record.type == "{{ item.type }}"
+ - result.record['values'] == (item.update_values | default(item['values']))
+ - result.record.record == item.record
+ - result.record.ttl == (item.update_ttl | default(item.ttl))
+ - result.record.type == item.type
- name: test update or add another dns record idempotence
community.general.gandi_livedns:
@@ -53,7 +53,7 @@
assert:
that:
- result is not changed
- - result.record['values'] == {{ item.update_values | default(item['values']) }}
- - result.record.record == "{{ item.record }}"
- - result.record.ttl == {{ item.update_ttl | default(item.ttl) }}
- - result.record.type == "{{ item.type }}"
+ - result.record['values'] == (item.update_values | default(item['values']))
+ - result.record.record == item.record
+ - result.record.ttl == (item.update_ttl | default(item.ttl))
+ - result.record.type == item.type
diff --git a/ansible_collections/community/general/tests/integration/targets/homebrew/handlers/main.yml b/ansible_collections/community/general/tests/integration/targets/homebrew/handlers/main.yml
new file mode 100644
index 000000000..90a2e8017
--- /dev/null
+++ b/ansible_collections/community/general/tests/integration/targets/homebrew/handlers/main.yml
@@ -0,0 +1,11 @@
+---
+# Copyright (c) Ansible Project
+# 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
+
+- name: uninstall docker
+ community.general.homebrew:
+ name: docker
+ state: absent
+ become: true
+ become_user: "{{ brew_stat.stat.pw_name }}"
diff --git a/ansible_collections/community/general/tests/integration/targets/homebrew/tasks/casks.yml b/ansible_collections/community/general/tests/integration/targets/homebrew/tasks/casks.yml
index 42d3515bf..ffbe67d15 100644
--- a/ansible_collections/community/general/tests/integration/targets/homebrew/tasks/casks.yml
+++ b/ansible_collections/community/general/tests/integration/targets/homebrew/tasks/casks.yml
@@ -12,13 +12,11 @@
- name: Find brew binary
command: which brew
register: brew_which
- when: ansible_distribution in ['MacOSX']
- name: Get owner of brew binary
stat:
path: "{{ brew_which.stdout }}"
register: brew_stat
- when: ansible_distribution in ['MacOSX']
#- name: Use ignored-pinned option while upgrading all
# homebrew:
diff --git a/ansible_collections/community/general/tests/integration/targets/homebrew/tasks/docker.yml b/ansible_collections/community/general/tests/integration/targets/homebrew/tasks/docker.yml
new file mode 100644
index 000000000..c7f282ba2
--- /dev/null
+++ b/ansible_collections/community/general/tests/integration/targets/homebrew/tasks/docker.yml
@@ -0,0 +1,23 @@
+---
+# Copyright (c) Ansible Project
+# 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
+
+- name: MACOS | Find brew binary
+ command: which brew
+ register: brew_which
+
+- name: MACOS | Get owner of brew binary
+ stat:
+ path: "{{ brew_which.stdout }}"
+ register: brew_stat
+
+- name: MACOS | Install docker
+ community.general.homebrew:
+ name: docker
+ state: present
+ force_formula: true
+ become: true
+ become_user: "{{ brew_stat.stat.pw_name }}"
+ notify:
+ - uninstall docker
diff --git a/ansible_collections/community/general/tests/integration/targets/homebrew/tasks/formulae.yml b/ansible_collections/community/general/tests/integration/targets/homebrew/tasks/formulae.yml
index 1db3ef1a6..1ca8d753e 100644
--- a/ansible_collections/community/general/tests/integration/targets/homebrew/tasks/formulae.yml
+++ b/ansible_collections/community/general/tests/integration/targets/homebrew/tasks/formulae.yml
@@ -12,13 +12,11 @@
- name: Find brew binary
command: which brew
register: brew_which
- when: ansible_distribution in ['MacOSX']
- name: Get owner of brew binary
stat:
path: "{{ brew_which.stdout }}"
register: brew_stat
- when: ansible_distribution in ['MacOSX']
#- name: Use ignored-pinned option while upgrading all
# homebrew:
diff --git a/ansible_collections/community/general/tests/integration/targets/homebrew/tasks/main.yml b/ansible_collections/community/general/tests/integration/targets/homebrew/tasks/main.yml
index f5479917e..00d0bcf31 100644
--- a/ansible_collections/community/general/tests/integration/targets/homebrew/tasks/main.yml
+++ b/ansible_collections/community/general/tests/integration/targets/homebrew/tasks/main.yml
@@ -9,9 +9,8 @@
# 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
-- block:
- - include_tasks: 'formulae.yml'
-
- when: ansible_distribution in ['MacOSX']
block:
+ - include_tasks: 'formulae.yml'
- include_tasks: 'casks.yml'
+ - include_tasks: 'docker.yml'
diff --git a/ansible_collections/community/general/tests/integration/targets/keycloak_identity_provider/tasks/main.yml b/ansible_collections/community/general/tests/integration/targets/keycloak_identity_provider/tasks/main.yml
index afad9740e..fa118ed1d 100644
--- a/ansible_collections/community/general/tests/integration/targets/keycloak_identity_provider/tasks/main.yml
+++ b/ansible_collections/community/general/tests/integration/targets/keycloak_identity_provider/tasks/main.yml
@@ -62,6 +62,7 @@
- result.existing == {}
- result.end_state.alias == "{{ idp }}"
- result.end_state.mappers != []
+ - result.end_state.config.client_secret = "**********"
- name: Update existing identity provider (no change)
community.general.keycloak_identity_provider:
diff --git a/ansible_collections/community/general/tests/integration/targets/lookup_merge_variables/runme.sh b/ansible_collections/community/general/tests/integration/targets/lookup_merge_variables/runme.sh
index 4e66476be..ada6908dd 100755
--- a/ansible_collections/community/general/tests/integration/targets/lookup_merge_variables/runme.sh
+++ b/ansible_collections/community/general/tests/integration/targets/lookup_merge_variables/runme.sh
@@ -14,3 +14,6 @@ ANSIBLE_MERGE_VARIABLES_PATTERN_TYPE=suffix \
ANSIBLE_LOG_PATH=/tmp/ansible-test-merge-variables \
ansible-playbook -i test_inventory_all_hosts.yml test_all_hosts.yml "$@"
+
+ANSIBLE_LOG_PATH=/tmp/ansible-test-merge-variables \
+ ansible-playbook -i test_cross_host_merge_inventory.yml test_cross_host_merge_play.yml "$@"
diff --git a/ansible_collections/community/general/tests/integration/targets/lookup_merge_variables/test_cross_host_merge_inventory.yml b/ansible_collections/community/general/tests/integration/targets/lookup_merge_variables/test_cross_host_merge_inventory.yml
new file mode 100644
index 000000000..938457023
--- /dev/null
+++ b/ansible_collections/community/general/tests/integration/targets/lookup_merge_variables/test_cross_host_merge_inventory.yml
@@ -0,0 +1,33 @@
+---
+# Copyright (c) 2020, Thales Netherlands
+# Copyright (c) 2021, Ansible Project
+# 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
+
+common:
+ vars:
+ provider_instances:
+ servicedata1:
+ host: "{{ hostvars[groups['provider'] | first].inventory_hostname }}"
+ user: usr
+ pass: pwd
+ servicedata2:
+ host: down
+ user: usr2
+ pass: pwd2
+ hosts:
+ host1:
+ host2:
+
+consumer:
+ vars:
+ service_data: "{{ provider_instances.servicedata1 }}"
+ merge2__1: "{{ service_data }}" # service_data is a variable only known to host2, so normally it´s not available for host1 that is performing the merge
+ hosts:
+ host2:
+
+provider:
+ vars:
+ merge_result: "{{ lookup('community.general.merge_variables', 'merge2__', pattern_type='prefix', groups=['consumer']) }}"
+ hosts:
+ host1:
diff --git a/ansible_collections/community/general/tests/integration/targets/lookup_merge_variables/test_cross_host_merge_play.yml b/ansible_collections/community/general/tests/integration/targets/lookup_merge_variables/test_cross_host_merge_play.yml
new file mode 100644
index 000000000..51cd6f1ba
--- /dev/null
+++ b/ansible_collections/community/general/tests/integration/targets/lookup_merge_variables/test_cross_host_merge_play.yml
@@ -0,0 +1,21 @@
+---
+# Copyright (c) 2020, Thales Netherlands
+# Copyright (c) 2021, Ansible Project
+# 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
+
+- name: Test merge_variables lookup plugin (merging host reference variables)
+ hosts: host1
+ connection: local
+ gather_facts: false
+ tasks:
+ - name: Print merge result
+ ansible.builtin.debug:
+ msg: "{{ merge_result }}"
+ - name: Validate merge result
+ ansible.builtin.assert:
+ that:
+ - "merge_result | length == 3"
+ - "merge_result.host == 'host1'"
+ - "merge_result.user == 'usr'"
+ - "merge_result.pass == 'pwd'"
diff --git a/ansible_collections/community/general/tests/integration/targets/module_helper/library/mdepfail.py b/ansible_collections/community/general/tests/integration/targets/module_helper/library/mdepfail.py
index 92ebbde6e..b61c32a4d 100644
--- a/ansible_collections/community/general/tests/integration/targets/module_helper/library/mdepfail.py
+++ b/ansible_collections/community/general/tests/integration/targets/module_helper/library/mdepfail.py
@@ -30,10 +30,10 @@ EXAMPLES = ""
RETURN = ""
+from ansible_collections.community.general.plugins.module_utils import deps
from ansible_collections.community.general.plugins.module_utils.module_helper import ModuleHelper
-from ansible.module_utils.basic import missing_required_lib
-with ModuleHelper.dependency("nopackagewiththisname", missing_required_lib("nopackagewiththisname")):
+with deps.declare("nopackagewiththisname"):
import nopackagewiththisname # noqa: F401, pylint: disable=unused-import
@@ -50,6 +50,7 @@ class MSimple(ModuleHelper):
def __init_module__(self):
self.vars.set('value', None)
self.vars.set('abc', "abc", diff=True)
+ deps.validate(self.module)
def __run__(self):
if (0 if self.vars.a is None else self.vars.a) >= 100:
diff --git a/ansible_collections/community/general/tests/integration/targets/module_helper/library/mstate.py b/ansible_collections/community/general/tests/integration/targets/module_helper/library/mstate.py
index bfaab0375..b3b4ed5e6 100644
--- a/ansible_collections/community/general/tests/integration/targets/module_helper/library/mstate.py
+++ b/ansible_collections/community/general/tests/integration/targets/module_helper/library/mstate.py
@@ -49,6 +49,7 @@ class MState(StateModuleHelper):
state=dict(type='str', choices=['join', 'b_x_a', 'c_x_a', 'both_x_a', 'nop'], default='join'),
),
)
+ use_old_vardict = False
def __init_module__(self):
self.vars.set('result', "abc", diff=True)
diff --git a/ansible_collections/community/general/tests/integration/targets/snap/tasks/main.yml b/ansible_collections/community/general/tests/integration/targets/snap/tasks/main.yml
index 2a683617a..a2d8698d0 100644
--- a/ansible_collections/community/general/tests/integration/targets/snap/tasks/main.yml
+++ b/ansible_collections/community/general/tests/integration/targets/snap/tasks/main.yml
@@ -13,10 +13,9 @@
block:
- name: Include test
ansible.builtin.include_tasks: test.yml
- # TODO: Find better package to install from a channel - microk8s installation takes multiple minutes, and even removal takes one minute!
- # - name: Include test_channel
- # ansible.builtin.include_tasks: test_channel.yml
- # TODO: Find bettter package to download and install from sources - cider 1.6.0 takes over 35 seconds to install
+ - name: Include test_channel
+ ansible.builtin.include_tasks: test_channel.yml
+ # TODO: Find better package to download and install from sources - cider 1.6.0 takes over 35 seconds to install
# - name: Include test_dangerous
# ansible.builtin.include_tasks: test_dangerous.yml
- name: Include test_3dash
diff --git a/ansible_collections/community/general/tests/integration/targets/snap/tasks/test_channel.yml b/ansible_collections/community/general/tests/integration/targets/snap/tasks/test_channel.yml
index e9eb19c89..353735761 100644
--- a/ansible_collections/community/general/tests/integration/targets/snap/tasks/test_channel.yml
+++ b/ansible_collections/community/general/tests/integration/targets/snap/tasks/test_channel.yml
@@ -5,47 +5,44 @@
# NOTE This is currently disabled for performance reasons!
-- name: Make sure package is not installed (microk8s)
+- name: Make sure package is not installed (wisdom)
community.general.snap:
- name: microk8s
+ name: wisdom
state: absent
# Test for https://github.com/ansible-collections/community.general/issues/1606
-- name: Install package (microk8s)
+- name: Install package (wisdom)
community.general.snap:
- name: microk8s
- classic: true
+ name: wisdom
state: present
- register: install_microk8s
+ register: install_wisdom
-- name: Install package with channel (microk8s)
+- name: Install package with channel (wisdom)
community.general.snap:
- name: microk8s
- classic: true
- channel: 1.20/stable
+ name: wisdom
state: present
- register: install_microk8s_chan
+ channel: latest/edge
+ register: install_wisdom_chan
-- name: Install package with channel (microk8s) again
+- name: Install package with channel (wisdom) again
community.general.snap:
- name: microk8s
- classic: true
- channel: 1.20/stable
+ name: wisdom
state: present
- register: install_microk8s_chan_again
+ channel: latest/edge
+ register: install_wisdom_chan_again
-- name: Remove package (microk8s)
+- name: Remove package (wisdom)
community.general.snap:
- name: microk8s
+ name: wisdom
state: absent
- register: remove_microk8s
+ register: remove_wisdom
- assert:
that:
- - install_microk8s is changed
- - install_microk8s_chan is changed
- - install_microk8s_chan_again is not changed
- - remove_microk8s is changed
+ - install_wisdom is changed
+ - install_wisdom_chan is changed
+ - install_wisdom_chan_again is not changed
+ - remove_wisdom is changed
- name: Install package (shellcheck)
community.general.snap:
diff --git a/ansible_collections/community/general/tests/sanity/ignore-2.13.txt b/ansible_collections/community/general/tests/sanity/ignore-2.13.txt
index 0665ddc1a..6f6495dd1 100644
--- a/ansible_collections/community/general/tests/sanity/ignore-2.13.txt
+++ b/ansible_collections/community/general/tests/sanity/ignore-2.13.txt
@@ -1,4 +1,6 @@
.azure-pipelines/scripts/publish-codecov.py replace-urlopen
+plugins/callback/timestamp.py validate-modules:invalid-documentation
+plugins/callback/yaml.py validate-modules:invalid-documentation
plugins/lookup/etcd.py validate-modules:invalid-documentation
plugins/lookup/etcd3.py validate-modules:invalid-documentation
plugins/modules/consul_session.py validate-modules:parameter-state-invalid-choice
@@ -6,9 +8,6 @@ plugins/modules/iptables_state.py validate-modules:undocumented-parameter
plugins/modules/lxc_container.py validate-modules:use-run-command-not-popen
plugins/modules/osx_defaults.py validate-modules:parameter-state-invalid-choice
plugins/modules/parted.py validate-modules:parameter-state-invalid-choice
-plugins/modules/rax_files_objects.py use-argspec-type-path # module deprecated - removed in 9.0.0
-plugins/modules/rax_files.py validate-modules:parameter-state-invalid-choice # module deprecated - removed in 9.0.0
-plugins/modules/rax.py use-argspec-type-path # module deprecated - removed in 9.0.0
plugins/modules/read_csv.py validate-modules:invalid-documentation
plugins/modules/rhevm.py validate-modules:parameter-state-invalid-choice
plugins/modules/xfconf.py validate-modules:return-syntax-error
diff --git a/ansible_collections/community/general/tests/sanity/ignore-2.14.txt b/ansible_collections/community/general/tests/sanity/ignore-2.14.txt
index fed147e44..24d752103 100644
--- a/ansible_collections/community/general/tests/sanity/ignore-2.14.txt
+++ b/ansible_collections/community/general/tests/sanity/ignore-2.14.txt
@@ -1,4 +1,6 @@
.azure-pipelines/scripts/publish-codecov.py replace-urlopen
+plugins/callback/timestamp.py validate-modules:invalid-documentation
+plugins/callback/yaml.py validate-modules:invalid-documentation
plugins/lookup/etcd.py validate-modules:invalid-documentation
plugins/lookup/etcd3.py validate-modules:invalid-documentation
plugins/modules/consul_session.py validate-modules:parameter-state-invalid-choice
@@ -7,9 +9,6 @@ plugins/modules/iptables_state.py validate-modules:undocumented-parameter
plugins/modules/lxc_container.py validate-modules:use-run-command-not-popen
plugins/modules/osx_defaults.py validate-modules:parameter-state-invalid-choice
plugins/modules/parted.py validate-modules:parameter-state-invalid-choice
-plugins/modules/rax_files_objects.py use-argspec-type-path # module deprecated - removed in 9.0.0
-plugins/modules/rax_files.py validate-modules:parameter-state-invalid-choice # module deprecated - removed in 9.0.0
-plugins/modules/rax.py use-argspec-type-path # module deprecated - removed in 9.0.0
plugins/modules/read_csv.py validate-modules:invalid-documentation
plugins/modules/rhevm.py validate-modules:parameter-state-invalid-choice
plugins/modules/udm_user.py import-3.11 # Uses deprecated stdlib library 'crypt'
diff --git a/ansible_collections/community/general/tests/sanity/ignore-2.15.txt b/ansible_collections/community/general/tests/sanity/ignore-2.15.txt
index d4c92c4d9..667c6cee4 100644
--- a/ansible_collections/community/general/tests/sanity/ignore-2.15.txt
+++ b/ansible_collections/community/general/tests/sanity/ignore-2.15.txt
@@ -5,9 +5,6 @@ plugins/modules/iptables_state.py validate-modules:undocumented-parameter
plugins/modules/lxc_container.py validate-modules:use-run-command-not-popen
plugins/modules/osx_defaults.py validate-modules:parameter-state-invalid-choice
plugins/modules/parted.py validate-modules:parameter-state-invalid-choice
-plugins/modules/rax_files_objects.py use-argspec-type-path # module deprecated - removed in 9.0.0
-plugins/modules/rax_files.py validate-modules:parameter-state-invalid-choice # module deprecated - removed in 9.0.0
-plugins/modules/rax.py use-argspec-type-path # module deprecated - removed in 9.0.0
plugins/modules/rhevm.py validate-modules:parameter-state-invalid-choice
plugins/modules/udm_user.py import-3.11 # Uses deprecated stdlib library 'crypt'
plugins/modules/xfconf.py validate-modules:return-syntax-error
diff --git a/ansible_collections/community/general/tests/sanity/ignore-2.16.txt b/ansible_collections/community/general/tests/sanity/ignore-2.16.txt
index 397c6d986..f6b058ec6 100644
--- a/ansible_collections/community/general/tests/sanity/ignore-2.16.txt
+++ b/ansible_collections/community/general/tests/sanity/ignore-2.16.txt
@@ -5,9 +5,6 @@ plugins/modules/iptables_state.py validate-modules:undocumented-parameter
plugins/modules/lxc_container.py validate-modules:use-run-command-not-popen
plugins/modules/osx_defaults.py validate-modules:parameter-state-invalid-choice
plugins/modules/parted.py validate-modules:parameter-state-invalid-choice
-plugins/modules/rax_files_objects.py use-argspec-type-path # module deprecated - removed in 9.0.0
-plugins/modules/rax_files.py validate-modules:parameter-state-invalid-choice # module deprecated - removed in 9.0.0
-plugins/modules/rax.py use-argspec-type-path # module deprecated - removed in 9.0.0
plugins/modules/rhevm.py validate-modules:parameter-state-invalid-choice
plugins/modules/udm_user.py import-3.11 # Uses deprecated stdlib library 'crypt'
plugins/modules/udm_user.py import-3.12 # Uses deprecated stdlib library 'crypt'
diff --git a/ansible_collections/community/general/tests/sanity/ignore-2.17.txt b/ansible_collections/community/general/tests/sanity/ignore-2.17.txt
index d75aaeac2..806c4c5fc 100644
--- a/ansible_collections/community/general/tests/sanity/ignore-2.17.txt
+++ b/ansible_collections/community/general/tests/sanity/ignore-2.17.txt
@@ -5,13 +5,11 @@ plugins/modules/iptables_state.py validate-modules:undocumented-parameter
plugins/modules/lxc_container.py validate-modules:use-run-command-not-popen
plugins/modules/osx_defaults.py validate-modules:parameter-state-invalid-choice
plugins/modules/parted.py validate-modules:parameter-state-invalid-choice
-plugins/modules/rax_files_objects.py use-argspec-type-path # module deprecated - removed in 9.0.0
-plugins/modules/rax_files.py validate-modules:parameter-state-invalid-choice # module deprecated - removed in 9.0.0
-plugins/modules/rax.py use-argspec-type-path # module deprecated - removed in 9.0.0
plugins/modules/rhevm.py validate-modules:parameter-state-invalid-choice
plugins/modules/udm_user.py import-3.11 # Uses deprecated stdlib library 'crypt'
plugins/modules/udm_user.py import-3.12 # Uses deprecated stdlib library 'crypt'
plugins/modules/xfconf.py validate-modules:return-syntax-error
plugins/module_utils/univention_umc.py pylint:use-yield-from # suggested construct does not work with Python 2
tests/unit/compat/mock.py pylint:use-yield-from # suggested construct does not work with Python 2
+tests/unit/plugins/modules/helper.py pylint:use-yield-from # suggested construct does not work with Python 2
tests/unit/plugins/modules/test_gio_mime.yaml no-smart-quotes
diff --git a/ansible_collections/community/general/tests/sanity/ignore-2.18.txt b/ansible_collections/community/general/tests/sanity/ignore-2.18.txt
index d75aaeac2..806c4c5fc 100644
--- a/ansible_collections/community/general/tests/sanity/ignore-2.18.txt
+++ b/ansible_collections/community/general/tests/sanity/ignore-2.18.txt
@@ -5,13 +5,11 @@ plugins/modules/iptables_state.py validate-modules:undocumented-parameter
plugins/modules/lxc_container.py validate-modules:use-run-command-not-popen
plugins/modules/osx_defaults.py validate-modules:parameter-state-invalid-choice
plugins/modules/parted.py validate-modules:parameter-state-invalid-choice
-plugins/modules/rax_files_objects.py use-argspec-type-path # module deprecated - removed in 9.0.0
-plugins/modules/rax_files.py validate-modules:parameter-state-invalid-choice # module deprecated - removed in 9.0.0
-plugins/modules/rax.py use-argspec-type-path # module deprecated - removed in 9.0.0
plugins/modules/rhevm.py validate-modules:parameter-state-invalid-choice
plugins/modules/udm_user.py import-3.11 # Uses deprecated stdlib library 'crypt'
plugins/modules/udm_user.py import-3.12 # Uses deprecated stdlib library 'crypt'
plugins/modules/xfconf.py validate-modules:return-syntax-error
plugins/module_utils/univention_umc.py pylint:use-yield-from # suggested construct does not work with Python 2
tests/unit/compat/mock.py pylint:use-yield-from # suggested construct does not work with Python 2
+tests/unit/plugins/modules/helper.py pylint:use-yield-from # suggested construct does not work with Python 2
tests/unit/plugins/modules/test_gio_mime.yaml no-smart-quotes
diff --git a/ansible_collections/community/general/tests/unit/plugins/become/test_run0.py b/ansible_collections/community/general/tests/unit/plugins/become/test_run0.py
new file mode 100644
index 000000000..7507c556e
--- /dev/null
+++ b/ansible_collections/community/general/tests/unit/plugins/become/test_run0.py
@@ -0,0 +1,64 @@
+# Copyright (c) 2024 Ansible Project
+#
+# 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
+
+import re
+
+from ansible import context
+
+from .helper import call_become_plugin
+
+
+def test_run0_basic(mocker, parser, reset_cli_args):
+ options = parser.parse_args([])
+ context._init_global_context(options)
+
+ default_cmd = "/bin/foo"
+ default_exe = "/bin/sh"
+ run0_exe = "run0"
+
+ success = "BECOME-SUCCESS-.+?"
+
+ task = {
+ "become_method": "community.general.run0",
+ }
+ var_options = {}
+ cmd = call_become_plugin(task, var_options, cmd=default_cmd, executable=default_exe)
+ assert (
+ re.match(
+ f"{run0_exe} --user=root {default_exe} -c 'echo {success}; {default_cmd}'",
+ cmd,
+ )
+ is not None
+ )
+
+
+def test_run0_flags(mocker, parser, reset_cli_args):
+ options = parser.parse_args([])
+ context._init_global_context(options)
+
+ default_cmd = "/bin/foo"
+ default_exe = "/bin/sh"
+ run0_exe = "run0"
+ run0_flags = "--nice=15"
+
+ success = "BECOME-SUCCESS-.+?"
+
+ task = {
+ "become_method": "community.general.run0",
+ "become_flags": run0_flags,
+ }
+ var_options = {}
+ cmd = call_become_plugin(task, var_options, cmd=default_cmd, executable=default_exe)
+ assert (
+ re.match(
+ f"{run0_exe} --user=root --nice=15 {default_exe} -c 'echo {success}; {default_cmd}'",
+ cmd,
+ )
+ is not None
+ )
diff --git a/ansible_collections/community/general/tests/unit/plugins/lookup/test_merge_variables.py b/ansible_collections/community/general/tests/unit/plugins/lookup/test_merge_variables.py
index 66cb2f08b..ba8209439 100644
--- a/ansible_collections/community/general/tests/unit/plugins/lookup/test_merge_variables.py
+++ b/ansible_collections/community/general/tests/unit/plugins/lookup/test_merge_variables.py
@@ -18,6 +18,17 @@ from ansible_collections.community.general.plugins.lookup import merge_variables
class TestMergeVariablesLookup(unittest.TestCase):
+ class HostVarsMock(dict):
+
+ def __getattr__(self, item):
+ return super().__getitem__(item)
+
+ def __setattr__(self, item, value):
+ return super().__setitem__(item, value)
+
+ def raw_get(self, host):
+ return super().__getitem__(host)
+
def setUp(self):
self.loader = DictDataLoader({})
self.templar = Templar(loader=self.loader, variables={})
@@ -141,25 +152,28 @@ class TestMergeVariablesLookup(unittest.TestCase):
{'var': [{'item5': 'value5', 'item6': 'value6'}]},
])
def test_merge_dict_group_all(self, mock_set_options, mock_get_option, mock_template):
- results = self.merge_vars_lookup.run(['__merge_var'], {
- 'inventory_hostname': 'host1',
- 'hostvars': {
- 'host1': {
- 'group_names': ['dummy1'],
- 'inventory_hostname': 'host1',
- '1testlist__merge_var': {
- 'var': [{'item1': 'value1', 'item2': 'value2'}]
- }
- },
- 'host2': {
- 'group_names': ['dummy1'],
- 'inventory_hostname': 'host2',
- '2otherlist__merge_var': {
- 'var': [{'item5': 'value5', 'item6': 'value6'}]
- }
+ hostvars = self.HostVarsMock({
+ 'host1': {
+ 'group_names': ['dummy1'],
+ 'inventory_hostname': 'host1',
+ '1testlist__merge_var': {
+ 'var': [{'item1': 'value1', 'item2': 'value2'}]
+ }
+ },
+ 'host2': {
+ 'group_names': ['dummy1'],
+ 'inventory_hostname': 'host2',
+ '2otherlist__merge_var': {
+ 'var': [{'item5': 'value5', 'item6': 'value6'}]
}
}
})
+ variables = {
+ 'inventory_hostname': 'host1',
+ 'hostvars': hostvars
+ }
+
+ results = self.merge_vars_lookup.run(['__merge_var'], variables)
self.assertEqual(results, [
{'var': [
@@ -175,32 +189,35 @@ class TestMergeVariablesLookup(unittest.TestCase):
{'var': [{'item5': 'value5', 'item6': 'value6'}]},
])
def test_merge_dict_group_single(self, mock_set_options, mock_get_option, mock_template):
- results = self.merge_vars_lookup.run(['__merge_var'], {
- 'inventory_hostname': 'host1',
- 'hostvars': {
- 'host1': {
- 'group_names': ['dummy1'],
- 'inventory_hostname': 'host1',
- '1testlist__merge_var': {
- 'var': [{'item1': 'value1', 'item2': 'value2'}]
- }
- },
- 'host2': {
- 'group_names': ['dummy1'],
- 'inventory_hostname': 'host2',
- '2otherlist__merge_var': {
- 'var': [{'item5': 'value5', 'item6': 'value6'}]
- }
- },
- 'host3': {
- 'group_names': ['dummy2'],
- 'inventory_hostname': 'host3',
- '3otherlist__merge_var': {
- 'var': [{'item3': 'value3', 'item4': 'value4'}]
- }
+ hostvars = self.HostVarsMock({
+ 'host1': {
+ 'group_names': ['dummy1'],
+ 'inventory_hostname': 'host1',
+ '1testlist__merge_var': {
+ 'var': [{'item1': 'value1', 'item2': 'value2'}]
+ }
+ },
+ 'host2': {
+ 'group_names': ['dummy1'],
+ 'inventory_hostname': 'host2',
+ '2otherlist__merge_var': {
+ 'var': [{'item5': 'value5', 'item6': 'value6'}]
+ }
+ },
+ 'host3': {
+ 'group_names': ['dummy2'],
+ 'inventory_hostname': 'host3',
+ '3otherlist__merge_var': {
+ 'var': [{'item3': 'value3', 'item4': 'value4'}]
}
}
})
+ variables = {
+ 'inventory_hostname': 'host1',
+ 'hostvars': hostvars
+ }
+
+ results = self.merge_vars_lookup.run(['__merge_var'], variables)
self.assertEqual(results, [
{'var': [
@@ -216,32 +233,34 @@ class TestMergeVariablesLookup(unittest.TestCase):
{'var': [{'item5': 'value5', 'item6': 'value6'}]},
])
def test_merge_dict_group_multiple(self, mock_set_options, mock_get_option, mock_template):
- results = self.merge_vars_lookup.run(['__merge_var'], {
- 'inventory_hostname': 'host1',
- 'hostvars': {
- 'host1': {
- 'group_names': ['dummy1'],
- 'inventory_hostname': 'host1',
- '1testlist__merge_var': {
- 'var': [{'item1': 'value1', 'item2': 'value2'}]
- }
- },
- 'host2': {
- 'group_names': ['dummy2'],
- 'inventory_hostname': 'host2',
- '2otherlist__merge_var': {
- 'var': [{'item5': 'value5', 'item6': 'value6'}]
- }
- },
- 'host3': {
- 'group_names': ['dummy3'],
- 'inventory_hostname': 'host3',
- '3otherlist__merge_var': {
- 'var': [{'item3': 'value3', 'item4': 'value4'}]
- }
+ hostvars = self.HostVarsMock({
+ 'host1': {
+ 'group_names': ['dummy1'],
+ 'inventory_hostname': 'host1',
+ '1testlist__merge_var': {
+ 'var': [{'item1': 'value1', 'item2': 'value2'}]
+ }
+ },
+ 'host2': {
+ 'group_names': ['dummy2'],
+ 'inventory_hostname': 'host2',
+ '2otherlist__merge_var': {
+ 'var': [{'item5': 'value5', 'item6': 'value6'}]
+ }
+ },
+ 'host3': {
+ 'group_names': ['dummy3'],
+ 'inventory_hostname': 'host3',
+ '3otherlist__merge_var': {
+ 'var': [{'item3': 'value3', 'item4': 'value4'}]
}
}
})
+ variables = {
+ 'inventory_hostname': 'host1',
+ 'hostvars': hostvars
+ }
+ results = self.merge_vars_lookup.run(['__merge_var'], variables)
self.assertEqual(results, [
{'var': [
@@ -257,26 +276,27 @@ class TestMergeVariablesLookup(unittest.TestCase):
['item5'],
])
def test_merge_list_group_multiple(self, mock_set_options, mock_get_option, mock_template):
- print()
- results = self.merge_vars_lookup.run(['__merge_var'], {
- 'inventory_hostname': 'host1',
- 'hostvars': {
- 'host1': {
- 'group_names': ['dummy1'],
- 'inventory_hostname': 'host1',
- '1testlist__merge_var': ['item1']
- },
- 'host2': {
- 'group_names': ['dummy2'],
- 'inventory_hostname': 'host2',
- '2otherlist__merge_var': ['item5']
- },
- 'host3': {
- 'group_names': ['dummy3'],
- 'inventory_hostname': 'host3',
- '3otherlist__merge_var': ['item3']
- }
+ hostvars = self.HostVarsMock({
+ 'host1': {
+ 'group_names': ['dummy1'],
+ 'inventory_hostname': 'host1',
+ '1testlist__merge_var': ['item1']
+ },
+ 'host2': {
+ 'group_names': ['dummy2'],
+ 'inventory_hostname': 'host2',
+ '2otherlist__merge_var': ['item5']
+ },
+ 'host3': {
+ 'group_names': ['dummy3'],
+ 'inventory_hostname': 'host3',
+ '3otherlist__merge_var': ['item3']
}
})
+ variables = {
+ 'inventory_hostname': 'host1',
+ 'hostvars': hostvars
+ }
+ results = self.merge_vars_lookup.run(['__merge_var'], variables)
self.assertEqual(results, [['item1', 'item5']])
diff --git a/ansible_collections/community/general/tests/unit/plugins/module_utils/test_cmd_runner.py b/ansible_collections/community/general/tests/unit/plugins/module_utils/test_cmd_runner.py
index 86576e8ce..6816afb34 100644
--- a/ansible_collections/community/general/tests/unit/plugins/module_utils/test_cmd_runner.py
+++ b/ansible_collections/community/general/tests/unit/plugins/module_utils/test_cmd_runner.py
@@ -7,6 +7,7 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
from sys import version_info
+from functools import partial
import pytest
@@ -15,55 +16,64 @@ from ansible_collections.community.general.plugins.module_utils.cmd_runner impor
TC_FORMATS = dict(
- simple_boolean__true=(cmd_runner_fmt.as_bool, ("--superflag",), True, ["--superflag"]),
- simple_boolean__false=(cmd_runner_fmt.as_bool, ("--superflag",), False, []),
- simple_boolean__none=(cmd_runner_fmt.as_bool, ("--superflag",), None, []),
- simple_boolean_both__true=(cmd_runner_fmt.as_bool, ("--superflag", "--falseflag"), True, ["--superflag"]),
- simple_boolean_both__false=(cmd_runner_fmt.as_bool, ("--superflag", "--falseflag"), False, ["--falseflag"]),
- simple_boolean_both__none=(cmd_runner_fmt.as_bool, ("--superflag", "--falseflag"), None, ["--falseflag"]),
- simple_boolean_both__none_ig=(cmd_runner_fmt.as_bool, ("--superflag", "--falseflag", True), None, []),
- simple_boolean_not__true=(cmd_runner_fmt.as_bool_not, ("--superflag",), True, []),
- simple_boolean_not__false=(cmd_runner_fmt.as_bool_not, ("--superflag",), False, ["--superflag"]),
- simple_boolean_not__none=(cmd_runner_fmt.as_bool_not, ("--superflag",), None, ["--superflag"]),
- simple_optval__str=(cmd_runner_fmt.as_optval, ("-t",), "potatoes", ["-tpotatoes"]),
- simple_optval__int=(cmd_runner_fmt.as_optval, ("-t",), 42, ["-t42"]),
- simple_opt_val__str=(cmd_runner_fmt.as_opt_val, ("-t",), "potatoes", ["-t", "potatoes"]),
- simple_opt_val__int=(cmd_runner_fmt.as_opt_val, ("-t",), 42, ["-t", "42"]),
- simple_opt_eq_val__str=(cmd_runner_fmt.as_opt_eq_val, ("--food",), "potatoes", ["--food=potatoes"]),
- simple_opt_eq_val__int=(cmd_runner_fmt.as_opt_eq_val, ("--answer",), 42, ["--answer=42"]),
- simple_list_potato=(cmd_runner_fmt.as_list, (), "literal_potato", ["literal_potato"]),
- simple_list_42=(cmd_runner_fmt.as_list, (), 42, ["42"]),
- simple_map=(cmd_runner_fmt.as_map, ({'a': 1, 'b': 2, 'c': 3},), 'b', ["2"]),
- simple_default_type__list=(cmd_runner_fmt.as_default_type, ("list",), [1, 2, 3, 5, 8], ["--1", "--2", "--3", "--5", "--8"]),
- simple_default_type__bool_true=(cmd_runner_fmt.as_default_type, ("bool", "what"), True, ["--what"]),
- simple_default_type__bool_false=(cmd_runner_fmt.as_default_type, ("bool", "what"), False, []),
- simple_default_type__potato=(cmd_runner_fmt.as_default_type, ("any-other-type", "potato"), "42", ["--potato", "42"]),
- simple_fixed_true=(cmd_runner_fmt.as_fixed, [("--always-here", "--forever")], True, ["--always-here", "--forever"]),
- simple_fixed_false=(cmd_runner_fmt.as_fixed, [("--always-here", "--forever")], False, ["--always-here", "--forever"]),
- simple_fixed_none=(cmd_runner_fmt.as_fixed, [("--always-here", "--forever")], None, ["--always-here", "--forever"]),
- simple_fixed_str=(cmd_runner_fmt.as_fixed, [("--always-here", "--forever")], "something", ["--always-here", "--forever"]),
+ simple_boolean__true=(partial(cmd_runner_fmt.as_bool, "--superflag"), True, ["--superflag"], None),
+ simple_boolean__false=(partial(cmd_runner_fmt.as_bool, "--superflag"), False, [], None),
+ simple_boolean__none=(partial(cmd_runner_fmt.as_bool, "--superflag"), None, [], None),
+ simple_boolean_both__true=(partial(cmd_runner_fmt.as_bool, "--superflag", "--falseflag"), True, ["--superflag"], None),
+ simple_boolean_both__false=(partial(cmd_runner_fmt.as_bool, "--superflag", "--falseflag"), False, ["--falseflag"], None),
+ simple_boolean_both__none=(partial(cmd_runner_fmt.as_bool, "--superflag", "--falseflag"), None, ["--falseflag"], None),
+ simple_boolean_both__none_ig=(partial(cmd_runner_fmt.as_bool, "--superflag", "--falseflag", True), None, [], None),
+ simple_boolean_not__true=(partial(cmd_runner_fmt.as_bool_not, "--superflag"), True, [], None),
+ simple_boolean_not__false=(partial(cmd_runner_fmt.as_bool_not, "--superflag"), False, ["--superflag"], None),
+ simple_boolean_not__none=(partial(cmd_runner_fmt.as_bool_not, "--superflag"), None, ["--superflag"], None),
+ simple_optval__str=(partial(cmd_runner_fmt.as_optval, "-t"), "potatoes", ["-tpotatoes"], None),
+ simple_optval__int=(partial(cmd_runner_fmt.as_optval, "-t"), 42, ["-t42"], None),
+ simple_opt_val__str=(partial(cmd_runner_fmt.as_opt_val, "-t"), "potatoes", ["-t", "potatoes"], None),
+ simple_opt_val__int=(partial(cmd_runner_fmt.as_opt_val, "-t"), 42, ["-t", "42"], None),
+ simple_opt_eq_val__str=(partial(cmd_runner_fmt.as_opt_eq_val, "--food"), "potatoes", ["--food=potatoes"], None),
+ simple_opt_eq_val__int=(partial(cmd_runner_fmt.as_opt_eq_val, "--answer"), 42, ["--answer=42"], None),
+ simple_list_potato=(cmd_runner_fmt.as_list, "literal_potato", ["literal_potato"], None),
+ simple_list_42=(cmd_runner_fmt.as_list, 42, ["42"], None),
+ simple_list_min_len_ok=(partial(cmd_runner_fmt.as_list, min_len=1), 42, ["42"], None),
+ simple_list_min_len_fail=(partial(cmd_runner_fmt.as_list, min_len=10), 42, None, ValueError),
+ simple_list_max_len_ok=(partial(cmd_runner_fmt.as_list, max_len=1), 42, ["42"], None),
+ simple_list_max_len_fail=(partial(cmd_runner_fmt.as_list, max_len=2), [42, 42, 42], None, ValueError),
+ simple_map=(partial(cmd_runner_fmt.as_map, {'a': 1, 'b': 2, 'c': 3}), 'b', ["2"], None),
+ simple_default_type__list=(partial(cmd_runner_fmt.as_default_type, "list"), [1, 2, 3, 5, 8], ["--1", "--2", "--3", "--5", "--8"], None),
+ simple_default_type__bool_true=(partial(cmd_runner_fmt.as_default_type, "bool", "what"), True, ["--what"], None),
+ simple_default_type__bool_false=(partial(cmd_runner_fmt.as_default_type, "bool", "what"), False, [], None),
+ simple_default_type__potato=(partial(cmd_runner_fmt.as_default_type, "any-other-type", "potato"), "42", ["--potato", "42"], None),
+ simple_fixed_true=(partial(cmd_runner_fmt.as_fixed, ["--always-here", "--forever"]), True, ["--always-here", "--forever"], None),
+ simple_fixed_false=(partial(cmd_runner_fmt.as_fixed, ["--always-here", "--forever"]), False, ["--always-here", "--forever"], None),
+ simple_fixed_none=(partial(cmd_runner_fmt.as_fixed, ["--always-here", "--forever"]), None, ["--always-here", "--forever"], None),
+ simple_fixed_str=(partial(cmd_runner_fmt.as_fixed, ["--always-here", "--forever"]), "something", ["--always-here", "--forever"], None),
)
if tuple(version_info) >= (3, 1):
from collections import OrderedDict
# needs OrderedDict to provide a consistent key order
TC_FORMATS["simple_default_type__dict"] = ( # type: ignore
- cmd_runner_fmt.as_default_type,
- ("dict",),
+ partial(cmd_runner_fmt.as_default_type, "dict"),
OrderedDict((('a', 1), ('b', 2))),
- ["--a=1", "--b=2"]
+ ["--a=1", "--b=2"],
+ None
)
TC_FORMATS_IDS = sorted(TC_FORMATS.keys())
-@pytest.mark.parametrize('func, fmt_opt, value, expected',
+@pytest.mark.parametrize('func, value, expected, exception',
(TC_FORMATS[tc] for tc in TC_FORMATS_IDS),
ids=TC_FORMATS_IDS)
-def test_arg_format(func, fmt_opt, value, expected):
- fmt_func = func(*fmt_opt)
- actual = fmt_func(value, ctx_ignore_none=True)
- print("formatted string = {0}".format(actual))
- assert actual == expected, "actual = {0}".format(actual)
+def test_arg_format(func, value, expected, exception):
+ fmt_func = func()
+ try:
+ actual = fmt_func(value, ctx_ignore_none=True)
+ print("formatted string = {0}".format(actual))
+ assert actual == expected, "actual = {0}".format(actual)
+ except Exception as e:
+ if exception is None:
+ raise
+ assert isinstance(e, exception)
TC_RUNNER = dict(
diff --git a/ansible_collections/community/general/tests/unit/plugins/module_utils/test_python_runner.py b/ansible_collections/community/general/tests/unit/plugins/module_utils/test_python_runner.py
new file mode 100644
index 000000000..015065bdd
--- /dev/null
+++ b/ansible_collections/community/general/tests/unit/plugins/module_utils/test_python_runner.py
@@ -0,0 +1,223 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2024, Alexei Znamensky <russoz@gmail.com>
+# 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
+
+import os
+
+import pytest
+
+from ansible_collections.community.general.tests.unit.compat.mock import MagicMock, PropertyMock
+from ansible_collections.community.general.plugins.module_utils.cmd_runner import cmd_runner_fmt
+from ansible_collections.community.general.plugins.module_utils.python_runner import PythonRunner
+
+
+TC_RUNNER = dict(
+ # SAMPLE: This shows all possible elements of a test case. It does not actually run.
+ #
+ # testcase_name=(
+ # # input
+ # dict(
+ # args_bundle = dict(
+ # param1=dict(
+ # type="int",
+ # value=11,
+ # fmt_func=cmd_runner_fmt.as_opt_eq_val,
+ # fmt_arg="--answer",
+ # ),
+ # param2=dict(
+ # fmt_func=cmd_runner_fmt.as_bool,
+ # fmt_arg="--bb-here",
+ # )
+ # ),
+ # runner_init_args = dict(
+ # command="testing",
+ # default_args_order=(),
+ # check_rc=False,
+ # force_lang="C",
+ # path_prefix=None,
+ # environ_update=None,
+ # ),
+ # runner_ctx_args = dict(
+ # args_order=['aa', 'bb'],
+ # output_process=None,
+ # ignore_value_none=True,
+ # ),
+ # ),
+ # # command execution
+ # dict(
+ # runner_ctx_run_args = dict(bb=True),
+ # rc = 0,
+ # out = "",
+ # err = "",
+ # ),
+ # # expected
+ # dict(
+ # results=(),
+ # run_info=dict(
+ # cmd=['/mock/bin/testing', '--answer=11', '--bb-here'],
+ # environ_update={'LANGUAGE': 'C', 'LC_ALL': 'C'},
+ # ),
+ # exc=None,
+ # ),
+ # ),
+ #
+ aa_bb=(
+ dict(
+ args_bundle=dict(
+ aa=dict(type="int", value=11, fmt_func=cmd_runner_fmt.as_opt_eq_val, fmt_arg="--answer"),
+ bb=dict(fmt_func=cmd_runner_fmt.as_bool, fmt_arg="--bb-here"),
+ ),
+ runner_init_args=dict(command="testing"),
+ runner_ctx_args=dict(args_order=['aa', 'bb']),
+ ),
+ dict(runner_ctx_run_args=dict(bb=True), rc=0, out="", err=""),
+ dict(
+ run_info=dict(
+ cmd=['/mock/bin/python', 'testing', '--answer=11', '--bb-here'],
+ environ_update={'LANGUAGE': 'C', 'LC_ALL': 'C'},
+ args_order=('aa', 'bb'),
+ ),
+ ),
+ ),
+ aa_bb_py3=(
+ dict(
+ args_bundle=dict(
+ aa=dict(type="int", value=11, fmt_func=cmd_runner_fmt.as_opt_eq_val, fmt_arg="--answer"),
+ bb=dict(fmt_func=cmd_runner_fmt.as_bool, fmt_arg="--bb-here"),
+ ),
+ runner_init_args=dict(command="toasting", python="python3"),
+ runner_ctx_args=dict(args_order=['aa', 'bb']),
+ ),
+ dict(runner_ctx_run_args=dict(bb=True), rc=0, out="", err=""),
+ dict(
+ run_info=dict(
+ cmd=['/mock/bin/python3', 'toasting', '--answer=11', '--bb-here'],
+ environ_update={'LANGUAGE': 'C', 'LC_ALL': 'C'},
+ args_order=('aa', 'bb'),
+ ),
+ ),
+ ),
+ aa_bb_abspath=(
+ dict(
+ args_bundle=dict(
+ aa=dict(type="int", value=11, fmt_func=cmd_runner_fmt.as_opt_eq_val, fmt_arg="--answer"),
+ bb=dict(fmt_func=cmd_runner_fmt.as_bool, fmt_arg="--bb-here"),
+ ),
+ runner_init_args=dict(command="toasting", python="/crazy/local/bin/python3"),
+ runner_ctx_args=dict(args_order=['aa', 'bb']),
+ ),
+ dict(runner_ctx_run_args=dict(bb=True), rc=0, out="", err=""),
+ dict(
+ run_info=dict(
+ cmd=['/crazy/local/bin/python3', 'toasting', '--answer=11', '--bb-here'],
+ environ_update={'LANGUAGE': 'C', 'LC_ALL': 'C'},
+ args_order=('aa', 'bb'),
+ ),
+ ),
+ ),
+ aa_bb_venv=(
+ dict(
+ args_bundle=dict(
+ aa=dict(type="int", value=11, fmt_func=cmd_runner_fmt.as_opt_eq_val, fmt_arg="--answer"),
+ bb=dict(fmt_func=cmd_runner_fmt.as_bool, fmt_arg="--bb-here"),
+ ),
+ runner_init_args=dict(command="toasting", venv="/venv"),
+ runner_ctx_args=dict(args_order=['aa', 'bb']),
+ ),
+ dict(runner_ctx_run_args=dict(bb=True), rc=0, out="", err=""),
+ dict(
+ run_info=dict(
+ cmd=['/venv/bin/python', 'toasting', '--answer=11', '--bb-here'],
+ environ_update={'LANGUAGE': 'C', 'LC_ALL': 'C', 'VIRTUAL_ENV': '/venv', 'PATH': '/venv/bin'},
+ args_order=('aa', 'bb'),
+ ),
+ ),
+ ),
+)
+TC_RUNNER_IDS = sorted(TC_RUNNER.keys())
+
+
+@pytest.mark.parametrize('runner_input, cmd_execution, expected',
+ (TC_RUNNER[tc] for tc in TC_RUNNER_IDS),
+ ids=TC_RUNNER_IDS)
+def test_runner_context(runner_input, cmd_execution, expected):
+ arg_spec = {}
+ params = {}
+ arg_formats = {}
+ for k, v in runner_input['args_bundle'].items():
+ try:
+ arg_spec[k] = {'type': v['type']}
+ except KeyError:
+ pass
+ try:
+ params[k] = v['value']
+ except KeyError:
+ pass
+ try:
+ arg_formats[k] = v['fmt_func'](v['fmt_arg'])
+ except KeyError:
+ pass
+
+ orig_results = tuple(cmd_execution[x] for x in ('rc', 'out', 'err'))
+
+ print("arg_spec={0}\nparams={1}\narg_formats={2}\n".format(
+ arg_spec,
+ params,
+ arg_formats,
+ ))
+
+ module = MagicMock()
+ type(module).argument_spec = PropertyMock(return_value=arg_spec)
+ type(module).params = PropertyMock(return_value=params)
+ module.get_bin_path.return_value = os.path.join(
+ runner_input["runner_init_args"].get("venv", "/mock"),
+ "bin",
+ runner_input["runner_init_args"].get("python", "python")
+ )
+ module.run_command.return_value = orig_results
+
+ runner = PythonRunner(
+ module=module,
+ arg_formats=arg_formats,
+ **runner_input['runner_init_args']
+ )
+
+ def _extract_path(run_info):
+ path = run_info.get("environ_update", {}).get("PATH")
+ if path is not None:
+ run_info["environ_update"] = dict((k, v)
+ for k, v in run_info["environ_update"].items()
+ if k != "PATH")
+ return run_info, path
+
+ def _assert_run_info_env_path(actual, expected):
+ actual2 = set(actual.split(":"))
+ assert expected in actual2, "Missing expected path {0} in output PATH: {1}".format(expected, actual)
+
+ def _assert_run_info(actual, expected):
+ reduced = dict((k, actual[k]) for k in expected.keys())
+ reduced, act_path = _extract_path(reduced)
+ expected, exp_path = _extract_path(expected)
+ if exp_path is not None:
+ _assert_run_info_env_path(act_path, exp_path)
+ assert reduced == expected, "{0}".format(reduced)
+
+ def _assert_run(expected, ctx, results):
+ _assert_run_info(ctx.run_info, expected['run_info'])
+ assert results == expected.get('results', orig_results)
+
+ exc = expected.get("exc")
+ if exc:
+ with pytest.raises(exc):
+ with runner.context(**runner_input['runner_ctx_args']) as ctx:
+ results = ctx.run(**cmd_execution['runner_ctx_run_args'])
+ _assert_run(expected, ctx, results)
+
+ else:
+ with runner.context(**runner_input['runner_ctx_args']) as ctx:
+ results = ctx.run(**cmd_execution['runner_ctx_run_args'])
+ _assert_run(expected, ctx, results)
diff --git a/ansible_collections/community/general/tests/unit/plugins/modules/helper.py b/ansible_collections/community/general/tests/unit/plugins/modules/helper.py
index a7322bf4d..e012980af 100644
--- a/ansible_collections/community/general/tests/unit/plugins/modules/helper.py
+++ b/ansible_collections/community/general/tests/unit/plugins/modules/helper.py
@@ -9,7 +9,6 @@ __metaclass__ = type
import sys
import json
from collections import namedtuple
-from itertools import chain, repeat
import pytest
import yaml
@@ -52,9 +51,9 @@ class _BaseContext(object):
test_flags = self.test_flags()
if test_flags.get("skip"):
- pytest.skip()
+ pytest.skip(test_flags.get("skip"))
if test_flags.get("xfail"):
- pytest.xfail()
+ pytest.xfail(test_flags.get("xfail"))
func()
@@ -76,12 +75,21 @@ class _RunCmdContext(_BaseContext):
self.mock_run_cmd = self._make_mock_run_cmd()
def _make_mock_run_cmd(self):
- call_results = [(x.rc, x.out, x.err) for x in self.run_cmd_calls]
- error_call_results = (123,
- "OUT: testcase has not enough run_command calls",
- "ERR: testcase has not enough run_command calls")
+ def _results():
+ for result in [(x.rc, x.out, x.err) for x in self.run_cmd_calls]:
+ yield result
+ raise Exception("testcase has not enough run_command calls")
+
+ results = _results()
+
+ def side_effect(self_, **kwargs):
+ result = next(results)
+ if kwargs.get("check_rc", False) and result[0] != 0:
+ raise Exception("rc = {0}".format(result[0]))
+ return result
+
mock_run_command = self.mocker.patch('ansible.module_utils.basic.AnsibleModule.run_command',
- side_effect=chain(call_results, repeat(error_call_results)))
+ side_effect=side_effect)
return mock_run_command
def check_results(self, results):
diff --git a/ansible_collections/community/general/tests/unit/plugins/modules/test_cpanm.yaml b/ansible_collections/community/general/tests/unit/plugins/modules/test_cpanm.yaml
index 3ed718d48..4eed95720 100644
--- a/ansible_collections/community/general/tests/unit/plugins/modules/test_cpanm.yaml
+++ b/ansible_collections/community/general/tests/unit/plugins/modules/test_cpanm.yaml
@@ -7,6 +7,7 @@
- id: install_dancer_compatibility
input:
name: Dancer
+ mode: compatibility
output:
changed: true
run_command_calls:
@@ -23,6 +24,7 @@
- id: install_dancer_already_installed_compatibility
input:
name: Dancer
+ mode: compatibility
output:
changed: false
run_command_calls:
@@ -34,7 +36,6 @@
- id: install_dancer
input:
name: Dancer
- mode: new
output:
changed: true
run_command_calls:
@@ -46,6 +47,7 @@
- id: install_distribution_file_compatibility
input:
name: MIYAGAWA/Plack-0.99_05.tar.gz
+ mode: compatibility
output:
changed: true
run_command_calls:
@@ -57,7 +59,6 @@
- id: install_distribution_file
input:
name: MIYAGAWA/Plack-0.99_05.tar.gz
- mode: new
output:
changed: true
run_command_calls:
diff --git a/ansible_collections/community/general/tests/unit/plugins/modules/test_django_command.py b/ansible_collections/community/general/tests/unit/plugins/modules/test_django_command.py
new file mode 100644
index 000000000..ffa9feb39
--- /dev/null
+++ b/ansible_collections/community/general/tests/unit/plugins/modules/test_django_command.py
@@ -0,0 +1,13 @@
+# Copyright (c) Alexei Znamensky (russoz@gmail.com)
+# 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
+
+
+from ansible_collections.community.general.plugins.modules import django_command
+from .helper import Helper
+
+
+Helper.from_module(django_command, __name__)
diff --git a/ansible_collections/community/general/tests/unit/plugins/modules/test_django_command.yaml b/ansible_collections/community/general/tests/unit/plugins/modules/test_django_command.yaml
new file mode 100644
index 000000000..046dd87f0
--- /dev/null
+++ b/ansible_collections/community/general/tests/unit/plugins/modules/test_django_command.yaml
@@ -0,0 +1,38 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) Alexei Znamensky (russoz@gmail.com)
+# 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
+
+---
+- id: command_success
+ input:
+ command: check
+ extra_args:
+ - babaloo
+ - yaba
+ - daba
+ - doo
+ settings: whatever.settings
+ run_command_calls:
+ - command: [/testbin/python, -m, django, check, --no-color, --settings=whatever.settings, babaloo, yaba, daba, doo]
+ environ: &env-def {environ_update: {LANGUAGE: C, LC_ALL: C}, check_rc: true}
+ rc: 0
+ out: "whatever\n"
+ err: ""
+- id: command_fail
+ input:
+ command: check
+ extra_args:
+ - babaloo
+ - yaba
+ - daba
+ - doo
+ settings: whatever.settings
+ output:
+ failed: true
+ run_command_calls:
+ - command: [/testbin/python, -m, django, check, --no-color, --settings=whatever.settings, babaloo, yaba, daba, doo]
+ environ: *env-def
+ rc: 1
+ out: "whatever\n"
+ err: ""
diff --git a/ansible_collections/community/general/tests/unit/plugins/modules/test_homebrew.py b/ansible_collections/community/general/tests/unit/plugins/modules/test_homebrew.py
index f849b433d..d04ca4de5 100644
--- a/ansible_collections/community/general/tests/unit/plugins/modules/test_homebrew.py
+++ b/ansible_collections/community/general/tests/unit/plugins/modules/test_homebrew.py
@@ -2,23 +2,28 @@
# 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)
+from __future__ import absolute_import, division, print_function
__metaclass__ = type
from ansible_collections.community.general.tests.unit.compat import unittest
-from ansible_collections.community.general.plugins.modules.homebrew import Homebrew
+from ansible_collections.community.general.plugins.module_utils.homebrew import HomebrewValidate
class TestHomebrewModule(unittest.TestCase):
def setUp(self):
- self.brew_app_names = [
- 'git-ssh',
- 'awscli@1',
- 'bash'
+ self.brew_app_names = ["git-ssh", "awscli@1", "bash"]
+
+ self.invalid_names = [
+ "git ssh",
+ "git*",
]
def test_valid_package_names(self):
for name in self.brew_app_names:
- self.assertTrue(Homebrew.valid_package(name))
+ self.assertTrue(HomebrewValidate.valid_package(name))
+
+ def test_invalid_package_names(self):
+ for name in self.invalid_names:
+ self.assertFalse(HomebrewValidate.valid_package(name))
diff --git a/ansible_collections/community/general/tests/unit/plugins/modules/test_puppet.yaml b/ansible_collections/community/general/tests/unit/plugins/modules/test_puppet.yaml
index 308be9797..7909403cf 100644
--- a/ansible_collections/community/general/tests/unit/plugins/modules/test_puppet.yaml
+++ b/ansible_collections/community/general/tests/unit/plugins/modules/test_puppet.yaml
@@ -190,3 +190,35 @@
rc: 0
out: ""
err: ""
+- id: puppet_agent_waitforlock
+ input:
+ waitforlock: 30
+ output:
+ changed: false
+ run_command_calls:
+ - command: [/testbin/puppet, config, print, agent_disabled_lockfile]
+ environ: *env-def
+ rc: 0
+ out: "blah, anything"
+ err: ""
+ - command:
+ - /testbin/timeout
+ - -s
+ - "9"
+ - 30m
+ - /testbin/puppet
+ - agent
+ - --onetime
+ - --no-daemonize
+ - --no-usecacheonfailure
+ - --no-splay
+ - --detailed-exitcodes
+ - --verbose
+ - --color
+ - "0"
+ - --waitforlock
+ - "30"
+ environ: *env-def
+ rc: 0
+ out: ""
+ err: ""
diff --git a/ansible_collections/community/general/tests/unit/plugins/plugin_utils/test_unsafe.py b/ansible_collections/community/general/tests/unit/plugins/plugin_utils/test_unsafe.py
new file mode 100644
index 000000000..3f35ee933
--- /dev/null
+++ b/ansible_collections/community/general/tests/unit/plugins/plugin_utils/test_unsafe.py
@@ -0,0 +1,133 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2024, Felix Fontein <felix@fontein.de>
+# 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
+
+# Make coding more python3-ish
+from __future__ import absolute_import, division, print_function
+
+__metaclass__ = type
+
+
+import pytest
+
+from ansible.utils.unsafe_proxy import AnsibleUnsafe
+
+from ansible_collections.community.general.plugins.plugin_utils.unsafe import (
+ make_unsafe,
+)
+
+
+TEST_MAKE_UNSAFE = [
+ (
+ u'text',
+ [],
+ [
+ (),
+ ],
+ ),
+ (
+ u'{{text}}',
+ [
+ (),
+ ],
+ [],
+ ),
+ (
+ b'text',
+ [],
+ [
+ (),
+ ],
+ ),
+ (
+ b'{{text}}',
+ [
+ (),
+ ],
+ [],
+ ),
+ (
+ {
+ 'skey': 'value',
+ 'ukey': '{{value}}',
+ 1: [
+ 'value',
+ '{{value}}',
+ {
+ 1.0: '{{value}}',
+ 2.0: 'value',
+ },
+ ],
+ },
+ [
+ ('ukey', ),
+ (1, 1),
+ (1, 2, 1.0),
+ ],
+ [
+ ('skey', ),
+ (1, 0),
+ (1, 2, 2.0),
+ ],
+ ),
+ (
+ ['value', '{{value}}'],
+ [
+ (1, ),
+ ],
+ [
+ (0, ),
+ ],
+ ),
+]
+
+
+@pytest.mark.parametrize("value, check_unsafe_paths, check_safe_paths", TEST_MAKE_UNSAFE)
+def test_make_unsafe(value, check_unsafe_paths, check_safe_paths):
+ unsafe_value = make_unsafe(value)
+ assert unsafe_value == value
+ for check_path in check_unsafe_paths:
+ obj = unsafe_value
+ for elt in check_path:
+ obj = obj[elt]
+ assert isinstance(obj, AnsibleUnsafe)
+ for check_path in check_safe_paths:
+ obj = unsafe_value
+ for elt in check_path:
+ obj = obj[elt]
+ assert not isinstance(obj, AnsibleUnsafe)
+
+
+def test_make_unsafe_dict_key():
+ value = {
+ b'test': 1,
+ u'test': 2,
+ }
+ unsafe_value = make_unsafe(value)
+ assert unsafe_value == value
+ for obj in unsafe_value:
+ assert not isinstance(obj, AnsibleUnsafe)
+
+ value = {
+ b'{{test}}': 1,
+ u'{{test}}': 2,
+ }
+ unsafe_value = make_unsafe(value)
+ assert unsafe_value == value
+ for obj in unsafe_value:
+ assert isinstance(obj, AnsibleUnsafe)
+
+
+def test_make_unsafe_set():
+ value = set([b'test', u'test'])
+ unsafe_value = make_unsafe(value)
+ assert unsafe_value == value
+ for obj in unsafe_value:
+ assert not isinstance(obj, AnsibleUnsafe)
+
+ value = set([b'{{test}}', u'{{test}}'])
+ unsafe_value = make_unsafe(value)
+ assert unsafe_value == value
+ for obj in unsafe_value:
+ assert isinstance(obj, AnsibleUnsafe)
diff --git a/ansible_collections/community/grafana/.github/workflows/ansible-test.yml b/ansible_collections/community/grafana/.github/workflows/ansible-test.yml
index a5717781f..7d474372b 100644
--- a/ansible_collections/community/grafana/.github/workflows/ansible-test.yml
+++ b/ansible_collections/community/grafana/.github/workflows/ansible-test.yml
@@ -45,7 +45,7 @@ jobs:
strategy:
fail-fast: false
matrix:
- grafana_version: ["9.5.14", "8.5.27", "10.2.2"]
+ grafana_version: ["8.5.27", "9.5.18", "10.4.2"]
ansible_version: ["stable-2.15", "stable-2.16", "devel"]
python_version: ["3.10"]
services:
@@ -67,7 +67,7 @@ jobs:
strategy:
fail-fast: false
matrix:
- grafana_version: ["9.5.14", "8.5.27", "10.2.2"]
+ grafana_version: ["8.5.27", "9.5.18", "10.4.2"]
ansible_version: ["stable-2.15", "stable-2.16", "devel"]
python_version: ["3.10"]
services:
@@ -86,7 +86,7 @@ jobs:
- name: Install dependencies
run: |
python -m pip install --no-cache-dir --upgrade pip
- pip install "git+https://github.com/ansible/ansible@${{ matrix.ansible_version }}" molecule molecule-docker
+ pip install "git+https://github.com/ansible/ansible@${{ matrix.ansible_version }}" molecule molecule-plugins[docker] 'requests<2.32.0'
- name: Test with molecule
run: |
diff --git a/ansible_collections/community/grafana/CHANGELOG.rst b/ansible_collections/community/grafana/CHANGELOG.rst
index 8a40ac18f..9449bdc5c 100644
--- a/ansible_collections/community/grafana/CHANGELOG.rst
+++ b/ansible_collections/community/grafana/CHANGELOG.rst
@@ -4,6 +4,35 @@ Grafana Collection Release Notes
.. contents:: Topics
+v1.9.1
+======
+
+Bugfixes
+--------
+
+- undo removed deprecated `message` argument in `grafana_dashboard`
+
+v1.9.0
+======
+
+Minor Changes
+-------------
+
+- Add new module `grafana_silence` to create and delete silences through the API
+- Add role components for `grafana_silence` module
+- lookup - grafana_dashboards - add `validate_certs` and `ca_path` options to plugin for custom certs validation
+
+Removed Features (previously deprecated)
+----------------------------------------
+
+- removed deprecated `message` argument in `grafana_dashboard`
+
+Bugfixes
+--------
+
+- 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
v1.8.0
======
@@ -288,4 +317,3 @@ Release Summary
---------------
Initial migration of Grafana content from Ansible core (2.9/devel)
-
diff --git a/ansible_collections/community/grafana/FILES.json b/ansible_collections/community/grafana/FILES.json
index be95fa2bc..037433bd7 100644
--- a/ansible_collections/community/grafana/FILES.json
+++ b/ansible_collections/community/grafana/FILES.json
@@ -53,7 +53,7 @@
"name": ".github/workflows/ansible-test.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3e774ec33a3dc2a5ea1da40931ab5e6b96d3b67e57454fc867f9009cbc9797f",
+ "chksum_sha256": "cd6239f3c1bd2e8e47e65c2e1504273adabd0debe5034b52c0b3d1817d5ece75",
"format": 1
},
{
@@ -470,6 +470,76 @@
"format": 1
},
{
+ "name": "changelogs/fragments/353-docs-add-influxdb-flux-example.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a07b0c46777ec3102120e2d1374c24f11fa49b643f9ee598697d7cb7931a6fb0",
+ "format": 1
+ },
+ {
+ "name": "changelogs/fragments/354-fix-find-grafana-versions.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "988704ddd40d7a4e6c20a045fa813de4fff2db0ad722f64f97c08af0ebcc3ee6",
+ "format": 1
+ },
+ {
+ "name": "changelogs/fragments/355-rm-dashboard-message-argument.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1f9b81756d099816b1ef211ed9420406256f31e44a1af8e21025d1781ec8c452",
+ "format": 1
+ },
+ {
+ "name": "changelogs/fragments/356-lookup-dashboards-add-custom-certs-verification-logic.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "45e0bb6e524aecb31ef2ed642a981a964164da2871ec3b5167ce79205ef77d3e",
+ "format": 1
+ },
+ {
+ "name": "changelogs/fragments/357-module-grafana-silence.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d4302eaaf80c43b0e4b8d9b919579ec6fbf2156966696b17342ff3caaa4b39a8",
+ "format": 1
+ },
+ {
+ "name": "changelogs/fragments/358-role-grafana-silence.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "44f72091e352d9f720a2c69be372a251ae80371c9bbb3d046a1c92e3169597f9",
+ "format": 1
+ },
+ {
+ "name": "changelogs/fragments/362-plugin-umask.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a8e15e87758848e90e4798e0d8bbf4ae3d69c8df49f36d3f6f4665b7bac175dc",
+ "format": 1
+ },
+ {
+ "name": "changelogs/fragments/364-first-datasource-default.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1706a7f2ab349d835f22e173fc4b1f1abd30d08ddb6a24054a12999254d5f816",
+ "format": 1
+ },
+ {
+ "name": "changelogs/fragments/367-dashboard-undo-breaing-change-message.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d9379b41ea1756af06746c98636b2f29c04b3dcb3d1c05d131d30d84d569e75f",
+ "format": 1
+ },
+ {
+ "name": "changelogs/fragments/368-molecule-pin-requests.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "cf41eb78ee4dc1c0b4e70f18040bf236de5764067de76a46c2ca60bb787a0801",
+ "format": 1
+ },
+ {
"name": "changelogs/fragments/add-units-datasource.yml",
"ftype": "file",
"chksum_type": "sha256",
@@ -543,7 +613,7 @@
"name": "changelogs/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "641de48bd2e1d3ab8daeace7b522413299bd4d2521204d1f707e8c23bb445480",
+ "chksum_sha256": "58b3c24d8492d4052650bd4595af4f4150984005e7e2cf1fa45d86c6710e3632",
"format": 1
},
{
@@ -571,14 +641,14 @@
"name": "hacking/check_fragment.sh",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "89b848ffbab17ebb115443ad4d599db0238a1f35a95d52ab4eedf990eef097a8",
+ "chksum_sha256": "911f382f8cb1de3f26d67809bba3a950ad75cd0a95cd39de13c2eb24131bc9aa",
"format": 1
},
{
"name": "hacking/find_grafana_versions.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "39acc81ec9733183bbb4eeae0c10c3aeecdeedd1ffc2dabcc675b84e16565f3e",
+ "chksum_sha256": "72518bc80cd4e6c1e6c28aa057bfb05e96231cffd71fb481dba53b76fcb86786",
"format": 1
},
{
@@ -599,7 +669,7 @@
"name": "meta/runtime.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6872a5ea5042e0a7a43f2b60fe6c02a24e3e76b25deb50a46567df781345e41b",
+ "chksum_sha256": "0ccfa35f79e37b4162e45d083ec7170e8dd3b3011e506101f58ccbc5d183adbb",
"format": 1
},
{
@@ -620,7 +690,7 @@
"name": "molecule/default/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c1e0e02c807ceafdf7bd707e0def1e9d2118e6389af9af44dc832dfc0483dab9",
+ "chksum_sha256": "707ee0f0231e6bfb2f467ec7d5089125b0b7d77ea85560921ad4eb179453c922",
"format": 1
},
{
@@ -711,7 +781,7 @@
"name": "plugins/lookup/grafana_dashboard.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7483dabbd84c95d3cd603e2d9d905b51f00e9f6ab4974164f31387c3ee63535d",
+ "chksum_sha256": "7e46eff65f8eda5fd1fbd4de9790d018acac261fa5e747dbdc1c9bc6062608cf",
"format": 1
},
{
@@ -753,7 +823,7 @@
"name": "plugins/modules/grafana_datasource.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "23081add13f2aba994b4cddb264972d219bee823ac1e4f454931d5a6a374bd94",
+ "chksum_sha256": "108ff562f0e37620ddcf6751f144aad05432bd7f3369bfbfc957e9df49310001",
"format": 1
},
{
@@ -788,7 +858,14 @@
"name": "plugins/modules/grafana_plugin.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fb0ee164a2936bc35381cf79026b6725c7a1df139e71d58989f8912432043c00",
+ "chksum_sha256": "a6e739390d7afc946f656dc2080e96ab0c2e630e016fc20aaa2351ec909b5d64",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/grafana_silence.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1a90d5e29905a481dfed1fbd573a342984cf1e891c3643be5c13541302810cc5",
"format": 1
},
{
@@ -830,7 +907,7 @@
"name": "roles/grafana/defaults/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ee6026b2dd62777a731f2214949124f45d73309102123cad31ad55489a90ca45",
+ "chksum_sha256": "bce677aac146e75eee5d57c22d7ad1bdff128abb52d4bf05f8cd30f47d6c4105",
"format": 1
},
{
@@ -844,7 +921,7 @@
"name": "roles/grafana/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "192ef2ac687cd5594febffbc0ab6f3d184cceed34dc66c11ff217db19f4ccfc2",
+ "chksum_sha256": "840995ce8972789e894e6c9be6d2fcd030fd3c478da292e7e363cb40c6f462c9",
"format": 1
},
{
@@ -858,14 +935,14 @@
"name": "roles/grafana/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0de2cd11feb7e45f3427d063c3123024f94401bc5c1b48eaecea9716efcc03d5",
+ "chksum_sha256": "beb75cb00b20421fd4f4c81d72d32d13986005e809dd2c550a15290f09f1b9a2",
"format": 1
},
{
"name": "roles/grafana/README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ab4f69856777b7b0c208c3c3d06a9771c98f81a729618dc94df80ea981b1b6ab",
+ "chksum_sha256": "f04e735d327e90a7bf9b51ce09c4834f8ed6c6e5ba6d635cdd4e92d807171794",
"format": 1
},
{
@@ -1054,7 +1131,7 @@
"name": "tests/integration/targets/grafana_datasource/tasks/elastic.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "69fba433ef869f3bb1916f2036a43985af48d21118f08e969f6020532a963d43",
+ "chksum_sha256": "c2db61ab9613c93dc35ed793aca09451ae672ab5e24c43b456a970ad0ff63f56",
"format": 1
},
{
@@ -1096,7 +1173,7 @@
"name": "tests/integration/targets/grafana_datasource/tasks/postgres.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4ed316aab332c0dfcc005213ef28087ea49ed011c0a73bdd0e5f8481e9403de4",
+ "chksum_sha256": "bdd63b0df46202a010b8d06b6658c303ed3a8893733e807ff79dd13ca042d8b7",
"format": 1
},
{
@@ -1499,6 +1576,55 @@
"format": 1
},
{
+ "name": "tests/integration/targets/grafana_silence",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/grafana_silence/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/grafana_silence/defaults/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d7d3a06f224d1576e39fcc2083e33261f30e3ceac18506f17772d8bcb72315c2",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/grafana_silence/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/grafana_silence/tasks/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "330c281b5f69223f9f6292aab612dc3ebe4511c87b2f9748b386d1aaca2f5a89",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/grafana_silence/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b9aa6c8dadef0b4ce9cb08a05d0cf6c40f882d04f9e698bff795b26896e8853c",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/grafana_silence/site.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9c2b6df4d70c00df0765796d40ef1dbaa673984ce30a06c0e89569c1a7bcaea2",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/grafana_team",
"ftype": "dir",
"chksum_type": null,
@@ -1649,14 +1775,14 @@
"name": "tests/sanity/ignore-2.15.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0908af1f4e86722688b3f158cfa9cc81c931ef40c0a166c398f47a4af69a93f9",
+ "chksum_sha256": "743d0edd0ef882d4dca19699436e4ea09d2acb4e3418385c8e7b89cfaf6e415e",
"format": 1
},
{
"name": "tests/sanity/ignore-2.16.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0908af1f4e86722688b3f158cfa9cc81c931ef40c0a166c398f47a4af69a93f9",
+ "chksum_sha256": "743d0edd0ef882d4dca19699436e4ea09d2acb4e3418385c8e7b89cfaf6e415e",
"format": 1
},
{
@@ -1667,6 +1793,13 @@
"format": 1
},
{
+ "name": "tests/sanity/ignore-2.18.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "743d0edd0ef882d4dca19699436e4ea09d2acb4e3418385c8e7b89cfaf6e415e",
+ "format": 1
+ },
+ {
"name": "tests/sanity/ignore-2.9.txt",
"ftype": "file",
"chksum_type": "sha256",
@@ -1719,7 +1852,21 @@
"name": "tests/unit/modules/grafana/grafana_plugin/test_grafana_plugin.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ada20cb8aef9852aee7b79afddd78f144f813c9df55baf3b8adc1b3863a8e9db",
+ "chksum_sha256": "9564a8a336726addac97b13fb19813c1d97824d5ca65e6cdc55b9c940554c255",
+ "format": 1
+ },
+ {
+ "name": "tests/unit/modules/grafana/grafana_silence",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/unit/modules/grafana/grafana_silence/test_grafana_silence.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7b6a2c19e99236c08e318b25fb9ee100ee79f6ce07abd9853254f17c64d4c1c8",
"format": 1
},
{
@@ -1782,7 +1929,7 @@
"name": "CHANGELOG.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e20df0ad2408ce9c311cf3bf18c99b2362c6eee388db48286b13be28ecedd8db",
+ "chksum_sha256": "70056dd2063eee72103302580afc77a58435eca179f53de3a2fefb3ad1798b09",
"format": 1
},
{
@@ -1796,7 +1943,7 @@
"name": "README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8e93c6a3ce656865252643666a94835e98d904107d7a678f0a74774445f91125",
+ "chksum_sha256": "f7151290ee62498487eb8bbb7fb07383ac448d6f192b519f069bd99f453d2385",
"format": 1
},
{
diff --git a/ansible_collections/community/grafana/MANIFEST.json b/ansible_collections/community/grafana/MANIFEST.json
index 71f9afdc1..2c1f7f1a0 100644
--- a/ansible_collections/community/grafana/MANIFEST.json
+++ b/ansible_collections/community/grafana/MANIFEST.json
@@ -2,7 +2,7 @@
"collection_info": {
"namespace": "community",
"name": "grafana",
- "version": "1.8.0",
+ "version": "1.9.1",
"authors": [
"R\u00e9mi REY (@rrey)",
"Thierry Sall\u00e9 (@seuf)"
@@ -25,7 +25,7 @@
"name": "FILES.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "98a10c2378e1ad46d7031d895c557d33af10809314832b9e3af5c2e607099e0b",
+ "chksum_sha256": "4ff85c9d6729fe479fe05c2e56a41833f87286a8ee1af5b2b730ccd876c04ebb",
"format": 1
},
"format": 1
diff --git a/ansible_collections/community/grafana/README.md b/ansible_collections/community/grafana/README.md
index 6d23f1b96..9ba981ae7 100644
--- a/ansible_collections/community/grafana/README.md
+++ b/ansible_collections/community/grafana/README.md
@@ -31,13 +31,14 @@ Click on the name of a plugin or module to view that content's documentation:
- [grafana_plugin](https://docs.ansible.com/ansible/latest/collections/community/grafana/grafana_plugin_module.html)
- [grafana_team](https://docs.ansible.com/ansible/latest/collections/community/grafana/grafana_team_module.html)
- [grafana_user](https://docs.ansible.com/ansible/latest/collections/community/grafana/grafana_user_module.html)
+ - [grafana_silence](https://docs.ansible.com/ansible/latest/collections/community/grafana/grafana_silence_module.html)
## Supported Grafana versions
We aim at keeping the last 3 Major versions of Grafana tested.
This collection is currently testing the modules against following versions of Grafana:
```
-grafana_version: ["9.5.14", "8.5.27", "10.2.2"]
+grafana_version: ["8.5.27", "9.5.18", "10.4.2"]
```
## Installation and Usage
diff --git a/ansible_collections/community/grafana/changelogs/changelog.yaml b/ansible_collections/community/grafana/changelogs/changelog.yaml
index 465b42bc3..f8d3f898b 100644
--- a/ansible_collections/community/grafana/changelogs/changelog.yaml
+++ b/ansible_collections/community/grafana/changelogs/changelog.yaml
@@ -279,3 +279,36 @@ releases:
- 349-role-notification-channel.yml
- 350-python3.12.yml
release_date: '2024-02-21'
+ 1.9.0:
+ changes:
+ bugfixes:
+ - 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
+ minor_changes:
+ - Add new module `grafana_silence` to create and delete silences through the
+ API
+ - Add role components for `grafana_silence` module
+ - lookup - grafana_dashboards - add `validate_certs` and `ca_path` options to
+ plugin for custom certs validation
+ removed_features:
+ - removed deprecated `message` argument in `grafana_dashboard`
+ fragments:
+ - 353-docs-add-influxdb-flux-example.yml
+ - 354-fix-find-grafana-versions.yml
+ - 355-rm-dashboard-message-argument.yml
+ - 356-lookup-dashboards-add-custom-certs-verification-logic.yml
+ - 357-module-grafana-silence.yml
+ - 358-role-grafana-silence.yml
+ - 362-plugin-umask.yml
+ - 364-first-datasource-default.yml
+ release_date: '2024-04-30'
+ 1.9.1:
+ changes:
+ bugfixes:
+ - undo removed deprecated `message` argument in `grafana_dashboard`
+ fragments:
+ - 367-dashboard-undo-breaing-change-message.yml
+ - 368-molecule-pin-requests.yml
+ release_date: '2024-05-21'
diff --git a/ansible_collections/community/grafana/changelogs/fragments/353-docs-add-influxdb-flux-example.yml b/ansible_collections/community/grafana/changelogs/fragments/353-docs-add-influxdb-flux-example.yml
new file mode 100644
index 000000000..b3baa1bc5
--- /dev/null
+++ b/ansible_collections/community/grafana/changelogs/fragments/353-docs-add-influxdb-flux-example.yml
@@ -0,0 +1,3 @@
+---
+trivial:
+ - grafana_datasource - (docs) add influxdb v2 flux example \ No newline at end of file
diff --git a/ansible_collections/community/grafana/changelogs/fragments/354-fix-find-grafana-versions.yml b/ansible_collections/community/grafana/changelogs/fragments/354-fix-find-grafana-versions.yml
new file mode 100644
index 000000000..4ba22771a
--- /dev/null
+++ b/ansible_collections/community/grafana/changelogs/fragments/354-fix-find-grafana-versions.yml
@@ -0,0 +1,3 @@
+---
+trivial:
+ - fix find grafana versions python script comparation
diff --git a/ansible_collections/community/grafana/changelogs/fragments/355-rm-dashboard-message-argument.yml b/ansible_collections/community/grafana/changelogs/fragments/355-rm-dashboard-message-argument.yml
new file mode 100644
index 000000000..3f54afa5e
--- /dev/null
+++ b/ansible_collections/community/grafana/changelogs/fragments/355-rm-dashboard-message-argument.yml
@@ -0,0 +1,3 @@
+---
+removed_features:
+ - removed deprecated `message` argument in `grafana_dashboard`
diff --git a/ansible_collections/community/grafana/changelogs/fragments/356-lookup-dashboards-add-custom-certs-verification-logic.yml b/ansible_collections/community/grafana/changelogs/fragments/356-lookup-dashboards-add-custom-certs-verification-logic.yml
new file mode 100644
index 000000000..182822d9b
--- /dev/null
+++ b/ansible_collections/community/grafana/changelogs/fragments/356-lookup-dashboards-add-custom-certs-verification-logic.yml
@@ -0,0 +1,2 @@
+minor_changes:
+ - lookup - grafana_dashboards - add `validate_certs` and `ca_path` options to plugin for custom certs validation
diff --git a/ansible_collections/community/grafana/changelogs/fragments/357-module-grafana-silence.yml b/ansible_collections/community/grafana/changelogs/fragments/357-module-grafana-silence.yml
new file mode 100644
index 000000000..a9ff03703
--- /dev/null
+++ b/ansible_collections/community/grafana/changelogs/fragments/357-module-grafana-silence.yml
@@ -0,0 +1,2 @@
+minor_changes:
+ - Add new module `grafana_silence` to create and delete silences through the API
diff --git a/ansible_collections/community/grafana/changelogs/fragments/358-role-grafana-silence.yml b/ansible_collections/community/grafana/changelogs/fragments/358-role-grafana-silence.yml
new file mode 100644
index 000000000..a72161f04
--- /dev/null
+++ b/ansible_collections/community/grafana/changelogs/fragments/358-role-grafana-silence.yml
@@ -0,0 +1,2 @@
+minor_changes:
+ - Add role components for `grafana_silence` module \ No newline at end of file
diff --git a/ansible_collections/community/grafana/changelogs/fragments/362-plugin-umask.yml b/ansible_collections/community/grafana/changelogs/fragments/362-plugin-umask.yml
new file mode 100644
index 000000000..cbef21ffd
--- /dev/null
+++ b/ansible_collections/community/grafana/changelogs/fragments/362-plugin-umask.yml
@@ -0,0 +1,2 @@
+bugfixes:
+ - Set umask for `grafana_plugin` command
diff --git a/ansible_collections/community/grafana/changelogs/fragments/364-first-datasource-default.yml b/ansible_collections/community/grafana/changelogs/fragments/364-first-datasource-default.yml
new file mode 100644
index 000000000..3d39e9a0a
--- /dev/null
+++ b/ansible_collections/community/grafana/changelogs/fragments/364-first-datasource-default.yml
@@ -0,0 +1,3 @@
+bugfixes:
+ - Handling of desired default state for first `grafana_datasource`
+ - Ignore `type` argument for diff comparison if `grafana-postgresq-datasource` alias `postgres` is used
diff --git a/ansible_collections/community/grafana/changelogs/fragments/367-dashboard-undo-breaing-change-message.yml b/ansible_collections/community/grafana/changelogs/fragments/367-dashboard-undo-breaing-change-message.yml
new file mode 100644
index 000000000..085ae0cb8
--- /dev/null
+++ b/ansible_collections/community/grafana/changelogs/fragments/367-dashboard-undo-breaing-change-message.yml
@@ -0,0 +1,3 @@
+---
+bugfixes:
+ - undo removed deprecated `message` argument in `grafana_dashboard`
diff --git a/ansible_collections/community/grafana/changelogs/fragments/368-molecule-pin-requests.yml b/ansible_collections/community/grafana/changelogs/fragments/368-molecule-pin-requests.yml
new file mode 100644
index 000000000..6e60e0348
--- /dev/null
+++ b/ansible_collections/community/grafana/changelogs/fragments/368-molecule-pin-requests.yml
@@ -0,0 +1,3 @@
+---
+trivial:
+ - pin version of requests package for molecule tests
diff --git a/ansible_collections/community/grafana/hacking/check_fragment.sh b/ansible_collections/community/grafana/hacking/check_fragment.sh
index bf90cae65..3173b342f 100755
--- a/ansible_collections/community/grafana/hacking/check_fragment.sh
+++ b/ansible_collections/community/grafana/hacking/check_fragment.sh
@@ -1,7 +1,7 @@
-#!/bin/bash
+#!/usr/bin/env bash
function fail() {
- cat << EOF
+ cat <<EOF
Dear contributor,
Thank you for you Pull Request !
@@ -10,7 +10,7 @@ function fail() {
It will help your change be released faster !
Thank you !
EOF
- exit 1
+ exit 1
}
FRAGMENTS=$(git fetch && git diff --name-only --diff-filter=ACMRT origin/main..HEAD | grep "changelogs")
diff --git a/ansible_collections/community/grafana/hacking/find_grafana_versions.py b/ansible_collections/community/grafana/hacking/find_grafana_versions.py
index b31fc530a..716f877a8 100644
--- a/ansible_collections/community/grafana/hacking/find_grafana_versions.py
+++ b/ansible_collections/community/grafana/hacking/find_grafana_versions.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python3
+#!/usr/bin/env python
import json
import requests
@@ -7,12 +7,12 @@ import requests
def get_by_major(version):
if version.startswith("v"):
version = version[1:]
- return (version[0], version, int(version.replace(".", "")))
+ return int(version.split(".")[0]), version, tuple(map(int, version.split(".")))
def get_grafana_releases():
r = requests.get(
- "https://api.github.com/repos/grafana/grafana/releases?per_page=50",
+ "https://api.github.com/repos/grafana/grafana/releases?per_page=100",
headers={"Accept": "application/vnd.github.v3+json"},
)
if r.status_code != 200:
@@ -20,19 +20,20 @@ def get_grafana_releases():
return r.json()
-by_major = {}
-
if __name__ == "__main__":
releases = get_grafana_releases()
- for item in releases:
- if item.get("prerelease"):
+ by_major = {}
+
+ for release in releases:
+ if release.get("prerelease") or any(
+ char in release.get("tag_name") for char in "-+"
+ ):
continue
- major, version, as_int = get_by_major(item.get("tag_name"))
- if major not in by_major.keys() or by_major[major]["as_int"] < as_int:
- by_major[major] = {"version": version, "as_int": as_int}
- latest_3_majors = sorted(list(by_major.keys()), reverse=True)[:3]
-
- latest_releases = []
- for idx in latest_3_majors:
- latest_releases.append(by_major[idx]["version"])
+ major, version, as_tuple = get_by_major(release.get("tag_name"))
+ if major not in by_major.keys() or by_major[major]["as_tuple"] < as_tuple:
+ by_major[major] = {"version": version, "as_tuple": as_tuple}
+
+ latest_3_majors = sorted(list(by_major.keys()))[:3]
+ latest_releases = [by_major[idx]["version"] for idx in latest_3_majors]
+
print(json.dumps(latest_releases))
diff --git a/ansible_collections/community/grafana/meta/runtime.yml b/ansible_collections/community/grafana/meta/runtime.yml
index 15f5554fc..d29f1dda8 100644
--- a/ansible_collections/community/grafana/meta/runtime.yml
+++ b/ansible_collections/community/grafana/meta/runtime.yml
@@ -11,3 +11,4 @@ action_groups:
- grafana_plugin
- grafana_team
- grafana_user
+ - grafana_silence
diff --git a/ansible_collections/community/grafana/molecule/default/converge.yml b/ansible_collections/community/grafana/molecule/default/converge.yml
index b1e1cf20b..4046e3369 100644
--- a/ansible_collections/community/grafana/molecule/default/converge.yml
+++ b/ansible_collections/community/grafana/molecule/default/converge.yml
@@ -45,4 +45,15 @@
path: test_dashboard.json
overwrite: true
+ grafana_silences:
+ - comment: molecule test
+ created_by: ansible
+ ends_at: "2030-01-01T00:00:00.000Z"
+ matchers:
+ - isEqual: true
+ isRegex: false
+ name: environment
+ value: test
+ starts_at: "2029-12-31T23:23:59.000Z"
+
roles: [{role: community.grafana.grafana}]
diff --git a/ansible_collections/community/grafana/plugins/lookup/grafana_dashboard.py b/ansible_collections/community/grafana/plugins/lookup/grafana_dashboard.py
index c7fa31574..83ee250f7 100644
--- a/ansible_collections/community/grafana/plugins/lookup/grafana_dashboard.py
+++ b/ansible_collections/community/grafana/plugins/lookup/grafana_dashboard.py
@@ -41,6 +41,13 @@ options:
description: optional filter for dashboard search.
env:
- name: GRAFANA_DASHBOARD_SEARCH
+ validate_certs:
+ description: flag to control SSL certificate validation
+ type: boolean
+ default: true
+ ca_path:
+ description: string of the file system path to CA cert bundle to use for validation
+ type: string
"""
EXAMPLES = """
@@ -51,13 +58,25 @@ EXAMPLES = """
- name: get all grafana dashboards
set_fact:
grafana_dashboards: "{{ lookup('grafana_dashboard', 'grafana_url=http://grafana.company.com grafana_api_key=' ~ grafana_api_key) }}"
+
+- name: get project foo grafana dashboards (validate SSL certificates of the instance with custom CA Certificate Bundle)
+ set_fact:
+ grafana_dashboards: |
+ {{
+ lookup(
+ 'grafana_dashboard',
+ 'grafana_url=https://grafana.company.com grafana_user=admin grafana_password=admin search=foo',
+ validate_certs=true,
+ ca_path='/path/to/chain.crt'
+ )
+ }}
"""
import json
import os
from ansible.errors import AnsibleError
from ansible.plugins.lookup import LookupBase
-from ansible.module_utils.urls import basic_auth_header, open_url
+from ansible.module_utils.urls import basic_auth_header, open_url, SSLValidationError
from ansible.module_utils._text import to_native
from ansible.module_utils.six.moves.urllib.error import HTTPError
from ansible.utils.display import Display
@@ -96,13 +115,15 @@ class GrafanaAPIException(Exception):
class GrafanaAPI:
- def __init__(self, **kwargs):
+ def __init__(self, validate_certs, ca_path, **kwargs):
self.grafana_url = kwargs.get("grafana_url", ANSIBLE_GRAFANA_URL)
self.grafana_api_key = kwargs.get("grafana_api_key", ANSIBLE_GRAFANA_API_KEY)
self.grafana_user = kwargs.get("grafana_user", ANSIBLE_GRAFANA_USER)
self.grafana_password = kwargs.get("grafana_password", ANSIBLE_GRAFANA_PASSWORD)
self.grafana_org_id = kwargs.get("grafana_org_id", ANSIBLE_GRAFANA_ORG_ID)
self.search = kwargs.get("search", ANSIBLE_GRAFANA_DASHBOARD_SEARCH)
+ self.validate_certs = validate_certs
+ self.ca_path = ca_path
def grafana_switch_organisation(self, headers):
try:
@@ -110,12 +131,19 @@ class GrafanaAPI:
"%s/api/user/using/%s" % (self.grafana_url, self.grafana_org_id),
headers=headers,
method="POST",
+ validate_certs=self.validate_certs,
+ ca_path=self.ca_path,
)
except HTTPError as e:
raise GrafanaAPIException(
"Unable to switch to organization %s : %s"
% (self.grafana_org_id, to_native(e))
)
+ except SSLValidationError as e:
+ raise GrafanaAPIException(
+ "Unable to validate server's certificate with %s: %s"
+ % (self.ca_path, to_native(e))
+ )
if r.getcode() != 200:
raise GrafanaAPIException(
"Unable to switch to organization %s : %s"
@@ -153,13 +181,24 @@ class GrafanaAPI:
"%s/api/search?query=%s" % (self.grafana_url, self.search),
headers=headers,
method="GET",
+ validate_certs=self.validate_certs,
+ ca_path=self.ca_path,
)
else:
r = open_url(
- "%s/api/search/" % self.grafana_url, headers=headers, method="GET"
+ "%s/api/search/" % self.grafana_url,
+ headers=headers,
+ method="GET",
+ validate_certs=self.validate_certs,
+ ca_path=self.ca_path,
)
except HTTPError as e:
raise GrafanaAPIException("Unable to search dashboards : %s" % to_native(e))
+ except SSLValidationError as e:
+ raise GrafanaAPIException(
+ "Unable to validate server's certificate with %s: %s"
+ % (self.ca_path, to_native(e))
+ )
if r.getcode() == 200:
try:
dashboard_list = json.loads(r.read())
@@ -175,6 +214,7 @@ class GrafanaAPI:
class LookupModule(LookupBase):
def run(self, terms, variables=None, **kwargs):
+ self.set_options(var_options=variables, direct=kwargs)
grafana_args = terms[0].split(" ")
grafana_dict = {}
ret = []
@@ -189,7 +229,11 @@ class LookupModule(LookupBase):
)
grafana_dict[key] = value
- grafana = GrafanaAPI(**grafana_dict)
+ grafana = GrafanaAPI(
+ **grafana_dict,
+ validate_certs=self.get_option("validate_certs"),
+ ca_path=self.get_option("ca_path"),
+ )
ret = grafana.grafana_list_dashboards()
diff --git a/ansible_collections/community/grafana/plugins/modules/grafana_datasource.py b/ansible_collections/community/grafana/plugins/modules/grafana_datasource.py
index 29cdbea7c..b011e5db1 100644
--- a/ansible_collections/community/grafana/plugins/modules/grafana_datasource.py
+++ b/ansible_collections/community/grafana/plugins/modules/grafana_datasource.py
@@ -400,6 +400,23 @@ EXAMPLES = """
time_interval: ">10s"
tls_ca_cert: "/etc/ssl/certs/ca.pem"
+- name: Create influxdbv2 datasource using fluxql
+ community.grafana.grafana_datasource:
+ name: "datasource-influxdb-flux"
+ grafana_url: "https://grafana.company.com"
+ grafana_user: "admin"
+ grafana_password: "xxxxxx"
+ org_id: "1"
+ ds_type: "influxdb"
+ ds_url: "https://influx.company.com:8086"
+ additional_json_data:
+ version: "Flux"
+ organization: "organization"
+ defaultBucket: "bucket"
+ tlsSkipVerify: false
+ additional_secure_json_data:
+ token: "token"
+
- name: Create postgres datasource
community.grafana.grafana_datasource:
name: "datasource-postgres"
@@ -536,6 +553,9 @@ def compare_datasources(new, current, compareSecureData=True):
del current["password"]
if "basicAuthPassword" in current:
del current["basicAuthPassword"]
+ if current["type"] == "grafana-postgresql-datasource" and new["type"] == "postgres":
+ del current["type"]
+ del new["type"]
# check if secureJsonData should be compared
if not compareSecureData:
@@ -928,6 +948,9 @@ def main():
if ds is None:
grafana_iface.create_datasource(payload)
ds = grafana_iface.datasource_by_name(name)
+ if ds.get("isDefault") != module.params["is_default"]:
+ grafana_iface.update_datasource(ds.get("id"), payload)
+ ds = grafana_iface.datasource_by_name(name)
module.exit_json(
changed=True, datasource=ds, msg="Datasource %s created" % name
)
diff --git a/ansible_collections/community/grafana/plugins/modules/grafana_plugin.py b/ansible_collections/community/grafana/plugins/modules/grafana_plugin.py
index c510f02ba..db1e8553a 100644
--- a/ansible_collections/community/grafana/plugins/modules/grafana_plugin.py
+++ b/ansible_collections/community/grafana/plugins/modules/grafana_plugin.py
@@ -223,7 +223,7 @@ def grafana_plugin(module, params):
else:
cmd = "{0} uninstall {1}".format(grafana_cli, params["name"])
- rc, stdout, stderr = module.run_command(cmd)
+ rc, stdout, stderr = module.run_command(cmd, umask=0o0022)
if rc == 0:
stdout_lines = stdout.split("\n")
for line in stdout_lines:
diff --git a/ansible_collections/community/grafana/plugins/modules/grafana_silence.py b/ansible_collections/community/grafana/plugins/modules/grafana_silence.py
new file mode 100644
index 000000000..35f54a3d8
--- /dev/null
+++ b/ansible_collections/community/grafana/plugins/modules/grafana_silence.py
@@ -0,0 +1,369 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+# 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 <http://www.gnu.org/licenses/>.
+#
+# Copyright: (c) 2023, flkhndlr (@flkhndlr)
+
+from __future__ import absolute_import, division, print_function
+
+DOCUMENTATION = """
+module: grafana_silence
+author:
+ - flkhndlr (@flkhndlr)
+version_added: "1.8.0"
+short_description: Manage Grafana Silences
+description:
+ - Create/delete Grafana Silences through the Alertmanager Silence API.
+requirements:
+ - The Alertmanager API is only available starting Grafana 8 and the module will fail if the server version is lower than version 8.
+options:
+ comment:
+ description:
+ - The comment that describes the silence.
+ required: true
+ type: str
+ created_by:
+ description:
+ - The author that creates the silence.
+ required: true
+ type: str
+ starts_at:
+ description:
+ - ISO 8601 Timestamp with milliseconds e.g. "2029-07-29T08:45:45.000Z" when the silence starts.
+ type: str
+ required: true
+ ends_at:
+ description:
+ - ISO 8601 Timestamp with milliseconds e.g. "2029-07-29T08:45:45.000Z" when the silence will end.
+ type: str
+ required: true
+ matchers:
+ description:
+ - List of matchers to select which alerts are affected by the silence.
+ type: list
+ elements: dict
+ required: true
+ state:
+ description:
+ - Delete the first occurrence of a silence with the same settings. Can be "absent" or "present".
+ default: present
+ type: str
+ choices: ["present", "absent"]
+ skip_version_check:
+ description:
+ - Skip Grafana version check and try to reach api endpoint anyway.
+ - This parameter can be useful if you enabled `hide_version` in grafana.ini
+ required: False
+ type: bool
+ default: False
+extends_documentation_fragment:
+- community.grafana.basic_auth
+- community.grafana.api_key
+"""
+
+EXAMPLES = """
+---
+- name: Create a silence
+ community.grafana.grafana_silence:
+ grafana_url: "https://grafana.example.com"
+ grafana_api_key: "{{ some_api_token_value }}"
+ comment: "a testcomment"
+ created_by: "me"
+ starts_at: "2029-07-29T08:45:45.000Z"
+ ends_at: "2029-07-29T08:55:45.000Z"
+ matchers:
+ - isEqual: true
+ isRegex: true
+ name: environment
+ value: test
+ state: present
+
+- name: Delete a silence
+ community.grafana.grafana_silence:
+ grafana_url: "https://grafana.example.com"
+ grafana_api_key: "{{ some_api_token_value }}"
+ comment: "a testcomment"
+ created_by: "me"
+ starts_at: "2029-07-29T08:45:45.000Z"
+ ends_at: "2029-07-29T08:55:45.000Z"
+ matchers:
+ - isEqual: true
+ isRegex: true
+ name: environment
+ value: test
+ state: absent
+"""
+
+RETURN = """
+---
+silence:
+ description: Information about the silence
+ returned: On success
+ type: complex
+ contains:
+ id:
+ description: The id of the silence
+ returned: success
+ type: str
+ sample:
+ - ec27df6b-ac3c-412f-ae0b-6e3e1f41c9c3
+ comment:
+ description: The comment of the silence
+ returned: success
+ type: str
+ sample:
+ - this is a test
+ createdBy:
+ description: The author of the silence
+ returned: success
+ type: str
+ sample:
+ - me
+ startsAt:
+ description: The begin timestamp of the silence
+ returned: success
+ type: str
+ sample:
+ - "2029-07-29T08:45:45.000Z"
+ endsAt:
+ description: The end timestamp of the silence
+ returned: success
+ type: str
+ sample:
+ - "2029-07-29T08:55:45.000Z"
+ matchers:
+ description: The matchers of the silence
+ returned: success
+ type: list
+ sample:
+ - [{"isEqual": true, "isRegex": true, "name": "environment", "value": "test"}]
+ status:
+ description: The status of the silence
+ returned: success
+ type: dict
+ sample:
+ - {"state": "pending"}
+ updatedAt:
+ description: The timestamp of the last update for the silence
+ returned: success
+ type: str
+ sample:
+ - "2023-07-27T13:27:33.042Z"
+"""
+
+import json
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible.module_utils.urls import fetch_url, basic_auth_header
+from ansible.module_utils._text import to_text
+from ansible_collections.community.grafana.plugins.module_utils import base
+
+__metaclass__ = type
+
+
+class GrafanaError(Exception):
+ pass
+
+
+class GrafanaSilenceInterface(object):
+ def __init__(self, module):
+ self._module = module
+ # {{{ Authentication header
+ self.headers = {"Content-Type": "application/json"}
+ module.params["force_basic_auth"] = True
+ if module.params.get("grafana_api_key", None):
+ self.headers["Authorization"] = (
+ "Bearer %s" % module.params["grafana_api_key"]
+ )
+ else:
+ self.headers["Authorization"] = basic_auth_header(
+ module.params["url_username"], module.params["url_password"]
+ )
+ # }}}
+ self.grafana_url = base.clean_url(module.params.get("url"))
+ if module.params.get("skip_version_check") is False:
+ try:
+ grafana_version = self.get_version()
+ except GrafanaError as e:
+ self._module.fail_json(failed=True, msg=to_text(e))
+ if grafana_version["major"] < 8:
+ self._module.fail_json(
+ failed=True,
+ msg="Silences API is available starting with Grafana v8",
+ )
+
+ def _send_request(self, url, data=None, headers=None, method="GET"):
+ if data is not None:
+ data = json.dumps(data)
+ if not headers:
+ headers = []
+
+ full_url = "{grafana_url}{path}".format(grafana_url=self.grafana_url, path=url)
+ resp, info = fetch_url(
+ self._module, full_url, data=data, headers=headers, method=method
+ )
+ status_code = info["status"]
+ if status_code == 404:
+ return None
+ elif status_code == 401:
+ self._module.fail_json(
+ failed=True,
+ msg="Unauthorized to perform action '%s' on '%s'" % (method, full_url),
+ )
+ elif status_code == 403:
+ self._module.fail_json(failed=True, msg="Permission Denied")
+ elif status_code in [200, 202]:
+ return self._module.from_json(resp.read())
+ elif status_code == 400:
+ self._module.fail_json(failed=True, msg=info)
+ self._module.fail_json(
+ failed=True, msg="Grafana Silences API answered with HTTP %d" % status_code
+ )
+
+ def get_version(self):
+ url = "/api/health"
+ response = self._send_request(
+ url, data=None, headers=self.headers, method="GET"
+ )
+ version = response.get("version")
+ if version is not None:
+ major, minor, rev = version.split(".")
+ return {"major": int(major), "minor": int(minor), "rev": int(rev)}
+ raise GrafanaError("Failed to retrieve version from '%s'" % url)
+
+ def create_silence(self, comment, created_by, starts_at, ends_at, matchers):
+ url = "/api/alertmanager/grafana/api/v2/silences"
+ silence = dict(
+ comment=comment,
+ createdBy=created_by,
+ endsAt=ends_at,
+ matchers=matchers,
+ startsAt=starts_at,
+ )
+ response = self._send_request(
+ url, data=silence, headers=self.headers, method="POST"
+ )
+ if self.get_version()["major"] == 8:
+ response["silenceID"] = response["id"]
+ response.pop("id", None)
+ return response
+
+ def get_silence(self, comment, created_by, starts_at, ends_at, matchers):
+ url = "/api/alertmanager/grafana/api/v2/silences"
+
+ responses = self._send_request(url, headers=self.headers, method="GET")
+
+ for response in responses:
+ if (
+ response["comment"] == comment
+ and response["createdBy"] == created_by
+ and response["startsAt"] == starts_at
+ and response["endsAt"] == ends_at
+ and response["matchers"] == matchers
+ ):
+ return response
+ return None
+
+ def get_silence_by_id(self, silence_id):
+ url = "/api/alertmanager/grafana/api/v2/silence/{SilenceId}".format(
+ SilenceId=silence_id
+ )
+ response = self._send_request(url, headers=self.headers, method="GET")
+ return response
+
+ def get_silences(self):
+ url = "/api/alertmanager/grafana/api/v2/silences"
+ response = self._send_request(url, headers=self.headers, method="GET")
+ return response
+
+ def delete_silence(self, silence_id):
+ url = "/api/alertmanager/grafana/api/v2/silence/{SilenceId}".format(
+ SilenceId=silence_id
+ )
+ response = self._send_request(url, headers=self.headers, method="DELETE")
+ return response
+
+
+def setup_module_object():
+ module = AnsibleModule(
+ argument_spec=argument_spec,
+ supports_check_mode=False,
+ required_together=base.grafana_required_together(),
+ mutually_exclusive=base.grafana_mutually_exclusive(),
+ )
+ return module
+
+
+argument_spec = base.grafana_argument_spec()
+argument_spec.update(
+ comment=dict(type="str", required=True),
+ state=dict(type="str", choices=["present", "absent"], default="present"),
+ created_by=dict(type="str", required=True),
+ starts_at=dict(type="str", required=True),
+ ends_at=dict(type="str", required=True),
+ matchers=dict(type="list", elements="dict", required=True),
+ skip_version_check=dict(type="bool", default=False),
+)
+
+
+def main():
+
+ module = setup_module_object()
+ comment = module.params["comment"]
+ created_by = module.params["created_by"]
+ starts_at = module.params["starts_at"]
+ ends_at = module.params["ends_at"]
+ matchers = module.params["matchers"]
+ state = module.params["state"]
+
+ changed = False
+ failed = False
+ grafana_iface = GrafanaSilenceInterface(module)
+
+ silence = grafana_iface.get_silence(
+ comment, created_by, starts_at, ends_at, matchers
+ )
+
+ if state == "present":
+
+ if not silence:
+ silence = grafana_iface.create_silence(
+ comment, created_by, starts_at, ends_at, matchers
+ )
+ silence = grafana_iface.get_silence_by_id(silence["silenceID"])
+ changed = True
+ else:
+ module.exit_json(
+ failed=failed,
+ changed=changed,
+ msg="Silence with same parameters already exists! eg. '%s'"
+ % silence["id"],
+ )
+ elif state == "absent":
+ if silence:
+ grafana_iface.delete_silence(silence["id"])
+ changed = True
+ else:
+ module.exit_json(
+ failed=False,
+ changed=changed,
+ msg="Silence does not exist",
+ )
+ module.exit_json(failed=failed, changed=changed, silence=silence)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/ansible_collections/community/grafana/roles/grafana/README.md b/ansible_collections/community/grafana/roles/grafana/README.md
index f46434edf..f76e687fc 100644
--- a/ansible_collections/community/grafana/roles/grafana/README.md
+++ b/ansible_collections/community/grafana/roles/grafana/README.md
@@ -163,6 +163,13 @@ Configure Grafana organizations, dashboards, folders, datasources, teams and use
| webhook_password | no |
| webhook_url | no |
| webhook_username | no |
+| [**grafana_silence**](https://docs.ansible.com/ansible/latest/collections/community/grafana/grafana_silence_module.html) |
+| comment | yes |
+| created_by | yes |
+| ends_at | yes |
+| matchers | yes |
+| starts_at | yes |
+| state | no |
## Example Playbook
diff --git a/ansible_collections/community/grafana/roles/grafana/defaults/main.yml b/ansible_collections/community/grafana/roles/grafana/defaults/main.yml
index 6a84370d3..9756a1331 100644
--- a/ansible_collections/community/grafana/roles/grafana/defaults/main.yml
+++ b/ansible_collections/community/grafana/roles/grafana/defaults/main.yml
@@ -7,3 +7,4 @@ grafana_datasources: []
grafana_folders: []
grafana_dashboards: []
grafana_notification_channels: []
+grafana_silences: []
diff --git a/ansible_collections/community/grafana/roles/grafana/meta/main.yml b/ansible_collections/community/grafana/roles/grafana/meta/main.yml
index 47d4af5b7..b5df42193 100644
--- a/ansible_collections/community/grafana/roles/grafana/meta/main.yml
+++ b/ansible_collections/community/grafana/roles/grafana/meta/main.yml
@@ -2,7 +2,7 @@
galaxy_info:
role_name: grafana
author: community
- description: Configure Grafana organizations, dashboards, folders, datasources, teams and users
+ description: Configure Grafana organizations, dashboards, folders, datasources, silences, teams and users
license: GPLv3
min_ansible_version: "2.14"
galaxy_tags: [grafana, monitoring]
diff --git a/ansible_collections/community/grafana/roles/grafana/tasks/main.yml b/ansible_collections/community/grafana/roles/grafana/tasks/main.yml
index 82bbc633d..1665a8562 100644
--- a/ansible_collections/community/grafana/roles/grafana/tasks/main.yml
+++ b/ansible_collections/community/grafana/roles/grafana/tasks/main.yml
@@ -201,3 +201,15 @@
loop: "{{ grafana_dashboards }}"
loop_control: {loop_var: dashboard}
tags: [dashboard, molecule-idempotence-notest]
+
+ - name: Manage silence
+ community.grafana.grafana_silence:
+ comment: "{{ silence.comment }}"
+ created_by: "{{ silence.created_by }}"
+ starts_at: "{{ silence.starts_at }}"
+ ends_at: "{{ silence.ends_at }}"
+ matchers: "{{ silence.matchers }}"
+ state: "{{ silence.state | default(omit) }}"
+ loop: "{{ grafana_silences }}"
+ loop_control: {loop_var: silence}
+ tags: silence
diff --git a/ansible_collections/community/grafana/tests/integration/targets/grafana_datasource/tasks/elastic.yml b/ansible_collections/community/grafana/tests/integration/targets/grafana_datasource/tasks/elastic.yml
index ff05b93f5..be5873574 100644
--- a/ansible_collections/community/grafana/tests/integration/targets/grafana_datasource/tasks/elastic.yml
+++ b/ansible_collections/community/grafana/tests/integration/targets/grafana_datasource/tasks/elastic.yml
@@ -286,6 +286,32 @@
- result.datasource.secureJsonFields.secureTest == true
- result.diff.after.secureJsonData is defined
+- name: Delete elasticsearch legacy datasource
+ register: result
+ community.grafana.grafana_datasource:
+ name: datasource/elasticLegacy
+ grafana_url: "{{ grafana_url }}"
+ grafana_user: "{{ grafana_username }}"
+ grafana_password: "{{ grafana_password }}"
+ state: absent
+
+- ansible.builtin.assert:
+ that:
+ - result.changed
+
+- name: Delete elasticsearch legacy datasource (idempotency)
+ register: result
+ community.grafana.grafana_datasource:
+ name: datasource/elasticLegacy
+ grafana_url: "{{ grafana_url }}"
+ grafana_user: "{{ grafana_username }}"
+ grafana_password: "{{ grafana_password }}"
+ state: absent
+
+- ansible.builtin.assert:
+ that:
+ - not result.changed
+
- name: Delete elasticsearch datasource
register: result
community.grafana.grafana_datasource:
diff --git a/ansible_collections/community/grafana/tests/integration/targets/grafana_datasource/tasks/postgres.yml b/ansible_collections/community/grafana/tests/integration/targets/grafana_datasource/tasks/postgres.yml
index b07bc752b..8945e2bdd 100644
--- a/ansible_collections/community/grafana/tests/integration/targets/grafana_datasource/tasks/postgres.yml
+++ b/ansible_collections/community/grafana/tests/integration/targets/grafana_datasource/tasks/postgres.yml
@@ -56,7 +56,7 @@
- result.datasource.jsonData.timescaledb == true
- result.datasource.name == 'datasource-postgres'
- result.datasource.orgId == 1
- - result.datasource.type == 'postgres'
+ - result.datasource.type in ['postgres', 'grafana-postgresql-datasource']
- result.datasource.url == 'postgres.company.com:5432'
- result.datasource.user == 'postgres'
- result.datasource.withCredentials == false
diff --git a/ansible_collections/community/grafana/tests/integration/targets/grafana_silence/defaults/main.yml b/ansible_collections/community/grafana/tests/integration/targets/grafana_silence/defaults/main.yml
new file mode 100644
index 000000000..4abf9bb43
--- /dev/null
+++ b/ansible_collections/community/grafana/tests/integration/targets/grafana_silence/defaults/main.yml
@@ -0,0 +1,5 @@
+---
+
+grafana_url: http://grafana:3000/
+grafana_username: admin
+grafana_password: admin
diff --git a/ansible_collections/community/grafana/tests/integration/targets/grafana_silence/runme.sh b/ansible_collections/community/grafana/tests/integration/targets/grafana_silence/runme.sh
new file mode 100755
index 000000000..867afb0d3
--- /dev/null
+++ b/ansible_collections/community/grafana/tests/integration/targets/grafana_silence/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+
+set -eux
+
+ansible-playbook site.yml
diff --git a/ansible_collections/community/grafana/tests/integration/targets/grafana_silence/site.yml b/ansible_collections/community/grafana/tests/integration/targets/grafana_silence/site.yml
new file mode 100644
index 000000000..791582277
--- /dev/null
+++ b/ansible_collections/community/grafana/tests/integration/targets/grafana_silence/site.yml
@@ -0,0 +1,6 @@
+---
+- name: Run tests for grafana_silence
+ hosts: localhost
+ tasks:
+ - ansible.builtin.include_role:
+ name: ../../grafana_silence
diff --git a/ansible_collections/community/grafana/tests/integration/targets/grafana_silence/tasks/main.yml b/ansible_collections/community/grafana/tests/integration/targets/grafana_silence/tasks/main.yml
new file mode 100644
index 000000000..ad4cfa25d
--- /dev/null
+++ b/ansible_collections/community/grafana/tests/integration/targets/grafana_silence/tasks/main.yml
@@ -0,0 +1,89 @@
+---
+- name: Create new silence
+ community.grafana.grafana_silence:
+ url: "{{ grafana_url }}"
+ url_username: "{{ grafana_username }}"
+ url_password: "{{ grafana_password }}"
+ comment: "a testcomment"
+ created_by: "me"
+ starts_at: "2029-07-29T08:45:45.000Z"
+ ends_at: "2029-07-29T08:55:45.000Z"
+ matchers:
+ - isEqual: true
+ isRegex: true
+ name: environment
+ value: test
+ state: present
+ register: result
+- assert:
+ that:
+ - "result.changed == true"
+ - "result.failed == false"
+ - "result.silence.id != ''"
+
+- name: Check idempotency on silence creation
+ community.grafana.grafana_silence:
+ url: "{{ grafana_url }}"
+ url_username: "{{ grafana_username }}"
+ url_password: "{{ grafana_password }}"
+ comment: "a testcomment"
+ created_by: "me"
+ starts_at: "2029-07-29T08:45:45.000Z"
+ ends_at: "2029-07-29T08:55:45.000Z"
+ matchers:
+ - isEqual: true
+ isRegex: true
+ name: environment
+ value: test
+ state: present
+ register: result
+- assert:
+ that:
+ - "result.changed == false"
+ - "result.msg != ''"
+
+- name: Delete the silence
+ community.grafana.grafana_silence:
+ url: "{{ grafana_url }}"
+ url_username: "{{ grafana_username }}"
+ url_password: "{{ grafana_password }}"
+ comment: "a testcomment"
+ created_by: "me"
+ starts_at: "2029-07-29T08:45:45.000Z"
+ ends_at: "2029-07-29T08:55:45.000Z"
+ matchers:
+ - isEqual: true
+ isRegex: true
+ name: environment
+ value: test
+ state: absent
+ register: result
+- assert:
+ that:
+ - "result.changed == true"
+ - "result.failed == false"
+ - "result.silence.id != ''"
+ - - "result.silence.createdBy != 'me'"
+
+- name: Check idempotency on silence deletion
+ community.grafana.grafana_silence:
+ url: "{{ grafana_url }}"
+ url_username: "{{ grafana_username }}"
+ url_password: "{{ grafana_password }}"
+ comment: "a testcomment"
+ created_by: "me"
+ starts_at: "2029-07-29T08:45:45.000Z"
+ ends_at: "2029-07-29T08:55:45.000Z"
+ matchers:
+ - isEqual: true
+ isRegex: true
+ name: environment
+ value: test
+ state: absent
+ register: result
+ ignore_errors: yes
+- assert:
+ that:
+ - "result.changed == false"
+ - "result.failed == false"
+ - "result.msg == 'Silence does not exist'" \ No newline at end of file
diff --git a/ansible_collections/community/grafana/tests/sanity/ignore-2.15.txt b/ansible_collections/community/grafana/tests/sanity/ignore-2.15.txt
index 5c82494f9..0a40a23d5 100644
--- a/ansible_collections/community/grafana/tests/sanity/ignore-2.15.txt
+++ b/ansible_collections/community/grafana/tests/sanity/ignore-2.15.txt
@@ -1,4 +1 @@
plugins/modules/grafana_dashboard.py validate-modules:invalid-argument-name
-tests/unit/modules/grafana/grafana_plugin/test_grafana_plugin.py pep8:W291
-hacking/check_fragment.sh shebang
-hacking/find_grafana_versions.py shebang
diff --git a/ansible_collections/community/grafana/tests/sanity/ignore-2.16.txt b/ansible_collections/community/grafana/tests/sanity/ignore-2.16.txt
index 5c82494f9..0a40a23d5 100644
--- a/ansible_collections/community/grafana/tests/sanity/ignore-2.16.txt
+++ b/ansible_collections/community/grafana/tests/sanity/ignore-2.16.txt
@@ -1,4 +1 @@
plugins/modules/grafana_dashboard.py validate-modules:invalid-argument-name
-tests/unit/modules/grafana/grafana_plugin/test_grafana_plugin.py pep8:W291
-hacking/check_fragment.sh shebang
-hacking/find_grafana_versions.py shebang
diff --git a/ansible_collections/community/grafana/tests/sanity/ignore-2.18.txt b/ansible_collections/community/grafana/tests/sanity/ignore-2.18.txt
new file mode 100644
index 000000000..0a40a23d5
--- /dev/null
+++ b/ansible_collections/community/grafana/tests/sanity/ignore-2.18.txt
@@ -0,0 +1 @@
+plugins/modules/grafana_dashboard.py validate-modules:invalid-argument-name
diff --git a/ansible_collections/community/grafana/tests/unit/modules/grafana/grafana_plugin/test_grafana_plugin.py b/ansible_collections/community/grafana/tests/unit/modules/grafana/grafana_plugin/test_grafana_plugin.py
index ec691a467..7cc04a99a 100644
--- a/ansible_collections/community/grafana/tests/unit/modules/grafana/grafana_plugin/test_grafana_plugin.py
+++ b/ansible_collections/community/grafana/tests/unit/modules/grafana/grafana_plugin/test_grafana_plugin.py
@@ -21,7 +21,7 @@ Restart grafana after installing plugins . <service grafana-server restart>
def run_command_install_zip():
STDERR = ""
STDOUT = """
-installing alexanderzobnin-grafana-zabbix @
+installing alexanderzobnin-grafana-zabbix @
from: /home/grafana//alexanderzobnin-grafana-zabbix-v3.10.5-1-g2219691.zip
into: /var/lib/grafana/plugins
diff --git a/ansible_collections/community/grafana/tests/unit/modules/grafana/grafana_silence/test_grafana_silence.py b/ansible_collections/community/grafana/tests/unit/modules/grafana/grafana_silence/test_grafana_silence.py
new file mode 100644
index 000000000..96522c2af
--- /dev/null
+++ b/ansible_collections/community/grafana/tests/unit/modules/grafana/grafana_silence/test_grafana_silence.py
@@ -0,0 +1,211 @@
+from __future__ import absolute_import, division, print_function
+
+from unittest import TestCase
+from unittest.mock import patch
+from ansible_collections.community.grafana.plugins.modules import grafana_silence
+from ansible.module_utils._text import to_bytes
+from ansible.module_utils import basic
+from ansible.module_utils.urls import basic_auth_header
+import json
+
+__metaclass__ = type
+
+
+class MockedReponse(object):
+ def __init__(self, data):
+ self.data = data
+
+ def read(self):
+ return self.data
+
+
+def exit_json(*args, **kwargs):
+ """function to patch over exit_json; package return data into an exception"""
+ if "changed" not in kwargs:
+ kwargs["changed"] = False
+ raise AnsibleExitJson(kwargs)
+
+
+def fail_json(*args, **kwargs):
+ """function to patch over fail_json; package return data into an exception"""
+ kwargs["failed"] = True
+ raise AnsibleFailJson(kwargs)
+
+
+class AnsibleExitJson(Exception):
+ """Exception class to be raised by module.exit_json and caught by the test case"""
+
+ pass
+
+
+class AnsibleFailJson(Exception):
+ """Exception class to be raised by module.fail_json and caught by the test case"""
+
+ pass
+
+
+def set_module_args(args):
+ """prepare arguments so that they will be picked up during module creation"""
+ args = json.dumps({"ANSIBLE_MODULE_ARGS": args})
+ basic._ANSIBLE_ARGS = to_bytes(args)
+
+
+def silence_deleted_resp():
+ server_response = json.dumps({"message": "silence deleted"})
+ return (MockedReponse(server_response), {"status": 200})
+
+
+def silence_created_resp():
+ server_response = json.dumps({"silenceID": "470b7116-8f06-4bb6-9e6c-6258aa92218e"})
+ return (MockedReponse(server_response), {"status": 200})
+
+
+def silence_get_resp():
+ server_response = json.dumps([], sort_keys=True)
+ return (MockedReponse(server_response), {"status": 200})
+
+
+def get_silence_by_id_resp():
+ server_response = json.dumps([], sort_keys=True)
+ return (MockedReponse(server_response), {"status": 200})
+
+
+def get_version_resp():
+ return {"major": 10, "minor": 0, "rev": 0}
+
+
+class GrafanaSilenceTest(TestCase):
+ def setUp(self):
+ self.authorization = basic_auth_header("admin", "changeme")
+ self.mock_module_helper = patch.multiple(
+ basic.AnsibleModule, exit_json=exit_json, fail_json=fail_json
+ )
+ self.mock_module_helper.start()
+ self.addCleanup(self.mock_module_helper.stop)
+
+ # create a new silence
+ @patch(
+ "ansible_collections.community.grafana.plugins.modules.grafana_silence.GrafanaSilenceInterface.get_silence"
+ )
+ @patch(
+ "ansible_collections.community.grafana.plugins.modules.grafana_silence.GrafanaSilenceInterface.get_version"
+ )
+ @patch(
+ "ansible_collections.community.grafana.plugins.modules.grafana_silence.fetch_url"
+ )
+ def test_create_silence_new_silence(
+ self, mock_fetch_url, mock_get_version, mock_get_silence
+ ):
+ set_module_args(
+ {
+ "url": "https://grafana.example.com",
+ "url_username": "admin",
+ "url_password": "changeme",
+ "comment": "a testcomment",
+ "created_by": "me",
+ "starts_at": "2029-07-29T08:45:45.000Z",
+ "ends_at": "2029-07-29T08:55:45.000Z",
+ "matchers": [
+ {
+ "isEqual": True,
+ "isRegex": True,
+ "name": "environment",
+ "value": "test",
+ }
+ ],
+ "state": "present",
+ }
+ )
+ module = grafana_silence.setup_module_object()
+ mock_get_version.return_value = get_version_resp()
+ mock_fetch_url.return_value = silence_created_resp()
+ mock_get_silence.return_value = silence_get_resp()
+
+ grafana_iface = grafana_silence.GrafanaSilenceInterface(module)
+ result = grafana_iface.create_silence(
+ "a testcomment",
+ "me",
+ "2029-07-29T08:45:45.000Z",
+ "2029-07-29T08:55:45.000Z",
+ [
+ {
+ "isEqual": True,
+ "isRegex": True,
+ "name": "environment",
+ "value": "test",
+ }
+ ],
+ )
+ mock_fetch_url.assert_called_once_with(
+ module,
+ "https://grafana.example.com/api/alertmanager/grafana/api/v2/silences",
+ data=json.dumps(
+ {
+ "comment": "a testcomment",
+ "createdBy": "me",
+ "startsAt": "2029-07-29T08:45:45.000Z",
+ "endsAt": "2029-07-29T08:55:45.000Z",
+ "matchers": [
+ {
+ "isEqual": True,
+ "isRegex": True,
+ "name": "environment",
+ "value": "test",
+ }
+ ],
+ },
+ sort_keys=True,
+ ),
+ headers={
+ "Content-Type": "application/json",
+ "Authorization": self.authorization,
+ },
+ method="POST",
+ )
+ self.assertEquals(result, {"silenceID": "470b7116-8f06-4bb6-9e6c-6258aa92218e"})
+
+ @patch(
+ "ansible_collections.community.grafana.plugins.modules.grafana_silence.GrafanaSilenceInterface.get_version"
+ )
+ @patch(
+ "ansible_collections.community.grafana.plugins.modules.grafana_silence.fetch_url"
+ )
+ def test_delete_silence(self, mock_fetch_url, mock_get_version):
+ set_module_args(
+ {
+ "url": "https://grafana.example.com",
+ "url_username": "admin",
+ "url_password": "changeme",
+ "comment": "a testcomment",
+ "created_by": "me",
+ "ends_at": "2029-07-29T08:55:45.000Z",
+ "matchers": [
+ {
+ "isEqual": True,
+ "isRegex": True,
+ "name": "environment",
+ "value": "test",
+ }
+ ],
+ "starts_at": "2029-07-29T08:45:45.000Z",
+ "state": "present",
+ }
+ )
+ module = grafana_silence.setup_module_object()
+ mock_fetch_url.return_value = silence_deleted_resp()
+ mock_get_version.return_value = get_version_resp()
+
+ grafana_iface = grafana_silence.GrafanaSilenceInterface(module)
+ silence_id = "470b7116-8f06-4bb6-9e6c-6258aa92218e"
+ result = grafana_iface.delete_silence(silence_id)
+ mock_fetch_url.assert_called_once_with(
+ module,
+ "https://grafana.example.com/api/alertmanager/grafana/api/v2/silence/470b7116-8f06-4bb6-9e6c-6258aa92218e",
+ data=None,
+ headers={
+ "Content-Type": "application/json",
+ "Authorization": self.authorization,
+ },
+ method="DELETE",
+ )
+ self.assertEquals(result, {"message": "silence deleted"})
diff --git a/ansible_collections/community/hrobot/.github/workflows/ansible-test.yml b/ansible_collections/community/hrobot/.github/workflows/ansible-test.yml
index 6aadd1b4f..fe133e857 100644
--- a/ansible_collections/community/hrobot/.github/workflows/ansible-test.yml
+++ b/ansible_collections/community/hrobot/.github/workflows/ansible-test.yml
@@ -26,53 +26,29 @@ jobs:
ansible:
# It's important that Sanity is tested against all stable-X.Y branches
# Testing against `devel` may fail as new tests are added.
- - stable-2.9
- - stable-2.10
- - stable-2.11
- - stable-2.12
- - stable-2.13
- stable-2.14
- stable-2.15
- stable-2.16
- stable-2.17
- devel
- # Ansible-test on various stable branches does not yet work well with cgroups v2.
- # Since ubuntu-latest now uses Ubuntu 22.04, we need to fall back to the ubuntu-20.04
- # image for these stable branches. The list of branches where this is necessary will
- # shrink over time, check out https://github.com/ansible-collections/news-for-maintainers/issues/28
- # for the latest list.
- runs-on: >-
- ${{ contains(fromJson(
- '["stable-2.9", "stable-2.10", "stable-2.11"]'
- ), matrix.ansible) && 'ubuntu-20.04' || 'ubuntu-latest' }}
+ runs-on: ubuntu-latest
steps:
- name: Perform sanity testing
uses: felixfontein/ansible-test-gh-action@main
with:
ansible-core-version: ${{ matrix.ansible }}
testing-type: sanity
+ pre-test-cmd: >-
+ git clone --depth=1 --single-branch --branch stable-1 https://github.com/ansible-collections/community.library_inventory_filtering.git ../../community/library_inventory_filtering_v1
units:
- # Ansible-test on various stable branches does not yet work well with cgroups v2.
- # Since ubuntu-latest now uses Ubuntu 22.04, we need to fall back to the ubuntu-20.04
- # image for these stable branches. The list of branches where this is necessary will
- # shrink over time, check out https://github.com/ansible-collections/news-for-maintainers/issues/28
- # for the latest list.
- runs-on: >-
- ${{ contains(fromJson(
- '["stable-2.9", "stable-2.10", "stable-2.11"]'
- ), matrix.ansible) && 'ubuntu-20.04' || 'ubuntu-latest' }}
+ runs-on: ubuntu-latest
name: Units (Ⓐ${{ matrix.ansible }})
strategy:
# As soon as the first unit test fails, cancel the others to free up the CI queue
fail-fast: true
matrix:
ansible:
- - stable-2.9
- - stable-2.10
- - stable-2.11
- - stable-2.12
- - stable-2.13
- stable-2.14
- stable-2.15
- stable-2.16
@@ -87,6 +63,6 @@ jobs:
with:
ansible-core-version: ${{ matrix.ansible }}
testing-type: units
- # NOTE: we're installing with git to work around Galaxy being a huge PITA (https://github.com/ansible/galaxy/issues/2429)
- pre-test-cmd: >-
- git clone --depth=1 --single-branch https://github.com/ansible-collections/community.internal_test_tools.git ../../community/internal_test_tools
+ test-deps: >-
+ git+https://github.com/ansible-collections/community.internal_test_tools.git,main
+ git+https://github.com/ansible-collections/community.library_inventory_filtering.git,stable-1
diff --git a/ansible_collections/community/hrobot/.github/workflows/ee.yml b/ansible_collections/community/hrobot/.github/workflows/ee.yml
index c4e751a79..ba356758d 100644
--- a/ansible_collections/community/hrobot/.github/workflows/ee.yml
+++ b/ansible_collections/community/hrobot/.github/workflows/ee.yml
@@ -62,22 +62,6 @@ jobs:
ansible_runner: ansible-runner
base_image: quay.io/centos/centos:stream9
pre_base: '"#"'
- - name: ansible-core 2.13 @ RHEL UBI 8
- ansible_core: https://github.com/ansible/ansible/archive/stable-2.13.tar.gz
- ansible_runner: ansible-runner
- other_deps: |2
- python_interpreter:
- package_system: python39 python39-pip python39-wheel python39-cryptography
- base_image: docker.io/redhat/ubi8:latest
- pre_base: '"#"'
- - name: ansible-core 2.12 @ CentOS Stream 8
- ansible_core: https://github.com/ansible/ansible/archive/stable-2.12.tar.gz
- ansible_runner: ansible-runner
- other_deps: |2
- python_interpreter:
- package_system: python39 python39-pip python39-wheel python39-cryptography
- base_image: quay.io/centos/centos:stream8
- pre_base: '"#"'
runs-on: ubuntu-latest
steps:
- name: Check out code
@@ -88,7 +72,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v5
with:
- python-version: '3.11'
+ python-version: '3.12'
- name: Install ansible-builder and ansible-navigator
run: pip install ansible-builder ansible-navigator
diff --git a/ansible_collections/community/hrobot/.github/workflows/extra-tests.yml b/ansible_collections/community/hrobot/.github/workflows/extra-tests.yml
index ee8964c3f..9b9e56009 100644
--- a/ansible_collections/community/hrobot/.github/workflows/extra-tests.yml
+++ b/ansible_collections/community/hrobot/.github/workflows/extra-tests.yml
@@ -33,15 +33,16 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v5
with:
- python-version: '3.11'
+ python-version: '3.12'
- name: Install ansible-core
run: pip install https://github.com/ansible/ansible/archive/devel.tar.gz --disable-pip-version-check
- name: Install collection dependencies
- run: git clone --depth=1 --single-branch https://github.com/ansible-collections/community.internal_test_tools.git ./ansible_collections/community/internal_test_tools
- # NOTE: we're installing with git to work around Galaxy being a huge PITA (https://github.com/ansible/galaxy/issues/2429)
- # run: ansible-galaxy collection install community.internal_test_tools -p .
+ run: >-
+ ansible-galaxy collection install -p .
+ git+https://github.com/ansible-collections/community.internal_test_tools.git,main
+ git+https://github.com/ansible-collections/community.library_inventory_filtering.git,stable-1
- name: Run sanity tests
run: ../../community/internal_test_tools/tools/run.py --color
diff --git a/ansible_collections/community/hrobot/CHANGELOG.md b/ansible_collections/community/hrobot/CHANGELOG.md
index fec73109e..d995f8d6d 100644
--- a/ansible_collections/community/hrobot/CHANGELOG.md
+++ b/ansible_collections/community/hrobot/CHANGELOG.md
@@ -2,77 +2,111 @@
**Topics**
-- <a href="#v1-9-2">v1\.9\.2</a>
+- <a href="#v2-0-0">v2\.0\.0</a>
- <a href="#release-summary">Release Summary</a>
+ - <a href="#major-changes">Major Changes</a>
+ - <a href="#minor-changes">Minor Changes</a>
+ - <a href="#breaking-changes--porting-guide">Breaking Changes / Porting Guide</a>
+ - <a href="#removed-features-previously-deprecated">Removed Features \(previously deprecated\)</a>
+- <a href="#v1-9-2">v1\.9\.2</a>
+ - <a href="#release-summary-1">Release Summary</a>
- <a href="#bugfixes">Bugfixes</a>
- <a href="#v1-9-1">v1\.9\.1</a>
- - <a href="#release-summary-1">Release Summary</a>
+ - <a href="#release-summary-2">Release Summary</a>
- <a href="#security-fixes">Security Fixes</a>
- <a href="#v1-9-0">v1\.9\.0</a>
- - <a href="#release-summary-2">Release Summary</a>
- - <a href="#minor-changes">Minor Changes</a>
+ - <a href="#release-summary-3">Release Summary</a>
+ - <a href="#minor-changes-1">Minor Changes</a>
- <a href="#deprecated-features">Deprecated Features</a>
- <a href="#v1-8-2">v1\.8\.2</a>
- - <a href="#release-summary-3">Release Summary</a>
+ - <a href="#release-summary-4">Release Summary</a>
- <a href="#bugfixes-1">Bugfixes</a>
- <a href="#v1-8-1">v1\.8\.1</a>
- - <a href="#release-summary-4">Release Summary</a>
+ - <a href="#release-summary-5">Release Summary</a>
- <a href="#known-issues">Known Issues</a>
- <a href="#v1-8-0">v1\.8\.0</a>
- - <a href="#release-summary-5">Release Summary</a>
- - <a href="#major-changes">Major Changes</a>
- - <a href="#minor-changes-1">Minor Changes</a>
-- <a href="#v1-7-0">v1\.7\.0</a>
- <a href="#release-summary-6">Release Summary</a>
+ - <a href="#major-changes-1">Major Changes</a>
+ - <a href="#minor-changes-2">Minor Changes</a>
+- <a href="#v1-7-0">v1\.7\.0</a>
+ - <a href="#release-summary-7">Release Summary</a>
- <a href="#new-modules">New Modules</a>
- <a href="#v1-6-0">v1\.6\.0</a>
- - <a href="#release-summary-7">Release Summary</a>
- - <a href="#minor-changes-2">Minor Changes</a>
-- <a href="#v1-5-2">v1\.5\.2</a>
- <a href="#release-summary-8">Release Summary</a>
- <a href="#minor-changes-3">Minor Changes</a>
-- <a href="#v1-5-1">v1\.5\.1</a>
+- <a href="#v1-5-2">v1\.5\.2</a>
- <a href="#release-summary-9">Release Summary</a>
-- <a href="#v1-5-0">v1\.5\.0</a>
- - <a href="#release-summary-10">Release Summary</a>
- <a href="#minor-changes-4">Minor Changes</a>
-- <a href="#v1-4-0">v1\.4\.0</a>
+- <a href="#v1-5-1">v1\.5\.1</a>
+ - <a href="#release-summary-10">Release Summary</a>
+- <a href="#v1-5-0">v1\.5\.0</a>
- <a href="#release-summary-11">Release Summary</a>
- <a href="#minor-changes-5">Minor Changes</a>
-- <a href="#v1-3-1">v1\.3\.1</a>
+- <a href="#v1-4-0">v1\.4\.0</a>
- <a href="#release-summary-12">Release Summary</a>
+ - <a href="#minor-changes-6">Minor Changes</a>
+- <a href="#v1-3-1">v1\.3\.1</a>
+ - <a href="#release-summary-13">Release Summary</a>
- <a href="#bugfixes-2">Bugfixes</a>
- <a href="#v1-3-0">v1\.3\.0</a>
- - <a href="#release-summary-13">Release Summary</a>
- - <a href="#minor-changes-6">Minor Changes</a>
+ - <a href="#release-summary-14">Release Summary</a>
+ - <a href="#minor-changes-7">Minor Changes</a>
- <a href="#bugfixes-3">Bugfixes</a>
- <a href="#v1-2-3">v1\.2\.3</a>
- - <a href="#release-summary-14">Release Summary</a>
-- <a href="#v1-2-2">v1\.2\.2</a>
- <a href="#release-summary-15">Release Summary</a>
+- <a href="#v1-2-2">v1\.2\.2</a>
+ - <a href="#release-summary-16">Release Summary</a>
- <a href="#bugfixes-4">Bugfixes</a>
- <a href="#v1-2-1">v1\.2\.1</a>
- - <a href="#release-summary-16">Release Summary</a>
- - <a href="#minor-changes-7">Minor Changes</a>
-- <a href="#v1-2-0">v1\.2\.0</a>
- <a href="#release-summary-17">Release Summary</a>
- <a href="#minor-changes-8">Minor Changes</a>
+- <a href="#v1-2-0">v1\.2\.0</a>
+ - <a href="#release-summary-18">Release Summary</a>
+ - <a href="#minor-changes-9">Minor Changes</a>
- <a href="#new-modules-1">New Modules</a>
- <a href="#v1-1-1">v1\.1\.1</a>
- - <a href="#release-summary-18">Release Summary</a>
+ - <a href="#release-summary-19">Release Summary</a>
- <a href="#bugfixes-5">Bugfixes</a>
- <a href="#v1-1-0">v1\.1\.0</a>
- - <a href="#release-summary-19">Release Summary</a>
+ - <a href="#release-summary-20">Release Summary</a>
- <a href="#new-plugins">New Plugins</a>
- <a href="#inventory">Inventory</a>
- <a href="#v1-0-0">v1\.0\.0</a>
- - <a href="#release-summary-20">Release Summary</a>
- - <a href="#breaking-changes--porting-guide">Breaking Changes / Porting Guide</a>
+ - <a href="#release-summary-21">Release Summary</a>
+ - <a href="#breaking-changes--porting-guide-1">Breaking Changes / Porting Guide</a>
+
+<a id="v2-0-0"></a>
+## v2\.0\.0
+
+<a id="release-summary"></a>
+### Release Summary
+
+\.\.\.
+
+<a id="major-changes"></a>
+### Major Changes
+
+* The <code>community\.hrobot</code> collection now depends on the <code>community\.library\_inventory\_filtering\_v1</code> 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 <code>ansible\-galaxy collection install</code>\, 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)\)\.
+
+<a id="minor-changes"></a>
+### Minor Changes
+
+* robot inventory plugin \- add <code>filter</code> 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)\)\.
+
+<a id="breaking-changes--porting-guide"></a>
+### Breaking Changes / Porting Guide
+
+* robot inventory plugin \- <code>filters</code> is now no longer an alias of <code>simple\_filters</code>\, but a new\, different option \([https\://github\.com/ansible\-collections/community\.hrobot/pull/101](https\://github\.com/ansible\-collections/community\.hrobot/pull/101)\)\.
+
+<a id="removed-features-previously-deprecated"></a>
+### Removed Features \(previously deprecated\)
+
+* 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)\)\.
<a id="v1-9-2"></a>
## v1\.9\.2
-<a id="release-summary"></a>
+<a id="release-summary-1"></a>
### Release Summary
Bugfix release\.
@@ -85,7 +119,7 @@ Bugfix release\.
<a id="v1-9-1"></a>
## v1\.9\.1
-<a id="release-summary-1"></a>
+<a id="release-summary-2"></a>
### Release Summary
Bugfix release\.
@@ -98,12 +132,12 @@ Bugfix release\.
<a id="v1-9-0"></a>
## v1\.9\.0
-<a id="release-summary-2"></a>
+<a id="release-summary-3"></a>
### Release Summary
Feature and maintenance release\.
-<a id="minor-changes"></a>
+<a id="minor-changes-1"></a>
### Minor Changes
* robot inventory plugin \- the <code>filters</code> option has been renamed to <code>simple\_filters</code>\. The old name still works until community\.hrobot 2\.0\.0\. Then it will change to allow more complex filtering with the <code>community\.library\_inventory\_filtering\_v1</code> collection\'s functionality \([https\://github\.com/ansible\-collections/community\.hrobot/pull/94](https\://github\.com/ansible\-collections/community\.hrobot/pull/94)\)\.
@@ -116,7 +150,7 @@ Feature and maintenance release\.
<a id="v1-8-2"></a>
## v1\.8\.2
-<a id="release-summary-3"></a>
+<a id="release-summary-4"></a>
### Release Summary
Maintenance release with updated documentation\.
@@ -129,7 +163,7 @@ Maintenance release with updated documentation\.
<a id="v1-8-1"></a>
## v1\.8\.1
-<a id="release-summary-4"></a>
+<a id="release-summary-5"></a>
### Release Summary
Maintenance release with updated documentation\.
@@ -150,17 +184,17 @@ for the rendered HTML version of the documentation of the latest release\.
<a id="v1-8-0"></a>
## v1\.8\.0
-<a id="release-summary-5"></a>
+<a id="release-summary-6"></a>
### Release Summary
Feature release for the Hetzner firewall changes\.
-<a id="major-changes"></a>
+<a id="major-changes-1"></a>
### Major Changes
* firewall \- Hetzner added output rules support to the firewall\. This change unfortunately means that using old versions of the firewall module will always set the output rule list to empty\, thus disallowing the server to send out packets \([https\://github\.com/ansible\-collections/community\.hrobot/issues/75](https\://github\.com/ansible\-collections/community\.hrobot/issues/75)\, [https\://github\.com/ansible\-collections/community\.hrobot/pull/76](https\://github\.com/ansible\-collections/community\.hrobot/pull/76)\)\.
-<a id="minor-changes-1"></a>
+<a id="minor-changes-2"></a>
### Minor Changes
* firewall\, firewall\_info \- add <code>filter\_ipv6</code> and <code>rules\.output</code> output to support the new IPv6 filtering and output rules features \([https\://github\.com/ansible\-collections/community\.hrobot/issues/75](https\://github\.com/ansible\-collections/community\.hrobot/issues/75)\, [https\://github\.com/ansible\-collections/community\.hrobot/pull/76](https\://github\.com/ansible\-collections/community\.hrobot/pull/76)\)\.
@@ -169,7 +203,7 @@ Feature release for the Hetzner firewall changes\.
<a id="v1-7-0"></a>
## v1\.7\.0
-<a id="release-summary-6"></a>
+<a id="release-summary-7"></a>
### Release Summary
Feature release\.
@@ -182,12 +216,12 @@ Feature release\.
<a id="v1-6-0"></a>
## v1\.6\.0
-<a id="release-summary-7"></a>
+<a id="release-summary-8"></a>
### Release Summary
Feature release with improved documentation\.
-<a id="minor-changes-2"></a>
+<a id="minor-changes-3"></a>
### Minor Changes
* Added a <code>community\.hrobot\.robot</code> module defaults group / action group\. Use with <code>group/community\.hrobot\.robot</code> to provide options for all Hetzner Robot modules \([https\://github\.com/ansible\-collections/community\.hrobot/pull/65](https\://github\.com/ansible\-collections/community\.hrobot/pull/65)\)\.
@@ -195,12 +229,12 @@ Feature release with improved documentation\.
<a id="v1-5-2"></a>
## v1\.5\.2
-<a id="release-summary-8"></a>
+<a id="release-summary-9"></a>
### Release Summary
Maintenance release with a documentation improvement\.
-<a id="minor-changes-3"></a>
+<a id="minor-changes-4"></a>
### Minor Changes
* The collection repository conforms to the [REUSE specification](https\://reuse\.software/spec/) except for the changelog fragments \([https\://github\.com/ansible\-collections/community\.hrobot/pull/60](https\://github\.com/ansible\-collections/community\.hrobot/pull/60)\)\.
@@ -208,7 +242,7 @@ Maintenance release with a documentation improvement\.
<a id="v1-5-1"></a>
## v1\.5\.1
-<a id="release-summary-9"></a>
+<a id="release-summary-10"></a>
### Release Summary
Maintenance release with small documentation fixes\.
@@ -216,12 +250,12 @@ Maintenance release with small documentation fixes\.
<a id="v1-5-0"></a>
## v1\.5\.0
-<a id="release-summary-10"></a>
+<a id="release-summary-11"></a>
### Release Summary
Maintenance release changing the way licenses are declared\. No functional changes\.
-<a id="minor-changes-4"></a>
+<a id="minor-changes-5"></a>
### Minor Changes
* All software licenses are now in the <code>LICENSES/</code> directory of the collection root\. Moreover\, <code>SPDX\-License\-Identifier\:</code> is used to declare the applicable license for every file that is not automatically generated \([https\://github\.com/ansible\-collections/community\.hrobot/pull/52](https\://github\.com/ansible\-collections/community\.hrobot/pull/52)\)\.
@@ -229,12 +263,12 @@ Maintenance release changing the way licenses are declared\. No functional chang
<a id="v1-4-0"></a>
## v1\.4\.0
-<a id="release-summary-11"></a>
+<a id="release-summary-12"></a>
### Release Summary
Feature release\.
-<a id="minor-changes-5"></a>
+<a id="minor-changes-6"></a>
### Minor Changes
* robot inventory plugin \- allow to template <code>hetzner\_user</code> and <code>hetzner\_password</code> \([https\://github\.com/ansible\-collections/community\.hrobot/pull/49](https\://github\.com/ansible\-collections/community\.hrobot/pull/49)\)\.
@@ -242,7 +276,7 @@ Feature release\.
<a id="v1-3-1"></a>
## v1\.3\.1
-<a id="release-summary-12"></a>
+<a id="release-summary-13"></a>
### Release Summary
Maintenance release\.
@@ -255,12 +289,12 @@ Maintenance release\.
<a id="v1-3-0"></a>
## v1\.3\.0
-<a id="release-summary-13"></a>
+<a id="release-summary-14"></a>
### Release Summary
Feature and bugfix release\.
-<a id="minor-changes-6"></a>
+<a id="minor-changes-7"></a>
### Minor Changes
* Prepare collection for inclusion in an Execution Environment by declaring its dependencies \([https\://github\.com/ansible\-collections/community\.hrobot/pull/45](https\://github\.com/ansible\-collections/community\.hrobot/pull/45)\)\.
@@ -273,7 +307,7 @@ Feature and bugfix release\.
<a id="v1-2-3"></a>
## v1\.2\.3
-<a id="release-summary-14"></a>
+<a id="release-summary-15"></a>
### Release Summary
Docs update release\.
@@ -281,7 +315,7 @@ Docs update release\.
<a id="v1-2-2"></a>
## v1\.2\.2
-<a id="release-summary-15"></a>
+<a id="release-summary-16"></a>
### Release Summary
Bugfix release\.
@@ -294,12 +328,12 @@ Bugfix release\.
<a id="v1-2-1"></a>
## v1\.2\.1
-<a id="release-summary-16"></a>
+<a id="release-summary-17"></a>
### Release Summary
Maintenance release\.
-<a id="minor-changes-7"></a>
+<a id="minor-changes-8"></a>
### Minor Changes
* Generic module HTTP support code \- fix usage of <code>fetch\_url</code> with changes in latest ansible\-core <code>devel</code> branch \([https\://github\.com/ansible\-collections/community\.hrobot/pull/30](https\://github\.com/ansible\-collections/community\.hrobot/pull/30)\)\.
@@ -307,12 +341,12 @@ Maintenance release\.
<a id="v1-2-0"></a>
## v1\.2\.0
-<a id="release-summary-17"></a>
+<a id="release-summary-18"></a>
### Release Summary
Feature release with multiple new modules\.
-<a id="minor-changes-8"></a>
+<a id="minor-changes-9"></a>
### Minor Changes
* Avoid internal ansible\-core module\_utils in favor of equivalent public API available since at least Ansible 2\.9 \([https\://github\.com/ansible\-collections/community\.hrobot/pull/18](https\://github\.com/ansible\-collections/community\.hrobot/pull/18)\)\.
@@ -334,7 +368,7 @@ Feature release with multiple new modules\.
<a id="v1-1-1"></a>
## v1\.1\.1
-<a id="release-summary-18"></a>
+<a id="release-summary-19"></a>
### Release Summary
Bugfix release which reduces the number of HTTPS queries for the modules and plugins\.
@@ -347,7 +381,7 @@ Bugfix release which reduces the number of HTTPS queries for the modules and plu
<a id="v1-1-0"></a>
## v1\.1\.0
-<a id="release-summary-19"></a>
+<a id="release-summary-20"></a>
### Release Summary
Release with a new inventory plugin\.
@@ -363,12 +397,12 @@ Release with a new inventory plugin\.
<a id="v1-0-0"></a>
## v1\.0\.0
-<a id="release-summary-20"></a>
+<a id="release-summary-21"></a>
### Release Summary
The <code>community\.hrobot</code> continues the work on the Hetzner Robot modules from their state in <code>community\.general</code> 1\.2\.0\. The changes listed here are thus relative to the modules <code>community\.general\.hetzner\_\*</code>\.
-<a id="breaking-changes--porting-guide"></a>
+<a id="breaking-changes--porting-guide-1"></a>
### Breaking Changes / Porting Guide
* firewall \- now requires the [ipaddress](https\://pypi\.org/project/ipaddress/) library \([https\://github\.com/ansible\-collections/community\.hrobot/pull/2](https\://github\.com/ansible\-collections/community\.hrobot/pull/2)\)\.
diff --git a/ansible_collections/community/hrobot/CHANGELOG.rst b/ansible_collections/community/hrobot/CHANGELOG.rst
index fdb9c4a23..18407d29f 100644
--- a/ansible_collections/community/hrobot/CHANGELOG.rst
+++ b/ansible_collections/community/hrobot/CHANGELOG.rst
@@ -4,6 +4,34 @@ Community Hetzner Robot Collection Release Notes
.. contents:: Topics
+v2.0.0
+======
+
+Release Summary
+---------------
+
+...
+
+Major Changes
+-------------
+
+- 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).
+
+Minor Changes
+-------------
+
+- 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).
+
+Breaking Changes / Porting Guide
+--------------------------------
+
+- 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).
+
+Removed Features (previously deprecated)
+----------------------------------------
+
+- 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).
+
v1.9.2
======
diff --git a/ansible_collections/community/hrobot/FILES.json b/ansible_collections/community/hrobot/FILES.json
index e5964a9b0..1f4f1fc3f 100644
--- a/ansible_collections/community/hrobot/FILES.json
+++ b/ansible_collections/community/hrobot/FILES.json
@@ -25,7 +25,7 @@
"name": ".github/workflows/ansible-test.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6745e283a9f1578108ad5f14efed6558cdfb1a25c5e04426836b343baa7f1ccc",
+ "chksum_sha256": "597f0f97a3486451bdf364c20f5b4b899486c0350422811b76fc57922ee50f6a",
"format": 1
},
{
@@ -46,14 +46,14 @@
"name": ".github/workflows/ee.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "03c5a4a0a65ebe7d5b9683d95f2752cdbbcac4d4b8cca513d4332d80dd1c79c2",
+ "chksum_sha256": "bd2cbf8bd79099e4f848a41d3fbf00e5b6d14037cfd2e9a2b4674d36c3ef0ae4",
"format": 1
},
{
"name": ".github/workflows/extra-tests.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3d4972a65972c0091b7343e287eba10382716e29fd184091b1f8b4df4892fe44",
+ "chksum_sha256": "445358ff7ba521cc629303462ab71eccd79aa840b17b90b1c7f4d1dab82fffe7",
"format": 1
},
{
@@ -137,7 +137,7 @@
"name": "changelogs/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e941d53c423339dae173424865a5f4e2c892aa52818bebd6999d2444ff2188a3",
+ "chksum_sha256": "44809fb2e5dc28dd9948e07f4987e0785b1835f56d82129d2feabd0ac6acd699",
"format": 1
},
{
@@ -200,7 +200,7 @@
"name": "meta/runtime.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "24fe3900ecea43c7ba9092f959869454c77877400c6af713fb56f0c8465d564e",
+ "chksum_sha256": "dcc07fa47601566d57bf94bccf30fd3d495865324899761ce689e96f6b6ce6e9",
"format": 1
},
{
@@ -242,7 +242,7 @@
"name": "plugins/inventory/robot.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9ebb90b3fa1ce6a294b1d56b7d943e86ada342b9e288bdd416bde2e39e9989db",
+ "chksum_sha256": "db25dddf103d07d71c2f20727b40d7ced1420056095573074a96ed969297e972",
"format": 1
},
{
@@ -683,7 +683,7 @@
"name": "tests/unit/plugins/inventory/test_robot.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e77768bf19cc0b1743641419d4b0360b6725b8dbb4e79d2ecacfac69d0886db9",
+ "chksum_sha256": "9dd685da29afd94c09b74f057e78c98326c8b4931b5bbe4e86bc42e0a2e0c8f2",
"format": 1
},
{
@@ -823,7 +823,7 @@
"name": "CHANGELOG.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec9612359cac38411b264cb53d67607a383a08d1a2bffc3ff84cdb1d9ad1de4c",
+ "chksum_sha256": "86fd0f752604f3fa70164f00acf0ad9e5d1567c6499701e555eeeedd59c6fbc7",
"format": 1
},
{
@@ -837,7 +837,7 @@
"name": "CHANGELOG.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "84b7a7e9f7b8280abe9151db53d4fc3235b37db19686030e8d8fd000513e41ad",
+ "chksum_sha256": "e8ca25b706ccb628b73cd623cc1720c34df09756bc716aa07827c161648207a1",
"format": 1
},
{
@@ -858,7 +858,7 @@
"name": "README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "df4f5e5e0c88eb6caf14a6b2d3916a5849ac18a2ee6c748d0276d1788d145911",
+ "chksum_sha256": "4a16caa53d97e1924daaabaf372ab085aba6fc95af3cca830d1eda04f22ae41d",
"format": 1
},
{
diff --git a/ansible_collections/community/hrobot/MANIFEST.json b/ansible_collections/community/hrobot/MANIFEST.json
index 1ac2e2da3..65cba09e0 100644
--- a/ansible_collections/community/hrobot/MANIFEST.json
+++ b/ansible_collections/community/hrobot/MANIFEST.json
@@ -2,7 +2,7 @@
"collection_info": {
"namespace": "community",
"name": "hrobot",
- "version": "1.9.2",
+ "version": "2.0.0",
"authors": [
"Felix Fontein (github.com/felixfontein)"
],
@@ -20,7 +20,9 @@
"BSD-2-Clause"
],
"license_file": null,
- "dependencies": {},
+ "dependencies": {
+ "community.library_inventory_filtering_v1": ">=1.0.0"
+ },
"repository": "https://github.com/ansible-collections/community.hrobot",
"documentation": "https://docs.ansible.com/ansible/devel/collections/community/hrobot/",
"homepage": "https://github.com/ansible-collections/community.hrobot",
@@ -30,7 +32,7 @@
"name": "FILES.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a5c77f86ec2889eb57623d0ccd7ffbae9635537c46dc4539324e8da92b7ddf27",
+ "chksum_sha256": "47a01d4394191e0a36c408e3add9b1a0434bfcf4fd39a7d11ba1d7b4cd2f39b8",
"format": 1
},
"format": 1
diff --git a/ansible_collections/community/hrobot/README.md b/ansible_collections/community/hrobot/README.md
index bdc481de9..8ef8be19b 100644
--- a/ansible_collections/community/hrobot/README.md
+++ b/ansible_collections/community/hrobot/README.md
@@ -15,7 +15,7 @@ Please note that this collection does **not** support Windows targets.
## Tested with Ansible
-Tested with the current Ansible 2.9, ansible-base 2.10, ansible-core 2.11, ansible-core 2.12, ansible-core 2.13, ansible-core 2.14, ansible-core 2.15, ansible-core 2.16, and ansible-core 2.17 releases and the current development version of ansible-core. Ansible versions before 2.9.10 are not supported.
+Tested with the current ansible-core 2.14, ansible-core 2.15, ansible-core 2.16, and ansible-core 2.17 releases and the current development version of ansible-core. Ansible versions before 2.9.10 are not supported.
## External requirements
diff --git a/ansible_collections/community/hrobot/changelogs/changelog.yaml b/ansible_collections/community/hrobot/changelogs/changelog.yaml
index eca36fc8f..1862813f3 100644
--- a/ansible_collections/community/hrobot/changelogs/changelog.yaml
+++ b/ansible_collections/community/hrobot/changelogs/changelog.yaml
@@ -290,3 +290,34 @@ releases:
- 1.9.2.yml
- 102-unsafe.yml
release_date: '2024-04-16'
+ 2.0.0:
+ changes:
+ breaking_changes:
+ - 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).
+ major_changes:
+ - 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).
+ minor_changes:
+ - 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).
+ release_summary: '...
+
+ '
+ removed_features:
+ - 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).
+ fragments:
+ - 2.0.0.yml
+ release_date: '2024-05-11'
diff --git a/ansible_collections/community/hrobot/meta/runtime.yml b/ansible_collections/community/hrobot/meta/runtime.yml
index 7ea33e019..77e68505d 100644
--- a/ansible_collections/community/hrobot/meta/runtime.yml
+++ b/ansible_collections/community/hrobot/meta/runtime.yml
@@ -3,7 +3,7 @@
# 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
-requires_ansible: '>=2.9.10'
+requires_ansible: '>=2.14.0'
action_groups:
robot:
- boot
diff --git a/ansible_collections/community/hrobot/plugins/inventory/robot.py b/ansible_collections/community/hrobot/plugins/inventory/robot.py
index 409c90992..675be7f2c 100644
--- a/ansible_collections/community/hrobot/plugins/inventory/robot.py
+++ b/ansible_collections/community/hrobot/plugins/inventory/robot.py
@@ -25,6 +25,7 @@ DOCUMENTATION = r"""
- ansible.builtin.constructed
- ansible.builtin.inventory_cache
- community.hrobot.robot
+ - community.library_inventory_filtering_v1.inventory_filter
notes:
- The O(hetzner_user) and O(hetzner_password) options can be templated.
options:
@@ -43,12 +44,13 @@ DOCUMENTATION = r"""
- A dictionary of filter value pairs.
- Available filters are listed here are keys of server like C(status) or C(server_ip).
- See U(https://robot.your-server.de/doc/webservice/en.html#get-server) for all values that can be used.
- - This option has been renamed from O(filters) to O(simple_filters) in community.hrobot 1.9.0.
- The old name can still be used until community.hrobot 2.0.0.
+ - This option used to be called O(filters) before community.hrobot 2.0.0. It has been renamed from
+ O(filters) to O(simple_filters) in community.hrobotdns 1.9.0, and the old name was still available
+ as an alias until community.hrobot 2.0.0. O(filters) is now used for something else.
type: dict
default: {}
- aliases:
- - filters
+ filters:
+ version_added: 2.0.0
"""
EXAMPLES = r"""
@@ -58,12 +60,18 @@ plugin: community.hrobot.robot
filters:
status: ready
-# Example showing encrypted credentials
+# Example showing encrypted credentials and using filters
# (This assumes that Mozilla sops was used to encrypt keys/hetzner.sops.yaml, which contains two values
# hetzner_username and hetzner_password. Needs the community.sops collection to decode that file.)
plugin: community.hrobot.robot
hetzner_user: '{{ (lookup("community.sops.sops", "keys/hetzner.sops.yaml") | from_yaml).hetzner_username }}'
hetzner_password: '{{ (lookup("community.sops.sops", "keys/hetzner.sops.yaml") | from_yaml).hetzner_password }}'
+filters:
+ # Accept all servers in FSN1-DC1 and FSN1-DC2
+ - include: >-
+ hrobot_dc in ["FSN1-DC1", "FSN1-DC2"]
+ # Exclude all servers that didn't match any of the above filters
+ - exclude: true
# Example using constructed features to create groups
plugin: community.hrobot.robot
@@ -86,6 +94,8 @@ from ansible.plugins.inventory import BaseInventoryPlugin, Constructable, Cachea
from ansible.template import Templar
from ansible.utils.display import Display
+from ansible_collections.community.library_inventory_filtering_v1.plugins.plugin_utils.inventory_filter import parse_filters, filter_host
+
from ansible_collections.community.hrobot.plugins.module_utils.robot import (
BASE_URL,
PluginException,
@@ -114,18 +124,10 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
def parse(self, inventory, loader, path, cache=True):
super(InventoryModule, self).parse(inventory, loader, path)
servers = {}
- orig_config = self._read_config_data(path)
+ self._read_config_data(path)
self.load_cache_plugin()
cache_key = self.get_cache_key(path)
- if 'filters' in orig_config:
- display.deprecated(
- 'The `filters` option of the community.hrobot.robot inventory plugin has been renamed to `simple_filters`. '
- 'The old name will stop working in community.hrobot 2.0.0.',
- collection_name='community.hrobot',
- version='2.0.0',
- )
-
self.templar = Templar(loader=loader)
# cache may be True or False at this point to indicate if the inventory is being refreshed
@@ -156,16 +158,26 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
self.populate(servers)
def populate(self, servers):
- filters = self.get_option('simple_filters')
+ simple_filters = self.get_option('simple_filters')
+ filters = parse_filters(self.get_option('filters'))
strict = self.get_option('strict')
server_lists = []
for server in servers:
s = server['server']
server_name = s.get('server_name') or s.get('server_ip') or str(s['server_number'])
- matched = self.filter(s, filters)
+ matched = self.filter(s, simple_filters)
if not matched:
continue
+ facts = {}
+ if 'server_ip' in s:
+ facts['ansible_host'] = make_unsafe(s['server_ip'])
+ for hostvar, hostval in s.items():
+ facts["{0}_{1}".format('hrobot', hostvar)] = make_unsafe(hostval)
+
+ if not filter_host(self, server_name, facts, filters):
+ continue
+
if server_name in server_lists:
display.warning('Two of your Hetzner servers use the same server name ({0}). '
'Please make sure that your server names are unique. '
@@ -174,10 +186,8 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
self.inventory.add_host(server_name)
server_lists.append(server_name)
- if 'server_ip' in s:
- self.inventory.set_variable(server_name, 'ansible_host', make_unsafe(s['server_ip']))
- for hostvar, hostval in s.items():
- self.inventory.set_variable(server_name, "{0}_{1}".format('hrobot', hostvar), make_unsafe(hostval))
+ for key, value in facts.items():
+ self.inventory.set_variable(server_name, key, value)
# Composed variables
server_vars = self.inventory.get_host(server_name).get_vars()
@@ -189,9 +199,9 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
# Create groups based on variable values and add the corresponding hosts to it
self._add_host_to_keyed_groups(self.get_option('keyed_groups'), server, server_name, strict=strict)
- def filter(self, server, filters):
+ def filter(self, server, simple_filters):
matched = True
- for key, value in filters.items():
+ for key, value in simple_filters.items():
if server.get(key) != value:
matched = False
break
diff --git a/ansible_collections/community/hrobot/tests/unit/plugins/inventory/test_robot.py b/ansible_collections/community/hrobot/tests/unit/plugins/inventory/test_robot.py
index c10524f7e..eb8c52a8f 100644
--- a/ansible_collections/community/hrobot/tests/unit/plugins/inventory/test_robot.py
+++ b/ansible_collections/community/hrobot/tests/unit/plugins/inventory/test_robot.py
@@ -63,6 +63,8 @@ def inventory():
def get_option(option):
if option == 'simple_filters':
return {}
+ if option == 'filters':
+ return []
if option == 'hetzner_user':
return 'test'
if option == 'hetzner_password':
diff --git a/ansible_collections/community/mongodb/CHANGELOG.rst b/ansible_collections/community/mongodb/CHANGELOG.rst
index efe8e7a47..6bb98a0a9 100644
--- a/ansible_collections/community/mongodb/CHANGELOG.rst
+++ b/ansible_collections/community/mongodb/CHANGELOG.rst
@@ -4,6 +4,19 @@ Community.MongoDB Release Notes
.. contents:: Topics
+v1.7.4:
+=========
+
+Release Summary
+----------------
+
+This release is a maintenance release.
+
+Minor Changes
+-------------
+
+- 644 - mongodb_shell - Add ssl/tls options.
+
v1.7.3:
=========
diff --git a/ansible_collections/community/mongodb/FILES.json b/ansible_collections/community/mongodb/FILES.json
index f94843a96..ababe90bd 100644
--- a/ansible_collections/community/mongodb/FILES.json
+++ b/ansible_collections/community/mongodb/FILES.json
@@ -95,7 +95,7 @@
"name": "changelogs/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d7e3cf154cb0134ac530a4ec411e69e5d21ed2d500e5bc219ddc983625779f64",
+ "chksum_sha256": "804197bdc9c22ac7d7217004da5b984dfaf3cc90193eb0c7c955e85ca7c6510f",
"format": 1
},
{
@@ -368,7 +368,7 @@
"name": "plugins/modules/mongodb_shell.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9ca34eb689335da81215f97904a77f42eac95406f01986ea61b36e3f71f2b963",
+ "chksum_sha256": "643fc68eecb01e46cc69b5a47212e6b24f8ec04e74e0849db1db4f8003da4ad1",
"format": 1
},
{
@@ -2370,7 +2370,7 @@
"name": "CHANGELOG.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dd8f971dbb162351148320dbed19aa7fb8e49aa683205224ea51defff77fe3f3",
+ "chksum_sha256": "32fd83c1f49e6ee9cc991c66b52c524a2816652658a1baeef5808f0ef6cfde9b",
"format": 1
},
{
@@ -2384,7 +2384,7 @@
"name": "README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "65a9319fb932c67923de4f992f3119feae296f85411b5cffb00aa04b93a44f29",
+ "chksum_sha256": "94362aca9a294e736fa71510ec537ca0db93c2018496d44a681abb0bc6fa6fd8",
"format": 1
},
{
diff --git a/ansible_collections/community/mongodb/MANIFEST.json b/ansible_collections/community/mongodb/MANIFEST.json
index aa6035a5e..c9ddd1e0d 100644
--- a/ansible_collections/community/mongodb/MANIFEST.json
+++ b/ansible_collections/community/mongodb/MANIFEST.json
@@ -2,7 +2,7 @@
"collection_info": {
"namespace": "community",
"name": "mongodb",
- "version": "1.7.3",
+ "version": "1.7.4",
"authors": [
"Ansible (https://github.com/ansible)",
"Rhys Campbell (https://github.com/rhysmeister)",
@@ -36,7 +36,7 @@
"name": "FILES.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "72e4c95bc97cb1a5e68ca35b8c8dffa1bda536bae32ca66bdaa676747ba0244f",
+ "chksum_sha256": "0c106846fbfff63ae2d1cc38e3528523a6a8b63a5e7662c7732c71a251d97a92",
"format": 1
},
"format": 1
diff --git a/ansible_collections/community/mongodb/README.md b/ansible_collections/community/mongodb/README.md
index 66e50daef..6ce5a3a41 100644
--- a/ansible_collections/community/mongodb/README.md
+++ b/ansible_collections/community/mongodb/README.md
@@ -145,6 +145,7 @@ cd git/ansible_collections/community
```bash
git clone https://github.com/ansible-collections/community.mongodb.git ./mongodb
git clone https://github.com/ansible-collections/community.general.git ./general
+git clone https://github.com/ansible-collections/community.crypto.git ./crypto
```
* Create and activate a virtual environment.
diff --git a/ansible_collections/community/mongodb/changelogs/changelog.yaml b/ansible_collections/community/mongodb/changelogs/changelog.yaml
index 641f7c62f..26cac23f0 100644
--- a/ansible_collections/community/mongodb/changelogs/changelog.yaml
+++ b/ansible_collections/community/mongodb/changelogs/changelog.yaml
@@ -335,3 +335,8 @@ releases:
This release is a maintenance release.
bugfixes:
- 641 - mongodb_mongod - Add test condition for storage option in mongod.conf template file.
+ 1.7.4:
+ release_summary: |
+ This release is a maintenance release.
+ minor_changes:
+ - 644 - mongodb_shell - Add ssl/tls options.
diff --git a/ansible_collections/community/mongodb/plugins/modules/mongodb_shell.py b/ansible_collections/community/mongodb/plugins/modules/mongodb_shell.py
index 618cafae9..b9c9462b0 100644
--- a/ansible_collections/community/mongodb/plugins/modules/mongodb_shell.py
+++ b/ansible_collections/community/mongodb/plugins/modules/mongodb_shell.py
@@ -24,6 +24,7 @@ description:
extends_documentation_fragment:
- community.mongodb.login_options
+ - community.mongodb.ssl_options
options:
mongo_cmd:
@@ -195,7 +196,7 @@ import os
__metaclass__ = type
from ansible_collections.community.mongodb.plugins.module_utils.mongodb_common import (
- mongodb_common_argument_spec
+ load_mongocnf, mongodb_common_argument_spec
)
from ansible_collections.community.mongodb.plugins.module_utils.mongodb_shell import (
@@ -208,7 +209,7 @@ from ansible_collections.community.mongodb.plugins.module_utils.mongodb_shell im
def main():
- argument_spec = mongodb_common_argument_spec(ssl_options=False)
+ argument_spec = mongodb_common_argument_spec(ssl_options=True)
argument_spec.update(
mongo_cmd=dict(type='str', default="mongosh"),
file=dict(type='str', required=False),
@@ -267,16 +268,34 @@ def main():
omit = module.params['omit']
+ username = module.params['login_user']
+ password = module.params['login_password']
+
+ credentials = load_mongocnf()
+ if credentials:
+ if not username:
+ username = credentials['user']
+ if not password:
+ password = credentials['password']
+
args = add_arg_to_cmd(args, "--host", module.params['login_host'], omit=omit)
args = add_arg_to_cmd(args, "--port", module.params['login_port'], omit=omit)
- args = add_arg_to_cmd(args, "--username", module.params['login_user'], omit=omit)
- args = add_arg_to_cmd(args, "--password", module.params['login_password'], omit=omit)
+ args = add_arg_to_cmd(args, "--username", username, omit=omit)
+ args = add_arg_to_cmd(args, "--password", password, omit=omit)
args = add_arg_to_cmd(args, "--authenticationDatabase", module.params['login_database'], omit=omit)
+ args = add_arg_to_cmd(args, "--authenticationMechanism", module.params['auth_mechanism'], omit=omit)
args = add_arg_to_cmd(args, "--eval", module.params['eval'], omit=omit)
args = add_arg_to_cmd(args, "--nodb", None, module.params['nodb'], omit=omit)
args = add_arg_to_cmd(args, "--norc", None, module.params['norc'], omit=omit)
args = add_arg_to_cmd(args, "--quiet", None, module.params['quiet'], omit=omit)
+ args = add_arg_to_cmd(args, "--tls", None, module.params['ssl'], omit=omit)
+ args = add_arg_to_cmd(args, "--tlsAllowInvalidCertificates", None, module.params['ssl_cert_reqs'] in ('CERT_NONE', 'CERT_OPTIONAL'), omit=omit)
+ args = add_arg_to_cmd(args, "--tlsCAFile", module.params['ssl_ca_certs'], omit=omit)
+ args = add_arg_to_cmd(args, "--tlsCRLFile", module.params['ssl_crlfile'], omit=omit)
+ args = add_arg_to_cmd(args, "--tlsCertificateKeyFile", module.params['ssl_keyfile'], omit=omit)
+ args = add_arg_to_cmd(args, "--tlsCertificateKeyFilePassword", module.params['ssl_pem_passphrase'], omit=omit)
+
additional_args = module.params['additional_args']
if additional_args is not None:
for key, value in additional_args.items():
diff --git a/ansible_collections/community/okd/.config/ansible-lint.yml b/ansible_collections/community/okd/.config/ansible-lint.yml
new file mode 100644
index 000000000..7c92b22ab
--- /dev/null
+++ b/ansible_collections/community/okd/.config/ansible-lint.yml
@@ -0,0 +1,5 @@
+---
+profile: production
+exclude_paths:
+ - molecule
+ - tests/sanity
diff --git a/ansible_collections/community/okd/.github/patchback.yml b/ansible_collections/community/okd/.github/patchback.yml
new file mode 100644
index 000000000..113fc5294
--- /dev/null
+++ b/ansible_collections/community/okd/.github/patchback.yml
@@ -0,0 +1,4 @@
+---
+backport_branch_prefix: patchback/backports/
+backport_label_prefix: backport-
+target_branch_prefix: stable-
diff --git a/ansible_collections/community/okd/.github/settings.yml b/ansible_collections/community/okd/.github/settings.yml
new file mode 100644
index 000000000..35f78e110
--- /dev/null
+++ b/ansible_collections/community/okd/.github/settings.yml
@@ -0,0 +1,6 @@
+---
+# DO NOT MODIFY
+
+# Settings: https://probot.github.io/apps/settings/
+# Pull settings from https://github.com/ansible-collections/.github/blob/master/.github/settings.yml
+_extends: ".github"
diff --git a/ansible_collections/community/okd/.github/stale.yml b/ansible_collections/community/okd/.github/stale.yml
new file mode 100644
index 000000000..230cf78a6
--- /dev/null
+++ b/ansible_collections/community/okd/.github/stale.yml
@@ -0,0 +1,60 @@
+---
+# Configuration for probot-stale - https://github.com/probot/stale
+
+# Number of days of inactivity before an Issue or Pull Request becomes stale
+daysUntilStale: 90
+
+# Number of days of inactivity before an Issue or Pull Request with the stale
+# label is closed. Set to false to disable. If disabled, issues still need to be
+# closed manually, but will remain marked as stale.
+daysUntilClose: 30
+
+# Only issues or pull requests with all of these labels are check if stale.
+# Defaults to `[]` (disabled)
+onlyLabels: []
+
+# Issues or Pull Requests with these labels will never be considered stale. Set
+# to `[]` to disable
+exemptLabels:
+ - security
+ - planned
+ - priority/critical
+ - lifecycle/frozen
+ - verified
+
+# Set to true to ignore issues in a project (defaults to false)
+exemptProjects: false
+
+# Set to true to ignore issues in a milestone (defaults to false)
+exemptMilestones: true
+
+# Set to true to ignore issues with an assignee (defaults to false)
+exemptAssignees: false
+
+# Label to use when marking as stale
+staleLabel: lifecycle/stale
+
+# Limit the number of actions per hour, from 1-30. Default is 30
+limitPerRun: 30
+
+pulls:
+ markComment: |-
+ PRs go stale after 90 days of inactivity.
+ If there is no further activity, the PR will be closed in another 30 days.
+
+ unmarkComment: >-
+ This pull request is no longer stale.
+
+ closeComment: >-
+ This pull request has been closed due to inactivity.
+
+issues:
+ markComment: |-
+ Issues go stale after 90 days of inactivity.
+ If there is no further activity, the issue will be closed in another 30 days.
+
+ unmarkComment: >-
+ This issue is no longer stale.
+
+ closeComment: >-
+ This issue has been closed due to inactivity.
diff --git a/ansible_collections/community/okd/.github/workflows/changelog.yml b/ansible_collections/community/okd/.github/workflows/changelog.yml
new file mode 100644
index 000000000..569e334fe
--- /dev/null
+++ b/ansible_collections/community/okd/.github/workflows/changelog.yml
@@ -0,0 +1,23 @@
+---
+name: Changelog
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+
+on:
+ pull_request:
+ types:
+ - opened
+ - reopened
+ - labeled
+ - unlabeled
+ - synchronize
+ branches:
+ - main
+ - stable-*
+ tags:
+ - '*'
+
+jobs:
+ changelog:
+ uses: ansible-network/github_actions/.github/workflows/changelog.yml@main
diff --git a/ansible_collections/community/okd/.github/workflows/linters.yml b/ansible_collections/community/okd/.github/workflows/linters.yml
new file mode 100644
index 000000000..11258aaf3
--- /dev/null
+++ b/ansible_collections/community/okd/.github/workflows/linters.yml
@@ -0,0 +1,29 @@
+---
+name: Linters
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+
+on:
+ pull_request:
+ types:
+ - opened
+ - reopened
+ - labeled
+ - unlabeled
+ - synchronize
+ 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: ansible-network/github_actions/.github/actions/checkout_dependency@main
+
+ - name: Run ansible-lint
+ uses: ansible/ansible-lint@v6.21.0
diff --git a/ansible_collections/community/okd/.github/workflows/sanity-tests.yml b/ansible_collections/community/okd/.github/workflows/sanity-tests.yml
new file mode 100644
index 000000000..49359de9b
--- /dev/null
+++ b/ansible_collections/community/okd/.github/workflows/sanity-tests.yml
@@ -0,0 +1,23 @@
+---
+name: Sanity tests
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+
+on:
+ pull_request:
+ types:
+ - opened
+ - reopened
+ - synchronize
+ branches:
+ - main
+ - stable-*
+ tags:
+ - '*'
+
+jobs:
+ sanity:
+ uses: ansible-network/github_actions/.github/workflows/sanity.yml@main
+ with:
+ collection_pre_install: '-r source/tests/sanity/requirements.yml'
diff --git a/ansible_collections/community/okd/.github/workflows/unit-tests.yml b/ansible_collections/community/okd/.github/workflows/unit-tests.yml
new file mode 100644
index 000000000..d3aa3b0ce
--- /dev/null
+++ b/ansible_collections/community/okd/.github/workflows/unit-tests.yml
@@ -0,0 +1,21 @@
+---
+name: Unit tests
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+
+on:
+ pull_request:
+ types:
+ - opened
+ - reopened
+ - synchronize
+ branches:
+ - main
+ - stable-*
+ tags:
+ - '*'
+
+jobs:
+ unit-source:
+ uses: ansible-network/github_actions/.github/workflows/unit_source.yml@main
diff --git a/ansible_collections/community/okd/.yamllint b/ansible_collections/community/okd/.yamllint
index 882767605..ac5297cdf 100644
--- a/ansible_collections/community/okd/.yamllint
+++ b/ansible_collections/community/okd/.yamllint
@@ -1,33 +1,15 @@
---
-# Based on ansible-lint config
-extends: default
-
rules:
- braces:
- max-spaces-inside: 1
- level: error
- brackets:
- max-spaces-inside: 1
- level: error
- colons:
- max-spaces-after: -1
- level: error
- commas:
- max-spaces-after: -1
- level: error
- comments: disable
- comments-indentation: disable
- document-start: disable
- empty-lines:
- max: 3
- level: error
- hyphens:
- level: error
- indentation: disable
- key-duplicates: enable
- line-length: disable
- new-line-at-end-of-file: disable
- new-lines:
- type: unix
- trailing-spaces: disable
- truthy: disable
+ indentation:
+ ignore: &default_ignores |
+ # automatically generated, we can't control it
+ changelogs/changelog.yaml
+ # Will be gone when we release and automatically reformatted
+ changelogs/fragments/*
+ document-start:
+ ignore: *default_ignores
+ line-length:
+ ignore: *default_ignores
+ max: 160
+
+ignore-from-file: .gitignore
diff --git a/ansible_collections/community/okd/CHANGELOG.rst b/ansible_collections/community/okd/CHANGELOG.rst
index b86a7c409..254bf5393 100644
--- a/ansible_collections/community/okd/CHANGELOG.rst
+++ b/ansible_collections/community/okd/CHANGELOG.rst
@@ -5,6 +5,34 @@ OKD Collection Release Notes
.. contents:: Topics
+v3.0.1
+======
+
+Release Summary
+---------------
+
+This patch release fixes an issue in building the downstream collection.
+
+
+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. It also deprecates ``openshift`` inventory plugin.
+
+Breaking Changes / Porting Guide
+--------------------------------
+
+- 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).
+
+Deprecated Features
+-------------------
+
+- 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).
+
v2.3.0
======
diff --git a/ansible_collections/community/okd/FILES.json b/ansible_collections/community/okd/FILES.json
index f4086aab1..de9bf3950 100644
--- a/ansible_collections/community/okd/FILES.json
+++ b/ansible_collections/community/okd/FILES.json
@@ -8,570 +8,605 @@
"format": 1
},
{
- "name": ".yamllint",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5845e18e9f23155f423207df9abac970aed687c638620bc2c9ee06706191054b",
- "format": 1
- },
- {
- "name": "tests",
+ "name": ".config",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/config.yml",
+ "name": ".config/ansible-lint.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9a009a349eaaf78c93ff56072d2ef171937bdb884e4976592ab5aaa9c68e1044",
+ "chksum_sha256": "2bbd9eb3d8f8d6af779720000dc297955b780ab053807e2dfc5a59f24707b530",
"format": 1
},
{
- "name": "tests/unit",
+ "name": ".github",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/requirements.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8004a972c3d5c274d8c808e8d8afe03b9aca8af8eebf3df4298f114d8008b754",
- "format": 1
- },
- {
- "name": "tests/unit/plugins",
+ "name": ".github/workflows",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/plugins/module_utils",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": ".github/workflows/changelog.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "859dc36574b2741d827d47c03bdc725646c486e8c3c7c975f7bb2e29c750ca41",
"format": 1
},
{
- "name": "tests/unit/plugins/module_utils/test_openshift_docker_image.py",
+ "name": ".github/workflows/linters.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2645a4d02f3adc9e4bbb8b69ecb9b327836c142d1115f616c2e0eb05f0414299",
+ "chksum_sha256": "4e72e9b4d746793d9b2766bac960c2535db37061613792c0559113415e7ac196",
"format": 1
},
{
- "name": "tests/unit/plugins/module_utils/test_ldap_dn.py",
+ "name": ".github/workflows/sanity-tests.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5e692237cc900dce4c6bd3a1512c4027e6bb2c0a23e5d473a55c9137751c3559",
+ "chksum_sha256": "e1c58db0639ceee1498911aa4c265166f1ad510a09567bc9a06fe7bd0b210619",
"format": 1
},
{
- "name": "tests/unit/plugins/module_utils/test_ldap_sync_config.py",
+ "name": ".github/workflows/unit-tests.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d1647944d9370d05aedc63b115f427d037a3354f670b45e94bb3f4f4f95b162f",
+ "chksum_sha256": "a774d39eadf33235ba9490d9bfa69be9659533c18be73e75212fa11084bad4d2",
"format": 1
},
{
- "name": "tests/unit/plugins/modules",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": ".github/patchback.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ed69f87ea46171cb574fb77dc74fdbd7a269d4cad8d5ba6494d64d99842ef8e4",
"format": 1
},
{
- "name": "tests/unit/plugins/modules/test_openshift_adm_migrate_template_instances.py",
+ "name": ".github/settings.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4c426c87d28313524cbd378f917a2d70242f333571f942d44bc9bf8c7e591586",
+ "chksum_sha256": "bec830af2dc0266fc961c9c47bff160476c32878720cd1d7902581ec30a15c18",
"format": 1
},
{
- "name": "tests/sanity",
+ "name": ".github/stale.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "923b49f6fb8b325ea890d05a42537b3f9c5aaf26b64a704c0fef4b696aa6a4bb",
+ "format": 1
+ },
+ {
+ "name": "changelogs",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/sanity/ignore-2.14.txt",
+ "name": "changelogs/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "43bc048d24e8dd8fca8052b6135daaf59207e462f72cb9848f65de9c6e09552c",
+ "chksum_sha256": "dc1cb3339cbc9332acb6d7e964b9deaddaf6b371bd954d50376edb07389be62d",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.10.txt",
+ "name": "changelogs/config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ba2285dad70183ce56e9d43ed97d4b7a1b12e7cdd3f4e5856fb3cf380148a5ee",
+ "chksum_sha256": "77ecb61675531e89ac5c09471a86ca6fe440167361fb6d42e30b8208c2514809",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.13.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "43bc048d24e8dd8fca8052b6135daaf59207e462f72cb9848f65de9c6e09552c",
+ "name": "ci",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/sanity/ignore-2.9.txt",
+ "name": "ci/Dockerfile",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cf94385a1d8a2b51f40f88879b59922c8a8b07b8f1e0ac511a2454e257361995",
+ "chksum_sha256": "10c6a10838ba7e78ec6b0782d45217311b7faf7c80d466c9e23a52ac9447efa0",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.12.txt",
+ "name": "ci/doc_fragment_modules.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "43bc048d24e8dd8fca8052b6135daaf59207e462f72cb9848f65de9c6e09552c",
+ "chksum_sha256": "e5f5e24396a2cc86faedf6d0b7a3835db06bbe6fc7b534018ed85ebecfa39e09",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.11.txt",
+ "name": "ci/downstream.sh",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dc0294c142585d8904331fd57755efc876e592ce8242e42e1159bcfddd4adbba",
+ "chksum_sha256": "acc4c04397c247ae716e133f9df25c8a301b606416425a6fdbf191e096ab76b0",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.15.txt",
+ "name": "ci/downstream_fragments.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "43bc048d24e8dd8fca8052b6135daaf59207e462f72cb9848f65de9c6e09552c",
+ "chksum_sha256": "9815e2aa84aef5d396fd07ddb371fa87362ade6fbe72d829e4d5983abe8af453",
"format": 1
},
{
- "name": "README.md",
+ "name": "ci/incluster_integration.sh",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a49ac5f1fa3cdb032a5274e9d0d8a8fadcc5dd3ee1a0d3f872ca969a22be3056",
+ "chksum_sha256": "012ffb20a006094a4e8a00ead7947a196c477c4eb071a1dad5ffe42f509935e1",
"format": 1
},
{
- "name": "changelogs",
+ "name": "docs",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "changelogs/changelog.yaml",
+ "name": "docs/ansible_turbo_mode.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "36a4108575c00ad25e2774bcae35c32e4022d8d1b563ed72e536ec796b22b46f",
+ "chksum_sha256": "a9bcd000c20de1d1ad35f5516f4fdffce07c8e28a5ebee572629a3b9cb867152",
"format": 1
},
{
- "name": "changelogs/config.yaml",
+ "name": "docs/community.okd.k8s_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "46bf50de40f3abb6bc0497f3b188dba66c295a2c764337abf4dda636644cb0d9",
+ "chksum_sha256": "07204d20c2e6d6c65841abed30d0801ddb26112e74ca544f364781feda2c5008",
"format": 1
},
{
- "name": "changelogs/.plugin-cache.yaml",
+ "name": "docs/community.okd.oc_connection.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e9fb32d9dfa89439d04e50697ea1e8a5c77a2411dd6a061d2eddb5e328753abf",
+ "chksum_sha256": "92709a3843099a4df82f3fb7978b6dc45c9a607387e490dbeaa37d68e2969b13",
"format": 1
},
{
- "name": "CONTRIBUTING.md",
+ "name": "docs/community.okd.openshift_adm_groups_sync_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4156016c23606d288b98c4fa0eafc6afe1cf28e695fb5a267bcc3d337a7bfef0",
+ "chksum_sha256": "11db9878e4227634e58b1512dee0b3893191edec658adb65691756c16f5174e8",
"format": 1
},
{
- "name": "requirements.txt",
+ "name": "docs/community.okd.openshift_adm_migrate_template_instances_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d20fa49248fb968b70381346d2b2f6195e19dc1ddded06856bc4aefa6a25d431",
+ "chksum_sha256": "c91df00cdec670c92d452cc7d10abaebd705756b7bb643c767c2309a22bd6859",
"format": 1
},
{
- "name": "meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "docs/community.okd.openshift_adm_prune_auth_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f16dbc021ee73369585efa88fd7d56bf02898317e8602f303eab9d6601d4ddf0",
"format": 1
},
{
- "name": "meta/runtime.yml",
+ "name": "docs/community.okd.openshift_adm_prune_builds_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "369f3c5a13d3d8400d0f662ec26d211c4e135f1b8b661c66346d899ad371b534",
+ "chksum_sha256": "b0662928fe5aff419369743708efe29cb0e951c19e41ab7bb26dc23969cf5d1d",
"format": 1
},
{
- "name": ".gitignore",
+ "name": "docs/community.okd.openshift_adm_prune_deployments_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8344abb7aafbdb654f0c88532af7ab557dad7a6a7cba60f4834f33c2a1f8524f",
+ "chksum_sha256": "7e4781b3a321298041396560a8764bcbfb8ddbd3c0bac20a54fb5cb046e3c4d8",
"format": 1
},
{
- "name": "test-requirements.txt",
+ "name": "docs/community.okd.openshift_adm_prune_images_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "34db46c861b289148eb3ebff5ff7786aa091eec38c0f3d1606bf2e3d9f030b94",
+ "chksum_sha256": "d273a042aaabf92298b5a38f887e0593047472314afe36f831f9a9aa3989ced5",
"format": 1
},
{
- "name": "codecov.yml",
+ "name": "docs/community.okd.openshift_auth_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "caa848a2e02be5014890c5cbc7727e9a00d40394637c90886eb813d60f82c9c3",
+ "chksum_sha256": "d7e0110a88d5e2d1033f803cfef7ab821eef3fd2aeba9ab3d16203f336f39394",
"format": 1
},
{
- "name": "setup.cfg",
+ "name": "docs/community.okd.openshift_build_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "125fefc5c9470b8e72cffc06937c30e2bc073f4ca6c1a593f131a6e1fd76edf2",
+ "chksum_sha256": "50c1219f5524d60a4b46bc58c6df30d8af7b6e6ecc20fd4d15cf3e0fc352c05e",
"format": 1
},
{
- "name": "OWNERS",
+ "name": "docs/community.okd.openshift_import_image_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "771ebefb6c2b0154bf043cc537cc55b8421ddd4058248b00a62cdc9b190131da",
+ "chksum_sha256": "889c62212325e583f2a36fb0dd66f392d6bd4058af089c1f829f6f97972577d1",
"format": 1
},
{
- "name": "LICENSE",
+ "name": "docs/community.okd.openshift_inventory.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8b1ba204bb69a0ade2bfcf65ef294a920f6bb361b317dba43c7ef29d96332b9b",
+ "chksum_sha256": "e5df6651617abc50c0b054c34e57601bc7ea889167800658b1013d61beb236e2",
"format": 1
},
{
- "name": "OWNERS_ALIASES",
+ "name": "docs/community.okd.openshift_process_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fee153ef8daa4ed6170434daf598b3efdcaf80db39e5b4ef9f2ab8cd4f8f4c30",
+ "chksum_sha256": "ca7f93a6fa0ac3d38f982076ef491438338bb7face86bede1799de9bdb66175a",
"format": 1
},
{
- "name": "plugins",
+ "name": "docs/community.okd.openshift_registry_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e980ae3c9f683a90b9cfbb79aa36cb345a262a16fd4d2079e0147e9124d376e3",
+ "format": 1
+ },
+ {
+ "name": "docs/community.okd.openshift_route_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e23a6df2370bc8bebc1e77dd70ac239d15ade8cc1eedb0c3201692d2218f20d0",
+ "format": 1
+ },
+ {
+ "name": "meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/doc_fragments",
+ "name": "meta/runtime.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "cc700e426626ae08f404ae2fe82224e9dd7e98a7e1a3ab91823fd7cf3930feac",
+ "format": 1
+ },
+ {
+ "name": "molecule",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils",
+ "name": "molecule/default",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/openshift_common.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cbbbbe8693629763781768801033674d80fdcc5ae2b5d19eb35922bc50eee8ed",
+ "name": "molecule/default/files",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/openshift_registry.py",
+ "name": "molecule/default/files/crd-resource.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a2a40dbcae3074de050c5d9be2d1e4352cf0698ad8385fd81c03ce73805a6e93",
+ "chksum_sha256": "4921362ac3c4afac5f42ebb90b37bcb75e1fe20929bb0e45d0df4c190d28f577",
"format": 1
},
{
- "name": "plugins/module_utils/openshift_adm_prune_deployments.py",
+ "name": "molecule/default/files/example.env",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8fa9b77a5d2326893c1ecd9841d4b9e30e3e7bd788d7455efcbad45d010683f5",
+ "chksum_sha256": "3701367ea0a79158d476e168c1b1e64639f703da926e63045cba5cfdbb6c3576",
"format": 1
},
{
- "name": "plugins/module_utils/openshift_images_common.py",
+ "name": "molecule/default/files/kuard-extra-property.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d61fbb7ced206c7cbde4a610e643aa4a824e7856648ba598c5f630978bbafdaa",
+ "chksum_sha256": "27a06de7ca760698dc1d3c46ef12e40e214ae319a791a3965806b30adca06de0",
"format": 1
},
{
- "name": "plugins/module_utils/openshift_process.py",
+ "name": "molecule/default/files/kuard-invalid-type.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a7f5b99e0f07aba90fd2744f6311c82a59698424e5904ceda7b2e0eaa3e080af",
+ "chksum_sha256": "c0e8aa083eecb5c4d92108af83f9a2c931a2e5bbb766af4792adc4fb9fd9d32d",
"format": 1
},
{
- "name": "plugins/module_utils/openshift_builds.py",
+ "name": "molecule/default/files/nginx.env",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f7b18ce9225cb1fb06a970a591662ab9cd1c3015f18bae86570e4f2345b0449e",
+ "chksum_sha256": "a68c2914576119a809943116ce0050ca221c5b8f3a6722fa6abbf15dababde5f",
"format": 1
},
{
- "name": "plugins/module_utils/openshift_ldap.py",
+ "name": "molecule/default/files/pod-template.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "894c0aa5a40d6c227b73cb83c3e4217a6ed081cda9c3a89a0606b66a65b52287",
+ "chksum_sha256": "255bfc8684edf514bac8d4da1ca2c53c26ef3cf190d68e9cbdf7423254e9407e",
"format": 1
},
{
- "name": "plugins/module_utils/openshift_import_image.py",
+ "name": "molecule/default/files/setup-crd.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "47819d3ab99b61593b5db881b6d93855caf45ae3df71b77ad7b6528a1b51bbbd",
+ "chksum_sha256": "509878fff22a19715f1c491930eefd23430c0f571716b463c3ab9a754d0fb250",
"format": 1
},
{
- "name": "plugins/module_utils/k8s.py",
+ "name": "molecule/default/files/simple-template.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "386788c253525ffe4350e4b6fbbc1380e03f703bfe6fa3ca4506615e93b9173d",
+ "chksum_sha256": "4df5821a40d53323c398a786ffa81cbdb22aa759f54ffdf98d9d3f4e6f119604",
"format": 1
},
{
- "name": "plugins/module_utils/openshift_adm_prune_images.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cd027fb0716b5c92ac6176f6a46236c0379e9680cd9d743c5fd40617461502f8",
+ "name": "molecule/default/roles",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/openshift_adm_prune_auth.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "76a26d3ab75396a28fc546c19b1a8e215aa8a5fd59fc4491539e2ef6d5537d8c",
+ "name": "molecule/default/roles/openshift_adm_groups",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/openshift_docker_image.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d23dfbad39579c35a2a39bbf0e18e2e0e8bc3a0122c37d0fc87c2ea125f5af2c",
+ "name": "molecule/default/roles/openshift_adm_groups/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/openshift_groups.py",
+ "name": "molecule/default/roles/openshift_adm_groups/defaults/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f583086177b63a87fca75c3d41d1bce4bc4cecaf68c60a9008ca1ecb31d1c38a",
+ "chksum_sha256": "1bd380f6c0cdf0c2b25e6bf27e4304566f6b9efbbeaf15da3847a9744d685a72",
"format": 1
},
{
- "name": "plugins/connection",
+ "name": "molecule/default/roles/openshift_adm_groups/library",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/connection/oc.py",
+ "name": "molecule/default/roles/openshift_adm_groups/library/openshift_ldap_entry.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cb192532153b1625ec97437f5ac7177cfa78d8cba5c5eaa4633fab63ba54ca09",
+ "chksum_sha256": "8e0d7d997ba74938fef19fead2cf1d2151644ad999e2285b0d769c89804abf5e",
"format": 1
},
{
- "name": "plugins/inventory",
+ "name": "molecule/default/roles/openshift_adm_groups/library/openshift_ldap_entry_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ccbf989315dfac69f1a62fb08067f4359e5b2a13d33baa9fba4ccbcbb8ad7f47",
+ "format": 1
+ },
+ {
+ "name": "molecule/default/roles/openshift_adm_groups/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/inventory/openshift.py",
+ "name": "molecule/default/roles/openshift_adm_groups/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bb798a479803548cc8eeddb6fdb565d1b0f7b3222af445c42447247203953849",
+ "chksum_sha256": "8d57e1f764ed7af7cf34d0b039ef97eb206fd846d31025ac08ddefa855a83204",
"format": 1
},
{
- "name": "plugins/modules",
+ "name": "molecule/default/roles/openshift_adm_groups/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/openshift_adm_groups_sync.py",
+ "name": "molecule/default/roles/openshift_adm_groups/tasks/activeDirectory.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "80197c296c50931b3b0ed2a4841dd46ab98b6d0de3c923ddc8d60abd49cdecee",
+ "chksum_sha256": "522791250e95623a0750d13e335db874f3afc888dd513b234d4de0553ba0bcf8",
"format": 1
},
{
- "name": "plugins/modules/openshift_registry_info.py",
+ "name": "molecule/default/roles/openshift_adm_groups/tasks/augmentedActiveDirectory.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "abf945aba0bb5d769783c7e3ee1b19c2e4cd4f9e932a51e88dcb298a664cc677",
+ "chksum_sha256": "9685339b4984a7d72f2fcf56e2f444298f789539243205d70288a9211c52d9f9",
"format": 1
},
{
- "name": "plugins/modules/openshift_auth.py",
+ "name": "molecule/default/roles/openshift_adm_groups/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a293bf87c5f13c610fd2e6032a76e2c813bfdae4953c7b33e2c6cbf3bf8249e1",
+ "chksum_sha256": "dbf4a75120762ad728524e355345807111fb02dd4be9496ee5ecd00b5a7a9fc2",
"format": 1
},
{
- "name": "plugins/modules/openshift_route.py",
+ "name": "molecule/default/roles/openshift_adm_groups/tasks/python-ldap-not-installed.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "78e6b48f0dcc76cecc8c0272768cfdeab62364b3658984fdddf888492f61dd03",
+ "chksum_sha256": "243678c2bbdca70ab4064027e32ad81c1e50dc59e6af595a9fdf29c789487322",
"format": 1
},
{
- "name": "plugins/modules/openshift_build.py",
+ "name": "molecule/default/roles/openshift_adm_groups/tasks/rfc2307.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a0aff179625071a085d0d9014cfa8999dceb96ba2394db5f33991eca1a9c85c5",
+ "chksum_sha256": "1bed08f558010eac88ba66c291c828866843784939e12d4fbc0cb55593bb2e90",
"format": 1
},
{
- "name": "plugins/modules/openshift_adm_prune_deployments.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9dc9dcfce2107deecd3da2144f0dee455a442afcd04428c042bd48d598978bd2",
+ "name": "molecule/default/roles/openshift_adm_groups/templates",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/openshift_process.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "271370fe6c7eba007bd282d4bea738100278b4294df88d55b69f951309867a4e",
+ "name": "molecule/default/roles/openshift_adm_groups/templates/ad",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/openshift_import_image.py",
+ "name": "molecule/default/roles/openshift_adm_groups/templates/ad/definition.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dc18021e7be860b0accbe89fc51e2de1ca03938bb159907ba45558527f808c2f",
+ "chksum_sha256": "f59a7ee4f37de0040f293b615b45092f5bc9fb36f832d81ea6f0a7155bb2c1bd",
"format": 1
},
{
- "name": "plugins/modules/k8s.py",
+ "name": "molecule/default/roles/openshift_adm_groups/templates/ad/sync-config.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ffca7a5e4ed3d2122106a601b511589507b99ab65a138e4c912dcd76fcb2d430",
+ "chksum_sha256": "fef496b8ba026e34cdef374f373a15948db2bf6147bff5eb4ebdba4d1b3a4381",
"format": 1
},
{
- "name": "plugins/modules/openshift_adm_prune_images.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c1f6d6e041d08ccd548a812c6bee4a972b260ebb86dbe35783140001c9bea681",
+ "name": "molecule/default/roles/openshift_adm_groups/templates/augmented-ad",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/openshift_adm_prune_auth.py",
+ "name": "molecule/default/roles/openshift_adm_groups/templates/augmented-ad/definition.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "63c667799f92fdf025b577e2a6a3c84220389e35d357d95177f7acdb773d3da2",
+ "chksum_sha256": "a2db659cc8d7467e4d9e78029027d6fff6cc1fd38e54c6ca954a9a64633470d0",
"format": 1
},
{
- "name": "plugins/modules/openshift_adm_prune_builds.py",
+ "name": "molecule/default/roles/openshift_adm_groups/templates/augmented-ad/sync-config.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d40236b25580fa9fb242d42b43304865f51fceef82d6e1eb0ca158cf18a6253e",
+ "chksum_sha256": "76c20cd498ced5c2417a71611b35bde1b22b537fd106b5d8fecf1b896d7d5074",
"format": 1
},
{
- "name": "plugins/modules/openshift_adm_migrate_template_instances.py",
+ "name": "molecule/default/roles/openshift_adm_groups/templates/rfc2307",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "molecule/default/roles/openshift_adm_groups/templates/rfc2307/definition.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0f6f0fd8d617700bdb22953555bb6fe2dd7dbe9c297264cf191cfca651dbb0b4",
+ "chksum_sha256": "5e2d7b8287dd1b1ad0067eb8a38d282ff43f95e3a91c3778b86205a14988b434",
"format": 1
},
{
- "name": "Makefile",
+ "name": "molecule/default/roles/openshift_adm_groups/templates/rfc2307/sync-config.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "afa91ff62ed42d4b0fb73fa47899a01cde478809866d99c63787130074d5a039",
+ "chksum_sha256": "64cdf5017cb257f3b26d7eb858c8295313684b1147f0baee3f657fc3dc36c1f9",
"format": 1
},
{
- "name": "molecule",
+ "name": "molecule/default/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "molecule/default",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "molecule/default/tasks/openshift_adm_prune_auth_clusterroles.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "cf0ce2145e226c480622e9166a3f3792948f8ab671dfc71b49fd8a334ce7db36",
"format": 1
},
{
- "name": "molecule/default/prepare.yml",
+ "name": "molecule/default/tasks/openshift_adm_prune_auth_roles.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d9765b6cd95ab121281ca53b24f5a0954b211801ca070aa9402f746e593195df",
+ "chksum_sha256": "503cbc3b57838463568fc4d92a5cdf273eefe94d3585d8ca8c095385a68fc7e6",
"format": 1
},
{
- "name": "molecule/default/README.md",
+ "name": "molecule/default/tasks/openshift_adm_prune_deployments.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75d6935060001109bea00ffcf6d289b29e7aa6afeaba2e1e1b85d767062f4da8",
+ "chksum_sha256": "9f279837a7539985a4663f0522186d704675c4c55fc8145f1c4e7c6905fe988c",
"format": 1
},
{
- "name": "molecule/default/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "molecule/default/tasks/openshift_auth.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0d8b02f57bd1ff3b9a65d46c40914a2ff765f6bd96901ebfa7ce1751154d1802",
+ "format": 1
+ },
+ {
+ "name": "molecule/default/tasks/openshift_builds.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f9e00bcbc3d7758ccc307207c0251d968e028cacca64bade4b73675fa6969004",
"format": 1
},
{
"name": "molecule/default/tasks/openshift_import_images.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0697c9bcd3f8b67cc778ddd5a4eaedf170f925501dae4e5836434b897a30d5dd",
+ "chksum_sha256": "5c295e6733b977323a9113220137891428e47582ebca88a3f2186b8d5f55a905",
"format": 1
},
{
- "name": "molecule/default/tasks/validate_installed.yml",
+ "name": "molecule/default/tasks/openshift_process.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a6abad4a4d33a77ca736a4835db0f5d11dc7742100ff4d9d36a9942e1f4b55e9",
+ "chksum_sha256": "999932ada001df7be263ab2158592c6325d2827ee372ad38e9f0197b807cbf52",
"format": 1
},
{
- "name": "molecule/default/tasks/openshift_adm_prune_deployments.yml",
+ "name": "molecule/default/tasks/openshift_prune_images.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "16b97fda417204c8df08a294c4f46011ad6bc617964d3b2a8c860134793ea175",
+ "chksum_sha256": "7b2b85f65cf92d5a572f7f85cc006d5fd7b6ebc2d913f8ae9f16d2def362d071",
"format": 1
},
{
- "name": "molecule/default/tasks/openshift_builds.yml",
+ "name": "molecule/default/tasks/openshift_route.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dd3532196ebb99d4a467fb2cc4b958a1d5e551969c00224b07694c76b959dd45",
+ "chksum_sha256": "3d4fc8dd62b012f339a517d0e7c73767031bda416b4bfac1975c5425ee462c8b",
"format": 1
},
{
- "name": "molecule/default/tasks/openshift_adm_prune_auth_roles.yml",
+ "name": "molecule/default/tasks/validate_installed.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d83689cc8e59c041386545fb0afdde5ec3157bea33db35303529595ddffb5fe9",
+ "chksum_sha256": "a6abad4a4d33a77ca736a4835db0f5d11dc7742100ff4d9d36a9942e1f4b55e9",
"format": 1
},
{
@@ -582,493 +617,542 @@
"format": 1
},
{
- "name": "molecule/default/tasks/openshift_prune_images.yml",
+ "name": "molecule/default/vars",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "molecule/default/vars/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "706dec431bd424212a1b43e7c7aa86bc9a01c3fd392d170f6486b1732ebcc317",
+ "chksum_sha256": "d065ea53707a373ac5928ee6091224569ac791023daa1cf26f70a099812a51cf",
"format": 1
},
{
- "name": "molecule/default/tasks/openshift_auth.yml",
+ "name": "molecule/default/README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0d8b02f57bd1ff3b9a65d46c40914a2ff765f6bd96901ebfa7ce1751154d1802",
+ "chksum_sha256": "75d6935060001109bea00ffcf6d289b29e7aa6afeaba2e1e1b85d767062f4da8",
"format": 1
},
{
- "name": "molecule/default/tasks/openshift_route.yml",
+ "name": "molecule/default/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "20d0f4944902de207884fe0a0a987070b9b3716a436d76264400cb67f53c38c3",
+ "chksum_sha256": "2da549e774063f37985fa720bb55ce6a5d70375d1ac2171564c29b63794342bf",
"format": 1
},
{
- "name": "molecule/default/tasks/openshift_adm_prune_auth_clusterroles.yml",
+ "name": "molecule/default/destroy.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bc631199609c00aa4f669ccde1c351921ad43eec335c7abe6185f97c2b903f11",
+ "chksum_sha256": "26670c28263a4f354e646c222e2c59ccfcb3cd807fe07d531e9874fc3748a44c",
"format": 1
},
{
- "name": "molecule/default/tasks/openshift_process.yml",
+ "name": "molecule/default/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "999932ada001df7be263ab2158592c6325d2827ee372ad38e9f0197b807cbf52",
+ "chksum_sha256": "53e1ed3199bf98922cbabb2d30dc2b4df6594790b0dee4cb271aaeba739bdf72",
"format": 1
},
{
- "name": "molecule/default/destroy.yml",
+ "name": "molecule/default/prepare.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "26670c28263a4f354e646c222e2c59ccfcb3cd807fe07d531e9874fc3748a44c",
+ "chksum_sha256": "e346146e7c1bf70e7255c26241de861c5df4cc1fcc00d3f66c10aa14ce883d0d",
"format": 1
},
{
- "name": "molecule/default/roles",
+ "name": "molecule/default/verify.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0aa66e5d35f985e47345d47e378816189d77cb131520e115f05c8eea2ab3bfc6",
+ "format": 1
+ },
+ {
+ "name": "plugins",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "molecule/default/roles/openshift_adm_groups",
+ "name": "plugins/connection",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "molecule/default/roles/openshift_adm_groups/tasks",
+ "name": "plugins/connection/oc.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1fcf101432828f7519c411ec7b1be81f42a366759cc07935cc34ad1b85edac6f",
+ "format": 1
+ },
+ {
+ "name": "plugins/inventory",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "molecule/default/roles/openshift_adm_groups/tasks/python-ldap-not-installed.yml",
+ "name": "plugins/inventory/openshift.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "05a6759b51bcd97f154db6d344367c55eb424533163fccce1493c49dd5913973",
+ "chksum_sha256": "c1c98feecbde5e6ab84e1040351234c482e34dcaf95dd6e9ce1ca41980a97acc",
"format": 1
},
{
- "name": "molecule/default/roles/openshift_adm_groups/tasks/main.yml",
+ "name": "plugins/module_utils",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils/k8s.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d7b676aa4dd79463ad48beebb3b29dd7d73f65bad7df406ea8787214a9fa7004",
+ "chksum_sha256": "c8bd794e43782ceb9bf24c552584bf6b22817c273503838e38ba3acbf41f7e9b",
"format": 1
},
{
- "name": "molecule/default/roles/openshift_adm_groups/tasks/augmentedActiveDirectory.yml",
+ "name": "plugins/module_utils/openshift_adm_prune_auth.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ad25bcfb4431257ab481f12cfcbae23620d8826fa25d38e93ed9a81ef646aa68",
+ "chksum_sha256": "40e03e4fda07b0995fb4ead3937424746f4ad2e0302cf1be6b1709244534f4fd",
"format": 1
},
{
- "name": "molecule/default/roles/openshift_adm_groups/tasks/activeDirectory.yml",
+ "name": "plugins/module_utils/openshift_adm_prune_deployments.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5e2758c9d39c94892ca9976f8e5d7b360bfccb134ea7b95f83ba51c46b1d9195",
+ "chksum_sha256": "e688fef20fcca0454f5d66be41959ef2caae94f655ea6b6e232df9153321be89",
"format": 1
},
{
- "name": "molecule/default/roles/openshift_adm_groups/tasks/rfc2307.yml",
+ "name": "plugins/module_utils/openshift_adm_prune_images.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "87966533bdb6f1f62208f8c6e85ba38acdb3dfd44c6312eb5dca5026b4c9ea0e",
+ "chksum_sha256": "2e80eb099994a60a38ccb2d3d47963597999c11215cbd1746a558101592369ee",
"format": 1
},
{
- "name": "molecule/default/roles/openshift_adm_groups/library",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/module_utils/openshift_builds.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "498738d81ec6249b0f8309a8aaa215a918bf9646c2e5f15c243395626d8f64dd",
"format": 1
},
{
- "name": "molecule/default/roles/openshift_adm_groups/library/openshift_ldap_entry.py",
+ "name": "plugins/module_utils/openshift_common.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8e0d7d997ba74938fef19fead2cf1d2151644ad999e2285b0d769c89804abf5e",
+ "chksum_sha256": "6af4aa60cd80d06fc7f42af7ecf526b9c53a49173b7f896a7236a3b521c4ade9",
"format": 1
},
{
- "name": "molecule/default/roles/openshift_adm_groups/library/openshift_ldap_entry_info.py",
+ "name": "plugins/module_utils/openshift_docker_image.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0b98d02bb07c0ae7ba4da80ef95c02d2476a0106bd8f198779d296c81323bbfe",
+ "chksum_sha256": "92a9a5b72dc08177f3f3ea78773da262371df7ae9629a25c8b3ad0c199f074d3",
"format": 1
},
{
- "name": "molecule/default/roles/openshift_adm_groups/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/module_utils/openshift_groups.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "28aab970ca56b3e6ce985dde4db867073756edb7504ee56b0df6859fde321e9f",
"format": 1
},
{
- "name": "molecule/default/roles/openshift_adm_groups/meta/main.yml",
+ "name": "plugins/module_utils/openshift_images_common.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8d57e1f764ed7af7cf34d0b039ef97eb206fd846d31025ac08ddefa855a83204",
+ "chksum_sha256": "c8f211ba01c590ac57e4df775c0a58699c0ae25c631b635566ae2ff9aabe4b55",
"format": 1
},
{
- "name": "molecule/default/roles/openshift_adm_groups/templates",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/module_utils/openshift_import_image.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7cf4e412c985be34ed4cd9e7510db5ab7364508c298458006e148809fd407e82",
"format": 1
},
{
- "name": "molecule/default/roles/openshift_adm_groups/templates/ad",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/module_utils/openshift_ldap.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3f60ab29cc0f32f3e895e170d9f9288e2b084deef377f9969c342ce51ebc58f8",
"format": 1
},
{
- "name": "molecule/default/roles/openshift_adm_groups/templates/ad/definition.j2",
+ "name": "plugins/module_utils/openshift_process.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f59a7ee4f37de0040f293b615b45092f5bc9fb36f832d81ea6f0a7155bb2c1bd",
+ "chksum_sha256": "004b12313ab35b10521146d1c0bd05a5838f1f25a33d2d465f5bb4aa9dc1d9f6",
"format": 1
},
{
- "name": "molecule/default/roles/openshift_adm_groups/templates/ad/sync-config.j2",
+ "name": "plugins/module_utils/openshift_registry.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fef496b8ba026e34cdef374f373a15948db2bf6147bff5eb4ebdba4d1b3a4381",
+ "chksum_sha256": "97235ea3a40a714e532d85b636fb81ea2eb8afdfbdea7da33a387408c692a272",
"format": 1
},
{
- "name": "molecule/default/roles/openshift_adm_groups/templates/augmented-ad",
+ "name": "plugins/modules",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "molecule/default/roles/openshift_adm_groups/templates/augmented-ad/definition.j2",
+ "name": "plugins/modules/k8s.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a2db659cc8d7467e4d9e78029027d6fff6cc1fd38e54c6ca954a9a64633470d0",
+ "chksum_sha256": "56f8482a9638fa5d9b223fafa6d6b62f805bdf7cfe65c96e257631b065ee0e3e",
"format": 1
},
{
- "name": "molecule/default/roles/openshift_adm_groups/templates/augmented-ad/sync-config.j2",
+ "name": "plugins/modules/openshift_adm_groups_sync.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "76c20cd498ced5c2417a71611b35bde1b22b537fd106b5d8fecf1b896d7d5074",
+ "chksum_sha256": "1285e0be18423cd12a1a5ee715a6b6e2a9c6ee84d265a256dc041377ec86831a",
"format": 1
},
{
- "name": "molecule/default/roles/openshift_adm_groups/templates/rfc2307",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/openshift_adm_migrate_template_instances.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1db241bd4b22890659fc73ef8de575b3f2d61f6819920e67dacea664d58e3620",
"format": 1
},
{
- "name": "molecule/default/roles/openshift_adm_groups/templates/rfc2307/definition.j2",
+ "name": "plugins/modules/openshift_adm_prune_auth.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5e2d7b8287dd1b1ad0067eb8a38d282ff43f95e3a91c3778b86205a14988b434",
+ "chksum_sha256": "2c7fd42950f839f827503c5de4a8111d235629d200ce13833f39f3193d854a8c",
"format": 1
},
{
- "name": "molecule/default/roles/openshift_adm_groups/templates/rfc2307/sync-config.j2",
+ "name": "plugins/modules/openshift_adm_prune_builds.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "64cdf5017cb257f3b26d7eb858c8295313684b1147f0baee3f657fc3dc36c1f9",
+ "chksum_sha256": "d372ad2d48b33ca7210e4f642597fd31ccdca1eb310a949d3af9a6636328a68e",
"format": 1
},
{
- "name": "molecule/default/roles/openshift_adm_groups/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/openshift_adm_prune_deployments.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5482e4282ce36f550b06f9184086f4e6a75ea5e5a216104b4fded399bf548267",
"format": 1
},
{
- "name": "molecule/default/roles/openshift_adm_groups/defaults/main.yml",
+ "name": "plugins/modules/openshift_adm_prune_images.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1bd380f6c0cdf0c2b25e6bf27e4304566f6b9efbbeaf15da3847a9744d685a72",
+ "chksum_sha256": "31f370fe2e70ea88a7cbd517285965a43b9363107a5b66956f2542b0f1412fa0",
"format": 1
},
{
- "name": "molecule/default/molecule.yml",
+ "name": "plugins/modules/openshift_auth.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0e6bfb7aa0d20362717eebbcf8c8bee26211fc1d83bf23bdd5f8fb7046155c47",
+ "chksum_sha256": "9237d7254c4773ff8f1cbb568af501ad0f5c6b00a089b495c67a131f201b017a",
"format": 1
},
{
- "name": "molecule/default/converge.yml",
+ "name": "plugins/modules/openshift_build.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bdd1f1cc563c232b34226f0316eb78d229ca562028e37e281ad76261131da044",
+ "chksum_sha256": "90aa16f9cbb70213bbfaea856f06a745627f46c4bdfe4bed25676bcb3beb4ba2",
"format": 1
},
{
- "name": "molecule/default/files",
+ "name": "plugins/modules/openshift_import_image.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1116270865430b4d5aac0d8ea4041a76f940554b4f1b42bff2508d1e503a6b26",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/openshift_process.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "97656e3d189e4905db8dc435b707b58181ef22f134ec559152e836f5d54d4bd9",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/openshift_registry_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e204f2672c2daa88228e6c19b5d556c05bfab5b1ec3b07b4e97fa0139626b9cc",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/openshift_route.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "27b4eab0a052bcbc0619d08104f2b040ad1b773b325d5f8b90c70fa54aa9d74f",
+ "format": 1
+ },
+ {
+ "name": "tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "molecule/default/files/nginx.env",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a68c2914576119a809943116ce0050ca221c5b8f3a6722fa6abbf15dababde5f",
+ "name": "tests/sanity",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "molecule/default/files/setup-crd.yml",
+ "name": "tests/sanity/ignore-2.10.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "509878fff22a19715f1c491930eefd23430c0f571716b463c3ab9a754d0fb250",
+ "chksum_sha256": "ba2285dad70183ce56e9d43ed97d4b7a1b12e7cdd3f4e5856fb3cf380148a5ee",
"format": 1
},
{
- "name": "molecule/default/files/pod-template.yaml",
+ "name": "tests/sanity/ignore-2.11.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5fcb22787bccf2a5e1b6b90617f1aabadb71e9c9a906763e68b8573ef468f09a",
+ "chksum_sha256": "dc0294c142585d8904331fd57755efc876e592ce8242e42e1159bcfddd4adbba",
"format": 1
},
{
- "name": "molecule/default/files/simple-template.yaml",
+ "name": "tests/sanity/ignore-2.12.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "acbc61a1278772f1fd80a1bdb6546b6022842f7fd1c1b9aaf8bd65b606d93a2b",
+ "chksum_sha256": "43bc048d24e8dd8fca8052b6135daaf59207e462f72cb9848f65de9c6e09552c",
"format": 1
},
{
- "name": "molecule/default/files/kuard-invalid-type.yml",
+ "name": "tests/sanity/ignore-2.13.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c0e8aa083eecb5c4d92108af83f9a2c931a2e5bbb766af4792adc4fb9fd9d32d",
+ "chksum_sha256": "43bc048d24e8dd8fca8052b6135daaf59207e462f72cb9848f65de9c6e09552c",
"format": 1
},
{
- "name": "molecule/default/files/example.env",
+ "name": "tests/sanity/ignore-2.14.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3701367ea0a79158d476e168c1b1e64639f703da926e63045cba5cfdbb6c3576",
+ "chksum_sha256": "43bc048d24e8dd8fca8052b6135daaf59207e462f72cb9848f65de9c6e09552c",
"format": 1
},
{
- "name": "molecule/default/files/kuard-extra-property.yml",
+ "name": "tests/sanity/ignore-2.15.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "27a06de7ca760698dc1d3c46ef12e40e214ae319a791a3965806b30adca06de0",
+ "chksum_sha256": "43bc048d24e8dd8fca8052b6135daaf59207e462f72cb9848f65de9c6e09552c",
"format": 1
},
{
- "name": "molecule/default/files/crd-resource.yml",
+ "name": "tests/sanity/ignore-2.16.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4921362ac3c4afac5f42ebb90b37bcb75e1fe20929bb0e45d0df4c190d28f577",
+ "chksum_sha256": "43bc048d24e8dd8fca8052b6135daaf59207e462f72cb9848f65de9c6e09552c",
"format": 1
},
{
- "name": "molecule/default/verify.yml",
+ "name": "tests/sanity/ignore-2.17.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0aa66e5d35f985e47345d47e378816189d77cb131520e115f05c8eea2ab3bfc6",
+ "chksum_sha256": "43bc048d24e8dd8fca8052b6135daaf59207e462f72cb9848f65de9c6e09552c",
"format": 1
},
{
- "name": "molecule/default/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/sanity/ignore-2.9.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "cf94385a1d8a2b51f40f88879b59922c8a8b07b8f1e0ac511a2454e257361995",
"format": 1
},
{
- "name": "molecule/default/vars/main.yml",
+ "name": "tests/sanity/requirements.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75f11fae6d7f1e6574152509a4d7ad306966fc94eda2e610dfdb8a529a531228",
+ "chksum_sha256": "c21e5168cbc64df9b025b078fa382484d308e6a633977cc57a3dd0c5fc1c70ed",
"format": 1
},
{
- "name": "ci",
+ "name": "tests/unit",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "ci/downstream.sh",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "75816fd56cb1a00c37234e84b4b2109f49cfad60901429a96e36f528202d3c2e",
+ "name": "tests/unit/plugins",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "ci/downstream_fragments.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9815e2aa84aef5d396fd07ddb371fa87362ade6fbe72d829e4d5983abe8af453",
+ "name": "tests/unit/plugins/module_utils",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "ci/doc_fragment_modules.py",
+ "name": "tests/unit/plugins/module_utils/test_ldap_dn.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e5f5e24396a2cc86faedf6d0b7a3835db06bbe6fc7b534018ed85ebecfa39e09",
+ "chksum_sha256": "08829b431c2006a4a99bbbc4d5eb6c61612c7542dd1865893dd2f811c9a2b1a4",
"format": 1
},
{
- "name": "ci/incluster_integration.sh",
+ "name": "tests/unit/plugins/module_utils/test_ldap_sync_config.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "012ffb20a006094a4e8a00ead7947a196c477c4eb071a1dad5ffe42f509935e1",
+ "chksum_sha256": "ab45e3fc6bcce7029a506464376bae9803a48cf99d1e3aa7b07caa475da561c2",
"format": 1
},
{
- "name": "ci/Dockerfile",
+ "name": "tests/unit/plugins/module_utils/test_openshift_docker_image.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "372a61931849250f7805a630fd5fc8b854f457d2752e1a70912beaa4773855ec",
+ "chksum_sha256": "3f058b71343cf91986e8a106444d6bc5f033d8bce6d1e6c9bb04d04d5deeb2db",
"format": 1
},
{
- "name": "docs",
+ "name": "tests/unit/plugins/modules",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "docs/community.okd.openshift_route_module.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "979c41e0c3ec23b57267104feaa400b798ddbb3f3157e77a22dad0b05d067d19",
- "format": 1
- },
- {
- "name": "docs/community.okd.openshift_adm_prune_images_module.rst",
+ "name": "tests/unit/plugins/modules/test_openshift_adm_migrate_template_instances.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4b5a9d72104e8cfee2e7973f094aaf8af666a2bdec615cee482411261f5dfa57",
+ "chksum_sha256": "4c426c87d28313524cbd378f917a2d70242f333571f942d44bc9bf8c7e591586",
"format": 1
},
{
- "name": "docs/community.okd.k8s_module.rst",
+ "name": "tests/unit/requirements.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5d8bf2916753820405f62f00174687e62756dd2b610faea666f1ba077a02d573",
+ "chksum_sha256": "8004a972c3d5c274d8c808e8d8afe03b9aca8af8eebf3df4298f114d8008b754",
"format": 1
},
{
- "name": "docs/community.okd.openshift_inventory.rst",
+ "name": "tests/config.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "551e42026b2affd901c51f2be85fb69d9911e037edf424667eacc1b21aa00583",
+ "chksum_sha256": "4129945061440c8d8c281590b8054b194f5958833c722aa40e878b09038c380e",
"format": 1
},
{
- "name": "docs/ansible_turbo_mode.rst",
+ "name": ".gitignore",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a9bcd000c20de1d1ad35f5516f4fdffce07c8e28a5ebee572629a3b9cb867152",
+ "chksum_sha256": "8344abb7aafbdb654f0c88532af7ab557dad7a6a7cba60f4834f33c2a1f8524f",
"format": 1
},
{
- "name": "docs/community.okd.openshift_process_module.rst",
+ "name": ".yamllint",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3910d82ee4a8a31d84b6cbac6b7e6d6331d1ef9fe2b4331ce82e3065090baf66",
+ "chksum_sha256": "20f14c567d8ba0813a1ae58e298093a8004e4657baed321e4567de0f676beeaf",
"format": 1
},
{
- "name": "docs/community.okd.openshift_adm_groups_sync_module.rst",
+ "name": "CHANGELOG.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f8c405bb2c291cbdb3a0f4398bb9b205864dbb941cb0b0024e7cfa74d6ae49bd",
+ "chksum_sha256": "16845876aa6654eef1928c3cfddbe2a8846125d6165af1297c12564202901604",
"format": 1
},
{
- "name": "docs/community.okd.openshift_auth_module.rst",
+ "name": "CONTRIBUTING.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9c361ea64a0005fb0682c8fbd863cb7ef7cd0eb45f52383cc1123690e91fed11",
+ "chksum_sha256": "4156016c23606d288b98c4fa0eafc6afe1cf28e695fb5a267bcc3d337a7bfef0",
"format": 1
},
{
- "name": "docs/community.okd.oc_connection.rst",
+ "name": "LICENSE",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c0ffee1276ab6cfa6677b42fed2fcd8b46622ed5cb4c8ee0f9c9cac4db870f75",
+ "chksum_sha256": "8b1ba204bb69a0ade2bfcf65ef294a920f6bb361b317dba43c7ef29d96332b9b",
"format": 1
},
{
- "name": "docs/community.okd.openshift_adm_prune_auth_module.rst",
+ "name": "Makefile",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fbad4ddccea64f4ed415cf86d54b7d6fc3e6a7be46c19d11fb20202b527275dd",
+ "chksum_sha256": "624803bcb735d2b0c3ea45893d4d4640940044a0442815f3bd4047d1a09afd3a",
"format": 1
},
{
- "name": "docs/community.okd.openshift_adm_prune_builds_module.rst",
+ "name": "OWNERS",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d4762b6900b787b6efc27fbeede84044839e083fa5bd06165eb5c1b17f203a31",
+ "chksum_sha256": "771ebefb6c2b0154bf043cc537cc55b8421ddd4058248b00a62cdc9b190131da",
"format": 1
},
{
- "name": "docs/community.okd.openshift_import_image_module.rst",
+ "name": "OWNERS_ALIASES",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f031bc1985bda8784a3cb684767db28a469216ba7e47940bf7c49844acc87b08",
+ "chksum_sha256": "9ca328507f3e791383a7ab414eb73ab6d6becc4c637f2fdaace691e8be494774",
"format": 1
},
{
- "name": "docs/community.okd.openshift_build_module.rst",
+ "name": "README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "50c1219f5524d60a4b46bc58c6df30d8af7b6e6ecc20fd4d15cf3e0fc352c05e",
+ "chksum_sha256": "957df67ccf2961757af99aa031a59310cbbe7addb7852c84717bbd6cab8dffa7",
"format": 1
},
{
- "name": "docs/community.okd.openshift_registry_info_module.rst",
+ "name": "codecov.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c66f8f9adb98eedcfda0e31034f5d14e881e9a41d3793fb36a3f311635166e69",
+ "chksum_sha256": "caa848a2e02be5014890c5cbc7727e9a00d40394637c90886eb813d60f82c9c3",
"format": 1
},
{
- "name": "docs/community.okd.openshift_adm_prune_deployments_module.rst",
+ "name": "requirements.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "02693279a5b1c52eaf4fd70d8f01d87750f9b0554cd1d550892192b7070f558a",
+ "chksum_sha256": "d20fa49248fb968b70381346d2b2f6195e19dc1ddded06856bc4aefa6a25d431",
"format": 1
},
{
- "name": "docs/community.okd.openshift_adm_migrate_template_instances_module.rst",
+ "name": "requirements.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "99634e05dde50a01bd4cba0c696e3622864b744b6ea2f6103094c3809238ffd9",
+ "chksum_sha256": "c3d472e03d26b6fdeb1a9a3e986fb9df54ae2435406507e83050acc20433aedc",
"format": 1
},
{
- "name": "CHANGELOG.rst",
+ "name": "test-requirements.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b22ef082f56193da0b6bd2984c3eff9beb4e5980017a7fcb4bcdad7898ff5112",
+ "chksum_sha256": "518d4932bf69764d9e3b577eb15452a40665b270dddcd5a9d58fec8ac6b26239",
"format": 1
},
{
- "name": "requirements.yml",
+ "name": "tox.ini",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a020e70b5ab59096b404e97d4f4a04a3d0b63627dbbcede89b3e131050fcccb4",
+ "chksum_sha256": "a61868a5974ff417ea848cd6ab079ff0441f30dc652d0c470ddc742658213f84",
"format": 1
}
],
diff --git a/ansible_collections/community/okd/MANIFEST.json b/ansible_collections/community/okd/MANIFEST.json
index dd2937e35..f12873236 100644
--- a/ansible_collections/community/okd/MANIFEST.json
+++ b/ansible_collections/community/okd/MANIFEST.json
@@ -2,7 +2,7 @@
"collection_info": {
"namespace": "community",
"name": "okd",
- "version": "2.3.0",
+ "version": "3.0.1",
"authors": [
"geerlingguy (https://www.jeffgeerling.com/)",
"fabianvf (https://github.com/fabianvf)",
@@ -23,7 +23,7 @@
"license": [],
"license_file": "LICENSE",
"dependencies": {
- "kubernetes.core": ">=2.4.0"
+ "kubernetes.core": ">=3.0.0"
},
"repository": "https://github.com/openshift/community.okd",
"documentation": "",
@@ -34,7 +34,7 @@
"name": "FILES.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6e3f825a7ea74f2f591751d9ee4aac800f99ca344e86a5d00477306b14419ae8",
+ "chksum_sha256": "2e0de6ad088440b5ec4eb9313aa6dfacb5ae6be46f491cfc1302a8b321178167",
"format": 1
},
"format": 1
diff --git a/ansible_collections/community/okd/Makefile b/ansible_collections/community/okd/Makefile
index 7990f8447..b897aedb4 100644
--- a/ansible_collections/community/okd/Makefile
+++ b/ansible_collections/community/okd/Makefile
@@ -1,7 +1,7 @@
.PHONY: molecule
# Also needs to be updated in galaxy.yml
-VERSION = 2.3.0
+VERSION = 3.0.1
SANITY_TEST_ARGS ?= --docker --color
UNITS_TEST_ARGS ?= --docker --color
@@ -16,7 +16,7 @@ build: clean
ansible-galaxy collection build
install: build
- ansible-galaxy collection install -p ansible_collections community-okd-$(VERSION).tar.gz
+ ansible-galaxy collection install --force -p ansible_collections community-okd-$(VERSION).tar.gz
sanity: install
cd ansible_collections/community/okd && ansible-test sanity -v --python $(PYTHON_VERSION) $(SANITY_TEST_ARGS)
diff --git a/ansible_collections/community/okd/OWNERS_ALIASES b/ansible_collections/community/okd/OWNERS_ALIASES
index f65b7d7aa..16c8602e3 100644
--- a/ansible_collections/community/okd/OWNERS_ALIASES
+++ b/ansible_collections/community/okd/OWNERS_ALIASES
@@ -1,19 +1,11 @@
aliases:
community.okd-approvers:
- gravesm
- - akasurde
- - fabianvf
- - tima
- - goneri
- jillr
- alinabuzachis
- abikouo
community.okd-reviewers:
- gravesm
- - akasurde
- - fabianvf
- - tima
- - goneri
- jillr
- alinabuzachis
- abikouo
diff --git a/ansible_collections/community/okd/README.md b/ansible_collections/community/okd/README.md
index f3e1bba67..4f6ba618e 100644
--- a/ansible_collections/community/okd/README.md
+++ b/ansible_collections/community/okd/README.md
@@ -10,10 +10,9 @@ The collection includes a variety of Ansible content to help automate the manage
<!--start requires_ansible-->
## Ansible version compatibility
-This collection has been tested against following Ansible versions: **>=2.9.17**.
+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`).
+Please ensure to update the `network_os` to use the fully qualified collection name (for example, `cisco.ios.ios`).
Plugins and modules within a collection may be tested with only specific Ansible versions.
A collection may contain metadata that identifies these versions.
PEP440 is the schema used to describe the versions of Ansible.
@@ -21,11 +20,11 @@ PEP440 is the schema used to describe the versions of Ansible.
## Python Support
-* Collection supports 3.6+
+* Collection supports 3.9+
## Kubernetes Version Support
-This collection supports Kubernetes versions >=1.19.
+This collection supports Kubernetes versions >=1.24.
## Included content
@@ -77,7 +76,7 @@ You can also include it in a `requirements.yml` file and install it via `ansible
---
collections:
- name: community.okd
- version: 2.3.0
+ version: 3.0.1
```
### Installing the Kubernetes Python Library
@@ -161,17 +160,17 @@ where the `IMAGE_FORMAT` environment variable is the full reference to your cont
Releases are automatically built and pushed to Ansible Galaxy for any new tag. Before tagging a release, make sure to do the following:
1. Update the version in the following places:
- a. The `version` in `galaxy.yml`
- b. This README's `requirements.yml` example
- c. The `DOWNSTREAM_VERSION` in `ci/downstream.sh`
- d. The `VERSION` in `Makefile`
- e. The version in `requirements.yml`
- 1. Update the CHANGELOG:
- 1. Make sure you have [`antsibull-changelog`](https://pypi.org/project/antsibull-changelog/) installed.
- 1. Make sure there are fragments for all known changes in `changelogs/fragments`.
- 1. Run `antsibull-changelog release`.
- 1. Commit the changes and create a PR with the changes. Wait for tests to pass, then merge it once they have.
- 1. Tag the version in Git and push to GitHub.
+ * a. The `version` in `galaxy.yml`
+ * b. This README's `requirements.yml` example
+ * c. The `DOWNSTREAM_VERSION` in `ci/downstream.sh`
+ * d. The `VERSION` in `Makefile`
+ * e. The version in `requirements.yml`
+ 2. Update the CHANGELOG:
+ * 1. Make sure you have [`antsibull-changelog`](https://pypi.org/project/antsibull-changelog/) installed.
+ * 2. Make sure there are fragments for all known changes in `changelogs/fragments`.
+ * 3. Run `antsibull-changelog release`.
+ 3. Commit the changes and create a PR with the changes. Wait for tests to pass, then merge it once they have.
+ 4. Tag the version in Git and push to GitHub.
After the version is published, verify it exists on the [OKD Collection Galaxy page](https://galaxy.ansible.com/community/okd).
<!--- ENDREMOVE --->
diff --git a/ansible_collections/community/okd/changelogs/.plugin-cache.yaml b/ansible_collections/community/okd/changelogs/.plugin-cache.yaml
deleted file mode 100644
index 223920534..000000000
--- a/ansible_collections/community/okd/changelogs/.plugin-cache.yaml
+++ /dev/null
@@ -1,92 +0,0 @@
-objects: {}
-plugins:
- become: {}
- cache: {}
- callback: {}
- cliconf: {}
- connection:
- oc:
- description: Execute tasks in pods running on OpenShift.
- name: oc
- version_added: null
- httpapi: {}
- inventory:
- openshift:
- description: OpenShift inventory source
- name: openshift
- version_added: null
- lookup: {}
- module:
- k8s:
- description: Manage OpenShift objects
- name: k8s
- namespace: ''
- version_added: null
- openshift_adm_groups_sync:
- description: Sync OpenShift Groups with records from an external provider.
- name: openshift_adm_groups_sync
- namespace: ''
- version_added: 2.1.0
- openshift_adm_migrate_template_instances:
- description: Update TemplateInstances to point to the latest group-version-kinds
- name: openshift_adm_migrate_template_instances
- namespace: ''
- version_added: 2.2.0
- openshift_adm_prune_auth:
- description: Removes references to the specified roles, clusterroles, users,
- and groups
- name: openshift_adm_prune_auth
- namespace: ''
- version_added: 2.2.0
- openshift_adm_prune_builds:
- description: Prune old completed and failed builds
- name: openshift_adm_prune_builds
- namespace: ''
- version_added: 2.3.0
- openshift_adm_prune_deployments:
- description: Remove old completed and failed deployment configs
- name: openshift_adm_prune_deployments
- namespace: ''
- version_added: 2.2.0
- openshift_adm_prune_images:
- description: Remove unreferenced images
- name: openshift_adm_prune_images
- namespace: ''
- version_added: 2.2.0
- openshift_auth:
- description: Authenticate to OpenShift clusters which require an explicit login
- step
- name: openshift_auth
- namespace: ''
- version_added: 0.2.0
- openshift_build:
- description: Start a new build or Cancel running, pending, or new builds.
- name: openshift_build
- namespace: ''
- version_added: 2.3.0
- openshift_import_image:
- description: Import the latest image information from a tag in a container image
- registry.
- name: openshift_import_image
- namespace: ''
- version_added: 2.2.0
- openshift_process:
- description: Process an OpenShift template.openshift.io/v1 Template
- name: openshift_process
- namespace: ''
- version_added: 0.3.0
- openshift_registry_info:
- description: Display information about the integrated registry.
- name: openshift_registry_info
- namespace: ''
- version_added: 2.2.0
- openshift_route:
- description: Expose a Service as an OpenShift Route.
- name: openshift_route
- namespace: ''
- version_added: 0.3.0
- netconf: {}
- shell: {}
- strategy: {}
- vars: {}
-version: 2.3.0
diff --git a/ansible_collections/community/okd/changelogs/changelog.yaml b/ansible_collections/community/okd/changelogs/changelog.yaml
index 12184d712..82cd00add 100644
--- a/ansible_collections/community/okd/changelogs/changelog.yaml
+++ b/ansible_collections/community/okd/changelogs/changelog.yaml
@@ -199,3 +199,28 @@ releases:
name: openshift_build
namespace: ''
release_date: '2023-02-03'
+ 3.0.0:
+ changes:
+ breaking_changes:
+ - 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).
+ deprecated_features:
+ - 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).
+ release_summary: This major release drops support for ansible-core versions
+ lower than 2.14 and Python versions lower than 3.9. It also deprecates ``openshift``
+ inventory plugin.
+ fragments:
+ - 20230206-deprecate-openshift-inventory.yml
+ - 20231107-move-sanity-and-units-to-gha.yml
+ release_date: '2023-11-20'
+ 3.0.1:
+ changes:
+ release_summary: 'This patch release fixes an issue in building the downstream
+ collection.
+
+ '
+ fragments:
+ - downstream-gitignore.yml
+ - release_summary.yml
+ release_date: '2023-11-30'
diff --git a/ansible_collections/community/okd/changelogs/config.yaml b/ansible_collections/community/okd/changelogs/config.yaml
index 1a31c10ed..4e6bb5e98 100644
--- a/ansible_collections/community/okd/changelogs/config.yaml
+++ b/ansible_collections/community/okd/changelogs/config.yaml
@@ -10,21 +10,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: OKD Collection
trivial_section_name: trivial
diff --git a/ansible_collections/community/okd/ci/Dockerfile b/ansible_collections/community/okd/ci/Dockerfile
index 1a509190d..d57e7a007 100644
--- a/ansible_collections/community/okd/ci/Dockerfile
+++ b/ansible_collections/community/okd/ci/Dockerfile
@@ -1,4 +1,4 @@
-FROM registry.access.redhat.com/ubi8/ubi
+FROM registry.access.redhat.com/ubi9/ubi
ENV OPERATOR=/usr/local/bin/ansible-operator \
USER_UID=1001 \
@@ -11,20 +11,20 @@ RUN yum install -y \
glibc-langpack-en \
git \
make \
- python39 \
- python39-devel \
- python39-pip \
- python39-setuptools \
+ python3 \
+ python3-devel \
+ python3-pip \
+ python3-setuptools \
gcc \
openldap-devel \
- && pip3 install --no-cache-dir --upgrade setuptools pip \
- && pip3 install --no-cache-dir \
+ && python3.9 -m pip install --no-cache-dir --upgrade setuptools pip \
+ && python3.9 -m pip install --no-cache-dir \
kubernetes \
- ansible==2.9.* \
- "molecule<3.3.0" \
+ "ansible-core" \
+ "molecule" \
&& yum clean all \
&& rm -rf $HOME/.cache \
- && curl -L https://github.com/openshift/okd/releases/download/4.5.0-0.okd-2020-08-12-020541/openshift-client-linux-4.5.0-0.okd-2020-08-12-020541.tar.gz | tar -xz -C /usr/local/bin
+ && curl -L https://github.com/openshift/okd/releases/download/4.12.0-0.okd-2023-04-16-041331/openshift-client-linux-4.12.0-0.okd-2023-04-16-041331.tar.gz | tar -xz -C /usr/local/bin
# TODO: Is there a better way to install this client in ubi8?
COPY . /opt/ansible
diff --git a/ansible_collections/community/okd/ci/downstream.sh b/ansible_collections/community/okd/ci/downstream.sh
index 001959c7e..c75398b77 100755
--- a/ansible_collections/community/okd/ci/downstream.sh
+++ b/ansible_collections/community/okd/ci/downstream.sh
@@ -9,7 +9,7 @@
# - All functions are prefixed with f_ so it's obvious where they come
# from when in use throughout the script
-DOWNSTREAM_VERSION="2.3.0"
+DOWNSTREAM_VERSION="3.0.1"
KEEP_DOWNSTREAM_TMPDIR="${KEEP_DOWNSTREAM_TMPDIR:-''}"
INSTALL_DOWNSTREAM_COLLECTION_PATH="${INSTALL_DOWNSTREAM_COLLECTION_PATH:-}"
_build_dir=""
@@ -47,7 +47,7 @@ f_text_sub()
sed -i.bak "s/Kubernetes/OpenShift/g" "${_build_dir}/galaxy.yml"
sed -i.bak "s/^version\:.*$/version: ${DOWNSTREAM_VERSION}/" "${_build_dir}/galaxy.yml"
sed -i.bak "/STARTREMOVE/,/ENDREMOVE/d" "${_build_dir}/README.md"
- sed -i.bak "s/[[:space:]]okd:$/ openshift:/" ${_build_dir}/meta/runtime.yml
+ sed -i.bak "s/[[:space:]]okd:$/ openshift:/" "${_build_dir}/meta/runtime.yml"
find "${_build_dir}" -type f ! -name galaxy.yml -exec sed -i.bak "s/community\.okd/redhat\.openshift/g" {} \;
find "${_build_dir}" -type f -name "*.bak" -delete
@@ -62,12 +62,12 @@ f_prep()
# Files to copy downstream (relative repo root dir path)
_file_manifest=(
+ .gitignore
CHANGELOG.rst
galaxy.yml
LICENSE
README.md
Makefile
- setup.cfg
.yamllint
requirements.txt
requirements.yml
@@ -76,6 +76,7 @@ f_prep()
# Directories to recursively copy downstream (relative repo root dir path)
_dir_manifest=(
+ .config
changelogs
ci
meta
@@ -145,7 +146,7 @@ f_handle_doc_fragments_workaround()
local rendered_fragments="./rendereddocfragments.txt"
# FIXME: Check Python interpreter from environment variable to work with prow
- PYTHON=${DOWNSTREAM_BUILD_PYTHON:-/usr/bin/python3.6}
+ PYTHON=${DOWNSTREAM_BUILD_PYTHON:-/usr/bin/python3}
f_log_info "Using Python interpreter: ${PYTHON}"
# Modules with inherited doc fragments from kubernetes.core that need
@@ -156,7 +157,7 @@ f_handle_doc_fragments_workaround()
# Build the collection, export docs, render them, stitch it all back together
pushd "${_build_dir}" || return
ansible-galaxy collection build
- ansible-galaxy collection install -p "${install_collections_dir}" ./*.tar.gz
+ ansible-galaxy collection install --force-with-deps -p "${install_collections_dir}" ./*.tar.gz
rm ./*.tar.gz
for doc_fragment_mod in "${_doc_fragment_modules[@]}"
do
diff --git a/ansible_collections/community/okd/docs/community.okd.k8s_module.rst b/ansible_collections/community/okd/docs/community.okd.k8s_module.rst
index 8d0e0f9dc..9a14c4417 100644
--- a/ansible_collections/community/okd/docs/community.okd.k8s_module.rst
+++ b/ansible_collections/community/okd/docs/community.okd.k8s_module.rst
@@ -354,6 +354,41 @@ Parameters
<tr>
<td colspan="3">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>impersonate_groups</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Group(s) to impersonate for the operation.</div>
+ <div>Can also be specified via K8S_AUTH_IMPERSONATE_GROUPS environment. Example: Group1,Group2</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="3">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>impersonate_user</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Username to impersonate for the operation.</div>
+ <div>Can also be specified via K8S_AUTH_IMPERSONATE_USER environment.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="3">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>kind</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -382,6 +417,7 @@ Parameters
</td>
<td>
<div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div>
+ <div>Multiple Kubernetes config file can be provided using separator &#x27;;&#x27; for Windows platform or &#x27;:&#x27; for others platforms.</div>
<div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version &gt;= 17.17.0. Added in version 2.2.0.</div>
</td>
</tr>
@@ -451,6 +487,25 @@ Parameters
<tr>
<td colspan="3">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>no_proxy</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>The comma separated list of hosts/domains/IP/CIDR that shouldn&#x27;t go through proxy. Can also be specified via K8S_AUTH_NO_PROXY environment variable.</div>
+ <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. NO_PROXY).</div>
+ <div>This feature requires kubernetes&gt;=19.15.0. When kubernetes library is less than 19.15.0, it fails even no_proxy set in correct.</div>
+ <div>example value is &quot;localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16&quot;</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="3">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>password</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -603,6 +658,7 @@ Parameters
<td>
<div>Provide a path to a file containing a valid YAML definition of an object or objects to be created or updated. Mutually exclusive with <em>resource_definition</em>. NOTE: <em>kind</em>, <em>api_version</em>, <em>name</em>, and <em>namespace</em> will be overwritten by corresponding values found in the configuration read in from the <em>src</em> file.</div>
<div>Reads from the local file system. To read from the Ansible controller&#x27;s file system, including vaulted files, use the file lookup plugin or template lookup plugin, combined with the from_yaml filter, and pass the result to <em>resource_definition</em>. See Examples below.</div>
+ <div>The URL to manifest files that can be used to create the resource. Added in version 2.4.0.</div>
<div>Mutually exclusive with <em>template</em> in case of <span class='module'>kubernetes.core.k8s</span> module.</div>
</td>
</tr>
@@ -938,10 +994,10 @@ Examples
app: galaxy
service: web
ports:
- - protocol: TCP
- targetPort: 8000
- name: port-8000-tcp
- port: 8000
+ - protocol: TCP
+ targetPort: 8000
+ name: port-8000-tcp
+ port: 8000
- name: Remove an existing Service object
community.okd.k8s:
@@ -975,15 +1031,15 @@ Examples
state: present
definition: "{{ lookup('template', '/testing/deployment.yml') | from_yaml }}"
validate:
- fail_on_error: yes
+ fail_on_error: true
- name: warn on validation errors, check for unexpected properties
community.okd.k8s:
state: present
definition: "{{ lookup('template', '/testing/deployment.yml') | from_yaml }}"
validate:
- fail_on_error: no
- strict: yes
+ fail_on_error: false
+ strict: true
@@ -1060,7 +1116,7 @@ Common return values are documented `here <https://docs.ansible.com/ansible/late
</td>
<td>error</td>
<td>
- <div>error while trying to create/delete the object.</div>
+ <div>Error while trying to create/delete the object.</div>
<br/>
</td>
</tr>
diff --git a/ansible_collections/community/okd/docs/community.okd.oc_connection.rst b/ansible_collections/community/okd/docs/community.okd.oc_connection.rst
index 14f2477cc..12869df2a 100644
--- a/ansible_collections/community/okd/docs/community.okd.oc_connection.rst
+++ b/ansible_collections/community/okd/docs/community.okd.oc_connection.rst
@@ -308,7 +308,7 @@ Status
Authors
~~~~~~~
-- xuxinkun
+- xuxinkun (@xuxinkun)
.. hint::
diff --git a/ansible_collections/community/okd/docs/community.okd.openshift_adm_groups_sync_module.rst b/ansible_collections/community/okd/docs/community.okd.openshift_adm_groups_sync_module.rst
index e16aa4d54..7d319a472 100644
--- a/ansible_collections/community/okd/docs/community.okd.openshift_adm_groups_sync_module.rst
+++ b/ansible_collections/community/okd/docs/community.okd.openshift_adm_groups_sync_module.rst
@@ -55,6 +55,7 @@ Parameters
</div>
</td>
<td>
+ <b>Default:</b><br/><div style="color: blue">[]</div>
</td>
<td>
<div>Allowed groups, could be openshift group name or LDAP group dn value.</div>
@@ -150,6 +151,7 @@ Parameters
</div>
</td>
<td>
+ <b>Default:</b><br/><div style="color: blue">[]</div>
</td>
<td>
<div>Denied groups, could be openshift group name or LDAP group dn value.</div>
@@ -175,6 +177,41 @@ Parameters
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>impersonate_groups</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Group(s) to impersonate for the operation.</div>
+ <div>Can also be specified via K8S_AUTH_IMPERSONATE_GROUPS environment. Example: Group1,Group2</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>impersonate_user</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Username to impersonate for the operation.</div>
+ <div>Can also be specified via K8S_AUTH_IMPERSONATE_USER environment.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>kubeconfig</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -185,12 +222,32 @@ Parameters
</td>
<td>
<div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div>
+ <div>Multiple Kubernetes config file can be provided using separator &#x27;;&#x27; for Windows platform or &#x27;:&#x27; for others platforms.</div>
<div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version &gt;= 17.17.0. Added in version 2.2.0.</div>
</td>
</tr>
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>no_proxy</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>The comma separated list of hosts/domains/IP/CIDR that shouldn&#x27;t go through proxy. Can also be specified via K8S_AUTH_NO_PROXY environment variable.</div>
+ <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. NO_PROXY).</div>
+ <div>This feature requires kubernetes&gt;=19.15.0. When kubernetes library is less than 19.15.0, it fails even no_proxy set in correct.</div>
+ <div>example value is &quot;localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16&quot;</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>password</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -439,31 +496,31 @@ Examples
- name: Sync all groups from an LDAP server
openshift_adm_groups_sync:
src:
- kind: LDAPSyncConfig
- apiVersion: v1
- url: ldap://localhost:1390
- insecure: true
- bindDN: cn=admin,dc=example,dc=org
- bindPassword: adminpassword
- rfc2307:
- groupsQuery:
- baseDN: "cn=admins,ou=groups,dc=example,dc=org"
- scope: sub
- derefAliases: never
- filter: (objectClass=*)
- pageSize: 0
- groupUIDAttribute: dn
- groupNameAttributes: [ cn ]
- groupMembershipAttributes: [ member ]
- usersQuery:
- baseDN: "ou=users,dc=example,dc=org"
- scope: sub
- derefAliases: never
- pageSize: 0
- userUIDAttribute: dn
- userNameAttributes: [ mail ]
- tolerateMemberNotFoundErrors: true
- tolerateMemberOutOfScopeErrors: true
+ kind: LDAPSyncConfig
+ apiVersion: v1
+ url: ldap://localhost:1390
+ insecure: true
+ bindDN: cn=admin,dc=example,dc=org
+ bindPassword: adminpassword
+ rfc2307:
+ groupsQuery:
+ baseDN: "cn=admins,ou=groups,dc=example,dc=org"
+ scope: sub
+ derefAliases: never
+ filter: (objectClass=*)
+ pageSize: 0
+ groupUIDAttribute: dn
+ groupNameAttributes: [cn]
+ groupMembershipAttributes: [member]
+ usersQuery:
+ baseDN: "ou=users,dc=example,dc=org"
+ scope: sub
+ derefAliases: never
+ pageSize: 0
+ userUIDAttribute: dn
+ userNameAttributes: [mail]
+ tolerateMemberNotFoundErrors: true
+ tolerateMemberOutOfScopeErrors: true
# Sync all groups except the ones from the deny_groups from an LDAP server
- name: Sync all groups from an LDAP server using deny_groups
diff --git a/ansible_collections/community/okd/docs/community.okd.openshift_adm_migrate_template_instances_module.rst b/ansible_collections/community/okd/docs/community.okd.openshift_adm_migrate_template_instances_module.rst
index a7940ca85..c1d54dcfb 100644
--- a/ansible_collections/community/okd/docs/community.okd.openshift_adm_migrate_template_instances_module.rst
+++ b/ansible_collections/community/okd/docs/community.okd.openshift_adm_migrate_template_instances_module.rst
@@ -137,6 +137,41 @@ Parameters
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>impersonate_groups</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Group(s) to impersonate for the operation.</div>
+ <div>Can also be specified via K8S_AUTH_IMPERSONATE_GROUPS environment. Example: Group1,Group2</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>impersonate_user</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Username to impersonate for the operation.</div>
+ <div>Can also be specified via K8S_AUTH_IMPERSONATE_USER environment.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>kubeconfig</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -147,6 +182,7 @@ Parameters
</td>
<td>
<div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div>
+ <div>Multiple Kubernetes config file can be provided using separator &#x27;;&#x27; for Windows platform or &#x27;:&#x27; for others platforms.</div>
<div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version &gt;= 17.17.0. Added in version 2.2.0.</div>
</td>
</tr>
@@ -169,6 +205,25 @@ Parameters
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>no_proxy</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>The comma separated list of hosts/domains/IP/CIDR that shouldn&#x27;t go through proxy. Can also be specified via K8S_AUTH_NO_PROXY environment variable.</div>
+ <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. NO_PROXY).</div>
+ <div>This feature requires kubernetes&gt;=19.15.0. When kubernetes library is less than 19.15.0, it fails even no_proxy set in correct.</div>
+ <div>example value is &quot;localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16&quot;</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>password</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -478,13 +533,13 @@ Examples
.. code-block:: yaml
- name: Migrate TemplateInstances in namespace=test
- community.okd.openshift_adm_migrate_template_instances:
- namespace: test
- register: _result
+ community.okd.openshift_adm_migrate_template_instances:
+ namespace: test
+ register: _result
- - name: Migrate TemplateInstances in all namespaces
- community.okd.openshift_adm_migrate_template_instances:
- register: _result
+ - name: Migrate TemplateInstances in all namespaces
+ community.okd.openshift_adm_migrate_template_instances:
+ register: _result
diff --git a/ansible_collections/community/okd/docs/community.okd.openshift_adm_prune_auth_module.rst b/ansible_collections/community/okd/docs/community.okd.openshift_adm_prune_auth_module.rst
index b4b11c2be..4e8e1dd95 100644
--- a/ansible_collections/community/okd/docs/community.okd.openshift_adm_prune_auth_module.rst
+++ b/ansible_collections/community/okd/docs/community.okd.openshift_adm_prune_auth_module.rst
@@ -137,6 +137,41 @@ Parameters
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>impersonate_groups</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Group(s) to impersonate for the operation.</div>
+ <div>Can also be specified via K8S_AUTH_IMPERSONATE_GROUPS environment. Example: Group1,Group2</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>impersonate_user</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Username to impersonate for the operation.</div>
+ <div>Can also be specified via K8S_AUTH_IMPERSONATE_USER environment.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>kubeconfig</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -147,6 +182,7 @@ Parameters
</td>
<td>
<div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div>
+ <div>Multiple Kubernetes config file can be provided using separator &#x27;;&#x27; for Windows platform or &#x27;:&#x27; for others platforms.</div>
<div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version &gt;= 17.17.0. Added in version 2.2.0.</div>
</td>
</tr>
@@ -203,6 +239,25 @@ Parameters
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>no_proxy</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>The comma separated list of hosts/domains/IP/CIDR that shouldn&#x27;t go through proxy. Can also be specified via K8S_AUTH_NO_PROXY environment variable.</div>
+ <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. NO_PROXY).</div>
+ <div>This feature requires kubernetes&gt;=19.15.0. When kubernetes library is less than 19.15.0, it fails even no_proxy set in correct.</div>
+ <div>example value is &quot;localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16&quot;</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>password</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
diff --git a/ansible_collections/community/okd/docs/community.okd.openshift_adm_prune_builds_module.rst b/ansible_collections/community/okd/docs/community.okd.openshift_adm_prune_builds_module.rst
index 6fb9443b7..ccffb8d2b 100644
--- a/ansible_collections/community/okd/docs/community.okd.openshift_adm_prune_builds_module.rst
+++ b/ansible_collections/community/okd/docs/community.okd.openshift_adm_prune_builds_module.rst
@@ -435,7 +435,7 @@ Examples
# all builds whose associated BuildConfig no longer exists
- name: Run delete orphan Builds
community.okd.openshift_adm_prune_builds:
- orphans: True
+ orphans: true
# Run deleting older completed and failed builds keep younger than 2hours
- name: Run delete builds, keep younger than 2h
diff --git a/ansible_collections/community/okd/docs/community.okd.openshift_adm_prune_deployments_module.rst b/ansible_collections/community/okd/docs/community.okd.openshift_adm_prune_deployments_module.rst
index 16e0deda9..0c73845b6 100644
--- a/ansible_collections/community/okd/docs/community.okd.openshift_adm_prune_deployments_module.rst
+++ b/ansible_collections/community/okd/docs/community.okd.openshift_adm_prune_deployments_module.rst
@@ -137,6 +137,41 @@ Parameters
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>impersonate_groups</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Group(s) to impersonate for the operation.</div>
+ <div>Can also be specified via K8S_AUTH_IMPERSONATE_GROUPS environment. Example: Group1,Group2</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>impersonate_user</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Username to impersonate for the operation.</div>
+ <div>Can also be specified via K8S_AUTH_IMPERSONATE_USER environment.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>keep_younger_than</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -162,6 +197,7 @@ Parameters
</td>
<td>
<div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div>
+ <div>Multiple Kubernetes config file can be provided using separator &#x27;;&#x27; for Windows platform or &#x27;:&#x27; for others platforms.</div>
<div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version &gt;= 17.17.0. Added in version 2.2.0.</div>
</td>
</tr>
@@ -183,6 +219,25 @@ Parameters
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>no_proxy</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>The comma separated list of hosts/domains/IP/CIDR that shouldn&#x27;t go through proxy. Can also be specified via K8S_AUTH_NO_PROXY environment variable.</div>
+ <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. NO_PROXY).</div>
+ <div>This feature requires kubernetes&gt;=19.15.0. When kubernetes library is less than 19.15.0, it fails even no_proxy set in correct.</div>
+ <div>example value is &quot;localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16&quot;</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>orphans</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -382,7 +437,7 @@ Examples
- name: Prune orphans deployments, keep younger than 2hours
community.okd.openshift_adm_prune_deployments:
- orphans: True
+ orphans: true
keep_younger_than: 120
diff --git a/ansible_collections/community/okd/docs/community.okd.openshift_adm_prune_images_module.rst b/ansible_collections/community/okd/docs/community.okd.openshift_adm_prune_images_module.rst
index 08fd357a3..9978b967c 100644
--- a/ansible_collections/community/okd/docs/community.okd.openshift_adm_prune_images_module.rst
+++ b/ansible_collections/community/okd/docs/community.okd.openshift_adm_prune_images_module.rst
@@ -180,6 +180,41 @@ Parameters
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>impersonate_groups</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Group(s) to impersonate for the operation.</div>
+ <div>Can also be specified via K8S_AUTH_IMPERSONATE_GROUPS environment. Example: Group1,Group2</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>impersonate_user</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Username to impersonate for the operation.</div>
+ <div>Can also be specified via K8S_AUTH_IMPERSONATE_USER environment.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>keep_younger_than</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -205,6 +240,7 @@ Parameters
</td>
<td>
<div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div>
+ <div>Multiple Kubernetes config file can be provided using separator &#x27;;&#x27; for Windows platform or &#x27;:&#x27; for others platforms.</div>
<div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version &gt;= 17.17.0. Added in version 2.2.0.</div>
</td>
</tr>
@@ -226,6 +262,25 @@ Parameters
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>no_proxy</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>The comma separated list of hosts/domains/IP/CIDR that shouldn&#x27;t go through proxy. Can also be specified via K8S_AUTH_NO_PROXY environment variable.</div>
+ <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. NO_PROXY).</div>
+ <div>This feature requires kubernetes&gt;=19.15.0. When kubernetes library is less than 19.15.0, it fails even no_proxy set in correct.</div>
+ <div>example value is &quot;localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16&quot;</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>password</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
diff --git a/ansible_collections/community/okd/docs/community.okd.openshift_auth_module.rst b/ansible_collections/community/okd/docs/community.okd.openshift_auth_module.rst
index 3619940ea..a6e77039e 100644
--- a/ansible_collections/community/okd/docs/community.okd.openshift_auth_module.rst
+++ b/ansible_collections/community/okd/docs/community.okd.openshift_auth_module.rst
@@ -171,37 +171,40 @@ Examples
.. code-block:: yaml
- - hosts: localhost
+ - name: Example Playbook
+ hosts: localhost
module_defaults:
- group/k8s:
+ group/community.okd.okd:
host: https://k8s.example.com/
ca_cert: ca.pem
tasks:
- - block:
- # It's good practice to store login credentials in a secure vault and not
- # directly in playbooks.
- - include_vars: openshift_passwords.yml
-
- - name: Log in (obtain access token)
- community.okd.openshift_auth:
- username: admin
- password: "{{ openshift_admin_password }}"
- register: openshift_auth_results
-
- # Previous task provides the token/api_key, while all other parameters
- # are taken from module_defaults
- - name: Get a list of all pods from any namespace
- kubernetes.core.k8s_info:
- api_key: "{{ openshift_auth_results.openshift_auth.api_key }}"
- kind: Pod
- register: pod_list
-
- always:
- - name: If login succeeded, try to log out (revoke access token)
- when: openshift_auth_results.openshift_auth.api_key is defined
- community.okd.openshift_auth:
- state: absent
- api_key: "{{ openshift_auth_results.openshift_auth.api_key }}"
+ - name: Authenticate to OpenShift cluster and gell a list of all pods from any namespace
+ block:
+ # It's good practice to store login credentials in a secure vault and not
+ # directly in playbooks.
+ - name: Include 'openshift_passwords.yml'
+ ansible.builtin.include_vars: openshift_passwords.yml
+
+ - name: Log in (obtain access token)
+ community.okd.openshift_auth:
+ username: admin
+ password: "{{ openshift_admin_password }}"
+ register: openshift_auth_results
+
+ # Previous task provides the token/api_key, while all other parameters
+ # are taken from module_defaults
+ - name: Get a list of all pods from any namespace
+ kubernetes.core.k8s_info:
+ api_key: "{{ openshift_auth_results.openshift_auth.api_key }}"
+ kind: Pod
+ register: pod_list
+
+ always:
+ - name: If login succeeded, try to log out (revoke access token)
+ when: openshift_auth_results.openshift_auth.api_key is defined
+ community.okd.openshift_auth:
+ state: absent
+ api_key: "{{ openshift_auth_results.openshift_auth.api_key }}"
diff --git a/ansible_collections/community/okd/docs/community.okd.openshift_import_image_module.rst b/ansible_collections/community/okd/docs/community.okd.openshift_import_image_module.rst
index 920c8405b..c1bafd173 100644
--- a/ansible_collections/community/okd/docs/community.okd.openshift_import_image_module.rst
+++ b/ansible_collections/community/okd/docs/community.okd.openshift_import_image_module.rst
@@ -160,6 +160,41 @@ Parameters
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>impersonate_groups</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Group(s) to impersonate for the operation.</div>
+ <div>Can also be specified via K8S_AUTH_IMPERSONATE_GROUPS environment. Example: Group1,Group2</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>impersonate_user</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Username to impersonate for the operation.</div>
+ <div>Can also be specified via K8S_AUTH_IMPERSONATE_USER environment.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>kubeconfig</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -170,6 +205,7 @@ Parameters
</td>
<td>
<div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div>
+ <div>Multiple Kubernetes config file can be provided using separator &#x27;;&#x27; for Windows platform or &#x27;:&#x27; for others platforms.</div>
<div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version &gt;= 17.17.0. Added in version 2.2.0.</div>
</td>
</tr>
@@ -209,6 +245,25 @@ Parameters
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>no_proxy</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>The comma separated list of hosts/domains/IP/CIDR that shouldn&#x27;t go through proxy. Can also be specified via K8S_AUTH_NO_PROXY environment variable.</div>
+ <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. NO_PROXY).</div>
+ <div>This feature requires kubernetes&gt;=19.15.0. When kubernetes library is less than 19.15.0, it fails even no_proxy set in correct.</div>
+ <div>example value is &quot;localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16&quot;</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>password</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
diff --git a/ansible_collections/community/okd/docs/community.okd.openshift_inventory.rst b/ansible_collections/community/okd/docs/community.okd.openshift_inventory.rst
index 57527f454..9015fb09f 100644
--- a/ansible_collections/community/okd/docs/community.okd.openshift_inventory.rst
+++ b/ansible_collections/community/okd/docs/community.okd.openshift_inventory.rst
@@ -13,6 +13,15 @@ community.okd.openshift
:local:
:depth: 1
+DEPRECATED
+----------
+:Removed in collection release after
+:Why: As discussed in https://github.com/ansible-collections/kubernetes.core/issues/31, we decided to
+remove the openshift inventory plugin in release 4.0.0.
+
+:Alternative: Use :ref:`kubernetes.core.k8s_info <kubernetes.core.k8s_info_module>` and :ref:`ansible.builtin.add_host <ansible.builtin.add_host_module>` instead.
+
+
Synopsis
--------
@@ -320,24 +329,24 @@ Examples
# File must be named openshift.yaml or openshift.yml
- # Authenticate with token, and return all pods and services for all namespaces
- plugin: community.okd.openshift
- connections:
- - host: https://192.168.64.4:8443
- api_key: xxxxxxxxxxxxxxxx
- verify_ssl: false
+ - name: Authenticate with token, and return all pods and services for all namespaces
+ plugin: community.okd.openshift
+ connections:
+ - host: https://192.168.64.4:8443
+ api_key: xxxxxxxxxxxxxxxx
+ verify_ssl: false
- # Use default config (~/.kube/config) file and active context, and return objects for a specific namespace
- plugin: community.okd.openshift
- connections:
- - namespaces:
- - testing
+ - name: Use default config (~/.kube/config) file and active context, and return objects for a specific namespace
+ plugin: community.okd.openshift
+ connections:
+ - namespaces:
+ - testing
- # Use a custom config file, and a specific context.
- plugin: community.okd.openshift
- connections:
- - kubeconfig: /path/to/config
- context: 'awx/192-168-64-4:8443/developer'
+ - name: Use a custom config file, and a specific context.
+ plugin: community.okd.openshift
+ connections:
+ - kubeconfig: /path/to/config
+ context: 'awx/192-168-64-4:8443/developer'
@@ -346,10 +355,14 @@ Status
------
+- This inventory will be removed in version 4.0.0. *[deprecated]*
+- For more information see `DEPRECATED`_.
+
+
Authors
~~~~~~~
-- Chris Houseknecht <@chouseknecht>
+- Chris Houseknecht (@chouseknecht)
.. hint::
diff --git a/ansible_collections/community/okd/docs/community.okd.openshift_process_module.rst b/ansible_collections/community/okd/docs/community.okd.openshift_process_module.rst
index 7de7e8c3a..9ccc70221 100644
--- a/ansible_collections/community/okd/docs/community.okd.openshift_process_module.rst
+++ b/ansible_collections/community/okd/docs/community.okd.openshift_process_module.rst
@@ -140,6 +140,41 @@ Parameters
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>impersonate_groups</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Group(s) to impersonate for the operation.</div>
+ <div>Can also be specified via K8S_AUTH_IMPERSONATE_GROUPS environment. Example: Group1,Group2</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>impersonate_user</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Username to impersonate for the operation.</div>
+ <div>Can also be specified via K8S_AUTH_IMPERSONATE_USER environment.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>kubeconfig</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -150,6 +185,7 @@ Parameters
</td>
<td>
<div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div>
+ <div>Multiple Kubernetes config file can be provided using separator &#x27;;&#x27; for Windows platform or &#x27;:&#x27; for others platforms.</div>
<div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version &gt;= 17.17.0. Added in version 2.2.0.</div>
</td>
</tr>
@@ -192,7 +228,7 @@ Parameters
<b>namespace_target</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
- <span style="color: purple">-</span>
+ <span style="color: purple">string</span>
</div>
</td>
<td>
@@ -205,6 +241,25 @@ Parameters
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>no_proxy</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>The comma separated list of hosts/domains/IP/CIDR that shouldn&#x27;t go through proxy. Can also be specified via K8S_AUTH_NO_PROXY environment variable.</div>
+ <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. NO_PROXY).</div>
+ <div>This feature requires kubernetes&gt;=19.15.0. When kubernetes library is less than 19.15.0, it fails even no_proxy set in correct.</div>
+ <div>example value is &quot;localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16&quot;</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>parameter_file</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -389,6 +444,7 @@ Parameters
<td>
<div>Provide a path to a file containing a valid YAML definition of an object or objects to be created or updated. Mutually exclusive with <em>resource_definition</em>. NOTE: <em>kind</em>, <em>api_version</em>, <em>name</em>, and <em>namespace</em> will be overwritten by corresponding values found in the configuration read in from the <em>src</em> file.</div>
<div>Reads from the local file system. To read from the Ansible controller&#x27;s file system, including vaulted files, use the file lookup plugin or template lookup plugin, combined with the from_yaml filter, and pass the result to <em>resource_definition</em>. See Examples below.</div>
+ <div>The URL to manifest files that can be used to create the resource. Added in version 2.4.0.</div>
<div>Mutually exclusive with <em>template</em> in case of <span class='module'>kubernetes.core.k8s</span> module.</div>
</td>
</tr>
@@ -616,8 +672,8 @@ Examples
community.okd.k8s:
namespace: default
definition: '{{ item }}'
- wait: yes
- apply: yes
+ wait: true
+ apply: true
loop: '{{ result.resources }}'
- name: Process a template with parameters from an env file and create the resources
@@ -627,7 +683,7 @@ Examples
namespace_target: default
parameter_file: 'files/nginx.env'
state: present
- wait: yes
+ wait: true
- name: Process a local template and create the resources
community.okd.openshift_process:
@@ -642,7 +698,7 @@ Examples
parameter_file: files/example.env
namespace_target: default
state: absent
- wait: yes
+ wait: true
diff --git a/ansible_collections/community/okd/docs/community.okd.openshift_registry_info_module.rst b/ansible_collections/community/okd/docs/community.okd.openshift_registry_info_module.rst
index f556d0f64..563678590 100644
--- a/ansible_collections/community/okd/docs/community.okd.openshift_registry_info_module.rst
+++ b/ansible_collections/community/okd/docs/community.okd.openshift_registry_info_module.rst
@@ -159,6 +159,41 @@ Parameters
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>impersonate_groups</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Group(s) to impersonate for the operation.</div>
+ <div>Can also be specified via K8S_AUTH_IMPERSONATE_GROUPS environment. Example: Group1,Group2</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>impersonate_user</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Username to impersonate for the operation.</div>
+ <div>Can also be specified via K8S_AUTH_IMPERSONATE_USER environment.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>kubeconfig</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -169,12 +204,32 @@ Parameters
</td>
<td>
<div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div>
+ <div>Multiple Kubernetes config file can be provided using separator &#x27;;&#x27; for Windows platform or &#x27;:&#x27; for others platforms.</div>
<div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version &gt;= 17.17.0. Added in version 2.2.0.</div>
</td>
</tr>
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>no_proxy</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>The comma separated list of hosts/domains/IP/CIDR that shouldn&#x27;t go through proxy. Can also be specified via K8S_AUTH_NO_PROXY environment variable.</div>
+ <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. NO_PROXY).</div>
+ <div>This feature requires kubernetes&gt;=19.15.0. When kubernetes library is less than 19.15.0, it fails even no_proxy set in correct.</div>
+ <div>example value is &quot;localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16&quot;</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>password</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -356,7 +411,7 @@ Examples
# Read registry integrated information and attempt to contact using local client.
- name: Attempt to contact integrated registry using local client
community.okd.openshift_registry_info:
- check: yes
+ check: true
diff --git a/ansible_collections/community/okd/docs/community.okd.openshift_route_module.rst b/ansible_collections/community/okd/docs/community.okd.openshift_route_module.rst
index fc62623c5..4e939df8d 100644
--- a/ansible_collections/community/okd/docs/community.okd.openshift_route_module.rst
+++ b/ansible_collections/community/okd/docs/community.okd.openshift_route_module.rst
@@ -190,6 +190,41 @@ Parameters
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>impersonate_groups</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Group(s) to impersonate for the operation.</div>
+ <div>Can also be specified via K8S_AUTH_IMPERSONATE_GROUPS environment. Example: Group1,Group2</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>impersonate_user</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Username to impersonate for the operation.</div>
+ <div>Can also be specified via K8S_AUTH_IMPERSONATE_USER environment.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>kubeconfig</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -200,6 +235,7 @@ Parameters
</td>
<td>
<div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div>
+ <div>Multiple Kubernetes config file can be provided using separator &#x27;;&#x27; for Windows platform or &#x27;:&#x27; for others platforms.</div>
<div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version &gt;= 17.17.0. Added in version 2.2.0.</div>
</td>
</tr>
@@ -255,6 +291,25 @@ Parameters
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>no_proxy</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>The comma separated list of hosts/domains/IP/CIDR that shouldn&#x27;t go through proxy. Can also be specified via K8S_AUTH_NO_PROXY environment variable.</div>
+ <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. NO_PROXY).</div>
+ <div>This feature requires kubernetes&gt;=19.15.0. When kubernetes library is less than 19.15.0, it fails even no_proxy set in correct.</div>
+ <div>example value is &quot;localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16&quot;</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>password</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -801,10 +856,10 @@ Examples
app: hello-kubernetes
spec:
containers:
- - name: hello-kubernetes
- image: paulbouwer/hello-kubernetes:1.8
- ports:
- - containerPort: 8080
+ - name: hello-kubernetes
+ image: paulbouwer/hello-kubernetes:1.8
+ ports:
+ - containerPort: 8080
- name: Create Service for the hello-world deployment
community.okd.k8s:
@@ -816,8 +871,8 @@ Examples
namespace: default
spec:
ports:
- - port: 80
- targetPort: 8080
+ - port: 80
+ targetPort: 8080
selector:
app: hello-kubernetes
diff --git a/ansible_collections/community/okd/meta/runtime.yml b/ansible_collections/community/okd/meta/runtime.yml
index e1ab57a85..533a03020 100644
--- a/ansible_collections/community/okd/meta/runtime.yml
+++ b/ansible_collections/community/okd/meta/runtime.yml
@@ -1,5 +1,5 @@
---
-requires_ansible: '>=2.9.17'
+requires_ansible: '>=2.14.0'
action_groups:
okd:
- k8s
@@ -17,6 +17,13 @@ plugin_routing:
modules:
k8s_auth:
redirect: community.okd.openshift_auth
+ inventory:
+ openshift:
+ deprecation:
+ removal_version: 4.0.0
+ warning_text: >-
+ The openshift inventory plugin has been deprecated and
+ will be removed in release 4.0.0.
action:
k8s:
redirect: kubernetes.core.k8s_info
diff --git a/ansible_collections/community/okd/molecule/default/converge.yml b/ansible_collections/community/okd/molecule/default/converge.yml
index 7fe9e8209..fb45006c3 100644
--- a/ansible_collections/community/okd/molecule/default/converge.yml
+++ b/ansible_collections/community/okd/molecule/default/converge.yml
@@ -21,16 +21,13 @@
debug:
var: output
- - name: Create deployment config
+ - name: Create deployment
community.okd.k8s:
state: present
name: hello-world
namespace: testing
definition: '{{ okd_dc_template }}'
wait: yes
- wait_condition:
- type: Available
- status: True
vars:
k8s_pod_name: hello-world
k8s_pod_image: python
@@ -71,19 +68,12 @@
namespace: '{{ namespace }}'
definition: '{{ okd_imagestream_template }}'
- - name: Create DeploymentConfig to reference ImageStream
- community.okd.k8s:
- name: '{{ k8s_pod_name }}'
- namespace: '{{ namespace }}'
- definition: '{{ okd_dc_template }}'
- vars:
- k8s_pod_name: is-idempotent-dc
-
- name: Create Deployment to reference ImageStream
community.okd.k8s:
name: '{{ k8s_pod_name }}'
namespace: '{{ namespace }}'
definition: '{{ k8s_deployment_template | combine(metadata) }}'
+ wait: true
vars:
k8s_pod_annotations:
"alpha.image.policy.openshift.io/resolve-names": "*"
diff --git a/ansible_collections/community/okd/molecule/default/files/pod-template.yaml b/ansible_collections/community/okd/molecule/default/files/pod-template.yaml
index ac388ad67..3a1c8f1b8 100644
--- a/ansible_collections/community/okd/molecule/default/files/pod-template.yaml
+++ b/ansible_collections/community/okd/molecule/default/files/pod-template.yaml
@@ -10,14 +10,14 @@ objects:
name: "Pod-${{ NAME }}"
spec:
containers:
- - args:
- - /bin/sh
- - -c
- - while true; do echo $(date); sleep 15; done
- image: python:3.7-alpine
- imagePullPolicy: Always
- name: python
+ - args:
+ - /bin/sh
+ - -c
+ - while true; do echo $(date); sleep 15; done
+ image: python:3.7-alpine
+ imagePullPolicy: Always
+ name: python
parameters:
- - name: NAME
+ - name: NAME
description: trailing name of the pod
required: true
diff --git a/ansible_collections/community/okd/molecule/default/files/simple-template.yaml b/ansible_collections/community/okd/molecule/default/files/simple-template.yaml
index 29c85b9cd..c8270f776 100644
--- a/ansible_collections/community/okd/molecule/default/files/simple-template.yaml
+++ b/ansible_collections/community/okd/molecule/default/files/simple-template.yaml
@@ -13,22 +13,22 @@ metadata:
tags: quickstart,examples
name: simple-example
objects:
-- apiVersion: v1
- kind: ConfigMap
- metadata:
- annotations:
- description: Big example
- name: ${NAME}
- data:
- content: "${CONTENT}"
+ - apiVersion: v1
+ kind: ConfigMap
+ metadata:
+ annotations:
+ description: Big example
+ name: ${NAME}
+ data:
+ content: "${CONTENT}"
parameters:
-- description: The name assigned to the ConfigMap
- displayName: Name
- name: NAME
- required: true
- value: example
-- description: The value for the content key of the configmap
- displayName: Content
- name: CONTENT
- required: true
- value: ''
+ - description: The name assigned to the ConfigMap
+ displayName: Name
+ name: NAME
+ required: true
+ value: example
+ - description: The value for the content key of the configmap
+ displayName: Content
+ name: CONTENT
+ required: true
+ value: ''
diff --git a/ansible_collections/community/okd/molecule/default/molecule.yml b/ansible_collections/community/okd/molecule/default/molecule.yml
index 43407bd26..7ca7e2c5b 100644
--- a/ansible_collections/community/okd/molecule/default/molecule.yml
+++ b/ansible_collections/community/okd/molecule/default/molecule.yml
@@ -4,7 +4,7 @@ dependency:
options:
requirements-file: requirements.yml
driver:
- name: delegated
+ name: default
platforms:
- name: cluster
groups:
@@ -17,9 +17,6 @@ provisioner:
config_options:
inventory:
enable_plugins: community.okd.openshift
- lint: |
- set -e
- ansible-lint
inventory:
hosts:
plugin: community.okd.openshift
@@ -34,14 +31,10 @@ provisioner:
ANSIBLE_COLLECTIONS_PATHS: ${OVERRIDE_COLLECTION_PATH:-$MOLECULE_PROJECT_DIRECTORY}
verifier:
name: ansible
- lint: |
- set -e
- ansible-lint
scenario:
name: default
test_sequence:
- dependency
- - lint
- syntax
- prepare
- converge
diff --git a/ansible_collections/community/okd/molecule/default/prepare.yml b/ansible_collections/community/okd/molecule/default/prepare.yml
index f155ec1d4..0d0361ab2 100644
--- a/ansible_collections/community/okd/molecule/default/prepare.yml
+++ b/ansible_collections/community/okd/molecule/default/prepare.yml
@@ -37,12 +37,12 @@
name: cluster
spec:
identityProviders:
- - name: htpasswd_provider
- mappingMethod: claim
- type: HTPasswd
- htpasswd:
- fileData:
- name: htpass-secret
+ - name: htpasswd_provider
+ mappingMethod: claim
+ type: HTPasswd
+ htpasswd:
+ fileData:
+ name: htpass-secret
- name: Create ClusterRoleBinding for test user
community.okd.k8s:
diff --git a/ansible_collections/community/okd/molecule/default/roles/openshift_adm_groups/library/openshift_ldap_entry_info.py b/ansible_collections/community/okd/molecule/default/roles/openshift_adm_groups/library/openshift_ldap_entry_info.py
index ba49f724d..c5bde3e5f 100644
--- a/ansible_collections/community/okd/molecule/default/roles/openshift_adm_groups/library/openshift_ldap_entry_info.py
+++ b/ansible_collections/community/okd/molecule/default/roles/openshift_adm_groups/library/openshift_ldap_entry_info.py
@@ -89,6 +89,7 @@ def execute():
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
connection = ldap.initialize(module.params['server_uri'])
+ connection.set_option(ldap.OPT_REFERRALS, 0)
try:
connection.simple_bind_s(module.params['bind_dn'], module.params['bind_pw'])
except ldap.LDAPError as e:
diff --git a/ansible_collections/community/okd/molecule/default/roles/openshift_adm_groups/tasks/activeDirectory.yml b/ansible_collections/community/okd/molecule/default/roles/openshift_adm_groups/tasks/activeDirectory.yml
index da99f324e..78131a876 100644
--- a/ansible_collections/community/okd/molecule/default/roles/openshift_adm_groups/tasks/activeDirectory.yml
+++ b/ansible_collections/community/okd/molecule/default/roles/openshift_adm_groups/tasks/activeDirectory.yml
@@ -1,227 +1,227 @@
+---
- block:
- - name: Get LDAP definition
- set_fact:
- ldap_entries: "{{ lookup('template', 'ad/definition.j2') | from_yaml }}"
-
- - name: Delete openshift groups if existing
- community.okd.k8s:
- state: absent
- kind: Group
- version: "user.openshift.io/v1"
- name: "{{ item }}"
- with_items:
- - admins
- - developers
-
- - name: Delete existing LDAP Entries
- openshift_ldap_entry:
- bind_dn: "{{ ldap_bind_dn }}"
- bind_pw: "{{ ldap_bind_pw }}"
- server_uri: "{{ ldap_server_uri }}"
- dn: "{{ item.dn }}"
- state: absent
- with_items: "{{ ldap_entries.users + ldap_entries.units | reverse | list }}"
-
- - name: Create LDAP Entries
- openshift_ldap_entry:
- bind_dn: "{{ ldap_bind_dn }}"
- bind_pw: "{{ ldap_bind_pw }}"
- server_uri: "{{ ldap_server_uri }}"
- dn: "{{ item.dn }}"
- attributes: "{{ item.attr }}"
- objectClass: "{{ item.class }}"
- with_items: "{{ ldap_entries.units + ldap_entries.users }}"
-
- - name: Load test configurations
- set_fact:
- sync_config: "{{ lookup('template', 'ad/sync-config.j2') | from_yaml }}"
-
- - name: Synchronize Groups
- community.okd.openshift_adm_groups_sync:
- config: "{{ sync_config }}"
- check_mode: yes
- register: result
-
- - name: Validate Group going to be created
- assert:
- that:
- - result is changed
- - admins_group
- - devs_group
- - '"jane.smith@ansible.org" in {{ admins_group.users }}'
- - '"jim.adams@ansible.org" in {{ admins_group.users }}'
- - '"jordanbulls@ansible.org" in {{ devs_group.users }}'
- - admins_group.users | length == 2
- - devs_group.users | length == 1
- vars:
- admins_group: "{{ result.groups | selectattr('metadata.name', 'equalto', 'admins') | first }}"
- devs_group: "{{ result.groups | selectattr('metadata.name', 'equalto', 'developers') | first }}"
-
-
- - name: Synchronize Groups (Remove check_mode)
- community.okd.openshift_adm_groups_sync:
- config: "{{ sync_config }}"
- register: result
-
- - name: Validate Group going to be created
- assert:
- that:
- - result is changed
-
- - name: Read admins group
- kubernetes.core.k8s_info:
- kind: Group
- version: "user.openshift.io/v1"
- name: admins
- register: result
-
- - name: Validate group was created
- assert:
- that:
- - result.resources | length == 1
- - '"jane.smith@ansible.org" in {{ result.resources.0.users }}'
- - '"jim.adams@ansible.org" in {{ result.resources.0.users }}'
-
- - name: Read developers group
- kubernetes.core.k8s_info:
- kind: Group
- version: "user.openshift.io/v1"
- name: developers
- register: result
-
- - name: Validate group was created
- assert:
- that:
- - result.resources | length == 1
- - '"jordanbulls@ansible.org" in {{ result.resources.0.users }}'
-
- - name: Define user dn to delete
- set_fact:
- user_to_delete: "cn=Jane,ou=engineers,ou=activeD,{{ ldap_root }}"
-
- - name: Delete 1 admin user
- openshift_ldap_entry:
- bind_dn: "{{ ldap_bind_dn }}"
- bind_pw: "{{ ldap_bind_pw }}"
- server_uri: "{{ ldap_server_uri }}"
- dn: "{{ user_to_delete }}"
- state: absent
-
- - name: Synchronize Openshift groups using allow_groups
- community.okd.openshift_adm_groups_sync:
- config: "{{ sync_config }}"
- allow_groups:
- - developers
- type: openshift
- register: openshift_sync
-
- - name: Validate that only developers group was sync
- assert:
- that:
- - openshift_sync is changed
- - openshift_sync.groups | length == 1
- - openshift_sync.groups.0.metadata.name == "developers"
-
- - name: Read admins group
- kubernetes.core.k8s_info:
- kind: Group
- version: "user.openshift.io/v1"
- name: admins
- register: result
-
- - name: Validate admins group content has not changed
- assert:
- that:
- - result.resources | length == 1
- - '"jane.smith@ansible.org" in {{ result.resources.0.users }}'
- - '"jim.adams@ansible.org" in {{ result.resources.0.users }}'
-
- - name: Synchronize Openshift groups using deny_groups
- community.okd.openshift_adm_groups_sync:
- config: "{{ sync_config }}"
- deny_groups:
+ - name: Get LDAP definition
+ set_fact:
+ ldap_entries: "{{ lookup('template', 'ad/definition.j2') | from_yaml }}"
+
+ - name: Delete openshift groups if existing
+ community.okd.k8s:
+ state: absent
+ kind: Group
+ version: "user.openshift.io/v1"
+ name: "{{ item }}"
+ with_items:
+ - admins
- developers
- type: openshift
- register: openshift_sync
-
- - name: Validate that only admins group was sync
- assert:
- that:
- - openshift_sync is changed
- - openshift_sync.groups | length == 1
- - openshift_sync.groups.0.metadata.name == "admins"
-
- - name: Read admins group
- kubernetes.core.k8s_info:
- kind: Group
- version: "user.openshift.io/v1"
- name: admins
- register: result
-
- - name: Validate admins group contains only 1 user now
- assert:
- that:
- - result.resources | length == 1
- - result.resources.0.users == ["jim.adams@ansible.org"]
-
- - name: Set users to delete (delete all developers users)
- set_fact:
- user_to_delete: "cn=Jordan,ou=engineers,ou=activeD,{{ ldap_root }}"
-
- - name: Delete 1 admin user
- openshift_ldap_entry:
- bind_dn: "{{ ldap_bind_dn }}"
- bind_pw: "{{ ldap_bind_pw }}"
- server_uri: "{{ ldap_server_uri }}"
- dn: "{{ user_to_delete }}"
- state: absent
-
- - name: Prune groups
- community.okd.openshift_adm_groups_sync:
- config: "{{ sync_config }}"
- state: absent
- register: result
-
- - name: Validate result is changed (only developers group be deleted)
- assert:
- that:
- - result is changed
- - result.groups | length == 1
-
- - name: Get developers group info
- kubernetes.core.k8s_info:
- kind: Group
- version: "user.openshift.io/v1"
- name: developers
- register: result
-
- - name: assert group was deleted
- assert:
- that:
- - result.resources | length == 0
-
- - name: Get admins group info
- kubernetes.core.k8s_info:
- kind: Group
- version: "user.openshift.io/v1"
- name: admins
- register: result
-
- - name: assert group was not deleted
- assert:
- that:
- - result.resources | length == 1
-
- - name: Prune groups once again (idempotency)
- community.okd.openshift_adm_groups_sync:
- config: "{{ sync_config }}"
- state: absent
- register: result
-
- - name: Assert nothing was changed
- assert:
- that:
- - result is not changed
+
+ - name: Delete existing LDAP Entries
+ openshift_ldap_entry:
+ bind_dn: "{{ ldap_bind_dn }}"
+ bind_pw: "{{ ldap_bind_pw }}"
+ server_uri: "{{ ldap_server_uri }}"
+ dn: "{{ item.dn }}"
+ state: absent
+ with_items: "{{ ldap_entries.users + ldap_entries.units | reverse | list }}"
+
+ - name: Create LDAP Entries
+ openshift_ldap_entry:
+ bind_dn: "{{ ldap_bind_dn }}"
+ bind_pw: "{{ ldap_bind_pw }}"
+ server_uri: "{{ ldap_server_uri }}"
+ dn: "{{ item.dn }}"
+ attributes: "{{ item.attr }}"
+ objectClass: "{{ item.class }}"
+ with_items: "{{ ldap_entries.units + ldap_entries.users }}"
+
+ - name: Load test configurations
+ set_fact:
+ sync_config: "{{ lookup('template', 'ad/sync-config.j2') | from_yaml }}"
+
+ - name: Synchronize Groups
+ community.okd.openshift_adm_groups_sync:
+ config: "{{ sync_config }}"
+ check_mode: yes
+ register: result
+
+ - name: Validate Group going to be created
+ assert:
+ that:
+ - result is changed
+ - admins_group
+ - devs_group
+ - '"jane.smith@ansible.org" in {{ admins_group.users }}'
+ - '"jim.adams@ansible.org" in {{ admins_group.users }}'
+ - '"jordanbulls@ansible.org" in {{ devs_group.users }}'
+ - admins_group.users | length == 2
+ - devs_group.users | length == 1
+ vars:
+ admins_group: "{{ result.groups | selectattr('metadata.name', 'equalto', 'admins') | first }}"
+ devs_group: "{{ result.groups | selectattr('metadata.name', 'equalto', 'developers') | first }}"
+
+ - name: Synchronize Groups (Remove check_mode)
+ community.okd.openshift_adm_groups_sync:
+ config: "{{ sync_config }}"
+ register: result
+
+ - name: Validate Group going to be created
+ assert:
+ that:
+ - result is changed
+
+ - name: Read admins group
+ kubernetes.core.k8s_info:
+ kind: Group
+ version: "user.openshift.io/v1"
+ name: admins
+ register: result
+
+ - name: Validate group was created
+ assert:
+ that:
+ - result.resources | length == 1
+ - '"jane.smith@ansible.org" in {{ result.resources.0.users }}'
+ - '"jim.adams@ansible.org" in {{ result.resources.0.users }}'
+
+ - name: Read developers group
+ kubernetes.core.k8s_info:
+ kind: Group
+ version: "user.openshift.io/v1"
+ name: developers
+ register: result
+
+ - name: Validate group was created
+ assert:
+ that:
+ - result.resources | length == 1
+ - '"jordanbulls@ansible.org" in {{ result.resources.0.users }}'
+
+ - name: Define user dn to delete
+ set_fact:
+ user_to_delete: "cn=Jane,ou=engineers,ou=activeD,{{ ldap_root }}"
+
+ - name: Delete 1 admin user
+ openshift_ldap_entry:
+ bind_dn: "{{ ldap_bind_dn }}"
+ bind_pw: "{{ ldap_bind_pw }}"
+ server_uri: "{{ ldap_server_uri }}"
+ dn: "{{ user_to_delete }}"
+ state: absent
+
+ - name: Synchronize Openshift groups using allow_groups
+ community.okd.openshift_adm_groups_sync:
+ config: "{{ sync_config }}"
+ allow_groups:
+ - developers
+ type: openshift
+ register: openshift_sync
+
+ - name: Validate that only developers group was sync
+ assert:
+ that:
+ - openshift_sync is changed
+ - openshift_sync.groups | length == 1
+ - openshift_sync.groups.0.metadata.name == "developers"
+
+ - name: Read admins group
+ kubernetes.core.k8s_info:
+ kind: Group
+ version: "user.openshift.io/v1"
+ name: admins
+ register: result
+
+ - name: Validate admins group content has not changed
+ assert:
+ that:
+ - result.resources | length == 1
+ - '"jane.smith@ansible.org" in {{ result.resources.0.users }}'
+ - '"jim.adams@ansible.org" in {{ result.resources.0.users }}'
+
+ - name: Synchronize Openshift groups using deny_groups
+ community.okd.openshift_adm_groups_sync:
+ config: "{{ sync_config }}"
+ deny_groups:
+ - developers
+ type: openshift
+ register: openshift_sync
+
+ - name: Validate that only admins group was sync
+ assert:
+ that:
+ - openshift_sync is changed
+ - openshift_sync.groups | length == 1
+ - openshift_sync.groups.0.metadata.name == "admins"
+
+ - name: Read admins group
+ kubernetes.core.k8s_info:
+ kind: Group
+ version: "user.openshift.io/v1"
+ name: admins
+ register: result
+
+ - name: Validate admins group contains only 1 user now
+ assert:
+ that:
+ - result.resources | length == 1
+ - result.resources.0.users == ["jim.adams@ansible.org"]
+
+ - name: Set users to delete (delete all developers users)
+ set_fact:
+ user_to_delete: "cn=Jordan,ou=engineers,ou=activeD,{{ ldap_root }}"
+
+ - name: Delete 1 admin user
+ openshift_ldap_entry:
+ bind_dn: "{{ ldap_bind_dn }}"
+ bind_pw: "{{ ldap_bind_pw }}"
+ server_uri: "{{ ldap_server_uri }}"
+ dn: "{{ user_to_delete }}"
+ state: absent
+
+ - name: Prune groups
+ community.okd.openshift_adm_groups_sync:
+ config: "{{ sync_config }}"
+ state: absent
+ register: result
+
+ - name: Validate result is changed (only developers group be deleted)
+ assert:
+ that:
+ - result is changed
+ - result.groups | length == 1
+
+ - name: Get developers group info
+ kubernetes.core.k8s_info:
+ kind: Group
+ version: "user.openshift.io/v1"
+ name: developers
+ register: result
+
+ - name: assert group was deleted
+ assert:
+ that:
+ - result.resources | length == 0
+
+ - name: Get admins group info
+ kubernetes.core.k8s_info:
+ kind: Group
+ version: "user.openshift.io/v1"
+ name: admins
+ register: result
+
+ - name: assert group was not deleted
+ assert:
+ that:
+ - result.resources | length == 1
+
+ - name: Prune groups once again (idempotency)
+ community.okd.openshift_adm_groups_sync:
+ config: "{{ sync_config }}"
+ state: absent
+ register: result
+
+ - name: Assert nothing was changed
+ assert:
+ that:
+ - result is not changed
always:
- name: Delete openshift groups if existing
diff --git a/ansible_collections/community/okd/molecule/default/roles/openshift_adm_groups/tasks/augmentedActiveDirectory.yml b/ansible_collections/community/okd/molecule/default/roles/openshift_adm_groups/tasks/augmentedActiveDirectory.yml
index f70d3bd8e..f089b33ad 100644
--- a/ansible_collections/community/okd/molecule/default/roles/openshift_adm_groups/tasks/augmentedActiveDirectory.yml
+++ b/ansible_collections/community/okd/molecule/default/roles/openshift_adm_groups/tasks/augmentedActiveDirectory.yml
@@ -1,166 +1,165 @@
+---
- block:
- - name: Get LDAP definition
- set_fact:
- ldap_entries: "{{ lookup('template', 'augmented-ad/definition.j2') | from_yaml }}"
-
- - name: Delete openshift groups if existing
- community.okd.k8s:
- state: absent
- kind: Group
- version: "user.openshift.io/v1"
- name: "{{ item }}"
- with_items:
- - banking
- - insurance
-
- - name: Delete existing LDAP entries
- openshift_ldap_entry:
- bind_dn: "{{ ldap_bind_dn }}"
- bind_pw: "{{ ldap_bind_pw }}"
- server_uri: "{{ ldap_server_uri }}"
- dn: "{{ item.dn }}"
- state: absent
- with_items: "{{ ldap_entries.users + ldap_entries.groups + ldap_entries.units | reverse | list }}"
-
- - name: Create LDAP Entries
- openshift_ldap_entry:
- bind_dn: "{{ ldap_bind_dn }}"
- bind_pw: "{{ ldap_bind_pw }}"
- server_uri: "{{ ldap_server_uri }}"
- dn: "{{ item.dn }}"
- attributes: "{{ item.attr }}"
- objectClass: "{{ item.class }}"
- with_items: "{{ ldap_entries.units + ldap_entries.groups + ldap_entries.users }}"
-
- - name: Load test configurations
- set_fact:
- sync_config: "{{ lookup('template', 'augmented-ad/sync-config.j2') | from_yaml }}"
-
- - name: Synchronize Groups
- community.okd.openshift_adm_groups_sync:
- config: "{{ sync_config }}"
- check_mode: yes
- register: result
-
- - name: Validate that 'banking' and 'insurance' groups were created
- assert:
- that:
- - result is changed
- - banking_group
- - insurance_group
- - '"james-allan@ansible.org" in {{ banking_group.users }}'
- - '"gordon-kane@ansible.org" in {{ banking_group.users }}'
- - '"alice-courtney@ansible.org" in {{ insurance_group.users }}'
- - banking_group.users | length == 2
- - insurance_group.users | length == 1
- vars:
- banking_group: "{{ result.groups | selectattr('metadata.name', 'equalto', 'banking') | first }}"
- insurance_group: "{{ result.groups | selectattr('metadata.name', 'equalto', 'insurance') | first }}"
-
-
- - name: Synchronize Groups (Remove check_mode)
- community.okd.openshift_adm_groups_sync:
- config: "{{ sync_config }}"
- register: result
-
- - name: Validate Group going to be created
- assert:
- that:
- - result is changed
-
- - name: Define facts for group to create
- set_fact:
- ldap_groups:
- - name: banking
- users:
- - "james-allan@ansible.org"
- - "gordon-kane@ansible.org"
- - name: insurance
- users:
- - "alice-courtney@ansible.org"
-
-
- - name: Read 'banking' openshift group
- kubernetes.core.k8s_info:
- kind: Group
- version: "user.openshift.io/v1"
- name: banking
- register: result
-
- - name: Validate group info
- assert:
- that:
- - result.resources | length == 1
- - '"james-allan@ansible.org" in {{ result.resources.0.users }}'
- - '"gordon-kane@ansible.org" in {{ result.resources.0.users }}'
-
- - name: Read 'insurance' openshift group
- kubernetes.core.k8s_info:
- kind: Group
- version: "user.openshift.io/v1"
- name: insurance
- register: result
-
- - name: Validate group info
- assert:
- that:
- - result.resources | length == 1
- - 'result.resources.0.users == ["alice-courtney@ansible.org"]'
-
- - name: Delete employee from 'insurance' group
- openshift_ldap_entry:
- bind_dn: "{{ ldap_bind_dn }}"
- bind_pw: "{{ ldap_bind_pw }}"
- server_uri: "{{ ldap_server_uri }}"
- dn: "cn=Alice,ou=employee,ou=augmentedAD,{{ ldap_root }}"
- state: absent
-
- - name: Prune groups
- community.okd.openshift_adm_groups_sync:
- config: "{{ sync_config }}"
- state: absent
- register: result
-
- - name: Validate result is changed (only insurance group be deleted)
- assert:
- that:
- - result is changed
- - result.groups | length == 1
-
- - name: Get 'insurance' openshift group info
- kubernetes.core.k8s_info:
- kind: Group
- version: "user.openshift.io/v1"
- name: insurance
- register: result
-
- - name: assert group was deleted
- assert:
- that:
- - result.resources | length == 0
-
- - name: Get 'banking' openshift group info
- kubernetes.core.k8s_info:
- kind: Group
- version: "user.openshift.io/v1"
- name: banking
- register: result
-
- - name: assert group was not deleted
- assert:
- that:
- - result.resources | length == 1
-
- - name: Prune groups once again (idempotency)
- community.okd.openshift_adm_groups_sync:
- config: "{{ sync_config }}"
- state: absent
- register: result
-
- - name: Assert no change was made
- assert:
- that:
- - result is not changed
+ - name: Get LDAP definition
+ set_fact:
+ ldap_entries: "{{ lookup('template', 'augmented-ad/definition.j2') | from_yaml }}"
+
+ - name: Delete openshift groups if existing
+ community.okd.k8s:
+ state: absent
+ kind: Group
+ version: "user.openshift.io/v1"
+ name: "{{ item }}"
+ with_items:
+ - banking
+ - insurance
+
+ - name: Delete existing LDAP entries
+ openshift_ldap_entry:
+ bind_dn: "{{ ldap_bind_dn }}"
+ bind_pw: "{{ ldap_bind_pw }}"
+ server_uri: "{{ ldap_server_uri }}"
+ dn: "{{ item.dn }}"
+ state: absent
+ with_items: "{{ ldap_entries.users + ldap_entries.groups + ldap_entries.units | reverse | list }}"
+
+ - name: Create LDAP Entries
+ openshift_ldap_entry:
+ bind_dn: "{{ ldap_bind_dn }}"
+ bind_pw: "{{ ldap_bind_pw }}"
+ server_uri: "{{ ldap_server_uri }}"
+ dn: "{{ item.dn }}"
+ attributes: "{{ item.attr }}"
+ objectClass: "{{ item.class }}"
+ with_items: "{{ ldap_entries.units + ldap_entries.groups + ldap_entries.users }}"
+
+ - name: Load test configurations
+ set_fact:
+ sync_config: "{{ lookup('template', 'augmented-ad/sync-config.j2') | from_yaml }}"
+
+ - name: Synchronize Groups
+ community.okd.openshift_adm_groups_sync:
+ config: "{{ sync_config }}"
+ check_mode: yes
+ register: result
+
+ - name: Validate that 'banking' and 'insurance' groups were created
+ assert:
+ that:
+ - result is changed
+ - banking_group
+ - insurance_group
+ - '"james-allan@ansible.org" in {{ banking_group.users }}'
+ - '"gordon-kane@ansible.org" in {{ banking_group.users }}'
+ - '"alice-courtney@ansible.org" in {{ insurance_group.users }}'
+ - banking_group.users | length == 2
+ - insurance_group.users | length == 1
+ vars:
+ banking_group: "{{ result.groups | selectattr('metadata.name', 'equalto', 'banking') | first }}"
+ insurance_group: "{{ result.groups | selectattr('metadata.name', 'equalto', 'insurance') | first }}"
+
+ - name: Synchronize Groups (Remove check_mode)
+ community.okd.openshift_adm_groups_sync:
+ config: "{{ sync_config }}"
+ register: result
+
+ - name: Validate Group going to be created
+ assert:
+ that:
+ - result is changed
+
+ - name: Define facts for group to create
+ set_fact:
+ ldap_groups:
+ - name: banking
+ users:
+ - "james-allan@ansible.org"
+ - "gordon-kane@ansible.org"
+ - name: insurance
+ users:
+ - "alice-courtney@ansible.org"
+
+ - name: Read 'banking' openshift group
+ kubernetes.core.k8s_info:
+ kind: Group
+ version: "user.openshift.io/v1"
+ name: banking
+ register: result
+
+ - name: Validate group info
+ assert:
+ that:
+ - result.resources | length == 1
+ - '"james-allan@ansible.org" in {{ result.resources.0.users }}'
+ - '"gordon-kane@ansible.org" in {{ result.resources.0.users }}'
+
+ - name: Read 'insurance' openshift group
+ kubernetes.core.k8s_info:
+ kind: Group
+ version: "user.openshift.io/v1"
+ name: insurance
+ register: result
+
+ - name: Validate group info
+ assert:
+ that:
+ - result.resources | length == 1
+ - 'result.resources.0.users == ["alice-courtney@ansible.org"]'
+
+ - name: Delete employee from 'insurance' group
+ openshift_ldap_entry:
+ bind_dn: "{{ ldap_bind_dn }}"
+ bind_pw: "{{ ldap_bind_pw }}"
+ server_uri: "{{ ldap_server_uri }}"
+ dn: "cn=Alice,ou=employee,ou=augmentedAD,{{ ldap_root }}"
+ state: absent
+
+ - name: Prune groups
+ community.okd.openshift_adm_groups_sync:
+ config: "{{ sync_config }}"
+ state: absent
+ register: result
+
+ - name: Validate result is changed (only insurance group be deleted)
+ assert:
+ that:
+ - result is changed
+ - result.groups | length == 1
+
+ - name: Get 'insurance' openshift group info
+ kubernetes.core.k8s_info:
+ kind: Group
+ version: "user.openshift.io/v1"
+ name: insurance
+ register: result
+
+ - name: assert group was deleted
+ assert:
+ that:
+ - result.resources | length == 0
+
+ - name: Get 'banking' openshift group info
+ kubernetes.core.k8s_info:
+ kind: Group
+ version: "user.openshift.io/v1"
+ name: banking
+ register: result
+
+ - name: assert group was not deleted
+ assert:
+ that:
+ - result.resources | length == 1
+
+ - name: Prune groups once again (idempotency)
+ community.okd.openshift_adm_groups_sync:
+ config: "{{ sync_config }}"
+ state: absent
+ register: result
+
+ - name: Assert no change was made
+ assert:
+ that:
+ - result is not changed
always:
- name: Delete openshift groups if existing
diff --git a/ansible_collections/community/okd/molecule/default/roles/openshift_adm_groups/tasks/main.yml b/ansible_collections/community/okd/molecule/default/roles/openshift_adm_groups/tasks/main.yml
index 88bfd67f8..5dc79c1f0 100644
--- a/ansible_collections/community/okd/molecule/default/roles/openshift_adm_groups/tasks/main.yml
+++ b/ansible_collections/community/okd/molecule/default/roles/openshift_adm_groups/tasks/main.yml
@@ -1,5 +1,5 @@
---
-- name: Get cluster information
+- name: Get cluster information
kubernetes.core.k8s_cluster_info:
register: info
@@ -16,30 +16,29 @@
app: ldap
spec:
containers:
- - name: ldap
- image: bitnami/openldap
- env:
- - name: LDAP_ADMIN_USERNAME
- value: "{{ ldap_admin_user }}"
- - name: LDAP_ADMIN_PASSWORD
- value: "{{ ldap_admin_password }}"
- - name: LDAP_USERS
- value: "ansible"
- - name: LDAP_PASSWORDS
- value: "ansible123"
- - name: LDAP_ROOT
- value: "{{ ldap_root }}"
- ports:
- - containerPort: 1389
+ - name: ldap
+ image: bitnami/openldap
+ env:
+ - name: LDAP_ADMIN_USERNAME
+ value: "{{ ldap_admin_user }}"
+ - name: LDAP_ADMIN_PASSWORD
+ value: "{{ ldap_admin_password }}"
+ - name: LDAP_USERS
+ value: "ansible"
+ - name: LDAP_PASSWORDS
+ value: "ansible123"
+ - name: LDAP_ROOT
+ value: "{{ ldap_root }}"
+ ports:
+ - containerPort: 1389
+ name: ldap-server
register: pod_info
-- name: Set Pod Internal IP
- set_fact:
- podIp: "{{ pod_info.result.status.podIP }}"
-
- name: Set LDAP Common facts
set_fact:
- ldap_server_uri: "ldap://{{ podIp }}:1389"
+ # we can use the Pod IP directly because the integration are running inside a Pod in the
+ # same openshift cluster
+ ldap_server_uri: "ldap://{{ pod_info.result.status.podIP }}:1389"
ldap_bind_dn: "cn={{ ldap_admin_user }},{{ ldap_root }}"
ldap_bind_pw: "{{ ldap_admin_password }}"
@@ -53,8 +52,10 @@
bind_pw: "{{ ldap_bind_pw }}"
dn: "ou=users,{{ ldap_root }}"
server_uri: "{{ ldap_server_uri }}"
- # ignore_errors: true
- # register: ping_ldap
+ register: test_ldap
+ retries: 10
+ delay: 5
+ until: test_ldap is not failed
- include_tasks: "tasks/python-ldap-not-installed.yml"
- include_tasks: "tasks/rfc2307.yml"
diff --git a/ansible_collections/community/okd/molecule/default/roles/openshift_adm_groups/tasks/python-ldap-not-installed.yml b/ansible_collections/community/okd/molecule/default/roles/openshift_adm_groups/tasks/python-ldap-not-installed.yml
index a79af51c2..857ff4903 100644
--- a/ansible_collections/community/okd/molecule/default/roles/openshift_adm_groups/tasks/python-ldap-not-installed.yml
+++ b/ansible_collections/community/okd/molecule/default/roles/openshift_adm_groups/tasks/python-ldap-not-installed.yml
@@ -1,3 +1,4 @@
+---
- block:
- name: Create temp directory
tempfile:
diff --git a/ansible_collections/community/okd/molecule/default/roles/openshift_adm_groups/tasks/rfc2307.yml b/ansible_collections/community/okd/molecule/default/roles/openshift_adm_groups/tasks/rfc2307.yml
index 7660bf625..749dfdae3 100644
--- a/ansible_collections/community/okd/molecule/default/roles/openshift_adm_groups/tasks/rfc2307.yml
+++ b/ansible_collections/community/okd/molecule/default/roles/openshift_adm_groups/tasks/rfc2307.yml
@@ -1,459 +1,460 @@
+---
- block:
- - name: Get LDAP definition
- set_fact:
- ldap_resources: "{{ lookup('template', 'rfc2307/definition.j2') | from_yaml }}"
-
- - name: Delete openshift groups if existing
- community.okd.k8s:
- state: absent
- kind: Group
- version: "user.openshift.io/v1"
- name: "{{ item }}"
- with_items:
- - admins
- - engineers
- - developers
-
- - name: Delete existing LDAP entries
- openshift_ldap_entry:
- bind_dn: "{{ ldap_bind_dn }}"
- bind_pw: "{{ ldap_bind_pw }}"
- server_uri: "{{ ldap_server_uri }}"
- dn: "{{ item.dn }}"
- state: absent
- with_items: "{{ ldap_resources.users + ldap_resources.groups + ldap_resources.units | reverse | list }}"
-
- - name: Create LDAP units
- openshift_ldap_entry:
- bind_dn: "{{ ldap_bind_dn }}"
- bind_pw: "{{ ldap_bind_pw }}"
- server_uri: "{{ ldap_server_uri }}"
- dn: "{{ item.dn }}"
- attributes: "{{ item.attr }}"
- objectClass: "{{ item.class }}"
- with_items: "{{ ldap_resources.units }}"
-
- - name: Create LDAP Groups
- openshift_ldap_entry:
- bind_dn: "{{ ldap_bind_dn }}"
- bind_pw: "{{ ldap_bind_pw }}"
- server_uri: "{{ ldap_server_uri }}"
- dn: "{{ item.dn }}"
- attributes: "{{ item.attr }}"
- objectClass: "{{ item.class }}"
- with_items: "{{ ldap_resources.groups }}"
-
- - name: Create LDAP users
- openshift_ldap_entry:
- bind_dn: "{{ ldap_bind_dn }}"
- bind_pw: "{{ ldap_bind_pw }}"
- server_uri: "{{ ldap_server_uri }}"
- dn: "{{ item.dn }}"
- attributes: "{{ item.attr }}"
- objectClass: "{{ item.class }}"
- with_items: "{{ ldap_resources.users }}"
-
- - name: Load test configurations
- set_fact:
- configs: "{{ lookup('template', 'rfc2307/sync-config.j2') | from_yaml }}"
-
- - name: Synchronize Groups
- community.okd.openshift_adm_groups_sync:
- config: "{{ configs.simple }}"
- check_mode: yes
- register: result
-
- - name: Validate Group going to be created
- assert:
- that:
- - result is changed
- - admins_group
- - devs_group
- - '"jane.smith@ansible.org" in {{ admins_group.users }}'
- - '"jim.adams@ansible.org" in {{ devs_group.users }}'
- - '"jordanbulls@ansible.org" in {{ devs_group.users }}'
- - admins_group.users | length == 1
- - devs_group.users | length == 2
- vars:
- admins_group: "{{ result.groups | selectattr('metadata.name', 'equalto', 'admins') | first }}"
- devs_group: "{{ result.groups | selectattr('metadata.name', 'equalto', 'developers') | first }}"
-
- - name: Synchronize Groups - User defined mapping
- community.okd.openshift_adm_groups_sync:
- config: "{{ configs.user_defined }}"
- check_mode: yes
- register: result
-
- - name: Validate Group going to be created
- assert:
- that:
- - result is changed
- - admins_group
- - devs_group
- - '"jane.smith@ansible.org" in {{ admins_group.users }}'
- - '"jim.adams@ansible.org" in {{ devs_group.users }}'
- - '"jordanbulls@ansible.org" in {{ devs_group.users }}'
- - admins_group.users | length == 1
- - devs_group.users | length == 2
- vars:
- admins_group: "{{ result.groups | selectattr('metadata.name', 'equalto', 'ansible-admins') | first }}"
- devs_group: "{{ result.groups | selectattr('metadata.name', 'equalto', 'ansible-devs') | first }}"
-
- - name: Synchronize Groups - Using dn for every query
- community.okd.openshift_adm_groups_sync:
- config: "{{ configs.dn_everywhere }}"
- check_mode: yes
- register: result
-
- - name: Validate Group going to be created
- assert:
- that:
- - result is changed
- - admins_group
- - devs_group
- - '"cn=Jane,ou=people,ou=rfc2307,{{ ldap_root }}" in {{ admins_group.users }}'
- - '"cn=Jim,ou=people,ou=rfc2307,{{ ldap_root }}" in {{ devs_group.users }}'
- - '"cn=Jordan,ou=people,ou=rfc2307,{{ ldap_root }}" in {{ devs_group.users }}'
- - admins_group.users | length == 1
- - devs_group.users | length == 2
- vars:
- admins_group: "{{ result.groups | selectattr('metadata.name', 'equalto', 'cn=admins,ou=groups,ou=rfc2307,' + ldap_root ) | first }}"
- devs_group: "{{ result.groups | selectattr('metadata.name', 'equalto', 'cn=developers,ou=groups,ou=rfc2307,' + ldap_root ) | first }}"
-
- - name: Synchronize Groups - Partially user defined mapping
- community.okd.openshift_adm_groups_sync:
- config: "{{ configs.partially_user_defined }}"
- check_mode: yes
- register: result
-
- - name: Validate Group going to be created
- assert:
- that:
- - result is changed
- - admins_group
- - devs_group
- - '"jane.smith@ansible.org" in {{ admins_group.users }}'
- - '"jim.adams@ansible.org" in {{ devs_group.users }}'
- - '"jordanbulls@ansible.org" in {{ devs_group.users }}'
- - admins_group.users | length == 1
- - devs_group.users | length == 2
- vars:
- admins_group: "{{ result.groups | selectattr('metadata.name', 'equalto', 'ansible-admins') | first }}"
- devs_group: "{{ result.groups | selectattr('metadata.name', 'equalto', 'developers') | first }}"
-
- - name: Delete Group 'engineers' if created before
- community.okd.k8s:
- state: absent
- kind: Group
- version: "user.openshift.io/v1"
- name: 'engineers'
- wait: yes
- ignore_errors: yes
-
- - name: Synchronize Groups - Partially user defined mapping
- community.okd.openshift_adm_groups_sync:
- config: "{{ configs.out_scope }}"
- check_mode: yes
- register: result
- ignore_errors: yes
-
- - name: Assert group sync failed due to non-existent member
- assert:
- that:
- - result is failed
- - result.msg.startswith("Entry not found for base='cn=Matthew,ou=people,ou=outrfc2307,{{ ldap_root }}'")
-
- - name: Define sync configuration with tolerateMemberNotFoundErrors
- set_fact:
- config_out_of_scope_tolerate_not_found: "{{ configs.out_scope | combine({'rfc2307': merge_rfc2307 })}}"
- vars:
- merge_rfc2307: "{{ configs.out_scope.rfc2307 | combine({'tolerateMemberNotFoundErrors': 'true'}) }}"
-
- - name: Synchronize Groups - Partially user defined mapping (tolerateMemberNotFoundErrors=true)
- community.okd.openshift_adm_groups_sync:
- config: "{{ config_out_of_scope_tolerate_not_found }}"
- check_mode: yes
- register: result
-
- - name: Assert group sync did not fail (tolerateMemberNotFoundErrors=true)
- assert:
- that:
- - result is changed
- - result.groups | length == 1
- - result.groups.0.metadata.name == 'engineers'
- - result.groups.0.users == ['Abraham']
-
- - name: Create Group 'engineers'
- community.okd.k8s:
- state: present
- wait: yes
- definition:
+ - name: Get LDAP definition
+ set_fact:
+ ldap_resources: "{{ lookup('template', 'rfc2307/definition.j2') | from_yaml }}"
+
+ - name: Delete openshift groups if existing
+ community.okd.k8s:
+ state: absent
kind: Group
- apiVersion: "user.openshift.io/v1"
- metadata:
- name: engineers
- users: []
-
- - name: Try to sync LDAP group with Openshift existing group not created using sync should failed
- community.okd.openshift_adm_groups_sync:
- config: "{{ config_out_of_scope_tolerate_not_found }}"
- check_mode: yes
- register: result
- ignore_errors: yes
-
- - name: Validate group sync failed
- assert:
- that:
- - result is failed
- - '"openshift.io/ldap.host label did not match sync host" in result.msg'
-
- - name: Define allow_groups and deny_groups groups
- set_fact:
- allow_groups:
- - "cn=developers,ou=groups,ou=rfc2307,{{ ldap_root }}"
- deny_groups:
- - "cn=admins,ou=groups,ou=rfc2307,{{ ldap_root }}"
-
- - name: Synchronize Groups using allow_groups
- community.okd.openshift_adm_groups_sync:
- config: "{{ configs.simple }}"
- allow_groups: "{{ allow_groups }}"
- register: result
- check_mode: yes
-
- - name: Validate Group going to be created
- assert:
- that:
- - result is changed
- - result.groups | length == 1
- - result.groups.0.metadata.name == "developers"
-
- - name: Synchronize Groups using deny_groups
- community.okd.openshift_adm_groups_sync:
- config: "{{ configs.simple }}"
- deny_groups: "{{ deny_groups }}"
- register: result
- check_mode: yes
-
- - name: Validate Group going to be created
- assert:
- that:
- - result is changed
- - result.groups | length == 1
- - result.groups.0.metadata.name == "developers"
-
- - name: Synchronize groups, remove check_mode
- community.okd.openshift_adm_groups_sync:
- config: "{{ configs.simple }}"
- register: result
-
- - name: Validate result is changed
- assert:
- that:
- - result is changed
-
- - name: Read Groups
- kubernetes.core.k8s_info:
- kind: Group
- version: "user.openshift.io/v1"
- name: admins
- register: result
-
- - name: Validate group was created
- assert:
- that:
- - result.resources | length == 1
- - '"jane.smith@ansible.org" in {{ result.resources.0.users }}'
-
- - name: Read Groups
- kubernetes.core.k8s_info:
- kind: Group
- version: "user.openshift.io/v1"
- name: developers
- register: result
-
- - name: Validate group was created
- assert:
- that:
- - result.resources | length == 1
- - '"jim.adams@ansible.org" in {{ result.resources.0.users }}'
- - '"jordanbulls@ansible.org" in {{ result.resources.0.users }}'
-
- - name: Set users to delete (no admins users anymore and only 1 developer kept)
- set_fact:
- users_to_delete:
- - "cn=Jane,ou=people,ou=rfc2307,{{ ldap_root }}"
- - "cn=Jim,ou=people,ou=rfc2307,{{ ldap_root }}"
-
- - name: Delete users from LDAP servers
- openshift_ldap_entry:
- bind_dn: "{{ ldap_bind_dn }}"
- bind_pw: "{{ ldap_bind_pw }}"
- server_uri: "{{ ldap_server_uri }}"
- dn: "{{ item }}"
- state: absent
- with_items: "{{ users_to_delete }}"
-
- - name: Define sync configuration with tolerateMemberNotFoundErrors
- set_fact:
- config_simple_tolerate_not_found: "{{ configs.simple | combine({'rfc2307': merge_rfc2307 })}}"
- vars:
- merge_rfc2307: "{{ configs.simple.rfc2307 | combine({'tolerateMemberNotFoundErrors': 'true'}) }}"
-
- - name: Synchronize groups once again after users deletion
- community.okd.openshift_adm_groups_sync:
- config: "{{ config_simple_tolerate_not_found }}"
- register: result
-
- - name: Validate result is changed
- assert:
- that:
- - result is changed
-
- - name: Read Groups
- kubernetes.core.k8s_info:
- kind: Group
- version: "user.openshift.io/v1"
- name: admins
- register: result
-
- - name: Validate admins group does not contains users anymore
- assert:
- that:
- - result.resources | length == 1
- - result.resources.0.users == []
-
- - name: Read Groups
- kubernetes.core.k8s_info:
- kind: Group
- version: "user.openshift.io/v1"
- name: developers
- register: result
-
- - name: Validate group was created
- assert:
- that:
- - result.resources | length == 1
- - '"jordanbulls@ansible.org" in {{ result.resources.0.users }}'
-
- - name: Set group to delete
- set_fact:
- groups_to_delete:
- - "cn=developers,ou=groups,ou=rfc2307,{{ ldap_root }}"
-
- - name: Delete Group from LDAP servers
- openshift_ldap_entry:
- bind_dn: "{{ ldap_bind_dn }}"
- bind_pw: "{{ ldap_bind_pw }}"
- server_uri: "{{ ldap_server_uri }}"
- dn: "{{ item }}"
- state: absent
- with_items: "{{ groups_to_delete }}"
-
- - name: Prune groups
- community.okd.openshift_adm_groups_sync:
- config: "{{ config_simple_tolerate_not_found }}"
- state: absent
- register: result
- check_mode: yes
-
- - name: Validate that only developers group is candidate for Prune
- assert:
- that:
- - result is changed
- - result.groups | length == 1
- - result.groups.0.metadata.name == "developers"
-
- - name: Read Group (validate that check_mode did not performed update in the cluster)
- kubernetes.core.k8s_info:
- kind: Group
- version: "user.openshift.io/v1"
- name: developers
- register: result
-
- - name: Assert group was found
- assert:
- that:
- - result.resources | length == 1
-
- - name: Prune using allow_groups
- community.okd.openshift_adm_groups_sync:
- config: "{{ config_simple_tolerate_not_found }}"
- allow_groups:
- - developers
- state: absent
- register: result
- check_mode: yes
-
- - name: assert developers group was candidate for prune
- assert:
- that:
- - result is changed
- - result.groups | length == 1
- - result.groups.0.metadata.name == "developers"
-
- - name: Prune using deny_groups
- community.okd.openshift_adm_groups_sync:
- config: "{{ config_simple_tolerate_not_found }}"
- deny_groups:
+ version: "user.openshift.io/v1"
+ name: "{{ item }}"
+ with_items:
+ - admins
+ - engineers
- developers
- state: absent
- register: result
- check_mode: yes
-
- - name: assert nothing found candidate for prune
- assert:
- that:
- - result is not changed
- - result.groups | length == 0
-
- - name: Prune groups
- community.okd.openshift_adm_groups_sync:
- config: "{{ config_simple_tolerate_not_found }}"
- state: absent
- register: result
-
- - name: Validate result is changed
- assert:
- that:
- - result is changed
- - result.groups | length == 1
-
- - name: Get developers group info
- kubernetes.core.k8s_info:
- kind: Group
- version: "user.openshift.io/v1"
- name: developers
- register: result
-
- - name: assert group was deleted
- assert:
- that:
- - result.resources | length == 0
-
- - name: Get admins group info
- kubernetes.core.k8s_info:
- kind: Group
- version: "user.openshift.io/v1"
- name: admins
- register: result
-
- - name: assert group was not deleted
- assert:
- that:
- - result.resources | length == 1
-
- - name: Prune groups once again (idempotency)
- community.okd.openshift_adm_groups_sync:
- config: "{{ config_simple_tolerate_not_found }}"
- state: absent
- register: result
-
- - name: Assert nothing changed
- assert:
- that:
- - result is not changed
- - result.groups | length == 0
+
+ - name: Delete existing LDAP entries
+ openshift_ldap_entry:
+ bind_dn: "{{ ldap_bind_dn }}"
+ bind_pw: "{{ ldap_bind_pw }}"
+ server_uri: "{{ ldap_server_uri }}"
+ dn: "{{ item.dn }}"
+ state: absent
+ with_items: "{{ ldap_resources.users + ldap_resources.groups + ldap_resources.units | reverse | list }}"
+
+ - name: Create LDAP units
+ openshift_ldap_entry:
+ bind_dn: "{{ ldap_bind_dn }}"
+ bind_pw: "{{ ldap_bind_pw }}"
+ server_uri: "{{ ldap_server_uri }}"
+ dn: "{{ item.dn }}"
+ attributes: "{{ item.attr }}"
+ objectClass: "{{ item.class }}"
+ with_items: "{{ ldap_resources.units }}"
+
+ - name: Create LDAP Groups
+ openshift_ldap_entry:
+ bind_dn: "{{ ldap_bind_dn }}"
+ bind_pw: "{{ ldap_bind_pw }}"
+ server_uri: "{{ ldap_server_uri }}"
+ dn: "{{ item.dn }}"
+ attributes: "{{ item.attr }}"
+ objectClass: "{{ item.class }}"
+ with_items: "{{ ldap_resources.groups }}"
+
+ - name: Create LDAP users
+ openshift_ldap_entry:
+ bind_dn: "{{ ldap_bind_dn }}"
+ bind_pw: "{{ ldap_bind_pw }}"
+ server_uri: "{{ ldap_server_uri }}"
+ dn: "{{ item.dn }}"
+ attributes: "{{ item.attr }}"
+ objectClass: "{{ item.class }}"
+ with_items: "{{ ldap_resources.users }}"
+
+ - name: Load test configurations
+ set_fact:
+ configs: "{{ lookup('template', 'rfc2307/sync-config.j2') | from_yaml }}"
+
+ - name: Synchronize Groups
+ community.okd.openshift_adm_groups_sync:
+ config: "{{ configs.simple }}"
+ check_mode: yes
+ register: result
+
+ - name: Validate Group going to be created
+ assert:
+ that:
+ - result is changed
+ - admins_group
+ - devs_group
+ - '"jane.smith@ansible.org" in {{ admins_group.users }}'
+ - '"jim.adams@ansible.org" in {{ devs_group.users }}'
+ - '"jordanbulls@ansible.org" in {{ devs_group.users }}'
+ - admins_group.users | length == 1
+ - devs_group.users | length == 2
+ vars:
+ admins_group: "{{ result.groups | selectattr('metadata.name', 'equalto', 'admins') | first }}"
+ devs_group: "{{ result.groups | selectattr('metadata.name', 'equalto', 'developers') | first }}"
+
+ - name: Synchronize Groups - User defined mapping
+ community.okd.openshift_adm_groups_sync:
+ config: "{{ configs.user_defined }}"
+ check_mode: yes
+ register: result
+
+ - name: Validate Group going to be created
+ assert:
+ that:
+ - result is changed
+ - admins_group
+ - devs_group
+ - '"jane.smith@ansible.org" in {{ admins_group.users }}'
+ - '"jim.adams@ansible.org" in {{ devs_group.users }}'
+ - '"jordanbulls@ansible.org" in {{ devs_group.users }}'
+ - admins_group.users | length == 1
+ - devs_group.users | length == 2
+ vars:
+ admins_group: "{{ result.groups | selectattr('metadata.name', 'equalto', 'ansible-admins') | first }}"
+ devs_group: "{{ result.groups | selectattr('metadata.name', 'equalto', 'ansible-devs') | first }}"
+
+ - name: Synchronize Groups - Using dn for every query
+ community.okd.openshift_adm_groups_sync:
+ config: "{{ configs.dn_everywhere }}"
+ check_mode: yes
+ register: result
+
+ - name: Validate Group going to be created
+ assert:
+ that:
+ - result is changed
+ - admins_group
+ - devs_group
+ - '"cn=Jane,ou=people,ou=rfc2307,{{ ldap_root }}" in {{ admins_group.users }}'
+ - '"cn=Jim,ou=people,ou=rfc2307,{{ ldap_root }}" in {{ devs_group.users }}'
+ - '"cn=Jordan,ou=people,ou=rfc2307,{{ ldap_root }}" in {{ devs_group.users }}'
+ - admins_group.users | length == 1
+ - devs_group.users | length == 2
+ vars:
+ admins_group: "{{ result.groups | selectattr('metadata.name', 'equalto', 'cn=admins,ou=groups,ou=rfc2307,' + ldap_root ) | first }}"
+ devs_group: "{{ result.groups | selectattr('metadata.name', 'equalto', 'cn=developers,ou=groups,ou=rfc2307,' + ldap_root ) | first }}"
+
+ - name: Synchronize Groups - Partially user defined mapping
+ community.okd.openshift_adm_groups_sync:
+ config: "{{ configs.partially_user_defined }}"
+ check_mode: yes
+ register: result
+
+ - name: Validate Group going to be created
+ assert:
+ that:
+ - result is changed
+ - admins_group
+ - devs_group
+ - '"jane.smith@ansible.org" in {{ admins_group.users }}'
+ - '"jim.adams@ansible.org" in {{ devs_group.users }}'
+ - '"jordanbulls@ansible.org" in {{ devs_group.users }}'
+ - admins_group.users | length == 1
+ - devs_group.users | length == 2
+ vars:
+ admins_group: "{{ result.groups | selectattr('metadata.name', 'equalto', 'ansible-admins') | first }}"
+ devs_group: "{{ result.groups | selectattr('metadata.name', 'equalto', 'developers') | first }}"
+
+ - name: Delete Group 'engineers' if created before
+ community.okd.k8s:
+ state: absent
+ kind: Group
+ version: "user.openshift.io/v1"
+ name: 'engineers'
+ wait: yes
+ ignore_errors: yes
+
+ - name: Synchronize Groups - Partially user defined mapping
+ community.okd.openshift_adm_groups_sync:
+ config: "{{ configs.out_scope }}"
+ check_mode: yes
+ register: result
+ ignore_errors: yes
+
+ - name: Assert group sync failed due to non-existent member
+ assert:
+ that:
+ - result is failed
+ - result.msg.startswith("Entry not found for base='cn=Matthew,ou=people,ou=outrfc2307,{{ ldap_root }}'")
+
+ - name: Define sync configuration with tolerateMemberNotFoundErrors
+ set_fact:
+ config_out_of_scope_tolerate_not_found: "{{ configs.out_scope | combine({'rfc2307': merge_rfc2307 })}}"
+ vars:
+ merge_rfc2307: "{{ configs.out_scope.rfc2307 | combine({'tolerateMemberNotFoundErrors': 'true'}) }}"
+
+ - name: Synchronize Groups - Partially user defined mapping (tolerateMemberNotFoundErrors=true)
+ community.okd.openshift_adm_groups_sync:
+ config: "{{ config_out_of_scope_tolerate_not_found }}"
+ check_mode: yes
+ register: result
+
+ - name: Assert group sync did not fail (tolerateMemberNotFoundErrors=true)
+ assert:
+ that:
+ - result is changed
+ - result.groups | length == 1
+ - result.groups.0.metadata.name == 'engineers'
+ - result.groups.0.users == ['Abraham']
+
+ - name: Create Group 'engineers'
+ community.okd.k8s:
+ state: present
+ wait: yes
+ definition:
+ kind: Group
+ apiVersion: "user.openshift.io/v1"
+ metadata:
+ name: engineers
+ users: []
+
+ - name: Try to sync LDAP group with Openshift existing group not created using sync should failed
+ community.okd.openshift_adm_groups_sync:
+ config: "{{ config_out_of_scope_tolerate_not_found }}"
+ check_mode: yes
+ register: result
+ ignore_errors: yes
+
+ - name: Validate group sync failed
+ assert:
+ that:
+ - result is failed
+ - '"openshift.io/ldap.host label did not match sync host" in result.msg'
+
+ - name: Define allow_groups and deny_groups groups
+ set_fact:
+ allow_groups:
+ - "cn=developers,ou=groups,ou=rfc2307,{{ ldap_root }}"
+ deny_groups:
+ - "cn=admins,ou=groups,ou=rfc2307,{{ ldap_root }}"
+
+ - name: Synchronize Groups using allow_groups
+ community.okd.openshift_adm_groups_sync:
+ config: "{{ configs.simple }}"
+ allow_groups: "{{ allow_groups }}"
+ register: result
+ check_mode: yes
+
+ - name: Validate Group going to be created
+ assert:
+ that:
+ - result is changed
+ - result.groups | length == 1
+ - result.groups.0.metadata.name == "developers"
+
+ - name: Synchronize Groups using deny_groups
+ community.okd.openshift_adm_groups_sync:
+ config: "{{ configs.simple }}"
+ deny_groups: "{{ deny_groups }}"
+ register: result
+ check_mode: yes
+
+ - name: Validate Group going to be created
+ assert:
+ that:
+ - result is changed
+ - result.groups | length == 1
+ - result.groups.0.metadata.name == "developers"
+
+ - name: Synchronize groups, remove check_mode
+ community.okd.openshift_adm_groups_sync:
+ config: "{{ configs.simple }}"
+ register: result
+
+ - name: Validate result is changed
+ assert:
+ that:
+ - result is changed
+
+ - name: Read Groups
+ kubernetes.core.k8s_info:
+ kind: Group
+ version: "user.openshift.io/v1"
+ name: admins
+ register: result
+
+ - name: Validate group was created
+ assert:
+ that:
+ - result.resources | length == 1
+ - '"jane.smith@ansible.org" in {{ result.resources.0.users }}'
+
+ - name: Read Groups
+ kubernetes.core.k8s_info:
+ kind: Group
+ version: "user.openshift.io/v1"
+ name: developers
+ register: result
+
+ - name: Validate group was created
+ assert:
+ that:
+ - result.resources | length == 1
+ - '"jim.adams@ansible.org" in {{ result.resources.0.users }}'
+ - '"jordanbulls@ansible.org" in {{ result.resources.0.users }}'
+
+ - name: Set users to delete (no admins users anymore and only 1 developer kept)
+ set_fact:
+ users_to_delete:
+ - "cn=Jane,ou=people,ou=rfc2307,{{ ldap_root }}"
+ - "cn=Jim,ou=people,ou=rfc2307,{{ ldap_root }}"
+
+ - name: Delete users from LDAP servers
+ openshift_ldap_entry:
+ bind_dn: "{{ ldap_bind_dn }}"
+ bind_pw: "{{ ldap_bind_pw }}"
+ server_uri: "{{ ldap_server_uri }}"
+ dn: "{{ item }}"
+ state: absent
+ with_items: "{{ users_to_delete }}"
+
+ - name: Define sync configuration with tolerateMemberNotFoundErrors
+ set_fact:
+ config_simple_tolerate_not_found: "{{ configs.simple | combine({'rfc2307': merge_rfc2307 })}}"
+ vars:
+ merge_rfc2307: "{{ configs.simple.rfc2307 | combine({'tolerateMemberNotFoundErrors': 'true'}) }}"
+
+ - name: Synchronize groups once again after users deletion
+ community.okd.openshift_adm_groups_sync:
+ config: "{{ config_simple_tolerate_not_found }}"
+ register: result
+
+ - name: Validate result is changed
+ assert:
+ that:
+ - result is changed
+
+ - name: Read Groups
+ kubernetes.core.k8s_info:
+ kind: Group
+ version: "user.openshift.io/v1"
+ name: admins
+ register: result
+
+ - name: Validate admins group does not contains users anymore
+ assert:
+ that:
+ - result.resources | length == 1
+ - result.resources.0.users == []
+
+ - name: Read Groups
+ kubernetes.core.k8s_info:
+ kind: Group
+ version: "user.openshift.io/v1"
+ name: developers
+ register: result
+
+ - name: Validate group was created
+ assert:
+ that:
+ - result.resources | length == 1
+ - '"jordanbulls@ansible.org" in {{ result.resources.0.users }}'
+
+ - name: Set group to delete
+ set_fact:
+ groups_to_delete:
+ - "cn=developers,ou=groups,ou=rfc2307,{{ ldap_root }}"
+
+ - name: Delete Group from LDAP servers
+ openshift_ldap_entry:
+ bind_dn: "{{ ldap_bind_dn }}"
+ bind_pw: "{{ ldap_bind_pw }}"
+ server_uri: "{{ ldap_server_uri }}"
+ dn: "{{ item }}"
+ state: absent
+ with_items: "{{ groups_to_delete }}"
+
+ - name: Prune groups
+ community.okd.openshift_adm_groups_sync:
+ config: "{{ config_simple_tolerate_not_found }}"
+ state: absent
+ register: result
+ check_mode: yes
+
+ - name: Validate that only developers group is candidate for Prune
+ assert:
+ that:
+ - result is changed
+ - result.groups | length == 1
+ - result.groups.0.metadata.name == "developers"
+
+ - name: Read Group (validate that check_mode did not performed update in the cluster)
+ kubernetes.core.k8s_info:
+ kind: Group
+ version: "user.openshift.io/v1"
+ name: developers
+ register: result
+
+ - name: Assert group was found
+ assert:
+ that:
+ - result.resources | length == 1
+
+ - name: Prune using allow_groups
+ community.okd.openshift_adm_groups_sync:
+ config: "{{ config_simple_tolerate_not_found }}"
+ allow_groups:
+ - developers
+ state: absent
+ register: result
+ check_mode: yes
+
+ - name: assert developers group was candidate for prune
+ assert:
+ that:
+ - result is changed
+ - result.groups | length == 1
+ - result.groups.0.metadata.name == "developers"
+
+ - name: Prune using deny_groups
+ community.okd.openshift_adm_groups_sync:
+ config: "{{ config_simple_tolerate_not_found }}"
+ deny_groups:
+ - developers
+ state: absent
+ register: result
+ check_mode: yes
+
+ - name: assert nothing found candidate for prune
+ assert:
+ that:
+ - result is not changed
+ - result.groups | length == 0
+
+ - name: Prune groups
+ community.okd.openshift_adm_groups_sync:
+ config: "{{ config_simple_tolerate_not_found }}"
+ state: absent
+ register: result
+
+ - name: Validate result is changed
+ assert:
+ that:
+ - result is changed
+ - result.groups | length == 1
+
+ - name: Get developers group info
+ kubernetes.core.k8s_info:
+ kind: Group
+ version: "user.openshift.io/v1"
+ name: developers
+ register: result
+
+ - name: assert group was deleted
+ assert:
+ that:
+ - result.resources | length == 0
+
+ - name: Get admins group info
+ kubernetes.core.k8s_info:
+ kind: Group
+ version: "user.openshift.io/v1"
+ name: admins
+ register: result
+
+ - name: assert group was not deleted
+ assert:
+ that:
+ - result.resources | length == 1
+
+ - name: Prune groups once again (idempotency)
+ community.okd.openshift_adm_groups_sync:
+ config: "{{ config_simple_tolerate_not_found }}"
+ state: absent
+ register: result
+
+ - name: Assert nothing changed
+ assert:
+ that:
+ - result is not changed
+ - result.groups | length == 0
always:
- name: Delete openshift groups if existing
diff --git a/ansible_collections/community/okd/molecule/default/tasks/openshift_adm_prune_auth_clusterroles.yml b/ansible_collections/community/okd/molecule/default/tasks/openshift_adm_prune_auth_clusterroles.yml
index 4de4894e2..edf0e17c4 100644
--- a/ansible_collections/community/okd/molecule/default/tasks/openshift_adm_prune_auth_clusterroles.yml
+++ b/ansible_collections/community/okd/molecule/default/tasks/openshift_adm_prune_auth_clusterroles.yml
@@ -1,293 +1,294 @@
+---
- block:
- - set_fact:
- test_sa: "clusterrole-sa"
- test_ns: "clusterrole-ns"
-
- - name: Ensure namespace
- kubernetes.core.k8s:
- kind: Namespace
- name: "{{ test_ns }}"
-
- - name: Get cluster information
- kubernetes.core.k8s_cluster_info:
- register: cluster_info
- no_log: true
-
- - set_fact:
- cluster_host: "{{ cluster_info['connection']['host'] }}"
-
- - name: Create Service account
- kubernetes.core.k8s:
- definition:
- apiVersion: v1
+ - set_fact:
+ test_sa: "clusterrole-sa"
+ test_ns: "clusterrole-ns"
+
+ - name: Ensure namespace
+ kubernetes.core.k8s:
+ kind: Namespace
+ name: "{{ test_ns }}"
+
+ - name: Get cluster information
+ kubernetes.core.k8s_cluster_info:
+ register: cluster_info
+ no_log: true
+
+ - set_fact:
+ cluster_host: "{{ cluster_info['connection']['host'] }}"
+
+ - name: Create Service account
+ kubernetes.core.k8s:
+ definition:
+ apiVersion: v1
+ kind: ServiceAccount
+ metadata:
+ name: "{{ test_sa }}"
+ namespace: "{{ test_ns }}"
+
+ - name: Read Service Account
+ kubernetes.core.k8s_info:
kind: ServiceAccount
- metadata:
- name: "{{ test_sa }}"
- namespace: "{{ test_ns }}"
-
- - name: Read Service Account
- kubernetes.core.k8s_info:
- kind: ServiceAccount
- namespace: "{{ test_ns }}"
- name: "{{ test_sa }}"
- register: result
-
- - set_fact:
- secret_token: "{{ result.resources[0]['secrets'][0]['name'] }}"
-
- - name: Get secret details
- kubernetes.core.k8s_info:
- kind: Secret
- namespace: '{{ test_ns }}'
- name: '{{ secret_token }}'
- register: _secret
- retries: 10
- delay: 10
- until:
- - ("'openshift.io/token-secret.value' in _secret.resources[0]['metadata']['annotations']") or ("'token' in _secret.resources[0]['data']")
-
- - set_fact:
- api_token: "{{ _secret.resources[0]['metadata']['annotations']['openshift.io/token-secret.value'] }}"
- when: "'openshift.io/token-secret.value' in _secret.resources[0]['metadata']['annotations']"
-
- - set_fact:
- api_token: "{{ _secret.resources[0]['data']['token'] | b64decode }}"
- when: "'token' in _secret.resources[0]['data']"
-
- - name: list Node should failed (forbidden user)
- kubernetes.core.k8s_info:
- api_key: "{{ api_token }}"
- host: "{{ cluster_host }}"
- validate_certs: no
- kind: Node
- register: error
- ignore_errors: true
-
- - assert:
- that:
- - '"nodes is forbidden: User" in error.msg'
-
- - name: list Pod for all namespace should failed
- kubernetes.core.k8s_info:
- api_key: "{{ api_token }}"
- host: "{{ cluster_host }}"
- validate_certs: no
- kind: Pod
- register: error
- ignore_errors: true
-
- - assert:
- that:
- - '"pods is forbidden: User" in error.msg'
-
- - name: list Pod for test namespace should failed
- kubernetes.core.k8s_info:
- api_key: "{{ api_token }}"
- host: "{{ cluster_host }}"
- validate_certs: no
- kind: Pod
- namespace: "{{ test_ns }}"
- register: error
- ignore_errors: true
-
- - assert:
- that:
- - '"pods is forbidden: User" in error.msg'
-
- - set_fact:
- test_labels:
- phase: dev
- cluster_roles:
- - name: pod-manager
- resources:
- - pods
- verbs:
- - list
- api_version_binding: "authorization.openshift.io/v1"
- - name: node-manager
- resources:
- - nodes
- verbs:
- - list
- api_version_binding: "rbac.authorization.k8s.io/v1"
-
- - name: Create cluster roles
- kubernetes.core.k8s:
- definition:
- kind: ClusterRole
- apiVersion: "rbac.authorization.k8s.io/v1"
- metadata:
- name: "{{ item.name }}"
- labels: "{{ test_labels }}"
- rules:
- - apiGroups: [""]
- resources: "{{ item.resources }}"
- verbs: "{{ item.verbs }}"
- with_items: '{{ cluster_roles }}'
-
- - name: Create Role Binding (namespaced)
- kubernetes.core.k8s:
- definition:
- kind: RoleBinding
- apiVersion: "rbac.authorization.k8s.io/v1"
- metadata:
- name: "{{ cluster_roles[0].name }}-binding"
- namespace: "{{ test_ns }}"
- labels: "{{ test_labels }}"
- subjects:
- - kind: ServiceAccount
- name: "{{ test_sa }}"
- namespace: "{{ test_ns }}"
- apiGroup: ""
- roleRef:
- kind: ClusterRole
- name: "{{ cluster_roles[0].name }}"
- apiGroup: ""
-
- - name: list Pod for all namespace should failed
- kubernetes.core.k8s_info:
- api_key: "{{ api_token }}"
- host: "{{ cluster_host }}"
- validate_certs: no
- kind: Pod
- register: error
- ignore_errors: true
-
- - assert:
- that:
- - '"pods is forbidden: User" in error.msg'
-
- - name: list Pod for test namespace should succeed
- kubernetes.core.k8s_info:
- api_key: "{{ api_token }}"
- host: "{{ cluster_host }}"
- validate_certs: no
- kind: Pod
- namespace: "{{ test_ns }}"
- no_log: true
-
- - name: Create Cluster role Binding
- kubernetes.core.k8s:
- definition:
- kind: ClusterRoleBinding
- apiVersion: "{{ item.api_version_binding }}"
- metadata:
- name: "{{ item.name }}-binding"
- labels: "{{ test_labels }}"
- subjects:
- - kind: ServiceAccount
- name: "{{ test_sa }}"
- namespace: "{{ test_ns }}"
- apiGroup: ""
- roleRef:
+ namespace: "{{ test_ns }}"
+ name: "{{ test_sa }}"
+ register: result
+
+ - set_fact:
+ secret_token: "{{ result.resources[0]['secrets'][0]['name'] }}"
+
+ - name: Get secret details
+ kubernetes.core.k8s_info:
+ kind: Secret
+ namespace: '{{ test_ns }}'
+ name: '{{ secret_token }}'
+ register: _secret
+ retries: 10
+ delay: 10
+ until:
+ - ("'openshift.io/token-secret.value' in _secret.resources[0]['metadata']['annotations']") or ("'token' in _secret.resources[0]['data']")
+
+ - set_fact:
+ api_token: "{{ _secret.resources[0]['metadata']['annotations']['openshift.io/token-secret.value'] }}"
+ when: "'openshift.io/token-secret.value' in _secret.resources[0]['metadata']['annotations']"
+
+ - set_fact:
+ api_token: "{{ _secret.resources[0]['data']['token'] | b64decode }}"
+ when: "'token' in _secret.resources[0]['data']"
+
+ - name: list Node should failed (forbidden user)
+ kubernetes.core.k8s_info:
+ api_key: "{{ api_token }}"
+ host: "{{ cluster_host }}"
+ validate_certs: no
+ kind: Node
+ register: error
+ ignore_errors: true
+
+ - assert:
+ that:
+ - '"nodes is forbidden: User" in error.msg'
+
+ - name: list Pod for all namespace should failed
+ kubernetes.core.k8s_info:
+ api_key: "{{ api_token }}"
+ host: "{{ cluster_host }}"
+ validate_certs: no
+ kind: Pod
+ register: error
+ ignore_errors: true
+
+ - assert:
+ that:
+ - '"pods is forbidden: User" in error.msg'
+
+ - name: list Pod for test namespace should failed
+ kubernetes.core.k8s_info:
+ api_key: "{{ api_token }}"
+ host: "{{ cluster_host }}"
+ validate_certs: no
+ kind: Pod
+ namespace: "{{ test_ns }}"
+ register: error
+ ignore_errors: true
+
+ - assert:
+ that:
+ - '"pods is forbidden: User" in error.msg'
+
+ - set_fact:
+ test_labels:
+ phase: dev
+ cluster_roles:
+ - name: pod-manager
+ resources:
+ - pods
+ verbs:
+ - list
+ api_version_binding: "authorization.openshift.io/v1"
+ - name: node-manager
+ resources:
+ - nodes
+ verbs:
+ - list
+ api_version_binding: "rbac.authorization.k8s.io/v1"
+
+ - name: Create cluster roles
+ kubernetes.core.k8s:
+ definition:
kind: ClusterRole
- name: "{{ item.name }}"
- apiGroup: ""
- with_items: "{{ cluster_roles }}"
-
- - name: list Pod for all namespace should succeed
- kubernetes.core.k8s_info:
- api_key: "{{ api_token }}"
- host: "{{ cluster_host }}"
- validate_certs: no
- kind: Pod
- no_log: true
-
- - name: list Pod for test namespace should succeed
- kubernetes.core.k8s_info:
- api_key: "{{ api_token }}"
- host: "{{ cluster_host }}"
- validate_certs: no
- kind: Pod
- namespace: "{{ test_ns }}"
- no_log: true
-
- - name: list Node using ServiceAccount
- kubernetes.core.k8s_info:
- api_key: "{{ api_token }}"
- host: "{{ cluster_host }}"
- validate_certs: no
- kind: Node
- namespace: "{{ test_ns }}"
- no_log: true
-
- - name: Prune clusterroles (check mode)
- community.okd.openshift_adm_prune_auth:
- resource: clusterroles
- label_selectors:
- - phase=dev
- register: check
- check_mode: true
-
- - name: validate clusterrole binding candidates for prune
- assert:
- that:
- - '"{{ item.name }}-binding" in check.cluster_role_binding'
- - '"{{ test_ns }}/{{ cluster_roles[0].name }}-binding" in check.role_binding'
- with_items: "{{ cluster_roles }}"
-
- - name: Prune Cluster Role for managing Pod
- community.okd.openshift_adm_prune_auth:
- resource: clusterroles
- name: "{{ cluster_roles[0].name }}"
-
- - name: list Pod for all namespace should failed
- kubernetes.core.k8s_info:
- api_key: "{{ api_token }}"
- host: "{{ cluster_host }}"
- validate_certs: no
- kind: Pod
- register: error
- no_log: true
- ignore_errors: true
-
- - assert:
- that:
- - '"pods is forbidden: User" in error.msg'
-
- - name: list Pod for test namespace should failed
- kubernetes.core.k8s_info:
- api_key: "{{ api_token }}"
- host: "{{ cluster_host }}"
- validate_certs: no
- kind: Pod
- namespace: "{{ test_ns }}"
- register: error
- no_log: true
- ignore_errors: true
-
- - assert:
- that:
- - '"pods is forbidden: User" in error.msg'
-
- - name: list Node using ServiceAccount
- kubernetes.core.k8s_info:
- api_key: "{{ api_token }}"
- host: "{{ cluster_host }}"
- validate_certs: no
- kind: Node
- namespace: "{{ test_ns }}"
- no_log: true
-
- - name: Prune clusterroles (remaining)
- community.okd.openshift_adm_prune_auth:
- resource: clusterroles
- label_selectors:
- - phase=dev
-
- - name: list Node using ServiceAccount should fail
- kubernetes.core.k8s_info:
- api_key: "{{ api_token }}"
- host: "{{ cluster_host }}"
- validate_certs: no
- kind: Node
- namespace: "{{ test_ns }}"
- register: error
- ignore_errors: true
-
- - assert:
- that:
- - '"nodes is forbidden: User" in error.msg'
+ apiVersion: "rbac.authorization.k8s.io/v1"
+ metadata:
+ name: "{{ item.name }}"
+ labels: "{{ test_labels }}"
+ rules:
+ - apiGroups: [""]
+ resources: "{{ item.resources }}"
+ verbs: "{{ item.verbs }}"
+ with_items: '{{ cluster_roles }}'
+
+ - name: Create Role Binding (namespaced)
+ kubernetes.core.k8s:
+ definition:
+ kind: RoleBinding
+ apiVersion: "rbac.authorization.k8s.io/v1"
+ metadata:
+ name: "{{ cluster_roles[0].name }}-binding"
+ namespace: "{{ test_ns }}"
+ labels: "{{ test_labels }}"
+ subjects:
+ - kind: ServiceAccount
+ name: "{{ test_sa }}"
+ namespace: "{{ test_ns }}"
+ apiGroup: ""
+ roleRef:
+ kind: ClusterRole
+ name: "{{ cluster_roles[0].name }}"
+ apiGroup: ""
+
+ - name: list Pod for all namespace should failed
+ kubernetes.core.k8s_info:
+ api_key: "{{ api_token }}"
+ host: "{{ cluster_host }}"
+ validate_certs: no
+ kind: Pod
+ register: error
+ ignore_errors: true
+
+ - assert:
+ that:
+ - '"pods is forbidden: User" in error.msg'
+
+ - name: list Pod for test namespace should succeed
+ kubernetes.core.k8s_info:
+ api_key: "{{ api_token }}"
+ host: "{{ cluster_host }}"
+ validate_certs: no
+ kind: Pod
+ namespace: "{{ test_ns }}"
+ no_log: true
+
+ - name: Create Cluster role Binding
+ kubernetes.core.k8s:
+ definition:
+ kind: ClusterRoleBinding
+ apiVersion: "{{ item.api_version_binding }}"
+ metadata:
+ name: "{{ item.name }}-binding"
+ labels: "{{ test_labels }}"
+ subjects:
+ - kind: ServiceAccount
+ name: "{{ test_sa }}"
+ namespace: "{{ test_ns }}"
+ apiGroup: ""
+ roleRef:
+ kind: ClusterRole
+ name: "{{ item.name }}"
+ apiGroup: ""
+ with_items: "{{ cluster_roles }}"
+
+ - name: list Pod for all namespace should succeed
+ kubernetes.core.k8s_info:
+ api_key: "{{ api_token }}"
+ host: "{{ cluster_host }}"
+ validate_certs: no
+ kind: Pod
+ no_log: true
+
+ - name: list Pod for test namespace should succeed
+ kubernetes.core.k8s_info:
+ api_key: "{{ api_token }}"
+ host: "{{ cluster_host }}"
+ validate_certs: no
+ kind: Pod
+ namespace: "{{ test_ns }}"
+ no_log: true
+
+ - name: list Node using ServiceAccount
+ kubernetes.core.k8s_info:
+ api_key: "{{ api_token }}"
+ host: "{{ cluster_host }}"
+ validate_certs: no
+ kind: Node
+ namespace: "{{ test_ns }}"
+ no_log: true
+
+ - name: Prune clusterroles (check mode)
+ community.okd.openshift_adm_prune_auth:
+ resource: clusterroles
+ label_selectors:
+ - phase=dev
+ register: check
+ check_mode: true
+
+ - name: validate clusterrole binding candidates for prune
+ assert:
+ that:
+ - '"{{ item.name }}-binding" in check.cluster_role_binding'
+ - '"{{ test_ns }}/{{ cluster_roles[0].name }}-binding" in check.role_binding'
+ with_items: "{{ cluster_roles }}"
+
+ - name: Prune Cluster Role for managing Pod
+ community.okd.openshift_adm_prune_auth:
+ resource: clusterroles
+ name: "{{ cluster_roles[0].name }}"
+
+ - name: list Pod for all namespace should failed
+ kubernetes.core.k8s_info:
+ api_key: "{{ api_token }}"
+ host: "{{ cluster_host }}"
+ validate_certs: no
+ kind: Pod
+ register: error
+ no_log: true
+ ignore_errors: true
+
+ - assert:
+ that:
+ - '"pods is forbidden: User" in error.msg'
+
+ - name: list Pod for test namespace should failed
+ kubernetes.core.k8s_info:
+ api_key: "{{ api_token }}"
+ host: "{{ cluster_host }}"
+ validate_certs: no
+ kind: Pod
+ namespace: "{{ test_ns }}"
+ register: error
+ no_log: true
+ ignore_errors: true
+
+ - assert:
+ that:
+ - '"pods is forbidden: User" in error.msg'
+
+ - name: list Node using ServiceAccount
+ kubernetes.core.k8s_info:
+ api_key: "{{ api_token }}"
+ host: "{{ cluster_host }}"
+ validate_certs: no
+ kind: Node
+ namespace: "{{ test_ns }}"
+ no_log: true
+
+ - name: Prune clusterroles (remaining)
+ community.okd.openshift_adm_prune_auth:
+ resource: clusterroles
+ label_selectors:
+ - phase=dev
+
+ - name: list Node using ServiceAccount should fail
+ kubernetes.core.k8s_info:
+ api_key: "{{ api_token }}"
+ host: "{{ cluster_host }}"
+ validate_certs: no
+ kind: Node
+ namespace: "{{ test_ns }}"
+ register: error
+ ignore_errors: true
+
+ - assert:
+ that:
+ - '"nodes is forbidden: User" in error.msg'
always:
- name: Ensure namespace is deleted
diff --git a/ansible_collections/community/okd/molecule/default/tasks/openshift_adm_prune_auth_roles.yml b/ansible_collections/community/okd/molecule/default/tasks/openshift_adm_prune_auth_roles.yml
index 1724a1938..7b75a0cfe 100644
--- a/ansible_collections/community/okd/molecule/default/tasks/openshift_adm_prune_auth_roles.yml
+++ b/ansible_collections/community/okd/molecule/default/tasks/openshift_adm_prune_auth_roles.yml
@@ -1,335 +1,336 @@
+---
- block:
- - set_fact:
- test_ns: "prune-roles"
- sa_name: "roles-sa"
- pod_name: "pod-prune"
- role_definition:
- - name: pod-list
- labels:
- action: list
- verbs:
- - list
- role_binding:
- api_version: rbac.authorization.k8s.io/v1
- - name: pod-create
- labels:
- action: create
- verbs:
- - create
- - get
- role_binding:
- api_version: authorization.openshift.io/v1
- - name: pod-delete
- labels:
- action: delete
- verbs:
- - delete
- role_binding:
- api_version: rbac.authorization.k8s.io/v1
-
- - name: Ensure namespace
- kubernetes.core.k8s:
- kind: Namespace
- name: '{{ test_ns }}'
-
- - name: Get cluster information
- kubernetes.core.k8s_cluster_info:
- register: cluster_info
- no_log: true
-
- - set_fact:
- cluster_host: "{{ cluster_info['connection']['host'] }}"
-
- - name: Create Service account
- kubernetes.core.k8s:
- definition:
- apiVersion: v1
+ - set_fact:
+ test_ns: "prune-roles"
+ sa_name: "roles-sa"
+ pod_name: "pod-prune"
+ role_definition:
+ - name: pod-list
+ labels:
+ action: list
+ verbs:
+ - list
+ role_binding:
+ api_version: rbac.authorization.k8s.io/v1
+ - name: pod-create
+ labels:
+ action: create
+ verbs:
+ - create
+ - get
+ role_binding:
+ api_version: authorization.openshift.io/v1
+ - name: pod-delete
+ labels:
+ action: delete
+ verbs:
+ - delete
+ role_binding:
+ api_version: rbac.authorization.k8s.io/v1
+
+ - name: Ensure namespace
+ kubernetes.core.k8s:
+ kind: Namespace
+ name: '{{ test_ns }}'
+
+ - name: Get cluster information
+ kubernetes.core.k8s_cluster_info:
+ register: cluster_info
+ no_log: true
+
+ - set_fact:
+ cluster_host: "{{ cluster_info['connection']['host'] }}"
+
+ - name: Create Service account
+ kubernetes.core.k8s:
+ definition:
+ apiVersion: v1
+ kind: ServiceAccount
+ metadata:
+ name: '{{ sa_name }}'
+ namespace: '{{ test_ns }}'
+
+ - name: Read Service Account
+ kubernetes.core.k8s_info:
kind: ServiceAccount
- metadata:
- name: '{{ sa_name }}'
- namespace: '{{ test_ns }}'
-
- - name: Read Service Account
- kubernetes.core.k8s_info:
- kind: ServiceAccount
- namespace: '{{ test_ns }}'
- name: '{{ sa_name }}'
- register: sa_out
-
- - set_fact:
- secret_token: "{{ sa_out.resources[0]['secrets'][0]['name'] }}"
-
- - name: Get secret details
- kubernetes.core.k8s_info:
- kind: Secret
- namespace: '{{ test_ns }}'
- name: '{{ secret_token }}'
- register: r_secret
- retries: 10
- delay: 10
- until:
- - ("'openshift.io/token-secret.value' in r_secret.resources[0]['metadata']['annotations']") or ("'token' in r_secret.resources[0]['data']")
-
- - set_fact:
- api_token: "{{ r_secret.resources[0]['metadata']['annotations']['openshift.io/token-secret.value'] }}"
- when: "'openshift.io/token-secret.value' in r_secret.resources[0]['metadata']['annotations']"
-
- - set_fact:
- api_token: "{{ r_secret.resources[0]['data']['token'] | b64decode }}"
- when: "'token' in r_secret.resources[0]['data']"
-
- - name: list resources using service account
- kubernetes.core.k8s_info:
- api_key: '{{ api_token }}'
- host: '{{ cluster_host }}'
- validate_certs: no
- kind: Pod
- namespace: '{{ test_ns }}'
- register: error
- ignore_errors: true
-
- - assert:
- that:
- - '"pods is forbidden: User" in error.msg'
-
- - name: Create a role to manage Pod from namespace "{{ test_ns }}"
- kubernetes.core.k8s:
- definition:
- kind: Role
- apiVersion: rbac.authorization.k8s.io/v1
- metadata:
- namespace: "{{ test_ns }}"
- name: "{{ item.name }}"
- labels: "{{ item.labels }}"
- rules:
- - apiGroups: [""]
- resources: ["pods"]
- verbs: "{{ item.verbs }}"
- with_items: "{{ role_definition }}"
-
- - name: Create Role Binding
- kubernetes.core.k8s:
- definition:
- kind: RoleBinding
- apiVersion: "{{ item.role_binding.api_version }}"
- metadata:
- name: "{{ item.name }}-bind"
- namespace: "{{ test_ns }}"
- subjects:
- - kind: ServiceAccount
- name: "{{ sa_name }}"
- namespace: "{{ test_ns }}"
- apiGroup: ""
- roleRef:
+ namespace: '{{ test_ns }}'
+ name: '{{ sa_name }}'
+ register: sa_out
+
+ - set_fact:
+ secret_token: "{{ sa_out.resources[0]['secrets'][0]['name'] }}"
+
+ - name: Get secret details
+ kubernetes.core.k8s_info:
+ kind: Secret
+ namespace: '{{ test_ns }}'
+ name: '{{ secret_token }}'
+ register: r_secret
+ retries: 10
+ delay: 10
+ until:
+ - ("'openshift.io/token-secret.value' in r_secret.resources[0]['metadata']['annotations']") or ("'token' in r_secret.resources[0]['data']")
+
+ - set_fact:
+ api_token: "{{ r_secret.resources[0]['metadata']['annotations']['openshift.io/token-secret.value'] }}"
+ when: "'openshift.io/token-secret.value' in r_secret.resources[0]['metadata']['annotations']"
+
+ - set_fact:
+ api_token: "{{ r_secret.resources[0]['data']['token'] | b64decode }}"
+ when: "'token' in r_secret.resources[0]['data']"
+
+ - name: list resources using service account
+ kubernetes.core.k8s_info:
+ api_key: '{{ api_token }}'
+ host: '{{ cluster_host }}'
+ validate_certs: no
+ kind: Pod
+ namespace: '{{ test_ns }}'
+ register: error
+ ignore_errors: true
+
+ - assert:
+ that:
+ - '"pods is forbidden: User" in error.msg'
+
+ - name: Create a role to manage Pod from namespace "{{ test_ns }}"
+ kubernetes.core.k8s:
+ definition:
kind: Role
- name: "{{ item.name }}"
- namespace: "{{ test_ns }}"
- apiGroup: ""
- with_items: "{{ role_definition }}"
-
- - name: Create Pod should succeed
- kubernetes.core.k8s:
- api_key: "{{ api_token }}"
- host: "{{ cluster_host }}"
- validate_certs: no
- namespace: "{{ test_ns }}"
- definition:
+ apiVersion: rbac.authorization.k8s.io/v1
+ metadata:
+ namespace: "{{ test_ns }}"
+ name: "{{ item.name }}"
+ labels: "{{ item.labels }}"
+ rules:
+ - apiGroups: [""]
+ resources: ["pods"]
+ verbs: "{{ item.verbs }}"
+ with_items: "{{ role_definition }}"
+
+ - name: Create Role Binding
+ kubernetes.core.k8s:
+ definition:
+ kind: RoleBinding
+ apiVersion: "{{ item.role_binding.api_version }}"
+ metadata:
+ name: "{{ item.name }}-bind"
+ namespace: "{{ test_ns }}"
+ subjects:
+ - kind: ServiceAccount
+ name: "{{ sa_name }}"
+ namespace: "{{ test_ns }}"
+ apiGroup: ""
+ roleRef:
+ kind: Role
+ name: "{{ item.name }}"
+ namespace: "{{ test_ns }}"
+ apiGroup: ""
+ with_items: "{{ role_definition }}"
+
+ - name: Create Pod should succeed
+ kubernetes.core.k8s:
+ api_key: "{{ api_token }}"
+ host: "{{ cluster_host }}"
+ validate_certs: no
+ namespace: "{{ test_ns }}"
+ definition:
+ kind: Pod
+ metadata:
+ name: "{{ pod_name }}"
+ spec:
+ containers:
+ - name: python
+ image: python:3.7-alpine
+ command:
+ - /bin/sh
+ - -c
+ - while true; do echo $(date); sleep 15; done
+ imagePullPolicy: IfNotPresent
+ register: result
+
+ - name: assert pod creation succeed
+ assert:
+ that:
+ - result is successful
+
+ - name: List Pod
+ kubernetes.core.k8s_info:
+ api_key: "{{ api_token }}"
+ host: "{{ cluster_host }}"
+ validate_certs: no
+ namespace: "{{ test_ns }}"
kind: Pod
- metadata:
- name: "{{ pod_name }}"
- spec:
- containers:
- - name: python
- image: python:3.7-alpine
- command:
- - /bin/sh
- - -c
- - while true; do echo $(date); sleep 15; done
- imagePullPolicy: IfNotPresent
- register: result
-
- - name: assert pod creation succeed
- assert:
- that:
- - result is successful
-
- - name: List Pod
- kubernetes.core.k8s_info:
- api_key: "{{ api_token }}"
- host: "{{ cluster_host }}"
- validate_certs: no
- namespace: "{{ test_ns }}"
- kind: Pod
- register: result
-
- - name: assert user is still authorize to list pods
- assert:
- that:
- - result is successful
-
- - name: Prune auth roles (check mode)
- community.okd.openshift_adm_prune_auth:
- resource: roles
- namespace: "{{ test_ns }}"
- register: check
- check_mode: true
-
- - name: validate that list role binding are candidates for prune
- assert:
- that: '"{{ test_ns }}/{{ item.name }}-bind" in check.role_binding'
- with_items: "{{ role_definition }}"
-
- - name: Prune resource using label_selectors option
- community.okd.openshift_adm_prune_auth:
- resource: roles
- namespace: "{{ test_ns }}"
- label_selectors:
- - action=delete
- register: prune
-
- - name: assert that role binding 'delete' was pruned
- assert:
- that:
- - prune is changed
- - '"{{ test_ns }}/{{ role_definition[2].name }}-bind" in check.role_binding'
-
- - name: assert that user could not delete pod anymore
- kubernetes.core.k8s:
- api_key: "{{ api_token }}"
- host: "{{ cluster_host }}"
- validate_certs: no
- state: absent
- namespace: "{{ test_ns }}"
- kind: Pod
- name: "{{ pod_name }}"
- register: result
- ignore_errors: true
-
- - name: assert pod deletion failed due to forbidden user
- assert:
- that:
- - '"forbidden: User" in error.msg'
-
- - name: List Pod
- kubernetes.core.k8s_info:
- api_key: "{{ api_token }}"
- host: "{{ cluster_host }}"
- validate_certs: no
- namespace: "{{ test_ns }}"
- kind: Pod
- register: result
-
- - name: assert user is still able to list pods
- assert:
- that:
- - result is successful
-
- - name: Create Pod should succeed
- kubernetes.core.k8s:
- api_key: "{{ api_token }}"
- host: "{{ cluster_host }}"
- validate_certs: no
- namespace: "{{ test_ns }}"
- definition:
+ register: result
+
+ - name: assert user is still authorize to list pods
+ assert:
+ that:
+ - result is successful
+
+ - name: Prune auth roles (check mode)
+ community.okd.openshift_adm_prune_auth:
+ resource: roles
+ namespace: "{{ test_ns }}"
+ register: check
+ check_mode: true
+
+ - name: validate that list role binding are candidates for prune
+ assert:
+ that: '"{{ test_ns }}/{{ item.name }}-bind" in check.role_binding'
+ with_items: "{{ role_definition }}"
+
+ - name: Prune resource using label_selectors option
+ community.okd.openshift_adm_prune_auth:
+ resource: roles
+ namespace: "{{ test_ns }}"
+ label_selectors:
+ - action=delete
+ register: prune
+
+ - name: assert that role binding 'delete' was pruned
+ assert:
+ that:
+ - prune is changed
+ - '"{{ test_ns }}/{{ role_definition[2].name }}-bind" in check.role_binding'
+
+ - name: assert that user could not delete pod anymore
+ kubernetes.core.k8s:
+ api_key: "{{ api_token }}"
+ host: "{{ cluster_host }}"
+ validate_certs: no
+ state: absent
+ namespace: "{{ test_ns }}"
kind: Pod
- metadata:
- name: "{{ pod_name }}-1"
- spec:
- containers:
- - name: python
- image: python:3.7-alpine
- command:
- - /bin/sh
- - -c
- - while true; do echo $(date); sleep 15; done
- imagePullPolicy: IfNotPresent
- register: result
-
- - name: assert user is still authorize to create pod
- assert:
- that:
- - result is successful
-
- - name: Prune role using name
- community.okd.openshift_adm_prune_auth:
- resource: roles
- namespace: "{{ test_ns }}"
- name: "{{ role_definition[1].name }}"
- register: prune
-
- - name: assert that role binding 'create' was pruned
- assert:
- that:
- - prune is changed
- - '"{{ test_ns }}/{{ role_definition[1].name }}-bind" in check.role_binding'
-
- - name: Create Pod (should failed)
- kubernetes.core.k8s:
- api_key: "{{ api_token }}"
- host: "{{ cluster_host }}"
- validate_certs: no
- namespace: "{{ test_ns }}"
- definition:
+ name: "{{ pod_name }}"
+ register: result
+ ignore_errors: true
+
+ - name: assert pod deletion failed due to forbidden user
+ assert:
+ that:
+ - '"forbidden: User" in error.msg'
+
+ - name: List Pod
+ kubernetes.core.k8s_info:
+ api_key: "{{ api_token }}"
+ host: "{{ cluster_host }}"
+ validate_certs: no
+ namespace: "{{ test_ns }}"
kind: Pod
- metadata:
- name: "{{ pod_name }}-2"
- spec:
- containers:
- - name: python
- image: python:3.7-alpine
- command:
- - /bin/sh
- - -c
- - while true; do echo $(date); sleep 15; done
- imagePullPolicy: IfNotPresent
- register: result
- ignore_errors: true
-
- - name: assert user is not authorize to create pod anymore
- assert:
- that:
- - '"forbidden: User" in error.msg'
-
- - name: List Pod
- kubernetes.core.k8s_info:
- api_key: "{{ api_token }}"
- host: "{{ cluster_host }}"
- validate_certs: no
- namespace: "{{ test_ns }}"
- kind: Pod
- register: result
-
- - name: assert user is still able to list pods
- assert:
- that:
- - result is successful
-
- - name: Prune all role for namespace (neither name nor label_selectors are specified)
- community.okd.openshift_adm_prune_auth:
- resource: roles
- namespace: "{{ test_ns }}"
- register: prune
-
- - name: assert that role binding 'list' was pruned
- assert:
- that:
- - prune is changed
- - '"{{ test_ns }}/{{ role_definition[0].name }}-bind" in check.role_binding'
-
- - name: List Pod
- kubernetes.core.k8s_info:
- api_key: "{{ api_token }}"
- host: "{{ cluster_host }}"
- validate_certs: no
- namespace: "{{ test_ns }}"
- kind: Pod
- register: result
- ignore_errors: true
-
- - name: assert user is not authorize to list pod anymore
- assert:
- that:
- - '"forbidden: User" in error.msg'
+ register: result
+
+ - name: assert user is still able to list pods
+ assert:
+ that:
+ - result is successful
+
+ - name: Create Pod should succeed
+ kubernetes.core.k8s:
+ api_key: "{{ api_token }}"
+ host: "{{ cluster_host }}"
+ validate_certs: no
+ namespace: "{{ test_ns }}"
+ definition:
+ kind: Pod
+ metadata:
+ name: "{{ pod_name }}-1"
+ spec:
+ containers:
+ - name: python
+ image: python:3.7-alpine
+ command:
+ - /bin/sh
+ - -c
+ - while true; do echo $(date); sleep 15; done
+ imagePullPolicy: IfNotPresent
+ register: result
+
+ - name: assert user is still authorize to create pod
+ assert:
+ that:
+ - result is successful
+
+ - name: Prune role using name
+ community.okd.openshift_adm_prune_auth:
+ resource: roles
+ namespace: "{{ test_ns }}"
+ name: "{{ role_definition[1].name }}"
+ register: prune
+
+ - name: assert that role binding 'create' was pruned
+ assert:
+ that:
+ - prune is changed
+ - '"{{ test_ns }}/{{ role_definition[1].name }}-bind" in check.role_binding'
+
+ - name: Create Pod (should failed)
+ kubernetes.core.k8s:
+ api_key: "{{ api_token }}"
+ host: "{{ cluster_host }}"
+ validate_certs: no
+ namespace: "{{ test_ns }}"
+ definition:
+ kind: Pod
+ metadata:
+ name: "{{ pod_name }}-2"
+ spec:
+ containers:
+ - name: python
+ image: python:3.7-alpine
+ command:
+ - /bin/sh
+ - -c
+ - while true; do echo $(date); sleep 15; done
+ imagePullPolicy: IfNotPresent
+ register: result
+ ignore_errors: true
+
+ - name: assert user is not authorize to create pod anymore
+ assert:
+ that:
+ - '"forbidden: User" in error.msg'
+
+ - name: List Pod
+ kubernetes.core.k8s_info:
+ api_key: "{{ api_token }}"
+ host: "{{ cluster_host }}"
+ validate_certs: no
+ namespace: "{{ test_ns }}"
+ kind: Pod
+ register: result
+
+ - name: assert user is still able to list pods
+ assert:
+ that:
+ - result is successful
+
+ - name: Prune all role for namespace (neither name nor label_selectors are specified)
+ community.okd.openshift_adm_prune_auth:
+ resource: roles
+ namespace: "{{ test_ns }}"
+ register: prune
+
+ - name: assert that role binding 'list' was pruned
+ assert:
+ that:
+ - prune is changed
+ - '"{{ test_ns }}/{{ role_definition[0].name }}-bind" in check.role_binding'
+
+ - name: List Pod
+ kubernetes.core.k8s_info:
+ api_key: "{{ api_token }}"
+ host: "{{ cluster_host }}"
+ validate_certs: no
+ namespace: "{{ test_ns }}"
+ kind: Pod
+ register: result
+ ignore_errors: true
+
+ - name: assert user is not authorize to list pod anymore
+ assert:
+ that:
+ - '"forbidden: User" in error.msg'
always:
- name: Ensure namespace is deleted
diff --git a/ansible_collections/community/okd/molecule/default/tasks/openshift_adm_prune_deployments.yml b/ansible_collections/community/okd/molecule/default/tasks/openshift_adm_prune_deployments.yml
index baa024188..ca48f7327 100644
--- a/ansible_collections/community/okd/molecule/default/tasks/openshift_adm_prune_deployments.yml
+++ b/ansible_collections/community/okd/molecule/default/tasks/openshift_adm_prune_deployments.yml
@@ -1,255 +1,255 @@
+---
- name: Prune deployments
block:
- - set_fact:
- dc_name: "hello"
- deployment_ns: "prune-deployments"
- deployment_ns_2: "prune-deployments-2"
-
+ - set_fact:
+ dc_name: "hello"
+ deployment_ns: "prune-deployments"
+ deployment_ns_2: "prune-deployments-2"
- - name: Ensure namespace
- community.okd.k8s:
- kind: Namespace
- name: '{{ deployment_ns }}'
+ - name: Ensure namespace
+ community.okd.k8s:
+ kind: Namespace
+ name: '{{ deployment_ns }}'
- - name: Create deployment config
- community.okd.k8s:
- namespace: '{{ deployment_ns }}'
- definition:
- kind: DeploymentConfig
- apiVersion: apps.openshift.io/v1
- metadata:
- name: '{{ dc_name }}'
- spec:
- replicas: 1
- selector:
+ - name: Create deployment config
+ community.okd.k8s:
+ namespace: '{{ deployment_ns }}'
+ definition:
+ kind: DeploymentConfig
+ apiVersion: apps.openshift.io/v1
+ metadata:
name: '{{ dc_name }}'
- template:
- metadata:
- labels:
- name: '{{ dc_name }}'
- spec:
- containers:
- - name: hello-openshift
- imagePullPolicy: IfNotPresent
- image: python:3.7-alpine
- command: [ "/bin/sh", "-c", "while true;do date;sleep 2s; done"]
- wait: yes
+ spec:
+ replicas: 1
+ selector:
+ name: '{{ dc_name }}'
+ template:
+ metadata:
+ labels:
+ name: '{{ dc_name }}'
+ spec:
+ containers:
+ - name: hello-openshift
+ imagePullPolicy: IfNotPresent
+ image: python:3.7-alpine
+ command: [ "/bin/sh", "-c", "while true;do date;sleep 2s; done"]
+ wait: yes
- - name: prune deployments (no candidate DeploymentConfig)
- community.okd.openshift_adm_prune_deployments:
- namespace: "{{ deployment_ns }}"
- register: test_prune
+ - name: prune deployments (no candidate DeploymentConfig)
+ community.okd.openshift_adm_prune_deployments:
+ namespace: "{{ deployment_ns }}"
+ register: test_prune
- - assert:
- that:
- - test_prune is not changed
- - test_prune.replication_controllers | length == 0
+ - assert:
+ that:
+ - test_prune is not changed
+ - test_prune.replication_controllers | length == 0
- - name: Update DeploymentConfig - set replicas to 0
- community.okd.k8s:
- namespace: "{{ deployment_ns }}"
- definition:
- kind: DeploymentConfig
- apiVersion: "apps.openshift.io/v1"
- metadata:
- name: "{{ dc_name }}"
- spec:
- replicas: 0
- selector:
+ - name: Update DeploymentConfig - set replicas to 0
+ community.okd.k8s:
+ namespace: "{{ deployment_ns }}"
+ definition:
+ kind: DeploymentConfig
+ apiVersion: "apps.openshift.io/v1"
+ metadata:
name: "{{ dc_name }}"
- template:
- metadata:
- labels:
- name: "{{ dc_name }}"
- spec:
- containers:
- - name: hello-openshift
- imagePullPolicy: IfNotPresent
- image: python:3.7-alpine
- command: [ "/bin/sh", "-c", "while true;do date;sleep 2s; done"]
- wait: yes
+ spec:
+ replicas: 0
+ selector:
+ name: "{{ dc_name }}"
+ template:
+ metadata:
+ labels:
+ name: "{{ dc_name }}"
+ spec:
+ containers:
+ - name: hello-openshift
+ imagePullPolicy: IfNotPresent
+ image: python:3.7-alpine
+ command: [ "/bin/sh", "-c", "while true;do date;sleep 2s; done"]
+ wait: yes
- - name: Wait for ReplicationController candidate for pruning
- kubernetes.core.k8s_info:
- kind: ReplicationController
- namespace: "{{ deployment_ns }}"
- register: result
- retries: 10
- delay: 30
- until:
- - result.resources.0.metadata.annotations["openshift.io/deployment.phase"] in ("Failed", "Complete")
+ - name: Wait for ReplicationController candidate for pruning
+ kubernetes.core.k8s_info:
+ kind: ReplicationController
+ namespace: "{{ deployment_ns }}"
+ register: result
+ retries: 10
+ delay: 30
+ until:
+ - result.resources.0.metadata.annotations["openshift.io/deployment.phase"] in ("Failed", "Complete")
- - name: Prune deployments - should delete 1 ReplicationController
- community.okd.openshift_adm_prune_deployments:
- namespace: "{{ deployment_ns }}"
- check_mode: yes
- register: test_prune
+ - name: Prune deployments - should delete 1 ReplicationController
+ community.okd.openshift_adm_prune_deployments:
+ namespace: "{{ deployment_ns }}"
+ check_mode: yes
+ register: test_prune
- - name: Read ReplicationController
- kubernetes.core.k8s_info:
- kind: ReplicationController
- namespace: "{{ deployment_ns }}"
- register: replications
+ - name: Read ReplicationController
+ kubernetes.core.k8s_info:
+ kind: ReplicationController
+ namespace: "{{ deployment_ns }}"
+ register: replications
- - name: Assert that Replication controller was not deleted
- assert:
- that:
- - replications.resources | length == 1
- - 'replications.resources.0.metadata.name is match("{{ dc_name }}-*")'
+ - name: Assert that Replication controller was not deleted
+ assert:
+ that:
+ - replications.resources | length == 1
+ - 'replications.resources.0.metadata.name is match("{{ dc_name }}-*")'
- - name: Assure that candidate ReplicationController was found for pruning
- assert:
- that:
- - test_prune is changed
- - test_prune.replication_controllers | length == 1
- - test_prune.replication_controllers.0.metadata.name == replications.resources.0.metadata.name
- - test_prune.replication_controllers.0.metadata.namespace == replications.resources.0.metadata.namespace
+ - name: Assure that candidate ReplicationController was found for pruning
+ assert:
+ that:
+ - test_prune is changed
+ - test_prune.replication_controllers | length == 1
+ - test_prune.replication_controllers.0.metadata.name == replications.resources.0.metadata.name
+ - test_prune.replication_controllers.0.metadata.namespace == replications.resources.0.metadata.namespace
- - name: Prune deployments - keep younger than 45min (check_mode)
- community.okd.openshift_adm_prune_deployments:
- keep_younger_than: 45
- namespace: "{{ deployment_ns }}"
- check_mode: true
- register: keep_younger
+ - name: Prune deployments - keep younger than 45min (check_mode)
+ community.okd.openshift_adm_prune_deployments:
+ keep_younger_than: 45
+ namespace: "{{ deployment_ns }}"
+ check_mode: true
+ register: keep_younger
- - name: assert no candidate was found
- assert:
- that:
- - keep_younger is not changed
- - keep_younger.replication_controllers == []
+ - name: assert no candidate was found
+ assert:
+ that:
+ - keep_younger is not changed
+ - keep_younger.replication_controllers == []
- - name: Ensure second namespace is created
- community.okd.k8s:
- kind: Namespace
- name: '{{ deployment_ns_2 }}'
+ - name: Ensure second namespace is created
+ community.okd.k8s:
+ kind: Namespace
+ name: '{{ deployment_ns_2 }}'
- - name: Create deployment config from 2nd namespace
- community.okd.k8s:
- namespace: '{{ deployment_ns_2 }}'
- definition:
- kind: DeploymentConfig
- apiVersion: apps.openshift.io/v1
- metadata:
- name: '{{ dc_name }}2'
- spec:
- replicas: 1
- selector:
+ - name: Create deployment config from 2nd namespace
+ community.okd.k8s:
+ namespace: '{{ deployment_ns_2 }}'
+ definition:
+ kind: DeploymentConfig
+ apiVersion: apps.openshift.io/v1
+ metadata:
name: '{{ dc_name }}2'
- template:
- metadata:
- labels:
- name: '{{ dc_name }}2'
- spec:
- containers:
- - name: hello-openshift
- imagePullPolicy: IfNotPresent
- image: python:3.7-alpine
- command: [ "/bin/sh", "-c", "while true;do date;sleep 2s; done"]
- wait: yes
+ spec:
+ replicas: 1
+ selector:
+ name: '{{ dc_name }}2'
+ template:
+ metadata:
+ labels:
+ name: '{{ dc_name }}2'
+ spec:
+ containers:
+ - name: hello-openshift
+ imagePullPolicy: IfNotPresent
+ image: python:3.7-alpine
+ command: [ "/bin/sh", "-c", "while true;do date;sleep 2s; done"]
+ wait: yes
- - name: Stop deployment config - replicas = 0
- community.okd.k8s:
- namespace: '{{ deployment_ns_2 }}'
- definition:
- kind: DeploymentConfig
- apiVersion: apps.openshift.io/v1
- metadata:
- name: '{{ dc_name }}2'
- spec:
- replicas: 0
- selector:
+ - name: Stop deployment config - replicas = 0
+ community.okd.k8s:
+ namespace: '{{ deployment_ns_2 }}'
+ definition:
+ kind: DeploymentConfig
+ apiVersion: apps.openshift.io/v1
+ metadata:
name: '{{ dc_name }}2'
- template:
- metadata:
- labels:
- name: '{{ dc_name }}2'
- spec:
- containers:
- - name: hello-openshift
- imagePullPolicy: IfNotPresent
- image: python:3.7-alpine
- command: [ "/bin/sh", "-c", "while true;do date;sleep 2s; done"]
- wait: yes
+ spec:
+ replicas: 0
+ selector:
+ name: '{{ dc_name }}2'
+ template:
+ metadata:
+ labels:
+ name: '{{ dc_name }}2'
+ spec:
+ containers:
+ - name: hello-openshift
+ imagePullPolicy: IfNotPresent
+ image: python:3.7-alpine
+ command: [ "/bin/sh", "-c", "while true;do date;sleep 2s; done"]
+ wait: yes
+
+ - name: Wait for ReplicationController candidate for pruning
+ kubernetes.core.k8s_info:
+ kind: ReplicationController
+ namespace: "{{ deployment_ns_2 }}"
+ register: result
+ retries: 10
+ delay: 30
+ until:
+ - result.resources.0.metadata.annotations["openshift.io/deployment.phase"] in ("Failed", "Complete")
- - name: Wait for ReplicationController candidate for pruning
- kubernetes.core.k8s_info:
- kind: ReplicationController
- namespace: "{{ deployment_ns_2 }}"
- register: result
- retries: 10
- delay: 30
- until:
- - result.resources.0.metadata.annotations["openshift.io/deployment.phase"] in ("Failed", "Complete")
+ # Prune from one namespace should not have any effect on others namespaces
+ - name: Prune deployments from 2nd namespace
+ community.okd.openshift_adm_prune_deployments:
+ namespace: "{{ deployment_ns_2 }}"
+ check_mode: yes
+ register: test_prune
- # Prune from one namespace should not have any effect on others namespaces
- - name: Prune deployments from 2nd namespace
- community.okd.openshift_adm_prune_deployments:
- namespace: "{{ deployment_ns_2 }}"
- check_mode: yes
- register: test_prune
+ - name: Assure that candidate ReplicationController was found for pruning
+ assert:
+ that:
+ - test_prune is changed
+ - test_prune.replication_controllers | length == 1
+ - "test_prune.replication_controllers.0.metadata.namespace == deployment_ns_2"
- - name: Assure that candidate ReplicationController was found for pruning
- assert:
- that:
- - test_prune is changed
- - test_prune.replication_controllers | length == 1
- - "test_prune.replication_controllers.0.metadata.namespace == deployment_ns_2"
+ # Prune without namespace option
+ - name: Prune from all namespace should update more deployments
+ community.okd.openshift_adm_prune_deployments:
+ check_mode: yes
+ register: no_namespace_prune
- # Prune without namespace option
- - name: Prune from all namespace should update more deployments
- community.okd.openshift_adm_prune_deployments:
- check_mode: yes
- register: no_namespace_prune
+ - name: Assure multiple ReplicationController were found for pruning
+ assert:
+ that:
+ - no_namespace_prune is changed
+ - no_namespace_prune.replication_controllers | length == 2
- - name: Assure multiple ReplicationController were found for pruning
- assert:
- that:
- - no_namespace_prune is changed
- - no_namespace_prune.replication_controllers | length == 2
-
- # Execute Prune from 2nd namespace
- - name: Read ReplicationController before Prune operation
- kubernetes.core.k8s_info:
- kind: ReplicationController
- namespace: "{{ deployment_ns_2 }}"
- register: replications
+ # Execute Prune from 2nd namespace
+ - name: Read ReplicationController before Prune operation
+ kubernetes.core.k8s_info:
+ kind: ReplicationController
+ namespace: "{{ deployment_ns_2 }}"
+ register: replications
- - assert:
- that:
- - replications.resources | length == 1
+ - assert:
+ that:
+ - replications.resources | length == 1
- - name: Prune DeploymentConfig from 2nd namespace
- community.okd.openshift_adm_prune_deployments:
- namespace: "{{ deployment_ns_2 }}"
- register: _prune
+ - name: Prune DeploymentConfig from 2nd namespace
+ community.okd.openshift_adm_prune_deployments:
+ namespace: "{{ deployment_ns_2 }}"
+ register: _prune
- - name: Assert DeploymentConfig was deleted
- assert:
- that:
- - _prune is changed
- - _prune.replication_controllers | length == 1
- - _prune.replication_controllers.0.details.name == replications.resources.0.metadata.name
+ - name: Assert DeploymentConfig was deleted
+ assert:
+ that:
+ - _prune is changed
+ - _prune.replication_controllers | length == 1
+ - _prune.replication_controllers.0.details.name == replications.resources.0.metadata.name
- # Execute Prune without namespace option
- - name: Read ReplicationController before Prune operation
- kubernetes.core.k8s_info:
- kind: ReplicationController
- namespace: "{{ deployment_ns }}"
- register: replications
+ # Execute Prune without namespace option
+ - name: Read ReplicationController before Prune operation
+ kubernetes.core.k8s_info:
+ kind: ReplicationController
+ namespace: "{{ deployment_ns }}"
+ register: replications
- - assert:
- that:
- - replications.resources | length == 1
+ - assert:
+ that:
+ - replications.resources | length == 1
- - name: Prune from all namespace should update more deployments
- community.okd.openshift_adm_prune_deployments:
- register: _prune
+ - name: Prune from all namespace should update more deployments
+ community.okd.openshift_adm_prune_deployments:
+ register: _prune
- - name: Assure multiple ReplicationController were found for pruning
- assert:
- that:
- - _prune is changed
- - _prune.replication_controllers | length > 0
+ - name: Assure multiple ReplicationController were found for pruning
+ assert:
+ that:
+ - _prune is changed
+ - _prune.replication_controllers | length > 0
always:
- name: Delete 1st namespace
diff --git a/ansible_collections/community/okd/molecule/default/tasks/openshift_builds.yml b/ansible_collections/community/okd/molecule/default/tasks/openshift_builds.yml
index b564f8bcd..2acbac45e 100644
--- a/ansible_collections/community/okd/molecule/default/tasks/openshift_builds.yml
+++ b/ansible_collections/community/okd/molecule/default/tasks/openshift_builds.yml
@@ -1,240 +1,245 @@
+---
- block:
- - set_fact:
- build_ns: "builds"
- build_config: "start-build"
- is_name: "ruby"
- prune_build: "prune-build"
-
- - name: Ensure namespace
- kubernetes.core.k8s:
- kind: Namespace
- name: "{{ build_ns }}"
-
- - name: Create ImageStream
- community.okd.k8s:
- namespace: "{{ build_ns }}"
- definition:
- apiVersion: image.openshift.io/v1
- kind: ImageStream
- metadata:
- name: "{{ is_name }}"
- spec:
- lookupPolicy:
- local: false
- tags: []
-
- - name: Create build configuration
- community.okd.k8s:
- namespace: "{{ build_ns }}"
- definition:
- kind: BuildConfig
- apiVersion: build.openshift.io/v1
- metadata:
- name: "{{ build_config }}"
- spec:
- source:
- dockerfile: |
- FROM openshift/ruby-22-centos7
- RUN sleep 60s
- USER ansible
- strategy:
- type: Docker
- output:
- to:
- kind: "ImageStreamTag"
- name: "{{ is_name }}:latest"
-
- - name: Start Build from Build configuration
- community.okd.openshift_build:
- namespace: "{{ build_ns }}"
- build_config_name: "{{ build_config }}"
- register: new_build
-
- - name: Assert that a build has been created
- assert:
- that:
- - new_build is changed
- - new_build.builds.0.metadata.name == "{{ build_config }}-1"
-
- - name: Start a new Build from previous Build
- community.okd.openshift_build:
- namespace: "{{ build_ns }}"
- build_name: "{{ new_build.builds.0.metadata.name }}"
- register: rerun_build
-
- - name: Assert that another build has been created
- assert:
- that:
- - rerun_build is changed
- - rerun_build.builds.0.metadata.name == "{{ build_config }}-2"
-
- - name: Cancel first build created
- community.okd.openshift_build:
- namespace: "{{ build_ns }}"
- build_name: "{{ build_config }}-1"
- state: cancelled
- wait: yes
- register: cancel
-
- - name: Assert that the Build was cancelled
- assert:
- that:
- - cancel is changed
- - cancel.builds | length == 1
- - cancel.builds.0.metadata.name == "{{ build_config }}-1"
- - cancel.builds.0.metadata.namespace == "{{ build_ns }}"
- - cancel.builds.0.status.cancelled
-
- - name: Get Build info
- kubernetes.core.k8s_info:
- version: build.openshift.io/v1
- kind: Build
- namespace: "{{ build_ns }}"
- name: "{{ cancel.builds.0.metadata.name }}"
- register: build
-
- - name: Assert that build phase is cancelled
- assert:
- that:
- - build.resources | length == 1
- - build.resources.0.status.cancelled
- - build.resources.0.status.phase == 'Cancelled'
-
- - name: Cancel and restart Build using build config name
- community.okd.openshift_build:
- namespace: "{{ build_ns }}"
- build_config_name: "{{ build_config }}"
- state: restarted
- build_phases:
- - Running
- - New
- register: restart
-
- - name: assert that new build was created
- assert:
- that:
- - restart is changed
- - restart.builds | length == 1
- - 'restart.builds.0.metadata.name == "{{ build_config }}-3"'
-
- - name: Get Build 2 info
- kubernetes.core.k8s_info:
- version: build.openshift.io/v1
- kind: Build
- namespace: "{{ build_ns }}"
- name: "{{ build_config }}-2"
- register: build
-
- - name: Assert that build phase is cancelled
- assert:
- that:
- - build.resources | length == 1
- - build.resources.0.status.cancelled
- - build.resources.0.status.phase == 'Cancelled'
-
- - name: Get Build info
- kubernetes.core.k8s_info:
- version: build.openshift.io/v1
- kind: Build
- namespace: "{{ build_ns }}"
- name: "{{ build_config }}-3"
- register: build
-
- - name: Assert that Build is not cancelled
- assert:
- that:
- - build.resources | length == 1
- - '"cancelled" not in build.resources.0.status'
- - "build.resources.0.status.phase in ('New', 'Pending', 'Running')"
-
- - name: Prune Builds keep younger than 30min
- community.okd.openshift_adm_prune_builds:
- keep_younger_than: 30
- namespace: "{{ build_ns }}"
- register: prune
- check_mode: yes
-
- - name: Assert that no Builds were found
- assert:
- that:
- - not prune.changed
- - prune.builds | length == 0
-
- - name: Prune Builds without namespace
- community.okd.openshift_adm_prune_builds:
- register: prune_without_ns
- check_mode: yes
-
- - name: Assert that completed build are candidate for prune
- assert:
- that:
- - prune_without_ns is changed
- - prune_without_ns.builds | length > 0
- - '"{{ build_config }}-1" in build_names'
- - '"{{ build_config }}-2" in build_names'
- vars:
- build_names: '{{ prune_without_ns.builds | map(attribute="metadata") | flatten | map(attribute="name") | list }}'
-
- - name: Prune Builds using namespace
- community.okd.openshift_adm_prune_builds:
- namespace: "{{ build_ns }}"
- register: prune_with_ns
- check_mode: yes
-
- - name: Assert that prune operation found the completed build
- assert:
- that:
- - prune_with_ns is changed
- - prune_with_ns.builds | length == 2
-
- - name: Check Build before prune
- kubernetes.core.k8s_info:
- kind: Build
- api_version: build.openshift.io/v1
- name: "{{ build_config }}-1"
- namespace: "{{ build_ns }}"
- register: resource
-
- - name: Validate that any previous build operation executed with check_mode did not deleted the build
- assert:
- that:
- - resource.resources | length == 1
-
- - name: Execute prune operation
- community.okd.openshift_adm_prune_builds:
- namespace: "{{ build_ns }}"
- register: prune
-
- - name: assert prune is changed
- assert:
- that:
- - prune is changed
-
- - name: Check Build
- kubernetes.core.k8s_info:
- kind: Build
- api_version: build.openshift.io/v1
- name: "{{ build_config }}-1"
- namespace: "{{ build_ns }}"
- register: resource
-
- - name: Assert that the Build does not exist anymore
- assert:
- that:
- - resource.resources | length == 0
-
- - name: Check Build
- kubernetes.core.k8s_info:
- kind: Build
- api_version: build.openshift.io/v1
- name: "{{ build_config }}-2"
- namespace: "{{ build_ns }}"
- register: resource
-
- - name: Assert that the Build does not exist anymore
- assert:
- that:
- - resource.resources | length == 0
+ - set_fact:
+ build_ns: "builds"
+ build_config: "start-build"
+ is_name: "ruby"
+ prune_build: "prune-build"
+
+ - name: Ensure namespace
+ kubernetes.core.k8s:
+ kind: Namespace
+ name: "{{ build_ns }}"
+
+ - name: Create ImageStream
+ community.okd.k8s:
+ namespace: "{{ build_ns }}"
+ definition:
+ apiVersion: image.openshift.io/v1
+ kind: ImageStream
+ metadata:
+ name: "{{ is_name }}"
+ spec:
+ lookupPolicy:
+ local: false
+ tags: []
+
+ - name: Create build configuration
+ community.okd.k8s:
+ namespace: "{{ build_ns }}"
+ definition:
+ kind: BuildConfig
+ apiVersion: build.openshift.io/v1
+ metadata:
+ name: "{{ build_config }}"
+ spec:
+ source:
+ dockerfile: |
+ FROM openshift/ruby-22-centos7
+ RUN sleep 60s
+ USER ansible
+ strategy:
+ type: Docker
+ output:
+ to:
+ kind: "ImageStreamTag"
+ name: "{{ is_name }}:latest"
+
+ - name: Start Build from Build configuration
+ community.okd.openshift_build:
+ namespace: "{{ build_ns }}"
+ build_config_name: "{{ build_config }}"
+ register: new_build
+
+ - name: Assert that a build has been created
+ assert:
+ that:
+ - new_build is changed
+ - new_build.builds.0.metadata.name == "{{ build_config }}-1"
+
+ - name: Start a new Build from previous Build
+ community.okd.openshift_build:
+ namespace: "{{ build_ns }}"
+ build_name: "{{ new_build.builds.0.metadata.name }}"
+ register: rerun_build
+
+ - name: Assert that another build has been created
+ assert:
+ that:
+ - rerun_build is changed
+ - rerun_build.builds.0.metadata.name == "{{ build_config }}-2"
+
+ - name: Cancel first build created
+ community.okd.openshift_build:
+ namespace: "{{ build_ns }}"
+ build_name: "{{ build_config }}-1"
+ state: cancelled
+ wait: yes
+ register: cancel
+
+ - name: Assert that the Build was cancelled
+ assert:
+ that:
+ - cancel is changed
+ - cancel.builds | length == 1
+ - cancel.builds.0.metadata.name == "{{ build_config }}-1"
+ - cancel.builds.0.metadata.namespace == "{{ build_ns }}"
+ - '"cancelled" in cancel.builds.0.status'
+ - cancel.builds.0.status.cancelled
+
+ - name: Get info for 1st Build
+ kubernetes.core.k8s_info:
+ version: build.openshift.io/v1
+ kind: Build
+ namespace: "{{ build_ns }}"
+ name: "{{ cancel.builds.0.metadata.name }}"
+ register: build
+
+ - name: Assert that build phase is cancelled
+ assert:
+ that:
+ - build.resources | length == 1
+ - '"cancelled" in build.resources.0.status'
+ - build.resources.0.status.cancelled
+ - build.resources.0.status.phase == 'Cancelled'
+
+ - name: Cancel and restart Build using build config name
+ community.okd.openshift_build:
+ namespace: "{{ build_ns }}"
+ build_config_name: "{{ build_config }}"
+ state: restarted
+ build_phases:
+ - Pending
+ - Running
+ - New
+ register: restart
+
+ - name: assert that new build was created
+ assert:
+ that:
+ - restart is changed
+ - restart.builds | length == 1
+ - 'restart.builds.0.metadata.name == "{{ build_config }}-3"'
+
+ - name: Get info for 2nd Build
+ kubernetes.core.k8s_info:
+ version: build.openshift.io/v1
+ kind: Build
+ namespace: "{{ build_ns }}"
+ name: "{{ build_config }}-2"
+ register: build
+
+ - name: Assert that build phase is cancelled
+ assert:
+ that:
+ - build.resources | length == 1
+ - '"cancelled" in build.resources.0.status'
+ - build.resources.0.status.cancelled
+ - build.resources.0.status.phase == 'Cancelled'
+
+ - name: Get info for 3rd build
+ kubernetes.core.k8s_info:
+ version: build.openshift.io/v1
+ kind: Build
+ namespace: "{{ build_ns }}"
+ name: "{{ build_config }}-3"
+ register: build
+
+ - name: Assert that Build is not cancelled
+ assert:
+ that:
+ - build.resources | length == 1
+ - '"cancelled" not in build.resources.0.status'
+ - "build.resources.0.status.phase in ('New', 'Pending', 'Running')"
+
+ - name: Prune Builds keep younger than 30min
+ community.okd.openshift_adm_prune_builds:
+ keep_younger_than: 30
+ namespace: "{{ build_ns }}"
+ register: prune
+ check_mode: yes
+
+ - name: Assert that no Builds were found
+ assert:
+ that:
+ - not prune.changed
+ - prune.builds | length == 0
+
+ - name: Prune Builds without namespace
+ community.okd.openshift_adm_prune_builds:
+ register: prune_without_ns
+ check_mode: yes
+
+ - name: Assert that completed build are candidate for prune
+ assert:
+ that:
+ - prune_without_ns is changed
+ - prune_without_ns.builds | length > 0
+ - '"{{ build_config }}-1" in build_names'
+ - '"{{ build_config }}-2" in build_names'
+ vars:
+ build_names: '{{ prune_without_ns.builds | map(attribute="metadata") | flatten | map(attribute="name") | list }}'
+
+ - name: Prune Builds using namespace
+ community.okd.openshift_adm_prune_builds:
+ namespace: "{{ build_ns }}"
+ register: prune_with_ns
+ check_mode: yes
+
+ - name: Assert that prune operation found the completed build
+ assert:
+ that:
+ - prune_with_ns is changed
+ - prune_with_ns.builds | length == 2
+
+ - name: Check Build before prune
+ kubernetes.core.k8s_info:
+ kind: Build
+ api_version: build.openshift.io/v1
+ name: "{{ build_config }}-1"
+ namespace: "{{ build_ns }}"
+ register: resource
+
+ - name: Validate that any previous build operation executed with check_mode did not deleted the build
+ assert:
+ that:
+ - resource.resources | length == 1
+
+ - name: Execute prune operation
+ community.okd.openshift_adm_prune_builds:
+ namespace: "{{ build_ns }}"
+ register: prune
+
+ - name: assert prune is changed
+ assert:
+ that:
+ - prune is changed
+
+ - name: Check Build
+ kubernetes.core.k8s_info:
+ kind: Build
+ api_version: build.openshift.io/v1
+ name: "{{ build_config }}-1"
+ namespace: "{{ build_ns }}"
+ register: resource
+
+ - name: Assert that the Build does not exist anymore
+ assert:
+ that:
+ - resource.resources | length == 0
+
+ - name: Check Build
+ kubernetes.core.k8s_info:
+ kind: Build
+ api_version: build.openshift.io/v1
+ name: "{{ build_config }}-2"
+ namespace: "{{ build_ns }}"
+ register: resource
+
+ - name: Assert that the Build does not exist anymore
+ assert:
+ that:
+ - resource.resources | length == 0
always:
- name: Ensure namespace is deleted
diff --git a/ansible_collections/community/okd/molecule/default/tasks/openshift_import_images.yml b/ansible_collections/community/okd/molecule/default/tasks/openshift_import_images.yml
index 04392bb26..76c49f0a1 100644
--- a/ansible_collections/community/okd/molecule/default/tasks/openshift_import_images.yml
+++ b/ansible_collections/community/okd/molecule/default/tasks/openshift_import_images.yml
@@ -1,174 +1,175 @@
+---
- name: Openshift import image testing
block:
- - set_fact:
- test_ns: "import-images"
-
- - name: Ensure namespace
- community.okd.k8s:
- kind: Namespace
- name: '{{ test_ns }}'
-
- - name: Import image using tag (should import latest tag only)
- community.okd.openshift_import_image:
- namespace: "{{ test_ns }}"
- name: "ansible/awx"
- check_mode: yes
- register: import_tag
-
- - name: Assert only latest was imported
- assert:
- that:
- - import_tag is changed
- - import_tag.result | length == 1
- - import_tag.result.0.spec.import
- - import_tag.result.0.spec.images.0.from.kind == "DockerImage"
- - import_tag.result.0.spec.images.0.from.name == "ansible/awx"
-
- - name: check image stream
- kubernetes.core.k8s_info:
- kind: ImageStream
- namespace: "{{ test_ns }}"
- name: awx
- register: resource
-
- - name: assert that image stream is not created when using check_mode=yes
- assert:
- that:
- - resource.resources == []
-
- - name: Import image using tag (should import latest tag only)
- community.okd.openshift_import_image:
- namespace: "{{ test_ns }}"
- name: "ansible/awx"
- register: import_tag
-
- - name: Assert only latest was imported
- assert:
- that:
- - import_tag is changed
-
- - name: check image stream
- kubernetes.core.k8s_info:
- kind: ImageStream
- namespace: "{{ test_ns }}"
- name: awx
- register: resource
-
- - name: assert that image stream contains only tag latest
- assert:
- that:
- - resource.resources | length == 1
- - resource.resources.0.status.tags.0.tag == 'latest'
-
- - name: Import once again the latest tag
- community.okd.openshift_import_image:
- namespace: "{{ test_ns }}"
- name: "ansible/awx"
- register: import_tag
-
- - name: assert change was performed
- assert:
- that:
- - import_tag is changed
-
- - name: check image stream
- kubernetes.core.k8s_info:
- kind: ImageStream
- version: image.openshift.io/v1
- namespace: "{{ test_ns }}"
- name: awx
- register: resource
-
- - name: assert that image stream still contains unique tag
- assert:
- that:
- - resource.resources | length == 1
- - resource.resources.0.status.tags.0.tag == 'latest'
-
- - name: Import another tags
- community.okd.openshift_import_image:
- namespace: "{{ test_ns }}"
- name: "ansible/awx:17.1.0"
- register: import_another_tag
- ignore_errors: yes
-
- - name: assert that another tag was imported
- assert:
- that:
- - import_another_tag is failed
- - '"the tag 17.1.0 does not exist on the image stream" in import_another_tag.msg'
-
- - name: Create simple ImageStream (without docker external container)
- community.okd.k8s:
- namespace: "{{ test_ns }}"
- name: "local-is"
- definition:
- apiVersion: image.openshift.io/v1
+ - set_fact:
+ test_ns: "import-images"
+
+ - name: Ensure namespace
+ community.okd.k8s:
+ kind: Namespace
+ name: '{{ test_ns }}'
+
+ - name: Import image using tag (should import latest tag only)
+ community.okd.openshift_import_image:
+ namespace: "{{ test_ns }}"
+ name: "ansible/awx"
+ check_mode: yes
+ register: import_tag
+
+ - name: Assert only latest was imported
+ assert:
+ that:
+ - import_tag is changed
+ - import_tag.result | length == 1
+ - import_tag.result.0.spec.import
+ - import_tag.result.0.spec.images.0.from.kind == "DockerImage"
+ - import_tag.result.0.spec.images.0.from.name == "ansible/awx"
+
+ - name: check image stream
+ kubernetes.core.k8s_info:
+ kind: ImageStream
+ namespace: "{{ test_ns }}"
+ name: awx
+ register: resource
+
+ - name: assert that image stream is not created when using check_mode=yes
+ assert:
+ that:
+ - resource.resources == []
+
+ - name: Import image using tag (should import latest tag only)
+ community.okd.openshift_import_image:
+ namespace: "{{ test_ns }}"
+ name: "ansible/awx"
+ register: import_tag
+
+ - name: Assert only latest was imported
+ assert:
+ that:
+ - import_tag is changed
+
+ - name: check image stream
+ kubernetes.core.k8s_info:
+ kind: ImageStream
+ namespace: "{{ test_ns }}"
+ name: awx
+ register: resource
+
+ - name: assert that image stream contains only tag latest
+ assert:
+ that:
+ - resource.resources | length == 1
+ - resource.resources.0.status.tags.0.tag == 'latest'
+
+ - name: Import once again the latest tag
+ community.okd.openshift_import_image:
+ namespace: "{{ test_ns }}"
+ name: "ansible/awx"
+ register: import_tag
+
+ - name: assert change was performed
+ assert:
+ that:
+ - import_tag is changed
+
+ - name: check image stream
+ kubernetes.core.k8s_info:
+ kind: ImageStream
+ version: image.openshift.io/v1
+ namespace: "{{ test_ns }}"
+ name: awx
+ register: resource
+
+ - name: assert that image stream still contains unique tag
+ assert:
+ that:
+ - resource.resources | length == 1
+ - resource.resources.0.status.tags.0.tag == 'latest'
+
+ - name: Import another tags
+ community.okd.openshift_import_image:
+ namespace: "{{ test_ns }}"
+ name: "ansible/awx:17.1.0"
+ register: import_another_tag
+ ignore_errors: yes
+
+ - name: assert that another tag was imported
+ assert:
+ that:
+ - import_another_tag is failed
+ - '"the tag 17.1.0 does not exist on the image stream" in import_another_tag.msg'
+
+ - name: Create simple ImageStream (without docker external container)
+ community.okd.k8s:
+ namespace: "{{ test_ns }}"
+ name: "local-is"
+ definition:
+ apiVersion: image.openshift.io/v1
+ kind: ImageStream
+ spec:
+ lookupPolicy:
+ local: false
+ tags: []
+
+ - name: Import all tag for image stream not pointing on external container image should failed
+ community.okd.openshift_import_image:
+ namespace: "{{ test_ns }}"
+ name: "local-is"
+ all: true
+ register: error_tag
+ ignore_errors: true
+ check_mode: yes
+
+ - name: Assert module cannot import from non-existing tag from ImageStream
+ assert:
+ that:
+ - error_tag is failed
+ - 'error_tag.msg == "image stream {{ test_ns }}/local-is does not have tags pointing to external container images"'
+
+ - name: import all tags for container image ibmcom/pause and specific tag for redhat/ubi8-micro
+ community.okd.openshift_import_image:
+ namespace: "{{ test_ns }}"
+ name:
+ - "ibmcom/pause"
+ - "redhat/ubi8-micro:8.5-437"
+ all: true
+ register: multiple_import
+
+ - name: Assert that import succeed
+ assert:
+ that:
+ - multiple_import is changed
+ - multiple_import.result | length == 2
+
+ - name: Read ibmcom/pause ImageStream
+ kubernetes.core.k8s_info:
+ version: image.openshift.io/v1
+ kind: ImageStream
+ namespace: "{{ test_ns }}"
+ name: pause
+ register: pause
+
+ - name: assert that ibmcom/pause has multiple tags
+ assert:
+ that:
+ - pause.resources | length == 1
+ - pause.resources.0.status.tags | length > 1
+
+ - name: Read redhat/ubi8-micro ImageStream
+ kubernetes.core.k8s_info:
+ version: image.openshift.io/v1
kind: ImageStream
- spec:
- lookupPolicy:
- local: false
- tags: []
-
- - name: Import all tag for image stream not pointing on external container image should failed
- community.okd.openshift_import_image:
- namespace: "{{ test_ns }}"
- name: "local-is"
- all: true
- register: error_tag
- ignore_errors: true
- check_mode: yes
-
- - name: Assert module cannot import from non-existing tag from ImageStream
- assert:
- that:
- - error_tag is failed
- - 'error_tag.msg == "image stream {{ test_ns }}/local-is does not have tags pointing to external container images"'
-
- - name: import all tags for container image ibmcom/pause and specific tag for redhat/ubi8-micro
- community.okd.openshift_import_image:
- namespace: "{{ test_ns }}"
- name:
- - "ibmcom/pause"
- - "redhat/ubi8-micro:8.5-437"
- all: true
- register: multiple_import
-
- - name: Assert that import succeed
- assert:
- that:
- - multiple_import is changed
- - multiple_import.result | length == 2
-
- - name: Read ibmcom/pause ImageStream
- kubernetes.core.k8s_info:
- version: image.openshift.io/v1
- kind: ImageStream
- namespace: "{{ test_ns }}"
- name: pause
- register: pause
-
- - name: assert that ibmcom/pause has multiple tags
- assert:
- that:
- - pause.resources | length == 1
- - pause.resources.0.status.tags | length > 1
-
- - name: Read redhat/ubi8-micro ImageStream
- kubernetes.core.k8s_info:
- version: image.openshift.io/v1
- kind: ImageStream
- namespace: "{{ test_ns }}"
- name: ubi8-micro
- register: resource
-
- - name: assert that redhat/ubi8-micro has only one tag
- assert:
- that:
- - resource.resources | length == 1
- - resource.resources.0.status.tags | length == 1
- - 'resource.resources.0.status.tags.0.tag == "8.5-437"'
+ namespace: "{{ test_ns }}"
+ name: ubi8-micro
+ register: resource
+
+ - name: assert that redhat/ubi8-micro has only one tag
+ assert:
+ that:
+ - resource.resources | length == 1
+ - resource.resources.0.status.tags | length == 1
+ - 'resource.resources.0.status.tags.0.tag == "8.5-437"'
always:
- name: Delete testing namespace
diff --git a/ansible_collections/community/okd/molecule/default/tasks/openshift_prune_images.yml b/ansible_collections/community/okd/molecule/default/tasks/openshift_prune_images.yml
index 86630da69..1748522ec 100644
--- a/ansible_collections/community/okd/molecule/default/tasks/openshift_prune_images.yml
+++ b/ansible_collections/community/okd/molecule/default/tasks/openshift_prune_images.yml
@@ -38,12 +38,12 @@
name: "{{ pod_name }}"
spec:
containers:
- - name: test-container
- image: "{{ prune_registry }}/{{ prune_ns }}/{{ container.name }}:latest"
- command:
- - /bin/sh
- - -c
- - while true;do date;sleep 5; done
+ - name: test-container
+ image: "{{ prune_registry }}/{{ prune_ns }}/{{ container.name }}:latest"
+ command:
+ - /bin/sh
+ - -c
+ - while true;do date;sleep 5; done
- name: Create limit range for images size
community.okd.k8s:
@@ -57,7 +57,7 @@
- type: openshift.io/Image
max:
storage: 1Gi
-
+
- name: Prune images from namespace
community.okd.openshift_adm_prune_images:
registry_url: "{{ prune_registry }}"
diff --git a/ansible_collections/community/okd/molecule/default/tasks/openshift_route.yml b/ansible_collections/community/okd/molecule/default/tasks/openshift_route.yml
index 50056b7e4..b3043cb7e 100644
--- a/ansible_collections/community/okd/molecule/default/tasks/openshift_route.yml
+++ b/ansible_collections/community/okd/molecule/default/tasks/openshift_route.yml
@@ -19,10 +19,10 @@
app: hello-kubernetes
spec:
containers:
- - name: hello-kubernetes
- image: docker.io/openshift/hello-openshift
- ports:
- - containerPort: 8080
+ - name: hello-kubernetes
+ image: docker.io/openshift/hello-openshift
+ ports:
+ - containerPort: 8080
- name: Create Service
community.okd.k8s:
@@ -35,8 +35,8 @@
namespace: default
spec:
ports:
- - port: 80
- targetPort: 8080
+ - port: 80
+ targetPort: 8080
selector:
app: hello-kubernetes
diff --git a/ansible_collections/community/okd/molecule/default/vars/main.yml b/ansible_collections/community/okd/molecule/default/vars/main.yml
index 66fb0d33c..22e227c1f 100644
--- a/ansible_collections/community/okd/molecule/default/vars/main.yml
+++ b/ansible_collections/community/okd/molecule/default/vars/main.yml
@@ -64,14 +64,16 @@ okd_dc_triggers:
okd_dc_spec:
template: '{{ k8s_pod_template }}'
- triggers: '{{ okd_dc_triggers }}'
+ selector:
+ matchLabels:
+ app: "{{ k8s_pod_name }}"
replicas: 1
strategy:
type: Recreate
okd_dc_template:
- apiVersion: v1
- kind: DeploymentConfig
+ apiVersion: apps/v1
+ kind: Deployment
spec: '{{ okd_dc_spec }}'
okd_imagestream_template:
@@ -83,12 +85,12 @@ okd_imagestream_template:
lookupPolicy:
local: true
tags:
- - annotations: null
- from:
- kind: DockerImage
- name: '{{ image }}'
- name: '{{ image_tag }}'
- referencePolicy:
- type: Source
+ - annotations: null
+ from:
+ kind: DockerImage
+ name: '{{ image }}'
+ name: '{{ image_tag }}'
+ referencePolicy:
+ type: Source
image_tag: latest
diff --git a/ansible_collections/community/okd/plugins/connection/oc.py b/ansible_collections/community/okd/plugins/connection/oc.py
index 44236a11a..ae399e66b 100644
--- a/ansible_collections/community/okd/plugins/connection/oc.py
+++ b/ansible_collections/community/okd/plugins/connection/oc.py
@@ -17,10 +17,11 @@
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
-from __future__ import (absolute_import, division, print_function)
+from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
-DOCUMENTATION = '''
+DOCUMENTATION = """
author:
- xuxinkun (@xuxinkun)
@@ -145,29 +146,32 @@ DOCUMENTATION = '''
env:
- name: K8S_AUTH_VERIFY_SSL
aliases: [ oc_verify_ssl ]
-'''
+"""
-from ansible_collections.kubernetes.core.plugins.connection.kubectl import Connection as KubectlConnection
+from ansible_collections.kubernetes.core.plugins.connection.kubectl import (
+ Connection as KubectlConnection,
+)
-CONNECTION_TRANSPORT = 'oc'
+CONNECTION_TRANSPORT = "oc"
CONNECTION_OPTIONS = {
- 'oc_container': '-c',
- 'oc_namespace': '-n',
- 'oc_kubeconfig': '--kubeconfig',
- 'oc_context': '--context',
- 'oc_host': '--server',
- 'client_cert': '--client-certificate',
- 'client_key': '--client-key',
- 'ca_cert': '--certificate-authority',
- 'validate_certs': '--insecure-skip-tls-verify',
- 'oc_token': '--token'
+ "oc_container": "-c",
+ "oc_namespace": "-n",
+ "oc_kubeconfig": "--kubeconfig",
+ "oc_context": "--context",
+ "oc_host": "--server",
+ "client_cert": "--client-certificate",
+ "client_key": "--client-key",
+ "ca_cert": "--certificate-authority",
+ "validate_certs": "--insecure-skip-tls-verify",
+ "oc_token": "--token",
}
class Connection(KubectlConnection):
- ''' Local oc based connections '''
+ """Local oc based connections"""
+
transport = CONNECTION_TRANSPORT
connection_options = CONNECTION_OPTIONS
documentation = DOCUMENTATION
diff --git a/ansible_collections/community/okd/plugins/inventory/openshift.py b/ansible_collections/community/okd/plugins/inventory/openshift.py
index f69c652fc..4ec788408 100644
--- a/ansible_collections/community/okd/plugins/inventory/openshift.py
+++ b/ansible_collections/community/okd/plugins/inventory/openshift.py
@@ -1,11 +1,11 @@
# Copyright (c) 2018 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)
+from __future__ import absolute_import, division, print_function
__metaclass__ = type
-DOCUMENTATION = '''
+DOCUMENTATION = """
name: openshift
author:
- Chris Houseknecht (@chouseknecht)
@@ -17,6 +17,13 @@ DOCUMENTATION = '''
- Groups by cluster name, namespace, namespace_services, namespace_pods, namespace_routes, and labels
- Uses openshift.(yml|yaml) YAML configuration file to set parameter values.
+ deprecated:
+ removed_in: 4.0.0
+ why: |
+ As discussed in U(https://github.com/ansible-collections/kubernetes.core/issues/31), we decided to
+ remove the openshift inventory plugin in release 4.0.0.
+ alternative: "Use M(kubernetes.core.k8s_info) and M(ansible.builtin.add_host) instead."
+
options:
plugin:
description: token that ensures this is a source file for the 'openshift' plugin.
@@ -87,34 +94,41 @@ DOCUMENTATION = '''
- "python >= 3.6"
- "kubernetes >= 12.0.0"
- "PyYAML >= 3.11"
-'''
+"""
-EXAMPLES = '''
+EXAMPLES = """
# File must be named openshift.yaml or openshift.yml
-# Authenticate with token, and return all pods and services for all namespaces
-plugin: community.okd.openshift
-connections:
- - host: https://192.168.64.4:8443
- api_key: xxxxxxxxxxxxxxxx
- verify_ssl: false
-
-# Use default config (~/.kube/config) file and active context, and return objects for a specific namespace
-plugin: community.okd.openshift
-connections:
- - namespaces:
- - testing
-
-# Use a custom config file, and a specific context.
-plugin: community.okd.openshift
-connections:
- - kubeconfig: /path/to/config
- context: 'awx/192-168-64-4:8443/developer'
-'''
+- name: Authenticate with token, and return all pods and services for all namespaces
+ plugin: community.okd.openshift
+ connections:
+ - host: https://192.168.64.4:8443
+ api_key: xxxxxxxxxxxxxxxx
+ verify_ssl: false
+
+- name: Use default config (~/.kube/config) file and active context, and return objects for a specific namespace
+ plugin: community.okd.openshift
+ connections:
+ - namespaces:
+ - testing
+
+- name: Use a custom config file, and a specific context.
+ plugin: community.okd.openshift
+ connections:
+ - kubeconfig: /path/to/config
+ context: 'awx/192-168-64-4:8443/developer'
+"""
try:
- from ansible_collections.kubernetes.core.plugins.inventory.k8s import K8sInventoryException, InventoryModule as K8sInventoryModule, format_dynamic_api_exc
- from ansible_collections.kubernetes.core.plugins.module_utils.k8s.client import get_api_client
+ from ansible_collections.kubernetes.core.plugins.inventory.k8s import (
+ K8sInventoryException,
+ InventoryModule as K8sInventoryModule,
+ format_dynamic_api_exc,
+ )
+ from ansible_collections.kubernetes.core.plugins.module_utils.k8s.client import (
+ get_api_client,
+ )
+
HAS_KUBERNETES_COLLECTION = True
except ImportError as e:
HAS_KUBERNETES_COLLECTION = False
@@ -127,29 +141,38 @@ except ImportError:
class InventoryModule(K8sInventoryModule):
- NAME = 'community.okd.openshift'
+ NAME = "community.okd.openshift"
- connection_plugin = 'community.okd.oc'
- transport = 'oc'
+ connection_plugin = "community.okd.oc"
+ transport = "oc"
def check_kubernetes_collection(self):
-
if not HAS_KUBERNETES_COLLECTION:
- K8sInventoryException("The kubernetes.core collection must be installed")
+ raise K8sInventoryException(
+ "The kubernetes.core collection must be installed"
+ )
def fetch_objects(self, connections):
self.check_kubernetes_collection()
super(InventoryModule, self).fetch_objects(connections)
+ self.display.deprecated(
+ "The 'openshift' inventory plugin has been deprecated and will be removed in release 4.0.0",
+ version="4.0.0",
+ collection_name="community.okd",
+ )
+
if connections:
if not isinstance(connections, list):
raise K8sInventoryException("Expecting connections to be a list.")
for connection in connections:
client = get_api_client(**connection)
- name = connection.get('name', self.get_default_host_name(client.configuration.host))
- if connection.get('namespaces'):
- namespaces = connection['namespaces']
+ name = connection.get(
+ "name", self.get_default_host_name(client.configuration.host)
+ )
+ if connection.get("namespaces"):
+ namespaces = connection["namespaces"]
else:
namespaces = self.get_available_namespaces(client)
for namespace in namespaces:
@@ -163,15 +186,19 @@ class InventoryModule(K8sInventoryModule):
def get_routes_for_namespace(self, client, name, namespace):
self.check_kubernetes_collection()
- v1_route = client.resources.get(api_version='route.openshift.io/v1', kind='Route')
+ v1_route = client.resources.get(
+ api_version="route.openshift.io/v1", kind="Route"
+ )
try:
obj = v1_route.get(namespace=namespace)
except DynamicApiError as exc:
self.display.debug(exc)
- raise K8sInventoryException('Error fetching Routes list: %s' % format_dynamic_api_exc(exc))
+ raise K8sInventoryException(
+ "Error fetching Routes list: %s" % format_dynamic_api_exc(exc)
+ )
- namespace_group = 'namespace_{0}'.format(namespace)
- namespace_routes_group = '{0}_routes'.format(namespace_group)
+ namespace_group = "namespace_{0}".format(namespace)
+ namespace_routes_group = "{0}_routes".format(namespace_group)
self.inventory.add_group(name)
self.inventory.add_group(namespace_group)
@@ -180,14 +207,18 @@ class InventoryModule(K8sInventoryModule):
self.inventory.add_child(namespace_group, namespace_routes_group)
for route in obj.items:
route_name = route.metadata.name
- route_annotations = {} if not route.metadata.annotations else dict(route.metadata.annotations)
+ route_annotations = (
+ {}
+ if not route.metadata.annotations
+ else dict(route.metadata.annotations)
+ )
self.inventory.add_host(route_name)
if route.metadata.labels:
# create a group for each label_value
for key, value in route.metadata.labels:
- group_name = 'label_{0}_{1}'.format(key, value)
+ group_name = "label_{0}_{1}".format(key, value)
self.inventory.add_group(group_name)
self.inventory.add_child(group_name, route_name)
route_labels = dict(route.metadata.labels)
@@ -197,19 +228,25 @@ class InventoryModule(K8sInventoryModule):
self.inventory.add_child(namespace_routes_group, route_name)
# add hostvars
- self.inventory.set_variable(route_name, 'labels', route_labels)
- self.inventory.set_variable(route_name, 'annotations', route_annotations)
- self.inventory.set_variable(route_name, 'cluster_name', route.metadata.clusterName)
- self.inventory.set_variable(route_name, 'object_type', 'route')
- self.inventory.set_variable(route_name, 'self_link', route.metadata.selfLink)
- self.inventory.set_variable(route_name, 'resource_version', route.metadata.resourceVersion)
- self.inventory.set_variable(route_name, 'uid', route.metadata.uid)
+ self.inventory.set_variable(route_name, "labels", route_labels)
+ self.inventory.set_variable(route_name, "annotations", route_annotations)
+ self.inventory.set_variable(
+ route_name, "cluster_name", route.metadata.clusterName
+ )
+ self.inventory.set_variable(route_name, "object_type", "route")
+ self.inventory.set_variable(
+ route_name, "self_link", route.metadata.selfLink
+ )
+ self.inventory.set_variable(
+ route_name, "resource_version", route.metadata.resourceVersion
+ )
+ self.inventory.set_variable(route_name, "uid", route.metadata.uid)
if route.spec.host:
- self.inventory.set_variable(route_name, 'host', route.spec.host)
+ self.inventory.set_variable(route_name, "host", route.spec.host)
if route.spec.path:
- self.inventory.set_variable(route_name, 'path', route.spec.path)
+ self.inventory.set_variable(route_name, "path", route.spec.path)
- if hasattr(route.spec.port, 'targetPort') and route.spec.port.targetPort:
- self.inventory.set_variable(route_name, 'port', dict(route.spec.port))
+ if hasattr(route.spec.port, "targetPort") and route.spec.port.targetPort:
+ self.inventory.set_variable(route_name, "port", dict(route.spec.port))
diff --git a/ansible_collections/community/okd/plugins/module_utils/k8s.py b/ansible_collections/community/okd/plugins/module_utils/k8s.py
index 87ec70d90..9c8f47fd2 100644
--- a/ansible_collections/community/okd/plugins/module_utils/k8s.py
+++ b/ansible_collections/community/okd/plugins/module_utils/k8s.py
@@ -1,35 +1,46 @@
#!/usr/bin/env python
-from __future__ import (absolute_import, division, print_function)
+from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
import re
import operator
from functools import reduce
-from ansible_collections.community.okd.plugins.module_utils.openshift_common import AnsibleOpenshiftModule
+from ansible_collections.community.okd.plugins.module_utils.openshift_common import (
+ AnsibleOpenshiftModule,
+)
try:
- from ansible_collections.kubernetes.core.plugins.module_utils.k8s.resource import create_definitions
- from ansible_collections.kubernetes.core.plugins.module_utils.k8s.exceptions import CoreException
+ from ansible_collections.kubernetes.core.plugins.module_utils.k8s.resource import (
+ create_definitions,
+ )
+ from ansible_collections.kubernetes.core.plugins.module_utils.k8s.exceptions import (
+ CoreException,
+ )
except ImportError:
pass
from ansible.module_utils._text import to_native
try:
- from kubernetes.dynamic.exceptions import DynamicApiError, NotFoundError, ForbiddenError
+ from kubernetes.dynamic.exceptions import (
+ DynamicApiError,
+ NotFoundError,
+ ForbiddenError,
+ )
except ImportError as e:
pass
-TRIGGER_ANNOTATION = 'image.openshift.io/triggers'
-TRIGGER_CONTAINER = re.compile(r"(?P<path>.*)\[((?P<index>[0-9]+)|\?\(@\.name==[\"'\\]*(?P<name>[a-z0-9]([-a-z0-9]*[a-z0-9])?))")
+TRIGGER_ANNOTATION = "image.openshift.io/triggers"
+TRIGGER_CONTAINER = re.compile(
+ r"(?P<path>.*)\[((?P<index>[0-9]+)|\?\(@\.name==[\"'\\]*(?P<name>[a-z0-9]([-a-z0-9]*[a-z0-9])?))"
+)
class OKDRawModule(AnsibleOpenshiftModule):
-
def __init__(self, **kwargs):
-
super(OKDRawModule, self).__init__(**kwargs)
@property
@@ -50,36 +61,60 @@ class OKDRawModule(AnsibleOpenshiftModule):
result = {"changed": False, "result": {}}
warnings = []
- if self.params.get("state") != 'absent':
+ if self.params.get("state") != "absent":
existing = None
name = definition.get("metadata", {}).get("name")
namespace = definition.get("metadata", {}).get("namespace")
- if definition.get("kind") in ['Project', 'ProjectRequest']:
+ if definition.get("kind") in ["Project", "ProjectRequest"]:
try:
- resource = self.svc.find_resource(kind=definition.get("kind"), api_version=definition.get("apiVersion", "v1"))
- existing = resource.get(name=name, namespace=namespace).to_dict()
+ resource = self.svc.find_resource(
+ kind=definition.get("kind"),
+ api_version=definition.get("apiVersion", "v1"),
+ )
+ existing = resource.get(
+ name=name, namespace=namespace
+ ).to_dict()
except (NotFoundError, ForbiddenError):
result = self.create_project_request(definition)
changed |= result["changed"]
results.append(result)
continue
except DynamicApiError as exc:
- self.fail_json(msg='Failed to retrieve requested object: {0}'.format(exc.body),
- error=exc.status, status=exc.status, reason=exc.reason)
-
- if definition.get("kind") not in ['Project', 'ProjectRequest']:
+ self.fail_json(
+ msg="Failed to retrieve requested object: {0}".format(
+ exc.body
+ ),
+ error=exc.status,
+ status=exc.status,
+ reason=exc.reason,
+ )
+
+ if definition.get("kind") not in ["Project", "ProjectRequest"]:
try:
- resource = self.svc.find_resource(kind=definition.get("kind"), api_version=definition.get("apiVersion", "v1"))
- existing = resource.get(name=name, namespace=namespace).to_dict()
+ resource = self.svc.find_resource(
+ kind=definition.get("kind"),
+ api_version=definition.get("apiVersion", "v1"),
+ )
+ existing = resource.get(
+ name=name, namespace=namespace
+ ).to_dict()
except Exception:
existing = None
if existing:
- if resource.kind == 'DeploymentConfig':
- if definition.get('spec', {}).get('triggers'):
- definition = self.resolve_imagestream_triggers(existing, definition)
- elif existing['metadata'].get('annotations', {}).get(TRIGGER_ANNOTATION):
- definition = self.resolve_imagestream_trigger_annotation(existing, definition)
+ if resource.kind == "DeploymentConfig":
+ if definition.get("spec", {}).get("triggers"):
+ definition = self.resolve_imagestream_triggers(
+ existing, definition
+ )
+ elif (
+ existing["metadata"]
+ .get("annotations", {})
+ .get(TRIGGER_ANNOTATION)
+ ):
+ definition = self.resolve_imagestream_trigger_annotation(
+ existing, definition
+ )
if self.params.get("validate") is not None:
warnings = self.validate(definition)
@@ -116,13 +151,15 @@ class OKDRawModule(AnsibleOpenshiftModule):
@staticmethod
def get_index(desired, objects, keys):
- """ Iterates over keys, returns the first object from objects where the value of the key
- matches the value in desired
+ """Iterates over keys, returns the first object from objects where the value of the key
+ matches the value in desired
"""
# pylint: disable=use-a-generator
# Use a generator instead 'all(desired.get(key, True) == item.get(key, False) for key in keys)'
for i, item in enumerate(objects):
- if item and all([desired.get(key, True) == item.get(key, False) for key in keys]):
+ if item and all(
+ [desired.get(key, True) == item.get(key, False) for key in keys]
+ ):
return i
def resolve_imagestream_trigger_annotation(self, existing, definition):
@@ -137,84 +174,148 @@ class OKDRawModule(AnsibleOpenshiftModule):
def set_from_fields(d, fields, value):
get_from_fields(d, fields[:-1])[fields[-1]] = value
- if TRIGGER_ANNOTATION in definition['metadata'].get('annotations', {}).keys():
- triggers = yaml.safe_load(definition['metadata']['annotations'][TRIGGER_ANNOTATION] or '[]')
+ if TRIGGER_ANNOTATION in definition["metadata"].get("annotations", {}).keys():
+ triggers = yaml.safe_load(
+ definition["metadata"]["annotations"][TRIGGER_ANNOTATION] or "[]"
+ )
else:
- triggers = yaml.safe_load(existing['metadata'].get('annotations', '{}').get(TRIGGER_ANNOTATION, '[]'))
+ triggers = yaml.safe_load(
+ existing["metadata"]
+ .get("annotations", "{}")
+ .get(TRIGGER_ANNOTATION, "[]")
+ )
if not isinstance(triggers, list):
return definition
for trigger in triggers:
- if trigger.get('fieldPath'):
- parsed = self.parse_trigger_fieldpath(trigger['fieldPath'])
- path = parsed.get('path', '').split('.')
+ if trigger.get("fieldPath"):
+ parsed = self.parse_trigger_fieldpath(trigger["fieldPath"])
+ path = parsed.get("path", "").split(".")
if path:
existing_containers = get_from_fields(existing, path)
new_containers = get_from_fields(definition, path)
- if parsed.get('name'):
- existing_index = self.get_index({'name': parsed['name']}, existing_containers, ['name'])
- new_index = self.get_index({'name': parsed['name']}, new_containers, ['name'])
- elif parsed.get('index') is not None:
- existing_index = new_index = int(parsed['index'])
+ if parsed.get("name"):
+ existing_index = self.get_index(
+ {"name": parsed["name"]}, existing_containers, ["name"]
+ )
+ new_index = self.get_index(
+ {"name": parsed["name"]}, new_containers, ["name"]
+ )
+ elif parsed.get("index") is not None:
+ existing_index = new_index = int(parsed["index"])
else:
existing_index = new_index = None
if existing_index is not None and new_index is not None:
- if existing_index < len(existing_containers) and new_index < len(new_containers):
- set_from_fields(definition, path + [new_index, 'image'], get_from_fields(existing, path + [existing_index, 'image']))
+ if existing_index < len(
+ existing_containers
+ ) and new_index < len(new_containers):
+ set_from_fields(
+ definition,
+ path + [new_index, "image"],
+ get_from_fields(
+ existing, path + [existing_index, "image"]
+ ),
+ )
return definition
def resolve_imagestream_triggers(self, existing, definition):
-
- existing_triggers = existing.get('spec', {}).get('triggers')
- new_triggers = definition['spec']['triggers']
- existing_containers = existing.get('spec', {}).get('template', {}).get('spec', {}).get('containers', [])
- new_containers = definition.get('spec', {}).get('template', {}).get('spec', {}).get('containers', [])
+ existing_triggers = existing.get("spec", {}).get("triggers")
+ new_triggers = definition["spec"]["triggers"]
+ existing_containers = (
+ existing.get("spec", {})
+ .get("template", {})
+ .get("spec", {})
+ .get("containers", [])
+ )
+ new_containers = (
+ definition.get("spec", {})
+ .get("template", {})
+ .get("spec", {})
+ .get("containers", [])
+ )
for i, trigger in enumerate(new_triggers):
- if trigger.get('type') == 'ImageChange' and trigger.get('imageChangeParams'):
- names = trigger['imageChangeParams'].get('containerNames', [])
+ if trigger.get("type") == "ImageChange" and trigger.get(
+ "imageChangeParams"
+ ):
+ names = trigger["imageChangeParams"].get("containerNames", [])
for name in names:
- old_container_index = self.get_index({'name': name}, existing_containers, ['name'])
- new_container_index = self.get_index({'name': name}, new_containers, ['name'])
- if old_container_index is not None and new_container_index is not None:
- image = existing['spec']['template']['spec']['containers'][old_container_index]['image']
- definition['spec']['template']['spec']['containers'][new_container_index]['image'] = image
-
- existing_index = self.get_index(trigger['imageChangeParams'],
- [x.get('imageChangeParams') for x in existing_triggers],
- ['containerNames'])
+ old_container_index = self.get_index(
+ {"name": name}, existing_containers, ["name"]
+ )
+ new_container_index = self.get_index(
+ {"name": name}, new_containers, ["name"]
+ )
+ if (
+ old_container_index is not None
+ and new_container_index is not None
+ ):
+ image = existing["spec"]["template"]["spec"]["containers"][
+ old_container_index
+ ]["image"]
+ definition["spec"]["template"]["spec"]["containers"][
+ new_container_index
+ ]["image"] = image
+
+ existing_index = self.get_index(
+ trigger["imageChangeParams"],
+ [x.get("imageChangeParams") for x in existing_triggers],
+ ["containerNames"],
+ )
if existing_index is not None:
- existing_image = existing_triggers[existing_index].get('imageChangeParams', {}).get('lastTriggeredImage')
+ existing_image = (
+ existing_triggers[existing_index]
+ .get("imageChangeParams", {})
+ .get("lastTriggeredImage")
+ )
if existing_image:
- definition['spec']['triggers'][i]['imageChangeParams']['lastTriggeredImage'] = existing_image
- existing_from = existing_triggers[existing_index].get('imageChangeParams', {}).get('from', {})
- new_from = trigger['imageChangeParams'].get('from', {})
- existing_namespace = existing_from.get('namespace')
- existing_name = existing_from.get('name', False)
- new_name = new_from.get('name', True)
- add_namespace = existing_namespace and 'namespace' not in new_from.keys() and existing_name == new_name
+ definition["spec"]["triggers"][i]["imageChangeParams"][
+ "lastTriggeredImage"
+ ] = existing_image
+ existing_from = (
+ existing_triggers[existing_index]
+ .get("imageChangeParams", {})
+ .get("from", {})
+ )
+ new_from = trigger["imageChangeParams"].get("from", {})
+ existing_namespace = existing_from.get("namespace")
+ existing_name = existing_from.get("name", False)
+ new_name = new_from.get("name", True)
+ add_namespace = (
+ existing_namespace
+ and "namespace" not in new_from.keys()
+ and existing_name == new_name
+ )
if add_namespace:
- definition['spec']['triggers'][i]['imageChangeParams']['from']['namespace'] = existing_from['namespace']
+ definition["spec"]["triggers"][i]["imageChangeParams"][
+ "from"
+ ]["namespace"] = existing_from["namespace"]
return definition
def parse_trigger_fieldpath(self, expression):
parsed = TRIGGER_CONTAINER.search(expression).groupdict()
- if parsed.get('index'):
- parsed['index'] = int(parsed['index'])
+ if parsed.get("index"):
+ parsed["index"] = int(parsed["index"])
return parsed
def create_project_request(self, definition):
- definition['kind'] = 'ProjectRequest'
- result = {'changed': False, 'result': {}}
- resource = self.svc.find_resource(kind='ProjectRequest', api_version=definition['apiVersion'], fail=True)
+ definition["kind"] = "ProjectRequest"
+ result = {"changed": False, "result": {}}
+ resource = self.svc.find_resource(
+ kind="ProjectRequest", api_version=definition["apiVersion"], fail=True
+ )
if not self.check_mode:
try:
k8s_obj = resource.create(definition)
- result['result'] = k8s_obj.to_dict()
+ result["result"] = k8s_obj.to_dict()
except DynamicApiError as exc:
- self.fail_json(msg="Failed to create object: {0}".format(exc.body),
- error=exc.status, status=exc.status, reason=exc.reason)
- result['changed'] = True
- result['method'] = 'create'
+ self.fail_json(
+ msg="Failed to create object: {0}".format(exc.body),
+ error=exc.status,
+ status=exc.status,
+ reason=exc.reason,
+ )
+ result["changed"] = True
+ result["method"] = "create"
return result
diff --git a/ansible_collections/community/okd/plugins/module_utils/openshift_adm_prune_auth.py b/ansible_collections/community/okd/plugins/module_utils/openshift_adm_prune_auth.py
index e5143ae4e..f28640551 100644
--- a/ansible_collections/community/okd/plugins/module_utils/openshift_adm_prune_auth.py
+++ b/ansible_collections/community/okd/plugins/module_utils/openshift_adm_prune_auth.py
@@ -1,11 +1,14 @@
#!/usr/bin/env python
-from __future__ import (absolute_import, division, print_function)
+from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
from ansible.module_utils._text import to_native
-from ansible_collections.community.okd.plugins.module_utils.openshift_common import AnsibleOpenshiftModule
+from ansible_collections.community.okd.plugins.module_utils.openshift_common import (
+ AnsibleOpenshiftModule,
+)
try:
from kubernetes import client
@@ -18,31 +21,36 @@ class OpenShiftAdmPruneAuth(AnsibleOpenshiftModule):
def __init__(self, **kwargs):
super(OpenShiftAdmPruneAuth, self).__init__(**kwargs)
- def prune_resource_binding(self, kind, api_version, ref_kind, ref_namespace_names, propagation_policy=None):
-
+ def prune_resource_binding(
+ self, kind, api_version, ref_kind, ref_namespace_names, propagation_policy=None
+ ):
resource = self.find_resource(kind=kind, api_version=api_version, fail=True)
candidates = []
for ref_namespace, ref_name in ref_namespace_names:
try:
result = resource.get(name=None, namespace=ref_namespace)
result = result.to_dict()
- result = result.get('items') if 'items' in result else [result]
+ result = result.get("items") if "items" in result else [result]
for obj in result:
- namespace = obj['metadata'].get('namespace', None)
- name = obj['metadata'].get('name')
- if ref_kind and obj['roleRef']['kind'] != ref_kind:
+ namespace = obj["metadata"].get("namespace", None)
+ name = obj["metadata"].get("name")
+ if ref_kind and obj["roleRef"]["kind"] != ref_kind:
# skip this binding as the roleRef.kind does not match
continue
- if obj['roleRef']['name'] == ref_name:
+ if obj["roleRef"]["name"] == ref_name:
# select this binding as the roleRef.name match
candidates.append((namespace, name))
except NotFoundError:
continue
except DynamicApiError as exc:
- msg = "Failed to get {kind} resource due to: {msg}".format(kind=kind, msg=exc.body)
+ msg = "Failed to get {kind} resource due to: {msg}".format(
+ kind=kind, msg=exc.body
+ )
self.fail_json(msg=msg)
except Exception as e:
- msg = "Failed to get {kind} due to: {msg}".format(kind=kind, msg=to_native(e))
+ msg = "Failed to get {kind} due to: {msg}".format(
+ kind=kind, msg=to_native(e)
+ )
self.fail_json(msg=msg)
if len(candidates) == 0 or self.check_mode:
@@ -54,24 +62,29 @@ class OpenShiftAdmPruneAuth(AnsibleOpenshiftModule):
for namespace, name in candidates:
try:
- result = resource.delete(name=name, namespace=namespace, body=delete_options)
+ result = resource.delete(
+ name=name, namespace=namespace, body=delete_options
+ )
except DynamicApiError as exc:
- msg = "Failed to delete {kind} {namespace}/{name} due to: {msg}".format(kind=kind, namespace=namespace, name=name, msg=exc.body)
+ msg = "Failed to delete {kind} {namespace}/{name} due to: {msg}".format(
+ kind=kind, namespace=namespace, name=name, msg=exc.body
+ )
self.fail_json(msg=msg)
except Exception as e:
- msg = "Failed to delete {kind} {namespace}/{name} due to: {msg}".format(kind=kind, namespace=namespace, name=name, msg=to_native(e))
+ msg = "Failed to delete {kind} {namespace}/{name} due to: {msg}".format(
+ kind=kind, namespace=namespace, name=name, msg=to_native(e)
+ )
self.fail_json(msg=msg)
return [y if x is None else x + "/" + y for x, y in candidates]
def update_resource_binding(self, ref_kind, ref_names, namespaced=False):
-
- kind = 'ClusterRoleBinding'
- api_version = "rbac.authorization.k8s.io/v1",
+ kind = "ClusterRoleBinding"
+ api_version = "rbac.authorization.k8s.io/v1"
if namespaced:
kind = "RoleBinding"
resource = self.find_resource(kind=kind, api_version=api_version, fail=True)
result = resource.get(name=None, namespace=None).to_dict()
- result = result.get('items') if 'items' in result else [result]
+ result = result.get("items") if "items" in result else [result]
if len(result) == 0:
return [], False
@@ -79,29 +92,40 @@ class OpenShiftAdmPruneAuth(AnsibleOpenshiftModule):
def _update_user_group(binding_namespace, subjects):
users, groups = [], []
for x in subjects:
- if x['kind'] == 'User':
- users.append(x['name'])
- elif x['kind'] == 'Group':
- groups.append(x['name'])
- elif x['kind'] == 'ServiceAccount':
+ if x["kind"] == "User":
+ users.append(x["name"])
+ elif x["kind"] == "Group":
+ groups.append(x["name"])
+ elif x["kind"] == "ServiceAccount":
namespace = binding_namespace
- if x.get('namespace') is not None:
- namespace = x.get('namespace')
+ if x.get("namespace") is not None:
+ namespace = x.get("namespace")
if namespace is not None:
- users.append("system:serviceaccount:%s:%s" % (namespace, x['name']))
+ users.append(
+ "system:serviceaccount:%s:%s" % (namespace, x["name"])
+ )
return users, groups
candidates = []
changed = False
for item in result:
- subjects = item.get('subjects', [])
- retainedSubjects = [x for x in subjects if x['kind'] == ref_kind and x['name'] in ref_names]
+ subjects = item.get("subjects", [])
+ retainedSubjects = [
+ x for x in subjects if x["kind"] == ref_kind and x["name"] in ref_names
+ ]
if len(subjects) != len(retainedSubjects):
updated_binding = item
- updated_binding['subjects'] = retainedSubjects
- binding_namespace = item['metadata'].get('namespace', None)
- updated_binding['userNames'], updated_binding['groupNames'] = _update_user_group(binding_namespace, retainedSubjects)
- candidates.append(binding_namespace + "/" + item['metadata']['name'] if binding_namespace else item['metadata']['name'])
+ updated_binding["subjects"] = retainedSubjects
+ binding_namespace = item["metadata"].get("namespace", None)
+ (
+ updated_binding["userNames"],
+ updated_binding["groupNames"],
+ ) = _update_user_group(binding_namespace, retainedSubjects)
+ candidates.append(
+ binding_namespace + "/" + item["metadata"]["name"]
+ if binding_namespace
+ else item["metadata"]["name"]
+ )
changed = True
if not self.check_mode:
try:
@@ -112,20 +136,25 @@ class OpenShiftAdmPruneAuth(AnsibleOpenshiftModule):
return candidates, changed
def update_security_context(self, ref_names, key):
- params = {'kind': 'SecurityContextConstraints', 'api_version': 'security.openshift.io/v1'}
+ params = {
+ "kind": "SecurityContextConstraints",
+ "api_version": "security.openshift.io/v1",
+ }
sccs = self.kubernetes_facts(**params)
- if not sccs['api_found']:
- self.fail_json(msg=sccs['msg'])
- sccs = sccs.get('resources')
+ if not sccs["api_found"]:
+ self.fail_json(msg=sccs["msg"])
+ sccs = sccs.get("resources")
candidates = []
changed = False
- resource = self.find_resource(kind="SecurityContextConstraints", api_version="security.openshift.io/v1")
+ resource = self.find_resource(
+ kind="SecurityContextConstraints", api_version="security.openshift.io/v1"
+ )
for item in sccs:
subjects = item.get(key, [])
retainedSubjects = [x for x in subjects if x not in ref_names]
if len(subjects) != len(retainedSubjects):
- candidates.append(item['metadata']['name'])
+ candidates.append(item["metadata"]["name"])
changed = True
if not self.check_mode:
upd_sec_ctx = item
@@ -138,94 +167,116 @@ class OpenShiftAdmPruneAuth(AnsibleOpenshiftModule):
return candidates, changed
def auth_prune_roles(self):
- params = {'kind': 'Role', 'api_version': 'rbac.authorization.k8s.io/v1', 'namespace': self.params.get('namespace')}
- for attr in ('name', 'label_selectors'):
+ params = {
+ "kind": "Role",
+ "api_version": "rbac.authorization.k8s.io/v1",
+ "namespace": self.params.get("namespace"),
+ }
+ for attr in ("name", "label_selectors"):
if self.params.get(attr):
params[attr] = self.params.get(attr)
result = self.kubernetes_facts(**params)
- if not result['api_found']:
- self.fail_json(msg=result['msg'])
+ if not result["api_found"]:
+ self.fail_json(msg=result["msg"])
- roles = result.get('resources')
+ roles = result.get("resources")
if len(roles) == 0:
- self.exit_json(changed=False, msg="No candidate rolebinding to prune from namespace %s." % self.params.get('namespace'))
-
- ref_roles = [(x['metadata']['namespace'], x['metadata']['name']) for x in roles]
- candidates = self.prune_resource_binding(kind="RoleBinding",
- api_version="rbac.authorization.k8s.io/v1",
- ref_kind="Role",
- ref_namespace_names=ref_roles,
- propagation_policy='Foreground')
+ self.exit_json(
+ changed=False,
+ msg="No candidate rolebinding to prune from namespace %s."
+ % self.params.get("namespace"),
+ )
+
+ ref_roles = [(x["metadata"]["namespace"], x["metadata"]["name"]) for x in roles]
+ candidates = self.prune_resource_binding(
+ kind="RoleBinding",
+ api_version="rbac.authorization.k8s.io/v1",
+ ref_kind="Role",
+ ref_namespace_names=ref_roles,
+ propagation_policy="Foreground",
+ )
if len(candidates) == 0:
self.exit_json(changed=False, role_binding=candidates)
self.exit_json(changed=True, role_binding=candidates)
def auth_prune_clusterroles(self):
- params = {'kind': 'ClusterRole', 'api_version': 'rbac.authorization.k8s.io/v1'}
- for attr in ('name', 'label_selectors'):
+ params = {"kind": "ClusterRole", "api_version": "rbac.authorization.k8s.io/v1"}
+ for attr in ("name", "label_selectors"):
if self.params.get(attr):
params[attr] = self.params.get(attr)
result = self.kubernetes_facts(**params)
- if not result['api_found']:
- self.fail_json(msg=result['msg'])
+ if not result["api_found"]:
+ self.fail_json(msg=result["msg"])
- clusterroles = result.get('resources')
+ clusterroles = result.get("resources")
if len(clusterroles) == 0:
- self.exit_json(changed=False, msg="No clusterroles found matching input criteria.")
+ self.exit_json(
+ changed=False, msg="No clusterroles found matching input criteria."
+ )
- ref_clusterroles = [(None, x['metadata']['name']) for x in clusterroles]
+ ref_clusterroles = [(None, x["metadata"]["name"]) for x in clusterroles]
# Prune ClusterRoleBinding
- candidates_cluster_binding = self.prune_resource_binding(kind="ClusterRoleBinding",
- api_version="rbac.authorization.k8s.io/v1",
- ref_kind=None,
- ref_namespace_names=ref_clusterroles)
+ candidates_cluster_binding = self.prune_resource_binding(
+ kind="ClusterRoleBinding",
+ api_version="rbac.authorization.k8s.io/v1",
+ ref_kind=None,
+ ref_namespace_names=ref_clusterroles,
+ )
# Prune Role Binding
- candidates_namespaced_binding = self.prune_resource_binding(kind="RoleBinding",
- api_version="rbac.authorization.k8s.io/v1",
- ref_kind='ClusterRole',
- ref_namespace_names=ref_clusterroles)
-
- self.exit_json(changed=True,
- cluster_role_binding=candidates_cluster_binding,
- role_binding=candidates_namespaced_binding)
+ candidates_namespaced_binding = self.prune_resource_binding(
+ kind="RoleBinding",
+ api_version="rbac.authorization.k8s.io/v1",
+ ref_kind="ClusterRole",
+ ref_namespace_names=ref_clusterroles,
+ )
+
+ self.exit_json(
+ changed=True,
+ cluster_role_binding=candidates_cluster_binding,
+ role_binding=candidates_namespaced_binding,
+ )
def list_groups(self, params=None):
- options = {'kind': 'Group', 'api_version': 'user.openshift.io/v1'}
+ options = {"kind": "Group", "api_version": "user.openshift.io/v1"}
if params:
- for attr in ('name', 'label_selectors'):
+ for attr in ("name", "label_selectors"):
if params.get(attr):
options[attr] = params.get(attr)
return self.kubernetes_facts(**options)
def auth_prune_users(self):
- params = {'kind': 'User', 'api_version': 'user.openshift.io/v1'}
- for attr in ('name', 'label_selectors'):
+ params = {"kind": "User", "api_version": "user.openshift.io/v1"}
+ for attr in ("name", "label_selectors"):
if self.params.get(attr):
params[attr] = self.params.get(attr)
users = self.kubernetes_facts(**params)
if len(users) == 0:
- self.exit_json(changed=False, msg="No resource type 'User' found matching input criteria.")
+ self.exit_json(
+ changed=False,
+ msg="No resource type 'User' found matching input criteria.",
+ )
- names = [x['metadata']['name'] for x in users]
+ names = [x["metadata"]["name"] for x in users]
changed = False
# Remove the user role binding
- rolebinding, changed_role = self.update_resource_binding(ref_kind="User",
- ref_names=names,
- namespaced=True)
+ rolebinding, changed_role = self.update_resource_binding(
+ ref_kind="User", ref_names=names, namespaced=True
+ )
changed = changed or changed_role
# Remove the user cluster role binding
- clusterrolesbinding, changed_cr = self.update_resource_binding(ref_kind="User",
- ref_names=names)
+ clusterrolesbinding, changed_cr = self.update_resource_binding(
+ ref_kind="User", ref_names=names
+ )
changed = changed or changed_cr
# Remove the user from security context constraints
- sccs, changed_sccs = self.update_security_context(names, 'users')
+ sccs, changed_sccs = self.update_security_context(names, "users")
changed = changed or changed_sccs
# Remove the user from groups
@@ -233,14 +284,14 @@ class OpenShiftAdmPruneAuth(AnsibleOpenshiftModule):
deleted_groups = []
resource = self.find_resource(kind="Group", api_version="user.openshift.io/v1")
for grp in groups:
- subjects = grp.get('users', [])
+ subjects = grp.get("users", [])
retainedSubjects = [x for x in subjects if x not in names]
if len(subjects) != len(retainedSubjects):
- deleted_groups.append(grp['metadata']['name'])
+ deleted_groups.append(grp["metadata"]["name"])
changed = True
if not self.check_mode:
upd_group = grp
- upd_group.update({'users': retainedSubjects})
+ upd_group.update({"users": retainedSubjects})
try:
resource.apply(upd_group, namespace=None)
except DynamicApiError as exc:
@@ -248,62 +299,82 @@ class OpenShiftAdmPruneAuth(AnsibleOpenshiftModule):
self.fail_json(msg=msg)
# Remove the user's OAuthClientAuthorizations
- oauth = self.kubernetes_facts(kind='OAuthClientAuthorization', api_version='oauth.openshift.io/v1')
+ oauth = self.kubernetes_facts(
+ kind="OAuthClientAuthorization", api_version="oauth.openshift.io/v1"
+ )
deleted_auths = []
- resource = self.find_resource(kind="OAuthClientAuthorization", api_version="oauth.openshift.io/v1")
+ resource = self.find_resource(
+ kind="OAuthClientAuthorization", api_version="oauth.openshift.io/v1"
+ )
for authorization in oauth:
- if authorization.get('userName', None) in names:
- auth_name = authorization['metadata']['name']
+ if authorization.get("userName", None) in names:
+ auth_name = authorization["metadata"]["name"]
deleted_auths.append(auth_name)
changed = True
if not self.check_mode:
try:
- resource.delete(name=auth_name, namespace=None, body=client.V1DeleteOptions())
+ resource.delete(
+ name=auth_name,
+ namespace=None,
+ body=client.V1DeleteOptions(),
+ )
except DynamicApiError as exc:
- msg = "Failed to delete OAuthClientAuthorization {name} due to: {msg}".format(name=auth_name, msg=exc.body)
+ msg = "Failed to delete OAuthClientAuthorization {name} due to: {msg}".format(
+ name=auth_name, msg=exc.body
+ )
self.fail_json(msg=msg)
except Exception as e:
- msg = "Failed to delete OAuthClientAuthorization {name} due to: {msg}".format(name=auth_name, msg=to_native(e))
+ msg = "Failed to delete OAuthClientAuthorization {name} due to: {msg}".format(
+ name=auth_name, msg=to_native(e)
+ )
self.fail_json(msg=msg)
- self.exit_json(changed=changed,
- cluster_role_binding=clusterrolesbinding,
- role_binding=rolebinding,
- security_context_constraints=sccs,
- authorization=deleted_auths,
- group=deleted_groups)
+ self.exit_json(
+ changed=changed,
+ cluster_role_binding=clusterrolesbinding,
+ role_binding=rolebinding,
+ security_context_constraints=sccs,
+ authorization=deleted_auths,
+ group=deleted_groups,
+ )
def auth_prune_groups(self):
groups = self.list_groups(params=self.params)
if len(groups) == 0:
- self.exit_json(changed=False, result="No resource type 'Group' found matching input criteria.")
+ self.exit_json(
+ changed=False,
+ result="No resource type 'Group' found matching input criteria.",
+ )
- names = [x['metadata']['name'] for x in groups]
+ names = [x["metadata"]["name"] for x in groups]
changed = False
# Remove the groups role binding
- rolebinding, changed_role = self.update_resource_binding(ref_kind="Group",
- ref_names=names,
- namespaced=True)
+ rolebinding, changed_role = self.update_resource_binding(
+ ref_kind="Group", ref_names=names, namespaced=True
+ )
changed = changed or changed_role
# Remove the groups cluster role binding
- clusterrolesbinding, changed_cr = self.update_resource_binding(ref_kind="Group",
- ref_names=names)
+ clusterrolesbinding, changed_cr = self.update_resource_binding(
+ ref_kind="Group", ref_names=names
+ )
changed = changed or changed_cr
# Remove the groups security context constraints
- sccs, changed_sccs = self.update_security_context(names, 'groups')
+ sccs, changed_sccs = self.update_security_context(names, "groups")
changed = changed or changed_sccs
- self.exit_json(changed=changed,
- cluster_role_binding=clusterrolesbinding,
- role_binding=rolebinding,
- security_context_constraints=sccs)
+ self.exit_json(
+ changed=changed,
+ cluster_role_binding=clusterrolesbinding,
+ role_binding=rolebinding,
+ security_context_constraints=sccs,
+ )
def execute_module(self):
auth_prune = {
- 'roles': self.auth_prune_roles,
- 'clusterroles': self.auth_prune_clusterroles,
- 'users': self.auth_prune_users,
- 'groups': self.auth_prune_groups,
+ "roles": self.auth_prune_roles,
+ "clusterroles": self.auth_prune_clusterroles,
+ "users": self.auth_prune_users,
+ "groups": self.auth_prune_groups,
}
- auth_prune[self.params.get('resource')]()
+ auth_prune[self.params.get("resource")]()
diff --git a/ansible_collections/community/okd/plugins/module_utils/openshift_adm_prune_deployments.py b/ansible_collections/community/okd/plugins/module_utils/openshift_adm_prune_deployments.py
index 418922d52..315de4b10 100644
--- a/ansible_collections/community/okd/plugins/module_utils/openshift_adm_prune_deployments.py
+++ b/ansible_collections/community/okd/plugins/module_utils/openshift_adm_prune_deployments.py
@@ -1,14 +1,16 @@
#!/usr/bin/env python
-from __future__ import (absolute_import, division, print_function)
+from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
from datetime import datetime, timezone
-import traceback
from ansible.module_utils._text import to_native
-from ansible_collections.community.okd.plugins.module_utils.openshift_common import AnsibleOpenshiftModule
+from ansible_collections.community.okd.plugins.module_utils.openshift_common import (
+ AnsibleOpenshiftModule,
+)
try:
from kubernetes import client
@@ -23,7 +25,9 @@ def get_deploymentconfig_for_replicationcontroller(replica_controller):
# This is set on replication controller pod template by deployer controller.
DeploymentConfigAnnotation = "openshift.io/deployment-config.name"
try:
- deploymentconfig_name = replica_controller['metadata']['annotations'].get(DeploymentConfigAnnotation)
+ deploymentconfig_name = replica_controller["metadata"]["annotations"].get(
+ DeploymentConfigAnnotation
+ )
if deploymentconfig_name is None or deploymentconfig_name == "":
return None
return deploymentconfig_name
@@ -32,7 +36,6 @@ def get_deploymentconfig_for_replicationcontroller(replica_controller):
class OpenShiftAdmPruneDeployment(AnsibleOpenshiftModule):
-
def __init__(self, **kwargs):
super(OpenShiftAdmPruneDeployment, self).__init__(**kwargs)
@@ -41,27 +44,33 @@ class OpenShiftAdmPruneDeployment(AnsibleOpenshiftModule):
return get_deploymentconfig_for_replicationcontroller(obj) is not None
def _zeroReplicaSize(obj):
- return obj['spec']['replicas'] == 0 and obj['status']['replicas'] == 0
+ return obj["spec"]["replicas"] == 0 and obj["status"]["replicas"] == 0
def _complete_failed(obj):
DeploymentStatusAnnotation = "openshift.io/deployment.phase"
try:
# validate that replication controller status is either 'Complete' or 'Failed'
- deployment_phase = obj['metadata']['annotations'].get(DeploymentStatusAnnotation)
- return deployment_phase in ('Failed', 'Complete')
+ deployment_phase = obj["metadata"]["annotations"].get(
+ DeploymentStatusAnnotation
+ )
+ return deployment_phase in ("Failed", "Complete")
except Exception:
return False
def _younger(obj):
- creation_timestamp = datetime.strptime(obj['metadata']['creationTimestamp'], '%Y-%m-%dT%H:%M:%SZ')
+ creation_timestamp = datetime.strptime(
+ obj["metadata"]["creationTimestamp"], "%Y-%m-%dT%H:%M:%SZ"
+ )
now = datetime.now(timezone.utc).replace(tzinfo=None)
age = (now - creation_timestamp).seconds / 60
- return age > self.params['keep_younger_than']
+ return age > self.params["keep_younger_than"]
def _orphan(obj):
try:
# verify if the deploymentconfig associated to the replication controller is still existing
- deploymentconfig_name = get_deploymentconfig_for_replicationcontroller(obj)
+ deploymentconfig_name = get_deploymentconfig_for_replicationcontroller(
+ obj
+ )
params = dict(
kind="DeploymentConfig",
api_version="apps.openshift.io/v1",
@@ -69,14 +78,14 @@ class OpenShiftAdmPruneDeployment(AnsibleOpenshiftModule):
namespace=obj["metadata"]["name"],
)
exists = self.kubernetes_facts(**params)
- return not (exists.get['api_found'] and len(exists['resources']) > 0)
+ return not (exists.get["api_found"] and len(exists["resources"]) > 0)
except Exception:
return False
predicates = [_deployment, _zeroReplicaSize, _complete_failed]
- if self.params['orphans']:
+ if self.params["orphans"]:
predicates.append(_orphan)
- if self.params['keep_younger_than']:
+ if self.params["keep_younger_than"]:
predicates.append(_younger)
results = replicacontrollers.copy()
@@ -86,8 +95,8 @@ class OpenShiftAdmPruneDeployment(AnsibleOpenshiftModule):
def execute_module(self):
# list replicationcontroller candidate for pruning
- kind = 'ReplicationController'
- api_version = 'v1'
+ kind = "ReplicationController"
+ api_version = "v1"
resource = self.find_resource(kind=kind, api_version=api_version, fail=True)
# Get ReplicationController
@@ -103,7 +112,7 @@ class OpenShiftAdmPruneDeployment(AnsibleOpenshiftModule):
self.exit_json(changed=False, replication_controllers=[])
changed = True
- delete_options = client.V1DeleteOptions(propagation_policy='Background')
+ delete_options = client.V1DeleteOptions(propagation_policy="Background")
replication_controllers = []
for replica in candidates:
try:
@@ -111,12 +120,18 @@ class OpenShiftAdmPruneDeployment(AnsibleOpenshiftModule):
if not self.check_mode:
name = replica["metadata"]["name"]
namespace = replica["metadata"]["namespace"]
- result = resource.delete(name=name, namespace=namespace, body=delete_options).to_dict()
+ result = resource.delete(
+ name=name, namespace=namespace, body=delete_options
+ ).to_dict()
replication_controllers.append(result)
except DynamicApiError as exc:
- msg = "Failed to delete ReplicationController {namespace}/{name} due to: {msg}".format(namespace=namespace, name=name, msg=exc.body)
+ msg = "Failed to delete ReplicationController {namespace}/{name} due to: {msg}".format(
+ namespace=namespace, name=name, msg=exc.body
+ )
self.fail_json(msg=msg)
except Exception as e:
- msg = "Failed to delete ReplicationController {namespace}/{name} due to: {msg}".format(namespace=namespace, name=name, msg=to_native(e))
+ msg = "Failed to delete ReplicationController {namespace}/{name} due to: {msg}".format(
+ namespace=namespace, name=name, msg=to_native(e)
+ )
self.fail_json(msg=msg)
self.exit_json(changed=changed, replication_controllers=replication_controllers)
diff --git a/ansible_collections/community/okd/plugins/module_utils/openshift_adm_prune_images.py b/ansible_collections/community/okd/plugins/module_utils/openshift_adm_prune_images.py
index 442cf9010..768c359b6 100644
--- a/ansible_collections/community/okd/plugins/module_utils/openshift_adm_prune_images.py
+++ b/ansible_collections/community/okd/plugins/module_utils/openshift_adm_prune_images.py
@@ -1,17 +1,19 @@
#!/usr/bin/env python
-from __future__ import (absolute_import, division, print_function)
+from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
from datetime import datetime, timezone, timedelta
-import traceback
import copy
from ansible.module_utils._text import to_native
from ansible.module_utils.parsing.convert_bool import boolean
from ansible.module_utils.six import iteritems
-from ansible_collections.community.okd.plugins.module_utils.openshift_common import AnsibleOpenshiftModule
+from ansible_collections.community.okd.plugins.module_utils.openshift_common import (
+ AnsibleOpenshiftModule,
+)
from ansible_collections.community.okd.plugins.module_utils.openshift_images_common import (
OpenShiftAnalyzeImageStream,
@@ -30,7 +32,7 @@ try:
from kubernetes.dynamic.exceptions import (
DynamicApiError,
NotFoundError,
- ApiException
+ ApiException,
)
except ImportError:
pass
@@ -67,18 +69,20 @@ def determine_host_registry(module, images, image_streams):
managed_images = list(filter(_f_managed_images, images))
# Be sure to pick up the newest managed image which should have an up to date information
- sorted_images = sorted(managed_images,
- key=lambda x: x["metadata"]["creationTimestamp"],
- reverse=True)
+ sorted_images = sorted(
+ managed_images, key=lambda x: x["metadata"]["creationTimestamp"], reverse=True
+ )
docker_image_ref = ""
if len(sorted_images) > 0:
docker_image_ref = sorted_images[0].get("dockerImageReference", "")
else:
# 2nd try to get the pull spec from any image stream
# Sorting by creation timestamp may not get us up to date info. Modification time would be much
- sorted_image_streams = sorted(image_streams,
- key=lambda x: x["metadata"]["creationTimestamp"],
- reverse=True)
+ sorted_image_streams = sorted(
+ image_streams,
+ key=lambda x: x["metadata"]["creationTimestamp"],
+ reverse=True,
+ )
for i_stream in sorted_image_streams:
docker_image_ref = i_stream["status"].get("dockerImageRepository", "")
if len(docker_image_ref) > 0:
@@ -88,7 +92,7 @@ def determine_host_registry(module, images, image_streams):
module.exit_json(changed=False, result="no managed image found")
result, error = parse_docker_image_ref(docker_image_ref, module)
- return result['hostname']
+ return result["hostname"]
class OpenShiftAdmPruneImages(AnsibleOpenshiftModule):
@@ -97,7 +101,7 @@ class OpenShiftAdmPruneImages(AnsibleOpenshiftModule):
self.max_creation_timestamp = self.get_max_creation_timestamp()
self._rest_client = None
- self.registryhost = self.params.get('registry_url')
+ self.registryhost = self.params.get("registry_url")
self.changed = False
def list_objects(self):
@@ -107,9 +111,9 @@ class OpenShiftAdmPruneImages(AnsibleOpenshiftModule):
if self.params.get("namespace") and kind.lower() == "imagestream":
namespace = self.params.get("namespace")
try:
- result[kind] = self.kubernetes_facts(kind=kind,
- api_version=version,
- namespace=namespace).get('resources')
+ result[kind] = self.kubernetes_facts(
+ kind=kind, api_version=version, namespace=namespace
+ ).get("resources")
except DynamicApiError as e:
self.fail_json(
msg="An error occurred while trying to list objects.",
@@ -119,7 +123,7 @@ class OpenShiftAdmPruneImages(AnsibleOpenshiftModule):
except Exception as e:
self.fail_json(
msg="An error occurred while trying to list objects.",
- error=to_native(e)
+ error=to_native(e),
)
return result
@@ -134,8 +138,8 @@ class OpenShiftAdmPruneImages(AnsibleOpenshiftModule):
def rest_client(self):
if not self._rest_client:
configuration = copy.deepcopy(self.client.configuration)
- validate_certs = self.params.get('registry_validate_certs')
- ssl_ca_cert = self.params.get('registry_ca_cert')
+ validate_certs = self.params.get("registry_validate_certs")
+ ssl_ca_cert = self.params.get("registry_ca_cert")
if validate_certs is not None:
configuration.verify_ssl = validate_certs
if ssl_ca_cert is not None:
@@ -146,7 +150,9 @@ class OpenShiftAdmPruneImages(AnsibleOpenshiftModule):
def delete_from_registry(self, url):
try:
- response = self.rest_client.DELETE(url=url, headers=self.client.configuration.api_key)
+ response = self.rest_client.DELETE(
+ url=url, headers=self.client.configuration.api_key
+ )
if response.status == 404:
# Unable to delete layer
return None
@@ -156,8 +162,9 @@ class OpenShiftAdmPruneImages(AnsibleOpenshiftModule):
if response.status != 202 and response.status != 204:
self.fail_json(
msg="Delete URL {0}: Unexpected status code in response: {1}".format(
- response.status, url),
- reason=response.reason
+ response.status, url
+ ),
+ reason=response.reason,
)
return None
except ApiException as e:
@@ -204,9 +211,7 @@ class OpenShiftAdmPruneImages(AnsibleOpenshiftModule):
result = self.request(
"PUT",
"/apis/{api_version}/namespaces/{namespace}/imagestreams/{name}/status".format(
- api_version=api_version,
- namespace=namespace,
- name=name
+ api_version=api_version, namespace=namespace, name=name
),
body=definition,
content_type="application/json",
@@ -237,11 +242,10 @@ class OpenShiftAdmPruneImages(AnsibleOpenshiftModule):
pass
except DynamicApiError as exc:
self.fail_json(
- msg="Failed to delete object %s/%s due to: %s" % (
- kind, name, exc.body
- ),
+ msg="Failed to delete object %s/%s due to: %s"
+ % (kind, name, exc.body),
reason=exc.reason,
- status=exc.status
+ status=exc.status,
)
else:
existing = resource.get(name=name)
@@ -285,9 +289,11 @@ class OpenShiftAdmPruneImages(AnsibleOpenshiftModule):
continue
if idx == 0:
- istag = "%s/%s:%s" % (stream_namespace,
- stream_name,
- tag_event_list["tag"])
+ istag = "%s/%s:%s" % (
+ stream_namespace,
+ stream_name,
+ tag_event_list["tag"],
+ )
if istag in self.used_tags:
# keeping because tag is used
filtered_items.append(item)
@@ -302,20 +308,20 @@ class OpenShiftAdmPruneImages(AnsibleOpenshiftModule):
image = self.image_mapping[item["image"]]
# check prune over limit size
- if prune_over_size_limit and not self.exceeds_limits(stream_namespace, image):
+ if prune_over_size_limit and not self.exceeds_limits(
+ stream_namespace, image
+ ):
filtered_items.append(item)
continue
- image_ref = "%s/%s@%s" % (stream_namespace,
- stream_name,
- item["image"])
+ image_ref = "%s/%s@%s" % (stream_namespace, stream_name, item["image"])
if image_ref in self.used_images:
# keeping because tag is used
filtered_items.append(item)
continue
images_to_delete.append(item["image"])
- if self.params.get('prune_registry'):
+ if self.params.get("prune_registry"):
manifests_to_delete.append(image["metadata"]["name"])
path = stream_namespace + "/" + stream_name
image_blobs, err = get_image_blobs(image)
@@ -325,21 +331,25 @@ class OpenShiftAdmPruneImages(AnsibleOpenshiftModule):
return filtered_items, manifests_to_delete, images_to_delete
def prune_image_streams(self, stream):
- name = stream['metadata']['namespace'] + "/" + stream['metadata']['name']
+ name = stream["metadata"]["namespace"] + "/" + stream["metadata"]["name"]
if is_too_young_object(stream, self.max_creation_timestamp):
# keeping all images because of image stream too young
return None, []
- facts = self.kubernetes_facts(kind="ImageStream",
- api_version=ApiConfiguration.get("ImageStream"),
- name=stream["metadata"]["name"],
- namespace=stream["metadata"]["namespace"])
- image_stream = facts.get('resources')
+ facts = self.kubernetes_facts(
+ kind="ImageStream",
+ api_version=ApiConfiguration.get("ImageStream"),
+ name=stream["metadata"]["name"],
+ namespace=stream["metadata"]["namespace"],
+ )
+ image_stream = facts.get("resources")
if len(image_stream) != 1:
# skipping because it does not exist anymore
return None, []
stream = image_stream[0]
namespace = self.params.get("namespace")
- stream_to_update = not namespace or (stream["metadata"]["namespace"] == namespace)
+ stream_to_update = not namespace or (
+ stream["metadata"]["namespace"] == namespace
+ )
manifests_to_delete, images_to_delete = [], []
deleted_items = False
@@ -351,9 +361,9 @@ class OpenShiftAdmPruneImages(AnsibleOpenshiftModule):
(
filtered_tag_event,
tag_manifests_to_delete,
- tag_images_to_delete
+ tag_images_to_delete,
) = self.prune_image_stream_tag(stream, tag_event_list)
- stream['status']['tags'][idx]['items'] = filtered_tag_event
+ stream["status"]["tags"][idx]["items"] = filtered_tag_event
manifests_to_delete += tag_manifests_to_delete
images_to_delete += tag_images_to_delete
deleted_items = deleted_items or (len(tag_images_to_delete) > 0)
@@ -361,11 +371,11 @@ class OpenShiftAdmPruneImages(AnsibleOpenshiftModule):
# Deleting tags without items
tags = []
for tag in stream["status"].get("tags", []):
- if tag['items'] is None or len(tag['items']) == 0:
+ if tag["items"] is None or len(tag["items"]) == 0:
continue
tags.append(tag)
- stream['status']['tags'] = tags
+ stream["status"]["tags"] = tags
result = None
# Update ImageStream
if stream_to_update:
@@ -402,19 +412,23 @@ class OpenShiftAdmPruneImages(AnsibleOpenshiftModule):
def execute_module(self):
resources = self.list_objects()
- if not self.check_mode and self.params.get('prune_registry'):
+ if not self.check_mode and self.params.get("prune_registry"):
if not self.registryhost:
- self.registryhost = determine_host_registry(self.module, resources['Image'], resources['ImageStream'])
+ self.registryhost = determine_host_registry(
+ self.module, resources["Image"], resources["ImageStream"]
+ )
# validate that host has a scheme
if "://" not in self.registryhost:
self.registryhost = "https://" + self.registryhost
# Analyze Image Streams
analyze_ref = OpenShiftAnalyzeImageStream(
- ignore_invalid_refs=self.params.get('ignore_invalid_refs'),
+ ignore_invalid_refs=self.params.get("ignore_invalid_refs"),
max_creation_timestamp=self.max_creation_timestamp,
- module=self.module
+ module=self.module,
+ )
+ self.used_tags, self.used_images, error = analyze_ref.analyze_image_stream(
+ resources
)
- self.used_tags, self.used_images, error = analyze_ref.analyze_image_stream(resources)
if error:
self.fail_json(msg=error)
@@ -435,16 +449,20 @@ class OpenShiftAdmPruneImages(AnsibleOpenshiftModule):
updated_image_streams = []
deleted_tags_images = []
updated_is_mapping = {}
- for stream in resources['ImageStream']:
+ for stream in resources["ImageStream"]:
result, images_to_delete = self.prune_image_streams(stream)
if result:
- updated_is_mapping[result["metadata"]["namespace"] + "/" + result["metadata"]["name"]] = result
+ updated_is_mapping[
+ result["metadata"]["namespace"] + "/" + result["metadata"]["name"]
+ ] = result
updated_image_streams.append(result)
deleted_tags_images += images_to_delete
# Create a list with images referenced on image stream
self.referenced_images = []
- for item in self.kubernetes_facts(kind="ImageStream", api_version="image.openshift.io/v1")["resources"]:
+ for item in self.kubernetes_facts(
+ kind="ImageStream", api_version="image.openshift.io/v1"
+ )["resources"]:
name = "%s/%s" % (item["metadata"]["namespace"], item["metadata"]["name"])
if name in updated_is_mapping:
item = updated_is_mapping[name]
@@ -453,7 +471,7 @@ class OpenShiftAdmPruneImages(AnsibleOpenshiftModule):
# Stage 2: delete images
images = []
- images_to_delete = [x["metadata"]["name"] for x in resources['Image']]
+ images_to_delete = [x["metadata"]["name"] for x in resources["Image"]]
if self.params.get("namespace") is not None:
# When namespace is defined, prune only images that were referenced by ImageStream
# from the corresponding namespace
diff --git a/ansible_collections/community/okd/plugins/module_utils/openshift_builds.py b/ansible_collections/community/okd/plugins/module_utils/openshift_builds.py
index 02e60fd2a..51ebfc281 100644
--- a/ansible_collections/community/okd/plugins/module_utils/openshift_builds.py
+++ b/ansible_collections/community/okd/plugins/module_utils/openshift_builds.py
@@ -1,15 +1,17 @@
#!/usr/bin/env python
-from __future__ import (absolute_import, division, print_function)
+from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
from datetime import datetime, timezone, timedelta
-import traceback
import time
from ansible.module_utils._text import to_native
-from ansible_collections.community.okd.plugins.module_utils.openshift_common import AnsibleOpenshiftModule
+from ansible_collections.community.okd.plugins.module_utils.openshift_common import (
+ AnsibleOpenshiftModule,
+)
try:
from kubernetes.dynamic.exceptions import DynamicApiError
@@ -36,8 +38,7 @@ class OpenShiftBuilds(AnsibleOpenshiftModule):
result = self.request(
method="POST",
path="/apis/build.openshift.io/v1/namespaces/{namespace}/builds/{name}/clone".format(
- namespace=namespace,
- name=name
+ namespace=namespace, name=name
),
body=request,
content_type="application/json",
@@ -47,7 +48,11 @@ class OpenShiftBuilds(AnsibleOpenshiftModule):
msg = "Failed to clone Build %s/%s due to: %s" % (namespace, name, exc.body)
self.fail_json(msg=msg, status=exc.status, reason=exc.reason)
except Exception as e:
- msg = "Failed to clone Build %s/%s due to: %s" % (namespace, name, to_native(e))
+ msg = "Failed to clone Build %s/%s due to: %s" % (
+ namespace,
+ name,
+ to_native(e),
+ )
self.fail_json(msg=msg, error=to_native(e), exception=e)
def instantiate_build_config(self, name, namespace, request):
@@ -55,22 +60,28 @@ class OpenShiftBuilds(AnsibleOpenshiftModule):
result = self.request(
method="POST",
path="/apis/build.openshift.io/v1/namespaces/{namespace}/buildconfigs/{name}/instantiate".format(
- namespace=namespace,
- name=name
+ namespace=namespace, name=name
),
body=request,
content_type="application/json",
)
return result.to_dict()
except DynamicApiError as exc:
- msg = "Failed to instantiate BuildConfig %s/%s due to: %s" % (namespace, name, exc.body)
+ msg = "Failed to instantiate BuildConfig %s/%s due to: %s" % (
+ namespace,
+ name,
+ exc.body,
+ )
self.fail_json(msg=msg, status=exc.status, reason=exc.reason)
except Exception as e:
- msg = "Failed to instantiate BuildConfig %s/%s due to: %s" % (namespace, name, to_native(e))
+ msg = "Failed to instantiate BuildConfig %s/%s due to: %s" % (
+ namespace,
+ name,
+ to_native(e),
+ )
self.fail_json(msg=msg, error=to_native(e), exception=e)
def start_build(self):
-
result = None
name = self.params.get("build_config_name")
if not name:
@@ -79,32 +90,20 @@ class OpenShiftBuilds(AnsibleOpenshiftModule):
build_request = {
"kind": "BuildRequest",
"apiVersion": "build.openshift.io/v1",
- "metadata": {
- "name": name
- },
- "triggeredBy": [
- {"message": "Manually triggered"}
- ],
+ "metadata": {"name": name},
+ "triggeredBy": [{"message": "Manually triggered"}],
}
# Overrides incremental
incremental = self.params.get("incremental")
if incremental is not None:
build_request.update(
- {
- "sourceStrategyOptions": {
- "incremental": incremental
- }
- }
+ {"sourceStrategyOptions": {"incremental": incremental}}
)
# Environment variable
if self.params.get("env_vars"):
- build_request.update(
- {
- "env": self.params.get("env_vars")
- }
- )
+ build_request.update({"env": self.params.get("env_vars")})
# Docker strategy option
if self.params.get("build_args"):
@@ -121,22 +120,14 @@ class OpenShiftBuilds(AnsibleOpenshiftModule):
if no_cache is not None:
build_request.update(
{
- "dockerStrategyOptions": {
- "noCache": no_cache
- },
+ "dockerStrategyOptions": {"noCache": no_cache},
}
)
# commit
if self.params.get("commit"):
build_request.update(
- {
- "revision": {
- "git": {
- "commit": self.params.get("commit")
- }
- }
- }
+ {"revision": {"git": {"commit": self.params.get("commit")}}}
)
if self.params.get("build_config_name"):
@@ -144,7 +135,7 @@ class OpenShiftBuilds(AnsibleOpenshiftModule):
result = self.instantiate_build_config(
name=self.params.get("build_config_name"),
namespace=self.params.get("namespace"),
- request=build_request
+ request=build_request,
)
else:
@@ -152,7 +143,7 @@ class OpenShiftBuilds(AnsibleOpenshiftModule):
result = self.clone_build(
name=self.params.get("build_name"),
namespace=self.params.get("namespace"),
- request=build_request
+ request=build_request,
)
if result and self.params.get("wait"):
@@ -179,10 +170,11 @@ class OpenShiftBuilds(AnsibleOpenshiftModule):
break
elif last_status_phase in ("Cancelled", "Error", "Failed"):
self.fail_json(
- msg="Unexpected status for Build %s/%s: %s" % (
+ msg="Unexpected status for Build %s/%s: %s"
+ % (
result["metadata"]["name"],
result["metadata"]["namespace"],
- last_status_phase
+ last_status_phase,
)
)
time.sleep(wait_sleep)
@@ -190,8 +182,11 @@ class OpenShiftBuilds(AnsibleOpenshiftModule):
if last_status_phase != "Complete":
name = result["metadata"]["name"]
namespace = result["metadata"]["namespace"]
- msg = "Build %s/%s has not complete after %d second(s)," \
- "current status is %s" % (namespace, name, wait_timeout, last_status_phase)
+ msg = (
+ "Build %s/%s has not complete after %d second(s),"
+ "current status is %s"
+ % (namespace, name, wait_timeout, last_status_phase)
+ )
self.fail_json(msg=msg)
@@ -199,9 +194,8 @@ class OpenShiftBuilds(AnsibleOpenshiftModule):
self.exit_json(changed=True, builds=result)
def cancel_build(self, restart):
-
- kind = 'Build'
- api_version = 'build.openshift.io/v1'
+ kind = "Build"
+ api_version = "build.openshift.io/v1"
namespace = self.params.get("namespace")
phases = ["new", "pending", "running"]
@@ -215,16 +209,18 @@ class OpenShiftBuilds(AnsibleOpenshiftModule):
else:
build_config = self.params.get("build_config_name")
# list all builds from namespace
- params = dict(
- kind=kind,
- api_version=api_version,
- namespace=namespace
- )
+ params = dict(kind=kind, api_version=api_version, namespace=namespace)
resources = self.kubernetes_facts(**params).get("resources", [])
def _filter_builds(build):
- config = build["metadata"].get("labels", {}).get("openshift.io/build-config.name")
- return build_config is None or (build_config is not None and config in build_config)
+ config = (
+ build["metadata"]
+ .get("labels", {})
+ .get("openshift.io/build-config.name")
+ )
+ return build_config is None or (
+ build_config is not None and config in build_config
+ )
for item in list(filter(_filter_builds, resources)):
name = item["metadata"]["name"]
@@ -232,16 +228,15 @@ class OpenShiftBuilds(AnsibleOpenshiftModule):
names.append(name)
if len(names) == 0:
- self.exit_json(changed=False, msg="No Build found from namespace %s" % namespace)
+ self.exit_json(
+ changed=False, msg="No Build found from namespace %s" % namespace
+ )
warning = []
builds_to_cancel = []
for name in names:
params = dict(
- kind=kind,
- api_version=api_version,
- name=name,
- namespace=namespace
+ kind=kind, api_version=api_version, name=name, namespace=namespace
)
resource = self.kubernetes_facts(**params).get("resources", [])
@@ -256,7 +251,10 @@ class OpenShiftBuilds(AnsibleOpenshiftModule):
if phase in phases:
builds_to_cancel.append(resource)
else:
- warning.append("build %s/%s is not in expected phase, found %s" % (namespace, name, phase))
+ warning.append(
+ "build %s/%s is not in expected phase, found %s"
+ % (namespace, name, phase)
+ )
changed = False
result = []
@@ -278,9 +276,10 @@ class OpenShiftBuilds(AnsibleOpenshiftModule):
result.append(cancelled_build)
except DynamicApiError as exc:
self.fail_json(
- msg="Failed to cancel Build %s/%s due to: %s" % (namespace, name, exc),
+ msg="Failed to cancel Build %s/%s due to: %s"
+ % (namespace, name, exc),
reason=exc.reason,
- status=exc.status
+ status=exc.status,
)
except Exception as e:
self.fail_json(
@@ -294,10 +293,7 @@ class OpenShiftBuilds(AnsibleOpenshiftModule):
name = build["metadata"]["name"]
while (datetime.now() - start).seconds < wait_timeout:
params = dict(
- kind=kind,
- api_version=api_version,
- name=name,
- namespace=namespace
+ kind=kind, api_version=api_version, name=name, namespace=namespace
)
resource = self.kubernetes_facts(**params).get("resources", [])
if len(resource) == 0:
@@ -307,7 +303,11 @@ class OpenShiftBuilds(AnsibleOpenshiftModule):
if last_phase == "Cancelled":
return resource, None
time.sleep(wait_sleep)
- return None, "Build %s/%s is not cancelled as expected, current state is %s" % (namespace, name, last_phase)
+ return (
+ None,
+ "Build %s/%s is not cancelled as expected, current state is %s"
+ % (namespace, name, last_phase),
+ )
if result and self.params.get("wait"):
wait_timeout = self.params.get("wait_timeout")
@@ -341,8 +341,8 @@ class OpenShiftPruneBuilds(OpenShiftBuilds):
def execute_module(self):
# list replicationcontroller candidate for pruning
- kind = 'Build'
- api_version = 'build.openshift.io/v1'
+ kind = "Build"
+ api_version = "build.openshift.io/v1"
resource = self.find_resource(kind=kind, api_version=api_version, fail=True)
self.max_creation_timestamp = None
@@ -352,7 +352,12 @@ class OpenShiftPruneBuilds(OpenShiftBuilds):
self.max_creation_timestamp = now - timedelta(minutes=keep_younger_than)
def _prunable_build(build):
- return build["status"]["phase"] in ("Complete", "Failed", "Error", "Cancelled")
+ return build["status"]["phase"] in (
+ "Complete",
+ "Failed",
+ "Error",
+ "Cancelled",
+ )
def _orphan_build(build):
if not _prunable_build(build):
@@ -367,7 +372,9 @@ class OpenShiftPruneBuilds(OpenShiftBuilds):
def _younger_build(build):
if not self.max_creation_timestamp:
return False
- creation_timestamp = datetime.strptime(build['metadata']['creationTimestamp'], '%Y-%m-%dT%H:%M:%SZ')
+ creation_timestamp = datetime.strptime(
+ build["metadata"]["creationTimestamp"], "%Y-%m-%dT%H:%M:%SZ"
+ )
return creation_timestamp < self.max_creation_timestamp
predicates = [
@@ -401,9 +408,17 @@ class OpenShiftPruneBuilds(OpenShiftBuilds):
namespace = build["metadata"]["namespace"]
resource.delete(name=name, namespace=namespace, body={})
except DynamicApiError as exc:
- msg = "Failed to delete Build %s/%s due to: %s" % (namespace, name, exc.body)
+ msg = "Failed to delete Build %s/%s due to: %s" % (
+ namespace,
+ name,
+ exc.body,
+ )
self.fail_json(msg=msg, status=exc.status, reason=exc.reason)
except Exception as e:
- msg = "Failed to delete Build %s/%s due to: %s" % (namespace, name, to_native(e))
+ msg = "Failed to delete Build %s/%s due to: %s" % (
+ namespace,
+ name,
+ to_native(e),
+ )
self.fail_json(msg=msg, error=to_native(e), exception=e)
self.exit_json(changed=changed, builds=candidates)
diff --git a/ansible_collections/community/okd/plugins/module_utils/openshift_common.py b/ansible_collections/community/okd/plugins/module_utils/openshift_common.py
index a1318f9a5..b818b7a7b 100644
--- a/ansible_collections/community/okd/plugins/module_utils/openshift_common.py
+++ b/ansible_collections/community/okd/plugins/module_utils/openshift_common.py
@@ -1,6 +1,7 @@
#!/usr/bin/env python
-from __future__ import (absolute_import, division, print_function)
+from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
import traceback
@@ -9,8 +10,12 @@ from abc import abstractmethod
from ansible.module_utils._text import to_native
try:
- from ansible_collections.kubernetes.core.plugins.module_utils.k8s.client import get_api_client
- from ansible_collections.kubernetes.core.plugins.module_utils.k8s.core import AnsibleK8SModule
+ from ansible_collections.kubernetes.core.plugins.module_utils.k8s.client import (
+ get_api_client,
+ )
+ from ansible_collections.kubernetes.core.plugins.module_utils.k8s.core import (
+ AnsibleK8SModule,
+ )
from ansible_collections.kubernetes.core.plugins.module_utils.k8s.service import (
K8sService,
diff_objects,
@@ -24,7 +29,10 @@ try:
merge_params,
flatten_list_kind,
)
- from ansible_collections.kubernetes.core.plugins.module_utils.k8s.exceptions import CoreException
+ from ansible_collections.kubernetes.core.plugins.module_utils.k8s.exceptions import (
+ CoreException,
+ )
+
HAS_KUBERNETES_COLLECTION = True
k8s_collection_import_exception = None
K8S_COLLECTION_ERROR = None
@@ -35,7 +43,6 @@ except ImportError as e:
class AnsibleOpenshiftModule(AnsibleK8SModule):
-
def __init__(self, **kwargs):
super(AnsibleOpenshiftModule, self).__init__(**kwargs)
@@ -86,7 +93,6 @@ class AnsibleOpenshiftModule(AnsibleK8SModule):
return diff_objects(existing, new)
def run_module(self):
-
try:
self.execute_module()
except CoreException as e:
diff --git a/ansible_collections/community/okd/plugins/module_utils/openshift_docker_image.py b/ansible_collections/community/okd/plugins/module_utils/openshift_docker_image.py
index 27dbe6cc7..160c5b50b 100644
--- a/ansible_collections/community/okd/plugins/module_utils/openshift_docker_image.py
+++ b/ansible_collections/community/okd/plugins/module_utils/openshift_docker_image.py
@@ -1,6 +1,7 @@
#!/usr/bin/env python
-from __future__ import (absolute_import, division, print_function)
+from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
import re
@@ -23,62 +24,68 @@ def convert_storage_to_bytes(value):
def is_valid_digest(digest):
-
digest_algorithm_size = dict(
- sha256=64, sha384=96, sha512=128,
+ sha256=64,
+ sha384=96,
+ sha512=128,
)
- m = re.match(r'[a-zA-Z0-9-_+.]+:[a-fA-F0-9]+', digest)
+ m = re.match(r"[a-zA-Z0-9-_+.]+:[a-fA-F0-9]+", digest)
if not m:
return "Docker digest does not match expected format %s" % digest
- idx = digest.find(':')
+ idx = digest.find(":")
# case: "sha256:" with no hex.
if idx < 0 or idx == (len(digest) - 1):
return "Invalid docker digest %s, no hex value define" % digest
algorithm = digest[:idx]
if algorithm not in digest_algorithm_size:
- return "Unsupported digest algorithm value %s for digest %s" % (algorithm, digest)
+ return "Unsupported digest algorithm value %s for digest %s" % (
+ algorithm,
+ digest,
+ )
- hex_value = digest[idx + 1:]
+ hex_value = digest[idx + 1:] # fmt: skip
if len(hex_value) != digest_algorithm_size.get(algorithm):
return "Invalid length for digest hex expected %d found %d (digest is %s)" % (
- digest_algorithm_size.get(algorithm), len(hex_value), digest
+ digest_algorithm_size.get(algorithm),
+ len(hex_value),
+ digest,
)
def parse_docker_image_ref(image_ref, module=None):
"""
- Docker Grammar Reference
- Reference => name [ ":" tag ] [ "@" digest ]
- name => [hostname '/'] component ['/' component]*
- hostname => hostcomponent ['.' hostcomponent]* [':' port-number]
- hostcomponent => /([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])/
- port-number => /[0-9]+/
- component => alpha-numeric [separator alpha-numeric]*
- alpha-numeric => /[a-z0-9]+/
- separator => /[_.]|__|[-]*/
+ Docker Grammar Reference
+ Reference => name [ ":" tag ] [ "@" digest ]
+ name => [hostname '/'] component ['/' component]*
+ hostname => hostcomponent ['.' hostcomponent]* [':' port-number]
+ hostcomponent => /([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])/
+ port-number => /[0-9]+/
+ component => alpha-numeric [separator alpha-numeric]*
+ alpha-numeric => /[a-z0-9]+/
+ separator => /[_.]|__|[-]*/
"""
idx = image_ref.find("/")
def _contains_any(src, values):
return any(x in src for x in values)
- result = {
- "tag": None, "digest": None
- }
+ result = {"tag": None, "digest": None}
default_domain = "docker.io"
- if idx < 0 or (not _contains_any(image_ref[:idx], ":.") and image_ref[:idx] != "localhost"):
+ if idx < 0 or (
+ not _contains_any(image_ref[:idx], ":.") and image_ref[:idx] != "localhost"
+ ):
result["hostname"], remainder = default_domain, image_ref
else:
- result["hostname"], remainder = image_ref[:idx], image_ref[idx + 1:]
+ result["hostname"], remainder = image_ref[:idx], image_ref[idx + 1:] # fmt: skip
# Parse remainder information
idx = remainder.find("@")
if idx > 0 and len(remainder) > (idx + 1):
# docker image reference with digest
- component, result["digest"] = remainder[:idx], remainder[idx + 1:]
+ component, result["digest"] = remainder[:idx], remainder[idx + 1:] # fmt: skip
err = is_valid_digest(result["digest"])
if err:
if module:
@@ -88,7 +95,7 @@ def parse_docker_image_ref(image_ref, module=None):
idx = remainder.find(":")
if idx > 0 and len(remainder) > (idx + 1):
# docker image reference with tag
- component, result["tag"] = remainder[:idx], remainder[idx + 1:]
+ component, result["tag"] = remainder[:idx], remainder[idx + 1:] # fmt: skip
else:
# name only
component = remainder
@@ -96,8 +103,6 @@ def parse_docker_image_ref(image_ref, module=None):
namespace = None
if len(v) > 1:
namespace = v[0]
- result.update({
- "namespace": namespace, "name": v[-1]
- })
+ result.update({"namespace": namespace, "name": v[-1]})
return result, None
diff --git a/ansible_collections/community/okd/plugins/module_utils/openshift_groups.py b/ansible_collections/community/okd/plugins/module_utils/openshift_groups.py
index 5d1aaadc1..473a14f7e 100644
--- a/ansible_collections/community/okd/plugins/module_utils/openshift_groups.py
+++ b/ansible_collections/community/okd/plugins/module_utils/openshift_groups.py
@@ -3,11 +3,11 @@
# 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)
+from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
-import traceback
from datetime import datetime
from ansible.module_utils.parsing.convert_bool import boolean
@@ -19,18 +19,21 @@ from ansible_collections.community.okd.plugins.module_utils.openshift_ldap impor
ldap_split_host_port,
OpenshiftLDAPRFC2307,
OpenshiftLDAPActiveDirectory,
- OpenshiftLDAPAugmentedActiveDirectory
+ OpenshiftLDAPAugmentedActiveDirectory,
)
try:
import ldap
+
HAS_PYTHON_LDAP = True
PYTHON_LDAP_ERROR = None
except ImportError as e:
HAS_PYTHON_LDAP = False
PYTHON_LDAP_ERROR = e
-from ansible_collections.community.okd.plugins.module_utils.openshift_common import AnsibleOpenshiftModule
+from ansible_collections.community.okd.plugins.module_utils.openshift_common import (
+ AnsibleOpenshiftModule,
+)
try:
from kubernetes.dynamic.exceptions import DynamicApiError
@@ -44,7 +47,9 @@ LDAP_OPENSHIFT_UID_ANNOTATION = "openshift.io/ldap.uid"
LDAP_OPENSHIFT_SYNCTIME_ANNOTATION = "openshift.io/ldap.sync-time"
-def connect_to_ldap(module, server_uri, bind_dn=None, bind_pw=None, insecure=True, ca_file=None):
+def connect_to_ldap(
+ module, server_uri, bind_dn=None, bind_pw=None, insecure=True, ca_file=None
+):
if insecure:
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
elif ca_file:
@@ -56,27 +61,36 @@ def connect_to_ldap(module, server_uri, bind_dn=None, bind_pw=None, insecure=Tru
connection.simple_bind_s(bind_dn, bind_pw)
return connection
except ldap.LDAPError as e:
- module.fail_json(msg="Cannot bind to the LDAP server '{0}' due to: {1}".format(server_uri, e))
+ module.fail_json(
+ msg="Cannot bind to the LDAP server '{0}' due to: {1}".format(server_uri, e)
+ )
def validate_group_annotation(definition, host_ip):
- name = definition['metadata']['name']
+ name = definition["metadata"]["name"]
# Validate LDAP URL Annotation
- annotate_url = definition['metadata'].get('annotations', {}).get(LDAP_OPENSHIFT_URL_ANNOTATION)
+ annotate_url = (
+ definition["metadata"].get("annotations", {}).get(LDAP_OPENSHIFT_URL_ANNOTATION)
+ )
if host_ip:
if not annotate_url:
- return "group '{0}' marked as having been synced did not have an '{1}' annotation".format(name, LDAP_OPENSHIFT_URL_ANNOTATION)
+ return "group '{0}' marked as having been synced did not have an '{1}' annotation".format(
+ name, LDAP_OPENSHIFT_URL_ANNOTATION
+ )
elif annotate_url != host_ip:
return "group '{0}' was not synchronized from: '{1}'".format(name, host_ip)
# Validate LDAP UID Annotation
- annotate_uid = definition['metadata']['annotations'].get(LDAP_OPENSHIFT_UID_ANNOTATION)
+ annotate_uid = definition["metadata"]["annotations"].get(
+ LDAP_OPENSHIFT_UID_ANNOTATION
+ )
if not annotate_uid:
- return "group '{0}' marked as having been synced did not have an '{1}' annotation".format(name, LDAP_OPENSHIFT_UID_ANNOTATION)
+ return "group '{0}' marked as having been synced did not have an '{1}' annotation".format(
+ name, LDAP_OPENSHIFT_UID_ANNOTATION
+ )
return None
class OpenshiftLDAPGroups(object):
-
kind = "Group"
version = "user.openshift.io/v1"
@@ -88,11 +102,7 @@ class OpenshiftLDAPGroups(object):
@property
def k8s_group_api(self):
if not self.__group_api:
- params = dict(
- kind=self.kind,
- api_version=self.version,
- fail=True
- )
+ params = dict(kind=self.kind, api_version=self.version, fail=True)
self.__group_api = self.module.find_resource(**params)
return self.__group_api
@@ -139,16 +149,26 @@ class OpenshiftLDAPGroups(object):
if missing:
self.module.fail_json(
- msg="The following groups were not found: %s" % ''.join(missing)
+ msg="The following groups were not found: %s" % "".join(missing)
)
else:
label_selector = "%s=%s" % (LDAP_OPENSHIFT_HOST_LABEL, host)
- resources = self.get_group_info(label_selectors=[label_selector], return_list=True)
+ resources = self.get_group_info(
+ label_selectors=[label_selector], return_list=True
+ )
if not resources:
- return None, "Unable to find Group matching label selector '%s'" % label_selector
+ return (
+ None,
+ "Unable to find Group matching label selector '%s'"
+ % label_selector,
+ )
groups = resources
if deny_groups:
- groups = [item for item in groups if item["metadata"]["name"] not in deny_groups]
+ groups = [
+ item
+ for item in groups
+ if item["metadata"]["name"] not in deny_groups
+ ]
uids = []
for grp in groups:
@@ -156,7 +176,9 @@ class OpenshiftLDAPGroups(object):
if err and allow_groups:
# We raise an error for group part of the allow_group not matching LDAP sync criteria
return None, err
- group_uid = grp['metadata']['annotations'].get(LDAP_OPENSHIFT_UID_ANNOTATION)
+ group_uid = grp["metadata"]["annotations"].get(
+ LDAP_OPENSHIFT_UID_ANNOTATION
+ )
self.cache[group_uid] = grp
uids.append(group_uid)
return uids, None
@@ -174,38 +196,65 @@ class OpenshiftLDAPGroups(object):
"kind": "Group",
"metadata": {
"name": group_name,
- "labels": {
- LDAP_OPENSHIFT_HOST_LABEL: self.module.host
- },
+ "labels": {LDAP_OPENSHIFT_HOST_LABEL: self.module.host},
"annotations": {
LDAP_OPENSHIFT_URL_ANNOTATION: self.module.netlocation,
LDAP_OPENSHIFT_UID_ANNOTATION: group_uid,
- }
- }
+ },
+ },
}
# Make sure we aren't taking over an OpenShift group that is already related to a different LDAP group
- ldaphost_label = group["metadata"].get("labels", {}).get(LDAP_OPENSHIFT_HOST_LABEL)
+ ldaphost_label = (
+ group["metadata"].get("labels", {}).get(LDAP_OPENSHIFT_HOST_LABEL)
+ )
if not ldaphost_label or ldaphost_label != self.module.host:
- return None, "Group %s: %s label did not match sync host: wanted %s, got %s" % (
- group_name, LDAP_OPENSHIFT_HOST_LABEL, self.module.host, ldaphost_label
+ return (
+ None,
+ "Group %s: %s label did not match sync host: wanted %s, got %s"
+ % (
+ group_name,
+ LDAP_OPENSHIFT_HOST_LABEL,
+ self.module.host,
+ ldaphost_label,
+ ),
)
- ldapurl_annotation = group["metadata"].get("annotations", {}).get(LDAP_OPENSHIFT_URL_ANNOTATION)
+ ldapurl_annotation = (
+ group["metadata"].get("annotations", {}).get(LDAP_OPENSHIFT_URL_ANNOTATION)
+ )
if not ldapurl_annotation or ldapurl_annotation != self.module.netlocation:
- return None, "Group %s: %s annotation did not match sync host: wanted %s, got %s" % (
- group_name, LDAP_OPENSHIFT_URL_ANNOTATION, self.module.netlocation, ldapurl_annotation
+ return (
+ None,
+ "Group %s: %s annotation did not match sync host: wanted %s, got %s"
+ % (
+ group_name,
+ LDAP_OPENSHIFT_URL_ANNOTATION,
+ self.module.netlocation,
+ ldapurl_annotation,
+ ),
)
- ldapuid_annotation = group["metadata"].get("annotations", {}).get(LDAP_OPENSHIFT_UID_ANNOTATION)
+ ldapuid_annotation = (
+ group["metadata"].get("annotations", {}).get(LDAP_OPENSHIFT_UID_ANNOTATION)
+ )
if not ldapuid_annotation or ldapuid_annotation != group_uid:
- return None, "Group %s: %s annotation did not match LDAP UID: wanted %s, got %s" % (
- group_name, LDAP_OPENSHIFT_UID_ANNOTATION, group_uid, ldapuid_annotation
+ return (
+ None,
+ "Group %s: %s annotation did not match LDAP UID: wanted %s, got %s"
+ % (
+ group_name,
+ LDAP_OPENSHIFT_UID_ANNOTATION,
+ group_uid,
+ ldapuid_annotation,
+ ),
)
# Overwrite Group Users data
group["users"] = usernames
- group["metadata"]["annotations"][LDAP_OPENSHIFT_SYNCTIME_ANNOTATION] = datetime.now().isoformat()
+ group["metadata"]["annotations"][
+ LDAP_OPENSHIFT_SYNCTIME_ANNOTATION
+ ] = datetime.now().isoformat()
return group, None
def create_openshift_groups(self, groups: list):
@@ -223,9 +272,15 @@ class OpenshiftLDAPGroups(object):
else:
definition = self.k8s_group_api.create(definition).to_dict()
except DynamicApiError as exc:
- self.module.fail_json(msg="Failed to %s Group '%s' due to: %s" % (method, name, exc.body))
+ self.module.fail_json(
+ msg="Failed to %s Group '%s' due to: %s"
+ % (method, name, exc.body)
+ )
except Exception as exc:
- self.module.fail_json(msg="Failed to %s Group '%s' due to: %s" % (method, name, to_native(exc)))
+ self.module.fail_json(
+ msg="Failed to %s Group '%s' due to: %s"
+ % (method, name, to_native(exc))
+ )
equals = False
if existing:
equals, diff = self.module.diff_objects(existing, definition)
@@ -235,27 +290,27 @@ class OpenshiftLDAPGroups(object):
return results, diffs, changed
def delete_openshift_group(self, name: str):
- result = dict(
- kind=self.kind,
- apiVersion=self.version,
- metadata=dict(
- name=name
- )
- )
+ result = dict(kind=self.kind, apiVersion=self.version, metadata=dict(name=name))
if not self.module.check_mode:
try:
result = self.k8s_group_api.delete(name=name).to_dict()
except DynamicApiError as exc:
- self.module.fail_json(msg="Failed to delete Group '{0}' due to: {1}".format(name, exc.body))
+ self.module.fail_json(
+ msg="Failed to delete Group '{0}' due to: {1}".format(
+ name, exc.body
+ )
+ )
except Exception as exc:
- self.module.fail_json(msg="Failed to delete Group '{0}' due to: {1}".format(name, to_native(exc)))
+ self.module.fail_json(
+ msg="Failed to delete Group '{0}' due to: {1}".format(
+ name, to_native(exc)
+ )
+ )
return result
class OpenshiftGroupsSync(AnsibleOpenshiftModule):
-
def __init__(self, **kwargs):
-
super(OpenshiftGroupsSync, self).__init__(**kwargs)
self.__k8s_group_api = None
self.__ldap_connection = None
@@ -267,17 +322,14 @@ class OpenshiftGroupsSync(AnsibleOpenshiftModule):
if not HAS_PYTHON_LDAP:
self.fail_json(
- msg=missing_required_lib('python-ldap'), error=to_native(PYTHON_LDAP_ERROR)
+ msg=missing_required_lib("python-ldap"),
+ error=to_native(PYTHON_LDAP_ERROR),
)
@property
def k8s_group_api(self):
if not self.__k8s_group_api:
- params = dict(
- kind="Group",
- api_version="user.openshift.io/v1",
- fail=True
- )
+ params = dict(kind="Group", api_version="user.openshift.io/v1", fail=True)
self.__k8s_group_api = self.find_resource(**params)
return self.__k8s_group_api
@@ -291,11 +343,11 @@ class OpenshiftGroupsSync(AnsibleOpenshiftModule):
# Create connection object
params = dict(
module=self,
- server_uri=self.config.get('url'),
- bind_dn=self.config.get('bindDN'),
- bind_pw=self.config.get('bindPassword'),
- insecure=boolean(self.config.get('insecure')),
- ca_file=self.config.get('ca')
+ server_uri=self.config.get("url"),
+ bind_dn=self.config.get("bindDN"),
+ bind_pw=self.config.get("bindPassword"),
+ insecure=boolean(self.config.get("insecure")),
+ ca_file=self.config.get("ca"),
)
self.__ldap_connection = connect_to_ldap(**params)
return self.__ldap_connection
@@ -327,7 +379,6 @@ class OpenshiftGroupsSync(AnsibleOpenshiftModule):
return syncer
def synchronize(self):
-
sync_group_type = self.module.params.get("type")
groups_uids = []
@@ -365,7 +416,8 @@ class OpenshiftGroupsSync(AnsibleOpenshiftModule):
name, err = syncer.get_username_for_entry(entry)
if err:
self.exit_json(
- msg="Unable to determine username for entry %s: %s" % (entry, err)
+ msg="Unable to determine username for entry %s: %s"
+ % (entry, err)
)
if isinstance(name, list):
usernames.extend(name)
@@ -380,13 +432,17 @@ class OpenshiftGroupsSync(AnsibleOpenshiftModule):
self.exit_json(msg=err)
# Make Openshift group
- group, err = ldap_openshift_group.make_openshift_group(uid, group_name, usernames)
+ group, err = ldap_openshift_group.make_openshift_group(
+ uid, group_name, usernames
+ )
if err:
self.fail_json(msg=err)
openshift_groups.append(group)
# Create Openshift Groups
- results, diffs, changed = ldap_openshift_group.create_openshift_groups(openshift_groups)
+ results, diffs, changed = ldap_openshift_group.create_openshift_groups(
+ openshift_groups
+ )
self.module.exit_json(changed=True, groups=results)
def prune(self):
@@ -404,7 +460,10 @@ class OpenshiftGroupsSync(AnsibleOpenshiftModule):
# Check if LDAP group exist
exists, err = syncer.is_ldapgroup_exists(uid)
if err:
- msg = "Error determining LDAP group existence for group %s: %s" % (uid, err)
+ msg = "Error determining LDAP group existence for group %s: %s" % (
+ uid,
+ err,
+ )
self.module.fail_json(msg=msg)
if exists:
@@ -429,14 +488,22 @@ class OpenshiftGroupsSync(AnsibleOpenshiftModule):
self.fail_json(msg="Invalid LDAP Sync config: %s" % error)
# Split host/port
- if self.config.get('url'):
- result, error = ldap_split_host_port(self.config.get('url'))
+ if self.config.get("url"):
+ result, error = ldap_split_host_port(self.config.get("url"))
if error:
- self.fail_json(msg="Failed to parse url='{0}': {1}".format(self.config.get('url'), error))
- self.netlocation, self.host, self.port = result["netlocation"], result["host"], result["port"]
+ self.fail_json(
+ msg="Failed to parse url='{0}': {1}".format(
+ self.config.get("url"), error
+ )
+ )
+ self.netlocation, self.host, self.port = (
+ result["netlocation"],
+ result["host"],
+ result["port"],
+ )
self.scheme = result["scheme"]
- if self.params.get('state') == 'present':
+ if self.params.get("state") == "present":
self.synchronize()
else:
self.prune()
diff --git a/ansible_collections/community/okd/plugins/module_utils/openshift_images_common.py b/ansible_collections/community/okd/plugins/module_utils/openshift_images_common.py
index 67d7123e8..8978a93b0 100644
--- a/ansible_collections/community/okd/plugins/module_utils/openshift_images_common.py
+++ b/ansible_collections/community/okd/plugins/module_utils/openshift_images_common.py
@@ -1,6 +1,7 @@
#!/usr/bin/env python
-from __future__ import (absolute_import, division, print_function)
+from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
from datetime import datetime
@@ -17,9 +18,9 @@ def get_image_blobs(image):
return blobs, "failed to read metadata for image %s" % image["metadata"]["name"]
media_type_manifest = (
"application/vnd.docker.distribution.manifest.v2+json",
- "application/vnd.oci.image.manifest.v1+json"
+ "application/vnd.oci.image.manifest.v1+json",
)
- media_type_has_config = image['dockerImageManifestMediaType'] in media_type_manifest
+ media_type_has_config = image["dockerImageManifestMediaType"] in media_type_manifest
docker_image_id = docker_image_metadata.get("Id")
if media_type_has_config and docker_image_id and len(docker_image_id) > 0:
blobs.append(docker_image_id)
@@ -29,19 +30,18 @@ def get_image_blobs(image):
def is_created_after(creation_timestamp, max_creation_timestamp):
if not max_creation_timestamp:
return False
- creationTimestamp = datetime.strptime(creation_timestamp, '%Y-%m-%dT%H:%M:%SZ')
+ creationTimestamp = datetime.strptime(creation_timestamp, "%Y-%m-%dT%H:%M:%SZ")
return creationTimestamp > max_creation_timestamp
def is_too_young_object(obj, max_creation_timestamp):
- return is_created_after(obj['metadata']['creationTimestamp'],
- max_creation_timestamp)
+ return is_created_after(
+ obj["metadata"]["creationTimestamp"], max_creation_timestamp
+ )
class OpenShiftAnalyzeImageStream(object):
-
def __init__(self, ignore_invalid_refs, max_creation_timestamp, module):
-
self.max_creationTimestamp = max_creation_timestamp
self.used_tags = {}
self.used_images = {}
@@ -53,32 +53,34 @@ class OpenShiftAnalyzeImageStream(object):
if error:
return error
- if not result['hostname'] or not result['namespace']:
+ if not result["hostname"] or not result["namespace"]:
# image reference does not match hostname/namespace/name pattern - skipping
return None
- if not result['digest']:
+ if not result["digest"]:
# Attempt to dereference istag. Since we cannot be sure whether the reference refers to the
# integrated registry or not, we ignore the host part completely. As a consequence, we may keep
# image otherwise sentenced for a removal just because its pull spec accidentally matches one of
# our imagestreamtags.
# set the tag if empty
- if result['tag'] == "":
- result['tag'] = 'latest'
- key = "%s/%s:%s" % (result['namespace'], result['name'], result['tag'])
+ if result["tag"] == "":
+ result["tag"] = "latest"
+ key = "%s/%s:%s" % (result["namespace"], result["name"], result["tag"])
if key not in self.used_tags:
self.used_tags[key] = []
self.used_tags[key].append(referrer)
else:
- key = "%s/%s@%s" % (result['namespace'], result['name'], result['digest'])
+ key = "%s/%s@%s" % (result["namespace"], result["name"], result["digest"])
if key not in self.used_images:
self.used_images[key] = []
self.used_images[key].append(referrer)
def analyze_refs_from_pod_spec(self, podSpec, referrer):
- for container in podSpec.get('initContainers', []) + podSpec.get('containers', []):
- image = container.get('image')
+ for container in podSpec.get("initContainers", []) + podSpec.get(
+ "containers", []
+ ):
+ image = container.get("image")
if len(image.strip()) == 0:
# Ignoring container because it has no reference to image
continue
@@ -93,29 +95,35 @@ class OpenShiftAnalyzeImageStream(object):
# pending or running. Additionally, it has to be at least as old as the minimum
# age threshold defined by the algorithm.
too_young = is_too_young_object(pod, self.max_creationTimestamp)
- if pod['status']['phase'] not in ("Running", "Pending") and too_young:
+ if pod["status"]["phase"] not in ("Running", "Pending") and too_young:
continue
referrer = {
"kind": pod["kind"],
"namespace": pod["metadata"]["namespace"],
"name": pod["metadata"]["name"],
}
- err = self.analyze_refs_from_pod_spec(pod['spec'], referrer)
+ err = self.analyze_refs_from_pod_spec(pod["spec"], referrer)
if err:
return err
return None
def analyze_refs_pod_creators(self, resources):
keys = (
- "ReplicationController", "DeploymentConfig", "DaemonSet",
- "Deployment", "ReplicaSet", "StatefulSet", "Job", "CronJob"
+ "ReplicationController",
+ "DeploymentConfig",
+ "DaemonSet",
+ "Deployment",
+ "ReplicaSet",
+ "StatefulSet",
+ "Job",
+ "CronJob",
)
for k, objects in iteritems(resources):
if k not in keys:
continue
for obj in objects:
- if k == 'CronJob':
+ if k == "CronJob":
spec = obj["spec"]["jobTemplate"]["spec"]["template"]["spec"]
else:
spec = obj["spec"]["template"]["spec"]
@@ -132,64 +140,84 @@ class OpenShiftAnalyzeImageStream(object):
def analyze_refs_from_strategy(self, build_strategy, namespace, referrer):
# Determine 'from' reference
def _determine_source_strategy():
- for src in ('sourceStrategy', 'dockerStrategy', 'customStrategy'):
+ for src in ("sourceStrategy", "dockerStrategy", "customStrategy"):
strategy = build_strategy.get(src)
if strategy:
- return strategy.get('from')
+ return strategy.get("from")
return None
def _parse_image_stream_image_name(name):
- v = name.split('@')
+ v = name.split("@")
if len(v) != 2:
- return None, None, "expected exactly one @ in the isimage name %s" % name
+ return (
+ None,
+ None,
+ "expected exactly one @ in the isimage name %s" % name,
+ )
name = v[0]
tag = v[1]
if len(name) == 0 or len(tag) == 0:
- return None, None, "image stream image name %s must have a name and ID" % name
+ return (
+ None,
+ None,
+ "image stream image name %s must have a name and ID" % name,
+ )
return name, tag, None
def _parse_image_stream_tag_name(name):
if "@" in name:
- return None, None, "%s is an image stream image, not an image stream tag" % name
+ return (
+ None,
+ None,
+ "%s is an image stream image, not an image stream tag" % name,
+ )
v = name.split(":")
if len(v) != 2:
- return None, None, "expected exactly one : delimiter in the istag %s" % name
+ return (
+ None,
+ None,
+ "expected exactly one : delimiter in the istag %s" % name,
+ )
name = v[0]
tag = v[1]
if len(name) == 0 or len(tag) == 0:
- return None, None, "image stream tag name %s must have a name and a tag" % name
+ return (
+ None,
+ None,
+ "image stream tag name %s must have a name and a tag" % name,
+ )
return name, tag, None
from_strategy = _determine_source_strategy()
if from_strategy:
- if from_strategy.get('kind') == "DockerImage":
- docker_image_ref = from_strategy.get('name').strip()
+ if from_strategy.get("kind") == "DockerImage":
+ docker_image_ref = from_strategy.get("name").strip()
if len(docker_image_ref) > 0:
err = self.analyze_reference_image(docker_image_ref, referrer)
- elif from_strategy.get('kind') == "ImageStreamImage":
- name, tag, error = _parse_image_stream_image_name(from_strategy.get('name'))
+ elif from_strategy.get("kind") == "ImageStreamImage":
+ name, tag, error = _parse_image_stream_image_name(
+ from_strategy.get("name")
+ )
if error:
if not self.ignore_invalid_refs:
return error
else:
- namespace = from_strategy.get('namespace') or namespace
- self.used_images.append({
- 'namespace': namespace,
- 'name': name,
- 'tag': tag
- })
- elif from_strategy.get('kind') == "ImageStreamTag":
- name, tag, error = _parse_image_stream_tag_name(from_strategy.get('name'))
+ namespace = from_strategy.get("namespace") or namespace
+ self.used_images.append(
+ {"namespace": namespace, "name": name, "tag": tag}
+ )
+ elif from_strategy.get("kind") == "ImageStreamTag":
+ name, tag, error = _parse_image_stream_tag_name(
+ from_strategy.get("name")
+ )
if error:
if not self.ignore_invalid_refs:
return error
else:
- namespace = from_strategy.get('namespace') or namespace
- self.used_tags.append({
- 'namespace': namespace,
- 'name': name,
- 'tag': tag
- })
+ namespace = from_strategy.get("namespace") or namespace
+ self.used_tags.append(
+ {"namespace": namespace, "name": name, "tag": tag}
+ )
def analyze_refs_from_build_strategy(self, resources):
# Json Path is always spec.strategy
@@ -203,16 +231,20 @@ class OpenShiftAnalyzeImageStream(object):
"namespace": obj["metadata"]["namespace"],
"name": obj["metadata"]["name"],
}
- error = self.analyze_refs_from_strategy(obj['spec']['strategy'],
- obj['metadata']['namespace'],
- referrer)
+ error = self.analyze_refs_from_strategy(
+ obj["spec"]["strategy"], obj["metadata"]["namespace"], referrer
+ )
if error is not None:
- return "%s/%s/%s: %s" % (referrer["kind"], referrer["namespace"], referrer["name"], error)
+ return "%s/%s/%s: %s" % (
+ referrer["kind"],
+ referrer["namespace"],
+ referrer["name"],
+ error,
+ )
def analyze_image_stream(self, resources):
-
# Analyze image reference from Pods
- error = self.analyze_refs_from_pods(resources['Pod'])
+ error = self.analyze_refs_from_pods(resources["Pod"])
if error:
return None, None, error
diff --git a/ansible_collections/community/okd/plugins/module_utils/openshift_import_image.py b/ansible_collections/community/okd/plugins/module_utils/openshift_import_image.py
index 01bba82af..c9953d761 100644
--- a/ansible_collections/community/okd/plugins/module_utils/openshift_import_image.py
+++ b/ansible_collections/community/okd/plugins/module_utils/openshift_import_image.py
@@ -1,16 +1,17 @@
#!/usr/bin/env python
-from __future__ import (absolute_import, division, print_function)
+from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
-import traceback
import copy
-from ansible.module_utils._text import to_native
from ansible.module_utils.parsing.convert_bool import boolean
from ansible.module_utils.six import string_types
-from ansible_collections.community.okd.plugins.module_utils.openshift_common import AnsibleOpenshiftModule
+from ansible_collections.community.okd.plugins.module_utils.openshift_common import (
+ AnsibleOpenshiftModule,
+)
try:
from kubernetes.dynamic.exceptions import DynamicApiError
@@ -44,10 +45,17 @@ def follow_imagestream_tag_reference(stream, tag):
return name, tag, len(parts) == 2
content = []
- err_cross_stream_ref = "tag %s points to an imagestreamtag from another ImageStream" % tag
+ err_cross_stream_ref = (
+ "tag %s points to an imagestreamtag from another ImageStream" % tag
+ )
while True:
if tag in content:
- return tag, None, multiple, "tag %s on the image stream is a reference to same tag" % tag
+ return (
+ tag,
+ None,
+ multiple,
+ "tag %s on the image stream is a reference to same tag" % tag,
+ )
content.append(tag)
tag_ref = _imagestream_has_tag()
if not tag_ref:
@@ -56,7 +64,10 @@ def follow_imagestream_tag_reference(stream, tag):
if not tag_ref.get("from") or tag_ref["from"]["kind"] != "ImageStreamTag":
return tag, tag_ref, multiple, None
- if tag_ref["from"]["namespace"] != "" and tag_ref["from"]["namespace"] != stream["metadata"]["namespace"]:
+ if (
+ tag_ref["from"]["namespace"] != ""
+ and tag_ref["from"]["namespace"] != stream["metadata"]["namespace"]
+ ):
return tag, None, multiple, err_cross_stream_ref
# The reference needs to be followed with two format patterns:
@@ -64,7 +75,12 @@ def follow_imagestream_tag_reference(stream, tag):
if ":" in tag_ref["from"]["name"]:
name, tagref, result = _imagestream_split_tag(tag_ref["from"]["name"])
if not result:
- return tag, None, multiple, "tag %s points to an invalid imagestreamtag" % tag
+ return (
+ tag,
+ None,
+ multiple,
+ "tag %s points to an invalid imagestreamtag" % tag,
+ )
if name != stream["metadata"]["namespace"]:
# anotheris:sometag - this should not happen.
return tag, None, multiple, err_cross_stream_ref
@@ -80,7 +96,7 @@ class OpenShiftImportImage(AnsibleOpenshiftModule):
super(OpenShiftImportImage, self).__init__(**kwargs)
self._rest_client = None
- self.registryhost = self.params.get('registry_url')
+ self.registryhost = self.params.get("registry_url")
self.changed = False
ref_policy = self.params.get("reference_policy")
@@ -90,9 +106,7 @@ class OpenShiftImportImage(AnsibleOpenshiftModule):
elif ref_policy == "local":
ref_policy_type = "Local"
- self.ref_policy = {
- "type": ref_policy_type
- }
+ self.ref_policy = {"type": ref_policy_type}
self.validate_certs = self.params.get("validate_registry_certs")
self.cluster_resources = {}
@@ -104,15 +118,15 @@ class OpenShiftImportImage(AnsibleOpenshiftModule):
"metadata": {
"name": stream["metadata"]["name"],
"namespace": stream["metadata"]["namespace"],
- "resourceVersion": stream["metadata"].get("resourceVersion")
+ "resourceVersion": stream["metadata"].get("resourceVersion"),
},
- "spec": {
- "import": True
- }
+ "spec": {"import": True},
}
annotations = stream.get("annotations", {})
- insecure = boolean(annotations.get("openshift.io/image.insecureRepository", True))
+ insecure = boolean(
+ annotations.get("openshift.io/image.insecureRepository", True)
+ )
if self.validate_certs is not None:
insecure = not self.validate_certs
return isi, insecure
@@ -126,7 +140,7 @@ class OpenShiftImportImage(AnsibleOpenshiftModule):
},
"importPolicy": {
"insecure": insecure,
- "scheduled": self.params.get("scheduled")
+ "scheduled": self.params.get("scheduled"),
},
"referencePolicy": self.ref_policy,
}
@@ -149,26 +163,23 @@ class OpenShiftImportImage(AnsibleOpenshiftModule):
scheduled = scheduled or old_tag["importPolicy"].get("scheduled")
images = isi["spec"].get("images", [])
- images.append({
- "from": {
- "kind": "DockerImage",
- "name": tags.get(k),
- },
- "to": {
- "name": k
- },
- "importPolicy": {
- "insecure": insecure,
- "scheduled": scheduled
- },
- "referencePolicy": self.ref_policy,
- })
+ images.append(
+ {
+ "from": {
+ "kind": "DockerImage",
+ "name": tags.get(k),
+ },
+ "to": {"name": k},
+ "importPolicy": {"insecure": insecure, "scheduled": scheduled},
+ "referencePolicy": self.ref_policy,
+ }
+ )
isi["spec"]["images"] = images
return isi
def create_image_stream(self, ref):
"""
- Create new ImageStream and accompanying ImageStreamImport
+ Create new ImageStream and accompanying ImageStreamImport
"""
source = self.params.get("source")
if not source:
@@ -183,27 +194,20 @@ class OpenShiftImportImage(AnsibleOpenshiftModule):
),
)
if self.params.get("all") and not ref["tag"]:
- spec = dict(
- dockerImageRepository=source
- )
+ spec = dict(dockerImageRepository=source)
isi = self.create_image_stream_import_all(stream, source)
else:
spec = dict(
tags=[
{
- "from": {
- "kind": "DockerImage",
- "name": source
- },
- "referencePolicy": self.ref_policy
+ "from": {"kind": "DockerImage", "name": source},
+ "referencePolicy": self.ref_policy,
}
]
)
tags = {ref["tag"]: source}
isi = self.create_image_stream_import_tags(stream, tags)
- stream.update(
- dict(spec=spec)
- )
+ stream.update(dict(spec=spec))
return stream, isi
def import_all(self, istream):
@@ -220,8 +224,9 @@ class OpenShiftImportImage(AnsibleOpenshiftModule):
if t.get("from") and t["from"].get("kind") == "DockerImage":
tags[t.get("name")] = t["from"].get("name")
if tags == {}:
- msg = "image stream %s/%s does not have tags pointing to external container images" % (
- stream["metadata"]["namespace"], stream["metadata"]["name"]
+ msg = (
+ "image stream %s/%s does not have tags pointing to external container images"
+ % (stream["metadata"]["namespace"], stream["metadata"]["name"])
)
self.fail_json(msg=msg)
isi = self.create_image_stream_import_tags(stream, tags)
@@ -236,7 +241,9 @@ class OpenShiftImportImage(AnsibleOpenshiftModule):
source = self.params.get("source")
# Follow any referential tags to the destination
- final_tag, existing, multiple, err = follow_imagestream_tag_reference(stream, tag)
+ final_tag, existing, multiple, err = follow_imagestream_tag_reference(
+ stream, tag
+ )
if err:
if err == err_stream_not_found_ref:
# Create a new tag
@@ -245,7 +252,10 @@ class OpenShiftImportImage(AnsibleOpenshiftModule):
# if the from is still empty this means there's no such tag defined
# nor we can't create any from .spec.dockerImageRepository
if not source:
- msg = "the tag %s does not exist on the image stream - choose an existing tag to import" % tag
+ msg = (
+ "the tag %s does not exist on the image stream - choose an existing tag to import"
+ % tag
+ )
self.fail_json(msg=msg)
existing = {
"from": {
@@ -257,13 +267,21 @@ class OpenShiftImportImage(AnsibleOpenshiftModule):
self.fail_json(msg=err)
else:
# Disallow re-importing anything other than DockerImage
- if existing.get("from", {}) and existing["from"].get("kind") != "DockerImage":
+ if (
+ existing.get("from", {})
+ and existing["from"].get("kind") != "DockerImage"
+ ):
msg = "tag {tag} points to existing {kind}/={name}, it cannot be re-imported.".format(
- tag=tag, kind=existing["from"]["kind"], name=existing["from"]["name"]
+ tag=tag,
+ kind=existing["from"]["kind"],
+ name=existing["from"]["name"],
)
# disallow changing an existing tag
if not existing.get("from", {}):
- msg = "tag %s already exists - you cannot change the source using this module." % tag
+ msg = (
+ "tag %s already exists - you cannot change the source using this module."
+ % tag
+ )
self.fail_json(msg=msg)
if source and source != existing["from"]["name"]:
if multiple:
@@ -271,7 +289,10 @@ class OpenShiftImportImage(AnsibleOpenshiftModule):
tag, final_tag, existing["from"]["name"]
)
else:
- msg = "the tag %s points to %s you cannot change the source using this module." % (tag, final_tag)
+ msg = (
+ "the tag %s points to %s you cannot change the source using this module."
+ % (tag, final_tag)
+ )
self.fail_json(msg=msg)
# Set the target item to import
@@ -309,13 +330,13 @@ class OpenShiftImportImage(AnsibleOpenshiftModule):
kind=kind,
api_version=api_version,
name=ref.get("name"),
- namespace=self.params.get("namespace")
+ namespace=self.params.get("namespace"),
)
result = self.kubernetes_facts(**params)
if not result["api_found"]:
msg = 'Failed to find API for resource with apiVersion "{0}" and kind "{1}"'.format(
api_version, kind
- ),
+ )
self.fail_json(msg=msg)
imagestream = None
if len(result["resources"]) > 0:
@@ -335,7 +356,9 @@ class OpenShiftImportImage(AnsibleOpenshiftModule):
def parse_image_reference(self, image_ref):
result, err = parse_docker_image_ref(image_ref, self.module)
if result.get("digest"):
- self.fail_json(msg="Cannot import by ID, error with definition: %s" % image_ref)
+ self.fail_json(
+ msg="Cannot import by ID, error with definition: %s" % image_ref
+ )
tag = result.get("tag") or None
if not self.params.get("all") and not tag:
tag = "latest"
@@ -345,7 +368,6 @@ class OpenShiftImportImage(AnsibleOpenshiftModule):
return dict(name=result.get("name"), tag=tag, source=image_ref)
def execute_module(self):
-
names = []
name = self.params.get("name")
if isinstance(name, string_types):
diff --git a/ansible_collections/community/okd/plugins/module_utils/openshift_ldap.py b/ansible_collections/community/okd/plugins/module_utils/openshift_ldap.py
index bb9229a72..cb1977489 100644
--- a/ansible_collections/community/okd/plugins/module_utils/openshift_ldap.py
+++ b/ansible_collections/community/okd/plugins/module_utils/openshift_ldap.py
@@ -3,7 +3,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)
+from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
@@ -24,109 +25,119 @@ LDAP_SEARCH_OUT_OF_SCOPE_ERROR = "trying to search by DN for an entry that exist
def validate_ldap_sync_config(config):
# Validate url
- url = config.get('url')
+ url = config.get("url")
if not url:
return "url should be non empty attribute."
# Make sure bindDN and bindPassword are both set, or both unset
- bind_dn = config.get('bindDN', "")
- bind_password = config.get('bindPassword', "")
+ bind_dn = config.get("bindDN", "")
+ bind_password = config.get("bindPassword", "")
if (len(bind_dn) == 0) != (len(bind_password) == 0):
return "bindDN and bindPassword must both be specified, or both be empty."
- insecure = boolean(config.get('insecure'))
- ca_file = config.get('ca')
+ insecure = boolean(config.get("insecure"))
+ ca_file = config.get("ca")
if insecure:
- if url.startswith('ldaps://'):
+ if url.startswith("ldaps://"):
return "Cannot use ldaps scheme with insecure=true."
if ca_file:
return "Cannot specify a ca with insecure=true."
elif ca_file and not os.path.isfile(ca_file):
return "could not read ca file: {0}.".format(ca_file)
- nameMapping = config.get('groupUIDNameMapping', {})
+ nameMapping = config.get("groupUIDNameMapping", {})
for k, v in iteritems(nameMapping):
if len(k) == 0 or len(v) == 0:
return "groupUIDNameMapping has empty key or value"
schemas = []
- schema_list = ('rfc2307', 'activeDirectory', 'augmentedActiveDirectory')
+ schema_list = ("rfc2307", "activeDirectory", "augmentedActiveDirectory")
for schema in schema_list:
if schema in config:
schemas.append(schema)
if len(schemas) == 0:
- return "No schema-specific config was provided, should be one of %s" % ", ".join(schema_list)
+ return (
+ "No schema-specific config was provided, should be one of %s"
+ % ", ".join(schema_list)
+ )
if len(schemas) > 1:
- return "Exactly one schema-specific config is required; found (%d) %s" % (len(schemas), ','.join(schemas))
+ return "Exactly one schema-specific config is required; found (%d) %s" % (
+ len(schemas),
+ ",".join(schemas),
+ )
- if schemas[0] == 'rfc2307':
+ if schemas[0] == "rfc2307":
return validate_RFC2307(config.get("rfc2307"))
- elif schemas[0] == 'activeDirectory':
+ elif schemas[0] == "activeDirectory":
return validate_ActiveDirectory(config.get("activeDirectory"))
- elif schemas[0] == 'augmentedActiveDirectory':
+ elif schemas[0] == "augmentedActiveDirectory":
return validate_AugmentedActiveDirectory(config.get("augmentedActiveDirectory"))
def validate_ldap_query(qry, isDNOnly=False):
-
# validate query scope
- scope = qry.get('scope')
+ scope = qry.get("scope")
if scope and scope not in ("", "sub", "one", "base"):
return "invalid scope %s" % scope
# validate deref aliases
- derefAlias = qry.get('derefAliases')
+ derefAlias = qry.get("derefAliases")
if derefAlias and derefAlias not in ("never", "search", "base", "always"):
return "not a valid LDAP alias dereferncing behavior: %s", derefAlias
# validate timeout
- timeout = qry.get('timeout')
+ timeout = qry.get("timeout")
if timeout and float(timeout) < 0:
return "timeout must be equal to or greater than zero"
# Validate DN only
- qry_filter = qry.get('filter', "")
+ qry_filter = qry.get("filter", "")
if isDNOnly:
if len(qry_filter) > 0:
return 'cannot specify a filter when using "dn" as the UID attribute'
else:
# validate filter
- if len(qry_filter) == 0 or qry_filter[0] != '(':
+ if len(qry_filter) == 0 or qry_filter[0] != "(":
return "filter does not start with an '('"
return None
def validate_RFC2307(config):
- qry = config.get('groupsQuery')
+ qry = config.get("groupsQuery")
if not qry or not isinstance(qry, dict):
return "RFC2307: groupsQuery requires a dictionary"
error = validate_ldap_query(qry)
if not error:
return error
- for field in ('groupUIDAttribute', 'groupNameAttributes', 'groupMembershipAttributes',
- 'userUIDAttribute', 'userNameAttributes'):
+ for field in (
+ "groupUIDAttribute",
+ "groupNameAttributes",
+ "groupMembershipAttributes",
+ "userUIDAttribute",
+ "userNameAttributes",
+ ):
value = config.get(field)
if not value:
return "RFC2307: {0} is required.".format(field)
- users_qry = config.get('usersQuery')
+ users_qry = config.get("usersQuery")
if not users_qry or not isinstance(users_qry, dict):
return "RFC2307: usersQuery requires a dictionary"
- isUserDNOnly = (config.get('userUIDAttribute').strip() == 'dn')
+ isUserDNOnly = config.get("userUIDAttribute").strip() == "dn"
return validate_ldap_query(users_qry, isDNOnly=isUserDNOnly)
def validate_ActiveDirectory(config, label="ActiveDirectory"):
- users_qry = config.get('usersQuery')
+ users_qry = config.get("usersQuery")
if not users_qry or not isinstance(users_qry, dict):
return "{0}: usersQuery requires as dictionnary".format(label)
error = validate_ldap_query(users_qry)
if not error:
return error
- for field in ('userNameAttributes', 'groupMembershipAttributes'):
+ for field in ("userNameAttributes", "groupMembershipAttributes"):
value = config.get(field)
if not value:
return "{0}: {1} is required.".format(field, label)
@@ -138,24 +149,24 @@ def validate_AugmentedActiveDirectory(config):
error = validate_ActiveDirectory(config, label="AugmentedActiveDirectory")
if not error:
return error
- for field in ('groupUIDAttribute', 'groupNameAttributes'):
+ for field in ("groupUIDAttribute", "groupNameAttributes"):
value = config.get(field)
if not value:
return "AugmentedActiveDirectory: {0} is required".format(field)
- groups_qry = config.get('groupsQuery')
+ groups_qry = config.get("groupsQuery")
if not groups_qry or not isinstance(groups_qry, dict):
return "AugmentedActiveDirectory: groupsQuery requires as dictionnary."
- isGroupDNOnly = (config.get('groupUIDAttribute').strip() == 'dn')
+ isGroupDNOnly = config.get("groupUIDAttribute").strip() == "dn"
return validate_ldap_query(groups_qry, isDNOnly=isGroupDNOnly)
def determine_ldap_scope(scope):
if scope in ("", "sub"):
return ldap.SCOPE_SUBTREE
- elif scope == 'base':
+ elif scope == "base":
return ldap.SCOPE_BASE
- elif scope == 'one':
+ elif scope == "one":
return ldap.SCOPE_ONELEVEL
return None
@@ -175,28 +186,28 @@ def determine_deref_aliases(derefAlias):
def openshift_ldap_build_base_query(config):
qry = {}
- if config.get('baseDN'):
- qry['base'] = config.get('baseDN')
+ if config.get("baseDN"):
+ qry["base"] = config.get("baseDN")
- scope = determine_ldap_scope(config.get('scope'))
+ scope = determine_ldap_scope(config.get("scope"))
if scope:
- qry['scope'] = scope
+ qry["scope"] = scope
- pageSize = config.get('pageSize')
+ pageSize = config.get("pageSize")
if pageSize and int(pageSize) > 0:
- qry['sizelimit'] = int(pageSize)
+ qry["sizelimit"] = int(pageSize)
- timeout = config.get('timeout')
+ timeout = config.get("timeout")
if timeout and int(timeout) > 0:
- qry['timeout'] = int(timeout)
+ qry["timeout"] = int(timeout)
- filter = config.get('filter')
+ filter = config.get("filter")
if filter:
- qry['filterstr'] = filter
+ qry["filterstr"] = filter
- derefAlias = determine_deref_aliases(config.get('derefAliases'))
+ derefAlias = determine_deref_aliases(config.get("derefAliases"))
if derefAlias:
- qry['derefAlias'] = derefAlias
+ qry["derefAlias"] = derefAlias
return qry
@@ -205,32 +216,30 @@ def openshift_ldap_get_attribute_for_entry(entry, attribute):
if isinstance(attribute, list):
attributes = attribute
for k in attributes:
- if k.lower() == 'dn':
+ if k.lower() == "dn":
return entry[0]
v = entry[1].get(k, None)
if v:
if isinstance(v, list):
result = []
for x in v:
- if hasattr(x, 'decode'):
- result.append(x.decode('utf-8'))
+ if hasattr(x, "decode"):
+ result.append(x.decode("utf-8"))
else:
result.append(x)
return result
else:
- return v.decode('utf-8') if hasattr(v, 'decode') else v
+ return v.decode("utf-8") if hasattr(v, "decode") else v
return ""
def ldap_split_host_port(hostport):
"""
- ldap_split_host_port splits a network address of the form "host:port",
- "host%zone:port", "[host]:port" or "[host%zone]:port" into host or
- host%zone and port.
+ ldap_split_host_port splits a network address of the form "host:port",
+ "host%zone:port", "[host]:port" or "[host%zone]:port" into host or
+ host%zone and port.
"""
- result = dict(
- scheme=None, netlocation=None, host=None, port=None
- )
+ result = dict(scheme=None, netlocation=None, host=None, port=None)
if not hostport:
return result, None
@@ -240,10 +249,10 @@ def ldap_split_host_port(hostport):
if "://" in hostport:
idx = hostport.find(scheme_l)
result["scheme"] = hostport[:idx]
- netlocation = hostport[idx + len(scheme_l):]
+ netlocation = hostport[idx + len(scheme_l):] # fmt: skip
result["netlocation"] = netlocation
- if netlocation[-1] == ']':
+ if netlocation[-1] == "]":
# ipv6 literal (with no port)
result["host"] = netlocation
@@ -259,21 +268,32 @@ def ldap_split_host_port(hostport):
def openshift_ldap_query_for_entries(connection, qry, unique_entry=True):
# set deref alias (TODO: need to set a default value to reset for each transaction)
- derefAlias = qry.pop('derefAlias', None)
+ derefAlias = qry.pop("derefAlias", None)
if derefAlias:
ldap.set_option(ldap.OPT_DEREF, derefAlias)
try:
result = connection.search_ext_s(**qry)
if not result or len(result) == 0:
- return None, "Entry not found for base='{0}' and filter='{1}'".format(qry['base'], qry['filterstr'])
+ return None, "Entry not found for base='{0}' and filter='{1}'".format(
+ qry["base"], qry["filterstr"]
+ )
if len(result) > 1 and unique_entry:
- if qry.get('scope') == ldap.SCOPE_BASE:
- return None, "multiple entries found matching dn={0}: {1}".format(qry['base'], result)
+ if qry.get("scope") == ldap.SCOPE_BASE:
+ return None, "multiple entries found matching dn={0}: {1}".format(
+ qry["base"], result
+ )
else:
- return None, "multiple entries found matching filter {0}: {1}".format(qry['filterstr'], result)
+ return None, "multiple entries found matching filter {0}: {1}".format(
+ qry["filterstr"], result
+ )
return result, None
except ldap.NO_SUCH_OBJECT:
- return None, "search for entry with base dn='{0}' refers to a non-existent entry".format(qry['base'])
+ return (
+ None,
+ "search for entry with base dn='{0}' refers to a non-existent entry".format(
+ qry["base"]
+ ),
+ )
def openshift_equal_dn_objects(dn_obj, other_dn_obj):
@@ -303,7 +323,9 @@ def openshift_ancestorof_dn(dn, other):
if len(dn_obj) >= len(other_dn_obj):
return False
# Take the last attribute from the other DN to compare against
- return openshift_equal_dn_objects(dn_obj, other_dn_obj[len(other_dn_obj) - len(dn_obj):])
+ return openshift_equal_dn_objects(
+ dn_obj, other_dn_obj[len(other_dn_obj) - len(dn_obj):] # fmt: skip
+ )
class OpenshiftLDAPQueryOnAttribute(object):
@@ -324,33 +346,38 @@ class OpenshiftLDAPQueryOnAttribute(object):
output = []
hex_string = "0123456789abcdef"
for c in buffer:
- if ord(c) > 0x7f or c in ('(', ')', '\\', '*') or c == 0:
+ if ord(c) > 0x7F or c in ("(", ")", "\\", "*") or c == 0:
first = ord(c) >> 4
- second = ord(c) & 0xf
- output += ['\\', hex_string[first], hex_string[second]]
+ second = ord(c) & 0xF
+ output += ["\\", hex_string[first], hex_string[second]]
else:
output.append(c)
- return ''.join(output)
+ return "".join(output)
def build_request(self, ldapuid, attributes):
params = copy.deepcopy(self.qry)
- if self.query_attribute.lower() == 'dn':
+ if self.query_attribute.lower() == "dn":
if ldapuid:
- if not openshift_equal_dn(ldapuid, params['base']) and not openshift_ancestorof_dn(params['base'], ldapuid):
+ if not openshift_equal_dn(
+ ldapuid, params["base"]
+ ) and not openshift_ancestorof_dn(params["base"], ldapuid):
return None, LDAP_SEARCH_OUT_OF_SCOPE_ERROR
- params['base'] = ldapuid
- params['scope'] = ldap.SCOPE_BASE
+ params["base"] = ldapuid
+ params["scope"] = ldap.SCOPE_BASE
# filter that returns all values
- params['filterstr'] = "(objectClass=*)"
- params['attrlist'] = attributes
+ params["filterstr"] = "(objectClass=*)"
+ params["attrlist"] = attributes
else:
# Builds the query containing a filter that conjoins the common filter given
# in the configuration with the specific attribute filter for which the attribute value is given
- specificFilter = "%s=%s" % (self.escape_filter(self.query_attribute), self.escape_filter(ldapuid))
- qry_filter = params.get('filterstr', None)
+ specificFilter = "%s=%s" % (
+ self.escape_filter(self.query_attribute),
+ self.escape_filter(ldapuid),
+ )
+ qry_filter = params.get("filterstr", None)
if qry_filter:
- params['filterstr'] = "(&%s(%s))" % (qry_filter, specificFilter)
- params['attrlist'] = attributes
+ params["filterstr"] = "(&%s(%s))" % (qry_filter, specificFilter)
+ params["attrlist"] = attributes
return params, None
def ldap_search(self, connection, ldapuid, required_attributes, unique_entry=True):
@@ -358,21 +385,29 @@ class OpenshiftLDAPQueryOnAttribute(object):
if error:
return None, error
# set deref alias (TODO: need to set a default value to reset for each transaction)
- derefAlias = query.pop('derefAlias', None)
+ derefAlias = query.pop("derefAlias", None)
if derefAlias:
ldap.set_option(ldap.OPT_DEREF, derefAlias)
try:
result = connection.search_ext_s(**query)
if not result or len(result) == 0:
- return None, "Entry not found for base='{0}' and filter='{1}'".format(query['base'], query['filterstr'])
+ return None, "Entry not found for base='{0}' and filter='{1}'".format(
+ query["base"], query["filterstr"]
+ )
if unique_entry:
if len(result) > 1:
- return None, "Multiple Entries found matching search criteria: %s (%s)" % (query, result)
+ return (
+ None,
+ "Multiple Entries found matching search criteria: %s (%s)"
+ % (query, result),
+ )
result = result[0]
return result, None
except ldap.NO_SUCH_OBJECT:
- return None, "Entry not found for base='{0}' and filter='{1}'".format(query['base'], query['filterstr'])
+ return None, "Entry not found for base='{0}' and filter='{1}'".format(
+ query["base"], query["filterstr"]
+ )
except Exception as err:
return None, "Request %s failed due to: %s" % (query, err)
@@ -384,30 +419,43 @@ class OpenshiftLDAPQuery(object):
def build_request(self, attributes):
params = copy.deepcopy(self.qry)
- params['attrlist'] = attributes
+ params["attrlist"] = attributes
return params
def ldap_search(self, connection, required_attributes):
query = self.build_request(required_attributes)
# set deref alias (TODO: need to set a default value to reset for each transaction)
- derefAlias = query.pop('derefAlias', None)
+ derefAlias = query.pop("derefAlias", None)
if derefAlias:
ldap.set_option(ldap.OPT_DEREF, derefAlias)
try:
result = connection.search_ext_s(**query)
if not result or len(result) == 0:
- return None, "Entry not found for base='{0}' and filter='{1}'".format(query['base'], query['filterstr'])
+ return None, "Entry not found for base='{0}' and filter='{1}'".format(
+ query["base"], query["filterstr"]
+ )
return result, None
except ldap.NO_SUCH_OBJECT:
- return None, "search for entry with base dn='{0}' refers to a non-existent entry".format(query['base'])
+ return (
+ None,
+ "search for entry with base dn='{0}' refers to a non-existent entry".format(
+ query["base"]
+ ),
+ )
class OpenshiftLDAPInterface(object):
-
- def __init__(self, connection, groupQuery, groupNameAttributes, groupMembershipAttributes,
- userQuery, userNameAttributes, config):
-
+ def __init__(
+ self,
+ connection,
+ groupQuery,
+ groupNameAttributes,
+ groupMembershipAttributes,
+ userQuery,
+ userNameAttributes,
+ config,
+ ):
self.connection = connection
self.groupQuery = copy.deepcopy(groupQuery)
self.groupNameAttributes = groupNameAttributes
@@ -416,8 +464,12 @@ class OpenshiftLDAPInterface(object):
self.userNameAttributes = userNameAttributes
self.config = config
- self.tolerate_not_found = boolean(config.get('tolerateMemberNotFoundErrors', False))
- self.tolerate_out_of_scope = boolean(config.get('tolerateMemberOutOfScopeErrors', False))
+ self.tolerate_not_found = boolean(
+ config.get("tolerateMemberNotFoundErrors", False)
+ )
+ self.tolerate_out_of_scope = boolean(
+ config.get("tolerateMemberOutOfScopeErrors", False)
+ )
self.required_group_attributes = [self.groupQuery.query_attribute]
for x in self.groupNameAttributes + self.groupMembershipAttributes:
@@ -434,13 +486,15 @@ class OpenshiftLDAPInterface(object):
def get_group_entry(self, uid):
"""
- get_group_entry returns an LDAP group entry for the given group UID by searching the internal cache
- of the LDAPInterface first, then sending an LDAP query if the cache did not contain the entry.
+ get_group_entry returns an LDAP group entry for the given group UID by searching the internal cache
+ of the LDAPInterface first, then sending an LDAP query if the cache did not contain the entry.
"""
if uid in self.cached_groups:
return self.cached_groups.get(uid), None
- group, err = self.groupQuery.ldap_search(self.connection, uid, self.required_group_attributes)
+ group, err = self.groupQuery.ldap_search(
+ self.connection, uid, self.required_group_attributes
+ )
if err:
return None, err
self.cached_groups[uid] = group
@@ -448,13 +502,15 @@ class OpenshiftLDAPInterface(object):
def get_user_entry(self, uid):
"""
- get_user_entry returns an LDAP group entry for the given user UID by searching the internal cache
- of the LDAPInterface first, then sending an LDAP query if the cache did not contain the entry.
+ get_user_entry returns an LDAP group entry for the given user UID by searching the internal cache
+ of the LDAPInterface first, then sending an LDAP query if the cache did not contain the entry.
"""
if uid in self.cached_users:
return self.cached_users.get(uid), None
- entry, err = self.userQuery.ldap_search(self.connection, uid, self.required_user_attributes)
+ entry, err = self.userQuery.ldap_search(
+ self.connection, uid, self.required_user_attributes
+ )
if err:
return None, err
self.cached_users[uid] = entry
@@ -466,19 +522,19 @@ class OpenshiftLDAPInterface(object):
def list_groups(self):
group_qry = copy.deepcopy(self.groupQuery.qry)
- group_qry['attrlist'] = self.required_group_attributes
+ group_qry["attrlist"] = self.required_group_attributes
groups, err = openshift_ldap_query_for_entries(
- connection=self.connection,
- qry=group_qry,
- unique_entry=False
+ connection=self.connection, qry=group_qry, unique_entry=False
)
if err:
return None, err
group_uids = []
for entry in groups:
- uid = openshift_ldap_get_attribute_for_entry(entry, self.groupQuery.query_attribute)
+ uid = openshift_ldap_get_attribute_for_entry(
+ entry, self.groupQuery.query_attribute
+ )
if not uid:
return None, "Unable to find LDAP group uid for entry %s" % entry
self.cached_groups[uid] = entry
@@ -487,7 +543,7 @@ class OpenshiftLDAPInterface(object):
def extract_members(self, uid):
"""
- returns the LDAP member entries for a group specified with a ldapGroupUID
+ returns the LDAP member entries for a group specified with a ldapGroupUID
"""
# Get group entry from LDAP
group, err = self.get_group_entry(uid)
@@ -514,39 +570,46 @@ class OpenshiftLDAPInterface(object):
class OpenshiftLDAPRFC2307(object):
-
def __init__(self, config, ldap_connection):
-
self.config = config
self.ldap_interface = self.create_ldap_interface(ldap_connection)
def create_ldap_interface(self, connection):
segment = self.config.get("rfc2307")
- groups_base_qry = openshift_ldap_build_base_query(segment['groupsQuery'])
- users_base_qry = openshift_ldap_build_base_query(segment['usersQuery'])
+ groups_base_qry = openshift_ldap_build_base_query(segment["groupsQuery"])
+ users_base_qry = openshift_ldap_build_base_query(segment["usersQuery"])
- groups_query = OpenshiftLDAPQueryOnAttribute(groups_base_qry, segment['groupUIDAttribute'])
- users_query = OpenshiftLDAPQueryOnAttribute(users_base_qry, segment['userUIDAttribute'])
+ groups_query = OpenshiftLDAPQueryOnAttribute(
+ groups_base_qry, segment["groupUIDAttribute"]
+ )
+ users_query = OpenshiftLDAPQueryOnAttribute(
+ users_base_qry, segment["userUIDAttribute"]
+ )
params = dict(
connection=connection,
groupQuery=groups_query,
- groupNameAttributes=segment['groupNameAttributes'],
- groupMembershipAttributes=segment['groupMembershipAttributes'],
+ groupNameAttributes=segment["groupNameAttributes"],
+ groupMembershipAttributes=segment["groupMembershipAttributes"],
userQuery=users_query,
- userNameAttributes=segment['userNameAttributes'],
- config=segment
+ userNameAttributes=segment["userNameAttributes"],
+ config=segment,
)
return OpenshiftLDAPInterface(**params)
def get_username_for_entry(self, entry):
- username = openshift_ldap_get_attribute_for_entry(entry, self.ldap_interface.userNameAttributes)
+ username = openshift_ldap_get_attribute_for_entry(
+ entry, self.ldap_interface.userNameAttributes
+ )
if not username:
- return None, "The user entry (%s) does not map to a OpenShift User name with the given mapping" % entry
+ return (
+ None,
+ "The user entry (%s) does not map to a OpenShift User name with the given mapping"
+ % entry,
+ )
return username, None
def get_group_name_for_uid(self, uid):
-
# Get name from User defined mapping
groupuid_name_mapping = self.config.get("groupUIDNameMapping")
if groupuid_name_mapping and uid in groupuid_name_mapping:
@@ -555,10 +618,13 @@ class OpenshiftLDAPRFC2307(object):
group, err = self.ldap_interface.get_group_entry(uid)
if err:
return None, err
- group_name = openshift_ldap_get_attribute_for_entry(group, self.ldap_interface.groupNameAttributes)
+ group_name = openshift_ldap_get_attribute_for_entry(
+ group, self.ldap_interface.groupNameAttributes
+ )
if not group_name:
- error = "The group entry (%s) does not map to an OpenShift Group name with the given name attribute (%s)" % (
- group, self.ldap_interface.groupNameAttributes
+ error = (
+ "The group entry (%s) does not map to an OpenShift Group name with the given name attribute (%s)"
+ % (group, self.ldap_interface.groupNameAttributes)
)
return None, error
if isinstance(group_name, list):
@@ -570,7 +636,11 @@ class OpenshiftLDAPRFC2307(object):
def is_ldapgroup_exists(self, uid):
group, err = self.ldap_interface.get_group_entry(uid)
if err:
- if err == LDAP_SEARCH_OUT_OF_SCOPE_ERROR or err.startswith("Entry not found") or "non-existent entry" in err:
+ if (
+ err == LDAP_SEARCH_OUT_OF_SCOPE_ERROR
+ or err.startswith("Entry not found")
+ or "non-existent entry" in err
+ ):
return False, None
return False, err
if group:
@@ -585,7 +655,6 @@ class OpenshiftLDAPRFC2307(object):
class OpenshiftLDAP_ADInterface(object):
-
def __init__(self, connection, user_query, group_member_attr, user_name_attr):
self.connection = connection
self.userQuery = user_query
@@ -609,7 +678,9 @@ class OpenshiftLDAP_ADInterface(object):
def populate_cache(self):
if not self.cache_populated:
self.cache_populated = True
- entries, err = self.userQuery.ldap_search(self.connection, self.required_user_attributes)
+ entries, err = self.userQuery.ldap_search(
+ self.connection, self.required_user_attributes
+ )
if err:
return err
@@ -645,7 +716,9 @@ class OpenshiftLDAP_ADInterface(object):
users_in_group = []
for attr in self.groupMembershipAttributes:
query_on_attribute = OpenshiftLDAPQueryOnAttribute(self.userQuery.qry, attr)
- entries, error = query_on_attribute.ldap_search(self.connection, uid, self.required_user_attributes, unique_entry=False)
+ entries, error = query_on_attribute.ldap_search(
+ self.connection, uid, self.required_user_attributes, unique_entry=False
+ )
if error and "not found" not in error:
return None, error
if not entries:
@@ -660,15 +733,13 @@ class OpenshiftLDAP_ADInterface(object):
class OpenshiftLDAPActiveDirectory(object):
-
def __init__(self, config, ldap_connection):
-
self.config = config
self.ldap_interface = self.create_ldap_interface(ldap_connection)
def create_ldap_interface(self, connection):
segment = self.config.get("activeDirectory")
- base_query = openshift_ldap_build_base_query(segment['usersQuery'])
+ base_query = openshift_ldap_build_base_query(segment["usersQuery"])
user_query = OpenshiftLDAPQuery(base_query)
return OpenshiftLDAP_ADInterface(
@@ -679,9 +750,15 @@ class OpenshiftLDAPActiveDirectory(object):
)
def get_username_for_entry(self, entry):
- username = openshift_ldap_get_attribute_for_entry(entry, self.ldap_interface.userNameAttributes)
+ username = openshift_ldap_get_attribute_for_entry(
+ entry, self.ldap_interface.userNameAttributes
+ )
if not username:
- return None, "The user entry (%s) does not map to a OpenShift User name with the given mapping" % entry
+ return (
+ None,
+ "The user entry (%s) does not map to a OpenShift User name with the given mapping"
+ % entry,
+ )
return username, None
def get_group_name_for_uid(self, uid):
@@ -702,8 +779,15 @@ class OpenshiftLDAPActiveDirectory(object):
class OpenshiftLDAP_AugmentedADInterface(OpenshiftLDAP_ADInterface):
-
- def __init__(self, connection, user_query, group_member_attr, user_name_attr, group_qry, group_name_attr):
+ def __init__(
+ self,
+ connection,
+ user_query,
+ group_member_attr,
+ user_name_attr,
+ group_qry,
+ group_name_attr,
+ ):
super(OpenshiftLDAP_AugmentedADInterface, self).__init__(
connection, user_query, group_member_attr, user_name_attr
)
@@ -719,13 +803,15 @@ class OpenshiftLDAP_AugmentedADInterface(OpenshiftLDAP_ADInterface):
def get_group_entry(self, uid):
"""
- get_group_entry returns an LDAP group entry for the given group UID by searching the internal cache
- of the LDAPInterface first, then sending an LDAP query if the cache did not contain the entry.
+ get_group_entry returns an LDAP group entry for the given group UID by searching the internal cache
+ of the LDAPInterface first, then sending an LDAP query if the cache did not contain the entry.
"""
if uid in self.cached_groups:
return self.cached_groups.get(uid), None
- group, err = self.groupQuery.ldap_search(self.connection, uid, self.required_group_attributes)
+ group, err = self.groupQuery.ldap_search(
+ self.connection, uid, self.required_group_attributes
+ )
if err:
return None, err
self.cached_groups[uid] = group
@@ -750,19 +836,19 @@ class OpenshiftLDAP_AugmentedADInterface(OpenshiftLDAP_ADInterface):
class OpenshiftLDAPAugmentedActiveDirectory(OpenshiftLDAPRFC2307):
-
def __init__(self, config, ldap_connection):
-
self.config = config
self.ldap_interface = self.create_ldap_interface(ldap_connection)
def create_ldap_interface(self, connection):
segment = self.config.get("augmentedActiveDirectory")
- user_base_query = openshift_ldap_build_base_query(segment['usersQuery'])
- groups_base_qry = openshift_ldap_build_base_query(segment['groupsQuery'])
+ user_base_query = openshift_ldap_build_base_query(segment["usersQuery"])
+ groups_base_qry = openshift_ldap_build_base_query(segment["groupsQuery"])
user_query = OpenshiftLDAPQuery(user_base_query)
- groups_query = OpenshiftLDAPQueryOnAttribute(groups_base_qry, segment['groupUIDAttribute'])
+ groups_query = OpenshiftLDAPQueryOnAttribute(
+ groups_base_qry, segment["groupUIDAttribute"]
+ )
return OpenshiftLDAP_AugmentedADInterface(
connection=connection,
@@ -770,7 +856,7 @@ class OpenshiftLDAPAugmentedActiveDirectory(OpenshiftLDAPRFC2307):
group_member_attr=segment["groupMembershipAttributes"],
user_name_attr=segment["userNameAttributes"],
group_qry=groups_query,
- group_name_attr=segment["groupNameAttributes"]
+ group_name_attr=segment["groupNameAttributes"],
)
def is_ldapgroup_exists(self, uid):
diff --git a/ansible_collections/community/okd/plugins/module_utils/openshift_process.py b/ansible_collections/community/okd/plugins/module_utils/openshift_process.py
index 6fa69d13c..3996aedc2 100644
--- a/ansible_collections/community/okd/plugins/module_utils/openshift_process.py
+++ b/ansible_collections/community/okd/plugins/module_utils/openshift_process.py
@@ -1,15 +1,16 @@
#!/usr/bin/env python
-from __future__ import (absolute_import, division, print_function)
+from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
import os
-import traceback
from ansible.module_utils._text import to_native
-
-from ansible_collections.community.okd.plugins.module_utils.openshift_common import AnsibleOpenshiftModule
+from ansible_collections.community.okd.plugins.module_utils.openshift_common import (
+ AnsibleOpenshiftModule,
+)
try:
from kubernetes.dynamic.exceptions import DynamicApiError
@@ -124,7 +125,6 @@ class OpenShiftProcess(AnsibleOpenshiftModule):
self.exit_json(**result)
def create_resources(self, definitions):
-
params = {"namespace": self.params.get("namespace_target")}
self.params["apply"] = False
@@ -139,9 +139,7 @@ class OpenShiftProcess(AnsibleOpenshiftModule):
continue
kind = definition.get("kind")
if kind and kind.endswith("List"):
- flattened_definitions.extend(
- self.flatten_list_kind(definition, params)
- )
+ flattened_definitions.extend(self.flatten_list_kind(definition, params))
else:
flattened_definitions.append(self.merge_params(definition, params))
diff --git a/ansible_collections/community/okd/plugins/module_utils/openshift_registry.py b/ansible_collections/community/okd/plugins/module_utils/openshift_registry.py
index 32a1830df..557a7d1f5 100644
--- a/ansible_collections/community/okd/plugins/module_utils/openshift_registry.py
+++ b/ansible_collections/community/okd/plugins/module_utils/openshift_registry.py
@@ -1,12 +1,15 @@
#!/usr/bin/env python
-from __future__ import (absolute_import, division, print_function)
+from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
import traceback
from urllib.parse import urlparse
-from ansible_collections.community.okd.plugins.module_utils.openshift_common import AnsibleOpenshiftModule
+from ansible_collections.community.okd.plugins.module_utils.openshift_common import (
+ AnsibleOpenshiftModule,
+)
from ansible_collections.community.okd.plugins.module_utils.openshift_docker_image import (
parse_docker_image_ref,
@@ -15,6 +18,7 @@ from ansible_collections.community.okd.plugins.module_utils.openshift_docker_ima
try:
from requests import request
from requests.auth import HTTPBasicAuth
+
HAS_REQUESTS_MODULE = True
requests_import_exception = None
except ImportError as e:
@@ -32,11 +36,7 @@ class OpenShiftRegistry(AnsibleOpenshiftModule):
kind = "ImageStream"
api_version = "image.openshift.io/v1"
- params = dict(
- kind=kind,
- api_version=api_version,
- namespace=namespace
- )
+ params = dict(kind=kind, api_version=api_version, namespace=namespace)
result = self.kubernetes_facts(**params)
imagestream = []
if len(result["resources"]) > 0:
@@ -44,7 +44,6 @@ class OpenShiftRegistry(AnsibleOpenshiftModule):
return imagestream
def find_registry_info(self):
-
def _determine_registry(image_stream):
public, internal = None, None
docker_repo = image_stream["status"].get("publicDockerImageRepository")
@@ -72,39 +71,46 @@ class OpenShiftRegistry(AnsibleOpenshiftModule):
self.fail_json(msg="The integrated registry has not been configured")
return internal, public
- self.fail_json(msg="No Image Streams could be located to retrieve registry info.")
+ self.fail_json(
+ msg="No Image Streams could be located to retrieve registry info."
+ )
def execute_module(self):
result = {}
- result["internal_hostname"], result["public_hostname"] = self.find_registry_info()
+ (
+ result["internal_hostname"],
+ result["public_hostname"],
+ ) = self.find_registry_info()
if self.check:
public_registry = result["public_hostname"]
if not public_registry:
result["check"] = dict(
- reached=False,
- msg="Registry does not have a public hostname."
+ reached=False, msg="Registry does not have a public hostname."
)
else:
- headers = {
- 'Content-Type': 'application/json'
- }
- params = {
- 'method': 'GET',
- 'verify': False
- }
+ headers = {"Content-Type": "application/json"}
+ params = {"method": "GET", "verify": False}
if self.client.configuration.api_key:
headers.update(self.client.configuration.api_key)
- elif self.client.configuration.username and self.client.configuration.password:
+ elif (
+ self.client.configuration.username
+ and self.client.configuration.password
+ ):
if not HAS_REQUESTS_MODULE:
result["check"] = dict(
reached=False,
msg="The requests python package is missing, try `pip install requests`",
- error=requests_import_exception
+ error=requests_import_exception,
)
self.exit_json(**result)
params.update(
- dict(auth=HTTPBasicAuth(self.client.configuration.username, self.client.configuration.password))
+ dict(
+ auth=HTTPBasicAuth(
+ self.client.configuration.username,
+ self.client.configuration.password,
+ )
+ )
)
# verify ssl
@@ -112,23 +118,20 @@ class OpenShiftRegistry(AnsibleOpenshiftModule):
if len(host.scheme) == 0:
registry_url = "https://" + public_registry
- if registry_url.startswith("https://") and self.client.configuration.ssl_ca_cert:
- params.update(
- dict(verify=self.client.configuration.ssl_ca_cert)
- )
- params.update(
- dict(headers=headers)
- )
+ if (
+ registry_url.startswith("https://")
+ and self.client.configuration.ssl_ca_cert
+ ):
+ params.update(dict(verify=self.client.configuration.ssl_ca_cert))
+ params.update(dict(headers=headers))
last_bad_status, last_bad_reason = None, None
for path in ("/", "/healthz"):
- params.update(
- dict(url=registry_url + path)
- )
+ params.update(dict(url=registry_url + path))
response = request(**params)
if response.status_code == 200:
result["check"] = dict(
reached=True,
- msg="The local client can contact the integrated registry."
+ msg="The local client can contact the integrated registry.",
)
self.exit_json(**result)
last_bad_reason = response.reason
@@ -136,9 +139,8 @@ class OpenShiftRegistry(AnsibleOpenshiftModule):
result["check"] = dict(
reached=False,
- msg="Unable to contact the integrated registry using local client. Status=%d, Reason=%s" % (
- last_bad_status, last_bad_reason
- )
+ msg="Unable to contact the integrated registry using local client. Status=%d, Reason=%s"
+ % (last_bad_status, last_bad_reason),
)
self.exit_json(**result)
diff --git a/ansible_collections/community/okd/plugins/modules/k8s.py b/ansible_collections/community/okd/plugins/modules/k8s.py
index c3b8d1b66..ae3a9b493 100644
--- a/ansible_collections/community/okd/plugins/modules/k8s.py
+++ b/ansible_collections/community/okd/plugins/modules/k8s.py
@@ -10,7 +10,7 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
# STARTREMOVE (downstream)
-DOCUMENTATION = r'''
+DOCUMENTATION = r"""
module: k8s
@@ -142,9 +142,9 @@ requirements:
- "python >= 3.6"
- "kubernetes >= 12.0.0"
- "PyYAML >= 3.11"
-'''
+"""
-EXAMPLES = r'''
+EXAMPLES = r"""
- name: Create a k8s namespace
community.okd.k8s:
name: testing
@@ -169,10 +169,10 @@ EXAMPLES = r'''
app: galaxy
service: web
ports:
- - protocol: TCP
- targetPort: 8000
- name: port-8000-tcp
- port: 8000
+ - protocol: TCP
+ targetPort: 8000
+ name: port-8000-tcp
+ port: 8000
- name: Remove an existing Service object
community.okd.k8s:
@@ -206,18 +206,18 @@ EXAMPLES = r'''
state: present
definition: "{{ lookup('template', '/testing/deployment.yml') | from_yaml }}"
validate:
- fail_on_error: yes
+ fail_on_error: true
- name: warn on validation errors, check for unexpected properties
community.okd.k8s:
state: present
definition: "{{ lookup('template', '/testing/deployment.yml') | from_yaml }}"
validate:
- fail_on_error: no
- strict: yes
-'''
+ fail_on_error: false
+ strict: true
+"""
-RETURN = r'''
+RETURN = r"""
result:
description:
- The created, patched, or otherwise present object. Will be empty in the case of a deletion.
@@ -254,22 +254,26 @@ result:
type: int
sample: 48
error:
- description: error while trying to create/delete the object.
+ description: Error while trying to create/delete the object.
returned: error
type: complex
-'''
+"""
# ENDREMOVE (downstream)
from ansible_collections.kubernetes.core.plugins.module_utils.args_common import (
- NAME_ARG_SPEC, RESOURCE_ARG_SPEC, AUTH_ARG_SPEC, WAIT_ARG_SPEC, DELETE_OPTS_ARG_SPEC
+ NAME_ARG_SPEC,
+ RESOURCE_ARG_SPEC,
+ AUTH_ARG_SPEC,
+ WAIT_ARG_SPEC,
+ DELETE_OPTS_ARG_SPEC,
)
def validate_spec():
return dict(
- fail_on_error=dict(type='bool'),
+ fail_on_error=dict(type="bool"),
version=dict(),
- strict=dict(type='bool', default=True)
+ strict=dict(type="bool", default=True),
)
@@ -279,30 +283,41 @@ def argspec():
argument_spec.update(RESOURCE_ARG_SPEC)
argument_spec.update(AUTH_ARG_SPEC)
argument_spec.update(WAIT_ARG_SPEC)
- argument_spec['merge_type'] = dict(type='list', elements='str', choices=['json', 'merge', 'strategic-merge'])
- argument_spec['validate'] = dict(type='dict', default=None, options=validate_spec())
- argument_spec['append_hash'] = dict(type='bool', default=False)
- argument_spec['apply'] = dict(type='bool', default=False)
- argument_spec['template'] = dict(type='raw', default=None)
- argument_spec['delete_options'] = dict(type='dict', default=None, options=DELETE_OPTS_ARG_SPEC)
- argument_spec['continue_on_error'] = dict(type='bool', default=False)
- argument_spec['state'] = dict(default='present', choices=['present', 'absent', 'patched'])
- argument_spec['force'] = dict(type='bool', default=False)
+ argument_spec["merge_type"] = dict(
+ type="list", elements="str", choices=["json", "merge", "strategic-merge"]
+ )
+ argument_spec["validate"] = dict(type="dict", default=None, options=validate_spec())
+ argument_spec["append_hash"] = dict(type="bool", default=False)
+ argument_spec["apply"] = dict(type="bool", default=False)
+ argument_spec["template"] = dict(type="raw", default=None)
+ argument_spec["delete_options"] = dict(
+ type="dict", default=None, options=DELETE_OPTS_ARG_SPEC
+ )
+ argument_spec["continue_on_error"] = dict(type="bool", default=False)
+ argument_spec["state"] = dict(
+ default="present", choices=["present", "absent", "patched"]
+ )
+ argument_spec["force"] = dict(type="bool", default=False)
return argument_spec
def main():
mutually_exclusive = [
- ('resource_definition', 'src'),
- ('merge_type', 'apply'),
- ('template', 'resource_definition'),
- ('template', 'src'),
+ ("resource_definition", "src"),
+ ("merge_type", "apply"),
+ ("template", "resource_definition"),
+ ("template", "src"),
]
from ansible_collections.community.okd.plugins.module_utils.k8s import OKDRawModule
- module = OKDRawModule(argument_spec=argspec(), supports_check_mode=True, mutually_exclusive=mutually_exclusive)
+
+ module = OKDRawModule(
+ argument_spec=argspec(),
+ supports_check_mode=True,
+ mutually_exclusive=mutually_exclusive,
+ )
module.run_module()
-if __name__ == '__main__':
+if __name__ == "__main__":
main()
diff --git a/ansible_collections/community/okd/plugins/modules/openshift_adm_groups_sync.py b/ansible_collections/community/okd/plugins/modules/openshift_adm_groups_sync.py
index 66b0fbb15..3f5f14be3 100644
--- a/ansible_collections/community/okd/plugins/modules/openshift_adm_groups_sync.py
+++ b/ansible_collections/community/okd/plugins/modules/openshift_adm_groups_sync.py
@@ -96,31 +96,31 @@ EXAMPLES = r"""
- name: Sync all groups from an LDAP server
openshift_adm_groups_sync:
src:
- kind: LDAPSyncConfig
- apiVersion: v1
- url: ldap://localhost:1390
- insecure: true
- bindDN: cn=admin,dc=example,dc=org
- bindPassword: adminpassword
- rfc2307:
- groupsQuery:
- baseDN: "cn=admins,ou=groups,dc=example,dc=org"
- scope: sub
- derefAliases: never
- filter: (objectClass=*)
- pageSize: 0
- groupUIDAttribute: dn
- groupNameAttributes: [ cn ]
- groupMembershipAttributes: [ member ]
- usersQuery:
- baseDN: "ou=users,dc=example,dc=org"
- scope: sub
- derefAliases: never
- pageSize: 0
- userUIDAttribute: dn
- userNameAttributes: [ mail ]
- tolerateMemberNotFoundErrors: true
- tolerateMemberOutOfScopeErrors: true
+ kind: LDAPSyncConfig
+ apiVersion: v1
+ url: ldap://localhost:1390
+ insecure: true
+ bindDN: cn=admin,dc=example,dc=org
+ bindPassword: adminpassword
+ rfc2307:
+ groupsQuery:
+ baseDN: "cn=admins,ou=groups,dc=example,dc=org"
+ scope: sub
+ derefAliases: never
+ filter: (objectClass=*)
+ pageSize: 0
+ groupUIDAttribute: dn
+ groupNameAttributes: [cn]
+ groupMembershipAttributes: [member]
+ usersQuery:
+ baseDN: "ou=users,dc=example,dc=org"
+ scope: sub
+ derefAliases: never
+ pageSize: 0
+ userUIDAttribute: dn
+ userNameAttributes: [mail]
+ tolerateMemberNotFoundErrors: true
+ tolerateMemberOutOfScopeErrors: true
# Sync all groups except the ones from the deny_groups from an LDAP server
- name: Sync all groups from an LDAP server using deny_groups
@@ -192,20 +192,21 @@ builds:
# ENDREMOVE (downstream)
import copy
-import traceback
-from ansible_collections.kubernetes.core.plugins.module_utils.args_common import AUTH_ARG_SPEC
+from ansible_collections.kubernetes.core.plugins.module_utils.args_common import (
+ AUTH_ARG_SPEC,
+)
def argument_spec():
args = copy.deepcopy(AUTH_ARG_SPEC)
args.update(
dict(
- state=dict(type='str', choices=['absent', 'present'], default='present'),
- type=dict(type='str', choices=['ldap', 'openshift'], default='ldap'),
- sync_config=dict(type='dict', aliases=['config', 'src'], required=True),
- deny_groups=dict(type='list', elements='str', default=[]),
- allow_groups=dict(type='list', elements='str', default=[]),
+ state=dict(type="str", choices=["absent", "present"], default="present"),
+ type=dict(type="str", choices=["ldap", "openshift"], default="ldap"),
+ sync_config=dict(type="dict", aliases=["config", "src"], required=True),
+ deny_groups=dict(type="list", elements="str", default=[]),
+ allow_groups=dict(type="list", elements="str", default=[]),
)
)
return args
@@ -213,12 +214,14 @@ def argument_spec():
def main():
from ansible_collections.community.okd.plugins.module_utils.openshift_groups import (
- OpenshiftGroupsSync
+ OpenshiftGroupsSync,
)
- module = OpenshiftGroupsSync(argument_spec=argument_spec(), supports_check_mode=True)
+ module = OpenshiftGroupsSync(
+ argument_spec=argument_spec(), supports_check_mode=True
+ )
module.run_module()
-if __name__ == '__main__':
+if __name__ == "__main__":
main()
diff --git a/ansible_collections/community/okd/plugins/modules/openshift_adm_migrate_template_instances.py b/ansible_collections/community/okd/plugins/modules/openshift_adm_migrate_template_instances.py
index 05d5563cd..ba3039d54 100644
--- a/ansible_collections/community/okd/plugins/modules/openshift_adm_migrate_template_instances.py
+++ b/ansible_collections/community/okd/plugins/modules/openshift_adm_migrate_template_instances.py
@@ -31,14 +31,14 @@ requirements:
"""
EXAMPLES = r"""
- - name: Migrate TemplateInstances in namespace=test
- community.okd.openshift_adm_migrate_template_instances:
- namespace: test
- register: _result
-
- - name: Migrate TemplateInstances in all namespaces
- community.okd.openshift_adm_migrate_template_instances:
- register: _result
+- name: Migrate TemplateInstances in namespace=test
+ community.okd.openshift_adm_migrate_template_instances:
+ namespace: test
+ register: _result
+
+- name: Migrate TemplateInstances in all namespaces
+ community.okd.openshift_adm_migrate_template_instances:
+ register: _result
"""
RETURN = r"""
@@ -235,7 +235,9 @@ result:
from ansible.module_utils._text import to_native
-from ansible_collections.community.okd.plugins.module_utils.openshift_common import AnsibleOpenshiftModule
+from ansible_collections.community.okd.plugins.module_utils.openshift_common import (
+ AnsibleOpenshiftModule,
+)
try:
from kubernetes.dynamic.exceptions import DynamicApiError
@@ -339,9 +341,7 @@ class OpenShiftMigrateTemplateInstances(AnsibleOpenshiftModule):
if ti_to_be_migrated:
if self.check_mode:
- self.exit_json(
- **{"changed": True, "result": ti_to_be_migrated}
- )
+ self.exit_json(**{"changed": True, "result": ti_to_be_migrated})
else:
for ti_elem in ti_to_be_migrated:
results["result"].append(
@@ -363,7 +363,9 @@ def argspec():
def main():
argument_spec = argspec()
- module = OpenShiftMigrateTemplateInstances(argument_spec=argument_spec, supports_check_mode=True)
+ module = OpenShiftMigrateTemplateInstances(
+ argument_spec=argument_spec, supports_check_mode=True
+ )
module.run_module()
diff --git a/ansible_collections/community/okd/plugins/modules/openshift_adm_prune_auth.py b/ansible_collections/community/okd/plugins/modules/openshift_adm_prune_auth.py
index a9833fa50..fe0aec2c9 100644
--- a/ansible_collections/community/okd/plugins/modules/openshift_adm_prune_auth.py
+++ b/ansible_collections/community/okd/plugins/modules/openshift_adm_prune_auth.py
@@ -5,10 +5,11 @@
# 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
# STARTREMOVE (downstream)
-DOCUMENTATION = r'''
+DOCUMENTATION = r"""
module: openshift_adm_prune_auth
@@ -58,9 +59,9 @@ options:
requirements:
- python >= 3.6
- kubernetes >= 12.0.0
-'''
+"""
-EXAMPLES = r'''
+EXAMPLES = r"""
- name: Prune all roles from default namespace
openshift_adm_prune_auth:
resource: roles
@@ -72,10 +73,10 @@ EXAMPLES = r'''
namespace: testing
label_selectors:
- phase=production
-'''
+"""
-RETURN = r'''
+RETURN = r"""
cluster_role_binding:
type: list
description: list of cluster role binding deleted.
@@ -96,37 +97,45 @@ group:
type: list
description: list of Security Context Constraints deleted.
returned: I(resource=users)
-'''
+"""
# ENDREMOVE (downstream)
import copy
-from ansible_collections.kubernetes.core.plugins.module_utils.args_common import AUTH_ARG_SPEC
+from ansible_collections.kubernetes.core.plugins.module_utils.args_common import (
+ AUTH_ARG_SPEC,
+)
def argument_spec():
args = copy.deepcopy(AUTH_ARG_SPEC)
args.update(
dict(
- resource=dict(type='str', required=True, choices=['roles', 'clusterroles', 'users', 'groups']),
- namespace=dict(type='str'),
- name=dict(type='str'),
- label_selectors=dict(type='list', elements='str'),
+ resource=dict(
+ type="str",
+ required=True,
+ choices=["roles", "clusterroles", "users", "groups"],
+ ),
+ namespace=dict(type="str"),
+ name=dict(type="str"),
+ label_selectors=dict(type="list", elements="str"),
)
)
return args
def main():
-
from ansible_collections.community.okd.plugins.module_utils.openshift_adm_prune_auth import (
- OpenShiftAdmPruneAuth)
+ OpenShiftAdmPruneAuth,
+ )
- module = OpenShiftAdmPruneAuth(argument_spec=argument_spec(),
- mutually_exclusive=[("name", "label_selectors")],
- supports_check_mode=True)
+ module = OpenShiftAdmPruneAuth(
+ argument_spec=argument_spec(),
+ mutually_exclusive=[("name", "label_selectors")],
+ supports_check_mode=True,
+ )
module.run_module()
-if __name__ == '__main__':
+if __name__ == "__main__":
main()
diff --git a/ansible_collections/community/okd/plugins/modules/openshift_adm_prune_builds.py b/ansible_collections/community/okd/plugins/modules/openshift_adm_prune_builds.py
index b0b831e6f..ffc86f16e 100644
--- a/ansible_collections/community/okd/plugins/modules/openshift_adm_prune_builds.py
+++ b/ansible_collections/community/okd/plugins/modules/openshift_adm_prune_builds.py
@@ -5,10 +5,11 @@
# 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
# STARTREMOVE (downstream)
-DOCUMENTATION = r'''
+DOCUMENTATION = r"""
module: openshift_adm_prune_builds
@@ -45,14 +46,14 @@ options:
requirements:
- python >= 3.6
- kubernetes >= 12.0.0
-'''
+"""
-EXAMPLES = r'''
+EXAMPLES = r"""
# Run deleting older completed and failed builds and also including
# all builds whose associated BuildConfig no longer exists
- name: Run delete orphan Builds
community.okd.openshift_adm_prune_builds:
- orphans: True
+ orphans: true
# Run deleting older completed and failed builds keep younger than 2hours
- name: Run delete builds, keep younger than 2h
@@ -63,9 +64,9 @@ EXAMPLES = r'''
- name: Run delete builds from namespace
community.okd.openshift_adm_prune_builds:
namespace: testing_namespace
-'''
+"""
-RETURN = r'''
+RETURN = r"""
builds:
description:
- The builds that were deleted
@@ -92,33 +93,38 @@ builds:
description: Current status details for the object.
returned: success
type: dict
-'''
+"""
# ENDREMOVE (downstream)
import copy
-from ansible_collections.kubernetes.core.plugins.module_utils.args_common import AUTH_ARG_SPEC
+from ansible_collections.kubernetes.core.plugins.module_utils.args_common import (
+ AUTH_ARG_SPEC,
+)
def argument_spec():
args = copy.deepcopy(AUTH_ARG_SPEC)
args.update(
dict(
- namespace=dict(type='str'),
- keep_younger_than=dict(type='int'),
- orphans=dict(type='bool', default=False),
+ namespace=dict(type="str"),
+ keep_younger_than=dict(type="int"),
+ orphans=dict(type="bool", default=False),
)
)
return args
def main():
+ from ansible_collections.community.okd.plugins.module_utils.openshift_builds import (
+ OpenShiftPruneBuilds,
+ )
- from ansible_collections.community.okd.plugins.module_utils.openshift_builds import OpenShiftPruneBuilds
-
- module = OpenShiftPruneBuilds(argument_spec=argument_spec(), supports_check_mode=True)
+ module = OpenShiftPruneBuilds(
+ argument_spec=argument_spec(), supports_check_mode=True
+ )
module.run_module()
-if __name__ == '__main__':
+if __name__ == "__main__":
main()
diff --git a/ansible_collections/community/okd/plugins/modules/openshift_adm_prune_deployments.py b/ansible_collections/community/okd/plugins/modules/openshift_adm_prune_deployments.py
index bdef18460..963e3c94c 100644
--- a/ansible_collections/community/okd/plugins/modules/openshift_adm_prune_deployments.py
+++ b/ansible_collections/community/okd/plugins/modules/openshift_adm_prune_deployments.py
@@ -5,10 +5,11 @@
# 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
# STARTREMOVE (downstream)
-DOCUMENTATION = r'''
+DOCUMENTATION = r"""
module: openshift_adm_prune_deployments
@@ -45,32 +46,34 @@ options:
requirements:
- python >= 3.6
- kubernetes >= 12.0.0
-'''
+"""
-EXAMPLES = r'''
+EXAMPLES = r"""
- name: Prune Deployments from testing namespace
community.okd.openshift_adm_prune_deployments:
namespace: testing
- name: Prune orphans deployments, keep younger than 2hours
community.okd.openshift_adm_prune_deployments:
- orphans: True
+ orphans: true
keep_younger_than: 120
-'''
+"""
-RETURN = r'''
+RETURN = r"""
replication_controllers:
type: list
description: list of replication controllers candidate for pruning.
returned: always
-'''
+"""
# ENDREMOVE (downstream)
import copy
try:
- from ansible_collections.kubernetes.core.plugins.module_utils.args_common import AUTH_ARG_SPEC
+ from ansible_collections.kubernetes.core.plugins.module_utils.args_common import (
+ AUTH_ARG_SPEC,
+ )
except ImportError as e:
pass
@@ -79,22 +82,28 @@ def argument_spec():
args = copy.deepcopy(AUTH_ARG_SPEC)
args.update(
dict(
- namespace=dict(type='str',),
- keep_younger_than=dict(type='int',),
- orphans=dict(type='bool', default=False),
+ namespace=dict(
+ type="str",
+ ),
+ keep_younger_than=dict(
+ type="int",
+ ),
+ orphans=dict(type="bool", default=False),
)
)
return args
def main():
-
from ansible_collections.community.okd.plugins.module_utils.openshift_adm_prune_deployments import (
- OpenShiftAdmPruneDeployment)
+ OpenShiftAdmPruneDeployment,
+ )
- module = OpenShiftAdmPruneDeployment(argument_spec=argument_spec(), supports_check_mode=True)
+ module = OpenShiftAdmPruneDeployment(
+ argument_spec=argument_spec(), supports_check_mode=True
+ )
module.run_module()
-if __name__ == '__main__':
+if __name__ == "__main__":
main()
diff --git a/ansible_collections/community/okd/plugins/modules/openshift_adm_prune_images.py b/ansible_collections/community/okd/plugins/modules/openshift_adm_prune_images.py
index d470fa871..41bd5c4f2 100644
--- a/ansible_collections/community/okd/plugins/modules/openshift_adm_prune_images.py
+++ b/ansible_collections/community/okd/plugins/modules/openshift_adm_prune_images.py
@@ -5,10 +5,11 @@
# 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
# STARTREMOVE (downstream)
-DOCUMENTATION = r'''
+DOCUMENTATION = r"""
module: openshift_adm_prune_images
@@ -84,9 +85,9 @@ requirements:
- python >= 3.6
- kubernetes >= 12.0.0
- docker-image-py
-'''
+"""
-EXAMPLES = r'''
+EXAMPLES = r"""
# Prune if only images and their referrers were more than an hour old
- name: Prune image with referrer been more than an hour old
community.okd.openshift_adm_prune_images:
@@ -102,10 +103,10 @@ EXAMPLES = r'''
community.okd.openshift_adm_prune_images:
registry_url: http://registry.example.org
registry_validate_certs: false
-'''
+"""
-RETURN = r'''
+RETURN = r"""
updated_image_streams:
description:
- The images streams updated.
@@ -275,41 +276,44 @@ deleted_images:
},
...
]
-'''
+"""
# ENDREMOVE (downstream)
import copy
-from ansible_collections.kubernetes.core.plugins.module_utils.args_common import AUTH_ARG_SPEC
+from ansible_collections.kubernetes.core.plugins.module_utils.args_common import (
+ AUTH_ARG_SPEC,
+)
def argument_spec():
args = copy.deepcopy(AUTH_ARG_SPEC)
args.update(
dict(
- namespace=dict(type='str'),
- all_images=dict(type='bool', default=True),
- keep_younger_than=dict(type='int'),
- prune_over_size_limit=dict(type='bool', default=False),
- registry_url=dict(type='str'),
- registry_validate_certs=dict(type='bool'),
- registry_ca_cert=dict(type='path'),
- prune_registry=dict(type='bool', default=True),
- ignore_invalid_refs=dict(type='bool', default=False),
+ namespace=dict(type="str"),
+ all_images=dict(type="bool", default=True),
+ keep_younger_than=dict(type="int"),
+ prune_over_size_limit=dict(type="bool", default=False),
+ registry_url=dict(type="str"),
+ registry_validate_certs=dict(type="bool"),
+ registry_ca_cert=dict(type="path"),
+ prune_registry=dict(type="bool", default=True),
+ ignore_invalid_refs=dict(type="bool", default=False),
)
)
return args
def main():
-
from ansible_collections.community.okd.plugins.module_utils.openshift_adm_prune_images import (
- OpenShiftAdmPruneImages
+ OpenShiftAdmPruneImages,
)
- module = OpenShiftAdmPruneImages(argument_spec=argument_spec(), supports_check_mode=True)
+ module = OpenShiftAdmPruneImages(
+ argument_spec=argument_spec(), supports_check_mode=True
+ )
module.run_module()
-if __name__ == '__main__':
+if __name__ == "__main__":
main()
diff --git a/ansible_collections/community/okd/plugins/modules/openshift_auth.py b/ansible_collections/community/okd/plugins/modules/openshift_auth.py
index 422018cc5..4fdb16965 100644
--- a/ansible_collections/community/okd/plugins/modules/openshift_auth.py
+++ b/ansible_collections/community/okd/plugins/modules/openshift_auth.py
@@ -5,9 +5,10 @@
# 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 = r'''
+DOCUMENTATION = r"""
module: openshift_auth
@@ -74,46 +75,49 @@ requirements:
- urllib3
- requests
- requests-oauthlib
-'''
+"""
-EXAMPLES = r'''
-- hosts: localhost
+EXAMPLES = r"""
+- name: Example Playbook
+ hosts: localhost
module_defaults:
group/community.okd.okd:
host: https://k8s.example.com/
ca_cert: ca.pem
tasks:
- - block:
- # It's good practice to store login credentials in a secure vault and not
- # directly in playbooks.
- - include_vars: openshift_passwords.yml
-
- - name: Log in (obtain access token)
- community.okd.openshift_auth:
- username: admin
- password: "{{ openshift_admin_password }}"
- register: openshift_auth_results
-
- # Previous task provides the token/api_key, while all other parameters
- # are taken from module_defaults
- - name: Get a list of all pods from any namespace
- kubernetes.core.k8s_info:
- api_key: "{{ openshift_auth_results.openshift_auth.api_key }}"
- kind: Pod
- register: pod_list
-
- always:
- - name: If login succeeded, try to log out (revoke access token)
- when: openshift_auth_results.openshift_auth.api_key is defined
- community.okd.openshift_auth:
- state: absent
- api_key: "{{ openshift_auth_results.openshift_auth.api_key }}"
-'''
+ - name: Authenticate to OpenShift cluster and gell a list of all pods from any namespace
+ block:
+ # It's good practice to store login credentials in a secure vault and not
+ # directly in playbooks.
+ - name: Include 'openshift_passwords.yml'
+ ansible.builtin.include_vars: openshift_passwords.yml
+
+ - name: Log in (obtain access token)
+ community.okd.openshift_auth:
+ username: admin
+ password: "{{ openshift_admin_password }}"
+ register: openshift_auth_results
+
+ # Previous task provides the token/api_key, while all other parameters
+ # are taken from module_defaults
+ - name: Get a list of all pods from any namespace
+ kubernetes.core.k8s_info:
+ api_key: "{{ openshift_auth_results.openshift_auth.api_key }}"
+ kind: Pod
+ register: pod_list
+
+ always:
+ - name: If login succeeded, try to log out (revoke access token)
+ when: openshift_auth_results.openshift_auth.api_key is defined
+ community.okd.openshift_auth:
+ state: absent
+ api_key: "{{ openshift_auth_results.openshift_auth.api_key }}"
+"""
# Returned value names need to match k8s modules parameter names, to make it
# easy to pass returned values of openshift_auth to other k8s modules.
# Discussion: https://github.com/ansible/ansible/pull/50807#discussion_r248827899
-RETURN = r'''
+RETURN = r"""
openshift_auth:
description: OpenShift authentication facts.
returned: success
@@ -164,7 +168,7 @@ k8s_auth:
description: Username for authenticating with the API server.
returned: success
type: str
-'''
+"""
import traceback
@@ -179,52 +183,52 @@ import hashlib
# 3rd party imports
try:
import requests
+
HAS_REQUESTS = True
except ImportError:
HAS_REQUESTS = False
try:
from requests_oauthlib import OAuth2Session
+
HAS_REQUESTS_OAUTH = True
except ImportError:
HAS_REQUESTS_OAUTH = False
try:
from urllib3.util import make_headers
+
HAS_URLLIB3 = True
except ImportError:
HAS_URLLIB3 = False
K8S_AUTH_ARG_SPEC = {
- 'state': {
- 'default': 'present',
- 'choices': ['present', 'absent'],
- },
- 'host': {'required': True},
- 'username': {},
- 'password': {'no_log': True},
- 'ca_cert': {'type': 'path', 'aliases': ['ssl_ca_cert']},
- 'validate_certs': {
- 'type': 'bool',
- 'default': True,
- 'aliases': ['verify_ssl']
+ "state": {
+ "default": "present",
+ "choices": ["present", "absent"],
},
- 'api_key': {'no_log': True},
+ "host": {"required": True},
+ "username": {},
+ "password": {"no_log": True},
+ "ca_cert": {"type": "path", "aliases": ["ssl_ca_cert"]},
+ "validate_certs": {"type": "bool", "default": True, "aliases": ["verify_ssl"]},
+ "api_key": {"no_log": True},
}
def get_oauthaccesstoken_objectname_from_token(token_name):
-
"""
- openshift convert the access token to an OAuthAccessToken resource name using the algorithm
- https://github.com/openshift/console/blob/9f352ba49f82ad693a72d0d35709961428b43b93/pkg/server/server.go#L609-L613
+ openshift convert the access token to an OAuthAccessToken resource name using the algorithm
+ https://github.com/openshift/console/blob/9f352ba49f82ad693a72d0d35709961428b43b93/pkg/server/server.go#L609-L613
"""
sha256Prefix = "sha256~"
content = token_name.strip(sha256Prefix)
- b64encoded = urlsafe_b64encode(hashlib.sha256(content.encode()).digest()).rstrip(b'=')
+ b64encoded = urlsafe_b64encode(hashlib.sha256(content.encode()).digest()).rstrip(
+ b"="
+ )
return sha256Prefix + b64encoded.decode("utf-8")
@@ -234,42 +238,48 @@ class OpenShiftAuthModule(AnsibleModule):
self,
argument_spec=K8S_AUTH_ARG_SPEC,
required_if=[
- ('state', 'present', ['username', 'password']),
- ('state', 'absent', ['api_key']),
- ]
+ ("state", "present", ["username", "password"]),
+ ("state", "absent", ["api_key"]),
+ ],
)
if not HAS_REQUESTS:
- self.fail("This module requires the python 'requests' package. Try `pip install requests`.")
+ self.fail(
+ "This module requires the python 'requests' package. Try `pip install requests`."
+ )
if not HAS_REQUESTS_OAUTH:
- self.fail("This module requires the python 'requests-oauthlib' package. Try `pip install requests-oauthlib`.")
+ self.fail(
+ "This module requires the python 'requests-oauthlib' package. Try `pip install requests-oauthlib`."
+ )
if not HAS_URLLIB3:
- self.fail("This module requires the python 'urllib3' package. Try `pip install urllib3`.")
+ self.fail(
+ "This module requires the python 'urllib3' package. Try `pip install urllib3`."
+ )
def execute_module(self):
- state = self.params.get('state')
- verify_ssl = self.params.get('validate_certs')
- ssl_ca_cert = self.params.get('ca_cert')
+ state = self.params.get("state")
+ verify_ssl = self.params.get("validate_certs")
+ ssl_ca_cert = self.params.get("ca_cert")
- self.auth_username = self.params.get('username')
- self.auth_password = self.params.get('password')
- self.auth_api_key = self.params.get('api_key')
- self.con_host = self.params.get('host')
+ self.auth_username = self.params.get("username")
+ self.auth_password = self.params.get("password")
+ self.auth_api_key = self.params.get("api_key")
+ self.con_host = self.params.get("host")
# python-requests takes either a bool or a path to a ca file as the 'verify' param
if verify_ssl and ssl_ca_cert:
self.con_verify_ca = ssl_ca_cert # path
else:
- self.con_verify_ca = verify_ssl # bool
+ self.con_verify_ca = verify_ssl # bool
# Get needed info to access authorization APIs
self.openshift_discover()
changed = False
result = dict()
- if state == 'present':
+ if state == "present":
new_api_key = self.openshift_login()
result = dict(
host=self.con_host,
@@ -285,87 +295,114 @@ class OpenShiftAuthModule(AnsibleModule):
self.exit_json(changed=changed, openshift_auth=result, k8s_auth=result)
def openshift_discover(self):
- url = urljoin(self.con_host, '.well-known/oauth-authorization-server')
+ url = urljoin(self.con_host, ".well-known/oauth-authorization-server")
ret = requests.get(url, verify=self.con_verify_ca)
if ret.status_code != 200:
- self.fail_request("Couldn't find OpenShift's OAuth API", method='GET', url=url,
- reason=ret.reason, status_code=ret.status_code)
+ self.fail_request(
+ "Couldn't find OpenShift's OAuth API",
+ method="GET",
+ url=url,
+ reason=ret.reason,
+ status_code=ret.status_code,
+ )
try:
oauth_info = ret.json()
- self.openshift_auth_endpoint = oauth_info['authorization_endpoint']
- self.openshift_token_endpoint = oauth_info['token_endpoint']
+ self.openshift_auth_endpoint = oauth_info["authorization_endpoint"]
+ self.openshift_token_endpoint = oauth_info["token_endpoint"]
except Exception:
- self.fail_json(msg="Something went wrong discovering OpenShift OAuth details.",
- exception=traceback.format_exc())
+ self.fail_json(
+ msg="Something went wrong discovering OpenShift OAuth details.",
+ exception=traceback.format_exc(),
+ )
def openshift_login(self):
- os_oauth = OAuth2Session(client_id='openshift-challenging-client')
- authorization_url, state = os_oauth.authorization_url(self.openshift_auth_endpoint,
- state="1", code_challenge_method='S256')
- auth_headers = make_headers(basic_auth='{0}:{1}'.format(self.auth_username, self.auth_password))
+ os_oauth = OAuth2Session(client_id="openshift-challenging-client")
+ authorization_url, state = os_oauth.authorization_url(
+ self.openshift_auth_endpoint, state="1", code_challenge_method="S256"
+ )
+ auth_headers = make_headers(
+ basic_auth="{0}:{1}".format(self.auth_username, self.auth_password)
+ )
# Request authorization code using basic auth credentials
ret = os_oauth.get(
authorization_url,
- headers={'X-Csrf-Token': state, 'authorization': auth_headers.get('authorization')},
+ headers={
+ "X-Csrf-Token": state,
+ "authorization": auth_headers.get("authorization"),
+ },
verify=self.con_verify_ca,
- allow_redirects=False
+ allow_redirects=False,
)
if ret.status_code != 302:
- self.fail_request("Authorization failed.", method='GET', url=authorization_url,
- reason=ret.reason, status_code=ret.status_code)
+ self.fail_request(
+ "Authorization failed.",
+ method="GET",
+ url=authorization_url,
+ reason=ret.reason,
+ status_code=ret.status_code,
+ )
# In here we have `code` and `state`, I think `code` is the important one
qwargs = {}
- for k, v in parse_qs(urlparse(ret.headers['Location']).query).items():
+ for k, v in parse_qs(urlparse(ret.headers["Location"]).query).items():
qwargs[k] = v[0]
- qwargs['grant_type'] = 'authorization_code'
+ qwargs["grant_type"] = "authorization_code"
# Using authorization code given to us in the Location header of the previous request, request a token
ret = os_oauth.post(
self.openshift_token_endpoint,
headers={
- 'Accept': 'application/json',
- 'Content-Type': 'application/x-www-form-urlencoded',
+ "Accept": "application/json",
+ "Content-Type": "application/x-www-form-urlencoded",
# This is just base64 encoded 'openshift-challenging-client:'
- 'Authorization': 'Basic b3BlbnNoaWZ0LWNoYWxsZW5naW5nLWNsaWVudDo='
+ "Authorization": "Basic b3BlbnNoaWZ0LWNoYWxsZW5naW5nLWNsaWVudDo=",
},
data=urlencode(qwargs),
- verify=self.con_verify_ca
+ verify=self.con_verify_ca,
)
if ret.status_code != 200:
- self.fail_request("Failed to obtain an authorization token.", method='POST',
- url=self.openshift_token_endpoint,
- reason=ret.reason, status_code=ret.status_code)
+ self.fail_request(
+ "Failed to obtain an authorization token.",
+ method="POST",
+ url=self.openshift_token_endpoint,
+ reason=ret.reason,
+ status_code=ret.status_code,
+ )
- return ret.json()['access_token']
+ return ret.json()["access_token"]
def openshift_logout(self):
-
name = get_oauthaccesstoken_objectname_from_token(self.auth_api_key)
headers = {
- 'Accept': 'application/json',
- 'Content-Type': 'application/json',
- 'Authorization': "Bearer {0}".format(self.auth_api_key)
+ "Accept": "application/json",
+ "Content-Type": "application/json",
+ "Authorization": "Bearer {0}".format(self.auth_api_key),
}
- url = "{0}/apis/oauth.openshift.io/v1/useroauthaccesstokens/{1}".format(self.con_host, name)
+ url = "{0}/apis/oauth.openshift.io/v1/useroauthaccesstokens/{1}".format(
+ self.con_host, name
+ )
json = {
"apiVersion": "oauth.openshift.io/v1",
"kind": "DeleteOptions",
- "gracePeriodSeconds": 0
+ "gracePeriodSeconds": 0,
}
- ret = requests.delete(url, json=json, verify=self.con_verify_ca, headers=headers)
+ ret = requests.delete(
+ url, json=json, verify=self.con_verify_ca, headers=headers
+ )
if ret.status_code != 200:
self.fail_json(
- msg="Couldn't delete user oauth access token '{0}' due to: {1}".format(name, ret.json().get("message")),
- status_code=ret.status_code
+ msg="Couldn't delete user oauth access token '{0}' due to: {1}".format(
+ name, ret.json().get("message")
+ ),
+ status_code=ret.status_code,
)
return True
@@ -376,7 +413,7 @@ class OpenShiftAuthModule(AnsibleModule):
def fail_request(self, msg, **kwargs):
req_info = {}
for k, v in kwargs.items():
- req_info['req_' + k] = v
+ req_info["req_" + k] = v
self.fail_json(msg=msg, **req_info)
@@ -388,5 +425,5 @@ def main():
module.fail_json(msg=str(e), exception=traceback.format_exc())
-if __name__ == '__main__':
+if __name__ == "__main__":
main()
diff --git a/ansible_collections/community/okd/plugins/modules/openshift_build.py b/ansible_collections/community/okd/plugins/modules/openshift_build.py
index 1259a102c..b397e237c 100644
--- a/ansible_collections/community/okd/plugins/modules/openshift_build.py
+++ b/ansible_collections/community/okd/plugins/modules/openshift_build.py
@@ -5,10 +5,11 @@
# 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
# STARTREMOVE (downstream)
-DOCUMENTATION = r'''
+DOCUMENTATION = r"""
module: openshift_build
@@ -134,9 +135,9 @@ options:
requirements:
- python >= 3.6
- kubernetes >= 12.0.0
-'''
+"""
-EXAMPLES = r'''
+EXAMPLES = r"""
# Starts build from build config default/hello-world
- name: Starts build from build config
community.okd.openshift_build:
@@ -171,9 +172,9 @@ EXAMPLES = r'''
build_phases:
- New
state: cancelled
-'''
+"""
-RETURN = r'''
+RETURN = r"""
builds:
description:
- The builds that were started/cancelled.
@@ -200,37 +201,47 @@ builds:
description: Current status details for the object.
returned: success
type: dict
-'''
+"""
# ENDREMOVE (downstream)
import copy
-from ansible_collections.kubernetes.core.plugins.module_utils.args_common import AUTH_ARG_SPEC
+from ansible_collections.kubernetes.core.plugins.module_utils.args_common import (
+ AUTH_ARG_SPEC,
+)
def argument_spec():
args = copy.deepcopy(AUTH_ARG_SPEC)
args_options = dict(
- name=dict(type='str', required=True),
- value=dict(type='str', required=True)
+ name=dict(type="str", required=True), value=dict(type="str", required=True)
)
args.update(
dict(
- state=dict(type='str', choices=['started', 'cancelled', 'restarted'], default="started"),
- build_args=dict(type='list', elements='dict', options=args_options),
- commit=dict(type='str'),
- env_vars=dict(type='list', elements='dict', options=args_options),
- build_name=dict(type='str'),
- build_config_name=dict(type='str'),
- namespace=dict(type='str', required=True),
- incremental=dict(type='bool'),
- no_cache=dict(type='bool'),
- wait=dict(type='bool', default=False),
- wait_sleep=dict(type='int', default=5),
- wait_timeout=dict(type='int', default=120),
- build_phases=dict(type='list', elements='str', default=[], choices=["New", "Pending", "Running"]),
+ state=dict(
+ type="str",
+ choices=["started", "cancelled", "restarted"],
+ default="started",
+ ),
+ build_args=dict(type="list", elements="dict", options=args_options),
+ commit=dict(type="str"),
+ env_vars=dict(type="list", elements="dict", options=args_options),
+ build_name=dict(type="str"),
+ build_config_name=dict(type="str"),
+ namespace=dict(type="str", required=True),
+ incremental=dict(type="bool"),
+ no_cache=dict(type="bool"),
+ wait=dict(type="bool", default=False),
+ wait_sleep=dict(type="int", default=5),
+ wait_timeout=dict(type="int", default=120),
+ build_phases=dict(
+ type="list",
+ elements="str",
+ default=[],
+ choices=["New", "Pending", "Running"],
+ ),
)
)
return args
@@ -238,23 +249,24 @@ def argument_spec():
def main():
mutually_exclusive = [
- ('build_name', 'build_config_name'),
+ ("build_name", "build_config_name"),
]
from ansible_collections.community.okd.plugins.module_utils.openshift_builds import (
- OpenShiftBuilds
+ OpenShiftBuilds,
)
+
module = OpenShiftBuilds(
argument_spec=argument_spec(),
mutually_exclusive=mutually_exclusive,
required_one_of=[
[
- 'build_name',
- 'build_config_name',
+ "build_name",
+ "build_config_name",
]
],
)
module.run_module()
-if __name__ == '__main__':
+if __name__ == "__main__":
main()
diff --git a/ansible_collections/community/okd/plugins/modules/openshift_import_image.py b/ansible_collections/community/okd/plugins/modules/openshift_import_image.py
index df0588cf4..e5f371b67 100644
--- a/ansible_collections/community/okd/plugins/modules/openshift_import_image.py
+++ b/ansible_collections/community/okd/plugins/modules/openshift_import_image.py
@@ -5,10 +5,11 @@
# 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
# STARTREMOVE (downstream)
-DOCUMENTATION = r'''
+DOCUMENTATION = r"""
module: openshift_import_image
@@ -75,9 +76,9 @@ requirements:
- python >= 3.6
- kubernetes >= 12.0.0
- docker-image-py
-'''
+"""
-EXAMPLES = r'''
+EXAMPLES = r"""
# Import tag latest into a new image stream.
- name: Import tag latest into new image stream
community.okd.openshift_import_image:
@@ -122,10 +123,10 @@ EXAMPLES = r'''
- mystream3
source: registry.io/repo/image:latest
all: true
-'''
+"""
-RETURN = r'''
+RETURN = r"""
result:
description:
- List with all ImageStreamImport that have been created.
@@ -153,42 +154,44 @@ result:
description: Current status details for the object.
returned: success
type: dict
-'''
+"""
# ENDREMOVE (downstream)
import copy
-from ansible_collections.kubernetes.core.plugins.module_utils.args_common import AUTH_ARG_SPEC
+from ansible_collections.kubernetes.core.plugins.module_utils.args_common import (
+ AUTH_ARG_SPEC,
+)
def argument_spec():
args = copy.deepcopy(AUTH_ARG_SPEC)
args.update(
dict(
- namespace=dict(type='str', required=True),
- name=dict(type='raw', required=True),
- all=dict(type='bool', default=False),
- validate_registry_certs=dict(type='bool'),
- reference_policy=dict(type='str', choices=["source", "local"], default="source"),
- scheduled=dict(type='bool', default=False),
- source=dict(type='str'),
+ namespace=dict(type="str", required=True),
+ name=dict(type="raw", required=True),
+ all=dict(type="bool", default=False),
+ validate_registry_certs=dict(type="bool"),
+ reference_policy=dict(
+ type="str", choices=["source", "local"], default="source"
+ ),
+ scheduled=dict(type="bool", default=False),
+ source=dict(type="str"),
)
)
return args
def main():
-
from ansible_collections.community.okd.plugins.module_utils.openshift_import_image import (
- OpenShiftImportImage
+ OpenShiftImportImage,
)
module = OpenShiftImportImage(
- argument_spec=argument_spec(),
- supports_check_mode=True
+ argument_spec=argument_spec(), supports_check_mode=True
)
module.run_module()
-if __name__ == '__main__':
+if __name__ == "__main__":
main()
diff --git a/ansible_collections/community/okd/plugins/modules/openshift_process.py b/ansible_collections/community/okd/plugins/modules/openshift_process.py
index fb00ffbba..01b1bda0f 100644
--- a/ansible_collections/community/okd/plugins/modules/openshift_process.py
+++ b/ansible_collections/community/okd/plugins/modules/openshift_process.py
@@ -2,13 +2,14 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
# Copyright (c) 2020-2021, Red Hat
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# STARTREMOVE (downstream)
-DOCUMENTATION = r'''
+DOCUMENTATION = r"""
module: openshift_process
short_description: Process an OpenShift template.openshift.io/v1 Template
@@ -49,6 +50,7 @@ options:
description:
- The namespace that resources should be created, updated, or deleted in.
- Only used when I(state) is present or absent.
+ type: str
parameters:
description:
- 'A set of key: value pairs that will be used to set/override values in the Template.'
@@ -70,9 +72,9 @@ options:
type: str
default: rendered
choices: [ absent, present, rendered ]
-'''
+"""
-EXAMPLES = r'''
+EXAMPLES = r"""
- name: Process a template in the cluster
community.okd.openshift_process:
name: nginx-example
@@ -87,8 +89,8 @@ EXAMPLES = r'''
community.okd.k8s:
namespace: default
definition: '{{ item }}'
- wait: yes
- apply: yes
+ wait: true
+ apply: true
loop: '{{ result.resources }}'
- name: Process a template with parameters from an env file and create the resources
@@ -98,7 +100,7 @@ EXAMPLES = r'''
namespace_target: default
parameter_file: 'files/nginx.env'
state: present
- wait: yes
+ wait: true
- name: Process a local template and create the resources
community.okd.openshift_process:
@@ -113,10 +115,10 @@ EXAMPLES = r'''
parameter_file: files/example.env
namespace_target: default
state: absent
- wait: yes
-'''
+ wait: true
+"""
-RETURN = r'''
+RETURN = r"""
result:
description:
- The created, patched, or otherwise present object. Will be empty in the case of a deletion.
@@ -200,11 +202,13 @@ resources:
conditions:
type: complex
description: Array of status conditions for the object. Not guaranteed to be present
-'''
+"""
# ENDREMOVE (downstream)
from ansible_collections.kubernetes.core.plugins.module_utils.args_common import (
- AUTH_ARG_SPEC, RESOURCE_ARG_SPEC, WAIT_ARG_SPEC
+ AUTH_ARG_SPEC,
+ RESOURCE_ARG_SPEC,
+ WAIT_ARG_SPEC,
)
@@ -213,24 +217,26 @@ def argspec():
argument_spec.update(AUTH_ARG_SPEC)
argument_spec.update(WAIT_ARG_SPEC)
argument_spec.update(RESOURCE_ARG_SPEC)
- argument_spec['state'] = dict(type='str', default='rendered', choices=['present', 'absent', 'rendered'])
- argument_spec['namespace'] = dict(type='str')
- argument_spec['namespace_target'] = dict(type='str')
- argument_spec['parameters'] = dict(type='dict')
- argument_spec['name'] = dict(type='str')
- argument_spec['parameter_file'] = dict(type='str')
+ argument_spec["state"] = dict(
+ type="str", default="rendered", choices=["present", "absent", "rendered"]
+ )
+ argument_spec["namespace"] = dict(type="str")
+ argument_spec["namespace_target"] = dict(type="str")
+ argument_spec["parameters"] = dict(type="dict")
+ argument_spec["name"] = dict(type="str")
+ argument_spec["parameter_file"] = dict(type="str")
return argument_spec
def main():
-
from ansible_collections.community.okd.plugins.module_utils.openshift_process import (
- OpenShiftProcess)
+ OpenShiftProcess,
+ )
module = OpenShiftProcess(argument_spec=argspec(), supports_check_mode=True)
module.run_module()
-if __name__ == '__main__':
+if __name__ == "__main__":
main()
diff --git a/ansible_collections/community/okd/plugins/modules/openshift_registry_info.py b/ansible_collections/community/okd/plugins/modules/openshift_registry_info.py
index a455ac50b..2693d2534 100644
--- a/ansible_collections/community/okd/plugins/modules/openshift_registry_info.py
+++ b/ansible_collections/community/okd/plugins/modules/openshift_registry_info.py
@@ -5,10 +5,11 @@
# 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
# STARTREMOVE (downstream)
-DOCUMENTATION = r'''
+DOCUMENTATION = r"""
module: openshift_registry_info
@@ -40,9 +41,9 @@ requirements:
- python >= 3.6
- kubernetes >= 12.0.0
- docker-image-py
-'''
+"""
-EXAMPLES = r'''
+EXAMPLES = r"""
# Get registry information
- name: Read integrated registry information
community.okd.openshift_registry_info:
@@ -50,11 +51,11 @@ EXAMPLES = r'''
# Read registry integrated information and attempt to contact using local client.
- name: Attempt to contact integrated registry using local client
community.okd.openshift_registry_info:
- check: yes
-'''
+ check: true
+"""
-RETURN = r'''
+RETURN = r"""
internal_hostname:
description:
- The internal registry hostname.
@@ -79,36 +80,30 @@ check:
description: message describing the ping operation.
returned: always
type: str
-'''
+"""
# ENDREMOVE (downstream)
import copy
-from ansible_collections.kubernetes.core.plugins.module_utils.args_common import AUTH_ARG_SPEC
+from ansible_collections.kubernetes.core.plugins.module_utils.args_common import (
+ AUTH_ARG_SPEC,
+)
def argument_spec():
args = copy.deepcopy(AUTH_ARG_SPEC)
- args.update(
- dict(
- check=dict(type='bool', default=False)
- )
- )
+ args.update(dict(check=dict(type="bool", default=False)))
return args
def main():
-
from ansible_collections.community.okd.plugins.module_utils.openshift_registry import (
- OpenShiftRegistry
+ OpenShiftRegistry,
)
- module = OpenShiftRegistry(
- argument_spec=argument_spec(),
- supports_check_mode=True
- )
+ module = OpenShiftRegistry(argument_spec=argument_spec(), supports_check_mode=True)
module.run_module()
-if __name__ == '__main__':
+if __name__ == "__main__":
main()
diff --git a/ansible_collections/community/okd/plugins/modules/openshift_route.py b/ansible_collections/community/okd/plugins/modules/openshift_route.py
index e452fc534..ea73db767 100644
--- a/ansible_collections/community/okd/plugins/modules/openshift_route.py
+++ b/ansible_collections/community/okd/plugins/modules/openshift_route.py
@@ -9,7 +9,7 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
# STARTREMOVE (downstream)
-DOCUMENTATION = r'''
+DOCUMENTATION = r"""
module: openshift_route
short_description: Expose a Service as an OpenShift Route.
@@ -133,9 +133,9 @@ options:
- insecure
default: insecure
type: str
-'''
+"""
-EXAMPLES = r'''
+EXAMPLES = r"""
- name: Create hello-world deployment
community.okd.k8s:
definition:
@@ -155,10 +155,10 @@ EXAMPLES = r'''
app: hello-kubernetes
spec:
containers:
- - name: hello-kubernetes
- image: paulbouwer/hello-kubernetes:1.8
- ports:
- - containerPort: 8080
+ - name: hello-kubernetes
+ image: paulbouwer/hello-kubernetes:1.8
+ ports:
+ - containerPort: 8080
- name: Create Service for the hello-world deployment
community.okd.k8s:
@@ -170,8 +170,8 @@ EXAMPLES = r'''
namespace: default
spec:
ports:
- - port: 80
- targetPort: 8080
+ - port: 80
+ targetPort: 8080
selector:
app: hello-kubernetes
@@ -183,9 +183,9 @@ EXAMPLES = r'''
annotations:
haproxy.router.openshift.io/balance: roundrobin
register: route
-'''
+"""
-RETURN = r'''
+RETURN = r"""
result:
description:
- The Route object that was created or updated. Will be empty in the case of deletion.
@@ -303,20 +303,28 @@ duration:
returned: when C(wait) is true
type: int
sample: 48
-'''
+"""
# ENDREMOVE (downstream)
import copy
from ansible.module_utils._text import to_native
-from ansible_collections.community.okd.plugins.module_utils.openshift_common import AnsibleOpenshiftModule
+from ansible_collections.community.okd.plugins.module_utils.openshift_common import (
+ AnsibleOpenshiftModule,
+)
try:
- from ansible_collections.kubernetes.core.plugins.module_utils.k8s.runner import perform_action
- from ansible_collections.kubernetes.core.plugins.module_utils.k8s.waiter import Waiter
+ from ansible_collections.kubernetes.core.plugins.module_utils.k8s.runner import (
+ perform_action,
+ )
+ from ansible_collections.kubernetes.core.plugins.module_utils.k8s.waiter import (
+ Waiter,
+ )
from ansible_collections.kubernetes.core.plugins.module_utils.args_common import (
- AUTH_ARG_SPEC, WAIT_ARG_SPEC, COMMON_ARG_SPEC
+ AUTH_ARG_SPEC,
+ WAIT_ARG_SPEC,
+ COMMON_ARG_SPEC,
)
except ImportError as e:
pass
@@ -329,7 +337,6 @@ except ImportError:
class OpenShiftRoute(AnsibleOpenshiftModule):
-
def __init__(self):
super(OpenShiftRoute, self).__init__(
argument_spec=self.argspec,
@@ -339,7 +346,7 @@ class OpenShiftRoute(AnsibleOpenshiftModule):
self.append_hash = False
self.apply = False
self.warnings = []
- self.params['merge_type'] = None
+ self.params["merge_type"] = None
@property
def argspec(self):
@@ -347,80 +354,95 @@ class OpenShiftRoute(AnsibleOpenshiftModule):
spec.update(copy.deepcopy(WAIT_ARG_SPEC))
spec.update(copy.deepcopy(COMMON_ARG_SPEC))
- spec['service'] = dict(type='str', aliases=['svc'])
- spec['namespace'] = dict(required=True, type='str')
- spec['labels'] = dict(type='dict')
- spec['name'] = dict(type='str')
- spec['hostname'] = dict(type='str')
- spec['path'] = dict(type='str')
- spec['wildcard_policy'] = dict(choices=['Subdomain'], type='str')
- spec['port'] = dict(type='str')
- spec['tls'] = dict(type='dict', options=dict(
- ca_certificate=dict(type='str'),
- certificate=dict(type='str'),
- destination_ca_certificate=dict(type='str'),
- key=dict(type='str', no_log=False),
- insecure_policy=dict(type='str', choices=['allow', 'redirect', 'disallow'], default='disallow'),
- ))
- spec['termination'] = dict(choices=['edge', 'passthrough', 'reencrypt', 'insecure'], default='insecure')
- spec['annotations'] = dict(type='dict')
+ spec["service"] = dict(type="str", aliases=["svc"])
+ spec["namespace"] = dict(required=True, type="str")
+ spec["labels"] = dict(type="dict")
+ spec["name"] = dict(type="str")
+ spec["hostname"] = dict(type="str")
+ spec["path"] = dict(type="str")
+ spec["wildcard_policy"] = dict(choices=["Subdomain"], type="str")
+ spec["port"] = dict(type="str")
+ spec["tls"] = dict(
+ type="dict",
+ options=dict(
+ ca_certificate=dict(type="str"),
+ certificate=dict(type="str"),
+ destination_ca_certificate=dict(type="str"),
+ key=dict(type="str", no_log=False),
+ insecure_policy=dict(
+ type="str",
+ choices=["allow", "redirect", "disallow"],
+ default="disallow",
+ ),
+ ),
+ )
+ spec["termination"] = dict(
+ choices=["edge", "passthrough", "reencrypt", "insecure"], default="insecure"
+ )
+ spec["annotations"] = dict(type="dict")
return spec
def execute_module(self):
-
- service_name = self.params.get('service')
- namespace = self.params['namespace']
- termination_type = self.params.get('termination')
- if termination_type == 'insecure':
+ service_name = self.params.get("service")
+ namespace = self.params["namespace"]
+ termination_type = self.params.get("termination")
+ if termination_type == "insecure":
termination_type = None
- state = self.params.get('state')
+ state = self.params.get("state")
- if state != 'absent' and not service_name:
+ if state != "absent" and not service_name:
self.fail_json("If 'state' is not 'absent' then 'service' must be provided")
# We need to do something a little wonky to wait if the user doesn't supply a custom condition
- custom_wait = self.params.get('wait') and not self.params.get('wait_condition') and state != 'absent'
+ custom_wait = (
+ self.params.get("wait")
+ and not self.params.get("wait_condition")
+ and state != "absent"
+ )
if custom_wait:
# Don't use default wait logic in perform_action
- self.params['wait'] = False
-
- route_name = self.params.get('name') or service_name
- labels = self.params.get('labels')
- hostname = self.params.get('hostname')
- path = self.params.get('path')
- wildcard_policy = self.params.get('wildcard_policy')
- port = self.params.get('port')
- annotations = self.params.get('annotations')
-
- if termination_type and self.params.get('tls'):
- tls_ca_cert = self.params['tls'].get('ca_certificate')
- tls_cert = self.params['tls'].get('certificate')
- tls_dest_ca_cert = self.params['tls'].get('destination_ca_certificate')
- tls_key = self.params['tls'].get('key')
- tls_insecure_policy = self.params['tls'].get('insecure_policy')
- if tls_insecure_policy == 'disallow':
+ self.params["wait"] = False
+
+ route_name = self.params.get("name") or service_name
+ labels = self.params.get("labels")
+ hostname = self.params.get("hostname")
+ path = self.params.get("path")
+ wildcard_policy = self.params.get("wildcard_policy")
+ port = self.params.get("port")
+ annotations = self.params.get("annotations")
+
+ if termination_type and self.params.get("tls"):
+ tls_ca_cert = self.params["tls"].get("ca_certificate")
+ tls_cert = self.params["tls"].get("certificate")
+ tls_dest_ca_cert = self.params["tls"].get("destination_ca_certificate")
+ tls_key = self.params["tls"].get("key")
+ tls_insecure_policy = self.params["tls"].get("insecure_policy")
+ if tls_insecure_policy == "disallow":
tls_insecure_policy = None
else:
- tls_ca_cert = tls_cert = tls_dest_ca_cert = tls_key = tls_insecure_policy = None
+ tls_ca_cert = (
+ tls_cert
+ ) = tls_dest_ca_cert = tls_key = tls_insecure_policy = None
route = {
- 'apiVersion': 'route.openshift.io/v1',
- 'kind': 'Route',
- 'metadata': {
- 'name': route_name,
- 'namespace': namespace,
- 'labels': labels,
+ "apiVersion": "route.openshift.io/v1",
+ "kind": "Route",
+ "metadata": {
+ "name": route_name,
+ "namespace": namespace,
+ "labels": labels,
},
- 'spec': {}
+ "spec": {},
}
if annotations:
- route['metadata']['annotations'] = annotations
+ route["metadata"]["annotations"] = annotations
- if state != 'absent':
- route['spec'] = self.build_route_spec(
- service_name, namespace,
+ if state != "absent":
+ route["spec"] = self.build_route_spec(
+ service_name,
+ namespace,
port=port,
wildcard_policy=wildcard_policy,
hostname=hostname,
@@ -434,79 +456,120 @@ class OpenShiftRoute(AnsibleOpenshiftModule):
)
result = perform_action(self.svc, route, self.params)
- timeout = self.params.get('wait_timeout')
- sleep = self.params.get('wait_sleep')
+ timeout = self.params.get("wait_timeout")
+ sleep = self.params.get("wait_sleep")
if custom_wait:
- v1_routes = self.find_resource('Route', 'route.openshift.io/v1', fail=True)
+ v1_routes = self.find_resource("Route", "route.openshift.io/v1", fail=True)
waiter = Waiter(self.client, v1_routes, wait_predicate)
- success, result['result'], result['duration'] = waiter.wait(timeout=timeout, sleep=sleep, name=route_name, namespace=namespace)
+ success, result["result"], result["duration"] = waiter.wait(
+ timeout=timeout, sleep=sleep, name=route_name, namespace=namespace
+ )
self.exit_json(**result)
- def build_route_spec(self, service_name, namespace, port=None, wildcard_policy=None, hostname=None, path=None, termination_type=None,
- tls_insecure_policy=None, tls_ca_cert=None, tls_cert=None, tls_key=None, tls_dest_ca_cert=None):
- v1_services = self.find_resource('Service', 'v1', fail=True)
+ def build_route_spec(
+ self,
+ service_name,
+ namespace,
+ port=None,
+ wildcard_policy=None,
+ hostname=None,
+ path=None,
+ termination_type=None,
+ tls_insecure_policy=None,
+ tls_ca_cert=None,
+ tls_cert=None,
+ tls_key=None,
+ tls_dest_ca_cert=None,
+ ):
+ v1_services = self.find_resource("Service", "v1", fail=True)
try:
target_service = v1_services.get(name=service_name, namespace=namespace)
except NotFoundError:
if not port:
- self.fail_json(msg="You need to provide the 'port' argument when exposing a non-existent service")
+ self.fail_json(
+ msg="You need to provide the 'port' argument when exposing a non-existent service"
+ )
target_service = None
except DynamicApiError as exc:
- self.fail_json(msg='Failed to retrieve service to be exposed: {0}'.format(exc.body),
- error=exc.status, status=exc.status, reason=exc.reason)
+ self.fail_json(
+ msg="Failed to retrieve service to be exposed: {0}".format(exc.body),
+ error=exc.status,
+ status=exc.status,
+ reason=exc.reason,
+ )
except Exception as exc:
- self.fail_json(msg='Failed to retrieve service to be exposed: {0}'.format(to_native(exc)),
- error='', status='', reason='')
+ self.fail_json(
+ msg="Failed to retrieve service to be exposed: {0}".format(
+ to_native(exc)
+ ),
+ error="",
+ status="",
+ reason="",
+ )
route_spec = {
- 'tls': {},
- 'to': {
- 'kind': 'Service',
- 'name': service_name,
+ "tls": {},
+ "to": {
+ "kind": "Service",
+ "name": service_name,
},
- 'port': {
- 'targetPort': self.set_port(target_service, port),
+ "port": {
+ "targetPort": self.set_port(target_service, port),
},
- 'wildcardPolicy': wildcard_policy
+ "wildcardPolicy": wildcard_policy,
}
# Want to conditionally add these so we don't overwrite what is automically added when nothing is provided
if termination_type:
- route_spec['tls'] = dict(termination=termination_type.capitalize())
+ route_spec["tls"] = dict(termination=termination_type.capitalize())
if tls_insecure_policy:
- if termination_type == 'edge':
- route_spec['tls']['insecureEdgeTerminationPolicy'] = tls_insecure_policy.capitalize()
- elif termination_type == 'passthrough':
- if tls_insecure_policy != 'redirect':
- self.fail_json("'redirect' is the only supported insecureEdgeTerminationPolicy for passthrough routes")
- route_spec['tls']['insecureEdgeTerminationPolicy'] = tls_insecure_policy.capitalize()
- elif termination_type == 'reencrypt':
- self.fail_json("'tls.insecure_policy' is not supported with reencrypt routes")
+ if termination_type == "edge":
+ route_spec["tls"][
+ "insecureEdgeTerminationPolicy"
+ ] = tls_insecure_policy.capitalize()
+ elif termination_type == "passthrough":
+ if tls_insecure_policy != "redirect":
+ self.fail_json(
+ "'redirect' is the only supported insecureEdgeTerminationPolicy for passthrough routes"
+ )
+ route_spec["tls"][
+ "insecureEdgeTerminationPolicy"
+ ] = tls_insecure_policy.capitalize()
+ elif termination_type == "reencrypt":
+ self.fail_json(
+ "'tls.insecure_policy' is not supported with reencrypt routes"
+ )
else:
- route_spec['tls']['insecureEdgeTerminationPolicy'] = None
+ route_spec["tls"]["insecureEdgeTerminationPolicy"] = None
if tls_ca_cert:
- if termination_type == 'passthrough':
- self.fail_json("'tls.ca_certificate' is not supported with passthrough routes")
- route_spec['tls']['caCertificate'] = tls_ca_cert
+ if termination_type == "passthrough":
+ self.fail_json(
+ "'tls.ca_certificate' is not supported with passthrough routes"
+ )
+ route_spec["tls"]["caCertificate"] = tls_ca_cert
if tls_cert:
- if termination_type == 'passthrough':
- self.fail_json("'tls.certificate' is not supported with passthrough routes")
- route_spec['tls']['certificate'] = tls_cert
+ if termination_type == "passthrough":
+ self.fail_json(
+ "'tls.certificate' is not supported with passthrough routes"
+ )
+ route_spec["tls"]["certificate"] = tls_cert
if tls_key:
- if termination_type == 'passthrough':
+ if termination_type == "passthrough":
self.fail_json("'tls.key' is not supported with passthrough routes")
- route_spec['tls']['key'] = tls_key
+ route_spec["tls"]["key"] = tls_key
if tls_dest_ca_cert:
- if termination_type != 'reencrypt':
- self.fail_json("'destination_certificate' is only valid for reencrypt routes")
- route_spec['tls']['destinationCACertificate'] = tls_dest_ca_cert
+ if termination_type != "reencrypt":
+ self.fail_json(
+ "'destination_certificate' is only valid for reencrypt routes"
+ )
+ route_spec["tls"]["destinationCACertificate"] = tls_dest_ca_cert
else:
- route_spec['tls'] = None
+ route_spec["tls"] = None
if hostname:
- route_spec['host'] = hostname
+ route_spec["host"] = hostname
if path:
- route_spec['path'] = path
+ route_spec["path"] = path
return route_spec
@@ -514,7 +577,7 @@ class OpenShiftRoute(AnsibleOpenshiftModule):
if port_arg:
return port_arg
for p in service.spec.ports:
- if p.protocol == 'TCP':
+ if p.protocol == "TCP":
if p.name is not None:
return p.name
return p.targetPort
@@ -525,7 +588,7 @@ def wait_predicate(route):
if not (route.status and route.status.ingress):
return False
for ingress in route.status.ingress:
- match = [x for x in ingress.conditions if x.type == 'Admitted']
+ match = [x for x in ingress.conditions if x.type == "Admitted"]
if not match:
return False
match = match[0]
@@ -538,5 +601,5 @@ def main():
OpenShiftRoute().run_module()
-if __name__ == '__main__':
+if __name__ == "__main__":
main()
diff --git a/ansible_collections/community/okd/requirements.yml b/ansible_collections/community/okd/requirements.yml
index d7d4e6f7a..ac7b465f0 100644
--- a/ansible_collections/community/okd/requirements.yml
+++ b/ansible_collections/community/okd/requirements.yml
@@ -1,3 +1,4 @@
+---
collections:
- name: kubernetes.core
- version: '>=2.4.0'
+ version: '>=3.0.0'
diff --git a/ansible_collections/community/okd/setup.cfg b/ansible_collections/community/okd/setup.cfg
deleted file mode 100644
index 29c924b86..000000000
--- a/ansible_collections/community/okd/setup.cfg
+++ /dev/null
@@ -1,3 +0,0 @@
-[flake8]
-max-line-length = 160
-ignore = W503,E402
diff --git a/ansible_collections/community/okd/test-requirements.txt b/ansible_collections/community/okd/test-requirements.txt
index 7f234688f..99e8534cb 100644
--- a/ansible_collections/community/okd/test-requirements.txt
+++ b/ansible_collections/community/okd/test-requirements.txt
@@ -2,3 +2,4 @@ coverage==4.5.4
pytest
pytest-xdist
pytest-forked
+pytest-ansible
diff --git a/ansible_collections/community/okd/tests/config.yml b/ansible_collections/community/okd/tests/config.yml
index 9e402bda7..c26ea5966 100644
--- a/ansible_collections/community/okd/tests/config.yml
+++ b/ansible_collections/community/okd/tests/config.yml
@@ -1,2 +1,3 @@
+---
modules:
- python_requires: ">=3.6"
+ python_requires: ">=3.9"
diff --git a/ansible_collections/community/okd/tests/sanity/ignore-2.16.txt b/ansible_collections/community/okd/tests/sanity/ignore-2.16.txt
new file mode 100644
index 000000000..2fd2bdc90
--- /dev/null
+++ b/ansible_collections/community/okd/tests/sanity/ignore-2.16.txt
@@ -0,0 +1,3 @@
+plugins/modules/k8s.py validate-modules:parameter-type-not-in-doc
+plugins/modules/k8s.py validate-modules:return-syntax-error
+plugins/modules/openshift_process.py validate-modules:parameter-type-not-in-doc \ No newline at end of file
diff --git a/ansible_collections/community/okd/tests/sanity/ignore-2.17.txt b/ansible_collections/community/okd/tests/sanity/ignore-2.17.txt
new file mode 100644
index 000000000..2fd2bdc90
--- /dev/null
+++ b/ansible_collections/community/okd/tests/sanity/ignore-2.17.txt
@@ -0,0 +1,3 @@
+plugins/modules/k8s.py validate-modules:parameter-type-not-in-doc
+plugins/modules/k8s.py validate-modules:return-syntax-error
+plugins/modules/openshift_process.py validate-modules:parameter-type-not-in-doc \ No newline at end of file
diff --git a/ansible_collections/community/okd/tests/sanity/requirements.yml b/ansible_collections/community/okd/tests/sanity/requirements.yml
new file mode 100644
index 000000000..244be516f
--- /dev/null
+++ b/ansible_collections/community/okd/tests/sanity/requirements.yml
@@ -0,0 +1,5 @@
+---
+collections:
+ - name: https://github.com/ansible-collections/kubernetes.core.git
+ type: git
+ version: main
diff --git a/ansible_collections/community/okd/tests/unit/plugins/module_utils/test_ldap_dn.py b/ansible_collections/community/okd/tests/unit/plugins/module_utils/test_ldap_dn.py
index 5835f36d7..c312f3b02 100644
--- a/ansible_collections/community/okd/tests/unit/plugins/module_utils/test_ldap_dn.py
+++ b/ansible_collections/community/okd/tests/unit/plugins/module_utils/test_ldap_dn.py
@@ -5,28 +5,44 @@ __metaclass__ = type
from ansible_collections.community.okd.plugins.module_utils.openshift_ldap import (
openshift_equal_dn,
- openshift_ancestorof_dn
+ openshift_ancestorof_dn,
)
import pytest
try:
- import ldap
+ import ldap # pylint: disable=unused-import
except ImportError:
pytestmark = pytest.mark.skip("This test requires the python-ldap library")
def test_equal_dn():
-
- assert openshift_equal_dn("cn=unit,ou=users,dc=ansible,dc=com", "cn=unit,ou=users,dc=ansible,dc=com")
- assert not openshift_equal_dn("cn=unit,ou=users,dc=ansible,dc=com", "cn=units,ou=users,dc=ansible,dc=com")
- assert not openshift_equal_dn("cn=unit,ou=users,dc=ansible,dc=com", "cn=unit,ou=user,dc=ansible,dc=com")
- assert not openshift_equal_dn("cn=unit,ou=users,dc=ansible,dc=com", "cn=unit,ou=users,dc=ansible,dc=org")
+ assert openshift_equal_dn(
+ "cn=unit,ou=users,dc=ansible,dc=com", "cn=unit,ou=users,dc=ansible,dc=com"
+ )
+ assert not openshift_equal_dn(
+ "cn=unit,ou=users,dc=ansible,dc=com", "cn=units,ou=users,dc=ansible,dc=com"
+ )
+ assert not openshift_equal_dn(
+ "cn=unit,ou=users,dc=ansible,dc=com", "cn=unit,ou=user,dc=ansible,dc=com"
+ )
+ assert not openshift_equal_dn(
+ "cn=unit,ou=users,dc=ansible,dc=com", "cn=unit,ou=users,dc=ansible,dc=org"
+ )
def test_ancestor_of_dn():
-
- assert not openshift_ancestorof_dn("cn=unit,ou=users,dc=ansible,dc=com", "cn=unit,ou=users,dc=ansible,dc=com")
- assert not openshift_ancestorof_dn("cn=unit,ou=users,dc=ansible,dc=com", "cn=units,ou=users,dc=ansible,dc=com")
- assert openshift_ancestorof_dn("ou=users,dc=ansible,dc=com", "cn=john,ou=users,dc=ansible,dc=com")
- assert openshift_ancestorof_dn("ou=users,dc=ansible,dc=com", "cn=mathew,ou=users,dc=ansible,dc=com")
- assert not openshift_ancestorof_dn("ou=users,dc=ansible,dc=com", "cn=mathew,ou=users,dc=ansible,dc=org")
+ assert not openshift_ancestorof_dn(
+ "cn=unit,ou=users,dc=ansible,dc=com", "cn=unit,ou=users,dc=ansible,dc=com"
+ )
+ assert not openshift_ancestorof_dn(
+ "cn=unit,ou=users,dc=ansible,dc=com", "cn=units,ou=users,dc=ansible,dc=com"
+ )
+ assert openshift_ancestorof_dn(
+ "ou=users,dc=ansible,dc=com", "cn=john,ou=users,dc=ansible,dc=com"
+ )
+ assert openshift_ancestorof_dn(
+ "ou=users,dc=ansible,dc=com", "cn=mathew,ou=users,dc=ansible,dc=com"
+ )
+ assert not openshift_ancestorof_dn(
+ "ou=users,dc=ansible,dc=com", "cn=mathew,ou=users,dc=ansible,dc=org"
+ )
diff --git a/ansible_collections/community/okd/tests/unit/plugins/module_utils/test_ldap_sync_config.py b/ansible_collections/community/okd/tests/unit/plugins/module_utils/test_ldap_sync_config.py
index 1a8ef67e2..303b66f4b 100644
--- a/ansible_collections/community/okd/tests/unit/plugins/module_utils/test_ldap_sync_config.py
+++ b/ansible_collections/community/okd/tests/unit/plugins/module_utils/test_ldap_sync_config.py
@@ -9,28 +9,26 @@ from ansible_collections.community.okd.plugins.module_utils.openshift_ldap impor
def test_missing_url():
- config = dict(
- kind="LDAPSyncConfig",
- apiVersion="v1",
- insecure=True
- )
+ config = dict(kind="LDAPSyncConfig", apiVersion="v1", insecure=True)
err = validate_ldap_sync_config(config)
assert err == "url should be non empty attribute."
def test_binddn_and_bindpwd_linked():
"""
- one of bind_dn and bind_pwd cannot be set alone
+ one of bind_dn and bind_pwd cannot be set alone
"""
config = dict(
kind="LDAPSyncConfig",
apiVersion="v1",
url="ldap://LDAP_SERVICE_IP:389",
insecure=True,
- bindDN="cn=admin,dc=example,dc=org"
+ bindDN="cn=admin,dc=example,dc=org",
)
- credentials_error = "bindDN and bindPassword must both be specified, or both be empty."
+ credentials_error = (
+ "bindDN and bindPassword must both be specified, or both be empty."
+ )
assert validate_ldap_sync_config(config) == credentials_error
@@ -39,7 +37,7 @@ def test_binddn_and_bindpwd_linked():
apiVersion="v1",
url="ldap://LDAP_SERVICE_IP:389",
insecure=True,
- bindPassword="testing1223"
+ bindPassword="testing1223",
)
assert validate_ldap_sync_config(config) == credentials_error
@@ -53,11 +51,13 @@ def test_insecure_connection():
insecure=True,
)
- assert validate_ldap_sync_config(config) == "Cannot use ldaps scheme with insecure=true."
+ assert (
+ validate_ldap_sync_config(config)
+ == "Cannot use ldaps scheme with insecure=true."
+ )
- config.update(dict(
- url="ldap://LDAP_SERVICE_IP:389",
- ca="path/to/ca/file"
- ))
+ config.update(dict(url="ldap://LDAP_SERVICE_IP:389", ca="path/to/ca/file"))
- assert validate_ldap_sync_config(config) == "Cannot specify a ca with insecure=true."
+ assert (
+ validate_ldap_sync_config(config) == "Cannot specify a ca with insecure=true."
+ )
diff --git a/ansible_collections/community/okd/tests/unit/plugins/module_utils/test_openshift_docker_image.py b/ansible_collections/community/okd/tests/unit/plugins/module_utils/test_openshift_docker_image.py
index 99cf15cc5..d23f9f186 100644
--- a/ansible_collections/community/okd/tests/unit/plugins/module_utils/test_openshift_docker_image.py
+++ b/ansible_collections/community/okd/tests/unit/plugins/module_utils/test_openshift_docker_image.py
@@ -11,7 +11,6 @@ import pytest
def test_convert_storage_to_bytes():
-
data = [
("1000", 1000),
("1000Ki", 1000 * 1024),
@@ -54,46 +53,48 @@ def validate_docker_response(resp, **kwargs):
def test_parse_docker_image_ref_valid_image_with_digest():
-
image = "registry.access.redhat.com/ubi8/dotnet-21@sha256:f7718f5efd3436e781ee4322c92ab0c4ae63e61f5b36f1473a57874cc3522669"
response, err = parse_docker_image_ref(image)
assert err is None
- validate_docker_response(response,
- hostname="registry.access.redhat.com",
- namespace="ubi8",
- name="dotnet-21",
- digest="sha256:f7718f5efd3436e781ee4322c92ab0c4ae63e61f5b36f1473a57874cc3522669")
+ validate_docker_response(
+ response,
+ hostname="registry.access.redhat.com",
+ namespace="ubi8",
+ name="dotnet-21",
+ digest="sha256:f7718f5efd3436e781ee4322c92ab0c4ae63e61f5b36f1473a57874cc3522669",
+ )
def test_parse_docker_image_ref_valid_image_with_tag_latest():
-
image = "registry.access.redhat.com/ubi8/dotnet-21:latest"
response, err = parse_docker_image_ref(image)
assert err is None
- validate_docker_response(response,
- hostname="registry.access.redhat.com",
- namespace="ubi8",
- name="dotnet-21",
- tag="latest")
+ validate_docker_response(
+ response,
+ hostname="registry.access.redhat.com",
+ namespace="ubi8",
+ name="dotnet-21",
+ tag="latest",
+ )
def test_parse_docker_image_ref_valid_image_with_tag_int():
-
image = "registry.access.redhat.com/ubi8/dotnet-21:0.0.1"
response, err = parse_docker_image_ref(image)
assert err is None
- validate_docker_response(response,
- hostname="registry.access.redhat.com",
- namespace="ubi8",
- name="dotnet-21",
- tag="0.0.1")
+ validate_docker_response(
+ response,
+ hostname="registry.access.redhat.com",
+ namespace="ubi8",
+ name="dotnet-21",
+ tag="0.0.1",
+ )
def test_parse_docker_image_ref_invalid_image():
-
# The hex value of the sha256 is not valid
image = "registry.access.redhat.com/dotnet-21@sha256:f7718f5efd3436e781ee4322c92ab0c4ae63e61f5b36f1473a57874cc3522"
response, err = parse_docker_image_ref(image)
@@ -101,7 +102,6 @@ def test_parse_docker_image_ref_invalid_image():
def test_parse_docker_image_ref_valid_image_without_hostname():
-
image = "ansible:2.10.0"
response, err = parse_docker_image_ref(image)
assert err is None
@@ -110,16 +110,18 @@ def test_parse_docker_image_ref_valid_image_without_hostname():
def test_parse_docker_image_ref_valid_image_without_hostname_and_with_digest():
-
image = "ansible@sha256:f7718f5efd3436e781ee4322c92ab0c4ae63e61f5b36f1473a57874cc3522669"
response, err = parse_docker_image_ref(image)
assert err is None
- validate_docker_response(response, name="ansible", digest="sha256:f7718f5efd3436e781ee4322c92ab0c4ae63e61f5b36f1473a57874cc3522669")
+ validate_docker_response(
+ response,
+ name="ansible",
+ digest="sha256:f7718f5efd3436e781ee4322c92ab0c4ae63e61f5b36f1473a57874cc3522669",
+ )
def test_parse_docker_image_ref_valid_image_with_name_only():
-
image = "ansible"
response, err = parse_docker_image_ref(image)
assert err is None
@@ -128,25 +130,27 @@ def test_parse_docker_image_ref_valid_image_with_name_only():
def test_parse_docker_image_ref_valid_image_without_hostname_with_namespace_and_name():
-
image = "ibmcom/pause@sha256:fcaff905397ba63fd376d0c3019f1f1cb6e7506131389edbcb3d22719f1ae54d"
response, err = parse_docker_image_ref(image)
assert err is None
- validate_docker_response(response,
- name="pause",
- namespace="ibmcom",
- digest="sha256:fcaff905397ba63fd376d0c3019f1f1cb6e7506131389edbcb3d22719f1ae54d")
+ validate_docker_response(
+ response,
+ name="pause",
+ namespace="ibmcom",
+ digest="sha256:fcaff905397ba63fd376d0c3019f1f1cb6e7506131389edbcb3d22719f1ae54d",
+ )
def test_parse_docker_image_ref_valid_image_with_complex_namespace_name():
-
image = "registry.redhat.io/jboss-webserver-5/webserver54-openjdk11-tomcat9-openshift-rhel7:1.0"
response, err = parse_docker_image_ref(image)
assert err is None
- validate_docker_response(response,
- hostname="registry.redhat.io",
- name="webserver54-openjdk11-tomcat9-openshift-rhel7",
- namespace="jboss-webserver-5",
- tag="1.0")
+ validate_docker_response(
+ response,
+ hostname="registry.redhat.io",
+ name="webserver54-openjdk11-tomcat9-openshift-rhel7",
+ namespace="jboss-webserver-5",
+ tag="1.0",
+ )
diff --git a/ansible_collections/junipernetworks/junos/tox.ini b/ansible_collections/community/okd/tox.ini
index 55a02e59e..57fd1d921 100644
--- a/ansible_collections/junipernetworks/junos/tox.ini
+++ b/ansible_collections/community/okd/tox.ini
@@ -1,32 +1,37 @@
-
[tox]
-minversion = 1.4.2
-envlist = linters
skipsdist = True
[testenv]
deps = -r{toxinidir}/requirements.txt
-r{toxinidir}/test-requirements.txt
+install_command = pip install {opts} {packages}
[testenv:black]
-install_command = pip install {opts} {packages}
+deps =
+ black >= 23.0, < 24.0
+
commands =
- black -v {toxinidir}
+ black {toxinidir}/plugins {toxinidir}/tests
-[testenv:linters]
-install_command = pip install {opts} {packages}
+[testenv:ansible-lint]
+deps =
+ ansible-lint==6.21.0
+changedir = {toxinidir}
commands =
- black -v --diff --check {toxinidir}
- flake8 {posargs}
+ ansible-lint
-[testenv:venv]
-commands = {posargs}
+[testenv:linters]
+deps =
+ flake8
+ {[testenv:black]deps}
+
+commands =
+ black -v --check --diff {toxinidir}/plugins {toxinidir}/tests
+ flake8 {toxinidir}
[flake8]
# E123, E125 skipped as they are invalid PEP-8.
-
-show-source = True
+exclude = .git,.tox,tests/output
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/community/postgresql/.azure-pipelines/azure-pipelines.yml b/ansible_collections/community/postgresql/.azure-pipelines/azure-pipelines.yml
index 28f8b2497..431614af9 100644
--- a/ansible_collections/community/postgresql/.azure-pipelines/azure-pipelines.yml
+++ b/ansible_collections/community/postgresql/.azure-pipelines/azure-pipelines.yml
@@ -75,6 +75,18 @@ stages:
- name: Units
test: 'devel/units/1'
+ - stage: Ansible_2_17
+ displayName: Sanity & Units 2.17
+ dependsOn: []
+ jobs:
+ - template: templates/matrix.yml
+ parameters:
+ targets:
+ - name: Sanity
+ test: '2.17/sanity/1'
+ - name: Units
+ test: '2.17/units/1'
+
- stage: Ansible_2_16
displayName: Sanity & Units 2.16
dependsOn: []
@@ -127,6 +139,21 @@ stages:
- name: Ubuntu 22.04
test: ubuntu2204
+ - stage: Docker_2_17
+ displayName: Docker 2.17
+ dependsOn: []
+ jobs:
+ - template: templates/matrix.yml
+ parameters:
+ testFormat: 2.17/linux/{0}/1
+ targets:
+ - name: Fedora 39
+ test: fedora39
+ - name: Ubuntu 20.04
+ test: ubuntu2004
+ - name: Ubuntu 22.04
+ test: ubuntu2204
+
- stage: Docker_2_16
displayName: Docker 2.16
dependsOn: []
@@ -186,6 +213,17 @@ stages:
- name: RHEL 9.3
test: rhel/9.3
+ - stage: Remote_2_17
+ displayName: Remote 2.17
+ dependsOn: []
+ jobs:
+ - template: templates/matrix.yml
+ parameters:
+ testFormat: 2.17/{0}/1
+ targets:
+ - name: RHEL 9.3
+ test: rhel/9.3
+
- stage: Remote_2_16
displayName: Remote 2.16
dependsOn: []
@@ -225,14 +263,17 @@ stages:
condition: succeededOrFailed()
dependsOn:
- Ansible_devel
+ - Ansible_2_17
- Ansible_2_16
- Ansible_2_15
- Ansible_2_14
- Docker_devel
+ - Docker_2_17
- Docker_2_16
- Docker_2_15
- Docker_2_14
- Remote_devel
+ - Remote_2_17
- Remote_2_16
- Remote_2_15
- Remote_2_14
diff --git a/ansible_collections/community/postgresql/CHANGELOG.rst b/ansible_collections/community/postgresql/CHANGELOG.rst
index d9990ab6a..fc0805301 100644
--- a/ansible_collections/community/postgresql/CHANGELOG.rst
+++ b/ansible_collections/community/postgresql/CHANGELOG.rst
@@ -5,6 +5,24 @@ Community PostgreSQL Collection Release Notes
.. contents:: Topics
+v3.4.1
+======
+
+Release Summary
+---------------
+
+This is a patch release of the ``community.postgresql`` collection.
+This changelog contains all changes to the modules and plugins in this collection
+that have been added after the release of ``community.postgresql`` 3.4.0.
+
+Bugfixes
+--------
+
+- 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).
+
v3.4.0
======
diff --git a/ansible_collections/community/postgresql/CONTRIBUTING.md b/ansible_collections/community/postgresql/CONTRIBUTING.md
index ecb18f74a..8beed5512 100644
--- a/ansible_collections/community/postgresql/CONTRIBUTING.md
+++ b/ansible_collections/community/postgresql/CONTRIBUTING.md
@@ -1,12 +1,85 @@
-# Contributing
+# Contributing to this project
-Refer to the [Ansible Contributing guidelines](https://docs.ansible.com/ansible/devel/community/index.html) to learn how to contribute to this collection.
+In this guide, you will find information relevant for code contributions, though any other kinds of contribution mentioned in the [Ansible Contributing guidelines](https://docs.ansible.com/ansible/devel/community/index.html) are equally appreciated and valuable.
-Refer to the [review checklist](https://docs.ansible.com/ansible/devel/community/collection_contributors/collection_reviewing.html) when triaging issues or reviewing PRs.
+If you have any questions after reading, please contact the community via one or more of the [available channels](https://github.com/ansible-collections/community.postgresql#communication). Any feedback on this guide is very welcome.
+
+## Reviewing open issue and pull requests
+
+Refer to the [review checklist](https://docs.ansible.com/ansible/devel/community/collection_contributors/collection_reviewing.html) when triaging issues or reviewing pull requests (hereinafter PRs).
+
+Most important things to pay attention to:
+
+- Do not let major/breaking changes sneak into a minor/bugfix release! All such changes should be discussed in a dedicated issue, added to a corresponding milestone (which can be found or created in the project's Issues), and merged right before the major release. Take a look at similar issues to see what needs to be done and reflect on the steps you did/need to do in the issue.
+- Every PR (except doc, refactoring, test-related, or a PR containing a new module/plugin) contains a [changelog fragment](https://docs.ansible.com/ansible/latest/community/development_process.html#creating-a-changelog-fragment). Let's give users a chance to know about the changes.
+- Every new module `DOCUMENTATION` section contains the `version_added: 'x.y.z'` field. Besides the informative purpose, it is used by the changelog-generating tool to add a corresponding entry to the changelog. As the project follows SemVer, it is typically a next minor (x.y.0) version.
+- Every new module argument contains the `version_added: 'x.y.z'` field. As the project follows SemVer, it is typically a next minor (x.y.0) version.
+- Non-refactoring code changes (bugfixes, new features) are covered with, at least, integration tests! There can be exceptions but generally it is a requirement.
+
+## Code contributions
+
+If you want to submit a bugfix or new feature, refer to the [Quick-start development guide](https://docs.ansible.com/ansible/devel/community/create_pr_quick_start.html) first.
+
+## Project-specific info
+
+We assume you have read the [Quick-start development guide](https://docs.ansible.com/ansible/devel/community/create_pr_quick_start.html).
+
+In order for any submitted PR to get merged, this project requires sanity, unit, and integration tests to pass.
+Codecov job is there but not required.
+We use the Azure Pipelines platform to run the tests.
+You can see the result in the bottom of every PR in the box listing the jobs and their results:
+
+- Green checkmark: the test has been passed, no more action is needed.
+- Red cross: the test has failed. You can see the reason by clicking the ``Details`` link. Fix them locally and push the commit.
+
+Generally, all jobs must be green.
+Sometimes, there can be failures unrelated to a PR, for example, when a test container is unavailable or there is another part of the code that does not satisfy recently introduced additional sanity checks.
+If you think the failure does not relate to your changes, put a comment about it.
+
+## CI testing
+
+The jobs are launched automatically by Azure Pipelines in every PR based on the [matrix](https://github.com/ansible-collections/community.postgresql/blob/main/.azure-pipelines/azure-pipelines.yml).
+
+As the project is included in `ansible` community package, it is a requirement for us to test against all supported `ansible-core` versions and corresponding Python versions.
+To keep the matrix relevant, we are subscribed to the [news-for-maintainers](https://github.com/ansible-collections/news-for-maintainers) repository and the [Collection maintainers & contributors](https://forum.ansible.com/g/CollectionMaintainer) forum group to track announcements affecting CI.
+
+If our matrix is permanently outdated, for example, when supported `ansible-core` versions are missed, the collections can get excluded from the package, so keep it updated!
+
+## Adding tests
+
+If you are new here, read the [Quick-start development guide](https://docs.ansible.com/ansible/devel/community/create_pr_quick_start.html) first.
+
+When fixing a bug, first reproduce it by adding a task as reported to a suitable file under the ``tests/integration/targets/<module_name>/tasks/`` directory and run the integration tests as described below. The same is relevant for new features.
+
+It is not necessary but if you want you can also add unit tests to a suitable file under the ``tests/units/`` directory and run them as described below.
## Checking your code locally
-### By hand
+It will make your and other people's life a bit easier if you run the tests locally and fix all failures before pushing. If you're unable to run the tests locally, please create your PR as a **draft** to avoid reviewers being added automatically.
+
+If you are new here, read the [Quick-start development guide](https://docs.ansible.com/ansible/devel/community/create_pr_quick_start.html) first.
+
+We assume you [prepared your local environment](https://docs.ansible.com/ansible/devel/community/create_pr_quick_start.html#prepare-your-environment) as described in the guide before running the following commands. Otherwise, the command will fail.
+
+### Sanity tests
+
+``` console
+$ ansible-test sanity path/to/changed_file.py --docker -v
+```
+
+### Integration tests
+
+``` console
+$ ansible-test integration <module_name you changed> --docker <container, e.g. ubuntu2204> -v
+```
+
+### Unit tests
+
+``` console
+$ ansible-test units tests/unit/plugins/unit_test_file.py --docker
+```
+
+### tox
You can run flake8 with tox to verify the quality of your code. For that you
can simply call tox with that command:
@@ -14,8 +87,8 @@ can simply call tox with that command:
$ tox -e lint
```
-If you tox is missing on your environment you can probably install it through
-your package manager (Eg: `sudo apt install tox`) or with pip (within a
+If tox is missing on your environment you can probably install it through
+your package manager (for example, `sudo apt install tox`) or with pip (within a
virtualenv):
``` console
diff --git a/ansible_collections/community/postgresql/FILES.json b/ansible_collections/community/postgresql/FILES.json
index 4302f209c..5619dc342 100644
--- a/ansible_collections/community/postgresql/FILES.json
+++ b/ansible_collections/community/postgresql/FILES.json
@@ -109,7 +109,7 @@
"name": ".azure-pipelines/azure-pipelines.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d51571bbcb9d9cd269b46558fbd86071be6a450a189a5383a38b2da0b14b1c86",
+ "chksum_sha256": "21c5919dd3e83d15b1fe22120b78b236f87440c760ba0461aae5a9cb8c1f943b",
"format": 1
},
{
@@ -158,7 +158,7 @@
"name": "changelogs/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b9669874dadda6fc914c52186ac175b590b7c2c4481da2896dbfaad9d36ea263",
+ "chksum_sha256": "c64b2b9cd3bcd7a5cf4ded207014b072f448416c29f652112ea6c0c168b6fc51",
"format": 1
},
{
@@ -284,21 +284,21 @@
"name": "plugins/modules/postgresql_db.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ee2ae220616261dee6e44204168ec6e67e5cdb89d5fb8cb8a79a3d9969800219",
+ "chksum_sha256": "74361df6b6b5c08dfbae2ce2e06c259a7dc0de5e1ee9cd0e1fe036de75c3ac26",
"format": 1
},
{
"name": "plugins/modules/postgresql_ext.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4e715015d05e5273e6a5c78720e837a31d0b65d8c059242391602d7258401248",
+ "chksum_sha256": "d7685a5e6aa6a012b04f6d473d2e525f3077e857ee3aba4883a47f42312f3c37",
"format": 1
},
{
"name": "plugins/modules/postgresql_idx.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3113e2c7531aaf65c8c5996cdd0906d4a3a4ad603a7eb90ec6c2a61011ef8dbb",
+ "chksum_sha256": "e5cad7d80e230faef5fe681aea7b90eba0a485d70240748d6a0fe14f283d90d1",
"format": 1
},
{
@@ -347,7 +347,7 @@
"name": "plugins/modules/postgresql_privs.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "84b979c32e98cbe03a96ff07b009e5c53a24910289498dd2ba15e850417bbe66",
+ "chksum_sha256": "54b343e1e1699ac2b0c0b562f3552ec57a52370805f215024b76c6d75cf4b299",
"format": 1
},
{
@@ -2339,6 +2339,13 @@
"format": 1
},
{
+ "name": "tests/sanity/ignore-2.18.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f1e2e4351ae7e8b366042aef4f75e1a4df73a64203296484944df297ddbfbdf0",
+ "format": 1
+ },
+ {
"name": "tests/unit",
"ftype": "dir",
"chksum_type": null,
@@ -2538,14 +2545,14 @@
"name": "CHANGELOG.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "02924d737dff1a6dd5b7e9a137a2c426526ec976780e141bfdfb3262e29557b6",
+ "chksum_sha256": "383aef409d69d0aa94f226597152f8d42c43a1eed6339098fb6207f9511cd0fa",
"format": 1
},
{
"name": "CONTRIBUTING.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e1b3cbadfbb785585ca2c984365edef37a0d813798ad5c8ea7c296135045f9ee",
+ "chksum_sha256": "6131e3c155206d545289e3f13aca82a0d9f0a0a6dfa47fb8616fd6a5f8613b2f",
"format": 1
},
{
@@ -2580,7 +2587,7 @@
"name": "README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "522dc34d303faf3a818d0a57b1a7b9a7338f3acdadd55de2226ef7720765246f",
+ "chksum_sha256": "375a82d12ffaa2bfae010228498554f9f16f375050379950febc5a7f031aa4eb",
"format": 1
},
{
diff --git a/ansible_collections/community/postgresql/MANIFEST.json b/ansible_collections/community/postgresql/MANIFEST.json
index b16ee0f4d..672a8aa0c 100644
--- a/ansible_collections/community/postgresql/MANIFEST.json
+++ b/ansible_collections/community/postgresql/MANIFEST.json
@@ -2,7 +2,7 @@
"collection_info": {
"namespace": "community",
"name": "postgresql",
- "version": "3.4.0",
+ "version": "3.4.1",
"authors": [
"Ansible PostgreSQL community"
],
@@ -25,7 +25,7 @@
"name": "FILES.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "87d0437e40df1ddaf3161d1baaf5340d03e0c8983c7326257fab831e5f47e682",
+ "chksum_sha256": "ac501f2b0873534b223a2abcc10170a5f29269eb2f1268362ffafc797e6e3cde",
"format": 1
},
"format": 1
diff --git a/ansible_collections/community/postgresql/README.md b/ansible_collections/community/postgresql/README.md
index fde669888..13cc89235 100644
--- a/ansible_collections/community/postgresql/README.md
+++ b/ansible_collections/community/postgresql/README.md
@@ -56,23 +56,27 @@ They also should be subscribed to Ansible's [The Bullhorn newsletter](https://do
> `GitHub Discussions` feature is disabled in this repository. Use the `postgresql` tag on the forum in the [Project Discussions](https://forum.ansible.com/new-topic?title=topic%20title&body=topic%20body&category=project&tags=postgresql) or [Get Help](https://forum.ansible.com/new-topic?title=topic%20title&body=topic%20body&category=help&tags=postgresql) category instead.
-We announce important development changes and releases through Ansible's [The Bullhorn newsletter](https://docs.ansible.com/ansible/devel/community/communication.html#the-bullhorn). If you are a collection developer, be sure you are subscribed.
-
-Join [our team](https://forum.ansible.com/g/PostgreSQLTeam?asc=true&order=) on:
-* The Ansible forums:
- * [News & Announcements](https://forum.ansible.com/c/news/5/none)
- * [Get Help](https://forum.ansible.com/c/help/6/none)
- * [Social Spaces](https://forum.ansible.com/c/chat/4)
- * [Posts tagged 'postgresql'](https://forum.ansible.com/tag/postgresql)
-* Matrix:
- * `#postgresql:ansible.com` [room](https://matrix.to/#/#postgresql:ansible.com): questions on how to contribute and use this collection.
- * `#users:ansible.com` [room](https://matrix.to/#/#users:ansible.com): general use questions and support.
- * `#ansible-community:ansible.com` [room](https://matrix.to/#/#community:ansible.com): community and collection development questions.
- * other Matrix rooms or corresponding bridged Libera.Chat channels. See the [Ansible Communication Guide](https://docs.ansible.com/ansible/devel/community/communication.html) for details.
+### Asynchronous channels
+
+* Join the Ansible forum:
+ * [PostgreSQL Team](https://forum.ansible.com/g/PostgreSQLTeam): by joining the team you will automatically get subscribed to the posts tagged with [postgresql](https://forum.ansible.com/tag/postgresql).
+ * [Get Help](https://forum.ansible.com/c/help/6/none): get help or help others.
+ * [Posts tagged with 'postgresql'](https://forum.ansible.com/tag/postgresql): leverage tags to narrow the scope.
+ * [Social Spaces](https://forum.ansible.com/c/chat/4): gather and interact with fellow enthusiasts.
+ * [News & Announcements](https://forum.ansible.com/c/news/5/none): track project-wide announcements including social events.
+
+* The Ansible [Bullhorn newsletter](https://forum.ansible.com/t/about-the-newsletter-category/166): used to announce releases and important changes.
-We take part in the global quarterly [Ansible Contributor Summit](https://github.com/ansible/community/wiki/Contributor-Summit) virtually or in-person. Track [The Bullhorn newsletter](https://docs.ansible.com/ansible/devel/community/communication.html#the-bullhorn) and join us.
+### Real-time channels
+
+* Matrix rooms:
+ * [#postgresql:ansible.com](https://matrix.to/#/#postgresql:ansible.com): questions on how to contribute and use this collection.
+ * [#users:ansible.com](https://matrix.to/#/#users:ansible.com): general use questions and support.
+ * [#social:ansible.com](https://matrix.to/#/#social:ansible.com): say hello or share a funny joke and let's laugh together;)
+ * [#ansible-community:ansible.com](https://matrix.to/#/#community:ansible.com): community and collection development questions.
+ * other Matrix rooms or corresponding bridged Libera.Chat channels. See the [Ansible Communication Guide](https://docs.ansible.com/ansible/devel/community/communication.html) for details.
-For more information about communication, refer to the [Ansible Communication guide](https://docs.ansible.com/ansible/devel/community/communication.html).
+For more information about communication, including how to join these channels, see the [Ansible communication guide](https://docs.ansible.com/ansible/devel/community/communication.html).
## Governance
@@ -93,7 +97,7 @@ The minimum supported and tested versions of Psycopg are 2.5.1 and 3.1.8 respect
We maintain each major release version (1.x.y, 2.x.y, ...) for two years after the next major version is released.
Here is the table for the support timeline:
-- 1.x.y: released 2020-11-17, supported until 2024-02-10
+- 1.x.y: released 2020-11-17, EOL
- 2.x.y: released 2022-02-10, supported until 2025-06-09
- 3.x.y: released 2023-06-09, current
- 4.x.y: to be released; not earlier than after Ansible 10 release (~May 2024)
@@ -104,6 +108,7 @@ Tested with the following `ansible-core` releases:
- 2.14
- 2.15
- 2.16
+- 2.17
- current development version
Ansible-core versions before 2.12.0 are not supported.
diff --git a/ansible_collections/community/postgresql/changelogs/changelog.yaml b/ansible_collections/community/postgresql/changelogs/changelog.yaml
index bacf00e7a..331cc0e02 100644
--- a/ansible_collections/community/postgresql/changelogs/changelog.yaml
+++ b/ansible_collections/community/postgresql/changelogs/changelog.yaml
@@ -678,3 +678,26 @@ releases:
- 3.4.0.yml
- 667-db_icu_provider.yml
release_date: '2024-02-09'
+ 3.4.1:
+ changes:
+ bugfixes:
+ - 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).
+ release_summary: 'This is a patch release of the ``community.postgresql`` collection.
+
+ This changelog contains all changes to the modules and plugins in this collection
+
+ that have been added after the release of ``community.postgresql`` 3.4.0.'
+ fragments:
+ - 3.4.1.yml
+ - 681-restore-custom-format-as-file.yml
+ - 689-reconnect-before-upgrade.yml
+ - 690-revoke-functions-from-user.yaml
+ - 693-idx-consider-schema.yaml
+ release_date: '2024-05-17'
diff --git a/ansible_collections/community/postgresql/plugins/modules/postgresql_db.py b/ansible_collections/community/postgresql/plugins/modules/postgresql_db.py
index ae2faa007..ca9093566 100644
--- a/ansible_collections/community/postgresql/plugins/modules/postgresql_db.py
+++ b/ansible_collections/community/postgresql/plugins/modules/postgresql_db.py
@@ -628,7 +628,7 @@ def db_restore(module, target, target_opts="",
else:
return p2.returncode, '', stderr2, 'cmd: ****'
else:
- if '--format=Directory' in cmd:
+ if any(substring in cmd for substring in ['--format=Directory', '--format=Custom']):
cmd = '{0} {1}'.format(cmd, shlex_quote(target))
else:
cmd = '{0} < {1}'.format(cmd, shlex_quote(target))
diff --git a/ansible_collections/community/postgresql/plugins/modules/postgresql_ext.py b/ansible_collections/community/postgresql/plugins/modules/postgresql_ext.py
index 7dfc95ac4..d302acdaa 100644
--- a/ansible_collections/community/postgresql/plugins/modules/postgresql_ext.py
+++ b/ansible_collections/community/postgresql/plugins/modules/postgresql_ext.py
@@ -469,6 +469,11 @@ def main():
else:
valid_update_path = ext_valid_update_path(cursor, ext, curr_version, real_version)
if valid_update_path:
+ # Reconnect (required by some extensions like timescaledb)
+ if not module.check_mode:
+ db_connection.close()
+ db_connection, dummy = connect_to_db(module, conn_params, autocommit=True)
+ cursor = db_connection.cursor(**pg_cursor_args)
changed = ext_update_version(module.check_mode, cursor, ext, version)
else:
if version == 'latest':
diff --git a/ansible_collections/community/postgresql/plugins/modules/postgresql_idx.py b/ansible_collections/community/postgresql/plugins/modules/postgresql_idx.py
index 7eb35de40..48784d283 100644
--- a/ansible_collections/community/postgresql/plugins/modules/postgresql_idx.py
+++ b/ansible_collections/community/postgresql/plugins/modules/postgresql_idx.py
@@ -344,9 +344,10 @@ class Index(object):
"ON i.indexname = c.relname "
"JOIN pg_catalog.pg_index AS pi "
"ON c.oid = pi.indexrelid "
- "WHERE i.indexname = %(name)s")
+ "WHERE i.schemaname = %(schema)s "
+ "AND i.indexname = %(name)s")
- res = exec_sql(self, query, query_params={'name': self.name}, add_to_executed=False)
+ res = exec_sql(self, query, query_params={'schema': self.schema, 'name': self.name}, add_to_executed=False)
if res:
self.exists = True
self.info = dict(
diff --git a/ansible_collections/community/postgresql/plugins/modules/postgresql_privs.py b/ansible_collections/community/postgresql/plugins/modules/postgresql_privs.py
index 2c4ca7086..56f8c602e 100644
--- a/ansible_collections/community/postgresql/plugins/modules/postgresql_privs.py
+++ b/ansible_collections/community/postgresql/plugins/modules/postgresql_privs.py
@@ -972,7 +972,7 @@ class QueryBuilder(object):
def build_absent(self):
if self._obj_type == 'default_privs':
self.query = []
- for obj in ['TABLES', 'SEQUENCES', 'TYPES']:
+ for obj in ['TABLES', 'FUNCTIONS', 'SEQUENCES', 'TYPES']:
if self._as_who:
self.query.append(
'ALTER DEFAULT PRIVILEGES FOR ROLE {0}{1} REVOKE ALL ON {2} FROM {3};'.format(self._as_who,
diff --git a/ansible_collections/community/postgresql/tests/sanity/ignore-2.18.txt b/ansible_collections/community/postgresql/tests/sanity/ignore-2.18.txt
new file mode 100644
index 000000000..230ec3421
--- /dev/null
+++ b/ansible_collections/community/postgresql/tests/sanity/ignore-2.18.txt
@@ -0,0 +1,5 @@
+plugins/modules/postgresql_db.py use-argspec-type-path
+plugins/modules/postgresql_db.py validate-modules:use-run-command-not-popen
+plugins/module_utils/version.py pylint:unused-import
+tests/utils/shippable/timing.py shebang
+tests/unit/plugins/module_utils/test_postgres.py pylint:unidiomatic-typecheck
diff --git a/ansible_collections/community/sap/.github/ISSUE_TEMPLATE/bug_report.yml b/ansible_collections/community/sap/.github/ISSUE_TEMPLATE/bug_report.yml
deleted file mode 100644
index b8d61db62..000000000
--- a/ansible_collections/community/sap/.github/ISSUE_TEMPLATE/bug_report.yml
+++ /dev/null
@@ -1,149 +0,0 @@
----
-name: Bug report
-description: Create a report to help us improve
-
-body:
-- type: markdown
- attributes:
- value: |
- ⚠
- Verify first that your issue is not [already reported on GitHub][issue search].
- Also test if the latest release and devel branch are affected too.
- *Complete **all** sections as described, this form is processed automatically.*
-
- [issue search]: https://github.com/ansible-collections/community.sap/search?q=is%3Aissue&type=issues
-
-
-- type: textarea
- attributes:
- label: Summary
- description: Explain the problem briefly below.
- placeholder: >-
- When I try to do X with the collection from the main branch on GitHub, Y
- breaks in a way Z under the env E. Here are all the details I know
- about this problem...
- validations:
- required: true
-
-- type: dropdown
- attributes:
- label: Issue Type
- # FIXME: Once GitHub allows defining the default choice, update this
- options:
- - Bug Report
- validations:
- required: true
-
-- type: textarea
- attributes:
- # For smaller collections we could use a multi-select and hardcode the list
- # May generate this list via GitHub action and walking files under https://github.com/ansible-collections/community.sap/tree/main/plugins
- # Select from list, filter as you type (`mysql` would only show the 3 mysql components)
- # OR freeform - doesn't seem to be supported in adaptivecards
- label: Component Name
- description: >-
- Write the short name of the module, plugin, task or feature below,
- *use your best guess if unsure*.
- placeholder: dnf, apt, yum, pip, user etc.
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Ansible Version
- description: >-
- Paste verbatim output from `ansible --version` between
- tripple backticks.
- value: |
- ```console (paste below)
- $ ansible --version
-
- ```
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Community.sap Version
- description: >-
- Paste verbatim output from "ansible-galaxy collection list community.sap"
- between tripple backticks.
- value: |
- ```console (paste below)
- $ ansible-galaxy collection list community.sap
-
- ```
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Configuration
- description: >-
- If this issue has an example piece of YAML that can help to reproduce this problem, please provide it.
- This can be a piece of YAML from, e.g., an automation, script, scene or configuration.
- Paste verbatim output from `ansible-config dump --only-changed` between quotes
- value: |
- ```console (paste below)
- $ ansible-config dump --only-changed
-
- ```
-
-
-- type: textarea
- attributes:
- label: OS / Environment
- description: >-
- Provide all relevant information below, e.g. target OS versions,
- network device firmware, etc.
- placeholder: RHEL 8, SLES
- validations:
- required: false
-
-
-- type: textarea
- attributes:
- label: Steps to Reproduce
- description: |
- Describe exactly how to reproduce the problem, using a minimal test-case. It would *really* help us understand your problem if you could also pased any playbooks, configs and commands you used.
-
- **HINT:** You can paste https://gist.github.com links for larger files.
- value: |
- <!--- Paste example playbooks or commands between quotes below -->
- ```yaml (paste below)
-
- ```
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Expected Results
- description: >-
- Describe what you expected to happen when running the steps above.
- placeholder: >-
- I expected X to happen because I assumed Y.
- that it did not.
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Actual Results
- description: |
- Describe what actually happened. If possible run with extra verbosity (`-vvvv`).
-
- Paste verbatim command output between quotes.
- value: |
- ```console (paste below)
-
- ```
-- type: checkboxes
- attributes:
- label: Code of Conduct
- description: |
- Read the [Ansible Code of Conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html?utm_medium=github&utm_source=issue_form--ansible-collections) first.
- options:
- - label: I agree to follow the Ansible Code of Conduct
- required: true
-...
diff --git a/ansible_collections/community/sap/.github/ISSUE_TEMPLATE/config.yml b/ansible_collections/community/sap/.github/ISSUE_TEMPLATE/config.yml
deleted file mode 100644
index f90bd1ad8..000000000
--- a/ansible_collections/community/sap/.github/ISSUE_TEMPLATE/config.yml
+++ /dev/null
@@ -1,27 +0,0 @@
----
-# Ref: https://help.github.com/en/github/building-a-strong-community/configuring-issue-templates-for-your-repository#configuring-the-template-chooser
-blank_issues_enabled: false # default: true
-contact_links:
-- name: Security bug report
- url: https://docs.ansible.com/ansible-core/devel/community/reporting_bugs_and_features.html?utm_medium=github&utm_source=issue_template_chooser_ansible_collections
- about: |
- Please learn how to report security vulnerabilities here.
-
- For all security related bugs, email security@ansible.com
- instead of using this issue tracker and you will receive
- a prompt response.
-
- For more information, see
- https://docs.ansible.com/ansible/latest/community/reporting_bugs_and_features.html
-- name: Ansible Code of Conduct
- url: https://docs.ansible.com/ansible/latest/community/code_of_conduct.html?utm_medium=github&utm_source=issue_template_chooser_ansible_collections
- about: Be nice to other members of the community.
-- name: Talks to the community
- url: https://docs.ansible.com/ansible/latest/community/communication.html?utm_medium=github&utm_source=issue_template_chooser#mailing-list-information
- about: Please ask and answer usage questions here
-- name: Working groups
- url: https://github.com/ansible/community/wiki
- about: Interested in improving a specific area? Become a part of a working group!
-- name: For Enterprise
- url: https://www.ansible.com/products/engine?utm_medium=github&utm_source=issue_template_chooser_ansible_collections
- about: Red Hat offers support for the Ansible Automation Platform
diff --git a/ansible_collections/community/sap/.github/ISSUE_TEMPLATE/documentation_report.yml b/ansible_collections/community/sap/.github/ISSUE_TEMPLATE/documentation_report.yml
deleted file mode 100644
index fb023cf46..000000000
--- a/ansible_collections/community/sap/.github/ISSUE_TEMPLATE/documentation_report.yml
+++ /dev/null
@@ -1,125 +0,0 @@
----
-name: Documentation Report
-description: Ask us about docs
-# NOTE: issue body is enabled to allow screenshots
-
-body:
-- type: markdown
- attributes:
- value: |
- ⚠
- Verify first that your issue is not [already reported on GitHub][issue search].
- Also test if the latest release and devel branch are affected too.
- *Complete **all** sections as described, this form is processed automatically.*
-
- [issue search]: https://github.com/ansible-collections/community.sap/search?q=is%3Aissue&type=issues
-
-
-- type: textarea
- attributes:
- label: Summary
- description: |
- Explain the problem briefly below, add suggestions to wording or structure.
-
- **HINT:** Did you know the documentation has an `Edit on GitHub` link on every page?
- placeholder: >-
- I was reading the Collection documentation of version X and I'm having
- problems understanding Y. It would be very helpful if that got
- rephrased as Z.
- validations:
- required: true
-
-- type: dropdown
- attributes:
- label: Issue Type
- # FIXME: Once GitHub allows defining the default choice, update this
- options:
- - Documentation Report
- validations:
- required: true
-
-- type: input
- attributes:
- label: Component Name
- description: >-
- Write the short name of the rst file, module, plugin, task or
- feature below, *use your best guess if unsure*.
- placeholder: mysql_user
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Ansible Version
- description: >-
- Paste verbatim output from `ansible --version` between
- tripple backticks.
- value: |
- ```console (paste below)
- $ ansible --version
-
- ```
- validations:
- required: false
-
-- type: textarea
- attributes:
- label: Community.general Version
- description: >-
- Paste verbatim output from "ansible-galaxy collection list community.sap"
- between tripple backticks.
- value: |
- ```console (paste below)
- $ ansible-galaxy collection list community.sap
-
- ```
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Configuration
- description: >-
- Paste verbatim output from `ansible-config dump --only-changed` between quotes.
- value: |
- ```console (paste below)
- $ ansible-config dump --only-changed
-
- ```
- validations:
- required: false
-
-- type: textarea
- attributes:
- label: OS / Environment
- description: >-
- Provide all relevant information below, e.g. OS version,
- browser, etc.
- placeholder: SLES, RHEL
- validations:
- required: false
-
-- type: textarea
- attributes:
- label: Additional Information
- description: |
- Describe how this improves the documentation, e.g. before/after situation or screenshots.
-
- **Tip:** It's not possible to upload the screenshot via this field directly but you can use the last textarea in this form to attach them.
-
- **HINT:** You can paste https://gist.github.com links for larger files.
- placeholder: >-
- When the improvement is applied, it makes it more straightforward
- to understand X.
- validations:
- required: false
-
-- type: checkboxes
- attributes:
- label: Code of Conduct
- description: |
- Read the [Ansible Code of Conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html?utm_medium=github&utm_source=issue_form--ansible-collections) first.
- options:
- - label: I agree to follow the Ansible Code of Conduct
- required: true
-...
diff --git a/ansible_collections/community/sap/.github/ISSUE_TEMPLATE/feature_request.yml b/ansible_collections/community/sap/.github/ISSUE_TEMPLATE/feature_request.yml
deleted file mode 100644
index 08de7a62e..000000000
--- a/ansible_collections/community/sap/.github/ISSUE_TEMPLATE/feature_request.yml
+++ /dev/null
@@ -1,69 +0,0 @@
----
-name: Feature request
-description: Suggest an idea for this project
-
-body:
-- type: markdown
- attributes:
- value: |
- ⚠
- Verify first that your issue is not [already reported on GitHub][issue search].
- Also test if the latest release and devel branch are affected too.
- *Complete **all** sections as described, this form is processed automatically.*
-
- [issue search]: https://github.com/ansible-collections/community.sap/search?q=is%3Aissue&type=issues
-
-
-- type: textarea
- attributes:
- label: Summary
- description: Describe the new feature/improvement briefly below.
- placeholder: >-
- I am trying to do X with the collection from the main branch on GitHub and
- I think that implementing a feature Y would be very helpful for me and
- every other user of community.sap because of Z.
- validations:
- required: true
-
-- type: dropdown
- attributes:
- label: Issue Type
- # FIXME: Once GitHub allows defining the default choice, update this
- options:
- - Feature Idea
- validations:
- required: true
-
-- type: input
- attributes:
- label: Component Name
- description: >-
- Write the short name of the module, plugin, task or feature below,
- *use your best guess if unsure*.
- placeholder: dnf, apt, yum, pip, user etc.
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Additional Information
- description: |
- Describe how the feature would be used, why it is needed and what it would solve.
-
- **HINT:** You can paste https://gist.github.com links for larger files.
- value: |
- <!--- Paste example playbooks or commands between quotes below -->
- ```yaml (paste below)
-
- ```
- validations:
- required: false
-- type: checkboxes
- attributes:
- label: Code of Conduct
- description: |
- Read the [Ansible Code of Conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html?utm_medium=github&utm_source=issue_form--ansible-collections) first.
- options:
- - label: I agree to follow the Ansible Code of Conduct
- required: true
-...
diff --git a/ansible_collections/community/sap/.github/workflows/ansible-test.yml b/ansible_collections/community/sap/.github/workflows/ansible-test.yml
deleted file mode 100644
index c29b8123a..000000000
--- a/ansible_collections/community/sap/.github/workflows/ansible-test.yml
+++ /dev/null
@@ -1,126 +0,0 @@
-# name: CI
-# on:
-# # Run CI against all pushes (direct commits, also merged PRs), Pull Requests
-# push:
-# pull_request:
-# # Run CI once per day (at 06:00 UTC)
-# # This ensures that even if there haven't been commits that we are still testing against latest version of ansible-test for each ansible-base version
-# schedule:
-# - cron: '0 6 * * *'
-# env:
-# NAMESPACE: community
-# COLLECTION_NAME: sap
-
-# jobs:
-# sanity:
-# name: Sanity (Ⓐ${{ matrix.ansible }})
-# strategy:
-# matrix:
-# ansible:
-# - stable-2.9
-# - stable-2.10
-# - stable-2.11
-# - stable-2.12
-# - devel
-# runs-on: ubuntu-latest
-# steps:
-
-# - name: Check out code
-# uses: actions/checkout@v2
-
-# - name: Perform sanity testing with ansible-test
-# uses: ansible-community/ansible-test-gh-action@release/v1
-# with:
-# ansible-core-version: ${{ matrix.ansible }}
-# testing-type: sanity
-
-
-# units:
-# runs-on: ubuntu-latest
-# name: Units (Ⓐ${{ matrix.ansible }}+py${{ matrix.python }})
-# strategy:
-# # As soon as the first unit test fails, cancel the others to free up the CI queue
-# fail-fast: true
-# matrix:
-# ansible:
-# - stable-2.9 # Only if your collection supports Ansible 2.9
-# - stable-2.10
-# - stable-2.11
-# - stable-2.12
-# - devel
-# python:
-# - 2.6
-# - 2.7
-# - 3.5
-# - 3.6
-# - 3.7
-# - 3.8
-# - 3.9
-# exclude:
-# # Because ansible-test doesn't support python3.9 for Ansible 2.9
-# - ansible: stable-2.9
-# python: 3.9
-# - ansible: devel
-# python: 2.6
-
-# steps:
-# - name: Check out code
-# uses: actions/checkout@v2
-
-# - name: Perform unit testing with ansible-test
-# uses: ansible-community/ansible-test-gh-action@release/v1
-# with:
-# ansible-core-version: ${{ matrix.ansible }}
-# target-python-version: ${{ matrix.python }}
-# python-version: 3.8
-# testing-type: units
-# test-deps: >-
-# ansible.netcommon
-# ansible.utils
-
-# # Please consult the Readme for information on why we disabled integration tests temporarily.
-
-# # integration:
-# # runs-on: ubuntu-latest
-# # name: I (Ⓐ${{ matrix.ansible }}+py${{ matrix.python }})
-# # strategy:
-# # fail-fast: false
-# # matrix:
-# # ansible:
-# # - stable-2.9 # Only if your collection supports Ansible 2.9
-# # - stable-2.10
-# # - stable-2.11
-# # - stable-2.12
-# # - devel
-# # python:
-# # - 2.6
-# # - 2.7
-# # - 3.5
-# # - 3.6
-# # - 3.7
-# # - 3.8
-# # - 3.9
-# # exclude:
-# # # Because ansible-test doesn't support python3.9 for Ansible 2.9
-# # - ansible: stable-2.9
-# # python: 3.9
-# # - ansible: devel
-# # python: 2.6
-
-# # steps:
-# # - name: Check out code
-# # uses: actions/checkout@v2
-
-# # - name: Perform integration testing with ansible-test
-# # uses: ansible-community/ansible-test-gh-action@release/v1
-# # with:
-# # ansible-core-version: ${{ matrix.ansible }}
-# # python-version: 3.8
-# # pre-test-cmd: >-
-# # mkdir -p tests/output/
-# # touch tests/output/coverage
-# # target-python-version: ${{ matrix.python }}
-# # testing-type: integration
-# # test-deps: >-
-# # ansible.netcommon
-# # ansible.utils
diff --git a/ansible_collections/community/sap/.vscode/extensions.json b/ansible_collections/community/sap/.vscode/extensions.json
deleted file mode 100644
index 1450d869d..000000000
--- a/ansible_collections/community/sap/.vscode/extensions.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "recommendations": [
- "redhat.ansible"
- ]
-}
diff --git a/ansible_collections/community/sap/CHANGELOG.rst b/ansible_collections/community/sap/CHANGELOG.rst
deleted file mode 100644
index 714ed15a5..000000000
--- a/ansible_collections/community/sap/CHANGELOG.rst
+++ /dev/null
@@ -1,87 +0,0 @@
-===========================
-Community SAP Release Notes
-===========================
-
-.. contents:: Topics
-
-
-v2.0.0
-======
-
-Release Summary
----------------
-
-This release deprecates all modules and redirect them to community.sap_libs. The modules are removed in this release.
-The modules are available in the community.sap_libs repository.
-
-Major Changes
--------------
-
-- all modules - everything is now a redirect to the new collection community.sap_libs
-
-Deprecated Features
--------------------
-
-- 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
-
-v1.0.0
-======
-
-Release Summary
----------------
-
-This is the first major release of the ``community.sap`` collection. This changelog contains all changes to the modules and plugins in this collection that have been made after the previous release.
-
-Minor Changes
--------------
-
-- sapcar_extract.py - more strict logic for filenames
-
-New Modules
------------
-
-Identity
-~~~~~~~~
-
-- sap_company - This module will manage a company entities in a SAP S4HANA environment
-- sap_user - This module will manage a user entities in a SAP S4/HANA environment
-
-System
-~~~~~~
-
-- sap_snote - This module will upload and (de)implements C(SNOTES) in a SAP S4HANA environment.
-- sap_system_facts - Gathers SAP facts in a host
-
-v0.1.0
-======
-
-Release Summary
----------------
-
-This is the minor release of the ``community.sap`` collection. It is the initial relase for the ``community.sap`` collection
-
-New Modules
------------
-
-Database
-~~~~~~~~
-
-saphana
-^^^^^^^
-
-- hana_query - Execute SQL on HANA
-
-Files
-~~~~~
-
-- sapcar_extract - Manages SAP SAPCAR archives
-
-System
-~~~~~~
-
-- sap_task_list_execute - Perform SAP Task list execution
diff --git a/ansible_collections/community/sap/CONTRIBUTING.md b/ansible_collections/community/sap/CONTRIBUTING.md
deleted file mode 100644
index b4a17dec0..000000000
--- a/ansible_collections/community/sap/CONTRIBUTING.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Contributing
-
-Refer to the [Contributing guidelines](https://github.com/ansible/community-docs/blob/main/contributing.rst).
diff --git a/ansible_collections/community/sap/FILES.json b/ansible_collections/community/sap/FILES.json
deleted file mode 100644
index 05e702336..000000000
--- a/ansible_collections/community/sap/FILES.json
+++ /dev/null
@@ -1,544 +0,0 @@
-{
- "files": [
- {
- "name": ".",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": ".github",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": ".github/ISSUE_TEMPLATE",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": ".github/ISSUE_TEMPLATE/bug_report.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "eca22676ac9e0554bbdf3ca8cbddcae9e9961de4be8b724fd317c9a0dbd652e1",
- "format": 1
- },
- {
- "name": ".github/ISSUE_TEMPLATE/config.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2e5f08c57601d637ec507daec616f993993d16f51892ca62214932b4fad0dcd9",
- "format": 1
- },
- {
- "name": ".github/ISSUE_TEMPLATE/documentation_report.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "414b304e8a6f53a78268617968d2386d46bbb421eab7ce9e82e1902fe541cd43",
- "format": 1
- },
- {
- "name": ".github/ISSUE_TEMPLATE/feature_request.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b59211fd4dc558d2573f89528699e52f36925e0d11e00a4542ff74ebdc19d1e0",
- "format": 1
- },
- {
- "name": ".github/workflows",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": ".github/workflows/ansible-test.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "141fb2c403baf2847bf06f9281f397e22fc5325262ef017cace4bde09d6f803d",
- "format": 1
- },
- {
- "name": ".vscode",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": ".vscode/extensions.json",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f72b83e1aa1301adb18ce0fe71ce6613d3cfb148f881b3e39c55359d41d3277f",
- "format": 1
- },
- {
- "name": "changelogs",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "changelogs/fragments",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "changelogs/fragments/.keep",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "changelogs/changelog.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d58ffee3cafd91ae2cebaa92a66100609fcf1a19501b2e00c1d5b93d0bbc7fcb",
- "format": 1
- },
- {
- "name": "changelogs/config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5f253a9432287fcdfe3100b556bf39d442a5e8b5a5fd3ec4a971f37f954ebac0",
- "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": "9a8c86337928225fea4abd7361f2813f48b1770c4ae83aac940e7b491a4e143a",
- "format": 1
- },
- {
- "name": "plugins",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "plugins/doc_fragments",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "plugins/doc_fragments/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "plugins/module_utils",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "plugins/module_utils/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "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": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "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/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "tests/integration/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "tests/sanity",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/sanity/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "tests/unit",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/compat",
- "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/builtins.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0ca4cac919e166b25e601e11acb01f6957dddd574ff0a62569cb994a5ecb63e1",
- "format": 1
- },
- {
- "name": "tests/unit/compat/mock.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0af958450cf6de3fbafe94b1111eae8ba5a8dbe1d785ffbb9df81f26e4946d99",
- "format": 1
- },
- {
- "name": "tests/unit/compat/unittest.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5401a046e5ce71fa19b6d905abd0f9bdf816c0c635f7bdda6730b3ef06e67096",
- "format": 1
- },
- {
- "name": "tests/unit/mock",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/mock/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "tests/unit/mock/loader.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3452ac615f89c99a76d1df4ab1ad84d1aff546e5b5fde18034a241239690d05a",
- "format": 1
- },
- {
- "name": "tests/unit/mock/path.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f048a12629a6297a676ea56529ecf766cff30bcaa873c6659ac5b7f6e29472b1",
- "format": 1
- },
- {
- "name": "tests/unit/mock/procenv.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e79b2fe520af92318da175c231296e16bf047842a93b1bfa4e1a5afc453baa03",
- "format": 1
- },
- {
- "name": "tests/unit/mock/vault_helper.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0562db7b9972e6378701e3492c623e5f881732c4792e096032b72c2e54d22298",
- "format": 1
- },
- {
- "name": "tests/unit/mock/yaml_helper.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cd95a4807e52e9123a8d40132a5f52b75cbc1496e1a32b104b2655bf631cfee4",
- "format": 1
- },
- {
- "name": "tests/unit/plugins",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/database",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/database/saphana",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/database/saphana/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/database/saphana/test_hana_query.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "db8e986504233653384f9b7735c89bb9ab992f48d289494233faf01290f03dc8",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/database/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/files",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/files/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/files/test_sapcar_extract.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "07521a13ba3f072fcd568ced0847c27cf9493f1578f16ab644092e32fcbc83fb",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/identity",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/identity/test_sap_company.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "aee30ac135204fbfbce16477ad2ab3b869b148b80064bf79623aef29e151335f",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/identity/test_sap_user.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "815d8ab9d13edd585fd0c8003fb885f689fe78bebd75ad837141e5093fc5680d",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/system",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/system/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/system/test_sap_snote.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "46a0b927837a539f7e8c995a47beb0b4be708b1c12eb64c4d7c90a0f10a7c929",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/system/test_sap_system_facts.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f2992ecb0a55a5c93837194c493a4d7f9afe0604dcba0c92eee06cd967e002ab",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/system/test_sap_task_list_execute.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "492b377795da0aa4e5208b6bfae17e8363660aa3ca92e07a374c9c5702c30550",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/utils.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1427709f0a160776d54c9c78b353caf5d0833819f3ad14f414b523938c467d4d",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "tests/unit/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "tests/unit/requirements.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "57ca135f60a45a67968cae026a738c74d287bd1a69cf99b20e6c0b02ebc72b35",
- "format": 1
- },
- {
- "name": "CHANGELOG.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "63e3ec595a36659d4977981c1abfd3c8efb0fe2eace862746feabe968e13ba3f",
- "format": 1
- },
- {
- "name": "CODE_OF_CONDUCT.md",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "14ec928234a7ed52bf8b458d31e4862335111e477e4dbe7fb543686c24115140",
- "format": 1
- },
- {
- "name": "CONTRIBUTING.md",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "eec219dbc09446ed3e9938c8f66378621a0548b056426df33e3ea32e26bb4dc8",
- "format": 1
- },
- {
- "name": "LICENSE",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986",
- "format": 1
- },
- {
- "name": "MAINTAINERS",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "bc751d90416fb1652ef9a5d35d8f60f5e050bc9735eb2fe26378d1695fd1ac46",
- "format": 1
- },
- {
- "name": "MAINTAINING.md",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2435665a6562d5f3841fff1631970f95f0466c498e949d2b8579ccc2a0b810ad",
- "format": 1
- },
- {
- "name": "README.md",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d600b5ca720d33e93ee89c9bdfba410c8f7dc435fa29ea7ca4ebfa3159f4311b",
- "format": 1
- },
- {
- "name": "REVIEW_CHECKLIST.md",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "91ad4aff2cc14b98f81fbe2d90609c5a69ed96b6d836387a9c697c1112e603c0",
- "format": 1
- },
- {
- "name": "codecov.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "125a07797a54aa0dcd4d5233a69856802686cd567d600fb55abf9e4fdbf56fa6",
- "format": 1
- }
- ],
- "format": 1
-} \ No newline at end of file
diff --git a/ansible_collections/community/sap/MAINTAINERS b/ansible_collections/community/sap/MAINTAINERS
deleted file mode 100644
index 6e30606b6..000000000
--- a/ansible_collections/community/sap/MAINTAINERS
+++ /dev/null
@@ -1,2 +0,0 @@
-rainerleber
-rkpobe \ No newline at end of file
diff --git a/ansible_collections/community/sap/MAINTAINING.md b/ansible_collections/community/sap/MAINTAINING.md
deleted file mode 100644
index 9fad0d343..000000000
--- a/ansible_collections/community/sap/MAINTAINING.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Maintaining this collection
-
-Refer to the [Maintainer guidelines](https://github.com/ansible/community-docs/blob/main/maintaining.rst).
diff --git a/ansible_collections/community/sap/MANIFEST.json b/ansible_collections/community/sap/MANIFEST.json
deleted file mode 100644
index 5385f2f71..000000000
--- a/ansible_collections/community/sap/MANIFEST.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "collection_info": {
- "namespace": "community",
- "name": "sap",
- "version": "2.0.0",
- "authors": [
- "Rainer Leber (github.com/rainerleber)",
- "Robert Kraemer (github.com/rkpobe)"
- ],
- "readme": "README.md",
- "tags": [
- "sap"
- ],
- "description": "SAP community collection for Ansible",
- "license": [],
- "license_file": "LICENSE",
- "dependencies": {
- "community.sap_libs": ">=1.0.0"
- },
- "repository": "https://github.com/ansible-collections/community.sap",
- "documentation": "https://github.com/ansible-collection/community.sap",
- "homepage": "https://github.com/ansible-collections/community.sap",
- "issues": "https://github.com/ansible-collections/community.sap/issues"
- },
- "file_manifest_file": {
- "name": "FILES.json",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "90eb59f365d6576a46b04852a21d5998d4ad14dcbb20ae1547d5a1667dcda9d9",
- "format": 1
- },
- "format": 1
-} \ No newline at end of file
diff --git a/ansible_collections/community/sap/README.md b/ansible_collections/community/sap/README.md
deleted file mode 100644
index dd935b270..000000000
--- a/ansible_collections/community/sap/README.md
+++ /dev/null
@@ -1,181 +0,0 @@
-# Deprecated Community SAP Collection
-
-# **WARNING: This collection is deprecated, not maintained anymore and superseded by the collection [**community.sap_libs**](https://github.com/sap-linuxlab/community.sap_libs)**
-
-**Feel free to raise issues at the new place.
-All CI tests are disabled.**
-
----
-This repository contains the community.sap Ansible Collection. The collection includes modules and plugins supported by the Ansible SAP community to help SAP landscape management.
-
-# SAP Collection for Ansible
-<!-- Add CI and code coverage badges here. Samples included below. -->
-[![CI](https://github.com/ansible-collections/community.sap/workflows/CI/badge.svg?event=push)](https://github.com/ansible-collections/community.sap/actions) [![Codecov](https://img.shields.io/codecov/c/github/ansible-collections/community.sap)](https://codecov.io/gh/ansible-collections/community.sap)
-
-<!-- Describe the collection and why a user would want to use it. What does the collection do? -->
-
-## Code of Conduct
-
-We follow the [Ansible Code of Conduct](https://docs.ansible.com/ansible/devel/community/code_of_conduct.html) in all our interactions within this project.
-
-If you encounter abusive behavior, please refer to the [policy violations](https://docs.ansible.com/ansible/devel/community/code_of_conduct.html#policy-violations) section of the Code for information on how to raise a complaint.
-
-## Communication
-
-<!--List available communication channels. In addition to channels specific to your collection, we also recommend to use the following ones.-->
-
-We announce releases and important changes through Ansible's [The Bullhorn newsletter](https://github.com/ansible/community/wiki/News#the-bullhorn). Be sure you are [subscribed](https://eepurl.com/gZmiEP).
-
-Join us in the `#ansible` (general use questions and support), `#ansible-community` (community and collection development questions), and other [Matrix/LiberaChat IRC channels](https://docs.ansible.com/ansible/devel/community/communication.html#real-time-chat).
-
-We take part in the global quarterly [Ansible Contributor Summit](https://github.com/ansible/community/wiki/Contributor-Summit) virtually or in-person. Track [The Bullhorn newsletter](https://eepurl.com/gZmiEP) and join us.
-
-For more information about communication, refer to the [Ansible Communication guide](https://docs.ansible.com/ansible/devel/community/communication.html).
-
-## Contributing to this collection
-
-<!--Describe how the community can contribute to your collection. At a minimum, fill up and include the CONTRIBUTING.md file containing how and where users can create issues to report problems or request features for this collection. List contribution requirements, including preferred workflows and necessary testing, so you can benefit from community PRs. If you are following general Ansible contributor guidelines, you can link to - [Ansible Community Guide](https://docs.ansible.com/ansible/devel/community/index.html). List the current maintainers (contributors with write or higher access to the repository). The following can be included:-->
-
-The content of this collection is made by people like you, a community of individuals collaborating on making the world better through developing automation software.
-
-We are actively accepting new contributors.
-
-Any kind of contribution is very welcome.
-
-You don't know how to start? Refer to our [contribution guide](CONTRIBUTING.md)!
-
-We use the following guidelines:
-
-* [CONTRIBUTING.md](CONTRIBUTING.md)
-* [REVIEW_CHECKLIST.md](REVIEW_CHECKLIST.md)
-* [Ansible Community Guide](https://docs.ansible.com/ansible/latest/community/index.html)
-* [Ansible Development Guide](https://docs.ansible.com/ansible/devel/dev_guide/index.html)
-* [Ansible Collection Development Guide](https://docs.ansible.com/ansible/devel/dev_guide/developing_collections.html#contributing-to-collections)
-
-## Collection maintenance
-
-The current maintainers are listed in the [MAINTAINERS](MAINTAINERS) file. If you have questions or need help, feel free to mention them in the proposals.
-
-To learn how to maintain / become a maintainer of this collection, refer to the [Maintainer guidelines](MAINTAINING.md).
-
-## Governance
-
-<!--Describe how the collection is governed. Here can be the following text:-->
-
-The process of decision making in this collection is based on discussing and finding consensus among participants.
-
-Every voice is important. If you have something on your mind, create an issue or dedicated discussion and let's discuss it!
-
-## Tested with Ansible and the following Python versions
-
-Tested Ansible versions:
-- 2.9
-- 2.10
-- 2.11
-- 2.12
-- devel
-
-Tested Python versions:
-- 2.6
-- 2.7
-- 3.5
-- 3.6
-- 3.7
-- 3.8
-- 3.9
-
-Due to SAP licensing and hardware requirements, integration tests are momentarily not feasible.
-The modules are tested manually against SAP systems until we found a solution or have some
-modules where we are able to execute integration test we decided to disable these tests.
-
-## External requirements
-
-For some modules the below requirements are needed on the host that executes a module.
-
-- pyrfc >= 2.4.0
-- SAPCAR
-- SAPCONTROL
-
-### Supported connections
-<!-- Optional. If your collection supports only specific connection types (such as HTTPAPI, netconf, or others), list them here. -->
-
-## Included content
-
-- **Modules**:
- - [hana_query](https://docs.ansible.com/ansible/latest/collections/community/sap/hana_query.html)
- - [sap_task_list_execute](https://docs.ansible.com/ansible/latest/collections/community/sap/sap_task_list_execute.html)
- - [sapcar_extract](https://docs.ansible.com/ansible/latest/collections/community/sap/sapcar_extract.html)
- - [sap_company](https://docs.ansible.com/ansible/latest/collections/community/sap/sap_company.html)
- - [sap_snote](https://docs.ansible.com/ansible/latest/collections/community/sap/sap_snote.html)
- - [sap_user](https://docs.ansible.com/ansible/latest/collections/community/sap/sap_user.html)
- - [sap_system_facts](https://docs.ansible.com/ansible/latest/collections/community/sap/sap_system_facts.html)
-
-## Using this collection
-
-<!--Include some quick examples that cover the most common use cases for your collection content. It can include the following examples of installation and upgrade (change NAMESPACE.COLLECTION_NAME correspondingly):-->
-
-### Installing the Collection from Ansible Galaxy
-
-Before using this collection, you need to install it with the Ansible Galaxy command-line tool:
-```bash
-ansible-galaxy collection install community.sap
-```
-
-You can also include it in a `requirements.yml` file and install it with `ansible-galaxy collection install -r requirements.yml`, using the format:
-```yaml
----
-collections:
- - name: community.sap
-```
-
-Note that if you install the collection from Ansible Galaxy, it will not be upgraded automatically when you upgrade the `ansible` package. To upgrade the collection to the latest available version, run the following command:
-```bash
-ansible-galaxy collection install community.sap --upgrade
-```
-
-You can also install a specific version of the collection, for example, if you need to downgrade when something is broken in the latest version (please report an issue in this repository). Use the following syntax to install version `0.1.0`:
-
-```bash
-ansible-galaxy collection install community.sap:==0.1.0
-```
-
-See [Ansible Using collections](https://docs.ansible.com/ansible/devel/user_guide/collections_using.html) for more details.
-
-## Release notes
-
-See the [changelog](https://github.com/ansible-collections/community.sap/tree/main/CHANGELOG.rst).
-
-## Releasing, Versioning and Deprecation
-This collection follows Semantic Versioning. More details on versioning can be found in the Ansible docs.
-
-We plan to regularly release new minor or bugfix versions once new features or bugfixes have been implemented.
-
-Releasing the current major version happens from the main branch. We will create a stable-1 branch for 1.x.y versions once we start working on a 2.0.0 release, to allow backporting bugfixes and features from the 2.0.0 branch (main) to stable-1.
-
-For reference have a look at the issue [Releasing, Versioning and Deprecation](https://github.com/ansible-collections/community.sap/issues/4).
-
-
-
-## Roadmap
-
-Please have a look at the project board.
-
-## More information
-
-<!-- List out where the user can find additional information, such as working group meeting times, slack/IRC channels, or documentation for the product this collection automates. At a minimum, link to: -->
-
-- [Ansible Collection overview](https://github.com/ansible-collections/overview)
-- [Ansible User guide](https://docs.ansible.com/ansible/devel/user_guide/index.html)
-- [Ansible Developer guide](https://docs.ansible.com/ansible/devel/dev_guide/index.html)
-- [Ansible Collections Checklist](https://github.com/ansible-collections/overview/blob/master/collection_requirements.rst)
-- [Ansible Community Code of Conduct](https://docs.ansible.com/ansible/devel/community/code_of_conduct.html)
-- [The Bullhorn (the Ansible Contributor newsletter)](https://us19.campaign-archive.com/home/?u=56d874e027110e35dea0e03c1&id=d6635f5420)
-- [News for Maintainers](https://github.com/ansible-collections/news-for-maintainers)
-
-## Licensing
-
-<!-- Include the appropriate license information here and a pointer to the full licensing details. If the collection contains modules migrated from the ansible/ansible repo, you must use the same license that existed in the ansible/ansible repo. See the GNU license example below. -->
-
-GNU General Public License v3.0 or later.
-
-See [LICENSE](https://www.gnu.org/licenses/gpl-3.0.txt) to see the full text.
diff --git a/ansible_collections/community/sap/REVIEW_CHECKLIST.md b/ansible_collections/community/sap/REVIEW_CHECKLIST.md
deleted file mode 100644
index 9dccf7ef1..000000000
--- a/ansible_collections/community/sap/REVIEW_CHECKLIST.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Review Checklist
-
-Refer to the [Collection review checklist](https://github.com/ansible/community-docs/blob/main/review_checklist.rst).
diff --git a/ansible_collections/community/sap/changelogs/changelog.yaml b/ansible_collections/community/sap/changelogs/changelog.yaml
deleted file mode 100644
index 39f79a298..000000000
--- a/ansible_collections/community/sap/changelogs/changelog.yaml
+++ /dev/null
@@ -1,63 +0,0 @@
-ancestor: null
-releases:
- 0.1.0:
- changes:
- release_summary: This is the minor release of the ``community.sap`` collection.
- It is the initial relase for the ``community.sap`` collection
- fragments:
- - 0.1.0.yml
- modules:
- - description: Execute SQL on HANA
- name: hana_query
- namespace: database.saphana
- - description: Perform SAP Task list execution
- name: sap_task_list_execute
- namespace: system
- - description: Manages SAP SAPCAR archives
- name: sapcar_extract
- namespace: files
- release_date: '2021-12-06'
- 1.0.0:
- changes:
- minor_changes:
- - sapcar_extract.py - more strict logic for filenames
- release_summary: This is the first major release of the ``community.sap`` collection.
- This changelog contains all changes to the modules and plugins in this collection
- that have been made after the previous release.
- fragments:
- - 1.0.0.yml
- - 11-filenamesuffixcheck.yml
- modules:
- - description: This module will manage a company entities in a SAP S4HANA environment
- name: sap_company
- namespace: identity
- - description: This module will upload and (de)implements C(SNOTES) in a SAP S4HANA
- environment.
- name: sap_snote
- namespace: system
- - description: Gathers SAP facts in a host
- name: sap_system_facts
- namespace: system
- - description: This module will manage a user entities in a SAP S4/HANA environment
- name: sap_user
- namespace: identity
- release_date: '2022-02-17'
- 2.0.0:
- changes:
- deprecated_features:
- - 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
- major_changes:
- - all modules - everything is now a redirect to the new collection community.sap_libs
- release_summary: 'This release deprecates all modules and redirect them to community.sap_libs.
- The modules are removed in this release.
-
- The modules are available in the community.sap_libs repository.'
- fragments:
- - 0029-deprecation.yml
- - 2.0.0.yml
- release_date: '2023-07-14'
diff --git a/ansible_collections/community/sap/changelogs/config.yaml b/ansible_collections/community/sap/changelogs/config.yaml
deleted file mode 100644
index db443763c..000000000
--- a/ansible_collections/community/sap/changelogs/config.yaml
+++ /dev/null
@@ -1,30 +0,0 @@
-changelog_filename_template: ../CHANGELOG.rst
-changelog_filename_version_depth: 0
-changes_file: changelog.yaml
-changes_format: combined
-keep_fragments: false
-mention_ancestor: true
-flatmap: true
-new_plugins_after_name: removed_features
-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
-title: Community SAP
-trivial_section_name: trivial
diff --git a/ansible_collections/community/sap/codecov.yml b/ansible_collections/community/sap/codecov.yml
deleted file mode 100644
index 604cc9ba0..000000000
--- a/ansible_collections/community/sap/codecov.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-fixes:
- - "/ansible_collections/community/sap/::"
diff --git a/ansible_collections/community/sap/meta/runtime.yml b/ansible_collections/community/sap/meta/runtime.yml
deleted file mode 100644
index 15cbcba59..000000000
--- a/ansible_collections/community/sap/meta/runtime.yml
+++ /dev/null
@@ -1,33 +0,0 @@
----
-requires_ansible: '>=2.9.10'
-
-plugin_routing:
- modules:
- community.sap.hana_query:
- redirect: community.sap_libs.sap_hdbsql
- deprecation:
- warning_text: Use community.sap_libs.sap_hdbsql instead.
- community.sap.sap_company:
- redirect: community.sap_libs.sap_company
- deprecation:
- warning_text: Use community.sap_libs.sap_company instead.
- community.sap.sap_snote:
- redirect: community.sap_libs.sap_snote
- deprecation:
- warning_text: Use community.sap_libs.sap_snote instead.
- community.sap.sap_snote:
- redirect: community.sap_libs.sap_system_facts
- deprecation:
- warning_text: Use community.sap_libs.sap_system_facts instead.
- community.sap.sap_user:
- redirect: community.sap_libs.sap_user
- deprecation:
- warning_text: Use community.sap_libs.sap_user instead.
- community.sap.sap_task_list_execute:
- redirect: community.sap_libs.sap_task_list_execute
- deprecation:
- warning_text: Use community.sap_libs.sap_task_list_execute instead.
- community.sap.sapcar_extract:
- redirect: community.sap_libs.sapcar_extract
- deprecation:
- warning_text: Use community.sap_libs.sapcar_extract instead.
diff --git a/ansible_collections/community/sap/plugins/doc_fragments/__init__.py b/ansible_collections/community/sap/plugins/doc_fragments/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/ansible_collections/community/sap/plugins/doc_fragments/__init__.py
+++ /dev/null
diff --git a/ansible_collections/community/sap/plugins/module_utils/__init__.py b/ansible_collections/community/sap/plugins/module_utils/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/ansible_collections/community/sap/plugins/module_utils/__init__.py
+++ /dev/null
diff --git a/ansible_collections/community/sap/plugins/modules/__init__.py b/ansible_collections/community/sap/plugins/modules/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/ansible_collections/community/sap/plugins/modules/__init__.py
+++ /dev/null
diff --git a/ansible_collections/community/sap/tests/integration/__init__.py b/ansible_collections/community/sap/tests/integration/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/ansible_collections/community/sap/tests/integration/__init__.py
+++ /dev/null
diff --git a/ansible_collections/community/sap/tests/integration/targets/__init__.py b/ansible_collections/community/sap/tests/integration/targets/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/ansible_collections/community/sap/tests/integration/targets/__init__.py
+++ /dev/null
diff --git a/ansible_collections/community/sap/tests/sanity/__init__.py b/ansible_collections/community/sap/tests/sanity/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/ansible_collections/community/sap/tests/sanity/__init__.py
+++ /dev/null
diff --git a/ansible_collections/community/sap/tests/unit/__init__.py b/ansible_collections/community/sap/tests/unit/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/ansible_collections/community/sap/tests/unit/__init__.py
+++ /dev/null
diff --git a/ansible_collections/community/sap/tests/unit/compat/__init__.py b/ansible_collections/community/sap/tests/unit/compat/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/ansible_collections/community/sap/tests/unit/compat/__init__.py
+++ /dev/null
diff --git a/ansible_collections/community/sap/tests/unit/compat/builtins.py b/ansible_collections/community/sap/tests/unit/compat/builtins.py
deleted file mode 100644
index f60ee6782..000000000
--- a/ansible_collections/community/sap/tests/unit/compat/builtins.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# (c) 2014, Toshio Kuratomi <tkuratomi@ansible.com>
-#
-# 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 <http://www.gnu.org/licenses/>.
-
-# Make coding more python3-ish
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-
-#
-# Compat for python2.7
-#
-
-# One unittest needs to import builtins via __import__() so we need to have
-# the string that represents it
-try:
- import __builtin__
-except ImportError:
- BUILTINS = 'builtins'
-else:
- BUILTINS = '__builtin__'
diff --git a/ansible_collections/community/sap/tests/unit/compat/mock.py b/ansible_collections/community/sap/tests/unit/compat/mock.py
deleted file mode 100644
index 0972cd2e8..000000000
--- a/ansible_collections/community/sap/tests/unit/compat/mock.py
+++ /dev/null
@@ -1,122 +0,0 @@
-# (c) 2014, Toshio Kuratomi <tkuratomi@ansible.com>
-#
-# 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 <http://www.gnu.org/licenses/>.
-
-# 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/community/sap/tests/unit/compat/unittest.py b/ansible_collections/community/sap/tests/unit/compat/unittest.py
deleted file mode 100644
index 98f08ad6a..000000000
--- a/ansible_collections/community/sap/tests/unit/compat/unittest.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# (c) 2014, Toshio Kuratomi <tkuratomi@ansible.com>
-#
-# 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 <http://www.gnu.org/licenses/>.
-
-# 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/community/sap/tests/unit/mock/__init__.py b/ansible_collections/community/sap/tests/unit/mock/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/ansible_collections/community/sap/tests/unit/mock/__init__.py
+++ /dev/null
diff --git a/ansible_collections/community/sap/tests/unit/mock/loader.py b/ansible_collections/community/sap/tests/unit/mock/loader.py
deleted file mode 100644
index 5389bdcb2..000000000
--- a/ansible_collections/community/sap/tests/unit/mock/loader.py
+++ /dev/null
@@ -1,102 +0,0 @@
-# (c) 2012-2014, Michael DeHaan <michael.dehaan@gmail.com>
-#
-# 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 os
-
-from ansible.errors import AnsibleParserError
-from ansible.parsing.dataloader import DataLoader
-from ansible.module_utils.common.text.converters import to_bytes, to_text
-
-
-class DictDataLoader(DataLoader):
-
- def __init__(self, file_mapping=None):
- file_mapping = {} if file_mapping is None else file_mapping
- assert type(file_mapping) == dict
-
- super(DictDataLoader, self).__init__()
-
- self._file_mapping = file_mapping
- self._build_known_directories()
- self._vault_secrets = None
-
- def load_from_file(self, path, cache=True, unsafe=False):
- path = to_text(path)
- if path in self._file_mapping:
- return self.load(self._file_mapping[path], path)
- return None
-
- # TODO: the real _get_file_contents returns a bytestring, so we actually convert the
- # unicode/text it's created with to utf-8
- def _get_file_contents(self, file_name):
- path = to_text(file_name)
- if path in self._file_mapping:
- return (to_bytes(self._file_mapping[path]), False)
- else:
- raise AnsibleParserError("file not found: %s" % path)
-
- def path_exists(self, path):
- path = to_text(path)
- return path in self._file_mapping or path in self._known_directories
-
- def is_file(self, path):
- path = to_text(path)
- return path in self._file_mapping
-
- def is_directory(self, path):
- path = to_text(path)
- return path in self._known_directories
-
- def list_directory(self, path):
- ret = []
- path = to_text(path)
- for x in (list(self._file_mapping.keys()) + self._known_directories):
- if x.startswith(path):
- if os.path.dirname(x) == path:
- ret.append(os.path.basename(x))
- return ret
-
- def is_executable(self, path):
- # FIXME: figure out a way to make paths return true for this
- return False
-
- def _add_known_directory(self, directory):
- if directory not in self._known_directories:
- self._known_directories.append(directory)
-
- def _build_known_directories(self):
- self._known_directories = []
- for path in self._file_mapping:
- dirname = os.path.dirname(path)
- while dirname not in ('/', ''):
- self._add_known_directory(dirname)
- dirname = os.path.dirname(dirname)
-
- def push(self, path, content):
- rebuild_dirs = False
- if path not in self._file_mapping:
- rebuild_dirs = True
-
- self._file_mapping[path] = content
-
- if rebuild_dirs:
- self._build_known_directories()
-
- def pop(self, path):
- if path in self._file_mapping:
- del self._file_mapping[path]
- self._build_known_directories()
-
- def clear(self):
- self._file_mapping = dict()
- self._known_directories = []
-
- def get_basedir(self):
- return os.getcwd()
-
- def set_vault_secrets(self, vault_secrets):
- self._vault_secrets = vault_secrets
diff --git a/ansible_collections/community/sap/tests/unit/mock/path.py b/ansible_collections/community/sap/tests/unit/mock/path.py
deleted file mode 100644
index c1c075bc0..000000000
--- a/ansible_collections/community/sap/tests/unit/mock/path.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-
-from ansible_collections.community.general.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/community/sap/tests/unit/mock/procenv.py b/ansible_collections/community/sap/tests/unit/mock/procenv.py
deleted file mode 100644
index 5673863e1..000000000
--- a/ansible_collections/community/sap/tests/unit/mock/procenv.py
+++ /dev/null
@@ -1,76 +0,0 @@
-# (c) 2016, Matt Davis <mdavis@ansible.com>
-# (c) 2016, Toshio Kuratomi <tkuratomi@ansible.com>
-#
-# 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 sys
-import json
-
-from contextlib import contextmanager
-from io import BytesIO, StringIO
-from ansible_collections.community.general.tests.unit.compat import unittest
-from ansible.module_utils.six import PY3
-from ansible.module_utils.common.text.converters import to_bytes
-
-
-@contextmanager
-def swap_stdin_and_argv(stdin_data='', argv_data=tuple()):
- """
- context manager that temporarily masks the test runner's values for stdin and argv
- """
- real_stdin = sys.stdin
- real_argv = sys.argv
-
- if PY3:
- fake_stream = StringIO(stdin_data)
- fake_stream.buffer = BytesIO(to_bytes(stdin_data))
- else:
- fake_stream = BytesIO(to_bytes(stdin_data))
-
- try:
- sys.stdin = fake_stream
- sys.argv = argv_data
-
- yield
- finally:
- sys.stdin = real_stdin
- sys.argv = real_argv
-
-
-@contextmanager
-def swap_stdout():
- """
- context manager that temporarily replaces stdout for tests that need to verify output
- """
- old_stdout = sys.stdout
-
- if PY3:
- fake_stream = StringIO()
- else:
- fake_stream = BytesIO()
-
- try:
- sys.stdout = fake_stream
-
- yield fake_stream
- finally:
- sys.stdout = old_stdout
-
-
-class ModuleTestCase(unittest.TestCase):
- def setUp(self, module_args=None):
- if module_args is None:
- module_args = {'_ansible_remote_tmp': '/tmp', '_ansible_keep_remote_files': False}
-
- args = json.dumps(dict(ANSIBLE_MODULE_ARGS=module_args))
-
- # unittest doesn't have a clean place to use a context manager, so we have to enter/exit manually
- self.stdin_swap = swap_stdin_and_argv(stdin_data=args)
- self.stdin_swap.__enter__()
-
- def tearDown(self):
- # unittest doesn't have a clean place to use a context manager, so we have to enter/exit manually
- self.stdin_swap.__exit__(None, None, None)
diff --git a/ansible_collections/community/sap/tests/unit/mock/vault_helper.py b/ansible_collections/community/sap/tests/unit/mock/vault_helper.py
deleted file mode 100644
index 6bd2db9c3..000000000
--- a/ansible_collections/community/sap/tests/unit/mock/vault_helper.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# 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.common.text.converters import to_bytes
-
-from ansible.parsing.vault import VaultSecret
-
-
-class TextVaultSecret(VaultSecret):
- '''A secret piece of text. ie, a password. Tracks text encoding.
-
- The text encoding of the text may not be the default text encoding so
- we keep track of the encoding so we encode it to the same bytes.'''
-
- def __init__(self, text, encoding=None, errors=None, _bytes=None):
- super(TextVaultSecret, self).__init__()
- self.text = text
- self.encoding = encoding or 'utf-8'
- self._bytes = _bytes
- self.errors = errors or 'strict'
-
- @property
- def bytes(self):
- '''The text encoded with encoding, unless we specifically set _bytes.'''
- return self._bytes or to_bytes(self.text, encoding=self.encoding, errors=self.errors)
diff --git a/ansible_collections/community/sap/tests/unit/mock/yaml_helper.py b/ansible_collections/community/sap/tests/unit/mock/yaml_helper.py
deleted file mode 100644
index a646c0241..000000000
--- a/ansible_collections/community/sap/tests/unit/mock/yaml_helper.py
+++ /dev/null
@@ -1,126 +0,0 @@
-# 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 io
-import yaml
-
-from ansible.module_utils.six import PY3
-from ansible.parsing.yaml.loader import AnsibleLoader
-from ansible.parsing.yaml.dumper import AnsibleDumper
-
-
-class YamlTestUtils(object):
- """Mixin class to combine with a unittest.TestCase subclass."""
- def _loader(self, stream):
- """Vault related tests will want to override this.
-
- Vault cases should setup a AnsibleLoader that has the vault password."""
- return AnsibleLoader(stream)
-
- def _dump_stream(self, obj, stream, dumper=None):
- """Dump to a py2-unicode or py3-string stream."""
- if PY3:
- return yaml.dump(obj, stream, Dumper=dumper)
- else:
- return yaml.dump(obj, stream, Dumper=dumper, encoding=None)
-
- def _dump_string(self, obj, dumper=None):
- """Dump to a py2-unicode or py3-string"""
- if PY3:
- return yaml.dump(obj, Dumper=dumper)
- else:
- return yaml.dump(obj, Dumper=dumper, encoding=None)
-
- def _dump_load_cycle(self, obj):
- # Each pass though a dump or load revs the 'generation'
- # obj to yaml string
- string_from_object_dump = self._dump_string(obj, dumper=AnsibleDumper)
-
- # wrap a stream/file like StringIO around that yaml
- stream_from_object_dump = io.StringIO(string_from_object_dump)
- loader = self._loader(stream_from_object_dump)
- # load the yaml stream to create a new instance of the object (gen 2)
- obj_2 = loader.get_data()
-
- # dump the gen 2 objects directory to strings
- string_from_object_dump_2 = self._dump_string(obj_2,
- dumper=AnsibleDumper)
-
- # The gen 1 and gen 2 yaml strings
- self.assertEqual(string_from_object_dump, string_from_object_dump_2)
- # the gen 1 (orig) and gen 2 py object
- self.assertEqual(obj, obj_2)
-
- # again! gen 3... load strings into py objects
- stream_3 = io.StringIO(string_from_object_dump_2)
- loader_3 = self._loader(stream_3)
- obj_3 = loader_3.get_data()
-
- string_from_object_dump_3 = self._dump_string(obj_3, dumper=AnsibleDumper)
-
- self.assertEqual(obj, obj_3)
- # should be transitive, but...
- self.assertEqual(obj_2, obj_3)
- self.assertEqual(string_from_object_dump, string_from_object_dump_3)
-
- def _old_dump_load_cycle(self, obj):
- '''Dump the passed in object to yaml, load it back up, dump again, compare.'''
- stream = io.StringIO()
-
- yaml_string = self._dump_string(obj, dumper=AnsibleDumper)
- self._dump_stream(obj, stream, dumper=AnsibleDumper)
-
- yaml_string_from_stream = stream.getvalue()
-
- # reset stream
- stream.seek(0)
-
- loader = self._loader(stream)
- # loader = AnsibleLoader(stream, vault_password=self.vault_password)
- obj_from_stream = loader.get_data()
-
- stream_from_string = io.StringIO(yaml_string)
- loader2 = self._loader(stream_from_string)
- # loader2 = AnsibleLoader(stream_from_string, vault_password=self.vault_password)
- obj_from_string = loader2.get_data()
-
- stream_obj_from_stream = io.StringIO()
- stream_obj_from_string = io.StringIO()
-
- if PY3:
- yaml.dump(obj_from_stream, stream_obj_from_stream, Dumper=AnsibleDumper)
- yaml.dump(obj_from_stream, stream_obj_from_string, Dumper=AnsibleDumper)
- else:
- yaml.dump(obj_from_stream, stream_obj_from_stream, Dumper=AnsibleDumper, encoding=None)
- yaml.dump(obj_from_stream, stream_obj_from_string, Dumper=AnsibleDumper, encoding=None)
-
- yaml_string_stream_obj_from_stream = stream_obj_from_stream.getvalue()
- yaml_string_stream_obj_from_string = stream_obj_from_string.getvalue()
-
- stream_obj_from_stream.seek(0)
- stream_obj_from_string.seek(0)
-
- if PY3:
- yaml_string_obj_from_stream = yaml.dump(obj_from_stream, Dumper=AnsibleDumper)
- yaml_string_obj_from_string = yaml.dump(obj_from_string, Dumper=AnsibleDumper)
- else:
- yaml_string_obj_from_stream = yaml.dump(obj_from_stream, Dumper=AnsibleDumper, encoding=None)
- yaml_string_obj_from_string = yaml.dump(obj_from_string, Dumper=AnsibleDumper, encoding=None)
-
- assert yaml_string == yaml_string_obj_from_stream
- assert yaml_string == yaml_string_obj_from_stream == yaml_string_obj_from_string
- assert (yaml_string == yaml_string_obj_from_stream == yaml_string_obj_from_string == yaml_string_stream_obj_from_stream ==
- yaml_string_stream_obj_from_string)
- assert obj == obj_from_stream
- assert obj == obj_from_string
- assert obj == yaml_string_obj_from_stream
- assert obj == yaml_string_obj_from_string
- assert obj == obj_from_stream == obj_from_string == yaml_string_obj_from_stream == yaml_string_obj_from_string
- return {'obj': obj,
- 'yaml_string': yaml_string,
- 'yaml_string_from_stream': yaml_string_from_stream,
- 'obj_from_stream': obj_from_stream,
- 'obj_from_string': obj_from_string,
- 'yaml_string_obj_from_string': yaml_string_obj_from_string}
diff --git a/ansible_collections/community/sap/tests/unit/plugins/__init__.py b/ansible_collections/community/sap/tests/unit/plugins/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/ansible_collections/community/sap/tests/unit/plugins/__init__.py
+++ /dev/null
diff --git a/ansible_collections/community/sap/tests/unit/plugins/modules/__init__.py b/ansible_collections/community/sap/tests/unit/plugins/modules/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/ansible_collections/community/sap/tests/unit/plugins/modules/__init__.py
+++ /dev/null
diff --git a/ansible_collections/community/sap/tests/unit/plugins/modules/database/__init__.py b/ansible_collections/community/sap/tests/unit/plugins/modules/database/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/ansible_collections/community/sap/tests/unit/plugins/modules/database/__init__.py
+++ /dev/null
diff --git a/ansible_collections/community/sap/tests/unit/plugins/modules/database/saphana/__init__.py b/ansible_collections/community/sap/tests/unit/plugins/modules/database/saphana/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/ansible_collections/community/sap/tests/unit/plugins/modules/database/saphana/__init__.py
+++ /dev/null
diff --git a/ansible_collections/community/sap/tests/unit/plugins/modules/database/saphana/test_hana_query.py b/ansible_collections/community/sap/tests/unit/plugins/modules/database/saphana/test_hana_query.py
deleted file mode 100644
index 2df6b13c9..000000000
--- a/ansible_collections/community/sap/tests/unit/plugins/modules/database/saphana/test_hana_query.py
+++ /dev/null
@@ -1,102 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright: (c) 2021, Rainer Leber (@rainerleber) <rainerleber@gmail.com>
-# 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.community.sap.plugins.modules import hana_query
-from ansible_collections.community.sap.tests.unit.plugins.modules.utils import (
- AnsibleExitJson,
- AnsibleFailJson,
- ModuleTestCase,
- set_module_args,
-)
-from ansible_collections.community.sap.tests.unit.compat.mock import patch
-from ansible.module_utils import basic
-
-
-def get_bin_path(*args, **kwargs):
- """Function to return path of hdbsql"""
- return "/usr/sap/HDB/HDB01/exe/hdbsql"
-
-
-class Testhana_query(ModuleTestCase):
- """Main class for testing hana_query module."""
-
- def setUp(self):
- """Setup."""
- super(Testhana_query, self).setUp()
- self.module = hana_query
- self.mock_get_bin_path = patch.object(basic.AnsibleModule, 'get_bin_path', get_bin_path)
- self.mock_get_bin_path.start()
- self.addCleanup(self.mock_get_bin_path.stop) # ensure that the patching is 'undone'
-
- def tearDown(self):
- """Teardown."""
- super(Testhana_query, self).tearDown()
-
- def test_without_required_parameters(self):
- """Failure must occurs when all parameters are missing."""
- with self.assertRaises(AnsibleFailJson):
- set_module_args({})
- self.module.main()
-
- def test_hana_query(self):
- """Check that result is processed."""
- set_module_args({
- 'sid': "HDB",
- 'instance': "01",
- 'encrypted': False,
- 'host': "localhost",
- 'user': "SYSTEM",
- 'password': "1234Qwer",
- 'database': "HDB",
- 'query': "SELECT * FROM users;"
- })
- with patch.object(basic.AnsibleModule, 'run_command') as run_command:
- run_command.return_value = 0, 'username,name\n testuser,test user \n myuser, my user \n', ''
- with self.assertRaises(AnsibleExitJson) as result:
- hana_query.main()
- self.assertEqual(result.exception.args[0]['query_result'], [[
- {'username': 'testuser', 'name': 'test user'},
- {'username': 'myuser', 'name': 'my user'},
- ]])
- self.assertEqual(run_command.call_count, 1)
-
- def test_hana_userstore_query(self):
- """Check that result is processed with userstore."""
- set_module_args({
- 'sid': "HDB",
- 'instance': "01",
- 'encrypted': False,
- 'host': "localhost",
- 'user': "SYSTEM",
- 'userstore': True,
- 'database': "HDB",
- 'query': "SELECT * FROM users;"
- })
- with patch.object(basic.AnsibleModule, 'run_command') as run_command:
- run_command.return_value = 0, 'username,name\n testuser,test user \n myuser, my user \n', ''
- with self.assertRaises(AnsibleExitJson) as result:
- hana_query.main()
- self.assertEqual(result.exception.args[0]['query_result'], [[
- {'username': 'testuser', 'name': 'test user'},
- {'username': 'myuser', 'name': 'my user'},
- ]])
- self.assertEqual(run_command.call_count, 1)
-
- def test_hana_failed_no_passwd(self):
- """Check that result is failed with no password."""
- with self.assertRaises(AnsibleFailJson):
- set_module_args({
- 'sid': "HDB",
- 'instance': "01",
- 'encrypted': False,
- 'host': "localhost",
- 'user': "SYSTEM",
- 'database': "HDB",
- 'query': "SELECT * FROM users;"
- })
- self.module.main()
diff --git a/ansible_collections/community/sap/tests/unit/plugins/modules/files/__init__.py b/ansible_collections/community/sap/tests/unit/plugins/modules/files/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/ansible_collections/community/sap/tests/unit/plugins/modules/files/__init__.py
+++ /dev/null
diff --git a/ansible_collections/community/sap/tests/unit/plugins/modules/files/test_sapcar_extract.py b/ansible_collections/community/sap/tests/unit/plugins/modules/files/test_sapcar_extract.py
deleted file mode 100644
index 5fe2edd1f..000000000
--- a/ansible_collections/community/sap/tests/unit/plugins/modules/files/test_sapcar_extract.py
+++ /dev/null
@@ -1,53 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright: (c) 2021, Rainer Leber (@rainerleber) <rainerleber@gmail.com>
-# 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.community.sap.plugins.modules.files import sapcar_extract
-from ansible_collections.community.sap.tests.unit.plugins.modules.utils import AnsibleExitJson, AnsibleFailJson, ModuleTestCase, set_module_args
-from ansible_collections.community.sap.tests.unit.compat.mock import patch
-from ansible.module_utils import basic
-
-
-def get_bin_path(*args, **kwargs):
- """Function to return path of SAPCAR"""
- return "/tmp/sapcar"
-
-
-class Testsapcar_extract(ModuleTestCase):
- """Main class for testing sapcar_extract module."""
-
- def setUp(self):
- """Setup."""
- super(Testsapcar_extract, self).setUp()
- self.module = sapcar_extract
- self.mock_get_bin_path = patch.object(basic.AnsibleModule, 'get_bin_path', get_bin_path)
- self.mock_get_bin_path.start()
- self.addCleanup(self.mock_get_bin_path.stop) # ensure that the patching is 'undone'
-
- def tearDown(self):
- """Teardown."""
- super(Testsapcar_extract, self).tearDown()
-
- def test_without_required_parameters(self):
- """Failure must occurs when all parameters are missing."""
- with self.assertRaises(AnsibleFailJson):
- set_module_args({})
- self.module.main()
-
- def test_sapcar_extract(self):
- """Check that result is changed."""
- set_module_args({
- 'path': "/tmp/HANA_CLIENT_REV2_00_053_00_LINUX_X86_64.SAR",
- 'dest': "/tmp/test2",
- 'binary_path': "/tmp/sapcar"
- })
- with patch.object(basic.AnsibleModule, 'run_command') as run_command:
- run_command.return_value = 0, '', '' # successful execution, no output
- with self.assertRaises(AnsibleExitJson) as result:
- sapcar_extract.main()
- self.assertTrue(result.exception.args[0]['changed'])
- self.assertEqual(run_command.call_count, 1)
diff --git a/ansible_collections/community/sap/tests/unit/plugins/modules/identity/test_sap_company.py b/ansible_collections/community/sap/tests/unit/plugins/modules/identity/test_sap_company.py
deleted file mode 100644
index 23490ccde..000000000
--- a/ansible_collections/community/sap/tests/unit/plugins/modules/identity/test_sap_company.py
+++ /dev/null
@@ -1,136 +0,0 @@
-# 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 sys
-from ansible_collections.community.sap.tests.unit.compat.mock import patch, MagicMock
-from ansible_collections.community.sap.tests.unit.plugins.modules.utils import AnsibleExitJson, AnsibleFailJson, ModuleTestCase, set_module_args
-
-sys.modules['pyrfc'] = MagicMock()
-sys.modules['pyrfc.Connection'] = MagicMock()
-
-from ansible_collections.community.sap.plugins.modules.identity import sap_company
-
-
-class TestSAPRfcModule(ModuleTestCase):
-
- def setUp(self):
- super(TestSAPRfcModule, self).setUp()
- self.module = sap_company
-
- def tearDown(self):
- super(TestSAPRfcModule, self).tearDown()
-
- def define_rfc_connect(self, mocker):
- return mocker.patch(self.module.call_rfc_method)
-
- def test_without_required_parameters(self):
- """Failure must occurs when all parameters are missing"""
- with self.assertRaises(AnsibleFailJson):
- set_module_args({})
- self.module.main()
-
- def test_error_user_create(self):
- """test fail to create company"""
-
- set_module_args({
- "conn_username": "DDIC",
- "conn_password": "Test1234",
- "host": "10.1.8.9",
- "company_id": "Comp_ID",
- "name": "Test_comp",
- "name_2": "LTD",
- "country": "DE",
- "time_zone": "UTC",
- "city": "City",
- "post_code": "12345",
- "street": "test_street",
- "street_no": "1",
- "e_mail": "test@test.de",
- })
- with patch.object(self.module, 'call_rfc_method') as RAW:
- RAW.return_value = {'RETURN': [{'FIELD': '', 'ID': '01', 'LOG_MSG_NO': '000000',
- 'LOG_NO': '', 'MESSAGE': 'Something went wrong', 'MESSAGE_V1': 'ADMIN',
- 'MESSAGE_V2': '', 'MESSAGE_V3': '', 'MESSAGE_V4': '', 'NUMBER': '199',
- 'PARAMETER': '', 'ROW': 0, 'SYSTEM': '', 'TYPE': 'E'}]}
-
- with self.assertRaises(AnsibleFailJson) as result:
- sap_company.main()
- self.assertEqual(result.exception.args[0]['msg'], 'Something went wrong')
-
- def test_success(self):
- """test execute company create success"""
-
- set_module_args({
- "conn_username": "DDIC",
- "conn_password": "Test1234",
- "host": "10.1.8.9",
- "company_id": "Comp_ID",
- "name": "Test_comp",
- "name_2": "LTD",
- "country": "DE",
- "time_zone": "UTC",
- "city": "City",
- "post_code": "12345",
- "street": "test_street",
- "street_no": "1",
- "e_mail": "test@test.de",
- })
- with patch.object(self.module, 'call_rfc_method') as RAW:
- RAW.return_value = {'RETURN': [{'FIELD': '', 'ID': '01', 'LOG_MSG_NO': '000000',
- 'LOG_NO': '', 'MESSAGE': 'Company address COMP_ID created', 'MESSAGE_V1': 'ADMIN',
- 'MESSAGE_V2': '', 'MESSAGE_V3': '', 'MESSAGE_V4': '', 'NUMBER': '102',
- 'PARAMETER': '', 'ROW': 0, 'SYSTEM': '', 'TYPE': 'S'}]}
-
- with self.assertRaises(AnsibleExitJson) as result:
- sap_company.main()
- self.assertEqual(result.exception.args[0]['msg'], 'Company address COMP_ID created')
-
- def test_no_changes(self):
- """test execute company no changes"""
-
- set_module_args({
- "conn_username": "DDIC",
- "conn_password": "Test1234",
- "host": "10.1.8.9",
- "company_id": "Comp_ID",
- "name": "Test_comp",
- "name_2": "LTD",
- "country": "DE",
- "time_zone": "UTC",
- "city": "City",
- "post_code": "12345",
- "street": "test_street",
- "street_no": "1",
- "e_mail": "test@test.de",
- })
- with patch.object(self.module, 'call_rfc_method') as RAW:
- RAW.return_value = {'RETURN': [{'FIELD': '', 'ID': '01', 'LOG_MSG_NO': '000000',
- 'LOG_NO': '', 'MESSAGE': 'Company address COMP_ID changed', 'MESSAGE_V1': 'ADMIN',
- 'MESSAGE_V2': '', 'MESSAGE_V3': '', 'MESSAGE_V4': '', 'NUMBER': '079',
- 'PARAMETER': '', 'ROW': 0, 'SYSTEM': '', 'TYPE': 'S'}]}
-
- with self.assertRaises(AnsibleExitJson) as result:
- sap_company.main()
- self.assertEqual(result.exception.args[0]['msg'], 'No changes where made.')
-
- def test_absent(self):
- """test execute company delete success"""
-
- set_module_args({
- "state": "absent",
- "conn_username": "DDIC",
- "conn_password": "Test1234",
- "host": "10.1.8.9",
- "company_id": "Comp_ID",
- })
- with patch.object(self.module, 'call_rfc_method') as RAW:
- RAW.return_value = {'RETURN': [{'FIELD': '', 'ID': '01', 'LOG_MSG_NO': '000000',
- 'LOG_NO': '', 'MESSAGE': 'Company address COMP_ID deleted', 'MESSAGE_V1': 'ADMIN',
- 'MESSAGE_V2': '', 'MESSAGE_V3': '', 'MESSAGE_V4': '', 'NUMBER': '080',
- 'PARAMETER': '', 'ROW': 0, 'SYSTEM': '', 'TYPE': 'S'}]}
-
- with self.assertRaises(AnsibleExitJson) as result:
- sap_company.main()
- self.assertEqual(result.exception.args[0]['msg'], 'Company address COMP_ID deleted')
diff --git a/ansible_collections/community/sap/tests/unit/plugins/modules/identity/test_sap_user.py b/ansible_collections/community/sap/tests/unit/plugins/modules/identity/test_sap_user.py
deleted file mode 100644
index 982689f7e..000000000
--- a/ansible_collections/community/sap/tests/unit/plugins/modules/identity/test_sap_user.py
+++ /dev/null
@@ -1,189 +0,0 @@
-# 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 sys
-from ansible_collections.community.sap.tests.unit.compat.mock import patch, MagicMock
-from ansible_collections.community.sap.tests.unit.plugins.modules.utils import AnsibleExitJson, AnsibleFailJson, ModuleTestCase, set_module_args
-
-sys.modules['pyrfc'] = MagicMock()
-sys.modules['pyrfc.Connection'] = MagicMock()
-
-from ansible_collections.community.sap.plugins.modules.identity import sap_user
-
-
-class TestSAPRfcModule(ModuleTestCase):
-
- def setUp(self):
- super(TestSAPRfcModule, self).setUp()
- self.module = sap_user
-
- def tearDown(self):
- super(TestSAPRfcModule, self).tearDown()
-
- def define_rfc_connect(self, mocker):
- return mocker.patch(self.module.call_rfc_method)
-
- def test_without_required_parameters(self):
- """Failure must occurs when all parameters are missing"""
- with self.assertRaises(AnsibleFailJson):
- set_module_args({})
- self.module.main()
-
- def test_error_user_create(self):
- """test fail to create user"""
-
- set_module_args({
- "conn_username": "DDIC",
- "conn_password": "Test1234",
- "host": "10.1.8.9",
- "username": "ADMIN",
- "firstname": "first_admin",
- "lastname": "last_admin",
- "email": "admin@test.de",
- "password": "Test123456",
- "useralias": "ADMIN",
- "company": "DEFAULT_COMPANY"
- })
-
- with patch.object(self.module, 'check_user') as check:
- check.return_value = False
-
- with patch.object(self.module, 'call_rfc_method') as RAW:
- RAW.return_value = {'RETURN': [{'FIELD': 'BNAME', 'ID': '01', 'LOG_MSG_NO': '000000',
- 'LOG_NO': '', 'MESSAGE': 'Something went wrong', 'MESSAGE_V1': 'ADMIN',
- 'MESSAGE_V2': '', 'MESSAGE_V3': '', 'MESSAGE_V4': '', 'NUMBER': '199',
- 'PARAMETER': '', 'ROW': 0, 'SYSTEM': '', 'TYPE': 'E'}]}
-
- with self.assertRaises(AnsibleFailJson) as result:
- sap_user.main()
- self.assertEqual(result.exception.args[0]['msg'], 'Something went wrong')
-
- def test_success(self):
- """test execute user create success"""
-
- set_module_args({
- "conn_username": "DDIC",
- "conn_password": "Test1234",
- "host": "10.1.8.9",
- "username": "ADMIN",
- "firstname": "first_admin",
- "lastname": "last_admin",
- "email": "admin@test.de",
- "password": "Test123456",
- "useralias": "ADMIN",
- "company": "DEFAULT_COMPANY"
- })
- with patch.object(self.module, 'check_user') as check:
- check.return_value = False
-
- with patch.object(self.module, 'call_rfc_method') as RAW:
- RAW.return_value = {'RETURN': [{'FIELD': 'BNAME', 'ID': '01', 'LOG_MSG_NO': '000000',
- 'LOG_NO': '', 'MESSAGE': 'User ADMIN created', 'MESSAGE_V1': 'ADMIN',
- 'MESSAGE_V2': '', 'MESSAGE_V3': '', 'MESSAGE_V4': '', 'NUMBER': '102',
- 'PARAMETER': '', 'ROW': 0, 'SYSTEM': '', 'TYPE': 'S'}]}
-
- with self.assertRaises(AnsibleExitJson) as result:
- sap_user.main()
- self.assertEqual(result.exception.args[0]['msg'], 'User ADMIN created')
-
- def test_no_changes(self):
- """test execute user no changes"""
-
- set_module_args({
- "conn_username": "DDIC",
- "conn_password": "Test1234",
- "host": "10.1.8.9",
- "username": "ADMIN",
- "firstname": "first_admin",
- "lastname": "last_admin",
- "email": "admin@test.de",
- "password": "Test123456",
- "useralias": "ADMIN",
- "company": "DEFAULT_COMPANY"
- })
- with patch.object(self.module, 'check_user') as check:
- check.return_value = True
-
- with patch.object(self.module, 'call_rfc_method') as RAW:
- RAW.return_value = {'RETURN': [{'FIELD': 'BNAME', 'ID': '01', 'LOG_MSG_NO': '000000',
- 'LOG_NO': '', 'MESSAGE': '', 'MESSAGE_V1': 'ADMIN',
- 'MESSAGE_V2': '', 'MESSAGE_V3': '', 'MESSAGE_V4': '', 'NUMBER': '029',
- 'PARAMETER': '', 'ROW': 0, 'SYSTEM': '', 'TYPE': 'S'}]}
-
- with patch.object(self.module, 'all') as DETAIL:
- DETAIL.return_value = True
-
- with self.assertRaises(AnsibleExitJson) as result:
- sap_user.main()
- self.assertEqual(result.exception.args[0]['msg'], 'No changes where made.')
-
- def test_absent(self):
- """test execute user delete success"""
-
- set_module_args({
- "state": "absent",
- "conn_username": "DDIC",
- "conn_password": "Test1234",
- "host": "10.1.8.9",
- "username": "ADMIN",
- })
- with patch.object(self.module, 'check_user') as check:
- check.return_value = True
-
- with patch.object(self.module, 'call_rfc_method') as RAW:
- RAW.return_value = {'RETURN': [{'FIELD': 'BNAME', 'ID': '01', 'LOG_MSG_NO': '000000',
- 'LOG_NO': '', 'MESSAGE': 'User ADMIN deleted', 'MESSAGE_V1': 'ADMIN',
- 'MESSAGE_V2': '', 'MESSAGE_V3': '', 'MESSAGE_V4': '', 'NUMBER': '102',
- 'PARAMETER': '', 'ROW': 0, 'SYSTEM': '', 'TYPE': 'S'}]}
-
- with self.assertRaises(AnsibleExitJson) as result:
- sap_user.main()
- self.assertEqual(result.exception.args[0]['msg'], 'User ADMIN deleted')
-
- def test_lock(self):
- """test execute user lock success"""
-
- set_module_args({
- "state": "lock",
- "conn_username": "DDIC",
- "conn_password": "Test1234",
- "host": "10.1.8.9",
- "username": "ADMIN",
- })
- with patch.object(self.module, 'check_user') as check:
- check.return_value = True
-
- with patch.object(self.module, 'call_rfc_method') as RAW:
- RAW.return_value = {'RETURN': [{'FIELD': 'BNAME', 'ID': '01', 'LOG_MSG_NO': '000000',
- 'LOG_NO': '', 'MESSAGE': 'User ADMIN locked', 'MESSAGE_V1': 'ADMIN',
- 'MESSAGE_V2': '', 'MESSAGE_V3': '', 'MESSAGE_V4': '', 'NUMBER': '206',
- 'PARAMETER': '', 'ROW': 0, 'SYSTEM': '', 'TYPE': 'S'}]}
-
- with self.assertRaises(AnsibleExitJson) as result:
- sap_user.main()
- self.assertEqual(result.exception.args[0]['msg'], 'User ADMIN locked')
-
- def test_unlock(self):
- """test execute user lock success"""
-
- set_module_args({
- "state": "lock",
- "conn_username": "DDIC",
- "conn_password": "Test1234",
- "host": "10.1.8.9",
- "username": "ADMIN",
- })
- with patch.object(self.module, 'check_user') as check:
- check.return_value = True
-
- with patch.object(self.module, 'call_rfc_method') as RAW:
- RAW.return_value = {'RETURN': [{'FIELD': 'BNAME', 'ID': '01', 'LOG_MSG_NO': '000000',
- 'LOG_NO': '', 'MESSAGE': 'User ADMIN unlocked', 'MESSAGE_V1': 'ADMIN',
- 'MESSAGE_V2': '', 'MESSAGE_V3': '', 'MESSAGE_V4': '', 'NUMBER': '210',
- 'PARAMETER': '', 'ROW': 0, 'SYSTEM': '', 'TYPE': 'S'}]}
-
- with self.assertRaises(AnsibleExitJson) as result:
- sap_user.main()
- self.assertEqual(result.exception.args[0]['msg'], 'User ADMIN unlocked')
diff --git a/ansible_collections/community/sap/tests/unit/plugins/modules/system/__init__.py b/ansible_collections/community/sap/tests/unit/plugins/modules/system/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/ansible_collections/community/sap/tests/unit/plugins/modules/system/__init__.py
+++ /dev/null
diff --git a/ansible_collections/community/sap/tests/unit/plugins/modules/system/test_sap_snote.py b/ansible_collections/community/sap/tests/unit/plugins/modules/system/test_sap_snote.py
deleted file mode 100644
index 09ee81186..000000000
--- a/ansible_collections/community/sap/tests/unit/plugins/modules/system/test_sap_snote.py
+++ /dev/null
@@ -1,181 +0,0 @@
-# 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 sys
-from ansible_collections.community.sap.tests.unit.compat.mock import patch, MagicMock, Mock
-from ansible_collections.community.sap.tests.unit.plugins.modules.utils import AnsibleExitJson, AnsibleFailJson, ModuleTestCase, set_module_args
-
-sys.modules['pyrfc'] = MagicMock()
-sys.modules['pyrfc.Connection'] = MagicMock()
-
-from ansible_collections.community.sap.plugins.modules.system import sap_snote
-
-
-class TestSAPRfcModule(ModuleTestCase):
-
- def setUp(self):
- super(TestSAPRfcModule, self).setUp()
- self.module = sap_snote
-
- def tearDown(self):
- super(TestSAPRfcModule, self).tearDown()
-
- def define_rfc_connect(self, mocker):
- return mocker.patch(self.module.call_rfc_method)
-
- def test_without_required_parameters(self):
- """Failure must occurs when all parameters are missing"""
- with self.assertRaises(AnsibleFailJson):
- set_module_args({})
- self.module.main()
-
- def test_error_module_not_found(self):
- """tests fail module error"""
-
- set_module_args({
- "conn_username": "ADMIN",
- "conn_password": "Test1234",
- "host": "10.1.8.9",
- "snote_path": "/user/sap/trans/temp/000123456.txt"
- })
- with self.assertRaises(AnsibleFailJson) as result:
- self.module.HAS_PYRFC_LIBRARY = False
- self.module.ANOTHER_LIBRARY_IMPORT_ERROR = 'Module not found'
- self.module.main()
- self.assertEqual(result.exception.args[0]['exception'], 'Module not found')
-
- def test_error_connection(self):
- """tests fail module error"""
-
- set_module_args({
- "conn_username": "ADMIN",
- "conn_password": "Test1234",
- "host": "10.1.8.9",
- "snote_path": "/user/sap/trans/temp/000123456.txt"
- })
- with self.assertRaises(AnsibleFailJson) as result:
- self.module.Connection.side_effect = Mock(side_effect=Exception('Test'))
- self.module.main()
- self.assertEqual(result.exception.args[0]['msg'], 'Something went wrong connecting to the SAP system.')
-
- def test_error_wrong_path(self):
- """tests fail wrong path extension"""
-
- set_module_args({
- "conn_username": "ADMIN",
- "conn_password": "Test1234",
- "host": "10.1.8.9",
- "snote_path": "/user/sap/trans/temp/000123456_00.tx"
- })
-
- with self.assertRaises(AnsibleFailJson) as result:
- self.module.main()
- self.assertEqual(result.exception.args[0]['msg'], 'The path must include the extracted snote file and ends with txt.')
-
- def test_error_wrong_user(self):
- """tests fail wrong path extension"""
-
- set_module_args({
- "conn_username": "DDIC",
- "conn_password": "Test1234",
- "host": "10.1.8.9",
- "snote_path": "/user/sap/trans/temp/000123456_00.tx"
- })
-
- with self.assertRaises(AnsibleFailJson) as result:
- self.module.main()
- self.assertEqual(result.exception.args[0]['msg'], 'User C(DDIC) or C(SAP*) not allowed for this operation.')
-
- def test_success_absent(self):
- """test absent execute snote"""
-
- set_module_args({
- "conn_username": "ADMIN",
- "conn_password": "Test1234",
- "host": "10.1.8.9",
- "state": "absent",
- "snote_path": "/user/sap/trans/temp/000123456.txt"
- })
- with patch.object(self.module, 'call_rfc_method') as call:
- call.return_value = {'EV_RC': 0}
- with self.assertRaises(AnsibleExitJson) as result:
- with patch.object(self.module, 'check_implementation') as check:
- check.side_effect = [True, False]
- self.module.main()
- self.assertEqual(result.exception.args[0]['msg'], 'SNOTE "000123456" deimplemented.')
-
- def test_success_absent_snot_only(self):
- """test absent execute snote"""
-
- set_module_args({
- "conn_username": "ADMIN",
- "conn_password": "Test1234",
- "host": "10.1.8.9",
- "state": "absent",
- "snote": "000123456"
- })
- with patch.object(self.module, 'call_rfc_method') as call:
- call.return_value = {'EV_RC': 0}
- with self.assertRaises(AnsibleExitJson) as result:
- with patch.object(self.module, 'check_implementation') as check:
- check.side_effect = [True, False]
- self.module.main()
- self.assertEqual(result.exception.args[0]['msg'], 'SNOTE "000123456" deimplemented.')
-
- def test_nothing_to_do(self):
- """test nothing to do"""
-
- set_module_args({
- "conn_username": "ADMIN",
- "conn_password": "Test1234",
- "host": "10.1.8.9",
- "state": "present",
- "snote_path": "/user/sap/trans/temp/000123456.txt"
- })
- with patch.object(self.module, 'check_implementation') as check:
- check.return_value = True
- with self.assertRaises(AnsibleExitJson) as result:
- self.module.main()
- self.assertEqual(result.exception.args[0]['msg'], 'Nothing to do.')
-
- def test_success_present_with_copy(self):
- """test present execute snote"""
-
- set_module_args({
- "conn_username": "ADMIN",
- "conn_password": "Test1234",
- "host": "10.1.8.9",
- "state": "present",
- "snote_path": "/user/sap/trans/temp/000123456.txt"
- })
- with patch.object(self.module, 'call_rfc_method') as call:
- call.return_value = {'EV_RC': 0}
- with self.assertRaises(AnsibleExitJson) as result:
- with patch.object(self.module, 'check_implementation') as check:
- check.side_effect = [False, True]
- with patch.object(self.module, 'call_rfc_method') as callrfc:
- callrfc.side_effect = [{'EV_RC': 0}, {'EV_RC': 0}, {'ET_MANUAL_ACTIVITIES': ''}]
- self.module.main()
- self.assertEqual(result.exception.args[0]['msg'], 'SNOTE "000123456" implemented.')
-
- def test_success_present_implement_only(self):
- """test present implement snote"""
-
- set_module_args({
- "conn_username": "ADMIN",
- "conn_password": "Test1234",
- "host": "10.1.8.9",
- "state": "present",
- "snote": "000123456"
- })
- with patch.object(self.module, 'call_rfc_method') as call:
- call.return_value = {'EV_RC': 0}
- with self.assertRaises(AnsibleExitJson) as result:
- with patch.object(self.module, 'check_implementation') as check:
- check.side_effect = [False, True]
- with patch.object(self.module, 'call_rfc_method') as callrfc:
- callrfc.side_effect = [{'EV_RC': 0}, {'ET_MANUAL_ACTIVITIES': ''}]
- self.module.main()
- self.assertEqual(result.exception.args[0]['msg'], 'SNOTE "000123456" implemented.')
diff --git a/ansible_collections/community/sap/tests/unit/plugins/modules/system/test_sap_system_facts.py b/ansible_collections/community/sap/tests/unit/plugins/modules/system/test_sap_system_facts.py
deleted file mode 100644
index b63d90d35..000000000
--- a/ansible_collections/community/sap/tests/unit/plugins/modules/system/test_sap_system_facts.py
+++ /dev/null
@@ -1,106 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright: (c) 2021, Rainer Leber (@rainerleber) <rainerleber@gmail.com>
-# 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
-
-import mock
-__metaclass__ = type
-
-from ansible_collections.community.sap.plugins.modules.system import sap_system_facts
-from ansible_collections.community.sap.tests.unit.plugins.modules.utils import AnsibleExitJson, ModuleTestCase
-from ansible_collections.community.sap.tests.unit.compat.mock import patch, MagicMock
-from ansible.module_utils import basic
-
-
-def get_bin_path(*args, **kwargs):
- """Function to return path of sapcontrol"""
- return "/usr/sap/hostctrl/exe/sapcontrol"
-
-
-class Testsap_system_facts(ModuleTestCase):
- """Main class for testing sap_system_facts module."""
-
- def setUp(self):
- """Setup."""
- super(Testsap_system_facts, self).setUp()
- self.module = sap_system_facts
- self.mock_get_bin_path = patch.object(basic.AnsibleModule, 'get_bin_path', get_bin_path)
- self.mock_get_bin_path.start()
- self.addCleanup(self.mock_get_bin_path.stop)
-
- def tearDown(self):
- """Teardown."""
- super(Testsap_system_facts, self).tearDown()
-
- def test_no_systems_available(self):
- """No SAP Systems"""
- with self.assertRaises(AnsibleExitJson) as result:
- self.module.main()
- self.assertEqual(result.exception.args[0]['ansible_facts'], {})
-
- def test_sap_system_facts_all(self):
- """Check that result is changed when all is one system."""
- with patch.object(self.module, 'get_all_hana_sid') as get_all_hana_sid:
- get_all_hana_sid.return_value = ['HDB']
- with patch.object(self.module, 'get_hana_nr') as get_hana_nr:
- get_hana_nr.return_value = [{"InstanceType": "HANA", "NR": "01", "SID": "HDB", "TYPE": "HDB"}]
- with patch.object(self.module, 'get_all_nw_sid') as get_all_nw_sid:
- get_all_nw_sid.return_value = ['ABC']
- with patch.object(self.module, 'get_nw_nr') as get_nw_nr:
- get_nw_nr.return_value = [{"InstanceType": "NW", "NR": "00", "SID": "ABC", "TYPE": "ASCS"},
- {"InstanceType": "NW", "NR": "01", "SID": "ABC", "TYPE": "PAS"}]
- with self.assertRaises(AnsibleExitJson) as result:
- self.module.main()
- self.assertEqual(result.exception.args[0]['ansible_facts'], {'sap': [{"InstanceType": "HANA", "NR": "01", "SID": "HDB", "TYPE": "HDB"},
- {"InstanceType": "NW", "NR": "00", "SID": "ABC", "TYPE": "ASCS"},
- {"InstanceType": "NW", "NR": "01", "SID": "ABC", "TYPE": "PAS"}]})
-
- def test_sap_system_facts_command_hana(self):
- """Check that result for HANA is correct."""
- with patch.object(self.module, 'get_all_hana_sid') as mock_all_hana_sid:
- mock_all_hana_sid.return_value = ['HDB']
- with patch.object(self.module.os, 'listdir') as mock_listdir:
- mock_listdir.return_value = ['HDB01']
- with patch.object(basic.AnsibleModule, 'run_command') as run_command:
- run_command.return_value = [0, '', '']
- with self.assertRaises(AnsibleExitJson) as result:
- self.module.main()
- self.assertEqual(result.exception.args[0]['ansible_facts'], {'sap': [{"InstanceType": "HANA", "NR": "01", "SID": "HDB", "TYPE": "HDB"}]})
-
- def test_sap_system_facts_pas_nw(self):
- """Check that result for NW is correct."""
- with patch.object(self.module, 'get_all_nw_sid') as mock_all_nw_sid:
- mock_all_nw_sid.return_value = ['ABC']
- with patch.object(self.module.os, 'listdir') as mock_listdir:
- mock_listdir.return_value = ['D00']
- with patch.object(basic.AnsibleModule, 'run_command') as run_command:
- run_command.return_value = [0, 'SAP\nINSTANCE_NAME, Attribute, D00\nSAP', '']
- with self.assertRaises(AnsibleExitJson) as result:
- self.module.main()
- self.assertEqual(result.exception.args[0]['ansible_facts'], {'sap': [{'InstanceType': 'NW', 'NR': '00', 'SID': 'ABC', 'TYPE': 'PAS'}]})
-
- def test_sap_system_facts_future_nw(self):
- """Check that future apps for NW are correct handled."""
- with patch.object(self.module, 'get_all_nw_sid') as mock_all_nw_sid:
- mock_all_nw_sid.return_value = ['ABC']
- with patch.object(self.module.os, 'listdir') as mock_listdir:
- mock_listdir.return_value = ['XY00']
- with patch.object(basic.AnsibleModule, 'run_command') as run_command:
- run_command.return_value = [0, 'SAP\nINSTANCE_NAME, Attribute, XY00\nSAP', '']
- with self.assertRaises(AnsibleExitJson) as result:
- self.module.main()
- self.assertEqual(result.exception.args[0]['ansible_facts'], {'sap': [{'InstanceType': 'NW', 'NR': '00', 'SID': 'ABC', 'TYPE': 'XXX'}]})
-
- def test_sap_system_facts_wd_nw(self):
- """Check that WD for NW is correct handled."""
- with patch.object(self.module, 'get_all_nw_sid') as mock_all_nw_sid:
- mock_all_nw_sid.return_value = ['ABC']
- with patch.object(self.module.os, 'listdir') as mock_listdir:
- mock_listdir.return_value = ['WD80']
- with patch.object(basic.AnsibleModule, 'run_command') as run_command:
- run_command.return_value = [0, 'SAP\nINSTANCE_NAME, Attribute, WD80\nSAP', '']
- with self.assertRaises(AnsibleExitJson) as result:
- self.module.main()
- self.assertEqual(result.exception.args[0]['ansible_facts'], {'sap': [{'InstanceType': 'NW', 'NR': '80', 'SID': 'ABC', 'TYPE': 'WebDisp'}]})
diff --git a/ansible_collections/community/sap/tests/unit/plugins/modules/system/test_sap_task_list_execute.py b/ansible_collections/community/sap/tests/unit/plugins/modules/system/test_sap_task_list_execute.py
deleted file mode 100644
index 7362c13d8..000000000
--- a/ansible_collections/community/sap/tests/unit/plugins/modules/system/test_sap_task_list_execute.py
+++ /dev/null
@@ -1,89 +0,0 @@
-# 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 sys
-from ansible_collections.community.sap.tests.unit.compat.mock import patch, MagicMock
-from ansible_collections.community.sap.tests.unit.plugins.modules.utils import AnsibleExitJson, AnsibleFailJson, ModuleTestCase, set_module_args
-
-sys.modules['pyrfc'] = MagicMock()
-sys.modules['pyrfc.Connection'] = MagicMock()
-sys.modules['xmltodict'] = MagicMock()
-sys.modules['xmltodict.parse'] = MagicMock()
-
-from ansible_collections.community.sap.plugins.modules.system import sap_task_list_execute
-
-
-class TestSAPRfcModule(ModuleTestCase):
-
- def setUp(self):
- super(TestSAPRfcModule, self).setUp()
- self.module = sap_task_list_execute
-
- def tearDown(self):
- super(TestSAPRfcModule, self).tearDown()
-
- def define_rfc_connect(self, mocker):
- return mocker.patch(self.module.call_rfc_method)
-
- def test_without_required_parameters(self):
- """Failure must occurs when all parameters are missing"""
- with self.assertRaises(AnsibleFailJson):
- set_module_args({})
- self.module.main()
-
- def test_error_no_task_list(self):
- """tests fail to exec task list"""
-
- set_module_args({
- "conn_username": "DDIC",
- "conn_password": "Test1234",
- "host": "10.1.8.9",
- "task_to_execute": "SAP_BASIS_SSL_CHECK"
- })
-
- with patch.object(self.module, 'Connection') as conn:
- conn.return_value = ''
- with self.assertRaises(AnsibleFailJson) as result:
- self.module.main()
- self.assertEqual(result.exception.args[0]['msg'], 'The task list does not exist.')
-
- def test_success(self):
- """test execute task list success"""
-
- set_module_args({
- "conn_username": "DDIC",
- "conn_password": "Test1234",
- "host": "10.1.8.9",
- "task_to_execute": "SAP_BASIS_SSL_CHECK"
- })
- with patch.object(self.module, 'xml_to_dict') as XML:
- XML.return_value = {'item': [{'TASK': {'CHECK_STATUS_DESCR': 'Check successfully',
- 'STATUS_DESCR': 'Executed successfully', 'TASKNAME': 'CL_STCT_CHECK_SEC_CRYPTO',
- 'LNR': '1', 'DESCRIPTION': 'Check SAP Cryptographic Library', 'DOCU_EXIST': 'X',
- 'LOG_EXIST': 'X', 'ACTION_SKIP': None, 'ACTION_UNSKIP': None, 'ACTION_CONFIRM': None,
- 'ACTION_MAINTAIN': None}}]}
-
- with self.assertRaises(AnsibleExitJson) as result:
- sap_task_list_execute.main()
- self.assertEqual(result.exception.args[0]['out'], {'item': [{'TASK': {'CHECK_STATUS_DESCR': 'Check successfully',
- 'STATUS_DESCR': 'Executed successfully', 'TASKNAME': 'CL_STCT_CHECK_SEC_CRYPTO',
- 'LNR': '1', 'DESCRIPTION': 'Check SAP Cryptographic Library', 'DOCU_EXIST': 'X',
- 'LOG_EXIST': 'X', 'ACTION_SKIP': None, 'ACTION_UNSKIP': None,
- 'ACTION_CONFIRM': None, 'ACTION_MAINTAIN': None}}]})
-
- def test_success_no_log(self):
- """test execute task list success without logs"""
-
- set_module_args({
- "conn_username": "DDIC",
- "conn_password": "Test1234",
- "host": "10.1.8.9",
- "task_to_execute": "SAP_BASIS_SSL_CHECK"
- })
- with patch.object(self.module, 'xml_to_dict') as XML:
- XML.return_value = "No logs available."
- with self.assertRaises(AnsibleExitJson) as result:
- sap_task_list_execute.main()
- self.assertEqual(result.exception.args[0]['out'], 'No logs available.')
diff --git a/ansible_collections/community/sap/tests/unit/plugins/modules/utils.py b/ansible_collections/community/sap/tests/unit/plugins/modules/utils.py
deleted file mode 100644
index 8f20b4575..000000000
--- a/ansible_collections/community/sap/tests/unit/plugins/modules/utils.py
+++ /dev/null
@@ -1,52 +0,0 @@
-# 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 json
-
-from ansible_collections.community.sap.tests.unit.compat import unittest
-from ansible_collections.community.sap.tests.unit.compat.mock import patch
-from ansible.module_utils import basic
-from ansible.module_utils.common.text.converters import to_bytes
-
-
-def set_module_args(args):
- if '_ansible_remote_tmp' not in args:
- args['_ansible_remote_tmp'] = '/tmp'
- if '_ansible_keep_remote_files' not in args:
- args['_ansible_keep_remote_files'] = False
-
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args)
-
-
-class AnsibleExitJson(Exception):
- pass
-
-
-class AnsibleFailJson(Exception):
- pass
-
-
-def exit_json(*args, **kwargs):
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs):
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-class ModuleTestCase(unittest.TestCase):
-
- def setUp(self):
- self.mock_module = patch.multiple(basic.AnsibleModule, exit_json=exit_json, fail_json=fail_json)
- self.mock_module.start()
- self.mock_sleep = patch('time.sleep')
- self.mock_sleep.start()
- set_module_args({})
- self.addCleanup(self.mock_module.stop)
- self.addCleanup(self.mock_sleep.stop)
diff --git a/ansible_collections/community/sap/tests/unit/requirements.txt b/ansible_collections/community/sap/tests/unit/requirements.txt
deleted file mode 100644
index 49654b8b5..000000000
--- a/ansible_collections/community/sap/tests/unit/requirements.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-unittest2 ; python_version < '2.7'
-importlib ; python_version < '2.7'
-
-# requirement sap_task_list_execute
-lxml < 4.3.0 ; python_version < '2.7' # lxml 4.3.0 and later require python 2.7 or later
-lxml ; python_version >= '2.7'
-argparse ; python_version >= '2.6' \ No newline at end of file
diff --git a/ansible_collections/community/vmware/.github/workflows/ansible-test.yml b/ansible_collections/community/vmware/.github/workflows/ansible-test.yml
index 6a5866e13..79531def6 100644
--- a/ansible_collections/community/vmware/.github/workflows/ansible-test.yml
+++ b/ansible_collections/community/vmware/.github/workflows/ansible-test.yml
@@ -91,7 +91,8 @@ jobs:
testing-type: sanity
# OPTIONAL If your sanity tests require code
# from other collections, install them like this
- # test-deps: >-
+ test-deps: >-
+ vmware.vmware
# ansible.netcommon
# ansible.utils
# OPTIONAL If set to true, will test only against changed files,
@@ -151,6 +152,7 @@ jobs:
test-deps: >-
ansible.netcommon
ansible.utils
+ vmware.vmware
# OPTIONAL If set to true, will test only against changed files,
# which should improve CI performance. See limitations on
# https://github.com/ansible-community/ansible-test-gh-action#pull-request-change-detection
diff --git a/ansible_collections/community/vmware/CHANGELOG.rst b/ansible_collections/community/vmware/CHANGELOG.rst
index 4162c1885..a65557bc0 100644
--- a/ansible_collections/community/vmware/CHANGELOG.rst
+++ b/ansible_collections/community/vmware/CHANGELOG.rst
@@ -6,6 +6,21 @@ community.vmware Release Notes
This changelog describes changes after version 3.9.0.
+v4.4.0
+======
+
+Minor Changes
+-------------
+
+- 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).
+
+Bugfixes
+--------
+
+- Clarify pyVmomi requirement (https://github.com/ansible-collections/community.vmware/pull/2071).
+- 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).
+
v4.3.0
======
diff --git a/ansible_collections/community/vmware/FILES.json b/ansible_collections/community/vmware/FILES.json
index 68fe7037b..ca7811202 100644
--- a/ansible_collections/community/vmware/FILES.json
+++ b/ansible_collections/community/vmware/FILES.json
@@ -25,7 +25,7 @@
"name": ".github/workflows/ansible-test.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75ced302218d85f3484c215700b3626db0288f380c6d549f666f13ddd05585e8",
+ "chksum_sha256": "03d0884033021aee8129dec83b8f3443844743e9d6a1a3f81f8261b61be37a39",
"format": 1
},
{
@@ -88,7 +88,7 @@
"name": "changelogs/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fa92ffc48b8d5e744ed8748724d0623b9bdc81a4e57798fe99098640234cc5bc",
+ "chksum_sha256": "3a15dd1e41ea5e7c5183d62584d11ef00cc90c34583f1dcf1a3da094180fdb44",
"format": 1
},
{
@@ -277,7 +277,7 @@
"name": "plugins/module_utils/vmware.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "902d67e645b235e10d27e179666442625e6ea9df4a4e4589ee6ba1427376b652",
+ "chksum_sha256": "8379242e20efae1092d67d62665bfc7fd84774d75668439a788e87b374cd8938",
"format": 1
},
{
@@ -410,7 +410,7 @@
"name": "plugins/modules/vmware_cluster_dpm.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "823d0eba4ad0a749924bc16b0ac8540211a54add654b4ca445c8ad246bddf250",
+ "chksum_sha256": "017a074c3d73a814baf6c06b7de579942877ab137a4126e4c967c3290bb4f994",
"format": 1
},
{
@@ -438,7 +438,7 @@
"name": "plugins/modules/vmware_cluster_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2f1c85c2da228ca18fd165303c4bf6e3820785433f8e4c4b29da5532f097ae55",
+ "chksum_sha256": "ed5923cdc15305e8412b05f37b6d2b0103ed9d41befbbeeb8a8598b28b0afa2a",
"format": 1
},
{
@@ -508,7 +508,7 @@
"name": "plugins/modules/vmware_datacenter_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "206991b567645c273700b018f4453bb777f3a182f73844a7ed658c38c9d41311",
+ "chksum_sha256": "12490a660df9d43092b1e3a6075f399a5895799d7d4e7909a103a27f5605e755",
"format": 1
},
{
@@ -536,7 +536,7 @@
"name": "plugins/modules/vmware_datastore_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "324deb8bd961b7c4834f581d1979ab0aba69e7a7e82879f060a4b37ec2a4edda",
+ "chksum_sha256": "39a6da2a806ee94b1ad41676287541052a9e30f5e0b808de9ae9ed5da78185e3",
"format": 1
},
{
@@ -592,7 +592,7 @@
"name": "plugins/modules/vmware_dvs_portgroup.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "62e5113c13f94cb054db298f8e7ba9ea775fab8f7b148312f2837ffcd68c4eba",
+ "chksum_sha256": "f72f4e7664b47113e421c73620d2f2950d87f1482ab488af450b879acae509cb",
"format": 1
},
{
@@ -620,7 +620,7 @@
"name": "plugins/modules/vmware_dvswitch_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "60c4835bda0af924c470d6fa719849a1189e8877b9580e207927b82095a15b25",
+ "chksum_sha256": "155fbe06751bd991140d913909069ac49373e2eab87081014b31ef0d8d38c23f",
"format": 1
},
{
@@ -774,7 +774,7 @@
"name": "plugins/modules/vmware_guest_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "da25048b3ce8b821bb13c1c12f71546303867535cbcc8cf0957fd0d82a70d22d",
+ "chksum_sha256": "b76f0876359e7bb7f0f56956c1d24aaece045f725888ff85553229d14eb26c4c",
"format": 1
},
{
@@ -998,7 +998,7 @@
"name": "plugins/modules/vmware_host_facts.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0be83e8553f01c0feee73f3256d60828c7a599bb99828afa64ed359c30ba1bb8",
+ "chksum_sha256": "5ed17567e7cd480c23e384c24937a5fdb53350db9bf521a0885a5a99c0acfc98",
"format": 1
},
{
@@ -1376,7 +1376,7 @@
"name": "plugins/modules/vmware_vcenter_settings_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "00e24ba53faf96b10b84298e0a97b2a1915b0bb9d63e62ff0ff3ed17797bb271",
+ "chksum_sha256": "006aab37a213f3bc88fdbd3b1bfbcaf95cceafd466f7a539cf3ffb9364951780",
"format": 1
},
{
@@ -1481,7 +1481,7 @@
"name": "plugins/modules/vmware_vsan_health_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f1f1cd15f00fc30518dff21437bc09178e8e7d78746a08686f4879992f19d2a5",
+ "chksum_sha256": "46458bb24562c4677938db0efe562de66cb8d9b54c2d360bb00717fec4c82792",
"format": 1
},
{
@@ -2531,7 +2531,7 @@
"name": "tests/integration/targets/vmware_content_library_manager/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f8746ce261098f3b9959c236b65b5f905c80b90dddfb4ed53baaf5bf21cb51a1",
+ "chksum_sha256": "8290f7eeff6ef6efbe373acc9c4526c7a7fcb110ccdabef07a7143e3e147cf16",
"format": 1
},
{
@@ -2951,7 +2951,7 @@
"name": "tests/integration/targets/vmware_dvs_portgroup/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aa654a9325a4ed0af466f17af77dbf9623cf65298d16472f1a01436ca3fa1af8",
+ "chksum_sha256": "884a4101577841f2fd99c3064e339630f10db088d284eb50b7214ee25cda5f2c",
"format": 1
},
{
@@ -7025,7 +7025,7 @@
"name": "CHANGELOG.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6b2e0c075305c8d5f1b662a7533014e70ec9d1733eb79d5f70f1e024ecc06d99",
+ "chksum_sha256": "e2bff3adb02c855ffa4cc5c55d911169d560a30bd0825d44eac85c6a058c72dc",
"format": 1
},
{
@@ -7053,7 +7053,7 @@
"name": "requirements.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0925a1e635ac14a5c481a16d2e3e59ccc5b7411579ddb3a27199ae069fe7deca",
+ "chksum_sha256": "9e5d71254beec2adb7e2df9075aedca54b6e6dc7d13b65dfb3a38a5d81165594",
"format": 1
},
{
diff --git a/ansible_collections/community/vmware/MANIFEST.json b/ansible_collections/community/vmware/MANIFEST.json
index d1bc8edfe..1b9ad314f 100644
--- a/ansible_collections/community/vmware/MANIFEST.json
+++ b/ansible_collections/community/vmware/MANIFEST.json
@@ -2,7 +2,7 @@
"collection_info": {
"namespace": "community",
"name": "vmware",
- "version": "4.3.0",
+ "version": "4.4.0",
"authors": [
"Ansible (https://github.com/ansible)"
],
@@ -28,7 +28,7 @@
"name": "FILES.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "af79d3641999ba756f51b0b3c0562e0ebba66c8c764a0aff81496d5906a7398a",
+ "chksum_sha256": "4ee26340abe1773c12bad33eb99b9c3d9584f421dbeaeef0e19fd05add0b0f26",
"format": 1
},
"format": 1
diff --git a/ansible_collections/community/vmware/changelogs/changelog.yaml b/ansible_collections/community/vmware/changelogs/changelog.yaml
index 2b250b5fd..b0d9afb0a 100644
--- a/ansible_collections/community/vmware/changelogs/changelog.yaml
+++ b/ansible_collections/community/vmware/changelogs/changelog.yaml
@@ -130,3 +130,20 @@ releases:
- 2036-missing_error_msg_in_vmware_guest.yml
- 2044-error_in_adding_disk_to_vm_in_vmware_guest.yml
release_date: '2024-04-20'
+ 4.4.0:
+ changes:
+ bugfixes:
+ - Clarify pyVmomi requirement (https://github.com/ansible-collections/community.vmware/pull/2071).
+ - 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).
+ minor_changes:
+ - 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).
+ fragments:
+ - 2053-vmware_dvs_portgroup.yml
+ - 2055-vmware_dvs_portgroup-status_default.yml
+ - 2057-vmware_cluster_dpm-handle-dpm-none-config.yml
+ - 2071-clarify-pyvmomi-requirement.yml
+ release_date: '2024-05-19'
diff --git a/ansible_collections/community/vmware/plugins/module_utils/vmware.py b/ansible_collections/community/vmware/plugins/module_utils/vmware.py
index 12bdf5107..c2c9a4f23 100644
--- a/ansible_collections/community/vmware/plugins/module_utils/vmware.py
+++ b/ansible_collections/community/vmware/plugins/module_utils/vmware.py
@@ -39,11 +39,9 @@ try:
from pyVim import connect
from pyVmomi import vim, vmodl, VmomiSupport
HAS_PYVMOMI = True
- HAS_PYVMOMIJSON = hasattr(VmomiSupport, 'VmomiJSONEncoder')
except ImportError:
PYVMOMI_IMP_ERR = traceback.format_exc()
HAS_PYVMOMI = False
- HAS_PYVMOMIJSON = False
from ansible.module_utils._text import to_text, to_native
from ansible.module_utils.six import integer_types, iteritems, string_types, raise_from
@@ -1972,9 +1970,6 @@ class PyVmomi(object):
provided then all properties are deeply converted. The resulting
JSON is sorted to improve human readability.
- Requires upstream support from pyVmomi > 6.7.1
- (https://github.com/vmware/pyvmomi/pull/732)
-
Args:
- obj (object): vim object
- properties (list, optional): list of properties following
@@ -1985,9 +1980,6 @@ class PyVmomi(object):
Return:
dict
"""
- if not HAS_PYVMOMIJSON:
- self.module.fail_json(msg='The installed version of pyvmomi lacks JSON output support; need pyvmomi>6.7.1')
-
result = dict()
if properties:
for prop in properties:
diff --git a/ansible_collections/community/vmware/plugins/modules/vmware_cluster_dpm.py b/ansible_collections/community/vmware/plugins/modules/vmware_cluster_dpm.py
index 1215f52c3..5a63baea8 100644
--- a/ansible_collections/community/vmware/plugins/modules/vmware_cluster_dpm.py
+++ b/ansible_collections/community/vmware/plugins/modules/vmware_cluster_dpm.py
@@ -117,7 +117,7 @@ class VMwareCluster(PyVmomi):
change_message = None
changes = False
- if dpm_config.enabled != self.enable_dpm:
+ if dpm_config is None or dpm_config.enabled != self.enable_dpm:
change_message = 'DPM enabled status changes'
changes = True
return changes, change_message
diff --git a/ansible_collections/community/vmware/plugins/modules/vmware_cluster_info.py b/ansible_collections/community/vmware/plugins/modules/vmware_cluster_info.py
index 24ca77bc8..273f7a351 100644
--- a/ansible_collections/community/vmware/plugins/modules/vmware_cluster_info.py
+++ b/ansible_collections/community/vmware/plugins/modules/vmware_cluster_info.py
@@ -42,7 +42,7 @@ options:
description:
- Specify the output schema desired.
- The V(summary) output schema is the legacy output from the module.
- - The V(vsphere) output schema is the vSphere API class definition which requires pyvmomi>6.7.1.
+ - The V(vsphere) output schema is the vSphere API class definition.
choices: ['summary', 'vsphere']
default: 'summary'
type: str
diff --git a/ansible_collections/community/vmware/plugins/modules/vmware_datacenter_info.py b/ansible_collections/community/vmware/plugins/modules/vmware_datacenter_info.py
index 3b8dfc878..2d5ef8729 100644
--- a/ansible_collections/community/vmware/plugins/modules/vmware_datacenter_info.py
+++ b/ansible_collections/community/vmware/plugins/modules/vmware_datacenter_info.py
@@ -29,7 +29,7 @@ options:
description:
- Specify the output schema desired.
- The V(summary) output schema is the legacy output from the module.
- - The V(vsphere) output schema is the vSphere API class definition which requires pyvmomi>6.7.1.
+ - The V(vsphere) output schema is the vSphere API class definition.
choices: ['summary', 'vsphere']
default: 'summary'
type: str
diff --git a/ansible_collections/community/vmware/plugins/modules/vmware_datastore_info.py b/ansible_collections/community/vmware/plugins/modules/vmware_datastore_info.py
index 4c3fdc1e1..618e929c9 100644
--- a/ansible_collections/community/vmware/plugins/modules/vmware_datastore_info.py
+++ b/ansible_collections/community/vmware/plugins/modules/vmware_datastore_info.py
@@ -58,7 +58,6 @@ options:
- Specify the output schema desired.
- The 'summary' output schema is the legacy output from the module
- The 'vsphere' output schema is the vSphere API class definition
- which requires pyvmomi>6.7.1
choices: ['summary', 'vsphere']
default: 'summary'
type: str
diff --git a/ansible_collections/community/vmware/plugins/modules/vmware_dvs_portgroup.py b/ansible_collections/community/vmware/plugins/modules/vmware_dvs_portgroup.py
index a7b09d0c7..fbe790be6 100644
--- a/ansible_collections/community/vmware/plugins/modules/vmware_dvs_portgroup.py
+++ b/ansible_collections/community/vmware/plugins/modules/vmware_dvs_portgroup.py
@@ -64,11 +64,12 @@ options:
state:
description:
- Determines if the portgroup should be present or not.
- required: true
+ required: false
type: str
choices:
- 'present'
- 'absent'
+ default: 'present'
vlan_trunk:
description:
- Indicates whether this is a VLAN trunk or not.
@@ -734,7 +735,7 @@ class VMwareDvsPortgroup(PyVmomi):
# Check config
if self.module.params['port_allocation'] != 'elastic' and self.module.params['port_binding'] != 'ephemeral':
- if self.dvs_portgroup.config.numPorts != self.module.params['num_ports']:
+ if self.module.params['num_ports'] is not None and self.dvs_portgroup.config.numPorts != self.module.params['num_ports']:
return 'update'
# Default port config
@@ -893,7 +894,7 @@ def main():
num_ports=dict(type='int'),
port_binding=dict(required=True, type='str', choices=['static', 'ephemeral']),
port_allocation=dict(type='str', choices=['fixed', 'elastic']),
- state=dict(required=True, choices=['present', 'absent'], type='str'),
+ state=dict(type='str', choices=['present', 'absent'], default='present'),
vlan_trunk=dict(type='bool', default=False),
vlan_private=dict(type='bool', default=False),
network_policy=dict(
diff --git a/ansible_collections/community/vmware/plugins/modules/vmware_dvswitch_info.py b/ansible_collections/community/vmware/plugins/modules/vmware_dvswitch_info.py
index b4fa9c7c3..7e3a3b082 100644
--- a/ansible_collections/community/vmware/plugins/modules/vmware_dvswitch_info.py
+++ b/ansible_collections/community/vmware/plugins/modules/vmware_dvswitch_info.py
@@ -43,7 +43,6 @@ options:
- Specify the output schema desired.
- The 'summary' output schema is the legacy output from the module
- The 'vsphere' output schema is the vSphere API class definition
- which requires pyvmomi>6.7.1
choices: ['summary', 'vsphere']
default: 'summary'
type: str
diff --git a/ansible_collections/community/vmware/plugins/modules/vmware_guest_info.py b/ansible_collections/community/vmware/plugins/modules/vmware_guest_info.py
index 470f76642..4f3678e37 100644
--- a/ansible_collections/community/vmware/plugins/modules/vmware_guest_info.py
+++ b/ansible_collections/community/vmware/plugins/modules/vmware_guest_info.py
@@ -87,7 +87,6 @@ options:
- Specify the output schema desired.
- The V(summary) output schema is the legacy output from the module
- The V(vsphere) output schema is the vSphere API class definition
- which requires pyvmomi>6.7.1
choices: ['summary', 'vsphere']
default: 'summary'
type: str
diff --git a/ansible_collections/community/vmware/plugins/modules/vmware_host_facts.py b/ansible_collections/community/vmware/plugins/modules/vmware_host_facts.py
index a4738b117..1bfd64012 100644
--- a/ansible_collections/community/vmware/plugins/modules/vmware_host_facts.py
+++ b/ansible_collections/community/vmware/plugins/modules/vmware_host_facts.py
@@ -47,7 +47,6 @@ options:
- Specify the output schema desired.
- The V(summary) output schema is the legacy output from the module
- The V(vsphere) output schema is the vSphere API class definition
- which requires pyvmomi>6.7.1
choices: ['summary', 'vsphere']
default: 'summary'
type: str
diff --git a/ansible_collections/community/vmware/plugins/modules/vmware_vcenter_settings_info.py b/ansible_collections/community/vmware/plugins/modules/vmware_vcenter_settings_info.py
index 3936cc770..183a58244 100644
--- a/ansible_collections/community/vmware/plugins/modules/vmware_vcenter_settings_info.py
+++ b/ansible_collections/community/vmware/plugins/modules/vmware_vcenter_settings_info.py
@@ -22,7 +22,7 @@ options:
description:
- Specify the output schema desired.
- The 'summary' output schema is the legacy output from the module.
- - The 'vsphere' output schema is the vSphere API class definition which requires pyvmomi>6.7.1.
+ - The 'vsphere' output schema is the vSphere API class definition.
choices: ['summary', 'vsphere']
default: 'summary'
type: str
diff --git a/ansible_collections/community/vmware/plugins/modules/vmware_vsan_health_info.py b/ansible_collections/community/vmware/plugins/modules/vmware_vsan_health_info.py
index 565b2b859..7a6b68735 100644
--- a/ansible_collections/community/vmware/plugins/modules/vmware_vsan_health_info.py
+++ b/ansible_collections/community/vmware/plugins/modules/vmware_vsan_health_info.py
@@ -108,11 +108,9 @@ import traceback
try:
from pyVmomi import vmodl, VmomiSupport
HAS_PYVMOMI = True
- HAS_PYVMOMIJSON = hasattr(VmomiSupport, 'VmomiJSONEncoder')
except ImportError:
PYVMOMI_IMP_ERR = traceback.format_exc()
HAS_PYVMOMI = False
- HAS_PYVMOMIJSON = False
VSANPYTHONSDK_IMP_ERR = None
try:
@@ -186,9 +184,6 @@ def main():
if not HAS_VSANPYTHONSDK:
module.fail_json(msg=missing_required_lib('vSAN Management SDK for Python'), exception=VSANPYTHONSDK_IMP_ERR)
- if not HAS_PYVMOMIJSON:
- module.fail_json(msg='The installed version of pyvmomi lacks JSON output support; need pyvmomi>6.7.1')
-
vsan_info_manager = VSANInfoManager(module)
vsan_info_manager.gather_info()
diff --git a/ansible_collections/community/vmware/requirements.txt b/ansible_collections/community/vmware/requirements.txt
index cca52e3da..c2bbb7911 100644
--- a/ansible_collections/community/vmware/requirements.txt
+++ b/ansible_collections/community/vmware/requirements.txt
@@ -1,2 +1,2 @@
-pyVmomi>=6.7
+pyVmomi>=6.7.1
git+https://github.com/vmware/vsphere-automation-sdk-python.git ; python_version >= '2.7' # Python 2.6 is not supported
diff --git a/ansible_collections/community/vmware/tests/integration/targets/vmware_content_library_manager/tasks/main.yml b/ansible_collections/community/vmware/tests/integration/targets/vmware_content_library_manager/tasks/main.yml
index c12b57b57..86b00dc85 100644
--- a/ansible_collections/community/vmware/tests/integration/targets/vmware_content_library_manager/tasks/main.yml
+++ b/ansible_collections/community/vmware/tests/integration/targets/vmware_content_library_manager/tasks/main.yml
@@ -100,7 +100,7 @@
state: absent
- name: get finger print
- shell: echo | openssl s_client -connect wp-content.vmware.com:443 |& openssl x509 -fingerprint -noout
+ shell: echo | openssl s_client -connect wp-content.broadcom.com:443 |& openssl x509 -fingerprint -noout
register: _finger_print
- debug: var=_finger_print
@@ -113,7 +113,7 @@
validate_certs: false
library_name: Sample_Subscribed_Library
library_description: Sample Description
- subscription_url: "https://wp-content.vmware.com/v2/latest/lib.json"
+ subscription_url: "https://wp-content.broadcom.com/v2/latest/lib.json"
update_on_demand: true
library_type: subscribed
ssl_thumbprint: '{{ _finger_print.stdout.split("=")[1] }}'
@@ -144,7 +144,7 @@
validate_certs: false
library_name: Sample_Subscribed_Library
library_description: Update Sample Description
- subscription_url: https://download3.vmware.com/software/vmw-tools/lib.json
+ subscription_url: "https://wp-content.broadcom.com/v2/latest/lib.json"
update_on_demand: true
library_type: subscribed
ssl_thumbprint: '{{ _finger_print.stdout.split("=")[1] }}'
diff --git a/ansible_collections/community/vmware/tests/integration/targets/vmware_dvs_portgroup/tasks/main.yml b/ansible_collections/community/vmware/tests/integration/targets/vmware_dvs_portgroup/tasks/main.yml
index 8d45b2e28..2feff488c 100644
--- a/ansible_collections/community/vmware/tests/integration/targets/vmware_dvs_portgroup/tasks/main.yml
+++ b/ansible_collections/community/vmware/tests/integration/targets/vmware_dvs_portgroup/tasks/main.yml
@@ -805,3 +805,85 @@
- assert:
that:
- delete_test_dvs_port_group_issues_637_idempotency_check_result.changed is sameas true
+
+- name: Create portgroup for num_ports check
+ community.vmware.vmware_dvs_portgroup:
+ hostname: "{{ vcenter_hostname }}"
+ username: "{{ vcenter_username }}"
+ password: "{{ vcenter_password }}"
+ validate_certs: false
+ portgroup_name: "portgroup2053"
+ switch_name: "{{ dvswitch1 }}"
+ vlan_id: 2053
+ port_binding: static
+ register: create_portgroup2053_result
+
+- assert:
+ that:
+ - create_portgroup2053_result is changed
+
+- name: Check idempotency for unspecified num_ports
+ community.vmware.vmware_dvs_portgroup:
+ hostname: "{{ vcenter_hostname }}"
+ username: "{{ vcenter_username }}"
+ password: "{{ vcenter_password }}"
+ validate_certs: false
+ portgroup_name: "portgroup2053"
+ switch_name: "{{ dvswitch1 }}"
+ vlan_id: 2053
+ port_binding: static
+ register: portgroup2053_check1_result
+
+- assert:
+ that:
+ - portgroup2053_check1_result is not changed
+
+- name: Update for num_ports
+ community.vmware.vmware_dvs_portgroup:
+ hostname: "{{ vcenter_hostname }}"
+ username: "{{ vcenter_username }}"
+ password: "{{ vcenter_password }}"
+ validate_certs: false
+ portgroup_name: "portgroup2053"
+ switch_name: "{{ dvswitch1 }}"
+ vlan_id: 2053
+ port_binding: static
+ num_ports: 8
+ register: portgroup2053_check2_result
+
+- assert:
+ that:
+ - portgroup2053_check2_result is changed
+
+- name: Check idempotency for unspecified num_ports
+ community.vmware.vmware_dvs_portgroup:
+ hostname: "{{ vcenter_hostname }}"
+ username: "{{ vcenter_username }}"
+ password: "{{ vcenter_password }}"
+ validate_certs: false
+ portgroup_name: "portgroup2053"
+ switch_name: "{{ dvswitch1 }}"
+ vlan_id: 2053
+ port_binding: static
+ register: portgroup2053_check3_result
+
+- assert:
+ that:
+ - portgroup2053_check3_result is not changed
+
+- name: Delete num_ports check portgroup
+ community.vmware.vmware_dvs_portgroup:
+ hostname: "{{ vcenter_hostname }}"
+ username: "{{ vcenter_username }}"
+ password: "{{ vcenter_password }}"
+ validate_certs: false
+ portgroup_name: "portgroup2053"
+ switch_name: "{{ dvswitch1 }}"
+ vlan_id: 2053
+ port_binding: static
+ state: absent
+ register: delete_portgroup2053_result
+
+- assert:
+ that:
+ - delete_portgroup2053_result is changed
diff --git a/ansible_collections/community/zabbix/.github/workflows/agent.yml b/ansible_collections/community/zabbix/.github/workflows/agent.yml
index ca04f5843..55b7e1b72 100644
--- a/ansible_collections/community/zabbix/.github/workflows/agent.yml
+++ b/ansible_collections/community/zabbix/.github/workflows/agent.yml
@@ -29,9 +29,9 @@ jobs:
- debian11
- debian10
version:
- - v64
- - v62
- - v60
+ - v64
+ - v62
+ - v60
scenario_name:
- default
- autopsk
@@ -46,7 +46,7 @@ jobs:
uses: actions/checkout@v4
- name: Set up Python 3.9
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: 3.9
@@ -60,11 +60,19 @@ jobs:
- name: Build the collection
run: |
+ # Pin versions to speed up CI
+ sed -i 's/ansible\.windows:\s*"\*"/ansible.windows: "2.3.0"/' galaxy.yml
+ sed -i 's/ansible\.netcommon:\s*"\*"/ansible.netcommon: "6.1.1"/' galaxy.yml
+ sed -i 's/ansible\.posix:\s*"\*"/ansible.posix: "1.5.4"/' galaxy.yml
+ sed -i 's/community\.general:\s*"\*"/community.general: "8.6.0"/' galaxy.yml
+ sed -i 's/community\.mysql:\s*"\*"/community.mysql: "3.9.0"/' galaxy.yml
+ sed -i 's/community\.postgresql:\s*"\*"/community.postgresql: "3.4.0"/' galaxy.yml
+
collection_file=$( basename $(ansible-galaxy collection build -f | awk -F" " '{print $NF}'))
echo "COLLECTION_FILE=$collection_file" >> $GITHUB_ENV
- name: Install the collection
- run: ansible-galaxy collection install $COLLECTION_FILE
+ run: ansible-galaxy collection install -vvvv $COLLECTION_FILE
- name: Run role tests
working-directory: molecule/zabbix_agent_tests
@@ -73,4 +81,4 @@ jobs:
MY_MOLECULE_IMAGE=${{ matrix.container }}
MY_MOLECULE_VERSION=${{ matrix.version }}
MY_MOLECULE_DOCKER_COMMAND=${{ matrix.command }}
- molecule -c common/molecule.yml test -s ${{ matrix.scenario_name }} \ No newline at end of file
+ molecule -c common/molecule.yml test -s ${{ matrix.scenario_name }}
diff --git a/ansible_collections/community/zabbix/.github/workflows/javagateway.yml b/ansible_collections/community/zabbix/.github/workflows/javagateway.yml
index bd6885ef7..22bc5ede1 100644
--- a/ansible_collections/community/zabbix/.github/workflows/javagateway.yml
+++ b/ansible_collections/community/zabbix/.github/workflows/javagateway.yml
@@ -47,7 +47,7 @@ jobs:
uses: actions/checkout@v4
- name: Set up Python 3.9
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: 3.9
@@ -58,11 +58,19 @@ jobs:
- name: Build the collection
run: |
+ # Pin versions to speed up CI
+ sed -i 's/ansible\.windows:\s*"\*"/ansible.windows: "2.3.0"/' galaxy.yml
+ sed -i 's/ansible\.netcommon:\s*"\*"/ansible.netcommon: "6.1.1"/' galaxy.yml
+ sed -i 's/ansible\.posix:\s*"\*"/ansible.posix: "1.5.4"/' galaxy.yml
+ sed -i 's/community\.general:\s*"\*"/community.general: "8.6.0"/' galaxy.yml
+ sed -i 's/community\.mysql:\s*"\*"/community.mysql: "3.9.0"/' galaxy.yml
+ sed -i 's/community\.postgresql:\s*"\*"/community.postgresql: "3.4.0"/' galaxy.yml
+
collection_file=$( basename $(ansible-galaxy collection build -f | awk -F" " '{print $NF}'))
echo "COLLECTION_FILE=$collection_file" >> $GITHUB_ENV
- name: Install the collection
- run: ansible-galaxy collection install $COLLECTION_FILE
+ run: ansible-galaxy collection install -vvvv $COLLECTION_FILE
- name: Run server role tests
run: >-
diff --git a/ansible_collections/community/zabbix/.github/workflows/plugins-integration.yml b/ansible_collections/community/zabbix/.github/workflows/plugins-integration.yml
index f23071a1b..644ba2ca3 100644
--- a/ansible_collections/community/zabbix/.github/workflows/plugins-integration.yml
+++ b/ansible_collections/community/zabbix/.github/workflows/plugins-integration.yml
@@ -41,7 +41,7 @@ jobs:
path: ansible_collections/community/zabbix
- name: Set up Python ${{ matrix.python }}
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python }}
diff --git a/ansible_collections/community/zabbix/.github/workflows/proxy.yml b/ansible_collections/community/zabbix/.github/workflows/proxy.yml
index 985bb8ceb..ad5f61b34 100644
--- a/ansible_collections/community/zabbix/.github/workflows/proxy.yml
+++ b/ansible_collections/community/zabbix/.github/workflows/proxy.yml
@@ -51,7 +51,7 @@ jobs:
uses: actions/checkout@v4
- name: Set up Python 3.9
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: 3.9
@@ -62,11 +62,19 @@ jobs:
- name: Build the collection
run: |
+ # Pin versions to speed up CI
+ sed -i 's/ansible\.windows:\s*"\*"/ansible.windows: "2.3.0"/' galaxy.yml
+ sed -i 's/ansible\.netcommon:\s*"\*"/ansible.netcommon: "6.1.1"/' galaxy.yml
+ sed -i 's/ansible\.posix:\s*"\*"/ansible.posix: "1.5.4"/' galaxy.yml
+ sed -i 's/community\.general:\s*"\*"/community.general: "8.6.0"/' galaxy.yml
+ sed -i 's/community\.mysql:\s*"\*"/community.mysql: "3.9.0"/' galaxy.yml
+ sed -i 's/community\.postgresql:\s*"\*"/community.postgresql: "3.4.0"/' galaxy.yml
+
collection_file=$( basename $(ansible-galaxy collection build -f | awk -F" " '{print $NF}'))
echo "COLLECTION_FILE=$collection_file" >> $GITHUB_ENV
- name: Install the collection
- run: ansible-galaxy collection install $COLLECTION_FILE
+ run: ansible-galaxy collection install -vvvv $COLLECTION_FILE
- name: Run role tests
run: >-
diff --git a/ansible_collections/community/zabbix/.github/workflows/repo-sanity.yml b/ansible_collections/community/zabbix/.github/workflows/repo-sanity.yml
index 499d2f1ae..ba776e54f 100644
--- a/ansible_collections/community/zabbix/.github/workflows/repo-sanity.yml
+++ b/ansible_collections/community/zabbix/.github/workflows/repo-sanity.yml
@@ -19,7 +19,7 @@ jobs:
path: ansible_collections/community/zabbix
- name: Set up Python ${{ matrix.python }}
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python }}
diff --git a/ansible_collections/community/zabbix/.github/workflows/server.yml b/ansible_collections/community/zabbix/.github/workflows/server.yml
index b169aa9f1..33f5cd5fd 100644
--- a/ansible_collections/community/zabbix/.github/workflows/server.yml
+++ b/ansible_collections/community/zabbix/.github/workflows/server.yml
@@ -55,7 +55,7 @@ jobs:
uses: actions/checkout@v4
- name: Set up Python 3.9
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: 3.9
@@ -66,11 +66,19 @@ jobs:
- name: Build the collection
run: |
+ # Pin versions to speed up CI
+ sed -i 's/ansible\.windows:\s*"\*"/ansible.windows: "2.3.0"/' galaxy.yml
+ sed -i 's/ansible\.netcommon:\s*"\*"/ansible.netcommon: "6.1.1"/' galaxy.yml
+ sed -i 's/ansible\.posix:\s*"\*"/ansible.posix: "1.5.4"/' galaxy.yml
+ sed -i 's/community\.general:\s*"\*"/community.general: "8.6.0"/' galaxy.yml
+ sed -i 's/community\.mysql:\s*"\*"/community.mysql: "3.9.0"/' galaxy.yml
+ sed -i 's/community\.postgresql:\s*"\*"/community.postgresql: "3.4.0"/' galaxy.yml
+
collection_file=$( basename $(ansible-galaxy collection build -f | awk -F" " '{print $NF}'))
echo "COLLECTION_FILE=$collection_file" >> $GITHUB_ENV
- name: Install the collection
- run: ansible-galaxy collection install $COLLECTION_FILE
+ run: ansible-galaxy collection install -vvvv $COLLECTION_FILE
- name: Run server role tests
run: >-
diff --git a/ansible_collections/community/zabbix/.github/workflows/web.yml b/ansible_collections/community/zabbix/.github/workflows/web.yml
index 79b7beb11..0541a2457 100644
--- a/ansible_collections/community/zabbix/.github/workflows/web.yml
+++ b/ansible_collections/community/zabbix/.github/workflows/web.yml
@@ -57,7 +57,7 @@ jobs:
uses: actions/checkout@v4
- name: Set up Python 3.9
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: 3.9
@@ -68,11 +68,19 @@ jobs:
- name: Build the collection
run: |
+ # Pin versions to speed up CI
+ sed -i 's/ansible\.windows:\s*"\*"/ansible.windows: "2.3.0"/' galaxy.yml
+ sed -i 's/ansible\.netcommon:\s*"\*"/ansible.netcommon: "6.1.1"/' galaxy.yml
+ sed -i 's/ansible\.posix:\s*"\*"/ansible.posix: "1.5.4"/' galaxy.yml
+ sed -i 's/community\.general:\s*"\*"/community.general: "8.6.0"/' galaxy.yml
+ sed -i 's/community\.mysql:\s*"\*"/community.mysql: "3.9.0"/' galaxy.yml
+ sed -i 's/community\.postgresql:\s*"\*"/community.postgresql: "3.4.0"/' galaxy.yml
+
collection_file=$( basename $(ansible-galaxy collection build -f | awk -F" " '{print $NF}'))
echo "COLLECTION_FILE=$collection_file" >> $GITHUB_ENV
- name: Install the collection
- run: ansible-galaxy collection install $COLLECTION_FILE
+ run: ansible-galaxy collection install -vvvv $COLLECTION_FILE
- name: Run role tests
run: >-
diff --git a/ansible_collections/community/zabbix/CHANGELOG.rst b/ansible_collections/community/zabbix/CHANGELOG.rst
index e6b53e476..4675d1a5a 100644
--- a/ansible_collections/community/zabbix/CHANGELOG.rst
+++ b/ansible_collections/community/zabbix/CHANGELOG.rst
@@ -4,6 +4,42 @@ community.zabbix Release Notes
.. contents:: Topics
+v2.4.0
+======
+
+Minor Changes
+-------------
+
+- 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
+- Introduce flag `enable_version_check` to allow installations on non-supported platforms.
+- 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
+- zabbix_correlation module added
+- zabbix_service_info module added
+- zabbix_template - Add template_yaml parameter.
+- zabbix_web role, Refactored zabbix_selinux variable names to correlate with selinux boolean names.
+
+Bugfixes
+--------
+
+- 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_server - proper indentaion of become in selinux.yaml
+- zabbix_web - Added missing semicolon to nginx vhost template.
+- zabbix_web role, Add missing selinux.yml tasks.
+
+New Modules
+-----------
+
+- community.zabbix.zabbix_correlation - Create/update/delete Zabbix correlation
v2.3.1
======
@@ -598,7 +634,6 @@ Release Summary
| Release date: 2020-10-22
-
Minor Changes
-------------
@@ -625,7 +660,6 @@ Release Summary
| Release date: 2020-08-16
-
Minor Changes
-------------
@@ -665,7 +699,6 @@ Release Summary
| Release date: 2020-07-26
-
Minor Changes
-------------
@@ -738,7 +771,6 @@ Release Summary
| Release date: 2020-06-15
-
Minor Changes
-------------
diff --git a/ansible_collections/community/zabbix/FILES.json b/ansible_collections/community/zabbix/FILES.json
index d8e8b2611..694f37957 100644
--- a/ansible_collections/community/zabbix/FILES.json
+++ b/ansible_collections/community/zabbix/FILES.json
@@ -46,49 +46,49 @@
"name": ".github/workflows/agent.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1f4eaa1cf578bb1ac84173e292873c14483a3e9b0218badf5f99b949b1d19f75",
+ "chksum_sha256": "ab09e77c1cfb09d0ead5281bcfcd6cfb54d6eaa8380affbd53ec47c38c577855",
"format": 1
},
{
"name": ".github/workflows/javagateway.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "282c567de319fd40b888e0bea2b8340418acaf3e1360b1f4cd2fcec845580c4d",
+ "chksum_sha256": "5fece5724408d5a2170a22b1fdedf601451248c723f84066b7d1076dff06dbec",
"format": 1
},
{
"name": ".github/workflows/plugins-integration.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c8ab5f2a2482938905571a63bc80edb9bc421a7356526adff54978f158c998be",
+ "chksum_sha256": "45f764928578ae0ce15106c9470a6c9de97871904086e379b1f0fdd9d9008652",
"format": 1
},
{
"name": ".github/workflows/proxy.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0b93f36762cb804aa12a46d2e15ec2b0cf4ec61198db451fb5e8d60601c4e2c7",
+ "chksum_sha256": "f21f654a95b514e188c7cc090b21685521112a90610fef14bc487301141b17af",
"format": 1
},
{
"name": ".github/workflows/repo-sanity.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7df59ea87533f81dea79e8869b8a4074e0caafa171b62d07d24fc53ae4447af2",
+ "chksum_sha256": "d422174bd05376e9615660ed1f3d25d6c70cbda68a4869854d468469a562da93",
"format": 1
},
{
"name": ".github/workflows/server.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "20f9e0d9de9e0b5fba678c672628e0bf2900794a61e7a9b4414e16dd10eda3b3",
+ "chksum_sha256": "1925557e00452541d0105523033dba1edd9e3ee8ca95b3373c006c1f96973380",
"format": 1
},
{
"name": ".github/workflows/web.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c5e042f11aeabebedb326853b6a5712c3ef02fbc884329b26c4b38d3d942861a",
+ "chksum_sha256": "b8665c7b983f6b76cba7da881ab0cd450439217a5bd519ae7f30933a3ded554a",
"format": 1
},
{
@@ -116,14 +116,14 @@
"name": "changelogs/.plugin-cache.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d64872f24dbd6423bc177cc30e44f48f8f2c008fb83d98320c86507e52bc4fd2",
+ "chksum_sha256": "ddbed2431f771d0b08ec1059fcfc03df63768d78c59488ffadfddae737f52028",
"format": 1
},
{
"name": "changelogs/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7ec8214d899a562092105e8650db5a80d38065ac6f21e8eba77ce6b31c1be9b9",
+ "chksum_sha256": "25653a4be548f83eb8db9059d833a8298cc278f4ff812ff3b79abaa9fcb63f1e",
"format": 1
},
{
@@ -158,35 +158,35 @@
"name": "docs/ZABBIX_AGENT_ROLE.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "426cdb2833f6b41fae8e6d3eceb45e5d7e53bb64fda20238a4843e1f23ce6bc5",
+ "chksum_sha256": "d256f34122a50d20bf5d074df98558de74774e591bb2bc309e858ab0f2c7a7b8",
"format": 1
},
{
"name": "docs/ZABBIX_JAVAGATEWAY_ROLE.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "950880306b5d99f842830620bcb03e3a67d487ab62b60c650421027b620824c9",
+ "chksum_sha256": "168aae7236576e4baf77c7b056833d5c90527c99365d7c9487f05f7af4d7281a",
"format": 1
},
{
"name": "docs/ZABBIX_PROXY_ROLE.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "137aa537b0643a8aba1e3b94965bd33d91a53a780a8873a398e07620a1c64ec4",
+ "chksum_sha256": "5fb7298372379197055d9221660fa37ec078d7b2c5aaa4545ed09a943daa7baf",
"format": 1
},
{
"name": "docs/ZABBIX_SERVER_ROLE.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "434d9e12ff1d20c7f2e1891e2518628eea9f8497502a5032a7f83ea488477665",
+ "chksum_sha256": "e7b83a2f01c4ef1388cba62476dbbe0596c483b345f4a79aabc2cd107cf16b61",
"format": 1
},
{
"name": "docs/ZABBIX_WEB_ROLE.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "228030e059e30b229a82e7c31b609d5d122d710338557ebd74ee151eda79c0fb",
+ "chksum_sha256": "c52def2249d4416ac228eb03d6b57322578e2fb5c118967fb1e11634ff66f64f",
"format": 1
},
{
@@ -242,7 +242,7 @@
"name": "molecule/zabbix_agent_tests/common/playbooks/prepare.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eebc4f8c272317fba0f96c482780a2850b9474b2b992b3a80d2f3d59c3db9a52",
+ "chksum_sha256": "b49c8f28d430ffbe38f9a37995b5e555935108553a8cdfc624d31622a17ad7d8",
"format": 1
},
{
@@ -543,7 +543,7 @@
"name": "molecule/zabbix_javagateway/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8e5003cb9d8bcd490b46fe8358affc9cc4c7f60b582c2f42a4713c7fd001768a",
+ "chksum_sha256": "ad23fd87f26a7f5f70b7dbbb1e82fe661052315c2b8ad0f09939d5542641a521",
"format": 1
},
{
@@ -585,21 +585,21 @@
"name": "molecule/zabbix_proxy/destroy.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "99cb34a22f36b18227686720c750aa70745fdd22227d5aeb08a42891998ac09a",
+ "chksum_sha256": "59749010b09c0790699ca54ddb18724640889b53363b8c8d3fbc8259ec9d57c7",
"format": 1
},
{
"name": "molecule/zabbix_proxy/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "59ff07c357b6c9d01f0337b6c6b5878c90efb396132faec46b37628680bce34d",
+ "chksum_sha256": "4800b75f49e7496f80ace71d84f8f07dc7b9335c8f158bc4155c44a8d8492cc1",
"format": 1
},
{
"name": "molecule/zabbix_proxy/prepare.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3fde6e25ce3b39d5c70324f7db1ac9aed31e0a3106c51dc77c3be7293f55a19",
+ "chksum_sha256": "4495bcd19fac7b44c8d02c80133e37f554c1f66244a10c4a88e85c11ce97b814",
"format": 1
},
{
@@ -634,21 +634,21 @@
"name": "molecule/zabbix_server/destroy.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "99cb34a22f36b18227686720c750aa70745fdd22227d5aeb08a42891998ac09a",
+ "chksum_sha256": "59749010b09c0790699ca54ddb18724640889b53363b8c8d3fbc8259ec9d57c7",
"format": 1
},
{
"name": "molecule/zabbix_server/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eb8ff715881d9046a2aa6d4b0ec64f68c59e7cf48bff7644236e44399570bb53",
+ "chksum_sha256": "7c0b54e3f4f40288f5a772263d1f56a44aebb39e70aad6ec542546b40d7653a9",
"format": 1
},
{
"name": "molecule/zabbix_server/prepare.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "34346df48a4e44910398adcea6030e76735f03464ea0b0415160b2c8b86297d7",
+ "chksum_sha256": "883f99742d21dc27b93d8c8ca8185537a7e7c1c658efd81effdce91e5f8eefee",
"format": 1
},
{
@@ -683,21 +683,21 @@
"name": "molecule/zabbix_web/destroy.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "99cb34a22f36b18227686720c750aa70745fdd22227d5aeb08a42891998ac09a",
+ "chksum_sha256": "59749010b09c0790699ca54ddb18724640889b53363b8c8d3fbc8259ec9d57c7",
"format": 1
},
{
"name": "molecule/zabbix_web/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "160ca8984b2f48f84e64e2d928ef1ab8a807f5cfb6c36d1c37d7920ca284efca",
+ "chksum_sha256": "18e071b47e76db950db04d6be9ed3e6e16ab750ca276e4e59d1f32cf0c659b89",
"format": 1
},
{
"name": "molecule/zabbix_web/prepare.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "46f227d436fbf62c6a18677746e4b3b2f6854473ea58ea889781d60a5d86acaa",
+ "chksum_sha256": "7628246084a0692187d2408ee30afc478999d24c1e08d6fc0609f59ed828b23e",
"format": 1
},
{
@@ -711,7 +711,7 @@
"name": "molecule/requirements.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "274a2a68c3bac9fefa051ff068179fce63df05424461ff973dd44473c890382b",
+ "chksum_sha256": "26a9987c8545a84ddf26c2774fc1bf16c0dc68fa790dde49b46ce17a1720700e",
"format": 1
},
{
@@ -746,7 +746,7 @@
"name": "plugins/httpapi/zabbix.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bef450e3b5700be1a1cc35981b229a53522a35a0e1d13f1ba715922f3ee79d2c",
+ "chksum_sha256": "d598e1db3a57dda9a90eaf324c066be904c91a5bab099b6c65d612b5141c96ec",
"format": 1
},
{
@@ -848,6 +848,13 @@
"format": 1
},
{
+ "name": "plugins/modules/zabbix_correlation.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "24dfd5a7cb774a9e46de4765efcacf76df880149f7a5614f64c754f8458875ee",
+ "format": 1
+ },
+ {
"name": "plugins/modules/zabbix_discovery_rule.py",
"ftype": "file",
"chksum_type": "sha256",
@@ -886,7 +893,7 @@
"name": "plugins/modules/zabbix_host.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ce0879953bfeaac236d6329b08fd19f7573a9a172ef4fa777489d6f9f1fd6609",
+ "chksum_sha256": "0593dcc5f865688ab3ee51ab930d963bb688970807a0f4b3b67466bb58672481",
"format": 1
},
{
@@ -921,7 +928,7 @@
"name": "plugins/modules/zabbix_maintenance.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "baa73f10a75adbfc09a93d5624492aa9b2e174bf089641cfbd37e329865fe313",
+ "chksum_sha256": "ae2e78fa730c2954ad54c20aa7c98c3e09c077fc035f45d0f7ce906d4ce93b84",
"format": 1
},
{
@@ -935,7 +942,7 @@
"name": "plugins/modules/zabbix_mediatype.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "555d924fcf31e673c17917fc5f7abf1d6d8f1de17d87386f5a2626549cdab7f3",
+ "chksum_sha256": "d72dc3a2fc07e6ae4ddd344d3111a62098439a21d3e77f235f89783490db4644",
"format": 1
},
{
@@ -974,6 +981,13 @@
"format": 1
},
{
+ "name": "plugins/modules/zabbix_service_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5e011d9a0a3e1a15d2b1255c90989143c24be78e433351483afb0191ed7009fe",
+ "format": 1
+ },
+ {
"name": "plugins/modules/zabbix_settings.py",
"ftype": "file",
"chksum_type": "sha256",
@@ -984,7 +998,7 @@
"name": "plugins/modules/zabbix_template.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d08d3ff4e10193b5a69e3bb515c1ee00157526ab702dc4ffadca8b4adb1c2b1c",
+ "chksum_sha256": "9a95177cd5e385dc637bef839f94ddafbad1fd7c49b3d66f1a6a04734ef178ce",
"format": 1
},
{
@@ -998,7 +1012,7 @@
"name": "plugins/modules/zabbix_templategroup.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9c8ca31207e2894422502cf15cf3e3774ce2f944e4bc403c87ab5978f360b236",
+ "chksum_sha256": "1d908eaf6a6ef5f9269261f3c9be63180edd805736428b95365d2cffbd94785a",
"format": 1
},
{
@@ -1068,7 +1082,7 @@
"name": "roles/zabbix_agent/README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "426cdb2833f6b41fae8e6d3eceb45e5d7e53bb64fda20238a4843e1f23ce6bc5",
+ "chksum_sha256": "d256f34122a50d20bf5d074df98558de74774e591bb2bc309e858ab0f2c7a7b8",
"format": 1
},
{
@@ -1082,7 +1096,7 @@
"name": "roles/zabbix_agent/defaults/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e86a6de88e4fb31fd47d9268557e10f71e42988e4dca09a6228497be99c1c225",
+ "chksum_sha256": "7465f741a1390bc62b1f30f3daf28f271ad94942c2f727fabfe576277fd4c1f3",
"format": 1
},
{
@@ -1208,7 +1222,7 @@
"name": "roles/zabbix_agent/molecule/with-server/prepare.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "091c8043ef580658ab2b4c93020888562cd5b3ca5a32d78f7c43892696e0f118",
+ "chksum_sha256": "00649fa33818851871f0305372c4d9c1205a77411b0b9b5deb1b5bfe4e09668d",
"format": 1
},
{
@@ -1229,7 +1243,7 @@
"name": "roles/zabbix_agent/tasks/Debian.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6d5e5886e18c5774d89567b311e2fbd2dc4aad0b1950af22bb88fafe152a3b78",
+ "chksum_sha256": "97c991dcccf9ab92bad90d36caf6e2d3bdd2b9eb9461aded42696b3e76c7b1ad",
"format": 1
},
{
@@ -1285,7 +1299,7 @@
"name": "roles/zabbix_agent/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "978ae5731bb64fc79a4c404185da1f915480550e0a79ab8cdcc94475dc0ff86e",
+ "chksum_sha256": "7ceb0be05f5fb90c9d007ae64a43ca66fa855c484410df95c46e41853a44f5bd",
"format": 1
},
{
@@ -1362,7 +1376,7 @@
"name": "roles/zabbix_agent/tasks/userparameter.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5248b27e7d45f14a3abdd5d93bf80e416f6e6f084f54f1cceeeba0f1ab08b9dd",
+ "chksum_sha256": "e2bb476b24d7e4997daa41e15959d1b70c538b8aa9eaf20d3b2e759c23534290",
"format": 1
},
{
@@ -1418,7 +1432,7 @@
"name": "roles/zabbix_agent/vars/Debian.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a5da93f0d2b1f52521b40c0434ebbb78c7c13dfd63b1948689e104e86fc81a6c",
+ "chksum_sha256": "b3fdab5e28c143947f965aa38b670a83726994f8e6fb37b7fac24350c9471a28",
"format": 1
},
{
@@ -1453,7 +1467,7 @@
"name": "roles/zabbix_javagateway/README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "950880306b5d99f842830620bcb03e3a67d487ab62b60c650421027b620824c9",
+ "chksum_sha256": "168aae7236576e4baf77c7b056833d5c90527c99365d7c9487f05f7af4d7281a",
"format": 1
},
{
@@ -1467,7 +1481,7 @@
"name": "roles/zabbix_javagateway/defaults/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "72237d44a0cfac809b0432db46974f2bb48d1a61260d80491d1c7bde73f1bf47",
+ "chksum_sha256": "169d719e540777e49a40c86c1ad09d21f6f408ebd346efa9e6ab926b0e85321f",
"format": 1
},
{
@@ -1523,7 +1537,7 @@
"name": "roles/zabbix_javagateway/tasks/Debian.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1cf7aeabb650158552dcc993e72c3aee3dd54c9d160d95ac4e603eec39d3c763",
+ "chksum_sha256": "44f9adfe675690b1901bf67f5c60da034bbbc4448476f3a2d69993a180f9dedc",
"format": 1
},
{
@@ -1537,7 +1551,7 @@
"name": "roles/zabbix_javagateway/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "67e5a9cd03529caca8af75622431ec4fe54bc256b14ad7568bedaedfd0f9206a",
+ "chksum_sha256": "e8857dcc83a8336f5d9103cbc0af3035d298335a2a62bbf98de4a25edff44230",
"format": 1
},
{
@@ -1565,7 +1579,7 @@
"name": "roles/zabbix_javagateway/vars/Debian.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6a87b8863fc8b0cf5dec159ecbe788b8cb1963c11d3dfcfddb6f64d3dfce77e",
+ "chksum_sha256": "be7796f9ccb7e43552833863142669694201bba88e396406f29f8881e28f381a",
"format": 1
},
{
@@ -1593,7 +1607,7 @@
"name": "roles/zabbix_proxy/README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "137aa537b0643a8aba1e3b94965bd33d91a53a780a8873a398e07620a1c64ec4",
+ "chksum_sha256": "5fb7298372379197055d9221660fa37ec078d7b2c5aaa4545ed09a943daa7baf",
"format": 1
},
{
@@ -1607,7 +1621,7 @@
"name": "roles/zabbix_proxy/defaults/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f3cc7cde32ae9908078b20eb97d7f25baaccbbd2f0ea4678296ae36a3fb10087",
+ "chksum_sha256": "33dcb508919b88bf2ef0b1c6bc5b121a67392553e54a58b55bf572bf00ea5d53",
"format": 1
},
{
@@ -1663,7 +1677,7 @@
"name": "roles/zabbix_proxy/tasks/Debian.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "62d366a97ff9d7a6b6f5ec20bde13cb22b447b0271f7e2e432dcad6c9b771712",
+ "chksum_sha256": "92c82d7303b5ec4b9e688bdb8017e5f213993f9c66007ad95846b2db30cfb414",
"format": 1
},
{
@@ -1677,7 +1691,7 @@
"name": "roles/zabbix_proxy/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "45ee561d3bf7df8a5067ccb625a15546b2572e202f75614b57af7143766cf63a",
+ "chksum_sha256": "3751caa6aaa36f2f878f60bd81a53ff4fb6dc1e45c0e9ec6c8c195fc3da765a1",
"format": 1
},
{
@@ -1733,7 +1747,7 @@
"name": "roles/zabbix_proxy/vars/Debian.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "66a3826d949a04140ff1fda9f008f8ef657050cb854677b4cf5c07c69a546346",
+ "chksum_sha256": "0c3453870dcd59ed9f69f3fdac8a1b46bf683a87ab86e87cc69b28d3951cce43",
"format": 1
},
{
@@ -1768,7 +1782,7 @@
"name": "roles/zabbix_server/README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "434d9e12ff1d20c7f2e1891e2518628eea9f8497502a5032a7f83ea488477665",
+ "chksum_sha256": "e7b83a2f01c4ef1388cba62476dbbe0596c483b345f4a79aabc2cd107cf16b61",
"format": 1
},
{
@@ -1782,7 +1796,7 @@
"name": "roles/zabbix_server/defaults/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "024b79ba5eb85cb58403e606c0914e5e606a26e085795e7e7bccbf4f57d8ff66",
+ "chksum_sha256": "e77fe177f086c46a5fbce843360203fcd6b0bd3cb70cbce6582b73e50fb4f1d8",
"format": 1
},
{
@@ -1838,35 +1852,35 @@
"name": "roles/zabbix_server/tasks/Debian.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c174231cd483409e026d4b82e987ce3f2e2b30405b71ab15dab333b7c37e2f7c",
+ "chksum_sha256": "efdf8a1e0875c14dc97e4984063a9f775047af3e324baff629963f59139eb646",
"format": 1
},
{
"name": "roles/zabbix_server/tasks/RedHat.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "99bc6623e1018b3c5565d97670385a0ff3b205d3b9dccc5da0d3082f05f6f305",
+ "chksum_sha256": "c843b63e5dc9c44dfa748b6f6b5524f796d1b7a7bbf6151f89e7726770c399ce",
"format": 1
},
{
- "name": "roles/zabbix_server/tasks/main.yml",
+ "name": "roles/zabbix_server/tasks/initialize-mysql.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a56f05203c959669058d2172d90f11dca5bd024c85651a75ecde52db2148f991",
+ "chksum_sha256": "f391750aff2b4e7c74c292036829fe7a44bb3fbfaed9bdb12393542b59132502",
"format": 1
},
{
- "name": "roles/zabbix_server/tasks/mysql.yml",
+ "name": "roles/zabbix_server/tasks/initialize-pgsql.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aa11fd9cfc1662112ed5f321bd06ccde126f65ee7531267c4357f6e82cab540e",
+ "chksum_sha256": "df0005a12cc1d89f1a361f1d5f2764600a24527a567cce4b38f69490651f5541",
"format": 1
},
{
- "name": "roles/zabbix_server/tasks/postgresql.yml",
+ "name": "roles/zabbix_server/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "44146c8e7329cb92aa907a64d7c646700b8125b93dbcbbeb50716ad01f434c53",
+ "chksum_sha256": "ef880f7dbdcaf97b43f1c407334a0ca44304a1d6ae31089a4850f362f1bc1f04",
"format": 1
},
{
@@ -1880,7 +1894,7 @@
"name": "roles/zabbix_server/tasks/selinux.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b2d30030efe386cfb08fc3f45cd4a4c1efc17c41df031f31deaf9d683f4d6a27",
+ "chksum_sha256": "f82baa01937f5e3e29b02be6fefd51f7c6cafcefebd44e9a3cf2a8c22d9c5e8c",
"format": 1
},
{
@@ -1908,14 +1922,14 @@
"name": "roles/zabbix_server/vars/Debian.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "67cb0847a5e96afd2b05a9e4db7f8383d6d0376cc4f93db206dc80c7778310eb",
+ "chksum_sha256": "428c1f85055c5afdccf997e4c6ab8fd4b9999760f93517dcbea2f41c88f82cb5",
"format": 1
},
{
"name": "roles/zabbix_server/vars/RedHat.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c27f0472596d51fd438b8d6f1c9b3bb788d7865b0c818d58c1b1456b3ec62185",
+ "chksum_sha256": "2650cb0aa53bf8f07b1bc2604b18c31ba88ee8ac407b6f6bb2779b0532b81781",
"format": 1
},
{
@@ -1943,7 +1957,7 @@
"name": "roles/zabbix_web/README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "228030e059e30b229a82e7c31b609d5d122d710338557ebd74ee151eda79c0fb",
+ "chksum_sha256": "c52def2249d4416ac228eb03d6b57322578e2fb5c118967fb1e11634ff66f64f",
"format": 1
},
{
@@ -1957,7 +1971,7 @@
"name": "roles/zabbix_web/defaults/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "136689b650ad54e8046ca7f1f7f24cc8d528dfcde385b1027f2aa7b64ca3c26c",
+ "chksum_sha256": "49d8438ddfc81fa2d4c1ae65877229dbab7c2b010897013bfbb3f4486a7b96c4",
"format": 1
},
{
@@ -1999,14 +2013,14 @@
"name": "roles/zabbix_web/tasks/Debian.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7c7426b9d16b6868f72eea3aa28c390217c51f5ba9aaa9afcf41caffb8072808",
+ "chksum_sha256": "f79cf8bd5892511d4499e72876b8ad62ddbf651236bc74acb4bc25e8b66be8ad",
"format": 1
},
{
"name": "roles/zabbix_web/tasks/RedHat.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b2a875ae0deaf4facd16416db665771c03395e90879c3691e2430cf24e2f7331",
+ "chksum_sha256": "49891f2059325d2b9070af4c726a014e10a2120978bccaa651e47a8f27ee8a24",
"format": 1
},
{
@@ -2020,7 +2034,7 @@
"name": "roles/zabbix_web/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9961406bcd8733eb9a504a8a4d2766148fdcb43ca2d5e27d007e2c041cccc4a5",
+ "chksum_sha256": "08eea52bde9af3a33c1c1145aac963f754498862532bffedb2a146bc662c72d9",
"format": 1
},
{
@@ -2034,7 +2048,7 @@
"name": "roles/zabbix_web/tasks/selinux.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5b696169bbd552cba7f54fb7bc9f8fba7b885e0d2048cd4c56f2de57a3c560cd",
+ "chksum_sha256": "a88bf34858bebd60e78d8b56c0e2682e411285a56176d3165fe404937c5e3b04",
"format": 1
},
{
@@ -2055,7 +2069,7 @@
"name": "roles/zabbix_web/templates/nginx_vhost.conf.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4b66f5e157d4d15419a4d3e5e8580b2f50d5413ed092f026902ebed50bb431f4",
+ "chksum_sha256": "67d34aee35ab5e67b2b0259cfda5e7164a60272349a18661b2ef9d2252f06dff",
"format": 1
},
{
@@ -2083,7 +2097,7 @@
"name": "roles/zabbix_web/vars/Debian.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "61d4c2a23a9261eeeb511a5ba6e3e9d2d46856c69a390a4ff9f8fbfaad57ec50",
+ "chksum_sha256": "42d65bb39698381f067773966ab6605f96b6b7ced0e5d63e217ac0877d7dc7ad",
"format": 1
},
{
@@ -2325,6 +2339,41 @@
"format": 1
},
{
+ "name": "tests/integration/targets/test_zabbix_correlation",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/test_zabbix_correlation/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/test_zabbix_correlation/meta/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "63ae23343a8854777c0e014be5fdd33db6a6b78f96d22a889ad78556dc0ffa81",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/test_zabbix_correlation/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/test_zabbix_correlation/tasks/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "41ac61f463abbb2342d912d9b3f657105290a7ee7a6862f97cc2b395e0af9171",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/test_zabbix_discovery_rule",
"ftype": "dir",
"chksum_type": null,
@@ -2573,7 +2622,7 @@
"name": "tests/integration/targets/test_zabbix_host/tasks/zabbix_host_tests.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "10fdc4850cbc5a8c135b6010af276b1f5384d617f746ee3ef001e2f34b3cf289",
+ "chksum_sha256": "8d869ea43ae5374a7d7442968f0f46e2b3ea9bba5889c55f6bfc2a1e068ed8c9",
"format": 1
},
{
@@ -2713,7 +2762,7 @@
"name": "tests/integration/targets/test_zabbix_maintenance/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1e3c539311dc4f4c55b85931338f0693121ff1814cbc4d199fe02a689c5d298b",
+ "chksum_sha256": "ccdc41dfc4c4c391a480458d08af8764c7bfd45e00a9efeb7a2162628c1579fd",
"format": 1
},
{
@@ -2748,7 +2797,7 @@
"name": "tests/integration/targets/test_zabbix_mediatype/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c7a4f5cecfef03f695f94a47e7c663a3acb582757df2951e8af77279b2a2e797",
+ "chksum_sha256": "4654f230520d7e2726c0bb1d246cb0cf6ae76120a33c4acdc0a8c4b6549c2b84",
"format": 1
},
{
@@ -2976,6 +3025,41 @@
"format": 1
},
{
+ "name": "tests/integration/targets/test_zabbix_service_info",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/test_zabbix_service_info/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/test_zabbix_service_info/meta/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "63ae23343a8854777c0e014be5fdd33db6a6b78f96d22a889ad78556dc0ffa81",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/test_zabbix_service_info/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/test_zabbix_service_info/tasks/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "81993514162d631138154fdde2e0aa9dd1896609638bf01bf59f5d6a98df8009",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/test_zabbix_settings",
"ftype": "dir",
"chksum_type": null,
@@ -3081,6 +3165,27 @@
"format": 1
},
{
+ "name": "tests/integration/targets/test_zabbix_template/files/template4_60_higher.json",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "39a95f703429d1845a04e106d1a921990a78ce220c1fd4d1af7ed9b5bc90ee06",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/test_zabbix_template/files/template4_60_higher.xml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e91a1052602222dc146a54bb7b59915c951a3b6f0762162fb2aa6682839f43bb",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/test_zabbix_template/files/template4_60_higher.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "371d417e80a1380977c9d9c13f5c42c09096fbc15ef48b76e2dfad5e44004baa",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/test_zabbix_template/meta",
"ftype": "dir",
"chksum_type": null,
@@ -3105,7 +3210,7 @@
"name": "tests/integration/targets/test_zabbix_template/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "235eb7982d8a11e0e6fd68b53693d49daa89db486f91230e74497f75a0f8d2dc",
+ "chksum_sha256": "f86eb77c3eac1f431f59fa5f94ce07a1c4035826f1898987e4045036b19c9bb3",
"format": 1
},
{
@@ -3434,7 +3539,7 @@
"name": "CHANGELOG.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f963b76b08f69f8aac6b8daf732d95ce00e1670316f7e8f7bcb674f8d2e3aa6c",
+ "chksum_sha256": "841378afa489d7ab18a26f89a6c8a91949c1fb0c05c54b00ab5518157d83f3fa",
"format": 1
},
{
@@ -3476,7 +3581,7 @@
"name": "README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e47ca851f19b23497aa052424107b157400ef0d16cc745b1151fcff933ca2b86",
+ "chksum_sha256": "e78a31db573596c05c1b54e4da2ab59b53b57c8e19b41694e16fc8a600d366e8",
"format": 1
},
{
diff --git a/ansible_collections/community/zabbix/MANIFEST.json b/ansible_collections/community/zabbix/MANIFEST.json
index 37c48a609..803b2a538 100644
--- a/ansible_collections/community/zabbix/MANIFEST.json
+++ b/ansible_collections/community/zabbix/MANIFEST.json
@@ -2,7 +2,7 @@
"collection_info": {
"namespace": "community",
"name": "zabbix",
- "version": "2.3.1",
+ "version": "2.4.0",
"authors": [
"Dusan Matejka (@D3DeFi)",
"sky-joker (@sky-joker)",
@@ -35,7 +35,7 @@
"name": "FILES.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ed1fe1d72e38eb5978be766233f7389e444c2dcaded74877d323c41ac9712a46",
+ "chksum_sha256": "48923f5d0d4edaa37a77a0dda92c0f41f762a24a9d7ab4bd04c816cf9f3bd73a",
"format": 1
},
"format": 1
diff --git a/ansible_collections/community/zabbix/README.md b/ansible_collections/community/zabbix/README.md
index be268fc4a..889645483 100644
--- a/ansible_collections/community/zabbix/README.md
+++ b/ansible_collections/community/zabbix/README.md
@@ -104,7 +104,7 @@ You can also include it in a `requirements.yml` file along with other required c
---
collections:
- name: community.zabbix
- version: 2.3.1
+ version: 2.4.0
- name: ansible.posix
version: 1.3.0
- name: community.general
diff --git a/ansible_collections/community/zabbix/changelogs/.plugin-cache.yaml b/ansible_collections/community/zabbix/changelogs/.plugin-cache.yaml
index 9ea52adc2..78da79cd3 100644
--- a/ansible_collections/community/zabbix/changelogs/.plugin-cache.yaml
+++ b/ansible_collections/community/zabbix/changelogs/.plugin-cache.yaml
@@ -1,12 +1,10 @@
-objects:
- role: {}
+objects: {}
plugins:
become: {}
cache: {}
callback: {}
cliconf: {}
connection: {}
- filter: {}
httpapi:
zabbix:
description: HttpApi Plugin for Zabbix
@@ -39,6 +37,11 @@ plugins:
name: zabbix_autoregister
namespace: ''
version_added: 1.6.0
+ zabbix_correlation:
+ description: Create/update/delete Zabbix correlation
+ name: zabbix_correlation
+ namespace: ''
+ version_added: 2.4.0
zabbix_discovery_rule:
description: Create/delete/update Zabbix discovery rules
name: zabbix_discovery_rule
@@ -129,6 +132,11 @@ plugins:
name: zabbix_service
namespace: ''
version_added: null
+ zabbix_service_info:
+ description: Gather information about Zabbix service
+ name: zabbix_service_info
+ namespace: ''
+ version_added: null
zabbix_settings:
description: Update Zabbix global settings.
name: zabbix_settings
@@ -187,6 +195,5 @@ plugins:
netconf: {}
shell: {}
strategy: {}
- test: {}
vars: {}
-version: 2.3.1
+version: 2.4.0
diff --git a/ansible_collections/community/zabbix/changelogs/changelog.yaml b/ansible_collections/community/zabbix/changelogs/changelog.yaml
index 600e0ab78..608160c0b 100644
--- a/ansible_collections/community/zabbix/changelogs/changelog.yaml
+++ b/ansible_collections/community/zabbix/changelogs/changelog.yaml
@@ -1092,3 +1092,61 @@ releases:
fragments:
- 1156-bugfix_zabbix_user_directory_dryrun.yml
release_date: '2024-01-10'
+ 2.4.0:
+ changes:
+ bugfixes:
+ - 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_server - proper indentaion of become in selinux.yaml
+ - zabbix_web - Added missing semicolon to nginx vhost template.
+ - zabbix_web role, Add missing selinux.yml tasks.
+ minor_changes:
+ - 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
+ - Introduce flag `enable_version_check` to allow installations on non-supported
+ platforms.
+ - 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
+ - zabbix_correlation module added
+ - zabbix_service_info module added
+ - zabbix_template - Add template_yaml parameter.
+ - zabbix_web role, Refactored zabbix_selinux variable names to correlate with
+ selinux boolean names.
+ fragments:
+ - 1157-add_template_yaml.yml
+ - 1162-do_not_update_ipmi_options.yml
+ - 1165-indent-become.yml
+ - 1168-finish-task-with-failed-if-host_group-parameter-is-empty_list.yml
+ - 1169-add_zabbix_correlation.yml
+ - 1176-content_type-in-mediatype.yml
+ - 1180-active_since-in-maintenance.yml
+ - 1183-nginx-fix-against-path-traversal.yml
+ - 1186-custom_gpg_key_url.yml
+ - 1188-agent_ipmi_authtype_fix.yml
+ - 1205-fix-zabbix-agent-scripts.yml
+ - 1206-fix-nginx-template-ssl-params.yml
+ - 1210-add_zabbix_service_info.yml
+ - 1220-refactor_selinux_tasks_and_variable_names_role_zabbix_web.yml
+ - 1224-enable-version-check.yml
+ modules:
+ - description: Create/update/delete Zabbix correlation
+ name: zabbix_correlation
+ namespace: ''
+ release_date: '2024-05-13'
diff --git a/ansible_collections/community/zabbix/docs/ZABBIX_AGENT_ROLE.md b/ansible_collections/community/zabbix/docs/ZABBIX_AGENT_ROLE.md
index aa73fab3a..fe4a601b3 100644
--- a/ansible_collections/community/zabbix/docs/ZABBIX_AGENT_ROLE.md
+++ b/ansible_collections/community/zabbix/docs/ZABBIX_AGENT_ROLE.md
@@ -102,6 +102,7 @@ See the following list of supported Operating systems with the Zabbix releases:
| Debian 11 bullseye | V | V | V |
| Debian 10 buster | V | V | V |
+You can bypass this matrix by setting `enable_version_check: false`
# Getting started
@@ -136,6 +137,8 @@ The following is an overview of all available configuration default for this rol
* `zabbix_agent_disable_repo`: A list of repos to disable during install. Default `epel`.
* `zabbix_repo_deb_url`: The URL to the Zabbix repository. Default `http://repo.zabbix.com/zabbix/{{ zabbix_agent_version }}/{{ ansible_distribution.lower() }}`
* `zabbix_repo_deb_component`: The repository component for Debian installs. Default `main`.
+* `zabbix_repo_deb_gpg_key_url`: The URL to download the Zabbix GPG key from. Default `http://repo.zabbix.com/zabbix-official-repo.key`.
+* `zabbix_repo_deb_include_deb_src`: True, if deb-src should be included in the zabbix.sources entry. Default `true`.
### SElinux
@@ -337,7 +340,7 @@ Keep in mind that using the Zabbix Agent in a Container requires changes to the
## IPMI variables
-* `zabbix_agent_ipmi_authtype`: IPMI authentication algorithm. Possible values are 1 (callback), 2 (user), 3 (operator), 4 (admin), 5 (OEM), with 2 being the API default.
+* `zabbix_agent_ipmi_authtype`: IPMI authentication algorithm. Possible values are -1 (default), 0 (none), 1 (MD2), 2 (MD5), 4 (straight), 5 (OEM), 6 (RMCP+), with -1 being the API default.
* `zabbix_agent_ipmi_password`: IPMI password.
* `zabbix_agent_ipmi_privilege`: IPMI privilege level. Possible values are 1 (callback), 2 (user), 3 (operator), 4 (admin), 5 (OEM), with 2 being the API default.
* `zabbix_agent_ipmi_username`: IPMI username.
diff --git a/ansible_collections/community/zabbix/docs/ZABBIX_JAVAGATEWAY_ROLE.md b/ansible_collections/community/zabbix/docs/ZABBIX_JAVAGATEWAY_ROLE.md
index 1761c7f8b..47092a6a0 100644
--- a/ansible_collections/community/zabbix/docs/ZABBIX_JAVAGATEWAY_ROLE.md
+++ b/ansible_collections/community/zabbix/docs/ZABBIX_JAVAGATEWAY_ROLE.md
@@ -46,6 +46,8 @@ See the following list of supported Operating systems with the Zabbix releases.
| Debian 11 bullseye | V | V | V |
| Debian 10 buster | V | V | V |
+You can bypass this matrix by setting `enable_version_check: false`
+
# Role Variables
## Main variables
@@ -62,6 +64,8 @@ The `zabbix_javagateway_version` is optional. The latest available major.minor v
* `zabbix_javagateway_conf_mode`: Default: `0644`. The "mode" for the Zabbix configuration file.
* `zabbix_repo_deb_url`: The URL to the Zabbix repository. Default `http://repo.zabbix.com/zabbix/{{ zabbix_agent_version }}/{{ ansible_distribution.lower() }}`
* `zabbix_repo_deb_component`: The repository component for Debian installs. Default `main`.
+* `zabbix_repo_deb_gpg_key_url`: The URL to download the Zabbix GPG key from. Default `http://repo.zabbix.com/zabbix-official-repo.key`.
+* `zabbix_repo_deb_include_deb_src`: True, if deb-src should be included in the zabbix.sources entry. Default `true`.
### Java Gatewaty
diff --git a/ansible_collections/community/zabbix/docs/ZABBIX_PROXY_ROLE.md b/ansible_collections/community/zabbix/docs/ZABBIX_PROXY_ROLE.md
index baec42155..ee558c8b7 100644
--- a/ansible_collections/community/zabbix/docs/ZABBIX_PROXY_ROLE.md
+++ b/ansible_collections/community/zabbix/docs/ZABBIX_PROXY_ROLE.md
@@ -89,6 +89,8 @@ See the following list of supported Operating systems with the Zabbix releases.
| Debian 11 bullseye | V | V | V |
| Debian 10 buster | V | V | V |
+You can bypass this matrix by setting `enable_version_check: false`
+
# Role Variables
## Main variables
@@ -133,6 +135,9 @@ The following is an overview of all available configuration default for this rol
* `*zabbix_proxy_package_state`: Default: `present`. Can be overridden to `latest` to update packages
* `zabbix_repo_deb_url`: The URL to the Zabbix repository. Default `http://repo.zabbix.com/zabbix/{{ zabbix_proxy_version }}/{{ ansible_distribution.lower() }}`
* `zabbix_repo_deb_component`: The repository component for Debian installs. Default `main`.
+* `zabbix_repo_deb_gpg_key_url`: The URL to download the Zabbix GPG key from. Default `http://repo.zabbix.com/zabbix-official-repo.key`.
+* `zabbix_repo_deb_include_deb_src`: True, if deb-src should be included in the zabbix.sources entry. Default `true`.
+
### SElinux
* `zabbix_proxy_selinux`: Default: `False`. Enables an SELinux policy so that the Proxy will run.
diff --git a/ansible_collections/community/zabbix/docs/ZABBIX_SERVER_ROLE.md b/ansible_collections/community/zabbix/docs/ZABBIX_SERVER_ROLE.md
index f154f4951..9557281c3 100644
--- a/ansible_collections/community/zabbix/docs/ZABBIX_SERVER_ROLE.md
+++ b/ansible_collections/community/zabbix/docs/ZABBIX_SERVER_ROLE.md
@@ -86,6 +86,8 @@ See the following list of supported Operating systems with the Zabbix releases:
| Debian 11 bullseye | V | V | V |
| Debian 10 buster | | | V |
+You can bypass this matrix by setting `enable_version_check: false`
+
# Installation
Installing this role is very simple: `ansible-galaxy install community.zabbix.zabbix_server`
@@ -109,6 +111,8 @@ The following is an overview of all available configuration default for this rol
* `zabbix_service_enabled`: Default: `True` Can be overridden to `False` if needed
* `zabbix_repo_deb_url`: The URL to the Zabbix repository. Default `http://repo.zabbix.com/zabbix/{{ zabbix_server_version }}/{{ ansible_distribution.lower() }}`
* `zabbix_repo_deb_component`: The repository component for Debian installs. Default `main`.
+* `zabbix_repo_deb_gpg_key_url`: The URL to download the Zabbix GPG key from. Default `http://repo.zabbix.com/zabbix-official-repo.key`.
+* `zabbix_repo_deb_include_deb_src`: True, if deb-src should be included in the zabbix.sources entry. Default `true`.
### SElinux
diff --git a/ansible_collections/community/zabbix/docs/ZABBIX_WEB_ROLE.md b/ansible_collections/community/zabbix/docs/ZABBIX_WEB_ROLE.md
index 5904f8288..aac6f9dc2 100644
--- a/ansible_collections/community/zabbix/docs/ZABBIX_WEB_ROLE.md
+++ b/ansible_collections/community/zabbix/docs/ZABBIX_WEB_ROLE.md
@@ -16,6 +16,7 @@
- [Apache configuration](#apache-configuration)
- [Nginx configuration](#nginx-configuration)
- [PHP-FPM](#php-fpm)
+ - [SElinux](#selinux)
- [Zabbix Server](#zabbix-server)
* [proxy](#proxy)
- [Example Playbook](#example-playbook)
@@ -65,6 +66,8 @@ See the following list of supported Operating Systems with the Zabbix releases.
| Debian 11 bullseye | V | V | V |
| Debian 10 buster | | | V |
+You can bypass this matrix by setting `enable_version_check: false`
+
# Installation
Installing this role is very simple: `ansible-galaxy install community.zabbix.zabbix_web`
@@ -94,6 +97,8 @@ The following is an overview of all available configuration defaults for this ro
* `zabbix_web_conf_mode`: Default: `0644`. The "mode" for the Zabbix configuration file.
* `zabbix_repo_deb_url`: The URL to the Zabbix repository. Default `http://repo.zabbix.com/zabbix/{{ zabbix_web_version }}/{{ ansible_distribution.lower() }}`
* `zabbix_repo_deb_component`: The repository component for Debian installs. Default `main`.
+* `zabbix_repo_deb_gpg_key_url`: The URL to download the Zabbix GPG key from. Default `http://repo.zabbix.com/zabbix-official-repo.key`.
+* `zabbix_repo_deb_include_deb_src`: True, if deb-src should be included in the zabbix.sources entry. Default `true`.
### Zabbix Web specific
@@ -116,7 +121,6 @@ The following is an overview of all available configuration defaults for this ro
* `zabbix_web_vhost_port`: The port on which Zabbix HTTP vhost is running.
* `zabbix_web_vhost_tls_port`: The port on which Zabbix HTTPS vhost is running.
* `zabbix_web_vhost_listen_ip`: On which interface the Apache Virtual Host is available.
-* `zabbix_apache_can_connect_ldap`: Default: `false`. Set SELinux boolean to allow httpd to connect to LDAP.
* `zabbix_web_max_execution_time`: PHP max execution time
* `zabbix_web_memory_limit`: PHP memory limit
* `zabbix_web_post_max_size`: PHP maximum post size
@@ -151,6 +155,13 @@ The following properties are specific to Zabbix 5.0 and for the PHP(-FPM) config
* `zabbix_php_fpm_conf_group`: The group of the owner of the socket file (When `zabbix_php_fpm_listen` contains a patch to a socket file).
+### SElinux
+
+* `zabbix_web_selinux`: Default: `False`. Enables an SELinux policy so that the web will run.
+* `selinux_allow_httpd_can_connect_zabbix`: Default: `false`. Set SELinux boolean to allow httpd to connect to zabbix.
+* `selinux_allow_httpd_can_connect_ldap`: Default: `false`. Set SELinux boolean to allow httpd to connect to LDAP.
+* `selinux_allow_httpd_can_network_connect_db`: Default: `false` Set SELinux boolean to allow httpd to connect databases over the network.
+
### Zabbix Server
* `zabbix_server_name`: The name of the Zabbix Server.
diff --git a/ansible_collections/community/zabbix/molecule/requirements.txt b/ansible_collections/community/zabbix/molecule/requirements.txt
index b7cbb1138..9ccb5e157 100644
--- a/ansible_collections/community/zabbix/molecule/requirements.txt
+++ b/ansible_collections/community/zabbix/molecule/requirements.txt
@@ -3,9 +3,9 @@ ansible==7.0.0
ansible-compat==3.0.0
ansible-core==2.14.2
docker==6.1.3
-molecule==4.0.4
-molecule-docker==2.1.0
-netaddr==0.8.0
+molecule<5
+molecule-docker @ git+https://github.com/ansible-community/molecule-docker@main
+netaddr==1.2.1
pytest==7.2.1
pytest-testinfra==7.0.0
ipaddr==2.2.0
diff --git a/ansible_collections/community/zabbix/molecule/zabbix_agent_tests/common/playbooks/prepare.yml b/ansible_collections/community/zabbix/molecule/zabbix_agent_tests/common/playbooks/prepare.yml
index cf1100aab..2ad8efa3f 100644
--- a/ansible_collections/community/zabbix/molecule/zabbix_agent_tests/common/playbooks/prepare.yml
+++ b/ansible_collections/community/zabbix/molecule/zabbix_agent_tests/common/playbooks/prepare.yml
@@ -47,6 +47,7 @@
hosts: docker
tasks:
- name: "Download Docker CE repo file"
+ when: not ansible_check_mode # Because get_url always has changed status in check_mode.
ansible.builtin.get_url:
url: https://download.docker.com/linux/centos/docker-ce.repo
dest: /etc/yum.repos.d/docker-ce.repo
diff --git a/ansible_collections/community/zabbix/molecule/zabbix_javagateway/molecule.yml b/ansible_collections/community/zabbix/molecule/zabbix_javagateway/molecule.yml
index ee072707d..0c6de4172 100644
--- a/ansible_collections/community/zabbix/molecule/zabbix_javagateway/molecule.yml
+++ b/ansible_collections/community/zabbix/molecule/zabbix_javagateway/molecule.yml
@@ -3,7 +3,7 @@ driver:
name: docker
platforms:
- - name: zabbix-server-${MY_MOLECULE_CONTAINER:-centos}
+ - name: zabbix-server-${MY_MOLECULE_VERSION:-v64}-${MY_MOLECULE_DATABASE:-mysql}-${MY_MOLECULE_CONTAINER:-rockylinux8}
image: geerlingguy/docker-${MY_MOLECULE_IMAGE:-rockylinux8}-ansible:latest
privileged: true
pre_build_image: true
diff --git a/ansible_collections/community/zabbix/molecule/zabbix_proxy/destroy.yml b/ansible_collections/community/zabbix/molecule/zabbix_proxy/destroy.yml
index 54771a5a1..7ef374be5 100644
--- a/ansible_collections/community/zabbix/molecule/zabbix_proxy/destroy.yml
+++ b/ansible_collections/community/zabbix/molecule/zabbix_proxy/destroy.yml
@@ -17,9 +17,7 @@
- name: Destroy 3rd party instance(s)
docker_container:
- name: '{{ item }}'
+ name: "{{ item.name }}-db"
state: absent
force_kill: true
- with_items:
- - mysql-host
- - postgresql-host
+ loop: "{{ molecule_yml.platforms }}"
diff --git a/ansible_collections/community/zabbix/molecule/zabbix_proxy/molecule.yml b/ansible_collections/community/zabbix/molecule/zabbix_proxy/molecule.yml
index 4eb173acf..4eadd60ab 100644
--- a/ansible_collections/community/zabbix/molecule/zabbix_proxy/molecule.yml
+++ b/ansible_collections/community/zabbix/molecule/zabbix_proxy/molecule.yml
@@ -2,7 +2,7 @@
driver:
name: docker
platforms:
- - name: zabbix-proxy-${MY_MOLECULE_CONTAINER:-centos}
+ - name: zabbix-proxy-${MY_MOLECULE_VERSION:-v64}-${MY_MOLECULE_DATABASE:-mysql}-${MY_MOLECULE_CONTAINER:-rockylinux8}
image: geerlingguy/docker-${MY_MOLECULE_IMAGE:-rockylinux8}-ansible:latest
privileged: true
pre_build_image: true
@@ -37,19 +37,19 @@ provisioner:
zabbix_proxy_dbuser: zabbix-dbuser
zabbix_proxy_database: mysql
zabbix_proxy_dbport: 3306
- zabbix_proxy_dbhost: mysql-host
+ zabbix_proxy_dbhost: "{{ inventory_hostname }}-db"
zabbix_proxy_dbhost_run_install: false
zabbix_proxy_privileged_host: "%"
- zabbix_proxy_mysql_login_host: mysql-host
+ zabbix_proxy_mysql_login_host: "{{ inventory_hostname }}-db"
zabbix_proxy_mysql_login_user: root
zabbix_proxy_mysql_login_password: changeme
zabbix_proxy_mysql_login_port: 3306
pgsql:
zabbix_proxy_database: pgsql
zabbix_proxy_dbport: 5432
- zabbix_proxy_dbhost: postgresql-host
+ zabbix_proxy_dbhost: "{{ inventory_hostname }}-db"
zabbix_proxy_dbhost_run_install: false
- zabbix_proxy_pgsql_login_host: postgresql-host
+ zabbix_proxy_pgsql_login_host: "{{ inventory_hostname }}-db"
zabbix_proxy_pgsql_login_user: postgres
zabbix_proxy_pgsql_login_password: changeme
zabbix_proxy_pgsql_login_port: 5432
diff --git a/ansible_collections/community/zabbix/molecule/zabbix_proxy/prepare.yml b/ansible_collections/community/zabbix/molecule/zabbix_proxy/prepare.yml
index c5e3b9e45..1ff492d62 100644
--- a/ansible_collections/community/zabbix/molecule/zabbix_proxy/prepare.yml
+++ b/ansible_collections/community/zabbix/molecule/zabbix_proxy/prepare.yml
@@ -5,7 +5,7 @@
pre_tasks:
- name: "Create MySQL Container"
docker_container:
- name: mysql-host
+ name: "{{ item.name }}-db"
image: mysql:8.0
state: started
recreate: true
@@ -20,7 +20,7 @@
- name: "Create postgresql Container"
docker_container:
- name: postgresql-host
+ name: "{{ item.name }}-db"
image: postgres:13
state: started
recreate: true
diff --git a/ansible_collections/community/zabbix/molecule/zabbix_server/destroy.yml b/ansible_collections/community/zabbix/molecule/zabbix_server/destroy.yml
index 54771a5a1..7ef374be5 100644
--- a/ansible_collections/community/zabbix/molecule/zabbix_server/destroy.yml
+++ b/ansible_collections/community/zabbix/molecule/zabbix_server/destroy.yml
@@ -17,9 +17,7 @@
- name: Destroy 3rd party instance(s)
docker_container:
- name: '{{ item }}'
+ name: "{{ item.name }}-db"
state: absent
force_kill: true
- with_items:
- - mysql-host
- - postgresql-host
+ loop: "{{ molecule_yml.platforms }}"
diff --git a/ansible_collections/community/zabbix/molecule/zabbix_server/molecule.yml b/ansible_collections/community/zabbix/molecule/zabbix_server/molecule.yml
index 2424455f4..52df5ac4e 100644
--- a/ansible_collections/community/zabbix/molecule/zabbix_server/molecule.yml
+++ b/ansible_collections/community/zabbix/molecule/zabbix_server/molecule.yml
@@ -2,7 +2,7 @@
driver:
name: docker
platforms:
- - name: zabbix-server-${MY_MOLECULE_CONTAINER:-centos}
+ - name: zabbix-server-${MY_MOLECULE_VERSION:-v64}-${MY_MOLECULE_DATABASE:-mysql}-${MY_MOLECULE_CONTAINER:-rockylinux8}
image: geerlingguy/docker-${MY_MOLECULE_IMAGE:-rockylinux8}-ansible:latest
privileged: true
pre_build_image: true
@@ -40,19 +40,19 @@ provisioner:
zabbix_server_dbuser: zabbix-dbuser
zabbix_server_database: mysql
zabbix_server_dbport: 3306
- zabbix_server_dbhost: mysql-host
+ zabbix_server_dbhost: "{{ inventory_hostname }}-db"
zabbix_server_dbhost_run_install: false
zabbix_server_privileged_host: "%"
- zabbix_server_mysql_login_host: mysql-host
+ zabbix_server_mysql_login_host: "{{ inventory_hostname }}-db"
zabbix_server_mysql_login_user: root
zabbix_server_mysql_login_password: changeme
zabbix_server_mysql_login_port: 3306
pgsql:
zabbix_server_database: pgsql
zabbix_server_dbport: 5432
- zabbix_server_dbhost: postgresql-host
+ zabbix_server_dbhost: "{{ inventory_hostname }}-db"
zabbix_server_dbhost_run_install: false
- zabbix_server_pgsql_login_host: postgresql-host
+ zabbix_server_pgsql_login_host: "{{ inventory_hostname }}-db"
zabbix_server_pgsql_login_user: postgres
zabbix_server_pgsql_login_password: changeme
zabbix_server_pgsql_login_port: 5432
diff --git a/ansible_collections/community/zabbix/molecule/zabbix_server/prepare.yml b/ansible_collections/community/zabbix/molecule/zabbix_server/prepare.yml
index 922b33753..725e6d718 100644
--- a/ansible_collections/community/zabbix/molecule/zabbix_server/prepare.yml
+++ b/ansible_collections/community/zabbix/molecule/zabbix_server/prepare.yml
@@ -5,7 +5,7 @@
pre_tasks:
- name: "Create MySQL Container"
docker_container:
- name: mysql-host
+ name: "{{ item.name }}-db"
image: mysql:8.0.32
state: started
recreate: true
@@ -20,7 +20,7 @@
- name: "Create postgresql Container"
docker_container:
- name: postgresql-host
+ name: "{{ item.name }}-db"
image: postgres:13
state: started
recreate: true
@@ -109,11 +109,3 @@
state: absent
when:
- ansible_os_family == 'RedHat'
-
- - name: PyMySQL
- ansible.builtin.pip:
- name: PyMySQL
- register: installation_dependencies
- until: installation_dependencies is succeeded
- when:
- - inventory_hostname in groups['mysql']
diff --git a/ansible_collections/community/zabbix/molecule/zabbix_web/destroy.yml b/ansible_collections/community/zabbix/molecule/zabbix_web/destroy.yml
index 54771a5a1..7ef374be5 100644
--- a/ansible_collections/community/zabbix/molecule/zabbix_web/destroy.yml
+++ b/ansible_collections/community/zabbix/molecule/zabbix_web/destroy.yml
@@ -17,9 +17,7 @@
- name: Destroy 3rd party instance(s)
docker_container:
- name: '{{ item }}'
+ name: "{{ item.name }}-db"
state: absent
force_kill: true
- with_items:
- - mysql-host
- - postgresql-host
+ loop: "{{ molecule_yml.platforms }}"
diff --git a/ansible_collections/community/zabbix/molecule/zabbix_web/molecule.yml b/ansible_collections/community/zabbix/molecule/zabbix_web/molecule.yml
index 0aa3ab800..549b7ae16 100644
--- a/ansible_collections/community/zabbix/molecule/zabbix_web/molecule.yml
+++ b/ansible_collections/community/zabbix/molecule/zabbix_web/molecule.yml
@@ -10,7 +10,7 @@ dependency:
driver:
name: docker
platforms:
- - name: zabbix-web-${MY_MOLECULE_CONTAINER:-centos}
+ - name: zabbix-web-${MY_MOLECULE_VERSION:-v64}-${MY_MOLECULE_DATABASE:-mysql}-${MY_MOLECULE_CONTAINER:-rockylinux8}
image: geerlingguy/docker-${MY_MOLECULE_IMAGE:-rockylinux8}-ansible:latest
privileged: true
pre_build_image: true
@@ -33,7 +33,7 @@ provisioner:
inventory:
group_vars:
all:
- zabbix_api_server_url: zabbix-web-${MY_MOLECULE_CONTAINER:-centos}
+ zabbix_api_server_url: zabbix-web-${MY_MOLECULE_VERSION:-v64}-${MY_MOLECULE_DATABASE:-mysql}-${MY_MOLECULE_CONTAINER:-rockylinux8}
python3:
ansible_python_interpreter: /usr/bin/python3
python:
@@ -50,19 +50,19 @@ provisioner:
mysql:
zabbix_server_database: mysql
zabbix_server_dbport: 3306
- zabbix_server_dbhost: mysql-host
+ zabbix_server_dbhost: "{{ inventory_hostname }}-db"
zabbix_server_dbhost_run_install: false
zabbix_server_privileged_host: "%"
- zabbix_server_mysql_login_host: mysql-host
+ zabbix_server_mysql_login_host: "{{ inventory_hostname }}-db"
zabbix_server_mysql_login_user: root
zabbix_server_mysql_login_password: changeme
zabbix_server_mysql_login_port: 3306
pgsql:
zabbix_server_database: pgsql
zabbix_server_dbport: 5432
- zabbix_server_dbhost: postgresql-host
+ zabbix_server_dbhost: "{{ inventory_hostname }}-db"
zabbix_server_dbhost_run_install: false
- zabbix_server_pgsql_login_host: postgresql-host
+ zabbix_server_pgsql_login_host: "{{ inventory_hostname }}-db"
zabbix_server_pgsql_login_user: postgres
zabbix_server_pgsql_login_password: changeme
zabbix_server_pgsql_login_port: 5432
diff --git a/ansible_collections/community/zabbix/molecule/zabbix_web/prepare.yml b/ansible_collections/community/zabbix/molecule/zabbix_web/prepare.yml
index 204eb8f56..d3dcc1ad0 100644
--- a/ansible_collections/community/zabbix/molecule/zabbix_web/prepare.yml
+++ b/ansible_collections/community/zabbix/molecule/zabbix_web/prepare.yml
@@ -5,7 +5,7 @@
pre_tasks:
- name: "Create MySQL Container"
docker_container:
- name: mysql-host
+ name: "{{ item.name }}-db"
image: mysql:8.0
state: started
recreate: true
@@ -20,7 +20,7 @@
- name: "Create postgresql Container"
docker_container:
- name: postgresql-host
+ name: "{{ item.name }}-db"
image: postgres:13
state: started
recreate: true
diff --git a/ansible_collections/community/zabbix/plugins/httpapi/zabbix.py b/ansible_collections/community/zabbix/plugins/httpapi/zabbix.py
index 56ba0356d..2a8d8a8ae 100644
--- a/ansible_collections/community/zabbix/plugins/httpapi/zabbix.py
+++ b/ansible_collections/community/zabbix/plugins/httpapi/zabbix.py
@@ -29,7 +29,8 @@ options:
zabbix_url_path:
type: str
description:
- - Specifies path portion in Zabbix WebUI URL, e.g. for https://myzabbixfarm.com/zabbixeu zabbix_url_path=zabbixeu
+ - Specifies path portion in Zabbix WebUI URL, e.g. for https://myzabbixfarm.com/zabbixeu zabbix_url_path=zabbixeu.
+ - "If Zabbix WebUI is running at the root, i.e. https://myzabbixfarm.com/, then assign empty string to this variable C(zabbix_url_path: '')."
default: zabbix
env:
- name: ANSIBLE_ZABBIX_URL_PATH
diff --git a/ansible_collections/community/zabbix/plugins/modules/zabbix_correlation.py b/ansible_collections/community/zabbix/plugins/modules/zabbix_correlation.py
new file mode 100644
index 000000000..952ef49d0
--- /dev/null
+++ b/ansible_collections/community/zabbix/plugins/modules/zabbix_correlation.py
@@ -0,0 +1,587 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+#
+# Copyright: (c) 2024, ONODERA Masaru <masaru-onodera@ieee.org>
+# 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: zabbix_correlation
+
+short_description: Create/update/delete Zabbix correlation
+
+
+description:
+ - This module allows you to create, update and delete Zabbix correlation.
+
+author:
+ - ONODERA Masaru(@masa-orca)
+
+requirements:
+ - "python >= 3.9"
+
+version_added: 2.4.0
+
+options:
+ name:
+ description:
+ - Name of this correlation
+ type: str
+ required: true
+ description:
+ description:
+ - Description of this correlation
+ type: str
+ operations:
+ description:
+ - A operations.
+ type: list
+ elements: dict
+ suboptions:
+ type:
+ description:
+ - Type of the operation.
+ type: str
+ choices:
+ - close_old_events
+ - close_new_event
+ required: true
+ filter:
+ description:
+ - A filter.
+ type: dict
+ suboptions:
+ evaltype:
+ description:
+ - An evaluation method of the filter.
+ type: str
+ choices:
+ - and_or
+ - and
+ - or
+ - custom_expression
+ required: true
+ conditions:
+ description:
+ - A condition.
+ type: list
+ elements: dict
+ required: true
+ suboptions:
+ type:
+ description:
+ - Type of the condition.
+ type: str
+ choices:
+ - old_event_tag
+ - new_event_tag
+ - new_event_host_group
+ - event_tag_pair
+ - old_event_tag_value
+ - new_event_tag_value
+ required: true
+ tag:
+ description:
+ - Event tag (old or new).
+ - This parameter is required if value of I(type) of the condition is C(old_event_tag), C(new_event_tag),
+ C(old_event_tag_value) or C(new_event_tag_value).
+ type: str
+ hostgroup:
+ description:
+ - A name of hostgroup name
+ - This parameter is required if value of I(type) of the condition is C(new_event_host_group).
+ type: str
+ oldtag:
+ description:
+ - Old event tag.
+ - This parameter is required if value of I(type) of the condition is C(event_tag_pair).
+ type: str
+ newtag:
+ description:
+ - New event tag.
+ - This parameter is required if value of I(type) of the condition is C(event_tag_pair).
+ type: str
+ value:
+ description:
+ - Event tag (old or new) value.
+ - This parameter is required if value of I(type) of the condition is C(old_event_tag_value) or C(new_event_tag_value).
+ type: str
+ formulaid:
+ description:
+ - Arbitrary unique ID that is used to reference the condition from a custom expression.
+ - This parameter's value must be only contain capital-case letters.
+ - This parameter is required if value of I(evaltype) of the filter is C(custom_expression).
+ type: str
+ operator:
+ description:
+ - Condition operator.
+ - This parameter is required if value of I(type) of the condition is C(new_event_host_group),
+ C(old_event_tag_value) or C(new_event_tag_value).
+ - You can only select C(equal) or C(not_equal) if value of I(type) of the condition is C(new_event_host_group).
+ type: str
+ choices:
+ - equal
+ - not_equal
+ - like
+ - not_like
+ formula:
+ description:
+ - A custom expression for the filter.
+ - This parameter is required if value of I(evaltype) is C(custom_expression).
+ type: str
+ status:
+ description:
+ - Status of the correlation.
+ choices:
+ - enabled
+ - disabled
+ default: enabled
+ type: str
+ state:
+ description:
+ - State of the correlation.
+ type: str
+ choices:
+ - present
+ - absent
+ default: present
+
+extends_documentation_fragment:
+ - community.zabbix.zabbix
+
+"""
+
+EXAMPLES = """
+# If you want to use Username and Password to be authenticated by Zabbix Server
+- name: Set credentials to access Zabbix Server API
+ ansible.builtin.set_fact:
+ ansible_user: Admin
+ ansible_httpapi_pass: zabbix
+
+# If you want to use API token to be authenticated by Zabbix Server
+# https://www.zabbix.com/documentation/current/en/manual/web_interface/frontend_sections/administration/general#api-tokens
+- name: Set API token
+ ansible.builtin.set_fact:
+ ansible_zabbix_auth_key: 8ec0d52432c15c91fcafe9888500cf9a607f44091ab554dbee860f6b44fac895
+
+- name: Create correlation of 'New event tag correlation'
+ # set task level variables as we change ansible_connection plugin here
+ vars:
+ ansible_network_os: community.zabbix.zabbix
+ ansible_connection: httpapi
+ ansible_httpapi_port: 443
+ ansible_httpapi_use_ssl: true
+ ansible_httpapi_validate_certs: false
+ ansible_zabbix_url_path: 'zabbixeu' # If Zabbix WebUI runs on non-default (zabbix) path ,e.g. http://<FQDN>/zabbixeu
+ ansible_host: zabbix-example-fqdn.org
+ community.zabbix.zabbix_correlation:
+ name: New event tag correlation
+ filter:
+ evaltype: and_or
+ conditions:
+ - type: new_event_tag
+ tag: ok
+ operations:
+ - type: close_old_events
+"""
+
+RETURN = """
+msg:
+ description: The result of the operation
+ returned: success
+ type: str
+ sample: 'Successfully created correlation'
+"""
+
+
+from ansible.module_utils.basic import AnsibleModule
+
+from ansible_collections.community.zabbix.plugins.module_utils.base import ZabbixBase
+import ansible_collections.community.zabbix.plugins.module_utils.helpers as zabbix_utils
+
+
+class Correlation(ZabbixBase):
+ def __init__(self, module, zbx=None, zapi_wrapper=None):
+ super(Correlation, self).__init__(module, zbx, zapi_wrapper)
+
+ def get_correlations(self, correlation_name):
+ try:
+ regexps = self._zapi.correlation.get(
+ {
+ "output": "extend",
+ "selectFilter": "extend",
+ "selectOperations": "extend",
+ "filter": {"name": correlation_name},
+ }
+ )
+ if len(regexps) >= 2:
+ self._module.fail_json("Too many correlations are matched.")
+ return regexps
+ except Exception as e:
+ self._module.fail_json(
+ msg="Failed to get correlation: %s" % e
+ )
+
+ def delete_correlation(self, correlation):
+ try:
+ parameter = [correlation["correlationid"]]
+ if self._module.check_mode:
+ self._module.exit_json(changed=True)
+ self._zapi.correlation.delete(parameter)
+ self._module.exit_json(
+ changed=True, msg="Successfully deleted correlation."
+ )
+ except Exception as e:
+ self._module.fail_json(
+ msg="Failed to delete correlation: %s" % e
+ )
+
+ def _convert_operations_to_json(self, operations):
+ operation_type_values = ["close_old_events", "close_new_event"]
+
+ operations_json = []
+ for operation in operations:
+ operation_json = {}
+ operation_type = zabbix_utils.helper_to_numeric_value(
+ operation_type_values, operation["type"]
+ )
+ operation_json["type"] = str(operation_type)
+ operations_json.append(operation_json)
+
+ return operations_json
+
+ def _get_groupid_from_name(self, hostgroup):
+ groupid = self._zapi.hostgroup.get({"filter": {"name": hostgroup}})
+ if not groupid or len(groupid) > 1:
+ self._module.fail_json("Host group '%s' cannot be found" % hostgroup)
+ return groupid[0]["groupid"]
+
+ def _convert_conditions_to_json(self, filter_parameter):
+ condition_type_values = [
+ "old_event_tag",
+ "new_event_tag",
+ "new_event_host_group",
+ "event_tag_pair",
+ "old_event_tag_value",
+ "new_event_tag_value"
+ ]
+
+ operator_values = [
+ "equal",
+ "not_equal",
+ "like",
+ "not_like"
+ ]
+
+ conditions_json = []
+ for condition in filter_parameter["conditions"]:
+ condition_json = {}
+
+ condition_type = zabbix_utils.helper_to_numeric_value(
+ condition_type_values, condition["type"]
+ )
+ condition_json["type"] = str(condition_type)
+
+ if condition["tag"] is not None:
+ condition_json["tag"] = condition["tag"]
+
+ if condition["hostgroup"] is not None:
+ condition_json["groupid"] = self._get_groupid_from_name(condition["hostgroup"])
+
+ if condition["oldtag"] is not None:
+ condition_json["oldtag"] = condition["oldtag"]
+
+ if condition["newtag"] is not None:
+ condition_json["newtag"] = condition["newtag"]
+
+ if condition["value"] is not None:
+ condition_json["value"] = condition["value"]
+
+ if filter_parameter["evaltype"] == "custom_expression":
+ if condition["formulaid"] is not None:
+ if not condition["formulaid"].isupper():
+ self._module.fail_json(
+ "A value of formulaid must be uppercase."
+ )
+ condition_json["formulaid"] = condition["formulaid"]
+ else:
+ self._module.fail_json(
+ "formulaid must be defined if evaltype is 'custom_expression'."
+ )
+ else:
+ if condition["formulaid"] is not None:
+ self._module.warn(
+ "A value of formulaid will be ignored because evaltype is not 'custom_expression'."
+ )
+
+ if condition["operator"] is not None:
+ if (condition["type"] == "new_event_host_group"
+ and (condition["operator"] == "like" or condition["operator"] == "not_like")):
+ self._module.fail_json(
+ "A value of operator must be equal or not_equal when condition's type is 'new_event_host_group'."
+ )
+ operator = zabbix_utils.helper_to_numeric_value(
+ operator_values, condition["operator"]
+ )
+ condition_json["operator"] = str(operator)
+
+ conditions_json.append(condition_json)
+ return conditions_json
+
+ def _convert_filter_parameter_to_json(self, filter_parameter):
+ evaltype_values = [
+ "and_or",
+ "and",
+ "or",
+ "custom_expression"
+ ]
+
+ filter_parameter_json = {}
+
+ evaltype = zabbix_utils.helper_to_numeric_value(
+ evaltype_values, filter_parameter["evaltype"]
+ )
+ filter_parameter_json["evaltype"] = str(evaltype)
+
+ filter_parameter_json["conditions"] = self._convert_conditions_to_json(filter_parameter)
+
+ if filter_parameter["formula"] is not None:
+ if filter_parameter["evaltype"] == "custom_expression":
+ filter_parameter_json["formula"] = filter_parameter["formula"]
+ else:
+ self._module.warn(
+ "A value of formula will be ignored because evaltype is not 'custom_expression'."
+ )
+
+ return filter_parameter_json
+
+ def create_correlation(self, name, description, operations, filter_parameter, status):
+ status_values = ["enabled", "disabled"]
+ status_json = zabbix_utils.helper_to_numeric_value(
+ status_values, status
+ )
+
+ try:
+ correlation_json = {}
+
+ correlation_json["name"] = name
+
+ if description is not None:
+ correlation_json["description"] = description
+
+ correlation_json["operations"] = self._convert_operations_to_json(operations)
+
+ correlation_json["filter"] = self._convert_filter_parameter_to_json(filter_parameter)
+
+ correlation_json["status"] = status_json
+
+ if self._module.check_mode:
+ self._module.exit_json(changed=True)
+ self._zapi.correlation.create(correlation_json)
+ self._module.exit_json(
+ changed=True, msg="Successfully created correlation"
+ )
+ except Exception as e:
+ self._module.fail_json(
+ msg="Failed to create correlation: %s" % e
+ )
+
+ def check_filter_properties(self, current_filter, future_filter):
+ changed = False
+
+ if (current_filter["evaltype"] != future_filter["evaltype"]):
+ changed = True
+
+ if "formula" in future_filter.keys():
+ if (current_filter["eval_formula"] != future_filter["formula"]):
+ changed = True
+
+ for condition in current_filter["conditions"]:
+ # 3 means custom expression.
+ if current_filter["evaltype"] != "3":
+ condition.pop("formulaid")
+ diff_conditions = []
+ zabbix_utils.helper_compare_lists(current_filter["conditions"], future_filter["conditions"], diff_conditions)
+ if len(diff_conditions) != 0:
+ changed = True
+
+ return changed
+
+ def update_correlation(self, current_correlation, description, operations, filter_parameter, status):
+ status_values = ["enabled", "disabled"]
+ status_json = zabbix_utils.helper_to_numeric_value(
+ status_values, status
+ )
+
+ try:
+ correlation_json = {}
+
+ if description is not None and description != current_correlation["description"]:
+ correlation_json["description"] = description
+
+ if operations is not None:
+ future_operations = self._convert_operations_to_json(operations)
+ diff_operations = []
+ zabbix_utils.helper_compare_lists(current_correlation["operations"], future_operations, diff_operations)
+ if len(diff_operations) != 0:
+ correlation_json["operations"] = future_operations
+
+ if filter_parameter is not None:
+ future_filter = self._convert_filter_parameter_to_json(filter_parameter)
+ if self.check_filter_properties(current_correlation["filter"], future_filter):
+ correlation_json["filter"] = future_filter
+
+ if str(status_json) != current_correlation["status"]:
+ correlation_json["status"] = str(status_json)
+
+ if len(correlation_json.keys()) == 0:
+ self._module.exit_json(changed=False)
+ else:
+ correlation_json["correlationid"] = current_correlation["correlationid"]
+ if self._module.check_mode:
+ self._module.exit_json(changed=True)
+ self._zapi.correlation.update(correlation_json)
+ self._module.exit_json(
+ changed=True, msg="Successfully updated correlation"
+ )
+ except Exception as e:
+ self._module.fail_json(
+ msg="Failed to update correlation: %s" % e
+ )
+
+
+def main():
+ """Main ansible module function"""
+
+ argument_spec = zabbix_utils.zabbix_common_argument_spec()
+ argument_spec.update(
+ dict(
+ name=dict(type="str", required=True),
+ description=dict(type="str"),
+ operations=dict(
+ type="list",
+ elements="dict",
+ options=dict(
+ type=dict(
+ choices=["close_old_events", "close_new_event"],
+ required=True
+ )
+ )
+ ),
+ filter=dict(
+ type="dict",
+ options=dict(
+ evaltype=dict(
+ type="str",
+ required=True,
+ choices=[
+ "and_or",
+ "and",
+ "or",
+ "custom_expression"
+ ]
+ ),
+ conditions=dict(
+ required=True,
+ type="list",
+ elements="dict",
+ options=dict(
+ type=dict(
+ type="str",
+ required=True,
+ choices=[
+ "old_event_tag",
+ "new_event_tag",
+ "new_event_host_group",
+ "event_tag_pair",
+ "old_event_tag_value",
+ "new_event_tag_value"
+ ]
+ ),
+ tag=dict(type="str"),
+ hostgroup=dict(type="str"),
+ oldtag=dict(type="str"),
+ newtag=dict(type="str"),
+ value=dict(type="str"),
+ formulaid=dict(type="str"),
+ operator=dict(
+ type="str",
+ choices=[
+ "equal",
+ "not_equal",
+ "like",
+ "not_like"
+ ]
+ ),
+ ),
+ required_if=[
+ ["type", "old_event_tag", ["tag"]],
+ ["type", "new_event_tag", ["tag"]],
+ ["type", "new_event_host_group", ["hostgroup", "operator"]],
+ ["type", "event_tag_pair", ["oldtag", "newtag"]],
+ ["type", "old_event_tag_value", ["tag", "value", "operator"]],
+ ["type", "new_event_tag_value", ["tag", "value", "operator"]]
+ ],
+ mutually_exclusive=[
+ ("tag", "hostgroup", "oldtag")
+ ],
+ required_together=[
+ ('oldtag', 'newtag')
+ ]
+ ),
+ formula=dict(type="str"),
+ ),
+ required_if=[
+ ["evaltype", "custom_expression", ["formula"]],
+ ]
+ ),
+ status=dict(
+ type="str",
+ required=False,
+ default="enabled",
+ choices=["enabled", "disabled"],
+ ),
+ state=dict(
+ type="str",
+ required=False,
+ default="present",
+ choices=["present", "absent"],
+ )
+ )
+ )
+
+ module = AnsibleModule(
+ argument_spec=argument_spec,
+ supports_check_mode=True,
+ )
+
+ name = module.params["name"]
+ description = module.params["description"]
+ operations = module.params["operations"]
+ filter_parameter = module.params["filter"]
+ status = module.params["status"]
+ state = module.params["state"]
+
+ correlation_class_obj = Correlation(module)
+ correlations = correlation_class_obj.get_correlations(name)
+
+ if state == "absent":
+ if len(correlations) == 1:
+ correlation_class_obj.delete_correlation(correlations[0])
+ else:
+ module.exit_json(changed=False)
+ else:
+ if len(correlations) == 1:
+ correlation_class_obj.update_correlation(correlations[0], description, operations, filter_parameter, status)
+ else:
+ correlation_class_obj.create_correlation(name, description, operations, filter_parameter, status)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/ansible_collections/community/zabbix/plugins/modules/zabbix_host.py b/ansible_collections/community/zabbix/plugins/modules/zabbix_host.py
index 22e14d17d..00c04c221 100644
--- a/ansible_collections/community/zabbix/plugins/modules/zabbix_host.py
+++ b/ansible_collections/community/zabbix/plugins/modules/zabbix_host.py
@@ -513,7 +513,7 @@ class Host(ZabbixBase):
def update_host(self, host_name, group_ids, status, host_id, interfaces, exist_interface_list, proxy_id,
visible_name, description, tls_connect, tls_accept, tls_psk_identity, tls_psk, tls_issuer,
- tls_subject, ipmi_authtype, ipmi_privilege, ipmi_username, ipmi_password, macros, tags, discovered_host):
+ tls_subject, ipmi_authtype, ipmi_privilege, ipmi_username, ipmi_password, macros, tags, discovered_host, zabbix_host_obj):
try:
if self._module.check_mode:
self._module.exit_json(changed=True)
@@ -523,31 +523,31 @@ class Host(ZabbixBase):
else:
# A "plain" host
parameters = {"hostid": host_id, "groups": group_ids, "status": status}
- if proxy_id >= 0:
+ if (proxy_id >= 0 and proxy_id != zabbix_host_obj["proxy_hostid"]):
parameters["proxy_hostid"] = proxy_id
- if visible_name:
+ if (visible_name is not None and visible_name != zabbix_host_obj["name"]):
parameters["name"] = visible_name
- if tls_connect:
+ if (tls_connect is not None and tls_connect != zabbix_host_obj["tls_connect"]):
parameters["tls_connect"] = tls_connect
- if tls_accept:
+ if (tls_accept is not None and tls_accept != zabbix_host_obj["tls_accept"]):
parameters["tls_accept"] = tls_accept
if tls_psk_identity:
parameters["tls_psk_identity"] = tls_psk_identity
if tls_psk:
parameters["tls_psk"] = tls_psk
- if tls_issuer:
+ if (tls_issuer is not None and tls_issuer != zabbix_host_obj["tls_issuer"]):
parameters["tls_issuer"] = tls_issuer
- if tls_subject:
+ if (tls_subject is not None and tls_subject != zabbix_host_obj["tls_subject"]):
parameters["tls_subject"] = tls_subject
- if description:
+ if (description is not None and description != zabbix_host_obj["description"]):
parameters["description"] = description
- if ipmi_authtype:
+ if (ipmi_authtype is not None and ipmi_authtype != zabbix_host_obj["ipmi_authtype"]):
parameters["ipmi_authtype"] = ipmi_authtype
- if ipmi_privilege:
+ if (ipmi_privilege is not None and ipmi_privilege != zabbix_host_obj["ipmi_privilege"]):
parameters["ipmi_privilege"] = ipmi_privilege
- if ipmi_username:
+ if (ipmi_username is not None and ipmi_username != zabbix_host_obj["ipmi_username"]):
parameters["ipmi_username"] = ipmi_username
- if ipmi_password:
+ if (ipmi_password is not None and ipmi_password != zabbix_host_obj["ipmi_password"]):
parameters["ipmi_password"] = ipmi_password
if interfaces:
parameters["interfaces"] = interfaces
@@ -809,8 +809,7 @@ class Host(ZabbixBase):
return False
# link or clear template of the host
- def link_or_clear_template(self, host_id, template_id_list, tls_connect, tls_accept, tls_psk_identity, tls_psk,
- tls_issuer, tls_subject, ipmi_authtype, ipmi_privilege, ipmi_username, ipmi_password, discovered_host):
+ def link_or_clear_template(self, host_id, template_id_list):
# get host's exist template ids
exist_template_id_list = self.get_host_templates_by_host_id(host_id)
@@ -821,25 +820,7 @@ class Host(ZabbixBase):
# get unlink and clear templates
templates_clear = exist_template_ids.difference(template_ids)
templates_clear_list = list(templates_clear)
- if discovered_host:
- # The host was discovered via Discovery Rule
- request_str = {"hostid": host_id, "templates": template_id_list, "templates_clear": templates_clear_list}
- else:
- # A "plain" host
- request_str = {"hostid": host_id, "templates": template_id_list, "templates_clear": templates_clear_list,
- "ipmi_authtype": ipmi_authtype, "ipmi_privilege": ipmi_privilege, "ipmi_username": ipmi_username, "ipmi_password": ipmi_password}
- if tls_connect:
- request_str["tls_connect"] = tls_connect
- if tls_accept:
- request_str["tls_accept"] = tls_accept
- if tls_psk_identity is not None:
- request_str["tls_psk_identity"] = tls_psk_identity
- if tls_psk is not None:
- request_str["tls_psk"] = tls_psk
- if tls_issuer is not None:
- request_str["tls_issuer"] = tls_issuer
- if tls_subject is not None:
- request_str["tls_subject"] = tls_subject
+ request_str = {"hostid": host_id, "templates": template_id_list, "templates_clear": templates_clear_list}
try:
if self._module.check_mode:
self._module.exit_json(changed=True)
@@ -1057,8 +1038,11 @@ def main():
group_ids = []
- if host_groups:
- group_ids = host.get_group_ids_by_group_names(host_groups)
+ if host_groups is not None:
+ if len(host_groups) >= 1:
+ group_ids = host.get_group_ids_by_group_names(host_groups)
+ else:
+ module.fail_json(msg="host_groups must be not empty list.")
interfaces, ip = host.construct_host_interfaces(interfaces)
@@ -1204,11 +1188,9 @@ def main():
host.update_host(
host_name, group_ids, status, host_id, interfaces, exist_interfaces, proxy_id, visible_name,
description, tls_connect, tls_accept, tls_psk_identity, tls_psk, tls_issuer, tls_subject,
- ipmi_authtype, ipmi_privilege, ipmi_username, ipmi_password, macros, tags, discovered_host)
+ ipmi_authtype, ipmi_privilege, ipmi_username, ipmi_password, macros, tags, discovered_host, zabbix_host_obj)
- host.link_or_clear_template(
- host_id, template_ids, tls_connect, tls_accept, tls_psk_identity, tls_psk, tls_issuer,
- tls_subject, ipmi_authtype, ipmi_privilege, ipmi_username, ipmi_password, discovered_host)
+ host.link_or_clear_template(host_id, template_ids)
host.update_inventory_mode(host_id, inventory_mode)
host.update_inventory_zabbix(host_id, inventory_zabbix)
@@ -1235,9 +1217,7 @@ def main():
tls_psk_identity, tls_psk, tls_issuer, tls_subject, ipmi_authtype, ipmi_privilege, ipmi_username,
ipmi_password, macros, tags)
- host.link_or_clear_template(
- host_id, template_ids, tls_connect, tls_accept, tls_psk_identity, tls_psk, tls_issuer, tls_subject,
- ipmi_authtype, ipmi_privilege, ipmi_username, ipmi_password, discovered_host)
+ host.link_or_clear_template(host_id, template_ids)
host.update_inventory_mode(host_id, inventory_mode)
host.update_inventory_zabbix(host_id, inventory_zabbix)
diff --git a/ansible_collections/community/zabbix/plugins/modules/zabbix_maintenance.py b/ansible_collections/community/zabbix/plugins/modules/zabbix_maintenance.py
index a2c635eb0..ce10815df 100644
--- a/ansible_collections/community/zabbix/plugins/modules/zabbix_maintenance.py
+++ b/ansible_collections/community/zabbix/plugins/modules/zabbix_maintenance.py
@@ -64,6 +64,20 @@ options:
- I(visible_name=yes) to search by visible name, I(visible_name=no) to search by technical name.
type: bool
default: "yes"
+ active_since:
+ description:
+ - Time when the maintenance becomes active.
+ - The given value will be rounded down to minutes.
+ - Uses `datetime.datetime.now(`) if not specified.
+ type: "str"
+ default: ""
+ active_till:
+ description:
+ - Time when the maintenance stops being active.
+ - The given value will be rounded down to minutes.
+ - Gets calculated from I(minutes) if not specified.
+ type: "str"
+ default: ""
tags:
description:
- List of tags to assign to the hosts in maintenance.
@@ -187,6 +201,24 @@ EXAMPLES = r"""
community.zabbix.zabbix_maintenance:
name: Test1
state: absent
+
+- name: Create maintenance window by date
+ # set task level variables as we change ansible_connection plugin here
+ vars:
+ ansible_network_os: community.zabbix.zabbix
+ ansible_connection: httpapi
+ ansible_httpapi_port: 443
+ ansible_httpapi_use_ssl: true
+ ansible_httpapi_validate_certs: false
+ ansible_zabbix_url_path: "zabbixeu" # If Zabbix WebUI runs on non-default (zabbix) path ,e.g. http://<FQDN>/zabbixeu
+ ansible_host: zabbix-example-fqdn.org
+ community.zabbix.zabbix_maintenance:
+ name: TestDate
+ state: present
+ host_names:
+ - host.example.org
+ active_since: "1979-09-19 09:00"
+ active_till: "1979-09-19 17:00"
"""
import datetime
@@ -342,6 +374,8 @@ def main():
desc=dict(type="str", required=False, default="Created by Ansible"),
collect_data=dict(type="bool", required=False, default=True),
visible_name=dict(type="bool", required=False, default=True),
+ active_since=dict(type="str", required=False, default=""),
+ active_till=dict(type="str", required=False, default=""),
tags=dict(
type="list",
elements="dict",
@@ -368,6 +402,8 @@ def main():
desc = module.params["desc"]
collect_data = module.params["collect_data"]
visible_name = module.params["visible_name"]
+ active_since = module.params["active_since"]
+ active_till = module.params["active_till"]
tags = module.params["tags"]
if collect_data:
@@ -389,9 +425,9 @@ def main():
module.fail_json(
msg="At least one host_name or host_group must be defined for each created maintenance.")
- now = datetime.datetime.now().replace(second=0)
+ now = datetime.datetime.fromisoformat(active_since) if active_since != "" else datetime.datetime.now().replace(second=0)
start_time = int(time.mktime(now.timetuple()))
- period = 60 * int(minutes) # N * 60 seconds
+ period = int((datetime.datetime.fromisoformat(active_till) - now).total_seconds()) if active_till != "" else 60 * int(minutes) # N * 60 seconds
if host_groups:
(rc, group_ids, error) = maint.get_group_ids(host_groups)
diff --git a/ansible_collections/community/zabbix/plugins/modules/zabbix_mediatype.py b/ansible_collections/community/zabbix/plugins/modules/zabbix_mediatype.py
index 1e2514bf3..34bb1db82 100644
--- a/ansible_collections/community/zabbix/plugins/modules/zabbix_mediatype.py
+++ b/ansible_collections/community/zabbix/plugins/modules/zabbix_mediatype.py
@@ -155,6 +155,15 @@ options:
- SSL verify peer for SMTP.
- Can be specified when I(smtp_security=STARTTLS) or I(smtp_security=SSL/TLS)
default: false
+ content_type:
+ type: "str"
+ description:
+ - Can be used when I(type=email).
+ - Message format.
+ choices:
+ - plaintext
+ - html
+ default: html
message_text_limit:
type: "str"
description:
@@ -525,6 +534,7 @@ class MediaTypeModule(ZabbixBase):
smtp_authentication=truths.get(str(self._module.params["smtp_authentication"])),
smtp_verify_host=truths.get(str(self._module.params["smtp_verify_host"])),
smtp_verify_peer=truths.get(str(self._module.params["smtp_verify_peer"])),
+ content_type={"plaintext": "0", "html": "1"}.get(str(self._module.params["content_type"])),
username=self._module.params["username"],
passwd=self._module.params["password"]
))
@@ -693,6 +703,7 @@ def main():
smtp_authentication=dict(type="bool", default=False, required=False),
smtp_verify_host=dict(type="bool", default=False, required=False),
smtp_verify_peer=dict(type="bool", default=False, required=False),
+ content_type=dict(type="str", choices=["plaintext", "html"], default="html", required=False),
# EZ Text
message_text_limit=dict(type="str", required=False, choices=["USA", "Canada"]),
# Webhook
diff --git a/ansible_collections/community/zabbix/plugins/modules/zabbix_service_info.py b/ansible_collections/community/zabbix/plugins/modules/zabbix_service_info.py
new file mode 100644
index 000000000..1984777d3
--- /dev/null
+++ b/ansible_collections/community/zabbix/plugins/modules/zabbix_service_info.py
@@ -0,0 +1,149 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+# Copyright: (c) 2021, D3DeFi
+# 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: zabbix_service_info
+short_description: Gather information about Zabbix service
+author:
+ - Kanstantsin Maksimau (@us3241)
+description:
+ - This module allows you to obtain detailed information about configured zabbix service.
+requirements:
+ - "python >= 3.9"
+options:
+ service_name:
+ description:
+ - Name of the Zabbix service.
+ required: true
+ type: str
+extends_documentation_fragment:
+- community.zabbix.zabbix
+
+"""
+
+EXAMPLES = """
+# If you want to use Username and Password to be authenticated by Zabbix Server
+- name: Set credentials to access Zabbix Server API
+ ansible.builtin.set_fact:
+ ansible_user: Admin
+ ansible_httpapi_pass: zabbix
+
+# If you want to use API token to be authenticated by Zabbix Server
+# https://www.zabbix.com/documentation/current/en/manual/web_interface/frontend_sections/administration/general#api-tokens
+- name: Set API token
+ ansible.builtin.set_fact:
+ ansible_zabbix_auth_key: 8ec0d52432c15c91fcafe9888500cf9a607f44091ab554dbee860f6b44fac895
+
+- name: Get zabbix service info
+ # set task level variables as we change ansible_connection plugin here
+ vars:
+ ansible_network_os: community.zabbix.zabbix
+ ansible_connection: httpapi
+ ansible_httpapi_port: 443
+ ansible_httpapi_use_ssl: true
+ ansible_httpapi_validate_certs: false
+ ansible_zabbix_url_path: "zabbixeu" # If Zabbix WebUI runs on non-default (zabbix) path ,e.g. http://<FQDN>/zabbixeu
+ ansible_host: zabbix-example-fqdn.org
+ community.zabbix.zabbix_service_info:
+ service_name: zbx01.example.com
+"""
+
+RETURN = """
+zabbix_service:
+ description: example
+ returned: always
+ type: dict
+ sample: {
+ "algorithm": "2",
+ "children": [
+ {
+ "algorithm": "0",
+ "created_at": "1712743194",
+ "description": "",
+ "name": "example children",
+ "propagation_rule": "0",
+ "propagation_value": "0",
+ "readonly": false,
+ "serviceid": "81",
+ "sortorder": "0",
+ "status": "-1",
+ "uuid": "ce6e1a3784a547b48ee6707f6e061102",
+ "weight": "0"
+ }
+ ],
+ "created_at": "1709717864",
+ "description": "",
+ "name": "example service",
+ "parents": [],
+ "problem_tags": [],
+ "propagation_rule": "0",
+ "propagation_value": "0",
+ "readonly": false,
+ "serviceid": "51",
+ "sortorder": "0",
+ "status": "-1",
+ "status_rules": [],
+ "tags": [],
+ "uuid": "420e48b363fe473c95288c817031447f",
+ "weight": "0"
+ }
+"""
+
+
+from ansible.module_utils.basic import AnsibleModule
+
+from ansible_collections.community.zabbix.plugins.module_utils.base import ZabbixBase
+import ansible_collections.community.zabbix.plugins.module_utils.helpers as zabbix_utils
+
+
+class Service(ZabbixBase):
+
+ def get_service(self, name):
+ result = {}
+ params = {
+ "filter": {
+ "name": name
+ },
+ "output": "extend",
+ "selectParents": "extend",
+ "selectTags": "extend",
+ "selectProblemTags": "extend",
+ "selectChildren": "extend",
+ "selectStatusRules": "extend"
+ }
+
+ try:
+ result = self._zapi.service.get(params)
+ except Exception as e:
+ self._module.fail_json(msg="Failed to get service information: %s" % e)
+
+ return result[0] if result else {}
+
+
+def main():
+ argument_spec = zabbix_utils.zabbix_common_argument_spec()
+ argument_spec.update(dict(
+ service_name=dict(type="str", required=True),
+ ))
+
+ module = AnsibleModule(
+ argument_spec=argument_spec,
+ supports_check_mode=True
+ )
+
+ name = module.params["service_name"]
+
+ service = Service(module)
+ result = service.get_service(name)
+ module.exit_json(changed=False, zabbix_service=result)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/ansible_collections/community/zabbix/plugins/modules/zabbix_template.py b/ansible_collections/community/zabbix/plugins/modules/zabbix_template.py
index a773790aa..f2c19c33c 100644
--- a/ansible_collections/community/zabbix/plugins/modules/zabbix_template.py
+++ b/ansible_collections/community/zabbix/plugins/modules/zabbix_template.py
@@ -33,17 +33,21 @@ options:
description:
- JSON dump of templates to import.
- Multiple templates can be imported this way.
- - Mutually exclusive with I(template_name) and I(template_xml).
+ - Mutually exclusive with I(template_name) and I(template_xml) and I(template_yaml).
required: false
type: json
template_xml:
description:
- XML dump of templates to import.
- Multiple templates can be imported this way.
- - You are advised to pass XML structure matching the structure used by your version of Zabbix server.
- - Custom XML structure can be imported as long as it is valid, but may not yield consistent idempotent
- results on subsequent runs.
- - Mutually exclusive with I(template_name) and I(template_json).
+ - Mutually exclusive with I(template_name) and I(template_json) and I(template_yaml).
+ required: false
+ type: str
+ template_yaml:
+ description:
+ - Context of exported templates file to import.
+ - Multiple templates can be imported this way.
+ - Mutually exclusive with I(template_name) and I(template_json) and I(template_xml).
required: false
type: str
template_groups:
@@ -288,7 +292,6 @@ RETURN = r"""
import json
import traceback
import re
-import xml.etree.ElementTree as ET
from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils._text import to_native
@@ -342,35 +345,84 @@ class Template(ZabbixBase):
self._zapi.template.create(new_template)
- def check_template_changed(self, template_ids, template_groups, link_templates, clear_templates,
- template_macros, template_tags, template_content, template_type):
- """Compares template parameters to already existing values if any are found.
+ def import_compare(self, template_content, template_type):
+ """template_content has same structure as Zabbix uses (e.g. it was optimally exported via Zabbix GUI or API)"""
- template_json - JSON structures are compared as deep sorted dictionaries,
- template_xml - XML structures are compared as strings, but filtered and formatted first,
- If none above is used, all the other arguments are compared to their existing counterparts
- retrieved from Zabbix API."""
changed = False
- # Compare filtered and formatted XMLs strings for any changes. It is expected that provided
- # XML has same structure as Zabbix uses (e.g. it was optimally exported via Zabbix GUI or API)
- if template_content is not None and template_type == "xml":
- existing_template = self.dump_template(template_ids, template_type="xml")
-
- if self.filter_xml_template(template_content) != self.filter_xml_template(existing_template):
- changed = True
+ if template_content is not None:
+ update_rules = {
+ "discoveryRules": {
+ "createMissing": True,
+ "updateExisting": True,
+ "deleteMissing": True
+ },
+ "graphs": {
+ "createMissing": True,
+ "updateExisting": True,
+ "deleteMissing": True
+ },
+ "host_groups": {
+ "createMissing": True
+ },
+ "httptests": {
+ "createMissing": True,
+ "updateExisting": True,
+ "deleteMissing": True
+ },
+ "items": {
+ "createMissing": True,
+ "updateExisting": True,
+ "deleteMissing": True
+ },
+ "templates": {
+ "createMissing": True,
+ "updateExisting": True
+ },
+ "template_groups": {
+ "createMissing": True
+ },
+ "templateLinkage": {
+ "createMissing": True
+ },
+ "templateScreens": {
+ "createMissing": True,
+ "updateExisting": True,
+ "deleteMissing": True
+ },
+ "triggers": {
+ "createMissing": True,
+ "updateExisting": True,
+ "deleteMissing": True
+ },
+ "valueMaps": {
+ "createMissing": True,
+ "updateExisting": True
+ }
+ }
- return changed
+ try:
+ update_rules["templateLinkage"]["deleteMissing"] = True
+ update_rules["templateDashboards"] = update_rules.pop("templateScreens")
+
+ # before Zabbix 6.2 host_groups and template_group are joined into groups parameter
+ if LooseVersion(self._zbx_api_version) < LooseVersion("6.2"):
+ update_rules["groups"] = {"createMissing": True}
+ update_rules.pop("host_groups", None)
+ update_rules.pop("template_groups", None)
+ importcompare = {"format": template_type, "source": template_content, "rules": update_rules}
+ compare_result = self._zapi.configuration.importcompare(importcompare)
+ if len(compare_result) != 0:
+ changed = True
+ return changed
+ except Exception as e:
+ self._module.fail_json(msg="Unable to compare template", details=to_native(e),
+ exception=traceback.format_exc())
+ def check_template_changed(self, template_ids, template_groups, link_templates, clear_templates,
+ template_macros, template_tags):
+ """Compare template with user provided all parameters via module options"""
+ changed = False
existing_template = self.dump_template(template_ids, template_type="json")
- # Compare JSON objects as deep sorted python dictionaries
- if template_content is not None and template_type == "json":
- parsed_template_json = self.load_json_template(template_content)
- if self.diff_template(parsed_template_json, existing_template):
- changed = True
-
- return changed
-
- # If neither template_json or template_xml were used, user provided all parameters via module options
if template_groups is not None:
if LooseVersion(self._zbx_api_version) >= LooseVersion("6.2"):
existing_groups = [g["name"] for g in existing_template["zabbix_export"]["template_groups"]]
@@ -451,81 +503,15 @@ class Template(ZabbixBase):
templateids_list = [t.get("templateid") for t in templateids]
self._zapi.template.delete(templateids_list)
- def ordered_json(self, obj):
- # Deep sort json dicts for comparison
- if isinstance(obj, dict):
- return sorted((k, self.ordered_json(v)) for k, v in obj.items())
- if isinstance(obj, list):
- return sorted(self.ordered_json(x) for x in obj)
- else:
- return obj
-
def dump_template(self, template_ids, template_type="json"):
template_ids_list = [t.get("templateid") for t in template_ids]
try:
dump = self._zapi.configuration.export({"format": template_type, "options": {"templates": template_ids_list}})
- if template_type == "xml":
- xmlroot = ET.fromstring(dump.encode("utf-8"))
- if PY2:
- return str(ET.tostring(xmlroot, encoding="utf-8"))
- else:
- return str(ET.tostring(xmlroot, encoding="utf-8").decode("utf-8"))
- else:
- return self.load_json_template(dump)
+ return self.load_json_template(dump)
except Exception as e:
self._module.fail_json(msg="Unable to export template: %s" % e)
- def diff_template(self, template_json_a, template_json_b):
- # Compare 2 zabbix templates and return True if they differ.
- template_json_a = self.filter_template(template_json_a)
- template_json_b = self.filter_template(template_json_b)
- if self.ordered_json(template_json_a) == self.ordered_json(template_json_b):
- return False
- return True
-
- def filter_template(self, template_json):
- # Filter the template json to contain only the keys we will update
- keep_keys = set(["graphs", "templates", "triggers", "value_maps"])
- unwanted_keys = set(template_json["zabbix_export"]) - keep_keys
- for unwanted_key in unwanted_keys:
- del template_json["zabbix_export"][unwanted_key]
-
- # Versions older than 2.4 do not support description field within template
- desc_not_supported = False
-
- # Filter empty attributes from template object to allow accurate comparison
- for template in template_json["zabbix_export"]["templates"]:
- for key in list(template.keys()):
- if not template[key] or (key == "description" and desc_not_supported):
- template.pop(key)
-
- return template_json
-
- def filter_xml_template(self, template_xml):
- """Filters out keys from XML template that may wary between exports (e.g date or version) and
- keys that are not imported via this module.
-
- It is advised that provided XML template exactly matches XML structure used by Zabbix"""
- # Strip last new line and convert string to ElementTree
- parsed_xml_root = self.load_xml_template(template_xml.strip())
- keep_keys = ["graphs", "templates", "triggers", "value_maps"]
-
- # Remove unwanted XML nodes
- for node in list(parsed_xml_root):
- if node.tag not in keep_keys:
- parsed_xml_root.remove(node)
-
- # Filter empty attributes from template objects to allow accurate comparison
- for template in list(parsed_xml_root.find("templates")):
- for element in list(template):
- if element.text is None and len(list(element)) == 0:
- template.remove(element)
-
- # Filter new lines and indentation
- xml_root_text = list(line.strip() for line in ET.tostring(parsed_xml_root, encoding="utf8", method="xml").decode().split("\n"))
- return "".join(xml_root_text)
-
def load_json_template(self, template_json):
try:
jsondoc = json.loads(template_json)
@@ -533,12 +519,6 @@ class Template(ZabbixBase):
except ValueError as e:
self._module.fail_json(msg="Invalid JSON provided", details=to_native(e), exception=traceback.format_exc())
- def load_xml_template(self, template_xml):
- try:
- return ET.fromstring(template_xml)
- except ET.ParseError as e:
- self._module.fail_json(msg="Invalid XML provided", details=to_native(e), exception=traceback.format_exc())
-
def import_template(self, template_content, template_type="json"):
if self._module.check_mode:
self._module.exit_json(changed=True)
@@ -624,6 +604,7 @@ def main():
template_name=dict(type="str", required=False),
template_json=dict(type="json", required=False),
template_xml=dict(type="str", required=False),
+ template_yaml=dict(type="str", required=False),
template_groups=dict(type="list", required=False, elements="str"),
link_templates=dict(type="list", required=False, elements="str"),
clear_templates=dict(type="list", required=False, elements="str"),
@@ -648,10 +629,10 @@ def main():
module = AnsibleModule(
argument_spec=argument_spec,
required_one_of=[
- ["template_name", "template_json", "template_xml"]
+ ["template_name", "template_json", "template_xml", "template_yaml"]
],
mutually_exclusive=[
- ["template_name", "template_json", "template_xml"]
+ ["template_name", "template_json", "template_xml", "template_yaml"]
],
required_if=[
["state", "absent", ["template_name"]]
@@ -662,6 +643,7 @@ def main():
template_name = module.params["template_name"]
template_json = module.params["template_json"]
template_xml = module.params["template_xml"]
+ template_yaml = module.params["template_yaml"]
template_groups = module.params["template_groups"]
link_templates = module.params["link_templates"]
clear_templates = module.params["clear_templates"]
@@ -673,23 +655,23 @@ def main():
# Identify template names for IDs retrieval
# Template names are expected to reside in ["zabbix_export"]["templates"][*]["template"] for both data types
- template_content, template_type = None, None
+ template_content, template_type, template_ids = None, None, None
+
if template_json is not None:
template_type = "json"
template_content = template_json
- json_parsed = template.load_json_template(template_content)
- template_names = list(t["template"] for t in json_parsed["zabbix_export"]["templates"])
elif template_xml is not None:
template_type = "xml"
template_content = template_xml
- xml_parsed = template.load_xml_template(template_content)
- template_names = list(t.find("template").text for t in list(xml_parsed.find("templates")))
+
+ elif template_yaml is not None:
+ template_type = "yaml"
+ template_content = template_yaml
else:
template_names = [template_name]
-
- template_ids = template.get_template_ids(template_names)
+ template_ids = template.get_template_ids(template_names)
if state == "absent":
if not template_ids:
@@ -699,58 +681,63 @@ def main():
module.exit_json(changed=True, result="Successfully deleted template %s" % template_name)
elif state == "present":
- # Load all subelements for template that were provided by user
- group_ids = None
- if template_groups is not None:
- group_ids = template.get_group_ids_by_group_names(template_groups)
-
- link_template_ids = None
- if link_templates is not None:
- link_template_ids = template.get_template_ids(link_templates)
-
- clear_template_ids = None
- if clear_templates is not None:
- clear_template_ids = template.get_template_ids(clear_templates)
-
- if template_macros is not None:
- # Zabbix configuration.export does not differentiate python types (numbers are returned as strings)
- for macroitem in template_macros:
- for key in macroitem:
- macroitem[key] = str(macroitem[key])
-
- if template_tags is not None:
- for tagitem in template_tags:
- for key in tagitem:
- tagitem[key] = str(tagitem[key])
-
- if not template_ids:
- # Assume new templates are being added when no ID"s were found
- if template_content is not None:
- template.import_template(template_content, template_type)
- module.exit_json(changed=True, result="Template import successful")
-
+ if template_content is not None:
+ changed = template.import_compare(template_content, template_type)
+ if not changed:
+ module.exit_json(changed=changed, result="Template is up-to date")
else:
+ if module.check_mode:
+ module.exit_json(changed=changed)
+ template.import_template(template_content, template_type)
+ module.exit_json(changed=changed, result="Template import successful")
+ else:
+ # Load all subelements for template that were provided by user
+ group_ids = None
+ if template_groups is not None:
+ group_ids = template.get_group_ids_by_group_names(template_groups)
+
+ link_template_ids = None
+ if link_templates is not None:
+ link_template_ids = template.get_template_ids(link_templates)
+
+ clear_template_ids = None
+ if clear_templates is not None:
+ clear_template_ids = template.get_template_ids(clear_templates)
+
+ if template_macros is not None:
+ # Zabbix configuration.export does not differentiate python types (numbers are returned as strings)
+ for macroitem in template_macros:
+ for key in macroitem:
+ macroitem[key] = str(macroitem[key])
+
+ if template_tags is not None:
+ for tagitem in template_tags:
+ for key in tagitem:
+ tagitem[key] = str(tagitem[key])
+
+ if not template_ids:
+ # Assume new templates are being added when no ID"s were found
if group_ids is None:
module.fail_json(msg="template_groups are required when creating a new Zabbix template")
template.add_template(template_name, group_ids, link_template_ids, template_macros, template_tags)
module.exit_json(changed=True, result="Successfully added template: %s" % template_name)
- else:
- changed = template.check_template_changed(template_ids, template_groups, link_templates, clear_templates,
- template_macros, template_tags, template_content, template_type)
+ else:
+ changed = template.check_template_changed(template_ids, template_groups, link_templates, clear_templates,
+ template_macros, template_tags)
- if module.check_mode:
- module.exit_json(changed=changed)
+ if module.check_mode:
+ module.exit_json(changed=changed)
- if changed:
- if template_type is not None:
- template.import_template(template_content, template_type)
- else:
- template.update_template(template_ids, group_ids, link_template_ids, clear_template_ids,
- template_macros, template_tags)
+ if changed:
+ if template_type is not None:
+ template.import_template(template_content, template_type)
+ else:
+ template.update_template(template_ids, group_ids, link_template_ids, clear_template_ids,
+ template_macros, template_tags)
- module.exit_json(changed=changed, result="Template successfully updated")
+ module.exit_json(changed=changed, result="Template successfully updated")
if __name__ == "__main__":
diff --git a/ansible_collections/community/zabbix/plugins/modules/zabbix_templategroup.py b/ansible_collections/community/zabbix/plugins/modules/zabbix_templategroup.py
index 7ab39d8fc..a7050f226 100644
--- a/ansible_collections/community/zabbix/plugins/modules/zabbix_templategroup.py
+++ b/ansible_collections/community/zabbix/plugins/modules/zabbix_templategroup.py
@@ -67,7 +67,7 @@ EXAMPLES = r'''
ansible_httpapi_validate_certs: false
ansible_zabbix_url_path: 'zabbixeu' # If Zabbix WebUI runs on non-default (zabbix) path ,e.g. http://<FQDN>/zabbixeu
ansible_host: zabbix-example-fqdn.org
- community.zabbix.zabbix_group:
+ community.zabbix.zabbix_templategroup:
state: present
template_groups:
- Example group1
@@ -84,7 +84,7 @@ EXAMPLES = r'''
ansible_httpapi_validate_certs: false
ansible_zabbix_url_path: 'zabbixeu' # If Zabbix WebUI runs on non-default (zabbix) path ,e.g. http://<FQDN>/zabbixeu
ansible_host: zabbix-example-fqdn.org
- community.zabbix.zabbix_group:
+ community.zabbix.zabbix_templategroup:
state: present
template_groups:
- Example group1
diff --git a/ansible_collections/community/zabbix/roles/zabbix_agent/README.md b/ansible_collections/community/zabbix/roles/zabbix_agent/README.md
index aa73fab3a..fe4a601b3 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_agent/README.md
+++ b/ansible_collections/community/zabbix/roles/zabbix_agent/README.md
@@ -102,6 +102,7 @@ See the following list of supported Operating systems with the Zabbix releases:
| Debian 11 bullseye | V | V | V |
| Debian 10 buster | V | V | V |
+You can bypass this matrix by setting `enable_version_check: false`
# Getting started
@@ -136,6 +137,8 @@ The following is an overview of all available configuration default for this rol
* `zabbix_agent_disable_repo`: A list of repos to disable during install. Default `epel`.
* `zabbix_repo_deb_url`: The URL to the Zabbix repository. Default `http://repo.zabbix.com/zabbix/{{ zabbix_agent_version }}/{{ ansible_distribution.lower() }}`
* `zabbix_repo_deb_component`: The repository component for Debian installs. Default `main`.
+* `zabbix_repo_deb_gpg_key_url`: The URL to download the Zabbix GPG key from. Default `http://repo.zabbix.com/zabbix-official-repo.key`.
+* `zabbix_repo_deb_include_deb_src`: True, if deb-src should be included in the zabbix.sources entry. Default `true`.
### SElinux
@@ -337,7 +340,7 @@ Keep in mind that using the Zabbix Agent in a Container requires changes to the
## IPMI variables
-* `zabbix_agent_ipmi_authtype`: IPMI authentication algorithm. Possible values are 1 (callback), 2 (user), 3 (operator), 4 (admin), 5 (OEM), with 2 being the API default.
+* `zabbix_agent_ipmi_authtype`: IPMI authentication algorithm. Possible values are -1 (default), 0 (none), 1 (MD2), 2 (MD5), 4 (straight), 5 (OEM), 6 (RMCP+), with -1 being the API default.
* `zabbix_agent_ipmi_password`: IPMI password.
* `zabbix_agent_ipmi_privilege`: IPMI privilege level. Possible values are 1 (callback), 2 (user), 3 (operator), 4 (admin), 5 (OEM), with 2 being the API default.
* `zabbix_agent_ipmi_username`: IPMI username.
diff --git a/ansible_collections/community/zabbix/roles/zabbix_agent/defaults/main.yml b/ansible_collections/community/zabbix/roles/zabbix_agent/defaults/main.yml
index dbd5db5db..12424a6da 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_agent/defaults/main.yml
+++ b/ansible_collections/community/zabbix/roles/zabbix_agent/defaults/main.yml
@@ -26,6 +26,9 @@ zabbix_agent2_deny_key: "{{ zabbix_agent_deny_key }}"
# Selinux related vars
selinux_allow_zabbix_run_sudo: false
+zabbix_repo_deb_gpg_key_url: http://repo.zabbix.com/zabbix-official-repo.key
+zabbix_repo_deb_include_deb_src: true
+
zabbix_agent_install_agent_only: false
zabbix_agent_packages:
- "{{ zabbix_agent_package }}"
@@ -66,6 +69,7 @@ zabbix_repo_yum:
gpgkey: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
state: present
+zabbix_repo_deb_url: "http://repo.zabbix.com/zabbix/{{ zabbix_agent_version }}/{{ ansible_facts.lsb.id | default(ansible_facts['distribution']) | lower }}{% if ansible_facts['architecture'] == 'aarch64' and ansible_facts.lsb.id | default(ansible_facts['distribution']) in ['Debian', 'Ubuntu'] %}-arm64{% endif %}"
zabbix_repo_deb_component: main
# Zabbix API stuff
@@ -165,7 +169,7 @@ zabbix_agent_tls_config:
cert: "4"
# IPMI settings
-zabbix_agent_ipmi_authtype: 2
+zabbix_agent_ipmi_authtype: -1
zabbix_agent_ipmi_password:
zabbix_agent_ipmi_privilege: 2
zabbix_agent_ipmi_username:
diff --git a/ansible_collections/community/zabbix/roles/zabbix_agent/molecule/with-server/prepare.yml b/ansible_collections/community/zabbix/roles/zabbix_agent/molecule/with-server/prepare.yml
index 582006d4e..e95cc9ad7 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_agent/molecule/with-server/prepare.yml
+++ b/ansible_collections/community/zabbix/roles/zabbix_agent/molecule/with-server/prepare.yml
@@ -75,6 +75,7 @@
hosts: docker
tasks:
- name: "Download Docker CE repo file"
+ when: not ansible_check_mode # Because get_url always has changed status in check_mode.
ansible.builtin.get_url:
url: https://download.docker.com/linux/centos/docker-ce.repo
dest: /etc/yum.repos.d/docker-ce.repo
diff --git a/ansible_collections/community/zabbix/roles/zabbix_agent/tasks/Debian.yml b/ansible_collections/community/zabbix/roles/zabbix_agent/tasks/Debian.yml
index 6ded0ba03..92d56b179 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_agent/tasks/Debian.yml
+++ b/ansible_collections/community/zabbix/roles/zabbix_agent/tasks/Debian.yml
@@ -8,33 +8,6 @@
tags:
- always
-- name: "Debian | Installing lsb-release"
- ansible.builtin.apt:
- pkg: lsb-release
- update_cache: true
- cache_valid_time: 3600
- force: true
- state: present
- environment:
- http_proxy: "{{ zabbix_http_proxy | default(None) | default(omit) }}"
- https_proxy: "{{ zabbix_https_proxy | default(None) | default(omit) }}"
- become: true
- tags:
- - install
-
-- name: "Debian | Update ansible_lsb fact"
- ansible.builtin.setup:
- gather_subset:
- - lsb
-
-- name: "Debian | Repo URL"
- ansible.builtin.set_fact:
- zabbix_repo_deb_url: "{{ _zabbix_repo_deb_url }}/{{ ansible_lsb.id.lower() }}{{ '-arm64' if ansible_machine == 'aarch64' and ansible_lsb.id == 'debian' else ''}}"
- when:
- - zabbix_repo_deb_url is undefined
- tags:
- - always
-
- name: "Debian | Installing gnupg"
ansible.builtin.apt:
pkg: gnupg
@@ -65,8 +38,9 @@
(ansible_distribution == "Debian" and ansible_distribution_major_version < "12")
- name: "Debian | Download gpg key"
+ when: not ansible_check_mode # Because get_url always has changed status in check_mode.
ansible.builtin.get_url:
- url: http://repo.zabbix.com/zabbix-official-repo.key
+ url: "{{ zabbix_repo_deb_gpg_key_url }}"
dest: "{{ zabbix_gpg_key }}"
mode: "0644"
force: true
@@ -84,7 +58,7 @@
group: root
mode: 0644
content: |
- Types: deb deb-src
+ Types: deb{{ ' deb-src' if zabbix_repo_deb_include_deb_src }}
Enabled: yes
URIs: {{ zabbix_repo_deb_url }}
Suites: {{ ansible_distribution_release }}
diff --git a/ansible_collections/community/zabbix/roles/zabbix_agent/tasks/main.yml b/ansible_collections/community/zabbix/roles/zabbix_agent/tasks/main.yml
index f5f87d18f..c5fd06480 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_agent/tasks/main.yml
+++ b/ansible_collections/community/zabbix/roles/zabbix_agent/tasks/main.yml
@@ -12,16 +12,12 @@
tags:
- always
-- name: Set More Variables
- ansible.builtin.set_fact:
- zabbix_valid_version: "{{ zabbix_agent_version|float in zabbix_valid_agent_versions[ansible_distribution_major_version] }}"
- tags:
- - always
-
-- name: Stopping Install of Invalid Version
- ansible.builtin.fail:
- msg: Zabbix version {{ zabbix_agent_version }} is not supported on {{ ansible_distribution }} {{ ansible_distribution_major_version }}
- when: not zabbix_valid_version
+- name: Check that version is supported
+ when: enable_version_check | default(true) | bool
+ ansible.builtin.assert:
+ that:
+ - "{{ zabbix_agent_version|float in zabbix_valid_agent_versions[ansible_distribution_major_version] }}"
+ fail_msg: Zabbix version {{ zabbix_agent_version }} is not supported on {{ ansible_distribution }} {{ ansible_distribution_major_version }}
tags:
- always
diff --git a/ansible_collections/community/zabbix/roles/zabbix_agent/tasks/userparameter.yml b/ansible_collections/community/zabbix/roles/zabbix_agent/tasks/userparameter.yml
index a80be1736..d61e3899f 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_agent/tasks/userparameter.yml
+++ b/ansible_collections/community/zabbix/roles/zabbix_agent/tasks/userparameter.yml
@@ -7,6 +7,7 @@
notify:
- restart win zabbix agent
with_items: "{{ zabbix_agent_userparameters }}"
+ when: item.scripts_dir is not defined
- name: "Windows | Installing user-defined scripts"
ansible.windows.win_copy:
@@ -33,6 +34,7 @@
- restart mac zabbix agent
become: true
with_items: "{{ zabbix_agent_userparameters }}"
+ when: item.scripts_dir is not defined
- name: "Installing user-defined scripts"
ansible.builtin.copy:
@@ -66,6 +68,7 @@
- restart mac zabbix agent
become: true
with_items: "{{ zabbix_agent_userparameters }}"
+ when: item.scripts_dir is not defined
- name: "Installing user-defined scripts"
ansible.builtin.copy:
diff --git a/ansible_collections/community/zabbix/roles/zabbix_agent/vars/Debian.yml b/ansible_collections/community/zabbix/roles/zabbix_agent/vars/Debian.yml
index 4a65dfbeb..4a88411f1 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_agent/vars/Debian.yml
+++ b/ansible_collections/community/zabbix/roles/zabbix_agent/vars/Debian.yml
@@ -44,5 +44,4 @@ zabbix_valid_agent_versions:
- 6.0
debian_keyring_path: /etc/apt/keyrings/
-zabbix_gpg_key: "{{ debian_keyring_path }}/zabbix-official-repo.asc"
-_zabbix_repo_deb_url: "http://repo.zabbix.com/zabbix/{{ zabbix_agent_version }}"
+zabbix_gpg_key: "{{ debian_keyring_path }}zabbix-repo.asc"
diff --git a/ansible_collections/community/zabbix/roles/zabbix_javagateway/README.md b/ansible_collections/community/zabbix/roles/zabbix_javagateway/README.md
index 1761c7f8b..47092a6a0 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_javagateway/README.md
+++ b/ansible_collections/community/zabbix/roles/zabbix_javagateway/README.md
@@ -46,6 +46,8 @@ See the following list of supported Operating systems with the Zabbix releases.
| Debian 11 bullseye | V | V | V |
| Debian 10 buster | V | V | V |
+You can bypass this matrix by setting `enable_version_check: false`
+
# Role Variables
## Main variables
@@ -62,6 +64,8 @@ The `zabbix_javagateway_version` is optional. The latest available major.minor v
* `zabbix_javagateway_conf_mode`: Default: `0644`. The "mode" for the Zabbix configuration file.
* `zabbix_repo_deb_url`: The URL to the Zabbix repository. Default `http://repo.zabbix.com/zabbix/{{ zabbix_agent_version }}/{{ ansible_distribution.lower() }}`
* `zabbix_repo_deb_component`: The repository component for Debian installs. Default `main`.
+* `zabbix_repo_deb_gpg_key_url`: The URL to download the Zabbix GPG key from. Default `http://repo.zabbix.com/zabbix-official-repo.key`.
+* `zabbix_repo_deb_include_deb_src`: True, if deb-src should be included in the zabbix.sources entry. Default `true`.
### Java Gatewaty
diff --git a/ansible_collections/community/zabbix/roles/zabbix_javagateway/defaults/main.yml b/ansible_collections/community/zabbix/roles/zabbix_javagateway/defaults/main.yml
index 4356f61a4..d7f659648 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_javagateway/defaults/main.yml
+++ b/ansible_collections/community/zabbix/roles/zabbix_javagateway/defaults/main.yml
@@ -25,9 +25,13 @@ zabbix_repo_yum:
gpgkey: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
state: present
+zabbix_repo_deb_url: "http://repo.zabbix.com/zabbix/{{ zabbix_javagateway_version }}/{{ ansible_facts.lsb.id | default(ansible_facts['distribution']) | lower }}{% if ansible_facts['architecture'] == 'aarch64' and ansible_facts.lsb.id | default(ansible_facts['distribution']) in ['Debian', 'Ubuntu'] %}-arm64{% endif %}"
zabbix_repo_deb_component: main
zabbix_javagateway_pidfile: /run/zabbix/zabbix_java_gateway.pid
zabbix_javagateway_listenip: 0.0.0.0
zabbix_javagateway_listenport: 10052
zabbix_javagateway_startpollers: 5
+
+zabbix_repo_deb_gpg_key_url: http://repo.zabbix.com/zabbix-official-repo.key
+zabbix_repo_deb_include_deb_src: true
diff --git a/ansible_collections/community/zabbix/roles/zabbix_javagateway/tasks/Debian.yml b/ansible_collections/community/zabbix/roles/zabbix_javagateway/tasks/Debian.yml
index 4c4cff06d..ad762aa3b 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_javagateway/tasks/Debian.yml
+++ b/ansible_collections/community/zabbix/roles/zabbix_javagateway/tasks/Debian.yml
@@ -5,33 +5,6 @@
tags:
- always
-- name: "Debian | Installing lsb-release"
- ansible.builtin.apt:
- pkg: lsb-release
- update_cache: true
- cache_valid_time: 3600
- force: true
- state: present
- environment:
- http_proxy: "{{ zabbix_http_proxy | default(None) | default(omit) }}"
- https_proxy: "{{ zabbix_https_proxy | default(None) | default(omit) }}"
- become: true
- tags:
- - install
-
-- name: "Debian | Update ansible_lsb fact"
- ansible.builtin.setup:
- gather_subset:
- - lsb
-
-- name: "Debian | Repo URL"
- ansible.builtin.set_fact:
- zabbix_repo_deb_url: "{{ _zabbix_repo_deb_url }}/{{ ansible_lsb.id.lower() }}{{ '-arm64' if ansible_machine == 'aarch64' and ansible_lsb.id == 'debian' else ''}}"
- when:
- - zabbix_repo_deb_url is undefined
- tags:
- - always
-
# In releases older than Debian 12 and Ubuntu 22.04, /etc/apt/keyrings does not exist by default.
# It SHOULD be created with permissions 0755 if it is needed and does not already exist.
# See: https://wiki.debian.org/DebianRepository/UseThirdParty
@@ -46,11 +19,15 @@
(ansible_distribution == "Debian" and ansible_distribution_major_version < "12")
- name: "Debian | Download gpg key"
+ when: not ansible_check_mode # Because get_url always has changed status in check_mode.
ansible.builtin.get_url:
- url: http://repo.zabbix.com/zabbix-official-repo.key
+ url: "{{ zabbix_repo_deb_gpg_key_url }}"
dest: "{{ zabbix_gpg_key }}"
mode: "0644"
force: true
+ environment:
+ http_proxy: "{{ zabbix_http_proxy | default(None) | default(omit) }}"
+ https_proxy: "{{ zabbix_https_proxy | default(None) | default(omit) }}"
become: true
tags:
- install
@@ -62,7 +39,7 @@
group: root
mode: 0644
content: |
- Types: deb deb-src
+ Types: deb{{ ' deb-src' if zabbix_repo_deb_include_deb_src }}
Enabled: yes
URIs: {{ zabbix_repo_deb_url }}
Suites: {{ ansible_distribution_release }}
diff --git a/ansible_collections/community/zabbix/roles/zabbix_javagateway/tasks/main.yml b/ansible_collections/community/zabbix/roles/zabbix_javagateway/tasks/main.yml
index 6b56d43d3..aeeecbc8f 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_javagateway/tasks/main.yml
+++ b/ansible_collections/community/zabbix/roles/zabbix_javagateway/tasks/main.yml
@@ -13,16 +13,12 @@
tags:
- always
-- name: Set More Variables
- ansible.builtin.set_fact:
- zabbix_valid_version: "{{ zabbix_javagateway_version|float in zabbix_valid_javagateway_versions[ansible_distribution_major_version] }}"
- tags:
- - always
-
-- name: Stopping Install of Invalid Version
- ansible.builtin.fail:
- msg: Zabbix version {{ zabbix_javagateway_version }} is not supported on {{ ansible_distribution }} {{ ansible_distribution_major_version }}
- when: not zabbix_valid_version
+- name: Check that version is supported
+ when: enable_version_check | default(true) | bool
+ ansible.builtin.assert:
+ that:
+ - "{{ zabbix_javagateway_version|float in zabbix_valid_javagateway_versions[ansible_distribution_major_version] }}"
+ fail_msg: Zabbix version {{ zabbix_javagateway_version }} is not supported on {{ ansible_distribution }} {{ ansible_distribution_major_version }}
tags:
- always
diff --git a/ansible_collections/community/zabbix/roles/zabbix_javagateway/vars/Debian.yml b/ansible_collections/community/zabbix/roles/zabbix_javagateway/vars/Debian.yml
index 2253f5b7b..7c36d2d3a 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_javagateway/vars/Debian.yml
+++ b/ansible_collections/community/zabbix/roles/zabbix_javagateway/vars/Debian.yml
@@ -26,5 +26,4 @@ zabbix_valid_javagateway_versions:
- 6.0
debian_keyring_path: /etc/apt/keyrings/
-zabbix_gpg_key: "{{ debian_keyring_path }}/zabbix-official-repo.asc"
-_zabbix_repo_deb_url: "http://repo.zabbix.com/zabbix/{{ zabbix_javagateway_version }}"
+zabbix_gpg_key: "{{ debian_keyring_path }}zabbix-repo.asc"
diff --git a/ansible_collections/community/zabbix/roles/zabbix_proxy/README.md b/ansible_collections/community/zabbix/roles/zabbix_proxy/README.md
index baec42155..ee558c8b7 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_proxy/README.md
+++ b/ansible_collections/community/zabbix/roles/zabbix_proxy/README.md
@@ -89,6 +89,8 @@ See the following list of supported Operating systems with the Zabbix releases.
| Debian 11 bullseye | V | V | V |
| Debian 10 buster | V | V | V |
+You can bypass this matrix by setting `enable_version_check: false`
+
# Role Variables
## Main variables
@@ -133,6 +135,9 @@ The following is an overview of all available configuration default for this rol
* `*zabbix_proxy_package_state`: Default: `present`. Can be overridden to `latest` to update packages
* `zabbix_repo_deb_url`: The URL to the Zabbix repository. Default `http://repo.zabbix.com/zabbix/{{ zabbix_proxy_version }}/{{ ansible_distribution.lower() }}`
* `zabbix_repo_deb_component`: The repository component for Debian installs. Default `main`.
+* `zabbix_repo_deb_gpg_key_url`: The URL to download the Zabbix GPG key from. Default `http://repo.zabbix.com/zabbix-official-repo.key`.
+* `zabbix_repo_deb_include_deb_src`: True, if deb-src should be included in the zabbix.sources entry. Default `true`.
+
### SElinux
* `zabbix_proxy_selinux`: Default: `False`. Enables an SELinux policy so that the Proxy will run.
diff --git a/ansible_collections/community/zabbix/roles/zabbix_proxy/defaults/main.yml b/ansible_collections/community/zabbix/roles/zabbix_proxy/defaults/main.yml
index f46c9c64e..b2b74ebec 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_proxy/defaults/main.yml
+++ b/ansible_collections/community/zabbix/roles/zabbix_proxy/defaults/main.yml
@@ -41,6 +41,7 @@ zabbix_proxy_version_minor: "*"
# Yum/APT Variables
zabbix_repo_yum_schema: https
zabbix_repo_yum_gpgcheck: 0
+zabbix_repo_deb_url: "http://repo.zabbix.com/zabbix/{{ zabbix_proxy_version }}/{{ ansible_facts.lsb.id | default(ansible_facts['distribution']) | lower }}{% if ansible_facts['architecture'] == 'aarch64' and ansible_facts.lsb.id | default(ansible_facts['distribution']) in ['Debian', 'Ubuntu'] %}-arm64{% endif %}"
zabbix_repo_deb_component: main
zabbix_proxy_disable_repo:
- epel
@@ -61,6 +62,8 @@ zabbix_repo_yum:
state: present
zabbix_proxy_apt_priority:
zabbix_proxy_package_state: present
+zabbix_repo_deb_gpg_key_url: http://repo.zabbix.com/zabbix-official-repo.key
+zabbix_repo_deb_include_deb_src: true
# Proxy Configuration Variables (Only ones with role provided defaults)
zabbix_proxy_allowroot: 0
diff --git a/ansible_collections/community/zabbix/roles/zabbix_proxy/tasks/Debian.yml b/ansible_collections/community/zabbix/roles/zabbix_proxy/tasks/Debian.yml
index 8e27e7d27..bef68b27a 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_proxy/tasks/Debian.yml
+++ b/ansible_collections/community/zabbix/roles/zabbix_proxy/tasks/Debian.yml
@@ -7,33 +7,6 @@
tags:
- always
-- name: "Debian | Installing lsb-release"
- ansible.builtin.apt:
- pkg: lsb-release
- update_cache: true
- cache_valid_time: 3600
- force: true
- state: present
- environment:
- http_proxy: "{{ zabbix_http_proxy | default(None) | default(omit) }}"
- https_proxy: "{{ zabbix_https_proxy | default(None) | default(omit) }}"
- become: true
- tags:
- - install
-
-- name: "Debian | Update ansible_lsb fact"
- ansible.builtin.setup:
- gather_subset:
- - lsb
-
-- name: "Debian | Repo URL"
- ansible.builtin.set_fact:
- zabbix_repo_deb_url: "{{ _zabbix_repo_deb_url }}/{{ ansible_lsb.id.lower() }}{{ '-arm64' if ansible_machine == 'aarch64' and ansible_lsb.id == 'debian' else ''}}"
- when:
- - zabbix_repo_deb_url is undefined
- tags:
- - always
-
- name: "Debian | Set some facts for Zabbix"
ansible.builtin.set_fact:
datafiles_path: /usr/share/doc/zabbix-sql-scripts/{{ zabbix_proxy_db_long }}
@@ -71,11 +44,15 @@
(ansible_distribution == "Debian" and ansible_distribution_major_version < "12")
- name: "Debian | Download gpg key"
+ when: not ansible_check_mode # Because get_url always has changed status in check_mode.
ansible.builtin.get_url:
- url: http://repo.zabbix.com/zabbix-official-repo.key
+ url: "{{ zabbix_repo_deb_gpg_key_url }}"
dest: "{{ zabbix_gpg_key }}"
mode: "0644"
force: true
+ environment:
+ http_proxy: "{{ zabbix_http_proxy | default(None) | default(omit) }}"
+ https_proxy: "{{ zabbix_https_proxy | default(None) | default(omit) }}"
register: are_zabbix_proxy_dependency_packages_installed
until: are_zabbix_proxy_dependency_packages_installed is succeeded
become: true
@@ -89,7 +66,7 @@
group: root
mode: 0644
content: |
- Types: deb deb-src
+ Types: deb{{ ' deb-src' if zabbix_repo_deb_include_deb_src }}
Enabled: yes
URIs: {{ zabbix_repo_deb_url }}
Suites: {{ ansible_distribution_release }}
diff --git a/ansible_collections/community/zabbix/roles/zabbix_proxy/tasks/main.yml b/ansible_collections/community/zabbix/roles/zabbix_proxy/tasks/main.yml
index f564635b1..1e8831c35 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_proxy/tasks/main.yml
+++ b/ansible_collections/community/zabbix/roles/zabbix_proxy/tasks/main.yml
@@ -15,17 +15,18 @@
- name: Set More Variables
ansible.builtin.set_fact:
zabbix_proxy_db_long: "{{ 'postgresql' if zabbix_proxy_database == 'pgsql' else zabbix_proxy_database }}"
- zabbix_valid_version: "{{ zabbix_proxy_version|float in zabbix_valid_proxy_versions[ansible_distribution_major_version] }}"
zabbix_short_version: "{{ zabbix_proxy_version | regex_replace('\\.', '') }}"
zabbix_proxy_fpinglocation: "{{ zabbix_proxy_fpinglocation if zabbix_proxy_fpinglocation is defined else _zabbix_proxy_fpinglocation}}"
zabbix_proxy_fping6location: "{{ zabbix_proxy_fping6location if zabbix_proxy_fping6location is defined else _zabbix_proxy_fping6location}}"
tags:
- always
-- name: Stopping Install of Invalid Version
- ansible.builtin.fail:
- msg: Zabbix version {{ zabbix_proxy_version }} is not supported on {{ ansible_distribution }} {{ ansible_distribution_major_version }}
- when: not zabbix_valid_version
+- name: Check that version is supported
+ when: enable_version_check | default(true) | bool
+ ansible.builtin.assert:
+ that:
+ - "{{ zabbix_proxy_version|float in zabbix_valid_proxy_versions[ ansible_facts['distribution_major_version'] ] }}"
+ fail_msg: Zabbix version {{ zabbix_proxy_version }} is not supported on {{ ansible_facts['distribution'] }} {{ ansible_facts['distribution_major_version'] }}
tags:
- always
diff --git a/ansible_collections/community/zabbix/roles/zabbix_proxy/vars/Debian.yml b/ansible_collections/community/zabbix/roles/zabbix_proxy/vars/Debian.yml
index cd9527eb2..1362e557e 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_proxy/vars/Debian.yml
+++ b/ansible_collections/community/zabbix/roles/zabbix_proxy/vars/Debian.yml
@@ -51,7 +51,6 @@ mysql_plugin:
"10": mysql_native_password
debian_keyring_path: /etc/apt/keyrings/
-zabbix_gpg_key: "{{ debian_keyring_path }}/zabbix-official-repo.asc"
-_zabbix_repo_deb_url: "http://repo.zabbix.com/zabbix/{{ zabbix_proxy_version }}"
+zabbix_gpg_key: "{{ debian_keyring_path }}zabbix-repo.asc"
_zabbix_proxy_fping6location: /usr/bin/fping6
_zabbix_proxy_fpinglocation: /usr/bin/fping
diff --git a/ansible_collections/community/zabbix/roles/zabbix_server/README.md b/ansible_collections/community/zabbix/roles/zabbix_server/README.md
index f154f4951..9557281c3 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_server/README.md
+++ b/ansible_collections/community/zabbix/roles/zabbix_server/README.md
@@ -86,6 +86,8 @@ See the following list of supported Operating systems with the Zabbix releases:
| Debian 11 bullseye | V | V | V |
| Debian 10 buster | | | V |
+You can bypass this matrix by setting `enable_version_check: false`
+
# Installation
Installing this role is very simple: `ansible-galaxy install community.zabbix.zabbix_server`
@@ -109,6 +111,8 @@ The following is an overview of all available configuration default for this rol
* `zabbix_service_enabled`: Default: `True` Can be overridden to `False` if needed
* `zabbix_repo_deb_url`: The URL to the Zabbix repository. Default `http://repo.zabbix.com/zabbix/{{ zabbix_server_version }}/{{ ansible_distribution.lower() }}`
* `zabbix_repo_deb_component`: The repository component for Debian installs. Default `main`.
+* `zabbix_repo_deb_gpg_key_url`: The URL to download the Zabbix GPG key from. Default `http://repo.zabbix.com/zabbix-official-repo.key`.
+* `zabbix_repo_deb_include_deb_src`: True, if deb-src should be included in the zabbix.sources entry. Default `true`.
### SElinux
diff --git a/ansible_collections/community/zabbix/roles/zabbix_server/defaults/main.yml b/ansible_collections/community/zabbix/roles/zabbix_server/defaults/main.yml
index 6aec202dd..933e0339a 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_server/defaults/main.yml
+++ b/ansible_collections/community/zabbix/roles/zabbix_server/defaults/main.yml
@@ -40,9 +40,8 @@ zabbix_server_version_minor: "*"
zabbix_server_package_state: present
zabbix_repo_yum_gpgcheck: 0
zabbix_repo_yum_schema: https
+zabbix_repo_deb_url: "http://repo.zabbix.com/zabbix/{{ zabbix_server_version }}/{{ ansible_facts.lsb.id | default(ansible_facts['distribution']) | lower }}{% if ansible_facts['architecture'] == 'aarch64' and ansible_facts.lsb.id | default(ansible_facts['distribution']) in ['Debian', 'Ubuntu'] %}-arm64{% endif %}"
zabbix_repo_deb_component: main
-zabbix_server_disable_repo:
- - epel
zabbix_repo_yum:
- name: zabbix
description: Zabbix Official Repository - $basearch
@@ -59,8 +58,9 @@ zabbix_repo_yum:
gpgkey: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
state: present
zabbix_server_apt_priority:
-zabbix_server_install_recommends: true
zabbix_server_conf_mode: 0640
+zabbix_repo_deb_gpg_key_url: http://repo.zabbix.com/zabbix-official-repo.key
+zabbix_repo_deb_include_deb_src: true
# Server Configuration Variables (Only ones with role provided defaults)
zabbix_server_alertscriptspath: /usr/lib/zabbix/alertscripts
diff --git a/ansible_collections/community/zabbix/roles/zabbix_server/tasks/Debian.yml b/ansible_collections/community/zabbix/roles/zabbix_server/tasks/Debian.yml
index ccfe6f121..c7b106614 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_server/tasks/Debian.yml
+++ b/ansible_collections/community/zabbix/roles/zabbix_server/tasks/Debian.yml
@@ -3,40 +3,6 @@
ansible.builtin.set_fact:
zabbix_short_version: "{{ zabbix_server_version | regex_replace('\\.', '') }}"
zabbix_underscore_version: "{{ zabbix_server_version | regex_replace('\\.', '_') }}"
- zabbix_python_prefix: "python{% if ansible_python_version is version('3', '>=') %}3{% endif %}"
- tags:
- - always
-
-- name: "Debian | Installing lsb-release"
- ansible.builtin.apt:
- pkg: lsb-release
- update_cache: true
- cache_valid_time: 3600
- force: true
- state: present
- environment:
- http_proxy: "{{ zabbix_http_proxy | default(None) | default(omit) }}"
- https_proxy: "{{ zabbix_https_proxy | default(None) | default(omit) }}"
- become: true
- tags:
- - install
-
-- name: "Debian | Update ansible_lsb fact"
- ansible.builtin.setup:
- gather_subset:
- - lsb
-
-- name: "Debian | Repo URL"
- ansible.builtin.set_fact:
- zabbix_repo_deb_url: "{{ _zabbix_repo_deb_url }}/{{ ansible_lsb.id.lower() }}{{ '-arm64' if ansible_machine == 'aarch64' and ansible_lsb.id == 'debian' else ''}}"
- when:
- - zabbix_repo_deb_url is undefined
- tags:
- - always
-
-- name: "Debian | Set some facts for Zabbix"
- ansible.builtin.set_fact:
- datafiles_path: /usr/share/zabbix-sql-scripts/{{ 'postgresql' if zabbix_server_database == 'pgsql' else 'mysql' }}
tags:
- always
@@ -70,11 +36,15 @@
(ansible_distribution == "Debian" and ansible_distribution_major_version < "12")
- name: "Debian | Download gpg key"
+ when: not ansible_check_mode # Because get_url always has changed status in check_mode.
ansible.builtin.get_url:
- url: http://repo.zabbix.com/zabbix-official-repo.key
+ url: "{{ zabbix_repo_deb_gpg_key_url }}"
dest: "{{ zabbix_gpg_key }}"
mode: "0644"
force: true
+ environment:
+ http_proxy: "{{ zabbix_http_proxy | default(None) | default(omit) }}"
+ https_proxy: "{{ zabbix_https_proxy | default(None) | default(omit) }}"
register: zabbix_server_repo_files_installed
until: zabbix_server_repo_files_installed is succeeded
become: true
@@ -88,7 +58,7 @@
group: root
mode: 0644
content: |
- Types: deb deb-src
+ Types: deb{{ ' deb-src' if zabbix_repo_deb_include_deb_src }}
Enabled: yes
URIs: {{ zabbix_repo_deb_url }}
Suites: {{ ansible_distribution_release }}
@@ -124,117 +94,3 @@
become: true
tags:
- install
-
-# On certain 18.04 images, such as docker or lxc, dpkg is configured not to
-# install files into paths /usr/share/doc/*
-# Since this is where Zabbix installs its database schemas, we need to allow
-# files to be installed to /usr/share/doc/zabbix*
-- name: "Debian | Check for the dpkg exclude line"
- ansible.builtin.command: grep -F 'path-exclude=/usr/share/doc/*' /etc/dpkg/dpkg.cfg.d/excludes
- register: dpkg_exclude_line
- failed_when: false
- changed_when: false
- check_mode: false
- become: true
- tags:
- - install
-
-- name: "Debian | Allow Zabbix dpkg installs to /usr/share/doc/zabbix*"
- ansible.builtin.lineinfile:
- path: /etc/dpkg/dpkg.cfg.d/excludes
- line: "path-include=/usr/share/doc/zabbix*"
- become: true
- when:
- - dpkg_exclude_line.rc == 0
- tags:
- - install
-
-- name: "Debian | Installing zabbix-server-{{ zabbix_server_database }}"
- ansible.builtin.apt:
- pkg: zabbix-server-{{ zabbix_server_database }}
- state: "{{ zabbix_server_package_state }}"
- update_cache: true
- cache_valid_time: 0
- install_recommends: "{{ zabbix_server_install_recommends }}"
- default_release: "{{ ansible_distribution_release }}"
- environment:
- http_proxy: "{{ zabbix_http_proxy | default(None) | default(omit) }}"
- https_proxy: "{{ zabbix_https_proxy | default(None) | default(omit) }}"
- register: zabbix_server_package_installed
- until: zabbix_server_package_installed is succeeded
- become: true
- tags:
- - install
-
-- name: "Debian | Installing zabbix-sql-scripts"
- ansible.builtin.apt:
- pkg: zabbix-sql-scripts
- state: "{{ zabbix_server_package_state }}"
- update_cache: true
- cache_valid_time: 0
- install_recommends: "{{ zabbix_server_install_recommends }}"
- default_release: "{{ ansible_distribution_release }}"
- environment:
- http_proxy: "{{ zabbix_http_proxy | default(None) | default(omit) }}"
- https_proxy: "{{ zabbix_https_proxy | default(None) | default(omit) }}"
- register: zabbix_server_package_sql_installed
- until: zabbix_server_package_sql_installed is succeeded
- when:
- - zabbix_server_version is version('5.4', '>=')
- become: true
- tags:
- - install
-
-- name: "Debian | Install Database Client Package"
- block:
- - name: "Debian | Install Mysql Client package"
- ansible.builtin.apt:
- name:
- - default-mysql-client
- - "{{ zabbix_python_prefix }}-mysqldb"
- state: present
- environment:
- http_proxy: "{{ zabbix_http_proxy | default(None) | default(omit) }}"
- https_proxy: "{{ zabbix_https_proxy | default(None) | default(omit) }}"
- register: zabbix_server_dependencies_installed
- until: zabbix_server_dependencies_installed is succeeded
- become: true
- when:
- - zabbix_server_database == 'mysql'
- - ansible_distribution_release != "buster"
-
- - name: "Debian 10 | Install Mysql Client package"
- ansible.builtin.apt:
- name:
- - mariadb-client
- - "{{ zabbix_python_prefix }}-mysqldb"
- state: present
- environment:
- http_proxy: "{{ zabbix_http_proxy | default(None) | default(omit) }}"
- https_proxy: "{{ zabbix_https_proxy | default(None) | default(omit) }}"
- register: zabbix_server_dependencies_installed
- until: zabbix_server_dependencies_installed is succeeded
- become: true
- when:
- - zabbix_server_database == 'mysql'
- - ansible_distribution_release == "buster"
-
- - name: "Debian | Install PostgreSQL Client package"
- ansible.builtin.apt:
- name:
- - postgresql-client
- - "{{ zabbix_python_prefix }}-psycopg2"
- state: present
- environment:
- http_proxy: "{{ zabbix_http_proxy | default(None) | default(omit) }}"
- https_proxy: "{{ zabbix_https_proxy | default(None) | default(omit) }}"
- register: zabbix_server_dependencies_installed
- until: zabbix_server_dependencies_installed is succeeded
- become: true
- when:
- - zabbix_server_database == 'pgsql'
- when: zabbix_server_install_database_client
- tags:
- - install
- - database
- - dependencies
diff --git a/ansible_collections/community/zabbix/roles/zabbix_server/tasks/RedHat.yml b/ansible_collections/community/zabbix/roles/zabbix_server/tasks/RedHat.yml
index fefd7e86c..77fb7cd8a 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_server/tasks/RedHat.yml
+++ b/ansible_collections/community/zabbix/roles/zabbix_server/tasks/RedHat.yml
@@ -7,18 +7,6 @@
tags:
- always
-- name: "RedHat | Use Zabbix package name"
- ansible.builtin.set_fact:
- zabbix_server_package: "zabbix-server-{{ zabbix_server_database }}"
- tags:
- - always
-
-- name: "RedHat | Set facts for Zabbix"
- ansible.builtin.set_fact:
- datafiles_path: "/usr/share/zabbix-sql-scripts/{{ 'postgresql' if zabbix_server_database == 'pgsql' else 'mysql' }}"
- tags:
- - always
-
- name: "RedHat | Make sure old file is absent"
ansible.builtin.file:
path: /etc/yum.repos.d/zabbix-supported.repo
@@ -46,86 +34,6 @@
tags:
- install
-- name: "RedHat | Installing zabbix-server-{{ zabbix_server_database }}"
- ansible.builtin.package:
- pkg: "{{ zabbix_server_package }}-{{ zabbix_server_version }}.{{ zabbix_server_version_minor }}"
- state: "{{ zabbix_server_package_state }}"
- disablerepo: "{{ zabbix_server_disable_repo | default(omit) }}"
- environment:
- http_proxy: "{{ zabbix_http_proxy | default(None) | default(omit) }}"
- https_proxy: "{{ zabbix_https_proxy | default(None) | default(omit) }}"
- register: zabbix_server_package_installed
- until: zabbix_server_package_installed is succeeded
- become: true
- tags:
- - install
-
-- name: "RedHat | Installing zabbix-sql-scripts"
- ansible.builtin.package:
- pkg: "zabbix-sql-scripts-{{ zabbix_server_version }}.{{ zabbix_server_version_minor }}"
- state: "{{ zabbix_server_package_state }}"
- disablerepo: "{{ zabbix_server_disable_repo | default(omit) }}"
- environment:
- http_proxy: "{{ zabbix_http_proxy | default(None) | default(omit) }}"
- https_proxy: "{{ zabbix_https_proxy | default(None) | default(omit) }}"
- register: zabbix_server_sql_package_installed
- until: zabbix_server_sql_package_installed is succeeded
- when:
- - zabbix_server_version is version('6.0', '>=')
- become: true
- tags:
- - install
-
-- name: "RedHat | Install Ansible module dependencies"
- ansible.builtin.yum:
- name: "{{ pgsql_depenencies[ansible_distribution_major_version] }}"
- state: present
- environment:
- http_proxy: "{{ zabbix_http_proxy | default(None) | default(omit) }}"
- https_proxy: "{{ zabbix_https_proxy | default(None) | default(omit) }}"
- register: zabbix_server_dependencies_installed
- until: zabbix_server_dependencies_installed is succeeded
- become: true
- when:
- - zabbix_server_database_creation
- - zabbix_server_database == 'pgsql'
- tags:
- - install
- - dependencies
-
-- name: RedHat | Install Database Client Package
- block:
- - name: "RedHat | Install Mysql Client packages"
- ansible.builtin.yum:
- name: "{{ mysql_client_pkgs[ansible_distribution_major_version] }}"
- state: present
- environment:
- http_proxy: "{{ zabbix_http_proxy | default(None) | default(omit) }}"
- https_proxy: "{{ zabbix_https_proxy | default(None) | default(omit) }}"
- register: zabbix_server_dependencies_installed
- until: zabbix_server_dependencies_installed is succeeded
- become: true
- when:
- - zabbix_server_database == 'mysql'
-
- - name: "RedHat | Install PostgreSQL client package"
- ansible.builtin.yum:
- name: postgresql
- state: present
- environment:
- http_proxy: "{{ zabbix_http_proxy | default(None) | default(omit) }}"
- https_proxy: "{{ zabbix_https_proxy | default(None) | default(omit) }}"
- register: zabbix_server_dependencies_installed
- until: zabbix_server_dependencies_installed is succeeded
- become: true
- when:
- - zabbix_server_database == 'pgsql'
- when: zabbix_server_install_database_client
- tags:
- - install
- - dependencies
- - database
-
- name: "RedHat | Configure SELinux when enabled"
ansible.builtin.include_tasks: selinux.yml
when:
diff --git a/ansible_collections/community/zabbix/roles/zabbix_server/tasks/initialize-mysql.yml b/ansible_collections/community/zabbix/roles/zabbix_server/tasks/initialize-mysql.yml
new file mode 100644
index 000000000..c3fd67c6d
--- /dev/null
+++ b/ansible_collections/community/zabbix/roles/zabbix_server/tasks/initialize-mysql.yml
@@ -0,0 +1,155 @@
+---
+# task file for mysql
+- name: "Install MySQL dependencies"
+ ansible.builtin.package:
+ name: "{{ _zabbix_server_mysql_dependencies | select | list }}"
+ environment:
+ http_proxy: "{{ zabbix_http_proxy | default(None) | default(omit) }}"
+ https_proxy: "{{ zabbix_https_proxy | default(None) | default(omit) }}"
+ register: _zabbix_server_dependencies_installed
+ until: _zabbix_server_dependencies_installed is succeeded
+ become: true
+ tags:
+ - install
+ - database
+ - dependencies
+
+# NOTE: Upgrading system-packages with pip is generally a bad idea, but
+# ubuntu-18.04 comes with pymysql==0.8.0, which seems to have a problem with
+# versions 8 and above of mysql.
+- name: Upgrade pymysql
+ when:
+ - ansible_facts['distribution'] == 'Ubuntu'
+ - ansible_facts['distribution_release'] == 'bionic'
+ ansible.builtin.pip:
+ name: "pymysql>=0.10.0,<0.11.0"
+ state: latest
+
+- name: "MySQL Database prep"
+ when: zabbix_server_database_creation
+ delegate_to: "{{ zabbix_server_real_dbhost | default(zabbix_server_dbhost_run_install | ternary(delegated_dbhost, inventory_hostname)) }}"
+ vars:
+ delegated_dbhost: "{{ (zabbix_server_dbhost == 'localhost') | ternary(inventory_hostname, zabbix_server_dbhost) }}"
+ tags:
+ - database
+ block:
+ - name: "MySQL | Create database"
+ community.mysql.mysql_db:
+ login_user: "{{ zabbix_server_mysql_login_user | default(omit) }}"
+ login_password: "{{ zabbix_server_mysql_login_password | default(omit) }}"
+ login_host: "{{ zabbix_server_mysql_login_host | default(omit) }}"
+ login_port: "{{ zabbix_server_mysql_login_port | default(omit) }}"
+ login_unix_socket: "{{ zabbix_server_mysql_login_unix_socket | default(omit) }}"
+ name: "{{ zabbix_server_dbname }}"
+ encoding: "{{ zabbix_server_dbencoding }}"
+ collation: "{{ zabbix_server_dbcollation }}"
+ state: present
+ register: zabbix_database_created
+
+ - name: "MySQL | Create database user"
+ community.mysql.mysql_user:
+ login_user: "{{ zabbix_server_mysql_login_user | default(omit) }}"
+ login_password: "{{ zabbix_server_mysql_login_password | default(omit) }}"
+ login_host: "{{ zabbix_server_mysql_login_host | default(omit) }}"
+ login_port: "{{ zabbix_server_mysql_login_port | default(omit) }}"
+ login_unix_socket: "{{ zabbix_server_mysql_login_unix_socket | default(omit) }}"
+ name: "{{ zabbix_server_dbuser }}"
+ password: "{{ zabbix_server_dbpassword }}"
+ host: "{{ zabbix_server_privileged_host }}"
+ plugin: "{{ 'mysql_native_password' if (ansible_os_family == 'RedHat' and ansible_distribution_major_version == '7') else omit }}"
+ priv: "{{ zabbix_server_dbname }}.*:ALL"
+ state: present
+
+- name: "MySQL verify or create schema"
+ when: zabbix_server_database_sqlload | bool
+ vars:
+ delegated_dbhost: "{{ (zabbix_server_dbhost == 'localhost') | ternary(inventory_hostname, zabbix_server_dbhost) }}"
+ tags:
+ - database
+ block:
+ # If this check fails, then there's no dbversion table in the database,
+ # hence it has not been populated, and we'll create it, below.
+ # Otherwise, the module will succees and we could
+ # access the database version, for example 5000000 for Zabbix 5.0.
+ - name: "MySQL | Get current database version"
+ community.mysql.mysql_query:
+ login_user: "{{ zabbix_server_dbuser }}"
+ login_password: "{{ zabbix_server_dbpassword }}"
+ login_host: "{{ zabbix_server_dbhost }}"
+ login_port: "{{ zabbix_server_dbport }}"
+ login_db: "{{ zabbix_server_dbname }}"
+ query: 'SELECT mandatory FROM dbversion'
+ rescue:
+ - name: "MySQL | Get and set schema import overrides"
+ delegate_to: "{{ zabbix_server_real_dbhost | default(zabbix_server_dbhost_run_install | ternary(delegated_dbhost, inventory_hostname)) }}"
+ block:
+ - name: "MySQL | Get current value for variables"
+ community.mysql.mysql_variables:
+ variable: "{{ name }}"
+ login_user: "{{ zabbix_server_mysql_login_user | default(omit) }}"
+ login_password: "{{ zabbix_server_mysql_login_password | default(omit) }}"
+ login_host: "{{ zabbix_server_mysql_login_host | default(omit) }}"
+ login_port: "{{ zabbix_server_mysql_login_port | default(omit) }}"
+ login_unix_socket: "{{ zabbix_server_mysql_login_unix_socket | default(omit) }}"
+ loop:
+ - innodb_default_row_format
+ - log_bin_trust_function_creators
+ loop_control:
+ loop_var: name
+ register: _mysql_variable_defaults
+
+ - name: "MySQL | Set variable overrides for schema import"
+ community.mysql.mysql_variables:
+ variable: "{{ item.name }}"
+ value: "{{ _mysql_schema_import_overrides[item.name] }}"
+ login_user: "{{ zabbix_server_mysql_login_user | default(omit) }}"
+ login_password: "{{ zabbix_server_mysql_login_password | default(omit) }}"
+ login_host: "{{ zabbix_server_mysql_login_host | default(omit) }}"
+ login_port: "{{ zabbix_server_mysql_login_port | default(omit) }}"
+ login_unix_socket: "{{ zabbix_server_mysql_login_unix_socket | default(omit) }}"
+ when: item.msg != _mysql_schema_import_overrides[item.name]
+ loop: "{{ _mysql_variable_defaults.results }}"
+ loop_control:
+ label: "{{ item.name }}: {{ _mysql_schema_import_overrides[item.name] }}"
+ vars:
+ _mysql_schema_import_overrides:
+ innodb_default_row_format: "dynamic"
+ log_bin_trust_function_creators: "ON"
+
+ - name: "MySQL | Disable InnoDB Strict Mode"
+ when: ansible_facts['distribution_release'] == "buster"
+ community.mysql.mysql_variables:
+ variable: innodb_strict_mode
+ value: 0
+ login_user: "{{ zabbix_server_mysql_login_user | default(omit) }}"
+ login_password: "{{ zabbix_server_mysql_login_password | default(omit) }}"
+ login_host: "{{ zabbix_server_mysql_login_host | default(omit) }}"
+ login_port: "{{ zabbix_server_mysql_login_port | default(omit) }}"
+ login_unix_socket: "{{ zabbix_server_mysql_login_unix_socket | default(omit) }}"
+
+ - name: "MySQL | Import schema"
+ community.mysql.mysql_db:
+ login_user: "{{ zabbix_server_dbuser }}"
+ login_password: "{{ zabbix_server_dbpassword }}"
+ login_host: "{{ zabbix_server_dbhost }}"
+ login_port: "{{ zabbix_server_dbport }}"
+ name: "{{ zabbix_server_dbname }}"
+ encoding: "{{ zabbix_server_dbencoding }}"
+ collation: "{{ zabbix_server_dbcollation }}"
+ state: import
+ target: /usr/share/zabbix-sql-scripts/mysql/server.sql.gz
+
+ always:
+ - name: "MySQL | Revert variable overrides for schema import"
+ delegate_to: "{{ zabbix_server_real_dbhost | default(zabbix_server_dbhost_run_install | ternary(delegated_dbhost, inventory_hostname)) }}"
+ community.mysql.mysql_variables:
+ variable: "{{ item.name }}"
+ value: "{{ item.msg }}"
+ login_user: "{{ zabbix_server_mysql_login_user | default(omit) }}"
+ login_password: "{{ zabbix_server_mysql_login_password | default(omit) }}"
+ login_host: "{{ zabbix_server_mysql_login_host | default(omit) }}"
+ login_port: "{{ zabbix_server_mysql_login_port | default(omit) }}"
+ login_unix_socket: "{{ zabbix_server_mysql_login_unix_socket | default(omit) }}"
+ loop: "{{ _mysql_variable_defaults.results | default([]) }}"
+ loop_control:
+ label: "{{ item.name }}: {{ item.msg }}"
diff --git a/ansible_collections/community/zabbix/roles/zabbix_server/tasks/postgresql.yml b/ansible_collections/community/zabbix/roles/zabbix_server/tasks/initialize-pgsql.yml
index 5177a55be..65bd0beec 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_server/tasks/postgresql.yml
+++ b/ansible_collections/community/zabbix/roles/zabbix_server/tasks/initialize-pgsql.yml
@@ -1,126 +1,92 @@
---
# task file for postgresql
-
-- name: "PostgreSQL | Set the correct delegated_dbhost (to support postgres db deployment on a remote dbhost)"
- ansible.builtin.set_fact:
- delegated_dbhost: "{{ zabbix_server_dbhost if (zabbix_server_dbhost != 'localhost') else inventory_hostname }}"
- when:
- - zabbix_server_dbhost_run_install
- tags:
- - database
-
-- name: "PostgreSQL | Set the correct delegated_dbhost (to support postgres db deployment on a remote dbhost)"
- ansible.builtin.set_fact:
- delegated_dbhost: "{{ inventory_hostname }}"
- when:
- - not zabbix_server_dbhost_run_install
+- name: "Install PostgreSQL dependencies"
+ ansible.builtin.package:
+ name: "{{ _zabbix_server_pgsql_dependencies | select | list }}"
+ environment:
+ http_proxy: "{{ zabbix_http_proxy | default(None) | default(omit) }}"
+ https_proxy: "{{ zabbix_https_proxy | default(None) | default(omit) }}"
+ register: _zabbix_server_dependencies_installed
+ until: _zabbix_server_dependencies_installed is succeeded
+ become: true
tags:
+ - install
- database
+ - dependencies
-- name: "PostgreSQL | Delegated"
- block:
- - name: "PostgreSQL | Delegated | Create database"
- community.postgresql.postgresql_db:
- name: "{{ zabbix_server_dbname }}"
- port: "{{ zabbix_server_dbport }}"
- state: present
-
- - name: "PostgreSQL | Delegated | Create database user"
- community.postgresql.postgresql_user:
- db: "{{ zabbix_server_dbname }}"
- name: "{{ zabbix_server_dbuser }}"
- password: "{{ ('md5' + (zabbix_server_dbpassword + zabbix_server_dbuser)|hash('md5')) if zabbix_server_dbpassword_hash_method == 'md5' else zabbix_server_dbpassword }}"
- port: "{{ zabbix_server_dbport }}"
- priv: ALL
- state: present
- encrypted: true
-
- - name: "PostgreSQL | Delegated | Create timescaledb extension"
- community.postgresql.postgresql_ext:
- db: "{{ zabbix_server_dbname }}"
- name: timescaledb
- when: zabbix_server_database_timescaledb
- become: true
+- name: "PostgreSQL Database prep"
+ when: zabbix_server_database_creation
+ become: "{{ zabbix_server_dbhost_run_install }}"
become_user: postgres
- delegate_to: "{{ delegated_dbhost }}"
- when:
- - zabbix_server_database_creation
- - zabbix_server_pgsql_login_host is not defined
+ delegate_to: "{{ zabbix_server_dbhost_run_install | ternary(delegated_dbhost, inventory_hostname) }}"
+ vars:
+ delegated_dbhost: "{{ (zabbix_server_dbhost == 'localhost') | ternary(inventory_hostname, zabbix_server_dbhost) }}"
tags:
- database
-
-- name: "PostgreSQL | Remote"
block:
- - name: "PostgreSQL | Remote | Create database"
+ - name: "PostgreSQL | Create database"
community.postgresql.postgresql_db:
- login_host: "{{ zabbix_server_pgsql_login_host | default(omit) }}"
login_user: "{{ zabbix_server_pgsql_login_user | default(omit) }}"
login_password: "{{ zabbix_server_pgsql_login_password | default(omit) }}"
+ login_host: "{{ zabbix_server_pgsql_login_host | default(omit) }}"
+ port: "{{ zabbix_server_dbport }}"
login_unix_socket: "{{ zabbix_server_pgsql_login_unix_socket | default(omit) }}"
name: "{{ zabbix_server_dbname }}"
- port: "{{ zabbix_server_dbport }}"
state: present
- - name: "PostgreSQL | Remote | Create database user"
+ - name: "PostgreSQL | Create database user"
community.postgresql.postgresql_user:
- login_host: "{{ zabbix_server_pgsql_login_host | default(omit) }}"
login_user: "{{ zabbix_server_pgsql_login_user | default(omit) }}"
login_password: "{{ zabbix_server_pgsql_login_password | default(omit) }}"
- db: "{{ zabbix_server_dbname }}"
+ login_host: "{{ zabbix_server_pgsql_login_host | default(omit) }}"
+ port: "{{ zabbix_server_dbport }}"
+ login_unix_socket: "{{ zabbix_server_pgsql_login_unix_socket | default(omit) }}"
name: "{{ zabbix_server_dbuser }}"
password: "{{ ('md5' + (zabbix_server_dbpassword + zabbix_server_dbuser)|hash('md5')) if zabbix_server_dbpassword_hash_method == 'md5' else zabbix_server_dbpassword }}"
- port: "{{ zabbix_server_dbport }}"
+ db: "{{ zabbix_server_dbname }}"
priv: ALL
state: present
encrypted: true
- - name: "PostgreSQL | Remote | Create timescaledb extension"
+ - name: "PostgreSQL | Create timescaledb extension"
+ when: zabbix_server_database_timescaledb
community.postgresql.postgresql_ext:
- login_host: "{{ zabbix_server_pgsql_login_host | default(omit) }}"
login_user: "{{ zabbix_server_pgsql_login_user | default(omit) }}"
login_password: "{{ zabbix_server_pgsql_login_password | default(omit) }}"
+ login_host: "{{ zabbix_server_pgsql_login_host | default(omit) }}"
+ port: "{{ zabbix_server_dbport }}"
login_unix_socket: "{{ zabbix_server_pgsql_login_unix_socket | default(omit) }}"
db: "{{ zabbix_server_dbname }}"
name: timescaledb
- when: zabbix_server_database_timescaledb
- when:
- - zabbix_server_database_creation
- - zabbix_server_pgsql_login_host is defined
- tags:
- - database
-- name: "PostgreSQL | Create schema"
- ansible.builtin.shell: |
- set -euxo pipefail
- FILE={{ 'create.sql' if zabbix_server_version is version('6.0', '<') else 'server.sql' }}
- cd {{ datafiles_path }}
- if [ -f ${FILE}.gz ]
- then zcat ${FILE}.gz > /tmp/create.sql
- else
- cp ${FILE} /tmp/create.sql
- fi
- cat /tmp/create.sql | psql -h '{{ zabbix_server_dbhost }}' \
- -U '{{ zabbix_server_dbuser }}' \
- -d '{{ zabbix_server_dbname }}' \
- -p '{{ zabbix_server_dbport }}'
- touch /etc/zabbix/schema.done
- rm -f /tmp/create.sql
- args:
- creates: /etc/zabbix/schema.done
- executable: /bin/bash
- warn: "{{ produce_warn | default(omit) }}"
- environment:
- PGPASSWORD: "{{ zabbix_server_dbpassword }}"
- become: true
- when:
- - zabbix_server_database_sqlload
+- name: "PostgreSQL verify or create schema"
+ when: zabbix_server_database_sqlload
tags:
- database
+ block:
+ - name: "PostgreSQL | Get current database version"
+ community.postgresql.postgresql_query:
+ login_user: "{{ zabbix_server_dbuser }}"
+ login_password: "{{ zabbix_server_dbpassword }}"
+ login_host: "{{ zabbix_server_dbhost }}"
+ port: "{{ zabbix_server_dbport }}"
+ db: "{{ zabbix_server_dbname }}"
+ query: 'SELECT mandatory FROM dbversion'
+ rescue:
+ - name: "PostgreSQL | Import schema"
+ community.postgresql.postgresql_db:
+ login_user: "{{ zabbix_server_dbuser }}"
+ login_password: "{{ zabbix_server_dbpassword }}"
+ login_host: "{{ zabbix_server_dbhost }}"
+ port: "{{ zabbix_server_dbport }}"
+ db: "{{ zabbix_server_dbname }}"
+ state: restore
+ target: /usr/share/zabbix-sql-scripts/postgresql/server.sql.gz
- name: "PostgreSQL | Create TimescaleDB hypertables"
ansible.builtin.shell: |
set -euxo pipefail
- cd {{ datafiles_path }} &&
+ cd /usr/share/zabbix-sql-scripts/postgresql &&
if [ -f timescaledb.sql.gz ]; then zcat timescaledb.sql.gz > /etc/timescaledb.sql ; else cp -p timescaledb.sql /etc/timescaledb.sql ; fi
cat /etc/timescaledb.sql | psql -h '{{ zabbix_server_dbhost }}' \
-U '{{ zabbix_server_dbuser }}' \
diff --git a/ansible_collections/community/zabbix/roles/zabbix_server/tasks/main.yml b/ansible_collections/community/zabbix/roles/zabbix_server/tasks/main.yml
index 62674a7ff..356403e0b 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_server/tasks/main.yml
+++ b/ansible_collections/community/zabbix/roles/zabbix_server/tasks/main.yml
@@ -13,25 +13,41 @@
- name: Set More Variables
ansible.builtin.set_fact:
- zabbix_db_type_long: "{{ 'postgresql' if zabbix_server_database == 'pgsql' else 'mysql' }}"
- zabbix_valid_version: "{{ zabbix_server_version|float in zabbix_valid_server_versions[ansible_distribution_major_version] }}"
zabbix_server_fpinglocation: "{{ zabbix_server_fpinglocation if zabbix_server_fpinglocation is defined else _zabbix_server_fpinglocation}}"
zabbix_server_fping6location: "{{ zabbix_server_fping6location if zabbix_server_fping6location is defined else _zabbix_server_fping6location}}"
tags:
- always
-- name: Stopping Install of Invalid Version
- ansible.builtin.fail:
- msg: Zabbix version {{ zabbix_server_version }} is not supported on {{ ansible_distribution }} {{ ansible_distribution_major_version }}
- when: not zabbix_valid_version
+- name: Check that version is supported
+ when: enable_version_check | default(true) | bool
+ ansible.builtin.assert:
+ that:
+ - "{{ zabbix_server_version|float in zabbix_valid_server_versions[ ansible_facts['distribution_major_version'] ] }}"
+ fail_msg: Zabbix version {{ zabbix_server_version }} is not supported on {{ ansible_facts['distribution'] }} {{ ansible_facts['distribution_major_version'] }}
tags:
- always
- name: Install the correct repository
ansible.builtin.include_tasks: "{{ ansible_os_family }}.yml"
-- name: Installing the {{ zabbix_db_type_long }} database
- ansible.builtin.include_tasks: "{{ zabbix_db_type_long }}.yml"
+- name: Install zabbix-server packages
+ ansible.builtin.package:
+ name: "{{ _zabbix_server_packages }}"
+ state: "{{ zabbix_server_package_state }}"
+ update_cache: true
+ disablerepo: "{{ zabbix_server_disable_repo | default(_zabbix_server_disable_repo | default(omit)) }}"
+ install_recommends: "{{ zabbix_server_install_recommends | default(_zabbix_server_install_recommends | default(omit)) }}"
+ environment:
+ http_proxy: "{{ zabbix_http_proxy | default(None) | default(omit) }}"
+ https_proxy: "{{ zabbix_https_proxy | default(None) | default(omit) }}"
+ register: _zabbix_server_package_installed
+ until: _zabbix_server_package_installed is succeeded
+ become: true
+ tags:
+ - install
+
+- name: "Initialize the database"
+ ansible.builtin.include_tasks: "initialize-{{ zabbix_server_database }}.yml"
- name: "Configure zabbix-server"
ansible.builtin.template:
diff --git a/ansible_collections/community/zabbix/roles/zabbix_server/tasks/mysql.yml b/ansible_collections/community/zabbix/roles/zabbix_server/tasks/mysql.yml
deleted file mode 100644
index aad009816..000000000
--- a/ansible_collections/community/zabbix/roles/zabbix_server/tasks/mysql.yml
+++ /dev/null
@@ -1,213 +0,0 @@
----
-# task file for mysql
-
-- name: "MySQL | Set the correct delegated_dbhost (to support MySQL db deployment on a remote dbhost)"
- ansible.builtin.set_fact:
- delegated_dbhost: "{{ zabbix_server_dbhost if (zabbix_server_dbhost != 'localhost') else inventory_hostname }}"
- when:
- - zabbix_server_dbhost_run_install
- tags:
- - database
-
-- name: "MySQL | Set the correct delegated_dbhost (to support MySQL db deployment on a remote dbhost)"
- ansible.builtin.set_fact:
- delegated_dbhost: "{{ inventory_hostname }}"
- when:
- - not zabbix_server_dbhost_run_install
- tags:
- - database
-
-- name: "MySQL | Override delegated_dbhost with real dbhost when dbhost is behind loadbalancer"
- ansible.builtin.set_fact:
- delegated_dbhost: "{{ zabbix_server_real_dbhost }}"
- when: zabbix_server_real_dbhost | default(false)
- tags:
- - database
-
-- name: "MySQL | Create database"
- community.mysql.mysql_db:
- name: "{{ zabbix_server_dbname }}"
- encoding: "{{ zabbix_server_dbencoding }}"
- collation: "{{ zabbix_server_dbcollation }}"
- login_host: "{{ zabbix_server_mysql_login_host | default(omit) }}"
- login_user: "{{ zabbix_server_mysql_login_user | default(omit) }}"
- login_password: "{{ zabbix_server_mysql_login_password | default(omit) }}"
- login_port: "{{ zabbix_server_mysql_login_port | default(omit) }}"
- login_unix_socket: "{{ zabbix_server_mysql_login_unix_socket | default(omit) }}"
- state: present
- when: zabbix_server_database_creation
- register: zabbix_database_created
- delegate_to: "{{ delegated_dbhost }}"
- tags:
- - database
- - skip_ansible_lint
-
-- name: "MySQL | Create database user"
- community.mysql.mysql_user:
- login_host: "{{ zabbix_server_mysql_login_host | default(omit) }}"
- login_user: "{{ zabbix_server_mysql_login_user | default(omit) }}"
- login_password: "{{ zabbix_server_mysql_login_password | default(omit) }}"
- login_port: "{{ zabbix_server_mysql_login_port | default(omit) }}"
- login_unix_socket: "{{ zabbix_server_mysql_login_unix_socket | default(omit) }}"
- name: "{{ zabbix_server_dbuser }}"
- password: "{{ zabbix_server_dbpassword }}"
- plugin: "{{ 'mysql_native_password' if (ansible_os_family == 'RedHat' and ansible_distribution_major_version == '7') else omit }}"
- priv: "{{ zabbix_server_dbname }}.*:ALL"
- host: "{{ zabbix_server_privileged_host }}"
- state: present
- when: zabbix_server_database_creation
- delegate_to: "{{ delegated_dbhost }}"
- tags:
- - database
-
-- name: "MySQL | Get the file for create.sql"
- ansible.builtin.shell: ls -1 {{ datafiles_path }}/{{ 'create' if zabbix_server_version is version('6.0', '<') else 'server' }}.sq*
- changed_when: false
- become: true
- when:
- - zabbix_server_database_sqlload | bool
- register: ls_output_create
- tags:
- - database
-
-- name: MySQL | Get current database version
- ansible.builtin.shell: |
- mysql -h {{ zabbix_server_dbhost }} -u{{ zabbix_server_dbuser }} \
- -p'{{ zabbix_server_dbpassword }}' -D '{{ zabbix_server_dbname }}' \
- -e 'SELECT mandatory FROM dbversion;'
- register: mysql_db_version
- become: true
- changed_when: false
- ignore_errors: true
- tags:
- - database
-
-# If the above check failed, then there was no dbversion table in the database.
-# We'll create it, below. Otherwise, we can access the database version in
-# `mysql_db_version["stdout_lines"][1]`, for example 5000000 for Zabbix 5.0.
-- name: MySQL | Check if database needs to be populated
- ansible.builtin.set_fact:
- mysql_schema_empty: "{{ mysql_db_version is failed }}"
-
-- name: "MySQL | Get current value for innodb_default_row_format"
- community.mysql.mysql_variables:
- variable: innodb_default_row_format
- login_host: "{{ zabbix_server_mysql_login_host | default(omit) }}"
- login_user: "{{ zabbix_server_mysql_login_user | default(omit) }}"
- login_password: "{{ zabbix_server_mysql_login_password | default(omit) }}"
- login_port: "{{ zabbix_server_mysql_login_port | default(omit) }}"
- login_unix_socket: "{{ zabbix_server_mysql_login_unix_socket | default(omit) }}"
- delegate_to: "{{ delegated_dbhost }}"
- register: mysql_innodb_default_row_format
- tags:
- - database
-
-- name: "MySQL | Set innodb_default_row_format to dynamic"
- community.mysql.mysql_variables:
- variable: innodb_default_row_format
- value: dynamic
- login_host: "{{ zabbix_server_mysql_login_host | default(omit) }}"
- login_user: "{{ zabbix_server_mysql_login_user | default(omit) }}"
- login_password: "{{ zabbix_server_mysql_login_password | default(omit) }}"
- login_port: "{{ zabbix_server_mysql_login_port | default(omit) }}"
- login_unix_socket: "{{ zabbix_server_mysql_login_unix_socket | default(omit) }}"
- when:
- - zabbix_server_database_sqlload | bool
- - mysql_schema_empty
- - mysql_innodb_default_row_format.msg != 'dynamic'
- delegate_to: "{{ delegated_dbhost }}"
- tags:
- - database
-
-- name: "MySQL | Disable InnoDB Strict Mode"
- community.mysql.mysql_variables:
- variable: innodb_strict_mode
- value: 0
- login_host: "{{ zabbix_server_mysql_login_host | default(omit) }}"
- login_user: "{{ zabbix_server_mysql_login_user | default(omit) }}"
- login_password: "{{ zabbix_server_mysql_login_password | default(omit) }}"
- login_port: "{{ zabbix_server_mysql_login_port | default(omit) }}"
- login_unix_socket: "{{ zabbix_server_mysql_login_unix_socket | default(omit) }}"
- when:
- - zabbix_server_database_sqlload | bool
- - mysql_schema_empty
- - ansible_distribution_release == "buster"
- delegate_to: "{{ delegated_dbhost }}"
- tags:
- - database
-
-- name: "MySQL | Fetch sql create file"
- fetch:
- src: "{{ ls_output_create.stdout }}"
- dest: /tmp/{{ role_name }}/
- flat: true
- become: true
- when:
- - delegated_dbhost != inventory_hostname
- - zabbix_server_database_sqlload | bool
- - mysql_schema_empty
- tags:
- - database
-
-- name: "MySQL | Copy sql create file"
- ansible.builtin.copy:
- src: /tmp/{{ role_name }}/
- dest: "{{ ls_output_create.stdout | dirname }}"
- mode: "0640"
- delegate_to: "{{ delegated_dbhost }}"
- become: true
- when:
- - delegated_dbhost != inventory_hostname
- - zabbix_server_database_sqlload | bool
- - mysql_schema_empty
- tags:
- - database
-
-- name: "MySQL | Create database and import file"
- community.mysql.mysql_db:
- login_host: "{{ zabbix_server_mysql_login_host | default(omit) }}"
- login_user: "{{ zabbix_server_dbuser if (ansible_os_family == 'RedHat' and ansible_distribution_major_version == '7') else zabbix_server_mysql_login_user }}"
- login_password: "{{ zabbix_server_dbpassword if (ansible_os_family == 'RedHat' and ansible_distribution_major_version == '7') else zabbix_server_mysql_login_password }}"
- login_port: "{{ zabbix_server_mysql_login_port | default(omit) }}"
- login_unix_socket: "{{ zabbix_server_mysql_login_unix_socket | default(omit) }}"
- name: "{{ zabbix_server_dbname }}"
- encoding: "{{ zabbix_server_dbencoding }}"
- collation: "{{ zabbix_server_dbcollation }}"
- state: import
- target: "{{ ls_output_create.stdout }}"
- use_shell: "{{ true if zabbix_server_version is version('5.0', '==') else false }}"
- when:
- - zabbix_server_database_sqlload | bool
- - mysql_schema_empty
- delegate_to: "{{ delegated_dbhost }}"
- tags:
- - database
-
-- name: "MySQL | Revert innodb_default_row_format to previous value"
- community.mysql.mysql_variables:
- variable: innodb_default_row_format
- value: "{{ mysql_innodb_default_row_format.msg }}"
- login_host: "{{ zabbix_server_mysql_login_host | default(omit) }}"
- login_user: "{{ zabbix_server_mysql_login_user | default(omit) }}"
- login_password: "{{ zabbix_server_mysql_login_password | default(omit) }}"
- login_port: "{{ zabbix_server_mysql_login_port | default(omit) }}"
- login_unix_socket: "{{ zabbix_server_mysql_login_unix_socket | default(omit) }}"
- when:
- - zabbix_server_database_sqlload | bool
- - mysql_schema_empty
- - mysql_innodb_default_row_format.msg != 'dynamic'
- delegate_to: "{{ delegated_dbhost }}"
- tags:
- - database
-
-- name: "MySQL | Check if we have sql_done files"
- ansible.builtin.file:
- path: /etc/zabbix/create.done
- state: touch
- mode: "0644"
- become: true
- when:
- - zabbix_server_database_sqlload | bool
- - mysql_schema_empty
- tags:
- - database
diff --git a/ansible_collections/community/zabbix/roles/zabbix_server/tasks/selinux.yml b/ansible_collections/community/zabbix/roles/zabbix_server/tasks/selinux.yml
index fe203aed1..cd13dbbfd 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_server/tasks/selinux.yml
+++ b/ansible_collections/community/zabbix/roles/zabbix_server/tasks/selinux.yml
@@ -126,6 +126,6 @@
cmd: files/install_semodule.bsx
args:
creates: /etc/selinux/targeted/active/modules/400/zabbix_server_add/cil
- become: true
+ become: true
tags:
- config
diff --git a/ansible_collections/community/zabbix/roles/zabbix_server/vars/Debian.yml b/ansible_collections/community/zabbix/roles/zabbix_server/vars/Debian.yml
index 4074869e6..75f3751c2 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_server/vars/Debian.yml
+++ b/ansible_collections/community/zabbix/roles/zabbix_server/vars/Debian.yml
@@ -29,7 +29,20 @@ zabbix_valid_server_versions:
- 6.0
debian_keyring_path: /etc/apt/keyrings/
-zabbix_gpg_key: "{{ debian_keyring_path }}/zabbix-official-repo.asc"
-_zabbix_repo_deb_url: "http://repo.zabbix.com/zabbix/{{ zabbix_server_version }}"
+zabbix_gpg_key: "{{ debian_keyring_path }}zabbix-repo.asc"
+
+_zabbix_server_pgsql_dependencies:
+ - "{{ zabbix_server_install_database_client | ternary('postgresql-client', '') }}"
+ - python3-psycopg2
+
+_zabbix_server_mysql_dependencies:
+ - "{{ zabbix_server_install_database_client | ternary('default-mysql-client', '') }}"
+ - python3-pymysql
+
_zabbix_server_fping6location: /usr/bin/fping6
_zabbix_server_fpinglocation: /usr/bin/fping
+
+_zabbix_server_packages:
+ - "zabbix-server-{{ zabbix_server_database }}"
+ - "zabbix-sql-scripts"
+_zabbix_server_install_recommends: true
diff --git a/ansible_collections/community/zabbix/roles/zabbix_server/vars/RedHat.yml b/ansible_collections/community/zabbix/roles/zabbix_server/vars/RedHat.yml
index c2e0f14f3..fb20631f8 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_server/vars/RedHat.yml
+++ b/ansible_collections/community/zabbix/roles/zabbix_server/vars/RedHat.yml
@@ -18,19 +18,19 @@ zabbix_valid_server_versions:
- 6.2
- 6.0
-pgsql_depenencies:
- "9":
- - python3-psycopg2
- "8":
- - python3-psycopg2
+_zabbix_server_pgsql_dependencies:
+ - "{{ zabbix_server_install_database_client | ternary('postgresql', '') }}"
+ - python3-psycopg2
-mysql_client_pkgs:
- "9":
- - mysql
- - python3-PyMySQL
- "8":
- - mysql
- - python3-PyMySQL
+_zabbix_server_mysql_dependencies:
+ - "{{ zabbix_server_install_database_client | ternary('mysql', '') }}"
+ - python3-PyMySQL
_zabbix_server_fping6location: /usr/sbin/fping6
_zabbix_server_fpinglocation: /usr/sbin/fping
+
+_zabbix_server_packages:
+ - "zabbix-server-{{ zabbix_server_database }}-{{ zabbix_server_version }}.{{ zabbix_server_version_minor }}"
+ - "zabbix-sql-scripts-{{ zabbix_server_version }}.{{ zabbix_server_version_minor }}"
+_zabbix_server_disable_repo:
+ - epel
diff --git a/ansible_collections/community/zabbix/roles/zabbix_web/README.md b/ansible_collections/community/zabbix/roles/zabbix_web/README.md
index 5904f8288..aac6f9dc2 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_web/README.md
+++ b/ansible_collections/community/zabbix/roles/zabbix_web/README.md
@@ -16,6 +16,7 @@
- [Apache configuration](#apache-configuration)
- [Nginx configuration](#nginx-configuration)
- [PHP-FPM](#php-fpm)
+ - [SElinux](#selinux)
- [Zabbix Server](#zabbix-server)
* [proxy](#proxy)
- [Example Playbook](#example-playbook)
@@ -65,6 +66,8 @@ See the following list of supported Operating Systems with the Zabbix releases.
| Debian 11 bullseye | V | V | V |
| Debian 10 buster | | | V |
+You can bypass this matrix by setting `enable_version_check: false`
+
# Installation
Installing this role is very simple: `ansible-galaxy install community.zabbix.zabbix_web`
@@ -94,6 +97,8 @@ The following is an overview of all available configuration defaults for this ro
* `zabbix_web_conf_mode`: Default: `0644`. The "mode" for the Zabbix configuration file.
* `zabbix_repo_deb_url`: The URL to the Zabbix repository. Default `http://repo.zabbix.com/zabbix/{{ zabbix_web_version }}/{{ ansible_distribution.lower() }}`
* `zabbix_repo_deb_component`: The repository component for Debian installs. Default `main`.
+* `zabbix_repo_deb_gpg_key_url`: The URL to download the Zabbix GPG key from. Default `http://repo.zabbix.com/zabbix-official-repo.key`.
+* `zabbix_repo_deb_include_deb_src`: True, if deb-src should be included in the zabbix.sources entry. Default `true`.
### Zabbix Web specific
@@ -116,7 +121,6 @@ The following is an overview of all available configuration defaults for this ro
* `zabbix_web_vhost_port`: The port on which Zabbix HTTP vhost is running.
* `zabbix_web_vhost_tls_port`: The port on which Zabbix HTTPS vhost is running.
* `zabbix_web_vhost_listen_ip`: On which interface the Apache Virtual Host is available.
-* `zabbix_apache_can_connect_ldap`: Default: `false`. Set SELinux boolean to allow httpd to connect to LDAP.
* `zabbix_web_max_execution_time`: PHP max execution time
* `zabbix_web_memory_limit`: PHP memory limit
* `zabbix_web_post_max_size`: PHP maximum post size
@@ -151,6 +155,13 @@ The following properties are specific to Zabbix 5.0 and for the PHP(-FPM) config
* `zabbix_php_fpm_conf_group`: The group of the owner of the socket file (When `zabbix_php_fpm_listen` contains a patch to a socket file).
+### SElinux
+
+* `zabbix_web_selinux`: Default: `False`. Enables an SELinux policy so that the web will run.
+* `selinux_allow_httpd_can_connect_zabbix`: Default: `false`. Set SELinux boolean to allow httpd to connect to zabbix.
+* `selinux_allow_httpd_can_connect_ldap`: Default: `false`. Set SELinux boolean to allow httpd to connect to LDAP.
+* `selinux_allow_httpd_can_network_connect_db`: Default: `false` Set SELinux boolean to allow httpd to connect databases over the network.
+
### Zabbix Server
* `zabbix_server_name`: The name of the Zabbix Server.
diff --git a/ansible_collections/community/zabbix/roles/zabbix_web/defaults/main.yml b/ansible_collections/community/zabbix/roles/zabbix_web/defaults/main.yml
index f37bb07da..53744bab9 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_web/defaults/main.yml
+++ b/ansible_collections/community/zabbix/roles/zabbix_web/defaults/main.yml
@@ -53,6 +53,7 @@ zabbix_web_apt_priority:
zabbix_web_version_minor: "*"
zabbix_repo_yum_gpgcheck: 0
zabbix_repo_yum_schema: https
+zabbix_repo_deb_url: "http://repo.zabbix.com/zabbix/{{ zabbix_web_version }}/{{ ansible_facts.lsb.id | default(ansible_facts['distribution']) | lower }}{% if ansible_facts['architecture'] == 'aarch64' and ansible_facts.lsb.id | default(ansible_facts['distribution']) in ['Debian', 'Ubuntu'] %}-arm64{% endif %}"
zabbix_repo_deb_component: main
zabbix_web_disable_repo:
- epel
@@ -86,9 +87,14 @@ zabbix_server_history_types:
- "uint"
- "dbl"
-zabbix_selinux: false
-# selinux_allow_zabbix_can_network: false
-# zabbix_apache_can_connect_ldap: false
+# SELinux specific
+zabbix_web_selinux: false
+selinux_allow_httpd_can_connect_ldap: false
+selinux_allow_httpd_can_network_connect_db: false
+selinux_allow_httpd_can_connect_zabbix: false
+
+zabbix_repo_deb_gpg_key_url: http://repo.zabbix.com/zabbix-official-repo.key
+zabbix_repo_deb_include_deb_src: true
# SAML certificates
# zabbix_saml_idp_crt:
diff --git a/ansible_collections/community/zabbix/roles/zabbix_web/tasks/Debian.yml b/ansible_collections/community/zabbix/roles/zabbix_web/tasks/Debian.yml
index ae1c7de26..d3c12fdac 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_web/tasks/Debian.yml
+++ b/ansible_collections/community/zabbix/roles/zabbix_web/tasks/Debian.yml
@@ -13,33 +13,6 @@
tags:
- always
-- name: "Debian | Update ansible_lsb fact"
- ansible.builtin.setup:
- gather_subset:
- - lsb
-
-- name: "Debian | Installing lsb-release"
- ansible.builtin.apt:
- pkg: lsb-release
- update_cache: true
- cache_valid_time: 3600
- force: true
- state: present
- environment:
- http_proxy: "{{ zabbix_http_proxy | default(None) | default(omit) }}"
- https_proxy: "{{ zabbix_https_proxy | default(None) | default(omit) }}"
- become: true
- tags:
- - install
-
-- name: "Debian | Repo URL"
- ansible.builtin.set_fact:
- zabbix_repo_deb_url: "{{ _zabbix_repo_deb_url }}/{{ ansible_lsb.id.lower() }}{{ '-arm64' if ansible_machine == 'aarch64' and ansible_lsb.id == 'debian' else ''}}"
- when:
- - zabbix_repo_deb_url is undefined
- tags:
- - always
-
- name: "Debian | Install PHP Dependencies"
ansible.builtin.apt:
pkg: "{{ zabbix_web_php_dependencies }}"
@@ -88,11 +61,15 @@
(ansible_distribution == "Debian" and ansible_distribution_major_version < "12")
- name: "Debian | Download gpg key"
+ when: not ansible_check_mode # Because get_url always has changed status in check_mode.
ansible.builtin.get_url:
- url: http://repo.zabbix.com/zabbix-official-repo.key
+ url: "{{ zabbix_repo_deb_gpg_key_url }}"
dest: "{{ zabbix_gpg_key }}"
mode: "0644"
force: true
+ environment:
+ http_proxy: "{{ zabbix_http_proxy | default(None) | default(omit) }}"
+ https_proxy: "{{ zabbix_https_proxy | default(None) | default(omit) }}"
become: true
tags:
- install
@@ -104,7 +81,7 @@
group: root
mode: 0644
content: |
- Types: deb deb-src
+ Types: deb{{ ' deb-src' if zabbix_repo_deb_include_deb_src }}
Enabled: yes
URIs: {{ zabbix_repo_deb_url }}
Suites: {{ ansible_distribution_release }}
diff --git a/ansible_collections/community/zabbix/roles/zabbix_web/tasks/RedHat.yml b/ansible_collections/community/zabbix/roles/zabbix_web/tasks/RedHat.yml
index 30871017e..8dfb2e113 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_web/tasks/RedHat.yml
+++ b/ansible_collections/community/zabbix/roles/zabbix_web/tasks/RedHat.yml
@@ -57,3 +57,8 @@
- ansible_distribution_major_version == '9'
tags:
- install
+
+- name: "Configure SELinux when enabled"
+ ansible.builtin.include_tasks: selinux.yml
+ when:
+ - zabbix_web_selinux | bool
diff --git a/ansible_collections/community/zabbix/roles/zabbix_web/tasks/main.yml b/ansible_collections/community/zabbix/roles/zabbix_web/tasks/main.yml
index b82d8486b..54a313a1c 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_web/tasks/main.yml
+++ b/ansible_collections/community/zabbix/roles/zabbix_web/tasks/main.yml
@@ -13,15 +13,16 @@
- name: Set More Variables
ansible.builtin.set_fact:
- zabbix_valid_version: "{{ zabbix_web_version|float in zabbix_valid_web_versions[ansible_distribution_major_version] }}"
zabbix_db_type_long: "{{ 'postgresql' if zabbix_server_database == 'pgsql' else 'mysql' }}"
tags:
- always
-- name: Stopping Install of Invalid Version
- ansible.builtin.fail:
- msg: Zabbix version {{ zabbix_web_version }} is not supported on {{ ansible_distribution }} {{ ansible_distribution_major_version }}
- when: not zabbix_valid_version
+- name: Check that version is supported
+ when: enable_version_check | default(true) | bool
+ ansible.builtin.assert:
+ that:
+ - "{{ zabbix_web_version|float in zabbix_valid_web_versions[ ansible_facts['distribution_major_version'] ] }}"
+ fail_msg: Zabbix version {{ zabbix_web_version }} is not supported on {{ ansible_facts['distribution'] }} {{ ansible_facts['distribution_major_version'] }}
tags:
- always
diff --git a/ansible_collections/community/zabbix/roles/zabbix_web/tasks/selinux.yml b/ansible_collections/community/zabbix/roles/zabbix_web/tasks/selinux.yml
index 56e2ae05e..df5d388db 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_web/tasks/selinux.yml
+++ b/ansible_collections/community/zabbix/roles/zabbix_web/tasks/selinux.yml
@@ -12,7 +12,7 @@
become: true
when:
- ansible_os_family == "RedHat"
- - selinux_allow_zabbix_can_network
+ - ansible_selinux.status == "enabled"
- ansible_distribution_major_version == "7" or ansible_distribution_major_version == "6"
tags:
- install
@@ -30,23 +30,11 @@
become: true
when:
- ansible_os_family == "RedHat"
- - selinux_allow_zabbix_can_network
+ - ansible_selinux.status == "enabled"
- ansible_distribution_major_version|int >= 8
tags:
- install
-- name: "SELinux | RedHat | Enable zabbix_can_network SELinux boolean"
- ansible.posix.seboolean:
- name: zabbix_can_network
- state: true
- persistent: true
- become: true
- when:
- - ansible_os_family == "RedHat"
- - selinux_allow_zabbix_can_network
- tags:
- - config
-
- name: "SELinux | Allow httpd to connect to db (SELinux)"
ansible.posix.seboolean:
name: httpd_can_network_connect_db
@@ -55,7 +43,7 @@
become: true
when:
- ansible_selinux.status == "enabled"
- - selinux_allow_zabbix_can_network
+ - selinux_allow_httpd_can_network_connect_db | bool
tags:
- config
@@ -67,7 +55,7 @@
become: true
when:
- ansible_selinux.status == "enabled"
- - selinux_allow_zabbix_can_network
+ - selinux_allow_httpd_can_connect_zabbix | bool
tags:
- config
@@ -79,6 +67,6 @@
become: true
when:
- ansible_selinux.status == "enabled"
- - zabbix_apache_can_connect_ldap | bool
+ - selinux_allow_httpd_can_connect_ldap | bool
tags:
- config
diff --git a/ansible_collections/community/zabbix/roles/zabbix_web/templates/nginx_vhost.conf.j2 b/ansible_collections/community/zabbix/roles/zabbix_web/templates/nginx_vhost.conf.j2
index 7854b83ce..c04a0712c 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_web/templates/nginx_vhost.conf.j2
+++ b/ansible_collections/community/zabbix/roles/zabbix_web/templates/nginx_vhost.conf.j2
@@ -20,7 +20,7 @@ server {
try_files $uri $uri/ =404;
}
- location /assets {
+ location /assets/ {
access_log off;
expires 10d;
}
@@ -70,9 +70,9 @@ server {
ssl_certificate {{ zabbix_web_tls_crt }};
ssl_certificate_key {{ zabbix_web_tls_key }};
- {{ (zabbix_web_ssl_cipher_suite is defined and zabbix_web_ssl_cipher_suite is not none) | ternary('', '# ') }}ssl_ciphers {{ zabbix_web_ssl_cipher_suite | default('') }}
- {{ (zabbix_web_SSLSessionCache is defined and zabbix_web_SSLSessionCache is not none) | ternary('', '# ') }}ssl_session_cache {{ zabbix_web_SSLSessionCache | default('') }}
- {{ (zabbix_web_SSLSessionCacheTimeout is defined and zabbix_web_SSLSessionCacheTimeout is not none) | ternary('', '# ') }}ssl_session_timeout {{ zabbix_web_SSLSessionCacheTimeout | default('') }}
+ {{ (zabbix_web_ssl_cipher_suite is defined and zabbix_web_ssl_cipher_suite is not none) | ternary('', '# ') }}ssl_ciphers {{ zabbix_web_ssl_cipher_suite | default('') }};
+ {{ (zabbix_web_SSLSessionCache is defined and zabbix_web_SSLSessionCache is not none) | ternary('', '# ') }}ssl_session_cache {{ zabbix_web_SSLSessionCache | default('') }};
+ {{ (zabbix_web_SSLSessionCacheTimeout is defined and zabbix_web_SSLSessionCacheTimeout is not none) | ternary('', '# ') }}ssl_session_timeout {{ zabbix_web_SSLSessionCacheTimeout | default('') }};
root /usr/share/zabbix;
index index.php;
@@ -85,7 +85,7 @@ server {
try_files $uri $uri/ =404;
}
- location /assets {
+ location /assets/ {
access_log off;
expires 10d;
}
diff --git a/ansible_collections/community/zabbix/roles/zabbix_web/vars/Debian.yml b/ansible_collections/community/zabbix/roles/zabbix_web/vars/Debian.yml
index 7b60c70bd..f49b27155 100644
--- a/ansible_collections/community/zabbix/roles/zabbix_web/vars/Debian.yml
+++ b/ansible_collections/community/zabbix/roles/zabbix_web/vars/Debian.yml
@@ -47,5 +47,4 @@ zabbix_valid_web_versions:
- 6.0
debian_keyring_path: /etc/apt/keyrings/
-zabbix_gpg_key: "{{ debian_keyring_path }}/zabbix-official-repo.asc"
-_zabbix_repo_deb_url: "http://repo.zabbix.com/zabbix/{{ zabbix_web_version }}"
+zabbix_gpg_key: "{{ debian_keyring_path }}zabbix-repo.asc"
diff --git a/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_correlation/meta/main.yml b/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_correlation/meta/main.yml
new file mode 100644
index 000000000..acdb704c8
--- /dev/null
+++ b/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_correlation/meta/main.yml
@@ -0,0 +1,3 @@
+---
+dependencies:
+ - setup_zabbix
diff --git a/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_correlation/tasks/main.yml b/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_correlation/tasks/main.yml
new file mode 100644
index 000000000..d893cbc34
--- /dev/null
+++ b/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_correlation/tasks/main.yml
@@ -0,0 +1,328 @@
+---
+- name: test - create simple correlation
+ community.zabbix.zabbix_correlation:
+ name: new event tag correlation
+ filter:
+ evaltype: and_or
+ conditions:
+ - type: new_event_tag
+ tag: ok
+ operations:
+ - type: close_old_events
+ register: zbxcorrelation_create
+
+- name: assert that correlation was created
+ ansible.builtin.assert:
+ that:
+ - zbxcorrelation_create.changed is sameas True
+
+- name: test - update simple correlation (without changes)
+ community.zabbix.zabbix_correlation:
+ name: new event tag correlation
+ filter:
+ evaltype: and_or
+ conditions:
+ - type: new_event_tag
+ tag: ok
+ operations:
+ - type: close_old_events
+ register: zbxcorrelation_create
+
+- name: assert that correlation was not updated
+ ansible.builtin.assert:
+ that:
+ - zbxcorrelation_create.changed is sameas False
+
+- name: test - update simple correlation
+ community.zabbix.zabbix_correlation:
+ name: new event tag correlation
+ filter:
+ evaltype: and_or
+ conditions:
+ - type: new_event_tag
+ tag: ng
+ operations:
+ - type: close_old_events
+ register: zbxcorrelation_create
+
+- name: assert that correlation was updated
+ ansible.builtin.assert:
+ that:
+ - zbxcorrelation_create.changed is sameas True
+
+- name: test - delete simple correlation
+ community.zabbix.zabbix_correlation:
+ name: new event tag correlation
+ state: absent
+ register: zbxcorrelation_delete
+
+- name: assert that correlation was deleted
+ ansible.builtin.assert:
+ that:
+ - zbxcorrelation_delete.changed is sameas True
+
+- name: prepare - create hostgroup
+ community.zabbix.zabbix_group:
+ host_groups:
+ - correlation_group_A
+ - correlation_group_B
+ state: present
+ register: zbxgroup_create
+
+- name: test - create custom_expression correlation
+ community.zabbix.zabbix_correlation:
+ name: new host group correlation
+ description: a custom description
+ filter:
+ evaltype: custom_expression
+ formula: A or B
+ conditions:
+ - type: new_event_host_group
+ hostgroup: correlation_group_A
+ operator: not_equal
+ formulaid: A
+ - type: new_event_host_group
+ hostgroup: correlation_group_B
+ operator: not_equal
+ formulaid: B
+ operations:
+ - type: close_old_events
+ register: zbxcorrelation_create
+
+- name: assert that correlation was created
+ ansible.builtin.assert:
+ that:
+ - zbxcorrelation_create.changed is sameas True
+
+- name: test - create custom_expression correlation (again)
+ community.zabbix.zabbix_correlation:
+ name: new host group correlation
+ description: a custom description
+ filter:
+ evaltype: custom_expression
+ formula: A or B
+ conditions:
+ - type: new_event_host_group
+ hostgroup: correlation_group_A
+ operator: not_equal
+ formulaid: A
+ - type: new_event_host_group
+ hostgroup: correlation_group_B
+ operator: not_equal
+ formulaid: B
+ operations:
+ - type: close_old_events
+ register: zbxcorrelation_create
+
+- name: assert that correlation was not updated
+ ansible.builtin.assert:
+ that:
+ - zbxcorrelation_create.changed is sameas False
+
+- name: test - delete custom_expression correlation
+ community.zabbix.zabbix_correlation:
+ name: new host group correlation
+ state: absent
+ register: zbxcorrelation_delete
+
+- name: assert that correlation was deleted
+ ansible.builtin.assert:
+ that:
+ - zbxcorrelation_delete.changed is sameas True
+
+- name: cleanup - delete hostgroup
+ community.zabbix.zabbix_group:
+ host_groups:
+ - correlation_group_A
+ - correlation_group_B
+ state: absent
+ register: zbxgroup_delete
+
+- name: test - create correlation with old_event_tag condition
+ community.zabbix.zabbix_correlation:
+ name: tag correlation
+ filter:
+ evaltype: and_or
+ conditions:
+ - type: old_event_tag
+ tag: old_tag
+ operations:
+ - type: close_old_events
+ - type: close_new_event
+ register: zbxcorrelation_create
+
+- name: assert that correlation was created
+ ansible.builtin.assert:
+ that:
+ - zbxcorrelation_create.changed is sameas True
+
+- name: test - update correlation with new_event_tag condition
+ community.zabbix.zabbix_correlation:
+ name: tag correlation
+ filter:
+ evaltype: and_or
+ conditions:
+ - type: new_event_tag
+ tag: new_tag
+ operations:
+ - type: close_old_events
+ - type: close_new_event
+ register: zbxcorrelation_update
+
+- name: assert that correlation was updated
+ ansible.builtin.assert:
+ that:
+ - zbxcorrelation_update.changed is sameas True
+
+- name: test - update correlation with event_tag_pair condition
+ community.zabbix.zabbix_correlation:
+ name: tag correlation
+ filter:
+ evaltype: and_or
+ conditions:
+ - type: event_tag_pair
+ oldtag: oldtag_pair
+ newtag: newtag_pair
+ operations:
+ - type: close_old_events
+ - type: close_new_event
+ register: zbxcorrelation_update
+
+- name: assert that correlation was updated
+ ansible.builtin.assert:
+ that:
+ - zbxcorrelation_update.changed is sameas True
+
+- name: test - update correlation with old_event_tag_value condition
+ community.zabbix.zabbix_correlation:
+ name: tag correlation
+ filter:
+ evaltype: and_or
+ conditions:
+ - type: old_event_tag_value
+ tag: old_tag_value
+ value: old
+ operator: equal
+ operations:
+ - type: close_old_events
+ - type: close_new_event
+ register: zbxcorrelation_update
+
+- name: assert that correlation was updated
+ ansible.builtin.assert:
+ that:
+ - zbxcorrelation_update.changed is sameas True
+
+- name: test - update correlation with new_event_tag_value condition
+ community.zabbix.zabbix_correlation:
+ name: tag correlation
+ filter:
+ evaltype: and_or
+ conditions:
+ - type: new_event_tag_value
+ tag: new_tag_value
+ value: new
+ operator: equal
+ operations:
+ - type: close_old_events
+ - type: close_new_event
+ register: zbxcorrelation_update
+
+- name: assert that correlation was updated
+ ansible.builtin.assert:
+ that:
+ - zbxcorrelation_update.changed is sameas True
+
+- name: test - delete tag correlation
+ community.zabbix.zabbix_correlation:
+ name: tag correlation
+ state: absent
+ register: zbxcorrelation_delete
+
+- name: assert that correlation was deleted
+ ansible.builtin.assert:
+ that:
+ - zbxcorrelation_delete.changed is sameas True
+
+- name: prepare - create hostgroup
+ community.zabbix.zabbix_group:
+ host_groups:
+ - correlation_group
+ state: present
+ register: zbxgroup_create
+
+- name: test - create host group correlation with wrong operator (like)
+ community.zabbix.zabbix_correlation:
+ name: new host group correlation
+ description: a custom description
+ filter:
+ evaltype: and_or
+ conditions:
+ - type: new_event_host_group
+ hostgroup: correlation_group
+ operator: like
+ operations:
+ - type: close_old_events
+ ignore_errors: yes
+ register: zbxcorrelation_create
+
+- name: assert that correlation was failed
+ ansible.builtin.assert:
+ that:
+ - zbxcorrelation_create is failed
+
+- name: test - create host group correlation with wrong operator (not_like)
+ community.zabbix.zabbix_correlation:
+ name: new host group correlation
+ description: a custom description
+ filter:
+ evaltype: and_or
+ conditions:
+ - type: new_event_host_group
+ hostgroup: correlation_group
+ operator: not_like
+ operations:
+ - type: close_old_events
+ ignore_errors: yes
+ register: zbxcorrelation_create
+
+- name: assert that correlation was failed
+ ansible.builtin.assert:
+ that:
+ - zbxcorrelation_create is failed
+
+- name: prepare - delete hostgroup
+ community.zabbix.zabbix_group:
+ host_groups:
+ - correlation_group
+ state: absent
+ register: zbxgroup_delete
+
+- name: test - create tag correlation with wrong formulaid
+ community.zabbix.zabbix_correlation:
+ name: new tag correlation
+ description: a custom description
+ filter:
+ evaltype: custom_expression
+ formula: a
+ conditions:
+ - type: new_event_tag_value
+ tag: new_tag_value
+ value: new
+ operator: equal
+ formulaid: a
+ operations:
+ - type: close_old_events
+ ignore_errors: yes
+ register: zbxcorrelation_create
+
+- name: assert that correlation was failed
+ ansible.builtin.assert:
+ that:
+ - zbxcorrelation_create is failed
+
+- name: test - delete custom_expression correlation
+ community.zabbix.zabbix_correlation:
+ name: new tag correlation
+ state: absent
+ register: zbxcorrelation_delete
diff --git a/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_host/tasks/zabbix_host_tests.yml b/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_host/tasks/zabbix_host_tests.yml
index a4829a051..20246a16b 100644
--- a/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_host/tasks/zabbix_host_tests.yml
+++ b/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_host/tasks/zabbix_host_tests.yml
@@ -1348,6 +1348,78 @@
ansible.builtin.assert:
that: zbx_host_create_interfaceless is not changed
+- name: "test: attempt to delete host created earlier"
+ community.zabbix.zabbix_host:
+ host_name: ExampleHost
+ state: absent
+ register: zabbix_host1
+
+- name: deleting a host is a change, right?
+ ansible.builtin.assert:
+ that:
+ - "zabbix_host1 is changed"
+
+- name: "test: create host with IPMI values"
+ community.zabbix.zabbix_host:
+ host_name: ExampleHost
+ host_groups:
+ - Linux servers
+ - Zabbix servers
+ ipmi_authtype: 1
+ ipmi_privilege: 1
+ ipmi_username: "test"
+ ipmi_password: "test"
+ register: zabbix_ipmi_host
+
+- name: expect to succeed and that things have changed
+ ansible.builtin.assert:
+ that:
+ - "zabbix_ipmi_host is changed"
+
+- name: "test: update inventory of the created host"
+ community.zabbix.zabbix_host:
+ host_name: ExampleHost
+ inventory_mode: manual
+ inventory_zabbix:
+ notes: "Update inventory"
+ register: zabbix_ipmi_host
+
+- name: expect to succeed and that things have changed
+ ansible.builtin.assert:
+ that:
+ - "zabbix_ipmi_host is changed"
+
+- name: "test: create host with IPMI values without changes"
+ community.zabbix.zabbix_host:
+ host_name: ExampleHost
+ ipmi_authtype: 1
+ ipmi_privilege: 1
+ ipmi_username: "test"
+ ipmi_password: "test"
+ register: zabbix_ipmi_host
+
+- name: expect to succeed and that things have not changed
+ ansible.builtin.assert:
+ that:
+ - "zabbix_ipmi_host is not changed"
+
+- name: "test: create host with host group(empty list)"
+ community.zabbix.zabbix_host:
+ host_name: ExampleHost
+ visible_name: ExampleName
+ description: My ExampleHost Description
+ host_groups: []
+ status: disabled
+ state: present
+ ignore_errors: true
+ register: zbx_host_create_hostgroup_empty_list
+
+- name: expect to fail updating
+ ansible.builtin.assert:
+ that:
+ - zbx_host_create_hostgroup_empty_list is failed
+ - zbx_host_create_hostgroup_empty_list.msg == "host_groups must be not empty list."
+
- name: "cleanup"
community.zabbix.zabbix_host:
host_name: ExampleHost
diff --git a/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_maintenance/tasks/main.yml b/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_maintenance/tasks/main.yml
index 1b9c6f6bd..86d511d36 100644
--- a/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_maintenance/tasks/main.yml
+++ b/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_maintenance/tasks/main.yml
@@ -273,6 +273,56 @@
# that:
# - update_maintenance_host_tags.changed is sameas false
+- name: "test - Create maintenance with an active_since param"
+ community.zabbix.zabbix_maintenance:
+ name: maintenance
+ host_name: example
+ active_since: "1979-09-19"
+ state: present
+ register: create_maintenance_active_since_result
+
+- ansible.builtin.assert:
+ that:
+ - create_maintenance_active_since_result.changed is sameas true
+
+- name: "test - Create maintenance with a active_since param(again - expectations: false change will occur)"
+ community.zabbix.zabbix_maintenance:
+ name: maintenance
+ host_name: example
+ active_since: "1979-09-19"
+ state: present
+ register: create_maintenance_active_since_again_result
+
+- ansible.builtin.assert:
+ that:
+ - create_maintenance_active_since_again_result.changed is sameas false
+
+- name: "test - Create maintenance with an active_till param"
+ community.zabbix.zabbix_maintenance:
+ name: maintenance
+ host_name: example
+ active_since: "1979-09-19 00:00"
+ active_till: "1979-09-19 23:59"
+ state: present
+ register: create_maintenance_active_till_result
+
+- ansible.builtin.assert:
+ that:
+ - create_maintenance_active_till_result.changed is sameas true
+
+- name: "test - Create maintenance with a active_till param(again - expectations: false change will occur)"
+ community.zabbix.zabbix_maintenance:
+ name: maintenance
+ host_name: example
+ active_since: "1979-09-19 00:00"
+ active_till: "1979-09-19 23:59"
+ state: present
+ register: create_maintenance_active_till_again_result
+
+- ansible.builtin.assert:
+ that:
+ - create_maintenance_active_till_again_result.changed is sameas false
+
- name: "test - Delete maintenance"
community.zabbix.zabbix_maintenance:
name: maintenance
diff --git a/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_mediatype/tasks/main.yml b/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_mediatype/tasks/main.yml
index a49166d37..1ba2f6669 100644
--- a/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_mediatype/tasks/main.yml
+++ b/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_mediatype/tasks/main.yml
@@ -114,6 +114,29 @@
- ansible.builtin.assert:
that: zbxmediatype_reset.changed is sameas True
+ - name: test - check email mediatype content_type for html default
+ community.zabbix.zabbix_mediatype:
+ content_type: "html"
+ register: zbxmediatype_verif
+
+ - ansible.builtin.assert:
+ that: zbxmediatype_verif.changed is sameas False
+
+ - name: test - update email mediatype content_type to plaintext
+ community.zabbix.zabbix_mediatype:
+ content_type: "plaintext"
+ register: zbxmediatype_verif
+
+ - ansible.builtin.assert:
+ that: zbxmediatype_verif.changed is sameas True
+
+ - name: test - reset email mediatype content_type to default
+ community.zabbix.zabbix_mediatype:
+ register: zbxmediatype_reset
+
+ - ansible.builtin.assert:
+ that: zbxmediatype_reset.changed is sameas True
+
- name: test - update email mediatype concurrent settings
community.zabbix.zabbix_mediatype:
max_sessions: 99
diff --git a/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_service_info/meta/main.yml b/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_service_info/meta/main.yml
new file mode 100644
index 000000000..acdb704c8
--- /dev/null
+++ b/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_service_info/meta/main.yml
@@ -0,0 +1,3 @@
+---
+dependencies:
+ - setup_zabbix
diff --git a/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_service_info/tasks/main.yml b/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_service_info/tasks/main.yml
new file mode 100644
index 000000000..77c244df8
--- /dev/null
+++ b/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_service_info/tasks/main.yml
@@ -0,0 +1,57 @@
+---
+- name: test - Create new Zabbix service
+ community.zabbix.zabbix_service:
+ name: ExampleService
+ description: ExampleService
+ sortorder: 0
+ propagation_rule: as_is
+ propagation_value: not_classified
+ algorithm: most_crit_of_child_serv
+ register: create_service_result
+
+- ansible.builtin.assert:
+ that:
+ - create_service_result.changed is sameas true
+
+- name: test - Create new Zabbix child service
+ community.zabbix.zabbix_service:
+ name: ExampleChildService
+ description: ExampleChildService
+ sortorder: 0
+ propagation_rule: as_is
+ propagation_value: not_classified
+ parents: ExampleService
+ problem_tags:
+ - tag: testtag
+ value: test
+ register: create_child_result
+
+- ansible.builtin.assert:
+ that:
+ - create_child_result.changed is sameas true
+
+- name: test - Get zabbix service information
+ community.zabbix.zabbix_service_info:
+ service_name: ExampleService
+ register: get_service_info_result
+
+- ansible.builtin.assert:
+ that:
+ - get_service_info_result["zabbix_service"].name == "ExampleService"
+ - get_service_info_result["zabbix_service"].children | length > 0
+ - get_service_info_result["zabbix_service"].children[0].name == "ExampleChildService"
+ - get_service_info_result["zabbix_service"].propagation_rule == "0"
+ - get_service_info_result["zabbix_service"].propagation_value == "0"
+ - get_service_info_result["zabbix_service"].sortorder == "0"
+
+- name: test - cleanup test Zabbix child service
+ community.zabbix.zabbix_service:
+ state: absent
+ sortorder: 0
+ name: ExampleChildService
+
+- name: test - cleanup test Zabbix service
+ community.zabbix.zabbix_service:
+ state: absent
+ sortorder: 0
+ name: ExampleService
diff --git a/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_template/files/template4_60_higher.json b/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_template/files/template4_60_higher.json
new file mode 100644
index 000000000..7d4c37a52
--- /dev/null
+++ b/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_template/files/template4_60_higher.json
@@ -0,0 +1,49 @@
+{
+ "zabbix_export": {
+ "version": "6.0",
+ "date": "2024-01-04T18:26:37Z",
+ "groups": [
+ {
+ "uuid": "7df96b18c230490a9a0a9e2307226338",
+ "name": "Templates"
+ },
+ {
+ "uuid": "a571c0d144b14fd4a87a9d9b2aa9fcd6",
+ "name": "Templates/Applications"
+ }
+ ],
+ "templates": [
+ {
+ "uuid": "cd837ef0edb14e4e875f409bc90af546",
+ "template": "ExampleTemplate",
+ "name": "ExampleTemplate",
+ "templates": [
+ {
+ "name": "FTP Service"
+ },
+ {
+ "name": "Zabbix proxy health"
+ }
+ ],
+ "groups": [
+ {
+ "name": "Templates"
+ },
+ {
+ "name": "Templates/Applications"
+ }
+ ],
+ "macros": [
+ {
+ "macro": "{$EXAMPLE_MACRO1}",
+ "value": "1000"
+ },
+ {
+ "macro": "{$EXAMPLE_MACRO2}",
+ "value": "text"
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_template/files/template4_60_higher.xml b/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_template/files/template4_60_higher.xml
new file mode 100644
index 000000000..3d423c692
--- /dev/null
+++ b/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_template/files/template4_60_higher.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<zabbix_export>
+ <version>6.0</version>
+ <date>2024-01-04T18:26:29Z</date>
+ <groups>
+ <group>
+ <uuid>7df96b18c230490a9a0a9e2307226338</uuid>
+ <name>Templates</name>
+ </group>
+ <group>
+ <uuid>a571c0d144b14fd4a87a9d9b2aa9fcd6</uuid>
+ <name>Templates/Applications</name>
+ </group>
+ </groups>
+ <templates>
+ <template>
+ <uuid>cd837ef0edb14e4e875f409bc90af546</uuid>
+ <template>ExampleTemplate</template>
+ <name>ExampleTemplate</name>
+ <templates>
+ <template>
+ <name>FTP Service</name>
+ </template>
+ <template>
+ <name>Zabbix proxy health</name>
+ </template>
+ </templates>
+ <groups>
+ <group>
+ <name>Templates</name>
+ </group>
+ <group>
+ <name>Templates/Applications</name>
+ </group>
+ </groups>
+ <macros>
+ <macro>
+ <macro>{$EXAMPLE_MACRO1}</macro>
+ <value>1000</value>
+ </macro>
+ <macro>
+ <macro>{$EXAMPLE_MACRO2}</macro>
+ <value>text</value>
+ </macro>
+ </macros>
+ </template>
+ </templates>
+</zabbix_export>
diff --git a/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_template/files/template4_60_higher.yaml b/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_template/files/template4_60_higher.yaml
new file mode 100644
index 000000000..0112b1fc7
--- /dev/null
+++ b/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_template/files/template4_60_higher.yaml
@@ -0,0 +1,23 @@
+zabbix_export:
+ version: '6.0'
+ date: '2024-01-04T18:26:17Z'
+ groups:
+ - uuid: 7df96b18c230490a9a0a9e2307226338
+ name: Templates
+ - uuid: a571c0d144b14fd4a87a9d9b2aa9fcd6
+ name: Templates/Applications
+ templates:
+ - uuid: cd837ef0edb14e4e875f409bc90af546
+ template: ExampleTemplate
+ name: ExampleTemplate
+ templates:
+ - name: 'FTP Service'
+ - name: 'Zabbix proxy health'
+ groups:
+ - name: Templates
+ - name: Templates/Applications
+ macros:
+ - macro: '{$EXAMPLE_MACRO1}'
+ value: '1000'
+ - macro: '{$EXAMPLE_MACRO2}'
+ value: text
diff --git a/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_template/tasks/main.yml b/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_template/tasks/main.yml
index 69aabe6b0..ce02916ee 100644
--- a/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_template/tasks/main.yml
+++ b/ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_template/tasks/main.yml
@@ -370,6 +370,83 @@
- delete_zabbix_template_result.changed is sameas false
#
+# template_file_context parameter
+#
+
+- name: Import Zabbix template from a file using configuration.importcompare api
+ block:
+ - name: Import Zabbix template from YAML file.
+ community.zabbix.zabbix_template:
+ template_yaml: "{{ lookup('file', 'template4_60_higher.yaml') }}"
+ state: present
+ register: import_template_yaml
+
+ - ansible.builtin.assert:
+ that:
+ - import_template_xml.changed is sameas true
+
+ - name: Import Zabbix same template from XML file.
+ community.zabbix.zabbix_template:
+ template_xml: "{{ lookup('file', 'template4_60_higher.xml') }}"
+ state: present
+ register: import_same_template_xml
+
+ - ansible.builtin.assert:
+ that:
+ - import_same_template_xml.changed is sameas false
+
+ - name: Delete Zabbix template.
+ community.zabbix.zabbix_template:
+ template_name: ExampleTemplate
+ state: absent
+ register: delete_zabbix_template_result
+
+ - ansible.builtin.assert:
+ that:
+ - delete_zabbix_template_result.changed is sameas true
+
+ - name: Import Zabbix same template from XML file (after deleting template).
+ community.zabbix.zabbix_template:
+ template_xml: "{{ lookup('file', 'template4_60_higher.xml') }}"
+ state: present
+ register: import_same_template_xml
+
+ - ansible.builtin.assert:
+ that:
+ - import_same_template_xml.changed is sameas true
+
+ - name: Import Zabbix same template from JSON file.
+ community.zabbix.zabbix_template:
+ template_json: "{{ lookup('file', 'template4_60_higher.json') }}"
+ state: present
+ register: import_same_template_json
+
+ - ansible.builtin.assert:
+ that:
+ - import_same_template_json.changed is sameas false
+
+ - name: Delete Zabbix template.
+ community.zabbix.zabbix_template:
+ template_name: ExampleTemplate
+ state: absent
+ register: delete_zabbix_template_result
+
+ - ansible.builtin.assert:
+ that:
+ - delete_zabbix_template_result.changed is sameas true
+
+ - name: Delete Zabbix template (idempotency check).
+ community.zabbix.zabbix_template:
+ template_name: ExampleTemplate
+ state: absent
+ register: delete_zabbix_template_result
+
+ - ansible.builtin.assert:
+ that:
+ - delete_zabbix_template_result.changed is sameas false
+
+
+#
# Unicode stuff
#
diff --git a/ansible_collections/dellemc/openmanage/.ansible-lint-ignore b/ansible_collections/dellemc/openmanage/.ansible-lint-ignore
index 78ed06cb2..0ff93efe7 100644
--- a/ansible_collections/dellemc/openmanage/.ansible-lint-ignore
+++ b/ansible_collections/dellemc/openmanage/.ansible-lint-ignore
@@ -9,6 +9,7 @@ roles/redfish_storage_volume/molecule/RAID5/converge.yml var-naming[no-role-pref
roles/redfish_storage_volume/molecule/RAID10/converge.yml var-naming[no-role-prefix]
roles/redfish_storage_volume/molecule/RAID50/converge.yml var-naming[no-role-prefix]
roles/redfish_storage_volume/molecule/__delete_virtual_drive.yml var-naming[no-role-prefix]
+roles/redfish_storage_volume/molecule/__create_virtual_drive.yml var-naming[no-role-prefix]
roles/redfish_storage_volume/molecule/__idrac_reset.yml var-naming[no-role-prefix]
roles/redfish_storage_volume/molecule/apply_time_default/converge.yml var-naming[no-role-prefix]
roles/redfish_storage_volume/molecule/apply_time_immediate/converge.yml var-naming[no-role-prefix]
@@ -45,6 +46,10 @@ roles/idrac_job_queue/molecule/default/converge.yml var-naming[no-role-prefix]
roles/idrac_job_queue/molecule/clear_job_queue/converge.yml var-naming[no-role-prefix]
roles/idrac_import_server_config_profile/molecule/resources/tests/prepare.yml var-naming[no-role-prefix]
+roles/idrac_import_server_config_profile/molecule/resources/tests/cleanup.yml var-naming[no-role-prefix]
+roles/idrac_import_server_config_profile/molecule/resources/tests/export.yml var-naming[no-role-prefix]
+roles/idrac_import_server_config_profile/molecule/resources/tests/nic_helper.yml var-naming[no-role-prefix]
+roles/idrac_import_server_config_profile/molecule/resources/tests/raid_helper.yml var-naming[no-role-prefix]
roles/idrac_import_server_config_profile/molecule/nfs_share/converge.yml var-naming[no-role-prefix]
roles/idrac_import_server_config_profile/molecule/import_multiple_target/converge.yml var-naming[no-role-prefix]
roles/idrac_import_server_config_profile/molecule/import_buffer_xml/converge.yml var-naming[no-role-prefix]
@@ -120,3 +125,16 @@ roles/idrac_attributes/molecule/default/converge.yml var-naming[no-role-prefix]
roles/idrac_attributes/molecule/idrac_attr/converge.yml var-naming[no-role-prefix]
roles/idrac_attributes/molecule/lifecycle_controller_attr/converge.yml var-naming[no-role-prefix]
roles/idrac_attributes/molecule/system_attr/converge.yml var-naming[no-role-prefix]
+
+roles/idrac_user/defaults/main.yml var-naming[no-role-prefix]
+roles/idrac_user/molecule/TC-152120/converge.yml var-naming[no-role-prefix]
+roles/idrac_user/molecule/TC-152146/converge.yml var-naming[no-role-prefix]
+roles/idrac_user/molecule/TC-152147/converge.yml var-naming[no-role-prefix]
+roles/idrac_user/molecule/TC-152148/converge.yml var-naming[no-role-prefix]
+roles/idrac_user/molecule/TC-152148/prepare.yml var-naming[no-role-prefix]
+roles/idrac_user/molecule/TC-152149/converge.yml var-naming[no-role-prefix]
+roles/idrac_user/molecule/TC-152149/prepare.yml var-naming[no-role-prefix]
+roles/idrac_user/molecule/TC-152150/converge.yml var-naming[no-role-prefix]
+roles/idrac_user/molecule/TC-152150/prepare.yml var-naming[no-role-prefix]
+roles/idrac_user/molecule/default/converge.yml var-naming[no-role-prefix]
+roles/idrac_user/molecule/resources/idrac_user/cleanup.yml var-naming[no-role-prefix]
diff --git a/ansible_collections/dellemc/openmanage/.github/workflows/ansible-test.yml b/ansible_collections/dellemc/openmanage/.github/workflows/ansible-test.yml
index 33251a189..3e0089fc4 100644
--- a/ansible_collections/dellemc/openmanage/.github/workflows/ansible-test.yml
+++ b/ansible_collections/dellemc/openmanage/.github/workflows/ansible-test.yml
@@ -15,7 +15,7 @@ jobs:
strategy:
fail-fast: false
matrix:
- ansible-version: [stable-2.14, stable-2.15, stable-2.16, devel]
+ ansible-version: [stable-2.15, stable-2.16, stable-2.17, devel]
steps:
- name: Check out code
uses: actions/checkout@v3
@@ -47,17 +47,12 @@ jobs:
needs: [build]
strategy:
matrix:
- python: ['3.9', '3.10', '3.11']
+ python: ['3.10', '3.11']
ansible:
- - stable-2.14
- stable-2.15
- stable-2.16
+ - stable-2.17
- devel
- exclude:
- - ansible: stable-2.16
- python: '3.9'
- - ansible: devel
- python: '3.9'
runs-on: ubuntu-latest
steps:
@@ -79,17 +74,12 @@ jobs:
needs: [build]
strategy:
matrix:
- python: ['3.9', '3.10', '3.11']
+ python: ['3.10', '3.11']
ansible:
- - stable-2.14
- stable-2.15
- stable-2.16
+ - stable-2.17
- devel
- exclude:
- - ansible: stable-2.16
- python: '3.9'
- - ansible: devel
- python: '3.9'
runs-on: ubuntu-latest
steps:
- name: Perform sanity testing
@@ -108,13 +98,8 @@ jobs:
strategy:
fail-fast: false
matrix:
- python-version: ['3.9', '3.10', '3.11']
- ansible-version: [stable-2.14, stable-2.15, stable-2.16, devel]
- exclude:
- - ansible-version: stable-2.16
- python-version: '3.9'
- - ansible-version: devel
- python-version: '3.9'
+ python-version: ['3.10', '3.11']
+ ansible-version: [stable-2.15, stable-2.16, stable-2.17, devel]
steps:
# Important: This sets up your GITHUB_WORKSPACE environment variable
- name: Checkout the source code
diff --git a/ansible_collections/dellemc/openmanage/CHANGELOG.rst b/ansible_collections/dellemc/openmanage/CHANGELOG.rst
index bb78b5c2d..1620e6974 100644
--- a/ansible_collections/dellemc/openmanage/CHANGELOG.rst
+++ b/ansible_collections/dellemc/openmanage/CHANGELOG.rst
@@ -5,6 +5,118 @@ Dell OpenManage Ansible Modules Release Notes
.. contents:: Topics
+v9.2.0
+======
+
+Release Summary
+---------------
+
+- The idrac_session module is added to allow you to create and delete the sessions on iDRAC.
+- The idrac_reset module is enhanced to allow you to reset the iDRAC to factory default settings.
+
+Major Changes
+-------------
+
+- idrac_session - This module allows you to create and delete the sessions on iDRAC.
+
+Minor Changes
+-------------
+
+- idrac_reset - This module allows you to reset the iDRAC to factory default settings.
+
+Known Issues
+------------
+
+- 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_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_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 Modules
+-----------
+
+- dellemc.openmanage.idrac_session - Allows you to create and delete the sessions on iDRAC.
+
+v9.1.0
+======
+
+Release Summary
+---------------
+
+- ``redfish_storage_volume`` is enhanced to support iDRAC8.
+- ``dellemc_idrac_storage_module`` is deprecated and replaced with ``idrac_storage_volume``.
+
+Minor Changes
+-------------
+
+- redfish_storage_volume - This module is enhanced to support iDRAC8.
+
+Deprecated Features
+-------------------
+
+- The ``dellemc_idrac_storage_volume`` module is deprecated and replaced with ``idrac_storage_volume``.
+
+Bugfixes
+--------
+
+- Added support for RAID creation using NVMe disks.(https://github.com/dell/dellemc-openmanage-ansible-modules/issues/635)
+- redfish_storage_volume is enhanced to support iDRAC8.(https://github.com/dell/dellemc-openmanage-ansible-modules/issues/625)
+
+Known Issues
+------------
+
+- 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_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_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 Modules
+-----------
+
+- dellemc.openmanage.idrac_storage_volume - Configures the RAID configuration attributes.
+
+v9.0.0
+======
+
+Release Summary
+---------------
+
+- idrac_diagnostics module is added to run and export diagnostics on iDRAC.
+- idrac_user role is added to manage local users of iDRAC.
+
+Major Changes
+-------------
+
+- idrac_diagnostics - The module is introduced to run and export diagnostics on iDRAC.
+- idrac_user - This role is introduced to manage local users of iDRAC.
+
+Bugfixes
+--------
+
+- 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.``
+
+Known Issues
+------------
+
+- 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.
+- 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 Modules
+-----------
+
+- dellemc.openmanage.idrac_diagnostics - This module allows to run and export diagnostics on iDRAC.
+
+New Roles
+---------
+
+- dellemc.openmanage.idrac_user - Role to manage local users of iDRAC.
+
v8.7.0
======
diff --git a/ansible_collections/dellemc/openmanage/FILES.json b/ansible_collections/dellemc/openmanage/FILES.json
index db8150b4c..cd6b8725e 100644
--- a/ansible_collections/dellemc/openmanage/FILES.json
+++ b/ansible_collections/dellemc/openmanage/FILES.json
@@ -15,13 +15,6 @@
"format": 1
},
{
- "name": ".ansible-lint-ignore",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2b4cb17a21587a17f096001e3cbd9e8b019a667eb724cf01396a35ff5bad2558",
- "format": 1
- },
- {
"name": ".github",
"ftype": "dir",
"chksum_type": null,
@@ -88,7 +81,7 @@
"name": ".github/workflows/ansible-test.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "24f87fbc03181be62e4cedf4a463ea5eaab0b5bd4ec68d762a2647015712cd5a",
+ "chksum_sha256": "d797937de9e579f1ecc980d7db21d2e3d36055f4212cad8103d4dba0d7d140cd",
"format": 1
},
{
@@ -99,13 +92,6 @@
"format": 1
},
{
- "name": "CHANGELOG.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0b095556983a9c9b8a231db06b80b6b529483932af3c6978be58d7b53e9dcc56",
- "format": 1
- },
- {
"name": "LICENSE",
"ftype": "file",
"chksum_type": "sha256",
@@ -113,13 +99,6 @@
"format": 1
},
{
- "name": "README.md",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f780a795a434441926ca75949a5675e2f7d2f40378e87d4ac6e918b70e6dd312",
- "format": 1
- },
- {
"name": "bindep.txt",
"ftype": "file",
"chksum_type": "sha256",
@@ -141,17 +120,17 @@
"format": 1
},
{
- "name": "changelogs/changelog.yaml",
+ "name": "changelogs/config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a90add93498588062af0df9b8d61283c97523cd1d53e278a5f82826d90bd0b54",
+ "chksum_sha256": "c00012f627317aec0a7b0b4db3da8c43eb7eb63188eb3f7ee8c2319692aab2d7",
"format": 1
},
{
- "name": "changelogs/config.yaml",
+ "name": "changelogs/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c00012f627317aec0a7b0b4db3da8c43eb7eb63188eb3f7ee8c2319692aab2d7",
+ "chksum_sha256": "743a69fffd94987fc63c58c728271c10cd363eff555161aef6d6a45d70300b3d",
"format": 1
},
{
@@ -211,13 +190,6 @@
"format": 1
},
{
- "name": "docs/EXECUTION_ENVIRONMENT.md",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f2e0b86dc19b76449e3bee834de2cadf3df5155623884753da9b03ae69b5b223",
- "format": 1
- },
- {
"name": "docs/ISSUE_TRIAGE.md",
"ftype": "file",
"chksum_type": "sha256",
@@ -232,13 +204,6 @@
"format": 1
},
{
- "name": "docs/README.md",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8be88ea146508ad7565154a1fb86d5d52f69f55e2ef0eca32402083a1e8e14fc",
- "format": 1
- },
- {
"name": "docs/SECURITY.md",
"ftype": "file",
"chksum_type": "sha256",
@@ -400,10 +365,10 @@
"format": 1
},
{
- "name": "docs/modules/idrac_reset.rst",
+ "name": "docs/modules/idrac_session.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4f08e626ca74cd6d0dab35f749fcd6878e90118a4d1053ebf45e45685fd0dc8d",
+ "chksum_sha256": "b76827433fbcff22ddf95bc5632868b72cf395f419840c4e12d5373142c0f72c",
"format": 1
},
{
@@ -519,10 +484,10 @@
"format": 1
},
{
- "name": "docs/modules/ome_application_console_preferences.rst",
+ "name": "docs/modules/ome_device_local_access_configuration.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ca4376734fb3ae51179cb231bb2e8a0b6e128056f277a75a00fa00d5dcbe0248",
+ "chksum_sha256": "d1166a89877d55ff1b942027f2027cd5509c8270f62ba4f5f1824317789f90b8",
"format": 1
},
{
@@ -603,10 +568,10 @@
"format": 1
},
{
- "name": "docs/modules/ome_device_local_access_configuration.rst",
+ "name": "docs/modules/ome_devices.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6a7cc7259449e562a31a750dcb902c30af50ef1416f53c4ec4bcc3c143221443",
+ "chksum_sha256": "83328a82404890d15c1d5b6bdd0e8bfac5c9aca355fa3df468bdc744622fc439",
"format": 1
},
{
@@ -641,14 +606,14 @@
"name": "docs/modules/ome_device_quick_deploy.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e98c65583cb4ca7fdddebf1f33b91ffdc2f00fdf3b0dcc67782551e8cac0b577",
+ "chksum_sha256": "87e3c3bc99c687465681a9ab0001ab2fae508969f750fb1cd3fc475db7fd8491",
"format": 1
},
{
- "name": "docs/modules/ome_devices.rst",
+ "name": "docs/modules/idrac_reset.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b3a493600c1706800ff504b61724823017744ff0336509b0edf555957105e9c0",
+ "chksum_sha256": "3fd35275a4b04236ac8166c50d34316ac0568d857e2a031478f31700458bb6c0",
"format": 1
},
{
@@ -893,7 +858,49 @@
"name": "docs/modules/redfish_storage_volume.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b32f32754226f2ac4dfbad0a6c4b156c8f5c1692d016b6e6c3208e7f9e94881c",
+ "chksum_sha256": "f08222e870ac987aa36b3b1f57b848ad595e876eee376b98bb9450f9a723ab67",
+ "format": 1
+ },
+ {
+ "name": "docs/modules/idrac_diagnostics.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "dbabe7fd2ab37c6d7b1ced5ff8d6786bacd77162473c5064ddab94b060378c6b",
+ "format": 1
+ },
+ {
+ "name": "docs/modules/idrac_storage_volume.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d9f99982eda9f2b90ce1ee0eb805a56bc6d97eaa6935efdefefd20584a181ef3",
+ "format": 1
+ },
+ {
+ "name": "docs/modules/ome_application_console_preferences.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b64935ad594dde5a7496c90891053dbc8b32e21a5d582532bee85dcaf3fea42e",
+ "format": 1
+ },
+ {
+ "name": "docs/ATTRIBUTION.md",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0e55990cf8c6c469b4c35f0cf9ba6dd92d89f39d36e8d22f45a939a6edd06c20",
+ "format": 1
+ },
+ {
+ "name": "docs/EXECUTION_ENVIRONMENT.md",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c853f1c80c075bc775ec977562ae868177567256bef9d69543f6519cfd7b852a",
+ "format": 1
+ },
+ {
+ "name": "docs/README.md",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7e931cceff02aadb24f0f4afa56b4e1283505d82cbd41d1f535aabd3a58bf8c9",
"format": 1
},
{
@@ -914,7 +921,7 @@
"name": "meta/runtime.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b20215f8fccdf256ff05c7e1b24161dfac781b8fda913345dad2828a180a54b7",
+ "chksum_sha256": "dac8ac908fdd6b7bffe4a091c3f443b45716b1bc591e80cae03270731ef62598",
"format": 1
},
{
@@ -932,13 +939,6 @@
"format": 1
},
{
- "name": "playbooks/idrac/dellemc_idrac_storage_volume.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9903d13a50785663a1e781690f981645334d81e112a6872865118b6bac24a52e",
- "format": 1
- },
- {
"name": "playbooks/idrac/deprecated",
"ftype": "dir",
"chksum_type": null,
@@ -1100,13 +1100,6 @@
"format": 1
},
{
- "name": "playbooks/idrac/idrac_reset.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d2e2806fc4f6d092db801230b3ed1a437edae17bf98590b3ef7de0692fb0b2e0",
- "format": 1
- },
- {
"name": "playbooks/idrac/idrac_reset_result_tracking.yml",
"ftype": "file",
"chksum_type": "sha256",
@@ -1156,6 +1149,34 @@
"format": 1
},
{
+ "name": "playbooks/idrac/idrac_diagnostics.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f14fa78ada0d1c85ecd18419f0ec1940cbd387af3fd35e78da2e676228ed897e",
+ "format": 1
+ },
+ {
+ "name": "playbooks/idrac/idrac_storage_volume.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "739c488df021adb4d9cf2f8843dd4314bdad00f4076e22c2e0580d2d8b08ba7d",
+ "format": 1
+ },
+ {
+ "name": "playbooks/idrac/idrac_reset.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "de8fe2c4ad4c761b39cd3f2f26a33de198d13764460cd4ae48ddc41e3055c129",
+ "format": 1
+ },
+ {
+ "name": "playbooks/idrac/idrac_session.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b0440a47587c5d5ddb9912b53731727e93d0b889c12241594343f919d22f5bda",
+ "format": 1
+ },
+ {
"name": "playbooks/ome",
"ftype": "dir",
"chksum_type": null,
@@ -1317,17 +1338,17 @@
"format": 1
},
{
- "name": "playbooks/ome/compliance/ome_configuration_compliance_baseline_workflow.yml",
+ "name": "playbooks/ome/compliance/ome_configuration_compliance_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6fb650fdb90cefcbc32a59f7fc5facf3413f43908a40bdbd93bde43f3570de8a",
+ "chksum_sha256": "e248d9baf3d9a443dd968b7dea92c70aba87d542b52a34d692daf7c3f595587e",
"format": 1
},
{
- "name": "playbooks/ome/compliance/ome_configuration_compliance_info.yml",
+ "name": "playbooks/ome/compliance/ome_configuration_compliance_baseline_workflow.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e248d9baf3d9a443dd968b7dea92c70aba87d542b52a34d692daf7c3f595587e",
+ "chksum_sha256": "bc42c37b1f2c9492b5b297c8245fc6836f4ae89dcdfebeaf958bce0847df6f73",
"format": 1
},
{
@@ -2213,17 +2234,31 @@
"format": 1
},
{
- "name": "plugins",
+ "name": "playbooks/roles/vars_files/user.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4dbddb5c3dedb08b2a42e3b2131cb515bca4ae9d83ae4a28a17ff4919993b587",
+ "format": 1
+ },
+ {
+ "name": "playbooks/roles/idrac_user",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/README.md",
+ "name": "playbooks/roles/idrac_user/idrac_user.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aaa3a9ba0daeec5a41786ee8e307e4663217563d1b1cdd1adf2cd4813ab6e9d0",
+ "chksum_sha256": "44346ffd0acd7bc28a4b0760772385552686673dc6421947e1b6d2a916b6e5b2",
+ "format": 1
+ },
+ {
+ "name": "plugins",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
@@ -2311,13 +2346,6 @@
"format": 1
},
{
- "name": "plugins/module_utils/dellemc_idrac.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3d9f01ddb66c08650f51804e15be43c971f57e8f7960b9e8eb755b1694f655f3",
- "format": 1
- },
- {
"name": "plugins/module_utils/idrac_redfish.py",
"ftype": "file",
"chksum_type": "sha256",
@@ -2339,10 +2367,24 @@
"format": 1
},
{
+ "name": "plugins/module_utils/dellemc_idrac.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e60a6661de248b2be11330274cecf6af56989f04388f210ed3a6cf28753b57ee",
+ "format": 1
+ },
+ {
"name": "plugins/module_utils/utils.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9b089f767c4d9c3d6f396ddcfb50b7ee3280f4f9f4350171ef445d0f20f1abb6",
+ "chksum_sha256": "f5b4aa1d4f6bcdf22373061d2dd5d1f873f6cf277c3caded38c75c69d97f6556",
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils/session_utils.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "70a20d812a16708506bdd018e08bd378ed96d3906aa627b3f43c45c5ab1e6a55",
"format": 1
},
{
@@ -2381,10 +2423,10 @@
"format": 1
},
{
- "name": "plugins/modules/dellemc_idrac_storage_volume.py",
+ "name": "plugins/modules/redfish_storage_volume.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "33401cd52a68385aba75f18e26cb79b0a6dd180a9d6f7770a14adb86ea65c8ec",
+ "chksum_sha256": "0c385c1f8206967b4b3a955e4cbe107df5895ee36a7653b87b41c07ac152f634",
"format": 1
},
{
@@ -2500,17 +2542,10 @@
"format": 1
},
{
- "name": "plugins/modules/idrac_reset.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "68fb61b540612a4ac7c86874e56fdeb1bb706d8dc7df382af6ec6060081ce69c",
- "format": 1
- },
- {
- "name": "plugins/modules/idrac_server_config_profile.py",
+ "name": "plugins/modules/idrac_session.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "175505c7f6ed9b09a2b1998e0c9dc44ccb619218ed4ac1a665e955b7d2c8b686",
+ "chksum_sha256": "70dedb6e3721bd47cdd4d1d8c058eb0db343c2217c6f5e742b40cea43939e40c",
"format": 1
},
{
@@ -2619,10 +2654,10 @@
"format": 1
},
{
- "name": "plugins/modules/ome_application_console_preferences.py",
+ "name": "plugins/modules/ome_device_local_access_configuration.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e35ef322bf87e64517906464c5c605ac560dbefe3a5d93acbb63c5388401b192",
+ "chksum_sha256": "3d3d5e42de5fdb980d19d4f943d725b75145cc112ed42a2524209c65cd66148d",
"format": 1
},
{
@@ -2703,10 +2738,10 @@
"format": 1
},
{
- "name": "plugins/modules/ome_device_local_access_configuration.py",
+ "name": "plugins/modules/ome_device_quick_deploy.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0a00d9f17e5021eb03f67917415d1953bb64b3e9b5dbcbe9356d81f72115f9a2",
+ "chksum_sha256": "65d68eb6d1902ba5c818a0eab913cea192c68d807fd455bd74303fbfe31e7757",
"format": 1
},
{
@@ -2738,17 +2773,17 @@
"format": 1
},
{
- "name": "plugins/modules/ome_device_quick_deploy.py",
+ "name": "plugins/modules/ome_devices.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5b702d20b9e2474c9ca9bc14f86c6fb6d7dc80350e77435ec6519e9976bd9627",
+ "chksum_sha256": "c94ff76fa306c5469bc5930c58f64b4e2423a76c835ed19cd315173e673601ee",
"format": 1
},
{
- "name": "plugins/modules/ome_devices.py",
+ "name": "plugins/modules/idrac_reset.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "792fd9d7344be270366daed2872417a3e76e367667ac7c4c24dcb08b1119e284",
+ "chksum_sha256": "0bb2201ed119d6e26aa583427820f4d9b440c4489ad354a8508ed3ae96edee30",
"format": 1
},
{
@@ -2990,17 +3025,45 @@
"format": 1
},
{
- "name": "plugins/modules/redfish_storage_volume.py",
+ "name": "plugins/modules/idrac_diagnostics.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "43bc45da1a74df993f68a839aa1e4c743e0d774bd19e318f0e48abca127f51fa",
+ "chksum_sha256": "cc28820b11d8e6622f429ef77484778b0b9fa9a5d6d4fe559a58fba978fe724f",
"format": 1
},
{
- "name": "requirements.txt",
+ "name": "plugins/modules/dellemc_idrac_storage_volume.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4e9530ae54ec5e0e70142ae0c6585cd78af2ce511f24dd829affb0ba719424b3",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/idrac_server_config_profile.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2158f3770b7aea8dfffc46bcea4a960857805a25df674e584c0c3c863dd1c04b",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/idrac_storage_volume.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b94ebb86f37b60cfcc1d06f924079bdb5502583c63b10dfc9b8eb6683fd02551",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/ome_application_console_preferences.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1eb0dd33e5b833a1688dee170db6e84abaebaea1b38f73908013fd2ca74817a8",
+ "format": 1
+ },
+ {
+ "name": "plugins/README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d9edf1a05b19caf48aab674c2d9e34c1b817a9b480255e91b73cf0f41e401b96",
+ "chksum_sha256": "bf8697057933ae95e9172b8fb6da9907557f5f086ed7e91da850a2fb573fcf9d",
"format": 1
},
{
@@ -3350,7 +3413,7 @@
"name": "roles/idrac_bios/molecule/clear_pending_attributes/prepare.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b18eaefea67777d2cca717116654500a21607506a8097e180d6b91346f88f687",
+ "chksum_sha256": "789337cedb7a0e5f33484b00e7a4c9cbe40cb133841e1656f18cff08f042d7af",
"format": 1
},
{
@@ -3382,17 +3445,17 @@
"format": 1
},
{
- "name": "roles/idrac_bios/molecule/negative_scenarios_with_maintenance_window/converge.yml",
+ "name": "roles/idrac_bios/molecule/negative_scenarios_with_maintenance_window/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d905bfe4faacf3a7e02a41f538327385ba1dc7bf778a95bf2787447a404db67d",
+ "chksum_sha256": "1c3ff5ada33af88f7d89035e74a24e9f7ebd0bd1ce9aea711a11e456babcedeb",
"format": 1
},
{
- "name": "roles/idrac_bios/molecule/negative_scenarios_with_maintenance_window/molecule.yml",
+ "name": "roles/idrac_bios/molecule/negative_scenarios_with_maintenance_window/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1c3ff5ada33af88f7d89035e74a24e9f7ebd0bd1ce9aea711a11e456babcedeb",
+ "chksum_sha256": "b9d44e3bf2e9c3dd4a24b59e4b33228d23fca8428f4060d6ace4a7e884fe469e",
"format": 1
},
{
@@ -3690,17 +3753,17 @@
"format": 1
},
{
- "name": "roles/idrac_boot/molecule/boot_options_using_boot_option_reference_enabled_true/converge.yml",
+ "name": "roles/idrac_boot/molecule/boot_options_using_boot_option_reference_enabled_true/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fcfcac8b7c470be7db84a5ed8c0b958c6a056d0ef05b2873f81eededd75a3ed9",
+ "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090",
"format": 1
},
{
- "name": "roles/idrac_boot/molecule/boot_options_using_boot_option_reference_enabled_true/molecule.yml",
+ "name": "roles/idrac_boot/molecule/boot_options_using_boot_option_reference_enabled_true/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090",
+ "chksum_sha256": "ab30d143cf010145f94f14c05cab91120f717be0cffadc9f348daffa7ac0e8ff",
"format": 1
},
{
@@ -3711,17 +3774,17 @@
"format": 1
},
{
- "name": "roles/idrac_boot/molecule/boot_options_using_display_name_enabled_false/converge.yml",
+ "name": "roles/idrac_boot/molecule/boot_options_using_display_name_enabled_false/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4123a151aeef273229f90ea9d97454a56c6bc2614ab1b82e46d1b5a63bf4ead6",
+ "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090",
"format": 1
},
{
- "name": "roles/idrac_boot/molecule/boot_options_using_display_name_enabled_false/molecule.yml",
+ "name": "roles/idrac_boot/molecule/boot_options_using_display_name_enabled_false/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090",
+ "chksum_sha256": "105480778b833d51453b2b22e7ac419eb3865b523bd5f979789e66feaa46c4db",
"format": 1
},
{
@@ -3732,17 +3795,17 @@
"format": 1
},
{
- "name": "roles/idrac_boot/molecule/boot_order_using_legacy_mode_force_restart/converge.yml",
+ "name": "roles/idrac_boot/molecule/boot_order_using_legacy_mode_force_restart/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bf2c97a9b021ec60a46c21fb122c575cf5a4c5cb931ca25deb80d8a3af1e4df3",
+ "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090",
"format": 1
},
{
- "name": "roles/idrac_boot/molecule/boot_order_using_legacy_mode_force_restart/molecule.yml",
+ "name": "roles/idrac_boot/molecule/boot_order_using_legacy_mode_force_restart/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090",
+ "chksum_sha256": "808af97a5a234940ab3c38a93c54f4a164b7cb52ee47107137cc4555b53e9a1d",
"format": 1
},
{
@@ -3753,17 +3816,17 @@
"format": 1
},
{
- "name": "roles/idrac_boot/molecule/boot_order_using_uefi_mode_graceful_restart/converge.yml",
+ "name": "roles/idrac_boot/molecule/boot_order_using_uefi_mode_graceful_restart/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "29cae1e6b242c1d9129666e724c14c023d54c0dab247a6df3ff78dc6a02c23f4",
+ "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090",
"format": 1
},
{
- "name": "roles/idrac_boot/molecule/boot_order_using_uefi_mode_graceful_restart/molecule.yml",
+ "name": "roles/idrac_boot/molecule/boot_order_using_uefi_mode_graceful_restart/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090",
+ "chksum_sha256": "9fb0c40a0d88c86aa9056a949b626eadceadaf9379731fd83045b2cb1c12aa14",
"format": 1
},
{
@@ -3777,14 +3840,14 @@
"name": "roles/idrac_boot/molecule/boot_source_override_enabled_as_continuous_reset_type_none/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0d19f060b5c483683cb13e4bb7d5bcbcb8285a93185df49e9da280941fc9ea7a",
+ "chksum_sha256": "038690fb11c33de166dc94bf35d151639978151731963af7ec44234ced12eb06",
"format": 1
},
{
"name": "roles/idrac_boot/molecule/boot_source_override_enabled_as_continuous_reset_type_none/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090",
+ "chksum_sha256": "de8583bbc3924432cfe625f9899beb6ad7848058e61d1ecabd745ec810ee5498",
"format": 1
},
{
@@ -3816,17 +3879,17 @@
"format": 1
},
{
- "name": "roles/idrac_boot/molecule/boot_source_override_enabled_as_once_reset_type_none/converge.yml",
+ "name": "roles/idrac_boot/molecule/boot_source_override_enabled_as_once_reset_type_none/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fe2b08a47a39e288193df820dac93dedff7c9b1e0f81790201b8d34865db94dd",
+ "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090",
"format": 1
},
{
- "name": "roles/idrac_boot/molecule/boot_source_override_enabled_as_once_reset_type_none/molecule.yml",
+ "name": "roles/idrac_boot/molecule/boot_source_override_enabled_as_once_reset_type_none/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090",
+ "chksum_sha256": "272d65772e3c0602b288c8afc69a647482a57d9572e0d971aa9c9a35f5944b79",
"format": 1
},
{
@@ -3837,17 +3900,17 @@
"format": 1
},
{
- "name": "roles/idrac_boot/molecule/boot_source_override_mode_legacy_job_wait_false/converge.yml",
+ "name": "roles/idrac_boot/molecule/boot_source_override_mode_legacy_job_wait_false/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75317e78c11cd0f2c999b0a24869c569f6eb137a83d1e3831fb0e8d3db9656d4",
+ "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090",
"format": 1
},
{
- "name": "roles/idrac_boot/molecule/boot_source_override_mode_legacy_job_wait_false/molecule.yml",
+ "name": "roles/idrac_boot/molecule/boot_source_override_mode_legacy_job_wait_false/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090",
+ "chksum_sha256": "78a4eaa877f5633e31f590a372723c137736dd11b9a113d36e198435755eb54c",
"format": 1
},
{
@@ -3858,17 +3921,17 @@
"format": 1
},
{
- "name": "roles/idrac_boot/molecule/boot_source_override_mode_uefi_with_resource_id/converge.yml",
+ "name": "roles/idrac_boot/molecule/boot_source_override_mode_uefi_with_resource_id/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5e7a204475806673210f3155629e8fc017020e826606bc7cb67b78e7f3b3e556",
+ "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090",
"format": 1
},
{
- "name": "roles/idrac_boot/molecule/boot_source_override_mode_uefi_with_resource_id/molecule.yml",
+ "name": "roles/idrac_boot/molecule/boot_source_override_mode_uefi_with_resource_id/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090",
+ "chksum_sha256": "b2b06a3776dfd89429ebc65b6e626e1caa9c3bb2c3210c208add9cad25e7b169",
"format": 1
},
{
@@ -4019,17 +4082,17 @@
"format": 1
},
{
- "name": "roles/idrac_certificate/molecule/CA/converge.yml",
+ "name": "roles/idrac_certificate/molecule/CA/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "920f4e9cb7ca5ef8393b92b8df4f47d7e92455e39cb0e0d56eac1411e2238cef",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "roles/idrac_certificate/molecule/CA/molecule.yml",
+ "name": "roles/idrac_certificate/molecule/CA/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "5bf154879b4a34b326240ccb33a490a5f8bc7f228248db93c02baaaa0869d09e",
"format": 1
},
{
@@ -4040,17 +4103,17 @@
"format": 1
},
{
- "name": "roles/idrac_certificate/molecule/CSC/converge.yml",
+ "name": "roles/idrac_certificate/molecule/CSC/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9877fa2c96f05981f6afc09470ec0b6feadda2f501d1e6380d8d438a8a367c83",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "roles/idrac_certificate/molecule/CSC/molecule.yml",
+ "name": "roles/idrac_certificate/molecule/CSC/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "99431629f17cbe04456ef0f839377cb71a7ae2b7c541deba9a4b769bba4c06f4",
"format": 1
},
{
@@ -4061,17 +4124,17 @@
"format": 1
},
{
- "name": "roles/idrac_certificate/molecule/CTC/converge.yml",
+ "name": "roles/idrac_certificate/molecule/CTC/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "db852bf66f0d560599d1631d6178abf0aea7e7c768553bf3e5163ab5ca3c9a80",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "roles/idrac_certificate/molecule/CTC/molecule.yml",
+ "name": "roles/idrac_certificate/molecule/CTC/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "ecd35a2c8d4a1223c5a37a4e80a2f9a950f633357f2eb2655f6f20ca30198c5c",
"format": 1
},
{
@@ -4082,17 +4145,17 @@
"format": 1
},
{
- "name": "roles/idrac_certificate/molecule/CustomCertificate/converge.yml",
+ "name": "roles/idrac_certificate/molecule/CustomCertificate/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "56fea8f40c9d9eca3d4c42519c87a21da0a603f323a705d7eb9bc022e594e449",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "roles/idrac_certificate/molecule/CustomCertificate/molecule.yml",
+ "name": "roles/idrac_certificate/molecule/CustomCertificate/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "65da72677ef3b2e1c383087b86fda3d45434287ce1cf2ddb4968b0a2ff0bf7c7",
"format": 1
},
{
@@ -4103,17 +4166,17 @@
"format": 1
},
{
- "name": "roles/idrac_certificate/molecule/HTTPS/converge.yml",
+ "name": "roles/idrac_certificate/molecule/HTTPS/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a9858eda2d16422a41010c07c064193667ee573a295bd4393a7681cf0f159383",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "roles/idrac_certificate/molecule/HTTPS/molecule.yml",
+ "name": "roles/idrac_certificate/molecule/HTTPS/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "f06ff94029cdaceaf9865f0299fc6013b0fea5193ddbd07d078f543eb146d27f",
"format": 1
},
{
@@ -4124,17 +4187,17 @@
"format": 1
},
{
- "name": "roles/idrac_certificate/molecule/SSLKEY/converge.yml",
+ "name": "roles/idrac_certificate/molecule/SSLKEY/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "30c5c2fc158089dc6f39444bae637bb01e3ad81865b56fa72903b702580987d6",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "roles/idrac_certificate/molecule/SSLKEY/molecule.yml",
+ "name": "roles/idrac_certificate/molecule/SSLKEY/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "0f8fc730b66884b45530be3fdbdbed659d79387466637b2fb129573fbc74cbee",
"format": 1
},
{
@@ -4173,17 +4236,17 @@
"format": 1
},
{
- "name": "roles/idrac_certificate/molecule/default/converge.yml",
+ "name": "roles/idrac_certificate/molecule/default/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "462bfb673d20d3ea0a5b9a6731feacd316b74db4025013bad12141083bf62d1d",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "roles/idrac_certificate/molecule/default/molecule.yml",
+ "name": "roles/idrac_certificate/molecule/default/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "3b8b6811b2776890e59fdddbf667a5d2f8e25207cb478cf865c5c97140ac586a",
"format": 1
},
{
@@ -4194,17 +4257,17 @@
"format": 1
},
{
- "name": "roles/idrac_certificate/molecule/generateCSR/converge.yml",
+ "name": "roles/idrac_certificate/molecule/generateCSR/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "08b7b587facfba070a4b05e0a7cc17e3936f660d0d57b39a69c63a9955b9ee79",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "roles/idrac_certificate/molecule/generateCSR/molecule.yml",
+ "name": "roles/idrac_certificate/molecule/generateCSR/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "57033a2a72d8b711a5c6c2e46131a5b1b1ce8068b43a81f0a51dd44d022bfe36",
"format": 1
},
{
@@ -4215,17 +4278,17 @@
"format": 1
},
{
- "name": "roles/idrac_certificate/molecule/reset/converge.yml",
+ "name": "roles/idrac_certificate/molecule/reset/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6caadbdbb48e6ab7e9c2e326b312ca540813cecd18e5caedc7cf9d9f401abd90",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "roles/idrac_certificate/molecule/reset/molecule.yml",
+ "name": "roles/idrac_certificate/molecule/reset/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "5b646c45281197bec65800696292b5e6d62ba1aa36be2149c7de10b439ddba55",
"format": 1
},
{
@@ -4383,31 +4446,31 @@
"format": 1
},
{
- "name": "roles/idrac_export_server_config_profile/molecule/default/cleanup.yml",
+ "name": "roles/idrac_export_server_config_profile/molecule/default/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1ebde9ca53897de40df1400880e6a2a91d81c7a83e56541ee410b675d781a063",
+ "chksum_sha256": "6c0d5bf979a0ad1541b496f173165b11f0ad14283391efde2c86ee35c477eb43",
"format": 1
},
{
- "name": "roles/idrac_export_server_config_profile/molecule/default/converge.yml",
+ "name": "roles/idrac_export_server_config_profile/molecule/default/cleanup.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1a0d846dff7ca3876c76b1e6cfd625ab62ff93133385f09983e3419025e53a0c",
+ "chksum_sha256": "cd932a799fefa81f0aafeb32b788e887e555c076f2b5fedb3ea75e81eb7f707b",
"format": 1
},
{
- "name": "roles/idrac_export_server_config_profile/molecule/default/molecule.yml",
+ "name": "roles/idrac_export_server_config_profile/molecule/default/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6c0d5bf979a0ad1541b496f173165b11f0ad14283391efde2c86ee35c477eb43",
+ "chksum_sha256": "621eb2a293781a0408900a6df0884360a7ed673e610b0cbdfe67db3221f62b16",
"format": 1
},
{
"name": "roles/idrac_export_server_config_profile/molecule/default/verify.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4108b95a87aad1d805cade4df5e3071720a3c449023378b488796e8d1b0baaff",
+ "chksum_sha256": "6674f5a55b2b9311c78b61713e305a7b6419f02de40cabd4fdb337f234cd88fa",
"format": 1
},
{
@@ -4579,17 +4642,17 @@
"format": 1
},
{
- "name": "roles/idrac_firmware/molecule/cifs_share/converge.yml",
+ "name": "roles/idrac_firmware/molecule/cifs_share/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2a085cfe51d93783380fcf3c0900e392f570b0331849d3f6d475da29df6d19ce",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "roles/idrac_firmware/molecule/cifs_share/molecule.yml",
+ "name": "roles/idrac_firmware/molecule/cifs_share/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "e9cba7b8006136cf795ca98cca97e649fb9965988a7c5b4669c6fa77919693b9",
"format": 1
},
{
@@ -4600,17 +4663,17 @@
"format": 1
},
{
- "name": "roles/idrac_firmware/molecule/default/converge.yml",
+ "name": "roles/idrac_firmware/molecule/default/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5aa353429e55ed0e91057cdcbd8e4b8791d31c0f4e60d85f4ab62bf972d86fa6",
+ "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
"format": 1
},
{
- "name": "roles/idrac_firmware/molecule/default/molecule.yml",
+ "name": "roles/idrac_firmware/molecule/default/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
+ "chksum_sha256": "b8f562b0f8963d6fb1653344be6a0391d63b54ed70b7f23e3086a030fc14463b",
"format": 1
},
{
@@ -4621,17 +4684,17 @@
"format": 1
},
{
- "name": "roles/idrac_firmware/molecule/ftp_share/converge.yml",
+ "name": "roles/idrac_firmware/molecule/ftp_share/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "49d98dc1fc2fce07f662446a0063c02e7f8cd93571cf38d56a7f85a278fa963c",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "roles/idrac_firmware/molecule/ftp_share/molecule.yml",
+ "name": "roles/idrac_firmware/molecule/ftp_share/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "a031dc6f65a6c3a7b75af9a1cff7206ccbd32d061c2738fd180aee6d86368a4e",
"format": 1
},
{
@@ -4642,17 +4705,17 @@
"format": 1
},
{
- "name": "roles/idrac_firmware/molecule/http_share/converge.yml",
+ "name": "roles/idrac_firmware/molecule/http_share/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c5471b0eb5b4eb38016f0201623470b2dbed5d4a0c0cb849d582490795a13350",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "roles/idrac_firmware/molecule/http_share/molecule.yml",
+ "name": "roles/idrac_firmware/molecule/http_share/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "e78dce79455ba2ae773abf7ef878883286686923dbd95b7f157ac006200ca670",
"format": 1
},
{
@@ -4663,17 +4726,17 @@
"format": 1
},
{
- "name": "roles/idrac_firmware/molecule/https_share/converge.yml",
+ "name": "roles/idrac_firmware/molecule/https_share/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "defd19ca5cd9cece94b5805b6fa2b0329f0bf38bcf8920a164875d49380acf0e",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "roles/idrac_firmware/molecule/https_share/molecule.yml",
+ "name": "roles/idrac_firmware/molecule/https_share/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "23232705312d495854c47436c1481e826373b541e19ec964ed6ad07a9fdd9208",
"format": 1
},
{
@@ -4684,17 +4747,17 @@
"format": 1
},
{
- "name": "roles/idrac_firmware/molecule/httpsproxy_share/converge.yml",
+ "name": "roles/idrac_firmware/molecule/httpsproxy_share/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4b89bbf2005ff14ca995095080b6f5408139c77fdf5b05df787f0299f5a64060",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "roles/idrac_firmware/molecule/httpsproxy_share/molecule.yml",
+ "name": "roles/idrac_firmware/molecule/httpsproxy_share/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "d362f33905add12d47dd5b02d798d55eb29ada085cda85e8cd37ba04f97cde87",
"format": 1
},
{
@@ -4705,17 +4768,17 @@
"format": 1
},
{
- "name": "roles/idrac_firmware/molecule/negative_scenarios/converge.yml",
+ "name": "roles/idrac_firmware/molecule/negative_scenarios/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6b9dd2af9cb698278463c46b3afbf3833cb9b8bc203d97eba7cad9d95fe65688",
+ "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
"format": 1
},
{
- "name": "roles/idrac_firmware/molecule/negative_scenarios/molecule.yml",
+ "name": "roles/idrac_firmware/molecule/negative_scenarios/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
+ "chksum_sha256": "c65a450270cb2725ea0c0d77439695d6fdf0721f6711d35265baab3f8aacbf9e",
"format": 1
},
{
@@ -4726,17 +4789,17 @@
"format": 1
},
{
- "name": "roles/idrac_firmware/molecule/nfs_share/converge.yml",
+ "name": "roles/idrac_firmware/molecule/nfs_share/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6c8f6e3d66fdc1d105151bc0df8d444dd0ebd4e6bd986f59dbadeaca3a72b9d4",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "roles/idrac_firmware/molecule/nfs_share/molecule.yml",
+ "name": "roles/idrac_firmware/molecule/nfs_share/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "31631bf50bdb9a5b035dcaa97b4c1cba71139e886468ee04666191f8418a65ec",
"format": 1
},
{
@@ -4866,17 +4929,17 @@
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/backplane/converge.yml",
+ "name": "roles/idrac_gather_facts/molecule/backplane/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f060c709ab360c2ea3299558afe6853d338a5ea57d673d419361c87525e44c69",
+ "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/backplane/molecule.yml",
+ "name": "roles/idrac_gather_facts/molecule/backplane/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
+ "chksum_sha256": "2a1a0a21993f25c4bc9b53a65c20dfbc128821bbf5868dad00326fae00ff82e1",
"format": 1
},
{
@@ -4887,17 +4950,17 @@
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/bios/converge.yml",
+ "name": "roles/idrac_gather_facts/molecule/bios/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "19940920328ca99471e6c48105d744234a8601ac23be9f43ebc47f4dc199ee80",
+ "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/bios/molecule.yml",
+ "name": "roles/idrac_gather_facts/molecule/bios/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
+ "chksum_sha256": "6aeb01343669a588a39fb5c079282e515ea89873d6e7bcc036e053f58092ae62",
"format": 1
},
{
@@ -4908,17 +4971,17 @@
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/controller/converge.yml",
+ "name": "roles/idrac_gather_facts/molecule/controller/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aa250d5db7bb8ba429a89882d0b7496f555b742634df347fb0d9832780032523",
+ "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/controller/molecule.yml",
+ "name": "roles/idrac_gather_facts/molecule/controller/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
+ "chksum_sha256": "fd6e6417f014ec03b13867ac110beb0328e8d4e421d71e534002153a29e99b8a",
"format": 1
},
{
@@ -4950,17 +5013,17 @@
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/default/converge.yml",
+ "name": "roles/idrac_gather_facts/molecule/default/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5b14aa1092665e1c96e60baa45c8be0219a08702211efdadd89977ce8bd11bdc",
+ "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/default/molecule.yml",
+ "name": "roles/idrac_gather_facts/molecule/default/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
+ "chksum_sha256": "cff3d242b9a5abe65abd87b232d6678b0952aea01ac388e894489e47577dfea3",
"format": 1
},
{
@@ -4971,17 +5034,17 @@
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/enclosure/converge.yml",
+ "name": "roles/idrac_gather_facts/molecule/enclosure/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "42dad150ec77379f3d5ec4dd2d5d009c4e0b1eb61f4bb6e9e0b88da5a0527c62",
+ "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/enclosure/molecule.yml",
+ "name": "roles/idrac_gather_facts/molecule/enclosure/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
+ "chksum_sha256": "cf1906e1ced1cb774e276f108b46c8fcf7c47db2fd45f9abc75f98b15d5d6661",
"format": 1
},
{
@@ -4992,17 +5055,17 @@
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/enclosureemm/converge.yml",
+ "name": "roles/idrac_gather_facts/molecule/enclosureemm/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4533ddb492d9a730609c0e45b1edf770dcc9f1aaa12a04f60d47dbb33ddb2bb4",
+ "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/enclosureemm/molecule.yml",
+ "name": "roles/idrac_gather_facts/molecule/enclosureemm/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
+ "chksum_sha256": "0283a9aae3c3d8ba622a804822089373823a9f1494266ed068d65766055922d1",
"format": 1
},
{
@@ -5013,17 +5076,17 @@
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/fan/converge.yml",
+ "name": "roles/idrac_gather_facts/molecule/fan/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "87af8814a77e8103470cdf7e312c103d299006a6a2a358c4135f63feb41a2e08",
+ "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/fan/molecule.yml",
+ "name": "roles/idrac_gather_facts/molecule/fan/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
+ "chksum_sha256": "3847cf869806ef54d8df586fea8862e60cdcf70de9f90598cd1f3417be3b2aef",
"format": 1
},
{
@@ -5034,17 +5097,17 @@
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/firmware/converge.yml",
+ "name": "roles/idrac_gather_facts/molecule/firmware/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b86b895de8e9be2509eeaaef22b3e120df8c73da0de26a46276ffe96af33e44c",
+ "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/firmware/molecule.yml",
+ "name": "roles/idrac_gather_facts/molecule/firmware/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
+ "chksum_sha256": "b9077637b7c957f46e1351f3e3f4e16e925c81a62e3381dd24169a3f0a7b4079",
"format": 1
},
{
@@ -5055,17 +5118,17 @@
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/hostnic/converge.yml",
+ "name": "roles/idrac_gather_facts/molecule/hostnic/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2d233cea48c1048fe9ac74653a6f05a9e471b178adcc448612d3e0ee44ac7f58",
+ "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/hostnic/molecule.yml",
+ "name": "roles/idrac_gather_facts/molecule/hostnic/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
+ "chksum_sha256": "e75317b8512ae920138e3c7241d6b4582626d6e236b36128733b92f856543c53",
"format": 1
},
{
@@ -5076,17 +5139,17 @@
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/idrac/converge.yml",
+ "name": "roles/idrac_gather_facts/molecule/idrac/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4d5ca5f3141059ad14d844544b22e52ebaf2ab9d44fcb797d940b92dadfb3737",
+ "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/idrac/molecule.yml",
+ "name": "roles/idrac_gather_facts/molecule/idrac/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
+ "chksum_sha256": "1793fd4df60558619a9c94aef7599243482429d81c8a28e776b91f850221b59a",
"format": 1
},
{
@@ -5097,17 +5160,17 @@
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/license/converge.yml",
+ "name": "roles/idrac_gather_facts/molecule/license/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "db2cddb39bc38b89e5db58beda357a60f7d4c5cae9ca6662ab0d42fd1136396c",
+ "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/license/molecule.yml",
+ "name": "roles/idrac_gather_facts/molecule/license/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
+ "chksum_sha256": "555ad87a256a73804d979ffca0fb14349aa5ce521c463fc7daa32d2a6d394a4d",
"format": 1
},
{
@@ -5118,17 +5181,17 @@
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/memory/converge.yml",
+ "name": "roles/idrac_gather_facts/molecule/memory/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "30e86739e7e1e1e18877223dbe17deca255fad88c9d955da03693161aaec7498",
+ "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/memory/molecule.yml",
+ "name": "roles/idrac_gather_facts/molecule/memory/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
+ "chksum_sha256": "0a937be08af8078010259968d6dc6ef8836ed89caea61e997db31fec54b7f7b5",
"format": 1
},
{
@@ -5139,17 +5202,17 @@
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/negative/converge.yml",
+ "name": "roles/idrac_gather_facts/molecule/negative/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "71f132a153b37c0facdb202a3134776049908e882a419fd7142a3fb9f01a185a",
+ "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/negative/molecule.yml",
+ "name": "roles/idrac_gather_facts/molecule/negative/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
+ "chksum_sha256": "abcc6362b778c7dd7c367130c0f52564cb65a37a314aa41817ae19252f020ff7",
"format": 1
},
{
@@ -5160,17 +5223,17 @@
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/nic/converge.yml",
+ "name": "roles/idrac_gather_facts/molecule/nic/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "896dc582912c1c53fed8e72bb323f260616d2dfc79a2ed43fbd5bccad815c297",
+ "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/nic/molecule.yml",
+ "name": "roles/idrac_gather_facts/molecule/nic/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
+ "chksum_sha256": "88018366757580a7dd6c975481cf2098d8e6add7a9400aae149886c98cec2241",
"format": 1
},
{
@@ -5181,17 +5244,17 @@
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/passensor/converge.yml",
+ "name": "roles/idrac_gather_facts/molecule/passensor/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cf90cf12505b3178a5fd41ebc0b9288aab73b841ec7e7ccd759247625766c624",
+ "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/passensor/molecule.yml",
+ "name": "roles/idrac_gather_facts/molecule/passensor/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
+ "chksum_sha256": "85eac7dc208c39b391e4f286622829eb99c1f1331cd575f808b374512aed978e",
"format": 1
},
{
@@ -5202,17 +5265,17 @@
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/pciedevice/converge.yml",
+ "name": "roles/idrac_gather_facts/molecule/pciedevice/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5df2dbc3b20bf098c08428c4dc85b79ecb447431305bcdf35b26e8320af87a11",
+ "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/pciedevice/molecule.yml",
+ "name": "roles/idrac_gather_facts/molecule/pciedevice/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
+ "chksum_sha256": "5c0c515a34feab6e6b68e051513ac03a3ac94d3cc8cba176aaed27996ad0287e",
"format": 1
},
{
@@ -5223,17 +5286,17 @@
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/physicaldisk/converge.yml",
+ "name": "roles/idrac_gather_facts/molecule/physicaldisk/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a3d8d5bdceb4660aae165f96fd61a3b0361d0118e3db38f45fe89e10d7646843",
+ "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/physicaldisk/molecule.yml",
+ "name": "roles/idrac_gather_facts/molecule/physicaldisk/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
+ "chksum_sha256": "f842fce3a08c9578c56eb1bea950a9f2aef3952b50bb7ebcc55992f0ff089004",
"format": 1
},
{
@@ -5244,17 +5307,17 @@
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/powersupply/converge.yml",
+ "name": "roles/idrac_gather_facts/molecule/powersupply/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4593adf60c90356bc9aa47f91bea16c718884b95a2ce860608995727c3645bb",
+ "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/powersupply/molecule.yml",
+ "name": "roles/idrac_gather_facts/molecule/powersupply/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
+ "chksum_sha256": "b887541028b49abb21f65fbdcf0505d0d9e06681956366b31119264422c2b155",
"format": 1
},
{
@@ -5265,17 +5328,17 @@
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/secureboot/converge.yml",
+ "name": "roles/idrac_gather_facts/molecule/secureboot/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6e792336231dcfa4207c118ba29d754f4cf4cc5a1beca44ed9d7188f4367e85",
+ "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/secureboot/molecule.yml",
+ "name": "roles/idrac_gather_facts/molecule/secureboot/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
+ "chksum_sha256": "90a6628784d8f22ff412233df90b45f4ca670001c322ad02347933ebaac6a04c",
"format": 1
},
{
@@ -5286,17 +5349,17 @@
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/sensorsbattery/converge.yml",
+ "name": "roles/idrac_gather_facts/molecule/sensorsbattery/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7b784dcb655f275d30c967cb253e5b3ffe09f4a3f3ddd3d5fbc1166133e962dd",
+ "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/sensorsbattery/molecule.yml",
+ "name": "roles/idrac_gather_facts/molecule/sensorsbattery/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
+ "chksum_sha256": "678657b674bd8d79ae67af9a8ebca26b47e40fcaf6f958e66a15e1517b6b3cdb",
"format": 1
},
{
@@ -5307,17 +5370,17 @@
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/sensorsintrusion/converge.yml",
+ "name": "roles/idrac_gather_facts/molecule/sensorsintrusion/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f3c8cbcd170c5cc941748c35b35206c8b55d2371b663d068ebab44330a758cba",
+ "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/sensorsintrusion/molecule.yml",
+ "name": "roles/idrac_gather_facts/molecule/sensorsintrusion/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
+ "chksum_sha256": "87970ed0a6773bd5ab9c8a78c1555ec0f61228282b314573c33bd30da7102a8d",
"format": 1
},
{
@@ -5328,17 +5391,17 @@
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/sensorsvoltage/converge.yml",
+ "name": "roles/idrac_gather_facts/molecule/sensorsvoltage/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "72f0734accc6e0116d5cc038683efd3661b86e8cce47590edec9b09e62613aab",
+ "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/sensorsvoltage/molecule.yml",
+ "name": "roles/idrac_gather_facts/molecule/sensorsvoltage/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
+ "chksum_sha256": "1dffcb2b8b2a5fb2b557d0961eaee2b1cbbd94f1f2aa26d998ad06fe6f314f0b",
"format": 1
},
{
@@ -5349,17 +5412,17 @@
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/systemmetrics/converge.yml",
+ "name": "roles/idrac_gather_facts/molecule/systemmetrics/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "299c5b02f0b782f856fe72ab5d2a7e30d81cacafddb4abf843c6e2e8db42af29",
+ "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/systemmetrics/molecule.yml",
+ "name": "roles/idrac_gather_facts/molecule/systemmetrics/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
+ "chksum_sha256": "54d9f77025d049c9b6572899b5bccc51968e0183e840768d2e3f3c0521aa7ce2",
"format": 1
},
{
@@ -5370,17 +5433,17 @@
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/virtualdisk/converge.yml",
+ "name": "roles/idrac_gather_facts/molecule/virtualdisk/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3a38bd071d17033ff2eb821b827f460c2a3a6d2ae415e6fef83ac523a1c74afe",
+ "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
"format": 1
},
{
- "name": "roles/idrac_gather_facts/molecule/virtualdisk/molecule.yml",
+ "name": "roles/idrac_gather_facts/molecule/virtualdisk/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
+ "chksum_sha256": "d7f64f87068ebc765d1151c2994688505ddf9d29b5a49749565d813a7fd71da9",
"format": 1
},
{
@@ -5587,13 +5650,6 @@
"format": 1
},
{
- "name": "roles/idrac_gather_facts/tests/asserts/backplane_assert.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "814795a1a735b378e46304827d8315436b94113bc2a229b35ed354886db6b927",
- "format": 1
- },
- {
"name": "roles/idrac_gather_facts/tests/asserts/controller_assert.yml",
"ftype": "file",
"chksum_type": "sha256",
@@ -5699,13 +5755,6 @@
"format": 1
},
{
- "name": "roles/idrac_gather_facts/tests/asserts/physicaldisk_assert.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "611944e5b3bed5181b59b6cd940e8d6673076bff6209db3c7a4cd9d12608b984",
- "format": 1
- },
- {
"name": "roles/idrac_gather_facts/tests/asserts/powersupply_assert.yml",
"ftype": "file",
"chksum_type": "sha256",
@@ -5860,24 +5909,17 @@
"format": 1
},
{
- "name": "roles/idrac_import_server_config_profile/molecule/cifs_share/converge.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f20c76524c38d431acea8853cd59b3deacc7a933da50ceb12ee5c9686608f686",
- "format": 1
- },
- {
"name": "roles/idrac_import_server_config_profile/molecule/cifs_share/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "0d55af04f5706218c384613a4393a6e01ab1ccea2438a1b1cc6ea2b403272225",
"format": 1
},
{
- "name": "roles/idrac_import_server_config_profile/molecule/cifs_share/prepare.yml",
+ "name": "roles/idrac_import_server_config_profile/molecule/cifs_share/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "49b649577157352b249d241cab5c9f05d2f14e72c6b886ef809b1ec006a6eb0b",
+ "chksum_sha256": "2deadcf076f47e066b749446ece0948b1fc0be171ab883f67a32c64de9a9a7bd",
"format": 1
},
{
@@ -5888,17 +5930,17 @@
"format": 1
},
{
- "name": "roles/idrac_import_server_config_profile/molecule/default/converge.yml",
+ "name": "roles/idrac_import_server_config_profile/molecule/default/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "76dc6ec3bbc45acaa1363e8af18098ebdf641fdb97460659095a38744ff11f0c",
+ "chksum_sha256": "f3f5fdbd0243581c13e09c4a9347c3197712b89de7ccf5c19bf040002a8e0967",
"format": 1
},
{
- "name": "roles/idrac_import_server_config_profile/molecule/default/molecule.yml",
+ "name": "roles/idrac_import_server_config_profile/molecule/default/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f3f5fdbd0243581c13e09c4a9347c3197712b89de7ccf5c19bf040002a8e0967",
+ "chksum_sha256": "2f2a440f3da11b5d518f74f7fe44fb76709607382cb11bd47fd424767eb8e7da",
"format": 1
},
{
@@ -5909,24 +5951,17 @@
"format": 1
},
{
- "name": "roles/idrac_import_server_config_profile/molecule/http_share/converge.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2c3ab569ca359ac2fa8acfa7a3d3b77e5c1e44b8fee6a13b87888f32abe8ac0b",
- "format": 1
- },
- {
"name": "roles/idrac_import_server_config_profile/molecule/http_share/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "0d55af04f5706218c384613a4393a6e01ab1ccea2438a1b1cc6ea2b403272225",
"format": 1
},
{
- "name": "roles/idrac_import_server_config_profile/molecule/http_share/prepare.yml",
+ "name": "roles/idrac_import_server_config_profile/molecule/http_share/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "49b649577157352b249d241cab5c9f05d2f14e72c6b886ef809b1ec006a6eb0b",
+ "chksum_sha256": "05ee90c1a034c6a7c4f02120c05554526172311af76c5a61767cab3705b114c0",
"format": 1
},
{
@@ -5937,24 +5972,17 @@
"format": 1
},
{
- "name": "roles/idrac_import_server_config_profile/molecule/http_share_with_proxy_parameters/converge.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2bc993e0fb0f926cb49ad73e9afdb41ff60906c02739ede68fc1c817070577a7",
- "format": 1
- },
- {
"name": "roles/idrac_import_server_config_profile/molecule/http_share_with_proxy_parameters/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "0d55af04f5706218c384613a4393a6e01ab1ccea2438a1b1cc6ea2b403272225",
"format": 1
},
{
- "name": "roles/idrac_import_server_config_profile/molecule/http_share_with_proxy_parameters/prepare.yml",
+ "name": "roles/idrac_import_server_config_profile/molecule/http_share_with_proxy_parameters/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "49b649577157352b249d241cab5c9f05d2f14e72c6b886ef809b1ec006a6eb0b",
+ "chksum_sha256": "4a9673edc4a062a85a757483b1587a1ebea5ec8545b6ec20cdf861afab9b38e5",
"format": 1
},
{
@@ -5965,13 +5993,6 @@
"format": 1
},
{
- "name": "roles/idrac_import_server_config_profile/molecule/http_share_with_showerror_certificate_warning/converge.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0e24bb4df02d6d331effe0c6bc95db3c0d7b38776ccf64b0bcf680cb3cee453d",
- "format": 1
- },
- {
"name": "roles/idrac_import_server_config_profile/molecule/http_share_with_showerror_certificate_warning/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
@@ -5979,10 +6000,10 @@
"format": 1
},
{
- "name": "roles/idrac_import_server_config_profile/molecule/http_share_with_showerror_certificate_warning/prepare.yml",
+ "name": "roles/idrac_import_server_config_profile/molecule/http_share_with_showerror_certificate_warning/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "49b649577157352b249d241cab5c9f05d2f14e72c6b886ef809b1ec006a6eb0b",
+ "chksum_sha256": "c6440bd7d1c2e2fe63da11cf6345307f8d08d2ff2287a3007e3cb99eea47d7c4",
"format": 1
},
{
@@ -5993,24 +6014,17 @@
"format": 1
},
{
- "name": "roles/idrac_import_server_config_profile/molecule/https_share/converge.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b03af0b95e571adc26e9e17d74cbaa0d0ad65e5764b24c0c063ffa073bb70408",
- "format": 1
- },
- {
"name": "roles/idrac_import_server_config_profile/molecule/https_share/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "0d55af04f5706218c384613a4393a6e01ab1ccea2438a1b1cc6ea2b403272225",
"format": 1
},
{
- "name": "roles/idrac_import_server_config_profile/molecule/https_share/prepare.yml",
+ "name": "roles/idrac_import_server_config_profile/molecule/https_share/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "49b649577157352b249d241cab5c9f05d2f14e72c6b886ef809b1ec006a6eb0b",
+ "chksum_sha256": "70c1949f3736465e786717cb6a2311c4dfcc92861212161f8957ca6c932e5d6c",
"format": 1
},
{
@@ -6021,24 +6035,17 @@
"format": 1
},
{
- "name": "roles/idrac_import_server_config_profile/molecule/https_share_with_proxy_parameters/converge.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "671c0272e561dfd3c8a4cf4b62dc1a0b2fc3212d389be919bb50d2dd842fb120",
- "format": 1
- },
- {
"name": "roles/idrac_import_server_config_profile/molecule/https_share_with_proxy_parameters/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "0d55af04f5706218c384613a4393a6e01ab1ccea2438a1b1cc6ea2b403272225",
"format": 1
},
{
- "name": "roles/idrac_import_server_config_profile/molecule/https_share_with_proxy_parameters/prepare.yml",
+ "name": "roles/idrac_import_server_config_profile/molecule/https_share_with_proxy_parameters/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "49b649577157352b249d241cab5c9f05d2f14e72c6b886ef809b1ec006a6eb0b",
+ "chksum_sha256": "2f555e872a266977d5f0acb356ed20321dcf984564e9471d2fdc29b841d5a120",
"format": 1
},
{
@@ -6049,24 +6056,24 @@
"format": 1
},
{
- "name": "roles/idrac_import_server_config_profile/molecule/import_buffer_json/converge.yml",
+ "name": "roles/idrac_import_server_config_profile/molecule/import_buffer_json/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "244a0b6dc7b307d86c9fdae8c9e4b4af60f67691ada7486a9313c9404397d25f",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "roles/idrac_import_server_config_profile/molecule/import_buffer_json/molecule.yml",
+ "name": "roles/idrac_import_server_config_profile/molecule/import_buffer_json/prepare.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "49b649577157352b249d241cab5c9f05d2f14e72c6b886ef809b1ec006a6eb0b",
"format": 1
},
{
- "name": "roles/idrac_import_server_config_profile/molecule/import_buffer_json/prepare.yml",
+ "name": "roles/idrac_import_server_config_profile/molecule/import_buffer_json/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "49b649577157352b249d241cab5c9f05d2f14e72c6b886ef809b1ec006a6eb0b",
+ "chksum_sha256": "7e73dc08b0b670f9047ad969ec153670bae08fb4baf7db258216251c4160c083",
"format": 1
},
{
@@ -6077,24 +6084,24 @@
"format": 1
},
{
- "name": "roles/idrac_import_server_config_profile/molecule/import_buffer_xml/converge.yml",
+ "name": "roles/idrac_import_server_config_profile/molecule/import_buffer_xml/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0e2a677c8f26d168e7bf5b5e5efa07f121f70750d82e3d9bc1e384690ea55b7c",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "roles/idrac_import_server_config_profile/molecule/import_buffer_xml/molecule.yml",
+ "name": "roles/idrac_import_server_config_profile/molecule/import_buffer_xml/prepare.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "49b649577157352b249d241cab5c9f05d2f14e72c6b886ef809b1ec006a6eb0b",
"format": 1
},
{
- "name": "roles/idrac_import_server_config_profile/molecule/import_buffer_xml/prepare.yml",
+ "name": "roles/idrac_import_server_config_profile/molecule/import_buffer_xml/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "49b649577157352b249d241cab5c9f05d2f14e72c6b886ef809b1ec006a6eb0b",
+ "chksum_sha256": "57802a2bfa00428e20c2baf45add16b9cb643b46bb5d0c325190699432473e86",
"format": 1
},
{
@@ -6105,24 +6112,17 @@
"format": 1
},
{
- "name": "roles/idrac_import_server_config_profile/molecule/import_multiple_target/converge.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f76858a1818cf9026b33f774c00006dab25c933ca94d07e951e7d8bf7d225e92",
- "format": 1
- },
- {
"name": "roles/idrac_import_server_config_profile/molecule/import_multiple_target/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "0d55af04f5706218c384613a4393a6e01ab1ccea2438a1b1cc6ea2b403272225",
"format": 1
},
{
- "name": "roles/idrac_import_server_config_profile/molecule/import_multiple_target/prepare.yml",
+ "name": "roles/idrac_import_server_config_profile/molecule/import_multiple_target/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "49b649577157352b249d241cab5c9f05d2f14e72c6b886ef809b1ec006a6eb0b",
+ "chksum_sha256": "e3fb9baf2fda4da08a609e07a9c56bca74569c01a0081e3630e9635295b31f0a",
"format": 1
},
{
@@ -6133,24 +6133,17 @@
"format": 1
},
{
- "name": "roles/idrac_import_server_config_profile/molecule/nfs_share/converge.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "762ff43cdf20d5c5107f8aeb15af3678adf24b75793fe3a15c886880f16e09e7",
- "format": 1
- },
- {
"name": "roles/idrac_import_server_config_profile/molecule/nfs_share/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "0d55af04f5706218c384613a4393a6e01ab1ccea2438a1b1cc6ea2b403272225",
"format": 1
},
{
- "name": "roles/idrac_import_server_config_profile/molecule/nfs_share/prepare.yml",
+ "name": "roles/idrac_import_server_config_profile/molecule/nfs_share/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "49b649577157352b249d241cab5c9f05d2f14e72c6b886ef809b1ec006a6eb0b",
+ "chksum_sha256": "c825c7c600c1dccac10930371fb8da29b38df7dfee460ab885266bf6e3006bd1",
"format": 1
},
{
@@ -6168,10 +6161,38 @@
"format": 1
},
{
+ "name": "roles/idrac_import_server_config_profile/molecule/resources/tests/nic_helper.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f247488b64a9ccaffe3f0240f0cf3a6e527b3ac952a786bcc715c436b397a00d",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_import_server_config_profile/molecule/resources/tests/raid_helper.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6706025009360630843898df27085681a613507370fb0bb91a2c40fd03a2e8c7",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_import_server_config_profile/molecule/resources/tests/cleanup.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3985d5b2ca2f11661982e372f5c9e677144651dd2f7f167efd7e0e4b3d2c9231",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_import_server_config_profile/molecule/resources/tests/export.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8a4f3a78e9d259c668ae748e224e36007b91372281024e1f514ad6aaaae72606",
+ "format": 1
+ },
+ {
"name": "roles/idrac_import_server_config_profile/molecule/resources/tests/prepare.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "043e0949892dddbbf4f51d9b5146cf2fba7777d102dc55c3f5c5a9d2a7fbd73e",
+ "chksum_sha256": "b48f7002029c826a3402b360aaabe1a9301d34e249a49718aef9454d6dc9a557",
"format": 1
},
{
@@ -6301,17 +6322,17 @@
"format": 1
},
{
- "name": "roles/idrac_job_queue/molecule/clear_job_queue/converge.yml",
+ "name": "roles/idrac_job_queue/molecule/clear_job_queue/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a6230b7be5eb08101f84d73735097bc06c18160388f47bb8fcaafc602eb70d5e",
+ "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
"format": 1
},
{
- "name": "roles/idrac_job_queue/molecule/clear_job_queue/molecule.yml",
+ "name": "roles/idrac_job_queue/molecule/clear_job_queue/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
+ "chksum_sha256": "f040659df832a82b82f060fe657dcefd0e06f397600604b86b65ba6964e9e338",
"format": 1
},
{
@@ -6322,17 +6343,17 @@
"format": 1
},
{
- "name": "roles/idrac_job_queue/molecule/default/converge.yml",
+ "name": "roles/idrac_job_queue/molecule/default/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d81bc68e8c8b2d39739998d44f3e799e80e6025dc671c773664a0e1c475066fb",
+ "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
"format": 1
},
{
- "name": "roles/idrac_job_queue/molecule/default/molecule.yml",
+ "name": "roles/idrac_job_queue/molecule/default/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
+ "chksum_sha256": "0424782236b3a6a800a4a192f73f528f65b87c135f3a53203547d640e6cde330",
"format": 1
},
{
@@ -6343,17 +6364,17 @@
"format": 1
},
{
- "name": "roles/idrac_job_queue/molecule/delete_job/converge.yml",
+ "name": "roles/idrac_job_queue/molecule/delete_job/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6821a330491cf5c51f659fefc17c1151818c5f8fbd9595df438aab1f149c7557",
+ "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
"format": 1
},
{
- "name": "roles/idrac_job_queue/molecule/delete_job/molecule.yml",
+ "name": "roles/idrac_job_queue/molecule/delete_job/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6128fe631d272bed3adb4c98223a2b04d554093dc05a2c499eeb9e6d80c9ac7",
+ "chksum_sha256": "f17ecfe1a83f4d34185ba19886855028b67ea7665f4a24b712ad741ee6d1e0fc",
"format": 1
},
{
@@ -7862,17 +7883,17 @@
"format": 1
},
{
- "name": "roles/redfish_storage_volume/molecule/default/converge.yml",
+ "name": "roles/redfish_storage_volume/molecule/default/molecule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ee862d62b26aee6030c4da1ca247d8d8e8b26f53ad6c388877fa0cb68d881c74",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "roles/redfish_storage_volume/molecule/default/molecule.yml",
+ "name": "roles/redfish_storage_volume/molecule/default/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "171f69d2607d6cf5d8088b2e7a9231406cbf90c2bf74d40e8997aced0f0f08ce",
"format": 1
},
{
@@ -7883,17 +7904,31 @@
"format": 1
},
{
+ "name": "roles/redfish_storage_volume/molecule/initialization/molecule.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
"name": "roles/redfish_storage_volume/molecule/initialization/converge.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d44b362192c52c569bb6fbea45fb8a09be10b9e44c6f48f8df4eec18e7a4905a",
+ "chksum_sha256": "d2204316b3f71e879600ede864aaa0e5b53ac0b5cc5422b4766a6e789a0d9dfd",
"format": 1
},
{
- "name": "roles/redfish_storage_volume/molecule/initialization/molecule.yml",
+ "name": "roles/redfish_storage_volume/molecule/__create_virtual_drive.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "5ff523743f2c992be084d96d3e0bebf811c50fd09bad3e9b3bdf346c093a3914",
+ "format": 1
+ },
+ {
+ "name": "roles/redfish_storage_volume/molecule/__job_track.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4ac8080105eab85b5b077ac94669ff8fc03600675b5d86258ee27ca26e6ceebd",
"format": 1
},
{
@@ -7946,6 +7981,342 @@
"format": 1
},
{
+ "name": "roles/idrac_user",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/README.md",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "369f4ae5faa868c85788d6df11bf9446ae9fb5ed5d3c9f2808ed9e84cbc06c1a",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/defaults/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6ab3a9e6149fca242c0436f5630a97a2063f6232f42a9df4482b3977471d0be3",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/handlers",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/handlers/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "00a6e4df8f9fe8c7b2be5ed666c8a779836b8bdd3a57736d81729e080d52d27b",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/meta/argument_specs.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "be066c11750b38f72617e0d31f8c107f945bb65448118a94bdb923a80babb2c0",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/meta/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "36cbc64418daec070e7d63dcecf4ec4e7be341ef8a7661b9c5487e8903a48c2c",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/molecule",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/molecule/TC-152120",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/molecule/TC-152120/converge.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "600419dfff67b4f0e13aceef503059c3573db9322dc487db74440b6489e93177",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/molecule/TC-152120/molecule.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "58ffd7e1cf3dfebbc59c5e0ee4062434ecf4f0c76969a060fc207ea06905e906",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/molecule/TC-152146",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/molecule/TC-152146/converge.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c4fbf2ba3ab40583ae88f9b5b63744498b858acb41a33bb75a882f0974b47b3d",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/molecule/TC-152146/molecule.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "58ffd7e1cf3dfebbc59c5e0ee4062434ecf4f0c76969a060fc207ea06905e906",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/molecule/TC-152147",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/molecule/TC-152147/converge.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1096107ae7f0281cbc4f43477562d8c9709ceb968ee5058b5880afb035cfac59",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/molecule/TC-152147/molecule.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "13fc1cf138058346df47e0863e038de0d6a3fe59cf9ce35d2af2d872f237444c",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/molecule/TC-152148",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/molecule/TC-152148/converge.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "38da55bda10bc1de8eb098d795abe2588f27159b217e6c3157c5396273916e02",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/molecule/TC-152148/molecule.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "58ffd7e1cf3dfebbc59c5e0ee4062434ecf4f0c76969a060fc207ea06905e906",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/molecule/TC-152148/prepare.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "06c0f8c4fb2670cc81d9f1cfbd7d0664c88249ec23d5d0c35bc4177da0fd296c",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/molecule/TC-152149",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/molecule/TC-152149/converge.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "20d79a5f4a9dafe606d8b6cde2accf782af12b9f1781f5df0682b93fcdf16ddf",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/molecule/TC-152149/molecule.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "58ffd7e1cf3dfebbc59c5e0ee4062434ecf4f0c76969a060fc207ea06905e906",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/molecule/TC-152149/prepare.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6018b3098204f927d9412e33103fb6cc93847ba09cd25a01df104efe45037753",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/molecule/TC-152150",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/molecule/TC-152150/converge.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6220849df8cee2230b06defb296fc7569be79bff4e9f2e53dfc4c0ff4f108708",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/molecule/TC-152150/molecule.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "58ffd7e1cf3dfebbc59c5e0ee4062434ecf4f0c76969a060fc207ea06905e906",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/molecule/TC-152150/prepare.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f5f0a568105643945bdd6b58bf10914d1a66c46130e7ee8f4ffa7b70f0c387c7",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/molecule/default",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/molecule/default/converge.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6b58bbd18e562ced8fbaccd5a23d479b69b4bec8659d246d62de5c135b291dcc",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/molecule/default/molecule.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "13fc1cf138058346df47e0863e038de0d6a3fe59cf9ce35d2af2d872f237444c",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/molecule/resources",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/molecule/resources/idrac_user",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/molecule/resources/idrac_user/cleanup.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "291fe02f4f127b148c6bc9a2325d06c7e6497f4c853152a7fc42f3c5ccf479e5",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/molecule/resources/idrac_user/get_user_info.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6e080f7169503086fc1e8fc4e4fa95e56a0dd39403fe183f086ad9770ded41e2",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/tasks/absent.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6fcebf5c4162fe906c18e2babb948835808726952abe198cc14caaaee1454546",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/tasks/get_user.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7250bb2b6723ad29148ec605badbcc828f6656088ceaa7f4ad02b46dc4aa25dc",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/tasks/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "cdf0aed407cb791aaabd992919f0d1449b6199b9fe04fe1ccdee43c7e8a3ef67",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/tasks/present.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "31094d92ad1e121dfb3f27d6dc0e8fdf471ee01b2168ba2cfbd66078dd0054c0",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/tests/inventory",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e02233819b1a09844410549191813f7cc7ba360f21298578f4ba1727a27d87fc",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/tests/test.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "594b1a865eae9e2fc2a8f2f9daf0872a5c4a6b697af7167eadfb52df1d5009be",
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/vars",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/idrac_user/vars/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "71a5ee7c5ff8f63dcdb4c815fd75a8694be391c701903e8297b8e3eecf83d12d",
+ "format": 1
+ },
+ {
"name": "tests",
"ftype": "dir",
"chksum_type": null,
@@ -8026,21 +8397,28 @@
"name": "tests/unit/plugins/module_utils/test_idrac_redfish.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "06eee949e14418d09370c421d7d50cb5a92f19a1a49c8ee654ade95220350869",
+ "chksum_sha256": "789188c5bb56dbf5925ed648e6024de2c575580961f9ea94b48817d7edb98901",
"format": 1
},
{
"name": "tests/unit/plugins/module_utils/test_ome.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "00f667133dfcb6305f2ecfde0900211733c873a35c6acb8f680adc4dbfa45a5a",
+ "chksum_sha256": "abdff09b79463b5bab943ab1eed8fe083290c62d5cd3f37e344cc72735687f6b",
"format": 1
},
{
"name": "tests/unit/plugins/module_utils/test_redfish.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d9bfc8945d1ed9d6f162a9146c9316d859615eb9af5aa162acd850be16be262d",
+ "chksum_sha256": "ea6f698bd5328030a3260bf0bdd354a268e67e3b1f2ad8a51a9eed59ad36218e",
+ "format": 1
+ },
+ {
+ "name": "tests/unit/plugins/module_utils/test_session_utils.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b8279ca95da6d91825fc327a48c0a90cef7e714c15d9cac0a98f75dd823191ec",
"format": 1
},
{
@@ -8215,7 +8593,7 @@
"name": "tests/unit/plugins/modules/test_idrac_reset.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "755381915a5d3433313f42e08e5169624a522675a8bf1d147aa9acf502c99b74",
+ "chksum_sha256": "0760350d332018dc32da2f005b39f7ae94983a2061df43084332ba6c78369eb6",
"format": 1
},
{
@@ -8250,7 +8628,7 @@
"name": "tests/unit/plugins/modules/test_idrac_user.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2d7fbcf3629f88219471cb399b853bc28ea397291e7eafd7f67f71bbca7b62c1",
+ "chksum_sha256": "4284c52644fd69a018da7f858f8eae06c9d3f680517d748519820cda2780a5da",
"format": 1
},
{
@@ -8334,7 +8712,7 @@
"name": "tests/unit/plugins/modules/test_ome_application_console_preferences.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "265fd707c0cf99eda2b9f20feaccf3328d1f78c1ae45e196f8ce88b9b4e1c726",
+ "chksum_sha256": "23a93ab54d65b2e1d87c70f0ffedea617f124daad04b292a91d487d5cf8d25f8",
"format": 1
},
{
@@ -8418,21 +8796,21 @@
"name": "tests/unit/plugins/modules/test_ome_device_local_access_configuration.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4de5185ae43025acd83012bd9eaccf2c05d9b94d00bd985483f04b15ee502bbb",
+ "chksum_sha256": "f83c9a95759be04419109a20d5a49512a7fab40c5d655aa3057d0a0e44bad861",
"format": 1
},
{
"name": "tests/unit/plugins/modules/test_ome_device_location.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5f624abfb88ee235fd29dbb68f5ddcc77463085603e06b5f9bbb03c7471c5b32",
+ "chksum_sha256": "cbd189a7cd877069342d9d55a3abedde08cc7c8982aa3d1387f256baf69c5ade",
"format": 1
},
{
"name": "tests/unit/plugins/modules/test_ome_device_mgmt_network.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4d419a694ec5d1ba0fdebc86f1dc68aa7ee25c3a2cccb787e57d003741dadf66",
+ "chksum_sha256": "82e5e3b741916fe2b28da752bf12995c0b38e3ff40af125204d67a14e04b6f12",
"format": 1
},
{
@@ -8446,21 +8824,21 @@
"name": "tests/unit/plugins/modules/test_ome_device_power_settings.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8fe2d243278b33bf748001911a1be0704134fafe7bb59f66b6e5485cca2fe12a",
+ "chksum_sha256": "5c305977b799fc5acacb5a13a1bb1b724b874c15c47a51402921b4b9edda6a4c",
"format": 1
},
{
"name": "tests/unit/plugins/modules/test_ome_device_quick_deploy.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e0acd2b6ae2cbaf52be36bfe9ba2886c4116c79fab354111c65714eedcef47c2",
+ "chksum_sha256": "9635a328e7d8b444de75b441e3fd8f15c7bbb407ea4b8f4ee7c970215596b695",
"format": 1
},
{
"name": "tests/unit/plugins/modules/test_ome_devices.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c1d265161a08069cf7e386ab5d56d4ba62dbf4e501da32b69d05bd31450c349e",
+ "chksum_sha256": "2db61429200f99069795d059690c4fdac00d946bad828827b8f8d6a686ea3da8",
"format": 1
},
{
@@ -8702,17 +9080,38 @@
"format": 1
},
{
+ "name": "tests/unit/plugins/modules/utils.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6dd69e26e1abab9e11a3c0d8e6212b37d8619036e394b351ccc99e480976da28",
+ "format": 1
+ },
+ {
+ "name": "tests/unit/plugins/modules/test_idrac_diagnostics.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8dc7291aa625412b4b452c5e7931cb7a62e1f41e2f32fa84679242398fcd5d50",
+ "format": 1
+ },
+ {
+ "name": "tests/unit/plugins/modules/test_idrac_storage_volume.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "bd47447b5e83792a73cab14880da8ba3dc5300f1d3e5b2e46f199d5de323826b",
+ "format": 1
+ },
+ {
"name": "tests/unit/plugins/modules/test_redfish_storage_volume.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "54ccd9a59a3da074cbc61424bac980ccbe07ba4b01b2cb4116523c42f339fb9d",
+ "chksum_sha256": "8673a7d654d7eebe6b54ace65b26922d3c23c8f35563cb27ebb8b15cd68899a2",
"format": 1
},
{
- "name": "tests/unit/plugins/modules/utils.py",
+ "name": "tests/unit/plugins/modules/test_idrac_session.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6dd69e26e1abab9e11a3c0d8e6212b37d8619036e394b351ccc99e480976da28",
+ "chksum_sha256": "b2417f4e5552f889987522e92e20aa0d2bf0d042022d157b71745df9549e4a16",
"format": 1
},
{
@@ -8721,6 +9120,34 @@
"chksum_type": "sha256",
"chksum_sha256": "5ec603ab1d2b3071743853324fd0db34d886f78f1543c1fa700ad1c904a6fd25",
"format": 1
+ },
+ {
+ "name": ".ansible-lint-ignore",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9259c9753c32d36dfca9f4c9858b16b12e03ab2cd5eeece7f53ee9ad7bb2b2aa",
+ "format": 1
+ },
+ {
+ "name": "requirements.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6f0f045a08a6f73f1903309c1636aefca64bad5073cf5e1b3d092f0f4fc1806b",
+ "format": 1
+ },
+ {
+ "name": "CHANGELOG.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c9d74f37191657712d94c31aa6fdddebc11c869e8c6c77817fd005b71bce07dd",
+ "format": 1
+ },
+ {
+ "name": "README.md",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b4a32d700abcd8da5d5122d404d99655a440ea072d77a6c84b5cc02382f4887b",
+ "format": 1
}
],
"format": 1
diff --git a/ansible_collections/dellemc/openmanage/MANIFEST.json b/ansible_collections/dellemc/openmanage/MANIFEST.json
index bf8b402bc..f1bda6107 100644
--- a/ansible_collections/dellemc/openmanage/MANIFEST.json
+++ b/ansible_collections/dellemc/openmanage/MANIFEST.json
@@ -2,7 +2,7 @@
"collection_info": {
"namespace": "dellemc",
"name": "openmanage",
- "version": "8.7.0",
+ "version": "9.2.0",
"authors": [
"Jagadeesh N V <Jagadeesh.N.V@Dell.com>",
"Felix Stephen <Felix.S@Dell.com>",
@@ -46,7 +46,7 @@
"name": "FILES.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "889b7354ab86fd7d07cb93c6efa113b3f470fb53c397a27b5b464adaf803e17e",
+ "chksum_sha256": "3c38b92a827649678ff0be97765d225e8df0902c89362e974b355d0a24549830",
"format": 1
},
"format": 1
diff --git a/ansible_collections/dellemc/openmanage/README.md b/ansible_collections/dellemc/openmanage/README.md
index b9ccc4cbb..5223d3612 100644
--- a/ansible_collections/dellemc/openmanage/README.md
+++ b/ansible_collections/dellemc/openmanage/README.md
@@ -5,6 +5,7 @@
[![Python version](https://img.shields.io/badge/python-3.9.6+-blue.svg)](https://www.python.org/downloads/)
[![Ansible version](https://img.shields.io/badge/ansible-2.15.6+-blue.svg)](https://pypi.org/project/ansible/)
[![GitHub release (latest by date including pre-releases)](https://img.shields.io/github/v/release/dell/dellemc-openmanage-ansible-modules?include_prereleases&label=latest&style=flat-square)](https://github.com/dell/dellemc-openmanage-ansible-modules/releases)
+[![codecov](https://codecov.io/gh/dell/dellemc-openmanage-ansible-modules/branch/collections/graph/badge.svg)](https://app.codecov.io/gh/dell/dellemc-openmanage-ansible-modules)
Dell OpenManage Ansible Modules allows data center and IT administrators to use RedHat Ansible to automate and orchestrate the configuration, deployment, and update of Dell PowerEdge Servers and modular infrastructure by leveraging the management automation capabilities in-built into the Integrated Dell Remote Access Controller (iDRAC), OpenManage Enterprise (OME) and OpenManage Enterprise Modular (OMEM).
@@ -20,16 +21,17 @@ OpenManage Ansible Modules simplifies and automates provisioning, deployment, an
* [Security](https://github.com/dell/dellemc-openmanage-ansible-modules/blob/collections/docs/SECURITY.md)
* [Documentation](https://github.com/dell/dellemc-openmanage-ansible-modules/blob/collections/docs/DOCUMENTATION.md)
* [Execution Environment](https://github.com/dell/dellemc-openmanage-ansible-modules/blob/collections/docs/EXECUTION_ENVIRONMENT.md)
+ * [Attribution](https://github.com/dell/dellemc-openmanage-ansible-modules/blob/collections/docs/ATTRIBUTION.md)
* [Additional Information](https://github.com/dell/dellemc-openmanage-ansible-modules/blob/collections/docs/ADDITIONAL_INFORMATION.md)
## Supported Platforms
- * iDRAC8 based Dell PowerEdge Servers with firmware versions 2.84.84.84 and above.
+ * iDRAC8 based Dell PowerEdge Servers with firmware versions 2.85.85.85 and above.
* iDRAC9 based Dell PowerEdge Servers with firmware versions 6.10.80.00 and above.
- * Dell OpenManage Enterprise versions 3.10.2 and 4.0.0.
+ * Dell OpenManage Enterprise versions 4.0.0 and 4.0.1.
* Dell OpenManage Enterprise Modular versions 2.10.10 and above.
## Prerequisites
- * [Ansible Core >= 2.16.2 and 2.15.8](https://github.com/ansible/ansible)
+ * [Ansible Core >= 2.16.4 and 2.15.9](https://github.com/ansible/ansible)
* Python >= 3.9.6
* To run the iDRAC modules, install OpenManage Python Software Development Kit (OMSDK)
using either ```pip install omsdk --upgrade``` or ```pip install -r requirements.txt```.
@@ -37,7 +39,7 @@ OpenManage Ansible Modules simplifies and automates provisioning, deployment, an
* Operating System
* Red Hat Enterprise Linux (RHEL) 9.3 and 8.9
* SUSE Linux Enterprise Server (SLES) 15 SP5 and 15 SP4
- * Ubuntu 22.04.3 and 22.04.2
+ * Ubuntu 22.04.4 and 22.04.3
## Installation
diff --git a/ansible_collections/dellemc/openmanage/changelogs/changelog.yaml b/ansible_collections/dellemc/openmanage/changelogs/changelog.yaml
index 63ab4cdee..391fa597d 100644
--- a/ansible_collections/dellemc/openmanage/changelogs/changelog.yaml
+++ b/ansible_collections/dellemc/openmanage/changelogs/changelog.yaml
@@ -1729,3 +1729,108 @@ releases:
name: idrac_license
namespace: ''
release_date: '2024-01-31'
+
+ 9.0.0:
+ changes:
+ release_summary: '- idrac_diagnostics module is added to run and export diagnostics on iDRAC.
+
+ - idrac_user role is added to manage local users of iDRAC.'
+ bugfixes:
+ - 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.``
+ - 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.
+
+ major_changes:
+ - idrac_user - This role is introduced to manage local users of iDRAC.
+ - idrac_diagnostics - The module is introduced to run and export diagnostics on iDRAC.
+ known_issues:
+ - 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.
+ - 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.
+ modules:
+ - description:
+ This module allows to run and export diagnostics on iDRAC.
+ name: idrac_diagnostics
+ namespace: ''
+ objects:
+ role:
+ - description: Role to manage local users of iDRAC.
+ name: idrac_user
+ namespace: null
+ release_date: '2024-02-29'
+ 9.1.0:
+ changes:
+ release_summary: '- ``redfish_storage_volume`` is enhanced to support iDRAC8.
+
+ - ``dellemc_idrac_storage_module`` is deprecated and replaced with ``idrac_storage_volume``.'
+ bugfixes:
+ - Added support for RAID creation using NVMe disks.(https://github.com/dell/dellemc-openmanage-ansible-modules/issues/635)
+ - redfish_storage_volume is enhanced to support iDRAC8.(https://github.com/dell/dellemc-openmanage-ansible-modules/issues/625)
+ deprecated_features:
+ - The ``dellemc_idrac_storage_volume`` module is deprecated and replaced with
+ ``idrac_storage_volume``.
+ minor_changes:
+ - redfish_storage_volume - This module is enhanced to support iDRAC8.
+ known_issues:
+ - 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.
+ - 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.
+ - 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.
+ modules:
+ - description:
+ Configures the RAID configuration attributes.
+ name: idrac_storage_volume
+ namespace: ''
+ release_date: '2024-03-29'
+ 9.2.0:
+ changes:
+ release_summary: '- The idrac_session module is added to allow you to create and delete the sessions on iDRAC.
+
+ - The idrac_reset module is enhanced to allow you to reset the iDRAC to factory default settings.'
+ major_changes:
+ - idrac_session - This module allows you to create and delete the sessions on iDRAC.
+ minor_changes:
+ - idrac_reset - This module allows you to reset the iDRAC to factory default settings.
+ known_issues:
+ - 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.
+ - 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.
+ - 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.
+ modules:
+ - description:
+ Allows you to create and delete the sessions on iDRAC.
+ name: idrac_session
+ namespace: ''
+ release_date: '2024-04-30'
diff --git a/ansible_collections/dellemc/openmanage/docs/ATTRIBUTION.md b/ansible_collections/dellemc/openmanage/docs/ATTRIBUTION.md
new file mode 100644
index 000000000..969a2d706
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/docs/ATTRIBUTION.md
@@ -0,0 +1,27 @@
+OpenSource Licenses for Dell OpenManage Ansible Modules
+=======================================================================
+
+***
+Package: xorriso
+Version: v1.5.6
+Copyright: Copyright © 2008 - 2022 Thomas Schmitt.
+License: [GPL version 3 or later](https://www.gnu.org/software/xorriso/)
+
+***
+Package: syslinux
+Version: v6.04
+Copyright: Copyright 1994-2011 H. Peter Anvin et al - All Rights Reserved
+License: [GPL-2.0 license or later](https://repo.or.cz/syslinux.git)
+
+***
+Package: isomd5sum
+Version: v1.2.3
+License: [GPL-2.0 license](https://github.com/rhinstaller/isomd5sum)
+
+***
+Package: wget
+Version: v1.21.4
+Copyright: Copyright © 2017 Free Software Foundation, Inc.
+License: [GNU General Public License](https://www.gnu.org/software/wget/)
+
+*** \ No newline at end of file
diff --git a/ansible_collections/dellemc/openmanage/docs/EXECUTION_ENVIRONMENT.md b/ansible_collections/dellemc/openmanage/docs/EXECUTION_ENVIRONMENT.md
index c5f556a72..fc5d0fff7 100644
--- a/ansible_collections/dellemc/openmanage/docs/EXECUTION_ENVIRONMENT.md
+++ b/ansible_collections/dellemc/openmanage/docs/EXECUTION_ENVIRONMENT.md
@@ -58,7 +58,6 @@ Build a image with the required Ansible collections and libraries, and then uplo
```yaml
omsdk
netaddr>=0.7.19
- jmespath
```
Note: The content of the *requirements.txt* can be found [here](https://github.com/dell/dellemc-openmanage-ansible-modules/blob/collections/requirements.txt)
diff --git a/ansible_collections/dellemc/openmanage/docs/README.md b/ansible_collections/dellemc/openmanage/docs/README.md
index 4f39dbc96..58c1d50fe 100644
--- a/ansible_collections/dellemc/openmanage/docs/README.md
+++ b/ansible_collections/dellemc/openmanage/docs/README.md
@@ -10,94 +10,103 @@ You may obtain a copy of the License at
# OpenManage Ansible Modules Documentation
### iDRAC Modules
-- [dellemc_configure_idrac_eventing](modules/dellemc_configure_idrac_eventing.rst)
-- [dellemc_configure_idrac_services](modules/dellemc_configure_idrac_services.rst)
-- [dellemc_idrac_lc_attributes](modules/dellemc_idrac_lc_attributes.rst)
-- [dellemc_idrac_storage_volume](modules/dellemc_idrac_storage_volume.rst)
-- [dellemc_system_lockdown_mode](modules/dellemc_system_lockdown_mode.rst)
-- [idrac_attributes](modules/idrac_attributes.rst)
-- [idrac_bios](modules/idrac_bios.rst)
-- [idrac_boot](modules/idrac_boot.rst)
-- [idrac_certificates](modules/idrac_certificates.rst)
-- [idrac_firmware](modules/idrac_firmware.rst)
-- [idrac_firmware_info](modules/idrac_firmware_info.rst)
-- [idrac_lifecycle_controller_jobs](modules/idrac_lifecycle_controller_jobs.rst)
-- [idrac_lifecycle_controller_job_status_info](modules/idrac_lifecycle_controller_job_status_info.rst)
-- [idrac_lifecycle_controller_logs](modules/idrac_lifecycle_controller_logs.rst)
-- [idrac_lifecycle_controller_status_info](modules/idrac_lifecycle_controller_status_info.rst)
-- [idrac_network_attributes](modules/idrac_network_attributes.rst)
-- [idrac_network](modules/idrac_network.rst)
-- [idrac_os_deployment](modules/idrac_os_deployment.rst)
-- [idrac_redfish_storage_controller](modules/idrac_redfish_storage_controller.rst)
-- [idrac_reset](modules/idrac_reset.rst)
-- [idrac_server_config_profile](modules/idrac_server_config_profile.rst)
-- [idrac_syslog](modules/idrac_syslog.rst)
-- [idrac_system_info](modules/idrac_system_info.rst)
-- [idrac_timezone_ntp](modules/idrac_timezone_ntp.rst)
-- [idrac_user](modules/idrac_user.rst)
-- [idrac_user_info](modules/idrac_user_info.rst)
-- [idrac_virtual_media](modules/idrac_virtual_media.rst)
-- [redfish_event_subscription](modules/redfish_event_subscription.rst)
-- [redfish_firmware](modules/redfish_firmware.rst)
-- [redfish_powerstate](modules/redfish_powerstate.rst)
-- [redfish_storage_volume](modules/redfish_storage_volume.rst)
-
+| Module Name | iDRAC8 | iDRAC9 |
+| ---------------------------------------------------------------------------------------------------- | ------ | ------ |
+| [dellemc_configure_idrac_eventing](modules/dellemc_configure_idrac_eventing.rst) | ✓ | ✓ |
+| [dellemc_configure_idrac_services](modules/dellemc_configure_idrac_services.rst) | ✓ | ✓ |
+| [dellemc_idrac_lc_attributes](modules/dellemc_idrac_lc_attributes.rst) | ✓ | ✓ |
+| [dellemc_idrac_storage_volume](modules/dellemc_idrac_storage_volume.rst) | ✓ | ✓ |
+| [dellemc_system_lockdown_mode](modules/dellemc_system_lockdown_mode.rst) | ✓ | ✓ |
+| [idrac_attributes](modules/idrac_attributes.rst) | ✓ | ✓ |
+| [idrac_bios](modules/idrac_bios.rst) | ✓ | ✓ |
+| [idrac_boot](modules/idrac_boot.rst) | ✓ | ✓ |
+| [idrac_certificates](modules/idrac_certificates.rst) | ✕ | ✓ |
+| [idrac_diagnostics](modules/idrac_diagnostics.rst) | ✕ | ✓ |
+| [idrac_firmware](modules/idrac_firmware.rst) | ✓ | ✓ |
+| [idrac_firmware_info](modules/idrac_firmware_info.rst) | ✓ | ✓ |
+| [idrac_lifecycle_controller_jobs](modules/idrac_lifecycle_controller_jobs.rst) | ✓ | ✓ |
+| [idrac_lifecycle_controller_job_status_info](modules/idrac_lifecycle_controller_job_status_info.rst) | ✓ | ✓ |
+| [idrac_lifecycle_controller_logs](modules/idrac_lifecycle_controller_logs.rst) | ✓ | ✓ |
+| [idrac_lifecycle_controller_status_info](modules/idrac_lifecycle_controller_status_info.rst) | ✓ | ✓ |
+| [idrac_network_attributes](modules/idrac_network_attributes.rst) | ✓ | ✓ |
+| [idrac_network](modules/idrac_network.rst) | ✓ | ✓ |
+| [idrac_os_deployment](modules/idrac_os_deployment.rst) | ✓ | ✓ |
+| [idrac_redfish_storage_controller](modules/idrac_redfish_storage_controller.rst) | ✕ | ✓ |
+| [idrac_reset](modules/idrac_reset.rst) | ✓ | ✓ |
+| [idrac_server_config_profile](modules/idrac_server_config_profile.rst) | ✓ | ✓ |
+| [idrac_session](modules/idrac_session.rst) | ✓ | ✓ |
+| [idrac_storage_volume](modules/idrac_storage_volume.rst) | ✓ | ✓ |
+| [idrac_syslog](modules/idrac_syslog.rst) | ✓ | ✓ |
+| [idrac_system_info](modules/idrac_system_info.rst) | ✓ | ✓ |
+| [idrac_timezone_ntp](modules/idrac_timezone_ntp.rst) | ✓ | ✓ |
+| [idrac_user](modules/idrac_user.rst) | ✓ | ✓ |
+| [idrac_user_info](modules/idrac_user_info.rst) | ✓ | ✓ |
+| [idrac_virtual_media](modules/idrac_virtual_media.rst) | ✓ | ✓ |
+| [redfish_event_subscription](modules/redfish_event_subscription.rst) | ✕ | ✓ |
+| [redfish_firmware](modules/redfish_firmware.rst) | ✕ | ✓ |
+| [redfish_firmware_rollback](modules/redfish_firmware_rollback.rst) | ✓ | ✓ |
+| [redfish_powerstate](modules/redfish_powerstate.rst) | ✓ | ✓ |
+| [redfish_storage_volume](modules/redfish_storage_volume.rst) | ✓ | ✓ |
+
### OpenManage Enterprise Modules
-- [ome_active_directory](modules/ome_active_directory.rst)
-- [ome_alert_policies](modules/ome_alert_policies.rst)
-- [ome_alert_policies_message_id_info](modules/ome_alert_policies_message_id_info.rst)
-- [ome_alert_policies_info](modules/ome_alert_policies_info.rst)
-- [ome_alert_policies_actions_info](modules/ome_alert_policies_actions_info.rst)
-- [ome_alert_policies_category_info](modules/ome_alert_policies_category_info.rst)
-- [ome_application_alerts_smtp](modules/ome_application_alerts_smtp.rst)
-- [ome_application_alerts_syslog](modules/ome_application_alerts_syslog.rst)
-- [ome_application_certificate](modules/ome_application_certificate.rst)
-- [ome_application_console_preferences](modules/ome_application_console_preferences.rst)
-- [ome_application_network_address](modules/ome_application_network_address.rst)
-- [ome_application_network_proxy](modules/ome_application_network_proxy.rst)
-- [ome_application_network_settings](modules/ome_application_network_settings.rst)
-- [ome_application_network_time](modules/ome_application_network_time.rst)
-- [ome_application_network_webserver](modules/ome_application_network_webserver.rst)
-- [ome_application_security_settings](modules/ome_application_security_settings.rst)
-- [ome_chassis_slots](modules/ome_chassis_slots.rst)
-- [ome_configuration_compliance_baseline](modules/ome_configuration_compliance_baseline.rst)
-- [ome_configuration_compliance_info](modules/ome_configuration_compliance_info.rst)
-- [ome_device_group](modules/ome_device_group.rst)
-- [ome_device_info](modules/ome_device_info.rst)
-- [ome_device_local_access_configuration](modules/ome_device_local_access_configuration.rst)
-- [ome_device_location](modules/ome_device_location.rst)
-- [ome_device_mgmt_network](modules/ome_device_mgmt_network.rst)
-- [ome_device_network_services](modules/ome_device_network_services.rst)
-- [ome_device_power_settings](modules/ome_device_power_settings.rst)
-- [ome_device_quick_deploy](modules/ome_device_quick_deploy.rst)
-- [ome_devices](modules/ome_devices.rst)
-- [ome_diagnostics](modules/ome_diagnostics.rst)
-- [ome_discovery](modules/ome_discovery.rst)
-- [ome_domain_user_groups](modules/ome_domain_user_groups.rst)
-- [ome_firmware](modules/ome_firmware.rst)
-- [ome_firmware_baseline](modules/ome_firmware_baseline.rst)
-- [ome_firmware_baseline_compliance_info](modules/ome_firmware_baseline_compliance_info.rst)
-- [ome_firmware_baseline_info](modules/ome_firmware_baseline_info.rst)
-- [ome_firmware_catalog](modules/ome_firmware_catalog.rst)
-- [ome_groups](modules/ome_groups.rst)
-- [ome_identity_pool](modules/ome_identity_pool.rst)
-- [ome_job_info](modules/ome_job_info.rst)
-- [ome_network_port_breakout](modules/ome_network_port_breakout.rst)
-- [ome_network_vlan](modules/ome_network_vlan.rst)
-- [ome_network_vlan_info](modules/ome_network_vlan_info.rst)
-- [ome_powerstate](modules/ome_powerstate.rst)
-- [ome_profile](modules/ome_profile.rst)
-- [ome_profile_info](modules/ome_profile_info.rst)
-- [ome_server_interface_profile_info](modules/ome_server_interface_profile_info.rst)
-- [ome_server_interface_profiles](modules/ome_server_interface_profiles.rst)
-- [ome_smart_fabric_info](modules/ome_smart_fabric_info.rst)
-- [ome_smart_fabric](modules/ome_smart_fabric.rst)
-- [ome_smart_fabric_uplink_info](modules/ome_smart_fabric_uplink_info.rst)
-- [ome_smart_fabric_uplink](modules/ome_smart_fabric_uplink.rst)
-- [ome_template](modules/ome_template.rst)
-- [ome_template_identity_pool](modules/ome_template_identity_pool.rst)
-- [ome_template_info](modules/ome_template_info.rst)
-- [ome_template_network_vlan](modules/ome_template_network_vlan.rst)
-- [ome_template_network_vlan_info](modules/ome_template_network_vlan_info.rst)
-- [ome_user](modules/ome_user.rst)
-- [ome_user_info](modules/ome_user_info.rst)
+
+|  Module Name |
+| ------------------------------------------------------------------------------------------ |
+| [ome_active_directory](modules/ome_active_directory.rst) |
+| [ome_alert_policies](modules/ome_alert_policies.rst) |
+| [ome_alert_policies_message_id_info](modules/ome_alert_policies_message_id_info.rst) |
+| [ome_alert_policies_info](modules/ome_alert_policies_info.rst) |
+| [ome_alert_policies_actions_info](modules/ome_alert_policies_actions_info.rst) |
+| [ome_alert_policies_category_info](modules/ome_alert_policies_category_info.rst) |
+| [ome_application_alerts_smtp](modules/ome_application_alerts_smtp.rst) |
+| [ome_application_alerts_syslog](modules/ome_application_alerts_syslog.rst) |
+| [ome_application_certificate](modules/ome_application_certificate.rst) |
+| [ome_application_console_preferences](modules/ome_application_console_preferences.rst) |
+| [ome_application_network_address](modules/ome_application_network_address.rst) |
+| [ome_application_network_proxy](modules/ome_application_network_proxy.rst) |
+| [ome_application_network_settings](modules/ome_application_network_settings.rst) |
+| [ome_application_network_time](modules/ome_application_network_time.rst) |
+| [ome_application_network_webserver](modules/ome_application_network_webserver.rst) |
+| [ome_application_security_settings](modules/ome_application_security_settings.rst) |
+| [ome_chassis_slots](modules/ome_chassis_slots.rst) |
+| [ome_configuration_compliance_baseline](modules/ome_configuration_compliance_baseline.rst) |
+| [ome_configuration_compliance_info](modules/ome_configuration_compliance_info.rst) |
+| [ome_device_group](modules/ome_device_group.rst) |
+| [ome_device_info](modules/ome_device_info.rst) |
+| [ome_device_local_access_configuration](modules/ome_device_local_access_configuration.rst) |
+| [ome_device_location](modules/ome_device_location.rst) |
+| [ome_device_mgmt_network](modules/ome_device_mgmt_network.rst) |
+| [ome_device_network_services](modules/ome_device_network_services.rst) |
+| [ome_device_power_settings](modules/ome_device_power_settings.rst) |
+| [ome_device_quick_deploy](modules/ome_device_quick_deploy.rst) |
+| [ome_devices](modules/ome_devices.rst) |
+| [ome_diagnostics](modules/ome_diagnostics.rst) |
+| [ome_discovery](modules/ome_discovery.rst) |
+| [ome_domain_user_groups](modules/ome_domain_user_groups.rst) |
+| [ome_firmware](modules/ome_firmware.rst) |
+| [ome_firmware_baseline](modules/ome_firmware_baseline.rst) |
+| [ome_firmware_baseline_compliance_info](modules/ome_firmware_baseline_compliance_info.rst) |
+| [ome_firmware_baseline_info](modules/ome_firmware_baseline_info.rst) |
+| [ome_firmware_catalog](modules/ome_firmware_catalog.rst) |
+| [ome_groups](modules/ome_groups.rst) |
+| [ome_identity_pool](modules/ome_identity_pool.rst) |
+| [ome_job_info](modules/ome_job_info.rst) |
+| [ome_network_port_breakout](modules/ome_network_port_breakout.rst) |
+| [ome_network_vlan](modules/ome_network_vlan.rst) |
+| [ome_network_vlan_info](modules/ome_network_vlan_info.rst) |
+| [ome_powerstate](modules/ome_powerstate.rst) |
+| [ome_profile](modules/ome_profile.rst) |
+| [ome_profile_info](modules/ome_profile_info.rst) |
+| [ome_server_interface_profile_info](modules/ome_server_interface_profile_info.rst) |
+| [ome_server_interface_profiles](modules/ome_server_interface_profiles.rst) |
+| [ome_smart_fabric_info](modules/ome_smart_fabric_info.rst) |
+| [ome_smart_fabric](modules/ome_smart_fabric.rst) |
+| [ome_smart_fabric_uplink_info](modules/ome_smart_fabric_uplink_info.rst) |
+| [ome_smart_fabric_uplink](modules/ome_smart_fabric_uplink.rst) |
+| [ome_template](modules/ome_template.rst) |
+| [ome_template_identity_pool](modules/ome_template_identity_pool.rst) |
+| [ome_template_info](modules/ome_template_info.rst) |
+| [ome_template_network_vlan](modules/ome_template_network_vlan.rst) |
+| [ome_template_network_vlan_info](modules/ome_template_network_vlan_info.rst) |
+| [ome_user](modules/ome_user.rst) |
+| [ome_user_info](modules/ome_user_info.rst) | \ No newline at end of file
diff --git a/ansible_collections/dellemc/openmanage/docs/modules/idrac_diagnostics.rst b/ansible_collections/dellemc/openmanage/docs/modules/idrac_diagnostics.rst
new file mode 100644
index 000000000..1a29769e0
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/docs/modules/idrac_diagnostics.rst
@@ -0,0 +1,390 @@
+.. _idrac_diagnostics_module:
+
+
+idrac_diagnostics -- Run and Export iDRAC diagnostics
+=====================================================
+
+.. contents::
+ :local:
+ :depth: 1
+
+
+Synopsis
+--------
+
+This module allows you to run and export diagnostics on iDRAC.
+
+
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- python \>= 3.9.6
+
+
+
+Parameters
+----------
+
+ run (optional, bool, None)
+ Run the diagnostics job on iDRAC.
+
+ Run the diagnostics job based on the \ :emphasis:`run\_mode`\ and save the report in the internal storage. \ :emphasis:`reboot\_type`\ is applicable.
+
+
+ export (optional, bool, None)
+ Exports the diagnostics information to the given share.
+
+ This operation requires \ :emphasis:`share\_parameters`\ .
+
+ When \ :emphasis:`run`\ is \ :literal:`true`\ and \ :emphasis:`job\_wait`\ is \ :literal:`false`\ , only then the run diagnostics job is triggered. \ :emphasis:`export`\ is ignored.
+
+
+ run_mode (optional, str, express)
+ This option provides the choices to run the diagnostics.
+
+ \ :literal:`express`\ The express diagnostics runs a test package for each server subsystem. However, it does not run the complete set of tests available in the package for each subsystem.
+
+ \ :literal:`extended`\ The extended diagnostics run all available tests in each test package for all subsystems.
+
+ \ :literal:`long\_run`\ The long-run diagnostics runs express and extended tests.
+
+
+ reboot_type (optional, str, graceful)
+ This option provides the choice to reboot the host immediately to run the diagnostics.
+
+ This is applicable when \ :emphasis:`run`\ is \ :literal:`true`\ .
+
+ \ :literal:`force`\ Forced graceful shutdown signals the operating system to turn off and wait for ten minutes. If the operating system does not turn off, the iDRAC power cycles the system.
+
+ \ :literal:`graceful`\ Graceful shutdown waits for the operating system to turn off and wait for the system to restart.
+
+ \ :literal:`power\_cycle`\ performs a power cycle for a hard reset on the device.
+
+
+ scheduled_start_time (optional, str, None)
+ Schedules the job at the specified time.
+
+ The accepted formats are yyyymmddhhmmss and YYYY-MM-DDThh:mm:ss+HH:MM.
+
+ This is applicable when \ :emphasis:`run`\ is \ :literal:`true`\ and \ :emphasis:`reboot\_type`\ is power\_cycle.
+
+
+ scheduled_end_time (optional, str, None)
+ Run the diagnostic until the specified end date and end time after the \ :emphasis:`scheduled\_start\_time`\ .
+
+ The accepted formats are yyyymmddhhmmss and YYYY-MM-DDThh:mm:ss+HH:MM.
+
+ If the run operation does not complete before the specified end time, then the operation fails.
+
+ This is applicable when \ :emphasis:`run`\ is \ :literal:`True`\ and \ :emphasis:`reboot\_type`\ is \ :literal:`power\_cycle`\ .
+
+
+ job_wait (optional, bool, True)
+ Provides the option to wait for job completion.
+
+ This is applicable when \ :emphasis:`run`\ is \ :literal:`true`\ and \ :emphasis:`reboot\_type`\ is \ :literal:`power\_cycle`\ .
+
+ This is applicable only to run the diagnostics job.
+
+
+ job_wait_timeout (optional, int, 1200)
+ Time in seconds to wait for job completion.
+
+ This is applicable when \ :emphasis:`job\_wait`\ is \ :literal:`true`\ .
+
+
+ share_parameters (optional, dict, None)
+ Parameters that are required for the export operation of diagnostics.
+
+ \ :emphasis:`share\_parameters`\ is required when \ :emphasis:`export`\ is \ :literal:`true`\ .
+
+
+ share_type (optional, str, local)
+ Share type of the network share.
+
+ \ :literal:`local`\ uses local path for \ :emphasis:`export`\ operation.
+
+ \ :literal:`nfs`\ uses NFS share for \ :emphasis:`export`\ operation.
+
+ \ :literal:`cifs`\ uses CIFS share for \ :emphasis:`export`\ operation.
+
+ \ :literal:`http`\ uses HTTP share for \ :emphasis:`export`\ operation.
+
+ \ :literal:`https`\ uses HTTPS share for \ :emphasis:`export`\ operation.
+
+
+ file_name (optional, str, None)
+ Diagnostics file name for \ :emphasis:`export`\ operation.
+
+
+ ip_address (optional, str, None)
+ IP address of the network share.
+
+ \ :emphasis:`ip\_address`\ is required when \ :emphasis:`share\_type`\ is \ :literal:`nfs`\ , \ :literal:`cifs`\ , \ :literal:`http`\ or \ :literal:`https`\ .
+
+
+ share_name (optional, str, None)
+ Network share or local path of the diagnostics file.
+
+
+ workgroup (optional, str, None)
+ Workgroup of the network share.
+
+ \ :emphasis:`workgroup`\ is applicable only when \ :emphasis:`share\_type`\ is \ :literal:`cifs`\ .
+
+
+ username (optional, str, None)
+ Username of the network share.
+
+ \ :emphasis:`username`\ is required when \ :emphasis:`share\_type`\ is \ :literal:`cifs`\ .
+
+
+ password (optional, str, None)
+ Password of the network share.
+
+ \ :emphasis:`password`\ is required when \ :emphasis:`share\_type`\ is \ :literal:`cifs`\ .
+
+
+ ignore_certificate_warning (optional, str, off)
+ Ignores the certificate warning while connecting to Share and is only applicable when \ :emphasis:`share\_type`\ is \ :literal:`https`\ .
+
+ \ :literal:`off`\ ignores the certificate warning.
+
+ \ :literal:`on`\ does not ignore the certificate warning.
+
+
+ proxy_support (optional, str, off)
+ Specifies if proxy support must be used or not.
+
+ \ :literal:`off`\ does not use proxy settings.
+
+ \ :literal:`default\_proxy`\ uses the default proxy settings.
+
+ \ :literal:`parameters\_proxy`\ uses the specified proxy settings. \ :emphasis:`proxy\_server`\ is required when \ :emphasis:`proxy\_support`\ is \ :literal:`parameters\_proxy`\ .
+
+ \ :emphasis:`proxy\_support`\ is only applicable when \ :emphasis:`share\_type`\ is \ :literal:`http`\ or \ :literal:`https`\ .
+
+
+ proxy_type (optional, str, http)
+ The proxy type of the proxy server.
+
+ \ :literal:`http`\ to select HTTP proxy.
+
+ \ :literal:`socks`\ to select SOCKS proxy.
+
+ \ :emphasis:`proxy\_type`\ is only applicable when \ :emphasis:`share\_type`\ is \ :literal:`http`\ or \ :literal:`https`\ and when \ :emphasis:`proxy\_support`\ is \ :literal:`parameters\_proxy`\ .
+
+
+ proxy_server (optional, str, None)
+ The IP address of the proxy server.
+
+ \ :emphasis:`proxy\_server`\ is required when \ :emphasis:`proxy\_support`\ is \ :literal:`parameters\_proxy`\ .
+
+ \ :emphasis:`proxy\_server`\ is only applicable when \ :emphasis:`share\_type`\ is \ :literal:`http`\ or \ :literal:`https`\ and when \ :emphasis:`proxy\_support`\ is \ :literal:`parameters\_proxy`\ .
+
+
+ proxy_port (optional, int, 80)
+ The port of the proxy server.
+
+ \ :emphasis:`proxy\_port`\ is only applicable when \ :emphasis:`share\_type`\ is \ :literal:`http`\ or \ :literal:`https`\ and when \ :emphasis:`proxy\_support`\ is \ :literal:`parameters\_proxy`\ .
+
+
+ proxy_username (optional, str, None)
+ The username of the proxy server.
+
+ \ :emphasis:`proxy\_username`\ is only applicable when \ :emphasis:`share\_type`\ is \ :literal:`http`\ or \ :literal:`https`\ and when \ :emphasis:`proxy\_support`\ is \ :literal:`parameters\_proxy`\ .
+
+
+ proxy_password (optional, str, None)
+ The password of the proxy server.
+
+ \ :emphasis:`proxy\_password`\ is only applicable when \ :emphasis:`share\_type`\ is \ :literal:`http`\ or \ :literal:`https`\ and when \ :emphasis:`proxy\_support`\ is \ :literal:`parameters\_proxy`\ .
+
+
+
+ resource_id (optional, str, None)
+ Id of the resource.
+
+ If the value for resource ID is not provided, the module picks the first resource ID available from the list of system resources returned by the iDRAC.
+
+
+ idrac_ip (True, str, None)
+ iDRAC IP Address.
+
+
+ idrac_user (True, str, None)
+ iDRAC username.
+
+
+ idrac_password (True, str, None)
+ iDRAC user password.
+
+
+ idrac_port (optional, int, 443)
+ iDRAC port.
+
+
+ validate_certs (optional, bool, True)
+ If \ :literal:`false`\ , the SSL certificates will not be validated.
+
+ Configure \ :literal:`false`\ only on personally controlled sites where self-signed certificates are used.
+
+ Prior to collection version \ :literal:`5.0.0`\ , the \ :emphasis:`validate\_certs`\ is \ :literal:`false`\ by default.
+
+
+ ca_path (optional, path, None)
+ The Privacy Enhanced Mail (PEM) file that contains a CA certificate to be used for the validation.
+
+
+ timeout (optional, int, 30)
+ The socket level timeout in seconds.
+
+
+
+
+
+Notes
+-----
+
+.. note::
+ - Run this module from a system that has direct access to Dell iDRAC.
+ - This module supports only iDRAC9 and above.
+ - This module supports IPv4 and IPv6 addresses.
+ - This module supports \ :literal:`check\_mode`\ .
+ - This module requires 'Dell Diagnostics' firmware package to be present on the server.
+ - When \ :emphasis:`share\_type`\ is \ :literal:`local`\ for \ :emphasis:`export`\ operation, job\_details are not displayed.
+
+
+
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ ---
+ - name: Run and export the diagnostics to local path
+ dellemc.openmanage.idrac_diagnostics:
+ hostname: "192.168.0.1"
+ username: "username"
+ password: "password"
+ ca_path: "path/to/ca_file"
+ run: true
+ export: true
+ share_parameters:
+ share_type: "local"
+ share_path: "/opt/local/diagnostics/"
+ file_name: "diagnostics.txt"
+
+ - name: Run the diagnostics with power cycle reboot on schedule
+ dellemc.openmanage.idrac_diagnostics:
+ hostname: "192.168.0.1"
+ username: "username"
+ password: "password"
+ ca_path: "path/to/ca_file"
+ run: true
+ run_mode: "express"
+ reboot_type: "power_cycle"
+ scheduled_start_time: 20240101101015
+
+ - name: Run and export the diagnostics to HTTPS share
+ dellemc.openmanage.idrac_diagnostics:
+ hostname: "192.168.0.1"
+ username: "username"
+ password: "password"
+ ca_path: "path/to/ca_file"
+ run: true
+ export: true
+ share_parameters:
+ share_type: "HTTPS"
+ ignore_certificate_warning: "on"
+ share_name: "/share_path/diagnostics_collection_path"
+ ip_address: "192.168.0.2"
+ file_name: "diagnostics.txt"
+
+ - name: Run and export the diagnostics to NFS share
+ dellemc.openmanage.idrac_diagnostics:
+ hostname: "192.168.0.1"
+ username: "username"
+ password: "password"
+ ca_path: "path/to/ca_file"
+ run: true
+ export: true
+ share_parameters:
+ share_type: "NFS"
+ share_name: "nfsshare/diagnostics_collection_path/"
+ ip_address: "192.168.0.3"
+ file_name: "diagnostics.txt"
+
+ - name: Export the diagnostics to CIFS share
+ dellemc.openmanage.idrac_diagnostics:
+ hostname: "192.168.0.1"
+ username: "username"
+ password: "password"
+ ca_path: "path/to/ca_file"
+ export: true
+ share_parameters:
+ share_type: "CIFS"
+ share_name: "/cifsshare/diagnostics_collection_path/"
+ ip_address: "192.168.0.4"
+ file_name: "diagnostics.txt"
+
+ - name: Export the diagnostics to HTTPS share via proxy
+ dellemc.openmanage.idrac_diagnostics:
+ hostname: "192.168.0.1"
+ username: "username"
+ password: "password"
+ ca_path: "path/to/ca_file"
+ export: true
+ share_parameters:
+ share_type: "HTTPS"
+ share_name: "/share_path/diagnostics_collection_path"
+ ignore_certificate_warning: "on"
+ ip_address: "192.168.0.2"
+ file_name: "diagnostics.txt"
+ proxy_support: parameters_proxy
+ proxy_type: http
+ proxy_server: "192.168.0.5"
+ proxy_port: 1080
+ proxy_username: "proxy_user"
+ proxy_password: "proxy_password"
+
+
+
+Return Values
+-------------
+
+msg (always, str, Successfully ran and exported the diagnostics.)
+ Status of the diagnostics operation.
+
+
+job_details (For run and export operations, dict, {'ActualRunningStartTime': '2024-01-10T10:14:31', 'ActualRunningStopTime': '2024-01-10T10:26:34', 'CompletionTime': '2024-01-10T10:26:34', 'Description': 'Job Instance', 'EndTime': '2024-01-10T10:30:15', 'Id': 'JID_XXXXXXXXXXXX', 'JobState': 'Completed', 'JobType': 'RemoteDiagnostics', 'Message': 'Job completed successfully.', 'MessageArgs': [], 'MessageArgs@odata.count': 0, 'MessageId': 'SYS018', 'Name': 'Remote Diagnostics', 'PercentComplete': 100, 'StartTime': '2024-01-10T10:12:15', 'TargetSettingsURI': None})
+ Returns the output for status of the job.
+
+
+diagnostics_file_path (For export operation, str, /share_path/diagnostics_collection_path/diagnostics.txt)
+ Returns the full path of the diagnostics file.
+
+
+error_info (on HTTP error, dict, {'error': {'code': 'Base.1.12.GeneralError', 'message': 'A general error has occurred. See ExtendedInfo for more information.', '@Message.ExtendedInfo': [{'Message': 'A Remote Diagnostic (ePSA) job already exists.', 'MessageArgs': [], 'MessageArgs@odata.count': 0, 'MessageId': 'IDRAC.2.9.SYS098', 'RelatedProperties': [], 'RelatedProperties@odata.count': 0, 'Resolution': 'A response action is not required if the scheduled start time of the existing Remote Diagnostic (ePSA) job is ok. Else, delete the existing Diagnostics (ePSA) job and recreate another with an appropriate start time.', 'Severity': 'Informational'}]}})
+ Details of the HTTP Error.
+
+
+
+
+
+Status
+------
+
+
+
+
+
+Authors
+~~~~~~~
+
+- Shivam Sharma(@ShivamSh3)
+
diff --git a/ansible_collections/dellemc/openmanage/docs/modules/idrac_reset.rst b/ansible_collections/dellemc/openmanage/docs/modules/idrac_reset.rst
index e0efdc9f9..85ec3ca3c 100644
--- a/ansible_collections/dellemc/openmanage/docs/modules/idrac_reset.rst
+++ b/ansible_collections/dellemc/openmanage/docs/modules/idrac_reset.rst
@@ -1,8 +1,8 @@
.. _idrac_reset_module:
-idrac_reset -- Reset iDRAC
-==========================
+idrac_reset -- Factory reset the iDRACs
+=======================================
.. contents::
:local:
@@ -12,9 +12,7 @@ idrac_reset -- Reset iDRAC
Synopsis
--------
-This module resets iDRAC.
-
-iDRAC is not accessible for some time after running this module. It is recommended to wait for some time, before trying to connect to iDRAC.
+This module resets the iDRAC to factory default settings.
@@ -22,14 +20,57 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- omsdk >= 1.2.488
-- python >= 3.9.6
+- python \>= 3.9.6
Parameters
----------
+ reset_to_default (optional, str, None)
+ If this value is not set the default behaviour is to restart the iDRAC.
+
+ \ :literal:`All`\ Discards all settings and reset to default credentials.
+
+ \ :literal:`ResetAllWithRootDefaults`\ Discards all settings and reset the default username to root and password to the shipping value.
+
+ \ :literal:`Default`\ Discards all settings, but preserves user and network settings.
+
+ \ :literal:`CustomDefaults`\ All configuration is set to custom defaults.This option is supported on firmware version 7.00.00.00 and newer versions.
+
+
+ custom_defaults_file (optional, str, None)
+ Name of the custom default configuration file in the XML format.
+
+ This option is applicable when \ :emphasis:`reset\_to\_default`\ is \ :literal:`CustomDefaults`\ .
+
+ \ :emphasis:`custom\_defaults\_file`\ is mutually exclusive with \ :emphasis:`custom\_defaults\_buffer`\ .
+
+
+ custom_defaults_buffer (optional, str, None)
+ This parameter provides the option to import the buffer input in XML format as a custom default configuration.
+
+ This option is applicable when \ :emphasis:`reset\_to\_default`\ is \ :literal:`CustomDefaults`\ .
+
+ \ :emphasis:`custom\_defaults\_buffer`\ is mutually exclusive with \ :emphasis:`custom\_defaults\_file`\ .
+
+
+ wait_for_idrac (optional, bool, True)
+ This parameter provides the option to wait for the iDRAC to reset and lifecycle controller status to be ready.
+
+
+ job_wait_timeout (optional, int, 600)
+ Time in seconds to wait for job completion.
+
+ This is applicable when \ :emphasis:`job\_wait`\ is \ :literal:`true`\ .
+
+
+ force_reset (optional, bool, False)
+ This parameter provides the option to force reset the iDRAC without checking the iDRAC lifecycle controller status.
+
+ This option is applicable only for iDRAC9.
+
+
idrac_ip (True, str, None)
iDRAC IP Address.
@@ -37,21 +78,29 @@ Parameters
idrac_user (True, str, None)
iDRAC username.
+ If the username is not provided, then the environment variable \ :literal:`IDRAC\_USERNAME`\ is used.
+
+ Example: export IDRAC\_USERNAME=username
+
idrac_password (True, str, None)
iDRAC user password.
+ If the password is not provided, then the environment variable \ :literal:`IDRAC\_PASSWORD`\ is used.
+
+ Example: export IDRAC\_PASSWORD=password
+
idrac_port (optional, int, 443)
iDRAC port.
validate_certs (optional, bool, True)
- If ``false``, the SSL certificates will not be validated.
+ If \ :literal:`false`\ , the SSL certificates will not be validated.
- Configure ``false`` only on personally controlled sites where self-signed certificates are used.
+ Configure \ :literal:`false`\ only on personally controlled sites where self-signed certificates are used.
- Prior to collection version ``5.0.0``, the *validate_certs* is ``false`` by default.
+ Prior to collection version \ :literal:`5.0.0`\ , the \ :emphasis:`validate\_certs`\ is \ :literal:`false`\ by default.
ca_path (optional, path, None)
@@ -70,8 +119,10 @@ Notes
.. note::
- Run this module from a system that has direct access to Dell iDRAC.
- - This module supports both IPv4 and IPv6 address for *idrac_ip*.
- - This module supports ``check_mode``.
+ - This module supports both IPv4 and IPv6 address for \ :emphasis:`idrac\_ip`\ .
+ - This module supports \ :literal:`check\_mode`\ .
+ - If reset\_to\_default option is not specified, then this module triggers a graceful restart.
+ - This module skips the execution if reset options are not supported by the iDRAC.
@@ -83,13 +134,57 @@ Examples
---
- - name: Reset iDRAC
+ - name: Reset the iDRAC to all and wait till the iDRAC is accessible.
+ dellemc.openmanage.idrac_reset:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "user_name"
+ idrac_password: "user_password"
+ ca_path: "/path/to/ca_cert.pem"
+ reset_to_default: "All"
+
+ - name: Reset the iDRAC to default and do not wait till the iDRAC is accessible.
+ dellemc.openmanage.idrac_reset:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "user_name"
+ idrac_password: "user_password"
+ ca_path: "/path/to/ca_cert.pem"
+ reset_to_default: "Default"
+ wait_for_idrac: false
+
+ - name: Force reset the iDRAC to default.
+ dellemc.openmanage.idrac_reset:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "user_name"
+ idrac_password: "user_password"
+ ca_path: "/path/to/ca_cert.pem"
+ reset_to_default: "Default"
+ force_reset: true
+
+ - name: Gracefully restart the iDRAC.
+ dellemc.openmanage.idrac_reset:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "user_name"
+ idrac_password: "user_password"
+ ca_path: "/path/to/ca_cert.pem"
+
+ - name: Reset the iDRAC to custom defaults XML and do not wait till the iDRAC is accessible.
+ dellemc.openmanage.idrac_reset:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "user_name"
+ idrac_password: "user_password"
+ ca_path: "/path/to/ca_cert.pem"
+ reset_to_default: "CustomDefaults"
+ custom_defaults_file: "/path/to/custom_defaults.xml"
+
+ - name: Reset the iDRAC to custom defaults buffer input and do not wait till the iDRAC is accessible.
dellemc.openmanage.idrac_reset:
- idrac_ip: "192.168.0.1"
- idrac_user: "user_name"
- idrac_password: "user_password"
- idrac_port: 443
- ca_path: "/path/to/ca_cert.pem"
+ idrac_ip: "192.168.0.1"
+ idrac_user: "user_name"
+ idrac_password: "user_password"
+ ca_path: "/path/to/ca_cert.pem"
+ reset_to_default: "CustomDefaults"
+ custom_defaults_buffer: "<SystemConfiguration Model=\"PowerEdge R7525\" ServiceTag=\"ABCD123\">\n<Component FQDD=\"iDRAC.Embedded.1\">\n
+ <Attribute Name=\"IPMILan.1#Enable\">Disabled</Attribute>\n </Component>\n\n</SystemConfiguration>"
@@ -100,7 +195,7 @@ msg (always, str, Successfully performed iDRAC reset.)
Status of the iDRAC reset operation.
-reset_status (always, dict, {'idracreset': {'Data': {'StatusCode': 204}, 'Message': 'none', 'Status': 'Success', 'StatusCode': 204, 'retval': True}})
+reset_status (reset operation is triggered., dict, {'idracreset': {'Data': {'StatusCode': 204}, 'Message': 'none', 'Status': 'Success', 'StatusCode': 204, 'retval': True}})
Details of iDRAC reset operation.
@@ -123,4 +218,5 @@ Authors
- Felix Stephen (@felixs88)
- Anooja Vardhineni (@anooja-vardhineni)
+- Lovepreet Singh (@singh-lovepreet1)
diff --git a/ansible_collections/dellemc/openmanage/docs/modules/idrac_session.rst b/ansible_collections/dellemc/openmanage/docs/modules/idrac_session.rst
new file mode 100644
index 000000000..d8f980043
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/docs/modules/idrac_session.rst
@@ -0,0 +1,157 @@
+.. _idrac_session_module:
+
+
+idrac_session -- Manage iDRAC sessions
+======================================
+
+.. contents::
+ :local:
+ :depth: 1
+
+
+Synopsis
+--------
+
+This module allows the creation and deletion of sessions on iDRAC.
+
+
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- python \>= 3.9.6
+
+
+
+Parameters
+----------
+
+ hostname (optional, str, None)
+ IP address or hostname of the iDRAC.
+
+
+ username (optional, str, None)
+ Username of the iDRAC.
+
+ \ :emphasis:`username`\ is required when \ :emphasis:`state`\ is \ :literal:`present`\ .
+
+
+ password (optional, str, None)
+ Password of the iDRAC.
+
+ \ :emphasis:`password`\ is required when \ :emphasis:`state`\ is \ :literal:`present`\ .
+
+
+ port (optional, int, 443)
+ Port of the iDRAC.
+
+
+ validate_certs (optional, bool, True)
+ If \ :literal:`false`\ , the SSL certificates will not be validated.
+
+ Configure \ :literal:`false`\ only on personally controlled sites where self-signed certificates are used.
+
+
+ ca_path (optional, path, None)
+ The Privacy Enhanced Mail (PEM) file that contains a CA certificate to be used for the validation.
+
+
+ timeout (optional, int, 30)
+ The https socket level timeout in seconds.
+
+
+ state (optional, str, present)
+ The state of the session in an iDRAC.
+
+ \ :literal:`present`\ creates a session.
+
+ \ :literal:`absent`\ deletes a session.
+
+ Module will always report changes found to be applied when \ :emphasis:`state`\ is \ :literal:`present`\ .
+
+
+ auth_token (optional, str, None)
+ Authentication token.
+
+ \ :emphasis:`auth\_token`\ is required when \ :emphasis:`state`\ is \ :literal:`absent`\ .
+
+
+ session_id (optional, int, None)
+ Session ID of the iDRAC.
+
+ \ :emphasis:`session\_id`\ is required when \ :emphasis:`state`\ is \ :literal:`absent`\ .
+
+
+
+
+
+Notes
+-----
+
+.. note::
+ - Run this module from a system that has direct access to Dell iDRAC.
+ - This module supports IPv4 and IPv6 addresses.
+ - This module supports \ :literal:`check\_mode`\ .
+ - This module will always report changes found to be applied when \ :emphasis:`state`\ is \ :literal:`present`\ .
+
+
+
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ ---
+ - name: Create a session
+ dellemc.openmanage.idrac_session:
+ hostname: 198.162.0.1
+ username: username
+ password: password
+ state: present
+
+ - name: Delete a session
+ dellemc.openmanage.idrac_session:
+ hostname: 198.162.0.1
+ state: absent
+ auth_token: aed4aa802b748d2f3b31deec00a6b28a
+ session_is: 2
+
+
+
+Return Values
+-------------
+
+msg (always, str, The session has been created successfully.)
+ Status of the session operation.
+
+
+session_data (For session creation operation, dict, {'@Message.ExtendedInfo': [{'Message': 'The resource has been created successfully.', 'MessageArgs': [], 'MessageId': 'Base.1.12.Created', 'RelatedProperties': [], 'Resolution': 'None.', 'Severity': 'OK'}, {'Message': 'A new resource is successfully created.', 'MessageArgs': [], 'MessageId': 'IDRAC.2.9.SYS414', 'RelatedProperties': [], 'Resolution': 'No response action is required.', 'Severity': 'Informational'}], 'ClientOriginIPAddress': '100.96.37.58', 'CreatedTime': '2024-04-05T01:14:01-05:00', 'Description': 'User Session', 'Id': '74', 'Name': 'User Session', 'Password': None, 'SessionType': 'Redfish', 'UserName': 'root'})
+ The session details.
+
+
+x_auth_token (For session creation operation, str, d15f17f01cd627c30173b1582642497d)
+ Authentication token.
+
+
+error_info (On HTTP error, dict, {'error': {'@Message.ExtendedInfo': [{'Message': 'Unable to complete the operation because an invalid username and/or password is entered, and therefore authentication failed.', 'MessageArgs': [], 'MessageId': 'IDRAC.2.9.SYS415', 'RelatedProperties': [], 'Resolution': 'Enter valid user name and password and retry the operation.', 'Severity': 'Warning'}], 'code': 'Base.1.12.GeneralError', 'message': 'A general error has occurred. See ExtendedInfo for more information'}})
+ Details of the HTTP Error.
+
+
+
+
+
+Status
+------
+
+
+
+
+
+Authors
+~~~~~~~
+
+- Rajshekar P(@rajshekarp87)
+
diff --git a/ansible_collections/dellemc/openmanage/docs/modules/idrac_storage_volume.rst b/ansible_collections/dellemc/openmanage/docs/modules/idrac_storage_volume.rst
new file mode 100644
index 000000000..5cfefc036
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/docs/modules/idrac_storage_volume.rst
@@ -0,0 +1,310 @@
+.. _idrac_storage_volume_module:
+
+
+idrac_storage_volume -- Configures the RAID configuration attributes
+====================================================================
+
+.. contents::
+ :local:
+ :depth: 1
+
+
+Synopsis
+--------
+
+This module is responsible for configuring the RAID attributes.
+
+
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- python \>= 3.9.6
+
+
+
+Parameters
+----------
+
+ state (optional, str, view)
+ \ :literal:`create`\ , performs create volume operation.
+
+ \ :literal:`delete`\ , performs remove volume operation.
+
+ \ :literal:`view`\ , returns storage view.
+
+
+ span_depth (optional, int, 1)
+ Number of spans in the RAID configuration.
+
+ \ :emphasis:`span\_depth`\ is required for \ :literal:`create`\ and its value depends on \ :emphasis:`volume\_type`\ .
+
+
+ span_length (optional, int, 1)
+ Number of disks in a span.
+
+ \ :emphasis:`span\_length`\ is required for \ :literal:`create`\ and its value depends on \ :emphasis:`volume\_type`\ .
+
+
+ number_dedicated_hot_spare (optional, int, 0)
+ Number of Dedicated Hot Spare.
+
+
+ volume_type (optional, str, RAID 0)
+ Provide the the required RAID level.
+
+
+ disk_cache_policy (optional, str, Default)
+ Disk Cache Policy.
+
+
+ write_cache_policy (optional, str, WriteThrough)
+ Write cache policy.
+
+
+ read_cache_policy (optional, str, NoReadAhead)
+ Read cache policy.
+
+
+ stripe_size (optional, int, 65536)
+ Stripe size value to be provided in multiples of 64 \* 1024.
+
+
+ controller_id (optional, str, None)
+ Fully Qualified Device Descriptor (FQDD) of the storage controller, for example 'RAID.Integrated.1-1'. Controller FQDD is required for \ :literal:`create`\ RAID configuration.
+
+
+ media_type (optional, str, None)
+ Media type.
+
+
+ protocol (optional, str, None)
+ Bus protocol.
+
+
+ volume_id (optional, str, None)
+ Fully Qualified Device Descriptor (FQDD) of the virtual disk, for example 'Disk.virtual.0:RAID.Slot.1-1'. This option is used to get the virtual disk information.
+
+
+ volumes (optional, list, None)
+ A list of virtual disk specific iDRAC attributes. This is applicable for \ :literal:`create`\ and \ :literal:`delete`\ operations.
+
+ For \ :literal:`create`\ operation, name and drives are applicable options, other volume options can also be specified.
+
+ The drives is a required option for \ :literal:`create`\ operation and accepts either location (list of drive slot) or id (list of drive fqdd).
+
+ In iDRAC8, there is no pre-validation for the state of drives. The disk ID or slot number of the drive provided may or may not be in Ready state. Enter the disk ID or slot number of the drive that is already in Ready state.
+
+ For \ :literal:`delete`\ operation, only name option is applicable.
+
+ See the examples for more details.
+
+
+ capacity (optional, float, None)
+ Virtual disk size in GB.
+
+
+ raid_reset_config (optional, str, false)
+ This option represents whether a reset config operation needs to be performed on the RAID controller. Reset Config operation deletes all the virtual disks present on the RAID controller.
+
+
+ raid_init_operation (optional, str, None)
+ This option represents initialization configuration operation to be performed on the virtual disk.
+
+
+ job_wait (optional, bool, True)
+ This parameter provides the option to wait for the job completion.
+
+ This is applicable when \ :emphasis:`state`\ is \ :literal:`create`\ or \ :literal:`delete`\ .
+
+
+ job_wait_timeout (optional, int, 900)
+ This parameter is the maximum wait time of \ :emphasis:`job\_wait`\ in seconds.
+
+ This option is applicable when \ :emphasis:`job\_wait`\ is \ :literal:`true`\ .
+
+
+ idrac_ip (True, str, None)
+ iDRAC IP Address.
+
+
+ idrac_user (True, str, None)
+ iDRAC username.
+
+ If the username is not provided, then the environment variable \ :literal:`IDRAC\_USERNAME`\ is used.
+
+ Example: export IDRAC\_USERNAME=username
+
+
+ idrac_password (True, str, None)
+ iDRAC user password.
+
+ If the password is not provided, then the environment variable \ :literal:`IDRAC\_PASSWORD`\ is used.
+
+ Example: export IDRAC\_PASSWORD=password
+
+
+ idrac_port (optional, int, 443)
+ iDRAC port.
+
+
+ validate_certs (optional, bool, True)
+ If \ :literal:`false`\ , the SSL certificates will not be validated.
+
+ Configure \ :literal:`false`\ only on personally controlled sites where self-signed certificates are used.
+
+ Prior to collection version \ :literal:`5.0.0`\ , the \ :emphasis:`validate\_certs`\ is \ :literal:`false`\ by default.
+
+
+ ca_path (optional, path, None)
+ The Privacy Enhanced Mail (PEM) file that contains a CA certificate to be used for the validation.
+
+
+ timeout (optional, int, 30)
+ The socket level timeout in seconds.
+
+
+
+
+
+Notes
+-----
+
+.. note::
+ - Run this module from a system that has direct access to Integrated Dell Remote Access Controller.
+ - This module supports both IPv4 and IPv6 address for \ :emphasis:`idrac\_ip`\ .
+ - This module supports \ :literal:`check\_mode`\ .
+ - This module does not display the controller battery details for the \ :literal:`view`\ operation of the storage in iDRAC8.
+
+
+
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ ---
+ - name: Create single volume
+ dellemc.openmanage.idrac_storage_volume:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "username"
+ idrac_password: "password"
+ ca_path: "/path/to/ca_cert.pem"
+ state: "create"
+ controller_id: "RAID.Slot.1-1"
+ volumes:
+ - drives:
+ location: [5]
+
+ - name: Create multiple volume
+ dellemc.openmanage.idrac_storage_volume:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "username"
+ idrac_password: "password"
+ ca_path: "/path/to/ca_cert.pem"
+ raid_reset_config: "True"
+ state: "create"
+ controller_id: "RAID.Slot.1-1"
+ volume_type: "RAID 1"
+ span_depth: 1
+ span_length: 2
+ number_dedicated_hot_spare: 1
+ disk_cache_policy: "Enabled"
+ write_cache_policy: "WriteBackForce"
+ read_cache_policy: "ReadAhead"
+ stripe_size: 65536
+ capacity: 100
+ raid_init_operation: "Fast"
+ volumes:
+ - name: "volume_1"
+ drives:
+ id: ["Disk.Bay.1:Enclosure.Internal.0-1:RAID.Slot.1-1", "Disk.Bay.2:Enclosure.Internal.0-1:RAID.Slot.1-1"]
+ - name: "volume_2"
+ volume_type: "RAID 5"
+ span_length: 3
+ span_depth: 1
+ drives:
+ location: [7, 3, 5]
+ disk_cache_policy: "Disabled"
+ write_cache_policy: "WriteBack"
+ read_cache_policy: "NoReadAhead"
+ stripe_size: 131072
+ capacity: "200"
+ raid_init_operation: "None"
+
+ - name: View all volume details
+ dellemc.openmanage.idrac_storage_volume:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "username"
+ idrac_password: "password"
+ ca_path: "/path/to/ca_cert.pem"
+ state: "view"
+
+ - name: View specific volume details
+ dellemc.openmanage.idrac_storage_volume:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "username"
+ idrac_password: "password"
+ ca_path: "/path/to/ca_cert.pem"
+ state: "view"
+ controller_id: "RAID.Slot.1-1"
+ volume_id: "Disk.Virtual.0:RAID.Slot.1-1"
+
+ - name: Delete single volume
+ dellemc.openmanage.idrac_storage_volume:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "username"
+ idrac_password: "password"
+ ca_path: "/path/to/ca_cert.pem"
+ state: "delete"
+ volumes:
+ - name: "volume_1"
+
+ - name: Delete multiple volume
+ dellemc.openmanage.idrac_storage_volume:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "username"
+ idrac_password: "password"
+ ca_path: "/path/to/ca_cert.pem"
+ state: "delete"
+ volumes:
+ - name: "volume_1"
+ - name: "volume_2"
+
+
+
+Return Values
+-------------
+
+msg (always, str, Successfully completed the view storage volume operation)
+ Overall status of the storage configuration operation.
+
+
+storage_status (success, dict, {'Id': 'JID_XXXXXXXXX', 'JobState': 'Completed', 'JobType': 'ImportConfiguration', 'Message': 'Successfully imported and applied Server Configuration Profile.', 'MessageId': 'XXX123', 'Name': 'Import Configuration', 'PercentComplete': 100, 'StartTime': 'TIME_NOW', 'TargetSettingsURI': None})
+ Storage configuration job and progress details from the iDRAC.
+
+
+error_info (on HTTP error, dict, {'error': {'code': 'Base.1.0.GeneralError', 'message': 'A general error has occurred. See ExtendedInfo for more information.', '@Message.ExtendedInfo': [{'MessageId': 'GEN1234', 'RelatedProperties': [], 'Message': 'Unable to process the request because an error occurred.', 'MessageArgs': [], 'Severity': 'Critical', 'Resolution': 'Retry the operation. If the issue persists, contact your system administrator.'}]}})
+ Details of the HTTP Error.
+
+
+
+
+
+Status
+------
+
+
+
+
+
+Authors
+~~~~~~~
+
+- Felix Stephen (@felixs88)
+- Kritika Bhateja (@Kritika-Bhateja-03)
+- Abhishek Sinha(@ABHISHEK-SINHA10)
+
diff --git a/ansible_collections/dellemc/openmanage/docs/modules/ome_application_console_preferences.rst b/ansible_collections/dellemc/openmanage/docs/modules/ome_application_console_preferences.rst
index 79ce3f7d4..45292acd0 100644
--- a/ansible_collections/dellemc/openmanage/docs/modules/ome_application_console_preferences.rst
+++ b/ansible_collections/dellemc/openmanage/docs/modules/ome_application_console_preferences.rst
@@ -20,7 +20,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- python >= 3.8.6
+- python \>= 3.9.6
@@ -42,17 +42,17 @@ Parameters
health_check_interval_unit (optional, str, None)
The time unit of the frequency at which the device health must be recorded and data stored.
- ``Hourly`` to set the frequency in hours.
+ \ :literal:`Hourly`\ to set the frequency in hours.
- ``Minutes`` to set the frequency in minutes.
+ \ :literal:`Minutes`\ to set the frequency in minutes.
health_and_power_state_on_connection_lost (optional, str, None)
The latest recorded device health.
- ``last_known`` to display the latest recorded device health when the power connection was lost.
+ \ :literal:`last\_known`\ to display the latest recorded device health when the power connection was lost.
- ``unknown`` to display the latest recorded device health when the device status moved to unknown.
+ \ :literal:`unknown`\ to display the latest recorded device health when the device status moved to unknown.
@@ -63,17 +63,17 @@ Parameters
general_device_naming (optional, str, DNS)
Applicable to all the discovered devices other than the iDRACs.
- ``DNS`` to use the DNS name.
+ \ :literal:`DNS`\ to use the DNS name.
- ``NETBIOS`` to use the NetBIOS name.
+ \ :literal:`NETBIOS`\ to use the NetBIOS name.
server_device_naming (optional, str, IDRAC_SYSTEM_HOSTNAME)
Applicable to iDRACs only.
- ``IDRAC_HOSTNAME`` to use the iDRAC hostname.
+ \ :literal:`IDRAC\_HOSTNAME`\ to use the iDRAC hostname.
- ``IDRAC_SYSTEM_HOSTNAME`` to use the system hostname.
+ \ :literal:`IDRAC\_SYSTEM\_HOSTNAME`\ to use the system hostname.
invalid_device_hostname (optional, str, None)
@@ -92,9 +92,9 @@ Parameters
device_discovery_approval_policy (optional, str, None)
Discovery approval policies.
- ``Automatic`` allows servers with iDRAC Firmware version 4.00.00.00, which are on the same network as the console, to be discovered automatically by the console.
+ \ :literal:`Automatic`\ allows servers with iDRAC Firmware version 4.00.00.00, which are on the same network as the console, to be discovered automatically by the console.
- ``Manual`` for the servers to be discovered by the user manually.
+ \ :literal:`Manual`\ for the servers to be discovered by the user manually.
set_trap_destination (optional, bool, None)
@@ -105,9 +105,9 @@ Parameters
mx7000_onboarding_preferences (optional, str, None)
Alert-forwarding behavior on chassis when they are onboarded.
- ``all`` to receive all alert.
+ \ :literal:`all`\ to receive all alert.
- ``chassis`` to receive chassis category alerts only.
+ \ :literal:`chassis`\ to receive chassis category alerts only.
builtin_appliance_share (optional, dict, None)
@@ -117,19 +117,19 @@ Parameters
share_options (optional, str, None)
The share options.
- ``CIFS`` to select CIFS share type.
+ \ :literal:`CIFS`\ to select CIFS share type.
- ``HTTPS`` to select HTTPS share type.
+ \ :literal:`HTTPS`\ to select HTTPS share type.
cifs_options (optional, str, None)
The SMB protocol version.
- *cifs_options* is required *share_options* is ``CIFS``.
+ \ :emphasis:`cifs\_options`\ is required \ :emphasis:`share\_options`\ is \ :literal:`CIFS`\ .
- ``V1`` to enable SMBv1.
+ \ :literal:`V1`\ to enable SMBv1.
- ``V2`` to enable SMBv2
+ \ :literal:`V2`\ to enable SMBv2
@@ -140,9 +140,9 @@ Parameters
trap_forwarding_format (optional, str, None)
The trap forwarding format.
- ``Original`` to retain the trap data as is.
+ \ :literal:`Original`\ to retain the trap data as is.
- ``Normalized`` to normalize the trap data.
+ \ :literal:`Normalized`\ to normalize the trap data.
metrics_collection_settings (optional, int, None)
@@ -166,11 +166,11 @@ Parameters
validate_certs (optional, bool, True)
- If ``false``, the SSL certificates will not be validated.
+ If \ :literal:`false`\ , the SSL certificates will not be validated.
- Configure ``false`` only on personally controlled sites where self-signed certificates are used.
+ Configure \ :literal:`false`\ only on personally controlled sites where self-signed certificates are used.
- Prior to collection version ``5.0.0``, the *validate_certs* is ``false`` by default.
+ Prior to collection version \ :literal:`5.0.0`\ , the \ :emphasis:`validate\_certs`\ is \ :literal:`false`\ by default.
ca_path (optional, path, None)
@@ -188,7 +188,7 @@ Notes
-----
.. note::
- - This module supports ``check_mode``.
+ - This module supports \ :literal:`check\_mode`\ .
@@ -311,4 +311,5 @@ Authors
- Sachin Apagundi(@sachin-apa)
- Husniya Hameed (@husniya-hameed)
+- ShivamSh3 (@ShivamSh3)
diff --git a/ansible_collections/dellemc/openmanage/docs/modules/ome_device_local_access_configuration.rst b/ansible_collections/dellemc/openmanage/docs/modules/ome_device_local_access_configuration.rst
index a5846243e..1deafefb0 100644
--- a/ansible_collections/dellemc/openmanage/docs/modules/ome_device_local_access_configuration.rst
+++ b/ansible_collections/dellemc/openmanage/docs/modules/ome_device_local_access_configuration.rst
@@ -20,7 +20,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- python >= 3.8.6
+- python \>= 3.9.6
@@ -30,17 +30,17 @@ Parameters
device_id (optional, int, None)
The ID of the chassis for which the local access configuration to be updated.
- If the device ID is not specified, this module updates the local access settings for the *hostname*.
+ If the device ID is not specified, this module updates the local access settings for the \ :emphasis:`hostname`\ .
- *device_id* is mutually exclusive with *device_service_tag*.
+ \ :emphasis:`device\_id`\ is mutually exclusive with \ :emphasis:`device\_service\_tag`\ .
device_service_tag (optional, str, None)
The service tag of the chassis for which the local access settings needs to be updated.
- If the device service tag is not specified, this module updates the local access settings for the *hostname*.
+ If the device service tag is not specified, this module updates the local access settings for the \ :emphasis:`hostname`\ .
- *device_service_tag* is mutually exclusive with *device_id*.
+ \ :emphasis:`device\_service\_tag`\ is mutually exclusive with \ :emphasis:`device\_id`\ .
enable_kvm_access (optional, bool, None)
@@ -58,21 +58,21 @@ Parameters
enable_chassis_power_button (True, bool, None)
Enables or disables the chassis power button.
- If ``false``, the chassis cannot be turn on or turn off using the power button.
+ If \ :literal:`false`\ , the chassis cannot be turn on or turn off using the power button.
enable_lcd_override_pin (optional, bool, None)
Enables or disables the LCD override pin.
- This is required when *enable_chassis_power_button* is ``false``.
+ This is required when \ :emphasis:`enable\_chassis\_power\_button`\ is \ :literal:`false`\ .
disabled_button_lcd_override_pin (optional, str, None)
The six digit LCD override pin to change the power state of the chassis.
- This is required when *enable_lcd_override_pin* is ``true``.
+ This is required when \ :emphasis:`enable\_lcd\_override\_pin`\ is \ :literal:`true`\ .
- The module will always report change when *disabled_button_lcd_override_pin* is ``true``.
+ The module will always report change when \ :emphasis:`disabled\_button\_lcd\_override\_pin`\ is \ :literal:`true`\ .
The value must be specified in quotes. ex: "001100".
@@ -81,17 +81,17 @@ Parameters
quick_sync (optional, dict, None)
The settings for quick sync.
- The *quick_sync* options are ignored if the quick sync hardware is not present.
+ The \ :emphasis:`quick\_sync`\ options are ignored if the quick sync hardware is not present.
quick_sync_access (optional, str, None)
- Users with administrator privileges can set the following types of *quick_sync_access*.
+ Users with administrator privileges can set the following types of \ :emphasis:`quick\_sync\_access`\ .
- ``READ_WRITE`` enables writing configuration using quick sync.
+ \ :literal:`READ\_WRITE`\ enables writing configuration using quick sync.
- ``READ_ONLY`` enables read only access to Wi-Fi and Bluetooth Low Energy(BLE).
+ \ :literal:`READ\_ONLY`\ enables read only access to Wi-Fi and Bluetooth Low Energy(BLE).
- ``DISABLED`` disables reading or writing configuration through quick sync.
+ \ :literal:`DISABLED`\ disables reading or writing configuration through quick sync.
enable_inactivity_timeout (optional, bool, None)
@@ -103,17 +103,17 @@ Parameters
The range is 120 to 3600 in seconds, or 2 to 60 in minutes.
- This option is required when *enable_inactivity_timeout* is ``true``.
+ This option is required when \ :emphasis:`enable\_inactivity\_timeout`\ is \ :literal:`true`\ .
timeout_limit_unit (optional, str, None)
Inactivity timeout limit unit.
- ``SECONDS`` to set *timeout_limit* in seconds.
+ \ :literal:`SECONDS`\ to set \ :emphasis:`timeout\_limit`\ in seconds.
- ``MINUTES`` to set *timeout_limit* in minutes.
+ \ :literal:`MINUTES`\ to set \ :emphasis:`timeout\_limit`\ in minutes.
- This option is required when *enable_inactivity_timeout* is ``true``.
+ This option is required when \ :emphasis:`enable\_inactivity\_timeout`\ is \ :literal:`true`\ .
enable_read_authentication (optional, bool, None)
@@ -128,17 +128,17 @@ Parameters
lcd (optional, dict, None)
The settings for LCD.
- The *lcd* options are ignored if the LCD hardware is not present in the chassis.
+ The \ :emphasis:`lcd`\ options are ignored if the LCD hardware is not present in the chassis.
lcd_access (optional, str, None)
Option to configure the quick sync settings using LCD.
- ``VIEW_AND_MODIFY`` to set access level to view and modify.
+ \ :literal:`VIEW\_AND\_MODIFY`\ to set access level to view and modify.
- ``VIEW_ONLY`` to set access level to view.
+ \ :literal:`VIEW\_ONLY`\ to set access level to view.
- ``DISABLED`` to disable the access.
+ \ :literal:`DISABLED`\ to disable the access.
user_defined (optional, str, None)
@@ -179,11 +179,11 @@ Parameters
validate_certs (optional, bool, True)
- If ``false``, the SSL certificates will not be validated.
+ If \ :literal:`false`\ , the SSL certificates will not be validated.
- Configure ``false`` only on personally controlled sites where self-signed certificates are used.
+ Configure \ :literal:`false`\ only on personally controlled sites where self-signed certificates are used.
- Prior to collection version ``5.0.0``, the *validate_certs* is ``false`` by default.
+ Prior to collection version \ :literal:`5.0.0`\ , the \ :emphasis:`validate\_certs`\ is \ :literal:`false`\ by default.
ca_path (optional, path, None)
@@ -202,8 +202,8 @@ Notes
.. note::
- Run this module from a system that has direct access to OpenManage Enterprise Modular.
- - This module supports ``check_mode``.
- - The module will always report change when *enable_chassis_power_button* is ``true``.
+ - This module supports \ :literal:`check\_mode`\ .
+ - The module will always report change when \ :emphasis:`enable\_chassis\_power\_button`\ is \ :literal:`true`\ .
@@ -281,7 +281,7 @@ msg (always, str, Successfully updated the local access settings.)
Overall status of the device local access settings.
-location_details (success, dict, {'SettingType': 'LocalAccessConfiguration', 'EnableChassisDirect': False, 'EnableChassisPowerButton': False, 'EnableKvmAccess': True, 'EnableLcdOverridePin': False, 'LcdAccess': 'VIEW_ONLY', 'LcdCustomString': 'LCD Text', 'LcdLanguage': 'en', 'LcdOverridePin': '', 'LcdPinLength': None, 'LcdPresence': 'Present', 'LedPresence': None, 'QuickSync': {'EnableInactivityTimeout': True, 'EnableQuickSyncWifi': False, 'EnableReadAuthentication': False, 'QuickSyncAccess': 'READ_ONLY', 'QuickSyncHardware': 'Present', 'TimeoutLimit': 7, 'TimeoutLimitUnit': 'MINUTES'}})
+location_details (success, dict, {'SettingType': 'LocalAccessConfiguration', 'EnableChassisDirect': False, 'EnableChassisPowerButton': False, 'EnableKvmAccess': True, 'EnableLcdOverridePin': False, 'LcdAccess': 'VIEW_ONLY', 'LcdCustomString': 'LCD Text', 'LcdLanguage': 'en', 'LcdOverridePin': '', 'LcdPinLength': 6, 'LcdPresence': 'Present', 'LedPresence': 'Absent', 'QuickSync': {'EnableInactivityTimeout': True, 'EnableQuickSyncWifi': False, 'EnableReadAuthentication': False, 'QuickSyncAccess': 'READ_ONLY', 'QuickSyncHardware': 'Present', 'TimeoutLimit': 7, 'TimeoutLimitUnit': 'MINUTES'}})
returned when local access settings are updated successfully.
diff --git a/ansible_collections/dellemc/openmanage/docs/modules/ome_device_quick_deploy.rst b/ansible_collections/dellemc/openmanage/docs/modules/ome_device_quick_deploy.rst
index 185331335..6d1e1adf3 100644
--- a/ansible_collections/dellemc/openmanage/docs/modules/ome_device_quick_deploy.rst
+++ b/ansible_collections/dellemc/openmanage/docs/modules/ome_device_quick_deploy.rst
@@ -20,7 +20,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- python >= 3.9.6
+- python \>= 3.9.6
@@ -30,25 +30,25 @@ Parameters
device_id (optional, int, None)
The ID of the chassis for which the Quick Deploy settings to be deployed.
- If the device ID is not specified, this module updates the Quick Deploy settings for the *hostname*.
+ If the device ID is not specified, this module updates the Quick Deploy settings for the \ :emphasis:`hostname`\ .
- *device_id* is mutually exclusive with *device_service_tag*.
+ \ :emphasis:`device\_id`\ is mutually exclusive with \ :emphasis:`device\_service\_tag`\ .
device_service_tag (optional, str, None)
The service tag of the chassis for which the Quick Deploy settings to be deployed.
- If the device service tag is not specified, this module updates the Quick Deploy settings for the *hostname*.
+ If the device service tag is not specified, this module updates the Quick Deploy settings for the \ :emphasis:`hostname`\ .
- *device_service_tag* is mutually exclusive with *device_id*.
+ \ :emphasis:`device\_service\_tag`\ is mutually exclusive with \ :emphasis:`device\_id`\ .
setting_type (True, str, None)
The type of the Quick Deploy settings to be applied.
- ``ServerQuickDeploy`` to apply the server Quick Deploy settings.
+ \ :literal:`ServerQuickDeploy`\ to apply the server Quick Deploy settings.
- ``IOMQuickDeploy`` to apply the IOM Quick Deploy settings.
+ \ :literal:`IOMQuickDeploy`\ to apply the IOM Quick Deploy settings.
job_wait (optional, bool, True)
@@ -56,9 +56,9 @@ Parameters
job_wait_timeout (optional, int, 120)
- The maximum wait time of *job_wait* in seconds. The job is tracked only for this duration.
+ The maximum wait time of \ :emphasis:`job\_wait`\ in seconds. The job is tracked only for this duration.
- This option is applicable when *job_wait* is ``true``.
+ This option is applicable when \ :emphasis:`job\_wait`\ is \ :literal:`true`\ .
quick_deploy_options (True, dict, None)
@@ -68,7 +68,7 @@ Parameters
password (optional, str, None)
The password to login to the server or IOM.
- The module will always report change when *password* option is added.
+ The module will always report change when \ :emphasis:`password`\ option is added.
ipv4_enabled (optional, bool, None)
@@ -78,23 +78,23 @@ Parameters
ipv4_network_type (optional, str, None)
IPv4 network type.
- *ipv4_network_type* is required if *ipv4_enabled* is ``true``.
+ \ :emphasis:`ipv4\_network\_type`\ is required if \ :emphasis:`ipv4\_enabled`\ is \ :literal:`true`\ .
- ``Static`` to configure the static IP settings.
+ \ :literal:`Static`\ to configure the static IP settings.
- ``DHCP`` to configure the Dynamic IP settings.
+ \ :literal:`DHCP`\ to configure the Dynamic IP settings.
ipv4_subnet_mask (optional, str, None)
IPv4 subnet mask.
- *ipv4_subnet_mask* is required if *ipv4_network_type* is ``Static``.
+ \ :emphasis:`ipv4\_subnet\_mask`\ is required if \ :emphasis:`ipv4\_network\_type`\ is \ :literal:`Static`\ .
ipv4_gateway (optional, str, None)
IPv4 gateway.
- *ipv4_gateway* is required if *ipv4_network_type* is ``Static``.
+ \ :emphasis:`ipv4\_gateway`\ is required if \ :emphasis:`ipv4\_network\_type`\ is \ :literal:`Static`\ .
ipv6_enabled (optional, bool, None)
@@ -104,23 +104,23 @@ Parameters
ipv6_network_type (optional, str, None)
IPv6 network type.
- *ipv6_network_type* is required if *ipv6_enabled* is ``true``.
+ \ :emphasis:`ipv6\_network\_type`\ is required if \ :emphasis:`ipv6\_enabled`\ is \ :literal:`true`\ .
- ``Static`` to configure the static IP settings.
+ \ :literal:`Static`\ to configure the static IP settings.
- ``DHCP`` to configure the Dynamic IP settings.
+ \ :literal:`DHCP`\ to configure the Dynamic IP settings.
ipv6_prefix_length (optional, int, None)
IPV6 prefix length.
- *ipv6_prefix_length* is required if *ipv6_network_type* is ``Static``.
+ \ :emphasis:`ipv6\_prefix\_length`\ is required if \ :emphasis:`ipv6\_network\_type`\ is \ :literal:`Static`\ .
ipv6_gateway (optional, str, None)
IPv6 gateway.
- *ipv6_gateway* is required if *ipv6_network_type* is ``Static``.
+ \ :emphasis:`ipv6\_gateway`\ is required if \ :emphasis:`ipv6\_network\_type`\ is \ :literal:`Static`\ .
slots (optional, list, None)
@@ -152,21 +152,29 @@ Parameters
username (True, str, None)
OpenManage Enterprise Modular username.
+ If the username is not provided, then the environment variable \ :literal:`OME\_USERNAME`\ is used.
+
+ Example: export OME\_USERNAME=username
+
password (True, str, None)
OpenManage Enterprise Modular password.
+ If the password is not provided, then the environment variable \ :literal:`OME\_PASSWORD`\ is used.
+
+ Example: export OME\_PASSWORD=password
+
port (optional, int, 443)
OpenManage Enterprise Modular HTTPS port.
validate_certs (optional, bool, True)
- If ``false``, the SSL certificates will not be validated.
+ If \ :literal:`false`\ , the SSL certificates will not be validated.
- Configure ``false`` only on personally controlled sites where self-signed certificates are used.
+ Configure \ :literal:`false`\ only on personally controlled sites where self-signed certificates are used.
- Prior to collection version ``5.0.0``, the *validate_certs* is ``false`` by default.
+ Prior to collection version \ :literal:`5.0.0`\ , the \ :emphasis:`validate\_certs`\ is \ :literal:`false`\ by default.
ca_path (optional, path, None)
@@ -185,8 +193,8 @@ Notes
.. note::
- Run this module from a system that has direct access to OpenManage Enterprise Modular.
- - This module supports ``check_mode``.
- - The module will always report change when *password* option is added.
+ - This module supports \ :literal:`check\_mode`\ .
+ - The module will always report change when \ :emphasis:`password`\ option is added.
- If the chassis is a member of a multi-chassis group and it is assigned as a backup lead chassis, the operations performed on the chassis using this module may conflict with the management operations performed on the chassis through the lead chassis.
@@ -291,4 +299,5 @@ Authors
- Felix Stephen (@felixs88)
- Shivam Sharma (@ShivamSh3)
+- Kritika Bhateja (@Kritika-Bhateja-03)
diff --git a/ansible_collections/dellemc/openmanage/docs/modules/ome_devices.rst b/ansible_collections/dellemc/openmanage/docs/modules/ome_devices.rst
index 756adde24..b1d56a045 100644
--- a/ansible_collections/dellemc/openmanage/docs/modules/ome_devices.rst
+++ b/ansible_collections/dellemc/openmanage/docs/modules/ome_devices.rst
@@ -20,7 +20,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- python >= 3.8.6
+- python \>= 3.9.6
@@ -30,27 +30,27 @@ Parameters
device_service_tags (optional, list, None)
Service tag of the target devices.
- This is mutually exclusive with *device_ids*.
+ This is mutually exclusive with \ :emphasis:`device\_ids`\ .
device_ids (optional, list, None)
IDs of the target devices.
- This is mutually exclusive with *device_service_tags*.
+ This is mutually exclusive with \ :emphasis:`device\_service\_tags`\ .
state (optional, str, present)
- ``present`` Allows to perform the *device_action* on the target devices.
+ \ :literal:`present`\ Allows to perform the \ :emphasis:`device\_action`\ on the target devices.
- ``absent`` Removes the device from OpenManage Enterprise. Job is not triggered. *job_wait*, *job_schedule*, *job_name*, and *job_description* are not applicable to this operation.
+ \ :literal:`absent`\ Removes the device from OpenManage Enterprise. Job is not triggered. \ :emphasis:`job\_wait`\ , \ :emphasis:`job\_schedule`\ , \ :emphasis:`job\_name`\ , and \ :emphasis:`job\_description`\ are not applicable to this operation.
device_action (optional, str, refresh_inventory)
- ``refresh_inventory`` refreshes the inventory on the target devices.
+ \ :literal:`refresh\_inventory`\ refreshes the inventory on the target devices.
- ``reset_idrac`` Triggers a reset on the target iDRACs.
+ \ :literal:`reset\_idrac`\ Triggers a reset on the target iDRACs.
- ``clear_idrac_job_queue`` Clears the job queue on the target iDRACs.
+ \ :literal:`clear\_idrac\_job\_queue`\ Clears the job queue on the target iDRACs.
A job is triggered for each action.
@@ -58,15 +58,15 @@ Parameters
job_wait (optional, bool, True)
Provides an option to wait for the job completion.
- This option is applicable when *state* is ``present``.
+ This option is applicable when \ :emphasis:`state`\ is \ :literal:`present`\ .
- This is applicable when *job_schedule* is ``startnow``.
+ This is applicable when \ :emphasis:`job\_schedule`\ is \ :literal:`startnow`\ .
job_wait_timeout (optional, int, 1200)
- The maximum wait time of *job_wait* in seconds. The job is tracked only for this duration.
+ The maximum wait time of \ :emphasis:`job\_wait`\ in seconds. The job is tracked only for this duration.
- This option is applicable when *job_wait* is ``true``.
+ This option is applicable when \ :emphasis:`job\_wait`\ is \ :literal:`true`\ .
job_schedule (optional, str, startnow)
@@ -98,11 +98,11 @@ Parameters
validate_certs (optional, bool, True)
- If ``false``, the SSL certificates will not be validated.
+ If \ :literal:`false`\ , the SSL certificates will not be validated.
- Configure ``false`` only on personally controlled sites where self-signed certificates are used.
+ Configure \ :literal:`false`\ only on personally controlled sites where self-signed certificates are used.
- Prior to collection version ``5.0.0``, the *validate_certs* is ``false`` by default.
+ Prior to collection version \ :literal:`5.0.0`\ , the \ :emphasis:`validate\_certs`\ is \ :literal:`false`\ by default.
ca_path (optional, path, None)
@@ -120,9 +120,9 @@ Notes
-----
.. note::
- - For ``idrac_reset``, the job triggers only the iDRAC reset operation and does not track the complete reset cycle.
+ - For \ :literal:`idrac\_reset`\ , the job triggers only the iDRAC reset operation and does not track the complete reset cycle.
- Run this module from a system that has direct access to Dell OpenManage Enterprise.
- - This module supports ``check_mode``.
+ - This module supports \ :literal:`check\_mode`\ .
@@ -216,4 +216,5 @@ Authors
~~~~~~~
- Jagadeesh N V(@jagadeeshnv)
+- ShivamSh3(@ShivamSh3)
diff --git a/ansible_collections/dellemc/openmanage/docs/modules/redfish_storage_volume.rst b/ansible_collections/dellemc/openmanage/docs/modules/redfish_storage_volume.rst
index f6e5f577f..c349b7d99 100644
--- a/ansible_collections/dellemc/openmanage/docs/modules/redfish_storage_volume.rst
+++ b/ansible_collections/dellemc/openmanage/docs/modules/redfish_storage_volume.rst
@@ -227,6 +227,7 @@ Notes
- Run this module from a system that has direct access to Redfish APIs.
- This module supports \ :literal:`check\_mode`\ .
- This module always reports changes when \ :emphasis:`name`\ and \ :emphasis:`volume\_id`\ are not specified. Either \ :emphasis:`name`\ or \ :emphasis:`volume\_id`\ is required to support \ :literal:`check\_mode`\ .
+ - This module does not support the create operation of RAID6 and RAID60 storage volume on iDRAC8
- This module supports IPv4 and IPv6 addresses.
@@ -405,4 +406,5 @@ Authors
- Sajna Shetty(@Sajna-Shetty)
- Kritika Bhateja(@Kritika-Bhateja-03)
+- Shivam Sharma(@ShivamSh3)
diff --git a/ansible_collections/dellemc/openmanage/meta/runtime.yml b/ansible_collections/dellemc/openmanage/meta/runtime.yml
index 8255bdc82..2c94ec4fa 100644
--- a/ansible_collections/dellemc/openmanage/meta/runtime.yml
+++ b/ansible_collections/dellemc/openmanage/meta/runtime.yml
@@ -1,5 +1,5 @@
---
-requires_ansible: ">=2.14.0"
+requires_ansible: ">=2.15.0"
plugin_routing:
modules:
dellemc_get_firmware_inventory:
@@ -34,3 +34,10 @@ plugin_routing:
deprecation:
removal_date: "2024-07-31"
warning_text: idrac_timezone_ntp will be removed in a future release of this collection. Use dellemc.openmanage.idrac_attributes instead.
+ dellemc_idrac_storage_volume:
+ redirect: dellemc.openmanage.idrac_storage_volume
+ deprecation:
+ removal_date: "2026-03-31"
+ warning_text: dellemc_idrac_storage_volume will be removed in a future
+ release of this collection.
+ Use dellemc.openmanage.idrac_storage_volume instead.
diff --git a/ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_diagnostics.yml b/ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_diagnostics.yml
new file mode 100644
index 000000000..0cbc68bce
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_diagnostics.yml
@@ -0,0 +1,97 @@
+---
+- name: Dell OpenManage Ansible iDRAC Diagnostics.
+ hosts: idrac
+ gather_facts: false
+
+ tasks:
+ - name: Run and export the diagnostics to local path
+ dellemc.openmanage.idrac_diagnostics:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "idrac_user"
+ idrac_password: "idrac_password"
+ ca_path: "path/to/ca_file"
+ run: true
+ export: true
+ share_parameters:
+ share_type: "local"
+ share_name: "/opt/local/diagnostics/"
+ file_name: "diagnostics.txt"
+ delegate_to: localhost
+
+ - name: Run the diagnostics with power cycle reboot on schedule
+ dellemc.openmanage.idrac_diagnostics:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "idrac_user"
+ idrac_password: "idrac_password"
+ ca_path: "path/to/ca_file"
+ run: true
+ run_mode: "express"
+ reboot_type: "power_cycle"
+ scheduled_start_time: 20240101101015
+ delegate_to: localhost
+
+ - name: Run and export the diagnostics to HTTPS share
+ dellemc.openmanage.idrac_diagnostics:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "idrac_user"
+ idrac_password: "idrac_password"
+ ca_path: "path/to/ca_file"
+ run: true
+ export: true
+ share_parameters:
+ share_type: "HTTPS"
+ ignore_certificate_warning: "on"
+ share_name: "/share_path/diagnostics_collection_path"
+ ip_address: "192.168.0.2"
+ file_name: "diagnostics.txt"
+ delegate_to: localhost
+
+ - name: Run and export the diagnostics to NFS share
+ dellemc.openmanage.idrac_diagnostics:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "idrac_user"
+ idrac_password: "idrac_password"
+ ca_path: "path/to/ca_file"
+ run: true
+ export: true
+ share_parameters:
+ share_type: "NFS"
+ share_name: "nfsshare/diagnostics_collection_path/"
+ ip_address: "192.168.0.3"
+ file_name: "diagnostics.txt"
+ delegate_to: localhost
+
+ - name: Export the diagnostics to CIFS share
+ dellemc.openmanage.idrac_diagnostics:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "idrac_user"
+ idrac_password: "idrac_password"
+ ca_path: "path/to/ca_file"
+ export: true
+ share_parameters:
+ share_type: "CIFS"
+ share_name: "/cifsshare/diagnostics_collection_path/"
+ ip_address: "192.168.0.4"
+ file_name: "diagnostics.txt"
+ delegate_to: localhost
+
+ - name: Export the diagnostics to HTTPS share via proxy
+ dellemc.openmanage.idrac_diagnostics:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "idrac_user"
+ idrac_password: "idrac_password"
+ ca_path: "path/to/ca_file"
+ export: true
+ share_parameters:
+ share_type: "HTTPS"
+ share_name: "/share_path/diagnostics_collection_path"
+ ignore_certificate_warning: "on"
+ ip_address: "192.168.0.2"
+ file_name: "diagnostics.txt"
+ proxy_support: parameters_proxy
+ proxy_type: http
+ proxy_server: "192.168.0.5"
+ proxy_port: 1080
+ proxy_username: "proxy_user"
+ proxy_password: "proxy_password"
+ delegate_to: localhost
diff --git a/ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_reset.yml b/ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_reset.yml
index 69e4ac36f..a977df598 100644
--- a/ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_reset.yml
+++ b/ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_reset.yml
@@ -4,12 +4,64 @@
gather_facts: false
tasks:
- - name: Reset iDRAC
+ - name: Reset the iDRAC to all and wait till the iDRAC is accessible.
dellemc.openmanage.idrac_reset:
- idrac_ip: "{{ idrac_ip }}"
- idrac_user: "{{ idrac_user }}"
- idrac_password: "{{ idrac_password }}"
+ idrac_ip: "192.168.0.1"
+ idrac_user: "user_name"
+ idrac_password: "user_password"
ca_path: "/path/to/ca_cert.pem"
- tags:
- - idrac_reset
+ reset_to_default: "All"
+ delegate_to: localhost
+
+ - name: Reset the iDRAC to default and
+ do not wait till the iDRAC is accessible.
+ dellemc.openmanage.idrac_reset:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "user_name"
+ idrac_password: "user_password"
+ ca_path: "/path/to/ca_cert.pem"
+ reset_to_default: "Default"
+ wait_for_idrac: false
+ delegate_to: localhost
+
+ - name: Force reset the iDRAC to default.
+ dellemc.openmanage.idrac_reset:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "user_name"
+ idrac_password: "user_password"
+ ca_path: "/path/to/ca_cert.pem"
+ reset_to_default: "Default"
+ force_reset: true
+ delegate_to: localhost
+
+ - name: Gracefully restart the iDRAC.
+ dellemc.openmanage.idrac_reset:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "user_name"
+ idrac_password: "user_password"
+ ca_path: "/path/to/ca_cert.pem"
+ delegate_to: localhost
+
+ - name: Reset the iDRAC to custom defaults XML and
+ do not wait till the iDRAC is accessible.
+ dellemc.openmanage.idrac_reset:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "user_name"
+ idrac_password: "user_password"
+ ca_path: "/path/to/ca_cert.pem"
+ reset_to_default: "CustomDefaults"
+ custom_defaults_file: "/path/to/custom_defaults.xml"
+ delegate_to: localhost
+
+ - name: Reset the iDRAC to custom defaults buffer input and
+ do not wait till the iDRAC is accessible.
+ dellemc.openmanage.idrac_reset:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "user_name"
+ idrac_password: "user_password"
+ ca_path: "/path/to/ca_cert.pem"
+ reset_to_default: "CustomDefaults"
+ custom_defaults_buffer: "<SystemConfiguration><Component
+ FQDD='iDRAC.Embedded.1'><Attribute Name='IPMILan.1#Enable'>
+ Disabled</Attribute></Component></SystemConfiguration>"
delegate_to: localhost
diff --git a/ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_session.yml b/ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_session.yml
new file mode 100644
index 000000000..1e369ef5b
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_session.yml
@@ -0,0 +1,21 @@
+---
+- name: Dell OpenManage Ansible iDRAC Session Management.
+ hosts: idrac
+ gather_facts: false
+
+ tasks:
+ - name: Create a session
+ dellemc.openmanage.idrac_session:
+ hostname: 198.162.0.1
+ username: username
+ password: password
+ state: present
+ delegate_to: localhost
+
+ - name: Delete a session
+ dellemc.openmanage.idrac_session:
+ hostname: 198.162.0.1
+ state: absent
+ auth_token: aed4aa802b748d2f3b31deec00a6b28a
+ session_id: 2
+ delegate_to: localhost
diff --git a/ansible_collections/dellemc/openmanage/playbooks/idrac/dellemc_idrac_storage_volume.yml b/ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_storage_volume.yml
index d3d561ca4..d32ea0dad 100644
--- a/ansible_collections/dellemc/openmanage/playbooks/idrac/dellemc_idrac_storage_volume.yml
+++ b/ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_storage_volume.yml
@@ -5,7 +5,7 @@
tasks:
- name: Create single volume.
- dellemc.openmanage.dellemc_idrac_storage_volume:
+ dellemc.openmanage.idrac_storage_volume:
idrac_ip: "{{ idrac_ip }}"
idrac_user: "{{ idrac_user }}"
idrac_password: "{{ idrac_password }}"
@@ -20,7 +20,7 @@
- create_single_volume
- name: Create multiple volume.
- dellemc.openmanage.dellemc_idrac_storage_volume:
+ dellemc.openmanage.idrac_storage_volume:
idrac_ip: "{{ idrac_ip }}"
idrac_user: "{{ idrac_user }}"
idrac_password: "{{ idrac_password }}"
@@ -63,7 +63,7 @@
- create_multiple_volume
- name: Delete single volume.
- dellemc.openmanage.dellemc_idrac_storage_volume:
+ dellemc.openmanage.idrac_storage_volume:
idrac_ip: "{{ idrac_ip }}"
idrac_user: "{{ idrac_user }}"
idrac_password: "{{ idrac_password }}"
@@ -76,7 +76,7 @@
- delete_single_volume
- name: Delete multiple volume.
- dellemc.openmanage.dellemc_idrac_storage_volume:
+ dellemc.openmanage.idrac_storage_volume:
idrac_ip: "{{ idrac_ip }}"
idrac_user: "{{ idrac_user }}"
idrac_password: "{{ idrac_password }}"
@@ -90,7 +90,7 @@
- delete_multiple_volume
- name: View specific volume details.
- dellemc.openmanage.dellemc_idrac_storage_volume:
+ dellemc.openmanage.idrac_storage_volume:
idrac_ip: "{{ idrac_ip }}"
idrac_user: "{{ idrac_user }}"
idrac_password: "{{ idrac_password }}"
@@ -103,7 +103,7 @@
- view_specific_volume
- name: View all volume details.
- dellemc.openmanage.dellemc_idrac_storage_volume:
+ dellemc.openmanage.idrac_storage_volume:
idrac_ip: "{{ idrac_ip }}"
idrac_user: "{{ idrac_user }}"
idrac_password: "{{ idrac_password }}"
diff --git a/ansible_collections/dellemc/openmanage/playbooks/ome/compliance/ome_configuration_compliance_baseline_workflow.yml b/ansible_collections/dellemc/openmanage/playbooks/ome/compliance/ome_configuration_compliance_baseline_workflow.yml
index 3fd901e1c..1dbfd2141 100644
--- a/ansible_collections/dellemc/openmanage/playbooks/ome/compliance/ome_configuration_compliance_baseline_workflow.yml
+++ b/ansible_collections/dellemc/openmanage/playbooks/ome/compliance/ome_configuration_compliance_baseline_workflow.yml
@@ -35,9 +35,8 @@
# and next task device_ids attribute replaced with device_service_tag.
- name: Filter the non compliant device based on the retrieved compliance report.
ansible.builtin.set_fact:
- non_compliance_devices: "{{ compliance_report.compliance_info | json_query(jquery | default('')) | map(attribute='Id') | list }}"
- vars:
- jquery: 'value[?ComplianceStatus==''NONCOMPLIANT'']'
+ non_compliance_devices: "{{ compliance_report.compliance_info | selectattr('ComplianceStatus', 'equalto', 'NONCOMPLIANT') | map(attribute='Id')
+ | list }}"
- name: Remediate a specified non-complaint devices to a configuration compliance baseline using device IDs # noqa: args[module]
dellemc.openmanage.ome_configuration_compliance_baseline:
diff --git a/ansible_collections/dellemc/openmanage/playbooks/roles/idrac_user/idrac_user.yml b/ansible_collections/dellemc/openmanage/playbooks/roles/idrac_user/idrac_user.yml
new file mode 100644
index 000000000..7bc4a9dd2
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/playbooks/roles/idrac_user/idrac_user.yml
@@ -0,0 +1,9 @@
+---
+- name: Idrac user Configurations
+ hosts: idrac
+ gather_facts: false
+ vars_files:
+ - ../vars_files/credentials.yml
+ - ../vars_files/user.yml
+ roles:
+ - dellemc.openmanage.idrac_user
diff --git a/ansible_collections/dellemc/openmanage/playbooks/roles/vars_files/user.yml b/ansible_collections/dellemc/openmanage/playbooks/roles/vars_files/user.yml
new file mode 100644
index 000000000..3a8d49fa1
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/playbooks/roles/vars_files/user.yml
@@ -0,0 +1,15 @@
+---
+# Role idrac_user Vars
+user_name: test_user
+state: present
+new_user_name: test_user_updated
+user_password: password123
+privilege: Administrator
+ipmi_lan_privilege: No Access
+ipmi_serial_privilege: Administrator
+enable: true
+sol_enable: true
+protocol_enable: true
+authentication_protocol: SHA
+privacy_protocol: AES
+custom_privilege: 511
diff --git a/ansible_collections/dellemc/openmanage/plugins/README.md b/ansible_collections/dellemc/openmanage/plugins/README.md
index 7711a1d84..3864a2bb8 100644
--- a/ansible_collections/dellemc/openmanage/plugins/README.md
+++ b/ansible_collections/dellemc/openmanage/plugins/README.md
@@ -28,6 +28,7 @@ Here are the list of modules and module_utils supported by Dell.
├── idrac_bios.py
├── idrac_boot.py
├── idrac_certificates.py
+ ├── idrac_diagnostics.py
├── idrac_firmware.py
├── idrac_firmware_info.py
├── idrac_license.py
@@ -41,6 +42,8 @@ Here are the list of modules and module_utils supported by Dell.
├── idrac_redfish_storage_controller.py
├── idrac_reset.py
├── idrac_server_config_profile.py
+ ├── idrac_session.py
+ ├── idrac_storage_volume.py
├── idrac_syslog.py
├── idrac_system_info.py
├── idrac_timezone_ntp.py
diff --git a/ansible_collections/dellemc/openmanage/plugins/module_utils/dellemc_idrac.py b/ansible_collections/dellemc/openmanage/plugins/module_utils/dellemc_idrac.py
index b2b2240d0..cdd94c3cd 100644
--- a/ansible_collections/dellemc/openmanage/plugins/module_utils/dellemc_idrac.py
+++ b/ansible_collections/dellemc/openmanage/plugins/module_utils/dellemc_idrac.py
@@ -1,8 +1,8 @@
# -*- coding: utf-8 -*-
# Dell OpenManage Ansible Modules
-# Version 7.1.0
-# Copyright (C) 2019-2022 Dell Inc. or its subsidiaries. All Rights Reserved.
+# Version 9.1.0
+# Copyright (C) 2019-2024 Dell Inc. or its subsidiaries. All Rights Reserved.
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
@@ -30,6 +30,7 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import os
from ansible.module_utils.common.parameters import env_fallback
+from ansible_collections.dellemc.openmanage.plugins.module_utils.utils import compress_ipv6
try:
from omsdk.sdkinfra import sdkinfra
from omsdk.sdkcreds import UserCredentials
@@ -56,7 +57,7 @@ class iDRACConnection:
def __init__(self, module_params):
if not HAS_OMSDK:
raise ImportError("Dell OMSDK library is required for this module")
- self.idrac_ip = module_params['idrac_ip']
+ self.idrac_ip = compress_ipv6(module_params['idrac_ip'])
self.idrac_user = module_params['idrac_user']
self.idrac_pwd = module_params['idrac_password']
self.idrac_port = module_params['idrac_port']
diff --git a/ansible_collections/dellemc/openmanage/plugins/module_utils/session_utils.py b/ansible_collections/dellemc/openmanage/plugins/module_utils/session_utils.py
new file mode 100644
index 000000000..4bead057a
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/plugins/module_utils/session_utils.py
@@ -0,0 +1,322 @@
+# -*- coding: utf-8 -*-
+
+# Dell OpenManage Ansible Modules
+# Version 9.2.0
+# Copyright (C) 2024 Dell Inc. or its subsidiaries. All Rights Reserved.
+
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+
+# * Redistributions of source code must retain the above copyright notice,
+# this list of conditions and the following disclaimer.
+
+# * Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# 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.
+#
+
+
+from __future__ import (absolute_import, division, print_function)
+__metaclass__ = type
+
+import json
+import os
+from ansible.module_utils.urls import open_url
+from ansible.module_utils.six.moves.urllib.parse import urlencode
+from ansible_collections.dellemc.openmanage.plugins.module_utils.utils import config_ipv6
+
+HEADER_TYPE = "application/json"
+
+
+class OpenURLResponse():
+ """
+ HTTP response handler class.
+ """
+ def __init__(self, resp):
+ """
+ Initializes a new instance of the class.
+
+ Args:
+ resp (Response): The response object to read the body from.
+
+ Initializes the following instance variables:
+ - body (bytes): The body of the response, or None if the response is None.
+ - resp (Response): The response object.
+
+ If the response is not None, the body is set to the content of the response.
+ """
+ self.body = None
+ self.resp = resp
+ if self.resp:
+ self.body = self.resp.read()
+
+ @property
+ def json_data(self):
+ """
+ Returns the JSON data parsed from the `body` attribute of the object.
+
+ :return: The parsed JSON data.
+ :raises ValueError: If the `body` attribute cannot be parsed as JSON.
+ """
+ try:
+ return json.loads(self.body)
+ except ValueError as exc:
+ raise ValueError("Unable to parse json") from exc
+
+ @property
+ def status_code(self):
+ """
+ Get the status code of the response.
+
+ Returns:
+ int: The status code of the response.
+ """
+ return self.resp.getcode()
+
+ @property
+ def success(self):
+ """
+ Returns a boolean indicating whether the status code of the response is within the range
+ of 200-299.
+
+ :return: True if the status code is within the range of 200-299, False otherwise.
+ :rtype: bool
+ """
+ status = self.status_code
+ return status >= 200 & status <= 299
+
+ @property
+ def headers(self):
+ """
+ Returns the headers of the response object.
+
+ :return: A dictionary containing the headers of the response object.
+ :rtype: dict
+ """
+ return self.resp.headers
+
+ @property
+ def reason(self):
+ """
+ Get the reason for the response.
+
+ Returns:
+ str: The reason for the response.
+ """
+ return self.resp.reason
+
+
+class SessionAPI():
+ """
+ Main class for session operations.
+ """
+ def __init__(self, module_params):
+ """
+ Initializes the object with the given module parameters.
+
+ Args:
+ module_params (dict): A dictionary containing the module parameters.
+ - "hostname" (str): The IP address or hostname of the target system.
+ - "username" (str): The username for authentication.
+ - "password" (str): The password for authentication.
+ - "port" (int, optional): The port number. Defaults to None.
+ - "validate_certs" (bool, optional): Whether to validate SSL certificates. Defaults
+ to False.
+ - "ca_path" (str, optional): The path to the CA certificate file. Defaults to None.
+ - "timeout" (int, optional): The timeout value in seconds. Defaults to None.
+ - "use_proxy" (bool, optional): Whether to use a proxy. Defaults to True.
+
+ Returns:
+ None
+ """
+ self.ipaddress = module_params.get("hostname")
+ self.username = module_params.get("username")
+ self.password = module_params.get("password")
+ self.port = module_params.get("port")
+ self.validate_certs = module_params.get("validate_certs", False)
+ self.ca_path = module_params.get("ca_path")
+ self.timeout = module_params.get("timeout")
+ self.use_proxy = module_params.get("use_proxy", True)
+ self.protocol = 'https'
+ self.ipaddress = config_ipv6(self.ipaddress)
+ self.set_headers(module_params)
+
+ def set_headers(self, module_params):
+ """
+ Set the headers for the HTTP request based on the module parameters.
+
+ Parameters:
+ module_params (dict): The module parameters containing the state and auth_token.
+
+ Returns:
+ None
+
+ This function sets the headers for the HTTP request based on the state parameter in the
+ module_params.
+ If the state is "present", the headers will include 'Content-Type' and 'Accept' with values
+ 'application/json'.
+ If the state is not "present", the headers will include 'Content-Type', 'Accept', and
+ 'X-Auth-Token' with the value from the auth_token parameter in module_params.
+ """
+ if module_params.get("state") == "present":
+ self._headers = {
+ 'Content-Type': HEADER_TYPE,
+ 'Accept': HEADER_TYPE
+ }
+ else:
+ self._headers = {
+ 'Content-Type': HEADER_TYPE,
+ 'Accept': HEADER_TYPE,
+ 'X-Auth-Token': module_params.get("auth_token")
+ }
+
+ def _get_url(self, uri):
+ """
+ Generate the full URL by combining the protocol, IP address, port, and URI.
+
+ Parameters:
+ uri (str): The URI to be appended to the URL.
+
+ Returns:
+ str: The full URL generated by combining the protocol, IP address, port, and URI.
+ """
+ return f"{self.protocol}://{self.ipaddress}:{self.port}{uri}"
+
+ def _build_url(self, path, query_param=None):
+ """
+ Builds a URL by concatenating the base URI with the given path and query parameters.
+
+ Args:
+ path (str): The path component of the URL.
+ query_param (dict, optional): A dictionary of query parameters to be appended to the
+ URL. Defaults to None.
+
+ Returns:
+ str: The fully constructed URL.
+
+ Raises:
+ None
+
+ Examples:
+ >>> session = SessionUtils()
+ >>> session._build_url("/api/endpoint", {"param1": "value1", "param2": "value2"})
+ "/api/endpoint?param1=value1&param2=value2"
+ """
+ url = path
+ base_uri = self._get_url(url)
+ if path:
+ url = base_uri
+ if query_param:
+ url += f"?{urlencode(query_param)}"
+ return url
+
+ def _url_common_args_spec(self, method, api_timeout, headers=None):
+ """
+ Generates the common arguments for a URL request.
+
+ Args:
+ method (str): The HTTP method for the request.
+ api_timeout (int, optional): The timeout for the API request. If None, the default
+ timeout is used.
+ headers (dict, optional): Additional headers to include in the request.
+
+ Returns:
+ dict: A dictionary containing the common arguments for the URL request. The dictionary
+ has the following keys:
+ - method (str): The HTTP method for the request.
+ - validate_certs (bool): Whether to validate the SSL certificates.
+ - ca_path (str): The path to the CA certificate bundle.
+ - use_proxy (bool): Whether to use a proxy for the request.
+ - headers (dict): The headers to include in the request.
+ - timeout (int): The timeout for the request.
+ - follow_redirects (str): The policy for following redirects.
+
+ """
+ req_header = self._headers
+ if headers:
+ req_header.update(headers)
+ if api_timeout is None:
+ api_timeout = self.timeout
+ if self.ca_path is None:
+ self.ca_path = self._get_omam_ca_env()
+ url_kwargs = {
+ "method": method,
+ "validate_certs": self.validate_certs,
+ "ca_path": self.ca_path,
+ "use_proxy": self.use_proxy,
+ "headers": req_header,
+ "timeout": api_timeout,
+ "follow_redirects": 'all',
+ }
+ return url_kwargs
+
+ def _args_session(self, method, api_timeout, headers=None):
+ """
+ Returns a dictionary containing the arguments needed to establish a session.
+
+ :param path: A string representing the path of the API endpoint.
+ :param method: A string representing the HTTP method to be used.
+ :param api_timeout: An integer representing the timeout for the API request.
+ :param headers: An optional dictionary containing additional headers to be included in the
+ request.
+ :return: A dictionary containing the arguments needed to establish a session, including the
+ URL arguments, headers, and API timeout.
+ """
+ req_header = self._headers
+ if headers:
+ req_header.update(headers)
+ url_kwargs = self._url_common_args_spec(method, api_timeout, headers=headers)
+ return url_kwargs
+
+ def invoke_request(self, uri, method, data=None, query_param=None, headers=None,
+ api_timeout=None, dump=True):
+ """
+ Invokes a request to the specified URI using the given method and optional parameters.
+
+ :param uri: The URI to send the request to.
+ :type uri: str
+ :param method: The HTTP method to use for the request.
+ :type method: str
+ :param data: The data to send with the request (default: None).
+ :type data: dict or None
+ :param query_param: The query parameters to include in the request URL (default: None).
+ :type query_param: dict or None
+ :param headers: The headers to include in the request (default: None).
+ :type headers: dict or None
+ :param api_timeout: The timeout for the request in seconds (default: None).
+ :type api_timeout: int or None
+ :param dump: Whether to dump the data to JSON before sending the request (default: True).
+ :type dump: bool
+ :return: The response data from the request.
+ :rtype: OpenURLResponse
+ """
+ url_kwargs = self._args_session(method, api_timeout, headers=headers)
+ if data and dump:
+ data = json.dumps(data)
+ url = self._build_url(uri, query_param=query_param)
+ resp = open_url(url, data=data, **url_kwargs)
+ resp_data = OpenURLResponse(resp)
+ return resp_data
+
+ def _get_omam_ca_env(self):
+ """
+ Returns the value of the environment variable REQUESTS_CA_BUNDLE, or if it is not set,
+ the value of the environment variable CURL_CA_BUNDLE, or if that is not set,
+ the value of the environment variable OMAM_CA_BUNDLE.
+
+ :return: The value of the environment variable, or None if none of the variables are set.
+ :rtype: str or None
+ """
+ return (os.environ.get("REQUESTS_CA_BUNDLE") or
+ os.environ.get("CURL_CA_BUNDLE") or
+ os.environ.get("OMAM_CA_BUNDLE"))
diff --git a/ansible_collections/dellemc/openmanage/plugins/module_utils/utils.py b/ansible_collections/dellemc/openmanage/plugins/module_utils/utils.py
index 3d8abfbe5..b838197e0 100644
--- a/ansible_collections/dellemc/openmanage/plugins/module_utils/utils.py
+++ b/ansible_collections/dellemc/openmanage/plugins/module_utils/utils.py
@@ -1,8 +1,8 @@
# -*- coding: utf-8 -*-
# Dell OpenManage Ansible Modules
-# Version 8.2.0
-# Copyright (C) 2022-2023 Dell Inc. or its subsidiaries. All Rights Reserved.
+# Version 9.1.0
+# Copyright (C) 2022-2024 Dell Inc. or its subsidiaries. All Rights Reserved.
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
@@ -85,6 +85,7 @@ def config_ipv6(hostname):
if ']:' in ip_addr:
ip_addr, port = ip_addr.split(']:')
ip_addr = ip_addr.strip('[]')
+ ip_addr = compress_ipv6(ip_addr)
if port is None or port == "":
hostname = "[{0}]".format(ip_addr)
else:
@@ -92,6 +93,20 @@ def config_ipv6(hostname):
return hostname
+def compress_ipv6(ipv6_long):
+ groups = ipv6_long.split(':')
+ temp = []
+ for group in groups:
+ group = re.sub(r'^0+', '', group)
+ group = group.lower()
+ if 0 == len(group):
+ group = '0'
+ temp.append(group)
+ tempstr = ':'.join(temp)
+ ipv6_short = re.sub(r'(:0)+', ':', tempstr, 1)
+ return ipv6_short
+
+
def job_tracking(rest_obj, job_uri, max_job_wait_sec=600, job_state_var=('LastRunStatus', 'Id'),
job_complete_states=(2060, 2020, 2090), job_fail_states=(2070, 2101, 2102, 2103),
job_running_states=(2050, 2040, 2030, 2100),
@@ -493,12 +508,14 @@ def get_current_time(redfish_obj):
return curr_time, date_offset
-def xml_data_conversion(attr_dict, fqdd=None):
+def xml_data_conversion(attr_dict, fqdd=None, custom_payload_to_add=None):
component = """<Component FQDD="{0}">{1}</Component>"""
attr = ""
for k, v in attr_dict.items():
key = re.sub(r"\.(?!\d)", "#", k)
attr += '<Attribute Name="{0}">{1}</Attribute>'.format(key, v)
+ if custom_payload_to_add:
+ attr += custom_payload_to_add
root = component.format(fqdd, attr)
return root
diff --git a/ansible_collections/dellemc/openmanage/plugins/modules/dellemc_idrac_storage_volume.py b/ansible_collections/dellemc/openmanage/plugins/modules/dellemc_idrac_storage_volume.py
index e8021db18..050859c6d 100644
--- a/ansible_collections/dellemc/openmanage/plugins/modules/dellemc_idrac_storage_volume.py
+++ b/ansible_collections/dellemc/openmanage/plugins/modules/dellemc_idrac_storage_volume.py
@@ -18,6 +18,11 @@ DOCUMENTATION = r'''
module: dellemc_idrac_storage_volume
short_description: Configures the RAID configuration attributes
version_added: "2.0.0"
+deprecated:
+ removed_at_date: "2026-03-31"
+ why: Replaced with M(dellemc.openmanage.idrac_storage_volume).
+ alternative: Use M(dellemc.openmanage.idrac_storage_volume) instead.
+ removed_from_collection: dellemc.openmanage
description:
- This module is responsible for configuring the RAID attributes.
extends_documentation_fragment:
diff --git a/ansible_collections/dellemc/openmanage/plugins/modules/idrac_diagnostics.py b/ansible_collections/dellemc/openmanage/plugins/modules/idrac_diagnostics.py
new file mode 100644
index 000000000..3df5a68fd
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/plugins/modules/idrac_diagnostics.py
@@ -0,0 +1,874 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+#
+# Dell OpenManage Ansible Modules
+# Version 9.0.0
+# Copyright (C) 2024 Dell Inc. or its subsidiaries. All Rights Reserved.
+
+# 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 = r"""
+---
+module: idrac_diagnostics
+short_description: Run and Export iDRAC diagnostics
+version_added: "9.0.0"
+description:
+ - This module allows you to run and export diagnostics on iDRAC.
+extends_documentation_fragment:
+ - dellemc.openmanage.idrac_auth_options
+options:
+ run:
+ description:
+ - Run the diagnostics job on iDRAC.
+ - Run the diagnostics job based on the I(run_mode) and save the report in the internal storage. I(reboot_type) is applicable.
+ type: bool
+ export:
+ description:
+ - Exports the diagnostics information to the given share.
+ - This operation requires I(share_parameters).
+ - When I(run) is C(true) and I(job_wait) is C(false), only then the run diagnostics job is triggered. I(export) is ignored.
+ type: bool
+ run_mode:
+ description:
+ - This option provides the choices to run the diagnostics.
+ - C(express) The express diagnostics runs a test package for each server subsystem. However,
+ it does not run the complete set of tests available in the package for each subsystem.
+ - C(extended) The extended diagnostics run all available tests in each test package for all subsystems.
+ - C(long_run) The long-run diagnostics runs express and extended tests.
+ type: str
+ choices: [express, extended, long_run]
+ default: express
+ reboot_type:
+ description:
+ - This option provides the choice to reboot the host immediately to run the diagnostics.
+ - This is applicable when I(run) is C(true).
+ - C(force) Forced graceful shutdown signals the operating system to turn off and wait for ten minutes.
+ If the operating system does not turn off, the iDRAC power cycles the system.
+ - C(graceful) Graceful shutdown waits for the operating system to turn off and wait for the system to restart.
+ - C(power_cycle) performs a power cycle for a hard reset on the device.
+ type: str
+ choices: [force, graceful, power_cycle]
+ default: graceful
+ scheduled_start_time:
+ description:
+ - Schedules the job at the specified time.
+ - The accepted formats are yyyymmddhhmmss and YYYY-MM-DDThh:mm:ss+HH:MM.
+ - This is applicable when I(run) is C(true) and I(reboot_type) is power_cycle.
+ type: str
+ scheduled_end_time:
+ description:
+ - Run the diagnostic until the specified end date and end time after the I(scheduled_start_time).
+ - The accepted formats are yyyymmddhhmmss and YYYY-MM-DDThh:mm:ss+HH:MM.
+ - If the run operation does not complete before the specified end time, then the operation fails.
+ - This is applicable when I(run) is C(True) and I(reboot_type) is C(power_cycle).
+ type: str
+ job_wait:
+ description:
+ - Provides the option to wait for job completion.
+ - This is applicable when I(run) is C(true) and I(reboot_type) is C(power_cycle).
+ - This is applicable only to run the diagnostics job.
+ type: bool
+ default: true
+ job_wait_timeout:
+ description:
+ - Time in seconds to wait for job completion.
+ - This is applicable when I(job_wait) is C(true).
+ type: int
+ default: 1200
+ share_parameters:
+ description:
+ - Parameters that are required for the export operation of diagnostics.
+ - I(share_parameters) is required when I(export) is C(true).
+ type: dict
+ suboptions:
+ share_type:
+ description:
+ - Share type of the network share.
+ - C(local) uses local path for I(export) operation.
+ - C(nfs) uses NFS share for I(export) operation.
+ - C(cifs) uses CIFS share for I(export) operation.
+ - C(http) uses HTTP share for I(export) operation.
+ - C(https) uses HTTPS share for I(export) operation.
+ type: str
+ choices: [local, nfs, cifs, http, https]
+ default: local
+ file_name:
+ description:
+ - Diagnostics file name for I(export) operation.
+ type: str
+ ip_address:
+ description:
+ - IP address of the network share.
+ - I(ip_address) is required when I(share_type) is C(nfs), C(cifs), C(http) or C(https).
+ type: str
+ share_name:
+ description:
+ - Network share or local path of the diagnostics file.
+ type: str
+ workgroup:
+ description:
+ - Workgroup of the network share.
+ - I(workgroup) is applicable only when I(share_type) is C(cifs).
+ type: str
+ username:
+ description:
+ - Username of the network share.
+ - I(username) is required when I(share_type) is C(cifs).
+ type: str
+ password:
+ description:
+ - Password of the network share.
+ - I(password) is required when I(share_type) is C(cifs).
+ type: str
+ ignore_certificate_warning:
+ description:
+ - Ignores the certificate warning while connecting to Share and is only applicable when I(share_type) is C(https).
+ - C(off) ignores the certificate warning.
+ - C(on) does not ignore the certificate warning.
+ type: str
+ choices: ["off", "on"]
+ default: "off"
+ proxy_support:
+ description:
+ - Specifies if proxy support must be used or not.
+ - C(off) does not use proxy settings.
+ - C(default_proxy) uses the default proxy settings.
+ - C(parameters_proxy) uses the specified proxy settings. I(proxy_server) is required when I(proxy_support) is C(parameters_proxy).
+ - I(proxy_support) is only applicable when I(share_type) is C(http) or C(https).
+ type: str
+ choices: ["off", "default_proxy", "parameters_proxy"]
+ default: "off"
+ proxy_type:
+ description:
+ - The proxy type of the proxy server.
+ - C(http) to select HTTP proxy.
+ - C(socks) to select SOCKS proxy.
+ - I(proxy_type) is only applicable when I(share_type) is C(http) or C(https) and when I(proxy_support) is C(parameters_proxy).
+ type: str
+ choices: [http, socks]
+ default: http
+ proxy_server:
+ description:
+ - The IP address of the proxy server.
+ - I(proxy_server) is required when I(proxy_support) is C(parameters_proxy).
+ - I(proxy_server) is only applicable when I(share_type) is C(http) or C(https) and when I(proxy_support) is C(parameters_proxy).
+ type: str
+ proxy_port:
+ description:
+ - The port of the proxy server.
+ - I(proxy_port) is only applicable when I(share_type) is C(http) or C(https) and when I(proxy_support) is C(parameters_proxy).
+ type: int
+ default: 80
+ proxy_username:
+ description:
+ - The username of the proxy server.
+ - I(proxy_username) is only applicable when I(share_type) is C(http) or C(https) and when I(proxy_support) is C(parameters_proxy).
+ type: str
+ proxy_password:
+ description:
+ - The password of the proxy server.
+ - I(proxy_password) is only applicable when I(share_type) is C(http) or C(https) and when I(proxy_support) is C(parameters_proxy).
+ type: str
+ resource_id:
+ type: str
+ description:
+ - Id of the resource.
+ - If the value for resource ID is not provided, the module picks the first resource ID available from the list of system resources returned by the iDRAC.
+requirements:
+ - "python >= 3.9.6"
+author:
+ - "Shivam Sharma(@ShivamSh3)"
+notes:
+ - Run this module from a system that has direct access to Dell iDRAC.
+ - This module supports only iDRAC9 and above.
+ - This module supports IPv4 and IPv6 addresses.
+ - This module supports C(check_mode).
+ - This module requires 'Dell Diagnostics' firmware package to be present on the server.
+ - When I(share_type) is C(local) for I(export) operation, job_details are not displayed.
+"""
+
+EXAMPLES = r"""
+---
+- name: Run and export the diagnostics to local path
+ dellemc.openmanage.idrac_diagnostics:
+ hostname: "192.168.0.1"
+ username: "username"
+ password: "password"
+ ca_path: "path/to/ca_file"
+ run: true
+ export: true
+ share_parameters:
+ share_type: "local"
+ share_path: "/opt/local/diagnostics/"
+ file_name: "diagnostics.txt"
+
+- name: Run the diagnostics with power cycle reboot on schedule
+ dellemc.openmanage.idrac_diagnostics:
+ hostname: "192.168.0.1"
+ username: "username"
+ password: "password"
+ ca_path: "path/to/ca_file"
+ run: true
+ run_mode: "express"
+ reboot_type: "power_cycle"
+ scheduled_start_time: 20240101101015
+
+- name: Run and export the diagnostics to HTTPS share
+ dellemc.openmanage.idrac_diagnostics:
+ hostname: "192.168.0.1"
+ username: "username"
+ password: "password"
+ ca_path: "path/to/ca_file"
+ run: true
+ export: true
+ share_parameters:
+ share_type: "HTTPS"
+ ignore_certificate_warning: "on"
+ share_name: "/share_path/diagnostics_collection_path"
+ ip_address: "192.168.0.2"
+ file_name: "diagnostics.txt"
+
+- name: Run and export the diagnostics to NFS share
+ dellemc.openmanage.idrac_diagnostics:
+ hostname: "192.168.0.1"
+ username: "username"
+ password: "password"
+ ca_path: "path/to/ca_file"
+ run: true
+ export: true
+ share_parameters:
+ share_type: "NFS"
+ share_name: "nfsshare/diagnostics_collection_path/"
+ ip_address: "192.168.0.3"
+ file_name: "diagnostics.txt"
+
+- name: Export the diagnostics to CIFS share
+ dellemc.openmanage.idrac_diagnostics:
+ hostname: "192.168.0.1"
+ username: "username"
+ password: "password"
+ ca_path: "path/to/ca_file"
+ export: true
+ share_parameters:
+ share_type: "CIFS"
+ share_name: "/cifsshare/diagnostics_collection_path/"
+ ip_address: "192.168.0.4"
+ file_name: "diagnostics.txt"
+
+- name: Export the diagnostics to HTTPS share via proxy
+ dellemc.openmanage.idrac_diagnostics:
+ hostname: "192.168.0.1"
+ username: "username"
+ password: "password"
+ ca_path: "path/to/ca_file"
+ export: true
+ share_parameters:
+ share_type: "HTTPS"
+ share_name: "/share_path/diagnostics_collection_path"
+ ignore_certificate_warning: "on"
+ ip_address: "192.168.0.2"
+ file_name: "diagnostics.txt"
+ proxy_support: parameters_proxy
+ proxy_type: http
+ proxy_server: "192.168.0.5"
+ proxy_port: 1080
+ proxy_username: "proxy_user"
+ proxy_password: "proxy_password"
+"""
+
+RETURN = r'''
+---
+msg:
+ type: str
+ description: Status of the diagnostics operation.
+ returned: always
+ sample: "Successfully ran and exported the diagnostics."
+job_details:
+ description: Returns the output for status of the job.
+ returned: For run and export operations
+ type: dict
+ sample: {
+ "ActualRunningStartTime": "2024-01-10T10:14:31",
+ "ActualRunningStopTime": "2024-01-10T10:26:34",
+ "CompletionTime": "2024-01-10T10:26:34",
+ "Description": "Job Instance",
+ "EndTime": "2024-01-10T10:30:15",
+ "Id": "JID_XXXXXXXXXXXX",
+ "JobState": "Completed",
+ "JobType": "RemoteDiagnostics",
+ "Message": "Job completed successfully.",
+ "MessageArgs": [],
+ "MessageArgs@odata.count": 0,
+ "MessageId": "SYS018",
+ "Name": "Remote Diagnostics",
+ "PercentComplete": 100,
+ "StartTime": "2024-01-10T10:12:15",
+ "TargetSettingsURI": null
+ }
+diagnostics_file_path:
+ description: Returns the full path of the diagnostics file.
+ returned: For export operation
+ type: str
+ sample: "/share_path/diagnostics_collection_path/diagnostics.txt"
+error_info:
+ description: Details of the HTTP Error.
+ returned: on HTTP error
+ type: dict
+ sample: {
+ "error": {
+ "code": "Base.1.12.GeneralError",
+ "message": "A general error has occurred. See ExtendedInfo for more information.",
+ "@Message.ExtendedInfo": [
+ {
+ "Message": "A Remote Diagnostic (ePSA) job already exists.",
+ "MessageArgs": [],
+ "MessageArgs@odata.count": 0,
+ "MessageId": "IDRAC.2.9.SYS098",
+ "RelatedProperties": [],
+ "RelatedProperties@odata.count": 0,
+ "Resolution": "A response action is not required if the scheduled start time of the existing Remote Diagnostic (ePSA) job is ok.
+ Else, delete the existing Diagnostics (ePSA) job and recreate another with an appropriate start time.",
+ "Severity": "Informational"
+ }
+ ]
+ }
+ }
+'''
+
+import json
+import os
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.dellemc.openmanage.plugins.module_utils.idrac_redfish import iDRACRedfishAPI, idrac_auth_params
+from ansible.module_utils.six.moves.urllib.error import URLError, HTTPError
+from ansible.module_utils.urls import ConnectionError, SSLValidationError
+from ansible_collections.dellemc.openmanage.plugins.module_utils.utils import (
+ config_ipv6, get_current_time, get_dynamic_uri, validate_and_get_first_resource_id_uri, remove_key, idrac_redfish_job_tracking)
+from datetime import datetime
+
+MANAGERS_URI = "/redfish/v1/Managers"
+
+OEM = "Oem"
+MANUFACTURER = "Dell"
+JOBS = "Jobs"
+JOBS_EXPAND = "?$expand=*($levels=1)"
+LC_SERVICE = "DellLCService"
+ACTIONS = "Actions"
+EXPORT = "#DellLCService.ExportePSADiagnosticsResult"
+RUN = "#DellLCService.RunePSADiagnostics"
+TEST_SHARE = "#DellLCService.TestNetworkShare"
+ODATA_REGEX = "(.*?)@odata"
+ODATA = "@odata.id"
+MESSAGE_EXTENDED_INFO = "@Message.ExtendedInfo"
+TIME_FORMAT_FILE = "%Y%m%d_%H%M%S"
+TIME_FORMAT_WITHOUT_OFFSET = "%Y%m%d%H%M%S"
+TIME_FORMAT_WITH_OFFSET = "%Y-%m-%dT%H:%M:%S%z"
+SUCCESS_EXPORT_MSG = "Successfully exported the diagnostics."
+SUCCESS_RUN_MSG = "Successfully ran the diagnostics operation."
+SUCCESS_RUN_AND_EXPORT_MSG = "Successfully ran and exported the diagnostics."
+RUNNING_RUN_MSG = "Successfully triggered the job to run diagnostics."
+ALREADY_RUN_MSG = "The diagnostics job is already present."
+INVALID_DIRECTORY_MSG = "Provided directory path '{path}' is not valid."
+NO_OPERATION_SKIP_MSG = "The operation is skipped."
+INSUFFICIENT_DIRECTORY_PERMISSION_MSG = "Provided directory path '{path}' is not writable. " \
+ "Please check if the directory has appropriate permissions"
+UNSUPPORTED_FIRMWARE_MSG = "iDRAC firmware version is not supported."
+TIMEOUT_NEGATIVE_OR_ZERO_MSG = "The parameter `job_wait_timeout` value cannot be negative or zero."
+WAIT_TIMEOUT_MSG = "The job is not complete after {0} seconds."
+START_TIME = "The specified scheduled time occurs in the past, " \
+ "provide a future time to schedule the job."
+INVALID_TIME = "The specified date and time `{0}` to schedule the diagnostics is not valid. Enter a valid date and time."
+END_START_TIME = "The end time `{0}` to schedule the diagnostics must be greater than the start time `{1}`."
+CHANGES_FOUND_MSG = "Changes found to be applied."
+NO_FILE = "The diagnostics file does not exist."
+
+PROXY_SUPPORT = {"off": "Off", "default_proxy": "DefaultProxy", "parameters_proxy": "ParametersProxy"}
+STATUS_SUCCESS = [200, 202]
+
+
+class Diagnostics:
+
+ def __init__(self, idrac, module):
+ self.idrac = idrac
+ self.module = module
+ self.diagnostics_file_path = None
+ self.run_url = None
+ self.export_url = None
+ self.share_name = None
+ self.file_name = None
+
+ def execute(self):
+ # To be overridden by the subclasses
+ pass
+
+ def get_payload_details(self):
+ payload = {}
+ payload["ShareType"] = self.module.params.get('share_parameters').get('share_type').upper()
+ payload["IPAddress"] = self.module.params.get('share_parameters').get('ip_address')
+ payload["ShareName"] = self.module.params.get('share_parameters').get('share_name')
+ payload["UserName"] = self.module.params.get('share_parameters').get('username')
+ payload["Password"] = self.module.params.get('share_parameters').get('password')
+ payload["FileName"] = self.module.params.get('share_parameters').get('file_name')
+ payload["IgnoreCertWarning"] = self.module.params.get('share_parameters').get('ignore_certificate_warning').capitalize()
+ if self.module.params.get('share_parameters').get('proxy_support') == "parameters_proxy":
+ payload["ProxySupport"] = PROXY_SUPPORT[self.module.params.get('share_parameters').get('proxy_support')]
+ payload["ProxyType"] = self.module.params.get('share_parameters').get('proxy_type').upper()
+ payload["ProxyServer"] = self.module.params.get('share_parameters').get('proxy_server')
+ payload["ProxyPort"] = str(self.module.params.get('share_parameters').get('proxy_port'))
+ if self.module.params.get('share_parameters').get('proxy_username') and self.module.params.get('share_parameters').get('proxy_password'):
+ payload["ProxyUname"] = self.module.params.get('share_parameters').get('proxy_username')
+ payload["ProxyPasswd"] = self.module.params.get('share_parameters').get('proxy_password')
+ return payload
+
+ def test_network_share(self):
+ payload = self.get_payload_details()
+ del payload["FileName"]
+ payload = {key: value for key, value in payload.items() if value is not None}
+ if payload.get("ShareType") == "LOCAL":
+ path = payload.get("ShareName")
+ if not (os.path.exists(path)):
+ self.module.exit_json(msg=INVALID_DIRECTORY_MSG.format(path=path), failed=True)
+ if not os.access(path, os.W_OK):
+ self.module.exit_json(msg=INSUFFICIENT_DIRECTORY_PERMISSION_MSG.format(path=path), failed=True)
+ else:
+ try:
+ test_url = self.get_test_network_share_url()
+ self.idrac.invoke_request(test_url, "POST", data=payload)
+ except HTTPError as err:
+ filter_err = remove_key(json.load(err), regex_pattern=ODATA_REGEX)
+ message_details = filter_err.get('error').get(MESSAGE_EXTENDED_INFO)[0]
+ message = message_details.get('Message')
+ self.module.exit_json(msg=message, error_info=filter_err, failed=True)
+
+ def get_test_network_share_url(self):
+ uri, error_msg = validate_and_get_first_resource_id_uri(
+ self.module, self.idrac, MANAGERS_URI)
+ if error_msg:
+ self.module.exit_json(msg=error_msg, failed=True)
+ resp = get_dynamic_uri(self.idrac, uri)
+ url = resp.get('Links', {}).get(OEM, {}).get(MANUFACTURER, {}).get(LC_SERVICE, {}).get(ODATA, {})
+ action_resp = get_dynamic_uri(self.idrac, url)
+ url = action_resp.get(ACTIONS, {}).get(TEST_SHARE, {}).get('target', {})
+ return url
+
+
+class RunDiagnostics(Diagnostics):
+
+ def execute(self):
+ msg, job_details = None, None
+ if self.module.params.get('export'):
+ self.test_network_share()
+ self.__get_run_diagnostics_url()
+ self.check_diagnostics_jobs()
+ self.__validate_job_timeout()
+ run_diagnostics_status = self.__run_diagnostics()
+ job_status = self.__perform_job_wait(run_diagnostics_status)
+ status = run_diagnostics_status.status_code
+ if status in STATUS_SUCCESS and job_status.get('JobState') == "Completed":
+ msg = SUCCESS_RUN_MSG
+ job_details = job_status
+ if status in STATUS_SUCCESS and job_status.get('JobState') in ["Scheduled", "Scheduling", "Running", "New"]:
+ msg = RUNNING_RUN_MSG
+ job_details = job_status
+ return msg, job_details, None
+
+ def __run_diagnostics(self):
+ reboot_job_types = {
+ "graceful": "GracefulRebootWithoutForcedShutdown",
+ "force": "GracefulRebootWithForcedShutdown",
+ "power_cycle": "PowerCycle"
+ }
+ run_modes = {
+ "express": "Express",
+ "extended": "Extended",
+ "long_run": "ExpressAndExtended"
+ }
+ payload = {}
+ reboot_type = self.module.params.get('reboot_type')
+ run_mode = self.module.params.get('run_mode')
+ if reboot_type == "power_cycle":
+ if self.module.params.get('scheduled_start_time'):
+ start_time = self.__validate_time_format(self.module.params.get('scheduled_start_time'))
+ if self.__validate_time(start_time):
+ payload["ScheduledStartTime"] = start_time
+ if self.module.params.get('scheduled_end_time'):
+ end_time = self.__validate_time_format(self.module.params.get('scheduled_end_time'))
+ if self.__validate_time(end_time):
+ payload["UntilTime"] = end_time
+ if (self.module.params.get('scheduled_start_time') and self.module.params.get('scheduled_end_time')
+ and self.__validate_end_time(start_time, end_time)):
+ payload["UntilTime"] = end_time
+ payload["RebootJobType"] = reboot_job_types.get(reboot_type)
+ payload["RunMode"] = run_modes.get(run_mode)
+ run_diagnostics_status = self.idrac.invoke_request(self.run_url, "POST", data=payload)
+ return run_diagnostics_status
+
+ def __get_run_diagnostics_url(self):
+ uri, error_msg = validate_and_get_first_resource_id_uri(
+ self.module, self.idrac, MANAGERS_URI)
+ if error_msg:
+ self.module.exit_json(msg=error_msg, failed=True)
+ resp = get_dynamic_uri(self.idrac, uri)
+ url = resp.get('Links', {}).get(OEM, {}).get(MANUFACTURER, {}).get(LC_SERVICE, {}).get(ODATA, {})
+ if url:
+ action_resp = get_dynamic_uri(self.idrac, url)
+ run_url = action_resp.get(ACTIONS, {}).get(RUN, {}).get('target', {})
+ self.run_url = run_url
+ else:
+ self.module.exit_json(msg=UNSUPPORTED_FIRMWARE_MSG, failed=True)
+
+ def __validate_job_timeout(self):
+ if self.module.params.get("job_wait") and self.module.params.get("job_wait_timeout") <= 0:
+ self.module.exit_json(msg=TIMEOUT_NEGATIVE_OR_ZERO_MSG, failed=True)
+
+ def __perform_job_wait(self, run_diagnostics_status):
+ job_dict = {}
+ job_wait = self.module.params.get('job_wait')
+ job_wait_timeout = self.module.params.get('job_wait_timeout')
+ job_tracking_uri = run_diagnostics_status.headers.get("Location")
+ if job_tracking_uri:
+ job_id = job_tracking_uri.split("/")[-1]
+ res_uri = validate_and_get_first_resource_id_uri(self.module, self.idrac, MANAGERS_URI)
+ job_uri = f"{res_uri[0]}/{OEM}/{MANUFACTURER}/{JOBS}/{job_id}"
+ if job_wait:
+ job_failed, msg, job_dict, wait_time = idrac_redfish_job_tracking(self.idrac, job_uri,
+ max_job_wait_sec=job_wait_timeout,
+ sleep_interval_secs=1)
+ job_dict = remove_key(job_dict, regex_pattern=ODATA_REGEX)
+ if int(wait_time) >= int(job_wait_timeout):
+ self.module.exit_json(msg=WAIT_TIMEOUT_MSG.format(
+ job_wait_timeout), changed=True, job_status=job_dict)
+ if job_failed:
+ self.module.exit_json(
+ msg=job_dict.get("Message"), job_status=job_dict, failed=True)
+ else:
+ job_resp = self.idrac.invoke_request(job_uri, 'GET')
+ job_dict = job_resp.json_data
+ job_dict = remove_key(job_dict, regex_pattern=ODATA_REGEX)
+ return job_dict
+
+ def __validate_time_format(self, time):
+ try:
+ datetime_obj = datetime.strptime(time, TIME_FORMAT_WITH_OFFSET)
+ except ValueError:
+ try:
+ datetime_obj = datetime.strptime(time, TIME_FORMAT_WITHOUT_OFFSET)
+ except ValueError:
+ self.module.exit_json(failed=True, msg=INVALID_TIME.format(time))
+ formatted_time = datetime_obj.strftime(TIME_FORMAT_WITHOUT_OFFSET)
+ return formatted_time
+
+ def __validate_time(self, time):
+ curr_idrac_time, offset = get_current_time(self.idrac)
+ curr_idrac_time = datetime.strptime(curr_idrac_time, TIME_FORMAT_WITH_OFFSET)
+ curr_idrac_time = curr_idrac_time.strftime(TIME_FORMAT_WITHOUT_OFFSET)
+ currtime_obj = datetime.strptime(curr_idrac_time, TIME_FORMAT_WITHOUT_OFFSET)
+ starttime_obj = datetime.strptime(time, TIME_FORMAT_WITHOUT_OFFSET)
+ if starttime_obj < currtime_obj:
+ self.module.exit_json(failed=True, msg=START_TIME)
+ return True
+
+ def __validate_end_time(self, start_time, end_time):
+ starttime_obj = datetime.strptime(start_time, TIME_FORMAT_WITHOUT_OFFSET)
+ endtime_obj = datetime.strptime(end_time, TIME_FORMAT_WITHOUT_OFFSET)
+ if starttime_obj > endtime_obj:
+ self.module.exit_json(failed=True, msg=END_START_TIME.format(end_time, start_time))
+ return True
+
+ def check_diagnostics_jobs(self):
+ res_uri = validate_and_get_first_resource_id_uri(self.module, self.idrac, MANAGERS_URI)
+ job_uri = f"{res_uri[0]}/{OEM}/{MANUFACTURER}/{JOBS}{JOBS_EXPAND}"
+ job_resp = self.idrac.invoke_request(job_uri, "GET")
+ job_list = job_resp.json_data.get('Members', [])
+ job_id = ""
+ for jb in job_list:
+ if jb.get("JobType") == "RemoteDiagnostics" and jb.get("JobState") in ["Scheduled", "Running", "Starting", "New"]:
+ job_id = jb['Id']
+ job_dict = remove_key(jb, regex_pattern=ODATA_REGEX)
+ break
+ if self.module.check_mode and job_id:
+ self.module.exit_json(msg=ALREADY_RUN_MSG, job_details=job_dict, skipped=True)
+ if self.module.check_mode and not job_id:
+ self.module.exit_json(msg=CHANGES_FOUND_MSG, changed=True)
+ if job_id:
+ self.module.exit_json(msg=ALREADY_RUN_MSG, job_details=job_dict, skipped=True)
+
+
+class ExportDiagnostics(Diagnostics):
+
+ def execute(self):
+ self.test_network_share()
+ self.__get_export_diagnostics_url()
+ if self.module.check_mode:
+ self.perform_check_mode()
+ job_status = {}
+ share_type = self.module.params.get('share_parameters').get('share_type')
+ share_type_methods = {
+ "local": self.__export_diagnostics_local,
+ "http": self.__export_diagnostics_http,
+ "https": self.__export_diagnostics_http,
+ "cifs": self.__export_diagnostics_cifs,
+ "nfs": self.__export_diagnostics_nfs
+ }
+ export_diagnostics_status = share_type_methods[share_type]()
+ if share_type != "local":
+ job_status = self.get_job_status(export_diagnostics_status)
+ status = export_diagnostics_status.status_code
+ diagnostics_file_path = f"{self.share_name}/{self.file_name}"
+ if status in STATUS_SUCCESS:
+ msg = SUCCESS_EXPORT_MSG
+ job_details = job_status
+ return msg, job_details, diagnostics_file_path
+
+ def __export_diagnostics_local(self):
+ payload = {}
+ payload["ShareType"] = "Local"
+ file_path = self.module.params.get('share_parameters').get('share_name')
+ self.share_name = file_path.rstrip("/")
+ diagnostics_status = self.__export_diagnostics(payload)
+ diagnostics_file_name = payload.get("FileName")
+ diagnostics_data = self.idrac.invoke_request(diagnostics_status.headers.get("Location"), "GET")
+ file_name = os.path.join(file_path, diagnostics_file_name)
+ with open(file_name, "w") as fp:
+ fp.write(diagnostics_data.body.decode().replace("\r", ""))
+ return diagnostics_status
+
+ def __export_diagnostics_http(self):
+ payload = self.get_payload_details()
+ export_status = self.__export_diagnostics(payload)
+ share = self.module.params.get('share_parameters')
+ ip = config_ipv6(share.get('ip_address'))
+ self.share_name = f"{share.get('share_type')}://{ip}/{share.get('share_name').strip('/')}"
+ return export_status
+
+ def __export_diagnostics_cifs(self):
+ payload = self.get_payload_details()
+ if self.module.params.get('share_parameters').get('workgroup'):
+ payload["Workgroup"] = self.module.params.get('share_parameters').get('workgroup')
+ export_status = self.__export_diagnostics(payload)
+ share_name = self.module.params.get('share_parameters').get('share_name').replace("\\", "/")
+ self.share_name = f"//{self.module.params.get('share_parameters').get('ip_address')}/{share_name.strip('/')}"
+ return export_status
+
+ def __export_diagnostics_nfs(self):
+ payload = self.get_payload_details()
+ del payload["UserName"], payload["Password"]
+ export_status = self.__export_diagnostics(payload)
+ share = self.module.params.get('share_parameters')
+ self.share_name = f"{share.get('ip_address')}:/{share.get('share_name').strip('/')}"
+ return export_status
+
+ def __get_export_diagnostics_url(self):
+ uri, error_msg = validate_and_get_first_resource_id_uri(
+ self.module, self.idrac, MANAGERS_URI)
+ if error_msg:
+ self.module.exit_json(msg=error_msg, failed=True)
+ resp = get_dynamic_uri(self.idrac, uri)
+ url = resp.get('Links', {}).get(OEM, {}).get(MANUFACTURER, {}).get(LC_SERVICE, {}).get(ODATA, {})
+ if url:
+ action_resp = get_dynamic_uri(self.idrac, url)
+ export_url = action_resp.get(ACTIONS, {}).get(EXPORT, {}).get('target', {})
+ self.export_url = export_url
+ else:
+ self.module.exit_json(msg=UNSUPPORTED_FIRMWARE_MSG, failed=True)
+
+ def __export_diagnostics(self, payload):
+ diagnostics_file_name = self.module.params.get('share_parameters').get('file_name')
+ if not diagnostics_file_name:
+ now = datetime.now()
+ hostname = self.module.params.get('idrac_ip')
+ hostname = self.expand_ipv6(hostname)
+ hostname = hostname.replace(":", ".")
+ diagnostics_file_name = f"{hostname}_{now.strftime(TIME_FORMAT_FILE)}.txt"
+ payload["FileName"] = diagnostics_file_name
+ self.file_name = diagnostics_file_name
+ diagnostics_status = self.idrac.invoke_request(self.export_url, "POST", data=payload)
+ return diagnostics_status
+
+ def get_job_status(self, export_diagnostics_status):
+ res_uri = validate_and_get_first_resource_id_uri(self.module, self.idrac, MANAGERS_URI)
+ job_tracking_uri = export_diagnostics_status.headers.get("Location")
+ job_id = job_tracking_uri.split("/")[-1]
+ job_uri = f"{res_uri[0]}/{OEM}/{MANUFACTURER}/{JOBS}/{job_id}"
+ job_failed, msg, job_dict, wait_time = idrac_redfish_job_tracking(self.idrac, job_uri)
+ job_dict = remove_key(job_dict, regex_pattern=ODATA_REGEX)
+ if job_failed:
+ self.module.exit_json(msg=job_dict.get('Message'), failed=True, job_details=job_dict)
+ return job_dict
+
+ def perform_check_mode(self):
+ try:
+ payload = {}
+ payload['ShareType'] = 'Local'
+ export_status = self.idrac.invoke_request(self.export_url, "POST", data=payload)
+ if export_status.status_code in STATUS_SUCCESS:
+ self.module.exit_json(msg=CHANGES_FOUND_MSG, changed=True)
+ except HTTPError as err:
+ filter_err = remove_key(json.load(err), regex_pattern=ODATA_REGEX)
+ message_details = filter_err.get('error').get(MESSAGE_EXTENDED_INFO)[0]
+ message_id = message_details.get('MessageId')
+ if 'SYS099' in message_id:
+ self.module.exit_json(msg=NO_FILE, skipped=True)
+
+ def expand_ipv6(self, ip):
+ sections = ip.split(':')
+ num_sections = len(sections)
+ double_colon_index = sections.index('') if '' in sections else -1
+ if double_colon_index != -1:
+ missing_sections = 8 - num_sections + 1
+ sections[double_colon_index:double_colon_index + 1] = ['0000'] * missing_sections
+ sections = [section.zfill(4) for section in sections]
+ expanded_ip = ':'.join(sections)
+ return expanded_ip
+
+
+class RunAndExportDiagnostics:
+
+ def __init__(self, idrac, module):
+ self.run = RunDiagnostics(idrac, module)
+ self.export = ExportDiagnostics(idrac, module)
+ self.module = module
+
+ def execute(self):
+ msg, job_status, file_path = self.run.execute()
+ if self.module.params.get("job_wait"):
+ msg, job_status, file_path = self.export.execute()
+ msg = SUCCESS_RUN_AND_EXPORT_MSG
+ return msg, job_status, file_path
+
+
+class DiagnosticsType:
+ _diagnostics_classes = {
+ "run": RunDiagnostics,
+ "export": ExportDiagnostics,
+ "run_and_export": RunAndExportDiagnostics
+ }
+
+ @staticmethod
+ def diagnostics_operation(idrac, module):
+ class_type = None
+ if module.params.get("run") and module.params.get("export"):
+ class_type = "run_and_export"
+ elif module.params.get("run"):
+ class_type = "run"
+ elif module.params.get("export"):
+ class_type = "export"
+ if class_type:
+ diagnostics_class = DiagnosticsType._diagnostics_classes.get(class_type)
+ return diagnostics_class(idrac, module)
+ else:
+ module.exit_json(msg=NO_OPERATION_SKIP_MSG, skipped=True)
+
+
+def main():
+ specs = get_argument_spec()
+ specs.update(idrac_auth_params)
+ module = AnsibleModule(
+ argument_spec=specs,
+ required_one_of=[["run", "export"]],
+ required_if=[
+ ["run", True, ("reboot_type", "run_mode",)],
+ ["export", True, ("share_parameters",)]
+ ],
+ supports_check_mode=True
+ )
+
+ try:
+ with iDRACRedfishAPI(module.params) as idrac:
+ diagnostics_obj = DiagnosticsType.diagnostics_operation(idrac, module)
+ msg, job_status, file_path = diagnostics_obj.execute()
+ if file_path is None:
+ module.exit_json(msg=msg, changed=True, job_details=job_status)
+ module.exit_json(msg=msg, changed=True, job_details=job_status, diagnostics_file_path=file_path)
+ except HTTPError as err:
+ filter_err = remove_key(json.load(err), regex_pattern=ODATA_REGEX)
+ message_details = filter_err.get('error').get(MESSAGE_EXTENDED_INFO)[0]
+ message_id = message_details.get('MessageId')
+ if 'SYS099' in message_id:
+ module.exit_json(msg=NO_FILE, skipped=True)
+ if 'SYS098' in message_id:
+ module.exit_json(msg=message_details.get('Message'), skipped=True)
+ module.exit_json(msg=str(err), error_info=filter_err, failed=True)
+ except URLError as err:
+ module.exit_json(msg=str(err), unreachable=True)
+ except (OSError, ValueError, SSLValidationError, ConnectionError, TypeError) as e:
+ module.exit_json(msg=str(e), failed=True)
+
+
+def get_argument_spec():
+ return {
+ "run": {"type": 'bool'},
+ "export": {"type": 'bool'},
+ "run_mode": {
+ "type": 'str',
+ "default": 'express',
+ "choices": ['express', 'extended', 'long_run']
+ },
+ "reboot_type": {
+ "type": 'str',
+ "default": 'graceful',
+ "choices": ['force', 'graceful', 'power_cycle']
+ },
+ "scheduled_start_time": {"type": 'str'},
+ "scheduled_end_time": {"type": 'str'},
+ "job_wait": {"type": 'bool', "default": True},
+ "job_wait_timeout": {"type": 'int', "default": 1200},
+ "share_parameters": {
+ "type": 'dict',
+ "options": {
+ "share_type": {
+ "type": 'str',
+ "default": 'local',
+ "choices": ['local', 'nfs', 'cifs', 'http', 'https']
+ },
+ "proxy_type": {
+ "type": 'str',
+ "default": 'http',
+ "choices": ['http', 'socks']
+ },
+ "username": {"type": 'str'},
+ "password": {"type": 'str', "no_log": True},
+ "proxy_port": {"type": 'int', "default": 80},
+ "file_name": {"type": 'str'},
+ "ignore_certificate_warning": {
+ "type": 'str',
+ "default": "off",
+ "choices": ["off", "on"]
+ },
+ "ip_address": {"type": 'str'},
+ "proxy_server": {"type": 'str'},
+ "workgroup": {"type": 'str'},
+ "proxy_support": {
+ "type": 'str',
+ "default": "off",
+ "choices": ["off", "default_proxy", "parameters_proxy"]
+ },
+ "share_name": {"type": 'str'},
+ "proxy_username": {"type": 'str'},
+ "proxy_password": {"type": 'str', "no_log": True}
+ },
+ "required_together": [
+ ("username", "password"),
+ ("proxy_username", "proxy_password")
+ ],
+ "required_if": [
+ ["share_type", "local", ["share_name"]],
+ ["share_type", "nfs", ["ip_address", "share_name"]],
+ ["share_type", "cifs", ["ip_address", "share_name", "username", "password"]],
+ ["share_type", "http", ["ip_address", "share_name"]],
+ ["share_type", "https", ["ip_address", "share_name"]],
+ ["proxy_support", "parameters_proxy", ["proxy_server"]]
+ ],
+ },
+ "resource_id": {"type": 'str'}
+ }
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/dellemc/openmanage/plugins/modules/idrac_reset.py b/ansible_collections/dellemc/openmanage/plugins/modules/idrac_reset.py
index 2c28c9a5f..940f86dc2 100644
--- a/ansible_collections/dellemc/openmanage/plugins/modules/idrac_reset.py
+++ b/ansible_collections/dellemc/openmanage/plugins/modules/idrac_reset.py
@@ -3,64 +3,152 @@
#
# Dell OpenManage Ansible Modules
-# Version 7.1.0
-# Copyright (C) 2018-2022 Dell Inc. or its subsidiaries. All Rights Reserved.
+# Version 9.2.0
+# Copyright (C) 2018-2024 Dell Inc. or its subsidiaries. All Rights Reserved.
# 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 = """
+DOCUMENTATION = r'''
---
module: idrac_reset
-short_description: Reset iDRAC
+short_description: Factory reset the iDRACs
version_added: "2.1.0"
description:
- - This module resets iDRAC.
- - "iDRAC is not accessible for some time after running this module. It is recommended to wait for some time,
- before trying to connect to iDRAC."
+ - This module resets the iDRAC to factory default settings.
extends_documentation_fragment:
- dellemc.openmanage.idrac_auth_options
+options:
+ reset_to_default:
+ type: str
+ description:
+ - If this value is not set the default behaviour is to restart the iDRAC.
+ - C(All) Discards all settings and reset to default credentials.
+ - C(ResetAllWithRootDefaults) Discards all settings and reset the default username to root and password to the shipping value.
+ - C(Default) Discards all settings, but preserves user and network settings.
+ - C(CustomDefaults) All configuration is set to custom defaults.This option is supported on firmware version 7.00.00.00 and newer versions.
+ choices: ['Default', 'All', 'ResetAllWithRootDefaults', 'CustomDefaults']
+ version_added: 9.2.0
+ custom_defaults_file:
+ description:
+ - Name of the custom default configuration file in the XML format.
+ - This option is applicable when I(reset_to_default) is C(CustomDefaults).
+ - I(custom_defaults_file) is mutually exclusive with I(custom_defaults_buffer).
+ type: str
+ version_added: 9.2.0
+ custom_defaults_buffer:
+ description:
+ - This parameter provides the option to import the buffer input in XML format as a custom default configuration.
+ - This option is applicable when I(reset_to_default) is C(CustomDefaults).
+ - I(custom_defaults_buffer) is mutually exclusive with I(custom_defaults_file).
+ type: str
+ version_added: 9.2.0
+ wait_for_idrac:
+ description:
+ - This parameter provides the option to wait for the iDRAC to reset and lifecycle controller status to be ready.
+ type: bool
+ default: true
+ version_added: 9.2.0
+ job_wait_timeout:
+ description:
+ - Time in seconds to wait for job completion.
+ - This is applicable when I(job_wait) is C(true).
+ type: int
+ default: 600
+ version_added: 9.2.0
+ force_reset:
+ description:
+ - This parameter provides the option to force reset the iDRAC without checking the iDRAC lifecycle controller status.
+ - This option is applicable only for iDRAC9.
+ type: bool
+ default: false
+ version_added: 9.2.0
requirements:
- - "omsdk >= 1.2.488"
- "python >= 3.9.6"
author:
- "Felix Stephen (@felixs88)"
- "Anooja Vardhineni (@anooja-vardhineni)"
+ - "Lovepreet Singh (@singh-lovepreet1)"
notes:
- Run this module from a system that has direct access to Dell iDRAC.
- This module supports both IPv4 and IPv6 address for I(idrac_ip).
- This module supports C(check_mode).
-"""
+ - If reset_to_default option is not specified, then this module triggers a graceful restart.
+ - This module skips the execution if reset options are not supported by the iDRAC.
+'''
-EXAMPLES = """
+EXAMPLES = r'''
---
-- name: Reset iDRAC
+- name: Reset the iDRAC to all and wait till the iDRAC is accessible.
+ dellemc.openmanage.idrac_reset:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "user_name"
+ idrac_password: "user_password"
+ ca_path: "/path/to/ca_cert.pem"
+ reset_to_default: "All"
+
+- name: Reset the iDRAC to default and do not wait till the iDRAC is accessible.
+ dellemc.openmanage.idrac_reset:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "user_name"
+ idrac_password: "user_password"
+ ca_path: "/path/to/ca_cert.pem"
+ reset_to_default: "Default"
+ wait_for_idrac: false
+
+- name: Force reset the iDRAC to default.
+ dellemc.openmanage.idrac_reset:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "user_name"
+ idrac_password: "user_password"
+ ca_path: "/path/to/ca_cert.pem"
+ reset_to_default: "Default"
+ force_reset: true
+
+- name: Gracefully restart the iDRAC.
+ dellemc.openmanage.idrac_reset:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "user_name"
+ idrac_password: "user_password"
+ ca_path: "/path/to/ca_cert.pem"
+
+- name: Reset the iDRAC to custom defaults XML and do not wait till the iDRAC is accessible.
+ dellemc.openmanage.idrac_reset:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "user_name"
+ idrac_password: "user_password"
+ ca_path: "/path/to/ca_cert.pem"
+ reset_to_default: "CustomDefaults"
+ custom_defaults_file: "/path/to/custom_defaults.xml"
+
+- name: Reset the iDRAC to custom defaults buffer input and do not wait till the iDRAC is accessible.
dellemc.openmanage.idrac_reset:
- idrac_ip: "192.168.0.1"
- idrac_user: "user_name"
- idrac_password: "user_password"
- idrac_port: 443
- ca_path: "/path/to/ca_cert.pem"
-"""
+ idrac_ip: "192.168.0.1"
+ idrac_user: "user_name"
+ idrac_password: "user_password"
+ ca_path: "/path/to/ca_cert.pem"
+ reset_to_default: "CustomDefaults"
+ custom_defaults_buffer: "<SystemConfiguration Model=\"PowerEdge R7525\" ServiceTag=\"ABCD123\">\n<Component FQDD=\"iDRAC.Embedded.1\">\n
+ <Attribute Name=\"IPMILan.1#Enable\">Disabled</Attribute>\n </Component>\n\n</SystemConfiguration>"
+'''
RETURN = r'''
---
msg:
+ type: str
description: Status of the iDRAC reset operation.
returned: always
- type: str
sample: "Successfully performed iDRAC reset."
reset_status:
- description: Details of iDRAC reset operation.
- returned: always
- type: dict
- sample: {
- "idracreset": {
+ type: dict
+ description: Details of iDRAC reset operation.
+ returned: reset operation is triggered.
+ sample: {
+ "idracreset": {
"Data": {
"StatusCode": 204
},
@@ -92,41 +180,382 @@ error_info:
}
'''
-
+import os
import json
-from ansible_collections.dellemc.openmanage.plugins.module_utils.dellemc_idrac import iDRACConnection, idrac_auth_params
+import time
+from urllib.error import HTTPError, URLError
+from ansible_collections.dellemc.openmanage.plugins.module_utils.idrac_redfish import iDRACRedfishAPI, idrac_auth_params
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.six.moves.urllib.error import URLError, HTTPError
+from ansible.module_utils.compat.version import LooseVersion
from ansible.module_utils.urls import ConnectionError, SSLValidationError
+from ansible_collections.dellemc.openmanage.plugins.module_utils.utils import (
+ get_idrac_firmware_version, remove_key, get_dynamic_uri, validate_and_get_first_resource_id_uri, idrac_redfish_job_tracking)
+
+
+MANAGERS_URI = "/redfish/v1/Managers"
+OEM = "Oem"
+MANUFACTURER = "Dell"
+ACTIONS = "Actions"
+IDRAC_RESET_RETRIES = 50
+LC_STATUS_CHECK_SLEEP = 30
+IDRAC_JOB_URI = "/redfish/v1/Managers/iDRAC.Embedded.1/Jobs/{job_id}"
+RESET_TO_DEFAULT_ERROR = "{reset_to_default} is not supported. The supported values are {supported_values}. Enter the valid values and retry the operation."
+RESET_TO_DEFAULT_ERROR_MSG = "{reset_to_default} is not supported."
+CUSTOM_ERROR = "{reset_to_default} is not supported on this firmware version of iDRAC. The supported values are {supported_values}. \
+Enter the valid values and retry the operation."
+IDRAC_RESET_RESTART_SUCCESS_MSG = "iDRAC restart operation completed successfully."
+IDRAC_RESET_SUCCESS_MSG = "Successfully performed iDRAC reset."
+IDRAC_RESET_RESET_TRIGGER_MSG = "iDRAC reset operation triggered successfully."
+IDRAC_RESET_RESTART_TRIGGER_MSG = "iDRAC restart operation triggered successfully."
+INVALID_DIRECTORY_MSG = "Provided directory path '{path}' is invalid."
+FAILED_RESET_MSG = "Failed to perform the reset operation."
+RESET_UNTRACK = "iDRAC reset is in progress. Changes will apply once the iDRAC reset operation is successfully completed."
+TIMEOUT_NEGATIVE_OR_ZERO_MSG = "The value of `job_wait_timeout` parameter cannot be negative or zero. Enter the valid value and retry the operation."
+INVALID_FILE_MSG = "File extension is invalid. Supported extension for 'custom_default_file' is: .xml."
+LC_STATUS_MSG = "Lifecycle controller status check is {lc_status} after {retries} number of retries, Exiting.."
+INSUFFICIENT_DIRECTORY_PERMISSION_MSG = "Provided directory path '{path}' is not writable. Please check if the directory has appropriate permissions."
+UNSUPPORTED_LC_STATUS_MSG = "Lifecycle controller status check is not supported."
+MINIMUM_SUPPORTED_FIRMWARE_VERSION = "7.00.00"
+CHANGES_NOT_FOUND = "No changes found to commit!"
+CHANGES_FOUND = "Changes found to commit!"
+ODATA_ID = "@odata.id"
+ODATA_REGEX = "(.*?)@odata"
+ATTRIBUTE = "</Attribute>"
+SUCCESS_STATUS = "Success"
+FAILED_STATUS = "Failed"
+STATUS_SUCCESS = [200, 202, 204]
+ERR_STATUS_CODE = [400, 404]
+PASSWORD_CHANGE_OPTIONS = ['All', 'ResetAllWithRootDefaults']
+RESET_KEY = "Oem.#DellManager.ResetToDefaults"
+GRACEFUL_RESTART_KEY = "#Manager.Reset"
+
+
+class Validation():
+ def __init__(self, idrac, module):
+ self.idrac = idrac
+ self.module = module
+ self.base_uri = self.get_base_uri()
+ def get_base_uri(self):
+ uri, error_msg = validate_and_get_first_resource_id_uri(
+ self.module, self.idrac, MANAGERS_URI)
+ if error_msg:
+ self.module.exit_json(msg=error_msg, failed=True)
+ return uri
-def run_idrac_reset(idrac, module):
- if module.check_mode:
- msg = {'Status': 'Success', 'Message': 'Changes found to commit!', 'changes_applicable': True}
- else:
- idrac.use_redfish = True
- msg = idrac.config_mgr.reset_idrac()
- return msg
+ def validate_reset_options(self, api_key):
+ res = self.idrac.invoke_request(self.base_uri, "GET")
+ reset_to_default = self.module.params.get('reset_to_default')
+ key_list = api_key.split(".", 1)
+ is_valid = True
+ allowed_values = None
+ if key_list[0] in res.json_data["Actions"] and key_list[1] in res.json_data["Actions"][key_list[0]]:
+ reset_to_defaults_val = res.json_data["Actions"][key_list[0]][key_list[1]]
+ reset_type_values = reset_to_defaults_val["ResetType@Redfish.AllowableValues"]
+ allowed_values = reset_type_values
+ if reset_to_default not in reset_type_values:
+ is_valid = False
+ else:
+ is_valid = False
+ return allowed_values, is_valid
+
+ def validate_graceful_restart_option(self, api_key):
+ res = self.idrac.invoke_request(self.base_uri, "GET")
+ is_valid = True
+ if api_key in res.json_data["Actions"]:
+ reset_to_defaults_val = res.json_data["Actions"][api_key]
+ reset_type_values = reset_to_defaults_val["ResetType@Redfish.AllowableValues"]
+ if "GracefulRestart" not in reset_type_values:
+ is_valid = False
+ else:
+ is_valid = False
+ return is_valid
+
+ def validate_job_timeout(self):
+ if self.module.params.get("wait_for_idrac") and self.module.params.get("job_wait_timeout") <= 0:
+ self.module.exit_json(msg=TIMEOUT_NEGATIVE_OR_ZERO_MSG, failed=True)
+
+ def validate_path(self, file_path):
+ if not (os.path.exists(file_path)):
+ self.module.exit_json(msg=INVALID_DIRECTORY_MSG.format(path=file_path), failed=True)
+ if not os.access(file_path, os.W_OK):
+ self.module.exit_json(msg=INSUFFICIENT_DIRECTORY_PERMISSION_MSG.format(path=file_path), failed=True)
+
+ def validate_file_format(self, file_name):
+ if not (file_name.endswith(".xml")):
+ self.module.exit_json(msg=INVALID_FILE_MSG, failed=True)
+
+ def validate_custom_option(self, reset_to_default=None, allowed_choices=None):
+ url = None
+ resp = get_dynamic_uri(self.idrac, self.base_uri, OEM)
+ if resp:
+ url = resp.get(MANUFACTURER, {}).get('CustomDefaultsDownloadURI', {})
+ try:
+ if url:
+ self.idrac.invoke_request(url, "GET")
+ return True
+ return False
+ except HTTPError as err:
+ if err.code in ERR_STATUS_CODE:
+ self.module.exit_json(msg=RESET_TO_DEFAULT_ERROR.format(reset_to_default=reset_to_default, supported_values=allowed_choices), skipped=True)
+
+
+class FactoryReset():
+ def __init__(self, idrac, module, allowed_choices):
+ self.idrac = idrac
+ self.module = module
+ self.allowed_choices = allowed_choices
+ self.reset_to_default = self.module.params.get('reset_to_default')
+ self.force_reset = self.module.params.get('force_reset')
+ self.wait_for_idrac = self.module.params.get('wait_for_idrac')
+ self.validate_obj = Validation(self.idrac, self.module)
+ self.uri = self.validate_obj.base_uri
+ self.idrac_firmware_version = get_idrac_firmware_version(self.idrac)
+
+ def execute(self):
+ msg_res, job_res = None, None
+ self.validate_obj.validate_job_timeout()
+ is_idrac9 = self.is_check_idrac_latest()
+ if not is_idrac9 and self.reset_to_default:
+ allowed_values, is_valid_option = self.validate_obj.validate_reset_options(RESET_KEY)
+ if self.module.check_mode and not is_valid_option:
+ self.module.exit_json(msg=CHANGES_NOT_FOUND)
+ if not is_valid_option:
+ self.module.exit_json(msg=RESET_TO_DEFAULT_ERROR_MSG.format(reset_to_default=self.reset_to_default),
+ skipped=True)
+ if self.module.check_mode:
+ self.check_mode_output(is_idrac9)
+ if is_idrac9 and not self.force_reset:
+ self.check_lcstatus(post_op=False)
+ reset_status_mapping = {key: self.reset_to_default_mapped for key in ['Default', 'All', 'ResetAllWithRootDefaults']}
+ reset_status_mapping.update({
+ 'CustomDefaults': self.reset_custom_defaults,
+ 'None': self.graceful_restart
+ })
+ msg_res, job_res = reset_status_mapping[str(self.reset_to_default)]()
+ if is_idrac9 and self.wait_for_idrac:
+ self.check_lcstatus()
+ return msg_res, job_res
+
+ def check_mode_output(self, is_idrac9):
+ if is_idrac9 and self.reset_to_default == 'CustomDefaults' and LooseVersion(self.idrac_firmware_version) < MINIMUM_SUPPORTED_FIRMWARE_VERSION:
+ self.module.exit_json(msg=CHANGES_NOT_FOUND)
+ if self.reset_to_default:
+ allowed_values, is_valid_option = self.validate_obj.validate_reset_options(RESET_KEY)
+ else:
+ is_valid_option = self.validate_obj.validate_graceful_restart_option(GRACEFUL_RESTART_KEY)
+ custom_default_file = self.module.params.get('custom_defaults_file')
+ custom_default_buffer = self.module.params.get('custom_defaults_buffer')
+ if is_valid_option:
+ self.module.exit_json(msg=CHANGES_FOUND, changed=True)
+ elif self.reset_to_default and self.reset_to_default == 'CustomDefaults' and (custom_default_file or custom_default_buffer):
+ self.module.exit_json(msg=CHANGES_FOUND, changed=True)
+ else:
+ self.module.exit_json(msg=CHANGES_NOT_FOUND)
+
+ def is_check_idrac_latest(self):
+ if LooseVersion(self.idrac_firmware_version) >= '3.0':
+ return True
+
+ def check_lcstatus(self, post_op=True):
+ if self.reset_to_default in PASSWORD_CHANGE_OPTIONS and post_op and self.staus_code_after_wait == 401:
+ return
+ lc_status_dict = {}
+ lc_status_dict['LCStatus'] = ""
+ retry_count = 1
+ resp = get_dynamic_uri(self.idrac, self.uri, "Links")
+ url = resp.get(OEM, {}).get(MANUFACTURER, {}).get('DellLCService', {}).get(ODATA_ID, {})
+ if url:
+ action_resp = get_dynamic_uri(self.idrac, url)
+ lc_url = action_resp.get(ACTIONS, {}).get('#DellLCService.GetRemoteServicesAPIStatus', {}).get('target', {})
+ else:
+ self.module.exit_json(msg=UNSUPPORTED_LC_STATUS_MSG, failed=True)
+ while retry_count < IDRAC_RESET_RETRIES:
+ try:
+ lcstatus = self.idrac.invoke_request(lc_url, "POST", data="{}", dump=False)
+ lcstatus_data = lcstatus.json_data.get('LCStatus')
+ lc_status_dict['LCStatus'] = lcstatus_data
+ if lc_status_dict.get('LCStatus') == 'Ready':
+ break
+ time.sleep(10)
+ retry_count = retry_count + 1
+ except URLError:
+ time.sleep(10)
+ retry_count = retry_count + 1
+ if retry_count == IDRAC_RESET_RETRIES:
+ self.module.exit_json(msg=LC_STATUS_MSG.format(lc_status='unreachable', retries=IDRAC_RESET_RETRIES), unreachable=True)
+
+ if retry_count == IDRAC_RESET_RETRIES and lc_status_dict.get('LCStatus') != "Ready":
+ self.module.exit_json(msg=LC_STATUS_MSG.format(lc_status=lc_status_dict.get('LCStatus'), retries=retry_count), failed=True)
+
+ def create_output(self, status):
+ result = {}
+ tmp_res = {}
+ result['idracreset'] = {}
+ result['idracreset']['Data'] = {'StatusCode': status}
+ result['idracreset']['StatusCode'] = status
+ track_failed, wait_msg = None, None
+ self.staus_code_after_wait = 202
+ if status in STATUS_SUCCESS:
+ if self.wait_for_idrac:
+ track_failed, status_code, wait_msg = self.wait_for_port_open()
+ self.staus_code_after_wait = status_code
+ if track_failed:
+ self.module.exit_json(msg=wait_msg, changed=True)
+ tmp_res['msg'] = IDRAC_RESET_SUCCESS_MSG if self.wait_for_idrac else IDRAC_RESET_RESET_TRIGGER_MSG
+ tmp_res['changed'] = True
+ result['idracreset']['Message'] = IDRAC_RESET_SUCCESS_MSG if self.wait_for_idrac else IDRAC_RESET_RESET_TRIGGER_MSG
+ result['idracreset']['Status'] = 'Success'
+ result['idracreset']['retVal'] = True
+ else:
+ tmp_res['msg'] = FAILED_RESET_MSG
+ tmp_res['changed'] = False
+ result['idracreset']['Message'] = FAILED_RESET_MSG
+ result['idracreset']['Status'] = 'FAILED'
+ result['idracreset']['retVal'] = False
+ if self.reset_to_default:
+ result = None
+ return tmp_res, result
+
+ def perform_operation(self, payload):
+ tmp_res, res = None, None
+ url = None
+ resp = get_dynamic_uri(self.idrac, self.uri, ACTIONS)
+ if resp:
+ url = resp.get(OEM, {}).get('#DellManager.ResetToDefaults', {}).get('target', {})
+ run_reset_status = self.idrac.invoke_request(url, "POST", data=payload)
+ status = run_reset_status.status_code
+ tmp_res, res = self.create_output(status)
+ return tmp_res, res
+
+ def upload_cd_content(self, data):
+ payload = {"CustomDefaults": data}
+ job_wait_timeout = self.module.params.get('job_wait_timeout')
+ url = None
+ resp = get_dynamic_uri(self.idrac, self.uri, ACTIONS)
+ if resp:
+ url = resp.get(OEM, {}).get('#DellManager.SetCustomDefaults', {}).get('target', {})
+ job_resp = self.idrac.invoke_request(url, "POST", data=payload)
+ if (job_tracking_uri := job_resp.headers.get("Location")):
+ job_id = job_tracking_uri.split("/")[-1]
+ job_uri = IDRAC_JOB_URI.format(job_id=job_id)
+ job_failed, msg, job_dict, wait_time = idrac_redfish_job_tracking(self.idrac, job_uri,
+ max_job_wait_sec=job_wait_timeout,
+ sleep_interval_secs=1)
+ job_dict = remove_key(job_dict, regex_pattern='(.*?)@odata')
+ if job_failed:
+ self.module.exit_json(msg=job_dict.get("Message"), job_status=job_dict, failed=True)
+
+ def wait_for_port_open(self, interval=45):
+ timeout_wait = self.module.params.get('job_wait_timeout')
+ time.sleep(interval)
+ msg = RESET_UNTRACK
+ wait = timeout_wait
+ track_failed = True
+ status_code = 503
+ while int(wait) > 0:
+ try:
+ self.idrac.invoke_request(MANAGERS_URI, 'GET')
+ time.sleep(interval)
+ msg = IDRAC_RESET_SUCCESS_MSG
+ track_failed = False
+ status_code = 200
+ break
+ except HTTPError as err:
+ status_code = err.code
+ if status_code == 401:
+ time.sleep(interval // 2)
+ msg = IDRAC_RESET_SUCCESS_MSG
+ track_failed = False
+ break
+ except Exception:
+ time.sleep(interval)
+ wait = wait - interval
+ return track_failed, status_code, msg
+
+ def reset_to_default_mapped(self):
+ payload = {"ResetType": self.reset_to_default}
+ self.allowed_choices, is_valid_option = self.validate_obj.validate_reset_options(RESET_KEY)
+ if not is_valid_option:
+ self.module.exit_json(msg=RESET_TO_DEFAULT_ERROR.format(reset_to_default=self.reset_to_default, supported_values=self.allowed_choices),
+ skipped=True)
+ return self.perform_operation(payload)
+
+ def get_xml_content(self, file_path):
+ with open(file_path, 'r') as file:
+ xml_content = file.read()
+ return xml_content
+
+ def reset_custom_defaults(self):
+ self.allowed_choices, is_valid_option = self.validate_obj.validate_reset_options(RESET_KEY)
+ if LooseVersion(self.idrac_firmware_version) < MINIMUM_SUPPORTED_FIRMWARE_VERSION:
+ self.module.exit_json(msg=CUSTOM_ERROR.format(reset_to_default=self.reset_to_default,
+ supported_values=self.allowed_choices), skipped=True)
+ custom_default_file = self.module.params.get('custom_defaults_file')
+ custom_default_buffer = self.module.params.get('custom_defaults_buffer')
+ upload_perfom = False
+ default_data = None
+ if custom_default_file:
+ self.validate_obj.validate_path(custom_default_file)
+ self.validate_obj.validate_file_format(custom_default_file)
+ upload_perfom = True
+ default_data = self.get_xml_content(custom_default_file)
+ elif custom_default_buffer:
+ upload_perfom = True
+ default_data = custom_default_buffer
+ if upload_perfom:
+ self.upload_cd_content(default_data)
+ self.validate_obj.validate_custom_option(self.reset_to_default, self.allowed_choices)
+ return self.reset_to_default_mapped()
+
+ def graceful_restart(self):
+ url = None
+ resp = get_dynamic_uri(self.idrac, self.uri, ACTIONS)
+ if resp:
+ url = resp.get('#Manager.Reset', {}).get('target', {})
+ payload = {"ResetType": "GracefulRestart"}
+ run_reset_status = self.idrac.invoke_request(url, "POST", data=payload)
+ status = run_reset_status.status_code
+ tmp_res, resp = self.create_output(status)
+ if status in STATUS_SUCCESS:
+ tmp_res['msg'] = IDRAC_RESET_SUCCESS_MSG
+ resp['idracreset']['Message'] = IDRAC_RESET_RESTART_SUCCESS_MSG if self.wait_for_idrac else IDRAC_RESET_RESTART_TRIGGER_MSG
+ return tmp_res, resp
def main():
- specs = {}
+ specs = {
+ "reset_to_default": {"choices": ['All', 'ResetAllWithRootDefaults', 'Default', 'CustomDefaults']},
+ "custom_defaults_file": {"type": "str"},
+ "custom_defaults_buffer": {"type": "str"},
+ "wait_for_idrac": {"type": "bool", "default": True},
+ "job_wait_timeout": {"type": 'int', "default": 600},
+ "force_reset": {"type": "bool", "default": False}
+ }
specs.update(idrac_auth_params)
module = AnsibleModule(
argument_spec=specs,
+ mutually_exclusive=[("custom_defaults_file", "custom_defaults_buffer")],
supports_check_mode=True)
-
try:
- with iDRACConnection(module.params) as idrac:
- msg = run_idrac_reset(idrac, module)
+ with iDRACRedfishAPI(module.params) as idrac:
+ allowed_choices = specs['reset_to_default']['choices']
+ reset_obj = FactoryReset(idrac, module, allowed_choices)
+ message_resp, output = reset_obj.execute()
+ if output:
+ if not message_resp.get('changed'):
+ module.exit_json(msg=message_resp.get('msg'), reset_status=output, failed=True)
+ module.exit_json(msg=message_resp.get('msg'), reset_status=output, changed=True)
+ else:
+ if not message_resp.get('changed'):
+ module.exit_json(msg=message_resp.get('msg'), failed=True)
+ module.exit_json(msg=message_resp.get('msg'), changed=True)
except HTTPError as err:
- module.fail_json(msg=str(err), error_info=json.load(err))
+ module.exit_json(msg=str(err), error_info=json.load(err), failed=True)
except URLError as err:
module.exit_json(msg=str(err), unreachable=True)
- except (RuntimeError, SSLValidationError, ConnectionError, KeyError,
- ImportError, ValueError, TypeError) as e:
- module.fail_json(msg=str(e))
- module.exit_json(msg="Successfully performed iDRAC reset.", reset_status=msg)
+ except (RuntimeError, SSLValidationError, ConnectionError, TypeError, KeyError, ValueError, OSError) as err:
+ module.exit_json(msg=str(err), failed=True)
if __name__ == '__main__':
diff --git a/ansible_collections/dellemc/openmanage/plugins/modules/idrac_server_config_profile.py b/ansible_collections/dellemc/openmanage/plugins/modules/idrac_server_config_profile.py
index bd7fe2c67..f89272ca3 100644
--- a/ansible_collections/dellemc/openmanage/plugins/modules/idrac_server_config_profile.py
+++ b/ansible_collections/dellemc/openmanage/plugins/modules/idrac_server_config_profile.py
@@ -723,20 +723,15 @@ def export_scp_redfish(module, idrac):
share, scp_file_name_format = get_scp_share_details(module)
scp_components = ",".join(module.params["scp_components"])
include_in_export = IN_EXPORTS[module.params["include_in_export"]]
+ scp_response = idrac.export_scp(export_format=module.params["export_format"],
+ export_use=module.params["export_use"],
+ target=scp_components, include_in_export=include_in_export,
+ job_wait=False, share=share, ) # Assigning it as false because job tracking is done in idrac_redfish.py as well.
if share["share_type"] == "LOCAL":
- scp_response = idrac.export_scp(export_format=module.params["export_format"],
- export_use=module.params["export_use"],
- target=scp_components, include_in_export=include_in_export,
- job_wait=False, share=share, )
scp_response = wait_for_response(scp_response, module, share, idrac)
- else:
- scp_response = idrac.export_scp(export_format=module.params["export_format"],
- export_use=module.params["export_use"],
- target=scp_components, include_in_export=include_in_export,
- job_wait=False, share=share, ) # Assigning it as false because job tracking is done in idrac_redfish.py as well.
- scp_response = wait_for_job_tracking_redfish(
- module, idrac, scp_response
- )
+ scp_response = wait_for_job_tracking_redfish(
+ module, idrac, scp_response
+ )
scp_response = response_format_change(scp_response, module.params, scp_file_name_format)
exit_on_failure(module, scp_response, command)
return scp_response
@@ -753,8 +748,6 @@ def wait_for_response(scp_resp, module, share, idrac):
else:
wait_resp_value = wait_resp.decode("utf-8")
file_obj.write(wait_resp_value)
- if module.params["job_wait"]:
- scp_resp = idrac.invoke_request(job_uri, "GET")
return scp_resp
diff --git a/ansible_collections/dellemc/openmanage/plugins/modules/idrac_session.py b/ansible_collections/dellemc/openmanage/plugins/modules/idrac_session.py
new file mode 100644
index 000000000..3303b4ade
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/plugins/modules/idrac_session.py
@@ -0,0 +1,425 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+#
+# Dell OpenManage Ansible Modules
+# Version 9.2.0
+# Copyright (C) 2024 Dell Inc. or its subsidiaries. All Rights Reserved.
+
+# 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 = r"""
+---
+module: idrac_session
+short_description: Manage iDRAC sessions
+version_added: "9.2.0"
+description:
+ - This module allows the creation and deletion of sessions on iDRAC.
+options:
+ hostname:
+ description:
+ - IP address or hostname of the iDRAC.
+ type: str
+ username:
+ description:
+ - Username of the iDRAC.
+ - I(username) is required when I(state) is C(present).
+ type: str
+ password:
+ description:
+ - Password of the iDRAC.
+ - I(password) is required when I(state) is C(present).
+ type: str
+ port:
+ description:
+ - Port of the iDRAC.
+ type: int
+ default: 443
+ validate_certs:
+ description:
+ - If C(false), the SSL certificates will not be validated.
+ - Configure C(false) only on personally controlled sites where self-signed certificates are used.
+ type: bool
+ default: true
+ ca_path:
+ description:
+ - The Privacy Enhanced Mail (PEM) file that contains a CA certificate to be used for the validation.
+ type: path
+ timeout:
+ description:
+ - The https socket level timeout in seconds.
+ type: int
+ default: 30
+ state:
+ description:
+ - The state of the session in an iDRAC.
+ - C(present) creates a session.
+ - C(absent) deletes a session.
+ - Module will always report changes found to be applied when I(state) is C(present).
+ choices: [present, absent]
+ type: str
+ default: present
+ auth_token:
+ description:
+ - Authentication token.
+ - I(auth_token) is required when I(state) is C(absent).
+ type: str
+ session_id:
+ description:
+ - Session ID of the iDRAC.
+ - I(session_id) is required when I(state) is C(absent).
+ type: int
+requirements:
+ - "python >= 3.9.6"
+author:
+ - "Rajshekar P(@rajshekarp87)"
+notes:
+ - Run this module from a system that has direct access to Dell iDRAC.
+ - This module supports IPv4 and IPv6 addresses.
+ - This module supports C(check_mode).
+ - This module will always report changes found to be applied when I(state) is C(present).
+"""
+
+EXAMPLES = r"""
+---
+- name: Create a session
+ dellemc.openmanage.idrac_session:
+ hostname: 198.162.0.1
+ username: username
+ password: password
+ state: present
+
+- name: Delete a session
+ dellemc.openmanage.idrac_session:
+ hostname: 198.162.0.1
+ state: absent
+ auth_token: aed4aa802b748d2f3b31deec00a6b28a
+ session_is: 2
+"""
+
+RETURN = r'''
+---
+msg:
+ description: Status of the session operation.
+ returned: always
+ type: str
+ sample: "The session has been created successfully."
+session_data:
+ description: The session details.
+ returned: For session creation operation
+ type: dict
+ sample: {
+ "@Message.ExtendedInfo": [
+ {
+ "Message": "The resource has been created successfully.",
+ "MessageArgs": [],
+ "MessageId": "Base.1.12.Created",
+ "RelatedProperties": [],
+ "Resolution": "None.",
+ "Severity": "OK"
+ },
+ {
+ "Message": "A new resource is successfully created.",
+ "MessageArgs": [],
+ "MessageId": "IDRAC.2.9.SYS414",
+ "RelatedProperties": [],
+ "Resolution": "No response action is required.",
+ "Severity": "Informational"
+ }
+ ],
+ "ClientOriginIPAddress": "100.96.37.58",
+ "CreatedTime": "2024-04-05T01:14:01-05:00",
+ "Description": "User Session",
+ "Id": "74",
+ "Name": "User Session",
+ "Password": null,
+ "SessionType": "Redfish",
+ "UserName": "root"
+ }
+x_auth_token:
+ description: Authentication token.
+ returned: For session creation operation
+ type: str
+ sample: "d15f17f01cd627c30173b1582642497d"
+error_info:
+ description: Details of the HTTP Error.
+ returned: On HTTP error
+ type: dict
+ sample: {
+ "error": {
+ "@Message.ExtendedInfo": [
+ {
+ "Message": "Unable to complete the operation because an invalid username
+ and/or password is entered, and therefore authentication failed.",
+ "MessageArgs": [],
+ "MessageId": "IDRAC.2.9.SYS415",
+ "RelatedProperties": [],
+ "Resolution": "Enter valid user name and password and retry the operation.",
+ "Severity": "Warning"
+ }
+ ],
+ "code": "Base.1.12.GeneralError",
+ "message": "A general error has occurred. See ExtendedInfo for more information"
+ }
+ }
+'''
+
+
+import json
+from urllib.error import HTTPError, URLError
+from ansible_collections.dellemc.openmanage.plugins.module_utils.session_utils import SessionAPI
+from ansible.module_utils.basic import AnsibleModule
+from ansible.module_utils.urls import ConnectionError, SSLValidationError
+from ansible.module_utils.common.parameters import env_fallback
+from ansible_collections.dellemc.openmanage.plugins.module_utils.utils import (
+ get_dynamic_uri, remove_key)
+
+REDFISH = "/redfish/v1"
+SESSIONS = "Sessions"
+ODATA = "@odata.id"
+ODATA_REGEX = "(.*?)@odata"
+
+CREATE_SUCCESS_MSG = "The session has been created successfully."
+DELETE_SUCCESS_MSG = "The session has been deleted successfully."
+FAILURE_MSG = "Unable to '{operation}' a session."
+CHANGES_FOUND_MSG = "Changes found to be applied."
+NO_CHANGES_FOUND_MSG = "No changes found to be applied."
+
+
+class Session():
+ """
+ Parent class for all session operations.
+ """
+ def __init__(self, idrac, module):
+ """
+ Initializes the object with the given idrac and module parameters.
+
+ Args:
+ idrac (object): The idrac object.
+ module (object): The module object.
+
+ Returns:
+ None
+ """
+ self.idrac = idrac
+ self.module = module
+
+ def get_session_url(self):
+ """
+ Retrieves the URL for the sessions endpoint from the Redfish API.
+
+ Returns:
+ str: The URL for the sessions endpoint, or None if not found.
+ """
+ v1_resp = get_dynamic_uri(self.idrac, REDFISH)
+ sessions_url = v1_resp.get('Links', {}).get(SESSIONS, {}).get(ODATA, {})
+ return sessions_url
+
+
+class CreateSession(Session):
+ """
+ Creates a session.
+ """
+ def execute(self):
+ """
+ Executes the session creation process.
+
+ This function creates a session by sending a POST request to the session URL with the
+ provided username and password.
+ If the request is successful (status code 201), it retrieves the session details, removes
+ any OData keys from the response,
+ and extracts the X-Auth-Token from the response headers. It then exits the module with a
+ success message, indicating that
+ the session was created successfully, and provides the session data and X-Auth-Token as
+ output variables.
+
+ If the request fails (status code other than 201), it exits the module with a failure
+ message, indicating that the session creation failed.
+
+ Parameters:
+ None
+
+ Returns:
+ None
+ """
+ payload = {"UserName": self.module.params.get("username"),
+ "Password": self.module.params.get("password")}
+ session_url = self.get_session_url()
+ if self.module.check_mode:
+ self.module.exit_json(msg=CHANGES_FOUND_MSG, changed=True)
+ session_response = self.idrac.invoke_request(session_url, "POST", data=payload)
+ status = session_response.status_code
+ if status == 201:
+ session_details = session_response.json_data
+ session_data = remove_key(session_details, regex_pattern=ODATA_REGEX)
+ x_auth_token = session_response.headers.get('X-Auth-Token')
+ self.module.exit_json(msg=CREATE_SUCCESS_MSG,
+ changed=True,
+ session_data=session_data,
+ x_auth_token=x_auth_token)
+ else:
+ self.module.exit_json(msg=FAILURE_MSG.format(operation="create"), failed=True)
+
+
+class DeleteSession(Session):
+ """
+ Deletes a session.
+ """
+ def execute(self):
+ """
+ Executes the deletion of a session.
+
+ This function retrieves the session ID from the module parameters and constructs the
+ session URL using the `get_session_url` method. It then invokes a DELETE request to the
+ session URL with the session ID appended. The response from the request is stored in the
+ `session_response` variable.
+
+ If the response status code is 200, indicating a successful deletion, the function exits
+ the module with a success message and sets the `changed` parameter to True. Otherwise, it
+ exits the module with a failure message and sets the `failed` parameter to True.
+
+ Parameters:
+ None
+
+ Returns:
+ None
+ """
+ session_id = self.module.params.get("session_id")
+ session_url = self.get_session_url()
+ session_status = self.get_session_status(session_url, session_id)
+ if self.module.check_mode:
+ if session_status == 200:
+ self.module.exit_json(msg=CHANGES_FOUND_MSG, changed=True)
+ else:
+ self.module.exit_json(msg=NO_CHANGES_FOUND_MSG)
+ else:
+ if session_status == 200:
+ try:
+ session_response = self.idrac.invoke_request(session_url + f"/{session_id}",
+ "DELETE")
+ status = session_response.status_code
+ if status == 200:
+ self.module.exit_json(msg=DELETE_SUCCESS_MSG, changed=True)
+ except HTTPError as err:
+ filter_err = remove_key(json.load(err), regex_pattern=ODATA_REGEX)
+ self.module.exit_json(msg=FAILURE_MSG.format(operation="delete"),
+ error_info=filter_err,
+ failed=True)
+ else:
+ self.module.exit_json(msg=NO_CHANGES_FOUND_MSG)
+
+ def get_session_status(self, session_url, session_id):
+ """
+ Retrieves the status of a session given its URL and ID.
+
+ Args:
+ session_url (str): The URL of the session.
+ session_id (str): The ID of the session.
+
+
+ Returns:
+ int: The status code of the session status response. If an HTTPError occurs, the status
+ code of the error is returned.
+ """
+ try:
+ session_status_response = self.idrac.invoke_request(session_url + f"/{session_id}",
+ "GET")
+ session_status = session_status_response.status_code
+ except HTTPError as err:
+ session_status = err.status
+ return session_status
+
+
+def main():
+ """
+ Main function that initializes the Ansible module with the argument specs and required if
+ conditions.
+ It then creates a SessionAPI object with the module parameters and performs a session operation
+ based on the state parameter.
+ If the state is "present", it creates a CreateSession object and executes it. If the state is
+ "absent", it creates a DeleteSession object and executes it.
+ The session status is returned.
+
+ Raises:
+ HTTPError: If an HTTP error occurs, the error message and filtered error information are
+ returned in the module's exit_json.
+ URLError: If a URL error occurs, the error message is returned in the module's exit_json.
+ SSLValidationError, ConnectionError, TypeError, ValueError, OSError: If any other error
+ occurs, the error message is returned in the module's exit_json.
+
+ Returns:
+ None
+ """
+ specs = get_argument_spec()
+ module = AnsibleModule(
+ argument_spec=specs,
+ required_if=[
+ ["state", "present", ("username", "password",)],
+ ["state", "absent", ("auth_token", "session_id",)]
+ ],
+ supports_check_mode=True
+ )
+
+ try:
+ idrac = SessionAPI(module.params)
+ session_operation = module.params.get("state")
+ if session_operation == "present":
+ session_operation_obj = CreateSession(idrac, module)
+ else:
+ session_operation_obj = DeleteSession(idrac, module)
+ session_operation_obj.execute()
+ except HTTPError as err:
+ filter_err = remove_key(json.load(err), regex_pattern=ODATA_REGEX)
+ module.exit_json(msg=str(err), error_info=filter_err, failed=True)
+ except URLError as err:
+ module.exit_json(msg=str(err), unreachable=True)
+ except (SSLValidationError, ConnectionError, TypeError, ValueError, OSError) as err:
+ module.exit_json(msg=str(err), failed=True)
+
+
+def get_argument_spec():
+ """
+ Returns a dictionary representing the argument specification for a module.
+
+ The dictionary contains the following keys and their corresponding values:
+ - "hostname": A string representing the hostname.
+ - "username": A string representing the username. It has a fallback option to retrieve the
+ value from the environment variable 'IDRAC_USERNAME'.
+ - "password": A string representing the password. It is marked as not to be logged and has a
+ fallback option to retrieve the value from the environment variable 'IDRAC_PASSWORD'.
+ - "port": An integer representing the port number. The default value is 443.
+ - "validate_certs": A boolean representing whether to validate certificates. The default value
+ is True.
+ - "ca_path": A path representing the certificate authority path. The default value is None.
+ - "timeout": An integer representing the timeout value. The default value is 30.
+ - "state": A string representing the state. The default value is "present". The choices are
+ ["present", "absent"].
+ - "auth_token": A string representing the authentication token. It is marked as not to be
+ logged.
+ - "session_id": An integer representing the session ID.
+
+ Returns:
+ A dictionary representing the argument specification.
+ """
+ return {
+ "hostname": {"type": "str"},
+ "username": {"type": "str", "fallback": (env_fallback, ['IDRAC_USERNAME'])},
+ "password": {"type": "str", "no_log": True, "fallback": (env_fallback, ['IDRAC_PASSWORD'])},
+ "port": {"type": "int", "default": 443},
+ "validate_certs": {"type": "bool", "default": True},
+ "ca_path": {"type": "path", "default": None},
+ "timeout": {"type": "int", "default": 30},
+ "state": {"type": 'str', "default": "present", "choices": ["present", "absent"]},
+ "auth_token": {"type": "str", "no_log": True},
+ "session_id": {"type": "int"}
+ }
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/dellemc/openmanage/plugins/modules/idrac_storage_volume.py b/ansible_collections/dellemc/openmanage/plugins/modules/idrac_storage_volume.py
new file mode 100644
index 000000000..13c1ec065
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/plugins/modules/idrac_storage_volume.py
@@ -0,0 +1,924 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+#
+# Dell OpenManage Ansible Modules
+# Version 9.1.0
+# Copyright (C) 2024 Dell Inc. or its subsidiaries. All Rights Reserved.
+
+# 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 = r'''
+---
+module: idrac_storage_volume
+short_description: Configures the RAID configuration attributes
+version_added: "9.1.0"
+description:
+ - This module is responsible for configuring the RAID attributes.
+extends_documentation_fragment:
+ - dellemc.openmanage.idrac_auth_options
+options:
+ state:
+ type: str
+ description:
+ - C(create), performs create volume operation.
+ - C(delete), performs remove volume operation.
+ - C(view), returns storage view.
+ choices: ['create', 'delete', 'view']
+ default: 'view'
+ span_depth:
+ type: int
+ description:
+ - Number of spans in the RAID configuration.
+ - I(span_depth) is required for C(create) and its value depends on I(volume_type).
+ default: 1
+ span_length:
+ type: int
+ description:
+ - Number of disks in a span.
+ - I(span_length) is required for C(create) and its value depends on I(volume_type).
+ default: 1
+ number_dedicated_hot_spare:
+ type: int
+ description: Number of Dedicated Hot Spare.
+ default: 0
+ volume_type:
+ type: str
+ description: Provide the the required RAID level.
+ choices: ['RAID 0', 'RAID 1', 'RAID 5', 'RAID 6', 'RAID 10', 'RAID 50', 'RAID 60']
+ default: 'RAID 0'
+ disk_cache_policy:
+ type: str
+ description: Disk Cache Policy.
+ choices: ["Default", "Enabled", "Disabled"]
+ default: "Default"
+ write_cache_policy:
+ type: str
+ description: Write cache policy.
+ choices: ["WriteThrough", "WriteBack", "WriteBackForce"]
+ default: "WriteThrough"
+ read_cache_policy:
+ type: str
+ description: Read cache policy.
+ choices: ["NoReadAhead", "ReadAhead", "AdaptiveReadAhead"]
+ default: "NoReadAhead"
+ stripe_size:
+ type: int
+ description: Stripe size value to be provided in multiples of 64 * 1024.
+ default: 65536
+ controller_id:
+ type: str
+ description:
+ - Fully Qualified Device Descriptor (FQDD) of the storage controller, for example 'RAID.Integrated.1-1'.
+ Controller FQDD is required for C(create) RAID configuration.
+ media_type:
+ type: str
+ description: Media type.
+ choices: ['HDD', 'SSD']
+ protocol:
+ type: str
+ description: Bus protocol.
+ choices: ['SAS', 'SATA', 'PCIE']
+ volume_id:
+ type: str
+ description:
+ - Fully Qualified Device Descriptor (FQDD) of the virtual disk, for example 'Disk.virtual.0:RAID.Slot.1-1'.
+ This option is used to get the virtual disk information.
+ volumes:
+ type: list
+ elements: dict
+ description:
+ - A list of virtual disk specific iDRAC attributes. This is applicable for C(create) and C(delete) operations.
+ - For C(create) operation, name and drives are applicable options, other volume options can also be specified.
+ - The drives is a required option for C(create) operation and accepts either location (list of drive slot)
+ or id (list of drive fqdd).
+ - In iDRAC8, there is no pre-validation for the state of drives. The disk ID or slot number of the drive
+ provided may or may not be in Ready state. Enter the disk ID or slot number of the drive that is already
+ in Ready state.
+ - For C(delete) operation, only name option is applicable.
+ - See the examples for more details.
+ capacity:
+ type: float
+ description: Virtual disk size in GB.
+ raid_reset_config:
+ type: str
+ description:
+ - This option represents whether a reset config operation needs to be performed on the RAID controller.
+ Reset Config operation deletes all the virtual disks present on the RAID controller.
+ choices: ['true', 'false']
+ default: 'false'
+ raid_init_operation:
+ type: str
+ description: This option represents initialization configuration operation to be performed on the virtual disk.
+ choices: [None, Fast]
+ job_wait:
+ description:
+ - This parameter provides the option to wait for the job completion.
+ - This is applicable when I(state) is C(create) or C(delete).
+ type: bool
+ default: true
+ job_wait_timeout:
+ description:
+ - This parameter is the maximum wait time of I(job_wait) in seconds.
+ - This option is applicable when I(job_wait) is C(true).
+ type: int
+ default: 900
+
+requirements:
+ - "python >= 3.9.6"
+author:
+ - "Felix Stephen (@felixs88)"
+ - "Kritika Bhateja (@Kritika-Bhateja-03)"
+ - "Abhishek Sinha(@ABHISHEK-SINHA10)"
+notes:
+ - Run this module from a system that has direct access to Integrated Dell Remote Access Controller.
+ - This module supports both IPv4 and IPv6 address for I(idrac_ip).
+ - This module supports C(check_mode).
+ - This module does not display the controller battery details for the C(view) operation of the storage in iDRAC8.
+'''
+
+EXAMPLES = r'''
+---
+- name: Create single volume
+ dellemc.openmanage.idrac_storage_volume:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "username"
+ idrac_password: "password"
+ ca_path: "/path/to/ca_cert.pem"
+ state: "create"
+ controller_id: "RAID.Slot.1-1"
+ volumes:
+ - drives:
+ location: [5]
+
+- name: Create multiple volume
+ dellemc.openmanage.idrac_storage_volume:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "username"
+ idrac_password: "password"
+ ca_path: "/path/to/ca_cert.pem"
+ raid_reset_config: "True"
+ state: "create"
+ controller_id: "RAID.Slot.1-1"
+ volume_type: "RAID 1"
+ span_depth: 1
+ span_length: 2
+ number_dedicated_hot_spare: 1
+ disk_cache_policy: "Enabled"
+ write_cache_policy: "WriteBackForce"
+ read_cache_policy: "ReadAhead"
+ stripe_size: 65536
+ capacity: 100
+ raid_init_operation: "Fast"
+ volumes:
+ - name: "volume_1"
+ drives:
+ id: ["Disk.Bay.1:Enclosure.Internal.0-1:RAID.Slot.1-1", "Disk.Bay.2:Enclosure.Internal.0-1:RAID.Slot.1-1"]
+ - name: "volume_2"
+ volume_type: "RAID 5"
+ span_length: 3
+ span_depth: 1
+ drives:
+ location: [7, 3, 5]
+ disk_cache_policy: "Disabled"
+ write_cache_policy: "WriteBack"
+ read_cache_policy: "NoReadAhead"
+ stripe_size: 131072
+ capacity: "200"
+ raid_init_operation: "None"
+
+- name: View all volume details
+ dellemc.openmanage.idrac_storage_volume:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "username"
+ idrac_password: "password"
+ ca_path: "/path/to/ca_cert.pem"
+ state: "view"
+
+- name: View specific volume details
+ dellemc.openmanage.idrac_storage_volume:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "username"
+ idrac_password: "password"
+ ca_path: "/path/to/ca_cert.pem"
+ state: "view"
+ controller_id: "RAID.Slot.1-1"
+ volume_id: "Disk.Virtual.0:RAID.Slot.1-1"
+
+- name: Delete single volume
+ dellemc.openmanage.idrac_storage_volume:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "username"
+ idrac_password: "password"
+ ca_path: "/path/to/ca_cert.pem"
+ state: "delete"
+ volumes:
+ - name: "volume_1"
+
+- name: Delete multiple volume
+ dellemc.openmanage.idrac_storage_volume:
+ idrac_ip: "192.168.0.1"
+ idrac_user: "username"
+ idrac_password: "password"
+ ca_path: "/path/to/ca_cert.pem"
+ state: "delete"
+ volumes:
+ - name: "volume_1"
+ - name: "volume_2"
+'''
+
+RETURN = r'''
+---
+msg:
+ type: str
+ description: Overall status of the storage configuration operation.
+ returned: always
+ sample: "Successfully completed the view storage volume operation"
+storage_status:
+ type: dict
+ description: Storage configuration job and progress details from the iDRAC.
+ returned: success
+ sample:
+ {
+ "Id": "JID_XXXXXXXXX",
+ "JobState": "Completed",
+ "JobType": "ImportConfiguration",
+ "Message": "Successfully imported and applied Server Configuration Profile.",
+ "MessageId": "XXX123",
+ "Name": "Import Configuration",
+ "PercentComplete": 100,
+ "StartTime": "TIME_NOW",
+ "TargetSettingsURI": null,
+ }
+error_info:
+ description: Details of the HTTP Error.
+ returned: on HTTP error
+ type: dict
+ sample: {
+ "error": {
+ "code": "Base.1.0.GeneralError",
+ "message": "A general error has occurred. See ExtendedInfo for more information.",
+ "@Message.ExtendedInfo": [
+ {
+ "MessageId": "GEN1234",
+ "RelatedProperties": [],
+ "Message": "Unable to process the request because an error occurred.",
+ "MessageArgs": [],
+ "Severity": "Critical",
+ "Resolution": "Retry the operation. If the issue persists, contact your system administrator."
+ }
+ ]
+ }
+ }
+'''
+
+import re
+import operator
+from urllib.error import HTTPError, URLError
+from copy import deepcopy
+from ansible_collections.dellemc.openmanage.plugins.module_utils.idrac_redfish import iDRACRedfishAPI, idrac_auth_params
+from ansible.module_utils.basic import AnsibleModule
+from ansible.module_utils.urls import ConnectionError, SSLValidationError
+from ansible_collections.dellemc.openmanage.plugins.module_utils.utils import (
+ get_dynamic_uri, validate_and_get_first_resource_id_uri, xml_data_conversion, idrac_redfish_job_tracking, remove_key, get_idrac_firmware_version)
+
+
+SYSTEMS_URI = "/redfish/v1/Systems"
+iDRAC_JOB_URI = "/redfish/v1/Managers/iDRAC.Embedded.1/Jobs/{job_id}"
+CONTROLLER_NOT_EXIST_ERROR = "Specified Controller {controller_id} does not exist in the System."
+CONTROLLER_NOT_DEFINED = "Controller ID is required."
+SUCCESSFUL_OPERATION_MSG = "Successfully completed the {operation} storage volume operation."
+DRIVES_NOT_EXIST_ERROR = "No Drive(s) are attached to the specified Controller Id: {controller_id}."
+DRIVES_NOT_MATCHED = "Following Drive(s) {specified_drives} are not attached to the specified Controller Id: {controller_id}."
+NEGATIVE_OR_ZERO_MSG = "The value for the `{parameter}` parameter cannot be negative or zero."
+NEGATIVE_MSG = "The value for the `{parameter}` parameter cannot be negative."
+INVALID_VALUE_MSG = "The value for the `{parameter}` parameter is invalid."
+ID_AND_LOCATION_BOTH_DEFINED = "Either id or location is allowed."
+ID_AND_LOCATION_BOTH_NOT_DEFINED = "Either id or location should be specified."
+DRIVES_NOT_DEFINED = "Drives must be defined for volume creation."
+NOT_ENOUGH_DRIVES = "Number of sufficient disks not found in Controller '{controller_id}'!"
+WAIT_TIMEOUT_MSG = "The job is not complete after {0} seconds."
+JOB_TRIGERRED = "Successfully triggered the {0} storage volume operation."
+VOLUME_NAME_REQUIRED_FOR_DELETE = "Virtual disk name is a required parameter for remove virtual disk operations."
+VOLUME_NOT_FOUND = "Unable to find the virtual disk."
+CHANGES_NOT_FOUND = "No changes found to commit!"
+CHANGES_FOUND = "Changes found to commit!"
+ODATA_ID = "@odata.id"
+ODATA_REGEX = "(.*?)@odata"
+ATTRIBUTE = "</Attribute>"
+VIEW_OPERATION_FAILED = "Failed to fetch storage details."
+VIEW_CONTROLLER_DETAILS_NOT_FOUND = "Failed to find the controller {controller_id}."
+VIEW_OPERATION_CONTROLLER_NOT_SPECIFIED = "Controller identifier parameter is missing."
+VIEW_VIRTUAL_DISK_DETAILS_NOT_FOUND = "Failed to find the volume : {volume_id} in controller : {controller_id}."
+SUCCESS_STATUS = "Success"
+FAILED_STATUS = "Failed"
+ERROR_CODES = ["SYS041", "SYS044", "SYS045", "SYS046", "SYS047", "SYS048", "SYS050", "SYS051", "SYS062",
+ "SYS063", "SYS064", "SYS065", "SYS067", "SYS068", "SYS070", "SYS071", "SYS072",
+ "SYS073", "SYS075", "SYS076", "SYS077", "SYS078", "SYS079", "SYS080"]
+
+
+class StorageBase:
+ def __init__(self, idrac, module):
+ self.module_ext_params = self.module_extend_input(module)
+ self.idrac = idrac
+ self.module = module
+
+ def data_conversion(self, module, each_volume):
+ volume_related_input = [
+ 'volume_type', 'span_length', 'span_depth',
+ 'number_dedicated_hot_spare', 'disk_cache_policy',
+ 'write_cache_policy', 'read_cache_policy', 'stripe_size',
+ 'capacity', 'raid_init_operation', 'protocol', 'media_type'
+ ]
+ for key in volume_related_input:
+ value = module.params.get(key)
+ if key not in each_volume:
+ each_volume[key] = value
+ return each_volume
+
+ def module_extend_input(self, module):
+ """
+ Extends the input module with additional volume-related parameters.
+
+ Args:
+ module (object): The module object.
+
+ Returns:
+ object: The updated module object.
+ """
+
+ module_copy = deepcopy(module.params)
+ volumes = module_copy.get('volumes')
+ if volumes:
+ for index in range(len(volumes)):
+ volumes[index] = self.data_conversion(module, volumes[index])
+ else:
+ tmp_volume = self.data_conversion(module, {})
+ required_pd = int(module_copy.get('span_length', 1)) * int(module_copy.get('span_depth', 1))
+ tmp_volume['drives'] = {'id': [(-i) for i in range(1, required_pd + 1)]}
+ module_copy['volumes'] = [tmp_volume]
+
+ int_input = ['span_length', 'span_depth', 'number_dedicated_hot_spare',
+ 'stripe_size']
+ if volumes:
+ for each_volume in volumes:
+ for each_input in each_volume:
+ if each_input in int_input:
+ each_volume[each_input] = int(each_volume[each_input])
+ return module_copy
+
+ def payload_for_disk(self, volume):
+ disk_payload = ''
+ if 'drives' in volume and 'id' in volume['drives']:
+ for each_pd_id in volume['drives']['id']:
+ scp = '<Attribute Name="IncludedPhysicalDiskID">{id}</Attribute>'.format(id=each_pd_id)
+ disk_payload = disk_payload + scp
+ if 'dedicated_hot_spare' in volume:
+ for each_dhs in volume['dedicated_hot_spare']:
+ scp = '<Attribute Name="RAIDdedicatedSpare">{id}</Attribute>'.format(id=each_dhs)
+ disk_payload = disk_payload + scp
+ return disk_payload
+
+ def construct_volume_payload(self, vd_id, volume):
+
+ """
+ Constructs a payload dictionary for the given key mappings.
+
+ Returns:
+ dict: The constructed payload dictionary.
+ """
+ key_mapping: dict = {
+ 'raid_init_operation': 'RAIDinitOperation',
+ 'state': "RAIDaction",
+ 'disk_cache_policy': "DiskCachePolicy",
+ 'write_cache_policy': "RAIDdefaultWritePolicy",
+ 'read_cache_policy': "RAIDdefaultReadPolicy",
+ 'stripe_size': "StripeSize",
+ 'span_depth': "SpanDepth",
+ 'span_length': "SpanLength",
+ 'volume_type': "RAIDTypes",
+ 'name': 'Name',
+ 'capacity': 'Size',
+ }
+ controller_id = self.module_ext_params.get("controller_id")
+ state = self.module_ext_params.get("state")
+ # Including state in each_volume as it mapped to RAIDaction
+ volume.update({'state': state.capitalize()})
+ payload = ''
+ attr = {}
+ vdfqdd = "Disk.Virtual.{0}:{1}".format(vd_id, controller_id)
+ for key in volume:
+ if volume[key] and key in key_mapping:
+ attr[key_mapping[key]] = volume[key]
+ disk_paylod = self.payload_for_disk(volume)
+ payload = xml_data_conversion(attr, vdfqdd, disk_paylod)
+ return payload
+
+ def constuct_payload(self, name_id_mapping):
+ number_of_existing_vd = len(name_id_mapping)
+ volume_payload, attr = '', {}
+ raid_reset_config_value = self.module_ext_params.get('raid_reset_config')
+ raid_key_mapping = {'raid_reset_config': 'RAIDresetConfig'}
+ if raid_reset_config_value == 'true':
+ raid_reset_config_value = 'True'
+ attr = {raid_key_mapping['raid_reset_config']: raid_reset_config_value}
+ for each_volume in self.module_ext_params.get('volumes'):
+ volume_payload = volume_payload + self.construct_volume_payload(number_of_existing_vd,
+ each_volume)
+ number_of_existing_vd = number_of_existing_vd + 1
+ raid_payload = xml_data_conversion(attr, self.module_ext_params.get('controller_id'), volume_payload)
+ return raid_payload
+
+ def wait_for_job_completion(self, job_resp):
+ job_wait = self.module_ext_params.get('job_wait')
+ job_wait_timeout = self.module_ext_params.get('job_wait_timeout')
+ job_dict = {}
+ if (job_tracking_uri := job_resp.headers.get("Location")):
+ job_id = job_tracking_uri.split("/")[-1]
+ job_uri = iDRAC_JOB_URI.format(job_id=job_id)
+ if job_wait:
+ job_failed, msg, job_dict, wait_time = idrac_redfish_job_tracking(self.idrac, job_uri,
+ max_job_wait_sec=job_wait_timeout,
+ sleep_interval_secs=1)
+ job_dict = remove_key(job_dict, regex_pattern=ODATA_REGEX)
+ if int(wait_time) >= int(job_wait_timeout):
+ self.module.exit_json(msg=WAIT_TIMEOUT_MSG.format(job_wait_timeout), changed=True, storage_status=job_dict)
+ if job_failed or job_dict.get("MessageId", "") in ERROR_CODES:
+ self.module.exit_json(msg=job_dict.get("Message"), storage_status=job_dict, failed=True)
+ else:
+ job_resp = self.idrac.invoke_request(job_uri, 'GET')
+ job_dict = job_resp.json_data
+ job_dict = remove_key(job_dict, regex_pattern=ODATA_REGEX)
+ self.module.exit_json(msg=JOB_TRIGERRED.format(self.module.params.get('state')), storage_status=job_dict, changed=True)
+ return job_dict
+
+
+class StorageData:
+ def __init__(self, idrac, module):
+ self.idrac = idrac
+ self.module = module
+
+ def fetch_controllers_uri(self):
+ uri, err_msg = validate_and_get_first_resource_id_uri(
+ self.module, self.idrac, SYSTEMS_URI)
+ if err_msg:
+ self.module.exit_json(msg=err_msg, failed=True)
+ storage_controllers = get_dynamic_uri(self.idrac, uri, 'Storage')
+ return storage_controllers
+
+ def fetch_api_data(self, uri, key_index_from_end):
+ key = uri.split("/")[key_index_from_end]
+ uri_data = self.idrac.invoke_request(uri, "GET")
+ return key, uri_data
+
+ def all_storage_data(self):
+ storage_info = {"Controllers": {}}
+ controllers_details_uri = self.fetch_controllers_uri()[ODATA_ID] + "?$expand=*($levels=1)"
+ controllers_list = get_dynamic_uri(self.idrac, controllers_details_uri)
+ for each_controller in controllers_list["Members"]:
+ controller_id = each_controller.get("Id")
+ if controller_id.startswith("CPU"):
+ continue
+ storage_info["Controllers"][controller_id] = deepcopy(each_controller)
+ storage_info["Controllers"][controller_id]["Drives"] = {}
+ storage_info["Controllers"][controller_id]["Volumes"] = {}
+ storage_info["Controllers"][controller_id]["Links"]["Enclosures"] = {}
+ # To fetch drives data
+ for each_drive_uri in each_controller["Drives"]:
+ key, uri_data = self.fetch_api_data(each_drive_uri[ODATA_ID], -1)
+ storage_info["Controllers"][controller_id]["Drives"][key] = uri_data.json_data
+
+ # To fetch volumes data
+ volume_uri = each_controller['Volumes'][ODATA_ID]
+ volumes_list = get_dynamic_uri(self.idrac, volume_uri, "Members")
+ for each_volume_uri in volumes_list:
+ key, uri_data = self.fetch_api_data(each_volume_uri[ODATA_ID], -1)
+ storage_info["Controllers"][controller_id]["Volumes"][key] = uri_data.json_data
+ # To fetch enclosures
+ for each_enclosure_uri in each_controller["Links"]["Enclosures"]:
+ key, uri_data = self.fetch_api_data(each_enclosure_uri[ODATA_ID], -1)
+ storage_info["Controllers"][controller_id]["Links"]["Enclosures"][key] = uri_data.json_data
+ return storage_info
+
+ def fetch_storage_data(self):
+ storage_info = {"Controller": {}}
+ storage_data = self.all_storage_data()
+ firm_ver = get_idrac_firmware_version(self.idrac)
+ for controller_id, controller_data in storage_data["Controllers"].items():
+ storage_info["Controller"][controller_id] = {
+ "ControllerSensor": {controller_id: {}}
+ }
+ if firm_ver >= "3.00":
+ battery_data = controller_data["Oem"]["Dell"].get("DellControllerBattery")
+ if battery_data:
+ storage_info["Controller"][controller_id]["ControllerSensor"][controller_id]["ControllerBattery"] = [battery_data["Id"]]
+ self.fetch_volumes(controller_id, controller_data, storage_info)
+ self.fetch_enclosures_and_physical_disk(controller_id, controller_data, storage_info)
+ return storage_info
+
+ def fetch_volumes(self, controller_id, controller_data, storage_info):
+ if controller_data["Volumes"]:
+ storage_info.setdefault("Controller", {}).setdefault(controller_id, {})["VirtualDisk"] = {}
+ for volume_id, volume_data in controller_data["Volumes"].items():
+ physical_disk = [self.fetch_api_data(drive[ODATA_ID], -1)[0] for drive in volume_data["Links"]["Drives"]]
+ storage_info["Controller"][controller_id]["VirtualDisk"][volume_id] = {"PhysicalDisk": physical_disk}
+
+ def fetch_enclosures_and_physical_disk(self, controller_id, controller_data, storage_info):
+ enclosures = [enclosure_id for enclosure_id in controller_data["Links"]["Enclosures"].keys() if enclosure_id.startswith("Enclosure")]
+ if len(enclosures) >= 1:
+ storage_info.setdefault("Controller", {})
+ storage_info["Controller"].setdefault(controller_id, {})
+ storage_info["Controller"][controller_id].setdefault("Enclosure", {})
+ for enclosure_id in enclosures:
+ storage_info["Controller"][controller_id]["Enclosure"][enclosure_id] = {"EnclosureSensor": {enclosure_id: {}}}
+ physical_disk = [self.fetch_api_data(drive[ODATA_ID], -1)[0] for drive in
+ controller_data["Links"]["Enclosures"][enclosure_id]["Links"]["Drives"]]
+ if physical_disk:
+ storage_info["Controller"][controller_id]["Enclosure"][enclosure_id]["PhysicalDisk"] = physical_disk
+ else:
+ if controller_data["Drives"].keys():
+ storage_info["Controller"][controller_id]["PhysicalDisk"] = list(controller_data["Drives"].keys())
+
+
+class StorageValidation(StorageBase):
+ def __init__(self, idrac, module):
+ super().__init__(idrac, module)
+ self.idrac_data = StorageData(idrac, module).all_storage_data()
+ self.controller_id = module.params.get("controller_id")
+
+ def validate_controller_exists(self):
+ if not self.controller_id:
+ self.module.exit_json(msg=CONTROLLER_NOT_DEFINED, failed=True)
+ controllers = self.idrac_data["Controllers"]
+ if self.controller_id not in controllers.keys():
+ self.module.exit_json(msg=CONTROLLER_NOT_EXIST_ERROR.format(controller_id=self.controller_id), failed=True)
+
+ def validate_job_wait_negative_values(self):
+ if self.module_ext_params.get("job_wait") and self.module_ext_params.get("job_wait_timeout") <= 0:
+ self.module.exit_json(msg=NEGATIVE_OR_ZERO_MSG.format(parameter="job_wait_timeout"), failed=True)
+
+ def validate_negative_values_for_volume_params(self, each_volume):
+ inner_params = ["span_depth", "span_length", "capacity", "strip_size"]
+ for param in inner_params:
+ value = each_volume.get(param)
+ if value is not None and value <= 0:
+ self.module.exit_json(msg=NEGATIVE_OR_ZERO_MSG.format(parameter=param), failed=True)
+ if each_volume.get("number_dedicated_hot_spare") < 0:
+ self.module.exit_json(msg=NEGATIVE_MSG.format(parameter="number_dedicated_hot_spare"), failed=True)
+
+ def validate_volume_drives(self, specified_volume):
+ specified_drives = specified_volume.get("drives")
+ if not specified_drives:
+ self.module.exit_json(msg=DRIVES_NOT_DEFINED, failed=True)
+ if specified_drives.get("id") and specified_drives.get("location"):
+ self.module.exit_json(msg=ID_AND_LOCATION_BOTH_DEFINED, failed=True)
+ elif "id" not in specified_drives and "location" not in specified_drives:
+ self.module.exit_json(msg=ID_AND_LOCATION_BOTH_NOT_DEFINED, failed=True)
+ drives_count = len(specified_drives.get("location")) if specified_drives.get("location") is not None else len(specified_drives.get("id"))
+ return self.raid_std_validation(specified_volume.get("span_length"),
+ specified_volume.get("span_depth"),
+ specified_volume.get("volume_type"),
+ drives_count)
+
+ def raid_std_validation(self, span_length, span_depth, volume_type, pd_count):
+ raid_std = {
+ "RAID 0": {'pd_slots': range(1, 2), 'span_length': 1, 'checks': operator.ge, 'span_depth': 1},
+ "RAID 1": {'pd_slots': range(1, 3), 'span_length': 2, 'checks': operator.eq, 'span_depth': 1},
+ "RAID 5": {'pd_slots': range(1, 4), 'span_length': 3, 'checks': operator.ge, 'span_depth': 1},
+ "RAID 6": {'pd_slots': range(1, 5), 'span_length': 4, 'checks': operator.ge, 'span_depth': 1},
+ "RAID 10": {'pd_slots': range(1, 5), 'span_length': 2, 'checks': operator.ge, 'span_depth': 2},
+ "RAID 50": {'pd_slots': range(1, 7), 'span_length': 3, 'checks': operator.ge, 'span_depth': 2},
+ "RAID 60": {'pd_slots': range(1, 9), 'span_length': 4, 'checks': operator.ge, 'span_depth': 2}
+ }
+ raid_info = raid_std.get(volume_type)
+ if not raid_info.get('checks')(span_length, raid_info.get('span_length')):
+ self.module.exit_json(msg=INVALID_VALUE_MSG.format(parameter="span_length"), failed=True)
+ if volume_type in ["RAID 0", "RAID 1", "RAID 5", "RAID 6"] and operator.ne(span_depth, raid_info.get('span_depth')):
+ self.module.exit_json(msg=INVALID_VALUE_MSG.format(parameter="span_depth"), failed=True)
+ if volume_type in ["RAID 10", "RAID 50", "RAID 60"] and operator.lt(span_depth, raid_info.get('span_depth')):
+ self.module.exit_json(msg=INVALID_VALUE_MSG.format(parameter="span_depth"), failed=True)
+ if not operator.eq(pd_count, span_depth * span_length):
+ self.module.exit_json(msg=INVALID_VALUE_MSG.format(parameter="drives"), failed=True)
+ return True
+
+
+class StorageCreate(StorageValidation):
+ def disk_slot_location_to_id_conversion(self, each_volume):
+ drives = {}
+ if "location" in each_volume['drives']:
+ regex_pattern = r"\d+"
+ physical_disk = self.idrac_data["Controllers"][self.controller_id]["Drives"]
+ slot_id_mapping = {int(re.search(regex_pattern, key).group()): key for key in physical_disk.keys()}
+ drives['id'] = [slot_id_mapping.get(each_pd) for each_pd in each_volume['drives']['location']
+ if slot_id_mapping.get(each_pd)]
+ elif "id" in each_volume['drives']:
+ drives['id'] = each_volume['drives']['id']
+ return drives
+
+ def perform_intersection_on_disk(self, each_volume, healthy_disk, available_disk,
+ media_type_supported_disk, protocol_supported_disk):
+ filtered_disk = healthy_disk
+ firm_ver = get_idrac_firmware_version(self.idrac)
+ if firm_ver >= "3.00":
+ filtered_disk = filtered_disk.intersection(available_disk)
+ if filtered_disk and each_volume.get('media_type'):
+ filtered_disk = filtered_disk.intersection(media_type_supported_disk)
+ if filtered_disk and each_volume.get('protocol'):
+ filtered_disk = filtered_disk.intersection(protocol_supported_disk)
+ return sorted(list(filtered_disk))
+
+ def filter_disk(self, each_volume):
+ disk_dict = self.idrac_data["Controllers"][self.controller_id]["Drives"]
+ healthy_disk = set()
+ available_disk = set()
+ media_type_supported_disk = set()
+ protocol_supported_disk = set()
+ raid_reset_config_value = self.module_ext_params.get('raid_reset_config')
+ raid_status_list = ["Ready", "NonRAID"]
+ if raid_reset_config_value == "true":
+ raid_status_list.append("Online")
+ for key, value in disk_dict.items():
+ if each_volume.get('media_type') and value.get('MediaType') == each_volume.get('media_type'):
+ media_type_supported_disk.add(key)
+ if each_volume.get('protocol') and value.get('Protocol') == each_volume.get('protocol'):
+ protocol_supported_disk.add(key)
+ status = value.get('Status', {}).get('Health', {})
+ if status == "OK":
+ healthy_disk.add(key)
+ raid_status = value.get('Oem', {}).get('Dell', {}).get('DellPhysicalDisk', {}).get('RaidStatus', {})
+ if raid_status in raid_status_list:
+ available_disk.add(key)
+ return self.perform_intersection_on_disk(each_volume, healthy_disk, available_disk,
+ media_type_supported_disk, protocol_supported_disk)
+
+ def updating_drives_module_input_when_given(self, each_volume, filter_disk_output):
+ updated_disk_id_list = []
+ if 'id' in each_volume['drives']:
+ for each_pd in each_volume['drives']['id']:
+ if each_pd in filter_disk_output:
+ updated_disk_id_list.append(each_pd)
+ return updated_disk_id_list
+
+ def updating_volume_module_input_for_hotspare(self, each_volume, filter_disk_output, reserved_pd, drives_exists_in_id):
+ tmp_list = []
+ if 'number_dedicated_hot_spare' in each_volume and each_volume['number_dedicated_hot_spare'] > 0:
+ for each_pd in filter_disk_output:
+ if each_pd not in reserved_pd and each_pd not in drives_exists_in_id:
+ tmp_list.append(each_pd)
+ if len(tmp_list) == each_volume['number_dedicated_hot_spare']:
+ break
+ return tmp_list
+
+ def updating_volume_module_input(self, drives_exists_in_id):
+ volumes = self.module_ext_params.get('volumes', [])
+ reserved_pd = []
+ for each in volumes:
+ required_pd = int(each['span_depth']) * int(each['span_length'])
+ filtered_disk = self.filter_disk(each)
+ if 'stripe_size' in each:
+ each['stripe_size'] = int(each['stripe_size'] / 512)
+
+ if each.get('capacity') is not None:
+ each['capacity'] = str(int(float(each['capacity']) * 1073741824))
+
+ if self.module.params.get('volumes') is None:
+ each['drives']['id'] = filtered_disk[:required_pd]
+
+ if 'drives' in each:
+ drives_id_list = self.updating_drives_module_input_when_given(each, filtered_disk)
+ reserved_pd += drives_id_list
+ each['drives']['id'] = drives_id_list
+
+ if 'number_dedicated_hot_spare' in each:
+ hotspare_disk_list = self.updating_volume_module_input_for_hotspare(each, filtered_disk, reserved_pd,
+ drives_exists_in_id)
+ reserved_pd += hotspare_disk_list
+ each['dedicated_hot_spare'] = hotspare_disk_list
+ self.validate_enough_drives_available(each)
+ if self.module.check_mode:
+ self.module.exit_json(msg=CHANGES_FOUND, changed=True)
+ self.module_ext_params['volumes'] = volumes
+
+ def validate_enough_drives_available(self, each_volume):
+ controller_id = self.module_ext_params.get('controller_id')
+ required_pd = each_volume['span_depth'] * each_volume['span_length']
+ drives_available = each_volume['drives']['id']
+ dedicated_hot_spare_required = int(each_volume['number_dedicated_hot_spare'])
+ dedicated_hot_spare_available = len(each_volume['dedicated_hot_spare'])
+ changed, failed = False, False
+ if (required_pd > len(drives_available) or dedicated_hot_spare_required != dedicated_hot_spare_available):
+ if not self.module.check_mode:
+ msg, failed = NOT_ENOUGH_DRIVES.format(controller_id=controller_id), True
+ else:
+ msg, changed = CHANGES_NOT_FOUND, False
+ self.module.exit_json(msg=msg, changed=changed, failed=failed)
+
+ def validate(self):
+ # Validate upper layer input
+ self.validate_controller_exists()
+ self.validate_job_wait_negative_values()
+ # Validate std raid validation for inner layer
+ drives_exists_in_id = []
+ for each_volume in self.module_ext_params.get('volumes', []):
+ # Validatiing for negative values
+ self.validate_negative_values_for_volume_params(each_volume)
+ self.validate_volume_drives(each_volume)
+ if 'location' in each_volume['drives'] and each_volume['drives']['location']:
+ each_volume['drives'] = self.disk_slot_location_to_id_conversion(each_volume)
+ drives_exists_in_id += each_volume['drives']['id']
+ # Extendeding volume module input in module_ext_params for drives id and hotspare
+ self.updating_volume_module_input(drives_exists_in_id)
+
+ def execute(self):
+ self.validate()
+ job_dict = {}
+ name_id_mapping = {value.get('Name'): key for key, value in self.idrac_data["Controllers"][self.controller_id]["Volumes"].items()}
+ parent_payload = """<SystemConfiguration>{0}</SystemConfiguration>"""
+ payload = self.constuct_payload(name_id_mapping)
+ parent_payload = parent_payload.format(payload)
+ resp = self.idrac.import_scp(import_buffer=parent_payload, target="RAID", job_wait=False)
+ job_dict = self.wait_for_job_completion(resp)
+ return job_dict
+
+
+class StorageDelete(StorageValidation):
+ def check_even_single_given_volume_exists(self, volume_name_input_list):
+ for each_name in volume_name_input_list:
+ for cntrl_id, detail in self.idrac_data.get('Controllers').items():
+ for vol_id, volume in detail.get('Volumes').items():
+ if each_name == volume.get('Name'):
+ return True
+
+ def validate_volume_exists_in_server(self, volume_name_input_list):
+ changed, failed = False, False
+ single_volume_name_matched = self.check_even_single_given_volume_exists(volume_name_input_list)
+ if single_volume_name_matched:
+ if self.module.check_mode:
+ msg, changed = CHANGES_FOUND, True
+ else:
+ return
+ else:
+ msg, failed = VOLUME_NOT_FOUND, True
+ self.module.exit_json(msg=msg, failed=failed, changed=changed)
+
+ def validate(self):
+ # Validate upper layer input
+ self.validate_job_wait_negative_values()
+
+ # Validate for volume and volume_name
+ if (not (volumes := self.module.params.get('volumes'))) or (volumes and not all("name" in each for each in volumes)):
+ self.module.exit_json(msg=VOLUME_NAME_REQUIRED_FOR_DELETE, failed=True)
+
+ def construct_payload_for_delete(self, cntrl_id_vd_id_mapping):
+ parent_payload = """<SystemConfiguration>{0}</SystemConfiguration>"""
+ raid_payload = ""
+ for each_controller, value in cntrl_id_vd_id_mapping.items():
+ volume_payload = ""
+ for each_value in value:
+ volume_payload += xml_data_conversion({'RAIDaction': 'Delete'}, each_value)
+ raid_payload += xml_data_conversion({}, each_controller, volume_payload)
+ parent_payload = parent_payload.format(raid_payload)
+ return parent_payload
+
+ def get_vd_id_based_on_controller_id_vd_name(self, user_volume_input_list):
+ cntrl_id_vd_id_mapping = {}
+ for cntrl_id, detail in self.idrac_data.get('Controllers').items():
+ for vd_id, volume in detail.get('Volumes').items():
+ if volume.get('Name') in user_volume_input_list:
+ if cntrl_id not in cntrl_id_vd_id_mapping:
+ cntrl_id_vd_id_mapping[cntrl_id] = [vd_id]
+ else:
+ cntrl_id_vd_id_mapping[cntrl_id].append(vd_id)
+ return cntrl_id_vd_id_mapping
+
+ def execute(self):
+ self.validate()
+ job_dict = {}
+ volume_name_input_list = [each.get('name') for each in self.module.params.get('volumes')]
+ self.validate_volume_exists_in_server(set(volume_name_input_list))
+ cntrl_id_vd_id_mapping = self.get_vd_id_based_on_controller_id_vd_name(set(volume_name_input_list))
+ payload = self.construct_payload_for_delete(cntrl_id_vd_id_mapping)
+ resp = self.idrac.import_scp(import_buffer=payload, target="RAID", job_wait=False)
+ job_dict = self.wait_for_job_completion(resp)
+ return job_dict
+
+
+class StorageView(StorageData):
+ def __init__(self, idrac, module):
+ super().__init__(idrac, module)
+
+ def execute(self):
+ status = SUCCESS_STATUS
+ storage_data = self.fetch_storage_data()
+ controller_id = self.module.params.get("controller_id")
+ volume_id = self.module.params.get("volume_id")
+ if volume_id:
+ status, storage_data = self.process_volume_id(volume_id, controller_id, storage_data)
+ elif controller_id:
+ status, storage_data = self.process_controller_id(controller_id, storage_data)
+ return {"Message": storage_data, "Status": status}
+
+ def process_volume_id(self, volume_id, controller_id, storage_data):
+ status = SUCCESS_STATUS
+ if controller_id:
+ ctrl_data = storage_data["Controller"].get(controller_id)
+ if ctrl_data:
+ virtual_disk = ctrl_data.get("VirtualDisk")
+ if not virtual_disk or volume_id not in virtual_disk:
+ status = FAILED_STATUS
+ message = VIEW_VIRTUAL_DISK_DETAILS_NOT_FOUND.format(volume_id=volume_id, controller_id=controller_id)
+ self.module.exit_json(msg=VIEW_OPERATION_FAILED,
+ storage_status={"Message": message, "Status": status},
+ failed=True)
+ else:
+ storage_data[controller_id] = {"VirtualDisk": ctrl_data["VirtualDisk"]}
+ del storage_data["Controller"]
+ else:
+ status = FAILED_STATUS
+ message = VIEW_CONTROLLER_DETAILS_NOT_FOUND.format(controller_id=controller_id)
+ self.module.exit_json(msg=VIEW_OPERATION_FAILED,
+ storage_status={"Message": message, "Status": status},
+ failed=True)
+ else:
+ status = FAILED_STATUS
+ message = VIEW_OPERATION_CONTROLLER_NOT_SPECIFIED
+ self.module.exit_json(msg=VIEW_OPERATION_FAILED,
+ storage_status={"Message": message, "Status": status},
+ failed=True)
+ return status, storage_data
+
+ def process_controller_id(self, controller_id, storage_data):
+ status = SUCCESS_STATUS
+ ctrl_data = storage_data["Controller"].get(controller_id)
+ if ctrl_data:
+ storage_data[controller_id] = ctrl_data
+ del storage_data["Controller"]
+ else:
+ status = FAILED_STATUS
+ message = VIEW_CONTROLLER_DETAILS_NOT_FOUND.format(controller_id=controller_id)
+ self.module.exit_json(msg=VIEW_OPERATION_FAILED,
+ storage_status={"Message": message, "Status": status},
+ failed=True)
+ return status, storage_data
+
+
+def main():
+ specs = {
+ "state": {"choices": ['create', 'delete', 'view'], "default": 'view'},
+ "volume_id": {"type": 'str'},
+ "volumes": {"type": 'list', "elements": 'dict'},
+ "span_depth": {"type": 'int', "default": 1},
+ "span_length": {"type": 'int', "default": 1},
+ "number_dedicated_hot_spare": {"type": 'int', "default": 0},
+ "volume_type": {"choices": ['RAID 0', 'RAID 1', 'RAID 5', 'RAID 6', 'RAID 10', 'RAID 50', 'RAID 60'],
+ "default": 'RAID 0'},
+ "disk_cache_policy": {"choices": ["Default", "Enabled", "Disabled"],
+ "default": "Default"},
+ "write_cache_policy": {"choices": ["WriteThrough", "WriteBack", "WriteBackForce"],
+ "default": "WriteThrough"},
+ "read_cache_policy": {"choices": ["NoReadAhead", "ReadAhead", "AdaptiveReadAhead"],
+ "default": "NoReadAhead"},
+ "stripe_size": {"type": 'int', "default": 64 * 1024},
+ "capacity": {"type": 'float'},
+ "controller_id": {"type": 'str'},
+ "media_type": {"choices": ['HDD', 'SSD']},
+ "protocol": {"choices": ['SAS', 'SATA', 'PCIE']},
+ "raid_reset_config": {"choices": ['true', 'false'], "default": 'false'},
+ "raid_init_operation": {"choices": ['None', 'Fast']},
+ "job_wait": {"type": "bool", "default": True},
+ "job_wait_timeout": {"type": "int", "default": 900}
+ }
+ specs.update(idrac_auth_params)
+ module = AnsibleModule(
+ argument_spec=specs,
+ supports_check_mode=True)
+ try:
+ with iDRACRedfishAPI(module.params) as idrac:
+ changed = False
+ state_class_mapping = {
+ 'create': StorageCreate,
+ 'view': StorageView,
+ 'delete': StorageDelete,
+ }
+ state_type = state_class_mapping.get(module.params['state'])
+ obj = state_type(idrac, module)
+ output = obj.execute()
+ msg = SUCCESSFUL_OPERATION_MSG.format(operation=module.params['state'])
+ changed = True if module.params['state'] in ['create', 'delete'] else False
+ module.exit_json(msg=msg, changed=changed, storage_status=output)
+ except HTTPError as err:
+ import json
+ module.exit_json(msg=str(err), error_info=json.load(err), failed=True)
+ except URLError as err:
+ module.exit_json(msg=str(err), unreachable=True)
+ except (SSLValidationError, ConnectionError, TypeError, ValueError, OSError) as err:
+ module.exit_json(msg=str(err), failed=True)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/dellemc/openmanage/plugins/modules/ome_application_console_preferences.py b/ansible_collections/dellemc/openmanage/plugins/modules/ome_application_console_preferences.py
index 65b1ae271..760546f02 100644
--- a/ansible_collections/dellemc/openmanage/plugins/modules/ome_application_console_preferences.py
+++ b/ansible_collections/dellemc/openmanage/plugins/modules/ome_application_console_preferences.py
@@ -3,8 +3,8 @@
#
# Dell OpenManage Ansible Modules
-# Version 7.0.0
-# Copyright (C) 2022 Dell Inc. or its subsidiaries. All Rights Reserved.
+# Version 9.1.0
+# Copyright (C) 2022-2024 Dell Inc. or its subsidiaries. All Rights Reserved.
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
#
@@ -130,12 +130,13 @@ options:
description: The frequency of the PowerManager extension data maintenance and purging.
type: int
requirements:
- - "python >= 3.8.6"
+ - "python >= 3.9.6"
notes:
- This module supports C(check_mode).
author:
- Sachin Apagundi(@sachin-apa)
- Husniya Hameed (@husniya-hameed)
+ - ShivamSh3 (@ShivamSh3)
'''
EXAMPLES = r'''
@@ -656,13 +657,13 @@ def main():
for cp in resp_data:
cp_data = strip_substr_dict(cp)
cp_list.append(cp_data)
- module.exit_json(msg=SUCCESS_MSG, console_preferences=cp_list)
+ module.exit_json(msg=SUCCESS_MSG, console_preferences=cp_list, changed=True)
except HTTPError as err:
- module.fail_json(msg=str(err), error_info=json.load(err))
+ module.exit_json(msg=str(err), error_info=json.load(err), failed=True)
except URLError as err:
module.exit_json(msg=str(err), unreachable=True)
except (IOError, ValueError, SSLError, TypeError, ConnectionError, AttributeError, IndexError, KeyError, OSError) as err:
- module.fail_json(msg=str(err), error_info=json.load(err))
+ module.exit_json(msg=str(err), failed=True)
if __name__ == '__main__':
diff --git a/ansible_collections/dellemc/openmanage/plugins/modules/ome_device_local_access_configuration.py b/ansible_collections/dellemc/openmanage/plugins/modules/ome_device_local_access_configuration.py
index 7de50f0fb..c6245a6de 100644
--- a/ansible_collections/dellemc/openmanage/plugins/modules/ome_device_local_access_configuration.py
+++ b/ansible_collections/dellemc/openmanage/plugins/modules/ome_device_local_access_configuration.py
@@ -3,8 +3,8 @@
#
# Dell OpenManage Ansible Modules
-# Version 8.1.0
-# Copyright (C) 2021-2023 Dell Inc. or its subsidiaries. All Rights Reserved.
+# Version 9.1.0
+# Copyright (C) 2022-2024 Dell Inc. or its subsidiaries. All Rights Reserved.
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
#
@@ -130,7 +130,7 @@ options:
- ja to set Japanese language.
- zh to set Chinese language.
requirements:
- - "python >= 3.8.6"
+ - "python >= 3.9.6"
author:
- "Felix Stephen (@felixs88)"
- "Shivam Sharma (@ShivamSh3)"
@@ -221,9 +221,9 @@ location_details:
"LcdCustomString": "LCD Text",
"LcdLanguage": "en",
"LcdOverridePin": "",
- "LcdPinLength": null,
+ "LcdPinLength": 6,
"LcdPresence": "Present",
- "LedPresence": null,
+ "LedPresence": "Absent",
"QuickSync": {
"EnableInactivityTimeout": true,
"EnableQuickSyncWifi": false,
@@ -380,6 +380,8 @@ def check_mode_validation(module, loc_resp):
payload["QuickSync"]["QuickSyncHardware"] = loc_resp["QuickSync"]["QuickSyncHardware"]
payload["SettingType"] = "LocalAccessConfiguration"
payload["LcdPresence"] = loc_resp["LcdPresence"]
+ payload["LcdPinLength"] = loc_resp["LcdPinLength"]
+ payload["LedPresence"] = loc_resp["LedPresence"]
return payload
@@ -476,7 +478,7 @@ def main():
except URLError as err:
module.exit_json(msg=str(err), unreachable=True)
except (IOError, ValueError, SSLError, TypeError, ConnectionError, AttributeError, IndexError, KeyError, OSError) as err:
- module.fail_json(msg=str(err))
+ module.exit_json(msg=str(err), failed=True)
if __name__ == '__main__':
diff --git a/ansible_collections/dellemc/openmanage/plugins/modules/ome_device_quick_deploy.py b/ansible_collections/dellemc/openmanage/plugins/modules/ome_device_quick_deploy.py
index f12cf7078..7d45bf7e9 100644
--- a/ansible_collections/dellemc/openmanage/plugins/modules/ome_device_quick_deploy.py
+++ b/ansible_collections/dellemc/openmanage/plugins/modules/ome_device_quick_deploy.py
@@ -3,7 +3,7 @@
#
# Dell OpenManage Ansible Modules
-# Version 8.7.0
+# Version 9.1.0
# Copyright (C) 2022-2024 Dell Inc. or its subsidiaries. All Rights Reserved.
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
@@ -127,6 +127,7 @@ requirements:
author:
- "Felix Stephen (@felixs88)"
- "Shivam Sharma (@ShivamSh3)"
+ - "Kritika Bhateja (@Kritika-Bhateja-03)"
notes:
- Run this module from a system that has direct access to OpenManage Enterprise Modular.
- This module supports C(check_mode).
@@ -395,7 +396,7 @@ def ip_address_field(module, field, deploy_options, slot=False):
if field_value is not None:
valid = validate_ip_address(module_params.get(val[0]), val[1])
if valid is False:
- module.fail_json(msg=IP_FAIL_MSG.format(field_value, val[0]))
+ module.exit_json(msg=IP_FAIL_MSG.format(field_value, val[0]), failed=True)
def check_domain_service(module, rest_obj):
@@ -404,7 +405,7 @@ def check_domain_service(module, rest_obj):
except HTTPError as err:
err_message = json.load(err)
if err_message["error"]["@Message.ExtendedInfo"][0]["MessageId"] == "CGEN1006":
- module.fail_json(msg=DOMAIN_FAIL_MSG)
+ module.exit_json(msg=DOMAIN_FAIL_MSG, failed=True)
def get_ip_from_host(hostname):
@@ -431,7 +432,7 @@ def get_chassis_device(module, rest_obj):
key, value = ("Id", data["DeviceId"])
break
else:
- module.fail_json(msg=FETCH_FAIL_MSG)
+ module.exit_json(msg=FETCH_FAIL_MSG, failed=True)
return key, value
@@ -469,12 +470,10 @@ def check_mode_validation(module, deploy_data):
"SlotIPV6Address": each.get("slot_ipv6_address"), "VlanId": each.get("vlan_id")}
if each.get("vlan_id") is not None:
req_slot_1.update({"VlanId": str(each.get("vlan_id"))})
- else:
- req_slot_1.update({"VlanId": ""})
req_filter_slot = dict([(k, v) for k, v in req_slot_1.items() if v is not None])
- exist_slot_1 = {"SlotId": exist_filter_slot[0]["SlotId"],
- "SlotIPV4Address": exist_filter_slot[0]["SlotIPV4Address"],
- "SlotIPV6Address": exist_filter_slot[0]["SlotIPV6Address"]}
+ exist_slot_1 = {"SlotId": exist_filter_slot[0].get("SlotId"),
+ "SlotIPV4Address": exist_filter_slot[0].get("SlotIPV4Address"),
+ "SlotIPV6Address": exist_filter_slot[0].get("SlotIPV6Address")}
if "VlanId" in exist_filter_slot[0]:
exist_slot_1.update({"VlanId": exist_filter_slot[0]["VlanId"]})
else:
@@ -487,7 +486,7 @@ def check_mode_validation(module, deploy_data):
else:
invalid_slot.append(each["slot_id"])
if invalid_slot:
- module.fail_json(msg=INVALID_SLOT_MSG.format(", ".join(map(str, invalid_slot))))
+ module.exit_json(msg=INVALID_SLOT_MSG.format(", ".join(map(str, invalid_slot))), failed=True)
if module.check_mode and any(diff_changes) is True:
module.exit_json(msg=CHANGES_FOUND, changed=True, quick_deploy_settings=deploy_data)
elif (module.check_mode and any(diff_changes) is False) or \
@@ -597,23 +596,25 @@ def get_device_details(rest_obj, module):
resp_data = resp.json_data.get("value")
rename_key = "id" if key == "Id" else "service tag"
if not resp_data:
- module.fail_json(msg=DEVICE_FAIL_MSG.format(rename_key, value))
+ module.exit_json(msg=DEVICE_FAIL_MSG.format(rename_key, value), failed=True)
if key == "DeviceServiceTag" and resp_data[0]["DeviceServiceTag"] == tag:
device_id = resp_data[0]["Id"]
elif key == "Id" and resp_data[0]["Id"] == device_id:
device_id = resp_data[0]["Id"]
else:
- module.fail_json(msg=DEVICE_FAIL_MSG.format(rename_key, value))
+ module.exit_json(msg=DEVICE_FAIL_MSG.format(rename_key, value), failed=True)
settings_type, settings_key = "IOMQuickDeploy", "IOM Quick Deploy"
if module.params["setting_type"] == "ServerQuickDeploy":
settings_type, settings_key = "ServerQuickDeploy", "Server Quick Deploy"
try:
deploy_resp = rest_obj.invoke_request("GET", QUICK_DEPLOY_API.format(device_id, settings_type))
except HTTPError as err:
- err_message = json.load(err)
- error_msg = err_message.get('error', {}).get('@Message.ExtendedInfo')
+ if err.status == 404:
+ module.exit_json(msg=DEVICE_FAIL_MSG.format(rename_key, value), failed=True)
+ err_message = json.load(err).get("error")
+ error_msg = err_message.get('@Message.ExtendedInfo')
if error_msg and error_msg[0].get("MessageId") == "CGEN1004":
- module.fail_json(msg=QUICK_DEPLOY_FAIL_MSG.format(settings_key))
+ module.exit_json(msg=QUICK_DEPLOY_FAIL_MSG.format(settings_key), failed=True)
else:
resp_data = rest_obj.strip_substr_dict(deploy_resp.json_data)
payload, slot_payload = check_mode_validation(module, resp_data)
@@ -621,7 +622,7 @@ def get_device_details(rest_obj, module):
if module.params["job_wait"]:
job_failed, job_msg = rest_obj.job_tracking(job_id, job_wait_sec=module.params["job_wait_timeout"])
if job_failed is True:
- module.fail_json(msg=FAIL_MSG)
+ module.exit_json(msg=FAIL_MSG, failed=True)
job_success_resp = rest_obj.invoke_request("GET", QUICK_DEPLOY_API.format(device_id, settings_type))
job_success_data = rest_obj.strip_substr_dict(job_success_resp.json_data)
return job_id, job_success_data
@@ -667,7 +668,7 @@ def main():
mutually_exclusive=[('device_id', 'device_service_tag')],
supports_check_mode=True,)
if module.params["quick_deploy_options"] is None:
- module.fail_json(msg="missing required arguments: quick_deploy_options")
+ module.exit_json(msg="missing required arguments: quick_deploy_options", failed=True)
fields = [("ipv4_subnet_mask", "IPV4"), ("ipv4_gateway", "IPV4"), ("ipv6_gateway", "IPV6")]
ip_address_field(module, fields, module.params["quick_deploy_options"], slot=False)
slot_options = module.params["quick_deploy_options"].get("slots")
@@ -683,12 +684,12 @@ def main():
module.exit_json(msg=SUCCESS_MSG, job_id=job_id, quick_deploy_settings=data, changed=True)
module.exit_json(msg=JOB_MSG, job_id=job_id)
except HTTPError as err:
- module.fail_json(msg=str(err), error_info=json.load(err))
+ module.exit_json(msg=str(err), error_info=json.load(err), failed=True)
except URLError as err:
module.exit_json(msg=str(err), unreachable=True)
except (IOError, ValueError, SSLError, TypeError, ConnectionError,
AttributeError, IndexError, KeyError, OSError) as err:
- module.fail_json(msg=str(err))
+ module.exit_json(msg=str(err), failed=True)
if __name__ == '__main__':
diff --git a/ansible_collections/dellemc/openmanage/plugins/modules/ome_devices.py b/ansible_collections/dellemc/openmanage/plugins/modules/ome_devices.py
index 876e5b235..2dc7b625d 100644
--- a/ansible_collections/dellemc/openmanage/plugins/modules/ome_devices.py
+++ b/ansible_collections/dellemc/openmanage/plugins/modules/ome_devices.py
@@ -3,8 +3,8 @@
#
# Dell OpenManage Ansible Modules
-# Version 6.1.0
-# Copyright (C) 2022 Dell Inc. or its subsidiaries. All Rights Reserved.
+# Version 9.1.0
+# Copyright (C) 2022-2024 Dell Inc. or its subsidiaries. All Rights Reserved.
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
#
@@ -19,8 +19,6 @@ module: ome_devices
short_description: Perform device-specific operations on target devices
description: Perform device-specific operations such as refresh inventory, clear iDRAC job queue, and reset iDRAC from OpenManage Enterprise.
version_added: 6.1.0
-author:
- - Jagadeesh N V(@jagadeeshnv)
extends_documentation_fragment:
- dellemc.openmanage.oment_auth_options
options:
@@ -77,7 +75,10 @@ options:
description: Optional description for the job.
type: str
requirements:
- - "python >= 3.8.6"
+ - "python >= 3.9.6"
+author:
+ - Jagadeesh N V(@jagadeeshnv)
+ - ShivamSh3(@ShivamSh3)
notes:
- For C(idrac_reset), the job triggers only the iDRAC reset operation and does not track the complete reset cycle.
- Run this module from a system that has direct access to Dell OpenManage Enterprise.
@@ -248,6 +249,7 @@ JOB_DESC = "The {0} task initiated from OpenManage Ansible Modules for devices w
APPLY_TRIGGERED = "Successfully initiated the device action job."
JOB_SCHEDULED = "The job is scheduled successfully."
SUCCESS_MSG = "The device operation is performed successfully."
+TIMEOUT_NEGATIVE_MSG = "The parameter `job_wait_timeout` value cannot be negative or zero."
all_device_types = [1000, 2000, 4000, 5000, 7000, 8000, 9001]
device_type_map = {"refresh_inventory": all_device_types, "reset_idrac": [1000], "clear_idrac_job_queue": [1000]}
@@ -419,6 +421,8 @@ def main():
supports_check_mode=True
)
try:
+ if module.params.get("job_wait") and module.params.get("job_wait_timeout") <= 0:
+ module.exit_json(msg=TIMEOUT_NEGATIVE_MSG, failed=True)
with RestOME(module.params, req_session=True) as rest_obj:
if module.params.get("state") == 'present':
valids, invalids = get_dev_ids(module, rest_obj,
@@ -432,12 +436,12 @@ def main():
module.exit_json(msg=NO_CHANGES_MSG)
delete_devices(module, rest_obj, valids)
except HTTPError as err:
- module.fail_json(msg=str(err), error_info=json.load(err))
+ module.exit_json(msg=str(err), error_info=json.load(err), failed=True)
except URLError as err:
module.exit_json(msg=str(err), unreachable=True)
except (IOError, ValueError, SSLError, TypeError, ConnectionError, AttributeError, IndexError, KeyError,
OSError) as err:
- module.fail_json(msg=str(err))
+ module.exit_json(msg=str(err), failed=True)
if __name__ == '__main__':
diff --git a/ansible_collections/dellemc/openmanage/plugins/modules/redfish_storage_volume.py b/ansible_collections/dellemc/openmanage/plugins/modules/redfish_storage_volume.py
index d8f0c5503..3de200a8f 100644
--- a/ansible_collections/dellemc/openmanage/plugins/modules/redfish_storage_volume.py
+++ b/ansible_collections/dellemc/openmanage/plugins/modules/redfish_storage_volume.py
@@ -3,8 +3,8 @@
#
# Dell OpenManage Ansible Modules
-# Version 8.5.0
-# Copyright (C) 2019-2023 Dell Inc. or its subsidiaries. All Rights Reserved.
+# Version 9.1.0
+# Copyright (C) 2019-2024 Dell Inc. or its subsidiaries. All Rights Reserved.
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
#
@@ -182,11 +182,13 @@ requirements:
author:
- "Sajna Shetty(@Sajna-Shetty)"
- "Kritika Bhateja(@Kritika-Bhateja-03)"
+ - "Shivam Sharma(@ShivamSh3)"
notes:
- Run this module from a system that has direct access to Redfish APIs.
- This module supports C(check_mode).
- This module always reports changes when I(name) and I(volume_id) are not specified.
Either I(name) or I(volume_id) is required to support C(check_mode).
+ - This module does not support the create operation of RAID6 and RAID60 storage volume on iDRAC8
- This module supports IPv4 and IPv6 addresses.
'''
@@ -374,6 +376,7 @@ import copy
from ssl import SSLError
from ansible_collections.dellemc.openmanage.plugins.module_utils.redfish import Redfish, redfish_auth_params
from ansible.module_utils.basic import AnsibleModule
+from ansible.module_utils.compat.version import LooseVersion
from ansible.module_utils.six.moves.urllib.error import URLError, HTTPError
from ansible.module_utils.urls import ConnectionError, SSLValidationError
from ansible_collections.dellemc.openmanage.plugins.module_utils.utils import MANAGER_JOB_ID_URI, wait_for_redfish_reboot_job, \
@@ -401,6 +404,9 @@ REBOOT_FAIL = "Failed to reboot the server."
CONTROLLER_NOT_EXIST_ERROR = "Specified Controller {controller_id} does not exist in the System."
TIMEOUT_NEGATIVE_OR_ZERO_MSG = "The parameter job_wait_timeout value cannot be negative or zero."
SYSTEM_ID = "System.Embedded.1"
+GET_IDRAC_FIRMWARE_VER_URI = "/redfish/v1/Managers/iDRAC.Embedded.1?$select=FirmwareVersion"
+ODATA_ID = "@odata.id"
+TARGET_OUT_OF_BAND = "Target out-of-band controller does not support storage feature using Redfish API."
volume_type_map = {"NonRedundant": "RAID0",
"Mirrored": "RAID1",
"StripedWithParity": "RAID5",
@@ -414,26 +420,26 @@ def fetch_storage_resource(module, session_obj):
system_resp = session_obj.invoke_request("GET", system_uri)
system_members = system_resp.json_data.get("Members")
if system_members:
- system_id_res = system_members[0]["@odata.id"]
- SYSTEM_ID = system_id_res.split('/')[-1]
+ system_id_res = system_members[0][ODATA_ID]
+ _SYSTEM_ID = system_id_res.split('/')[-1]
system_id_res_resp = session_obj.invoke_request("GET", system_id_res)
system_id_res_data = system_id_res_resp.json_data.get("Storage")
if system_id_res_data:
- storage_collection_map.update({"storage_base_uri": system_id_res_data["@odata.id"]})
+ storage_collection_map.update({"storage_base_uri": system_id_res_data[ODATA_ID]})
else:
- module.fail_json(msg="Target out-of-band controller does not support storage feature using Redfish API.")
+ module.fail_json(msg=TARGET_OUT_OF_BAND)
else:
- module.fail_json(msg="Target out-of-band controller does not support storage feature using Redfish API.")
+ module.fail_json(msg=TARGET_OUT_OF_BAND)
except HTTPError as err:
if err.code in [404, 405]:
- module.fail_json(msg="Target out-of-band controller does not support storage feature using Redfish API.",
+ module.fail_json(msg=TARGET_OUT_OF_BAND,
error_info=json.load(err))
raise err
except (URLError, SSLValidationError, ConnectionError, TypeError, ValueError) as err:
raise err
-def volume_payload(module):
+def volume_payload(module, greater_version):
params = module.params
drives = params.get("drives")
capacity_bytes = params.get("capacity_bytes")
@@ -448,8 +454,8 @@ def volume_payload(module):
capacity_bytes = int(capacity_bytes)
if drives:
storage_base_uri = storage_collection_map["storage_base_uri"]
- physical_disks = [{"@odata.id": DRIVES_URI.format(storage_base_uri=storage_base_uri,
- driver_id=drive_id)} for drive_id in drives]
+ physical_disks = [{ODATA_ID: DRIVES_URI.format(storage_base_uri=storage_base_uri,
+ driver_id=drive_id)} for drive_id in drives]
raid_mapper = {
"Name": params.get("name"),
"BlockSizeBytes": params.get("block_size_bytes"),
@@ -464,10 +470,15 @@ def volume_payload(module):
raid_payload.update({"Encrypted": encrypted})
if encryption_types:
raid_payload.update({"EncryptionTypes": [encryption_types]})
- if volume_type:
+ if volume_type and greater_version:
raid_payload.update({"RAIDType": volume_type_map.get(volume_type)})
- if raid_type:
+ if raid_type and greater_version:
raid_payload.update({"RAIDType": raid_type})
+ if volume_type and greater_version is False:
+ raid_payload.update({"VolumeType": volume_type})
+ if raid_type and greater_version is False:
+ raid_map = {value: key for key, value in volume_type_map.items()}
+ raid_payload.update({"VolumeType": raid_map.get(raid_type)})
if apply_time is not None:
raid_payload.update({"@Redfish.OperationApplyTime": apply_time})
return raid_payload
@@ -561,7 +572,7 @@ def perform_storage_volume_action(method, uri, session_obj, action, payload=None
raise err
-def check_mode_validation(module, session_obj, action, uri):
+def check_mode_validation(module, session_obj, action, uri, greater_version):
volume_id = module.params.get('volume_id')
name = module.params.get("name")
block_size_bytes = module.params.get("block_size_bytes")
@@ -575,49 +586,86 @@ def check_mode_validation(module, session_obj, action, uri):
if name is None and volume_id is None and module.check_mode:
module.exit_json(msg=CHANGES_FOUND, changed=True)
if action == "create" and name is not None:
- volume_resp = session_obj.invoke_request("GET", uri)
- volume_resp_data = volume_resp.json_data
- if volume_resp_data.get("Members@odata.count") == 0 and module.check_mode:
- module.exit_json(msg=CHANGES_FOUND, changed=True)
- elif 0 < volume_resp_data.get("Members@odata.count"):
- for mem in volume_resp_data.get("Members"):
- mem_resp = session_obj.invoke_request("GET", mem["@odata.id"])
- if mem_resp.json_data["Name"] == name:
- volume_id = mem_resp.json_data["Id"]
- break
- if name is not None and module.check_mode and volume_id is None:
- module.exit_json(msg=CHANGES_FOUND, changed=True)
+ volume_id = _create_name(module, session_obj, uri, name, volume_id)
if volume_id is not None:
- resp = session_obj.invoke_request("GET", SETTING_VOLUME_ID_URI.format(
- storage_base_uri=storage_collection_map["storage_base_uri"],
- volume_id=volume_id))
- resp_data = resp.json_data
+ _volume_id_check_mode(module, session_obj, greater_version, volume_id,
+ name, block_size_bytes, capacity_bytes, optimum_io_size_bytes,
+ encryption_types, encrypted, volume_type, raid_type, drives)
+ return None
+
+
+def _volume_id_check_mode(module, session_obj, greater_version, volume_id, name,
+ block_size_bytes, capacity_bytes, optimum_io_size_bytes,
+ encryption_types, encrypted, volume_type, raid_type, drives):
+ resp = session_obj.invoke_request("GET", SETTING_VOLUME_ID_URI.format(
+ storage_base_uri=storage_collection_map["storage_base_uri"],
+ volume_id=volume_id))
+ resp_data = resp.json_data
+ exist_value = _get_payload_for_version(greater_version, resp_data)
+ exit_value_filter = dict(
+ [(k, v) for k, v in exist_value.items() if v is not None])
+ cp_exist_value = copy.deepcopy(exit_value_filter)
+ req_value = get_request_value(greater_version, name, block_size_bytes, optimum_io_size_bytes, encryption_types, encrypted, volume_type, raid_type)
+ if capacity_bytes is not None:
+ req_value["CapacityBytes"] = int(capacity_bytes)
+ req_value_filter = dict([(k, v)
+ for k, v in req_value.items() if v is not None])
+ cp_exist_value.update(req_value_filter)
+ exist_drive, req_drive = [], []
+ if resp_data["Links"]:
+ exist_drive = [
+ disk[ODATA_ID].split("/")[-1] for disk in resp_data["Links"]["Drives"]]
+ if drives is not None:
+ req_drive = sorted(drives)
+ diff_changes = [bool(set(exit_value_filter.items()) ^ set(cp_exist_value.items())) or
+ bool(set(exist_drive) ^ set(req_drive))]
+ if module.check_mode and any(diff_changes) is True:
+ module.exit_json(msg=CHANGES_FOUND, changed=True)
+ elif (module.check_mode and any(diff_changes) is False) or \
+ (not module.check_mode and any(diff_changes) is False):
+ module.exit_json(msg=NO_CHANGES_FOUND)
+
+
+def get_request_value(greater_version, name, block_size_bytes, optimum_io_size_bytes, encryption_types, encrypted, volume_type, raid_type):
+ if greater_version:
+ req_value = {"Name": name, "BlockSizeBytes": block_size_bytes,
+ "Encrypted": encrypted, "OptimumIOSizeBytes": optimum_io_size_bytes,
+ "RAIDType": raid_type, "EncryptionTypes": encryption_types}
+ else:
+ req_value = {"Name": name, "BlockSizeBytes": block_size_bytes,
+ "Encrypted": encrypted, "OptimumIOSizeBytes": optimum_io_size_bytes,
+ "VolumeType": volume_type, "EncryptionTypes": encryption_types}
+ return req_value
+
+
+def _get_payload_for_version(greater_version, resp_data):
+ if greater_version:
exist_value = {"Name": resp_data["Name"], "BlockSizeBytes": resp_data["BlockSizeBytes"],
"CapacityBytes": resp_data["CapacityBytes"], "Encrypted": resp_data["Encrypted"],
"EncryptionTypes": resp_data["EncryptionTypes"][0],
"OptimumIOSizeBytes": resp_data["OptimumIOSizeBytes"], "RAIDType": resp_data["RAIDType"]}
- exit_value_filter = dict([(k, v) for k, v in exist_value.items() if v is not None])
- cp_exist_value = copy.deepcopy(exit_value_filter)
- req_value = {"Name": name, "BlockSizeBytes": block_size_bytes,
- "Encrypted": encrypted, "OptimumIOSizeBytes": optimum_io_size_bytes,
- "RAIDType": raid_type, "EncryptionTypes": encryption_types}
- if capacity_bytes is not None:
- req_value["CapacityBytes"] = int(capacity_bytes)
- req_value_filter = dict([(k, v) for k, v in req_value.items() if v is not None])
- cp_exist_value.update(req_value_filter)
- exist_drive, req_drive = [], []
- if resp_data["Links"]:
- exist_drive = [disk["@odata.id"].split("/")[-1] for disk in resp_data["Links"]["Drives"]]
- if drives is not None:
- req_drive = sorted(drives)
- diff_changes = [bool(set(exit_value_filter.items()) ^ set(cp_exist_value.items())) or
- bool(set(exist_drive) ^ set(req_drive))]
- if module.check_mode and any(diff_changes) is True:
- module.exit_json(msg=CHANGES_FOUND, changed=True)
- elif (module.check_mode and any(diff_changes) is False) or \
- (not module.check_mode and any(diff_changes) is False):
- module.exit_json(msg=NO_CHANGES_FOUND)
- return None
+ else:
+ exist_value = {"Name": resp_data["Name"], "BlockSizeBytes": resp_data["BlockSizeBytes"],
+ "CapacityBytes": resp_data["CapacityBytes"], "Encrypted": resp_data["Encrypted"],
+ "EncryptionTypes": resp_data["EncryptionTypes"][0],
+ "OptimumIOSizeBytes": resp_data["OptimumIOSizeBytes"], "VolumeType": resp_data["VolumeType"]}
+ return exist_value
+
+
+def _create_name(module, session_obj, uri, name, volume_id):
+ volume_resp = session_obj.invoke_request("GET", uri)
+ volume_resp_data = volume_resp.json_data
+ if volume_resp_data.get("Members@odata.count") == 0 and module.check_mode:
+ module.exit_json(msg=CHANGES_FOUND, changed=True)
+ elif 0 < volume_resp_data.get("Members@odata.count"):
+ for mem in volume_resp_data.get("Members"):
+ mem_resp = session_obj.invoke_request("GET", mem[ODATA_ID])
+ if mem_resp.json_data["Name"] == name:
+ volume_id = mem_resp.json_data["Id"]
+ break
+ if name is not None and module.check_mode and volume_id is None:
+ module.exit_json(msg=CHANGES_FOUND, changed=True)
+ return volume_id
def check_raid_type_supported(module, session_obj):
@@ -638,7 +686,7 @@ def check_raid_type_supported(module, session_obj):
raise err
-def get_apply_time(module, session_obj, controller_id):
+def get_apply_time(module, session_obj, controller_id, greater_version):
"""
gets the apply time from user if given otherwise fetches from server
"""
@@ -646,7 +694,10 @@ def get_apply_time(module, session_obj, controller_id):
try:
uri = APPLY_TIME_INFO_API.format(storage_base_uri=storage_collection_map["storage_base_uri"], controller_id=controller_id)
resp = session_obj.invoke_request("GET", uri)
- supported_apply_time_values = resp.json_data['@Redfish.OperationApplyTimeSupport']['SupportedValues']
+ if greater_version:
+ supported_apply_time_values = resp.json_data['@Redfish.OperationApplyTimeSupport']['SupportedValues']
+ else:
+ return apply_time
if apply_time:
if apply_time not in supported_apply_time_values:
module.exit_json(msg=APPLY_TIME_NOT_SUPPORTED_MSG.format(apply_time=apply_time, supported_apply_time_values=supported_apply_time_values),
@@ -658,24 +709,25 @@ def get_apply_time(module, session_obj, controller_id):
raise err
-def check_apply_time_supported_and_reboot_required(module, session_obj, controller_id):
+def check_apply_time_supported_and_reboot_required(module, session_obj, controller_id, greater_version):
"""
checks whether the apply time is supported and reboot operation is required or not.
"""
- apply_time = get_apply_time(module, session_obj, controller_id)
+ apply_time = get_apply_time(module, session_obj, controller_id, greater_version)
reboot_server = module.params.get("reboot_server")
if reboot_server and apply_time == "OnReset":
return True
return False
-def perform_volume_create_modify(module, session_obj):
+def perform_volume_create_modify(module, session_obj, greater_version):
"""
perform volume creation and modification for state present
"""
specified_controller_id = module.params.get("controller_id")
volume_id = module.params.get("volume_id")
- check_raid_type_supported(module, session_obj)
+ if greater_version:
+ check_raid_type_supported(module, session_obj)
action, uri, method = None, None, None
if specified_controller_id is not None:
check_controller_id_exists(module, session_obj)
@@ -690,8 +742,8 @@ def perform_volume_create_modify(module, session_obj):
volume_id=volume_id)
method = "PATCH"
action = "modify"
- payload = volume_payload(module)
- check_mode_validation(module, session_obj, action, uri)
+ payload = volume_payload(module, greater_version)
+ check_mode_validation(module, session_obj, action, uri, greater_version)
if not payload:
module.fail_json(msg="Input options are not provided for the {0} volume task.".format(action))
return perform_storage_volume_action(method, uri, session_obj, action, payload)
@@ -742,7 +794,7 @@ def perform_volume_initialization(module, session_obj):
module.fail_json(msg="'volume_id' option is a required property for initializing a volume.")
-def configure_raid_operation(module, session_obj):
+def configure_raid_operation(module, session_obj, greater_version):
"""
configure raid action based on state and command input
"""
@@ -750,7 +802,7 @@ def configure_raid_operation(module, session_obj):
state = module_params.get("state")
command = module_params.get("command")
if state is not None and state == "present":
- return perform_volume_create_modify(module, session_obj)
+ return perform_volume_create_modify(module, session_obj, greater_version)
elif state is not None and state == "absent":
return perform_volume_deletion(module, session_obj)
elif command is not None and command == "initialize":
@@ -818,11 +870,11 @@ def perform_reboot(module, session_obj):
module.exit_json(msg=msg, job_status=job_data)
-def check_job_tracking_required(module, session_obj, reboot_required, controller_id):
+def check_job_tracking_required(module, session_obj, reboot_required, controller_id, greater_version):
job_wait = module.params.get("job_wait")
apply_time = None
if controller_id:
- apply_time = get_apply_time(module, session_obj, controller_id)
+ apply_time = get_apply_time(module, session_obj, controller_id, greater_version)
if job_wait:
if apply_time == "OnReset" and not reboot_required:
return False
@@ -855,6 +907,15 @@ def validate_negative_job_time_out(module):
module.exit_json(msg=TIMEOUT_NEGATIVE_OR_ZERO_MSG, failed=True)
+def is_fw_ver_greater(session_obj):
+ firm_version = session_obj.invoke_request('GET', GET_IDRAC_FIRMWARE_VER_URI)
+ version = firm_version.json_data.get('FirmwareVersion', '')
+ if LooseVersion(version) <= '3.0':
+ return False
+ else:
+ return True
+
+
def main():
specs = {
"state": {"type": "str", "required": False, "choices": ['present', 'absent']},
@@ -899,6 +960,7 @@ def main():
validate_inputs(module)
validate_negative_job_time_out(module)
with Redfish(module.params, req_session=True) as session_obj:
+ greater_version = is_fw_ver_greater(session_obj)
fetch_storage_resource(module, session_obj)
controller_id = module.params.get("controller_id")
volume_id = module.params.get("volume_id")
@@ -907,16 +969,16 @@ def main():
if controller_id:
uri = CONTROLLER_URI.format(storage_base_uri=storage_collection_map["storage_base_uri"], controller_id=controller_id)
resp = check_specified_identifier_exists_in_the_system(module, session_obj, uri, CONTROLLER_NOT_EXIST_ERROR.format(controller_id=controller_id))
- reboot_required = check_apply_time_supported_and_reboot_required(module, session_obj, controller_id)
- status_message = configure_raid_operation(module, session_obj)
+ reboot_required = check_apply_time_supported_and_reboot_required(module, session_obj, controller_id, greater_version)
+ status_message = configure_raid_operation(module, session_obj, greater_version)
if volume_id and reboot_server:
controller_id = volume_id.split(":")[-1]
uri = CONTROLLER_URI.format(storage_base_uri=storage_collection_map["storage_base_uri"], controller_id=controller_id)
resp = check_specified_identifier_exists_in_the_system(module, session_obj, uri, CONTROLLER_NOT_EXIST_ERROR.format(controller_id=controller_id))
- reboot_required = check_apply_time_supported_and_reboot_required(module, session_obj, controller_id)
+ reboot_required = check_apply_time_supported_and_reboot_required(module, session_obj, controller_id, greater_version)
if reboot_required:
perform_reboot(module, session_obj)
- job_tracking_required = check_job_tracking_required(module, session_obj, reboot_required, controller_id)
+ job_tracking_required = check_job_tracking_required(module, session_obj, reboot_required, controller_id, greater_version)
job_id = status_message.get("task_id")
job_url = MANAGER_JOB_ID_URI.format(job_id)
if job_tracking_required:
diff --git a/ansible_collections/dellemc/openmanage/requirements.txt b/ansible_collections/dellemc/openmanage/requirements.txt
index 30a428ace..d0f6b9867 100644
--- a/ansible_collections/dellemc/openmanage/requirements.txt
+++ b/ansible_collections/dellemc/openmanage/requirements.txt
@@ -1,3 +1,2 @@
omsdk
netaddr>=0.7.19
-jmespath
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_bios/molecule/clear_pending_attributes/prepare.yml b/ansible_collections/dellemc/openmanage/roles/idrac_bios/molecule/clear_pending_attributes/prepare.yml
index 46d74222a..a91b20b69 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_bios/molecule/clear_pending_attributes/prepare.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_bios/molecule/clear_pending_attributes/prepare.yml
@@ -14,13 +14,10 @@
/iDRAC.Embedded.1/Jobs?$expand=*($levels=1)"
- name: Fetch Bios Jobs Data
- when: idrac_bios_uri_data.json.Members | length > 0
+ loop: "{{ idrac_bios_uri_data.json.Members }}"
+ when: item.JobType == 'BIOSConfiguration' and item.JobState in ['Scheduled', 'Scheduling']
ansible.builtin.set_fact:
- idrac_bios_jobs_items: "{{ idrac_bios_uri_data.json.Members
- | json_query(query) }}"
- vars:
- query: "[?JobType=='BIOSConfiguration' && JobState=='Scheduled'
- || JobState=='Scheduling' ]"
+ idrac_bios_jobs_items: "{{ idrac_bios_jobs_items | default([]) + [item] }}"
no_log: true
- name: Block for creating a bios job as a pre-requisite
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_bios/molecule/negative_scenarios_with_maintenance_window/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_bios/molecule/negative_scenarios_with_maintenance_window/converge.yml
index 44439ab07..622c48964 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_bios/molecule/negative_scenarios_with_maintenance_window/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_bios/molecule/negative_scenarios_with_maintenance_window/converge.yml
@@ -49,7 +49,7 @@
ansible.builtin.assert:
that: "idrac_bios_out.attributes.status_msg is search('The
maintenance time must be post-fixed with local offset
- to -06:00.')"
+ to')"
- name: Block to update attributes with maintenance window
with invalid duration
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_options_using_boot_option_reference_enabled_true/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_options_using_boot_option_reference_enabled_true/converge.yml
index 7db461ce1..4aa8e7661 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_options_using_boot_option_reference_enabled_true/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_options_using_boot_option_reference_enabled_true/converge.yml
@@ -55,6 +55,11 @@
delay: "{{ delay_count }}"
no_log: true
+ - name: Waiting for the iDRAC to be available
+ ansible.builtin.wait_for:
+ timeout: 60
+ tags: molecule-idempotence-notest
+
- name: Pre-requisite - Making sure enabled is false on first boot_option_reference
check_mode: false
ansible.builtin.import_role:
@@ -65,20 +70,6 @@
enabled: false
tags: molecule-idempotence-notest
- - name: Checking for LCStatus after running pre-requisite
- ansible.builtin.uri:
- <<: *uri_input
- url: "{{ lc_uri }}"
- method: POST
- body: {}
- register: lc_status_result
- check_mode: false
- when: idrac_boot_out.changed # noqa: no-handler
- until: lc_status_result.json.LCStatus == "Ready"
- retries: "{{ retry_count }}"
- delay: "{{ delay_count }}"
- no_log: true
-
- name: TC-115424 - Validate boot_options using boot_option_reference and default enabled
ansible.builtin.include_role:
name: "idrac_boot"
@@ -101,6 +92,11 @@
delay: "{{ delay_count }}"
no_log: true
+ - name: Waiting for the iDRAC to be available
+ ansible.builtin.wait_for:
+ timeout: 60
+ tags: molecule-idempotence-notest
+
- name: Asserting TC-115424 in check mode
ansible.builtin.assert:
that: idrac_boot_out.msg == "Changes found to be applied."
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_options_using_display_name_enabled_false/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_options_using_display_name_enabled_false/converge.yml
index 9bf8ed1e4..342873325 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_options_using_display_name_enabled_false/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_options_using_display_name_enabled_false/converge.yml
@@ -73,7 +73,6 @@
body: {}
register: lc_status_result
check_mode: false
- when: idrac_boot_out.changed # noqa: no-handler
until: lc_status_result.json.LCStatus == "Ready"
retries: "{{ retry_count }}"
delay: "{{ delay_count }}"
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_order_using_legacy_mode_force_restart/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_order_using_legacy_mode_force_restart/converge.yml
index 92d1958d7..851a4cc73 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_order_using_legacy_mode_force_restart/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_order_using_legacy_mode_force_restart/converge.yml
@@ -29,23 +29,6 @@
timeout: "{{ https_timeout }}"
no_log: true
- - name: Fetching boot order from iDRAC
- ansible.builtin.uri:
- <<: *uri_input
- url: "{{ boot_order_uri }}"
- method: GET
- register: result_data
- check_mode: false
- no_log: true
-
- - name: Extracing BootOrder from output
- ansible.builtin.set_fact:
- data: "{{ result_data.json.Boot.BootOrder | default([]) }}"
-
- - name: Reversing the boot order
- ansible.builtin.set_fact:
- reverse_boot_order: "{{ data | reverse | list }}"
-
- name: Checking for LCStatus before running pre-requisite
ansible.builtin.uri:
<<: *uri_input
@@ -58,6 +41,12 @@
retries: "{{ retry_count }}"
delay: "{{ delay_count }}"
no_log: true
+ tags: molecule-idempotence-notest
+
+ - name: Waiting for the iDRAC to be available
+ ansible.builtin.wait_for:
+ timeout: 60
+ tags: molecule-idempotence-notest
- name: Pre-requisite - Making sure boot mode is legacy
check_mode: false
@@ -67,6 +56,24 @@
boot_source_override_mode: legacy
tags: molecule-idempotence-notest
+ - name: Fetching boot order from iDRAC
+ ansible.builtin.uri:
+ <<: *uri_input
+ url: "{{ boot_order_uri }}"
+ method: GET
+ register: result_data
+ check_mode: false
+ no_log: true
+
+ - name: Extracing BootOrder from output
+ ansible.builtin.set_fact:
+ data: "{{ result_data.json.Boot.BootOrder | default([]) }}"
+
+ - name: Reversing the boot order
+ ansible.builtin.set_fact:
+ reverse_boot_order: "{{ data | reverse }}"
+ tags: molecule-idempotence-notest
+
- name: Checking for LCStatus after running pre-requisite
ansible.builtin.uri:
<<: *uri_input
@@ -80,12 +87,18 @@
retries: "{{ retry_count }}"
delay: "{{ delay_count }}"
no_log: true
+ tags: molecule-idempotence-notest
+
+ - name: Waiting for the iDRAC to be available
+ ansible.builtin.wait_for:
+ timeout: 60
+ tags: molecule-idempotence-notest
- name: TC-115427 - Validate boot_order with legacy mode with force_restart
ansible.builtin.include_role:
name: "idrac_boot"
vars:
- boot_order: "{{ reverse_boot_order }}"
+ boot_order: "{{ reverse_boot_order | default(data) }}"
reset_type: force_restart
- name: Checking for LCStatus after performing operation
@@ -101,6 +114,12 @@
retries: "{{ retry_count }}"
delay: "{{ delay_count }}"
no_log: true
+ tags: molecule-idempotence-notest
+
+ - name: Waiting for the iDRAC to be available
+ ansible.builtin.wait_for:
+ timeout: 60
+ tags: molecule-idempotence-notest
- name: Asserting TC-115427 in check mode
ansible.builtin.assert:
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_order_using_uefi_mode_graceful_restart/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_order_using_uefi_mode_graceful_restart/converge.yml
index 58cd441fe..48d24128a 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_order_using_uefi_mode_graceful_restart/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_order_using_uefi_mode_graceful_restart/converge.yml
@@ -29,23 +29,6 @@
timeout: "{{ https_timeout }}"
no_log: true
- - name: Fetching boot order from iDRAC
- ansible.builtin.uri:
- <<: *uri_input
- url: "{{ boot_order_uri }}"
- method: GET
- register: result_data
- check_mode: false
- no_log: true
-
- - name: Extracing BootOrder from output
- ansible.builtin.set_fact:
- data: "{{ result_data.json.Boot.BootOrder | default([]) }}"
-
- - name: Reversing the boot order
- ansible.builtin.set_fact:
- reverse_boot_order: "{{ data | reverse | list }}"
-
- name: Checking for LCStatus before running pre-requisite
ansible.builtin.uri:
<<: *uri_input
@@ -58,6 +41,12 @@
retries: "{{ retry_count }}"
delay: "{{ delay_count }}"
no_log: true
+ tags: molecule-idempotence-notest
+
+ - name: Wait for 60 seconds
+ ansible.builtin.wait_for:
+ timeout: 60
+ tags: molecule-idempotence-notest
- name: Pre-requisite - Making sure boot mode is uefi
check_mode: false
@@ -67,6 +56,24 @@
boot_source_override_mode: uefi
tags: molecule-idempotence-notest
+ - name: Fetching boot order from iDRAC
+ ansible.builtin.uri:
+ <<: *uri_input
+ url: "{{ boot_order_uri }}"
+ method: GET
+ register: result_data
+ check_mode: false
+ no_log: true
+
+ - name: Extracing BootOrder from output
+ ansible.builtin.set_fact:
+ data: "{{ result_data.json.Boot.BootOrder | default([]) }}"
+
+ - name: Reversing the boot order
+ ansible.builtin.set_fact:
+ reverse_boot_order: "{{ data | reverse | list }}"
+ tags: molecule-idempotence-notest
+
- name: Checking for LCStatus after running pre-requisite
ansible.builtin.uri:
<<: *uri_input
@@ -75,17 +82,22 @@
body: {}
register: lc_status_result
check_mode: false
- when: idrac_boot_out.changed # noqa: no-handler
until: lc_status_result.json.LCStatus == "Ready"
retries: "{{ retry_count }}"
delay: "{{ delay_count }}"
no_log: true
+ tags: molecule-idempotence-notest
+
+ - name: Wait for 60 seconds
+ ansible.builtin.wait_for:
+ timeout: 60
+ tags: molecule-idempotence-notest
- name: TC-115428 - Validate boot_order with uefi mode with graceful_restart
ansible.builtin.include_role:
name: "idrac_boot"
vars:
- boot_order: "{{ reverse_boot_order }}"
+ boot_order: "{{ reverse_boot_order | default(data) }}"
reset_type: graceful_restart
- name: Checking for LCStatus after performing operation
@@ -96,11 +108,11 @@
body: {}
register: lc_status_result
check_mode: false
- when: idrac_boot_out.changed # noqa: no-handler
until: lc_status_result.json.LCStatus == "Ready"
retries: "{{ retry_count }}"
delay: "{{ delay_count }}"
no_log: true
+ tags: molecule-idempotence-notest
- name: Asserting TC-115428 in check mode
ansible.builtin.assert:
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_source_override_enabled_as_continuous_reset_type_none/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_source_override_enabled_as_continuous_reset_type_none/converge.yml
index 076cdd755..a1e11acdd 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_source_override_enabled_as_continuous_reset_type_none/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_source_override_enabled_as_continuous_reset_type_none/converge.yml
@@ -40,6 +40,12 @@
retries: "{{ retry_count }}"
delay: "{{ delay_count }}"
no_log: true
+ tags: molecule-idempotence-notest
+
+ - name: Wait for 60 seconds
+ ansible.builtin.wait_for:
+ timeout: 60
+ tags: molecule-idempotence-notest
- name: Pre-requisite - Making sure boot_source_override_enabled is disabled
check_mode: false
@@ -57,11 +63,16 @@
body: {}
register: lc_status_result
check_mode: false
- when: idrac_boot_out.changed # noqa: no-handler
until: lc_status_result.json.LCStatus == "Ready"
retries: "{{ retry_count }}"
delay: "{{ delay_count }}"
no_log: true
+ tags: molecule-idempotence-notest
+
+ - name: Wait for 60 seconds
+ ansible.builtin.wait_for:
+ timeout: 60
+ tags: molecule-idempotence-notest
- name: TC-115433 - Validate boot_source_override_enabled as continuous
ansible.builtin.include_role:
@@ -83,6 +94,12 @@
retries: "{{ retry_count }}"
delay: "{{ delay_count }}"
no_log: true
+ tags: molecule-idempotence-notest
+
+ - name: Wait for 60 seconds
+ ansible.builtin.wait_for:
+ timeout: 60
+ tags: molecule-idempotence-notest
- name: Asserting TC-115433 in check mode
ansible.builtin.assert:
@@ -93,10 +110,4 @@
- name: Asserting TC-115433 in normal mode
ansible.builtin.assert:
that: idrac_boot_out.msg == "The boot settings job is triggered successfully."
- when: not ansible_check_mode and idrac_boot_out.changed
-
- - name: Asserting TC-115433 in idempotence mode
- ansible.builtin.assert:
- that:
- - idrac_boot_out.msg == "No changes found to be applied."
- when: not ansible_check_mode and not idrac_boot_out.changed
+ when: not ansible_check_mode
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_source_override_enabled_as_continuous_reset_type_none/molecule.yml b/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_source_override_enabled_as_continuous_reset_type_none/molecule.yml
index ed97d539c..608be28b1 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_source_override_enabled_as_continuous_reset_type_none/molecule.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_source_override_enabled_as_continuous_reset_type_none/molecule.yml
@@ -1 +1,7 @@
---
+scenario:
+ test_sequence:
+ - create
+ - check
+ - converge
+ - destroy
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_source_override_enabled_as_once_reset_type_none/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_source_override_enabled_as_once_reset_type_none/converge.yml
index 50bb281b2..8fc9af6dc 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_source_override_enabled_as_once_reset_type_none/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_source_override_enabled_as_once_reset_type_none/converge.yml
@@ -57,7 +57,6 @@
body: {}
register: lc_status_result
check_mode: false
- when: idrac_boot_out.changed # noqa: no-handler
until: lc_status_result.json.LCStatus == "Ready"
retries: "{{ retry_count }}"
delay: "{{ delay_count }}"
@@ -90,13 +89,8 @@
when: ansible_check_mode
tags: molecule-idempotence-notest
- - name: Asserting TC-115432 in normal mode
- ansible.builtin.assert:
- that: idrac_boot_out.msg == "The boot settings job is triggered successfully."
- when: not ansible_check_mode and idrac_boot_out.changed
-
- - name: Asserting TC-115432 in idempotence mode
+ - name: Asserting TC-115432 in normal mode or idempotence mode
ansible.builtin.assert:
that:
- - idrac_boot_out.msg == "No changes found to be applied."
+ - 'idrac_boot_out.msg == "The boot settings job is triggered successfully." or "No changes found to be applied."'
when: not ansible_check_mode and not idrac_boot_out.changed
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_source_override_mode_legacy_job_wait_false/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_source_override_mode_legacy_job_wait_false/converge.yml
index 86b7b39ea..85b84477f 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_source_override_mode_legacy_job_wait_false/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_source_override_mode_legacy_job_wait_false/converge.yml
@@ -58,7 +58,6 @@
body: {}
register: lc_status_result
check_mode: false
- when: idrac_boot_out.changed # noqa: no-handler
until: lc_status_result.json.LCStatus == "Ready"
retries: "{{ retry_count }}"
delay: "{{ delay_count }}"
@@ -78,11 +77,12 @@
method: GET
register: job_status_result
check_mode: false
- when: idrac_boot_out.changed # noqa: no-handler
- until: job_status_result.json.LCStatus == "Ready"
+ when: not ansible_check_mode # noqa: no-handler
+ until: job_status_result.json.JobState == "Completed"
retries: "{{ retry_count }}"
delay: "{{ delay_count }}"
no_log: true
+ tags: molecule-idempotence-notest
- name: Checking for LCStatus after performing operation
ansible.builtin.uri:
@@ -92,7 +92,6 @@
body: {}
register: lc_status_result
check_mode: false
- when: idrac_boot_out.changed # noqa: no-handler
until: lc_status_result.json.LCStatus == "Ready"
retries: "{{ retry_count }}"
delay: "{{ delay_count }}"
@@ -104,13 +103,8 @@
when: ansible_check_mode
tags: molecule-idempotence-notest
- - name: Asserting TC-115429 in normal mode
- ansible.builtin.assert:
- that: idrac_boot_out.msg == "The boot settings job is triggered successfully."
- when: not ansible_check_mode and idrac_boot_out.changed
-
- - name: Asserting TC-115429 in idempotence mode
+ - name: Asserting TC-115429 in normal mode or idempotence mode
ansible.builtin.assert:
that:
- - idrac_boot_out.msg == "No changes found to be applied."
+ - 'idrac_boot_out.msg == "The boot settings job is triggered successfully." or "No changes found to be applied."'
when: not ansible_check_mode and not idrac_boot_out.changed
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_source_override_mode_uefi_with_resource_id/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_source_override_mode_uefi_with_resource_id/converge.yml
index a2b6ef922..3024c3678 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_source_override_mode_uefi_with_resource_id/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_boot/molecule/boot_source_override_mode_uefi_with_resource_id/converge.yml
@@ -8,6 +8,7 @@
password: "{{ lookup('ansible.builtin.env', 'IDRAC_PASSWORD') }}"
validate_certs: false
system_uri: "https://{{ hostname }}:{{ https_port }}/redfish/v1/Systems"
+ job_status_uri: "https://{{ hostname }}:{{ https_port }}/redfish/v1/Managers/iDRAC.Embedded.1/Jobs"
lc_uri: "https://{{ hostname }}:{{ https_port }}/redfish/v1/Dell/Managers/iDRAC.Embedded.1/DellLCService/Actions/DellLCService.GetRemoteServicesAPIStatus"
retry_count: 60
delay_count: 30
@@ -54,6 +55,7 @@
retries: "{{ retry_count }}"
delay: "{{ delay_count }}"
no_log: true
+ tags: molecule-idempotence-notest
- name: Pre-requisite - Making sure boot mode is legacy
check_mode: false
@@ -71,7 +73,6 @@
body: {}
register: lc_status_result
check_mode: false
- when: idrac_boot_out.changed # noqa: no-handler
until: lc_status_result.json.LCStatus == "Ready"
retries: "{{ retry_count }}"
delay: "{{ delay_count }}"
@@ -91,11 +92,12 @@
method: GET
register: job_status_result
check_mode: false
- when: idrac_boot_out.changed # noqa: no-handler
- until: job_status_result.json.LCStatus == "Ready"
+ when: not ansible_check_mode # noqa: no-handler
+ until: job_status_result.json.JobState == "Completed"
retries: "{{ retry_count }}"
delay: "{{ delay_count }}"
no_log: true
+ tags: molecule-idempotence-notest
- name: Checking for LCStatus after performing operation
ansible.builtin.uri:
@@ -110,6 +112,7 @@
retries: "{{ retry_count }}"
delay: "{{ delay_count }}"
no_log: true
+ tags: molecule-idempotence-notest
- name: Asserting TC-115430 in check mode
ansible.builtin.assert:
@@ -119,7 +122,7 @@
- name: Asserting TC-115430 in normal mode
ansible.builtin.assert:
- that: idrac_boot_out.msg == "The boot settings job is triggered successfully."
+ that: idrac_boot_out.msg == "Successfully updated the boot settings."
when: not ansible_check_mode and idrac_boot_out.changed
- name: Asserting TC-115430 in idempotence mode
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/CA/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/CA/converge.yml
index 64e2a242f..3e7bb67c6 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/CA/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/CA/converge.yml
@@ -21,9 +21,9 @@
ansible.builtin.import_role:
name: dellemc.openmanage.idrac_certificate
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
ca_path: "{{ ca_cert_path }}"
command: "import"
@@ -55,9 +55,9 @@
ansible.builtin.import_role:
name: dellemc.openmanage.idrac_certificate
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
ca_path: "{{ ca_cert_path }}"
command: "export"
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/CSC/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/CSC/converge.yml
index 2a8708f27..a78651306 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/CSC/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/CSC/converge.yml
@@ -22,9 +22,9 @@
ansible.builtin.import_role:
name: dellemc.openmanage.idrac_certificate
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
ca_path: "{{ ca_cert_path }}"
command: "import"
@@ -57,9 +57,9 @@
ansible.builtin.import_role:
name: dellemc.openmanage.idrac_certificate
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
ca_path: "{{ ca_cert_path }}"
command: "export"
@@ -98,9 +98,9 @@
ansible.builtin.import_role:
name: dellemc.openmanage.idrac_certificate
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
ca_path: "{{ ca_cert_path }}"
command: "import"
@@ -133,9 +133,9 @@
ansible.builtin.import_role:
name: dellemc.openmanage.idrac_certificate
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
ca_path: "{{ ca_cert_path }}"
command: "export"
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/CTC/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/CTC/converge.yml
index cdf53ff08..5186af134 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/CTC/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/CTC/converge.yml
@@ -21,9 +21,9 @@
ansible.builtin.import_role:
name: dellemc.openmanage.idrac_certificate
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
ca_path: "{{ ca_cert_path }}"
command: "import"
@@ -55,9 +55,9 @@
ansible.builtin.import_role:
name: dellemc.openmanage.idrac_certificate
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
ca_path: "{{ ca_cert_path }}"
command: "export"
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/CustomCertificate/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/CustomCertificate/converge.yml
index 0f07f68ca..119105b5a 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/CustomCertificate/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/CustomCertificate/converge.yml
@@ -15,9 +15,9 @@
ansible.builtin.include_tasks:
file: ../__extract_firmware_version.yml
vars:
- idrac_ip: "{{ lookup('env', 'hostname') }}"
- idrac_user: "{{ lookup('env', 'username') }}"
- idrac_password: "{{ lookup('env', 'password') }}"
+ idrac_ip: "{{ lookup('env', 'IDRAC_IP') }}"
+ idrac_user: "{{ lookup('env', 'IDRAC_USER') }}"
+ idrac_password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
- name: Set expected firmware version
ansible.builtin.set_fact:
@@ -40,9 +40,9 @@
ansible.builtin.import_role:
name: dellemc.openmanage.idrac_certificate
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
ca_path: "{{ ca_cert_path }}"
command: "import"
@@ -97,9 +97,9 @@
ansible.builtin.import_role:
name: dellemc.openmanage.idrac_certificate
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
ca_path: "{{ ca_cert_path }}"
command: "export"
@@ -156,9 +156,9 @@
ansible.builtin.import_role:
name: dellemc.openmanage.idrac_certificate
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
ca_path: "{{ ca_cert_path }}"
command: "import"
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/HTTPS/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/HTTPS/converge.yml
index 28cdf16b8..610fdccd2 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/HTTPS/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/HTTPS/converge.yml
@@ -21,9 +21,9 @@
ansible.builtin.import_role:
name: dellemc.openmanage.idrac_certificate
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
ca_path: "{{ ca_cert_path }}"
command: "import"
@@ -55,9 +55,9 @@
ansible.builtin.import_role:
name: dellemc.openmanage.idrac_certificate
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
ca_path: "{{ ca_cert_path }}"
command: "export"
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/SSLKEY/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/SSLKEY/converge.yml
index c90e4e53e..4937fb8e5 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/SSLKEY/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/SSLKEY/converge.yml
@@ -13,9 +13,9 @@
ansible.builtin.include_tasks:
file: ../__extract_firmware_version.yml
vars:
- idrac_ip: "{{ lookup('env', 'hostname') }}"
- idrac_user: "{{ lookup('env', 'username') }}"
- idrac_password: "{{ lookup('env', 'password') }}"
+ idrac_ip: "{{ lookup('env', 'IDRAC_IP') }}"
+ idrac_user: "{{ lookup('env', 'IDRAC_USER') }}"
+ idrac_password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
- name: Set expected firmware version
ansible.builtin.set_fact:
@@ -38,9 +38,9 @@
ansible.builtin.import_role:
name: dellemc.openmanage.idrac_certificate
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
ca_path: "{{ ca_cert_path }}"
command: "import"
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/default/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/default/converge.yml
index 56c26b4a6..021cec95f 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/default/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/default/converge.yml
@@ -39,9 +39,9 @@
ansible.builtin.import_role:
name: dellemc.openmanage.idrac_certificate
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
ca_path: "{{ ca_cert_path }}"
command: "export"
@@ -62,9 +62,9 @@
ansible.builtin.import_role:
name: dellemc.openmanage.idrac_certificate
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
ca_path: "{{ ca_cert_path }}"
command: "import"
@@ -84,9 +84,9 @@
ansible.builtin.import_role:
name: dellemc.openmanage.idrac_certificate
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
ca_path: "{{ ca_cert_path }}"
command: "import"
@@ -106,9 +106,9 @@
ansible.builtin.import_role:
name: dellemc.openmanage.idrac_certificate
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
ca_path: "{{ ca_cert_path }}"
command: "import"
@@ -128,8 +128,8 @@
ansible.builtin.import_role:
name: dellemc.openmanage.idrac_certificate
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
password: "{{ lookup('env', 'invalid_password') }}"
validate_certs: false
ca_path: "{{ ca_cert_path }}"
@@ -153,8 +153,8 @@
name: dellemc.openmanage.idrac_certificate
vars:
hostname: "999.999.999.999"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
command: "reset"
certificate_type: "HTTPS"
@@ -173,9 +173,9 @@
ansible.builtin.import_role:
name: dellemc.openmanage.idrac_certificate
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
username: invalid
- password: "{{ lookup('env', 'password') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
command: "reset"
certificate_type: "HTTPS"
@@ -193,8 +193,8 @@
ansible.builtin.import_role:
name: dellemc.openmanage.idrac_certificate
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
password: invalid
validate_certs: false
command: "reset"
@@ -213,9 +213,9 @@
ansible.builtin.import_role:
name: dellemc.openmanage.idrac_certificate
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
command: "invalid"
certificate_type: "HTTPS"
@@ -233,9 +233,9 @@
ansible.builtin.import_role:
name: dellemc.openmanage.idrac_certificate
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
command: "export"
certificate_type: "HTTPS"
@@ -256,9 +256,9 @@
ansible.builtin.import_role:
name: dellemc.openmanage.idrac_certificate
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
command: "import"
certificate_type: "CSC"
@@ -279,9 +279,9 @@
ansible.builtin.import_role:
name: dellemc.openmanage.idrac_certificate
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
command: "generate_csr"
certificate_type: "HTTPS"
@@ -307,9 +307,9 @@
ansible.builtin.import_role:
name: dellemc.openmanage.idrac_certificate
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
command: "import"
certificate_type: "CUSTOMCERTIFICATE"
@@ -332,9 +332,9 @@
ansible.builtin.import_role:
name: dellemc.openmanage.idrac_certificate
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
command: "import"
certificate_type: "CUSTOMCERTIFICATE"
@@ -356,9 +356,9 @@
ansible.builtin.import_role:
name: dellemc.openmanage.idrac_certificate
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
command: "import"
certificate_type: "HTTPS"
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/generateCSR/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/generateCSR/converge.yml
index 9f57c7e84..ee37021b9 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/generateCSR/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/generateCSR/converge.yml
@@ -16,9 +16,9 @@
ansible.builtin.import_role:
name: idrac_certificate
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
ca_path: "{{ ca_cert_path }}"
command: "generate_csr"
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/reset/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/reset/converge.yml
index 8a3e23ab5..1d78d3389 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/reset/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_certificate/molecule/reset/converge.yml
@@ -10,9 +10,9 @@
ansible.builtin.import_role:
name: idrac_certificate
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
ca_path: "{{ ca_cert_path }}"
command: "reset"
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_export_server_config_profile/molecule/default/cleanup.yml b/ansible_collections/dellemc/openmanage/roles/idrac_export_server_config_profile/molecule/default/cleanup.yml
index 9ade81e90..cccd89d7b 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_export_server_config_profile/molecule/default/cleanup.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_export_server_config_profile/molecule/default/cleanup.yml
@@ -14,18 +14,18 @@
nfs_mount_path: "{{ lookup('env', 'nfs_mount_path') }}"
cifs_mount_path: "{{ lookup('env', 'cifs_mount_path') }}"
- nfs_url: "{{ lookup('env', 'NFS_URL') }}"
- cifs_url: "{{ lookup('env', 'CIFS_URL') }}"
- cifs_username: "{{ lookup('env', 'CIFS_USERNAME') }}"
- cifs_password: "{{ lookup('env', 'CIFS_PASSWORD') }}"
+ nfs_url: "{{ lookup('env', 'nfs_url') }}"
+ cifs_url: "{{ lookup('env', 'cifs_url') }}"
+ cifs_username: "{{ lookup('env', 'cifs_username') }}"
+ cifs_password: "{{ lookup('env', 'cifs_password') }}"
- https_url: "{{ lookup('env', 'HTTPS_URL') }}"
- https_username: "{{ lookup('env', 'HTTPS_USERNAME') }}"
- https_password: "{{ lookup('env', 'HTTPS_PASSWORD') }}"
+ https_url: "{{ lookup('env', 'https_url') }}"
+ https_username: "{{ lookup('env', 'https_username') }}"
+ https_password: "{{ lookup('env', 'https_password') }}"
- http_url: "{{ lookup('env', 'HTTP_URL') }}"
- http_username: "{{ lookup('env', 'HTTP_USERNAME') }}"
- http_password: "{{ lookup('env', 'HTTP_PASSWORD') }}"
+ http_url: "{{ lookup('env', 'http_url') }}"
+ http_username: "{{ lookup('env', 'http_username') }}"
+ http_password: "{{ lookup('env', 'http_password') }}"
tasks:
- name: Checking file exists in NFS mount localhost
ansible.builtin.stat:
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_export_server_config_profile/molecule/default/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_export_server_config_profile/molecule/default/converge.yml
index 8073a85bc..7b4e215c2 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_export_server_config_profile/molecule/default/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_export_server_config_profile/molecule/default/converge.yml
@@ -10,18 +10,18 @@
nfs_mount_path: "{{ lookup('env', 'nfs_mount_path') }}"
cifs_mount_path: "{{ lookup('env', 'nfs_mount_path') }}"
- nfs_url: "{{ lookup('env', 'NFS_URL') }}"
- cifs_url: "{{ lookup('env', 'CIFS_URL') }}"
- cifs_username: "{{ lookup('env', 'CIFS_USERNAME') }}"
- cifs_password: "{{ lookup('env', 'CIFS_PASSWORD') }}"
+ nfs_url: "{{ lookup('env', 'nfs_url') }}"
+ cifs_url: "{{ lookup('env', 'cifs_url') }}"
+ cifs_username: "{{ lookup('env', 'cifs_username') }}"
+ cifs_password: "{{ lookup('env', 'cifs_password') }}"
- https_url: "{{ lookup('env', 'HTTPS_URL') }}"
- https_username: "{{ lookup('env', 'HTTPS_USERNAME') }}"
- https_password: "{{ lookup('env', 'HTTPS_PASSWORD') }}"
+ https_url: "{{ lookup('env', 'https_url') }}"
+ https_username: "{{ lookup('env', 'https_username') }}"
+ https_password: "{{ lookup('env', 'https_password') }}"
- http_url: "{{ lookup('env', 'HTTP_URL') }}"
- http_username: "{{ lookup('env', 'HTTP_USERNAME') }}"
- http_password: "{{ lookup('env', 'HTTP_PASSWORD') }}"
+ http_url: "{{ lookup('env', 'http_url') }}"
+ http_username: "{{ lookup('env', 'http_username') }}"
+ http_password: "{{ lookup('env', 'http_password') }}"
gather_facts: false
tasks:
- name: Exporting SCP local path with all components
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_export_server_config_profile/molecule/default/verify.yml b/ansible_collections/dellemc/openmanage/roles/idrac_export_server_config_profile/molecule/default/verify.yml
index 25206e2d3..dc1cd1815 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_export_server_config_profile/molecule/default/verify.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_export_server_config_profile/molecule/default/verify.yml
@@ -14,18 +14,18 @@
nfs_mount_path: "{{ lookup('env', 'nfs_mount_path') }}"
cifs_mount_path: "{{ lookup('env', 'cifs_mount_path') }}"
- nfs_url: "{{ lookup('env', 'NFS_URL') }}"
- cifs_url: "{{ lookup('env', 'CIFS_URL') }}"
- cifs_username: "{{ lookup('env', 'CIFS_USERNAME') }}"
- cifs_password: "{{ lookup('env', 'CIFS_PASSWORD') }}"
+ nfs_url: "{{ lookup('env', 'nfs_url') }}"
+ cifs_url: "{{ lookup('env', 'cifs_url') }}"
+ cifs_username: "{{ lookup('env', 'cifs_username') }}"
+ cifs_password: "{{ lookup('env', 'cifs_password') }}"
- https_url: "{{ lookup('env', 'HTTPS_URL') }}"
- https_username: "{{ lookup('env', 'HTTPS_USERNAME') }}"
- https_password: "{{ lookup('env', 'HTTPS_PASSWORD') }}"
+ https_url: "{{ lookup('env', 'https_url') }}"
+ https_username: "{{ lookup('env', 'https_username') }}"
+ https_password: "{{ lookup('env', 'https_password') }}"
- http_url: "{{ lookup('env', 'HTTP_URL') }}"
- http_username: "{{ lookup('env', 'HTTP_USERNAME') }}"
- http_password: "{{ lookup('env', 'HTTP_PASSWORD') }}"
+ http_url: "{{ lookup('env', 'http_url') }}"
+ http_username: "{{ lookup('env', 'http_username') }}"
+ http_password: "{{ lookup('env', 'http_password') }}"
tasks:
- name: Checking exported file exists in Local path
ansible.builtin.stat:
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/cifs_share/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/cifs_share/converge.yml
index 161a35cf4..1ebd565bb 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/cifs_share/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/cifs_share/converge.yml
@@ -7,9 +7,9 @@
ansible.builtin.import_role:
name: "idrac_firmware"
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
share_name: "{{ lookup('env', 'cifsshare') }}"
share_user: "{{ lookup('env', 'shareuser') }}"
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/default/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/default/converge.yml
index bc30806f4..43a3ece9b 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/default/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/default/converge.yml
@@ -7,9 +7,9 @@
ansible.builtin.import_role:
name: "idrac_firmware"
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
share_name: "{{ lookup('env', 'httpsshare') }}"
share_user: "{{ lookup('env', 'shareuser') }}"
@@ -31,9 +31,9 @@
ansible.builtin.import_role:
name: "idrac_firmware"
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
share_name: "{{ lookup('env', 'httpsshare') }}"
share_user: "{{ lookup('env', 'shareuser') }}"
@@ -56,9 +56,9 @@
ansible.builtin.import_role:
name: "idrac_firmware"
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
share_name: "{{ lookup('env', 'httpsshare') }}"
share_user: "{{ lookup('env', 'shareuser') }}"
@@ -80,9 +80,9 @@
ansible.builtin.import_role:
name: "idrac_firmware"
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
share_name: "{{ lookup('env', 'httpsshare') }}"
share_user: "{{ lookup('env', 'shareuser') }}"
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/ftp_share/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/ftp_share/converge.yml
index a94da723a..48ecbc93e 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/ftp_share/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/ftp_share/converge.yml
@@ -7,9 +7,9 @@
ansible.builtin.import_role:
name: idrac_firmware
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
share_name: "{{ lookup('env', 'ftpshare') }}"
share_user: "{{ lookup('env', 'shareuser') }}"
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/http_share/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/http_share/converge.yml
index 82df756b5..c34cc7d32 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/http_share/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/http_share/converge.yml
@@ -7,9 +7,9 @@
ansible.builtin.import_role:
name: "idrac_firmware"
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
share_name: "{{ lookup('env', 'httpsshare') }}"
share_user: "{{ lookup('env', 'shareuser') }}"
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/https_share/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/https_share/converge.yml
index a94983cae..b1f7805ad 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/https_share/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/https_share/converge.yml
@@ -7,9 +7,9 @@
ansible.builtin.import_role:
name: "idrac_firmware"
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
share_name: "{{ lookup('env', 'httpsshare') }}"
share_user: "{{ lookup('env', 'shareuser') }}"
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/httpsproxy_share/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/httpsproxy_share/converge.yml
index b4bd4bdc1..d4b44b358 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/httpsproxy_share/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/httpsproxy_share/converge.yml
@@ -7,9 +7,9 @@
ansible.builtin.import_role:
name: "idrac_firmware"
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
share_name: "{{ lookup('env', 'httpsproxy') }}"
share_user: "{{ lookup('env', 'shareuser') }}"
@@ -21,8 +21,8 @@
proxy_server: "{{ lookup('env', 'proxyserver') }}"
proxy_type: "HTTP"
proxy_port: 3128
- proxy_uname: "{{ lookup('env', 'proxyuname') }}"
- proxy_passwd: "{{ lookup('env', 'proxypass') }}"
+ proxy_uname: "{{ lookup('env', 'proxy_username') }}"
+ proxy_passwd: "{{ lookup('env', 'proxy_password') }}"
catalog_file_name: "Catalog.xml"
- name: "Verifying update firmware from repository on a HTTPS via parameter proxy share in check mode"
@@ -48,9 +48,9 @@
ansible.builtin.import_role:
name: "idrac_firmware"
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
reboot: true
job_wait: true
@@ -81,9 +81,9 @@
ansible.builtin.import_role:
name: "idrac_firmware"
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
share_name: "{{ lookup('env', 'httpsproxy') }}"
share_user: "{{ lookup('env', 'shareuser') }}"
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/negative_scenarios/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/negative_scenarios/converge.yml
index 37b959272..98800e160 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/negative_scenarios/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/negative_scenarios/converge.yml
@@ -8,15 +8,13 @@
name: idrac_firmware
vars:
hostname: "invalidHostname"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
share_name: "{{ lookup('env', 'httpshare') }}"
catalog_file_name: "Catalog.xml"
reboot: true
job_wait: true
apply_update: true
- ignore_errors: true
- register: idrac_firmware_result
- name: "Verifying Updating firmware with an invalid hostname"
ansible.builtin.assert:
@@ -27,9 +25,9 @@
ansible.builtin.import_role:
name: idrac_firmware
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
username: "invalidUsername"
- password: "{{ lookup('env', 'password') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
share_name: "{{ lookup('env', 'httpshare') }}"
catalog_file_name: "Catalog.xml"
reboot: true
@@ -47,10 +45,10 @@
ansible.builtin.import_role:
name: idrac_firmware
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
password: "invalidPassword"
- share_name: "{{ lookup('env', 'httpshare') }}"
+ share_name: "{{ lookup('env', 'httpsshare') }}"
catalog_file_name: "Catalog.xml"
reboot: true
job_wait: true
@@ -67,11 +65,11 @@
ansible.builtin.import_role:
name: idrac_firmware
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
- share_name: "{{ lookup('env', 'httpshare') }}"
- ca_path: "{{ lookup('env', 'capath') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
+ share_name: "{{ lookup('env', 'httpsshare') }}"
+ ca_path: "/invalid/ca/path.cert"
catalog_file_name: "Catalog.xml"
reboot: true
job_wait: true
@@ -82,15 +80,15 @@
- name: "Verifying Updating firmware with an invalid ca_path"
ansible.builtin.assert:
that:
- - idrac_firmware_out.msg == "Firmware update failed."
+ - "'Incorrect username or password, unreachable iDRAC IP or a failure in TLS/SSL handshake.' in idrac_firmware_out.msg"
- name: Updating firmware with catalog file without extension
ansible.builtin.import_role:
name: idrac_firmware
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
share_name: "{{ lookup('env', 'httpshare') }}"
reboot: true
job_wait: true
@@ -108,9 +106,9 @@
ansible.builtin.import_role:
name: "idrac_firmware"
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
share_name: "{{ lookup('env', 'httpsshare') }}"
share_user: "invalidUser"
@@ -118,21 +116,24 @@
reboot: true
job_wait: true
apply_update: true
- catalog_file_name: "Catalog.xml"
+ catalog_file_name: "catalog.xml"
+ ignore_errors: true
+ register: idrac_firmware_result
- name: "Verifying update firmware from repository on a HTTPS Share with invalid share_user"
ansible.builtin.assert:
that:
- - idrac_firmware_out.msg == "Unable to complete the operation because the catalog name entered has either unsupported firmware packages
- or same version installed on the server."
+ # - idrac_firmware_out.msg == "Unable to complete the operation because the catalog name entered has either unsupported firmware packages
+ # or same version installed on the server."
+ - "'The specified user credentials necessary for downloading an update package were not correct.' in idrac_firmware_out.msg"
- name: Update firmware from repository on HTTPS Share with invalid share_password
ansible.builtin.import_role:
name: "idrac_firmware"
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
share_name: "{{ lookup('env', 'httpsshare') }}"
share_user: "{{ lookup('env', 'shareuser') }}"
@@ -140,24 +141,26 @@
reboot: true
job_wait: true
apply_update: true
- catalog_file_name: "Catalog.xml"
+ catalog_file_name: "catalog.xml"
+ ignore_errors: true
register: idrac_firmware_result
- name: "Verifying update firmware from repository on a HTTPS Share with invalid share_password"
ansible.builtin.assert:
that:
- - idrac_firmware_out.msg == "Unable to complete the operation because the catalog name entered has either unsupported firmware packages
- or same version installed on the server."
+ # - idrac_firmware_out.msg == "Unable to complete the operation because the catalog name entered has either unsupported firmware packages
+ # or same version installed on the server."
+ - "'The specified user credentials necessary for downloading an update package were not correct.' in idrac_firmware_out.msg"
- name: Update firmware from repository on a HTTPS via parameter proxy Share with invalid proxy_uname
ansible.builtin.import_role:
name: "idrac_firmware"
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
- share_name: "{{ lookup('env', 'httpsproxy') }}"
+ share_name: "{{ lookup('env', 'httpsshare') }}"
share_user: "{{ lookup('env', 'shareuser') }}"
share_password: "{{ lookup('env', 'sharepassword') }}"
reboot: true
@@ -166,10 +169,10 @@
proxy_support: "ParametersProxy"
proxy_server: "{{ lookup('env', 'proxyserver') }}"
proxy_type: "HTTP"
- proxy_port: 3128
- proxy_uname: "invalidUname"
- proxy_passwd: "{{ lookup('env', 'proxypass') }}"
- catalog_file_name: "Catalog.xml"
+ proxy_port: "{{ lookup('env', 'proxyport') }}"
+ proxy_uname: "{{ lookup('env', 'proxy_username') }}"
+ proxy_passwd: "{{ lookup('env', 'proxy_password') }}"
+ catalog_file_name: "catalog.xml"
- name: "Verifying update firmware from repository on a HTTPS via parameter proxy share with invalid proxy_uname"
ansible.builtin.assert:
@@ -181,11 +184,11 @@
ansible.builtin.import_role:
name: "idrac_firmware"
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
- share_name: "{{ lookup('env', 'httpsproxy') }}"
+ share_name: "{{ lookup('env', 'httpsshare') }}"
share_user: "{{ lookup('env', 'shareuser') }}"
share_password: "{{ lookup('env', 'sharepassword') }}"
reboot: true
@@ -194,13 +197,17 @@
proxy_support: "ParametersProxy"
proxy_server: "{{ lookup('env', 'proxyserver') }}"
proxy_type: "HTTP"
- proxy_port: 3128
- proxy_uname: "{{ lookup('env', 'proxyuname') }}"
+ proxy_port: "{{ lookup('env', 'proxyport') }}"
+ proxy_uname: "{{ lookup('env', 'proxy_username') }}"
proxy_passwd: "invalidPasswd"
- catalog_file_name: "Catalog.xml"
+ catalog_file_name: "catalog.xml"
+ ignore_errors: true
+ register: idrac_firmware_result
- name: "Verifying update firmware from repository on a HTTPS via parameter proxy share with invalid proxy_passwd"
ansible.builtin.assert:
that:
- - idrac_firmware_out.msg == "Unable to complete the operation because the catalog name entered has either unsupported firmware packages
- or same version installed on the server."
+ # - idrac_firmware_out.msg == "Unable to complete the operation because the catalog name entered has either unsupported firmware packages
+ # or same version installed on the server."
+ - "'Unable to transfer file' in idrac_firmware_out.msg"
+ - "'because of some unknown reasons.' in idrac_firmware_out.msg"
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/nfs_share/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/nfs_share/converge.yml
index 89e55838c..d9d496f3a 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/nfs_share/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_firmware/molecule/nfs_share/converge.yml
@@ -7,9 +7,9 @@
ansible.builtin.import_role:
name: idrac_firmware
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
share_name: "{{ lookup('env', 'nfsshare') }}"
validate_certs: false
reboot: true
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/backplane/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/backplane/converge.yml
index adb6fcf5f..9aab189c2 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/backplane/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/backplane/converge.yml
@@ -4,9 +4,9 @@
connection: local
gather_facts: true
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
target:
- PCIeSSDBackPlane
@@ -23,22 +23,44 @@
- 404
- -1
idrac_gather_facts_uri_return_content: true
- diff_data: {}
- exclude_keys: []
tasks:
+ - name: Collecting PCIeSSDBackPlane information from API
+ ansible.builtin.uri:
+ url: "https://{{ hostname }}/redfish/v1/Chassis/Oem/Dell/DellPCIeSSDBackPlanes"
+ validate_certs: "{{ validate_certs }}"
+ ca_path: "{{ ca_path | default(omit) }}"
+ method: "{{ idrac_gather_facts_uri_method }}"
+ user: "{{ username }}"
+ password: "{{ password }}"
+ headers: "{{ idrac_gather_facts_uri_headers }}"
+ body_format: "{{ idrac_gather_facts_uri_body_format }}"
+ status_code: "{{ idrac_gather_facts_uri_status_code }}"
+ return_content: "{{ idrac_gather_facts_uri_return_content }}"
+ register: backplane_result_url
+ no_log: true
+
+ - name: Validate whether PCIeSSDBackPlane information exists
+ ansible.builtin.assert:
+ that:
+ - "{{ backplane_result_url.json.Members | length > 0 }}"
+ fail_msg: "PCIeSSDBackPlane information does not exist"
+
+ - name: Set PCIeSSDBackPlane facts
+ ansible.builtin.set_fact:
+ api_response: "{{ backplane_result_url.json.Members | ansible.utils.remove_keys(target=['@odata.context', '@odata.id', '@odata.type']) }}"
+
- name: Gather Facts for the PCIeSSDBackPlane component
ansible.builtin.include_role:
name: "idrac_gather_facts"
- - name: Assert backplane dict for length
+ - name: Check whether output differs
+ ansible.builtin.set_fact:
+ result_diff: "{{ backplane | symmetric_difference(api_response) }}"
+
+ - name: Assert the differences in List
ansible.builtin.assert:
+ fail_msg: "The response from the role does not match"
+ success_msg: "The response from the role matches"
that:
- - "{{ backplane | length > 0 }}"
-
- - name: Call assertion
- ansible.builtin.include_tasks: ../../tests/asserts/backplane_assert.yml
- with_items: "{{ backplane }}"
- loop_control:
- loop_var: backplane_data
- when: backplane | length > 0
+ - "{{ (result_diff | length) == 0 }}"
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/bios/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/bios/converge.yml
index 491d49d42..6d8bf0b66 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/bios/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/bios/converge.yml
@@ -3,9 +3,9 @@
hosts: all
gather_facts: false
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
target:
- BIOS
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/controller/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/controller/converge.yml
index e7059f6a7..8e6ade139 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/controller/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/controller/converge.yml
@@ -3,9 +3,9 @@
hosts: all
gather_facts: false
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
target:
- Controller
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/default/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/default/converge.yml
index 3d3f3ed1d..58d622a57 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/default/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/default/converge.yml
@@ -3,9 +3,9 @@
hosts: all
gather_facts: false
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
target:
- System
@@ -68,10 +68,8 @@
- name: Response filter
ansible.builtin.set_fact:
api_response:
- "{{ system_result.json | json_query(jquery) | combine(os_result.json.Attributes) |
+ "{{ system_result.json.Oem.Dell.DellSystem | combine(os_result.json.Attributes) |
ansible.utils.remove_keys(target=['@odata.context', '@odata.id', '@odata.type']) }}"
- vars:
- jquery: "Oem.Dell.DellSystem"
- name: Set the keys diff
ansible.builtin.set_fact:
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/enclosure/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/enclosure/converge.yml
index f83d84ac7..c43f9390a 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/enclosure/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/enclosure/converge.yml
@@ -4,9 +4,9 @@
connection: local
gather_facts: true
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
target:
- Enclosure
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/enclosureemm/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/enclosureemm/converge.yml
index 9bddda5a7..e240180b1 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/enclosureemm/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/enclosureemm/converge.yml
@@ -3,9 +3,9 @@
hosts: all
gather_facts: false
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
target:
- EnclosureEMM
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/fan/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/fan/converge.yml
index bdd47a873..7b17ce7dd 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/fan/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/fan/converge.yml
@@ -3,9 +3,9 @@
hosts: all
gather_facts: false
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
target:
- Fan
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/firmware/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/firmware/converge.yml
index 88047ce5c..a1fa26117 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/firmware/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/firmware/converge.yml
@@ -4,9 +4,9 @@
connection: local
gather_facts: true
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
target:
- Firmware
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/hostnic/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/hostnic/converge.yml
index 1ab1f4911..c7dff509f 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/hostnic/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/hostnic/converge.yml
@@ -3,9 +3,9 @@
hosts: all
gather_facts: false
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
target:
- HostNIC
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/idrac/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/idrac/converge.yml
index 2b8788274..19e8bf7f5 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/idrac/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/idrac/converge.yml
@@ -4,9 +4,9 @@
connection: local
gather_facts: true
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
target:
- IDRAC
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/license/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/license/converge.yml
index b1fe0419b..8e5609448 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/license/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/license/converge.yml
@@ -3,9 +3,9 @@
hosts: all
gather_facts: false
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
target:
- License
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/memory/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/memory/converge.yml
index 5a3909481..b21c6ecdc 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/memory/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/memory/converge.yml
@@ -3,9 +3,9 @@
hosts: all
gather_facts: false
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
target:
- Memory
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/negative/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/negative/converge.yml
index b191098a8..6062027e6 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/negative/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/negative/converge.yml
@@ -8,8 +8,8 @@
name: idrac_gather_facts
vars:
hostname: "randomHostname"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
ignore_errors: true
ignore_unreachable: true
@@ -24,9 +24,9 @@
ansible.builtin.import_role:
name: idrac_gather_facts
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
username: "randomUsername"
- password: "{{ lookup('env', 'password') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
target: ["Bios"]
ignore_errors: true
@@ -42,8 +42,8 @@
ansible.builtin.import_role:
name: idrac_gather_facts
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
password: "randomPassword"
validate_certs: false
target: ["Bios"]
@@ -56,30 +56,35 @@
that:
- idrac_gather_facts_connection.status == -1
+ - name: Set computer system id
+ ansible.builtin.set_fact:
+ system_id: "randomSystemID"
+
- name: To check for wrong system id
ansible.builtin.import_role:
name: idrac_gather_facts
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
- computer_system_id: "randomSystemID"
+ computer_system_id: "{{ system_id }}"
ignore_errors: true
register: idrac_gather_facts_error
- name: Asserting after performing operation with invalid system id
ansible.builtin.assert:
that:
- - "{{ computer_system_id not in system_ids }}"
+ - "{{ computer_system_id is not in system_ids}}"
+ when: system_ids is defined
- name: To check for wrong manager id
ansible.builtin.import_role:
name: idrac_gather_facts
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
manager_id: "randomManagerID"
target: ["Firmware"]
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/nic/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/nic/converge.yml
index 70d00f200..c12fee4af 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/nic/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/nic/converge.yml
@@ -3,9 +3,9 @@
hosts: all
gather_facts: false
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
target:
- NIC
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/passensor/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/passensor/converge.yml
index 93de081d3..c4d86a62b 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/passensor/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/passensor/converge.yml
@@ -3,9 +3,9 @@
hosts: all
gather_facts: false
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
target:
- PresenceAndStatusSensor
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/pciedevice/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/pciedevice/converge.yml
index b87459d13..924a8fd39 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/pciedevice/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/pciedevice/converge.yml
@@ -3,9 +3,9 @@
hosts: all
gather_facts: false
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
target:
- PCIeDevice
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/physicaldisk/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/physicaldisk/converge.yml
index a5b66a7f9..ef2414535 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/physicaldisk/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/physicaldisk/converge.yml
@@ -3,9 +3,9 @@
hosts: all
gather_facts: false
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
target:
- PhysicalDisk
@@ -27,18 +27,60 @@
api_system: "/redfish/v1/Systems/System.Embedded.1"
tasks:
+ - name: Get Storage information.
+ ansible.builtin.uri: &uri_params
+ url: "https://{{ hostname }}{{ api_system }}/Storage"
+ validate_certs: "{{ validate_certs }}"
+ ca_path: "{{ ca_path | default(omit) }}"
+ method: "{{ idrac_gather_facts_uri_method }}"
+ user: "{{ username }}"
+ password: "{{ password }}"
+ headers: "{{ idrac_gather_facts_uri_headers }}"
+ body_format: "{{ idrac_gather_facts_uri_body_format }}"
+ status_code: "{{ idrac_gather_facts_uri_status_code }}"
+ return_content: "{{ idrac_gather_facts_uri_return_content }}"
+ register: idrac_gather_facts_controllers_result
+
+ - name: Get all storage controller ids.
+ ansible.builtin.set_fact:
+ storage_ids_list: "{{ idrac_gather_facts_controllers_result.json.Members | map('dict2items') | flatten | map(attribute='value') }}"
+
+ - name: Get physical disk information using API.
+ ansible.builtin.uri:
+ url: "https://{{ hostname }}{{ item }}?$expand=*($levels=1)"
+ <<: *uri_params
+ loop: "{{ storage_ids_list }}"
+ no_log: true
+ register: idrac_gather_facts_disk_result
+
+ - name: Count the number of drives in drives_result.results
+ ansible.builtin.set_fact:
+ drives_count: "{{ idrac_gather_facts_disk_result.results | map(attribute='json.drives') | list | length }}"
+
+ - name: Validate whether physical disk information exists
+ ansible.builtin.assert:
+ that:
+ - "{{ drives_count | int > 0 }}"
+ fail_msg: "Physical Disk information does not exist"
+
+ - name: Set Physical Disk facts
+ ansible.builtin.set_fact:
+ api_response:
+ "{{ disk_result.results | selectattr('json', 'defined') | map(attribute='json') | selectattr('Drives', 'defined') |
+ map(attribute='Drives') | flatten | ansible.utils.remove_keys(target=['@odata.context', '@odata.id', '@odata.type',
+ 'Actions', 'Assembly', 'Links', 'DellDriveSMARTAttributes', 'DellNVMeSMARTAttributes', 'Operations@odata.count']) }}"
+
- name: Gather Facts for the Physical Disk component
ansible.builtin.include_role:
name: "idrac_gather_facts"
- - name: Assert physical disk dict for length
+ - name: Check whether output differs
+ ansible.builtin.set_fact:
+ result_diff: "{{ physical_disk | symmetric_difference(api_response) }}"
+
+ - name: Assert the differences in List
ansible.builtin.assert:
+ fail_msg: "The response from the role does not match"
+ success_msg: "The response from the role matches"
that:
- - "{{ physical_disk | length > 0 }}"
-
- - name: Call assertion
- ansible.builtin.include_tasks: ../../tests/asserts/physicaldisk_assert.yml
- with_items: "{{ physical_disk }}"
- loop_control:
- loop_var: pd_data
- when: physical_disk | length > 0
+ - "{{ (result_diff | length) == 0 }}"
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/powersupply/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/powersupply/converge.yml
index 1fdb5a278..0f648b875 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/powersupply/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/powersupply/converge.yml
@@ -3,9 +3,9 @@
hosts: all
gather_facts: false
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
target:
- PowerSupply
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/secureboot/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/secureboot/converge.yml
index e4585165e..88fdc4ea6 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/secureboot/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/secureboot/converge.yml
@@ -3,9 +3,9 @@
hosts: all
gather_facts: false
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
target:
- SecureBoot
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/sensorsbattery/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/sensorsbattery/converge.yml
index feee7473e..ab19c7cd2 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/sensorsbattery/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/sensorsbattery/converge.yml
@@ -3,9 +3,9 @@
hosts: all
gather_facts: false
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
target:
- Sensors_Battery
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/sensorsintrusion/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/sensorsintrusion/converge.yml
index 274319cff..4fca00ba1 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/sensorsintrusion/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/sensorsintrusion/converge.yml
@@ -3,9 +3,9 @@
hosts: all
gather_facts: false
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
target:
- Sensors_Intrusion
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/sensorsvoltage/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/sensorsvoltage/converge.yml
index 16435ef11..378022256 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/sensorsvoltage/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/sensorsvoltage/converge.yml
@@ -3,9 +3,9 @@
hosts: all
gather_facts: false
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
target:
- Sensors_Voltage
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/systemmetrics/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/systemmetrics/converge.yml
index acd31a108..418aa2b78 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/systemmetrics/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/systemmetrics/converge.yml
@@ -3,9 +3,9 @@
hosts: all
gather_facts: false
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
target:
- SystemMetrics
@@ -88,13 +88,9 @@
register: response_power_supply
no_log: true
- - name: Set query
- ansible.builtin.set_fact:
- jq: "[*].Id"
-
- name: Get Power Supply Metrics ids
ansible.builtin.set_fact:
- psu_ids: "{{ power_result.json.Members | json_query(jq) }}"
+ psu_ids: "{{ power_result.json.Members | map(attribute='Id') | list }}"
- name: Call assertion for Power metrics
ansible.builtin.include_tasks: ../../tests/asserts/psmetrics_assert.yml
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/virtualdisk/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/virtualdisk/converge.yml
index 27fd2b829..5c3486634 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/virtualdisk/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/molecule/virtualdisk/converge.yml
@@ -3,9 +3,9 @@
hosts: all
gather_facts: false
vars:
- hostname: "{{ lookup('env', 'hostname') }}"
- username: "{{ lookup('env', 'username') }}"
- password: "{{ lookup('env', 'password') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
target:
- VirtualDisk
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/backplane_assert.yml b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/backplane_assert.yml
deleted file mode 100644
index a4562f9e0..000000000
--- a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/backplane_assert.yml
+++ /dev/null
@@ -1,39 +0,0 @@
-- name: Get PCIeSSDBackPlanes information.
- ansible.builtin.uri:
- url: "https://{{ hostname }}/redfish/v1/Chassis/Oem/Dell/DellPCIeSSDBackPlanes/{{ backplane_data.Id }}"
- validate_certs: "{{ validate_certs }}"
- ca_path: "{{ ca_path | default(omit) }}"
- method: "{{ idrac_gather_facts_uri_method }}"
- user: "{{ username }}"
- password: "{{ password }}"
- headers: "{{ idrac_gather_facts_uri_headers }}"
- body_format: "{{ idrac_gather_facts_uri_body_format }}"
- status_code: "{{ idrac_gather_facts_uri_status_code }}"
- return_content: "{{ idrac_gather_facts_uri_return_content }}"
- register: backplane_result
- no_log: true
-
-- name: Set backplane facts
- ansible.builtin.set_fact:
- api_response: "{{ backplane_result.json | ansible.utils.remove_keys(target=['@odata.context', '@odata.id', '@odata.type']) }}"
-
-- name: Set the keys diff
- ansible.builtin.set_fact:
- diff_keys: "{{ backplane_data.keys() | list | symmetric_difference((api_response.keys() | list)) }}"
-
-- name: Set a Diff of dict
- ansible.builtin.set_fact:
- diff_data: "{{ diff_data | combine({item: backplane_data[item]}) }}"
- loop: "{{ backplane_data.keys() }}"
- when:
- - diff_keys | length == 0
- - backplane_data[item] != api_response[item]
- - item not in exclude_keys
-
-- name: Assert the difference in Keys
- ansible.builtin.assert:
- that:
- - "{{ (diff_keys | length) == 0 }}"
- - "{{ (diff_data | length) == 0 }}"
- fail_msg: "The response from the role does not match | Diff Keys : {{ diff_keys }} Diff Data : {{ diff_data }}"
- success_msg: "The response from the role matches | Diff Keys : {{ diff_keys }} Diff Data : {{ diff_data }}"
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/physicaldisk_assert.yml b/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/physicaldisk_assert.yml
deleted file mode 100644
index 76ec6624f..000000000
--- a/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/physicaldisk_assert.yml
+++ /dev/null
@@ -1,45 +0,0 @@
----
-- name: Get controller id
- ansible.builtin.set_fact:
- ctrl_id: "{{ pd_data.Id | split(':') | last }}"
-
-- name: Get Storage information.
- ansible.builtin.uri:
- url: "https://{{ hostname }}{{ api_system }}/Storage/{{ ctrl_id }}/Drives/{{ pd_data.Id }}"
- validate_certs: "{{ validate_certs }}"
- ca_path: "{{ ca_path | default(omit) }}"
- method: "{{ idrac_gather_facts_uri_method }}"
- user: "{{ username }}"
- password: "{{ password }}"
- headers: "{{ idrac_gather_facts_uri_headers }}"
- body_format: "{{ idrac_gather_facts_uri_body_format }}"
- status_code: "{{ idrac_gather_facts_uri_status_code }}"
- return_content: "{{ idrac_gather_facts_uri_return_content }}"
- no_log: true
- register: disk_result
-
-- name: Filter Physical Disk data
- ansible.builtin.set_fact:
- api_response: "{{ disk_result.json | ansible.utils.remove_keys(target=['@odata.context', '@odata.id', '@odata.type',
- 'Actions', 'Assembly', 'Links', 'DellDriveSMARTAttributes', 'DellNVMeSMARTAttributes', 'Operations@odata.count']) }}"
-
-- name: Set the keys diff
- ansible.builtin.set_fact:
- diff_keys: "{{ pd_data.keys() | list | symmetric_difference((api_response.keys() | list)) }}"
-
-- name: Set a Diff of dict
- ansible.builtin.set_fact:
- diff_data: "{{ diff_data | combine({item: pd_data[item]}) }}"
- loop: "{{ pd_data.keys() }}"
- when:
- - diff_keys | length == 0
- - pd_data[item] != api_response[item]
- - item not in exclude_keys
-
-- name: Assert the difference in Keys
- ansible.builtin.assert:
- that:
- - "{{ (diff_keys | length) == 0 }}"
- - "{{ (diff_data | length) == 0 }}"
- fail_msg: "The response from the role does not match | Diff Keys : {{ diff_keys }} Diff Data : {{ diff_data }}"
- success_msg: "The response from the role matches | Diff Keys : {{ diff_keys }} Diff Data : {{ diff_data }}"
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/cifs_share/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/cifs_share/converge.yml
index 29ff66275..df421143f 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/cifs_share/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/cifs_share/converge.yml
@@ -1,21 +1,32 @@
---
- name: Converge
hosts: all
+ vars:
+ share_input: &share_input
+ share_name: "{{ lookup('env', 'cifs_url') }}"
+ share_user: "{{ lookup('env', 'cifs_username') }}"
+ share_password: "{{ lookup('env', 'cifs_password') }}"
+ scp_file: "{{ lookup('env', 'cifs_filename') }}"
gather_facts: false
tasks:
+ - name: "Pre-requisites"
+ ansible.builtin.include_tasks:
+ file: "../resources/tests/export.yml"
+ vars:
+ _share_parameters:
+ <<: *share_input
+ tags: molecule-idempotence-notest
+
- name: "Importing SCP from CIFS with ALL components"
ansible.builtin.import_role:
name: "idrac_import_server_config_profile"
vars:
- hostname: "{{ lookup('env', 'HOSTNAME') }}"
- username: "{{ lookup('env', 'USERNAME') }}"
- password: "{{ lookup('env', 'PASSWORD') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
share_parameters:
- share_name: "{{ lookup('env', 'CIFS_URL') }}"
- share_user: "{{ lookup('env', 'CIFS_USERNAME') }}"
- share_password: "{{ lookup('env', 'CIFS_PASSWORD') }}"
- scp_file: "{{ lookup('env', 'cifs_filename') }}"
+ <<: *share_input
- name: Verifying Import SCP from CIFS with ALL components
ansible.builtin.assert:
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/cifs_share/molecule.yml b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/cifs_share/molecule.yml
index e69de29bb..fc17009ba 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/cifs_share/molecule.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/cifs_share/molecule.yml
@@ -0,0 +1,5 @@
+---
+provisioner:
+ name: ansible
+ playbooks:
+ cleanup: ../resources/tests/cleanup.yml
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/cifs_share/prepare.yml b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/cifs_share/prepare.yml
deleted file mode 100644
index 5fadc24b5..000000000
--- a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/cifs_share/prepare.yml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-- name: Cleanup
- hosts: all
- gather_facts: false
- tasks:
- - name: Cleanup config
- ansible.builtin.include_tasks: ../resources/tests/prepare.yml
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/default/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/default/converge.yml
index c0ae89edf..46f902d78 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/default/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/default/converge.yml
@@ -7,14 +7,14 @@
ansible.builtin.import_role:
name: "idrac_import_server_config_profile"
vars:
- hostname: "{{ lookup('env', 'HOSTNAME') }}"
- username: "{{ lookup('env', 'USERNAME') }}"
- password: "{{ lookup('env', 'PASSWORD') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
target: ['IDRAC']
share_parameters:
- share_user: "{{ lookup('env', 'USERNAME') }}"
- share_password: "{{ lookup('env', 'PASSWORD') }}"
+ share_user: "{{ lookup('env', 'http_username') }}"
+ share_password: "{{ lookup('env', 'http_password') }}"
scp_file: "{{ lookup('env', 'http_filename') }}"
ignore_errors: true
register: idrac_import_server_config_profile_status
@@ -28,15 +28,15 @@
ansible.builtin.import_role:
name: "idrac_import_server_config_profile"
vars:
- hostname: "{{ lookup('env', 'HOSTNAME') }}"
- username: "{{ lookup('env', 'USERNAME') }}"
- password: "{{ lookup('env', 'PASSWORD') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
target: ['IDRAC']
share_parameters:
- share_name: "{{ lookup('env', 'HTTP_URL') }}"
- share_user: "{{ lookup('env', 'USERNAME') }}"
- share_password: "{{ lookup('env', 'PASSWORD') }}"
+ share_name: "{{ lookup('env', 'http_url') }}"
+ share_user: "{{ lookup('env', 'http_username') }}"
+ share_password: "{{ lookup('env', 'http_password') }}"
ignore_errors: true
register: idrac_import_server_config_profile_status
@@ -50,14 +50,14 @@
ansible.builtin.import_role:
name: "idrac_import_server_config_profile"
vars:
- hostname: "{{ lookup('env', 'HOSTNAME') }}"
- username: "{{ lookup('env', 'USERNAME') }}"
- password: "{{ lookup('env', 'PASSWORD') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
share_parameters:
- share_name: "{{ lookup('env', 'CIFS_URL') }}"
- share_user: "{{ lookup('env', 'CIFS_USERNAME') }}"
- share_password: "{{ lookup('env', 'CIFS_PASSWORD') }}"
+ share_name: "{{ lookup('env', 'cifs_url') }}"
+ share_user: "{{ lookup('env', 'cifs_username') }}"
+ share_password: "{{ lookup('env', 'cifs_password') }}"
scp_file: "invalid_file.xml"
ignore_errors: true
register: idrac_import_server_config_profile_status
@@ -76,14 +76,14 @@
ansible.builtin.import_role:
name: "idrac_import_server_config_profile"
vars:
- hostname: "{{ lookup('env', 'HOSTNAME') }}"
- username: "{{ lookup('env', 'USERNAME') }}"
- password: "{{ lookup('env', 'PASSWORD') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
share_parameters:
share_name: "192.168.0.1:/cifsshare"
- share_user: "{{ lookup('env', 'CIFS_USERNAME') }}"
- share_password: "{{ lookup('env', 'CIFS_PASSWORD') }}"
+ share_user: "{{ lookup('env', 'cifs_username') }}"
+ share_password: "{{ lookup('env', 'cifs_password') }}"
scp_file: "{{ lookup('env', 'cifs_filename') }}"
ignore_errors: true
register: idrac_import_server_config_profile_status
@@ -99,13 +99,13 @@
name: "idrac_import_server_config_profile"
vars:
hostname: "randomHostname"
- username: "{{ lookup('env', 'USERNAME') }}"
- password: "{{ lookup('env', 'PASSWORD') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
share_parameters:
- share_name: "{{ lookup('env', 'CIFS_URL') }}"
- share_user: "{{ lookup('env', 'CIFS_USERNAME') }}"
- share_password: "{{ lookup('env', 'CIFS_PASSWORD') }}"
+ share_name: "{{ lookup('env', 'cifs_url') }}"
+ share_user: "{{ lookup('env', 'cifs_username') }}"
+ share_password: "{{ lookup('env', 'cifs_password') }}"
scp_file: "{{ lookup('env', 'cifs_filename') }}"
ignore_errors: true
ignore_unreachable: true
@@ -121,14 +121,14 @@
ansible.builtin.import_role:
name: "idrac_import_server_config_profile"
vars:
- hostname: "{{ lookup('env', 'HOSTNAME') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
username: "WrongUsername123"
- password: "{{ lookup('env', 'PASSWORD') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
share_parameters:
- share_name: "{{ lookup('env', 'CIFS_URL') }}"
- share_user: "{{ lookup('env', 'CIFS_USERNAME') }}"
- share_password: "{{ lookup('env', 'CIFS_PASSWORD') }}"
+ share_name: "{{ lookup('env', 'cifs_url') }}"
+ share_user: "{{ lookup('env', 'cifs_username') }}"
+ share_password: "{{ lookup('env', 'cifs_password') }}"
scp_file: "{{ lookup('env', 'cifs_filename') }}"
ignore_errors: true
ignore_unreachable: true
@@ -143,14 +143,14 @@
ansible.builtin.import_role:
name: "idrac_import_server_config_profile"
vars:
- hostname: "{{ lookup('env', 'HOSTNAME') }}"
- username: "{{ lookup('env', 'USERNAME') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
password: "WrongPassword@123"
validate_certs: false
share_parameters:
- share_name: "{{ lookup('env', 'CIFS_URL') }}"
- share_user: "{{ lookup('env', 'CIFS_USERNAME') }}"
- share_password: "{{ lookup('env', 'CIFS_PASSWORD') }}"
+ share_name: "{{ lookup('env', 'cifs_url') }}"
+ share_user: "{{ lookup('env', 'cifs_username') }}"
+ share_password: "{{ lookup('env', 'cifs_password') }}"
scp_file: "{{ lookup('env', 'cifs_filename') }}"
ignore_errors: true
ignore_unreachable: true
@@ -165,15 +165,15 @@
ansible.builtin.import_role:
name: "idrac_import_server_config_profile"
vars:
- hostname: "{{ lookup('env', 'HOSTNAME') }}"
- username: "{{ lookup('env', 'USERNAME') }}"
- password: "{{ lookup('env', 'PASSWORD') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
target: ['idrac']
share_parameters:
- share_name: "{{ lookup('env', 'HTTP_URL') }}"
- share_user: "{{ lookup('env', 'HTTP_USERNAME') }}"
- share_password: "{{ lookup('env', 'HTTP_PASSWORD') }}"
+ share_name: "{{ lookup('env', 'http_url') }}"
+ share_user: "{{ lookup('env', 'http_username') }}"
+ share_password: "{{ lookup('env', 'http_password') }}"
scp_file: "{{ lookup('env', 'http_filename') }}"
ignore_errors: true
register: idrac_import_server_config_profile_status
@@ -188,15 +188,15 @@
# ansible.builtin.import_role:
# name: "idrac_import_server_config_profile"
# vars:
- # hostname: "{{ lookup('env', 'HOSTNAME') }}"
- # username: "{{ lookup('env', 'USERNAME') }}"
- # password: "{{ lookup('env', 'PASSWORD') }}"
+ # hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ # username: "{{ lookup('env', 'IDRAC_USER') }}"
+ # password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
# validate_certs: false
# target: ['IDRAC']
# share_parameters:
- # share_name: "{{ lookup('env', 'HTTP_URL') }}"
+ # share_name: "{{ lookup('env', 'http_url') }}"
# share_user: "WrongUsername123"
- # share_password: "{{ lookup('env', 'HTTP_PASSWORD') }}"
+ # share_password: "{{ lookup('env', 'http_password') }}"
# scp_file: "{{ lookup('env', 'http_filename') }}"
# ignore_errors: true
# register: idrac_import_server_config_profile_status
@@ -217,14 +217,14 @@
# ansible.builtin.import_role:
# name: "idrac_import_server_config_profile"
# vars:
- # hostname: "{{ lookup('env', 'HOSTNAME') }}"
- # username: "{{ lookup('env', 'USERNAME') }}"
- # password: "{{ lookup('env', 'PASSWORD') }}"
+ # hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ # username: "{{ lookup('env', 'IDRAC_USER') }}"
+ # password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
# validate_certs: false
# target: ['IDRAC']
# share_parameters:
- # share_name: "{{ lookup('env', 'HTTP_URL') }}"
- # share_user: "{{ lookup('env', 'USERNAME') }}"
+ # share_name: "{{ lookup('env', 'http_url') }}"
+ # share_user: "{{ lookup('env', 'http_username') }}"
# share_password: "WrongPassword@123"
# scp_file: "{{ lookup('env', 'http_filename') }}"
# ignore_errors: true
@@ -241,14 +241,14 @@
ansible.builtin.import_role:
name: "idrac_import_server_config_profile"
vars:
- hostname: "{{ lookup('env', 'HOSTNAME') }}"
- username: "{{ lookup('env', 'USERNAME') }}"
- password: "{{ lookup('env', 'PASSWORD') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
target: ['IDRAC']
share_parameters:
share_name: None
- share_user: "{{ lookup('env', 'USERNAME') }}"
+ share_user: "{{ lookup('env', 'http_username') }}"
share_password: "WrongPassword@123"
scp_file: "{{ lookup('env', 'http_filename') }}"
ignore_errors: true
@@ -263,15 +263,15 @@
ansible.builtin.import_role:
name: "idrac_import_server_config_profile"
vars:
- hostname: "{{ lookup('env', 'HOSTNAME') }}"
- username: "{{ lookup('env', 'USERNAME') }}"
- password: "{{ lookup('env', 'PASSWORD') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
target: ['ALL']
share_parameters:
- share_name: "{{ lookup('env', 'HTTP_URL') }}"
- share_user: "{{ lookup('env', 'HTTP_USERNAME') }}"
- share_password: "{{ lookup('env', 'HTTP_PASSWORD') }}"
+ share_name: "{{ lookup('env', 'http_url') }}"
+ share_user: "{{ lookup('env', 'http_username') }}"
+ share_password: "{{ lookup('env', 'http_password') }}"
scp_file: "{{ lookup('env', 'http_filename') }}"
proxy_support: true
ignore_errors: true
@@ -287,21 +287,21 @@
# ansible.builtin.import_role:
# name: "idrac_import_server_config_profile"
# vars:
- # hostname: "{{ lookup('env', 'HOSTNAME') }}"
- # username: "{{ lookup('env', 'USERNAME') }}"
- # password: "{{ lookup('env', 'PASSWORD') }}"
+ # hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ # username: "{{ lookup('env', 'IDRAC_USER') }}"
+ # password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
# validate_certs: false
# target: ['ALL']
# share_parameters:
- # share_name: "{{ lookup('env', 'HTTP_URL') }}"
- # share_user: "{{ lookup('env', 'HTTP_USERNAME') }}"
- # share_password: "{{ lookup('env', 'HTTP_PASSWORD') }}"
+ # share_name: "{{ lookup('env', 'http_url') }}"
+ # share_user: "{{ lookup('env', 'http_username') }}"
+ # share_password: "{{ lookup('env', 'http_password') }}"
# scp_file: "{{ lookup('env', 'http_filename') }}"
# proxy_support: true
# proxy_type: http
# proxy_server: "randomProxyServer"
- # proxy_port: "{{ lookup('env', 'PROXY_PORT') }}"
- # proxy_password: "{{ lookup('env', 'PROXY_PASSWORD') }}"
+ # proxy_port: "{{ lookup('env', 'proxy_port') }}"
+ # proxy_password: "{{ lookup('env', 'proxy_password') }}"
# ignore_errors: true
# register: idrac_import_server_config_profile_status
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share/converge.yml
index f9761ebc1..6ab64e12b 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share/converge.yml
@@ -1,23 +1,33 @@
---
- name: Converge
hosts: all
+ vars:
+ share_input: &share_input
+ share_name: "{{ lookup('env', 'http_url') }}"
+ share_user: "{{ lookup('env', 'http_username') }}"
+ share_password: "{{ lookup('env', 'http_password') }}"
+ scp_file: "{{ lookup('env', 'http_filename') }}"
gather_facts: false
tasks:
+ - name: "Pre-requisites"
+ ansible.builtin.include_tasks:
+ file: "../resources/tests/export.yml"
+ vars:
+ _share_parameters:
+ <<: *share_input
+ tags: molecule-idempotence-notest
- name: "Importing SCP from HTTPS"
ansible.builtin.import_role:
name: "idrac_import_server_config_profile"
vars:
- hostname: "{{ lookup('env', 'HOSTNAME') }}"
- username: "{{ lookup('env', 'USERNAME') }}"
- password: "{{ lookup('env', 'PASSWORD') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
target: "RAID"
share_parameters:
- share_name: "{{ lookup('env', 'HTTP_URL') }}"
- share_user: "{{ lookup('env', 'HTTP_USERNAME') }}"
- share_password: "{{ lookup('env', 'HTTP_PASSWORD') }}"
- scp_file: "{{ lookup('env', 'http_filename') }}"
+ <<: *share_input
when: not ansible_check_mode
- name: Verifying Import SCP from HTTP with in normal mode
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share/molecule.yml b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share/molecule.yml
index e69de29bb..fc17009ba 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share/molecule.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share/molecule.yml
@@ -0,0 +1,5 @@
+---
+provisioner:
+ name: ansible
+ playbooks:
+ cleanup: ../resources/tests/cleanup.yml
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share/prepare.yml b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share/prepare.yml
deleted file mode 100644
index 5fadc24b5..000000000
--- a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share/prepare.yml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-- name: Cleanup
- hosts: all
- gather_facts: false
- tasks:
- - name: Cleanup config
- ansible.builtin.include_tasks: ../resources/tests/prepare.yml
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_proxy_parameters/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_proxy_parameters/converge.yml
index a0348544a..71d891f10 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_proxy_parameters/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_proxy_parameters/converge.yml
@@ -1,27 +1,38 @@
---
- name: Converge
hosts: all
+ vars:
+ share_input: &share_input
+ share_name: "{{ lookup('env', 'http_url') }}"
+ share_user: "{{ lookup('env', 'http_username') }}"
+ share_password: "{{ lookup('env', 'http_password') }}"
+ scp_file: "{{ lookup('env', 'http_filename') }}"
+ proxy_support: true
+ proxy_type: http
+ proxy_server: "{{ lookup('env', 'proxy_server') }}"
+ proxy_username: "{{ lookup('env', 'proxy_username') }}"
+ proxy_port: "{{ lookup('env', 'proxy_port') }}"
+ proxy_password: "{{ lookup('env', 'proxy_password') }}"
gather_facts: false
tasks:
+ - name: "Pre-requisites"
+ ansible.builtin.include_tasks:
+ file: "../resources/tests/export.yml"
+ vars:
+ _share_parameters:
+ <<: *share_input
+ tags: molecule-idempotence-notest
+
- name: "Importing SCP from HTTP with proxy parameters"
ansible.builtin.import_role:
name: "idrac_import_server_config_profile"
vars:
- hostname: "{{ lookup('env', 'HOSTNAME') }}"
- username: "{{ lookup('env', 'USERNAME') }}"
- password: "{{ lookup('env', 'PASSWORD') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
share_parameters:
- share_name: "{{ lookup('env', 'HTTP_URL') }}"
- share_user: "{{ lookup('env', 'HTTP_USERNAME') }}"
- share_password: "{{ lookup('env', 'HTTP_PASSWORD') }}"
- scp_file: "{{ lookup('env', 'http_filename') }}"
- proxy_support: true
- proxy_type: http
- proxy_server: "{{ lookup('env', 'PROXY_SERVER') }}"
- proxy_port: "{{ lookup('env', 'PROXY_PORT') }}"
- proxy_username: "{{ lookup('env', 'PROXY_USER') }}"
- proxy_password: "{{ lookup('env', 'PROXY_PASSWORD') }}"
+ <<: *share_input
when: not ansible_check_mode
- name: Verifying Import SCP from HTTP with proxy parameters in normal mode
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_proxy_parameters/molecule.yml b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_proxy_parameters/molecule.yml
index e69de29bb..fc17009ba 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_proxy_parameters/molecule.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_proxy_parameters/molecule.yml
@@ -0,0 +1,5 @@
+---
+provisioner:
+ name: ansible
+ playbooks:
+ cleanup: ../resources/tests/cleanup.yml
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_proxy_parameters/prepare.yml b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_proxy_parameters/prepare.yml
deleted file mode 100644
index 5fadc24b5..000000000
--- a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_proxy_parameters/prepare.yml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-- name: Cleanup
- hosts: all
- gather_facts: false
- tasks:
- - name: Cleanup config
- ansible.builtin.include_tasks: ../resources/tests/prepare.yml
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_showerror_certificate_warning/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_showerror_certificate_warning/converge.yml
index b96730d75..f49f28438 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_showerror_certificate_warning/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_showerror_certificate_warning/converge.yml
@@ -2,26 +2,37 @@
- name: Converge
hosts: all
gather_facts: false
+ vars:
+ share_input: &share_input
+ share_name: "{{ lookup('env', 'http_url') }}"
+ share_user: "{{ lookup('env', 'http_username') }}"
+ share_password: "{{ lookup('env', 'http_password') }}"
+ scp_file: "{{ lookup('env', 'http_filename') }}"
+ proxy_support: true
+ proxy_server: "{{ lookup('env', 'proxy_server') }}"
+ proxy_username: "{{ lookup('env', 'proxy_username') }}"
+ proxy_port: "{{ lookup('env', 'proxy_port') }}"
+ proxy_password: "{{ lookup('env', 'proxy_password') }}"
+ ignore_certificate_warning: showerror
tasks:
+ - name: "Pre-requisites"
+ ansible.builtin.include_tasks:
+ file: "../resources/tests/export.yml"
+ vars:
+ _share_parameters:
+ <<: *share_input
+ tags: molecule-idempotence-notest
+
- name: "Importing SCP from HTTPS with ignore_certificate_warning as showerror"
ansible.builtin.import_role:
name: "idrac_import_server_config_profile"
vars:
- hostname: "{{ lookup('env', 'HOSTNAME') }}"
- username: "{{ lookup('env', 'USERNAME') }}"
- password: "{{ lookup('env', 'PASSWORD') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
share_parameters:
- share_name: "{{ lookup('env', 'HTTP_URL') }}"
- share_user: "{{ lookup('env', 'HTTP_USERNAME') }}"
- share_password: "{{ lookup('env', 'HTTP_PASSWORD') }}"
- scp_file: "{{ lookup('env', 'http_filename') }}"
- proxy_support: true
- proxy_server: "{{ lookup('env', 'PROXY_SERVER') }}"
- proxy_port: "{{ lookup('env', 'PROXY_PORT') }}"
- proxy_username: "{{ lookup('env', 'PROXY_USER') }}"
- proxy_password: "{{ lookup('env', 'PROXY_PASSWORD') }}"
- ignore_certificate_warning: showerror
+ <<: *share_input
when: not ansible_check_mode
- name: Verifying Import SCP from HTTP with ignore_certificate_warning as showerror in normal mode
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_showerror_certificate_warning/prepare.yml b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_showerror_certificate_warning/prepare.yml
deleted file mode 100644
index 5fadc24b5..000000000
--- a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_showerror_certificate_warning/prepare.yml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-- name: Cleanup
- hosts: all
- gather_facts: false
- tasks:
- - name: Cleanup config
- ansible.builtin.include_tasks: ../resources/tests/prepare.yml
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share/converge.yml
index 7981a536c..cb61a0947 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share/converge.yml
@@ -1,21 +1,32 @@
---
- name: Converge
hosts: all
+ vars:
+ share_input: &share_input
+ share_name: "{{ lookup('env', 'https_url') }}"
+ share_user: "{{ lookup('env', 'http_username') }}"
+ share_password: "{{ lookup('env', 'http_password') }}"
+ scp_file: "{{ lookup('env', 'https_filename') }}"
gather_facts: false
tasks:
+ - name: "Pre-requisites"
+ ansible.builtin.include_tasks:
+ file: "../resources/tests/export.yml"
+ vars:
+ _share_parameters:
+ <<: *share_input
+ tags: molecule-idempotence-notest
+
- name: "Importing SCP from HTTPS"
ansible.builtin.import_role:
name: "idrac_import_server_config_profile"
vars:
- hostname: "{{ lookup('env', 'HOSTNAME') }}"
- username: "{{ lookup('env', 'USERNAME') }}"
- password: "{{ lookup('env', 'PASSWORD') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
share_parameters:
- share_name: "{{ lookup('env', 'HTTPS_URL') }}"
- share_user: "{{ lookup('env', 'HTTPS_USERNAME') }}"
- share_password: "{{ lookup('env', 'HTTPS_PASSWORD') }}"
- scp_file: "{{ lookup('env', 'https_filename') }}"
+ <<: *share_input
when: not ansible_check_mode
- name: Verifying Import SCP from HTTPS in normal mode
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share/molecule.yml b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share/molecule.yml
index e69de29bb..fc17009ba 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share/molecule.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share/molecule.yml
@@ -0,0 +1,5 @@
+---
+provisioner:
+ name: ansible
+ playbooks:
+ cleanup: ../resources/tests/cleanup.yml
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share/prepare.yml b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share/prepare.yml
deleted file mode 100644
index 5fadc24b5..000000000
--- a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share/prepare.yml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-- name: Cleanup
- hosts: all
- gather_facts: false
- tasks:
- - name: Cleanup config
- ansible.builtin.include_tasks: ../resources/tests/prepare.yml
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share_with_proxy_parameters/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share_with_proxy_parameters/converge.yml
index 013505814..2f10bff1f 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share_with_proxy_parameters/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share_with_proxy_parameters/converge.yml
@@ -1,27 +1,38 @@
---
- name: Converge
hosts: all
+ vars:
+ share_input: &share_input
+ share_name: "{{ lookup('env', 'https_url') }}"
+ share_user: "{{ lookup('env', 'https_username') }}"
+ share_password: "{{ lookup('env', 'https_password') }}"
+ scp_file: "{{ lookup('env', 'https_filename') }}"
+ proxy_support: true
+ proxy_type: http
+ proxy_server: "{{ lookup('env', 'proxy_server') }}"
+ proxy_username: "{{ lookup('env', 'proxy_username') }}"
+ proxy_port: "{{ lookup('env', 'proxy_port') }}"
+ proxy_password: "{{ lookup('env', 'proxy_password') }}"
gather_facts: false
tasks:
+ - name: "Pre-requisites"
+ ansible.builtin.include_tasks:
+ file: "../resources/tests/export.yml"
+ vars:
+ _share_parameters:
+ <<: *share_input
+ tags: molecule-idempotence-notest
+
- name: "Importing SCP from HTTPS with proxy parameters"
ansible.builtin.import_role:
name: "idrac_import_server_config_profile"
vars:
- hostname: "{{ lookup('env', 'HOSTNAME') }}"
- username: "{{ lookup('env', 'USERNAME') }}"
- password: "{{ lookup('env', 'PASSWORD') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
share_parameters:
- share_name: "{{ lookup('env', 'HTTPS_URL') }}"
- share_user: "{{ lookup('env', 'HTTPS_USERNAME') }}"
- share_password: "{{ lookup('env', 'HTTPS_PASSWORD') }}"
- scp_file: "{{ lookup('env', 'https_filename') }}"
- proxy_support: true
- proxy_type: http
- proxy_server: "{{ lookup('env', 'PROXY_SERVER') }}"
- proxy_username: "{{ lookup('env', 'PROXY_USER') }}"
- proxy_port: "{{ lookup('env', 'PROXY_PORT') }}"
- proxy_password: "{{ lookup('env', 'PROXY_PASSWORD') }}"
+ <<: *share_input
when: not ansible_check_mode
- name: Verifying Import SCP from HTTPS with proxy parameters in normal mode
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share_with_proxy_parameters/molecule.yml b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share_with_proxy_parameters/molecule.yml
index e69de29bb..fc17009ba 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share_with_proxy_parameters/molecule.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share_with_proxy_parameters/molecule.yml
@@ -0,0 +1,5 @@
+---
+provisioner:
+ name: ansible
+ playbooks:
+ cleanup: ../resources/tests/cleanup.yml
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share_with_proxy_parameters/prepare.yml b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share_with_proxy_parameters/prepare.yml
deleted file mode 100644
index 5fadc24b5..000000000
--- a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share_with_proxy_parameters/prepare.yml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-- name: Cleanup
- hosts: all
- gather_facts: false
- tasks:
- - name: Cleanup config
- ansible.builtin.include_tasks: ../resources/tests/prepare.yml
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_buffer_json/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_buffer_json/converge.yml
index 3fbeec584..bbc8161cf 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_buffer_json/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_buffer_json/converge.yml
@@ -7,9 +7,9 @@
ansible.builtin.import_role:
name: idrac_import_server_config_profile
vars:
- hostname: "{{ lookup('env', 'HOSTNAME') }}"
- username: "{{ lookup('env', 'USERNAME') }}"
- password: "{{ lookup('env', 'PASSWORD') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
target:
- IDRAC
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_buffer_xml/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_buffer_xml/converge.yml
index bd956dc0c..3f7ef166a 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_buffer_xml/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_buffer_xml/converge.yml
@@ -7,9 +7,9 @@
ansible.builtin.import_role:
name: idrac_import_server_config_profile
vars:
- hostname: "{{ lookup('env', 'HOSTNAME') }}"
- username: "{{ lookup('env', 'USERNAME') }}"
- password: "{{ lookup('env', 'PASSWORD') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
target: ['IDRAC']
import_buffer: '<SystemConfiguration><Component FQDD="iDRAC.Embedded.1"><Attribute Name="Time.1#Timezone">CST6CDT</Attribute>
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_multiple_target/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_multiple_target/converge.yml
index 860e63b52..4e130f66a 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_multiple_target/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_multiple_target/converge.yml
@@ -1,23 +1,24 @@
---
- name: Converge
hosts: all
+ vars:
+ _target: ['NIC', 'IDRAC']
+ share_input: &share_input
+ share_name: "{{ lookup('env', 'nfs_url') }}"
+ scp_file: "{{ lookup('env', 'nfs_filename') }}"
gather_facts: false
tasks:
-
- name: "Importing SCP from NFS with multiple components"
ansible.builtin.import_role:
name: idrac_import_server_config_profile
vars:
- hostname: "{{ lookup('env', 'HOSTNAME') }}"
- username: "{{ lookup('env', 'USERNAME') }}"
- password: "{{ lookup('env', 'PASSWORD') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
- target:
- - 'NIC'
- - 'IDRAC'
+ target: "{{ _target }}"
share_parameters:
- share_name: "{{ lookup('env', 'NFS_URL') }}"
- scp_file: "{{ lookup('env', 'nfs_filename') }}"
+ <<: *share_input
shutdown_type: 'Forced'
end_host_power_state: 'On'
when: not ansible_check_mode
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_multiple_target/molecule.yml b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_multiple_target/molecule.yml
index e69de29bb..fc17009ba 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_multiple_target/molecule.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_multiple_target/molecule.yml
@@ -0,0 +1,5 @@
+---
+provisioner:
+ name: ansible
+ playbooks:
+ cleanup: ../resources/tests/cleanup.yml
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_multiple_target/prepare.yml b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_multiple_target/prepare.yml
deleted file mode 100644
index 5fadc24b5..000000000
--- a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_multiple_target/prepare.yml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-- name: Cleanup
- hosts: all
- gather_facts: false
- tasks:
- - name: Cleanup config
- ansible.builtin.include_tasks: ../resources/tests/prepare.yml
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/nfs_share/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/nfs_share/converge.yml
index bb839b38b..14d3de043 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/nfs_share/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/nfs_share/converge.yml
@@ -1,20 +1,30 @@
---
- name: Converge
hosts: all
+ vars:
+ share_input: &share_input
+ share_name: "{{ lookup('env', 'nfs_url') }}"
+ scp_file: "{{ lookup('env', 'nfs_filename') }}"
gather_facts: false
tasks:
+ - name: "Pre-requisites"
+ ansible.builtin.include_tasks:
+ file: "../resources/tests/export.yml"
+ vars:
+ _share_parameters:
+ <<: *share_input
+ tags: molecule-idempotence-notest
- name: "Importing SCP from NFS"
ansible.builtin.import_role:
name: idrac_import_server_config_profile
vars:
- hostname: "{{ lookup('env', 'HOSTNAME') }}"
- username: "{{ lookup('env', 'USERNAME') }}"
- password: "{{ lookup('env', 'PASSWORD') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
share_parameters:
- share_name: "{{ lookup('env', 'NFS_URL') }}"
- scp_file: "{{ lookup('env', 'nfs_filename') }}"
+ <<: *share_input
shutdown_type: 'Forced'
end_host_power_state: 'On'
when: not ansible_check_mode
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/nfs_share/molecule.yml b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/nfs_share/molecule.yml
index e69de29bb..fc17009ba 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/nfs_share/molecule.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/nfs_share/molecule.yml
@@ -0,0 +1,5 @@
+---
+provisioner:
+ name: ansible
+ playbooks:
+ cleanup: ../resources/tests/cleanup.yml
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/nfs_share/prepare.yml b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/nfs_share/prepare.yml
deleted file mode 100644
index 5fadc24b5..000000000
--- a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/nfs_share/prepare.yml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-- name: Cleanup
- hosts: all
- gather_facts: false
- tasks:
- - name: Cleanup config
- ansible.builtin.include_tasks: ../resources/tests/prepare.yml
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/cleanup.yml b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/cleanup.yml
new file mode 100644
index 000000000..1cb9a04de
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/cleanup.yml
@@ -0,0 +1,64 @@
+---
+- name: Cleanup
+ hosts: all
+ gather_facts: false
+ tasks:
+ - name: Setfact for target
+ ansible.builtin.set_fact:
+ idrac_import_server_config_profile_target: "{{ idrac_import_server_config_profile_target | default(['ALL']) }}"
+
+ - name: Cleanup when target is ['ALL'] or ['IDRAC']
+ ansible.builtin.import_role:
+ name: idrac_attributes
+ vars:
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
+ validate_certs: false
+ idrac_attributes:
+ Time.1.Timezone: "UTC" # "UTC"
+ when: "'ALL' in idrac_import_server_config_profile_target or 'IDRAC' in idrac_import_server_config_profile_target"
+
+ - name: Cleanup when target is ['BIOS']
+ dellemc.openmanage.idrac_bios:
+ idrac_ip: "{{ lookup('env', 'IDRAC_IP') }}"
+ idrac_user: "{{ lookup('env', 'IDRAC_USER') }}"
+ idrac_password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
+ validate_certs: false
+ attributes:
+ NumLock: "On" # "On"
+ when: "'BIOS' in idrac_import_server_config_profile_target"
+
+ - name: Calling nic_helper.yml
+ ansible.builtin.include_tasks:
+ file: "nic_helper.yml"
+ when: "'NIC' in idrac_import_server_config_profile_target"
+
+ - name: Cleanup when target is ['NIC']
+ dellemc.openmanage.idrac_network_attributes:
+ idrac_ip: "{{ lookup('env', 'IDRAC_IP') }}"
+ idrac_user: "{{ lookup('env', 'IDRAC_USER') }}"
+ idrac_password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
+ validate_certs: false
+ network_adapter_id: "{{ inp_network_adapter_id }}"
+ network_device_function_id: "{{ inp_network_device_function_id }}"
+ apply_time: Immediate
+ oem_network_attributes:
+ BannerMessageTimeout: "5" # "5"
+ when: "'NIC' in idrac_import_server_config_profile_target"
+
+ - name: Calling raid_helper.yml
+ ansible.builtin.include_tasks:
+ file: "raid_helper.yml"
+ when: "'RAID' in idrac_import_server_config_profile_target"
+
+ - name: Cleanup when target is ['RAID']
+ dellemc.openmanage.idrac_redfish_storage_controller:
+ baseuri: "{{ lookup('env', 'IDRAC_IP') }}:{{ https_port }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
+ validate_certs: false
+ controller_id: "{{ inp_controller_id }}"
+ attributes:
+ SupportedInitializationTypes: "Fast"
+ when: "'RAID' in idrac_import_server_config_profile_target"
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/export.yml b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/export.yml
new file mode 100644
index 000000000..f0b8d9024
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/export.yml
@@ -0,0 +1,72 @@
+---
+- name: Setfact for target
+ ansible.builtin.set_fact:
+ idrac_import_server_config_profile_target: "{{ idrac_import_server_config_profile_target | default(['ALL']) }}"
+
+- name: Performing export of server config profile
+ ansible.builtin.import_role:
+ name: idrac_export_server_config_profile
+ vars:
+ idrac_ip: "{{ lookup('env', 'IDRAC_IP') }}"
+ idrac_user: "{{ lookup('env', 'IDRAC_USER') }}"
+ idrac_password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
+ validate_certs: false
+ target: "{{ idrac_import_server_config_profile_target }}"
+ share_parameters: "{{ _share_parameters }}"
+ when: _share_parameters is defined
+
+- name: Making changes when target is ['ALL'] or ['IDRAC']
+ ansible.builtin.import_role:
+ name: idrac_attributes
+ vars:
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
+ validate_certs: false
+ idrac_attributes:
+ Time.1.Timezone: "CST6CDT"
+ when: "'ALL' in idrac_import_server_config_profile_target or 'IDRAC' in idrac_import_server_config_profile_target"
+
+- name: Making changes when target is ['BIOS']
+ dellemc.openmanage.idrac_bios:
+ idrac_ip: "{{ lookup('env', 'IDRAC_IP') }}"
+ idrac_user: "{{ lookup('env', 'IDRAC_USER') }}"
+ idrac_password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
+ validate_certs: false
+ attributes:
+ NumLock: "Off"
+ when: "'BIOS' in idrac_import_server_config_profile_target"
+
+- name: Calling nic_helper.yml
+ ansible.builtin.include_tasks:
+ file: "nic_helper.yml"
+ when: "'NIC' in idrac_import_server_config_profile_target"
+
+- name: Making changes when target is ['NIC']
+ dellemc.openmanage.idrac_network_attributes:
+ idrac_ip: "{{ lookup('env', 'IDRAC_IP') }}"
+ idrac_user: "{{ lookup('env', 'IDRAC_USER') }}"
+ idrac_password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
+ validate_certs: false
+ network_adapter_id: "{{ inp_network_adapter_id }}"
+ network_device_function_id: "{{ inp_network_device_function_id }}"
+ apply_time: Immediate
+ oem_network_attributes:
+ BannerMessageTimeout: "4"
+ when: "'NIC' in idrac_import_server_config_profile_target"
+
+- name: Calling raid_helper.yml
+ ansible.builtin.include_tasks:
+ file: "raid_helper.yml"
+ when: "'RAID' in idrac_import_server_config_profile_target"
+
+- name: Making changes when target is ['RAID']
+ dellemc.openmanage.idrac_redfish_storage_controller:
+ baseuri: "{{ lookup('env', 'IDRAC_IP') }}:{{ https_port }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
+ validate_certs: false
+ controller_id: "{{ inp_controller_id }}"
+ attributes:
+ SupportedInitializationTypes: "Slow"
+ when: "'RAID' in idrac_import_server_config_profile_target"
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/nic_helper.yml b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/nic_helper.yml
new file mode 100644
index 000000000..a8211d70a
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/nic_helper.yml
@@ -0,0 +1,39 @@
+- name: Helper file for NIC
+ block:
+ - name: Fetch network adapter id
+ ansible.builtin.uri: &network_uri
+ url: "https://{{ idrac_ip | ansible.utils.ipwrap }}:{{ idrac_port }}/redfish/v1/Systems/System.Embedded.1/NetworkAdapters"
+ user: "{{ idrac_user }}"
+ password: "{{ idrac_password }}"
+ method: GET
+ body: {}
+ validate_certs: false
+ body_format: json
+ return_content: true
+ status_code: 200
+ headers: 'Accept=application/json'
+ force_basic_auth: true
+ register: fetched_network_adapter_id
+
+ - name: Extracting network adapter id
+ ansible.builtin.set_fact:
+ network_adapter_id: "{{ fetched_network_adapter_id.content | from_json | json_query('Members[0]') }}"
+
+ - name: Setting network adapter id
+ ansible.builtin.set_fact:
+ inp_network_adapter_id: "{{ '@odata.id' | extract(network_adapter_id) | split('/') | last }}"
+
+ - name: Fetch network device function id
+ ansible.builtin.uri:
+ <<: *network_uri
+ url: "https://{{ idrac_ip | ansible.utils.ipwrap }}:{{ idrac_port }}/redfish/v1/Systems\
+ /System.Embedded.1/NetworkAdapters/{{ inp_network_adapter_id }}/NetworkDeviceFunctions"
+ register: fetched_network_device_function_id
+
+ - name: Extracting network device function id
+ ansible.builtin.set_fact:
+ network_device_function_id: "{{ fetched_network_device_function_id.content | from_json | json_query('Members[0]') }}"
+
+ - name: Setting network device function id
+ ansible.builtin.set_fact:
+ inp_network_device_function_id: "{{ '@odata.id' | extract(network_device_function_id) | split('/') | last }}"
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/prepare.yml b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/prepare.yml
index aa9fd74c5..b73bedd59 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/prepare.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/prepare.yml
@@ -3,9 +3,9 @@
ansible.builtin.import_role:
name: idrac_import_server_config_profile
vars:
- hostname: "{{ lookup('env', 'HOSTNAME') }}"
- username: "{{ lookup('env', 'USERNAME') }}"
- password: "{{ lookup('env', 'PASSWORD') }}"
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
import_buffer: "{ \"SystemConfiguration\": {\"Components\": [
{ \"FQDD\": \"iDRAC.Embedded.1\",\"Attributes\": [{ \"Name\": \"Time.1#Timezone\",
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/raid_helper.yml b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/raid_helper.yml
new file mode 100644
index 000000000..42d0ff214
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/raid_helper.yml
@@ -0,0 +1,24 @@
+- name: Helper file for RAID
+ block:
+ - name: Fetch storage controller id
+ ansible.builtin.uri: &network_uri
+ url: "https://{{ idrac_ip | ansible.utils.ipwrap }}:{{ idrac_port }}/redfish/v1/Systems/System.Embedded.1/Storage"
+ user: "{{ idrac_user }}"
+ password: "{{ idrac_password }}"
+ method: GET
+ body: {}
+ validate_certs: false
+ body_format: json
+ return_content: true
+ status_code: 200
+ headers: 'Accept=application/json'
+ force_basic_auth: true
+ register: fetched_controller_id
+
+ - name: Extracting controller id
+ ansible.builtin.set_fact:
+ controller_id: "{{ fetched_controller_id.content | from_json | json_query('Members[0]') }}"
+
+ - name: Setting controller id
+ ansible.builtin.set_fact:
+ inp_controller_id: "{{ '@odata.id' | extract(controller_id) | split('/') | last }}"
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_job_queue/molecule/clear_job_queue/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_job_queue/molecule/clear_job_queue/converge.yml
index 6bf6af48b..cc9f08965 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_job_queue/molecule/clear_job_queue/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_job_queue/molecule/clear_job_queue/converge.yml
@@ -7,7 +7,7 @@
ansible.builtin.set_fact:
input: &input
hostname: "{{ lookup('env', 'IDRAC_IP') }}"
- username: "{{ lookup('env', 'IDRAC_USERNAME') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
no_log: true
@@ -83,7 +83,7 @@
- name: Creating a job which exports SCP local path with all components
dellemc.openmanage.idrac_server_config_profile:
idrac_ip: "{{ lookup('env', 'IDRAC_IP') }}"
- idrac_user: "{{ lookup('env', 'IDRAC_USERNAME') }}"
+ idrac_user: "{{ lookup('env', 'IDRAC_USER') }}"
idrac_password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
scp_components:
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_job_queue/molecule/default/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_job_queue/molecule/default/converge.yml
index 1d14502f8..2c16c6319 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_job_queue/molecule/default/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_job_queue/molecule/default/converge.yml
@@ -6,7 +6,7 @@
- name: Creating job to export SCP local path with all components
dellemc.openmanage.idrac_server_config_profile:
idrac_ip: "{{ lookup('env', 'IDRAC_IP') }}"
- idrac_user: "{{ lookup('env', 'IDRAC_USERNAME') }}"
+ idrac_user: "{{ lookup('env', 'IDRAC_USER') }}"
idrac_password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: "{{ lookup('env', 'VALIDATE_CERT') }}"
scp_components:
@@ -24,7 +24,7 @@
name: "idrac_job_queue"
vars:
hostname: "{{ lookup('env', 'IDRAC_IP') }}"
- username: "{{ lookup('env', 'IDRAC_USERNAME') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: "{{ lookup('env', 'VALIDATE_CERT') }}"
job_id: JID_12345678
@@ -41,7 +41,7 @@
name: idrac_job_queue
vars:
hostname: "invalidHostname"
- username: "{{ lookup('env', 'IDRAC_USERNAME') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
clear_job_queue: true
validate_certs: "{{ lookup('env', 'VALIDATE_CERT') }}"
@@ -78,7 +78,7 @@
name: idrac_job_queue
vars:
hostname: "{{ lookup('env', 'IDRAC_IP') }}"
- username: "{{ lookup('env', 'IDRAC_USERNAME') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
password: "invalidPassword"
clear_job_queue: true
validate_certs: "{{ lookup('env', 'VALIDATE_CERT') }}"
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_job_queue/molecule/delete_job/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_job_queue/molecule/delete_job/converge.yml
index ecf859bf7..809dda61f 100644
--- a/ansible_collections/dellemc/openmanage/roles/idrac_job_queue/molecule/delete_job/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_job_queue/molecule/delete_job/converge.yml
@@ -7,7 +7,7 @@
ansible.builtin.set_fact:
input: &input
hostname: "{{ lookup('env', 'IDRAC_IP') }}"
- username: "{{ lookup('env', 'IDRAC_USERNAME') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: "{{ lookup('env', 'VALIDATE_CERT') }}"
no_log: true
@@ -37,7 +37,7 @@
- name: Creating job to export SCP local path with all components
dellemc.openmanage.idrac_server_config_profile:
idrac_ip: "{{ lookup('env', 'IDRAC_IP') }}"
- idrac_user: "{{ lookup('env', 'IDRAC_USERNAME') }}"
+ idrac_user: "{{ lookup('env', 'IDRAC_USER') }}"
idrac_password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: "{{ lookup('env', 'VALIDATE_CERT') }}"
scp_components:
@@ -55,7 +55,7 @@
url: "https://{{ lookup('env', 'IDRAC_IP') }}/redfish/v1/Managers/iDRAC.Embedded.1/Jobs"
validate_certs: "{{ lookup('env', 'VALIDATE_CERT') }}"
method: "GET"
- user: "{{ lookup('env', 'IDRAC_USERNAME') }}"
+ user: "{{ lookup('env', 'IDRAC_USER') }}"
password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
headers:
Accept: "application/json"
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_user/README.md b/ansible_collections/dellemc/openmanage/roles/idrac_user/README.md
new file mode 100644
index 000000000..0404dfe71
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_user/README.md
@@ -0,0 +1,347 @@
+# idrac_user
+
+Role to manage local users for iDRAC.
+
+## Requirements
+
+### Development
+
+Requirements to develop and contribute to the role.
+
+```
+ansible
+docker
+molecule
+python
+```
+
+### Production
+
+Requirements to use the role.
+
+```
+ansible
+python
+```
+
+### Ansible collections
+
+Collections required to use the role
+
+```
+dellemc.openmanage
+```
+
+## Role Variables
+
+<table>
+<thead>
+ <tr>
+ <th>Name</th>
+ <th>Required</th>
+ <th>Default Value</th>
+ <th>Choices</th>
+ <th>Type</th>
+ <th>Description</th>
+ </tr>
+</thead>
+<tbody>
+ <tr>
+ <td>hostname</td>
+ <td>true</td>
+ <td></td>
+ <td></td>
+ <td>str</td>
+ <td>- IPv4, IPv6 Address or hostname of the iDRAC.</td>
+ </tr>
+ <tr>
+ <td>username</td>
+ <td>true</td>
+ <td></td>
+ <td></td>
+ <td>str</td>
+ <td>- iDRAC username with 'Administrator' privilege.</td>
+ </tr>
+ <tr>
+ <td>password</td>
+ <td>true</td>
+ <td></td>
+ <td></td>
+ <td>str</td>
+ <td>- iDRAC user password.</td>
+ </tr>
+ <tr>
+ <td>https_port</td>
+ <td>false</td>
+ <td>443</td>
+ <td></td>
+ <td>int</td>
+ <td>- iDRAC port.</td>
+ </tr>
+ <tr>
+ <td>validate_certs</td>
+ <td>false</td>
+ <td>true</td>
+ <td></td>
+ <td>bool</td>
+ <td>- If C(false), the SSL certificates will not be validated.<br>- Configure C(false) only on personally controlled sites where self-signed certificates are used.</td>
+ </tr>
+ <tr>
+ <td>ca_path</td>
+ <td>false</td>
+ <td></td>
+ <td></td>
+ <td>path</td>
+ <td>- The Privacy Enhanced Mail (PEM) file that contains a CA certificate to be used for the validation.</td>
+ </tr>
+ <tr>
+ <td>https_timeout</td>
+ <td>false</td>
+ <td>30</td>
+ <td></td>
+ <td>int</td>
+ <td>- The HTTPS socket level timeout in seconds.</td>
+ </tr>
+ <tr>
+ <td>state</td>
+ <td>false</td>
+ <td>present</td>
+ <td>[present, absent]</td>
+ <td>str</td>
+ <td>- Select C(present) to create or modify a user account.</br>- Select C(absent) to remove a user account.</td>
+ </tr>
+ <tr>
+ <td>user_name</td>
+ <td>true</td>
+ <td></td>
+ <td></td>
+ <td>str</td>
+ <td>- Provide username of the iDRAC user account that is created, deleted, or modified.</td>
+ </tr>
+ <tr>
+ <td>user_password</td>
+ <td>false</td>
+ <td></td>
+ <td></td>
+ <td>str</td>
+ <td>- Provide password for the iDRAC user account that is created, or modified. The password can be changed when the user account is modified.</br>- To ensure security, the I(user_password) must be at least eight characters long and must contain
+ lowercase and upper-case characters, numbers, and special characters.
+</td>
+ </tr>
+ <tr>
+ <td>new_user_name</td>
+ <td>false</td>
+ <td></td>
+ <td></td>
+ <td>str</td>
+ <td>- Provide the I(user_name) for the iDRAC user account that is modified.</td>
+ </tr>
+ <tr>
+ <td>privilege</td>
+ <td>false</td>
+ <td></td>
+ <td>["Administrator","ReadOnly","Operator","None"]</td>
+ <td>str</td>
+ <td>- Following are the role-based privileges.</br>- A user with C(Administrator) privilege can log in to iDRAC, and then configure iDRAC, configure users,clear logs, control and configure system, access virtual console, access virtual media, test alerts, and execute debug commands.
+ </br>- A user with C(Operator) privilege can log in to iDRAC, and then configure iDRAC, control and configure system, access virtual console, access virtual media, and execute debug commands.</br>- A user with C(ReadOnly) privilege can only log in to iDRAC.</br>- A user with C(None), no privileges assigned.</br>- Will be ignored, if I(custom_privilege) parameter is provided.</td>
+ </tr>
+ </tr>
+ <tr>
+ <td>custom_privilege</td>
+ <td>false</td>
+ <td></td>
+ <td></td>
+ <td>int</td>
+ <td>- Provide the custom role-based authority privileges allowed for the user.</br>- To create a custom privilege, add up the privilege decimal values as defined below.</br>Login - 1</br>Configure - 2</br>Configure Users - 4</br>Logs - 8</br>System Control - 16</br>Access Virtual Console - 32</br>Access Virtual Media - 64</br>System Operations - 128</br>Debug - 256</br>- The value has to be in the range 0-511.</td>
+ </tr>
+ <tr>
+ <td>ipmi_lan_privilege</td>
+ <td>false</td>
+ <td></td>
+ <td>["Administrator","ReadOnly","Operator","No Access"]</td>
+ <td>str</td>
+ <td>- The Intelligent Platform Management Interface LAN privilege level assigned to the user.</td>
+ </tr>
+ <tr>
+ <td>ipmi_serial_privilege</td>
+ <td>false</td>
+ <td></td>
+ <td>["Administrator","ReadOnly","Operator","No Access"]</td>
+ <td>str</td>
+ <td>- The Intelligent Platform Management Interface Serial Port privilege level assigned to the user.</br>- This option is only applicable for rack and tower servers.</td>
+ </tr>
+ <tr>
+ <td>enable</td>
+ <td>false</td>
+ <td></td>
+ <td></td>
+ <td>bool</td>
+ <td>Provide the option to enable or disable a user from logging in to iDRAC.</td>
+ </tr>
+ <tr>
+ <td>sol_enable</td>
+ <td>false</td>
+ <td></td>
+ <td></td>
+ <td>bool</td>
+ <td>Enables Serial Over Lan (SOL) for an iDRAC user.</td>
+ </tr>
+ <tr>
+ <td>protocol_enable</td>
+ <td>false</td>
+ <td></td>
+ <td></td>
+ <td>bool</td>
+ <td>Enables SNMPv3 protocol for the iDRAC user.</td>
+ </tr>
+ <tr>
+ <td>authentication_protocol</td>
+ <td>false</td>
+ <td></td>
+ <td>["None","SHA5","MD5"]</td>
+ <td>str</td>
+ <td>- This option allows to configure one of the following authentication protocol types to authenticate the iDRAC user.</br>- Secure Hash Algorithm C(SHA).</br>- Message Digest 5 C(MD5).</br>- If C(None) is selected, then the authentication protocol is not configured.</td>
+ </tr>
+ <tr>
+ <td>privacy_protocol</td>
+ <td>false</td>
+ <td></td>
+ <td>["None","DES","AES"]</td>
+ <td>str</td>
+ <td>- This option allows to configure one of the following privacy encryption protocols for the iDRAC user.</br>- Data Encryption Standard C(DES).</br>- Advanced Encryption Standard C(AES).</br>- If C(None) is selected, then the privacy protocol is not configured.</td>
+ </tr>
+
+
+## Fact variables
+
+<table>
+<thead>
+ <tr>
+ <th>Name</th>
+ <th>Sample</th>
+ <th>Description</th>
+ </tr>
+</thead>
+ <tbody>
+ <tr>
+ <td>idrac_user_out</td>
+ <td>{"changed": true,
+ "failed": false,
+ "msg": "Successfully created user account details."
+}</td>
+<td>Output of the iDRAC user role</td>
+</tr>
+<tr>
+ <td>idrac_user_account</td>
+ <td>
+ {"changed": true,
+ "failed": false,
+ {
+ "AccountTypes": [
+ "Redfish",
+ "SNMP",
+ "OEM",
+ "HostConsole",
+ "ManagerConsole",
+ "IPMI",
+ "KVMIP",
+ "VirtualMedia",
+ "WebUI"
+ ],
+ "Description": "User Account",
+ "Enabled": true,
+ "Id": "2",
+ "Locked": false,
+ "Name": "User Account",
+ "OEMAccountTypes": [
+ "IPMI",
+ "SOL",
+ "WSMAN",
+ "UI",
+ "RACADM"
+ ],
+ "Oem": {
+ "Dell": {
+ "SNMPv3PassphraseEnabled": "Disabled"
+ }
+ },
+ "Password": null,
+ "PasswordChangeRequired": false,
+ "PasswordExpiration": null,
+ "RoleId": "Administrator",
+ "SNMP": {
+ "AuthenticationKey": null,
+ "AuthenticationKeySet": true,
+ "AuthenticationProtocol": "HMAC_MD5",
+ "EncryptionKey": null,
+ "EncryptionKeySet": true,
+ "EncryptionProtocol": "CBC_DES"
+ },
+ "StrictAccountTypes": false,
+ "UserName": "root"
+}"
+}</td>
+<td>Details of the iDRAC user account that is created or modified.</td>
+</tr>
+</tbody>
+</table>
+
+## Examples
+
+---
+
+```yml
+- name: Configure a new iDRAC user
+ ansible.builtin.import_role:
+ name: idrac_user
+ vars:
+ hostname: "192.1.2.1"
+ username: "username"
+ password: "password"
+ ca_path: "/path/to/ca_cert.pem"
+ state: present
+ user_name: user_name
+ user_password: user_password
+ privilege: Administrator
+ ipmi_lan_privilege: Administrator
+ ipmi_serial_privilege: Administrator
+ enable: true
+ sol_enable: true
+ protocol_enable: true
+ authentication_protocol: SHA
+ privacy_protocol: AES
+```
+
+```yml
+- name: Modify username and password for the existing iDRAC user
+ ansible.builtin.import_role:
+ name: idrac_user
+ vars:
+ hostname: "192.1.2.1"
+ username: "username"
+ password: "password"
+ ca_path: "/path/to/ca_cert.pem"
+ state: present
+ user_name: user_name
+ new_user_name: new_user_name
+ user_password: user_password
+```
+
+```yml
+-- name: Delete existing iDRAC user account
+ ansible.builtin.import_role:
+ name: idrac_user
+ vars:
+ hostname: "192.1.2.1"
+ username: "username"
+ password: "password"
+ ca_path: "/path/to/ca_cert.pem"
+ state: absent
+ user_name: user_name
+```
+## Author Information
+
+---
+
+Dell Technologies <br>
+Kritika Bhateja (Kritika.Bhateja@Dell.com) 2024
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_user/defaults/main.yml b/ansible_collections/dellemc/openmanage/roles/idrac_user/defaults/main.yml
new file mode 100644
index 000000000..e73b71e4f
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_user/defaults/main.yml
@@ -0,0 +1,6 @@
+---
+# defaults file for idrac_user
+validate_certs: true
+https_timeout: 30
+https_port: 443
+state: present
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_user/handlers/main.yml b/ansible_collections/dellemc/openmanage/roles/idrac_user/handlers/main.yml
new file mode 100644
index 000000000..8ba5fa018
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_user/handlers/main.yml
@@ -0,0 +1,2 @@
+---
+# handlers file for idrac_user
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_user/meta/argument_specs.yml b/ansible_collections/dellemc/openmanage/roles/idrac_user/meta/argument_specs.yml
new file mode 100644
index 000000000..8075581bc
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_user/meta/argument_specs.yml
@@ -0,0 +1,170 @@
+---
+argument_specs:
+ main:
+ version_added: "9.0.0"
+ short_description: Role to manage local users for iDRAC.
+ description:
+ - Role to manage manage local users for iDRACs
+ (iDRAC8 and iDRAC9 only) for Dell PowerEdge servers.
+ options:
+ hostname:
+ required: true
+ type: str
+ description: IPv4, IPv6 Address or hostname of the iDRAC.
+ username:
+ type: str
+ description: iDRAC username with 'Administrator' privilege.
+ password:
+ type: str
+ description: iDRAC user password.
+ https_port:
+ type: int
+ description: iDRAC port.
+ default: 443
+ validate_certs:
+ description:
+ - If C(false), the SSL certificates will not be validated.
+ - Configure C(false) only on personally controlled sites
+ where self-signed certificates are used.
+ type: bool
+ default: true
+ ca_path:
+ description:
+ - The Privacy Enhanced Mail (PEM) file that contains a CA
+ certificate to be used for the validation.
+ type: path
+ https_timeout:
+ description: The HTTPS socket level timeout in seconds.
+ type: int
+ default: 30
+ state:
+ description:
+ - Select C(present) to create or modify a user account.
+ - Select C(absent) to remove a user account.
+ type: str
+ default: present
+ choices:
+ [
+ "present",
+ "absent"
+ ]
+ user_name:
+ description: Provide username of the iDRAC user account that
+ is created, deleted, or modified.
+ type: str
+ required: true
+ user_password:
+ description:
+ - Password for the iDRAC user account that is created,
+ or modified. The password can be changed when the user
+ account is modified.
+ - To ensure security, the I(user_password) must be at least eight
+ characters long and must contain lowercase and upper-case
+ characters, numbers, and special characters.
+ type: str
+ new_user_name:
+ description: Provide the I(user_name) for the iDRAC user
+ account that is modified.
+ type: str
+ privilege:
+ description:
+ - Following are the role-based privileges.
+ - A user with C(Administrator) privilege can log in to iDRAC,
+ and then configure iDRAC, configure users, clear logs, control
+ and configure system, access virtual console, access virtual
+ media, test alerts, and execute debug commands.
+ - A user with C(Operator) privilege can log in to iDRAC, and then
+ configure iDRAC, control and configure system, access virtual
+ console, access virtual media, and execute debug commands.
+ - A user with C(ReadOnly) privilege can only log in to iDRAC.
+ - A user with C(None), no privileges assigned.
+ - Will be ignored, if I(custom_privilege) parameter is provided.
+ type: str
+ choices:
+ [
+ "Administrator",
+ "ReadOnly",
+ "Operator",
+ "None"
+ ]
+ custom_privilege:
+ description:
+ - Provide the custom role-based authority privileges allowed
+ for the user .
+ - To create a custom privilege, add up the privilege decimal
+ values as defined below.
+ Login - 1
+ Configure - 2
+ Configure Users - 4
+ Logs - 8
+ System Control - 16
+ Access Virtual Console - 32
+ Access Virtual Media - 64
+ System Operations - 128
+ Debug - 256
+ - The value has to be in the range 0-511.
+ type: int
+ ipmi_lan_privilege:
+ description: The Intelligent Platform Management
+ Interface LAN privilege level assigned to the user.
+ type: str
+ choices:
+ [
+ "Administrator",
+ "Operator",
+ "User",
+ "No Access"
+ ]
+ ipmi_serial_privilege:
+ description:
+ - The Intelligent Platform Management Interface Serial Port
+ privilege level assigned to the user.
+ - This option is only applicable for rack and tower servers.
+ type: str
+ choices:
+ [
+ "Administrator",
+ "Operator",
+ "User",
+ "No Access"
+ ]
+ enable:
+ description: Provide the option to enable or disable a user
+ from logging in to iDRAC.
+ type: bool
+ sol_enable:
+ description: Enables Serial Over Lan (SOL) for an iDRAC user.
+ type: bool
+ protocol_enable:
+ description: Enables SNMPv3 protocol for the iDRAC user.
+ type: bool
+ authentication_protocol:
+ description:
+ - This option allows to configure one of the following
+ authentication protocol types to authenticate the iDRAC user.
+ - Secure Hash Algorithm C(SHA).
+ - Message Digest 5 C(MD5).
+ - If C(None) is selected, then the authentication protocol
+ is not configured.
+ type: str
+ choices:
+ [
+ "None",
+ "SHA",
+ "MD5"
+ ]
+ privacy_protocol:
+ description:
+ - This option allows to configure one of the following
+ privacy encryption protocols for the iDRAC user.
+ - Data Encryption Standard C(DES).
+ - Advanced Encryption Standard C(AES).
+ - If C(None) is selected, then the privacy protocol =
+ is not configured.
+ type: str
+ choices:
+ [
+ "None",
+ "DES",
+ "AES"
+ ]
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_user/meta/main.yml b/ansible_collections/dellemc/openmanage/roles/idrac_user/meta/main.yml
new file mode 100644
index 000000000..b2d809a64
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_user/meta/main.yml
@@ -0,0 +1,21 @@
+---
+galaxy_info:
+ author: Kritika-Bhateja
+ description: This role helps to manage local users for iDRAC.
+ company: Dell Technologies
+ license: GPL-3.0-only
+ min_ansible_version: "2.15.8"
+ platforms:
+ - name: EL
+ versions:
+ - "9"
+ - "8"
+ - name: Ubuntu
+ versions:
+ - jammy
+ - name: SLES
+ versions:
+ - "15SP3"
+ - "15SP4"
+ galaxy_tags: []
+dependencies: []
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152120/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152120/converge.yml
new file mode 100644
index 000000000..e2d712034
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152120/converge.yml
@@ -0,0 +1,49 @@
+---
+- name: Validate creating a user with all parameters
+ hosts: all
+ gather_facts: false
+ vars:
+ idrac_user_name: "moleculeTest"
+ tasks:
+ - name: Configure a new iDRAC user with all parameters except user_password
+ ansible.builtin.import_role:
+ name: idrac_user
+ vars:
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
+ validate_certs: false
+ state: present
+ user_name: "{{ idrac_user_name }}"
+ user_password: 'test1234'
+ privilege: Administrator
+ ipmi_lan_privilege: Administrator
+ ipmi_serial_privilege: Administrator
+ enable: true
+ sol_enable: true
+ protocol_enable: true
+ authentication_protocol: SHA
+ privacy_protocol: AES
+ tags: molecule-idempotence-notest
+
+ - name: Asserting user creation in check mode
+ ansible.builtin.assert:
+ that: idrac_user_out.msg == "Changes found to commit!"
+ when: ansible_check_mode
+ tags: molecule-idempotence-notest
+
+ - name: Fetching user info in normal mode
+ ansible.builtin.include_tasks:
+ file: ../resources/idrac_user/get_user_info.yml
+ when: not ansible_check_mode and idrac_user_out.changed
+ tags: molecule-idempotence-notest
+
+ - name: Asserting user creation in normal mode
+ ansible.builtin.assert:
+ that:
+ - idrac_user_out.msg == "Successfully created user account."
+ - "{{ (user_details.user_info | length) != 0 }}"
+ - user_details.user_info[0].UserName == idrac_user_account.UserName
+ - user_details.user_info[0].RoleId == "Administrator"
+ when: not ansible_check_mode and idrac_user_out.changed
+ tags: molecule-idempotence-notest
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152120/molecule.yml b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152120/molecule.yml
new file mode 100644
index 000000000..12be22020
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152120/molecule.yml
@@ -0,0 +1,5 @@
+---
+provisioner:
+ name: ansible
+ playbooks:
+ cleanup: ../resources/idrac_user/cleanup.yml
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152146/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152146/converge.yml
new file mode 100644
index 000000000..bff8a0d5b
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152146/converge.yml
@@ -0,0 +1,46 @@
+---
+- name: Validate creating a user with minimum required parameters
+ hosts: all
+ gather_facts: false
+ vars:
+ idrac_user_name: "moleculeTest"
+ idem_msg: "Requested changes are already present in the user slot."
+ tasks:
+ - name: Configure a new iDRAC user with all parameters except user_password
+ ansible.builtin.import_role:
+ name: idrac_user
+ vars:
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
+ validate_certs: false
+ state: present
+ user_name: "{{ idrac_user_name }}"
+
+ - name: Asserting user creation in check mode
+ ansible.builtin.assert:
+ that: idrac_user_out.msg == "Changes found to commit!"
+ when: ansible_check_mode
+ tags: molecule-idempotence-notest
+
+ - name: Fetching user info in normal mode
+ ansible.builtin.include_tasks:
+ file: ../resources/idrac_user/get_user_info.yml
+ when: not ansible_check_mode and idrac_user_out.changed
+ tags: molecule-idempotence-notest
+
+ - name: Asserting user creation in normal mode
+ ansible.builtin.assert:
+ that:
+ - idrac_user_out.msg == "Successfully created user account."
+ - "{{ (user_details.user_info | length) != 0 }}"
+ - user_details.user_info[0].UserName == idrac_user_account.UserName
+ - user_details.user_info[0].RoleId == "None"
+ when: not ansible_check_mode and idrac_user_out.changed
+ tags: molecule-idempotence-notest
+
+ - name: Asserting user creation in idempotency mode
+ ansible.builtin.assert:
+ that:
+ - idrac_user_out.msg == idem_msg
+ when: not ansible_check_mode and not idrac_user_out.changed
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152146/molecule.yml b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152146/molecule.yml
new file mode 100644
index 000000000..12be22020
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152146/molecule.yml
@@ -0,0 +1,5 @@
+---
+provisioner:
+ name: ansible
+ playbooks:
+ cleanup: ../resources/idrac_user/cleanup.yml
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152147/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152147/converge.yml
new file mode 100644
index 000000000..d96518aae
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152147/converge.yml
@@ -0,0 +1,32 @@
+---
+- name: Verifying custom_previlege has precedence over previlege parameters
+ hosts: all
+ gather_facts: false
+ vars:
+ idrac_user_name: "moleculeTest"
+ roles:
+ - role: idrac_user
+ vars:
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
+ validate_certs: false
+ state: present
+ user_name: "{{ idrac_user_name }}"
+ user_password: '#testABCdef1234!'
+ privilege: Operator
+ custom_privilege: 1
+
+ tasks:
+ - name: Fetching user info in normal mode
+ ansible.builtin.include_tasks:
+ file: ../resources/idrac_user/get_user_info.yml
+
+ - name: Asserting user creation in normal mode
+ ansible.builtin.assert:
+ that:
+ - idrac_user_out.msg == "Successfully created user account."
+ - "{{ (user_details.user_info | length) != 0 }}"
+ - user_details.user_info[0].UserName == idrac_user_account.UserName
+ - user_details.user_info[0].RoleId == "ReadOnly"
+ - idrac_user_out.changed
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152147/molecule.yml b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152147/molecule.yml
new file mode 100644
index 000000000..326227dee
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152147/molecule.yml
@@ -0,0 +1,10 @@
+---
+provisioner:
+ name: ansible
+ playbooks:
+ cleanup: ../resources/idrac_user/cleanup.yml
+scenario:
+ test_sequence:
+ - cleanup
+ - converge
+ - destroy
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152148/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152148/converge.yml
new file mode 100644
index 000000000..f5044b244
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152148/converge.yml
@@ -0,0 +1,54 @@
+---
+- name: Validate modifying a user with all parameters
+ hosts: all
+ gather_facts: false
+ vars:
+ idrac_user_name: "moleculeTest"
+ idem_msg: "Requested changes are already present in the user slot."
+ tasks:
+ - name: Modify iDRAC user with all parameters
+ ansible.builtin.import_role:
+ name: idrac_user
+ vars:
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
+ validate_certs: false
+ state: present
+ user_name: "{{ idrac_user_name }}"
+ privilege: Operator
+ ipmi_lan_privilege: User
+ ipmi_serial_privilege: User
+ enable: true
+ sol_enable: true
+ protocol_enable: true
+ authentication_protocol: SHA
+ privacy_protocol: AES
+
+ - name: Asserting user creation in check mode
+ ansible.builtin.assert:
+ that: idrac_user_out.msg == "Changes found to commit!"
+ when: ansible_check_mode
+ tags: molecule-idempotence-notest
+
+ - name: Fetching user info in normal mode
+ ansible.builtin.include_tasks:
+ file: ../resources/idrac_user/get_user_info.yml
+ when: not ansible_check_mode and idrac_user_out.changed
+ tags: molecule-idempotence-notest
+
+ - name: Asserting user creation in normal mode
+ ansible.builtin.assert:
+ that:
+ - idrac_user_out.msg == "Successfully updated user account."
+ - "{{ (user_details.user_info | length) != 0 }}"
+ - user_details.user_info[0].UserName == idrac_user_account.UserName
+ - user_details.user_info[0].RoleId == "Operator"
+ when: not ansible_check_mode and idrac_user_out.changed
+ tags: molecule-idempotence-notest
+
+ - name: Asserting user creation in Idempotency mode
+ ansible.builtin.assert:
+ that:
+ - idrac_user_out.msg == idem_msg
+ when: not ansible_check_mode and not idrac_user_out.changed
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152148/molecule.yml b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152148/molecule.yml
new file mode 100644
index 000000000..12be22020
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152148/molecule.yml
@@ -0,0 +1,5 @@
+---
+provisioner:
+ name: ansible
+ playbooks:
+ cleanup: ../resources/idrac_user/cleanup.yml
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152148/prepare.yml b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152148/prepare.yml
new file mode 100644
index 000000000..29621fd56
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152148/prepare.yml
@@ -0,0 +1,26 @@
+---
+- name: Prepare
+ hosts: all
+ gather_facts: false
+ vars:
+ idrac_user_name: "moleculeTest"
+ tasks:
+ - name: Configure a new iDRAC user with all parameters
+ ansible.builtin.import_role:
+ name: idrac_user
+ vars:
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
+ validate_certs: false
+ state: present
+ user_name: "{{ idrac_user_name }}"
+ user_password: 'test1234'
+ privilege: ReadOnly
+ ipmi_lan_privilege: Operator
+ ipmi_serial_privilege: No Access
+ enable: true
+ sol_enable: true
+ protocol_enable: true
+ authentication_protocol: SHA
+ privacy_protocol: AES
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152149/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152149/converge.yml
new file mode 100644
index 000000000..19ee7d60e
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152149/converge.yml
@@ -0,0 +1,45 @@
+---
+- name: Validate creating a user with minimum required parameters with env
+ hosts: all
+ gather_facts: false
+ vars:
+ idrac_user_name: "moleculeTest"
+ idem_msg: "Requested changes are already present in the user slot."
+ tasks:
+ - name: Modify iDRAC user with minimum requred parameters
+ ansible.builtin.import_role:
+ name: idrac_user
+ vars:
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ validate_certs: false
+ state: present
+ user_name: "{{ idrac_user_name }}"
+ custom_privilege: 511
+
+ - name: Asserting user creation in check mode
+ ansible.builtin.assert:
+ that: idrac_user_out.msg == "Changes found to commit!"
+ when: ansible_check_mode
+ tags: molecule-idempotence-notest
+
+ - name: Fetching user info in normal mode
+ ansible.builtin.include_tasks:
+ file: ../resources/idrac_user/get_user_info.yml
+ when: not ansible_check_mode and idrac_user_out.changed
+ tags: molecule-idempotence-notest
+
+ - name: Asserting user creation in normal mode
+ ansible.builtin.assert:
+ that:
+ - idrac_user_out.msg == "Successfully updated user account."
+ - "{{ (user_details.user_info | length) != 0 }}"
+ - user_details.user_info[0].UserName == idrac_user_account.UserName
+ - user_details.user_info[0].RoleId == "Administrator"
+ when: not ansible_check_mode and idrac_user_out.changed
+ tags: molecule-idempotence-notest
+
+ - name: Asserting user creation in idempotency mode
+ ansible.builtin.assert:
+ that:
+ - idrac_user_out.msg == idem_msg
+ when: not ansible_check_mode and not idrac_user_out.changed
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152149/molecule.yml b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152149/molecule.yml
new file mode 100644
index 000000000..12be22020
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152149/molecule.yml
@@ -0,0 +1,5 @@
+---
+provisioner:
+ name: ansible
+ playbooks:
+ cleanup: ../resources/idrac_user/cleanup.yml
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152149/prepare.yml b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152149/prepare.yml
new file mode 100644
index 000000000..11a785503
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152149/prepare.yml
@@ -0,0 +1,19 @@
+---
+- name: Prepare
+ hosts: all
+ gather_facts: false
+ vars:
+ idrac_user_name: "moleculeTest"
+ tasks:
+ - name: Configure a new iDRAC user with minimum required parameters
+ ansible.builtin.import_role:
+ name: idrac_user
+ vars:
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
+ validate_certs: false
+ state: present
+ user_name: "{{ idrac_user_name }}"
+ user_password: "#1234Abc"
+ custom_privilege: 0
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152150/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152150/converge.yml
new file mode 100644
index 000000000..672912bc3
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152150/converge.yml
@@ -0,0 +1,51 @@
+---
+- name: Validate deleting a user
+ hosts: all
+ gather_facts: false
+ vars:
+ idrac_user_name: "moleculeTest"
+ tasks:
+ - name: Delete iDRAC user
+ ansible.builtin.import_role:
+ name: idrac_user
+ vars:
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
+ validate_certs: false
+ state: absent
+ user_name: "{{ idrac_user_name }}"
+
+ - name: Asserting user deletion in check mode
+ ansible.builtin.assert:
+ that: idrac_user_out.msg == "Changes found to commit!"
+ when: ansible_check_mode
+ tags: molecule-idempotence-notest
+
+ - name: Fetching user info in normal mode
+ ansible.builtin.include_tasks:
+ file: ../resources/idrac_user/get_user_info.yml
+ vars:
+ idrac_user_name: "{{ default(omit) }}"
+ when: not ansible_check_mode and idrac_user_out.changed
+ tags: molecule-idempotence-notest
+
+ - name: Extracting username
+ ansible.builtin.set_fact:
+ user_list: "{{ user_details.user_info | map(attribute='UserName') }}"
+ when: not ansible_check_mode and idrac_user_out.changed
+ tags: molecule-idempotence-notest
+
+ - name: Asserting user deletion in normal mode
+ ansible.builtin.assert:
+ that:
+ - idrac_user_out.msg == "Successfully deleted user account."
+ - "{{ idrac_user_name not in user_list }}"
+ when: not ansible_check_mode and idrac_user_out.changed
+ tags: molecule-idempotence-notest
+
+ - name: Asserting user deletion in idempotency mode
+ ansible.builtin.assert:
+ that:
+ - idrac_user_out.msg == "The user account is absent."
+ when: not ansible_check_mode and not idrac_user_out.changed
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152150/molecule.yml b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152150/molecule.yml
new file mode 100644
index 000000000..12be22020
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152150/molecule.yml
@@ -0,0 +1,5 @@
+---
+provisioner:
+ name: ansible
+ playbooks:
+ cleanup: ../resources/idrac_user/cleanup.yml
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152150/prepare.yml b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152150/prepare.yml
new file mode 100644
index 000000000..69b4ba6ab
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152150/prepare.yml
@@ -0,0 +1,19 @@
+---
+- name: Prepare
+ hosts: all
+ gather_facts: false
+ vars:
+ idrac_user_name: "moleculeTest"
+ tasks:
+ - name: Configure a new iDRAC user with minimum required parameters
+ ansible.builtin.import_role:
+ name: idrac_user
+ vars:
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
+ validate_certs: false
+ state: present
+ user_name: "{{ idrac_user_name }}"
+ user_password: "#1234Abc"
+ custom_privilege: 65
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/default/converge.yml b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/default/converge.yml
new file mode 100644
index 000000000..c0e0e96d2
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/default/converge.yml
@@ -0,0 +1,163 @@
+---
+- name: TC-152151 - Validate all negative scenarios
+ hosts: all
+ gather_facts: false
+ vars:
+ idrac_user_name: "moleculeTest"
+ max_user: 16
+ tasks:
+ - name: Invalid hostname value
+ ansible.builtin.import_role:
+ name: idrac_user
+ vars:
+ hostname: "invalid"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
+ validate_certs: false
+ state: present
+ user_name: "{{ idrac_user_name }}"
+ ignore_errors: true
+ ignore_unreachable: true
+ register: idrac_user_fail_case
+
+ - name: Asserting for invalid hostname
+ ansible.builtin.assert:
+ that: >
+ idrac_user_out.msg == "<urlopen error [Errno -2]
+ Name or service not known>"
+
+ - name: Invalid username value
+ ansible.builtin.import_role:
+ name: idrac_user
+ vars:
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "invalid"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
+ validate_certs: false
+ state: present
+ user_name: "{{ idrac_user_name }}"
+ ignore_errors: true
+ ignore_unreachable: true
+ register: idrac_user_fail_case
+
+ - name: Asserting for invalid username
+ ansible.builtin.assert:
+ that:
+ - '"HTTP Error 401" in idrac_user_out.msg'
+
+ - name: Invalid password value
+ ansible.builtin.import_role:
+ name: idrac_user
+ vars:
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "invalid"
+ validate_certs: false
+ state: present
+ user_name: "{{ idrac_user_name }}"
+ ignore_errors: true
+ ignore_unreachable: true
+ register: idrac_user_fail_case
+
+ - name: Asserting for invalid password
+ ansible.builtin.assert:
+ that:
+ - '"HTTP Error 401" in idrac_user_out.msg'
+
+ - name: Invalid validate_certs value
+ ansible.builtin.import_role:
+ name: idrac_user
+ vars:
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
+ validate_certs: invalid
+ state: present
+ user_name: "{{ idrac_user_name }}"
+ ignore_errors: true
+ ignore_unreachable: true
+ register: idrac_user_fail_case
+
+ - name: Asserting for invalid validate_certs
+ ansible.builtin.assert:
+ that:
+ - '"not a valid boolean" in idrac_user_out.msg'
+
+ - name: Invalid ca_path value
+ ansible.builtin.import_role:
+ name: idrac_user
+ vars:
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
+ ca_path: invalid
+ state: present
+ user_name: "{{ idrac_user_name }}"
+ ignore_errors: true
+ ignore_unreachable: true
+ register: idrac_user_fail_case
+
+ - name: Asserting for invalid ca_path
+ ansible.builtin.assert:
+ that:
+ - idrac_user_out.failed
+
+ - name: Invalid username value
+ ansible.builtin.import_role:
+ name: idrac_user
+ vars:
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
+ validate_certs: false
+ state: present
+ user_name: "12345@Dell"
+ ignore_errors: true
+ ignore_unreachable: true
+ register: idrac_user_fail_case
+
+ - name: Asserting for invalid username
+ ansible.builtin.assert:
+ that:
+ - '"HTTP Error 400" in idrac_user_out.msg'
+
+ - name: Delete a idrac_user by giving invalid user_name
+ ansible.builtin.import_role:
+ name: idrac_user
+ vars:
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
+ validate_certs: false
+ state: absent
+ user_name: "12345Dell"
+ ignore_errors: true
+ ignore_unreachable: true
+ register: idrac_user_fail_case
+
+ - name: Asserting for deletion of a idrac_user by giving invalid user_name
+ ansible.builtin.assert:
+ that:
+ - idrac_user_out.msg == "The user account is absent."
+
+ - name: Invalid value for "custom_priviledge"
+ ansible.builtin.import_role:
+ name: idrac_user
+ vars:
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
+ validate_certs: false
+ state: present
+ user_name: "{{ idrac_user_name }}"
+ user_password: "#123Dell456!"
+ custom_privilege: -1
+ ignore_errors: true
+ ignore_unreachable: true
+ register: idrac_user_fail_case
+
+ - name: Asserting for invalid value for "custom_priviledge"
+ ansible.builtin.assert:
+ that: >
+ idrac_user_out.msg == "custom_privilege value should be from 0 to
+ 511."
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/default/molecule.yml b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/default/molecule.yml
new file mode 100644
index 000000000..326227dee
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/default/molecule.yml
@@ -0,0 +1,10 @@
+---
+provisioner:
+ name: ansible
+ playbooks:
+ cleanup: ../resources/idrac_user/cleanup.yml
+scenario:
+ test_sequence:
+ - cleanup
+ - converge
+ - destroy
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/resources/idrac_user/cleanup.yml b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/resources/idrac_user/cleanup.yml
new file mode 100644
index 000000000..6b1aea81f
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/resources/idrac_user/cleanup.yml
@@ -0,0 +1,17 @@
+---
+- name: Cleanup
+ hosts: all
+ gather_facts: false
+ vars:
+ idrac_user_name: "moleculeTest"
+ tasks:
+ - name: Deleting iDRAC user
+ ansible.builtin.import_role:
+ name: idrac_user
+ vars:
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
+ validate_certs: false
+ state: absent
+ user_name: "{{ idrac_user_name }}"
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/resources/idrac_user/get_user_info.yml b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/resources/idrac_user/get_user_info.yml
new file mode 100644
index 000000000..c8151b698
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/resources/idrac_user/get_user_info.yml
@@ -0,0 +1,9 @@
+---
+- name: Fetching user info
+ dellemc.openmanage.idrac_user_info:
+ idrac_ip: "{{ lookup('env', 'IDRAC_IP') }}"
+ idrac_user: "{{ lookup('env', 'IDRAC_USER') }}"
+ idrac_password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
+ validate_certs: false
+ username: "{{ idrac_user_name | default(omit) }}"
+ register: user_details
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_user/tasks/absent.yml b/ansible_collections/dellemc/openmanage/roles/idrac_user/tasks/absent.yml
new file mode 100644
index 000000000..619d70281
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_user/tasks/absent.yml
@@ -0,0 +1,14 @@
+---
+- name: Delete existing iDRAC user account
+ dellemc.openmanage.idrac_user:
+ idrac_ip: "{{ hostname }}"
+ idrac_user: "{{ username | default(omit) }}"
+ idrac_password: "{{ password | default(omit) }}"
+ idrac_port: "{{ https_port }}"
+ ca_path: "{{ ca_path | default(omit) }}"
+ validate_certs: "{{ validate_certs }}"
+ state: "{{ state }}"
+ user_name: "{{ user_name }}"
+ timeout: "{{ https_timeout }}"
+ register: idrac_user_out
+ delegate_to: "{{ idrac_user_delegate }}"
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_user/tasks/get_user.yml b/ansible_collections/dellemc/openmanage/roles/idrac_user/tasks/get_user.yml
new file mode 100644
index 000000000..669743cc2
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_user/tasks/get_user.yml
@@ -0,0 +1,22 @@
+---
+- name: Set user_name based on new_user_name
+ ansible.builtin.set_fact:
+ idrac_user_present_name: "{{ new_user_name if new_user_name is defined else user_name }}"
+
+- name: Fetch user account details
+ dellemc.openmanage.idrac_user_info:
+ idrac_ip: "{{ hostname }}"
+ idrac_user: "{{ username | default(omit) }}"
+ idrac_password: "{{ password | default(omit) }}"
+ idrac_port: "{{ https_port }}"
+ ca_path: "{{ ca_path | default(omit) }}"
+ validate_certs: "{{ validate_certs }}"
+ username: "{{ idrac_user_present_name }}"
+ timeout: "{{ https_timeout }}"
+ register: idrac_user_account
+ delegate_to: "{{ idrac_user_delegate }}"
+
+- name: Extracting user account details
+ ansible.builtin.set_fact:
+ idrac_user_account: "{{ idrac_user_account.user_info[0] |
+ ansible.utils.remove_keys('Keys') }}"
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_user/tasks/main.yml b/ansible_collections/dellemc/openmanage/roles/idrac_user/tasks/main.yml
new file mode 100644
index 000000000..2ba2f734f
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_user/tasks/main.yml
@@ -0,0 +1,10 @@
+---
+# tasks file for idrac_user
+
+- name: Create or modify user
+ ansible.builtin.include_tasks: present.yml
+ when: state == "present"
+
+- name: Delete user
+ ansible.builtin.include_tasks: absent.yml
+ when: state == "absent"
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_user/tasks/present.yml b/ansible_collections/dellemc/openmanage/roles/idrac_user/tasks/present.yml
new file mode 100644
index 000000000..3997f441b
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_user/tasks/present.yml
@@ -0,0 +1,29 @@
+---
+- name: Create or modify a iDRAC user
+ dellemc.openmanage.idrac_user:
+ idrac_ip: "{{ hostname }}"
+ idrac_user: "{{ username | default(omit) }}"
+ idrac_password: "{{ password | default(omit) }}"
+ idrac_port: "{{ https_port }}"
+ ca_path: "{{ ca_path | default(omit) }}"
+ validate_certs: "{{ validate_certs }}"
+ state: "{{ state }}"
+ user_name: "{{ user_name }}"
+ user_password: "{{ user_password | default(omit) }}"
+ new_user_name: "{{ new_user_name | default(omit) }}"
+ privilege: "{{ privilege | default(omit) }}"
+ custom_privilege: "{{ custom_privilege | default(omit) }}"
+ ipmi_lan_privilege: "{{ ipmi_lan_privilege | default(omit) }}"
+ ipmi_serial_privilege: "{{ ipmi_serial_privilege | default(omit) }}"
+ enable: "{{ enable | default(omit) }}"
+ sol_enable: "{{ sol_enable | default(omit) }}"
+ protocol_enable: "{{ protocol_enable | default(omit) }}"
+ authentication_protocol: "{{ authentication_protocol | default(omit) }}"
+ privacy_protocol: "{{ privacy_protocol | default(omit) }}"
+ timeout: "{{ https_timeout }}"
+ register: idrac_user_out
+ delegate_to: "{{ idrac_user_delegate }}"
+
+- name: Fetch user account information
+ ansible.builtin.include_tasks: get_user.yml
+ when: idrac_user_out.changed and not ansible_check_mode
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_user/tests/inventory b/ansible_collections/dellemc/openmanage/roles/idrac_user/tests/inventory
new file mode 100644
index 000000000..878877b07
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_user/tests/inventory
@@ -0,0 +1,2 @@
+localhost
+
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_user/tests/test.yml b/ansible_collections/dellemc/openmanage/roles/idrac_user/tests/test.yml
new file mode 100644
index 000000000..a3a34d106
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_user/tests/test.yml
@@ -0,0 +1,6 @@
+---
+- name: Executing idrac user
+ hosts: localhost
+ remote_user: root
+ roles:
+ - idrac_user
diff --git a/ansible_collections/dellemc/openmanage/roles/idrac_user/vars/main.yml b/ansible_collections/dellemc/openmanage/roles/idrac_user/vars/main.yml
new file mode 100644
index 000000000..86d2a24e3
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/idrac_user/vars/main.yml
@@ -0,0 +1,12 @@
+---
+# vars file for idrac_user
+idrac_user_delegate:
+ "{{ lookup('ansible.builtin.env', 'RUNON', default='localhost') }}"
+idrac_user_uri_headers:
+ Accept: "application/json"
+ Content-Type: "application/json"
+idrac_user_uri_body_format: "json"
+idrac_user_uri_status_code: 200
+idrac_user_uri_return_content: true
+idrac_user_force_basic_auth: true
+idrac_user_uri_method: GET
diff --git a/ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/__create_virtual_drive.yml b/ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/__create_virtual_drive.yml
new file mode 100644
index 000000000..664d596e6
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/__create_virtual_drive.yml
@@ -0,0 +1,29 @@
+---
+- name: Setting controller ID
+ ansible.builtin.set_fact:
+ redfish_storage_volume_controller_id: "{{ lookup('env', 'CONTROLLER_ID') }}"
+
+- name: Pre-req Create a volume.
+ ansible.builtin.import_role:
+ name: redfish_storage_volume
+ vars:
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
+ validate_certs: false
+ state: present
+ raid_type: "RAID0"
+ name: "VD" # noqa: var-naming[no-reserved]
+ controller_id: "{{ redfish_storage_volume_controller_id }}"
+ drives: "{{ lookup('env', 'PHYSICAL_DISK') }}"
+ job_wait: true
+ check_mode: false
+
+- name: Fetching Volume_id from iDRAC
+ ansible.builtin.include_tasks: ../__get_helper.yml
+ vars:
+ url: "Systems/System.Embedded.1/Storage/{{ redfish_storage_volume_controller_id }}/Volumes"
+
+- name: Extracting volume_id
+ ansible.builtin.set_fact:
+ redfish_storage_volume_id: "{{ (redfish_storage_volume_fetched_output.json.Members | last)['@odata.id'] | ansible.builtin.split('/') | last }}"
diff --git a/ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/__job_track.yml b/ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/__job_track.yml
new file mode 100644
index 000000000..4feafacaf
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/__job_track.yml
@@ -0,0 +1,17 @@
+---
+- name: Track job
+ ansible.builtin.uri:
+ url: "https://{{ lookup('env', 'IDRAC_IP') }}/redfish/v1/Managers/iDRAC.Embedded.1/Oem/Dell/Jobs/{{ job_id }}"
+ user: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
+ method: GET
+ force_basic_auth: true
+ validate_certs: false
+ status_code: 200
+ headers: 'Accept=application/json'
+ register: redfish_storage_volume_job_wait
+ until: redfish_storage_volume_job_wait.json.JobState == "Completed" or redfish_storage_volume_job_wait.json.JobState == "Failed"
+ failed_when: redfish_storage_volume_job_wait.json.JobState == "Failed"
+ retries: 20
+ delay: 30
+ check_mode: false
diff --git a/ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/default/converge.yml b/ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/default/converge.yml
index 72b2e5977..221fe3bbd 100644
--- a/ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/default/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/default/converge.yml
@@ -8,7 +8,7 @@
ansible.builtin.import_role:
name: redfish_storage_volume
vars:
- hostname: "{{ lookup('env', 'INVALID_IDRAC_IP') }}"
+ hostname: "192.168.1.1"
username: "{{ lookup('env', 'IDRAC_USER') }}"
password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
@@ -23,6 +23,7 @@
job_wait: false
ignore_errors: true
register: redfish_storage_volume_result
+ ignore_unreachable: true
- name: Asserting after performing operation.
ansible.builtin.assert:
@@ -35,7 +36,7 @@
vars:
hostname: "{{ lookup('env', 'IDRAC_IP') }}"
username: "{{ lookup('env', 'IDRAC_USER') }}"
- password: "{{ lookup('env', 'INVALID_IDRAC_PASSWORD') }}"
+ password: "invalid_password"
validate_certs: false
state: present
volume_type: "NonRedundant"
@@ -78,6 +79,7 @@
ansible.builtin.assert:
that: |-
redfish_storage_volume_out.msg == "HTTP Error 400: Bad Request"
+ when: not ansible_check_mode
- name: To check the behaviour of invalid certificate path.
ansible.builtin.import_role:
@@ -87,7 +89,7 @@
username: "{{ lookup('env', 'IDRAC_USER') }}"
password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: true
- ca_path: "{{ lookup('env', 'INVALID_CERT_PATH') }}"
+ ca_path: "/tmp/invalid_ca_path.pem"
state: present
volume_type: "SpannedStripesWithParity"
name: "VD" # noqa: var-naming[no-reserved]
@@ -99,6 +101,7 @@
job_wait: false
ignore_errors: true
register: redfish_storage_volume_result
+ ignore_unreachable: true
- name: Asserting after performing operation for invalid certificate path.
ansible.builtin.assert:
@@ -127,6 +130,6 @@
- name: Asserting after performing operation for invalid volume type.
ansible.builtin.assert:
- that: |-
+ that: >
redfish_storage_volume_out.msg == "value of volume_type must be one of: NonRedundant, Mirrored,
StripedWithParity, SpannedMirrors, SpannedStripesWithParity, got: InvalidMirrored"
diff --git a/ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/initialization/converge.yml b/ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/initialization/converge.yml
index a76faebd4..4c0bdeba1 100644
--- a/ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/initialization/converge.yml
+++ b/ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/initialization/converge.yml
@@ -13,43 +13,65 @@
password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
validate_certs: false
command: initialize
- volume_id: "{{ lookup('env', 'INVALID_VOLUME_ID') }}"
+ volume_id: "invalid_volume_id"
initialize_type: "Fast"
ignore_errors: true
register: redfish_storage_volume_result
- name: Asserting operation for initialization of type Fast.
ansible.builtin.assert:
- that: redfish_storage_volume_out.msg == "Specified Volume Id Disk.Virtual.0:RAID.Mezzanine.1C-1-test does not exist in the System."
+ that: redfish_storage_volume_out.msg == "Specified Volume Id invalid_volume_id does not exist in the System."
- - name: To check the behaviour of Initialization type Fast.
- ansible.builtin.import_role:
- name: redfish_storage_volume
- vars:
- hostname: "{{ lookup('env', 'IDRAC_IP') }}"
- username: "{{ lookup('env', 'IDRAC_USER') }}"
- password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
- validate_certs: false
- command: initialize
- volume_id: "{{ lookup('env', 'VOLUME_ID') }}"
- initialize_type: "Fast"
+ - name: Running for Initialization type scenarios
+ block:
+ - name: Pre-req Create a volume.
+ ansible.builtin.include_tasks:
+ file: ../__create_virtual_drive.yml
- - name: Asserting operation for initialization type Fast.
- ansible.builtin.assert:
- that: redfish_storage_volume_out.msg == "Successfully submitted initialize volume task."
+ - name: To check the behaviour of Initialization type Fast.
+ ansible.builtin.import_role:
+ name: redfish_storage_volume
+ vars:
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
+ validate_certs: false
+ command: initialize
+ volume_id: "{{ redfish_storage_volume_id }}"
+ initialize_type: "Fast"
+ job_wait: false
- - name: To check the behaviour of Initialization type Slow.
- ansible.builtin.import_role:
- name: redfish_storage_volume
- vars:
- hostname: "{{ lookup('env', 'IDRAC_IP') }}"
- username: "{{ lookup('env', 'IDRAC_USER') }}"
- password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
- validate_certs: false
- command: initialize
- volume_id: "{{ lookup('env', 'VOLUME_ID') }}"
- initialize_type: "Slow"
+ - name: Asserting operation for initialization type Fast.
+ ansible.builtin.assert:
+ that: redfish_storage_volume_out.msg == "Successfully submitted initialize volume task."
- - name: Asserting operation for initialization type Slow.
- ansible.builtin.assert:
- that: redfish_storage_volume_out.msg == "Successfully submitted initialize volume task."
+ - name: Track the initialization job
+ ansible.builtin.include_tasks:
+ file: ../__job_track.yml
+ vars:
+ job_id: "{{ redfish_storage_volume_out.job_status.Id }}"
+
+ - name: To check the behaviour of Initialization type Slow.
+ ansible.builtin.import_role:
+ name: redfish_storage_volume
+ vars:
+ hostname: "{{ lookup('env', 'IDRAC_IP') }}"
+ username: "{{ lookup('env', 'IDRAC_USER') }}"
+ password: "{{ lookup('env', 'IDRAC_PASSWORD') }}"
+ validate_certs: false
+ command: initialize
+ volume_id: "{{ redfish_storage_volume_id }}"
+ initialize_type: "Slow"
+ job_wait: true
+
+ - name: Asserting operation for initialization type Slow.
+ ansible.builtin.assert:
+ that: redfish_storage_volume_out.msg == "The job is successfully completed."
+
+ always:
+ - name: Deleting VD
+ ansible.builtin.include_tasks:
+ file: ../__delete_virtual_drive.yml
+ when:
+ - not ansible_check_mode
+ - redfish_storage_volume_id is defined
diff --git a/ansible_collections/dellemc/openmanage/tests/unit/plugins/module_utils/test_idrac_redfish.py b/ansible_collections/dellemc/openmanage/tests/unit/plugins/module_utils/test_idrac_redfish.py
index fc3b3543d..8d83057e9 100644
--- a/ansible_collections/dellemc/openmanage/tests/unit/plugins/module_utils/test_idrac_redfish.py
+++ b/ansible_collections/dellemc/openmanage/tests/unit/plugins/module_utils/test_idrac_redfish.py
@@ -44,7 +44,7 @@ class TestIdracRedfishRest(object):
@pytest.fixture
def module_params(self):
- module_parameters = {'idrac_ip': '192.168.0.1', 'idrac_user': 'username',
+ module_parameters = {'idrac_ip': 'xxx.xxx.x.x', 'idrac_user': 'username',
'idrac_password': 'password', 'idrac_port': '443'}
return module_parameters
@@ -125,7 +125,7 @@ class TestIdracRedfishRest(object):
])
def test_build_url(self, query_params, mocker, idrac_redfish_object):
"""builds complete url"""
- base_uri = 'https://192.168.0.1:443/api'
+ base_uri = 'https://xxx.xxx.x.x:443/api'
path = "/AccountService/Accounts"
mocker.patch(MODULE_UTIL_PATH + 'idrac_redfish.iDRACRedfishAPI._get_url',
return_value=base_uri + path)
@@ -137,7 +137,7 @@ class TestIdracRedfishRest(object):
def test_build_url_none(self, mocker, idrac_redfish_object):
"""builds complete url"""
- base_uri = 'https://192.168.0.1:443/api'
+ base_uri = 'https://xxx.xxx.x.x:443/api'
mocker.patch(MODULE_UTIL_PATH + 'redfish.Redfish._get_base_url',
return_value=base_uri)
url = idrac_redfish_object._build_url("", None)
diff --git a/ansible_collections/dellemc/openmanage/tests/unit/plugins/module_utils/test_ome.py b/ansible_collections/dellemc/openmanage/tests/unit/plugins/module_utils/test_ome.py
index 93892a744..60c5341a1 100644
--- a/ansible_collections/dellemc/openmanage/tests/unit/plugins/module_utils/test_ome.py
+++ b/ansible_collections/dellemc/openmanage/tests/unit/plugins/module_utils/test_ome.py
@@ -47,7 +47,7 @@ class TestOMERest(object):
@pytest.fixture
def module_params(self):
- module_parameters = {'hostname': '192.168.0.1', 'username': 'username',
+ module_parameters = {'hostname': 'xxx.xxx.x.x', 'username': 'username',
'password': 'password', "port": 443}
return module_parameters
@@ -150,7 +150,7 @@ class TestOMERest(object):
])
def test_build_url(self, query_param, mocker, module_params):
"""builds complete url"""
- base_uri = 'https://192.168.0.1:443/api'
+ base_uri = 'https://xxx.xxx.x.x:443/api'
path = "AccountService/Accounts"
mocker.patch(MODULE_UTIL_PATH + 'ome.RestOME._get_base_url',
return_value=base_uri)
diff --git a/ansible_collections/dellemc/openmanage/tests/unit/plugins/module_utils/test_redfish.py b/ansible_collections/dellemc/openmanage/tests/unit/plugins/module_utils/test_redfish.py
index 2e092af15..1dd3ab8b4 100644
--- a/ansible_collections/dellemc/openmanage/tests/unit/plugins/module_utils/test_redfish.py
+++ b/ansible_collections/dellemc/openmanage/tests/unit/plugins/module_utils/test_redfish.py
@@ -39,7 +39,7 @@ class TestRedfishRest(object):
@pytest.fixture
def module_params(self):
- module_parameters = {'baseuri': '192.168.0.1:443', 'username': 'username',
+ module_parameters = {'baseuri': 'xxx.xxx.x.x:443', 'username': 'username',
'password': 'password'}
return module_parameters
@@ -120,7 +120,7 @@ class TestRedfishRest(object):
])
def test_build_url(self, query_params, mocker, redfish_object):
"""builds complete url"""
- base_uri = 'https://192.168.0.1:443/api'
+ base_uri = 'https://xxx.xxx.x.x:443/api'
path = "/AccountService/Accounts"
mocker.patch(MODULE_UTIL_PATH + 'redfish.Redfish._get_base_url',
return_value=base_uri)
@@ -132,7 +132,7 @@ class TestRedfishRest(object):
def test_build_url_none(self, mocker, redfish_object):
"""builds complete url"""
- base_uri = 'https://192.168.0.1:443/api'
+ base_uri = 'https://xxx.xxx.x.x:443/api'
mocker.patch(MODULE_UTIL_PATH + 'redfish.Redfish._get_base_url',
return_value=base_uri)
url = redfish_object._build_url("", None)
diff --git a/ansible_collections/dellemc/openmanage/tests/unit/plugins/module_utils/test_session_utils.py b/ansible_collections/dellemc/openmanage/tests/unit/plugins/module_utils/test_session_utils.py
new file mode 100644
index 000000000..c53c81b01
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/tests/unit/plugins/module_utils/test_session_utils.py
@@ -0,0 +1,415 @@
+# -*- coding: utf-8 -*-
+
+#
+# Dell OpenManage Ansible Modules
+# Version 9.2.0
+# Copyright (C) 2024 Dell Inc.
+
+# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
+# All rights reserved. Dell, EMC, and other trademarks are trademarks of Dell Inc. or its subsidiaries.
+# Other trademarks may be trademarks of their respective owners.
+#
+
+from __future__ import (absolute_import, division, print_function)
+
+__metaclass__ = type
+
+import os
+import json
+import pytest
+from mock import MagicMock
+from ansible.module_utils.urls import SSLValidationError
+from ansible.module_utils.six.moves.urllib.error import URLError, HTTPError
+from ansible_collections.dellemc.openmanage.plugins.module_utils.session_utils import SessionAPI, OpenURLResponse
+
+MODULE_UTIL_PATH = 'ansible_collections.dellemc.openmanage.plugins.module_utils.'
+OPEN_URL = 'session_utils.open_url'
+TEST_PATH = "/testpath"
+INVOKE_REQUEST = 'session_utils.SessionAPI.invoke_request'
+JOB_COMPLETE = 'session_utils.SessionAPI.wait_for_job_complete'
+API_TASK = '/api/tasks'
+SLEEP_TIME = 'session_utils.time.sleep'
+
+
+class TestSessionRest(object):
+ """
+ Main class for testing the SessionUtils class.
+ """
+ @pytest.fixture
+ def mock_response(self):
+ """
+ Returns a MagicMock object representing a mock HTTP response.
+
+ The mock response has the following properties:
+ - `getcode()` method returns 200
+ - `headers` property is a dictionary containing the headers of the response
+ - `getheaders()` method returns the same dictionary as `headers`
+ - `read()` method returns a JSON string representing a dictionary with a "value" key and
+ "data" as its value
+
+ :return: A MagicMock object representing a mock HTTP response.
+ :rtype: MagicMock
+ """
+ mock_response = MagicMock()
+ mock_response.getcode.return_value = 200
+ mock_response.headers = mock_response.getheaders.return_value = {
+ 'X-Auth-Token': 'token_id'}
+ mock_response.read.return_value = json.dumps({"value": "data"})
+ return mock_response
+
+ @pytest.fixture
+ def module_params(self):
+ """
+ Fixture that returns a dictionary containing module parameters.
+
+ :return: A dictionary with the following keys:
+ - 'hostname': The hostname of the module.
+ - 'username': The username for authentication.
+ - 'password': The password for authentication.
+ - 'port': The port number for the module.
+ """
+ module_parameters = {'hostname': 'xxx.xxx.x.x', 'username': 'username',
+ 'password': 'password', 'port': '443'}
+ return module_parameters
+
+ @pytest.fixture
+ def session_utils_object(self, module_params):
+ """
+ Creates a SessionAPI object using the provided `module_params` and returns it.
+
+ :param module_params: A dictionary containing the parameters for the SessionAPI object.
+ :type module_params: dict
+ :return: A SessionAPI object.
+ :rtype: SessionAPI
+ """
+ session_utils_obj = SessionAPI(module_params)
+ return session_utils_obj
+
+ def test_invoke_request_with_session(self, mock_response, mocker, module_params):
+ """
+ Test the invoke_request method of the SessionAPI class with a session.
+
+ Args:
+ mock_response (MagicMock): A mocked response object.
+ mocker (MockerFixture): A fixture for mocking objects.
+ module_params (dict): The parameters for the module.
+
+ Returns:
+ None
+
+ Assertions:
+ - Asserts that the response status code is 200.
+ - Asserts that the response JSON data is {"value": "data"}.
+ - Asserts that the response success attribute is True.
+ """
+ mocker.patch(MODULE_UTIL_PATH + OPEN_URL,
+ return_value=mock_response)
+ obj = SessionAPI(module_params)
+ response = obj.invoke_request(TEST_PATH, "GET")
+ assert response.status_code == 200
+ assert response.json_data == {"value": "data"}
+ assert response.success is True
+
+ def test_invoke_request_without_session(self, mock_response, mocker):
+ """
+ Test the `invoke_request` method of the `SessionAPI` class without using a session.
+
+ This test case mocks the `open_url` function from the `MODULE_UTIL_PATH` module to return a
+ mock response.
+ It then creates an instance of the `SessionAPI` class with mock module parameters.
+ The `invoke_request` method is called with a test path and a GET method.
+ The test asserts that the response status code is 200, the response JSON data is
+ {"value": "data"},
+ and the response success flag is True.
+
+ Parameters:
+ - mock_response (MagicMock): A mock response object to be returned by the `open_url`
+ function.
+ - mocker (MockerFixture): A fixture provided by the pytest library for mocking
+ functions.
+
+ Returns:
+ None
+ """
+ mocker.patch(MODULE_UTIL_PATH + OPEN_URL,
+ return_value=mock_response)
+ module_params = {'hostname': 'XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX', 'username':
+ 'username',
+ 'password': 'password', "port": '443'}
+ obj = SessionAPI(module_params)
+ response = obj.invoke_request(TEST_PATH, "GET")
+ assert response.status_code == 200
+ assert response.json_data == {"value": "data"}
+ assert response.success is True
+
+ def test_invoke_request_without_session_with_header(self, mock_response, mocker,
+ module_params):
+ """
+ Test the `invoke_request` method of the `SessionAPI` class when a session is not used and a
+ header is provided.
+
+ This test method mocks the `open_url` function from the `module_utils` module to return a
+ mock response object. It then creates an instance of the `SessionAPI` class with the
+ provided `module_params`. The `invoke_request` method is called with a test path, a request
+ method of "POST", and a headers dictionary containing a single key-value pair.
+
+ The test asserts that the response status code is 200, the response JSON data is
+ `{"value": "data"}`, and the response success flag is `True`.
+
+ Parameters:
+ - `mock_response` (MagicMock): A mock response object to be returned by the `open_url`
+ function.
+ - `mocker` (MockerFixture): A fixture for patching and mocking objects.
+ - `module_params` (dict): A dictionary containing the module parameters.
+
+ Returns:
+ None
+ """
+ mocker.patch(MODULE_UTIL_PATH + OPEN_URL,
+ return_value=mock_response)
+ obj = SessionAPI(module_params)
+ response = obj.invoke_request(TEST_PATH, "POST", headers={"application": "octstream"})
+ assert response.status_code == 200
+ assert response.json_data == {"value": "data"}
+ assert response.success is True
+
+ @pytest.mark.parametrize("exc", [URLError, SSLValidationError, ConnectionError])
+ def test_invoke_request_error_case_handling(self, exc, mocker, module_params):
+ """
+ Test the error handling in the `invoke_request` method of the `SessionAPI` class.
+
+ This function tests the handling of different types of exceptions that can occur during an
+ HTTP request. It uses the `pytest.mark.parametrize` decorator to run the test multiple
+ times with different exception types. The test mocks the `open_url` method of the
+ `SessionAPI` class to raise the specified exception. It then asserts that the correct
+ exception is raised when calling the `invoke_request` method.
+
+ Args:
+ exc (Exception): The exception type to test.
+ mocker (MockerFixture): The mocker fixture used for mocking dependencies.
+ module_params (dict): The parameters for the `SessionAPI` object.
+
+ Raises:
+ exc: The specified exception type if it is raised during the `invoke_request` call.
+ """
+ mocker.patch(MODULE_UTIL_PATH + OPEN_URL,
+ side_effect=exc("test"))
+ with pytest.raises(exc):
+ obj = SessionAPI(module_params)
+ obj.invoke_request(TEST_PATH, "GET")
+
+ def test_invoke_request_http_error_handling(self, mock_response, mocker, module_params):
+ """
+ Test the HTTP error handling in the `invoke_request` method of the `SessionAPI` class.
+
+ Args:
+ mock_response (Mock): A mock object representing the response from the HTTP request.
+ mocker (MockerFixture): A fixture for mocking objects.
+ module_params (dict): The parameters for the module.
+
+ Raises:
+ HTTPError: If an HTTP error occurs during the invocation of the request.
+
+ Returns:
+ None
+ """
+ open_url_mock = mocker.patch(MODULE_UTIL_PATH + OPEN_URL,
+ return_value=mock_response)
+ open_url_mock.side_effect = HTTPError('https://testhost.com/', 400,
+ 'Bad Request Error', {}, None)
+ with pytest.raises(HTTPError):
+ obj = SessionAPI(module_params)
+ obj.invoke_request(TEST_PATH, "GET")
+
+ @pytest.mark.parametrize("query_params", [
+ {"inp": {"$filter": "UserName eq 'admin'"},
+ "out": "%24filter=UserName+eq+%27admin%27"},
+ {"inp": {"$top": 1, "$skip": 2, "$filter": "JobType/Id eq 8"}, "out":
+ "%24top=1&%24skip=2&%24filter=JobType%2FId+eq+8"},
+ {"inp": {"$top": 1, "$skip": 3}, "out": "%24top=1&%24skip=3"}
+ ])
+ def test_build_url(self, query_params, mocker, session_utils_object):
+ """
+ builds complete url
+ """
+ base_uri = 'https://xxx.xxx.x.x:443/api'
+ path = "/AccountService/Accounts"
+ mocker.patch(MODULE_UTIL_PATH + 'session_utils.SessionAPI._get_url',
+ return_value=base_uri + path)
+ inp = query_params["inp"]
+ out = query_params["out"]
+ url = session_utils_object._build_url(
+ path, query_param=inp)
+ assert url == base_uri + path + "?" + out
+
+ def test_build_url_none(self, mocker, session_utils_object):
+ """
+ builds complete url
+ """
+ base_uri = 'https://xxx.xxx.x.x:443/api'
+ mocker.patch(MODULE_UTIL_PATH + 'redfish.Redfish._get_base_url',
+ return_value=base_uri)
+ url = session_utils_object._build_url("", None)
+ assert url == ""
+
+ def test_invalid_json_openurlresp(self):
+ """
+ Test the behavior when an invalid JSON string is passed to the `OpenURLResponse` object.
+
+ This test case creates an instance of the `OpenURLResponse` class with an empty dictionary
+ as the initial data.
+ Then, it sets the `body` attribute of the object to an invalid JSON string.
+ Finally, it asserts that calling the `json_data` attribute raises a `ValueError` with the
+ message "Unable to parse json".
+
+ Parameters:
+ self (TestCase): The current test case instance.
+
+ Returns:
+ None
+ """
+ obj = OpenURLResponse({})
+ obj.body = 'invalid json'
+ with pytest.raises(ValueError) as e:
+ obj.json_data
+ assert e.value.args[0] == "Unable to parse json"
+
+ def test_reason(self):
+ """
+ Test the `reason` property of the `OpenURLResponse` class.
+
+ This test case mocks the `read` method of the `obj` object to return an empty JSON string.
+ It then creates an instance of the `OpenURLResponse` class with the mocked `obj` object.
+ The `reason` property of the `OpenURLResponse` instance is then accessed and stored in the
+ `reason_ret` variable. Finally, the test asserts that the value of `reason_ret` is equal to
+ the expected value of "returning reason".
+
+ Parameters:
+ self (TestCase): The test case object.
+
+ Returns:
+ None
+ """
+ def mock_read():
+ return "{}"
+ obj = MagicMock()
+ obj.reason = "returning reason"
+ obj.read = mock_read
+ ourl = OpenURLResponse(obj)
+ reason_ret = ourl.reason
+ assert reason_ret == "returning reason"
+
+ def test_requests_ca_bundle_set(self, mocker, mock_response, session_utils_object):
+ """
+ Test if the `REQUESTS_CA_BUNDLE` environment variable is set correctly.
+
+ This function tests if the `REQUESTS_CA_BUNDLE` environment variable is set to the expected
+ value. It does this by setting the environment variable to a specific path, patching the
+ `invoke_request` method of the `session_utils_object` to return a mock response, and then
+ calling the `_get_omam_ca_env` method of the `session_utils_object`. Finally, it asserts
+ that the result of the `_get_omam_ca_env` method is equal to the expected path.
+
+ Parameters:
+ - mocker (MockerFixture): A fixture provided by the pytest library used to patch the
+ `invoke_request` method.
+ - mock_response (Mock): A mock object representing the response returned by the
+ `invoke_request` method.
+ - session_utils_object (SessionUtils): An instance of the `SessionUtils` class.
+
+ Returns:
+ None
+ """
+ os.environ["REQUESTS_CA_BUNDLE"] = "/path/to/requests_ca_bundle.pem"
+ mocker.patch(MODULE_UTIL_PATH + INVOKE_REQUEST,
+ return_value=mock_response)
+ result = session_utils_object._get_omam_ca_env()
+ assert result == "/path/to/requests_ca_bundle.pem"
+ del os.environ["REQUESTS_CA_BUNDLE"]
+
+ def test_curl_ca_bundle_set(self, mocker, mock_response, session_utils_object):
+ """
+ Test the functionality of the `curl_ca_bundle_set` method.
+
+ This test case verifies that the `curl_ca_bundle_set` method correctly sets the
+ `CURL_CA_BUNDLE` environment variable and retrieves the value using the `_get_omam_ca_env`
+ method.
+
+ Parameters:
+ - mocker (MockerFixture): A fixture provided by the pytest-mock library used to patch
+ the `invoke_request` method.
+ - mock_response (MagicMock): A mock object representing the response returned by the
+ `invoke_request` method.
+ - session_utils_object (SessionUtils): An instance of the `SessionUtils` class.
+
+ Returns:
+ None
+
+ Raises:
+ AssertionError: If the retrieved value from `_get_omam_ca_env` does not match the
+ expected value.
+
+ Note:
+ - The test case sets the `CURL_CA_BUNDLE` environment variable to
+ "/path/to/curl_ca_bundle.pem" before executing the test.
+ - The test case deletes the `CURL_CA_BUNDLE` environment variable after the test is
+ completed.
+ """
+ os.environ["CURL_CA_BUNDLE"] = "/path/to/curl_ca_bundle.pem"
+ mocker.patch(MODULE_UTIL_PATH + INVOKE_REQUEST,
+ return_value=mock_response)
+ result = session_utils_object._get_omam_ca_env()
+ assert result == "/path/to/curl_ca_bundle.pem"
+ del os.environ["CURL_CA_BUNDLE"]
+
+ def test_omam_ca_bundle_set(self, mocker, mock_response, session_utils_object):
+ """
+ Test the functionality of the `_get_omam_ca_env` method in the `SessionUtils` class.
+
+ This test case verifies that the `_get_omam_ca_env` method correctly retrieves the value of
+ the `OMAM_CA_BUNDLE` environment variable and returns it.
+
+ Parameters:
+ - mocker (MockerFixture): A fixture provided by the pytest library used for mocking
+ objects.
+ - mock_response (MagicMock): A mock object representing the response returned by the
+ `invoke_request` method.
+ - session_utils_object (SessionUtils): An instance of the `SessionUtils` class.
+
+ Returns:
+ None
+
+ Raises:
+ AssertionError: If the returned value from `_get_omam_ca_env` does not match the
+ expected value.
+
+ Side Effects:
+ - Sets the value of the `OMAM_CA_BUNDLE` environment variable to
+ "/path/to/omam_ca_bundle.pem".
+ - Deletes the `OMAM_CA_BUNDLE` environment variable after the test case is complete.
+ """
+ os.environ["OMAM_CA_BUNDLE"] = "/path/to/omam_ca_bundle.pem"
+ mocker.patch(MODULE_UTIL_PATH + INVOKE_REQUEST,
+ return_value=mock_response)
+ result = session_utils_object._get_omam_ca_env()
+ assert result == "/path/to/omam_ca_bundle.pem"
+ del os.environ["OMAM_CA_BUNDLE"]
+
+ def test_no_env_variable_set(self, mocker, mock_response, session_utils_object):
+ """
+ Test the case when no environment variable is set.
+
+ Args:
+ mocker (MockerFixture): The mocker fixture used to mock functions and objects.
+ mock_response (MagicMock): The mock response object used to simulate API responses.
+ session_utils_object (SessionUtils): The SessionUtils object under test.
+
+ Returns:
+ None
+
+ Asserts:
+ - The result of the _get_omam_ca_env() method is None.
+ """
+ mocker.patch(MODULE_UTIL_PATH + INVOKE_REQUEST,
+ return_value=mock_response)
+ result = session_utils_object._get_omam_ca_env()
+ assert result is None
diff --git a/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_diagnostics.py b/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_diagnostics.py
new file mode 100644
index 000000000..987ff83d2
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_diagnostics.py
@@ -0,0 +1,1057 @@
+# -*- coding: utf-8 -*-
+
+#
+# Dell OpenManage Ansible Modules
+# Version 9.0.0
+# Copyright (C) 2024 Dell Inc. or its subsidiaries. All Rights Reserved.
+
+# 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
+
+from io import StringIO
+import json
+import tempfile
+
+import pytest
+from urllib.error import HTTPError, URLError
+from ansible.module_utils.urls import ConnectionError, SSLValidationError
+from ansible.module_utils._text import to_text
+from ansible_collections.dellemc.openmanage.plugins.modules import idrac_diagnostics
+from ansible_collections.dellemc.openmanage.tests.unit.plugins.modules.common import FakeAnsibleModule
+from mock import MagicMock
+from ansible_collections.dellemc.openmanage.plugins.modules.idrac_diagnostics import main
+
+MODULE_PATH = 'ansible_collections.dellemc.openmanage.plugins.modules.idrac_diagnostics.'
+MODULE_UTILS_PATH = 'ansible_collections.dellemc.openmanage.plugins.module_utils.utils.'
+
+SUCCESS_EXPORT_MSG = "Successfully exported the diagnostics."
+FAILURE_EXPORT_MSG = "Unable to copy the ePSA Diagnostics results file to the network share."
+SUCCESS_RUN_MSG = "Successfully ran the diagnostics operation."
+SUCCESS_RUN_AND_EXPORT_MSG = "Successfully ran and exported the diagnostics."
+RUNNING_RUN_MSG = "Successfully triggered the job to run diagnostics."
+ALREADY_RUN_MSG = "The diagnostics job is already present."
+INVALID_DIRECTORY_MSG = "Provided directory path '{path}' is not valid."
+NO_OPERATION_SKIP_MSG = "The operation is skipped."
+INSUFFICIENT_DIRECTORY_PERMISSION_MSG = "Provided directory path '{path}' is not writable. " \
+ "Please check if the directory has appropriate permissions"
+UNSUPPORTED_FIRMWARE_MSG = "iDRAC firmware version is not supported."
+TIMEOUT_NEGATIVE_OR_ZERO_MSG = "The parameter `job_wait_timeout` value cannot be negative or zero."
+WAIT_TIMEOUT_MSG = "The job is not complete after {0} seconds."
+START_TIME = "The specified scheduled time occurs in the past, " \
+ "provide a future time to schedule the job."
+INVALID_TIME = "The specified date and time `{0}` to schedule the diagnostics is not valid. Enter a valid date and time."
+END_START_TIME = "The end time `{0}` to schedule the diagnostics must be greater than the start time `{1}`."
+CHANGES_FOUND_MSG = "Changes found to be applied."
+NO_FILE = "The diagnostics file does not exist."
+
+PROXY_SERVER = "proxy.example.com"
+PAYLOAD_FUNC = "Diagnostics.get_payload_details"
+VALIDATE_TIME_FUNC = "RunDiagnostics._RunDiagnostics__validate_time"
+EXPORT_FUNC = "ExportDiagnostics._ExportDiagnostics__export_diagnostics"
+RUN_EXEC_FUNC = "RunDiagnostics.execute"
+MESSAGE_EXTENDED = "@Message.ExtendedInfo"
+DIAGS_ODATA = "/DiagnosticsService"
+REDFISH = "/redfish/v1"
+REDFISH_DIAGNOSTICS_URL = "/redfish/v1/diagnostics"
+REDFISH_BASE_API = '/redfish/v1/api'
+MANAGER_URI_ONE = "/redfish/v1/managers/1"
+API_ONE = "/local/action"
+EXPORT_URL_MOCK = '/redfish/v1/export_diagnostics'
+RUN_URL_MOCK = '/redfish/v1/import_diagnostics'
+API_INVOKE_MOCKER = "iDRACRedfishAPI.invoke_request"
+ODATA = "@odata.id"
+DIAGS_FILE_NAME = 'test_diagnostics.txt'
+SHARE_NAME = tempfile.gettempdir()
+IP = "X.X.X.X"
+HTTPS_PATH = "https://testhost.com"
+HTTP_ERROR = "http error message"
+APPLICATION_JSON = "application/json"
+
+
+class TestDiagnostics(FakeAnsibleModule):
+ module = idrac_diagnostics
+
+ @pytest.fixture
+ def idrac_diagnostics_mock(self):
+ idrac_obj = MagicMock()
+ return idrac_obj
+
+ @pytest.fixture
+ def idrac_connection_diagnostics_mock(self, mocker, idrac_diagnostics_mock):
+ idrac_conn_mock = mocker.patch(MODULE_PATH + 'iDRACRedfishAPI',
+ return_value=idrac_diagnostics_mock)
+ idrac_conn_mock.return_value.__enter__.return_value = idrac_diagnostics_mock
+ return idrac_conn_mock
+
+ def test_execute(self, idrac_default_args, idrac_connection_diagnostics_mock):
+ obj = MagicMock()
+ diagnostics_obj = self.module.Diagnostics(idrac_connection_diagnostics_mock, obj)
+ diagnostics_obj.execute()
+
+ def test_get_payload_details(self, idrac_connection_diagnostics_mock):
+ obj = MagicMock()
+ diags_obj = self.module.Diagnostics(idrac_connection_diagnostics_mock, obj)
+ # Scenario 1: With all values
+ obj.params.get.return_value = {
+ 'ip_address': IP,
+ 'share_name': 'my_share',
+ 'username': 'my_user',
+ 'password': 'my_password',
+ 'file_name': DIAGS_FILE_NAME,
+ 'share_type': 'http',
+ 'ignore_certificate_warning': 'on',
+ 'proxy_support': 'parameters_proxy',
+ 'proxy_type': 'socks',
+ 'proxy_server': PROXY_SERVER,
+ 'proxy_port': 8080,
+ 'proxy_username': 'my_username',
+ 'proxy_password': 'my_password'
+ }
+ result = diags_obj.get_payload_details()
+ expected_result = {
+ 'IPAddress': IP,
+ 'ShareName': 'my_share',
+ 'UserName': 'my_user',
+ 'Password': 'my_password',
+ 'FileName': DIAGS_FILE_NAME,
+ 'ShareType': 'HTTP',
+ 'IgnoreCertWarning': 'On',
+ 'ProxySupport': 'ParametersProxy',
+ 'ProxyType': 'SOCKS',
+ 'ProxyServer': PROXY_SERVER,
+ 'ProxyPort': '8080',
+ 'ProxyUname': 'my_username',
+ 'ProxyPasswd': 'my_password'
+ }
+ assert result == expected_result
+
+ # Scenario 2: With no proxy values
+ obj.params.get.return_value = {
+ 'ip_address': IP,
+ 'share_name': 'my_share',
+ 'username': 'my_user',
+ 'password': 'my_password',
+ 'file_name': DIAGS_FILE_NAME,
+ 'share_type': 'http',
+ 'ignore_certificate_warning': 'on'
+ }
+ result = diags_obj.get_payload_details()
+ expected_result = {
+ 'IPAddress': IP,
+ 'ShareName': 'my_share',
+ 'UserName': 'my_user',
+ 'Password': 'my_password',
+ 'FileName': DIAGS_FILE_NAME,
+ 'ShareType': 'HTTP',
+ 'IgnoreCertWarning': 'On'
+ }
+ assert result == expected_result
+
+ # Scenario 3: With no proxy username and password values
+ obj.params.get.return_value = {
+ 'ip_address': IP,
+ 'share_name': 'my_share',
+ 'username': 'my_user',
+ 'password': 'my_password',
+ 'file_name': DIAGS_FILE_NAME,
+ 'share_type': 'http',
+ 'ignore_certificate_warning': 'on',
+ 'proxy_support': 'parameters_proxy',
+ 'proxy_type': 'socks',
+ 'proxy_server': PROXY_SERVER,
+ 'proxy_port': 8080
+ }
+ result = diags_obj.get_payload_details()
+ expected_result = {
+ 'IPAddress': IP,
+ 'ShareName': 'my_share',
+ 'UserName': 'my_user',
+ 'Password': 'my_password',
+ 'FileName': DIAGS_FILE_NAME,
+ 'ShareType': 'HTTP',
+ 'IgnoreCertWarning': 'On',
+ 'ProxySupport': 'ParametersProxy',
+ 'ProxyType': 'SOCKS',
+ 'ProxyServer': PROXY_SERVER,
+ 'ProxyPort': '8080'
+ }
+ assert result == expected_result
+
+ def test_network_share(self, idrac_connection_diagnostics_mock, idrac_default_args, mocker):
+ # Scenario 1: ShareType is LOCAL and directory is invalid
+ payload = {"FileName": DIAGS_FILE_NAME, "ShareType": "LOCAL", "ShareName": "my_share"}
+ mocker.patch(MODULE_PATH + PAYLOAD_FUNC, return_value=payload)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
+ diagnostics_obj = self.module.Diagnostics(idrac_connection_diagnostics_mock, f_module)
+ with pytest.raises(Exception) as exc:
+ diagnostics_obj.test_network_share()
+ assert exc.value.args[0] == INVALID_DIRECTORY_MSG.format(path="my_share")
+
+ # Scenario 2: ShareType is LOCAL and directory is not writable
+ payload = {"FileName": DIAGS_FILE_NAME, "ShareType": "HTTP", "ShareName": SHARE_NAME}
+ mocker.patch(MODULE_PATH + PAYLOAD_FUNC, return_value=payload)
+ mocker.patch(MODULE_PATH + "Diagnostics.get_test_network_share_url", return_value=API_ONE)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
+ diagnostics_obj = self.module.Diagnostics(idrac_connection_diagnostics_mock, f_module)
+ ob = diagnostics_obj.test_network_share()
+ assert ob is None
+
+ # Scenario 3: ShareType is not LOCAL
+ obj = MagicMock()
+ payload = {"FileName": DIAGS_FILE_NAME, "ShareType": "HTTP", "ShareName": "my_share"}
+ mocker.patch(MODULE_PATH + PAYLOAD_FUNC, return_value=payload)
+ mocker.patch(MODULE_PATH + "Diagnostics.get_test_network_share_url", return_value=API_ONE)
+ mocker.patch(MODULE_PATH + API_INVOKE_MOCKER, return_value=obj)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
+ diagnostics_obj = self.module.Diagnostics(idrac_connection_diagnostics_mock, f_module)
+ diagnostics_obj.test_network_share()
+
+ # Scenario 4: HTTP Error
+ payload = {"FileName": DIAGS_FILE_NAME, "ShareType": "HTTP", "ShareName": "my_share"}
+ mocker.patch(MODULE_PATH + PAYLOAD_FUNC, return_value=payload)
+ json_str = to_text(json.dumps({"error": {MESSAGE_EXTENDED: [
+ {
+ 'MessageId': "123",
+ "Message": "Error"
+ }
+ ]}}))
+ mocker.patch(MODULE_PATH + API_INVOKE_MOCKER,
+ side_effect=HTTPError(HTTPS_PATH, 400,
+ HTTP_ERROR,
+ {"accept-type": APPLICATION_JSON},
+ StringIO(json_str)))
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
+ diagnostics_obj = self.module.Diagnostics(idrac_connection_diagnostics_mock, f_module)
+ with pytest.raises(Exception) as exc:
+ diagnostics_obj.test_network_share()
+ assert exc.value.args[0] == 'Error'
+
+ def test_get_test_network_share_url(self, idrac_connection_diagnostics_mock, idrac_default_args, mocker):
+ mocker.patch(MODULE_PATH + "validate_and_get_first_resource_id_uri",
+ return_value=(REDFISH, None))
+ mocker.patch(MODULE_PATH + "get_dynamic_uri",
+ return_value={"Links": {"Oem": {"Dell": {"DellLCService": {ODATA: DIAGS_ODATA}}}},
+ "Actions": {"#DellLCService.TestNetworkShare": {"target": API_ONE}}})
+
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
+ obj = self.module.Diagnostics(idrac_connection_diagnostics_mock, f_module)
+ resp = obj.get_test_network_share_url()
+ assert resp == API_ONE
+
+ # Scenario 2: for error message
+ mocker.patch(MODULE_PATH + "validate_and_get_first_resource_id_uri",
+ return_value=(REDFISH, "Error"))
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
+ obj = self.module.Diagnostics(idrac_connection_diagnostics_mock, f_module)
+ with pytest.raises(Exception) as exc:
+ obj.get_test_network_share_url()
+ assert exc.value.args[0] == "Error"
+
+
+class TestRunDiagnostics(FakeAnsibleModule):
+ module = idrac_diagnostics
+
+ @pytest.fixture
+ def idrac_diagnostics_mock(self):
+ idrac_obj = MagicMock()
+ return idrac_obj
+
+ @pytest.fixture
+ def idrac_connection_diagnostics_mock(self, mocker, idrac_diagnostics_mock):
+ idrac_conn_mock = mocker.patch(MODULE_PATH + 'iDRACRedfishAPI',
+ return_value=idrac_diagnostics_mock)
+ idrac_conn_mock.return_value.__enter__.return_value = idrac_diagnostics_mock
+ return idrac_conn_mock
+
+ def test_execute(self, idrac_default_args, idrac_connection_diagnostics_mock, mocker):
+ obj = MagicMock()
+ obj.status_code = 200
+ # Scenario 1: JobState is completed
+ job = {"JobState": "Completed"}
+ mocker.patch(MODULE_PATH + "Diagnostics.test_network_share", return_value=None)
+ mocker.patch(MODULE_PATH + "RunDiagnostics._RunDiagnostics__get_run_diagnostics_url", return_value=None)
+ mocker.patch(MODULE_PATH + "RunDiagnostics.check_diagnostics_jobs", return_value=None)
+ mocker.patch(MODULE_PATH + "RunDiagnostics._RunDiagnostics__run_diagnostics", return_value=obj)
+ mocker.patch(MODULE_PATH + "RunDiagnostics._RunDiagnostics__perform_job_wait", return_value=job)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ run_diagnostics_obj = self.module.RunDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ msg, job_status, file_path = run_diagnostics_obj.execute()
+ assert msg == SUCCESS_RUN_MSG
+ assert job_status == job
+ assert file_path is None
+
+ # Scenario 2: JobState is scheduled
+ job = {"JobState": "Scheduled"}
+ idrac_default_args.update({'export': True})
+ mocker.patch(MODULE_PATH + "RunDiagnostics._RunDiagnostics__perform_job_wait", return_value=job)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ run_diagnostics_obj = self.module.RunDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ msg, job_status, file_path = run_diagnostics_obj.execute()
+ assert msg == RUNNING_RUN_MSG
+ assert job_status == job
+ assert file_path is None
+
+ def test_run_diagnostics(self, idrac_default_args, idrac_connection_diagnostics_mock, mocker):
+ obj = MagicMock()
+ obj.status_code = 200
+ mocker.patch(MODULE_PATH + "RunDiagnostics._RunDiagnostics__get_run_diagnostics_url", return_value=API_ONE)
+ mocker.patch(MODULE_PATH + "RunDiagnostics._RunDiagnostics__validate_time_format", return_value=True)
+ mocker.patch(MODULE_PATH + VALIDATE_TIME_FUNC, return_value=True)
+ mocker.patch(MODULE_PATH + "RunDiagnostics._RunDiagnostics__validate_end_time", return_value=True)
+ mocker.patch(MODULE_PATH + API_INVOKE_MOCKER, return_value=obj)
+
+ # Scenario 1: With start and end time
+ run_params = {
+ 'run_mode': 'express',
+ 'reboot_type': 'power_cycle',
+ 'scheduled_start_time': '20240715235959',
+ 'scheduled_end_time': '20250715235959'
+ }
+ idrac_default_args.update(run_params)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ run_diagnostics_obj = self.module.RunDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ status = run_diagnostics_obj._RunDiagnostics__run_diagnostics()
+ assert status == obj
+
+ # Scenario 2: Without time
+ run_params = {
+ 'run_mode': 'express',
+ 'reboot_type': 'force'
+ }
+ idrac_default_args.update(run_params)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ run_diagnostics_obj = self.module.RunDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ status = run_diagnostics_obj._RunDiagnostics__run_diagnostics()
+ assert status == obj
+
+ # Scenario 3: With start and end time as empty
+ run_params = {
+ 'run_mode': 'express',
+ 'reboot_type': 'power_cycle',
+ 'scheduled_start_time': '',
+ 'scheduled_end_time': ''
+ }
+ idrac_default_args.update(run_params)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ run_diagnostics_obj = self.module.RunDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ status = run_diagnostics_obj._RunDiagnostics__run_diagnostics()
+ assert status == obj
+
+ # Scenario 4: With start time
+ run_params = {
+ 'run_mode': 'express',
+ 'reboot_type': 'power_cycle',
+ 'scheduled_start_time': '20200715235959'
+ }
+ mocker.patch(MODULE_PATH + VALIDATE_TIME_FUNC, return_value=False)
+ idrac_default_args.update(run_params)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ run_diagnostics_obj = self.module.RunDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ status = run_diagnostics_obj._RunDiagnostics__run_diagnostics()
+ assert status == obj
+
+ # Scenario 5: With end time
+ run_params = {
+ 'run_mode': 'express',
+ 'reboot_type': 'power_cycle',
+ 'scheduled_end_time': '20200715235959'
+ }
+ mocker.patch(MODULE_PATH + VALIDATE_TIME_FUNC, return_value=False)
+ idrac_default_args.update(run_params)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ run_diagnostics_obj = self.module.RunDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ status = run_diagnostics_obj._RunDiagnostics__run_diagnostics()
+ assert status == obj
+
+ def test_get_run_diagnostics_url(self, idrac_default_args, idrac_connection_diagnostics_mock, mocker):
+ mocker.patch(MODULE_PATH + "validate_and_get_first_resource_id_uri",
+ return_value=(REDFISH, None))
+ # Scenario 1: With url
+ mocker.patch(MODULE_PATH + "get_dynamic_uri",
+ return_value={"Links": {"Oem": {"Dell": {"DellLCService": {ODATA: DIAGS_ODATA}}}},
+ "Actions": {"#DellLCService.RunePSADiagnostics": {"target": API_ONE}}})
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ run_diagnostics_obj = self.module.RunDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ run_diagnostics_obj._RunDiagnostics__get_run_diagnostics_url()
+ assert run_diagnostics_obj.run_url == API_ONE
+
+ # Scenario 2: When url is empty for Links
+ mocker.patch(MODULE_PATH + "get_dynamic_uri",
+ return_value={"Links": {}})
+ with pytest.raises(Exception) as exc:
+ run_diagnostics_obj._RunDiagnostics__get_run_diagnostics_url()
+ assert exc.value.args[0] == UNSUPPORTED_FIRMWARE_MSG
+
+ # Scenario 3: For error message
+ mocker.patch(MODULE_PATH + "validate_and_get_first_resource_id_uri",
+ return_value=(REDFISH, "error"))
+ with pytest.raises(Exception) as exc:
+ run_diagnostics_obj._RunDiagnostics__get_run_diagnostics_url()
+ assert exc.value.args[0] == "error"
+
+ def test_check_diagnostics_jobs(self, idrac_default_args, idrac_connection_diagnostics_mock, mocker):
+ obj = MagicMock()
+ temp_list = {"Members": [{"Id": "JID_123", "JobType": "RemoteDiagnostics", "JobState": "New"}]}
+ obj.json_data = temp_list
+ mocker.patch(MODULE_PATH + "validate_and_get_first_resource_id_uri",
+ return_value=(REDFISH, None))
+ mocker.patch(MODULE_PATH + API_INVOKE_MOCKER,
+ return_value=obj)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
+ run_diagnostics_obj = self.module.RunDiagnostics(idrac_connection_diagnostics_mock, f_module)
+
+ # Scenario 1: Check mode with job id
+ with pytest.raises(Exception) as exc:
+ run_diagnostics_obj.check_diagnostics_jobs()
+ assert exc.value.args[0] == ALREADY_RUN_MSG
+
+ # Scenario 2: Check mode without job id
+ temp_list = {"Members": [{"Id": "", "JobType": "Test", "JobState": "New"}]}
+ obj.json_data = temp_list
+ mocker.patch(MODULE_PATH + API_INVOKE_MOCKER,
+ return_value=obj)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
+ run_diagnostics_obj = self.module.RunDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ with pytest.raises(Exception) as exc:
+ run_diagnostics_obj.check_diagnostics_jobs()
+ assert exc.value.args[0] == CHANGES_FOUND_MSG
+
+ # Scenario 3: Normal mode with job id
+ temp_list = {"Members": [{"Id": "666", "JobType": "RemoteDiagnostics", "JobState": "New"}]}
+ obj.json_data = temp_list
+ mocker.patch(MODULE_PATH + API_INVOKE_MOCKER,
+ return_value=obj)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ run_diagnostics_obj = self.module.RunDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ with pytest.raises(Exception) as exc:
+ run_diagnostics_obj.check_diagnostics_jobs()
+ assert exc.value.args[0] == ALREADY_RUN_MSG
+
+ # Scenario 4: Normal mode without job id
+ temp_list = {"Members": [{"Id": "", "JobType": "RemoteDiagnostics", "JobState": "New"}]}
+ obj.json_data = temp_list
+ mocker.patch(MODULE_PATH + API_INVOKE_MOCKER,
+ return_value=obj)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ run_diagnostics_obj = self.module.RunDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ resp = run_diagnostics_obj.check_diagnostics_jobs()
+ assert resp is None
+
+ def test_validate_job_timeout(self, idrac_default_args, idrac_connection_diagnostics_mock, mocker):
+ # Scenario 1: Negative timeout
+ idrac_default_args.update({'job_wait': True, 'job_wait_timeout': -120})
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ run_diagnostics_obj = self.module.RunDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ with pytest.raises(Exception) as exc:
+ run_diagnostics_obj._RunDiagnostics__validate_job_timeout()
+ assert exc.value.args[0] == TIMEOUT_NEGATIVE_OR_ZERO_MSG
+
+ # Scenario 2: Valid timeout
+ idrac_default_args.update({'job_wait': True, 'job_wait_timeout': 120})
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ run_diagnostics_obj = self.module.RunDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ resp = run_diagnostics_obj._RunDiagnostics__validate_job_timeout()
+ assert resp is None
+
+ def test_validate_time_format(self, idrac_default_args, idrac_connection_diagnostics_mock, mocker):
+ idrac_default_args.update({'time': "20250715235959"})
+ # Scenario 1: Time with offset
+ time = "2024-09-14T05:59:35-05:00"
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ run_diagnostics_obj = self.module.RunDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ formatted_time = run_diagnostics_obj._RunDiagnostics__validate_time_format(time)
+ assert formatted_time == "20240914055935"
+
+ # Scenario 2: Time without offset
+ time = "20250715235959"
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ run_diagnostics_obj = self.module.RunDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ formatted_time = run_diagnostics_obj._RunDiagnostics__validate_time_format(time)
+ assert formatted_time == "20250715235959"
+
+ # Scenario 3: Invalid time
+ time = "2025"
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ run_diagnostics_obj = self.module.RunDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ with pytest.raises(Exception) as exc:
+ run_diagnostics_obj._RunDiagnostics__validate_time_format(time)
+ assert exc.value.args[0] == INVALID_TIME.format(time)
+
+ def test_validate_time(self, idrac_default_args, idrac_connection_diagnostics_mock, mocker):
+ resp = ("2024-09-14T05:59:35-05:00", "-05:00")
+ mocker.patch(MODULE_PATH + "get_current_time", return_value=resp)
+
+ # Scenario 1: Future time
+ idrac_default_args.update({'time': "20250715235959"})
+ time = idrac_default_args['time']
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ run_diagnostics_obj = self.module.RunDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ assert run_diagnostics_obj._RunDiagnostics__validate_time(time) is True
+
+ # Scenario 2: Past time
+ idrac_default_args.update({'time': "20230715235959"})
+ time = idrac_default_args['time']
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ run_diagnostics_obj = self.module.RunDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ with pytest.raises(Exception) as exc:
+ run_diagnostics_obj._RunDiagnostics__validate_time(time)
+ assert exc.value.args[0] == START_TIME
+
+ def test_validate_end_time(self, idrac_default_args, idrac_connection_diagnostics_mock, mocker):
+ # Scenario 1: start_time less than end_time
+ start_time = "20230715235959"
+ end_time = "20240715235959"
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ run_diagnostics_obj = self.module.RunDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ assert run_diagnostics_obj._RunDiagnostics__validate_end_time(start_time, end_time) is True
+
+ # Scenario 2: start_time greater than end_time
+ start_time = "20250715235959"
+ end_time = "20240715235959"
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ run_diagnostics_obj = self.module.RunDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ with pytest.raises(Exception) as exc:
+ run_diagnostics_obj._RunDiagnostics__validate_end_time(start_time, end_time)
+ assert exc.value.args[0] == END_START_TIME.format(end_time, start_time)
+
+ def test_perform_job_wait(self, idrac_default_args, idrac_connection_diagnostics_mock, mocker):
+ # Scenario 1: When JobState is completed
+ obj = MagicMock()
+ obj.headers = {'Location': REDFISH_BASE_API}
+ obj.json_data = {'JobState': 'Completed'}
+ mocker.patch(MODULE_PATH + "validate_and_get_first_resource_id_uri",
+ return_value=(REDFISH, None))
+ mocker.patch(MODULE_PATH + "idrac_redfish_job_tracking",
+ return_value=(False, 'msg', obj.json_data, 120))
+ idrac_default_args.update({'job_wait': True, 'job_wait_timeout': 1200})
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ run_diagnostics_obj = self.module.RunDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ job_dict = run_diagnostics_obj._RunDiagnostics__perform_job_wait(obj)
+ assert job_dict == obj.json_data
+
+ # Scenario 2: When wait time is less
+ obj = MagicMock()
+ obj.headers = {'Location': REDFISH_BASE_API}
+ obj.json_data = {'JobState': 'Scheduled'}
+ mocker.patch(MODULE_PATH + "validate_and_get_first_resource_id_uri",
+ return_value=(REDFISH, None))
+ mocker.patch(MODULE_PATH + "idrac_redfish_job_tracking",
+ return_value=(False, 'msg', obj.json_data, 120))
+ idrac_default_args.update({'job_wait': True, 'job_wait_timeout': 10})
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ run_diagnostics_obj = self.module.RunDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ with pytest.raises(Exception) as exc:
+ run_diagnostics_obj._RunDiagnostics__perform_job_wait(obj)
+ assert exc.value.args[0] == WAIT_TIMEOUT_MSG.format(10)
+
+ # Scenario 3: When JobState is Failed
+ obj = MagicMock()
+ obj.headers = {'Location': REDFISH_BASE_API}
+ obj.json_data = {'JobState': 'Failed', 'Message': 'Job Failed'}
+ mocker.patch(MODULE_PATH + "validate_and_get_first_resource_id_uri",
+ return_value=(REDFISH, None))
+ mocker.patch(MODULE_PATH + "idrac_redfish_job_tracking",
+ return_value=(True, 'msg', obj.json_data, 120))
+ idrac_default_args.update({'job_wait': True, 'job_wait_timeout': 1200})
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ run_diagnostics_obj = self.module.RunDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ with pytest.raises(Exception) as exc:
+ run_diagnostics_obj._RunDiagnostics__perform_job_wait(obj)
+ assert exc.value.args[0] == 'Job Failed'
+
+ # Scenario 4: When job_wait is False
+ obj = MagicMock()
+ obj.headers = {'Location': REDFISH_BASE_API}
+ obj.json_data = {'JobState': 'Scheduled'}
+ mocker.patch(MODULE_PATH + "validate_and_get_first_resource_id_uri",
+ return_value=(REDFISH, None))
+ mocker.patch(MODULE_PATH + "idrac_redfish_job_tracking",
+ return_value=(True, 'msg', obj.json_data, 120))
+ idrac_default_args.update({'job_wait': False, 'job_wait_timeout': 1200})
+ mocker.patch(MODULE_PATH + API_INVOKE_MOCKER, return_value=obj)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ run_diagnostics_obj = self.module.RunDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ job_dict = run_diagnostics_obj._RunDiagnostics__perform_job_wait(obj)
+ assert job_dict == obj.json_data
+
+ # Scenario 5: When there's no job uri
+ obj = MagicMock()
+ obj.headers = {'Location': ''}
+ idrac_default_args.update({'job_wait': False, 'job_wait_timeout': 1200})
+ mocker.patch(MODULE_PATH + API_INVOKE_MOCKER, return_value=obj)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ run_diagnostics_obj = self.module.RunDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ job_dict = run_diagnostics_obj._RunDiagnostics__perform_job_wait(obj)
+ assert job_dict == {}
+
+
+class TestExportDiagnostics(FakeAnsibleModule):
+ module = idrac_diagnostics
+
+ @pytest.fixture
+ def idrac_diagnostics_mock(self):
+ idrac_obj = MagicMock()
+ return idrac_obj
+
+ @pytest.fixture
+ def idrac_connection_diagnostics_mock(self, mocker, idrac_diagnostics_mock):
+ idrac_conn_mock = mocker.patch(MODULE_PATH + 'iDRACRedfishAPI',
+ return_value=idrac_diagnostics_mock)
+ idrac_conn_mock.return_value.__enter__.return_value = idrac_diagnostics_mock
+ return idrac_conn_mock
+
+ def test_execute(self, idrac_default_args, idrac_connection_diagnostics_mock, mocker):
+ obj = MagicMock()
+ obj.headers = {"Location": REDFISH}
+ obj.status_code = 200
+ obj.share_name = SHARE_NAME
+ obj.file_name = DIAGS_FILE_NAME
+ mocker.patch(MODULE_PATH + "Diagnostics.test_network_share", return_value=None)
+ mocker.patch(MODULE_PATH + "ExportDiagnostics._ExportDiagnostics__get_export_diagnostics_url", return_value=None)
+ mocker.patch(MODULE_PATH + "ExportDiagnostics._ExportDiagnostics__export_diagnostics_local", return_value=obj)
+
+ # Scenario 1: share_type = local
+ export_params = {'share_parameters': {'share_type': "local"}}
+ idrac_default_args.update(export_params)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ export_diagnostics_obj = self.module.ExportDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ msg, job_status, file_path = export_diagnostics_obj.execute()
+ assert msg == SUCCESS_EXPORT_MSG
+ assert job_status == {}
+ assert file_path == 'None/None'
+
+ # Scenario 2: share_type = nfs
+ job = {"JobState": "Completed"}
+ export_params = {'share_parameters': {'share_type': "nfs"}}
+ mocker.patch(MODULE_PATH + "ExportDiagnostics._ExportDiagnostics__export_diagnostics_nfs", return_value=obj)
+ mocker.patch(MODULE_PATH + "ExportDiagnostics.get_job_status", return_value=job)
+ idrac_default_args.update(export_params)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ export_diagnostics_obj = self.module.ExportDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ msg, job_status, file_path = export_diagnostics_obj.execute()
+ assert msg == SUCCESS_EXPORT_MSG
+ assert job_status == job
+ assert file_path == 'None/None'
+
+ # Scenario 3: Check mode
+ obj.status = 400
+ mocker.patch(MODULE_PATH + "ExportDiagnostics.perform_check_mode", return_value=obj)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
+ export_diagnostics_obj = self.module.ExportDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ export_diagnostics_obj.execute()
+
+ def test_export_diagnostics_local(self, idrac_default_args, idrac_connection_diagnostics_mock, mocker):
+ export_params = {
+ 'share_parameters': {
+ 'share_name': SHARE_NAME,
+ 'file_name': DIAGS_FILE_NAME
+ }
+ }
+ obj = MagicMock()
+ obj.status = 200
+ obj.headers = {'Location': REDFISH_BASE_API}
+ obj.filename = DIAGS_FILE_NAME
+ mocker.patch(MODULE_PATH + 'ExportDiagnostics._ExportDiagnostics__export_diagnostics', return_value=obj)
+ mocker.patch(MODULE_PATH + API_INVOKE_MOCKER, return_value=obj)
+ idrac_default_args.update(export_params)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ export_diagnostics_obj = self.module.ExportDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ with pytest.raises(Exception):
+ export_diagnostics_obj._ExportDiagnostics__export_diagnostics_local()
+
+ def test_export_diagnostics_http(self, idrac_default_args, idrac_connection_diagnostics_mock, mocker):
+ obj = MagicMock()
+ obj.status_code = 200
+ mocker.patch(MODULE_PATH + PAYLOAD_FUNC, return_value=None)
+ mocker.patch(MODULE_PATH + EXPORT_FUNC, return_value=obj)
+ # Scenario 1: With ipv4
+ export_params = {
+ 'share_parameters': {
+ 'ip_address': IP,
+ 'file_name': 'test_diags',
+ 'share_type': 'http',
+ 'share_name': 'myshare'
+ }
+ }
+ idrac_default_args.update(export_params)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ export_diagnostics_obj = self.module.ExportDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ result = export_diagnostics_obj._ExportDiagnostics__export_diagnostics_http()
+ assert result == obj
+
+ # Scenario 2: With ipv6
+ export_params = {
+ 'share_parameters': {
+ 'ip_address': 'XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX',
+ 'file_name': 'test_diags',
+ 'share_type': 'http',
+ 'share_name': 'myshare'
+ }
+ }
+ idrac_default_args.update(export_params)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ export_diagnostics_obj = self.module.ExportDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ result = export_diagnostics_obj._ExportDiagnostics__export_diagnostics_http()
+ assert result == obj
+
+ def test_export_diagnostics_cifs(self, idrac_default_args, idrac_connection_diagnostics_mock, mocker):
+ obj = MagicMock()
+ obj.status_code = 200
+ mocker.patch(MODULE_PATH + PAYLOAD_FUNC, return_value={})
+ mocker.patch(MODULE_PATH + EXPORT_FUNC, return_value=obj)
+ # Scenario 1: With workgroup
+ export_params = {
+ 'share_parameters': {
+ 'file_name': 'test_diags',
+ 'share_type': 'cifs',
+ 'share_name': 'myshare',
+ 'ignore_certificate_warning': 'off',
+ 'workgroup': 'myworkgroup'
+ }
+ }
+ idrac_default_args.update(export_params)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ export_diagnostics_obj = self.module.ExportDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ result = export_diagnostics_obj._ExportDiagnostics__export_diagnostics_cifs()
+ assert result == obj
+
+ # Scenario 2: Without workgroup
+ export_params = {
+ 'share_parameters': {
+ 'file_name': 'test_diags',
+ 'share_type': 'cifs',
+ 'share_name': 'myshare',
+ 'ignore_certificate_warning': 'off'
+ }
+ }
+ idrac_default_args.update(export_params)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ export_diagnostics_obj = self.module.ExportDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ result = export_diagnostics_obj._ExportDiagnostics__export_diagnostics_cifs()
+ assert result == obj
+
+ def test_export_diagnostics_nfs(self, idrac_default_args, idrac_connection_diagnostics_mock, mocker):
+ obj = MagicMock()
+ obj.status_code = 200
+ mocker.patch(MODULE_PATH + PAYLOAD_FUNC, return_value={"UserName": "user", "Password": "password"})
+ mocker.patch(MODULE_PATH + EXPORT_FUNC, return_value=obj)
+ export_params = {
+ 'share_parameters': {
+ 'share_name': 'share',
+ 'share_type': 'nfs',
+ 'ignore_certificate_warning': 'off'
+ }
+ }
+ idrac_default_args.update(export_params)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ export_diagnostics_obj = self.module.ExportDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ result = export_diagnostics_obj._ExportDiagnostics__export_diagnostics_nfs()
+ assert result == obj
+
+ def test_get_export_diagnostics_url(self, idrac_default_args, idrac_connection_diagnostics_mock, mocker):
+ export_params = {
+ 'share_parameters': {
+ 'file_name': DIAGS_FILE_NAME,
+ 'share_type': 'local',
+ 'ignore_certificate_warning': 'off'
+ }
+ }
+ mocker.patch(MODULE_PATH + "validate_and_get_first_resource_id_uri",
+ return_value=(REDFISH, None))
+ # Scenario 1: With url
+ mocker.patch(MODULE_PATH + "get_dynamic_uri",
+ return_value={"Links": {"Oem": {"Dell": {"DellLCService": {ODATA: DIAGS_ODATA}}}},
+ "Actions": {"#DellLCService.ExportePSADiagnosticsResult": {"target": API_ONE}}})
+ idrac_default_args.update(export_params)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ export_diagnostics_obj = self.module.ExportDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ export_diagnostics_obj._ExportDiagnostics__get_export_diagnostics_url()
+ assert export_diagnostics_obj.export_url == API_ONE
+
+ # Scenario 2: When url is empty
+ mocker.patch(MODULE_PATH + "get_dynamic_uri",
+ return_value={"Links": {}})
+ with pytest.raises(Exception) as exc:
+ export_diagnostics_obj._ExportDiagnostics__get_export_diagnostics_url()
+ assert exc.value.args[0] == UNSUPPORTED_FIRMWARE_MSG
+
+ # Scenario 3: For error message
+ mocker.patch(MODULE_PATH + "validate_and_get_first_resource_id_uri",
+ return_value=(REDFISH, "error"))
+ with pytest.raises(Exception) as exc:
+ export_diagnostics_obj._ExportDiagnostics__get_export_diagnostics_url()
+ assert exc.value.args[0] == "error"
+
+ def test_export_diagnostics(self, idrac_default_args, idrac_connection_diagnostics_mock, mocker):
+ obj = MagicMock()
+ obj.status_code = 200
+ payload = mocker.patch(MODULE_PATH + PAYLOAD_FUNC, return_value={})
+ mocker.patch(MODULE_PATH + API_INVOKE_MOCKER, return_value=obj)
+ mocker.patch(MODULE_PATH + "ExportDiagnostics._ExportDiagnostics__get_export_diagnostics_url", return_value=API_ONE)
+ # Scenario 1: With file name
+ export_params = {
+ 'share_parameters': {
+ 'file_name': DIAGS_FILE_NAME
+ }
+ }
+ idrac_default_args.update(export_params)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ export_diagnostics_obj = self.module.ExportDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ result = export_diagnostics_obj._ExportDiagnostics__export_diagnostics(payload)
+ assert result == obj
+
+ # Scenario 2: Without file name
+ export_params = {
+ 'idrac_ip': IP,
+ 'share_parameters': {
+ 'file_name': ''
+ }
+ }
+ idrac_default_args.update(export_params)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ export_diagnostics_obj = self.module.ExportDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ result = export_diagnostics_obj._ExportDiagnostics__export_diagnostics(payload)
+ assert result == obj
+
+ def test_get_job_status_success(self, mocker, idrac_diagnostics_mock):
+ obj = self.get_module_mock()
+ diagnostics_job_response_mock = mocker.MagicMock()
+ diagnostics_job_response_mock.headers.get.return_value = "HTTPS_PATH/job_tracking/12345"
+ mocker.patch(MODULE_PATH + "remove_key", return_value={"job_details": "mocked_job_details"})
+ mocker.patch(MODULE_PATH + "validate_and_get_first_resource_id_uri", return_value=[MANAGER_URI_ONE])
+ obj_under_test = self.module.ExportDiagnostics(idrac_diagnostics_mock, obj)
+ mocker.patch(MODULE_PATH + "idrac_redfish_job_tracking", return_value=(False, "mocked_message", {"job_details": "mocked_job_details"}, 0))
+ result = obj_under_test.get_job_status(diagnostics_job_response_mock)
+ assert result == {"job_details": "mocked_job_details"}
+
+ def test_get_job_status_failure(self, mocker, idrac_diagnostics_mock):
+ obj = self.get_module_mock()
+ diagnostics_job_response_mock = mocker.MagicMock()
+ diagnostics_job_response_mock.headers.get.return_value = "HTTPS_PATH/job_tracking/12345"
+ mocker.patch(MODULE_PATH + "remove_key", return_value={"Message": "None"})
+ mocker.patch(MODULE_PATH + "validate_and_get_first_resource_id_uri", return_value=[MANAGER_URI_ONE])
+ obj_under_test = self.module.ExportDiagnostics(idrac_diagnostics_mock, obj)
+ mocker.patch(MODULE_PATH + "idrac_redfish_job_tracking", return_value=(True, "None", {"Message": "None"}, 0))
+ exit_json_mock = mocker.patch.object(obj, "exit_json")
+ result = obj_under_test.get_job_status(diagnostics_job_response_mock)
+ exit_json_mock.assert_called_once_with(msg="None", failed=True, job_details={"Message": "None"})
+ assert result == {"Message": "None"}
+
+ def test_perform_check_mode(self, idrac_default_args, idrac_connection_diagnostics_mock, mocker):
+ obj = MagicMock()
+ # Scenario 1: With status code 200
+ obj.status_code = 200
+ idrac_default_args.update({'ShareType': 'Local'})
+ mocker.patch(MODULE_PATH + API_INVOKE_MOCKER, return_value=obj)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
+ export_diagnostics_obj = self.module.ExportDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ with pytest.raises(Exception) as exc:
+ export_diagnostics_obj.perform_check_mode()
+ assert exc.value.args[0] == CHANGES_FOUND_MSG
+
+ # Scenario 2: With status code 400
+ obj.status_code = 400
+ mocker.patch(MODULE_PATH + API_INVOKE_MOCKER, return_value=obj)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
+ export_diagnostics_obj = self.module.ExportDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ val = export_diagnostics_obj.perform_check_mode()
+ assert val is None
+
+ # Scenario 3: HTTP Error with message id SYS099
+ json_str = to_text(json.dumps({"error": {MESSAGE_EXTENDED: [
+ {
+ 'MessageId': "SYS099",
+ "Message": NO_FILE
+ }
+ ]}}))
+ mocker.patch(MODULE_PATH + API_INVOKE_MOCKER,
+ side_effect=HTTPError(HTTPS_PATH, 400,
+ HTTP_ERROR,
+ {"accept-type": APPLICATION_JSON},
+ StringIO(json_str)))
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
+ export_diagnostics_obj = self.module.ExportDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ with pytest.raises(Exception) as exc:
+ export_diagnostics_obj.perform_check_mode()
+ assert exc.value.args[0] == NO_FILE
+
+ # Scenario 4: HTTP Error without message id
+ json_str = to_text(json.dumps({"error": {MESSAGE_EXTENDED: [
+ {
+ 'MessageId': "123",
+ "Message": "error"
+ }
+ ]}}))
+ mocker.patch(MODULE_PATH + API_INVOKE_MOCKER,
+ side_effect=HTTPError(HTTPS_PATH, 400,
+ HTTP_ERROR,
+ {"accept-type": APPLICATION_JSON},
+ StringIO(json_str)))
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
+ export_diagnostics_obj = self.module.ExportDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ val = export_diagnostics_obj.perform_check_mode()
+ assert val is None
+
+
+class TestRunAndExportDiagnostics(FakeAnsibleModule):
+ module = idrac_diagnostics
+
+ @pytest.fixture
+ def idrac_diagnostics_mock(self):
+ idrac_obj = MagicMock()
+ return idrac_obj
+
+ @pytest.fixture
+ def idrac_connection_diagnostics_mock(self, mocker, idrac_diagnostics_mock):
+ idrac_conn_mock = mocker.patch(MODULE_PATH + 'iDRACRedfishAPI',
+ return_value=idrac_diagnostics_mock)
+ idrac_conn_mock.return_value.__enter__.return_value = idrac_diagnostics_mock
+ return idrac_conn_mock
+
+ def test_execute(self, idrac_default_args, idrac_connection_diagnostics_mock, mocker):
+ obj = MagicMock()
+ obj.status_code = 200
+
+ def export_execute():
+ msg = SUCCESS_EXPORT_MSG
+ job_status = "None"
+ file_path = SHARE_NAME
+ return msg, job_status, file_path
+
+ # Scenario 1: When job wait is true
+ idrac_default_args.update({'job_wait': True})
+ mocker.patch(MODULE_PATH + "RunDiagnostics", return_value=obj)
+ obj.execute = export_execute
+ mocker.patch(MODULE_PATH + "ExportDiagnostics", return_value=obj)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ run_and_export_obj = self.module.RunAndExportDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ msg, job_status, file_path = run_and_export_obj.execute()
+ assert msg == SUCCESS_RUN_AND_EXPORT_MSG
+
+ # Scenario 2: When job wait is false
+ def run_execute():
+ msg = RUNNING_RUN_MSG
+ job_status = "None"
+ file_path = "None"
+ return msg, job_status, file_path
+
+ idrac_default_args.update({'job_wait': False})
+ obj.execute = run_execute
+ mocker.patch(MODULE_PATH + "RunDiagnostics", return_value=obj)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ run_obj = self.module.RunAndExportDiagnostics(idrac_connection_diagnostics_mock, f_module)
+ msg, job_status, file_path = run_obj.execute()
+ assert msg == RUNNING_RUN_MSG
+
+
+class TestDiagnosticsType(FakeAnsibleModule):
+ module = idrac_diagnostics
+
+ @pytest.fixture
+ def idrac_diagnostics_mock(self):
+ idrac_obj = MagicMock()
+ return idrac_obj
+
+ @pytest.fixture
+ def idrac_connection_diagnostics_mock(self, mocker, idrac_diagnostics_mock):
+ idrac_conn_mock = mocker.patch(MODULE_PATH + 'iDRACRedfishAPI',
+ return_value=idrac_diagnostics_mock)
+ idrac_conn_mock.return_value.__enter__.return_value = idrac_diagnostics_mock
+ return idrac_conn_mock
+
+ def test_diagnostics_operation(self, idrac_default_args, idrac_connection_diagnostics_mock):
+ idrac_default_args.update({"run": True, "export": False})
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ diags_class = self.module.DiagnosticsType.diagnostics_operation(idrac_connection_diagnostics_mock, f_module)
+ assert isinstance(diags_class, self.module.RunDiagnostics)
+
+ idrac_default_args.update({"run": False, "export": True})
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ diags_class = self.module.DiagnosticsType.diagnostics_operation(idrac_connection_diagnostics_mock, f_module)
+ assert isinstance(diags_class, self.module.ExportDiagnostics)
+
+ idrac_default_args.update({"run": True, "export": True})
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ diags_class = self.module.DiagnosticsType.diagnostics_operation(idrac_connection_diagnostics_mock, f_module)
+ assert isinstance(diags_class, self.module.RunAndExportDiagnostics)
+
+ idrac_default_args.update({"run": False, "export": False})
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ with pytest.raises(Exception) as exc:
+ self.module.DiagnosticsType.diagnostics_operation(idrac_connection_diagnostics_mock, f_module)
+ assert exc.value.args[0] == NO_OPERATION_SKIP_MSG
+
+ @pytest.mark.parametrize("exc_type",
+ [URLError, HTTPError, SSLValidationError, ConnectionError, TypeError, ValueError])
+ def test_idrac_diagnostics_main_exception_handling_case(self, exc_type, mocker, idrac_default_args):
+ idrac_default_args.update({"run": True})
+ # Scenario 1: HTTPError with message id SYS099
+ json_str = to_text(json.dumps({"error": {MESSAGE_EXTENDED: [
+ {
+ 'MessageId': "SYS099",
+ "Message": "Error"
+ }
+ ]}}))
+ if exc_type in [HTTPError, SSLValidationError]:
+ mocker.patch(MODULE_PATH + RUN_EXEC_FUNC,
+ side_effect=exc_type(HTTPS_PATH, 400,
+ HTTP_ERROR,
+ {"accept-type": APPLICATION_JSON},
+ StringIO(json_str)))
+ else:
+ mocker.patch(MODULE_PATH + RUN_EXEC_FUNC,
+ side_effect=exc_type('test'))
+ result = self._run_module(idrac_default_args)
+ if exc_type == URLError:
+ assert result['unreachable'] is True
+ assert 'msg' in result
+
+ # Scenario 2: HTTPError with message id SYS098
+ json_str = to_text(json.dumps({"error": {MESSAGE_EXTENDED: [
+ {
+ 'MessageId': "SYS098",
+ "Message": "Error"
+ }
+ ]}}))
+ if exc_type in [HTTPError, SSLValidationError]:
+ mocker.patch(MODULE_PATH + RUN_EXEC_FUNC,
+ side_effect=exc_type(HTTPS_PATH, 400,
+ HTTP_ERROR,
+ {"accept-type": APPLICATION_JSON},
+ StringIO(json_str)))
+ result = self._run_module(idrac_default_args)
+ assert 'msg' in result
+
+ # Scenario 3: HTTPError with random message id
+ json_str = to_text(json.dumps({"error": {MESSAGE_EXTENDED: [
+ {
+ 'MessageId': "123",
+ "Message": "Error"
+ }
+ ]}}))
+ if exc_type in [HTTPError, SSLValidationError]:
+ mocker.patch(MODULE_PATH + RUN_EXEC_FUNC,
+ side_effect=exc_type(HTTPS_PATH, 400,
+ HTTP_ERROR,
+ {"accept-type": APPLICATION_JSON},
+ StringIO(json_str)))
+ result = self._run_module(idrac_default_args)
+ assert 'msg' in result
+
+ def test_main(self, mocker):
+ module_mock = mocker.MagicMock()
+ idrac_mock = mocker.MagicMock()
+ diagnostics_mock = mocker.MagicMock()
+ diagnostics_mock.execute.return_value = (None, None, None)
+
+ mocker.patch(MODULE_PATH + 'get_argument_spec', return_value={})
+ mocker.patch(MODULE_PATH + 'idrac_auth_params', {})
+ mocker.patch(MODULE_PATH + 'AnsibleModule', return_value=module_mock)
+ mocker.patch(MODULE_PATH + 'iDRACRedfishAPI', return_value=idrac_mock)
+ mocker.patch(MODULE_PATH + 'DiagnosticsType.diagnostics_operation', return_value=diagnostics_mock)
+ main()
+ diagnostics_mock.execute.return_value = (None, None, SHARE_NAME)
+ mocker.patch(MODULE_PATH + 'DiagnosticsType.diagnostics_operation', return_value=diagnostics_mock)
+ main()
diff --git a/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_reset.py b/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_reset.py
index a6fbb1d04..d8c23160e 100644
--- a/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_reset.py
+++ b/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_reset.py
@@ -2,94 +2,615 @@
#
# Dell OpenManage Ansible Modules
-# Version 7.0.0
-# Copyright (C) 2020-2022 Dell Inc. or its subsidiaries. All Rights Reserved.
+# Version 9.2.0
+# Copyright (C) 2020-2024 Dell Inc. or its subsidiaries. All Rights Reserved.
# 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)
+from __future__ import absolute_import, division, print_function
__metaclass__ = type
-import pytest
import json
-from ansible_collections.dellemc.openmanage.plugins.modules import idrac_reset
-from ansible_collections.dellemc.openmanage.tests.unit.plugins.modules.common import FakeAnsibleModule
-from ansible.module_utils.six.moves.urllib.error import HTTPError, URLError
-from ansible.module_utils.urls import ConnectionError, SSLValidationError
-from mock import MagicMock, Mock
+import pytest
from io import StringIO
from ansible.module_utils._text import to_text
+from urllib.error import HTTPError, URLError
+from ansible.module_utils.urls import ConnectionError, SSLValidationError
+from ansible_collections.dellemc.openmanage.plugins.modules import idrac_reset
+from ansible_collections.dellemc.openmanage.tests.unit.plugins.modules.common import FakeAnsibleModule
+from mock import MagicMock
+
+MODULE_PATH = 'ansible_collections.dellemc.openmanage.plugins.modules.idrac_reset.'
+MODULE_UTILS_PATH = 'ansible_collections.dellemc.openmanage.plugins.module_utils.utils.'
+
+MANAGERS_URI = "/redfish/v1/Managers"
+OEM = "Oem"
+MANUFACTURER = "Dell"
+ACTIONS = "Actions"
+IDRAC_RESET_RETRIES = 50
+LC_STATUS_CHECK_SLEEP = 30
+IDRAC_URI = "/redfish/v1/Managers/iDRAC.Embedded.1"
+IDRAC_JOB_URI = "/redfish/v1/Managers/iDRAC.Embedded.1/Jobs/{job_id}"
+RESET_TO_DEFAULT_ERROR = "{reset_to_default} is not supported. The supported values are {supported_values}. Enter the valid values and retry the operation."
+RESET_TO_DEFAULT_ERROR_MSG = "{reset_to_default} is not supported."
+CUSTOM_ERROR = "{reset_to_default} is not supported on this firmware version of iDRAC. The supported values are {supported_values}. \
+Enter the valid values and retry the operation."
+IDRAC_RESET_RESTART_SUCCESS_MSG = "iDRAC restart operation completed successfully."
+IDRAC_RESET_SUCCESS_MSG = "Successfully performed iDRAC reset."
+IDRAC_RESET_RESET_TRIGGER_MSG = "iDRAC reset operation triggered successfully."
+IDRAC_RESET_RESTART_TRIGGER_MSG = "iDRAC restart operation triggered successfully."
+INVALID_DIRECTORY_MSG = "Provided directory path '{path}' is invalid."
+FAILED_RESET_MSG = "Failed to perform the reset operation."
+RESET_UNTRACK = "iDRAC reset is in progress. Changes will apply once the iDRAC reset operation is successfully completed."
+TIMEOUT_NEGATIVE_OR_ZERO_MSG = "The value of `job_wait_timeout` parameter cannot be negative or zero. Enter the valid value and retry the operation."
+INVALID_FILE_MSG = "File extension is invalid. Supported extension for 'custom_default_file' is: .xml."
+LC_STATUS_MSG = "Lifecycle controller status check is {lc_status} after {retries} number of retries, Exiting.."
+INSUFFICIENT_DIRECTORY_PERMISSION_MSG = "Provided directory path '{path}' is not writable. Please check if the directory has appropriate permissions."
+UNSUPPORTED_LC_STATUS_MSG = "Lifecycle controller status check is not supported."
+CHANGES_NOT_FOUND = "No changes found to commit!"
+CHANGES_FOUND = "Changes found to commit!"
+MINIMUM_SUPPORTED_FIRMWARE_VERSION = "7.00.00"
+SUCCESS_STATUS = "Success"
+FAILED_STATUS = "Failed"
+STATUS_SUCCESS = [200, 202, 204]
+ERR_STATUS_CODE = [400, 404]
+RESET_KEY = "Oem.#DellManager.ResetToDefaults"
+RESTART_KEY = "#Manager.Reset"
+GET_BASE_URI_KEY = "Validation.get_base_uri"
+INVOKE_REQ_KEY = "iDRACRedfishAPI.invoke_request"
+GET_CUSTOM_DEFAULT_KEY = "CustomDefaultsDownloadURI"
+SET_CUSTOM_DEFAULT_KEY = "#DellManager.SetCustomDefaults"
+CHECK_LC_STATUS = "FactoryReset.check_lcstatus"
+RESET_ALLOWABLE_KEY = "ResetType@Redfish.AllowableValues"
+VALIDATE_RESET_OPTION_KEY = "Validation.validate_reset_options"
+FILE_PATH = "/root/custom_default_content.xml"
+CHECK_IDRAC_VERSION = "FactoryReset.is_check_idrac_latest"
+EXECUTE_KEY = "FactoryReset.execute"
+HTTP_ERROR_MSG = "http error message"
+RETURN_TYPE = "application/json"
+FILE_PATH = "abc/test"
+
+
+class TestValidation(FakeAnsibleModule):
+ module = idrac_reset
+ allowed_values = ["All", "Default", "CustomDefaults", "ResetAllWithRootDefaults"]
+ allowed_values_api = {
+ 'Actions':
+ {
+ "#Manager.Reset": {
+ "ResetType@Redfish.AllowableValues": [
+ "Test"
+ ]
+ },
+ "Oem": {
+ "#DellManager.ResetToDefaults": {
+ RESET_ALLOWABLE_KEY: [
+ "All",
+ "Default",
+ "ResetAllWithRootDefaults"
+ ]
+ }
+ }
+ },
+ "Oem": {
+ "Dell": {
+ "CustomDefaultsDownloadURI": "/redfish/v1/Managers/iDRAC.Embedded.1/Oem/Dell/CustomDefaultsDownloadURI"
+ }
+ }
+ }
+
+ @pytest.fixture
+ def idrac_reset_mock(self):
+ idrac_obj = MagicMock()
+ return idrac_obj
+
+ @pytest.fixture
+ def idrac_connection_reset_mock(self, mocker, idrac_reset_mock):
+ idrac_conn_mock = mocker.patch(MODULE_PATH + 'iDRACRedfishAPI',
+ return_value=idrac_reset_mock)
+ idrac_conn_mock.return_value.__enter__.return_value = idrac_reset_mock
+ return idrac_conn_mock
-from pytest import importorskip
+ def test_get_base_uri(self, idrac_default_args, idrac_connection_reset_mock, mocker):
+ # Scenario - when validate_and_get_first_resource_id_uri return proper uri
+ mocker.patch(MODULE_PATH + "validate_and_get_first_resource_id_uri",
+ return_value=(IDRAC_URI, ''))
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.Validation(
+ idrac_connection_reset_mock, f_module)
+ data = idr_obj.get_base_uri()
+ assert data == IDRAC_URI
-importorskip("omsdk.sdkfile")
-importorskip("omsdk.sdkcreds")
+ def test_validate_reset_options(self, idrac_default_args, idrac_connection_reset_mock, mocker):
+ # Scenario - when key 'OEM' doesn't exist in output from invoke_request
+ obj = MagicMock()
+ obj.json_data = {'Actions': {}}
+ mocker.patch(MODULE_PATH + GET_BASE_URI_KEY, return_value=IDRAC_URI)
+ mocker.patch(MODULE_PATH + INVOKE_REQ_KEY, return_value=obj)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ idrac_default_args.update({"reset_to_default": 'All'})
+ idr_obj = self.module.Validation(
+ idrac_connection_reset_mock, f_module)
+ allowed_values, res = idr_obj.validate_reset_options(RESET_KEY)
+ assert res is False
+
+ # Scenario - when reset_to_default is not in allowable values
+ obj.json_data = self.allowed_values_api
+ mocker.patch(MODULE_PATH + GET_BASE_URI_KEY, return_value=IDRAC_URI)
+ mocker.patch(MODULE_PATH + INVOKE_REQ_KEY, return_value=obj)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ idrac_default_args.update({"reset_to_default": 'CustomDefaults'})
+ idr_obj = self.module.Validation(
+ idrac_connection_reset_mock, f_module)
+ allowed_values, res = idr_obj.validate_reset_options(RESET_KEY)
+ assert res is False
+
+ def test_validate_graceful_restart_option(self, idrac_default_args, idrac_connection_reset_mock, mocker):
+ # Scenario - when key doesn't exist in output from invoke_request
+ obj = MagicMock()
+ obj.json_data = {'Actions': {}}
+ mocker.patch(MODULE_PATH + GET_BASE_URI_KEY, return_value=IDRAC_URI)
+ mocker.patch(MODULE_PATH + INVOKE_REQ_KEY, return_value=obj)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.Validation(
+ idrac_connection_reset_mock, f_module)
+ res = idr_obj.validate_graceful_restart_option(RESTART_KEY)
+ assert res is False
-MODULE_PATH = 'ansible_collections.dellemc.openmanage.plugins.modules.'
+ # Scenario - when 'GracefulRestart is not in allowable values
+ obj.json_data = self.allowed_values_api
+ mocker.patch(MODULE_PATH + GET_BASE_URI_KEY, return_value=IDRAC_URI)
+ mocker.patch(MODULE_PATH + INVOKE_REQ_KEY, return_value=obj)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.Validation(
+ idrac_connection_reset_mock, f_module)
+ res = idr_obj.validate_graceful_restart_option(RESTART_KEY)
+ assert res is False
+ def test_validate_path(self, idrac_default_args, idrac_connection_reset_mock, mocker):
+ # Scenario - when custom default file path doesn't exist
+ mocker.patch(MODULE_PATH + GET_BASE_URI_KEY, return_value=IDRAC_URI)
+ mocker.patch(MODULE_PATH + 'os.path.exists', return_value=False)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.Validation(
+ idrac_connection_reset_mock, f_module)
+ with pytest.raises(Exception) as exc:
+ idr_obj.validate_path(FILE_PATH)
+ assert exc.value.args[0] == INVALID_DIRECTORY_MSG.format(path=FILE_PATH)
-@pytest.fixture
-def idrac_reset_connection_mock(mocker, idrac_mock):
- idrac_connection_class_mock = mocker.patch(MODULE_PATH + 'idrac_reset.iDRACConnection')
- idrac_connection_class_mock.return_value.__enter__.return_value = idrac_mock
- return idrac_mock
+ # Scenario - when custom default file path exist but not accessible
+ mocker.patch(MODULE_PATH + GET_BASE_URI_KEY, return_value=IDRAC_URI)
+ mocker.patch(MODULE_PATH + 'os.path.exists', return_value=True)
+ mocker.patch(MODULE_PATH + 'os.access', return_value=False)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.Validation(
+ idrac_connection_reset_mock, f_module)
+ with pytest.raises(Exception) as exc:
+ idr_obj.validate_path(FILE_PATH)
+ assert exc.value.args[0] == INSUFFICIENT_DIRECTORY_PERMISSION_MSG.format(path=FILE_PATH)
+ def test_validate_file_format(self, idrac_default_args, idrac_connection_reset_mock, mocker):
+ # Scenario - when custom default file is not in XML format
+ mocker.patch(MODULE_PATH + GET_BASE_URI_KEY, return_value=IDRAC_URI)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.Validation(
+ idrac_connection_reset_mock, f_module)
+ with pytest.raises(Exception) as exc:
+ idr_obj.validate_file_format('abc/test.json')
+ assert exc.value.args[0] == INVALID_FILE_MSG
-class TestReset(FakeAnsibleModule):
+ def test_validate_custom_option_exception_case(self, idrac_default_args, idrac_connection_reset_mock, mocker):
+ obj = MagicMock()
+ obj.json_data = self.allowed_values_api
+ json_str = to_text(json.dumps({"data": "out"}))
+ mocker.patch(MODULE_PATH + GET_BASE_URI_KEY, return_value=IDRAC_URI)
+ mocker.patch(MODULE_PATH + 'get_dynamic_uri', return_value=obj)
+ mocker.patch(MODULE_PATH + INVOKE_REQ_KEY, side_effect=HTTPError("https://test.com", 404, HTTP_ERROR_MSG,
+ {"accept-type": RETURN_TYPE},
+ StringIO(json_str)))
+ idrac_default_args.update({"reset_to_default": 'CustomDefaults'})
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.Validation(
+ idrac_connection_reset_mock, f_module)
+ with pytest.raises(Exception) as exc:
+ idr_obj.validate_custom_option('CustomDefaults', self.allowed_values)
+ assert exc.value.args[0] == RESET_TO_DEFAULT_ERROR.format(reset_to_default='CustomDefaults', supported_values=self.allowed_values)
+
+ def test_validate_job_wait_negative_values(self, idrac_default_args, idrac_connection_reset_mock, mocker):
+ # Scenario - when job_wait_timeout is negative
+ mocker.patch(MODULE_PATH + GET_BASE_URI_KEY,
+ return_value=IDRAC_URI)
+ idrac_default_args.update({"wait_for_idrac": True, "job_wait_timeout": -120})
+ f_module = self.get_module_mock(
+ params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.Validation(idrac_connection_reset_mock, f_module)
+ with pytest.raises(Exception) as exc:
+ idr_obj.validate_job_timeout()
+ assert exc.value.args[0] == TIMEOUT_NEGATIVE_OR_ZERO_MSG
+
+ # Scenario - when job_wait_timeout is positive
+ idrac_default_args.update({"job_wait": True, "job_wait_timeout": 120})
+ f_module = self.get_module_mock(
+ params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.Validation(idrac_connection_reset_mock, f_module)
+ idr_obj.validate_job_timeout()
+
+
+class TestFactoryReset(FakeAnsibleModule):
module = idrac_reset
+ lc_status_api_links = {
+ "Oem": {
+ "Dell": {
+ "DellLCService": {
+ "@odata.id": "/redfish/v1/Managers/iDRAC.Embedded.1/Oem/Dell/DellLCService"
+ }
+ }
+ }
+ }
+
+ action_api_resp = {
+ "Actions": {
+ "#DellLCService.GetRemoteServicesAPIStatus": {
+ "target": "/redfish/v1/Managers/iDRAC.Embedded.1/Oem/Dell/DellLCService/Actions/DellLCService.GetRemoteServicesAPIStatus"
+ }
+ }
+ }
+
+ action_api_resp_restart = {
+ RESTART_KEY: {
+ RESET_ALLOWABLE_KEY: [
+ "GracefulRestart"
+ ],
+ "target": "/redfish/v1/Managers/iDRAC.Embedded.1/Actions/Manager.Reset"
+ }
+ }
+
+ lc_status_invoke = {
+ "LCStatus": "Ready"
+ }
+ lc_status_invoke_not_ready = {
+ "LCStatus": "Not Initialized"
+ }
+
+ validate_allowed_values = {
+ "Actions": {
+ RESTART_KEY: {
+ RESET_ALLOWABLE_KEY: [
+ "GracefulRestart"
+ ],
+ "target": "/redfish/v1/Managers/iDRAC.Embedded.1/Actions/Manager.Reset"
+ },
+ "#Manager.ResetToDefaults": {
+ RESET_ALLOWABLE_KEY: [
+ "ResetAll",
+ "PreserveNetworkAndUsers"
+ ],
+ "target": "/redfish/v1/Managers/iDRAC.Embedded.1/Actions/Manager.ResetToDefaults"
+ },
+ "Oem": {
+ "#DellManager.ResetToDefaults": {
+ RESET_ALLOWABLE_KEY: [
+ "All",
+ "CustomDefaults",
+ "Default",
+ "ResetAllWithRootDefaults"
+ ],
+ "target": "/redfish/v1/Managers/iDRAC.Embedded.1/Actions/Oem/DellManager.ResetToDefaults"
+ },
+ "#DellManager.SetCustomDefaults": {
+ "target": "/redfish/v1/Managers/iDRAC.Embedded.1/Actions/Oem/DellManager.SetCustomDefaults"
+ },
+ }
+ },
+ "Oem": {
+ "Dell": {
+ "CustomDefaultsDownloadURI": "/redfish/v1/Managers/iDRAC.Embedded.1/Oem/Dell/CustomDefaultsDownloadURI"
+ }
+ }
+ }
+
+ custom_default_content = "<SystemConfiguration Model=\"PowerEdge R7525\" ServiceTag=\"2V4TK93\">\n<Component FQDD=\"iDRAC.Embedded.1\">\n \
+ <Attribute Name=\"IPMILan.1#Enable\">Disabled</Attribute>\n </Component>\n\n</SystemConfiguration>"
@pytest.fixture
- def idrac_mock(self, mocker):
- omsdk_mock = MagicMock()
+ def idrac_reset_mock(self):
idrac_obj = MagicMock()
- omsdk_mock.config_mgr = idrac_obj
- type(idrac_obj).reset_idrac = Mock(return_value="idracreset")
return idrac_obj
@pytest.fixture
- def idrac_config_mngr_reset_mock(self, mocker):
- try:
- config_manager_obj = mocker.patch(MODULE_PATH + 'idrac_reset.config_mgr')
- except AttributeError:
- config_manager_obj = MagicMock()
+ def idrac_connection_reset_mock(self, mocker, idrac_reset_mock):
+ idrac_conn_mock = mocker.patch(MODULE_PATH + 'iDRACRedfishAPI',
+ return_value=idrac_reset_mock)
+ idrac_conn_mock.return_value.__enter__.return_value = idrac_reset_mock
+ return idrac_conn_mock
+
+ def test_is_check_idrac_latest(self, idrac_default_args, idrac_connection_reset_mock, mocker):
+ allowed_values = ["All", "Default", "ResetAllWithRootDefaults"]
+ mocker.patch(MODULE_PATH + "get_idrac_firmware_version", return_value="7.10.05")
+ mocker.patch(MODULE_PATH + GET_BASE_URI_KEY, return_value=IDRAC_URI)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ reset_obj = self.module.FactoryReset(idrac_connection_reset_mock, f_module, allowed_choices=allowed_values)
+ res = reset_obj.is_check_idrac_latest()
+ assert res is True
+
+ def test_check_mode_output(self, idrac_default_args, idrac_connection_reset_mock, mocker):
+ # Scenario - When Reset to default is not passed and check mode is true
+ allowed_values = ["All", "Default", "ResetAllWithRootDefaults"]
+ mocker.patch(MODULE_PATH + "get_idrac_firmware_version", return_value="7.10.05")
+ mocker.patch(MODULE_PATH + GET_BASE_URI_KEY, return_value=IDRAC_URI)
+ mocker.patch(MODULE_PATH + "Validation.validate_graceful_restart_option", return_value=False)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
+ reset_obj = self.module.FactoryReset(idrac_connection_reset_mock, f_module, allowed_choices=allowed_values)
+ with pytest.raises(Exception) as exc:
+ reset_obj.check_mode_output(True)
+ assert exc.value.args[0] == CHANGES_NOT_FOUND
+
+ def test_execute(self, idrac_default_args, idrac_connection_reset_mock, mocker):
+ allowed_values = ["All", "Default", "ResetAllWithRootDefaults", "CustomDefaults"]
+ allowed_values_without_cd = ["All", "Default", "ResetAllWithRootDefaults"]
+ # Scenario - When 'GracefulRestart' is not supported and iDRAC8 and check_mode True
+ mocker.patch(MODULE_PATH + "get_idrac_firmware_version", return_value="2.81.81")
+ mocker.patch(MODULE_PATH + GET_BASE_URI_KEY, return_value=IDRAC_URI)
+ mocker.patch(MODULE_PATH + "Validation.validate_graceful_restart_option", return_value=False)
+ mocker.patch(MODULE_PATH + CHECK_IDRAC_VERSION, return_value=False)
+ idrac_default_args.update({})
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
+ reset_obj = self.module.FactoryReset(idrac_connection_reset_mock, f_module, allowed_choices=allowed_values)
+ with pytest.raises(Exception) as exc:
+ reset_obj.execute()
+ assert exc.value.args[0] == CHANGES_NOT_FOUND
+
+ # Scenario: when success message is returned for graceful restart for IDRAC8 or IDRAC9
obj = MagicMock()
- config_manager_obj.config_mgr.return_value = obj
- config_manager_obj.config_mgr.reset_idrac().return_value = obj
- return config_manager_obj
-
- def test_main_idrac_reset_success_case01(self, idrac_reset_connection_mock, idrac_default_args, mocker):
- mocker.patch(MODULE_PATH + "idrac_reset.run_idrac_reset",
- return_value=({"Status": "Success"}, False))
- idrac_reset_connection_mock.config_mgr.reset_idrac.return_value = {"Status": "Success"}
- idrac_reset_connection_mock.config_mgr.reset_idrac.return_value = "Success"
- result = self._run_module(idrac_default_args)
- assert result == {'msg': 'Successfully performed iDRAC reset.',
- 'reset_status': ({'Status': 'Success'}, False), 'changed': False}
+ obj.status_code = 204
+ obj.json_data = self.lc_status_invoke
+
+ def mock_get_dynamic_uri_request(*args, **kwargs):
+ if len(args) > 2 and args[2] == 'Links':
+ return self.lc_status_api_links
+ elif len(args) > 2 and args[2] == 'Actions':
+ return self.action_api_resp_restart
+ return self.action_api_resp
+ mocker.patch(MODULE_PATH + CHECK_IDRAC_VERSION, return_value=True)
+ mocker.patch(MODULE_PATH + GET_BASE_URI_KEY, return_value=IDRAC_URI)
+ mocker.patch(MODULE_PATH + INVOKE_REQ_KEY, return_value=obj)
+ mocker.patch(MODULE_PATH + "get_dynamic_uri",
+ side_effect=mock_get_dynamic_uri_request)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ reset_obj = self.module.FactoryReset(idrac_connection_reset_mock, f_module, allowed_choices=allowed_values)
+ msg_resp, resp = reset_obj.execute()
+ assert msg_resp['msg'] == IDRAC_RESET_SUCCESS_MSG
+
+ # Scenario: when success message reset_to_default is passed as 'Default' for idrac9 with job_wait set to True
+ obj.status_code = 200
+ obj2 = MagicMock()
+ obj3 = MagicMock()
+ obj2.json_data = self.validate_allowed_values
+ obj3.json_data = self.lc_status_invoke_not_ready
+
+ def mock_get_dynamic_uri_request(*args, **kwargs):
+ if len(args) > 2 and args[2] == 'Links':
+ return self.lc_status_api_links
+ elif len(args) > 2 and args[2] == 'Actions':
+ return self.validate_allowed_values
+ return self.action_api_resp
+ mocker.patch(MODULE_PATH + "get_idrac_firmware_version", return_value="7.10.05")
+ mocker.patch(MODULE_PATH + CHECK_IDRAC_VERSION, return_value=True)
+ mocker.patch(MODULE_PATH + GET_BASE_URI_KEY, return_value=IDRAC_URI)
+ mocker.patch(MODULE_PATH + INVOKE_REQ_KEY, side_effect=[obj, obj2, obj, URLError('URL error occurred'), obj, URLError('URL error occurred'), obj3, obj])
+ mocker.patch(MODULE_PATH + "get_dynamic_uri",
+ side_effect=mock_get_dynamic_uri_request)
+ idrac_default_args.update({"reset_to_default": "Default"})
+ idrac_default_args.update({"wait_for_idrac": True})
+ idrac_default_args.update({"job_wait_timeout": 300})
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ reset_obj = self.module.FactoryReset(idrac_connection_reset_mock, f_module, allowed_choices=allowed_values)
+ msg_resp, resp = reset_obj.execute()
+ assert msg_resp['msg'] == IDRAC_RESET_SUCCESS_MSG
+
+ # Scenario: when success message reset_to_default is passed as 'CustomDefaults' with custom_default_buffer
+ obj4 = MagicMock()
+ obj4.json_data = {'LCStatus': 'NOTINITIALIZED'}
+ obj2.headers = {'Location': "/joburl/JID12345"}
+ obj2.status_code = 200
+ # allowed_values.append("CustomDefaults")
+ job_resp_completed = {'JobStatus': 'Completed'}
+ idrac_redfish_resp = (False, 'Job Success', job_resp_completed, 1200)
+ mocker.patch(MODULE_PATH + "get_idrac_firmware_version", return_value="7.10.05")
+ mocker.patch(MODULE_PATH + CHECK_IDRAC_VERSION, return_value=True)
+ mocker.patch(MODULE_PATH + GET_BASE_URI_KEY, return_value=IDRAC_URI)
+ mocker.patch(MODULE_PATH + VALIDATE_RESET_OPTION_KEY, side_effect=[(allowed_values, True), (allowed_values, True)])
+ mocker.patch(MODULE_PATH + INVOKE_REQ_KEY, side_effect=[obj, obj2, obj, obj2])
+ mocker.patch(MODULE_PATH + 'idrac_redfish_job_tracking', return_value=idrac_redfish_resp)
+ mocker.patch(MODULE_PATH + "get_dynamic_uri",
+ side_effect=[self.lc_status_api_links, self.action_api_resp_restart,
+ self.validate_allowed_values, self.validate_allowed_values,
+ self.validate_allowed_values, self.lc_status_api_links, self.action_api_resp_restart])
+ idrac_default_args.update({"reset_to_default": "CustomDefaults", "custom_defaults_buffer": self.custom_default_content})
+ idrac_default_args.update({"wait_for_idrac": False})
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ reset_obj = self.module.FactoryReset(idrac_connection_reset_mock, f_module, allowed_choices=allowed_values)
+ msg_resp, resp = reset_obj.execute()
+ assert msg_resp['msg'] == IDRAC_RESET_RESET_TRIGGER_MSG
- def test_run_idrac_reset_success_case01(self, idrac_reset_connection_mock, idrac_default_args):
- f_module = self.get_module_mock(params=idrac_default_args)
- result = self.module.run_idrac_reset(idrac_reset_connection_mock, f_module)
- assert result == idrac_reset_connection_mock.config_mgr.reset_idrac()
+ # Scenario - When reset_to_default is passed and iDRAC8 and check_mode True
+ mocker.patch(MODULE_PATH + "get_idrac_firmware_version", return_value="2.81.81")
+ mocker.patch(MODULE_PATH + GET_BASE_URI_KEY, return_value=IDRAC_URI)
+ mocker.patch(MODULE_PATH + CHECK_IDRAC_VERSION, return_value=False)
+ mocker.patch(MODULE_PATH + VALIDATE_RESET_OPTION_KEY, return_value=(None, False))
+ idrac_default_args.update({"reset_to_default": "CustomDefaults"})
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
+ reset_obj = self.module.FactoryReset(idrac_connection_reset_mock, f_module, allowed_choices=allowed_values)
+ with pytest.raises(Exception) as exc:
+ reset_obj.execute()
+ assert exc.value.args[0] == CHANGES_NOT_FOUND
+
+ # Scenario - When reset_to_default is passed and iDRAC8 and check_mode False
+ mocker.patch(MODULE_PATH + "get_idrac_firmware_version", return_value="2.81.81")
+ mocker.patch(MODULE_PATH + GET_BASE_URI_KEY, return_value=IDRAC_URI)
+ mocker.patch(MODULE_PATH + VALIDATE_RESET_OPTION_KEY, return_value=(None, False))
+ mocker.patch(MODULE_PATH + CHECK_IDRAC_VERSION, return_value=False)
+ idrac_default_args.update({"reset_to_default": "CustomDefaults"})
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ reset_obj = self.module.FactoryReset(idrac_connection_reset_mock, f_module, allowed_choices=allowed_values)
+ with pytest.raises(Exception) as exc:
+ reset_obj.execute()
+ assert exc.value.args[0] == RESET_TO_DEFAULT_ERROR_MSG.format(reset_to_default='CustomDefaults')
+
+ # Scenario - When reset_to_default is CustomDefaults and iDRAC9 firmware version not supported
+ mocker.patch(MODULE_PATH + "get_idrac_firmware_version", return_value="6.99.99")
+ mocker.patch(MODULE_PATH + GET_BASE_URI_KEY, return_value=IDRAC_URI)
+ mocker.patch(MODULE_PATH + VALIDATE_RESET_OPTION_KEY, return_value=(allowed_values_without_cd, True))
+ mocker.patch(MODULE_PATH + CHECK_LC_STATUS, return_value=None)
+ mocker.patch(MODULE_PATH + CHECK_IDRAC_VERSION, return_value=False)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ reset_obj = self.module.FactoryReset(idrac_connection_reset_mock, f_module, allowed_choices=allowed_values)
+ with pytest.raises(Exception) as exc:
+ reset_obj.execute()
+ assert exc.value.args[0] == CUSTOM_ERROR.format(reset_to_default="CustomDefaults",
+ supported_values=allowed_values_without_cd)
+
+ # Scenario - When reset_to_default is passed and iDRAC9 and check_mode True
+ mocker.patch(MODULE_PATH + "get_idrac_firmware_version", return_value="7.10.60")
+ mocker.patch(MODULE_PATH + GET_BASE_URI_KEY, return_value=IDRAC_URI)
+ mocker.patch(MODULE_PATH + VALIDATE_RESET_OPTION_KEY, return_value=(allowed_values, False))
+ mocker.patch(MODULE_PATH + CHECK_IDRAC_VERSION, return_value=True)
+ idrac_default_args.update({"reset_to_default": "CustomDefaults", "custom_defaults_buffer": self.custom_default_content})
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
+ reset_obj = self.module.FactoryReset(idrac_connection_reset_mock, f_module, allowed_choices=allowed_values)
+ with pytest.raises(Exception) as exc:
+ reset_obj.execute()
+ assert exc.value.args[0] == CHANGES_FOUND
- def test_run_idrac_reset_status_success_case02(self, idrac_reset_connection_mock, idrac_default_args):
+ # Scenario - When reset_to_default is passed and iDRAC9 with firmware version not supported and check_mode True
+ mocker.patch(MODULE_PATH + "get_idrac_firmware_version", return_value="6.81.81")
+ mocker.patch(MODULE_PATH + GET_BASE_URI_KEY, return_value=IDRAC_URI)
+ mocker.patch(MODULE_PATH + CHECK_IDRAC_VERSION, return_value=True)
+ idrac_default_args.update({"reset_to_default": "CustomDefaults", "custom_defaults_buffer": self.custom_default_content})
f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
- result = self.module.run_idrac_reset(idrac_reset_connection_mock, f_module)
- assert result == {'Message': 'Changes found to commit!', 'Status': 'Success', 'changes_applicable': True}
+ reset_obj = self.module.FactoryReset(idrac_connection_reset_mock, f_module, allowed_choices=allowed_values)
+ with pytest.raises(Exception) as exc:
+ reset_obj.execute()
+ assert exc.value.args[0] == CHANGES_NOT_FOUND
- @pytest.mark.parametrize("exc_type", [SSLValidationError, URLError, ValueError, TypeError,
- ConnectionError, HTTPError])
- def test_main_exception_handling_case(self, exc_type, mocker, idrac_reset_connection_mock, idrac_default_args):
+ # Scenario - When reset_to_default is 'CustomDefaults' and iDRAC9 and custom_defaults_file is passed
json_str = to_text(json.dumps({"data": "out"}))
- if exc_type not in [HTTPError, SSLValidationError]:
- mocker.patch(MODULE_PATH + 'idrac_reset.run_idrac_reset', side_effect=exc_type('test'))
+ mocker.patch(MODULE_PATH + "get_idrac_firmware_version", return_value="7.10.05")
+ mocker.patch(MODULE_PATH + CHECK_IDRAC_VERSION, return_value=True)
+ mocker.patch(MODULE_PATH + CHECK_LC_STATUS, return_value=None)
+ mocker.patch(MODULE_PATH + "Validation.validate_path", return_value=None)
+ mocker.patch(MODULE_PATH + "Validation.validate_file_format", return_value=None)
+ mocker.patch(MODULE_PATH + "Validation.validate_custom_option", return_value=None)
+ mocker.patch(MODULE_PATH + 'open', mocker.mock_open(read_data=self.custom_default_content))
+ mocker.patch(MODULE_PATH + GET_BASE_URI_KEY, return_value=IDRAC_URI)
+ mocker.patch(MODULE_PATH + VALIDATE_RESET_OPTION_KEY, side_effect=[(allowed_values, True), (allowed_values, True)])
+ mocker.patch(MODULE_PATH + INVOKE_REQ_KEY, side_effect=[obj2, obj, HTTPError("https://test.com",
+ 401, HTTP_ERROR_MSG, {"accept-type": RETURN_TYPE},
+ StringIO(json_str))])
+ mocker.patch(MODULE_PATH + 'idrac_redfish_job_tracking', return_value=idrac_redfish_resp)
+ mocker.patch(MODULE_PATH + "get_dynamic_uri",
+ side_effect=[self.validate_allowed_values, self.validate_allowed_values,
+ self.validate_allowed_values, self.lc_status_api_links, self.action_api_resp_restart])
+ idrac_default_args.update({"reset_to_default": "CustomDefaults", "custom_defaults_file": FILE_PATH})
+ idrac_default_args.update({"wait_for_idrac": True})
+ idrac_default_args.update({"job_wait_timeout": 300})
+ idrac_default_args.update({"force_reset": True})
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ reset_obj = self.module.FactoryReset(idrac_connection_reset_mock, f_module, allowed_choices=allowed_values)
+ msg_resp, resp = reset_obj.execute()
+ assert msg_resp['msg'] == IDRAC_RESET_SUCCESS_MSG
+
+ # Scenario: Failure - when reset_to_default is passed as 'ResetAllWithRootDefaults' for idrac9 with job_wait set to True
+ def mock_get_dynamic_uri_request(*args, **kwargs):
+ if len(args) > 2 and args[2] == 'Links':
+ return self.lc_status_api_links
+ elif len(args) > 2 and args[2] == 'Actions':
+ return self.validate_allowed_values
+ return self.action_api_resp
+ obj.status_code = 400
+ mocker.patch(MODULE_PATH + "get_idrac_firmware_version", return_value="7.10.05")
+ mocker.patch(MODULE_PATH + CHECK_LC_STATUS, return_value=None)
+ mocker.patch(MODULE_PATH + GET_BASE_URI_KEY, return_value=IDRAC_URI)
+ mocker.patch(MODULE_PATH + VALIDATE_RESET_OPTION_KEY, return_value=(allowed_values, True))
+ mocker.patch(MODULE_PATH + INVOKE_REQ_KEY, side_effect=[obj])
+ mocker.patch(MODULE_PATH + "get_dynamic_uri",
+ side_effect=mock_get_dynamic_uri_request)
+ idrac_default_args.update({"reset_to_default": "ResetAllWithRootDefaults"})
+ idrac_default_args.update({"wait_for_idrac": False})
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ reset_obj = self.module.FactoryReset(idrac_connection_reset_mock, f_module, allowed_choices=allowed_values)
+ msg_resp, resp = reset_obj.execute()
+ assert msg_resp['msg'] == FAILED_RESET_MSG
+
+ def test_idrac_reset_main_positive_case(self, idrac_default_args,
+ idrac_connection_reset_mock, mocker):
+ # Scenario - When reset_to_default is passed and successful
+ msg_resp = {'msg': "Success", 'changed': True}
+ mocker.patch(MODULE_PATH + "get_idrac_firmware_version", return_value="7.10.05")
+ mocker.patch(MODULE_PATH + GET_BASE_URI_KEY, return_value=IDRAC_URI)
+ mocker.patch(MODULE_PATH + EXECUTE_KEY, return_value=(msg_resp, {}))
+ data = self._run_module(idrac_default_args)
+ assert data['msg'] == "Success"
+
+ # Scenario - When reset_to_default is passed and Failed
+ msg_resp = {'msg': "Failure", 'changed': False}
+ mocker.patch(MODULE_PATH + "get_idrac_firmware_version", return_value="7.10.05")
+ mocker.patch(MODULE_PATH + GET_BASE_URI_KEY, return_value=IDRAC_URI)
+ mocker.patch(MODULE_PATH + EXECUTE_KEY, return_value=(msg_resp, {}))
+ data = self._run_module(idrac_default_args)
+ assert data['msg'] == "Failure" and data['failed'] is True
+
+ # Scenario - When reset_to_default is None and successful
+ msg_resp = {'msg': "Success", 'changed': True}
+ output = {
+ "reset_status": {
+ "idracreset": {
+ "Data": {
+ "StatusCode": 204
+ },
+ "Message": "Success",
+ "Status": "Success",
+ "StatusCode": 204,
+ "retval": True
+ }
+ }
+ }
+ mocker.patch(MODULE_PATH + "get_idrac_firmware_version", return_value="7.10.05")
+ mocker.patch(MODULE_PATH + GET_BASE_URI_KEY, return_value=IDRAC_URI)
+ mocker.patch(MODULE_PATH + EXECUTE_KEY, return_value=(msg_resp, output))
+ data = self._run_module(idrac_default_args)
+ assert data['msg'] == "Success" and data['reset_status'] == output
+
+ # Scenario - When reset_to_default is None and Failed
+ output['reset_status']['idracreset']['Message'] = "Failure"
+ output['reset_status']['idracreset']['Status'] = "Failure"
+ output['reset_status']['idracreset']['StatusCode'] = 404
+ msg_resp = {'msg': "Failure", 'changed': False}
+ mocker.patch(MODULE_PATH + "get_idrac_firmware_version", return_value="7.10.05")
+ mocker.patch(MODULE_PATH + GET_BASE_URI_KEY, return_value=IDRAC_URI)
+ mocker.patch(MODULE_PATH + EXECUTE_KEY, return_value=(msg_resp, output))
+ data = self._run_module(idrac_default_args)
+ assert data['msg'] == "Failure" and data['reset_status'] == output
+
+ @pytest.mark.parametrize("exc_type",
+ [URLError, HTTPError, SSLValidationError, ConnectionError, TypeError, ValueError])
+ def test_idrac_reset_main_exception_handling_case(self, exc_type, idrac_default_args,
+ idrac_connection_reset_mock, mocker):
+ json_str = to_text(json.dumps({"data": "out"}))
+ mocker.patch(MODULE_PATH + GET_BASE_URI_KEY, return_value=IDRAC_URI)
+ if exc_type in [HTTPError, SSLValidationError]:
+ mocker.patch(MODULE_PATH + EXECUTE_KEY,
+ side_effect=exc_type('https://testhost.com', 400,
+ HTTP_ERROR_MSG,
+ {"accept-type": RETURN_TYPE},
+ StringIO(json_str)))
else:
- mocker.patch(MODULE_PATH + 'idrac_reset.run_idrac_reset',
- side_effect=exc_type('https://testhost.com', 400, 'http error message',
- {"accept-type": "application/json"}, StringIO(json_str)))
- if not exc_type == URLError:
- result = self._run_module_with_fail_json(idrac_default_args)
- assert result['failed'] is True
+ mocker.patch(MODULE_PATH + "get_idrac_firmware_version",
+ side_effect=exc_type('test'))
+ result = self._run_module(idrac_default_args)
+ if exc_type == URLError:
+ assert result['unreachable'] is True
else:
- result = self._run_module(idrac_default_args)
+ assert result['failed'] is True
assert 'msg' in result
diff --git a/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_session.py b/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_session.py
new file mode 100644
index 000000000..a28aab255
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_session.py
@@ -0,0 +1,590 @@
+# -*- coding: utf-8 -*-
+
+#
+# Dell OpenManage Ansible Modules
+# Version 9.2.0
+# Copyright (C) 2024 Dell Inc. or its subsidiaries. All Rights Reserved.
+
+# 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
+
+
+from io import StringIO
+import json
+
+
+from urllib.error import HTTPError, URLError
+import pytest
+from mock import MagicMock
+from ansible_collections.dellemc.openmanage.plugins.modules import idrac_session
+from ansible_collections.dellemc.openmanage.tests.unit.plugins.modules.common import FakeAnsibleModule
+from ansible_collections.dellemc.openmanage.tests.unit.plugins.modules.common import AnsibleFailJSonException
+from ansible.module_utils.urls import SSLValidationError
+from ansible.module_utils._text import to_text
+
+
+MODULE_PATH = 'ansible_collections.dellemc.openmanage.plugins.modules.idrac_session.'
+MODULE_UTILS_PATH = 'ansible_collections.dellemc.openmanage.plugins.module_utils.utils.'
+
+REDFISH = "/redfish/v1"
+SESSIONS = "Sessions"
+ODATA = "@odata.id"
+ODATA_REGEX = "(.*?)@odata"
+
+SESSION_URL = "/redfish/v1/SessionService/Sessions"
+GET_SESSION_URL = "Session.get_session_url"
+
+CREATE_SUCCESS_MSG = "The session has been created successfully."
+DELETE_SUCCESS_MSG = "The session has been deleted successfully."
+FAILURE_MSG = "Unable to '{operation}' a session."
+CHANGES_FOUND_MSG = "Changes found to be applied."
+NO_CHANGES_FOUND_MSG = "No changes found to be applied."
+HTTPS_PATH = "https://testhost.com"
+HTTP_ERROR = "http error message"
+APPLICATION_JSON = "application/json"
+
+
+class TestSession(FakeAnsibleModule):
+ """
+ Main class for testing the idrac_session module.
+ """
+ module = idrac_session
+
+ @pytest.fixture
+ def idrac_session_mock(self):
+ """
+ Creates a mock object for the `idrac_session` fixture.
+
+ This function uses the `MagicMock` class from the `unittest.mock` module to create a mock
+ object. The mock object is then returned by the function.
+
+ Returns:
+ MagicMock: A mock object representing the `idrac_session`.
+ """
+ idrac_obj = MagicMock()
+ return idrac_obj
+
+ @pytest.fixture
+ def idrac_connection_session_mock(self, mocker, idrac_session_mock):
+ """
+ Returns a mock object for the `SessionAPI` class from the `MODULE_PATH` module.
+ The mock object is initialized with the `idrac_session_mock` as the return value.
+ The `__enter__` method of the mock object is also mocked to return `idrac_session_mock`.
+
+ :param mocker: The pytest fixture for mocking objects.
+ :type mocker: pytest_mock.plugin.MockerFixture
+ :param idrac_session_mock: The mock object for the `idrac_session_mock`.
+ :type idrac_session_mock: Any
+ :return: The mock object for the `SessionAPI` class.
+ :rtype: MagicMock
+ """
+ idrac_conn_mock = mocker.patch(MODULE_PATH + 'SessionAPI',
+ return_value=idrac_session_mock)
+ idrac_conn_mock.return_value.__enter__.return_value = idrac_session_mock
+ return idrac_conn_mock
+
+ def test_get_session_url(self, idrac_default_args, idrac_connection_session_mock, mocker):
+ """
+ Test the `get_session_url` method of the `Session` class.
+
+ This test function mocks the `get_dynamic_uri` function to return a dictionary
+ containing the session URL. It then creates a `f_module` object with the
+ `idrac_default_args` and `check_mode` set to `False`. It initializes a
+ `session_obj` with the `idrac_connection_session_mock` and `f_module`.
+ Finally, it calls the `get_session_url` method on the `session_obj` and
+ asserts that the returned session URL is equal to the `SESSION_URL` constant.
+
+ Args:
+ self (TestGetSessionUrl): The test case object.
+ idrac_default_args (dict): The default arguments for the IDRAC connection.
+ idrac_connection_session_mock (MagicMock): The mock object for the IDRAC
+ connection session.
+ mocker (MagicMock): The mocker object for mocking functions and modules.
+
+ Returns:
+ None
+ """
+ v1_resp = {'Links': {'Sessions': {'@odata.id': SESSION_URL}}}
+ mocker.patch(MODULE_PATH + "get_dynamic_uri",
+ return_value=v1_resp)
+ f_module = self.get_module_mock(
+ params=idrac_default_args, check_mode=False)
+ session_obj = self.module.Session(
+ idrac_connection_session_mock, f_module)
+ sessions_url = session_obj.get_session_url()
+ assert sessions_url == SESSION_URL
+
+
+class TestCreateSession(FakeAnsibleModule):
+ """
+ Main class for testing the create_session module.
+ """
+ module = idrac_session
+
+ @pytest.fixture
+ def create_session_mock(self):
+ """
+ Creates a mock object for the `idrac_session` fixture.
+
+ This function is a pytest fixture that creates a mock object of type `MagicMock` and
+ assigns it to the variable `idrac_obj`. The `idrac_obj` mock object is then returned
+ by the fixture.
+
+ Returns:
+ MagicMock: A mock object representing the `idrac_session` fixture.
+ """
+ idrac_obj = MagicMock()
+ return idrac_obj
+
+ @pytest.fixture
+ def idrac_connection_session_mock(self, mocker, create_session_mock):
+ """
+ Creates a fixture for mocking the IDRAC connection session.
+
+ This fixture uses the `mocker` fixture from the `pytest` library to patch the
+ `SessionAPI` class from the `MODULE_PATH` module. It returns a mock object of the
+ `SessionAPI` class with the `create_session_mock` object as the return value.
+ The `__enter__` method of the mock object is also patched to return the
+ `create_session_mock` object.
+
+ Parameters:
+ - `self` (TestCase): The test case instance.
+ - `mocker` (MockerFixture): The `mocker` fixture from the `pytest` library.
+ - `create_session_mock` (Mock): The mock object representing the `create_session_mock`.
+
+ Returns:
+ - `idrac_conn_mock` (MagicMock): The mock object of the `SessionAPI` class.
+ """
+ idrac_conn_mock = mocker.patch(MODULE_PATH + 'SessionAPI',
+ return_value=create_session_mock)
+ idrac_conn_mock.return_value.__enter__.return_value = create_session_mock
+ return idrac_conn_mock
+
+ def test_session_operation(self, idrac_default_args, idrac_connection_session_mock):
+ """
+ Test the session operation of the module.
+
+ Args:
+ idrac_default_args (dict): The default arguments for the IDRAC connection.
+ idrac_connection_session_mock (MagicMock): The mock object for the IDRAC
+ connection session.
+
+ Returns:
+ None
+
+ This function tests the session operation of the module by creating a session and deleting
+ a session.
+ It updates the `idrac_default_args` dictionary with the appropriate state parameter and
+ creates a `f_module` object with the updated arguments. It then creates a
+ `session_operation_obj` object using the `CreateSession` class of the module and asserts
+ that it is an instance of `CreateSession`.
+ It repeats the same process for deleting a session by updating the `idrac_default_args`
+ dictionary with the state parameter set to "absent" and creating a `session_operation_obj`
+ object using the
+ `DeleteSession` class of the module. It asserts that it is an instance of `DeleteSession`.
+ """
+ idrac_default_args.update({"state": "present"})
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ session_operation_obj = self.module.CreateSession(idrac_connection_session_mock, f_module)
+ assert isinstance(session_operation_obj, self.module.CreateSession)
+
+ idrac_default_args.update({"state": "absent"})
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ session_operation_obj = self.module.DeleteSession(idrac_connection_session_mock, f_module)
+ assert isinstance(session_operation_obj, self.module.DeleteSession)
+
+ def test_create_session_failure(self, idrac_connection_session_mock, mocker):
+ """
+ Test the failure scenario of creating a session.
+
+ Args:
+ idrac_connection_session_mock (MagicMock): A mock object for the
+ idrac_connection_session.
+ mocker (MockerFixture): A fixture for mocking objects.
+
+ Returns:
+ None
+
+ This test function creates a session object using the `idrac_connection_session_mock` and
+ `f_module` objects.
+ It sets the `session_obj.get_session_url` to return a session URL.
+ It sets the `f_module.check_mode` to False and `f_module.params` to a dictionary containing
+ the username and password.
+ It mocks the `idrac_connection_session_mock.invoke_request` method to return a response
+ with a status code of 201.
+ It calls the `session_obj.execute()` method to create the session.
+ It asserts that the `f_module.exit_json` method is called once with the message "Unable to
+ 'create' a session." and `failed` set to True.
+ """
+ f_module = MagicMock()
+ session_obj = idrac_session.CreateSession(
+ idrac_connection_session_mock, f_module)
+ session_obj.get_session_url = MagicMock(return_value=SESSION_URL)
+ f_module.check_mode = False
+ f_module.params = {
+ "username": "admin",
+ "password": "password"
+ }
+ response_mock = MagicMock()
+ response_mock.status_code = 201
+ mocker.patch.object(idrac_connection_session_mock.return_value, 'invoke_request',
+ return_value=response_mock)
+
+ session_obj.execute()
+ f_module.exit_json.assert_called_once_with(
+ msg="Unable to 'create' a session.",
+ failed=True
+ )
+
+ def test_create_session_check_mode(self, idrac_connection_session_mock):
+ """
+ Test the create session functionality in check mode.
+
+ Args:
+ idrac_connection_session_mock (MagicMock): A mock object for the IDRAC connection
+ session.
+
+ Returns:
+ None
+
+ This function tests the create session functionality in check mode. It creates an instance
+ of the `CreateSession` class with the provided `idrac_connection_session_mock` and a mock
+ `f_module` object.
+ It sets the required parameters for the `f_module` object and mocks the `get_session_url`
+ method of the `session_obj` to return the session URL. It also mocks the `exit_json` method
+ of the `f_module` object.
+
+ Finally, it calls the `execute` method of the `session_obj` to execute the create session
+ functionality in check mode.
+
+ Note:
+ This function assumes that the necessary imports and setup for the test are already
+ done.
+ """
+ f_module = MagicMock()
+ session_obj = idrac_session.CreateSession(
+ idrac_connection_session_mock, f_module)
+ f_module = self.get_module_mock(
+ params={"session_id": "1234", "hostname": "X.X.X.X"}, check_mode=True)
+ session_obj.get_session_url = MagicMock(return_value=SESSION_URL)
+ f_module.exit_json = MagicMock()
+
+ session_obj.execute()
+
+ def test_create_session_success(self, idrac_connection_session_mock):
+ """
+ Test the successful creation of a session.
+
+ Args:
+ idrac_connection_session_mock (MagicMock): A mock object representing the IDRAC
+ connection session.
+
+ This test case verifies the successful creation of a session by mocking the necessary
+ objects and invoking the `execute()` method of the `CreateSession` class. It sets the
+ parameters for the `f_module` object, initializes the `session_obj` with the mocked
+ `idrac_connection_session_mock` and `f_module`, and mocks the necessary methods and
+ attributes of the `idrac` object. It then asserts that the `exit_json` method of the
+ `f_module` object is called with the expected arguments.
+
+ Returns:
+ None
+ """
+ f_module = self.get_module_mock(
+ params={"username": "admin", "password": "password"}, check_mode=False)
+ session_obj = idrac_session.CreateSession(idrac_connection_session_mock, f_module)
+ session_obj.get_session_url = MagicMock(return_value=SESSION_URL)
+ session_obj.idrac.invoke_request.return_value.status_code = 201
+ session_obj.idrac.invoke_request.return_value.json_data = {"SessionID": "123456"}
+ session_obj.idrac.invoke_request.return_value.headers.get.return_value = "token123"
+ f_module.exit_json = MagicMock()
+
+ session_obj.execute()
+ f_module.exit_json.assert_called_once_with(
+ msg=CREATE_SUCCESS_MSG,
+ changed=True,
+ session_data={"SessionID": "123456"},
+ x_auth_token="token123"
+ )
+
+
+class TestDeleteSession(FakeAnsibleModule):
+ """
+ Main class for testing the delete session module.
+ """
+ module = idrac_session
+
+ @pytest.fixture
+ def idrac_session_mock(self):
+ """
+ Creates a mock object for the `idrac_session` fixture.
+
+ This function uses the `MagicMock` class from the `unittest.mock` module to create a mock
+ object.
+ The mock object is then returned by the function.
+
+ Returns:
+ MagicMock: A mock object representing the `idrac_session`.
+ """
+ idrac_obj = MagicMock()
+ return idrac_obj
+
+ @pytest.fixture
+ def idrac_connection_session_mock(self, mocker, idrac_session_mock):
+ """
+ Returns a mocked instance of the SessionAPI class from the specified module path.
+ The mocked instance is created using the `mocker.patch` function. The `idrac_session_mock`
+ parameter is passed as the return value of the mocked instance. The `__enter__` method
+ of the mocked instance is also mocked to return the `idrac_session_mock`.
+ :param mocker: The mocker fixture provided by the pytest framework.
+ :type mocker: _pytest.monkeypatch.MonkeyPatch
+ :param idrac_session_mock: The mocked instance of the idrac session.
+ :type idrac_session_mock: Any
+ :return: The mocked instance of the SessionAPI class.
+ :rtype: MagicMock
+ """
+ idrac_conn_mock = mocker.patch(MODULE_PATH + 'SessionAPI',
+ return_value=idrac_session_mock)
+ idrac_conn_mock.return_value.__enter__.return_value = idrac_session_mock
+ return idrac_conn_mock
+
+ def test_delete_session_success_check_mode_changes(self, idrac_connection_session_mock):
+ """
+ Test the `delete_session_success_check_mode_changes` method of the `DeleteSession` class.
+
+ This method is responsible for testing the success case when the `delete_session` method
+ is called in check mode.
+ It verifies that the `exit_json` method of the `f_module` object is called with the
+ appropriate arguments when the session is successfully deleted.
+
+ Parameters:
+ - idrac_connection_session_mock (MagicMock): A mock object representing the
+ `idrac_connection_session` object.
+
+ Returns:
+ None
+ """
+ f_module = MagicMock()
+ delete_session_obj = idrac_session.DeleteSession(idrac_connection_session_mock, f_module)
+ delete_session_obj.idrac.invoke_request.return_value.status_code = 200
+ delete_session_obj.execute()
+ f_module.exit_json.assert_called_once_with(msg=CHANGES_FOUND_MSG, changed=True)
+
+ def test_delete_session_success_check_mode_no_changes(self, idrac_connection_session_mock):
+ """
+ Test the success case of deleting a session in check mode when no changes are expected.
+
+ Args:
+ idrac_connection_session_mock (MagicMock): A mock object representing the IDRAC
+ connection session.
+
+ This function tests the scenario where the deletion of a session is successful in check
+ mode and no changes are expected. It sets up the necessary mock objects and asserts that
+ the `exit_json` method of the `f_module` object is called once with the `msg` parameter
+ set to `NO_CHANGES_FOUND_MSG`.
+
+ Returns:
+ None
+ """
+ f_module = MagicMock()
+ delete_session_obj = idrac_session.DeleteSession(idrac_connection_session_mock, f_module)
+ delete_session_obj.idrac.invoke_request.return_value.status_code = 201
+ delete_session_obj.execute()
+ f_module.exit_json.assert_called_once_with(msg=NO_CHANGES_FOUND_MSG)
+
+ def test_delete_session_success(self, idrac_connection_session_mock):
+ """
+ Test the successful deletion of a session.
+
+ This test function verifies the behavior of the `DeleteSession` class when a session is
+ successfully deleted. It mocks the `idrac_connection_session_mock` object and sets up the
+ necessary parameters for the `f_module` object. It then creates an instance of the
+ `DeleteSession` class with the mocked `idrac_connection_session_mock` and the
+ `f_module` object.
+
+ The `get_session_url` method of the `session_obj` is mocked to return a specific session
+ URL. The `invoke_request` method of the `idrac` object of the `session_obj` is also mocked
+ to return a response with a status code of 200. The `exit_json` method of the `f_module`
+ object is mocked as well.
+
+ The `execute` method of the `session_obj` is called to execute the deletion of the session.
+ Finally, the `exit_json` method of the `f_module` object is asserted to have been called
+ with the expected arguments, including the success message and the changed flag set to
+ `True`.
+
+ Parameters:
+ - idrac_connection_session_mock (MagicMock): A mocked object representing the
+ `idrac_connection_session_mock` object.
+
+ Returns:
+ None
+ """
+ f_module = self.get_module_mock(
+ params={"session_id": "1234", "hostname": "X.X.X.X"}, check_mode=False)
+ session_obj = idrac_session.DeleteSession(idrac_connection_session_mock, f_module)
+ session_obj.get_session_url = MagicMock(return_value=SESSION_URL)
+ session_obj.idrac.invoke_request.return_value.status_code = 200
+ f_module.exit_json = MagicMock()
+ session_obj.execute()
+ f_module.exit_json.assert_called_once_with(msg=DELETE_SUCCESS_MSG, changed=True)
+
+ def test_delete_session_check_mode_false_no_changes(self, idrac_connection_session_mock):
+ """
+ Test the scenario where the delete session is executed in check mode with `check_mode` set
+ to False and no changes are expected.
+
+ Args:
+ idrac_connection_session_mock (MagicMock): A mock object representing the IDRAC
+ connection session.
+
+ Returns:
+ None
+
+ This function creates a mock module object with the specified parameters and
+ initializes the `DeleteSession` object with the mock IDRAC connection and module. It sets
+ the `get_session_url` method of the session object to return a specific session URL. It
+ sets the status code of the invoke request to 201. It then asserts that the `exit_json`
+ method of the module object is called once with the `msg` parameter set to the
+ `NO_CHANGES_FOUND_MSG` constant.
+ """
+ f_module = self.get_module_mock(
+ params={"session_id": "1234", "hostname": "X.X.X.X"}, check_mode=False)
+ session_obj = idrac_session.DeleteSession(idrac_connection_session_mock, f_module)
+ session_obj.get_session_url = MagicMock(return_value=SESSION_URL)
+ session_obj.idrac.invoke_request.return_value.status_code = 201
+ f_module.exit_json = MagicMock()
+ session_obj.execute()
+ f_module.exit_json.assert_called_once_with(msg=NO_CHANGES_FOUND_MSG)
+
+ def test_delete_session_http_error(self, idrac_connection_session_mock):
+ """
+ Test the behavior of the `DeleteSession` class when an HTTP error occurs during the
+ deletion of a session.
+
+ This test case creates a mock `f_module` object with the necessary parameters and
+ initializes a `DeleteSession` object with the mock `idrac_connection_session_mock` and the
+ `f_module` object. It then sets up the necessary mock functions and side effects to
+ simulate an HTTP error during the deletion of a session. Finally, it executes the
+ `execute()` method of the `DeleteSession` object and asserts that an
+ `AnsibleFailJSonException` is raised with the expected failure message and error
+ information.
+
+ Parameters:
+ - idrac_connection_session_mock (MagicMock): A mock object representing the
+ `idrac_connection_session_mock` parameter.
+
+ Raises:
+ - AssertionError: If the expected failure message or error information is not present
+ in the raised exception.
+
+ Returns:
+ None
+ """
+ f_module = self.get_module_mock(
+ params={"session_id": "1234", "hostname": "X.X.X.X"}, check_mode=False)
+ session_obj = idrac_session.DeleteSession(idrac_connection_session_mock, f_module)
+ session_obj.get_session_url = MagicMock(return_value=SESSION_URL)
+ session_obj.get_session_status = MagicMock(return_value=200)
+ json_str = to_text(json.dumps({"data": "out"}))
+ session_obj.idrac.invoke_request.side_effect = HTTPError(HTTPS_PATH, 200,
+ HTTP_ERROR,
+ {"accept-type": APPLICATION_JSON},
+ StringIO(json_str))
+ try:
+ session_obj.execute()
+ except AnsibleFailJSonException as ex:
+ assert ex.fail_msg == "Unable to 'delete' a session."
+ assert ex.fail_kwargs == {'error_info': {'data': 'out'}, 'failed': True}
+
+
+class TestMain(FakeAnsibleModule):
+ """
+ Class for testing the main.
+ """
+ module = idrac_session
+
+ @pytest.fixture
+ def idrac_session_mock(self):
+ """
+ Creates a mock object for the `idrac_session` fixture.
+
+ This function uses the `MagicMock` class from the `unittest.mock` module to create a mock
+ object.
+ The mock object is then returned by the function.
+
+ Returns:
+ MagicMock: A mock object representing the `idrac_session`.
+ """
+ idrac_obj = MagicMock()
+ return idrac_obj
+
+ @pytest.fixture
+ def idrac_connection_session_mock(self, mocker, idrac_session_mock):
+ """
+ Returns a mock object for the `SessionAPI` class from the `MODULE_PATH` module.
+ The mock object is initialized with the `idrac_session_mock` as the return value.
+ The `__enter__` method of the mock object is also mocked to return `idrac_session_mock`.
+
+ :param mocker: The pytest fixture for mocking objects.
+ :type mocker: pytest_mock.plugin.MockerFixture
+ :param idrac_session_mock: The mock object for the `idrac_session_mock`.
+ :type idrac_session_mock: Any
+ :return: The mock object for the `SessionAPI` class.
+ :rtype: MagicMock
+ """
+ idrac_conn_mock = mocker.patch(MODULE_PATH + 'SessionAPI',
+ return_value=idrac_session_mock)
+ idrac_conn_mock.return_value.__enter__.return_value = idrac_session_mock
+ return idrac_conn_mock
+
+ @pytest.mark.parametrize("exc_type",
+ [URLError, HTTPError, SSLValidationError, ConnectionError,
+ TypeError, ValueError])
+ def test_idrac_session_main_exception_handling_case(self, exc_type, ome_default_args, mocker):
+ """
+ Test the exception handling of the `idrac_session_main` module.
+
+ This function tests the exception handling of the `idrac_session_main` module by mocking
+ different exceptions and verifying the expected behavior.
+
+ Parameters:
+ - exc_type (Exception): The type of exception to be raised.
+ - ome_default_args (dict): The default arguments for the module.
+ - mocker (MockerFixture): The mocker fixture for mocking functions.
+
+ Returns:
+ None
+
+ Raises:
+ AssertionError: If the expected result does not match the actual result.
+
+ Notes:
+ - The function uses the `pytest.mark.parametrize` decorator to parameterize the test
+ cases.
+ - The `exc_type` parameter represents the type of exception to be raised.
+ - The `ome_default_args` parameter contains the default arguments for the module.
+ - The `mocker` parameter is used to mock functions and simulate different exceptions.
+ - The function calls the `_run_module` method with the `ome_default_args` to execute
+ the module.
+ - The function verifies the expected result based on the raised exception type.
+
+ """
+ json_str = to_text(json.dumps({"data": "out"}))
+ if exc_type in [HTTPError, SSLValidationError]:
+ mocker.patch(MODULE_PATH + "CreateSession.get_session_url",
+ side_effect=exc_type(HTTPS_PATH, 400,
+ HTTP_ERROR,
+ {"accept-type": APPLICATION_JSON},
+ StringIO(json_str)))
+ else:
+ ome_default_args.update({"state": "absent", "session_id": "1234",
+ "auth_token": "token123"})
+ mocker.patch(MODULE_PATH + "DeleteSession.get_session_url",
+ side_effect=exc_type('test'))
+ result = self._run_module(ome_default_args)
+ if exc_type == URLError:
+ assert result['unreachable'] is True
+ else:
+ assert result['failed'] is True
+ assert 'msg' in result
diff --git a/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_storage_volume.py b/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_storage_volume.py
new file mode 100644
index 000000000..3cdf742d2
--- /dev/null
+++ b/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_storage_volume.py
@@ -0,0 +1,1178 @@
+# -*- coding: utf-8 -*-
+
+#
+# Dell OpenManage Ansible Modules
+# Version 9.0.0
+# Copyright (C) 2024 Dell Inc. or its subsidiaries. All Rights Reserved.
+
+# 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
+
+import json
+import pytest
+from io import StringIO
+from ansible.module_utils._text import to_text
+from urllib.error import HTTPError, URLError
+from ansible.module_utils.urls import ConnectionError, SSLValidationError
+from ansible_collections.dellemc.openmanage.plugins.modules import idrac_storage_volume
+from ansible_collections.dellemc.openmanage.tests.unit.plugins.modules.common import FakeAnsibleModule
+from mock import MagicMock
+from copy import deepcopy
+
+MODULE_PATH = 'ansible_collections.dellemc.openmanage.plugins.modules.idrac_storage_volume.'
+MODULE_UTILS_PATH = 'ansible_collections.dellemc.openmanage.plugins.module_utils.utils.'
+
+SYSTEMS_URI = "/redfish/v1/Systems"
+iDRAC_JOB_URI = "/redfish/v1/Managers/iDRAC.Embedded.1/Jobs/{job_id}"
+CONTROLLER_NOT_EXIST_ERROR = "Specified Controller {controller_id} does not exist in the System."
+CONTROLLER_NOT_DEFINED = "Controller ID is required."
+SUCCESSFUL_OPERATION_MSG = "Successfully completed the {operation} storage volume operation."
+DRIVES_NOT_EXIST_ERROR = "No Drive(s) are attached to the specified Controller Id: {controller_id}."
+DRIVES_NOT_MATCHED = "Following Drive(s) {specified_drives} are not attached to the specified Controller Id: {controller_id}."
+NEGATIVE_OR_ZERO_MSG = "The value for the `{parameter}` parameter cannot be negative or zero."
+NEGATIVE_MSG = "The value for the `{parameter}` parameter cannot be negative."
+INVALID_VALUE_MSG = "The value for the `{parameter}` parameter is invalid."
+ID_AND_LOCATION_BOTH_DEFINED = "Either id or location is allowed."
+ID_AND_LOCATION_BOTH_NOT_DEFINED = "Either id or location should be specified."
+DRIVES_NOT_DEFINED = "Drives must be defined for volume creation."
+NOT_ENOUGH_DRIVES = "Number of sufficient disks not found in Controller '{controller_id}'!"
+WAIT_TIMEOUT_MSG = "The job is not complete after {0} seconds."
+JOB_TRIGERRED = "Successfully triggered the {0} storage volume operation."
+VOLUME_NAME_REQUIRED_FOR_DELETE = "Virtual disk name is a required parameter for remove virtual disk operations."
+VOLUME_NOT_FOUND = "Unable to find the virtual disk."
+CHANGES_NOT_FOUND = "No changes found to commit!"
+CHANGES_FOUND = "Changes found to commit!"
+ODATA_ID = "@odata.id"
+ODATA_REGEX = "(.*?)@odata"
+ATTRIBUTE = "</Attribute>"
+VIEW_OPERATION_FAILED = "Failed to fetch storage details."
+VIEW_CONTROLLER_DETAILS_NOT_FOUND = "Failed to find the controller {controller_id}."
+VIEW_OPERATION_CONTROLLER_NOT_SPECIFIED = "Controller identifier parameter is missing."
+VIEW_VIRTUAL_DISK_DETAILS_NOT_FOUND = "Failed to find the volume : {volume_id} in controller : {controller_id}."
+SUCCESS_STATUS = "Success"
+FAILED_STATUS = "Failed"
+CONTROLLER_BATTERY = "Battery.Integrated.1:RAID.SL.5-1"
+CONTROLLER_ID_FIRST = "AHCI.Embedded.1-1"
+CONTROLLER_ID_SECOND = "AHCI.Embedded.1-2"
+CONTROLLER_ID_THIRD = "AHCI.Embedded.1-3"
+CONTROLLER_ID_FOURTH = "RAID.SL.5-1"
+CONTROLLER_ID_FIFTH = "RAID.SL.5-3"
+SYSTEM = 'System.Embedded.1'
+ENCLOSURE_ID = 'Enclosure.Internal.0-1:RAID.SL.5-1'
+PHYSICAL_DISK_FIRST = 'Disk.Bay.0:Enclosure.Internal.0-1:RAID.SL.5-1'
+PHYSICAL_DISK_SECOND = 'Disk.Bay.0:Enclosure.Internal.0-1:RAID.SL.5-3'
+VIRTUAL_DISK_FIRST = 'Disk.Virtual.0:RAID.SL.5-1'
+VIRTUAL_DISK_SECOND = 'Disk.Virtual.1:RAID.SL.5-1'
+ALL_STORAGE_DATA_METHOD = "StorageData.all_storage_data"
+FETCH_STORAGE_DATA_METHOD = "StorageData.fetch_storage_data"
+FILTER_DISK = 'StorageCreate.filter_disk'
+VIEW_EXECUTE = 'StorageView.execute'
+DATA_XML = '<Data></Data>'
+REDFISH = "/redfish/v1"
+API_INVOKE_MOCKER = "iDRACRedfishAPI.invoke_request"
+BASE_IDRAC_API = "/redfish/v1/Chassis/System.Embedded.1"
+
+
+class TestStorageData(FakeAnsibleModule):
+ module = idrac_storage_volume
+ storage_controllers = {
+ ODATA_ID: "/redfish/v1/Systems/System.Embedded.1/Storage"
+ }
+ volumes_list = [
+ {
+ ODATA_ID: "/redfish/v1/Systems/System.Embedded.1/Storage/RAID.SL.5-1/Volumes/Disk.Virtual.0:RAID.SL.5-1"
+ },
+ {
+ ODATA_ID: "/redfish/v1/Systems/System.Embedded.1/Storage/RAID.SL.5-1/Volumes/Disk.Virtual.1:RAID.SL.5-1"
+ }]
+ controllers_list = {
+ "Members": [
+ {
+ "Controllers": {
+ ODATA_ID: "/redfish/v1/Systems/System.Embedded.1/Storage/RAID.SL.5-1/Controllers"
+ },
+ "Drives": [
+ {
+ ODATA_ID: "/redfish/v1/Systems/System.Embedded.1/Storage/RAID.SL.5-1/Drives/Disk.Bay.0:Enclosure.Internal.0-1:RAID.SL.5-1"
+ }
+ ],
+ "Id": CONTROLLER_ID_FOURTH,
+ "Links": {
+ "Enclosures": [
+ {
+ ODATA_ID: "/redfish/v1/Chassis/Enclosure.Internal.0-1:RAID.SL.5-1"
+ }
+ ]
+ },
+ "Volumes": {
+ ODATA_ID: "/redfish/v1/Systems/System.Embedded.1/Storage/RAID.SL.5-1/Volumes"
+ },
+ "Oem": {
+ "Dell": {
+ "DellControllerBattery": {
+ "Id": CONTROLLER_BATTERY
+ }}
+ }
+ },
+ {
+ "Drives": [
+ {
+ ODATA_ID: "/redfish/v1/Systems/System.Embedded.1/Storage/CPU.1/Drives/Disk.Bay.23:Enclosure.Internal.0-3"
+ }
+ ],
+ "Drives@odata.count": 1,
+ "Id": "CPU.1",
+ "Links": {
+ "Enclosures": [
+ {
+ ODATA_ID: "/redfish/v1/Chassis/Enclosure.Internal.0-3"
+ }
+ ],
+ },
+ "Volumes": {
+ ODATA_ID: "/redfish/v1/Systems/System.Embedded.1/Storage/CPU.1/Volumes"
+ }
+ },
+ {
+ "Controllers": {
+ ODATA_ID: "/redfish/v1/Systems/System.Embedded.1/Storage/AHCI.Embedded.1-1/Controllers"
+ },
+ "Drives": [],
+ "Id": CONTROLLER_ID_FIRST,
+ "Links": {
+ "Enclosures": [
+ {
+ ODATA_ID: BASE_IDRAC_API
+ }
+ ]
+ },
+ "Volumes": {
+ ODATA_ID: "/redfish/v1/Systems/System.Embedded.1/Storage/AHCI.Embedded.1-1/Volumes"
+ }
+ }
+ ]
+ }
+
+ storage_data = {
+ 'Controllers': {
+ CONTROLLER_ID_FIRST: {
+ 'Controllers': {
+ ODATA_ID: '/redfish/v1/Systems/System.Embedded.1/Storage/AHCI.Embedded.1-1/Controllers',
+ },
+ 'Drives': {},
+ 'Id': CONTROLLER_ID_FIRST,
+ 'Links': {
+ 'Enclosures': {
+ SYSTEM: BASE_IDRAC_API,
+ },
+ },
+ 'Volumes': {},
+ "Oem": {
+ "Dell": {
+ "CPUAffinity": []
+ }
+ }
+ },
+ CONTROLLER_ID_SECOND: {
+ 'Controllers': {
+ ODATA_ID: '/redfish/v1/Systems/System.Embedded.1/Storage/AHCI.Embedded.1-2/Controllers',
+ },
+ 'Drives': {
+ 'Disk.Bay.0:Enclosure.Internal.0-1:AHCI.Embedded.1-2': '/redfish/v1/\
+ Systems/System.Embedded.1/Storage/RAID.SL.5-1/Drives/Disk.Bay.0:Enclosure.Internal.0-1:RAID.SL.5-1',
+ },
+ 'Id': CONTROLLER_ID_SECOND,
+ 'Links': {
+ 'Enclosures': {
+ SYSTEM: BASE_IDRAC_API,
+ },
+ },
+ 'Volumes': {},
+ "Oem": {
+ "Dell": {
+ "CPUAffinity": []
+ }
+ }
+ },
+ CONTROLLER_ID_THIRD: {
+ 'Controllers': {
+ ODATA_ID: '/redfish/v1/Systems/System.Embedded.1/Storage/AHCI.Embedded.1-2/Controllers',
+ },
+ 'Drives': {
+ 'Disk.Bay.0:Enclosure.Internal.0-1:AHCI.Embedded.1-3': '/redfish/v1/\
+ Systems/System.Embedded.1/Storage/AHCI.Embedded.1-3/Drives/Disk.Bay.0:Enclosure.Internal.0-1:AHCI.Embedded.1-3',
+ },
+ 'Id': CONTROLLER_ID_THIRD,
+ 'Links': {
+ 'Enclosures': {
+ ENCLOSURE_ID: {
+ "Links": {
+ "Drives": []
+ }
+ },
+ },
+ },
+ 'Volumes': {},
+ "Oem": {
+ "Dell": {
+ "CPUAffinity": []
+ }
+ }
+ },
+ CONTROLLER_ID_FOURTH: {
+ 'Controllers': {
+ ODATA_ID: '/redfish/v1/Systems/System.Embedded.1/Storage/RAID.SL.5-1/Controllers',
+ },
+ 'Drives': {
+ PHYSICAL_DISK_FIRST: '/redfish/v1/Systems\
+ /System.Embedded.1/Storage/RAID.SL.5-1/Drives/Disk.Bay.0:Enclosure.Internal.0-1:RAID.SL.5-1',
+ },
+ 'Id': CONTROLLER_ID_FOURTH,
+ 'Links': {
+ 'Enclosures': {
+ ENCLOSURE_ID: {"Links": {
+ "Drives": [
+ {
+ ODATA_ID: PHYSICAL_DISK_FIRST
+ }
+ ]}}
+ },
+ },
+ 'Volumes': {
+ VIRTUAL_DISK_FIRST: {
+ "Links": {
+ "Drives": [
+ {
+ ODATA_ID: PHYSICAL_DISK_FIRST
+ }
+ ]
+ },
+ },
+ VIRTUAL_DISK_SECOND: {
+ "Links": {
+ "Drives": [
+ {
+ ODATA_ID: PHYSICAL_DISK_FIRST
+ }
+ ]
+ },
+ },
+ },
+ "Oem": {
+ "Dell": {
+ "DellControllerBattery": {
+ "Id": CONTROLLER_BATTERY
+ }}
+ }
+ }
+ }
+ }
+
+ storage_data_expected = {
+ 'Controller': {
+ CONTROLLER_ID_FIRST: {
+ 'ControllerSensor': {
+ CONTROLLER_ID_FIRST: {},
+ },
+ },
+ CONTROLLER_ID_SECOND: {
+ 'ControllerSensor': {
+ CONTROLLER_ID_SECOND: {},
+ },
+ 'PhysicalDisk': [
+ 'Disk.Bay.0:Enclosure.Internal.0-1:AHCI.Embedded.1-2',
+ ],
+ },
+ CONTROLLER_ID_THIRD: {
+ 'ControllerSensor': {
+ CONTROLLER_ID_THIRD: {}
+ },
+ 'Enclosure': {
+ ENCLOSURE_ID: {
+ 'EnclosureSensor': {
+ ENCLOSURE_ID: {},
+ },
+ },
+ },
+ },
+ CONTROLLER_ID_FOURTH: {
+ 'ControllerSensor': {
+ CONTROLLER_ID_FOURTH: {
+ 'ControllerBattery': [
+ 'Battery.Integrated.1:RAID.SL.5-1',
+ ],
+ },
+ },
+ 'Enclosure': {
+ ENCLOSURE_ID: {
+ 'EnclosureSensor': {
+ ENCLOSURE_ID: {},
+ },
+ 'PhysicalDisk': [
+ PHYSICAL_DISK_FIRST,
+ ],
+ },
+ },
+ 'VirtualDisk': {
+ VIRTUAL_DISK_FIRST: {
+ 'PhysicalDisk': [
+ PHYSICAL_DISK_FIRST,
+ ],
+ },
+ VIRTUAL_DISK_SECOND: {
+ 'PhysicalDisk': [
+ PHYSICAL_DISK_FIRST,
+ ],
+ },
+ },
+ },
+ }
+ }
+
+ storage_data_idrac8 = {
+ 'Controllers': {
+ CONTROLLER_ID_FIFTH: {
+ 'Controllers': {
+ ODATA_ID: '/redfish/v1/Systems/System.Embedded.1/Storage/RAID.SL.5-3/Controllers',
+ },
+ 'Drives': {
+ PHYSICAL_DISK_SECOND: '/redfish/v1/Systems\
+ /System.Embedded.1/Storage/RAID.SL.5-3/Drives/Disk.Bay.0:Enclosure.Internal.0-1:RAID.SL.5-3',
+ },
+ 'Id': CONTROLLER_ID_FIFTH,
+ 'Links': {
+ 'Enclosures': {
+ ENCLOSURE_ID: {"Links": {
+ "Drives": [
+ {
+ ODATA_ID: PHYSICAL_DISK_SECOND
+ }
+ ]}}
+ },
+ },
+ 'Volumes': {
+ 'Disk.Virtual.0:RAID.SL.5-3': {
+ "Links": {
+ "Drives": [
+ {
+ ODATA_ID: PHYSICAL_DISK_SECOND
+ }
+ ]
+ },
+ },
+ 'Disk.Virtual.1:RAID.SL.5-3': {
+ "Links": {
+ "Drives": [
+ {
+ ODATA_ID: PHYSICAL_DISK_SECOND
+ }
+ ]
+ },
+ },
+ },
+ "Oem": {
+ "Dell": {
+ "DellControllerBattery": {
+ "Id": "Battery.Integrated.1:RAID.SL.5-3"
+ }}
+ }
+ }
+ }
+ }
+
+ storage_data_expected_idrac8 = {
+ 'Controller': {
+ CONTROLLER_ID_FIFTH: {
+ 'ControllerSensor': {
+ CONTROLLER_ID_FIFTH: {},
+ },
+ 'Enclosure': {
+ ENCLOSURE_ID: {
+ 'EnclosureSensor': {
+ ENCLOSURE_ID: {},
+ },
+ 'PhysicalDisk': [
+ PHYSICAL_DISK_SECOND,
+ ],
+ },
+ },
+ 'VirtualDisk': {
+ 'Disk.Virtual.0:RAID.SL.5-3': {
+ 'PhysicalDisk': [
+ PHYSICAL_DISK_SECOND,
+ ],
+ },
+ 'Disk.Virtual.1:RAID.SL.5-3': {
+ 'PhysicalDisk': [
+ PHYSICAL_DISK_SECOND,
+ ],
+ },
+ },
+ },
+ }
+ }
+
+ @pytest.fixture
+ def idrac_storage_volume_mock(self):
+ idrac_obj = MagicMock()
+ return idrac_obj
+
+ @pytest.fixture
+ def idrac_connection_storage_volume_mock(self, mocker, idrac_storage_volume_mock):
+ idrac_conn_mock = mocker.patch(MODULE_PATH + 'iDRACRedfishAPI',
+ return_value=idrac_storage_volume_mock)
+ idrac_conn_mock.return_value.__enter__.return_value = idrac_storage_volume_mock
+ return idrac_conn_mock
+
+ def test_fetch_controllers_uri(self, idrac_default_args, idrac_connection_storage_volume_mock, mocker):
+ def mock_get_dynamic_uri_request(*args, **kwargs):
+ return self.storage_controllers
+
+ mocker.patch(MODULE_PATH + "validate_and_get_first_resource_id_uri",
+ return_value=(SYSTEM, ''))
+ mocker.patch(MODULE_PATH + "get_dynamic_uri",
+ side_effect=mock_get_dynamic_uri_request)
+ f_module = self.get_module_mock(
+ params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.StorageData(
+ idrac_connection_storage_volume_mock, f_module)
+ data = idr_obj.fetch_controllers_uri()
+ assert data == self.storage_controllers
+
+ # Scenario 2: for error message
+ mocker.patch(MODULE_PATH + "validate_and_get_first_resource_id_uri",
+ return_value=(REDFISH, "Error"))
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
+ idr_obj = self.module.StorageData(
+ idrac_connection_storage_volume_mock, f_module)
+ with pytest.raises(Exception) as exc:
+ idr_obj.fetch_controllers_uri()
+ assert exc.value.args[0] == "Error"
+
+ def test_fetch_api_data(self, idrac_default_args, idrac_connection_storage_volume_mock, mocker):
+ key = "Storage"
+ obj = MagicMock()
+ mocker.patch(MODULE_PATH + API_INVOKE_MOCKER, return_value=obj)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
+ idr_obj = self.module.StorageData(idrac_connection_storage_volume_mock, f_module)
+ key_out, uri_data_out = idr_obj.fetch_api_data(self.storage_controllers[ODATA_ID], -1)
+ assert key == key_out
+ assert obj == uri_data_out
+
+ def test_all_storage_data(self, idrac_default_args, idrac_connection_storage_volume_mock, mocker):
+ def mock_get_dynamic_uri_request(*args, **kwargs):
+ if len(args) == 3 and args[2] == "Members":
+ return self.volumes_list
+ else:
+ return self.controllers_list
+ mocker.patch(MODULE_PATH + "StorageData.fetch_controllers_uri",
+ return_value=self.storage_controllers)
+ mocker.patch(MODULE_PATH + "get_dynamic_uri",
+ side_effect=mock_get_dynamic_uri_request)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
+ idr_obj = self.module.StorageData(idrac_connection_storage_volume_mock, f_module)
+ storage_info = idr_obj.all_storage_data()
+ assert set(storage_info.keys()) == {'Controllers'}
+ assert set(storage_info["Controllers"].keys()) == {CONTROLLER_ID_FIRST, CONTROLLER_ID_FOURTH}
+
+ def test_fetch_storage_data(self, idrac_default_args, idrac_connection_storage_volume_mock, mocker):
+ mocker.patch(MODULE_PATH + ALL_STORAGE_DATA_METHOD,
+ return_value=self.storage_data)
+ mocker.patch(MODULE_PATH + "get_idrac_firmware_version",
+ return_value="3.20.00")
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
+ idr_obj = self.module.StorageData(idrac_connection_storage_volume_mock, f_module)
+ storage_info = idr_obj.fetch_storage_data()
+ assert storage_info == self.storage_data_expected
+
+ # Scenario - for idrac 8
+ mocker.patch(MODULE_PATH + ALL_STORAGE_DATA_METHOD,
+ return_value=self.storage_data_idrac8)
+ mocker.patch(MODULE_PATH + "get_idrac_firmware_version",
+ return_value="2.00")
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
+ idr_obj = self.module.StorageData(idrac_connection_storage_volume_mock, f_module)
+ storage_info = idr_obj.fetch_storage_data()
+ assert storage_info == self.storage_data_expected_idrac8
+
+
+class TestStorageView(TestStorageData):
+ module = idrac_storage_volume
+
+ @pytest.fixture
+ def idrac_storage_volume_mock(self):
+ idrac_obj = MagicMock()
+ return idrac_obj
+
+ @pytest.fixture
+ def idrac_connection_storage_volume_mock(self, mocker, idrac_storage_volume_mock):
+ idrac_conn_mock = mocker.patch(MODULE_PATH + 'iDRACRedfishAPI',
+ return_value=idrac_storage_volume_mock)
+ idrac_conn_mock.return_value.__enter__.return_value = idrac_storage_volume_mock
+ return idrac_conn_mock
+
+ def test_execute(self, idrac_default_args, idrac_connection_storage_volume_mock, mocker):
+ mocker.patch(MODULE_PATH + FETCH_STORAGE_DATA_METHOD,
+ return_value=TestStorageData.storage_data_expected)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
+ idr_obj = self.module.StorageView(idrac_connection_storage_volume_mock, f_module)
+ out = idr_obj.execute()
+ assert out == {"Message": TestStorageData.storage_data_expected, "Status": SUCCESS_STATUS}
+
+ # Scenario - When controller_id is passed
+ data_when_controller_id_passed = deepcopy(TestStorageData.storage_data_expected)
+ mocker.patch(MODULE_PATH + FETCH_STORAGE_DATA_METHOD,
+ return_value=data_when_controller_id_passed)
+ idrac_default_args.update({"controller_id": CONTROLLER_ID_FIRST})
+ out = idr_obj.execute()
+ assert out == {"Message": data_when_controller_id_passed, "Status": SUCCESS_STATUS}
+
+ # Scenario - When invalid controller_id is passed
+ data_when_invlid_controller_id_passed = deepcopy(TestStorageData.storage_data_expected)
+ mocker.patch(MODULE_PATH + FETCH_STORAGE_DATA_METHOD,
+ return_value=data_when_invlid_controller_id_passed)
+ controller_id = "AHCI.Embedded.1-invalid"
+ idrac_default_args.update({"controller_id": controller_id})
+ with pytest.raises(Exception) as exc:
+ idr_obj.execute()
+ assert exc.value.args[0] == VIEW_OPERATION_FAILED
+
+ # Scenario - When volume_id and invalid controller_id is passed
+ data_when_invlid_volume_id_passed = deepcopy(TestStorageData.storage_data_expected)
+ mocker.patch(MODULE_PATH + FETCH_STORAGE_DATA_METHOD,
+ return_value=data_when_invlid_volume_id_passed)
+ idrac_default_args.update({"volume_id": VIRTUAL_DISK_FIRST})
+ with pytest.raises(Exception) as exc:
+ idr_obj.execute()
+ assert exc.value.args[0] == VIEW_OPERATION_FAILED
+ # VIEW_CONTROLLER_DETAILS_NOT_FOUND.format(controller_id=controller_id)
+
+ # Scenario - When volume_id and valid controller_id is passed
+ data_when_controller_id_and_volume_id_passed = deepcopy(TestStorageData.storage_data_expected)
+ mocker.patch(MODULE_PATH + FETCH_STORAGE_DATA_METHOD,
+ return_value=data_when_controller_id_and_volume_id_passed)
+ idrac_default_args.update({"controller_id": CONTROLLER_ID_FOURTH, "volume_id": VIRTUAL_DISK_FIRST})
+ out = idr_obj.execute()
+ assert out == {"Message": data_when_controller_id_and_volume_id_passed, "Status": SUCCESS_STATUS}
+
+ # Scenario - When invalid volume_id and valid controller_id is passed
+ data_when_controller_id_and_volume_id_passed = deepcopy(TestStorageData.storage_data_expected)
+ mocker.patch(MODULE_PATH + FETCH_STORAGE_DATA_METHOD,
+ return_value=data_when_controller_id_and_volume_id_passed)
+ idrac_default_args.update({"controller_id": CONTROLLER_ID_FIRST, "volume_id": VIRTUAL_DISK_FIRST})
+ with pytest.raises(Exception) as exc:
+ idr_obj.execute()
+ assert exc.value.args[0] == VIEW_OPERATION_FAILED
+
+ # Scenario - When volume_id is passed
+ data_when_volume_id_passed = deepcopy(TestStorageData.storage_data_expected)
+ mocker.patch(MODULE_PATH + FETCH_STORAGE_DATA_METHOD,
+ return_value=data_when_volume_id_passed)
+ del idrac_default_args["controller_id"]
+ idrac_default_args.update({"volume_id": VIRTUAL_DISK_FIRST})
+ with pytest.raises(Exception) as exc:
+ idr_obj.execute()
+ assert exc.value.args[0] == VIEW_OPERATION_FAILED
+
+
+class TestStorageBase(FakeAnsibleModule):
+ module = idrac_storage_volume
+
+ @pytest.fixture
+ def idrac_storage_volume_mock(self):
+ idrac_obj = MagicMock()
+ return idrac_obj
+
+ @pytest.fixture
+ def idrac_connection_storage_volume_mock(self, mocker, idrac_storage_volume_mock):
+ idrac_conn_mock = mocker.patch(MODULE_PATH + 'iDRACRedfishAPI',
+ return_value=idrac_storage_volume_mock)
+ idrac_conn_mock.return_value.__enter__.return_value = idrac_storage_volume_mock
+ return idrac_conn_mock
+
+ def test_module_extend_input(self, idrac_default_args, idrac_connection_storage_volume_mock, mocker):
+ mocker.patch(MODULE_PATH + 'StorageBase.data_conversion', return_value={})
+ idrac_default_args.update({'span_length': 1, 'span_depth': 1})
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.StorageBase(idrac_connection_storage_volume_mock, f_module)
+ data = idr_obj.module_extend_input(f_module)
+ # Scenario 1: when volumes is None
+ assert data['volumes'] == [{'drives': {'id': [-1]}}]
+
+ # Scenario 2: when volumes is given
+ idrac_default_args.update({'volumes': [{"drives": {'location': [3]}, 'span_length': '1'}]})
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ mocker.patch(MODULE_PATH + 'StorageBase.data_conversion', return_value={"drives": {'location': [3]}, 'span_length': '1'})
+
+ idr_obj = self.module.StorageBase(idrac_connection_storage_volume_mock, f_module)
+ data = idr_obj.module_extend_input(f_module)
+ assert data['volumes'] == [{"drives": {'location': [3]}, 'span_length': 1}]
+
+ def test_payload_for_disk(self, idrac_default_args, idrac_connection_storage_volume_mock, mocker):
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.StorageBase(idrac_connection_storage_volume_mock, f_module)
+ # Scenario 1: When drives is given
+ data = idr_obj.payload_for_disk({'drives': {'id': [1, 2]}})
+ assert data == '<Attribute Name="IncludedPhysicalDiskID">1</Attribute><Attribute Name="IncludedPhysicalDiskID">2</Attribute>'
+
+ # Scenario 2: When dedicate_hot_spare is in each_volume
+ data = idr_obj.payload_for_disk({'dedicated_hot_spare': [3, 5]})
+ assert data == '<Attribute Name="RAIDdedicatedSpare">3</Attribute><Attribute Name="RAIDdedicatedSpare">5</Attribute>'
+
+ def test_construct_volume_payloadk(self, idrac_default_args, idrac_connection_storage_volume_mock, mocker):
+ mocker.patch(MODULE_PATH + 'xml_data_conversion', return_value=DATA_XML)
+ mocker.patch(MODULE_PATH + 'StorageBase.payload_for_disk', return_value='payload_detail_in_xml')
+ # Scenario 1: When state is create
+ idrac_default_args.update({'state': 'create'})
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.StorageBase(idrac_connection_storage_volume_mock, f_module)
+ data = idr_obj.construct_volume_payload(1, {})
+ assert data == DATA_XML
+
+ def test_constuct_payload(self, idrac_default_args, idrac_connection_storage_volume_mock, mocker):
+ mocker.patch(MODULE_PATH + 'xml_data_conversion', return_value=DATA_XML)
+ mocker.patch(MODULE_PATH + 'StorageBase.construct_volume_payload', return_value='<Volume></Volume>')
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.StorageBase(idrac_connection_storage_volume_mock, f_module)
+ # Scenario 1: Default
+ data = idr_obj.constuct_payload({})
+ assert data == DATA_XML
+
+ # Scenario 2: When raid_reset_config is 'true'
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.StorageBase(idrac_connection_storage_volume_mock, f_module)
+ idr_obj.module_ext_params.update({'raid_reset_config': 'true'})
+ data = idr_obj.constuct_payload({})
+ assert data == DATA_XML
+
+ def test_wait_for_job_completion(self, idrac_default_args, idrac_connection_storage_volume_mock, mocker):
+ obj = MagicMock()
+ obj.headers = {'Location': "/joburl/JID12345"}
+ job = {"job_wait": True, "job_wait_timeout": 1200}
+ idrac_default_args.update(job)
+ job_resp_completed = {'JobStatus': 'Completed'}
+ idrac_redfish_resp = (False, 'Job Success', job_resp_completed, 1200)
+ mocker.patch(MODULE_PATH + 'idrac_redfish_job_tracking', return_value=idrac_redfish_resp)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.StorageBase(idrac_connection_storage_volume_mock, f_module)
+ # Scenario 1: Job_wait is True, job_wait_timeout match with default
+ with pytest.raises(Exception) as exc:
+ idr_obj.wait_for_job_completion(obj)
+ assert exc.value.args[0] == WAIT_TIMEOUT_MSG.format(1200)
+
+ # Scenario 2: Job_wait is True, job_wait_timeout less than default
+ idrac_redfish_resp = (False, 'Job Success', job_resp_completed, 1000)
+ mocker.patch(MODULE_PATH + 'idrac_redfish_job_tracking', return_value=idrac_redfish_resp)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.StorageBase(idrac_connection_storage_volume_mock, f_module)
+ data = idr_obj.wait_for_job_completion(obj)
+ assert data == job_resp_completed
+
+ # Scenario 3: Job failed in resp
+ job_resp_failed = {'JobStatus': 'Failed', 'Message': 'Job failed.'}
+ idrac_redfish_resp = (True, 'Job Failed', job_resp_failed, 1000)
+ mocker.patch(MODULE_PATH + 'idrac_redfish_job_tracking', return_value=idrac_redfish_resp)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.StorageBase(idrac_connection_storage_volume_mock, f_module)
+ with pytest.raises(Exception) as exc:
+ idr_obj.wait_for_job_completion(obj)
+ assert exc.value.args[0] == 'Job failed.'
+
+ # Scenario 4: Job wait is false
+ obj.json_data = {'JobStatus': 'Running'}
+ mocker.patch(MODULE_PATH + API_INVOKE_MOCKER, return_value=obj)
+ job = {"job_wait": False, "job_wait_timeout": 1200}
+ idrac_default_args.update(job)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ f_module.params.update({'state': 'create'})
+ idr_obj = self.module.StorageBase(idrac_connection_storage_volume_mock, f_module)
+ with pytest.raises(Exception) as exc:
+ idr_obj.wait_for_job_completion(obj)
+ assert exc.value.args[0] == JOB_TRIGERRED.format('create')
+
+
+class TestStorageValidation(TestStorageBase):
+ module = idrac_storage_volume
+
+ @pytest.fixture
+ def idrac_storage_volume_mock(self):
+ idrac_obj = MagicMock()
+ return idrac_obj
+
+ @pytest.fixture
+ def idrac_connection_storage_volume_mock(self, mocker, idrac_storage_volume_mock):
+ idrac_conn_mock = mocker.patch(MODULE_PATH + 'iDRACRedfishAPI',
+ return_value=idrac_storage_volume_mock)
+ idrac_conn_mock.return_value.__enter__.return_value = idrac_storage_volume_mock
+ return idrac_conn_mock
+
+ def test_validate_controller_exists(self, idrac_default_args, idrac_connection_storage_volume_mock, mocker):
+ # Scenario - when controller_id is not passed
+ mocker.patch(MODULE_PATH + ALL_STORAGE_DATA_METHOD,
+ return_value=TestStorageData.storage_data)
+ f_module = self.get_module_mock(
+ params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.StorageValidation(idrac_connection_storage_volume_mock, f_module)
+ with pytest.raises(Exception) as exc:
+ idr_obj.validate_controller_exists()
+ assert exc.value.args[0] == CONTROLLER_NOT_DEFINED
+
+ # Scenario - when invalid controller_id is passed
+ controller_id = "AHCI.Embedded.1-invalid"
+ idrac_default_args.update({"controller_id": controller_id})
+ f_module = self.get_module_mock(
+ params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.StorageValidation(idrac_connection_storage_volume_mock, f_module)
+ with pytest.raises(Exception) as exc:
+ idr_obj.validate_controller_exists()
+ assert exc.value.args[0] == CONTROLLER_NOT_EXIST_ERROR.format(controller_id=controller_id)
+
+ # Scenario - when controller_id is passed
+ controller_id = CONTROLLER_ID_FIRST
+ idrac_default_args.update({"controller_id": controller_id})
+ f_module = self.get_module_mock(
+ params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.StorageValidation(idrac_connection_storage_volume_mock, f_module)
+ idr_obj.validate_controller_exists()
+
+ def test_validate_job_wait_negative_values(self, idrac_default_args, idrac_connection_storage_volume_mock, mocker):
+ # Scenario - when job_wait_timeout is negative
+ mocker.patch(MODULE_PATH + ALL_STORAGE_DATA_METHOD,
+ return_value=TestStorageData.storage_data)
+ idrac_default_args.update({"job_wait": True, "job_wait_timeout": -120})
+ f_module = self.get_module_mock(
+ params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.StorageValidation(idrac_connection_storage_volume_mock, f_module)
+ with pytest.raises(Exception) as exc:
+ idr_obj.validate_job_wait_negative_values()
+ assert exc.value.args[0] == NEGATIVE_OR_ZERO_MSG.format(parameter="job_wait_timeout")
+
+ # Scenario - when job_wait_timeout is positive
+ idrac_default_args.update({"job_wait": True, "job_wait_timeout": 120})
+ f_module = self.get_module_mock(
+ params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.StorageValidation(idrac_connection_storage_volume_mock, f_module)
+ idr_obj.validate_job_wait_negative_values()
+
+ @pytest.mark.parametrize("params", [
+ {"span_depth": -1, "span_length": 2, "capacity": 200, "strip_size": 131072},
+ {"span_depth": 1, "span_length": -1, "capacity": 200, "strip_size": 131072},
+ {"span_depth": 1, "span_length": 2, "capacity": -1, "strip_size": 131072},
+ {"span_depth": 1, "span_length": 2, "capacity": 200, "strip_size": -131072},
+ ])
+ def test_validate_negative_values_for_volume_params(self, idrac_default_args, idrac_connection_storage_volume_mock, mocker, params):
+ # Scenario - when job_wait_timeout is negative
+ mocker.patch(MODULE_PATH + ALL_STORAGE_DATA_METHOD,
+ return_value=TestStorageData.storage_data)
+ # idrac_default_args.update(params)
+ f_module = self.get_module_mock(
+ params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.StorageValidation(idrac_connection_storage_volume_mock, f_module)
+ with pytest.raises(Exception) as exc:
+ idr_obj.validate_negative_values_for_volume_params(params)
+ # TO DO replace job_wait_timeout with key in params which has negative value
+ negative_key = next((k for k, v in params.items() if v < 0), None)
+ assert exc.value.args[0] == NEGATIVE_OR_ZERO_MSG.format(parameter=negative_key)
+
+ def test_validate_negative_values_for_volume_params_with_different_parameter(self, idrac_default_args, idrac_connection_storage_volume_mock, mocker):
+ # Scenario - passing different parameter
+ mocker.patch(MODULE_PATH + ALL_STORAGE_DATA_METHOD,
+ return_value=TestStorageData.storage_data)
+ f_module = self.get_module_mock(
+ params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.StorageValidation(idrac_connection_storage_volume_mock, f_module)
+ idr_obj.validate_negative_values_for_volume_params({"volume_type": "RAID 0", "number_dedicated_hot_spare": 0})
+
+ # Scenario - when number_dedicated_hot_spare is negative
+ with pytest.raises(Exception) as exc:
+ idr_obj.validate_negative_values_for_volume_params({"number_dedicated_hot_spare": -1})
+ assert exc.value.args[0] == NEGATIVE_MSG.format(parameter="number_dedicated_hot_spare")
+
+ # Scenario - when number_dedicated_hot_spare is not negative
+ idr_obj.validate_negative_values_for_volume_params({"number_dedicated_hot_spare": 0})
+
+ def test_validate_volume_drives(self, idrac_default_args, idrac_connection_storage_volume_mock, mocker):
+ # Scenario - when volume drives are not defined
+ volumes = {
+ "name": "volume_1"
+ }
+ mocker.patch(MODULE_PATH + ALL_STORAGE_DATA_METHOD,
+ return_value=TestStorageData.storage_data)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.StorageValidation(idrac_connection_storage_volume_mock, f_module)
+ with pytest.raises(Exception) as exc:
+ idr_obj.validate_volume_drives(volumes)
+ assert exc.value.args[0] == DRIVES_NOT_DEFINED
+
+ # Scenario - when in volume drives id and location both defined
+ volumes = {
+ "name": "volume_1",
+ "drives": {
+ "id": [
+ PHYSICAL_DISK_FIRST,
+ PHYSICAL_DISK_SECOND
+ ],
+ "location": [7, 3]
+ }
+ }
+ with pytest.raises(Exception) as exc:
+ idr_obj.validate_volume_drives(volumes)
+ assert exc.value.args[0] == ID_AND_LOCATION_BOTH_DEFINED
+
+ # Scenario - when in volume drives id and location both not defined
+ volumes = {
+ "name": "volume_1",
+ "drives": {
+ PHYSICAL_DISK_FIRST: {}
+ }
+ }
+ with pytest.raises(Exception) as exc:
+ idr_obj.validate_volume_drives(volumes)
+ assert exc.value.args[0] == ID_AND_LOCATION_BOTH_NOT_DEFINED
+
+ # Scenario - when in volume drives id is defined
+ volumes = {
+ "name": "volume_1",
+ "drives": {
+ "id": [
+ PHYSICAL_DISK_FIRST,
+ PHYSICAL_DISK_SECOND
+ ]
+ }
+ }
+ mocker.patch(MODULE_PATH + "StorageValidation.raid_std_validation",
+ return_value=True)
+ out = idr_obj.validate_volume_drives(volumes)
+ assert out is True
+
+ def test_raid_std_validation(self, idrac_default_args, idrac_connection_storage_volume_mock, mocker):
+ mocker.patch(MODULE_PATH + ALL_STORAGE_DATA_METHOD,
+ return_value=TestStorageData.storage_data)
+ f_module = self.get_module_mock(
+ params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.StorageValidation(idrac_connection_storage_volume_mock, f_module)
+ # Scenario - Invalid span_length
+ params = {"span_depth": 1, "span_length": 4, "pd_count": 2, "volume_type": "RAID 1"}
+ with pytest.raises(Exception) as exc:
+ idr_obj.raid_std_validation(params["span_length"],
+ params["span_depth"],
+ params["volume_type"],
+ params["pd_count"])
+ assert exc.value.args[0] == INVALID_VALUE_MSG.format(parameter="span_length")
+
+ # Scenario - Invalid span_depth for RAID 1
+ params = {"span_depth": 4, "span_length": 2, "pd_count": 3, "volume_type": "RAID 1"}
+ with pytest.raises(Exception) as exc:
+ idr_obj.raid_std_validation(params["span_length"],
+ params["span_depth"],
+ params["volume_type"],
+ params["pd_count"])
+ assert exc.value.args[0] == INVALID_VALUE_MSG.format(parameter="span_depth")
+
+ # Scenario - Invalid span_depth for RAID 10
+ params = {"span_depth": 1, "span_length": 2, "pd_count": 9, "volume_type": "RAID 10"}
+ with pytest.raises(Exception) as exc:
+ idr_obj.raid_std_validation(params["span_length"],
+ params["span_depth"],
+ params["volume_type"],
+ params["pd_count"])
+ assert exc.value.args[0] == INVALID_VALUE_MSG.format(parameter="span_depth")
+
+ # Scenario - Invalid drive count
+ params = {"span_depth": 3, "span_length": 2, "pd_count": 1, "volume_type": "RAID 10"}
+ with pytest.raises(Exception) as exc:
+ idr_obj.raid_std_validation(params["span_length"],
+ params["span_depth"],
+ params["volume_type"],
+ params["pd_count"])
+ assert exc.value.args[0] == INVALID_VALUE_MSG.format(parameter="drives")
+
+ # Scenario - Valid
+ params = {"span_depth": 2, "span_length": 2, "pd_count": 4, "volume_type": "RAID 10"}
+ out = idr_obj.raid_std_validation(params["span_length"],
+ params["span_depth"],
+ params["volume_type"],
+ params["pd_count"])
+ assert out is True
+
+
+class TestStorageCreate(TestStorageBase):
+ module = idrac_storage_volume
+
+ @pytest.fixture
+ def idrac_storage_volume_mock(self):
+ idrac_obj = MagicMock()
+ return idrac_obj
+
+ @pytest.fixture
+ def idrac_connection_storage_volume_mock(self, mocker, idrac_storage_volume_mock):
+ idrac_conn_mock = mocker.patch(MODULE_PATH + 'iDRACRedfishAPI',
+ return_value=idrac_storage_volume_mock)
+ idrac_conn_mock.return_value.__enter__.return_value = idrac_storage_volume_mock
+ return idrac_conn_mock
+
+ def test_disk_slot_id_conversion(self, idrac_default_args, idrac_connection_storage_volume_mock, mocker):
+ mocker.patch(MODULE_PATH + ALL_STORAGE_DATA_METHOD, return_value=TestStorageData.storage_data)
+ # Scenario 1: location is given in drives
+ volume = {'drives': {'location': [0, 1]}}
+ idrac_default_args.update({"controller_id": CONTROLLER_ID_SECOND})
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.StorageCreate(idrac_connection_storage_volume_mock, f_module)
+ data = idr_obj.disk_slot_location_to_id_conversion(volume)
+ assert data['id'] == TestStorageData.storage_data_expected['Controller'][CONTROLLER_ID_SECOND]['PhysicalDisk']
+
+ # Scenario 2: id is given in drives
+ id_list = ['Disk.Bay.3:Enclosure.Internal.0-1:AHCI.Embedded.1-2',
+ 'Disk.Bay.2:Enclosure.Internal.0-1:AHCI.Embedded.1-2']
+ volume = {'drives': {'id': id_list}}
+ idrac_default_args.update({"controller_id": CONTROLLER_ID_SECOND})
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.StorageCreate(idrac_connection_storage_volume_mock, f_module)
+ data = idr_obj.disk_slot_location_to_id_conversion(volume)
+ assert data['id'] == id_list
+
+ # Scenario 3: When id and location is not given in drives
+ volume = {'drives': {}}
+ data = idr_obj.disk_slot_location_to_id_conversion(volume)
+ assert data == {}
+
+ def test_perform_intersection_on_disk(self, idrac_default_args, idrac_connection_storage_volume_mock, mocker):
+ # Scenario 1: When iDRAC has firmware version greater than 3.00.00.00
+ mocker.patch(MODULE_PATH + ALL_STORAGE_DATA_METHOD, return_value=TestStorageData.storage_data)
+ mocker.patch(MODULE_PATH + "get_idrac_firmware_version", return_value="3.10.00")
+ volume = {'media_type': 'HDD', 'protocol': 'SATA'}
+ healthy_disk, available_disk, media_disk, protocol_disk = {1, 2, 3, 4, 5}, {1, 2, 3, 5}, {2, 3, 4, 5}, {1, 5}
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.StorageCreate(idrac_connection_storage_volume_mock, f_module)
+ data = idr_obj.perform_intersection_on_disk(volume, healthy_disk, available_disk, media_disk, protocol_disk)
+ assert data == [5]
+
+ # Scenario 1: When iDRAC has firmware version less than 3.00.00.00
+ mocker.patch(MODULE_PATH + "get_idrac_firmware_version", return_value="2.00.00")
+ volume = {'media_type': None, 'protocol': None}
+ data = idr_obj.perform_intersection_on_disk(volume, healthy_disk, available_disk, media_disk, protocol_disk)
+ assert data == [1, 2, 3, 4, 5]
+
+ def test_filter_disk(self, idrac_default_args, idrac_connection_storage_volume_mock, mocker):
+ drive_resp = {'DriveID1': {'MediaType': 'HDD', 'Protocol': 'SAS', 'Status': {'Health': 'OK'},
+ 'Oem': {'Dell': {'DellPhysicalDisk': {'RaidStatus': 'Ready'}}}},
+ 'DriveID2': {'MediaType': 'SSD', 'Protocol': 'SATA', 'Status': {'Health': 'Not OK'}}}
+ idrac_data = {'Controllers': {CONTROLLER_ID_FIRST: {'Drives': drive_resp}}}
+ # Scenario 1: When iDRAC has firmware version equal to 3.00.00.00
+ mocker.patch(MODULE_PATH + ALL_STORAGE_DATA_METHOD, return_value=idrac_data)
+ mocker.patch(MODULE_PATH + "get_idrac_firmware_version", return_value="3.05.00")
+ volume = {'media_type': 'HDD', 'protocol': 'SAS'}
+ idrac_default_args.update({"controller_id": CONTROLLER_ID_FIRST})
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.StorageCreate(idrac_connection_storage_volume_mock, f_module)
+ data = idr_obj.filter_disk(volume)
+ assert data == ['DriveID1']
+
+ def test_updating_drives_module_input_when_given(self, idrac_default_args, idrac_connection_storage_volume_mock, mocker):
+ mocker.patch(MODULE_PATH + ALL_STORAGE_DATA_METHOD, return_value=TestStorageData.storage_data)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.StorageCreate(idrac_connection_storage_volume_mock, f_module)
+ # Scenario 1: When id is in drives
+ volume = {'drives': {'id': [2, 3, 4, 5]}}
+ filter_disk_output = [1, 3, 5]
+ data = idr_obj.updating_drives_module_input_when_given(volume, filter_disk_output)
+ assert data == [3, 5]
+
+ # Scenario 2: When id is not in drives
+ volume = {'drives': {'location': [2, 3, 4, 5]}}
+ data = idr_obj.updating_drives_module_input_when_given(volume, filter_disk_output)
+ assert data == []
+
+ def test_updating_volume_module_input_for_hotspare(self, idrac_default_args, idrac_connection_storage_volume_mock, mocker):
+ mocker.patch(MODULE_PATH + ALL_STORAGE_DATA_METHOD, return_value=TestStorageData.storage_data)
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.StorageCreate(idrac_connection_storage_volume_mock, f_module)
+ # Scenario 1: number_dedicated_hot_spare is in volume and greator than zero
+ volume = {'number_dedicated_hot_spare': 2}
+ filter_disk_output = [1, 3, 5, 4, 2]
+ reserved_pd = [1]
+ drive_exists_in_id = [3, 5]
+ data = idr_obj.updating_volume_module_input_for_hotspare(volume, filter_disk_output, reserved_pd, drive_exists_in_id)
+ assert data == [4, 2]
+
+ # Scenario 2: number_dedicated_hot_spare is in volume and equal to zero
+ volume = {'number_dedicated_hot_spare': 0}
+ data = idr_obj.updating_volume_module_input_for_hotspare(volume, filter_disk_output, reserved_pd, drive_exists_in_id)
+ assert data == []
+
+ def test_updating_volume_module_input(self, idrac_default_args, idrac_connection_storage_volume_mock, mocker):
+ mocker.patch(MODULE_PATH + ALL_STORAGE_DATA_METHOD, return_value=TestStorageData.storage_data)
+ mocker.patch(MODULE_PATH + FILTER_DISK, return_value=[1, 2, 3, 4, 5])
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.StorageCreate(idrac_connection_storage_volume_mock, f_module)
+ # Scenario 1: When required pd is less than available pd
+ volume = {'volumes': [{'span_depth': 1, 'span_length': 1, 'stripe_size': 65536, 'capacity': 50.45,
+ 'drives': {'id': [2, 3, 4]},
+ 'number_dedicated_hot_spare': 1}]}
+ idr_obj.module_ext_params.update(volume)
+ drive_exists_in_id = [1, 2]
+ idr_obj.updating_volume_module_input(drive_exists_in_id)
+ assert idr_obj.module_ext_params['volumes'][0]['drives']['id'] == [1]
+
+ # Scenario 2: When required pd is less than available pd with check_mode
+ volume = {'volumes': [{'span_depth': 1, 'span_length': 1, 'stripe_size': 65536, 'capacity': 50.45,
+ 'drives': {'id': [2, 3, 4]},
+ 'number_dedicated_hot_spare': 1}]}
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
+ idr_obj = self.module.StorageCreate(idrac_connection_storage_volume_mock, f_module)
+ idr_obj.module_ext_params.update(volume)
+ drive_exists_in_id = [1, 2]
+ with pytest.raises(Exception) as exc:
+ idr_obj.updating_volume_module_input(drive_exists_in_id)
+ assert exc.value.args[0] == CHANGES_FOUND
+
+ # Scenario 3: When required pd is greater than available pd
+ mocker.patch(MODULE_PATH + FILTER_DISK, return_value=[1])
+ controller_id = 'Qwerty'
+ volume = {'volumes': [{'span_depth': 2, 'span_length': 1,
+ 'drives': {'id': [1]}, 'number_dedicated_hot_spare': 0}],
+ 'controller_id': controller_id}
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.StorageCreate(idrac_connection_storage_volume_mock, f_module)
+ idr_obj.module_ext_params.update(volume)
+ drive_exists_in_id = [1, 2]
+ with pytest.raises(Exception) as exc:
+ idr_obj.updating_volume_module_input(drive_exists_in_id)
+ assert exc.value.args[0] == NOT_ENOUGH_DRIVES.format(controller_id=controller_id)
+
+ # Scenario 4: When required pd is greater than available pd with check_mode
+ mocker.patch(MODULE_PATH + FILTER_DISK, return_value=[1])
+ controller_id = 'Qwerty'
+ volume = {'volumes': [{'span_depth': 2, 'span_length': 1,
+ 'drives': {'id': [1, 2]}, 'number_dedicated_hot_spare': 0}],
+ 'controller_id': controller_id}
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
+ idr_obj = self.module.StorageCreate(idrac_connection_storage_volume_mock, f_module)
+ idr_obj.module_ext_params.update(volume)
+ drive_exists_in_id = [1]
+ with pytest.raises(Exception) as exc:
+ idr_obj.updating_volume_module_input(drive_exists_in_id)
+ assert exc.value.args[0] == CHANGES_NOT_FOUND
+
+ def test_validate_create(self, idrac_default_args, idrac_connection_storage_volume_mock, mocker):
+ mocker.patch(MODULE_PATH + ALL_STORAGE_DATA_METHOD, return_value=TestStorageData.storage_data)
+ mocker.patch(MODULE_PATH + 'StorageValidation.validate_controller_exists', return_value=None)
+ mocker.patch(MODULE_PATH + 'StorageValidation.validate_job_wait_negative_values', return_value=None)
+ mocker.patch(MODULE_PATH + 'StorageValidation.validate_negative_values_for_volume_params', return_value=None)
+ mocker.patch(MODULE_PATH + 'StorageValidation.validate_volume_drives', return_value=None)
+ mocker.patch(MODULE_PATH + 'StorageCreate.updating_volume_module_input', return_value=None)
+ mocker.patch(MODULE_PATH + 'StorageCreate.disk_slot_location_to_id_conversion', return_value={'id': []})
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.StorageCreate(idrac_connection_storage_volume_mock, f_module)
+ # Scenario 1: When required pd is less than available pd
+ volume = {'volumes': [{'drives': {'location': [2, 3, 4]}},
+ {'drives': {'id': [1]}}]}
+ idr_obj.module_ext_params.update(volume)
+ idr_obj.validate()
+ assert idr_obj.module_ext_params['volumes'][0]['drives']['id'] == []
+
+ def test_execute_create(self, idrac_default_args, idrac_connection_storage_volume_mock, mocker):
+ mocker.patch(MODULE_PATH + ALL_STORAGE_DATA_METHOD, return_value=TestStorageData.storage_data)
+ mocker.patch(MODULE_PATH + 'StorageCreate.validate', return_value=None)
+ mocker.patch(MODULE_PATH + 'StorageBase.constuct_payload', return_value=None)
+ mocker.patch(MODULE_PATH + 'iDRACRedfishAPI.import_scp', return_value=None)
+ mocker.patch(MODULE_PATH + 'StorageBase.wait_for_job_completion', return_value={})
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.StorageCreate(idrac_connection_storage_volume_mock, f_module)
+ idr_obj.controller_id = CONTROLLER_ID_FOURTH
+ data = idr_obj.execute()
+ assert data == {}
+
+
+class TestStorageDelete(TestStorageBase):
+ module = idrac_storage_volume
+
+ @pytest.fixture
+ def idrac_storage_volume_mock(self):
+ idrac_obj = MagicMock()
+ return idrac_obj
+
+ @pytest.fixture
+ def idrac_connection_storage_volume_mock(self, mocker, idrac_storage_volume_mock):
+ idrac_conn_mock = mocker.patch(MODULE_PATH + 'iDRACRedfishAPI',
+ return_value=idrac_storage_volume_mock)
+ idrac_conn_mock.return_value.__enter__.return_value = idrac_storage_volume_mock
+ return idrac_conn_mock
+
+ def test_execute_delete(self, idrac_default_args, idrac_connection_storage_volume_mock, mocker):
+ idrac_resp = {'Controllers': {'Cntrl1': {'Volumes': {'Volume_ID1': {'Name': 'Volume Name 1'}}}}}
+ mocker.patch(MODULE_PATH + ALL_STORAGE_DATA_METHOD, return_value=idrac_resp)
+ mocker.patch(MODULE_PATH + 'StorageDelete.validate', return_value=None)
+ mocker.patch(MODULE_PATH + 'iDRACRedfishAPI.import_scp', return_value=None)
+ mocker.patch(MODULE_PATH + 'StorageBase.wait_for_job_completion', return_value={})
+ mocker.patch(MODULE_PATH + 'StorageBase.module_extend_input', return_value={})
+
+ # Scenario 1: When Non existing volume is passed as input
+ volume = {'volumes': [{'name': 'volume-1', 'span_depth': 1, 'span_length': 1},
+ {'name': 'volume-2', 'span_depth': 1, 'span_length': 1}]}
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.StorageDelete(idrac_connection_storage_volume_mock, f_module)
+ idr_obj.module.params.update(volume)
+ with pytest.raises(Exception) as exc:
+ idr_obj.execute()
+ assert exc.value.args[0] == VOLUME_NOT_FOUND
+
+ # Scenario 2: When Non existing volume is passed as input with check_mode
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
+ idr_obj = self.module.StorageDelete(idrac_connection_storage_volume_mock, f_module)
+ idr_obj.module.params.update(volume)
+ with pytest.raises(Exception) as exc:
+ idr_obj.execute()
+ assert exc.value.args[0] == VOLUME_NOT_FOUND
+
+ # Scenario 3: When Existing volume is passed as input
+ volume = {'volumes': [{'name': 'Volume Name 1', 'span_depth': 1, 'span_length': 1}]}
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ idr_obj = self.module.StorageDelete(idrac_connection_storage_volume_mock, f_module)
+ idr_obj.module.params.update(volume)
+ idr_obj.module_ext_params.update({'state': 'delete', 'volumes': volume})
+ data = idr_obj.execute()
+ assert data == {}
+
+ # Scenario 3: When Existing volume is passed as input with check_mode
+ f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
+ idr_obj = self.module.StorageDelete(idrac_connection_storage_volume_mock, f_module)
+ idr_obj.module.params.update(volume)
+ idr_obj.module_ext_params.update({'state': 'delete', 'volumes': volume})
+ with pytest.raises(Exception) as exc:
+ idr_obj.execute()
+ assert exc.value.args[0] == CHANGES_FOUND
+
+ def test_idrac_storage_volume_main_positive_case(self, idrac_default_args,
+ idrac_connection_storage_volume_mock, mocker):
+ def returning_none():
+ return None
+ mocker.patch(MODULE_PATH + VIEW_EXECUTE, return_value=returning_none)
+ view = 'view'
+ idrac_default_args.update({'state': view})
+ data = self._run_module(idrac_default_args)
+ assert data['msg'] == SUCCESSFUL_OPERATION_MSG.format(operation=view)
+
+ @pytest.mark.parametrize("exc_type",
+ [URLError, HTTPError, SSLValidationError, ConnectionError, TypeError, ValueError])
+ def test_idrac_storage_volume_main_exception_handling_case(self, exc_type, idrac_default_args,
+ idrac_connection_storage_volume_mock, mocker):
+
+ json_str = to_text(json.dumps({"data": "out"}))
+ if exc_type in [HTTPError, SSLValidationError]:
+ mocker.patch(MODULE_PATH + VIEW_EXECUTE,
+ side_effect=exc_type('https://testhost.com', 400,
+ 'http error message',
+ {"accept-type": "application/json"},
+ StringIO(json_str)))
+ else:
+ mocker.patch(MODULE_PATH + VIEW_EXECUTE,
+ side_effect=exc_type('test'))
+ result = self._run_module(idrac_default_args)
+ if exc_type == URLError:
+ assert result['unreachable'] is True
+ else:
+ assert result['failed'] is True
+ assert 'msg' in result
diff --git a/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_user.py b/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_user.py
index 0ef6e6da3..6087f140f 100644
--- a/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_user.py
+++ b/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_user.py
@@ -22,6 +22,24 @@ from ansible.module_utils._text import to_text
from io import StringIO
MODULE_PATH = 'ansible_collections.dellemc.openmanage.plugins.modules.'
+VERSION = "3.60.60.60"
+VERSION13G = "2.70.70.70"
+SLOT_API = "/redfish/v1/Managers/iDRAC.Embedded.1/Accounts/{0}/"
+CHANGES_FOUND = "Changes found to commit!"
+SLEEP_PATH = 'idrac_user.time.sleep'
+USERNAME2 = "Users.2#UserName"
+GET_PAYLOAD = "idrac_user.get_payload"
+PAYLOAD_XML = "idrac_user.convert_payload_xml"
+XML_DATA = "<xml-data>"
+USERNAME1 = "Users.1#UserName"
+IMPORT_SCP = "idrac_user.iDRACRedfishAPI.import_scp"
+USER2 = "User.2#UserName"
+SUCCESS_CREATED = "Successfully created a request."
+SUCCESS_MSG = "Successfully created user account."
+SUCCESS_UPDATED = "Successfully updated user account."
+INVOKE_REQUEST = "idrac_user.iDRACRedfishAPI.invoke_request"
+CM_ACCOUNT = "idrac_user.create_or_modify_account"
+USER_PRIVILAGE = "Users.1#Privilege"
class TestIDRACUser(FakeAnsibleModule):
@@ -78,7 +96,7 @@ class TestIDRACUser(FakeAnsibleModule):
"Users.1.ProtocolEnable": idrac_default_args["protocol_enable"],
"Users.1.AuthenticationProtocol": idrac_default_args["authentication_protocol"],
"Users.1.PrivacyProtocol": idrac_default_args["privacy_protocol"]}
- xml_payload, json_payload = self.module.convert_payload_xml(payload)
+ _xml, json_payload = self.module.convert_payload_xml(payload)
assert json_payload["Users.1#SolEnable"] is True
def test_remove_user_account_check_mode_1(self, idrac_connection_user_mock, idrac_default_args, mocker):
@@ -87,12 +105,14 @@ class TestIDRACUser(FakeAnsibleModule):
"ipmi_serial_privilege": None, "enable": False, "sol_enable": False,
"protocol_enable": False, "authentication_protocol": "SHA",
"privacy_protocol": "AES"})
- f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
+ f_module = self.get_module_mock(
+ params=idrac_default_args, check_mode=True)
slot_id = 1
- slot_uri = "/redfish/v1/Managers/iDRAC.Embedded.1/Accounts/{0}/".format(slot_id)
+ slot_uri = SLOT_API.format(slot_id)
with pytest.raises(Exception) as exc:
- self.module.remove_user_account(f_module, idrac_connection_user_mock, slot_uri, slot_id)
- assert exc.value.args[0] == "Changes found to commit!"
+ self.module.remove_user_account(
+ f_module, idrac_connection_user_mock, slot_uri, slot_id)
+ assert exc.value.args[0] == CHANGES_FOUND
def test_remove_user_account_check_mode_2(self, idrac_connection_user_mock, idrac_default_args, mocker):
idrac_default_args.update({"state": "absent", "user_name": "user_name", "new_user_name": None,
@@ -100,9 +120,11 @@ class TestIDRACUser(FakeAnsibleModule):
"ipmi_serial_privilege": None, "enable": False, "sol_enable": False,
"protocol_enable": False, "authentication_protocol": "SHA",
"privacy_protocol": "AES"})
- f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
+ f_module = self.get_module_mock(
+ params=idrac_default_args, check_mode=True)
with pytest.raises(Exception) as exc:
- self.module.remove_user_account(f_module, idrac_connection_user_mock, None, None)
+ self.module.remove_user_account(
+ f_module, idrac_connection_user_mock, None, None)
assert exc.value.args[0] == "No changes found to commit!"
def test_remove_user_account_check_mode_3(self, idrac_connection_user_mock, idrac_default_args, mocker):
@@ -111,12 +133,15 @@ class TestIDRACUser(FakeAnsibleModule):
"ipmi_serial_privilege": None, "enable": False, "sol_enable": False,
"protocol_enable": False, "authentication_protocol": "SHA",
"privacy_protocol": "AES"})
- idrac_connection_user_mock.remove_user_account.return_value = {"success": True}
- f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ idrac_connection_user_mock.remove_user_account.return_value = {
+ "success": True}
+ f_module = self.get_module_mock(
+ params=idrac_default_args, check_mode=False)
slot_id = 1
- slot_uri = "/redfish/v1/Managers/iDRAC.Embedded.1/Accounts/{0}/".format(slot_id)
- mocker.patch(MODULE_PATH + 'idrac_user.time.sleep', return_value=None)
- self.module.remove_user_account(f_module, idrac_connection_user_mock, slot_uri, slot_id)
+ slot_uri = SLOT_API.format(slot_id)
+ mocker.patch(MODULE_PATH + SLEEP_PATH, return_value=None)
+ self.module.remove_user_account(
+ f_module, idrac_connection_user_mock, slot_uri, slot_id)
def test_remove_user_account_check_mode_4(self, idrac_connection_user_mock, idrac_default_args, mocker):
idrac_default_args.update({"state": "absent", "user_name": "user_name", "new_user_name": None,
@@ -124,10 +149,13 @@ class TestIDRACUser(FakeAnsibleModule):
"ipmi_serial_privilege": None, "enable": False, "sol_enable": False,
"protocol_enable": False, "authentication_protocol": "SHA",
"privacy_protocol": "AES"})
- idrac_connection_user_mock.remove_user_account.return_value = {"success": True}
- f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ idrac_connection_user_mock.remove_user_account.return_value = {
+ "success": True}
+ f_module = self.get_module_mock(
+ params=idrac_default_args, check_mode=False)
with pytest.raises(Exception) as exc:
- self.module.remove_user_account(f_module, idrac_connection_user_mock, None, None)
+ self.module.remove_user_account(
+ f_module, idrac_connection_user_mock, None, None)
assert exc.value.args[0] == 'The user account is absent.'
def test_get_user_account_1(self, idrac_connection_user_mock, idrac_default_args, mocker):
@@ -140,10 +168,12 @@ class TestIDRACUser(FakeAnsibleModule):
mocker.patch(MODULE_PATH + "idrac_user.iDRACRedfishAPI.export_scp",
return_value=MagicMock())
mocker.patch(MODULE_PATH + "idrac_user.iDRACRedfishAPI.get_idrac_local_account_attr",
- return_value={"Users.2#UserName": "test_user", "Users.3#UserName": ""})
- f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
- response = self.module.get_user_account(f_module, idrac_connection_user_mock)
- assert response[0]["Users.2#UserName"] == "test_user"
+ return_value={USERNAME2: "test_user", "Users.3#UserName": ""})
+ f_module = self.get_module_mock(
+ params=idrac_default_args, check_mode=False)
+ response = self.module.get_user_account(
+ f_module, idrac_connection_user_mock)
+ assert response[0][USERNAME2] == "test_user"
assert response[3] == 3
assert response[4] == "/redfish/v1/Managers/iDRAC.Embedded.1/Accounts/3"
@@ -157,9 +187,11 @@ class TestIDRACUser(FakeAnsibleModule):
mocker.patch(MODULE_PATH + "idrac_user.iDRACRedfishAPI.export_scp",
return_value=MagicMock())
mocker.patch(MODULE_PATH + "idrac_user.iDRACRedfishAPI.get_idrac_local_account_attr",
- return_value={"Users.2#UserName": "test_user", "Users.3#UserName": "test"})
- f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
- response = self.module.get_user_account(f_module, idrac_connection_user_mock)
+ return_value={USERNAME2: "test_user", "Users.3#UserName": "test"})
+ f_module = self.get_module_mock(
+ params=idrac_default_args, check_mode=False)
+ response = self.module.get_user_account(
+ f_module, idrac_connection_user_mock)
assert response[2] == 3
assert response[1] == "/redfish/v1/Managers/iDRAC.Embedded.1/Accounts/3"
@@ -170,227 +202,93 @@ class TestIDRACUser(FakeAnsibleModule):
"ipmi_serial_privilege": "Administrator", "enable": True,
"sol_enable": True, "protocol_enable": True,
"authentication_protocol": "SHA", "privacy_protocol": "AES"})
- f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ f_module = self.get_module_mock(
+ params=idrac_default_args, check_mode=False)
with pytest.raises(Exception) as err:
self.module.get_user_account(f_module, idrac_connection_user_mock)
assert err.value.args[0] == "User name is not valid."
- def test_create_or_modify_account_1(self, idrac_connection_user_mock, idrac_default_args, mocker):
+ @pytest.mark.parametrize("params", [
+ {"ret_val": SUCCESS_MSG, "empty_slot_id": 2,
+ "empty_slot_uri": SLOT_API.format(2)},
+ {"ret_val": SUCCESS_UPDATED, "slot_id": 2,
+ "slot_uri": SLOT_API.format(2)},
+ {"firm_ver": (14, VERSION), "ret_val": SUCCESS_MSG,
+ "empty_slot_id": 2, "empty_slot_uri": SLOT_API.format(2)},
+ {"firm_ver": (14, VERSION), "ret_val": SUCCESS_UPDATED,
+ "slot_id": 2, "slot_uri": SLOT_API.format(2)},
+ {"firm_ver": (14, VERSION), "ret_val": SUCCESS_UPDATED, "slot_id": 2, "slot_uri": SLOT_API.format(2),
+ "empty_slot_id": 2, "empty_slot_uri": SLOT_API.format(2)},
+ ])
+ def test_create_or_modify_account(self, idrac_connection_user_mock, idrac_default_args, mocker, params):
idrac_default_args.update({"state": "present", "new_user_name": "new_user_name",
"user_name": "test", "user_password": "password",
"privilege": "Administrator", "ipmi_lan_privilege": "Administrator",
"ipmi_serial_privilege": "Administrator", "enable": True,
"sol_enable": True, "protocol_enable": True,
"authentication_protocol": "SHA", "privacy_protocol": "AES"})
- f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
- idrac_connection_user_mock.get_server_generation = (13, "2.70.70.70")
- mocker.patch(MODULE_PATH + "idrac_user.get_payload", return_value={"Users.2#UserName": "test_user"})
- mocker.patch(MODULE_PATH + "idrac_user.convert_payload_xml",
- return_value=("<xml-data>", {"Users.1#UserName": "test_user"}))
- mocker.patch(MODULE_PATH + "idrac_user.iDRACRedfishAPI.import_scp",
- return_value={"Message": "Successfully created a request."})
- empty_slot_id = 2
- empty_slot_uri = "/redfish/v1/Managers/iDRAC.Embedded.1/Accounts/{0}/".format(empty_slot_id)
- user_attr = {"User.2#UserName": "test_user"}
- mocker.patch(MODULE_PATH + 'idrac_user.time.sleep', return_value=None)
- response = self.module.create_or_modify_account(f_module, idrac_connection_user_mock, None, None,
- empty_slot_id, empty_slot_uri, user_attr)
- assert response[1] == "Successfully created user account."
+ f_module = self.get_module_mock(
+ params=idrac_default_args, check_mode=False)
+ idrac_connection_user_mock.get_server_generation = params.get(
+ "firm_ver", (13, VERSION13G))
+ mocker.patch(MODULE_PATH + GET_PAYLOAD,
+ return_value={USERNAME2: "test_user"})
+ mocker.patch(MODULE_PATH + PAYLOAD_XML,
+ return_value=(XML_DATA, {USERNAME2: "test_user"}))
+ mocker.patch(MODULE_PATH + IMPORT_SCP,
+ return_value={"Message": SUCCESS_CREATED})
+ mocker.patch(MODULE_PATH + SLEEP_PATH, return_value=None)
+ mocker.patch(MODULE_PATH + INVOKE_REQUEST,
+ return_value={"Message": SUCCESS_CREATED})
+
+ empty_slot_id = params.get("empty_slot_id", None)
+ empty_slot_uri = params.get("empty_slot_uri", None)
+ slot_id = params.get("slot_id", None)
+ slot_uri = params.get("slot_uri", None)
+ user_attr = {USER2: "test_user"}
- def test_create_or_modify_account_2(self, idrac_connection_user_mock, idrac_default_args, mocker):
- idrac_default_args.update({"state": "present", "new_user_name": "new_user_name",
- "user_name": "test", "user_password": "password",
- "privilege": "Administrator", "ipmi_lan_privilege": "Administrator",
- "ipmi_serial_privilege": "Administrator", "enable": True,
- "sol_enable": True, "protocol_enable": True,
- "authentication_protocol": "SHA", "privacy_protocol": "AES"})
- f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
- idrac_connection_user_mock.get_server_generation = (13, "2.70.70.70")
- mocker.patch(MODULE_PATH + 'idrac_user.time.sleep', return_value=None)
- mocker.patch(MODULE_PATH + "idrac_user.get_payload", return_value={"Users.2#UserName": "test_user"})
- mocker.patch(MODULE_PATH + "idrac_user.convert_payload_xml",
- return_value=("<xml-data>", {"Users.1#UserName": "test_user"}))
- mocker.patch(MODULE_PATH + "idrac_user.iDRACRedfishAPI.import_scp",
- return_value={"Message": "Successfully created a request."})
- slot_id = 2
- slot_uri = "/redfish/v1/Managers/iDRAC.Embedded.1/Accounts/{0}/".format(slot_id)
- user_attr = {"User.2#UserName": "test_user"}
response = self.module.create_or_modify_account(f_module, idrac_connection_user_mock, slot_uri, slot_id,
- None, None, user_attr)
- assert response[1] == "Successfully updated user account."
-
- def test_create_or_modify_account_3(self, idrac_connection_user_mock, idrac_default_args, mocker):
- idrac_default_args.update({"state": "present", "new_user_name": "new_user_name",
- "user_name": "test", "user_password": "password",
- "privilege": "Administrator", "ipmi_lan_privilege": "Administrator",
- "ipmi_serial_privilege": "Administrator", "enable": True,
- "sol_enable": True, "protocol_enable": True,
- "authentication_protocol": "SHA", "privacy_protocol": "AES"})
- f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
- idrac_connection_user_mock.get_server_generation = (13, "2.70.70.70")
- mocker.patch(MODULE_PATH + "idrac_user.get_payload", return_value={"Users.2#UserName": "test_user"})
- mocker.patch(MODULE_PATH + "idrac_user.convert_payload_xml",
- return_value=("<xml-data>", {"Users.1#UserName": "test_user"}))
- mocker.patch(MODULE_PATH + "idrac_user.iDRACRedfishAPI.import_scp",
- return_value={"Message": "Successfully created a request."})
- slot_id = 2
- slot_uri = "/redfish/v1/Managers/iDRAC.Embedded.1/Accounts/{0}/".format(slot_id)
- user_attr = {"Users.1#UserName": "test_user"}
- with pytest.raises(Exception) as exc:
- self.module.create_or_modify_account(f_module, idrac_connection_user_mock, slot_uri, slot_id,
- None, None, user_attr)
- assert exc.value.args[0] == "Requested changes are already present in the user slot."
-
- def test_create_or_modify_account_4(self, idrac_connection_user_mock, idrac_default_args, mocker):
- idrac_default_args.update({"state": "present", "new_user_name": "new_user_name",
- "user_name": "test", "user_password": "password",
- "privilege": "Administrator", "ipmi_lan_privilege": "Administrator",
- "ipmi_serial_privilege": "Administrator", "enable": True,
- "sol_enable": True, "protocol_enable": True,
- "authentication_protocol": "SHA", "privacy_protocol": "AES"})
- f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
- idrac_connection_user_mock.get_server_generation = (13, "2.70.70.70")
- mocker.patch(MODULE_PATH + "idrac_user.get_payload", return_value={"Users.2#UserName": "test_user"})
- mocker.patch(MODULE_PATH + "idrac_user.convert_payload_xml",
- return_value=("<xml-data>", {"Users.1#UserName": "test_user"}))
- mocker.patch(MODULE_PATH + "idrac_user.iDRACRedfishAPI.import_scp",
- return_value={"Message": "Successfully created a request."})
- slot_id = 2
- slot_uri = "/redfish/v1/Managers/iDRAC.Embedded.1/Accounts/{0}/".format(slot_id)
- user_attr = {"Users.1#UserName": "test_user"}
- with pytest.raises(Exception) as exc:
- self.module.create_or_modify_account(f_module, idrac_connection_user_mock, slot_uri, slot_id,
- None, None, user_attr)
- assert exc.value.args[0] == "No changes found to commit!"
-
- def test_create_or_modify_account_5(self, idrac_connection_user_mock, idrac_default_args, mocker):
+ empty_slot_id, empty_slot_uri, user_attr)
+ assert response[1] == params.get("ret_val")
+
+ @pytest.mark.parametrize("params", [
+ {"ret_val": "Requested changes are already present in the user slot."},
+ {"firm_ver": (14, VERSION), "slot_id": None, "slot_uri": None,
+ "ret_val": "Maximum number of users reached. Delete a user account and retry the operation."},
+ {"check_mode": True, "ret_val": "No changes found to commit!"},
+ {"check_mode": True, "user_attr": {
+ USERNAME1: "test_user"}, "ret_val": CHANGES_FOUND},
+ {"check_mode": True, "user_attr": {USERNAME1: "test_user"}, "ret_val":
+ CHANGES_FOUND, "empty_slot_id": 2, "empty_slot_uri": SLOT_API.format(2)},
+ ])
+ def test_create_or_modify_account_exception(self, idrac_connection_user_mock, idrac_default_args, mocker, params):
idrac_default_args.update({"state": "present", "new_user_name": "new_user_name",
"user_name": "test", "user_password": "password",
"privilege": "Administrator", "ipmi_lan_privilege": "Administrator",
"ipmi_serial_privilege": "Administrator", "enable": True,
"sol_enable": True, "protocol_enable": True,
"authentication_protocol": "SHA", "privacy_protocol": "AES"})
- f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
- idrac_connection_user_mock.get_server_generation = (13, "2.70.70.70")
- mocker.patch(MODULE_PATH + "idrac_user.get_payload", return_value={"Users.2#UserName": "test_user"})
- mocker.patch(MODULE_PATH + "idrac_user.convert_payload_xml",
- return_value=("<xml-data>", {"Users.2#UserName": "test_user"}))
- mocker.patch(MODULE_PATH + "idrac_user.iDRACRedfishAPI.import_scp",
- return_value={"Message": "Successfully created a request."})
- slot_id = 2
- slot_uri = "/redfish/v1/Managers/iDRAC.Embedded.1/Accounts/{0}/".format(slot_id)
- user_attr = {"Users.1#UserName": "test_user"}
+ f_module = self.get_module_mock(
+ params=idrac_default_args, check_mode=params.get("check_mode", False))
+ idrac_connection_user_mock.get_server_generation = params.get(
+ "firm_ver", (13, VERSION13G))
+ mocker.patch(MODULE_PATH + GET_PAYLOAD,
+ return_value={USERNAME2: "test_user"})
+ mocker.patch(MODULE_PATH + PAYLOAD_XML,
+ return_value=(XML_DATA, {USERNAME2: "test_user"}))
+ mocker.patch(MODULE_PATH + IMPORT_SCP,
+ return_value={"Message": SUCCESS_CREATED})
+ mocker.patch(MODULE_PATH + INVOKE_REQUEST,
+ return_value={"Message": SUCCESS_CREATED})
+ slot_id = params.get("slot_id", 2)
+ slot_uri = params.get("slot_uri", SLOT_API.format(2))
+ empty_slot_id = params.get("empty_slot_id", None)
+ empty_slot_uri = params.get("empty_slot_uri", None)
+ user_attr = params.get("user_attr", {USERNAME2: "test_user"})
with pytest.raises(Exception) as exc:
self.module.create_or_modify_account(f_module, idrac_connection_user_mock, slot_uri, slot_id,
- None, None, user_attr)
- assert exc.value.args[0] == "Changes found to commit!"
-
- def test_create_or_modify_account_6(self, idrac_connection_user_mock, idrac_default_args, mocker):
- idrac_default_args.update({"state": "present", "new_user_name": "new_user_name",
- "user_name": "test", "user_password": "password",
- "privilege": "Administrator", "ipmi_lan_privilege": "Administrator",
- "ipmi_serial_privilege": "Administrator", "enable": True,
- "sol_enable": True, "protocol_enable": True,
- "authentication_protocol": "SHA", "privacy_protocol": "AES"})
- f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
- idrac_connection_user_mock.get_server_generation = (14, "3.60.60.60")
- mocker.patch(MODULE_PATH + "idrac_user.get_payload", return_value={"Users.2#UserName": "test_user"})
- mocker.patch(MODULE_PATH + "idrac_user.convert_payload_xml",
- return_value=("<xml-data>", {"Users.1#UserName": "test_user"}))
- mocker.patch(MODULE_PATH + "idrac_user.iDRACRedfishAPI.invoke_request",
- return_value={"Message": "Successfully created a request."})
- slot_id = 2
- slot_uri = "/redfish/v1/Managers/iDRAC.Embedded.1/Accounts/{0}/".format(slot_id)
- user_attr = {"User.2#UserName": "test_user"}
- response = self.module.create_or_modify_account(f_module, idrac_connection_user_mock, None, None,
- slot_id, slot_uri, user_attr)
- assert response[1] == "Successfully created user account."
-
- def test_create_or_modify_account_7(self, idrac_connection_user_mock, idrac_default_args, mocker):
- idrac_default_args.update({"state": "present", "new_user_name": "new_user_name",
- "user_name": "test", "user_password": "password",
- "privilege": "Administrator", "ipmi_lan_privilege": "Administrator",
- "ipmi_serial_privilege": "Administrator", "enable": True,
- "sol_enable": True, "protocol_enable": True,
- "authentication_protocol": "SHA", "privacy_protocol": "AES"})
- f_module = self.get_module_mock(params=idrac_default_args, check_mode=True)
- idrac_connection_user_mock.get_server_generation = (14, "3.60.60.60")
- mocker.patch(MODULE_PATH + "idrac_user.get_payload", return_value={"Users.2#UserName": "test_user"})
- mocker.patch(MODULE_PATH + "idrac_user.convert_payload_xml",
- return_value=("<xml-data>", {"Users.1#UserName": "test_user"}))
- mocker.patch(MODULE_PATH + "idrac_user.iDRACRedfishAPI.invoke_request",
- return_value={"Message": "Successfully created a request."})
- slot_id = 2
- slot_uri = "/redfish/v1/Managers/iDRAC.Embedded.1/Accounts/{0}/".format(slot_id)
- user_attr = {"User.2#UserName": "test_user"}
- with pytest.raises(Exception) as exc:
- self.module.create_or_modify_account(f_module, idrac_connection_user_mock, None, None,
- slot_id, slot_uri, user_attr)
- assert exc.value.args[0] == "Changes found to commit!"
-
- def test_create_or_modify_account_8(self, idrac_connection_user_mock, idrac_default_args, mocker):
- idrac_default_args.update({"state": "present", "new_user_name": "new_user_name",
- "user_name": "test", "user_password": "password",
- "privilege": "Administrator", "ipmi_lan_privilege": "Administrator",
- "ipmi_serial_privilege": "Administrator", "enable": True,
- "sol_enable": True, "protocol_enable": True,
- "authentication_protocol": "SHA", "privacy_protocol": "AES"})
- f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
- idrac_connection_user_mock.get_server_generation = (14, "3.60.60.60")
- mocker.patch(MODULE_PATH + "idrac_user.get_payload", return_value={"Users.2#UserName": "test_user"})
- mocker.patch(MODULE_PATH + "idrac_user.convert_payload_xml",
- return_value=("<xml-data>", {"Users.1#UserName": "test_user"}))
- mocker.patch(MODULE_PATH + "idrac_user.iDRACRedfishAPI.invoke_request",
- return_value={"Message": "Successfully created a request."})
- slot_id = 2
- slot_uri = "/redfish/v1/Managers/iDRAC.Embedded.1/Accounts/{0}/".format(slot_id)
- user_attr = {"User.2#UserName": "test_user"}
- response = self.module.create_or_modify_account(f_module, idrac_connection_user_mock, slot_uri, slot_id,
- None, None, user_attr)
- assert response[1] == "Successfully updated user account."
-
- def test_create_or_modify_account_both_slot_empty_input(self, idrac_connection_user_mock, idrac_default_args, mocker):
- idrac_default_args.update({"state": "present", "new_user_name": "new_user_name",
- "user_name": "test", "user_password": "password",
- "privilege": "Administrator", "ipmi_lan_privilege": "Administrator",
- "ipmi_serial_privilege": "Administrator", "enable": True,
- "sol_enable": True, "protocol_enable": True,
- "authentication_protocol": "SHA", "privacy_protocol": "AES"})
- f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
- idrac_connection_user_mock.get_server_generation = (14, "3.60.60.60")
- mocker.patch(MODULE_PATH + "idrac_user.get_payload", return_value={"Users.2#UserName": "test_user"})
- mocker.patch(MODULE_PATH + "idrac_user.convert_payload_xml",
- return_value=("<xml-data>", {"Users.1#UserName": "test_user"}))
- mocker.patch(MODULE_PATH + "idrac_user.iDRACRedfishAPI.invoke_request",
- return_value={"Message": "Successfully created a request."})
- slot_id = 2
- slot_uri = "/redfish/v1/Managers/iDRAC.Embedded.1/Accounts/{0}/".format(slot_id)
- user_attr = {"User.2#UserName": "test_user"}
- response = self.module.create_or_modify_account(f_module, idrac_connection_user_mock, slot_id, slot_uri,
- slot_id, slot_uri, user_attr)
- assert response[1] == "Successfully updated user account."
-
- def test_create_or_modify_account_both_slot_empty_none_input(self, idrac_connection_user_mock, idrac_default_args, mocker):
- idrac_default_args.update({"state": "present", "new_user_name": "new_user_name",
- "user_name": "test", "user_password": "password",
- "privilege": "Administrator", "ipmi_lan_privilege": "Administrator",
- "ipmi_serial_privilege": "Administrator", "enable": True,
- "sol_enable": True, "protocol_enable": True,
- "authentication_protocol": "SHA", "privacy_protocol": "AES"})
- f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
- idrac_connection_user_mock.get_server_generation = (14, "3.60.60.60")
- mocker.patch(MODULE_PATH + "idrac_user.get_payload", return_value={"Users.2#UserName": "test_user"})
- mocker.patch(MODULE_PATH + "idrac_user.convert_payload_xml",
- return_value=("<xml-data>", {"Users.1#UserName": "test_user"}))
- mocker.patch(MODULE_PATH + "idrac_user.iDRACRedfishAPI.invoke_request",
- return_value={"Message": "Successfully created a request."})
- # slot_id = 2
- # slot_uri = "/redfish/v1/Managers/iDRAC.Embedded.1/Accounts/{0}/".format(slot_id)
- user_attr = {"User.2#UserName": "test_user"}
- with pytest.raises(Exception) as exc:
- self.module.create_or_modify_account(f_module, idrac_connection_user_mock, None, None,
- None, None, user_attr)
- assert exc.value.args[0] == "Maximum number of users reached. Delete a user account and retry the operation."
+ empty_slot_id, empty_slot_uri, user_attr)
+ assert exc.value.args[0] == params.get("ret_val")
@pytest.mark.parametrize("exc_type", [SSLValidationError, URLError, ValueError, TypeError,
ConnectionError, HTTPError, ImportError, RuntimeError])
@@ -403,10 +301,10 @@ class TestIDRACUser(FakeAnsibleModule):
"authentication_protocol": "SHA", "privacy_protocol": "AES"})
json_str = to_text(json.dumps({"data": "out"}))
if exc_type not in [HTTPError, SSLValidationError]:
- mocker.patch(MODULE_PATH + "idrac_user.create_or_modify_account",
+ mocker.patch(MODULE_PATH + CM_ACCOUNT,
side_effect=exc_type('test'))
else:
- mocker.patch(MODULE_PATH + "idrac_user.create_or_modify_account",
+ mocker.patch(MODULE_PATH + CM_ACCOUNT,
side_effect=exc_type('https://testhost.com', 400, 'http error message',
{"accept-type": "application/json"}, StringIO(json_str)))
if exc_type != URLError:
@@ -425,7 +323,8 @@ class TestIDRACUser(FakeAnsibleModule):
"authentication_protocol": "SHA", "privacy_protocol": "AES"})
obj = MagicMock()
obj.json_data = {"error": {"message": "Some Error Occured"}}
- mocker.patch(MODULE_PATH + "idrac_user.remove_user_account", return_value=(obj, "error"))
+ mocker.patch(MODULE_PATH + "idrac_user.remove_user_account",
+ return_value=(obj, "error"))
result = self._run_module_with_fail_json(idrac_default_args)
assert result['failed'] is True
assert result['msg'] == "Some Error Occured"
@@ -438,8 +337,10 @@ class TestIDRACUser(FakeAnsibleModule):
"sol_enable": True, "protocol_enable": True,
"authentication_protocol": "SHA", "privacy_protocol": "AES"})
obj = MagicMock()
- obj.json_data = {"Oem": {"Dell": {"Message": "Unable to complete application of configuration profile values."}}}
- mocker.patch(MODULE_PATH + "idrac_user.remove_user_account", return_value=(obj, "error"))
+ obj.json_data = {"Oem": {"Dell": {
+ "Message": "Unable to complete application of configuration profile values."}}}
+ mocker.patch(MODULE_PATH + "idrac_user.remove_user_account",
+ return_value=(obj, "error"))
result = self._run_module_with_fail_json(idrac_default_args)
assert result['failed'] is True
assert result['msg'] == "Unable to complete application of configuration profile values."
@@ -452,8 +353,9 @@ class TestIDRACUser(FakeAnsibleModule):
"sol_enable": True, "protocol_enable": True,
"authentication_protocol": "SHA", "privacy_protocol": "AES"})
obj = MagicMock()
- obj.json_data = {"Oem": {"Dell": {"Message": "This Message Does Not Exists"}}}
- mocker.patch(MODULE_PATH + "idrac_user.create_or_modify_account", return_value=(obj, "created"))
+ obj.json_data = {
+ "Oem": {"Dell": {"Message": "This Message Does Not Exists"}}}
+ mocker.patch(MODULE_PATH + CM_ACCOUNT, return_value=(obj, "created"))
# with pytest.raises(Exception) as exc:
result = self._run_module(idrac_default_args)
assert result['changed'] is True
@@ -477,7 +379,8 @@ class TestIDRACUser(FakeAnsibleModule):
"ipmi_serial_privilege": "Administrator", "enable": True,
"sol_enable": True, "protocol_enable": True,
"authentication_protocol": "SHA", "privacy_protocol": "AES"})
- f_module = self.get_module_mock(params=idrac_default_args, check_mode=False)
+ f_module = self.get_module_mock(
+ params=idrac_default_args, check_mode=False)
with pytest.raises(Exception) as err:
self.module.validate_input(f_module)
assert err.value.args[0] == "custom_privilege value should be from 0 to 511."
@@ -491,12 +394,14 @@ class TestIDRACUser(FakeAnsibleModule):
is_change_required = self.module.compare_payload(json_payload, None)
assert is_change_required is True
- json_payload = {"Users.1#Privilege": "123"}
- idrac_attr = {"Users.1#Privilege": "123"}
- is_change_required = self.module.compare_payload(json_payload, idrac_attr)
+ json_payload = {USER_PRIVILAGE: "123"}
+ idrac_attr = {USER_PRIVILAGE: "123"}
+ is_change_required = self.module.compare_payload(
+ json_payload, idrac_attr)
assert is_change_required is False
- json_payload = {"Users.1#Privilege": "123"}
- idrac_attr = {"Users.1#Privilege": "124"}
- is_change_required = self.module.compare_payload(json_payload, idrac_attr)
+ json_payload = {USER_PRIVILAGE: "123"}
+ idrac_attr = {USER_PRIVILAGE: "124"}
+ is_change_required = self.module.compare_payload(
+ json_payload, idrac_attr)
assert is_change_required is True
diff --git a/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_application_console_preferences.py b/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_application_console_preferences.py
index 627c5e71d..1f51f6cae 100644
--- a/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_application_console_preferences.py
+++ b/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_application_console_preferences.py
@@ -2,8 +2,8 @@
#
# Dell OpenManage Ansible Modules
-# Version 7.0.0
-# Copyright (C) 2022 Dell Inc. or its subsidiaries. All Rights Reserved.
+# Version 9.1.0
+# Copyright (C) 2022-2024 Dell Inc. or its subsidiaries. All Rights Reserved.
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
#
@@ -2227,12 +2227,12 @@ class TestOmeAppConsolePreferences(FakeAnsibleModule):
assert result["unreachable"] is True
elif exc_type not in [HTTPError, SSLValidationError]:
mocker.patch(MODULE_PATH + '_validate_params', side_effect=exc_type("exception message"))
- result = self._run_module_with_fail_json(ome_default_args)
+ result = self._run_module(ome_default_args)
assert result['failed'] is True
else:
mocker.patch(MODULE_PATH + '_validate_params',
side_effect=exc_type('https://testhost.com', 400, 'http error message',
{"accept-type": "application/json"}, StringIO(json_str)))
- result = self._run_module_with_fail_json(ome_default_args)
+ result = self._run_module(ome_default_args)
assert result['failed'] is True
assert 'msg' in result
diff --git a/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_device_local_access_configuration.py b/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_device_local_access_configuration.py
index 9b92bb3c2..50f9e09e6 100644
--- a/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_device_local_access_configuration.py
+++ b/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_device_local_access_configuration.py
@@ -2,8 +2,8 @@
#
# Dell OpenManage Ansible Modules
-# Version 8.1.0
-# Copyright (C) 2021-2023 Dell Inc. or its subsidiaries. All Rights Reserved.
+# Version 9.1.0
+# Copyright (C) 2022-2024 Dell Inc. or its subsidiaries. All Rights Reserved.
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
#
@@ -59,7 +59,7 @@ class TestOMEMDevicePower(FakeAnsibleModule):
"SettingType": "LocalAccessConfiguration", "EnableChassisDirect": False,
"EnableChassisPowerButton": False, "EnableKvmAccess": True, "EnableLcdOverridePin": False,
"LcdAccess": "VIEW_ONLY", "LcdCustomString": "LCD Text", "LcdLanguage": "en",
- "LcdPresence": "Present", "LcdOverridePin": "123456",
+ "LcdPresence": "Present", "LcdPinLength": 6, "LedPresence": "Absent", "LcdOverridePin": "123456",
"QuickSync": {"QuickSyncAccess": True, "TimeoutLimit": 10, "EnableInactivityTimeout": True,
"TimeoutLimitUnit": "MINUTES", "EnableReadAuthentication": True,
"EnableQuickSyncWifi": True, "QuickSyncHardware": "Present"}},
@@ -86,7 +86,7 @@ class TestOMEMDevicePower(FakeAnsibleModule):
"SettingType": "LocalAccessConfiguration", "EnableChassisDirect": False,
"EnableChassisPowerButton": False, "EnableKvmAccess": True, "EnableLcdOverridePin": False,
"LcdAccess": "VIEW_ONLY", "LcdCustomString": "LCD Text", "LcdLanguage": "en",
- "LcdPresence": "Present", "LcdOverridePin": "123456",
+ "LcdPresence": "Present", "LcdPinLength": 6, "LedPresence": "Absent", "LcdOverridePin": "123456",
"QuickSync": {"QuickSyncAccess": True, "TimeoutLimit": 10, "EnableInactivityTimeout": True,
"TimeoutLimitUnit": "MINUTES", "EnableReadAuthentication": True,
"EnableQuickSyncWifi": True, "QuickSyncHardware": "Present"}},
@@ -287,7 +287,7 @@ class TestOMEMDevicePower(FakeAnsibleModule):
def test_check_mode_validation(self, ome_conn_mock_lac, ome_default_args, ome_response_mock, mocker):
loc_data = {"EnableKvmAccess": True, "EnableChassisDirect": True, "EnableChassisPowerButton": True,
"EnableLcdOverridePin": True, "LcdAccess": True, "LcdCustomString": "LCD Text",
- "LcdLanguage": "en", "LcdOverridePin": "123456", "LcdPresence": "Present",
+ "LcdLanguage": "en", "LcdPresence": "Present", "LcdPinLength": 6, "LedPresence": "Absent", "LcdOverridePin": "123456",
"QuickSync": {"QuickSyncAccess": True, "TimeoutLimit": 10, "EnableInactivityTimeout": True,
"TimeoutLimitUnit": "MINUTES", "EnableReadAuthentication": True,
"EnableQuickSyncWifi": True, "QuickSyncHardware": "Present"}, }
@@ -329,18 +329,12 @@ class TestOMEMDevicePower(FakeAnsibleModule):
elif exc_type not in [HTTPError, SSLValidationError]:
mocker.patch(MODULE_PATH + 'check_domain_service',
side_effect=exc_type("exception message"))
- result = self._run_module_with_fail_json(ome_default_args)
- assert result['failed'] is True
- elif exc_type in [HTTPError]:
- mocker.patch(MODULE_PATH + 'check_domain_service',
- side_effect=exc_type(HTTPS_ADDRESS, 400, HTTP_ERROR_MSG,
- {"accept-type": "application/json"}, StringIO(json_str)))
result = self._run_module(ome_default_args)
assert result['failed'] is True
else:
mocker.patch(MODULE_PATH + 'check_domain_service',
side_effect=exc_type(HTTPS_ADDRESS, 400, HTTP_ERROR_MSG,
{"accept-type": "application/json"}, StringIO(json_str)))
- result = self._run_module_with_fail_json(ome_default_args)
+ result = self._run_module(ome_default_args)
assert result['failed'] is True
assert 'msg' in result
diff --git a/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_device_location.py b/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_device_location.py
index 40fe1b1a2..fd76d6ac9 100644
--- a/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_device_location.py
+++ b/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_device_location.py
@@ -112,36 +112,36 @@ class TestOMEMDeviceLocation(FakeAnsibleModule):
@pytest.mark.parametrize("params", [
{"json_data": {"value": [
- {'Id': 1234, 'PublicAddress': "1.2.3.4",
+ {'Id': 1234, 'PublicAddress': "xxx.xxx.x.x",
'DeviceId': 1234, "Type": 1000},
- {'PublicAddress': "1.2.3.5", 'DeviceId': 1235, "Type": 1000}]},
+ {'PublicAddress': "X.X.X.X", 'DeviceId': 1235, "Type": 1000}]},
'message': "Successfully updated the location settings.",
- 'mparams': {"hostname": "1.2.3.4",
+ 'mparams': {"hostname": "xxx.xxx.x.x",
"device_id": 1234, "data_center": "data center",
"room": "room", "aisle": "aisle", "rack": "rack"}
},
{"json_data": {"value": [
{'Id': 1234, 'DeviceServiceTag': 'ABCD123',
- 'PublicAddress': "1.2.3.4", 'DeviceId': 1234, "Type": 1000},
- {'PublicAddress': "1.2.3.5", 'DeviceId': 1235, "Type": 1000}]},
+ 'PublicAddress': "xxx.xxx.x.x", 'DeviceId': 1234, "Type": 1000},
+ {'PublicAddress': "X.X.X.X", 'DeviceId': 1235, "Type": 1000}]},
'message': "Successfully updated the location settings.",
- 'mparams': {"hostname": "1.2.3.4",
+ 'mparams': {"hostname": "xxx.xxx.x.x",
"device_service_tag": "ABCD123", "data_center": "data center",
"room": "room", "aisle": "aisle", "rack": "rack"}
},
{"json_data": {"value": [
- {'Id': 1234, 'PublicAddress': "1.2.3.4",
+ {'Id': 1234, 'PublicAddress': "xxx.xxx.x.x",
'DeviceId': 1234, "Type": 1000},
- {'PublicAddress': "1.2.3.5", 'DeviceId': 1235, "Type": 1000}]},
+ {'PublicAddress': "X.X.X.X", 'DeviceId': 1235, "Type": 1000}]},
'message': "Successfully updated the location settings.",
- 'mparams': {"hostname": "1.2.3.4",
+ 'mparams': {"hostname": "xxx.xxx.x.x",
"data_center": "data center",
"room": "room", "aisle": "aisle", "rack": "rack"}
},
{"json_data": {"value": [
{'Id': 1234, 'PublicAddress': "dummyhost_shouldnotexist",
'DeviceId': 1234, "Type": 1000},
- {'PublicAddress': "1.2.3.5", 'DeviceId': 1235, "Type": 1000}]},
+ {'PublicAddress': "X.X.X.X", 'DeviceId': 1235, "Type": 1000}]},
'message': "Successfully updated the location settings.",
'mparams': {"hostname": "dummyhost_shouldnotexist",
"data_center": "data center",
@@ -159,9 +159,9 @@ class TestOMEMDeviceLocation(FakeAnsibleModule):
@pytest.mark.parametrize("params", [
{"json_data": {"value": [
- {'Id': 1234, 'PublicAddress': "1.2.3.4",
+ {'Id': 1234, 'PublicAddress': "xxx.xxx.x.x",
'DeviceId': 1234, "Type": 1000},
- {'PublicAddress': "1.2.3.5", 'DeviceId': 1235, "Type": 1000}]},
+ {'PublicAddress': "X.X.X.X", 'DeviceId': 1235, "Type": 1000}]},
'message': "The device location settings operation is supported only on OpenManage Enterprise Modular systems.",
'http_error_json': {
"error": {
@@ -179,14 +179,14 @@ class TestOMEMDeviceLocation(FakeAnsibleModule):
]
}
},
- 'mparams': {"hostname": "1.2.3.4",
+ 'mparams': {"hostname": "xxx.xxx.x.x",
"data_center": "data center",
"room": "room", "aisle": "aisle", "rack": "rack"}
},
{"json_data": {"value": [
- {'Id': 1234, 'PublicAddress': "1.2.3.4",
+ {'Id': 1234, 'PublicAddress': "xxx.xxx.x.x",
'DeviceId': 1234, "Type": 1000},
- {'PublicAddress': "1.2.3.5", 'DeviceId': 1235, "Type": 1000}]},
+ {'PublicAddress': "X.X.X.X", 'DeviceId': 1235, "Type": 1000}]},
'message': "Unable to complete the operation because the location settings are not supported on the specified device.",
'http_error_json': {
"error": {
@@ -206,16 +206,16 @@ class TestOMEMDeviceLocation(FakeAnsibleModule):
},
'check_domain_service': 'mocked_check_domain_service',
'standalone_chassis': ('Id', 1234),
- 'mparams': {"hostname": "1.2.3.4",
+ 'mparams': {"hostname": "xxx.xxx.x.x",
"data_center": "data center",
"room": "room", "aisle": "aisle", "rack": "rack"}
},
{"json_data": {"value": [
- {'Id': 1234, 'PublicAddress': "1.2.3.4",
+ {'Id': 1234, 'PublicAddress': "xxx.xxx.x.x",
'DeviceId': 1234, "Type": 1000},
- {'PublicAddress': "1.2.3.5", 'DeviceId': 1235, "Type": 1000}]},
+ {'PublicAddress': "X.X.X.X", 'DeviceId': 1235, "Type": 1000}]},
'message': "Unable to complete the operation because the entered target device id '123' is invalid.",
- 'mparams': {"hostname": "1.2.3.4", "device_id": 123,
+ 'mparams': {"hostname": "xxx.xxx.x.x.x.x.x.x", "device_id": 123,
"data_center": "data center",
"room": "room", "aisle": "aisle", "rack": "rack"}
},
diff --git a/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_device_mgmt_network.py b/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_device_mgmt_network.py
index 004586393..c0bf63e4a 100644
--- a/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_device_mgmt_network.py
+++ b/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_device_mgmt_network.py
@@ -366,11 +366,11 @@ class TestOmeDeviceMgmtNetwork(FakeAnsibleModule):
{"mparams": {"device_id": 123}, "success": True,
"json_data": {"Type": 2000, "Id": 123, "Identifier": "ABCD123"},
"res": {"Type": 2000, "Id": 123, "Identifier": "ABCD123"},
- "diff": {"IPV4": "1.2.3.4"}},
+ "diff": {"IPV4": "xxx.xxx.x.x"}},
{"mparams": {"device_id": 123}, "success": True,
"json_data": {"Type": 4000, "Id": 123, "Identifier": "ABCD123"},
"res": {"Type": 4000, "Id": 123, "Identifier": "ABCD123"},
- "diff": {"IPV4": "1.2.3.4"}},
+ "diff": {"IPV4": "xxx.xxx.x.x"}},
])
def test_get_network_payload(
self, params, ome_connection_mock_for_device_network, ome_response_mock, mocker):
diff --git a/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_device_power_settings.py b/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_device_power_settings.py
index 553a57369..9a2255c49 100644
--- a/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_device_power_settings.py
+++ b/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_device_power_settings.py
@@ -35,6 +35,28 @@ POWER_FAIL_MSG = "Unable to complete the operation because the power settings "
"are not supported on the specified device."
DOMAIN_FAIL_MSG = "The device location settings operation is supported only on " \
"OpenManage Enterprise Modular."
+ERROR_JSON = {
+ "error": {
+ "code": "Base.1.0.GeneralError",
+ "message": "A general error has occurred. See ExtendedInfo for more information.",
+ "@Message.ExtendedInfo": [
+ {
+ "MessageId": "CGEN1004",
+ "RelatedProperties": [],
+ "Message": "Unable to process the request because an error occurred.",
+ "MessageArgs": [],
+ "Severity": "Critical",
+ "Resolution": "Retry the operation. If the issue persists, contact your system administrator."
+ }
+ ]
+ }}
+MPARAMS = {"hostname": "xxx.xxx.x.x",
+ "power_configuration": {"enable_power_cap": True, "power_cap": 3424}
+ }
+POWER_JSON_DATA = {"value": [
+ {'Id': 1234, 'PublicAddress': "xxx.xxx.x.x",
+ 'DeviceId': 1234, "Type": 1000},
+ {'PublicAddress': "xxx.xxx.xx.x", 'DeviceId': 1235, "Type": 1000}]}
@pytest.fixture
@@ -49,11 +71,11 @@ class TestOMEMDevicePower(FakeAnsibleModule):
module = ome_device_power_settings
- @pytest.mark.parametrize("params", [
+ @pytest.mark.parametrize("params_inp", [
{"json_data": {"value": [
- {'Id': 1234, 'PublicAddress': "1.2.3.4",
+ {'Id': 1234, 'PublicAddress': "xxx.xxx.x.x",
'DeviceServiceTag': 'ABCD123', "Type": 1000},
- {'PublicAddress': "1.2.3.5", 'DeviceId': 1235, "Type": 1000}],
+ {'PublicAddress': "X.X.X.X", 'DeviceId': 1235, "Type": 1000}],
"EnableHotSpare": True,
"EnablePowerCapSettings": True,
"MaxPowerCap": "3424",
@@ -63,15 +85,15 @@ class TestOMEMDevicePower(FakeAnsibleModule):
"RedundancyPolicy": "NO_REDUNDANCY",
"SettingType": "Power"},
'message': SUCCESS_MSG,
- 'mparams': {"hostname": "1.2.3.4",
+ 'mparams': {"hostname": "xxx.xxx.x.x",
"power_configuration": {"enable_power_cap": True, "power_cap": 3424},
"hot_spare_configuration": {"enable_hot_spare": False, "primary_grid": "GRID_1"},
"device_id": 1234,
}},
{"json_data": {"value": [
- {'Id': 1234, 'PublicAddress': "1.2.3.4",
+ {'Id': 1234, 'PublicAddress': "xxx.xxx.x.x",
'DeviceServiceTag': 'ABCD123', "Type": 1000},
- {'PublicAddress': "1.2.3.5", 'DeviceId': 1235, "Type": 1000}],
+ {'PublicAddress': "X.X.X.X", 'DeviceId': 1235, "Type": 1000}],
"EnableHotSpare": True,
"EnablePowerCapSettings": True,
"MaxPowerCap": "3424",
@@ -81,15 +103,15 @@ class TestOMEMDevicePower(FakeAnsibleModule):
"RedundancyPolicy": "NO_REDUNDANCY",
"SettingType": "Power"},
'message': SUCCESS_MSG,
- 'mparams': {"hostname": "1.2.3.4",
+ 'mparams': {"hostname": "xxx.xxx.x.x",
"power_configuration": {"enable_power_cap": False, "power_cap": 3424},
"hot_spare_configuration": {"enable_hot_spare": True, "primary_grid": "GRID_1"},
"device_service_tag": 'ABCD123',
}},
{"json_data": {"value": [
- {'Id': 1234, 'PublicAddress': "1.2.3.4",
+ {'Id': 1234, 'PublicAddress': "xxx.xxx.x.x",
'DeviceId': 1234, "Type": 1000},
- {'PublicAddress': "1.2.3.5", 'DeviceId': 1235, "Type": 1000}],
+ {'PublicAddress': "X.X.X.X", 'DeviceId': 1235, "Type": 1000}],
"EnableHotSpare": True,
"EnablePowerCapSettings": True,
"MaxPowerCap": "3424",
@@ -99,14 +121,14 @@ class TestOMEMDevicePower(FakeAnsibleModule):
"RedundancyPolicy": "NO_REDUNDANCY",
"SettingType": "Power"},
'message': SUCCESS_MSG,
- 'mparams': {"hostname": "1.2.3.4",
+ 'mparams': {"hostname": "xxx.xxx.x.x",
"power_configuration": {"enable_power_cap": False, "power_cap": 3424},
"hot_spare_configuration": {"enable_hot_spare": True, "primary_grid": "GRID_1"}
}},
{"json_data": {"value": [
{'Id': 1234, 'PublicAddress': "dummyhostname_shouldnotexist",
'DeviceId': 1234, "Type": 1000},
- {'PublicAddress': "1.2.3.5", 'DeviceId': 1235, "Type": 1000}],
+ {'PublicAddress': "X.X.X.X", 'DeviceId': 1235, "Type": 1000}],
"EnableHotSpare": True,
"EnablePowerCapSettings": True,
"MaxPowerCap": "3424",
@@ -121,20 +143,17 @@ class TestOMEMDevicePower(FakeAnsibleModule):
"hot_spare_configuration": {"enable_hot_spare": True, "primary_grid": "GRID_1"}
}}
])
- def test_ome_devices_power_settings_success(self, params, ome_conn_mock_power, ome_response_mock,
+ def test_ome_devices_power_settings_success(self, params_inp, ome_conn_mock_power, ome_response_mock,
ome_default_args, module_mock, mocker):
- ome_response_mock.success = params.get("success", True)
- ome_response_mock.json_data = params['json_data']
- ome_default_args.update(params['mparams'])
+ ome_response_mock.success = params_inp.get("success", True)
+ ome_response_mock.json_data = params_inp['json_data']
+ ome_default_args.update(params_inp['mparams'])
result = self._run_module(
- ome_default_args, check_mode=params.get('check_mode', False))
- assert result['msg'] == params['message']
+ ome_default_args, check_mode=params_inp.get('check_mode', False))
+ assert result['msg'] == params_inp['message']
@pytest.mark.parametrize("params", [
- {"json_data": {"value": [
- {'Id': 1234, 'PublicAddress': "1.2.3.4",
- 'DeviceId': 1234, "Type": 1000},
- {'PublicAddress': "1.2.3.5", 'DeviceId': 1235, "Type": 1000}]},
+ {"json_data": POWER_JSON_DATA,
'message': DOMAIN_FAIL_MSG,
'http_error_json': {
"error": {
@@ -151,77 +170,39 @@ class TestOMEMDevicePower(FakeAnsibleModule):
}
]
}},
- 'mparams': {"hostname": "1.2.3.4",
+ 'mparams': {"hostname": "xxx.xxx.x.x",
"device_service_tag": 'ABCD123',
"power_configuration": {"enable_power_cap": True, "power_cap": 3424}
}},
{"json_data": {"value": [
- {'Id': 1234, 'PublicAddress': "1.2.3.4",
+ {'Id': 1234, 'PublicAddress': "xxx.xxx.x.x",
'DeviceId': 1234, "Type": 1000},
- {'PublicAddress': "1.2.3.5", 'DeviceId': 1235, "Type": 1000}]},
+ {'PublicAddress': "X.X.X.X", 'DeviceId': 1235, "Type": 1000}]},
'message': POWER_FAIL_MSG,
'check_domain_service': 'mocked_check_domain_service',
'get_chassis_device': ('Id', 1234),
- 'http_error_json': {
- "error": {
- "code": "Base.1.0.GeneralError",
- "message": "A general error has occurred. See ExtendedInfo for more information.",
- "@Message.ExtendedInfo": [
- {
- "MessageId": "CGEN1004",
- "RelatedProperties": [],
- "Message": "Unable to process the request because an error occurred.",
- "MessageArgs": [],
- "Severity": "Critical",
- "Resolution": "Retry the operation. If the issue persists, contact your system administrator."
- }
- ]
- }},
- 'mparams': {"hostname": "1.2.3.4",
- "power_configuration": {"enable_power_cap": True, "power_cap": 3424}
- }},
- {"json_data": {"value": [
- {'Id': 1234, 'PublicAddress': "1.2.3.4",
- 'DeviceId': 1234, "Type": 1000},
- {'PublicAddress': "1.2.3.5", 'DeviceId': 1235, "Type": 1000}]},
+ 'http_error_json': ERROR_JSON,
+ 'mparams': MPARAMS},
+ {"json_data": POWER_JSON_DATA,
'message': POWER_FAIL_MSG,
'check_domain_service': 'mocked_check_domain_service',
'get_chassis_device': ('Id', 1234),
'http_err_code': 404,
- 'http_error_json': {
- "error": {
- "code": "Base.1.0.GeneralError",
- "message": "A general error has occurred. See ExtendedInfo for more information.",
- "@Message.ExtendedInfo": [
- {
- "MessageId": "CGEN1004",
- "RelatedProperties": [],
- "Message": "Unable to process the request because an error occurred.",
- "MessageArgs": [],
- "Severity": "Critical",
- "Resolution": "Retry the operation. If the issue persists, contact your system administrator."
- }
- ]
- }},
- 'mparams': {"hostname": "1.2.3.4",
- "power_configuration": {"enable_power_cap": True, "power_cap": 3424}
- }},
- {"json_data": {"value": [
- {'Id': 1234, 'PublicAddress': "1.2.3.4",
- 'DeviceId': 1234, "Type": 1000},
- {'PublicAddress': "1.2.3.5", 'DeviceId': 1235, "Type": 1000}]},
+ 'http_error_json': ERROR_JSON,
+ 'mparams': MPARAMS},
+ {"json_data": POWER_JSON_DATA,
'message': DEVICE_FAIL_MSG.format('id', 123),
'check_domain_service': 'mocked_check_domain_service',
'get_chassis_device': ('Id', 1234),
- 'mparams': {"hostname": "1.2.3.4", 'device_id': 123,
+ 'mparams': {"hostname": "xxx.xxx.x.x", 'device_id': 123,
"power_configuration": {"enable_power_cap": True, "power_cap": 3424}
}},
{"json_data": {"value": [
- {'Id': 1234, 'PublicAddress': "1.2.3.4",
+ {'Id': 1234, 'PublicAddress': "xxx.xxx.x.x",
'DeviceId': 1234, "Type": 1000},
- {'PublicAddress': "1.2.3.5", 'DeviceId': 1235, "Type": 1000}]},
+ {'PublicAddress': "X.X.X.X", 'DeviceId': 1235, "Type": 1000}]},
'message': CONFIG_FAIL_MSG,
- 'mparams': {"hostname": "1.2.3.4", "device_id": 123}}
+ 'mparams': {"hostname": "xxx.xxx.x.x", "device_id": 123}}
])
def test_ome_devices_power_settings_failure(self, params, ome_conn_mock_power, ome_response_mock,
ome_default_args, module_mock, mocker):
@@ -303,29 +284,29 @@ class TestOMEMDevicePower(FakeAnsibleModule):
result = self.module.get_ip_from_host("ZZ.ZZ.ZZ.ZZ")
assert result == "ZZ.ZZ.ZZ.ZZ"
- @pytest.mark.parametrize("exc_type",
+ @pytest.mark.parametrize("exc_type_ps",
[IOError, ValueError, SSLError, TypeError, ConnectionError, HTTPError, URLError])
- def test_ome_device_power_main_exception_case(self, exc_type, mocker, ome_default_args,
+ def test_ome_device_power_main_exception_case(self, exc_type_ps, mocker, ome_default_args,
ome_conn_mock_power, ome_response_mock):
ome_default_args.update({"device_id": 25011, "power_configuration": {"enable_power_cap": True,
"power_cap": 3424}})
ome_response_mock.status_code = 400
ome_response_mock.success = False
json_str = to_text(json.dumps({"info": "error_details"}))
- if exc_type == URLError:
+ if exc_type_ps == URLError:
mocker.patch(MODULE_PATH + 'check_domain_service',
- side_effect=exc_type("url open error"))
- result = self._run_module(ome_default_args)
- assert result["unreachable"] is True
- elif exc_type not in [HTTPError, SSLValidationError]:
+ side_effect=exc_type_ps("url open error"))
+ result_ps = self._run_module(ome_default_args)
+ assert result_ps["unreachable"] is True
+ elif exc_type_ps not in [HTTPError, SSLValidationError]:
mocker.patch(MODULE_PATH + 'check_domain_service',
- side_effect=exc_type("exception message"))
- result = self._run_module_with_fail_json(ome_default_args)
- assert result['failed'] is True
+ side_effect=exc_type_ps("exception message"))
+ result_ps = self._run_module_with_fail_json(ome_default_args)
+ assert result_ps['failed'] is True
else:
mocker.patch(MODULE_PATH + 'check_domain_service',
- side_effect=exc_type('https://testhost.com', 400, 'http error message',
- {"accept-type": "application/json"}, StringIO(json_str)))
- result = self._run_module_with_fail_json(ome_default_args)
- assert result['failed'] is True
- assert 'msg' in result
+ side_effect=exc_type_ps('https://testhost.com', 400, 'http error message',
+ {"accept-type": "application/json"}, StringIO(json_str)))
+ result_ps = self._run_module_with_fail_json(ome_default_args)
+ assert result_ps['failed'] is True
+ assert 'msg' in result_ps
diff --git a/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_device_quick_deploy.py b/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_device_quick_deploy.py
index 60b8c17cc..78299581d 100644
--- a/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_device_quick_deploy.py
+++ b/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_device_quick_deploy.py
@@ -267,13 +267,13 @@ class TestOMEMDevicePower(FakeAnsibleModule):
assert result["unreachable"] is True
elif exc_type not in [HTTPError, SSLValidationError]:
mocker.patch(MODULE_PATH + 'check_domain_service', side_effect=exc_type("exception message"))
- result = self._run_module_with_fail_json(ome_default_args)
+ result = self._run_module(ome_default_args)
assert result['failed'] is True
else:
mocker.patch(MODULE_PATH + 'check_domain_service',
side_effect=exc_type(HTTP_ADDRESS, 400, HTTP_ERROR_MSG,
{"accept-type": ACCESS_TYPE}, StringIO(json_str)))
- result = self._run_module_with_fail_json(ome_default_args)
+ result = self._run_module(ome_default_args)
assert result['failed'] is True
assert 'msg' in result
diff --git a/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_devices.py b/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_devices.py
index 23148d390..f341911cf 100644
--- a/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_devices.py
+++ b/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_ome_devices.py
@@ -2,8 +2,8 @@
#
# Dell OpenManage Ansible Modules
-# Version 6.1.0
-# Copyright (C) 2021-2022 Dell Inc. or its subsidiaries. All Rights Reserved.
+# Version 9.1.0
+# Copyright (C) 2022-2024 Dell Inc. or its subsidiaries. All Rights Reserved.
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
#
@@ -456,12 +456,12 @@ class TestOmeDevices(FakeAnsibleModule):
assert result["unreachable"] is True
elif exc_type not in [HTTPError, SSLValidationError]:
mocker.patch(MODULE_PATH + 'get_dev_ids', side_effect=exc_type("exception message"))
- result = self._run_module_with_fail_json(ome_default_args)
+ result = self._run_module(ome_default_args)
assert result['failed'] is True
else:
mocker.patch(MODULE_PATH + 'get_dev_ids',
side_effect=exc_type('https://testhost.com', 400, 'http error message',
{"accept-type": "application/json"}, StringIO(json_str)))
- result = self._run_module_with_fail_json(ome_default_args)
+ result = self._run_module(ome_default_args)
assert result['failed'] is True
assert 'msg' in result
diff --git a/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_redfish_storage_volume.py b/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_redfish_storage_volume.py
index 40160edf5..b1413d4bd 100644
--- a/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_redfish_storage_volume.py
+++ b/ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_redfish_storage_volume.py
@@ -2,8 +2,8 @@
#
# Dell OpenManage Ansible Modules
-# Version 7.0.0
-# Copyright (C) 2020-2022 Dell Inc. or its subsidiaries. All Rights Reserved.
+# Version 9.1.0
+# Copyright (C) 2020-2024 Dell Inc. or its subsidiaries. All Rights Reserved.
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
#
@@ -23,6 +23,8 @@ from ansible.module_utils._text import to_text
MODULE_PATH = 'ansible_collections.dellemc.openmanage.plugins.modules.'
HTTPS_ADDRESS = 'https://testhost.com'
+REDFISH = "/redfish/v1/"
+VOLUME_URI = "/redfish/v1/Systems/System.Embedded.1/Storage/RAID.Integrated.1-1/Volumes/"
@pytest.fixture
@@ -40,6 +42,10 @@ class TestStorageVolume(FakeAnsibleModule):
def storage_volume_base_uri(self):
self.module.storage_collection_map.update({"storage_base_uri": "/redfish/v1/Systems/System.Embedded.1/Storage"})
+ @pytest.fixture
+ def greater_version(self):
+ return True
+
arg_list1 = [{"state": "present"}, {"state": "present", "volume_id": "volume_id"},
{"state": "absent", "volume_id": "volume_id"},
{"command": "initialize", "volume_id": "volume_id"},
@@ -61,6 +67,7 @@ class TestStorageVolume(FakeAnsibleModule):
redfish_connection_mock_for_storage_volume, param,
storage_volume_base_uri):
mocker.patch(MODULE_PATH + 'redfish_storage_volume.validate_inputs')
+ mocker.patch(MODULE_PATH + 'redfish_storage_volume.is_fw_ver_greater', return_value=True)
mocker.patch(MODULE_PATH + 'redfish_storage_volume.fetch_storage_resource')
mocker.patch(MODULE_PATH + 'redfish_storage_volume.configure_raid_operation',
return_value={"msg": "Successfully submitted volume task.",
@@ -95,8 +102,8 @@ class TestStorageVolume(FakeAnsibleModule):
def test_redfish_storage_volume_main_exception_handling_case(self, exc_type, mocker, redfish_default_args,
redfish_connection_mock_for_storage_volume,
redfish_response_mock):
- redfish_default_args.update({"state": "present"})
- mocker.patch(MODULE_PATH + 'redfish_storage_volume.validate_inputs')
+ redfish_default_args.update({"state": "present", "controller_id": "controller_id"})
+ mocker.patch(MODULE_PATH + 'redfish_storage_volume.is_fw_ver_greater')
redfish_response_mock.status_code = 400
redfish_response_mock.success = False
json_str = to_text(json.dumps({"data": "out"}))
@@ -150,7 +157,7 @@ class TestStorageVolume(FakeAnsibleModule):
assert message["msg"] == "Successfully submitted {0} volume task.".format(action)
@pytest.mark.parametrize("input", [{"state": "present"}, {"state": "absent"}, {"command": "initialize"}, {"command": None}])
- def test_configure_raid_operation(self, input, redfish_connection_mock_for_storage_volume, mocker):
+ def test_configure_raid_operation(self, input, redfish_connection_mock_for_storage_volume, mocker, greater_version):
f_module = self.get_module_mock(params=input)
mocker.patch(MODULE_PATH + 'redfish_storage_volume.perform_volume_create_modify',
return_value={"msg": "Successfully submitted create volume task.",
@@ -164,7 +171,7 @@ class TestStorageVolume(FakeAnsibleModule):
return_value={"msg": "Successfully submitted initialize volume task.",
"task_uri": "JobService/Jobs",
"task_id": "JID_789"})
- message = self.module.configure_raid_operation(f_module, redfish_connection_mock_for_storage_volume)
+ message = self.module.configure_raid_operation(f_module, redfish_connection_mock_for_storage_volume, greater_version)
val = list(input.values())
if val[0] == "present":
assert message["msg"] == "Successfully submitted create volume task."
@@ -257,7 +264,7 @@ class TestStorageVolume(FakeAnsibleModule):
assert exc.value.args[0] == "No changes found to be applied."
def test_perform_volume_create_modify_success_case_01(self, mocker, storage_volume_base_uri,
- redfish_connection_mock_for_storage_volume):
+ redfish_connection_mock_for_storage_volume, greater_version):
f_module = self.get_module_mock(params={"volume_id": "volume_id", "controller_id": "controller_id"})
message = {"msg": "Successfully submitted create volume task.", "task_uri": "JobService/Jobs",
"task_id": "JID_123"}
@@ -265,13 +272,13 @@ class TestStorageVolume(FakeAnsibleModule):
mocker.patch(MODULE_PATH + 'redfish_storage_volume.volume_payload', return_value={"payload": "value"})
mocker.patch(MODULE_PATH + 'redfish_storage_volume.perform_storage_volume_action', return_value=message)
mocker.patch(MODULE_PATH + 'redfish_storage_volume.check_mode_validation', return_value=None)
- message = self.module.perform_volume_create_modify(f_module, redfish_connection_mock_for_storage_volume)
+ message = self.module.perform_volume_create_modify(f_module, redfish_connection_mock_for_storage_volume, greater_version)
assert message["msg"] == "Successfully submitted create volume task."
assert message["task_id"] == "JID_123"
def test_perform_volume_create_modify_success_case_02(self, mocker, storage_volume_base_uri,
redfish_connection_mock_for_storage_volume,
- redfish_response_mock):
+ redfish_response_mock, greater_version):
f_module = self.get_module_mock(params={"volume_id": "volume_id"})
message = {"msg": "Successfully submitted modify volume task.", "task_uri": "JobService/Jobs",
"task_id": "JID_123"}
@@ -280,13 +287,13 @@ class TestStorageVolume(FakeAnsibleModule):
mocker.patch(MODULE_PATH + 'redfish_storage_volume.volume_payload', return_value={"payload": "value"})
mocker.patch(MODULE_PATH + 'redfish_storage_volume.perform_storage_volume_action', return_value=message)
mocker.patch(MODULE_PATH + 'redfish_storage_volume.check_mode_validation', return_value=None)
- message = self.module.perform_volume_create_modify(f_module, redfish_connection_mock_for_storage_volume)
+ message = self.module.perform_volume_create_modify(f_module, redfish_connection_mock_for_storage_volume, greater_version)
assert message["msg"] == "Successfully submitted modify volume task."
assert message["task_id"] == "JID_123"
def test_perform_volume_create_modify_success_case_03(self, mocker, storage_volume_base_uri,
redfish_connection_mock_for_storage_volume,
- redfish_response_mock):
+ redfish_response_mock, greater_version):
f_module = self.get_module_mock(params={"volume_id": "volume_id"})
message = {"msg": "Successfully submitted modify volume task.", "task_uri": "JobService/Jobs",
"task_id": "JID_123"}
@@ -295,13 +302,13 @@ class TestStorageVolume(FakeAnsibleModule):
mocker.patch(MODULE_PATH + 'redfish_storage_volume.volume_payload', return_value={"payload": "value"})
mocker.patch(MODULE_PATH + 'redfish_storage_volume.perform_storage_volume_action', return_value=message)
mocker.patch(MODULE_PATH + 'redfish_storage_volume.check_mode_validation', return_value=None)
- message = self.module.perform_volume_create_modify(f_module, redfish_connection_mock_for_storage_volume)
+ message = self.module.perform_volume_create_modify(f_module, redfish_connection_mock_for_storage_volume, greater_version)
assert message["msg"] == "Successfully submitted modify volume task."
assert message["task_id"] == "JID_123"
def test_perform_volume_create_modify_failure_case_01(self, mocker, storage_volume_base_uri,
redfish_connection_mock_for_storage_volume,
- redfish_response_mock):
+ redfish_response_mock, greater_version):
f_module = self.get_module_mock(params={"volume_id": "volume_id"})
message = {"msg": "Successfully submitted modify volume task.", "task_uri": "JobService/Jobs",
"task_id": "JID_123"}
@@ -311,7 +318,7 @@ class TestStorageVolume(FakeAnsibleModule):
mocker.patch(MODULE_PATH + 'redfish_storage_volume.perform_storage_volume_action', return_value=message)
mocker.patch(MODULE_PATH + 'redfish_storage_volume.check_mode_validation', return_value=None)
with pytest.raises(Exception) as exc:
- self.module.perform_volume_create_modify(f_module, redfish_connection_mock_for_storage_volume)
+ self.module.perform_volume_create_modify(f_module, redfish_connection_mock_for_storage_volume, greater_version)
assert exc.value.args[0] == "Input options are not provided for the modify volume task."
def test_perform_storage_volume_action_success_case(self, mocker, redfish_response_mock,
@@ -485,7 +492,7 @@ class TestStorageVolume(FakeAnsibleModule):
self.module.check_physical_disk_exists(f_module, drive)
assert exc.value.args[0] == "No Drive(s) are attached to the specified Controller Id: RAID.Mezzanine.1C-1."
- def test_volume_payload_case_01(self, storage_volume_base_uri):
+ def test_volume_payload_case_01(self, storage_volume_base_uri, greater_version):
param = {
"drives": ["Disk.Bay.0:Enclosure.Internal.0-0:RAID.Mezzanine.1C-1"],
"capacity_bytes": 299439751168,
@@ -505,7 +512,7 @@ class TestStorageVolume(FakeAnsibleModule):
"SpanLength": 2,
"WriteCachePolicy": "WriteThrough"}}}}
f_module = self.get_module_mock(params=param)
- payload = self.module.volume_payload(f_module)
+ payload = self.module.volume_payload(f_module, greater_version)
assert payload["Drives"][0]["@odata.id"] == "/redfish/v1/Systems/System.Embedded.1/Storage/" \
"Drives/Disk.Bay.0:Enclosure.Internal.0-0:RAID.Mezzanine.1C-1"
assert payload["RAIDType"] == "RAID0"
@@ -518,19 +525,19 @@ class TestStorageVolume(FakeAnsibleModule):
assert payload["Dell"]["DellVirtualDisk"]["ReadCachePolicy"] == "NoReadAhead"
assert payload["@Redfish.OperationApplyTime"] == "Immediate"
- def test_volume_payload_case_02(self):
+ def test_volume_payload_case_02(self, greater_version):
param = {"block_size_bytes": 512,
"raid_type": "RAID0",
"name": "VD1",
"optimum_io_size_bytes": 65536}
f_module = self.get_module_mock(params=param)
- payload = self.module.volume_payload(f_module)
+ payload = self.module.volume_payload(f_module, greater_version)
assert payload["RAIDType"] == "RAID0"
assert payload["Name"] == "VD1"
assert payload["BlockSizeBytes"] == 512
assert payload["OptimumIOSizeBytes"] == 65536
- def test_volume_payload_case_03(self, storage_volume_base_uri):
+ def test_volume_payload_case_03(self, storage_volume_base_uri, greater_version):
"""Testing encrypted value in case value is passed false"""
param = {
"drives": ["Disk.Bay.0:Enclosure.Internal.0-0:RAID.Mezzanine.1C-1"],
@@ -550,7 +557,7 @@ class TestStorageVolume(FakeAnsibleModule):
"SpanLength": 2,
"WriteCachePolicy": "WriteThrough"}}}}
f_module = self.get_module_mock(params=param)
- payload = self.module.volume_payload(f_module)
+ payload = self.module.volume_payload(f_module, greater_version)
assert payload["Drives"][0]["@odata.id"] == "/redfish/v1/Systems/System.Embedded.1/" \
"Storage/Drives/Disk.Bay.0:Enclosure.Internal.0-0:RAID.Mezzanine.1C-1"
assert payload["RAIDType"] == "RAID0"
@@ -562,7 +569,7 @@ class TestStorageVolume(FakeAnsibleModule):
assert payload["EncryptionTypes"] == ["NativeDriveEncryption"]
assert payload["Dell"]["DellVirtualDisk"]["ReadCachePolicy"] == "NoReadAhead"
- def test_volume_payload_case_04(self, storage_volume_base_uri):
+ def test_volume_payload_case_04(self, storage_volume_base_uri, greater_version):
param = {
"drives": ["Disk.Bay.0:Enclosure.Internal.0-0:RAID.Mezzanine.1C-1"],
"capacity_bytes": 299439751168,
@@ -581,7 +588,7 @@ class TestStorageVolume(FakeAnsibleModule):
"SpanLength": 2,
"WriteCachePolicy": "WriteThrough"}}}}
f_module = self.get_module_mock(params=param)
- payload = self.module.volume_payload(f_module)
+ payload = self.module.volume_payload(f_module, greater_version)
assert payload["Drives"][0]["@odata.id"] == "/redfish/v1/Systems/System.Embedded.1/Storage/" \
"Drives/Disk.Bay.0:Enclosure.Internal.0-0:RAID.Mezzanine.1C-1"
assert payload["RAIDType"] == "RAID0"
@@ -593,7 +600,7 @@ class TestStorageVolume(FakeAnsibleModule):
assert payload["EncryptionTypes"] == ["NativeDriveEncryption"]
assert payload["Dell"]["DellVirtualDisk"]["ReadCachePolicy"] == "NoReadAhead"
- def test_volume_payload_case_05(self, storage_volume_base_uri):
+ def test_volume_payload_case_05(self, storage_volume_base_uri, greater_version):
param = {
"drives": ["Disk.Bay.0:Enclosure.Internal.0-0:RAID.Mezzanine.1C-1",
"Disk.Bay.0:Enclosure.Internal.0-1:RAID.Mezzanine.1C-1",
@@ -615,7 +622,7 @@ class TestStorageVolume(FakeAnsibleModule):
"SpanLength": 2,
"WriteCachePolicy": "WriteThrough"}}}}
f_module = self.get_module_mock(params=param)
- payload = self.module.volume_payload(f_module)
+ payload = self.module.volume_payload(f_module, greater_version)
assert payload["Drives"][0]["@odata.id"] == "/redfish/v1/Systems/System.Embedded.1/Storage/" \
"Drives/Disk.Bay.0:Enclosure.Internal.0-0:RAID.Mezzanine.1C-1"
assert payload["RAIDType"] == "RAID6"
@@ -627,7 +634,7 @@ class TestStorageVolume(FakeAnsibleModule):
assert payload["EncryptionTypes"] == ["NativeDriveEncryption"]
assert payload["Dell"]["DellVirtualDisk"]["ReadCachePolicy"] == "NoReadAhead"
- def test_volume_payload_case_06(self, storage_volume_base_uri):
+ def test_volume_payload_case_06(self, storage_volume_base_uri, greater_version):
param = {
"drives": ["Disk.Bay.0:Enclosure.Internal.0-0:RAID.Mezzanine.1C-1",
"Disk.Bay.0:Enclosure.Internal.0-1:RAID.Mezzanine.1C-1",
@@ -653,7 +660,7 @@ class TestStorageVolume(FakeAnsibleModule):
"SpanLength": 2,
"WriteCachePolicy": "WriteThrough"}}}}
f_module = self.get_module_mock(params=param)
- payload = self.module.volume_payload(f_module)
+ payload = self.module.volume_payload(f_module, greater_version)
assert payload["Drives"][0]["@odata.id"] == "/redfish/v1/Systems/System.Embedded.1/Storage/" \
"Drives/Disk.Bay.0:Enclosure.Internal.0-0:RAID.Mezzanine.1C-1"
assert payload["RAIDType"] == "RAID60"
@@ -679,7 +686,7 @@ class TestStorageVolume(FakeAnsibleModule):
"@odata.id": "/redfish/v1/Systems/System.Embedded.1/Storage"
},
}
- redfish_connection_mock_for_storage_volume.root_uri = "/redfish/v1/"
+ redfish_connection_mock_for_storage_volume.root_uri = REDFISH
self.module.fetch_storage_resource(f_module, redfish_connection_mock_for_storage_volume)
assert self.module.storage_collection_map["storage_base_uri"] == "/redfish/v1/Systems/System.Embedded.1/Storage"
@@ -694,7 +701,7 @@ class TestStorageVolume(FakeAnsibleModule):
}
],
}
- redfish_connection_mock_for_storage_volume.root_uri = "/redfish/v1/"
+ redfish_connection_mock_for_storage_volume.root_uri = REDFISH
with pytest.raises(Exception) as exc:
self.module.fetch_storage_resource(f_module, redfish_connection_mock_for_storage_volume)
assert exc.value.args[0] == "Target out-of-band controller does not support storage feature using Redfish API."
@@ -707,7 +714,7 @@ class TestStorageVolume(FakeAnsibleModule):
"Members": [
],
}
- redfish_connection_mock_for_storage_volume.root_uri = "/redfish/v1/"
+ redfish_connection_mock_for_storage_volume.root_uri = REDFISH
with pytest.raises(Exception) as exc:
self.module.fetch_storage_resource(f_module, redfish_connection_mock_for_storage_volume)
assert exc.value.args[0] == "Target out-of-band controller does not support storage feature using Redfish API."
@@ -716,7 +723,7 @@ class TestStorageVolume(FakeAnsibleModule):
redfish_response_mock):
f_module = self.get_module_mock()
msg = "Target out-of-band controller does not support storage feature using Redfish API."
- redfish_connection_mock_for_storage_volume.root_uri = "/redfish/v1/"
+ redfish_connection_mock_for_storage_volume.root_uri = REDFISH
redfish_connection_mock_for_storage_volume.invoke_request.side_effect = HTTPError(HTTPS_ADDRESS, 404,
json.dumps(msg), {}, None)
with pytest.raises(Exception) as exc:
@@ -726,7 +733,7 @@ class TestStorageVolume(FakeAnsibleModule):
redfish_response_mock):
f_module = self.get_module_mock()
msg = "http error"
- redfish_connection_mock_for_storage_volume.root_uri = "/redfish/v1/"
+ redfish_connection_mock_for_storage_volume.root_uri = REDFISH
redfish_connection_mock_for_storage_volume.invoke_request.side_effect = HTTPError(HTTPS_ADDRESS, 400,
msg, {}, None)
with pytest.raises(Exception, match=msg) as exc:
@@ -736,13 +743,13 @@ class TestStorageVolume(FakeAnsibleModule):
redfish_response_mock):
f_module = self.get_module_mock()
msg = "connection error"
- redfish_connection_mock_for_storage_volume.root_uri = "/redfish/v1/"
+ redfish_connection_mock_for_storage_volume.root_uri = REDFISH
redfish_connection_mock_for_storage_volume.invoke_request.side_effect = URLError(msg)
with pytest.raises(Exception, match=msg) as exc:
self.module.fetch_storage_resource(f_module, redfish_connection_mock_for_storage_volume)
def test_check_mode_validation(self, redfish_connection_mock_for_storage_volume,
- redfish_response_mock, storage_volume_base_uri):
+ redfish_response_mock, storage_volume_base_uri, greater_version):
param = {"drives": ["Disk.Bay.0:Enclosure.Internal.0-0:RAID.Integrated.1-1"],
"capacity_bytes": 214748364800, "block_size_bytes": 512, "encryption_types": "NativeDriveEncryption",
"encrypted": False, "raid_type": "RAID0", "optimum_io_size_bytes": 65536}
@@ -751,13 +758,15 @@ class TestStorageVolume(FakeAnsibleModule):
with pytest.raises(Exception) as exc:
self.module.check_mode_validation(
f_module, redfish_connection_mock_for_storage_volume, "create",
- "/redfish/v1/Systems/System.Embedded.1/Storage/RAID.Integrated.1-1/Volumes/")
+ VOLUME_URI,
+ greater_version=True)
assert exc.value.args[0] == "Changes found to be applied."
redfish_response_mock.json_data = {"Members@odata.count": 0}
with pytest.raises(Exception) as exc:
self.module.check_mode_validation(
f_module, redfish_connection_mock_for_storage_volume, "create",
- "/redfish/v1/Systems/System.Embedded.1/Storage/RAID.Integrated.1-1/Volumes/")
+ VOLUME_URI,
+ greater_version=True)
assert exc.value.args[0] == "Changes found to be applied."
redfish_response_mock.json_data = {
"Members@odata.count": 1, "Id": "Disk.Virtual.0:RAID.Integrated.1-1",
@@ -772,18 +781,20 @@ class TestStorageVolume(FakeAnsibleModule):
with pytest.raises(Exception) as exc:
self.module.check_mode_validation(
f_module, redfish_connection_mock_for_storage_volume, "create",
- "/redfish/v1/Systems/System.Embedded.1/Storage/RAID.Integrated.1-1/Volumes/")
+ VOLUME_URI,
+ greater_version=True)
assert exc.value.args[0] == "No changes found to be applied."
def test_check_mode_validation_01(self, redfish_connection_mock_for_storage_volume,
- redfish_response_mock, storage_volume_base_uri):
+ redfish_response_mock, storage_volume_base_uri, greater_version):
param1 = {"volume_id": None, 'name': None}
f_module = self.get_module_mock(params=param1)
f_module.check_mode = False
result = self.module.check_mode_validation(f_module,
redfish_connection_mock_for_storage_volume,
"",
- "/redfish/v1/Systems/System.Embedded.1/Storage/RAID.Integrated.1-1/Volumes/")
+ VOLUME_URI,
+ greater_version=True)
assert not result
def test_check_raid_type_supported_success_case01(self, mocker, redfish_response_mock, storage_volume_base_uri,
@@ -845,29 +856,31 @@ class TestStorageVolume(FakeAnsibleModule):
def test_get_apply_time_success_case_01(self, redfish_response_mock,
redfish_connection_mock_for_storage_volume,
- storage_volume_base_uri):
+ storage_volume_base_uri, greater_version):
param = {"controller_id": "controller_id", "apply_time": "Immediate"}
f_module = self.get_module_mock(params=param)
redfish_response_mock.success = True
redfish_response_mock.json_data = {"@Redfish.OperationApplyTimeSupport": {"SupportedValues": ["Immediate"]}}
self.module.get_apply_time(f_module,
redfish_connection_mock_for_storage_volume,
- controller_id="controller_id")
+ controller_id="controller_id",
+ greater_version=True)
def test_get_apply_time_success_case_02(self, redfish_response_mock,
redfish_connection_mock_for_storage_volume,
- storage_volume_base_uri):
+ storage_volume_base_uri, greater_version):
param = {"controller_id": "controller_id"}
f_module = self.get_module_mock(params=param)
redfish_response_mock.success = True
redfish_response_mock.json_data = {"@Redfish.OperationApplyTimeSupport": {"SupportedValues": ["Immediate"]}}
self.module.get_apply_time(f_module,
redfish_connection_mock_for_storage_volume,
- controller_id="controller_id")
+ controller_id="controller_id",
+ greater_version=True)
def test_get_apply_time_supported_failure_case(self, redfish_response_mock,
redfish_connection_mock_for_storage_volume,
- storage_volume_base_uri):
+ storage_volume_base_uri, greater_version):
param = {"controller_id": "controller_id", "apply_time": "Immediate"}
f_module = self.get_module_mock(params=param)
redfish_response_mock.success = True
@@ -875,25 +888,27 @@ class TestStorageVolume(FakeAnsibleModule):
with pytest.raises(Exception) as exc:
self.module.get_apply_time(f_module,
redfish_connection_mock_for_storage_volume,
- controller_id="controller_id")
+ controller_id="controller_id",
+ greater_version=True)
assert exc.value.args[0] == "Apply time Immediate \
is not supported. The supported values are ['OnReset']. Enter the valid values and retry the operation."
def test_get_apply_time_supported_exception_case(self, redfish_response_mock,
redfish_connection_mock_for_storage_volume,
- storage_volume_base_uri):
+ storage_volume_base_uri, greater_version):
param = {"controller_id": "controller_id", "apply_time": "Immediate"}
f_module = self.get_module_mock(params=param)
redfish_connection_mock_for_storage_volume.invoke_request.side_effect = HTTPError(HTTPS_ADDRESS, 400,
'', {}, None)
with pytest.raises(HTTPError) as ex:
self.module.get_apply_time(f_module, redfish_connection_mock_for_storage_volume,
- controller_id="controller_id")
+ controller_id="controller_id",
+ greater_version=True)
def test_check_apply_time_supported_and_reboot_required_success_case01(self, mocker,
redfish_response_mock,
redfish_connection_mock_for_storage_volume,
- storage_volume_base_uri):
+ storage_volume_base_uri, greater_version):
param = {"reboot_server": True}
f_module = self.get_module_mock(params=param)
mocker.patch(MODULE_PATH + 'redfish_storage_volume.get_apply_time',
@@ -901,13 +916,14 @@ is not supported. The supported values are ['OnReset']. Enter the valid values a
apply_time = self.module.get_apply_time(f_module, redfish_connection_mock_for_storage_volume)
val = self.module.check_apply_time_supported_and_reboot_required(f_module,
redfish_connection_mock_for_storage_volume,
- controller_id="controller_id")
+ controller_id="controller_id",
+ greater_version=True)
assert val
def test_check_apply_time_supported_and_reboot_required_success_case02(self, mocker,
redfish_response_mock,
redfish_connection_mock_for_storage_volume,
- storage_volume_base_uri):
+ storage_volume_base_uri, greater_version):
param = {"reboot_server": False}
f_module = self.get_module_mock(params=param)
mocker.patch(MODULE_PATH + 'redfish_storage_volume.get_apply_time',
@@ -915,12 +931,13 @@ is not supported. The supported values are ['OnReset']. Enter the valid values a
apply_time = self.module.get_apply_time(f_module, redfish_connection_mock_for_storage_volume)
val = self.module.check_apply_time_supported_and_reboot_required(f_module,
redfish_connection_mock_for_storage_volume,
- controller_id="controller_id")
+ controller_id="controller_id",
+ greater_version=True)
assert not val
def test_check_job_tracking_required_success_case01(self, mocker, redfish_response_mock,
redfish_connection_mock_for_storage_volume,
- storage_volume_base_uri):
+ storage_volume_base_uri, greater_version):
param = {"job_wait": True}
mocker.patch(MODULE_PATH + 'redfish_storage_volume.get_apply_time',
return_value="OnReset")
@@ -929,12 +946,13 @@ is not supported. The supported values are ['OnReset']. Enter the valid values a
val = self.module.check_job_tracking_required(f_module,
redfish_connection_mock_for_storage_volume,
reboot_required=False,
- controller_id="controller_id")
+ controller_id="controller_id",
+ greater_version=True)
assert not val
def test_check_job_tracking_required_success_case02(self, mocker, redfish_response_mock,
redfish_connection_mock_for_storage_volume,
- storage_volume_base_uri):
+ storage_volume_base_uri, greater_version):
param = {"job_wait": True}
mocker.patch(MODULE_PATH + 'redfish_storage_volume.get_apply_time',
return_value="Immediate")
@@ -942,12 +960,13 @@ is not supported. The supported values are ['OnReset']. Enter the valid values a
val = self.module.check_job_tracking_required(f_module,
redfish_connection_mock_for_storage_volume,
reboot_required=True,
- controller_id="controller_id")
+ controller_id="controller_id",
+ greater_version=True)
assert val
def test_check_job_tracking_required_success_case03(self, mocker, redfish_response_mock,
redfish_connection_mock_for_storage_volume,
- storage_volume_base_uri):
+ storage_volume_base_uri, greater_version):
param = {"job_wait": False}
mocker.patch(MODULE_PATH + 'redfish_storage_volume.get_apply_time',
return_value="Immediate")
@@ -955,7 +974,8 @@ is not supported. The supported values are ['OnReset']. Enter the valid values a
val = self.module.check_job_tracking_required(f_module,
redfish_connection_mock_for_storage_volume,
reboot_required=True,
- controller_id=None)
+ controller_id=None,
+ greater_version=True)
assert not val
def test_perform_reboot_timeout_case(self, mocker, redfish_response_mock,
@@ -1129,3 +1149,32 @@ is not supported. The supported values are ['OnReset']. Enter the valid values a
with pytest.raises(Exception) as ex:
self.module.validate_negative_job_time_out(f_module)
assert ex.value.args[0] == "The parameter job_wait_timeout value cannot be negative or zero."
+
+ def test_is_fw_ver_greater(self, redfish_connection_mock_for_storage_volume, redfish_response_mock):
+ # Scenario 1: FW version is not greater
+ redfish_response_mock.json_data = {
+ '@odata.context': '/redfish/v1/$metadata#Manager.Manager',
+ '@odata.id': '/redfish/v1/Managers/iDRAC.Embedded.1',
+ '@odata.type': '#Manager.v1_3_3.Manager',
+ 'FirmwareVersion': '2.81'
+ }
+ redfish_connection_mock_for_storage_volume.root_uri = REDFISH
+ ver = self.module.is_fw_ver_greater(redfish_connection_mock_for_storage_volume)
+ if ver is True:
+ assert ver is True
+ else:
+ assert ver is False
+
+ # Scenario 1: FW version is not greater
+ redfish_response_mock.json_data = {
+ '@odata.context': '/redfish/v1/$metadata#Manager.Manager',
+ '@odata.id': '/redfish/v1/Managers/iDRAC.Embedded.1',
+ '@odata.type': '#Manager.v1_18_0.Manager',
+ 'FirmwareVersion': '7.10'
+ }
+ redfish_connection_mock_for_storage_volume.root_uri = REDFISH
+ ver = self.module.is_fw_ver_greater(redfish_connection_mock_for_storage_volume)
+ if ver is True:
+ assert ver is True
+ else:
+ assert ver is False
diff --git a/ansible_collections/dellemc/powerflex/.github/workflows/ansible-test.yml b/ansible_collections/dellemc/powerflex/.github/workflows/ansible-test.yml
index 988cba19e..058c434e2 100644
--- a/ansible_collections/dellemc/powerflex/.github/workflows/ansible-test.yml
+++ b/ansible_collections/dellemc/powerflex/.github/workflows/ansible-test.yml
@@ -114,7 +114,7 @@ jobs:
# Ansible-core 2.16 is supported only from Python 3.10 onwards
- python-version: "3.9"
ansible-version: stable-2.16
- - python-version: '3.9'
+ - python-version: "3.9"
ansible-version: devel
steps:
diff --git a/ansible_collections/dellemc/powerflex/CHANGELOG.rst b/ansible_collections/dellemc/powerflex/CHANGELOG.rst
index 6aec79d70..6224280f0 100644
--- a/ansible_collections/dellemc/powerflex/CHANGELOG.rst
+++ b/ansible_collections/dellemc/powerflex/CHANGELOG.rst
@@ -4,6 +4,13 @@ Dellemc.PowerFlex Change Logs
.. contents:: Topics
+v2.4.0
+======
+
+Minor Changes
+-------------
+
+- Added support for executing Ansible PowerFlex modules and roles on AWS environment.
v2.3.0
======
diff --git a/ansible_collections/dellemc/powerflex/FILES.json b/ansible_collections/dellemc/powerflex/FILES.json
index 9d135a9a9..ac7c75c78 100644
--- a/ansible_collections/dellemc/powerflex/FILES.json
+++ b/ansible_collections/dellemc/powerflex/FILES.json
@@ -95,7 +95,7 @@
"name": ".github/workflows/ansible-test.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8d53fd6c5db3875651823edfc1873621987d946e7dcc591ff4c17eb92963df52",
+ "chksum_sha256": "5804cd1364b07aa6ebe9d2d8b29598dd815c33471f6760da29039c40a6beadba",
"format": 1
},
{
@@ -109,7 +109,7 @@
"name": "CHANGELOG.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "45d7b5658389095f34e42e23f6ef321660ce5d2aebcb3905b688335d396616f8",
+ "chksum_sha256": "453a68b618853e7feccf984745d38fb5566aab5d3de884790f5fa85c28347993",
"format": 1
},
{
@@ -130,7 +130,7 @@
"name": "README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5af6cc66393e097bbb1f2bbb1477c602a11564ea1e9e7741d81be037c3976b8d",
+ "chksum_sha256": "7b4e0d601cddc58a5b325e2543789d29ea69f5dd362c080a16c77b0b3239a439",
"format": 1
},
{
@@ -151,7 +151,7 @@
"name": "changelogs/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "932bfd76a42809ca17a1864376a9a2a88ad857bbb4990734d8522072466dcb8f",
+ "chksum_sha256": "0a9799578efac17952b5672ebb2d3a4f9541aa524ede37aa2ffe0372c0399fd8",
"format": 1
},
{
@@ -200,21 +200,21 @@
"name": "docs/CONTRIBUTING.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "196f895d4e1d69e8831017f36ed709f8ccb7ea035dc97d71abf7213e3e9be868",
+ "chksum_sha256": "f054a45c8a3b7032987d66180a9c5cc852af935e07f633489976b8f3d2b6755f",
"format": 1
},
{
"name": "docs/INSTALLATION.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c8fa229fdcec0cb7cdaeb94cfaa429675d14add2d95f77eb4e83a2311ce21203",
+ "chksum_sha256": "782332edfc5dfac225338eec316fcb80264c8a80d64356b3849fa4d1063f4eb7",
"format": 1
},
{
"name": "docs/ISSUE_TRIAGE.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8bb1ea4a27677d9eb98f4c938fc0ed55c2e718f2abaa9bd5e1ee708e37ce2e1a",
+ "chksum_sha256": "db3b92f11a5d38287ead84d7baf84655736fd7c377e88bd3fc29f44ea46ff57e",
"format": 1
},
{
@@ -228,21 +228,21 @@
"name": "docs/MAINTAINER_GUIDE.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2e0970f922c8b97af52284ea00bf00337929c5e764c417152f49036dd23d21b4",
+ "chksum_sha256": "475e92f2e159eaa82f4666d9fd91907000790bea8417fa720d9f57328e101078",
"format": 1
},
{
"name": "docs/Release Notes.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a50b2c32c7ecc642e5794dcd0fbeef0bd4d3b0918300db814a72fd8f59cebd3c",
+ "chksum_sha256": "461b82fb097263724e23d0477036a9fbd7ed46f7a8ad14ff7bfc90e4dc6555a6",
"format": 1
},
{
"name": "docs/SECURITY.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "081098364e1203078b92bfd17db3186a6dc049cb81ea94059b09882d419a4946",
+ "chksum_sha256": "94ff66c47cb36e079846fd744ad870f627535e64326691b0421cad93feaffca2",
"format": 1
},
{
@@ -263,98 +263,98 @@
"name": "docs/modules/device.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3b2a96dab77d81e653c02750a23f0417e1c2ff24b31026dcd0f22134e8c2666e",
+ "chksum_sha256": "724112e62b9e42bf54860d5d6490df28db02f48a1470b222ddb44a7ad830ef8c",
"format": 1
},
{
"name": "docs/modules/fault_set.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3ca14b067fd1764db25799feb20a0b15c2999ae9aa9f015ef6b06c8759c34f7f",
+ "chksum_sha256": "8e5cf661716df94032a49f43d5ce8d751dea569def8ac99e26c5cfada44f4f61",
"format": 1
},
{
"name": "docs/modules/info.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a2919a7d5b06991e9113acd068ab458e05be216f3fe4344cf1691603b9c29884",
+ "chksum_sha256": "6d7cbe381aa23de4ce4acb228213a916f7ac5898ccf95105995134abf2496f3a",
"format": 1
},
{
"name": "docs/modules/mdm_cluster.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "653df53c3af3b726a58b24fc0a78d882655a35ea40283530044ec78b5e3b7023",
+ "chksum_sha256": "9ffc87301f4e67b79451450f964c6559088696c246210342c65678d3b6823eaa",
"format": 1
},
{
"name": "docs/modules/protection_domain.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "789a3c50b0037017815b0f0b911ee462f50389da17ab1d55c649d572f137c822",
+ "chksum_sha256": "a31481e55cbcd48e2de17c5f909958a48a641c9407ca97ac81159d5a732b2769",
"format": 1
},
{
"name": "docs/modules/replication_consistency_group.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d371f5f275878b1e4995902946845a7b1e947705bd432593714d50069d20611e",
+ "chksum_sha256": "a7020f015b38a75b76608685358c0d40f1994e942e23728ba563ba0ad76d92d3",
"format": 1
},
{
"name": "docs/modules/replication_pair.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0a1c6ac731f5fd9343b52a740474045f2600ab0867a73692facc619b68cba6ce",
+ "chksum_sha256": "1493e8c1d08acd7c51ee0423e0a688b3ee5801c915fdd3ecbf4c40461516fef7",
"format": 1
},
{
"name": "docs/modules/resource_group.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "12edaa4dea0ccd6f9b231b5ea10ddd5b100f4b8d23abf8e278769d7a45002c95",
+ "chksum_sha256": "d38e031f9d39e1c92241fc635abfa1cae0a8081dd77a794b03f7784d98d9eb05",
"format": 1
},
{
"name": "docs/modules/sdc.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0fbbcfcfc18c7c8ce473e614d4858887150aa689b4ba251b6f61997011c7c049",
+ "chksum_sha256": "fd486d97fd31a569846b33d38336a705e451f884a2ecd9197a90b01312e48a94",
"format": 1
},
{
"name": "docs/modules/sds.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0646d49b08b50b182c8730a5dd2ee2033e11afbeeac93f3bd45cd3e62cd702ff",
+ "chksum_sha256": "35b848c6fc91ff8af4608d360dc36a1b7a8134712eafd23b6b3c25c1cb4c1d86",
"format": 1
},
{
"name": "docs/modules/snapshot.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cf0f97870e12989f585e770efd5571b5de22a6154b73df241c3c1a700e7cb6fe",
+ "chksum_sha256": "df9b5ac178c0a16ba79a5d57a97e4dd0dfbb4e332af9864d8a1b90aa35227ff0",
"format": 1
},
{
"name": "docs/modules/snapshot_policy.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e4e54cfcca15c4e906727771c4055b8dce46dd9089daf39d694d82a688599156",
+ "chksum_sha256": "7b71c242c4cad07bd71731058093532976a02f9bc93ac658e65def287971cdf2",
"format": 1
},
{
"name": "docs/modules/storagepool.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6eda9bc51092e6737beb53c7d16b22989888802171c28786ec1459733df62b5f",
+ "chksum_sha256": "2954cea5c6999667466427d000d016ed770a0c9357dde997449b222b28ee8ea6",
"format": 1
},
{
"name": "docs/modules/volume.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "67dead1b0e93a922e10e44969da93e2aa17604fc13078d76477f5f39d4391114",
+ "chksum_sha256": "8515171be935508a35837ac2e8f58c5c3ee6f284a0f822b4d74128d2803d93f2",
"format": 1
},
{
@@ -508,7 +508,7 @@
"name": "playbooks/roles/group_vars/all",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "05ae8d3b9bba106581f346b384915000397c6a481054917b4a398fa6646fa93b",
+ "chksum_sha256": "229b0b1d3643b3427570244e84222ef016e9265ab31ef15d13ddf96329ae4e82",
"format": 1
},
{
@@ -662,7 +662,7 @@
"name": "plugins/module_utils/storage/dell/utils.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "68b549b4dbeefc2eec8974ddc00db73eaafde275a1306522d18a75eb3ae1f963",
+ "chksum_sha256": "f9cdf312c0aea0c6686bcf9d1121049e222050d11a1be6c51fcbe9dab64892e8",
"format": 1
},
{
@@ -1236,7 +1236,7 @@
"name": "roles/powerflex_config/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3118853f9e23c714f8c950127932f93c233be8b0c23cfffe7adc089e84db1128",
+ "chksum_sha256": "10f2358dbee525cf86fc27e1496b394bfaeb6ddcdce7af7accb194315861444b",
"format": 1
},
{
@@ -2062,7 +2062,7 @@
"name": "roles/powerflex_sdc/tasks/install_sdc.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "edcacc16abd2e2ddca0262e215130db8851d691f1c52ec54b641a1390180b386",
+ "chksum_sha256": "891ab050e6db8b216367d2075f31356aec6684f686e9a909c50924f70ede0e14",
"format": 1
},
{
@@ -2286,7 +2286,7 @@
"name": "roles/powerflex_sdr/tasks/add_sdr.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fc927ff472f1c3ad858e340c56d7e82c9bdfcbb44d48e5a9d03338285689f129",
+ "chksum_sha256": "0ef7dde0476382d5348a15a3f59870c4623789c200a4710eb9e7db3ce205c3c3",
"format": 1
},
{
@@ -2440,7 +2440,7 @@
"name": "roles/powerflex_sds/tasks/install_sds.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "23d5238154edc4827205019c6b649941414f6f80155d6b0273a74c6f435f3c46",
+ "chksum_sha256": "eb7b2291ea143accdb28777ab6bd4b5929ebd0f569891d9b47ce13ad8b0b9b76",
"format": 1
},
{
@@ -2629,7 +2629,7 @@
"name": "roles/powerflex_tb/tasks/install_tb3x.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "97b692e2c115a1e7b4b11f4e8de9dd5260720f683dae1259c2840eff2701fa2d",
+ "chksum_sha256": "25228bf930d81d4d45480318f52af3cf2d16c4a616d5f22f44a27918f5898c67",
"format": 1
},
{
@@ -2657,7 +2657,7 @@
"name": "roles/powerflex_tb/tasks/uninstall_tb.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8cecdc3db2cde3ad690e85e5f61e60532228c0448f8d9211a7caa502c783fa03",
+ "chksum_sha256": "b74b0f64a0f62bb36dc08e77a2684901e48c545affc69e57ffca9258a016ce2e",
"format": 1
},
{
@@ -2804,7 +2804,7 @@
"name": "roles/powerflex_webui/tasks/install_webui.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "744e4d2c5c8c207cb66f0182a8693398337b7b01187bff23bfc93187db151af8",
+ "chksum_sha256": "dcba9892f0bfb4b79ae5c229b1b6d6e5fe1ecc577ceca21a0461f8158d396572",
"format": 1
},
{
@@ -2878,6 +2878,13 @@
"format": 1
},
{
+ "name": "tests/sanity/ignore-2.18.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "51c1ac0a0e1858fc26f4e609e997a6084f49f18ee72bbed0b0e26377174ac60c",
+ "format": 1
+ },
+ {
"name": "tests/unit",
"ftype": "dir",
"chksum_type": null,
diff --git a/ansible_collections/dellemc/powerflex/MANIFEST.json b/ansible_collections/dellemc/powerflex/MANIFEST.json
index d52c820f7..9e4656fef 100644
--- a/ansible_collections/dellemc/powerflex/MANIFEST.json
+++ b/ansible_collections/dellemc/powerflex/MANIFEST.json
@@ -2,7 +2,7 @@
"collection_info": {
"namespace": "dellemc",
"name": "powerflex",
- "version": "2.3.0",
+ "version": "2.4.0",
"authors": [
"Akash Shendge <ansible.team@dell.com>",
"Arindam Datta <ansible.team@dell.com>",
@@ -24,16 +24,16 @@
],
"license_file": null,
"dependencies": {},
- "repository": "https://github.com/dell/ansible-powerflex/tree/2.3.0",
- "documentation": "https://github.com/dell/ansible-powerflex/tree/2.3.0/docs",
- "homepage": "https://github.com/dell/ansible-powerflex/tree/2.3.0",
+ "repository": "https://github.com/dell/ansible-powerflex/tree/2.4.0",
+ "documentation": "https://github.com/dell/ansible-powerflex/tree/2.4.0/docs",
+ "homepage": "https://github.com/dell/ansible-powerflex/tree/2.4.0",
"issues": "https://www.dell.com/community/Automation/bd-p/Automation"
},
"file_manifest_file": {
"name": "FILES.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c91fc714e4e70b371ad5de1191d1e8d5a6a829f347016680a0ce39e4931fceb4",
+ "chksum_sha256": "1e3524ca4d32c06f7162058bfe2e094e72e1b205ab39316a94dde334b0d59992",
"format": 1
},
"format": 1
diff --git a/ansible_collections/dellemc/powerflex/README.md b/ansible_collections/dellemc/powerflex/README.md
index 155631def..6bb8ee215 100644
--- a/ansible_collections/dellemc/powerflex/README.md
+++ b/ansible_collections/dellemc/powerflex/README.md
@@ -6,29 +6,29 @@ The capabilities of the Ansible modules are managing SDCs, volumes, snapshots, s
## Table of contents
-* [Code of conduct](https://github.com/dell/ansible-powerflex/blob/2.3.0/docs/CODE_OF_CONDUCT.md)
-* [Maintainer guide](https://github.com/dell/ansible-powerflex/blob/2.3.0/docs/MAINTAINER_GUIDE.md)
-* [Committer guide](https://github.com/dell/ansible-powerflex/blob/2.3.0/docs/COMMITTER_GUIDE.md)
-* [Contributing guide](https://github.com/dell/ansible-powerflex/blob/2.3.0/docs/CONTRIBUTING.md)
-* [Branching strategy](https://github.com/dell/ansible-powerflex/blob/2.3.0/docs/BRANCHING.md)
-* [List of adopters](https://github.com/dell/ansible-powerflex/blob/2.3.0/docs/ADOPTERS.md)
-* [Maintainers](https://github.com/dell/ansible-powerflex/blob/2.3.0/docs/MAINTAINERS.md)
-* [Support](https://github.com/dell/ansible-powerflex/blob/2.3.0/docs/SUPPORT.md)
+* [Code of conduct](https://github.com/dell/ansible-powerflex/blob/2.4.0/docs/CODE_OF_CONDUCT.md)
+* [Maintainer guide](https://github.com/dell/ansible-powerflex/blob/2.4.0/docs/MAINTAINER_GUIDE.md)
+* [Committer guide](https://github.com/dell/ansible-powerflex/blob/2.4.0/docs/COMMITTER_GUIDE.md)
+* [Contributing guide](https://github.com/dell/ansible-powerflex/blob/2.4.0/docs/CONTRIBUTING.md)
+* [Branching strategy](https://github.com/dell/ansible-powerflex/blob/2.4.0/docs/BRANCHING.md)
+* [List of adopters](https://github.com/dell/ansible-powerflex/blob/2.4.0/docs/ADOPTERS.md)
+* [Maintainers](https://github.com/dell/ansible-powerflex/blob/2.4.0/docs/MAINTAINERS.md)
+* [Support](https://github.com/dell/ansible-powerflex/blob/2.4.0/docs/SUPPORT.md)
* [License](#license)
-* [Security](https://github.com/dell/ansible-powerflex/blob/2.3.0/docs/SECURITY.md)
+* [Security](https://github.com/dell/ansible-powerflex/blob/2.4.0/docs/SECURITY.md)
* [Prerequisites](#prerequisites)
* [List of Ansible modules for Dell PowerFlex](#list-of-ansible-modules-for-dell-powerflex)
* [Installation and execution of Ansible modules for Dell PowerFlex](#installation-and-execution-of-ansible-modules-for-dell-powerflex)
* [Releasing, Maintenance and Deprecation](#releasing-maintenance-and-deprecation)
## License
-The Ansible collection for PowerFlex is released and licensed under the GPL-3.0 license. See [LICENSE](https://github.com/dell/ansible-powerflex/blob/2.3.0/LICENSE) for the full terms. Ansible modules and modules utilities that are part of the Ansible collection for PowerFlex are released and licensed under the Apache 2.0 license. See [MODULE-LICENSE](https://github.com/dell/ansible-powerflex/blob/2.3.0/MODULE-LICENSE) for the full terms.
+The Ansible collection for PowerFlex is released and licensed under the GPL-3.0 license. See [LICENSE](https://github.com/dell/ansible-powerflex/blob/2.4.0/LICENSE) for the full terms. Ansible modules and modules utilities that are part of the Ansible collection for PowerFlex are released and licensed under the Apache 2.0 license. See [MODULE-LICENSE](https://github.com/dell/ansible-powerflex/blob/2.4.0/MODULE-LICENSE) for the full terms.
## Prerequisites
| **Ansible Modules** | **PowerFlex/VxFlex OS Version** | **SDK version** | **Python version** | **Ansible** |
|---------------------|-----------------------|-------|--------------------|--------------------------|
-| v2.3.0 |3.6 <br> 4.0 <br> 4.5 | 1.10.0 | 3.9.x <br> 3.10.x <br> 3.11.x | 2.14 <br> 2.15 <br> 2.16 |
+| v2.4.0 |3.6 <br> 4.0 <br> 4.5 | 1.11.0 | 3.9.x <br> 3.10.x <br> 3.11.x | 2.14 <br> 2.15 <br> 2.16 |
* Please follow PyPowerFlex installation instructions on [PyPowerFlex Documentation](https://github.com/dell/python-powerflex)
@@ -36,22 +36,22 @@ The Ansible collection for PowerFlex is released and licensed under the GPL-3.0
The modules are written in such a way that all requests are idempotent and hence fault-tolerant. It essentially means that the result of a successfully performed request is independent of the number of times it is executed.
## List of Ansible modules for Dell PowerFlex
- * [Info module](https://github.com/dell/ansible-powerflex/blob/2.3.0/docs/modules/info.rst)
- * [Snapshot module](https://github.com/dell/ansible-powerflex/blob/2.3.0/docs/modules/snapshot.rst)
- * [SDC module](https://github.com/dell/ansible-powerflex/blob/2.3.0/docs/modules/sdc.rst)
- * [Storage pool module](https://github.com/dell/ansible-powerflex/blob/2.3.0/docs/modules/storagepool.rst)
- * [Volume module](https://github.com/dell/ansible-powerflex/blob/2.3.0/docs/modules/volume.rst)
- * [SDS module](https://github.com/dell/ansible-powerflex/blob/2.3.0/docs/modules/sds.rst)
- * [Device Module](https://github.com/dell/ansible-powerflex/blob/2.3.0/docs/modules/device.rst)
- * [Protection Domain Module](https://github.com/dell/ansible-powerflex/blob/2.3.0/docs/modules/protection_domain.rst)
- * [MDM Cluster Module](https://github.com/dell/ansible-powerflex/blob/2.3.0/docs/modules/mdm_cluster.rst)
- * [Replication Consistency Group Module](https://github.com/dell/ansible-powerflex/blob/2.3.0/docs/modules/replication_consistency_group.rst)
- * [Replication Pair Module](https://github.com/dell/ansible-powerflex/blob/2.3.0/docs/modules/replication_pair.rst)
- * [Snapshot Policy Module](https://github.com/dell/ansible-powerflex/blob/2.3.0/docs/modules/snapshot_policy.rst)
- * [Fault Sets Module](https://github.com/dell/ansible-powerflex/blob/2.3.0/docs/modules/fault_set.rst)
+ * [Info module](https://github.com/dell/ansible-powerflex/blob/2.4.0/docs/modules/info.rst)
+ * [Snapshot module](https://github.com/dell/ansible-powerflex/blob/2.4.0/docs/modules/snapshot.rst)
+ * [SDC module](https://github.com/dell/ansible-powerflex/blob/2.4.0/docs/modules/sdc.rst)
+ * [Storage pool module](https://github.com/dell/ansible-powerflex/blob/2.4.0/docs/modules/storagepool.rst)
+ * [Volume module](https://github.com/dell/ansible-powerflex/blob/2.4.0/docs/modules/volume.rst)
+ * [SDS module](https://github.com/dell/ansible-powerflex/blob/2.4.0/docs/modules/sds.rst)
+ * [Device Module](https://github.com/dell/ansible-powerflex/blob/2.4.0/docs/modules/device.rst)
+ * [Protection Domain Module](https://github.com/dell/ansible-powerflex/blob/2.4.0/docs/modules/protection_domain.rst)
+ * [MDM Cluster Module](https://github.com/dell/ansible-powerflex/blob/2.4.0/docs/modules/mdm_cluster.rst)
+ * [Replication Consistency Group Module](https://github.com/dell/ansible-powerflex/blob/2.4.0/docs/modules/replication_consistency_group.rst)
+ * [Replication Pair Module](https://github.com/dell/ansible-powerflex/blob/2.4.0/docs/modules/replication_pair.rst)
+ * [Snapshot Policy Module](https://github.com/dell/ansible-powerflex/blob/2.4.0/docs/modules/snapshot_policy.rst)
+ * [Fault Sets Module](https://github.com/dell/ansible-powerflex/blob/2.4.0/docs/modules/fault_set.rst)
## Installation and execution of Ansible modules for Dell PowerFlex
-The installation and execution steps of Ansible modules for Dell PowerFlex can be found [here](https://github.com/dell/ansible-powerflex/blob/2.3.0/docs/INSTALLATION.md).
+The installation and execution steps of Ansible modules for Dell PowerFlex can be found [here](https://github.com/dell/ansible-powerflex/blob/2.4.0/docs/INSTALLATION.md).
## Releasing, Maintenance and Deprecation
@@ -59,6 +59,6 @@ Ansible Modules for Dell Technologies PowerFlex follows [Semantic Versioning](ht
New version will be release regularly if significant changes (bug fix or new feature) are made in the collection.
-Released code versions are located on "release" branches with names of the form "release-x.y.z" where x.y.z corresponds to the version number. More information on branching strategy followed can be found [here](https://github.com/dell/ansible-powerflex/blob/2.3.0/docs/BRANCHING.md).
+Released code versions are located on "release" branches with names of the form "release-x.y.z" where x.y.z corresponds to the version number. More information on branching strategy followed can be found [here](https://github.com/dell/ansible-powerflex/blob/2.4.0/docs/BRANCHING.md).
Ansible Modules for Dell Technologies PowerFlex deprecation cycle is aligned with that of [Ansible](https://docs.ansible.com/ansible/latest/dev_guide/module_lifecycle.html). \ No newline at end of file
diff --git a/ansible_collections/dellemc/powerflex/changelogs/changelog.yaml b/ansible_collections/dellemc/powerflex/changelogs/changelog.yaml
index 2c8926ed1..a4fb3c6c8 100644
--- a/ansible_collections/dellemc/powerflex/changelogs/changelog.yaml
+++ b/ansible_collections/dellemc/powerflex/changelogs/changelog.yaml
@@ -158,3 +158,8 @@ releases:
name: resource_group
namespace: ''
release_date: '2024-03-29'
+ 2.4.0:
+ changes:
+ minor_changes:
+ - Added support for executing Ansible PowerFlex modules and roles on AWS environment.
+ release_date: '2024-04-30'
diff --git a/ansible_collections/dellemc/powerflex/docs/CONTRIBUTING.md b/ansible_collections/dellemc/powerflex/docs/CONTRIBUTING.md
index 9c45af69c..84531753a 100644
--- a/ansible_collections/dellemc/powerflex/docs/CONTRIBUTING.md
+++ b/ansible_collections/dellemc/powerflex/docs/CONTRIBUTING.md
@@ -10,7 +10,7 @@ You may obtain a copy of the License at
# How to contribute
-Become one of the contributors to this project! We thrive to build a welcoming and open community for anyone who wants to use the project or contribute to it. There are just a few small guidelines you need to follow. To help us create a safe and positive community experience for all, we require all participants to adhere to the [Code of Conduct](https://github.com/dell/ansible-powerflex/blob/2.3.0/CODE_OF_CONDUCT.md).
+Become one of the contributors to this project! We thrive to build a welcoming and open community for anyone who wants to use the project or contribute to it. There are just a few small guidelines you need to follow. To help us create a safe and positive community experience for all, we require all participants to adhere to the [Code of Conduct](https://github.com/dell/ansible-powerflex/blob/2.4.0/CODE_OF_CONDUCT.md).
## Table of contents
@@ -76,7 +76,7 @@ Triage helps ensure that issues resolve quickly by:
If you don't have the knowledge or time to code, consider helping with _issue triage_. The Ansible modules for Dell PowerFlex community will thank you for saving them time by spending some of yours.
-Read more about the ways you can [Triage issues](https://github.com/dell/ansible-powerflex/blob/2.3.0/ISSUE_TRIAGE.md).
+Read more about the ways you can [Triage issues](https://github.com/dell/ansible-powerflex/blob/2.4.0/ISSUE_TRIAGE.md).
## Your first contribution
@@ -89,7 +89,7 @@ When you're ready to contribute, it's time to create a pull request.
## Branching
-* [Branching Strategy for Ansible modules for Dell PowerFlex](https://github.com/dell/ansible-powerflex/blob/2.3.0/BRANCHING.md)
+* [Branching Strategy for Ansible modules for Dell PowerFlex](https://github.com/dell/ansible-powerflex/blob/2.4.0/BRANCHING.md)
## Signing your commits
@@ -144,7 +144,7 @@ Make sure that the title for your pull request uses the same format as the subje
### Quality gates for pull requests
-GitHub Actions are used to enforce quality gates when a pull request is created or when any commit is made to the pull request. These GitHub Actions enforce our minimum code quality requirement for any code that get checked into the repository. If any of the quality gates fail, it is expected that the contributor will look into the check log, understand the problem and resolve the issue. If help is needed, please feel free to reach out the maintainers of the project for [support](https://github.com/dell/ansible-powerflex/blob/2.3.0/SUPPORT.md).
+GitHub Actions are used to enforce quality gates when a pull request is created or when any commit is made to the pull request. These GitHub Actions enforce our minimum code quality requirement for any code that get checked into the repository. If any of the quality gates fail, it is expected that the contributor will look into the check log, understand the problem and resolve the issue. If help is needed, please feel free to reach out the maintainers of the project for [support](https://github.com/dell/ansible-powerflex/blob/2.4.0/SUPPORT.md).
#### Code sanitization
diff --git a/ansible_collections/dellemc/powerflex/docs/INSTALLATION.md b/ansible_collections/dellemc/powerflex/docs/INSTALLATION.md
index 1aed4d367..c2b8df3ba 100644
--- a/ansible_collections/dellemc/powerflex/docs/INSTALLATION.md
+++ b/ansible_collections/dellemc/powerflex/docs/INSTALLATION.md
@@ -41,7 +41,7 @@ You may obtain a copy of the License at
* Download the latest tar build from any of the available distribution channel [Ansible Galaxy](https://galaxy.ansible.com/dellemc/powerflex) /[Automation Hub](https://console.redhat.com/ansible/automation-hub/repo/published/dellemc/powerflex) and use this command to install the collection anywhere in your system:
- ansible-galaxy collection install dellemc-powerflex-2.3.0.tar.gz -p <install_path>
+ ansible-galaxy collection install dellemc-powerflex-2.4.0.tar.gz -p <install_path>
* Set the environment variable:
@@ -68,7 +68,7 @@ You may obtain a copy of the License at
## Ansible modules execution
-The Ansible server must be configured with Python library for PowerFlex to run the Ansible playbooks. The [Documents](https://github.com/dell/ansible-powerflex/blob/2.3.0/docs/) provide information on different Ansible modules along with their functions and syntax. The parameters table in the Product Guide provides information on various parameters which needs to be configured before running the modules.
+The Ansible server must be configured with Python library for PowerFlex to run the Ansible playbooks. The [Documents](https://github.com/dell/ansible-powerflex/blob/2.4.0/docs/) provide information on different Ansible modules along with their functions and syntax. The parameters table in the Product Guide provides information on various parameters which needs to be configured before running the modules.
## SSL certificate validation
diff --git a/ansible_collections/dellemc/powerflex/docs/ISSUE_TRIAGE.md b/ansible_collections/dellemc/powerflex/docs/ISSUE_TRIAGE.md
index 939aca18d..50d4665ef 100644
--- a/ansible_collections/dellemc/powerflex/docs/ISSUE_TRIAGE.md
+++ b/ansible_collections/dellemc/powerflex/docs/ISSUE_TRIAGE.md
@@ -43,8 +43,8 @@ Should explain what happened, what was expected and how to reproduce it together
- Ansible Version: [e.g. 2.14]
- Python Version [e.g. 3.11]
- - Ansible modules for Dell PowerFlex Version: [e.g. 2.3.0]
- - PowerFlex SDK version: [e.g. PyPowerFlex 1.10.0]
+ - Ansible modules for Dell PowerFlex Version: [e.g. 2.4.0]
+ - PowerFlex SDK version: [e.g. PyPowerFlex 1.11.0]
- Any other additional information...
#### Feature requests
diff --git a/ansible_collections/dellemc/powerflex/docs/MAINTAINER_GUIDE.md b/ansible_collections/dellemc/powerflex/docs/MAINTAINER_GUIDE.md
index b6efdd20b..5f982c2f9 100644
--- a/ansible_collections/dellemc/powerflex/docs/MAINTAINER_GUIDE.md
+++ b/ansible_collections/dellemc/powerflex/docs/MAINTAINER_GUIDE.md
@@ -27,7 +27,7 @@ If a candidate is approved, a Maintainer contacts the candidate to invite them t
## Maintainer policies
* Lead by example
-* Follow the [Code of Conduct](https://github.com/dell/ansible-powerflex/blob/2.3.0/CODE_OF_CONDUCT.md) and the guidelines in the [Contributing](https://github.com/dell/ansible-powerflex/blob/2.3.0/CONTRIBUTING.md) and [Committer](https://github.com/dell/ansible-powerflex/blob/2.3.0/COMMITTER_GUIDE.md) guides
+* Follow the [Code of Conduct](https://github.com/dell/ansible-powerflex/blob/2.4.0/CODE_OF_CONDUCT.md) and the guidelines in the [Contributing](https://github.com/dell/ansible-powerflex/blob/2.4.0/CONTRIBUTING.md) and [Committer](https://github.com/dell/ansible-powerflex/blob/2.4.0/COMMITTER_GUIDE.md) guides
* Promote a friendly and collaborative environment within our community
* Be actively engaged in discussions, answering questions, updating defects, and reviewing pull requests
* Criticize code, not people. Ideally, tell the contributor a better way to do what they need.
diff --git a/ansible_collections/dellemc/powerflex/docs/Release Notes.md b/ansible_collections/dellemc/powerflex/docs/Release Notes.md
index e9c5f24c2..1a2552326 100644
--- a/ansible_collections/dellemc/powerflex/docs/Release Notes.md
+++ b/ansible_collections/dellemc/powerflex/docs/Release Notes.md
@@ -1,6 +1,6 @@
**Ansible Modules for Dell Technologies PowerFlex**
=========================================
-### Release notes 2.3.0
+### Release notes 2.4.0
> © 2024 Dell Inc. or its subsidiaries. All rights reserved. Dell
> and other trademarks are trademarks of Dell Inc. or its
@@ -28,7 +28,7 @@ Table 1. Revision history
| Revision | Date | Description |
|----------|-----------------|-------------------------------------------------------------|
-| 01 | March 2024 | Current release of Ansible Modules for Dell PowerFlex 2.3.0 |
+| 01 | April 2024 | Current release of Ansible Modules for Dell PowerFlex 2.4.0 |
Product description
-------------------
@@ -44,6 +44,7 @@ each of the entities.
New features and enhancements
-----------------------------
Along with the previous release deliverables, this release supports following features -
+- 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 out all the firmware repository.
- Added support for PowerFlex ansible modules and roles on Azure.
@@ -62,11 +63,11 @@ Limitations
Distribution
------------
The software package is available for download from the [Ansible Modules
-for PowerFlex GitHub](https://github.com/dell/ansible-powerflex/tree/2.3.0) page.
+for PowerFlex GitHub](https://github.com/dell/ansible-powerflex/tree/2.4.0) page.
Documentation
-------------
-The documentation is available on [Ansible Modules for PowerFlex GitHub](https://github.com/dell/ansible-powerflex/tree/2.3.0/docs)
+The documentation is available on [Ansible Modules for PowerFlex GitHub](https://github.com/dell/ansible-powerflex/tree/2.4.0/docs)
page. It includes the following:
- README
diff --git a/ansible_collections/dellemc/powerflex/docs/SECURITY.md b/ansible_collections/dellemc/powerflex/docs/SECURITY.md
index 5ebcaa3ee..a7eab1ba4 100644
--- a/ansible_collections/dellemc/powerflex/docs/SECURITY.md
+++ b/ansible_collections/dellemc/powerflex/docs/SECURITY.md
@@ -12,7 +12,7 @@ You may obtain a copy of the License at
The Ansible modules for Dell PowerFlex repository are inspected for security vulnerabilities via blackduck scans and static code analysis.
-In addition to this, there are various security checks that get executed against a branch when a pull request is created/updated. Please refer to [pull request](https://github.com/dell/ansible-powerflex/blob/2.3.0/docs/CONTRIBUTING.md#Pull-requests) for more information.
+In addition to this, there are various security checks that get executed against a branch when a pull request is created/updated. Please refer to [pull request](https://github.com/dell/ansible-powerflex/blob/2.4.0/docs/CONTRIBUTING.md#Pull-requests) for more information.
## Reporting a vulnerability
diff --git a/ansible_collections/dellemc/powerflex/docs/modules/device.rst b/ansible_collections/dellemc/powerflex/docs/modules/device.rst
index 4fcd82854..cbeb0f813 100644
--- a/ansible_collections/dellemc/powerflex/docs/modules/device.rst
+++ b/ansible_collections/dellemc/powerflex/docs/modules/device.rst
@@ -22,7 +22,7 @@ The below requirements are needed on the host that executes this module.
- A Dell PowerFlex storage system version 3.6 or later.
- Ansible-core 2.14 or later.
-- PyPowerFlex 1.9.0.
+- PyPowerFlex 1.11.0.
- Python 3.9, 3.10 or 3.11.
diff --git a/ansible_collections/dellemc/powerflex/docs/modules/fault_set.rst b/ansible_collections/dellemc/powerflex/docs/modules/fault_set.rst
index 55b9972bc..191ab73ca 100644
--- a/ansible_collections/dellemc/powerflex/docs/modules/fault_set.rst
+++ b/ansible_collections/dellemc/powerflex/docs/modules/fault_set.rst
@@ -22,7 +22,7 @@ The below requirements are needed on the host that executes this module.
- A Dell PowerFlex storage system version 3.6 or later.
- Ansible-core 2.14 or later.
-- PyPowerFlex 1.9.0.
+- PyPowerFlex 1.11.0.
- Python 3.9, 3.10 or 3.11.
diff --git a/ansible_collections/dellemc/powerflex/docs/modules/info.rst b/ansible_collections/dellemc/powerflex/docs/modules/info.rst
index 7b933203f..fd674804f 100644
--- a/ansible_collections/dellemc/powerflex/docs/modules/info.rst
+++ b/ansible_collections/dellemc/powerflex/docs/modules/info.rst
@@ -24,7 +24,7 @@ The below requirements are needed on the host that executes this module.
- A Dell PowerFlex storage system version 3.6 or later.
- Ansible-core 2.14 or later.
-- PyPowerFlex 1.10.0.
+- PyPowerFlex 1.11.0.
- Python 3.9, 3.10 or 3.11.
diff --git a/ansible_collections/dellemc/powerflex/docs/modules/mdm_cluster.rst b/ansible_collections/dellemc/powerflex/docs/modules/mdm_cluster.rst
index babb39b6c..fa73ae5d6 100644
--- a/ansible_collections/dellemc/powerflex/docs/modules/mdm_cluster.rst
+++ b/ansible_collections/dellemc/powerflex/docs/modules/mdm_cluster.rst
@@ -24,7 +24,7 @@ The below requirements are needed on the host that executes this module.
- A Dell PowerFlex storage system version 3.6 or later.
- Ansible-core 2.14 or later.
-- PyPowerFlex 1.9.0.
+- PyPowerFlex 1.11.0.
- Python 3.9, 3.10 or 3.11.
diff --git a/ansible_collections/dellemc/powerflex/docs/modules/protection_domain.rst b/ansible_collections/dellemc/powerflex/docs/modules/protection_domain.rst
index 84c640ef4..0bd532b9a 100644
--- a/ansible_collections/dellemc/powerflex/docs/modules/protection_domain.rst
+++ b/ansible_collections/dellemc/powerflex/docs/modules/protection_domain.rst
@@ -22,7 +22,7 @@ The below requirements are needed on the host that executes this module.
- A Dell PowerFlex storage system version 3.6 or later.
- Ansible-core 2.14 or later.
-- PyPowerFlex 1.9.0.
+- PyPowerFlex 1.11.0.
- Python 3.9, 3.10 or 3.11.
diff --git a/ansible_collections/dellemc/powerflex/docs/modules/replication_consistency_group.rst b/ansible_collections/dellemc/powerflex/docs/modules/replication_consistency_group.rst
index 76d959026..d8d144077 100644
--- a/ansible_collections/dellemc/powerflex/docs/modules/replication_consistency_group.rst
+++ b/ansible_collections/dellemc/powerflex/docs/modules/replication_consistency_group.rst
@@ -22,7 +22,7 @@ The below requirements are needed on the host that executes this module.
- A Dell PowerFlex storage system version 3.6 or later.
- Ansible-core 2.14 or later.
-- PyPowerFlex 1.9.0.
+- PyPowerFlex 1.11.0.
- Python 3.9, 3.10 or 3.11.
diff --git a/ansible_collections/dellemc/powerflex/docs/modules/replication_pair.rst b/ansible_collections/dellemc/powerflex/docs/modules/replication_pair.rst
index 254a2eb1d..7c883c6fd 100644
--- a/ansible_collections/dellemc/powerflex/docs/modules/replication_pair.rst
+++ b/ansible_collections/dellemc/powerflex/docs/modules/replication_pair.rst
@@ -22,7 +22,7 @@ The below requirements are needed on the host that executes this module.
- A Dell PowerFlex storage system version 3.6 or later.
- Ansible-core 2.14 or later.
-- PyPowerFlex 1.9.0.
+- PyPowerFlex 1.11.0.
- Python 3.9, 3.10 or 3.11.
diff --git a/ansible_collections/dellemc/powerflex/docs/modules/resource_group.rst b/ansible_collections/dellemc/powerflex/docs/modules/resource_group.rst
index e8bdbde09..a72918d83 100644
--- a/ansible_collections/dellemc/powerflex/docs/modules/resource_group.rst
+++ b/ansible_collections/dellemc/powerflex/docs/modules/resource_group.rst
@@ -22,7 +22,7 @@ The below requirements are needed on the host that executes this module.
- A Dell PowerFlex storage system version 3.6 or later.
- Ansible-core 2.14 or later.
-- PyPowerFlex 1.10.0.
+- PyPowerFlex 1.11.0.
- Python 3.9, 3.10 or 3.11.
diff --git a/ansible_collections/dellemc/powerflex/docs/modules/sdc.rst b/ansible_collections/dellemc/powerflex/docs/modules/sdc.rst
index ad375ebc7..7b0871b30 100644
--- a/ansible_collections/dellemc/powerflex/docs/modules/sdc.rst
+++ b/ansible_collections/dellemc/powerflex/docs/modules/sdc.rst
@@ -22,7 +22,7 @@ The below requirements are needed on the host that executes this module.
- A Dell PowerFlex storage system version 3.6 or later.
- Ansible-core 2.14 or later.
-- PyPowerFlex 1.9.0.
+- PyPowerFlex 1.11.0.
- Python 3.9, 3.10 or 3.11.
diff --git a/ansible_collections/dellemc/powerflex/docs/modules/sds.rst b/ansible_collections/dellemc/powerflex/docs/modules/sds.rst
index f5c29516f..188fe9f9a 100644
--- a/ansible_collections/dellemc/powerflex/docs/modules/sds.rst
+++ b/ansible_collections/dellemc/powerflex/docs/modules/sds.rst
@@ -22,7 +22,7 @@ The below requirements are needed on the host that executes this module.
- A Dell PowerFlex storage system version 3.6 or later.
- Ansible-core 2.14 or later.
-- PyPowerFlex 1.9.0.
+- PyPowerFlex 1.11.0.
- Python 3.9, 3.10 or 3.11.
diff --git a/ansible_collections/dellemc/powerflex/docs/modules/snapshot.rst b/ansible_collections/dellemc/powerflex/docs/modules/snapshot.rst
index 052453ad2..e09e80069 100644
--- a/ansible_collections/dellemc/powerflex/docs/modules/snapshot.rst
+++ b/ansible_collections/dellemc/powerflex/docs/modules/snapshot.rst
@@ -22,7 +22,7 @@ The below requirements are needed on the host that executes this module.
- A Dell PowerFlex storage system version 3.6 or later.
- Ansible-core 2.14 or later.
-- PyPowerFlex 1.9.0.
+- PyPowerFlex 1.11.0.
- Python 3.9, 3.10 or 3.11.
diff --git a/ansible_collections/dellemc/powerflex/docs/modules/snapshot_policy.rst b/ansible_collections/dellemc/powerflex/docs/modules/snapshot_policy.rst
index deab7f050..dd683c921 100644
--- a/ansible_collections/dellemc/powerflex/docs/modules/snapshot_policy.rst
+++ b/ansible_collections/dellemc/powerflex/docs/modules/snapshot_policy.rst
@@ -22,7 +22,7 @@ The below requirements are needed on the host that executes this module.
- A Dell PowerFlex storage system version 3.6 or later.
- Ansible-core 2.14 or later.
-- PyPowerFlex 1.8.0.
+- PyPowerFlex 1.11.0.
- Python 3.9, 3.10 or 3.11.
diff --git a/ansible_collections/dellemc/powerflex/docs/modules/storagepool.rst b/ansible_collections/dellemc/powerflex/docs/modules/storagepool.rst
index 76d94966d..f9f3f271f 100644
--- a/ansible_collections/dellemc/powerflex/docs/modules/storagepool.rst
+++ b/ansible_collections/dellemc/powerflex/docs/modules/storagepool.rst
@@ -22,7 +22,7 @@ The below requirements are needed on the host that executes this module.
- A Dell PowerFlex storage system version 3.6 or later.
- Ansible-core 2.14 or later.
-- PyPowerFlex 1.9.0.
+- PyPowerFlex 1.11.0.
- Python 3.9, 3.10 or 3.11.
diff --git a/ansible_collections/dellemc/powerflex/docs/modules/volume.rst b/ansible_collections/dellemc/powerflex/docs/modules/volume.rst
index f3345a6d1..16dbf2b25 100644
--- a/ansible_collections/dellemc/powerflex/docs/modules/volume.rst
+++ b/ansible_collections/dellemc/powerflex/docs/modules/volume.rst
@@ -24,7 +24,7 @@ The below requirements are needed on the host that executes this module.
- A Dell PowerFlex storage system version 3.6 or later.
- Ansible-core 2.14 or later.
-- PyPowerFlex 1.9.0.
+- PyPowerFlex 1.11.0.
- Python 3.9, 3.10 or 3.11.
diff --git a/ansible_collections/dellemc/powerflex/playbooks/roles/group_vars/all b/ansible_collections/dellemc/powerflex/playbooks/roles/group_vars/all
index 1031958fc..5cec51f77 100644
--- a/ansible_collections/dellemc/powerflex/playbooks/roles/group_vars/all
+++ b/ansible_collections/dellemc/powerflex/playbooks/roles/group_vars/all
@@ -1,6 +1,7 @@
powerflex_common_file_install_location: "/var/tmp"
powerflex_common_esxi_files_location: "/tmp/"
powerflex_common_win_package_location: "C:\\Windows\\Temp"
+powerflex_gateway_disable_gpg_check: true
# powerflex sdc params
powerflex_sdc_driver_sync_repo_address: 'ftp://ftp.emc.com/'
powerflex_sdc_driver_sync_repo_user: 'QNzgdxXix'
diff --git a/ansible_collections/dellemc/powerflex/plugins/module_utils/storage/dell/utils.py b/ansible_collections/dellemc/powerflex/plugins/module_utils/storage/dell/utils.py
index e3ba11971..50f41666c 100644
--- a/ansible_collections/dellemc/powerflex/plugins/module_utils/storage/dell/utils.py
+++ b/ansible_collections/dellemc/powerflex/plugins/module_utils/storage/dell/utils.py
@@ -86,7 +86,7 @@ def ensure_required_libs(module):
module.fail_json(msg=missing_required_lib("PyPowerFlex V 1.10.0 or above"),
exception=POWERFLEX_SDK_IMP_ERR)
- min_ver = '1.10.0'
+ min_ver = '1.11.0'
try:
curr_version = pkg_resources.require("PyPowerFlex")[0].version
supported_version = (parse_version(curr_version) >= parse_version(min_ver))
diff --git a/ansible_collections/dellemc/powerflex/roles/powerflex_config/tasks/main.yml b/ansible_collections/dellemc/powerflex/roles/powerflex_config/tasks/main.yml
index f9340f0fd..67bad8013 100644
--- a/ansible_collections/dellemc/powerflex/roles/powerflex_config/tasks/main.yml
+++ b/ansible_collections/dellemc/powerflex/roles/powerflex_config/tasks/main.yml
@@ -4,6 +4,7 @@
hostname: "{{ hostname }}"
username: "{{ username }}"
password: "{{ password }}"
+ port: "{{ port }}"
validate_certs: "{{ validate_certs }}"
state: "present"
register: powerflex_config_mdm_ip_result
@@ -13,6 +14,7 @@
ansible.builtin.set_fact:
powerflex_config_array_version: "{{ powerflex_config_mdm_ip_result.mdm_cluster_details.master.versionInfo[1] }}"
powerflex_config_mdm_primary_hostname: "{{ hostvars[groups['mdm'][0]]['inventory_hostname'] }}"
+ powerflex_config_mdm_primary_ip: "{{ hostvars[groups['mdm'][0]]['ansible_host'] }}"
- name: Login to primary MDM of PowerFlex 3.6
ansible.builtin.command: scli --login --username {{ username }} --password "{{ password }}"
@@ -22,8 +24,30 @@
delegate_to: "{{ powerflex_config_mdm_primary_hostname }}"
when: powerflex_config_array_version == '3'
-- name: Login to primary MDM of PowerFlex 4.5
- ansible.builtin.command: scli --login --username {{ username }} --management_system_ip {{ hostname }} --password "{{ password }}"
+- name: Generate login certificate for PowerFlex version 4.x
+ block:
+ - name: Generate login certificate using management_system_ip
+ ansible.builtin.command: >
+ scli --generate_login_certificate --management_system_ip {{ hostname }} --username {{ username }} --password {{ password }}
+ --p12_path /opt/emc/scaleio/mdm/cfg/cli_certificate.p12 --p12_password {{ password }} --insecure
+ run_once: true
+ register: powerflex_config_generate_login_certificate
+ changed_when: powerflex_config_generate_login_certificate.rc == 0
+ delegate_to: "{{ powerflex_config_mdm_primary_hostname }}"
+ when: powerflex_config_array_version == '4'
+ rescue:
+ - name: Generate login certificate using primary_mdm_ip
+ ansible.builtin.command: >
+ scli --generate_login_certificate --management_system_ip {{ powerflex_config_mdm_primary_ip }} --username {{ username }}
+ --password {{ password }} --p12_path /opt/emc/scaleio/mdm/cfg/cli_certificate.p12 --p12_password {{ password }} --insecure
+ run_once: true
+ register: powerflex_config_generate_login_certificate_mdm_ip
+ changed_when: powerflex_config_generate_login_certificate_mdm_ip.rc == 0
+ delegate_to: "{{ powerflex_config_mdm_primary_hostname }}"
+ when: powerflex_config_array_version == '4'
+
+- name: Login to MDM for PowerFlex version 4.x
+ ansible.builtin.command: scli --login --p12_path /opt/emc/scaleio/mdm/cfg/cli_certificate.p12 --p12_password {{ password }}
run_once: true
register: powerflex_config_login_output
changed_when: powerflex_config_login_output.rc == 0
@@ -61,6 +85,7 @@
hostname: "{{ hostname }}"
username: "{{ username }}"
password: "{{ password }}"
+ port: "{{ port }}"
validate_certs: "{{ validate_certs }}"
storage_pool_name: "{{ powerflex_storage_pool_name }}"
protection_domain_name: "{{ powerflex_protection_domain_name }}"
diff --git a/ansible_collections/dellemc/powerflex/roles/powerflex_sdc/tasks/install_sdc.yml b/ansible_collections/dellemc/powerflex/roles/powerflex_sdc/tasks/install_sdc.yml
index 9b75321c3..27c82db27 100644
--- a/ansible_collections/dellemc/powerflex/roles/powerflex_sdc/tasks/install_sdc.yml
+++ b/ansible_collections/dellemc/powerflex/roles/powerflex_sdc/tasks/install_sdc.yml
@@ -4,6 +4,7 @@
hostname: "{{ hostname }}"
username: "{{ username }}"
password: "{{ password }}"
+ port: "{{ port }}"
validate_certs: "{{ validate_certs }}"
state: "present"
register: powerflex_sdc_mdm_ip_result
@@ -71,5 +72,4 @@
group: "root"
notify: restart scini
when:
- - ansible_distribution != "VMkernel"
- - " 'WindowsOS' not in ansible_distribution"
+ - ansible_distribution not in ['WindowsOS', 'SLES', 'VMkernel']
diff --git a/ansible_collections/dellemc/powerflex/roles/powerflex_sdr/tasks/add_sdr.yml b/ansible_collections/dellemc/powerflex/roles/powerflex_sdr/tasks/add_sdr.yml
index 1af345276..f7cbfa378 100644
--- a/ansible_collections/dellemc/powerflex/roles/powerflex_sdr/tasks/add_sdr.yml
+++ b/ansible_collections/dellemc/powerflex/roles/powerflex_sdr/tasks/add_sdr.yml
@@ -4,6 +4,7 @@
hostname: "{{ hostname }}"
username: "{{ username }}"
password: "{{ password }}"
+ port: "{{ port }}"
validate_certs: "{{ validate_certs }}"
state: "present"
register: powerflex_sdr_mdm_ip_result
@@ -39,17 +40,34 @@
no_log: true
when: powerflex_sdr_array_version == "3"
-- name: Login to mdm for PowerFlex version 4.x
- ansible.builtin.command: >
- scli --login --management_system_ip {{ hostname }}
- --username admin
- --password "{{ password }}"
- --approve_certificate
+- name: Generate login certificate for PowerFlex version 4.x
+ block:
+ - name: Generate login certificate using management_system_ip
+ ansible.builtin.command: >
+ scli --generate_login_certificate --management_system_ip {{ hostname }} --username {{ username }} --password {{ password }}
+ --p12_path /opt/emc/scaleio/mdm/cfg/cli_certificate.p12 --p12_password {{ password }} --insecure
+ run_once: true
+ register: powerflex_sdr_generate_login_certificate
+ changed_when: powerflex_sdr_generate_login_certificate.rc == 0
+ delegate_to: "{{ powerflex_sdr_mdm_primary_hostname }}"
+ when: powerflex_sdr_array_version != "3"
+ rescue:
+ - name: Generate login certificate using primary_mdm_ip
+ ansible.builtin.command: >
+ scli --generate_login_certificate --management_system_ip {{ powerflex_sdr_primary_mdm_ip }} --username {{ username }}
+ --password {{ password }} --p12_path /opt/emc/scaleio/mdm/cfg/cli_certificate.p12 --p12_password {{ password }} --insecure
+ run_once: true
+ register: powerflex_sdr_generate_login_certificate_mdm_ip
+ changed_when: powerflex_sdr_generate_login_certificate_mdm_ip.rc == 0
+ delegate_to: "{{ powerflex_sdr_mdm_primary_hostname }}"
+ when: powerflex_sdr_array_version != "3"
+
+- name: Login to MDM for PowerFlex version 4.x
+ ansible.builtin.command: scli --login --p12_path /opt/emc/scaleio/mdm/cfg/cli_certificate.p12 --p12_password {{ password }}
run_once: true
- register: powerflex_initial_login
+ register: powerflex_sdr_login_output
+ changed_when: powerflex_sdr_login_output.rc == 0
delegate_to: "{{ powerflex_sdr_mdm_primary_hostname }}"
- changed_when: powerflex_initial_login.rc == 0
- no_log: true
when: powerflex_sdr_array_version != "3"
- name: Output msg of previous task login to mdm
diff --git a/ansible_collections/dellemc/powerflex/roles/powerflex_sds/tasks/install_sds.yml b/ansible_collections/dellemc/powerflex/roles/powerflex_sds/tasks/install_sds.yml
index 8887ff13c..010aee075 100644
--- a/ansible_collections/dellemc/powerflex/roles/powerflex_sds/tasks/install_sds.yml
+++ b/ansible_collections/dellemc/powerflex/roles/powerflex_sds/tasks/install_sds.yml
@@ -4,6 +4,7 @@
hostname: "{{ hostname }}"
username: "{{ username }}"
password: "{{ password }}"
+ port: "{{ port }}"
validate_certs: "{{ validate_certs }}"
state: "present"
register: powerflex_sds_mdm_ip_result
@@ -17,6 +18,7 @@
ansible.builtin.set_fact:
powerflex_sds_mdm_ips: "{{ powerflex_sds_mdm_ip_result.mdm_cluster_details.mdmAddresses | join(',') }}"
powerflex_sds_primary_mdm_hostname: "{{ hostvars[groups['mdm'][0]]['inventory_hostname'] }}"
+ powerflex_sds_primary_mdm_ip: "{{ hostvars[groups['mdm'][0]]['ansible_host'] }}"
- name: Include install_powerflex.yml
ansible.builtin.include_tasks: ../../powerflex_common/tasks/install_powerflex.yml
@@ -35,8 +37,30 @@
ansible.builtin.set_fact:
disks: "{{ powerflex_sds_disks }}"
+- name: Generate login certificate for PowerFlex version 4.x
+ block:
+ - name: Generate login certificate using management_system_ip
+ ansible.builtin.command: >
+ scli --generate_login_certificate --management_system_ip {{ hostname }} --username {{ username }} --password {{ password }}
+ --p12_path /opt/emc/scaleio/mdm/cfg/cli_certificate.p12 --p12_password {{ password }} --insecure
+ run_once: true
+ register: powerflex_sds_generate_login_certificate
+ changed_when: powerflex_sds_generate_login_certificate.rc == 0
+ delegate_to: "{{ powerflex_sds_primary_mdm_hostname }}"
+ when: powerflex_sds_array_version != "3"
+ rescue:
+ - name: Generate login certificate using primary_mdm_ip
+ ansible.builtin.command: >
+ scli --generate_login_certificate --management_system_ip {{ powerflex_sds_primary_mdm_ip }} --username {{ username }}
+ --password {{ password }} --p12_path /opt/emc/scaleio/mdm/cfg/cli_certificate.p12 --p12_password {{ password }} --insecure
+ run_once: true
+ register: powerflex_sds_generate_login_certificate_mdm_ip
+ changed_when: powerflex_sds_generate_login_certificate_mdm_ip.rc == 0
+ delegate_to: "{{ powerflex_sds_primary_mdm_hostname }}"
+ when: powerflex_sds_array_version != "3"
+
- name: Login to MDM for PowerFlex version 4.x
- ansible.builtin.command: scli --login --management_system_ip {{ hostname }} --username {{ username }} --password {{ password }} --approve_certificate
+ ansible.builtin.command: scli --login --p12_path /opt/emc/scaleio/mdm/cfg/cli_certificate.p12 --p12_password {{ password }}
run_once: true
register: powerflex_sds_login_output
changed_when: powerflex_sds_login_output.rc == 0
diff --git a/ansible_collections/dellemc/powerflex/roles/powerflex_tb/tasks/install_tb3x.yml b/ansible_collections/dellemc/powerflex/roles/powerflex_tb/tasks/install_tb3x.yml
index e602351da..ebb2011cc 100644
--- a/ansible_collections/dellemc/powerflex/roles/powerflex_tb/tasks/install_tb3x.yml
+++ b/ansible_collections/dellemc/powerflex/roles/powerflex_tb/tasks/install_tb3x.yml
@@ -4,6 +4,7 @@
hostname: "{{ hostname }}"
username: "{{ username }}"
password: "{{ password }}"
+ port: "{{ port }}"
validate_certs: "{{ validate_certs }}"
state: "present"
register: powerflex_tb_mdm_ip_result
diff --git a/ansible_collections/dellemc/powerflex/roles/powerflex_tb/tasks/uninstall_tb.yml b/ansible_collections/dellemc/powerflex/roles/powerflex_tb/tasks/uninstall_tb.yml
index b08bffed8..82de6e004 100644
--- a/ansible_collections/dellemc/powerflex/roles/powerflex_tb/tasks/uninstall_tb.yml
+++ b/ansible_collections/dellemc/powerflex/roles/powerflex_tb/tasks/uninstall_tb.yml
@@ -29,9 +29,30 @@
when: powerflex_tb_mdm_cluster_mode[0] == "5_node" and powerflex_tb_scli_version[0] == '3'
# Switch from three or five to cluster one node for PowerFlex version 4.5
-- name: Login to primary MDM node of PowerFlex version 4.5
- ansible.builtin.command: >
- scli --login --management_system_ip {{ hostname }} --username {{ username }} --password {{ password }}
+- name: Generate login certificate for PowerFlex version 4.x
+ block:
+ - name: Generate login certificate using management_system_ip
+ ansible.builtin.command: >
+ scli --generate_login_certificate --management_system_ip {{ hostname }} --username {{ username }} --password {{ password }}
+ --p12_path /opt/emc/scaleio/mdm/cfg/cli_certificate.p12 --p12_password {{ password }} --insecure
+ run_once: true
+ register: powerflex_tb_generate_login_certificate
+ changed_when: powerflex_tb_generate_login_certificate.rc == 0
+ delegate_to: "{{ powerflex_tb_mdm_primary_hostname }}"
+ when: powerflex_tb_scli_version[0] >= '4'
+ rescue:
+ - name: Generate login certificate using primary_mdm_ip
+ ansible.builtin.command: >
+ scli --generate_login_certificate --management_system_ip {{ powerflex_tb_primary_ip }} --username {{ username }}
+ --password {{ password }} --p12_path /opt/emc/scaleio/mdm/cfg/cli_certificate.p12 --p12_password {{ password }} --insecure
+ run_once: true
+ register: powerflex_tb_generate_login_certificate_mdm_ip
+ changed_when: powerflex_tb_generate_login_certificate_mdm_ip.rc == 0
+ delegate_to: "{{ powerflex_tb_mdm_primary_hostname }}"
+ when: powerflex_tb_scli_version[0] >= '4'
+
+- name: Login to MDM for PowerFlex version 4.x
+ ansible.builtin.command: scli --login --p12_path /opt/emc/scaleio/mdm/cfg/cli_certificate.p12 --p12_password {{ password }}
run_once: true
register: powerflex_tb_login_output
changed_when: powerflex_tb_login_output.rc == 0
diff --git a/ansible_collections/dellemc/powerflex/roles/powerflex_webui/tasks/install_webui.yml b/ansible_collections/dellemc/powerflex/roles/powerflex_webui/tasks/install_webui.yml
index 13d58ffac..71886a075 100644
--- a/ansible_collections/dellemc/powerflex/roles/powerflex_webui/tasks/install_webui.yml
+++ b/ansible_collections/dellemc/powerflex/roles/powerflex_webui/tasks/install_webui.yml
@@ -10,6 +10,7 @@
hostname: "{{ hostname }}"
username: "{{ username }}"
password: "{{ password }}"
+ port: "{{ port }}"
validate_certs: "{{ validate_certs }}"
state: present
register: powerflex_webui_result
diff --git a/ansible_collections/dellemc/powerflex/tests/sanity/ignore-2.18.txt b/ansible_collections/dellemc/powerflex/tests/sanity/ignore-2.18.txt
new file mode 100644
index 000000000..a464e7b26
--- /dev/null
+++ b/ansible_collections/dellemc/powerflex/tests/sanity/ignore-2.18.txt
@@ -0,0 +1,14 @@
+plugins/modules/device.py validate-modules:missing-gplv3-license
+plugins/modules/sdc.py validate-modules:missing-gplv3-license
+plugins/modules/sds.py validate-modules:missing-gplv3-license
+plugins/modules/snapshot.py validate-modules:missing-gplv3-license
+plugins/modules/storagepool.py validate-modules:missing-gplv3-license
+plugins/modules/volume.py validate-modules:missing-gplv3-license
+plugins/modules/info.py validate-modules:missing-gplv3-license
+plugins/modules/protection_domain.py validate-modules:missing-gplv3-license
+plugins/modules/mdm_cluster.py validate-modules:missing-gplv3-license
+plugins/modules/replication_consistency_group.py validate-modules:missing-gplv3-license
+plugins/modules/replication_pair.py validate-modules:missing-gplv3-license
+plugins/modules/snapshot_policy.py validate-modules:missing-gplv3-license
+plugins/modules/fault_set.py validate-modules:missing-gplv3-license
+plugins/modules/resource_group.py validate-modules:missing-gplv3-license
diff --git a/ansible_collections/dellemc/unity/.github/workflows/ansible-test.yml b/ansible_collections/dellemc/unity/.github/workflows/ansible-test.yml
index 58d3ea030..ff8d181f8 100644
--- a/ansible_collections/dellemc/unity/.github/workflows/ansible-test.yml
+++ b/ansible_collections/dellemc/unity/.github/workflows/ansible-test.yml
@@ -2,9 +2,8 @@ name: CI
on:
push:
- branches: [ main ]
+ branches: [main]
pull_request:
- branches: [ main ]
schedule:
- cron: '0 3 * * *'
@@ -15,15 +14,15 @@ jobs:
strategy:
fail-fast: false
matrix:
- ansible-version: [stable-2.13]
+ ansible-version: [stable-2.14, stable-2.15, stable-2.16, devel]
steps:
- name: Check out code
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
- - name: Set up Python 3.9
- uses: actions/setup-python@v1
+ - name: Set up Python 3.11
+ uses: actions/setup-python@v4
with:
- python-version: 3.9
+ python-version: 3.11
- name: Install ansible (${{ matrix.ansible-version }})
run: pip install https://github.com/ansible/ansible/archive/${{ matrix.ansible-version }}.tar.gz --disable-pip-version-check
@@ -39,45 +38,36 @@ jobs:
###
# Unit tests (OPTIONAL)
- #
+ #
# https://docs.ansible.com/ansible/latest/dev_guide/testing_units.html
unit:
- name: Unit Tests
+ name: Unit Tests (Ⓐ${{ matrix.ansible }} with ${{ matrix.python }} python)
needs: [build]
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
- python-version: ["3.9", "3.10", "3.11"]
- ansible-version: [stable-2.13, stable-2.14, stable-2.15]
+ python: ['3.9', '3.10', '3.11']
+ ansible:
+ - stable-2.14
+ - stable-2.15
+ - stable-2.16
+ - devel
exclude:
- # Python 3.11 is supported only from ansible-core 2.14 onwards
- - python-version: "3.11"
- ansible-version: stable-2.13
+ - ansible: stable-2.16
+ python: '3.9'
+ - ansible: devel
+ python: '3.9'
steps:
- - name: Set up Python ${{ matrix.python-version }}
- uses: actions/setup-python@v1
+ - name: Perform unit testing with ansible-test
+ uses: ansible-community/ansible-test-gh-action@release/v1
with:
- python-version: ${{ matrix.python-version }}
-
- - name: Install ansible (${{ matrix.ansible-version }}) version
- run: pip install https://github.com/ansible/ansible/archive/${{ matrix.ansible-version }}.tar.gz --disable-pip-version-check
-
- - name: Download migrated collection artifacts
- uses: actions/download-artifact@v1
- with:
- name: collection
- path: .cache/collection-tarballs
-
- - name: Setup Unit test Pre-requisites
- run: |
- ansible-galaxy collection install .cache/collection-tarballs/*.tar.gz
- if [ -f /home/runner/.ansible/collections/ansible_collections/dellemc/unity/tests/requirements.txt ]; then pip install -r /home/runner/.ansible/collections/ansible_collections/dellemc/unity/tests/requirements.txt; fi
- - name: Run Unit tests using ansible-test
- run: ansible-test units -v --color --python ${{ matrix.python-version }} --coverage
- working-directory: /home/runner/.ansible/collections/ansible_collections/dellemc/unity
+ testing-type: units
+ coverage: always
+ ansible-core-version: ${{ matrix.ansible }}
+ target-python-version: ${{ matrix.python }}
###
# Sanity tests (REQUIRED)
@@ -85,40 +75,31 @@ jobs:
# https://docs.ansible.com/ansible/latest/dev_guide/testing_sanity.html
sanity:
- name: Sanity Tests
- runs-on: ubuntu-latest
+ name: Sanity (Ⓐ${{ matrix.ansible }} with ${{ matrix.python }} python)
needs: [build]
strategy:
- fail-fast: false
matrix:
- ansible-version: [stable-2.13, stable-2.14, stable-2.15]
-
+ python: ['3.9', '3.10', '3.11']
+ ansible:
+ - stable-2.14
+ - stable-2.15
+ - stable-2.16
+ - devel
+ exclude:
+ - ansible: stable-2.16
+ python: '3.9'
+ - ansible: devel
+ python: '3.9'
+ runs-on: ubuntu-latest
steps:
- - name: Set up Python 3.9
- uses: actions/setup-python@v1
- with:
- # it is just required to run that once as "ansible-test sanity" in the docker image
- # will run on all python versions it supports.
- python-version: 3.9
-
- - name: Install ansible (${{ matrix.ansible-version }}) version
- run: pip install https://github.com/ansible/ansible/archive/${{ matrix.ansible-version }}.tar.gz --disable-pip-version-check
-
- - name: Download migrated collection artifacts
- uses: actions/download-artifact@v1
+ - name: Perform sanity testing
+ uses: ansible-community/ansible-test-gh-action@release/v1
with:
- name: collection
- path: .cache/collection-tarballs
-
- - name: Setup Sanity test Pre-requisites
- run: ansible-galaxy collection install .cache/collection-tarballs/*.tar.gz
-
- # run ansible-test sanity inside of Docker.
- # The docker container has all the pinned dependencies that are required
- # and all python versions ansible supports.
- - name: Run sanity tests
- run: ansible-test sanity --docker -v --color
- working-directory: /home/runner/.ansible/collections/ansible_collections/dellemc/unity
+ ansible-core-version: ${{ matrix.ansible }}
+ target-python-version: ${{ matrix.python }}
+ testing-type: sanity
+ pull-request-change-detection: true
+ coverage: never
lint:
name: Ansible lint
@@ -128,7 +109,13 @@ jobs:
fail-fast: false
matrix:
python-version: ["3.9", "3.10", "3.11"]
- ansible-version: [stable-2.13, stable-2.14, stable-2.15]
+ ansible-version: [stable-2.14, stable-2.15, stable-2.16, devel]
+ exclude:
+ # Ansible-core 2.16 is supported only from Python 3.10 onwards
+ - python-version: "3.9"
+ ansible-version: stable-2.16
+ - python-version: '3.9'
+ ansible-version: devel
steps:
# Important: This sets up your GITHUB_WORKSPACE environment variable
@@ -138,7 +125,7 @@ jobs:
fetch-depth: 0 # needed for progressive mode to work
- name: Set up Python ${{ matrix.python-version }}
- uses: actions/setup-python@v1
+ uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
diff --git a/ansible_collections/dellemc/unity/CHANGELOG.rst b/ansible_collections/dellemc/unity/CHANGELOG.rst
index cf231b653..db0cba7c9 100644
--- a/ansible_collections/dellemc/unity/CHANGELOG.rst
+++ b/ansible_collections/dellemc/unity/CHANGELOG.rst
@@ -5,6 +5,14 @@ Dellemc.Unity Change Log
.. contents:: Topics
+v2.0.0
+======
+
+Major Changes
+-------------
+
+- Adding support for Unity Puffin v5.4.
+
v1.7.1
======
diff --git a/ansible_collections/dellemc/unity/FILES.json b/ansible_collections/dellemc/unity/FILES.json
index 24ae1cf93..41fadaabe 100644
--- a/ansible_collections/dellemc/unity/FILES.json
+++ b/ansible_collections/dellemc/unity/FILES.json
@@ -88,14 +88,14 @@
"name": ".github/workflows/ansible-test.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d648c6b2038a891200af1f6ae981928a37427a14b230e0b7b6ba030cae29a37a",
+ "chksum_sha256": "8037200617d1da54d6765489808d93bdfec01ee19dbfb2501f75472b129cfdbd",
"format": 1
},
{
"name": "CHANGELOG.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0f7304d22c291fa4120f7f01ce4db2d000c00d422fd5fb2a4b2cc771e49c43f6",
+ "chksum_sha256": "49a0181850cb1896fb91301602356f71bac6229aedbfa49e39165cf2f1c6fc16",
"format": 1
},
{
@@ -116,7 +116,7 @@
"name": "README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e9dda8bf38a7da066fc2fbfff79d3945479c31549df311b3d18229fb2e3634ed",
+ "chksum_sha256": "acc1e7f5a6d9b72232c26f27a06ecbf34043892d00be230bf3da54127e4a78f0",
"format": 1
},
{
@@ -130,14 +130,14 @@
"name": "changelogs/.plugin-cache.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4869399d305f2a50f7f0abe8a42823ecd1ca153957ed55d8b913bfda4b9dbfae",
+ "chksum_sha256": "72d1d5770f6286724c4779f5cb9834744592752ec99e45c61b0aa5999424664e",
"format": 1
},
{
"name": "changelogs/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0c48d1c2f86f067385dfee3d1c7e4355b42325860936dd4395ecde150b7d894d",
+ "chksum_sha256": "3e57f1dd9c6bdcfaf29a2929b93a16dee2ec96969ae0e2982be0e5fb41ddc3bf",
"format": 1
},
{
@@ -186,21 +186,21 @@
"name": "docs/CONTRIBUTING.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4cf604f9b0b86445fa475876590076d016fa422d2b062e4242e6c4060e3b6738",
+ "chksum_sha256": "8d2a10e85fc5c68607e5083dcb778fcb660fe6b572c8bd31afdcce5c9bc6320a",
"format": 1
},
{
"name": "docs/INSTALLATION.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eb198be51142a91a0196541ff636aabbb68f17e34de329213a41c83ad3059923",
+ "chksum_sha256": "00f59d4b14622649360cef3f83f3aee72f4a0f46b7b650ae9b4a33dc66e4515c",
"format": 1
},
{
"name": "docs/ISSUE_TRIAGE.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c5a6b4bd9e4875696f16454844a45f7b2cf95102f1960c1a25cf5e2dafff3e14",
+ "chksum_sha256": "1348c93aaa1d3836b185e4c23aa184c413a65374323f11a8fe34efcc1d8573bb",
"format": 1
},
{
@@ -214,21 +214,21 @@
"name": "docs/MAINTAINER_GUIDE.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9c3558b79f0913255880f5d2066b98dd2ca5e1e51bce28ccb3bf6cac390a23d7",
+ "chksum_sha256": "eeb2a871e29bec756dad05bab627baa40a897bfde5026b7f3d62b1af30d0972b",
"format": 1
},
{
"name": "docs/Release Notes.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3d01761e2b3a2260eeb24e776c773a89a37389156e7e4d43b9c77d24d0506afa",
+ "chksum_sha256": "9c615cde875875a36bc46715104048e6ccb4cb7b53a8bab1d61b90214d27ee71",
"format": 1
},
{
"name": "docs/SECURITY.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "11f2d0c94f6b4e19e25a683d25d7dda948f9c4c05bd23fc5e40eeaf23f84cf00",
+ "chksum_sha256": "894bd4282359004513506335feccdf9a793089a9c526715769709a066f8181b4",
"format": 1
},
{
@@ -389,7 +389,7 @@
"name": "meta/runtime.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0d8f17122fc4d22811162d2eb588ef6ffdc292b62b1df6beea44e5f5fedad1d6",
+ "chksum_sha256": "6b62595744e5b1751e79f2f3b85307187267ed35fa9e07e51565977aceea730c",
"format": 1
},
{
@@ -550,7 +550,7 @@
"name": "plugins/doc_fragments/unity.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cf04d65ed0cf78f3979951670bace9f5930ede590cafc562bc7db97ce16238d9",
+ "chksum_sha256": "97effad53be187a731145b4a9c9677761cf7ff4a0cf161c79a24978e3979efc1",
"format": 1
},
{
@@ -613,21 +613,21 @@
"name": "plugins/modules/consistencygroup.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4db39611403cf3c3acd0290d26f7de37bf680a50d51b86106b1658060f9e3af3",
+ "chksum_sha256": "fb947e18d9f16759c9d70d798da599c3ab70657b5a607a976580d6ae18fd8385",
"format": 1
},
{
"name": "plugins/modules/filesystem.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c3f3ff2fd8bb07a600a25cecaf00caa533dd8d242903cdd24dc8c25381953d63",
+ "chksum_sha256": "9ac48b349e8a531bc2afef0738027e235a88258dd1fe425776156b84b19f5829",
"format": 1
},
{
"name": "plugins/modules/filesystem_snapshot.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c9c6eb9dbf17604409652740babf1bac714c487d56f78dae4fd5dbab88037cb2",
+ "chksum_sha256": "f1b23cb93d784f389f4cb77a8cdd87d0290306c61b81a33a19f2e135824fbb72",
"format": 1
},
{
@@ -641,35 +641,35 @@
"name": "plugins/modules/info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9653d4b095f23e5b1dfd53c5485611457bffe6807643f898635d4bc41c74630e",
+ "chksum_sha256": "43357b1c6078d84c8b62f99e79acec81bcbf5cabc42075999ada0becc858c50b",
"format": 1
},
{
"name": "plugins/modules/interface.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ed2d921df52b3a54e41f5279240402f290c9f4d5a7c36c4ccb442fb0b7bc0f02",
+ "chksum_sha256": "6535e43d4c858d48866f6e3c155eddcc05c477eef51e73ae1102639431e0fb66",
"format": 1
},
{
"name": "plugins/modules/nasserver.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c9909cc77062b9e43e54f2b62b3407412cc68915b5e7bc8f0b3726bec091b381",
+ "chksum_sha256": "17bf38bb733c7246c6dc65699d835795d06697f9284ad1fb0f6b0a8ea10da085",
"format": 1
},
{
"name": "plugins/modules/nfs.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "72d5eb3a6bed5969eb5e656bdf1965bce77a790c7e0f6909019ab493dd7cb08e",
+ "chksum_sha256": "07405be0249c332c2322c1c46e51b3bb48e8217f5be338487df4cc5bf8c5e8be",
"format": 1
},
{
"name": "plugins/modules/nfsserver.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4629fa9ca28f77bd3de962fe5ee226a814153bdce75d3d8c6089210217a4c3e2",
+ "chksum_sha256": "debebbe1ef1c98c722bb679353dd7e92b3e4a34954a3a8b32dad08b0df23755d",
"format": 1
},
{
@@ -690,42 +690,42 @@
"name": "plugins/modules/snapshot.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "05f8a7b43e33347e1a71283c87f1af24a696836b52ffb271e96c601ca74d6ba4",
+ "chksum_sha256": "9a9dec578628d100f86732add0e2bd4be2405838c860204c7d1fa1e3f5c8a412",
"format": 1
},
{
"name": "plugins/modules/snapshotschedule.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6214c681ce55b24a89c8307e55d56f770665227d40929e918d906c20570a0c2d",
+ "chksum_sha256": "c9df424fece2c13b309104226532c1a93a9599d74a303edfb27b631d3fa8e800",
"format": 1
},
{
"name": "plugins/modules/storagepool.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "da90ecfe49e95add45dd9b936905d5d8e3076ad3aab4416ec9823583ad1c4cd3",
+ "chksum_sha256": "af53c0decab1b392b20629063ac56a14ca33590fca39d1874ce443891ec9d1f3",
"format": 1
},
{
"name": "plugins/modules/tree_quota.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "494320b0e7cc55515bb85d9a39e20f4c01a8dfbafae9b3855e46ec3a3c98898b",
+ "chksum_sha256": "a482d31390d4bf1e3b5b9ec0292b117d048e6358188c83bfc57436023b545b7f",
"format": 1
},
{
"name": "plugins/modules/user_quota.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bd9b8bc4f0b76cea3e13d0ccf7ec7ac1f41ab3d73609d732c07720aac1df99b1",
+ "chksum_sha256": "9050b4578577fee994f237d3a51d1741eef8d6c8491b7e9f904f830804fba3dd",
"format": 1
},
{
"name": "plugins/modules/volume.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d93a6b6a055cbe33647c1386b2e9efdc86465c286a5a79b02e0370497a8b4b2b",
+ "chksum_sha256": "fee4db702477dd8aabe83516e4db9c23d1af7fcd25fc62bf22e8577e1348da88",
"format": 1
},
{
@@ -750,13 +750,6 @@
"format": 1
},
{
- "name": "tests/requirements.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "65e6091d1c8d88a703555bd13590bb95248fb0b7376d3ed1d660e2b9d65581c8",
- "format": 1
- },
- {
"name": "tests/sanity",
"ftype": "dir",
"chksum_type": null,
@@ -764,24 +757,31 @@
"format": 1
},
{
- "name": "tests/sanity/ignore-2.13.txt",
+ "name": "tests/sanity/ignore-2.14.txt",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "8286d2f238aa5a2835bdd8a9ff38663a0e70b416a2b4a2971a54d75d76a349e7",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.14.txt",
+ "name": "tests/sanity/ignore-2.15.txt",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "8286d2f238aa5a2835bdd8a9ff38663a0e70b416a2b4a2971a54d75d76a349e7",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.15.txt",
+ "name": "tests/sanity/ignore-2.16.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8286d2f238aa5a2835bdd8a9ff38663a0e70b416a2b4a2971a54d75d76a349e7",
+ "chksum_sha256": "99746c6aa2cae22324034503cb91b384afa154aa8a5a14b89c9d0857efff1d28",
+ "format": 1
+ },
+ {
+ "name": "tests/sanity/ignore-2.17.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9df23cfd54d708a73ad687d70f1d124a54a162647ab4eccdee4ffe21a419d896",
"format": 1
},
{
@@ -993,6 +993,13 @@
"chksum_type": "sha256",
"chksum_sha256": "5bc48d2969cfaa5670ab538ba51cef532e1c3177004e2a2d6dbbd2cd7b4e7714",
"format": 1
+ },
+ {
+ "name": "tests/unit/requirements.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "65e6091d1c8d88a703555bd13590bb95248fb0b7376d3ed1d660e2b9d65581c8",
+ "format": 1
}
],
"format": 1
diff --git a/ansible_collections/dellemc/unity/MANIFEST.json b/ansible_collections/dellemc/unity/MANIFEST.json
index fbd2511d5..ad7d7f85d 100644
--- a/ansible_collections/dellemc/unity/MANIFEST.json
+++ b/ansible_collections/dellemc/unity/MANIFEST.json
@@ -2,7 +2,7 @@
"collection_info": {
"namespace": "dellemc",
"name": "unity",
- "version": "1.7.1",
+ "version": "2.0.0",
"authors": [
"Akash Shendge <ansible.team@dell.com>",
"Ambuj Dubey <ansible.team@dell.com>",
@@ -25,16 +25,16 @@
],
"license_file": null,
"dependencies": {},
- "repository": "https://github.com/dell/ansible-unity/tree/1.7.1",
- "documentation": "https://github.com/dell/ansible-unity/tree/1.7.1/docs",
- "homepage": "https://github.com/dell/ansible-unity/tree/1.7.1",
+ "repository": "https://github.com/dell/ansible-unity/tree/2.0.0",
+ "documentation": "https://github.com/dell/ansible-unity/tree/2.0.0/docs",
+ "homepage": "https://github.com/dell/ansible-unity/tree/2.0.0",
"issues": "https://www.dell.com/community/Automation/bd-p/Automation"
},
"file_manifest_file": {
"name": "FILES.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3a6859700a30b9a90ae32f32e2e99b09a7289bf793832b1657a943ecdb8604d8",
+ "chksum_sha256": "0cde7569a5266f0469d36b79b9c3e2618cf770d1da7f06b2060bc529f28f59a9",
"format": 1
},
"format": 1
diff --git a/ansible_collections/dellemc/unity/README.md b/ansible_collections/dellemc/unity/README.md
index a50754721..19d5b1757 100644
--- a/ansible_collections/dellemc/unity/README.md
+++ b/ansible_collections/dellemc/unity/README.md
@@ -6,60 +6,60 @@ The capabilities of the Ansible modules are managing consistency groups, filesys
## Table of contents
-* [Code of conduct](https://github.com/dell/ansible-unity/blob/1.7.1/docs/CODE_OF_CONDUCT.md)
-* [Maintainer guide](https://github.com/dell/ansible-unity/blob/1.7.1/docs/MAINTAINER_GUIDE.md)
-* [Committer guide](https://github.com/dell/ansible-unity/blob/1.7.1/docs/COMMITTER_GUIDE.md)
-* [Contributing guide](https://github.com/dell/ansible-unity/blob/1.7.1/docs/CONTRIBUTING.md)
-* [Branching strategy](https://github.com/dell/ansible-unity/blob/1.7.1/docs/BRANCHING.md)
-* [List of adopters](https://github.com/dell/ansible-unity/blob/1.7.1/docs/ADOPTERS.md)
-* [Maintainers](https://github.com/dell/ansible-unity/blob/1.7.1/docs/MAINTAINERS.md)
-* [Support](https://github.com/dell/ansible-unity/blob/1.7.1/docs/SUPPORT.md)
+* [Code of conduct](https://github.com/dell/ansible-unity/blob/2.0.0/docs/CODE_OF_CONDUCT.md)
+* [Maintainer guide](https://github.com/dell/ansible-unity/blob/2.0.0/docs/MAINTAINER_GUIDE.md)
+* [Committer guide](https://github.com/dell/ansible-unity/blob/2.0.0/docs/COMMITTER_GUIDE.md)
+* [Contributing guide](https://github.com/dell/ansible-unity/blob/2.0.0/docs/CONTRIBUTING.md)
+* [Branching strategy](https://github.com/dell/ansible-unity/blob/2.0.0/docs/BRANCHING.md)
+* [List of adopters](https://github.com/dell/ansible-unity/blob/2.0.0/docs/ADOPTERS.md)
+* [Maintainers](https://github.com/dell/ansible-unity/blob/2.0.0/docs/MAINTAINERS.md)
+* [Support](https://github.com/dell/ansible-unity/blob/2.0.0/docs/SUPPORT.md)
* [License](#license)
-* [Security](https://github.com/dell/ansible-unity/blob/1.7.1/docs/SECURITY.md)
+* [Security](https://github.com/dell/ansible-unity/blob/2.0.0/docs/SECURITY.md)
* [Prerequisites](#prerequisites)
* [List of Ansible modules for Dell Unity](#list-of-ansible-modules-for-dell-unity)
* [Installation and execution of Ansible modules for Dell Unity](#installation-and-execution-of-ansible-modules-for-dell-unity)
* [Releasing, Maintenance and Deprecation](#releasing-maintenance-and-deprecation)
## License
-The Ansible collection for Unity is released and licensed under the GPL-3.0 license. See [LICENSE](https://github.com/dell/ansible-unity/blob/1.7.1/LICENSE) for the full terms. Ansible modules and module utilities that are part of the Ansible collection for Unity are released and licensed under the Apache 2.0 license. See [MODULE-LICENSE](https://github.com/dell/ansible-unity/blob/1.7.1/MODULE-LICENSE) for the full terms.
+The Ansible collection for Unity is released and licensed under the GPL-3.0 license. See [LICENSE](https://github.com/dell/ansible-unity/blob/2.0.0/LICENSE) for the full terms. Ansible modules and module utilities that are part of the Ansible collection for Unity are released and licensed under the Apache 2.0 license. See [MODULE-LICENSE](https://github.com/dell/ansible-unity/blob/2.0.0/MODULE-LICENSE) for the full terms.
## Supported Platforms
- * Dell Unity Arrays version 5.1, 5.2, 5.3
+ * Dell Unity Arrays version 5.2, 5.3, 5.4
## Prerequisites
This table provides information about the software prerequisites for the Ansible Modules for Dell Unity.
| **Ansible Modules** | **Python version** | **Storops - Python SDK version** | **Ansible** |
|---------------------|--------------------|----------------------------------|-------------|
-| v1.7.1 | 3.9 <br> 3.10 <br> 3.11 | 1.2.11 | 2.13 <br> 2.14 <br> 2.15|
+| v2.0.0 | 3.9 <br> 3.10 <br> 3.11 | 1.2.11 | 2.14 <br> 2.15 <br> 2.16|
## Idempotency
The modules are written in such a way that all requests are idempotent and hence fault-tolerant. It essentially means that the result of a successfully performed request is independent of the number of times it is executed.
## List of Ansible Modules for Dell Unity
- * [Consistency group module](https://github.com/dell/ansible-unity/blob/1.7.1/docs/modules/consistencygroup.rst)
- * [Filesystem module](https://github.com/dell/ansible-unity/blob/1.7.1/docs/modules/filesystem.rst)
- * [Filesystem snapshot module](https://github.com/dell/ansible-unity/blob/1.7.1/docs/modules/filesystem_snapshot.rst)
- * [Info module](https://github.com/dell/ansible-unity/blob/1.7.1/docs/modules/info.rst)
- * [Host module](https://github.com/dell/ansible-unity/blob/1.7.1/docs/modules/host.rst)
- * [CIFS server module](https://github.com/dell/ansible-unity/blob/1.7.1/docs/modules/cifsserver.rst)
- * [NAS server module](https://github.com/dell/ansible-unity/blob/1.7.1/docs/modules/nasserver.rst)
- * [NFS server module](https://github.com/dell/ansible-unity/blob/1.7.1/docs/modules/nfsserver.rst)
- * [NFS export module](https://github.com/dell/ansible-unity/blob/1.7.1/docs/modules/nfs.rst)
- * [SMB share module](https://github.com/dell/ansible-unity/blob/1.7.1/docs/modules/smbshare.rst)
- * [Interface module](https://github.com/dell/ansible-unity/blob/1.7.1/docs/modules/interface.rst)
- * [Snapshot module](https://github.com/dell/ansible-unity/blob/1.7.1/docs/modules/snapshot.rst)
- * [Snapshot schedule module](https://github.com/dell/ansible-unity/blob/1.7.1/docs/modules/snapshotschedule.rst)
- * [Storage pool module](https://github.com/dell/ansible-unity/blob/1.7.1/docs/modules/storagepool.rst)
- * [User quota module](https://github.com/dell/ansible-unity/blob/1.7.1/docs/modules/user_quota.rste)
- * [Quota tree module ](https://github.com/dell/ansible-unity/blob/1.7.1/docs/modules/tree_quota.rst)
- * [Volume module](https://github.com/dell/ansible-unity/blob/1.7.1/docs/modules/volume.rst)
- * [Replication session module](https://github.com/dell/ansible-unity/blob/1.7.1/docs/modules/replication_session.rst)
+ * [Consistency group module](https://github.com/dell/ansible-unity/blob/2.0.0/docs/modules/consistencygroup.rst)
+ * [Filesystem module](https://github.com/dell/ansible-unity/blob/2.0.0/docs/modules/filesystem.rst)
+ * [Filesystem snapshot module](https://github.com/dell/ansible-unity/blob/2.0.0/docs/modules/filesystem_snapshot.rst)
+ * [Info module](https://github.com/dell/ansible-unity/blob/2.0.0/docs/modules/info.rst)
+ * [Host module](https://github.com/dell/ansible-unity/blob/2.0.0/docs/modules/host.rst)
+ * [CIFS server module](https://github.com/dell/ansible-unity/blob/2.0.0/docs/modules/cifsserver.rst)
+ * [NAS server module](https://github.com/dell/ansible-unity/blob/2.0.0/docs/modules/nasserver.rst)
+ * [NFS server module](https://github.com/dell/ansible-unity/blob/2.0.0/docs/modules/nfsserver.rst)
+ * [NFS export module](https://github.com/dell/ansible-unity/blob/2.0.0/docs/modules/nfs.rst)
+ * [SMB share module](https://github.com/dell/ansible-unity/blob/2.0.0/docs/modules/smbshare.rst)
+ * [Interface module](https://github.com/dell/ansible-unity/blob/2.0.0/docs/modules/interface.rst)
+ * [Snapshot module](https://github.com/dell/ansible-unity/blob/2.0.0/docs/modules/snapshot.rst)
+ * [Snapshot schedule module](https://github.com/dell/ansible-unity/blob/2.0.0/docs/modules/snapshotschedule.rst)
+ * [Storage pool module](https://github.com/dell/ansible-unity/blob/2.0.0/docs/modules/storagepool.rst)
+ * [User quota module](https://github.com/dell/ansible-unity/blob/2.0.0/docs/modules/user_quota.rste)
+ * [Quota tree module ](https://github.com/dell/ansible-unity/blob/2.0.0/docs/modules/tree_quota.rst)
+ * [Volume module](https://github.com/dell/ansible-unity/blob/2.0.0/docs/modules/volume.rst)
+ * [Replication session module](https://github.com/dell/ansible-unity/blob/2.0.0/docs/modules/replication_session.rst)
## Installation and execution of Ansible modules for Dell Unity
-The installation and execution steps of Ansible modules for Dell Unity can be found [here](https://github.com/dell/ansible-unity/blob/1.7.1/docs/INSTALLATION.md).
+The installation and execution steps of Ansible modules for Dell Unity can be found [here](https://github.com/dell/ansible-unity/blob/2.0.0/docs/INSTALLATION.md).
## Releasing, Maintenance and Deprecation
@@ -67,6 +67,6 @@ Ansible Modules for Dell Technnologies Unity follows [Semantic Versioning](https
New version will be release regularly if significant changes (bug fix or new feature) are made in the collection.
-Released code versions are located on "release" branches with names of the form "release-x.y.z" where x.y.z corresponds to the version number. More information on branching strategy followed can be found [here](https://github.com/dell/ansible-unity/blob/1.7.1/docs/BRANCHING.md).
+Released code versions are located on "release" branches with names of the form "release-x.y.z" where x.y.z corresponds to the version number. More information on branching strategy followed can be found [here](https://github.com/dell/ansible-unity/blob/2.0.0/docs/BRANCHING.md).
Ansible Modules for Dell Technologies Unity deprecation cycle is aligned with that of [Ansible](https://docs.ansible.com/ansible/latest/dev_guide/module_lifecycle.html).
diff --git a/ansible_collections/dellemc/unity/changelogs/.plugin-cache.yaml b/ansible_collections/dellemc/unity/changelogs/.plugin-cache.yaml
index 5e4c94e39..cbb44069c 100644
--- a/ansible_collections/dellemc/unity/changelogs/.plugin-cache.yaml
+++ b/ansible_collections/dellemc/unity/changelogs/.plugin-cache.yaml
@@ -106,4 +106,4 @@ plugins:
strategy: {}
test: {}
vars: {}
-version: 1.7.1
+version: 2.0.0
diff --git a/ansible_collections/dellemc/unity/changelogs/changelog.yaml b/ansible_collections/dellemc/unity/changelogs/changelog.yaml
index 6ab226ac6..719a979b6 100644
--- a/ansible_collections/dellemc/unity/changelogs/changelog.yaml
+++ b/ansible_collections/dellemc/unity/changelogs/changelog.yaml
@@ -174,3 +174,8 @@ releases:
minor_changes:
- Patch update to fix import errors in utils file.
release_date: '2023-07-31'
+ 2.0.0:
+ changes:
+ major_changes:
+ - Adding support for Unity Puffin v5.4.
+ release_date: '2024-03-29'
diff --git a/ansible_collections/dellemc/unity/docs/CONTRIBUTING.md b/ansible_collections/dellemc/unity/docs/CONTRIBUTING.md
index f26c1cd08..67199cd04 100644
--- a/ansible_collections/dellemc/unity/docs/CONTRIBUTING.md
+++ b/ansible_collections/dellemc/unity/docs/CONTRIBUTING.md
@@ -10,7 +10,7 @@ You may obtain a copy of the License at
# How to contribute
-Become one of the contributors to this project! We thrive to build a welcoming and open community for anyone who wants to use the project or contribute to it. There are just a few small guidelines you need to follow. To help us create a safe and positive community experience for all, we require all participants to adhere to the [Code of Conduct](https://github.com/dell/ansible-unity/blob/1.7.1/docs/CODE_OF_CONDUCT.md).
+Become one of the contributors to this project! We thrive to build a welcoming and open community for anyone who wants to use the project or contribute to it. There are just a few small guidelines you need to follow. To help us create a safe and positive community experience for all, we require all participants to adhere to the [Code of Conduct](https://github.com/dell/ansible-unity/blob/2.0.0/docs/CODE_OF_CONDUCT.md).
## Table of contents
@@ -76,7 +76,7 @@ Triage helps ensure that issues resolve quickly by:
If you don't have the knowledge or time to code, consider helping with _issue triage_. The Ansible modules for Dell Unity community will thank you for saving them time by spending some of yours.
-Read more about the ways you can [Triage issues](https://github.com/dell/ansible-unity/blob/1.7.1/docs/ISSUE_TRIAGE.md).
+Read more about the ways you can [Triage issues](https://github.com/dell/ansible-unity/blob/2.0.0/docs/ISSUE_TRIAGE.md).
## Your first contribution
@@ -89,7 +89,7 @@ When you're ready to contribute, it's time to create a pull request.
## Branching
-* [Branching Strategy for Ansible modules for Dell Unity](https://github.com/dell/ansible-unity/blob/1.7.1/docs/BRANCHING.md)
+* [Branching Strategy for Ansible modules for Dell Unity](https://github.com/dell/ansible-unity/blob/2.0.0/docs/BRANCHING.md)
## Signing your commits
@@ -144,7 +144,7 @@ Make sure that the title for your pull request uses the same format as the subje
### Quality gates for pull requests
-GitHub Actions are used to enforce quality gates when a pull request is created or when any commit is made to the pull request. These GitHub Actions enforce our minimum code quality requirement for any code that get checked into the repository. If any of the quality gates fail, it is expected that the contributor will look into the check log, understand the problem and resolve the issue. If help is needed, please feel free to reach out the maintainers of the project for [support](https://github.com/dell/ansible-unity/blob/1.7.1/docs/SUPPORT.md).
+GitHub Actions are used to enforce quality gates when a pull request is created or when any commit is made to the pull request. These GitHub Actions enforce our minimum code quality requirement for any code that get checked into the repository. If any of the quality gates fail, it is expected that the contributor will look into the check log, understand the problem and resolve the issue. If help is needed, please feel free to reach out the maintainers of the project for [support](https://github.com/dell/ansible-unity/blob/2.0.0/docs/SUPPORT.md).
#### Code sanitization
diff --git a/ansible_collections/dellemc/unity/docs/INSTALLATION.md b/ansible_collections/dellemc/unity/docs/INSTALLATION.md
index e361588f1..8ab4d1932 100644
--- a/ansible_collections/dellemc/unity/docs/INSTALLATION.md
+++ b/ansible_collections/dellemc/unity/docs/INSTALLATION.md
@@ -35,7 +35,7 @@ You may obtain a copy of the License at
* Download the latest tar build from any of the available distribution channel [Ansible Galaxy](https://galaxy.ansible.com/dellemc/unity) /[Automation Hub](https://console.redhat.com/ansible/automation-hub/repo/published/dellemc/unity) and use this command to install the collection anywhere in your system:
- ansible-galaxy collection install dellemc-unity-1.7.1.tar.gz -p <install_path>
+ ansible-galaxy collection install dellemc-unity-2.0.0.tar.gz -p <install_path>
* Set the environment variable:
@@ -62,7 +62,7 @@ You may obtain a copy of the License at
## Ansible modules execution
-The Ansible server must be configured with Python library for Unity to run the Ansible playbooks. The [Documents](https://github.com/dell/ansible-unity/blob/1.7.1/docs/) provide information on different Ansible modules along with their functions and syntax. The parameters table in the Product Guide provides information on various parameters which needs to be configured before running the modules.
+The Ansible server must be configured with Python library for Unity to run the Ansible playbooks. The [Documents](https://github.com/dell/ansible-unity/blob/2.0.0/docs/) provide information on different Ansible modules along with their functions and syntax. The parameters table in the Product Guide provides information on various parameters which needs to be configured before running the modules.
## SSL certificate validation
diff --git a/ansible_collections/dellemc/unity/docs/ISSUE_TRIAGE.md b/ansible_collections/dellemc/unity/docs/ISSUE_TRIAGE.md
index 2e25b256a..2d448a852 100644
--- a/ansible_collections/dellemc/unity/docs/ISSUE_TRIAGE.md
+++ b/ansible_collections/dellemc/unity/docs/ISSUE_TRIAGE.md
@@ -41,9 +41,9 @@ This section describes the various issue templates and the expected content.
Should explain what happened, what was expected and how to reproduce it together with any additional information that may help giving a complete picture of what happened such as screenshots, output and any environment related information that's applicable and/or maybe related to the reported problem:
- - Ansible Version: [e.g. 2.14]
+ - Ansible Version: [e.g. 2.16]
- Python Version [e.g. 3.10]
- - Ansible modules for Dell Unity Version: [e.g. 1.7.1]
+ - Ansible modules for Dell Unity Version: [e.g. 2.0.0]
- Unity SDK version: [e.g. Unity 1.2.11]
- Any other additional information...
diff --git a/ansible_collections/dellemc/unity/docs/MAINTAINER_GUIDE.md b/ansible_collections/dellemc/unity/docs/MAINTAINER_GUIDE.md
index a46a3d37d..c9687e1f4 100644
--- a/ansible_collections/dellemc/unity/docs/MAINTAINER_GUIDE.md
+++ b/ansible_collections/dellemc/unity/docs/MAINTAINER_GUIDE.md
@@ -27,7 +27,7 @@ If a candidate is approved, a Maintainer contacts the candidate to invite them t
## Maintainer policies
* Lead by example
-* Follow the [Code of Conduct](https://github.com/dell/ansible-unity/blob/1.7.1/docs/CODE_OF_CONDUCT.md) and the guidelines in the [Contributing](https://github.com/dell/ansible-unity/blob/1.7.1/docs/CONTRIBUTING.md) and [Committer](https://github.com/dell/ansible-unity/blob/1.7.1/docs/COMMITTER_GUIDE.md) guides
+* Follow the [Code of Conduct](https://github.com/dell/ansible-unity/blob/2.0.0/docs/CODE_OF_CONDUCT.md) and the guidelines in the [Contributing](https://github.com/dell/ansible-unity/blob/2.0.0/docs/CONTRIBUTING.md) and [Committer](https://github.com/dell/ansible-unity/blob/2.0.0/docs/COMMITTER_GUIDE.md) guides
* Promote a friendly and collaborative environment within our community
* Be actively engaged in discussions, answering questions, updating defects, and reviewing pull requests
* Criticize code, not people. Ideally, tell the contributor a better way to do what they need.
diff --git a/ansible_collections/dellemc/unity/docs/Release Notes.md b/ansible_collections/dellemc/unity/docs/Release Notes.md
index 4243667c1..966a00ffd 100644
--- a/ansible_collections/dellemc/unity/docs/Release Notes.md
+++ b/ansible_collections/dellemc/unity/docs/Release Notes.md
@@ -1,8 +1,8 @@
**Ansible Modules for Dell Technologies Unity**
=========================================
-### Release Notes 1.7.1
+### Release Notes 2.0.0
-> © 2022 Dell Inc. or its subsidiaries. All rights reserved. Dell
+> © 2024 Dell Inc. or its subsidiaries. All rights reserved. Dell
> and other trademarks are trademarks of Dell Inc. or its
> subsidiaries. Other trademarks may be trademarks of their respective
> owners.
@@ -28,7 +28,7 @@ Table 1. Revision history
| Revision | Date | Description |
|----------|----------------|---------------------------------------------------------|
-| 01 | July 2023 | Current release of Ansible Modules for Dell Unity 1.7.1 |
+| 01 | March 2024 | Current release of Ansible Modules for Dell Unity 2.0.0 |
Product Description
-------------------
@@ -38,9 +38,7 @@ New features & enhancements
---------------------------
This release has the following changes -
-- Support addition of host from the Host List to NFS Export in nfs module.
-- Support enable/disable advanced dedup in volume module.
-- Add synchronous replication support for filesystem.
+- Adding support for Unity Puffin v5.4.
Known issues
------------
@@ -71,7 +69,7 @@ for Unity GitHub](https://github.com/dell/ansible-unity/) page.
Documentation
-------------
-The documentation is available on [Ansible Modules for Unity GitHub](https://github.com/dell/ansible-unity/tree/1.7.1/docs)
+The documentation is available on [Ansible Modules for Unity GitHub](https://github.com/dell/ansible-unity/tree/2.0.0/docs)
page. It includes the following:
- README
- Release Notes (this document)
diff --git a/ansible_collections/dellemc/unity/docs/SECURITY.md b/ansible_collections/dellemc/unity/docs/SECURITY.md
index f77239eac..4388acc49 100644
--- a/ansible_collections/dellemc/unity/docs/SECURITY.md
+++ b/ansible_collections/dellemc/unity/docs/SECURITY.md
@@ -12,7 +12,7 @@ You may obtain a copy of the License at
The Ansible modules for Dell Unity repository are inspected for security vulnerabilities via blackduck scans and static code analysis.
-In addition to this, there are various security checks that get executed against a branch when a pull request is created/updated. Please refer to [pull request](https://github.com/dell/ansible-unity/blob/1.7.1/docs/CONTRIBUTING.md#Pull-requests) for more information.
+In addition to this, there are various security checks that get executed against a branch when a pull request is created/updated. Please refer to [pull request](https://github.com/dell/ansible-unity/blob/2.0.0/docs/CONTRIBUTING.md#Pull-requests) for more information.
## Reporting a vulnerability
diff --git a/ansible_collections/dellemc/unity/meta/runtime.yml b/ansible_collections/dellemc/unity/meta/runtime.yml
index 82e44c7f7..9f0f69044 100644
--- a/ansible_collections/dellemc/unity/meta/runtime.yml
+++ b/ansible_collections/dellemc/unity/meta/runtime.yml
@@ -1,79 +1,64 @@
---
-requires_ansible: ">=2.13"
+requires_ansible: ">=2.14"
plugin_routing:
modules:
dellemc_unity_info:
- redirect: dellemc.unity.info
- deprecation:
- removal_date: "2024-03-31"
- warning_text: Use info instead.
+ tombstone:
+ removal_date: "2024-03-22"
+ warning_text: Use info instead.
dellemc_unity_gatherfacts:
- redirect: dellemc.unity.info
- deprecation:
- removal_date: "2024-03-31"
- warning_text: Use info instead.
+ tombstone:
+ removal_date: "2024-03-22"
+ warning_text: Use info instead.
dellemc_unity_consistencygroup:
- redirect: dellemc.unity.consistencygroup
- deprecation:
- removal_date: "2024-03-31"
- warning_text: Use consistencygroup instead.
+ tombstone:
+ removal_date: "2024-03-22"
+ warning_text: Use consistencygroup instead.
dellemc_unity_filesystem_snapshot:
- redirect: dellemc.unity.filesystem_snapshot
- deprecation:
- removal_date: "2024-03-31"
- warning_text: Use filesystem_snapshot instead.
+ tombstone:
+ removal_date: "2024-03-22"
+ warning_text: Use filesystem_snapshot instead.
dellemc_unity_filesystem:
- redirect: dellemc.unity.filesystem
- deprecation:
- removal_date: "2024-03-31"
- warning_text: Use filesystem instead.
+ tombstone:
+ removal_date: "2024-03-22"
+ warning_text: Use filesystem instead.
dellemc_unity_host:
- redirect: dellemc.unity.host
- deprecation:
- removal_date: "2024-03-31"
- warning_text: Use host instead.
+ tombstone:
+ removal_date: "2024-03-22"
+ warning_text: Use host instead.
dellemc_unity_nasserver:
- redirect: dellemc.unity.nasserver
- deprecation:
- removal_date: "2024-03-31"
- warning_text: Use nasserver instead.
+ tombstone:
+ removal_date: "2024-03-22"
+ warning_text: Use nasserver instead.
dellemc_unity_nfs:
- redirect: dellemc.unity.nfs
- deprecation:
- removal_date: "2024-03-31"
- warning_text: Use nfs instead.
+ tombstone:
+ removal_date: "2024-03-22"
+ warning_text: Use nfs instead.
dellemc_unity_smbshare:
- redirect: dellemc.unity.smbshare
- deprecation:
- removal_date: "2024-03-31"
- warning_text: Use smbshare instead.
+ tombstone:
+ removal_date: "2024-03-22"
+ warning_text: Use smbshare instead.
dellemc_unity_snapshot:
- redirect: dellemc.unity.snapshot
- deprecation:
- removal_date: "2024-03-31"
- warning_text: Use snapshot instead.
+ tombstone:
+ removal_date: "2024-03-22"
+ warning_text: Use snapshot instead.
dellemc_unity_snapshotschedule:
- redirect: dellemc.unity.snapshotschedule
- deprecation:
- removal_date: "2024-03-31"
- warning_text: Use snapshotschedule instead.
+ tombstone:
+ removal_date: "2024-03-22"
+ warning_text: Use snapshotschedule instead.
dellemc_unity_storagepool:
- redirect: dellemc.unity.storagepool
- deprecation:
- removal_date: "2024-03-31"
- warning_text: Use storagepool instead.
+ tombstone:
+ removal_date: "2024-03-22"
+ warning_text: Use storagepool instead.
dellemc_unity_tree_quota:
- redirect: dellemc.unity.tree_quota
- deprecation:
- removal_date: "2024-03-31"
- warning_text: Use tree_quota instead.
+ tombstone:
+ removal_date: "2024-03-22"
+ warning_text: Use tree_quota instead.
dellemc_unity_user_quota:
- redirect: dellemc.unity.user_quota
- deprecation:
- removal_date: "2024-03-31"
- warning_text: Use user_quota instead.
+ tombstone:
+ removal_date: "2024-03-22"
+ warning_text: Use user_quota instead.
dellemc_unity_volume:
- redirect: dellemc.unity.volume
- deprecation:
- removal_date: "2024-03-31"
- warning_text: Use volume instead.
+ tombstone:
+ removal_date: "2024-03-22"
+ warning_text: Use volume instead.
diff --git a/ansible_collections/dellemc/unity/plugins/doc_fragments/unity.py b/ansible_collections/dellemc/unity/plugins/doc_fragments/unity.py
index 0df468567..a712a8037 100644
--- a/ansible_collections/dellemc/unity/plugins/doc_fragments/unity.py
+++ b/ansible_collections/dellemc/unity/plugins/doc_fragments/unity.py
@@ -1,4 +1,4 @@
-# Copyright: (c) 2020, Dell Technologies.
+# Copyright: (c) 2024, Dell Technologies.
# Apache License version 2.0 (see MODULE-LICENSE or http://www.apache.org/licenses/LICENSE-2.0.txt)
from __future__ import absolute_import, division, print_function
@@ -44,7 +44,7 @@ class ModuleDocFragment(object):
default: 443
requirements:
- A Dell Unity Storage device version 5.1 or later.
- - Ansible-core 2.13 or later.
+ - Ansible-core 2.14 or later.
- Python 3.9, 3.10 or 3.11.
- Storops Python SDK 1.2.11.
notes:
diff --git a/ansible_collections/dellemc/unity/plugins/modules/consistencygroup.py b/ansible_collections/dellemc/unity/plugins/modules/consistencygroup.py
index e0d6a6c06..c5c4b5599 100644
--- a/ansible_collections/dellemc/unity/plugins/modules/consistencygroup.py
+++ b/ansible_collections/dellemc/unity/plugins/modules/consistencygroup.py
@@ -267,8 +267,8 @@ EXAMPLES = r"""
validate_certs: "{{validate_certs}}"
cg_id: "{{cg_id}}"
hosts:
- - host_name: "10.226.198.248"
- - host_id: "Host_511"
+ - host_name: "10.226.198.248"
+ - host_id: "Host_511"
mapping_state: "mapped"
state: "present"
@@ -280,8 +280,8 @@ EXAMPLES = r"""
validate_certs: "{{validate_certs}}"
cg_id: "{{cg_id}}"
hosts:
- - host_id: "Host_511"
- - host_name: "10.226.198.248"
+ - host_id: "Host_511"
+ - host_name: "10.226.198.248"
mapping_state: "unmapped"
state: "present"
@@ -293,8 +293,8 @@ EXAMPLES = r"""
validate_certs: "{{validate_certs}}"
cg_name: "{{new_cg_name}}"
volumes:
- - vol_name: "Ansible_Test-3"
- - vol_id: "sv_1744"
+ - vol_name: "Ansible_Test-3"
+ - vol_id: "sv_1744"
vol_state: "{{vol_state_absent}}"
state: "present"
@@ -315,16 +315,16 @@ EXAMPLES = r"""
validate_certs: "{{validate_certs}}"
cg_id: "cg_id_1"
replication_params:
- destination_cg_name: "destination_cg_1"
- replication_mode: "asynchronous"
- rpo: 60
- replication_type: "remote"
- remote_system:
- remote_system_host: '10.1.2.3'
- remote_system_verifycert: false
- remote_system_username: 'username'
- remote_system_password: 'password'
- destination_pool_name: "pool_test_1"
+ destination_cg_name: "destination_cg_1"
+ replication_mode: "asynchronous"
+ rpo: 60
+ replication_type: "remote"
+ remote_system:
+ remote_system_host: '10.1.2.3'
+ remote_system_verifycert: false
+ remote_system_username: 'username'
+ remote_system_password: 'password'
+ destination_pool_name: "pool_test_1"
replication_state: "enable"
state: "present"
diff --git a/ansible_collections/dellemc/unity/plugins/modules/filesystem.py b/ansible_collections/dellemc/unity/plugins/modules/filesystem.py
index 95cffeec6..d8057ac4e 100644
--- a/ansible_collections/dellemc/unity/plugins/modules/filesystem.py
+++ b/ansible_collections/dellemc/unity/plugins/modules/filesystem.py
@@ -327,10 +327,10 @@ EXAMPLES = r"""
pool_name: "pool_1"
size: 5
quota_config:
- grace_period: 8
- grace_period_unit: "days"
- default_soft_limit: 10
- is_user_quota_enabled: false
+ grace_period: 8
+ grace_period_unit: "days"
+ default_soft_limit: 10
+ is_user_quota_enabled: false
state: "present"
- name: Expand FileSystem size
@@ -451,7 +451,7 @@ EXAMPLES = r"""
validate_certs: "{{validate_certs}}"
filesystem_id: "rs_405"
replication_params:
- replication_name: "test_replication"
+ replication_name: "test_replication"
replication_state: "disable"
state: "present"
"""
diff --git a/ansible_collections/dellemc/unity/plugins/modules/filesystem_snapshot.py b/ansible_collections/dellemc/unity/plugins/modules/filesystem_snapshot.py
index a82fbe89b..93258c84b 100644
--- a/ansible_collections/dellemc/unity/plugins/modules/filesystem_snapshot.py
+++ b/ansible_collections/dellemc/unity/plugins/modules/filesystem_snapshot.py
@@ -112,91 +112,91 @@ notes:
'''
EXAMPLES = r'''
- - name: Create Filesystem Snapshot
- dellemc.unity.filesystem_snapshot:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- snapshot_name: "ansible_test_FS_snap"
- filesystem_name: "ansible_test_FS"
- nas_server_name: "lglad069"
- description: "Created using playbook"
- auto_delete: true
- fs_access_type: "Protocol"
- state: "present"
-
- - name: Create Filesystem Snapshot with expiry time
- dellemc.unity.filesystem_snapshot:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- snapshot_name: "ansible_test_FS_snap_1"
- filesystem_name: "ansible_test_FS_1"
- nas_server_name: "lglad069"
- description: "Created using playbook"
- expiry_time: "04/15/2021 2:30"
- fs_access_type: "Protocol"
- state: "present"
-
- - name: Get Filesystem Snapshot Details using Name
- dellemc.unity.filesystem_snapshot:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- snapshot_name: "ansible_test_FS_snap"
- state: "present"
-
- - name: Get Filesystem Snapshot Details using ID
- dellemc.unity.filesystem_snapshot:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- snapshot_id: "10008000403"
- state: "present"
-
- - name: Update Filesystem Snapshot attributes
- dellemc.unity.filesystem_snapshot:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- snapshot_name: "ansible_test_FS_snap"
- description: "Description updated"
- auto_delete: false
- expiry_time: "04/15/2021 5:30"
- state: "present"
-
- - name: Update Filesystem Snapshot attributes using ID
- dellemc.unity.filesystem_snapshot:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- snapshot_id: "10008000403"
- expiry_time: "04/18/2021 8:30"
- state: "present"
-
- - name: Delete Filesystem Snapshot using Name
- dellemc.unity.filesystem_snapshot:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- snapshot_name: "ansible_test_FS_snap"
- state: "absent"
-
- - name: Delete Filesystem Snapshot using ID
- dellemc.unity.filesystem_snapshot:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- snapshot_id: "10008000403"
- state: "absent"
+- name: Create Filesystem Snapshot
+ dellemc.unity.filesystem_snapshot:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ snapshot_name: "ansible_test_FS_snap"
+ filesystem_name: "ansible_test_FS"
+ nas_server_name: "lglad069"
+ description: "Created using playbook"
+ auto_delete: true
+ fs_access_type: "Protocol"
+ state: "present"
+
+- name: Create Filesystem Snapshot with expiry time
+ dellemc.unity.filesystem_snapshot:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ snapshot_name: "ansible_test_FS_snap_1"
+ filesystem_name: "ansible_test_FS_1"
+ nas_server_name: "lglad069"
+ description: "Created using playbook"
+ expiry_time: "04/15/2021 2:30"
+ fs_access_type: "Protocol"
+ state: "present"
+
+- name: Get Filesystem Snapshot Details using Name
+ dellemc.unity.filesystem_snapshot:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ snapshot_name: "ansible_test_FS_snap"
+ state: "present"
+
+- name: Get Filesystem Snapshot Details using ID
+ dellemc.unity.filesystem_snapshot:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ snapshot_id: "10008000403"
+ state: "present"
+
+- name: Update Filesystem Snapshot attributes
+ dellemc.unity.filesystem_snapshot:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ snapshot_name: "ansible_test_FS_snap"
+ description: "Description updated"
+ auto_delete: false
+ expiry_time: "04/15/2021 5:30"
+ state: "present"
+
+- name: Update Filesystem Snapshot attributes using ID
+ dellemc.unity.filesystem_snapshot:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ snapshot_id: "10008000403"
+ expiry_time: "04/18/2021 8:30"
+ state: "present"
+
+- name: Delete Filesystem Snapshot using Name
+ dellemc.unity.filesystem_snapshot:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ snapshot_name: "ansible_test_FS_snap"
+ state: "absent"
+
+- name: Delete Filesystem Snapshot using ID
+ dellemc.unity.filesystem_snapshot:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ snapshot_id: "10008000403"
+ state: "absent"
'''
RETURN = r'''
diff --git a/ansible_collections/dellemc/unity/plugins/modules/info.py b/ansible_collections/dellemc/unity/plugins/modules/info.py
index 641074286..b924d674a 100644
--- a/ansible_collections/dellemc/unity/plugins/modules/info.py
+++ b/ansible_collections/dellemc/unity/plugins/modules/info.py
@@ -64,220 +64,220 @@ notes:
'''
EXAMPLES = r'''
- - name: Get detailed list of Unity entities
- dellemc.unity.info:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- gather_subset:
- - host
- - fc_initiator
- - iscsi_initiator
- - cg
- - storage_pool
- - vol
- - snapshot_schedule
- - nas_server
- - file_system
- - snapshot
- - nfs_export
- - smb_share
- - user_quota
- - tree_quota
- - disk_group
- - nfs_server
- - cifs_server
- - ethernet_port
- - file_interface
- - replication_session
-
- - name: Get information of Unity array
- dellemc.unity.info:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
-
- - name: Get list of hosts on Unity array
- dellemc.unity.info:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- gather_subset:
- - host
-
- - name: Get list of FC initiators on Unity array
- dellemc.unity.info:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- gather_subset:
- - fc_initiator
-
- - name: Get list of ISCSI initiators on Unity array
- dellemc.unity.info:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- gather_subset:
- - iscsi_initiator
-
- - name: Get list of consistency groups on Unity array
- dellemc.unity.info:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- gather_subset:
- - cg
-
- - name: Get list of storage pools on Unity array
- dellemc.unity.info:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- gather_subset:
- - storage_pool
-
- - name: Get list of volumes on Unity array
- dellemc.unity.info:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- gather_subset:
- - vol
-
- - name: Get list of snapshot schedules on Unity array
- dellemc.unity.info:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- gather_subset:
- - snapshot_schedule
-
- - name: Get list of NAS Servers on Unity array
- dellemc.unity.info:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- gather_subset:
- - nas_server
-
- - name: Get list of File Systems on Unity array
- dellemc.unity.info:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- gather_subset:
- - file_system
-
- - name: Get list of Snapshots on Unity array
- dellemc.unity.info:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- gather_subset:
- - snapshot
-
- - name: Get list of NFS exports on Unity array
- dellemc.unity.info:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- gather_subset:
- - nfs_export
-
- - name: Get list of SMB shares on Unity array
- dellemc.unity.info:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- gather_subset:
- - smb_share
-
- - name: Get list of user quotas on Unity array
- dellemc.unity.info:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- gather_subset:
- - user_quota
-
- - name: Get list of quota trees on Unity array
- dellemc.unity.info:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- gather_subset:
- - tree_quota
-
- - name: Get list of disk groups on Unity array
- dellemc.unity.info:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- gather_subset:
- - disk_group
-
- - name: Get list of NFS Servers on Unity array
- dellemc.unity.info:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- gather_subset:
- - nfs_server
-
- - name: Get list of CIFS Servers on Unity array
- dellemc.unity.info:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- gather_subset:
- - cifs_server
-
- - name: Get list of ethernet ports on Unity array
- dellemc.unity.info:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- gather_subset:
- - ethernet_port
-
- - name: Get list of file interfaces on Unity array
- dellemc.unity.info:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- gather_subset:
- - file_interface
-
- - name: Get list of replication sessions on Unity array
- dellemc.unity.info:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- gather_subset:
- - replication_session
+- name: Get detailed list of Unity entities
+ dellemc.unity.info:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ gather_subset:
+ - host
+ - fc_initiator
+ - iscsi_initiator
+ - cg
+ - storage_pool
+ - vol
+ - snapshot_schedule
+ - nas_server
+ - file_system
+ - snapshot
+ - nfs_export
+ - smb_share
+ - user_quota
+ - tree_quota
+ - disk_group
+ - nfs_server
+ - cifs_server
+ - ethernet_port
+ - file_interface
+ - replication_session
+
+- name: Get information of Unity array
+ dellemc.unity.info:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+
+- name: Get list of hosts on Unity array
+ dellemc.unity.info:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ gather_subset:
+ - host
+
+- name: Get list of FC initiators on Unity array
+ dellemc.unity.info:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ gather_subset:
+ - fc_initiator
+
+- name: Get list of ISCSI initiators on Unity array
+ dellemc.unity.info:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ gather_subset:
+ - iscsi_initiator
+
+- name: Get list of consistency groups on Unity array
+ dellemc.unity.info:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ gather_subset:
+ - cg
+
+- name: Get list of storage pools on Unity array
+ dellemc.unity.info:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ gather_subset:
+ - storage_pool
+
+- name: Get list of volumes on Unity array
+ dellemc.unity.info:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ gather_subset:
+ - vol
+
+- name: Get list of snapshot schedules on Unity array
+ dellemc.unity.info:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ gather_subset:
+ - snapshot_schedule
+
+- name: Get list of NAS Servers on Unity array
+ dellemc.unity.info:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ gather_subset:
+ - nas_server
+
+- name: Get list of File Systems on Unity array
+ dellemc.unity.info:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ gather_subset:
+ - file_system
+
+- name: Get list of Snapshots on Unity array
+ dellemc.unity.info:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ gather_subset:
+ - snapshot
+
+- name: Get list of NFS exports on Unity array
+ dellemc.unity.info:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ gather_subset:
+ - nfs_export
+
+- name: Get list of SMB shares on Unity array
+ dellemc.unity.info:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ gather_subset:
+ - smb_share
+
+- name: Get list of user quotas on Unity array
+ dellemc.unity.info:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ gather_subset:
+ - user_quota
+
+- name: Get list of quota trees on Unity array
+ dellemc.unity.info:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ gather_subset:
+ - tree_quota
+
+- name: Get list of disk groups on Unity array
+ dellemc.unity.info:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ gather_subset:
+ - disk_group
+
+- name: Get list of NFS Servers on Unity array
+ dellemc.unity.info:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ gather_subset:
+ - nfs_server
+
+- name: Get list of CIFS Servers on Unity array
+ dellemc.unity.info:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ gather_subset:
+ - cifs_server
+
+- name: Get list of ethernet ports on Unity array
+ dellemc.unity.info:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ gather_subset:
+ - ethernet_port
+
+- name: Get list of file interfaces on Unity array
+ dellemc.unity.info:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ gather_subset:
+ - file_interface
+
+- name: Get list of replication sessions on Unity array
+ dellemc.unity.info:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ gather_subset:
+ - replication_session
'''
RETURN = r'''
diff --git a/ansible_collections/dellemc/unity/plugins/modules/interface.py b/ansible_collections/dellemc/unity/plugins/modules/interface.py
index 2523f940e..70be8021a 100644
--- a/ansible_collections/dellemc/unity/plugins/modules/interface.py
+++ b/ansible_collections/dellemc/unity/plugins/modules/interface.py
@@ -79,55 +79,55 @@ notes:
EXAMPLES = r'''
- - name: Add Interface as Backup to NAS Server
- dellemc.unity.interface:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- nas_server_name: "dummy_nas"
- ethernet_port_name: "SP A 4-Port Card Ethernet Port 0"
- role: "BACKUP"
- interface_ip: "xx.xx.xx.xx"
- netmask: "xx.xx.xx.xx"
- gateway: "xx.xx.xx.xx"
- vlan_id: 324
- state: "present"
-
- - name: Add Interface as Production to NAS Server
- dellemc.unity.interface:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- nas_server_name: "dummy_nas"
- ethernet_port_name: "SP A 4-Port Card Ethernet Port 0"
- role: "PRODUCTION"
- interface_ip: "xx.xx.xx.xx"
- netmask: "xx.xx.xx.xx"
- gateway: "xx.xx.xx.xx"
- vlan_id: 324
- state: "present"
-
- - name: Get interface details
- dellemc.unity.interface:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- nas_server_name: "dummy_nas"
- interface_ip: "xx.xx.xx.xx"
- state: "present"
-
- - name: Delete Interface
- dellemc.unity.interface:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- nas_server_name: "dummy_nas"
- interface_ip: "xx.xx.xx.xx"
- state: "absent"
+- name: Add Interface as Backup to NAS Server
+ dellemc.unity.interface:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ nas_server_name: "dummy_nas"
+ ethernet_port_name: "SP A 4-Port Card Ethernet Port 0"
+ role: "BACKUP"
+ interface_ip: "xx.xx.xx.xx"
+ netmask: "xx.xx.xx.xx"
+ gateway: "xx.xx.xx.xx"
+ vlan_id: 324
+ state: "present"
+
+- name: Add Interface as Production to NAS Server
+ dellemc.unity.interface:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ nas_server_name: "dummy_nas"
+ ethernet_port_name: "SP A 4-Port Card Ethernet Port 0"
+ role: "PRODUCTION"
+ interface_ip: "xx.xx.xx.xx"
+ netmask: "xx.xx.xx.xx"
+ gateway: "xx.xx.xx.xx"
+ vlan_id: 324
+ state: "present"
+
+- name: Get interface details
+ dellemc.unity.interface:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ nas_server_name: "dummy_nas"
+ interface_ip: "xx.xx.xx.xx"
+ state: "present"
+
+- name: Delete Interface
+ dellemc.unity.interface:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ nas_server_name: "dummy_nas"
+ interface_ip: "xx.xx.xx.xx"
+ state: "absent"
'''
RETURN = r'''
diff --git a/ansible_collections/dellemc/unity/plugins/modules/nasserver.py b/ansible_collections/dellemc/unity/plugins/modules/nasserver.py
index 925cc932e..446611f4e 100644
--- a/ansible_collections/dellemc/unity/plugins/modules/nasserver.py
+++ b/ansible_collections/dellemc/unity/plugins/modules/nasserver.py
@@ -208,138 +208,138 @@ notes:
EXAMPLES = r'''
- - name: Get Details of NAS Server
- dellemc.unity.nasserver:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- nas_server_name: "{{nas_server_name}}"
- state: "present"
-
- - name: Modify Details of NAS Server
- dellemc.unity.nasserver:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- nas_server_name: "{{nas_server_name}}"
- nas_server_new_name: "updated_sample_nas_server"
- is_replication_destination: false
- is_backup_only: false
- is_multiprotocol_enabled: true
- allow_unmapped_user: true
- default_unix_user: "default_unix_sample_user"
- default_windows_user: "default_windows_sample_user"
- enable_windows_to_unix_username_mapping: true
- current_unix_directory_service: "LDAP"
- is_packet_reflect_enabled: true
- state: "present"
-
- - name: Enable replication for NAS Server on Local System
- dellemc.unity.nasserver:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- nas_server_id: "nas_10"
- replication_reuse_resource: false
- replication_params:
- replication_name: "test_replication"
- destination_nas_server_name: "destination_nas"
- replication_mode: "asynchronous"
- rpo: 60
- replication_type: "local"
- destination_pool_name: "Pool_Ansible_Neo_DND"
- destination_sp: "SPA"
- is_backup: true
- replication_state: "enable"
- state: "present"
-
- - name: Enable replication for NAS Server on Remote System
- dellemc.unity.nasserver:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- nas_server_name: "dummy_nas"
- replication_reuse_resource: false
- replication_params:
- replication_name: "test_replication"
- destination_nas_server_name: "destination_nas"
- replication_mode: "asynchronous"
- rpo: 60
- replication_type: "remote"
- remote_system:
- remote_system_host: '10.10.10.10'
- remote_system_verifycert: false
- remote_system_username: 'test1'
- remote_system_password: 'test1!'
- destination_pool_name: "fastVP_pool"
- destination_sp: "SPA"
- is_backup: true
- replication_state: "enable"
- state: "present"
-
- - name: Enable replication for NAS Server on Remote System in existing NAS Server
- dellemc.unity.nasserver:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- nas_server_name: "dummy_nas"
- replication_reuse_resource: true
- replication_params:
- destination_nas_server_name: "destination_nas"
- replication_mode: "asynchronous"
- rpo: 60
- replication_type: "remote"
- replication_name: "test_replication"
- remote_system:
- remote_system_host: '10.10.10.10'
- remote_system_verifycert: false
- remote_system_username: 'test1'
- remote_system_password: 'test1!'
- destination_pool_name: "fastVP_pool"
- replication_state: "enable"
- state: "present"
-
- - name: Modify replication on the nasserver
- dellemc.unity.nasserver:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- nas_server_name: "dummy_nas"
- replication_params:
- replication_name: "test_repl"
- new_replication_name: "test_repl_updated"
- replication_mode: "asynchronous"
- rpo: 50
- replication_state: "enable"
- state: "present"
-
- - name: Disable replication on the nasserver
- dellemc.unity.nasserver:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- nas_server_name: "dummy_nas"
- replication_state: "disable"
- state: "present"
-
- - name: Disable replication by specifying replication_name on the nasserver
- dellemc.unity.nasserver:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- nas_server_name: "dummy_nas"
- replication_params:
- replication_name: "test_replication"
- replication_state: "disable"
- state: "present"
+- name: Get Details of NAS Server
+ dellemc.unity.nasserver:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ nas_server_name: "{{nas_server_name}}"
+ state: "present"
+
+- name: Modify Details of NAS Server
+ dellemc.unity.nasserver:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ nas_server_name: "{{nas_server_name}}"
+ nas_server_new_name: "updated_sample_nas_server"
+ is_replication_destination: false
+ is_backup_only: false
+ is_multiprotocol_enabled: true
+ allow_unmapped_user: true
+ default_unix_user: "default_unix_sample_user"
+ default_windows_user: "default_windows_sample_user"
+ enable_windows_to_unix_username_mapping: true
+ current_unix_directory_service: "LDAP"
+ is_packet_reflect_enabled: true
+ state: "present"
+
+- name: Enable replication for NAS Server on Local System
+ dellemc.unity.nasserver:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ nas_server_id: "nas_10"
+ replication_reuse_resource: false
+ replication_params:
+ replication_name: "test_replication"
+ destination_nas_server_name: "destination_nas"
+ replication_mode: "asynchronous"
+ rpo: 60
+ replication_type: "local"
+ destination_pool_name: "Pool_Ansible_Neo_DND"
+ destination_sp: "SPA"
+ is_backup: true
+ replication_state: "enable"
+ state: "present"
+
+- name: Enable replication for NAS Server on Remote System
+ dellemc.unity.nasserver:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ nas_server_name: "dummy_nas"
+ replication_reuse_resource: false
+ replication_params:
+ replication_name: "test_replication"
+ destination_nas_server_name: "destination_nas"
+ replication_mode: "asynchronous"
+ rpo: 60
+ replication_type: "remote"
+ remote_system:
+ remote_system_host: '10.10.10.10'
+ remote_system_verifycert: false
+ remote_system_username: 'test1'
+ remote_system_password: 'test1!'
+ destination_pool_name: "fastVP_pool"
+ destination_sp: "SPA"
+ is_backup: true
+ replication_state: "enable"
+ state: "present"
+
+- name: Enable replication for NAS Server on Remote System in existing NAS Server
+ dellemc.unity.nasserver:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ nas_server_name: "dummy_nas"
+ replication_reuse_resource: true
+ replication_params:
+ destination_nas_server_name: "destination_nas"
+ replication_mode: "asynchronous"
+ rpo: 60
+ replication_type: "remote"
+ replication_name: "test_replication"
+ remote_system:
+ remote_system_host: '10.10.10.10'
+ remote_system_verifycert: false
+ remote_system_username: 'test1'
+ remote_system_password: 'test1!'
+ destination_pool_name: "fastVP_pool"
+ replication_state: "enable"
+ state: "present"
+
+- name: Modify replication on the nasserver
+ dellemc.unity.nasserver:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ nas_server_name: "dummy_nas"
+ replication_params:
+ replication_name: "test_repl"
+ new_replication_name: "test_repl_updated"
+ replication_mode: "asynchronous"
+ rpo: 50
+ replication_state: "enable"
+ state: "present"
+
+- name: Disable replication on the nasserver
+ dellemc.unity.nasserver:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ nas_server_name: "dummy_nas"
+ replication_state: "disable"
+ state: "present"
+
+- name: Disable replication by specifying replication_name on the nasserver
+ dellemc.unity.nasserver:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ nas_server_name: "dummy_nas"
+ replication_params:
+ replication_name: "test_replication"
+ replication_state: "disable"
+ state: "present"
'''
RETURN = r'''
diff --git a/ansible_collections/dellemc/unity/plugins/modules/nfs.py b/ansible_collections/dellemc/unity/plugins/modules/nfs.py
index 473e40b2a..d0426f9cf 100644
--- a/ansible_collections/dellemc/unity/plugins/modules/nfs.py
+++ b/ansible_collections/dellemc/unity/plugins/modules/nfs.py
@@ -395,15 +395,15 @@ EXAMPLES = r"""
filesystem_id: "fs_377"
adv_host_mgmt_enabled: false
no_access_hosts:
- - domain: "google.com"
+ - domain: "google.com"
read_only_hosts:
- - netgroup: "netgroup_admin"
+ - netgroup: "netgroup_admin"
read_only_root_hosts:
- - host_name: "host5"
+ - host_name: "host5"
read_write_hosts:
- - subnet: "168.159.57.4/255.255.255.0"
+ - subnet: "168.159.57.4/255.255.255.0"
read_write_root_hosts:
- - ip_address: "10.255.2.4"
+ - ip_address: "10.255.2.4"
host_state: "present-in-export"
state: "present"
@@ -417,15 +417,15 @@ EXAMPLES = r"""
filesystem_id: "fs_377"
adv_host_mgmt_enabled: false
no_access_hosts:
- - domain: "google.com"
+ - domain: "google.com"
read_only_hosts:
- - netgroup: "netgroup_admin"
+ - netgroup: "netgroup_admin"
read_only_root_hosts:
- - host_name: "host5"
+ - host_name: "host5"
read_write_hosts:
- - subnet: "168.159.57.4/255.255.255.0"
+ - subnet: "168.159.57.4/255.255.255.0"
read_write_root_hosts:
- - ip_address: "10.255.2.4"
+ - ip_address: "10.255.2.4"
host_state: "absent-in-export"
state: "present"
diff --git a/ansible_collections/dellemc/unity/plugins/modules/nfsserver.py b/ansible_collections/dellemc/unity/plugins/modules/nfsserver.py
index 30d2c787f..90aba930e 100644
--- a/ansible_collections/dellemc/unity/plugins/modules/nfsserver.py
+++ b/ansible_collections/dellemc/unity/plugins/modules/nfsserver.py
@@ -84,56 +84,56 @@ notes:
EXAMPLES = r'''
- - name: Create NFS server with kdctype as Windows
- dellemc.unity.nfsserver:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- nas_server_name: "dummy_nas"
- host_name: "dummy_nas23"
- is_secure_enabled: true
- kerberos_domain_controller_type: "WINDOWS"
- kerberos_domain_controller_username: "administrator"
- kerberos_domain_controller_password: "Password123!"
- is_extended_credentials_enabled: true
- nfs_v4_enabled: true
- state: "present"
-
- - name: Create NFS server with kdctype as Unix
- dellemc.unity.nfsserver:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- nas_server_name: "dummy_nas"
- host_name: "dummy_nas23"
- is_secure_enabled: true
- kerberos_domain_controller_type: "UNIX"
- is_extended_credentials_enabled: true
- nfs_v4_enabled: true
- state: "present"
-
- - name: Get NFS server details
- dellemc.unity.nfsserver:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- nas_server_name: "dummy_nas"
- state: "present"
-
- - name: Delete NFS server
- dellemc.unity.nfsserver:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- nas_server_name: "dummy_nas"
- kerberos_domain_controller_username: "administrator"
- kerberos_domain_controller_password: "Password123!"
- unjoin_server_account: false
- state: "absent"
+- name: Create NFS server with kdctype as Windows
+ dellemc.unity.nfsserver:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ nas_server_name: "dummy_nas"
+ host_name: "dummy_nas23"
+ is_secure_enabled: true
+ kerberos_domain_controller_type: "WINDOWS"
+ kerberos_domain_controller_username: "administrator"
+ kerberos_domain_controller_password: "Password123!"
+ is_extended_credentials_enabled: true
+ nfs_v4_enabled: true
+ state: "present"
+
+- name: Create NFS server with kdctype as Unix
+ dellemc.unity.nfsserver:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ nas_server_name: "dummy_nas"
+ host_name: "dummy_nas23"
+ is_secure_enabled: true
+ kerberos_domain_controller_type: "UNIX"
+ is_extended_credentials_enabled: true
+ nfs_v4_enabled: true
+ state: "present"
+
+- name: Get NFS server details
+ dellemc.unity.nfsserver:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ nas_server_name: "dummy_nas"
+ state: "present"
+
+- name: Delete NFS server
+ dellemc.unity.nfsserver:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ nas_server_name: "dummy_nas"
+ kerberos_domain_controller_username: "administrator"
+ kerberos_domain_controller_password: "Password123!"
+ unjoin_server_account: false
+ state: "absent"
'''
RETURN = r'''
diff --git a/ansible_collections/dellemc/unity/plugins/modules/snapshot.py b/ansible_collections/dellemc/unity/plugins/modules/snapshot.py
index 5660e3c5c..efdd6e292 100644
--- a/ansible_collections/dellemc/unity/plugins/modules/snapshot.py
+++ b/ansible_collections/dellemc/unity/plugins/modules/snapshot.py
@@ -112,79 +112,79 @@ notes:
'''
EXAMPLES = r'''
- - name: Create a Snapshot for a CG
- dellemc.unity.snapshot:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- port: "{{port}}"
- cg_name: "{{cg_name}}"
- snapshot_name: "{{cg_snapshot_name}}"
- description: "{{description}}"
- auto_delete: false
- state: "present"
-
- - name: Create a Snapshot for a volume with Host attached
- dellemc.unity.snapshot:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- port: "{{port}}"
- vol_name: "{{vol_name}}"
- snapshot_name: "{{vol_snapshot_name}}"
- description: "{{description}}"
- expiry_time: "04/15/2025 16:30"
- host_name: "{{host_name}}"
- host_state: "mapped"
- state: "present"
-
- - name: Unmap a host for a Snapshot
- dellemc.unity.snapshot:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- port: "{{port}}"
- snapshot_name: "{{vol_snapshot_name}}"
- host_name: "{{host_name}}"
- host_state: "unmapped"
- state: "present"
-
- - name: Map snapshot to a host
- dellemc.unity.snapshot:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- port: "{{port}}"
- snapshot_name: "{{vol_snapshot_name}}"
- host_name: "{{host_name}}"
- host_state: "mapped"
- state: "present"
-
- - name: Update attributes of a Snapshot for a volume
- dellemc.unity.snapshot:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- snapshot_name: "{{vol_snapshot_name}}"
- new_snapshot_name: "{{new_snapshot_name}}"
- description: "{{new_description}}"
- host_name: "{{host_name}}"
- host_state: "unmapped"
- state: "present"
-
- - name: Delete Snapshot of CG
- dellemc.unity.snapshot:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- snapshot_name: "{{cg_snapshot_name}}"
- state: "absent"
+- name: Create a Snapshot for a CG
+ dellemc.unity.snapshot:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ port: "{{port}}"
+ cg_name: "{{cg_name}}"
+ snapshot_name: "{{cg_snapshot_name}}"
+ description: "{{description}}"
+ auto_delete: false
+ state: "present"
+
+- name: Create a Snapshot for a volume with Host attached
+ dellemc.unity.snapshot:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ port: "{{port}}"
+ vol_name: "{{vol_name}}"
+ snapshot_name: "{{vol_snapshot_name}}"
+ description: "{{description}}"
+ expiry_time: "04/15/2025 16:30"
+ host_name: "{{host_name}}"
+ host_state: "mapped"
+ state: "present"
+
+- name: Unmap a host for a Snapshot
+ dellemc.unity.snapshot:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ port: "{{port}}"
+ snapshot_name: "{{vol_snapshot_name}}"
+ host_name: "{{host_name}}"
+ host_state: "unmapped"
+ state: "present"
+
+- name: Map snapshot to a host
+ dellemc.unity.snapshot:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ port: "{{port}}"
+ snapshot_name: "{{vol_snapshot_name}}"
+ host_name: "{{host_name}}"
+ host_state: "mapped"
+ state: "present"
+
+- name: Update attributes of a Snapshot for a volume
+ dellemc.unity.snapshot:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ snapshot_name: "{{vol_snapshot_name}}"
+ new_snapshot_name: "{{new_snapshot_name}}"
+ description: "{{new_description}}"
+ host_name: "{{host_name}}"
+ host_state: "unmapped"
+ state: "present"
+
+- name: Delete Snapshot of CG
+ dellemc.unity.snapshot:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ snapshot_name: "{{cg_snapshot_name}}"
+ state: "absent"
'''
RETURN = r'''
diff --git a/ansible_collections/dellemc/unity/plugins/modules/snapshotschedule.py b/ansible_collections/dellemc/unity/plugins/modules/snapshotschedule.py
index 1d6e6ec6c..0690239ea 100644
--- a/ansible_collections/dellemc/unity/plugins/modules/snapshotschedule.py
+++ b/ansible_collections/dellemc/unity/plugins/modules/snapshotschedule.py
@@ -142,8 +142,8 @@ EXAMPLES = r"""
name: "Ansible_Every_Day_Testing"
type: "every_day"
hours_of_day:
- - 8
- - 14
+ - 8
+ - 14
auto_delete: true
state: "{{state_present}}"
@@ -169,8 +169,8 @@ EXAMPLES = r"""
name: "Ansible_Every_Week_Testing"
type: "every_week"
days_of_week:
- - MONDAY
- - FRIDAY
+ - MONDAY
+ - FRIDAY
hour: 12
minute: 30
desired_retention: 200
diff --git a/ansible_collections/dellemc/unity/plugins/modules/storagepool.py b/ansible_collections/dellemc/unity/plugins/modules/storagepool.py
index 6438e9c6a..b7b8bfd69 100644
--- a/ansible_collections/dellemc/unity/plugins/modules/storagepool.py
+++ b/ansible_collections/dellemc/unity/plugins/modules/storagepool.py
@@ -212,22 +212,21 @@ EXAMPLES = r'''
pool_name: "Test"
pool_description: "test pool"
raid_groups:
- disk_group_id : "dg_16"
- disk_num : 2
- raid_type : "RAID10"
- stripe_width : "BEST_FIT"
- alert_threshold : 50
- is_harvest_enabled : true
- pool_harvest_high_threshold : 60
- pool_harvest_low_threshold : 40
- is_snap_harvest_enabled : true
- snap_harvest_high_threshold : 70
- snap_harvest_low_threshold : 50
+ disk_group_id: "dg_16"
+ disk_num: 2
+ raid_type: "RAID10"
+ stripe_width: "BEST_FIT"
+ alert_threshold: 50
+ is_harvest_enabled: true
+ pool_harvest_high_threshold: 60
+ pool_harvest_low_threshold: 40
+ is_snap_harvest_enabled: true
+ snap_harvest_high_threshold: 70
+ snap_harvest_low_threshold: 50
fast_vp: "enabled"
fast_cache: "enabled"
- pool_type : "DYNAMIC"
+ pool_type: "DYNAMIC"
state: "present"
-
'''
RETURN = r'''
diff --git a/ansible_collections/dellemc/unity/plugins/modules/tree_quota.py b/ansible_collections/dellemc/unity/plugins/modules/tree_quota.py
index b066a01fa..dd0a76374 100644
--- a/ansible_collections/dellemc/unity/plugins/modules/tree_quota.py
+++ b/ansible_collections/dellemc/unity/plugins/modules/tree_quota.py
@@ -101,97 +101,97 @@ notes:
'''
EXAMPLES = r'''
- - name: Get quota tree details by quota tree id
- dellemc.unity.tree_quota:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- tree_quota_id: "treequota_171798700679_10"
- state: "present"
-
- - name: Get quota tree details by quota tree path
- dellemc.unity.tree_quota:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- filesystem_name: "fs_2171"
- nas_server_id: "nas_21"
- path: "/test"
- state: "present"
-
- - name: Create quota tree for a filesystem with filesystem id
- dellemc.unity.tree_quota:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- filesystem_id: "fs_2171"
- hard_limit: 6
- cap_unit: "TB"
- soft_limit: 5
- path: "/test_new"
- state: "present"
-
- - name: Create quota tree for a filesystem with filesystem name
- dellemc.unity.tree_quota:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- filesystem_name: "Test_filesystem"
- nas_server_name: "lglad068"
- hard_limit: 6
- cap_unit: "TB"
- soft_limit: 5
- path: "/test_new"
- state: "present"
-
- - name: Modify quota tree limit usage by quota tree path
- dellemc.unity.tree_quota:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- path: "/test_new"
- hard_limit: 10
- cap_unit: "TB"
- soft_limit: 8
- state: "present"
-
- - name: Modify quota tree by quota tree id
- dellemc.unity.tree_quota:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- filesystem_id: "fs_2171"
- tree_quota_id: "treequota_171798700679_10"
- hard_limit: 12
- cap_unit: "TB"
- soft_limit: 10
- state: "present"
-
- - name: Delete quota tree by quota tree id
- dellemc.unity.tree_quota:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- filesystem_id: "fs_2171"
- tree_quota_id: "treequota_171798700679_10"
- state: "absent"
-
- - name: Delete quota tree by path
- dellemc.unity.tree_quota:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- filesystem_id: "fs_2171"
- path: "/test_new"
- state: "absent"
+- name: Get quota tree details by quota tree id
+ dellemc.unity.tree_quota:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ tree_quota_id: "treequota_171798700679_10"
+ state: "present"
+
+- name: Get quota tree details by quota tree path
+ dellemc.unity.tree_quota:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ filesystem_name: "fs_2171"
+ nas_server_id: "nas_21"
+ path: "/test"
+ state: "present"
+
+- name: Create quota tree for a filesystem with filesystem id
+ dellemc.unity.tree_quota:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ filesystem_id: "fs_2171"
+ hard_limit: 6
+ cap_unit: "TB"
+ soft_limit: 5
+ path: "/test_new"
+ state: "present"
+
+- name: Create quota tree for a filesystem with filesystem name
+ dellemc.unity.tree_quota:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ filesystem_name: "Test_filesystem"
+ nas_server_name: "lglad068"
+ hard_limit: 6
+ cap_unit: "TB"
+ soft_limit: 5
+ path: "/test_new"
+ state: "present"
+
+- name: Modify quota tree limit usage by quota tree path
+ dellemc.unity.tree_quota:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ path: "/test_new"
+ hard_limit: 10
+ cap_unit: "TB"
+ soft_limit: 8
+ state: "present"
+
+- name: Modify quota tree by quota tree id
+ dellemc.unity.tree_quota:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ filesystem_id: "fs_2171"
+ tree_quota_id: "treequota_171798700679_10"
+ hard_limit: 12
+ cap_unit: "TB"
+ soft_limit: 10
+ state: "present"
+
+- name: Delete quota tree by quota tree id
+ dellemc.unity.tree_quota:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ filesystem_id: "fs_2171"
+ tree_quota_id: "treequota_171798700679_10"
+ state: "absent"
+
+- name: Delete quota tree by path
+ dellemc.unity.tree_quota:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ filesystem_id: "fs_2171"
+ path: "/test_new"
+ state: "absent"
'''
RETURN = r'''
diff --git a/ansible_collections/dellemc/unity/plugins/modules/user_quota.py b/ansible_collections/dellemc/unity/plugins/modules/user_quota.py
index 06413aa53..0a09ff44d 100644
--- a/ansible_collections/dellemc/unity/plugins/modules/user_quota.py
+++ b/ansible_collections/dellemc/unity/plugins/modules/user_quota.py
@@ -123,170 +123,170 @@ notes:
'''
EXAMPLES = r'''
- - name: Get user quota details by user quota id
- dellemc.unity.user_quota:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- user_quota_id: "userquota_171798700679_0_123"
- state: "present"
-
- - name: Get user quota details by user quota uid/user name
- dellemc.unity.user_quota:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- filesystem_name: "fs_2171"
- nas_server_id: "nas_21"
- user_name: "test"
- state: "present"
-
- - name: Create user quota for a filesystem with filesystem id
- dellemc.unity.user_quota:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- filesystem_id: "fs_2171"
- hard_limit: 6
- cap_unit: "TB"
- soft_limit: 5
- uid: "111"
- state: "present"
-
- - name: Create user quota for a filesystem with filesystem name
- dellemc.unity.user_quota:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- filesystem_name: "Test_filesystem"
- nas_server_name: "lglad068"
- hard_limit: 6
- cap_unit: "TB"
- soft_limit: 5
- uid: "111"
- state: "present"
-
- - name: Modify user quota limit usage by user quota id
- dellemc.unity.user_quota:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- user_quota_id: "userquota_171798700679_0_123"
- hard_limit: 10
- cap_unit: "TB"
- soft_limit: 8
- state: "present"
-
- - name: Modify user quota by filesystem id and user quota uid/user_name
- dellemc.unity.user_quota:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- filesystem_id: "fs_2171"
- user_type: "Windows"
- win_domain: "prod"
- user_name: "sample"
- hard_limit: 12
- cap_unit: "TB"
- soft_limit: 10
- state: "present"
-
- - name: Delete user quota
- dellemc.unity.user_quota:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- filesystem_id: "fs_2171"
- win_domain: "prod"
- user_name: "sample"
- state: "absent"
-
- - name: Create user quota of a quota tree
- dellemc.unity.user_quota:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- tree_quota_id: "treequota_171798700679_4"
- user_type: "Windows"
- win_domain: "prod"
- user_name: "sample"
- soft_limit: 9
- cap_unit: "TB"
- state: "present"
-
- - name: Create user quota of a quota tree by quota tree path
- dellemc.unity.user_quota:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- filesystem_id: "fs_2171"
- path: "/sample"
- user_type: "Unix"
- user_name: "test"
- hard_limit: 2
- cap_unit: "TB"
- state: "present"
-
- - name: Modify user quota of a quota tree
- dellemc.unity.user_quota:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- tree_quota_id: "treequota_171798700679_4"
- user_type: "Windows"
- win_domain: "prod"
- user_name: "sample"
- soft_limit: 10
- cap_unit: "TB"
- state: "present"
-
- - name: Modify user quota of a quota tree by quota tree path
- dellemc.unity.user_quota:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- filesystem_id: "fs_2171"
- path: "/sample"
- user_type: "Windows"
- win_domain: "prod"
- user_name: "sample"
- hard_limit: 12
- cap_unit: "TB"
- state: "present"
-
- - name: Delete user quota of a quota tree by quota tree path
- dellemc.unity.user_quota:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- filesystem_id: "fs_2171"
- path: "/sample"
- win_domain: "prod"
- user_name: "sample"
- state: "absent"
-
- - name: Delete user quota of a quota tree by quota tree id
- dellemc.unity.user_quota:
- unispherehost: "{{unispherehost}}"
- username: "{{username}}"
- password: "{{password}}"
- validate_certs: "{{validate_certs}}"
- tree_quota_id: "treequota_171798700679_4"
- win_domain: "prod"
- user_name: "sample"
- state: "absent"
+- name: Get user quota details by user quota id
+ dellemc.unity.user_quota:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ user_quota_id: "userquota_171798700679_0_123"
+ state: "present"
+
+- name: Get user quota details by user quota uid/user name
+ dellemc.unity.user_quota:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ filesystem_name: "fs_2171"
+ nas_server_id: "nas_21"
+ user_name: "test"
+ state: "present"
+
+- name: Create user quota for a filesystem with filesystem id
+ dellemc.unity.user_quota:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ filesystem_id: "fs_2171"
+ hard_limit: 6
+ cap_unit: "TB"
+ soft_limit: 5
+ uid: "111"
+ state: "present"
+
+- name: Create user quota for a filesystem with filesystem name
+ dellemc.unity.user_quota:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ filesystem_name: "Test_filesystem"
+ nas_server_name: "lglad068"
+ hard_limit: 6
+ cap_unit: "TB"
+ soft_limit: 5
+ uid: "111"
+ state: "present"
+
+- name: Modify user quota limit usage by user quota id
+ dellemc.unity.user_quota:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ user_quota_id: "userquota_171798700679_0_123"
+ hard_limit: 10
+ cap_unit: "TB"
+ soft_limit: 8
+ state: "present"
+
+- name: Modify user quota by filesystem id and user quota uid/user_name
+ dellemc.unity.user_quota:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ filesystem_id: "fs_2171"
+ user_type: "Windows"
+ win_domain: "prod"
+ user_name: "sample"
+ hard_limit: 12
+ cap_unit: "TB"
+ soft_limit: 10
+ state: "present"
+
+- name: Delete user quota
+ dellemc.unity.user_quota:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ filesystem_id: "fs_2171"
+ win_domain: "prod"
+ user_name: "sample"
+ state: "absent"
+
+- name: Create user quota of a quota tree
+ dellemc.unity.user_quota:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ tree_quota_id: "treequota_171798700679_4"
+ user_type: "Windows"
+ win_domain: "prod"
+ user_name: "sample"
+ soft_limit: 9
+ cap_unit: "TB"
+ state: "present"
+
+- name: Create user quota of a quota tree by quota tree path
+ dellemc.unity.user_quota:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ filesystem_id: "fs_2171"
+ path: "/sample"
+ user_type: "Unix"
+ user_name: "test"
+ hard_limit: 2
+ cap_unit: "TB"
+ state: "present"
+
+- name: Modify user quota of a quota tree
+ dellemc.unity.user_quota:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ tree_quota_id: "treequota_171798700679_4"
+ user_type: "Windows"
+ win_domain: "prod"
+ user_name: "sample"
+ soft_limit: 10
+ cap_unit: "TB"
+ state: "present"
+
+- name: Modify user quota of a quota tree by quota tree path
+ dellemc.unity.user_quota:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ filesystem_id: "fs_2171"
+ path: "/sample"
+ user_type: "Windows"
+ win_domain: "prod"
+ user_name: "sample"
+ hard_limit: 12
+ cap_unit: "TB"
+ state: "present"
+
+- name: Delete user quota of a quota tree by quota tree path
+ dellemc.unity.user_quota:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ filesystem_id: "fs_2171"
+ path: "/sample"
+ win_domain: "prod"
+ user_name: "sample"
+ state: "absent"
+
+- name: Delete user quota of a quota tree by quota tree id
+ dellemc.unity.user_quota:
+ unispherehost: "{{unispherehost}}"
+ username: "{{username}}"
+ password: "{{password}}"
+ validate_certs: "{{validate_certs}}"
+ tree_quota_id: "treequota_171798700679_4"
+ win_domain: "prod"
+ user_name: "sample"
+ state: "absent"
'''
RETURN = r'''
diff --git a/ansible_collections/dellemc/unity/plugins/modules/volume.py b/ansible_collections/dellemc/unity/plugins/modules/volume.py
index 81790ea24..4b23267ac 100644
--- a/ansible_collections/dellemc/unity/plugins/modules/volume.py
+++ b/ansible_collections/dellemc/unity/plugins/modules/volume.py
@@ -224,10 +224,10 @@ EXAMPLES = r"""
validate_certs: "{{validate_certs}}"
vol_id: "{{vol_id}}"
hosts:
- - host_name: "10.226.198.248"
- hlu: 1
- - host_id: "Host_929"
- hlu: 2
+ - host_name: "10.226.198.248"
+ hlu: 1
+ - host_id: "Host_929"
+ hlu: 2
mapping_state: "mapped"
state: "present"
diff --git a/ansible_collections/dellemc/unity/tests/sanity/ignore-2.13.txt b/ansible_collections/dellemc/unity/tests/sanity/ignore-2.16.txt
index a7aa13146..fcf3bcfba 100644
--- a/ansible_collections/dellemc/unity/tests/sanity/ignore-2.13.txt
+++ b/ansible_collections/dellemc/unity/tests/sanity/ignore-2.16.txt
@@ -17,16 +17,10 @@ plugins/modules/nfsserver.py validate-modules:missing-gplv3-license
plugins/modules/host.py import-2.7
plugins/modules/interface.py import-2.7
plugins/modules/nfs.py import-2.7
-plugins/modules/nfs.py import-3.5
plugins/modules/nfs.py compile-2.7
-plugins/modules/nfs.py compile-3.5
plugins/modules/filesystem.py compile-2.7
-plugins/modules/filesystem.py compile-3.5
plugins/modules/filesystem.py import-2.7
-plugins/modules/filesystem.py import-3.5
plugins/modules/interface.py validate-modules:missing-gplv3-license
plugins/modules/replication_session.py validate-modules:missing-gplv3-license
plugins/modules/replication_session.py import-2.7
-plugins/modules/replication_session.py import-3.5
plugins/modules/replication_session.py compile-2.7
-plugins/modules/replication_session.py compile-3.5
diff --git a/ansible_collections/dellemc/unity/tests/sanity/ignore-2.17.txt b/ansible_collections/dellemc/unity/tests/sanity/ignore-2.17.txt
new file mode 100644
index 000000000..c034ae364
--- /dev/null
+++ b/ansible_collections/dellemc/unity/tests/sanity/ignore-2.17.txt
@@ -0,0 +1,18 @@
+plugins/modules/consistencygroup.py validate-modules:missing-gplv3-license
+plugins/modules/filesystem.py validate-modules:missing-gplv3-license
+plugins/modules/filesystem_snapshot.py validate-modules:missing-gplv3-license
+plugins/modules/info.py validate-modules:missing-gplv3-license
+plugins/modules/host.py validate-modules:missing-gplv3-license
+plugins/modules/nasserver.py validate-modules:missing-gplv3-license
+plugins/modules/nfs.py validate-modules:missing-gplv3-license
+plugins/modules/smbshare.py validate-modules:missing-gplv3-license
+plugins/modules/snapshot.py validate-modules:missing-gplv3-license
+plugins/modules/snapshotschedule.py validate-modules:missing-gplv3-license
+plugins/modules/storagepool.py validate-modules:missing-gplv3-license
+plugins/modules/tree_quota.py validate-modules:missing-gplv3-license
+plugins/modules/user_quota.py validate-modules:missing-gplv3-license
+plugins/modules/volume.py validate-modules:missing-gplv3-license
+plugins/modules/cifsserver.py validate-modules:missing-gplv3-license
+plugins/modules/nfsserver.py validate-modules:missing-gplv3-license
+plugins/modules/interface.py validate-modules:missing-gplv3-license
+plugins/modules/replication_session.py validate-modules:missing-gplv3-license
diff --git a/ansible_collections/dellemc/unity/tests/requirements.txt b/ansible_collections/dellemc/unity/tests/unit/requirements.txt
index 3541acd15..3541acd15 100644
--- a/ansible_collections/dellemc/unity/tests/requirements.txt
+++ b/ansible_collections/dellemc/unity/tests/unit/requirements.txt
diff --git a/ansible_collections/fortinet/fortimanager/CHANGELOG.rst b/ansible_collections/fortinet/fortimanager/CHANGELOG.rst
index d41e9f7e6..8282add36 100644
--- a/ansible_collections/fortinet/fortimanager/CHANGELOG.rst
+++ b/ansible_collections/fortinet/fortimanager/CHANGELOG.rst
@@ -5,6 +5,28 @@ Fortinet.Fortimanager Release Notes
.. contents:: Topics
+v2.5.0
+======
+
+Release Summary
+---------------
+
+release fortinet.fortimanager 2.5.0
+
+Minor Changes
+-------------
+
+- Renamed the input argument "message" to "fmgr_message" to comply with Ansible requirements.
+
+Bugfixes
+--------
+
+- 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.
+- 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.
+- Improved documentation, added description for all "no description" modules.
+
v2.4.0
======
diff --git a/ansible_collections/fortinet/fortimanager/FILES.json b/ansible_collections/fortinet/fortimanager/FILES.json
index 8e605df0a..476143180 100644
--- a/ansible_collections/fortinet/fortimanager/FILES.json
+++ b/ansible_collections/fortinet/fortimanager/FILES.json
@@ -39,14 +39,14 @@
"name": "plugins/module_utils/exported_schema.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d710f3721487a73521667f9e828954d35d2e1769225e1044af2403b675db4ffd",
+ "chksum_sha256": "3e261fcec6e4f1b0a62369671265a1d2714f3e06cc75d81f766d9b44b0a0f83f",
"format": 1
},
{
"name": "plugins/module_utils/napi.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bdbf116cf67b388bb599eff230241c31cfc7d83dd24daf6fbbcd8b5cf2233227",
+ "chksum_sha256": "e2cb27835fd7fc812ce3ed19fb3cb23a4842ec347a56707b665121323cadc021",
"format": 1
},
{
@@ -74,7 +74,7 @@
"name": "plugins/modules/fmgr_dynamic_multicast_interface.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ce47586e5d16fce4bc5af8d3345e012bcac7e616fd7d16bd11e3f92c72f1362c",
+ "chksum_sha256": "2ab3683d37e9ee0f33788b845548b2c2cc95e0c046c1aa0ab705b8f1b063dabf",
"format": 1
},
{
@@ -95,7 +95,7 @@
"name": "plugins/modules/fmgr_system_sdnconnector_gcpprojectlist.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a9acbc7376f70a3538ee54f23efe943711c13857bde0a457fd88047044e1c483",
+ "chksum_sha256": "eb11452593852086570789dc15dd1af3ebda80ac8187154290a08bd8ae8021e8",
"format": 1
},
{
@@ -116,7 +116,7 @@
"name": "plugins/modules/fmgr_pkg_firewall_hyperscalepolicy6.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "33e9e9275402648bad7a32563834c9d0b3971a3fe0d3dfd0b11a61d5da70c93e",
+ "chksum_sha256": "0b068d0db88a7d0bdfce7cb7fa7622205b4882dddc68598c1c021da320efae66",
"format": 1
},
{
@@ -130,7 +130,7 @@
"name": "plugins/modules/fmgr_securityconsole_install_device.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "794dd58f764077b6d96f12e65137778308f4b0bd8b74a5e5a18b262e7a81fbe3",
+ "chksum_sha256": "9457e1bea8028f5e3fb9244cb547550a4967ed428c209043f44d831f864b11f5",
"format": 1
},
{
@@ -151,7 +151,7 @@
"name": "plugins/modules/fmgr_fsp_vlan_interface.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fc6c863ceb0cf8b159786f426da34584b70fbd611392bff12a4cdd7c9b8fdbdb",
+ "chksum_sha256": "256be4641daa97f35ee08916793c7e58433ebc556cd17dfab7d3a7c1c57c4cc8",
"format": 1
},
{
@@ -165,7 +165,7 @@
"name": "plugins/modules/fmgr_dvmdb_metafields_group.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c59efb3580e99de428cc91e31cc9cfc98bceb52083943babd93df088fc6187b1",
+ "chksum_sha256": "507a52041d3d2d7409a59145744565af92e4a0635b0b3ec86f3bd0ea56b591d9",
"format": 1
},
{
@@ -179,7 +179,7 @@
"name": "plugins/modules/fmgr_system_log_settings_rollingregular.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c92210a54990a5b7d2f628a560fe365333134330c9af453ed77217ff2c0c20f4",
+ "chksum_sha256": "7874fca996c461c1965a48f4b7af2580241e8a5a8ff50d7e6f498e6dee025a07",
"format": 1
},
{
@@ -193,14 +193,14 @@
"name": "plugins/modules/fmgr_system_npu_hpe.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e24ab0204efedf8b7e22496ede1a229c5489801e613e66b8238903e788ae27db",
+ "chksum_sha256": "5815a7fad31d482985d7841062b5e16c626ee243f984511873dd6b7cb09f224a",
"format": 1
},
{
"name": "plugins/modules/fmgr_dynamic_virtualwanlink_members_dynamicmapping.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3895d0935cd2e92bd61217e2dfaa4f8405ec18821d416db9abf4d8bd74c0ea1a",
+ "chksum_sha256": "ca3ab1a5e4386ba97b1de47eb8d4129e71968af26b7710c4fdafa85da55b12ab",
"format": 1
},
{
@@ -221,7 +221,7 @@
"name": "plugins/modules/fmgr_pm_config_metafields_firewall_centralsnatmap.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a26090689dfce6f721719d14ef8c6032fae755d223238498013c199c1ece56e1",
+ "chksum_sha256": "85d52457d1984b25d032fe83e5c6dd728d5b44fc698ef5b84e4f04637216cbb9",
"format": 1
},
{
@@ -235,7 +235,7 @@
"name": "plugins/modules/fmgr_vpnsslweb_portal_bookmarkgroup.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d6e861ce640af11d84dfea8d1c84442e44e0083948ef91b7747663b35d782193",
+ "chksum_sha256": "7102f3c5f3a44bd6850ba543879838d77a764dc51e434824cd83360801255bf6",
"format": 1
},
{
@@ -256,7 +256,7 @@
"name": "plugins/modules/fmgr_ips_baseline_sensor_override.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f7bf6fb129de16ce8bd66a8cc5983dfffdb2f0ef957eb8e4bc53f97ca4ca9cd8",
+ "chksum_sha256": "5665dd571345b267c9b0ad9c5bce757c7fe1c086eb9a1f2fb4abe58c72c70308",
"format": 1
},
{
@@ -277,7 +277,7 @@
"name": "plugins/modules/fmgr_system_sslciphersuites.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "760b252936ed92c48d55ca26712705b28b5598e765962c272c0a1a58e6077546",
+ "chksum_sha256": "928472a9bc0d997147bd2bca688f9e1517ff17604c985383b9e8437f6b08c9c1",
"format": 1
},
{
@@ -291,21 +291,21 @@
"name": "plugins/modules/fmgr_pkg_firewall_explicitproxypolicy_sectionvalue.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3d31a15771b3bb583950a77e2927e5dc3f6789796842543756f7c12482e5cce1",
+ "chksum_sha256": "b49222fa2fff224c201791c78dda7fb7bd78cba1a419ff64a6d96785a691b5ee",
"format": 1
},
{
"name": "plugins/modules/fmgr_system_ha.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cab14e0265cdb1b3723ae497fdbda28604b1bc0a7a52c5f847225ff12500ff45",
+ "chksum_sha256": "251750e0ece685da153c5446250a86cea8417773b5f94f93bb1f206f434ffd69",
"format": 1
},
{
"name": "plugins/modules/fmgr_system_sdnconnector.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9c63a639454df9499c5195910395cdc8c8e9445fcc25d65187053358731237ce",
+ "chksum_sha256": "baa5eadc8a55152a8da6117a4c732a94b8703bd5644f6a456c9e32e2043e42d9",
"format": 1
},
{
@@ -326,7 +326,7 @@
"name": "plugins/modules/fmgr_securityconsole_template_cli_preview.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d96e036e67ee0562e5c8ac6934a9e504c45c1928658043ac52fbc902e36e990a",
+ "chksum_sha256": "34916414203b556b945da391df0032fffe124942209ddf54afa792712c3c84ce",
"format": 1
},
{
@@ -396,7 +396,7 @@
"name": "plugins/modules/fmgr_export_playbooks.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "06ab43db84e40bed40d6e289f3f6ba65e0374c6533aa0506cd37eda7b8a4d657",
+ "chksum_sha256": "2b9b494923a2d0c4366316cb9ff85d9ea3728bcbb3490e2b84f01c8fa6dee409",
"format": 1
},
{
@@ -494,7 +494,7 @@
"name": "plugins/modules/fmgr_system_locallog_setting.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3f7db73f994328f5b2e3fa19a8623d898b352f765b98849906b63ed2bd599edd",
+ "chksum_sha256": "5ca5a3ecfef442b65d634e25558adae3e85870f2d4bcc258ebad1da4ed247994",
"format": 1
},
{
@@ -543,7 +543,7 @@
"name": "plugins/modules/fmgr_pm_pkg_adom.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5d40ee4902aaf8e71903f2d27bc8602333e758125fdab295d3cbee9a732ae334",
+ "chksum_sha256": "d30bd8a250fe99171e31fd2a46c0f9dadb116137bcd9e64ad7d371c05283807b",
"format": 1
},
{
@@ -571,14 +571,14 @@
"name": "plugins/modules/fmgr_dynamic_interface_platformmapping.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be5bb841dc529ad24ca1ec06fcc7cdfb1fed7ceae309c03848a0bcb47aee68ef",
+ "chksum_sha256": "88674bbbede3427f5cb78721c1b03b9ceaecb49e1c77f7c50f6ece035dbc79fb",
"format": 1
},
{
"name": "plugins/modules/fmgr_antivirus_profile.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "24a4d70028110cb59c47d2417df5f6e230221482ca130512d5225405f009e5fa",
+ "chksum_sha256": "069948ad051acb8ebaa29fb21fd3144578cd6ed3cad6463d47a9b78162eb2e78",
"format": 1
},
{
@@ -627,7 +627,7 @@
"name": "plugins/modules/fmgr_vap_dynamicmapping.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fb79353c5e2c0826a7ccf47ed01c26c1960644cc146a2c47f93f7cafdb9ccc13",
+ "chksum_sha256": "42bda76be5caead83437c19dc6e008a3b79ec678e5261a2968b4963d5eb9aef5",
"format": 1
},
{
@@ -655,7 +655,7 @@
"name": "plugins/modules/fmgr_devprof_log_syslogd_setting.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8e3f0e9e2119ce8b648d1ef39ce777f7500f0381edd91e3ac3b46d934b71f6a4",
+ "chksum_sha256": "4fcf5cfbe1877b482a8ecdc8171d69e8f6f2d144da35b376b114c6794fa756c2",
"format": 1
},
{
@@ -669,7 +669,7 @@
"name": "plugins/modules/fmgr_dvmdb_metafields_device.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "df6cacc4277ebb9cc62ab7743d892c7a5342a43d78eaa81c52e0180f599fdf5f",
+ "chksum_sha256": "81a2751c6326ed1e6380bbe1d0ac4ac80a0b954a3f6e1c40ff7309538798a243",
"format": 1
},
{
@@ -683,7 +683,7 @@
"name": "plugins/modules/fmgr_system_npu_udptimeoutprofile.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0b32029fb56407679c147949a69b85dbc1ddb40d417a85dfa81ed35f7a094ba8",
+ "chksum_sha256": "e80b8f975b1e60328b402588c031ba6a79ddb2ec6c8543d0ebed838cf1246fcb",
"format": 1
},
{
@@ -767,14 +767,14 @@
"name": "plugins/modules/fmgr_user_connector.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f2ede16179e30bc2bd8821444f871c934bab71aa6ea8d07a539a6ecf643c2494",
+ "chksum_sha256": "3eb233d1d97014d44602ec8330eb7077eff9bc43c364d43742973cda1f94efe8",
"format": 1
},
{
"name": "plugins/modules/fmgr_pm_wanprof_adom.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "77753ff4aa881695025b5586707cf5428f9831e0e474437c8e6f306aad632f9a",
+ "chksum_sha256": "2924f57cd671d8c978b5c1b6f71579a382641d711a7db66f5f1aeaf4ebaad521",
"format": 1
},
{
@@ -788,7 +788,7 @@
"name": "plugins/modules/fmgr_system_admin_setting.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b95f47c3832b016ed43ffb0ff7e29646aa064ad8b4192a1c7fbf8c160e4c762c",
+ "chksum_sha256": "158da2acb3d2fe7429e31df6651794dc36bd52e4fa1ac29e8d1f81c18b89e9a1",
"format": 1
},
{
@@ -823,7 +823,7 @@
"name": "plugins/modules/fmgr_videofilter_youtubechannelfilter.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0b06a2675778c8321122f4ea6923f04d5cdd6670557d9d15c0200a59f4680235",
+ "chksum_sha256": "176dc95aad387ba272f09bff2934ed977172b46cfc2eb4ce44523fadf560f838",
"format": 1
},
{
@@ -837,7 +837,7 @@
"name": "plugins/modules/fmgr_dvmdb_upgrade.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b117fb6201bcac573e63a8991db9c3403f480c657dfa16d55123d60e065ab019",
+ "chksum_sha256": "e0b51ce4a8e877afec77aa32e501ce436fe043647b2ad4e4ecb020e5d60fb2fd",
"format": 1
},
{
@@ -879,7 +879,7 @@
"name": "plugins/modules/fmgr_user_ldap_dynamicmapping.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c7f7dcc3f1107594bf4679ac7f3b85a33436d2f13cda13e741fc1dd5f8e83456",
+ "chksum_sha256": "c757b174fea9eb746dd93e7073c90c555fc70577023a52d7bff87bc3cc369273",
"format": 1
},
{
@@ -893,7 +893,7 @@
"name": "plugins/modules/fmgr_dynamic_address.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "90fa30a7fed37c7a924f34e0920065e74b12396ab37627e627338f2d68d9c3de",
+ "chksum_sha256": "32b8586b40327626f68138bfcc01e48c491e144c0f1ce3997a6cc329f5882a8a",
"format": 1
},
{
@@ -914,14 +914,14 @@
"name": "plugins/modules/fmgr_cloud_orchestawstemplate_autoscaleexistingvpc.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b5380a649626884643c3064ab35778ce6514b9db41686c118884285b98e90cf4",
+ "chksum_sha256": "5420076e9263208afc806d8dbc92cd7521214b000d2799ce336cf7ccce411e4b",
"format": 1
},
{
"name": "plugins/modules/fmgr_dynamic_virtualwanlink_neighbor_dynamicmapping.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1cdf3df7a9f759bced092ffdbda1d944d1677a53c70c5ace3f663dfdbe9ba0d5",
+ "chksum_sha256": "ecfdc0e57b5c43c4c5a2c15baf024474c9025b2cea550fa373489da328de2a83",
"format": 1
},
{
@@ -956,14 +956,14 @@
"name": "plugins/modules/fmgr_system_replacemsggroup_mm4.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "513189d153d5977178193277acb4c2872b5727d9a3d177de4a114357bc23f145",
+ "chksum_sha256": "dd8f03daa00cce3f777c5a83190061271f014f4fef029b7beb545411a05a32ed",
"format": 1
},
{
"name": "plugins/modules/fmgr_firewall_profileprotocoloptions.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "79484fc207c56793792c8edca63199078259cfed2dffbb16282a3f3d9bbe4d3c",
+ "chksum_sha256": "d22c748106095adaa86a90369ce66f6a0acb4da8dbd7188d34a970d040e5a5b9",
"format": 1
},
{
@@ -984,7 +984,7 @@
"name": "plugins/modules/fmgr_system_locallog_disk_setting.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a03aca9b22962840f9dbd28361536301d04e14e29107365b1c81603cdcbbff2d",
+ "chksum_sha256": "116c2334f0ff6a06325f573bbe0bedb3191a611746f6cbfdfa880b89084f9065",
"format": 1
},
{
@@ -1005,14 +1005,14 @@
"name": "plugins/modules/fmgr_system_meta.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bac25cbbdb598e28c606eff4cc0fe7c2997dfa386df196b587b92e816ad6fa52",
+ "chksum_sha256": "d0589acd07aaee087a7cedaefb784f3878cb6671f8701f85970d7df1178c8d89",
"format": 1
},
{
"name": "plugins/modules/fmgr_pm_devprof_pkg.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7feaddf65e04fc1baccf839efed2d707c5a07b2d545d25ba18a406453368e1f2",
+ "chksum_sha256": "d9787124cc211fe97fd27792f380d90a6c6917c7e4f9cb2e7b29f2789bf7e777",
"format": 1
},
{
@@ -1026,14 +1026,14 @@
"name": "plugins/modules/fmgr_ips_baseline_sensor_filter.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "59641e431e5317c94fc74038df9442ed0cc7100e73bf337c84bb1a41cbc9faab",
+ "chksum_sha256": "aab8de57837cc9b7399c52a65871a3264e5a8a19761fb1c0550d9fd01c273222",
"format": 1
},
{
"name": "plugins/modules/fmgr_sctpfilter_profile.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a920e9de01507a71b96d058a2892de13ccc47da929ae212bcc4cbc3f61b5e9b7",
+ "chksum_sha256": "9f0f934937f74ae654780709fe649683da5ef04950fe8e36e92056cc05da3298",
"format": 1
},
{
@@ -1054,7 +1054,7 @@
"name": "plugins/modules/fmgr_system_admin_user.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c6e7d38a291a4da3ae7bae24392bcbc61b05d78c4bab6088652d37763919616d",
+ "chksum_sha256": "578c39d792bce173b0a3ecbd66e1a6610f8e589e6408c063602c3769982d7f11",
"format": 1
},
{
@@ -1082,7 +1082,7 @@
"name": "plugins/modules/fmgr_system_npu_tcptimeoutprofile.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d8ff2fdb6f35ae3f1c9361662ffc8ed342302bf8d4eb28adee57338b6e92cc40",
+ "chksum_sha256": "85e86b7a6eebb8f583bfb0ffa0d0ecda82556239df48d22a4711851074db2c8f",
"format": 1
},
{
@@ -1103,7 +1103,7 @@
"name": "plugins/modules/fmgr_firewall_sslsshprofile.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ff30f33b8e30b7ab93ccddf34cc4fa8cd30d171bba77885494a65251f44b1e69",
+ "chksum_sha256": "2be803297a1c66185b973f03e559b0df61fe6e1921853dd068e148714f436a72",
"format": 1
},
{
@@ -1166,7 +1166,7 @@
"name": "plugins/modules/fmgr_firewall_casbprofile.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c96ee82b003922885ff4c598ff90bf2998d73c485e83e6987ac4b20fbbb629ca",
+ "chksum_sha256": "22f7f6717b95005ede746da14cfcdfe02f815751142803d6ff67be04d56f9e98",
"format": 1
},
{
@@ -1215,7 +1215,7 @@
"name": "plugins/modules/fmgr_system_locallog_syslogd3_setting.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9cb6450c37bc9f7651216160e7443c4a4385d4deaec447ba86970514c706127b",
+ "chksum_sha256": "009a2918b40226e633f1148f086ceb70456117fb455d3ca659f9414607fef311",
"format": 1
},
{
@@ -1257,7 +1257,7 @@
"name": "plugins/modules/fmgr_dvmdb_workflow_approve.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "abed19e301fb972c983b54e737164d94ce749fb08db74a872b6dd944e798ca75",
+ "chksum_sha256": "cb91b631dca1ddb9cc6d78eb6bd9818adb3fb5852752bc6dd0b5e5f7dd1d842e",
"format": 1
},
{
@@ -1313,7 +1313,7 @@
"name": "plugins/modules/fmgr_system_webproxy.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7be2ab142953ba47339e2d73c9e07ac71a4ac54e0fe8ce60bfafddc50c32750d",
+ "chksum_sha256": "9d6e1bf7106f1b897b305f8484a455cc1368c6941c0797a3364bbf87c7505bac",
"format": 1
},
{
@@ -1362,14 +1362,14 @@
"name": "plugins/modules/fmgr_pm_config_metafields_firewall_service_group.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "55be0b10eb472fc89195b3ed542b3a87d3dd4648eadd236ae0b6edca2f1426c6",
+ "chksum_sha256": "5456735f095ce0ad88f194d3e859f76dc328fd5ba3e64d25a6d0c55b4a036916",
"format": 1
},
{
"name": "plugins/modules/fmgr_firewall_proxyaddrgrp.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8fe112262dc35aa77292cd2da1d82f671d86e9ef461c2b3c051546d0c4e29ba8",
+ "chksum_sha256": "8632b3a374589bbf2664365a81b4c27e814d495c42adc301323fc8a7d48d6b05",
"format": 1
},
{
@@ -1390,7 +1390,7 @@
"name": "plugins/modules/fmgr_pm_config_metafields_firewall_address.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6a3bd82f1a07063d4675fb544e0004e97c02a32cb5e45ba0d29b1fded62c6278",
+ "chksum_sha256": "847a6356fad7b1690682586684202532a481d3ce5b4b2768fead2a4ec767cc3d",
"format": 1
},
{
@@ -1425,7 +1425,7 @@
"name": "plugins/modules/fmgr_antivirus_profile_http.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f76a7d3762a23e6abe74f16225ed63b56af8700e4145c2d74468c734fdd61907",
+ "chksum_sha256": "12c60a531d757611623759a05626cca2c2ccea6233bb66255767eb5b960d0aa3",
"format": 1
},
{
@@ -1446,14 +1446,14 @@
"name": "plugins/modules/fmgr_pkg_firewall_policy46.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "465f7561602f54212ee8b73508de18bf47188ba037ad91da2cb7ad2289723ead",
+ "chksum_sha256": "804bc5e90d1a60bf19b87bb75115411625e910badb7a0263fb5d2828002d196a",
"format": 1
},
{
"name": "plugins/modules/fmgr_fmg_fabric_authorization_template_platforms.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "669e28e6352085f004e54424b08cabe47277ed738bf2dcc97fe4691910f60c6b",
+ "chksum_sha256": "00f326e8b1593e52ef7a21637701438cefd783702898e42a6b55b5b5fd4e0be1",
"format": 1
},
{
@@ -1467,7 +1467,7 @@
"name": "plugins/modules/fmgr_wanprof_system_virtualwanlink_healthcheck.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1d8ffcccababcb3fb122b37f5f88f7d0f72c637dfbe6f32703178419143c4e5c",
+ "chksum_sha256": "fbbda3bcf8dfdcea2b3bcdb193f239253b23d0862827d5b7d9fe85408658f938",
"format": 1
},
{
@@ -1488,7 +1488,7 @@
"name": "plugins/modules/fmgr_dvmdb_device_replace_sn.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9d6fd7b6b91aa8bbae23ab652e6df6e2a9969611117ed4479323aafdedc16f6b",
+ "chksum_sha256": "12ecb2a3deed402b6417720240947bb6455d44d2906359eb989dec9c11952556",
"format": 1
},
{
@@ -1579,7 +1579,7 @@
"name": "plugins/modules/fmgr_system_dm.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2b37fad0ebcb38f635596c7fdef041efae889a7a963cfcf6c6111857b788fbb3",
+ "chksum_sha256": "14b6acb3079858e1c77bade4eb83e39d788b4ae2b87f8c4f92576fbd93740bec",
"format": 1
},
{
@@ -1600,7 +1600,7 @@
"name": "plugins/modules/fmgr_dvm_cmd_import_devlist.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "538d3e4faa6d181fdbcc606d884020ee7d9c06e59ce66f6383d9161af5c790b5",
+ "chksum_sha256": "4afed0d791c92abac81b8a5a1fd55c6d6e998ee8366ca383c3b784e2d0a7f416",
"format": 1
},
{
@@ -1635,14 +1635,14 @@
"name": "plugins/modules/fmgr_devprof_import.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4108b144b789c9406fe36ba6634f5cbb2b674acf17a225c6652417466b41b623",
+ "chksum_sha256": "cdad77ebeb6e256f04366ffded93ed85e74c621c8c2e1b27253b9e90fccfa349",
"format": 1
},
{
"name": "plugins/modules/fmgr_vpnmgr_node.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "13a7a3e92e75e54ca086e8455cba3068a8f503f63e9f28d57abb105b5b29a4cc",
+ "chksum_sha256": "a80b40fb0615337ba68254ec501c2c7dc33f996555043f496d79dce538067c07",
"format": 1
},
{
@@ -1698,7 +1698,7 @@
"name": "plugins/modules/fmgr_firewall_accessproxyvirtualhost.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fbc69d104acfa1b857c01cf11012604ed2b5bc6c99032f56970aaf8d57a4409f",
+ "chksum_sha256": "f4c2ec95cb95e4010f0b6bc103f5ed14d5b29a4e1f92878f7f405481265ccce6",
"format": 1
},
{
@@ -1726,14 +1726,14 @@
"name": "plugins/modules/fmgr_user_device.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5d1e1e0ad442659c92ddaa9ac934a7e309bce929f88575153cee67c09df33777",
+ "chksum_sha256": "0590fe4ebdbb7eced9028f406742b87918e902b9e59cab03e660335c1542c11a",
"format": 1
},
{
"name": "plugins/modules/fmgr_system_npu_npqueues_scheduler.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7dd9c44a478fc81defe00e6af0fd302f86dc0b76ea210e2d0adeee766baf8de1",
+ "chksum_sha256": "481d943ffc595134cac524a48e3791a5ae9bd31b43c822cee43768b2ed3ce7d2",
"format": 1
},
{
@@ -1747,7 +1747,7 @@
"name": "plugins/modules/fmgr_system_npu_npqueues.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "542abb0381d9639faef078aeac166f928438d9c78a37157b95ab90bf0a16140d",
+ "chksum_sha256": "111865bcbf306a34dfcacf9911a8337d30b8e8323b4229704c15122a459e3f98",
"format": 1
},
{
@@ -1768,7 +1768,7 @@
"name": "plugins/modules/fmgr_firewall_vip6.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f35ddfe834eba6f46789fac872cd39c87becaaa366b30567a5cf195738c08107",
+ "chksum_sha256": "5423f8d6b373c04f901eba6b92353281c8a9670719f533535e9629dcdeeb1db1",
"format": 1
},
{
@@ -1789,7 +1789,7 @@
"name": "plugins/modules/fmgr_dynamic_certificate_local_dynamicmapping.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "60a925e6c3893ab1d2f9c2d0222f73f5c75a8e4834d71670de4cb84705ba0d7f",
+ "chksum_sha256": "ce5512b2c1822d6625df103ba7ed55c8b482cd9b534e47668d61c5cb73680325",
"format": 1
},
{
@@ -1803,7 +1803,7 @@
"name": "plugins/modules/fmgr_system_npu_npqueues_ipservice.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b727af02498dd912a6f27edd65acf1c59d25c76644950095842ceb591dade0a1",
+ "chksum_sha256": "0d1dfea59d984779d8628d3c2f2401920a2fb66449237a846c7b3f1405e43257",
"format": 1
},
{
@@ -1845,7 +1845,7 @@
"name": "plugins/modules/fmgr_securityconsole_install_objects_v2.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2627cd224781d7d180a0890f3235098ef8b7c8b7671b9c6bcf9b5328a64f9c14",
+ "chksum_sha256": "5f2fc1bb0ca13e9f39688ea0ec4f327f8425eec0ff99cd2b7a7552d8a65fe56e",
"format": 1
},
{
@@ -1922,7 +1922,7 @@
"name": "plugins/modules/fmgr_rename.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "14d93407c909b06f257eda8788692170b42721330a3a9c1b56b731f52f2ef53a",
+ "chksum_sha256": "06d5ac6ac31b9520f78ecbb1ab2d5e4ef56aae6c1f2961bc7b95af41615065e9",
"format": 1
},
{
@@ -1936,7 +1936,7 @@
"name": "plugins/modules/fmgr_user_flexvm.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9ab0b3e4c8c5d67c655312790724aa4aec1ed6ed245a83901ffcac6e36bd4093",
+ "chksum_sha256": "8d5ebdb2bf29b1a18b11b7e22c7a7668e3796a4a0ee422bcd885dc0783c8aadf",
"format": 1
},
{
@@ -1964,7 +1964,7 @@
"name": "plugins/modules/fmgr_system_npu_ssehascan.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "140b9d2ed4fd3858ed7de45d6736111cf6b7f9fec8e73c2473225142119dfb94",
+ "chksum_sha256": "86ccbbd3e606e4f9b52ea82b298c37ba392f27897747dcba0fd8b78520917ef1",
"format": 1
},
{
@@ -2013,7 +2013,7 @@
"name": "plugins/modules/fmgr_system_replacemsggroup_mm7.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6f4d9283dd877ae9155eb8fc15233871ec01646c59d5825cb16865c952b618b7",
+ "chksum_sha256": "b74b7a2cbf06cb1af06fd464c9370afa9ad631203366a5f51e924e5b3475e024",
"format": 1
},
{
@@ -2027,7 +2027,7 @@
"name": "plugins/modules/fmgr_system_admin_profile.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aae4713d7cf6ee79fe12816170e9174f3b1601796bd8d8b51d4e0669e1e2334b",
+ "chksum_sha256": "762931ab0e2e7786b5ed910ef43c3ec28e4efc051ecf3ff6c8ea230ecb947dfe",
"format": 1
},
{
@@ -2048,7 +2048,7 @@
"name": "plugins/modules/fmgr_wanprof_system_sdwan_members.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "27cd058ec9753a28bbceb6fce5f98e66fbc076b31262a01ddba341bb56000b27",
+ "chksum_sha256": "12027f7c84454b91d298fbf292b912dedaeb132e24bd6fbb4a01291e8f26cd24",
"format": 1
},
{
@@ -2076,7 +2076,7 @@
"name": "plugins/modules/fmgr_user_local.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "33074065f66cd4270995cf7f74e87d71224762c327d972c4203d447cd0ff4813",
+ "chksum_sha256": "5f461a51a76dbe4d815160e40410121acecb537870d0c44d1792e7f1f98d5c39",
"format": 1
},
{
@@ -2153,7 +2153,7 @@
"name": "plugins/modules/fmgr_adom_options.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "61ce873c1e2581023830c99c0b66849e6a81cee6175d7ca785d596618d7d7baa",
+ "chksum_sha256": "1918227db8563f2a45110a3b1325f76ade70f9d32a7d388808efc6e292dee9a3",
"format": 1
},
{
@@ -2167,14 +2167,14 @@
"name": "plugins/modules/fmgr_user_json.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "310ea3db09dbc4d31aae673b2b6511c9aa7d258930904b400322b1b18fd7ca94",
+ "chksum_sha256": "7363136f846cfccb8af00d24a8a39b2868f3ee80f5490cc4ede9572e70270bbe",
"format": 1
},
{
"name": "plugins/modules/fmgr_system_docker.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "64c95af6e03bc6b4b5be40748ac119406f6086607d4b47cb172da08d4805921a",
+ "chksum_sha256": "a00c1efa465f2e089074e001aa764ec9139212a0adbf15666ab2d5fc3688fa2f",
"format": 1
},
{
@@ -2209,7 +2209,7 @@
"name": "plugins/modules/fmgr_dvmdb_workflow_discard.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8c199a93aa8d062d88e2868fb9cca2ffe66c9ed1577be65ccd40281d5061a82e",
+ "chksum_sha256": "664df39ec1ac73e7c18f06809c00c1a5a3e64465a848012c265e5fc467eb9045",
"format": 1
},
{
@@ -2223,14 +2223,14 @@
"name": "plugins/modules/fmgr_dvmdb_workflow_save.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d41f5c244d12be3c16951e80b887265df5f6a08a1ed71b17e523508d73abdcfe",
+ "chksum_sha256": "6f1fc6eeb3bc046124e62a997e140775d33b3fdfb1ed0232f3f549202252fd17",
"format": 1
},
{
"name": "plugins/modules/fmgr_firewall_casbprofile_saasapplication_customcontrol_option.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7455621b45e0cbe4f79bd6df0059897be4b769dfd57a98c402402a4f00ad069c",
+ "chksum_sha256": "bf52bbfb9b06425fdd6cb614934b5c25240bfd25be5f02743b430756fcf2ba73",
"format": 1
},
{
@@ -2286,7 +2286,7 @@
"name": "plugins/modules/fmgr_dynamic_address_dynamicaddrmapping.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7efb355760d2185e265f76f55d516a65c46bdfedf342bde8bdc14d93f11abf21",
+ "chksum_sha256": "37d8e0f8b2e576f9083f00df317fd5a036d94904295ed26b81d77a73db3a426f",
"format": 1
},
{
@@ -2328,7 +2328,7 @@
"name": "plugins/modules/fmgr_dynamic_vip.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b00a362ed3db1d2b98c1029012581f2eecb48b23711341023bd2cb1ec8560ddc",
+ "chksum_sha256": "d7d7089d2f832cc91660576c8d26e809c2cece9a409efc785cba5393286cfc6c",
"format": 1
},
{
@@ -2363,7 +2363,7 @@
"name": "plugins/modules/fmgr_system_npu_npqueues_ipprotocol.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "12b3c3ec0be144676b5dfd38867c5b097ccd01d5a2fe4a8df5c139d16e397d36",
+ "chksum_sha256": "8f8772499f5904d585f29dec7d6017df715cb5528641ca507e606636fa690196",
"format": 1
},
{
@@ -2384,7 +2384,7 @@
"name": "plugins/modules/fmgr_extendercontroller_template.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d88ecce6485138c5513c5fb927a13709ebc389b5d3e65d5a4f1fd0b70f0a41ec",
+ "chksum_sha256": "b71f5852eff696d17e8164f64a8355c5163b891d6c948b7d1431fb3bbab0ae0b",
"format": 1
},
{
@@ -2412,7 +2412,7 @@
"name": "plugins/modules/fmgr_gtp_iewhitelist.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7622cefab9400ba06a9162e7d181f4cf62dbd00657d4cf0d4a0125350dc79999",
+ "chksum_sha256": "6e89e1b4382bb6ff036c194b6b8f64464cadc873b708402e13e8529edfa0ef54",
"format": 1
},
{
@@ -2468,7 +2468,7 @@
"name": "plugins/modules/fmgr_vpnsslweb_portal_bookmarkgroup_bookmarks.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "170cbeae3af3ddae36a0bf8cf365093d4f6c2bcefde4bde59ace3f2ea37848c3",
+ "chksum_sha256": "5aa5c8035c44b45bbd56d0faba0a0d6515e8f79c7d273bbac8271f30f2c6596c",
"format": 1
},
{
@@ -2496,7 +2496,7 @@
"name": "plugins/modules/fmgr_fsp_vlan_dynamicmapping_interface.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "91bcf3c2aeabdbfe007a7d9919768e937f78983e99172b1242f0d20698a2a683",
+ "chksum_sha256": "9483dd070aadcd1389135613c9027febc807991c489821898663e1a173cd8360",
"format": 1
},
{
@@ -2517,7 +2517,7 @@
"name": "plugins/modules/fmgr_log_npuserver_serverinfo.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "026d4e646e9b129fc0271b859bd127680fab28ab32202c3f7bbbd4b45e4fa726",
+ "chksum_sha256": "bf37adb85bfffcd729d9822be7160e133dd362a4973dbc7d43562e5fbe7a1c96",
"format": 1
},
{
@@ -2580,7 +2580,7 @@
"name": "plugins/modules/fmgr_pkg_firewall_policy_sectionvalue.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4e5bfe9d9968786da2f919f2a7a40a490c1d25779ca224987ce8afac0309de87",
+ "chksum_sha256": "1fa9ea157eb402f8625d175c929452bea2f86ba45bdbc772a1ef45e9fb3f6f26",
"format": 1
},
{
@@ -2664,14 +2664,14 @@
"name": "plugins/modules/fmgr_sctpfilter_profile_ppidfilters.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "da2b251e7b1d5fbac34aba499b322a63bc829d946e1fcf2bfbe032f66898782a",
+ "chksum_sha256": "2f74d7ae42921c172414f6ed48897ff8a741fa442f3c987ae3a4dadbd050a876",
"format": 1
},
{
"name": "plugins/modules/fmgr_dvmdb_workflow_revert.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1f9758608104b687a5c099440446efd41f7fcefcdde3c780aaab8e97d4b31679",
+ "chksum_sha256": "1b8ba88b873fed565a413c9cd828bb076ab963cde79292031fe6cb2e1d78986d",
"format": 1
},
{
@@ -2699,7 +2699,7 @@
"name": "plugins/modules/fmgr_system_npu_backgroundssescan.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "55edd552c5dbd528462b87690a658aa11f815e6b96c7353a72dc6cebd989a700",
+ "chksum_sha256": "6eded90bdb971c70e9f471bd0eefb4fe980807e865d7fb4a02c8d71bbe4e5b58",
"format": 1
},
{
@@ -2713,7 +2713,7 @@
"name": "plugins/modules/fmgr_wanprof_system_sdwan.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "885cc3a6104877f9c121ce60cc20d5822abb537cdd49e96785341c56dac3f803",
+ "chksum_sha256": "d0a1f6053ccfcee496e9a1ffc3e11dfaa4bb970daf24cdc77f01675c491b35ec",
"format": 1
},
{
@@ -2762,7 +2762,7 @@
"name": "plugins/modules/fmgr_dvmdb_group_objectmember.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "96c3c0636dcd23067e748b347228ef4377994f0b6f30bdf8330b9401b495619c",
+ "chksum_sha256": "455f14103fda608875f889967c77a9e90ccb9621647b843fc29243e3e3ad86a3",
"format": 1
},
{
@@ -2818,21 +2818,21 @@
"name": "plugins/modules/fmgr_dynamic_virtualwanlink_members.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be51b540812e923480ce0af08048751ae312ef92b5e298b76efb4eac004babd4",
+ "chksum_sha256": "d3fd408f1da51c6b6ca02e36ca2bf9d4c63c9882c73c26d21a5421df61e33019",
"format": 1
},
{
"name": "plugins/modules/fmgr_user_saml.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1dca6d0da53e02073d6fb344d9e8baf54f35035a8b938d45478559ba7e941777",
+ "chksum_sha256": "28fa09c27bf3d7cbbe50bd140a86399c22e1b1f120fb7e08a7e20a3ffcc5d196",
"format": 1
},
{
"name": "plugins/modules/fmgr_pkg_firewall_interfacepolicy_sectionvalue.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "36d3c9bc062a6b05dca6d026aac2d4b7cef5750a528a91f742c1487ae1a930c8",
+ "chksum_sha256": "0003a6788180037893874ac516f549fb02b8d38a3929990b5b23a1db13b2481f",
"format": 1
},
{
@@ -2853,7 +2853,7 @@
"name": "plugins/modules/fmgr_pkg_header_policy.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "62a1591dc1df51172a0439660083d8b36879f6e72fa93a6cbb7840466f00878c",
+ "chksum_sha256": "e253d14e0fca20bbba86b465217eb1366b37942bb5ebd3b8b80bfbed30107dfe",
"format": 1
},
{
@@ -2881,7 +2881,7 @@
"name": "plugins/modules/fmgr_pm_wanprof_scopemember.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "12e866cefcf8e155033ad9f5b81fcb388d9d076de0a241bcc815b3f4596e17f2",
+ "chksum_sha256": "90bc8b4da5cb1e62dbed76c2094cbe29a9a0727c1f370f34f21d65d96ebd8ea7",
"format": 1
},
{
@@ -2902,7 +2902,7 @@
"name": "plugins/modules/fmgr_user_clearpass.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f2e27faf6fd15de4595c52a8db016c4ac80ef8aa245245710a32dd7e4e9d101c",
+ "chksum_sha256": "2e91d3093be83ace97e2d8be804382a238f71644f9220f4dab12479be5aa4962",
"format": 1
},
{
@@ -2951,7 +2951,7 @@
"name": "plugins/modules/fmgr_system_npu_npqueues_profile.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "36f4b3099bd3d761305bcbb7b8510214141de344cccb55234b61a9973dbe74b0",
+ "chksum_sha256": "44e86012a97b5a34c2131787af0d92eeb838b4da986304b944722d26b6625c5a",
"format": 1
},
{
@@ -2965,14 +2965,14 @@
"name": "plugins/modules/fmgr_fmg_device_blueprint.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "84b54d4c56af80c6459b42b8ddfd16bca88d1e2b85ab0860d787fce571a6e74f",
+ "chksum_sha256": "3b01699e7ad2a4d0b8693de1876ee95e707b386f8d31d0a5ae085053d5f06692",
"format": 1
},
{
"name": "plugins/modules/fmgr_firewall_vip6_dynamicmapping.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6b3a54f8b09c8b22bd21cf82dcd90a142018f51a305af09a3fe620b755851dcd",
+ "chksum_sha256": "bf189c58d2dc0732ed7800e5b203cb7967a3fcfa805b38ace5dfe8e894bed30b",
"format": 1
},
{
@@ -2993,14 +2993,14 @@
"name": "plugins/modules/fmgr_extendercontroller_simprofile.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "21ed68226a143d41182028a9ef00a299af5a4ae3a85c7c40725fc85428f768f8",
+ "chksum_sha256": "7f26a51fb6fdf83a7696aee9cf301d57b6f6551fbc7423a27bbd95b5ac70816b",
"format": 1
},
{
"name": "plugins/modules/fmgr_fmg_variable.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d9f11226a2988048f26b325d661ace6b6f5383fa871312c94b11cbfe69296488",
+ "chksum_sha256": "8bb8a2da28360724c1009c1fbef1c606423587d59154fec89a028e4ef715a4af",
"format": 1
},
{
@@ -3042,28 +3042,28 @@
"name": "plugins/modules/fmgr_pm_pkg.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4fa8c3c71f4be4b11e4747667dcac366c5513936b6f95417427ac561297a056c",
+ "chksum_sha256": "9f6cdb1d7ebfab40805b961e679d68a2c87439b4f18a7fc670469de8840826e4",
"format": 1
},
{
"name": "plugins/modules/fmgr_devprof_log_syslogd_setting_customfieldname.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4575097cd83ba72d90ae673af53a5829fdf70ba1b0224f92794e30594506633",
+ "chksum_sha256": "04257065b7a646edd6b7f5d0ca60068f92298f0b9e7ef36a50c6c0a7ab01ab5a",
"format": 1
},
{
"name": "plugins/modules/fmgr_pkg_firewall_policy.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ee0e473222575e2cb686a40d90a7cc41aba4dfb81a1e0f4d677c666dd3edc9dc",
+ "chksum_sha256": "609982d8cd3c80ca5ae5e97c35a31e5bd6567aeb0ce9975c3d7ec6d1ad8d1de3",
"format": 1
},
{
"name": "plugins/modules/fmgr_system_locallog_fortianalyzer2_filter.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "126ca17b648ce34f5048ac43888fbadeb663322cb30b4a1eb42b158fe97adf02",
+ "chksum_sha256": "d748cbc967bdb0e96c92b43f1a883bb5202dd9996d013ac5f85f52ee0abcdfc3",
"format": 1
},
{
@@ -3091,7 +3091,7 @@
"name": "plugins/modules/fmgr_system_log_settings_rollinglocal.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ef3d3f0b8b3256357a285224896323d0278ac48a037acd48af7d2ffd1a7b01c7",
+ "chksum_sha256": "a2a77edeef4d65dd49b5ff862043e209df4569b34f7730f92e552ae2dd540b8b",
"format": 1
},
{
@@ -3133,7 +3133,7 @@
"name": "plugins/modules/fmgr_system_locallog_syslogd2_filter.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "18afc4438ad0cc3ce0310ede7526a1b5f6f6f1d6aece71331e19b76d8deadb72",
+ "chksum_sha256": "6feb689a085ad06e37855eb692f85dea16bc458064981531566d686d35bd46b5",
"format": 1
},
{
@@ -3154,7 +3154,7 @@
"name": "plugins/modules/fmgr_system_replacemsggroup_mm3.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "db5248283353a8a2887744ea5052d509957df55ba21d1d09b0f0cf30bd80f253",
+ "chksum_sha256": "a35cb22e187a48b3e0b40e467872714bc9a59ec05f534ade3d3139e0405f3ff9",
"format": 1
},
{
@@ -3168,7 +3168,7 @@
"name": "plugins/modules/fmgr_wanprof_system_sdwan_healthcheck.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5458bc65951fa4887d48d95286c6c507cbf01007ed6f3c4bb6d8366d50658d5c",
+ "chksum_sha256": "f85c2f9483d001f03a436a915db974636ea5bed91a8af439f2025c2bfa99121e",
"format": 1
},
{
@@ -3196,7 +3196,7 @@
"name": "plugins/modules/fmgr_firewall_sslsshprofile_ssh.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9c8d53f0922b54e0c7eb2e669afa7de4ff4f7ccd4ae6bb6387a4225bc586a039",
+ "chksum_sha256": "d578e5a1957fb1f0d29501259449771e99f3f06d85cafc5819d7183941d22dfe",
"format": 1
},
{
@@ -3231,7 +3231,7 @@
"name": "plugins/modules/fmgr_system_locallog_syslogd3_filter.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "37d0eda612dd62077b7582c84caddb93bb8e46ea89b347957fddc5873d7fae6b",
+ "chksum_sha256": "0db68f6b5f1fac0da5df8083e2d312cbd223d7f08eb0b1d4067c06a386804a17",
"format": 1
},
{
@@ -3273,7 +3273,7 @@
"name": "plugins/modules/fmgr_vpnmgr_node_ipv4excluderange.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "36943193576e4aa6cea522c5615e3900286953363990cec4ae527085e38e21ed",
+ "chksum_sha256": "c2907e73b889e6688f581f951f4c4d1fd1ee909ef3d0480f334080775498ecd8",
"format": 1
},
{
@@ -3287,21 +3287,21 @@
"name": "plugins/modules/fmgr_firewall_casbprofile_saasapplication_customcontrol.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "67abb06772f8b92f5bac806b473f1b30a4272ee750a9a124efe7f3ed1e333edd",
+ "chksum_sha256": "fbebc331cff45dab948c17fde5b58d72650adc6e3fdae98faef4d7b8ec1f65ee",
"format": 1
},
{
"name": "plugins/modules/fmgr_system_locallog_disk_filter.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "81833f75a8143c32dd8dfd09d89f90d312d0c2c849c7c8724f6cab984d75b896",
+ "chksum_sha256": "c4a24a3d712ce339f691e221136bf9497743fd668c9752b4a0d14d5c7d360e3c",
"format": 1
},
{
"name": "plugins/modules/fmgr_devprof_log_fortianalyzer_setting.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b719d7d1cbdd3a8bbb4404a25c5a516616e3e61a11e94cce752a6fc6a370971c",
+ "chksum_sha256": "79201546cdc08c55922faf12ec792dbb30558b35bad057877dd9f8218252e6cb",
"format": 1
},
{
@@ -3336,7 +3336,7 @@
"name": "plugins/modules/fmgr_system_npu.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aa9840a3ad241f690a5bfb14aeffb3d4fc72f8a83fe6c973d66dbcf5c4df40d6",
+ "chksum_sha256": "ca511223194bb5d62af1cf43e6fcf7917b6c11ed99bd1ffbf7727e79a53c316c",
"format": 1
},
{
@@ -3364,21 +3364,21 @@
"name": "plugins/modules/fmgr_dynamic_virtualwanlink_server_dynamicmapping.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "447ed08b4a9e5c86959276053526f737357101c5f6356a0410b6298200541e89",
+ "chksum_sha256": "37845915201fa2d722b1d1bfbe3facea6b44ca8f68b5e1ad0bdadecb1f9e1ea3",
"format": 1
},
{
"name": "plugins/modules/fmgr_sys_task_result.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f451983703a5afaa52f6531175ac2c98f75ba77cfb9ab86c5d2c5fef53f50a61",
+ "chksum_sha256": "d3ca5ad25126a93574a966f13fd6c83031236d0e4df4fe800fabbd74bb33167a",
"format": 1
},
{
"name": "plugins/modules/fmgr_system_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "94bf756c001f1e23817a78ba2038b832f0d3313a3a0c326eb94b160a54663254",
+ "chksum_sha256": "69ac327639c1da46638a942751e77c109d42662549b7b6d661a061024a86fedc",
"format": 1
},
{
@@ -3392,7 +3392,7 @@
"name": "plugins/modules/fmgr_devprof_device_profile_fortiguard.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b7fff7b25b6ac3ae537cdf791bb282108860e7337937cdb3a105667904d81bd1",
+ "chksum_sha256": "f414b2be6907b84da63a32ab5283fdc84671a06d073d3956b2023f30940f8330",
"format": 1
},
{
@@ -3406,7 +3406,7 @@
"name": "plugins/modules/fmgr_system_meta_sysmetafields.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "73123f4ddd1ffea36d3bef1a5f6ba30d6678d489186bd4d97b52682fe2eaec77",
+ "chksum_sha256": "54e569a6c7cfcae8360e28f6b249b4ad0be1d729540cfa40a873818779dbbf8c",
"format": 1
},
{
@@ -3420,7 +3420,7 @@
"name": "plugins/modules/fmgr_pm_config_pblock_firewall_policy6_sectionvalue.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "23eb96f70856c56342ec46ae4ef37009a21dbeafe4d59cc289972c7b8d1f45a1",
+ "chksum_sha256": "319afb34b8fbd2fcd3fc91cfbf99eb5f8191edf9835628ec2c77a7beb938a4e0",
"format": 1
},
{
@@ -3434,7 +3434,7 @@
"name": "plugins/modules/fmgr_fmg_variable_dynamicmapping.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9c41c8edb58de1b0302b8aa9caa048c1f55f36a788fcf1557452e0a6e07db174",
+ "chksum_sha256": "0c0ccd2e10617982603b5c448ca68dac38194a5f012b71515a230e6309629686",
"format": 1
},
{
@@ -3469,7 +3469,7 @@
"name": "plugins/modules/fmgr_dynamic_interface.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0a808d49c44aef32a904c9972f897396157ab483c775087603ff2b6d463101ea",
+ "chksum_sha256": "2ff023dbad30442d2d37ca29080d9fb1b4819b6c9fae594ffeec8ca35dc39854",
"format": 1
},
{
@@ -3483,14 +3483,14 @@
"name": "plugins/modules/fmgr_system_locallog_fortianalyzer_filter.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "79b77cb5cdd0f8d4b2880f2b576bf091a4b6224016466fd7225b55376823e85e",
+ "chksum_sha256": "e2a48d004b8ce657b65271072ba6e5c1ae00b8dee3eb4aa9fe4709f6f1f61f0f",
"format": 1
},
{
"name": "plugins/modules/fmgr_pm_pkg_scopemember.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec75aea7d1a6069ddd44646df6b3158b9e4dbe184aee568594c4d94526de5c37",
+ "chksum_sha256": "e6389071982cdd56c24869ccb8ced93035a228b96c02280ba0cdc4a64521a36a",
"format": 1
},
{
@@ -3511,14 +3511,14 @@
"name": "plugins/modules/fmgr_sys_cloud_orchest.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8c6ab0dd29bd7656f78699f5baa2fa70f473fe3a8b8fe208f5ccd23163e68477",
+ "chksum_sha256": "ec7ccf511463eed22a110971aab160c891ceda54410972f0bf5877e6d1d53850",
"format": 1
},
{
"name": "plugins/modules/fmgr_move.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f553d4e478f13be9dd3a85372f6510ce2b4cef3d26fa2c36e55238e19747c6e6",
+ "chksum_sha256": "bc45815b3925d05e19b133ad9b4fa714ea3f1a702f923f84e0491b225d2ac922",
"format": 1
},
{
@@ -3539,7 +3539,7 @@
"name": "plugins/modules/fmgr_dvmdb_folder.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d7d2c519e9ceeb55bf28603e45fd45ee842e5e18c9f1bc2e21022545f877de38",
+ "chksum_sha256": "c843b39622c3fa8b9c9e7e6a145c03911c596cd2555142a47719859af6636b1e",
"format": 1
},
{
@@ -3560,7 +3560,7 @@
"name": "plugins/modules/fmgr_system_npu_dswqueuedtsprofile.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8d5898659bd8edc004a2124155a7bb0a6c9120d8db6065dec454d90d8bebd6ed",
+ "chksum_sha256": "e42452df83bee5da3e6bd79efa8a968fd82439ac2f113c6201de0c6a04b9513f",
"format": 1
},
{
@@ -3602,7 +3602,7 @@
"name": "plugins/modules/fmgr_pm_config_metafields_firewall_addrgrp.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "78004094094eeed8a120de1f2d625a290e2631efe3d427e2407135ca7f778ed5",
+ "chksum_sha256": "10078f6ff6b66d08f00470beb1b8d88a880ca355314a60d45a5fcbae79efe14b",
"format": 1
},
{
@@ -3616,7 +3616,7 @@
"name": "plugins/modules/fmgr_user_vcenter.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c76c75058dfd5d56f65b5b7c5b49013e4c0b3b75f824d1ff09cf2ec9ef41457d",
+ "chksum_sha256": "e441709346d364d00eb31fffb0e2e008446fff36f26c4f0748d5df5d2bfac8d9",
"format": 1
},
{
@@ -3658,7 +3658,7 @@
"name": "plugins/modules/fmgr_webfilter_profile_ftgdwf.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "97e8f79a3288c01b321e7b09dbcdb1aa2b9559aa3970f0a9365103afc65bf554",
+ "chksum_sha256": "f1f452baceb5e01ce8f2e826ba6904ea8ec395818295d8b49ce9e1b40861e7a1",
"format": 1
},
{
@@ -3707,7 +3707,7 @@
"name": "plugins/modules/fmgr_pm_config_pblock_firewall_policy_sectionvalue.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "70e67aa3a40b63572bda945a884855ab8d48f4ba2314cef717ad08b17cf5dece",
+ "chksum_sha256": "305865712849e60c59fdaf5cfc84ff5748417302871bac5ad3037d0a83fb0059",
"format": 1
},
{
@@ -3742,7 +3742,7 @@
"name": "plugins/modules/fmgr_firewall_addrgrp.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ab7b43ba3077601ef61c2d11ed4cfaf4ef4d999700bbac6a1538a4d2b6124fb9",
+ "chksum_sha256": "822113656bcfbd64bd8d1d6e394fd1d462046a2e6f7a83f2422a7fc60c50d838",
"format": 1
},
{
@@ -3756,7 +3756,7 @@
"name": "plugins/modules/fmgr_securityconsole_cliprof_check.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d57f0876e015e2335d6b6babf619c2dcfda90f87dc3c1006485a72a43e72bd9d",
+ "chksum_sha256": "205af9fbfe012141691e862eef3b92af713323d870356bb0fd07c4af5dae7dee",
"format": 1
},
{
@@ -3770,7 +3770,7 @@
"name": "plugins/modules/fmgr_devprof_log_syslogd_filter_freestyle.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "918cc11d870e55604f6cf6dcc0cb7a3ec29cdb82f463ea22b9a73d40309437dc",
+ "chksum_sha256": "bc9c5461fbb9b9608e4a01381f4f1fbba97eedfaa38a50e103e4e45bb7de320a",
"format": 1
},
{
@@ -3784,7 +3784,7 @@
"name": "plugins/modules/fmgr_system_guiact.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "30a0bf83951f1ed322cc94acb028ac776792e2c41797f657718c52f3259a7962",
+ "chksum_sha256": "6e1a9fa5ae5203a2479ef9b805aeffa8b23303e2ec30bf825d6fb704731672ca",
"format": 1
},
{
@@ -3819,7 +3819,7 @@
"name": "plugins/modules/fmgr_user_krbkeytab.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aa30d048e06d47ab87170956fccffd8fa00067633723204eb30ac7c579e6e56c",
+ "chksum_sha256": "87d33b15e0d8595657f7b4907c1fdea6bf69f2bb9ec321cc762bcc8b86822303",
"format": 1
},
{
@@ -3847,7 +3847,7 @@
"name": "plugins/modules/fmgr_system_ntp_ntpserver.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7ef714f6e3ff6a7909f331d3b73a9319608fa88255110ea1d4b8890b796b78d9",
+ "chksum_sha256": "b226356cac1e0a1640e6d8065203ba00836ff63a66159b0bf14f4278133c919c",
"format": 1
},
{
@@ -3917,7 +3917,7 @@
"name": "plugins/modules/fmgr_pkg_firewall_policy64.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "90ade2e98c2ea2b0fa5e33cdf7c49bcbed1aab8f4bbd671bafb4081bc39a0fdd",
+ "chksum_sha256": "fb3290c6113b26cb435c6445a72959cf3344072601f93120650ca50425ea245d",
"format": 1
},
{
@@ -4001,14 +4001,14 @@
"name": "plugins/modules/fmgr_pkg_footer_policy.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6bf4abf1d7040606b4a8f197434863854210ef3a38b1c6feca7b5d6c906bca79",
+ "chksum_sha256": "17174ac116f05389f689d59eaa8be49db5fc9960b18b5f4240e3550b363a9772",
"format": 1
},
{
"name": "plugins/modules/fmgr_clone.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f69ccba0418baae9dccf0b35ef1a07af69f430fde5bff63df99cbbd4185b07af",
+ "chksum_sha256": "0458de18e49e7abc7296f66aef22bc4caf74be2d1e7fd97a9ada2c7ed739873d",
"format": 1
},
{
@@ -4022,7 +4022,7 @@
"name": "plugins/modules/fmgr_pm_config_pblock_firewall_policy.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "612931bfe36082bead62e6873d5734f30493edc7a877f0c89859ea34d23f559d",
+ "chksum_sha256": "10bc0926522e0b6297f11cdd9c952f9f4104de73146b19b14a2e2e2f901b7e8b",
"format": 1
},
{
@@ -4071,7 +4071,7 @@
"name": "plugins/modules/fmgr_pkg_firewall_interfacepolicy6_sectionvalue.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a67f8184b11f779b39a0888c7edb80f8abd04156771a0f7e91e1aa17fc357801",
+ "chksum_sha256": "a021b12006dd66c572dd8a8e4775da11666d6c9116a06a33e25afe712d80499c",
"format": 1
},
{
@@ -4085,7 +4085,7 @@
"name": "plugins/modules/fmgr_fmupdate_fwmsetting.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "98eff8ea5896d39bbfe3cfab4954f3405eb4b84d61454a5a4403870b747949df",
+ "chksum_sha256": "6b47c6a62e0a7f49cb1006b582f971e0697d576469ec561992d91f732935b637",
"format": 1
},
{
@@ -4106,7 +4106,7 @@
"name": "plugins/modules/fmgr_pm_config_pblock_firewall_consolidated_policy_sectionvalue.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "abef0e5823bb652fa5ed34fe33df6b1a5742fee65601453d02fb687137aad612",
+ "chksum_sha256": "e0d9fcd2f3a54f5244bbb8e429524b2443c286a828b7f65637556525695d1d3a",
"format": 1
},
{
@@ -4169,14 +4169,14 @@
"name": "plugins/modules/fmgr_system_locallog_memory_filter.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0919a460351124e1c8a06193726fbcc3829d93227ebd79b3751b23859cdb4391",
+ "chksum_sha256": "65e90050dd380d190a50e592cb120b9881f2b1dcb540ea3d85cd4e66ab6d3438",
"format": 1
},
{
"name": "plugins/modules/fmgr_vpnsslweb_portal.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8e6f3cc201c5640f9b3fd5e6e54eee5c6f2aabdff32afb32ea845e2729207196",
+ "chksum_sha256": "4190c3697aee0eb13a1c9d12837440817fa4d669c6df6105cabb6de2a71b5105",
"format": 1
},
{
@@ -4197,14 +4197,14 @@
"name": "plugins/modules/fmgr_system_socfabric.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b4265bf35893b6983c05ba0fc800c06cddf0ba97a3104bc765921cb9ad548d2e",
+ "chksum_sha256": "1666304bae673041b67235db994f0584f77c0265a5c1dfe1a191f5b40787ae1b",
"format": 1
},
{
"name": "plugins/modules/fmgr_system_npu_isfnpqueues.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e88b6e3ed9a1fdc5b2e0517e11d369bcf19af95aa535c3ef23121f3adce0118c",
+ "chksum_sha256": "47ca033de40946d9214e7a3321bea33a7a19210112a17b09dc0aefdf0b4ab742",
"format": 1
},
{
@@ -4281,7 +4281,7 @@
"name": "plugins/modules/fmgr_user_ldap.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "617f9f870638b4d2e9c2c210f1bf57704a28416282887f2fce9e7537c41823fe",
+ "chksum_sha256": "e7b9d7b02166053b2676138eed44659adcf79aee4f17abb147457a08198abf0b",
"format": 1
},
{
@@ -4295,21 +4295,21 @@
"name": "plugins/modules/fmgr_pkg_firewall_policy_vpnsrcnode.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cee7959b334820ba4ef9f8b7245f0feb6d28dde9b4fd10c871f31869feb57868",
+ "chksum_sha256": "dc6c57362cae3f69863b192fd3914a173579c5fee9e2d9b59e9dbc0751abd3e2",
"format": 1
},
{
"name": "plugins/modules/fmgr_application_list.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0cfc871dcb2fe1dd3d092d553107ba2abaf2d2b8ff617486bab4211e887d53db",
+ "chksum_sha256": "8b598a226d57e555f4a0ec5c09241d65e14fc5374a5a00d85654906f52c50793",
"format": 1
},
{
"name": "plugins/modules/fmgr_system_locallog_fortianalyzer3_filter.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "40af67e61ebe7bb7a764eed2d6aa86b8be1a23ce3f9aa7cf35c707d5fdac011a",
+ "chksum_sha256": "df0386b907a6758de734806ec6c1bba491e4d913147fb598b67d5f429ce7c5c3",
"format": 1
},
{
@@ -4344,7 +4344,7 @@
"name": "plugins/modules/fmgr_log_npuserver.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1d44c54529f72608b88637052a5df29779b6e5ee25ff2a096ba0e59f62b56998",
+ "chksum_sha256": "796994a5bc4104133c2a15c6192903c794d579d7488aaf1badcfda62b927dd71",
"format": 1
},
{
@@ -4365,7 +4365,7 @@
"name": "plugins/modules/fmgr_extendercontroller_simprofile_autoswitchprofile.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6c6c12e7868d41bedf4c00fffb8d63045657280fd376ba6881de3afaa0d4cc5a",
+ "chksum_sha256": "4b29e09bc81987708ba36c0a77e9abd33415c29145fb64d83020efbe3b9a7d91",
"format": 1
},
{
@@ -4386,7 +4386,7 @@
"name": "plugins/modules/fmgr_firewall_ippoolgrp.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aac19dc1f08c691b95ee67abee1db34496cc1b461779685e275d4dcb0e6060c4",
+ "chksum_sha256": "6a7cf977f9375b08fcf0cabb68dc86dbb3bd3e33d30e28d772d738845004d7c6",
"format": 1
},
{
@@ -4400,7 +4400,7 @@
"name": "plugins/modules/fmgr_endpointcontrol_fctems.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6c7100921a88516dec08ed4acf106b50a5775cc87abee11077aef3dd97f3cb13",
+ "chksum_sha256": "a1312f8df88a0d86fdd80e560914dd02869141b3fce73ef87073448f6b10f5c8",
"format": 1
},
{
@@ -4414,14 +4414,14 @@
"name": "plugins/modules/fmgr_system_externalresource.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "31f9f753920c80a478220100df7beac55e1f7f1b6a8cda5ff529ba3c7afa057b",
+ "chksum_sha256": "9c2c74ec4eb1bc02e94f524ee9e74743285c09e9d9bc68893cc9f642b245ff69",
"format": 1
},
{
"name": "plugins/modules/fmgr_application_list_entries.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "904eb1591954930a63cd86577445c6fd1c6386900837a4f0497839f85999f5be",
+ "chksum_sha256": "c493db68092215784625dd978f515777b85c0ca5583168958a6a7bf4ce7d0a1a",
"format": 1
},
{
@@ -4435,7 +4435,7 @@
"name": "plugins/modules/fmgr_pkg_firewall_proxypolicy.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e469e518b341d726883db974f35104a3fa91688684cba76074815496f37fb0bc",
+ "chksum_sha256": "f64a5c5e3dd66fd7c4ab0d4c7797efb1045759c6e3a78f59b00cdf83157974dd",
"format": 1
},
{
@@ -4470,7 +4470,7 @@
"name": "plugins/modules/fmgr_system_npu_portpathoption.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "712b519c36d6a2fd40ea2616ba41b1b7229cd945eef6b871c87985e3135f0dc9",
+ "chksum_sha256": "dfffe90513530e65fc41dbb1ed0d71e18be70a3a8526179362652e6fed5c614b",
"format": 1
},
{
@@ -4533,7 +4533,7 @@
"name": "plugins/modules/fmgr_log_npuserver_servergroup.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be8b04b4ada709f3b567c7d2914380df280e3bd6c9201076f3bc5bb6b17f71dc",
+ "chksum_sha256": "e2b55c93daab1743ebb1df055cda524fa308e03cd22f890052ae3d0b917ccef4",
"format": 1
},
{
@@ -4554,21 +4554,21 @@
"name": "plugins/modules/fmgr_user_nsx.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3e72702441765082ccabb38c9ce5b494322880fe1ec2cdd216392129175578fc",
+ "chksum_sha256": "25972895e5cacae985cb7b6ba4db55ece5feb6f7647afe21ca88d519a89bc197",
"format": 1
},
{
"name": "plugins/modules/fmgr_devprof_device_profile_fortianalyzer.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e7ec51b8bf59eceb4809084a9aaca2d93750c10297151beee8e23fdb9873fa0d",
+ "chksum_sha256": "7b9fbb83da5d352d35b71a0352e7bd0be4ac16f55133133419cb1af1a58c6167",
"format": 1
},
{
"name": "plugins/modules/fmgr_firewall_ippool.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "48b3bfa5e16361223a766dd178526feb46960d98236be361a496192966119224",
+ "chksum_sha256": "86d9d332189fe7028f2c9a3602c8d5b53c9245fe0b15466dc0511f86f7a12f16",
"format": 1
},
{
@@ -4589,7 +4589,7 @@
"name": "plugins/modules/fmgr_dvmdb_script_objectmember.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0405bc6a55c425a51aec403c86c4ba149526011e4955bd6936f6ab2b5db388bf",
+ "chksum_sha256": "7bf6b798e8cc01bb292decd3c3745957c64cbf36b5be1cb04bb750c9bc1a318f",
"format": 1
},
{
@@ -4624,7 +4624,7 @@
"name": "plugins/modules/fmgr_dynamic_virtualwanlink_neighbor.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "01f0fcf21fc694af02376d4c9a728d361b66ab252dd3e6992fa7e60ebe0d4952",
+ "chksum_sha256": "ead20f9d45966bfb43571d54c5363a8c7ce82eba35cb5950317e6648a36d2956",
"format": 1
},
{
@@ -4638,7 +4638,7 @@
"name": "plugins/modules/fmgr_user_group_dynamicmapping_sslvpnoschecklist.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ea2c5a3fe6d6df15a5d93d563371ec29d333080b97d9d160db6f67cf60bf7dca",
+ "chksum_sha256": "b8f673e6ed86513b85b29fa6cfeda05269ffcc37de152faf0d2933c20d3fdee0",
"format": 1
},
{
@@ -4687,21 +4687,21 @@
"name": "plugins/modules/fmgr_cloud_orchestration.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "726e9b2b5605c8aef7e1d5daf7e7b2273217d95cbdfd95779adafde36c3be21b",
+ "chksum_sha256": "e4043860a76b73d6d3e9415762417c5dc44d579b6ed26dcc04c335da775845db",
"format": 1
},
{
"name": "plugins/modules/fmgr_pkg_firewall_policy6.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cfd228b1a3bb8ec44f060e1c572cc0b599e94863484c67863c87e26b990009ce",
+ "chksum_sha256": "e55af6de0acecf5dd500025e86f0e71756084002b66255686ee959fb6f334163",
"format": 1
},
{
"name": "plugins/modules/fmgr_dvmdb_workflow_submit.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eab009b2be02a9dda1fc9a063fa0373ef72c3ea40a5226b8eb8090d4ebaaa0a1",
+ "chksum_sha256": "87576dc35484ee82d572b174068d8c7a33147b8d7b286ebe4548fda1d9a77ef7",
"format": 1
},
{
@@ -4785,7 +4785,7 @@
"name": "plugins/modules/fmgr_system_npu_npqueues_ethernettype.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9a0a41f87c41f08fb33d79b21dcd00b1931b04728fff4b40fb39fb2591f136df",
+ "chksum_sha256": "44232f73c6300d28614f9f725c77e7ad9ce5d44e9018f2dcb239212e0d941ad6",
"format": 1
},
{
@@ -4848,7 +4848,7 @@
"name": "plugins/modules/fmgr_pkg_firewall_policy_vpndstnode.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cef405ecaba1eb9381a4e92ddeb3acf0b91a17b6dae44b7942a4b319e8e677f9",
+ "chksum_sha256": "57d48fa7051aab0e955c6f8cea73511d84bd7e7dce55587451afde8714e71082",
"format": 1
},
{
@@ -4869,7 +4869,7 @@
"name": "plugins/modules/fmgr_firewall_multicastaddress6.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9e01ffa293f47a13cf8614c7cb81629b239ce0913defc8e3da334ed2d930ff20",
+ "chksum_sha256": "f71c5af29f5be792a966675406e80b1b26eebd7ca246b920f8a9f44d21f03420",
"format": 1
},
{
@@ -4890,7 +4890,7 @@
"name": "plugins/modules/fmgr_pkg_firewall_policy6_sectionvalue.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a09e6ed7d63d56590cfc487652051e6ddbae3d58b0c70a5f5f482a8fd5ce2a87",
+ "chksum_sha256": "02c3fe64409e874fc26e00e11661b02ec9412812a07b81de42f7588088d7d109",
"format": 1
},
{
@@ -4932,7 +4932,7 @@
"name": "plugins/modules/fmgr_system_replacemsggroup.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6a2f9c4212f4135cfbbbf4feb8fe82eff5801a8a842200b290e2d320e4256e42",
+ "chksum_sha256": "e5f4819bc83dec9ef45cfbc106ffd897d3243b3f5b276d2502f9418e527cfa32",
"format": 1
},
{
@@ -4946,7 +4946,7 @@
"name": "plugins/modules/fmgr_application_categories.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2c1882f95b05ff5ee19c0b7fc543f254dae81a5eda3ab7a4dc7b4c393b224468",
+ "chksum_sha256": "841a6cbd5e4f671ad1e4783e69d87def2f4e6001a20c9fea258facfd7fc25db2",
"format": 1
},
{
@@ -4960,21 +4960,21 @@
"name": "plugins/modules/fmgr_dynamic_certificate_local.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2d47223d9f0376ef9500fbfcaa582ef9ec6cda25ef3153842a0492f0eee6aa47",
+ "chksum_sha256": "9581108789d9c975e0c7277df5168f872399fdd8503032b70659fd5cd2d3d309",
"format": 1
},
{
"name": "plugins/modules/fmgr_devprof_system_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "905e4df7d53ea1d9c3a8fe14dea0e57d98313ddff131abda896d846d18ad2543",
+ "chksum_sha256": "5abee17956cee2c3e414e3af888ed3c6109817d2a26a059532a61d8e08349362",
"format": 1
},
{
"name": "plugins/modules/fmgr_devprof_log_syslogd_filter_excludelist_fields.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "639407b8b18426f7a98926dd6f300c1ddbf5b6add51741547fc7db85f1e77229",
+ "chksum_sha256": "dd7e53b58ca3828b281ea83fbbf10ed97ba27195fe220ae244ecf1b6f83d3a9b",
"format": 1
},
{
@@ -5058,14 +5058,14 @@
"name": "plugins/modules/fmgr_firewall_vendormac.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a7173601f1a1bfc61e98b8e0d7cca0fa83ea52b881f8e30c1f1ed024db13571f",
+ "chksum_sha256": "56da8c7106a6db1d724a6bb29f9ec40ec8bda85a6f5cc982d172d3f233894640",
"format": 1
},
{
"name": "plugins/modules/fmgr_metafields_system_admin_user.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c0ef697bcb10c07cbad4bd2f23cd382b6a8c3d70ca0b62c0c97543b43e80f594",
+ "chksum_sha256": "862bb236efd649f1ae925e82c021236a26c2498f613bd0a9f75d6ea76a6447b3",
"format": 1
},
{
@@ -5128,7 +5128,7 @@
"name": "plugins/modules/fmgr_cloud_orchestawstemplate_autoscaletgwnewvpc.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "54806808b719f2883097dbde169d045dbac9f9651b04675a0e32c91b591e9b96",
+ "chksum_sha256": "963fc73019f1cec881efd57001a11fd78bcefe61ed4e3d035d9c598542740cbc",
"format": 1
},
{
@@ -5170,7 +5170,7 @@
"name": "plugins/modules/fmgr_sys_reboot.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cc68ca8d1aa1cb15de2efc36dbe8d068db0632542fa2c0932c7bbd1065507fd1",
+ "chksum_sha256": "6b1ea03d6663e3d23dcb696f2a5fca0bb14bf7c145c1a2f83d06c03f02d6201d",
"format": 1
},
{
@@ -5191,7 +5191,7 @@
"name": "plugins/modules/fmgr_fsp_vlan.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f972fec0fac024b5b100dc05ce8422e25b1684d3ab3081d95a7fd86acf9e0236",
+ "chksum_sha256": "24dc37d4d4d89c54d533d33f1373b1f797c6abc692ddae8f0180678b074186ed",
"format": 1
},
{
@@ -5268,7 +5268,7 @@
"name": "plugins/modules/fmgr_system_log_settings_rollinganalyzer.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a3dcd6ee9afc01872b3e0c92296d28fb8255db78482ffd6c20c5298ef950a22c",
+ "chksum_sha256": "46bc3b89d6441d57ed4507a95aaa12565526e859fa7912faf038ce4d5f929725",
"format": 1
},
{
@@ -5282,7 +5282,7 @@
"name": "plugins/modules/fmgr_system_log_settings.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8901640b805bd0990e553ef119b7ecc5b13dab1f7f82dc208333049d23cd5007",
+ "chksum_sha256": "b6eaa3e9e0150588c53017cee4c2d5c771e14f5683476cc143cadbe6441369a7",
"format": 1
},
{
@@ -5296,7 +5296,7 @@
"name": "plugins/modules/fmgr_system_replacemsggroup_alertmail.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "81e64a359de15613be9fc7ce617b8522d28da5c262574f6c9db01d09137aaa0f",
+ "chksum_sha256": "b5a5b7c5c304b667f939898f1a6d93d1b3c53110d2343bdff2e554944def5dd1",
"format": 1
},
{
@@ -5317,7 +5317,7 @@
"name": "plugins/modules/fmgr_pkg_firewall_proxypolicy_sectionvalue.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e15dd26e20bb6d8dcb7e0992ae8030d817adb2d005794311a97d6fbe2fba9eea",
+ "chksum_sha256": "c15619930e6cf274469417181120292634828829b55689083631c29c5a8b3226",
"format": 1
},
{
@@ -5394,7 +5394,7 @@
"name": "plugins/modules/fmgr_fact.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d1b648da52e4a0f1b6a6440b2335a455cd70360a363b7bb41af02331b49ececd",
+ "chksum_sha256": "40495ad44bdced71f975772380ecbbd4996c08baa1279784b1129e09dc665a50",
"format": 1
},
{
@@ -5422,7 +5422,7 @@
"name": "plugins/modules/fmgr_dvmdb_adom_objectmember.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a25278310c99987d517d99de588510ea7deb883db09316a4f3bc46739ac36369",
+ "chksum_sha256": "3aa2d610627bfb923983519194a3fc9f77cdaf7bc5dd4ded1ceb824d52b11103",
"format": 1
},
{
@@ -5485,14 +5485,14 @@
"name": "plugins/modules/fmgr_dynamic_vpntunnel.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "25adedbbaee6d900d4ed5cfb567f65098469bedadad66e967ee39c63868bc607",
+ "chksum_sha256": "9a59e43a8a58b610d47af7aa4e862f9ffdb4588633c8d3ef4d4815be25b29a53",
"format": 1
},
{
"name": "plugins/modules/fmgr_user_fsso_dynamicmapping.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e88c4adbbb0d438c9dac6b41d89885643390356c49dea3d65b3c5969b7f79597",
+ "chksum_sha256": "fdc901e1d619858bae483e0cd45510e88d726999aa880315a076f04222b3bcef",
"format": 1
},
{
@@ -5506,7 +5506,7 @@
"name": "plugins/modules/fmgr_vpnmgr_node_protectedsubnet.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "74cb0d9dfb092ba1e4f19856dda926889d3049e13d1fccfce296e6bb44b0fb3d",
+ "chksum_sha256": "d2b41a8fbfa15f4d71dcf116889ff0332ee4dca30b4b43d1cded513d2f53cc81",
"format": 1
},
{
@@ -5527,14 +5527,14 @@
"name": "plugins/modules/fmgr_system_npu_portnpumap.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6ae6404281dadeed042126b0128fd92a5d2cb2d462e4e5604340db6792b0be20",
+ "chksum_sha256": "95e6021039114a6562f17f406d3b8a9d5bd263092dc784a68520bfeca9458306",
"format": 1
},
{
"name": "plugins/modules/fmgr_firewall_address6.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ac75d7cad3d4dd1cd3512855819c24c975f70a7581b34002f138abebe19a98cd",
+ "chksum_sha256": "e0509d624143f6c506685887a232674cb733de26a17218fa7aac3c94e45f69d2",
"format": 1
},
{
@@ -5555,14 +5555,14 @@
"name": "plugins/modules/fmgr_pm_pblock_adom.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "472a46f6fcd9375d335fe09cb29c8c9faf53d48e2c9918d4ec9c37715107d033",
+ "chksum_sha256": "7a50f98913b6f8efabd4564c45bdcbda23bedf16469e7b9fc3bf2947023fba9e",
"format": 1
},
{
"name": "plugins/modules/fmgr_system_fortiview_setting.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "00274dff20409666c2e2ae674e71740bde5fbe0ff53d180ad98e623e7bff8753",
+ "chksum_sha256": "b8e8525e31fb148f4938d2b489fdb254be6c64efe3257763777b6bcb803dfff8",
"format": 1
},
{
@@ -5583,7 +5583,7 @@
"name": "plugins/modules/fmgr_vpnmgr_node_summaryaddr.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f497fe1ab78c18ca05bf84399073814a629cb713e267857adb3d97b5f16d8e43",
+ "chksum_sha256": "10ba799d9573d3c1640c020c292ffba0b33256fc39f5f14e78bf8b311f7dc28c",
"format": 1
},
{
@@ -5625,7 +5625,7 @@
"name": "plugins/modules/fmgr_system_npu_portcpumap.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b9a668d6f50168328de2a9fe703b34437eee457199553ef482c572f2507c113c",
+ "chksum_sha256": "92a8e56e818f1602118b657acdfa190fa705ec82fbd76401eebe9468c8c41b49",
"format": 1
},
{
@@ -5639,7 +5639,7 @@
"name": "plugins/modules/fmgr_system_fortiguard.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "046cf7e70a9c324ebb8fdb3ec962455e32d5a520c77af7619ee8c9e861e5f57a",
+ "chksum_sha256": "84ab7b885c58ad26b209dd572c4106899ee5a18d680b67ecb3732625fb12201b",
"format": 1
},
{
@@ -5667,7 +5667,7 @@
"name": "plugins/modules/fmgr_cloud_orchestaws.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8c0f7f8c43831f28b6b2f71c929d0cab5047232c4e458905f46f099a28fa48ed",
+ "chksum_sha256": "f7cf7d0405467d8160ad7ee47d3a53ecae348e0690b3035f8ef728f413fee4fb",
"format": 1
},
{
@@ -5702,7 +5702,7 @@
"name": "plugins/modules/fmgr_system_locallog_syslogd2_setting.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c305b4c69f93158d51d071111e572a2ca67b1b3acb8c934e801f42e116646031",
+ "chksum_sha256": "cb6c5ab3d7b8520cc1c0651b6a7001ab2ea70dcfb093523179cbaa68e7a221fa",
"format": 1
},
{
@@ -5716,7 +5716,7 @@
"name": "plugins/modules/fmgr_pm_wanprof_pkg.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c70fe8f7e24a6753b0074f719e51ab8f023daf09fb9fbe561f95bae2d8cf12fd",
+ "chksum_sha256": "0d754cf80e55758de2dbf863909365ac34869baea48f8e13f4d966f71f8b43ab",
"format": 1
},
{
@@ -5744,14 +5744,14 @@
"name": "plugins/modules/fmgr_gtp_messagefilterv0v1.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3ea8895135c2e5251495bb2ead4a170d1cfb46ea1788ba7b34b0b37f3336454",
+ "chksum_sha256": "f7f388254376e1a813b1c902f258fd8c23784d0c80f0fd0e8d880982a3606f07",
"format": 1
},
{
"name": "plugins/modules/fmgr_fmupdate_service.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ad6bcfba7a3185f493db5d04611df2c7c996f1aa31852173060f43a4e386762c",
+ "chksum_sha256": "41f13a090d33e508e6f13e68cc6d7526d2ce7671e5d1b92e683d1cc318fa34ba",
"format": 1
},
{
@@ -5772,7 +5772,7 @@
"name": "plugins/modules/fmgr_system_npu_priorityprotocol.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8c88e2b7fc4b2a2972adc1f300abc8f2ee78424a02cec47ae0f84dea9df51238",
+ "chksum_sha256": "f3c7da5bf37329e1a0c40ae8e776c5432829a5629484195909279a0c788c2e25",
"format": 1
},
{
@@ -5807,7 +5807,7 @@
"name": "plugins/modules/fmgr_fsp_vlan_dynamicmapping.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6f0d8dfd87361cbe90e25446141f0285f2c601132429e3970d01b46441632a96",
+ "chksum_sha256": "c78df304018a0467cf9356fcd98ca7b734af1f2ab68cb471ae984269a97a83bb",
"format": 1
},
{
@@ -5828,7 +5828,7 @@
"name": "plugins/modules/fmgr_wtpprofile.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8d6d7381afa26f75e19538f7abce986cfce8dbc2a57099ff4bb8c07573ce468b",
+ "chksum_sha256": "6ba70b61af504f3344ee81d895625edcdf2091f8471e6d6ad42bb7946c511f08",
"format": 1
},
{
@@ -5849,7 +5849,7 @@
"name": "plugins/modules/fmgr_dynamic_multicast_interface_dynamicmapping.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "20434cb7f958ea70d935e9432ba2511a558eb4b11a656a7e7a3c38af3c1194b9",
+ "chksum_sha256": "fd64eb8753044fa32b83fb174e78abb5fc0ec4c97974d37937c91452ee48238b",
"format": 1
},
{
@@ -5863,7 +5863,7 @@
"name": "plugins/modules/fmgr_system_log_topology.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4ae9b77bfa27bed4153ca9950a1aee6abf61de5350c49d2649529061ff786747",
+ "chksum_sha256": "19004533ea48fac62dc2c829c058164bdd59bd937a9121b2081ed0bcc94a986b",
"format": 1
},
{
@@ -5884,7 +5884,7 @@
"name": "plugins/modules/fmgr_system_mail.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "117c57d23347be7cb53c5f7540f9ae2c9c9c022e25760bc770cdab7f89cbd07c",
+ "chksum_sha256": "99b4aab8bafbe94dd3142a317d1734941576c2ba468582dfa128ff6898b25282",
"format": 1
},
{
@@ -5905,7 +5905,7 @@
"name": "plugins/modules/fmgr_pm_config_metafields_firewall_policy.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "00ff56847f79cbb10f4a2fc7df82bdd95f168bbb946de868646e038bf1a145cd",
+ "chksum_sha256": "fb2aeab7b87f286cd8b66a50358b20cff2d90eebee723279617e9e422f389faf",
"format": 1
},
{
@@ -5926,14 +5926,14 @@
"name": "plugins/modules/fmgr_vpn_ssl_settings.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c6ace93e5a6f5bcb7ea0e0ddf21ee2c10c5071823d0f9d738ac62ec44de6315b",
+ "chksum_sha256": "36e634cd5f739cf514a0a570a48b25195fe3ab20c250a7c6adb78765b00b6afe",
"format": 1
},
{
"name": "plugins/modules/fmgr_fmupdate_fdssetting.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "54bcf4e200bd5b2d291a8be9a3260f7021abf4fc8f8b3d59c2e1d1481d59048f",
+ "chksum_sha256": "788087d99a62f6bc58cdcd0a2435d7cf1a43a4634a50b8b99da7c4b31e7bfad0",
"format": 1
},
{
@@ -5947,7 +5947,7 @@
"name": "plugins/modules/fmgr_pkg_firewall_securitypolicy_sectionvalue.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "424ce3d3acd9fe684605479096e91161d21fbb46cbc6436b69de551cb675de6f",
+ "chksum_sha256": "c91d6c745bbe5d35e657fc0580e2103257ffd8b9ee33887ff17f5d836bfe937b",
"format": 1
},
{
@@ -5982,7 +5982,7 @@
"name": "plugins/modules/fmgr_devprof_log_syslogd_filter_excludelist.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "297994f4f89e5b30796848b984fe7d6947adfb0b5aa5f369c459d76b628c75fe",
+ "chksum_sha256": "a4be5195c3583b0c6a7077b888dbd74e203aeb62c4b7b6966bc2396747b3a6f5",
"format": 1
},
{
@@ -6052,7 +6052,7 @@
"name": "plugins/modules/fmgr_system_replacemsggroup_nacquar.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dc7a5e6027115da389a4f588f228ee4e62876a8cb83ea473860cc2c98d15be77",
+ "chksum_sha256": "4b020bfc8c92dd3db8a49b025446280d0661f881e95ac75971c6eedc926ce88c",
"format": 1
},
{
@@ -6122,7 +6122,7 @@
"name": "plugins/modules/fmgr_dvmdb_workflow_repair.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8ca21b2c816c813d4677b88c718a917eb9838a6d293730f63b5a093b8e0b036c",
+ "chksum_sha256": "a3e581cef40b668975723594d36a3cb6b324475638a25cfd360578ab396d37a4",
"format": 1
},
{
@@ -6143,7 +6143,7 @@
"name": "plugins/modules/fmgr_system_npu_fpanomaly.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c59fdfc0ee7b6a0dfb42252eeff3db5a35db0e290d14d6eb48230408e3aea00f",
+ "chksum_sha256": "cf4ac9096fda4f7adc195d356d892a4dee5930cc9932a0be446799c96cd2b676",
"format": 1
},
{
@@ -6178,7 +6178,7 @@
"name": "plugins/modules/fmgr_templategroup.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8f28a44124c4e197e0392655b84ff85e176faca88cb61c52a6639464db85ecf6",
+ "chksum_sha256": "f723ec31de5c72c30be33ec3130bc631b23d9cb4ea6de902a002a9b32cdf9ec4",
"format": 1
},
{
@@ -6199,7 +6199,7 @@
"name": "plugins/modules/fmgr_pm_devprof_scopemember.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aef42e6d0f22bcc79944467fb8648769862eeb63453db36cc758b36596bf1ab3",
+ "chksum_sha256": "fdd9983518a7805c816d0138f8fcb7b8145ccdb9704a27ba927026b2b836a7da",
"format": 1
},
{
@@ -6213,7 +6213,7 @@
"name": "plugins/modules/fmgr_dvmdb_device.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "251e497fce2619d879e1db27ff309470f686e5b492187e643a4714c1e98ab1d9",
+ "chksum_sha256": "ad4abfb38aa2bde514940d72c1113b075ed0957282d929e183e7d29e9a593733",
"format": 1
},
{
@@ -6227,14 +6227,14 @@
"name": "plugins/modules/fmgr_firewall_address.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "412accd5d8b9cd21231058442e7963ac774428e8071dd11bc9d0df91c33ef324",
+ "chksum_sha256": "af0617b1cc65ce017893628d6c750e02b76412b0304054d738b784ff7aae2970",
"format": 1
},
{
"name": "plugins/modules/fmgr_system_locallog_syslogd_setting.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "79d1a0c4bbc278e01d9922a1180ea0bf0d37a6dfb4e764fd194a5caff10164cd",
+ "chksum_sha256": "aa0f9b282694fb3fd06daa61c4180ca742e2897a89178b551644923915032f87",
"format": 1
},
{
@@ -6248,14 +6248,14 @@
"name": "plugins/modules/fmgr_user_fsso.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a1e61589328fa4a8e1586b7a947b5722cc13a5e3a657f5c30c35ce8791472599",
+ "chksum_sha256": "2ba15eb1d35c2674d5510f3d0bb0397ac913cca22fe956ee3427f4d906086c50",
"format": 1
},
{
"name": "plugins/modules/fmgr_pkg_firewall_hyperscalepolicy.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1a758bd1368f5e094a8b7ea0a4784e2303dfc11d10f3e7c7ce823c2ed85dd0ad",
+ "chksum_sha256": "7d427bbfdbe518dcdd3050cdd723aede70de2bfa91372f18d5c4bef4793fc53b",
"format": 1
},
{
@@ -6269,7 +6269,7 @@
"name": "plugins/modules/fmgr_apcfgprofile.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "855e795b79cb84b117ceb5431d8fcc7e6feec873b88228ea38b4a7c076f1159e",
+ "chksum_sha256": "77d015f05903d01b02130e2ad8287b1c4b3fe07704b4a96b13df7c896dd5d58c",
"format": 1
},
{
@@ -6283,14 +6283,14 @@
"name": "plugins/modules/fmgr_system_syslog.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4f582622a19981af9628508340f02151a6353d962f398e01e1de6fc537eb4c9a",
+ "chksum_sha256": "bc7cc5ff54130ff62162557ef6f86ee41efcb1822827fd0b2692196164e675bf",
"format": 1
},
{
"name": "plugins/modules/fmgr_template.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c5660cd9b25a2629158c6e4198e9f6bab0ce6aa685c4dc134939d936b4f1d62e",
+ "chksum_sha256": "93f450c94ceb03a95ba96524338229e2ca0f5dc93d1c441701f2f940e23fdcb5",
"format": 1
},
{
@@ -6353,7 +6353,7 @@
"name": "plugins/modules/fmgr_user_saml_dynamicmapping.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c4cda80097178866a7e524a3380eaa9f518f97a4eb4e03eef4e969cbeeb62cb9",
+ "chksum_sha256": "b776f9645456a2d03a044bccfb03c6ea8ba17ba61da54c7d1b40fd0429979a73",
"format": 1
},
{
@@ -6381,7 +6381,7 @@
"name": "plugins/modules/fmgr_dvmdb_metafields_adom.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "99635d3d8993c415ec2f96467d33e284963614ded4923c0907f03288e0161133",
+ "chksum_sha256": "3d60eec0342cf0445c54dcc3e904c8cd31e815480c4544496ef339ab9c3bd4c5",
"format": 1
},
{
@@ -6416,7 +6416,7 @@
"name": "plugins/modules/fmgr_vpnmgr_vpntable.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4064616a417287b75ff960fd606fee20ff6314a0f7ec4f2cfc9bd4c3aa9c2515",
+ "chksum_sha256": "159cdb0aef2efe957af06b5d6bcdf235866f4c42adbf503d242863433f61c77b",
"format": 1
},
{
@@ -6472,7 +6472,7 @@
"name": "plugins/modules/fmgr_firewall_casbprofile_saasapplication.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "638a525bf979841abb6165de9499f424ee8090ffe9dd87c183c098083e60fad4",
+ "chksum_sha256": "b5bc8036eb1be3c8a02989f658c6b5d4fe5f4f36cd9e42e557a48f7fd778cc59",
"format": 1
},
{
@@ -6514,7 +6514,7 @@
"name": "plugins/modules/fmgr_cloud_orchestawsconnector.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8fc9a876a9e70660c87d8f09f08a3b00e7ee310b435b4fc5083784236e375532",
+ "chksum_sha256": "27d967b2d0f008bac09dbcf3db66a854fa2e9bc41576fb96ec79671b6809daf0",
"format": 1
},
{
@@ -6535,7 +6535,7 @@
"name": "plugins/modules/fmgr_pkg_firewall_hyperscalepolicy46.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c15d9cbae01dc8471f67ad31d08113bc742857894a5bebfcd329b01e71d429eb",
+ "chksum_sha256": "cd1643b2021692231c7d500824e110cf4f19f04d20df0b7411a7a8fde3bb80a2",
"format": 1
},
{
@@ -6563,21 +6563,21 @@
"name": "plugins/modules/fmgr_dynamic_ippool.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c2d36ca711c03431033f34c63ca05e7e9c467ed53883170a0f6cd6bd9a275220",
+ "chksum_sha256": "22581bc05a2ce7f0ec6ff179ae3f52b0e5df24abf789d0c5c30ba8df92b2ce96",
"format": 1
},
{
"name": "plugins/modules/fmgr_cloud_orchestawstemplate_autoscalenewvpc.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "288f756287de3f645cb2c1c17db573f162c00b1ca6fce9ac27f3d5086ffae9bd",
+ "chksum_sha256": "59b124af8e23fc6558c410095e6e0c7865729da5831e35de7b97259057eab34f",
"format": 1
},
{
"name": "plugins/modules/fmgr_firewall_multicastaddress.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "df7fdc301bfe4ffbc751178b36ec3334ca9e0f5ab05d5b1d38f02881957ca383",
+ "chksum_sha256": "e6bfa62d845c07e455fd3516aa736247ffe9c9d30482078bba1ca24e673f5c00",
"format": 1
},
{
@@ -6591,7 +6591,7 @@
"name": "plugins/modules/fmgr_vap.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f2479a5d36342f4184e4f42fde29fad5c4dbd92f9f50a2fb804c0b64fd2c89d2",
+ "chksum_sha256": "e87a14e59fb5f65366a2fe7724e01ff69f079529328a4c6671828dd2166a7e61",
"format": 1
},
{
@@ -6654,14 +6654,14 @@
"name": "plugins/modules/fmgr_firewall_addrgrp6.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4fd69d7db39ce62c1583038702ae1b50d2a38095e2faa4697c48e8e72653e963",
+ "chksum_sha256": "a5a3da0c181112b435f057e6fa364c5d0097b02fe769d6342528174eec466d9d",
"format": 1
},
{
"name": "plugins/modules/fmgr_ips_baseline_sensor_override_exemptip.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bff6e8255e67273c82eedd786d2d8a7039db5aec1590a34e122ca1fffa16d0b1",
+ "chksum_sha256": "b127954d57d44b04a6aa7d4a73396ff585c6dcc9db2cc2da898efa7455be3613",
"format": 1
},
{
@@ -6682,7 +6682,7 @@
"name": "plugins/modules/fmgr_system_locallog_syslogd_filter.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e75f4e7ec33581dbe73fe154531eb24ea3f012c87a24cf89ab4f25c047c52285",
+ "chksum_sha256": "b465c6a6cd15bd91e16fa22f34b509b44092682b9f158d2840d915c64c443f74",
"format": 1
},
{
@@ -6703,7 +6703,7 @@
"name": "plugins/modules/fmgr_system_report_autocache.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f22980d756c1b9394ab7ba3f0c8e035d10b1de3b2b316a1035364a48d6dc6f1d",
+ "chksum_sha256": "57636f328c27b29f601f451eef59693f0eb42564c190d3264333ebd19e289cff",
"format": 1
},
{
@@ -6787,14 +6787,14 @@
"name": "plugins/modules/fmgr_firewall_casbprofile_saasapplication_accessrule.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "583b41a0b9c887862ab5b83958d98982b550e3cb8f4a778cecd143557283d4e3",
+ "chksum_sha256": "9eb8e679b6ac70d01f2f0382e88b49ad817d02754b93db8b017885843a1b7fdf",
"format": 1
},
{
"name": "plugins/modules/fmgr_firewall_profileprotocoloptions_ftp.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fefe8da11d97dc155758aeba20e10e4abd22c1ffc324520dccb664003c7bcea4",
+ "chksum_sha256": "5c1b7f9d1d308dc1c82aa8815fc10e347cf2dda26832ec5d4b3d0a3ccb48297b",
"format": 1
},
{
@@ -6850,7 +6850,7 @@
"name": "plugins/modules/fmgr_dvmdb_script_execute.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ed8a42df274b3cbdd21c2b92a95cdf57c312e0106b46bb1fa14160bd53984f62",
+ "chksum_sha256": "d91574352e6c34773e1009458a7132ad3176b0bd9a45110e356784efbeaca823",
"format": 1
},
{
@@ -6920,7 +6920,7 @@
"name": "plugins/modules/fmgr_user_nsx_service.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dbd48aae15e50a59d4e22123d92fdc80f6f154aa61de0f8fb398e1e338f55154",
+ "chksum_sha256": "cf9e98222c931c67ed4114c38f2843212c233084d9b019d65d4d29a45e6fef7b",
"format": 1
},
{
@@ -6948,14 +6948,14 @@
"name": "plugins/modules/fmgr_fmg_fabric_authorization_template.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "22af43f859c5a63e3f37edf2f1c14d4e4c2cf20804c67906bbc7a1685f175ef7",
+ "chksum_sha256": "b6e39dee13de2663d37e553d3f65861c4be1763c3ad8250a5d8da36a4d8c419e",
"format": 1
},
{
"name": "plugins/modules/fmgr_system_geoipcountry.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fb5203902d52a84383e20065d8a600ee9cd686d5701f11aad6b55f362f7e08a4",
+ "chksum_sha256": "f47ed7a110da53d2f67a9b8ec1797d229f25844f5fdb6de3082b21013092bd28",
"format": 1
},
{
@@ -6990,7 +6990,7 @@
"name": "plugins/modules/fmgr_devprof_log_syslogd_filter.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fe2fa3179f5af5b4a54cb81410cc1294d02882264ca0188df74288de61d4e95f",
+ "chksum_sha256": "12a07035885084406471f234c59fe3c9c17cd1c20c74022f3defe66ced87a894",
"format": 1
},
{
@@ -7067,7 +7067,7 @@
"name": "plugins/modules/fmgr_system_npu_dswdtsprofile.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5737f05d423fbf36e0ea8eda97fa0d5ce8ca56ecf3b0ad33d6e68d31b1ced087",
+ "chksum_sha256": "70abbbc8584b71759e8420f7bd7ee7c4524b2e8d8192c2a0d59c3fb1121ddbcb",
"format": 1
},
{
@@ -7095,7 +7095,7 @@
"name": "plugins/modules/fmgr_dynamic_input_interface_dynamicmapping.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1b8e6bfbdd249bf58f00ede9a06e18690bc8c2b5efce733a9ec4664f87aeb9a0",
+ "chksum_sha256": "66be8f8ff16fe712fc5458cf195428b2dcc737ce83b85f6362e60e0a5174a68b",
"format": 1
},
{
@@ -7123,7 +7123,7 @@
"name": "plugins/modules/fmgr_dynamic_input_interface.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e34030ea090a24bfac2dc9ef812b30da771732e00434a6e9499fad30dc622f36",
+ "chksum_sha256": "5ca6a53675cb778fdea1299029a92cbe12253d3be52fadf39d0989e526fc9103",
"format": 1
},
{
@@ -7137,7 +7137,7 @@
"name": "plugins/modules/fmgr_wanprof_system_virtualwanlink.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2604fbdc8bd66dfc40dfa1fef5590d9cb91f90b0b88f794d933283a95fc38f43",
+ "chksum_sha256": "01fea8358c2ef6214b05f41f7c1735adf25f665521a901e46c7e0e4bc8fbafb6",
"format": 1
},
{
@@ -7165,7 +7165,7 @@
"name": "plugins/modules/fmgr_pm_config_metafields_firewall_service_custom.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "970c5f205df78da1c3cabbe34053a0ad84562845c9e5ec50b37d5f93e0bc7dc9",
+ "chksum_sha256": "b0a9c7c666de7a86468668efbe45e2b4585f28c116ba340e761cdf8e42980c64",
"format": 1
},
{
@@ -7193,7 +7193,7 @@
"name": "plugins/modules/fmgr_dvmdb_workflow_drop.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "10f4e13ef2c60e756882ff87e10254fe84587524f8fc23890032cd146480f22f",
+ "chksum_sha256": "d94485957967f86af03bf6cb8c2588e7c4dea8869a8a96794f363d03452cfbf4",
"format": 1
},
{
@@ -7242,7 +7242,7 @@
"name": "plugins/modules/fmgr_firewall_ippool_dynamicmapping.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e93a952959664c0ec7951c49b6003985a2864ad1070707fa807cab26458c1b20",
+ "chksum_sha256": "74215e8af6b1c5996eeac9452eeeec758339d9e92255f59684ef7b9088b69b68",
"format": 1
},
{
@@ -7277,7 +7277,7 @@
"name": "plugins/modules/fmgr_user_vcenter_rule.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f1aa8717e96eac1a608de136c9dbc30ff33cc3628370faa41154c9bb7e4be98f",
+ "chksum_sha256": "f65659f7c8db61dbaba042e6a554dd932eed353dfee4c047c73ba084734d1e0d",
"format": 1
},
{
@@ -7291,7 +7291,7 @@
"name": "plugins/modules/fmgr_pm_config_pblock_firewall_securitypolicy_sectionvalue.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "81c5d76f31bf175c4069d741a2dc198c651c119277c3151e169998747974f42d",
+ "chksum_sha256": "12c2dde12e1f6319d981e4615edde42dfc502d9ff7188f89aa26c7321d592436",
"format": 1
},
{
@@ -7326,7 +7326,7 @@
"name": "plugins/modules/fmgr_user_certificate.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9441488d76273e6597ef8d44e4739eb05b1a149434975452a4ef04bad6406304",
+ "chksum_sha256": "6f81bd8bba0689877786fa44813c1db38990c9ccd56dee67e49674374a75cedc",
"format": 1
},
{
@@ -7347,7 +7347,7 @@
"name": "plugins/modules/fmgr_pkg_firewall_hyperscalepolicy64.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2c9ede8e0bcd84f8a4bc5ed42d18a8bc838b3a90f0dbaec33242f56011dffa08",
+ "chksum_sha256": "c39c8aebbf0b65d7ca63c3c157b4c1aaa4c3f538cf42473d5154eab172cf1887",
"format": 1
},
{
@@ -7389,7 +7389,7 @@
"name": "plugins/modules/fmgr_system_npu_dosoptions.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8ff5c2360efeea7a235406319f835f7c66a336786fc61459f8d05e02ef4e7ad0",
+ "chksum_sha256": "7882257ff46bd475a5d1aa58271712e22164c5f14bd505e2ab69dacaf5352c36",
"format": 1
},
{
@@ -7431,7 +7431,7 @@
"name": "plugins/modules/fmgr_securityconsole_pblock_clone.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6254bb0dd1cceab5da399e66bcdf1bdd987f4718046446861c105d5ce3d36a12",
+ "chksum_sha256": "d980c0e7ebc36a3ca54b3a5dc16760297d40066bc67c43dd6b87b4770971afdd",
"format": 1
},
{
@@ -7445,7 +7445,7 @@
"name": "plugins/modules/fmgr_system_fortiview_autocache.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1e8bac6a40ff82bd0309636ed3f8d720f3f2f0a4592822a8923a8f17d657f182",
+ "chksum_sha256": "2df657a63db19688f025ece6a4e39857808546d2cae41309334fdb561dd59908",
"format": 1
},
{
@@ -7473,7 +7473,7 @@
"name": "plugins/modules/fmgr_user_pxgrid.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d8bcb8e736b4a9a5c07e63e71b4c954eee27d3620434605ab03ec53a930f6a79",
+ "chksum_sha256": "9139b64f44619d85015b8eb3f08aeaa882eb32db723fef7dbbf5889363e21896",
"format": 1
},
{
@@ -7494,7 +7494,7 @@
"name": "plugins/modules/fmgr_dynamic_vpntunnel_dynamicmapping.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8cf194d1197b9956235e37e8fe3df707732a1203a488b3912ad8bf99adc27bc8",
+ "chksum_sha256": "4e56397b79240e6744fe4eab390cc6bd37c07063a5a021b2c50be33b90d2d988",
"format": 1
},
{
@@ -7508,7 +7508,7 @@
"name": "plugins/modules/fmgr_webfilter_profile.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "66fba30cf69a37bd9464ce88082ded03ff74de2d500411646d31ec2b67912b3b",
+ "chksum_sha256": "42e85bec835144ceb9d1a13df46684937486b52e36571b8642920cc1e90ef107",
"format": 1
},
{
@@ -7536,7 +7536,7 @@
"name": "plugins/modules/fmgr_gtp_iewhitelist_entries.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b9ff2f23647be68532c1908364bc0552a746c2c065dd107fd355a914976fdfff",
+ "chksum_sha256": "eab5c4591c5dcc269bd6434083f9696eac531d0ab8879910647f56f66b0c98e3",
"format": 1
},
{
@@ -7571,21 +7571,21 @@
"name": "plugins/modules/fmgr_system_npu_ipreassembly.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec28997842b610d12bede2811faa436ee675f0e87be1388edbfb02b7e15fdf5a",
+ "chksum_sha256": "127733509228f5080f427aacfc94737268198f0e5b6e4cb1fede5228b516f126",
"format": 1
},
{
"name": "plugins/modules/fmgr_fmupdate_webspam_fgdsetting.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0ac79419070ad54bf39209933193c03fb33af7bd374a267adfbbf31903add01f",
+ "chksum_sha256": "37b7be4ee8ebc2e3fec5dd799ceba65b8f3e9df3b8fda276813f652bb986e947",
"format": 1
},
{
"name": "plugins/modules/fmgr_firewall_proxyaddress.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5bffa214c30d87845eb10e8df80e851c81f021eb69e2cad5d5f30c264ae71781",
+ "chksum_sha256": "07e3784612e6e82f6e4b85d5c2a120c8d4e148be1c9be579243c09a603d4f7f7",
"format": 1
},
{
@@ -7690,7 +7690,7 @@
"name": "plugins/modules/fmgr_pm_devprof_adom.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "db7c076562b202c540d1d931c821db42ff689551f9c554b4697b8e9ea29ec42f",
+ "chksum_sha256": "155fc2fb58e2199b50300de43d412ade0e8b452229b0279beb516a23fcd6c649",
"format": 1
},
{
@@ -7718,7 +7718,7 @@
"name": "plugins/modules/fmgr_system_sdnconnector_externalaccountlist.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "896165704236592082fe72ac5517b43e0190a2ca6e2817e85af817f2bd46d6ba",
+ "chksum_sha256": "e3ae53a9c56442003b84964c8ebefbee26f8ec0f7e69d4e7d318d01a3c87d3c7",
"format": 1
},
{
@@ -7732,7 +7732,7 @@
"name": "plugins/modules/fmgr_system_ntp.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "00cbfdf5662ff2f011e2e22360752af96c097facbddd0b70b77fcf54a499ba5d",
+ "chksum_sha256": "abd0072409f774e34f3c3175e34814b36f2d58fd825b89840e1cd7922476933d",
"format": 1
},
{
@@ -7788,7 +7788,7 @@
"name": "plugins/modules/fmgr_system_objecttag.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bbeddcdc84a578bb5cfdb0e6432c18e4c6c73f239e8d98da22c8832e11327906",
+ "chksum_sha256": "0c74f63c80cbf29f5f8ceecfbab7d2b21344ef4ea2b5e7355f09f9c24b648570",
"format": 1
},
{
@@ -7802,21 +7802,21 @@
"name": "plugins/modules/fmgr_webfilter_categories.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6ddaf211991ab4c7c7c7252517ee2a9a76bf3ab1aa87e5da1ba07e968aaff3b8",
+ "chksum_sha256": "9f0d1c39c61b976c0c2f7045e7b097018f6a944aac447e27fc080049696dbe49",
"format": 1
},
{
"name": "plugins/modules/fmgr_pkg_firewall_consolidated_policy_sectionvalue.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fef5894d8cdd3b13cc97aa87c625cfdee28766b0eabd10dd39d733ec3c6e7d37",
+ "chksum_sha256": "7c496a393dc6309fe9ed4b758c46f989ee297b540ec306c4641a82268ebe4d64",
"format": 1
},
{
"name": "plugins/modules/fmgr_fmupdate_fwmsetting_upgradetimeout.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6b041ec618d5b1344f57f7f47a2fb789c908988704a074f9acf74f5ec638876f",
+ "chksum_sha256": "d6eaf7dabf151a1f958427832ff43b6184be07c11c6036b171a8ef031ea810b6",
"format": 1
},
{
@@ -7879,14 +7879,14 @@
"name": "plugins/modules/fmgr_vpnmgr_node_iprange.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "757c4c637079362bfedabff345f773b80f0b1a0173dcaa65ca2a6dfdf3542917",
+ "chksum_sha256": "f31304b40e57bbd603a95bf390a92d70f6ec42aad7a81b0013b971a02cbd7cbc",
"format": 1
},
{
"name": "plugins/modules/fmgr_certificate_template.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ed2ced38484e33e406dbe13027a5b9aef2950fcdd955b12136c567321b56f601",
+ "chksum_sha256": "e663609f6fbf209bd3b0950a529337ae2609ec63ec8aca8539a40787b45d9c6a",
"format": 1
},
{
@@ -7928,7 +7928,7 @@
"name": "plugins/modules/fmgr_system_replacemsggroup_mm1.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6b66f6838b80e2dc9957d6977797ee5e12066138762e7e88b0654cbffa2481fb",
+ "chksum_sha256": "267beaabf72db2ca10deae0b78db0127e434df7a09b68f29f785b996f3c916ef",
"format": 1
},
{
@@ -7970,14 +7970,14 @@
"name": "plugins/modules/fmgr_pm_pblock_obj.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f48e81b6934ea030dfb4231375e27cb9cc9a1507f34ae021a051a9837efbdaa4",
+ "chksum_sha256": "b800ad86be28b547a546c621563a708fdc467926ef909402014149895b6a55fa",
"format": 1
},
{
"name": "plugins/modules/fmgr_pm_config_meta_reference.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9e78084e403c89a6e01a7574ad9e55b21c10dff33c8393613eca57081ba59eb8",
+ "chksum_sha256": "8752e94fe714198311777042d761bb86685aec740fca736c3675ea476352d312",
"format": 1
},
{
@@ -7998,7 +7998,7 @@
"name": "plugins/modules/fmgr_dynamic_virtualwanlink_server.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7e1ac072b861175c94f4ae1709d96ca0cf7afb1ff2653512d39474c90398b661",
+ "chksum_sha256": "120c6dc7136ea36e2f972cb2935686a659a4536d2401b40c74ae83d569367c1b",
"format": 1
},
{
@@ -8026,7 +8026,7 @@
"name": "plugins/modules/fmgr_pkg_central_dnat6.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "45a1ab87a2dbde0e06c29f00c4c1244c76c4cd37a9992926517fb6568ba44d66",
+ "chksum_sha256": "25ab3c7131e8d20f23d2a254a84157253a9eeb6f7aab2ee6e1af580d120ab601",
"format": 1
},
{
@@ -8075,14 +8075,14 @@
"name": "plugins/modules/fmgr_switchcontroller_managedswitch.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ea74b4a57505bf256241ed39a2062783390ebdbcc1ecf3d1bfbafd891619a05c",
+ "chksum_sha256": "4b389000605e088aeec3701146208836b76d8a943a14f8447137e743deeccb8b",
"format": 1
},
{
"name": "plugins/modules/fmgr_pkg_central_dnat.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "63c8b11a89dcfe9dfb2c1ed02a2566e461fe0cf7eafa59a24bcc930ad0895b0e",
+ "chksum_sha256": "cb2921aee4943c181df830c07a8e0bb10136b200e8657177bd13a0fbb42dc886",
"format": 1
},
{
@@ -8131,7 +8131,7 @@
"name": "plugins/modules/fmgr_sys_hitcount.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6664e22b0a0adfdc7f7fe961d9e21ebd22293e39d551bc3e4187e5129abb5c91",
+ "chksum_sha256": "d03648b338f3d68d8de7ebd78345374ad2a36bfaf75a49fda811fd17e91adee1",
"format": 1
},
{
@@ -8201,7 +8201,7 @@
"name": "plugins/modules/fmgr_dvmdb_workflow_reject.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d690fa5b073d3a2a8759998e2ec736b11d13e4480932ba5594409a71ba9c1c4b",
+ "chksum_sha256": "e543ae5ddb359c7d9beda8c60acc990b0221d9f440bba7aea430fbab83bead57",
"format": 1
},
{
@@ -8215,7 +8215,7 @@
"name": "plugins/modules/fmgr_wanprof_system_virtualwanlink_members.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f7ea52095790c1a56f8224afa7f61bb7452c413a741fec1ff00d8e8f90529ea6",
+ "chksum_sha256": "707d03c6ec3cf04e53fef1da0bda9a95d5e7071609dc7a95709c42bfdec108ca",
"format": 1
},
{
@@ -8236,7 +8236,7 @@
"name": "plugins/modules/fmgr_dynamic_interface_dynamicmapping.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "97baec8abce1f0725cd5223563aff53ca03150d5669370fd3b0f5f2261522ec6",
+ "chksum_sha256": "f6d68bc58f90d85e88a669c445263f069161f24dac51d5b8065efc66ba12c568",
"format": 1
},
{
@@ -8257,7 +8257,7 @@
"name": "plugins/modules/fmgr_pm_pkg_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0db28aa12243fd8cfe9e7761b137fe21136cbfac9f2e915b14565a31498dca58",
+ "chksum_sha256": "cf2d2868e948f52651234f8b74b332a9c0f77f99203d8c7f26925931aaed2c58",
"format": 1
},
{
@@ -8348,7 +8348,7 @@
"name": "plugins/modules/fmgr_dvmdb_workflow_review.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "93940092f75dd54c5e6a940e8d2c916626bc0a78c6c1dd35ed52ef5ea517a1fa",
+ "chksum_sha256": "890ffbe93094ad4617e9405bf86e8ff5dc9879d21cf4a7c659d9ee297c90caf7",
"format": 1
},
{
@@ -8401,24 +8401,17 @@
"format": 1
},
{
- "name": "tests/sanity/ignore-2.14.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "fddc5cd2334f78fb2e93b4337f988e7c65ee2874d057ef853417e23a0cc1789e",
- "format": 1
- },
- {
"name": "tests/sanity/ignore-2.16.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fddc5cd2334f78fb2e93b4337f988e7c65ee2874d057ef853417e23a0cc1789e",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
"name": "tests/sanity/ignore-2.15.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fddc5cd2334f78fb2e93b4337f988e7c65ee2874d057ef853417e23a0cc1789e",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
@@ -8432,7 +8425,7 @@
"name": "meta/runtime.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4833e2900333e7a035d7e0f63f6d55777c2697476ee0a2f9bfcf250167c7571d",
+ "chksum_sha256": "16fee19238e61fab14a7974fd79800cd659367bbc8b052d9f0b190108f6a2c53",
"format": 1
},
{
@@ -8460,7 +8453,7 @@
"name": "changelogs/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "561f01af7ac7a76aa796a43d367c9185dded9c9e711b651975fab6e0b65c2ace",
+ "chksum_sha256": "0947141c55fda5bd964959bb969e4f93a20fcf1dbd7cc4092cfafa72e322d945",
"format": 1
},
{
@@ -8478,6 +8471,13 @@
"format": 1
},
{
+ "name": "changelogs/fragments/2.5.0.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d9c46bccd1e132f15fe0072018ba3f99c6a73affc599feb6ac8ca0ee3f09bf65",
+ "format": 1
+ },
+ {
"name": "changelogs/fragments/2.4.0.yml",
"ftype": "file",
"chksum_type": "sha256",
@@ -8502,14 +8502,14 @@
"name": "README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "08a6b0eb6f6ae8993dd96900e6fefd9653ed60f665ac6a2e142dc781b39eed49",
+ "chksum_sha256": "27d120de9ac9a7f65a17b34de5b69adb8b43f176d49ef5f95a85bab8c2a06b56",
"format": 1
},
{
"name": "CHANGELOG.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "818ed05cf8fa73e07d323d2d7999fa54d48a04da035da6bb5fcd9d898383bf7b",
+ "chksum_sha256": "7273e9bdbc4cf9e6f09e105e128b05836cb41f84637cc443d6daf4f8b1f3f77e",
"format": 1
}
],
diff --git a/ansible_collections/fortinet/fortimanager/MANIFEST.json b/ansible_collections/fortinet/fortimanager/MANIFEST.json
index c39278172..31c0f873b 100644
--- a/ansible_collections/fortinet/fortimanager/MANIFEST.json
+++ b/ansible_collections/fortinet/fortimanager/MANIFEST.json
@@ -2,7 +2,7 @@
"collection_info": {
"namespace": "fortinet",
"name": "fortimanager",
- "version": "2.4.0",
+ "version": "2.5.0",
"authors": [
"Xinwei Du (@dux-fortinet)",
"Xing Li (@lix-fortinet)",
@@ -36,7 +36,7 @@
"name": "FILES.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "616f0691b94b2d6b70ec687f8ed9b97f2e1012433535bd23e5c5f38ed0d75ff8",
+ "chksum_sha256": "346b7c66b57353ac3157d617fa59d5d6614423fc8ec771fc6cbc58a481bd36fb",
"format": 1
},
"format": 1
diff --git a/ansible_collections/fortinet/fortimanager/README.md b/ansible_collections/fortinet/fortimanager/README.md
index e0d9d68d4..6e44414c7 100644
--- a/ansible_collections/fortinet/fortimanager/README.md
+++ b/ansible_collections/fortinet/fortimanager/README.md
@@ -1,19 +1,19 @@
![Fortinet logo|](https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/Fortinet_logo.svg/320px-Fortinet_logo.svg.png)
-# Ansible Collection - fortinet.fortimanager:2.4.0
+# Ansible Collection - fortinet.fortimanager:2.5.0
FortiManager Ansible Collection includes the modules that are able to configure FortiManager.
[Documentation](https://ansible-galaxy-fortimanager-docs.readthedocs.io/en/latest) for the collection.
## Requirements
-- Ansible 2.14.0+
+- Ansible 2.15.0+
- Python 3
## Installation
This collection is distributed via [ansible-galaxy](https://galaxy.ansible.com/fortinet/fortimanager), the installation steps are as follows:
-1. Install or upgrade to Ansible 2.14.0+
+1. Install or upgrade to Ansible 2.15.0+
2. Download this collection from galaxy: `ansible-galaxy collection install fortinet.fortimanager`
## Example Usage
@@ -23,7 +23,7 @@ See [example here](https://ansible-galaxy-fortimanager-docs.readthedocs.io/en/la
## Modules
The collection provides the following modules:
-* `fmgr_adom_options` no description.
+* `fmgr_adom_options` Options.
* `fmgr_antivirus_mmschecksum` Configure MMS content checksum list.
* `fmgr_antivirus_mmschecksum_entries` modify this MMS content checksum list.
* `fmgr_antivirus_notification` Configure AntiVirus notification lists.
@@ -46,7 +46,7 @@ The collection provides the following modules:
* `fmgr_apcfgprofile_commandlist` AP local configuration command list.
* `fmgr_application_casi_profile` Cloud Access Security Inspection.
* `fmgr_application_casi_profile_entries` Application entries.
-* `fmgr_application_categories` no description.
+* `fmgr_application_categories` Application categories.
* `fmgr_application_custom` Configure custom application signatures.
* `fmgr_application_group` Configure firewall application groups.
* `fmgr_application_internetservice` Show Internet service application.
@@ -77,27 +77,27 @@ The collection provides the following modules:
* `fmgr_casb_useractivity_controloptions_operations` CASB control option operations.
* `fmgr_casb_useractivity_match` CASB user activity match rules.
* `fmgr_casb_useractivity_match_rules` CASB user activity rules.
-* `fmgr_certificate_template` no description.
+* `fmgr_certificate_template` Certificate template.
* `fmgr_cifs_domaincontroller` Define known domain controller servers.
* `fmgr_cifs_profile` Configure CIFS profile.
* `fmgr_cifs_profile_filefilter` File filter.
* `fmgr_cifs_profile_filefilter_entries` File filter entries.
* `fmgr_cifs_profile_serverkeytab` Server keytab.
-* `fmgr_cloud_orchestaws` no description.
-* `fmgr_cloud_orchestawsconnector` no description.
-* `fmgr_cloud_orchestawstemplate_autoscaleexistingvpc` no description.
-* `fmgr_cloud_orchestawstemplate_autoscalenewvpc` no description.
-* `fmgr_cloud_orchestawstemplate_autoscaletgwnewvpc` no description.
-* `fmgr_cloud_orchestration` no description.
+* `fmgr_cloud_orchestaws` Cloud orchest aws.
+* `fmgr_cloud_orchestawsconnector` Cloud orchest awsconnector.
+* `fmgr_cloud_orchestawstemplate_autoscaleexistingvpc` Cloud orchest awstemplate autoscale existing vpc.
+* `fmgr_cloud_orchestawstemplate_autoscalenewvpc` Cloud orchest awstemplate autoscale new vpc.
+* `fmgr_cloud_orchestawstemplate_autoscaletgwnewvpc` Cloud orchest awstemplate autoscale tgw new vpc.
+* `fmgr_cloud_orchestration` Cloud orchestration.
* `fmgr_credentialstore_domaincontroller` Define known domain controller servers.
-* `fmgr_devprof_device_profile_fortianalyzer` no description.
-* `fmgr_devprof_device_profile_fortiguard` no description.
-* `fmgr_devprof_import` no description.
+* `fmgr_devprof_device_profile_fortianalyzer` System template device profile fortianalyzer.
+* `fmgr_devprof_device_profile_fortiguard` System template device profile fortiguard.
+* `fmgr_devprof_import` Devprof import.
* `fmgr_devprof_log_fortianalyzer_setting` Global FortiAnalyzer settings.
* `fmgr_devprof_log_fortianalyzercloud_setting` Global FortiAnalyzer Cloud settings.
* `fmgr_devprof_log_syslogd_filter` Filters for remote system server.
-* `fmgr_devprof_log_syslogd_filter_excludelist` no description.
-* `fmgr_devprof_log_syslogd_filter_excludelist_fields` no description.
+* `fmgr_devprof_log_syslogd_filter_excludelist` System template log syslogd filter exclude list.
+* `fmgr_devprof_log_syslogd_filter_excludelist_fields` System template log syslogd filter exclude list fields.
* `fmgr_devprof_log_syslogd_filter_freestyle` Free style filters.
* `fmgr_devprof_log_syslogd_setting` Global settings for remote syslog server.
* `fmgr_devprof_log_syslogd_setting_customfieldname` Custom field name for CEF format logging.
@@ -168,28 +168,28 @@ The collection provides the following modules:
* `fmgr_dvmdb_device` Device table, most attributes are read-only and can only be changed internally.
* `fmgr_dvmdb_device_replace_sn` Replace devices serial number with new value.
* `fmgr_dvmdb_device_vdom` Device VDOM table.
-* `fmgr_dvmdb_folder` no description.
+* `fmgr_dvmdb_folder` Device manager database folder.
* `fmgr_dvmdb_group` Device group table.
* `fmgr_dvmdb_group_objectmember` Device group table.
-* `fmgr_dvmdb_metafields_adom` no description.
-* `fmgr_dvmdb_metafields_device` no description.
-* `fmgr_dvmdb_metafields_group` no description.
+* `fmgr_dvmdb_metafields_adom` Device manager database meta fields adom.
+* `fmgr_dvmdb_metafields_device` Device manager database meta fields device.
+* `fmgr_dvmdb_metafields_group` Device manager database meta fields group.
* `fmgr_dvmdb_revision` ADOM revision table.
* `fmgr_dvmdb_script` Script table.
* `fmgr_dvmdb_script_execute` Run script.
* `fmgr_dvmdb_script_objectmember` Script table.
* `fmgr_dvmdb_script_scriptschedule` Script schedule table.
-* `fmgr_dvmdb_upgrade` no description.
-* `fmgr_dvmdb_workflow_approve` no description.
-* `fmgr_dvmdb_workflow_discard` no description.
-* `fmgr_dvmdb_workflow_drop` no description.
-* `fmgr_dvmdb_workflow_reject` no description.
-* `fmgr_dvmdb_workflow_repair` no description.
-* `fmgr_dvmdb_workflow_revert` no description.
-* `fmgr_dvmdb_workflow_review` no description.
-* `fmgr_dvmdb_workflow_save` no description.
+* `fmgr_dvmdb_upgrade` Device manager database upgrade.
+* `fmgr_dvmdb_workflow_approve` Device manager database workflow approve.
+* `fmgr_dvmdb_workflow_discard` Device manager database workflow discard.
+* `fmgr_dvmdb_workflow_drop` Device manager database workflow drop.
+* `fmgr_dvmdb_workflow_reject` Device manager database workflow reject.
+* `fmgr_dvmdb_workflow_repair` Device manager database workflow repair.
+* `fmgr_dvmdb_workflow_revert` Device manager database workflow revert.
+* `fmgr_dvmdb_workflow_review` Device manager database workflow review.
+* `fmgr_dvmdb_workflow_save` Device manager database workflow save.
* `fmgr_dvmdb_workflow_start` Continue a workflow session.
-* `fmgr_dvmdb_workflow_submit` no description.
+* `fmgr_dvmdb_workflow_submit` Device manager database workflow submit.
* `fmgr_dvmdb_workspace_commit` Commit change.
* `fmgr_dvmdb_workspace_commit_dev` Commit change.
* `fmgr_dvmdb_workspace_commit_obj` Commit change.
@@ -202,27 +202,27 @@ The collection provides the following modules:
* `fmgr_dvmdb_workspace_unlock_dev` Unlock a device.
* `fmgr_dvmdb_workspace_unlock_obj` Unlock a specific object, where the url contains the full path to the object.
* `fmgr_dvmdb_workspace_unlock_pkg` Unlock a specific package, where the url includes both the folder.
-* `fmgr_dynamic_address` no description.
-* `fmgr_dynamic_address_dynamicaddrmapping` no description.
-* `fmgr_dynamic_certificate_local` no description.
-* `fmgr_dynamic_certificate_local_dynamicmapping` no description.
-* `fmgr_dynamic_input_interface` no description.
-* `fmgr_dynamic_input_interface_dynamicmapping` no description.
-* `fmgr_dynamic_interface` no description.
-* `fmgr_dynamic_interface_dynamicmapping` no description.
-* `fmgr_dynamic_interface_platformmapping` no description.
-* `fmgr_dynamic_ippool` no description.
-* `fmgr_dynamic_multicast_interface` no description.
-* `fmgr_dynamic_multicast_interface_dynamicmapping` no description.
-* `fmgr_dynamic_vip` no description.
+* `fmgr_dynamic_address` Dynamic address.
+* `fmgr_dynamic_address_dynamicaddrmapping` Dynamic address dynamic addr mapping.
+* `fmgr_dynamic_certificate_local` Dynamic certificate local.
+* `fmgr_dynamic_certificate_local_dynamicmapping` Dynamic certificate local dynamic mapping.
+* `fmgr_dynamic_input_interface` Dynamic input interface.
+* `fmgr_dynamic_input_interface_dynamicmapping` Dynamic input interface dynamic mapping.
+* `fmgr_dynamic_interface` Dynamic interface.
+* `fmgr_dynamic_interface_dynamicmapping` Dynamic interface dynamic mapping.
+* `fmgr_dynamic_interface_platformmapping` Dynamic interface platform mapping.
+* `fmgr_dynamic_ippool` Dynamic ippool.
+* `fmgr_dynamic_multicast_interface` Dynamic multicast interface.
+* `fmgr_dynamic_multicast_interface_dynamicmapping` Dynamic multicast interface dynamic mapping.
+* `fmgr_dynamic_vip` Dynamic vip.
* `fmgr_dynamic_virtualwanlink_members` FortiGate interfaces added to the virtual-wan-link.
* `fmgr_dynamic_virtualwanlink_members_dynamicmapping` FortiGate interfaces added to the virtual-wan-link.
-* `fmgr_dynamic_virtualwanlink_neighbor` no description.
-* `fmgr_dynamic_virtualwanlink_neighbor_dynamicmapping` no description.
-* `fmgr_dynamic_virtualwanlink_server` no description.
-* `fmgr_dynamic_virtualwanlink_server_dynamicmapping` no description.
-* `fmgr_dynamic_vpntunnel` no description.
-* `fmgr_dynamic_vpntunnel_dynamicmapping` no description.
+* `fmgr_dynamic_virtualwanlink_neighbor` Dynamic virtual wan link neighbor.
+* `fmgr_dynamic_virtualwanlink_neighbor_dynamicmapping` Dynamic virtual wan link neighbor dynamic mapping.
+* `fmgr_dynamic_virtualwanlink_server` Dynamic virtual wan link server.
+* `fmgr_dynamic_virtualwanlink_server_dynamicmapping` Dynamic virtual wan link server dynamic mapping.
+* `fmgr_dynamic_vpntunnel` Dynamic vpntunnel.
+* `fmgr_dynamic_vpntunnel_dynamicmapping` Dynamic vpntunnel dynamic mapping.
* `fmgr_emailfilter_blockallowlist` Configure anti-spam block/allow list.
* `fmgr_emailfilter_blockallowlist_entries` Anti-spam block/allow entries.
* `fmgr_emailfilter_bwl` Configure anti-spam black/white list.
@@ -263,9 +263,9 @@ The collection provides the following modules:
* `fmgr_extendercontroller_extenderprofile_cellular_smsnotification_receiver` SMS notification receiver list.
* `fmgr_extendercontroller_extenderprofile_lanextension` FortiExtender lan extension configuration.
* `fmgr_extendercontroller_extenderprofile_lanextension_backhaul` LAN extension backhaul tunnel configuration.
-* `fmgr_extendercontroller_simprofile` no description.
-* `fmgr_extendercontroller_simprofile_autoswitchprofile` no description.
-* `fmgr_extendercontroller_template` no description.
+* `fmgr_extendercontroller_simprofile` Extender controller sim profile.
+* `fmgr_extendercontroller_simprofile_autoswitchprofile` Extender controller sim profile auto switch profile.
+* `fmgr_extendercontroller_template` Extender controller template.
* `fmgr_extensioncontroller_dataplan` FortiExtender dataplan configuration.
* `fmgr_extensioncontroller_extenderprofile` FortiExtender extender profile configuration.
* `fmgr_extensioncontroller_extenderprofile_cellular` FortiExtender cellular configuration.
@@ -328,11 +328,11 @@ The collection provides the following modules:
* `fmgr_firewall_addrgrp_tagging` Config object tagging.
* `fmgr_firewall_carrierendpointbwl` Carrier end point black/white list tables.
* `fmgr_firewall_carrierendpointbwl_entries` Carrier end point black/white list.
-* `fmgr_firewall_casbprofile` no description.
-* `fmgr_firewall_casbprofile_saasapplication` no description.
-* `fmgr_firewall_casbprofile_saasapplication_accessrule` no description.
-* `fmgr_firewall_casbprofile_saasapplication_customcontrol` no description.
-* `fmgr_firewall_casbprofile_saasapplication_customcontrol_option` no description.
+* `fmgr_firewall_casbprofile` Firewall casb profile.
+* `fmgr_firewall_casbprofile_saasapplication` Firewall casb profile saas application.
+* `fmgr_firewall_casbprofile_saasapplication_accessrule` Firewall casb profile saas application access rule.
+* `fmgr_firewall_casbprofile_saasapplication_customcontrol` Firewall casb profile saas application custom control.
+* `fmgr_firewall_casbprofile_saasapplication_customcontrol_option` Firewall casb profile saas application custom control option.
* `fmgr_firewall_decryptedtrafficmirror` Configure decrypted traffic mirror.
* `fmgr_firewall_explicitproxyaddress` Explicit web proxy address configuration.
* `fmgr_firewall_explicitproxyaddress_headergroup` HTTP header group.
@@ -459,11 +459,11 @@ The collection provides the following modules:
* `fmgr_firewall_vipgrp_dynamicmapping` Configure IPv4 virtual IP groups.
* `fmgr_firewall_wildcardfqdn_custom` Config global/VDOM Wildcard FQDN address.
* `fmgr_firewall_wildcardfqdn_group` Config global Wildcard FQDN address groups.
-* `fmgr_fmg_device_blueprint` no description.
-* `fmgr_fmg_fabric_authorization_template` no description.
-* `fmgr_fmg_fabric_authorization_template_platforms` no description.
-* `fmgr_fmg_variable` no description.
-* `fmgr_fmg_variable_dynamicmapping` no description.
+* `fmgr_fmg_device_blueprint` Fmg device blueprint.
+* `fmgr_fmg_fabric_authorization_template` Fmg fabric authorization template.
+* `fmgr_fmg_fabric_authorization_template_platforms` Fmg fabric authorization template platforms.
+* `fmgr_fmg_variable` Fmg variable.
+* `fmgr_fmg_variable_dynamicmapping` Fmg variable dynamic mapping.
* `fmgr_fmupdate_analyzer_virusreport` Send virus detection notification to FortiGuard.
* `fmgr_fmupdate_avips_advancedlog` Enable/disable logging of FortiGuard antivirus and IPS update packages received by FortiManagers built-in FortiGuard.
* `fmgr_fmupdate_avips_webproxy` Configure the web proxy for use with FortiGuard antivirus and IPS updates.
@@ -489,19 +489,19 @@ The collection provides the following modules:
* `fmgr_fmupdate_webspam_fgdsetting_serveroverride` Server override configure.
* `fmgr_fmupdate_webspam_fgdsetting_serveroverride_servlist` Override server.
* `fmgr_fmupdate_webspam_webproxy` Configure the web proxy for use with FortiGuard antivirus and IPS updates.
-* `fmgr_fsp_vlan` no description.
+* `fmgr_fsp_vlan` Fsp vlan.
* `fmgr_fsp_vlan_dhcpserver` Configure DHCP servers.
* `fmgr_fsp_vlan_dhcpserver_excluderange` Exclude one or more ranges of IP addresses from being assigned to clients.
* `fmgr_fsp_vlan_dhcpserver_iprange` DHCP IP range configuration.
* `fmgr_fsp_vlan_dhcpserver_options` DHCP options.
* `fmgr_fsp_vlan_dhcpserver_reservedaddress` Options for the DHCP server to assign IP settings to specific MAC addresses.
-* `fmgr_fsp_vlan_dynamicmapping` no description.
+* `fmgr_fsp_vlan_dynamicmapping` Fsp vlan dynamic mapping.
* `fmgr_fsp_vlan_dynamicmapping_dhcpserver` Configure DHCP servers.
* `fmgr_fsp_vlan_dynamicmapping_dhcpserver_excluderange` Exclude one or more ranges of IP addresses from being assigned to clients.
* `fmgr_fsp_vlan_dynamicmapping_dhcpserver_iprange` DHCP IP range configuration.
* `fmgr_fsp_vlan_dynamicmapping_dhcpserver_options` DHCP options.
* `fmgr_fsp_vlan_dynamicmapping_dhcpserver_reservedaddress` Options for the DHCP server to assign IP settings to specific MAC addresses.
-* `fmgr_fsp_vlan_dynamicmapping_interface` no description.
+* `fmgr_fsp_vlan_dynamicmapping_interface` Fsp vlan dynamic mapping interface.
* `fmgr_fsp_vlan_dynamicmapping_interface_ipv6` IPv6 of interface.
* `fmgr_fsp_vlan_dynamicmapping_interface_ipv6_ip6delegatedprefixlist` Advertised IPv6 delegated prefix list.
* `fmgr_fsp_vlan_dynamicmapping_interface_ipv6_ip6extraaddr` Extra IPv6 address prefixes of interface.
@@ -567,9 +567,9 @@ The collection provides the following modules:
* `fmgr_ips_baseline_sensor` Configure IPS sensor.
* `fmgr_ips_baseline_sensor_entries` IPS sensor filter.
* `fmgr_ips_baseline_sensor_entries_exemptip` Traffic from selected source or destination IP addresses is exempt from this signature.
-* `fmgr_ips_baseline_sensor_filter` no description.
-* `fmgr_ips_baseline_sensor_override` no description.
-* `fmgr_ips_baseline_sensor_override_exemptip` no description.
+* `fmgr_ips_baseline_sensor_filter` Ips baseline sensor filter.
+* `fmgr_ips_baseline_sensor_override` Ips baseline sensor override.
+* `fmgr_ips_baseline_sensor_override_exemptip` Ips baseline sensor override exempt ip.
* `fmgr_ips_custom` Configure IPS custom signature.
* `fmgr_ips_sensor` Configure IPS sensor.
* `fmgr_ips_sensor_entries` IPS sensor filter.
@@ -578,15 +578,15 @@ The collection provides the following modules:
* `fmgr_log_npuserver` Configure all the log servers and create the server groups.
* `fmgr_log_npuserver_servergroup` create server group.
* `fmgr_log_npuserver_serverinfo` configure server info.
-* `fmgr_metafields_system_admin_user` no description.
+* `fmgr_metafields_system_admin_user` Cli meta fields system admin user.
* `fmgr_mpskprofile` Configure MPSK profile.
* `fmgr_mpskprofile_mpskgroup` List of multiple PSK groups.
* `fmgr_mpskprofile_mpskgroup_mpskkey` List of multiple PSK entries.
* `fmgr_nacprofile` Configure WiFi network access control.
* `fmgr_pkg_authentication_rule` Configure Authentication Rules.
* `fmgr_pkg_authentication_setting` Configure authentication setting.
-* `fmgr_pkg_central_dnat` no description.
-* `fmgr_pkg_central_dnat6` no description.
+* `fmgr_pkg_central_dnat` Policy package central dnat.
+* `fmgr_pkg_central_dnat6` Policy package central dnat6.
* `fmgr_pkg_firewall_acl` Configure IPv4 access control list.
* `fmgr_pkg_firewall_acl6` Configure IPv6 access control list.
* `fmgr_pkg_firewall_centralsnatmap` Configure central SNAT policies.
@@ -617,8 +617,8 @@ The collection provides the following modules:
* `fmgr_pkg_firewall_policy64` Configure IPv6 to IPv4 policies.
* `fmgr_pkg_firewall_policy6_sectionvalue` Configure IPv6 policies.
* `fmgr_pkg_firewall_policy_sectionvalue` Configure IPv4 policies.
-* `fmgr_pkg_firewall_policy_vpndstnode` no description.
-* `fmgr_pkg_firewall_policy_vpnsrcnode` no description.
+* `fmgr_pkg_firewall_policy_vpndstnode` Policy package firewall policy vpn dst node.
+* `fmgr_pkg_firewall_policy_vpnsrcnode` Policy package firewall policy vpn src node.
* `fmgr_pkg_firewall_proxypolicy` Configure proxy policies.
* `fmgr_pkg_firewall_proxypolicy_sectionvalue` Configure proxy policies.
* `fmgr_pkg_firewall_securitypolicy` Configure NGFW IPv4/IPv6 application policies.
@@ -631,13 +631,13 @@ The collection provides the following modules:
* `fmgr_pkg_header_policy6` Configure IPv6 policies.
* `fmgr_pkg_header_shapingpolicy` Configure shaping policies.
* `fmgr_pkg_user_nacpolicy` Configure NAC policy matching pattern to identify matching NAC devices.
-* `fmgr_pm_config_meta_reference` no description.
-* `fmgr_pm_config_metafields_firewall_address` no description.
-* `fmgr_pm_config_metafields_firewall_addrgrp` no description.
-* `fmgr_pm_config_metafields_firewall_centralsnatmap` no description.
-* `fmgr_pm_config_metafields_firewall_policy` no description.
-* `fmgr_pm_config_metafields_firewall_service_custom` no description.
-* `fmgr_pm_config_metafields_firewall_service_group` no description.
+* `fmgr_pm_config_meta_reference` Meta reference.
+* `fmgr_pm_config_metafields_firewall_address` Meta fields firewall address.
+* `fmgr_pm_config_metafields_firewall_addrgrp` Meta fields firewall addrgrp.
+* `fmgr_pm_config_metafields_firewall_centralsnatmap` Meta fields firewall central snat map.
+* `fmgr_pm_config_metafields_firewall_policy` Meta fields firewall policy.
+* `fmgr_pm_config_metafields_firewall_service_custom` Meta fields firewall service custom.
+* `fmgr_pm_config_metafields_firewall_service_group` Meta fields firewall service group.
* `fmgr_pm_config_pblock_firewall_consolidated_policy` Configure consolidated IPv4/IPv6 policies.
* `fmgr_pm_config_pblock_firewall_consolidated_policy_sectionvalue` Configure consolidated IPv4/IPv6 policies.
* `fmgr_pm_config_pblock_firewall_policy` Configure IPv4/IPv6 policies.
@@ -651,18 +651,18 @@ The collection provides the following modules:
* `fmgr_pm_config_workspace_commit` Commit changes to an ADOM.
* `fmgr_pm_config_workspace_lock` Lock an ADOM in workspace mode.
* `fmgr_pm_config_workspace_unlock` Unlock an ADOM.
-* `fmgr_pm_devprof_adom` no description.
-* `fmgr_pm_devprof_pkg` no description.
-* `fmgr_pm_devprof_scopemember` no description.
-* `fmgr_pm_pblock_adom` no description.
-* `fmgr_pm_pblock_obj` no description.
+* `fmgr_pm_devprof_adom` System template adom.
+* `fmgr_pm_devprof_pkg` System template adom.
+* `fmgr_pm_devprof_scopemember` System template scope member.
+* `fmgr_pm_pblock_adom` Policy block adom.
+* `fmgr_pm_pblock_obj` Policy block adom.
* `fmgr_pm_pkg` Policy package or folder.
* `fmgr_pm_pkg_adom` Policy package or folder.
* `fmgr_pm_pkg_global` Policy package or folder.
* `fmgr_pm_pkg_scopemember` Policy package or folder.
-* `fmgr_pm_wanprof_adom` no description.
-* `fmgr_pm_wanprof_pkg` no description.
-* `fmgr_pm_wanprof_scopemember` no description.
+* `fmgr_pm_wanprof_adom` Sd wan template adom.
+* `fmgr_pm_wanprof_pkg` Sd wan template adom.
+* `fmgr_pm_wanprof_scopemember` Sd wan template scope member.
* `fmgr_qosprofile` Configure WiFi quality of service.
* `fmgr_region` Configure FortiAP regions.
* `fmgr_router_accesslist` Configure access lists.
@@ -683,21 +683,21 @@ The collection provides the following modules:
* `fmgr_sctpfilter_profile_ppidfilters` PPID filters list.
* `fmgr_securityconsole_abort` Abort and cancel a security console task.
* `fmgr_securityconsole_assign_package` Assign or unassign global policy package to ADOM packages.
-* `fmgr_securityconsole_cliprof_check` no description.
+* `fmgr_securityconsole_cliprof_check` Securityconsole cliprof check.
* `fmgr_securityconsole_import_dev_objs` Import objects from device to ADOM, or from ADOM to Global.
-* `fmgr_securityconsole_install_device` no description.
-* `fmgr_securityconsole_install_objects_v2` no description.
+* `fmgr_securityconsole_install_device` Securityconsole install device.
+* `fmgr_securityconsole_install_objects_v2` Securityconsole install objects v2.
* `fmgr_securityconsole_install_package` Copy and install a policy package to devices.
* `fmgr_securityconsole_install_preview` Generate install preview for a device.
* `fmgr_securityconsole_package_cancel_install` Cancel policy install and clear preview cache.
* `fmgr_securityconsole_package_clone` Clone a policy package within the same ADOM.
* `fmgr_securityconsole_package_commit` Install policies to device from preview cache.
* `fmgr_securityconsole_package_move` Move and/or rename a policy package within the same ADOM.
-* `fmgr_securityconsole_pblock_clone` no description.
+* `fmgr_securityconsole_pblock_clone` Securityconsole policy block clone.
* `fmgr_securityconsole_preview_result` Retrieve the result of previous install/preview command.
* `fmgr_securityconsole_reinstall_package` Re-install a policy package that had been previously installed.
* `fmgr_securityconsole_sign_certificate_template` Generate and sign certificate on the target device.
-* `fmgr_securityconsole_template_cli_preview` no description.
+* `fmgr_securityconsole_template_cli_preview` Securityconsole template cli preview.
* `fmgr_spamfilter_bwl` Configure anti-spam black/white list.
* `fmgr_spamfilter_bwl_entries` Anti-spam black/white list entries.
* `fmgr_spamfilter_bword` Configure AntiSpam banned word list.
@@ -772,15 +772,15 @@ The collection provides the following modules:
* `fmgr_switchcontroller_trafficpolicy` Configure FortiSwitch traffic policy.
* `fmgr_switchcontroller_vlanpolicy` Configure VLAN policy to be applied on the managed FortiSwitch ports through dynamic-port-policy.
* `fmgr_sys_api_sdnconnector` Query SDN connector data.
-* `fmgr_sys_cloud_orchest` no description.
+* `fmgr_sys_cloud_orchest` Sys cloud orchest.
* `fmgr_sys_generate_wsdl` Generate WSDL for specific module and objects.
-* `fmgr_sys_hitcount` no description.
+* `fmgr_sys_hitcount` Sys hitcount.
* `fmgr_sys_login_challenge` Answer a log in challenge question, used following a login/user or login/challenge command.
* `fmgr_sys_login_user` Log into the device with user name and password.
* `fmgr_sys_logout` Log out a session.
* `fmgr_sys_proxy_json` Send and receive JSON request to/from managed devices.
* `fmgr_sys_reboot` Restart FortiManager.
-* `fmgr_sys_task_result` no description.
+* `fmgr_sys_task_result` Sys task result.
* `fmgr_system_admin_group` User group.
* `fmgr_system_admin_group_member` Group members.
* `fmgr_system_admin_ldap` LDAP server entry configuration.
@@ -837,7 +837,7 @@ The collection provides the following modules:
* `fmgr_system_fortiguard` Configure FortiGuard services.
* `fmgr_system_fortiview_autocache` FortiView auto-cache settings.
* `fmgr_system_fortiview_setting` FortiView settings.
-* `fmgr_system_geoipcountry` no description.
+* `fmgr_system_geoipcountry` System geoip country.
* `fmgr_system_geoipoverride` Configure geographical location mapping for IP address.
* `fmgr_system_geoipoverride_ip6range` Table of IPv6 ranges assigned to country.
* `fmgr_system_geoipoverride_iprange` Table of IP ranges assigned to country.
@@ -890,8 +890,8 @@ The collection provides the following modules:
* `fmgr_system_logfetch_serversettings` Log-fetch server settings.
* `fmgr_system_mail` Alert emails.
* `fmgr_system_mcpolicydisabledadoms` Multicast policy disabled adoms.
-* `fmgr_system_meta` no description.
-* `fmgr_system_meta_sysmetafields` no description.
+* `fmgr_system_meta` System meta.
+* `fmgr_system_meta_sysmetafields` System meta sys meta fields.
* `fmgr_system_metadata_admins` Configure admins.
* `fmgr_system_npu` Configure NPU attributes.
* `fmgr_system_npu_backgroundssescan` Configure driver background scan for SSE.
@@ -997,14 +997,14 @@ The collection provides the following modules:
* `fmgr_system_webproxy` Configure system web proxy.
* `fmgr_system_workflow_approvalmatrix` workflow approval matrix.
* `fmgr_system_workflow_approvalmatrix_approver` Approver.
-* `fmgr_template` no description.
-* `fmgr_templategroup` no description.
+* `fmgr_template` Cli template.
+* `fmgr_templategroup` Cli template group.
* `fmgr_um_image_upgrade` The older API for updating the firmware of specific device.
* `fmgr_um_image_upgrade_ext` Update the firmware of specific device.
* `fmgr_user_adgrp` Configure FSSO groups.
* `fmgr_user_certificate` Configure certificate users.
-* `fmgr_user_clearpass` no description.
-* `fmgr_user_connector` no description.
+* `fmgr_user_clearpass` User clearpass.
+* `fmgr_user_connector` User connector.
* `fmgr_user_device` Configure devices.
* `fmgr_user_device_dynamicmapping` Configure devices.
* `fmgr_user_device_tagging` Config object tagging.
@@ -1017,7 +1017,7 @@ The collection provides the following modules:
* `fmgr_user_domaincontroller` Configure domain controller entries.
* `fmgr_user_domaincontroller_extraserver` extra servers.
* `fmgr_user_exchange` Configure MS Exchange server entries.
-* `fmgr_user_flexvm` no description.
+* `fmgr_user_flexvm` User flexvm.
* `fmgr_user_fortitoken` Configure FortiToken.
* `fmgr_user_fsso` Configure Fortinet Single Sign On.
* `fmgr_user_fsso_dynamicmapping` Configure Fortinet Single Sign On.
@@ -1027,21 +1027,21 @@ The collection provides the following modules:
* `fmgr_user_group_dynamicmapping` Configure user groups.
* `fmgr_user_group_dynamicmapping_guest` Guest User.
* `fmgr_user_group_dynamicmapping_match` Group matches.
-* `fmgr_user_group_dynamicmapping_sslvpnoschecklist` no description.
+* `fmgr_user_group_dynamicmapping_sslvpnoschecklist` User group dynamic mapping sslvpn os check list.
* `fmgr_user_group_guest` Guest User.
* `fmgr_user_group_match` Group matches.
-* `fmgr_user_json` no description.
+* `fmgr_user_json` User json.
* `fmgr_user_krbkeytab` Configure Kerberos keytab entries.
* `fmgr_user_ldap` Configure LDAP server entries.
* `fmgr_user_ldap_dynamicmapping` Configure LDAP server entries.
* `fmgr_user_local` Configure local users.
-* `fmgr_user_nsx` no description.
-* `fmgr_user_nsx_service` no description.
+* `fmgr_user_nsx` User nsx.
+* `fmgr_user_nsx_service` User nsx service.
* `fmgr_user_passwordpolicy` Configure user password policy.
* `fmgr_user_peer` Configure peer users.
* `fmgr_user_peergrp` Configure peer groups.
* `fmgr_user_pop3` POP3 server entry configuration.
-* `fmgr_user_pxgrid` no description.
+* `fmgr_user_pxgrid` User pxgrid.
* `fmgr_user_radius` Configure RADIUS server entries.
* `fmgr_user_radius_accountingserver` Additional accounting servers.
* `fmgr_user_radius_dynamicmapping` Configure RADIUS server entries.
@@ -1052,8 +1052,8 @@ The collection provides the following modules:
* `fmgr_user_securityexemptlist_rule` Configure rules for exempting users from captive portal authentication.
* `fmgr_user_tacacs` Configure TACACS+ server entries.
* `fmgr_user_tacacs_dynamicmapping` Configure TACACS+ server entries.
-* `fmgr_user_vcenter` no description.
-* `fmgr_user_vcenter_rule` no description.
+* `fmgr_user_vcenter` User vcenter.
+* `fmgr_user_vcenter_rule` User vcenter rule.
* `fmgr_utmprofile` Configure UTM.
* `fmgr_vap` Configure Virtual Access Points.
* `fmgr_vap_dynamicmapping` Configure Virtual Access Points.
@@ -1086,11 +1086,11 @@ The collection provides the following modules:
* `fmgr_vpn_ssl_settings` Configure SSL VPN.
* `fmgr_vpn_ssl_settings_authenticationrule` Authentication rule for SSL VPN.
* `fmgr_vpnmgr_node` VPN node for VPN Manager.
-* `fmgr_vpnmgr_node_iprange` no description.
-* `fmgr_vpnmgr_node_ipv4excluderange` no description.
-* `fmgr_vpnmgr_node_protectedsubnet` no description.
-* `fmgr_vpnmgr_node_summaryaddr` no description.
-* `fmgr_vpnmgr_vpntable` no description.
+* `fmgr_vpnmgr_node_iprange` Vpnmgr node ip range.
+* `fmgr_vpnmgr_node_ipv4excluderange` Vpnmgr node ipv4 exclude range.
+* `fmgr_vpnmgr_node_protectedsubnet` Vpnmgr node protected subnet.
+* `fmgr_vpnmgr_node_summaryaddr` Vpnmgr node summary addr.
+* `fmgr_vpnmgr_vpntable` Vpnmgr vpntable.
* `fmgr_vpnsslweb_hostchecksoftware` SSL-VPN host check software.
* `fmgr_vpnsslweb_hostchecksoftware_checkitemlist` Check item list.
* `fmgr_vpnsslweb_portal` Portal.
@@ -1157,7 +1157,7 @@ The collection provides the following modules:
* `fmgr_wanprof_system_virtualwanlink_neighbor` SD-WAN neighbor table.
* `fmgr_wanprof_system_virtualwanlink_service` Create SD-WAN rules or priority rules.
* `fmgr_wanprof_system_virtualwanlink_service_sla` Service level agreement.
-* `fmgr_webfilter_categories` no description.
+* `fmgr_webfilter_categories` Webfilter categories.
* `fmgr_webfilter_content` Configure Web filter banned word table.
* `fmgr_webfilter_content_entries` Configure banned word entries.
* `fmgr_webfilter_contentheader` Configure content types used by Web filter.
diff --git a/ansible_collections/fortinet/fortimanager/changelogs/changelog.yaml b/ansible_collections/fortinet/fortimanager/changelogs/changelog.yaml
index ef83f81af..0bc058a9e 100644
--- a/ansible_collections/fortinet/fortimanager/changelogs/changelog.yaml
+++ b/ansible_collections/fortinet/fortimanager/changelogs/changelog.yaml
@@ -700,3 +700,20 @@ releases:
name: fmgr_videofilter_youtubekey
namespace: ""
release_date: "2024-02-06"
+ 2.5.0:
+ changes:
+ bugfixes:
+ - 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.
+ - 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.
+ - Improved documentation, added description for all "no description" modules.
+ minor_changes:
+ - Renamed the input argument "message" to "fmgr_message" to comply with Ansible
+ requirements.
+ release_summary: release fortinet.fortimanager 2.5.0
+ fragments:
+ - 2.5.0.yml
+ release_date: "2024-04-30"
diff --git a/ansible_collections/fortinet/fortimanager/changelogs/fragments/2.5.0.yml b/ansible_collections/fortinet/fortimanager/changelogs/fragments/2.5.0.yml
new file mode 100644
index 000000000..e9fae106c
--- /dev/null
+++ b/ansible_collections/fortinet/fortimanager/changelogs/fragments/2.5.0.yml
@@ -0,0 +1,8 @@
+release_summary: release fortinet.fortimanager 2.5.0
+minor_changes:
+ - Renamed the input argument "message" to "fmgr_message" to comply with Ansible requirements.
+bugfixes:
+ - Supported FortiManager 6.4.14, 7.0.11, 7.0.12, 7.2.5.
+ - Supported "state:absent" for all modules end with "_objectmember", "_scopemember", and "_scetionvalue".
+ - 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. \ No newline at end of file
diff --git a/ansible_collections/fortinet/fortimanager/meta/runtime.yml b/ansible_collections/fortinet/fortimanager/meta/runtime.yml
index be99ccf4b..898ad8ff5 100644
--- a/ansible_collections/fortinet/fortimanager/meta/runtime.yml
+++ b/ansible_collections/fortinet/fortimanager/meta/runtime.yml
@@ -1,2 +1,2 @@
---
-requires_ansible: '>=2.14.0'
+requires_ansible: '>=2.15.0'
diff --git a/ansible_collections/fortinet/fortimanager/plugins/module_utils/exported_schema.py b/ansible_collections/fortinet/fortimanager/plugins/module_utils/exported_schema.py
index ccab26352..fa63feca4 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/module_utils/exported_schema.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/module_utils/exported_schema.py
@@ -19,7 +19,7 @@ SCHEMA_DATA = '''
"options": {
"assign_excluded": {"choices": ["disable", "enable"], "type": "str"},
"specify_assign_pkg_list": {"choices": ["disable", "enable"], "type": "str"},
- "assign_name": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "type": "str"}
+ "assign_name": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "type": "str"}
}
},
"antivirus_mmschecksum": {
@@ -228,7 +228,7 @@ SCHEMA_DATA = '''
"fortisandbox": {"v_range": [["7.2.0", ""]], "choices": ["disable", "block", "monitor"], "type": "str"},
"fortiai": {"v_range": [["7.0.1", ""]], "choices": ["disable", "monitor", "block"], "type": "str"},
"unknown-content-encoding": {
- "v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]],
+ "v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]],
"choices": ["block", "inspect", "bypass"],
"type": "str"
}
@@ -642,7 +642,7 @@ SCHEMA_DATA = '''
"fortindr": {"v_range": [["7.0.5", ""]], "choices": ["disable", "block", "monitor"], "type": "str"},
"fortisandbox": {"v_range": [["7.2.0", ""]], "choices": ["disable", "block", "monitor"], "type": "str"},
"fortiai": {"v_range": [["7.0.1", ""]], "choices": ["disable", "monitor", "block"], "type": "str"},
- "unknown-content-encoding": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "choices": ["block", "inspect", "bypass"], "type": "str"}
+ "unknown-content-encoding": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "choices": ["block", "inspect", "bypass"], "type": "str"}
}
},
"antivirus_profile_imap": {
@@ -858,7 +858,7 @@ SCHEMA_DATA = '''
},
"comment": {"v_range": [["6.4.6", ""]], "type": "str"},
"name": {"v_range": [["6.4.6", ""]], "required": true, "type": "str"},
- "ap-family": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "choices": ["fap", "fap-u", "fap-c"], "type": "str"}
+ "ap-family": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "choices": ["fap", "fap-u", "fap-c"], "type": "str"}
}
},
"apcfgprofile_commandlist": {
@@ -1114,7 +1114,7 @@ SCHEMA_DATA = '''
"sub-category": {"type": "raw"},
"technology": {"type": "raw"},
"vendor": {"type": "raw"},
- "tags": {"v_range": [["6.2.0", "6.4.13"]], "type": "str"},
+ "tags": {"v_range": [["6.2.0", "6.4.14"]], "type": "str"},
"exclusion": {"v_range": [["6.2.7", "6.2.12"], ["6.4.3", ""]], "type": "raw"}
},
"elements": "dict"
@@ -1209,7 +1209,7 @@ SCHEMA_DATA = '''
"sub-category": {"type": "raw"},
"technology": {"type": "raw"},
"vendor": {"type": "raw"},
- "tags": {"v_range": [["6.2.0", "6.4.13"]], "type": "str"},
+ "tags": {"v_range": [["6.2.0", "6.4.14"]], "type": "str"},
"exclusion": {"v_range": [["6.2.7", "6.2.12"], ["6.4.3", ""]], "type": "raw"}
}
},
@@ -2102,8 +2102,8 @@ SCHEMA_DATA = '''
"interface-select-method": {"v_range": [["6.2.7", "6.2.12"], ["6.4.3", ""]], "choices": ["auto", "sdwan", "specify"], "type": "str"},
"preshared-key": {"v_range": [["7.0.0", ""]], "no_log": true, "type": "str"},
"alt-server": {"v_range": [["7.2.2", ""]], "type": "str"},
- "fallback-to-primary": {"v_range": [["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "server-cert-ca": {"v_range": [["7.4.2", ""]], "type": "str"}
+ "fallback-to-primary": {"v_range": [["7.2.5", "7.2.5"], ["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "server-cert-ca": {"v_range": [["7.2.5", "7.2.5"], ["7.4.2", ""]], "type": "str"}
}
},
"devprof_log_fortianalyzercloud_setting": {
@@ -2158,63 +2158,63 @@ SCHEMA_DATA = '''
"choices": ["emergency", "alert", "critical", "error", "warning", "notification", "information", "debug"],
"type": "str"
},
- "anomaly": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "anomaly": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"exclude-list": {
- "v_range": [["7.0.4", "7.0.10"]],
+ "v_range": [["7.0.4", "7.0.12"]],
"type": "list",
"options": {
"category": {
- "v_range": [["7.0.4", "7.0.10"]],
+ "v_range": [["7.0.4", "7.0.12"]],
"choices": ["app-ctrl", "attack", "dlp", "event", "traffic", "virus", "voip", "webfilter", "netscan", "spam", "anomaly", "waf"],
"type": "str"
},
"fields": {
- "v_range": [["7.0.4", "7.0.10"]],
+ "v_range": [["7.0.4", "7.0.12"]],
"type": "list",
"options": {
- "args": {"v_range": [["7.0.4", "7.0.10"]], "type": "raw"},
- "field": {"v_range": [["7.0.4", "7.0.10"]], "type": "str"},
- "negate": {"v_range": [["7.0.4", "7.0.10"]], "choices": ["disable", "enable"], "type": "str"}
+ "args": {"v_range": [["7.0.4", "7.0.12"]], "type": "raw"},
+ "field": {"v_range": [["7.0.4", "7.0.12"]], "type": "str"},
+ "negate": {"v_range": [["7.0.4", "7.0.12"]], "choices": ["disable", "enable"], "type": "str"}
},
"elements": "dict"
},
- "id": {"v_range": [["7.0.4", "7.0.10"]], "type": "int"}
+ "id": {"v_range": [["7.0.4", "7.0.12"]], "type": "int"}
},
"elements": "dict"
},
- "forward-traffic": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "forward-traffic": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"free-style": {
- "v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]],
+ "v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]],
"type": "list",
"options": {
"category": {
- "v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]],
+ "v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]],
"choices": [
"traffic", "event", "virus", "webfilter", "attack", "spam", "voip", "dlp", "app-ctrl", "anomaly", "waf", "gtp", "dns", "ssh",
"ssl", "file-filter", "icap", "ztna", "virtual-patch"
],
"type": "str"
},
- "filter": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "type": "str"},
- "filter-type": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "choices": ["include", "exclude"], "type": "str"},
- "id": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "type": "int"}
+ "filter": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "type": "str"},
+ "filter-type": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "choices": ["include", "exclude"], "type": "str"},
+ "id": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "type": "int"}
},
"elements": "dict"
},
- "gtp": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "local-traffic": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "multicast-traffic": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "sniffer-traffic": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "voip": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "ztna-traffic": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "filter-type": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "choices": ["include", "exclude"], "type": "str"},
- "filter": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "type": "str"},
- "cifs": {"v_range": [["7.0.4", "7.0.10"]], "choices": ["disable", "enable"], "type": "str"},
- "ssl": {"v_range": [["7.0.4", "7.0.10"]], "choices": ["disable", "enable"], "type": "str"},
- "dns": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", "7.2.1"]], "choices": ["disable", "enable"], "type": "str"},
- "ssh": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", "7.2.1"]], "choices": ["disable", "enable"], "type": "str"},
- "netscan-discovery": {"v_range": [["7.0.4", "7.0.10"]], "choices": ["disable", "enable"], "type": "str"},
- "netscan-vulnerability": {"v_range": [["7.0.4", "7.0.10"]], "choices": ["disable", "enable"], "type": "str"},
+ "gtp": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "local-traffic": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "multicast-traffic": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "sniffer-traffic": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "voip": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "ztna-traffic": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "filter-type": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "choices": ["include", "exclude"], "type": "str"},
+ "filter": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "type": "str"},
+ "cifs": {"v_range": [["7.0.4", "7.0.12"]], "choices": ["disable", "enable"], "type": "str"},
+ "ssl": {"v_range": [["7.0.4", "7.0.12"]], "choices": ["disable", "enable"], "type": "str"},
+ "dns": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", "7.2.1"]], "choices": ["disable", "enable"], "type": "str"},
+ "ssh": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", "7.2.1"]], "choices": ["disable", "enable"], "type": "str"},
+ "netscan-discovery": {"v_range": [["7.0.4", "7.0.12"]], "choices": ["disable", "enable"], "type": "str"},
+ "netscan-vulnerability": {"v_range": [["7.0.4", "7.0.12"]], "choices": ["disable", "enable"], "type": "str"},
"forti-switch": {"v_range": [["7.4.2", ""]], "choices": ["disable", "enable"], "type": "str"}
}
},
@@ -2222,45 +2222,45 @@ SCHEMA_DATA = '''
"stated": true,
"options": {
"category": {
- "v_range": [["7.0.4", "7.0.10"]],
+ "v_range": [["7.0.4", "7.0.12"]],
"choices": ["app-ctrl", "attack", "dlp", "event", "traffic", "virus", "voip", "webfilter", "netscan", "spam", "anomaly", "waf"],
"type": "str"
},
"fields": {
- "v_range": [["7.0.4", "7.0.10"]],
+ "v_range": [["7.0.4", "7.0.12"]],
"type": "list",
"options": {
- "args": {"v_range": [["7.0.4", "7.0.10"]], "type": "raw"},
- "field": {"v_range": [["7.0.4", "7.0.10"]], "type": "str"},
- "negate": {"v_range": [["7.0.4", "7.0.10"]], "choices": ["disable", "enable"], "type": "str"}
+ "args": {"v_range": [["7.0.4", "7.0.12"]], "type": "raw"},
+ "field": {"v_range": [["7.0.4", "7.0.12"]], "type": "str"},
+ "negate": {"v_range": [["7.0.4", "7.0.12"]], "choices": ["disable", "enable"], "type": "str"}
},
"elements": "dict"
},
- "id": {"v_range": [["7.0.4", "7.0.10"]], "required": true, "type": "int"}
+ "id": {"v_range": [["7.0.4", "7.0.12"]], "required": true, "type": "int"}
}
},
"devprof_log_syslogd_filter_excludelist_fields": {
"stated": true,
"options": {
- "args": {"v_range": [["7.0.4", "7.0.10"]], "type": "raw"},
- "field": {"v_range": [["7.0.4", "7.0.10"]], "type": "str"},
- "negate": {"v_range": [["7.0.4", "7.0.10"]], "choices": ["disable", "enable"], "type": "str"}
+ "args": {"v_range": [["7.0.4", "7.0.12"]], "type": "raw"},
+ "field": {"v_range": [["7.0.4", "7.0.12"]], "type": "str"},
+ "negate": {"v_range": [["7.0.4", "7.0.12"]], "choices": ["disable", "enable"], "type": "str"}
}
},
"devprof_log_syslogd_filter_freestyle": {
"stated": true,
"options": {
"category": {
- "v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]],
+ "v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]],
"choices": [
"traffic", "event", "virus", "webfilter", "attack", "spam", "voip", "dlp", "app-ctrl", "anomaly", "waf", "gtp", "dns", "ssh", "ssl",
"file-filter", "icap", "ztna", "virtual-patch"
],
"type": "str"
},
- "filter": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "type": "str"},
- "filter-type": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "choices": ["include", "exclude"], "type": "str"},
- "id": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "required": true, "type": "int"}
+ "filter": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "type": "str"},
+ "filter-type": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "choices": ["include", "exclude"], "type": "str"},
+ "id": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "required": true, "type": "int"}
}
},
"devprof_log_syslogd_setting": {
@@ -2289,21 +2289,21 @@ SCHEMA_DATA = '''
"type": "str"
},
"status": {"v_range": [["6.0.0", "6.2.5"], ["6.2.7", "6.4.1"], ["6.4.3", ""]], "choices": ["disable", "enable"], "type": "str"},
- "reliable": {"v_range": [["6.2.0", "6.2.5"], ["6.2.7", "6.4.1"], ["6.4.3", "6.4.13"]], "choices": ["disable", "enable"], "type": "str"},
+ "reliable": {"v_range": [["6.2.0", "6.2.5"], ["6.2.7", "6.4.1"], ["6.4.3", "6.4.14"]], "choices": ["disable", "enable"], "type": "str"},
"csv": {"v_range": [["6.2.0", "6.2.5"], ["6.2.7", "6.2.12"]], "choices": ["disable", "enable"], "type": "str"},
"max-log-rate": {"v_range": [["6.2.2", "6.2.5"], ["6.2.7", "6.4.1"], ["6.4.3", ""]], "type": "int"},
"priority": {"v_range": [["6.2.2", "6.2.5"], ["6.2.7", "6.4.1"], ["6.4.3", ""]], "choices": ["low", "default"], "type": "str"},
"interface": {"v_range": [["6.2.7", "6.2.12"], ["6.4.3", ""]], "type": "str"},
"interface-select-method": {"v_range": [["6.2.7", "6.2.12"], ["6.4.3", ""]], "choices": ["auto", "sdwan", "specify"], "type": "str"},
- "format": {"v_range": [["6.4.6", "6.4.13"], ["7.0.1", ""]], "choices": ["default", "csv", "cef", "rfc5424", "json"], "type": "str"},
+ "format": {"v_range": [["6.4.6", "6.4.14"], ["7.0.1", ""]], "choices": ["default", "csv", "cef", "rfc5424", "json"], "type": "str"},
"syslog-type": {"v_range": [["6.2.0", "6.2.0"]], "type": "int"},
"custom-field-name": {
- "v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]],
+ "v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]],
"type": "list",
"options": {
- "custom": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "type": "str"},
- "id": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "type": "int"},
- "name": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "type": "str"}
+ "custom": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "type": "str"},
+ "id": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "type": "int"},
+ "name": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "type": "str"}
},
"elements": "dict"
}
@@ -2312,9 +2312,9 @@ SCHEMA_DATA = '''
"devprof_log_syslogd_setting_customfieldname": {
"stated": true,
"options": {
- "custom": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "type": "str"},
- "id": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "required": true, "type": "int"},
- "name": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "type": "str"}
+ "custom": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "type": "str"},
+ "id": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "required": true, "type": "int"},
+ "name": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "type": "str"}
}
},
"devprof_system_centralmanagement": {
@@ -2417,7 +2417,7 @@ SCHEMA_DATA = '''
"admin-sport": {"v_range": [["6.0.0", "6.2.5"], ["6.2.7", "6.4.1"], ["6.4.3", ""]], "type": "int"},
"admin-ssh-port": {"v_range": [["6.0.0", "6.2.5"], ["6.2.7", "6.4.1"], ["6.4.3", ""]], "type": "int"},
"admin-ssh-v1": {"v_range": [["6.0.0", "6.2.5"], ["6.2.7", "6.4.1"], ["6.4.3", ""]], "choices": ["disable", "enable"], "type": "str"},
- "admin-telnet-port": {"v_range": [["6.0.0", "6.2.5"], ["6.2.7", "6.4.1"], ["6.4.3", "7.4.1"]], "type": "int"},
+ "admin-telnet-port": {"v_range": [["6.0.0", "6.2.5"], ["6.2.7", "6.4.1"], ["6.4.3", "7.2.4"], ["7.4.0", "7.4.1"]], "type": "int"},
"admintimeout": {"v_range": [["6.0.0", "6.2.5"], ["6.2.7", "6.4.1"], ["6.4.3", ""]], "type": "int"},
"gui-ipv6": {"v_range": [["6.0.0", "6.2.5"], ["6.2.7", "6.4.1"], ["6.4.3", ""]], "choices": ["disable", "enable"], "type": "str"},
"gui-lines-per-page": {"v_range": [["6.0.0", "6.2.5"], ["6.2.7", "6.4.1"], ["6.4.3", ""]], "type": "int"},
@@ -3459,7 +3459,7 @@ SCHEMA_DATA = '''
"role": {"choices": ["slave", "master"], "type": "str"},
"sn": {"type": "str"},
"status": {"type": "int"},
- "conf_status": {"v_range": [["7.0.10", "7.0.10"], ["7.2.1", ""]], "type": "int"}
+ "conf_status": {"v_range": [["7.0.10", "7.0.12"], ["7.2.1", ""]], "type": "int"}
},
"elements": "dict"
},
@@ -3527,11 +3527,11 @@ SCHEMA_DATA = '''
"nsxt_service_name": {"v_range": [["6.4.4", ""]], "type": "str"},
"private_key": {"v_range": [["6.2.7", "6.2.12"], ["6.4.4", ""]], "no_log": true, "type": "str"},
"private_key_status": {"v_range": [["6.2.7", "6.2.12"], ["6.4.4", ""]], "no_log": true, "type": "int"},
- "vm_lic_overdue_since": {"v_range": [["6.4.12", "6.4.13"], ["7.0.8", "7.0.10"], ["7.2.3", ""]], "type": "int"},
- "first_tunnel_up": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "type": "int"},
+ "vm_lic_overdue_since": {"v_range": [["6.4.12", "6.4.14"], ["7.0.8", "7.0.12"], ["7.2.3", ""]], "type": "int"},
+ "first_tunnel_up": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "type": "int"},
"eip": {"v_range": [["7.2.1", ""]], "type": "str"},
"mgmt_uuid": {"v_range": [["7.2.1", ""]], "type": "str"},
- "hw_generation": {"v_range": [["7.2.4", "7.2.4"], ["7.4.1", ""]], "type": "int"}
+ "hw_generation": {"v_range": [["7.2.4", "7.2.5"], ["7.4.1", ""]], "type": "int"}
},
"elements": "dict"
},
@@ -3666,7 +3666,7 @@ SCHEMA_DATA = '''
"role": {"choices": ["slave", "master"], "type": "str"},
"sn": {"type": "str"},
"status": {"type": "int"},
- "conf_status": {"v_range": [["7.0.10", "7.0.10"], ["7.2.1", ""]], "type": "int"}
+ "conf_status": {"v_range": [["7.0.10", "7.0.12"], ["7.2.1", ""]], "type": "int"}
},
"elements": "dict"
},
@@ -3734,14 +3734,14 @@ SCHEMA_DATA = '''
"nsxt_service_name": {"v_range": [["6.4.4", ""]], "type": "str"},
"private_key": {"v_range": [["6.2.7", "6.2.12"], ["6.4.4", ""]], "no_log": true, "type": "str"},
"private_key_status": {"v_range": [["6.2.7", "6.2.12"], ["6.4.4", ""]], "no_log": true, "type": "int"},
- "vm_lic_overdue_since": {"v_range": [["6.4.12", "6.4.13"], ["7.0.8", "7.0.10"], ["7.2.3", ""]], "type": "int"},
- "first_tunnel_up": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "type": "int"},
+ "vm_lic_overdue_since": {"v_range": [["6.4.12", "6.4.14"], ["7.0.8", "7.0.12"], ["7.2.3", ""]], "type": "int"},
+ "first_tunnel_up": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "type": "int"},
"eip": {"v_range": [["7.2.1", ""]], "type": "str"},
"mgmt_uuid": {"v_range": [["7.2.1", ""]], "type": "str"},
- "hw_generation": {"v_range": [["7.2.4", "7.2.4"], ["7.4.1", ""]], "type": "int"}
+ "hw_generation": {"v_range": [["7.2.4", "7.2.5"], ["7.4.1", ""]], "type": "int"}
}
},
- "dvmdb_device_replace_sn": {"stated": true, "options": {"sn": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"}}},
+ "dvmdb_device_replace_sn": {"stated": true, "options": {"sn": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"}}},
"dvmdb_device_vdom": {
"stated": true,
"options": {
@@ -3853,19 +3853,19 @@ SCHEMA_DATA = '''
"dvmdb_script_execute": {
"stated": true,
"options": {
- "adom": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "package": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
+ "adom": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "package": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
"scope": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"type": "list",
"options": {
- "name": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "vdom": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"}
+ "name": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "vdom": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"}
},
"elements": "dict"
},
- "script": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "pblock": {"v_range": [["7.0.10", "7.0.10"], ["7.4.2", ""]], "type": "str"}
+ "script": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "pblock": {"v_range": [["7.0.10", "7.0.12"], ["7.2.5", "7.2.5"], ["7.4.2", ""]], "type": "str"}
}
},
"dvmdb_script_objectmember": {"stated": true, "options": {"name": {"type": "str"}, "vdom": {"type": "str"}}},
@@ -4037,7 +4037,7 @@ SCHEMA_DATA = '''
},
"wildcard": {"v_range": [["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"wildcard-intf": {"v_range": [["7.0.1", ""]], "type": "str"},
- "zone-only": {"v_range": [["6.4.7", "6.4.13"], ["7.0.3", ""]], "choices": ["disable", "enable"], "type": "str"}
+ "zone-only": {"v_range": [["6.4.7", "6.4.14"], ["7.0.3", ""]], "choices": ["disable", "enable"], "type": "str"}
}
},
"dynamic_interface_dynamicmapping": {
@@ -4090,170 +4090,170 @@ SCHEMA_DATA = '''
"dynamic_virtualwanlink_members": {
"stated": true,
"options": {
- "comment": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
- "cost": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"},
- "detect-failtime": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"},
- "detect-http-get": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
- "detect-http-match": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
- "detect-http-port": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"},
- "detect-interval": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"},
- "detect-protocol": {"v_range": [["6.0.0", "6.4.13"]], "choices": ["ping", "tcp-echo", "udp-echo", "http"], "type": "str"},
- "detect-recoverytime": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"},
- "detect-server": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
- "detect-timeout": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"},
+ "comment": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
+ "cost": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"},
+ "detect-failtime": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"},
+ "detect-http-get": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
+ "detect-http-match": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
+ "detect-http-port": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"},
+ "detect-interval": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"},
+ "detect-protocol": {"v_range": [["6.0.0", "6.4.14"]], "choices": ["ping", "tcp-echo", "udp-echo", "http"], "type": "str"},
+ "detect-recoverytime": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"},
+ "detect-server": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
+ "detect-timeout": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"},
"dynamic_mapping": {
- "v_range": [["6.0.0", "6.4.13"]],
+ "v_range": [["6.0.0", "6.4.14"]],
"type": "list",
"options": {
"_scope": {
- "v_range": [["6.0.0", "6.4.13"]],
+ "v_range": [["6.0.0", "6.4.14"]],
"type": "list",
- "options": {"name": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"}, "vdom": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"}},
+ "options": {"name": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"}, "vdom": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"}},
"elements": "dict"
},
- "comment": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
- "cost": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"},
- "detect-failtime": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"},
- "detect-http-get": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
- "detect-http-match": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
- "detect-http-port": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"},
- "detect-interval": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"},
- "detect-protocol": {"v_range": [["6.0.0", "6.4.13"]], "choices": ["ping", "tcp-echo", "udp-echo", "http"], "type": "str"},
- "detect-recoverytime": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"},
- "detect-server": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
- "detect-timeout": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"},
- "gateway": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
- "gateway6": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
- "ingress-spillover-threshold": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"},
+ "comment": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
+ "cost": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"},
+ "detect-failtime": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"},
+ "detect-http-get": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
+ "detect-http-match": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
+ "detect-http-port": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"},
+ "detect-interval": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"},
+ "detect-protocol": {"v_range": [["6.0.0", "6.4.14"]], "choices": ["ping", "tcp-echo", "udp-echo", "http"], "type": "str"},
+ "detect-recoverytime": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"},
+ "detect-server": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
+ "detect-timeout": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"},
+ "gateway": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
+ "gateway6": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
+ "ingress-spillover-threshold": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"},
"interface": {"v_range": [["6.0.0", "6.4.0"]], "type": "str"},
- "priority": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"},
- "source": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
- "source6": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
- "spillover-threshold": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"},
- "status": {"v_range": [["6.0.0", "6.4.13"]], "choices": ["disable", "enable"], "type": "str"},
- "volume-ratio": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"},
- "weight": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"}
- },
- "elements": "dict"
- },
- "gateway": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
- "gateway6": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
- "ingress-spillover-threshold": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"},
- "interface": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
- "name": {"v_range": [["6.0.0", "6.4.13"]], "required": true, "type": "str"},
- "priority": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"},
- "source": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
- "source6": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
- "spillover-threshold": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"},
- "status": {"v_range": [["6.0.0", "6.4.13"]], "choices": ["disable", "enable"], "type": "str"},
- "volume-ratio": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"},
- "weight": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"}
+ "priority": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"},
+ "source": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
+ "source6": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
+ "spillover-threshold": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"},
+ "status": {"v_range": [["6.0.0", "6.4.14"]], "choices": ["disable", "enable"], "type": "str"},
+ "volume-ratio": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"},
+ "weight": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"}
+ },
+ "elements": "dict"
+ },
+ "gateway": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
+ "gateway6": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
+ "ingress-spillover-threshold": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"},
+ "interface": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
+ "name": {"v_range": [["6.0.0", "6.4.14"]], "required": true, "type": "str"},
+ "priority": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"},
+ "source": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
+ "source6": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
+ "spillover-threshold": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"},
+ "status": {"v_range": [["6.0.0", "6.4.14"]], "choices": ["disable", "enable"], "type": "str"},
+ "volume-ratio": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"},
+ "weight": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"}
}
},
"dynamic_virtualwanlink_members_dynamicmapping": {
"stated": true,
"options": {
"_scope": {
- "v_range": [["6.0.0", "6.4.13"]],
- "type": "list",
- "options": {"name": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"}, "vdom": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"}},
- "elements": "dict"
- },
- "comment": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
- "cost": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"},
- "detect-failtime": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"},
- "detect-http-get": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
- "detect-http-match": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
- "detect-http-port": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"},
- "detect-interval": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"},
- "detect-protocol": {"v_range": [["6.0.0", "6.4.13"]], "choices": ["ping", "tcp-echo", "udp-echo", "http"], "type": "str"},
- "detect-recoverytime": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"},
- "detect-server": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
- "detect-timeout": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"},
- "gateway": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
- "gateway6": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
- "ingress-spillover-threshold": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"},
+ "v_range": [["6.0.0", "6.4.14"]],
+ "type": "list",
+ "options": {"name": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"}, "vdom": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"}},
+ "elements": "dict"
+ },
+ "comment": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
+ "cost": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"},
+ "detect-failtime": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"},
+ "detect-http-get": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
+ "detect-http-match": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
+ "detect-http-port": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"},
+ "detect-interval": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"},
+ "detect-protocol": {"v_range": [["6.0.0", "6.4.14"]], "choices": ["ping", "tcp-echo", "udp-echo", "http"], "type": "str"},
+ "detect-recoverytime": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"},
+ "detect-server": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
+ "detect-timeout": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"},
+ "gateway": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
+ "gateway6": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
+ "ingress-spillover-threshold": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"},
"interface": {"v_range": [["6.0.0", "6.4.0"]], "type": "str"},
- "priority": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"},
- "source": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
- "source6": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
- "spillover-threshold": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"},
- "status": {"v_range": [["6.0.0", "6.4.13"]], "choices": ["disable", "enable"], "type": "str"},
- "volume-ratio": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"},
- "weight": {"v_range": [["6.0.0", "6.4.13"]], "type": "int"}
+ "priority": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"},
+ "source": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
+ "source6": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
+ "spillover-threshold": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"},
+ "status": {"v_range": [["6.0.0", "6.4.14"]], "choices": ["disable", "enable"], "type": "str"},
+ "volume-ratio": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"},
+ "weight": {"v_range": [["6.0.0", "6.4.14"]], "type": "int"}
}
},
"dynamic_virtualwanlink_neighbor": {
"stated": true,
"options": {
- "description": {"v_range": [["6.2.2", "6.4.13"]], "type": "str"},
+ "description": {"v_range": [["6.2.2", "6.4.14"]], "type": "str"},
"dynamic_mapping": {
- "v_range": [["6.2.2", "6.4.13"]],
+ "v_range": [["6.2.2", "6.4.14"]],
"type": "list",
"options": {
"_scope": {
- "v_range": [["6.2.2", "6.4.13"]],
+ "v_range": [["6.2.2", "6.4.14"]],
"type": "list",
- "options": {"name": {"v_range": [["6.2.2", "6.4.13"]], "type": "str"}, "vdom": {"v_range": [["6.2.2", "6.4.13"]], "type": "str"}},
+ "options": {"name": {"v_range": [["6.2.2", "6.4.14"]], "type": "str"}, "vdom": {"v_range": [["6.2.2", "6.4.14"]], "type": "str"}},
"elements": "dict"
},
- "description": {"v_range": [["6.2.2", "6.4.13"]], "type": "str"},
- "ip": {"v_range": [["6.2.2", "6.4.13"]], "type": "str"},
- "role": {"v_range": [["6.2.2", "6.4.13"]], "choices": ["primary", "secondary", "standalone"], "type": "str"}
+ "description": {"v_range": [["6.2.2", "6.4.14"]], "type": "str"},
+ "ip": {"v_range": [["6.2.2", "6.4.14"]], "type": "str"},
+ "role": {"v_range": [["6.2.2", "6.4.14"]], "choices": ["primary", "secondary", "standalone"], "type": "str"}
},
"elements": "dict"
},
- "ip": {"v_range": [["6.2.2", "6.4.13"]], "type": "str"},
- "name": {"v_range": [["6.2.2", "6.4.13"]], "required": true, "type": "str"},
- "role": {"v_range": [["6.2.2", "6.4.13"]], "choices": ["primary", "secondary", "standalone"], "type": "str"}
+ "ip": {"v_range": [["6.2.2", "6.4.14"]], "type": "str"},
+ "name": {"v_range": [["6.2.2", "6.4.14"]], "required": true, "type": "str"},
+ "role": {"v_range": [["6.2.2", "6.4.14"]], "choices": ["primary", "secondary", "standalone"], "type": "str"}
}
},
"dynamic_virtualwanlink_neighbor_dynamicmapping": {
"stated": true,
"options": {
"_scope": {
- "v_range": [["6.2.2", "6.4.13"]],
+ "v_range": [["6.2.2", "6.4.14"]],
"type": "list",
- "options": {"name": {"v_range": [["6.2.2", "6.4.13"]], "type": "str"}, "vdom": {"v_range": [["6.2.2", "6.4.13"]], "type": "str"}},
+ "options": {"name": {"v_range": [["6.2.2", "6.4.14"]], "type": "str"}, "vdom": {"v_range": [["6.2.2", "6.4.14"]], "type": "str"}},
"elements": "dict"
},
- "description": {"v_range": [["6.2.2", "6.4.13"]], "type": "str"},
- "ip": {"v_range": [["6.2.2", "6.4.13"]], "type": "str"},
- "role": {"v_range": [["6.2.2", "6.4.13"]], "choices": ["primary", "secondary", "standalone"], "type": "str"}
+ "description": {"v_range": [["6.2.2", "6.4.14"]], "type": "str"},
+ "ip": {"v_range": [["6.2.2", "6.4.14"]], "type": "str"},
+ "role": {"v_range": [["6.2.2", "6.4.14"]], "choices": ["primary", "secondary", "standalone"], "type": "str"}
}
},
"dynamic_virtualwanlink_server": {
"stated": true,
"options": {
- "description": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
+ "description": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
"dynamic_mapping": {
- "v_range": [["6.0.0", "6.4.13"]],
+ "v_range": [["6.0.0", "6.4.14"]],
"type": "list",
"options": {
"_scope": {
- "v_range": [["6.0.0", "6.4.13"]],
+ "v_range": [["6.0.0", "6.4.14"]],
"type": "list",
- "options": {"name": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"}, "vdom": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"}},
+ "options": {"name": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"}, "vdom": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"}},
"elements": "dict"
},
- "server": {"v_range": [["6.0.0", "6.4.13"]], "type": "raw"}
+ "server": {"v_range": [["6.0.0", "6.4.14"]], "type": "raw"}
},
"elements": "dict"
},
- "name": {"v_range": [["6.0.0", "6.4.13"]], "required": true, "type": "str"},
- "server": {"v_range": [["6.0.0", "6.4.13"]], "type": "raw"}
+ "name": {"v_range": [["6.0.0", "6.4.14"]], "required": true, "type": "str"},
+ "server": {"v_range": [["6.0.0", "6.4.14"]], "type": "raw"}
}
},
"dynamic_virtualwanlink_server_dynamicmapping": {
"stated": true,
"options": {
"_scope": {
- "v_range": [["6.0.0", "6.4.13"]],
+ "v_range": [["6.0.0", "6.4.14"]],
"type": "list",
- "options": {"name": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"}, "vdom": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"}},
+ "options": {"name": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"}, "vdom": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"}},
"elements": "dict"
},
- "server": {"v_range": [["6.0.0", "6.4.13"]], "type": "raw"}
+ "server": {"v_range": [["6.0.0", "6.4.14"]], "type": "raw"}
}
},
"dynamic_vpntunnel": {
@@ -4754,13 +4754,13 @@ SCHEMA_DATA = '''
"admin-username": {"v_range": [["7.0.2", ""]], "type": "str"},
"serial-number": {"v_range": [["7.0.2", ""]], "type": "str"},
"admin-password": {"v_range": [["7.0.2", ""]], "no_log": true, "type": "raw"},
- "interface": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "type": "str"},
- "interface-select-method": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "choices": ["auto", "sdwan", "specify"], "type": "str"},
- "dirty-reason": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "choices": ["none", "mismatched-ems-sn"], "type": "str"},
- "ems-id": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "int"},
- "status": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "ca-cn-info": {"v_range": [["7.0.6", "7.0.10"], ["7.2.2", ""]], "type": "str"},
- "trust-ca-cn": {"v_range": [["7.0.6", "7.0.10"], ["7.2.2", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "interface": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "type": "str"},
+ "interface-select-method": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "choices": ["auto", "sdwan", "specify"], "type": "str"},
+ "dirty-reason": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "choices": ["none", "mismatched-ems-sn"], "type": "str"},
+ "ems-id": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "int"},
+ "status": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "ca-cn-info": {"v_range": [["7.0.6", "7.0.12"], ["7.2.2", ""]], "type": "str"},
+ "trust-ca-cn": {"v_range": [["7.0.6", "7.0.12"], ["7.2.2", ""]], "choices": ["disable", "enable"], "type": "str"},
"tenant-id": {"v_range": [["7.2.1", ""]], "type": "str"},
"send-tags-to-all-vdoms": {"v_range": [["7.4.2", ""]], "choices": ["disable", "enable"], "type": "str"},
"verified-cn": {"v_range": [["7.4.2", ""]], "type": "str"},
@@ -7228,7 +7228,7 @@ SCHEMA_DATA = '''
"host-type": {"v_range": [["7.0.1", ""]], "choices": ["sub-string", "wildcard"], "type": "str"},
"name": {"v_range": [["7.0.1", ""]], "required": true, "type": "str"},
"ssl-certificate": {"v_range": [["7.0.1", ""]], "type": "str"},
- "replacemsg-group": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "str"}
+ "replacemsg-group": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "str"}
}
},
"firewall_address": {
@@ -7353,7 +7353,7 @@ SCHEMA_DATA = '''
"interface": {"v_range": [["6.2.0", ""]], "type": "str"},
"sdn-addr-type": {"v_range": [["6.2.0", ""]], "choices": ["private", "public", "all"], "type": "str"},
"start-mac": {"v_range": [["6.2.0", ""]], "type": "str"},
- "tags": {"v_range": [["6.2.0", "6.4.13"]], "type": "str"},
+ "tags": {"v_range": [["6.2.0", "6.4.14"]], "type": "str"},
"profile-list": {
"v_range": [["6.2.0", "6.2.12"]],
"type": "list",
@@ -7468,7 +7468,7 @@ SCHEMA_DATA = '''
"type": {"choices": ["ipprefix", "iprange", "nsx", "dynamic", "fqdn", "template", "mac", "geography", "route-tag"], "type": "str"},
"uuid": {"type": "str"},
"visibility": {"choices": ["disable", "enable"], "type": "str"},
- "tags": {"v_range": [["6.2.0", "6.4.13"]], "type": "str"},
+ "tags": {"v_range": [["6.2.0", "6.4.14"]], "type": "str"},
"profile-list": {
"v_range": [["6.2.0", "6.2.12"]],
"type": "list",
@@ -7707,7 +7707,7 @@ SCHEMA_DATA = '''
"visibility": {"choices": ["disable", "enable"], "type": "str"},
"exclude": {"v_range": [["6.2.0", ""]], "choices": ["disable", "enable"], "type": "str"},
"exclude-member": {"v_range": [["6.2.0", ""]], "type": "raw"},
- "tags": {"v_range": [["6.2.0", "6.4.13"]], "type": "str"},
+ "tags": {"v_range": [["6.2.0", "6.4.14"]], "type": "str"},
"_image-base64": {"v_range": [["6.2.2", ""]], "type": "str"},
"global-object": {"v_range": [["6.4.0", ""]], "type": "int"},
"type": {"v_range": [["6.4.0", ""]], "choices": ["default", "array", "folder"], "type": "str"},
@@ -7743,7 +7743,7 @@ SCHEMA_DATA = '''
"tagging": {"type": "list", "options": {"category": {"type": "str"}, "name": {"type": "str"}, "tags": {"type": "raw"}}, "elements": "dict"},
"uuid": {"type": "str"},
"visibility": {"choices": ["disable", "enable"], "type": "str"},
- "tags": {"v_range": [["6.2.0", "6.4.13"]], "type": "str"},
+ "tags": {"v_range": [["6.2.0", "6.4.14"]], "type": "str"},
"_image-base64": {"v_range": [["6.2.2", ""]], "type": "str"},
"global-object": {"v_range": [["6.4.0", ""]], "type": "int"},
"fabric-object": {"v_range": [["6.4.4", ""]], "choices": ["disable", "enable"], "type": "str"},
@@ -8877,9 +8877,9 @@ SCHEMA_DATA = '''
"port-per-user": {"v_range": [["7.0.0", ""]], "type": "int"},
"startport": {"v_range": [["7.0.0", ""]], "type": "int"},
"add-nat64-route": {"v_range": [["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "cgn-client-ipv6shift": {"v_range": [["6.2.9", "6.2.12"], ["6.4.7", "6.4.13"], ["7.0.2", ""]], "type": "int"},
+ "cgn-client-ipv6shift": {"v_range": [["6.2.9", "6.2.12"], ["6.4.7", "6.4.14"], ["7.0.2", ""]], "type": "int"},
"nat64": {"v_range": [["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "subnet-broadcast-in-ippool": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "subnet-broadcast-in-ippool": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "choices": ["disable", "enable"], "type": "str"},
"exclude-ip": {"v_range": [["7.2.2", ""]], "type": "raw"}
},
"elements": "dict"
@@ -8908,8 +8908,8 @@ SCHEMA_DATA = '''
"startport": {"v_range": [["7.0.0", ""]], "type": "int"},
"add-nat64-route": {"v_range": [["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"nat64": {"v_range": [["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "cgn-client-ipv6shift": {"v_range": [["6.2.9", "6.2.12"], ["6.4.7", "6.4.13"], ["7.0.2", ""]], "type": "int"},
- "subnet-broadcast-in-ippool": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "cgn-client-ipv6shift": {"v_range": [["6.2.9", "6.2.12"], ["6.4.7", "6.4.14"], ["7.0.2", ""]], "type": "int"},
+ "subnet-broadcast-in-ippool": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "choices": ["disable", "enable"], "type": "str"},
"exclude-ip": {"v_range": [["7.2.2", ""]], "type": "raw"}
}
},
@@ -8978,19 +8978,19 @@ SCHEMA_DATA = '''
"port-per-user": {"v_range": [["7.0.0", ""]], "type": "int"},
"startport": {"v_range": [["7.0.0", ""]], "type": "int"},
"add-nat64-route": {"v_range": [["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "cgn-client-ipv6shift": {"v_range": [["6.2.9", "6.2.12"], ["6.4.7", "6.4.13"], ["7.0.2", ""]], "type": "int"},
+ "cgn-client-ipv6shift": {"v_range": [["6.2.9", "6.2.12"], ["6.4.7", "6.4.14"], ["7.0.2", ""]], "type": "int"},
"nat64": {"v_range": [["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "subnet-broadcast-in-ippool": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "subnet-broadcast-in-ippool": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "choices": ["disable", "enable"], "type": "str"},
"exclude-ip": {"v_range": [["7.2.2", ""]], "type": "raw"}
}
},
"firewall_ippoolgrp": {
"stated": true,
"options": {
- "comments": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "member": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "raw"},
- "name": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "required": true, "type": "str"},
- "uuid": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"}
+ "comments": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "member": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "raw"},
+ "name": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "required": true, "type": "str"},
+ "uuid": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"}
}
},
"firewall_ldbmonitor": {
@@ -9356,7 +9356,7 @@ SCHEMA_DATA = '''
"tagging": {"type": "list", "options": {"category": {"type": "str"}, "name": {"type": "str"}, "tags": {"type": "raw"}}, "elements": "dict"},
"type": {"choices": ["multicastrange", "broadcastmask"], "type": "str"},
"visibility": {"choices": ["disable", "enable"], "type": "str"},
- "tags": {"v_range": [["6.2.0", "6.4.13"]], "type": "str"}
+ "tags": {"v_range": [["6.2.0", "6.4.14"]], "type": "str"}
}
},
"firewall_multicastaddress6": {
@@ -9368,7 +9368,7 @@ SCHEMA_DATA = '''
"name": {"required": true, "type": "str"},
"tagging": {"type": "list", "options": {"category": {"type": "str"}, "name": {"type": "str"}, "tags": {"type": "raw"}}, "elements": "dict"},
"visibility": {"choices": ["disable", "enable"], "type": "str"},
- "tags": {"v_range": [["6.2.0", "6.4.13"]], "type": "str"}
+ "tags": {"v_range": [["6.2.0", "6.4.14"]], "type": "str"}
}
},
"firewall_multicastaddress6_tagging": {
@@ -9514,7 +9514,7 @@ SCHEMA_DATA = '''
"tcp-window-minimum": {"v_range": [["7.0.0", ""]], "type": "int"},
"tcp-window-size": {"v_range": [["7.0.0", ""]], "type": "int"},
"tcp-window-type": {"v_range": [["7.0.0", ""]], "choices": ["system", "static", "dynamic", "auto-tuning"], "type": "str"},
- "explicit-ftp-tls": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"}
+ "explicit-ftp-tls": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"}
}
},
"http": {
@@ -9816,7 +9816,7 @@ SCHEMA_DATA = '''
"tcp-window-minimum": {"v_range": [["7.0.0", ""]], "type": "int"},
"tcp-window-size": {"v_range": [["7.0.0", ""]], "type": "int"},
"tcp-window-type": {"v_range": [["7.0.0", ""]], "choices": ["system", "static", "dynamic", "auto-tuning"], "type": "str"},
- "explicit-ftp-tls": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"}
+ "explicit-ftp-tls": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"}
}
},
"firewall_profileprotocoloptions_http": {
@@ -9996,7 +9996,7 @@ SCHEMA_DATA = '''
"ua": {"type": "list", "choices": ["chrome", "ms", "firefox", "safari", "other", "ie", "edge"], "elements": "str"},
"uuid": {"type": "str"},
"visibility": {"choices": ["disable", "enable"], "type": "str"},
- "tags": {"v_range": [["6.2.0", "6.4.13"]], "type": "str"},
+ "tags": {"v_range": [["6.2.0", "6.4.14"]], "type": "str"},
"_image-base64": {"v_range": [["6.2.2", ""]], "type": "str"},
"application": {"v_range": [["7.2.1", ""]], "type": "raw"},
"ua-max-ver": {"v_range": [["7.2.2", ""]], "type": "str"},
@@ -10027,7 +10027,7 @@ SCHEMA_DATA = '''
"type": {"choices": ["src", "dst"], "type": "str"},
"uuid": {"type": "str"},
"visibility": {"choices": ["disable", "enable"], "type": "str"},
- "tags": {"v_range": [["6.2.0", "6.4.13"]], "type": "str"},
+ "tags": {"v_range": [["6.2.0", "6.4.14"]], "type": "str"},
"_image-base64": {"v_range": [["6.2.2", ""]], "type": "str"}
}
},
@@ -10438,13 +10438,13 @@ SCHEMA_DATA = '''
"unsupported-version": {"v_range": [["6.2.8", "6.2.12"], ["6.4.5", ""]], "choices": ["block", "bypass"], "type": "str"},
"ssh-policy-check": {"v_range": [["6.2.8", "6.2.12"], ["6.4.5", "7.2.1"]], "choices": ["disable", "enable"], "type": "str"},
"block": {
- "v_range": [["6.2.8", "6.2.12"], ["6.4.5", "6.4.13"]],
+ "v_range": [["6.2.8", "6.2.12"], ["6.4.5", "6.4.14"]],
"type": "list",
"choices": ["x11-filter", "ssh-shell", "exec", "port-forward"],
"elements": "str"
},
"log": {
- "v_range": [["6.2.8", "6.2.12"], ["6.4.5", "6.4.13"]],
+ "v_range": [["6.2.8", "6.2.12"], ["6.4.5", "6.4.14"]],
"type": "list",
"choices": ["x11-filter", "ssh-shell", "exec", "port-forward"],
"elements": "str"
@@ -10665,8 +10665,8 @@ SCHEMA_DATA = '''
"ssh-tun-policy-check": {"choices": ["disable", "enable"], "type": "str"},
"status": {"choices": ["disable", "deep-inspection"], "type": "str"},
"unsupported-version": {"choices": ["block", "bypass"], "type": "str"},
- "block": {"v_range": [["6.2.0", "6.4.13"]], "type": "list", "choices": ["x11-filter", "ssh-shell", "exec", "port-forward"], "elements": "str"},
- "log": {"v_range": [["6.2.0", "6.4.13"]], "type": "list", "choices": ["x11-filter", "ssh-shell", "exec", "port-forward"], "elements": "str"},
+ "block": {"v_range": [["6.2.0", "6.4.14"]], "type": "list", "choices": ["x11-filter", "ssh-shell", "exec", "port-forward"], "elements": "str"},
+ "log": {"v_range": [["6.2.0", "6.4.14"]], "type": "list", "choices": ["x11-filter", "ssh-shell", "exec", "port-forward"], "elements": "str"},
"proxy-after-tcp-handshake": {"v_range": [["6.4.0", ""]], "choices": ["disable", "enable"], "type": "str"}
}
},
@@ -10731,10 +10731,10 @@ SCHEMA_DATA = '''
"firewall_vendormac": {
"stated": false,
"options": {
- "id": {"v_range": [["7.2.4", "7.2.4"], ["7.4.1", ""]], "type": "int"},
- "mac-number": {"v_range": [["7.2.4", "7.2.4"], ["7.4.1", ""]], "type": "int"},
- "name": {"v_range": [["7.2.4", "7.2.4"], ["7.4.1", ""]], "type": "str"},
- "obsolete": {"v_range": [["7.2.4", "7.2.4"], ["7.4.1", ""]], "type": "int"}
+ "id": {"v_range": [["7.2.4", "7.2.5"], ["7.4.1", ""]], "type": "int"},
+ "mac-number": {"v_range": [["7.2.4", "7.2.5"], ["7.4.1", ""]], "type": "int"},
+ "name": {"v_range": [["7.2.4", "7.2.5"], ["7.4.1", ""]], "type": "str"},
+ "obsolete": {"v_range": [["7.2.4", "7.2.5"], ["7.4.1", ""]], "type": "int"}
}
},
"firewall_vip": {
@@ -11362,7 +11362,7 @@ SCHEMA_DATA = '''
},
"elements": "dict"
},
- "ndp-reply": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "ndp-reply": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "choices": ["disable", "enable"], "type": "str"},
"ssl-server-renegotiation": {"v_range": [["7.2.2", ""]], "choices": ["disable", "enable"], "type": "str"},
"h2-support": {"v_range": [["7.4.2", ""]], "choices": ["disable", "enable"], "type": "str"},
"h3-support": {"v_range": [["7.4.2", ""]], "choices": ["disable", "enable"], "type": "str"}
@@ -11530,7 +11530,7 @@ SCHEMA_DATA = '''
"nat64": {"v_range": [["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"nat66": {"v_range": [["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"ssl-accept-ffdhe-groups": {"v_range": [["7.0.3", ""]], "choices": ["disable", "enable"], "type": "str"},
- "ndp-reply": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "ndp-reply": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "choices": ["disable", "enable"], "type": "str"},
"ssl-server-renegotiation": {"v_range": [["7.2.2", ""]], "choices": ["disable", "enable"], "type": "str"},
"h2-support": {"v_range": [["7.4.2", ""]], "choices": ["disable", "enable"], "type": "str"},
"h3-support": {"v_range": [["7.4.2", ""]], "choices": ["disable", "enable"], "type": "str"},
@@ -11785,7 +11785,7 @@ SCHEMA_DATA = '''
},
"elements": "dict"
},
- "ndp-reply": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "ndp-reply": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "choices": ["disable", "enable"], "type": "str"},
"ssl-server-renegotiation": {"v_range": [["7.2.2", ""]], "choices": ["disable", "enable"], "type": "str"},
"h2-support": {"v_range": [["7.4.2", ""]], "choices": ["disable", "enable"], "type": "str"},
"h3-support": {"v_range": [["7.4.2", ""]], "choices": ["disable", "enable"], "type": "str"}
@@ -12376,13 +12376,13 @@ SCHEMA_DATA = '''
"prov-type": {"v_range": [["7.2.0", ""]], "choices": ["none", "templates", "template-group"], "type": "str"},
"template-group": {"v_range": [["7.2.0", ""]], "type": "str"},
"templates": {"v_range": [["7.2.0", ""]], "type": "raw"},
+ "enforce-device-config": {"v_range": [["7.2.5", "7.2.5"], ["7.4.2", ""]], "choices": ["disable", "enable"], "type": "str"},
"auth-template": {"v_range": [["7.4.1", ""]], "type": "raw"},
"ha-config": {"v_range": [["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"ha-hbdev": {"v_range": [["7.4.1", ""]], "type": "str"},
"ha-monitor": {"v_range": [["7.4.1", ""]], "type": "raw"},
"ha-password": {"v_range": [["7.4.1", ""]], "no_log": true, "type": "raw"},
- "linked-to-model": {"v_range": [["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "enforce-device-config": {"v_range": [["7.4.2", ""]], "choices": ["disable", "enable"], "type": "str"}
+ "linked-to-model": {"v_range": [["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"}
}
},
"fmg_fabric_authorization_template": {
@@ -12543,9 +12543,9 @@ SCHEMA_DATA = '''
"wanip-query-mode": {"choices": ["disable", "ipify"], "type": "str"},
"fortiguard-anycast": {"v_range": [["6.4.0", ""]], "choices": ["disable", "enable"], "type": "str"},
"fortiguard-anycast-source": {"v_range": [["6.4.0", ""]], "choices": ["fortinet", "aws"], "type": "str"},
- "system-support-fdc": {"v_range": [["6.4.6", "6.4.13"], ["7.0.1", ""]], "type": "list", "choices": ["3.x", "4.x"], "elements": "str"},
- "system-support-fts": {"v_range": [["6.4.6", "6.4.13"], ["7.0.1", ""]], "type": "list", "choices": ["3.x", "4.x", "7.x"], "elements": "str"},
- "system-support-faz": {"v_range": [["7.0.7", "7.0.10"], ["7.2.2", ""]], "type": "list", "choices": ["6.x", "7.x"], "elements": "str"},
+ "system-support-fdc": {"v_range": [["6.4.6", "6.4.14"], ["7.0.1", ""]], "type": "list", "choices": ["3.x", "4.x"], "elements": "str"},
+ "system-support-fts": {"v_range": [["6.4.6", "6.4.14"], ["7.0.1", ""]], "type": "list", "choices": ["3.x", "4.x", "7.x"], "elements": "str"},
+ "system-support-faz": {"v_range": [["7.0.7", "7.0.12"], ["7.2.2", ""]], "type": "list", "choices": ["6.x", "7.x"], "elements": "str"},
"system-support-fis": {"v_range": [["7.4.0", ""]], "type": "list", "choices": ["1.x", "2.x"], "elements": "str"}
}
},
@@ -12611,28 +12611,28 @@ SCHEMA_DATA = '''
"check-fgt-disk": {"v_range": [["6.2.5", ""]], "choices": ["disable", "enable"], "type": "str"},
"fds-failover-fmg": {"v_range": [["6.2.5", ""]], "choices": ["disable", "enable"], "type": "str"},
"immx-source": {"v_range": [["6.4.2", ""]], "choices": ["fmg", "fgt", "cloud"], "type": "str"},
- "log": {"v_range": [["6.4.8", "6.4.13"], ["7.0.1", ""]], "choices": ["fwm", "fwm_dm", "fwm_dm_json"], "type": "str"},
+ "log": {"v_range": [["6.4.8", "6.4.14"], ["7.0.1", ""]], "choices": ["fwm", "fwm_dm", "fwm_dm_json"], "type": "str"},
"upgrade-timeout": {
"type": "dict",
"options": {
- "check-status-timeout": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "type": "int"},
- "ctrl-check-status-timeout": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "type": "int"},
- "ctrl-put-image-by-fds-timeout": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "type": "int"},
- "ha-sync-timeout": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "type": "int"},
- "license-check-timeout": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "type": "int"},
- "prepare-image-timeout": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "type": "int"},
- "put-image-by-fds-timeout": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "type": "int"},
- "put-image-timeout": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "type": "int"},
- "reboot-of-fsck-timeout": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "type": "int"},
- "reboot-of-upgrade-timeout": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "type": "int"},
- "retrieve-timeout": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "type": "int"},
- "rpc-timeout": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "type": "int"},
- "total-timeout": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "type": "int"},
+ "check-status-timeout": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "type": "int"},
+ "ctrl-check-status-timeout": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "type": "int"},
+ "ctrl-put-image-by-fds-timeout": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "type": "int"},
+ "ha-sync-timeout": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "type": "int"},
+ "license-check-timeout": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "type": "int"},
+ "prepare-image-timeout": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "type": "int"},
+ "put-image-by-fds-timeout": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "type": "int"},
+ "put-image-timeout": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "type": "int"},
+ "reboot-of-fsck-timeout": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "type": "int"},
+ "reboot-of-upgrade-timeout": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "type": "int"},
+ "retrieve-timeout": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "type": "int"},
+ "rpc-timeout": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "type": "int"},
+ "total-timeout": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "type": "int"},
"health-check-timeout": {"v_range": [["7.4.2", ""]], "type": "int"}
}
},
- "retry-interval": {"v_range": [["7.0.10", "7.0.10"], ["7.4.2", ""]], "type": "int"},
- "retry-max": {"v_range": [["7.0.10", "7.0.10"], ["7.4.2", ""]], "type": "int"},
+ "retry-interval": {"v_range": [["7.0.10", "7.0.12"], ["7.2.5", "7.2.5"], ["7.4.2", ""]], "type": "int"},
+ "retry-max": {"v_range": [["7.0.10", "7.0.12"], ["7.2.5", "7.2.5"], ["7.4.2", ""]], "type": "int"},
"health-check": {"v_range": [["7.4.2", ""]], "choices": ["disable", "enable"], "type": "str"},
"max-device-history": {"v_range": [["7.4.2", ""]], "type": "int"},
"max-profile-history": {"v_range": [["7.4.2", ""]], "type": "int"},
@@ -12643,19 +12643,19 @@ SCHEMA_DATA = '''
"fmupdate_fwmsetting_upgradetimeout": {
"stated": false,
"options": {
- "check-status-timeout": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "type": "int"},
- "ctrl-check-status-timeout": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "type": "int"},
- "ctrl-put-image-by-fds-timeout": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "type": "int"},
- "ha-sync-timeout": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "type": "int"},
- "license-check-timeout": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "type": "int"},
- "prepare-image-timeout": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "type": "int"},
- "put-image-by-fds-timeout": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "type": "int"},
- "put-image-timeout": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "type": "int"},
- "reboot-of-fsck-timeout": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "type": "int"},
- "reboot-of-upgrade-timeout": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "type": "int"},
- "retrieve-timeout": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "type": "int"},
- "rpc-timeout": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "type": "int"},
- "total-timeout": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "type": "int"},
+ "check-status-timeout": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "type": "int"},
+ "ctrl-check-status-timeout": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "type": "int"},
+ "ctrl-put-image-by-fds-timeout": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "type": "int"},
+ "ha-sync-timeout": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "type": "int"},
+ "license-check-timeout": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "type": "int"},
+ "prepare-image-timeout": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "type": "int"},
+ "put-image-by-fds-timeout": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "type": "int"},
+ "put-image-timeout": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "type": "int"},
+ "reboot-of-fsck-timeout": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "type": "int"},
+ "reboot-of-upgrade-timeout": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "type": "int"},
+ "retrieve-timeout": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "type": "int"},
+ "rpc-timeout": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "type": "int"},
+ "total-timeout": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "type": "int"},
"health-check-timeout": {"v_range": [["7.4.2", ""]], "type": "int"}
}
},
@@ -12690,7 +12690,7 @@ SCHEMA_DATA = '''
"query-outbreak-prevention": {"choices": ["disable", "enable"], "type": "str"},
"query-webfilter": {"choices": ["disable", "enable"], "type": "str"},
"webfilter-https-traversal": {"choices": ["disable", "enable"], "type": "str"},
- "query-iot": {"v_range": [["6.4.6", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "query-iot": {"v_range": [["6.4.6", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"query-iot-collection": {"v_range": [["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"query-iot-vulnerability": {"v_range": [["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"}
}
@@ -12749,12 +12749,12 @@ SCHEMA_DATA = '''
"wf-dn-cache-max-number": {"type": "int"},
"wf-log": {"choices": ["disable", "nourl", "all"], "type": "str"},
"wf-preload": {"choices": ["disable", "enable"], "type": "str"},
- "iot-cache": {"v_range": [["6.4.6", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "iot-log": {"v_range": [["6.4.6", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "nofilequery", "all"], "type": "str"},
- "iot-preload": {"v_range": [["6.4.6", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "restrict-iots-dbver": {"v_range": [["6.4.6", "6.4.13"], ["7.0.1", ""]], "type": "str"},
+ "iot-cache": {"v_range": [["6.4.6", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "iot-log": {"v_range": [["6.4.6", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "nofilequery", "all"], "type": "str"},
+ "iot-preload": {"v_range": [["6.4.6", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "restrict-iots-dbver": {"v_range": [["6.4.6", "6.4.14"], ["7.0.1", ""]], "type": "str"},
"stat-log": {
- "v_range": [["7.0.10", "7.0.10"], ["7.4.2", ""]],
+ "v_range": [["7.0.10", "7.0.12"], ["7.2.5", "7.2.5"], ["7.4.2", ""]],
"choices": ["emergency", "alert", "critical", "error", "warn", "notice", "info", "debug", "disable"],
"type": "str"
},
@@ -13154,7 +13154,7 @@ SCHEMA_DATA = '''
},
"vlanid": {"v_range": [["6.2.8", "6.2.12"], ["6.4.5", ""]], "type": "int"},
"dhcp-relay-interface-select-method": {
- "v_range": [["6.4.8", "6.4.13"], ["7.0.4", ""]],
+ "v_range": [["6.4.8", "6.4.14"], ["7.0.4", ""]],
"choices": ["auto", "sdwan", "specify"],
"type": "str"
},
@@ -13940,43 +13940,47 @@ SCHEMA_DATA = '''
"eap-user-cert": {"v_range": [["7.2.0", ""]], "type": "str"},
"ike-saml-server": {"v_range": [["7.2.0", ""]], "type": "str"},
"lacp-ha-secondary": {"v_range": [["7.0.3", ""]], "choices": ["disable", "enable"], "type": "str"},
- "pvc-atm-qos": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "choices": ["cbr", "rt-vbr", "nrt-vbr"], "type": "str"},
- "pvc-chan": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "type": "int"},
- "pvc-crc": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "type": "int"},
- "pvc-pcr": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "type": "int"},
- "pvc-scr": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "type": "int"},
- "pvc-vlan-id": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "type": "int"},
- "pvc-vlan-rx-id": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "type": "int"},
- "pvc-vlan-rx-op": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "choices": ["pass-through", "replace", "remove"], "type": "str"},
- "pvc-vlan-tx-id": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "type": "int"},
- "pvc-vlan-tx-op": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "choices": ["pass-through", "replace", "remove"], "type": "str"},
+ "pvc-atm-qos": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "choices": ["cbr", "rt-vbr", "nrt-vbr", "ubr"], "type": "str"},
+ "pvc-chan": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "type": "int"},
+ "pvc-crc": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "type": "int"},
+ "pvc-pcr": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "type": "int"},
+ "pvc-scr": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "type": "int"},
+ "pvc-vlan-id": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "type": "int"},
+ "pvc-vlan-rx-id": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "type": "int"},
+ "pvc-vlan-rx-op": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "choices": ["pass-through", "replace", "remove"], "type": "str"},
+ "pvc-vlan-tx-id": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "type": "int"},
+ "pvc-vlan-tx-op": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "choices": ["pass-through", "replace", "remove"], "type": "str"},
"reachable-time": {"v_range": [["7.0.3", ""]], "type": "int"},
"select-profile-30a-35b": {
- "v_range": [["6.2.9", "6.2.12"], ["6.4.8", "6.4.13"], ["7.0.3", ""]],
+ "v_range": [["6.2.9", "6.2.12"], ["6.4.8", "6.4.14"], ["7.0.3", ""]],
"choices": ["30A", "35B"],
"type": "str"
},
- "sfp-dsl": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "choices": ["disable", "enable"], "type": "str"},
- "sfp-dsl-adsl-fallback": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "choices": ["disable", "enable"], "type": "str"},
- "sfp-dsl-autodetect": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "choices": ["disable", "enable"], "type": "str"},
- "sfp-dsl-mac": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "type": "str"},
+ "sfp-dsl": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "sfp-dsl-adsl-fallback": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "sfp-dsl-autodetect": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "sfp-dsl-mac": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "type": "str"},
"sw-algorithm": {"v_range": [["7.0.1", ""]], "choices": ["l2", "l3", "eh"], "type": "str"},
- "system-id": {"v_range": [["6.4.7", "6.4.13"], ["7.0.2", ""]], "type": "str"},
- "system-id-type": {"v_range": [["6.4.7", "6.4.13"], ["7.0.2", ""]], "choices": ["auto", "user"], "type": "str"},
- "vlan-id": {"v_range": [["6.2.9", "6.2.12"], ["6.4.8", "6.4.13"], ["7.0.3", ""]], "type": "int"},
+ "system-id": {"v_range": [["6.4.7", "6.4.14"], ["7.0.2", ""]], "type": "str"},
+ "system-id-type": {"v_range": [["6.4.7", "6.4.14"], ["7.0.2", ""]], "choices": ["auto", "user"], "type": "str"},
+ "vlan-id": {"v_range": [["6.2.9", "6.2.12"], ["6.4.8", "6.4.14"], ["7.0.3", ""]], "type": "int"},
"vlan-op-mode": {
- "v_range": [["6.2.9", "6.2.12"], ["6.4.8", "6.4.13"], ["7.0.3", ""]],
+ "v_range": [["6.2.9", "6.2.12"], ["6.4.8", "6.4.14"], ["7.0.3", ""]],
"choices": ["tag", "untag", "passthrough"],
"type": "str"
},
- "generic-receive-offload": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "generic-receive-offload": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"interconnect-profile": {
- "v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]],
+ "v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]],
"choices": ["default", "profile1", "profile2"],
"type": "str"
},
- "large-receive-offload": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "annex": {"v_range": [["7.0.10", "7.0.10"], ["7.4.2", ""]], "choices": ["a", "b", "j", "bjm", "i", "al", "m", "aijlm"], "type": "str"},
+ "large-receive-offload": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "annex": {
+ "v_range": [["7.0.10", "7.0.12"], ["7.2.5", "7.2.5"], ["7.4.2", ""]],
+ "choices": ["a", "b", "j", "bjm", "i", "al", "m", "aijlm", "bj"],
+ "type": "str"
+ },
"aggregate-type": {"v_range": [["7.2.1", ""]], "choices": ["physical", "vxlan"], "type": "str"},
"switch-controller-netflow-collect": {"v_range": [["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"wifi-dns-server1": {"v_range": [["7.2.2", ""]], "type": "str"},
@@ -14486,7 +14490,7 @@ SCHEMA_DATA = '''
},
"vlanid": {"v_range": [["6.2.8", "6.2.12"], ["6.4.5", ""]], "type": "int"},
"dhcp-relay-interface-select-method": {
- "v_range": [["6.4.8", "6.4.13"], ["7.0.4", ""]],
+ "v_range": [["6.4.8", "6.4.14"], ["7.0.4", ""]],
"choices": ["auto", "sdwan", "specify"],
"type": "str"
},
@@ -14852,7 +14856,7 @@ SCHEMA_DATA = '''
"elements": "dict"
},
"dhcp-relay-interface-select-method": {
- "v_range": [["6.4.8", "6.4.13"], ["7.0.4", "7.4.0"]],
+ "v_range": [["6.4.8", "6.4.14"], ["7.0.4", "7.4.0"]],
"choices": ["auto", "sdwan", "specify"],
"type": "str"
},
@@ -15580,35 +15584,39 @@ SCHEMA_DATA = '''
"eap-user-cert": {"v_range": [["7.2.0", ""]], "type": "str"},
"ike-saml-server": {"v_range": [["7.2.0", ""]], "type": "str"},
"lacp-ha-secondary": {"v_range": [["7.0.3", ""]], "choices": ["disable", "enable"], "type": "str"},
- "pvc-atm-qos": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "choices": ["cbr", "rt-vbr", "nrt-vbr"], "type": "str"},
- "pvc-chan": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "type": "int"},
- "pvc-crc": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "type": "int"},
- "pvc-pcr": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "type": "int"},
- "pvc-scr": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "type": "int"},
- "pvc-vlan-id": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "type": "int"},
- "pvc-vlan-rx-id": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "type": "int"},
- "pvc-vlan-rx-op": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "choices": ["pass-through", "replace", "remove"], "type": "str"},
- "pvc-vlan-tx-id": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "type": "int"},
- "pvc-vlan-tx-op": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "choices": ["pass-through", "replace", "remove"], "type": "str"},
+ "pvc-atm-qos": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "choices": ["cbr", "rt-vbr", "nrt-vbr", "ubr"], "type": "str"},
+ "pvc-chan": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "type": "int"},
+ "pvc-crc": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "type": "int"},
+ "pvc-pcr": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "type": "int"},
+ "pvc-scr": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "type": "int"},
+ "pvc-vlan-id": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "type": "int"},
+ "pvc-vlan-rx-id": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "type": "int"},
+ "pvc-vlan-rx-op": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "choices": ["pass-through", "replace", "remove"], "type": "str"},
+ "pvc-vlan-tx-id": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "type": "int"},
+ "pvc-vlan-tx-op": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "choices": ["pass-through", "replace", "remove"], "type": "str"},
"reachable-time": {"v_range": [["7.0.3", ""]], "type": "int"},
- "select-profile-30a-35b": {"v_range": [["6.2.9", "6.2.12"], ["6.4.8", "6.4.13"], ["7.0.3", ""]], "choices": ["30A", "35B"], "type": "str"},
- "sfp-dsl": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "choices": ["disable", "enable"], "type": "str"},
- "sfp-dsl-adsl-fallback": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "choices": ["disable", "enable"], "type": "str"},
- "sfp-dsl-autodetect": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "choices": ["disable", "enable"], "type": "str"},
- "sfp-dsl-mac": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "type": "str"},
+ "select-profile-30a-35b": {"v_range": [["6.2.9", "6.2.12"], ["6.4.8", "6.4.14"], ["7.0.3", ""]], "choices": ["30A", "35B"], "type": "str"},
+ "sfp-dsl": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "sfp-dsl-adsl-fallback": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "sfp-dsl-autodetect": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "sfp-dsl-mac": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "type": "str"},
"sw-algorithm": {"v_range": [["7.0.1", ""]], "choices": ["l2", "l3", "eh"], "type": "str"},
- "system-id": {"v_range": [["6.4.7", "6.4.13"], ["7.0.2", ""]], "type": "str"},
- "system-id-type": {"v_range": [["6.4.7", "6.4.13"], ["7.0.2", ""]], "choices": ["auto", "user"], "type": "str"},
- "vlan-id": {"v_range": [["6.2.9", "6.2.12"], ["6.4.8", "6.4.13"], ["7.0.3", ""]], "type": "int"},
+ "system-id": {"v_range": [["6.4.7", "6.4.14"], ["7.0.2", ""]], "type": "str"},
+ "system-id-type": {"v_range": [["6.4.7", "6.4.14"], ["7.0.2", ""]], "choices": ["auto", "user"], "type": "str"},
+ "vlan-id": {"v_range": [["6.2.9", "6.2.12"], ["6.4.8", "6.4.14"], ["7.0.3", ""]], "type": "int"},
"vlan-op-mode": {
- "v_range": [["6.2.9", "6.2.12"], ["6.4.8", "6.4.13"], ["7.0.3", ""]],
+ "v_range": [["6.2.9", "6.2.12"], ["6.4.8", "6.4.14"], ["7.0.3", ""]],
"choices": ["tag", "untag", "passthrough"],
"type": "str"
},
- "generic-receive-offload": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "interconnect-profile": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "choices": ["default", "profile1", "profile2"], "type": "str"},
- "large-receive-offload": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "annex": {"v_range": [["7.0.10", "7.0.10"], ["7.4.2", ""]], "choices": ["a", "b", "j", "bjm", "i", "al", "m", "aijlm"], "type": "str"},
+ "generic-receive-offload": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "interconnect-profile": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "choices": ["default", "profile1", "profile2"], "type": "str"},
+ "large-receive-offload": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "annex": {
+ "v_range": [["7.0.10", "7.0.12"], ["7.2.5", "7.2.5"], ["7.4.2", ""]],
+ "choices": ["a", "b", "j", "bjm", "i", "al", "m", "aijlm", "bj"],
+ "type": "str"
+ },
"aggregate-type": {"v_range": [["7.2.1", ""]], "choices": ["physical", "vxlan"], "type": "str"},
"switch-controller-netflow-collect": {"v_range": [["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"wifi-dns-server1": {"v_range": [["7.2.2", ""]], "type": "str"},
@@ -15835,11 +15843,14 @@ SCHEMA_DATA = '''
"gtp_iewhitelist": {
"stated": true,
"options": {
- "entries": {"type": "list", "options": {"id": {"type": "int"}, "ie": {"type": "int"}, "message": {"type": "int"}}, "elements": "dict"},
+ "entries": {"type": "list", "options": {"id": {"type": "int"}, "ie": {"type": "int"}, "fmgr_message": {"type": "int"}}, "elements": "dict"},
"name": {"required": true, "type": "str"}
}
},
- "gtp_iewhitelist_entries": {"stated": true, "options": {"id": {"required": true, "type": "int"}, "ie": {"type": "int"}, "message": {"type": "int"}}},
+ "gtp_iewhitelist_entries": {
+ "stated": true,
+ "options": {"id": {"required": true, "type": "int"}, "ie": {"type": "int"}, "fmgr_message": {"type": "int"}}
+ },
"gtp_messagefilterv0v1": {
"stated": true,
"options": {
@@ -15880,7 +15891,7 @@ SCHEMA_DATA = '''
"update-pdp": {"choices": ["allow", "deny"], "type": "str"},
"v0-create-aa-pdp--v1-init-pdp-ctx": {"choices": ["deny", "allow"], "type": "str"},
"version-not-support": {"choices": ["allow", "deny"], "type": "str"},
- "create-aa-pdp|init-pdp-ctx": {"v_range": [["6.2.0", "6.4.13"]], "choices": ["allow", "deny"], "type": "str"},
+ "create-aa-pdp|init-pdp-ctx": {"v_range": [["6.2.0", "6.4.14"]], "choices": ["allow", "deny"], "type": "str"},
"ue-registration-query": {"v_range": [["7.2.1", ""]], "choices": ["allow", "deny"], "type": "str"}
}
},
@@ -16910,79 +16921,79 @@ SCHEMA_DATA = '''
"log_npuserver": {
"stated": false,
"options": {
- "log-processing": {"v_range": [["6.4.8", "6.4.13"], ["7.0.3", ""]], "choices": ["may-drop", "no-drop"], "type": "str"},
- "log-processor": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["hardware", "host"], "type": "str"},
- "netflow-ver": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["v9", "v10"], "type": "str"},
+ "log-processing": {"v_range": [["6.4.8", "6.4.14"], ["7.0.3", ""]], "choices": ["may-drop", "no-drop"], "type": "str"},
+ "log-processor": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["hardware", "host"], "type": "str"},
+ "netflow-ver": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["v9", "v10"], "type": "str"},
"server-group": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"type": "list",
"options": {
- "group-name": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "log-format": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["syslog", "netflow"], "type": "str"},
+ "group-name": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "log-format": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["syslog", "netflow"], "type": "str"},
"log-mode": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["per-session", "per-nat-mapping", "per-session-ending"],
"type": "str"
},
- "log-tx-mode": {"v_range": [["6.4.7", "6.4.13"], ["7.0.2", ""]], "choices": ["multicast", "roundrobin"], "type": "str"},
- "server-number": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "server-start-id": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "sw-log-flags": {"v_range": [["6.4.8", "6.4.13"], ["7.0.3", ""]], "type": "raw"},
- "log-gen-event": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "log-user-info": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"}
+ "log-tx-mode": {"v_range": [["6.4.7", "6.4.14"], ["7.0.2", ""]], "choices": ["multicast", "roundrobin"], "type": "str"},
+ "server-number": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "server-start-id": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "sw-log-flags": {"v_range": [["6.4.8", "6.4.14"], ["7.0.3", ""]], "type": "raw"},
+ "log-gen-event": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "log-user-info": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"}
},
"elements": "dict"
},
"server-info": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"type": "list",
"options": {
- "dest-port": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "id": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "ip-family": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["v4", "v6"], "type": "str"},
- "ipv4-server": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "ipv6-server": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "source-port": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "template-tx-timeout": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "vdom": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
+ "dest-port": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "id": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "ip-family": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["v4", "v6"], "type": "str"},
+ "ipv4-server": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "ipv6-server": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "source-port": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "template-tx-timeout": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "vdom": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
"log-transport": {"v_range": [["7.4.2", ""]], "choices": ["udp", "tcp"], "type": "str"}
},
"elements": "dict"
},
- "syslog-facility": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "syslog-severity": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
+ "syslog-facility": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "syslog-severity": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
"enforce-seq-order": {"v_range": [["7.4.2", ""]], "choices": ["disable", "enable"], "type": "str"}
}
},
"log_npuserver_servergroup": {
"stated": true,
"options": {
- "group-name": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "log-format": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["syslog", "netflow"], "type": "str"},
+ "group-name": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "log-format": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["syslog", "netflow"], "type": "str"},
"log-mode": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["per-session", "per-nat-mapping", "per-session-ending"],
"type": "str"
},
- "log-tx-mode": {"v_range": [["6.4.7", "6.4.13"], ["7.0.2", ""]], "choices": ["multicast", "roundrobin"], "type": "str"},
- "server-number": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "server-start-id": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "sw-log-flags": {"v_range": [["6.4.8", "6.4.13"], ["7.0.3", ""]], "type": "raw"},
- "log-gen-event": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "log-user-info": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"}
+ "log-tx-mode": {"v_range": [["6.4.7", "6.4.14"], ["7.0.2", ""]], "choices": ["multicast", "roundrobin"], "type": "str"},
+ "server-number": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "server-start-id": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "sw-log-flags": {"v_range": [["6.4.8", "6.4.14"], ["7.0.3", ""]], "type": "raw"},
+ "log-gen-event": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "log-user-info": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"}
}
},
"log_npuserver_serverinfo": {
"stated": true,
"options": {
- "dest-port": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "id": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "required": true, "type": "int"},
- "ip-family": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["v4", "v6"], "type": "str"},
- "ipv4-server": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "ipv6-server": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "source-port": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "template-tx-timeout": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "vdom": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
+ "dest-port": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "id": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "required": true, "type": "int"},
+ "ip-family": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["v4", "v6"], "type": "str"},
+ "ipv4-server": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "ipv6-server": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "source-port": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "template-tx-timeout": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "vdom": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
"log-transport": {"v_range": [["7.4.2", ""]], "choices": ["udp", "tcp"], "type": "str"}
}
},
@@ -17644,118 +17655,118 @@ SCHEMA_DATA = '''
"pkg_firewall_hyperscalepolicy": {
"stated": true,
"options": {
- "action": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "choices": ["deny", "accept"], "type": "str"},
- "auto-asic-offload": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
- "cgn-eif": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
- "cgn-eim": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
- "cgn-log-server-grp": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"},
- "cgn-resource-quota": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "int"},
- "cgn-session-quota": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "int"},
- "comments": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"},
- "delay-tcp-npu-session": {"v_range": [["6.4.7", "6.4.13"], ["7.0.2", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
- "dstaddr": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "raw"},
- "dstaddr-negate": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
- "dstaddr6": {"v_range": [["6.4.7", "6.4.13"], ["7.0.2", "7.2.0"]], "type": "raw"},
- "dstintf": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "raw"},
- "firewall-session-dirty": {"v_range": [["6.4.7", "6.4.13"], ["7.0.2", "7.2.0"]], "choices": ["check-all", "check-new"], "type": "str"},
- "global-label": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"},
- "ippool": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
- "label": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"},
- "name": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"},
- "nat": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
- "policy-offload": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
- "policyid": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "required": true, "type": "int"},
- "poolname": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "raw"},
- "poolname6": {"v_range": [["6.4.7", "6.4.13"], ["7.0.2", "7.2.0"]], "type": "raw"},
- "send-deny-packet": {"v_range": [["6.4.7", "6.4.13"], ["7.0.2", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
- "service": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "raw"},
- "service-negate": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
- "srcaddr": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "raw"},
- "srcaddr-negate": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
- "srcaddr6": {"v_range": [["6.4.7", "6.4.13"], ["7.0.2", "7.2.0"]], "type": "raw"},
- "srcintf": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "raw"},
- "status": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
- "tcp-timeout-pid": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"},
- "traffic-shaper": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"},
- "traffic-shaper-reverse": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"},
- "udp-timeout-pid": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"},
- "uuid": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"}
+ "action": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "choices": ["deny", "accept"], "type": "str"},
+ "auto-asic-offload": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
+ "cgn-eif": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
+ "cgn-eim": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
+ "cgn-log-server-grp": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"},
+ "cgn-resource-quota": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "int"},
+ "cgn-session-quota": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "int"},
+ "comments": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"},
+ "delay-tcp-npu-session": {"v_range": [["6.4.7", "6.4.14"], ["7.0.2", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
+ "dstaddr": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "raw"},
+ "dstaddr-negate": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
+ "dstaddr6": {"v_range": [["6.4.7", "6.4.14"], ["7.0.2", "7.2.0"]], "type": "raw"},
+ "dstintf": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "raw"},
+ "firewall-session-dirty": {"v_range": [["6.4.7", "6.4.14"], ["7.0.2", "7.2.0"]], "choices": ["check-all", "check-new"], "type": "str"},
+ "global-label": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"},
+ "ippool": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
+ "label": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"},
+ "name": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"},
+ "nat": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
+ "policy-offload": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
+ "policyid": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "required": true, "type": "int"},
+ "poolname": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "raw"},
+ "poolname6": {"v_range": [["6.4.7", "6.4.14"], ["7.0.2", "7.2.0"]], "type": "raw"},
+ "send-deny-packet": {"v_range": [["6.4.7", "6.4.14"], ["7.0.2", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
+ "service": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "raw"},
+ "service-negate": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
+ "srcaddr": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "raw"},
+ "srcaddr-negate": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
+ "srcaddr6": {"v_range": [["6.4.7", "6.4.14"], ["7.0.2", "7.2.0"]], "type": "raw"},
+ "srcintf": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "raw"},
+ "status": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
+ "tcp-timeout-pid": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"},
+ "traffic-shaper": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"},
+ "traffic-shaper-reverse": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"},
+ "udp-timeout-pid": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"},
+ "uuid": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"}
}
},
"pkg_firewall_hyperscalepolicy46": {
"stated": true,
"options": {
- "action": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "choices": ["deny", "accept"], "type": "str"},
- "cgn-log-server-grp": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"},
- "comments": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"},
- "dstaddr": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "raw"},
- "dstintf": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"},
- "name": {"v_range": [["6.4.8", "6.4.13"], ["7.0.3", "7.2.0"]], "type": "str"},
- "policy-offload": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
- "policyid": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "required": true, "type": "int"},
- "service": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "raw"},
- "srcaddr": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "raw"},
- "srcintf": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"},
- "status": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
- "tcp-timeout-pid": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"},
- "traffic-shaper": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"},
- "traffic-shaper-reverse": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"},
- "udp-timeout-pid": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"},
- "uuid": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"}
+ "action": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "choices": ["deny", "accept"], "type": "str"},
+ "cgn-log-server-grp": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"},
+ "comments": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"},
+ "dstaddr": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "raw"},
+ "dstintf": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"},
+ "name": {"v_range": [["6.4.8", "6.4.14"], ["7.0.3", "7.2.0"]], "type": "str"},
+ "policy-offload": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
+ "policyid": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "required": true, "type": "int"},
+ "service": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "raw"},
+ "srcaddr": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "raw"},
+ "srcintf": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"},
+ "status": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
+ "tcp-timeout-pid": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"},
+ "traffic-shaper": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"},
+ "traffic-shaper-reverse": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"},
+ "udp-timeout-pid": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"},
+ "uuid": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"}
}
},
"pkg_firewall_hyperscalepolicy6": {
"stated": true,
"options": {
- "action": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "choices": ["deny", "accept", "ipsec"], "type": "str"},
- "auto-asic-offload": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
- "cgn-log-server-grp": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"},
- "comments": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"},
- "dstaddr": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "raw"},
- "dstaddr-negate": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
- "dstintf": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "raw"},
- "name": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"},
- "policy-offload": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
- "policyid": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "required": true, "type": "int"},
- "service": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "raw"},
- "service-negate": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
- "srcaddr": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "raw"},
- "srcaddr-negate": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
- "srcintf": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "raw"},
- "status": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
- "tcp-timeout-pid": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"},
- "traffic-shaper": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"},
- "traffic-shaper-reverse": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"},
- "udp-timeout-pid": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"},
- "uuid": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"}
+ "action": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "choices": ["deny", "accept", "ipsec"], "type": "str"},
+ "auto-asic-offload": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
+ "cgn-log-server-grp": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"},
+ "comments": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"},
+ "dstaddr": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "raw"},
+ "dstaddr-negate": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
+ "dstintf": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "raw"},
+ "name": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"},
+ "policy-offload": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
+ "policyid": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "required": true, "type": "int"},
+ "service": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "raw"},
+ "service-negate": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
+ "srcaddr": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "raw"},
+ "srcaddr-negate": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
+ "srcintf": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "raw"},
+ "status": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
+ "tcp-timeout-pid": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"},
+ "traffic-shaper": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"},
+ "traffic-shaper-reverse": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"},
+ "udp-timeout-pid": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"},
+ "uuid": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"}
}
},
"pkg_firewall_hyperscalepolicy64": {
"stated": true,
"options": {
- "action": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "choices": ["deny", "accept"], "type": "str"},
- "cgn-eif": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
- "cgn-eim": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
- "cgn-log-server-grp": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"},
- "cgn-resource-quota": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "int"},
- "cgn-session-quota": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "int"},
- "comments": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"},
- "dstaddr": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "raw"},
- "dstintf": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"},
- "ippool": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
- "name": {"v_range": [["6.4.8", "6.4.13"], ["7.0.3", "7.2.0"]], "type": "str"},
- "policy-offload": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
- "policyid": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "required": true, "type": "int"},
- "poolname": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "raw"},
- "service": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "raw"},
- "srcaddr": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "raw"},
- "srcintf": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"},
- "status": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
- "tcp-timeout-pid": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"},
- "traffic-shaper": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"},
- "traffic-shaper-reverse": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"},
- "udp-timeout-pid": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"},
- "uuid": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.0"]], "type": "str"}
+ "action": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "choices": ["deny", "accept"], "type": "str"},
+ "cgn-eif": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
+ "cgn-eim": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
+ "cgn-log-server-grp": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"},
+ "cgn-resource-quota": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "int"},
+ "cgn-session-quota": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "int"},
+ "comments": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"},
+ "dstaddr": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "raw"},
+ "dstintf": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"},
+ "ippool": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
+ "name": {"v_range": [["6.4.8", "6.4.14"], ["7.0.3", "7.2.0"]], "type": "str"},
+ "policy-offload": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
+ "policyid": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "required": true, "type": "int"},
+ "poolname": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "raw"},
+ "service": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "raw"},
+ "srcaddr": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "raw"},
+ "srcintf": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"},
+ "status": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
+ "tcp-timeout-pid": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"},
+ "traffic-shaper": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"},
+ "traffic-shaper-reverse": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"},
+ "udp-timeout-pid": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"},
+ "uuid": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.0"]], "type": "str"}
}
},
"pkg_firewall_interfacepolicy": {
@@ -18024,7 +18035,7 @@ SCHEMA_DATA = '''
"ssl-mirror-intf": {"type": "raw"},
"ssl-ssh-profile": {"type": "str"},
"status": {"choices": ["disable", "enable"], "type": "str"},
- "tags": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
+ "tags": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
"tcp-mss-receiver": {"type": "int"},
"tcp-mss-sender": {"type": "int"},
"tcp-session-without-syn": {"choices": ["all", "data-only", "disable"], "type": "str"},
@@ -18091,7 +18102,7 @@ SCHEMA_DATA = '''
"np-acceleration": {"v_range": [["6.2.0", "7.2.0"]], "choices": ["disable", "enable"], "type": "str"},
"reputation-direction": {"v_range": [["6.2.0", ""]], "choices": ["source", "destination"], "type": "str"},
"reputation-minimum": {"v_range": [["6.2.0", ""]], "type": "int"},
- "ssh-filter-profile": {"v_range": [["6.2.0", ""]], "type": "str"},
+ "ssh-filter-profile": {"v_range": [["6.2.0", "7.2.4"], ["7.4.0", ""]], "type": "str"},
"ssh-policy-redirect": {"v_range": [["6.2.0", ""]], "choices": ["disable", "enable"], "type": "str"},
"tos": {"v_range": [["6.2.0", ""]], "type": "str"},
"tos-mask": {"v_range": [["6.2.0", ""]], "type": "str"},
@@ -18099,7 +18110,7 @@ SCHEMA_DATA = '''
"vlan-filter": {"v_range": [["6.2.0", ""]], "type": "str"},
"webproxy-forward-server": {"v_range": [["6.2.0", ""]], "type": "str"},
"webproxy-profile": {"v_range": [["6.2.0", ""]], "type": "str"},
- "np-accelation": {"v_range": [["6.2.1", "6.4.13"]], "choices": ["disable", "enable"], "type": "str"},
+ "np-accelation": {"v_range": [["6.2.1", "6.4.14"]], "choices": ["disable", "enable"], "type": "str"},
"delay-tcp-npu-sessoin": {"v_range": [["6.2.0", "6.2.12"]], "choices": ["disable", "enable"], "type": "str"},
"casi-profile": {"v_range": [["6.2.0", "6.2.12"]], "type": "str"},
"best-route": {"v_range": [["6.2.3", ""]], "choices": ["disable", "enable"], "type": "str"},
@@ -18111,7 +18122,7 @@ SCHEMA_DATA = '''
"poolname6": {"v_range": [["6.4.0", ""]], "type": "raw"},
"src-vendor-mac": {"v_range": [["6.4.0", ""]], "type": "raw"},
"srcaddr6": {"v_range": [["6.4.0", ""]], "type": "raw"},
- "file-filter-profile": {"v_range": [["6.4.1", ""]], "type": "str"},
+ "file-filter-profile": {"v_range": [["6.4.1", "7.2.4"], ["7.4.0", ""]], "type": "str"},
"policy-offload": {"v_range": [["6.2.7", "6.2.12"], ["6.4.3", ""]], "choices": ["disable", "enable"], "type": "str"},
"cgn-session-quota": {"v_range": [["6.2.7", "6.2.12"], ["6.4.3", ""]], "type": "int"},
"cgn-eif": {"v_range": [["6.2.7", "6.2.12"], ["6.4.3", ""]], "choices": ["disable", "enable"], "type": "str"},
@@ -18120,7 +18131,7 @@ SCHEMA_DATA = '''
"cgn-resource-quota": {"v_range": [["6.2.7", "6.2.12"], ["6.4.3", ""]], "type": "int"},
"dynamic-shaping": {"v_range": [["6.4.6", ""]], "choices": ["disable", "enable"], "type": "str"},
"passive-wan-health-measurement": {"v_range": [["7.0.0", ""]], "choices": ["disable", "enable"], "type": "str"},
- "videofilter-profile": {"v_range": [["7.0.0", ""]], "type": "str"},
+ "videofilter-profile": {"v_range": [["7.0.0", "7.2.4"], ["7.4.0", ""]], "type": "str"},
"ztna-ems-tag": {"v_range": [["7.0.0", ""]], "type": "raw"},
"ztna-geo-tag": {"v_range": [["7.0.0", ""]], "type": "raw"},
"ztna-status": {"v_range": [["7.0.0", ""]], "choices": ["disable", "enable"], "type": "str"},
@@ -18132,7 +18143,7 @@ SCHEMA_DATA = '''
"pfcp-profile": {"v_range": [["7.0.1", "7.2.0"]], "type": "str"},
"policy-expiry": {"v_range": [["7.2.0", ""]], "choices": ["disable", "enable"], "type": "str"},
"policy-expiry-date": {"v_range": [["7.2.0", ""]], "type": "str"},
- "sctp-filter-profile": {"v_range": [["7.0.1", ""]], "type": "str"},
+ "sctp-filter-profile": {"v_range": [["7.0.1", "7.2.4"], ["7.4.0", ""]], "type": "str"},
"sgt": {"v_range": [["7.0.1", ""]], "type": "raw"},
"sgt-check": {"v_range": [["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"tcp-timeout-pid": {"v_range": [["7.0.3", "7.2.0"]], "type": "str"},
@@ -18190,7 +18201,7 @@ SCHEMA_DATA = '''
"srcaddr": {"type": "raw"},
"srcintf": {"type": "str"},
"status": {"choices": ["disable", "enable"], "type": "str"},
- "tags": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
+ "tags": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
"tcp-mss-receiver": {"type": "int"},
"tcp-mss-sender": {"type": "int"},
"traffic-shaper": {"type": "str"},
@@ -18244,7 +18255,7 @@ SCHEMA_DATA = '''
"nat": {"choices": ["disable", "enable"], "type": "str"},
"natinbound": {"choices": ["disable", "enable"], "type": "str"},
"natoutbound": {"choices": ["disable", "enable"], "type": "str"},
- "np-accelation": {"v_range": [["6.0.0", "6.4.13"]], "choices": ["disable", "enable"], "type": "str"},
+ "np-accelation": {"v_range": [["6.0.0", "6.4.14"]], "choices": ["disable", "enable"], "type": "str"},
"outbound": {"choices": ["disable", "enable"], "type": "str"},
"per-ip-shaper": {"type": "str"},
"policyid": {"required": true, "type": "int"},
@@ -18267,7 +18278,7 @@ SCHEMA_DATA = '''
"ssl-mirror-intf": {"type": "raw"},
"ssl-ssh-profile": {"v_range": [["6.0.0", "7.2.1"]], "type": "str"},
"status": {"choices": ["disable", "enable"], "type": "str"},
- "tags": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
+ "tags": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
"tcp-mss-receiver": {"type": "int"},
"tcp-mss-sender": {"type": "int"},
"tcp-session-without-syn": {"choices": ["all", "data-only", "disable"], "type": "str"},
@@ -18329,7 +18340,7 @@ SCHEMA_DATA = '''
"srcaddr": {"type": "raw"},
"srcintf": {"type": "str"},
"status": {"choices": ["disable", "enable"], "type": "str"},
- "tags": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
+ "tags": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
"tcp-mss-receiver": {"type": "int"},
"tcp-mss-sender": {"type": "int"},
"traffic-shaper": {"type": "str"},
@@ -18414,7 +18425,7 @@ SCHEMA_DATA = '''
"srcintf": {"type": "raw"},
"ssl-ssh-profile": {"v_range": [["6.0.0", "7.2.2"], ["7.2.4", "7.2.4"], ["7.4.2", ""]], "type": "str"},
"status": {"choices": ["disable", "enable"], "type": "str"},
- "tags": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
+ "tags": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
"transparent": {"choices": ["disable", "enable"], "type": "str"},
"users": {"type": "raw"},
"utm-status": {"choices": ["disable", "enable"], "type": "str"},
@@ -18870,7 +18881,7 @@ SCHEMA_DATA = '''
"wsso": {"choices": ["disable", "enable"], "type": "str"},
"fsso-groups": {"v_range": [["6.2.1", ""]], "type": "raw"},
"match-vip-only": {"v_range": [["6.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "np-accelation": {"v_range": [["6.2.1", "6.4.13"]], "choices": ["disable", "enable"], "type": "str"},
+ "np-accelation": {"v_range": [["6.2.1", "6.4.14"]], "choices": ["disable", "enable"], "type": "str"},
"best-route": {"v_range": [["6.2.2", ""]], "choices": ["disable", "enable"], "type": "str"},
"decrypted-traffic-mirror": {"v_range": [["6.4.0", ""]], "type": "str"},
"geoip-match": {"v_range": [["6.4.0", ""]], "choices": ["physical-location", "registered-location"], "type": "str"},
@@ -18922,8 +18933,9 @@ SCHEMA_DATA = '''
"udp-timeout-pid": {"v_range": [["7.0.3", ""]], "type": "raw"},
"ztna-tags-match-logic": {"v_range": [["7.0.3", ""]], "choices": ["or", "and"], "type": "str"},
"uuid-idx": {"v_range": [["7.0.1", ""]], "type": "int"},
- "device-ownership": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "ssh-policy-check": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "device-ownership": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "ssh-policy-check": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "extended-log": {"v_range": [["7.0.11", "7.0.12"], ["7.2.5", "7.2.5"], ["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"diffserv-copy": {"v_range": [["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"dstaddr6-negate": {"v_range": [["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"internet-service6": {"v_range": [["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
@@ -18956,7 +18968,6 @@ SCHEMA_DATA = '''
"pcp-poolname": {"v_range": [["7.4.0", ""]], "type": "raw"},
"ztna-ems-tag-secondary": {"v_range": [["7.4.0", ""]], "type": "raw"},
"casb-profile": {"v_range": [["7.4.1", ""]], "type": "str"},
- "extended-log": {"v_range": [["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"implicit-proxy-detection": {"v_range": [["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"virtual-patch-profile": {"v_range": [["7.4.1", ""]], "type": "str"},
"detect-https-in-http-request": {"v_range": [["7.4.2", ""]], "choices": ["disable", "enable"], "type": "str"},
@@ -19428,7 +19439,7 @@ SCHEMA_DATA = '''
"wsso": {"choices": ["disable", "enable"], "type": "str"},
"fsso-groups": {"v_range": [["6.2.1", ""]], "type": "raw"},
"match-vip-only": {"v_range": [["6.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "np-accelation": {"v_range": [["6.2.1", "6.4.13"]], "choices": ["disable", "enable"], "type": "str"},
+ "np-accelation": {"v_range": [["6.2.1", "6.4.14"]], "choices": ["disable", "enable"], "type": "str"},
"best-route": {"v_range": [["6.2.2", ""]], "choices": ["disable", "enable"], "type": "str"},
"decrypted-traffic-mirror": {"v_range": [["6.4.0", ""]], "type": "str"},
"geoip-match": {"v_range": [["6.4.0", ""]], "choices": ["physical-location", "registered-location"], "type": "str"},
@@ -19480,8 +19491,9 @@ SCHEMA_DATA = '''
"udp-timeout-pid": {"v_range": [["7.0.3", ""]], "type": "raw"},
"ztna-tags-match-logic": {"v_range": [["7.0.3", ""]], "choices": ["or", "and"], "type": "str"},
"uuid-idx": {"v_range": [["7.0.1", ""]], "type": "int"},
- "device-ownership": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "ssh-policy-check": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "device-ownership": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "ssh-policy-check": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "extended-log": {"v_range": [["7.0.11", "7.0.12"], ["7.2.5", "7.2.5"], ["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"diffserv-copy": {"v_range": [["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"dstaddr6-negate": {"v_range": [["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"internet-service6": {"v_range": [["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
@@ -19514,7 +19526,6 @@ SCHEMA_DATA = '''
"pcp-poolname": {"v_range": [["7.4.0", ""]], "type": "raw"},
"ztna-ems-tag-secondary": {"v_range": [["7.4.0", ""]], "type": "raw"},
"casb-profile": {"v_range": [["7.4.1", ""]], "type": "str"},
- "extended-log": {"v_range": [["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"implicit-proxy-detection": {"v_range": [["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"virtual-patch-profile": {"v_range": [["7.4.1", ""]], "type": "str"},
"detect-https-in-http-request": {"v_range": [["7.4.2", ""]], "choices": ["disable", "enable"], "type": "str"},
@@ -19765,11 +19776,11 @@ SCHEMA_DATA = '''
"stated": true,
"options": {
"package list": {
- "v_range": [["7.2.4", "7.2.4"], ["7.4.1", ""]],
+ "v_range": [["7.2.4", "7.2.5"], ["7.4.1", ""]],
"type": "list",
"options": {
- "name": {"v_range": [["7.2.4", "7.2.4"], ["7.4.1", ""]], "type": "str"},
- "vdom": {"v_range": [["7.2.4", "7.2.4"], ["7.4.1", ""]], "type": "str"}
+ "name": {"v_range": [["7.2.4", "7.2.5"], ["7.4.1", ""]], "type": "str"},
+ "vdom": {"v_range": [["7.2.4", "7.2.5"], ["7.4.1", ""]], "type": "str"}
},
"elements": "dict"
}
@@ -19961,7 +19972,7 @@ SCHEMA_DATA = '''
"email-collect": {"v_range": [["7.0.3", ""]], "choices": ["disable", "enable"], "type": "str"},
"emailfilter-profile": {"v_range": [["7.0.3", ""]], "type": "str"},
"fec": {"v_range": [["7.0.3", ""]], "choices": ["disable", "enable"], "type": "str"},
- "file-filter-profile": {"v_range": [["7.0.3", ""]], "type": "str"},
+ "file-filter-profile": {"v_range": [["7.0.3", "7.2.4"], ["7.4.0", ""]], "type": "str"},
"firewall-session-dirty": {"v_range": [["7.0.3", ""]], "choices": ["check-all", "check-new"], "type": "str"},
"fixedport": {"v_range": [["7.0.3", ""]], "choices": ["disable", "enable"], "type": "str"},
"fsso-agent-for-ntlm": {"v_range": [["7.0.3", ""]], "type": "str"},
@@ -20029,7 +20040,7 @@ SCHEMA_DATA = '''
"rtp-nat": {"v_range": [["7.0.3", ""]], "choices": ["disable", "enable"], "type": "str"},
"schedule": {"v_range": [["7.0.3", ""]], "type": "str"},
"schedule-timeout": {"v_range": [["7.0.3", ""]], "choices": ["disable", "enable"], "type": "str"},
- "sctp-filter-profile": {"v_range": [["7.0.3", ""]], "type": "str"},
+ "sctp-filter-profile": {"v_range": [["7.0.3", "7.2.4"], ["7.4.0", ""]], "type": "str"},
"send-deny-packet": {"v_range": [["7.0.3", ""]], "choices": ["disable", "enable"], "type": "str"},
"service": {"v_range": [["7.0.3", ""]], "type": "raw"},
"service-negate": {"v_range": [["7.0.3", ""]], "choices": ["disable", "enable"], "type": "str"},
@@ -20041,7 +20052,7 @@ SCHEMA_DATA = '''
"srcaddr-negate": {"v_range": [["7.0.3", ""]], "choices": ["disable", "enable"], "type": "str"},
"srcaddr6": {"v_range": [["7.0.3", ""]], "type": "raw"},
"srcintf": {"v_range": [["7.0.3", ""]], "type": "raw"},
- "ssh-filter-profile": {"v_range": [["7.0.3", ""]], "type": "str"},
+ "ssh-filter-profile": {"v_range": [["7.0.3", "7.2.4"], ["7.4.0", ""]], "type": "str"},
"ssh-policy-redirect": {"v_range": [["7.0.3", ""]], "choices": ["disable", "enable"], "type": "str"},
"ssl-ssh-profile": {"v_range": [["7.0.3", ""]], "type": "str"},
"status": {"v_range": [["7.0.3", ""]], "choices": ["disable", "enable"], "type": "str"},
@@ -20057,7 +20068,7 @@ SCHEMA_DATA = '''
"users": {"v_range": [["7.0.3", ""]], "type": "raw"},
"utm-status": {"v_range": [["7.0.3", ""]], "choices": ["disable", "enable"], "type": "str"},
"uuid": {"v_range": [["7.0.3", ""]], "type": "str"},
- "videofilter-profile": {"v_range": [["7.0.3", ""]], "type": "str"},
+ "videofilter-profile": {"v_range": [["7.0.3", "7.2.4"], ["7.4.0", ""]], "type": "str"},
"vlan-cos-fwd": {"v_range": [["7.0.3", ""]], "type": "int"},
"vlan-cos-rev": {"v_range": [["7.0.3", ""]], "type": "int"},
"vlan-filter": {"v_range": [["7.0.3", ""]], "type": "str"},
@@ -20468,18 +20479,18 @@ SCHEMA_DATA = '''
"package settings": {
"type": "dict",
"options": {
- "central-nat": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "consolidated-firewall-mode": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "fwpolicy-implicit-log": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "fwpolicy6-implicit-log": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "inspection-mode": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["proxy", "flow"], "type": "str"},
- "ngfw-mode": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["profile-based", "policy-based"], "type": "str"},
+ "central-nat": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "consolidated-firewall-mode": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "fwpolicy-implicit-log": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "fwpolicy6-implicit-log": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "inspection-mode": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["proxy", "flow"], "type": "str"},
+ "ngfw-mode": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["profile-based", "policy-based"], "type": "str"},
"policy-offload-level": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["disable", "default", "dos-offload", "full-offload"],
"type": "str"
},
- "ssl-ssh-profile": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"}
+ "ssl-ssh-profile": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"}
}
}
}
@@ -20507,18 +20518,18 @@ SCHEMA_DATA = '''
"package settings": {
"type": "dict",
"options": {
- "central-nat": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "consolidated-firewall-mode": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "fwpolicy-implicit-log": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "fwpolicy6-implicit-log": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "inspection-mode": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["proxy", "flow"], "type": "str"},
- "ngfw-mode": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["profile-based", "policy-based"], "type": "str"},
+ "central-nat": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "consolidated-firewall-mode": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "fwpolicy-implicit-log": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "fwpolicy6-implicit-log": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "inspection-mode": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["proxy", "flow"], "type": "str"},
+ "ngfw-mode": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["profile-based", "policy-based"], "type": "str"},
"policy-offload-level": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["disable", "default", "dos-offload", "full-offload"],
"type": "str"
},
- "ssl-ssh-profile": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"}
+ "ssl-ssh-profile": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"}
}
}
}
@@ -20546,18 +20557,18 @@ SCHEMA_DATA = '''
"package settings": {
"type": "dict",
"options": {
- "central-nat": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "consolidated-firewall-mode": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "fwpolicy-implicit-log": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "fwpolicy6-implicit-log": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "inspection-mode": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["proxy", "flow"], "type": "str"},
- "ngfw-mode": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["profile-based", "policy-based"], "type": "str"},
+ "central-nat": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "consolidated-firewall-mode": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "fwpolicy-implicit-log": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "fwpolicy6-implicit-log": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "inspection-mode": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["proxy", "flow"], "type": "str"},
+ "ngfw-mode": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["profile-based", "policy-based"], "type": "str"},
"policy-offload-level": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["disable", "default", "dos-offload", "full-offload"],
"type": "str"
},
- "ssl-ssh-profile": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"}
+ "ssl-ssh-profile": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"}
}
}
}
@@ -20923,16 +20934,16 @@ SCHEMA_DATA = '''
"sctpfilter_profile": {
"stated": true,
"options": {
- "comment": {"v_range": [["7.4.2", ""]], "type": "str"},
- "name": {"v_range": [["7.4.2", ""]], "required": true, "type": "str"},
+ "comment": {"v_range": [["7.2.5", "7.2.5"], ["7.4.2", ""]], "type": "str"},
+ "name": {"v_range": [["7.2.5", "7.2.5"], ["7.4.2", ""]], "required": true, "type": "str"},
"ppid-filters": {
- "v_range": [["7.4.2", ""]],
+ "v_range": [["7.2.5", "7.2.5"], ["7.4.2", ""]],
"type": "list",
"options": {
- "action": {"v_range": [["7.4.2", ""]], "choices": ["pass", "reset", "replace"], "type": "str"},
- "comment": {"v_range": [["7.4.2", ""]], "type": "str"},
- "id": {"v_range": [["7.4.2", ""]], "type": "int"},
- "ppid": {"v_range": [["7.4.2", ""]], "type": "int"}
+ "action": {"v_range": [["7.2.5", "7.2.5"], ["7.4.2", ""]], "choices": ["pass", "reset", "replace"], "type": "str"},
+ "comment": {"v_range": [["7.2.5", "7.2.5"], ["7.4.2", ""]], "type": "str"},
+ "id": {"v_range": [["7.2.5", "7.2.5"], ["7.4.2", ""]], "type": "int"},
+ "ppid": {"v_range": [["7.2.5", "7.2.5"], ["7.4.2", ""]], "type": "int"}
},
"elements": "dict"
}
@@ -20941,10 +20952,10 @@ SCHEMA_DATA = '''
"sctpfilter_profile_ppidfilters": {
"stated": true,
"options": {
- "action": {"v_range": [["7.4.2", ""]], "choices": ["pass", "reset", "replace"], "type": "str"},
- "comment": {"v_range": [["7.4.2", ""]], "type": "str"},
- "id": {"v_range": [["7.4.2", ""]], "required": true, "type": "int"},
- "ppid": {"v_range": [["7.4.2", ""]], "type": "int"}
+ "action": {"v_range": [["7.2.5", "7.2.5"], ["7.4.2", ""]], "choices": ["pass", "reset", "replace"], "type": "str"},
+ "comment": {"v_range": [["7.2.5", "7.2.5"], ["7.4.2", ""]], "type": "str"},
+ "id": {"v_range": [["7.2.5", "7.2.5"], ["7.4.2", ""]], "required": true, "type": "int"},
+ "ppid": {"v_range": [["7.2.5", "7.2.5"], ["7.4.2", ""]], "type": "int"}
}
},
"securityconsole_abort": {"stated": true, "options": {"adom": {"type": "str"}}},
@@ -21743,7 +21754,7 @@ SCHEMA_DATA = '''
"options": {
"_platform": {"type": "str"},
"description": {"type": "str"},
- "name": {"required": true, "type": "str"},
+ "name": {"type": "str"},
"ports": {
"type": "list",
"options": {
@@ -21853,7 +21864,7 @@ SCHEMA_DATA = '''
},
"elements": "dict"
},
- "switch-id": {"type": "str"},
+ "switch-id": {"required": true, "type": "str"},
"override-snmp-community": {"v_range": [["6.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"override-snmp-sysinfo": {"v_range": [["6.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"override-snmp-trap-threshold": {"v_range": [["6.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
@@ -22460,10 +22471,10 @@ SCHEMA_DATA = '''
"sys_hitcount": {
"stated": true,
"options": {
- "adom": {"v_range": [["6.4.8", "6.4.13"], ["7.0.3", ""]], "type": "str"},
- "adom_oid": {"v_range": [["6.4.8", "6.4.13"], ["7.0.3", ""]], "type": "int"},
- "pkg": {"v_range": [["6.4.8", "6.4.13"], ["7.0.3", ""]], "type": "str"},
- "pkg_oid": {"v_range": [["6.4.8", "6.4.13"], ["7.0.3", ""]], "type": "int"}
+ "adom": {"v_range": [["6.4.8", "6.4.14"], ["7.0.3", ""]], "type": "str"},
+ "adom_oid": {"v_range": [["6.4.8", "6.4.14"], ["7.0.3", ""]], "type": "int"},
+ "pkg": {"v_range": [["6.4.8", "6.4.14"], ["7.0.3", ""]], "type": "str"},
+ "pkg_oid": {"v_range": [["6.4.8", "6.4.14"], ["7.0.3", ""]], "type": "int"}
}
},
"sys_login_challenge": {"stated": true, "options": {"answer": {"type": "str"}, "session": {"type": "str"}}},
@@ -22479,8 +22490,8 @@ SCHEMA_DATA = '''
"timeout": {"v_range": [["7.0.1", ""]], "type": "int"}
}
},
- "sys_reboot": {"stated": true, "options": {"message": {"v_range": [["6.2.5", ""]], "type": "str"}}},
- "sys_task_result": {"stated": true, "options": {"taskid": {"v_range": [["6.4.8", "6.4.13"], ["7.0.3", ""]], "type": "int"}}},
+ "sys_reboot": {"stated": true, "options": {"fmgr_message": {"v_range": [["6.2.5", ""]], "type": "str"}}},
+ "sys_task_result": {"stated": true, "options": {"taskid": {"v_range": [["6.4.8", "6.4.14"], ["7.0.3", ""]], "type": "int"}}},
"system_admin_group": {
"stated": true,
"options": {"member": {"type": "list", "options": {"name": {"type": "str"}}, "elements": "dict"}, "name": {"required": true, "type": "str"}}
@@ -22610,7 +22621,7 @@ SCHEMA_DATA = '''
"trusthost9": {"v_range": [["7.0.3", ""]], "type": "str"},
"ips-baseline-cfg": {"v_range": [["7.0.1", "7.0.2"]], "choices": ["none", "read", "read-write"], "type": "str"},
"ips-baseline-ovrd": {"v_range": [["7.0.1", "7.0.2"]], "choices": ["disable", "enable"], "type": "str"},
- "device-fortiextender": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "choices": ["none", "read", "read-write"], "type": "str"},
+ "device-fortiextender": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "choices": ["none", "read", "read-write"], "type": "str"},
"ips-lock": {"v_range": [["7.2.2", ""]], "choices": ["none", "read", "read-write"], "type": "str"},
"fgt-gui-proxy": {"v_range": [["7.4.2", ""]], "choices": ["disable", "enable"], "type": "str"},
"policy-ips-attrs": {"v_range": [["7.4.2", ""]], "choices": ["none", "read", "read-write"], "type": "str"},
@@ -22709,11 +22720,11 @@ SCHEMA_DATA = '''
"auth-port": {"v_range": [["7.0.0", ""]], "type": "int"},
"idle_timeout_api": {"v_range": [["6.4.6", ""]], "type": "int"},
"idle_timeout_gui": {"v_range": [["6.4.6", ""]], "type": "int"},
- "central-ftgd-local-cat-id": {"v_range": [["6.4.6", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "central-ftgd-local-cat-id": {"v_range": [["6.4.6", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"idle_timeout_sso": {"v_range": [["7.0.3", ""]], "type": "int"},
"preferred-fgfm-intf": {"v_range": [["7.0.2", ""]], "type": "str"},
"traffic-shaping-history": {"v_range": [["7.0.2", ""]], "choices": ["disable", "enable"], "type": "str"},
- "fsw-ignore-platform-check": {"v_range": [["7.0.7", "7.0.10"], ["7.2.3", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "fsw-ignore-platform-check": {"v_range": [["7.0.7", "7.0.12"], ["7.2.3", ""]], "choices": ["disable", "enable"], "type": "str"},
"rtm-max-monitor-by-days": {"v_range": [["7.2.2", ""]], "type": "int"},
"rtm-temp-file-limit": {"v_range": [["7.2.2", ""]], "type": "int"},
"firmware-upgrade-check": {"v_range": [["7.2.3", ""]], "choices": ["disable", "enable"], "type": "str"},
@@ -22862,7 +22873,7 @@ SCHEMA_DATA = '''
"type": "str"
},
"adom-access": {"v_range": [["7.0.3", ""]], "choices": ["all", "specify", "exclude", "per-adom-profile"], "type": "str"},
- "fingerprint": {"v_range": [["6.4.8", "6.4.13"], ["7.0.4", ""]], "type": "str"},
+ "fingerprint": {"v_range": [["6.4.8", "6.4.14"], ["7.0.4", ""]], "type": "str"},
"th-from-profile": {"v_range": [["7.0.3", ""]], "type": "int"},
"th6-from-profile": {"v_range": [["7.0.3", ""]], "type": "int"},
"cors-allow-origin": {"v_range": [["7.2.2", ""]], "type": "str"}
@@ -23412,11 +23423,11 @@ SCHEMA_DATA = '''
"fgfm-install-refresh-count": {"v_range": [["6.2.5", ""]], "type": "int"},
"conf-merge-after-script": {"v_range": [["6.2.7", "6.2.12"], ["6.4.3", ""]], "choices": ["disable", "enable"], "type": "str"},
"log-autoupdate": {
- "v_range": [["6.4.12", "6.4.13"], ["7.0.9", "7.0.10"], ["7.2.4", "7.2.4"], ["7.4.1", ""]],
+ "v_range": [["6.4.12", "6.4.14"], ["7.0.9", "7.0.12"], ["7.2.4", "7.2.5"], ["7.4.1", ""]],
"choices": ["disable", "enable"],
"type": "str"
},
- "fgfm-auto-retrieve-timeout": {"v_range": [["6.4.13", "6.4.13"], ["7.0.9", "7.0.10"], ["7.2.4", "7.2.4"], ["7.4.1", ""]], "type": "int"},
+ "fgfm-auto-retrieve-timeout": {"v_range": [["6.4.13", "6.4.14"], ["7.0.9", "7.0.12"], ["7.2.4", "7.2.5"], ["7.4.1", ""]], "type": "int"},
"install-fds-timeout": {"v_range": [["7.4.1", ""]], "type": "int"}
}
},
@@ -23427,9 +23438,9 @@ SCHEMA_DATA = '''
"system_docker": {
"stated": false,
"options": {
- "fortiportal": {"v_range": [["6.4.0", "7.4.0"]], "choices": ["disable", "enable"], "type": "str"},
+ "fortiportal": {"v_range": [["6.4.0", "7.2.4"], ["7.4.0", "7.4.0"]], "choices": ["disable", "enable"], "type": "str"},
"fortiwlm": {"v_range": [["6.4.0", ""]], "choices": ["disable", "enable"], "type": "str"},
- "sdwancontroller": {"v_range": [["6.4.0", "7.0.10"]], "choices": ["disable", "enable"], "type": "str"},
+ "sdwancontroller": {"v_range": [["6.4.0", "7.0.12"]], "choices": ["disable", "enable"], "type": "str"},
"status": {"v_range": [["6.4.0", ""]], "choices": ["disable", "enable", "qa", "dev"], "type": "str"},
"cpu": {"v_range": [["6.4.5", ""]], "type": "int"},
"default-address-pool_base": {"v_range": [["6.4.3", ""]], "type": "str"},
@@ -23462,7 +23473,7 @@ SCHEMA_DATA = '''
"interface-select-method": {"v_range": [["6.4.2", ""]], "choices": ["auto", "sdwan", "specify"], "type": "str"},
"user-agent": {"v_range": [["6.4.2", ""]], "type": "str"},
"uuid": {"v_range": [["7.0.0", ""]], "type": "str"},
- "server-identity-check": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "choices": ["none", "basic", "full"], "type": "str"},
+ "server-identity-check": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "choices": ["none", "basic", "full"], "type": "str"},
"update-method": {"v_range": [["7.2.1", ""]], "choices": ["feed", "push"], "type": "str"}
}
},
@@ -23514,12 +23525,12 @@ SCHEMA_DATA = '''
"proxy-server-port": {"v_range": [["6.2.1", ""]], "type": "int"},
"proxy-username": {"v_range": [["6.2.1", ""]], "type": "str"},
"sandbox-region": {"v_range": [["6.2.0", ""]], "type": "str"},
- "avquery-cache-ttl": {"v_range": [["6.2.0", "6.4.13"]], "type": "int"},
- "avquery-timeout": {"v_range": [["6.2.0", "6.4.13"]], "type": "int"},
- "avquery-cache": {"v_range": [["6.2.0", "6.4.13"]], "choices": ["disable", "enable"], "type": "str"},
- "avquery-cache-mpercent": {"v_range": [["6.2.0", "6.4.13"]], "type": "int"},
- "avquery-license": {"v_range": [["6.2.0", "6.4.13"]], "type": "int"},
- "avquery-force-off": {"v_range": [["6.2.0", "6.4.13"]], "choices": ["disable", "enable"], "type": "str"},
+ "avquery-cache-ttl": {"v_range": [["6.2.0", "6.4.14"]], "type": "int"},
+ "avquery-timeout": {"v_range": [["6.2.0", "6.4.14"]], "type": "int"},
+ "avquery-cache": {"v_range": [["6.2.0", "6.4.14"]], "choices": ["disable", "enable"], "type": "str"},
+ "avquery-cache-mpercent": {"v_range": [["6.2.0", "6.4.14"]], "type": "int"},
+ "avquery-license": {"v_range": [["6.2.0", "6.4.14"]], "type": "int"},
+ "avquery-force-off": {"v_range": [["6.2.0", "6.4.14"]], "choices": ["disable", "enable"], "type": "str"},
"fortiguard-anycast": {"v_range": [["6.2.2", ""]], "choices": ["disable", "enable"], "type": "str"},
"fortiguard-anycast-source": {"v_range": [["6.2.2", ""]], "choices": ["fortinet", "aws", "debug"], "type": "str"},
"interface": {"v_range": [["6.2.5", "6.2.12"], ["6.4.1", ""]], "type": "str"},
@@ -23547,7 +23558,7 @@ SCHEMA_DATA = '''
"auto-firmware-upgrade-start-hour": {"v_range": [["7.2.1", ""]], "type": "int"},
"sandbox-inline-scan": {"v_range": [["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"auto-firmware-upgrade-delay": {"v_range": [["7.2.4", ""]], "type": "int"},
- "gui-prompt-auto-upgrade": {"v_range": [["7.2.4", "7.2.4"], ["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "gui-prompt-auto-upgrade": {"v_range": [["7.2.4", "7.2.5"], ["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"FDS-license-expiring-days": {"v_range": [["7.4.0", ""]], "type": "int"},
"antispam-cache-mpermille": {"v_range": [["7.4.0", ""]], "type": "int"},
"outbreak-prevention-cache-mpermille": {"v_range": [["7.4.0", ""]], "type": "int"},
@@ -23559,7 +23570,8 @@ SCHEMA_DATA = '''
"options": {
"aggressive-fortiview": {"choices": ["disable", "enable"], "type": "str"},
"interval": {"type": "int"},
- "status": {"choices": ["disable", "enable"], "type": "str"}
+ "status": {"choices": ["disable", "enable"], "type": "str"},
+ "incr-fortiview": {"v_range": [["7.2.5", "7.2.5"]], "choices": ["disable", "enable"], "type": "str"}
}
},
"system_fortiview_setting": {
@@ -23567,7 +23579,7 @@ SCHEMA_DATA = '''
"options": {
"not-scanned-apps": {"choices": ["exclude", "include"], "type": "str"},
"resolve-ip": {"choices": ["disable", "enable"], "type": "str"},
- "data-source": {"v_range": [["6.4.8", "6.4.13"], ["7.0.3", ""]], "choices": ["auto", "cache-only", "log-and-cache"], "type": "str"}
+ "data-source": {"v_range": [["6.4.8", "6.4.14"], ["7.0.3", ""]], "choices": ["auto", "cache-only", "log-and-cache"], "type": "str"}
}
},
"system_geoipcountry": {"stated": true, "options": {"id": {"required": true, "type": "str"}, "name": {"type": "str"}}},
@@ -23690,35 +23702,24 @@ SCHEMA_DATA = '''
"object-revision-mandatory-note": {"v_range": [["7.0.0", ""]], "choices": ["disable", "enable"], "type": "str"},
"object-revision-object-max": {"v_range": [["7.0.0", ""]], "type": "int"},
"object-revision-status": {"v_range": [["7.0.0", ""]], "choices": ["disable", "enable"], "type": "str"},
- "normalized-intf-zone-only": {"v_range": [["6.4.7", "6.4.13"], ["7.0.3", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "normalized-intf-zone-only": {"v_range": [["6.4.7", "6.4.14"], ["7.0.3", ""]], "choices": ["disable", "enable"], "type": "str"},
"ssl-cipher-suites": {
- "v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]],
+ "v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]],
"type": "list",
"options": {
- "cipher": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "type": "str"},
- "priority": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "type": "int"},
- "version": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "choices": ["tls1.2-or-below", "tls1.3"], "type": "str"}
+ "cipher": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "type": "str"},
+ "priority": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "type": "int"},
+ "version": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "choices": ["tls1.2-or-below", "tls1.3"], "type": "str"}
},
"elements": "dict"
},
- "gui-curl-timeout": {"v_range": [["6.4.11", "6.4.13"], ["7.0.7", "7.0.10"], ["7.2.2", ""]], "type": "int"},
- "table-entry-blink": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "contentpack-fgt-install": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "choices": ["disable", "enable"], "type": "str"},
- "gui-polling-interval": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "int"},
- "no-copy-permission-check": {"v_range": [["7.0.8", "7.0.10"], ["7.2.3", ""]], "choices": ["disable", "enable"], "type": "str"},
- "admin-lockout-method": {"v_range": [["7.2.2", ""]], "choices": ["ip", "user"], "type": "str"},
- "fgfm-cert-exclusive": {"v_range": [["7.2.2", ""]], "choices": ["disable", "enable"], "type": "str"},
- "workspace-unlock-after-install": {"v_range": [["7.2.2", ""]], "choices": ["disable", "enable"], "type": "str"},
- "log-checksum-upload": {"v_range": [["7.2.3", ""]], "choices": ["disable", "enable"], "type": "str"},
- "apache-mode": {"v_range": [["7.2.4", "7.2.4"], ["7.4.1", ""]], "choices": ["event", "prefork"], "type": "str"},
- "no-vip-value-check": {"v_range": [["7.2.4", "7.2.4"], ["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "fortiservice-port": {"v_range": [["7.4.1", ""]], "type": "int"},
- "management-ip": {"v_range": [["7.4.1", ""]], "type": "str"},
- "management-port": {"v_range": [["7.4.1", ""]], "type": "int"},
- "save-last-hit-in-adomdb": {"v_range": [["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "api-ip-binding": {"v_range": [["7.4.2", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "gui-curl-timeout": {"v_range": [["6.4.11", "6.4.14"], ["7.0.7", "7.0.12"], ["7.2.2", ""]], "type": "int"},
+ "table-entry-blink": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "contentpack-fgt-install": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "gui-polling-interval": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "int"},
+ "no-copy-permission-check": {"v_range": [["7.0.8", "7.0.12"], ["7.2.3", ""]], "choices": ["disable", "enable"], "type": "str"},
"ssh-enc-algo": {
- "v_range": [["7.4.2", ""]],
+ "v_range": [["7.0.11", "7.0.12"], ["7.2.5", "7.2.5"], ["7.4.2", ""]],
"type": "list",
"choices": [
"chacha20-poly1305@openssh.com", "aes128-ctr", "aes192-ctr", "aes256-ctr", "arcfour256", "arcfour128", "aes128-cbc", "3des-cbc",
@@ -23728,13 +23729,13 @@ SCHEMA_DATA = '''
"elements": "str"
},
"ssh-hostkey-algo": {
- "v_range": [["7.4.2", ""]],
+ "v_range": [["7.0.11", "7.0.12"], ["7.2.5", "7.2.5"], ["7.4.2", ""]],
"type": "list",
"choices": ["ssh-rsa", "ecdsa-sha2-nistp521", "rsa-sha2-256", "rsa-sha2-512", "ssh-ed25519"],
"elements": "str"
},
"ssh-kex-algo": {
- "v_range": [["7.4.2", ""]],
+ "v_range": [["7.0.11", "7.0.12"], ["7.2.5", "7.2.5"], ["7.4.2", ""]],
"type": "list",
"choices": [
"diffie-hellman-group1-sha1", "diffie-hellman-group14-sha1", "diffie-hellman-group14-sha256", "diffie-hellman-group16-sha512",
@@ -23744,7 +23745,7 @@ SCHEMA_DATA = '''
"elements": "str"
},
"ssh-mac-algo": {
- "v_range": [["7.4.2", ""]],
+ "v_range": [["7.0.11", "7.0.12"], ["7.2.5", "7.2.5"], ["7.4.2", ""]],
"type": "list",
"choices": [
"hmac-md5", "hmac-md5-etm@openssh.com", "hmac-md5-96", "hmac-md5-96-etm@openssh.com", "hmac-sha1", "hmac-sha1-etm@openssh.com",
@@ -23754,21 +23755,34 @@ SCHEMA_DATA = '''
],
"elements": "str"
},
- "ssh-strong-crypto": {"v_range": [["7.4.2", ""]], "choices": ["disable", "enable"], "type": "str"}
+ "ssh-strong-crypto": {"v_range": [["7.0.11", "7.0.12"], ["7.2.5", "7.2.5"], ["7.4.2", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "fgfm-cert-exclusive": {"v_range": [["7.0.12", "7.0.12"], ["7.2.2", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "fgfm-deny-unknown": {"v_range": [["7.0.12", "7.0.12"], ["7.2.5", "7.2.5"]], "choices": ["disable", "enable"], "type": "str"},
+ "fgfm-peercert-withoutsn": {"v_range": [["7.0.12", "7.0.12"], ["7.2.5", "7.2.5"]], "choices": ["disable", "enable"], "type": "str"},
+ "admin-lockout-method": {"v_range": [["7.2.2", ""]], "choices": ["ip", "user"], "type": "str"},
+ "workspace-unlock-after-install": {"v_range": [["7.2.2", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "log-checksum-upload": {"v_range": [["7.2.3", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "apache-mode": {"v_range": [["7.2.4", "7.2.5"], ["7.4.1", ""]], "choices": ["event", "prefork"], "type": "str"},
+ "no-vip-value-check": {"v_range": [["7.2.4", "7.2.5"], ["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "fortiservice-port": {"v_range": [["7.4.1", ""]], "type": "int"},
+ "management-ip": {"v_range": [["7.4.1", ""]], "type": "str"},
+ "management-port": {"v_range": [["7.4.1", ""]], "type": "int"},
+ "save-last-hit-in-adomdb": {"v_range": [["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "api-ip-binding": {"v_range": [["7.4.2", ""]], "choices": ["disable", "enable"], "type": "str"}
}
},
"system_guiact": {
"stated": false,
"options": {
- "backup_all": {"v_range": [["6.0.0", "7.4.0"]], "type": "str"},
- "backup_conf": {"v_range": [["6.0.0", "7.4.0"]], "type": "str"},
- "eventlog_msg": {"v_range": [["6.0.0", "7.4.0"]], "type": "str"},
- "eventlog_path": {"v_range": [["6.0.0", "7.4.0"]], "type": "str"},
- "reboot": {"v_range": [["6.0.0", "7.4.0"]], "type": "int"},
- "reset2default": {"v_range": [["6.0.0", "7.4.0"]], "type": "int"},
- "restore_all": {"v_range": [["6.0.0", "7.4.0"]], "type": "str"},
- "restore_conf": {"v_range": [["6.0.0", "7.4.0"]], "type": "str"},
- "time": {"v_range": [["6.0.0", "7.4.0"]], "type": "str"}
+ "backup_all": {"v_range": [["6.0.0", "7.0.11"], ["7.2.0", "7.2.4"], ["7.4.0", "7.4.0"]], "type": "str"},
+ "backup_conf": {"v_range": [["6.0.0", "7.0.11"], ["7.2.0", "7.2.4"], ["7.4.0", "7.4.0"]], "type": "str"},
+ "eventlog_msg": {"v_range": [["6.0.0", "7.0.11"], ["7.2.0", "7.2.4"], ["7.4.0", "7.4.0"]], "type": "str"},
+ "eventlog_path": {"v_range": [["6.0.0", "7.0.11"], ["7.2.0", "7.2.4"], ["7.4.0", "7.4.0"]], "type": "str"},
+ "reboot": {"v_range": [["6.0.0", "7.0.11"], ["7.2.0", "7.2.4"], ["7.4.0", "7.4.0"]], "type": "int"},
+ "reset2default": {"v_range": [["6.0.0", "7.0.11"], ["7.2.0", "7.2.4"], ["7.4.0", "7.4.0"]], "type": "int"},
+ "restore_all": {"v_range": [["6.0.0", "7.0.11"], ["7.2.0", "7.2.4"], ["7.4.0", "7.4.0"]], "type": "str"},
+ "restore_conf": {"v_range": [["6.0.0", "7.0.11"], ["7.2.0", "7.2.4"], ["7.4.0", "7.4.0"]], "type": "str"},
+ "time": {"v_range": [["6.0.0", "7.0.11"], ["7.2.0", "7.2.4"], ["7.4.0", "7.4.0"]], "type": "str"}
}
},
"system_ha": {
@@ -23814,7 +23828,7 @@ SCHEMA_DATA = '''
"vip": {"v_range": [["7.2.0", ""]], "type": "str"},
"vrrp-adv-interval": {"v_range": [["7.2.0", ""]], "type": "int"},
"vrrp-interface": {"v_range": [["7.2.0", ""]], "type": "str"},
- "vip-interface": {"v_range": [["7.2.4", "7.2.4"], ["7.4.1", ""]], "type": "str"}
+ "vip-interface": {"v_range": [["7.2.4", "7.2.5"], ["7.4.1", ""]], "type": "str"}
}
},
"system_ha_monitoredinterfaces": {"stated": true, "options": {"interface-name": {"v_range": [["7.2.0", ""]], "type": "str"}}},
@@ -23983,9 +23997,9 @@ SCHEMA_DATA = '''
"system": {"choices": ["disable", "enable"], "type": "str"},
"webport": {"choices": ["disable", "enable"], "type": "str"},
"incident": {"v_range": [["6.4.0", ""]], "choices": ["disable", "enable"], "type": "str"},
- "aid": {"v_range": [["6.4.1", "7.2.4"]], "choices": ["disable", "enable"], "type": "str"},
+ "aid": {"v_range": [["6.4.1", "7.2.5"]], "choices": ["disable", "enable"], "type": "str"},
"docker": {"v_range": [["6.4.3", ""]], "choices": ["disable", "enable"], "type": "str"},
- "controller": {"v_range": [["7.0.9", "7.0.10"], ["7.2.4", "7.2.4"], ["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"}
+ "controller": {"v_range": [["7.0.9", "7.0.12"], ["7.2.4", "7.2.5"], ["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"}
}
},
"system_locallog_disk_setting": {
@@ -24012,7 +24026,7 @@ SCHEMA_DATA = '''
"uploaduser": {"type": "str"},
"uploadzip": {"choices": ["disable", "enable"], "type": "str"},
"log-disk-quota": {"v_range": [["7.0.3", ""]], "type": "int"},
- "max-log-file-num": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "type": "int"}
+ "max-log-file-num": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "type": "int"}
}
},
"system_locallog_fortianalyzer2_filter": {
@@ -24058,9 +24072,9 @@ SCHEMA_DATA = '''
"system": {"choices": ["disable", "enable"], "type": "str"},
"webport": {"choices": ["disable", "enable"], "type": "str"},
"incident": {"v_range": [["6.4.0", ""]], "choices": ["disable", "enable"], "type": "str"},
- "aid": {"v_range": [["6.4.1", "7.2.4"]], "choices": ["disable", "enable"], "type": "str"},
+ "aid": {"v_range": [["6.4.1", "7.2.5"]], "choices": ["disable", "enable"], "type": "str"},
"docker": {"v_range": [["6.4.3", ""]], "choices": ["disable", "enable"], "type": "str"},
- "controller": {"v_range": [["7.0.9", "7.0.10"], ["7.2.4", "7.2.4"], ["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"}
+ "controller": {"v_range": [["7.0.9", "7.0.12"], ["7.2.4", "7.2.5"], ["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"}
}
},
"system_locallog_fortianalyzer2_setting": {
@@ -24119,9 +24133,9 @@ SCHEMA_DATA = '''
"system": {"choices": ["disable", "enable"], "type": "str"},
"webport": {"choices": ["disable", "enable"], "type": "str"},
"incident": {"v_range": [["6.4.0", ""]], "choices": ["disable", "enable"], "type": "str"},
- "aid": {"v_range": [["6.4.1", "7.2.4"]], "choices": ["disable", "enable"], "type": "str"},
+ "aid": {"v_range": [["6.4.1", "7.2.5"]], "choices": ["disable", "enable"], "type": "str"},
"docker": {"v_range": [["6.4.3", ""]], "choices": ["disable", "enable"], "type": "str"},
- "controller": {"v_range": [["7.0.9", "7.0.10"], ["7.2.4", "7.2.4"], ["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"}
+ "controller": {"v_range": [["7.0.9", "7.0.12"], ["7.2.4", "7.2.5"], ["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"}
}
},
"system_locallog_fortianalyzer3_setting": {
@@ -24180,9 +24194,9 @@ SCHEMA_DATA = '''
"system": {"choices": ["disable", "enable"], "type": "str"},
"webport": {"choices": ["disable", "enable"], "type": "str"},
"incident": {"v_range": [["6.4.0", ""]], "choices": ["disable", "enable"], "type": "str"},
- "aid": {"v_range": [["6.4.1", "7.2.4"]], "choices": ["disable", "enable"], "type": "str"},
+ "aid": {"v_range": [["6.4.1", "7.2.5"]], "choices": ["disable", "enable"], "type": "str"},
"docker": {"v_range": [["6.4.3", ""]], "choices": ["disable", "enable"], "type": "str"},
- "controller": {"v_range": [["7.0.9", "7.0.10"], ["7.2.4", "7.2.4"], ["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"}
+ "controller": {"v_range": [["7.0.9", "7.0.12"], ["7.2.4", "7.2.5"], ["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"}
}
},
"system_locallog_fortianalyzer_setting": {
@@ -24241,9 +24255,9 @@ SCHEMA_DATA = '''
"system": {"choices": ["disable", "enable"], "type": "str"},
"webport": {"choices": ["disable", "enable"], "type": "str"},
"incident": {"v_range": [["6.4.0", ""]], "choices": ["disable", "enable"], "type": "str"},
- "aid": {"v_range": [["6.4.1", "7.2.4"]], "choices": ["disable", "enable"], "type": "str"},
+ "aid": {"v_range": [["6.4.1", "7.2.5"]], "choices": ["disable", "enable"], "type": "str"},
"docker": {"v_range": [["6.4.3", ""]], "choices": ["disable", "enable"], "type": "str"},
- "controller": {"v_range": [["7.0.9", "7.0.10"], ["7.2.4", "7.2.4"], ["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"}
+ "controller": {"v_range": [["7.0.9", "7.0.12"], ["7.2.4", "7.2.5"], ["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"}
}
},
"system_locallog_memory_setting": {
@@ -24261,7 +24275,7 @@ SCHEMA_DATA = '''
"log-interval-disk-full": {"type": "int"},
"log-interval-gbday-exceeded": {"type": "int"},
"log-daemon-crash": {"v_range": [["7.2.2", ""]], "choices": ["disable", "enable"], "type": "str"},
- "no-log-detection-threshold": {"v_range": [["7.2.4", "7.2.4"], ["7.4.2", ""]], "type": "int"},
+ "no-log-detection-threshold": {"v_range": [["7.2.4", "7.2.5"], ["7.4.2", ""]], "type": "int"},
"log-interval-adom-perf-stats": {"v_range": [["7.4.0", ""]], "type": "int"}
}
},
@@ -24308,9 +24322,9 @@ SCHEMA_DATA = '''
"system": {"choices": ["disable", "enable"], "type": "str"},
"webport": {"choices": ["disable", "enable"], "type": "str"},
"incident": {"v_range": [["6.4.0", ""]], "choices": ["disable", "enable"], "type": "str"},
- "aid": {"v_range": [["6.4.1", "7.2.4"]], "choices": ["disable", "enable"], "type": "str"},
+ "aid": {"v_range": [["6.4.1", "7.2.5"]], "choices": ["disable", "enable"], "type": "str"},
"docker": {"v_range": [["6.4.3", ""]], "choices": ["disable", "enable"], "type": "str"},
- "controller": {"v_range": [["7.0.9", "7.0.10"], ["7.2.4", "7.2.4"], ["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"}
+ "controller": {"v_range": [["7.0.9", "7.0.12"], ["7.2.4", "7.2.5"], ["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"}
}
},
"system_locallog_syslogd2_setting": {
@@ -24327,9 +24341,9 @@ SCHEMA_DATA = '''
"severity": {"choices": ["emergency", "alert", "critical", "error", "warning", "notification", "information", "debug"], "type": "str"},
"status": {"choices": ["disable", "enable"], "type": "str"},
"syslog-name": {"type": "str"},
- "cert": {"v_range": [["6.4.6", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "reliable": {"v_range": [["6.4.6", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "secure-connection": {"v_range": [["6.4.6", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"}
+ "cert": {"v_range": [["6.4.6", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "reliable": {"v_range": [["6.4.6", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "secure-connection": {"v_range": [["6.4.6", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"}
}
},
"system_locallog_syslogd3_filter": {
@@ -24375,9 +24389,9 @@ SCHEMA_DATA = '''
"system": {"choices": ["disable", "enable"], "type": "str"},
"webport": {"choices": ["disable", "enable"], "type": "str"},
"incident": {"v_range": [["6.4.0", ""]], "choices": ["disable", "enable"], "type": "str"},
- "aid": {"v_range": [["6.4.1", "7.2.4"]], "choices": ["disable", "enable"], "type": "str"},
+ "aid": {"v_range": [["6.4.1", "7.2.5"]], "choices": ["disable", "enable"], "type": "str"},
"docker": {"v_range": [["6.4.3", ""]], "choices": ["disable", "enable"], "type": "str"},
- "controller": {"v_range": [["7.0.9", "7.0.10"], ["7.2.4", "7.2.4"], ["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"}
+ "controller": {"v_range": [["7.0.9", "7.0.12"], ["7.2.4", "7.2.5"], ["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"}
}
},
"system_locallog_syslogd3_setting": {
@@ -24394,9 +24408,9 @@ SCHEMA_DATA = '''
"severity": {"choices": ["emergency", "alert", "critical", "error", "warning", "notification", "information", "debug"], "type": "str"},
"status": {"choices": ["disable", "enable"], "type": "str"},
"syslog-name": {"type": "str"},
- "cert": {"v_range": [["6.4.6", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "reliable": {"v_range": [["6.4.6", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "secure-connection": {"v_range": [["6.4.6", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"}
+ "cert": {"v_range": [["6.4.6", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "reliable": {"v_range": [["6.4.6", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "secure-connection": {"v_range": [["6.4.6", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"}
}
},
"system_locallog_syslogd_filter": {
@@ -24442,9 +24456,9 @@ SCHEMA_DATA = '''
"system": {"choices": ["disable", "enable"], "type": "str"},
"webport": {"choices": ["disable", "enable"], "type": "str"},
"incident": {"v_range": [["6.4.0", ""]], "choices": ["disable", "enable"], "type": "str"},
- "aid": {"v_range": [["6.4.1", "7.2.4"]], "choices": ["disable", "enable"], "type": "str"},
+ "aid": {"v_range": [["6.4.1", "7.2.5"]], "choices": ["disable", "enable"], "type": "str"},
"docker": {"v_range": [["6.4.3", ""]], "choices": ["disable", "enable"], "type": "str"},
- "controller": {"v_range": [["7.0.9", "7.0.10"], ["7.2.4", "7.2.4"], ["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"}
+ "controller": {"v_range": [["7.0.9", "7.0.12"], ["7.2.4", "7.2.5"], ["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"}
}
},
"system_locallog_syslogd_setting": {
@@ -24461,9 +24475,9 @@ SCHEMA_DATA = '''
"severity": {"choices": ["emergency", "alert", "critical", "error", "warning", "notification", "information", "debug"], "type": "str"},
"status": {"choices": ["disable", "enable"], "type": "str"},
"syslog-name": {"type": "str"},
- "cert": {"v_range": [["6.4.6", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "reliable": {"v_range": [["6.4.6", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "secure-connection": {"v_range": [["6.4.6", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"}
+ "cert": {"v_range": [["6.4.6", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "reliable": {"v_range": [["6.4.6", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "secure-connection": {"v_range": [["6.4.6", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"}
}
},
"system_log_alert": {"stated": false, "options": {"max-alert-count": {"type": "int"}}},
@@ -24584,9 +24598,9 @@ SCHEMA_DATA = '''
"file-size": {"type": "int"},
"gzip-format": {"choices": ["disable", "enable"], "type": "str"},
"hour": {"type": "int"},
- "ip": {"v_range": [["6.0.0", "7.0.10"]], "type": "str"},
- "ip2": {"v_range": [["6.0.0", "7.0.10"]], "type": "str"},
- "ip3": {"v_range": [["6.0.0", "7.0.10"]], "type": "str"},
+ "ip": {"v_range": [["6.0.0", "7.0.12"]], "type": "str"},
+ "ip2": {"v_range": [["6.0.0", "7.0.12"]], "type": "str"},
+ "ip3": {"v_range": [["6.0.0", "7.0.12"]], "type": "str"},
"log-format": {"choices": ["native", "text", "csv"], "type": "str"},
"min": {"type": "int"},
"password": {"no_log": true, "type": "raw"},
@@ -24619,9 +24633,9 @@ SCHEMA_DATA = '''
"file-size": {"type": "int"},
"gzip-format": {"choices": ["disable", "enable"], "type": "str"},
"hour": {"type": "int"},
- "ip": {"v_range": [["6.0.0", "7.0.10"]], "type": "str"},
- "ip2": {"v_range": [["6.0.0", "7.0.10"]], "type": "str"},
- "ip3": {"v_range": [["6.0.0", "7.0.10"]], "type": "str"},
+ "ip": {"v_range": [["6.0.0", "7.0.12"]], "type": "str"},
+ "ip2": {"v_range": [["6.0.0", "7.0.12"]], "type": "str"},
+ "ip3": {"v_range": [["6.0.0", "7.0.12"]], "type": "str"},
"log-format": {"choices": ["native", "text", "csv"], "type": "str"},
"min": {"type": "int"},
"password": {"no_log": true, "type": "raw"},
@@ -24654,9 +24668,9 @@ SCHEMA_DATA = '''
"file-size": {"type": "int"},
"gzip-format": {"choices": ["disable", "enable"], "type": "str"},
"hour": {"type": "int"},
- "ip": {"v_range": [["6.0.0", "7.0.10"]], "type": "str"},
- "ip2": {"v_range": [["6.0.0", "7.0.10"]], "type": "str"},
- "ip3": {"v_range": [["6.0.0", "7.0.10"]], "type": "str"},
+ "ip": {"v_range": [["6.0.0", "7.0.12"]], "type": "str"},
+ "ip2": {"v_range": [["6.0.0", "7.0.12"]], "type": "str"},
+ "ip3": {"v_range": [["6.0.0", "7.0.12"]], "type": "str"},
"log-format": {"choices": ["native", "text", "csv"], "type": "str"},
"min": {"type": "int"},
"password": {"no_log": true, "type": "raw"},
@@ -24681,11 +24695,11 @@ SCHEMA_DATA = '''
}
},
"sync-search-timeout": {"type": "int"},
- "keep-dev-logs": {"v_range": [["6.4.7", "6.4.13"], ["7.0.2", ""]], "choices": ["disable", "enable"], "type": "str"},
- "device-auto-detect": {"v_range": [["7.0.10", "7.0.10"], ["7.2.4", "7.2.4"], ["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "unencrypted-logging": {"v_range": [["7.0.10", "7.0.10"], ["7.2.4", "7.2.4"], ["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "log-interval-dev-no-logging": {"v_range": [["7.4.2", ""]], "type": "int"},
- "log-upload-interval-dev-no-logging": {"v_range": [["7.4.2", ""]], "type": "int"}
+ "keep-dev-logs": {"v_range": [["6.4.7", "6.4.14"], ["7.0.2", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "device-auto-detect": {"v_range": [["7.0.10", "7.0.12"], ["7.2.4", "7.2.5"], ["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "unencrypted-logging": {"v_range": [["7.0.10", "7.0.12"], ["7.2.4", "7.2.5"], ["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "log-interval-dev-no-logging": {"v_range": [["7.2.5", "7.2.5"], ["7.4.2", ""]], "type": "int"},
+ "log-upload-interval-dev-no-logging": {"v_range": [["7.2.5", "7.2.5"], ["7.4.2", ""]], "type": "int"}
}
},
"system_log_settings_rollinganalyzer": {
@@ -24697,9 +24711,9 @@ SCHEMA_DATA = '''
"file-size": {"type": "int"},
"gzip-format": {"choices": ["disable", "enable"], "type": "str"},
"hour": {"type": "int"},
- "ip": {"v_range": [["6.0.0", "7.0.10"]], "type": "str"},
- "ip2": {"v_range": [["6.0.0", "7.0.10"]], "type": "str"},
- "ip3": {"v_range": [["6.0.0", "7.0.10"]], "type": "str"},
+ "ip": {"v_range": [["6.0.0", "7.0.12"]], "type": "str"},
+ "ip2": {"v_range": [["6.0.0", "7.0.12"]], "type": "str"},
+ "ip3": {"v_range": [["6.0.0", "7.0.12"]], "type": "str"},
"log-format": {"choices": ["native", "text", "csv"], "type": "str"},
"min": {"type": "int"},
"password": {"no_log": true, "type": "raw"},
@@ -24732,9 +24746,9 @@ SCHEMA_DATA = '''
"file-size": {"type": "int"},
"gzip-format": {"choices": ["disable", "enable"], "type": "str"},
"hour": {"type": "int"},
- "ip": {"v_range": [["6.0.0", "7.0.10"]], "type": "str"},
- "ip2": {"v_range": [["6.0.0", "7.0.10"]], "type": "str"},
- "ip3": {"v_range": [["6.0.0", "7.0.10"]], "type": "str"},
+ "ip": {"v_range": [["6.0.0", "7.0.12"]], "type": "str"},
+ "ip2": {"v_range": [["6.0.0", "7.0.12"]], "type": "str"},
+ "ip3": {"v_range": [["6.0.0", "7.0.12"]], "type": "str"},
"log-format": {"choices": ["native", "text", "csv"], "type": "str"},
"min": {"type": "int"},
"password": {"no_log": true, "type": "raw"},
@@ -24767,9 +24781,9 @@ SCHEMA_DATA = '''
"file-size": {"type": "int"},
"gzip-format": {"choices": ["disable", "enable"], "type": "str"},
"hour": {"type": "int"},
- "ip": {"v_range": [["6.0.0", "7.0.10"]], "type": "str"},
- "ip2": {"v_range": [["6.0.0", "7.0.10"]], "type": "str"},
- "ip3": {"v_range": [["6.0.0", "7.0.10"]], "type": "str"},
+ "ip": {"v_range": [["6.0.0", "7.0.12"]], "type": "str"},
+ "ip2": {"v_range": [["6.0.0", "7.0.12"]], "type": "str"},
+ "ip3": {"v_range": [["6.0.0", "7.0.12"]], "type": "str"},
"log-format": {"choices": ["native", "text", "csv"], "type": "str"},
"min": {"type": "int"},
"password": {"no_log": true, "type": "raw"},
@@ -24796,8 +24810,8 @@ SCHEMA_DATA = '''
"system_log_topology": {
"stated": false,
"options": {
- "max-depth": {"v_range": [["6.4.7", "6.4.13"], ["7.0.2", ""]], "type": "int"},
- "max-depth-share": {"v_range": [["6.4.7", "6.4.13"], ["7.0.2", ""]], "type": "int"}
+ "max-depth": {"v_range": [["6.4.7", "6.4.14"], ["7.0.2", ""]], "type": "int"},
+ "max-depth-share": {"v_range": [["6.4.7", "6.4.14"], ["7.0.2", ""]], "type": "int"}
}
},
"system_logfetch_clientprofile": {
@@ -24886,7 +24900,7 @@ SCHEMA_DATA = '''
"user": {"type": "str"},
"auth-type": {"v_range": [["6.4.6", ""]], "choices": ["psk", "certificate"], "type": "str"},
"local-cert": {"v_range": [["6.4.6", ""]], "type": "str"},
- "from": {"v_range": [["7.0.7", "7.0.10"], ["7.2.2", ""]], "type": "str"}
+ "from": {"v_range": [["7.0.7", "7.0.12"], ["7.2.2", ""]], "type": "str"}
}
},
"system_mcpolicydisabledadoms": {"stated": true, "options": {"adom-name": {"v_range": [["6.2.3", ""]], "type": "str"}}},
@@ -24921,156 +24935,157 @@ SCHEMA_DATA = '''
"system_npu": {
"stated": false,
"options": {
- "capwap-offload": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "capwap-offload": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"dedicated-management-affinity": {"v_range": [["7.0.1", ""]], "type": "str"},
- "dedicated-management-cpu": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "fastpath": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "dedicated-management-cpu": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "fastpath": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"fp-anomaly": {
"type": "dict",
"options": {
- "esp-minlen-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "icmp-csum-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "icmp-minlen-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "ipv4-csum-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "ipv4-ihl-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "ipv4-len-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "ipv4-opt-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "ipv4-ttlzero-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "ipv4-ver-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "ipv6-exthdr-len-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "ipv6-exthdr-order-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "ipv6-ihl-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "ipv6-plen-zero": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "ipv6-ver-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "tcp-csum-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "tcp-hlen-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "tcp-plen-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "udp-csum-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "udp-hlen-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "udp-len-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "udp-plen-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "udplite-cover-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "udplite-csum-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "unknproto-minlen-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "tcp-fin-only": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv4-optsecurity": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv6-optralert": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "tcp-syn-fin": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv4-proto-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv6-saddr-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "icmp-frag": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv4-optssrr": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv6-opthomeaddr": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "udp-land": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv6-optinvld": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "tcp-fin-noack": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv6-proto-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "tcp-land": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv4-unknopt": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv4-optstream": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv6-optjumbo": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "icmp-land": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "tcp-winnuke": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv6-daddr-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv4-land": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv6-opttunnel": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "tcp-no-flag": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv6-land": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv4-optlsrr": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv4-opttimestamp": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv4-optrr": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv6-optnsap": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv6-unknopt": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "tcp-syn-data": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv6-optendpid": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "gtpu-plen-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "vxlan-minlen-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "capwap-minlen-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "gre-csum-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "nvgre-minlen-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "sctp-l4len-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "tcp-hlenvsl4len-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "sctp-crc-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "sctp-clen-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "uesp-minlen-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"}
+ "esp-minlen-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "icmp-csum-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "icmp-minlen-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "ipv4-csum-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "ipv4-ihl-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "ipv4-len-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "ipv4-opt-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "ipv4-ttlzero-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "ipv4-ver-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "ipv6-exthdr-len-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "ipv6-exthdr-order-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "ipv6-ihl-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "ipv6-plen-zero": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "ipv6-ver-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "tcp-csum-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "tcp-hlen-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "tcp-plen-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "udp-csum-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "udp-hlen-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "udp-len-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "udp-plen-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "udplite-cover-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "udplite-csum-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "unknproto-minlen-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "tcp-fin-only": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv4-optsecurity": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv6-optralert": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "tcp-syn-fin": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv4-proto-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv6-saddr-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "icmp-frag": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv4-optssrr": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv6-opthomeaddr": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "udp-land": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv6-optinvld": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "tcp-fin-noack": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv6-proto-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "tcp-land": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv4-unknopt": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv4-optstream": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv6-optjumbo": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "icmp-land": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "tcp-winnuke": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv6-daddr-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv4-land": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv6-opttunnel": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "tcp-no-flag": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv6-land": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv4-optlsrr": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv4-opttimestamp": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv4-optrr": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv6-optnsap": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv6-unknopt": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "tcp-syn-data": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv6-optendpid": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "gtpu-plen-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "vxlan-minlen-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "capwap-minlen-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "gre-csum-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "nvgre-minlen-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "sctp-l4len-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "tcp-hlenvsl4len-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "sctp-crc-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "sctp-clen-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "uesp-minlen-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "sctp-csum-err": {"v_range": [["7.2.5", "7.2.5"]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"}
}
},
- "gtp-enhanced-cpu-range": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["0", "1", "2"], "type": "str"},
- "gtp-enhanced-mode": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "host-shortcut-mode": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["bi-directional", "host-shortcut"], "type": "str"},
+ "gtp-enhanced-cpu-range": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["0", "1", "2"], "type": "str"},
+ "gtp-enhanced-mode": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "host-shortcut-mode": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["bi-directional", "host-shortcut"], "type": "str"},
"htx-gtse-quota": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": [
"100Mbps", "200Mbps", "300Mbps", "400Mbps", "500Mbps", "600Mbps", "700Mbps", "800Mbps", "900Mbps", "1Gbps", "2Gbps", "4Gbps",
"8Gbps", "10Gbps"
],
"type": "str"
},
- "intf-shaping-offload": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "iph-rsvd-re-cksum": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "ipsec-dec-subengine-mask": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "ipsec-enc-subengine-mask": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "ipsec-inbound-cache": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "ipsec-mtu-override": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "ipsec-over-vlink": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "intf-shaping-offload": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "iph-rsvd-re-cksum": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "ipsec-dec-subengine-mask": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "ipsec-enc-subengine-mask": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "ipsec-inbound-cache": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "ipsec-mtu-override": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "ipsec-over-vlink": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"isf-np-queues": {
"type": "dict",
"options": {
- "cos0": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "cos1": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "cos2": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "cos3": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "cos4": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "cos5": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "cos6": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "cos7": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"}
+ "cos0": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "cos1": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "cos2": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "cos3": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "cos4": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "cos5": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "cos6": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "cos7": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"}
}
},
- "lag-out-port-select": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "lag-out-port-select": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"mcast-session-accounting": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["disable", "session-based", "tpe-based"],
"type": "str"
},
- "np6-cps-optimization-mode": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "np6-cps-optimization-mode": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"per-session-accounting": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["enable", "disable", "enable-by-log", "all-enable", "traffic-log-only"],
"type": "str"
},
"port-cpu-map": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"type": "list",
"options": {
- "cpu-core": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "interface": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"}
+ "cpu-core": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "interface": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"}
},
"elements": "dict"
},
"port-npu-map": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"type": "list",
"options": {
- "interface": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "npu-group-index": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"}
+ "interface": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "npu-group-index": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"}
},
"elements": "dict"
},
"priority-protocol": {
"type": "dict",
"options": {
- "bfd": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "bgp": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "slbc": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"}
+ "bfd": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "bgp": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "slbc": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"}
}
},
- "qos-mode": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "priority", "round-robin"], "type": "str"},
- "rdp-offload": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "recover-np6-link": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "qos-mode": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "priority", "round-robin"], "type": "str"},
+ "rdp-offload": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "recover-np6-link": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"session-denied-offload": {"v_range": [["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "sse-backpressure": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "strip-clear-text-padding": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "strip-esp-padding": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "sse-backpressure": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "strip-clear-text-padding": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "strip-esp-padding": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"sw-eh-hash": {
"type": "dict",
"options": {
@@ -25086,561 +25101,561 @@ SCHEMA_DATA = '''
}
},
"sw-np-bandwidth": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["0G", "2G", "4G", "5G", "6G", "7G", "8G", "9G"],
"type": "str"
},
- "switch-np-hash": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["src-ip", "dst-ip", "src-dst-ip"], "type": "str"},
- "uesp-offload": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "switch-np-hash": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["src-ip", "dst-ip", "src-dst-ip"], "type": "str"},
+ "uesp-offload": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"np-queues": {
"type": "dict",
"options": {
"ethernet-type": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"type": "list",
"options": {
- "name": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "queue": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "type": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "weight": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"}
+ "name": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "queue": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "type": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "weight": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"}
},
"elements": "dict"
},
"ip-protocol": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"type": "list",
"options": {
- "name": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "protocol": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "queue": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "weight": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"}
+ "name": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "protocol": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "queue": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "weight": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"}
},
"elements": "dict"
},
"ip-service": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"type": "list",
"options": {
- "dport": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "name": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "protocol": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "queue": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "sport": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "weight": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"}
+ "dport": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "name": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "protocol": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "queue": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "sport": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "weight": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"}
},
"elements": "dict"
},
"profile": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"type": "list",
"options": {
"cos0": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"cos1": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"cos2": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"cos3": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"cos4": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"cos5": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"cos6": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"cos7": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp0": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp1": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp10": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp11": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp12": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp13": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp14": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp15": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp16": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp17": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp18": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp19": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp2": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp20": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp21": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp22": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp23": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp24": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp25": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp26": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp27": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp28": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp29": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp3": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp30": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp31": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp32": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp33": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp34": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp35": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp36": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp37": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp38": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp39": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp4": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp40": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp41": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp42": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp43": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp44": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp45": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp46": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp47": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp48": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp49": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp5": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp50": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp51": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp52": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp53": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp54": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp55": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp56": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp57": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp58": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp59": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp6": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp60": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp61": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp62": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp63": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp7": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp8": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp9": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
- "id": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "type": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["cos", "dscp"], "type": "str"},
- "weight": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"}
+ "id": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "type": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["cos", "dscp"], "type": "str"},
+ "weight": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"}
},
"elements": "dict"
},
"scheduler": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"type": "list",
"options": {
- "mode": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["none", "priority", "round-robin"], "type": "str"},
- "name": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"}
+ "mode": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["none", "priority", "round-robin"], "type": "str"},
+ "name": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"}
},
"elements": "dict"
}
}
},
"udp-timeout-profile": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"type": "list",
"options": {
- "id": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "udp-idle": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"}
+ "id": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "udp-idle": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"}
},
"elements": "dict"
},
- "qtm-buf-mode": {"v_range": [["6.4.8", "6.4.13"], ["7.0.3", ""]], "choices": ["6ch", "4ch"], "type": "str"},
- "default-qos-type": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["policing", "shaping", "policing-enhanced"], "type": "str"},
- "tcp-rst-timeout": {"v_range": [["6.4.7", "6.4.13"], ["7.0.2", ""]], "type": "int"},
+ "qtm-buf-mode": {"v_range": [["6.4.8", "6.4.14"], ["7.0.3", ""]], "choices": ["6ch", "4ch"], "type": "str"},
+ "default-qos-type": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["policing", "shaping", "policing-enhanced"], "type": "str"},
+ "tcp-rst-timeout": {"v_range": [["6.4.7", "6.4.14"], ["7.0.2", ""]], "type": "int"},
"ipsec-local-uesp-port": {"v_range": [["7.0.3", ""]], "type": "int"},
- "htab-dedi-queue-nr": {"v_range": [["6.4.7", "6.4.13"], ["7.0.2", ""]], "type": "int"},
- "double-level-mcast-offload": {"v_range": [["6.4.7", "6.4.13"], ["7.0.2", ""]], "choices": ["disable", "enable"], "type": "str"},
- "dse-timeout": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "ippool-overload-low": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "pba-eim": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disallow", "allow"], "type": "str"},
+ "htab-dedi-queue-nr": {"v_range": [["6.4.7", "6.4.14"], ["7.0.2", ""]], "type": "int"},
+ "double-level-mcast-offload": {"v_range": [["6.4.7", "6.4.14"], ["7.0.2", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "dse-timeout": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "ippool-overload-low": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "pba-eim": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disallow", "allow"], "type": "str"},
"policy-offload-level": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["disable", "dos-offload", "full-offload"],
"type": "str"
},
- "max-session-timeout": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "port-path-option": {"type": "dict", "options": {"ports-using-npu": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "raw"}}},
- "vlan-lookup-cache": {"v_range": [["6.4.7", "6.4.13"], ["7.0.2", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "max-session-timeout": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "port-path-option": {"type": "dict", "options": {"ports-using-npu": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "raw"}}},
+ "vlan-lookup-cache": {"v_range": [["6.4.7", "6.4.14"], ["7.0.2", ""]], "choices": ["disable", "enable"], "type": "str"},
"dos-options": {
"type": "dict",
"options": {
- "npu-dos-meter-mode": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["local", "global"], "type": "str"},
- "npu-dos-synproxy-mode": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["synack2ack", "pass-synack"], "type": "str"},
- "npu-dos-tpe-mode": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"}
+ "npu-dos-meter-mode": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["local", "global"], "type": "str"},
+ "npu-dos-synproxy-mode": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["synack2ack", "pass-synack"], "type": "str"},
+ "npu-dos-tpe-mode": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"}
}
},
- "hash-tbl-spread": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "hash-tbl-spread": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"tcp-timeout-profile": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"type": "list",
"options": {
- "close-wait": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "fin-wait": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "id": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "syn-sent": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "syn-wait": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "tcp-idle": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "time-wait": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"}
+ "close-wait": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "fin-wait": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "id": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "syn-sent": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "syn-wait": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "tcp-idle": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "time-wait": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"}
},
"elements": "dict"
},
"ip-reassembly": {
"type": "dict",
"options": {
- "max-timeout": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "min-timeout": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "status": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"}
+ "max-timeout": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "min-timeout": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "status": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"}
}
},
- "gtp-support": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "htx-icmp-csum-chk": {"v_range": [["6.4.8", "6.4.13"], ["7.0.3", ""]], "choices": ["pass", "drop"], "type": "str"},
+ "gtp-support": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "htx-icmp-csum-chk": {"v_range": [["6.4.8", "6.4.14"], ["7.0.3", ""]], "choices": ["pass", "drop"], "type": "str"},
"hpe": {
"type": "dict",
"options": {
- "all-protocol": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "arp-max": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "enable-shaper": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "esp-max": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "high-priority": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "icmp-max": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "ip-frag-max": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "ip-others-max": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "l2-others-max": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "pri-type-max": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "sctp-max": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "tcp-max": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "tcpfin-rst-max": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "tcpsyn-ack-max": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "tcpsyn-max": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "udp-max": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
+ "all-protocol": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "arp-max": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "enable-shaper": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "esp-max": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "high-priority": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "icmp-max": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "ip-frag-max": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "ip-others-max": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "l2-others-max": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "pri-type-max": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "sctp-max": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "tcp-max": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "tcpfin-rst-max": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "tcpsyn-ack-max": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "tcpsyn-max": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "udp-max": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
"enable-queue-shaper": {
- "v_range": [["7.0.9", "7.0.10"], ["7.2.4", "7.2.4"], ["7.4.2", ""]],
+ "v_range": [["7.0.9", "7.0.12"], ["7.2.4", "7.2.5"], ["7.4.2", ""]],
"choices": ["disable", "enable"],
"type": "str"
},
- "exception-code": {"v_range": [["7.0.9", "7.0.10"], ["7.2.4", "7.2.4"], ["7.4.2", ""]], "type": "int"},
- "fragment-with-sess": {"v_range": [["7.0.9", "7.0.10"], ["7.2.4", "7.2.4"], ["7.4.2", ""]], "type": "int"},
- "fragment-without-session": {"v_range": [["7.0.9", "7.0.10"], ["7.2.4", "7.2.4"], ["7.4.2", ""]], "type": "int"},
- "queue-shaper-max": {"v_range": [["7.0.9", "7.0.10"], ["7.2.4", "7.2.4"], ["7.4.2", ""]], "type": "int"}
+ "exception-code": {"v_range": [["7.0.9", "7.0.12"], ["7.2.4", "7.2.5"], ["7.4.2", ""]], "type": "int"},
+ "fragment-with-sess": {"v_range": [["7.0.9", "7.0.12"], ["7.2.4", "7.2.5"], ["7.4.2", ""]], "type": "int"},
+ "fragment-without-session": {"v_range": [["7.0.9", "7.0.12"], ["7.2.4", "7.2.5"], ["7.4.2", ""]], "type": "int"},
+ "queue-shaper-max": {"v_range": [["7.0.9", "7.0.12"], ["7.2.4", "7.2.5"], ["7.4.2", ""]], "type": "int"}
}
},
"dsw-dts-profile": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"type": "list",
"options": {
"action": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["wait", "drop", "drop_tmr_0", "drop_tmr_1", "enque", "enque_0", "enque_1"],
"type": "str"
},
- "min-limit": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "profile-id": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "step": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"}
+ "min-limit": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "profile-id": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "step": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"}
},
"elements": "dict"
},
- "hash-config": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["5-tuple", "src-ip", "src-dst-ip"], "type": "str"},
- "ipsec-ob-np-sel": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["RR", "rr", "Packet", "Hash"], "type": "str"},
- "napi-break-interval": {"v_range": [["6.4.7", "6.4.13"], ["7.0.2", ""]], "type": "int"},
+ "hash-config": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["5-tuple", "src-ip", "src-dst-ip"], "type": "str"},
+ "ipsec-ob-np-sel": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["RR", "rr", "Packet", "Hash"], "type": "str"},
+ "napi-break-interval": {"v_range": [["6.4.7", "6.4.14"], ["7.0.2", ""]], "type": "int"},
"background-sse-scan": {
"type": "dict",
"options": {
- "scan": {"v_range": [["6.4.8", "6.4.13"], ["7.0.3", ""]], "choices": ["disable", "enable"], "type": "str"},
- "stats-update-interval": {"v_range": [["6.4.8", "6.4.13"], ["7.0.3", ""]], "type": "int"},
- "udp-keepalive-interval": {"v_range": [["6.4.8", "6.4.13"], ["7.0.3", ""]], "type": "int"},
- "scan-stale": {"v_range": [["7.4.1", ""]], "type": "int"},
- "scan-vt": {"v_range": [["7.4.1", ""]], "type": "int"},
- "stats-qual-access": {"v_range": [["7.4.1", ""]], "type": "int"},
- "stats-qual-duration": {"v_range": [["7.4.1", ""]], "type": "int"},
- "udp-qual-access": {"v_range": [["7.4.1", ""]], "type": "int"},
- "udp-qual-duration": {"v_range": [["7.4.1", ""]], "type": "int"}
+ "scan": {"v_range": [["6.4.8", "6.4.14"], ["7.0.3", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "stats-update-interval": {"v_range": [["6.4.8", "6.4.14"], ["7.0.3", ""]], "type": "int"},
+ "udp-keepalive-interval": {"v_range": [["6.4.8", "6.4.14"], ["7.0.3", ""]], "type": "int"},
+ "scan-stale": {"v_range": [["7.0.12", "7.0.12"], ["7.4.1", ""]], "type": "int"},
+ "scan-vt": {"v_range": [["7.0.12", "7.0.12"], ["7.4.1", ""]], "type": "int"},
+ "stats-qual-access": {"v_range": [["7.0.12", "7.0.12"], ["7.4.1", ""]], "type": "int"},
+ "stats-qual-duration": {"v_range": [["7.0.12", "7.0.12"], ["7.4.1", ""]], "type": "int"},
+ "udp-qual-access": {"v_range": [["7.0.12", "7.0.12"], ["7.4.1", ""]], "type": "int"},
+ "udp-qual-duration": {"v_range": [["7.0.12", "7.0.12"], ["7.4.1", ""]], "type": "int"}
}
},
- "inbound-dscp-copy-port": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "raw"},
- "session-acct-interval": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "htab-msg-queue": {"v_range": [["6.4.7", "6.4.13"], ["7.0.2", ""]], "choices": ["idle", "data", "dedicated"], "type": "str"},
+ "inbound-dscp-copy-port": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "raw"},
+ "session-acct-interval": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "htab-msg-queue": {"v_range": [["6.4.7", "6.4.14"], ["7.0.2", ""]], "choices": ["idle", "data", "dedicated"], "type": "str"},
"dsw-queue-dts-profile": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"type": "list",
"options": {
"iport": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": [
"EIF0", "eif0", "EIF1", "eif1", "EIF2", "eif2", "EIF3", "eif3", "EIF4", "eif4", "EIF5", "eif5", "EIF6", "eif6", "EIF7",
"eif7", "HTX0", "htx0", "HTX1", "htx1", "SSE0", "sse0", "SSE1", "sse1", "SSE2", "sse2", "SSE3", "sse3", "RLT", "rlt", "DFR",
@@ -25650,9 +25665,9 @@ SCHEMA_DATA = '''
],
"type": "str"
},
- "name": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
+ "name": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
"oport": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": [
"EIF0", "eif0", "EIF1", "eif1", "EIF2", "eif2", "EIF3", "eif3", "EIF4", "eif4", "EIF5", "eif5", "EIF6", "eif6", "EIF7",
"eif7", "HRX", "hrx", "SSE0", "sse0", "SSE1", "sse1", "SSE2", "sse2", "SSE3", "sse3", "RLT", "rlt", "DFR", "dfr", "IPSECI",
@@ -25662,53 +25677,53 @@ SCHEMA_DATA = '''
],
"type": "str"
},
- "profile-id": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "queue-select": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"}
+ "profile-id": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "queue-select": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"}
},
"elements": "dict"
},
- "hw-ha-scan-interval": {"v_range": [["6.4.8", "6.4.13"], ["7.0.3", ""]], "type": "int"},
- "ippool-overload-high": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "nat46-force-ipv4-packet-forwarding": {"v_range": [["6.4.8", "6.4.13"], ["7.0.3", ""]], "choices": ["disable", "enable"], "type": "str"},
- "prp-port-out": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "raw"},
- "isf-np-rx-tr-distr": {"v_range": [["6.4.8", "6.4.13"], ["7.0.4", ""]], "choices": ["port-flow", "round-robin", "randomized"], "type": "str"},
+ "hw-ha-scan-interval": {"v_range": [["6.4.8", "6.4.14"], ["7.0.3", ""]], "type": "int"},
+ "ippool-overload-high": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "nat46-force-ipv4-packet-forwarding": {"v_range": [["6.4.8", "6.4.14"], ["7.0.3", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "prp-port-out": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "raw"},
+ "isf-np-rx-tr-distr": {"v_range": [["6.4.8", "6.4.14"], ["7.0.4", ""]], "choices": ["port-flow", "round-robin", "randomized"], "type": "str"},
"mcast-session-counting6": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["disable", "enable", "session-based", "tpe-based"],
"type": "str"
},
- "prp-port-in": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "raw"},
- "rps-mode": {"v_range": [["6.4.8", "6.4.13"], ["7.0.4", ""]], "choices": ["disable", "enable"], "type": "str"},
- "per-policy-accounting": {"v_range": [["6.4.8", "6.4.13"], ["7.0.3", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "prp-port-in": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "raw"},
+ "rps-mode": {"v_range": [["6.4.8", "6.4.14"], ["7.0.4", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "per-policy-accounting": {"v_range": [["6.4.8", "6.4.14"], ["7.0.3", ""]], "choices": ["disable", "enable"], "type": "str"},
"mcast-session-counting": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["disable", "enable", "session-based", "tpe-based"],
"type": "str"
},
- "inbound-dscp-copy": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "ipsec-host-dfclr": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.1"]], "choices": ["disable", "enable"], "type": "str"},
- "process-icmp-by-host": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", "7.2.1"]], "choices": ["disable", "enable"], "type": "str"},
- "dedicated-tx-npu": {"v_range": [["6.4.7", "6.4.13"]], "choices": ["disable", "enable"], "type": "str"},
- "ull-port-mode": {"v_range": [["6.4.9", "6.4.13"], ["7.0.4", "7.0.10"], ["7.2.1", ""]], "choices": ["10G", "25G"], "type": "str"},
+ "inbound-dscp-copy": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "ipsec-host-dfclr": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.1"]], "choices": ["disable", "enable"], "type": "str"},
+ "process-icmp-by-host": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", "7.2.1"]], "choices": ["disable", "enable"], "type": "str"},
+ "dedicated-tx-npu": {"v_range": [["6.4.7", "6.4.14"]], "choices": ["disable", "enable"], "type": "str"},
+ "ull-port-mode": {"v_range": [["6.4.9", "6.4.14"], ["7.0.4", "7.0.12"], ["7.2.1", ""]], "choices": ["10G", "25G"], "type": "str"},
"sse-ha-scan": {
"type": "dict",
"options": {
- "gap": {"v_range": [["6.4.10", "6.4.13"], ["7.0.4", "7.0.10"], ["7.2.1", ""]], "type": "int"},
- "max-session-cnt": {"v_range": [["6.4.10", "6.4.13"], ["7.0.4", "7.0.10"], ["7.2.1", ""]], "type": "int"},
- "min-duration": {"v_range": [["6.4.10", "6.4.13"], ["7.0.4", "7.0.10"], ["7.2.1", ""]], "type": "int"}
+ "gap": {"v_range": [["6.4.10", "6.4.14"], ["7.0.4", "7.0.12"], ["7.2.1", ""]], "type": "int"},
+ "max-session-cnt": {"v_range": [["6.4.10", "6.4.14"], ["7.0.4", "7.0.12"], ["7.2.1", ""]], "type": "int"},
+ "min-duration": {"v_range": [["6.4.10", "6.4.14"], ["7.0.4", "7.0.12"], ["7.2.1", ""]], "type": "int"}
}
},
- "hash-ipv6-sel": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "type": "int"},
- "ip-fragment-offload": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "ple-non-syn-tcp-action": {"v_range": [["7.0.5", "7.0.10"], ["7.2.2", ""]], "choices": ["forward", "drop"], "type": "str"},
- "npu-group-effective-scope": {"v_range": [["7.0.6", "7.0.10"], ["7.2.2", ""]], "type": "int"},
+ "hash-ipv6-sel": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "type": "int"},
+ "ip-fragment-offload": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "ple-non-syn-tcp-action": {"v_range": [["7.0.5", "7.0.12"], ["7.2.2", ""]], "choices": ["forward", "drop"], "type": "str"},
+ "npu-group-effective-scope": {"v_range": [["7.0.6", "7.0.12"], ["7.2.2", ""]], "type": "int"},
"ipsec-STS-timeout": {
- "v_range": [["7.0.9", "7.0.10"], ["7.2.4", "7.2.4"], ["7.4.2", ""]],
+ "v_range": [["7.0.9", "7.0.12"], ["7.2.4", "7.2.5"], ["7.4.2", ""]],
"choices": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"],
"type": "str"
},
"ipsec-throughput-msg-frequency": {
- "v_range": [["7.0.9", "7.0.10"], ["7.2.4", "7.2.4"], ["7.4.2", ""]],
+ "v_range": [["7.0.9", "7.0.12"], ["7.2.4", "7.2.5"], ["7.4.2", ""]],
"choices": [
"disable", "32KB", "64KB", "128KB", "256KB", "512KB", "1MB", "2MB", "4MB", "8MB", "16MB", "32MB", "64MB", "128MB", "256MB", "512MB",
"1GB"
@@ -25716,18 +25731,21 @@ SCHEMA_DATA = '''
"type": "str"
},
"ipt-STS-timeout": {
- "v_range": [["7.0.9", "7.0.10"], ["7.2.4", "7.2.4"], ["7.4.2", ""]],
+ "v_range": [["7.0.9", "7.0.12"], ["7.2.4", "7.2.5"], ["7.4.2", ""]],
"choices": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"],
"type": "str"
},
"ipt-throughput-msg-frequency": {
- "v_range": [["7.0.9", "7.0.10"], ["7.2.4", "7.2.4"], ["7.4.2", ""]],
+ "v_range": [["7.0.9", "7.0.12"], ["7.2.4", "7.2.5"], ["7.4.2", ""]],
"choices": [
"disable", "32KB", "64KB", "128KB", "256KB", "512KB", "1MB", "2MB", "4MB", "8MB", "16MB", "32MB", "64MB", "128MB", "256MB", "512MB",
"1GB"
],
"type": "str"
},
+ "default-tcp-refresh-dir": {"v_range": [["7.0.12", "7.0.12"], ["7.4.1", ""]], "choices": ["both", "outgoing", "incoming"], "type": "str"},
+ "default-udp-refresh-dir": {"v_range": [["7.0.12", "7.0.12"], ["7.4.1", ""]], "choices": ["both", "outgoing", "incoming"], "type": "str"},
+ "nss-threads-option": {"v_range": [["7.0.12", "7.0.12"], ["7.4.2", ""]], "choices": ["4t-eif", "4t-noeif", "2t"], "type": "str"},
"prp-session-clear-mode": {"v_range": [["7.2.2", ""]], "choices": ["blocking", "non-blocking", "do-not-clear"], "type": "str"},
"shaping-stats": {"v_range": [["7.2.2", ""]], "choices": ["disable", "enable"], "type": "str"},
"sw-tr-hash": {
@@ -25737,8 +25755,10 @@ SCHEMA_DATA = '''
"tcp-udp-port": {"v_range": [["7.2.4", ""]], "choices": ["include", "exclude"], "type": "str"}
}
},
- "default-tcp-refresh-dir": {"v_range": [["7.4.1", ""]], "choices": ["both", "outgoing", "incoming"], "type": "str"},
- "default-udp-refresh-dir": {"v_range": [["7.4.1", ""]], "choices": ["both", "outgoing", "incoming"], "type": "str"},
+ "pba-port-select-mode": {"v_range": [["7.2.5", "7.2.5"], ["7.4.2", ""]], "choices": ["random", "direct"], "type": "str"},
+ "spa-port-select-mode": {"v_range": [["7.2.5", "7.2.5"], ["7.4.2", ""]], "choices": ["random", "direct"], "type": "str"},
+ "split-ipsec-engines": {"v_range": [["7.2.5", "7.2.5"], ["7.4.2", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "tunnel-over-vlink": {"v_range": [["7.2.5", "7.2.5"]], "choices": ["disable", "enable"], "type": "str"},
"max-receive-unit": {"v_range": [["7.4.2", ""]], "type": "int"},
"npu-tcam": {
"v_range": [["7.4.2", ""]],
@@ -25984,53 +26004,49 @@ SCHEMA_DATA = '''
"vid": {"v_range": [["7.4.2", ""]], "type": "int"}
},
"elements": "dict"
- },
- "nss-threads-option": {"v_range": [["7.4.2", ""]], "choices": ["4t-eif", "4t-noeif", "2t"], "type": "str"},
- "pba-port-select-mode": {"v_range": [["7.4.2", ""]], "choices": ["random", "direct"], "type": "str"},
- "spa-port-select-mode": {"v_range": [["7.4.2", ""]], "choices": ["random", "direct"], "type": "str"},
- "split-ipsec-engines": {"v_range": [["7.4.2", ""]], "choices": ["disable", "enable"], "type": "str"}
+ }
}
},
"system_npu_backgroundssescan": {
"stated": false,
"options": {
- "scan": {"v_range": [["6.4.8", "6.4.13"], ["7.0.3", ""]], "choices": ["disable", "enable"], "type": "str"},
- "stats-update-interval": {"v_range": [["6.4.8", "6.4.13"], ["7.0.3", ""]], "type": "int"},
- "udp-keepalive-interval": {"v_range": [["6.4.8", "6.4.13"], ["7.0.3", ""]], "type": "int"},
- "scan-stale": {"v_range": [["7.4.1", ""]], "type": "int"},
- "scan-vt": {"v_range": [["7.4.1", ""]], "type": "int"},
- "stats-qual-access": {"v_range": [["7.4.1", ""]], "type": "int"},
- "stats-qual-duration": {"v_range": [["7.4.1", ""]], "type": "int"},
- "udp-qual-access": {"v_range": [["7.4.1", ""]], "type": "int"},
- "udp-qual-duration": {"v_range": [["7.4.1", ""]], "type": "int"}
+ "scan": {"v_range": [["6.4.8", "6.4.14"], ["7.0.3", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "stats-update-interval": {"v_range": [["6.4.8", "6.4.14"], ["7.0.3", ""]], "type": "int"},
+ "udp-keepalive-interval": {"v_range": [["6.4.8", "6.4.14"], ["7.0.3", ""]], "type": "int"},
+ "scan-stale": {"v_range": [["7.0.12", "7.0.12"], ["7.4.1", ""]], "type": "int"},
+ "scan-vt": {"v_range": [["7.0.12", "7.0.12"], ["7.4.1", ""]], "type": "int"},
+ "stats-qual-access": {"v_range": [["7.0.12", "7.0.12"], ["7.4.1", ""]], "type": "int"},
+ "stats-qual-duration": {"v_range": [["7.0.12", "7.0.12"], ["7.4.1", ""]], "type": "int"},
+ "udp-qual-access": {"v_range": [["7.0.12", "7.0.12"], ["7.4.1", ""]], "type": "int"},
+ "udp-qual-duration": {"v_range": [["7.0.12", "7.0.12"], ["7.4.1", ""]], "type": "int"}
}
},
"system_npu_dosoptions": {
"stated": false,
"options": {
- "npu-dos-meter-mode": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["local", "global"], "type": "str"},
- "npu-dos-synproxy-mode": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["synack2ack", "pass-synack"], "type": "str"},
- "npu-dos-tpe-mode": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"}
+ "npu-dos-meter-mode": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["local", "global"], "type": "str"},
+ "npu-dos-synproxy-mode": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["synack2ack", "pass-synack"], "type": "str"},
+ "npu-dos-tpe-mode": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"}
}
},
"system_npu_dswdtsprofile": {
"stated": true,
"options": {
"action": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["wait", "drop", "drop_tmr_0", "drop_tmr_1", "enque", "enque_0", "enque_1"],
"type": "str"
},
- "min-limit": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "profile-id": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "step": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"}
+ "min-limit": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "profile-id": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "step": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"}
}
},
"system_npu_dswqueuedtsprofile": {
"stated": true,
"options": {
"iport": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": [
"EIF0", "eif0", "EIF1", "eif1", "EIF2", "eif2", "EIF3", "eif3", "EIF4", "eif4", "EIF5", "eif5", "EIF6", "eif6", "EIF7", "eif7",
"HTX0", "htx0", "HTX1", "htx1", "SSE0", "sse0", "SSE1", "sse1", "SSE2", "sse2", "SSE3", "sse3", "RLT", "rlt", "DFR", "dfr", "IPSECI",
@@ -26039,9 +26055,9 @@ SCHEMA_DATA = '''
],
"type": "str"
},
- "name": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "required": true, "type": "str"},
+ "name": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "required": true, "type": "str"},
"oport": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": [
"EIF0", "eif0", "EIF1", "eif1", "EIF2", "eif2", "EIF3", "eif3", "EIF4", "eif4", "EIF5", "eif5", "EIF6", "eif6", "EIF7", "eif7",
"HRX", "hrx", "SSE0", "sse0", "SSE1", "sse1", "SSE2", "sse2", "SSE3", "sse3", "RLT", "rlt", "DFR", "dfr", "IPSECI", "ipseci",
@@ -26050,541 +26066,542 @@ SCHEMA_DATA = '''
],
"type": "str"
},
- "profile-id": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "queue-select": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"}
+ "profile-id": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "queue-select": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"}
}
},
"system_npu_fpanomaly": {
"stated": false,
"options": {
- "esp-minlen-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "icmp-csum-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "icmp-minlen-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "ipv4-csum-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "ipv4-ihl-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "ipv4-len-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "ipv4-opt-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "ipv4-ttlzero-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "ipv4-ver-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "ipv6-exthdr-len-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "ipv6-exthdr-order-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "ipv6-ihl-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "ipv6-plen-zero": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "ipv6-ver-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "tcp-csum-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "tcp-hlen-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "tcp-plen-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "udp-csum-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "udp-hlen-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "udp-len-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "udp-plen-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "udplite-cover-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "udplite-csum-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "unknproto-minlen-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "tcp-fin-only": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv4-optsecurity": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv6-optralert": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "tcp-syn-fin": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv4-proto-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv6-saddr-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "icmp-frag": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv4-optssrr": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv6-opthomeaddr": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "udp-land": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv6-optinvld": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "tcp-fin-noack": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv6-proto-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "tcp-land": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv4-unknopt": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv4-optstream": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv6-optjumbo": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "icmp-land": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "tcp-winnuke": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv6-daddr-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv4-land": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv6-opttunnel": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "tcp-no-flag": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv6-land": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv4-optlsrr": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv4-opttimestamp": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv4-optrr": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv6-optnsap": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv6-unknopt": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "tcp-syn-data": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "ipv6-optendpid": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
- "gtpu-plen-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "vxlan-minlen-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "capwap-minlen-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "gre-csum-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "nvgre-minlen-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "sctp-l4len-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "tcp-hlenvsl4len-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "sctp-crc-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "sctp-clen-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
- "uesp-minlen-err": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"}
+ "esp-minlen-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "icmp-csum-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "icmp-minlen-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "ipv4-csum-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "ipv4-ihl-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "ipv4-len-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "ipv4-opt-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "ipv4-ttlzero-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "ipv4-ver-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "ipv6-exthdr-len-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "ipv6-exthdr-order-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "ipv6-ihl-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "ipv6-plen-zero": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "ipv6-ver-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "tcp-csum-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "tcp-hlen-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "tcp-plen-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "udp-csum-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "udp-hlen-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "udp-len-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "udp-plen-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "udplite-cover-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "udplite-csum-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "unknproto-minlen-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "tcp-fin-only": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv4-optsecurity": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv6-optralert": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "tcp-syn-fin": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv4-proto-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv6-saddr-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "icmp-frag": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv4-optssrr": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv6-opthomeaddr": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "udp-land": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv6-optinvld": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "tcp-fin-noack": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv6-proto-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "tcp-land": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv4-unknopt": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv4-optstream": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv6-optjumbo": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "icmp-land": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "tcp-winnuke": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv6-daddr-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv4-land": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv6-opttunnel": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "tcp-no-flag": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv6-land": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv4-optlsrr": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv4-opttimestamp": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv4-optrr": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv6-optnsap": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv6-unknopt": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "tcp-syn-data": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "ipv6-optendpid": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"},
+ "gtpu-plen-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "vxlan-minlen-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "capwap-minlen-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "gre-csum-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "nvgre-minlen-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "sctp-l4len-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "tcp-hlenvsl4len-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "sctp-crc-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "sctp-clen-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "uesp-minlen-err": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["drop", "trap-to-host"], "type": "str"},
+ "sctp-csum-err": {"v_range": [["7.2.5", "7.2.5"]], "choices": ["allow", "drop", "trap-to-host"], "type": "str"}
}
},
"system_npu_hpe": {
"stated": false,
"options": {
- "all-protocol": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "arp-max": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "enable-shaper": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "esp-max": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "high-priority": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "icmp-max": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "ip-frag-max": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "ip-others-max": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "l2-others-max": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "pri-type-max": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "sctp-max": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "tcp-max": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "tcpfin-rst-max": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "tcpsyn-ack-max": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "tcpsyn-max": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "udp-max": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "enable-queue-shaper": {"v_range": [["7.0.9", "7.0.10"], ["7.2.4", "7.2.4"], ["7.4.2", ""]], "choices": ["disable", "enable"], "type": "str"},
- "exception-code": {"v_range": [["7.0.9", "7.0.10"], ["7.2.4", "7.2.4"], ["7.4.2", ""]], "type": "int"},
- "fragment-with-sess": {"v_range": [["7.0.9", "7.0.10"], ["7.2.4", "7.2.4"], ["7.4.2", ""]], "type": "int"},
- "fragment-without-session": {"v_range": [["7.0.9", "7.0.10"], ["7.2.4", "7.2.4"], ["7.4.2", ""]], "type": "int"},
- "queue-shaper-max": {"v_range": [["7.0.9", "7.0.10"], ["7.2.4", "7.2.4"], ["7.4.2", ""]], "type": "int"}
+ "all-protocol": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "arp-max": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "enable-shaper": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "esp-max": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "high-priority": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "icmp-max": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "ip-frag-max": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "ip-others-max": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "l2-others-max": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "pri-type-max": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "sctp-max": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "tcp-max": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "tcpfin-rst-max": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "tcpsyn-ack-max": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "tcpsyn-max": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "udp-max": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "enable-queue-shaper": {"v_range": [["7.0.9", "7.0.12"], ["7.2.4", "7.2.5"], ["7.4.2", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "exception-code": {"v_range": [["7.0.9", "7.0.12"], ["7.2.4", "7.2.5"], ["7.4.2", ""]], "type": "int"},
+ "fragment-with-sess": {"v_range": [["7.0.9", "7.0.12"], ["7.2.4", "7.2.5"], ["7.4.2", ""]], "type": "int"},
+ "fragment-without-session": {"v_range": [["7.0.9", "7.0.12"], ["7.2.4", "7.2.5"], ["7.4.2", ""]], "type": "int"},
+ "queue-shaper-max": {"v_range": [["7.0.9", "7.0.12"], ["7.2.4", "7.2.5"], ["7.4.2", ""]], "type": "int"}
}
},
"system_npu_ipreassembly": {
"stated": false,
"options": {
- "max-timeout": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "min-timeout": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "status": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"}
+ "max-timeout": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "min-timeout": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "status": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"}
}
},
"system_npu_isfnpqueues": {
"stated": false,
"options": {
- "cos0": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "cos1": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "cos2": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "cos3": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "cos4": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "cos5": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "cos6": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "cos7": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"}
+ "cos0": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "cos1": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "cos2": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "cos3": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "cos4": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "cos5": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "cos6": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "cos7": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"}
}
},
"system_npu_npqueues": {
"stated": false,
"options": {
"ethernet-type": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"type": "list",
"options": {
- "name": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "queue": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "type": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "weight": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"}
+ "name": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "queue": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "type": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "weight": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"}
},
"elements": "dict"
},
"ip-protocol": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"type": "list",
"options": {
- "name": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "protocol": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "queue": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "weight": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"}
+ "name": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "protocol": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "queue": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "weight": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"}
},
"elements": "dict"
},
"ip-service": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"type": "list",
"options": {
- "dport": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "name": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "protocol": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "queue": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "sport": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "weight": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"}
+ "dport": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "name": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "protocol": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "queue": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "sport": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "weight": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"}
},
"elements": "dict"
},
"profile": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"type": "list",
"options": {
"cos0": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"cos1": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"cos2": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"cos3": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"cos4": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"cos5": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"cos6": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"cos7": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp0": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp1": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp10": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp11": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp12": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp13": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp14": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp15": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp16": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp17": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp18": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp19": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp2": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp20": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp21": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp22": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp23": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp24": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp25": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp26": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp27": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp28": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp29": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp3": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp30": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp31": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp32": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp33": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp34": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp35": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp36": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp37": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp38": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp39": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp4": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp40": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp41": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp42": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp43": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp44": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp45": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp46": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp47": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp48": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp49": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp5": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp50": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp51": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp52": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp53": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp54": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp55": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp56": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp57": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp58": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp59": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp6": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp60": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp61": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp62": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp63": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp7": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp8": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp9": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
- "id": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "type": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["cos", "dscp"], "type": "str"},
- "weight": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"}
+ "id": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "type": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["cos", "dscp"], "type": "str"},
+ "weight": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"}
},
"elements": "dict"
},
"scheduler": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"type": "list",
"options": {
- "mode": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["none", "priority", "round-robin"], "type": "str"},
- "name": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"}
+ "mode": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["none", "priority", "round-robin"], "type": "str"},
+ "name": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"}
},
"elements": "dict"
}
@@ -26593,405 +26610,405 @@ SCHEMA_DATA = '''
"system_npu_npqueues_ethernettype": {
"stated": true,
"options": {
- "name": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "required": true, "type": "str"},
- "queue": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "type": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "weight": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"}
+ "name": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "required": true, "type": "str"},
+ "queue": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "type": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "weight": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"}
}
},
"system_npu_npqueues_ipprotocol": {
"stated": true,
"options": {
- "name": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "required": true, "type": "str"},
- "protocol": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "queue": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "weight": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"}
+ "name": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "required": true, "type": "str"},
+ "protocol": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "queue": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "weight": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"}
}
},
"system_npu_npqueues_ipservice": {
"stated": true,
"options": {
- "dport": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "name": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "required": true, "type": "str"},
- "protocol": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "queue": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "sport": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "weight": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"}
+ "dport": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "name": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "required": true, "type": "str"},
+ "protocol": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "queue": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "sport": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "weight": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"}
}
},
"system_npu_npqueues_profile": {
"stated": true,
"options": {
"cos0": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"cos1": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"cos2": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"cos3": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"cos4": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"cos5": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"cos6": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"cos7": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp0": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp1": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp10": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp11": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp12": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp13": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp14": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp15": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp16": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp17": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp18": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp19": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp2": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp20": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp21": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp22": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp23": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp24": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp25": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp26": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp27": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp28": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp29": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp3": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp30": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp31": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp32": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp33": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp34": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp35": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp36": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp37": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp38": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp39": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp4": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp40": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp41": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp42": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp43": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp44": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp45": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp46": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp47": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp48": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp49": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp5": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp50": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp51": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp52": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp53": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp54": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp55": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp56": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp57": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp58": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp59": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp6": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp60": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp61": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp62": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp63": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp7": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp8": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
"dscp9": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["queue0", "queue1", "queue2", "queue3", "queue4", "queue5", "queue6", "queue7"],
"type": "str"
},
- "id": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "required": true, "type": "int"},
- "type": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["cos", "dscp"], "type": "str"},
- "weight": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"}
+ "id": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "required": true, "type": "int"},
+ "type": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["cos", "dscp"], "type": "str"},
+ "weight": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"}
}
},
"system_npu_npqueues_scheduler": {
"stated": true,
"options": {
- "mode": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["none", "priority", "round-robin"], "type": "str"},
- "name": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "required": true, "type": "str"}
+ "mode": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["none", "priority", "round-robin"], "type": "str"},
+ "name": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "required": true, "type": "str"}
}
},
"system_npu_nputcam": {
@@ -27465,32 +27482,32 @@ SCHEMA_DATA = '''
"system_npu_portcpumap": {
"stated": true,
"options": {
- "cpu-core": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "interface": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"}
+ "cpu-core": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "interface": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"}
}
},
"system_npu_portnpumap": {
"stated": true,
"options": {
- "interface": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "npu-group-index": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"}
+ "interface": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "npu-group-index": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"}
}
},
- "system_npu_portpathoption": {"stated": false, "options": {"ports-using-npu": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "raw"}}},
+ "system_npu_portpathoption": {"stated": false, "options": {"ports-using-npu": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "raw"}}},
"system_npu_priorityprotocol": {
"stated": false,
"options": {
- "bfd": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "bgp": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "slbc": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"}
+ "bfd": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "bgp": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "slbc": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"}
}
},
"system_npu_ssehascan": {
"stated": false,
"options": {
- "gap": {"v_range": [["6.4.10", "6.4.13"], ["7.0.4", "7.0.10"], ["7.2.1", ""]], "type": "int"},
- "max-session-cnt": {"v_range": [["6.4.10", "6.4.13"], ["7.0.4", "7.0.10"], ["7.2.1", ""]], "type": "int"},
- "min-duration": {"v_range": [["6.4.10", "6.4.13"], ["7.0.4", "7.0.10"], ["7.2.1", ""]], "type": "int"}
+ "gap": {"v_range": [["6.4.10", "6.4.14"], ["7.0.4", "7.0.12"], ["7.2.1", ""]], "type": "int"},
+ "max-session-cnt": {"v_range": [["6.4.10", "6.4.14"], ["7.0.4", "7.0.12"], ["7.2.1", ""]], "type": "int"},
+ "min-duration": {"v_range": [["6.4.10", "6.4.14"], ["7.0.4", "7.0.12"], ["7.2.1", ""]], "type": "int"}
}
},
"system_npu_swehhash": {
@@ -27517,20 +27534,20 @@ SCHEMA_DATA = '''
"system_npu_tcptimeoutprofile": {
"stated": true,
"options": {
- "close-wait": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "fin-wait": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "id": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "required": true, "type": "int"},
- "syn-sent": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "syn-wait": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "tcp-idle": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
- "time-wait": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"}
+ "close-wait": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "fin-wait": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "id": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "required": true, "type": "int"},
+ "syn-sent": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "syn-wait": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "tcp-idle": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
+ "time-wait": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"}
}
},
"system_npu_udptimeoutprofile": {
"stated": true,
"options": {
- "id": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "required": true, "type": "int"},
- "udp-idle": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"}
+ "id": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "required": true, "type": "int"},
+ "udp-idle": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"}
}
},
"system_ntp": {
@@ -27545,8 +27562,8 @@ SCHEMA_DATA = '''
"key-id": {"no_log": true, "type": "int"},
"ntpv3": {"choices": ["disable", "enable"], "type": "str"},
"server": {"type": "str"},
- "maxpoll": {"v_range": [["6.4.8", "6.4.13"], ["7.0.3", ""]], "type": "int"},
- "minpoll": {"v_range": [["6.4.8", "6.4.13"], ["7.0.3", ""]], "type": "int"}
+ "maxpoll": {"v_range": [["6.4.8", "6.4.14"], ["7.0.3", ""]], "type": "int"},
+ "minpoll": {"v_range": [["6.4.8", "6.4.14"], ["7.0.3", ""]], "type": "int"}
},
"elements": "dict"
},
@@ -27563,11 +27580,11 @@ SCHEMA_DATA = '''
"key-id": {"no_log": true, "type": "int"},
"ntpv3": {"choices": ["disable", "enable"], "type": "str"},
"server": {"type": "str"},
- "maxpoll": {"v_range": [["6.4.8", "6.4.13"], ["7.0.3", ""]], "type": "int"},
- "minpoll": {"v_range": [["6.4.8", "6.4.13"], ["7.0.3", ""]], "type": "int"}
+ "maxpoll": {"v_range": [["6.4.8", "6.4.14"], ["7.0.3", ""]], "type": "int"},
+ "minpoll": {"v_range": [["6.4.8", "6.4.14"], ["7.0.3", ""]], "type": "int"}
}
},
- "system_objecttag": {"stated": true, "options": {"name": {"v_range": [["6.2.0", "6.4.13"]], "required": true, "type": "str"}}},
+ "system_objecttag": {"stated": true, "options": {"name": {"v_range": [["6.2.0", "6.4.14"]], "required": true, "type": "str"}}},
"system_objecttagging": {
"stated": true,
"options": {
@@ -27610,7 +27627,7 @@ SCHEMA_DATA = '''
"format": {"choices": ["none", "text", "html", "wml"], "type": "str"},
"header": {"choices": ["none", "http", "8bit"], "type": "str"},
"msg-type": {"type": "str"},
- "id": {"v_range": [["6.4.11", "6.4.13"], ["7.0.6", "7.0.10"], ["7.2.3", ""]], "type": "int"}
+ "id": {"v_range": [["6.4.11", "6.4.14"], ["7.0.6", "7.0.12"], ["7.2.3", ""]], "type": "int"}
},
"elements": "dict"
},
@@ -27718,7 +27735,7 @@ SCHEMA_DATA = '''
"from-sender": {"choices": ["disable", "enable"], "type": "str"},
"header": {"choices": ["none", "http", "8bit"], "type": "str"},
"image": {"type": "str"},
- "message": {"type": "str"},
+ "fmgr_message": {"type": "str"},
"msg-type": {"type": "str"},
"priority": {"choices": ["low", "normal", "high", "not-included"], "type": "str"},
"rsp-status": {
@@ -27746,7 +27763,7 @@ SCHEMA_DATA = '''
"header": {"choices": ["none", "http", "8bit"], "type": "str"},
"html-part": {"type": "str"},
"image": {"type": "str"},
- "message": {"type": "str"},
+ "fmgr_message": {"type": "str"},
"msg-type": {"type": "str"},
"priority": {"choices": ["low", "normal", "high", "not-included"], "type": "str"},
"subject": {"type": "str"}
@@ -27765,7 +27782,7 @@ SCHEMA_DATA = '''
"from-sender": {"choices": ["disable", "enable"], "type": "str"},
"header": {"choices": ["none", "http", "8bit"], "type": "str"},
"image": {"type": "str"},
- "message": {"type": "str"},
+ "fmgr_message": {"type": "str"},
"msg-type": {"type": "str"},
"priority": {"choices": ["low", "normal", "high", "not-included"], "type": "str"},
"rsp-status": {
@@ -27793,7 +27810,7 @@ SCHEMA_DATA = '''
"from-sender": {"choices": ["disable", "enable"], "type": "str"},
"header": {"choices": ["none", "http", "8bit"], "type": "str"},
"image": {"type": "str"},
- "message": {"type": "str"},
+ "fmgr_message": {"type": "str"},
"msg-type": {"type": "str"},
"priority": {"choices": ["low", "normal", "high", "not-included"], "type": "str"},
"rsp-status": {
@@ -27829,7 +27846,7 @@ SCHEMA_DATA = '''
"format": {"choices": ["none", "text", "html", "wml"], "type": "str"},
"header": {"choices": ["none", "http", "8bit"], "type": "str"},
"msg-type": {"type": "str"},
- "id": {"v_range": [["6.4.11", "6.4.13"], ["7.0.6", "7.0.10"], ["7.2.3", ""]], "type": "int"}
+ "id": {"v_range": [["6.4.11", "6.4.14"], ["7.0.6", "7.0.12"], ["7.2.3", ""]], "type": "int"}
},
"elements": "dict"
},
@@ -27923,7 +27940,7 @@ SCHEMA_DATA = '''
"format": {"choices": ["none", "text", "html", "wml"], "type": "str"},
"header": {"choices": ["none", "http", "8bit"], "type": "str"},
"msg-type": {"required": true, "type": "str"},
- "id": {"v_range": [["6.4.11", "6.4.13"], ["7.0.6", "7.0.10"], ["7.2.3", ""]], "type": "int"}
+ "id": {"v_range": [["6.4.11", "6.4.14"], ["7.0.6", "7.0.12"], ["7.2.3", ""]], "type": "int"}
}
},
"system_replacemsggroup_auth": {
@@ -28027,7 +28044,7 @@ SCHEMA_DATA = '''
"from-sender": {"choices": ["disable", "enable"], "type": "str"},
"header": {"choices": ["none", "http", "8bit"], "type": "str"},
"image": {"type": "str"},
- "message": {"type": "str"},
+ "fmgr_message": {"type": "str"},
"msg-type": {"required": true, "type": "str"},
"priority": {"choices": ["low", "normal", "high", "not-included"], "type": "str"},
"rsp-status": {
@@ -28054,7 +28071,7 @@ SCHEMA_DATA = '''
"header": {"choices": ["none", "http", "8bit"], "type": "str"},
"html-part": {"type": "str"},
"image": {"type": "str"},
- "message": {"type": "str"},
+ "fmgr_message": {"type": "str"},
"msg-type": {"required": true, "type": "str"},
"priority": {"choices": ["low", "normal", "high", "not-included"], "type": "str"},
"subject": {"type": "str"}
@@ -28072,7 +28089,7 @@ SCHEMA_DATA = '''
"from-sender": {"choices": ["disable", "enable"], "type": "str"},
"header": {"choices": ["none", "http", "8bit"], "type": "str"},
"image": {"type": "str"},
- "message": {"type": "str"},
+ "fmgr_message": {"type": "str"},
"msg-type": {"required": true, "type": "str"},
"priority": {"choices": ["low", "normal", "high", "not-included"], "type": "str"},
"rsp-status": {
@@ -28099,7 +28116,7 @@ SCHEMA_DATA = '''
"from-sender": {"choices": ["disable", "enable"], "type": "str"},
"header": {"choices": ["none", "http", "8bit"], "type": "str"},
"image": {"type": "str"},
- "message": {"type": "str"},
+ "fmgr_message": {"type": "str"},
"msg-type": {"required": true, "type": "str"},
"priority": {"choices": ["low", "normal", "high", "not-included"], "type": "str"},
"rsp-status": {
@@ -28133,7 +28150,7 @@ SCHEMA_DATA = '''
"format": {"choices": ["none", "text", "html", "wml"], "type": "str"},
"header": {"choices": ["none", "http", "8bit"], "type": "str"},
"msg-type": {"required": true, "type": "str"},
- "id": {"v_range": [["6.4.11", "6.4.13"], ["7.0.6", "7.0.10"], ["7.2.3", ""]], "type": "int"}
+ "id": {"v_range": [["6.4.11", "6.4.14"], ["7.0.6", "7.0.12"], ["7.2.3", ""]], "type": "int"}
}
},
"system_replacemsggroup_nntp": {
@@ -28204,7 +28221,7 @@ SCHEMA_DATA = '''
"aggressive-schedule": {"choices": ["disable", "enable"], "type": "str"},
"order": {"choices": ["oldest-first"], "type": "str"},
"status": {"choices": ["disable", "enable"], "type": "str"},
- "sche-rpt-only": {"v_range": [["7.0.8", "7.0.10"], ["7.2.3", ""]], "choices": ["disable", "enable"], "type": "str"}
+ "sche-rpt-only": {"v_range": [["7.0.8", "7.0.12"], ["7.2.3", ""]], "choices": ["disable", "enable"], "type": "str"}
}
},
"system_report_estbrowsetime": {
@@ -28406,7 +28423,7 @@ SCHEMA_DATA = '''
"oci-region-type": {"v_range": [["6.2.1", ""]], "choices": ["commercial", "government"], "type": "str"},
"secret-token": {"v_range": [["6.2.0", ""]], "no_log": true, "type": "str"},
"updating": {"v_range": [["6.2.1", "7.2.0"]], "type": "int"},
- "server-ip": {"v_range": [["6.2.0", "6.4.13"]], "type": "str"},
+ "server-ip": {"v_range": [["6.2.0", "6.4.14"]], "type": "str"},
"group-name": {"v_range": [["6.2.2", ""]], "type": "str"},
"api-key": {"v_range": [["6.4.1", ""]], "no_log": true, "type": "raw"},
"compute-generation": {"v_range": [["6.4.1", ""]], "type": "int"},
@@ -28435,7 +28452,7 @@ SCHEMA_DATA = '''
"options": {
"region-list": {"v_range": [["7.0.3", ""]], "type": "raw"},
"role-arn": {"v_range": [["7.0.3", ""]], "type": "str"},
- "external-id": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "str"}
+ "external-id": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "str"}
},
"elements": "dict"
},
@@ -28446,15 +28463,15 @@ SCHEMA_DATA = '''
"elements": "dict"
},
"gcp-project-list": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.2", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.2", ""]],
"type": "list",
"options": {
- "gcp-zone-list": {"v_range": [["6.4.7", "6.4.13"], ["7.0.2", ""]], "type": "raw"},
- "id": {"v_range": [["6.4.7", "6.4.13"], ["7.0.2", ""]], "type": "str"}
+ "gcp-zone-list": {"v_range": [["6.4.7", "6.4.14"], ["7.0.2", ""]], "type": "raw"},
+ "id": {"v_range": [["6.4.7", "6.4.14"], ["7.0.2", ""]], "type": "str"}
},
"elements": "dict"
},
- "verify-certificate": {"v_range": [["6.4.8", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "verify-certificate": {"v_range": [["6.4.8", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"alt-resource-ip": {"v_range": [["7.2.2", ""]], "choices": ["disable", "enable"], "type": "str"},
"server-ca-cert": {"v_range": [["7.2.2", ""]], "type": "str"},
"server-cert": {"v_range": [["7.2.2", ""]], "type": "str"},
@@ -28479,7 +28496,7 @@ SCHEMA_DATA = '''
"options": {
"region-list": {"v_range": [["7.0.3", ""]], "type": "raw"},
"role-arn": {"v_range": [["7.0.3", ""]], "type": "str"},
- "external-id": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "str"}
+ "external-id": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "str"}
}
},
"system_sdnconnector_externalip": {"stated": true, "options": {"name": {"required": true, "type": "str"}}},
@@ -28490,8 +28507,8 @@ SCHEMA_DATA = '''
"system_sdnconnector_gcpprojectlist": {
"stated": true,
"options": {
- "gcp-zone-list": {"v_range": [["6.4.7", "6.4.13"], ["7.0.2", ""]], "type": "raw"},
- "id": {"v_range": [["6.4.7", "6.4.13"], ["7.0.2", ""]], "required": true, "type": "str"}
+ "gcp-zone-list": {"v_range": [["6.4.7", "6.4.14"], ["7.0.2", ""]], "type": "raw"},
+ "id": {"v_range": [["6.4.7", "6.4.14"], ["7.0.2", ""]], "required": true, "type": "str"}
}
},
"system_sdnconnector_nic": {
@@ -28626,7 +28643,7 @@ SCHEMA_DATA = '''
"options": {
"name": {"v_range": [["7.0.0", ""]], "type": "str"},
"port": {"v_range": [["7.0.0", ""]], "type": "int"},
- "psk": {"v_range": [["7.0.0", "7.2.4"]], "type": "raw"},
+ "psk": {"v_range": [["7.0.0", "7.2.5"]], "type": "raw"},
"role": {"v_range": [["7.0.0", ""]], "choices": ["member", "supervisor"], "type": "str"},
"secure-connection": {"v_range": [["7.0.0", ""]], "choices": ["disable", "enable"], "type": "str"},
"status": {"v_range": [["7.0.0", ""]], "choices": ["disable", "enable"], "type": "str"},
@@ -28771,9 +28788,9 @@ SCHEMA_DATA = '''
"system_sslciphersuites": {
"stated": true,
"options": {
- "cipher": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "type": "str"},
- "priority": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "type": "int"},
- "version": {"v_range": [["6.4.8", "6.4.13"], ["7.0.2", ""]], "choices": ["tls1.2-or-below", "tls1.3"], "type": "str"}
+ "cipher": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "type": "str"},
+ "priority": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "type": "int"},
+ "version": {"v_range": [["6.4.8", "6.4.14"], ["7.0.2", ""]], "choices": ["tls1.2-or-below", "tls1.3"], "type": "str"}
}
},
"system_syslog": {
@@ -28782,10 +28799,10 @@ SCHEMA_DATA = '''
"ip": {"type": "str"},
"name": {"required": true, "type": "str"},
"port": {"type": "int"},
- "local-cert": {"v_range": [["6.4.8", "6.4.13"], ["7.0.4", ""]], "type": "str"},
- "peer-cert-cn": {"v_range": [["6.4.8", "6.4.13"], ["7.0.4", ""]], "type": "str"},
- "reliable": {"v_range": [["6.4.8", "6.4.13"], ["7.0.4", ""]], "choices": ["disable", "enable"], "type": "str"},
- "secure-connection": {"v_range": [["6.4.8", "6.4.13"], ["7.0.4", ""]], "choices": ["disable", "enable"], "type": "str"}
+ "local-cert": {"v_range": [["6.4.8", "6.4.14"], ["7.0.4", ""]], "type": "str"},
+ "peer-cert-cn": {"v_range": [["6.4.8", "6.4.14"], ["7.0.4", ""]], "type": "str"},
+ "reliable": {"v_range": [["6.4.8", "6.4.14"], ["7.0.4", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "secure-connection": {"v_range": [["6.4.8", "6.4.14"], ["7.0.4", ""]], "choices": ["disable", "enable"], "type": "str"}
}
},
"system_virtualwirepair": {
@@ -28803,12 +28820,12 @@ SCHEMA_DATA = '''
"system_webproxy": {
"stated": false,
"options": {
- "address": {"v_range": [["6.4.8", "6.4.13"], ["7.0.3", ""]], "type": "str"},
- "mode": {"v_range": [["6.4.8", "6.4.13"], ["7.0.3", ""]], "choices": ["proxy", "tunnel"], "type": "str"},
- "password": {"v_range": [["6.4.8", "6.4.13"], ["7.0.3", ""]], "no_log": true, "type": "raw"},
- "port": {"v_range": [["6.4.8", "6.4.13"], ["7.0.3", ""]], "type": "int"},
- "status": {"v_range": [["6.4.8", "6.4.13"], ["7.0.3", ""]], "choices": ["disable", "enable"], "type": "str"},
- "username": {"v_range": [["6.4.8", "6.4.13"], ["7.0.3", ""]], "type": "str"}
+ "address": {"v_range": [["6.4.8", "6.4.14"], ["7.0.3", ""]], "type": "str"},
+ "mode": {"v_range": [["6.4.8", "6.4.14"], ["7.0.3", ""]], "choices": ["proxy", "tunnel"], "type": "str"},
+ "password": {"v_range": [["6.4.8", "6.4.14"], ["7.0.3", ""]], "no_log": true, "type": "raw"},
+ "port": {"v_range": [["6.4.8", "6.4.14"], ["7.0.3", ""]], "type": "int"},
+ "status": {"v_range": [["6.4.8", "6.4.14"], ["7.0.3", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "username": {"v_range": [["6.4.8", "6.4.14"], ["7.0.3", ""]], "type": "str"}
}
},
"system_workflow_approvalmatrix": {
@@ -28904,12 +28921,12 @@ SCHEMA_DATA = '''
"user_certificate": {
"stated": true,
"options": {
- "common-name": {"v_range": [["7.0.8", "7.0.10"], ["7.2.3", ""]], "type": "str"},
- "id": {"v_range": [["7.0.8", "7.0.10"], ["7.2.3", ""]], "required": true, "type": "int"},
- "issuer": {"v_range": [["7.0.8", "7.0.10"], ["7.2.3", ""]], "type": "str"},
- "name": {"v_range": [["7.0.8", "7.0.10"], ["7.2.3", ""]], "type": "str"},
- "status": {"v_range": [["7.0.8", "7.0.10"], ["7.2.3", ""]], "choices": ["disable", "enable"], "type": "str"},
- "type": {"v_range": [["7.0.8", "7.0.10"], ["7.2.3", ""]], "choices": ["single-certificate", "trusted-issuer"], "type": "str"}
+ "common-name": {"v_range": [["7.0.8", "7.0.12"], ["7.2.3", ""]], "type": "str"},
+ "id": {"v_range": [["7.0.8", "7.0.12"], ["7.2.3", ""]], "required": true, "type": "int"},
+ "issuer": {"v_range": [["7.0.8", "7.0.12"], ["7.2.3", ""]], "type": "str"},
+ "name": {"v_range": [["7.0.8", "7.0.12"], ["7.2.3", ""]], "type": "str"},
+ "status": {"v_range": [["7.0.8", "7.0.12"], ["7.2.3", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "type": {"v_range": [["7.0.8", "7.0.12"], ["7.2.3", ""]], "choices": ["single-certificate", "trusted-issuer"], "type": "str"}
}
},
"user_clearpass": {
@@ -28983,7 +29000,7 @@ SCHEMA_DATA = '''
"type": "str"
},
"user": {"type": "str"},
- "tags": {"v_range": [["6.2.0", "6.4.13"]], "type": "str"}
+ "tags": {"v_range": [["6.2.0", "6.4.14"]], "type": "str"}
}
},
"user_device_dynamicmapping": {
@@ -29244,7 +29261,7 @@ SCHEMA_DATA = '''
"group-poll-interval": {"v_range": [["6.2.2", ""]], "type": "int"},
"interface": {"v_range": [["6.2.6", "6.2.12"], ["6.4.2", ""]], "type": "str"},
"interface-select-method": {"v_range": [["6.2.6", "6.2.12"], ["6.4.2", ""]], "choices": ["auto", "sdwan", "specify"], "type": "str"},
- "logon-timeout": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
+ "logon-timeout": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
"sni": {"v_range": [["7.2.0", ""]], "type": "str"},
"ssl-server-host-ip-check": {"v_range": [["7.0.2", ""]], "choices": ["disable", "enable"], "type": "str"}
},
@@ -29279,7 +29296,7 @@ SCHEMA_DATA = '''
"group-poll-interval": {"v_range": [["6.2.2", ""]], "type": "int"},
"interface": {"v_range": [["6.2.6", "6.2.12"], ["6.4.2", ""]], "type": "str"},
"interface-select-method": {"v_range": [["6.2.6", "6.2.12"], ["6.4.2", ""]], "choices": ["auto", "sdwan", "specify"], "type": "str"},
- "logon-timeout": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
+ "logon-timeout": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
"sni": {"v_range": [["7.2.0", ""]], "type": "str"},
"ssl-server-host-ip-check": {"v_range": [["7.0.2", ""]], "choices": ["disable", "enable"], "type": "str"}
}
@@ -29317,7 +29334,7 @@ SCHEMA_DATA = '''
"group-poll-interval": {"v_range": [["6.2.2", ""]], "type": "int"},
"interface": {"v_range": [["6.2.6", "6.2.12"], ["6.4.2", ""]], "type": "str"},
"interface-select-method": {"v_range": [["6.2.6", "6.2.12"], ["6.4.2", ""]], "choices": ["auto", "sdwan", "specify"], "type": "str"},
- "logon-timeout": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "int"},
+ "logon-timeout": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "int"},
"sni": {"v_range": [["7.2.0", ""]], "type": "str"},
"ssl-server-host-ip-check": {"v_range": [["7.0.2", ""]], "choices": ["disable", "enable"], "type": "str"}
}
@@ -29662,7 +29679,7 @@ SCHEMA_DATA = '''
"name": {"v_range": [["6.2.1", ""]], "required": true, "type": "str"},
"pac-data": {"v_range": [["6.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"principal": {"v_range": [["6.2.1", ""]], "type": "str"},
- "password": {"v_range": [["6.2.2", "7.2.0"], ["7.4.2", ""]], "no_log": true, "type": "raw"}
+ "password": {"v_range": [["6.2.2", "7.2.0"], ["7.2.5", "7.2.5"], ["7.4.2", ""]], "no_log": true, "type": "raw"}
}
},
"user_ldap": {
@@ -29718,10 +29735,10 @@ SCHEMA_DATA = '''
"source-port": {"v_range": [["7.0.0", ""]], "type": "int"},
"client-cert": {"v_range": [["7.2.0", ""]], "type": "str"},
"client-cert-auth": {"v_range": [["7.2.0", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "max-connections": {"v_range": [["7.0.11", "7.0.12"], ["7.2.5", "7.2.5"], ["7.4.1", ""]], "type": "int"},
"two-factor-filter": {"v_range": [["7.2.1", ""]], "type": "str"},
"account-key-upn-san": {"v_range": [["7.2.2", ""]], "choices": ["othername", "rfc822name", "dnsname"], "type": "str"},
- "account-key-cert-field": {"v_range": [["7.4.1", ""]], "choices": ["othername", "rfc822name", "dnsname"], "type": "str"},
- "max-connections": {"v_range": [["7.4.1", ""]], "type": "int"}
+ "account-key-cert-field": {"v_range": [["7.4.1", ""]], "choices": ["othername", "rfc822name", "dnsname"], "type": "str"}
},
"elements": "dict"
},
@@ -29747,7 +29764,7 @@ SCHEMA_DATA = '''
"obtain-user-info": {"v_range": [["6.2.0", ""]], "choices": ["disable", "enable"], "type": "str"},
"search-type": {"v_range": [["6.2.0", ""]], "type": "list", "choices": ["nested", "recursive"], "elements": "str"},
"user-info-exchange-server": {"v_range": [["6.2.0", ""]], "type": "str"},
- "account-key-name": {"v_range": [["6.2.0", "6.4.13"]], "no_log": true, "type": "str"},
+ "account-key-name": {"v_range": [["6.2.0", "6.4.14"]], "no_log": true, "type": "str"},
"group-object-search-base": {"v_range": [["6.2.0", "6.2.12"]], "type": "str"},
"two-factor": {"v_range": [["6.2.2", ""]], "choices": ["disable", "fortitoken-cloud"], "type": "str"},
"interface": {"v_range": [["6.2.5", "6.2.12"], ["6.4.1", ""]], "type": "str"},
@@ -29809,10 +29826,10 @@ SCHEMA_DATA = '''
"source-port": {"v_range": [["7.0.0", ""]], "type": "int"},
"client-cert": {"v_range": [["7.2.0", ""]], "type": "str"},
"client-cert-auth": {"v_range": [["7.2.0", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "max-connections": {"v_range": [["7.0.11", "7.0.12"], ["7.2.5", "7.2.5"], ["7.4.1", ""]], "type": "int"},
"two-factor-filter": {"v_range": [["7.2.1", ""]], "type": "str"},
"account-key-upn-san": {"v_range": [["7.2.2", ""]], "choices": ["othername", "rfc822name", "dnsname"], "type": "str"},
- "account-key-cert-field": {"v_range": [["7.4.1", ""]], "choices": ["othername", "rfc822name", "dnsname"], "type": "str"},
- "max-connections": {"v_range": [["7.4.1", ""]], "type": "int"}
+ "account-key-cert-field": {"v_range": [["7.4.1", ""]], "choices": ["othername", "rfc822name", "dnsname"], "type": "str"}
}
},
"user_local": {
@@ -29844,7 +29861,7 @@ SCHEMA_DATA = '''
"username-case-sensitivity": {"v_range": [["6.2.5", "6.2.12"], ["6.4.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"username-case-insensitivity": {"v_range": [["6.4.0", ""]], "choices": ["disable", "enable"], "type": "str"},
"username-sensitivity": {
- "v_range": [["6.2.9", "6.2.12"], ["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.2.9", "6.2.12"], ["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": ["disable", "enable"],
"type": "str"
},
@@ -29878,7 +29895,7 @@ SCHEMA_DATA = '''
"elements": "dict"
},
"service-manager-id": {"v_range": [["7.0.4", ""]], "type": "str"},
- "service-manager-rev": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "type": "int"}
+ "service-manager-rev": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "type": "int"}
}
},
"user_nsx_service": {
@@ -30577,25 +30594,25 @@ SCHEMA_DATA = '''
},
"clock-tolerance": {"v_range": [["7.0.3", ""]], "type": "int"},
"dynamic_mapping": {
- "v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]],
+ "v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]],
"type": "list",
"options": {
"_scope": {
- "v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]],
+ "v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]],
"type": "list",
"options": {
- "name": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "str"},
- "vdom": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "str"}
+ "name": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "str"},
+ "vdom": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "str"}
},
"elements": "dict"
},
- "adfs-claim": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "cert": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "str"},
- "clock-tolerance": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "int"},
- "digest-method": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "choices": ["sha1", "sha256"], "type": "str"},
- "entity-id": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "str"},
+ "adfs-claim": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "cert": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "str"},
+ "clock-tolerance": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "int"},
+ "digest-method": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "choices": ["sha1", "sha256"], "type": "str"},
+ "entity-id": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "str"},
"group-claim-type": {
- "v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]],
+ "v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]],
"choices": [
"email", "given-name", "name", "upn", "common-name", "email-adfs-1x", "group", "upn-adfs-1x", "role", "sur-name", "ppid",
"name-identifier", "authentication-method", "deny-only-group-sid", "deny-only-primary-sid", "deny-only-primary-group-sid",
@@ -30603,16 +30620,16 @@ SCHEMA_DATA = '''
],
"type": "str"
},
- "group-name": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "str"},
- "idp-cert": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "str"},
- "idp-entity-id": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "str"},
- "idp-single-logout-url": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "str"},
- "idp-single-sign-on-url": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "str"},
- "limit-relaystate": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "single-logout-url": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "str"},
- "single-sign-on-url": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "str"},
+ "group-name": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "str"},
+ "idp-cert": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "str"},
+ "idp-entity-id": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "str"},
+ "idp-single-logout-url": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "str"},
+ "idp-single-sign-on-url": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "str"},
+ "limit-relaystate": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "single-logout-url": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "str"},
+ "single-sign-on-url": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "str"},
"user-claim-type": {
- "v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]],
+ "v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]],
"choices": [
"email", "given-name", "name", "upn", "common-name", "email-adfs-1x", "group", "upn-adfs-1x", "role", "sur-name", "ppid",
"name-identifier", "authentication-method", "deny-only-group-sid", "deny-only-primary-sid", "deny-only-primary-group-sid",
@@ -30620,7 +30637,7 @@ SCHEMA_DATA = '''
],
"type": "str"
},
- "user-name": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "str"},
+ "user-name": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "str"},
"auth-url": {"v_range": [["7.2.1", ""]], "type": "str"},
"reauth": {"v_range": [["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"}
},
@@ -30634,21 +30651,21 @@ SCHEMA_DATA = '''
"stated": true,
"options": {
"_scope": {
- "v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]],
+ "v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]],
"type": "list",
"options": {
- "name": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "str"},
- "vdom": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "str"}
+ "name": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "str"},
+ "vdom": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "str"}
},
"elements": "dict"
},
- "adfs-claim": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "cert": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "str"},
- "clock-tolerance": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "int"},
- "digest-method": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "choices": ["sha1", "sha256"], "type": "str"},
- "entity-id": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "str"},
+ "adfs-claim": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "cert": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "str"},
+ "clock-tolerance": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "int"},
+ "digest-method": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "choices": ["sha1", "sha256"], "type": "str"},
+ "entity-id": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "str"},
"group-claim-type": {
- "v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]],
+ "v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]],
"choices": [
"email", "given-name", "name", "upn", "common-name", "email-adfs-1x", "group", "upn-adfs-1x", "role", "sur-name", "ppid",
"name-identifier", "authentication-method", "deny-only-group-sid", "deny-only-primary-sid", "deny-only-primary-group-sid",
@@ -30656,16 +30673,16 @@ SCHEMA_DATA = '''
],
"type": "str"
},
- "group-name": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "str"},
- "idp-cert": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "str"},
- "idp-entity-id": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "str"},
- "idp-single-logout-url": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "str"},
- "idp-single-sign-on-url": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "str"},
- "limit-relaystate": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "single-logout-url": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "str"},
- "single-sign-on-url": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "str"},
+ "group-name": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "str"},
+ "idp-cert": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "str"},
+ "idp-entity-id": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "str"},
+ "idp-single-logout-url": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "str"},
+ "idp-single-sign-on-url": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "str"},
+ "limit-relaystate": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "single-logout-url": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "str"},
+ "single-sign-on-url": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "str"},
"user-claim-type": {
- "v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]],
+ "v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]],
"choices": [
"email", "given-name", "name", "upn", "common-name", "email-adfs-1x", "group", "upn-adfs-1x", "role", "sur-name", "ppid",
"name-identifier", "authentication-method", "deny-only-group-sid", "deny-only-primary-sid", "deny-only-primary-group-sid",
@@ -30673,7 +30690,7 @@ SCHEMA_DATA = '''
],
"type": "str"
},
- "user-name": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "str"},
+ "user-name": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "str"},
"auth-url": {"v_range": [["7.2.1", ""]], "type": "str"},
"reauth": {"v_range": [["7.4.1", ""]], "choices": ["disable", "enable"], "type": "str"}
}
@@ -31136,10 +31153,10 @@ SCHEMA_DATA = '''
"utm-log": {"v_range": [["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"utm-status": {"v_range": [["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"webfilter-profile": {"v_range": [["7.0.1", ""]], "type": "str"},
- "sae-h2e-only": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "sae-pk": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "sae-private-key": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "no_log": true, "type": "str"},
- "sticky-client-threshold-6g": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "str"},
+ "sae-h2e-only": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "sae-pk": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "sae-private-key": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "no_log": true, "type": "str"},
+ "sticky-client-threshold-6g": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "str"},
"application-dscp-marking": {"v_range": [["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"l3-roaming-mode": {"v_range": [["7.2.1", ""]], "choices": ["direct", "indirect"], "type": "str"},
"rates-11ac-mcs-map": {"v_range": [["7.2.1", ""]], "type": "str"},
@@ -31421,10 +31438,10 @@ SCHEMA_DATA = '''
"elements": "dict"
},
"webfilter-profile": {"v_range": [["7.0.1", ""]], "type": "str"},
- "sae-h2e-only": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "sae-pk": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "sae-private-key": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "no_log": true, "type": "str"},
- "sticky-client-threshold-6g": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "str"},
+ "sae-h2e-only": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "sae-pk": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "sae-private-key": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "no_log": true, "type": "str"},
+ "sticky-client-threshold-6g": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "str"},
"application-dscp-marking": {"v_range": [["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"l3-roaming-mode": {"v_range": [["7.2.1", ""]], "choices": ["direct", "indirect"], "type": "str"},
"rates-11ac-mcs-map": {"v_range": [["7.2.1", ""]], "type": "str"},
@@ -31721,10 +31738,10 @@ SCHEMA_DATA = '''
"utm-log": {"v_range": [["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"utm-status": {"v_range": [["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"webfilter-profile": {"v_range": [["7.0.1", ""]], "type": "str"},
- "sae-h2e-only": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "sae-pk": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "sae-private-key": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "no_log": true, "type": "str"},
- "sticky-client-threshold-6g": {"v_range": [["7.0.5", "7.0.10"], ["7.2.1", ""]], "type": "str"},
+ "sae-h2e-only": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "sae-pk": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "sae-private-key": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "no_log": true, "type": "str"},
+ "sticky-client-threshold-6g": {"v_range": [["7.0.5", "7.0.12"], ["7.2.1", ""]], "type": "str"},
"application-dscp-marking": {"v_range": [["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"l3-roaming-mode": {"v_range": [["7.2.1", ""]], "choices": ["direct", "indirect"], "type": "str"},
"rates-11ac-mcs-map": {"v_range": [["7.2.1", ""]], "type": "str"},
@@ -31903,7 +31920,7 @@ SCHEMA_DATA = '''
"name": {"v_range": [["7.0.0", ""]], "type": "str"},
"default-action": {"v_range": [["7.0.1", ""]], "choices": ["monitor", "block", "allow"], "type": "str"},
"log": {"v_range": [["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "override-category": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"}
+ "override-category": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"}
}
},
"videofilter_youtubechannelfilter_entries": {
@@ -32455,8 +32472,8 @@ SCHEMA_DATA = '''
"wins-server1": {"v_range": [["6.2.6", "6.2.12"], ["6.4.2", ""]], "type": "str"},
"wins-server2": {"v_range": [["6.2.6", "6.2.12"], ["6.4.2", ""]], "type": "str"},
"x-content-type-options": {"v_range": [["6.2.6", "6.2.12"], ["6.4.2", ""]], "choices": ["disable", "enable"], "type": "str"},
- "sslv3": {"v_range": [["6.2.6", "6.2.12"], ["6.4.2", "6.4.13"]], "choices": ["disable", "enable"], "type": "str"},
- "ssl-big-buffer": {"v_range": [["6.2.6", "6.2.12"], ["6.4.2", "6.4.13"]], "choices": ["disable", "enable"], "type": "str"},
+ "sslv3": {"v_range": [["6.2.6", "6.2.12"], ["6.4.2", "6.4.14"]], "choices": ["disable", "enable"], "type": "str"},
+ "ssl-big-buffer": {"v_range": [["6.2.6", "6.2.12"], ["6.4.2", "6.4.14"]], "choices": ["disable", "enable"], "type": "str"},
"client-sigalgs": {"v_range": [["6.4.4", ""]], "choices": ["no-rsa-pss", "all"], "type": "str"},
"ciphersuite": {
"v_range": [["6.4.8", ""]],
@@ -32471,7 +32488,7 @@ SCHEMA_DATA = '''
"tunnel-addr-assigned-method": {"v_range": [["7.0.0", ""]], "choices": ["first-available", "round-robin"], "type": "str"},
"browser-language-detection": {"v_range": [["7.2.0", ""]], "choices": ["disable", "enable"], "type": "str"},
"saml-redirect-port": {"v_range": [["7.0.1", ""]], "type": "int"},
- "status": {"v_range": [["6.4.8", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "status": {"v_range": [["6.4.8", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"web-mode-snat": {"v_range": [["7.0.4", "7.2.3"], ["7.4.0", "7.4.1"]], "choices": ["disable", "enable"], "type": "str"},
"ztna-trusted-client": {"v_range": [["7.2.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"dtls-heartbeat-fail-count": {"v_range": [["7.4.0", ""]], "type": "int"},
@@ -32569,23 +32586,23 @@ SCHEMA_DATA = '''
"hub-public-ip": {"v_range": [["6.2.2", ""]], "type": "str"},
"ipv4-split-exclude": {"v_range": [["6.4.6", ""]], "type": "str"},
"scope member": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"type": "list",
"options": {
- "name": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"},
- "vdom": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "type": "str"}
+ "name": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"},
+ "vdom": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "type": "str"}
},
"elements": "dict"
},
- "dhcp-ra-giaddr": {"v_range": [["6.4.8", "6.4.13"], ["7.0.4", ""]], "type": "str"},
+ "dhcp-ra-giaddr": {"v_range": [["6.4.8", "6.4.14"], ["7.0.4", ""]], "type": "str"},
"encapsulation": {"v_range": [["7.0.2", ""]], "choices": ["tunnel-mode", "transport-mode"], "type": "str"},
- "ipv4-name": {"v_range": [["6.4.8", "6.4.13"], ["7.0.4", ""]], "type": "str"},
+ "ipv4-name": {"v_range": [["6.4.8", "6.4.14"], ["7.0.4", ""]], "type": "str"},
"l2tp": {"v_range": [["7.0.2", ""]], "choices": ["disable", "enable"], "type": "str"},
- "auto-discovery-receiver": {"v_range": [["7.0.8", "7.0.10"], ["7.2.3", ""]], "choices": ["disable", "enable"], "type": "str"},
- "auto-discovery-sender": {"v_range": [["7.0.8", "7.0.10"], ["7.2.3", ""]], "choices": ["disable", "enable"], "type": "str"},
- "network-id": {"v_range": [["7.0.8", "7.0.10"], ["7.2.3", ""]], "type": "int"},
- "network-overlay": {"v_range": [["7.0.8", "7.0.10"], ["7.2.3", ""]], "choices": ["enable", "disable"], "type": "str"},
- "protocol": {"v_range": [["7.4.1", ""]], "type": "int"}
+ "auto-discovery-receiver": {"v_range": [["7.0.8", "7.0.12"], ["7.2.3", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "auto-discovery-sender": {"v_range": [["7.0.8", "7.0.12"], ["7.2.3", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "network-id": {"v_range": [["7.0.8", "7.0.12"], ["7.2.3", ""]], "type": "int"},
+ "network-overlay": {"v_range": [["7.0.8", "7.0.12"], ["7.2.3", ""]], "choices": ["enable", "disable"], "type": "str"},
+ "protocol": {"v_range": [["7.2.5", "7.2.5"], ["7.4.1", ""]], "type": "int"}
}
},
"vpnmgr_node_iprange": {"stated": true, "options": {"end-ip": {"type": "str"}, "id": {"required": true, "type": "int"}, "start-ip": {"type": "str"}}},
@@ -32758,10 +32775,10 @@ SCHEMA_DATA = '''
"sso-username": {"type": "str"},
"url": {"type": "str"},
"domain": {"v_range": [["6.4.2", ""]], "type": "str"},
- "color-depth": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["8", "16", "32"], "type": "str"},
+ "color-depth": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["8", "16", "32"], "type": "str"},
"height": {"v_range": [["7.0.3", ""]], "type": "int"},
"keyboard-layout": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": [
"ar", "da", "de", "de-ch", "en-gb", "en-uk", "en-us", "es", "fi", "fr", "fr-be", "fr-ca", "fr-ch", "hr", "hu", "it",
"ja", "lt", "lv", "mk", "no", "pl", "pt", "pt-br", "ru", "sl", "sv", "tk", "tr", "fr-ca-m", "wg", "ar-101", "ar-102",
@@ -32772,8 +32789,8 @@ SCHEMA_DATA = '''
],
"type": "str"
},
- "restricted-admin": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "send-preconnection-id": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "restricted-admin": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "send-preconnection-id": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"width": {"v_range": [["7.0.3", ""]], "type": "int"},
"vnc-keyboard-layout": {
"v_range": [["7.2.2", ""]],
@@ -32892,10 +32909,10 @@ SCHEMA_DATA = '''
"use-sdwan": {"v_range": [["6.2.7", "6.2.12"], ["6.4.3", ""]], "choices": ["disable", "enable"], "type": "str"},
"prefer-ipv6-dns": {"v_range": [["7.0.0", ""]], "choices": ["disable", "enable"], "type": "str"},
"rewrite-ip-uri-ui": {"v_range": [["7.0.0", ""]], "choices": ["disable", "enable"], "type": "str"},
- "clipboard": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "clipboard": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"default-window-height": {"v_range": [["7.0.4", ""]], "type": "int"},
"default-window-width": {"v_range": [["7.0.4", ""]], "type": "int"},
- "dhcp-ip-overlap": {"v_range": [["7.0.4", "7.0.10"], ["7.2.1", ""]], "choices": ["use-old", "use-new"], "type": "str"},
+ "dhcp-ip-overlap": {"v_range": [["7.0.4", "7.0.12"], ["7.2.1", ""]], "choices": ["use-old", "use-new"], "type": "str"},
"client-src-range": {"v_range": [["7.2.2", ""]], "choices": ["disable", "enable"], "type": "str"},
"dhcp-ra-giaddr": {"v_range": [["7.2.2", ""]], "type": "str"},
"dhcp6-ra-linkaddr": {"v_range": [["7.2.2", ""]], "type": "str"},
@@ -32961,10 +32978,10 @@ SCHEMA_DATA = '''
"sso-username": {"type": "str"},
"url": {"type": "str"},
"domain": {"v_range": [["6.4.2", ""]], "type": "str"},
- "color-depth": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["8", "16", "32"], "type": "str"},
+ "color-depth": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["8", "16", "32"], "type": "str"},
"height": {"v_range": [["7.0.3", ""]], "type": "int"},
"keyboard-layout": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": [
"ar", "da", "de", "de-ch", "en-gb", "en-uk", "en-us", "es", "fi", "fr", "fr-be", "fr-ca", "fr-ch", "hr", "hu", "it", "ja",
"lt", "lv", "mk", "no", "pl", "pt", "pt-br", "ru", "sl", "sv", "tk", "tr", "fr-ca-m", "wg", "ar-101", "ar-102",
@@ -32975,8 +32992,8 @@ SCHEMA_DATA = '''
],
"type": "str"
},
- "restricted-admin": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "send-preconnection-id": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "restricted-admin": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "send-preconnection-id": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"width": {"v_range": [["7.0.3", ""]], "type": "int"},
"vnc-keyboard-layout": {
"v_range": [["7.2.2", ""]],
@@ -33026,10 +33043,10 @@ SCHEMA_DATA = '''
"sso-username": {"type": "str"},
"url": {"type": "str"},
"domain": {"v_range": [["6.4.2", ""]], "type": "str"},
- "color-depth": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["8", "16", "32"], "type": "str"},
+ "color-depth": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["8", "16", "32"], "type": "str"},
"height": {"v_range": [["7.0.3", ""]], "type": "int"},
"keyboard-layout": {
- "v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]],
+ "v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]],
"choices": [
"ar", "da", "de", "de-ch", "en-gb", "en-uk", "en-us", "es", "fi", "fr", "fr-be", "fr-ca", "fr-ch", "hr", "hu", "it", "ja", "lt",
"lv", "mk", "no", "pl", "pt", "pt-br", "ru", "sl", "sv", "tk", "tr", "fr-ca-m", "wg", "ar-101", "ar-102", "ar-102-azerty", "can-mul",
@@ -33039,8 +33056,8 @@ SCHEMA_DATA = '''
],
"type": "str"
},
- "restricted-admin": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
- "send-preconnection-id": {"v_range": [["6.4.7", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "restricted-admin": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "send-preconnection-id": {"v_range": [["6.4.7", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"width": {"v_range": [["7.0.3", ""]], "type": "int"},
"vnc-keyboard-layout": {
"v_range": [["7.2.2", ""]],
@@ -34068,7 +34085,7 @@ SCHEMA_DATA = '''
"v_range": [["6.4.1", ""]],
"type": "list",
"options": {
- "_dynamic-server": {"v_range": [["6.4.1", "6.4.13"]], "type": "str"},
+ "_dynamic-server": {"v_range": [["6.4.1", "6.4.14"]], "type": "str"},
"addr-mode": {"v_range": [["6.4.1", ""]], "choices": ["ipv4", "ipv6"], "type": "str"},
"diffservcode": {"v_range": [["6.4.1", ""]], "type": "str"},
"dns-match-ip": {"v_range": [["6.4.2", ""]], "type": "str"},
@@ -34154,7 +34171,7 @@ SCHEMA_DATA = '''
"v_range": [["6.4.1", ""]],
"type": "list",
"options": {
- "_dynamic-member": {"v_range": [["6.4.1", "6.4.13"]], "type": "str"},
+ "_dynamic-member": {"v_range": [["6.4.1", "6.4.14"]], "type": "str"},
"comment": {"v_range": [["6.4.1", ""]], "type": "str"},
"cost": {"v_range": [["6.4.1", ""]], "type": "int"},
"gateway": {"v_range": [["6.4.1", ""]], "type": "str"},
@@ -34317,7 +34334,7 @@ SCHEMA_DATA = '''
"wanprof_system_sdwan_healthcheck": {
"stated": true,
"options": {
- "_dynamic-server": {"v_range": [["6.4.1", "6.4.13"]], "type": "str"},
+ "_dynamic-server": {"v_range": [["6.4.1", "6.4.14"]], "type": "str"},
"addr-mode": {"v_range": [["6.4.1", ""]], "choices": ["ipv4", "ipv6"], "type": "str"},
"diffservcode": {"v_range": [["6.4.1", ""]], "type": "str"},
"dns-match-ip": {"v_range": [["6.4.2", ""]], "type": "str"},
@@ -34405,7 +34422,7 @@ SCHEMA_DATA = '''
"wanprof_system_sdwan_members": {
"stated": true,
"options": {
- "_dynamic-member": {"v_range": [["6.4.1", "6.4.13"]], "type": "str"},
+ "_dynamic-member": {"v_range": [["6.4.1", "6.4.14"]], "type": "str"},
"comment": {"v_range": [["6.4.1", ""]], "type": "str"},
"cost": {"v_range": [["6.4.1", ""]], "type": "int"},
"gateway": {"v_range": [["6.4.1", ""]], "type": "str"},
@@ -34413,7 +34430,7 @@ SCHEMA_DATA = '''
"ingress-spillover-threshold": {"v_range": [["6.4.1", ""]], "type": "int"},
"interface": {"v_range": [["6.4.1", ""]], "type": "str"},
"priority": {"v_range": [["6.4.1", ""]], "type": "int"},
- "seq-num": {"v_range": [["6.4.1", ""]], "type": "int"},
+ "seq-num": {"v_range": [["6.4.1", ""]], "required": true, "type": "int"},
"source": {"v_range": [["6.4.1", ""]], "type": "str"},
"source6": {"v_range": [["6.4.1", ""]], "type": "str"},
"spillover-threshold": {"v_range": [["6.4.1", ""]], "type": "int"},
@@ -34543,7 +34560,7 @@ SCHEMA_DATA = '''
"health-check": {
"type": "list",
"options": {
- "_dynamic-server": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
+ "_dynamic-server": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
"addr-mode": {"choices": ["ipv4", "ipv6"], "type": "str"},
"failtime": {"type": "int"},
"http-agent": {"type": "str"},
@@ -34582,7 +34599,7 @@ SCHEMA_DATA = '''
"probe-packets": {"v_range": [["6.2.0", ""]], "choices": ["disable", "enable"], "type": "str"},
"sla-fail-log-period": {"v_range": [["6.2.0", ""]], "type": "int"},
"sla-pass-log-period": {"v_range": [["6.2.0", ""]], "no_log": true, "type": "int"},
- "timeout": {"v_range": [["6.2.0", "6.4.13"]], "type": "int"},
+ "timeout": {"v_range": [["6.2.0", "6.4.14"]], "type": "int"},
"ha-priority": {"v_range": [["6.2.2", ""]], "type": "int"},
"diffservcode": {"v_range": [["6.2.5", ""]], "type": "str"},
"probe-timeout": {"v_range": [["6.2.5", ""]], "type": "int"},
@@ -34599,7 +34616,7 @@ SCHEMA_DATA = '''
"members": {
"type": "list",
"options": {
- "_dynamic-member": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
+ "_dynamic-member": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
"comment": {"type": "str"},
"gateway": {"type": "str"},
"gateway6": {"type": "str"},
@@ -34700,7 +34717,7 @@ SCHEMA_DATA = '''
"wanprof_system_virtualwanlink_healthcheck": {
"stated": true,
"options": {
- "_dynamic-server": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
+ "_dynamic-server": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
"addr-mode": {"choices": ["ipv4", "ipv6"], "type": "str"},
"failtime": {"type": "int"},
"http-agent": {"type": "str"},
@@ -34739,7 +34756,7 @@ SCHEMA_DATA = '''
"probe-packets": {"v_range": [["6.2.0", ""]], "choices": ["disable", "enable"], "type": "str"},
"sla-fail-log-period": {"v_range": [["6.2.0", ""]], "type": "int"},
"sla-pass-log-period": {"v_range": [["6.2.0", ""]], "no_log": true, "type": "int"},
- "timeout": {"v_range": [["6.2.0", "6.4.13"]], "type": "int"},
+ "timeout": {"v_range": [["6.2.0", "6.4.14"]], "type": "int"},
"ha-priority": {"v_range": [["6.2.2", ""]], "type": "int"},
"diffservcode": {"v_range": [["6.2.5", ""]], "type": "str"},
"probe-timeout": {"v_range": [["6.2.5", ""]], "type": "int"},
@@ -34761,7 +34778,7 @@ SCHEMA_DATA = '''
"wanprof_system_virtualwanlink_members": {
"stated": true,
"options": {
- "_dynamic-member": {"v_range": [["6.0.0", "6.4.13"]], "type": "str"},
+ "_dynamic-member": {"v_range": [["6.0.0", "6.4.14"]], "type": "str"},
"comment": {"type": "str"},
"gateway": {"type": "str"},
"gateway6": {"type": "str"},
@@ -35049,7 +35066,7 @@ SCHEMA_DATA = '''
"rate-css-urls": {"v_range": [["6.2.8", "6.2.12"], ["6.4.5", ""]], "choices": ["disable", "enable"], "type": "str"},
"rate-image-urls": {"v_range": [["6.2.8", "6.2.12"], ["6.4.5", ""]], "choices": ["disable", "enable"], "type": "str"},
"rate-javascript-urls": {"v_range": [["6.2.8", "6.2.12"], ["6.4.5", ""]], "choices": ["disable", "enable"], "type": "str"},
- "category-override": {"v_range": [["6.2.8", "6.2.12"], ["6.4.5", "6.4.13"]], "type": "str"}
+ "category-override": {"v_range": [["6.2.8", "6.2.12"], ["6.4.5", "6.4.14"]], "type": "str"}
}
},
"override": {
@@ -35288,7 +35305,7 @@ SCHEMA_DATA = '''
"rate-css-urls": {"choices": ["disable", "enable"], "type": "str"},
"rate-image-urls": {"choices": ["disable", "enable"], "type": "str"},
"rate-javascript-urls": {"choices": ["disable", "enable"], "type": "str"},
- "category-override": {"v_range": [["6.2.0", "6.4.13"]], "type": "str"}
+ "category-override": {"v_range": [["6.2.0", "6.4.14"]], "type": "str"}
}
},
"webfilter_profile_ftgdwf_filters": {
@@ -36397,7 +36414,7 @@ SCHEMA_DATA = '''
"sam-private-key-password": {"v_range": [["7.4.2", ""]], "no_log": true, "type": "raw"}
}
},
- "console-login": {"v_range": [["6.2.9", "6.2.12"], ["6.4.8", "6.4.13"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
+ "console-login": {"v_range": [["6.2.9", "6.2.12"], ["6.4.8", "6.4.14"], ["7.0.1", ""]], "choices": ["disable", "enable"], "type": "str"},
"esl-ses-dongle": {
"type": "dict",
"options": {
diff --git a/ansible_collections/fortinet/fortimanager/plugins/module_utils/napi.py b/ansible_collections/fortinet/fortimanager/plugins/module_utils/napi.py
index 430fb6580..952e1a5e9 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/module_utils/napi.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/module_utils/napi.py
@@ -52,31 +52,35 @@ def check_galaxy_version(schema):
raise Exception(error_message)
+def get_bypass(params):
+ bypass = params.get("bypass_validation", False)
+ if isinstance(bypass, bool):
+ return bypass
+ elif isinstance(bypass, str):
+ return bypass.lower() in ["true", "y", "yes", "t", "1", "on"]
+ elif isinstance(bypass, int):
+ return bypass != 0
+ return True
+
+
def check_parameter_bypass(schema, module_level2_name):
schema = modify_argument_spec(schema)
params = _load_params()
if not params:
return schema
- if "bypass_validation" in params and params["bypass_validation"] is True:
+ is_bypass = get_bypass(params) # This params are raw data, need to decide bypass manually.
+ if is_bypass:
top_level_schema = dict()
for key in schema:
if key != module_level2_name:
top_level_schema[key] = schema[key]
elif (
not params[module_level2_name]
- or type(params[module_level2_name]) is dict
+ or isinstance(params[module_level2_name], dict)
):
- top_level_schema[module_level2_name] = dict()
- top_level_schema[module_level2_name]["required"] = False
- top_level_schema[module_level2_name]["type"] = "dict"
- elif type(params[module_level2_name]) is list:
- top_level_schema[module_level2_name] = dict()
- top_level_schema[module_level2_name]["required"] = False
- top_level_schema[module_level2_name]["type"] = "list"
- else:
- raise Exception(
- "Value of %s must be a dict or list" % (module_level2_name)
- )
+ top_level_schema[module_level2_name] = {"type": "dict"}
+ elif isinstance(params[module_level2_name], list):
+ top_level_schema[module_level2_name] = {"type": "list"}
return top_level_schema
return schema
@@ -114,7 +118,7 @@ def _get_modified_name(variable_name):
return modified_name
-def remove_aliases(user_params, metadata):
+def remove_aliases(user_params, metadata, bypass_valid=False):
if not user_params:
return user_params
if isinstance(user_params, str) or isinstance(user_params, int):
@@ -122,7 +126,7 @@ def remove_aliases(user_params, metadata):
if isinstance(user_params, list):
new_params = []
for item in user_params:
- new_params.append(remove_aliases(item, metadata))
+ new_params.append(remove_aliases(item, metadata, bypass_valid))
return new_params
replace_key = {"fmgr_message": "message",
"fmgr_syslog_facility": "syslog-facility",
@@ -130,14 +134,25 @@ def remove_aliases(user_params, metadata):
"d80211k": "80211k",
"d80211v": "80211v"}
new_params = {}
+ considered_keys = set()
for param_name, param_data in metadata.items():
- if user_params.get(param_name, None) is None:
+ ansible_format_param_name = _get_modified_name(param_name)
+ considered_keys.add(param_name)
+ considered_keys.add(ansible_format_param_name)
+ user_data = user_params.get(param_name, None)
+ if user_data is None:
+ user_data = user_params.get(ansible_format_param_name, None)
+ if user_data is None:
continue
- real_param_name = replace_key.get(param_name, param_name)
+ fmg_api_param_name = replace_key.get(param_name, param_name)
if "options" in param_data:
- new_params[real_param_name] = remove_aliases(user_params[param_name], param_data["options"])
+ new_params[fmg_api_param_name] = remove_aliases(user_data, param_data["options"], bypass_valid)
else:
- new_params[real_param_name] = user_params[param_name]
+ new_params[fmg_api_param_name] = user_data
+ if bypass_valid:
+ for param_name, param_data in user_params.items():
+ if param_name not in considered_keys:
+ new_params[param_name] = param_data
return new_params
@@ -290,7 +305,7 @@ class NAPIManager(object):
def _get_base_perobject_url(self, mvalue):
url_getting = self._get_basic_url(True)
if not url_getting.endswith("}"):
- # in case of non-regular per-object url.
+ # in case of non-regular per-object url, such as scope member.
return url_getting
last_token = url_getting.split("/")[-1]
return url_getting.replace(last_token, str(mvalue))
@@ -303,7 +318,8 @@ class NAPIManager(object):
def update_object(self, mvalue):
url_updating = self._get_base_perobject_url(mvalue)
- raw_attributes = remove_aliases(self.module.params, self.metadata)
+ bypass_valid = self.module.params.get("bypass_validation", False) is True
+ raw_attributes = remove_aliases(self.module.params, self.metadata, bypass_valid)
raw_attributes = raw_attributes.get(self.module_level2_name, {})
params = {
"url": url_updating,
@@ -314,7 +330,8 @@ class NAPIManager(object):
def create_object(self):
url_creating = self._get_basic_url(False)
- raw_attributes = remove_aliases(self.module.params, self.metadata)
+ bypass_valid = self.module.params.get("bypass_validation", False) is True
+ raw_attributes = remove_aliases(self.module.params, self.metadata, bypass_valid)
raw_attributes = raw_attributes.get(self.module_level2_name, {})
params = {
"url": url_creating,
@@ -392,7 +409,8 @@ class NAPIManager(object):
def _update_required(self, robject):
object_remote = robject["data"] if "data" in robject else {}
- object_present = remove_aliases(self.module.params, self.metadata)
+ bypass_valid = self.module.params.get("bypass_validation", False)
+ object_present = remove_aliases(self.module.params, self.metadata, bypass_valid)
object_present = object_present.get(self.module_level2_name, {})
return self.is_object_difference(object_remote, object_present)
@@ -403,7 +421,7 @@ class NAPIManager(object):
if self._method_proposed() or self._update_required(robject):
return self.update_object(mvalue)
else:
- self.module.exit_json(message="Your FortiManager is up to date, no need to update. "
+ self.module.exit_json(message="Your FortiManager is already up to date and does not need to be updated. "
"To force update, please add argument proposed_method:update")
else:
return self.create_object()
@@ -425,14 +443,15 @@ class NAPIManager(object):
params = self.module.params
module_name = self.module_level2_name
track = [module_name]
- if not params.get("bypass_validation", False):
+ bypass_valid = params.get("bypass_validation", False)
+ if not bypass_valid:
self.check_versioning_mismatch(track, argument_specs.get(module_name, None), params.get(module_name, None))
adom_value = params.get("adom", None)
target_url = self._get_target_url(adom_value, self.jrpc_urls)
target_url = self._get_replaced_url(target_url)
api_params = {"url": target_url}
if module_name in params:
- params = remove_aliases(params, argument_specs)
+ params = remove_aliases(params, argument_specs, bypass_valid)
api_params[self.top_level_schema_name] = params[module_name]
response = self.conn.send_request("exec", [api_params])
self.do_exit(response)
@@ -495,7 +514,7 @@ class NAPIManager(object):
self.do_exit(response, changed=(task_type != "facts"))
def __fix_remote_object_internal(self, robject, module_schema, log):
- if type(robject) is not dict:
+ if not isinstance(robject, dict):
return True
need_bypass = False
keys_to_delete = list()
@@ -510,19 +529,19 @@ class NAPIManager(object):
attr_type = attr_schema["type"]
if attr_type in ["str", "int"]:
# Do immediate fix.
- if type(value) is list:
+ if isinstance(value, list):
if len(value) == 1:
robject[key] = value[0]
log.write("\tfix list-to-atomic key:%s\n" % (key))
else:
need_bypass = True
- elif type(value) is dict:
+ elif isinstance(value, dict):
need_bypass = True
if not value or value == "null":
log.write("\tdelete empty key:%s\n" % (key))
keys_to_delete.append(key)
elif attr_type == "dict":
- if "options" in attr_schema and type(value) is dict:
+ if "options" in attr_schema and isinstance(value, dict):
need_bypass |= self.__fix_remote_object_internal(
value, attr_schema["options"], log
)
@@ -532,7 +551,7 @@ class NAPIManager(object):
log.write("\tdelete empty key:%s\n" % (key))
keys_to_delete.append(key)
elif attr_type == "list":
- if "options" in attr_schema and type(value) is list:
+ if "options" in attr_schema and isinstance(value, list):
for sub_value in value:
need_bypass |= self.__fix_remote_object_internal(
sub_value, attr_schema["options"], log
@@ -540,7 +559,7 @@ class NAPIManager(object):
else:
need_bypass = True
if (
- type(value) is list
+ isinstance(value, list)
and not len(value)
or value == "null"
or not value
@@ -606,13 +625,13 @@ class NAPIManager(object):
module_schema = schema_invt[selector]["options"]
remote_objects = response_data["data"]
counter = 0
- if type(remote_objects) is list:
+ if isinstance(remote_objects, list):
for remote_object in remote_objects:
need_bypass = self.__fix_remote_object_internal(remote_object, module_schema, log)
self._generate_playbook(counter, export_path, selector, remote_object,
state_present, need_bypass, url_params, params_schema, log)
counter += 1
- elif type(remote_objects) is dict:
+ elif isinstance(remote_objects, dict):
need_bypass = self.__fix_remote_object_internal(remote_objects, module_schema, log)
self._generate_playbook(counter, export_path, selector, remote_objects, state_present,
need_bypass, url_params, params_schema, log)
@@ -791,6 +810,56 @@ class NAPIManager(object):
self.module.fail_json(msg="can not find url in following sets:%s! please check params: adom" % (target_url))
return target_url
+ def process_object_member(self, argument_specs=None):
+ self.metadata = argument_specs
+ module_name = self.module_level2_name
+ params = self.module.params
+ track = [module_name]
+ bypass_valid = self.module.params.get("bypass_validation", False)
+ if not bypass_valid:
+ self.check_versioning_mismatch(track, argument_specs.get(module_name, None), params.get(module_name, None))
+ member_url = self._get_basic_url(True)
+ parent_url, separator, task_type = member_url.rpartition("/")
+ response = (-1, {})
+ object_present = remove_aliases(self.module.params, self.metadata, bypass_valid)
+ object_present = object_present.get(self.module_level2_name, {})
+ if self.module.params["state"] == "present":
+ params = [{"url": parent_url}]
+ rc, object_remote = self.conn.send_request("get", params)
+ if rc == 0:
+ object_remote = object_remote.get("data", {})
+ object_remote = object_remote.get(task_type, {})
+ require_update = True
+ if not bypass_valid:
+ if isinstance(object_remote, list):
+ if len(object_remote) > 1:
+ require_update = True
+ else:
+ object_remote = object_remote[0]
+ try:
+ require_update = self.is_object_difference(object_remote, object_present)
+ except Exception as e:
+ pass
+ if self._method_proposed() or require_update:
+ response = self.update_object("")
+ else:
+ self.module.exit_json(message="Your FortiManager is already up to date and does not need to be updated. "
+ "To force update, please add argument proposed_method:update")
+ else:
+ resource_name = parent_url.split("/")[-1]
+ parent_module, separator, task_name = module_name.rpartition("_")
+ parent_module = "fmgr_" + parent_module
+ rename_parent_module = {"fmgr_pm_devprof": "fmgr_pm_devprof_pkg",
+ "fmgr_pm_wanprof": "fmgr_pm_wanprof_pkg"}
+ if parent_module in rename_parent_module:
+ parent_module = rename_parent_module[parent_module]
+ self.module.fail_json(msg="The resource %s does not exist. Please try to use the module %s first." %
+ (resource_name, parent_module))
+ elif self.module.params["state"] == "absent":
+ params = [{"url": member_url, self.top_level_schema_name: object_present}]
+ response = self.conn.send_request("delete", params)
+ self.do_exit(response)
+
def process_curd(self, argument_specs=None):
self.metadata = argument_specs
module_name = self.module_level2_name
@@ -805,7 +874,11 @@ class NAPIManager(object):
mvalue_exec_string = mvalue_exec_string.replace("{{module}}", "self.module.params[self.module_level2_name]")
mvalue = eval(mvalue_exec_string)
else:
- mvalue = params[module_name][self.module_primary_key]
+ modified_main_key = _get_modified_name(self.module_primary_key)
+ if modified_main_key in params[module_name]:
+ mvalue = params[module_name][modified_main_key]
+ elif self.module_primary_key in params[module_name]:
+ mvalue = params[module_name][self.module_primary_key]
self.do_exit(self._process_with_mkey(mvalue))
else:
self.do_exit(self._process_without_mkey())
@@ -815,7 +888,8 @@ class NAPIManager(object):
module_name = self.module_level2_name
params = self.module.params
track = [module_name]
- if not params.get("bypass_validation", False):
+ bypass_valid = params.get("bypass_validation", False)
+ if not bypass_valid:
self.check_versioning_mismatch(track, argument_specs.get(module_name, None), params.get(module_name, None))
adom_value = params.get("adom", None)
target_url = self._get_target_url(adom_value, self.jrpc_urls)
@@ -823,7 +897,7 @@ class NAPIManager(object):
target_url = target_url.rstrip("/")
api_params = {"url": target_url}
if module_name in params:
- params = remove_aliases(params, argument_specs)
+ params = remove_aliases(params, argument_specs, bypass_valid)
api_params[self.top_level_schema_name] = params[module_name]
response = self.conn.send_request(self._propose_method("set"), [api_params])
self.do_exit(response)
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_adom_options.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_adom_options.py
index 66b7a4f3c..9f651f314 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_adom_options.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_adom_options.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_adom_options
-short_description: no description
+short_description: Options
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -106,7 +106,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Options
fortinet.fortimanager.fmgr_adom_options:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
@@ -188,7 +188,7 @@ def main():
'options': {
'assign_excluded': {'choices': ['disable', 'enable'], 'type': 'str'},
'specify_assign_pkg_list': {'choices': ['disable', 'enable'], 'type': 'str'},
- 'assign_name': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'type': 'str'}
+ 'assign_name': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_antivirus_profile.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_antivirus_profile.py
index 3acb356e6..e1d3a0f44 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_antivirus_profile.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_antivirus_profile.py
@@ -1681,7 +1681,7 @@ def main():
'fortisandbox': {'v_range': [['7.2.0', '']], 'choices': ['disable', 'block', 'monitor'], 'type': 'str'},
'fortiai': {'v_range': [['7.0.1', '']], 'choices': ['disable', 'monitor', 'block'], 'type': 'str'},
'unknown-content-encoding': {
- 'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']],
+ 'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']],
'choices': ['block', 'inspect', 'bypass'],
'type': 'str'
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_antivirus_profile_http.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_antivirus_profile_http.py
index b3d291829..95a267371 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_antivirus_profile_http.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_antivirus_profile_http.py
@@ -348,7 +348,7 @@ def main():
'fortindr': {'v_range': [['7.0.5', '']], 'choices': ['disable', 'block', 'monitor'], 'type': 'str'},
'fortisandbox': {'v_range': [['7.2.0', '']], 'choices': ['disable', 'block', 'monitor'], 'type': 'str'},
'fortiai': {'v_range': [['7.0.1', '']], 'choices': ['disable', 'monitor', 'block'], 'type': 'str'},
- 'unknown-content-encoding': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'choices': ['block', 'inspect', 'bypass'], 'type': 'str'}
+ 'unknown-content-encoding': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'choices': ['block', 'inspect', 'bypass'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_apcfgprofile.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_apcfgprofile.py
index 4d6cb495d..2d8c22213 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_apcfgprofile.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_apcfgprofile.py
@@ -263,7 +263,7 @@ def main():
},
'comment': {'v_range': [['6.4.6', '']], 'type': 'str'},
'name': {'v_range': [['6.4.6', '']], 'required': True, 'type': 'str'},
- 'ap-family': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'choices': ['fap', 'fap-u', 'fap-c'], 'type': 'str'}
+ 'ap-family': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'choices': ['fap', 'fap-u', 'fap-c'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_application_categories.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_application_categories.py
index c86c88277..c5559e5dd 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_application_categories.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_application_categories.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_application_categories
-short_description: no description
+short_description: Application categories
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -104,7 +104,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Application categories
fortinet.fortimanager.fmgr_application_categories:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_application_list.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_application_list.py
index e81711384..259f1ff9b 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_application_list.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_application_list.py
@@ -517,7 +517,7 @@ def main():
'sub-category': {'type': 'raw'},
'technology': {'type': 'raw'},
'vendor': {'type': 'raw'},
- 'tags': {'v_range': [['6.2.0', '6.4.13']], 'type': 'str'},
+ 'tags': {'v_range': [['6.2.0', '6.4.14']], 'type': 'str'},
'exclusion': {'v_range': [['6.2.7', '6.2.12'], ['6.4.3', '']], 'type': 'raw'}
},
'elements': 'dict'
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_application_list_entries.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_application_list_entries.py
index 780c6b754..72eb75368 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_application_list_entries.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_application_list_entries.py
@@ -382,7 +382,7 @@ def main():
'sub-category': {'type': 'raw'},
'technology': {'type': 'raw'},
'vendor': {'type': 'raw'},
- 'tags': {'v_range': [['6.2.0', '6.4.13']], 'type': 'str'},
+ 'tags': {'v_range': [['6.2.0', '6.4.14']], 'type': 'str'},
'exclusion': {'v_range': [['6.2.7', '6.2.12'], ['6.4.3', '']], 'type': 'raw'}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_certificate_template.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_certificate_template.py
index fa63a63f3..06474c5b4 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_certificate_template.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_certificate_template.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_certificate_template
-short_description: no description
+short_description: Certificate template
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_clone.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_clone.py
index 42149dee9..bebec63bd 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_clone.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_clone.py
@@ -1272,28 +1272,28 @@ def main():
'urls': [
'/pm/config/adom/{adom}/devprof/{devprof}/log/syslogd/filter/exclude-list/{exclude-list}'
],
- 'mkey': 'id', 'v_range': [['7.0.4', '7.0.10']]
+ 'mkey': 'id', 'v_range': [['7.0.4', '7.0.12']]
},
'devprof_log_syslogd_filter_excludelist_fields': {
'params': ['adom', 'devprof', 'exclude-list', 'fields'],
'urls': [
'/pm/config/adom/{adom}/devprof/{devprof}/log/syslogd/filter/exclude-list/{exclude-list}/fields/{fields}'
],
- 'mkey': None, 'v_range': [['7.0.4', '7.0.10']]
+ 'mkey': None, 'v_range': [['7.0.4', '7.0.12']]
},
'devprof_log_syslogd_filter_freestyle': {
'params': ['adom', 'devprof', 'free-style'],
'urls': [
'/pm/config/adom/{adom}/devprof/{devprof}/log/syslogd/filter/free-style/{free-style}'
],
- 'mkey': 'id', 'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']]
+ 'mkey': 'id', 'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']]
},
'devprof_log_syslogd_setting_customfieldname': {
'params': ['adom', 'devprof', 'custom-field-name'],
'urls': [
'/pm/config/adom/{adom}/devprof/{devprof}/log/syslogd/setting/custom-field-name/{custom-field-name}'
],
- 'mkey': 'id', 'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']]
+ 'mkey': 'id', 'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']]
},
'devprof_system_centralmanagement_serverlist': {
'params': ['adom', 'devprof', 'server-list'],
@@ -1616,7 +1616,7 @@ def main():
'/pm/config/adom/{adom}/obj/dynamic/virtual-wan-link/members/{members}',
'/pm/config/global/obj/dynamic/virtual-wan-link/members/{members}'
],
- 'mkey': 'name', 'v_range': [['6.0.0', '6.4.13']]
+ 'mkey': 'name', 'v_range': [['6.0.0', '6.4.14']]
},
'dynamic_virtualwanlink_members_dynamicmapping': {
'params': ['adom', 'members', 'dynamic_mapping'],
@@ -1624,7 +1624,7 @@ def main():
'/pm/config/adom/{adom}/obj/dynamic/virtual-wan-link/members/{members}/dynamic_mapping/{dynamic_mapping}',
'/pm/config/global/obj/dynamic/virtual-wan-link/members/{members}/dynamic_mapping/{dynamic_mapping}'
],
- 'mkey': '_scope', 'v_range': [['6.0.0', '6.4.13']]
+ 'mkey': '_scope', 'v_range': [['6.0.0', '6.4.14']]
},
'dynamic_virtualwanlink_neighbor': {
'params': ['adom', 'neighbor'],
@@ -1632,7 +1632,7 @@ def main():
'/pm/config/adom/{adom}/obj/dynamic/virtual-wan-link/neighbor/{neighbor}',
'/pm/config/global/obj/dynamic/virtual-wan-link/neighbor/{neighbor}'
],
- 'mkey': 'name', 'v_range': [['6.2.2', '6.4.13']]
+ 'mkey': 'name', 'v_range': [['6.2.2', '6.4.14']]
},
'dynamic_virtualwanlink_neighbor_dynamicmapping': {
'params': ['adom', 'neighbor', 'dynamic_mapping'],
@@ -1640,7 +1640,7 @@ def main():
'/pm/config/adom/{adom}/obj/dynamic/virtual-wan-link/neighbor/{neighbor}/dynamic_mapping/{dynamic_mapping}',
'/pm/config/global/obj/dynamic/virtual-wan-link/neighbor/{neighbor}/dynamic_mapping/{dynamic_mapping}'
],
- 'mkey': None, 'v_range': [['6.2.2', '6.4.13']]
+ 'mkey': None, 'v_range': [['6.2.2', '6.4.14']]
},
'dynamic_virtualwanlink_server': {
'params': ['adom', 'server'],
@@ -1648,7 +1648,7 @@ def main():
'/pm/config/adom/{adom}/obj/dynamic/virtual-wan-link/server/{server}',
'/pm/config/global/obj/dynamic/virtual-wan-link/server/{server}'
],
- 'mkey': 'name', 'v_range': [['6.0.0', '6.4.13']]
+ 'mkey': 'name', 'v_range': [['6.0.0', '6.4.14']]
},
'dynamic_virtualwanlink_server_dynamicmapping': {
'params': ['adom', 'server', 'dynamic_mapping'],
@@ -1656,7 +1656,7 @@ def main():
'/pm/config/adom/{adom}/obj/dynamic/virtual-wan-link/server/{server}/dynamic_mapping/{dynamic_mapping}',
'/pm/config/global/obj/dynamic/virtual-wan-link/server/{server}/dynamic_mapping/{dynamic_mapping}'
],
- 'mkey': '_scope', 'v_range': [['6.0.0', '6.4.13']]
+ 'mkey': '_scope', 'v_range': [['6.0.0', '6.4.14']]
},
'dynamic_vpntunnel': {
'params': ['adom', 'vpntunnel'],
@@ -2522,7 +2522,7 @@ def main():
'/pm/config/adom/{adom}/obj/firewall/ippool_grp/{ippool_grp}',
'/pm/config/global/obj/firewall/ippool_grp/{ippool_grp}'
],
- 'mkey': 'name', 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'mkey': 'name', 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'firewall_ldbmonitor': {
'params': ['adom', 'ldb-monitor'],
@@ -3730,7 +3730,7 @@ def main():
'/pm/config/adom/{adom}/obj/log/npu-server/server-group/{server-group}',
'/pm/config/global/obj/log/npu-server/server-group/{server-group}'
],
- 'mkey': None, 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'mkey': None, 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'log_npuserver_serverinfo': {
'params': ['adom', 'server-info'],
@@ -3738,7 +3738,7 @@ def main():
'/pm/config/adom/{adom}/obj/log/npu-server/server-info/{server-info}',
'/pm/config/global/obj/log/npu-server/server-info/{server-info}'
],
- 'mkey': 'id', 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'mkey': 'id', 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'mpskprofile': {
'params': ['adom', 'mpsk-profile'],
@@ -3868,28 +3868,28 @@ def main():
'urls': [
'/pm/config/adom/{adom}/pkg/{pkg}/firewall/hyperscale-policy/{hyperscale-policy}'
],
- 'mkey': 'policyid', 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']]
+ 'mkey': 'policyid', 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']]
},
'pkg_firewall_hyperscalepolicy46': {
'params': ['adom', 'pkg', 'hyperscale-policy46'],
'urls': [
'/pm/config/adom/{adom}/pkg/{pkg}/firewall/hyperscale-policy46/{hyperscale-policy46}'
],
- 'mkey': 'policyid', 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']]
+ 'mkey': 'policyid', 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']]
},
'pkg_firewall_hyperscalepolicy6': {
'params': ['adom', 'pkg', 'hyperscale-policy6'],
'urls': [
'/pm/config/adom/{adom}/pkg/{pkg}/firewall/hyperscale-policy6/{hyperscale-policy6}'
],
- 'mkey': 'policyid', 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']]
+ 'mkey': 'policyid', 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']]
},
'pkg_firewall_hyperscalepolicy64': {
'params': ['adom', 'pkg', 'hyperscale-policy64'],
'urls': [
'/pm/config/adom/{adom}/pkg/{pkg}/firewall/hyperscale-policy64/{hyperscale-policy64}'
],
- 'mkey': 'policyid', 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']]
+ 'mkey': 'policyid', 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']]
},
'pkg_firewall_interfacepolicy': {
'params': ['adom', 'pkg', 'interface-policy'],
@@ -4257,7 +4257,7 @@ def main():
'/pm/config/adom/{adom}/obj/sctp-filter/profile/{profile}',
'/pm/config/global/obj/sctp-filter/profile/{profile}'
],
- 'mkey': 'name', 'v_range': [['7.4.2', '']]
+ 'mkey': 'name', 'v_range': [['7.2.5', '7.2.5'], ['7.4.2', '']]
},
'sctpfilter_profile_ppidfilters': {
'params': ['adom', 'profile', 'ppid-filters'],
@@ -4265,7 +4265,7 @@ def main():
'/pm/config/adom/{adom}/obj/sctp-filter/profile/{profile}/ppid-filters/{ppid-filters}',
'/pm/config/global/obj/sctp-filter/profile/{profile}/ppid-filters/{ppid-filters}'
],
- 'mkey': 'id', 'v_range': [['7.4.2', '']]
+ 'mkey': 'id', 'v_range': [['7.2.5', '7.2.5'], ['7.4.2', '']]
},
'spamfilter_bwl': {
'params': ['adom', 'bwl'],
@@ -4481,7 +4481,7 @@ def main():
'/pm/config/adom/{adom}/obj/switch-controller/managed-switch/{managed-switch}',
'/pm/config/global/obj/switch-controller/managed-switch/{managed-switch}'
],
- 'mkey': 'name'
+ 'mkey': 'switch-id'
},
'switchcontroller_managedswitch_customcommand': {
'params': ['adom', 'managed-switch', 'custom-command'],
@@ -4808,7 +4808,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/dsw-dts-profile/{dsw-dts-profile}',
'/pm/config/global/obj/system/npu/dsw-dts-profile/{dsw-dts-profile}'
],
- 'mkey': None, 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'mkey': None, 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_dswqueuedtsprofile': {
'params': ['adom', 'dsw-queue-dts-profile'],
@@ -4816,7 +4816,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/dsw-queue-dts-profile/{dsw-queue-dts-profile}',
'/pm/config/global/obj/system/npu/dsw-queue-dts-profile/{dsw-queue-dts-profile}'
],
- 'mkey': 'name', 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'mkey': 'name', 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_npqueues_ethernettype': {
'params': ['adom', 'ethernet-type'],
@@ -4824,7 +4824,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/np-queues/ethernet-type/{ethernet-type}',
'/pm/config/global/obj/system/npu/np-queues/ethernet-type/{ethernet-type}'
],
- 'mkey': 'name', 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'mkey': 'name', 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_npqueues_ipprotocol': {
'params': ['adom', 'ip-protocol'],
@@ -4832,7 +4832,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/np-queues/ip-protocol/{ip-protocol}',
'/pm/config/global/obj/system/npu/np-queues/ip-protocol/{ip-protocol}'
],
- 'mkey': 'name', 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'mkey': 'name', 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_npqueues_ipservice': {
'params': ['adom', 'ip-service'],
@@ -4840,7 +4840,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/np-queues/ip-service/{ip-service}',
'/pm/config/global/obj/system/npu/np-queues/ip-service/{ip-service}'
],
- 'mkey': 'name', 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'mkey': 'name', 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_npqueues_profile': {
'params': ['adom', 'profile'],
@@ -4848,7 +4848,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/np-queues/profile/{profile}',
'/pm/config/global/obj/system/npu/np-queues/profile/{profile}'
],
- 'mkey': 'id', 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'mkey': 'id', 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_npqueues_scheduler': {
'params': ['adom', 'scheduler'],
@@ -4856,7 +4856,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/np-queues/scheduler/{scheduler}',
'/pm/config/global/obj/system/npu/np-queues/scheduler/{scheduler}'
],
- 'mkey': 'name', 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'mkey': 'name', 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_nputcam': {
'params': ['adom', 'npu-tcam'],
@@ -4872,7 +4872,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/port-cpu-map/{port-cpu-map}',
'/pm/config/global/obj/system/npu/port-cpu-map/{port-cpu-map}'
],
- 'mkey': None, 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'mkey': None, 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_portnpumap': {
'params': ['adom', 'port-npu-map'],
@@ -4880,7 +4880,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/port-npu-map/{port-npu-map}',
'/pm/config/global/obj/system/npu/port-npu-map/{port-npu-map}'
],
- 'mkey': None, 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'mkey': None, 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_tcptimeoutprofile': {
'params': ['adom', 'tcp-timeout-profile'],
@@ -4888,7 +4888,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/tcp-timeout-profile/{tcp-timeout-profile}',
'/pm/config/global/obj/system/npu/tcp-timeout-profile/{tcp-timeout-profile}'
],
- 'mkey': 'id', 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'mkey': 'id', 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_udptimeoutprofile': {
'params': ['adom', 'udp-timeout-profile'],
@@ -4896,7 +4896,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/udp-timeout-profile/{udp-timeout-profile}',
'/pm/config/global/obj/system/npu/udp-timeout-profile/{udp-timeout-profile}'
],
- 'mkey': 'id', 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'mkey': 'id', 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_objecttag': {
'params': ['adom', 'object-tag'],
@@ -4904,7 +4904,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/object-tag/{object-tag}',
'/pm/config/global/obj/system/object-tag/{object-tag}'
],
- 'mkey': 'name', 'v_range': [['6.2.0', '6.4.13']]
+ 'mkey': 'name', 'v_range': [['6.2.0', '6.4.14']]
},
'system_objecttagging': {
'params': ['adom', 'object-tagging'],
@@ -5168,7 +5168,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/sdn-connector/{sdn-connector}/gcp-project-list/{gcp-project-list}',
'/pm/config/global/obj/system/sdn-connector/{sdn-connector}/gcp-project-list/{gcp-project-list}'
],
- 'mkey': 'id', 'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '']]
+ 'mkey': 'id', 'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '']]
},
'system_sdnconnector_nic': {
'params': ['adom', 'sdn-connector', 'nic'],
@@ -5272,7 +5272,7 @@ def main():
'/pm/config/adom/{adom}/obj/user/certificate/{certificate}',
'/pm/config/global/obj/user/certificate/{certificate}'
],
- 'mkey': 'id', 'v_range': [['7.0.8', '7.0.10'], ['7.2.3', '']]
+ 'mkey': 'id', 'v_range': [['7.0.8', '7.0.12'], ['7.2.3', '']]
},
'user_clearpass': {
'params': ['adom', 'clearpass'],
@@ -5624,7 +5624,7 @@ def main():
'/pm/config/adom/{adom}/obj/user/saml/{saml}/dynamic_mapping/{dynamic_mapping}',
'/pm/config/global/obj/user/saml/{saml}/dynamic_mapping/{dynamic_mapping}'
],
- 'mkey': None, 'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '7.4.0']]
+ 'mkey': None, 'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '7.4.0']]
},
'user_securityexemptlist': {
'params': ['adom', 'security-exempt-list'],
@@ -6147,7 +6147,7 @@ def main():
'urls': [
'/pm/config/adom/{adom}/wanprof/{wanprof}/system/sdwan/members/{members}'
],
- 'mkey': None, 'v_range': [['6.4.1', '']]
+ 'mkey': 'seq-num', 'v_range': [['6.4.1', '']]
},
'wanprof_system_sdwan_neighbor': {
'params': ['adom', 'wanprof', 'neighbor'],
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_cloud_orchestaws.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_cloud_orchestaws.py
index 382d9457d..ce9fba77d 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_cloud_orchestaws.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_cloud_orchestaws.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_cloud_orchestaws
-short_description: no description
+short_description: Cloud orchest aws
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -143,7 +143,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Cloud orchest aws
fortinet.fortimanager.fmgr_cloud_orchestaws:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_cloud_orchestawsconnector.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_cloud_orchestawsconnector.py
index 997669c55..42967eff9 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_cloud_orchestawsconnector.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_cloud_orchestawsconnector.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_cloud_orchestawsconnector
-short_description: no description
+short_description: Cloud orchest awsconnector
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -116,7 +116,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Cloud orchest awsconnector
fortinet.fortimanager.fmgr_cloud_orchestawsconnector:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_cloud_orchestawstemplate_autoscaleexistingvpc.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_cloud_orchestawstemplate_autoscaleexistingvpc.py
index 449f89d11..46de57107 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_cloud_orchestawstemplate_autoscaleexistingvpc.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_cloud_orchestawstemplate_autoscaleexistingvpc.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_cloud_orchestawstemplate_autoscaleexistingvpc
-short_description: no description
+short_description: Cloud orchest awstemplate autoscale existing vpc
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -296,7 +296,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Cloud orchest awstemplate autoscale existing vpc
fortinet.fortimanager.fmgr_cloud_orchestawstemplate_autoscaleexistingvpc:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_cloud_orchestawstemplate_autoscalenewvpc.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_cloud_orchestawstemplate_autoscalenewvpc.py
index 3c5a07af6..4d81ceada 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_cloud_orchestawstemplate_autoscalenewvpc.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_cloud_orchestawstemplate_autoscalenewvpc.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_cloud_orchestawstemplate_autoscalenewvpc
-short_description: no description
+short_description: Cloud orchest awstemplate autoscale new vpc
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -290,7 +290,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Cloud orchest awstemplate autoscale new vpc
fortinet.fortimanager.fmgr_cloud_orchestawstemplate_autoscalenewvpc:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_cloud_orchestawstemplate_autoscaletgwnewvpc.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_cloud_orchestawstemplate_autoscaletgwnewvpc.py
index ced324a60..be621c3e9 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_cloud_orchestawstemplate_autoscaletgwnewvpc.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_cloud_orchestawstemplate_autoscaletgwnewvpc.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_cloud_orchestawstemplate_autoscaletgwnewvpc
-short_description: no description
+short_description: Cloud orchest awstemplate autoscale tgw new vpc
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -270,7 +270,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Cloud orchest awstemplate autoscale tgw new vpc
fortinet.fortimanager.fmgr_cloud_orchestawstemplate_autoscaletgwnewvpc:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_cloud_orchestration.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_cloud_orchestration.py
index a1f07375e..5ea56626c 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_cloud_orchestration.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_cloud_orchestration.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_cloud_orchestration
-short_description: no description
+short_description: Cloud orchestration
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -115,7 +115,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Cloud orchestration
fortinet.fortimanager.fmgr_cloud_orchestration:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_device_profile_fortianalyzer.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_device_profile_fortianalyzer.py
index c06572bf3..948caae4d 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_device_profile_fortianalyzer.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_device_profile_fortianalyzer.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_devprof_device_profile_fortianalyzer
-short_description: no description
+short_description: System template device profile fortianalyzer
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -112,7 +112,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: System template device profile fortianalyzer
fortinet.fortimanager.fmgr_devprof_device_profile_fortianalyzer:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_device_profile_fortiguard.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_device_profile_fortiguard.py
index 7dc45eaa8..05a56232e 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_device_profile_fortiguard.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_device_profile_fortiguard.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_devprof_device_profile_fortiguard
-short_description: no description
+short_description: System template device profile fortiguard
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -132,7 +132,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: System template device profile fortiguard
fortinet.fortimanager.fmgr_devprof_device_profile_fortiguard:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_import.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_import.py
index 83daed84b..acde446ee 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_import.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_import.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_devprof_import
-short_description: no description
+short_description: Devprof import
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -90,7 +90,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Devprof import
fortinet.fortimanager.fmgr_devprof_import:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_fortianalyzer_setting.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_fortianalyzer_setting.py
index 192390337..e23f5d41d 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_fortianalyzer_setting.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_fortianalyzer_setting.py
@@ -353,8 +353,8 @@ def main():
'interface-select-method': {'v_range': [['6.2.7', '6.2.12'], ['6.4.3', '']], 'choices': ['auto', 'sdwan', 'specify'], 'type': 'str'},
'preshared-key': {'v_range': [['7.0.0', '']], 'no_log': True, 'type': 'str'},
'alt-server': {'v_range': [['7.2.2', '']], 'type': 'str'},
- 'fallback-to-primary': {'v_range': [['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'server-cert-ca': {'v_range': [['7.4.2', '']], 'type': 'str'}
+ 'fallback-to-primary': {'v_range': [['7.2.5', '7.2.5'], ['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'server-cert-ca': {'v_range': [['7.2.5', '7.2.5'], ['7.4.2', '']], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_syslogd_filter.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_syslogd_filter.py
index 82102c7fe..e9431c620 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_syslogd_filter.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_syslogd_filter.py
@@ -402,65 +402,65 @@ def main():
'choices': ['emergency', 'alert', 'critical', 'error', 'warning', 'notification', 'information', 'debug'],
'type': 'str'
},
- 'anomaly': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'anomaly': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'exclude-list': {
- 'v_range': [['7.0.4', '7.0.10']],
+ 'v_range': [['7.0.4', '7.0.12']],
'type': 'list',
'options': {
'category': {
- 'v_range': [['7.0.4', '7.0.10']],
+ 'v_range': [['7.0.4', '7.0.12']],
'choices': [
'app-ctrl', 'attack', 'dlp', 'event', 'traffic', 'virus', 'voip', 'webfilter', 'netscan', 'spam', 'anomaly', 'waf'
],
'type': 'str'
},
'fields': {
- 'v_range': [['7.0.4', '7.0.10']],
+ 'v_range': [['7.0.4', '7.0.12']],
'type': 'list',
'options': {
- 'args': {'v_range': [['7.0.4', '7.0.10']], 'type': 'raw'},
- 'field': {'v_range': [['7.0.4', '7.0.10']], 'type': 'str'},
- 'negate': {'v_range': [['7.0.4', '7.0.10']], 'choices': ['disable', 'enable'], 'type': 'str'}
+ 'args': {'v_range': [['7.0.4', '7.0.12']], 'type': 'raw'},
+ 'field': {'v_range': [['7.0.4', '7.0.12']], 'type': 'str'},
+ 'negate': {'v_range': [['7.0.4', '7.0.12']], 'choices': ['disable', 'enable'], 'type': 'str'}
},
'elements': 'dict'
},
- 'id': {'v_range': [['7.0.4', '7.0.10']], 'type': 'int'}
+ 'id': {'v_range': [['7.0.4', '7.0.12']], 'type': 'int'}
},
'elements': 'dict'
},
- 'forward-traffic': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'forward-traffic': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'free-style': {
- 'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']],
+ 'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']],
'type': 'list',
'options': {
'category': {
- 'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']],
+ 'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']],
'choices': [
'traffic', 'event', 'virus', 'webfilter', 'attack', 'spam', 'voip', 'dlp', 'app-ctrl', 'anomaly', 'waf', 'gtp', 'dns',
'ssh', 'ssl', 'file-filter', 'icap', 'ztna', 'virtual-patch'
],
'type': 'str'
},
- 'filter': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'type': 'str'},
- 'filter-type': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'choices': ['include', 'exclude'], 'type': 'str'},
- 'id': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'type': 'int'}
+ 'filter': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'type': 'str'},
+ 'filter-type': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'choices': ['include', 'exclude'], 'type': 'str'},
+ 'id': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'type': 'int'}
},
'elements': 'dict'
},
- 'gtp': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'local-traffic': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'multicast-traffic': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'sniffer-traffic': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'voip': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'ztna-traffic': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'filter-type': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'choices': ['include', 'exclude'], 'type': 'str'},
- 'filter': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'type': 'str'},
- 'cifs': {'v_range': [['7.0.4', '7.0.10']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'ssl': {'v_range': [['7.0.4', '7.0.10']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'dns': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '7.2.1']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'ssh': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '7.2.1']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'netscan-discovery': {'v_range': [['7.0.4', '7.0.10']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'netscan-vulnerability': {'v_range': [['7.0.4', '7.0.10']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'gtp': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'local-traffic': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'multicast-traffic': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'sniffer-traffic': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'voip': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'ztna-traffic': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'filter-type': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'choices': ['include', 'exclude'], 'type': 'str'},
+ 'filter': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'type': 'str'},
+ 'cifs': {'v_range': [['7.0.4', '7.0.12']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'ssl': {'v_range': [['7.0.4', '7.0.12']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'dns': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '7.2.1']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'ssh': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '7.2.1']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'netscan-discovery': {'v_range': [['7.0.4', '7.0.12']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'netscan-vulnerability': {'v_range': [['7.0.4', '7.0.12']], 'choices': ['disable', 'enable'], 'type': 'str'},
'forti-switch': {'v_range': [['7.4.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_syslogd_filter_excludelist.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_syslogd_filter_excludelist.py
index 66cf1ba40..c0ddc7ec8 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_syslogd_filter_excludelist.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_syslogd_filter_excludelist.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_devprof_log_syslogd_filter_excludelist
-short_description: no description
+short_description: System template log syslogd filter exclude list
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -141,7 +141,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: System template log syslogd filter exclude list
fortinet.fortimanager.fmgr_devprof_log_syslogd_filter_excludelist:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
@@ -224,24 +224,24 @@ def main():
'devprof': {'required': True, 'type': 'str'},
'devprof_log_syslogd_filter_excludelist': {
'type': 'dict',
- 'v_range': [['7.0.4', '7.0.10']],
+ 'v_range': [['7.0.4', '7.0.12']],
'options': {
'category': {
- 'v_range': [['7.0.4', '7.0.10']],
+ 'v_range': [['7.0.4', '7.0.12']],
'choices': ['app-ctrl', 'attack', 'dlp', 'event', 'traffic', 'virus', 'voip', 'webfilter', 'netscan', 'spam', 'anomaly', 'waf'],
'type': 'str'
},
'fields': {
- 'v_range': [['7.0.4', '7.0.10']],
+ 'v_range': [['7.0.4', '7.0.12']],
'type': 'list',
'options': {
- 'args': {'v_range': [['7.0.4', '7.0.10']], 'type': 'raw'},
- 'field': {'v_range': [['7.0.4', '7.0.10']], 'type': 'str'},
- 'negate': {'v_range': [['7.0.4', '7.0.10']], 'choices': ['disable', 'enable'], 'type': 'str'}
+ 'args': {'v_range': [['7.0.4', '7.0.12']], 'type': 'raw'},
+ 'field': {'v_range': [['7.0.4', '7.0.12']], 'type': 'str'},
+ 'negate': {'v_range': [['7.0.4', '7.0.12']], 'choices': ['disable', 'enable'], 'type': 'str'}
},
'elements': 'dict'
},
- 'id': {'v_range': [['7.0.4', '7.0.10']], 'required': True, 'type': 'int'}
+ 'id': {'v_range': [['7.0.4', '7.0.12']], 'required': True, 'type': 'int'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_syslogd_filter_excludelist_fields.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_syslogd_filter_excludelist_fields.py
index 2c041b490..a4e92f8f4 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_syslogd_filter_excludelist_fields.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_syslogd_filter_excludelist_fields.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_devprof_log_syslogd_filter_excludelist_fields
-short_description: no description
+short_description: System template log syslogd filter exclude list fields
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -122,7 +122,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: System template log syslogd filter exclude list fields
fortinet.fortimanager.fmgr_devprof_log_syslogd_filter_excludelist_fields:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
@@ -204,11 +204,11 @@ def main():
'exclude_list': {'type': 'str'},
'devprof_log_syslogd_filter_excludelist_fields': {
'type': 'dict',
- 'v_range': [['7.0.4', '7.0.10']],
+ 'v_range': [['7.0.4', '7.0.12']],
'options': {
- 'args': {'v_range': [['7.0.4', '7.0.10']], 'type': 'raw'},
- 'field': {'v_range': [['7.0.4', '7.0.10']], 'type': 'str'},
- 'negate': {'v_range': [['7.0.4', '7.0.10']], 'choices': ['disable', 'enable'], 'type': 'str'}
+ 'args': {'v_range': [['7.0.4', '7.0.12']], 'type': 'raw'},
+ 'field': {'v_range': [['7.0.4', '7.0.12']], 'type': 'str'},
+ 'negate': {'v_range': [['7.0.4', '7.0.12']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_syslogd_filter_freestyle.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_syslogd_filter_freestyle.py
index e297d1331..deda30f01 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_syslogd_filter_freestyle.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_syslogd_filter_freestyle.py
@@ -220,19 +220,19 @@ def main():
'devprof': {'required': True, 'type': 'str'},
'devprof_log_syslogd_filter_freestyle': {
'type': 'dict',
- 'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']],
+ 'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']],
'options': {
'category': {
- 'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']],
+ 'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']],
'choices': [
'traffic', 'event', 'virus', 'webfilter', 'attack', 'spam', 'voip', 'dlp', 'app-ctrl', 'anomaly', 'waf', 'gtp', 'dns', 'ssh',
'ssl', 'file-filter', 'icap', 'ztna', 'virtual-patch'
],
'type': 'str'
},
- 'filter': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'type': 'str'},
- 'filter-type': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'choices': ['include', 'exclude'], 'type': 'str'},
- 'id': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'required': True, 'type': 'int'}
+ 'filter': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'type': 'str'},
+ 'filter-type': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'choices': ['include', 'exclude'], 'type': 'str'},
+ 'id': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'required': True, 'type': 'int'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_syslogd_setting.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_syslogd_setting.py
index 190a2842c..24b761294 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_syslogd_setting.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_syslogd_setting.py
@@ -345,21 +345,21 @@ def main():
'type': 'str'
},
'status': {'v_range': [['6.0.0', '6.2.5'], ['6.2.7', '6.4.1'], ['6.4.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'reliable': {'v_range': [['6.2.0', '6.2.5'], ['6.2.7', '6.4.1'], ['6.4.3', '6.4.13']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'reliable': {'v_range': [['6.2.0', '6.2.5'], ['6.2.7', '6.4.1'], ['6.4.3', '6.4.14']], 'choices': ['disable', 'enable'], 'type': 'str'},
'csv': {'v_range': [['6.2.0', '6.2.5'], ['6.2.7', '6.2.12']], 'choices': ['disable', 'enable'], 'type': 'str'},
'max-log-rate': {'v_range': [['6.2.2', '6.2.5'], ['6.2.7', '6.4.1'], ['6.4.3', '']], 'type': 'int'},
'priority': {'v_range': [['6.2.2', '6.2.5'], ['6.2.7', '6.4.1'], ['6.4.3', '']], 'choices': ['low', 'default'], 'type': 'str'},
'interface': {'v_range': [['6.2.7', '6.2.12'], ['6.4.3', '']], 'type': 'str'},
'interface-select-method': {'v_range': [['6.2.7', '6.2.12'], ['6.4.3', '']], 'choices': ['auto', 'sdwan', 'specify'], 'type': 'str'},
- 'format': {'v_range': [['6.4.6', '6.4.13'], ['7.0.1', '']], 'choices': ['default', 'csv', 'cef', 'rfc5424', 'json'], 'type': 'str'},
+ 'format': {'v_range': [['6.4.6', '6.4.14'], ['7.0.1', '']], 'choices': ['default', 'csv', 'cef', 'rfc5424', 'json'], 'type': 'str'},
'syslog-type': {'v_range': [['6.2.0', '6.2.0']], 'type': 'int'},
'custom-field-name': {
- 'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']],
+ 'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']],
'type': 'list',
'options': {
- 'custom': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'type': 'str'},
- 'id': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'type': 'int'},
- 'name': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'type': 'str'}
+ 'custom': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'type': 'str'},
+ 'id': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'type': 'int'},
+ 'name': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'type': 'str'}
},
'elements': 'dict'
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_syslogd_setting_customfieldname.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_syslogd_setting_customfieldname.py
index b2c2478f3..f0755c140 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_syslogd_setting_customfieldname.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_log_syslogd_setting_customfieldname.py
@@ -193,11 +193,11 @@ def main():
'devprof': {'required': True, 'type': 'str'},
'devprof_log_syslogd_setting_customfieldname': {
'type': 'dict',
- 'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']],
+ 'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']],
'options': {
- 'custom': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'type': 'str'},
- 'id': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'required': True, 'type': 'int'},
- 'name': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'type': 'str'}
+ 'custom': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'type': 'str'},
+ 'id': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'required': True, 'type': 'int'},
+ 'name': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_system_global.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_system_global.py
index 00306a4c0..fcfa502b8 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_system_global.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_devprof_system_global.py
@@ -274,7 +274,7 @@ def main():
'admin-sport': {'v_range': [['6.0.0', '6.2.5'], ['6.2.7', '6.4.1'], ['6.4.3', '']], 'type': 'int'},
'admin-ssh-port': {'v_range': [['6.0.0', '6.2.5'], ['6.2.7', '6.4.1'], ['6.4.3', '']], 'type': 'int'},
'admin-ssh-v1': {'v_range': [['6.0.0', '6.2.5'], ['6.2.7', '6.4.1'], ['6.4.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'admin-telnet-port': {'v_range': [['6.0.0', '6.2.5'], ['6.2.7', '6.4.1'], ['6.4.3', '7.4.1']], 'type': 'int'},
+ 'admin-telnet-port': {'v_range': [['6.0.0', '6.2.5'], ['6.2.7', '6.4.1'], ['6.4.3', '7.2.4'], ['7.4.0', '7.4.1']], 'type': 'int'},
'admintimeout': {'v_range': [['6.0.0', '6.2.5'], ['6.2.7', '6.4.1'], ['6.4.3', '']], 'type': 'int'},
'gui-ipv6': {'v_range': [['6.0.0', '6.2.5'], ['6.2.7', '6.4.1'], ['6.4.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'gui-lines-per-page': {'v_range': [['6.0.0', '6.2.5'], ['6.2.7', '6.4.1'], ['6.4.3', '']], 'type': 'int'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvm_cmd_import_devlist.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvm_cmd_import_devlist.py
index baf30cbee..06fcd66fb 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvm_cmd_import_devlist.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvm_cmd_import_devlist.py
@@ -1101,7 +1101,7 @@ def main():
'role': {'choices': ['slave', 'master'], 'type': 'str'},
'sn': {'type': 'str'},
'status': {'type': 'int'},
- 'conf_status': {'v_range': [['7.0.10', '7.0.10'], ['7.2.1', '']], 'type': 'int'}
+ 'conf_status': {'v_range': [['7.0.10', '7.0.12'], ['7.2.1', '']], 'type': 'int'}
},
'elements': 'dict'
},
@@ -1169,11 +1169,11 @@ def main():
'nsxt_service_name': {'v_range': [['6.4.4', '']], 'type': 'str'},
'private_key': {'v_range': [['6.2.7', '6.2.12'], ['6.4.4', '']], 'no_log': True, 'type': 'str'},
'private_key_status': {'v_range': [['6.2.7', '6.2.12'], ['6.4.4', '']], 'no_log': True, 'type': 'int'},
- 'vm_lic_overdue_since': {'v_range': [['6.4.12', '6.4.13'], ['7.0.8', '7.0.10'], ['7.2.3', '']], 'type': 'int'},
- 'first_tunnel_up': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'type': 'int'},
+ 'vm_lic_overdue_since': {'v_range': [['6.4.12', '6.4.14'], ['7.0.8', '7.0.12'], ['7.2.3', '']], 'type': 'int'},
+ 'first_tunnel_up': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'type': 'int'},
'eip': {'v_range': [['7.2.1', '']], 'type': 'str'},
'mgmt_uuid': {'v_range': [['7.2.1', '']], 'type': 'str'},
- 'hw_generation': {'v_range': [['7.2.4', '7.2.4'], ['7.4.1', '']], 'type': 'int'}
+ 'hw_generation': {'v_range': [['7.2.4', '7.2.5'], ['7.4.1', '']], 'type': 'int'}
},
'elements': 'dict'
},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_adom_objectmember.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_adom_objectmember.py
index bb89454b5..bdce181bb 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_adom_objectmember.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_adom_objectmember.py
@@ -203,7 +203,7 @@ def main():
connection.set_option('forticloud_access_token', module.params.get('forticloud_access_token', None))
fmgr = NAPIManager(jrpc_urls, perobject_jrpc_urls, module_primary_key, url_params, module, connection, top_level_schema_name='data')
fmgr.validate_parameters(params_validation_blob)
- fmgr.process_curd(argument_specs=module_arg_spec)
+ fmgr.process_object_member(argument_specs=module_arg_spec)
module.exit_json(meta=module.params)
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_device.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_device.py
index 6c9e7ef23..2a3c419dc 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_device.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_device.py
@@ -695,7 +695,7 @@ def main():
'role': {'choices': ['slave', 'master'], 'type': 'str'},
'sn': {'type': 'str'},
'status': {'type': 'int'},
- 'conf_status': {'v_range': [['7.0.10', '7.0.10'], ['7.2.1', '']], 'type': 'int'}
+ 'conf_status': {'v_range': [['7.0.10', '7.0.12'], ['7.2.1', '']], 'type': 'int'}
},
'elements': 'dict'
},
@@ -763,11 +763,11 @@ def main():
'nsxt_service_name': {'v_range': [['6.4.4', '']], 'type': 'str'},
'private_key': {'v_range': [['6.2.7', '6.2.12'], ['6.4.4', '']], 'no_log': True, 'type': 'str'},
'private_key_status': {'v_range': [['6.2.7', '6.2.12'], ['6.4.4', '']], 'no_log': True, 'type': 'int'},
- 'vm_lic_overdue_since': {'v_range': [['6.4.12', '6.4.13'], ['7.0.8', '7.0.10'], ['7.2.3', '']], 'type': 'int'},
- 'first_tunnel_up': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'type': 'int'},
+ 'vm_lic_overdue_since': {'v_range': [['6.4.12', '6.4.14'], ['7.0.8', '7.0.12'], ['7.2.3', '']], 'type': 'int'},
+ 'first_tunnel_up': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'type': 'int'},
'eip': {'v_range': [['7.2.1', '']], 'type': 'str'},
'mgmt_uuid': {'v_range': [['7.2.1', '']], 'type': 'str'},
- 'hw_generation': {'v_range': [['7.2.4', '7.2.4'], ['7.4.1', '']], 'type': 'int'}
+ 'hw_generation': {'v_range': [['7.2.4', '7.2.5'], ['7.4.1', '']], 'type': 'int'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_device_replace_sn.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_device_replace_sn.py
index b1f4bb632..cb5a6f103 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_device_replace_sn.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_device_replace_sn.py
@@ -170,7 +170,7 @@ def main():
'dvmdb_device_replace_sn': {
'type': 'dict',
'v_range': [['6.0.0', '']],
- 'options': {'sn': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'}}
+ 'options': {'sn': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'}}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_folder.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_folder.py
index 451abe869..676ff61d7 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_folder.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_folder.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dvmdb_folder
-short_description: no description
+short_description: Device manager database folder
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -110,7 +110,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Device manager database folder
fortinet.fortimanager.fmgr_dvmdb_folder:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_group_objectmember.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_group_objectmember.py
index 22c5f4d4a..226667d49 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_group_objectmember.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_group_objectmember.py
@@ -211,7 +211,7 @@ def main():
connection.set_option('forticloud_access_token', module.params.get('forticloud_access_token', None))
fmgr = NAPIManager(jrpc_urls, perobject_jrpc_urls, module_primary_key, url_params, module, connection, top_level_schema_name='data')
fmgr.validate_parameters(params_validation_blob)
- fmgr.process_curd(argument_specs=module_arg_spec)
+ fmgr.process_object_member(argument_specs=module_arg_spec)
module.exit_json(meta=module.params)
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_metafields_adom.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_metafields_adom.py
index 35bb098bf..9d131c907 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_metafields_adom.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_metafields_adom.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dvmdb_metafields_adom
-short_description: no description
+short_description: Device manager database meta fields adom
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -105,7 +105,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Device manager database meta fields adom
fortinet.fortimanager.fmgr_dvmdb_metafields_adom:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_metafields_device.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_metafields_device.py
index 1e25c305b..27dd9fc67 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_metafields_device.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_metafields_device.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dvmdb_metafields_device
-short_description: no description
+short_description: Device manager database meta fields device
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -105,7 +105,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Device manager database meta fields device
fortinet.fortimanager.fmgr_dvmdb_metafields_device:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_metafields_group.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_metafields_group.py
index df3120d22..8d06919ef 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_metafields_group.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_metafields_group.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dvmdb_metafields_group
-short_description: no description
+short_description: Device manager database meta fields group
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -105,7 +105,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Device manager database meta fields group
fortinet.fortimanager.fmgr_dvmdb_metafields_group:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_script_execute.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_script_execute.py
index 37bf30f85..2b9f3627a 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_script_execute.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_script_execute.py
@@ -235,19 +235,19 @@ def main():
'type': 'dict',
'v_range': [['6.0.0', '']],
'options': {
- 'adom': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'package': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
+ 'adom': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'package': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
'scope': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'type': 'list',
'options': {
- 'name': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'vdom': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'}
+ 'name': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'vdom': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'}
},
'elements': 'dict'
},
- 'script': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'pblock': {'v_range': [['7.0.10', '7.0.10'], ['7.4.2', '']], 'type': 'str'}
+ 'script': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'pblock': {'v_range': [['7.0.10', '7.0.12'], ['7.2.5', '7.2.5'], ['7.4.2', '']], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_script_objectmember.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_script_objectmember.py
index 5132efe2d..93e2360fd 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_script_objectmember.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_script_objectmember.py
@@ -213,7 +213,7 @@ def main():
connection.set_option('forticloud_access_token', module.params.get('forticloud_access_token', None))
fmgr = NAPIManager(jrpc_urls, perobject_jrpc_urls, module_primary_key, url_params, module, connection, top_level_schema_name='data')
fmgr.validate_parameters(params_validation_blob)
- fmgr.process_curd(argument_specs=module_arg_spec)
+ fmgr.process_object_member(argument_specs=module_arg_spec)
module.exit_json(meta=module.params)
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_upgrade.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_upgrade.py
index 2a5165aab..d5e2f7675 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_upgrade.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_upgrade.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dvmdb_upgrade
-short_description: no description
+short_description: Device manager database upgrade
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -91,7 +91,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Device manager database upgrade
fortinet.fortimanager.fmgr_dvmdb_upgrade:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_approve.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_approve.py
index aec4e41a7..ce27bccdc 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_approve.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_approve.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dvmdb_workflow_approve
-short_description: no description
+short_description: Device manager database workflow approve
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -91,7 +91,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Device manager database workflow approve
fortinet.fortimanager.fmgr_dvmdb_workflow_approve:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_discard.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_discard.py
index 726e45c95..efc159d2e 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_discard.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_discard.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dvmdb_workflow_discard
-short_description: no description
+short_description: Device manager database workflow discard
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -83,7 +83,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Device manager database workflow discard
fortinet.fortimanager.fmgr_dvmdb_workflow_discard:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_drop.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_drop.py
index 7ec33eb98..e1ce26221 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_drop.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_drop.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dvmdb_workflow_drop
-short_description: no description
+short_description: Device manager database workflow drop
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -83,7 +83,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Device manager database workflow drop
fortinet.fortimanager.fmgr_dvmdb_workflow_drop:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_reject.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_reject.py
index 3b265f38d..997c8a2ce 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_reject.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_reject.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dvmdb_workflow_reject
-short_description: no description
+short_description: Device manager database workflow reject
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -91,7 +91,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Device manager database workflow reject
fortinet.fortimanager.fmgr_dvmdb_workflow_reject:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_repair.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_repair.py
index 961ee0b82..f73667979 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_repair.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_repair.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dvmdb_workflow_repair
-short_description: no description
+short_description: Device manager database workflow repair
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -91,7 +91,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Device manager database workflow repair
fortinet.fortimanager.fmgr_dvmdb_workflow_repair:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_revert.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_revert.py
index d9739dfc4..9f82e132d 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_revert.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_revert.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dvmdb_workflow_revert
-short_description: no description
+short_description: Device manager database workflow revert
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -103,7 +103,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Device manager database workflow revert
fortinet.fortimanager.fmgr_dvmdb_workflow_revert:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_review.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_review.py
index 9234d65a3..474ee080f 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_review.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_review.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dvmdb_workflow_review
-short_description: no description
+short_description: Device manager database workflow review
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -83,7 +83,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Device manager database workflow review
fortinet.fortimanager.fmgr_dvmdb_workflow_review:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_save.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_save.py
index d3c0d1549..b826b4e13 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_save.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_save.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dvmdb_workflow_save
-short_description: no description
+short_description: Device manager database workflow save
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -83,7 +83,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Device manager database workflow save
fortinet.fortimanager.fmgr_dvmdb_workflow_save:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_submit.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_submit.py
index a28e5b5cc..5edb0339d 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_submit.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dvmdb_workflow_submit.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dvmdb_workflow_submit
-short_description: no description
+short_description: Device manager database workflow submit
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -103,7 +103,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Device manager database workflow submit
fortinet.fortimanager.fmgr_dvmdb_workflow_submit:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_address.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_address.py
index 9b6f53176..5707dd2d2 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_address.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_address.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dynamic_address
-short_description: no description
+short_description: Dynamic address
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -121,7 +121,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Dynamic address
fortinet.fortimanager.fmgr_dynamic_address:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_address_dynamicaddrmapping.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_address_dynamicaddrmapping.py
index 3facee274..53b7d6158 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_address_dynamicaddrmapping.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_address_dynamicaddrmapping.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dynamic_address_dynamicaddrmapping
-short_description: no description
+short_description: Dynamic address dynamic addr mapping
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -111,7 +111,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Dynamic address dynamic addr mapping
fortinet.fortimanager.fmgr_dynamic_address_dynamicaddrmapping:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_certificate_local.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_certificate_local.py
index b3ba32ccf..7358b967c 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_certificate_local.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_certificate_local.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dynamic_certificate_local
-short_description: no description
+short_description: Dynamic certificate local
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -126,7 +126,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Dynamic certificate local
fortinet.fortimanager.fmgr_dynamic_certificate_local:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_certificate_local_dynamicmapping.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_certificate_local_dynamicmapping.py
index 937b5c043..f7f285c12 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_certificate_local_dynamicmapping.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_certificate_local_dynamicmapping.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dynamic_certificate_local_dynamicmapping
-short_description: no description
+short_description: Dynamic certificate local dynamic mapping
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -118,7 +118,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Dynamic certificate local dynamic mapping
fortinet.fortimanager.fmgr_dynamic_certificate_local_dynamicmapping:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_input_interface.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_input_interface.py
index 1b5084624..af47d5c87 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_input_interface.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_input_interface.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dynamic_input_interface
-short_description: no description
+short_description: Dynamic input interface
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -141,7 +141,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Dynamic input interface
fortinet.fortimanager.fmgr_dynamic_input_interface:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_input_interface_dynamicmapping.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_input_interface_dynamicmapping.py
index 21f59ca10..bfcd1ac43 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_input_interface_dynamicmapping.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_input_interface_dynamicmapping.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dynamic_input_interface_dynamicmapping
-short_description: no description
+short_description: Dynamic input interface dynamic mapping
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -118,7 +118,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Dynamic input interface dynamic mapping
fortinet.fortimanager.fmgr_dynamic_input_interface_dynamicmapping:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_interface.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_interface.py
index 60a507714..d310cada9 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_interface.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_interface.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dynamic_interface
-short_description: no description
+short_description: Dynamic interface
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -209,7 +209,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Dynamic interface
fortinet.fortimanager.fmgr_dynamic_interface:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
@@ -352,7 +352,7 @@ def main():
},
'wildcard': {'v_range': [['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'wildcard-intf': {'v_range': [['7.0.1', '']], 'type': 'str'},
- 'zone-only': {'v_range': [['6.4.7', '6.4.13'], ['7.0.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
+ 'zone-only': {'v_range': [['6.4.7', '6.4.14'], ['7.0.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_interface_dynamicmapping.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_interface_dynamicmapping.py
index 19ba12d64..88de8a28b 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_interface_dynamicmapping.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_interface_dynamicmapping.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dynamic_interface_dynamicmapping
-short_description: no description
+short_description: Dynamic interface dynamic mapping
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -130,7 +130,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Dynamic interface dynamic mapping
fortinet.fortimanager.fmgr_dynamic_interface_dynamicmapping:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_interface_platformmapping.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_interface_platformmapping.py
index acd57e7ce..4a59fb839 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_interface_platformmapping.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_interface_platformmapping.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dynamic_interface_platformmapping
-short_description: no description
+short_description: Dynamic interface platform mapping
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -123,7 +123,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Dynamic interface platform mapping
fortinet.fortimanager.fmgr_dynamic_interface_platformmapping:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_ippool.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_ippool.py
index f1ce7de6a..5b0892f65 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_ippool.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_ippool.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dynamic_ippool
-short_description: no description
+short_description: Dynamic ippool
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -107,7 +107,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Dynamic ippool
fortinet.fortimanager.fmgr_dynamic_ippool:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_multicast_interface.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_multicast_interface.py
index 20ed7adc0..0b44cb638 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_multicast_interface.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_multicast_interface.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dynamic_multicast_interface
-short_description: no description
+short_description: Dynamic multicast interface
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -141,7 +141,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Dynamic multicast interface
fortinet.fortimanager.fmgr_dynamic_multicast_interface:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_multicast_interface_dynamicmapping.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_multicast_interface_dynamicmapping.py
index 2385056eb..2c098d199 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_multicast_interface_dynamicmapping.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_multicast_interface_dynamicmapping.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dynamic_multicast_interface_dynamicmapping
-short_description: no description
+short_description: Dynamic multicast interface dynamic mapping
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -118,7 +118,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Dynamic multicast interface dynamic mapping
fortinet.fortimanager.fmgr_dynamic_multicast_interface_dynamicmapping:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_vip.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_vip.py
index 613d4d9be..99c626bd6 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_vip.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_vip.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dynamic_vip
-short_description: no description
+short_description: Dynamic vip
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -107,7 +107,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Dynamic vip
fortinet.fortimanager.fmgr_dynamic_vip:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_virtualwanlink_members.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_virtualwanlink_members.py
index 06a1257e3..461e1e77a 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_virtualwanlink_members.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_virtualwanlink_members.py
@@ -395,69 +395,69 @@ def main():
'adom': {'required': True, 'type': 'str'},
'dynamic_virtualwanlink_members': {
'type': 'dict',
- 'v_range': [['6.0.0', '6.4.13']],
+ 'v_range': [['6.0.0', '6.4.14']],
'options': {
- 'comment': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
- 'cost': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'},
- 'detect-failtime': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'},
- 'detect-http-get': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
- 'detect-http-match': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
- 'detect-http-port': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'},
- 'detect-interval': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'},
- 'detect-protocol': {'v_range': [['6.0.0', '6.4.13']], 'choices': ['ping', 'tcp-echo', 'udp-echo', 'http'], 'type': 'str'},
- 'detect-recoverytime': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'},
- 'detect-server': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
- 'detect-timeout': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'},
+ 'comment': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
+ 'cost': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'},
+ 'detect-failtime': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'},
+ 'detect-http-get': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
+ 'detect-http-match': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
+ 'detect-http-port': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'},
+ 'detect-interval': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'},
+ 'detect-protocol': {'v_range': [['6.0.0', '6.4.14']], 'choices': ['ping', 'tcp-echo', 'udp-echo', 'http'], 'type': 'str'},
+ 'detect-recoverytime': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'},
+ 'detect-server': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
+ 'detect-timeout': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'},
'dynamic_mapping': {
- 'v_range': [['6.0.0', '6.4.13']],
+ 'v_range': [['6.0.0', '6.4.14']],
'type': 'list',
'options': {
'_scope': {
- 'v_range': [['6.0.0', '6.4.13']],
+ 'v_range': [['6.0.0', '6.4.14']],
'type': 'list',
'options': {
- 'name': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
- 'vdom': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'}
+ 'name': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
+ 'vdom': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'}
},
'elements': 'dict'
},
- 'comment': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
- 'cost': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'},
- 'detect-failtime': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'},
- 'detect-http-get': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
- 'detect-http-match': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
- 'detect-http-port': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'},
- 'detect-interval': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'},
- 'detect-protocol': {'v_range': [['6.0.0', '6.4.13']], 'choices': ['ping', 'tcp-echo', 'udp-echo', 'http'], 'type': 'str'},
- 'detect-recoverytime': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'},
- 'detect-server': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
- 'detect-timeout': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'},
- 'gateway': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
- 'gateway6': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
- 'ingress-spillover-threshold': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'},
+ 'comment': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
+ 'cost': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'},
+ 'detect-failtime': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'},
+ 'detect-http-get': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
+ 'detect-http-match': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
+ 'detect-http-port': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'},
+ 'detect-interval': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'},
+ 'detect-protocol': {'v_range': [['6.0.0', '6.4.14']], 'choices': ['ping', 'tcp-echo', 'udp-echo', 'http'], 'type': 'str'},
+ 'detect-recoverytime': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'},
+ 'detect-server': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
+ 'detect-timeout': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'},
+ 'gateway': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
+ 'gateway6': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
+ 'ingress-spillover-threshold': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'},
'interface': {'v_range': [['6.0.0', '6.4.0']], 'type': 'str'},
- 'priority': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'},
- 'source': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
- 'source6': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
- 'spillover-threshold': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'},
- 'status': {'v_range': [['6.0.0', '6.4.13']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'volume-ratio': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'},
- 'weight': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'}
+ 'priority': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'},
+ 'source': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
+ 'source6': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
+ 'spillover-threshold': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'},
+ 'status': {'v_range': [['6.0.0', '6.4.14']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'volume-ratio': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'},
+ 'weight': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'}
},
'elements': 'dict'
},
- 'gateway': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
- 'gateway6': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
- 'ingress-spillover-threshold': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'},
- 'interface': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
- 'name': {'v_range': [['6.0.0', '6.4.13']], 'required': True, 'type': 'str'},
- 'priority': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'},
- 'source': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
- 'source6': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
- 'spillover-threshold': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'},
- 'status': {'v_range': [['6.0.0', '6.4.13']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'volume-ratio': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'},
- 'weight': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'}
+ 'gateway': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
+ 'gateway6': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
+ 'ingress-spillover-threshold': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'},
+ 'interface': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
+ 'name': {'v_range': [['6.0.0', '6.4.14']], 'required': True, 'type': 'str'},
+ 'priority': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'},
+ 'source': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
+ 'source6': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
+ 'spillover-threshold': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'},
+ 'status': {'v_range': [['6.0.0', '6.4.14']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'volume-ratio': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'},
+ 'weight': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_virtualwanlink_members_dynamicmapping.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_virtualwanlink_members_dynamicmapping.py
index fe221a5b2..8068eab44 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_virtualwanlink_members_dynamicmapping.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_virtualwanlink_members_dynamicmapping.py
@@ -293,36 +293,36 @@ def main():
'members': {'required': True, 'type': 'str'},
'dynamic_virtualwanlink_members_dynamicmapping': {
'type': 'dict',
- 'v_range': [['6.0.0', '6.4.13']],
+ 'v_range': [['6.0.0', '6.4.14']],
'options': {
'_scope': {
- 'v_range': [['6.0.0', '6.4.13']],
+ 'v_range': [['6.0.0', '6.4.14']],
'type': 'list',
- 'options': {'name': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'}, 'vdom': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'}},
+ 'options': {'name': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'}, 'vdom': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'}},
'elements': 'dict'
},
- 'comment': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
- 'cost': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'},
- 'detect-failtime': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'},
- 'detect-http-get': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
- 'detect-http-match': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
- 'detect-http-port': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'},
- 'detect-interval': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'},
- 'detect-protocol': {'v_range': [['6.0.0', '6.4.13']], 'choices': ['ping', 'tcp-echo', 'udp-echo', 'http'], 'type': 'str'},
- 'detect-recoverytime': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'},
- 'detect-server': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
- 'detect-timeout': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'},
- 'gateway': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
- 'gateway6': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
- 'ingress-spillover-threshold': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'},
+ 'comment': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
+ 'cost': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'},
+ 'detect-failtime': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'},
+ 'detect-http-get': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
+ 'detect-http-match': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
+ 'detect-http-port': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'},
+ 'detect-interval': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'},
+ 'detect-protocol': {'v_range': [['6.0.0', '6.4.14']], 'choices': ['ping', 'tcp-echo', 'udp-echo', 'http'], 'type': 'str'},
+ 'detect-recoverytime': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'},
+ 'detect-server': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
+ 'detect-timeout': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'},
+ 'gateway': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
+ 'gateway6': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
+ 'ingress-spillover-threshold': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'},
'interface': {'v_range': [['6.0.0', '6.4.0']], 'type': 'str'},
- 'priority': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'},
- 'source': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
- 'source6': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
- 'spillover-threshold': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'},
- 'status': {'v_range': [['6.0.0', '6.4.13']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'volume-ratio': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'},
- 'weight': {'v_range': [['6.0.0', '6.4.13']], 'type': 'int'}
+ 'priority': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'},
+ 'source': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
+ 'source6': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
+ 'spillover-threshold': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'},
+ 'status': {'v_range': [['6.0.0', '6.4.14']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'volume-ratio': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'},
+ 'weight': {'v_range': [['6.0.0', '6.4.14']], 'type': 'int'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_virtualwanlink_neighbor.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_virtualwanlink_neighbor.py
index 645f58437..674119b5a 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_virtualwanlink_neighbor.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_virtualwanlink_neighbor.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dynamic_virtualwanlink_neighbor
-short_description: no description
+short_description: Dynamic virtual wan link neighbor
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -146,7 +146,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Dynamic virtual wan link neighbor
fortinet.fortimanager.fmgr_dynamic_virtualwanlink_neighbor:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
@@ -235,31 +235,31 @@ def main():
'adom': {'required': True, 'type': 'str'},
'dynamic_virtualwanlink_neighbor': {
'type': 'dict',
- 'v_range': [['6.2.2', '6.4.13']],
+ 'v_range': [['6.2.2', '6.4.14']],
'options': {
- 'description': {'v_range': [['6.2.2', '6.4.13']], 'type': 'str'},
+ 'description': {'v_range': [['6.2.2', '6.4.14']], 'type': 'str'},
'dynamic_mapping': {
- 'v_range': [['6.2.2', '6.4.13']],
+ 'v_range': [['6.2.2', '6.4.14']],
'type': 'list',
'options': {
'_scope': {
- 'v_range': [['6.2.2', '6.4.13']],
+ 'v_range': [['6.2.2', '6.4.14']],
'type': 'list',
'options': {
- 'name': {'v_range': [['6.2.2', '6.4.13']], 'type': 'str'},
- 'vdom': {'v_range': [['6.2.2', '6.4.13']], 'type': 'str'}
+ 'name': {'v_range': [['6.2.2', '6.4.14']], 'type': 'str'},
+ 'vdom': {'v_range': [['6.2.2', '6.4.14']], 'type': 'str'}
},
'elements': 'dict'
},
- 'description': {'v_range': [['6.2.2', '6.4.13']], 'type': 'str'},
- 'ip': {'v_range': [['6.2.2', '6.4.13']], 'type': 'str'},
- 'role': {'v_range': [['6.2.2', '6.4.13']], 'choices': ['primary', 'secondary', 'standalone'], 'type': 'str'}
+ 'description': {'v_range': [['6.2.2', '6.4.14']], 'type': 'str'},
+ 'ip': {'v_range': [['6.2.2', '6.4.14']], 'type': 'str'},
+ 'role': {'v_range': [['6.2.2', '6.4.14']], 'choices': ['primary', 'secondary', 'standalone'], 'type': 'str'}
},
'elements': 'dict'
},
- 'ip': {'v_range': [['6.2.2', '6.4.13']], 'type': 'str'},
- 'name': {'v_range': [['6.2.2', '6.4.13']], 'required': True, 'type': 'str'},
- 'role': {'v_range': [['6.2.2', '6.4.13']], 'choices': ['primary', 'secondary', 'standalone'], 'type': 'str'}
+ 'ip': {'v_range': [['6.2.2', '6.4.14']], 'type': 'str'},
+ 'name': {'v_range': [['6.2.2', '6.4.14']], 'required': True, 'type': 'str'},
+ 'role': {'v_range': [['6.2.2', '6.4.14']], 'choices': ['primary', 'secondary', 'standalone'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_virtualwanlink_neighbor_dynamicmapping.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_virtualwanlink_neighbor_dynamicmapping.py
index 1fe2f1b8c..29eff75aa 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_virtualwanlink_neighbor_dynamicmapping.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_virtualwanlink_neighbor_dynamicmapping.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dynamic_virtualwanlink_neighbor_dynamicmapping
-short_description: no description
+short_description: Dynamic virtual wan link neighbor dynamic mapping
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -128,7 +128,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Dynamic virtual wan link neighbor dynamic mapping
fortinet.fortimanager.fmgr_dynamic_virtualwanlink_neighbor_dynamicmapping:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
@@ -213,17 +213,17 @@ def main():
'neighbor': {'required': True, 'type': 'str'},
'dynamic_virtualwanlink_neighbor_dynamicmapping': {
'type': 'dict',
- 'v_range': [['6.2.2', '6.4.13']],
+ 'v_range': [['6.2.2', '6.4.14']],
'options': {
'_scope': {
- 'v_range': [['6.2.2', '6.4.13']],
+ 'v_range': [['6.2.2', '6.4.14']],
'type': 'list',
- 'options': {'name': {'v_range': [['6.2.2', '6.4.13']], 'type': 'str'}, 'vdom': {'v_range': [['6.2.2', '6.4.13']], 'type': 'str'}},
+ 'options': {'name': {'v_range': [['6.2.2', '6.4.14']], 'type': 'str'}, 'vdom': {'v_range': [['6.2.2', '6.4.14']], 'type': 'str'}},
'elements': 'dict'
},
- 'description': {'v_range': [['6.2.2', '6.4.13']], 'type': 'str'},
- 'ip': {'v_range': [['6.2.2', '6.4.13']], 'type': 'str'},
- 'role': {'v_range': [['6.2.2', '6.4.13']], 'choices': ['primary', 'secondary', 'standalone'], 'type': 'str'}
+ 'description': {'v_range': [['6.2.2', '6.4.14']], 'type': 'str'},
+ 'ip': {'v_range': [['6.2.2', '6.4.14']], 'type': 'str'},
+ 'role': {'v_range': [['6.2.2', '6.4.14']], 'choices': ['primary', 'secondary', 'standalone'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_virtualwanlink_server.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_virtualwanlink_server.py
index d668ab682..b46732ade 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_virtualwanlink_server.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_virtualwanlink_server.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dynamic_virtualwanlink_server
-short_description: no description
+short_description: Dynamic virtual wan link server
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -129,7 +129,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Dynamic virtual wan link server
fortinet.fortimanager.fmgr_dynamic_virtualwanlink_server:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
@@ -215,28 +215,28 @@ def main():
'adom': {'required': True, 'type': 'str'},
'dynamic_virtualwanlink_server': {
'type': 'dict',
- 'v_range': [['6.0.0', '6.4.13']],
+ 'v_range': [['6.0.0', '6.4.14']],
'options': {
- 'description': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
+ 'description': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
'dynamic_mapping': {
- 'v_range': [['6.0.0', '6.4.13']],
+ 'v_range': [['6.0.0', '6.4.14']],
'type': 'list',
'options': {
'_scope': {
- 'v_range': [['6.0.0', '6.4.13']],
+ 'v_range': [['6.0.0', '6.4.14']],
'type': 'list',
'options': {
- 'name': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
- 'vdom': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'}
+ 'name': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
+ 'vdom': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'}
},
'elements': 'dict'
},
- 'server': {'v_range': [['6.0.0', '6.4.13']], 'type': 'raw'}
+ 'server': {'v_range': [['6.0.0', '6.4.14']], 'type': 'raw'}
},
'elements': 'dict'
},
- 'name': {'v_range': [['6.0.0', '6.4.13']], 'required': True, 'type': 'str'},
- 'server': {'v_range': [['6.0.0', '6.4.13']], 'type': 'raw'}
+ 'name': {'v_range': [['6.0.0', '6.4.14']], 'required': True, 'type': 'str'},
+ 'server': {'v_range': [['6.0.0', '6.4.14']], 'type': 'raw'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_virtualwanlink_server_dynamicmapping.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_virtualwanlink_server_dynamicmapping.py
index 09b2d07b3..656bd535a 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_virtualwanlink_server_dynamicmapping.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_virtualwanlink_server_dynamicmapping.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dynamic_virtualwanlink_server_dynamicmapping
-short_description: no description
+short_description: Dynamic virtual wan link server dynamic mapping
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -118,7 +118,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Dynamic virtual wan link server dynamic mapping
fortinet.fortimanager.fmgr_dynamic_virtualwanlink_server_dynamicmapping:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
@@ -201,15 +201,15 @@ def main():
'server': {'required': True, 'type': 'str'},
'dynamic_virtualwanlink_server_dynamicmapping': {
'type': 'dict',
- 'v_range': [['6.0.0', '6.4.13']],
+ 'v_range': [['6.0.0', '6.4.14']],
'options': {
'_scope': {
- 'v_range': [['6.0.0', '6.4.13']],
+ 'v_range': [['6.0.0', '6.4.14']],
'type': 'list',
- 'options': {'name': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'}, 'vdom': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'}},
+ 'options': {'name': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'}, 'vdom': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'}},
'elements': 'dict'
},
- 'server': {'v_range': [['6.0.0', '6.4.13']], 'type': 'raw'}
+ 'server': {'v_range': [['6.0.0', '6.4.14']], 'type': 'raw'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_vpntunnel.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_vpntunnel.py
index 383a979e0..0e69a1c03 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_vpntunnel.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_vpntunnel.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dynamic_vpntunnel
-short_description: no description
+short_description: Dynamic vpntunnel
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -126,7 +126,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Dynamic vpntunnel
fortinet.fortimanager.fmgr_dynamic_vpntunnel:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_vpntunnel_dynamicmapping.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_vpntunnel_dynamicmapping.py
index fbede1d47..3a0baf329 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_vpntunnel_dynamicmapping.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_dynamic_vpntunnel_dynamicmapping.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_dynamic_vpntunnel_dynamicmapping
-short_description: no description
+short_description: Dynamic vpntunnel dynamic mapping
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -118,7 +118,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Dynamic vpntunnel dynamic mapping
fortinet.fortimanager.fmgr_dynamic_vpntunnel_dynamicmapping:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_endpointcontrol_fctems.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_endpointcontrol_fctems.py
index 26c0a5ddd..a82844bf1 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_endpointcontrol_fctems.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_endpointcontrol_fctems.py
@@ -405,13 +405,13 @@ def main():
'admin-username': {'v_range': [['7.0.2', '']], 'type': 'str'},
'serial-number': {'v_range': [['7.0.2', '']], 'type': 'str'},
'admin-password': {'v_range': [['7.0.2', '']], 'no_log': True, 'type': 'raw'},
- 'interface': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'type': 'str'},
- 'interface-select-method': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'choices': ['auto', 'sdwan', 'specify'], 'type': 'str'},
- 'dirty-reason': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'choices': ['none', 'mismatched-ems-sn'], 'type': 'str'},
- 'ems-id': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'int'},
- 'status': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'ca-cn-info': {'v_range': [['7.0.6', '7.0.10'], ['7.2.2', '']], 'type': 'str'},
- 'trust-ca-cn': {'v_range': [['7.0.6', '7.0.10'], ['7.2.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'interface': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'type': 'str'},
+ 'interface-select-method': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'choices': ['auto', 'sdwan', 'specify'], 'type': 'str'},
+ 'dirty-reason': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'choices': ['none', 'mismatched-ems-sn'], 'type': 'str'},
+ 'ems-id': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'int'},
+ 'status': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'ca-cn-info': {'v_range': [['7.0.6', '7.0.12'], ['7.2.2', '']], 'type': 'str'},
+ 'trust-ca-cn': {'v_range': [['7.0.6', '7.0.12'], ['7.2.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'tenant-id': {'v_range': [['7.2.1', '']], 'type': 'str'},
'send-tags-to-all-vdoms': {'v_range': [['7.4.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'verified-cn': {'v_range': [['7.4.2', '']], 'type': 'str'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_export_playbooks.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_export_playbooks.py
index 079517380..1b4b29bd1 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_export_playbooks.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_export_playbooks.py
@@ -666,6 +666,7 @@ options:
- 'pm_config_adom_options'
- 'pm_config_application_list'
- 'pm_config_category_list'
+ - 'pm_config_data_defaultsslvpnoschecklist'
- 'pm_config_data_tablesize'
- 'pm_config_data_tablesize_faz'
- 'pm_config_data_tablesize_fmg'
@@ -1870,21 +1871,21 @@ def main():
'urls': [
'/pm/config/adom/{adom}/devprof/{devprof}/log/syslogd/filter/exclude-list/{exclude-list}'
],
- 'v_range': [['7.0.4', '7.0.10']]
+ 'v_range': [['7.0.4', '7.0.12']]
},
'devprof_log_syslogd_filter_excludelist_fields': {
'params': ['devprof', 'exclude-list', 'fields', 'adom'],
'urls': [
'/pm/config/adom/{adom}/devprof/{devprof}/log/syslogd/filter/exclude-list/{exclude-list}/fields/{fields}'
],
- 'v_range': [['7.0.4', '7.0.10']]
+ 'v_range': [['7.0.4', '7.0.12']]
},
'devprof_log_syslogd_filter_freestyle': {
'params': ['devprof', 'free-style', 'adom'],
'urls': [
'/pm/config/adom/{adom}/devprof/{devprof}/log/syslogd/filter/free-style/{free-style}'
],
- 'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']]
+ 'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']]
},
'devprof_log_syslogd_setting': {
'params': ['devprof', 'adom'],
@@ -1898,7 +1899,7 @@ def main():
'urls': [
'/pm/config/adom/{adom}/devprof/{devprof}/log/syslogd/setting/custom-field-name/{custom-field-name}'
],
- 'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']]
+ 'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']]
},
'devprof_system_centralmanagement': {
'params': ['devprof', 'adom'],
@@ -2620,7 +2621,7 @@ def main():
'/pm/config/adom/{adom}/obj/dynamic/virtual-wan-link/members/{members}',
'/pm/config/global/obj/dynamic/virtual-wan-link/members/{members}'
],
- 'v_range': [['6.0.0', '6.4.13']]
+ 'v_range': [['6.0.0', '6.4.14']]
},
'dynamic_virtualwanlink_members_dynamicmapping': {
'params': ['members', 'dynamic_mapping', 'adom'],
@@ -2628,7 +2629,7 @@ def main():
'/pm/config/adom/{adom}/obj/dynamic/virtual-wan-link/members/{members}/dynamic_mapping/{dynamic_mapping}',
'/pm/config/global/obj/dynamic/virtual-wan-link/members/{members}/dynamic_mapping/{dynamic_mapping}'
],
- 'v_range': [['6.0.0', '6.4.13']]
+ 'v_range': [['6.0.0', '6.4.14']]
},
'dynamic_virtualwanlink_neighbor': {
'params': ['neighbor', 'adom'],
@@ -2636,7 +2637,7 @@ def main():
'/pm/config/adom/{adom}/obj/dynamic/virtual-wan-link/neighbor/{neighbor}',
'/pm/config/global/obj/dynamic/virtual-wan-link/neighbor/{neighbor}'
],
- 'v_range': [['6.2.2', '6.4.13']]
+ 'v_range': [['6.2.2', '6.4.14']]
},
'dynamic_virtualwanlink_neighbor_dynamicmapping': {
'params': ['neighbor', 'dynamic_mapping', 'adom'],
@@ -2644,7 +2645,7 @@ def main():
'/pm/config/adom/{adom}/obj/dynamic/virtual-wan-link/neighbor/{neighbor}/dynamic_mapping/{dynamic_mapping}',
'/pm/config/global/obj/dynamic/virtual-wan-link/neighbor/{neighbor}/dynamic_mapping/{dynamic_mapping}'
],
- 'v_range': [['6.2.2', '6.4.13']]
+ 'v_range': [['6.2.2', '6.4.14']]
},
'dynamic_virtualwanlink_server': {
'params': ['server', 'adom'],
@@ -2652,7 +2653,7 @@ def main():
'/pm/config/adom/{adom}/obj/dynamic/virtual-wan-link/server/{server}',
'/pm/config/global/obj/dynamic/virtual-wan-link/server/{server}'
],
- 'v_range': [['6.0.0', '6.4.13']]
+ 'v_range': [['6.0.0', '6.4.14']]
},
'dynamic_virtualwanlink_server_dynamicmapping': {
'params': ['server', 'dynamic_mapping', 'adom'],
@@ -2660,7 +2661,7 @@ def main():
'/pm/config/adom/{adom}/obj/dynamic/virtual-wan-link/server/{server}/dynamic_mapping/{dynamic_mapping}',
'/pm/config/global/obj/dynamic/virtual-wan-link/server/{server}/dynamic_mapping/{dynamic_mapping}'
],
- 'v_range': [['6.0.0', '6.4.13']]
+ 'v_range': [['6.0.0', '6.4.14']]
},
'dynamic_vpntunnel': {
'params': ['vpntunnel', 'adom'],
@@ -3862,7 +3863,7 @@ def main():
'/pm/config/adom/{adom}/obj/firewall/ippool_grp/{ippool_grp}',
'/pm/config/global/obj/firewall/ippool_grp/{ippool_grp}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'firewall_ldbmonitor': {
'params': ['ldb-monitor', 'adom'],
@@ -4318,7 +4319,7 @@ def main():
'/pm/config/adom/{adom}/obj/firewall/vendor-mac',
'/pm/config/global/obj/firewall/vendor-mac'
],
- 'v_range': [['7.2.4', '7.2.4'], ['7.4.1', '']]
+ 'v_range': [['7.2.4', '7.2.5'], ['7.4.1', '']]
},
'firewall_vip': {
'params': ['vip', 'adom'],
@@ -4703,7 +4704,7 @@ def main():
'urls': [
'/cli/global/fmupdate/fwm-setting/upgrade-timeout'
],
- 'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']]
+ 'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']]
},
'fmupdate_multilayer': {
'params': [],
@@ -5593,7 +5594,7 @@ def main():
'/pm/config/adom/{adom}/obj/log/npu-server',
'/pm/config/global/obj/log/npu-server'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'log_npuserver_servergroup': {
'params': ['server-group', 'adom'],
@@ -5601,7 +5602,7 @@ def main():
'/pm/config/adom/{adom}/obj/log/npu-server/server-group/{server-group}',
'/pm/config/global/obj/log/npu-server/server-group/{server-group}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'log_npuserver_serverinfo': {
'params': ['server-info', 'adom'],
@@ -5609,7 +5610,7 @@ def main():
'/pm/config/adom/{adom}/obj/log/npu-server/server-info/{server-info}',
'/pm/config/global/obj/log/npu-server/server-info/{server-info}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'metafields_system_admin_user': {
'params': [],
@@ -5753,28 +5754,28 @@ def main():
'urls': [
'/pm/config/adom/{adom}/pkg/{pkg}/firewall/hyperscale-policy/{hyperscale-policy}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']]
},
'pkg_firewall_hyperscalepolicy46': {
'params': ['pkg', 'hyperscale-policy46', 'adom'],
'urls': [
'/pm/config/adom/{adom}/pkg/{pkg}/firewall/hyperscale-policy46/{hyperscale-policy46}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']]
},
'pkg_firewall_hyperscalepolicy6': {
'params': ['pkg', 'hyperscale-policy6', 'adom'],
'urls': [
'/pm/config/adom/{adom}/pkg/{pkg}/firewall/hyperscale-policy6/{hyperscale-policy6}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']]
},
'pkg_firewall_hyperscalepolicy64': {
'params': ['pkg', 'hyperscale-policy64', 'adom'],
'urls': [
'/pm/config/adom/{adom}/pkg/{pkg}/firewall/hyperscale-policy64/{hyperscale-policy64}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']]
},
'pkg_firewall_interfacepolicy': {
'params': ['pkg', 'interface-policy', 'adom'],
@@ -6003,6 +6004,14 @@ def main():
],
'v_range': [['6.2.0', '']]
},
+ 'pm_config_data_defaultsslvpnoschecklist': {
+ 'params': ['adom'],
+ 'urls': [
+ '/pm/config/adom/{adom}/_data/default_sslvpn_os_check_list',
+ '/pm/config/global/_data/default_sslvpn_os_check_list'
+ ],
+ 'v_range': [['7.2.5', '7.2.5']]
+ },
'pm_config_data_tablesize': {
'params': ['tablesize', 'adom'],
'urls': [
@@ -6097,7 +6106,7 @@ def main():
'urls': [
'/pm/config/adom/{adom}/_package/status/{device_name}/{vdom_name}'
],
- 'v_range': [['7.0.7', '7.0.10'], ['7.2.2', '']]
+ 'v_range': [['7.0.7', '7.0.12'], ['7.2.2', '']]
},
'pm_config_pblock_firewall_consolidated_policy': {
'params': ['pblock', 'policy', 'adom'],
@@ -6341,7 +6350,7 @@ def main():
'/pm/config/adom/{adom}/obj/sctp-filter/profile/{profile}',
'/pm/config/global/obj/sctp-filter/profile/{profile}'
],
- 'v_range': [['7.4.2', '']]
+ 'v_range': [['7.2.5', '7.2.5'], ['7.4.2', '']]
},
'sctpfilter_profile_ppidfilters': {
'params': ['profile', 'ppid-filters', 'adom'],
@@ -6349,7 +6358,7 @@ def main():
'/pm/config/adom/{adom}/obj/sctp-filter/profile/{profile}/ppid-filters/{ppid-filters}',
'/pm/config/global/obj/sctp-filter/profile/{profile}/ppid-filters/{ppid-filters}'
],
- 'v_range': [['7.4.2', '']]
+ 'v_range': [['7.2.5', '7.2.5'], ['7.4.2', '']]
},
'spamfilter_bwl': {
'params': ['bwl', 'adom'],
@@ -7386,7 +7395,7 @@ def main():
'urls': [
'/cli/global/system/guiact'
],
- 'v_range': [['6.0.0', '7.4.0']]
+ 'v_range': [['6.0.0', '7.0.11'], ['7.2.0', '7.2.4'], ['7.4.0', '7.4.0']]
},
'system_ha': {
'params': [],
@@ -7673,7 +7682,7 @@ def main():
'urls': [
'/cli/global/system/log/topology'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '']]
},
'system_logfetch_clientprofile': {
'params': ['client-profile'],
@@ -7746,7 +7755,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu',
'/pm/config/global/obj/system/npu'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_backgroundssescan': {
'params': ['adom'],
@@ -7754,7 +7763,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/background-sse-scan',
'/pm/config/global/obj/system/npu/background-sse-scan'
],
- 'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']]
+ 'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']]
},
'system_npu_dosoptions': {
'params': ['adom'],
@@ -7762,7 +7771,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/dos-options',
'/pm/config/global/obj/system/npu/dos-options'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_dswdtsprofile': {
'params': ['dsw-dts-profile', 'adom'],
@@ -7770,7 +7779,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/dsw-dts-profile/{dsw-dts-profile}',
'/pm/config/global/obj/system/npu/dsw-dts-profile/{dsw-dts-profile}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_dswqueuedtsprofile': {
'params': ['dsw-queue-dts-profile', 'adom'],
@@ -7778,7 +7787,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/dsw-queue-dts-profile/{dsw-queue-dts-profile}',
'/pm/config/global/obj/system/npu/dsw-queue-dts-profile/{dsw-queue-dts-profile}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_fpanomaly': {
'params': ['adom'],
@@ -7786,7 +7795,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/fp-anomaly',
'/pm/config/global/obj/system/npu/fp-anomaly'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_hpe': {
'params': ['adom'],
@@ -7794,7 +7803,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/hpe',
'/pm/config/global/obj/system/npu/hpe'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_ipreassembly': {
'params': ['adom'],
@@ -7802,7 +7811,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/ip-reassembly',
'/pm/config/global/obj/system/npu/ip-reassembly'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_isfnpqueues': {
'params': ['adom'],
@@ -7810,7 +7819,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/isf-np-queues',
'/pm/config/global/obj/system/npu/isf-np-queues'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_npqueues': {
'params': ['adom'],
@@ -7818,7 +7827,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/np-queues',
'/pm/config/global/obj/system/npu/np-queues'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_npqueues_ethernettype': {
'params': ['ethernet-type', 'adom'],
@@ -7826,7 +7835,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/np-queues/ethernet-type/{ethernet-type}',
'/pm/config/global/obj/system/npu/np-queues/ethernet-type/{ethernet-type}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_npqueues_ipprotocol': {
'params': ['ip-protocol', 'adom'],
@@ -7834,7 +7843,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/np-queues/ip-protocol/{ip-protocol}',
'/pm/config/global/obj/system/npu/np-queues/ip-protocol/{ip-protocol}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_npqueues_ipservice': {
'params': ['ip-service', 'adom'],
@@ -7842,7 +7851,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/np-queues/ip-service/{ip-service}',
'/pm/config/global/obj/system/npu/np-queues/ip-service/{ip-service}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_npqueues_profile': {
'params': ['profile', 'adom'],
@@ -7850,7 +7859,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/np-queues/profile/{profile}',
'/pm/config/global/obj/system/npu/np-queues/profile/{profile}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_npqueues_scheduler': {
'params': ['scheduler', 'adom'],
@@ -7858,7 +7867,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/np-queues/scheduler/{scheduler}',
'/pm/config/global/obj/system/npu/np-queues/scheduler/{scheduler}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_nputcam': {
'params': ['npu-tcam', 'adom'],
@@ -7922,7 +7931,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/port-cpu-map/{port-cpu-map}',
'/pm/config/global/obj/system/npu/port-cpu-map/{port-cpu-map}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_portnpumap': {
'params': ['port-npu-map', 'adom'],
@@ -7930,7 +7939,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/port-npu-map/{port-npu-map}',
'/pm/config/global/obj/system/npu/port-npu-map/{port-npu-map}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_portpathoption': {
'params': ['adom'],
@@ -7938,7 +7947,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/port-path-option',
'/pm/config/global/obj/system/npu/port-path-option'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_priorityprotocol': {
'params': ['adom'],
@@ -7946,7 +7955,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/priority-protocol',
'/pm/config/global/obj/system/npu/priority-protocol'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_ssehascan': {
'params': ['adom'],
@@ -7954,7 +7963,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/sse-ha-scan',
'/pm/config/global/obj/system/npu/sse-ha-scan'
],
- 'v_range': [['6.4.10', '6.4.13'], ['7.0.4', '7.0.10'], ['7.2.1', '']]
+ 'v_range': [['6.4.10', '6.4.14'], ['7.0.4', '7.0.12'], ['7.2.1', '']]
},
'system_npu_swehhash': {
'params': ['adom'],
@@ -7978,7 +7987,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/tcp-timeout-profile/{tcp-timeout-profile}',
'/pm/config/global/obj/system/npu/tcp-timeout-profile/{tcp-timeout-profile}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_udptimeoutprofile': {
'params': ['udp-timeout-profile', 'adom'],
@@ -7986,7 +7995,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/udp-timeout-profile/{udp-timeout-profile}',
'/pm/config/global/obj/system/npu/udp-timeout-profile/{udp-timeout-profile}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_ntp': {
'params': [],
@@ -8008,7 +8017,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/object-tag/{object-tag}',
'/pm/config/global/obj/system/object-tag/{object-tag}'
],
- 'v_range': [['6.2.0', '6.4.13']]
+ 'v_range': [['6.2.0', '6.4.14']]
},
'system_objecttagging': {
'params': ['object-tagging', 'adom'],
@@ -8363,7 +8372,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/sdn-connector/{sdn-connector}/gcp-project-list/{gcp-project-list}',
'/pm/config/global/obj/system/sdn-connector/{sdn-connector}/gcp-project-list/{gcp-project-list}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '']]
},
'system_sdnconnector_nic': {
'params': ['sdn-connector', 'nic', 'adom'],
@@ -8518,7 +8527,7 @@ def main():
'urls': [
'/cli/global/system/global/ssl-cipher-suites/{ssl-cipher-suites}'
],
- 'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']]
+ 'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']]
},
'system_status': {
'params': [],
@@ -8547,7 +8556,7 @@ def main():
'urls': [
'/cli/global/system/web-proxy'
],
- 'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']]
+ 'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']]
},
'system_workflow_approvalmatrix': {
'params': ['approval-matrix'],
@@ -8621,7 +8630,7 @@ def main():
'/pm/config/adom/{adom}/obj/user/certificate/{certificate}',
'/pm/config/global/obj/user/certificate/{certificate}'
],
- 'v_range': [['7.0.8', '7.0.10'], ['7.2.3', '']]
+ 'v_range': [['7.0.8', '7.0.12'], ['7.2.3', '']]
},
'user_clearpass': {
'params': ['clearpass', 'adom'],
@@ -8981,7 +8990,7 @@ def main():
'/pm/config/adom/{adom}/obj/user/saml/{saml}/dynamic_mapping/{dynamic_mapping}',
'/pm/config/global/obj/user/saml/{saml}/dynamic_mapping/{dynamic_mapping}'
],
- 'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '7.4.0']]
+ 'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '7.4.0']]
},
'user_securityexemptlist': {
'params': ['security-exempt-list', 'adom'],
@@ -10832,6 +10841,7 @@ def main():
'pm_config_adom_options',
'pm_config_application_list',
'pm_config_category_list',
+ 'pm_config_data_defaultsslvpnoschecklist',
'pm_config_data_tablesize',
'pm_config_data_tablesize_faz',
'pm_config_data_tablesize_fmg',
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_extendercontroller_simprofile.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_extendercontroller_simprofile.py
index c6c50583e..b9765fe10 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_extendercontroller_simprofile.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_extendercontroller_simprofile.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_extendercontroller_simprofile
-short_description: no description
+short_description: Extender controller sim profile
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -210,7 +210,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Extender controller sim profile
fortinet.fortimanager.fmgr_extendercontroller_simprofile:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_extendercontroller_simprofile_autoswitchprofile.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_extendercontroller_simprofile_autoswitchprofile.py
index e97adf5f4..1d19ff438 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_extendercontroller_simprofile_autoswitchprofile.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_extendercontroller_simprofile_autoswitchprofile.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_extendercontroller_simprofile_autoswitchprofile
-short_description: no description
+short_description: Extender controller sim profile auto switch profile
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -138,7 +138,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Extender controller sim profile auto switch profile
fortinet.fortimanager.fmgr_extendercontroller_simprofile_autoswitchprofile:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_extendercontroller_template.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_extendercontroller_template.py
index adffccddf..d3b20b411 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_extendercontroller_template.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_extendercontroller_template.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_extendercontroller_template
-short_description: no description
+short_description: Extender controller template
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -122,7 +122,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Extender controller template
fortinet.fortimanager.fmgr_extendercontroller_template:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fact.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fact.py
index 00bd5dae6..70d14edc1 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fact.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fact.py
@@ -674,6 +674,7 @@ options:
- 'pm_config_adom_options'
- 'pm_config_application_list'
- 'pm_config_category_list'
+ - 'pm_config_data_defaultsslvpnoschecklist'
- 'pm_config_data_tablesize'
- 'pm_config_data_tablesize_faz'
- 'pm_config_data_tablesize_fmg'
@@ -1912,21 +1913,21 @@ def main():
'urls': [
'/pm/config/adom/{adom}/devprof/{devprof}/log/syslogd/filter/exclude-list/{exclude-list}'
],
- 'v_range': [['7.0.4', '7.0.10']]
+ 'v_range': [['7.0.4', '7.0.12']]
},
'devprof_log_syslogd_filter_excludelist_fields': {
'params': ['devprof', 'exclude-list', 'fields', 'adom'],
'urls': [
'/pm/config/adom/{adom}/devprof/{devprof}/log/syslogd/filter/exclude-list/{exclude-list}/fields/{fields}'
],
- 'v_range': [['7.0.4', '7.0.10']]
+ 'v_range': [['7.0.4', '7.0.12']]
},
'devprof_log_syslogd_filter_freestyle': {
'params': ['devprof', 'free-style', 'adom'],
'urls': [
'/pm/config/adom/{adom}/devprof/{devprof}/log/syslogd/filter/free-style/{free-style}'
],
- 'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']]
+ 'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']]
},
'devprof_log_syslogd_setting': {
'params': ['devprof', 'adom'],
@@ -1940,7 +1941,7 @@ def main():
'urls': [
'/pm/config/adom/{adom}/devprof/{devprof}/log/syslogd/setting/custom-field-name/{custom-field-name}'
],
- 'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']]
+ 'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']]
},
'devprof_system_centralmanagement': {
'params': ['devprof', 'adom'],
@@ -2618,7 +2619,7 @@ def main():
'/pm/config/adom/{adom}/obj/dynamic/virtual-wan-link/members/{members}',
'/pm/config/global/obj/dynamic/virtual-wan-link/members/{members}'
],
- 'v_range': [['6.0.0', '6.4.13']]
+ 'v_range': [['6.0.0', '6.4.14']]
},
'dynamic_virtualwanlink_members_dynamicmapping': {
'params': ['members', 'dynamic_mapping', 'adom'],
@@ -2626,7 +2627,7 @@ def main():
'/pm/config/adom/{adom}/obj/dynamic/virtual-wan-link/members/{members}/dynamic_mapping/{dynamic_mapping}',
'/pm/config/global/obj/dynamic/virtual-wan-link/members/{members}/dynamic_mapping/{dynamic_mapping}'
],
- 'v_range': [['6.0.0', '6.4.13']]
+ 'v_range': [['6.0.0', '6.4.14']]
},
'dynamic_virtualwanlink_neighbor': {
'params': ['neighbor', 'adom'],
@@ -2634,7 +2635,7 @@ def main():
'/pm/config/adom/{adom}/obj/dynamic/virtual-wan-link/neighbor/{neighbor}',
'/pm/config/global/obj/dynamic/virtual-wan-link/neighbor/{neighbor}'
],
- 'v_range': [['6.2.2', '6.4.13']]
+ 'v_range': [['6.2.2', '6.4.14']]
},
'dynamic_virtualwanlink_neighbor_dynamicmapping': {
'params': ['neighbor', 'dynamic_mapping', 'adom'],
@@ -2642,7 +2643,7 @@ def main():
'/pm/config/adom/{adom}/obj/dynamic/virtual-wan-link/neighbor/{neighbor}/dynamic_mapping/{dynamic_mapping}',
'/pm/config/global/obj/dynamic/virtual-wan-link/neighbor/{neighbor}/dynamic_mapping/{dynamic_mapping}'
],
- 'v_range': [['6.2.2', '6.4.13']]
+ 'v_range': [['6.2.2', '6.4.14']]
},
'dynamic_virtualwanlink_server': {
'params': ['server', 'adom'],
@@ -2650,7 +2651,7 @@ def main():
'/pm/config/adom/{adom}/obj/dynamic/virtual-wan-link/server/{server}',
'/pm/config/global/obj/dynamic/virtual-wan-link/server/{server}'
],
- 'v_range': [['6.0.0', '6.4.13']]
+ 'v_range': [['6.0.0', '6.4.14']]
},
'dynamic_virtualwanlink_server_dynamicmapping': {
'params': ['server', 'dynamic_mapping', 'adom'],
@@ -2658,7 +2659,7 @@ def main():
'/pm/config/adom/{adom}/obj/dynamic/virtual-wan-link/server/{server}/dynamic_mapping/{dynamic_mapping}',
'/pm/config/global/obj/dynamic/virtual-wan-link/server/{server}/dynamic_mapping/{dynamic_mapping}'
],
- 'v_range': [['6.0.0', '6.4.13']]
+ 'v_range': [['6.0.0', '6.4.14']]
},
'dynamic_vpntunnel': {
'params': ['vpntunnel', 'adom'],
@@ -3820,7 +3821,7 @@ def main():
'/pm/config/adom/{adom}/obj/firewall/ippool_grp/{ippool_grp}',
'/pm/config/global/obj/firewall/ippool_grp/{ippool_grp}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'firewall_ldbmonitor': {
'params': ['ldb-monitor', 'adom'],
@@ -4230,7 +4231,7 @@ def main():
'/pm/config/adom/{adom}/obj/firewall/vendor-mac',
'/pm/config/global/obj/firewall/vendor-mac'
],
- 'v_range': [['7.2.4', '7.2.4'], ['7.4.1', '']]
+ 'v_range': [['7.2.4', '7.2.5'], ['7.4.1', '']]
},
'firewall_vip': {
'params': ['vip', 'adom'],
@@ -4585,7 +4586,7 @@ def main():
'urls': [
'/cli/global/fmupdate/fwm-setting/upgrade-timeout'
],
- 'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']]
+ 'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']]
},
'fmupdate_multilayer': {
'params': [],
@@ -5421,7 +5422,7 @@ def main():
'/pm/config/adom/{adom}/obj/log/npu-server',
'/pm/config/global/obj/log/npu-server'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'log_npuserver_servergroup': {
'params': ['server-group', 'adom'],
@@ -5429,7 +5430,7 @@ def main():
'/pm/config/adom/{adom}/obj/log/npu-server/server-group/{server-group}',
'/pm/config/global/obj/log/npu-server/server-group/{server-group}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'log_npuserver_serverinfo': {
'params': ['server-info', 'adom'],
@@ -5437,7 +5438,7 @@ def main():
'/pm/config/adom/{adom}/obj/log/npu-server/server-info/{server-info}',
'/pm/config/global/obj/log/npu-server/server-info/{server-info}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'metafields_system_admin_user': {
'params': [],
@@ -5574,28 +5575,28 @@ def main():
'urls': [
'/pm/config/adom/{adom}/pkg/{pkg}/firewall/hyperscale-policy/{hyperscale-policy}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']]
},
'pkg_firewall_hyperscalepolicy46': {
'params': ['pkg', 'hyperscale-policy46', 'adom'],
'urls': [
'/pm/config/adom/{adom}/pkg/{pkg}/firewall/hyperscale-policy46/{hyperscale-policy46}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']]
},
'pkg_firewall_hyperscalepolicy6': {
'params': ['pkg', 'hyperscale-policy6', 'adom'],
'urls': [
'/pm/config/adom/{adom}/pkg/{pkg}/firewall/hyperscale-policy6/{hyperscale-policy6}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']]
},
'pkg_firewall_hyperscalepolicy64': {
'params': ['pkg', 'hyperscale-policy64', 'adom'],
'urls': [
'/pm/config/adom/{adom}/pkg/{pkg}/firewall/hyperscale-policy64/{hyperscale-policy64}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']]
},
'pkg_firewall_interfacepolicy': {
'params': ['pkg', 'interface-policy', 'adom'],
@@ -5806,6 +5807,14 @@ def main():
],
'v_range': [['6.2.0', '']]
},
+ 'pm_config_data_defaultsslvpnoschecklist': {
+ 'params': ['adom'],
+ 'urls': [
+ '/pm/config/adom/{adom}/_data/default_sslvpn_os_check_list',
+ '/pm/config/global/_data/default_sslvpn_os_check_list'
+ ],
+ 'v_range': [['7.2.5', '7.2.5']]
+ },
'pm_config_data_tablesize': {
'params': ['tablesize', 'adom'],
'urls': [
@@ -5900,7 +5909,7 @@ def main():
'urls': [
'/pm/config/adom/{adom}/_package/status/{device_name}/{vdom_name}'
],
- 'v_range': [['7.0.7', '7.0.10'], ['7.2.2', '']]
+ 'v_range': [['7.0.7', '7.0.12'], ['7.2.2', '']]
},
'pm_config_pblock_firewall_consolidated_policy': {
'params': ['pblock', 'policy', 'adom'],
@@ -6135,7 +6144,7 @@ def main():
'/pm/config/adom/{adom}/obj/sctp-filter/profile/{profile}',
'/pm/config/global/obj/sctp-filter/profile/{profile}'
],
- 'v_range': [['7.4.2', '']]
+ 'v_range': [['7.2.5', '7.2.5'], ['7.4.2', '']]
},
'sctpfilter_profile_ppidfilters': {
'params': ['profile', 'ppid-filters', 'adom'],
@@ -6143,7 +6152,7 @@ def main():
'/pm/config/adom/{adom}/obj/sctp-filter/profile/{profile}/ppid-filters/{ppid-filters}',
'/pm/config/global/obj/sctp-filter/profile/{profile}/ppid-filters/{ppid-filters}'
],
- 'v_range': [['7.4.2', '']]
+ 'v_range': [['7.2.5', '7.2.5'], ['7.4.2', '']]
},
'spamfilter_bwl': {
'params': ['bwl', 'adom'],
@@ -7112,7 +7121,7 @@ def main():
'urls': [
'/cli/global/system/guiact'
],
- 'v_range': [['6.0.0', '7.4.0']]
+ 'v_range': [['6.0.0', '7.0.11'], ['7.2.0', '7.2.4'], ['7.4.0', '7.4.0']]
},
'system_ha': {
'params': [],
@@ -7371,7 +7380,7 @@ def main():
'urls': [
'/cli/global/system/log/topology'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '']]
},
'system_logfetch_clientprofile': {
'params': ['client-profile'],
@@ -7440,7 +7449,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu',
'/pm/config/global/obj/system/npu'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_backgroundssescan': {
'params': ['adom'],
@@ -7448,7 +7457,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/background-sse-scan',
'/pm/config/global/obj/system/npu/background-sse-scan'
],
- 'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']]
+ 'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']]
},
'system_npu_dosoptions': {
'params': ['adom'],
@@ -7456,7 +7465,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/dos-options',
'/pm/config/global/obj/system/npu/dos-options'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_dswdtsprofile': {
'params': ['dsw-dts-profile', 'adom'],
@@ -7464,7 +7473,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/dsw-dts-profile/{dsw-dts-profile}',
'/pm/config/global/obj/system/npu/dsw-dts-profile/{dsw-dts-profile}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_dswqueuedtsprofile': {
'params': ['dsw-queue-dts-profile', 'adom'],
@@ -7472,7 +7481,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/dsw-queue-dts-profile/{dsw-queue-dts-profile}',
'/pm/config/global/obj/system/npu/dsw-queue-dts-profile/{dsw-queue-dts-profile}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_fpanomaly': {
'params': ['adom'],
@@ -7480,7 +7489,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/fp-anomaly',
'/pm/config/global/obj/system/npu/fp-anomaly'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_hpe': {
'params': ['adom'],
@@ -7488,7 +7497,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/hpe',
'/pm/config/global/obj/system/npu/hpe'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_ipreassembly': {
'params': ['adom'],
@@ -7496,7 +7505,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/ip-reassembly',
'/pm/config/global/obj/system/npu/ip-reassembly'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_isfnpqueues': {
'params': ['adom'],
@@ -7504,7 +7513,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/isf-np-queues',
'/pm/config/global/obj/system/npu/isf-np-queues'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_npqueues': {
'params': ['adom'],
@@ -7512,7 +7521,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/np-queues',
'/pm/config/global/obj/system/npu/np-queues'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_npqueues_ethernettype': {
'params': ['ethernet-type', 'adom'],
@@ -7520,7 +7529,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/np-queues/ethernet-type/{ethernet-type}',
'/pm/config/global/obj/system/npu/np-queues/ethernet-type/{ethernet-type}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_npqueues_ipprotocol': {
'params': ['ip-protocol', 'adom'],
@@ -7528,7 +7537,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/np-queues/ip-protocol/{ip-protocol}',
'/pm/config/global/obj/system/npu/np-queues/ip-protocol/{ip-protocol}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_npqueues_ipservice': {
'params': ['ip-service', 'adom'],
@@ -7536,7 +7545,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/np-queues/ip-service/{ip-service}',
'/pm/config/global/obj/system/npu/np-queues/ip-service/{ip-service}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_npqueues_profile': {
'params': ['profile', 'adom'],
@@ -7544,7 +7553,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/np-queues/profile/{profile}',
'/pm/config/global/obj/system/npu/np-queues/profile/{profile}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_npqueues_scheduler': {
'params': ['scheduler', 'adom'],
@@ -7552,7 +7561,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/np-queues/scheduler/{scheduler}',
'/pm/config/global/obj/system/npu/np-queues/scheduler/{scheduler}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_nputcam': {
'params': ['npu-tcam', 'adom'],
@@ -7616,7 +7625,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/port-cpu-map/{port-cpu-map}',
'/pm/config/global/obj/system/npu/port-cpu-map/{port-cpu-map}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_portnpumap': {
'params': ['port-npu-map', 'adom'],
@@ -7624,7 +7633,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/port-npu-map/{port-npu-map}',
'/pm/config/global/obj/system/npu/port-npu-map/{port-npu-map}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_portpathoption': {
'params': ['adom'],
@@ -7632,7 +7641,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/port-path-option',
'/pm/config/global/obj/system/npu/port-path-option'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_priorityprotocol': {
'params': ['adom'],
@@ -7640,7 +7649,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/priority-protocol',
'/pm/config/global/obj/system/npu/priority-protocol'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_ssehascan': {
'params': ['adom'],
@@ -7648,7 +7657,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/sse-ha-scan',
'/pm/config/global/obj/system/npu/sse-ha-scan'
],
- 'v_range': [['6.4.10', '6.4.13'], ['7.0.4', '7.0.10'], ['7.2.1', '']]
+ 'v_range': [['6.4.10', '6.4.14'], ['7.0.4', '7.0.12'], ['7.2.1', '']]
},
'system_npu_swehhash': {
'params': ['adom'],
@@ -7672,7 +7681,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/tcp-timeout-profile/{tcp-timeout-profile}',
'/pm/config/global/obj/system/npu/tcp-timeout-profile/{tcp-timeout-profile}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_udptimeoutprofile': {
'params': ['udp-timeout-profile', 'adom'],
@@ -7680,7 +7689,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/udp-timeout-profile/{udp-timeout-profile}',
'/pm/config/global/obj/system/npu/udp-timeout-profile/{udp-timeout-profile}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_ntp': {
'params': [],
@@ -7700,7 +7709,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/object-tag/{object-tag}',
'/pm/config/global/obj/system/object-tag/{object-tag}'
],
- 'v_range': [['6.2.0', '6.4.13']]
+ 'v_range': [['6.2.0', '6.4.14']]
},
'system_objecttagging': {
'params': ['object-tagging', 'adom'],
@@ -8016,7 +8025,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/sdn-connector/{sdn-connector}/gcp-project-list/{gcp-project-list}',
'/pm/config/global/obj/system/sdn-connector/{sdn-connector}/gcp-project-list/{gcp-project-list}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '']]
},
'system_sdnconnector_nic': {
'params': ['sdn-connector', 'nic', 'adom'],
@@ -8157,7 +8166,7 @@ def main():
'urls': [
'/cli/global/system/global/ssl-cipher-suites/{ssl-cipher-suites}'
],
- 'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']]
+ 'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']]
},
'system_status': {
'params': [],
@@ -8183,7 +8192,7 @@ def main():
'urls': [
'/cli/global/system/web-proxy'
],
- 'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']]
+ 'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']]
},
'system_workflow_approvalmatrix': {
'params': ['approval-matrix'],
@@ -8250,7 +8259,7 @@ def main():
'/pm/config/adom/{adom}/obj/user/certificate/{certificate}',
'/pm/config/global/obj/user/certificate/{certificate}'
],
- 'v_range': [['7.0.8', '7.0.10'], ['7.2.3', '']]
+ 'v_range': [['7.0.8', '7.0.12'], ['7.2.3', '']]
},
'user_clearpass': {
'params': ['clearpass', 'adom'],
@@ -8592,7 +8601,7 @@ def main():
'/pm/config/adom/{adom}/obj/user/saml/{saml}/dynamic_mapping/{dynamic_mapping}',
'/pm/config/global/obj/user/saml/{saml}/dynamic_mapping/{dynamic_mapping}'
],
- 'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '7.4.0']]
+ 'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '7.4.0']]
},
'user_securityexemptlist': {
'params': ['security-exempt-list', 'adom'],
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_accessproxyvirtualhost.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_accessproxyvirtualhost.py
index 9318ff4d4..41f82dc25 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_accessproxyvirtualhost.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_accessproxyvirtualhost.py
@@ -206,7 +206,7 @@ def main():
'host-type': {'v_range': [['7.0.1', '']], 'choices': ['sub-string', 'wildcard'], 'type': 'str'},
'name': {'v_range': [['7.0.1', '']], 'required': True, 'type': 'str'},
'ssl-certificate': {'v_range': [['7.0.1', '']], 'type': 'str'},
- 'replacemsg-group': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'str'}
+ 'replacemsg-group': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_address.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_address.py
index efd887012..56ddfd82f 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_address.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_address.py
@@ -864,7 +864,7 @@ def main():
'interface': {'v_range': [['6.2.0', '']], 'type': 'str'},
'sdn-addr-type': {'v_range': [['6.2.0', '']], 'choices': ['private', 'public', 'all'], 'type': 'str'},
'start-mac': {'v_range': [['6.2.0', '']], 'type': 'str'},
- 'tags': {'v_range': [['6.2.0', '6.4.13']], 'type': 'str'},
+ 'tags': {'v_range': [['6.2.0', '6.4.14']], 'type': 'str'},
'profile-list': {
'v_range': [['6.2.0', '6.2.12']],
'type': 'list',
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_address6.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_address6.py
index 9ba4227bd..4cddc70ec 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_address6.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_address6.py
@@ -568,7 +568,7 @@ def main():
'type': {'choices': ['ipprefix', 'iprange', 'nsx', 'dynamic', 'fqdn', 'template', 'mac', 'geography', 'route-tag'], 'type': 'str'},
'uuid': {'type': 'str'},
'visibility': {'choices': ['disable', 'enable'], 'type': 'str'},
- 'tags': {'v_range': [['6.2.0', '6.4.13']], 'type': 'str'},
+ 'tags': {'v_range': [['6.2.0', '6.4.14']], 'type': 'str'},
'profile-list': {
'v_range': [['6.2.0', '6.2.12']],
'type': 'list',
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_addrgrp.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_addrgrp.py
index 908adc46e..5d71047bc 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_addrgrp.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_addrgrp.py
@@ -391,7 +391,7 @@ def main():
'visibility': {'choices': ['disable', 'enable'], 'type': 'str'},
'exclude': {'v_range': [['6.2.0', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'exclude-member': {'v_range': [['6.2.0', '']], 'type': 'raw'},
- 'tags': {'v_range': [['6.2.0', '6.4.13']], 'type': 'str'},
+ 'tags': {'v_range': [['6.2.0', '6.4.14']], 'type': 'str'},
'_image-base64': {'v_range': [['6.2.2', '']], 'type': 'str'},
'global-object': {'v_range': [['6.4.0', '']], 'type': 'int'},
'type': {'v_range': [['6.4.0', '']], 'choices': ['default', 'array', 'folder'], 'type': 'str'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_addrgrp6.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_addrgrp6.py
index e8d60a502..60922ccf5 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_addrgrp6.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_addrgrp6.py
@@ -343,7 +343,7 @@ def main():
},
'uuid': {'type': 'str'},
'visibility': {'choices': ['disable', 'enable'], 'type': 'str'},
- 'tags': {'v_range': [['6.2.0', '6.4.13']], 'type': 'str'},
+ 'tags': {'v_range': [['6.2.0', '6.4.14']], 'type': 'str'},
'_image-base64': {'v_range': [['6.2.2', '']], 'type': 'str'},
'global-object': {'v_range': [['6.4.0', '']], 'type': 'int'},
'fabric-object': {'v_range': [['6.4.4', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_casbprofile.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_casbprofile.py
index 16b0a0520..7699f2cf1 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_casbprofile.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_casbprofile.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_firewall_casbprofile
-short_description: no description
+short_description: Firewall casb profile
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -193,7 +193,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Firewall casb profile
fortinet.fortimanager.fmgr_firewall_casbprofile:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_casbprofile_saasapplication.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_casbprofile_saasapplication.py
index 22f1db879..09f884f21 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_casbprofile_saasapplication.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_casbprofile_saasapplication.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_firewall_casbprofile_saasapplication
-short_description: no description
+short_description: Firewall casb profile saas application
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -191,7 +191,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Firewall casb profile saas application
fortinet.fortimanager.fmgr_firewall_casbprofile_saasapplication:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_casbprofile_saasapplication_accessrule.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_casbprofile_saasapplication_accessrule.py
index e1413728c..5cd1d8a67 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_casbprofile_saasapplication_accessrule.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_casbprofile_saasapplication_accessrule.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_firewall_casbprofile_saasapplication_accessrule
-short_description: no description
+short_description: Firewall casb profile saas application access rule
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -133,7 +133,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Firewall casb profile saas application access rule
fortinet.fortimanager.fmgr_firewall_casbprofile_saasapplication_accessrule:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_casbprofile_saasapplication_customcontrol.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_casbprofile_saasapplication_customcontrol.py
index b6d090b1f..1faf31085 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_casbprofile_saasapplication_customcontrol.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_casbprofile_saasapplication_customcontrol.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_firewall_casbprofile_saasapplication_customcontrol
-short_description: no description
+short_description: Firewall casb profile saas application custom control
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -128,7 +128,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Firewall casb profile saas application custom control
fortinet.fortimanager.fmgr_firewall_casbprofile_saasapplication_customcontrol:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_casbprofile_saasapplication_customcontrol_option.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_casbprofile_saasapplication_customcontrol_option.py
index 1fd578a9e..83f958b84 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_casbprofile_saasapplication_customcontrol_option.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_casbprofile_saasapplication_customcontrol_option.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_firewall_casbprofile_saasapplication_customcontrol_option
-short_description: no description
+short_description: Firewall casb profile saas application custom control option
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -126,7 +126,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Firewall casb profile saas application custom control option
fortinet.fortimanager.fmgr_firewall_casbprofile_saasapplication_customcontrol_option:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_ippool.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_ippool.py
index bbece66f9..a9748888b 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_ippool.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_ippool.py
@@ -501,9 +501,9 @@ def main():
'port-per-user': {'v_range': [['7.0.0', '']], 'type': 'int'},
'startport': {'v_range': [['7.0.0', '']], 'type': 'int'},
'add-nat64-route': {'v_range': [['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'cgn-client-ipv6shift': {'v_range': [['6.2.9', '6.2.12'], ['6.4.7', '6.4.13'], ['7.0.2', '']], 'type': 'int'},
+ 'cgn-client-ipv6shift': {'v_range': [['6.2.9', '6.2.12'], ['6.4.7', '6.4.14'], ['7.0.2', '']], 'type': 'int'},
'nat64': {'v_range': [['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'subnet-broadcast-in-ippool': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'subnet-broadcast-in-ippool': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'exclude-ip': {'v_range': [['7.2.2', '']], 'type': 'raw'}
},
'elements': 'dict'
@@ -532,8 +532,8 @@ def main():
'startport': {'v_range': [['7.0.0', '']], 'type': 'int'},
'add-nat64-route': {'v_range': [['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'nat64': {'v_range': [['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'cgn-client-ipv6shift': {'v_range': [['6.2.9', '6.2.12'], ['6.4.7', '6.4.13'], ['7.0.2', '']], 'type': 'int'},
- 'subnet-broadcast-in-ippool': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'cgn-client-ipv6shift': {'v_range': [['6.2.9', '6.2.12'], ['6.4.7', '6.4.14'], ['7.0.2', '']], 'type': 'int'},
+ 'subnet-broadcast-in-ippool': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'exclude-ip': {'v_range': [['7.2.2', '']], 'type': 'raw'}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_ippool_dynamicmapping.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_ippool_dynamicmapping.py
index 1ac8759cc..9ae4eaf64 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_ippool_dynamicmapping.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_ippool_dynamicmapping.py
@@ -367,9 +367,9 @@ def main():
'port-per-user': {'v_range': [['7.0.0', '']], 'type': 'int'},
'startport': {'v_range': [['7.0.0', '']], 'type': 'int'},
'add-nat64-route': {'v_range': [['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'cgn-client-ipv6shift': {'v_range': [['6.2.9', '6.2.12'], ['6.4.7', '6.4.13'], ['7.0.2', '']], 'type': 'int'},
+ 'cgn-client-ipv6shift': {'v_range': [['6.2.9', '6.2.12'], ['6.4.7', '6.4.14'], ['7.0.2', '']], 'type': 'int'},
'nat64': {'v_range': [['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'subnet-broadcast-in-ippool': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'subnet-broadcast-in-ippool': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'exclude-ip': {'v_range': [['7.2.2', '']], 'type': 'raw'}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_ippoolgrp.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_ippoolgrp.py
index 65d2154de..543ef9a65 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_ippoolgrp.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_ippoolgrp.py
@@ -193,12 +193,12 @@ def main():
'adom': {'required': True, 'type': 'str'},
'firewall_ippoolgrp': {
'type': 'dict',
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'options': {
- 'comments': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'member': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'raw'},
- 'name': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'required': True, 'type': 'str'},
- 'uuid': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'}
+ 'comments': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'member': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'raw'},
+ 'name': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'required': True, 'type': 'str'},
+ 'uuid': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_multicastaddress.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_multicastaddress.py
index c45a9d699..fa2a79802 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_multicastaddress.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_multicastaddress.py
@@ -262,7 +262,7 @@ def main():
},
'type': {'choices': ['multicastrange', 'broadcastmask'], 'type': 'str'},
'visibility': {'choices': ['disable', 'enable'], 'type': 'str'},
- 'tags': {'v_range': [['6.2.0', '6.4.13']], 'type': 'str'}
+ 'tags': {'v_range': [['6.2.0', '6.4.14']], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_multicastaddress6.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_multicastaddress6.py
index f2d55c069..aaf4fa476 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_multicastaddress6.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_multicastaddress6.py
@@ -242,7 +242,7 @@ def main():
'elements': 'dict'
},
'visibility': {'choices': ['disable', 'enable'], 'type': 'str'},
- 'tags': {'v_range': [['6.2.0', '6.4.13']], 'type': 'str'}
+ 'tags': {'v_range': [['6.2.0', '6.4.14']], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_profileprotocoloptions.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_profileprotocoloptions.py
index f48f11147..20919c211 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_profileprotocoloptions.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_profileprotocoloptions.py
@@ -1054,7 +1054,7 @@ def main():
'tcp-window-minimum': {'v_range': [['7.0.0', '']], 'type': 'int'},
'tcp-window-size': {'v_range': [['7.0.0', '']], 'type': 'int'},
'tcp-window-type': {'v_range': [['7.0.0', '']], 'choices': ['system', 'static', 'dynamic', 'auto-tuning'], 'type': 'str'},
- 'explicit-ftp-tls': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
+ 'explicit-ftp-tls': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
},
'http': {
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_profileprotocoloptions_ftp.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_profileprotocoloptions_ftp.py
index a2ab049ec..e9b83ff7d 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_profileprotocoloptions_ftp.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_profileprotocoloptions_ftp.py
@@ -299,7 +299,7 @@ def main():
'tcp-window-minimum': {'v_range': [['7.0.0', '']], 'type': 'int'},
'tcp-window-size': {'v_range': [['7.0.0', '']], 'type': 'int'},
'tcp-window-type': {'v_range': [['7.0.0', '']], 'choices': ['system', 'static', 'dynamic', 'auto-tuning'], 'type': 'str'},
- 'explicit-ftp-tls': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
+ 'explicit-ftp-tls': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_proxyaddress.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_proxyaddress.py
index fea47ce61..89c498323 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_proxyaddress.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_proxyaddress.py
@@ -370,7 +370,7 @@ def main():
'ua': {'type': 'list', 'choices': ['chrome', 'ms', 'firefox', 'safari', 'other', 'ie', 'edge'], 'elements': 'str'},
'uuid': {'type': 'str'},
'visibility': {'choices': ['disable', 'enable'], 'type': 'str'},
- 'tags': {'v_range': [['6.2.0', '6.4.13']], 'type': 'str'},
+ 'tags': {'v_range': [['6.2.0', '6.4.14']], 'type': 'str'},
'_image-base64': {'v_range': [['6.2.2', '']], 'type': 'str'},
'application': {'v_range': [['7.2.1', '']], 'type': 'raw'},
'ua-max-ver': {'v_range': [['7.2.2', '']], 'type': 'str'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_proxyaddrgrp.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_proxyaddrgrp.py
index 55293bb82..13ced9763 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_proxyaddrgrp.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_proxyaddrgrp.py
@@ -255,7 +255,7 @@ def main():
'type': {'choices': ['src', 'dst'], 'type': 'str'},
'uuid': {'type': 'str'},
'visibility': {'choices': ['disable', 'enable'], 'type': 'str'},
- 'tags': {'v_range': [['6.2.0', '6.4.13']], 'type': 'str'},
+ 'tags': {'v_range': [['6.2.0', '6.4.14']], 'type': 'str'},
'_image-base64': {'v_range': [['6.2.2', '']], 'type': 'str'}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_sslsshprofile.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_sslsshprofile.py
index 4c954f5c5..49c897c41 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_sslsshprofile.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_sslsshprofile.py
@@ -1650,13 +1650,13 @@ def main():
'unsupported-version': {'v_range': [['6.2.8', '6.2.12'], ['6.4.5', '']], 'choices': ['block', 'bypass'], 'type': 'str'},
'ssh-policy-check': {'v_range': [['6.2.8', '6.2.12'], ['6.4.5', '7.2.1']], 'choices': ['disable', 'enable'], 'type': 'str'},
'block': {
- 'v_range': [['6.2.8', '6.2.12'], ['6.4.5', '6.4.13']],
+ 'v_range': [['6.2.8', '6.2.12'], ['6.4.5', '6.4.14']],
'type': 'list',
'choices': ['x11-filter', 'ssh-shell', 'exec', 'port-forward'],
'elements': 'str'
},
'log': {
- 'v_range': [['6.2.8', '6.2.12'], ['6.4.5', '6.4.13']],
+ 'v_range': [['6.2.8', '6.2.12'], ['6.4.5', '6.4.14']],
'type': 'list',
'choices': ['x11-filter', 'ssh-shell', 'exec', 'port-forward'],
'elements': 'str'
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_sslsshprofile_ssh.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_sslsshprofile_ssh.py
index 85ec90874..9db1374f9 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_sslsshprofile_ssh.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_sslsshprofile_ssh.py
@@ -266,13 +266,13 @@ def main():
'status': {'choices': ['disable', 'deep-inspection'], 'type': 'str'},
'unsupported-version': {'choices': ['block', 'bypass'], 'type': 'str'},
'block': {
- 'v_range': [['6.2.0', '6.4.13']],
+ 'v_range': [['6.2.0', '6.4.14']],
'type': 'list',
'choices': ['x11-filter', 'ssh-shell', 'exec', 'port-forward'],
'elements': 'str'
},
'log': {
- 'v_range': [['6.2.0', '6.4.13']],
+ 'v_range': [['6.2.0', '6.4.14']],
'type': 'list',
'choices': ['x11-filter', 'ssh-shell', 'exec', 'port-forward'],
'elements': 'str'
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_vendormac.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_vendormac.py
index 12179179e..4c42ba300 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_vendormac.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_vendormac.py
@@ -182,12 +182,12 @@ def main():
'adom': {'required': True, 'type': 'str'},
'firewall_vendormac': {
'type': 'dict',
- 'v_range': [['7.2.4', '7.2.4'], ['7.4.1', '']],
+ 'v_range': [['7.2.4', '7.2.5'], ['7.4.1', '']],
'options': {
- 'id': {'v_range': [['7.2.4', '7.2.4'], ['7.4.1', '']], 'type': 'int'},
- 'mac-number': {'v_range': [['7.2.4', '7.2.4'], ['7.4.1', '']], 'type': 'int'},
- 'name': {'v_range': [['7.2.4', '7.2.4'], ['7.4.1', '']], 'type': 'str'},
- 'obsolete': {'v_range': [['7.2.4', '7.2.4'], ['7.4.1', '']], 'type': 'int'}
+ 'id': {'v_range': [['7.2.4', '7.2.5'], ['7.4.1', '']], 'type': 'int'},
+ 'mac-number': {'v_range': [['7.2.4', '7.2.5'], ['7.4.1', '']], 'type': 'int'},
+ 'name': {'v_range': [['7.2.4', '7.2.5'], ['7.4.1', '']], 'type': 'str'},
+ 'obsolete': {'v_range': [['7.2.4', '7.2.5'], ['7.4.1', '']], 'type': 'int'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_vip6.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_vip6.py
index ac95581c0..d44bb586e 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_vip6.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_vip6.py
@@ -1616,7 +1616,7 @@ def main():
},
'elements': 'dict'
},
- 'ndp-reply': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'ndp-reply': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'ssl-server-renegotiation': {'v_range': [['7.2.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'h2-support': {'v_range': [['7.4.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'h3-support': {'v_range': [['7.4.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
@@ -1788,7 +1788,7 @@ def main():
'nat64': {'v_range': [['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'nat66': {'v_range': [['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'ssl-accept-ffdhe-groups': {'v_range': [['7.0.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'ndp-reply': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'ndp-reply': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'ssl-server-renegotiation': {'v_range': [['7.2.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'h2-support': {'v_range': [['7.4.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'h3-support': {'v_range': [['7.4.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_vip6_dynamicmapping.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_vip6_dynamicmapping.py
index d6fed082c..d20729582 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_vip6_dynamicmapping.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_firewall_vip6_dynamicmapping.py
@@ -906,7 +906,7 @@ def main():
},
'elements': 'dict'
},
- 'ndp-reply': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'ndp-reply': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'ssl-server-renegotiation': {'v_range': [['7.2.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'h2-support': {'v_range': [['7.4.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'h3-support': {'v_range': [['7.4.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmg_device_blueprint.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmg_device_blueprint.py
index bfcf95b04..bf2b7baf2 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmg_device_blueprint.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmg_device_blueprint.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_fmg_device_blueprint
-short_description: no description
+short_description: Fmg device blueprint
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -130,6 +130,12 @@ options:
templates:
type: raw
description: (list) No description.
+ enforce-device-config:
+ type: str
+ description: Deprecated, please rename it to enforce_device_config.
+ choices:
+ - 'disable'
+ - 'enable'
auth-template:
type: raw
description: (list) Deprecated, please rename it to auth_template.
@@ -154,12 +160,6 @@ options:
choices:
- 'disable'
- 'enable'
- enforce-device-config:
- type: str
- description: Deprecated, please rename it to enforce_device_config.
- choices:
- - 'disable'
- - 'enable'
'''
EXAMPLES = '''
@@ -171,7 +171,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Fmg device blueprint
fortinet.fortimanager.fmgr_fmg_device_blueprint:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
@@ -193,13 +193,13 @@ EXAMPLES = '''
prov_type: <value in [none, templates, template-group]>
template_group: <string>
templates: <list or string>
+ enforce_device_config: <value in [disable, enable]>
auth_template: <list or string>
ha_config: <value in [disable, enable]>
ha_hbdev: <string>
ha_monitor: <list or string>
ha_password: <list or string>
linked_to_model: <value in [disable, enable]>
- enforce_device_config: <value in [disable, enable]>
'''
RETURN = '''
@@ -280,13 +280,13 @@ def main():
'prov-type': {'v_range': [['7.2.0', '']], 'choices': ['none', 'templates', 'template-group'], 'type': 'str'},
'template-group': {'v_range': [['7.2.0', '']], 'type': 'str'},
'templates': {'v_range': [['7.2.0', '']], 'type': 'raw'},
+ 'enforce-device-config': {'v_range': [['7.2.5', '7.2.5'], ['7.4.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'auth-template': {'v_range': [['7.4.1', '']], 'type': 'raw'},
'ha-config': {'v_range': [['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'ha-hbdev': {'v_range': [['7.4.1', '']], 'type': 'str'},
'ha-monitor': {'v_range': [['7.4.1', '']], 'type': 'raw'},
'ha-password': {'v_range': [['7.4.1', '']], 'no_log': True, 'type': 'raw'},
- 'linked-to-model': {'v_range': [['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'enforce-device-config': {'v_range': [['7.4.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
+ 'linked-to-model': {'v_range': [['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmg_fabric_authorization_template.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmg_fabric_authorization_template.py
index f0c037172..3c47960e3 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmg_fabric_authorization_template.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmg_fabric_authorization_template.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_fmg_fabric_authorization_template
-short_description: no description
+short_description: Fmg fabric authorization template
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -152,7 +152,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Fmg fabric authorization template
fortinet.fortimanager.fmgr_fmg_fabric_authorization_template:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmg_fabric_authorization_template_platforms.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmg_fabric_authorization_template_platforms.py
index 10b5dbae3..df66fe785 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmg_fabric_authorization_template_platforms.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmg_fabric_authorization_template_platforms.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_fmg_fabric_authorization_template_platforms
-short_description: no description
+short_description: Fmg fabric authorization template platforms
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -126,7 +126,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Fmg fabric authorization template platforms
fortinet.fortimanager.fmgr_fmg_fabric_authorization_template_platforms:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmg_variable.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmg_variable.py
index cb748a53c..f9236fcb8 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmg_variable.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmg_variable.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_fmg_variable
-short_description: no description
+short_description: Fmg variable
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -129,7 +129,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Fmg variable
fortinet.fortimanager.fmgr_fmg_variable:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmg_variable_dynamicmapping.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmg_variable_dynamicmapping.py
index c84e67cc7..3b1b00966 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmg_variable_dynamicmapping.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmg_variable_dynamicmapping.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_fmg_variable_dynamicmapping
-short_description: no description
+short_description: Fmg variable dynamic mapping
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -118,7 +118,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Fmg variable dynamic mapping
fortinet.fortimanager.fmgr_fmg_variable_dynamicmapping:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmupdate_fdssetting.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmupdate_fdssetting.py
index f2acae4f9..1845cd97f 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmupdate_fdssetting.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmupdate_fdssetting.py
@@ -767,14 +767,14 @@ def main():
'wanip-query-mode': {'choices': ['disable', 'ipify'], 'type': 'str'},
'fortiguard-anycast': {'v_range': [['6.4.0', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'fortiguard-anycast-source': {'v_range': [['6.4.0', '']], 'choices': ['fortinet', 'aws'], 'type': 'str'},
- 'system-support-fdc': {'v_range': [['6.4.6', '6.4.13'], ['7.0.1', '']], 'type': 'list', 'choices': ['3.x', '4.x'], 'elements': 'str'},
+ 'system-support-fdc': {'v_range': [['6.4.6', '6.4.14'], ['7.0.1', '']], 'type': 'list', 'choices': ['3.x', '4.x'], 'elements': 'str'},
'system-support-fts': {
- 'v_range': [['6.4.6', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.6', '6.4.14'], ['7.0.1', '']],
'type': 'list',
'choices': ['3.x', '4.x', '7.x'],
'elements': 'str'
},
- 'system-support-faz': {'v_range': [['7.0.7', '7.0.10'], ['7.2.2', '']], 'type': 'list', 'choices': ['6.x', '7.x'], 'elements': 'str'},
+ 'system-support-faz': {'v_range': [['7.0.7', '7.0.12'], ['7.2.2', '']], 'type': 'list', 'choices': ['6.x', '7.x'], 'elements': 'str'},
'system-support-fis': {'v_range': [['7.4.0', '']], 'type': 'list', 'choices': ['1.x', '2.x'], 'elements': 'str'}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmupdate_fwmsetting.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmupdate_fwmsetting.py
index 3da3fb94d..7e427bff4 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmupdate_fwmsetting.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmupdate_fwmsetting.py
@@ -358,28 +358,28 @@ def main():
'check-fgt-disk': {'v_range': [['6.2.5', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'fds-failover-fmg': {'v_range': [['6.2.5', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'immx-source': {'v_range': [['6.4.2', '']], 'choices': ['fmg', 'fgt', 'cloud'], 'type': 'str'},
- 'log': {'v_range': [['6.4.8', '6.4.13'], ['7.0.1', '']], 'choices': ['fwm', 'fwm_dm', 'fwm_dm_json'], 'type': 'str'},
+ 'log': {'v_range': [['6.4.8', '6.4.14'], ['7.0.1', '']], 'choices': ['fwm', 'fwm_dm', 'fwm_dm_json'], 'type': 'str'},
'upgrade-timeout': {
'type': 'dict',
'options': {
- 'check-status-timeout': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'type': 'int'},
- 'ctrl-check-status-timeout': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'type': 'int'},
- 'ctrl-put-image-by-fds-timeout': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'type': 'int'},
- 'ha-sync-timeout': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'type': 'int'},
- 'license-check-timeout': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'type': 'int'},
- 'prepare-image-timeout': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'type': 'int'},
- 'put-image-by-fds-timeout': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'type': 'int'},
- 'put-image-timeout': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'type': 'int'},
- 'reboot-of-fsck-timeout': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'type': 'int'},
- 'reboot-of-upgrade-timeout': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'type': 'int'},
- 'retrieve-timeout': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'type': 'int'},
- 'rpc-timeout': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'type': 'int'},
- 'total-timeout': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'type': 'int'},
+ 'check-status-timeout': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'type': 'int'},
+ 'ctrl-check-status-timeout': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'type': 'int'},
+ 'ctrl-put-image-by-fds-timeout': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'type': 'int'},
+ 'ha-sync-timeout': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'type': 'int'},
+ 'license-check-timeout': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'type': 'int'},
+ 'prepare-image-timeout': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'type': 'int'},
+ 'put-image-by-fds-timeout': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'type': 'int'},
+ 'put-image-timeout': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'type': 'int'},
+ 'reboot-of-fsck-timeout': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'type': 'int'},
+ 'reboot-of-upgrade-timeout': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'type': 'int'},
+ 'retrieve-timeout': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'type': 'int'},
+ 'rpc-timeout': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'type': 'int'},
+ 'total-timeout': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'type': 'int'},
'health-check-timeout': {'v_range': [['7.4.2', '']], 'type': 'int'}
}
},
- 'retry-interval': {'v_range': [['7.0.10', '7.0.10'], ['7.4.2', '']], 'type': 'int'},
- 'retry-max': {'v_range': [['7.0.10', '7.0.10'], ['7.4.2', '']], 'type': 'int'},
+ 'retry-interval': {'v_range': [['7.0.10', '7.0.12'], ['7.2.5', '7.2.5'], ['7.4.2', '']], 'type': 'int'},
+ 'retry-max': {'v_range': [['7.0.10', '7.0.12'], ['7.2.5', '7.2.5'], ['7.4.2', '']], 'type': 'int'},
'health-check': {'v_range': [['7.4.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'max-device-history': {'v_range': [['7.4.2', '']], 'type': 'int'},
'max-profile-history': {'v_range': [['7.4.2', '']], 'type': 'int'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmupdate_fwmsetting_upgradetimeout.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmupdate_fwmsetting_upgradetimeout.py
index 0b85e8039..139907991 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmupdate_fwmsetting_upgradetimeout.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmupdate_fwmsetting_upgradetimeout.py
@@ -214,21 +214,21 @@ def main():
module_arg_spec = {
'fmupdate_fwmsetting_upgradetimeout': {
'type': 'dict',
- 'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']],
+ 'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']],
'options': {
- 'check-status-timeout': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'type': 'int'},
- 'ctrl-check-status-timeout': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'type': 'int'},
- 'ctrl-put-image-by-fds-timeout': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'type': 'int'},
- 'ha-sync-timeout': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'type': 'int'},
- 'license-check-timeout': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'type': 'int'},
- 'prepare-image-timeout': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'type': 'int'},
- 'put-image-by-fds-timeout': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'type': 'int'},
- 'put-image-timeout': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'type': 'int'},
- 'reboot-of-fsck-timeout': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'type': 'int'},
- 'reboot-of-upgrade-timeout': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'type': 'int'},
- 'retrieve-timeout': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'type': 'int'},
- 'rpc-timeout': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'type': 'int'},
- 'total-timeout': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'type': 'int'},
+ 'check-status-timeout': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'type': 'int'},
+ 'ctrl-check-status-timeout': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'type': 'int'},
+ 'ctrl-put-image-by-fds-timeout': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'type': 'int'},
+ 'ha-sync-timeout': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'type': 'int'},
+ 'license-check-timeout': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'type': 'int'},
+ 'prepare-image-timeout': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'type': 'int'},
+ 'put-image-by-fds-timeout': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'type': 'int'},
+ 'put-image-timeout': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'type': 'int'},
+ 'reboot-of-fsck-timeout': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'type': 'int'},
+ 'reboot-of-upgrade-timeout': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'type': 'int'},
+ 'retrieve-timeout': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'type': 'int'},
+ 'rpc-timeout': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'type': 'int'},
+ 'total-timeout': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'type': 'int'},
'health-check-timeout': {'v_range': [['7.4.2', '']], 'type': 'int'}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmupdate_service.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmupdate_service.py
index c8b4d571d..3845255db 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmupdate_service.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmupdate_service.py
@@ -288,7 +288,7 @@ def main():
'query-outbreak-prevention': {'choices': ['disable', 'enable'], 'type': 'str'},
'query-webfilter': {'choices': ['disable', 'enable'], 'type': 'str'},
'webfilter-https-traversal': {'choices': ['disable', 'enable'], 'type': 'str'},
- 'query-iot': {'v_range': [['6.4.6', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'query-iot': {'v_range': [['6.4.6', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'query-iot-collection': {'v_range': [['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'query-iot-vulnerability': {'v_range': [['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmupdate_webspam_fgdsetting.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmupdate_webspam_fgdsetting.py
index ed3bf516c..10f569d22 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmupdate_webspam_fgdsetting.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fmupdate_webspam_fgdsetting.py
@@ -591,12 +591,12 @@ def main():
'wf-dn-cache-max-number': {'type': 'int'},
'wf-log': {'choices': ['disable', 'nourl', 'all'], 'type': 'str'},
'wf-preload': {'choices': ['disable', 'enable'], 'type': 'str'},
- 'iot-cache': {'v_range': [['6.4.6', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'iot-log': {'v_range': [['6.4.6', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'nofilequery', 'all'], 'type': 'str'},
- 'iot-preload': {'v_range': [['6.4.6', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'restrict-iots-dbver': {'v_range': [['6.4.6', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
+ 'iot-cache': {'v_range': [['6.4.6', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'iot-log': {'v_range': [['6.4.6', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'nofilequery', 'all'], 'type': 'str'},
+ 'iot-preload': {'v_range': [['6.4.6', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'restrict-iots-dbver': {'v_range': [['6.4.6', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
'stat-log': {
- 'v_range': [['7.0.10', '7.0.10'], ['7.4.2', '']],
+ 'v_range': [['7.0.10', '7.0.12'], ['7.2.5', '7.2.5'], ['7.4.2', '']],
'choices': ['emergency', 'alert', 'critical', 'error', 'warn', 'notice', 'info', 'debug', 'disable'],
'type': 'str'
},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fsp_vlan.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fsp_vlan.py
index 570652aaa..a32078448 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fsp_vlan.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fsp_vlan.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_fsp_vlan
-short_description: no description
+short_description: Fsp vlan
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -3568,6 +3568,7 @@ options:
- 'cbr'
- 'rt-vbr'
- 'nrt-vbr'
+ - 'ubr'
pvc-chan:
type: int
description: Deprecated, please rename it to pvc_chan. SFP-DSL ADSL Fallback PVC Channel.
@@ -3690,6 +3691,7 @@ options:
- 'al'
- 'm'
- 'aijlm'
+ - 'bj'
aggregate-type:
type: str
description: Deprecated, please rename it to aggregate_type. Type of aggregation.
@@ -3811,7 +3813,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Fsp vlan
fortinet.fortimanager.fmgr_fsp_vlan:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
@@ -4665,7 +4667,7 @@ EXAMPLES = '''
eap_user_cert: <string>
ike_saml_server: <string>
lacp_ha_secondary: <value in [disable, enable]>
- pvc_atm_qos: <value in [cbr, rt-vbr, nrt-vbr]>
+ pvc_atm_qos: <value in [cbr, rt-vbr, nrt-vbr, ...]>
pvc_chan: <integer>
pvc_crc: <integer>
pvc_pcr: <integer>
@@ -5173,7 +5175,7 @@ def main():
},
'vlanid': {'v_range': [['6.2.8', '6.2.12'], ['6.4.5', '']], 'type': 'int'},
'dhcp-relay-interface-select-method': {
- 'v_range': [['6.4.8', '6.4.13'], ['7.0.4', '']],
+ 'v_range': [['6.4.8', '6.4.14'], ['7.0.4', '']],
'choices': ['auto', 'sdwan', 'specify'],
'type': 'str'
},
@@ -6021,53 +6023,53 @@ def main():
'eap-user-cert': {'v_range': [['7.2.0', '']], 'type': 'str'},
'ike-saml-server': {'v_range': [['7.2.0', '']], 'type': 'str'},
'lacp-ha-secondary': {'v_range': [['7.0.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'pvc-atm-qos': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'choices': ['cbr', 'rt-vbr', 'nrt-vbr'], 'type': 'str'},
- 'pvc-chan': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'type': 'int'},
- 'pvc-crc': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'type': 'int'},
- 'pvc-pcr': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'type': 'int'},
- 'pvc-scr': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'type': 'int'},
- 'pvc-vlan-id': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'type': 'int'},
- 'pvc-vlan-rx-id': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'type': 'int'},
+ 'pvc-atm-qos': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'choices': ['cbr', 'rt-vbr', 'nrt-vbr', 'ubr'], 'type': 'str'},
+ 'pvc-chan': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'type': 'int'},
+ 'pvc-crc': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'type': 'int'},
+ 'pvc-pcr': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'type': 'int'},
+ 'pvc-scr': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'type': 'int'},
+ 'pvc-vlan-id': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'type': 'int'},
+ 'pvc-vlan-rx-id': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'type': 'int'},
'pvc-vlan-rx-op': {
- 'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']],
+ 'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']],
'choices': ['pass-through', 'replace', 'remove'],
'type': 'str'
},
- 'pvc-vlan-tx-id': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'type': 'int'},
+ 'pvc-vlan-tx-id': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'type': 'int'},
'pvc-vlan-tx-op': {
- 'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']],
+ 'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']],
'choices': ['pass-through', 'replace', 'remove'],
'type': 'str'
},
'reachable-time': {'v_range': [['7.0.3', '']], 'type': 'int'},
'select-profile-30a-35b': {
- 'v_range': [['6.2.9', '6.2.12'], ['6.4.8', '6.4.13'], ['7.0.3', '']],
+ 'v_range': [['6.2.9', '6.2.12'], ['6.4.8', '6.4.14'], ['7.0.3', '']],
'choices': ['30A', '35B'],
'type': 'str'
},
- 'sfp-dsl': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'sfp-dsl-adsl-fallback': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'sfp-dsl-autodetect': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'sfp-dsl-mac': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'type': 'str'},
+ 'sfp-dsl': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'sfp-dsl-adsl-fallback': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'sfp-dsl-autodetect': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'sfp-dsl-mac': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'type': 'str'},
'sw-algorithm': {'v_range': [['7.0.1', '']], 'choices': ['l2', 'l3', 'eh'], 'type': 'str'},
- 'system-id': {'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '']], 'type': 'str'},
- 'system-id-type': {'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '']], 'choices': ['auto', 'user'], 'type': 'str'},
- 'vlan-id': {'v_range': [['6.2.9', '6.2.12'], ['6.4.8', '6.4.13'], ['7.0.3', '']], 'type': 'int'},
+ 'system-id': {'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '']], 'type': 'str'},
+ 'system-id-type': {'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '']], 'choices': ['auto', 'user'], 'type': 'str'},
+ 'vlan-id': {'v_range': [['6.2.9', '6.2.12'], ['6.4.8', '6.4.14'], ['7.0.3', '']], 'type': 'int'},
'vlan-op-mode': {
- 'v_range': [['6.2.9', '6.2.12'], ['6.4.8', '6.4.13'], ['7.0.3', '']],
+ 'v_range': [['6.2.9', '6.2.12'], ['6.4.8', '6.4.14'], ['7.0.3', '']],
'choices': ['tag', 'untag', 'passthrough'],
'type': 'str'
},
- 'generic-receive-offload': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'generic-receive-offload': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'interconnect-profile': {
- 'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']],
+ 'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']],
'choices': ['default', 'profile1', 'profile2'],
'type': 'str'
},
- 'large-receive-offload': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'large-receive-offload': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'annex': {
- 'v_range': [['7.0.10', '7.0.10'], ['7.4.2', '']],
- 'choices': ['a', 'b', 'j', 'bjm', 'i', 'al', 'm', 'aijlm'],
+ 'v_range': [['7.0.10', '7.0.12'], ['7.2.5', '7.2.5'], ['7.4.2', '']],
+ 'choices': ['a', 'b', 'j', 'bjm', 'i', 'al', 'm', 'aijlm', 'bj'],
'type': 'str'
},
'aggregate-type': {'v_range': [['7.2.1', '']], 'choices': ['physical', 'vxlan'], 'type': 'str'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fsp_vlan_dynamicmapping.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fsp_vlan_dynamicmapping.py
index 248fc9fc1..d237c3a2b 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fsp_vlan_dynamicmapping.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fsp_vlan_dynamicmapping.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_fsp_vlan_dynamicmapping
-short_description: no description
+short_description: Fsp vlan dynamic mapping
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -1103,7 +1103,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Fsp vlan dynamic mapping
fortinet.fortimanager.fmgr_fsp_vlan_dynamicmapping:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
@@ -1753,7 +1753,7 @@ def main():
},
'vlanid': {'v_range': [['6.2.8', '6.2.12'], ['6.4.5', '']], 'type': 'int'},
'dhcp-relay-interface-select-method': {
- 'v_range': [['6.4.8', '6.4.13'], ['7.0.4', '']],
+ 'v_range': [['6.4.8', '6.4.14'], ['7.0.4', '']],
'choices': ['auto', 'sdwan', 'specify'],
'type': 'str'
},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fsp_vlan_dynamicmapping_interface.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fsp_vlan_dynamicmapping_interface.py
index 8a006cee2..52af4b682 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fsp_vlan_dynamicmapping_interface.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fsp_vlan_dynamicmapping_interface.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_fsp_vlan_dynamicmapping_interface
-short_description: no description
+short_description: Fsp vlan dynamic mapping interface
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -592,7 +592,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Fsp vlan dynamic mapping interface
fortinet.fortimanager.fmgr_fsp_vlan_dynamicmapping_interface:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
@@ -968,7 +968,7 @@ def main():
'elements': 'dict'
},
'dhcp-relay-interface-select-method': {
- 'v_range': [['6.4.8', '6.4.13'], ['7.0.4', '7.4.0']],
+ 'v_range': [['6.4.8', '6.4.14'], ['7.0.4', '7.4.0']],
'choices': ['auto', 'sdwan', 'specify'],
'type': 'str'
},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fsp_vlan_interface.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fsp_vlan_interface.py
index 32bb337e7..aaaaa7354 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fsp_vlan_interface.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_fsp_vlan_interface.py
@@ -2035,6 +2035,7 @@ options:
- 'cbr'
- 'rt-vbr'
- 'nrt-vbr'
+ - 'ubr'
pvc-chan:
type: int
description: Deprecated, please rename it to pvc_chan. SFP-DSL ADSL Fallback PVC Channel.
@@ -2157,6 +2158,7 @@ options:
- 'al'
- 'm'
- 'aijlm'
+ - 'bj'
aggregate-type:
type: str
description: Deprecated, please rename it to aggregate_type. Type of aggregation.
@@ -2764,7 +2766,7 @@ EXAMPLES = '''
eap_user_cert: <string>
ike_saml_server: <string>
lacp_ha_secondary: <value in [disable, enable]>
- pvc_atm_qos: <value in [cbr, rt-vbr, nrt-vbr]>
+ pvc_atm_qos: <value in [cbr, rt-vbr, nrt-vbr, ...]>
pvc_chan: <integer>
pvc_crc: <integer>
pvc_pcr: <integer>
@@ -3378,35 +3380,39 @@ def main():
'eap-user-cert': {'v_range': [['7.2.0', '']], 'type': 'str'},
'ike-saml-server': {'v_range': [['7.2.0', '']], 'type': 'str'},
'lacp-ha-secondary': {'v_range': [['7.0.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'pvc-atm-qos': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'choices': ['cbr', 'rt-vbr', 'nrt-vbr'], 'type': 'str'},
- 'pvc-chan': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'type': 'int'},
- 'pvc-crc': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'type': 'int'},
- 'pvc-pcr': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'type': 'int'},
- 'pvc-scr': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'type': 'int'},
- 'pvc-vlan-id': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'type': 'int'},
- 'pvc-vlan-rx-id': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'type': 'int'},
- 'pvc-vlan-rx-op': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'choices': ['pass-through', 'replace', 'remove'], 'type': 'str'},
- 'pvc-vlan-tx-id': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'type': 'int'},
- 'pvc-vlan-tx-op': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'choices': ['pass-through', 'replace', 'remove'], 'type': 'str'},
+ 'pvc-atm-qos': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'choices': ['cbr', 'rt-vbr', 'nrt-vbr', 'ubr'], 'type': 'str'},
+ 'pvc-chan': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'type': 'int'},
+ 'pvc-crc': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'type': 'int'},
+ 'pvc-pcr': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'type': 'int'},
+ 'pvc-scr': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'type': 'int'},
+ 'pvc-vlan-id': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'type': 'int'},
+ 'pvc-vlan-rx-id': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'type': 'int'},
+ 'pvc-vlan-rx-op': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'choices': ['pass-through', 'replace', 'remove'], 'type': 'str'},
+ 'pvc-vlan-tx-id': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'type': 'int'},
+ 'pvc-vlan-tx-op': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'choices': ['pass-through', 'replace', 'remove'], 'type': 'str'},
'reachable-time': {'v_range': [['7.0.3', '']], 'type': 'int'},
- 'select-profile-30a-35b': {'v_range': [['6.2.9', '6.2.12'], ['6.4.8', '6.4.13'], ['7.0.3', '']], 'choices': ['30A', '35B'], 'type': 'str'},
- 'sfp-dsl': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'sfp-dsl-adsl-fallback': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'sfp-dsl-autodetect': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'sfp-dsl-mac': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'type': 'str'},
+ 'select-profile-30a-35b': {'v_range': [['6.2.9', '6.2.12'], ['6.4.8', '6.4.14'], ['7.0.3', '']], 'choices': ['30A', '35B'], 'type': 'str'},
+ 'sfp-dsl': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'sfp-dsl-adsl-fallback': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'sfp-dsl-autodetect': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'sfp-dsl-mac': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'type': 'str'},
'sw-algorithm': {'v_range': [['7.0.1', '']], 'choices': ['l2', 'l3', 'eh'], 'type': 'str'},
- 'system-id': {'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '']], 'type': 'str'},
- 'system-id-type': {'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '']], 'choices': ['auto', 'user'], 'type': 'str'},
- 'vlan-id': {'v_range': [['6.2.9', '6.2.12'], ['6.4.8', '6.4.13'], ['7.0.3', '']], 'type': 'int'},
+ 'system-id': {'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '']], 'type': 'str'},
+ 'system-id-type': {'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '']], 'choices': ['auto', 'user'], 'type': 'str'},
+ 'vlan-id': {'v_range': [['6.2.9', '6.2.12'], ['6.4.8', '6.4.14'], ['7.0.3', '']], 'type': 'int'},
'vlan-op-mode': {
- 'v_range': [['6.2.9', '6.2.12'], ['6.4.8', '6.4.13'], ['7.0.3', '']],
+ 'v_range': [['6.2.9', '6.2.12'], ['6.4.8', '6.4.14'], ['7.0.3', '']],
'choices': ['tag', 'untag', 'passthrough'],
'type': 'str'
},
- 'generic-receive-offload': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'interconnect-profile': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'choices': ['default', 'profile1', 'profile2'], 'type': 'str'},
- 'large-receive-offload': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'annex': {'v_range': [['7.0.10', '7.0.10'], ['7.4.2', '']], 'choices': ['a', 'b', 'j', 'bjm', 'i', 'al', 'm', 'aijlm'], 'type': 'str'},
+ 'generic-receive-offload': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'interconnect-profile': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'choices': ['default', 'profile1', 'profile2'], 'type': 'str'},
+ 'large-receive-offload': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'annex': {
+ 'v_range': [['7.0.10', '7.0.12'], ['7.2.5', '7.2.5'], ['7.4.2', '']],
+ 'choices': ['a', 'b', 'j', 'bjm', 'i', 'al', 'm', 'aijlm', 'bj'],
+ 'type': 'str'
+ },
'aggregate-type': {'v_range': [['7.2.1', '']], 'choices': ['physical', 'vxlan'], 'type': 'str'},
'switch-controller-netflow-collect': {'v_range': [['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'wifi-dns-server1': {'v_range': [['7.2.2', '']], 'type': 'str'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_gtp_iewhitelist.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_gtp_iewhitelist.py
index 3ddf3b507..9183414db 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_gtp_iewhitelist.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_gtp_iewhitelist.py
@@ -100,9 +100,9 @@ options:
ie:
type: int
description: IE ID
- message:
+ fmgr_message:
type: int
- description: Deprecated, please rename it to fmgr_message. Message ID
+ description: Message ID
name:
type: str
description: IE white list name.
@@ -202,7 +202,11 @@ def main():
'type': 'dict',
'v_range': [['6.0.0', '']],
'options': {
- 'entries': {'type': 'list', 'options': {'id': {'type': 'int'}, 'ie': {'type': 'int'}, 'message': {'type': 'int'}}, 'elements': 'dict'},
+ 'entries': {
+ 'type': 'list',
+ 'options': {'id': {'type': 'int'}, 'ie': {'type': 'int'}, 'fmgr_message': {'type': 'int'}},
+ 'elements': 'dict'
+ },
'name': {'required': True, 'type': 'str'}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_gtp_iewhitelist_entries.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_gtp_iewhitelist_entries.py
index 80ea141d5..070b2fd1b 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_gtp_iewhitelist_entries.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_gtp_iewhitelist_entries.py
@@ -102,9 +102,9 @@ options:
ie:
type: int
description: IE ID
- message:
+ fmgr_message:
type: int
- description: Deprecated, please rename it to fmgr_message. Message ID
+ description: Message ID
'''
EXAMPLES = '''
@@ -199,7 +199,7 @@ def main():
'gtp_iewhitelist_entries': {
'type': 'dict',
'v_range': [['6.0.0', '']],
- 'options': {'id': {'required': True, 'type': 'int'}, 'ie': {'type': 'int'}, 'message': {'type': 'int'}}
+ 'options': {'id': {'required': True, 'type': 'int'}, 'ie': {'type': 'int'}, 'fmgr_message': {'type': 'int'}}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_gtp_messagefilterv0v1.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_gtp_messagefilterv0v1.py
index 8a350eba5..0d6dd40f6 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_gtp_messagefilterv0v1.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_gtp_messagefilterv0v1.py
@@ -483,7 +483,7 @@ def main():
'update-pdp': {'choices': ['allow', 'deny'], 'type': 'str'},
'v0-create-aa-pdp--v1-init-pdp-ctx': {'choices': ['deny', 'allow'], 'type': 'str'},
'version-not-support': {'choices': ['allow', 'deny'], 'type': 'str'},
- 'create-aa-pdp|init-pdp-ctx': {'v_range': [['6.2.0', '6.4.13']], 'choices': ['allow', 'deny'], 'type': 'str'},
+ 'create-aa-pdp|init-pdp-ctx': {'v_range': [['6.2.0', '6.4.14']], 'choices': ['allow', 'deny'], 'type': 'str'},
'ue-registration-query': {'v_range': [['7.2.1', '']], 'choices': ['allow', 'deny'], 'type': 'str'}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_ips_baseline_sensor_filter.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_ips_baseline_sensor_filter.py
index 2b90dd233..aa9233b25 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_ips_baseline_sensor_filter.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_ips_baseline_sensor_filter.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_ips_baseline_sensor_filter
-short_description: no description
+short_description: Ips baseline sensor filter
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -184,7 +184,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Ips baseline sensor filter
fortinet.fortimanager.fmgr_ips_baseline_sensor_filter:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_ips_baseline_sensor_override.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_ips_baseline_sensor_override.py
index ba416b48e..5bf7153ce 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_ips_baseline_sensor_override.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_ips_baseline_sensor_override.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_ips_baseline_sensor_override
-short_description: no description
+short_description: Ips baseline sensor override
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -163,7 +163,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Ips baseline sensor override
fortinet.fortimanager.fmgr_ips_baseline_sensor_override:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_ips_baseline_sensor_override_exemptip.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_ips_baseline_sensor_override_exemptip.py
index 119ec17ec..0619f2471 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_ips_baseline_sensor_override_exemptip.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_ips_baseline_sensor_override_exemptip.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_ips_baseline_sensor_override_exemptip
-short_description: no description
+short_description: Ips baseline sensor override exempt ip
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -118,7 +118,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Ips baseline sensor override exempt ip
fortinet.fortimanager.fmgr_ips_baseline_sensor_override_exemptip:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_log_npuserver.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_log_npuserver.py
index fd7199c47..7a2a3dd06 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_log_npuserver.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_log_npuserver.py
@@ -310,49 +310,49 @@ def main():
'adom': {'required': True, 'type': 'str'},
'log_npuserver': {
'type': 'dict',
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'options': {
- 'log-processing': {'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']], 'choices': ['may-drop', 'no-drop'], 'type': 'str'},
- 'log-processor': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['hardware', 'host'], 'type': 'str'},
- 'netflow-ver': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['v9', 'v10'], 'type': 'str'},
+ 'log-processing': {'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']], 'choices': ['may-drop', 'no-drop'], 'type': 'str'},
+ 'log-processor': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['hardware', 'host'], 'type': 'str'},
+ 'netflow-ver': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['v9', 'v10'], 'type': 'str'},
'server-group': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'type': 'list',
'options': {
- 'group-name': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'log-format': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['syslog', 'netflow'], 'type': 'str'},
+ 'group-name': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'log-format': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['syslog', 'netflow'], 'type': 'str'},
'log-mode': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['per-session', 'per-nat-mapping', 'per-session-ending'],
'type': 'str'
},
- 'log-tx-mode': {'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '']], 'choices': ['multicast', 'roundrobin'], 'type': 'str'},
- 'server-number': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'server-start-id': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'sw-log-flags': {'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']], 'type': 'raw'},
- 'log-gen-event': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'log-user-info': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
+ 'log-tx-mode': {'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '']], 'choices': ['multicast', 'roundrobin'], 'type': 'str'},
+ 'server-number': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'server-start-id': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'sw-log-flags': {'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']], 'type': 'raw'},
+ 'log-gen-event': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'log-user-info': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
},
'elements': 'dict'
},
'server-info': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'type': 'list',
'options': {
- 'dest-port': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'id': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'ip-family': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['v4', 'v6'], 'type': 'str'},
- 'ipv4-server': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'ipv6-server': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'source-port': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'template-tx-timeout': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'vdom': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
+ 'dest-port': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'id': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'ip-family': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['v4', 'v6'], 'type': 'str'},
+ 'ipv4-server': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'ipv6-server': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'source-port': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'template-tx-timeout': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'vdom': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
'log-transport': {'v_range': [['7.4.2', '']], 'choices': ['udp', 'tcp'], 'type': 'str'}
},
'elements': 'dict'
},
- 'syslog-facility': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'syslog-severity': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
+ 'syslog-facility': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'syslog-severity': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
'enforce-seq-order': {'v_range': [['7.4.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_log_npuserver_servergroup.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_log_npuserver_servergroup.py
index f43515ea9..97001f980 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_log_npuserver_servergroup.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_log_npuserver_servergroup.py
@@ -228,21 +228,21 @@ def main():
'adom': {'required': True, 'type': 'str'},
'log_npuserver_servergroup': {
'type': 'dict',
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'options': {
- 'group-name': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'log-format': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['syslog', 'netflow'], 'type': 'str'},
+ 'group-name': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'log-format': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['syslog', 'netflow'], 'type': 'str'},
'log-mode': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['per-session', 'per-nat-mapping', 'per-session-ending'],
'type': 'str'
},
- 'log-tx-mode': {'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '']], 'choices': ['multicast', 'roundrobin'], 'type': 'str'},
- 'server-number': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'server-start-id': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'sw-log-flags': {'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']], 'type': 'raw'},
- 'log-gen-event': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'log-user-info': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
+ 'log-tx-mode': {'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '']], 'choices': ['multicast', 'roundrobin'], 'type': 'str'},
+ 'server-number': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'server-start-id': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'sw-log-flags': {'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']], 'type': 'raw'},
+ 'log-gen-event': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'log-user-info': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_log_npuserver_serverinfo.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_log_npuserver_serverinfo.py
index a1811c0ec..805fa8a0d 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_log_npuserver_serverinfo.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_log_npuserver_serverinfo.py
@@ -219,16 +219,16 @@ def main():
'adom': {'required': True, 'type': 'str'},
'log_npuserver_serverinfo': {
'type': 'dict',
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'options': {
- 'dest-port': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'id': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'required': True, 'type': 'int'},
- 'ip-family': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['v4', 'v6'], 'type': 'str'},
- 'ipv4-server': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'ipv6-server': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'source-port': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'template-tx-timeout': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'vdom': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
+ 'dest-port': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'id': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'required': True, 'type': 'int'},
+ 'ip-family': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['v4', 'v6'], 'type': 'str'},
+ 'ipv4-server': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'ipv6-server': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'source-port': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'template-tx-timeout': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'vdom': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
'log-transport': {'v_range': [['7.4.2', '']], 'choices': ['udp', 'tcp'], 'type': 'str'}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_metafields_system_admin_user.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_metafields_system_admin_user.py
index 35e987de1..0c816a882 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_metafields_system_admin_user.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_metafields_system_admin_user.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_metafields_system_admin_user
-short_description: no description
+short_description: Cli meta fields system admin user
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -105,7 +105,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Cli meta fields system admin user
fortinet.fortimanager.fmgr_metafields_system_admin_user:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_move.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_move.py
index 46429548f..3b84d60ce 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_move.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_move.py
@@ -692,28 +692,28 @@ def main():
'urls': [
'/pm/config/adom/{adom}/pkg/{pkg}/firewall/hyperscale-policy/{hyperscale-policy}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']]
},
'pkg_firewall_hyperscalepolicy46': {
'params': ['adom', 'pkg', 'hyperscale-policy46'],
'urls': [
'/pm/config/adom/{adom}/pkg/{pkg}/firewall/hyperscale-policy46/{hyperscale-policy46}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']]
},
'pkg_firewall_hyperscalepolicy6': {
'params': ['adom', 'pkg', 'hyperscale-policy6'],
'urls': [
'/pm/config/adom/{adom}/pkg/{pkg}/firewall/hyperscale-policy6/{hyperscale-policy6}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']]
},
'pkg_firewall_hyperscalepolicy64': {
'params': ['adom', 'pkg', 'hyperscale-policy64'],
'urls': [
'/pm/config/adom/{adom}/pkg/{pkg}/firewall/hyperscale-policy64/{hyperscale-policy64}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']]
},
'pkg_firewall_interfacepolicy': {
'params': ['adom', 'pkg', 'interface-policy'],
@@ -914,7 +914,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/sdn-connector/{sdn-connector}/gcp-project-list/{gcp-project-list}',
'/pm/config/global/obj/system/sdn-connector/{sdn-connector}/gcp-project-list/{gcp-project-list}'
],
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '']]
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '']]
},
'system_sdnconnector_nic': {
'params': ['adom', 'sdn-connector', 'nic'],
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_central_dnat.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_central_dnat.py
index e1492d787..a280d31da 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_central_dnat.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_central_dnat.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_pkg_central_dnat
-short_description: no description
+short_description: Policy package central dnat
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_central_dnat6.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_central_dnat6.py
index ab3b4820b..86766af28 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_central_dnat6.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_central_dnat6.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_pkg_central_dnat6
-short_description: no description
+short_description: Policy package central dnat6
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -108,7 +108,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Policy package central dnat6
fortinet.fortimanager.fmgr_pkg_central_dnat6:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_consolidated_policy_sectionvalue.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_consolidated_policy_sectionvalue.py
index 1a40837fa..6200d4b74 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_consolidated_policy_sectionvalue.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_consolidated_policy_sectionvalue.py
@@ -221,7 +221,7 @@ def main():
connection.set_option('forticloud_access_token', module.params.get('forticloud_access_token', None))
fmgr = NAPIManager(jrpc_urls, perobject_jrpc_urls, module_primary_key, url_params, module, connection, top_level_schema_name='data')
fmgr.validate_parameters(params_validation_blob)
- fmgr.process_curd(argument_specs=module_arg_spec)
+ fmgr.process_object_member(argument_specs=module_arg_spec)
module.exit_json(meta=module.params)
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_explicitproxypolicy_sectionvalue.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_explicitproxypolicy_sectionvalue.py
index 3c7c29620..037f5c0c9 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_explicitproxypolicy_sectionvalue.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_explicitproxypolicy_sectionvalue.py
@@ -224,7 +224,7 @@ def main():
connection.set_option('forticloud_access_token', module.params.get('forticloud_access_token', None))
fmgr = NAPIManager(jrpc_urls, perobject_jrpc_urls, module_primary_key, url_params, module, connection, top_level_schema_name='data')
fmgr.validate_parameters(params_validation_blob)
- fmgr.process_curd(argument_specs=module_arg_spec)
+ fmgr.process_object_member(argument_specs=module_arg_spec)
module.exit_json(meta=module.params)
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_hyperscalepolicy.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_hyperscalepolicy.py
index adf696f0a..62ead93f2 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_hyperscalepolicy.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_hyperscalepolicy.py
@@ -367,44 +367,44 @@ def main():
'pkg': {'required': True, 'type': 'str'},
'pkg_firewall_hyperscalepolicy': {
'type': 'dict',
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']],
'options': {
- 'action': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'choices': ['deny', 'accept'], 'type': 'str'},
- 'auto-asic-offload': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'cgn-eif': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'cgn-eim': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'cgn-log-server-grp': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'},
- 'cgn-resource-quota': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'int'},
- 'cgn-session-quota': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'int'},
- 'comments': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'},
- 'delay-tcp-npu-session': {'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'dstaddr': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'raw'},
- 'dstaddr-negate': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'dstaddr6': {'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '7.2.0']], 'type': 'raw'},
- 'dstintf': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'raw'},
- 'firewall-session-dirty': {'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '7.2.0']], 'choices': ['check-all', 'check-new'], 'type': 'str'},
- 'global-label': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'},
- 'ippool': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'label': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'},
- 'name': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'},
- 'nat': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'policy-offload': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'policyid': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'required': True, 'type': 'int'},
- 'poolname': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'raw'},
- 'poolname6': {'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '7.2.0']], 'type': 'raw'},
- 'send-deny-packet': {'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'service': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'raw'},
- 'service-negate': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'srcaddr': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'raw'},
- 'srcaddr-negate': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'srcaddr6': {'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '7.2.0']], 'type': 'raw'},
- 'srcintf': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'raw'},
- 'status': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'tcp-timeout-pid': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'},
- 'traffic-shaper': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'},
- 'traffic-shaper-reverse': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'},
- 'udp-timeout-pid': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'},
- 'uuid': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'}
+ 'action': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'choices': ['deny', 'accept'], 'type': 'str'},
+ 'auto-asic-offload': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'cgn-eif': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'cgn-eim': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'cgn-log-server-grp': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'},
+ 'cgn-resource-quota': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'int'},
+ 'cgn-session-quota': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'int'},
+ 'comments': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'},
+ 'delay-tcp-npu-session': {'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'dstaddr': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'raw'},
+ 'dstaddr-negate': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'dstaddr6': {'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '7.2.0']], 'type': 'raw'},
+ 'dstintf': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'raw'},
+ 'firewall-session-dirty': {'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '7.2.0']], 'choices': ['check-all', 'check-new'], 'type': 'str'},
+ 'global-label': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'},
+ 'ippool': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'label': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'},
+ 'name': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'},
+ 'nat': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'policy-offload': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'policyid': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'required': True, 'type': 'int'},
+ 'poolname': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'raw'},
+ 'poolname6': {'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '7.2.0']], 'type': 'raw'},
+ 'send-deny-packet': {'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'service': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'raw'},
+ 'service-negate': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'srcaddr': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'raw'},
+ 'srcaddr-negate': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'srcaddr6': {'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '7.2.0']], 'type': 'raw'},
+ 'srcintf': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'raw'},
+ 'status': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'tcp-timeout-pid': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'},
+ 'traffic-shaper': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'},
+ 'traffic-shaper-reverse': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'},
+ 'udp-timeout-pid': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'},
+ 'uuid': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_hyperscalepolicy46.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_hyperscalepolicy46.py
index ab7a20d4f..8ca993921 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_hyperscalepolicy46.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_hyperscalepolicy46.py
@@ -258,25 +258,25 @@ def main():
'pkg': {'required': True, 'type': 'str'},
'pkg_firewall_hyperscalepolicy46': {
'type': 'dict',
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']],
'options': {
- 'action': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'choices': ['deny', 'accept'], 'type': 'str'},
- 'cgn-log-server-grp': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'},
- 'comments': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'},
- 'dstaddr': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'raw'},
- 'dstintf': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'},
- 'name': {'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '7.2.0']], 'type': 'str'},
- 'policy-offload': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'policyid': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'required': True, 'type': 'int'},
- 'service': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'raw'},
- 'srcaddr': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'raw'},
- 'srcintf': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'},
- 'status': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'tcp-timeout-pid': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'},
- 'traffic-shaper': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'},
- 'traffic-shaper-reverse': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'},
- 'udp-timeout-pid': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'},
- 'uuid': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'}
+ 'action': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'choices': ['deny', 'accept'], 'type': 'str'},
+ 'cgn-log-server-grp': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'},
+ 'comments': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'},
+ 'dstaddr': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'raw'},
+ 'dstintf': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'},
+ 'name': {'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '7.2.0']], 'type': 'str'},
+ 'policy-offload': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'policyid': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'required': True, 'type': 'int'},
+ 'service': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'raw'},
+ 'srcaddr': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'raw'},
+ 'srcintf': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'},
+ 'status': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'tcp-timeout-pid': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'},
+ 'traffic-shaper': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'},
+ 'traffic-shaper-reverse': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'},
+ 'udp-timeout-pid': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'},
+ 'uuid': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_hyperscalepolicy6.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_hyperscalepolicy6.py
index e76212cd2..f9c95eb48 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_hyperscalepolicy6.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_hyperscalepolicy6.py
@@ -287,29 +287,29 @@ def main():
'pkg': {'required': True, 'type': 'str'},
'pkg_firewall_hyperscalepolicy6': {
'type': 'dict',
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']],
'options': {
- 'action': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'choices': ['deny', 'accept', 'ipsec'], 'type': 'str'},
- 'auto-asic-offload': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'cgn-log-server-grp': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'},
- 'comments': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'},
- 'dstaddr': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'raw'},
- 'dstaddr-negate': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'dstintf': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'raw'},
- 'name': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'},
- 'policy-offload': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'policyid': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'required': True, 'type': 'int'},
- 'service': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'raw'},
- 'service-negate': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'srcaddr': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'raw'},
- 'srcaddr-negate': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'srcintf': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'raw'},
- 'status': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'tcp-timeout-pid': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'},
- 'traffic-shaper': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'},
- 'traffic-shaper-reverse': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'},
- 'udp-timeout-pid': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'},
- 'uuid': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'}
+ 'action': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'choices': ['deny', 'accept', 'ipsec'], 'type': 'str'},
+ 'auto-asic-offload': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'cgn-log-server-grp': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'},
+ 'comments': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'},
+ 'dstaddr': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'raw'},
+ 'dstaddr-negate': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'dstintf': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'raw'},
+ 'name': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'},
+ 'policy-offload': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'policyid': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'required': True, 'type': 'int'},
+ 'service': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'raw'},
+ 'service-negate': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'srcaddr': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'raw'},
+ 'srcaddr-negate': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'srcintf': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'raw'},
+ 'status': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'tcp-timeout-pid': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'},
+ 'traffic-shaper': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'},
+ 'traffic-shaper-reverse': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'},
+ 'udp-timeout-pid': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'},
+ 'uuid': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_hyperscalepolicy64.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_hyperscalepolicy64.py
index 5d494fa52..876435bcd 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_hyperscalepolicy64.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_hyperscalepolicy64.py
@@ -291,31 +291,31 @@ def main():
'pkg': {'required': True, 'type': 'str'},
'pkg_firewall_hyperscalepolicy64': {
'type': 'dict',
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']],
'options': {
- 'action': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'choices': ['deny', 'accept'], 'type': 'str'},
- 'cgn-eif': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'cgn-eim': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'cgn-log-server-grp': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'},
- 'cgn-resource-quota': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'int'},
- 'cgn-session-quota': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'int'},
- 'comments': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'},
- 'dstaddr': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'raw'},
- 'dstintf': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'},
- 'ippool': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'name': {'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '7.2.0']], 'type': 'str'},
- 'policy-offload': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'policyid': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'required': True, 'type': 'int'},
- 'poolname': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'raw'},
- 'service': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'raw'},
- 'srcaddr': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'raw'},
- 'srcintf': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'},
- 'status': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'tcp-timeout-pid': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'},
- 'traffic-shaper': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'},
- 'traffic-shaper-reverse': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'},
- 'udp-timeout-pid': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'},
- 'uuid': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']], 'type': 'str'}
+ 'action': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'choices': ['deny', 'accept'], 'type': 'str'},
+ 'cgn-eif': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'cgn-eim': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'cgn-log-server-grp': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'},
+ 'cgn-resource-quota': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'int'},
+ 'cgn-session-quota': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'int'},
+ 'comments': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'},
+ 'dstaddr': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'raw'},
+ 'dstintf': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'},
+ 'ippool': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'name': {'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '7.2.0']], 'type': 'str'},
+ 'policy-offload': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'policyid': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'required': True, 'type': 'int'},
+ 'poolname': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'raw'},
+ 'service': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'raw'},
+ 'srcaddr': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'raw'},
+ 'srcintf': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'},
+ 'status': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'tcp-timeout-pid': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'},
+ 'traffic-shaper': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'},
+ 'traffic-shaper-reverse': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'},
+ 'udp-timeout-pid': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'},
+ 'uuid': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_interfacepolicy6_sectionvalue.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_interfacepolicy6_sectionvalue.py
index 3b92986ed..fbda3588c 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_interfacepolicy6_sectionvalue.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_interfacepolicy6_sectionvalue.py
@@ -224,7 +224,7 @@ def main():
connection.set_option('forticloud_access_token', module.params.get('forticloud_access_token', None))
fmgr = NAPIManager(jrpc_urls, perobject_jrpc_urls, module_primary_key, url_params, module, connection, top_level_schema_name='data')
fmgr.validate_parameters(params_validation_blob)
- fmgr.process_curd(argument_specs=module_arg_spec)
+ fmgr.process_object_member(argument_specs=module_arg_spec)
module.exit_json(meta=module.params)
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_interfacepolicy_sectionvalue.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_interfacepolicy_sectionvalue.py
index 8cdb40937..fb9252f8c 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_interfacepolicy_sectionvalue.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_interfacepolicy_sectionvalue.py
@@ -224,7 +224,7 @@ def main():
connection.set_option('forticloud_access_token', module.params.get('forticloud_access_token', None))
fmgr = NAPIManager(jrpc_urls, perobject_jrpc_urls, module_primary_key, url_params, module, connection, top_level_schema_name='data')
fmgr.validate_parameters(params_validation_blob)
- fmgr.process_curd(argument_specs=module_arg_spec)
+ fmgr.process_object_member(argument_specs=module_arg_spec)
module.exit_json(meta=module.params)
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy.py
index e86da4f0e..70a95dd45 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy.py
@@ -1276,7 +1276,7 @@ def main():
'ssl-mirror-intf': {'type': 'raw'},
'ssl-ssh-profile': {'type': 'str'},
'status': {'choices': ['disable', 'enable'], 'type': 'str'},
- 'tags': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
+ 'tags': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
'tcp-mss-receiver': {'type': 'int'},
'tcp-mss-sender': {'type': 'int'},
'tcp-session-without-syn': {'choices': ['all', 'data-only', 'disable'], 'type': 'str'},
@@ -1343,7 +1343,7 @@ def main():
'np-acceleration': {'v_range': [['6.2.0', '7.2.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
'reputation-direction': {'v_range': [['6.2.0', '']], 'choices': ['source', 'destination'], 'type': 'str'},
'reputation-minimum': {'v_range': [['6.2.0', '']], 'type': 'int'},
- 'ssh-filter-profile': {'v_range': [['6.2.0', '']], 'type': 'str'},
+ 'ssh-filter-profile': {'v_range': [['6.2.0', '7.2.4'], ['7.4.0', '']], 'type': 'str'},
'ssh-policy-redirect': {'v_range': [['6.2.0', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'tos': {'v_range': [['6.2.0', '']], 'type': 'str'},
'tos-mask': {'v_range': [['6.2.0', '']], 'type': 'str'},
@@ -1351,7 +1351,7 @@ def main():
'vlan-filter': {'v_range': [['6.2.0', '']], 'type': 'str'},
'webproxy-forward-server': {'v_range': [['6.2.0', '']], 'type': 'str'},
'webproxy-profile': {'v_range': [['6.2.0', '']], 'type': 'str'},
- 'np-accelation': {'v_range': [['6.2.1', '6.4.13']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'np-accelation': {'v_range': [['6.2.1', '6.4.14']], 'choices': ['disable', 'enable'], 'type': 'str'},
'delay-tcp-npu-sessoin': {'v_range': [['6.2.0', '6.2.12']], 'choices': ['disable', 'enable'], 'type': 'str'},
'casi-profile': {'v_range': [['6.2.0', '6.2.12']], 'type': 'str'},
'best-route': {'v_range': [['6.2.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
@@ -1363,7 +1363,7 @@ def main():
'poolname6': {'v_range': [['6.4.0', '']], 'type': 'raw'},
'src-vendor-mac': {'v_range': [['6.4.0', '']], 'type': 'raw'},
'srcaddr6': {'v_range': [['6.4.0', '']], 'type': 'raw'},
- 'file-filter-profile': {'v_range': [['6.4.1', '']], 'type': 'str'},
+ 'file-filter-profile': {'v_range': [['6.4.1', '7.2.4'], ['7.4.0', '']], 'type': 'str'},
'policy-offload': {'v_range': [['6.2.7', '6.2.12'], ['6.4.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'cgn-session-quota': {'v_range': [['6.2.7', '6.2.12'], ['6.4.3', '']], 'type': 'int'},
'cgn-eif': {'v_range': [['6.2.7', '6.2.12'], ['6.4.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
@@ -1372,7 +1372,7 @@ def main():
'cgn-resource-quota': {'v_range': [['6.2.7', '6.2.12'], ['6.4.3', '']], 'type': 'int'},
'dynamic-shaping': {'v_range': [['6.4.6', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'passive-wan-health-measurement': {'v_range': [['7.0.0', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'videofilter-profile': {'v_range': [['7.0.0', '']], 'type': 'str'},
+ 'videofilter-profile': {'v_range': [['7.0.0', '7.2.4'], ['7.4.0', '']], 'type': 'str'},
'ztna-ems-tag': {'v_range': [['7.0.0', '']], 'type': 'raw'},
'ztna-geo-tag': {'v_range': [['7.0.0', '']], 'type': 'raw'},
'ztna-status': {'v_range': [['7.0.0', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
@@ -1384,7 +1384,7 @@ def main():
'pfcp-profile': {'v_range': [['7.0.1', '7.2.0']], 'type': 'str'},
'policy-expiry': {'v_range': [['7.2.0', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'policy-expiry-date': {'v_range': [['7.2.0', '']], 'type': 'str'},
- 'sctp-filter-profile': {'v_range': [['7.0.1', '']], 'type': 'str'},
+ 'sctp-filter-profile': {'v_range': [['7.0.1', '7.2.4'], ['7.4.0', '']], 'type': 'str'},
'sgt': {'v_range': [['7.0.1', '']], 'type': 'raw'},
'sgt-check': {'v_range': [['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'tcp-timeout-pid': {'v_range': [['7.0.3', '7.2.0']], 'type': 'str'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy46.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy46.py
index 1ebc25506..3462e897b 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy46.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy46.py
@@ -323,7 +323,7 @@ def main():
'srcaddr': {'type': 'raw'},
'srcintf': {'type': 'str'},
'status': {'choices': ['disable', 'enable'], 'type': 'str'},
- 'tags': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
+ 'tags': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
'tcp-mss-receiver': {'type': 'int'},
'tcp-mss-sender': {'type': 'int'},
'traffic-shaper': {'type': 'str'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy6.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy6.py
index d2278684d..64ea1d625 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy6.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy6.py
@@ -668,7 +668,7 @@ def main():
'nat': {'choices': ['disable', 'enable'], 'type': 'str'},
'natinbound': {'choices': ['disable', 'enable'], 'type': 'str'},
'natoutbound': {'choices': ['disable', 'enable'], 'type': 'str'},
- 'np-accelation': {'v_range': [['6.0.0', '6.4.13']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'np-accelation': {'v_range': [['6.0.0', '6.4.14']], 'choices': ['disable', 'enable'], 'type': 'str'},
'outbound': {'choices': ['disable', 'enable'], 'type': 'str'},
'per-ip-shaper': {'type': 'str'},
'policyid': {'required': True, 'type': 'int'},
@@ -691,7 +691,7 @@ def main():
'ssl-mirror-intf': {'type': 'raw'},
'ssl-ssh-profile': {'v_range': [['6.0.0', '7.2.1']], 'type': 'str'},
'status': {'choices': ['disable', 'enable'], 'type': 'str'},
- 'tags': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
+ 'tags': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
'tcp-mss-receiver': {'type': 'int'},
'tcp-mss-sender': {'type': 'int'},
'tcp-session-without-syn': {'choices': ['all', 'data-only', 'disable'], 'type': 'str'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy64.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy64.py
index b6839f705..c26a10fef 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy64.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy64.py
@@ -343,7 +343,7 @@ def main():
'srcaddr': {'type': 'raw'},
'srcintf': {'type': 'str'},
'status': {'choices': ['disable', 'enable'], 'type': 'str'},
- 'tags': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
+ 'tags': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
'tcp-mss-receiver': {'type': 'int'},
'tcp-mss-sender': {'type': 'int'},
'traffic-shaper': {'type': 'str'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy6_sectionvalue.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy6_sectionvalue.py
index d997ee78b..7f7660e8a 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy6_sectionvalue.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy6_sectionvalue.py
@@ -218,7 +218,7 @@ def main():
connection.set_option('forticloud_access_token', module.params.get('forticloud_access_token', None))
fmgr = NAPIManager(jrpc_urls, perobject_jrpc_urls, module_primary_key, url_params, module, connection, top_level_schema_name='data')
fmgr.validate_parameters(params_validation_blob)
- fmgr.process_curd(argument_specs=module_arg_spec)
+ fmgr.process_object_member(argument_specs=module_arg_spec)
module.exit_json(meta=module.params)
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy_sectionvalue.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy_sectionvalue.py
index a9b09a160..83bd2e49c 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy_sectionvalue.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy_sectionvalue.py
@@ -218,7 +218,7 @@ def main():
connection.set_option('forticloud_access_token', module.params.get('forticloud_access_token', None))
fmgr = NAPIManager(jrpc_urls, perobject_jrpc_urls, module_primary_key, url_params, module, connection, top_level_schema_name='data')
fmgr.validate_parameters(params_validation_blob)
- fmgr.process_curd(argument_specs=module_arg_spec)
+ fmgr.process_object_member(argument_specs=module_arg_spec)
module.exit_json(meta=module.params)
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy_vpndstnode.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy_vpndstnode.py
index 6af51f9c7..080dfb4c4 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy_vpndstnode.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy_vpndstnode.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_pkg_firewall_policy_vpndstnode
-short_description: no description
+short_description: Policy package firewall policy vpn dst node
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -118,7 +118,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Policy package firewall policy vpn dst node
fortinet.fortimanager.fmgr_pkg_firewall_policy_vpndstnode:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy_vpnsrcnode.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy_vpnsrcnode.py
index 6d3c3ca40..34a164c13 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy_vpnsrcnode.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_policy_vpnsrcnode.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_pkg_firewall_policy_vpnsrcnode
-short_description: no description
+short_description: Policy package firewall policy vpn src node
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -118,7 +118,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Policy package firewall policy vpn src node
fortinet.fortimanager.fmgr_pkg_firewall_policy_vpnsrcnode:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_proxypolicy.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_proxypolicy.py
index 578360dea..9fdbc7c58 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_proxypolicy.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_proxypolicy.py
@@ -589,7 +589,7 @@ def main():
'srcintf': {'type': 'raw'},
'ssl-ssh-profile': {'v_range': [['6.0.0', '7.2.2'], ['7.2.4', '7.2.4'], ['7.4.2', '']], 'type': 'str'},
'status': {'choices': ['disable', 'enable'], 'type': 'str'},
- 'tags': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
+ 'tags': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
'transparent': {'choices': ['disable', 'enable'], 'type': 'str'},
'users': {'type': 'raw'},
'utm-status': {'choices': ['disable', 'enable'], 'type': 'str'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_proxypolicy_sectionvalue.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_proxypolicy_sectionvalue.py
index 34829af92..d6bc4c931 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_proxypolicy_sectionvalue.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_proxypolicy_sectionvalue.py
@@ -221,7 +221,7 @@ def main():
connection.set_option('forticloud_access_token', module.params.get('forticloud_access_token', None))
fmgr = NAPIManager(jrpc_urls, perobject_jrpc_urls, module_primary_key, url_params, module, connection, top_level_schema_name='data')
fmgr.validate_parameters(params_validation_blob)
- fmgr.process_curd(argument_specs=module_arg_spec)
+ fmgr.process_object_member(argument_specs=module_arg_spec)
module.exit_json(meta=module.params)
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_securitypolicy_sectionvalue.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_securitypolicy_sectionvalue.py
index 5c522f596..1afc0b522 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_securitypolicy_sectionvalue.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_firewall_securitypolicy_sectionvalue.py
@@ -224,7 +224,7 @@ def main():
connection.set_option('forticloud_access_token', module.params.get('forticloud_access_token', None))
fmgr = NAPIManager(jrpc_urls, perobject_jrpc_urls, module_primary_key, url_params, module, connection, top_level_schema_name='data')
fmgr.validate_parameters(params_validation_blob)
- fmgr.process_curd(argument_specs=module_arg_spec)
+ fmgr.process_object_member(argument_specs=module_arg_spec)
module.exit_json(meta=module.params)
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_footer_policy.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_footer_policy.py
index 5abb623c8..89126ed7b 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_footer_policy.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_footer_policy.py
@@ -1409,6 +1409,12 @@ options:
choices:
- 'disable'
- 'enable'
+ extended-log:
+ type: str
+ description: Deprecated, please rename it to extended_log.
+ choices:
+ - 'disable'
+ - 'enable'
diffserv-copy:
type: str
description: Deprecated, please rename it to diffserv_copy. Enable to copy packets DiffServ values from sessions original direction to ...
@@ -1541,12 +1547,6 @@ options:
casb-profile:
type: str
description: Deprecated, please rename it to casb_profile. Name of an existing CASB profile.
- extended-log:
- type: str
- description: Deprecated, please rename it to extended_log.
- choices:
- - 'disable'
- - 'enable'
implicit-proxy-detection:
type: str
description: Deprecated, please rename it to implicit_proxy_detection.
@@ -1923,7 +1923,7 @@ def main():
'wsso': {'choices': ['disable', 'enable'], 'type': 'str'},
'fsso-groups': {'v_range': [['6.2.1', '']], 'type': 'raw'},
'match-vip-only': {'v_range': [['6.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'np-accelation': {'v_range': [['6.2.1', '6.4.13']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'np-accelation': {'v_range': [['6.2.1', '6.4.14']], 'choices': ['disable', 'enable'], 'type': 'str'},
'best-route': {'v_range': [['6.2.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'decrypted-traffic-mirror': {'v_range': [['6.4.0', '']], 'type': 'str'},
'geoip-match': {'v_range': [['6.4.0', '']], 'choices': ['physical-location', 'registered-location'], 'type': 'str'},
@@ -1975,8 +1975,9 @@ def main():
'udp-timeout-pid': {'v_range': [['7.0.3', '']], 'type': 'raw'},
'ztna-tags-match-logic': {'v_range': [['7.0.3', '']], 'choices': ['or', 'and'], 'type': 'str'},
'uuid-idx': {'v_range': [['7.0.1', '']], 'type': 'int'},
- 'device-ownership': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'ssh-policy-check': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'device-ownership': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'ssh-policy-check': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'extended-log': {'v_range': [['7.0.11', '7.0.12'], ['7.2.5', '7.2.5'], ['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'diffserv-copy': {'v_range': [['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'dstaddr6-negate': {'v_range': [['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'internet-service6': {'v_range': [['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
@@ -2009,7 +2010,6 @@ def main():
'pcp-poolname': {'v_range': [['7.4.0', '']], 'type': 'raw'},
'ztna-ems-tag-secondary': {'v_range': [['7.4.0', '']], 'type': 'raw'},
'casb-profile': {'v_range': [['7.4.1', '']], 'type': 'str'},
- 'extended-log': {'v_range': [['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'implicit-proxy-detection': {'v_range': [['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'virtual-patch-profile': {'v_range': [['7.4.1', '']], 'type': 'str'},
'detect-https-in-http-request': {'v_range': [['7.4.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_header_policy.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_header_policy.py
index 7b820cc03..4a41e7a20 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_header_policy.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pkg_header_policy.py
@@ -1409,6 +1409,12 @@ options:
choices:
- 'disable'
- 'enable'
+ extended-log:
+ type: str
+ description: Deprecated, please rename it to extended_log.
+ choices:
+ - 'disable'
+ - 'enable'
diffserv-copy:
type: str
description: Deprecated, please rename it to diffserv_copy. Enable to copy packets DiffServ values from sessions original direction to ...
@@ -1541,12 +1547,6 @@ options:
casb-profile:
type: str
description: Deprecated, please rename it to casb_profile. Name of an existing CASB profile.
- extended-log:
- type: str
- description: Deprecated, please rename it to extended_log.
- choices:
- - 'disable'
- - 'enable'
implicit-proxy-detection:
type: str
description: Deprecated, please rename it to implicit_proxy_detection.
@@ -1924,7 +1924,7 @@ def main():
'wsso': {'choices': ['disable', 'enable'], 'type': 'str'},
'fsso-groups': {'v_range': [['6.2.1', '']], 'type': 'raw'},
'match-vip-only': {'v_range': [['6.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'np-accelation': {'v_range': [['6.2.1', '6.4.13']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'np-accelation': {'v_range': [['6.2.1', '6.4.14']], 'choices': ['disable', 'enable'], 'type': 'str'},
'best-route': {'v_range': [['6.2.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'decrypted-traffic-mirror': {'v_range': [['6.4.0', '']], 'type': 'str'},
'geoip-match': {'v_range': [['6.4.0', '']], 'choices': ['physical-location', 'registered-location'], 'type': 'str'},
@@ -1976,8 +1976,9 @@ def main():
'udp-timeout-pid': {'v_range': [['7.0.3', '']], 'type': 'raw'},
'ztna-tags-match-logic': {'v_range': [['7.0.3', '']], 'choices': ['or', 'and'], 'type': 'str'},
'uuid-idx': {'v_range': [['7.0.1', '']], 'type': 'int'},
- 'device-ownership': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'ssh-policy-check': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'device-ownership': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'ssh-policy-check': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'extended-log': {'v_range': [['7.0.11', '7.0.12'], ['7.2.5', '7.2.5'], ['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'diffserv-copy': {'v_range': [['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'dstaddr6-negate': {'v_range': [['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'internet-service6': {'v_range': [['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
@@ -2010,7 +2011,6 @@ def main():
'pcp-poolname': {'v_range': [['7.4.0', '']], 'type': 'raw'},
'ztna-ems-tag-secondary': {'v_range': [['7.4.0', '']], 'type': 'raw'},
'casb-profile': {'v_range': [['7.4.1', '']], 'type': 'str'},
- 'extended-log': {'v_range': [['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'implicit-proxy-detection': {'v_range': [['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'virtual-patch-profile': {'v_range': [['7.4.1', '']], 'type': 'str'},
'detect-https-in-http-request': {'v_range': [['7.4.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_meta_reference.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_meta_reference.py
index f4af81184..3eaf4f45e 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_meta_reference.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_meta_reference.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_pm_config_meta_reference
-short_description: no description
+short_description: Meta reference
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -95,7 +95,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Meta reference
fortinet.fortimanager.fmgr_pm_config_meta_reference:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
@@ -174,14 +174,14 @@ def main():
'adom': {'required': True, 'type': 'str'},
'pm_config_meta_reference': {
'type': 'dict',
- 'v_range': [['7.2.4', '7.2.4'], ['7.4.1', '']],
+ 'v_range': [['7.2.4', '7.2.5'], ['7.4.1', '']],
'options': {
'package list': {
- 'v_range': [['7.2.4', '7.2.4'], ['7.4.1', '']],
+ 'v_range': [['7.2.4', '7.2.5'], ['7.4.1', '']],
'type': 'list',
'options': {
- 'name': {'v_range': [['7.2.4', '7.2.4'], ['7.4.1', '']], 'type': 'str'},
- 'vdom': {'v_range': [['7.2.4', '7.2.4'], ['7.4.1', '']], 'type': 'str'}
+ 'name': {'v_range': [['7.2.4', '7.2.5'], ['7.4.1', '']], 'type': 'str'},
+ 'vdom': {'v_range': [['7.2.4', '7.2.5'], ['7.4.1', '']], 'type': 'str'}
},
'elements': 'dict'
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_metafields_firewall_address.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_metafields_firewall_address.py
index c50072160..c01ddf8c0 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_metafields_firewall_address.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_metafields_firewall_address.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_pm_config_metafields_firewall_address
-short_description: no description
+short_description: Meta fields firewall address
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -99,7 +99,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Meta fields firewall address
fortinet.fortimanager.fmgr_pm_config_metafields_firewall_address:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_metafields_firewall_addrgrp.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_metafields_firewall_addrgrp.py
index 0fceab263..8c127ceb4 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_metafields_firewall_addrgrp.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_metafields_firewall_addrgrp.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_pm_config_metafields_firewall_addrgrp
-short_description: no description
+short_description: Meta fields firewall addrgrp
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -99,7 +99,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Meta fields firewall addrgrp
fortinet.fortimanager.fmgr_pm_config_metafields_firewall_addrgrp:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_metafields_firewall_centralsnatmap.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_metafields_firewall_centralsnatmap.py
index a0c47350a..90079c90c 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_metafields_firewall_centralsnatmap.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_metafields_firewall_centralsnatmap.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_pm_config_metafields_firewall_centralsnatmap
-short_description: no description
+short_description: Meta fields firewall central snat map
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -99,7 +99,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Meta fields firewall central snat map
fortinet.fortimanager.fmgr_pm_config_metafields_firewall_centralsnatmap:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_metafields_firewall_policy.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_metafields_firewall_policy.py
index 624820491..609a1a78b 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_metafields_firewall_policy.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_metafields_firewall_policy.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_pm_config_metafields_firewall_policy
-short_description: no description
+short_description: Meta fields firewall policy
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -99,7 +99,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Meta fields firewall policy
fortinet.fortimanager.fmgr_pm_config_metafields_firewall_policy:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_metafields_firewall_service_custom.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_metafields_firewall_service_custom.py
index 42a90b82d..2ad266631 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_metafields_firewall_service_custom.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_metafields_firewall_service_custom.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_pm_config_metafields_firewall_service_custom
-short_description: no description
+short_description: Meta fields firewall service custom
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -99,7 +99,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Meta fields firewall service custom
fortinet.fortimanager.fmgr_pm_config_metafields_firewall_service_custom:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_metafields_firewall_service_group.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_metafields_firewall_service_group.py
index 2a0b521b9..7470350b3 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_metafields_firewall_service_group.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_metafields_firewall_service_group.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_pm_config_metafields_firewall_service_group
-short_description: no description
+short_description: Meta fields firewall service group
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -99,7 +99,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Meta fields firewall service group
fortinet.fortimanager.fmgr_pm_config_metafields_firewall_service_group:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_pblock_firewall_consolidated_policy_sectionvalue.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_pblock_firewall_consolidated_policy_sectionvalue.py
index c6cc1276b..55549f43e 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_pblock_firewall_consolidated_policy_sectionvalue.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_pblock_firewall_consolidated_policy_sectionvalue.py
@@ -221,7 +221,7 @@ def main():
connection.set_option('forticloud_access_token', module.params.get('forticloud_access_token', None))
fmgr = NAPIManager(jrpc_urls, perobject_jrpc_urls, module_primary_key, url_params, module, connection, top_level_schema_name='data')
fmgr.validate_parameters(params_validation_blob)
- fmgr.process_curd(argument_specs=module_arg_spec)
+ fmgr.process_object_member(argument_specs=module_arg_spec)
module.exit_json(meta=module.params)
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_pblock_firewall_policy.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_pblock_firewall_policy.py
index 575ab1dd8..3bf42dc70 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_pblock_firewall_policy.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_pblock_firewall_policy.py
@@ -1355,7 +1355,7 @@ def main():
'email-collect': {'v_range': [['7.0.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'emailfilter-profile': {'v_range': [['7.0.3', '']], 'type': 'str'},
'fec': {'v_range': [['7.0.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'file-filter-profile': {'v_range': [['7.0.3', '']], 'type': 'str'},
+ 'file-filter-profile': {'v_range': [['7.0.3', '7.2.4'], ['7.4.0', '']], 'type': 'str'},
'firewall-session-dirty': {'v_range': [['7.0.3', '']], 'choices': ['check-all', 'check-new'], 'type': 'str'},
'fixedport': {'v_range': [['7.0.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'fsso-agent-for-ntlm': {'v_range': [['7.0.3', '']], 'type': 'str'},
@@ -1423,7 +1423,7 @@ def main():
'rtp-nat': {'v_range': [['7.0.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'schedule': {'v_range': [['7.0.3', '']], 'type': 'str'},
'schedule-timeout': {'v_range': [['7.0.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'sctp-filter-profile': {'v_range': [['7.0.3', '']], 'type': 'str'},
+ 'sctp-filter-profile': {'v_range': [['7.0.3', '7.2.4'], ['7.4.0', '']], 'type': 'str'},
'send-deny-packet': {'v_range': [['7.0.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'service': {'v_range': [['7.0.3', '']], 'type': 'raw'},
'service-negate': {'v_range': [['7.0.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
@@ -1435,7 +1435,7 @@ def main():
'srcaddr-negate': {'v_range': [['7.0.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'srcaddr6': {'v_range': [['7.0.3', '']], 'type': 'raw'},
'srcintf': {'v_range': [['7.0.3', '']], 'type': 'raw'},
- 'ssh-filter-profile': {'v_range': [['7.0.3', '']], 'type': 'str'},
+ 'ssh-filter-profile': {'v_range': [['7.0.3', '7.2.4'], ['7.4.0', '']], 'type': 'str'},
'ssh-policy-redirect': {'v_range': [['7.0.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'ssl-ssh-profile': {'v_range': [['7.0.3', '']], 'type': 'str'},
'status': {'v_range': [['7.0.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
@@ -1451,7 +1451,7 @@ def main():
'users': {'v_range': [['7.0.3', '']], 'type': 'raw'},
'utm-status': {'v_range': [['7.0.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'uuid': {'v_range': [['7.0.3', '']], 'type': 'str'},
- 'videofilter-profile': {'v_range': [['7.0.3', '']], 'type': 'str'},
+ 'videofilter-profile': {'v_range': [['7.0.3', '7.2.4'], ['7.4.0', '']], 'type': 'str'},
'vlan-cos-fwd': {'v_range': [['7.0.3', '']], 'type': 'int'},
'vlan-cos-rev': {'v_range': [['7.0.3', '']], 'type': 'int'},
'vlan-filter': {'v_range': [['7.0.3', '']], 'type': 'str'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_pblock_firewall_policy6_sectionvalue.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_pblock_firewall_policy6_sectionvalue.py
index fffe601b5..7eede8c9b 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_pblock_firewall_policy6_sectionvalue.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_pblock_firewall_policy6_sectionvalue.py
@@ -221,7 +221,7 @@ def main():
connection.set_option('forticloud_access_token', module.params.get('forticloud_access_token', None))
fmgr = NAPIManager(jrpc_urls, perobject_jrpc_urls, module_primary_key, url_params, module, connection, top_level_schema_name='data')
fmgr.validate_parameters(params_validation_blob)
- fmgr.process_curd(argument_specs=module_arg_spec)
+ fmgr.process_object_member(argument_specs=module_arg_spec)
module.exit_json(meta=module.params)
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_pblock_firewall_policy_sectionvalue.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_pblock_firewall_policy_sectionvalue.py
index 8ec425d9d..b216038b0 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_pblock_firewall_policy_sectionvalue.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_pblock_firewall_policy_sectionvalue.py
@@ -221,7 +221,7 @@ def main():
connection.set_option('forticloud_access_token', module.params.get('forticloud_access_token', None))
fmgr = NAPIManager(jrpc_urls, perobject_jrpc_urls, module_primary_key, url_params, module, connection, top_level_schema_name='data')
fmgr.validate_parameters(params_validation_blob)
- fmgr.process_curd(argument_specs=module_arg_spec)
+ fmgr.process_object_member(argument_specs=module_arg_spec)
module.exit_json(meta=module.params)
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_pblock_firewall_securitypolicy_sectionvalue.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_pblock_firewall_securitypolicy_sectionvalue.py
index 65117dad5..76e9accef 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_pblock_firewall_securitypolicy_sectionvalue.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_config_pblock_firewall_securitypolicy_sectionvalue.py
@@ -224,7 +224,7 @@ def main():
connection.set_option('forticloud_access_token', module.params.get('forticloud_access_token', None))
fmgr = NAPIManager(jrpc_urls, perobject_jrpc_urls, module_primary_key, url_params, module, connection, top_level_schema_name='data')
fmgr.validate_parameters(params_validation_blob)
- fmgr.process_curd(argument_specs=module_arg_spec)
+ fmgr.process_object_member(argument_specs=module_arg_spec)
module.exit_json(meta=module.params)
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_devprof_adom.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_devprof_adom.py
index cab6c230b..29594b8cf 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_devprof_adom.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_devprof_adom.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_pm_devprof_adom
-short_description: no description
+short_description: System template adom
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_devprof_pkg.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_devprof_pkg.py
index bda4d647a..897095a51 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_devprof_pkg.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_devprof_pkg.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_pm_devprof_pkg
-short_description: no description
+short_description: System template adom
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -144,7 +144,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: System template adom
fortinet.fortimanager.fmgr_pm_devprof_pkg:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_devprof_scopemember.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_devprof_scopemember.py
index b897f2d45..6b4a5f5a6 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_devprof_scopemember.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_devprof_scopemember.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_pm_devprof_scopemember
-short_description: no description
+short_description: System template scope member
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -110,7 +110,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: System template scope member
fortinet.fortimanager.fmgr_pm_devprof_scopemember:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
@@ -209,7 +209,7 @@ def main():
connection.set_option('forticloud_access_token', module.params.get('forticloud_access_token', None))
fmgr = NAPIManager(jrpc_urls, perobject_jrpc_urls, module_primary_key, url_params, module, connection, top_level_schema_name='data')
fmgr.validate_parameters(params_validation_blob)
- fmgr.process_curd(argument_specs=module_arg_spec)
+ fmgr.process_object_member(argument_specs=module_arg_spec)
module.exit_json(meta=module.params)
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_pblock_adom.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_pblock_adom.py
index 881123894..6eea881ff 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_pblock_adom.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_pblock_adom.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_pm_pblock_adom
-short_description: no description
+short_description: Policy block adom
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -153,7 +153,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Policy block adom
fortinet.fortimanager.fmgr_pm_pblock_adom:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_pblock_obj.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_pblock_obj.py
index ea89c7d8f..7c20e4b0b 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_pblock_obj.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_pblock_obj.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_pm_pblock_obj
-short_description: no description
+short_description: Policy block adom
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -167,7 +167,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Policy block adom
fortinet.fortimanager.fmgr_pm_pblock_obj:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_pkg.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_pkg.py
index 3961f332f..53ffd54ee 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_pkg.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_pkg.py
@@ -379,18 +379,18 @@ def main():
'package settings': {
'type': 'dict',
'options': {
- 'central-nat': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'consolidated-firewall-mode': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'fwpolicy-implicit-log': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'fwpolicy6-implicit-log': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'inspection-mode': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['proxy', 'flow'], 'type': 'str'},
- 'ngfw-mode': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['profile-based', 'policy-based'], 'type': 'str'},
+ 'central-nat': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'consolidated-firewall-mode': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'fwpolicy-implicit-log': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'fwpolicy6-implicit-log': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'inspection-mode': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['proxy', 'flow'], 'type': 'str'},
+ 'ngfw-mode': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['profile-based', 'policy-based'], 'type': 'str'},
'policy-offload-level': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['disable', 'default', 'dos-offload', 'full-offload'],
'type': 'str'
},
- 'ssl-ssh-profile': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'}
+ 'ssl-ssh-profile': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'}
}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_pkg_adom.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_pkg_adom.py
index 69d6051be..7044723dc 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_pkg_adom.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_pkg_adom.py
@@ -338,18 +338,18 @@ def main():
'package settings': {
'type': 'dict',
'options': {
- 'central-nat': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'consolidated-firewall-mode': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'fwpolicy-implicit-log': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'fwpolicy6-implicit-log': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'inspection-mode': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['proxy', 'flow'], 'type': 'str'},
- 'ngfw-mode': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['profile-based', 'policy-based'], 'type': 'str'},
+ 'central-nat': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'consolidated-firewall-mode': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'fwpolicy-implicit-log': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'fwpolicy6-implicit-log': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'inspection-mode': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['proxy', 'flow'], 'type': 'str'},
+ 'ngfw-mode': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['profile-based', 'policy-based'], 'type': 'str'},
'policy-offload-level': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['disable', 'default', 'dos-offload', 'full-offload'],
'type': 'str'
},
- 'ssl-ssh-profile': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'}
+ 'ssl-ssh-profile': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'}
}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_pkg_global.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_pkg_global.py
index aa926b281..fb128579d 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_pkg_global.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_pkg_global.py
@@ -333,18 +333,18 @@ def main():
'package settings': {
'type': 'dict',
'options': {
- 'central-nat': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'consolidated-firewall-mode': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'fwpolicy-implicit-log': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'fwpolicy6-implicit-log': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'inspection-mode': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['proxy', 'flow'], 'type': 'str'},
- 'ngfw-mode': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['profile-based', 'policy-based'], 'type': 'str'},
+ 'central-nat': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'consolidated-firewall-mode': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'fwpolicy-implicit-log': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'fwpolicy6-implicit-log': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'inspection-mode': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['proxy', 'flow'], 'type': 'str'},
+ 'ngfw-mode': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['profile-based', 'policy-based'], 'type': 'str'},
'policy-offload-level': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['disable', 'default', 'dos-offload', 'full-offload'],
'type': 'str'
},
- 'ssl-ssh-profile': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'}
+ 'ssl-ssh-profile': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'}
}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_pkg_scopemember.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_pkg_scopemember.py
index 4e561b366..c1db437b5 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_pkg_scopemember.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_pkg_scopemember.py
@@ -211,7 +211,7 @@ def main():
connection.set_option('forticloud_access_token', module.params.get('forticloud_access_token', None))
fmgr = NAPIManager(jrpc_urls, perobject_jrpc_urls, module_primary_key, url_params, module, connection, top_level_schema_name='data')
fmgr.validate_parameters(params_validation_blob)
- fmgr.process_curd(argument_specs=module_arg_spec)
+ fmgr.process_object_member(argument_specs=module_arg_spec)
module.exit_json(meta=module.params)
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_wanprof_adom.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_wanprof_adom.py
index 375f5876b..7a7374b0d 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_wanprof_adom.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_wanprof_adom.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_pm_wanprof_adom
-short_description: no description
+short_description: Sd wan template adom
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -116,7 +116,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Sd wan template adom
fortinet.fortimanager.fmgr_pm_wanprof_adom:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_wanprof_pkg.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_wanprof_pkg.py
index 48ff84b65..6a86614f5 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_wanprof_pkg.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_wanprof_pkg.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_pm_wanprof_pkg
-short_description: no description
+short_description: Sd wan template adom
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -130,7 +130,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Sd wan template adom
fortinet.fortimanager.fmgr_pm_wanprof_pkg:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_wanprof_scopemember.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_wanprof_scopemember.py
index 50452e8c7..16856f23b 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_wanprof_scopemember.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_pm_wanprof_scopemember.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_pm_wanprof_scopemember
-short_description: no description
+short_description: Sd wan template scope member
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -110,7 +110,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Sd wan template scope member
fortinet.fortimanager.fmgr_pm_wanprof_scopemember:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
@@ -209,7 +209,7 @@ def main():
connection.set_option('forticloud_access_token', module.params.get('forticloud_access_token', None))
fmgr = NAPIManager(jrpc_urls, perobject_jrpc_urls, module_primary_key, url_params, module, connection, top_level_schema_name='data')
fmgr.validate_parameters(params_validation_blob)
- fmgr.process_curd(argument_specs=module_arg_spec)
+ fmgr.process_object_member(argument_specs=module_arg_spec)
module.exit_json(meta=module.params)
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_rename.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_rename.py
index 81d850ff7..d9782768c 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_rename.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_rename.py
@@ -742,6 +742,7 @@ options:
- 'wanprof_system_sdwan_duplication'
- 'wanprof_system_sdwan_healthcheck'
- 'wanprof_system_sdwan_healthcheck_sla'
+ - 'wanprof_system_sdwan_members'
- 'wanprof_system_sdwan_service'
- 'wanprof_system_sdwan_service_sla'
- 'wanprof_system_sdwan_zone'
@@ -1236,21 +1237,21 @@ def main():
'urls': [
'/pm/config/adom/{adom}/devprof/{devprof}/log/syslogd/filter/exclude-list/{exclude-list}'
],
- 'mkey': 'id', 'v_range': [['7.0.4', '7.0.10']]
+ 'mkey': 'id', 'v_range': [['7.0.4', '7.0.12']]
},
'devprof_log_syslogd_filter_freestyle': {
'params': ['adom', 'devprof', 'free-style'],
'urls': [
'/pm/config/adom/{adom}/devprof/{devprof}/log/syslogd/filter/free-style/{free-style}'
],
- 'mkey': 'id', 'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']]
+ 'mkey': 'id', 'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']]
},
'devprof_log_syslogd_setting_customfieldname': {
'params': ['adom', 'devprof', 'custom-field-name'],
'urls': [
'/pm/config/adom/{adom}/devprof/{devprof}/log/syslogd/setting/custom-field-name/{custom-field-name}'
],
- 'mkey': 'id', 'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']]
+ 'mkey': 'id', 'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']]
},
'devprof_system_centralmanagement_serverlist': {
'params': ['adom', 'devprof', 'server-list'],
@@ -1606,7 +1607,7 @@ def main():
'/pm/config/adom/{adom}/obj/dynamic/virtual-wan-link/members/{members}',
'/pm/config/global/obj/dynamic/virtual-wan-link/members/{members}'
],
- 'mkey': 'name', 'v_range': [['6.0.0', '6.4.13']]
+ 'mkey': 'name', 'v_range': [['6.0.0', '6.4.14']]
},
'dynamic_virtualwanlink_members_dynamicmapping': {
'params': ['adom', 'members', 'dynamic_mapping'],
@@ -1614,7 +1615,7 @@ def main():
'/pm/config/adom/{adom}/obj/dynamic/virtual-wan-link/members/{members}/dynamic_mapping/{dynamic_mapping}',
'/pm/config/global/obj/dynamic/virtual-wan-link/members/{members}/dynamic_mapping/{dynamic_mapping}'
],
- 'mkey': 'complex:{{module}}["_scope"][0]["name"]+"/"+{{module}}["_scope"][0]["vdom"]', 'v_range': [['6.0.0', '6.4.13']]
+ 'mkey': 'complex:{{module}}["_scope"][0]["name"]+"/"+{{module}}["_scope"][0]["vdom"]', 'v_range': [['6.0.0', '6.4.14']]
},
'dynamic_virtualwanlink_neighbor': {
'params': ['adom', 'neighbor'],
@@ -1622,7 +1623,7 @@ def main():
'/pm/config/adom/{adom}/obj/dynamic/virtual-wan-link/neighbor/{neighbor}',
'/pm/config/global/obj/dynamic/virtual-wan-link/neighbor/{neighbor}'
],
- 'mkey': 'name', 'v_range': [['6.2.2', '6.4.13']]
+ 'mkey': 'name', 'v_range': [['6.2.2', '6.4.14']]
},
'dynamic_virtualwanlink_server': {
'params': ['adom', 'server'],
@@ -1630,7 +1631,7 @@ def main():
'/pm/config/adom/{adom}/obj/dynamic/virtual-wan-link/server/{server}',
'/pm/config/global/obj/dynamic/virtual-wan-link/server/{server}'
],
- 'mkey': 'name', 'v_range': [['6.0.0', '6.4.13']]
+ 'mkey': 'name', 'v_range': [['6.0.0', '6.4.14']]
},
'dynamic_virtualwanlink_server_dynamicmapping': {
'params': ['adom', 'server', 'dynamic_mapping'],
@@ -1638,7 +1639,7 @@ def main():
'/pm/config/adom/{adom}/obj/dynamic/virtual-wan-link/server/{server}/dynamic_mapping/{dynamic_mapping}',
'/pm/config/global/obj/dynamic/virtual-wan-link/server/{server}/dynamic_mapping/{dynamic_mapping}'
],
- 'mkey': 'complex:{{module}}["_scope"][0]["name"]+"/"+{{module}}["_scope"][0]["vdom"]', 'v_range': [['6.0.0', '6.4.13']]
+ 'mkey': 'complex:{{module}}["_scope"][0]["name"]+"/"+{{module}}["_scope"][0]["vdom"]', 'v_range': [['6.0.0', '6.4.14']]
},
'dynamic_vpntunnel': {
'params': ['adom', 'vpntunnel'],
@@ -2448,7 +2449,7 @@ def main():
'/pm/config/adom/{adom}/obj/firewall/ippool_grp/{ippool_grp}',
'/pm/config/global/obj/firewall/ippool_grp/{ippool_grp}'
],
- 'mkey': 'name', 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'mkey': 'name', 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'firewall_ldbmonitor': {
'params': ['adom', 'ldb-monitor'],
@@ -3501,7 +3502,7 @@ def main():
'/pm/config/adom/{adom}/obj/log/npu-server/server-info/{server-info}',
'/pm/config/global/obj/log/npu-server/server-info/{server-info}'
],
- 'mkey': 'id', 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'mkey': 'id', 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'mpskprofile': {
'params': ['adom', 'mpsk-profile'],
@@ -3631,28 +3632,28 @@ def main():
'urls': [
'/pm/config/adom/{adom}/pkg/{pkg}/firewall/hyperscale-policy/{hyperscale-policy}'
],
- 'mkey': 'policyid', 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']]
+ 'mkey': 'policyid', 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']]
},
'pkg_firewall_hyperscalepolicy46': {
'params': ['adom', 'pkg', 'hyperscale-policy46'],
'urls': [
'/pm/config/adom/{adom}/pkg/{pkg}/firewall/hyperscale-policy46/{hyperscale-policy46}'
],
- 'mkey': 'policyid', 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']]
+ 'mkey': 'policyid', 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']]
},
'pkg_firewall_hyperscalepolicy6': {
'params': ['adom', 'pkg', 'hyperscale-policy6'],
'urls': [
'/pm/config/adom/{adom}/pkg/{pkg}/firewall/hyperscale-policy6/{hyperscale-policy6}'
],
- 'mkey': 'policyid', 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']]
+ 'mkey': 'policyid', 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']]
},
'pkg_firewall_hyperscalepolicy64': {
'params': ['adom', 'pkg', 'hyperscale-policy64'],
'urls': [
'/pm/config/adom/{adom}/pkg/{pkg}/firewall/hyperscale-policy64/{hyperscale-policy64}'
],
- 'mkey': 'policyid', 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.0']]
+ 'mkey': 'policyid', 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.0']]
},
'pkg_firewall_interfacepolicy': {
'params': ['adom', 'pkg', 'interface-policy'],
@@ -3999,7 +4000,7 @@ def main():
'/pm/config/adom/{adom}/obj/sctp-filter/profile/{profile}',
'/pm/config/global/obj/sctp-filter/profile/{profile}'
],
- 'mkey': 'name', 'v_range': [['7.4.2', '']]
+ 'mkey': 'name', 'v_range': [['7.2.5', '7.2.5'], ['7.4.2', '']]
},
'sctpfilter_profile_ppidfilters': {
'params': ['adom', 'profile', 'ppid-filters'],
@@ -4007,7 +4008,7 @@ def main():
'/pm/config/adom/{adom}/obj/sctp-filter/profile/{profile}/ppid-filters/{ppid-filters}',
'/pm/config/global/obj/sctp-filter/profile/{profile}/ppid-filters/{ppid-filters}'
],
- 'mkey': 'id', 'v_range': [['7.4.2', '']]
+ 'mkey': 'id', 'v_range': [['7.2.5', '7.2.5'], ['7.4.2', '']]
},
'spamfilter_bwl': {
'params': ['adom', 'bwl'],
@@ -4207,7 +4208,7 @@ def main():
'/pm/config/adom/{adom}/obj/switch-controller/managed-switch/{managed-switch}',
'/pm/config/global/obj/switch-controller/managed-switch/{managed-switch}'
],
- 'mkey': 'name'
+ 'mkey': 'switch-id'
},
'switchcontroller_managedswitch_dhcpsnoopingstaticclient': {
'params': ['adom', 'managed-switch', 'dhcp-snooping-static-client'],
@@ -4743,7 +4744,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/dsw-queue-dts-profile/{dsw-queue-dts-profile}',
'/pm/config/global/obj/system/npu/dsw-queue-dts-profile/{dsw-queue-dts-profile}'
],
- 'mkey': 'name', 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'mkey': 'name', 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_npqueues_ethernettype': {
'params': ['adom', 'ethernet-type'],
@@ -4751,7 +4752,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/np-queues/ethernet-type/{ethernet-type}',
'/pm/config/global/obj/system/npu/np-queues/ethernet-type/{ethernet-type}'
],
- 'mkey': 'name', 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'mkey': 'name', 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_npqueues_ipprotocol': {
'params': ['adom', 'ip-protocol'],
@@ -4759,7 +4760,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/np-queues/ip-protocol/{ip-protocol}',
'/pm/config/global/obj/system/npu/np-queues/ip-protocol/{ip-protocol}'
],
- 'mkey': 'name', 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'mkey': 'name', 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_npqueues_ipservice': {
'params': ['adom', 'ip-service'],
@@ -4767,7 +4768,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/np-queues/ip-service/{ip-service}',
'/pm/config/global/obj/system/npu/np-queues/ip-service/{ip-service}'
],
- 'mkey': 'name', 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'mkey': 'name', 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_npqueues_profile': {
'params': ['adom', 'profile'],
@@ -4775,7 +4776,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/np-queues/profile/{profile}',
'/pm/config/global/obj/system/npu/np-queues/profile/{profile}'
],
- 'mkey': 'id', 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'mkey': 'id', 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_npqueues_scheduler': {
'params': ['adom', 'scheduler'],
@@ -4783,7 +4784,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/np-queues/scheduler/{scheduler}',
'/pm/config/global/obj/system/npu/np-queues/scheduler/{scheduler}'
],
- 'mkey': 'name', 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'mkey': 'name', 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_nputcam': {
'params': ['adom', 'npu-tcam'],
@@ -4799,7 +4800,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/tcp-timeout-profile/{tcp-timeout-profile}',
'/pm/config/global/obj/system/npu/tcp-timeout-profile/{tcp-timeout-profile}'
],
- 'mkey': 'id', 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'mkey': 'id', 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_npu_udptimeoutprofile': {
'params': ['adom', 'udp-timeout-profile'],
@@ -4807,7 +4808,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/npu/udp-timeout-profile/{udp-timeout-profile}',
'/pm/config/global/obj/system/npu/udp-timeout-profile/{udp-timeout-profile}'
],
- 'mkey': 'id', 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']]
+ 'mkey': 'id', 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']]
},
'system_ntp_ntpserver': {
'params': ['ntpserver'],
@@ -4822,7 +4823,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/object-tag/{object-tag}',
'/pm/config/global/obj/system/object-tag/{object-tag}'
],
- 'mkey': 'name', 'v_range': [['6.2.0', '6.4.13']]
+ 'mkey': 'name', 'v_range': [['6.2.0', '6.4.14']]
},
'system_objecttagging': {
'params': ['adom', 'object-tagging'],
@@ -5089,7 +5090,7 @@ def main():
'/pm/config/adom/{adom}/obj/system/sdn-connector/{sdn-connector}/gcp-project-list/{gcp-project-list}',
'/pm/config/global/obj/system/sdn-connector/{sdn-connector}/gcp-project-list/{gcp-project-list}'
],
- 'mkey': 'id', 'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '']]
+ 'mkey': 'id', 'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '']]
},
'system_sdnconnector_nic': {
'params': ['adom', 'sdn-connector', 'nic'],
@@ -5262,7 +5263,7 @@ def main():
'/pm/config/adom/{adom}/obj/user/certificate/{certificate}',
'/pm/config/global/obj/user/certificate/{certificate}'
],
- 'mkey': 'id', 'v_range': [['7.0.8', '7.0.10'], ['7.2.3', '']]
+ 'mkey': 'id', 'v_range': [['7.0.8', '7.0.12'], ['7.2.3', '']]
},
'user_clearpass': {
'params': ['adom', 'clearpass'],
@@ -6108,6 +6109,13 @@ def main():
],
'mkey': 'id', 'v_range': [['6.4.1', '']]
},
+ 'wanprof_system_sdwan_members': {
+ 'params': ['adom', 'wanprof', 'members'],
+ 'urls': [
+ '/pm/config/adom/{adom}/wanprof/{wanprof}/system/sdwan/members/{members}'
+ ],
+ 'mkey': 'seq-num', 'v_range': [['6.4.1', '']]
+ },
'wanprof_system_sdwan_service': {
'params': ['adom', 'wanprof', 'service'],
'urls': [
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_sctpfilter_profile.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_sctpfilter_profile.py
index 9f146950f..d41ec933e 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_sctpfilter_profile.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_sctpfilter_profile.py
@@ -212,18 +212,18 @@ def main():
'adom': {'required': True, 'type': 'str'},
'sctpfilter_profile': {
'type': 'dict',
- 'v_range': [['7.4.2', '']],
+ 'v_range': [['7.2.5', '7.2.5'], ['7.4.2', '']],
'options': {
- 'comment': {'v_range': [['7.4.2', '']], 'type': 'str'},
- 'name': {'v_range': [['7.4.2', '']], 'required': True, 'type': 'str'},
+ 'comment': {'v_range': [['7.2.5', '7.2.5'], ['7.4.2', '']], 'type': 'str'},
+ 'name': {'v_range': [['7.2.5', '7.2.5'], ['7.4.2', '']], 'required': True, 'type': 'str'},
'ppid-filters': {
- 'v_range': [['7.4.2', '']],
+ 'v_range': [['7.2.5', '7.2.5'], ['7.4.2', '']],
'type': 'list',
'options': {
- 'action': {'v_range': [['7.4.2', '']], 'choices': ['pass', 'reset', 'replace'], 'type': 'str'},
- 'comment': {'v_range': [['7.4.2', '']], 'type': 'str'},
- 'id': {'v_range': [['7.4.2', '']], 'type': 'int'},
- 'ppid': {'v_range': [['7.4.2', '']], 'type': 'int'}
+ 'action': {'v_range': [['7.2.5', '7.2.5'], ['7.4.2', '']], 'choices': ['pass', 'reset', 'replace'], 'type': 'str'},
+ 'comment': {'v_range': [['7.2.5', '7.2.5'], ['7.4.2', '']], 'type': 'str'},
+ 'id': {'v_range': [['7.2.5', '7.2.5'], ['7.4.2', '']], 'type': 'int'},
+ 'ppid': {'v_range': [['7.2.5', '7.2.5'], ['7.4.2', '']], 'type': 'int'}
},
'elements': 'dict'
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_sctpfilter_profile_ppidfilters.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_sctpfilter_profile_ppidfilters.py
index d61b0e46d..fc931e605 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_sctpfilter_profile_ppidfilters.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_sctpfilter_profile_ppidfilters.py
@@ -203,12 +203,12 @@ def main():
'profile': {'required': True, 'type': 'str'},
'sctpfilter_profile_ppidfilters': {
'type': 'dict',
- 'v_range': [['7.4.2', '']],
+ 'v_range': [['7.2.5', '7.2.5'], ['7.4.2', '']],
'options': {
- 'action': {'v_range': [['7.4.2', '']], 'choices': ['pass', 'reset', 'replace'], 'type': 'str'},
- 'comment': {'v_range': [['7.4.2', '']], 'type': 'str'},
- 'id': {'v_range': [['7.4.2', '']], 'required': True, 'type': 'int'},
- 'ppid': {'v_range': [['7.4.2', '']], 'type': 'int'}
+ 'action': {'v_range': [['7.2.5', '7.2.5'], ['7.4.2', '']], 'choices': ['pass', 'reset', 'replace'], 'type': 'str'},
+ 'comment': {'v_range': [['7.2.5', '7.2.5'], ['7.4.2', '']], 'type': 'str'},
+ 'id': {'v_range': [['7.2.5', '7.2.5'], ['7.4.2', '']], 'required': True, 'type': 'int'},
+ 'ppid': {'v_range': [['7.2.5', '7.2.5'], ['7.4.2', '']], 'type': 'int'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_securityconsole_cliprof_check.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_securityconsole_cliprof_check.py
index 6dc397758..d58ea9d12 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_securityconsole_cliprof_check.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_securityconsole_cliprof_check.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_securityconsole_cliprof_check
-short_description: no description
+short_description: Securityconsole cliprof check
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -97,7 +97,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Securityconsole cliprof check
fortinet.fortimanager.fmgr_securityconsole_cliprof_check:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_securityconsole_install_device.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_securityconsole_install_device.py
index ec5ebed1b..23a799226 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_securityconsole_install_device.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_securityconsole_install_device.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_securityconsole_install_device
-short_description: no description
+short_description: Securityconsole install device
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_securityconsole_install_objects_v2.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_securityconsole_install_objects_v2.py
index 7ecc3d291..47c1f0274 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_securityconsole_install_objects_v2.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_securityconsole_install_objects_v2.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_securityconsole_install_objects_v2
-short_description: no description
+short_description: Securityconsole install objects v2
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -101,7 +101,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Securityconsole install objects v2
fortinet.fortimanager.fmgr_securityconsole_install_objects_v2:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_securityconsole_pblock_clone.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_securityconsole_pblock_clone.py
index 30311e7e4..c85742f8b 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_securityconsole_pblock_clone.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_securityconsole_pblock_clone.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_securityconsole_pblock_clone
-short_description: no description
+short_description: Securityconsole policy block clone
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -89,7 +89,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Securityconsole policy block clone
fortinet.fortimanager.fmgr_securityconsole_pblock_clone:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_securityconsole_template_cli_preview.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_securityconsole_template_cli_preview.py
index 9689ecf1f..20c63d62e 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_securityconsole_template_cli_preview.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_securityconsole_template_cli_preview.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_securityconsole_template_cli_preview
-short_description: no description
+short_description: Securityconsole template cli preview
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -100,7 +100,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Securityconsole template cli preview
fortinet.fortimanager.fmgr_securityconsole_template_cli_preview:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_switchcontroller_managedswitch.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_switchcontroller_managedswitch.py
index d00f3841c..2bc71316a 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_switchcontroller_managedswitch.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_switchcontroller_managedswitch.py
@@ -98,7 +98,6 @@ options:
name:
type: str
description: Managed-switch name.
- required: true
ports:
type: list
elements: dict
@@ -540,6 +539,7 @@ options:
switch-id:
type: str
description: Deprecated, please rename it to switch_id. Managed-switch id.
+ required: true
override-snmp-community:
type: str
description: Deprecated, please rename it to override_snmp_community. Enable/disable overriding the global SNMP communities.
@@ -1206,7 +1206,7 @@ def main():
]
url_params = ['adom']
- module_primary_key = 'name'
+ module_primary_key = 'switch-id'
module_arg_spec = {
'adom': {'required': True, 'type': 'str'},
'switchcontroller_managedswitch': {
@@ -1215,7 +1215,7 @@ def main():
'options': {
'_platform': {'type': 'str'},
'description': {'type': 'str'},
- 'name': {'required': True, 'type': 'str'},
+ 'name': {'type': 'str'},
'ports': {
'type': 'list',
'options': {
@@ -1325,7 +1325,7 @@ def main():
},
'elements': 'dict'
},
- 'switch-id': {'type': 'str'},
+ 'switch-id': {'required': True, 'type': 'str'},
'override-snmp-community': {'v_range': [['6.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'override-snmp-sysinfo': {'v_range': [['6.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'override-snmp-trap-threshold': {'v_range': [['6.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_sys_cloud_orchest.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_sys_cloud_orchest.py
index 0f4ddad41..c26da6682 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_sys_cloud_orchest.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_sys_cloud_orchest.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_sys_cloud_orchest
-short_description: no description
+short_description: Sys cloud orchest
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -96,7 +96,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Sys cloud orchest
fortinet.fortimanager.fmgr_sys_cloud_orchest:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_sys_hitcount.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_sys_hitcount.py
index 21fdf4730..a4351f9c1 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_sys_hitcount.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_sys_hitcount.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_sys_hitcount
-short_description: no description
+short_description: Sys hitcount
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -92,7 +92,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Sys hitcount
fortinet.fortimanager.fmgr_sys_hitcount:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
@@ -167,12 +167,12 @@ def main():
module_arg_spec = {
'sys_hitcount': {
'type': 'dict',
- 'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']],
+ 'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']],
'options': {
- 'adom': {'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']], 'type': 'str'},
- 'adom_oid': {'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']], 'type': 'int'},
- 'pkg': {'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']], 'type': 'str'},
- 'pkg_oid': {'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']], 'type': 'int'}
+ 'adom': {'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']], 'type': 'str'},
+ 'adom_oid': {'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']], 'type': 'int'},
+ 'pkg': {'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']], 'type': 'str'},
+ 'pkg_oid': {'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']], 'type': 'int'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_sys_reboot.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_sys_reboot.py
index 3387c7677..a08a6d894 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_sys_reboot.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_sys_reboot.py
@@ -69,9 +69,9 @@ options:
required: false
type: dict
suboptions:
- message:
+ fmgr_message:
type: str
- description: Deprecated, please rename it to fmgr_message. Optional message to be stored in event log.
+ description: Optional message to be stored in event log.
'''
EXAMPLES = '''
@@ -156,7 +156,7 @@ def main():
'sys_reboot': {
'type': 'dict',
'v_range': [['6.2.5', '']],
- 'options': {'message': {'v_range': [['6.2.5', '']], 'type': 'str'}}
+ 'options': {'fmgr_message': {'v_range': [['6.2.5', '']], 'type': 'str'}}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_sys_task_result.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_sys_task_result.py
index 50c11cc53..8eaac5865 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_sys_task_result.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_sys_task_result.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_sys_task_result
-short_description: no description
+short_description: Sys task result
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -83,7 +83,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Sys task result
fortinet.fortimanager.fmgr_sys_task_result:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
@@ -155,8 +155,8 @@ def main():
module_arg_spec = {
'sys_task_result': {
'type': 'dict',
- 'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']],
- 'options': {'taskid': {'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']], 'type': 'int'}}
+ 'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']],
+ 'options': {'taskid': {'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']], 'type': 'int'}}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_admin_profile.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_admin_profile.py
index 550d41c67..af96463d7 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_admin_profile.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_admin_profile.py
@@ -1136,7 +1136,7 @@ def main():
'trusthost9': {'v_range': [['7.0.3', '']], 'type': 'str'},
'ips-baseline-cfg': {'v_range': [['7.0.1', '7.0.2']], 'choices': ['none', 'read', 'read-write'], 'type': 'str'},
'ips-baseline-ovrd': {'v_range': [['7.0.1', '7.0.2']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'device-fortiextender': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'choices': ['none', 'read', 'read-write'], 'type': 'str'},
+ 'device-fortiextender': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'choices': ['none', 'read', 'read-write'], 'type': 'str'},
'ips-lock': {'v_range': [['7.2.2', '']], 'choices': ['none', 'read', 'read-write'], 'type': 'str'},
'fgt-gui-proxy': {'v_range': [['7.4.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'policy-ips-attrs': {'v_range': [['7.4.2', '']], 'choices': ['none', 'read', 'read-write'], 'type': 'str'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_admin_setting.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_admin_setting.py
index ee2609705..2e1179e24 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_admin_setting.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_admin_setting.py
@@ -684,11 +684,11 @@ def main():
'auth-port': {'v_range': [['7.0.0', '']], 'type': 'int'},
'idle_timeout_api': {'v_range': [['6.4.6', '']], 'type': 'int'},
'idle_timeout_gui': {'v_range': [['6.4.6', '']], 'type': 'int'},
- 'central-ftgd-local-cat-id': {'v_range': [['6.4.6', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'central-ftgd-local-cat-id': {'v_range': [['6.4.6', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'idle_timeout_sso': {'v_range': [['7.0.3', '']], 'type': 'int'},
'preferred-fgfm-intf': {'v_range': [['7.0.2', '']], 'type': 'str'},
'traffic-shaping-history': {'v_range': [['7.0.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'fsw-ignore-platform-check': {'v_range': [['7.0.7', '7.0.10'], ['7.2.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'fsw-ignore-platform-check': {'v_range': [['7.0.7', '7.0.12'], ['7.2.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'rtm-max-monitor-by-days': {'v_range': [['7.2.2', '']], 'type': 'int'},
'rtm-temp-file-limit': {'v_range': [['7.2.2', '']], 'type': 'int'},
'firmware-upgrade-check': {'v_range': [['7.2.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_admin_user.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_admin_user.py
index 26fd343a0..7402cf3ad 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_admin_user.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_admin_user.py
@@ -917,7 +917,7 @@ def main():
'type': 'str'
},
'adom-access': {'v_range': [['7.0.3', '']], 'choices': ['all', 'specify', 'exclude', 'per-adom-profile'], 'type': 'str'},
- 'fingerprint': {'v_range': [['6.4.8', '6.4.13'], ['7.0.4', '']], 'type': 'str'},
+ 'fingerprint': {'v_range': [['6.4.8', '6.4.14'], ['7.0.4', '']], 'type': 'str'},
'th-from-profile': {'v_range': [['7.0.3', '']], 'type': 'int'},
'th6-from-profile': {'v_range': [['7.0.3', '']], 'type': 'int'},
'cors-allow-origin': {'v_range': [['7.2.2', '']], 'type': 'str'}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_dm.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_dm.py
index 8c15241d5..453f1aced 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_dm.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_dm.py
@@ -350,11 +350,11 @@ def main():
'fgfm-install-refresh-count': {'v_range': [['6.2.5', '']], 'type': 'int'},
'conf-merge-after-script': {'v_range': [['6.2.7', '6.2.12'], ['6.4.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'log-autoupdate': {
- 'v_range': [['6.4.12', '6.4.13'], ['7.0.9', '7.0.10'], ['7.2.4', '7.2.4'], ['7.4.1', '']],
+ 'v_range': [['6.4.12', '6.4.14'], ['7.0.9', '7.0.12'], ['7.2.4', '7.2.5'], ['7.4.1', '']],
'choices': ['disable', 'enable'],
'type': 'str'
},
- 'fgfm-auto-retrieve-timeout': {'v_range': [['6.4.13', '6.4.13'], ['7.0.9', '7.0.10'], ['7.2.4', '7.2.4'], ['7.4.1', '']], 'type': 'int'},
+ 'fgfm-auto-retrieve-timeout': {'v_range': [['6.4.13', '6.4.14'], ['7.0.9', '7.0.12'], ['7.2.4', '7.2.5'], ['7.4.1', '']], 'type': 'int'},
'install-fds-timeout': {'v_range': [['7.4.1', '']], 'type': 'int'}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_docker.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_docker.py
index 43248be55..a46fa9c2a 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_docker.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_docker.py
@@ -294,9 +294,9 @@ def main():
'type': 'dict',
'v_range': [['6.4.0', '']],
'options': {
- 'fortiportal': {'v_range': [['6.4.0', '7.4.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'fortiportal': {'v_range': [['6.4.0', '7.2.4'], ['7.4.0', '7.4.0']], 'choices': ['disable', 'enable'], 'type': 'str'},
'fortiwlm': {'v_range': [['6.4.0', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'sdwancontroller': {'v_range': [['6.4.0', '7.0.10']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'sdwancontroller': {'v_range': [['6.4.0', '7.0.12']], 'choices': ['disable', 'enable'], 'type': 'str'},
'status': {'v_range': [['6.4.0', '']], 'choices': ['disable', 'enable', 'qa', 'dev'], 'type': 'str'},
'cpu': {'v_range': [['6.4.5', '']], 'type': 'int'},
'default-address-pool_base': {'v_range': [['6.4.3', '']], 'type': 'str'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_externalresource.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_externalresource.py
index 34fec2abe..a32e6850c 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_externalresource.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_externalresource.py
@@ -283,7 +283,7 @@ def main():
'interface-select-method': {'v_range': [['6.4.2', '']], 'choices': ['auto', 'sdwan', 'specify'], 'type': 'str'},
'user-agent': {'v_range': [['6.4.2', '']], 'type': 'str'},
'uuid': {'v_range': [['7.0.0', '']], 'type': 'str'},
- 'server-identity-check': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'choices': ['none', 'basic', 'full'], 'type': 'str'},
+ 'server-identity-check': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'choices': ['none', 'basic', 'full'], 'type': 'str'},
'update-method': {'v_range': [['7.2.1', '']], 'choices': ['feed', 'push'], 'type': 'str'}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_fortiguard.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_fortiguard.py
index 198c28d59..f71129125 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_fortiguard.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_fortiguard.py
@@ -584,12 +584,12 @@ def main():
'proxy-server-port': {'v_range': [['6.2.1', '']], 'type': 'int'},
'proxy-username': {'v_range': [['6.2.1', '']], 'type': 'str'},
'sandbox-region': {'v_range': [['6.2.0', '']], 'type': 'str'},
- 'avquery-cache-ttl': {'v_range': [['6.2.0', '6.4.13']], 'type': 'int'},
- 'avquery-timeout': {'v_range': [['6.2.0', '6.4.13']], 'type': 'int'},
- 'avquery-cache': {'v_range': [['6.2.0', '6.4.13']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'avquery-cache-mpercent': {'v_range': [['6.2.0', '6.4.13']], 'type': 'int'},
- 'avquery-license': {'v_range': [['6.2.0', '6.4.13']], 'type': 'int'},
- 'avquery-force-off': {'v_range': [['6.2.0', '6.4.13']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'avquery-cache-ttl': {'v_range': [['6.2.0', '6.4.14']], 'type': 'int'},
+ 'avquery-timeout': {'v_range': [['6.2.0', '6.4.14']], 'type': 'int'},
+ 'avquery-cache': {'v_range': [['6.2.0', '6.4.14']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'avquery-cache-mpercent': {'v_range': [['6.2.0', '6.4.14']], 'type': 'int'},
+ 'avquery-license': {'v_range': [['6.2.0', '6.4.14']], 'type': 'int'},
+ 'avquery-force-off': {'v_range': [['6.2.0', '6.4.14']], 'choices': ['disable', 'enable'], 'type': 'str'},
'fortiguard-anycast': {'v_range': [['6.2.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'fortiguard-anycast-source': {'v_range': [['6.2.2', '']], 'choices': ['fortinet', 'aws', 'debug'], 'type': 'str'},
'interface': {'v_range': [['6.2.5', '6.2.12'], ['6.4.1', '']], 'type': 'str'},
@@ -617,7 +617,7 @@ def main():
'auto-firmware-upgrade-start-hour': {'v_range': [['7.2.1', '']], 'type': 'int'},
'sandbox-inline-scan': {'v_range': [['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'auto-firmware-upgrade-delay': {'v_range': [['7.2.4', '']], 'type': 'int'},
- 'gui-prompt-auto-upgrade': {'v_range': [['7.2.4', '7.2.4'], ['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'gui-prompt-auto-upgrade': {'v_range': [['7.2.4', '7.2.5'], ['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'FDS-license-expiring-days': {'v_range': [['7.4.0', '']], 'type': 'int'},
'antispam-cache-mpermille': {'v_range': [['7.4.0', '']], 'type': 'int'},
'outbreak-prevention-cache-mpermille': {'v_range': [['7.4.0', '']], 'type': 'int'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_fortiview_autocache.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_fortiview_autocache.py
index db65668fe..944f648c8 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_fortiview_autocache.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_fortiview_autocache.py
@@ -98,6 +98,16 @@ options:
choices:
- 'disable'
- 'enable'
+ incr-fortiview:
+ type: str
+ description:
+ - Deprecated, please rename it to incr_fortiview.
+ - Enable/disable fortiview incremental cache.
+ - disable - Disable the fortiview incremental auto cache.
+ - enable - Enable the fortiview incremental auto cache.
+ choices:
+ - 'disable'
+ - 'enable'
'''
EXAMPLES = '''
@@ -120,6 +130,7 @@ EXAMPLES = '''
aggressive_fortiview: <value in [disable, enable]>
interval: <integer>
status: <value in [disable, enable]>
+ incr_fortiview: <value in [disable, enable]>
'''
RETURN = '''
@@ -187,7 +198,8 @@ def main():
'options': {
'aggressive-fortiview': {'choices': ['disable', 'enable'], 'type': 'str'},
'interval': {'type': 'int'},
- 'status': {'choices': ['disable', 'enable'], 'type': 'str'}
+ 'status': {'choices': ['disable', 'enable'], 'type': 'str'},
+ 'incr-fortiview': {'v_range': [['7.2.5', '7.2.5']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_fortiview_setting.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_fortiview_setting.py
index ad50801be..bcc868989 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_fortiview_setting.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_fortiview_setting.py
@@ -197,7 +197,7 @@ def main():
'options': {
'not-scanned-apps': {'choices': ['exclude', 'include'], 'type': 'str'},
'resolve-ip': {'choices': ['disable', 'enable'], 'type': 'str'},
- 'data-source': {'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']], 'choices': ['auto', 'cache-only', 'log-and-cache'], 'type': 'str'}
+ 'data-source': {'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']], 'choices': ['auto', 'cache-only', 'log-and-cache'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_geoipcountry.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_geoipcountry.py
index 7ce523666..dae122e3f 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_geoipcountry.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_geoipcountry.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_system_geoipcountry
-short_description: no description
+short_description: System geoip country
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_global.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_global.py
index 0daeaaf57..c41d0285a 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_global.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_global.py
@@ -922,16 +922,85 @@ options:
choices:
- 'disable'
- 'enable'
- admin-lockout-method:
+ ssh-enc-algo:
+ type: list
+ elements: str
+ description: Deprecated, please rename it to ssh_enc_algo.
+ choices:
+ - 'chacha20-poly1305@openssh.com'
+ - 'aes128-ctr'
+ - 'aes192-ctr'
+ - 'aes256-ctr'
+ - 'arcfour256'
+ - 'arcfour128'
+ - 'aes128-cbc'
+ - '3des-cbc'
+ - 'blowfish-cbc'
+ - 'cast128-cbc'
+ - 'aes192-cbc'
+ - 'aes256-cbc'
+ - 'arcfour'
+ - 'rijndael-cbc@lysator.liu.se'
+ - 'aes128-gcm@openssh.com'
+ - 'aes256-gcm@openssh.com'
+ ssh-hostkey-algo:
+ type: list
+ elements: str
+ description: Deprecated, please rename it to ssh_hostkey_algo.
+ choices:
+ - 'ssh-rsa'
+ - 'ecdsa-sha2-nistp521'
+ - 'rsa-sha2-256'
+ - 'rsa-sha2-512'
+ - 'ssh-ed25519'
+ ssh-kex-algo:
+ type: list
+ elements: str
+ description: Deprecated, please rename it to ssh_kex_algo.
+ choices:
+ - 'diffie-hellman-group1-sha1'
+ - 'diffie-hellman-group14-sha1'
+ - 'diffie-hellman-group14-sha256'
+ - 'diffie-hellman-group16-sha512'
+ - 'diffie-hellman-group18-sha512'
+ - 'diffie-hellman-group-exchange-sha1'
+ - 'diffie-hellman-group-exchange-sha256'
+ - 'curve25519-sha256@libssh.org'
+ - 'ecdh-sha2-nistp256'
+ - 'ecdh-sha2-nistp384'
+ - 'ecdh-sha2-nistp521'
+ ssh-mac-algo:
+ type: list
+ elements: str
+ description: Deprecated, please rename it to ssh_mac_algo.
+ choices:
+ - 'hmac-md5'
+ - 'hmac-md5-etm@openssh.com'
+ - 'hmac-md5-96'
+ - 'hmac-md5-96-etm@openssh.com'
+ - 'hmac-sha1'
+ - 'hmac-sha1-etm@openssh.com'
+ - 'hmac-sha2-256'
+ - 'hmac-sha2-256-etm@openssh.com'
+ - 'hmac-sha2-512'
+ - 'hmac-sha2-512-etm@openssh.com'
+ - 'hmac-ripemd160'
+ - 'hmac-ripemd160@openssh.com'
+ - 'hmac-ripemd160-etm@openssh.com'
+ - 'umac-64@openssh.com'
+ - 'umac-128@openssh.com'
+ - 'umac-64-etm@openssh.com'
+ - 'umac-128-etm@openssh.com'
+ ssh-strong-crypto:
type: str
description:
- - Deprecated, please rename it to admin_lockout_method.
- - Lockout method for administration.
- - ip - Lockout by IP
- - user - Lockout by user
+ - Deprecated, please rename it to ssh_strong_crypto.
+ - Only allow strong ciphers for SSH when enabled.
+ - disable - Disable strong crypto for SSH.
+ - enable - Enable strong crypto for SSH.
choices:
- - 'ip'
- - 'user'
+ - 'disable'
+ - 'enable'
fgfm-cert-exclusive:
type: str
description:
@@ -942,6 +1011,36 @@ options:
choices:
- 'disable'
- 'enable'
+ fgfm-deny-unknown:
+ type: str
+ description:
+ - Deprecated, please rename it to fgfm_deny_unknown.
+ - set if allow devices with unknown SN actively register as an unauthorized device.
+ - disable - Allow devices with unknown SN to actively register as an unauthorized device.
+ - enable - Deny devices with unknown SN to actively register as an unauthorized device.
+ choices:
+ - 'disable'
+ - 'enable'
+ fgfm-peercert-withoutsn:
+ type: str
+ description:
+ - Deprecated, please rename it to fgfm_peercert_withoutsn.
+ - set if the subject CN or SAN of peer&apos;s SSL certificate sent in FGFM should include the serial number of the device.
+ - disable - Peer&apos;s certificate must include serial number in subject CN or SAN.
+ - enable - Peer&apos;s certificate might not include serial number in subject CN or SAN.
+ choices:
+ - 'disable'
+ - 'enable'
+ admin-lockout-method:
+ type: str
+ description:
+ - Deprecated, please rename it to admin_lockout_method.
+ - Lockout method for administration.
+ - ip - Lockout by IP
+ - user - Lockout by user
+ choices:
+ - 'ip'
+ - 'user'
workspace-unlock-after-install:
type: str
description:
@@ -1011,85 +1110,6 @@ options:
choices:
- 'disable'
- 'enable'
- ssh-enc-algo:
- type: list
- elements: str
- description: Deprecated, please rename it to ssh_enc_algo.
- choices:
- - 'chacha20-poly1305@openssh.com'
- - 'aes128-ctr'
- - 'aes192-ctr'
- - 'aes256-ctr'
- - 'arcfour256'
- - 'arcfour128'
- - 'aes128-cbc'
- - '3des-cbc'
- - 'blowfish-cbc'
- - 'cast128-cbc'
- - 'aes192-cbc'
- - 'aes256-cbc'
- - 'arcfour'
- - 'rijndael-cbc@lysator.liu.se'
- - 'aes128-gcm@openssh.com'
- - 'aes256-gcm@openssh.com'
- ssh-hostkey-algo:
- type: list
- elements: str
- description: Deprecated, please rename it to ssh_hostkey_algo.
- choices:
- - 'ssh-rsa'
- - 'ecdsa-sha2-nistp521'
- - 'rsa-sha2-256'
- - 'rsa-sha2-512'
- - 'ssh-ed25519'
- ssh-kex-algo:
- type: list
- elements: str
- description: Deprecated, please rename it to ssh_kex_algo.
- choices:
- - 'diffie-hellman-group1-sha1'
- - 'diffie-hellman-group14-sha1'
- - 'diffie-hellman-group14-sha256'
- - 'diffie-hellman-group16-sha512'
- - 'diffie-hellman-group18-sha512'
- - 'diffie-hellman-group-exchange-sha1'
- - 'diffie-hellman-group-exchange-sha256'
- - 'curve25519-sha256@libssh.org'
- - 'ecdh-sha2-nistp256'
- - 'ecdh-sha2-nistp384'
- - 'ecdh-sha2-nistp521'
- ssh-mac-algo:
- type: list
- elements: str
- description: Deprecated, please rename it to ssh_mac_algo.
- choices:
- - 'hmac-md5'
- - 'hmac-md5-etm@openssh.com'
- - 'hmac-md5-96'
- - 'hmac-md5-96-etm@openssh.com'
- - 'hmac-sha1'
- - 'hmac-sha1-etm@openssh.com'
- - 'hmac-sha2-256'
- - 'hmac-sha2-256-etm@openssh.com'
- - 'hmac-sha2-512'
- - 'hmac-sha2-512-etm@openssh.com'
- - 'hmac-ripemd160'
- - 'hmac-ripemd160@openssh.com'
- - 'hmac-ripemd160-etm@openssh.com'
- - 'umac-64@openssh.com'
- - 'umac-128@openssh.com'
- - 'umac-64-etm@openssh.com'
- - 'umac-128-etm@openssh.com'
- ssh-strong-crypto:
- type: str
- description:
- - Deprecated, please rename it to ssh_strong_crypto.
- - Only allow strong ciphers for SSH when enabled.
- - disable - Disable strong crypto for SSH.
- - enable - Enable strong crypto for SSH.
- choices:
- - 'disable'
- - 'enable'
'''
EXAMPLES = '''
@@ -1285,35 +1305,24 @@ def main():
'object-revision-mandatory-note': {'v_range': [['7.0.0', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'object-revision-object-max': {'v_range': [['7.0.0', '']], 'type': 'int'},
'object-revision-status': {'v_range': [['7.0.0', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'normalized-intf-zone-only': {'v_range': [['6.4.7', '6.4.13'], ['7.0.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'normalized-intf-zone-only': {'v_range': [['6.4.7', '6.4.14'], ['7.0.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'ssl-cipher-suites': {
- 'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']],
+ 'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']],
'type': 'list',
'options': {
- 'cipher': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'type': 'str'},
- 'priority': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'type': 'int'},
- 'version': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'choices': ['tls1.2-or-below', 'tls1.3'], 'type': 'str'}
+ 'cipher': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'type': 'str'},
+ 'priority': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'type': 'int'},
+ 'version': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'choices': ['tls1.2-or-below', 'tls1.3'], 'type': 'str'}
},
'elements': 'dict'
},
- 'gui-curl-timeout': {'v_range': [['6.4.11', '6.4.13'], ['7.0.7', '7.0.10'], ['7.2.2', '']], 'type': 'int'},
- 'table-entry-blink': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'contentpack-fgt-install': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'gui-polling-interval': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'int'},
- 'no-copy-permission-check': {'v_range': [['7.0.8', '7.0.10'], ['7.2.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'admin-lockout-method': {'v_range': [['7.2.2', '']], 'choices': ['ip', 'user'], 'type': 'str'},
- 'fgfm-cert-exclusive': {'v_range': [['7.2.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'workspace-unlock-after-install': {'v_range': [['7.2.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'log-checksum-upload': {'v_range': [['7.2.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'apache-mode': {'v_range': [['7.2.4', '7.2.4'], ['7.4.1', '']], 'choices': ['event', 'prefork'], 'type': 'str'},
- 'no-vip-value-check': {'v_range': [['7.2.4', '7.2.4'], ['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'fortiservice-port': {'v_range': [['7.4.1', '']], 'type': 'int'},
- 'management-ip': {'v_range': [['7.4.1', '']], 'type': 'str'},
- 'management-port': {'v_range': [['7.4.1', '']], 'type': 'int'},
- 'save-last-hit-in-adomdb': {'v_range': [['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'api-ip-binding': {'v_range': [['7.4.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'gui-curl-timeout': {'v_range': [['6.4.11', '6.4.14'], ['7.0.7', '7.0.12'], ['7.2.2', '']], 'type': 'int'},
+ 'table-entry-blink': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'contentpack-fgt-install': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'gui-polling-interval': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'int'},
+ 'no-copy-permission-check': {'v_range': [['7.0.8', '7.0.12'], ['7.2.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'ssh-enc-algo': {
- 'v_range': [['7.4.2', '']],
+ 'v_range': [['7.0.11', '7.0.12'], ['7.2.5', '7.2.5'], ['7.4.2', '']],
'type': 'list',
'choices': [
'chacha20-poly1305@openssh.com', 'aes128-ctr', 'aes192-ctr', 'aes256-ctr', 'arcfour256', 'arcfour128', 'aes128-cbc', '3des-cbc',
@@ -1323,13 +1332,13 @@ def main():
'elements': 'str'
},
'ssh-hostkey-algo': {
- 'v_range': [['7.4.2', '']],
+ 'v_range': [['7.0.11', '7.0.12'], ['7.2.5', '7.2.5'], ['7.4.2', '']],
'type': 'list',
'choices': ['ssh-rsa', 'ecdsa-sha2-nistp521', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-ed25519'],
'elements': 'str'
},
'ssh-kex-algo': {
- 'v_range': [['7.4.2', '']],
+ 'v_range': [['7.0.11', '7.0.12'], ['7.2.5', '7.2.5'], ['7.4.2', '']],
'type': 'list',
'choices': [
'diffie-hellman-group1-sha1', 'diffie-hellman-group14-sha1', 'diffie-hellman-group14-sha256', 'diffie-hellman-group16-sha512',
@@ -1339,7 +1348,7 @@ def main():
'elements': 'str'
},
'ssh-mac-algo': {
- 'v_range': [['7.4.2', '']],
+ 'v_range': [['7.0.11', '7.0.12'], ['7.2.5', '7.2.5'], ['7.4.2', '']],
'type': 'list',
'choices': [
'hmac-md5', 'hmac-md5-etm@openssh.com', 'hmac-md5-96', 'hmac-md5-96-etm@openssh.com', 'hmac-sha1', 'hmac-sha1-etm@openssh.com',
@@ -1349,7 +1358,24 @@ def main():
],
'elements': 'str'
},
- 'ssh-strong-crypto': {'v_range': [['7.4.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
+ 'ssh-strong-crypto': {
+ 'v_range': [['7.0.11', '7.0.12'], ['7.2.5', '7.2.5'], ['7.4.2', '']],
+ 'choices': ['disable', 'enable'],
+ 'type': 'str'
+ },
+ 'fgfm-cert-exclusive': {'v_range': [['7.0.12', '7.0.12'], ['7.2.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'fgfm-deny-unknown': {'v_range': [['7.0.12', '7.0.12'], ['7.2.5', '7.2.5']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'fgfm-peercert-withoutsn': {'v_range': [['7.0.12', '7.0.12'], ['7.2.5', '7.2.5']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'admin-lockout-method': {'v_range': [['7.2.2', '']], 'choices': ['ip', 'user'], 'type': 'str'},
+ 'workspace-unlock-after-install': {'v_range': [['7.2.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'log-checksum-upload': {'v_range': [['7.2.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'apache-mode': {'v_range': [['7.2.4', '7.2.5'], ['7.4.1', '']], 'choices': ['event', 'prefork'], 'type': 'str'},
+ 'no-vip-value-check': {'v_range': [['7.2.4', '7.2.5'], ['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'fortiservice-port': {'v_range': [['7.4.1', '']], 'type': 'int'},
+ 'management-ip': {'v_range': [['7.4.1', '']], 'type': 'str'},
+ 'management-port': {'v_range': [['7.4.1', '']], 'type': 'int'},
+ 'save-last-hit-in-adomdb': {'v_range': [['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'api-ip-binding': {'v_range': [['7.4.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_guiact.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_guiact.py
index 54f8143a4..ffdb63cf1 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_guiact.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_guiact.py
@@ -194,17 +194,17 @@ def main():
module_arg_spec = {
'system_guiact': {
'type': 'dict',
- 'v_range': [['6.0.0', '7.4.0']],
+ 'v_range': [['6.0.0', '7.0.11'], ['7.2.0', '7.2.4'], ['7.4.0', '7.4.0']],
'options': {
- 'backup_all': {'v_range': [['6.0.0', '7.4.0']], 'type': 'str'},
- 'backup_conf': {'v_range': [['6.0.0', '7.4.0']], 'type': 'str'},
- 'eventlog_msg': {'v_range': [['6.0.0', '7.4.0']], 'type': 'str'},
- 'eventlog_path': {'v_range': [['6.0.0', '7.4.0']], 'type': 'str'},
- 'reboot': {'v_range': [['6.0.0', '7.4.0']], 'type': 'int'},
- 'reset2default': {'v_range': [['6.0.0', '7.4.0']], 'type': 'int'},
- 'restore_all': {'v_range': [['6.0.0', '7.4.0']], 'type': 'str'},
- 'restore_conf': {'v_range': [['6.0.0', '7.4.0']], 'type': 'str'},
- 'time': {'v_range': [['6.0.0', '7.4.0']], 'type': 'str'}
+ 'backup_all': {'v_range': [['6.0.0', '7.0.11'], ['7.2.0', '7.2.4'], ['7.4.0', '7.4.0']], 'type': 'str'},
+ 'backup_conf': {'v_range': [['6.0.0', '7.0.11'], ['7.2.0', '7.2.4'], ['7.4.0', '7.4.0']], 'type': 'str'},
+ 'eventlog_msg': {'v_range': [['6.0.0', '7.0.11'], ['7.2.0', '7.2.4'], ['7.4.0', '7.4.0']], 'type': 'str'},
+ 'eventlog_path': {'v_range': [['6.0.0', '7.0.11'], ['7.2.0', '7.2.4'], ['7.4.0', '7.4.0']], 'type': 'str'},
+ 'reboot': {'v_range': [['6.0.0', '7.0.11'], ['7.2.0', '7.2.4'], ['7.4.0', '7.4.0']], 'type': 'int'},
+ 'reset2default': {'v_range': [['6.0.0', '7.0.11'], ['7.2.0', '7.2.4'], ['7.4.0', '7.4.0']], 'type': 'int'},
+ 'restore_all': {'v_range': [['6.0.0', '7.0.11'], ['7.2.0', '7.2.4'], ['7.4.0', '7.4.0']], 'type': 'str'},
+ 'restore_conf': {'v_range': [['6.0.0', '7.0.11'], ['7.2.0', '7.2.4'], ['7.4.0', '7.4.0']], 'type': 'str'},
+ 'time': {'v_range': [['6.0.0', '7.0.11'], ['7.2.0', '7.2.4'], ['7.4.0', '7.4.0']], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_ha.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_ha.py
index 6b2c40fe9..f084c4ed0 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_ha.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_ha.py
@@ -342,7 +342,7 @@ def main():
'vip': {'v_range': [['7.2.0', '']], 'type': 'str'},
'vrrp-adv-interval': {'v_range': [['7.2.0', '']], 'type': 'int'},
'vrrp-interface': {'v_range': [['7.2.0', '']], 'type': 'str'},
- 'vip-interface': {'v_range': [['7.2.4', '7.2.4'], ['7.4.1', '']], 'type': 'str'}
+ 'vip-interface': {'v_range': [['7.2.4', '7.2.5'], ['7.4.1', '']], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_disk_filter.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_disk_filter.py
index 09428cf81..c7d9f29fa 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_disk_filter.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_disk_filter.py
@@ -630,9 +630,9 @@ def main():
'system': {'choices': ['disable', 'enable'], 'type': 'str'},
'webport': {'choices': ['disable', 'enable'], 'type': 'str'},
'incident': {'v_range': [['6.4.0', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'aid': {'v_range': [['6.4.1', '7.2.4']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'aid': {'v_range': [['6.4.1', '7.2.5']], 'choices': ['disable', 'enable'], 'type': 'str'},
'docker': {'v_range': [['6.4.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'controller': {'v_range': [['7.0.9', '7.0.10'], ['7.2.4', '7.2.4'], ['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
+ 'controller': {'v_range': [['7.0.9', '7.0.12'], ['7.2.4', '7.2.5'], ['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_disk_setting.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_disk_setting.py
index f321b86d2..4693e351e 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_disk_setting.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_disk_setting.py
@@ -373,7 +373,7 @@ def main():
'uploaduser': {'type': 'str'},
'uploadzip': {'choices': ['disable', 'enable'], 'type': 'str'},
'log-disk-quota': {'v_range': [['7.0.3', '']], 'type': 'int'},
- 'max-log-file-num': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'type': 'int'}
+ 'max-log-file-num': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'type': 'int'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_fortianalyzer2_filter.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_fortianalyzer2_filter.py
index 5e2c9f429..556242635 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_fortianalyzer2_filter.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_fortianalyzer2_filter.py
@@ -630,9 +630,9 @@ def main():
'system': {'choices': ['disable', 'enable'], 'type': 'str'},
'webport': {'choices': ['disable', 'enable'], 'type': 'str'},
'incident': {'v_range': [['6.4.0', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'aid': {'v_range': [['6.4.1', '7.2.4']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'aid': {'v_range': [['6.4.1', '7.2.5']], 'choices': ['disable', 'enable'], 'type': 'str'},
'docker': {'v_range': [['6.4.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'controller': {'v_range': [['7.0.9', '7.0.10'], ['7.2.4', '7.2.4'], ['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
+ 'controller': {'v_range': [['7.0.9', '7.0.12'], ['7.2.4', '7.2.5'], ['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_fortianalyzer3_filter.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_fortianalyzer3_filter.py
index dcf77b86f..c0a6c9fdd 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_fortianalyzer3_filter.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_fortianalyzer3_filter.py
@@ -630,9 +630,9 @@ def main():
'system': {'choices': ['disable', 'enable'], 'type': 'str'},
'webport': {'choices': ['disable', 'enable'], 'type': 'str'},
'incident': {'v_range': [['6.4.0', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'aid': {'v_range': [['6.4.1', '7.2.4']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'aid': {'v_range': [['6.4.1', '7.2.5']], 'choices': ['disable', 'enable'], 'type': 'str'},
'docker': {'v_range': [['6.4.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'controller': {'v_range': [['7.0.9', '7.0.10'], ['7.2.4', '7.2.4'], ['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
+ 'controller': {'v_range': [['7.0.9', '7.0.12'], ['7.2.4', '7.2.5'], ['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_fortianalyzer_filter.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_fortianalyzer_filter.py
index 5ca0bd4dc..339b44321 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_fortianalyzer_filter.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_fortianalyzer_filter.py
@@ -630,9 +630,9 @@ def main():
'system': {'choices': ['disable', 'enable'], 'type': 'str'},
'webport': {'choices': ['disable', 'enable'], 'type': 'str'},
'incident': {'v_range': [['6.4.0', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'aid': {'v_range': [['6.4.1', '7.2.4']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'aid': {'v_range': [['6.4.1', '7.2.5']], 'choices': ['disable', 'enable'], 'type': 'str'},
'docker': {'v_range': [['6.4.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'controller': {'v_range': [['7.0.9', '7.0.10'], ['7.2.4', '7.2.4'], ['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
+ 'controller': {'v_range': [['7.0.9', '7.0.12'], ['7.2.4', '7.2.5'], ['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_memory_filter.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_memory_filter.py
index 001530dca..c91ef8e3a 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_memory_filter.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_memory_filter.py
@@ -630,9 +630,9 @@ def main():
'system': {'choices': ['disable', 'enable'], 'type': 'str'},
'webport': {'choices': ['disable', 'enable'], 'type': 'str'},
'incident': {'v_range': [['6.4.0', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'aid': {'v_range': [['6.4.1', '7.2.4']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'aid': {'v_range': [['6.4.1', '7.2.5']], 'choices': ['disable', 'enable'], 'type': 'str'},
'docker': {'v_range': [['6.4.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'controller': {'v_range': [['7.0.9', '7.0.10'], ['7.2.4', '7.2.4'], ['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
+ 'controller': {'v_range': [['7.0.9', '7.0.12'], ['7.2.4', '7.2.5'], ['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_setting.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_setting.py
index b4445c14a..61bfbd2f4 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_setting.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_setting.py
@@ -195,7 +195,7 @@ def main():
'log-interval-disk-full': {'type': 'int'},
'log-interval-gbday-exceeded': {'type': 'int'},
'log-daemon-crash': {'v_range': [['7.2.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'no-log-detection-threshold': {'v_range': [['7.2.4', '7.2.4'], ['7.4.2', '']], 'type': 'int'},
+ 'no-log-detection-threshold': {'v_range': [['7.2.4', '7.2.5'], ['7.4.2', '']], 'type': 'int'},
'log-interval-adom-perf-stats': {'v_range': [['7.4.0', '']], 'type': 'int'}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_syslogd2_filter.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_syslogd2_filter.py
index 882837ca0..0b2f31f7a 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_syslogd2_filter.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_syslogd2_filter.py
@@ -630,9 +630,9 @@ def main():
'system': {'choices': ['disable', 'enable'], 'type': 'str'},
'webport': {'choices': ['disable', 'enable'], 'type': 'str'},
'incident': {'v_range': [['6.4.0', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'aid': {'v_range': [['6.4.1', '7.2.4']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'aid': {'v_range': [['6.4.1', '7.2.5']], 'choices': ['disable', 'enable'], 'type': 'str'},
'docker': {'v_range': [['6.4.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'controller': {'v_range': [['7.0.9', '7.0.10'], ['7.2.4', '7.2.4'], ['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
+ 'controller': {'v_range': [['7.0.9', '7.0.12'], ['7.2.4', '7.2.5'], ['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_syslogd2_setting.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_syslogd2_setting.py
index 333400653..766cf3745 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_syslogd2_setting.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_syslogd2_setting.py
@@ -296,9 +296,9 @@ def main():
'severity': {'choices': ['emergency', 'alert', 'critical', 'error', 'warning', 'notification', 'information', 'debug'], 'type': 'str'},
'status': {'choices': ['disable', 'enable'], 'type': 'str'},
'syslog-name': {'type': 'str'},
- 'cert': {'v_range': [['6.4.6', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'reliable': {'v_range': [['6.4.6', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'secure-connection': {'v_range': [['6.4.6', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
+ 'cert': {'v_range': [['6.4.6', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'reliable': {'v_range': [['6.4.6', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'secure-connection': {'v_range': [['6.4.6', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_syslogd3_filter.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_syslogd3_filter.py
index edb5533f4..0d30e55bb 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_syslogd3_filter.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_syslogd3_filter.py
@@ -630,9 +630,9 @@ def main():
'system': {'choices': ['disable', 'enable'], 'type': 'str'},
'webport': {'choices': ['disable', 'enable'], 'type': 'str'},
'incident': {'v_range': [['6.4.0', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'aid': {'v_range': [['6.4.1', '7.2.4']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'aid': {'v_range': [['6.4.1', '7.2.5']], 'choices': ['disable', 'enable'], 'type': 'str'},
'docker': {'v_range': [['6.4.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'controller': {'v_range': [['7.0.9', '7.0.10'], ['7.2.4', '7.2.4'], ['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
+ 'controller': {'v_range': [['7.0.9', '7.0.12'], ['7.2.4', '7.2.5'], ['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_syslogd3_setting.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_syslogd3_setting.py
index d0012a027..c7bcf9b29 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_syslogd3_setting.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_syslogd3_setting.py
@@ -296,9 +296,9 @@ def main():
'severity': {'choices': ['emergency', 'alert', 'critical', 'error', 'warning', 'notification', 'information', 'debug'], 'type': 'str'},
'status': {'choices': ['disable', 'enable'], 'type': 'str'},
'syslog-name': {'type': 'str'},
- 'cert': {'v_range': [['6.4.6', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'reliable': {'v_range': [['6.4.6', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'secure-connection': {'v_range': [['6.4.6', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
+ 'cert': {'v_range': [['6.4.6', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'reliable': {'v_range': [['6.4.6', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'secure-connection': {'v_range': [['6.4.6', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_syslogd_filter.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_syslogd_filter.py
index 973b3a01f..1d4d83e1b 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_syslogd_filter.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_syslogd_filter.py
@@ -630,9 +630,9 @@ def main():
'system': {'choices': ['disable', 'enable'], 'type': 'str'},
'webport': {'choices': ['disable', 'enable'], 'type': 'str'},
'incident': {'v_range': [['6.4.0', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'aid': {'v_range': [['6.4.1', '7.2.4']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'aid': {'v_range': [['6.4.1', '7.2.5']], 'choices': ['disable', 'enable'], 'type': 'str'},
'docker': {'v_range': [['6.4.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'controller': {'v_range': [['7.0.9', '7.0.10'], ['7.2.4', '7.2.4'], ['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
+ 'controller': {'v_range': [['7.0.9', '7.0.12'], ['7.2.4', '7.2.5'], ['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_syslogd_setting.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_syslogd_setting.py
index ab244d09e..f69ff8eb3 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_syslogd_setting.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_locallog_syslogd_setting.py
@@ -296,9 +296,9 @@ def main():
'severity': {'choices': ['emergency', 'alert', 'critical', 'error', 'warning', 'notification', 'information', 'debug'], 'type': 'str'},
'status': {'choices': ['disable', 'enable'], 'type': 'str'},
'syslog-name': {'type': 'str'},
- 'cert': {'v_range': [['6.4.6', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'reliable': {'v_range': [['6.4.6', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'secure-connection': {'v_range': [['6.4.6', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
+ 'cert': {'v_range': [['6.4.6', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'reliable': {'v_range': [['6.4.6', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'secure-connection': {'v_range': [['6.4.6', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_log_settings.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_log_settings.py
index ce95a9590..ab7134324 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_log_settings.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_log_settings.py
@@ -947,9 +947,9 @@ def main():
'file-size': {'type': 'int'},
'gzip-format': {'choices': ['disable', 'enable'], 'type': 'str'},
'hour': {'type': 'int'},
- 'ip': {'v_range': [['6.0.0', '7.0.10']], 'type': 'str'},
- 'ip2': {'v_range': [['6.0.0', '7.0.10']], 'type': 'str'},
- 'ip3': {'v_range': [['6.0.0', '7.0.10']], 'type': 'str'},
+ 'ip': {'v_range': [['6.0.0', '7.0.12']], 'type': 'str'},
+ 'ip2': {'v_range': [['6.0.0', '7.0.12']], 'type': 'str'},
+ 'ip3': {'v_range': [['6.0.0', '7.0.12']], 'type': 'str'},
'log-format': {'choices': ['native', 'text', 'csv'], 'type': 'str'},
'min': {'type': 'int'},
'password': {'no_log': True, 'type': 'raw'},
@@ -982,9 +982,9 @@ def main():
'file-size': {'type': 'int'},
'gzip-format': {'choices': ['disable', 'enable'], 'type': 'str'},
'hour': {'type': 'int'},
- 'ip': {'v_range': [['6.0.0', '7.0.10']], 'type': 'str'},
- 'ip2': {'v_range': [['6.0.0', '7.0.10']], 'type': 'str'},
- 'ip3': {'v_range': [['6.0.0', '7.0.10']], 'type': 'str'},
+ 'ip': {'v_range': [['6.0.0', '7.0.12']], 'type': 'str'},
+ 'ip2': {'v_range': [['6.0.0', '7.0.12']], 'type': 'str'},
+ 'ip3': {'v_range': [['6.0.0', '7.0.12']], 'type': 'str'},
'log-format': {'choices': ['native', 'text', 'csv'], 'type': 'str'},
'min': {'type': 'int'},
'password': {'no_log': True, 'type': 'raw'},
@@ -1017,9 +1017,9 @@ def main():
'file-size': {'type': 'int'},
'gzip-format': {'choices': ['disable', 'enable'], 'type': 'str'},
'hour': {'type': 'int'},
- 'ip': {'v_range': [['6.0.0', '7.0.10']], 'type': 'str'},
- 'ip2': {'v_range': [['6.0.0', '7.0.10']], 'type': 'str'},
- 'ip3': {'v_range': [['6.0.0', '7.0.10']], 'type': 'str'},
+ 'ip': {'v_range': [['6.0.0', '7.0.12']], 'type': 'str'},
+ 'ip2': {'v_range': [['6.0.0', '7.0.12']], 'type': 'str'},
+ 'ip3': {'v_range': [['6.0.0', '7.0.12']], 'type': 'str'},
'log-format': {'choices': ['native', 'text', 'csv'], 'type': 'str'},
'min': {'type': 'int'},
'password': {'no_log': True, 'type': 'raw'},
@@ -1044,19 +1044,19 @@ def main():
}
},
'sync-search-timeout': {'type': 'int'},
- 'keep-dev-logs': {'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'keep-dev-logs': {'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'device-auto-detect': {
- 'v_range': [['7.0.10', '7.0.10'], ['7.2.4', '7.2.4'], ['7.4.1', '']],
+ 'v_range': [['7.0.10', '7.0.12'], ['7.2.4', '7.2.5'], ['7.4.1', '']],
'choices': ['disable', 'enable'],
'type': 'str'
},
'unencrypted-logging': {
- 'v_range': [['7.0.10', '7.0.10'], ['7.2.4', '7.2.4'], ['7.4.1', '']],
+ 'v_range': [['7.0.10', '7.0.12'], ['7.2.4', '7.2.5'], ['7.4.1', '']],
'choices': ['disable', 'enable'],
'type': 'str'
},
- 'log-interval-dev-no-logging': {'v_range': [['7.4.2', '']], 'type': 'int'},
- 'log-upload-interval-dev-no-logging': {'v_range': [['7.4.2', '']], 'type': 'int'}
+ 'log-interval-dev-no-logging': {'v_range': [['7.2.5', '7.2.5'], ['7.4.2', '']], 'type': 'int'},
+ 'log-upload-interval-dev-no-logging': {'v_range': [['7.2.5', '7.2.5'], ['7.4.2', '']], 'type': 'int'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_log_settings_rollinganalyzer.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_log_settings_rollinganalyzer.py
index 954dbbc72..da37dc98e 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_log_settings_rollinganalyzer.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_log_settings_rollinganalyzer.py
@@ -370,9 +370,9 @@ def main():
'file-size': {'type': 'int'},
'gzip-format': {'choices': ['disable', 'enable'], 'type': 'str'},
'hour': {'type': 'int'},
- 'ip': {'v_range': [['6.0.0', '7.0.10']], 'type': 'str'},
- 'ip2': {'v_range': [['6.0.0', '7.0.10']], 'type': 'str'},
- 'ip3': {'v_range': [['6.0.0', '7.0.10']], 'type': 'str'},
+ 'ip': {'v_range': [['6.0.0', '7.0.12']], 'type': 'str'},
+ 'ip2': {'v_range': [['6.0.0', '7.0.12']], 'type': 'str'},
+ 'ip3': {'v_range': [['6.0.0', '7.0.12']], 'type': 'str'},
'log-format': {'choices': ['native', 'text', 'csv'], 'type': 'str'},
'min': {'type': 'int'},
'password': {'no_log': True, 'type': 'raw'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_log_settings_rollinglocal.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_log_settings_rollinglocal.py
index 0e50eae15..876abbbf8 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_log_settings_rollinglocal.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_log_settings_rollinglocal.py
@@ -370,9 +370,9 @@ def main():
'file-size': {'type': 'int'},
'gzip-format': {'choices': ['disable', 'enable'], 'type': 'str'},
'hour': {'type': 'int'},
- 'ip': {'v_range': [['6.0.0', '7.0.10']], 'type': 'str'},
- 'ip2': {'v_range': [['6.0.0', '7.0.10']], 'type': 'str'},
- 'ip3': {'v_range': [['6.0.0', '7.0.10']], 'type': 'str'},
+ 'ip': {'v_range': [['6.0.0', '7.0.12']], 'type': 'str'},
+ 'ip2': {'v_range': [['6.0.0', '7.0.12']], 'type': 'str'},
+ 'ip3': {'v_range': [['6.0.0', '7.0.12']], 'type': 'str'},
'log-format': {'choices': ['native', 'text', 'csv'], 'type': 'str'},
'min': {'type': 'int'},
'password': {'no_log': True, 'type': 'raw'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_log_settings_rollingregular.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_log_settings_rollingregular.py
index 80c19520e..f113873ef 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_log_settings_rollingregular.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_log_settings_rollingregular.py
@@ -370,9 +370,9 @@ def main():
'file-size': {'type': 'int'},
'gzip-format': {'choices': ['disable', 'enable'], 'type': 'str'},
'hour': {'type': 'int'},
- 'ip': {'v_range': [['6.0.0', '7.0.10']], 'type': 'str'},
- 'ip2': {'v_range': [['6.0.0', '7.0.10']], 'type': 'str'},
- 'ip3': {'v_range': [['6.0.0', '7.0.10']], 'type': 'str'},
+ 'ip': {'v_range': [['6.0.0', '7.0.12']], 'type': 'str'},
+ 'ip2': {'v_range': [['6.0.0', '7.0.12']], 'type': 'str'},
+ 'ip3': {'v_range': [['6.0.0', '7.0.12']], 'type': 'str'},
'log-format': {'choices': ['native', 'text', 'csv'], 'type': 'str'},
'min': {'type': 'int'},
'password': {'no_log': True, 'type': 'raw'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_log_topology.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_log_topology.py
index 8519dfedf..a79e35331 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_log_topology.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_log_topology.py
@@ -166,10 +166,10 @@ def main():
module_arg_spec = {
'system_log_topology': {
'type': 'dict',
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '']],
'options': {
- 'max-depth': {'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '']], 'type': 'int'},
- 'max-depth-share': {'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '']], 'type': 'int'}
+ 'max-depth': {'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '']], 'type': 'int'},
+ 'max-depth-share': {'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '']], 'type': 'int'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_mail.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_mail.py
index 5cd1fa3e0..f9dd3ed9c 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_mail.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_mail.py
@@ -253,7 +253,7 @@ def main():
'user': {'type': 'str'},
'auth-type': {'v_range': [['6.4.6', '']], 'choices': ['psk', 'certificate'], 'type': 'str'},
'local-cert': {'v_range': [['6.4.6', '']], 'type': 'str'},
- 'from': {'v_range': [['7.0.7', '7.0.10'], ['7.2.2', '']], 'type': 'str'}
+ 'from': {'v_range': [['7.0.7', '7.0.12'], ['7.2.2', '']], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_meta.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_meta.py
index 260c0d830..edd28ab5a 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_meta.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_meta.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_system_meta
-short_description: no description
+short_description: System meta
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_meta_sysmetafields.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_meta_sysmetafields.py
index f5af11f1b..282ddfacb 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_meta_sysmetafields.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_meta_sysmetafields.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_system_meta_sysmetafields
-short_description: no description
+short_description: System meta sys meta fields
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu.py
index 77d4ee0f2..e732c36fc 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu.py
@@ -526,6 +526,13 @@ options:
choices:
- 'drop'
- 'trap-to-host'
+ sctp-csum-err:
+ type: str
+ description: Deprecated, please rename it to sctp_csum_err. Invalid IPv4 SCTP checksum anomalies.
+ choices:
+ - 'allow'
+ - 'drop'
+ - 'trap-to-host'
gtp-enhanced-cpu-range:
type: str
description: Deprecated, please rename it to gtp_enhanced_cpu_range. GTP enhanced CPU range option.
@@ -2433,6 +2440,27 @@ options:
- '256MB'
- '512MB'
- '1GB'
+ default-tcp-refresh-dir:
+ type: str
+ description: Deprecated, please rename it to default_tcp_refresh_dir. Default SSE timeout TCP refresh direction.
+ choices:
+ - 'both'
+ - 'outgoing'
+ - 'incoming'
+ default-udp-refresh-dir:
+ type: str
+ description: Deprecated, please rename it to default_udp_refresh_dir. Default SSE timeout UDP refresh direction.
+ choices:
+ - 'both'
+ - 'outgoing'
+ - 'incoming'
+ nss-threads-option:
+ type: str
+ description: Deprecated, please rename it to nss_threads_option. Configure thread options for the NP7s NSS module.
+ choices:
+ - '4t-eif'
+ - '4t-noeif'
+ - '2t'
prp-session-clear-mode:
type: str
description: Deprecated, please rename it to prp_session_clear_mode. PRP session clear mode for excluded ip sessions.
@@ -2462,20 +2490,30 @@ options:
choices:
- 'include'
- 'exclude'
- default-tcp-refresh-dir:
+ pba-port-select-mode:
type: str
- description: Deprecated, please rename it to default_tcp_refresh_dir. Default SSE timeout TCP refresh direction.
+ description: Deprecated, please rename it to pba_port_select_mode. Port selection mode for PBA IP pool.
choices:
- - 'both'
- - 'outgoing'
- - 'incoming'
- default-udp-refresh-dir:
+ - 'random'
+ - 'direct'
+ spa-port-select-mode:
type: str
- description: Deprecated, please rename it to default_udp_refresh_dir. Default SSE timeout UDP refresh direction.
+ description: Deprecated, please rename it to spa_port_select_mode. Port selection mode for SPA IP pool.
choices:
- - 'both'
- - 'outgoing'
- - 'incoming'
+ - 'random'
+ - 'direct'
+ split-ipsec-engines:
+ type: str
+ description: Deprecated, please rename it to split_ipsec_engines. Enable/disable Split IPsec Engines.
+ choices:
+ - 'disable'
+ - 'enable'
+ tunnel-over-vlink:
+ type: str
+ description: Deprecated, please rename it to tunnel_over_vlink. Enable/disable selection of which NP6 chip the tunnel uses
+ choices:
+ - 'disable'
+ - 'enable'
max-receive-unit:
type: int
description: Deprecated, please rename it to max_receive_unit. Set the maximum packet size for receive, larger packets will be silently...
@@ -3409,31 +3447,6 @@ options:
vid:
type: int
description: NPU TCAM VID.
- nss-threads-option:
- type: str
- description: Deprecated, please rename it to nss_threads_option. Configure thread options for the NP7s NSS module.
- choices:
- - '4t-eif'
- - '4t-noeif'
- - '2t'
- pba-port-select-mode:
- type: str
- description: Deprecated, please rename it to pba_port_select_mode. Port selection mode for PBA IP pool.
- choices:
- - 'random'
- - 'direct'
- spa-port-select-mode:
- type: str
- description: Deprecated, please rename it to spa_port_select_mode. Port selection mode for SPA IP pool.
- choices:
- - 'random'
- - 'direct'
- split-ipsec-engines:
- type: str
- description: Deprecated, please rename it to split_ipsec_engines. Enable/disable Split IPsec Engines.
- choices:
- - 'disable'
- - 'enable'
'''
EXAMPLES = '''
@@ -3524,6 +3537,7 @@ EXAMPLES = '''
sctp_crc_err: <value in [drop, trap-to-host]>
sctp_clen_err: <value in [drop, trap-to-host]>
uesp_minlen_err: <value in [drop, trap-to-host]>
+ sctp_csum_err: <value in [allow, drop, trap-to-host]>
gtp_enhanced_cpu_range: <value in [0, 1, 2]>
gtp_enhanced_mode: <value in [disable, enable]>
host_shortcut_mode: <value in [bi-directional, host-shortcut]>
@@ -3798,13 +3812,18 @@ EXAMPLES = '''
ipsec_throughput_msg_frequency: <value in [disable, 32KB, 64KB, ...]>
ipt_STS_timeout: <value in [1, 2, 3, ...]>
ipt_throughput_msg_frequency: <value in [disable, 32KB, 64KB, ...]>
+ default_tcp_refresh_dir: <value in [both, outgoing, incoming]>
+ default_udp_refresh_dir: <value in [both, outgoing, incoming]>
+ nss_threads_option: <value in [4t-eif, 4t-noeif, 2t]>
prp_session_clear_mode: <value in [blocking, non-blocking, do-not-clear]>
shaping_stats: <value in [disable, enable]>
sw_tr_hash:
draco15: <value in [disable, enable]>
tcp_udp_port: <value in [include, exclude]>
- default_tcp_refresh_dir: <value in [both, outgoing, incoming]>
- default_udp_refresh_dir: <value in [both, outgoing, incoming]>
+ pba_port_select_mode: <value in [random, direct]>
+ spa_port_select_mode: <value in [random, direct]>
+ split_ipsec_engines: <value in [disable, enable]>
+ tunnel_over_vlink: <value in [disable, enable]>
max_receive_unit: <integer>
npu_tcam:
-
@@ -4022,10 +4041,6 @@ EXAMPLES = '''
xlt_vid_v: <value in [disable, enable]>
type: <value in [L2_src_tc, L2_tgt_tc, L2_src_mir, ...]>
vid: <integer>
- nss_threads_option: <value in [4t-eif, 4t-noeif, 2t]>
- pba_port_select_mode: <value in [random, direct]>
- spa_port_select_mode: <value in [random, direct]>
- split_ipsec_engines: <value in [disable, enable]>
'''
RETURN = '''
@@ -4092,162 +4107,163 @@ def main():
'adom': {'required': True, 'type': 'str'},
'system_npu': {
'type': 'dict',
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'options': {
- 'capwap-offload': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'capwap-offload': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'dedicated-management-affinity': {'v_range': [['7.0.1', '']], 'type': 'str'},
- 'dedicated-management-cpu': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'fastpath': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'dedicated-management-cpu': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'fastpath': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'fp-anomaly': {
'type': 'dict',
'options': {
- 'esp-minlen-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'icmp-csum-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'icmp-minlen-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'ipv4-csum-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'ipv4-ihl-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'ipv4-len-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'ipv4-opt-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'ipv4-ttlzero-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'ipv4-ver-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-exthdr-len-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-exthdr-order-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-ihl-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-plen-zero': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-ver-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'tcp-csum-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'tcp-hlen-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'tcp-plen-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'udp-csum-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'udp-hlen-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'udp-len-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'udp-plen-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'udplite-cover-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'udplite-csum-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'unknproto-minlen-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'tcp-fin-only': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv4-optsecurity': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-optralert': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'tcp-syn-fin': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv4-proto-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-saddr-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'icmp-frag': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv4-optssrr': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-opthomeaddr': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'udp-land': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-optinvld': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'tcp-fin-noack': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-proto-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'tcp-land': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv4-unknopt': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv4-optstream': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-optjumbo': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'icmp-land': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'tcp-winnuke': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-daddr-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv4-land': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-opttunnel': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'tcp-no-flag': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-land': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv4-optlsrr': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'esp-minlen-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'icmp-csum-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'icmp-minlen-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv4-csum-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv4-ihl-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv4-len-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv4-opt-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv4-ttlzero-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv4-ver-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-exthdr-len-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-exthdr-order-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-ihl-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-plen-zero': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-ver-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'tcp-csum-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'tcp-hlen-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'tcp-plen-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'udp-csum-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'udp-hlen-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'udp-len-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'udp-plen-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'udplite-cover-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'udplite-csum-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'unknproto-minlen-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'tcp-fin-only': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv4-optsecurity': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-optralert': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'tcp-syn-fin': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv4-proto-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-saddr-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'icmp-frag': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv4-optssrr': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-opthomeaddr': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'udp-land': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-optinvld': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'tcp-fin-noack': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-proto-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'tcp-land': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv4-unknopt': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv4-optstream': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-optjumbo': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'icmp-land': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'tcp-winnuke': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-daddr-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv4-land': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-opttunnel': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'tcp-no-flag': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-land': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv4-optlsrr': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
'ipv4-opttimestamp': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['allow', 'drop', 'trap-to-host'],
'type': 'str'
},
- 'ipv4-optrr': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-optnsap': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-unknopt': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'tcp-syn-data': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-optendpid': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'gtpu-plen-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'vxlan-minlen-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'capwap-minlen-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'gre-csum-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'nvgre-minlen-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'sctp-l4len-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'tcp-hlenvsl4len-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'sctp-crc-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'sctp-clen-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'uesp-minlen-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'}
+ 'ipv4-optrr': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-optnsap': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-unknopt': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'tcp-syn-data': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-optendpid': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'gtpu-plen-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'vxlan-minlen-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'capwap-minlen-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'gre-csum-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'nvgre-minlen-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'sctp-l4len-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'tcp-hlenvsl4len-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'sctp-crc-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'sctp-clen-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'uesp-minlen-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'sctp-csum-err': {'v_range': [['7.2.5', '7.2.5']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'}
}
},
- 'gtp-enhanced-cpu-range': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['0', '1', '2'], 'type': 'str'},
- 'gtp-enhanced-mode': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'host-shortcut-mode': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['bi-directional', 'host-shortcut'], 'type': 'str'},
+ 'gtp-enhanced-cpu-range': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['0', '1', '2'], 'type': 'str'},
+ 'gtp-enhanced-mode': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'host-shortcut-mode': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['bi-directional', 'host-shortcut'], 'type': 'str'},
'htx-gtse-quota': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': [
'100Mbps', '200Mbps', '300Mbps', '400Mbps', '500Mbps', '600Mbps', '700Mbps', '800Mbps', '900Mbps', '1Gbps', '2Gbps', '4Gbps',
'8Gbps', '10Gbps'
],
'type': 'str'
},
- 'intf-shaping-offload': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'iph-rsvd-re-cksum': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'ipsec-dec-subengine-mask': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'ipsec-enc-subengine-mask': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'ipsec-inbound-cache': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'ipsec-mtu-override': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'ipsec-over-vlink': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'intf-shaping-offload': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'iph-rsvd-re-cksum': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'ipsec-dec-subengine-mask': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'ipsec-enc-subengine-mask': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'ipsec-inbound-cache': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'ipsec-mtu-override': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'ipsec-over-vlink': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'isf-np-queues': {
'type': 'dict',
'options': {
- 'cos0': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'cos1': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'cos2': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'cos3': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'cos4': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'cos5': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'cos6': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'cos7': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'}
+ 'cos0': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'cos1': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'cos2': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'cos3': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'cos4': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'cos5': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'cos6': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'cos7': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'}
}
},
- 'lag-out-port-select': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'lag-out-port-select': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'mcast-session-accounting': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['disable', 'session-based', 'tpe-based'],
'type': 'str'
},
- 'np6-cps-optimization-mode': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'np6-cps-optimization-mode': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'per-session-accounting': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['enable', 'disable', 'enable-by-log', 'all-enable', 'traffic-log-only'],
'type': 'str'
},
'port-cpu-map': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'type': 'list',
'options': {
- 'cpu-core': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'interface': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'}
+ 'cpu-core': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'interface': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'}
},
'elements': 'dict'
},
'port-npu-map': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'type': 'list',
'options': {
- 'interface': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'npu-group-index': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'}
+ 'interface': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'npu-group-index': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'}
},
'elements': 'dict'
},
'priority-protocol': {
'type': 'dict',
'options': {
- 'bfd': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'bgp': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'slbc': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
+ 'bfd': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'bgp': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'slbc': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
},
- 'qos-mode': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'priority', 'round-robin'], 'type': 'str'},
- 'rdp-offload': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'recover-np6-link': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'qos-mode': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'priority', 'round-robin'], 'type': 'str'},
+ 'rdp-offload': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'recover-np6-link': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'session-denied-offload': {'v_range': [['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'sse-backpressure': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'strip-clear-text-padding': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'strip-esp-padding': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'sse-backpressure': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'strip-clear-text-padding': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'strip-esp-padding': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'sw-eh-hash': {
'type': 'dict',
'options': {
@@ -4263,569 +4279,569 @@ def main():
}
},
'sw-np-bandwidth': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['0G', '2G', '4G', '5G', '6G', '7G', '8G', '9G'],
'type': 'str'
},
- 'switch-np-hash': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['src-ip', 'dst-ip', 'src-dst-ip'], 'type': 'str'},
- 'uesp-offload': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'switch-np-hash': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['src-ip', 'dst-ip', 'src-dst-ip'], 'type': 'str'},
+ 'uesp-offload': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'np-queues': {
'type': 'dict',
'options': {
'ethernet-type': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'type': 'list',
'options': {
- 'name': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'queue': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'type': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'weight': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'}
+ 'name': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'queue': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'type': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'weight': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'}
},
'elements': 'dict'
},
'ip-protocol': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'type': 'list',
'options': {
- 'name': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'protocol': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'queue': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'weight': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'}
+ 'name': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'protocol': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'queue': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'weight': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'}
},
'elements': 'dict'
},
'ip-service': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'type': 'list',
'options': {
- 'dport': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'name': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'protocol': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'queue': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'sport': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'weight': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'}
+ 'dport': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'name': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'protocol': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'queue': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'sport': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'weight': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'}
},
'elements': 'dict'
},
'profile': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'type': 'list',
'options': {
'cos0': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'cos1': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'cos2': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'cos3': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'cos4': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'cos5': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'cos6': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'cos7': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp0': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp1': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp10': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp11': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp12': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp13': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp14': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp15': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp16': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp17': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp18': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp19': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp2': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp20': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp21': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp22': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp23': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp24': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp25': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp26': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp27': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp28': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp29': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp3': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp30': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp31': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp32': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp33': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp34': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp35': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp36': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp37': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp38': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp39': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp4': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp40': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp41': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp42': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp43': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp44': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp45': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp46': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp47': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp48': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp49': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp5': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp50': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp51': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp52': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp53': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp54': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp55': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp56': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp57': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp58': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp59': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp6': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp60': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp61': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp62': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp63': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp7': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp8': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp9': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
- 'id': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'type': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['cos', 'dscp'], 'type': 'str'},
- 'weight': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'}
+ 'id': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'type': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['cos', 'dscp'], 'type': 'str'},
+ 'weight': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'}
},
'elements': 'dict'
},
'scheduler': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'type': 'list',
'options': {
- 'mode': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['none', 'priority', 'round-robin'], 'type': 'str'},
- 'name': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'}
+ 'mode': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['none', 'priority', 'round-robin'], 'type': 'str'},
+ 'name': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'}
},
'elements': 'dict'
}
}
},
'udp-timeout-profile': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'type': 'list',
'options': {
- 'id': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'udp-idle': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'}
+ 'id': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'udp-idle': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'}
},
'elements': 'dict'
},
- 'qtm-buf-mode': {'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']], 'choices': ['6ch', '4ch'], 'type': 'str'},
+ 'qtm-buf-mode': {'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']], 'choices': ['6ch', '4ch'], 'type': 'str'},
'default-qos-type': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['policing', 'shaping', 'policing-enhanced'],
'type': 'str'
},
- 'tcp-rst-timeout': {'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '']], 'type': 'int'},
+ 'tcp-rst-timeout': {'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '']], 'type': 'int'},
'ipsec-local-uesp-port': {'v_range': [['7.0.3', '']], 'type': 'int'},
- 'htab-dedi-queue-nr': {'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '']], 'type': 'int'},
- 'double-level-mcast-offload': {'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'dse-timeout': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'ippool-overload-low': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'pba-eim': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disallow', 'allow'], 'type': 'str'},
+ 'htab-dedi-queue-nr': {'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '']], 'type': 'int'},
+ 'double-level-mcast-offload': {'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'dse-timeout': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'ippool-overload-low': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'pba-eim': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disallow', 'allow'], 'type': 'str'},
'policy-offload-level': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['disable', 'dos-offload', 'full-offload'],
'type': 'str'
},
- 'max-session-timeout': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'port-path-option': {'type': 'dict', 'options': {'ports-using-npu': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'raw'}}},
- 'vlan-lookup-cache': {'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'max-session-timeout': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'port-path-option': {'type': 'dict', 'options': {'ports-using-npu': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'raw'}}},
+ 'vlan-lookup-cache': {'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'dos-options': {
'type': 'dict',
'options': {
- 'npu-dos-meter-mode': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['local', 'global'], 'type': 'str'},
+ 'npu-dos-meter-mode': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['local', 'global'], 'type': 'str'},
'npu-dos-synproxy-mode': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['synack2ack', 'pass-synack'],
'type': 'str'
},
- 'npu-dos-tpe-mode': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
+ 'npu-dos-tpe-mode': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
},
- 'hash-tbl-spread': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'hash-tbl-spread': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'tcp-timeout-profile': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'type': 'list',
'options': {
- 'close-wait': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'fin-wait': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'id': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'syn-sent': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'syn-wait': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'tcp-idle': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'time-wait': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'}
+ 'close-wait': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'fin-wait': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'id': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'syn-sent': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'syn-wait': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'tcp-idle': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'time-wait': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'}
},
'elements': 'dict'
},
'ip-reassembly': {
'type': 'dict',
'options': {
- 'max-timeout': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'min-timeout': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'status': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
+ 'max-timeout': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'min-timeout': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'status': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
},
- 'gtp-support': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'htx-icmp-csum-chk': {'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']], 'choices': ['pass', 'drop'], 'type': 'str'},
+ 'gtp-support': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'htx-icmp-csum-chk': {'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']], 'choices': ['pass', 'drop'], 'type': 'str'},
'hpe': {
'type': 'dict',
'options': {
- 'all-protocol': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'arp-max': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'enable-shaper': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'esp-max': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'high-priority': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'icmp-max': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'ip-frag-max': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'ip-others-max': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'l2-others-max': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'pri-type-max': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'sctp-max': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'tcp-max': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'tcpfin-rst-max': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'tcpsyn-ack-max': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'tcpsyn-max': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'udp-max': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
+ 'all-protocol': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'arp-max': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'enable-shaper': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'esp-max': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'high-priority': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'icmp-max': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'ip-frag-max': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'ip-others-max': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'l2-others-max': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'pri-type-max': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'sctp-max': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'tcp-max': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'tcpfin-rst-max': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'tcpsyn-ack-max': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'tcpsyn-max': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'udp-max': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
'enable-queue-shaper': {
- 'v_range': [['7.0.9', '7.0.10'], ['7.2.4', '7.2.4'], ['7.4.2', '']],
+ 'v_range': [['7.0.9', '7.0.12'], ['7.2.4', '7.2.5'], ['7.4.2', '']],
'choices': ['disable', 'enable'],
'type': 'str'
},
- 'exception-code': {'v_range': [['7.0.9', '7.0.10'], ['7.2.4', '7.2.4'], ['7.4.2', '']], 'type': 'int'},
- 'fragment-with-sess': {'v_range': [['7.0.9', '7.0.10'], ['7.2.4', '7.2.4'], ['7.4.2', '']], 'type': 'int'},
- 'fragment-without-session': {'v_range': [['7.0.9', '7.0.10'], ['7.2.4', '7.2.4'], ['7.4.2', '']], 'type': 'int'},
- 'queue-shaper-max': {'v_range': [['7.0.9', '7.0.10'], ['7.2.4', '7.2.4'], ['7.4.2', '']], 'type': 'int'}
+ 'exception-code': {'v_range': [['7.0.9', '7.0.12'], ['7.2.4', '7.2.5'], ['7.4.2', '']], 'type': 'int'},
+ 'fragment-with-sess': {'v_range': [['7.0.9', '7.0.12'], ['7.2.4', '7.2.5'], ['7.4.2', '']], 'type': 'int'},
+ 'fragment-without-session': {'v_range': [['7.0.9', '7.0.12'], ['7.2.4', '7.2.5'], ['7.4.2', '']], 'type': 'int'},
+ 'queue-shaper-max': {'v_range': [['7.0.9', '7.0.12'], ['7.2.4', '7.2.5'], ['7.4.2', '']], 'type': 'int'}
}
},
'dsw-dts-profile': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'type': 'list',
'options': {
'action': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['wait', 'drop', 'drop_tmr_0', 'drop_tmr_1', 'enque', 'enque_0', 'enque_1'],
'type': 'str'
},
- 'min-limit': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'profile-id': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'step': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'}
+ 'min-limit': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'profile-id': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'step': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'}
},
'elements': 'dict'
},
- 'hash-config': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['5-tuple', 'src-ip', 'src-dst-ip'], 'type': 'str'},
- 'ipsec-ob-np-sel': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['RR', 'rr', 'Packet', 'Hash'], 'type': 'str'},
- 'napi-break-interval': {'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '']], 'type': 'int'},
+ 'hash-config': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['5-tuple', 'src-ip', 'src-dst-ip'], 'type': 'str'},
+ 'ipsec-ob-np-sel': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['RR', 'rr', 'Packet', 'Hash'], 'type': 'str'},
+ 'napi-break-interval': {'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '']], 'type': 'int'},
'background-sse-scan': {
'type': 'dict',
'options': {
- 'scan': {'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'stats-update-interval': {'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']], 'type': 'int'},
- 'udp-keepalive-interval': {'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']], 'type': 'int'},
- 'scan-stale': {'v_range': [['7.4.1', '']], 'type': 'int'},
- 'scan-vt': {'v_range': [['7.4.1', '']], 'type': 'int'},
- 'stats-qual-access': {'v_range': [['7.4.1', '']], 'type': 'int'},
- 'stats-qual-duration': {'v_range': [['7.4.1', '']], 'type': 'int'},
- 'udp-qual-access': {'v_range': [['7.4.1', '']], 'type': 'int'},
- 'udp-qual-duration': {'v_range': [['7.4.1', '']], 'type': 'int'}
+ 'scan': {'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'stats-update-interval': {'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']], 'type': 'int'},
+ 'udp-keepalive-interval': {'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']], 'type': 'int'},
+ 'scan-stale': {'v_range': [['7.0.12', '7.0.12'], ['7.4.1', '']], 'type': 'int'},
+ 'scan-vt': {'v_range': [['7.0.12', '7.0.12'], ['7.4.1', '']], 'type': 'int'},
+ 'stats-qual-access': {'v_range': [['7.0.12', '7.0.12'], ['7.4.1', '']], 'type': 'int'},
+ 'stats-qual-duration': {'v_range': [['7.0.12', '7.0.12'], ['7.4.1', '']], 'type': 'int'},
+ 'udp-qual-access': {'v_range': [['7.0.12', '7.0.12'], ['7.4.1', '']], 'type': 'int'},
+ 'udp-qual-duration': {'v_range': [['7.0.12', '7.0.12'], ['7.4.1', '']], 'type': 'int'}
}
},
- 'inbound-dscp-copy-port': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'raw'},
- 'session-acct-interval': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'htab-msg-queue': {'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '']], 'choices': ['idle', 'data', 'dedicated'], 'type': 'str'},
+ 'inbound-dscp-copy-port': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'raw'},
+ 'session-acct-interval': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'htab-msg-queue': {'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '']], 'choices': ['idle', 'data', 'dedicated'], 'type': 'str'},
'dsw-queue-dts-profile': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'type': 'list',
'options': {
'iport': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': [
'EIF0', 'eif0', 'EIF1', 'eif1', 'EIF2', 'eif2', 'EIF3', 'eif3', 'EIF4', 'eif4', 'EIF5', 'eif5', 'EIF6', 'eif6', 'EIF7',
'eif7', 'HTX0', 'htx0', 'HTX1', 'htx1', 'SSE0', 'sse0', 'SSE1', 'sse1', 'SSE2', 'sse2', 'SSE3', 'sse3', 'RLT', 'rlt',
@@ -4835,9 +4851,9 @@ def main():
],
'type': 'str'
},
- 'name': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
+ 'name': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
'oport': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': [
'EIF0', 'eif0', 'EIF1', 'eif1', 'EIF2', 'eif2', 'EIF3', 'eif3', 'EIF4', 'eif4', 'EIF5', 'eif5', 'EIF6', 'eif6', 'EIF7',
'eif7', 'HRX', 'hrx', 'SSE0', 'sse0', 'SSE1', 'sse1', 'SSE2', 'sse2', 'SSE3', 'sse3', 'RLT', 'rlt', 'DFR', 'dfr',
@@ -4847,57 +4863,57 @@ def main():
],
'type': 'str'
},
- 'profile-id': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'queue-select': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'}
+ 'profile-id': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'queue-select': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'}
},
'elements': 'dict'
},
- 'hw-ha-scan-interval': {'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']], 'type': 'int'},
- 'ippool-overload-high': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'nat46-force-ipv4-packet-forwarding': {'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'prp-port-out': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'raw'},
+ 'hw-ha-scan-interval': {'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']], 'type': 'int'},
+ 'ippool-overload-high': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'nat46-force-ipv4-packet-forwarding': {'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'prp-port-out': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'raw'},
'isf-np-rx-tr-distr': {
- 'v_range': [['6.4.8', '6.4.13'], ['7.0.4', '']],
+ 'v_range': [['6.4.8', '6.4.14'], ['7.0.4', '']],
'choices': ['port-flow', 'round-robin', 'randomized'],
'type': 'str'
},
'mcast-session-counting6': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['disable', 'enable', 'session-based', 'tpe-based'],
'type': 'str'
},
- 'prp-port-in': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'raw'},
- 'rps-mode': {'v_range': [['6.4.8', '6.4.13'], ['7.0.4', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'per-policy-accounting': {'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'prp-port-in': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'raw'},
+ 'rps-mode': {'v_range': [['6.4.8', '6.4.14'], ['7.0.4', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'per-policy-accounting': {'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'mcast-session-counting': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['disable', 'enable', 'session-based', 'tpe-based'],
'type': 'str'
},
- 'inbound-dscp-copy': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'ipsec-host-dfclr': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.1']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'process-icmp-by-host': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '7.2.1']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'dedicated-tx-npu': {'v_range': [['6.4.7', '6.4.13']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'ull-port-mode': {'v_range': [['6.4.9', '6.4.13'], ['7.0.4', '7.0.10'], ['7.2.1', '']], 'choices': ['10G', '25G'], 'type': 'str'},
+ 'inbound-dscp-copy': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'ipsec-host-dfclr': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.1']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'process-icmp-by-host': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '7.2.1']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'dedicated-tx-npu': {'v_range': [['6.4.7', '6.4.14']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'ull-port-mode': {'v_range': [['6.4.9', '6.4.14'], ['7.0.4', '7.0.12'], ['7.2.1', '']], 'choices': ['10G', '25G'], 'type': 'str'},
'sse-ha-scan': {
'type': 'dict',
'options': {
- 'gap': {'v_range': [['6.4.10', '6.4.13'], ['7.0.4', '7.0.10'], ['7.2.1', '']], 'type': 'int'},
- 'max-session-cnt': {'v_range': [['6.4.10', '6.4.13'], ['7.0.4', '7.0.10'], ['7.2.1', '']], 'type': 'int'},
- 'min-duration': {'v_range': [['6.4.10', '6.4.13'], ['7.0.4', '7.0.10'], ['7.2.1', '']], 'type': 'int'}
+ 'gap': {'v_range': [['6.4.10', '6.4.14'], ['7.0.4', '7.0.12'], ['7.2.1', '']], 'type': 'int'},
+ 'max-session-cnt': {'v_range': [['6.4.10', '6.4.14'], ['7.0.4', '7.0.12'], ['7.2.1', '']], 'type': 'int'},
+ 'min-duration': {'v_range': [['6.4.10', '6.4.14'], ['7.0.4', '7.0.12'], ['7.2.1', '']], 'type': 'int'}
}
},
- 'hash-ipv6-sel': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'type': 'int'},
- 'ip-fragment-offload': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'ple-non-syn-tcp-action': {'v_range': [['7.0.5', '7.0.10'], ['7.2.2', '']], 'choices': ['forward', 'drop'], 'type': 'str'},
- 'npu-group-effective-scope': {'v_range': [['7.0.6', '7.0.10'], ['7.2.2', '']], 'type': 'int'},
+ 'hash-ipv6-sel': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'type': 'int'},
+ 'ip-fragment-offload': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'ple-non-syn-tcp-action': {'v_range': [['7.0.5', '7.0.12'], ['7.2.2', '']], 'choices': ['forward', 'drop'], 'type': 'str'},
+ 'npu-group-effective-scope': {'v_range': [['7.0.6', '7.0.12'], ['7.2.2', '']], 'type': 'int'},
'ipsec-STS-timeout': {
- 'v_range': [['7.0.9', '7.0.10'], ['7.2.4', '7.2.4'], ['7.4.2', '']],
+ 'v_range': [['7.0.9', '7.0.12'], ['7.2.4', '7.2.5'], ['7.4.2', '']],
'choices': ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'],
'type': 'str'
},
'ipsec-throughput-msg-frequency': {
- 'v_range': [['7.0.9', '7.0.10'], ['7.2.4', '7.2.4'], ['7.4.2', '']],
+ 'v_range': [['7.0.9', '7.0.12'], ['7.2.4', '7.2.5'], ['7.4.2', '']],
'choices': [
'disable', '32KB', '64KB', '128KB', '256KB', '512KB', '1MB', '2MB', '4MB', '8MB', '16MB', '32MB', '64MB', '128MB', '256MB',
'512MB', '1GB'
@@ -4905,18 +4921,21 @@ def main():
'type': 'str'
},
'ipt-STS-timeout': {
- 'v_range': [['7.0.9', '7.0.10'], ['7.2.4', '7.2.4'], ['7.4.2', '']],
+ 'v_range': [['7.0.9', '7.0.12'], ['7.2.4', '7.2.5'], ['7.4.2', '']],
'choices': ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'],
'type': 'str'
},
'ipt-throughput-msg-frequency': {
- 'v_range': [['7.0.9', '7.0.10'], ['7.2.4', '7.2.4'], ['7.4.2', '']],
+ 'v_range': [['7.0.9', '7.0.12'], ['7.2.4', '7.2.5'], ['7.4.2', '']],
'choices': [
'disable', '32KB', '64KB', '128KB', '256KB', '512KB', '1MB', '2MB', '4MB', '8MB', '16MB', '32MB', '64MB', '128MB', '256MB',
'512MB', '1GB'
],
'type': 'str'
},
+ 'default-tcp-refresh-dir': {'v_range': [['7.0.12', '7.0.12'], ['7.4.1', '']], 'choices': ['both', 'outgoing', 'incoming'], 'type': 'str'},
+ 'default-udp-refresh-dir': {'v_range': [['7.0.12', '7.0.12'], ['7.4.1', '']], 'choices': ['both', 'outgoing', 'incoming'], 'type': 'str'},
+ 'nss-threads-option': {'v_range': [['7.0.12', '7.0.12'], ['7.4.2', '']], 'choices': ['4t-eif', '4t-noeif', '2t'], 'type': 'str'},
'prp-session-clear-mode': {'v_range': [['7.2.2', '']], 'choices': ['blocking', 'non-blocking', 'do-not-clear'], 'type': 'str'},
'shaping-stats': {'v_range': [['7.2.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'sw-tr-hash': {
@@ -4926,8 +4945,10 @@ def main():
'tcp-udp-port': {'v_range': [['7.2.4', '']], 'choices': ['include', 'exclude'], 'type': 'str'}
}
},
- 'default-tcp-refresh-dir': {'v_range': [['7.4.1', '']], 'choices': ['both', 'outgoing', 'incoming'], 'type': 'str'},
- 'default-udp-refresh-dir': {'v_range': [['7.4.1', '']], 'choices': ['both', 'outgoing', 'incoming'], 'type': 'str'},
+ 'pba-port-select-mode': {'v_range': [['7.2.5', '7.2.5'], ['7.4.2', '']], 'choices': ['random', 'direct'], 'type': 'str'},
+ 'spa-port-select-mode': {'v_range': [['7.2.5', '7.2.5'], ['7.4.2', '']], 'choices': ['random', 'direct'], 'type': 'str'},
+ 'split-ipsec-engines': {'v_range': [['7.2.5', '7.2.5'], ['7.4.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'tunnel-over-vlink': {'v_range': [['7.2.5', '7.2.5']], 'choices': ['disable', 'enable'], 'type': 'str'},
'max-receive-unit': {'v_range': [['7.4.2', '']], 'type': 'int'},
'npu-tcam': {
'v_range': [['7.4.2', '']],
@@ -5173,11 +5194,7 @@ def main():
'vid': {'v_range': [['7.4.2', '']], 'type': 'int'}
},
'elements': 'dict'
- },
- 'nss-threads-option': {'v_range': [['7.4.2', '']], 'choices': ['4t-eif', '4t-noeif', '2t'], 'type': 'str'},
- 'pba-port-select-mode': {'v_range': [['7.4.2', '']], 'choices': ['random', 'direct'], 'type': 'str'},
- 'spa-port-select-mode': {'v_range': [['7.4.2', '']], 'choices': ['random', 'direct'], 'type': 'str'},
- 'split-ipsec-engines': {'v_range': [['7.4.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
+ }
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_backgroundssescan.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_backgroundssescan.py
index 6de4e7d46..f9892916a 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_backgroundssescan.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_backgroundssescan.py
@@ -205,17 +205,17 @@ def main():
'adom': {'required': True, 'type': 'str'},
'system_npu_backgroundssescan': {
'type': 'dict',
- 'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']],
+ 'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']],
'options': {
- 'scan': {'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'stats-update-interval': {'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']], 'type': 'int'},
- 'udp-keepalive-interval': {'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']], 'type': 'int'},
- 'scan-stale': {'v_range': [['7.4.1', '']], 'type': 'int'},
- 'scan-vt': {'v_range': [['7.4.1', '']], 'type': 'int'},
- 'stats-qual-access': {'v_range': [['7.4.1', '']], 'type': 'int'},
- 'stats-qual-duration': {'v_range': [['7.4.1', '']], 'type': 'int'},
- 'udp-qual-access': {'v_range': [['7.4.1', '']], 'type': 'int'},
- 'udp-qual-duration': {'v_range': [['7.4.1', '']], 'type': 'int'}
+ 'scan': {'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'stats-update-interval': {'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']], 'type': 'int'},
+ 'udp-keepalive-interval': {'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']], 'type': 'int'},
+ 'scan-stale': {'v_range': [['7.0.12', '7.0.12'], ['7.4.1', '']], 'type': 'int'},
+ 'scan-vt': {'v_range': [['7.0.12', '7.0.12'], ['7.4.1', '']], 'type': 'int'},
+ 'stats-qual-access': {'v_range': [['7.0.12', '7.0.12'], ['7.4.1', '']], 'type': 'int'},
+ 'stats-qual-duration': {'v_range': [['7.0.12', '7.0.12'], ['7.4.1', '']], 'type': 'int'},
+ 'udp-qual-access': {'v_range': [['7.0.12', '7.0.12'], ['7.4.1', '']], 'type': 'int'},
+ 'udp-qual-duration': {'v_range': [['7.0.12', '7.0.12'], ['7.4.1', '']], 'type': 'int'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_dosoptions.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_dosoptions.py
index 6439b50e5..70132ffe4 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_dosoptions.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_dosoptions.py
@@ -187,11 +187,11 @@ def main():
'adom': {'required': True, 'type': 'str'},
'system_npu_dosoptions': {
'type': 'dict',
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'options': {
- 'npu-dos-meter-mode': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['local', 'global'], 'type': 'str'},
- 'npu-dos-synproxy-mode': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['synack2ack', 'pass-synack'], 'type': 'str'},
- 'npu-dos-tpe-mode': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
+ 'npu-dos-meter-mode': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['local', 'global'], 'type': 'str'},
+ 'npu-dos-synproxy-mode': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['synack2ack', 'pass-synack'], 'type': 'str'},
+ 'npu-dos-tpe-mode': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_dswdtsprofile.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_dswdtsprofile.py
index b79ac7e0e..ef4455c46 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_dswdtsprofile.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_dswdtsprofile.py
@@ -200,16 +200,16 @@ def main():
'adom': {'required': True, 'type': 'str'},
'system_npu_dswdtsprofile': {
'type': 'dict',
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'options': {
'action': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['wait', 'drop', 'drop_tmr_0', 'drop_tmr_1', 'enque', 'enque_0', 'enque_1'],
'type': 'str'
},
- 'min-limit': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'profile-id': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'step': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'}
+ 'min-limit': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'profile-id': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'step': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_dswqueuedtsprofile.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_dswqueuedtsprofile.py
index 61759d2e3..46ad75114 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_dswqueuedtsprofile.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_dswqueuedtsprofile.py
@@ -326,10 +326,10 @@ def main():
'adom': {'required': True, 'type': 'str'},
'system_npu_dswqueuedtsprofile': {
'type': 'dict',
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'options': {
'iport': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': [
'EIF0', 'eif0', 'EIF1', 'eif1', 'EIF2', 'eif2', 'EIF3', 'eif3', 'EIF4', 'eif4', 'EIF5', 'eif5', 'EIF6', 'eif6', 'EIF7', 'eif7',
'HTX0', 'htx0', 'HTX1', 'htx1', 'SSE0', 'sse0', 'SSE1', 'sse1', 'SSE2', 'sse2', 'SSE3', 'sse3', 'RLT', 'rlt', 'DFR', 'dfr',
@@ -338,9 +338,9 @@ def main():
],
'type': 'str'
},
- 'name': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'required': True, 'type': 'str'},
+ 'name': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'required': True, 'type': 'str'},
'oport': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': [
'EIF0', 'eif0', 'EIF1', 'eif1', 'EIF2', 'eif2', 'EIF3', 'eif3', 'EIF4', 'eif4', 'EIF5', 'eif5', 'EIF6', 'eif6', 'EIF7', 'eif7',
'HRX', 'hrx', 'SSE0', 'sse0', 'SSE1', 'sse1', 'SSE2', 'sse2', 'SSE3', 'sse3', 'RLT', 'rlt', 'DFR', 'dfr', 'IPSECI', 'ipseci',
@@ -350,8 +350,8 @@ def main():
],
'type': 'str'
},
- 'profile-id': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'queue-select': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'}
+ 'profile-id': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'queue-select': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_fpanomaly.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_fpanomaly.py
index f72cbd344..9b8ace5ad 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_fpanomaly.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_fpanomaly.py
@@ -501,6 +501,13 @@ options:
choices:
- 'drop'
- 'trap-to-host'
+ sctp-csum-err:
+ type: str
+ description: Deprecated, please rename it to sctp_csum_err. Invalid IPv4 SCTP checksum anomalies.
+ choices:
+ - 'allow'
+ - 'drop'
+ - 'trap-to-host'
'''
EXAMPLES = '''
@@ -586,6 +593,7 @@ EXAMPLES = '''
sctp_crc_err: <value in [drop, trap-to-host]>
sctp_clen_err: <value in [drop, trap-to-host]>
uesp_minlen_err: <value in [drop, trap-to-host]>
+ sctp_csum_err: <value in [allow, drop, trap-to-host]>
'''
RETURN = '''
@@ -652,73 +660,74 @@ def main():
'adom': {'required': True, 'type': 'str'},
'system_npu_fpanomaly': {
'type': 'dict',
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'options': {
- 'esp-minlen-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'icmp-csum-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'icmp-minlen-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'ipv4-csum-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'ipv4-ihl-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'ipv4-len-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'ipv4-opt-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'ipv4-ttlzero-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'ipv4-ver-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-exthdr-len-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-exthdr-order-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-ihl-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-plen-zero': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-ver-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'tcp-csum-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'tcp-hlen-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'tcp-plen-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'udp-csum-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'udp-hlen-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'udp-len-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'udp-plen-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'udplite-cover-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'udplite-csum-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'unknproto-minlen-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'tcp-fin-only': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv4-optsecurity': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-optralert': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'tcp-syn-fin': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv4-proto-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-saddr-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'icmp-frag': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv4-optssrr': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-opthomeaddr': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'udp-land': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-optinvld': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'tcp-fin-noack': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-proto-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'tcp-land': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv4-unknopt': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv4-optstream': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-optjumbo': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'icmp-land': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'tcp-winnuke': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-daddr-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv4-land': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-opttunnel': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'tcp-no-flag': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-land': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv4-optlsrr': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv4-opttimestamp': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv4-optrr': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-optnsap': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-unknopt': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'tcp-syn-data': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'ipv6-optendpid': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
- 'gtpu-plen-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'vxlan-minlen-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'capwap-minlen-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'gre-csum-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'nvgre-minlen-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'sctp-l4len-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'tcp-hlenvsl4len-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'sctp-crc-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'sctp-clen-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
- 'uesp-minlen-err': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'}
+ 'esp-minlen-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'icmp-csum-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'icmp-minlen-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv4-csum-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv4-ihl-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv4-len-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv4-opt-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv4-ttlzero-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv4-ver-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-exthdr-len-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-exthdr-order-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-ihl-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-plen-zero': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-ver-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'tcp-csum-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'tcp-hlen-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'tcp-plen-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'udp-csum-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'udp-hlen-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'udp-len-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'udp-plen-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'udplite-cover-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'udplite-csum-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'unknproto-minlen-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'tcp-fin-only': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv4-optsecurity': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-optralert': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'tcp-syn-fin': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv4-proto-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-saddr-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'icmp-frag': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv4-optssrr': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-opthomeaddr': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'udp-land': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-optinvld': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'tcp-fin-noack': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-proto-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'tcp-land': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv4-unknopt': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv4-optstream': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-optjumbo': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'icmp-land': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'tcp-winnuke': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-daddr-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv4-land': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-opttunnel': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'tcp-no-flag': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-land': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv4-optlsrr': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv4-opttimestamp': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv4-optrr': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-optnsap': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-unknopt': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'tcp-syn-data': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'ipv6-optendpid': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'},
+ 'gtpu-plen-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'vxlan-minlen-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'capwap-minlen-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'gre-csum-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'nvgre-minlen-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'sctp-l4len-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'tcp-hlenvsl4len-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'sctp-crc-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'sctp-clen-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'uesp-minlen-err': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['drop', 'trap-to-host'], 'type': 'str'},
+ 'sctp-csum-err': {'v_range': [['7.2.5', '7.2.5']], 'choices': ['allow', 'drop', 'trap-to-host'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_hpe.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_hpe.py
index d91638477..63e14739b 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_hpe.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_hpe.py
@@ -256,33 +256,33 @@ def main():
'adom': {'required': True, 'type': 'str'},
'system_npu_hpe': {
'type': 'dict',
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'options': {
- 'all-protocol': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'arp-max': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'enable-shaper': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'esp-max': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'high-priority': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'icmp-max': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'ip-frag-max': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'ip-others-max': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'l2-others-max': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'pri-type-max': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'sctp-max': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'tcp-max': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'tcpfin-rst-max': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'tcpsyn-ack-max': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'tcpsyn-max': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'udp-max': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
+ 'all-protocol': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'arp-max': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'enable-shaper': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'esp-max': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'high-priority': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'icmp-max': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'ip-frag-max': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'ip-others-max': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'l2-others-max': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'pri-type-max': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'sctp-max': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'tcp-max': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'tcpfin-rst-max': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'tcpsyn-ack-max': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'tcpsyn-max': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'udp-max': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
'enable-queue-shaper': {
- 'v_range': [['7.0.9', '7.0.10'], ['7.2.4', '7.2.4'], ['7.4.2', '']],
+ 'v_range': [['7.0.9', '7.0.12'], ['7.2.4', '7.2.5'], ['7.4.2', '']],
'choices': ['disable', 'enable'],
'type': 'str'
},
- 'exception-code': {'v_range': [['7.0.9', '7.0.10'], ['7.2.4', '7.2.4'], ['7.4.2', '']], 'type': 'int'},
- 'fragment-with-sess': {'v_range': [['7.0.9', '7.0.10'], ['7.2.4', '7.2.4'], ['7.4.2', '']], 'type': 'int'},
- 'fragment-without-session': {'v_range': [['7.0.9', '7.0.10'], ['7.2.4', '7.2.4'], ['7.4.2', '']], 'type': 'int'},
- 'queue-shaper-max': {'v_range': [['7.0.9', '7.0.10'], ['7.2.4', '7.2.4'], ['7.4.2', '']], 'type': 'int'}
+ 'exception-code': {'v_range': [['7.0.9', '7.0.12'], ['7.2.4', '7.2.5'], ['7.4.2', '']], 'type': 'int'},
+ 'fragment-with-sess': {'v_range': [['7.0.9', '7.0.12'], ['7.2.4', '7.2.5'], ['7.4.2', '']], 'type': 'int'},
+ 'fragment-without-session': {'v_range': [['7.0.9', '7.0.12'], ['7.2.4', '7.2.5'], ['7.4.2', '']], 'type': 'int'},
+ 'queue-shaper-max': {'v_range': [['7.0.9', '7.0.12'], ['7.2.4', '7.2.5'], ['7.4.2', '']], 'type': 'int'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_ipreassembly.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_ipreassembly.py
index aef1a6b65..3acbdd1dd 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_ipreassembly.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_ipreassembly.py
@@ -181,11 +181,11 @@ def main():
'adom': {'required': True, 'type': 'str'},
'system_npu_ipreassembly': {
'type': 'dict',
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'options': {
- 'max-timeout': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'min-timeout': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'status': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
+ 'max-timeout': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'min-timeout': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'status': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_isfnpqueues.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_isfnpqueues.py
index a9852985d..3ebf6e81f 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_isfnpqueues.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_isfnpqueues.py
@@ -198,16 +198,16 @@ def main():
'adom': {'required': True, 'type': 'str'},
'system_npu_isfnpqueues': {
'type': 'dict',
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'options': {
- 'cos0': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'cos1': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'cos2': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'cos3': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'cos4': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'cos5': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'cos6': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'cos7': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'}
+ 'cos0': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'cos1': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'cos2': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'cos3': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'cos4': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'cos5': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'cos6': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'cos7': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_npqueues.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_npqueues.py
index 6a2810b97..fd1443c66 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_npqueues.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_npqueues.py
@@ -1220,419 +1220,419 @@ def main():
'adom': {'required': True, 'type': 'str'},
'system_npu_npqueues': {
'type': 'dict',
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'options': {
'ethernet-type': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'type': 'list',
'options': {
- 'name': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'queue': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'type': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'weight': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'}
+ 'name': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'queue': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'type': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'weight': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'}
},
'elements': 'dict'
},
'ip-protocol': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'type': 'list',
'options': {
- 'name': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'protocol': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'queue': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'weight': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'}
+ 'name': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'protocol': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'queue': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'weight': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'}
},
'elements': 'dict'
},
'ip-service': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'type': 'list',
'options': {
- 'dport': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'name': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'protocol': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'queue': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'sport': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'weight': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'}
+ 'dport': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'name': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'protocol': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'queue': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'sport': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'weight': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'}
},
'elements': 'dict'
},
'profile': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'type': 'list',
'options': {
'cos0': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'cos1': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'cos2': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'cos3': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'cos4': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'cos5': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'cos6': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'cos7': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp0': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp1': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp10': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp11': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp12': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp13': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp14': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp15': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp16': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp17': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp18': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp19': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp2': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp20': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp21': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp22': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp23': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp24': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp25': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp26': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp27': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp28': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp29': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp3': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp30': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp31': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp32': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp33': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp34': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp35': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp36': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp37': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp38': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp39': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp4': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp40': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp41': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp42': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp43': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp44': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp45': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp46': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp47': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp48': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp49': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp5': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp50': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp51': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp52': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp53': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp54': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp55': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp56': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp57': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp58': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp59': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp6': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp60': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp61': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp62': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp63': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp7': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp8': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp9': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
- 'id': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'type': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['cos', 'dscp'], 'type': 'str'},
- 'weight': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'}
+ 'id': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'type': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['cos', 'dscp'], 'type': 'str'},
+ 'weight': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'}
},
'elements': 'dict'
},
'scheduler': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'type': 'list',
'options': {
- 'mode': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['none', 'priority', 'round-robin'], 'type': 'str'},
- 'name': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'}
+ 'mode': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['none', 'priority', 'round-robin'], 'type': 'str'},
+ 'name': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'}
},
'elements': 'dict'
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_npqueues_ethernettype.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_npqueues_ethernettype.py
index 1fc11bd32..34bc14d61 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_npqueues_ethernettype.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_npqueues_ethernettype.py
@@ -193,12 +193,12 @@ def main():
'adom': {'required': True, 'type': 'str'},
'system_npu_npqueues_ethernettype': {
'type': 'dict',
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'options': {
- 'name': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'required': True, 'type': 'str'},
- 'queue': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'type': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'weight': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'}
+ 'name': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'required': True, 'type': 'str'},
+ 'queue': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'type': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'weight': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_npqueues_ipprotocol.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_npqueues_ipprotocol.py
index 42d625f42..c7ad4cba8 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_npqueues_ipprotocol.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_npqueues_ipprotocol.py
@@ -193,12 +193,12 @@ def main():
'adom': {'required': True, 'type': 'str'},
'system_npu_npqueues_ipprotocol': {
'type': 'dict',
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'options': {
- 'name': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'required': True, 'type': 'str'},
- 'protocol': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'queue': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'weight': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'}
+ 'name': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'required': True, 'type': 'str'},
+ 'protocol': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'queue': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'weight': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_npqueues_ipservice.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_npqueues_ipservice.py
index 45bf5e210..581459bbc 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_npqueues_ipservice.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_npqueues_ipservice.py
@@ -201,14 +201,14 @@ def main():
'adom': {'required': True, 'type': 'str'},
'system_npu_npqueues_ipservice': {
'type': 'dict',
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'options': {
- 'dport': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'name': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'required': True, 'type': 'str'},
- 'protocol': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'queue': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'sport': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'weight': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'}
+ 'dport': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'name': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'required': True, 'type': 'str'},
+ 'protocol': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'queue': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'sport': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'weight': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_npqueues_profile.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_npqueues_profile.py
index b8e7b4cbb..68fb2faab 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_npqueues_profile.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_npqueues_profile.py
@@ -1128,371 +1128,371 @@ def main():
'adom': {'required': True, 'type': 'str'},
'system_npu_npqueues_profile': {
'type': 'dict',
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'options': {
'cos0': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'cos1': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'cos2': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'cos3': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'cos4': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'cos5': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'cos6': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'cos7': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp0': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp1': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp10': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp11': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp12': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp13': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp14': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp15': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp16': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp17': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp18': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp19': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp2': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp20': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp21': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp22': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp23': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp24': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp25': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp26': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp27': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp28': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp29': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp3': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp30': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp31': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp32': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp33': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp34': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp35': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp36': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp37': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp38': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp39': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp4': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp40': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp41': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp42': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp43': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp44': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp45': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp46': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp47': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp48': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp49': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp5': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp50': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp51': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp52': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp53': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp54': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp55': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp56': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp57': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp58': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp59': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp6': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp60': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp61': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp62': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp63': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp7': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp8': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
'dscp9': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['queue0', 'queue1', 'queue2', 'queue3', 'queue4', 'queue5', 'queue6', 'queue7'],
'type': 'str'
},
- 'id': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'required': True, 'type': 'int'},
- 'type': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['cos', 'dscp'], 'type': 'str'},
- 'weight': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'}
+ 'id': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'required': True, 'type': 'int'},
+ 'type': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['cos', 'dscp'], 'type': 'str'},
+ 'weight': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_npqueues_scheduler.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_npqueues_scheduler.py
index 735e7e6d2..d2e7890d8 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_npqueues_scheduler.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_npqueues_scheduler.py
@@ -189,10 +189,10 @@ def main():
'adom': {'required': True, 'type': 'str'},
'system_npu_npqueues_scheduler': {
'type': 'dict',
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'options': {
- 'mode': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['none', 'priority', 'round-robin'], 'type': 'str'},
- 'name': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'required': True, 'type': 'str'}
+ 'mode': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['none', 'priority', 'round-robin'], 'type': 'str'},
+ 'name': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'required': True, 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_portcpumap.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_portcpumap.py
index 6173d8889..55c7c16bc 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_portcpumap.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_portcpumap.py
@@ -184,10 +184,10 @@ def main():
'adom': {'required': True, 'type': 'str'},
'system_npu_portcpumap': {
'type': 'dict',
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'options': {
- 'cpu-core': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'interface': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'}
+ 'cpu-core': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'interface': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_portnpumap.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_portnpumap.py
index 1242f4c23..ed2c95ea0 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_portnpumap.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_portnpumap.py
@@ -184,10 +184,10 @@ def main():
'adom': {'required': True, 'type': 'str'},
'system_npu_portnpumap': {
'type': 'dict',
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'options': {
- 'interface': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'npu-group-index': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'}
+ 'interface': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'npu-group-index': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_portpathoption.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_portpathoption.py
index 7619c70a6..86d8b677a 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_portpathoption.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_portpathoption.py
@@ -170,8 +170,8 @@ def main():
'adom': {'required': True, 'type': 'str'},
'system_npu_portpathoption': {
'type': 'dict',
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
- 'options': {'ports-using-npu': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'raw'}}
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
+ 'options': {'ports-using-npu': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'raw'}}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_priorityprotocol.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_priorityprotocol.py
index 484a57550..a050168ca 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_priorityprotocol.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_priorityprotocol.py
@@ -187,11 +187,11 @@ def main():
'adom': {'required': True, 'type': 'str'},
'system_npu_priorityprotocol': {
'type': 'dict',
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'options': {
- 'bfd': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'bgp': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'slbc': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
+ 'bfd': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'bgp': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'slbc': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_ssehascan.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_ssehascan.py
index 8dd585af4..c30ac5099 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_ssehascan.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_ssehascan.py
@@ -178,11 +178,11 @@ def main():
'adom': {'required': True, 'type': 'str'},
'system_npu_ssehascan': {
'type': 'dict',
- 'v_range': [['6.4.10', '6.4.13'], ['7.0.4', '7.0.10'], ['7.2.1', '']],
+ 'v_range': [['6.4.10', '6.4.14'], ['7.0.4', '7.0.12'], ['7.2.1', '']],
'options': {
- 'gap': {'v_range': [['6.4.10', '6.4.13'], ['7.0.4', '7.0.10'], ['7.2.1', '']], 'type': 'int'},
- 'max-session-cnt': {'v_range': [['6.4.10', '6.4.13'], ['7.0.4', '7.0.10'], ['7.2.1', '']], 'type': 'int'},
- 'min-duration': {'v_range': [['6.4.10', '6.4.13'], ['7.0.4', '7.0.10'], ['7.2.1', '']], 'type': 'int'}
+ 'gap': {'v_range': [['6.4.10', '6.4.14'], ['7.0.4', '7.0.12'], ['7.2.1', '']], 'type': 'int'},
+ 'max-session-cnt': {'v_range': [['6.4.10', '6.4.14'], ['7.0.4', '7.0.12'], ['7.2.1', '']], 'type': 'int'},
+ 'min-duration': {'v_range': [['6.4.10', '6.4.14'], ['7.0.4', '7.0.12'], ['7.2.1', '']], 'type': 'int'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_tcptimeoutprofile.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_tcptimeoutprofile.py
index 879d0003d..2f68f2fcf 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_tcptimeoutprofile.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_tcptimeoutprofile.py
@@ -205,15 +205,15 @@ def main():
'adom': {'required': True, 'type': 'str'},
'system_npu_tcptimeoutprofile': {
'type': 'dict',
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'options': {
- 'close-wait': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'fin-wait': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'id': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'required': True, 'type': 'int'},
- 'syn-sent': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'syn-wait': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'tcp-idle': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
- 'time-wait': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'}
+ 'close-wait': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'fin-wait': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'id': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'required': True, 'type': 'int'},
+ 'syn-sent': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'syn-wait': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'tcp-idle': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
+ 'time-wait': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_udptimeoutprofile.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_udptimeoutprofile.py
index c92e3cc23..df44f396d 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_udptimeoutprofile.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_npu_udptimeoutprofile.py
@@ -185,10 +185,10 @@ def main():
'adom': {'required': True, 'type': 'str'},
'system_npu_udptimeoutprofile': {
'type': 'dict',
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'options': {
- 'id': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'required': True, 'type': 'int'},
- 'udp-idle': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'}
+ 'id': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'required': True, 'type': 'int'},
+ 'udp-idle': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_ntp.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_ntp.py
index 1e47865aa..5a8ee7b5a 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_ntp.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_ntp.py
@@ -234,8 +234,8 @@ def main():
'key-id': {'no_log': True, 'type': 'int'},
'ntpv3': {'choices': ['disable', 'enable'], 'type': 'str'},
'server': {'type': 'str'},
- 'maxpoll': {'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']], 'type': 'int'},
- 'minpoll': {'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']], 'type': 'int'}
+ 'maxpoll': {'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']], 'type': 'int'},
+ 'minpoll': {'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']], 'type': 'int'}
},
'elements': 'dict'
},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_ntp_ntpserver.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_ntp_ntpserver.py
index 46cca2f35..6443fadab 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_ntp_ntpserver.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_ntp_ntpserver.py
@@ -231,8 +231,8 @@ def main():
'key-id': {'no_log': True, 'type': 'int'},
'ntpv3': {'choices': ['disable', 'enable'], 'type': 'str'},
'server': {'type': 'str'},
- 'maxpoll': {'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']], 'type': 'int'},
- 'minpoll': {'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']], 'type': 'int'}
+ 'maxpoll': {'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']], 'type': 'int'},
+ 'minpoll': {'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']], 'type': 'int'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_objecttag.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_objecttag.py
index a603d12fd..a61603c3d 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_objecttag.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_objecttag.py
@@ -181,8 +181,8 @@ def main():
'adom': {'required': True, 'type': 'str'},
'system_objecttag': {
'type': 'dict',
- 'v_range': [['6.2.0', '6.4.13']],
- 'options': {'name': {'v_range': [['6.2.0', '6.4.13']], 'required': True, 'type': 'str'}}
+ 'v_range': [['6.2.0', '6.4.14']],
+ 'options': {'name': {'v_range': [['6.2.0', '6.4.14']], 'required': True, 'type': 'str'}}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup.py
index 94eadf6f3..d881b7513 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup.py
@@ -443,9 +443,9 @@ options:
image:
type: str
description: Message string.
- message:
+ fmgr_message:
type: str
- description: Deprecated, please rename it to fmgr_message. Message text
+ description: Message text
msg-type:
type: str
description: Deprecated, please rename it to msg_type. Message type.
@@ -533,9 +533,9 @@ options:
image:
type: str
description: Message string.
- message:
+ fmgr_message:
type: str
- description: Deprecated, please rename it to fmgr_message. Message text
+ description: Message text
msg-type:
type: str
description: Deprecated, please rename it to msg_type. Message type.
@@ -606,9 +606,9 @@ options:
image:
type: str
description: Message string.
- message:
+ fmgr_message:
type: str
- description: Deprecated, please rename it to fmgr_message. Message text
+ description: Message text
msg-type:
type: str
description: Deprecated, please rename it to msg_type. Message type.
@@ -704,9 +704,9 @@ options:
image:
type: str
description: Message string.
- message:
+ fmgr_message:
type: str
- description: Deprecated, please rename it to fmgr_message. Message text
+ description: Message text
msg-type:
type: str
description: Deprecated, please rename it to msg_type. Message type.
@@ -1124,7 +1124,7 @@ def main():
'format': {'choices': ['none', 'text', 'html', 'wml'], 'type': 'str'},
'header': {'choices': ['none', 'http', '8bit'], 'type': 'str'},
'msg-type': {'type': 'str'},
- 'id': {'v_range': [['6.4.11', '6.4.13'], ['7.0.6', '7.0.10'], ['7.2.3', '']], 'type': 'int'}
+ 'id': {'v_range': [['6.4.11', '6.4.14'], ['7.0.6', '7.0.12'], ['7.2.3', '']], 'type': 'int'}
},
'elements': 'dict'
},
@@ -1232,7 +1232,7 @@ def main():
'from-sender': {'choices': ['disable', 'enable'], 'type': 'str'},
'header': {'choices': ['none', 'http', '8bit'], 'type': 'str'},
'image': {'type': 'str'},
- 'message': {'type': 'str'},
+ 'fmgr_message': {'type': 'str'},
'msg-type': {'type': 'str'},
'priority': {'choices': ['low', 'normal', 'high', 'not-included'], 'type': 'str'},
'rsp-status': {
@@ -1260,7 +1260,7 @@ def main():
'header': {'choices': ['none', 'http', '8bit'], 'type': 'str'},
'html-part': {'type': 'str'},
'image': {'type': 'str'},
- 'message': {'type': 'str'},
+ 'fmgr_message': {'type': 'str'},
'msg-type': {'type': 'str'},
'priority': {'choices': ['low', 'normal', 'high', 'not-included'], 'type': 'str'},
'subject': {'type': 'str'}
@@ -1279,7 +1279,7 @@ def main():
'from-sender': {'choices': ['disable', 'enable'], 'type': 'str'},
'header': {'choices': ['none', 'http', '8bit'], 'type': 'str'},
'image': {'type': 'str'},
- 'message': {'type': 'str'},
+ 'fmgr_message': {'type': 'str'},
'msg-type': {'type': 'str'},
'priority': {'choices': ['low', 'normal', 'high', 'not-included'], 'type': 'str'},
'rsp-status': {
@@ -1307,7 +1307,7 @@ def main():
'from-sender': {'choices': ['disable', 'enable'], 'type': 'str'},
'header': {'choices': ['none', 'http', '8bit'], 'type': 'str'},
'image': {'type': 'str'},
- 'message': {'type': 'str'},
+ 'fmgr_message': {'type': 'str'},
'msg-type': {'type': 'str'},
'priority': {'choices': ['low', 'normal', 'high', 'not-included'], 'type': 'str'},
'rsp-status': {
@@ -1343,7 +1343,7 @@ def main():
'format': {'choices': ['none', 'text', 'html', 'wml'], 'type': 'str'},
'header': {'choices': ['none', 'http', '8bit'], 'type': 'str'},
'msg-type': {'type': 'str'},
- 'id': {'v_range': [['6.4.11', '6.4.13'], ['7.0.6', '7.0.10'], ['7.2.3', '']], 'type': 'int'}
+ 'id': {'v_range': [['6.4.11', '6.4.14'], ['7.0.6', '7.0.12'], ['7.2.3', '']], 'type': 'int'}
},
'elements': 'dict'
},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup_alertmail.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup_alertmail.py
index 2efff4e41..86a95147b 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup_alertmail.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup_alertmail.py
@@ -234,7 +234,7 @@ def main():
'format': {'choices': ['none', 'text', 'html', 'wml'], 'type': 'str'},
'header': {'choices': ['none', 'http', '8bit'], 'type': 'str'},
'msg-type': {'required': True, 'type': 'str'},
- 'id': {'v_range': [['6.4.11', '6.4.13'], ['7.0.6', '7.0.10'], ['7.2.3', '']], 'type': 'int'}
+ 'id': {'v_range': [['6.4.11', '6.4.14'], ['7.0.6', '7.0.12'], ['7.2.3', '']], 'type': 'int'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup_mm1.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup_mm1.py
index e4cf1190b..6caeef6a9 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup_mm1.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup_mm1.py
@@ -143,9 +143,9 @@ options:
image:
type: str
description: Message string.
- message:
+ fmgr_message:
type: str
- description: Deprecated, please rename it to fmgr_message. Message text
+ description: Message text
msg-type:
type: str
description: Deprecated, please rename it to msg_type. Message type.
@@ -303,7 +303,7 @@ def main():
'from-sender': {'choices': ['disable', 'enable'], 'type': 'str'},
'header': {'choices': ['none', 'http', '8bit'], 'type': 'str'},
'image': {'type': 'str'},
- 'message': {'type': 'str'},
+ 'fmgr_message': {'type': 'str'},
'msg-type': {'required': True, 'type': 'str'},
'priority': {'choices': ['low', 'normal', 'high', 'not-included'], 'type': 'str'},
'rsp-status': {
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup_mm3.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup_mm3.py
index 703f134f1..37ce76c96 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup_mm3.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup_mm3.py
@@ -137,9 +137,9 @@ options:
image:
type: str
description: Message string.
- message:
+ fmgr_message:
type: str
- description: Deprecated, please rename it to fmgr_message. Message text
+ description: Message text
msg-type:
type: str
description: Deprecated, please rename it to msg_type. Message type.
@@ -267,7 +267,7 @@ def main():
'header': {'choices': ['none', 'http', '8bit'], 'type': 'str'},
'html-part': {'type': 'str'},
'image': {'type': 'str'},
- 'message': {'type': 'str'},
+ 'fmgr_message': {'type': 'str'},
'msg-type': {'required': True, 'type': 'str'},
'priority': {'choices': ['low', 'normal', 'high', 'not-included'], 'type': 'str'},
'subject': {'type': 'str'}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup_mm4.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup_mm4.py
index 7a2c1e73c..ccbeba6e8 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup_mm4.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup_mm4.py
@@ -146,9 +146,9 @@ options:
image:
type: str
description: Message string.
- message:
+ fmgr_message:
type: str
- description: Deprecated, please rename it to fmgr_message. Message text
+ description: Message text
msg-type:
type: str
description: Deprecated, please rename it to msg_type. Message type.
@@ -295,7 +295,7 @@ def main():
'from-sender': {'choices': ['disable', 'enable'], 'type': 'str'},
'header': {'choices': ['none', 'http', '8bit'], 'type': 'str'},
'image': {'type': 'str'},
- 'message': {'type': 'str'},
+ 'fmgr_message': {'type': 'str'},
'msg-type': {'required': True, 'type': 'str'},
'priority': {'choices': ['low', 'normal', 'high', 'not-included'], 'type': 'str'},
'rsp-status': {
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup_mm7.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup_mm7.py
index e7659c1a8..03d0bfea5 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup_mm7.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup_mm7.py
@@ -156,9 +156,9 @@ options:
image:
type: str
description: Message string.
- message:
+ fmgr_message:
type: str
- description: Deprecated, please rename it to fmgr_message. Message text
+ description: Message text
msg-type:
type: str
description: Deprecated, please rename it to msg_type. Message type.
@@ -325,7 +325,7 @@ def main():
'from-sender': {'choices': ['disable', 'enable'], 'type': 'str'},
'header': {'choices': ['none', 'http', '8bit'], 'type': 'str'},
'image': {'type': 'str'},
- 'message': {'type': 'str'},
+ 'fmgr_message': {'type': 'str'},
'msg-type': {'required': True, 'type': 'str'},
'priority': {'choices': ['low', 'normal', 'high', 'not-included'], 'type': 'str'},
'rsp-status': {
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup_nacquar.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup_nacquar.py
index b4ca83e6d..fc35b774e 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup_nacquar.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_replacemsggroup_nacquar.py
@@ -234,7 +234,7 @@ def main():
'format': {'choices': ['none', 'text', 'html', 'wml'], 'type': 'str'},
'header': {'choices': ['none', 'http', '8bit'], 'type': 'str'},
'msg-type': {'required': True, 'type': 'str'},
- 'id': {'v_range': [['6.4.11', '6.4.13'], ['7.0.6', '7.0.10'], ['7.2.3', '']], 'type': 'int'}
+ 'id': {'v_range': [['6.4.11', '6.4.14'], ['7.0.6', '7.0.12'], ['7.2.3', '']], 'type': 'int'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_report_autocache.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_report_autocache.py
index a5180ecd3..54eb5ec6d 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_report_autocache.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_report_autocache.py
@@ -203,7 +203,7 @@ def main():
'aggressive-schedule': {'choices': ['disable', 'enable'], 'type': 'str'},
'order': {'choices': ['oldest-first'], 'type': 'str'},
'status': {'choices': ['disable', 'enable'], 'type': 'str'},
- 'sche-rpt-only': {'v_range': [['7.0.8', '7.0.10'], ['7.2.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
+ 'sche-rpt-only': {'v_range': [['7.0.8', '7.0.12'], ['7.2.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_sdnconnector.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_sdnconnector.py
index 17ccfc603..7cc099bcf 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_sdnconnector.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_sdnconnector.py
@@ -662,7 +662,7 @@ def main():
'oci-region-type': {'v_range': [['6.2.1', '']], 'choices': ['commercial', 'government'], 'type': 'str'},
'secret-token': {'v_range': [['6.2.0', '']], 'no_log': True, 'type': 'str'},
'updating': {'v_range': [['6.2.1', '7.2.0']], 'type': 'int'},
- 'server-ip': {'v_range': [['6.2.0', '6.4.13']], 'type': 'str'},
+ 'server-ip': {'v_range': [['6.2.0', '6.4.14']], 'type': 'str'},
'group-name': {'v_range': [['6.2.2', '']], 'type': 'str'},
'api-key': {'v_range': [['6.4.1', '']], 'no_log': True, 'type': 'raw'},
'compute-generation': {'v_range': [['6.4.1', '']], 'type': 'int'},
@@ -691,7 +691,7 @@ def main():
'options': {
'region-list': {'v_range': [['7.0.3', '']], 'type': 'raw'},
'role-arn': {'v_range': [['7.0.3', '']], 'type': 'str'},
- 'external-id': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'str'}
+ 'external-id': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'str'}
},
'elements': 'dict'
},
@@ -702,15 +702,15 @@ def main():
'elements': 'dict'
},
'gcp-project-list': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '']],
'type': 'list',
'options': {
- 'gcp-zone-list': {'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '']], 'type': 'raw'},
- 'id': {'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '']], 'type': 'str'}
+ 'gcp-zone-list': {'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '']], 'type': 'raw'},
+ 'id': {'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '']], 'type': 'str'}
},
'elements': 'dict'
},
- 'verify-certificate': {'v_range': [['6.4.8', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'verify-certificate': {'v_range': [['6.4.8', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'alt-resource-ip': {'v_range': [['7.2.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'server-ca-cert': {'v_range': [['7.2.2', '']], 'type': 'str'},
'server-cert': {'v_range': [['7.2.2', '']], 'type': 'str'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_sdnconnector_externalaccountlist.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_sdnconnector_externalaccountlist.py
index 9d8a59a93..b69d51f18 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_sdnconnector_externalaccountlist.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_sdnconnector_externalaccountlist.py
@@ -201,7 +201,7 @@ def main():
'options': {
'region-list': {'v_range': [['7.0.3', '']], 'type': 'raw'},
'role-arn': {'v_range': [['7.0.3', '']], 'type': 'str'},
- 'external-id': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'str'}
+ 'external-id': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_sdnconnector_gcpprojectlist.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_sdnconnector_gcpprojectlist.py
index 46f3e710d..cb117f606 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_sdnconnector_gcpprojectlist.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_sdnconnector_gcpprojectlist.py
@@ -194,10 +194,10 @@ def main():
'sdn_connector': {'type': 'str'},
'system_sdnconnector_gcpprojectlist': {
'type': 'dict',
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '']],
'options': {
- 'gcp-zone-list': {'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '']], 'type': 'raw'},
- 'id': {'v_range': [['6.4.7', '6.4.13'], ['7.0.2', '']], 'required': True, 'type': 'str'}
+ 'gcp-zone-list': {'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '']], 'type': 'raw'},
+ 'id': {'v_range': [['6.4.7', '6.4.14'], ['7.0.2', '']], 'required': True, 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_socfabric.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_socfabric.py
index a040e707c..7cc78b478 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_socfabric.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_socfabric.py
@@ -224,7 +224,7 @@ def main():
'options': {
'name': {'v_range': [['7.0.0', '']], 'type': 'str'},
'port': {'v_range': [['7.0.0', '']], 'type': 'int'},
- 'psk': {'v_range': [['7.0.0', '7.2.4']], 'type': 'raw'},
+ 'psk': {'v_range': [['7.0.0', '7.2.5']], 'type': 'raw'},
'role': {'v_range': [['7.0.0', '']], 'choices': ['member', 'supervisor'], 'type': 'str'},
'secure-connection': {'v_range': [['7.0.0', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'status': {'v_range': [['7.0.0', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_sslciphersuites.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_sslciphersuites.py
index 864137969..39abb4067 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_sslciphersuites.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_sslciphersuites.py
@@ -186,11 +186,11 @@ def main():
module_arg_spec = {
'system_sslciphersuites': {
'type': 'dict',
- 'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']],
+ 'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']],
'options': {
- 'cipher': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'type': 'str'},
- 'priority': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'type': 'int'},
- 'version': {'v_range': [['6.4.8', '6.4.13'], ['7.0.2', '']], 'choices': ['tls1.2-or-below', 'tls1.3'], 'type': 'str'}
+ 'cipher': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'type': 'str'},
+ 'priority': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'type': 'int'},
+ 'version': {'v_range': [['6.4.8', '6.4.14'], ['7.0.2', '']], 'choices': ['tls1.2-or-below', 'tls1.3'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_syslog.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_syslog.py
index b1c93791f..a21e6023a 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_syslog.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_syslog.py
@@ -215,10 +215,10 @@ def main():
'ip': {'type': 'str'},
'name': {'required': True, 'type': 'str'},
'port': {'type': 'int'},
- 'local-cert': {'v_range': [['6.4.8', '6.4.13'], ['7.0.4', '']], 'type': 'str'},
- 'peer-cert-cn': {'v_range': [['6.4.8', '6.4.13'], ['7.0.4', '']], 'type': 'str'},
- 'reliable': {'v_range': [['6.4.8', '6.4.13'], ['7.0.4', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'secure-connection': {'v_range': [['6.4.8', '6.4.13'], ['7.0.4', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
+ 'local-cert': {'v_range': [['6.4.8', '6.4.14'], ['7.0.4', '']], 'type': 'str'},
+ 'peer-cert-cn': {'v_range': [['6.4.8', '6.4.14'], ['7.0.4', '']], 'type': 'str'},
+ 'reliable': {'v_range': [['6.4.8', '6.4.14'], ['7.0.4', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'secure-connection': {'v_range': [['6.4.8', '6.4.14'], ['7.0.4', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_webproxy.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_webproxy.py
index d919c72f7..6cc559e04 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_webproxy.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_system_webproxy.py
@@ -194,14 +194,14 @@ def main():
module_arg_spec = {
'system_webproxy': {
'type': 'dict',
- 'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']],
+ 'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']],
'options': {
- 'address': {'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']], 'type': 'str'},
- 'mode': {'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']], 'choices': ['proxy', 'tunnel'], 'type': 'str'},
- 'password': {'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']], 'no_log': True, 'type': 'raw'},
- 'port': {'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']], 'type': 'int'},
- 'status': {'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'username': {'v_range': [['6.4.8', '6.4.13'], ['7.0.3', '']], 'type': 'str'}
+ 'address': {'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']], 'type': 'str'},
+ 'mode': {'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']], 'choices': ['proxy', 'tunnel'], 'type': 'str'},
+ 'password': {'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']], 'no_log': True, 'type': 'raw'},
+ 'port': {'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']], 'type': 'int'},
+ 'status': {'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'username': {'v_range': [['6.4.8', '6.4.14'], ['7.0.3', '']], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_template.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_template.py
index b0d179182..9d073e73f 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_template.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_template.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_template
-short_description: no description
+short_description: Cli template
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -134,7 +134,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Cli template
fortinet.fortimanager.fmgr_template:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_templategroup.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_templategroup.py
index dd1c12903..0bf2a1511 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_templategroup.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_templategroup.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_templategroup
-short_description: no description
+short_description: Cli template group
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -117,7 +117,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Cli template group
fortinet.fortimanager.fmgr_templategroup:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_certificate.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_certificate.py
index 924413ff2..1bf587c98 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_certificate.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_certificate.py
@@ -207,14 +207,14 @@ def main():
'adom': {'required': True, 'type': 'str'},
'user_certificate': {
'type': 'dict',
- 'v_range': [['7.0.8', '7.0.10'], ['7.2.3', '']],
+ 'v_range': [['7.0.8', '7.0.12'], ['7.2.3', '']],
'options': {
- 'common-name': {'v_range': [['7.0.8', '7.0.10'], ['7.2.3', '']], 'type': 'str'},
- 'id': {'v_range': [['7.0.8', '7.0.10'], ['7.2.3', '']], 'required': True, 'type': 'int'},
- 'issuer': {'v_range': [['7.0.8', '7.0.10'], ['7.2.3', '']], 'type': 'str'},
- 'name': {'v_range': [['7.0.8', '7.0.10'], ['7.2.3', '']], 'type': 'str'},
- 'status': {'v_range': [['7.0.8', '7.0.10'], ['7.2.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'type': {'v_range': [['7.0.8', '7.0.10'], ['7.2.3', '']], 'choices': ['single-certificate', 'trusted-issuer'], 'type': 'str'}
+ 'common-name': {'v_range': [['7.0.8', '7.0.12'], ['7.2.3', '']], 'type': 'str'},
+ 'id': {'v_range': [['7.0.8', '7.0.12'], ['7.2.3', '']], 'required': True, 'type': 'int'},
+ 'issuer': {'v_range': [['7.0.8', '7.0.12'], ['7.2.3', '']], 'type': 'str'},
+ 'name': {'v_range': [['7.0.8', '7.0.12'], ['7.2.3', '']], 'type': 'str'},
+ 'status': {'v_range': [['7.0.8', '7.0.12'], ['7.2.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'type': {'v_range': [['7.0.8', '7.0.12'], ['7.2.3', '']], 'choices': ['single-certificate', 'trusted-issuer'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_clearpass.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_clearpass.py
index afc523c18..6dbe2eb4c 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_clearpass.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_clearpass.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_user_clearpass
-short_description: no description
+short_description: User clearpass
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -122,7 +122,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: User clearpass
fortinet.fortimanager.fmgr_user_clearpass:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_connector.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_connector.py
index c52a0901f..056aa0d11 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_connector.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_connector.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_user_connector
-short_description: no description
+short_description: User connector
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -113,7 +113,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: User connector
fortinet.fortimanager.fmgr_user_connector:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_device.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_device.py
index 25f5a9a22..1e375ef62 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_device.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_device.py
@@ -406,7 +406,7 @@ def main():
'type': 'str'
},
'user': {'type': 'str'},
- 'tags': {'v_range': [['6.2.0', '6.4.13']], 'type': 'str'}
+ 'tags': {'v_range': [['6.2.0', '6.4.14']], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_flexvm.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_flexvm.py
index 9c158b955..48cf768b7 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_flexvm.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_flexvm.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_user_flexvm
-short_description: no description
+short_description: User flexvm
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -125,7 +125,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: User flexvm
fortinet.fortimanager.fmgr_user_flexvm:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_fsso.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_fsso.py
index 42b1a4d37..c79607982 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_fsso.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_fsso.py
@@ -481,7 +481,7 @@ def main():
'choices': ['auto', 'sdwan', 'specify'],
'type': 'str'
},
- 'logon-timeout': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
+ 'logon-timeout': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
'sni': {'v_range': [['7.2.0', '']], 'type': 'str'},
'ssl-server-host-ip-check': {'v_range': [['7.0.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
},
@@ -516,7 +516,7 @@ def main():
'group-poll-interval': {'v_range': [['6.2.2', '']], 'type': 'int'},
'interface': {'v_range': [['6.2.6', '6.2.12'], ['6.4.2', '']], 'type': 'str'},
'interface-select-method': {'v_range': [['6.2.6', '6.2.12'], ['6.4.2', '']], 'choices': ['auto', 'sdwan', 'specify'], 'type': 'str'},
- 'logon-timeout': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
+ 'logon-timeout': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
'sni': {'v_range': [['7.2.0', '']], 'type': 'str'},
'ssl-server-host-ip-check': {'v_range': [['7.0.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_fsso_dynamicmapping.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_fsso_dynamicmapping.py
index ce4cfdb84..5ae289869 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_fsso_dynamicmapping.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_fsso_dynamicmapping.py
@@ -359,7 +359,7 @@ def main():
'group-poll-interval': {'v_range': [['6.2.2', '']], 'type': 'int'},
'interface': {'v_range': [['6.2.6', '6.2.12'], ['6.4.2', '']], 'type': 'str'},
'interface-select-method': {'v_range': [['6.2.6', '6.2.12'], ['6.4.2', '']], 'choices': ['auto', 'sdwan', 'specify'], 'type': 'str'},
- 'logon-timeout': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'int'},
+ 'logon-timeout': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'int'},
'sni': {'v_range': [['7.2.0', '']], 'type': 'str'},
'ssl-server-host-ip-check': {'v_range': [['7.0.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_group_dynamicmapping_sslvpnoschecklist.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_group_dynamicmapping_sslvpnoschecklist.py
index 245a0d6dc..012cad7b5 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_group_dynamicmapping_sslvpnoschecklist.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_group_dynamicmapping_sslvpnoschecklist.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_user_group_dynamicmapping_sslvpnoschecklist
-short_description: no description
+short_description: User group dynamic mapping sslvpn os check list
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -115,7 +115,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: User group dynamic mapping sslvpn os check list
fortinet.fortimanager.fmgr_user_group_dynamicmapping_sslvpnoschecklist:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_json.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_json.py
index 0ff94665c..f95102f4b 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_json.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_json.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_user_json
-short_description: no description
+short_description: User json
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -110,7 +110,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: User json
fortinet.fortimanager.fmgr_user_json:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_krbkeytab.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_krbkeytab.py
index 859f55c9c..3fc504b46 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_krbkeytab.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_krbkeytab.py
@@ -212,7 +212,7 @@ def main():
'name': {'v_range': [['6.2.1', '']], 'required': True, 'type': 'str'},
'pac-data': {'v_range': [['6.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'principal': {'v_range': [['6.2.1', '']], 'type': 'str'},
- 'password': {'v_range': [['6.2.2', '7.2.0'], ['7.4.2', '']], 'no_log': True, 'type': 'raw'}
+ 'password': {'v_range': [['6.2.2', '7.2.0'], ['7.2.5', '7.2.5'], ['7.4.2', '']], 'no_log': True, 'type': 'raw'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_ldap.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_ldap.py
index c5b876d40..b81c99e71 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_ldap.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_ldap.py
@@ -304,6 +304,9 @@ options:
choices:
- 'disable'
- 'enable'
+ max-connections:
+ type: int
+ description: Deprecated, please rename it to max_connections.
two-factor-filter:
type: str
description: Deprecated, please rename it to two_factor_filter. Filter used to synchronize users to FortiToken Cloud.
@@ -321,9 +324,6 @@ options:
- 'othername'
- 'rfc822name'
- 'dnsname'
- max-connections:
- type: int
- description: Deprecated, please rename it to max_connections.
group-filter:
type: str
description: Deprecated, please rename it to group_filter. Filter used for group matching.
@@ -660,10 +660,10 @@ def main():
'source-port': {'v_range': [['7.0.0', '']], 'type': 'int'},
'client-cert': {'v_range': [['7.2.0', '']], 'type': 'str'},
'client-cert-auth': {'v_range': [['7.2.0', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'max-connections': {'v_range': [['7.0.11', '7.0.12'], ['7.2.5', '7.2.5'], ['7.4.1', '']], 'type': 'int'},
'two-factor-filter': {'v_range': [['7.2.1', '']], 'type': 'str'},
'account-key-upn-san': {'v_range': [['7.2.2', '']], 'choices': ['othername', 'rfc822name', 'dnsname'], 'type': 'str'},
- 'account-key-cert-field': {'v_range': [['7.4.1', '']], 'choices': ['othername', 'rfc822name', 'dnsname'], 'type': 'str'},
- 'max-connections': {'v_range': [['7.4.1', '']], 'type': 'int'}
+ 'account-key-cert-field': {'v_range': [['7.4.1', '']], 'choices': ['othername', 'rfc822name', 'dnsname'], 'type': 'str'}
},
'elements': 'dict'
},
@@ -689,7 +689,7 @@ def main():
'obtain-user-info': {'v_range': [['6.2.0', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'search-type': {'v_range': [['6.2.0', '']], 'type': 'list', 'choices': ['nested', 'recursive'], 'elements': 'str'},
'user-info-exchange-server': {'v_range': [['6.2.0', '']], 'type': 'str'},
- 'account-key-name': {'v_range': [['6.2.0', '6.4.13']], 'no_log': True, 'type': 'str'},
+ 'account-key-name': {'v_range': [['6.2.0', '6.4.14']], 'no_log': True, 'type': 'str'},
'group-object-search-base': {'v_range': [['6.2.0', '6.2.12']], 'type': 'str'},
'two-factor': {'v_range': [['6.2.2', '']], 'choices': ['disable', 'fortitoken-cloud'], 'type': 'str'},
'interface': {'v_range': [['6.2.5', '6.2.12'], ['6.4.1', '']], 'type': 'str'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_ldap_dynamicmapping.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_ldap_dynamicmapping.py
index 2e42df9f5..8b1902ac4 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_ldap_dynamicmapping.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_ldap_dynamicmapping.py
@@ -285,6 +285,9 @@ options:
choices:
- 'disable'
- 'enable'
+ max-connections:
+ type: int
+ description: Deprecated, please rename it to max_connections.
two-factor-filter:
type: str
description: Deprecated, please rename it to two_factor_filter. Filter used to synchronize users to FortiToken Cloud.
@@ -302,9 +305,6 @@ options:
- 'othername'
- 'rfc822name'
- 'dnsname'
- max-connections:
- type: int
- description: Deprecated, please rename it to max_connections.
'''
EXAMPLES = '''
@@ -460,10 +460,10 @@ def main():
'source-port': {'v_range': [['7.0.0', '']], 'type': 'int'},
'client-cert': {'v_range': [['7.2.0', '']], 'type': 'str'},
'client-cert-auth': {'v_range': [['7.2.0', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'max-connections': {'v_range': [['7.0.11', '7.0.12'], ['7.2.5', '7.2.5'], ['7.4.1', '']], 'type': 'int'},
'two-factor-filter': {'v_range': [['7.2.1', '']], 'type': 'str'},
'account-key-upn-san': {'v_range': [['7.2.2', '']], 'choices': ['othername', 'rfc822name', 'dnsname'], 'type': 'str'},
- 'account-key-cert-field': {'v_range': [['7.4.1', '']], 'choices': ['othername', 'rfc822name', 'dnsname'], 'type': 'str'},
- 'max-connections': {'v_range': [['7.4.1', '']], 'type': 'int'}
+ 'account-key-cert-field': {'v_range': [['7.4.1', '']], 'choices': ['othername', 'rfc822name', 'dnsname'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_local.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_local.py
index 51b6eabc7..f5febc8ce 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_local.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_local.py
@@ -345,7 +345,7 @@ def main():
'username-case-sensitivity': {'v_range': [['6.2.5', '6.2.12'], ['6.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'username-case-insensitivity': {'v_range': [['6.4.0', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'username-sensitivity': {
- 'v_range': [['6.2.9', '6.2.12'], ['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.2.9', '6.2.12'], ['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['disable', 'enable'],
'type': 'str'
},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_nsx.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_nsx.py
index 8ebf199fb..272a461ad 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_nsx.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_nsx.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_user_nsx
-short_description: no description
+short_description: User nsx
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -163,7 +163,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: User nsx
fortinet.fortimanager.fmgr_user_nsx:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
@@ -281,7 +281,7 @@ def main():
'elements': 'dict'
},
'service-manager-id': {'v_range': [['7.0.4', '']], 'type': 'str'},
- 'service-manager-rev': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'type': 'int'}
+ 'service-manager-rev': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'type': 'int'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_nsx_service.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_nsx_service.py
index 5242893f1..fb520237c 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_nsx_service.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_nsx_service.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_user_nsx_service
-short_description: no description
+short_description: User nsx service
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -120,7 +120,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: User nsx service
fortinet.fortimanager.fmgr_user_nsx_service:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_pxgrid.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_pxgrid.py
index 8fa80cf69..a5fe27990 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_pxgrid.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_pxgrid.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_user_pxgrid
-short_description: no description
+short_description: User pxgrid
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -119,7 +119,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: User pxgrid
fortinet.fortimanager.fmgr_user_pxgrid:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_saml.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_saml.py
index 6a129ca8d..11f066dbd 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_saml.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_saml.py
@@ -491,25 +491,25 @@ def main():
},
'clock-tolerance': {'v_range': [['7.0.3', '']], 'type': 'int'},
'dynamic_mapping': {
- 'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']],
+ 'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']],
'type': 'list',
'options': {
'_scope': {
- 'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']],
+ 'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']],
'type': 'list',
'options': {
- 'name': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'str'},
- 'vdom': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'str'}
+ 'name': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'str'},
+ 'vdom': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'str'}
},
'elements': 'dict'
},
- 'adfs-claim': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'cert': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'str'},
- 'clock-tolerance': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'int'},
- 'digest-method': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'choices': ['sha1', 'sha256'], 'type': 'str'},
- 'entity-id': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'str'},
+ 'adfs-claim': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'cert': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'str'},
+ 'clock-tolerance': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'int'},
+ 'digest-method': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'choices': ['sha1', 'sha256'], 'type': 'str'},
+ 'entity-id': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'str'},
'group-claim-type': {
- 'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']],
+ 'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']],
'choices': [
'email', 'given-name', 'name', 'upn', 'common-name', 'email-adfs-1x', 'group', 'upn-adfs-1x', 'role', 'sur-name', 'ppid',
'name-identifier', 'authentication-method', 'deny-only-group-sid', 'deny-only-primary-sid',
@@ -517,16 +517,16 @@ def main():
],
'type': 'str'
},
- 'group-name': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'str'},
- 'idp-cert': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'str'},
- 'idp-entity-id': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'str'},
- 'idp-single-logout-url': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'str'},
- 'idp-single-sign-on-url': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'str'},
- 'limit-relaystate': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'single-logout-url': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'str'},
- 'single-sign-on-url': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'str'},
+ 'group-name': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'str'},
+ 'idp-cert': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'str'},
+ 'idp-entity-id': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'str'},
+ 'idp-single-logout-url': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'str'},
+ 'idp-single-sign-on-url': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'str'},
+ 'limit-relaystate': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'single-logout-url': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'str'},
+ 'single-sign-on-url': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'str'},
'user-claim-type': {
- 'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']],
+ 'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']],
'choices': [
'email', 'given-name', 'name', 'upn', 'common-name', 'email-adfs-1x', 'group', 'upn-adfs-1x', 'role', 'sur-name', 'ppid',
'name-identifier', 'authentication-method', 'deny-only-group-sid', 'deny-only-primary-sid',
@@ -534,7 +534,7 @@ def main():
],
'type': 'str'
},
- 'user-name': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'str'},
+ 'user-name': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'str'},
'auth-url': {'v_range': [['7.2.1', '']], 'type': 'str'},
'reauth': {'v_range': [['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_saml_dynamicmapping.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_saml_dynamicmapping.py
index cf2dd59fd..0e1edc7ef 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_saml_dynamicmapping.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_saml_dynamicmapping.py
@@ -323,24 +323,24 @@ def main():
'saml': {'required': True, 'type': 'str'},
'user_saml_dynamicmapping': {
'type': 'dict',
- 'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']],
+ 'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']],
'options': {
'_scope': {
- 'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']],
+ 'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']],
'type': 'list',
'options': {
- 'name': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'str'},
- 'vdom': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'str'}
+ 'name': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'str'},
+ 'vdom': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'str'}
},
'elements': 'dict'
},
- 'adfs-claim': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'cert': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'str'},
- 'clock-tolerance': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'int'},
- 'digest-method': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'choices': ['sha1', 'sha256'], 'type': 'str'},
- 'entity-id': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'str'},
+ 'adfs-claim': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'cert': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'str'},
+ 'clock-tolerance': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'int'},
+ 'digest-method': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'choices': ['sha1', 'sha256'], 'type': 'str'},
+ 'entity-id': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'str'},
'group-claim-type': {
- 'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']],
+ 'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']],
'choices': [
'email', 'given-name', 'name', 'upn', 'common-name', 'email-adfs-1x', 'group', 'upn-adfs-1x', 'role', 'sur-name', 'ppid',
'name-identifier', 'authentication-method', 'deny-only-group-sid', 'deny-only-primary-sid', 'deny-only-primary-group-sid',
@@ -348,16 +348,16 @@ def main():
],
'type': 'str'
},
- 'group-name': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'str'},
- 'idp-cert': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'str'},
- 'idp-entity-id': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'str'},
- 'idp-single-logout-url': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'str'},
- 'idp-single-sign-on-url': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'str'},
- 'limit-relaystate': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'single-logout-url': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'str'},
- 'single-sign-on-url': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'str'},
+ 'group-name': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'str'},
+ 'idp-cert': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'str'},
+ 'idp-entity-id': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'str'},
+ 'idp-single-logout-url': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'str'},
+ 'idp-single-sign-on-url': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'str'},
+ 'limit-relaystate': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'single-logout-url': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'str'},
+ 'single-sign-on-url': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'str'},
'user-claim-type': {
- 'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']],
+ 'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']],
'choices': [
'email', 'given-name', 'name', 'upn', 'common-name', 'email-adfs-1x', 'group', 'upn-adfs-1x', 'role', 'sur-name', 'ppid',
'name-identifier', 'authentication-method', 'deny-only-group-sid', 'deny-only-primary-sid', 'deny-only-primary-group-sid',
@@ -365,7 +365,7 @@ def main():
],
'type': 'str'
},
- 'user-name': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'str'},
+ 'user-name': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'str'},
'auth-url': {'v_range': [['7.2.1', '']], 'type': 'str'},
'reauth': {'v_range': [['7.4.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_vcenter.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_vcenter.py
index ea6f2ac1b..6198fd7cb 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_vcenter.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_vcenter.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_user_vcenter
-short_description: no description
+short_description: User vcenter
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -133,7 +133,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: User vcenter
fortinet.fortimanager.fmgr_user_vcenter:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_vcenter_rule.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_vcenter_rule.py
index 4503f9013..833d96d63 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_vcenter_rule.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_user_vcenter_rule.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_user_vcenter_rule
-short_description: no description
+short_description: User vcenter rule
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -111,7 +111,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: User vcenter rule
fortinet.fortimanager.fmgr_user_vcenter_rule:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vap.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vap.py
index eda2922b5..112a6b36a 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vap.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vap.py
@@ -3941,10 +3941,10 @@ def main():
'utm-log': {'v_range': [['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'utm-status': {'v_range': [['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'webfilter-profile': {'v_range': [['7.0.1', '']], 'type': 'str'},
- 'sae-h2e-only': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'sae-pk': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'sae-private-key': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'no_log': True, 'type': 'str'},
- 'sticky-client-threshold-6g': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'str'},
+ 'sae-h2e-only': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'sae-pk': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'sae-private-key': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'no_log': True, 'type': 'str'},
+ 'sticky-client-threshold-6g': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'str'},
'application-dscp-marking': {'v_range': [['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'l3-roaming-mode': {'v_range': [['7.2.1', '']], 'choices': ['direct', 'indirect'], 'type': 'str'},
'rates-11ac-mcs-map': {'v_range': [['7.2.1', '']], 'type': 'str'},
@@ -4228,10 +4228,10 @@ def main():
'elements': 'dict'
},
'webfilter-profile': {'v_range': [['7.0.1', '']], 'type': 'str'},
- 'sae-h2e-only': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'sae-pk': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'sae-private-key': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'no_log': True, 'type': 'str'},
- 'sticky-client-threshold-6g': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'str'},
+ 'sae-h2e-only': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'sae-pk': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'sae-private-key': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'no_log': True, 'type': 'str'},
+ 'sticky-client-threshold-6g': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'str'},
'application-dscp-marking': {'v_range': [['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'l3-roaming-mode': {'v_range': [['7.2.1', '']], 'choices': ['direct', 'indirect'], 'type': 'str'},
'rates-11ac-mcs-map': {'v_range': [['7.2.1', '']], 'type': 'str'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vap_dynamicmapping.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vap_dynamicmapping.py
index 7c6d721a9..776d29ff2 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vap_dynamicmapping.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vap_dynamicmapping.py
@@ -2124,10 +2124,10 @@ def main():
'utm-log': {'v_range': [['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'utm-status': {'v_range': [['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'webfilter-profile': {'v_range': [['7.0.1', '']], 'type': 'str'},
- 'sae-h2e-only': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'sae-pk': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'sae-private-key': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'no_log': True, 'type': 'str'},
- 'sticky-client-threshold-6g': {'v_range': [['7.0.5', '7.0.10'], ['7.2.1', '']], 'type': 'str'},
+ 'sae-h2e-only': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'sae-pk': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'sae-private-key': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'no_log': True, 'type': 'str'},
+ 'sticky-client-threshold-6g': {'v_range': [['7.0.5', '7.0.12'], ['7.2.1', '']], 'type': 'str'},
'application-dscp-marking': {'v_range': [['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'l3-roaming-mode': {'v_range': [['7.2.1', '']], 'choices': ['direct', 'indirect'], 'type': 'str'},
'rates-11ac-mcs-map': {'v_range': [['7.2.1', '']], 'type': 'str'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_videofilter_youtubechannelfilter.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_videofilter_youtubechannelfilter.py
index 67a378638..0252611ba 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_videofilter_youtubechannelfilter.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_videofilter_youtubechannelfilter.py
@@ -257,7 +257,7 @@ def main():
'name': {'v_range': [['7.0.0', '']], 'type': 'str'},
'default-action': {'v_range': [['7.0.1', '']], 'choices': ['monitor', 'block', 'allow'], 'type': 'str'},
'log': {'v_range': [['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'override-category': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
+ 'override-category': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpn_ssl_settings.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpn_ssl_settings.py
index 34617bfa4..09fdd7ae4 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpn_ssl_settings.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpn_ssl_settings.py
@@ -846,8 +846,8 @@ def main():
'wins-server1': {'v_range': [['6.2.6', '6.2.12'], ['6.4.2', '']], 'type': 'str'},
'wins-server2': {'v_range': [['6.2.6', '6.2.12'], ['6.4.2', '']], 'type': 'str'},
'x-content-type-options': {'v_range': [['6.2.6', '6.2.12'], ['6.4.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'sslv3': {'v_range': [['6.2.6', '6.2.12'], ['6.4.2', '6.4.13']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'ssl-big-buffer': {'v_range': [['6.2.6', '6.2.12'], ['6.4.2', '6.4.13']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'sslv3': {'v_range': [['6.2.6', '6.2.12'], ['6.4.2', '6.4.14']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'ssl-big-buffer': {'v_range': [['6.2.6', '6.2.12'], ['6.4.2', '6.4.14']], 'choices': ['disable', 'enable'], 'type': 'str'},
'client-sigalgs': {'v_range': [['6.4.4', '']], 'choices': ['no-rsa-pss', 'all'], 'type': 'str'},
'ciphersuite': {
'v_range': [['6.4.8', '']],
@@ -862,7 +862,7 @@ def main():
'tunnel-addr-assigned-method': {'v_range': [['7.0.0', '']], 'choices': ['first-available', 'round-robin'], 'type': 'str'},
'browser-language-detection': {'v_range': [['7.2.0', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'saml-redirect-port': {'v_range': [['7.0.1', '']], 'type': 'int'},
- 'status': {'v_range': [['6.4.8', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'status': {'v_range': [['6.4.8', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'web-mode-snat': {'v_range': [['7.0.4', '7.2.3'], ['7.4.0', '7.4.1']], 'choices': ['disable', 'enable'], 'type': 'str'},
'ztna-trusted-client': {'v_range': [['7.2.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'dtls-heartbeat-fail-count': {'v_range': [['7.4.0', '']], 'type': 'int'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnmgr_node.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnmgr_node.py
index e3aca60cd..569d14cf5 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnmgr_node.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnmgr_node.py
@@ -671,23 +671,23 @@ def main():
'hub-public-ip': {'v_range': [['6.2.2', '']], 'type': 'str'},
'ipv4-split-exclude': {'v_range': [['6.4.6', '']], 'type': 'str'},
'scope member': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'type': 'list',
'options': {
- 'name': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'},
- 'vdom': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'type': 'str'}
+ 'name': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'},
+ 'vdom': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'type': 'str'}
},
'elements': 'dict'
},
- 'dhcp-ra-giaddr': {'v_range': [['6.4.8', '6.4.13'], ['7.0.4', '']], 'type': 'str'},
+ 'dhcp-ra-giaddr': {'v_range': [['6.4.8', '6.4.14'], ['7.0.4', '']], 'type': 'str'},
'encapsulation': {'v_range': [['7.0.2', '']], 'choices': ['tunnel-mode', 'transport-mode'], 'type': 'str'},
- 'ipv4-name': {'v_range': [['6.4.8', '6.4.13'], ['7.0.4', '']], 'type': 'str'},
+ 'ipv4-name': {'v_range': [['6.4.8', '6.4.14'], ['7.0.4', '']], 'type': 'str'},
'l2tp': {'v_range': [['7.0.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'auto-discovery-receiver': {'v_range': [['7.0.8', '7.0.10'], ['7.2.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'auto-discovery-sender': {'v_range': [['7.0.8', '7.0.10'], ['7.2.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'network-id': {'v_range': [['7.0.8', '7.0.10'], ['7.2.3', '']], 'type': 'int'},
- 'network-overlay': {'v_range': [['7.0.8', '7.0.10'], ['7.2.3', '']], 'choices': ['enable', 'disable'], 'type': 'str'},
- 'protocol': {'v_range': [['7.4.1', '']], 'type': 'int'}
+ 'auto-discovery-receiver': {'v_range': [['7.0.8', '7.0.12'], ['7.2.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'auto-discovery-sender': {'v_range': [['7.0.8', '7.0.12'], ['7.2.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'network-id': {'v_range': [['7.0.8', '7.0.12'], ['7.2.3', '']], 'type': 'int'},
+ 'network-overlay': {'v_range': [['7.0.8', '7.0.12'], ['7.2.3', '']], 'choices': ['enable', 'disable'], 'type': 'str'},
+ 'protocol': {'v_range': [['7.2.5', '7.2.5'], ['7.4.1', '']], 'type': 'int'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnmgr_node_iprange.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnmgr_node_iprange.py
index 597183918..3101ff330 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnmgr_node_iprange.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnmgr_node_iprange.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_vpnmgr_node_iprange
-short_description: no description
+short_description: Vpnmgr node ip range
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -114,7 +114,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Vpnmgr node ip range
fortinet.fortimanager.fmgr_vpnmgr_node_iprange:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnmgr_node_ipv4excluderange.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnmgr_node_ipv4excluderange.py
index c7b40ad69..d7c6c9e89 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnmgr_node_ipv4excluderange.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnmgr_node_ipv4excluderange.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_vpnmgr_node_ipv4excluderange
-short_description: no description
+short_description: Vpnmgr node ipv4 exclude range
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -114,7 +114,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Vpnmgr node ipv4 exclude range
fortinet.fortimanager.fmgr_vpnmgr_node_ipv4excluderange:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnmgr_node_protectedsubnet.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnmgr_node_protectedsubnet.py
index 3e7bbaed1..7a33cd339 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnmgr_node_protectedsubnet.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnmgr_node_protectedsubnet.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_vpnmgr_node_protectedsubnet
-short_description: no description
+short_description: Vpnmgr node protected subnet
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -111,7 +111,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Vpnmgr node protected subnet
fortinet.fortimanager.fmgr_vpnmgr_node_protectedsubnet:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnmgr_node_summaryaddr.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnmgr_node_summaryaddr.py
index 699a76528..ae2418c7a 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnmgr_node_summaryaddr.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnmgr_node_summaryaddr.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_vpnmgr_node_summaryaddr
-short_description: no description
+short_description: Vpnmgr node summary addr
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -114,7 +114,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Vpnmgr node summary addr
fortinet.fortimanager.fmgr_vpnmgr_node_summaryaddr:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnmgr_vpntable.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnmgr_vpntable.py
index f5894707d..2e77c3a77 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnmgr_vpntable.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnmgr_vpntable.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_vpnmgr_vpntable
-short_description: no description
+short_description: Vpnmgr vpntable
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -453,7 +453,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Vpnmgr vpntable
fortinet.fortimanager.fmgr_vpnmgr_vpntable:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnsslweb_portal.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnsslweb_portal.py
index 07f1fdf1c..6c8deef6f 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnsslweb_portal.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnsslweb_portal.py
@@ -1200,10 +1200,10 @@ def main():
'sso-username': {'type': 'str'},
'url': {'type': 'str'},
'domain': {'v_range': [['6.4.2', '']], 'type': 'str'},
- 'color-depth': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['8', '16', '32'], 'type': 'str'},
+ 'color-depth': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['8', '16', '32'], 'type': 'str'},
'height': {'v_range': [['7.0.3', '']], 'type': 'int'},
'keyboard-layout': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': [
'ar', 'da', 'de', 'de-ch', 'en-gb', 'en-uk', 'en-us', 'es', 'fi', 'fr', 'fr-be', 'fr-ca', 'fr-ch', 'hr', 'hu',
'it', 'ja', 'lt', 'lv', 'mk', 'no', 'pl', 'pt', 'pt-br', 'ru', 'sl', 'sv', 'tk', 'tr', 'fr-ca-m', 'wg', 'ar-101',
@@ -1214,9 +1214,9 @@ def main():
],
'type': 'str'
},
- 'restricted-admin': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'restricted-admin': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'send-preconnection-id': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': ['disable', 'enable'],
'type': 'str'
},
@@ -1338,10 +1338,10 @@ def main():
'use-sdwan': {'v_range': [['6.2.7', '6.2.12'], ['6.4.3', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'prefer-ipv6-dns': {'v_range': [['7.0.0', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'rewrite-ip-uri-ui': {'v_range': [['7.0.0', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'clipboard': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'clipboard': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'default-window-height': {'v_range': [['7.0.4', '']], 'type': 'int'},
'default-window-width': {'v_range': [['7.0.4', '']], 'type': 'int'},
- 'dhcp-ip-overlap': {'v_range': [['7.0.4', '7.0.10'], ['7.2.1', '']], 'choices': ['use-old', 'use-new'], 'type': 'str'},
+ 'dhcp-ip-overlap': {'v_range': [['7.0.4', '7.0.12'], ['7.2.1', '']], 'choices': ['use-old', 'use-new'], 'type': 'str'},
'client-src-range': {'v_range': [['7.2.2', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'dhcp-ra-giaddr': {'v_range': [['7.2.2', '']], 'type': 'str'},
'dhcp6-ra-linkaddr': {'v_range': [['7.2.2', '']], 'type': 'str'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnsslweb_portal_bookmarkgroup.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnsslweb_portal_bookmarkgroup.py
index d4958dba1..55145fc67 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnsslweb_portal_bookmarkgroup.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnsslweb_portal_bookmarkgroup.py
@@ -518,10 +518,10 @@ def main():
'sso-username': {'type': 'str'},
'url': {'type': 'str'},
'domain': {'v_range': [['6.4.2', '']], 'type': 'str'},
- 'color-depth': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['8', '16', '32'], 'type': 'str'},
+ 'color-depth': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['8', '16', '32'], 'type': 'str'},
'height': {'v_range': [['7.0.3', '']], 'type': 'int'},
'keyboard-layout': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': [
'ar', 'da', 'de', 'de-ch', 'en-gb', 'en-uk', 'en-us', 'es', 'fi', 'fr', 'fr-be', 'fr-ca', 'fr-ch', 'hr', 'hu', 'it',
'ja', 'lt', 'lv', 'mk', 'no', 'pl', 'pt', 'pt-br', 'ru', 'sl', 'sv', 'tk', 'tr', 'fr-ca-m', 'wg', 'ar-101', 'ar-102',
@@ -532,8 +532,8 @@ def main():
],
'type': 'str'
},
- 'restricted-admin': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'send-preconnection-id': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'restricted-admin': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'send-preconnection-id': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'width': {'v_range': [['7.0.3', '']], 'type': 'int'},
'vnc-keyboard-layout': {
'v_range': [['7.2.2', '']],
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnsslweb_portal_bookmarkgroup_bookmarks.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnsslweb_portal_bookmarkgroup_bookmarks.py
index 49b5adf56..848fcb642 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnsslweb_portal_bookmarkgroup_bookmarks.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_vpnsslweb_portal_bookmarkgroup_bookmarks.py
@@ -510,10 +510,10 @@ def main():
'sso-username': {'type': 'str'},
'url': {'type': 'str'},
'domain': {'v_range': [['6.4.2', '']], 'type': 'str'},
- 'color-depth': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['8', '16', '32'], 'type': 'str'},
+ 'color-depth': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['8', '16', '32'], 'type': 'str'},
'height': {'v_range': [['7.0.3', '']], 'type': 'int'},
'keyboard-layout': {
- 'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']],
+ 'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']],
'choices': [
'ar', 'da', 'de', 'de-ch', 'en-gb', 'en-uk', 'en-us', 'es', 'fi', 'fr', 'fr-be', 'fr-ca', 'fr-ch', 'hr', 'hu', 'it', 'ja', 'lt',
'lv', 'mk', 'no', 'pl', 'pt', 'pt-br', 'ru', 'sl', 'sv', 'tk', 'tr', 'fr-ca-m', 'wg', 'ar-101', 'ar-102', 'ar-102-azerty',
@@ -524,8 +524,8 @@ def main():
],
'type': 'str'
},
- 'restricted-admin': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'send-preconnection-id': {'v_range': [['6.4.7', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'restricted-admin': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'send-preconnection-id': {'v_range': [['6.4.7', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'width': {'v_range': [['7.0.3', '']], 'type': 'int'},
'vnc-keyboard-layout': {
'v_range': [['7.2.2', '']],
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wanprof_system_sdwan.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wanprof_system_sdwan.py
index ea8eb9f09..22cdfd4b6 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wanprof_system_sdwan.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wanprof_system_sdwan.py
@@ -1146,7 +1146,7 @@ def main():
'v_range': [['6.4.1', '']],
'type': 'list',
'options': {
- '_dynamic-server': {'v_range': [['6.4.1', '6.4.13']], 'type': 'str'},
+ '_dynamic-server': {'v_range': [['6.4.1', '6.4.14']], 'type': 'str'},
'addr-mode': {'v_range': [['6.4.1', '']], 'choices': ['ipv4', 'ipv6'], 'type': 'str'},
'diffservcode': {'v_range': [['6.4.1', '']], 'type': 'str'},
'dns-match-ip': {'v_range': [['6.4.2', '']], 'type': 'str'},
@@ -1232,7 +1232,7 @@ def main():
'v_range': [['6.4.1', '']],
'type': 'list',
'options': {
- '_dynamic-member': {'v_range': [['6.4.1', '6.4.13']], 'type': 'str'},
+ '_dynamic-member': {'v_range': [['6.4.1', '6.4.14']], 'type': 'str'},
'comment': {'v_range': [['6.4.1', '']], 'type': 'str'},
'cost': {'v_range': [['6.4.1', '']], 'type': 'int'},
'gateway': {'v_range': [['6.4.1', '']], 'type': 'str'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wanprof_system_sdwan_healthcheck.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wanprof_system_sdwan_healthcheck.py
index 2e11d0a24..a251f4e0b 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wanprof_system_sdwan_healthcheck.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wanprof_system_sdwan_healthcheck.py
@@ -464,7 +464,7 @@ def main():
'type': 'dict',
'v_range': [['6.4.1', '']],
'options': {
- '_dynamic-server': {'v_range': [['6.4.1', '6.4.13']], 'type': 'str'},
+ '_dynamic-server': {'v_range': [['6.4.1', '6.4.14']], 'type': 'str'},
'addr-mode': {'v_range': [['6.4.1', '']], 'choices': ['ipv4', 'ipv6'], 'type': 'str'},
'diffservcode': {'v_range': [['6.4.1', '']], 'type': 'str'},
'dns-match-ip': {'v_range': [['6.4.2', '']], 'type': 'str'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wanprof_system_sdwan_members.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wanprof_system_sdwan_members.py
index 181383a6c..85e6c42cb 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wanprof_system_sdwan_members.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wanprof_system_sdwan_members.py
@@ -120,6 +120,7 @@ options:
seq-num:
type: int
description: Deprecated, please rename it to seq_num. Sequence number
+ required: true
source:
type: str
description: Source IP address used in the health-check packet to the server.
@@ -253,7 +254,7 @@ def main():
]
url_params = ['adom', 'wanprof']
- module_primary_key = None
+ module_primary_key = 'seq-num'
module_arg_spec = {
'adom': {'required': True, 'type': 'str'},
'wanprof': {'required': True, 'type': 'str'},
@@ -261,7 +262,7 @@ def main():
'type': 'dict',
'v_range': [['6.4.1', '']],
'options': {
- '_dynamic-member': {'v_range': [['6.4.1', '6.4.13']], 'type': 'str'},
+ '_dynamic-member': {'v_range': [['6.4.1', '6.4.14']], 'type': 'str'},
'comment': {'v_range': [['6.4.1', '']], 'type': 'str'},
'cost': {'v_range': [['6.4.1', '']], 'type': 'int'},
'gateway': {'v_range': [['6.4.1', '']], 'type': 'str'},
@@ -269,7 +270,7 @@ def main():
'ingress-spillover-threshold': {'v_range': [['6.4.1', '']], 'type': 'int'},
'interface': {'v_range': [['6.4.1', '']], 'type': 'str'},
'priority': {'v_range': [['6.4.1', '']], 'type': 'int'},
- 'seq-num': {'v_range': [['6.4.1', '']], 'type': 'int'},
+ 'seq-num': {'v_range': [['6.4.1', '']], 'required': True, 'type': 'int'},
'source': {'v_range': [['6.4.1', '']], 'type': 'str'},
'source6': {'v_range': [['6.4.1', '']], 'type': 'str'},
'spillover-threshold': {'v_range': [['6.4.1', '']], 'type': 'int'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wanprof_system_virtualwanlink.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wanprof_system_virtualwanlink.py
index 3547fb848..7680f5a50 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wanprof_system_virtualwanlink.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wanprof_system_virtualwanlink.py
@@ -808,7 +808,7 @@ def main():
'health-check': {
'type': 'list',
'options': {
- '_dynamic-server': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
+ '_dynamic-server': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
'addr-mode': {'choices': ['ipv4', 'ipv6'], 'type': 'str'},
'failtime': {'type': 'int'},
'http-agent': {'type': 'str'},
@@ -847,7 +847,7 @@ def main():
'probe-packets': {'v_range': [['6.2.0', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'sla-fail-log-period': {'v_range': [['6.2.0', '']], 'type': 'int'},
'sla-pass-log-period': {'v_range': [['6.2.0', '']], 'no_log': True, 'type': 'int'},
- 'timeout': {'v_range': [['6.2.0', '6.4.13']], 'type': 'int'},
+ 'timeout': {'v_range': [['6.2.0', '6.4.14']], 'type': 'int'},
'ha-priority': {'v_range': [['6.2.2', '']], 'type': 'int'},
'diffservcode': {'v_range': [['6.2.5', '']], 'type': 'str'},
'probe-timeout': {'v_range': [['6.2.5', '']], 'type': 'int'},
@@ -864,7 +864,7 @@ def main():
'members': {
'type': 'list',
'options': {
- '_dynamic-member': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
+ '_dynamic-member': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
'comment': {'type': 'str'},
'gateway': {'type': 'str'},
'gateway6': {'type': 'str'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wanprof_system_virtualwanlink_healthcheck.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wanprof_system_virtualwanlink_healthcheck.py
index 61e7fc257..339957eaa 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wanprof_system_virtualwanlink_healthcheck.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wanprof_system_virtualwanlink_healthcheck.py
@@ -384,7 +384,7 @@ def main():
'type': 'dict',
'v_range': [['6.0.0', '']],
'options': {
- '_dynamic-server': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
+ '_dynamic-server': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
'addr-mode': {'choices': ['ipv4', 'ipv6'], 'type': 'str'},
'failtime': {'type': 'int'},
'http-agent': {'type': 'str'},
@@ -423,7 +423,7 @@ def main():
'probe-packets': {'v_range': [['6.2.0', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'sla-fail-log-period': {'v_range': [['6.2.0', '']], 'type': 'int'},
'sla-pass-log-period': {'v_range': [['6.2.0', '']], 'no_log': True, 'type': 'int'},
- 'timeout': {'v_range': [['6.2.0', '6.4.13']], 'type': 'int'},
+ 'timeout': {'v_range': [['6.2.0', '6.4.14']], 'type': 'int'},
'ha-priority': {'v_range': [['6.2.2', '']], 'type': 'int'},
'diffservcode': {'v_range': [['6.2.5', '']], 'type': 'str'},
'probe-timeout': {'v_range': [['6.2.5', '']], 'type': 'int'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wanprof_system_virtualwanlink_members.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wanprof_system_virtualwanlink_members.py
index 05ad0f8ed..051ae9311 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wanprof_system_virtualwanlink_members.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wanprof_system_virtualwanlink_members.py
@@ -246,7 +246,7 @@ def main():
'type': 'dict',
'v_range': [['6.0.0', '']],
'options': {
- '_dynamic-member': {'v_range': [['6.0.0', '6.4.13']], 'type': 'str'},
+ '_dynamic-member': {'v_range': [['6.0.0', '6.4.14']], 'type': 'str'},
'comment': {'type': 'str'},
'gateway': {'type': 'str'},
'gateway6': {'type': 'str'},
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_webfilter_categories.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_webfilter_categories.py
index 6309bb8d2..813747eb6 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_webfilter_categories.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_webfilter_categories.py
@@ -12,7 +12,7 @@ ANSIBLE_METADATA = {'status': ['preview'],
DOCUMENTATION = '''
---
module: fmgr_webfilter_categories
-short_description: no description
+short_description: Webfilter categories
description:
- This module is able to configure a FortiManager device.
- Examples include all parameters and values which need to be adjusted to data sources before usage.
@@ -104,7 +104,7 @@ EXAMPLES = '''
ansible_httpapi_validate_certs: false
ansible_httpapi_port: 443
tasks:
- - name: No description
+ - name: Webfilter categories
fortinet.fortimanager.fmgr_webfilter_categories:
# bypass_validation: false
workspace_locking_adom: <value in [global, custom adom including root]>
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_webfilter_profile.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_webfilter_profile.py
index 1760f3fd9..e91bd9acd 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_webfilter_profile.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_webfilter_profile.py
@@ -1216,7 +1216,7 @@ def main():
'rate-css-urls': {'v_range': [['6.2.8', '6.2.12'], ['6.4.5', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'rate-image-urls': {'v_range': [['6.2.8', '6.2.12'], ['6.4.5', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'rate-javascript-urls': {'v_range': [['6.2.8', '6.2.12'], ['6.4.5', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
- 'category-override': {'v_range': [['6.2.8', '6.2.12'], ['6.4.5', '6.4.13']], 'type': 'str'}
+ 'category-override': {'v_range': [['6.2.8', '6.2.12'], ['6.4.5', '6.4.14']], 'type': 'str'}
}
},
'override': {
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_webfilter_profile_ftgdwf.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_webfilter_profile_ftgdwf.py
index c81865a69..0113deef4 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_webfilter_profile_ftgdwf.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_webfilter_profile_ftgdwf.py
@@ -385,7 +385,7 @@ def main():
'rate-css-urls': {'choices': ['disable', 'enable'], 'type': 'str'},
'rate-image-urls': {'choices': ['disable', 'enable'], 'type': 'str'},
'rate-javascript-urls': {'choices': ['disable', 'enable'], 'type': 'str'},
- 'category-override': {'v_range': [['6.2.0', '6.4.13']], 'type': 'str'}
+ 'category-override': {'v_range': [['6.2.0', '6.4.14']], 'type': 'str'}
}
}
diff --git a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wtpprofile.py b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wtpprofile.py
index c31e36f42..e509d1878 100644
--- a/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wtpprofile.py
+++ b/ansible_collections/fortinet/fortimanager/plugins/modules/fmgr_wtpprofile.py
@@ -4152,7 +4152,7 @@ def main():
'sam-private-key-password': {'v_range': [['7.4.2', '']], 'no_log': True, 'type': 'raw'}
}
},
- 'console-login': {'v_range': [['6.2.9', '6.2.12'], ['6.4.8', '6.4.13'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
+ 'console-login': {'v_range': [['6.2.9', '6.2.12'], ['6.4.8', '6.4.14'], ['7.0.1', '']], 'choices': ['disable', 'enable'], 'type': 'str'},
'esl-ses-dongle': {
'type': 'dict',
'options': {
diff --git a/ansible_collections/fortinet/fortimanager/tests/sanity/ignore-2.14.txt b/ansible_collections/fortinet/fortimanager/tests/sanity/ignore-2.14.txt
deleted file mode 100644
index 61481198a..000000000
--- a/ansible_collections/fortinet/fortimanager/tests/sanity/ignore-2.14.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-plugins/modules/fmgr_gtp_iewhitelist.py validate-modules:invalid-argument-name
-plugins/modules/fmgr_gtp_iewhitelist_entries.py validate-modules:invalid-argument-name
-plugins/modules/fmgr_sys_reboot.py validate-modules:invalid-argument-name
-plugins/modules/fmgr_system_replacemsggroup.py validate-modules:invalid-argument-name
-plugins/modules/fmgr_system_replacemsggroup_mm1.py validate-modules:invalid-argument-name
-plugins/modules/fmgr_system_replacemsggroup_mm3.py validate-modules:invalid-argument-name
-plugins/modules/fmgr_system_replacemsggroup_mm4.py validate-modules:invalid-argument-name
-plugins/modules/fmgr_system_replacemsggroup_mm7.py validate-modules:invalid-argument-name
-plugins/modules/fmgr_gtp_iewhitelist.py validate-modules:nonexistent-parameter-documented
-plugins/modules/fmgr_gtp_iewhitelist_entries.py validate-modules:nonexistent-parameter-documented
-plugins/modules/fmgr_sys_reboot.py validate-modules:nonexistent-parameter-documented
-plugins/modules/fmgr_system_replacemsggroup.py validate-modules:nonexistent-parameter-documented
-plugins/modules/fmgr_system_replacemsggroup_mm1.py validate-modules:nonexistent-parameter-documented
-plugins/modules/fmgr_system_replacemsggroup_mm3.py validate-modules:nonexistent-parameter-documented
-plugins/modules/fmgr_system_replacemsggroup_mm4.py validate-modules:nonexistent-parameter-documented
-plugins/modules/fmgr_system_replacemsggroup_mm7.py validate-modules:nonexistent-parameter-documented
diff --git a/ansible_collections/fortinet/fortimanager/tests/sanity/ignore-2.15.txt b/ansible_collections/fortinet/fortimanager/tests/sanity/ignore-2.15.txt
index 61481198a..e69de29bb 100644
--- a/ansible_collections/fortinet/fortimanager/tests/sanity/ignore-2.15.txt
+++ b/ansible_collections/fortinet/fortimanager/tests/sanity/ignore-2.15.txt
@@ -1,16 +0,0 @@
-plugins/modules/fmgr_gtp_iewhitelist.py validate-modules:invalid-argument-name
-plugins/modules/fmgr_gtp_iewhitelist_entries.py validate-modules:invalid-argument-name
-plugins/modules/fmgr_sys_reboot.py validate-modules:invalid-argument-name
-plugins/modules/fmgr_system_replacemsggroup.py validate-modules:invalid-argument-name
-plugins/modules/fmgr_system_replacemsggroup_mm1.py validate-modules:invalid-argument-name
-plugins/modules/fmgr_system_replacemsggroup_mm3.py validate-modules:invalid-argument-name
-plugins/modules/fmgr_system_replacemsggroup_mm4.py validate-modules:invalid-argument-name
-plugins/modules/fmgr_system_replacemsggroup_mm7.py validate-modules:invalid-argument-name
-plugins/modules/fmgr_gtp_iewhitelist.py validate-modules:nonexistent-parameter-documented
-plugins/modules/fmgr_gtp_iewhitelist_entries.py validate-modules:nonexistent-parameter-documented
-plugins/modules/fmgr_sys_reboot.py validate-modules:nonexistent-parameter-documented
-plugins/modules/fmgr_system_replacemsggroup.py validate-modules:nonexistent-parameter-documented
-plugins/modules/fmgr_system_replacemsggroup_mm1.py validate-modules:nonexistent-parameter-documented
-plugins/modules/fmgr_system_replacemsggroup_mm3.py validate-modules:nonexistent-parameter-documented
-plugins/modules/fmgr_system_replacemsggroup_mm4.py validate-modules:nonexistent-parameter-documented
-plugins/modules/fmgr_system_replacemsggroup_mm7.py validate-modules:nonexistent-parameter-documented
diff --git a/ansible_collections/fortinet/fortimanager/tests/sanity/ignore-2.16.txt b/ansible_collections/fortinet/fortimanager/tests/sanity/ignore-2.16.txt
index 61481198a..e69de29bb 100644
--- a/ansible_collections/fortinet/fortimanager/tests/sanity/ignore-2.16.txt
+++ b/ansible_collections/fortinet/fortimanager/tests/sanity/ignore-2.16.txt
@@ -1,16 +0,0 @@
-plugins/modules/fmgr_gtp_iewhitelist.py validate-modules:invalid-argument-name
-plugins/modules/fmgr_gtp_iewhitelist_entries.py validate-modules:invalid-argument-name
-plugins/modules/fmgr_sys_reboot.py validate-modules:invalid-argument-name
-plugins/modules/fmgr_system_replacemsggroup.py validate-modules:invalid-argument-name
-plugins/modules/fmgr_system_replacemsggroup_mm1.py validate-modules:invalid-argument-name
-plugins/modules/fmgr_system_replacemsggroup_mm3.py validate-modules:invalid-argument-name
-plugins/modules/fmgr_system_replacemsggroup_mm4.py validate-modules:invalid-argument-name
-plugins/modules/fmgr_system_replacemsggroup_mm7.py validate-modules:invalid-argument-name
-plugins/modules/fmgr_gtp_iewhitelist.py validate-modules:nonexistent-parameter-documented
-plugins/modules/fmgr_gtp_iewhitelist_entries.py validate-modules:nonexistent-parameter-documented
-plugins/modules/fmgr_sys_reboot.py validate-modules:nonexistent-parameter-documented
-plugins/modules/fmgr_system_replacemsggroup.py validate-modules:nonexistent-parameter-documented
-plugins/modules/fmgr_system_replacemsggroup_mm1.py validate-modules:nonexistent-parameter-documented
-plugins/modules/fmgr_system_replacemsggroup_mm3.py validate-modules:nonexistent-parameter-documented
-plugins/modules/fmgr_system_replacemsggroup_mm4.py validate-modules:nonexistent-parameter-documented
-plugins/modules/fmgr_system_replacemsggroup_mm7.py validate-modules:nonexistent-parameter-documented
diff --git a/ansible_collections/gluster/gluster/.github/workflows/ansible-test-plugins.yml b/ansible_collections/gluster/gluster/.github/workflows/ansible-test-plugins.yml
deleted file mode 100644
index 8c6b612cc..000000000
--- a/ansible_collections/gluster/gluster/.github/workflows/ansible-test-plugins.yml
+++ /dev/null
@@ -1,47 +0,0 @@
----
-name: Plugins CI
-on:
- push:
- paths:
- - 'plugins/**'
- - 'tests/**'
- - '.github/workflows/ansible-test-plugins.yml'
- - 'changelogs/*'
- - 'galaxy.yml'
- pull_request:
- paths:
- - 'plugins/**'
- - 'tests/**'
- - '.github/workflows/ansible-test-plugins.yml'
- schedule:
- - cron: '0 6 * * *'
-
-jobs:
- sanity:
- name: "Sanity (Ansible: ${{ matrix.ansible }})"
- runs-on: ubuntu-latest
- strategy:
- matrix:
- ansible:
- - stable-2.9
- - stable-2.10
- - devel
-
- steps:
- - name: Check out code
- uses: actions/checkout@v2
- with:
- path: ansible_collections/gluster/gluster
-
- # Just run once as anyway ansible-test sanity using container will run test for all python versions he supports
- - name: Set up Python
- uses: actions/setup-python@v2
- with:
- python-version: 3.8
-
- - name: Install ansible-base (${{ matrix.ansible }})
- run: pip install https://github.com/ansible/ansible/archive/${{ matrix.ansible }}.tar.gz --disable-pip-version-check
-
- - name: Run sanity tests
- run: ansible-test sanity --docker -v --color
- working-directory: ./ansible_collections/gluster/gluster
diff --git a/ansible_collections/gluster/gluster/.gitignore b/ansible_collections/gluster/gluster/.gitignore
deleted file mode 100644
index 17f16c032..000000000
--- a/ansible_collections/gluster/gluster/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-tests/output/
-changelogs/.plugin-cache.yaml
diff --git a/ansible_collections/gluster/gluster/CHANGELOG.rst b/ansible_collections/gluster/gluster/CHANGELOG.rst
deleted file mode 100644
index fca0b161a..000000000
--- a/ansible_collections/gluster/gluster/CHANGELOG.rst
+++ /dev/null
@@ -1,33 +0,0 @@
-========================================
-Gluster Ansible Collection Release Notes
-========================================
-
-.. contents:: Topics
-
-
-v1.0.2
-======
-
-Major Changes
--------------
-
-- enable client.ssl,server.ssl before starting the gluster volume (https://github.com/gluster/gluster-ansible-collection/pull/19)
-
-v1.0.1
-======
-
-v1.0.0
-======
-
-Major Changes
--------------
-
-- geo_rep - Added the independent module of geo rep with other gluster modules (https://github.com/gluster/gluster-ansible-collection/pull/2).
-
-New Modules
------------
-
-- gluster.gluster.geo_rep - Manage geo-replication sessions
-- gluster.gluster.gluster_heal_info - Gather facts about either self-heal or rebalance status
-- gluster.gluster.gluster_peer - Attach/Detach peers to/from the cluster
-- gluster.gluster.gluster_volume - Manage GlusterFS volumes
diff --git a/ansible_collections/gluster/gluster/FILES.json b/ansible_collections/gluster/gluster/FILES.json
deleted file mode 100644
index 3d69367d0..000000000
--- a/ansible_collections/gluster/gluster/FILES.json
+++ /dev/null
@@ -1,166 +0,0 @@
-{
- "files": [
- {
- "name": ".",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "changelogs",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "changelogs/config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6e1e182c7b4c93f749e0c7db228bc12d402a644619141252c43df5ab431c536f",
- "format": 1
- },
- {
- "name": "changelogs/changelog.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d0803d36de0cbf127c9d777632b3b4b89192b90e05b8345c0c3749a80e709e58",
- "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": "df18179bb2f5447a56ac92261a911649b96821c0b2c08eea62d5cc6b0195203f",
- "format": 1
- },
- {
- "name": "tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/sanity",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/sanity/ignore-2.10.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "20bbf9ce835ecf43b345c1c86a5eafecaec98737c0a00f3146f6e459fbb2121a",
- "format": 1
- },
- {
- "name": "tests/sanity/ignore-2.11.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "20bbf9ce835ecf43b345c1c86a5eafecaec98737c0a00f3146f6e459fbb2121a",
- "format": 1
- },
- {
- "name": "CHANGELOG.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7f395483772bc670fd201b8aceecee35ae6b9249a1f10fab55ad945a6c2230e0",
- "format": 1
- },
- {
- "name": "LICENSE",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "77691ea688645a83845ebe7922c529777d99cc34ac18e98c1bb710c576cf6073",
- "format": 1
- },
- {
- "name": ".github",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": ".github/workflows",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": ".github/workflows/ansible-test-plugins.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8baecdfb5acea6041a2689fb0f3ae7f87bfaa87be9c7fdf2bdf14ece1ceac786",
- "format": 1
- },
- {
- "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/gluster_volume.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "68d4cef121879d83711f137466e13d9f6af40c2abdc00b09ccba4f31fc8762a4",
- "format": 1
- },
- {
- "name": "plugins/modules/gluster_heal_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4e96c378d5e33d8230868f65229dd73b8365e7b3da59170c1c82a7995c6b1ba2",
- "format": 1
- },
- {
- "name": "plugins/modules/geo_rep.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7d030d566f4be86dd6fb83eaa1aa7b01738fbb27b3b0492e6b18df0026d38ef7",
- "format": 1
- },
- {
- "name": "plugins/modules/gluster_peer.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3c6c49c79c57f1319f96808c07fd9f05ebc92322aa4f25d9a63608430f8ac010",
- "format": 1
- },
- {
- "name": ".gitignore",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f38ba82ecf283574365b673d8b219740fb4a3d6f07e8d9f06012565d2b0d5d84",
- "format": 1
- },
- {
- "name": "README.md",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "124c8f6c3f4100b7aee5da0546b2da643d8d3ab58348453fbee48fe0f125d9a4",
- "format": 1
- }
- ],
- "format": 1
-} \ No newline at end of file
diff --git a/ansible_collections/gluster/gluster/LICENSE b/ansible_collections/gluster/gluster/LICENSE
deleted file mode 100644
index 85d49a071..000000000
--- a/ansible_collections/gluster/gluster/LICENSE
+++ /dev/null
@@ -1,288 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- Copyright 2014 Red Hat, Inc.
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.
diff --git a/ansible_collections/gluster/gluster/MANIFEST.json b/ansible_collections/gluster/gluster/MANIFEST.json
deleted file mode 100644
index 5bcf910e3..000000000
--- a/ansible_collections/gluster/gluster/MANIFEST.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "collection_info": {
- "namespace": "gluster",
- "name": "gluster",
- "version": "1.0.2",
- "authors": [
- "gluster (github.com/gluster)```",
- "Prajith Kesava Prasad <pkesavap@redhat.com>"
- ],
- "readme": "README.md",
- "tags": [
- "gluster",
- "storage"
- ],
- "description": "Administrate a gluster cluster.",
- "license": [],
- "license_file": "./LICENSE",
- "dependencies": {},
- "repository": "https://github.com/gluster/gluster-ansible-collection",
- "documentation": "https://docs.ansible.com/ansible/latest/",
- "homepage": "https://github.com/gluster/gluster-ansible-collection",
- "issues": "https://github.com/gluster/gluster-ansible-collection/issues"
- },
- "file_manifest_file": {
- "name": "FILES.json",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a89d1a6580a92a0bd5fcc7aead7fc08398db51a66b8f8a43e3a2b6a167d10acd",
- "format": 1
- },
- "format": 1
-} \ No newline at end of file
diff --git a/ansible_collections/gluster/gluster/README.md b/ansible_collections/gluster/gluster/README.md
deleted file mode 100644
index 5966dd7eb..000000000
--- a/ansible_collections/gluster/gluster/README.md
+++ /dev/null
@@ -1,37 +0,0 @@
-gluster ansible collection
-====================================
-
-The `gluster.gluster` manages all ansible modules of gluster-ansible
-
-Note
-----
-Please note that when installing this collection from Ansible Galaxy you are instructed to run following command:
-
-```bash
-$ ansible-galaxy collection install gluster.gluster
-```
-
-
-Requirements
-------------
-
- * Ansible version 2.9 or higher
- * Python SDK version 4.3 or higher
-
-Modules documentation
---------------
-
-Dependencies
-------------
-None.
-
-Example Playbook
-----------------
-
-```
-playbook
-```
-License
--------
-
-GNU General Public License v2.0
diff --git a/ansible_collections/gluster/gluster/changelogs/changelog.yaml b/ansible_collections/gluster/gluster/changelogs/changelog.yaml
deleted file mode 100644
index 788fa6015..000000000
--- a/ansible_collections/gluster/gluster/changelogs/changelog.yaml
+++ /dev/null
@@ -1,31 +0,0 @@
-ancestor: null
-releases:
- 1.0.0:
- changes:
- major_changes:
- - geo_rep - Added the independent module of geo rep with other gluster modules
- (https://github.com/gluster/gluster-ansible-collection/pull/2).
- fragments:
- - 2-geo_rep.py
- modules:
- - description: Manage geo-replication sessions
- name: geo_rep
- namespace: ''
- - description: Gather facts about either self-heal or rebalance status
- name: gluster_heal_info
- namespace: ''
- - description: Attach/Detach peers to/from the cluster
- name: gluster_peer
- namespace: ''
- - description: Manage GlusterFS volumes
- name: gluster_volume
- namespace: ''
- release_date: '2020-06-29'
- 1.0.1:
- release_date: '2020-08-18'
- 1.0.2:
- changes:
- major_changes:
- - enable client.ssl,server.ssl before starting the gluster volume
- (https://github.com/gluster/gluster-ansible-collection/pull/19)
- release_date: '2021-09-17'
diff --git a/ansible_collections/gluster/gluster/changelogs/config.yaml b/ansible_collections/gluster/gluster/changelogs/config.yaml
deleted file mode 100644
index bf477a77c..000000000
--- a/ansible_collections/gluster/gluster/changelogs/config.yaml
+++ /dev/null
@@ -1,31 +0,0 @@
-changelog_filename_template: ../CHANGELOG.rst
-changelog_filename_version_depth: 0
-changes_file: changelog.yaml
-changes_format: combined
-ignore_other_fragment_extensions: true
-keep_fragments: false
-mention_ancestor: true
-new_plugins_after_name: removed_features
-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
-title: Gluster Ansible Collection
-trivial_section_name: trivial
-use_fqcn: true
diff --git a/ansible_collections/gluster/gluster/meta/runtime.yml b/ansible_collections/gluster/gluster/meta/runtime.yml
deleted file mode 100644
index 2ee3c9fa9..000000000
--- a/ansible_collections/gluster/gluster/meta/runtime.yml
+++ /dev/null
@@ -1,2 +0,0 @@
----
-requires_ansible: '>=2.9.10'
diff --git a/ansible_collections/gluster/gluster/plugins/modules/geo_rep.py b/ansible_collections/gluster/gluster/plugins/modules/geo_rep.py
deleted file mode 100644
index 801cbd39f..000000000
--- a/ansible_collections/gluster/gluster/plugins/modules/geo_rep.py
+++ /dev/null
@@ -1,347 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-#
-# Copyright 2015 Nandaja Varma <nvarma@redhat.com>
-#
-# This program 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.
-#
-# This program 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 Library General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-# USA.
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-DOCUMENTATION = """
-module: geo_rep
-short_description: Manage geo-replication sessions
-description:
- - Create, stop, delete and configure geo-replication session
-author: Sachidananda Urs (@sac)
-options:
- action:
- description:
- - Action to be performed on geo-replication session.
- required: true
- choices: ['create', 'start', 'stop', 'delete', 'pause', 'resume', 'config']
- type: str
- mastervol:
- description:
- - Master volume name.
- type: str
- slavevol:
- description:
- - Slave volume name.
- type: str
- force:
- description:
- - force the system to perform the action.
- type: str
- georepuser:
- description:
- - Username to be used for the action being performed.
- type: str
- gluster_log_file:
- description:
- - The path to the geo-replication glusterfs log file.
- type: str
- gluster_log_level:
- description:
- - The log level for glusterfs processes.
- type: str
- log_file:
- description:
- - The path to the geo-replication log file.
- type: str
- log_level:
- description:
- - The log level for geo-replication.
- type: str
- changelog_log_level:
- description:
- - The log level for the changelog.
- type: str
- ssh_command:
- description:
- - The SSH command to connect to the remote machine.
- type: str
- rsync_command:
- description:
- - The command to use for setting synchronizing method for the files.
- type: str
- use_tarssh:
- description:
- - To use tar over ssh.
- type: str
- volume_id:
- description:
- - deletes the existing master UID for the intermediate/slave node.
- type: str
- timeout:
- description:
- - timeout period.
- type: str
- sync_jobs:
- description:
- - number of sync-jobs .
- type: str
- ignore_deletes:
- description:
- - file deletion on the master will not trigger a delete operation on the slave.
- type: str
- checkpoint:
- description:
- - Sets a checkpoint with the given option.
- type: str
- sync_acls:
- description:
- - Syncs acls to the Slave cluster.
- type: str
- sync_xattrs:
- description:
- - Syncs extended attributes to the Slave cluster.
- type: str
- log_rsync_performance:
- description:
- - for recording the rsync performance in log files.
- type: str
- rsync_options:
- description:
- - Additional options to rsync.
- type: str
- use_meta_volume:
- description:
- - to use meta volume in Geo-replication.
- type: str
- meta_volume_mnt:
- description:
- - The path of the meta volume mount point.
- type: str
-"""
-
-EXAMPLES = """
-- name: Create the geo-rep session
- gluster.gluster.geo_rep:
- action: create
- mastervol: 10.70.42.122:mastervolume
- slavevol: 10.70.43.48:slavevolume
- force: true
- georepuser: staff
-- name: Starts the geo-rep session
- gluster.gluster.geo_rep:
- action: start
- mastervol: 10.70.42.122:mastervolume
- slavevol: 10.70.43.48:slavevolume
- force: true
- georepuser: staff
-- name: Pause the geo-rep session
- gluster.gluster.geo_rep:
- action: pause
- mastervol: 10.70.42.122:mastervolume
- slavevol: 10.70.43.48:slavevolume
- force: true
- georepuser: staff
-- name: Resume the geo-rep session
- gluster.gluster.geo_rep:
- action: resume
- mastervol: 10.70.42.122:mastervolume
- slavevol: 10.70.43.48:slavevolume
- force: true
- georepuser: staff
-- name: Stop the geo-rep session
- gluster.gluster.geo_rep:
- action: stop
- mastervol: 10.70.42.122:mastervolume
- slavevol: 10.70.43.48:slavevolume
- force: true
- georepuser: staff
-- name: Configures the geo-rep session
- gluster.gluster.geo_rep:
- action: config
- mastervol: 10.70.42.122:mastervolume
- slavevol: 10.70.43.48:slavevolume
- gluster_log_file: /var/log/glusterfs/geo-replication/gluster.log
- gluster_log_level: INFO
- log_file: /var/log/glusterfs/geo-replication/file.log
- log_level: INFO
- changelog_log_level: INFO
- ssh_command: SSH
- rsync_command: rsync
- use_tarssh: true
- volume_id: 6a071cfa-b150-4f0b-b1ed-96ab5d4bd671
- timeout: 60
- sync_jobs: 3
- ignore_deletes: 1
- checkpoint: now
- sync_acls: true
- sync_xattr: true
- log_rsync_performance: true
- rsync_options: --compress-level=0
- use_meta_volume: true
- meta_volume_mnt: /var/run/gluster/shared_storage/
-- name: Delete the geo-rep session
- gluster.gluster.geo_rep:
- action: delete
- mastervol: 10.70.42.122:mastervolume
- slavevol: 10.70.43.48:slavevolume
- georepuser: staff
-"""
-
-import re
-from ansible.module_utils.basic import AnsibleModule
-
-
-class GeoRep(object):
- def __init__(self, module):
- self.module = module
- self.action = self._validated_params('action')
- self.gluster_georep_ops()
-
- def get_playbook_params(self, opt):
- return self.module.params[opt]
-
- def _validated_params(self, opt):
- value = self.get_playbook_params(opt)
- if value is None:
- msg = "Please provide %s option in the playbook!" % opt
- self.module.fail_json(msg=msg)
- return value
-
- def gluster_georep_ops(self):
- mastervol = self._validated_params('mastervol')
- slavevol = self._validated_params('slavevol')
- slavevol = self.check_pool_exclusiveness(mastervol, slavevol)
- if self.action in ['delete', 'config']:
- force = ''
- else:
- force = self._validated_params('force')
- force = 'force' if force == 'yes' else ' '
- options = 'no-verify' if self.action == 'create' \
- else self.config_georep()
- if isinstance(options, list):
- for opt in options:
- rc, output, err = self.call_gluster_cmd('volume',
- 'geo-replication',
- mastervol, slavevol,
- self.action, opt,
- force)
- else:
- rc, output, err = self.call_gluster_cmd('volume',
- 'geo-replication',
- mastervol, slavevol,
- self.action, options,
- force)
- self._get_output(rc, output, err)
- if self.action in ['stop', 'delete'] and self.user == 'root':
- self.user = 'geoaccount'
- rc, output, err = self.call_gluster_cmd('volume', 'geo-replication',
- mastervol, slavevol.replace(
- 'root', 'geoaccount'),
- self.action, options, force)
- self._get_output(rc, output, err)
-
- def config_georep(self):
- if self.action != 'config':
- return ''
- options = ['gluster_log_file', 'gluster_log_level', 'log_file',
- 'log_level', 'changelog_log_level', 'ssh_command',
- 'rsync_command', 'use_tarssh', 'volume_id', 'timeout',
- 'sync_jobs', 'ignore_deletes', 'checkpoint', 'sync_acls',
- 'sync_xattrs', 'log_rsync_performance', 'rsync_options',
- 'use_meta_volume', 'meta_volume_mnt']
- configs = []
- for opt in options:
- value = self._validated_params(opt)
- if value:
- if value == 'reset':
- configs.append("'!" + opt.replace('_', '-') + "'")
- configs.append(opt.replace('_', '-') + ' ' + value)
- if configs:
- return configs
- value = self._validated_params('config')
- op = self._validated_params('op')
- return value + ' ' + op
-
- def check_pool_exclusiveness(self, mastervol, slavevol):
- rc, output, err = self.module.run_command(
- "gluster pool list")
- peers_in_cluster = [line.split('\t')[1].strip() for
- line in filter(None, output.split('\n')[1:])]
- val_group = re.search("(.*):(.*)", slavevol)
- if not val_group:
- self.module.fail_json(msg="Slave volume in Unknown format. "
- "Correct format: <hostname>:<volume name>")
- if val_group.group(1) in peers_in_cluster:
- self.module.fail_json(msg="slave volume is in the trusted "
- "storage pool of master")
- self.user = 'root' if self.module.params['georepuser'] is None \
- else self.module.params['georepuser']
- return self.user + '@' + val_group.group(1) + '::' + val_group.group(2)
-
- def call_gluster_cmd(self, *args, **kwargs):
- params = ' '.join(opt for opt in args)
- key_value_pair = ' '.join(' %s %s ' % (key, value)
- for key, value in kwargs)
- return self._run_command('gluster', ' ' + params + ' ' + key_value_pair)
-
- def _get_output(self, rc, output, err):
- carryon = True if self.action in ['stop',
- 'delete', 'resume'] else False
- changed = 0 if (carryon and rc) else 1
- if self.action in ['stop', 'delete'] and (
- self.user == 'root' and changed == 0):
- return
- if not rc or carryon:
- self.module.exit_json(stdout=output, changed=changed)
- else:
- self.module.fail_json(msg=err)
-
- def _run_command(self, op, opts):
- cmd = self.module.get_bin_path(op, True) + opts
- return self.module.run_command(cmd)
-
-
-def main():
- module = AnsibleModule(
- argument_spec=dict(
- action=dict(required=True, choices=['create', 'start',
- 'stop', 'delete', 'pause', 'resume', 'config']),
- mastervol=dict(),
- slavevol=dict(),
- force=dict(),
- georepuser=dict(),
- gluster_log_file=dict(),
- gluster_log_level=dict(),
- log_file=dict(),
- log_level=dict(),
- changelog_log_level=dict(),
- ssh_command=dict(),
- rsync_command=dict(),
- use_tarssh=dict(),
- volume_id=dict(),
- timeout=dict(),
- sync_jobs=dict(),
- ignore_deletes=dict(),
- checkpoint=dict(),
- sync_acls=dict(),
- sync_xattrs=dict(),
- log_rsync_performance=dict(),
- rsync_options=dict(),
- use_meta_volume=dict(),
- meta_volume_mnt=dict()
- ),
- )
- GeoRep(module)
-
-
-if __name__ == "__main__":
- main()
diff --git a/ansible_collections/gluster/gluster/plugins/modules/gluster_heal_info.py b/ansible_collections/gluster/gluster/plugins/modules/gluster_heal_info.py
deleted file mode 100644
index 786e0c23f..000000000
--- a/ansible_collections/gluster/gluster/plugins/modules/gluster_heal_info.py
+++ /dev/null
@@ -1,205 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-#
-# Copyright: (c) 2016, 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
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'community'}
-
-
-DOCUMENTATION = '''
----
-module: gluster_heal_info
-short_description: Gather information on self-heal or rebalance status
-author: "Devyani Kota (@devyanikota)"
-description:
- - Gather facts about either self-heal or rebalance status.
- - This module was called C(gluster_heal_facts) before Ansible 2.9, returning C(ansible_facts).
- Note that the M(gluster.gluster.gluster_heal_info) module no longer returns C(ansible_facts)!
-options:
- name:
- description:
- - The volume name.
- required: true
- aliases: ['volume']
- type: str
- status_filter:
- default: "self-heal"
- choices: ["self-heal", "rebalance"]
- type: str
- description:
- - Determines which facts are to be returned.
- - If the C(status_filter) is C(self-heal), status of self-heal, along with the number of files still in process are returned.
- - If the C(status_filter) is C(rebalance), rebalance status is returned.
-requirements:
- - GlusterFS > 3.2
-'''
-
-EXAMPLES = '''
-- name: Gather self-heal facts about all gluster hosts in the cluster
- gluster.gluster.gluster_heal_info:
- name: test_volume
- status_filter: self-heal
- register: self_heal_status
-- debug:
- var: self_heal_status
-
-- name: Gather rebalance facts about all gluster hosts in the cluster
- gluster.gluster.gluster_heal_info:
- name: test_volume
- status_filter: rebalance
- register: rebalance_status
-- debug:
- var: rebalance_status
-'''
-
-RETURN = '''
-name:
- description: GlusterFS volume name
- returned: always
- type: str
-status_filter:
- description: Whether self-heal or rebalance status is to be returned
- returned: always
- type: str
-heal_info:
- description: List of files that still need healing process
- returned: On success
- type: list
-rebalance_status:
- description: Status of rebalance operation
- returned: On success
- type: list
-'''
-
-import traceback
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils._text import to_native
-from distutils.version import LooseVersion
-
-glusterbin = ''
-
-
-def run_gluster(gargs, **kwargs):
- global glusterbin
- global module
- args = [glusterbin, '--mode=script']
- args.extend(gargs)
- try:
- rc, out, err = module.run_command(args, **kwargs)
- if rc != 0:
- module.fail_json(msg='error running gluster (%s) command (rc=%d): %s' %
- (' '.join(args), rc, out or err), exception=traceback.format_exc())
- except Exception as e:
- module.fail_json(msg='error running gluster (%s) command: %s' % (' '.join(args),
- to_native(e)), exception=traceback.format_exc())
- return out
-
-
-def get_self_heal_status(name):
- out = run_gluster(['volume', 'heal', name, 'info'], environ_update=dict(LANG='C', LC_ALL='C', LC_MESSAGES='C'))
- raw_out = out.split("\n")
- heal_info = []
- # return files that still need healing.
- for line in raw_out:
- if 'Brick' in line:
- br_dict = {}
- br_dict['brick'] = line.strip().strip("Brick")
- elif 'Status' in line:
- br_dict['status'] = line.split(":")[1].strip()
- elif 'Number' in line:
- br_dict['no_of_entries'] = line.split(":")[1].strip()
- elif line.startswith('/') or '\n' in line:
- continue
- else:
- br_dict and heal_info.append(br_dict)
- br_dict = {}
- return heal_info
-
-
-def get_rebalance_status(name):
- out = run_gluster(['volume', 'rebalance', name, 'status'], environ_update=dict(LANG='C', LC_ALL='C', LC_MESSAGES='C'))
- raw_out = out.split("\n")
- rebalance_status = []
- # return the files that are either still 'in progress' state or 'completed'.
- for line in raw_out:
- line = " ".join(line.split())
- line_vals = line.split(" ")
- if line_vals[0].startswith('-') or line_vals[0].startswith('Node'):
- continue
- node_dict = {}
- if len(line_vals) == 1 or len(line_vals) == 4:
- continue
- node_dict['node'] = line_vals[0]
- node_dict['rebalanced_files'] = line_vals[1]
- node_dict['failures'] = line_vals[4]
- if 'in progress' in line:
- node_dict['status'] = line_vals[5] + line_vals[6]
- rebalance_status.append(node_dict)
- elif 'completed' in line:
- node_dict['status'] = line_vals[5]
- rebalance_status.append(node_dict)
- return rebalance_status
-
-
-def is_invalid_gluster_version(module, required_version):
- cmd = module.get_bin_path('gluster', True) + ' --version'
- result = module.run_command(cmd)
- ver_line = result[1].split('\n')[0]
- version = ver_line.split(' ')[1]
- # If the installed version is less than 3.2, it is an invalid version
- # return True
- return LooseVersion(version) < LooseVersion(required_version)
-
-
-def main():
- global module
- global glusterbin
- module = AnsibleModule(
- argument_spec=dict(
- name=dict(type='str', required=True, aliases=['volume']),
- status_filter=dict(type='str', default='self-heal', choices=['self-heal', 'rebalance']),
- ),
- )
- is_old_facts = module._name == 'gluster_heal_facts'
- if is_old_facts:
- module.deprecate("The 'gluster_heal_facts' module has been renamed to 'gluster_heal_info', "
- "and the renamed one no longer returns ansible_facts", version='2.13')
-
- glusterbin = module.get_bin_path('gluster', True)
- required_version = "3.2"
- status_filter = module.params['status_filter']
- volume_name = module.params['name']
- heal_info = ''
- rebalance_status = ''
-
- # Verify if required GlusterFS version is installed
- if is_invalid_gluster_version(module, required_version):
- module.fail_json(msg="GlusterFS version > %s is required" %
- required_version)
-
- try:
- if status_filter == "self-heal":
- heal_info = get_self_heal_status(volume_name)
- elif status_filter == "rebalance":
- rebalance_status = get_rebalance_status(volume_name)
- except Exception as e:
- module.fail_json(msg='Error retrieving status: %s' % e, exception=traceback.format_exc())
-
- facts = {}
- facts['glusterfs'] = {'volume': volume_name, 'status_filter': status_filter, 'heal_info': heal_info, 'rebalance': rebalance_status}
-
- if is_old_facts:
- module.exit_json(ansible_facts=facts)
- else:
- module.exit_json(**facts)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/gluster/gluster/plugins/modules/gluster_peer.py b/ansible_collections/gluster/gluster/plugins/modules/gluster_peer.py
deleted file mode 100644
index 213f2b849..000000000
--- a/ansible_collections/gluster/gluster/plugins/modules/gluster_peer.py
+++ /dev/null
@@ -1,177 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-#
-# Copyright 2015 Nandaja Varma <nvarma@redhat.com>
-# Copyright 2018 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
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'community'}
-
-DOCUMENTATION = '''
----
-module: gluster_peer
-short_description: Attach/Detach peers to/from the cluster
-description:
- - Create or diminish a GlusterFS trusted storage pool. A set of nodes can be
- added into an existing trusted storage pool or a new storage pool can be
- formed. Or, nodes can be removed from an existing trusted storage pool.
-author: Sachidananda Urs (@sac)
-options:
- state:
- choices: ["present", "absent"]
- default: "present"
- description:
- - Determines whether the nodes should be attached to the pool or
- removed from the pool. If the state is present, nodes will be
- attached to the pool. If state is absent, nodes will be detached
- from the pool.
- required: true
- type: str
- nodes:
- description:
- - List of nodes that have to be probed into the pool.
- required: true
- type: list
- force:
- type: bool
- default: "false"
- description:
- - Applicable only while removing the nodes from the pool. gluster
- will refuse to detach a node from the pool if any one of the node
- is down, in such cases force can be used.
-requirements:
- - GlusterFS > 3.2
-notes:
- - This module does not support check mode.
-'''
-
-EXAMPLES = '''
-- name: Create a trusted storage pool
- gluster.gluster.gluster_peer:
- state: present
- nodes:
- - 10.0.1.5
- - 10.0.1.10
-
-- name: Delete a node from the trusted storage pool
- gluster.gluster.gluster_peer:
- state: absent
- nodes:
- - 10.0.1.10
-
-- name: Delete a node from the trusted storage pool by force
- gluster.gluster.gluster_peer:
- state: absent
- nodes:
- - 10.0.0.1
- force: true
-'''
-
-RETURN = '''
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-from distutils.version import LooseVersion
-
-
-class Peer(object):
- def __init__(self, module):
- self.module = module
- self.state = self.module.params['state']
- self.nodes = self.module.params['nodes']
- self.glustercmd = self.module.get_bin_path('gluster', True)
- self.lang = dict(LANG='C', LC_ALL='C', LC_MESSAGES='C')
- self.action = ''
- self.force = ''
-
- def gluster_peer_ops(self):
- if not self.nodes:
- self.module.fail_json(msg="nodes list cannot be empty")
- self.force = 'force' if self.module.params.get('force') else ''
- if self.state == 'present':
- self.nodes = self.get_to_be_probed_hosts(self.nodes)
- self.action = 'probe'
- # In case of peer probe, we do not need `force'
- self.force = ''
- else:
- self.action = 'detach'
- self.call_peer_commands()
-
- def get_to_be_probed_hosts(self, hosts):
- peercmd = [self.glustercmd, 'pool', 'list', '--mode=script']
- rc, output, err = self.module.run_command(peercmd,
- environ_update=self.lang)
- peers_in_cluster = [line.split('\t')[1].strip() for
- line in filter(None, output.split('\n')[1:])]
- try:
- peers_in_cluster.remove('localhost')
- except ValueError:
- # It is ok not to have localhost in list
- pass
- hosts_to_be_probed = [host for host in hosts if host not in
- peers_in_cluster]
- return hosts_to_be_probed
-
- def call_peer_commands(self):
- result = {}
- result['msg'] = ''
- result['changed'] = False
-
- for node in self.nodes:
- peercmd = [self.glustercmd, 'peer', self.action, node, '--mode=script']
- if self.force:
- peercmd.append(self.force)
- rc, out, err = self.module.run_command(peercmd,
- environ_update=self.lang)
- if rc:
- result['rc'] = rc
- result['msg'] = err
- # Fail early, do not wait for the loop to finish
- self.module.fail_json(**result)
- else:
- if 'already in peer' in out or \
- 'localhost not needed' in out:
- result['changed'] |= False
- else:
- result['changed'] = True
- self.module.exit_json(**result)
-
-
-def main():
- module = AnsibleModule(
- argument_spec=dict(
- force=dict(type='bool', required=False),
- nodes=dict(type='list', required=True),
- state=dict(type='str', choices=['absent', 'present'],
- default='present'),
- ),
- supports_check_mode=False
- )
- pops = Peer(module)
- required_version = "3.2"
- # Verify if required GlusterFS version is installed
- if is_invalid_gluster_version(module, required_version):
- module.fail_json(msg="GlusterFS version > %s is required" %
- required_version)
- pops.gluster_peer_ops()
-
-
-def is_invalid_gluster_version(module, required_version):
- cmd = module.get_bin_path('gluster', True) + ' --version'
- result = module.run_command(cmd)
- ver_line = result[1].split('\n')[0]
- version = ver_line.split(' ')[1]
- # If the installed version is less than 3.2, it is an invalid version
- # return True
- return LooseVersion(version) < LooseVersion(required_version)
-
-
-if __name__ == "__main__":
- main()
diff --git a/ansible_collections/gluster/gluster/plugins/modules/gluster_volume.py b/ansible_collections/gluster/gluster/plugins/modules/gluster_volume.py
deleted file mode 100644
index 703ad6d75..000000000
--- a/ansible_collections/gluster/gluster/plugins/modules/gluster_volume.py
+++ /dev/null
@@ -1,621 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# Copyright: (c) 2014, Taneli Leppä <taneli@crasman.fi>
-# 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: gluster_volume
-short_description: Manage GlusterFS volumes
-description:
- - Create, remove, start, stop and tune GlusterFS volumes
-options:
- name:
- description:
- - The volume name.
- required: true
- aliases: ['volume']
- type: str
- state:
- description:
- - Use present/absent ensure if a volume exists or not.
- Use started/stopped to control its availability.
- required: true
- choices: ['absent', 'present', 'started', 'stopped']
- type: str
- cluster:
- description:
- - List of hosts to use for probing and brick setup.
- type: list
- host:
- description:
- - Override local hostname (for peer probing purposes).
- type: str
- replicas:
- description:
- - Replica count for volume.
- type: int
- arbiters:
- description:
- - Arbiter count for volume.
- type: int
- stripes:
- description:
- - Stripe count for volume.
- type: int
- disperses:
- description:
- - Disperse count for volume.
- type: int
- redundancies:
- description:
- - Redundancy count for volume.
- type: int
- transport:
- description:
- - Transport type for volume.
- default: tcp
- choices: [ tcp, rdma, 'tcp,rdma' ]
- type: str
- bricks:
- description:
- - Brick paths on servers. Multiple brick paths can be separated by commas.
- aliases: [ brick ]
- type: str
- start_on_create:
- description:
- - Controls whether the volume is started after creation or not.
- type: bool
- default: 'yes'
- rebalance:
- description:
- - Controls whether the cluster is rebalanced after changes.
- type: bool
- default: 'no'
- directory:
- description:
- - Directory for limit-usage.
- type: str
- options:
- description:
- - A dictionary/hash with options/settings for the volume.
- type: dict
- quota:
- description:
- - Quota value for limit-usage (be sure to use 10.0MB instead of 10MB, see quota list).
- type: str
- force:
- description:
- - If brick is being created in the root partition, module will fail.
- Set force to true to override this behaviour.
- type: bool
-notes:
- - Requires cli tools for GlusterFS on servers.
- - Will add new bricks, but not remove them.
-author:
-- Taneli Leppä (@rosmo)
-"""
-
-EXAMPLES = """
-- name: create gluster volume
- gluster.gluster.gluster_volume:
- state: present
- name: test1
- bricks: /bricks/brick1/g1
- rebalance: yes
- cluster:
- - 192.0.2.10
- - 192.0.2.11
- run_once: true
-
-- name: tune
- gluster.gluster.gluster_volume:
- state: present
- name: test1
- options:
- performance.cache-size: 256MB
-
-- name: Set multiple options on GlusterFS volume
- gluster.gluster.gluster_volume:
- state: present
- name: test1
- options:
- { performance.cache-size: 128MB,
- write-behind: 'off',
- quick-read: 'on'
- }
-
-- name: start gluster volume
- gluster.gluster.gluster_volume:
- state: started
- name: test1
-
-- name: limit usage
- gluster.gluster.gluster_volume:
- state: present
- name: test1
- directory: /foo
- quota: 20.0MB
-
-- name: stop gluster volume
- gluster.gluster.gluster_volume:
- state: stopped
- name: test1
-
-- name: remove gluster volume
- gluster.gluster.gluster_volume:
- state: absent
- name: test1
-
-- name: create gluster volume with multiple bricks
- gluster.gluster.gluster_volume:
- state: present
- name: test2
- bricks: /bricks/brick1/g2,/bricks/brick2/g2
- cluster:
- - 192.0.2.10
- - 192.0.2.11
- run_once: true
-
-- name: Remove the bricks from gluster volume
- gluster.gluster.gluster_volume:
- state: present
- name: testvol
- bricks: /bricks/brick1/b1,/bricks/brick2/b2
- cluster:
- - 10.70.42.85
- force: true
- run_once: true
-
-- name: Reduce cluster configuration
- gluster.gluster.gluster_volume:
- state: present
- name: testvol
- bricks: /bricks/brick3/b1,/bricks/brick4/b2
- replicas: 2
- cluster:
- - 10.70.42.85
- force: true
- run_once: true
-"""
-
-import re
-import socket
-import time
-import traceback
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils._text import to_native
-
-glusterbin = ''
-
-
-def run_gluster(gargs, **kwargs):
- global glusterbin
- global module
- args = [glusterbin, '--mode=script']
- args.extend(gargs)
- try:
- rc, out, err = module.run_command(args, **kwargs)
- if rc != 0:
- module.fail_json(msg='error running gluster (%s) command (rc=%d): %s' %
- (' '.join(args), rc, out or err), exception=traceback.format_exc())
- except Exception as e:
- module.fail_json(msg='error running gluster (%s) command: %s' % (' '.join(args),
- to_native(e)), exception=traceback.format_exc())
- return out
-
-
-def run_gluster_nofail(gargs, **kwargs):
- global glusterbin
- global module
- args = [glusterbin]
- args.extend(gargs)
- rc, out, err = module.run_command(args, **kwargs)
- if rc != 0:
- return None
- return out
-
-
-def get_peers():
- out = run_gluster(['peer', 'status'])
- peers = {}
- hostname = None
- uuid = None
- state = None
- shortNames = False
- for row in out.split('\n'):
- if ': ' in row:
- key, value = row.split(': ')
- if key.lower() == 'hostname':
- hostname = value
- shortNames = False
- if key.lower() == 'uuid':
- uuid = value
- if key.lower() == 'state':
- state = value
- peers[hostname] = [uuid, state]
- elif row.lower() == 'other names:':
- shortNames = True
- elif row != '' and shortNames is True:
- peers[row] = [uuid, state]
- elif row == '':
- shortNames = False
- return peers
-
-
-def get_volumes():
- out = run_gluster(['volume', 'info'])
-
- volumes = {}
- volume = {}
- for row in out.split('\n'):
- if ': ' in row:
- key, value = row.split(': ')
- if key.lower() == 'volume name':
- volume['name'] = value
- volume['options'] = {}
- volume['quota'] = False
- if key.lower() == 'volume id':
- volume['id'] = value
- if key.lower() == 'status':
- volume['status'] = value
- if key.lower() == 'transport-type':
- volume['transport'] = value
- if value.lower().endswith(' (arbiter)'):
- if 'arbiters' not in volume:
- volume['arbiters'] = []
- value = value[:-10]
- volume['arbiters'].append(value)
- elif key.lower() == 'number of bricks':
- volume['replicas'] = value[-1:]
- if key.lower() != 'bricks' and key.lower()[:5] == 'brick':
- if 'bricks' not in volume:
- volume['bricks'] = []
- volume['bricks'].append(value)
- # Volume options
- if '.' in key:
- if 'options' not in volume:
- volume['options'] = {}
- volume['options'][key] = value
- if key == 'features.quota' and value == 'on':
- volume['quota'] = True
- else:
- if row.lower() != 'bricks:' and row.lower() != 'options reconfigured:':
- if len(volume) > 0:
- volumes[volume['name']] = volume
- volume = {}
- return volumes
-
-
-def get_quotas(name, nofail):
- quotas = {}
- if nofail:
- out = run_gluster_nofail(['volume', 'quota', name, 'list'])
- if not out:
- return quotas
- else:
- out = run_gluster(['volume', 'quota', name, 'list'])
- for row in out.split('\n'):
- if row[:1] == '/':
- q = re.split(r'\s+', row)
- quotas[q[0]] = q[1]
- return quotas
-
-
-def wait_for_peer(host):
- for x in range(0, 4):
- peers = get_peers()
- if host in peers and peers[host][1].lower().find('peer in cluster') != -1:
- return True
- time.sleep(1)
- return False
-
-
-def probe(host, myhostname):
- global module
- out = run_gluster(['peer', 'probe', host])
- if out.find('localhost') == -1 and not wait_for_peer(host):
- module.fail_json(msg='failed to probe peer %s on %s' % (host, myhostname))
-
-
-def probe_all_peers(hosts, peers, myhostname):
- for host in hosts:
- host = host.strip() # Clean up any extra space for exact comparison
- if host not in peers:
- probe(host, myhostname)
-
-
-def create_volume(name, stripe, replica, arbiter, disperse, redundancy, transport, hosts, bricks, force):
- args = ['volume', 'create']
- args.append(name)
- if stripe:
- args.append('stripe')
- args.append(str(stripe))
- if replica:
- args.append('replica')
- args.append(str(replica))
- if arbiter:
- args.append('arbiter')
- args.append(str(arbiter))
- if disperse:
- args.append('disperse')
- args.append(str(disperse))
- if redundancy:
- args.append('redundancy')
- args.append(str(redundancy))
- args.append('transport')
- args.append(transport)
- for brick in bricks:
- for host in hosts:
- args.append(('%s:%s' % (host, brick)))
- if force:
- args.append('force')
- run_gluster(args)
-
-
-def start_volume(name):
- run_gluster(['volume', 'start', name])
-
-
-def stop_volume(name):
- run_gluster(['volume', 'stop', name])
-
-
-def set_volume_option(name, option, parameter):
- run_gluster(['volume', 'set', name, option, parameter])
-
-
-def add_bricks(name, new_bricks, stripe, replica, force):
- args = ['volume', 'add-brick', name]
- if stripe:
- args.append('stripe')
- args.append(str(stripe))
- if replica:
- args.append('replica')
- args.append(str(replica))
- args.extend(new_bricks)
- if force:
- args.append('force')
- run_gluster(args)
-
-
-def remove_bricks(name, removed_bricks, force):
- # max-tries=12 with default_interval=10 secs
- max_tries = 12
- retries = 0
- success = False
- args = ['volume', 'remove-brick', name]
- args.extend(removed_bricks)
- # create a copy of args to use for commit operation
- args_c = args[:]
- args.append('start')
- run_gluster(args)
- # remove-brick operation needs to be followed by commit operation.
- if not force:
- module.fail_json(msg="Force option is mandatory.")
- else:
- while retries < max_tries:
- last_brick = removed_bricks[-1]
- out = run_gluster(['volume', 'remove-brick', name, last_brick, 'status'])
- for row in out.split('\n')[1:]:
- if 'completed' in row:
- # remove-brick successful, call commit operation.
- args_c.append('commit')
- out = run_gluster(args_c)
- success = True
- break
- else:
- time.sleep(10)
- if success:
- break
- retries += 1
- if not success:
- # remove-brick still in process, needs to be committed after completion.
- module.fail_json(msg="Exceeded number of tries, check remove-brick status.\n"
- "Commit operation needs to be followed.")
-
-
-def reduce_config(name, removed_bricks, replicas, force):
- out = run_gluster(['volume', 'heal', name, 'info'])
- summary = out.split("\n")
- for line in summary:
- if 'Number' in line and int(line.split(":")[1].strip()) != 0:
- module.fail_json(msg="Operation aborted, self-heal in progress.")
- args = ['volume', 'remove-brick', name, 'replica', replicas]
- args.extend(removed_bricks)
- if force:
- args.append('force')
- else:
- module.fail_json(msg="Force option is mandatory")
- run_gluster(args)
-
-
-def do_rebalance(name):
- run_gluster(['volume', 'rebalance', name, 'start'])
-
-
-def enable_quota(name):
- run_gluster(['volume', 'quota', name, 'enable'])
-
-
-def set_quota(name, directory, value):
- run_gluster(['volume', 'quota', name, 'limit-usage', directory, value])
-
-
-def main():
- # MAIN
-
- global module
- module = AnsibleModule(
- argument_spec=dict(
- name=dict(type='str', required=True, aliases=['volume']),
- state=dict(type='str', required=True, choices=['absent', 'started', 'stopped', 'present']),
- cluster=dict(type='list'),
- host=dict(type='str'),
- stripes=dict(type='int'),
- replicas=dict(type='int'),
- arbiters=dict(type='int'),
- disperses=dict(type='int'),
- redundancies=dict(type='int'),
- transport=dict(type='str', default='tcp', choices=['tcp', 'rdma', 'tcp,rdma']),
- bricks=dict(type='str', aliases=['brick']),
- start_on_create=dict(type='bool', default=True),
- rebalance=dict(type='bool', default=False),
- options=dict(type='dict', default={}),
- quota=dict(type='str'),
- directory=dict(type='str'),
- force=dict(type='bool', default=False),
- ),
- )
-
- global glusterbin
- glusterbin = module.get_bin_path('gluster', True)
-
- changed = False
-
- action = module.params['state']
- volume_name = module.params['name']
- cluster = module.params['cluster']
- brick_paths = module.params['bricks']
- stripes = module.params['stripes']
- replicas = module.params['replicas']
- arbiters = module.params['arbiters']
- disperses = module.params['disperses']
- redundancies = module.params['redundancies']
- transport = module.params['transport']
- myhostname = module.params['host']
- start_on_create = module.boolean(module.params['start_on_create'])
- rebalance = module.boolean(module.params['rebalance'])
- force = module.boolean(module.params['force'])
-
- if not myhostname:
- myhostname = socket.gethostname()
-
- # Clean up if last element is empty. Consider that yml can look like this:
- # cluster="{% for host in groups['glusterfs'] %}{{ hostvars[host]['private_ip'] }},{% endfor %}"
- if cluster is not None and len(cluster) > 1 and cluster[-1] == '':
- cluster = cluster[0:-1]
-
- if cluster is None:
- cluster = []
-
- if brick_paths is not None and "," in brick_paths:
- brick_paths = brick_paths.split(",")
- else:
- brick_paths = [brick_paths]
-
- options = module.params['options']
- quota = module.params['quota']
- directory = module.params['directory']
-
- # get current state info
- peers = get_peers()
- volumes = get_volumes()
- quotas = {}
- if volume_name in volumes and volumes[volume_name]['quota'] and volumes[volume_name]['status'].lower() == 'started':
- quotas = get_quotas(volume_name, True)
-
- # do the work!
- if action == 'absent':
- if volume_name in volumes:
- if volumes[volume_name]['status'].lower() != 'stopped':
- stop_volume(volume_name)
- run_gluster(['volume', 'delete', volume_name])
- changed = True
-
- if action == 'present':
- probe_all_peers(cluster, peers, myhostname)
-
- # create if it doesn't exist
- if volume_name not in volumes:
- create_volume(volume_name, stripes, replicas, arbiters, disperses, redundancies, transport, cluster, brick_paths, force)
- volumes = get_volumes()
- changed = True
-
- if volume_name in volumes:
- # set options
- for option in options.keys():
- if option not in volumes[volume_name]['options'] or volumes[volume_name]['options'][option] != options[option]:
- set_volume_option(volume_name, option, options[option])
- changed = True
-
- if volumes[volume_name]['status'].lower() != 'started' and start_on_create:
- start_volume(volume_name)
- changed = True
-
- # switch bricks
- new_bricks = []
- removed_bricks = []
- all_bricks = []
- bricks_in_volume = volumes[volume_name]['bricks']
-
- for node in cluster:
- for brick_path in brick_paths:
- brick = '%s:%s' % (node, brick_path)
- all_bricks.append(brick)
- if brick not in bricks_in_volume:
- new_bricks.append(brick)
-
- if not new_bricks and len(all_bricks) > 0 and \
- len(all_bricks) < len(bricks_in_volume):
- for brick in bricks_in_volume:
- if brick not in all_bricks:
- removed_bricks.append(brick)
-
- if new_bricks:
- add_bricks(volume_name, new_bricks, stripes, replicas, force)
- changed = True
-
- if removed_bricks:
- if replicas and int(replicas) < int(volumes[volume_name]['replicas']):
- reduce_config(volume_name, removed_bricks, str(replicas), force)
- else:
- remove_bricks(volume_name, removed_bricks, force)
- changed = True
-
- # handle quotas
- if quota:
- if not volumes[volume_name]['quota']:
- enable_quota(volume_name)
- quotas = get_quotas(volume_name, False)
- if directory not in quotas or quotas[directory] != quota:
- set_quota(volume_name, directory, quota)
- changed = True
-
- else:
- module.fail_json(msg='failed to create volume %s' % volume_name)
-
- if action != 'absent' and volume_name not in volumes:
- module.fail_json(msg='volume not found %s' % volume_name)
-
- if action == 'started':
- if volumes[volume_name]['status'].lower() != 'started':
- start_volume(volume_name)
- changed = True
-
- if action == 'stopped':
- if volumes[volume_name]['status'].lower() != 'stopped':
- stop_volume(volume_name)
- changed = True
-
- if changed:
- volumes = get_volumes()
- if rebalance:
- do_rebalance(volume_name)
-
- facts = {}
- facts['glusterfs'] = {'peers': peers, 'volumes': volumes, 'quotas': quotas}
-
- module.exit_json(changed=changed, ansible_facts=facts)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/gluster/gluster/tests/sanity/ignore-2.10.txt b/ansible_collections/gluster/gluster/tests/sanity/ignore-2.10.txt
deleted file mode 100644
index 504540c84..000000000
--- a/ansible_collections/gluster/gluster/tests/sanity/ignore-2.10.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-plugins/modules/gluster_peer.py validate-modules:doc-required-mismatch
-plugins/modules/gluster_peer.py validate-modules:parameter-list-no-elements
-plugins/modules/gluster_volume.py validate-modules:parameter-list-no-elements
-plugins/modules/gluster_heal_info.py pylint:ansible-deprecated-no-collection-name
diff --git a/ansible_collections/gluster/gluster/tests/sanity/ignore-2.11.txt b/ansible_collections/gluster/gluster/tests/sanity/ignore-2.11.txt
deleted file mode 100644
index 504540c84..000000000
--- a/ansible_collections/gluster/gluster/tests/sanity/ignore-2.11.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-plugins/modules/gluster_peer.py validate-modules:doc-required-mismatch
-plugins/modules/gluster_peer.py validate-modules:parameter-list-no-elements
-plugins/modules/gluster_volume.py validate-modules:parameter-list-no-elements
-plugins/modules/gluster_heal_info.py pylint:ansible-deprecated-no-collection-name
diff --git a/ansible_collections/grafana/grafana/.github/workflows/loki-molecule.yml b/ansible_collections/grafana/grafana/.github/workflows/loki-molecule.yml
new file mode 100644
index 000000000..8d8da57ff
--- /dev/null
+++ b/ansible_collections/grafana/grafana/.github/workflows/loki-molecule.yml
@@ -0,0 +1,44 @@
+---
+name: Loki Molecule
+
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+ branches:
+ - main
+
+defaults:
+ run:
+ working-directory: roles/loki
+
+jobs:
+ molecule:
+ name: Molecule
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ distro:
+ - rockylinux9
+ - ubuntu2204
+ - debian12
+
+ steps:
+ - name: Check out the codebase.
+ uses: actions/checkout@v4
+
+ - name: Set up Python 3.
+ uses: actions/setup-python@v5
+ with:
+ python-version: '3.x'
+
+ - name: Install test dependencies.
+ run: pip3 install ansible molecule molecule-plugins[docker] docker
+
+ - name: Run Molecule tests.
+ run: molecule test
+ env:
+ PY_COLORS: '1'
+ ANSIBLE_FORCE_COLOR: '1'
+ MOLECULE_DISTRO: ${{ matrix.distro }}
diff --git a/ansible_collections/grafana/grafana/.github/workflows/mimir-molecule.yml b/ansible_collections/grafana/grafana/.github/workflows/mimir-molecule.yml
new file mode 100644
index 000000000..b9d1a083d
--- /dev/null
+++ b/ansible_collections/grafana/grafana/.github/workflows/mimir-molecule.yml
@@ -0,0 +1,51 @@
+---
+name: Mimir Molecule
+
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+ branches:
+ - main
+
+defaults:
+ run:
+ working-directory: roles/mimir
+
+jobs:
+ molecule:
+ name: Molecule
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ distro:
+ - rockylinux9
+ - rockylinux8
+ - ubuntu2204
+ - debian12
+
+ steps:
+ - name: Check out the codebase.
+ uses: actions/checkout@v4
+
+ - name: Set up Python 3.
+ uses: actions/setup-python@v5
+ with:
+ python-version: '3.x'
+
+ - name: Install test dependencies.
+ run: pip3 install molecule molecule-plugins[docker] docker pytest-testinfra jmespath selinux passlib
+
+ - name: create docker network
+ run: docker network create molecule
+
+ - name: Start s3 backend
+ run: docker run -d -p 9000:9000 -p 9001:9001 --name minio-mimir --network molecule -e "MINIO_ROOT_USER=testtest" -e "MINIO_ROOT_PASSWORD=testtest" -e "MINIO_DEFAULT_BUCKETS=mimir" bitnami/minio:latest
+
+ - name: Run Molecule tests.
+ run: molecule test
+ env:
+ PY_COLORS: '1'
+ ANSIBLE_FORCE_COLOR: '1'
+ MOLECULE_DISTRO: ${{ matrix.distro }}
diff --git a/ansible_collections/grafana/grafana/.github/workflows/promtail-molecule.yml b/ansible_collections/grafana/grafana/.github/workflows/promtail-molecule.yml
new file mode 100644
index 000000000..e8168b454
--- /dev/null
+++ b/ansible_collections/grafana/grafana/.github/workflows/promtail-molecule.yml
@@ -0,0 +1,44 @@
+---
+name: Promtail Molecule
+
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+ branches:
+ - main
+
+defaults:
+ run:
+ working-directory: roles/promtail
+
+jobs:
+ molecule:
+ name: Molecule
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ distro:
+ - rockylinux9
+ - ubuntu2204
+ - debian12
+
+ steps:
+ - name: Check out the codebase.
+ uses: actions/checkout@v4
+
+ - name: Set up Python 3.
+ uses: actions/setup-python@v5
+ with:
+ python-version: '3.x'
+
+ - name: Install test dependencies.
+ run: pip3 install ansible molecule molecule-plugins[docker] docker
+
+ - name: Run Molecule tests.
+ run: molecule test
+ env:
+ PY_COLORS: '1'
+ ANSIBLE_FORCE_COLOR: '1'
+ MOLECULE_DISTRO: ${{ matrix.distro }}
diff --git a/ansible_collections/grafana/grafana/.gitignore b/ansible_collections/grafana/grafana/.gitignore
index fb34ac8df..9d1b5557d 100644
--- a/ansible_collections/grafana/grafana/.gitignore
+++ b/ansible_collections/grafana/grafana/.gitignore
@@ -5,6 +5,7 @@
.idea
hosts
*.log
+yala
# MacOS
# ---------------------------------------------------
diff --git a/ansible_collections/grafana/grafana/CHANGELOG.rst b/ansible_collections/grafana/grafana/CHANGELOG.rst
index eabc0c278..e1d9762c8 100644
--- a/ansible_collections/grafana/grafana/CHANGELOG.rst
+++ b/ansible_collections/grafana/grafana/CHANGELOG.rst
@@ -4,6 +4,69 @@ Grafana.Grafana Release Notes
.. contents:: Topics
+v5.2.0
+======
+
+Major Changes
+-------------
+
+- Bump ansible-lint from 24.2.2 to 24.2.3 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/195
+- Add promtail role by @voidquark in https://github.com/grafana/grafana-ansible-collection/pull/197
+- Add a new config part to configure KeyCloak based auth by @he0s in https://github.com/grafana/grafana-ansible-collection/pull/191
+
+v5.1.0
+======
+
+Major Changes
+-------------
+
+- fix: Uninstall Step for Loki and Mimir by @voidquark in https://github.com/grafana/grafana-ansible-collection/pull/193
+
+v5.0.0
+======
+
+Major Changes
+-------------
+
+- Add Grafana Mimir role by @GVengelen in https://github.com/grafana/grafana-ansible-collection/pull/183
+- Add Grafana Loki role by @voidquark in https://github.com/grafana/grafana-ansible-collection/pull/188
+
+v4.0.0
+======
+
+Major Changes
+-------------
+
+- Add an Ansible role for Grafana Alloy by @ishanjainn in https://github.com/grafana/grafana-ansible-collection/pull/169
+
+Minor Changes
+-------------
+
+- Bump ansible-lint from 24.2.0 to 24.2.1 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/164
+- Update description to match module by @brmurphy in https://github.com/grafana/grafana-ansible-collection/pull/179
+- Clarify grafana-server configuration in README by @VGerris in https://github.com/grafana/grafana-ansible-collection/pull/177
+- Bump ansible-lint from 24.2.0 to 24.2.1 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/168
+- Bump black from 24.1.1 to 24.3.0 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/165
+- fix: Apply correct uid + gid for imported dashboards by @hypery2k in https://github.com/grafana/grafana-ansible-collection/pull/167
+
+v3.0.0
+======
+
+Major Changes
+-------------
+
+- Add an Ansible role for OpenTelemetry Collector by @ishanjainn in https://github.com/grafana/grafana-ansible-collection/pull/138
+
+Minor Changes
+-------------
+
+- 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.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
+- ExecStartPre and EnvironmentFile settings to system unit file by @fabiiw05 in https://github.com/grafana/grafana-ansible-collection/pull/157
+- datasources url parameter fix by @dergudzon in https://github.com/grafana/grafana-ansible-collection/pull/162
v2.2.5
======
diff --git a/ansible_collections/grafana/grafana/CODEOWNERS b/ansible_collections/grafana/grafana/CODEOWNERS
index 654eb1a6d..9be7737ac 100644
--- a/ansible_collections/grafana/grafana/CODEOWNERS
+++ b/ansible_collections/grafana/grafana/CODEOWNERS
@@ -1,3 +1,8 @@
-./ @ishanjainn
-/roles/grafana @gardar @ishanjainn
-/roles/grafana_agent @ishanjainn @v-zhuravlev
+./ @ishanjainn
+/roles/grafana @gardar @ishanjainn
+/roles/grafana_agent @ishanjainn @v-zhuravlev @gardar
+/roles/alloy @ishanjainn @v-zhuravlev @gardar
+/roles/opentelemetry_collector @ishanjainn
+/roles/loki @voidquark @ishanjainn
+/roles/mimir @GVengelen @gardar @ishanjainn
+/roles/promtail @voidquark @ishanjainn
diff --git a/ansible_collections/grafana/grafana/FILES.json b/ansible_collections/grafana/grafana/FILES.json
index caf8f3754..6e5f1ad3b 100644
--- a/ansible_collections/grafana/grafana/FILES.json
+++ b/ansible_collections/grafana/grafana/FILES.json
@@ -123,7 +123,7 @@
"name": "requirements.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "04fac92121706aa4e4940bb95d9fc7f508b729dadcd46afe13f54ec59a32e6c8",
+ "chksum_sha256": "a135d423a3b683d3448f933e0ac4981cb9b53413fe13962dcef9d3cc15af5c4a",
"format": 1
},
{
@@ -193,7 +193,7 @@
"name": "plugins/modules/cloud_plugin.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "34d3f84453ad0517b14a96720e2f644f5b3aaf7f8b094b83cc1bdf96e6715c50",
+ "chksum_sha256": "4e0a0050d5a9fb36a6d01678885786c1e15256bb31c95454d8c416823e616329",
"format": 1
},
{
@@ -214,7 +214,7 @@
"name": "CODEOWNERS",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bb2590977547e3e484039e55ec54510f37ecfaaa116e84d0389745c40411b53c",
+ "chksum_sha256": "986e044c4d35ce128fa8a09215bf790e75dd25f30f65651e198dd03e1543a6f6",
"format": 1
},
{
@@ -491,6 +491,601 @@
"format": 1
},
{
+ "name": "roles/loki",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/loki/vars",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/loki/vars/RedHat.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "571483e0efd8184068b5d00a99204389e56f71238ff854a09bdf15da8aa4e5eb",
+ "format": 1
+ },
+ {
+ "name": "roles/loki/vars/Debian.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9eb9c367012b2fbd64ea3143bec602b78874bd0af144986acfd16499e712bc2c",
+ "format": 1
+ },
+ {
+ "name": "roles/loki/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/loki/tasks/uninstall.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e2aa7831cf7a87e7e90da0f2917a9996da8709a9c72e78cee9aa5ba06745fed0",
+ "format": 1
+ },
+ {
+ "name": "roles/loki/tasks/deploy.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "89b7e39628bd3c0f4837b49f5537f122dd9b3dcb818e2b706611d4c08b1564db",
+ "format": 1
+ },
+ {
+ "name": "roles/loki/tasks/setup-Debian.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b9d4bc07b290530bf5e61ac0abb65480f6dd276d3495517515aa6f71d1d81797",
+ "format": 1
+ },
+ {
+ "name": "roles/loki/tasks/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "70ab2022eef36d69f436156bc4e3dcd99e8ac512840f82206e2c80e3d6789740",
+ "format": 1
+ },
+ {
+ "name": "roles/loki/tasks/setup-RedHat.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1fade302a0c20ed1a816a7138263f0f63188b4f57f8a7dc25f68e883649d59c9",
+ "format": 1
+ },
+ {
+ "name": "roles/loki/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/loki/meta/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a9533d3d849adf6bb82558951ee09fed8c9476b12a18a75943e759a5dc8eb073",
+ "format": 1
+ },
+ {
+ "name": "roles/loki/README.md",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e96e01c9b79dd357ccee0e2afd72696795be591efc5c0a73990c2708e98956dd",
+ "format": 1
+ },
+ {
+ "name": "roles/loki/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/loki/defaults/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a291bd5f052e09b2af3d529f289bcfd5e9dd642bf1d79f7ea4f46711ecf09395",
+ "format": 1
+ },
+ {
+ "name": "roles/loki/templates",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/loki/templates/rules.yml.j2",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "524a654736d43d183f035daa7868594f428775a1aad7790fd970406ed44a7b64",
+ "format": 1
+ },
+ {
+ "name": "roles/loki/templates/config.yml.j2",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "924a8ba896ae407b88cca46e193cd0a70b3ce1c6226782d4a96dafa8c07395f5",
+ "format": 1
+ },
+ {
+ "name": "roles/loki/molecule",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/loki/molecule/default",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/loki/molecule/default/molecule.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f2fb19d8e5973db9cd226780c4ecf9ae5947286626de40224c1228a6463b1114",
+ "format": 1
+ },
+ {
+ "name": "roles/loki/molecule/default/converge.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b95320fa1dc8f93e4033f5d71f9334aef2148629837022bac6364e3e27078cdb",
+ "format": 1
+ },
+ {
+ "name": "roles/loki/handlers",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/loki/handlers/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2e53e9a9e23870436798981a928f54258315a5be3de89b2fa15aa2ce29c379bb",
+ "format": 1
+ },
+ {
+ "name": "roles/opentelemetry_collector",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/opentelemetry_collector/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/opentelemetry_collector/tasks/configure.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "619bbe9568d9bfe491cc6cbd81482ae470f7a22d2b4360b14f1bf6d47184fa19",
+ "format": 1
+ },
+ {
+ "name": "roles/opentelemetry_collector/tasks/service.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2bec7253fcd6133706e90c0a51197464d6f51f1a22db977f327bdf9b0d3c18cc",
+ "format": 1
+ },
+ {
+ "name": "roles/opentelemetry_collector/tasks/install.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b7495233c70957ab9c9e55964545eac9825ef298b25391daeb72e2559992998a",
+ "format": 1
+ },
+ {
+ "name": "roles/opentelemetry_collector/tasks/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "bfcb34af928fe8e68f24db9957bc22baf9979b2c4402de34b93a19f8b06397e0",
+ "format": 1
+ },
+ {
+ "name": "roles/opentelemetry_collector/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/opentelemetry_collector/meta/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "de3d17460f2f7473558ee9747f18246f51a1603699c4925e51401c625ab59307",
+ "format": 1
+ },
+ {
+ "name": "roles/opentelemetry_collector/README.md",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4dc3f6680b1ebe07bb9fa20ae4327746f3768e010078789d1aab807a72869510",
+ "format": 1
+ },
+ {
+ "name": "roles/opentelemetry_collector/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/opentelemetry_collector/defaults/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d9dd74d1bb76f5536908d543ef9dfac40ab6afe33f6cfaa30b656b4f69b44d6f",
+ "format": 1
+ },
+ {
+ "name": "roles/opentelemetry_collector/templates",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/opentelemetry_collector/templates/otel_collector.service.j2",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "bb0d68adc92d851b3c6b5173b5c7896a83a4d005ff87b21aace45397378b39d2",
+ "format": 1
+ },
+ {
+ "name": "roles/opentelemetry_collector/templates/otel_collector_config.yml.j2",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "25bfc9deadd0a49a3fa1ce78f299ddc78219b60ca1be90693ed5a211c7f16ef3",
+ "format": 1
+ },
+ {
+ "name": "roles/opentelemetry_collector/handlers",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/opentelemetry_collector/handlers/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3273a098e9e8605c20fe645e533c2a4f4609227340e601914e7119958652c6dd",
+ "format": 1
+ },
+ {
+ "name": "roles/mimir",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/mimir/vars",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/mimir/vars/.gitkeep",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "roles/mimir/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/mimir/tasks/uninstall.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5c5973ac49f202c081a633ccac9cec1cc183811ce49b9a36bbb78c7c9ba25566",
+ "format": 1
+ },
+ {
+ "name": "roles/mimir/tasks/deploy.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2f3ff4d136fdd91b02d9112b916b9d11289c9d0522657bb88b1df133dd3b5c09",
+ "format": 1
+ },
+ {
+ "name": "roles/mimir/tasks/setup-Debian.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "eff282795fb43bda8db141d0ff6e9bf35e90ed703d51ba913cc445043cffe962",
+ "format": 1
+ },
+ {
+ "name": "roles/mimir/tasks/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "51bbda2ef2ae0c26150564b47eb70a6d26f6ec9d3dd3cb6f20d423bc6bc86663",
+ "format": 1
+ },
+ {
+ "name": "roles/mimir/tasks/setup-Redhat.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "03fcced9ddeccdffe4ddb3ed2f9d48fb857aa7b7273d5992fb8369a3c5213171",
+ "format": 1
+ },
+ {
+ "name": "roles/mimir/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/mimir/meta/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "222aacd94d53179d52908ed830973bf2629f4a6e0e1d1ee49f159162dfee6fdd",
+ "format": 1
+ },
+ {
+ "name": "roles/mimir/README.md",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "396d5124b5915a5c3990e9fab2e1e5f0d931b5f4d9eac52579826ea18e1c38b7",
+ "format": 1
+ },
+ {
+ "name": "roles/mimir/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/mimir/defaults/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "92d2fb56874a19ffa7b52547f253231f9cc5ec90e2302ab5d4f6363b37119311",
+ "format": 1
+ },
+ {
+ "name": "roles/mimir/files",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/mimir/files/.gitkeep",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "roles/mimir/templates",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/mimir/templates/.gitkeep",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "roles/mimir/templates/config.yml.j2",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "dff106fed815d12d0b30ba1a086b7e3bbe99dd5d8a5390a65cd8b5b75b07a8b1",
+ "format": 1
+ },
+ {
+ "name": "roles/mimir/molecule",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/mimir/molecule/test-requirements.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "bd70637dd6307a21c6084e83828c1ae13ac7818001bb9cffef2f8c0ea4e18b7b",
+ "format": 1
+ },
+ {
+ "name": "roles/mimir/molecule/default",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/mimir/molecule/default/molecule.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "87e569bbddb1f1f702c5dc3fc9e580e48aa7a0eb262e8027cdf130da01bf13d9",
+ "format": 1
+ },
+ {
+ "name": "roles/mimir/molecule/default/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/mimir/molecule/default/tests/test_default.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2b956a72585ad5b7caa162e3078db1af7ee33d266cd9890f87057875ea9746f1",
+ "format": 1
+ },
+ {
+ "name": "roles/mimir/molecule/default/converge.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "08280357d62d228a056fcf031d2dca1675c2a38aa090567838c5d812f572854c",
+ "format": 1
+ },
+ {
+ "name": "roles/mimir/handlers",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/mimir/handlers/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a49c94f2932683da280c81f687145642fdaa4681e073ed9dbca4630ce5d3e70f",
+ "format": 1
+ },
+ {
+ "name": "roles/alloy",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/alloy/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/alloy/tasks/configure.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8533c2217f66b233533a970cd94cee4ac72411d550c35a1f1b6f963833140e03",
+ "format": 1
+ },
+ {
+ "name": "roles/alloy/tasks/service.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "af0b984475cef3f6663cafac98b32af8cfa87c1f23e13acb7e82b6fe76db9f30",
+ "format": 1
+ },
+ {
+ "name": "roles/alloy/tasks/install.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c8f6ba8e76b7e087814d29ebb8765cf49f528474ebcbe7be01d31de6f148ec6d",
+ "format": 1
+ },
+ {
+ "name": "roles/alloy/tasks/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "211284ee8181596f4cb399acf1e5acc5f323bc773efd0d07341f215da2eb7cb5",
+ "format": 1
+ },
+ {
+ "name": "roles/alloy/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/alloy/meta/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "eb51ee424adea159dc179cfd8610c228699a156e6ea54349035b9ce6b241bb78",
+ "format": 1
+ },
+ {
+ "name": "roles/alloy/README.md",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e9551cd53274a9c69b560c33e0fe479dc3b16cae553e239929cd9f1894496520",
+ "format": 1
+ },
+ {
+ "name": "roles/alloy/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/alloy/defaults/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a90e9320a16c18619799abbc8d360d2647d64641952e0906fc6bf966daa90b37",
+ "format": 1
+ },
+ {
+ "name": "roles/alloy/templates",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/alloy/templates/config.alloy.j2",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8a08f43b75d655defb0d08884e978804c50847036b6b4bbffb60ed6aed713e15",
+ "format": 1
+ },
+ {
+ "name": "roles/alloy/templates/environment.j2",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d8956bc6bdf490ae8c45ee43d2d8e683c1c9fcfcf815ca73656e6471ad964174",
+ "format": 1
+ },
+ {
+ "name": "roles/alloy/templates/alloy.service.j2",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "430a7824bf2157fcf6f3a6c8881004f042c5470cedc840f68befcbfdd5ad023a",
+ "format": 1
+ },
+ {
+ "name": "roles/alloy/handlers",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/alloy/handlers/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "de56a3f9f68af4296a59391d0171bcdc448511fdf2a6d626c0fa50d3294f0395",
+ "format": 1
+ },
+ {
"name": "roles/grafana_agent",
"ftype": "dir",
"chksum_type": null,
@@ -641,7 +1236,7 @@
"name": "roles/grafana_agent/README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f39efa315d0c1af1d87514936636e71ad15156effd4b14a4ed78bf37d2e514b8",
+ "chksum_sha256": "db482b9928a877cd5622797a030a67f964f1dc3bc9a6d56291e16523c0260f90",
"format": 1
},
{
@@ -655,7 +1250,7 @@
"name": "roles/grafana_agent/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ce5ef24967abddc425039e9fb4ff9bc49bdfaba4c9c046738d27a63675c6f3ad",
+ "chksum_sha256": "8ae44ab181bd1825f041ec8d4048e21708d142965068ecb883793b5b696549ff",
"format": 1
},
{
@@ -683,7 +1278,7 @@
"name": "roles/grafana_agent/templates/grafana-agent.service.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "239c89d903d7df2d931969e783e84ee17184edf659d170c5cba727d907d9cfca",
+ "chksum_sha256": "13e5dc455a1311ef9f11fb8aeeb2c2c7d990935a51cd267c7d532ddaa6a7c10a",
"format": 1
},
{
@@ -701,6 +1296,188 @@
"format": 1
},
{
+ "name": "roles/promtail",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/promtail/vars",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/promtail/vars/RedHat.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "db5d56985245d8ea6ccb5a9764db98fb9691534c093fdbb48a8f408d27c482e8",
+ "format": 1
+ },
+ {
+ "name": "roles/promtail/vars/Debian.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "683d64b1d28f4f665a1409d9a10aa448e79f93569e4546f402596b8f5074bb9a",
+ "format": 1
+ },
+ {
+ "name": "roles/promtail/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/promtail/tasks/uninstall.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "10ee65ba2bc07067ad2dab3cd4d2ca1c61a683f2bea5d443083c8bb864c31f09",
+ "format": 1
+ },
+ {
+ "name": "roles/promtail/tasks/deploy.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0623db97f5a4b50a0c5e478380bcca4d9094aa9fe96fdfc8d1685f8948c7a2a5",
+ "format": 1
+ },
+ {
+ "name": "roles/promtail/tasks/setup-Debian.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c7e439a199b159b97cd8ea220a69ad225fcb1e9f5745a53b7dc9cc33b016b113",
+ "format": 1
+ },
+ {
+ "name": "roles/promtail/tasks/acl_configuration.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9c6917d51e9f3b5483a3d0395f286f80921952e07fc618141d4fd7c5862fb810",
+ "format": 1
+ },
+ {
+ "name": "roles/promtail/tasks/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b9255ea59f9f95d8397c3460c144b431c13fb2015a405ced7839adc207386ec1",
+ "format": 1
+ },
+ {
+ "name": "roles/promtail/tasks/setup-RedHat.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c3085dc8e0679de7c6e59b4213f8658f5f6ca2df15009497ff7fdc93a709a661",
+ "format": 1
+ },
+ {
+ "name": "roles/promtail/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/promtail/meta/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f554dff3877cb2ff20aa904cd7673960b2a6020542545990d40be2e50d9119a6",
+ "format": 1
+ },
+ {
+ "name": "roles/promtail/README.md",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d0bbd073c5c3f4c07bc3d91225565a29519232ebc3a5f5f0d58f36727dcabee9",
+ "format": 1
+ },
+ {
+ "name": "roles/promtail/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/promtail/defaults/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d18557b1514828f4bd5655c0f0b7edc860976a408d7dcf0c75c8d2308db4025c",
+ "format": 1
+ },
+ {
+ "name": "roles/promtail/templates",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/promtail/templates/promtail.service.j2",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4f60e5896fdf7423c18ad756be65dd579c2de67e1a6ba65087732e36022705f5",
+ "format": 1
+ },
+ {
+ "name": "roles/promtail/templates/config.yml.j2",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7a60b181374ac3404f41dd2c81fba86f95d007db5980fb5416d0939e311a5b10",
+ "format": 1
+ },
+ {
+ "name": "roles/promtail/templates/promtail_acl.j2",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a337a0e3744d0482abf95ee2100a97c457c06fda93a0104f909c8aa366035580",
+ "format": 1
+ },
+ {
+ "name": "roles/promtail/molecule",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/promtail/molecule/default",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/promtail/molecule/default/molecule.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f2fb19d8e5973db9cd226780c4ecf9ae5947286626de40224c1228a6463b1114",
+ "format": 1
+ },
+ {
+ "name": "roles/promtail/molecule/default/converge.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "10c9a514befc870545238b9f4b79ef344d6e0903c728c2cfbf8b5df7f43911d6",
+ "format": 1
+ },
+ {
+ "name": "roles/promtail/handlers",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/promtail/handlers/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b847d2d889b4579a7990dca5ddf6ed8cd8e2686f4d7cd6fce68ec2cfa7683287",
+ "format": 1
+ },
+ {
"name": "roles/grafana",
"ftype": "dir",
"chksum_type": null,
@@ -753,7 +1530,7 @@
"name": "roles/grafana/tasks/preflight.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5448f51232dfd1aac920ccc6e6c873c44702ee558b6b5ed1a5e0f7ff2331c820",
+ "chksum_sha256": "5fbef6a34f1edb47ecaf806d00395fb1be2f9546901e832885c9f019ff08dc05",
"format": 1
},
{
@@ -767,7 +1544,7 @@
"name": "roles/grafana/tasks/dashboards.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9ed4293bc3bb37072a64a333c3bc8ded3f2fd1d72b993581d3a4a6b3334eff74",
+ "chksum_sha256": "85fb407ca2c9921343617debdd439a733bdea188df3b973019a2d616449a13ce",
"format": 1
},
{
@@ -795,7 +1572,7 @@
"name": "roles/grafana/tasks/datasources.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ad5d5a6a8d25c980b1961e6bf3fc54d7545fc8d420642381341c91bf7085a26f",
+ "chksum_sha256": "341a5026400f862da67a598712171bb0f17020c53abd8256ebbba59dd5c4d3ff",
"format": 1
},
{
@@ -830,14 +1607,14 @@
"name": "roles/grafana/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b74a99dba66c4a559a3a0c1fe555e3a5fb45ae036d89f5fa772b4b9978d8004d",
+ "chksum_sha256": "5d423f87d9e19d5e6891f793447b323055110a24390a884e98b8b2175515b08f",
"format": 1
},
{
"name": "roles/grafana/README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e60db326c70efc1cddd791edbe2e717922b4b65d10a71c126e02a8dbf4933140",
+ "chksum_sha256": "6f06c44a1022f5155cd8ba5ed8ed5e3b463a3c1cf9aa2dc7be73f1a137ad4ec2",
"format": 1
},
{
@@ -851,7 +1628,7 @@
"name": "roles/grafana/defaults/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2f0b3a3a16323f48435a725a1d286c1fbd5008a3d6ad18e15d2c7004feb44b1e",
+ "chksum_sha256": "0167eb975ca949b2b9df5ec120f97d311fce1c3326d886869a89702d9b7153a9",
"format": 1
},
{
@@ -865,7 +1642,7 @@
"name": "roles/grafana/templates/grafana.ini.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2dcef2a5205dd9b7d6b1a4c025e17a0827815b7b239cd63deec4ebeb24fc8745",
+ "chksum_sha256": "644b22b7601859a027f82f919d5d67911e08c903f7fcac167de06a32a7bb4c21",
"format": 1
},
{
@@ -998,28 +1775,28 @@
"name": "changelogs/.plugin-cache.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "74da9ff1ab4154c38a7d91b8c3aa985e70c59709efa8832f7325dc0530483da2",
+ "chksum_sha256": "57b26de76fb2f40aa7c75107a8100d182e670af65e61aa41bcd898ab3c49b756",
"format": 1
},
{
"name": "changelogs/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "200b1a4250b4551f9ec3e9e4409a4818f8d82be69875f4a8b44cff47741a6cf8",
+ "chksum_sha256": "c161fd35bc25041c9f64122ce2ff06d23f8c7d83cfefa8e439bbeadeaf8aa0a2",
"format": 1
},
{
"name": "README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "58ab38c25312c0f6e89abd7ea7e99341806c0d7b9629a6b50fba7f31dfa1dd19",
+ "chksum_sha256": "cdb531cc97972ef31ab06917f2d79a37bbecf594696575c7ad21fe575a80315b",
"format": 1
},
{
"name": "Pipfile",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b812b6255a910c789bb830ada81e1af0f6a9c0c1d715f753b3224c03c63133a0",
+ "chksum_sha256": "1450eae074679953056cddca4ffa876be099f5767891d21bac5122ca80b0e6e2",
"format": 1
},
{
@@ -1040,7 +1817,7 @@
"name": ".gitignore",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d48f68dd16490e0613490dafff5d5284650fab7276c7117bbc6c726ee5b9b96f",
+ "chksum_sha256": "a09430ce7bbf9c75791cc3bee42e6f47187a40b99461beaec5c1185fbd1a16b0",
"format": 1
},
{
@@ -1058,6 +1835,27 @@
"format": 1
},
{
+ "name": "examples/monitor-multiple-instance-otel.md",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0b655cc01142478e478cbc266f376e718b8e209e59aac98a09bcde43bda3e09d",
+ "format": 1
+ },
+ {
+ "name": "examples/loki-local-filesystem-with-retention-and-alert.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8ccad2dcd5b8c5753135e2bbd6bcd32898e3ba44fb28b6f5160483cefa73cad8",
+ "format": 1
+ },
+ {
+ "name": "examples/loki-basic-no-options.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "66ca6d2b2ce29a6057c60041fe4b694d071752b74a90ef61dcde8faa5d1bc249",
+ "format": 1
+ },
+ {
"name": "examples/agent-basic-no-options.yaml",
"ftype": "file",
"chksum_type": "sha256",
@@ -1065,13 +1863,27 @@
"format": 1
},
{
- "name": "examples/monitor-multiple-instances.md",
+ "name": "examples/opentelemetry-collector.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0234500a96941f52701a0cdd7e852373507cb18d9113fa22cd36c30efdf2d18a",
+ "format": 1
+ },
+ {
+ "name": "examples/monitor-multiple-instances-agent.md",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "312db8918e6f1e22bd0a6a2aefad5f5db8c0ab9bb88562c883aa047614b7b701",
"format": 1
},
{
+ "name": "examples/mimir-3-hosts.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c4977212869d1d832c2a52de6ef4860349d0a1592e3e202965cb87e6f453f9a5",
+ "format": 1
+ },
+ {
"name": "examples/agent-send-to-grafana-cloud.yaml",
"ftype": "file",
"chksum_type": "sha256",
@@ -1086,6 +1898,20 @@
"format": 1
},
{
+ "name": "examples/alloy.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "02702560039862854cb704e6fd646a5fdb2f6214445fe2d0455a4cf56041903d",
+ "format": 1
+ },
+ {
+ "name": "examples/promtail-multiple-logs.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6fad8d05061f273414ca19ed9c671fc05a8e83ee74b1c0512f76da2dc0ccb8f0",
+ "format": 1
+ },
+ {
"name": "ansible.cfg",
"ftype": "file",
"chksum_type": "sha256",
@@ -1128,6 +1954,27 @@
"format": 1
},
{
+ "name": ".github/workflows/loki-molecule.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a02e6776151e0fd03cd754771d80e73e1470c7088d861b514d5a7dafd47ad6b8",
+ "format": 1
+ },
+ {
+ "name": ".github/workflows/mimir-molecule.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f0bd0193174f7d1413c900200bd12b87f833fa0c4feb4d4e788708a7675befb1",
+ "format": 1
+ },
+ {
+ "name": ".github/workflows/promtail-molecule.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b1179c60a308fb166a8ca3839fe7480db7143394f816cbc6089af5252ae74142",
+ "format": 1
+ },
+ {
"name": ".github/workflows/lint.yaml",
"ftype": "file",
"chksum_type": "sha256",
@@ -1152,7 +1999,7 @@
"name": "requirements.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9f11ec06a7a1d62821de4fe26c7f76e15694fb4bfee1ae2ed1d2db93e4803545",
+ "chksum_sha256": "85c5d41624847de7aa4a49e6d8060fc60e71af5a610b21e75cff8391494ce65c",
"format": 1
},
{
@@ -1166,14 +2013,14 @@
"name": "CHANGELOG.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "208e9649fa74320b42aea4fe7c32826a1e980b534adee8277d7cdb9767a5b4cb",
+ "chksum_sha256": "ef2ab62dbc562173e3f8744fcbd7ad43c8113175279a9fec3a87079c4196454b",
"format": 1
},
{
"name": "Pipfile.lock",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1c5742f0d83518089922a5d484029f21ae68612c4bfd55dfbc54be61150ef087",
+ "chksum_sha256": "e1f57b42ce8100b3f6f7ba6769bf1c8f137d4f2f5a505117e1f999e85e3cbdbb",
"format": 1
}
],
diff --git a/ansible_collections/grafana/grafana/MANIFEST.json b/ansible_collections/grafana/grafana/MANIFEST.json
index 4a9ec0eb1..79db7d745 100644
--- a/ansible_collections/grafana/grafana/MANIFEST.json
+++ b/ansible_collections/grafana/grafana/MANIFEST.json
@@ -2,10 +2,11 @@
"collection_info": {
"namespace": "grafana",
"name": "grafana",
- "version": "2.2.5",
+ "version": "5.2.0",
"authors": [
"Grafana Labs <grafana.com>",
- "Ishan Jain <ishan.jain@grafana.com>"
+ "Ishan Jain <ishan.jain@grafana.com>",
+ "Gerard van Engelen <g.vanengelen@codepeople.nl>"
],
"readme": "README.md",
"tags": [
@@ -28,7 +29,7 @@
"name": "FILES.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "efd45a0ccd368b6abc4faf1231e1a4cea2b606bd4f3220d4b8b899e3b2084aa7",
+ "chksum_sha256": "f2138d4c8cd1f89bb7d54619b2a069869c86adc4b00f08e2a07590c3576eaf0f",
"format": 1
},
"format": 1
diff --git a/ansible_collections/grafana/grafana/Pipfile b/ansible_collections/grafana/grafana/Pipfile
index 162940e72..99637e1e1 100644
--- a/ansible_collections/grafana/grafana/Pipfile
+++ b/ansible_collections/grafana/grafana/Pipfile
@@ -4,7 +4,7 @@ verify_ssl = true
name = "pypi"
[packages]
-yamllint = "==1.34.0"
+yamllint = "==1.35.1"
ansible-lint = ">=6.13.1,<25.0.0"
pylint = ">=2.16.2,<4.0.0"
diff --git a/ansible_collections/grafana/grafana/Pipfile.lock b/ansible_collections/grafana/grafana/Pipfile.lock
index c15343a37..704c72edc 100644
--- a/ansible_collections/grafana/grafana/Pipfile.lock
+++ b/ansible_collections/grafana/grafana/Pipfile.lock
@@ -1,7 +1,7 @@
{
"_meta": {
"hash": {
- "sha256": "126b8e64a6e5896b218c3d70b198f9a6d159bccb911f554b17295c4a74888223"
+ "sha256": "6a1528d3f70e2629822009c43b3b54d7e74aa1ac3873ec6700f3b2ca47ccb0bf"
},
"pipfile-spec": 6,
"requires": {
@@ -26,28 +26,28 @@
},
"ansible-core": {
"hashes": [
- "sha256:50c9f33a5b2ee645470a77f4bf99cf35d1ffdefef60388910020b0c58534bec1",
- "sha256:76a8765a8586064ef073a299562e308fa2c180a75b5f7569bbd0f61d4171cdb3"
+ "sha256:111e55d358c2297ec0ce03ba98e6c5ce95947fdf50d878215eb8c183d0c275e4",
+ "sha256:f9dea5044a86fd95cc27099f4f5c3ae9beb23acf7c3b6331455726c47825922b"
],
"markers": "python_version >= '3.10'",
- "version": "==2.16.3"
+ "version": "==2.16.6"
},
"ansible-lint": {
"hashes": [
- "sha256:6bc5d6273f33711ec6d370dfe5fdbe97a64b4c36c2a7a19a249401326eb03616",
- "sha256:755f369c6baf601b09c4931a4e6bd0df3d79c54eb519f093e5db6ab52ad03e0c"
+ "sha256:2ec67cc1719f56e63b1dfc3728d0c2c4142e531f4452f6ae31f618438d59469a",
+ "sha256:8aad0de454e0e803b0416a9c6e409302a8eb93c0f3866a98f035b96647e72213"
],
"index": "pypi",
"markers": "python_version >= '3.10'",
- "version": "==24.2.0"
+ "version": "==24.2.3"
},
"astroid": {
"hashes": [
- "sha256:4a61cf0a59097c7bb52689b0fd63717cd2a8a14dc9f1eee97b82d814881c8c91",
- "sha256:d6e62862355f60e716164082d6b4b041d38e2a8cf1c7cd953ded5108bac8ff5c"
+ "sha256:951798f922990137ac090c53af473db7ab4e70c770e6d7fae0cec59f74411819",
+ "sha256:ac248253bfa4bd924a0de213707e7ebeeb3138abeb48d798784ead1e56d419d4"
],
"markers": "python_full_version >= '3.8.0'",
- "version": "==3.0.2"
+ "version": "==3.1.0"
},
"attrs": {
"hashes": [
@@ -59,31 +59,31 @@
},
"black": {
"hashes": [
- "sha256:0269dfdea12442022e88043d2910429bed717b2d04523867a85dacce535916b8",
- "sha256:07204d078e25327aad9ed2c64790d681238686bce254c910de640c7cc4fc3aa6",
- "sha256:08b34e85170d368c37ca7bf81cf67ac863c9d1963b2c1780c39102187ec8dd62",
- "sha256:1a95915c98d6e32ca43809d46d932e2abc5f1f7d582ffbe65a5b4d1588af7445",
- "sha256:2588021038bd5ada078de606f2a804cadd0a3cc6a79cb3e9bb3a8bf581325a4c",
- "sha256:2fa6a0e965779c8f2afb286f9ef798df770ba2b6cee063c650b96adec22c056a",
- "sha256:34afe9da5056aa123b8bfda1664bfe6fb4e9c6f311d8e4a6eb089da9a9173bf9",
- "sha256:3897ae5a21ca132efa219c029cce5e6bfc9c3d34ed7e892113d199c0b1b444a2",
- "sha256:40657e1b78212d582a0edecafef133cf1dd02e6677f539b669db4746150d38f6",
- "sha256:48b5760dcbfe5cf97fd4fba23946681f3a81514c6ab8a45b50da67ac8fbc6c7b",
- "sha256:5242ecd9e990aeb995b6d03dc3b2d112d4a78f2083e5a8e86d566340ae80fec4",
- "sha256:5cdc2e2195212208fbcae579b931407c1fa9997584f0a415421748aeafff1168",
- "sha256:5d7b06ea8816cbd4becfe5f70accae953c53c0e53aa98730ceccb0395520ee5d",
- "sha256:7258c27115c1e3b5de9ac6c4f9957e3ee2c02c0b39222a24dc7aa03ba0e986f5",
- "sha256:854c06fb86fd854140f37fb24dbf10621f5dab9e3b0c29a690ba595e3d543024",
- "sha256:a21725862d0e855ae05da1dd25e3825ed712eaaccef6b03017fe0853a01aa45e",
- "sha256:a83fe522d9698d8f9a101b860b1ee154c1d25f8a82ceb807d319f085b2627c5b",
- "sha256:b3d64db762eae4a5ce04b6e3dd745dcca0fb9560eb931a5be97472e38652a161",
- "sha256:e298d588744efda02379521a19639ebcd314fba7a49be22136204d7ed1782717",
- "sha256:e2c8dfa14677f90d976f68e0c923947ae68fa3961d61ee30976c388adc0b02c8",
- "sha256:ecba2a15dfb2d97105be74bbfe5128bc5e9fa8477d8c46766505c1dda5883aac",
- "sha256:fc1ec9aa6f4d98d022101e015261c056ddebe3da6a8ccfc2c792cbe0349d48b7"
+ "sha256:257d724c2c9b1660f353b36c802ccece186a30accc7742c176d29c146df6e474",
+ "sha256:37aae07b029fa0174d39daf02748b379399b909652a806e5708199bd93899da1",
+ "sha256:415e686e87dbbe6f4cd5ef0fbf764af7b89f9057b97c908742b6008cc554b9c0",
+ "sha256:48a85f2cb5e6799a9ef05347b476cce6c182d6c71ee36925a6c194d074336ef8",
+ "sha256:7768a0dbf16a39aa5e9a3ded568bb545c8c2727396d063bbaf847df05b08cd96",
+ "sha256:7e122b1c4fb252fd85df3ca93578732b4749d9be076593076ef4d07a0233c3e1",
+ "sha256:88c57dc656038f1ab9f92b3eb5335ee9b021412feaa46330d5eba4e51fe49b04",
+ "sha256:8e537d281831ad0e71007dcdcbe50a71470b978c453fa41ce77186bbe0ed6021",
+ "sha256:98e123f1d5cfd42f886624d84464f7756f60ff6eab89ae845210631714f6db94",
+ "sha256:accf49e151c8ed2c0cdc528691838afd217c50412534e876a19270fea1e28e2d",
+ "sha256:b1530ae42e9d6d5b670a34db49a94115a64596bc77710b1d05e9801e62ca0a7c",
+ "sha256:b9176b9832e84308818a99a561e90aa479e73c523b3f77afd07913380ae2eab7",
+ "sha256:bdde6f877a18f24844e381d45e9947a49e97933573ac9d4345399be37621e26c",
+ "sha256:be8bef99eb46d5021bf053114442914baeb3649a89dc5f3a555c88737e5e98fc",
+ "sha256:bf10f7310db693bb62692609b397e8d67257c55f949abde4c67f9cc574492cc7",
+ "sha256:c872b53057f000085da66a19c55d68f6f8ddcac2642392ad3a355878406fbd4d",
+ "sha256:d36ed1124bb81b32f8614555b34cc4259c3fbc7eec17870e8ff8ded335b58d8c",
+ "sha256:da33a1a5e49c4122ccdfd56cd021ff1ebc4a1ec4e2d01594fef9b6f267a9e741",
+ "sha256:dd1b5a14e417189db4c7b64a6540f31730713d173f0b63e55fabd52d61d8fdce",
+ "sha256:e151054aa00bad1f4e1f04919542885f89f5f7d086b8a59e5000e6c616896ffb",
+ "sha256:eaea3008c281f1038edb473c1aa8ed8143a5535ff18f978a318f10302b254063",
+ "sha256:ef703f83fc32e131e9bcc0a5094cfe85599e7109f896fe8bc96cc402f3eb4b6e"
],
"markers": "python_version >= '3.8'",
- "version": "==24.1.1"
+ "version": "==24.4.2"
},
"bracex": {
"hashes": [
@@ -161,41 +161,41 @@
},
"cryptography": {
"hashes": [
- "sha256:087887e55e0b9c8724cf05361357875adb5c20dec27e5816b653492980d20380",
- "sha256:09a77e5b2e8ca732a19a90c5bca2d124621a1edb5438c5daa2d2738bfeb02589",
- "sha256:130c0f77022b2b9c99d8cebcdd834d81705f61c68e91ddd614ce74c657f8b3ea",
- "sha256:141e2aa5ba100d3788c0ad7919b288f89d1fe015878b9659b307c9ef867d3a65",
- "sha256:28cb2c41f131a5758d6ba6a0504150d644054fd9f3203a1e8e8d7ac3aea7f73a",
- "sha256:2f9f14185962e6a04ab32d1abe34eae8a9001569ee4edb64d2304bf0d65c53f3",
- "sha256:320948ab49883557a256eab46149df79435a22d2fefd6a66fe6946f1b9d9d008",
- "sha256:36d4b7c4be6411f58f60d9ce555a73df8406d484ba12a63549c88bd64f7967f1",
- "sha256:3b15c678f27d66d247132cbf13df2f75255627bcc9b6a570f7d2fd08e8c081d2",
- "sha256:3dbd37e14ce795b4af61b89b037d4bc157f2cb23e676fa16932185a04dfbf635",
- "sha256:4383b47f45b14459cab66048d384614019965ba6c1a1a141f11b5a551cace1b2",
- "sha256:44c95c0e96b3cb628e8452ec060413a49002a247b2b9938989e23a2c8291fc90",
- "sha256:4b063d3413f853e056161eb0c7724822a9740ad3caa24b8424d776cebf98e7ee",
- "sha256:52ed9ebf8ac602385126c9a2fe951db36f2cb0c2538d22971487f89d0de4065a",
- "sha256:55d1580e2d7e17f45d19d3b12098e352f3a37fe86d380bf45846ef257054b242",
- "sha256:5ef9bc3d046ce83c4bbf4c25e1e0547b9c441c01d30922d812e887dc5f125c12",
- "sha256:5fa82a26f92871eca593b53359c12ad7949772462f887c35edaf36f87953c0e2",
- "sha256:61321672b3ac7aade25c40449ccedbc6db72c7f5f0fdf34def5e2f8b51ca530d",
- "sha256:701171f825dcab90969596ce2af253143b93b08f1a716d4b2a9d2db5084ef7be",
- "sha256:841ec8af7a8491ac76ec5a9522226e287187a3107e12b7d686ad354bb78facee",
- "sha256:8a06641fb07d4e8f6c7dda4fc3f8871d327803ab6542e33831c7ccfdcb4d0ad6",
- "sha256:8e88bb9eafbf6a4014d55fb222e7360eef53e613215085e65a13290577394529",
- "sha256:a00aee5d1b6c20620161984f8ab2ab69134466c51f58c052c11b076715e72929",
- "sha256:a047682d324ba56e61b7ea7c7299d51e61fd3bca7dad2ccc39b72bd0118d60a1",
- "sha256:a7ef8dd0bf2e1d0a27042b231a3baac6883cdd5557036f5e8df7139255feaac6",
- "sha256:ad28cff53f60d99a928dfcf1e861e0b2ceb2bc1f08a074fdd601b314e1cc9e0a",
- "sha256:b9097a208875fc7bbeb1286d0125d90bdfed961f61f214d3f5be62cd4ed8a446",
- "sha256:b97fe7d7991c25e6a31e5d5e795986b18fbbb3107b873d5f3ae6dc9a103278e9",
- "sha256:e0ec52ba3c7f1b7d813cd52649a5b3ef1fc0d433219dc8c93827c57eab6cf888",
- "sha256:ea2c3ffb662fec8bbbfce5602e2c159ff097a4631d96235fcf0fb00e59e3ece4",
- "sha256:fa3dec4ba8fb6e662770b74f62f1a0c7d4e37e25b58b2bf2c1be4c95372b4a33",
- "sha256:fbeb725c9dc799a574518109336acccaf1303c30d45c075c665c0793c2f79a7f"
+ "sha256:00c0faa5b021457848d031ecff041262211cc1e2bce5f6e6e6c8108018f6b44a",
+ "sha256:073104df012fc815eed976cd7d0a386c8725d0d0947cf9c37f6c36a6c20feb1b",
+ "sha256:076c92b08dd1ab88108bc84545187e10d3693a9299c593f98c4ea195a0b0ead7",
+ "sha256:089aeb297ff89615934b22c7631448598495ffd775b7d540a55cfee35a677bf4",
+ "sha256:3b750279f3e7715df6f68050707a0cee7cbe81ba2eeb2f21d081bd205885ffed",
+ "sha256:43e521f21c2458038d72e8cdfd4d4d9f1d00906a7b6636c4272e35f650d1699b",
+ "sha256:4bdb39ecbf05626e4bfa1efd773bb10346af297af14fb3f4c7cb91a1d2f34a46",
+ "sha256:5967e3632f42b0c0f9dc2c9da88c79eabdda317860b246d1fbbde4a8bbbc3b44",
+ "sha256:65d529c31bd65d54ce6b926a01e1b66eacf770b7e87c0622516a840e400ec732",
+ "sha256:6981acac509cc9415344cb5bfea8130096ea6ebcc917e75503143a1e9e829160",
+ "sha256:81dbe47e28b703bc4711ac74a64ef8b758a0cf056ce81d08e39116ab4bc126fa",
+ "sha256:8b90c57b3cd6128e0863b894ce77bd36fcb5f430bf2377bc3678c2f56e232316",
+ "sha256:9184aff0856261ecb566a3eb26a05dfe13a292c85ce5c59b04e4aa09e5814187",
+ "sha256:945a43ebf036dd4b43ebfbbd6b0f2db29ad3d39df824fb77476ca5777a9dde33",
+ "sha256:97eeacae9aa526ddafe68b9202a535f581e21d78f16688a84c8dcc063618e121",
+ "sha256:9f1a3bc2747166b0643b00e0b56cd9b661afc9d5ff963acaac7a9c7b2b1ef638",
+ "sha256:9ff75b88a4d273c06d968ad535e6cb6a039dd32db54fe36f05ed62ac3ef64a44",
+ "sha256:aeb6f56b004e898df5530fa873e598ec78eb338ba35f6fa1449970800b1d97c2",
+ "sha256:b16b90605c62bcb3aa7755d62cf5e746828cfc3f965a65211849e00c46f8348d",
+ "sha256:b99831397fdc6e6e0aa088b060c278c6e635d25c0d4d14bdf045bf81792fda0a",
+ "sha256:bc954251edcd8a952eeaec8ae989fec7fe48109ab343138d537b7ea5bb41071a",
+ "sha256:c05230d8aaaa6b8ab3ab41394dc06eb3d916131df1c9dcb4c94e8f041f704b74",
+ "sha256:d16a310c770cc49908c500c2ceb011f2840674101a587d39fa3ea828915b7e83",
+ "sha256:d93080d2b01b292e7ee4d247bf93ed802b0100f5baa3fa5fd6d374716fa480d4",
+ "sha256:e1f5f15c5ddadf6ee4d1d624a2ae940f14bd74536230b0056ccb28bb6248e42a",
+ "sha256:e3442601d276bd9e961d618b799761b4e5d892f938e8a4fe1efbe2752be90455",
+ "sha256:e85f433230add2aa26b66d018e21134000067d210c9c68ef7544ba65fc52e3eb",
+ "sha256:eecca86813c6a923cabff284b82ff4d73d9e91241dc176250192c3a9b9902a54",
+ "sha256:f1e933b238978ccfa77b1fee0a297b3c04983f4cb84ae1c33b0ea4ae08266cc9",
+ "sha256:f4cece02478d73dacd52be57a521d168af64ae03d2a567c0c4eb6f189c3b9d79",
+ "sha256:f567a82b7c2b99257cca2a1c902c1b129787278ff67148f188784245c7ed5495",
+ "sha256:f987a244dfb0333fbd74a691c36000a2569eaf7c7cc2ac838f85f59f0588ddc9"
],
"markers": "python_version >= '3.7'",
- "version": "==42.0.2"
+ "version": "==42.0.6"
},
"dill": {
"hashes": [
@@ -207,11 +207,11 @@
},
"filelock": {
"hashes": [
- "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e",
- "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"
+ "sha256:43339835842f110ca7ae60f1e1c160714c5a6afd15a2873419ab185334975c0f",
+ "sha256:6ea72da3be9b8c82afd3edcf99f2fffbb5076335a5ae4d03248bb5b6c3eae78a"
],
"markers": "python_version >= '3.8'",
- "version": "==3.13.1"
+ "version": "==3.14.0"
},
"isort": {
"hashes": [
@@ -223,19 +223,19 @@
},
"jinja2": {
"hashes": [
- "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa",
- "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"
+ "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369",
+ "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"
],
"markers": "python_version >= '3.7'",
- "version": "==3.1.3"
+ "version": "==3.1.4"
},
"jsonschema": {
"hashes": [
- "sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f",
- "sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5"
+ "sha256:5b22d434a45935119af990552c862e5d6d564e8f6601206b305a61fdf661a2b7",
+ "sha256:ff4cfd6b1367a40e7bc6411caec72effadd3db0bbe5017de188f2d6108335802"
],
"markers": "python_version >= '3.8'",
- "version": "==4.21.1"
+ "version": "==4.22.0"
},
"jsonschema-specifications": {
"hashes": [
@@ -387,11 +387,11 @@
},
"packaging": {
"hashes": [
- "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5",
- "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"
+ "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5",
+ "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"
],
"markers": "python_version >= '3.7'",
- "version": "==23.2"
+ "version": "==24.0"
},
"pathspec": {
"hashes": [
@@ -403,35 +403,36 @@
},
"platformdirs": {
"hashes": [
- "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068",
- "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"
+ "sha256:031cd18d4ec63ec53e82dceaac0417d218a6863f7745dfcc9efe7793b7039bdf",
+ "sha256:17d5a1161b3fd67b390023cb2d3b026bbd40abde6fdb052dfbd3a29c3ba22ee1"
],
"markers": "python_version >= '3.8'",
- "version": "==4.2.0"
+ "version": "==4.2.1"
},
"pycparser": {
"hashes": [
- "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9",
- "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"
+ "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6",
+ "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"
],
- "version": "==2.21"
+ "markers": "python_version >= '3.8'",
+ "version": "==2.22"
},
"pygments": {
"hashes": [
- "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c",
- "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"
+ "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199",
+ "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"
],
- "markers": "python_version >= '3.7'",
- "version": "==2.17.2"
+ "markers": "python_version >= '3.8'",
+ "version": "==2.18.0"
},
"pylint": {
"hashes": [
- "sha256:58c2398b0301e049609a8429789ec6edf3aabe9b6c5fec916acd18639c16de8b",
- "sha256:7a1585285aefc5165db81083c3e06363a27448f6b467b3b0f30dbd0ac1f73810"
+ "sha256:507a5b60953874766d8a366e8e8c7af63e058b26345cfcb5f91f89d987fd6b74",
+ "sha256:6a69beb4a6f63debebaab0a3477ecd0f559aa726af4954fc948c51f7a2549e23"
],
"index": "pypi",
"markers": "python_full_version >= '3.8.0'",
- "version": "==3.0.3"
+ "version": "==3.1.0"
},
"pyyaml": {
"hashes": [
@@ -492,11 +493,11 @@
},
"referencing": {
"hashes": [
- "sha256:39240f2ecc770258f28b642dd47fd74bc8b02484de54e1882b74b35ebd779bd5",
- "sha256:c775fedf74bc0f9189c2a3be1c12fd03e8c23f4d371dce795df44e06c5b412f7"
+ "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c",
+ "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"
],
"markers": "python_version >= '3.8'",
- "version": "==0.33.0"
+ "version": "==0.35.1"
},
"resolvelib": {
"hashes": [
@@ -507,116 +508,116 @@
},
"rich": {
"hashes": [
- "sha256:5cb5123b5cf9ee70584244246816e9114227e0b98ad9176eede6ad54bf5403fa",
- "sha256:6da14c108c4866ee9520bbffa71f6fe3962e193b7da68720583850cd4548e235"
+ "sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222",
+ "sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432"
],
"markers": "python_full_version >= '3.7.0'",
- "version": "==13.7.0"
+ "version": "==13.7.1"
},
"rpds-py": {
"hashes": [
- "sha256:01f58a7306b64e0a4fe042047dd2b7d411ee82e54240284bab63e325762c1147",
- "sha256:0210b2668f24c078307260bf88bdac9d6f1093635df5123789bfee4d8d7fc8e7",
- "sha256:02866e060219514940342a1f84303a1ef7a1dad0ac311792fbbe19b521b489d2",
- "sha256:0387ce69ba06e43df54e43968090f3626e231e4bc9150e4c3246947567695f68",
- "sha256:060f412230d5f19fc8c8b75f315931b408d8ebf56aec33ef4168d1b9e54200b1",
- "sha256:071bc28c589b86bc6351a339114fb7a029f5cddbaca34103aa573eba7b482382",
- "sha256:0bfb09bf41fe7c51413f563373e5f537eaa653d7adc4830399d4e9bdc199959d",
- "sha256:10162fe3f5f47c37ebf6d8ff5a2368508fe22007e3077bf25b9c7d803454d921",
- "sha256:149c5cd24f729e3567b56e1795f74577aa3126c14c11e457bec1b1c90d212e38",
- "sha256:1701fc54460ae2e5efc1dd6350eafd7a760f516df8dbe51d4a1c79d69472fbd4",
- "sha256:1957a2ab607f9added64478a6982742eb29f109d89d065fa44e01691a20fc20a",
- "sha256:1a746a6d49665058a5896000e8d9d2f1a6acba8a03b389c1e4c06e11e0b7f40d",
- "sha256:1bfcad3109c1e5ba3cbe2f421614e70439f72897515a96c462ea657261b96518",
- "sha256:1d36b2b59e8cc6e576f8f7b671e32f2ff43153f0ad6d0201250a7c07f25d570e",
- "sha256:1db228102ab9d1ff4c64148c96320d0be7044fa28bd865a9ce628ce98da5973d",
- "sha256:1dc29db3900cb1bb40353772417800f29c3d078dbc8024fd64655a04ee3c4bdf",
- "sha256:1e626b365293a2142a62b9a614e1f8e331b28f3ca57b9f05ebbf4cf2a0f0bdc5",
- "sha256:1f3c3461ebb4c4f1bbc70b15d20b565759f97a5aaf13af811fcefc892e9197ba",
- "sha256:20de7b7179e2031a04042e85dc463a93a82bc177eeba5ddd13ff746325558aa6",
- "sha256:24e4900a6643f87058a27320f81336d527ccfe503984528edde4bb660c8c8d59",
- "sha256:2528ff96d09f12e638695f3a2e0c609c7b84c6df7c5ae9bfeb9252b6fa686253",
- "sha256:25f071737dae674ca8937a73d0f43f5a52e92c2d178330b4c0bb6ab05586ffa6",
- "sha256:270987bc22e7e5a962b1094953ae901395e8c1e1e83ad016c5cfcfff75a15a3f",
- "sha256:292f7344a3301802e7c25c53792fae7d1593cb0e50964e7bcdcc5cf533d634e3",
- "sha256:2953937f83820376b5979318840f3ee47477d94c17b940fe31d9458d79ae7eea",
- "sha256:2a792b2e1d3038daa83fa474d559acfd6dc1e3650ee93b2662ddc17dbff20ad1",
- "sha256:2a7b2f2f56a16a6d62e55354dd329d929560442bd92e87397b7a9586a32e3e76",
- "sha256:2f4eb548daf4836e3b2c662033bfbfc551db58d30fd8fe660314f86bf8510b93",
- "sha256:3664d126d3388a887db44c2e293f87d500c4184ec43d5d14d2d2babdb4c64cad",
- "sha256:3677fcca7fb728c86a78660c7fb1b07b69b281964673f486ae72860e13f512ad",
- "sha256:380e0df2e9d5d5d339803cfc6d183a5442ad7ab3c63c2a0982e8c824566c5ccc",
- "sha256:3ac732390d529d8469b831949c78085b034bff67f584559340008d0f6041a049",
- "sha256:4128980a14ed805e1b91a7ed551250282a8ddf8201a4e9f8f5b7e6225f54170d",
- "sha256:4341bd7579611cf50e7b20bb8c2e23512a3dc79de987a1f411cb458ab670eb90",
- "sha256:436474f17733c7dca0fbf096d36ae65277e8645039df12a0fa52445ca494729d",
- "sha256:4dc889a9d8a34758d0fcc9ac86adb97bab3fb7f0c4d29794357eb147536483fd",
- "sha256:4e21b76075c01d65d0f0f34302b5a7457d95721d5e0667aea65e5bb3ab415c25",
- "sha256:516fb8c77805159e97a689e2f1c80655c7658f5af601c34ffdb916605598cda2",
- "sha256:5576ee2f3a309d2bb403ec292d5958ce03953b0e57a11d224c1f134feaf8c40f",
- "sha256:5a024fa96d541fd7edaa0e9d904601c6445e95a729a2900c5aec6555fe921ed6",
- "sha256:5d0e8a6434a3fbf77d11448c9c25b2f25244226cfbec1a5159947cac5b8c5fa4",
- "sha256:5e7d63ec01fe7c76c2dbb7e972fece45acbb8836e72682bde138e7e039906e2c",
- "sha256:60e820ee1004327609b28db8307acc27f5f2e9a0b185b2064c5f23e815f248f8",
- "sha256:637b802f3f069a64436d432117a7e58fab414b4e27a7e81049817ae94de45d8d",
- "sha256:65dcf105c1943cba45d19207ef51b8bc46d232a381e94dd38719d52d3980015b",
- "sha256:698ea95a60c8b16b58be9d854c9f993c639f5c214cf9ba782eca53a8789d6b19",
- "sha256:70fcc6c2906cfa5c6a552ba7ae2ce64b6c32f437d8f3f8eea49925b278a61453",
- "sha256:720215373a280f78a1814becb1312d4e4d1077b1202a56d2b0815e95ccb99ce9",
- "sha256:7450dbd659fed6dd41d1a7d47ed767e893ba402af8ae664c157c255ec6067fde",
- "sha256:7b7d9ca34542099b4e185b3c2a2b2eda2e318a7dbde0b0d83357a6d4421b5296",
- "sha256:7fbd70cb8b54fe745301921b0816c08b6d917593429dfc437fd024b5ba713c58",
- "sha256:81038ff87a4e04c22e1d81f947c6ac46f122e0c80460b9006e6517c4d842a6ec",
- "sha256:810685321f4a304b2b55577c915bece4c4a06dfe38f6e62d9cc1d6ca8ee86b99",
- "sha256:82ada4a8ed9e82e443fcef87e22a3eed3654dd3adf6e3b3a0deb70f03e86142a",
- "sha256:841320e1841bb53fada91c9725e766bb25009cfd4144e92298db296fb6c894fb",
- "sha256:8587fd64c2a91c33cdc39d0cebdaf30e79491cc029a37fcd458ba863f8815383",
- "sha256:8ffe53e1d8ef2520ebcf0c9fec15bb721da59e8ef283b6ff3079613b1e30513d",
- "sha256:9051e3d2af8f55b42061603e29e744724cb5f65b128a491446cc029b3e2ea896",
- "sha256:91e5a8200e65aaac342a791272c564dffcf1281abd635d304d6c4e6b495f29dc",
- "sha256:93432e747fb07fa567ad9cc7aaadd6e29710e515aabf939dfbed8046041346c6",
- "sha256:938eab7323a736533f015e6069a7d53ef2dcc841e4e533b782c2bfb9fb12d84b",
- "sha256:9584f8f52010295a4a417221861df9bea4c72d9632562b6e59b3c7b87a1522b7",
- "sha256:9737bdaa0ad33d34c0efc718741abaafce62fadae72c8b251df9b0c823c63b22",
- "sha256:99da0a4686ada4ed0f778120a0ea8d066de1a0a92ab0d13ae68492a437db78bf",
- "sha256:99f567dae93e10be2daaa896e07513dd4bf9c2ecf0576e0533ac36ba3b1d5394",
- "sha256:9bdf1303df671179eaf2cb41e8515a07fc78d9d00f111eadbe3e14262f59c3d0",
- "sha256:9f0e4dc0f17dcea4ab9d13ac5c666b6b5337042b4d8f27e01b70fae41dd65c57",
- "sha256:a000133a90eea274a6f28adc3084643263b1e7c1a5a66eb0a0a7a36aa757ed74",
- "sha256:a3264e3e858de4fc601741498215835ff324ff2482fd4e4af61b46512dd7fc83",
- "sha256:a71169d505af63bb4d20d23a8fbd4c6ce272e7bce6cc31f617152aa784436f29",
- "sha256:a967dd6afda7715d911c25a6ba1517975acd8d1092b2f326718725461a3d33f9",
- "sha256:aa5bfb13f1e89151ade0eb812f7b0d7a4d643406caaad65ce1cbabe0a66d695f",
- "sha256:ae35e8e6801c5ab071b992cb2da958eee76340e6926ec693b5ff7d6381441745",
- "sha256:b686f25377f9c006acbac63f61614416a6317133ab7fafe5de5f7dc8a06d42eb",
- "sha256:b760a56e080a826c2e5af09002c1a037382ed21d03134eb6294812dda268c811",
- "sha256:b86b21b348f7e5485fae740d845c65a880f5d1eda1e063bc59bef92d1f7d0c55",
- "sha256:b9412abdf0ba70faa6e2ee6c0cc62a8defb772e78860cef419865917d86c7342",
- "sha256:bd345a13ce06e94c753dab52f8e71e5252aec1e4f8022d24d56decd31e1b9b23",
- "sha256:be22ae34d68544df293152b7e50895ba70d2a833ad9566932d750d3625918b82",
- "sha256:bf046179d011e6114daf12a534d874958b039342b347348a78b7cdf0dd9d6041",
- "sha256:c3d2010656999b63e628a3c694f23020322b4178c450dc478558a2b6ef3cb9bb",
- "sha256:c64602e8be701c6cfe42064b71c84ce62ce66ddc6422c15463fd8127db3d8066",
- "sha256:d65e6b4f1443048eb7e833c2accb4fa7ee67cc7d54f31b4f0555b474758bee55",
- "sha256:d8bbd8e56f3ba25a7d0cf980fc42b34028848a53a0e36c9918550e0280b9d0b6",
- "sha256:da1ead63368c04a9bded7904757dfcae01eba0e0f9bc41d3d7f57ebf1c04015a",
- "sha256:dbbb95e6fc91ea3102505d111b327004d1c4ce98d56a4a02e82cd451f9f57140",
- "sha256:dbc56680ecf585a384fbd93cd42bc82668b77cb525343170a2d86dafaed2a84b",
- "sha256:df3b6f45ba4515632c5064e35ca7f31d51d13d1479673185ba8f9fefbbed58b9",
- "sha256:dfe07308b311a8293a0d5ef4e61411c5c20f682db6b5e73de6c7c8824272c256",
- "sha256:e796051f2070f47230c745d0a77a91088fbee2cc0502e9b796b9c6471983718c",
- "sha256:efa767c220d94aa4ac3a6dd3aeb986e9f229eaf5bce92d8b1b3018d06bed3772",
- "sha256:f0b8bf5b8db49d8fd40f54772a1dcf262e8be0ad2ab0206b5a2ec109c176c0a4",
- "sha256:f175e95a197f6a4059b50757a3dca33b32b61691bdbd22c29e8a8d21d3914cae",
- "sha256:f2f3b28b40fddcb6c1f1f6c88c6f3769cd933fa493ceb79da45968a21dccc920",
- "sha256:f6c43b6f97209e370124baf2bf40bb1e8edc25311a158867eb1c3a5d449ebc7a",
- "sha256:f7f4cb1f173385e8a39c29510dd11a78bf44e360fb75610594973f5ea141028b",
- "sha256:fad059a4bd14c45776600d223ec194e77db6c20255578bb5bcdd7c18fd169361",
- "sha256:ff1dcb8e8bc2261a088821b2595ef031c91d499a0c1b031c152d43fe0a6ecec8",
- "sha256:ffee088ea9b593cc6160518ba9bd319b5475e5f3e578e4552d63818773c6f56a"
+ "sha256:05f3d615099bd9b13ecf2fc9cf2d839ad3f20239c678f461c753e93755d629ee",
+ "sha256:06d218939e1bf2ca50e6b0ec700ffe755e5216a8230ab3e87c059ebb4ea06afc",
+ "sha256:07f2139741e5deb2c5154a7b9629bc5aa48c766b643c1a6750d16f865a82c5fc",
+ "sha256:08d74b184f9ab6289b87b19fe6a6d1a97fbfea84b8a3e745e87a5de3029bf944",
+ "sha256:0abeee75434e2ee2d142d650d1e54ac1f8b01e6e6abdde8ffd6eeac6e9c38e20",
+ "sha256:154bf5c93d79558b44e5b50cc354aa0459e518e83677791e6adb0b039b7aa6a7",
+ "sha256:17c6d2155e2423f7e79e3bb18151c686d40db42d8645e7977442170c360194d4",
+ "sha256:1805d5901779662d599d0e2e4159d8a82c0b05faa86ef9222bf974572286b2b6",
+ "sha256:19ba472b9606c36716062c023afa2484d1e4220548751bda14f725a7de17b4f6",
+ "sha256:19e515b78c3fc1039dd7da0a33c28c3154458f947f4dc198d3c72db2b6b5dc93",
+ "sha256:1d54f74f40b1f7aaa595a02ff42ef38ca654b1469bef7d52867da474243cc633",
+ "sha256:207c82978115baa1fd8d706d720b4a4d2b0913df1c78c85ba73fe6c5804505f0",
+ "sha256:2625f03b105328729f9450c8badda34d5243231eef6535f80064d57035738360",
+ "sha256:27bba383e8c5231cd559affe169ca0b96ec78d39909ffd817f28b166d7ddd4d8",
+ "sha256:2c3caec4ec5cd1d18e5dd6ae5194d24ed12785212a90b37f5f7f06b8bedd7139",
+ "sha256:2cc7c1a47f3a63282ab0f422d90ddac4aa3034e39fc66a559ab93041e6505da7",
+ "sha256:2fc24a329a717f9e2448f8cd1f960f9dac4e45b6224d60734edeb67499bab03a",
+ "sha256:312fe69b4fe1ffbe76520a7676b1e5ac06ddf7826d764cc10265c3b53f96dbe9",
+ "sha256:32b7daaa3e9389db3695964ce8e566e3413b0c43e3394c05e4b243a4cd7bef26",
+ "sha256:338dee44b0cef8b70fd2ef54b4e09bb1b97fc6c3a58fea5db6cc083fd9fc2724",
+ "sha256:352a88dc7892f1da66b6027af06a2e7e5d53fe05924cc2cfc56495b586a10b72",
+ "sha256:35b2b771b13eee8729a5049c976197ff58a27a3829c018a04341bcf1ae409b2b",
+ "sha256:38e14fb4e370885c4ecd734f093a2225ee52dc384b86fa55fe3f74638b2cfb09",
+ "sha256:3c20f05e8e3d4fc76875fc9cb8cf24b90a63f5a1b4c5b9273f0e8225e169b100",
+ "sha256:3dd3cd86e1db5aadd334e011eba4e29d37a104b403e8ca24dcd6703c68ca55b3",
+ "sha256:489bdfe1abd0406eba6b3bb4fdc87c7fa40f1031de073d0cfb744634cc8fa261",
+ "sha256:48c2faaa8adfacefcbfdb5f2e2e7bdad081e5ace8d182e5f4ade971f128e6bb3",
+ "sha256:4a98a1f0552b5f227a3d6422dbd61bc6f30db170939bd87ed14f3c339aa6c7c9",
+ "sha256:4adec039b8e2928983f885c53b7cc4cda8965b62b6596501a0308d2703f8af1b",
+ "sha256:4e0ee01ad8260184db21468a6e1c37afa0529acc12c3a697ee498d3c2c4dcaf3",
+ "sha256:51584acc5916212e1bf45edd17f3a6b05fe0cbb40482d25e619f824dccb679de",
+ "sha256:531796fb842b53f2695e94dc338929e9f9dbf473b64710c28af5a160b2a8927d",
+ "sha256:5463c47c08630007dc0fe99fb480ea4f34a89712410592380425a9b4e1611d8e",
+ "sha256:5c45a639e93a0c5d4b788b2613bd637468edd62f8f95ebc6fcc303d58ab3f0a8",
+ "sha256:6031b25fb1b06327b43d841f33842b383beba399884f8228a6bb3df3088485ff",
+ "sha256:607345bd5912aacc0c5a63d45a1f73fef29e697884f7e861094e443187c02be5",
+ "sha256:618916f5535784960f3ecf8111581f4ad31d347c3de66d02e728de460a46303c",
+ "sha256:636a15acc588f70fda1661234761f9ed9ad79ebed3f2125d44be0862708b666e",
+ "sha256:673fdbbf668dd958eff750e500495ef3f611e2ecc209464f661bc82e9838991e",
+ "sha256:6afd80f6c79893cfc0574956f78a0add8c76e3696f2d6a15bca2c66c415cf2d4",
+ "sha256:6b5ff7e1d63a8281654b5e2896d7f08799378e594f09cf3674e832ecaf396ce8",
+ "sha256:6c4c4c3f878df21faf5fac86eda32671c27889e13570645a9eea0a1abdd50922",
+ "sha256:6cd8098517c64a85e790657e7b1e509b9fe07487fd358e19431cb120f7d96338",
+ "sha256:6d1e42d2735d437e7e80bab4d78eb2e459af48c0a46e686ea35f690b93db792d",
+ "sha256:6e30ac5e329098903262dc5bdd7e2086e0256aa762cc8b744f9e7bf2a427d3f8",
+ "sha256:70a838f7754483bcdc830444952fd89645569e7452e3226de4a613a4c1793fb2",
+ "sha256:720edcb916df872d80f80a1cc5ea9058300b97721efda8651efcd938a9c70a72",
+ "sha256:732672fbc449bab754e0b15356c077cc31566df874964d4801ab14f71951ea80",
+ "sha256:740884bc62a5e2bbb31e584f5d23b32320fd75d79f916f15a788d527a5e83644",
+ "sha256:7700936ef9d006b7ef605dc53aa364da2de5a3aa65516a1f3ce73bf82ecfc7ae",
+ "sha256:7732770412bab81c5a9f6d20aeb60ae943a9b36dcd990d876a773526468e7163",
+ "sha256:7750569d9526199c5b97e5a9f8d96a13300950d910cf04a861d96f4273d5b104",
+ "sha256:7f1944ce16401aad1e3f7d312247b3d5de7981f634dc9dfe90da72b87d37887d",
+ "sha256:81c5196a790032e0fc2464c0b4ab95f8610f96f1f2fa3d4deacce6a79852da60",
+ "sha256:8352f48d511de5f973e4f2f9412736d7dea76c69faa6d36bcf885b50c758ab9a",
+ "sha256:8927638a4d4137a289e41d0fd631551e89fa346d6dbcfc31ad627557d03ceb6d",
+ "sha256:8c7672e9fba7425f79019db9945b16e308ed8bc89348c23d955c8c0540da0a07",
+ "sha256:8d2e182c9ee01135e11e9676e9a62dfad791a7a467738f06726872374a83db49",
+ "sha256:910e71711d1055b2768181efa0a17537b2622afeb0424116619817007f8a2b10",
+ "sha256:942695a206a58d2575033ff1e42b12b2aece98d6003c6bc739fbf33d1773b12f",
+ "sha256:9437ca26784120a279f3137ee080b0e717012c42921eb07861b412340f85bae2",
+ "sha256:967342e045564cef76dfcf1edb700b1e20838d83b1aa02ab313e6a497cf923b8",
+ "sha256:998125738de0158f088aef3cb264a34251908dd2e5d9966774fdab7402edfab7",
+ "sha256:9e6934d70dc50f9f8ea47081ceafdec09245fd9f6032669c3b45705dea096b88",
+ "sha256:a3d456ff2a6a4d2adcdf3c1c960a36f4fd2fec6e3b4902a42a384d17cf4e7a65",
+ "sha256:a7b28c5b066bca9a4eb4e2f2663012debe680f097979d880657f00e1c30875a0",
+ "sha256:a888e8bdb45916234b99da2d859566f1e8a1d2275a801bb8e4a9644e3c7e7909",
+ "sha256:aa3679e751408d75a0b4d8d26d6647b6d9326f5e35c00a7ccd82b78ef64f65f8",
+ "sha256:aaa71ee43a703c321906813bb252f69524f02aa05bf4eec85f0c41d5d62d0f4c",
+ "sha256:b646bf655b135ccf4522ed43d6902af37d3f5dbcf0da66c769a2b3938b9d8184",
+ "sha256:b906b5f58892813e5ba5c6056d6a5ad08f358ba49f046d910ad992196ea61397",
+ "sha256:b9bb1f182a97880f6078283b3505a707057c42bf55d8fca604f70dedfdc0772a",
+ "sha256:bd1105b50ede37461c1d51b9698c4f4be6e13e69a908ab7751e3807985fc0346",
+ "sha256:bf18932d0003c8c4d51a39f244231986ab23ee057d235a12b2684ea26a353590",
+ "sha256:c273e795e7a0f1fddd46e1e3cb8be15634c29ae8ff31c196debb620e1edb9333",
+ "sha256:c69882964516dc143083d3795cb508e806b09fc3800fd0d4cddc1df6c36e76bb",
+ "sha256:c827576e2fa017a081346dce87d532a5310241648eb3700af9a571a6e9fc7e74",
+ "sha256:cbfbea39ba64f5e53ae2915de36f130588bba71245b418060ec3330ebf85678e",
+ "sha256:ce0bb20e3a11bd04461324a6a798af34d503f8d6f1aa3d2aa8901ceaf039176d",
+ "sha256:d0cee71bc618cd93716f3c1bf56653740d2d13ddbd47673efa8bf41435a60daa",
+ "sha256:d21be4770ff4e08698e1e8e0bce06edb6ea0626e7c8f560bc08222880aca6a6f",
+ "sha256:d31dea506d718693b6b2cffc0648a8929bdc51c70a311b2770f09611caa10d53",
+ "sha256:d44607f98caa2961bab4fa3c4309724b185b464cdc3ba6f3d7340bac3ec97cc1",
+ "sha256:d58ad6317d188c43750cb76e9deacf6051d0f884d87dc6518e0280438648a9ac",
+ "sha256:d70129cef4a8d979caa37e7fe957202e7eee8ea02c5e16455bc9808a59c6b2f0",
+ "sha256:d85164315bd68c0806768dc6bb0429c6f95c354f87485ee3593c4f6b14def2bd",
+ "sha256:d960de62227635d2e61068f42a6cb6aae91a7fe00fca0e3aeed17667c8a34611",
+ "sha256:dc48b479d540770c811fbd1eb9ba2bb66951863e448efec2e2c102625328e92f",
+ "sha256:e1735502458621921cee039c47318cb90b51d532c2766593be6207eec53e5c4c",
+ "sha256:e2be6e9dd4111d5b31ba3b74d17da54a8319d8168890fbaea4b9e5c3de630ae5",
+ "sha256:e4c39ad2f512b4041343ea3c7894339e4ca7839ac38ca83d68a832fc8b3748ab",
+ "sha256:ed402d6153c5d519a0faf1bb69898e97fb31613b49da27a84a13935ea9164dfc",
+ "sha256:ee17cd26b97d537af8f33635ef38be873073d516fd425e80559f4585a7b90c43",
+ "sha256:f3027be483868c99b4985fda802a57a67fdf30c5d9a50338d9db646d590198da",
+ "sha256:f5bab211605d91db0e2995a17b5c6ee5edec1270e46223e513eaa20da20076ac",
+ "sha256:f6f8e3fecca256fefc91bb6765a693d96692459d7d4c644660a9fff32e517843",
+ "sha256:f7afbfee1157e0f9376c00bb232e80a60e59ed716e3211a80cb8506550671e6e",
+ "sha256:fa242ac1ff583e4ec7771141606aafc92b361cd90a05c30d93e343a0c2d82a89",
+ "sha256:fab6ce90574645a0d6c58890e9bcaac8d94dff54fb51c69e5522a7358b80ab64"
],
"markers": "python_version >= '3.8'",
- "version": "==0.17.1"
+ "version": "==0.18.1"
},
"ruamel.yaml": {
"hashes": [
@@ -708,27 +709,27 @@
},
"tomlkit": {
"hashes": [
- "sha256:75baf5012d06501f07bee5bf8e801b9f343e7aac5a92581f20f80ce632e6b5a4",
- "sha256:b0a645a9156dc7cb5d3a1f0d4bab66db287fcb8e0430bdd4664a095ea16414ba"
+ "sha256:5cd82d48a3dd89dee1f9d64420aa20ae65cfbd00668d6f094d7578a78efbb77b",
+ "sha256:7ca1cfc12232806517a8515047ba66a19369e71edf2439d0f5824f91032b6cc3"
],
"markers": "python_version >= '3.7'",
- "version": "==0.12.3"
+ "version": "==0.12.4"
},
"typing-extensions": {
"hashes": [
- "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783",
- "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"
+ "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0",
+ "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"
],
"markers": "python_version < '3.11'",
- "version": "==4.9.0"
+ "version": "==4.11.0"
},
"wcmatch": {
"hashes": [
- "sha256:14554e409b142edeefab901dc68ad570b30a72a8ab9a79106c5d5e9a6d241bd5",
- "sha256:86c17572d0f75cbf3bcb1a18f3bf2f9e72b39a9c08c9b4a74e991e1882a8efb3"
+ "sha256:24c19cedc92bc9c9e27f39db4e1824d72f95bd2cea32b254a47a45b1a1b227ed",
+ "sha256:c0088c7f6426cf6bf27e530e2b7b734031905f7e490475fd83c7c5008ab581b3"
],
"markers": "python_version >= '3.8'",
- "version": "==8.5"
+ "version": "==8.5.1"
},
"wrapt": {
"hashes": [
@@ -813,12 +814,12 @@
},
"yamllint": {
"hashes": [
- "sha256:33b813f6ff2ffad2e57a288281098392b85f7463ce1f3d5cd45aa848b916a806",
- "sha256:7f0a6a41e8aab3904878da4ae34b6248b6bc74634e0d3a90f0fb2d7e723a3d4f"
+ "sha256:2e16e504bb129ff515b37823b472750b36b6de07963bd74b307341ef5ad8bdc3",
+ "sha256:7a003809f88324fd2c877734f2d575ee7881dd9043360657cc8049c809eba6cd"
],
"index": "pypi",
"markers": "python_version >= '3.8'",
- "version": "==1.34.0"
+ "version": "==1.35.1"
}
},
"develop": {}
diff --git a/ansible_collections/grafana/grafana/README.md b/ansible_collections/grafana/grafana/README.md
index e28604a1f..ceef02c7a 100644
--- a/ansible_collections/grafana/grafana/README.md
+++ b/ansible_collections/grafana/grafana/README.md
@@ -6,12 +6,7 @@
[![GitHub Last Commit](https://img.shields.io/github/last-commit/grafana/grafana-ansible-collection)](https://github.com/grafana/grafana-ansible-collection/tags)
[![GitHub Contributors](https://img.shields.io/github/contributors/grafana/grafana-ansible-collection)](https://github.com/grafana/grafana-ansible-collection/tags)
-[![Modules Test](https://github.com/grafana/grafana-ansible-collection/actions/workflows/modules-test.yml/badge.svg?branch=main)](https://github.com/grafana/grafana-ansible-collection/actions/workflows/modules-test.yml)
-[![Roles Test](https://github.com/grafana/grafana-ansible-collection/actions/workflows/roles-test.yml/badge.svg?branch=main)](https://github.com/grafana/grafana-ansible-collection/actions/workflows/roles-test.yml)
-[![Full Integration Test](https://github.com/grafana/grafana-ansible-collection/actions/workflows/full-integration-test.yml/badge.svg?branch=main)](https://github.com/grafana/grafana-ansible-collection/actions/workflows/full-integration-test.yml)
-[![Lint](https://github.com/grafana/grafana-ansible-collection/actions/workflows/lint.yaml/badge.svg)](https://github.com/grafana/grafana-ansible-collection/actions/workflows/lint.yaml)
-
-This collection (`grafana.grafana`) contains modules and plugins to assist in automating managing of resources in **Grafana** with Ansible.
+This collection (`grafana.grafana`) contains modules and roles to assist in automating the management of resources in **Grafana**, **Grafana Agent**, **OpenTelemetry Collector**, **Loki**, **Mimir**, and **Promtail** with Ansible.
- [Ansible collection Documentation](https://docs.ansible.com/ansible/latest/collections/grafana/grafana/)
- [Grafana](https://grafana.com)
@@ -46,6 +41,17 @@ collections:
version: 1.0.0
```
+## Roles included in the collection
+
+This collection includes the following roles to help set up and manage Grafana, Grafana Agent, OpenTelemetry Collector, Loki, Mimir and Promtail:
+
+- **Grafana**: Installs and configures Grafana on your target hosts.
+- **Grafana Agent**: Deploys and configures Grafana Agent, allowing for efficient metrics, logs, and trace data shipping to Grafana Cloud or other endpoints.
+- **OpenTelemetry Collector**: Sets up and configures the OpenTelemetry Collector, enabling advanced observability features through data collection and transmission.
+- **Loki**: Deploy and manage Loki, the log aggregation system.
+- **Mimir**: Deploy and manage Mimir, the scalable long-term storage for Prometheus.
+- **Promtail**: Deploy and manage Promtail, the agent which ships the contents of local logs to a private Grafana Loki.
+
## Using this collection
You can call modules by their Fully Qualified Collection Namespace (FQCN), such as `grafana.grafana.cloud_stack`:
diff --git a/ansible_collections/grafana/grafana/changelogs/.plugin-cache.yaml b/ansible_collections/grafana/grafana/changelogs/.plugin-cache.yaml
index 0f8ab33ab..1d78dc030 100644
--- a/ansible_collections/grafana/grafana/changelogs/.plugin-cache.yaml
+++ b/ansible_collections/grafana/grafana/changelogs/.plugin-cache.yaml
@@ -56,4 +56,4 @@ plugins:
strategy: {}
test: {}
vars: {}
-version: 2.2.5
+version: 5.2.0
diff --git a/ansible_collections/grafana/grafana/changelogs/changelog.yaml b/ansible_collections/grafana/grafana/changelogs/changelog.yaml
index c915cd788..bdf0debdd 100644
--- a/ansible_collections/grafana/grafana/changelogs/changelog.yaml
+++ b/ansible_collections/grafana/grafana/changelogs/changelog.yaml
@@ -223,7 +223,8 @@ releases:
changes:
minor_changes:
- 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
+ - 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
@@ -238,3 +239,47 @@ releases:
- Topic/grafana agent idempotency by @ohdearaugustin in https://github.com/grafana/grafana-ansible-collection/pull/147
release_summary: Grafana and Agent Role bug fixes and security updates
release_date: '2024-02-13'
+ 3.0.0:
+ changes:
+ major_changes:
+ - Add an Ansible role for OpenTelemetry Collector by @ishanjainn in https://github.com/grafana/grafana-ansible-collection/pull/138
+ minor_changes:
+ - 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.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
+ - ExecStartPre and EnvironmentFile settings to system unit file by @fabiiw05
+ in https://github.com/grafana/grafana-ansible-collection/pull/157
+ - datasources url parameter fix by @dergudzon in https://github.com/grafana/grafana-ansible-collection/pull/162
+ release_date: '2024-03-12'
+ 4.0.0:
+ changes:
+ major_changes:
+ - Add an Ansible role for Grafana Alloy by @ishanjainn in https://github.com/grafana/grafana-ansible-collection/pull/169
+ minor_changes:
+ - Bump ansible-lint from 24.2.0 to 24.2.1 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/164
+ - Update description to match module by @brmurphy in https://github.com/grafana/grafana-ansible-collection/pull/179
+ - Clarify grafana-server configuration in README by @VGerris in https://github.com/grafana/grafana-ansible-collection/pull/177
+ - Bump ansible-lint from 24.2.0 to 24.2.1 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/168
+ - Bump black from 24.1.1 to 24.3.0 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/165
+ - fix: Apply correct uid + gid for imported dashboards by @hypery2k in https://github.com/grafana/grafana-ansible-collection/pull/167
+ release_date: '2024-04-10'
+ 5.0.0:
+ changes:
+ major_changes:
+ - Add Grafana Mimir role by @GVengelen in https://github.com/grafana/grafana-ansible-collection/pull/183
+ - Add Grafana Loki role by @voidquark in https://github.com/grafana/grafana-ansible-collection/pull/188
+ release_date: '2024-04-29'
+ 5.1.0:
+ changes:
+ major_changes:
+ - fix: Uninstall Step for Loki and Mimir by @voidquark in https://github.com/grafana/grafana-ansible-collection/pull/193
+ release_date: '2024-05-07'
+ 5.2.0:
+ changes:
+ major_changes:
+ - Bump ansible-lint from 24.2.2 to 24.2.3 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/195
+ - Add promtail role by @voidquark in https://github.com/grafana/grafana-ansible-collection/pull/197
+ - Add a new config part to configure KeyCloak based auth by @he0s in https://github.com/grafana/grafana-ansible-collection/pull/191
+ release_date: '2024-05-13'
diff --git a/ansible_collections/grafana/grafana/examples/alloy.yaml b/ansible_collections/grafana/grafana/examples/alloy.yaml
new file mode 100644
index 000000000..29084cbff
--- /dev/null
+++ b/ansible_collections/grafana/grafana/examples/alloy.yaml
@@ -0,0 +1,24 @@
+- name: Install alloy
+ hosts: all
+ become: true
+
+ tasks:
+ - name: Install alloy
+ ansible.builtin.include_role:
+ name: grafana.grafana.alloy
+ vars:
+ config: |
+ prometheus.scrape "default" {
+ targets = [{"__address__" = "localhost:12345"}]
+ forward_to = [prometheus.remote_write.prom.receiver]
+ }
+ prometheus.remote_write "prom" {
+ endpoint {
+ url = "https://prometheus-prod-13-prod-us-east-0.grafana.net/api/prom/push"
+
+ basic_auth {
+ username = "1493467"
+ password = "glc_eyJvIjoiNjUyOTkyIiwibiI6InN0YWNrLTg5MDA0My1obS13cml0ZS1hc2FzIiwiayI6IjIwME9NeThmWlFpMGlmQzBGMTlJNDdqSiIsIm0iOnsiciI6InByb2QtdXMtZWFzdC0wIn19"
+ }
+ }
+ }
diff --git a/ansible_collections/grafana/grafana/examples/loki-basic-no-options.yml b/ansible_collections/grafana/grafana/examples/loki-basic-no-options.yml
new file mode 100644
index 000000000..cda128da9
--- /dev/null
+++ b/ansible_collections/grafana/grafana/examples/loki-basic-no-options.yml
@@ -0,0 +1,6 @@
+---
+- name: Deploy Loki using the default configuration
+ hosts: all
+ become: true
+ roles:
+ - role: grafana.grafana.loki
diff --git a/ansible_collections/grafana/grafana/examples/loki-local-filesystem-with-retention-and-alert.yml b/ansible_collections/grafana/grafana/examples/loki-local-filesystem-with-retention-and-alert.yml
new file mode 100644
index 000000000..f37718811
--- /dev/null
+++ b/ansible_collections/grafana/grafana/examples/loki-local-filesystem-with-retention-and-alert.yml
@@ -0,0 +1,70 @@
+---
+- name: Deploy Loki using the local filesystem
+ hosts: all
+ become: true
+ roles:
+ - role: grafana.grafana.loki
+ vars:
+ loki_querier:
+ max_concurrent: 16
+ engine:
+ max_look_back_period: 8760h
+ loki_storage_config:
+ tsdb_shipper:
+ active_index_directory: "{{ loki_working_path }}/tsdb-index"
+ cache_location: "{{ loki_working_path }}/tsdb-cache"
+ filesystem:
+ directory: "{{ loki_working_path }}/chunks"
+ loki_ingester:
+ wal:
+ enabled: true
+ dir: "{{ loki_working_path }}/wal"
+ lifecycler:
+ address: 127.0.0.1
+ ring:
+ kvstore:
+ store: inmemory
+ replication_factor: 1
+ final_sleep: 0s
+ chunk_idle_period: 1h
+ max_chunk_age: 2h
+ chunk_target_size: 1048576
+ query_store_max_look_back_period: 8760h
+ loki_limits_config:
+ split_queries_by_interval: 0
+ reject_old_samples: true
+ reject_old_samples_max_age: 168h
+ max_query_length: 0
+ max_query_series: 50000
+ retention_period: 8760h
+ allow_structured_metadata: false
+ max_query_lookback: 8760h
+ loki_compactor:
+ working_directory: "{{ loki_working_path }}/compactor"
+ compaction_interval: 10m
+ retention_enabled: true
+ retention_delete_delay: 2h
+ retention_delete_worker_count: 150
+ delete_request_store: filesystem
+ loki_common:
+ path_prefix: "{{ loki_working_path }}"
+ storage:
+ filesystem:
+ rules_directory: "{{ loki_working_path }}/rules"
+ replication_factor: 1
+ ring:
+ instance_addr: 127.0.0.1
+ kvstore:
+ store: inmemory
+ loki_ruler_alerts:
+ - name: Logs.sshd
+ rules:
+ - alert: SshLoginFailed
+ expr: |
+ count_over_time({job=~"secure"} |="sshd[" |~": Failed|: Invalid|: Connection closed by authenticating user" | __error__="" [15m]) > 6
+ for: 0m
+ labels:
+ severity: critical
+ annotations:
+ summary: "{% raw %}SSH authentication failure (instance {{ $labels.instance }}).{% endraw %}"
+ description: "{% raw %}Increase of SSH authentication failures in last 15 minutes\\n VALUE = {{ $value }}{% endraw %}"
diff --git a/ansible_collections/grafana/grafana/examples/mimir-3-hosts.yaml b/ansible_collections/grafana/grafana/examples/mimir-3-hosts.yaml
new file mode 100644
index 000000000..5d9e7922b
--- /dev/null
+++ b/ansible_collections/grafana/grafana/examples/mimir-3-hosts.yaml
@@ -0,0 +1,32 @@
+- name: Install mimir
+ hosts: [mimir-1, mimir-2, mimir-3]
+ become: true
+
+ tasks:
+ - name: Install mimir
+ ansible.builtin.include_role:
+ name: grafana.grafana.mimir
+ vars:
+ # Run against minio blob store backed, see readme for local setup or mimir docs for Azure, AWS, etc.
+ mimir_storage:
+ storage:
+ backend: s3
+ s3:
+ endpoint: localhost:9000
+ access_key_id: testtest
+ secret_access_key: testtest
+ insecure: true
+ bucket_name: mimir
+
+ # Blocks storage requires a prefix when using a common object storage bucket.
+ mimir_blocks_storage:
+ storage_prefix: blocks
+ tsdb:
+ dir: "{{ mimir_working_path}}/ingester"
+
+ # Use memberlist, a gossip-based protocol, to enable the 3 Mimir replicas to communicate
+ mimir_memberlist:
+ join_members:
+ - mimir-1:7946
+ - mimir-2:7946
+ - mimir-3:7946
diff --git a/ansible_collections/grafana/grafana/examples/monitor-multiple-instance-otel.md b/ansible_collections/grafana/grafana/examples/monitor-multiple-instance-otel.md
new file mode 100644
index 000000000..89762ca1b
--- /dev/null
+++ b/ansible_collections/grafana/grafana/examples/monitor-multiple-instance-otel.md
@@ -0,0 +1,193 @@
+# Scaling OpenTelemetry Collector Deployments Using Grafana Ansible Collection
+This guide is focused on scaling the OpenTelemetry Collector deployment across various Linux hosts by leveraging Ansible, to function both as gateways and agents within your observability architecture. Utilizing the OpenTelemetry Collector in this dual capacity enables a robust collection and forwarding of metrics, traces, and logs to analysis and visualization platforms, such as Grafana Cloud.
+
+Here, we outline a strategy for deploying and managing the OpenTelemetry Collector's scalable instances throughout your infrastructure with Ansible, enhancing your overall monitoring strategy and data visualization capabilities in Grafana Cloud.
+
+## Before You Begin
+
+To follow this guide, ensure you have:
+
+- Linux hosts.
+- SSH access to each of these Linux hosts.
+- Account permissions to install and configure the OpenTelemetry Collector on these hosts.
+
+## Install the Grafana Ansible collection
+
+The [Grafana Agent role](https://github.com/grafana/grafana-ansible-collection/tree/main/roles/grafana_agent) is available in the Grafana Ansible collection as of the 1.1.0 release.
+
+To install the Grafana Ansible collection, run this command:
+
+```
+ansible-galaxy collection install grafana.grafana
+```
+
+## Create an Ansible inventory file
+
+Next, you will set up your hosts and create an inventory file.
+
+1. Create your hosts and add public SSH keys to them.
+
+ This example uses eight Linux hosts: two Ubuntu hosts, two CentOS hosts, two Fedora hosts, and two Debian hosts.
+
+1. Create an Ansible inventory file.
+
+ The Ansible inventory, which resides in a file named `inventory`, looks similar to this:
+
+ ```
+ 146.190.208.216 # hostname = ubuntu-01
+ 146.190.208.190 # hostname = ubuntu-02
+ 137.184.155.128 # hostname = centos-01
+ 146.190.216.129 # hostname = centos-02
+ 198.199.82.174 # hostname = debian-01
+ 198.199.77.93 # hostname = debian-02
+ 143.198.182.156 # hostname = fedora-01
+ 143.244.174.246 # hostname = fedora-02
+ ```
+
+ > **Note**: If you are copying the above file, remove the comments (#).
+
+1. Create an `ansible.cfg` file within the same directory as `inventory`, with the following values:
+ ```
+ [defaults]
+ inventory = inventory # Path to the inventory file
+ private_key_file = ~/.ssh/id_rsa # Path to my private SSH Key
+ remote_user=root
+ ```
+
+## Use the OpenTelemetry Collector Ansible Role
+
+Next, you'll define an Ansible playbook to apply your chosen or created OpenTelemetry Collector role across your hosts.
+
+Create a file named `deploy-opentelemetry.yml` in the same directory as your `ansible.cfg` and `inventory`.
+
+```yaml
+- name: Install OpenTelemetry Collector
+ hosts: all
+ become: true
+
+ vars:
+ grafana_cloud_api_key: <Your Grafana.com API Key> # Example - eyJrIjoiYjI3NjI5MGQxZTcyOTIxYTc0MDgzMGVhNDhlODNhYzA5OTk2Y2U5YiIsIm4iOiJhbnNpYmxldGVzdCIsImlkIjo2NTI5
+ metrics_username: <prometheus-username> # Example - 825019
+ logs_username: <loki-username> # Example - 411478
+ prometheus_url: <prometheus-push-url> # Example - https://prometheus-us-central1.grafana.net/api/prom/push
+ loki_url: <loki-push-url> # Example - https://logs-prod-017.grafana.net/loki/api/v1/push
+ tempo_url: <tempo-push-url> # Example - tempo-prod-04-prod-us-east-0.grafana.net:443
+ traces_username: <tempo-username> # Example - 411478
+
+ tasks:
+ - name: Install OpenTelemetry Collector
+ ansible.builtin.include_role:
+ name: grafana.grafana.opentelemetry_collector
+ vars:
+ otel_collector_extensions:
+ basicauth/grafana_cloud_tempo:
+ # https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/extension/basicauthextension
+ client_auth:
+ username: "{{ traces_username }}"
+ password: "{{ grafana_cloud_api_key }}"
+ basicauth/grafana_cloud_prometheus:
+ client_auth:
+ username: "{{ prometheus_url }}"
+ password: "{{ grafana_cloud_api_key }}"
+ basicauth/grafana_cloud_loki:
+ client_auth:
+ username: "{{ logs_username }}"
+ password: "{{ grafana_cloud_api_key }}"
+
+
+ otel_collector_receivers:
+ otlp:
+ # https://github.com/open-telemetry/opentelemetry-collector/tree/main/receiver/otlpreceiver
+ protocols:
+ grpc:
+ http:
+ hostmetrics:
+ # Optional. Host Metrics Receiver added as an example of Infra Monitoring capabilities of the OpenTelemetry Collector
+ # https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver/hostmetricsreceiver
+ scrapers:
+ load:
+ memory:
+
+ otel_collector_processors:
+ batch:
+ # https://github.com/open-telemetry/opentelemetry-collector/tree/main/processor/batchprocessor
+ resourcedetection:
+ # Enriches telemetry data with resource information from the host
+ # https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/processor/resourcedetectionprocessor
+ detectors: ["env", "system"]
+ override: false
+ transform/add_resource_attributes_as_metric_attributes:
+ # https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/processor/transformprocessor
+ error_mode: ignore
+ metric_statements:
+ - context: datapoint
+ statements:
+ - set(attributes["deployment.environment"], resource.attributes["deployment.environment"])
+ - set(attributes["service.version"], resource.attributes["service.version"])
+
+ otel_collector_exporters:
+ otlp/grafana_cloud_traces:
+ # https://github.com/open-telemetry/opentelemetry-collector/tree/main/exporter/otlpexporter
+ endpoint: "{{ tempo_url }}"
+ auth:
+ authenticator: basicauth/grafana_cloud_tempo
+
+ loki/grafana_cloud_logs:
+ # https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter/lokiexporter
+ endpoint: "{{ loki_url }}"
+ auth:
+ authenticator: basicauth/grafana_cloud_loki
+
+ prometheusremotewrite/grafana_cloud_metrics:
+ # https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter/prometheusremotewriteexporter
+ endpoint: "{{ prometheus_url }}"
+ add_metric_suffixes: false
+ auth:
+ authenticator: basicauth/grafana_cloud_prometheus
+
+
+ otel_collector_service:
+ extensions: [basicauth/grafana_cloud_tempo, basicauth/grafana_cloud_prometheus, basicauth/grafana_cloud_loki]
+ pipelines:
+ traces:
+ receivers: [otlp]
+ processors: [resourcedetection, batch]
+ exporters: [otlp/grafana_cloud_traces]
+ metrics:
+ receivers: [otlp, hostmetrics]
+ processors: [resourcedetection, transform/add_resource_attributes_as_metric_attributes, batch]
+ exporters: [prometheusremotewrite/grafana_cloud_metrics]
+ logs:
+ receivers: [otlp]
+ processors: [resourcedetection, batch]
+ exporters: [loki/grafana_cloud_logs]
+```
+
+> **Note:** You'll need to adjust the configuration to match the specific telemetry data you intend to collect and where you plan to forward it. The configuration snippet above is a basic example designed for traces, logs and metrics collection via OTLP and forwarding to Grafana Cloud.
+
+
+## Running the Ansible Playbook
+
+Deploy the OpenTelemetry Collector across your hosts by executing:
+
+```sh
+ansible-playbook deploy-opentelemetry.yml
+```
+
+## Verifying Data Ingestion into Grafana Cloud
+
+Once you've deployed the OpenTelemetry Collector and configured it to forward data to Grafana Cloud, you can verify the ingestion:
+
+- Log into your Grafana Cloud instance.
+- Navigate to the **Explore** section.
+- Select your Grafana Cloud Prometheus data source from the dropdown menu.
+- Execute a query to confirm the reception of metrics, e.g., `{instance="ubuntu-01"}` for a specific host's metrics.
+
+## Visualizing Metrics and Logs in Grafana
+
+With data successfully ingested into Grafana Cloud, you can create custom dashboards to visualize the metrics, logs and traces received from your OpenTelemetry Collector. Utilize Grafana's powerful query builder and visualization tools to derive insights from your data effectively.
+
+- Consider creating dashboards that offer a comprehensive overview of your infrastructure's health and performance.
+- Utilize Grafana's alerting features to proactively manage and respond to issues identified through the OpenTelemetry data.
+
+This guide simplifies the deployment of the OpenTelemetry Collector across multiple Linux hosts using Ansible and illustrates how to visualize collected telemetry data in Grafana Cloud. Tailor the Ansible roles, OpenTelemetry Collector configurations, and Grafana dashboards to suit your specific monitoring and observability requirements.
diff --git a/ansible_collections/grafana/grafana/examples/monitor-multiple-instances.md b/ansible_collections/grafana/grafana/examples/monitor-multiple-instances-agent.md
index d624c7ec4..d624c7ec4 100644
--- a/ansible_collections/grafana/grafana/examples/monitor-multiple-instances.md
+++ b/ansible_collections/grafana/grafana/examples/monitor-multiple-instances-agent.md
diff --git a/ansible_collections/grafana/grafana/examples/opentelemetry-collector.yml b/ansible_collections/grafana/grafana/examples/opentelemetry-collector.yml
new file mode 100644
index 000000000..445a3a265
--- /dev/null
+++ b/ansible_collections/grafana/grafana/examples/opentelemetry-collector.yml
@@ -0,0 +1,43 @@
+- name: Install OpenTelemetry Collector
+ hosts: all
+ become: true
+
+ tasks:
+ - name: Install OpenTelemetry Collector
+ ansible.builtin.include_role:
+ name: grafana.grafana.opentelemetry_collector
+ vars:
+ otel_collector_receivers:
+ otlp:
+ protocols:
+ grpc:
+ endpoint: 0.0.0.0:4317
+ http:
+ endpoint: 0.0.0.0:4318
+ otel_collector_processors:
+ batch:
+
+ otel_collector_exporters:
+ otlp:
+ endpoint: otelcol:4317
+
+ otel_collector_extensions:
+ health_check:
+ pprof:
+ zpages:
+
+ otel_collector_service:
+ extensions: [health_check, pprof, zpages]
+ pipelines:
+ traces:
+ receivers: [otlp]
+ processors: [batch]
+ exporters: [otlp]
+ metrics:
+ receivers: [otlp]
+ processors: [batch]
+ exporters: [otlp]
+ logs:
+ receivers: [otlp]
+ processors: [batch]
+ exporters: [otlp]
diff --git a/ansible_collections/grafana/grafana/examples/promtail-multiple-logs.yml b/ansible_collections/grafana/grafana/examples/promtail-multiple-logs.yml
new file mode 100644
index 000000000..d49f542ad
--- /dev/null
+++ b/ansible_collections/grafana/grafana/examples/promtail-multiple-logs.yml
@@ -0,0 +1,24 @@
+---
+- name: Deploy Promtail to ship logs to the local Loki instance
+ hosts: all
+ become: true
+ roles:
+ - role: grafana.grafana.promtail
+ vars:
+ promtail_clients:
+ - url: http://localhost:3100/loki/api/v1/push
+ promtail_scrape_configs:
+ - job_name: system
+ static_configs:
+ - targets:
+ - localhost
+ labels:
+ job: messages
+ instance: "{{ ansible_fqdn }}"
+ __path__: /var/log/messages
+ - targets:
+ - localhost
+ labels:
+ job: nginx
+ instance: "{{ ansible_fqdn }}"
+ __path__: /var/log/nginx/*.log
diff --git a/ansible_collections/grafana/grafana/plugins/modules/cloud_plugin.py b/ansible_collections/grafana/grafana/plugins/modules/cloud_plugin.py
index 9383beb05..6e28f0f88 100644
--- a/ansible_collections/grafana/grafana/plugins/modules/cloud_plugin.py
+++ b/ansible_collections/grafana/grafana/plugins/modules/cloud_plugin.py
@@ -14,7 +14,7 @@ author:
version_added: "0.0.1"
short_description: Manage Grafana Cloud Plugins
description:
- - Create, Update and delete Grafana Cloud stacks using Ansible.
+ - Create, Update and delete Grafana Cloud plugins using Ansible.
requirements: [ "requests >= 1.0.0" ]
notes:
- Does not support C(check_mode).
diff --git a/ansible_collections/grafana/grafana/requirements.txt b/ansible_collections/grafana/grafana/requirements.txt
index aff353eae..2d38dea57 100644
--- a/ansible_collections/grafana/grafana/requirements.txt
+++ b/ansible_collections/grafana/grafana/requirements.txt
@@ -1,3 +1,3 @@
-yamllint==1.33.0
-ansible-lint>=6.13.1, <7.0.0
-pylint>=2.16.2,<3.0.0
+yamllint==1.35.1
+ansible-lint>=6.13.1, <25.0.0
+pylint>=2.16.2,<4.0.0
diff --git a/ansible_collections/grafana/grafana/requirements.yml b/ansible_collections/grafana/grafana/requirements.yml
index c1917b408..8d80a4d22 100644
--- a/ansible_collections/grafana/grafana/requirements.yml
+++ b/ansible_collections/grafana/grafana/requirements.yml
@@ -4,3 +4,5 @@ collections:
type: git
- name: https://github.com/ansible-collections/community.grafana.git
type: git
+ - name: https://github.com/ansible-collections/ansible.posix.git
+ type: git
diff --git a/ansible_collections/grafana/grafana/roles/alloy/README.md b/ansible_collections/grafana/grafana/roles/alloy/README.md
new file mode 100644
index 000000000..f1f0198b4
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/alloy/README.md
@@ -0,0 +1,71 @@
+# Ansible Role for Alloy
+
+This Ansible role to install and configure [Alloy](https://grafana.com/docs/alloy/latest/), which can be used to collect traces, metrics, and logs.
+
+## Requirements
+
+Please ensure that `curl` is intalled on Ansible controller.
+
+## Role Variables
+
+Available variables with their default values are listed below (`defaults/main.yml`):
+
+## Role Variables
+
+| Variable Name | Description | Default Value |
+|-----------------------|----------------------------------------------------------------------|---------------------------------------------------------------------|
+| `version` | The version of Grafana Alloy to be installed. | "1.0.0" |
+| `arch_mapping` | A mapping of common architecture names to Grafana Alloy binaries. | `{'x86_64': 'amd64', 'aarch64': 'arm64', 'armv7l': 'armhf', 'i386': 'i386', 'ppc64le': 'ppc64le'}` |
+| `arch` | The architecture of the current machine. | Based on `ansible_architecture` lookup, defaults to 'amd64'. |
+| `binary_url` | URL to Grafana Alloy binary for the specific version and architecture. | Constructed URL based on `version` and `arch` variables. |
+| `service_name` | The name to be used for the Grafana Alloy service. | "alloy" |
+| `installation_dir` | Directory where Grafana Alloy is to be installed. | "/etc/alloy" |
+| `environment_file` | Name of the environment file for the Grafana Alloy service. | "service.env" |
+| `config_dir` | Directory for Grafana Alloy configuration. | "/etc/alloy" |
+| `config_file` | Configuration file name for Grafana Alloy. | "config.river" |
+| `service_user` | User under which the Grafana Alloy service will run. | "alloy" |
+| `service_group` | Group under which the Grafana Alloy service will run. | "alloy" |
+| `working_dir` | Working directory for the Grafana Alloy service. | "/etc/alloy" |
+| `env_file_vars` | Additional environment variables to be set in the service environment file. | {} (Empty dictionary) |
+| `alloy_flags_extra` | Extra flags to pass to the Alloy service. | {} (Empty dictionary) |
+| `start_after_service` | Specify an optional dependency service Alloy should start after. | '' (Empty string) |
+| `config` | Configuration template for Grafana Alloy. | Configuration script with Prometheus scrape and remote_write setup |
+
+
+## Example Playbook
+
+Including an example of how to use your role:
+```yaml
+- name: Install alloy
+ hosts: all
+ become: true
+
+ tasks:
+ - name: Install alloy
+ ansible.builtin.include_role:
+ name: grafana.grafana.alloy
+ vars:
+ config: |
+ prometheus.scrape "default" {
+ targets = [{"__address__" = "localhost:12345"}]
+ forward_to = [prometheus.remote_write.prom.receiver]
+ }
+ prometheus.remote_write "prom" {
+ endpoint {
+ url = "https://prometheus-prod-13-prod-us-east-0.grafana.net/api/prom/push"
+
+ basic_auth {
+ username = "149xxx"
+ password = "glc_xxx"
+ }
+ }
+ }
+```
+
+## License
+
+See [LICENSE](https://github.com/grafana/grafana-ansible-collection/blob/main/LICENSE)
+
+## Author Information
+
+- [Ishan Jain](https://github.com/ishanjainn)
diff --git a/ansible_collections/grafana/grafana/roles/alloy/defaults/main.yml b/ansible_collections/grafana/grafana/roles/alloy/defaults/main.yml
new file mode 100644
index 000000000..e9de09732
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/alloy/defaults/main.yml
@@ -0,0 +1,45 @@
+version: "1.0.0"
+
+arch_mapping:
+ x86_64: amd64
+ aarch64: arm64
+ armv7l: armhf
+ i386: i386
+ ppc64le: ppc64le
+
+arch: "{{ arch_mapping[ansible_architecture] | default('amd64') }}"
+
+binary_url: "https://github.com/grafana/alloy/releases/download/v{{ version }}/alloy-linux-{{ arch }}.zip"
+
+service_name: "alloy"
+
+installation_dir: "/etc/alloy"
+
+environment_file: "service.env"
+
+config_dir: "/etc/alloy"
+
+config_file: "config.alloy"
+
+service_user: "alloy"
+
+service_group: "alloy"
+
+working_dir: "/etc/alloy"
+
+env_file_vars: {}
+
+alloy_flags_extra: {}
+
+start_after_service: ''
+
+config: |
+ prometheus.scrape "default" {
+ targets = [{"__address__" = "localhost:12345"}]
+ forward_to = [prometheus.remote_write.prom.receiver]
+ }
+ prometheus.remote_write "prom" {
+ endpoint {
+ url = "http://mimir:9009/api/v1/push"
+ }
+ }
diff --git a/ansible_collections/grafana/grafana/roles/alloy/handlers/main.yml b/ansible_collections/grafana/grafana/roles/alloy/handlers/main.yml
new file mode 100644
index 000000000..40d72dec7
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/alloy/handlers/main.yml
@@ -0,0 +1,5 @@
+- name: Restart alloy
+ ansible.builtin.systemd:
+ name: "{{ service_name }}"
+ state: restarted
+ become: true
diff --git a/ansible_collections/grafana/grafana/roles/alloy/meta/main.yml b/ansible_collections/grafana/grafana/roles/alloy/meta/main.yml
new file mode 100644
index 000000000..589eb2fbc
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/alloy/meta/main.yml
@@ -0,0 +1,24 @@
+galaxy_info:
+ author: Ishan Jain
+ description: Role to Install and Configure Grafana Alloy
+ license: "GPL-3.0-or-later"
+ min_ansible_version: "2.11"
+ platforms:
+ - name: Fedora
+ versions:
+ - "all"
+ - name: Debian
+ versions:
+ - "all"
+ - name: Ubuntu
+ versions:
+ - "all"
+ - name: EL
+ versions:
+ - "all"
+ galaxy_tags:
+ - grafana
+ - observability
+ - monitoring
+ - opentelemetry
+ - telemetry
diff --git a/ansible_collections/grafana/grafana/roles/alloy/tasks/configure.yml b/ansible_collections/grafana/grafana/roles/alloy/tasks/configure.yml
new file mode 100644
index 000000000..6a9f7790a
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/alloy/tasks/configure.yml
@@ -0,0 +1,28 @@
+- name: Create alloy config directory
+ ansible.builtin.file:
+ path: "{{ config_dir }}"
+ state: directory
+ owner: "{{ service_user }}"
+ group: "{{ service_group }}"
+ mode: '0755'
+ become: true
+
+- name: Deploy alloy configuration file
+ ansible.builtin.template:
+ src: config.alloy.j2
+ dest: "{{ config_dir }}/{{ config_file }}"
+ owner: "{{ service_user }}"
+ group: "{{ service_group }}"
+ mode: '0644'
+ notify: Restart alloy
+ become: true
+
+- name: Deploy alloy environment file
+ ansible.builtin.template:
+ src: environment.j2
+ dest: "{{ config_dir }}/{{ environment_file }}"
+ owner: "{{ service_user }}"
+ group: "{{ service_group }}"
+ mode: '0644'
+ notify: Restart alloy
+ become: true
diff --git a/ansible_collections/grafana/grafana/roles/alloy/tasks/install.yml b/ansible_collections/grafana/grafana/roles/alloy/tasks/install.yml
new file mode 100644
index 000000000..967d73c3f
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/alloy/tasks/install.yml
@@ -0,0 +1,51 @@
+- name: Install unzip
+ ansible.builtin.package:
+ name: unzip
+ state: present
+ become: true
+
+- name: Create alloy group
+ ansible.builtin.group:
+ name: "{{ service_group }}"
+ system: true
+ become: true
+
+- name: Create alloy user
+ ansible.builtin.user:
+ name: "{{ service_user }}"
+ group: "{{ service_group }}"
+ system: true
+ create_home: false # Appropriate for a system user, usually doesn't need a home directory
+ become: true
+
+- name: Download alloy binary
+ ansible.builtin.get_url:
+ url: "{{ binary_url }}"
+ dest: "/tmp/alloy-{{ version }}.zip"
+ mode: '0755'
+ become: true
+ register: download_result
+
+- name: Remove existing alloy installation directory
+ ansible.builtin.file:
+ path: "{{ installation_dir }}"
+ state: absent
+ become: true
+ when: download_result.changed
+
+- name: Create alloy installation directory
+ ansible.builtin.file:
+ path: "{{ installation_dir }}"
+ state: directory
+ mode: '0755'
+ owner: "{{ service_user }}"
+ group: "{{ service_group }}"
+ become: true
+
+- name: Extract alloy binary
+ ansible.builtin.unarchive:
+ src: "/tmp/alloy-{{ version }}.zip"
+ dest: "{{ installation_dir }}"
+ remote_src: yes
+ become: true
+ register: extract_result
diff --git a/ansible_collections/grafana/grafana/roles/alloy/tasks/main.yml b/ansible_collections/grafana/grafana/roles/alloy/tasks/main.yml
new file mode 100644
index 000000000..49a6dd69a
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/alloy/tasks/main.yml
@@ -0,0 +1,11 @@
+- name: Install alloy
+ include_tasks: install.yml
+ tags: [install]
+
+- name: Configure alloy
+ include_tasks: configure.yml
+ tags: [configure]
+
+- name: Manage alloy service
+ include_tasks: service.yml
+ tags: [service]
diff --git a/ansible_collections/grafana/grafana/roles/alloy/tasks/service.yml b/ansible_collections/grafana/grafana/roles/alloy/tasks/service.yml
new file mode 100644
index 000000000..0d5d42afe
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/alloy/tasks/service.yml
@@ -0,0 +1,19 @@
+- name: Copy alloy systemd unit file
+ ansible.builtin.template:
+ src: alloy.service.j2
+ dest: /etc/systemd/system/{{ service_name }}.service
+ mode: '0644'
+ become: true
+ notify: Restart alloy
+
+- name: Reload systemd daemon to pick up changes
+ ansible.builtin.systemd:
+ daemon_reload: yes
+ become: true
+
+- name: Ensure alloy service is enabled and running
+ ansible.builtin.service:
+ name: "{{ service_name }}"
+ enabled: yes
+ state: started
+ become: true
diff --git a/ansible_collections/grafana/grafana/roles/alloy/templates/alloy.service.j2 b/ansible_collections/grafana/grafana/roles/alloy/templates/alloy.service.j2
new file mode 100644
index 000000000..5e56b3306
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/alloy/templates/alloy.service.j2
@@ -0,0 +1,32 @@
+[Unit]
+Description=Vendor-neutral programmable observability pipelines.
+Documentation=https://grafana.com/docs/alloy/
+Wants=network-online.target
+After=network-online.target{{ ' ' + start_after_service if start_after_service is defined else '' }}
+
+[Service]
+Restart=always
+User={{ service_user }}
+Group={{ service_group }}
+Environment=HOSTNAME=%H
+EnvironmentFile={{ installation_dir }}/{{ environment_file }}
+WorkingDirectory={{ working_dir }}
+ExecStart={{ installation_dir }}/alloy-linux-{{ arch }} run \
+{% for flag, flag_value in alloy_flags_extra.items() %}
+{% if not flag_value %}
+ --{{ flag }} \
+{% elif flag_value is string %}
+ --{{ flag }}={{ flag_value }} \
+{% elif flag_value is sequence %}
+{% for flag_value_item in flag_value %}
+ --{{ flag }}={{ flag_value_item }} \
+{% endfor %}
+{% endif %}
+{% endfor %}
+ $CUSTOM_ARGS --storage.path={{ working_dir }} $CONFIG_FILE
+ExecReload=/usr/bin/env kill -HUP $MAINPID
+TimeoutStopSec=20s
+SendSIGKILL=no
+
+[Install]
+WantedBy=multi-user.target
diff --git a/ansible_collections/grafana/grafana/roles/alloy/templates/config.alloy.j2 b/ansible_collections/grafana/grafana/roles/alloy/templates/config.alloy.j2
new file mode 100644
index 000000000..26278f366
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/alloy/templates/config.alloy.j2
@@ -0,0 +1 @@
+{{ config }}
diff --git a/ansible_collections/grafana/grafana/roles/alloy/templates/environment.j2 b/ansible_collections/grafana/grafana/roles/alloy/templates/environment.j2
new file mode 100644
index 000000000..5d6de6a61
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/alloy/templates/environment.j2
@@ -0,0 +1,10 @@
+{{ ansible_managed | comment }}
+# Grafana Alloy Environment File
+CONFIG_FILE="{{ config_dir }}/{{ config_file }}"
+
+GOMAXPROCS={{ ansible_processor_vcpus|default(ansible_processor_count) }}
+RESTART_ON_UPGRADE=true
+
+{% for key, value in env_file_vars.items() %}
+{{key}}={{value}}
+{% endfor %}
diff --git a/ansible_collections/grafana/grafana/roles/grafana/README.md b/ansible_collections/grafana/grafana/roles/grafana/README.md
index eb00b3f25..c5aa738f5 100644
--- a/ansible_collections/grafana/grafana/roles/grafana/README.md
+++ b/ansible_collections/grafana/grafana/roles/grafana/README.md
@@ -107,6 +107,18 @@ grafana_alert_notifications:
uid: channel2
```
+**NOTE 2**: setting the `http_addr`,`http_port`,`domain` and `root_url` parameters under the `grafana_server` variable has no effect, the `grafana_address`, `grafana_port`, `grafana_domain` and `grafana_url` values are used instead ( from [defaults/main.yml](defaults/main.yml) or as set variables).
+An example snippet:
+```yaml
+grafana_domain: "{{ inventory_hostname }}"
+grafana_url: "https://{{ inventory_hostname }}:3000"
+grafana_address: 0.0.0.0
+grafana_port: 3000
+
+grafana_server:
+ enforce_domain: false
+```
+
## Supported CPU Architectures
Historically packages were taken from different channels according to CPU architecture. Specifically, armv6/armv7 and aarch64/arm64 packages were via [unofficial packages distributed by fg2it](https://github.com/fg2it/grafana-on-raspberry). Now that Grafana publishes official ARM builds, all packages are taken from the official [Debian/Ubuntu](http://docs.grafana.org/installation/debian/#installing-on-debian-ubuntu) or [RPM](http://docs.grafana.org/installation/rpm/) packages.
diff --git a/ansible_collections/grafana/grafana/roles/grafana/defaults/main.yml b/ansible_collections/grafana/grafana/roles/grafana/defaults/main.yml
index 12f3d7cc7..3c640973c 100644
--- a/ansible_collections/grafana/grafana/roles/grafana/defaults/main.yml
+++ b/ansible_collections/grafana/grafana/roles/grafana/defaults/main.yml
@@ -145,6 +145,21 @@ grafana_ldap: {}
# - group_dn: "cn=alternative_admins,ou=groups,dc=grafana,dc=org"
# org_role: Admin
+# Grafana KeyCloak auth
+grafana_auth_generic_oauth: {}
+# enabled: true
+# name: "Keycloak-OAuth"
+# allow_sign_up: true
+# client_id: YOUR_APP_CLIENT_ID
+# client_secret: YOUR_APP_CLIENT_SECRET
+# scopes: "openid email profile offline_access roles"
+# email_attribute_path: email
+# login_attribute_path: username
+# name_attribute_path: full_name
+# auth_url: "https://<PROVIDER_DOMAIN>/realms/<REALM_NAME>/protocol/openid-connect/auth"
+# token_url: "https://<PROVIDER_DOMAIN>/realms/<REALM_NAME>/protocol/openid-connect/token"
+# api_url: "https://<PROVIDER_DOMAIN>/realms/<REALM_NAME>/protocol/openid-connect/userinfo"
+
grafana_session: {}
# provider: file
# provider_config: "sessions"
diff --git a/ansible_collections/grafana/grafana/roles/grafana/meta/main.yml b/ansible_collections/grafana/grafana/roles/grafana/meta/main.yml
index 564b8bcc5..a8dbc3343 100644
--- a/ansible_collections/grafana/grafana/roles/grafana/meta/main.yml
+++ b/ansible_collections/grafana/grafana/roles/grafana/meta/main.yml
@@ -2,7 +2,7 @@
galaxy_info:
author: "Grafana"
description: "Grafana - platform for analytics and monitoring"
- license: "MIT"
+ license: "GPL-3.0-or-later"
min_ansible_version: "2.9"
platforms:
- name: Ubuntu
diff --git a/ansible_collections/grafana/grafana/roles/grafana/tasks/dashboards.yml b/ansible_collections/grafana/grafana/roles/grafana/tasks/dashboards.yml
index c3f154f7b..3fedb1f4d 100644
--- a/ansible_collections/grafana/grafana/roles/grafana/tasks/dashboards.yml
+++ b/ansible_collections/grafana/grafana/roles/grafana/tasks/dashboards.yml
@@ -116,6 +116,8 @@
ansible.builtin.copy:
src: "{{ item }}"
dest: "{{ grafana_data_dir }}/dashboards/{{ item | basename }}"
+ owner: root
+ group: grafana
mode: "0640"
with_fileglob:
- "{{ __tmp_dashboards.path }}/*"
diff --git a/ansible_collections/grafana/grafana/roles/grafana/tasks/datasources.yml b/ansible_collections/grafana/grafana/roles/grafana/tasks/datasources.yml
index 6fc56ed3c..70b114516 100644
--- a/ansible_collections/grafana/grafana/roles/grafana/tasks/datasources.yml
+++ b/ansible_collections/grafana/grafana/roles/grafana/tasks/datasources.yml
@@ -5,7 +5,7 @@
grafana_user: "{{ grafana_security.admin_user }}"
grafana_password: "{{ grafana_security.admin_password }}"
name: "{{ item.name }}"
- url: "{{ item.url }}"
+ ds_url: "{{ item.url }}"
ds_type: "{{ item.type }}"
access: "{{ item.access | default(omit) }}"
is_default: "{{ item.isDefault | default(omit) }}"
diff --git a/ansible_collections/grafana/grafana/roles/grafana/tasks/preflight.yml b/ansible_collections/grafana/grafana/roles/grafana/tasks/preflight.yml
index d209abc5d..60f104428 100644
--- a/ansible_collections/grafana/grafana/roles/grafana/tasks/preflight.yml
+++ b/ansible_collections/grafana/grafana/roles/grafana/tasks/preflight.yml
@@ -34,7 +34,7 @@
- name: "Fail on bad database configuration"
ansible.builtin.fail:
- msg: "Wrong database configuration. Please look at http://docs.grafana.org/installation/configuration/#database"
+ msg: "Invalid database configuration. Please look at http://docs.grafana.org/installation/configuration/#database"
when: "( grafana_database.type == 'sqlite3' and grafana_database.url is defined ) or
( grafana_database.type != 'sqlite3' and grafana_database.path is defined ) or
( grafana_database.type == 'sqlite3' and grafana_database.host is defined ) or
@@ -42,12 +42,19 @@
( grafana_database.type == 'sqlite3' and grafana_database.password is defined ) or
( grafana_database.type == 'sqlite3' and grafana_database.server_cert_name is defined )"
-- name: "Fail when grafana domain isn't properly configured"
- ansible.builtin.fail:
- msg: "Check server configuration. Please look at http://docs.grafana.org/installation/configuration/#server"
- when:
- - "grafana_server.root_url is defined"
- - "grafana_server.root_url is search(grafana_server.domain)"
+- name: "Fail when grafana_server isn't properly configured"
+ ansible.builtin.assert:
+ that: item.option not in grafana_server
+ fail_msg: "Invalid grafana_server configuration parameter: {{ item.option }}. Use variable {{ item.role_var }} instead"
+ loop:
+ - option: http_addr
+ role_var: grafana_address
+ - option: http_port
+ role_var: grafana_port
+ - option: domain
+ role_var: grafana_domain
+ - option: root_url
+ role_var: grafana_url
- name: "Fail when grafana_api_keys uses invalid role names"
ansible.builtin.fail:
diff --git a/ansible_collections/grafana/grafana/roles/grafana/templates/grafana.ini.j2 b/ansible_collections/grafana/grafana/roles/grafana/templates/grafana.ini.j2
index df6eab14f..a18af8bea 100644
--- a/ansible_collections/grafana/grafana/roles/grafana/templates/grafana.ini.j2
+++ b/ansible_collections/grafana/grafana/roles/grafana/templates/grafana.ini.j2
@@ -212,3 +212,11 @@ provider = {{ grafana_image_storage.provider }}
{{ k }} = {{ v }}
{% endfor %}
{% endif %}
+
+# Oauth_Keycloack
+{% if grafana_auth_generic_oauth != {} %}
+[auth.generic_oauth]
+{% for k,v in grafana_auth_generic_oauth.items() %}
+{{ k }} = {{ v }}
+{% endfor %}
+{% endif %}
diff --git a/ansible_collections/grafana/grafana/roles/grafana_agent/README.md b/ansible_collections/grafana/grafana/roles/grafana_agent/README.md
index 6e7eaa942..5301aa58c 100644
--- a/ansible_collections/grafana/grafana/roles/grafana_agent/README.md
+++ b/ansible_collections/grafana/grafana/roles/grafana_agent/README.md
@@ -1,4 +1,7 @@
-# Role Name
+|![](https://upload.wikimedia.org/wikipedia/commons/thumb/1/17/Warning.svg/156px-Warning.svg.png) | This Ansible role is now in maintenance mode only. We recommend using the Grafana Alloy Role for future deployments and updates.
+|---|---|
+
+# Ansible Role for Grafana Agent
Ansible Role to deploy Grafana Agent on Linux hosts. Using this Role, Grafana Agent can be deployed on RedHat, Ubuntu, Debian, CentOS
and Fedora linux distributions.
@@ -22,6 +25,7 @@ All variables which can be overridden are stored in [./defaults/main.yaml](./def
| `grafana_agent_config_dir` | `/etc/grafana-agent` | directory to store the configuration files in |
| `grafana_agent_config_filename` | `config.yaml` | name of the configuration file for the agent |
| `grafana_agent_env_file` | `service.env` | name of the environment file loaded by the system unit file |
+| `grafana_agent_service_extra` | "" | dictionary of additional custom settings for the systemd service file |
| `grafana_agent_local_tmp_dir` | `/tmp/grafana-agent` | temporary directory to create on the controller/localhost where the archive will be downloaded to |
| `grafana_agent_data_dir` | `/var/lib/grafana-agent` | the data directory to create for the wal and positions |
| `grafana_agent_wal_dir` | `"{{ grafana_agent_data_dir }}/data"` | wal directory to use, should be a sub-folder of grafana_agent_data_dir, will automatically be created when the agent starts |
diff --git a/ansible_collections/grafana/grafana/roles/grafana_agent/defaults/main.yaml b/ansible_collections/grafana/grafana/roles/grafana_agent/defaults/main.yaml
index 4ea702db0..31acc5bc6 100644
--- a/ansible_collections/grafana/grafana/roles/grafana_agent/defaults/main.yaml
+++ b/ansible_collections/grafana/grafana/roles/grafana_agent/defaults/main.yaml
@@ -20,6 +20,9 @@ grafana_agent_config_filename: config.yaml
# name of the environment file loaded by the system unit file
grafana_agent_env_file: service.env
+# dictionary of additional custom settings for the systemd service file
+grafana_agent_service_extra: {}
+
# temporary directory to create on the controller/localhost where the archive will be downloaded to
grafana_agent_local_tmp_dir: /tmp/grafana-agent
diff --git a/ansible_collections/grafana/grafana/roles/grafana_agent/templates/grafana-agent.service.j2 b/ansible_collections/grafana/grafana/roles/grafana_agent/templates/grafana-agent.service.j2
index 8a52b5c53..b4d5bcef6 100644
--- a/ansible_collections/grafana/grafana/roles/grafana_agent/templates/grafana-agent.service.j2
+++ b/ansible_collections/grafana/grafana/roles/grafana_agent/templates/grafana-agent.service.j2
@@ -14,6 +14,9 @@ WorkingDirectory={{ grafana_agent_data_dir }}
Environment={{key}}={{value}}
{% endfor %}
EnvironmentFile={{ grafana_agent_config_dir }}/{{ grafana_agent_env_file}}
+{% for key, value in grafana_agent_service_extra.items() %}
+{{ key }}={{ value }}
+{% endfor %}
{% if grafana_agent_mode == 'flow' %}
ExecStart={{ grafana_agent_install_dir }}/{{ grafana_agent_binary }} run \
diff --git a/ansible_collections/grafana/grafana/roles/loki/README.md b/ansible_collections/grafana/grafana/roles/loki/README.md
new file mode 100644
index 000000000..73ee99554
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/loki/README.md
@@ -0,0 +1,238 @@
+# Ansible role - Loki
+
+[![License](https://img.shields.io/github/license/grafana/grafana-ansible-collection)](LICENSE)
+
+The Ansible Loki Role allows you to effortlessly deploy and manage [Loki](https://grafana.com/oss/loki/), the log aggregation system. This role is tailored for operating systems such as **RedHat**, **Rocky Linux**, **AlmaLinux**, **Ubuntu**, and **Debian**.
+
+**🔑 Key Features**
+- **📦 Out-of-the-box Deployment**: Get Loki up and running quickly with default configurations.
+- **🧹 Effortless Uninstall**: Easily remove Loki from your system using the "loki_uninstall" tag.
+- **🔔 Example Alerting Rules**: Benefit from the included sample Ruler configuration. Utilize the provided example alerting rules as a reference guide for structuring your own rules effectively.
+
+## Table of Content
+
+- [Requirements](#requirements)
+- [Role Variables](#role-variables)
+- - [Default Variables - `defaults/main.yml`](#default-variables---defaultsmainyml)
+- - [Alerting Rules Variables](#alerting-rules-variables)
+- - [Additional Config Variables for `/etc/loki/config.yml`](#additional-config-variables-for-etclokiconfigyml)
+- [Playbook](#playbook)
+
+## Requirements
+
+- Ansible 2.10+
+
+## Role Variables
+
+- 📚 Official Loki configuration [documentation](https://grafana.com/docs/loki/latest/configuration/)
+- 🏗️ Upgrading Loki [documentation](https://grafana.com/docs/loki/latest/upgrading/)
+
+### **Default Variables - `defaults/main.yml`**
+
+```yaml
+loki_version: "latest"
+```
+The version of Loki to download and deploy. Supported standard version "3.0.0" format or "latest".
+
+```yaml
+loki_http_listen_port: 3100
+```
+The TCP port on which Loki listens. By default, it listens on port `3100`.
+
+```yaml
+loki_http_listen_address: "0.0.0.0"
+```
+The address on which Loki listens for HTTP requests. By default, it listens on all interfaces.
+
+```yaml
+loki_expose_port: false
+```
+By default, this is set to `false`. It supports only simple `firewalld` configurations. If set to `true`, a firewalld rule is added to expose the TCP `loki_http_listen_port`. If set to `false`, the system ensures that the rule is not present. If the `firewalld.service` is not active, all firewalld tasks are skipped.
+
+```yaml
+loki_download_url_rpm: "https://github.com/grafana/loki/releases/download/v{{ loki_version }}/loki-{{ loki_version }}.{{ __loki_arch }}.rpm"
+```
+The default download URL for the Loki rpm package from GitHub.
+
+```yaml
+loki_download_url_deb: "https://github.com/grafana/loki/releases/download/v{{ loki_version }}/loki_{{ loki_version }}_{{ __loki_arch }}.deb"
+```
+The default download URL for the Loki deb package from GitHub.
+
+```yaml
+loki_working_path: "/var/lib/loki"
+```
+⚠️ Avoid using `/tmp/loki` as the working path. This role removes the /tmp/loki directory and replaces it with the specified working path to ensure a permanent configuration.
+
+```yaml
+loki_ruler_alert_path: "{{ loki_working_path }}/rules/fake"
+```
+The variable defines the location where the `ruler` configuration `alerts` are stored.
+⚠️ Please note that the role currently does not support multi-tenancy for alerting, so there is no need to modify this variable for different tenants.
+
+```yaml
+loki_auth_enabled: false
+```
+Enables authentication through the X-Scope-OrgID header, which must be present if `true`. If `false`, the OrgID will always be set to `fake`.
+
+```yaml
+loki_target: "all"
+```
+A comma-separated list of components to run. The default value 'all' runs Loki in single binary mode.
+Supported values: `all`, `compactor`, `distributor`, `ingester`, `querier`, `query-scheduler`, `ingester-querier`, `query-frontend`, `index-gateway`, `ruler`, `table-manager`, `read`, `write`.
+
+```yaml
+loki_ballast_bytes: 0
+```
+The amount of virtual memory in bytes to reserve as ballast in order to optimize garbage collection.
+
+```yaml
+loki_server:
+ http_listen_address: "{{ loki_http_listen_address }}"
+ http_listen_port: "{{ loki_http_listen_port }}"
+ grpc_listen_port: 9096
+```
+Configures the `server` of the launched module(s). [All possible values for `server`](https://grafana.com/docs/loki/latest/configuration/#server)
+
+```yaml
+loki_common:
+ instance_addr: 127.0.0.1
+ path_prefix: "{{ loki_working_path }}"
+ storage:
+ filesystem:
+ chunks_directory: "{{ loki_working_path }}/chunks"
+ rules_directory: "{{ loki_working_path }}/rules"
+ replication_factor: 1
+ ring:
+ kvstore:
+ store: inmemory
+```
+Common configuration to be shared between multiple modules. If a more specific configuration is given in other sections, the related configuration within this section will be ignored. [All possible values for `common`](https://grafana.com/docs/loki/latest/configuration/#common)
+
+```yaml
+loki_query_range:
+ results_cache:
+ cache:
+ embedded_cache:
+ enabled: true
+ max_size_mb: 100
+```
+The `query_range` block configures the query splitting and caching in the Loki query-frontend. [All possible values for `query_range`](https://grafana.com/docs/loki/latest/configuration/#query_range)
+
+```yaml
+loki_schema_config:
+ configs:
+ - from: 2020-10-24
+ store: tsdb
+ object_store: filesystem
+ schema: v13
+ index:
+ prefix: index_
+ period: 24h
+```
+Configures the chunk index schema and where it is stored. [All possible values for `schema_config`](https://grafana.com/docs/loki/latest/configuration/#schema_config)
+
+```yaml
+loki_ruler:
+ storage:
+ type: local
+ local:
+ directory: "{{ loki_working_path }}/rules"
+ rule_path: "{{ loki_working_path }}/rules_tmp"
+ ring:
+ kvstore:
+ store: inmemory
+ enable_api: true
+ enable_alertmanager_v2: true
+ alertmanager_url: http://localhost:9093
+```
+The `ruler` block configures the Loki ruler. [All possible values for `ruler`](https://grafana.com/docs/loki/latest/configuration/#ruler)
+
+```yaml
+loki_analytics:
+ reporting_enabled: false
+```
+Enable anonymous usage reporting. Disabled by default.
+
+
+### **Alerting Rules Variables**
+(not set by default)
+
+```yaml
+---
+loki_ruler_alerts:
+ - name: Logs.Nextcloud
+ rules:
+ - alert: NextcloudLoginFailed
+ expr: |
+ count by (filename,env,job) (count_over_time({job=~"nextcloud"} | json | message=~"Login failed.*" [10m])) > 4
+ for: 0m
+ labels:
+ severity: critical
+ annotations:
+ summary: "{% raw %}On {{ $labels.job }} in log {{ $labels.filename }} failed login detected.{% endraw %}"
+ - name: Logs.sshd
+ rules:
+ - alert: SshLoginFailed
+ expr: |
+ count_over_time({job=~"secure"} |="sshd[" |~": Failed|: Invalid|: Connection closed by authenticating user" | __error__="" [15m]) > 15
+ for: 0m
+ labels:
+ severity: critical
+ annotations:
+ summary: "{% raw %}SSH authentication failure (instance {{ $labels.instance }}).{% endraw %}"
+```
+Example alerting rule configuration. You can add multiple alerting rules to suit your requirements. Please note that the alerting rules are not templated by default
+
+### **Additional Config Variables for `/etc/loki/config.yml`**
+(not set by default)
+
+Below variables allow you to extend Loki configuration to fit your needs. Always refer to official [Loki configuration](https://grafana.com/docs/loki/latest/configuration/) to obtain possible configuration parameters.
+
+| Variable Name | Description
+| ----------- | ----------- |
+| `loki_distributor` | Configures the `distributor`. 📚 [documentation](https://grafana.com/docs/loki/latest/configuration/#distributor)
+| `loki_querier` | Configures the `querier`. Only appropriate when running all modules or just the querier. 📚 [documentation](https://grafana.com/docs/loki/latest/configuration/#querier)
+| `loki_query_scheduler` | The `query_scheduler` block configures the Loki query scheduler. When configured it separates the tenant query queues from the query-frontend. 📚 [documentation](https://grafana.com/docs/loki/latest/configuration/#query_scheduler)
+| `loki_frontend` | The `frontend` block configures the Loki query-frontend. 📚 [documentation](https://grafana.com/docs/loki/latest/configuration/#frontend)
+| `loki_ingester_client` | The `ingester_client` block configures how the distributor will connect to ingesters. Only appropriate when running all components, the distributor, or the querier. 📚 [documentation](https://grafana.com/docs/loki/latest/configuration/#ingester_client)
+| `loki_ingester` | The `ingester` block configures the ingester and how the ingester will register itself to a key value store. 📚 configuration [documentation](https://grafana.com/docs/loki/latest/configuration/#ingester)
+| `loki_index_gateway` | The `index_gateway` block configures the Loki index gateway server, responsible for serving index queries without the need to constantly interact with the object store. 📚 [documentation](https://grafana.com/docs/loki/latest/configuration/#index_gateway)
+| `loki_storage_config` | The `storage_config` block configures one of many possible stores for both the index and chunks. Which configuration to be picked should be defined in schema_config block. 📚 [documentation](https://grafana.com/docs/loki/latest/configuration/#storage_config)
+| `loki_chunk_store_config` | The `chunk_store_config` block configures how chunks will be cached and how long to wait before saving them to the backing store. 📚 [documentation](https://grafana.com/docs/loki/latest/configuration/#chunk_store_config)
+| `loki_compactor` | The `compactor` block configures the compactor component, which compacts index shards for performance. 📚 [documentation](https://grafana.com/docs/loki/latest/configure/#compactor)
+| `loki_limits_config` | The `limits_config` block configures global and per-tenant limits in Loki. 📚 [documentation](https://grafana.com/docs/loki/latest/configuration/#limits_config)
+| `loki_frontend_worker` | The `frontend_worker` configures the worker - running within the Loki querier - picking up and executing queries enqueued by the query-frontend. 📚 [documentation](https://grafana.com/docs/loki/latest/configuration/#frontend_worker)
+| `loki_table_manager` | The `table_manager` block configures the table manager for retention. 📚 [documentation](https://grafana.com/docs/loki/latest/configuration/#table_manager)
+| `loki_memberlist` | Configuration for memberlist client. Only applies if the selected kvstore is memberlist. 📚 [documentation](https://grafana.com/docs/loki/latest/configuration/#memberlist)
+| `loki_runtime_config` | Configuration for `runtime config` module, responsible for reloading runtime configuration file. 📚 [documentation](https://grafana.com/docs/loki/latest/configuration/#runtime_config)
+| `loki_operational_config` | These are values which allow you to control aspects of Loki's operation, most commonly used for controlling types of higher verbosity logging, the values here can be overridden in the configs section of the `runtime_config` file. 📚 [documentation](https://grafana.com/docs/loki/latest/configure/#operational_config)
+| `loki_tracing` | Configuration for tracing. 📚 [documentation](https://grafana.com/docs/loki/latest/configuration/#tracing)
+
+## Playbook
+
+- playbook
+```yaml
+- name: Manage loki service
+ hosts: all
+ become: true
+ roles:
+ - role: grafana.grafana.loki
+```
+
+- Playbook execution example
+```shell
+# Deployment
+ansible-playbook -i inventory/hosts playbook/function_loki_play.yml
+
+# Uninstall
+ansible-playbook -i inventory/hosts playbook/function_loki_play.yml -t loki_uninstall
+```
+
+## License
+
+See [LICENSE](https://github.com/grafana/grafana-ansible-collection/blob/main/LICENSE)
+
+## Author Information
+
+- [VoidQuark](https://github.com/voidquark)
diff --git a/ansible_collections/grafana/grafana/roles/loki/defaults/main.yml b/ansible_collections/grafana/grafana/roles/loki/defaults/main.yml
new file mode 100644
index 000000000..ee712bb23
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/loki/defaults/main.yml
@@ -0,0 +1,107 @@
+---
+# defaults file for loki
+loki_version: "latest"
+loki_http_listen_port: 3100
+loki_http_listen_address: "0.0.0.0"
+loki_expose_port: false
+loki_download_url_rpm: "https://github.com/grafana/loki/releases/download/v{{ loki_version }}/loki-{{ loki_version }}.{{ __loki_arch }}.rpm"
+loki_download_url_deb: "https://github.com/grafana/loki/releases/download/v{{ loki_version }}/loki_{{ loki_version }}_{{ __loki_arch }}.deb"
+loki_working_path: "/var/lib/loki"
+loki_ruler_alert_path: "{{ loki_working_path }}/rules/fake"
+
+# Default Variables for /etc/loki/config.yml
+loki_auth_enabled: false
+loki_target: "all"
+loki_ballast_bytes: 0
+
+loki_server:
+ http_listen_address: "{{ loki_http_listen_address }}"
+ http_listen_port: "{{ loki_http_listen_port }}"
+ grpc_listen_port: 9096
+
+loki_common:
+ instance_addr: 127.0.0.1
+ path_prefix: "{{ loki_working_path }}"
+ storage:
+ filesystem:
+ chunks_directory: "{{ loki_working_path }}/chunks"
+ rules_directory: "{{ loki_working_path }}/rules"
+ replication_factor: 1
+ ring:
+ kvstore:
+ store: inmemory
+
+loki_query_range:
+ results_cache:
+ cache:
+ embedded_cache:
+ enabled: true
+ max_size_mb: 100
+
+loki_schema_config:
+ configs:
+ - from: 2020-10-24
+ store: tsdb
+ object_store: filesystem
+ schema: v13
+ index:
+ prefix: index_
+ period: 24h
+
+loki_ruler:
+ storage:
+ type: local
+ local:
+ directory: "{{ loki_working_path }}/rules"
+ rule_path: "{{ loki_working_path }}/rules_tmp"
+ ring:
+ kvstore:
+ store: inmemory
+ enable_api: true
+ enable_alertmanager_v2: true
+ alertmanager_url: http://localhost:9093
+
+loki_analytics:
+ reporting_enabled: false
+
+# Alerting Rules Variables
+# loki_ruler_alerts:
+# - name: Logs.Nextcloud
+# rules:
+# - alert: NextcloudLoginFailed
+# expr: |
+# count by (filename,env,job) (count_over_time({job=~"nextcloud"} | json | message=~"Login failed.*" [10m])) > 4
+# for: 0m
+# labels:
+# severity: critical
+# annotations:
+# summary: "{% raw %}On {{ $labels.job }} in log {{ $labels.filename }} failed login detected.{% endraw %}"
+# - name: Logs.sshd
+# rules:
+# - alert: SshLoginFailed
+# expr: |
+# count_over_time({job=~"secure"} |="sshd[" |~": Failed|: Invalid|: Connection closed by authenticating user" | __error__="" [15m]) > 15
+# for: 0m
+# labels:
+# severity: critical
+# annotations:
+# summary: "{% raw %}SSH authentication failure (instance {{ $labels.instance }}).{% endraw %}"
+
+# Additional Config Variables for /etc/loki/config.yml
+# loki_distributor:
+# loki_querier:
+# loki_query_scheduler:
+# loki_frontend:
+# loki_ingester_client:
+# loki_ingester:
+# loki_index_gateway:
+# loki_storage_config:
+# loki_chunk_store_config:
+# loki_compactor:
+# loki_limits_config:
+# loki_frontend_worker:
+# loki_table_manager:
+# loki_memberlist:
+# loki_runtime_config:
+# loki_operational_config:
+# loki_tracing:
diff --git a/ansible_collections/grafana/grafana/roles/loki/handlers/main.yml b/ansible_collections/grafana/grafana/roles/loki/handlers/main.yml
new file mode 100644
index 000000000..b2326ec66
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/loki/handlers/main.yml
@@ -0,0 +1,9 @@
+---
+# handlers file for loki
+- name: Restart loki
+ listen: "restart loki"
+ ansible.builtin.systemd:
+ daemon_reload: true
+ name: loki.service
+ state: restarted
+ enabled: true
diff --git a/ansible_collections/grafana/grafana/roles/loki/meta/main.yml b/ansible_collections/grafana/grafana/roles/loki/meta/main.yml
new file mode 100644
index 000000000..b66e783d3
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/loki/meta/main.yml
@@ -0,0 +1,28 @@
+---
+galaxy_info:
+ role_name: loki
+ author: voidquark
+ description: Manage Grafana Loki Application
+ license: "GPL-3.0-or-later"
+ min_ansible_version: "2.10"
+ platforms:
+ - name: EL
+ versions:
+ - "8"
+ - "9"
+ - name: Fedora
+ versions:
+ - all
+ - name: Debian
+ versions:
+ - all
+ - name: Ubuntu
+ versions:
+ - all
+ galaxy_tags:
+ - loki
+ - grafana
+ - logging
+ - monitoring
+
+dependencies: []
diff --git a/ansible_collections/grafana/grafana/roles/loki/molecule/default/converge.yml b/ansible_collections/grafana/grafana/roles/loki/molecule/default/converge.yml
new file mode 100644
index 000000000..1f2ce7f5c
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/loki/molecule/default/converge.yml
@@ -0,0 +1,5 @@
+---
+- name: Converge
+ hosts: all
+ roles:
+ - role: grafana.grafana.loki
diff --git a/ansible_collections/grafana/grafana/roles/loki/molecule/default/molecule.yml b/ansible_collections/grafana/grafana/roles/loki/molecule/default/molecule.yml
new file mode 100644
index 000000000..339965a50
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/loki/molecule/default/molecule.yml
@@ -0,0 +1,20 @@
+---
+dependency:
+ name: galaxy
+ options:
+ ignore-errors: true
+driver:
+ name: docker
+platforms:
+ - name: instance
+ image: "geerlingguy/docker-${MOLECULE_DISTRO:-rockylinux8}-ansible:latest"
+ command: ${MOLECULE_DOCKER_COMMAND:-""}
+ volumes:
+ - /sys/fs/cgroup:/sys/fs/cgroup:rw
+ cgroupns_mode: host
+ privileged: true
+ pre_build_image: true
+provisioner:
+ name: ansible
+ playbooks:
+ converge: converge.yml
diff --git a/ansible_collections/grafana/grafana/roles/loki/tasks/deploy.yml b/ansible_collections/grafana/grafana/roles/loki/tasks/deploy.yml
new file mode 100644
index 000000000..65ecaf6f4
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/loki/tasks/deploy.yml
@@ -0,0 +1,146 @@
+---
+# tasks file for loki deployment
+
+- name: Obtain the latest version from the Loki GitHub repo
+ when: loki_version == "latest"
+ block:
+ - name: Scrape Github API endpoint to obtain latest Loki version
+ ansible.builtin.uri:
+ url: "https://api.github.com/repos/grafana/loki/releases/latest"
+ method: GET
+ body_format: json
+ become: false
+ delegate_to: localhost
+ run_once: true
+ register: __github_latest_version
+
+ - name: Latest available Loki version
+ ansible.builtin.set_fact:
+ loki_version: "{{ __github_latest_version.json.tag_name | regex_replace('^v?(\\d+\\.\\d+\\.\\d+)$', '\\1') }}"
+
+- name: Verify current deployed version
+ block:
+ - name: Check if Loki binary is present
+ ansible.builtin.stat:
+ path: "/usr/bin/loki"
+ register: __already_deployed
+
+ - name: Obtain current deployed Loki version
+ ansible.builtin.command:
+ cmd: "/usr/bin/loki --version"
+ changed_when: false
+ register: __current_deployed_version
+ when: __already_deployed.stat.exists | bool
+
+- name: Include RedHat/Rocky setup
+ ansible.builtin.include_tasks:
+ file: setup-RedHat.yml
+ when: ansible_os_family in ['RedHat', 'Rocky']
+
+- name: Include Debian/Ubuntu setup
+ ansible.builtin.include_tasks:
+ file: setup-Debian.yml
+ when: ansible_os_family == 'Debian'
+
+- name: Check if Loki default dir is present
+ ansible.builtin.stat:
+ path: "/tmp/loki/boltdb-shipper-active"
+ register: __default_structure
+
+- name: Default structure cleanup
+ when: __default_structure.stat.exists | bool
+ block:
+ - name: Ensure that Loki is stopped before default cleanup
+ ansible.builtin.systemd:
+ name: loki.service
+ state: stopped
+
+ - name: Remove default configuration from "/tmp/loki" directory
+ ansible.builtin.file:
+ path: "/tmp/loki"
+ state: absent
+
+- name: Ensure that Loki working path exists
+ ansible.builtin.file:
+ path: "{{ loki_working_path }}"
+ state: directory
+ owner: "loki"
+ group: "root"
+ mode: "0755"
+
+- name: Template Loki config - /etc/loki/config.yml
+ ansible.builtin.template:
+ src: "config.yml.j2"
+ dest: "/etc/loki/config.yml"
+ owner: "root"
+ group: "root"
+ mode: "0644"
+ validate: "/usr/bin/loki --verify-config -config.file %s"
+ notify: restart loki
+
+- name: Ensure that Loki rule path exists
+ ansible.builtin.file:
+ path: "{{ loki_ruler_alert_path }}"
+ state: directory
+ owner: "loki"
+ group: "root"
+ mode: "0750"
+ when:
+ - loki_ruler_alert_path is defined
+ - loki_ruler is defined
+
+- name: Template Loki Rule File
+ ansible.builtin.template:
+ src: "rules.yml.j2"
+ dest: "{{ loki_ruler_alert_path }}/rules.yml"
+ owner: "loki"
+ group: "root"
+ mode: "0644"
+ notify: restart loki
+ when:
+ - loki_ruler_alerts is defined
+ - loki_ruler_alert_path is defined
+ - loki_ruler is defined
+
+- name: Get firewalld state
+ ansible.builtin.systemd:
+ name: "firewalld"
+ register: __firewalld_service_state
+
+- name: Enable firewalld rule to expose Loki tcp port {{ loki_http_listen_port }}
+ ansible.posix.firewalld:
+ immediate: true
+ permanent: true
+ port: "{{ loki_http_listen_port }}/tcp"
+ state: enabled
+ when:
+ - __firewalld_service_state.status.ActiveState == "active"
+ - loki_expose_port | bool
+
+- name: Ensure that Loki firewalld rule is not present - tcp port {{ loki_http_listen_port }}
+ ansible.posix.firewalld:
+ immediate: true
+ permanent: true
+ port: "{{ loki_http_listen_port }}/tcp"
+ state: disabled
+ when:
+ - __firewalld_service_state.status.ActiveState == "active"
+ - not loki_expose_port | bool
+
+- name: Flush handlers after deployment
+ ansible.builtin.meta: flush_handlers
+
+- name: Ensure that Loki is started
+ ansible.builtin.systemd:
+ name: loki.service
+ state: started
+
+- name: Verify that Loki URL is responding
+ ansible.builtin.uri:
+ url: "http://{{ loki_http_listen_address }}:{{ loki_http_listen_port }}/ready"
+ method: GET
+ register: loki_verify_url_status_code
+ retries: 5
+ delay: 8
+ until: loki_verify_url_status_code.status == 200
+ when: loki_expose_port | bool
diff --git a/ansible_collections/grafana/grafana/roles/loki/tasks/main.yml b/ansible_collections/grafana/grafana/roles/loki/tasks/main.yml
new file mode 100644
index 000000000..4e0bb741b
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/loki/tasks/main.yml
@@ -0,0 +1,23 @@
+---
+# tasks file for loki
+- name: Include OS specific variables
+ ansible.builtin.include_vars:
+ file: "{{ ansible_os_family }}.yml"
+
+- name: Deploy Loki service
+ ansible.builtin.include_tasks:
+ file: "deploy.yml"
+ apply:
+ tags: loki_deploy
+ tags: loki_deploy
+
+- name: Uninstall Loki service
+ ansible.builtin.include_tasks:
+ file: "uninstall.yml"
+ apply:
+ tags:
+ - loki_uninstall
+ - never
+ tags:
+ - loki_uninstall
+ - never
diff --git a/ansible_collections/grafana/grafana/roles/loki/tasks/setup-Debian.yml b/ansible_collections/grafana/grafana/roles/loki/tasks/setup-Debian.yml
new file mode 100644
index 000000000..c71af7f44
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/loki/tasks/setup-Debian.yml
@@ -0,0 +1,7 @@
+---
+- name: APT - Install Loki
+ ansible.builtin.apt:
+ deb: "{{ loki_download_url_deb }}"
+ state: present
+ notify: restart loki
+ when: __current_deployed_version.stdout is not defined or loki_version not in __current_deployed_version.stdout
diff --git a/ansible_collections/grafana/grafana/roles/loki/tasks/setup-RedHat.yml b/ansible_collections/grafana/grafana/roles/loki/tasks/setup-RedHat.yml
new file mode 100644
index 000000000..91e60c504
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/loki/tasks/setup-RedHat.yml
@@ -0,0 +1,8 @@
+---
+- name: DNF - Install Loki from remote URL
+ ansible.builtin.dnf:
+ name: "{{ loki_download_url_rpm }}"
+ state: present
+ disable_gpg_check: true
+ notify: restart loki
+ when: __current_deployed_version.stdout is not defined or loki_version not in __current_deployed_version.stdout
diff --git a/ansible_collections/grafana/grafana/roles/loki/tasks/uninstall.yml b/ansible_collections/grafana/grafana/roles/loki/tasks/uninstall.yml
new file mode 100644
index 000000000..0ac7566c0
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/loki/tasks/uninstall.yml
@@ -0,0 +1,51 @@
+---
+# tasks file for loki uninstall
+
+- name: Stop Loki service
+ ansible.builtin.systemd: # noqa ignore-errors
+ name: loki
+ state: stopped
+ ignore_errors: true
+
+- name: Uninstall Loki rpm package
+ ansible.builtin.dnf:
+ name: "loki"
+ state: absent
+ autoremove: true
+ when: ansible_os_family in ['RedHat', 'Rocky']
+
+- name: Uninstall Loki deb package
+ ansible.builtin.apt:
+ name: "loki"
+ state: absent
+ purge: true
+ when: ansible_os_family == 'Debian'
+
+- name: Ensure that Loki firewalld rule is not present - tcp port {{ loki_http_listen_port }}
+ ansible.posix.firewalld: # noqa ignore-errors
+ immediate: true
+ permanent: true
+ port: "{{ loki_http_listen_port }}/tcp"
+ state: disabled
+ ignore_errors: true
+
+- name: Remove Loki directories"
+ ansible.builtin.file:
+ path: "{{ remove_me }}"
+ state: absent
+ loop:
+ - "/etc/loki"
+ - "{{ loki_working_path }}"
+ loop_control:
+ loop_var: remove_me
+
+- name: Remove the Loki system user
+ ansible.builtin.user:
+ name: "loki"
+ force: true
+ state: absent
+
+- name: Remove Loki system group
+ ansible.builtin.group:
+ name: "loki"
+ state: absent
diff --git a/ansible_collections/grafana/grafana/roles/loki/templates/config.yml.j2 b/ansible_collections/grafana/grafana/roles/loki/templates/config.yml.j2
new file mode 100644
index 000000000..72147184f
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/loki/templates/config.yml.j2
@@ -0,0 +1,99 @@
+{% if loki_target is defined %}
+target: {{ loki_target }}
+{% endif %}
+{% if loki_auth_enabled is defined %}
+auth_enabled: {{ loki_auth_enabled }}
+{% endif %}
+{% if loki_ballast_bytes is defined %}
+ballast_bytes: {{ loki_ballast_bytes }}
+{% endif %}
+server:
+ {{ loki_server | to_nice_yaml(indent=2,sort_keys=False) | indent(2, False) }}
+{% if loki_distributor is defined %}
+distributor:
+ {{ loki_distributor | to_nice_yaml(indent=2,sort_keys=False) | indent(2, False) }}
+{% endif %}
+{% if loki_querier is defined %}
+querier:
+ {{ loki_querier | to_nice_yaml(indent=2,sort_keys=False) | indent(2, False) }}
+{% endif %}
+{% if loki_query_scheduler is defined %}
+query_scheduler:
+ {{ loki_query_scheduler | to_nice_yaml(indent=2,sort_keys=False) | indent(2, False) }}
+{% endif %}
+{% if loki_frontend is defined %}
+frontend:
+ {{ loki_frontend | to_nice_yaml(indent=2,sort_keys=False) | indent(2, False) }}
+{% endif %}
+{% if loki_query_range is defined %}
+query_range:
+ {{ loki_query_range | to_nice_yaml(indent=2,sort_keys=False) | indent(2, False) }}
+{% endif %}
+{% if loki_ruler is defined %}
+ruler:
+ {{ loki_ruler | to_nice_yaml(indent=2,sort_keys=False) | indent(2, False) }}
+{% endif %}
+{% if loki_ingester_client is defined %}
+ingester_client:
+ {{ loki_ingester_client | to_nice_yaml(indent=2,sort_keys=False) | indent(2, False) }}
+{% endif %}
+{% if loki_ingester is defined %}
+ingester:
+ {{ loki_ingester | to_nice_yaml(indent=2,sort_keys=False) | indent(2, False) }}
+{% endif %}
+{% if loki_index_gateway is defined %}
+index_gateway:
+ {{ loki_index_gateway | to_nice_yaml(indent=2,sort_keys=False) | indent(2, False) }}
+{% endif %}
+{% if loki_storage_config is defined %}
+storage_config:
+ {{ loki_storage_config | to_nice_yaml(indent=2,sort_keys=False) | indent(2, False) }}
+{% endif %}
+{% if loki_chunk_store_config is defined %}
+chunk_store_config:
+ {{ loki_chunk_store_config | to_nice_yaml(indent=2,sort_keys=False) | indent(2, False) }}
+{% endif %}
+{% if loki_schema_config is defined %}
+schema_config:
+ {{ loki_schema_config | to_nice_yaml(indent=2,sort_keys=False) | indent(2, False) }}
+{% endif %}
+{% if loki_compactor is defined %}
+compactor:
+ {{ loki_compactor | to_nice_yaml(indent=2,sort_keys=False) | indent(2, False) }}
+{% endif %}
+{% if loki_limits_config is defined %}
+limits_config:
+ {{ loki_limits_config | to_nice_yaml(indent=2,sort_keys=False) | indent(2, False) }}
+{% endif %}
+{% if loki_frontend_worker is defined %}
+frontend_worker:
+ {{ loki_frontend_worker | to_nice_yaml(indent=2,sort_keys=False) | indent(2, False) }}
+{% endif %}
+{% if loki_table_manager is defined %}
+table_manager:
+ {{ loki_table_manager | to_nice_yaml(indent=2,sort_keys=False) | indent(2, False) }}
+{% endif %}
+{% if loki_memberlist is defined %}
+memberlist:
+ {{ loki_memberlist | to_nice_yaml(indent=2,sort_keys=False) | indent(2, False) }}
+{% endif %}
+{% if loki_runtime_config is defined %}
+runtime_config:
+ {{ loki_runtime_config | to_nice_yaml(indent=2,sort_keys=False) | indent(2, False) }}
+{% endif %}
+{% if operational_config is defined %}
+operational_config:
+ {{ loki_operational_config | to_nice_yaml(indent=2,sort_keys=False) | indent(2, False) }}
+{% endif %}
+{% if loki_tracing is defined %}
+tracing:
+ {{ loki_tracing | to_nice_yaml(indent=2,sort_keys=False) | indent(2, False) }}
+{% endif %}
+{% if loki_analytics is defined %}
+analytics:
+ {{ loki_analytics | to_nice_yaml(indent=2,sort_keys=False) | indent(2, False) }}
+{% endif %}
+{% if loki_common is defined %}
+common:
+ {{ loki_common | to_nice_yaml(indent=2,sort_keys=False) | indent(2, False) }}
+{% endif %}
diff --git a/ansible_collections/grafana/grafana/roles/loki/templates/rules.yml.j2 b/ansible_collections/grafana/grafana/roles/loki/templates/rules.yml.j2
new file mode 100644
index 000000000..a3dc3be25
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/loki/templates/rules.yml.j2
@@ -0,0 +1,3 @@
+---
+groups:
+ {{ loki_ruler_alerts | to_nice_yaml(indent=2,sort_keys=False) | indent(2,False) }}
diff --git a/ansible_collections/grafana/grafana/roles/loki/vars/Debian.yml b/ansible_collections/grafana/grafana/roles/loki/vars/Debian.yml
new file mode 100644
index 000000000..b211affeb
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/loki/vars/Debian.yml
@@ -0,0 +1,5 @@
+---
+__loki_arch_map:
+ x86_64: 'amd64'
+
+__loki_arch: "{{ __loki_arch_map[ansible_architecture] | default(ansible_architecture) }}"
diff --git a/ansible_collections/grafana/grafana/roles/loki/vars/RedHat.yml b/ansible_collections/grafana/grafana/roles/loki/vars/RedHat.yml
new file mode 100644
index 000000000..77fe6b4d1
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/loki/vars/RedHat.yml
@@ -0,0 +1,2 @@
+---
+__loki_arch: "{{ ansible_architecture }}"
diff --git a/ansible_collections/grafana/grafana/roles/mimir/README.md b/ansible_collections/grafana/grafana/roles/mimir/README.md
new file mode 100644
index 000000000..92f7d42c5
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/mimir/README.md
@@ -0,0 +1,76 @@
+# ansible-role-mimir
+Grafana Mimir
+=========
+
+This role installs and configures a Mimir standalone application.
+
+## Testing with Molecule
+To be able to test this collection locally we use Molecule. Molecule is an Ansible testtool that enable us to run our roles inside containers. In our case we are using Podman as a container runtime. To be able to run the Molecule test you need to have the following installed on your machine:
+
+- Podman
+- Ansible
+- Python3
+
+### First Time Setup
+To install all the depencies, use the following commands:
+
+```
+# Create a virtual environment
+python -m venv .venv
+
+# On MacOS, WSL, Linux
+source .venv/bin/activate
+
+# On Windows
+.\.venv\Scripts\activate
+
+# Install dependencies
+pip3 install molecule molecule-plugins[docker] docker pytest-testinfra jmespath selinux passlib
+
+# Create molecule network
+docker network create molecule
+```
+
+### Run Minio for local S3
+To be able to run mimir using an object store backend, run the following command
+
+docker run -d \
+ -p 9000:9000 \
+ -p 9001:9001 \
+ --name minio-mimir --network molecule \
+ -e "MINIO_ROOT_USER=testtest" \
+ -e "MINIO_ROOT_PASSWORD=testtest" \
+ -e "MINIO_DEFAULT_BUCKETS=mimir" \
+ bitnami/minio:latest
+
+### Testing the changes
+To test the changes in a role run:
+```
+molecule converge
+## example: molecule converge
+```
+When Ansible has succesfully ran, you can run assertions against your infrastructure using.
+```
+molecule verify
+## example: `molecule verify`
+```
+
+You can also run commands like `molecule destroy` , `molecule prepare` , and `molecule test` . See Molecule documentation for more information
+
+## Role Variables
+--------------
+| Name | Type | Default | Description |
+|---|---|---|---|
+mimir_working_path|str|/usr/share/mimir|Used to specify the directory path where Mimir, a component of the Grafana Agent, stores its working files and temporary data.|
+mimir_ruler_alert_path|str|/data/ruler|Used to specify the directory path where the Mimir ruler component of the Grafana Agent stores its alert files.|
+mimir_http_listen_port|str|8080|Used to specify the port number on which the Mimir component of the Grafana Agent listens for incoming HTTP requests.|
+mimir_http_listen_address|str|0.0.0.0|Used to specify the network address on which the Mimir component of the Grafana Agent listens for incoming HTTP requests.|
+mimir_ruler.rule_path|str|/data/ruler|Used to specify the directory path where the Mimir ruler component of the Grafana Agent looks for rule files.|
+mimir_ruler.alertmanager_url|str|http://127.0.0.1:8080/alertmanager|Used to specify the URL or address of the Alertmanager API that the Mimir ruler component of the Grafana Agent should communicate with.|
+mimir_ruler.ring.heartbeat_period|str|2s|Used to specify the interval at which the Mimir ruler component of the Grafana Agent sends heartbeat signals to the ring.|
+mimir_ruler.heartbeat_timeout|str|10s|Used to specify the maximum duration of time that the Mimir ruler component of the Grafana Agent will wait for a heartbeat signal from other components in the ring.|
+mimir_alertmanager.data_dir|str|/data/alertmanager|sed to specify the directory path where the Mimir Alertmanager component of the Grafana Agent stores its data files.|
+mimir_alertmanager.fallback_config_file|str|/etc/alertmanager-fallback-config.yaml|Used to specify the path to a fallback configuration file for the Mimir Alertmanager component of the Grafana Agent.|
+mimir_alertmanager.external_url|str|http://localhost:9009/alertmanager|Used to specify the external URL or address at which the Mimir Alertmanager component of the Grafana Agent can be accessed.|
+mimir_server.log_level|str|warn|Used to specify the log level of the server. Possible configurations error, warn, info, debug|
+mimir_memberlist.join_members|[]| List of members for the Mimir cluster|
diff --git a/ansible_collections/grafana/grafana/roles/mimir/defaults/main.yml b/ansible_collections/grafana/grafana/roles/mimir/defaults/main.yml
new file mode 100644
index 000000000..40ab730e5
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/mimir/defaults/main.yml
@@ -0,0 +1,37 @@
+---
+# defaults file for mimir
+mimir_version: "latest"
+__mimir_arch: "{{ arch_mapping[ansible_architecture] | default('amd64') }}"
+mimir_download_url_rpm: "https://github.com/grafana/mimir/releases/download/{{ mimir_version }}/{{ mimir_version }}_{{ __mimir_arch }}.rpm"
+mimir_download_url_deb: "https://github.com/grafana/mimir/releases/download/{{ mimir_version }}/{{ mimir_version }}_{{ __mimir_arch }}.deb"
+mimir_working_path: "/var/lib/mimir"
+mimir_ruler_alert_path: "{{ mimir_working_path }}/ruler"
+mimir_http_listen_port: 8080
+mimir_http_listen_address: "0.0.0.0"
+mimir_log_level: warn
+
+arch_mapping:
+ x86_64: amd64
+ aarch64: arm64
+ armv7l: armhf
+ i386: i386
+ ppc64le: ppc64le
+
+mimir_ruler:
+ rule_path: "{{ mimir_working_path }}/ruler"
+ alertmanager_url: "http://127.0.0.1:{{ mimir_http_listen_port }}/alertmanager"
+ ring:
+ heartbeat_period: 5s
+ heartbeat_timeout: 10s
+
+mimir_alertmanager:
+ data_dir: "{{ mimir_working_path }}/alertmanager"
+ external_url: "http://localhost:{{ mimir_http_listen_port }}/alertmanager"
+
+mimir_server:
+ http_listen_port: "{{ mimir_http_listen_port }}"
+ http_listen_address: "{{ mimir_http_listen_address }}"
+ log_level: "{{ mimir_log_level }}"
+
+mimir_limits:
+ compactor_blocks_retention_period: 6m
diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/__init__.py b/ansible_collections/grafana/grafana/roles/mimir/files/.gitkeep
index e69de29bb..e69de29bb 100644
--- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/__init__.py
+++ b/ansible_collections/grafana/grafana/roles/mimir/files/.gitkeep
diff --git a/ansible_collections/grafana/grafana/roles/mimir/handlers/main.yml b/ansible_collections/grafana/grafana/roles/mimir/handlers/main.yml
new file mode 100644
index 000000000..22251ca2b
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/mimir/handlers/main.yml
@@ -0,0 +1,6 @@
+---
+
+- name: Restart mimir
+ ansible.builtin.systemd:
+ name: mimir.service
+ state: restarted
diff --git a/ansible_collections/grafana/grafana/roles/mimir/meta/main.yml b/ansible_collections/grafana/grafana/roles/mimir/meta/main.yml
new file mode 100644
index 000000000..596fca2af
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/mimir/meta/main.yml
@@ -0,0 +1,37 @@
+---
+# meta/main.yml
+galaxy_info:
+ author: "Grafana"
+ role_name: mimir
+ description: "Grafana - platform for analytics and monitoring"
+ license: "MIT"
+ min_ansible_version: "2.9"
+ platforms:
+ - name: Ubuntu
+ versions:
+ - bionic
+ - xenial
+ - name: Debian
+ versions:
+ - stretch
+ - buster
+ - name: EL
+ versions:
+ - "7"
+ - "8"
+ - name: Fedora
+ versions:
+ - "30"
+ - "31"
+ galaxy_tags:
+ - grafana
+ - dashboard
+ - alerts
+ - alerting
+ - presentation
+ - monitoring
+ - metrics
+
+dependencies: []
+
+allow_duplicates: true
diff --git a/ansible_collections/grafana/grafana/roles/mimir/molecule/default/converge.yml b/ansible_collections/grafana/grafana/roles/mimir/molecule/default/converge.yml
new file mode 100644
index 000000000..57a36c09c
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/mimir/molecule/default/converge.yml
@@ -0,0 +1,33 @@
+---
+- name: Converge mimir
+ hosts: all
+ collections:
+ - grafana.grafana
+ vars:
+ mimir_storage:
+ storage:
+ backend: s3
+ s3:
+ endpoint: minio-mimir.:9000
+ access_key_id: testtest
+ secret_access_key: testtest
+ insecure: true
+ bucket_name: mimir
+
+ # Blocks storage requires a prefix when using a common object storage bucket.
+ mimir_blocks_storage:
+ storage_prefix: blocks
+ tsdb:
+ dir: "{{ mimir_working_path}}/ingester"
+
+ # Use memberlist, a gossip-based protocol, to enable the 3 Mimir replicas to communicate
+ mimir_memberlist:
+ join_members:
+ - molecule-grafana-mimir01.:7946
+ - molecule-grafana-mimir02.:7946
+ - molecule-grafana-mimir03.:7946
+
+ tasks:
+ - name: "Run Grafana mimir collection"
+ include_role:
+ name: mimir
diff --git a/ansible_collections/grafana/grafana/roles/mimir/molecule/default/molecule.yml b/ansible_collections/grafana/grafana/roles/mimir/molecule/default/molecule.yml
new file mode 100644
index 000000000..2790af53c
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/mimir/molecule/default/molecule.yml
@@ -0,0 +1,60 @@
+---
+dependency:
+ name: galaxy
+driver:
+ name: docker
+platforms:
+ - name: molecule-grafana-mimir01
+ image: "geerlingguy/docker-${MOLECULE_DISTRO:-rockylinux8}-ansible:latest"
+ command: ${MOLECULE_DOCKER_COMMAND:-"/sbin/init"}
+ volumes:
+ - /sys/fs/cgroup:/sys/fs/cgroup:rw
+ cgroupns_mode: host
+ privileged: true
+ pre_build_image: true
+ network: molecule
+ network_mode: "molecule"
+ published_ports:
+ - 7946
+ - 9019:9009
+ - 9096
+ - name: molecule-grafana-mimir02
+ image: "geerlingguy/docker-${MOLECULE_DISTRO:-rockylinux8}-ansible:latest"
+ command: ${MOLECULE_DOCKER_COMMAND:-"/sbin/init"}
+ volumes:
+ - /sys/fs/cgroup:/sys/fs/cgroup:rw
+ cgroupns_mode: host
+ privileged: true
+ pre_build_image: true
+ network: molecule
+ network_mode: "molecule"
+ published_ports:
+ - 7946
+ - 9029:9009
+ - 9096
+ - name: molecule-grafana-mimir03
+ image: "geerlingguy/docker-${MOLECULE_DISTRO:-rockylinux8}-ansible:latest"
+ command: ${MOLECULE_DOCKER_COMMAND:-"/sbin/init"}
+ volumes:
+ - /sys/fs/cgroup:/sys/fs/cgroup:rw
+ cgroupns_mode: host
+ privileged: true
+ pre_build_image: true
+ network: molecule
+ network_mode: "molecule"
+ published_ports:
+ - 7946
+ - 9039:9009
+ - 9096
+
+provisioner:
+ name: ansible
+ env:
+ ANSIBLE_ROLES_PATH: ${MOLECULE_PROJECT_DIRECTORY}/roles
+
+verifier:
+ name: testinfra
+lint: |
+ set -e
+ yamllint .
+ ansible-lint .
diff --git a/ansible_collections/grafana/grafana/roles/mimir/molecule/default/tests/test_default.py b/ansible_collections/grafana/grafana/roles/mimir/molecule/default/tests/test_default.py
new file mode 100644
index 000000000..671a5adca
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/mimir/molecule/default/tests/test_default.py
@@ -0,0 +1,36 @@
+from __future__ import (absolute_import, division, print_function)
+__metaclass__ = type
+
+import os
+import testinfra.utils.ansible_runner
+
+testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
+ os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
+
+
+def test_directories(host):
+ dirs = [
+ "/etc/mimir",
+ "/var/lib/mimir",
+ ]
+ files = [
+ "/etc/mimir/config.yml"
+ ]
+ for directory in dirs:
+ d = host.file(directory)
+ assert d.is_directory
+ assert d.exists
+ for file in files:
+ f = host.file(file)
+ assert f.exists
+ assert f.is_file
+
+
+def test_service(host):
+ s = host.service("mimir")
+ assert s.is_running
+
+
+def test_packages(host):
+ p = host.package("mimir")
+ assert p.is_installed
diff --git a/ansible_collections/grafana/grafana/roles/mimir/molecule/test-requirements.txt b/ansible_collections/grafana/grafana/roles/mimir/molecule/test-requirements.txt
new file mode 100644
index 000000000..af58c1102
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/mimir/molecule/test-requirements.txt
@@ -0,0 +1,6 @@
+molecule
+docker
+pytest-testinfra
+jmespath
+selinux
+passlib
diff --git a/ansible_collections/grafana/grafana/roles/mimir/tasks/deploy.yml b/ansible_collections/grafana/grafana/roles/mimir/tasks/deploy.yml
new file mode 100644
index 000000000..93385c3db
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/mimir/tasks/deploy.yml
@@ -0,0 +1,104 @@
+---
+# tasks file for Mimir deployment
+- name: Obtain the latest version from the Mimir GitHub repo
+ when: mimir_version == "latest"
+ block:
+ - name: Scrape Github API endpoint to obtain latest Mimir version
+ ansible.builtin.uri:
+ url: "https://api.github.com/repos/grafana/mimir/releases/latest"
+ method: GET
+ body_format: json
+ become: false
+ delegate_to: localhost
+ run_once: true
+ register: __github_latest_version
+
+ - name: Latest available Mimir version
+ ansible.builtin.set_fact:
+ mimir_version: "{{ __github_latest_version.json.tag_name | regex_replace('^v?(\\d+\\.\\d+\\.\\d+)$', '\\1') }}"
+
+- name: Verify current deployed version
+ block:
+ - name: Check if Mimir binary is present
+ ansible.builtin.stat:
+ path: "/usr/bin/mimir"
+ register: __already_deployed
+
+ - name: Obtain current deployed Mimir version
+ ansible.builtin.command:
+ cmd: "/usr/bin/mimir --version"
+ changed_when: false
+ register: __current_deployed_version
+ when: __already_deployed.stat.exists | bool
+
+- name: Include RedHat/Rocky setup
+ ansible.builtin.include_tasks:
+ file: setup-Redhat.yml
+ when: ansible_os_family in ['RedHat', 'Rocky']
+
+- name: Include Debian/Ubuntu setup
+ ansible.builtin.include_tasks:
+ file: setup-Debian.yml
+ when: ansible_os_family == 'Debian'
+
+- name: Check if Mimir default dir is present
+ ansible.builtin.stat:
+ path: "/tmp/mimir/boltdb-shipper-active"
+ register: __default_structure
+
+- name: Default structure cleanup
+ when: __default_structure.stat.exists | bool
+ block:
+ - name: Ensure that Mimir is stopped before default cleanup
+ ansible.builtin.systemd:
+ name: mimir.service
+ state: stopped
+
+ - name: Remove default configuration from "/tmp/mimir" directory
+ ansible.builtin.file:
+ path: "/tmp/mimir"
+ state: absent
+
+- name: Ensure that Mimir working path exists
+ ansible.builtin.file:
+ path: "{{ mimir_working_path }}"
+ state: directory
+ owner: "mimir"
+ group: "mimir"
+ mode: "0755"
+
+- name: Template Mimir config - /etc/mimir/config.yml
+ ansible.builtin.template:
+ src: "config.yml.j2"
+ dest: "/etc/mimir/config.yml"
+ owner: "mimir"
+ group: "mimir"
+ mode: "0644"
+ notify:
+ - Restart mimir
+
+- name: Ensure that Mimir rule path exists
+ ansible.builtin.file:
+ path: "{{ mimir_ruler_alert_path }}"
+ state: directory
+ owner: "mimir"
+ group: "mimir"
+ mode: "0755"
+ when:
+ - mimir_ruler_alert_path is defined
+ - mimir_ruler is defined
+
+- name: Ensure that Mimir is started
+ ansible.builtin.systemd:
+ name: mimir.service
+ state: started
+ enabled: true
+
+- name: Verify that Mimir URL is responding
+ ansible.builtin.uri:
+ url: "http://127.0.0.1:{{ mimir_http_listen_port }}/ready"
+ method: GET
+ register: mimir_verify_url_status_code
+ retries: 5
+ delay: 8
+ until: mimir_verify_url_status_code.status == 200
diff --git a/ansible_collections/grafana/grafana/roles/mimir/tasks/main.yml b/ansible_collections/grafana/grafana/roles/mimir/tasks/main.yml
new file mode 100644
index 000000000..880c6e5a2
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/mimir/tasks/main.yml
@@ -0,0 +1,17 @@
+- name: Deploy Mimir service
+ ansible.builtin.include_tasks:
+ file: "deploy.yml"
+ apply:
+ tags: mimir_deploy
+ tags: mimir_deploy
+
+- name: Uninstall Mimir service
+ ansible.builtin.include_tasks:
+ file: "uninstall.yml"
+ apply:
+ tags:
+ - mimir_uninstall
+ - never
+ tags:
+ - mimir_uninstall
+ - never
diff --git a/ansible_collections/grafana/grafana/roles/mimir/tasks/setup-Debian.yml b/ansible_collections/grafana/grafana/roles/mimir/tasks/setup-Debian.yml
new file mode 100644
index 000000000..7028ed4d9
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/mimir/tasks/setup-Debian.yml
@@ -0,0 +1,7 @@
+---
+- name: APT - Install Mimir
+ ansible.builtin.apt:
+ deb: "{{ mimir_download_url_deb }}"
+ state: present
+ notify: Restart mimir
+ when: __current_deployed_version.stdout is not defined or mimir_version not in __current_deployed_version.stdout
diff --git a/ansible_collections/grafana/grafana/roles/mimir/tasks/setup-Redhat.yml b/ansible_collections/grafana/grafana/roles/mimir/tasks/setup-Redhat.yml
new file mode 100644
index 000000000..5bc34a91d
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/mimir/tasks/setup-Redhat.yml
@@ -0,0 +1,8 @@
+---
+- name: DNF - Install Mimir from remote URL
+ ansible.builtin.dnf:
+ name: "{{ mimir_download_url_rpm }}"
+ state: present
+ disable_gpg_check: true
+ notify: Restart mimir
+ when: __current_deployed_version.stdout is not defined or mimir_version not in __current_deployed_version.stdout
diff --git a/ansible_collections/grafana/grafana/roles/mimir/tasks/uninstall.yml b/ansible_collections/grafana/grafana/roles/mimir/tasks/uninstall.yml
new file mode 100644
index 000000000..e0ebee0c1
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/mimir/tasks/uninstall.yml
@@ -0,0 +1,51 @@
+---
+# tasks file for Mimir uninstall
+
+- name: Stop Mimir service
+ ansible.builtin.systemd: # noqa ignore-errors
+ name: mimir
+ state: stopped
+ ignore_errors: true
+
+- name: Uninstall Mimir rpm package
+ ansible.builtin.dnf:
+ name: "mimir"
+ state: absent
+ autoremove: true
+ when: ansible_os_family in ['RedHat', 'Rocky']
+
+- name: Uninstall Mimir deb package
+ ansible.builtin.apt:
+ name: "mimir"
+ state: absent
+ purge: true
+ when: ansible_os_family == 'Debian'
+
+- name: Ensure that Mimir firewalld rule is not present - tcp port {{ mimir_http_listen_port }}
+ ansible.posix.firewalld: # noqa ignore-errors
+ immediate: true
+ permanent: true
+ port: "{{ mimir_http_listen_port }}/tcp"
+ state: disabled
+ ignore_errors: true
+
+- name: Remove Mimir directories"
+ ansible.builtin.file:
+ path: "{{ remove_me }}"
+ state: absent
+ loop:
+ - "/etc/mimir"
+ - "{{ mimir_working_path }}"
+ loop_control:
+ loop_var: remove_me
+
+- name: Remove the Mimir system user
+ ansible.builtin.user:
+ name: "mimir"
+ force: true
+ state: absent
+
+- name: Remove Mimir system group
+ ansible.builtin.group:
+ name: "mimir"
+ state: absent
diff --git a/ansible_collections/cisco/ios/tests/unit/compat/__init__.py b/ansible_collections/grafana/grafana/roles/mimir/templates/.gitkeep
index e69de29bb..e69de29bb 100644
--- a/ansible_collections/cisco/ios/tests/unit/compat/__init__.py
+++ b/ansible_collections/grafana/grafana/roles/mimir/templates/.gitkeep
diff --git a/ansible_collections/grafana/grafana/roles/mimir/templates/config.yml.j2 b/ansible_collections/grafana/grafana/roles/mimir/templates/config.yml.j2
new file mode 100644
index 000000000..8f1035a6c
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/mimir/templates/config.yml.j2
@@ -0,0 +1,52 @@
+# Run Mimir in single process mode, with all components running in 1 process.
+target: all,alertmanager,overrides-exporter
+
+# Configure Mimir to use Minio as object storage backend.
+common:
+{% if mimir_storage is defined %}
+ {{ mimir_storage | to_nice_yaml(indent=2, sort_keys=False) | indent(2, False)}}
+{% endif %}
+
+# Blocks storage requires a prefix when using a common object storage bucket.
+{% if mimir_blocks_storage is defined %}
+blocks_storage:
+ {{ mimir_blocks_storage | to_nice_yaml(indent=2, sort_keys=False) | indent(2, False)}}
+{% endif %}
+
+# Blocks storage requires a prefix when using a common object storage bucket.
+{% if mimir_ruler_storage is defined %}
+ruler_storage:
+ {{ mimir_ruler_storage | to_nice_yaml(indent=2, sort_keys=False) | indent(2, False)}}
+{% endif %}
+
+# Alertmanager storage requires a prefix when using a common object storage bucket.
+{% if mimir_alertmanager_storage is defined %}
+alertmanager_storage:
+ {{ mimir_alertmanager_storage | to_nice_yaml(indent=2, sort_keys=False) | indent(2, False)}}
+{% endif %}
+
+# Use memberlist, a gossip-based protocol, to enable the 3 Mimir replicas to communicate.
+{% if mimir_memberlist is defined %}
+memberlist:
+ {{ mimir_memberlist | to_nice_yaml(indent=2, sort_keys=False) | indent(2, False)}}
+{% endif %}
+
+{% if mimir_ruler is defined %}
+ruler:
+ {{ mimir_ruler | to_nice_yaml(indent=2, sort_keys=False) | indent(2, False)}}
+{% endif %}
+
+{% if mimir_alertmanager is defined %}
+alertmanager:
+ {{ mimir_alertmanager | to_nice_yaml(indent=2, sort_keys=False) | indent(2, False)}}
+{% endif %}
+
+{% if mimir_server is defined %}
+server:
+ {{ mimir_server | to_nice_yaml(indent=2, sort_keys=False) | indent(2, False)}}
+{% endif %}
+
+{% if mimir_limits is defined %}
+limits:
+ {{ mimir_limits | to_nice_yaml(indent=2, sort_keys=False) | indent(2, False)}}
+{% endif %}
diff --git a/ansible_collections/cisco/iosxr/tests/unit/compat/__init__.py b/ansible_collections/grafana/grafana/roles/mimir/vars/.gitkeep
index e69de29bb..e69de29bb 100644
--- a/ansible_collections/cisco/iosxr/tests/unit/compat/__init__.py
+++ b/ansible_collections/grafana/grafana/roles/mimir/vars/.gitkeep
diff --git a/ansible_collections/grafana/grafana/roles/opentelemetry_collector/README.md b/ansible_collections/grafana/grafana/roles/opentelemetry_collector/README.md
new file mode 100644
index 000000000..11c7cda67
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/opentelemetry_collector/README.md
@@ -0,0 +1,100 @@
+# Ansible Role for OpenTelemetry Collector
+
+This Ansible role to install and configure the OpenTelemetry Collector, which can be used to collect traces, metrics, and logs.
+
+## Requirements
+
+Please ensure that `curl` is intalled on Ansible controller.
+
+## Role Variables
+
+Available variables with their default values are listed below (`defaults/main.yml`):
+
+| Variable Name | Description | Default Value |
+|---------------|-------------|---------------|
+| `otel_collector_version` | Version of OpenTelemetry Collector to install. | `"0.90.1"` |
+| `otel_collector_binary_url` | URL for downloading the OpenTelemetry Collector binary. This URL is constructed based on the collector version, type, and architecture. | `"https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v{{ otel_collector_version }}/{% if otel_collector_type == 'contrib' %}otelcol-contrib_{{ otel_collector_version }}_linux_{{ otel_collector_arch }}{% else %}otelcol_{{ otel_collector_version }}_linux_{{ otel_collector_arch }}{% endif %}.tar.gz"` |
+| `arch_mapping` | Mapping of `ansible_architecture` values to OpenTelemetry Collector binary architecture names. | See below\* |
+| `otel_collector_arch` | Architecture for the OpenTelemetry Collector binary, determined based on the `ansible_architecture` fact. | `"{{ arch_mapping[ansible_architecture] | default('amd64') }}"` |
+| `otel_collector_service_name` | The service name for the OpenTelemetry Collector. | `"otel-collector"` |
+| `otel_collector_type` | Type of the OpenTelemetry Collector (`contrib` includes additional components). | `contrib` |
+| `otel_collector_executable` | The executable name of the OpenTelemetry Collector, changes based on the collector type. | `{% if otel_collector_type == 'contrib' %}otelcol-contrib{% else %}otelcol{% endif %}` |
+| `otel_collector_installation_dir` | Installation directory for the OpenTelemetry Collector. | `"/etc/otel-collector"` |
+| `otel_collector_config_dir` | Directory for OpenTelemetry Collector configuration files. | `"/etc/otel-collector"` |
+| `otel_collector_config_file` | The main configuration file name for the OpenTelemetry Collector. | `"config.yaml"` |
+| `otel_collector_service_user` | The system user under which the OpenTelemetry Collector service will run. | `"otel"` |
+| `otel_collector_service_group` | The system group under which the OpenTelemetry Collector service will run. | `"otel"` |
+| `otel_collector_receivers` | Receivers configuration for the OpenTelemetry Collector. | `""` |
+| `otel_collector_exporters` | Exporters configuration for the OpenTelemetry Collector. | `""` |
+| `otel_collector_processors` | Processors configuration for the OpenTelemetry Collector. | `""` |
+| `otel_collector_extensions` | Extensions configuration for the OpenTelemetry Collector. | `""` |
+| `otel_collector_service` | Service configuration for the OpenTelemetry Collector. | `""` |
+| `otel_collector_connectors` | Connectors configuration for the OpenTelemetry Collector (optional). | `""` |
+
+\* For `arch_mapping`, the default mapping is as follows:
+- `x86_64`: `amd64`
+- `aarch64`: `arm64`
+- `armv7l`: `armhf`
+- `i386`: `i386`
+- `ppc64le`: `ppc64le`
+
+Users of the role can override these variables as needed.
+
+## Example Playbook
+
+Include this role in your playbook with default settings:
+
+```yaml
+- name: Install OpenTelemetry Collector
+ hosts: all
+ become: true
+
+ tasks:
+ - name: Install OpenTelemetry Collector
+ ansible.builtin.include_role:
+ name: grafana.grafana.opentelemetry_collector
+ vars:
+ otel_collector_receivers:
+ otlp:
+ protocols:
+ grpc:
+ endpoint: 0.0.0.0:4317
+ http:
+ endpoint: 0.0.0.0:4318
+ otel_collector_processors:
+ batch:
+
+ otel_collector_exporters:
+ otlp:
+ endpoint: otelcol:4317
+
+ otel_collector_extensions:
+ health_check:
+ pprof:
+ zpages:
+
+ otel_collector_service:
+ extensions: [health_check, pprof, zpages]
+ pipelines:
+ traces:
+ receivers: [otlp]
+ processors: [batch]
+ exporters: [otlp]
+ metrics:
+ receivers: [otlp]
+ processors: [batch]
+ exporters: [otlp]
+ logs:
+ receivers: [otlp]
+ processors: [batch]
+ exporters: [otlp]
+
+```
+
+## License
+
+See [LICENSE](https://github.com/grafana/grafana-ansible-collection/blob/main/LICENSE)
+
+## Author Information
+
+- [Ishan Jain](https://github.com/ishanjainn)
diff --git a/ansible_collections/grafana/grafana/roles/opentelemetry_collector/defaults/main.yml b/ansible_collections/grafana/grafana/roles/opentelemetry_collector/defaults/main.yml
new file mode 100644
index 000000000..f615b6c78
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/opentelemetry_collector/defaults/main.yml
@@ -0,0 +1,27 @@
+otel_collector_version: "0.90.1"
+
+otel_collector_binary_url: "https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v{{ otel_collector_version }}/{% if otel_collector_type == 'contrib' %}otelcol-contrib_{{ otel_collector_version }}_linux_{{ otel_collector_arch }}{% else %}otelcol_{{ otel_collector_version }}_linux_{{ otel_collector_arch }}{% endif %}.tar.gz"
+
+arch_mapping:
+ x86_64: amd64
+ aarch64: arm64
+ armv7l: armhf
+ i386: i386
+ ppc64le: ppc64le
+
+otel_collector_arch: "{{ arch_mapping[ansible_architecture] | default('amd64') }}"
+otel_collector_service_name: "otel-collector"
+otel_collector_type: contrib
+otel_collector_executable: "{% if otel_collector_type == 'contrib' %}otelcol-contrib{% else %}otelcol{% endif %}"
+otel_collector_installation_dir: "/etc/otel-collector"
+otel_collector_config_dir: "/etc/otel-collector"
+otel_collector_config_file: "config.yaml"
+otel_collector_service_user: "otel"
+otel_collector_service_group: "otel"
+
+otel_collector_receivers: ""
+otel_collector_exporters: ""
+otel_collector_processors: ""
+otel_collector_extensions: ""
+otel_collector_service: ""
+otel_collector_connectors: ""
diff --git a/ansible_collections/grafana/grafana/roles/opentelemetry_collector/handlers/main.yml b/ansible_collections/grafana/grafana/roles/opentelemetry_collector/handlers/main.yml
new file mode 100644
index 000000000..b5bbf355b
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/opentelemetry_collector/handlers/main.yml
@@ -0,0 +1,5 @@
+- name: Restart OpenTelemetry Collector
+ ansible.builtin.systemd:
+ name: "{{ otel_collector_service_name }}"
+ state: restarted
+ become: true
diff --git a/ansible_collections/grafana/grafana/roles/opentelemetry_collector/meta/main.yml b/ansible_collections/grafana/grafana/roles/opentelemetry_collector/meta/main.yml
new file mode 100644
index 000000000..edd9779c6
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/opentelemetry_collector/meta/main.yml
@@ -0,0 +1,25 @@
+galaxy_info:
+ author: Ishan Jain
+ description: Role to install and configure OpenTelemetry Collector
+ license: "GPL-3.0-or-later"
+ min_ansible_version: "2.11"
+ platforms:
+ - name: Fedora
+ versions:
+ - "all"
+ - name: Debian
+ versions:
+ - "all"
+ - name: Ubuntu
+ versions:
+ - "all"
+ - name: EL
+ versions:
+ - "all"
+ galaxy_tags:
+ - grafana
+ - observability
+ - monitoring
+ - opentelemetry
+ - telemetry
+ - collector
diff --git a/ansible_collections/grafana/grafana/roles/opentelemetry_collector/tasks/configure.yml b/ansible_collections/grafana/grafana/roles/opentelemetry_collector/tasks/configure.yml
new file mode 100644
index 000000000..3d5f57ac3
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/opentelemetry_collector/tasks/configure.yml
@@ -0,0 +1,18 @@
+- name: Create OpenTelemetry Collector config directory
+ ansible.builtin.file:
+ path: "{{ otel_collector_config_dir }}"
+ state: directory
+ owner: "{{ otel_collector_service_user }}"
+ group: "{{ otel_collector_service_group }}"
+ mode: '0755'
+ become: true
+
+- name: Deploy OpenTelemetry Collector configuration file
+ ansible.builtin.template:
+ src: otel_collector_config.yml.j2
+ dest: "{{ otel_collector_config_dir }}/{{ otel_collector_config_file }}"
+ owner: "{{ otel_collector_service_user }}"
+ group: "{{ otel_collector_service_group }}"
+ mode: '0644'
+ notify: Restart OpenTelemetry Collector
+ become: true
diff --git a/ansible_collections/grafana/grafana/roles/opentelemetry_collector/tasks/install.yml b/ansible_collections/grafana/grafana/roles/opentelemetry_collector/tasks/install.yml
new file mode 100644
index 000000000..0e4e87b92
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/opentelemetry_collector/tasks/install.yml
@@ -0,0 +1,56 @@
+- name: Create otel group
+ ansible.builtin.group:
+ name: "{{ otel_collector_service_group }}"
+ system: true
+ become: true
+
+- name: Create otel user
+ ansible.builtin.user:
+ name: "{{ otel_collector_service_user }}"
+ group: "{{ otel_collector_service_group }}"
+ system: true
+ create_home: false # Appropriate for a system user, usually doesn't need a home directory
+ become: true
+
+- name: Determine the architecture for OpenTelemetry Collector binary
+ set_fact:
+ otel_collector_arch: "{{ arch_mapping[ansible_architecture] | default('amd64') }}"
+ vars:
+ arch_mapping:
+ x86_64: amd64
+ aarch64: arm64
+ armv7l: armhf
+ i386: i386
+ ppc64le: ppc64le
+
+- name: Download OpenTelemetry Collector binary
+ ansible.builtin.get_url:
+ url: "{{ otel_collector_binary_url }}"
+ dest: "/tmp/otelcol-{{ otel_collector_type }}-{{ otel_collector_version }}.tar.gz"
+ mode: '0755'
+ become: true
+ register: download_result
+
+- name: Remove existing OpenTelemetry Collector installation directory
+ ansible.builtin.file:
+ path: "{{ otel_collector_installation_dir }}"
+ state: absent
+ become: true
+ when: download_result.changed
+
+- name: Create OpenTelemetry Collector installation directory
+ ansible.builtin.file:
+ path: "{{ otel_collector_installation_dir }}"
+ state: directory
+ mode: '0755'
+ owner: "{{ otel_collector_service_user }}"
+ group: "{{ otel_collector_service_group }}"
+ become: true
+
+- name: Extract OpenTelemetry Collector binary
+ ansible.builtin.unarchive:
+ src: "/tmp/otelcol-{{ otel_collector_type }}-{{ otel_collector_version }}.tar.gz"
+ dest: "{{ otel_collector_installation_dir }}"
+ remote_src: yes
+ become: true
+ register: extract_result
diff --git a/ansible_collections/grafana/grafana/roles/opentelemetry_collector/tasks/main.yml b/ansible_collections/grafana/grafana/roles/opentelemetry_collector/tasks/main.yml
new file mode 100644
index 000000000..6557285ff
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/opentelemetry_collector/tasks/main.yml
@@ -0,0 +1,11 @@
+- name: Install OpenTelemetry Collector
+ include_tasks: install.yml
+ tags: [install]
+
+- name: Configure OpenTelemetry Collector
+ include_tasks: configure.yml
+ tags: [configure]
+
+- name: Manage OpenTelemetry Collector service
+ include_tasks: service.yml
+ tags: [service]
diff --git a/ansible_collections/grafana/grafana/roles/opentelemetry_collector/tasks/service.yml b/ansible_collections/grafana/grafana/roles/opentelemetry_collector/tasks/service.yml
new file mode 100644
index 000000000..6de6e8fe3
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/opentelemetry_collector/tasks/service.yml
@@ -0,0 +1,19 @@
+- name: Copy OpenTelemetry Collector systemd unit file
+ ansible.builtin.template:
+ src: otel_collector.service.j2
+ dest: /etc/systemd/system/{{ otel_collector_service_name }}.service
+ mode: '0644'
+ become: true
+ notify: Restart OpenTelemetry Collector
+
+- name: Reload systemd daemon to pick up changes
+ ansible.builtin.systemd:
+ daemon_reload: yes
+ become: true
+
+- name: Ensure OpenTelemetry Collector service is enabled and running
+ ansible.builtin.service:
+ name: "{{ otel_collector_service_name }}"
+ enabled: yes
+ state: started
+ become: true
diff --git a/ansible_collections/grafana/grafana/roles/opentelemetry_collector/templates/otel_collector.service.j2 b/ansible_collections/grafana/grafana/roles/opentelemetry_collector/templates/otel_collector.service.j2
new file mode 100644
index 000000000..79b35bece
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/opentelemetry_collector/templates/otel_collector.service.j2
@@ -0,0 +1,13 @@
+[Unit]
+Description=OpenTelemetry Collector
+After=network.target
+
+[Service]
+Type=simple
+ExecStart={{ otel_collector_installation_dir }}/{{ otel_collector_executable }} --config={{ otel_collector_config_dir }}/{{ otel_collector_config_file }}
+User={{ otel_collector_service_user }}
+Group={{ otel_collector_service_group }}
+Restart=on-failure
+
+[Install]
+WantedBy=multi-user.target
diff --git a/ansible_collections/grafana/grafana/roles/opentelemetry_collector/templates/otel_collector_config.yml.j2 b/ansible_collections/grafana/grafana/roles/opentelemetry_collector/templates/otel_collector_config.yml.j2
new file mode 100644
index 000000000..130189bbb
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/opentelemetry_collector/templates/otel_collector_config.yml.j2
@@ -0,0 +1,24 @@
+{% if otel_collector_receivers is defined and otel_collector_receivers | length > 0 %}
+receivers:
+{{ otel_collector_receivers | to_nice_yaml(indent=2) | indent(2, true) }}
+{% endif %}
+{% if otel_collector_processors is defined and otel_collector_processors | length > 0 %}
+processors:
+{{ otel_collector_processors | to_nice_yaml(indent=2) | indent(2, true) }}
+{% endif %}
+{% if otel_collector_exporters is defined and otel_collector_exporters | length > 0 %}
+exporters:
+{{ otel_collector_exporters | to_nice_yaml(indent=2) | indent(2, true) }}
+{% endif %}
+{% if otel_collector_extensions is defined and otel_collector_extensions | length > 0 %}
+extensions:
+{{ otel_collector_extensions | to_nice_yaml(indent=2) | indent(2, true) }}
+{% endif %}
+{% if otel_collector_service is defined and otel_collector_service | length > 0 %}
+service:
+{{ otel_collector_service | to_nice_yaml(indent=2) | indent(2, true) }}
+{% endif %}
+{% if otel_collector_connectors is defined and otel_collector_connectors | length > 0 %}
+connectors:
+{{ otel_collector_connectors | to_nice_yaml(indent=2) | indent(2, true) }}
+{% endif %}
diff --git a/ansible_collections/grafana/grafana/roles/promtail/README.md b/ansible_collections/grafana/grafana/roles/promtail/README.md
new file mode 100644
index 000000000..1fbcb5503
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/promtail/README.md
@@ -0,0 +1,164 @@
+# Ansible role - Promtail
+
+[![License](https://img.shields.io/github/license/grafana/grafana-ansible-collection)](LICENSE)
+
+The Ansible Promtail Role allows you to effortlessly deploy and manage Promtail, agent which ships contents of local logs to private Loki.
+This role is tailored for operating systems such as **RedHat**, **Rocky Linux**, **AlmaLinux**, **Ubuntu**, and **Debian**.
+
+**🔑 Key Features**
+- **⚡ Root-less/Root runtime**: By default, Promtail operates in root-less mode, utilizing ACL (Access Control List) to securely access logs without requiring root permissions. You have the option to configure root mode if necessary.
+- **🧹 Effortless Uninstall**: Easily remove Promtail from your system using the "promtail_uninstall" tag.
+
+📢 **[Check the blog post](https://voidquark.com/blog/rootless-promtail-with-ansible/)** 📝 **Learn more about root-less mode.**
+
+## Table of Content
+
+- [Requirements](#requirements)
+- [Role Variables](#role-variables)
+- [Playbook](#playbook)
+
+## Requirements
+
+- Ansible 2.10+
+
+## Role Variables
+
+```yaml
+promtail_version: "latest"
+```
+The version of Promtail to download and deploy. Supported standard version "3.0.0" format or "latest".
+
+```yaml
+promtail_http_listen_port: 9080
+```
+The TCP port on which Promtail listens. By default, it listens on port `9080`.
+
+```yaml
+promtail_http_listen_address: "0.0.0.0"
+```
+The address on which Promtail listens for HTTP requests. By default, it listens on all interfaces.
+
+```yaml
+promtail_expose_port: false
+```
+By default, this is set to `false`. It supports only simple `firewalld` configurations. If set to `true`, a firewalld rule is added to expose the TCP `promtail_http_listen_port`. If set to `false`, configuration is skipped. If the `firewalld.service` is not active, all firewalld tasks are skipped.
+
+```yaml
+promtail_positions_path: "/var/lib/promtail"
+```
+Promtail path for position file. File indicating how far it has read into a file. It is needed for when Promtail is restarted to allow it to continue from where it left off.
+
+```yaml
+promtail_runtime_mode: "acl"
+```
+By default, Promtail runs in root-less mode. It supports two modes:
+- `acl`: Root-less mode, utilizing ACL permission model to read target log files.
+- `root`: Root mode, where Promtail runs as root and ACL configuration is skipped.
+
+```yaml
+promtail_user_append_groups:
+ - "systemd-journal"
+```
+Appends the promtail user to specific groups in root-less mode. By default, it appends the user to the `systemd-journal` group, granting permission to read system journal logs.
+
+```yaml
+promtail_download_url_rpm: "https://github.com/grafana/loki/releases/download/v{{ promtail_version }}/promtail-{{ promtail_version }}.{{ __promtail_arch }}.rpm"
+```
+The default download URL for the Promtail rpm package from GitHub.
+
+```yaml
+promtail_download_url_deb: "https://github.com/grafana/loki/releases/download/v{{ promtail_version }}/promtail_{{ promtail_version }}_{{ __promtail_arch }}.deb"
+```
+The default download URL for the Promtail deb package from GitHub.
+
+```yaml
+promtail_server:
+ http_listen_port: "{{ promtail_http_listen_port }}"
+ http_listen_address: "{{ promtail_http_listen_address }}"
+```
+The `server` block configures Promtail behavior as an HTTP server. [All possible values for `server`](https://grafana.com/docs/loki/latest/clients/promtail/configuration/#server)
+
+```yaml
+promtail_positions:
+ filename: "{{ promtail_positions_path }}/positions.yaml"
+```
+The `positions` block configures where Promtail will save a file indicating how far it has read into a file. It is needed for when Promtail is restarted to allow it to continue from where it left off. [All possible values for `positions`](https://grafana.com/docs/loki/latest/clients/promtail/configuration/#positions)
+
+```yaml
+promtail_clients:
+ - url: http://localhost:3100/loki/api/v1/push
+```
+The `clients` block configures how Promtail connects to instances of Loki. [All possible values for `clients`](https://grafana.com/docs/loki/latest/clients/promtail/configuration/#clients). ⚠️ This configuration is mandatory. By default, it's empty, and the example above serves as a simple illustration for inspiration.
+
+```yaml
+promtail_scrape_configs:
+ - job_name: system
+ static_configs:
+ - targets:
+ - localhost
+ labels:
+ job: messages
+ instance: "{{ ansible_fqdn }}"
+ __path__: /var/log/messages
+ - targets:
+ - localhost
+ labels:
+ job: nginx
+ instance: "{{ ansible_fqdn }}"
+ __path__: /var/log/nginx/*.log
+```
+The `scrape_configs` block configures how Promtail can scrape logs from a series of targets using a specified discovery method. [All possible values for `scrape_configs`](https://grafana.com/docs/loki/latest/clients/promtail/configuration/#scrape_configs). ⚠️ This configuration is mandatory. By default, it's empty, and the example above serves as a simple illustration for inspiration.
+
+| Variable Name | Description
+| ----------- | ----------- |
+| `promtail_limits_config` | The optional limits_config block configures global limits for this instance of Promtail. 📚 [documentation](https://grafana.com/docs/loki/latest/clients/promtail/configuration/#limits_config).
+| `promtail_target_config` | The target_config block controls the behavior of reading files from discovered targets. 📚 [documentation](https://grafana.com/docs/loki/latest/clients/promtail/configuration/#target_config).
+
+## Dependencies
+
+No Dependencies
+
+## Playbook
+
+```yaml
+- name: Manage promtail service
+ hosts: all
+ become: true
+ vars:
+ promtail_clients:
+ - url: http://localhost:3100/loki/api/v1/push
+ promtail_scrape_configs:
+ - job_name: system
+ static_configs:
+ - targets:
+ - localhost
+ labels:
+ job: messages
+ instance: "{{ ansible_fqdn }}"
+ __path__: /var/log/messages
+ - targets:
+ - localhost
+ labels:
+ job: nginx
+ instance: "{{ ansible_fqdn }}"
+ __path__: /var/log/nginx/*.log
+ roles:
+ - role: grafana.grafana.promtail
+```
+
+- Playbook execution example
+```shell
+# Deploy Promtail
+ansible-playbook function_promtail_play.yml
+
+# Uninstall Promtail
+ansible-playbook function_promtail_play.yml -t promtail_uninstall
+```
+
+## License
+
+See [LICENSE](https://github.com/grafana/grafana-ansible-collection/blob/main/LICENSE)
+
+## Author Information
+
+- [VoidQuark](https://github.com/voidquark)
diff --git a/ansible_collections/grafana/grafana/roles/promtail/defaults/main.yml b/ansible_collections/grafana/grafana/roles/promtail/defaults/main.yml
new file mode 100644
index 000000000..277037bf7
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/promtail/defaults/main.yml
@@ -0,0 +1,47 @@
+---
+# defaults file for promtail
+promtail_version: "latest"
+promtail_http_listen_port: 9080
+promtail_http_listen_address: "0.0.0.0"
+promtail_expose_port: false
+promtail_positions_path: "/var/lib/promtail"
+promtail_runtime_mode: "acl" # Supported "root" or "acl"
+
+promtail_user_append_groups:
+ - "systemd-journal"
+
+promtail_download_url_rpm: "https://github.com/grafana/loki/releases/download/v{{ promtail_version }}/promtail-{{ promtail_version }}.{{ __promtail_arch }}.rpm"
+promtail_download_url_deb: "https://github.com/grafana/loki/releases/download/v{{ promtail_version }}/promtail_{{ promtail_version }}_{{ __promtail_arch }}.deb"
+
+# default variables for /etc/promtail/config.yml
+promtail_server:
+ http_listen_port: "{{ promtail_http_listen_port }}"
+ http_listen_address: "{{ promtail_http_listen_address }}"
+
+promtail_positions:
+ filename: "{{ promtail_positions_path }}/positions.yaml"
+
+promtail_clients: []
+# promtail_clients:
+# - url: http://localhost:3100/loki/api/v1/push
+
+promtail_scrape_configs: []
+# promtail_scrape_configs:
+# - job_name: system
+# static_configs:
+# - targets:
+# - localhost
+# labels:
+# job: messages
+# instance: "{{ ansible_fqdn }}"
+# __path__: /var/log/messages
+# - targets:
+# - localhost
+# labels:
+# job: nginx
+# instance: "{{ ansible_fqdn }}"
+# __path__: /var/log/nginx/*.log
+
+# not set by default
+# promtail_limits_config:
+# promtail_target_config:
diff --git a/ansible_collections/grafana/grafana/roles/promtail/handlers/main.yml b/ansible_collections/grafana/grafana/roles/promtail/handlers/main.yml
new file mode 100644
index 000000000..d9f17243d
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/promtail/handlers/main.yml
@@ -0,0 +1,9 @@
+---
+# handlers file for promtail
+- name: Restart promtail
+ listen: "restart promtail"
+ ansible.builtin.systemd:
+ daemon_reload: true
+ name: promtail.service
+ state: restarted
+ enabled: true
diff --git a/ansible_collections/grafana/grafana/roles/promtail/meta/main.yml b/ansible_collections/grafana/grafana/roles/promtail/meta/main.yml
new file mode 100644
index 000000000..c7cee9a27
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/promtail/meta/main.yml
@@ -0,0 +1,28 @@
+---
+galaxy_info:
+ role_name: promtail
+ author: voidquark
+ description: Manage Grafana Promtail Application
+ license: "GPL-3.0-or-later"
+ min_ansible_version: "2.10"
+ platforms:
+ - name: EL
+ versions:
+ - "9"
+ - "8"
+ - name: Fedora
+ versions:
+ - all
+ - name: Debian
+ versions:
+ - all
+ - name: Ubuntu
+ versions:
+ - all
+ galaxy_tags:
+ - promtail
+ - grafana
+ - logging
+ - monitoring
+
+dependencies: []
diff --git a/ansible_collections/grafana/grafana/roles/promtail/molecule/default/converge.yml b/ansible_collections/grafana/grafana/roles/promtail/molecule/default/converge.yml
new file mode 100644
index 000000000..d9945b108
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/promtail/molecule/default/converge.yml
@@ -0,0 +1,15 @@
+---
+- name: Converge
+ hosts: all
+ vars:
+ promtail_scrape_configs:
+ - job_name: test
+ static_configs:
+ - targets:
+ - localhost
+ labels:
+ job: test
+ instance: "{{ ansible_fqdn }}"
+ __path__: /var/log/last*
+ roles:
+ - role: grafana.grafana.promtail
diff --git a/ansible_collections/grafana/grafana/roles/promtail/molecule/default/molecule.yml b/ansible_collections/grafana/grafana/roles/promtail/molecule/default/molecule.yml
new file mode 100644
index 000000000..339965a50
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/promtail/molecule/default/molecule.yml
@@ -0,0 +1,20 @@
+---
+dependency:
+ name: galaxy
+ options:
+ ignore-errors: true
+driver:
+ name: docker
+platforms:
+ - name: instance
+ image: "geerlingguy/docker-${MOLECULE_DISTRO:-rockylinux8}-ansible:latest"
+ command: ${MOLECULE_DOCKER_COMMAND:-""}
+ volumes:
+ - /sys/fs/cgroup:/sys/fs/cgroup:rw
+ cgroupns_mode: host
+ privileged: true
+ pre_build_image: true
+provisioner:
+ name: ansible
+ playbooks:
+ converge: converge.yml
diff --git a/ansible_collections/grafana/grafana/roles/promtail/tasks/acl_configuration.yml b/ansible_collections/grafana/grafana/roles/promtail/tasks/acl_configuration.yml
new file mode 100644
index 000000000..65516b92c
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/promtail/tasks/acl_configuration.yml
@@ -0,0 +1,116 @@
+---
+# tasks file for promtail deploy - acl configuration
+
+- name: Extract log files from static_configs - labels - path
+ ansible.builtin.set_fact:
+ __promtail_acl_log_files: >-
+ {{
+ promtail_scrape_configs
+ | selectattr('static_configs', 'defined')
+ | map(attribute='static_configs')
+ | flatten
+ | map(attribute='labels')
+ | map(attribute='__path__')
+ | list
+ }}
+
+- name: Extract log dirs paths from static_configs - labels - path
+ ansible.builtin.set_fact:
+ __promtail_acl_log_dirs: >-
+ {{
+ promtail_scrape_configs
+ | selectattr('static_configs', 'defined')
+ | map(attribute='static_configs')
+ | flatten
+ | map(attribute='labels')
+ | map(attribute='__path__')
+ | map('dirname')
+ | unique
+ | list
+ }}
+
+- name: Stat log dirs
+ ansible.builtin.stat:
+ path: "{{ item }}"
+ loop: "{{ __promtail_acl_log_dirs }}"
+ register: __promtail_stat_acl_log_dirs
+
+- name: Set recursive default ACL permission for log dirs
+ ansible.posix.acl:
+ path: "{{ item.item }}"
+ recursive: true
+ entity: promtail
+ etype: user
+ permissions: rx
+ default: true
+ state: present
+ loop: "{{ __promtail_stat_acl_log_dirs.results }}"
+ when:
+ - __promtail_stat_acl_log_dirs | length > 0
+ - item.stat.exists
+ notify: restart promtail
+
+- name: Set ACL permission for log dirs
+ ansible.posix.acl:
+ path: "{{ item.item }}"
+ entity: promtail
+ etype: user
+ permissions: rx
+ state: present
+ loop: "{{ __promtail_stat_acl_log_dirs.results }}"
+ when:
+ - __promtail_stat_acl_log_dirs | length > 0
+ - item.stat.exists
+ notify: restart promtail
+
+- name: Find all existing ACL log files
+ ansible.builtin.find:
+ paths: "{{ item | dirname }}"
+ patterns: "{{ item | basename }}"
+ loop: "{{ __promtail_acl_log_files }}"
+ register: __promtail_find_files
+
+- name: Define existing ACL log files
+ ansible.builtin.set_fact:
+ __promtail_existing_acl_log_files: "{{ __promtail_find_files.results | map(attribute='files') | flatten | map(attribute='path') }}"
+
+- name: Set ACL permission for existing log files
+ ansible.posix.acl:
+ path: "{{ item }}"
+ entity: promtail
+ etype: user
+ permissions: r
+ state: present
+ loop: "{{ __promtail_existing_acl_log_files }}"
+ when:
+ - __promtail_existing_acl_log_files | length > 0
+ notify: restart promtail
+
+- name: Promtail ACL Logrotate
+ when:
+ - __promtail_acl_log_dirs | length > 0
+ - __promtail_acl_log_files | length > 0
+ block:
+ - name: Template promtail ACL config for Logrotate
+ ansible.builtin.template:
+ src: "promtail_acl.j2"
+ dest: "/etc/logrotate.d/promtail_acl"
+ owner: "root"
+ group: "root"
+ mode: "0644"
+
+ - name: Ensure that Promtail dummy dir for logrotate ACL configuration exist
+ ansible.builtin.file:
+ path: "/var/log/dummy_promtail_acl"
+ state: directory
+ owner: "promtail"
+ group: "root"
+ mode: "0750"
+
+ - name: Create dummy empty log file for logrotate ACL configuration to work
+ ansible.builtin.copy:
+ content: ""
+ dest: "/var/log/dummy_promtail_acl/dummy_promtail_acl.log"
+ owner: "promtail"
+ group: "root"
+ mode: 0600
diff --git a/ansible_collections/grafana/grafana/roles/promtail/tasks/deploy.yml b/ansible_collections/grafana/grafana/roles/promtail/tasks/deploy.yml
new file mode 100644
index 000000000..483a9b1ba
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/promtail/tasks/deploy.yml
@@ -0,0 +1,139 @@
+---
+# tasks file for promtail deploy
+
+- name: Obtain the latest version from the GitHub repo
+ when: promtail_version == "latest"
+ block:
+ - name: Scrape Github API endpoint to obtain latest Promtail version
+ ansible.builtin.uri:
+ url: "https://api.github.com/repos/grafana/loki/releases/latest"
+ method: GET
+ body_format: json
+ become: false
+ delegate_to: localhost
+ run_once: true
+ register: __github_latest_version
+
+ - name: Latest available Promtail version
+ ansible.builtin.set_fact:
+ promtail_version: "{{ __github_latest_version.json.tag_name | regex_replace('^v?(\\d+\\.\\d+\\.\\d+)$', '\\1') }}"
+
+- name: Verify current deployed version
+ block:
+ - name: Check if Promtail binary is present
+ ansible.builtin.stat:
+ path: "/usr/bin/promtail"
+ register: __already_deployed
+
+ - name: Obtain current deployed Promtail version
+ ansible.builtin.command:
+ cmd: "/usr/bin/promtail --version"
+ changed_when: false
+ register: __current_deployed_version
+ when: __already_deployed.stat.exists | bool
+
+- name: Include RedHat/Rocky setup
+ ansible.builtin.include_tasks:
+ file: setup-RedHat.yml
+ when: ansible_os_family in ['RedHat', 'Rocky']
+
+- name: Include Debian/Ubuntu setup
+ ansible.builtin.include_tasks:
+ file: setup-Debian.yml
+ when: ansible_os_family == 'Debian'
+
+- name: Ensure that Promtail position path exists
+ ansible.builtin.file:
+ path: "{{ promtail_positions_path }}"
+ state: directory
+ owner: "promtail"
+ group: "root"
+ mode: "0750"
+ notify: restart promtail
+
+- name: Template Promtail config - /etc/promtail/config.yml
+ ansible.builtin.template:
+ src: "config.yml.j2"
+ dest: "/etc/promtail/config.yml"
+ owner: "promtail"
+ group: "root"
+ mode: "0644"
+ validate: "/usr/bin/promtail -check-syntax -config.file %s"
+ notify: restart promtail
+
+- name: Template Promtail systemd - /etc/systemd/system/promtail.service
+ ansible.builtin.template:
+ src: "promtail.service.j2"
+ dest: "/etc/systemd/system/promtail.service"
+ owner: "root"
+ group: "root"
+ mode: "0644"
+ notify: restart promtail
+
+- name: Add the Promtail system user to additional group
+ ansible.builtin.user:
+ name: "promtail"
+ groups: "{{ item }}"
+ system: true
+ append: true
+ create_home: false
+ state: present
+ loop: "{{ promtail_user_append_groups }}"
+ when:
+ - promtail_user_append_groups | length > 0
+ - promtail_runtime_mode == "acl"
+
+- name: Include Promtail ACL permission configuration
+ ansible.builtin.include_tasks:
+ file: "acl_configuration.yml"
+ when:
+ - promtail_scrape_configs | length > 0
+ - promtail_runtime_mode == "acl"
+
+- name: Get firewalld state
+ ansible.builtin.systemd:
+ name: "firewalld"
+ register: __firewalld_service_state
+
+- name: Enable firewalld rule to expose Promtail tcp port {{ promtail_http_listen_port }}
+ ansible.posix.firewalld:
+ immediate: true
+ permanent: true
+ port: "{{ promtail_http_listen_port }}/tcp"
+ state: enabled
+ when:
+ - __firewalld_service_state.status.ActiveState == "active"
+ - promtail_expose_port | bool
+
+- name: Flush handlers after deployment
+ ansible.builtin.meta: flush_handlers
+
+- name: Ensure that Promtail is started
+ ansible.builtin.systemd:
+ name: promtail.service
+ state: started
+
+- name: Stat position file
+ ansible.builtin.stat:
+ path: "{{ promtail_positions_path }}/positions.yaml"
+ register: __promtail_stat_position_file
+
+- name: Ensure correct owner and group for Promtail position file
+ ansible.builtin.file:
+ path: "{{ promtail_positions_path }}/positions.yaml"
+ state: file
+ owner: "promtail"
+ notify: restart promtail
+ when:
+ - __promtail_stat_position_file.stat.exists
+ - promtail_runtime_mode == "acl"
+
+- name: Verify that Promtail URL is responding
+ ansible.builtin.uri:
+ url: "http://{{ promtail_http_listen_address }}:{{ promtail_http_listen_port }}/ready"
+ method: GET
+ register: promtail_verify_url_status_code
+ retries: 5
+ delay: 8
+ until: promtail_verify_url_status_code.status == 200
+ when: promtail_expose_port | bool
diff --git a/ansible_collections/grafana/grafana/roles/promtail/tasks/main.yml b/ansible_collections/grafana/grafana/roles/promtail/tasks/main.yml
new file mode 100644
index 000000000..11bfdbf19
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/promtail/tasks/main.yml
@@ -0,0 +1,23 @@
+---
+# tasks file for promtail
+- name: Include OS specific variables
+ ansible.builtin.include_vars:
+ file: "{{ ansible_os_family }}.yml"
+
+- name: Deploy Promtail service
+ ansible.builtin.include_tasks:
+ file: "deploy.yml"
+ apply:
+ tags: promtail_deploy
+ tags: promtail_deploy
+
+- name: Uninstall Promtail service
+ ansible.builtin.include_tasks:
+ file: "uninstall.yml"
+ apply:
+ tags:
+ - promtail_uninstall
+ - never
+ tags:
+ - promtail_uninstall
+ - never
diff --git a/ansible_collections/grafana/grafana/roles/promtail/tasks/setup-Debian.yml b/ansible_collections/grafana/grafana/roles/promtail/tasks/setup-Debian.yml
new file mode 100644
index 000000000..3192279e9
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/promtail/tasks/setup-Debian.yml
@@ -0,0 +1,14 @@
+---
+- name: APT - Ensure that ACL is present
+ ansible.builtin.apt:
+ name: "acl"
+ state: present
+ update_cache: yes
+ when: promtail_runtime_mode == "acl"
+
+- name: APT - Install Promtail
+ ansible.builtin.apt:
+ deb: "{{ promtail_download_url_deb }}"
+ state: present
+ notify: restart promtail
+ when: __current_deployed_version.stdout is not defined or promtail_version not in __current_deployed_version.stdout
diff --git a/ansible_collections/grafana/grafana/roles/promtail/tasks/setup-RedHat.yml b/ansible_collections/grafana/grafana/roles/promtail/tasks/setup-RedHat.yml
new file mode 100644
index 000000000..b50573da0
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/promtail/tasks/setup-RedHat.yml
@@ -0,0 +1,9 @@
+---
+- name: DNF - Install Promtail from remote URL
+ ansible.builtin.dnf:
+ name: "{{ promtail_download_url_rpm }}"
+ state: present
+ disable_gpg_check: true
+ notify: restart promtail
+ when:
+ - __current_deployed_version.stdout is not defined or promtail_version not in __current_deployed_version.stdout
diff --git a/ansible_collections/grafana/grafana/roles/promtail/tasks/uninstall.yml b/ansible_collections/grafana/grafana/roles/promtail/tasks/uninstall.yml
new file mode 100644
index 000000000..0cac84d81
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/promtail/tasks/uninstall.yml
@@ -0,0 +1,119 @@
+---
+# tasks file for promtail uninstall
+- name: Stop Promtail service
+ ansible.builtin.systemd: # noqa ignore-errors
+ name: promtail
+ state: stopped
+ ignore_errors: true
+
+- name: Extract log files from static_configs - labels - path
+ ansible.builtin.set_fact:
+ __promtail_acl_log_files: >-
+ {{
+ promtail_scrape_configs
+ | selectattr('static_configs', 'defined')
+ | map(attribute='static_configs')
+ | flatten
+ | map(attribute='labels')
+ | map(attribute='__path__')
+ | list
+ }}
+
+- name: Extract log dirs paths from static_configs - labels - path
+ ansible.builtin.set_fact:
+ __promtail_acl_log_dirs: >-
+ {{
+ promtail_scrape_configs
+ | selectattr('static_configs', 'defined')
+ | map(attribute='static_configs')
+ | flatten
+ | map(attribute='labels')
+ | map(attribute='__path__')
+ | map('dirname')
+ | list
+ }}
+
+- name: Remove ACL Permission for log dirs - default
+ ansible.posix.acl: # noqa ignore-errors
+ path: "{{ item }}"
+ recursive: true
+ entity: promtail
+ etype: user
+ default: true
+ state: absent
+ loop: "{{ __promtail_acl_log_dirs }}"
+ ignore_errors: true
+
+- name: Remove ACL permission for log dirs
+ ansible.posix.acl: # noqa ignore-errors
+ path: "{{ item }}"
+ entity: promtail
+ etype: user
+ state: absent
+ loop: "{{ __promtail_acl_log_dirs }}"
+ ignore_errors: true
+
+- name: Find all existing ACL log files
+ ansible.builtin.find:
+ paths: "{{ item | dirname }}"
+ patterns: "{{ item | basename }}"
+ loop: "{{ __promtail_acl_log_files }}"
+ register: __promtail_find_files
+
+- name: Define existing ACL log files
+ ansible.builtin.set_fact:
+ __promtail_existing_acl_log_files: "{{ __promtail_find_files.results | map(attribute='files') | flatten | map(attribute='path') }}"
+
+- name: Remove ACL Permission for existing log files
+ ansible.posix.acl: # noqa ignore-errors
+ path: "{{ item }}"
+ entity: promtail
+ etype: user
+ state: absent
+ loop: "{{ __promtail_existing_acl_log_files }}"
+ ignore_errors: true
+
+- name: Uninstall Promtail rpm package
+ ansible.builtin.dnf:
+ name: "promtail"
+ state: absent
+ autoremove: true
+ when: ansible_os_family in ['RedHat', 'Rocky']
+
+- name: Uninstall Promtail deb package
+ ansible.builtin.apt:
+ name: "promtail"
+ state: absent
+ purge: true
+ when: ansible_os_family == 'Debian'
+
+- name: Ensure that Promtail firewalld rule is not present - tcp port {{ promtail_http_listen_port }}
+ ansible.posix.firewalld: # noqa ignore-errors
+ immediate: true
+ permanent: true
+ port: "{{ promtail_http_listen_port }}/tcp"
+ state: disabled
+ ignore_errors: true
+
+- name: Remove Promtail directories"
+ ansible.builtin.file:
+ path: "{{ remove_me }}"
+ state: absent
+ loop:
+ - "/etc/promtail"
+ - "{{ promtail_positions_path }}"
+ - "/etc/logrotate.d/promtail_acl"
+ - "/var/log/dummy_promtail_acl"
+ loop_control:
+ loop_var: remove_me
+
+- name: Remove the Promtail system user
+ ansible.builtin.user:
+ name: "promtail"
+ force: true
+ state: absent
+
+- name: Remove Promtail system group
+ ansible.builtin.group:
+ name: "promtail"
+ state: absent
diff --git a/ansible_collections/grafana/grafana/roles/promtail/templates/config.yml.j2 b/ansible_collections/grafana/grafana/roles/promtail/templates/config.yml.j2
new file mode 100644
index 000000000..83681310d
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/promtail/templates/config.yml.j2
@@ -0,0 +1,22 @@
+server:
+ {{ promtail_server | to_nice_yaml(indent=2,sort_keys=False) | indent(2, False) }}
+{% if promtail_positions is defined %}
+positions:
+ {{ promtail_positions | to_nice_yaml(indent=2,sort_keys=False) | indent(2, False) }}
+{% endif %}
+{% if promtail_clients is defined %}
+clients:
+ {{ promtail_clients | to_nice_yaml(indent=2,sort_keys=False) | indent(2, False) }}
+{% endif %}
+{% if promtail_scrape_configs is defined %}
+scrape_configs:
+ {{ promtail_scrape_configs | to_nice_yaml(indent=2,sort_keys=False) | indent(2, False) }}
+{% endif %}
+{% if promtail_limits_config is defined %}
+limits_config:
+ {{ promtail_limits_config | to_nice_yaml(indent=2,sort_keys=False) | indent(2, False) }}
+{% endif %}
+{% if promtail_target_config is defined %}
+target_config:
+ {{ promtail_target_config | to_nice_yaml(indent=2,sort_keys=False) | indent(2, False) }}
+{% endif %}
diff --git a/ansible_collections/grafana/grafana/roles/promtail/templates/promtail.service.j2 b/ansible_collections/grafana/grafana/roles/promtail/templates/promtail.service.j2
new file mode 100644
index 000000000..6dc8384df
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/promtail/templates/promtail.service.j2
@@ -0,0 +1,18 @@
+[Unit]
+Description=Promtail service
+After=network.target
+
+[Service]
+Type=simple
+{% if promtail_runtime_mode == "acl" %}
+User=promtail
+{% elif promtail_runtime_mode == "root" %}
+User=root
+{% endif %}
+ExecStart=/usr/bin/promtail -config.file /etc/promtail/config.yml
+
+TimeoutSec = 60
+Restart = on-failure
+RestartSec = 2
+
+[Install]
diff --git a/ansible_collections/grafana/grafana/roles/promtail/templates/promtail_acl.j2 b/ansible_collections/grafana/grafana/roles/promtail/templates/promtail_acl.j2
new file mode 100644
index 000000000..40090658b
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/promtail/templates/promtail_acl.j2
@@ -0,0 +1,13 @@
+/var/log/dummy_promtail_acl/dummy_promtail_acl.log
+{
+ copytruncate
+ postrotate
+{% for each_dir in __promtail_acl_log_dirs %}
+ /usr/bin/setfacl -R -m d:u:promtail:rx {{ each_dir }}
+ /usr/bin/setfacl -m u:promtail:rx {{ each_dir }}
+{% endfor %}
+{% for each_log in __promtail_acl_log_files %}
+ /usr/bin/setfacl -m u:promtail:r {{ each_log }}
+{% endfor %}
+ endscript
+}
diff --git a/ansible_collections/grafana/grafana/roles/promtail/vars/Debian.yml b/ansible_collections/grafana/grafana/roles/promtail/vars/Debian.yml
new file mode 100644
index 000000000..f9d41b28e
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/promtail/vars/Debian.yml
@@ -0,0 +1,5 @@
+---
+__promtail_arch_map:
+ x86_64: 'amd64'
+
+__promtail_arch: "{{ __promtail_arch_map[ansible_architecture] | default(ansible_architecture) }}"
diff --git a/ansible_collections/grafana/grafana/roles/promtail/vars/RedHat.yml b/ansible_collections/grafana/grafana/roles/promtail/vars/RedHat.yml
new file mode 100644
index 000000000..0954ee3d3
--- /dev/null
+++ b/ansible_collections/grafana/grafana/roles/promtail/vars/RedHat.yml
@@ -0,0 +1,2 @@
+---
+__promtail_arch: "{{ ansible_architecture }}"
diff --git a/ansible_collections/hetzner/hcloud/.ansible-lint b/ansible_collections/hetzner/hcloud/.ansible-lint
index b8282450d..aaa42e776 100644
--- a/ansible_collections/hetzner/hcloud/.ansible-lint
+++ b/ansible_collections/hetzner/hcloud/.ansible-lint
@@ -11,12 +11,10 @@ exclude_paths:
- tests/integration/targets/load_balancer_network
- tests/integration/targets/load_balancer_service
- tests/integration/targets/load_balancer_target
- - tests/integration/targets/network
- tests/integration/targets/placement_group
- tests/integration/targets/primary_ip
- tests/integration/targets/route
- tests/integration/targets/server
- - tests/integration/targets/server_network
- tests/integration/targets/ssh_key
- tests/integration/targets/volume
diff --git a/ansible_collections/hetzner/hcloud/.azure-pipelines/azure-pipelines.yml b/ansible_collections/hetzner/hcloud/.azure-pipelines/azure-pipelines.yml
index 8300381b4..aaf5c21e6 100644
--- a/ansible_collections/hetzner/hcloud/.azure-pipelines/azure-pipelines.yml
+++ b/ansible_collections/hetzner/hcloud/.azure-pipelines/azure-pipelines.yml
@@ -77,16 +77,6 @@ stages:
- name: Sanity
test: 2.14/sanity
- - stage: Sanity_2_13
- displayName: Sanity 2.13
- dependsOn: []
- jobs:
- - template: templates/matrix.yml
- parameters:
- targets:
- - name: Sanity
- test: 2.13/sanity
-
### Units
- stage: Units_devel
displayName: Units devel
@@ -128,16 +118,6 @@ stages:
- name: (py3.9)
test: 2.14/units/3.9
- - stage: Units_2_13
- displayName: Units 2.13
- dependsOn: []
- jobs:
- - template: templates/matrix.yml
- parameters:
- targets:
- - name: (py3.8)
- test: 2.13/units/3.8
-
## Integration
- stage: Integration_devel
displayName: Integration devel
@@ -183,17 +163,6 @@ stages:
- name: (py3.9)
test: 2.14/integration/3.9
- - stage: Integration_2_13
- displayName: Integration 2.13
- dependsOn: []
- jobs:
- - template: templates/matrix.yml
- parameters:
- groups: [1, 2, 3]
- targets:
- - name: (py3.8)
- test: 2.13/integration/3.8
-
### Finally
- stage: Summary
condition: succeededOrFailed()
@@ -202,16 +171,13 @@ stages:
- Sanity_2_16
- Sanity_2_15
- Sanity_2_14
- - Sanity_2_13
- Units_devel
- Units_2_16
- Units_2_15
- Units_2_14
- - Units_2_13
- Integration_devel
- Integration_2_16
- Integration_2_15
- Integration_2_14
- - Integration_2_13
jobs:
- template: templates/coverage.yml
diff --git a/ansible_collections/hetzner/hcloud/.github/release-please-manifest.json b/ansible_collections/hetzner/hcloud/.github/release-please-manifest.json
index b2b35cf9b..c313fd610 100644
--- a/ansible_collections/hetzner/hcloud/.github/release-please-manifest.json
+++ b/ansible_collections/hetzner/hcloud/.github/release-please-manifest.json
@@ -1 +1 @@
-{".":"2.5.0"}
+{".":"3.1.1"}
diff --git a/ansible_collections/hetzner/hcloud/.gitlab-ci.yml b/ansible_collections/hetzner/hcloud/.gitlab-ci.yml
index 3387f825b..a18356f58 100644
--- a/ansible_collections/hetzner/hcloud/.gitlab-ci.yml
+++ b/ansible_collections/hetzner/hcloud/.gitlab-ci.yml
@@ -25,7 +25,7 @@ sanity:
- tags
parallel:
matrix:
- - ANSIBLE_VERSION: ["devel", "2.13", "2.14", "2.15"]
+ - ANSIBLE_VERSION: ["devel", "2.14", "2.15"]
GROUP: [1]
script:
- bash tests/utils/gitlab/gitlab.sh ${ANSIBLE_VERSION}/sanity/${GROUP}
diff --git a/ansible_collections/hetzner/hcloud/.pre-commit-config.yaml b/ansible_collections/hetzner/hcloud/.pre-commit-config.yaml
index d1d1c6a4d..8ce6dcf4e 100644
--- a/ansible_collections/hetzner/hcloud/.pre-commit-config.yaml
+++ b/ansible_collections/hetzner/hcloud/.pre-commit-config.yaml
@@ -4,7 +4,7 @@
exclude: ^plugins/module_utils/vendor/hcloud/.*$
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
- rev: v4.5.0
+ rev: v4.6.0
hooks:
- id: check-added-large-files
- id: check-case-conflict
@@ -28,7 +28,7 @@ repos:
exclude: ^changelogs/(dev-changelog\.md|changelog\.yaml)$
- repo: https://github.com/asottile/pyupgrade
- rev: v3.15.0
+ rev: v3.15.2
hooks:
- id: pyupgrade
args: [--py38-plus]
@@ -39,24 +39,24 @@ repos:
- id: isort
- repo: https://github.com/psf/black-pre-commit-mirror
- rev: 24.1.1
+ rev: 24.4.0
hooks:
- id: black
- repo: https://github.com/ansible-community/antsibull-changelog
- rev: 0.23.0
+ rev: 0.26.0
hooks:
- id: antsibull-changelog-lint
- id: antsibull-changelog-lint-changelog-yaml
- repo: https://github.com/ansible/ansible-lint
- rev: v6.22.2
+ rev: v24.2.2
hooks:
- id: ansible-lint
name: ansible-lint
args: [--offline]
additional_dependencies:
- - ansible-core>=2.13.3
+ - ansible-core>=2.14
- netaddr
- repo: local
diff --git a/ansible_collections/hetzner/hcloud/CHANGELOG.rst b/ansible_collections/hetzner/hcloud/CHANGELOG.rst
index 2a40778f4..3ef5b1595 100644
--- a/ansible_collections/hetzner/hcloud/CHANGELOG.rst
+++ b/ansible_collections/hetzner/hcloud/CHANGELOG.rst
@@ -4,6 +4,61 @@ Hetzner Cloud Ansible Collection Release Notes
.. contents:: Topics
+v3.1.1
+======
+
+Bugfixes
+--------
+
+- inventory - Ensure inventory host variables are serializable and can be cached.
+
+v3.1.0
+======
+
+Minor Changes
+-------------
+
+- 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`.
+
+Bugfixes
+--------
+
+- 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.
+
+v3.0.0
+======
+
+Minor Changes
+-------------
+
+- inventory - Add `hostname` option used to template the hostname of the instances.
+- network - Allow renaming networks.
+
+Breaking Changes / Porting Guide
+--------------------------------
+
+- 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.
+
+Bugfixes
+--------
+
+- load_balancer_info - Correctly return the `cookie_lifetime` value.
+- load_balancer_service - Correctly return the `cookie_lifetime` value.
v2.5.0
======
diff --git a/ansible_collections/hetzner/hcloud/FILES.json b/ansible_collections/hetzner/hcloud/FILES.json
index 7fc09f2f0..8a784cf6b 100644
--- a/ansible_collections/hetzner/hcloud/FILES.json
+++ b/ansible_collections/hetzner/hcloud/FILES.json
@@ -109,7 +109,7 @@
"name": ".azure-pipelines/azure-pipelines.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2caa1318c14d2aa8d9ea75178d1fd142762b00712708d0dced4482bb254db4da",
+ "chksum_sha256": "cb7fba963afef16466bd794e359b91b9b6458acf64201f073603f849bba95ab8",
"format": 1
},
{
@@ -165,7 +165,7 @@
"name": ".github/release-please-manifest.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "042044c5e6e65c58917f2ca482ea5c6ba22d79d9cd6cd42f422ac9e041573955",
+ "chksum_sha256": "452a1b09a942c02e79c75643dc76181261d8d33b371a67de101e3437d9742309",
"format": 1
},
{
@@ -200,7 +200,7 @@
"name": "changelogs/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be4d9f48a034d816590f2e2d5d3f3fe866273f355963f9ad4ab67460b0e72b76",
+ "chksum_sha256": "525f7af28d069f1f418d7ec67d6ec49d64d02c404e9956dd8b0225c757e35012",
"format": 1
},
{
@@ -214,7 +214,7 @@
"name": "changelogs/dev-changelog.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ac62c11d1513004587ad3042473970d71d5f767e468f0e42905556df0456bc6c",
+ "chksum_sha256": "44232c68c5766f09ca5a57188dafcdb9d5fc5808335270d0424753609488bec3",
"format": 1
},
{
@@ -312,7 +312,7 @@
"name": "meta/runtime.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d5bd163e45ad774369d04d500f630d969dd3305dfe292cd49406c5d3912c3bb1",
+ "chksum_sha256": "9ea46a78c28566419b1580d17a2a953cc882657e7efa7f1507d1f4f340865609",
"format": 1
},
{
@@ -361,7 +361,7 @@
"name": "plugins/inventory/hcloud.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ab8a8501df0fca5d3947fbebb82a979ec23e3ff03752fedcf8a1a94b427ff76f",
+ "chksum_sha256": "c5cf395f3f98db8d4206dddbdd6d5e99e3f0572cdbb52433c2df39f52f5b729e",
"format": 1
},
{
@@ -466,7 +466,7 @@
"name": "plugins/module_utils/vendor/hcloud/core/domain.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6ccbb73a325759635e5259657164db8f29de49c6b45d7ae1bca3abed12198c0d",
+ "chksum_sha256": "b43bb979ef79e056fce148043117b6fac30a0fa82f78197eedae8d0f4cc28069",
"format": 1
},
{
@@ -543,7 +543,7 @@
"name": "plugins/module_utils/vendor/hcloud/firewalls/domain.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5dae67805c04fc8edf2d7d80501fdb52f03e6d2225bc4d196c9fa16893322a21",
+ "chksum_sha256": "aa376bb455d70faa5a2698c58948700b33af31fdf4a185af57c1e5198fffaf2b",
"format": 1
},
{
@@ -571,7 +571,7 @@
"name": "plugins/module_utils/vendor/hcloud/floating_ips/domain.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5f08d0091db38b48e8984c2cc7d56150dd9fe4cd8f0b606b81f699dc816ff194",
+ "chksum_sha256": "ff2ab946fecfe020473fe0b59f2398f8bbc59e9f00c574281aa709f19cb913a8",
"format": 1
},
{
@@ -613,7 +613,7 @@
"name": "plugins/module_utils/vendor/hcloud/images/client.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1c2ac5b28d51381625fb7f667173ff0f66ab45f78ced21dbcd1feb26662b2c62",
+ "chksum_sha256": "76e372d76df1dedbbf072a4f693c2a352f8c61a52d06c32faa3659cd0e87ce38",
"format": 1
},
{
@@ -704,7 +704,7 @@
"name": "plugins/module_utils/vendor/hcloud/load_balancers/domain.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "040f6ed68c8a9a3c17e3844a84cee66e8c8aa65d9d198008b2a159dbf2c248c2",
+ "chksum_sha256": "4e98cfc6d81c9080567c5c6d87b14a9cb6b97a81237afe17697f8cf59c88ade5",
"format": 1
},
{
@@ -781,7 +781,7 @@
"name": "plugins/module_utils/vendor/hcloud/networks/domain.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "966de8dfbde97299aa023f3782aed0d0125c6cca3381a793908721fb0581e29e",
+ "chksum_sha256": "c0f687b9f679f48134b30e9721010e134f145911794d3f574df554bca063f6a0",
"format": 1
},
{
@@ -809,7 +809,7 @@
"name": "plugins/module_utils/vendor/hcloud/placement_groups/domain.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c45a8e918b2ad87c7393180da6a1798a1d31ab69099cef858feff9e05caf28db",
+ "chksum_sha256": "cd76dcfd57be70e24967f00588dc577299148abf3f235d22f755d5e5909e5100",
"format": 1
},
{
@@ -837,7 +837,7 @@
"name": "plugins/module_utils/vendor/hcloud/primary_ips/domain.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5e19cd121863e11beab0981443834f28f4a75094a0c7e0a5a061401f2e4f63c2",
+ "chksum_sha256": "1300517378c1e8f6d101320e34d4b474db47e6ede7978dca3039210958a29a24",
"format": 1
},
{
@@ -893,7 +893,7 @@
"name": "plugins/module_utils/vendor/hcloud/servers/domain.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1d3f2802d9bcfe35a430f1f52986c353da6601deb864d496f2ec9d5a2d0cc4aa",
+ "chksum_sha256": "2e654701ac99e8efaaa192dd3a4a4c9aa3068edb40d691b02af310c8f78772d6",
"format": 1
},
{
@@ -977,7 +977,7 @@
"name": "plugins/module_utils/vendor/hcloud/_version.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3480ae676e9f8016a95ede33f2afba76e90a15747c9a568ea19164c4a4819289",
+ "chksum_sha256": "1ece049e077b5c8c3a5f67c4d9272668a227ecd22ec5ac8d07a8ede8fbc1d4df",
"format": 1
},
{
@@ -1019,14 +1019,14 @@
"name": "plugins/module_utils/hcloud.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "757b549f7087e0a78b69143c190177f46344d1ba510d3b17d34e73534c129b4f",
+ "chksum_sha256": "a405ed9424bd38a924ca0062ddf40f047faed5bee36954e28adad90ec4c4b086",
"format": 1
},
{
"name": "plugins/module_utils/version.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ba0c1aca62f6adfabff56202492b5d4941e5ff0a5ef3686821cc046e882baca3",
+ "chksum_sha256": "7466f47c316d7323ee6776953807350f60d2f90f82f5cb5fe3c1090becbacb66",
"format": 1
},
{
@@ -1047,231 +1047,231 @@
"name": "plugins/modules/certificate.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "09c842e0a9d0933c9abd6d5fae99e861e3a85dcbbcdd21d3ac91287e3ac8b086",
+ "chksum_sha256": "b6c9c50d48a7451f8e4c1da4b01cde2d733e11e43a5381b3e4bcadb19540597a",
"format": 1
},
{
"name": "plugins/modules/certificate_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f8f161a4e958682a52dbfec80232469482a7017d5eb9fc33c62fac1a8a25e06c",
+ "chksum_sha256": "fe57d2e3810c90c4b25bc2d3019f6d7167df92714ca2a5ad3ed72b98561b96d4",
"format": 1
},
{
"name": "plugins/modules/datacenter_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "72c739e5039fa088da5705985099c2a089546971d2e312ba836f8e9338d10c58",
+ "chksum_sha256": "84825fdb060c721fb6b88d2bce50f8f5514e93ed05c130395ee9359eb3019b7d",
"format": 1
},
{
"name": "plugins/modules/firewall.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "376cdd1493b06f30375afa678898262f1f60061ddff3c8b9269681cc190d3353",
+ "chksum_sha256": "e5a5ff659a468f99c6be5f9f0f8dc6249217ceff3da0e0734272457fd0f37ac1",
"format": 1
},
{
"name": "plugins/modules/firewall_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "981f7f9230b0046aebd6b1dee180e52c81b88f79e560d38f7398e49cc20210ba",
+ "chksum_sha256": "bc3dfb1050ef837e171cdfd14dca09fdbad23e7e43bd9a9f24c59c72d7aae98b",
"format": 1
},
{
"name": "plugins/modules/firewall_resource.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "04a07b4ecaa1549c3fa8e6d79e11c98d360a8602bcb36faf1c3c8bf3166f2b2f",
+ "chksum_sha256": "a6f27e0dac6e27b90a1c41924e7f315e4b7aff9f2bd2fb7bed09b18f9194615d",
"format": 1
},
{
"name": "plugins/modules/floating_ip.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3d716b8875aad3a6aa7ac4dab5070c1959e4829fc283a606dafbaa4ced11ccbb",
+ "chksum_sha256": "2c6461a03116926636f95e6450927a8a7cd245cde37e4d3c52cae6f08e17e2d0",
"format": 1
},
{
"name": "plugins/modules/floating_ip_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "907a9c87aaaabf470f08a49d1407b8f6e2991988f5d9ee5f53562f3d9ffff3b4",
+ "chksum_sha256": "1f773dd7e6e195578cf9bf861f5773b70bd2587af07314864d13ddeb7baee270",
"format": 1
},
{
"name": "plugins/modules/image_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e66fedae39facbc1d89b4cd7be1813b980f294990cf3799dc4554833cb43bb81",
+ "chksum_sha256": "7439259793e503b280170956973966fa624555583824b27a3102aa1a37106873",
"format": 1
},
{
"name": "plugins/modules/iso_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9366ae2eb9d6fb18d02bd82c776eb6c92ef0e47087aae86dd3b7c2be87f0ae8c",
+ "chksum_sha256": "c9ea2879d3cfffd1881950771181bc414c2b317674a24eec11f44094e8c5e71e",
"format": 1
},
{
"name": "plugins/modules/load_balancer.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b4f3515b0a9f2eff4907025f7a852d017084e2ab4fc60512a5d97b8f32b9f106",
+ "chksum_sha256": "d2c5e520bdfe044eb4721809691019efa98f7b90376cfd3fcd4d4e401810fe10",
"format": 1
},
{
"name": "plugins/modules/load_balancer_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "707101d55ed354171668ec60f1c0769de8976d5fad9c9001a90199e075ed2280",
+ "chksum_sha256": "68dbf2f84404f92d51fa021b0ec79c11fefbbd53b8fb944e6d3a762115047191",
"format": 1
},
{
"name": "plugins/modules/load_balancer_network.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "29bc3cc6725abc235f597ce9ebb074613cd74788c135bf6b896ba5e42a9b056d",
+ "chksum_sha256": "fa761743dfb898e535f125467ffedd6164b28cb3d70c40ebaa091881b3bf8023",
"format": 1
},
{
"name": "plugins/modules/load_balancer_service.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c40d3e075bc53481bce19d3e50a0f216075c1da864e00bc0b4c1bea2b347f4f5",
+ "chksum_sha256": "c29477d46b8b82cda49fb978f2a4063c176a1048b0077843aacc041e53ca9321",
"format": 1
},
{
"name": "plugins/modules/load_balancer_target.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ee8c10b5a44fd09723854cb3dd814d1e4f1dea0a5f62107a75ef81bd2e4f2ca3",
+ "chksum_sha256": "41aa1b537bcc941d0c2043a903bb5b03b7d569dd01abc06a8c77036c38f6dc66",
"format": 1
},
{
"name": "plugins/modules/load_balancer_type_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "302a5953254603e46ecac5fb04021228f13ca2e66b67a4dfd57fdbaef4fc3153",
+ "chksum_sha256": "81d3d7db68a3f20260777232953251afe9f5790cd470ecea6950fb4f3baf2c53",
"format": 1
},
{
"name": "plugins/modules/location_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "15571d3c16960ff15fad111d9602d688acbdd49febc5314a9fc0d57841b07c40",
+ "chksum_sha256": "be6e30b3877597b97a27c60459f01a607f96e8f9dd20fb099171ee8dba963bff",
"format": 1
},
{
"name": "plugins/modules/network.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7a1eb9cfafb175e0ca130179a0f692263b98823897bc036565d2a48ed723c4ff",
+ "chksum_sha256": "154f8309be228781449981b74a2033dafb00d0ce05728cfb9a2b4d2e3288cd5d",
"format": 1
},
{
"name": "plugins/modules/network_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d89fee964c48a06d0255049ad9981fb4184af29d94a6d4290defb0d54529253f",
+ "chksum_sha256": "0fd0ac3f386c798890f6deac1cfcab679ee051991287098469a300248243035c",
"format": 1
},
{
"name": "plugins/modules/placement_group.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8a77ff1cefd870cce48b03d1a344eca233ed7de3a469977c8b9d35bfb4f18ac0",
+ "chksum_sha256": "132d24fa570a56c7481cea6b1416c7b6980c830a9b9b1086b0f9808d5c8d3010",
"format": 1
},
{
"name": "plugins/modules/primary_ip.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8642642c6e944824959d671dd536c45f0fcf4c02515515749c56ee0e7778a548",
+ "chksum_sha256": "823b85d119057f22e29a665a5700e3711afaeeead1274b0ce27f8491864de5e7",
"format": 1
},
{
"name": "plugins/modules/primary_ip_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a5957f795d0abb11f0389d6d9bc6f1aafb4ff09ed52b0baf48cf593dd3a8507f",
+ "chksum_sha256": "936d28e9b7fef3833ddb0e370e003e3776bc96f21e0489fc620d4a80f11d086e",
"format": 1
},
{
"name": "plugins/modules/rdns.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9734b7c3f08137511a5f6c122e95c3ea003e5f9dc69e12076f5bf5c6614a0d8a",
+ "chksum_sha256": "47a9a4da94109edbe8d957b72a166fe91cace43ca916907fe9f81e2394d400a9",
"format": 1
},
{
"name": "plugins/modules/route.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1b7f689e4ff302ef28daf7a80b07835b6b6da96f545ec1abdd5213d089a8a4e7",
+ "chksum_sha256": "2ef1f610f62d62f476036d201857abb2cc0290e5d530be3d594b33f646c4be6f",
"format": 1
},
{
"name": "plugins/modules/server.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a451eac9d2620aba7956e52729842ab4f3297954c0dfcb074d7d2b71a4bed90d",
+ "chksum_sha256": "e739024f0a843baabf1542d1bfaacd7a8387409cae4f7df2e08ca0b2015163c0",
"format": 1
},
{
"name": "plugins/modules/server_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cb88b4ff41204761144380ed9854388f53df45e1bd6da6e8da9446ba128ce9e3",
+ "chksum_sha256": "0ccf126ef04ff8db2d394abc725a3c7b7707ed3ad079ecf327dcd273e2a70ffe",
"format": 1
},
{
"name": "plugins/modules/server_network.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "376f6464ab45438fa5e5f04168c8d666aaab3ee3916daf6bad6bd64c5349cc5f",
+ "chksum_sha256": "0fbabbf31c6b7d2c34a309c8865612347e418635089bdbf4bfbbb451f275919c",
"format": 1
},
{
"name": "plugins/modules/server_type_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b0f5c0186d54da14115c2a65867e80b7fae4a60e49a7e385faad192ac572d87a",
+ "chksum_sha256": "5415a22a580d91a15d7a4a646d14c4753fbe9f096f44e205ac226016cc4c00d0",
"format": 1
},
{
"name": "plugins/modules/ssh_key.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9560f0f9d6ac83fa89acaa7986308cd04d0e4e7464f5fe115c567173fbcdb9f8",
+ "chksum_sha256": "618938f3a602cad78f498edd71e2f8899fa96af736f790847f9f663509998c81",
"format": 1
},
{
"name": "plugins/modules/ssh_key_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ab0a6ea5ffdb1f98525be155ff1e999abdf7d10056c45ef5b2a203803b455606",
+ "chksum_sha256": "1d424bb04603ea341ba7bdd840979ab50c4d53f43f5278cde7c9229d5ea737fa",
"format": 1
},
{
"name": "plugins/modules/subnetwork.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "908458ed99857ebd8dd05ef3eaf18786beaa8877657bf464ae8481082c9f3699",
+ "chksum_sha256": "85c7e6ecb4b7a849f210b0234fdb0a299a0c6c1a1f77511cce66f195a15c8f32",
"format": 1
},
{
"name": "plugins/modules/volume.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0b9363ac9df20b307046c6f8ec1f05c93660e020ff831117a1e74144820aa47f",
+ "chksum_sha256": "19f99fdb4aa2ca35b675d1144053ef8699fc04824314c6bee78ffc196e7411b0",
"format": 1
},
{
"name": "plugins/modules/volume_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5cb42a56726cab37af48ce4f6742efbadcb413ecdfac82bfbf1852f46cfa9a5e",
+ "chksum_sha256": "22466e5279e3a5310b69efc919ada00e2e9f01f32b581ec9d220f8a4439d29d2",
"format": 1
},
{
@@ -1299,7 +1299,7 @@
"name": "scripts/vendor.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d750276690c449d94acffc1c4a65b3d53279f09297a6c296ba99a5b4bc2ed6b9",
+ "chksum_sha256": "cdf751a10893cc8ac851c9b3bfb3da6a63332a94cec343992dfb36ed24155634",
"format": 1
},
{
@@ -1341,7 +1341,7 @@
"name": "tests/integration/common/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d8c30f5355ba8e803396d6ea50c3544369aaff6e21a01bfd8aa580c411a8cfe3",
+ "chksum_sha256": "8c877b8600f9bea68dac7a5044b9ce139bd6d5ef97a7898d109da2bd3555cc4c",
"format": 1
},
{
@@ -1390,7 +1390,7 @@
"name": "tests/integration/targets/certificate/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
@@ -1446,7 +1446,7 @@
"name": "tests/integration/targets/certificate/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d924d2bc6bd615c6717c4d8b837fb0c9f5e4bd8df1c4ae94e3f649265d9ed19f",
+ "chksum_sha256": "e7b5096c1fc8e3f8805e369daec3c86fad0039aa4b598cac8d911d962599aa50",
"format": 1
},
{
@@ -1474,7 +1474,7 @@
"name": "tests/integration/targets/certificate_info/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
@@ -1537,7 +1537,7 @@
"name": "tests/integration/targets/certificate_info/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d924d2bc6bd615c6717c4d8b837fb0c9f5e4bd8df1c4ae94e3f649265d9ed19f",
+ "chksum_sha256": "e7b5096c1fc8e3f8805e369daec3c86fad0039aa4b598cac8d911d962599aa50",
"format": 1
},
{
@@ -1565,7 +1565,7 @@
"name": "tests/integration/targets/datacenter_info/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
@@ -1600,7 +1600,7 @@
"name": "tests/integration/targets/datacenter_info/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d924d2bc6bd615c6717c4d8b837fb0c9f5e4bd8df1c4ae94e3f649265d9ed19f",
+ "chksum_sha256": "e7b5096c1fc8e3f8805e369daec3c86fad0039aa4b598cac8d911d962599aa50",
"format": 1
},
{
@@ -1628,7 +1628,7 @@
"name": "tests/integration/targets/firewall/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
@@ -1649,7 +1649,7 @@
"name": "tests/integration/targets/firewall/tasks/cleanup.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8dd870926bba2e051a95750ce3b4eecef5a3833377e161e6bef078928274ad92",
+ "chksum_sha256": "66517a65a873e2ed97fb6e929e59cfda9390f20b9cb0a2e7a9005c8e0f1fb3fa",
"format": 1
},
{
@@ -1670,14 +1670,14 @@
"name": "tests/integration/targets/firewall/tasks/test.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ba26d33321fa93dca7304bfb232a2ee64886eb4262db53f561fd3f35eb3905d0",
+ "chksum_sha256": "c014033d9eadcd33ba59747085c1a1c288e6adf05773c3defb6f26a5ca864c29",
"format": 1
},
{
"name": "tests/integration/targets/firewall/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d924d2bc6bd615c6717c4d8b837fb0c9f5e4bd8df1c4ae94e3f649265d9ed19f",
+ "chksum_sha256": "e7b5096c1fc8e3f8805e369daec3c86fad0039aa4b598cac8d911d962599aa50",
"format": 1
},
{
@@ -1705,7 +1705,7 @@
"name": "tests/integration/targets/firewall_info/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
@@ -1726,7 +1726,7 @@
"name": "tests/integration/targets/firewall_info/tasks/cleanup.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8dd870926bba2e051a95750ce3b4eecef5a3833377e161e6bef078928274ad92",
+ "chksum_sha256": "66517a65a873e2ed97fb6e929e59cfda9390f20b9cb0a2e7a9005c8e0f1fb3fa",
"format": 1
},
{
@@ -1754,7 +1754,7 @@
"name": "tests/integration/targets/firewall_info/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b02a426443d5b1f10b9edc49bad4cdaf57c66f422bdaf60f1b4b904529431fb5",
+ "chksum_sha256": "e7b5096c1fc8e3f8805e369daec3c86fad0039aa4b598cac8d911d962599aa50",
"format": 1
},
{
@@ -1782,7 +1782,7 @@
"name": "tests/integration/targets/firewall_resource/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
@@ -1803,7 +1803,7 @@
"name": "tests/integration/targets/firewall_resource/tasks/cleanup.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8dd870926bba2e051a95750ce3b4eecef5a3833377e161e6bef078928274ad92",
+ "chksum_sha256": "66517a65a873e2ed97fb6e929e59cfda9390f20b9cb0a2e7a9005c8e0f1fb3fa",
"format": 1
},
{
@@ -1831,7 +1831,7 @@
"name": "tests/integration/targets/firewall_resource/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d924d2bc6bd615c6717c4d8b837fb0c9f5e4bd8df1c4ae94e3f649265d9ed19f",
+ "chksum_sha256": "9dcd2dc48825a03978b00602039ef02c5a71f84e2fb0e466cdafa24b801f2d8c",
"format": 1
},
{
@@ -1859,7 +1859,7 @@
"name": "tests/integration/targets/floating_ip/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
@@ -1887,14 +1887,14 @@
"name": "tests/integration/targets/floating_ip/tasks/test.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "16ab089febd775cfa9f5a8a3056011c532a93b1d1f950651a915d62e24d7f19a",
+ "chksum_sha256": "2b3eacb99ca6db155235d496e06b9d7fceda09a43811f9e5ad2793337f9674da",
"format": 1
},
{
"name": "tests/integration/targets/floating_ip/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8f69b796700c4a65ac5e4f99e98e9ed67c924a70ac01a47dc24e97e95ba74cd6",
+ "chksum_sha256": "b061bc633f1ba78ab727b63d080c52926e98cd34c5c8c8561d916b6ba6574f43",
"format": 1
},
{
@@ -1922,7 +1922,7 @@
"name": "tests/integration/targets/floating_ip_info/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
@@ -1971,7 +1971,7 @@
"name": "tests/integration/targets/floating_ip_info/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8f69b796700c4a65ac5e4f99e98e9ed67c924a70ac01a47dc24e97e95ba74cd6",
+ "chksum_sha256": "b061bc633f1ba78ab727b63d080c52926e98cd34c5c8c8561d916b6ba6574f43",
"format": 1
},
{
@@ -1999,7 +1999,7 @@
"name": "tests/integration/targets/image_info/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
@@ -2062,7 +2062,7 @@
"name": "tests/integration/targets/image_info/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d924d2bc6bd615c6717c4d8b837fb0c9f5e4bd8df1c4ae94e3f649265d9ed19f",
+ "chksum_sha256": "e7b5096c1fc8e3f8805e369daec3c86fad0039aa4b598cac8d911d962599aa50",
"format": 1
},
{
@@ -2090,7 +2090,7 @@
"name": "tests/integration/targets/iso_info/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
@@ -2125,7 +2125,7 @@
"name": "tests/integration/targets/iso_info/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8f69b796700c4a65ac5e4f99e98e9ed67c924a70ac01a47dc24e97e95ba74cd6",
+ "chksum_sha256": "b061bc633f1ba78ab727b63d080c52926e98cd34c5c8c8561d916b6ba6574f43",
"format": 1
},
{
@@ -2153,7 +2153,7 @@
"name": "tests/integration/targets/load_balancer/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
@@ -2188,14 +2188,14 @@
"name": "tests/integration/targets/load_balancer/tasks/test.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fce600c1ef1affccfe85e9dcff37aec4b0871d71d56f2c11120dd3a702a0092a",
+ "chksum_sha256": "c5591a55999f388c9d7f6745578a97c0721980ecad0363afe923763375454084",
"format": 1
},
{
"name": "tests/integration/targets/load_balancer/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7487e3a1fe3da170468c7132137f40e49195c30d9a6657f44b055c9c641e3953",
+ "chksum_sha256": "9dcd2dc48825a03978b00602039ef02c5a71f84e2fb0e466cdafa24b801f2d8c",
"format": 1
},
{
@@ -2223,7 +2223,7 @@
"name": "tests/integration/targets/load_balancer_info/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
@@ -2272,7 +2272,7 @@
"name": "tests/integration/targets/load_balancer_info/tasks/prepare.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b24030c8971a1d5cf054c44707ad97ed13c74083e2662a156f99f1f67bd27809",
+ "chksum_sha256": "a1ed2c93f712ca60de6f40ce0544f6ced9a50337cd5bc9691ab99f77aaaee814",
"format": 1
},
{
@@ -2286,7 +2286,7 @@
"name": "tests/integration/targets/load_balancer_info/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7487e3a1fe3da170468c7132137f40e49195c30d9a6657f44b055c9c641e3953",
+ "chksum_sha256": "9dcd2dc48825a03978b00602039ef02c5a71f84e2fb0e466cdafa24b801f2d8c",
"format": 1
},
{
@@ -2314,7 +2314,7 @@
"name": "tests/integration/targets/load_balancer_network/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
@@ -2349,7 +2349,7 @@
"name": "tests/integration/targets/load_balancer_network/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7487e3a1fe3da170468c7132137f40e49195c30d9a6657f44b055c9c641e3953",
+ "chksum_sha256": "9dcd2dc48825a03978b00602039ef02c5a71f84e2fb0e466cdafa24b801f2d8c",
"format": 1
},
{
@@ -2377,7 +2377,7 @@
"name": "tests/integration/targets/load_balancer_service/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
@@ -2412,7 +2412,7 @@
"name": "tests/integration/targets/load_balancer_service/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7487e3a1fe3da170468c7132137f40e49195c30d9a6657f44b055c9c641e3953",
+ "chksum_sha256": "9dcd2dc48825a03978b00602039ef02c5a71f84e2fb0e466cdafa24b801f2d8c",
"format": 1
},
{
@@ -2440,7 +2440,7 @@
"name": "tests/integration/targets/load_balancer_target/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
@@ -2468,14 +2468,14 @@
"name": "tests/integration/targets/load_balancer_target/tasks/test.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ba13cee3ba0ed0d0ba97e4b518f78db4a4c452006aac77b79328da174dc13bd2",
+ "chksum_sha256": "fc4f35338a60e127868e9aed40aaaa9f00410d80a04c0375663a07564a3f10c1",
"format": 1
},
{
"name": "tests/integration/targets/load_balancer_target/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7487e3a1fe3da170468c7132137f40e49195c30d9a6657f44b055c9c641e3953",
+ "chksum_sha256": "9dcd2dc48825a03978b00602039ef02c5a71f84e2fb0e466cdafa24b801f2d8c",
"format": 1
},
{
@@ -2503,7 +2503,7 @@
"name": "tests/integration/targets/load_balancer_type_info/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
@@ -2538,7 +2538,7 @@
"name": "tests/integration/targets/load_balancer_type_info/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d924d2bc6bd615c6717c4d8b837fb0c9f5e4bd8df1c4ae94e3f649265d9ed19f",
+ "chksum_sha256": "e7b5096c1fc8e3f8805e369daec3c86fad0039aa4b598cac8d911d962599aa50",
"format": 1
},
{
@@ -2566,7 +2566,7 @@
"name": "tests/integration/targets/location_info/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
@@ -2601,7 +2601,7 @@
"name": "tests/integration/targets/location_info/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8f69b796700c4a65ac5e4f99e98e9ed67c924a70ac01a47dc24e97e95ba74cd6",
+ "chksum_sha256": "b061bc633f1ba78ab727b63d080c52926e98cd34c5c8c8561d916b6ba6574f43",
"format": 1
},
{
@@ -2629,14 +2629,14 @@
"name": "tests/integration/targets/network/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
"name": "tests/integration/targets/network/defaults/main/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6ebb966b0125a1f2d47085ec0ec1b7bf5fe77546b0c20e7aa611e5030d6d9858",
+ "chksum_sha256": "198cc6e4f9cfdacce2d589208c673f7f14bf8275c47b8bced31a3bbd6f773576",
"format": 1
},
{
@@ -2647,6 +2647,13 @@
"format": 1
},
{
+ "name": "tests/integration/targets/network/tasks/cleanup.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a5269525807e9843a939b1e5953ee9ce827f6be8afa561e38281487e8e7ef4b5",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/network/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
@@ -2657,14 +2664,14 @@
"name": "tests/integration/targets/network/tasks/test.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0431a784bc8a2466094fd6c62232127726e53f8edaec2a49427005ecd2dcba89",
+ "chksum_sha256": "104b13a03a18a961cc07e167020188a45b75ce50e0cd943773c62470fbf4eaeb",
"format": 1
},
{
"name": "tests/integration/targets/network/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9581657d21f8bc0c17584836cc436825d28f40fb04208162424c3e8f5cbd1d17",
+ "chksum_sha256": "9dcd2dc48825a03978b00602039ef02c5a71f84e2fb0e466cdafa24b801f2d8c",
"format": 1
},
{
@@ -2692,7 +2699,7 @@
"name": "tests/integration/targets/network_info/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
@@ -2741,7 +2748,7 @@
"name": "tests/integration/targets/network_info/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7487e3a1fe3da170468c7132137f40e49195c30d9a6657f44b055c9c641e3953",
+ "chksum_sha256": "9dcd2dc48825a03978b00602039ef02c5a71f84e2fb0e466cdafa24b801f2d8c",
"format": 1
},
{
@@ -2769,7 +2776,7 @@
"name": "tests/integration/targets/placement_group/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
@@ -2825,14 +2832,14 @@
"name": "tests/integration/targets/placement_group/tasks/test.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "912665632b18f00f5a4e9d5f1d38d6c5ae1500682bd43486cf84e3e2f1fb68d9",
+ "chksum_sha256": "498ec7dbfb133a743d8956720657de6ae2a9afcac5c02825a280a00d5807b034",
"format": 1
},
{
"name": "tests/integration/targets/placement_group/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d924d2bc6bd615c6717c4d8b837fb0c9f5e4bd8df1c4ae94e3f649265d9ed19f",
+ "chksum_sha256": "e7b5096c1fc8e3f8805e369daec3c86fad0039aa4b598cac8d911d962599aa50",
"format": 1
},
{
@@ -2860,7 +2867,7 @@
"name": "tests/integration/targets/primary_ip/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
@@ -2878,6 +2885,13 @@
"format": 1
},
{
+ "name": "tests/integration/targets/primary_ip/tasks/cleanup.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5a8978de32c6ba869cce995129a01bc32642da3f4ac5c9005e6b06a8d9668967",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/primary_ip/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
@@ -2885,17 +2899,24 @@
"format": 1
},
{
+ "name": "tests/integration/targets/primary_ip/tasks/prepare.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "691b022c35633330e5363082d2f16a32c1a5921ec0660d0844c6b345a9908de4",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/primary_ip/tasks/test.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "41dad71607635d485207ada2c6b36b2241bbe8dc625ece233666fa6663dbdced",
+ "chksum_sha256": "0a63acbfcc1b07c91b2544fd2d73499ea0bd4065d98caa3594a32a6eeaa0d856",
"format": 1
},
{
"name": "tests/integration/targets/primary_ip/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8f69b796700c4a65ac5e4f99e98e9ed67c924a70ac01a47dc24e97e95ba74cd6",
+ "chksum_sha256": "b061bc633f1ba78ab727b63d080c52926e98cd34c5c8c8561d916b6ba6574f43",
"format": 1
},
{
@@ -2923,7 +2944,7 @@
"name": "tests/integration/targets/primary_ip_info/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
@@ -2972,7 +2993,7 @@
"name": "tests/integration/targets/primary_ip_info/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8f69b796700c4a65ac5e4f99e98e9ed67c924a70ac01a47dc24e97e95ba74cd6",
+ "chksum_sha256": "b061bc633f1ba78ab727b63d080c52926e98cd34c5c8c8561d916b6ba6574f43",
"format": 1
},
{
@@ -3000,7 +3021,7 @@
"name": "tests/integration/targets/rdns/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
@@ -3049,7 +3070,7 @@
"name": "tests/integration/targets/rdns/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7487e3a1fe3da170468c7132137f40e49195c30d9a6657f44b055c9c641e3953",
+ "chksum_sha256": "9dcd2dc48825a03978b00602039ef02c5a71f84e2fb0e466cdafa24b801f2d8c",
"format": 1
},
{
@@ -3077,7 +3098,7 @@
"name": "tests/integration/targets/route/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
@@ -3112,7 +3133,7 @@
"name": "tests/integration/targets/route/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7487e3a1fe3da170468c7132137f40e49195c30d9a6657f44b055c9c641e3953",
+ "chksum_sha256": "9dcd2dc48825a03978b00602039ef02c5a71f84e2fb0e466cdafa24b801f2d8c",
"format": 1
},
{
@@ -3140,7 +3161,7 @@
"name": "tests/integration/targets/server/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
@@ -3203,14 +3224,14 @@
"name": "tests/integration/targets/server/tasks/test_basic.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bbaa1a6325538510af5f484a375db05fa78e0c01d5eba621c47bb4d1334c6165",
+ "chksum_sha256": "c146badd3871984365f368034f8a2893805587f04c598b4bfca6d6ae15df86a8",
"format": 1
},
{
"name": "tests/integration/targets/server/tasks/test_firewalls.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1ddcad3dccc8d45a0a35579b57ffad87a4837a296e3503dbb98e18af06c8b618",
+ "chksum_sha256": "3d81087413bb81afed8aa55bd44b6a2df5c93afcd3cd4d61916b0a028cc76f55",
"format": 1
},
{
@@ -3231,14 +3252,14 @@
"name": "tests/integration/targets/server/tasks/test_validation.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "36a7a338d06d69fa47aac6fcbf3ff5204d59836548d41c255cfd38726aad6fa5",
+ "chksum_sha256": "36168c16df59bf8a887cf3c85cbc204edaa8a6d8f5ae43372ece52f6a236a402",
"format": 1
},
{
"name": "tests/integration/targets/server/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8f69b796700c4a65ac5e4f99e98e9ed67c924a70ac01a47dc24e97e95ba74cd6",
+ "chksum_sha256": "b061bc633f1ba78ab727b63d080c52926e98cd34c5c8c8561d916b6ba6574f43",
"format": 1
},
{
@@ -3266,7 +3287,7 @@
"name": "tests/integration/targets/server_info/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
@@ -3301,7 +3322,7 @@
"name": "tests/integration/targets/server_info/tasks/prepare.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "09186e955def1c3db23eeeef46aa27cdc43a43c12b5242bf886fbd78504f76a1",
+ "chksum_sha256": "4f55fa3605d530877e393b70cfd2b7f7f681154203fd8cfbdb6b82764aa532eb",
"format": 1
},
{
@@ -3315,7 +3336,7 @@
"name": "tests/integration/targets/server_info/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d924d2bc6bd615c6717c4d8b837fb0c9f5e4bd8df1c4ae94e3f649265d9ed19f",
+ "chksum_sha256": "e7b5096c1fc8e3f8805e369daec3c86fad0039aa4b598cac8d911d962599aa50",
"format": 1
},
{
@@ -3343,7 +3364,7 @@
"name": "tests/integration/targets/server_network/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
@@ -3361,6 +3382,13 @@
"format": 1
},
{
+ "name": "tests/integration/targets/server_network/tasks/cleanup.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e0ded2b4a3682e923a20de97c558c679c26687b7d11ce3ef6c99b22c78a010e2",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/server_network/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
@@ -3368,17 +3396,24 @@
"format": 1
},
{
+ "name": "tests/integration/targets/server_network/tasks/prepare.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8085f99f3edaa6eb351d9434b7666166b3ce553560bb373bba91f86c737ee703",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/server_network/tasks/test.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c8720a7da054c73c059f61d0ed72ddaa434e2cc77bb9593d5bf931c5dccdb7f6",
+ "chksum_sha256": "198f839eb79ac6c9ad2d8e7fbd71bd95e382f631b708159922177690c3ef00cc",
"format": 1
},
{
"name": "tests/integration/targets/server_network/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0258aae2182ba7af39814062303251139ba3f539c4bd6abcc33c735021c1936f",
+ "chksum_sha256": "e7b5096c1fc8e3f8805e369daec3c86fad0039aa4b598cac8d911d962599aa50",
"format": 1
},
{
@@ -3406,7 +3441,7 @@
"name": "tests/integration/targets/server_type_info/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
@@ -3441,7 +3476,7 @@
"name": "tests/integration/targets/server_type_info/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d924d2bc6bd615c6717c4d8b837fb0c9f5e4bd8df1c4ae94e3f649265d9ed19f",
+ "chksum_sha256": "e7b5096c1fc8e3f8805e369daec3c86fad0039aa4b598cac8d911d962599aa50",
"format": 1
},
{
@@ -3532,7 +3567,7 @@
"name": "tests/integration/targets/ssh_key/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
@@ -3581,14 +3616,14 @@
"name": "tests/integration/targets/ssh_key/tasks/test.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a989382c4723e0cc5fa7132c0bcbdf1ed98c20f714a70ff1f70b99c3927d3c24",
+ "chksum_sha256": "454f9a473a3316dd7c42626ff5ee394f39b91e32c4c2f439e808dca08db32e63",
"format": 1
},
{
"name": "tests/integration/targets/ssh_key/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d924d2bc6bd615c6717c4d8b837fb0c9f5e4bd8df1c4ae94e3f649265d9ed19f",
+ "chksum_sha256": "e7b5096c1fc8e3f8805e369daec3c86fad0039aa4b598cac8d911d962599aa50",
"format": 1
},
{
@@ -3616,7 +3651,7 @@
"name": "tests/integration/targets/ssh_key_info/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
@@ -3679,7 +3714,7 @@
"name": "tests/integration/targets/ssh_key_info/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d924d2bc6bd615c6717c4d8b837fb0c9f5e4bd8df1c4ae94e3f649265d9ed19f",
+ "chksum_sha256": "e7b5096c1fc8e3f8805e369daec3c86fad0039aa4b598cac8d911d962599aa50",
"format": 1
},
{
@@ -3707,7 +3742,7 @@
"name": "tests/integration/targets/subnetwork/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
@@ -3756,7 +3791,7 @@
"name": "tests/integration/targets/subnetwork/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8f69b796700c4a65ac5e4f99e98e9ed67c924a70ac01a47dc24e97e95ba74cd6",
+ "chksum_sha256": "b061bc633f1ba78ab727b63d080c52926e98cd34c5c8c8561d916b6ba6574f43",
"format": 1
},
{
@@ -3784,7 +3819,7 @@
"name": "tests/integration/targets/volume/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
@@ -3812,14 +3847,14 @@
"name": "tests/integration/targets/volume/tasks/test.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d647af7b292a38d1c68d348b99fbaea7e40244a3588cb63f6658e44f1dd806c2",
+ "chksum_sha256": "2c53074dd755bcc711df53fde0b11f18c06e71a8d605155ae65687d060a12aab",
"format": 1
},
{
"name": "tests/integration/targets/volume/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d924d2bc6bd615c6717c4d8b837fb0c9f5e4bd8df1c4ae94e3f649265d9ed19f",
+ "chksum_sha256": "e7b5096c1fc8e3f8805e369daec3c86fad0039aa4b598cac8d911d962599aa50",
"format": 1
},
{
@@ -3847,7 +3882,7 @@
"name": "tests/integration/targets/volume_info/defaults/main/common.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be14638f15126802a9e86e2cf7080d6fa592a357eb6bc7330d243a8546ea6218",
+ "chksum_sha256": "743f1b304d140b1cdbd4af4286b84bf070ffe12682305c13108cf8d3747c1cfc",
"format": 1
},
{
@@ -3896,7 +3931,7 @@
"name": "tests/integration/targets/volume_info/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d924d2bc6bd615c6717c4d8b837fb0c9f5e4bd8df1c4ae94e3f649265d9ed19f",
+ "chksum_sha256": "e7b5096c1fc8e3f8805e369daec3c86fad0039aa4b598cac8d911d962599aa50",
"format": 1
},
{
@@ -3907,6 +3942,13 @@
"format": 1
},
{
+ "name": "tests/integration/cloud-config-hcloud.ini.in",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a22a6ed9f10bdeff1fe82593fa1f7e657a8ab7ccda9edd482c4068bd4bf14a09",
+ "format": 1
+ },
+ {
"name": "tests/integration/requirements.txt",
"ftype": "file",
"chksum_type": "sha256",
@@ -3921,13 +3963,6 @@
"format": 1
},
{
- "name": "tests/sanity/ignore-2.13.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6cd38282c4ae22a82047d6491cf2c203b54a59dad3f30b73f760404aaab212b6",
- "format": 1
- },
- {
"name": "tests/sanity/ignore-2.14.txt",
"ftype": "file",
"chksum_type": "sha256",
@@ -3956,6 +3991,20 @@
"format": 1
},
{
+ "name": "tests/unit/inventory",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/unit/inventory/test_hcloud.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9622d716bd68b0cc3ba837f6f6d58d654bbd046379f845cc3882d54ebf652f0d",
+ "format": 1
+ },
+ {
"name": "tests/unit/module_utils",
"ftype": "dir",
"chksum_type": null,
@@ -3966,7 +4015,14 @@
"name": "tests/unit/module_utils/test_hcloud.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "548d821beaa35a1804b6f3dc2b3dbd08a1a678ec0ba93a4f6a474d68fc3ed90f",
+ "chksum_sha256": "4889752907a357b5e0f81c3b772ab1f7afd40694decbffdbc2af92734cb25d58",
+ "format": 1
+ },
+ {
+ "name": "tests/unit/conftest.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "745a352a6467383d4751be595bb3647daf2eacb2d52163d8fef128830ca9a2b9",
"format": 1
},
{
@@ -4050,7 +4106,7 @@
"name": ".ansible-lint",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cf689ed57f2490cabb563d4e59b6abc0fd8d236bf635cf3da4c434cf55f892a7",
+ "chksum_sha256": "5f4261003b2f3140736e3b679e1c6bc38d186810d5e2c42ba4ca7f1e7d36a7fb",
"format": 1
},
{
@@ -4071,21 +4127,21 @@
"name": ".gitlab-ci.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eb567b2e12c80f6541f0afa43e50e8c8b5345ac802ccf7c6b37459ad7b240769",
+ "chksum_sha256": "eaaf02c5966e378937fa64534ed07632f4312eb6fdd23dafe56895d530c7640d",
"format": 1
},
{
"name": ".pre-commit-config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "da31f2118bc2255609a17b9d3cc0e1890355b0b5fbc3d03918afaba12913a1cb",
+ "chksum_sha256": "71bae726deb8a87eb83d2daf72a42ff0236485adcaf8dad1f860828e195db622",
"format": 1
},
{
"name": "CHANGELOG.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "367305440cc3eb10145002d97843578480820303a33ba94efad87790c113090c",
+ "chksum_sha256": "c0e39c8518499422f53651eccff5f19445a8f2cab3a03c40380aa51f5a736c26",
"format": 1
},
{
@@ -4099,7 +4155,7 @@
"name": "Makefile",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aafc23f45f3a932b4cb743f04ba476e20334967e6f694b1c60e8e45e95ea7b67",
+ "chksum_sha256": "44d34f8b2b50f583dbdcca29033e1636f4135fa02cfd3fcbf40a5219fbed7478",
"format": 1
},
{
@@ -4113,7 +4169,7 @@
"name": "pyproject.toml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b3d7daeee52b89e89e6d9ae221c798c93e534aab36d40ce2a5779fc407ee4a2b",
+ "chksum_sha256": "b09498ae517c8f34f701b39e8b809c64262bdcba1bb1065b8c9e65a62d5e1d4e",
"format": 1
},
{
@@ -4127,7 +4183,7 @@
"name": "requirements.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5bd140232f60ddf13de976b1fb62d039e9e095c3d3e61ea0a2f85b2e2ff56f19",
+ "chksum_sha256": "84535c2459b50b494e55f318902eb460b18dd773acd845a3ac82e159f9d0075a",
"format": 1
}
],
diff --git a/ansible_collections/hetzner/hcloud/MANIFEST.json b/ansible_collections/hetzner/hcloud/MANIFEST.json
index 9a5a2871e..c9643d913 100644
--- a/ansible_collections/hetzner/hcloud/MANIFEST.json
+++ b/ansible_collections/hetzner/hcloud/MANIFEST.json
@@ -2,7 +2,7 @@
"collection_info": {
"namespace": "hetzner",
"name": "hcloud",
- "version": "2.5.0",
+ "version": "3.1.1",
"authors": [
"Hetzner Cloud (github.com/hetznercloud)"
],
@@ -27,7 +27,7 @@
"name": "FILES.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "afff741537d1ee1b0ef966debfc999feb8bcab30ee5b5780613c7de284cfbb58",
+ "chksum_sha256": "1b2cc041fd036b62e37bb26b7e29b36f5763208bb2f8c04afa47a665172c4f1c",
"format": 1
},
"format": 1
diff --git a/ansible_collections/hetzner/hcloud/Makefile b/ansible_collections/hetzner/hcloud/Makefile
index 48c411d64..12a2521ea 100644
--- a/ansible_collections/hetzner/hcloud/Makefile
+++ b/ansible_collections/hetzner/hcloud/Makefile
@@ -1,5 +1,8 @@
SHELL := bash
-.PHONY: vendor clean
+.PHONY: vendor clean dev
+
+dev:
+ cat tests/integration/cloud-config-hcloud.ini.in | envsubst > tests/integration/cloud-config-hcloud.ini
vendor:
python3 scripts/vendor.py
@@ -21,8 +24,7 @@ lint-docs: venv
.
clean:
- git clean -xdf \
- -e tests/integration/cloud-config-hcloud.ini
+ git clean -xdf
sanity:
ansible-test sanity --color --truncate 0 -v \
diff --git a/ansible_collections/hetzner/hcloud/changelogs/changelog.yaml b/ansible_collections/hetzner/hcloud/changelogs/changelog.yaml
index cba509728..235544b9b 100644
--- a/ansible_collections/hetzner/hcloud/changelogs/changelog.yaml
+++ b/ansible_collections/hetzner/hcloud/changelogs/changelog.yaml
@@ -488,3 +488,64 @@ releases:
name: firewall_resource
namespace: ''
release_date: '2024-02-02'
+ 3.0.0:
+ changes:
+ breaking_changes:
+ - 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.
+ bugfixes:
+ - load_balancer_info - Correctly return the `cookie_lifetime` value.
+ - load_balancer_service - Correctly return the `cookie_lifetime` value.
+ minor_changes:
+ - inventory - Add `hostname` option used to template the hostname of the instances.
+ - network - Allow renaming networks.
+ fragments:
+ - add-inventory-hostname-option.yml
+ - allow-renaming-networks.yml
+ - drop-support-for-ansible-core-2.13.yml
+ - fix-always-return-iso-8601-formatted-datetime.yml
+ - fix-load-balancer-cookie-lifetime.yml
+ - remove-inventory-api_token_env-option.yml
+ release_date: '2024-02-05'
+ 3.1.0:
+ changes:
+ bugfixes:
+ - 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.
+ minor_changes:
+ - 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`.
+ fragments:
+ - primary-ip-assigned-to-server.yml
+ - primary-ip-auto-delete.yml
+ - server-empty-string-arguments.yml
+ - server-rename-image_allow_deprecated-argument.yml
+ - server-use-id-or-name.yml
+ - sort-alias-ips-in-server-network.yml
+ release_date: '2024-04-15'
+ 3.1.1:
+ changes:
+ bugfixes:
+ - inventory - Ensure inventory host variables are serializable and can be cached.
+ fragments:
+ - inventory-fix-serialization.yml
+ release_date: '2024-04-16'
diff --git a/ansible_collections/hetzner/hcloud/changelogs/dev-changelog.md b/ansible_collections/hetzner/hcloud/changelogs/dev-changelog.md
index 9fbbf81a3..7b8a0b5d8 100644
--- a/ansible_collections/hetzner/hcloud/changelogs/dev-changelog.md
+++ b/ansible_collections/hetzner/hcloud/changelogs/dev-changelog.md
@@ -1,5 +1,50 @@
# Changelog
+## [3.1.1](https://github.com/ansible-collections/hetzner.hcloud/compare/3.1.0...3.1.1) (2024-04-16)
+
+
+### Bug Fixes
+
+* **inventory:** ensure host ipv6 variable is json serializable ([#496](https://github.com/ansible-collections/hetzner.hcloud/issues/496)) ([a98cf72](https://github.com/ansible-collections/hetzner.hcloud/commit/a98cf72f927bf36ec9745a03bba16c13728154e2))
+
+## [3.1.0](https://github.com/ansible-collections/hetzner.hcloud/compare/3.0.0...3.1.0) (2024-04-15)
+
+
+### Features
+
+* assign primary ip to a server on create ([#465](https://github.com/ansible-collections/hetzner.hcloud/issues/465)) ([51afb23](https://github.com/ansible-collections/hetzner.hcloud/commit/51afb2316639d3b996b29544534aaeff6122904c))
+* rename server `image_allow_deprecated` option ([#487](https://github.com/ansible-collections/hetzner.hcloud/issues/487)) ([d88ecdb](https://github.com/ansible-collections/hetzner.hcloud/commit/d88ecdbccc0da0a61338d23673adf6a6fded211c))
+* use resources name or ID in server module arguments ([#484](https://github.com/ansible-collections/hetzner.hcloud/issues/484)) ([7fdefcf](https://github.com/ansible-collections/hetzner.hcloud/commit/7fdefcfa0243b84a3edb58566ec710e4f4a6db8d))
+
+
+### Bug Fixes
+
+* improve actions waiting timeout based on data ([#488](https://github.com/ansible-collections/hetzner.hcloud/issues/488)) ([0709552](https://github.com/ansible-collections/hetzner.hcloud/commit/07095529a4a23dc380ab4678963da9dceb665fd4))
+* return sorted `alias_ips` in `server_network` module ([#458](https://github.com/ansible-collections/hetzner.hcloud/issues/458)) ([1ae6769](https://github.com/ansible-collections/hetzner.hcloud/commit/1ae6769210b1a845084c88c58a545bebc067ca48))
+* use empty string to remove server from its placement group ([#489](https://github.com/ansible-collections/hetzner.hcloud/issues/489)) ([00a4fdd](https://github.com/ansible-collections/hetzner.hcloud/commit/00a4fdd58aba74ab7e8e1a26ff59beea452c2add))
+
+## [3.0.0](https://github.com/ansible-collections/hetzner.hcloud/compare/2.5.0...3.0.0) (2024-02-05)
+
+
+### ⚠ BREAKING CHANGES
+
+* drop support for ansible-core 2.13 ([#450](https://github.com/ansible-collections/hetzner.hcloud/issues/450))
+* always return iso-8601 formatted date time ([#453](https://github.com/ansible-collections/hetzner.hcloud/issues/453))
+* remove inventory `api_token_env` option ([#454](https://github.com/ansible-collections/hetzner.hcloud/issues/454))
+
+### Features
+
+* drop support for ansible-core 2.13 ([#450](https://github.com/ansible-collections/hetzner.hcloud/issues/450)) ([96f8009](https://github.com/ansible-collections/hetzner.hcloud/commit/96f8009214d5d57357cf165bfa5e7c3507d0d6e1)), closes [#400](https://github.com/ansible-collections/hetzner.hcloud/issues/400)
+* **inventory:** allow templating instances hostname ([#455](https://github.com/ansible-collections/hetzner.hcloud/issues/455)) ([be404ef](https://github.com/ansible-collections/hetzner.hcloud/commit/be404ef18165c933fbdd7de92773d38e3426efec))
+* remove inventory `api_token_env` option ([#454](https://github.com/ansible-collections/hetzner.hcloud/issues/454)) ([d0c82ae](https://github.com/ansible-collections/hetzner.hcloud/commit/d0c82aec86f844ccb1dcc07ec4acf9eedc87730d))
+
+
+### Bug Fixes
+
+* allow renaming networks ([#449](https://github.com/ansible-collections/hetzner.hcloud/issues/449)) ([742cfe6](https://github.com/ansible-collections/hetzner.hcloud/commit/742cfe6d7446d0b54240de5342ef8bb9679cff64))
+* always return iso-8601 formatted date time ([#453](https://github.com/ansible-collections/hetzner.hcloud/issues/453)) ([55d2616](https://github.com/ansible-collections/hetzner.hcloud/commit/55d26162b329cbb5bcff8ed63e5960bef4a897c8))
+* load balancer invalid cookie lifetime value returned ([#452](https://github.com/ansible-collections/hetzner.hcloud/issues/452)) ([86b7662](https://github.com/ansible-collections/hetzner.hcloud/commit/86b76620daf9684edffefcb0f3d3d0220bbe5f2c))
+
## [2.5.0](https://github.com/ansible-collections/hetzner.hcloud/compare/2.4.1...2.5.0) (2024-02-02)
diff --git a/ansible_collections/hetzner/hcloud/meta/runtime.yml b/ansible_collections/hetzner/hcloud/meta/runtime.yml
index 9891ce73a..7f12a86c7 100644
--- a/ansible_collections/hetzner/hcloud/meta/runtime.yml
+++ b/ansible_collections/hetzner/hcloud/meta/runtime.yml
@@ -1,4 +1,4 @@
-requires_ansible: ">=2.13.0"
+requires_ansible: ">=2.14.0"
action_groups:
all:
diff --git a/ansible_collections/hetzner/hcloud/plugins/inventory/hcloud.py b/ansible_collections/hetzner/hcloud/plugins/inventory/hcloud.py
index 449342271..d1050c92b 100644
--- a/ansible_collections/hetzner/hcloud/plugins/inventory/hcloud.py
+++ b/ansible_collections/hetzner/hcloud/plugins/inventory/hcloud.py
@@ -32,21 +32,10 @@ options:
description:
- The API Token for the Hetzner Cloud.
type: str
- required: false # TODO: Mark as required once 'api_token_env' is removed.
+ required: true
aliases: [token]
env:
- name: HCLOUD_TOKEN
- api_token_env:
- description:
- - Environment variable name to load the Hetzner Cloud API Token from.
- type: str
- default: HCLOUD_TOKEN
- aliases: [token_env]
- deprecated:
- why: The option is adding too much complexity, while the alternatives are preferred.
- collection_name: hetzner.hcloud
- version: 3.0.0
- alternatives: Use the P(ansible.builtin.env#lookup) lookup plugin instead.
api_endpoint:
description:
- The API Endpoint for the Hetzner Cloud.
@@ -120,6 +109,14 @@ options:
- The suffix for host variables names coming from Hetzner Cloud.
type: str
version_added: 2.5.0
+
+ hostname:
+ description:
+ - A template for the instances hostname, if not provided the Hetzner Cloud server name will be used.
+ - Available variables are the Hetzner Cloud host variables.
+ - The available variables names are provide with the O(hostvars_prefix) or O(hostvars_suffix) modifications.
+ type: str
+ version_added: 3.0.0
"""
EXAMPLES = """
@@ -153,9 +150,43 @@ keyed_groups:
separator: ""
- key: status
prefix: server_status
+
+---
+# Use a custom hostname template.
+plugin: hetzner.hcloud.hcloud
+
+# Available variables are for example:
+## Server
+# id: 42984895
+# name: "my-server"
+# labels:
+# foo: "bar"
+# status: "running"
+## Server Type
+# type: "cx11"
+# server_type: "cx11"
+# architecture: "x86"
+## Image
+# image_id: 114690387
+# image_name: "debian-12"
+# image_os_flavor: "debian"
+## Datacenter
+# datacenter: "hel1-dc2"
+# location: "hel1"
+## Network
+# ipv4: "65.109.140.95" # Value is optional!
+# ipv6: "2a01:4f9:c011:b83f::1" # Value is optional!
+# ipv6_network: 2a01:4f9:c011:b83f::" # Value is optional!
+# ipv6_network_mask: "64" # Value is optional!
+# private_ipv4: "10.0.0.3" # Value is optional!
+# private_networks:
+# - id: 114690387
+# name: "my-private-network"
+# ip: "10.0.0.3"
+#
+hostname: "my-prefix-{{ datacenter }}-{{ name }}-{{ server_type }}"
"""
-import os
import sys
from ipaddress import IPv6Network
@@ -164,6 +195,7 @@ from ansible.inventory.manager import InventoryData
from ansible.module_utils.common.text.converters import to_native
from ansible.plugins.inventory import BaseInventoryPlugin, Cacheable, Constructable
from ansible.utils.display import Display
+from ansible.utils.vars import combine_vars
from ..module_utils.client import (
Client,
@@ -229,7 +261,7 @@ def first_ipv6_address(network: str) -> str:
:param network: IPv6 Network.
"""
- return next(IPv6Network(network).hosts())
+ return str(next(IPv6Network(network).hosts()))
class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
@@ -243,30 +275,9 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
network: Network | None
def _configure_hcloud_client(self):
- # If api_token_env is not the default, print a deprecation warning and load the
- # environment variable.
- api_token_env = self.get_option("api_token_env")
- if api_token_env != "HCLOUD_TOKEN":
- self.display.deprecated(
- "The 'api_token_env' option is deprecated, please use the 'HCLOUD_TOKEN' "
- "environment variable or use the 'ansible.builtin.env' lookup instead.",
- version="3.0.0",
- collection_name="hetzner.hcloud",
- )
- if api_token_env in os.environ:
- self.set_option("api_token", os.environ.get(api_token_env))
-
api_token = self.get_option("api_token")
api_endpoint = self.get_option("api_endpoint")
- if api_token is None: # TODO: Remove once I(api_token_env) is removed.
- raise AnsibleError(
- "No setting was provided for required configuration setting: "
- "plugin_type: inventory "
- "plugin: hetzner.hcloud.hcloud "
- "setting: api_token"
- )
-
# Resolve template string
api_token = self.templar.template(api_token)
@@ -325,43 +336,43 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
def _build_inventory_server(self, server: Server) -> InventoryServer:
server_dict: InventoryServer = {}
server_dict["id"] = server.id
- server_dict["name"] = to_native(server.name)
- server_dict["status"] = to_native(server.status)
+ server_dict["name"] = server.name
+ server_dict["status"] = server.status
# Server Type
- server_dict["type"] = to_native(server.server_type.name)
- server_dict["server_type"] = to_native(server.server_type.name)
- server_dict["architecture"] = to_native(server.server_type.architecture)
+ server_dict["type"] = server.server_type.name
+ server_dict["server_type"] = server.server_type.name
+ server_dict["architecture"] = server.server_type.architecture
# Network
if server.public_net.ipv4:
- server_dict["ipv4"] = to_native(server.public_net.ipv4.ip)
+ server_dict["ipv4"] = server.public_net.ipv4.ip
if server.public_net.ipv6:
- server_dict["ipv6"] = to_native(first_ipv6_address(server.public_net.ipv6.ip))
- server_dict["ipv6_network"] = to_native(server.public_net.ipv6.network)
- server_dict["ipv6_network_mask"] = to_native(server.public_net.ipv6.network_mask)
+ server_dict["ipv6"] = first_ipv6_address(server.public_net.ipv6.ip)
+ server_dict["ipv6_network"] = server.public_net.ipv6.network
+ server_dict["ipv6_network_mask"] = server.public_net.ipv6.network_mask
server_dict["private_networks"] = [
- {"id": v.network.id, "name": to_native(v.network.name), "ip": to_native(v.ip)} for v in server.private_net
+ {"id": v.network.id, "name": v.network.name, "ip": v.ip} for v in server.private_net
]
if self.get_option("network"):
for private_net in server.private_net:
# Set private_ipv4 if user filtered for one network
if private_net.network.id == self.network.id:
- server_dict["private_ipv4"] = to_native(private_net.ip)
+ server_dict["private_ipv4"] = private_net.ip
break
# Datacenter
- server_dict["datacenter"] = to_native(server.datacenter.name)
- server_dict["location"] = to_native(server.datacenter.location.name)
+ server_dict["datacenter"] = server.datacenter.name
+ server_dict["location"] = server.datacenter.location.name
# Image
if server.image is not None:
server_dict["image_id"] = server.image.id
- server_dict["image_os_flavor"] = to_native(server.image.os_flavor)
- server_dict["image_name"] = to_native(server.image.name or server.image.description)
+ server_dict["image_os_flavor"] = server.image.os_flavor
+ server_dict["image_name"] = server.image.name or server.image.description
# Labels
server_dict["labels"] = dict(server.labels)
@@ -380,28 +391,28 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
def _get_server_ansible_host(self, server: Server):
if self.get_option("connect_with") == "public_ipv4":
if server.public_net.ipv4:
- return to_native(server.public_net.ipv4.ip)
+ return server.public_net.ipv4.ip
raise AnsibleError("Server has no public ipv4, but connect_with=public_ipv4 was specified")
if self.get_option("connect_with") == "public_ipv6":
if server.public_net.ipv6:
- return to_native(first_ipv6_address(server.public_net.ipv6.ip))
+ return first_ipv6_address(server.public_net.ipv6.ip)
raise AnsibleError("Server has no public ipv6, but connect_with=public_ipv6 was specified")
if self.get_option("connect_with") == "hostname":
# every server has a name, no need to guard this
- return to_native(server.name)
+ return server.name
if self.get_option("connect_with") == "ipv4_dns_ptr":
if server.public_net.ipv4:
- return to_native(server.public_net.ipv4.dns_ptr)
+ return server.public_net.ipv4.dns_ptr
raise AnsibleError("Server has no public ipv4, but connect_with=ipv4_dns_ptr was specified")
if self.get_option("connect_with") == "private_ipv4":
if self.get_option("network"):
for private_net in server.private_net:
if private_net.network.id == self.network.id:
- return to_native(private_net.ip)
+ return private_net.ip
else:
raise AnsibleError("You can only connect via private IPv4 if you specify a network")
@@ -466,9 +477,10 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
hostvars_prefix = self.get_option("hostvars_prefix")
hostvars_suffix = self.get_option("hostvars_suffix")
+ hostname_template = self.get_option("hostname")
for server in servers:
- self.inventory.add_host(server["name"], group=self.get_option("group"))
+ hostvars = {}
for key, value in server.items():
# Add hostvars prefix and suffix for variables coming from the Hetzner Cloud.
if hostvars_prefix or hostvars_suffix:
@@ -478,7 +490,18 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
if hostvars_suffix:
key = key + hostvars_suffix
- self.inventory.set_variable(server["name"], key, value)
+ hostvars[key] = value
+
+ if hostname_template:
+ templar = self.templar
+ templar.available_variables = combine_vars(hostvars, self._vars)
+ hostname = templar.template(hostname_template)
+ else:
+ hostname = server["name"]
+
+ self.inventory.add_host(hostname, group=self.get_option("group"))
+ for key, value in hostvars.items():
+ self.inventory.set_variable(hostname, key, value)
# Use constructed if applicable
strict = self.get_option("strict")
@@ -486,8 +509,8 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
# Composed variables
self._set_composite_vars(
self.get_option("compose"),
- self.inventory.get_host(server["name"]).get_vars(),
- server["name"],
+ self.inventory.get_host(hostname).get_vars(),
+ hostname,
strict=strict,
)
@@ -495,7 +518,7 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
self._add_host_to_composed_groups(
self.get_option("groups"),
{},
- server["name"],
+ hostname,
strict=strict,
)
@@ -503,7 +526,7 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
self._add_host_to_keyed_groups(
self.get_option("keyed_groups"),
{},
- server["name"],
+ hostname,
strict=strict,
)
diff --git a/ansible_collections/hetzner/hcloud/plugins/module_utils/hcloud.py b/ansible_collections/hetzner/hcloud/plugins/module_utils/hcloud.py
index eab0aef59..60391308a 100644
--- a/ansible_collections/hetzner/hcloud/plugins/module_utils/hcloud.py
+++ b/ansible_collections/hetzner/hcloud/plugins/module_utils/hcloud.py
@@ -10,6 +10,10 @@ from typing import Any, NoReturn
from ansible.module_utils.basic import AnsibleModule as AnsibleModuleBase, env_fallback
from ansible.module_utils.common.text.converters import to_native
+from ansible.module_utils.common.validation import (
+ check_missing_parameters,
+ check_required_one_of,
+)
from .client import ClientException, client_check_required_lib, client_get_by_name_or_id
from .vendor.hcloud import APIException, Client, HCloudException
@@ -94,6 +98,29 @@ class AnsibleHCloud:
def _mark_as_changed(self) -> None:
self.result["changed"] = True
+ def fail_on_invalid_params(
+ self,
+ *,
+ required: list[str] | None = None,
+ required_one_of: list[list[str]] | None = None,
+ ) -> None:
+ """
+ Run additional validation that cannot be done in the argument spec validation.
+
+ :param required_params: Check that terms exists in the module params.
+ :param required_one_of: Check each list of terms to ensure at least one exists in the module parameters.
+ """
+ try:
+ if required:
+ check_missing_parameters(self.module.params, required)
+
+ if required_one_of:
+ params_without_nones = {k: v for k, v in self.module.params.items() if v is not None}
+ check_required_one_of(required_one_of, params_without_nones)
+
+ except TypeError as e:
+ self.module.fail_json(msg=to_native(e))
+
@classmethod
def base_module_arguments(cls):
return {
diff --git a/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/_version.py b/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/_version.py
index e03c1b434..d350d7138 100644
--- a/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/_version.py
+++ b/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/_version.py
@@ -1,3 +1,3 @@
from __future__ import annotations
-VERSION = "1.33.2" # x-release-please-version
+VERSION = "1.35.0" # x-release-please-version
diff --git a/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/core/domain.py b/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/core/domain.py
index 692f7488b..bba954fe2 100644
--- a/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/core/domain.py
+++ b/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/core/domain.py
@@ -34,6 +34,24 @@ class DomainIdentityMixin:
return self.name
raise ValueError("id or name must be set")
+ def has_id_or_name(self, id_or_name: int | str) -> bool:
+ """
+ Return whether this domain has the same id or same name as the other.
+
+ The domain calling this method MUST be a bound domain or be populated, otherwise
+ the comparison will not work as expected (e.g. the domains are the same but
+ cannot be equal, if one provides an id and the other the name).
+ """
+ values: list[int | str] = []
+ if self.id is not None:
+ values.append(self.id)
+ if self.name is not None:
+ values.append(self.name)
+ if not values:
+ raise ValueError("id or name must be set")
+
+ return id_or_name in values
+
class Pagination(BaseDomain):
__slots__ = (
diff --git a/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/firewalls/domain.py b/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/firewalls/domain.py
index 5ce9281d9..d637231d6 100644
--- a/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/firewalls/domain.py
+++ b/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/firewalls/domain.py
@@ -7,7 +7,7 @@ try:
except ImportError:
isoparse = None
-from ..core import BaseDomain
+from ..core import BaseDomain, DomainIdentityMixin
if TYPE_CHECKING:
from ..actions import BoundAction
@@ -15,7 +15,7 @@ if TYPE_CHECKING:
from .client import BoundFirewall
-class Firewall(BaseDomain):
+class Firewall(BaseDomain, DomainIdentityMixin):
"""Firewall Domain
:param id: int
diff --git a/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/floating_ips/domain.py b/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/floating_ips/domain.py
index e1f295bd6..abd2c13cc 100644
--- a/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/floating_ips/domain.py
+++ b/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/floating_ips/domain.py
@@ -7,7 +7,7 @@ try:
except ImportError:
isoparse = None
-from ..core import BaseDomain
+from ..core import BaseDomain, DomainIdentityMixin
if TYPE_CHECKING:
from ..actions import BoundAction
@@ -16,7 +16,7 @@ if TYPE_CHECKING:
from .client import BoundFloatingIP
-class FloatingIP(BaseDomain):
+class FloatingIP(BaseDomain, DomainIdentityMixin):
"""Floating IP Domain
:param id: int
diff --git a/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/images/client.py b/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/images/client.py
index 65b7546a8..a7d41e01b 100644
--- a/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/images/client.py
+++ b/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/images/client.py
@@ -1,5 +1,6 @@
from __future__ import annotations
+import warnings
from typing import TYPE_CHECKING, Any, NamedTuple
from ..actions import ActionsPageResult, BoundAction, ResourceActionsClient
@@ -305,18 +306,27 @@ class ImagesClient(ClientEntityBase):
def get_by_name(self, name: str) -> BoundImage | None:
"""Get image by name
- Deprecated: Use get_by_name_and_architecture instead.
-
:param name: str
Used to get image by name.
:return: :class:`BoundImage <hcloud.images.client.BoundImage>`
+
+ .. deprecated:: 1.19
+ Use :func:`hcloud.images.client.ImagesClient.get_by_name_and_architecture` instead.
"""
+ warnings.warn(
+ "The 'hcloud.images.client.ImagesClient.get_by_name' method is deprecated, please use the "
+ "'hcloud.images.client.ImagesClient.get_by_name_and_architecture' method instead.",
+ DeprecationWarning,
+ stacklevel=2,
+ )
return self._get_first_by(name=name)
def get_by_name_and_architecture(
self,
name: str,
architecture: str,
+ *,
+ include_deprecated: bool | None = None,
) -> BoundImage | None:
"""Get image by name
@@ -324,9 +334,15 @@ class ImagesClient(ClientEntityBase):
Used to identify the image.
:param architecture: str
Used to identify the image.
+ :param include_deprecated: bool (optional)
+ Include deprecated images. Default: False
:return: :class:`BoundImage <hcloud.images.client.BoundImage>`
"""
- return self._get_first_by(name=name, architecture=[architecture])
+ return self._get_first_by(
+ name=name,
+ architecture=[architecture],
+ include_deprecated=include_deprecated,
+ )
def update(
self,
diff --git a/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/load_balancers/domain.py b/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/load_balancers/domain.py
index 6d6f0700a..76e8db3f7 100644
--- a/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/load_balancers/domain.py
+++ b/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/load_balancers/domain.py
@@ -7,7 +7,7 @@ try:
except ImportError:
isoparse = None
-from ..core import BaseDomain
+from ..core import BaseDomain, DomainIdentityMixin
if TYPE_CHECKING:
from ..actions import BoundAction
@@ -20,7 +20,7 @@ if TYPE_CHECKING:
from .client import BoundLoadBalancer
-class LoadBalancer(BaseDomain):
+class LoadBalancer(BaseDomain, DomainIdentityMixin):
"""LoadBalancer Domain
:param id: int
@@ -79,7 +79,7 @@ class LoadBalancer(BaseDomain):
id: int,
name: str | None = None,
public_net: PublicNetwork | None = None,
- private_net: PrivateNet | None = None,
+ private_net: list[PrivateNet] | None = None,
location: BoundLocation | None = None,
algorithm: LoadBalancerAlgorithm | None = None,
services: list[LoadBalancerService] | None = None,
@@ -203,9 +203,9 @@ class LoadBalancerService(BaseDomain):
if self.health_check.http.response is not None:
health_check_http["response"] = self.health_check.http.response
if self.health_check.http.status_codes is not None:
- health_check_http[
- "status_codes"
- ] = self.health_check.http.status_codes
+ health_check_http["status_codes"] = (
+ self.health_check.http.status_codes
+ )
if self.health_check.http.tls is not None:
health_check_http["tls"] = self.health_check.http.tls
diff --git a/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/networks/domain.py b/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/networks/domain.py
index c307bf989..e04de2775 100644
--- a/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/networks/domain.py
+++ b/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/networks/domain.py
@@ -7,7 +7,7 @@ try:
except ImportError:
isoparse = None
-from ..core import BaseDomain
+from ..core import BaseDomain, DomainIdentityMixin
if TYPE_CHECKING:
from ..actions import BoundAction
@@ -15,7 +15,7 @@ if TYPE_CHECKING:
from .client import BoundNetwork
-class Network(BaseDomain):
+class Network(BaseDomain, DomainIdentityMixin):
"""Network Domain
:param id: int
diff --git a/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/placement_groups/domain.py b/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/placement_groups/domain.py
index 16b2a390d..1c6fc04cd 100644
--- a/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/placement_groups/domain.py
+++ b/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/placement_groups/domain.py
@@ -7,14 +7,14 @@ try:
except ImportError:
isoparse = None
-from ..core import BaseDomain
+from ..core import BaseDomain, DomainIdentityMixin
if TYPE_CHECKING:
from ..actions import BoundAction
from .client import BoundPlacementGroup
-class PlacementGroup(BaseDomain):
+class PlacementGroup(BaseDomain, DomainIdentityMixin):
"""Placement Group Domain
:param id: int
diff --git a/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/primary_ips/domain.py b/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/primary_ips/domain.py
index aeb943f0a..2eebacef4 100644
--- a/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/primary_ips/domain.py
+++ b/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/primary_ips/domain.py
@@ -7,7 +7,7 @@ try:
except ImportError:
isoparse = None
-from ..core import BaseDomain
+from ..core import BaseDomain, DomainIdentityMixin
if TYPE_CHECKING:
from ..actions import BoundAction
@@ -15,7 +15,7 @@ if TYPE_CHECKING:
from .client import BoundPrimaryIP
-class PrimaryIP(BaseDomain):
+class PrimaryIP(BaseDomain, DomainIdentityMixin):
"""Primary IP Domain
:param id: int
diff --git a/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/servers/domain.py b/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/servers/domain.py
index 0a0d34688..d5e769e5e 100644
--- a/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/servers/domain.py
+++ b/ansible_collections/hetzner/hcloud/plugins/module_utils/vendor/hcloud/servers/domain.py
@@ -7,7 +7,7 @@ try:
except ImportError:
isoparse = None
-from ..core import BaseDomain
+from ..core import BaseDomain, DomainIdentityMixin
if TYPE_CHECKING:
from ..actions import BoundAction
@@ -25,7 +25,7 @@ if TYPE_CHECKING:
from .client import BoundServer
-class Server(BaseDomain):
+class Server(BaseDomain, DomainIdentityMixin):
"""Server Domain
:param id: int
diff --git a/ansible_collections/hetzner/hcloud/plugins/module_utils/version.py b/ansible_collections/hetzner/hcloud/plugins/module_utils/version.py
index e78c320a2..0bf903564 100644
--- a/ansible_collections/hetzner/hcloud/plugins/module_utils/version.py
+++ b/ansible_collections/hetzner/hcloud/plugins/module_utils/version.py
@@ -1,3 +1,3 @@
from __future__ import annotations
-version = "2.5.0" # x-release-please-version
+version = "3.1.1" # x-release-please-version
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/certificate.py b/ansible_collections/hetzner/hcloud/plugins/modules/certificate.py
index ea39be6ca..53466e48f 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/certificate.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/certificate.py
@@ -146,7 +146,6 @@ hcloud_certificate:
"""
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import HCloudException
@@ -160,14 +159,14 @@ class AnsibleHCloudCertificate(AnsibleHCloud):
def _prepare_result(self):
return {
- "id": to_native(self.hcloud_certificate.id),
- "name": to_native(self.hcloud_certificate.name),
- "type": to_native(self.hcloud_certificate.type),
- "fingerprint": to_native(self.hcloud_certificate.fingerprint),
- "certificate": to_native(self.hcloud_certificate.certificate),
- "not_valid_before": to_native(self.hcloud_certificate.not_valid_before),
- "not_valid_after": to_native(self.hcloud_certificate.not_valid_after),
- "domain_names": [to_native(domain) for domain in self.hcloud_certificate.domain_names],
+ "id": str(self.hcloud_certificate.id),
+ "name": self.hcloud_certificate.name,
+ "type": self.hcloud_certificate.type,
+ "fingerprint": self.hcloud_certificate.fingerprint,
+ "certificate": self.hcloud_certificate.certificate,
+ "not_valid_before": self.hcloud_certificate.not_valid_before.isoformat(),
+ "not_valid_after": self.hcloud_certificate.not_valid_after.isoformat(),
+ "domain_names": self.hcloud_certificate.domain_names,
"labels": self.hcloud_certificate.labels,
}
@@ -203,7 +202,9 @@ class AnsibleHCloudCertificate(AnsibleHCloud):
if not self.module.check_mode:
try:
resp = self.client.certificates.create_managed(**params)
- resp.action.wait_until_finished(max_retries=1000)
+ # Action should take 60 to 90 seconds on average, wait for 5m to
+ # allow DNS or Let's Encrypt slowdowns.
+ resp.action.wait_until_finished(max_retries=300)
except HCloudException as exception:
self.fail_json_hcloud(exception)
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/certificate_info.py b/ansible_collections/hetzner/hcloud/plugins/modules/certificate_info.py
index e074046fd..37b944341 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/certificate_info.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/certificate_info.py
@@ -87,7 +87,6 @@ hcloud_certificate_info:
"""
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import HCloudException
@@ -100,23 +99,25 @@ class AnsibleHCloudCertificateInfo(AnsibleHCloud):
hcloud_certificate_info: list[BoundCertificate] | None = None
def _prepare_result(self):
- certificates = []
+ tmp = []
for certificate in self.hcloud_certificate_info:
- if certificate:
- certificates.append(
- {
- "id": to_native(certificate.id),
- "name": to_native(certificate.name),
- "fingerprint": to_native(certificate.fingerprint),
- "certificate": to_native(certificate.certificate),
- "not_valid_before": to_native(certificate.not_valid_before),
- "not_valid_after": to_native(certificate.not_valid_after),
- "domain_names": [to_native(domain) for domain in certificate.domain_names],
- "labels": certificate.labels,
- }
- )
- return certificates
+ if certificate is None:
+ continue
+
+ tmp.append(
+ {
+ "id": str(certificate.id),
+ "name": certificate.name,
+ "fingerprint": certificate.fingerprint,
+ "certificate": certificate.certificate,
+ "not_valid_before": certificate.not_valid_before.isoformat(),
+ "not_valid_after": certificate.not_valid_after.isoformat(),
+ "domain_names": certificate.domain_names,
+ "labels": certificate.labels,
+ }
+ )
+ return tmp
def get_certificates(self):
try:
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/datacenter_info.py b/ansible_collections/hetzner/hcloud/plugins/modules/datacenter_info.py
index f6665a6fb..85475dd44 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/datacenter_info.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/datacenter_info.py
@@ -118,7 +118,6 @@ hcloud_datacenter_info:
"""
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import HCloudException
@@ -139,10 +138,10 @@ class AnsibleHCloudDatacenterInfo(AnsibleHCloud):
tmp.append(
{
- "id": to_native(datacenter.id),
- "name": to_native(datacenter.name),
- "description": to_native(datacenter.description),
- "location": to_native(datacenter.location.name),
+ "id": str(datacenter.id),
+ "name": datacenter.name,
+ "description": datacenter.description,
+ "location": datacenter.location.name,
"server_types": {
"available": [o.id for o in datacenter.server_types.available],
"available_for_migration": [o.id for o in datacenter.server_types.available_for_migration],
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/firewall.py b/ansible_collections/hetzner/hcloud/plugins/modules/firewall.py
index 3c51b5c0a..30f17eb9b 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/firewall.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/firewall.py
@@ -219,7 +219,6 @@ hcloud_firewall:
import time
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import APIException, HCloudException
@@ -237,8 +236,8 @@ class AnsibleHCloudFirewall(AnsibleHCloud):
def _prepare_result(self):
return {
- "id": to_native(self.hcloud_firewall.id),
- "name": to_native(self.hcloud_firewall.name),
+ "id": str(self.hcloud_firewall.id),
+ "name": self.hcloud_firewall.name,
"rules": [self._prepare_result_rule(rule) for rule in self.hcloud_firewall.rules],
"labels": self.hcloud_firewall.labels,
"applied_to": [self._prepare_result_applied_to(resource) for resource in self.hcloud_firewall.applied_to],
@@ -246,27 +245,25 @@ class AnsibleHCloudFirewall(AnsibleHCloud):
def _prepare_result_rule(self, rule: FirewallRule):
return {
- "direction": to_native(rule.direction),
- "protocol": to_native(rule.protocol),
- "port": to_native(rule.port) if rule.port is not None else None,
- "source_ips": [to_native(cidr) for cidr in rule.source_ips],
- "destination_ips": [to_native(cidr) for cidr in rule.destination_ips],
- "description": to_native(rule.description) if rule.description is not None else None,
+ "direction": rule.direction,
+ "protocol": rule.protocol,
+ "port": rule.port,
+ "source_ips": rule.source_ips,
+ "destination_ips": rule.destination_ips,
+ "description": rule.description,
}
def _prepare_result_applied_to(self, resource: FirewallResource):
result = {
- "type": to_native(resource.type),
- "server": to_native(resource.server.id) if resource.server is not None else None,
- "label_selector": (
- to_native(resource.label_selector.selector) if resource.label_selector is not None else None
- ),
+ "type": resource.type,
+ "server": str(resource.server.id) if resource.server is not None else None,
+ "label_selector": resource.label_selector.selector if resource.label_selector is not None else None,
}
if resource.applied_to_resources is not None:
result["applied_to_resources"] = [
{
- "type": to_native(item.type),
- "server": to_native(item.server.id) if item.server is not None else None,
+ "type": item.type,
+ "server": str(item.server.id) if item.server is not None else None,
}
for item in resource.applied_to_resources
]
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/firewall_info.py b/ansible_collections/hetzner/hcloud/plugins/modules/firewall_info.py
index 7e7a623d0..a07d9ec54 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/firewall_info.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/firewall_info.py
@@ -142,7 +142,6 @@ hcloud_firewall_info:
"""
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import HCloudException
@@ -167,8 +166,8 @@ class AnsibleHCloudFirewallInfo(AnsibleHCloud):
tmp.append(
{
- "id": to_native(firewall.id),
- "name": to_native(firewall.name),
+ "id": str(firewall.id),
+ "name": firewall.name,
"labels": firewall.labels,
"rules": [self._prepare_result_rule(rule) for rule in firewall.rules],
"applied_to": [self._prepare_result_applied_to(resource) for resource in firewall.applied_to],
@@ -179,27 +178,25 @@ class AnsibleHCloudFirewallInfo(AnsibleHCloud):
def _prepare_result_rule(self, rule: FirewallRule):
return {
- "description": to_native(rule.description) if rule.description is not None else None,
- "direction": to_native(rule.direction),
- "protocol": to_native(rule.protocol),
- "port": to_native(rule.port) if rule.port is not None else None,
- "source_ips": [to_native(cidr) for cidr in rule.source_ips],
- "destination_ips": [to_native(cidr) for cidr in rule.destination_ips],
+ "description": rule.description,
+ "direction": rule.direction,
+ "protocol": rule.protocol,
+ "port": rule.port,
+ "source_ips": rule.source_ips,
+ "destination_ips": rule.destination_ips,
}
def _prepare_result_applied_to(self, resource: FirewallResource):
result = {
- "type": to_native(resource.type),
- "server": to_native(resource.server.id) if resource.server is not None else None,
- "label_selector": (
- to_native(resource.label_selector.selector) if resource.label_selector is not None else None
- ),
+ "type": resource.type,
+ "server": str(resource.server.id) if resource.server is not None else None,
+ "label_selector": resource.label_selector.selector if resource.label_selector is not None else None,
}
if resource.applied_to_resources is not None:
result["applied_to_resources"] = [
{
- "type": to_native(item.type),
- "server": to_native(item.server.id) if item.server is not None else None,
+ "type": item.type,
+ "server": str(item.server.id) if item.server is not None else None,
}
for item in resource.applied_to_resources
]
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/firewall_resource.py b/ansible_collections/hetzner/hcloud/plugins/modules/firewall_resource.py
index 207f27092..7c0271ba3 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/firewall_resource.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/firewall_resource.py
@@ -103,7 +103,6 @@ hcloud_firewall_resource:
"""
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import HCloudException
@@ -125,12 +124,12 @@ class AnsibleHCloudFirewallResource(AnsibleHCloud):
label_selectors = []
for resource in self.hcloud_firewall_resource.applied_to:
if resource.type == FirewallResource.TYPE_SERVER:
- servers.append(to_native(resource.server.name))
+ servers.append(resource.server.name)
elif resource.type == FirewallResource.TYPE_LABEL_SELECTOR:
- label_selectors.append(to_native(resource.label_selector.selector))
+ label_selectors.append(resource.label_selector.selector)
return {
- "firewall": to_native(self.hcloud_firewall_resource.name),
+ "firewall": self.hcloud_firewall_resource.name,
"servers": servers,
"label_selectors": label_selectors,
}
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/floating_ip.py b/ansible_collections/hetzner/hcloud/plugins/modules/floating_ip.py
index e037dd7a1..022036124 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/floating_ip.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/floating_ip.py
@@ -160,7 +160,6 @@ hcloud_floating_ip:
"""
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import HCloudException
@@ -173,19 +172,15 @@ class AnsibleHCloudFloatingIP(AnsibleHCloud):
hcloud_floating_ip: BoundFloatingIP | None = None
def _prepare_result(self):
- server = None
-
- if self.hcloud_floating_ip.server is not None:
- server = to_native(self.hcloud_floating_ip.server.name)
return {
- "id": to_native(self.hcloud_floating_ip.id),
- "name": to_native(self.hcloud_floating_ip.name),
- "description": to_native(self.hcloud_floating_ip.description),
- "ip": to_native(self.hcloud_floating_ip.ip),
- "type": to_native(self.hcloud_floating_ip.type),
- "home_location": to_native(self.hcloud_floating_ip.home_location.name),
+ "id": str(self.hcloud_floating_ip.id),
+ "name": self.hcloud_floating_ip.name,
+ "description": self.hcloud_floating_ip.description,
+ "ip": self.hcloud_floating_ip.ip,
+ "type": self.hcloud_floating_ip.type,
+ "home_location": self.hcloud_floating_ip.home_location.name,
"labels": self.hcloud_floating_ip.labels,
- "server": server,
+ "server": self.hcloud_floating_ip.server.name if self.hcloud_floating_ip.server is not None else None,
"delete_protection": self.hcloud_floating_ip.protection["delete"],
}
@@ -221,7 +216,8 @@ class AnsibleHCloudFloatingIP(AnsibleHCloud):
delete_protection = self.module.params.get("delete_protection")
if delete_protection is not None:
- self.hcloud_floating_ip.change_protection(delete=delete_protection).wait_until_finished()
+ action = self.hcloud_floating_ip.change_protection(delete=delete_protection)
+ action.wait_until_finished()
except HCloudException as exception:
self.fail_json_hcloud(exception)
self._mark_as_changed()
@@ -266,7 +262,8 @@ class AnsibleHCloudFloatingIP(AnsibleHCloud):
delete_protection = self.module.params.get("delete_protection")
if delete_protection is not None and delete_protection != self.hcloud_floating_ip.protection["delete"]:
if not self.module.check_mode:
- self.hcloud_floating_ip.change_protection(delete=delete_protection).wait_until_finished()
+ action = self.hcloud_floating_ip.change_protection(delete=delete_protection)
+ action.wait_until_finished()
self._mark_as_changed()
self._get_floating_ip()
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/floating_ip_info.py b/ansible_collections/hetzner/hcloud/plugins/modules/floating_ip_info.py
index 663d29622..6595799ba 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/floating_ip_info.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/floating_ip_info.py
@@ -100,7 +100,6 @@ hcloud_floating_ip_info:
"""
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import HCloudException
@@ -116,23 +115,22 @@ class AnsibleHCloudFloatingIPInfo(AnsibleHCloud):
tmp = []
for floating_ip in self.hcloud_floating_ip_info:
- if floating_ip is not None:
- server_name = None
- if floating_ip.server is not None:
- server_name = floating_ip.server.name
- tmp.append(
- {
- "id": to_native(floating_ip.id),
- "name": to_native(floating_ip.name),
- "description": to_native(floating_ip.description),
- "ip": to_native(floating_ip.ip),
- "type": to_native(floating_ip.type),
- "server": to_native(server_name),
- "home_location": to_native(floating_ip.home_location.name),
- "labels": floating_ip.labels,
- "delete_protection": floating_ip.protection["delete"],
- }
- )
+ if floating_ip is None:
+ continue
+
+ tmp.append(
+ {
+ "id": str(floating_ip.id),
+ "name": floating_ip.name,
+ "description": floating_ip.description,
+ "ip": floating_ip.ip,
+ "type": floating_ip.type,
+ "server": floating_ip.server.name if floating_ip.server is not None else None,
+ "home_location": floating_ip.home_location.name,
+ "labels": floating_ip.labels,
+ "delete_protection": floating_ip.protection["delete"],
+ }
+ )
return tmp
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/image_info.py b/ansible_collections/hetzner/hcloud/plugins/modules/image_info.py
index b0d7fc482..a3a1331c5 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/image_info.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/image_info.py
@@ -112,7 +112,6 @@ hcloud_image_info:
"""
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import HCloudException
@@ -128,20 +127,22 @@ class AnsibleHCloudImageInfo(AnsibleHCloud):
tmp = []
for image in self.hcloud_image_info:
- if image is not None:
- tmp.append(
- {
- "id": to_native(image.id),
- "status": to_native(image.status),
- "type": to_native(image.type),
- "name": to_native(image.name),
- "description": to_native(image.description),
- "os_flavor": to_native(image.os_flavor),
- "os_version": to_native(image.os_version),
- "architecture": to_native(image.architecture),
- "labels": image.labels,
- }
- )
+ if image is None:
+ continue
+
+ tmp.append(
+ {
+ "id": str(image.id),
+ "status": image.status,
+ "type": image.type,
+ "name": image.name,
+ "description": image.description,
+ "os_flavor": image.os_flavor,
+ "os_version": image.os_version,
+ "architecture": image.architecture,
+ "labels": image.labels,
+ }
+ )
return tmp
def get_images(self):
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/iso_info.py b/ansible_collections/hetzner/hcloud/plugins/modules/iso_info.py
index e623d1714..aab33cab2 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/iso_info.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/iso_info.py
@@ -122,7 +122,6 @@ hcloud_iso_info:
"""
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import HCloudException
@@ -143,13 +142,13 @@ class AnsibleHCloudIsoInfo(AnsibleHCloud):
tmp.append(
{
- "id": to_native(iso_info.id),
- "name": to_native(iso_info.name),
- "description": to_native(iso_info.description),
+ "id": str(iso_info.id),
+ "name": iso_info.name,
+ "description": iso_info.description,
"type": iso_info.type,
"architecture": iso_info.architecture,
"deprecated": (
- iso_info.deprecation.unavailable_after if iso_info.deprecation is not None else None
+ iso_info.deprecation.unavailable_after.isoformat() if iso_info.deprecation is not None else None
),
"deprecation": (
{
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/load_balancer.py b/ansible_collections/hetzner/hcloud/plugins/modules/load_balancer.py
index 1a0d8712a..11dbf96fb 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/load_balancer.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/load_balancer.py
@@ -152,7 +152,6 @@ hcloud_load_balancer:
"""
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import HCloudException
@@ -168,23 +167,20 @@ class AnsibleHCloudLoadBalancer(AnsibleHCloud):
hcloud_load_balancer: BoundLoadBalancer | None = None
def _prepare_result(self):
- private_ipv4_address = (
- None
- if len(self.hcloud_load_balancer.private_net) == 0
- else to_native(self.hcloud_load_balancer.private_net[0].ip)
- )
return {
- "id": to_native(self.hcloud_load_balancer.id),
- "name": to_native(self.hcloud_load_balancer.name),
- "ipv4_address": to_native(self.hcloud_load_balancer.public_net.ipv4.ip),
- "ipv6_address": to_native(self.hcloud_load_balancer.public_net.ipv6.ip),
- "private_ipv4_address": private_ipv4_address,
- "load_balancer_type": to_native(self.hcloud_load_balancer.load_balancer_type.name),
- "algorithm": to_native(self.hcloud_load_balancer.algorithm.type),
- "location": to_native(self.hcloud_load_balancer.location.name),
+ "id": str(self.hcloud_load_balancer.id),
+ "name": self.hcloud_load_balancer.name,
+ "ipv4_address": self.hcloud_load_balancer.public_net.ipv4.ip,
+ "ipv6_address": self.hcloud_load_balancer.public_net.ipv6.ip,
+ "private_ipv4_address": (
+ self.hcloud_load_balancer.private_net[0].ip if len(self.hcloud_load_balancer.private_net) else None
+ ),
+ "load_balancer_type": self.hcloud_load_balancer.load_balancer_type.name,
+ "algorithm": self.hcloud_load_balancer.algorithm.type,
+ "location": self.hcloud_load_balancer.location.name,
"labels": self.hcloud_load_balancer.labels,
"delete_protection": self.hcloud_load_balancer.protection["delete"],
- "disable_public_interface": False if self.hcloud_load_balancer.public_net.enabled else True,
+ "disable_public_interface": not self.hcloud_load_balancer.public_net.enabled,
}
def _get_load_balancer(self):
@@ -217,12 +213,13 @@ class AnsibleHCloudLoadBalancer(AnsibleHCloud):
if not self.module.check_mode:
resp = self.client.load_balancers.create(**params)
- resp.action.wait_until_finished(max_retries=1000)
+ resp.action.wait_until_finished()
delete_protection = self.module.params.get("delete_protection")
if delete_protection is not None:
self._get_load_balancer()
- self.hcloud_load_balancer.change_protection(delete=delete_protection).wait_until_finished()
+ action = self.hcloud_load_balancer.change_protection(delete=delete_protection)
+ action.wait_until_finished()
except HCloudException as exception:
self.fail_json_hcloud(exception)
self._mark_as_changed()
@@ -239,7 +236,8 @@ class AnsibleHCloudLoadBalancer(AnsibleHCloud):
delete_protection = self.module.params.get("delete_protection")
if delete_protection is not None and delete_protection != self.hcloud_load_balancer.protection["delete"]:
if not self.module.check_mode:
- self.hcloud_load_balancer.change_protection(delete=delete_protection).wait_until_finished()
+ action = self.hcloud_load_balancer.change_protection(delete=delete_protection)
+ action.wait_until_finished()
self._mark_as_changed()
self._get_load_balancer()
@@ -249,9 +247,11 @@ class AnsibleHCloudLoadBalancer(AnsibleHCloud):
):
if not self.module.check_mode:
if disable_public_interface is True:
- self.hcloud_load_balancer.disable_public_interface().wait_until_finished()
+ action = self.hcloud_load_balancer.disable_public_interface()
+ action.wait_until_finished()
else:
- self.hcloud_load_balancer.enable_public_interface().wait_until_finished()
+ action = self.hcloud_load_balancer.enable_public_interface()
+ action.wait_until_finished()
self._mark_as_changed()
load_balancer_type = self.module.params.get("load_balancer_type")
@@ -263,17 +263,17 @@ class AnsibleHCloudLoadBalancer(AnsibleHCloud):
if not new_load_balancer_type:
self.module.fail_json(msg="unknown load balancer type")
if not self.module.check_mode:
- self.hcloud_load_balancer.change_type(
+ action = self.hcloud_load_balancer.change_type(
load_balancer_type=new_load_balancer_type,
- ).wait_until_finished(max_retries=1000)
+ )
+ action.wait_until_finished()
self._mark_as_changed()
algorithm = self.module.params.get("algorithm")
if algorithm is not None and self.hcloud_load_balancer.algorithm.type != algorithm:
- self.hcloud_load_balancer.change_algorithm(
- algorithm=LoadBalancerAlgorithm(type=algorithm)
- ).wait_until_finished()
+ action = self.hcloud_load_balancer.change_algorithm(algorithm=LoadBalancerAlgorithm(type=algorithm))
+ action.wait_until_finished()
self._mark_as_changed()
self._get_load_balancer()
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/load_balancer_info.py b/ansible_collections/hetzner/hcloud/plugins/modules/load_balancer_info.py
index 19ead98c2..4ed5f134b 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/load_balancer_info.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/load_balancer_info.py
@@ -277,11 +277,14 @@ hcloud_load_balancer_info:
"""
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import HCloudException
-from ..module_utils.vendor.hcloud.load_balancers import BoundLoadBalancer
+from ..module_utils.vendor.hcloud.load_balancers import (
+ BoundLoadBalancer,
+ LoadBalancerService,
+ LoadBalancerTarget,
+)
class AnsibleHCloudLoadBalancerInfo(AnsibleHCloud):
@@ -293,44 +296,40 @@ class AnsibleHCloudLoadBalancerInfo(AnsibleHCloud):
tmp = []
for load_balancer in self.hcloud_load_balancer_info:
- if load_balancer is not None:
- services = [self._prepare_service_result(service) for service in load_balancer.services]
- targets = [self._prepare_target_result(target) for target in load_balancer.targets]
-
- private_ipv4_address = (
- None if len(load_balancer.private_net) == 0 else to_native(load_balancer.private_net[0].ip)
- )
- tmp.append(
- {
- "id": to_native(load_balancer.id),
- "name": to_native(load_balancer.name),
- "ipv4_address": to_native(load_balancer.public_net.ipv4.ip),
- "ipv6_address": to_native(load_balancer.public_net.ipv6.ip),
- "private_ipv4_address": private_ipv4_address,
- "load_balancer_type": to_native(load_balancer.load_balancer_type.name),
- "location": to_native(load_balancer.location.name),
- "labels": load_balancer.labels,
- "delete_protection": load_balancer.protection["delete"],
- "disable_public_interface": False if load_balancer.public_net.enabled else True,
- "targets": targets,
- "services": services,
- }
- )
+ if load_balancer is None:
+ continue
+
+ tmp.append(
+ {
+ "id": str(load_balancer.id),
+ "name": load_balancer.name,
+ "ipv4_address": load_balancer.public_net.ipv4.ip,
+ "ipv6_address": load_balancer.public_net.ipv6.ip,
+ "private_ipv4_address": load_balancer.private_net[0].ip if len(load_balancer.private_net) else None,
+ "load_balancer_type": load_balancer.load_balancer_type.name,
+ "location": load_balancer.location.name,
+ "labels": load_balancer.labels,
+ "delete_protection": load_balancer.protection["delete"],
+ "disable_public_interface": False if load_balancer.public_net.enabled else True,
+ "targets": [self._prepare_target_result(target) for target in load_balancer.targets],
+ "services": [self._prepare_service_result(service) for service in load_balancer.services],
+ }
+ )
return tmp
@staticmethod
- def _prepare_service_result(service):
+ def _prepare_service_result(service: LoadBalancerService):
http = None
if service.protocol != "tcp":
http = {
- "cookie_name": to_native(service.http.cookie_name),
- "cookie_lifetime": service.http.cookie_name,
+ "cookie_name": service.http.cookie_name,
+ "cookie_lifetime": service.http.cookie_lifetime,
"redirect_http": service.http.redirect_http,
"sticky_sessions": service.http.sticky_sessions,
- "certificates": [to_native(certificate.name) for certificate in service.http.certificates],
+ "certificates": [certificate.name for certificate in service.http.certificates],
}
health_check = {
- "protocol": to_native(service.health_check.protocol),
+ "protocol": service.health_check.protocol,
"port": service.health_check.port,
"interval": service.health_check.interval,
"timeout": service.health_check.timeout,
@@ -338,14 +337,14 @@ class AnsibleHCloudLoadBalancerInfo(AnsibleHCloud):
}
if service.health_check.protocol != "tcp":
health_check["http"] = {
- "domain": to_native(service.health_check.http.domain),
- "path": to_native(service.health_check.http.path),
- "response": to_native(service.health_check.http.response),
- "certificates": [to_native(status_code) for status_code in service.health_check.http.status_codes],
+ "domain": service.health_check.http.domain,
+ "path": service.health_check.http.path,
+ "response": service.health_check.http.response,
+ "certificates": service.health_check.http.status_codes,
"tls": service.health_check.http.tls,
}
return {
- "protocol": to_native(service.protocol),
+ "protocol": service.protocol,
"listen_port": service.listen_port,
"destination_port": service.destination_port,
"proxyprotocol": service.proxyprotocol,
@@ -354,17 +353,17 @@ class AnsibleHCloudLoadBalancerInfo(AnsibleHCloud):
}
@staticmethod
- def _prepare_target_result(target):
+ def _prepare_target_result(target: LoadBalancerTarget):
result = {
- "type": to_native(target.type),
+ "type": target.type,
"use_private_ip": target.use_private_ip,
}
if target.type == "server":
- result["server"] = to_native(target.server.name)
+ result["server"] = target.server.name
elif target.type == "label_selector":
- result["label_selector"] = to_native(target.label_selector.selector)
+ result["label_selector"] = target.label_selector.selector
elif target.type == "ip":
- result["ip"] = to_native(target.ip.ip)
+ result["ip"] = target.ip.ip
if target.health_status is not None:
result["health_status"] = [
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/load_balancer_network.py b/ansible_collections/hetzner/hcloud/plugins/modules/load_balancer_network.py
index 4560f8735..b6ec486ed 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/load_balancer_network.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/load_balancer_network.py
@@ -90,7 +90,6 @@ hcloud_load_balancer_network:
"""
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import HCloudException
@@ -107,9 +106,9 @@ class AnsibleHCloudLoadBalancerNetwork(AnsibleHCloud):
def _prepare_result(self):
return {
- "network": to_native(self.hcloud_network.name),
- "load_balancer": to_native(self.hcloud_load_balancer.name),
- "ip": to_native(self.hcloud_load_balancer_network.ip),
+ "network": self.hcloud_network.name,
+ "load_balancer": self.hcloud_load_balancer.name,
+ "ip": self.hcloud_load_balancer_network.ip,
}
def _get_load_balancer_and_network(self):
@@ -140,7 +139,8 @@ class AnsibleHCloudLoadBalancerNetwork(AnsibleHCloud):
if not self.module.check_mode:
try:
- self.hcloud_load_balancer.attach_to_network(**params).wait_until_finished()
+ action = self.hcloud_load_balancer.attach_to_network(**params)
+ action.wait_until_finished()
except HCloudException as exception:
self.fail_json_hcloud(exception)
@@ -160,9 +160,8 @@ class AnsibleHCloudLoadBalancerNetwork(AnsibleHCloud):
if self.hcloud_load_balancer_network is not None and self.hcloud_load_balancer is not None:
if not self.module.check_mode:
try:
- self.hcloud_load_balancer.detach_from_network(
- self.hcloud_load_balancer_network.network
- ).wait_until_finished()
+ action = self.hcloud_load_balancer.detach_from_network(self.hcloud_load_balancer_network.network)
+ action.wait_until_finished()
self._mark_as_changed()
except HCloudException as exception:
self.fail_json_hcloud(exception)
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/load_balancer_service.py b/ansible_collections/hetzner/hcloud/plugins/modules/load_balancer_service.py
index 1fc18deef..29e37083c 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/load_balancer_service.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/load_balancer_service.py
@@ -279,7 +279,6 @@ hcloud_load_balancer_service:
"""
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import APIException, HCloudException
@@ -302,16 +301,16 @@ class AnsibleHCloudLoadBalancerService(AnsibleHCloud):
http = None
if self.hcloud_load_balancer_service.protocol != "tcp":
http = {
- "cookie_name": to_native(self.hcloud_load_balancer_service.http.cookie_name),
- "cookie_lifetime": self.hcloud_load_balancer_service.http.cookie_name,
+ "cookie_name": self.hcloud_load_balancer_service.http.cookie_name,
+ "cookie_lifetime": self.hcloud_load_balancer_service.http.cookie_lifetime,
"redirect_http": self.hcloud_load_balancer_service.http.redirect_http,
"sticky_sessions": self.hcloud_load_balancer_service.http.sticky_sessions,
"certificates": [
- to_native(certificate.name) for certificate in self.hcloud_load_balancer_service.http.certificates
+ certificate.name for certificate in self.hcloud_load_balancer_service.http.certificates
],
}
health_check = {
- "protocol": to_native(self.hcloud_load_balancer_service.health_check.protocol),
+ "protocol": self.hcloud_load_balancer_service.health_check.protocol,
"port": self.hcloud_load_balancer_service.health_check.port,
"interval": self.hcloud_load_balancer_service.health_check.interval,
"timeout": self.hcloud_load_balancer_service.health_check.timeout,
@@ -319,18 +318,15 @@ class AnsibleHCloudLoadBalancerService(AnsibleHCloud):
}
if self.hcloud_load_balancer_service.health_check.protocol != "tcp":
health_check["http"] = {
- "domain": to_native(self.hcloud_load_balancer_service.health_check.http.domain),
- "path": to_native(self.hcloud_load_balancer_service.health_check.http.path),
- "response": to_native(self.hcloud_load_balancer_service.health_check.http.response),
- "status_codes": [
- to_native(status_code)
- for status_code in self.hcloud_load_balancer_service.health_check.http.status_codes
- ],
+ "domain": self.hcloud_load_balancer_service.health_check.http.domain,
+ "path": self.hcloud_load_balancer_service.health_check.http.path,
+ "response": self.hcloud_load_balancer_service.health_check.http.response,
+ "status_codes": self.hcloud_load_balancer_service.health_check.http.status_codes,
"tls": self.hcloud_load_balancer_service.health_check.http.tls,
}
return {
- "load_balancer": to_native(self.hcloud_load_balancer.name),
- "protocol": to_native(self.hcloud_load_balancer_service.protocol),
+ "load_balancer": self.hcloud_load_balancer.name,
+ "protocol": self.hcloud_load_balancer_service.protocol,
"listen_port": self.hcloud_load_balancer_service.listen_port,
"destination_port": self.hcloud_load_balancer_service.destination_port,
"proxyprotocol": self.hcloud_load_balancer_service.proxyprotocol,
@@ -372,9 +368,8 @@ class AnsibleHCloudLoadBalancerService(AnsibleHCloud):
if not self.module.check_mode:
try:
- self.hcloud_load_balancer.add_service(LoadBalancerService(**params)).wait_until_finished(
- max_retries=1000
- )
+ action = self.hcloud_load_balancer.add_service(LoadBalancerService(**params))
+ action.wait_until_finished()
except HCloudException as exception:
self.fail_json_hcloud(exception)
self._mark_as_changed()
@@ -468,9 +463,8 @@ class AnsibleHCloudLoadBalancerService(AnsibleHCloud):
changed = True
if not self.module.check_mode:
- self.hcloud_load_balancer.update_service(LoadBalancerService(**params)).wait_until_finished(
- max_retries=1000
- )
+ action = self.hcloud_load_balancer.update_service(LoadBalancerService(**params))
+ action.wait_until_finished()
except HCloudException as exception:
self.fail_json_hcloud(exception)
self._get_load_balancer()
@@ -496,9 +490,8 @@ class AnsibleHCloudLoadBalancerService(AnsibleHCloud):
if self.hcloud_load_balancer_service is not None:
if not self.module.check_mode:
try:
- self.hcloud_load_balancer.delete_service(self.hcloud_load_balancer_service).wait_until_finished(
- max_retries=1000
- )
+ action = self.hcloud_load_balancer.delete_service(self.hcloud_load_balancer_service)
+ action.wait_until_finished()
except HCloudException as exception:
self.fail_json_hcloud(exception)
self._mark_as_changed()
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/load_balancer_target.py b/ansible_collections/hetzner/hcloud/plugins/modules/load_balancer_target.py
index 36e7f608f..c392ae712 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/load_balancer_target.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/load_balancer_target.py
@@ -134,7 +134,6 @@ hcloud_load_balancer_target:
"""
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import APIException, HCloudException
@@ -156,17 +155,17 @@ class AnsibleHCloudLoadBalancerTarget(AnsibleHCloud):
def _prepare_result(self):
result = {
- "type": to_native(self.hcloud_load_balancer_target.type),
- "load_balancer": to_native(self.hcloud_load_balancer.name),
+ "type": self.hcloud_load_balancer_target.type,
+ "load_balancer": self.hcloud_load_balancer.name,
"use_private_ip": self.hcloud_load_balancer_target.use_private_ip,
}
if self.hcloud_load_balancer_target.type == "server":
- result["server"] = to_native(self.hcloud_load_balancer_target.server.name)
+ result["server"] = self.hcloud_load_balancer_target.server.name
elif self.hcloud_load_balancer_target.type == "label_selector":
- result["label_selector"] = to_native(self.hcloud_load_balancer_target.label_selector.selector)
+ result["label_selector"] = self.hcloud_load_balancer_target.label_selector.selector
elif self.hcloud_load_balancer_target.type == "ip":
- result["ip"] = to_native(self.hcloud_load_balancer_target.ip.ip)
+ result["ip"] = self.hcloud_load_balancer_target.ip.ip
return result
def _get_load_balancer_and_target(self):
@@ -225,7 +224,8 @@ class AnsibleHCloudLoadBalancerTarget(AnsibleHCloud):
if not self.module.check_mode:
try:
- self.hcloud_load_balancer.add_target(**params).wait_until_finished()
+ action = self.hcloud_load_balancer.add_target(**params)
+ action.wait_until_finished()
except APIException as exception:
if exception.code == "locked" or exception.code == "conflict":
self._create_load_balancer_target()
@@ -270,7 +270,8 @@ class AnsibleHCloudLoadBalancerTarget(AnsibleHCloud):
use_private_ip=False,
)
try:
- self.hcloud_load_balancer.remove_target(target).wait_until_finished()
+ action = self.hcloud_load_balancer.remove_target(target)
+ action.wait_until_finished()
except HCloudException as exception:
self.fail_json_hcloud(exception)
self._mark_as_changed()
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/load_balancer_type_info.py b/ansible_collections/hetzner/hcloud/plugins/modules/load_balancer_type_info.py
index 67feafd59..90505651c 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/load_balancer_type_info.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/load_balancer_type_info.py
@@ -88,7 +88,6 @@ hcloud_load_balancer_type_info:
"""
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import HCloudException
@@ -104,18 +103,20 @@ class AnsibleHCloudLoadBalancerTypeInfo(AnsibleHCloud):
tmp = []
for load_balancer_type in self.hcloud_load_balancer_type_info:
- if load_balancer_type is not None:
- tmp.append(
- {
- "id": to_native(load_balancer_type.id),
- "name": to_native(load_balancer_type.name),
- "description": to_native(load_balancer_type.description),
- "max_connections": load_balancer_type.max_connections,
- "max_services": load_balancer_type.max_services,
- "max_targets": load_balancer_type.max_targets,
- "max_assigned_certificates": load_balancer_type.max_assigned_certificates,
- }
- )
+ if load_balancer_type is None:
+ continue
+
+ tmp.append(
+ {
+ "id": str(load_balancer_type.id),
+ "name": load_balancer_type.name,
+ "description": load_balancer_type.description,
+ "max_connections": load_balancer_type.max_connections,
+ "max_services": load_balancer_type.max_services,
+ "max_targets": load_balancer_type.max_targets,
+ "max_assigned_certificates": load_balancer_type.max_assigned_certificates,
+ }
+ )
return tmp
def get_load_balancer_types(self):
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/location_info.py b/ansible_collections/hetzner/hcloud/plugins/modules/location_info.py
index ac495c6c8..676917bfc 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/location_info.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/location_info.py
@@ -78,7 +78,6 @@ hcloud_location_info:
"""
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import HCloudException
@@ -94,16 +93,18 @@ class AnsibleHCloudLocationInfo(AnsibleHCloud):
tmp = []
for location in self.hcloud_location_info:
- if location is not None:
- tmp.append(
- {
- "id": to_native(location.id),
- "name": to_native(location.name),
- "description": to_native(location.description),
- "city": to_native(location.city),
- "country": to_native(location.country),
- }
- )
+ if location is None:
+ continue
+
+ tmp.append(
+ {
+ "id": str(location.id),
+ "name": location.name,
+ "description": location.description,
+ "city": location.city,
+ "country": location.country,
+ }
+ )
return tmp
def get_locations(self):
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/network.py b/ansible_collections/hetzner/hcloud/plugins/modules/network.py
index 24e45a48d..92fe9461e 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/network.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/network.py
@@ -115,7 +115,6 @@ hcloud_network:
"""
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import HCloudException
@@ -129,9 +128,9 @@ class AnsibleHCloudNetwork(AnsibleHCloud):
def _prepare_result(self):
return {
- "id": to_native(self.hcloud_network.id),
- "name": to_native(self.hcloud_network.name),
- "ip_range": to_native(self.hcloud_network.ip_range),
+ "id": str(self.hcloud_network.id),
+ "name": self.hcloud_network.name,
+ "ip_range": self.hcloud_network.ip_range,
"expose_routes_to_vswitch": self.hcloud_network.expose_routes_to_vswitch,
"delete_protection": self.hcloud_network.protection["delete"],
"labels": self.hcloud_network.labels,
@@ -165,7 +164,8 @@ class AnsibleHCloudNetwork(AnsibleHCloud):
delete_protection = self.module.params.get("delete_protection")
if delete_protection is not None:
self._get_network()
- self.hcloud_network.change_protection(delete=delete_protection).wait_until_finished()
+ action = self.hcloud_network.change_protection(delete=delete_protection)
+ action.wait_until_finished()
except HCloudException as exception:
self.fail_json_hcloud(exception)
self._mark_as_changed()
@@ -173,6 +173,13 @@ class AnsibleHCloudNetwork(AnsibleHCloud):
def _update_network(self):
try:
+ name = self.module.params.get("name")
+ if name is not None and self.hcloud_network.name != name:
+ self.module.fail_on_missing_params(required_params=["id"])
+ if not self.module.check_mode:
+ self.hcloud_network.update(name=name)
+ self._mark_as_changed()
+
labels = self.module.params.get("labels")
if labels is not None and labels != self.hcloud_network.labels:
if not self.module.check_mode:
@@ -182,7 +189,8 @@ class AnsibleHCloudNetwork(AnsibleHCloud):
ip_range = self.module.params.get("ip_range")
if ip_range is not None and ip_range != self.hcloud_network.ip_range:
if not self.module.check_mode:
- self.hcloud_network.change_ip_range(ip_range=ip_range).wait_until_finished()
+ action = self.hcloud_network.change_ip_range(ip_range=ip_range)
+ action.wait_until_finished()
self._mark_as_changed()
expose_routes_to_vswitch = self.module.params.get("expose_routes_to_vswitch")
@@ -197,7 +205,8 @@ class AnsibleHCloudNetwork(AnsibleHCloud):
delete_protection = self.module.params.get("delete_protection")
if delete_protection is not None and delete_protection != self.hcloud_network.protection["delete"]:
if not self.module.check_mode:
- self.hcloud_network.change_protection(delete=delete_protection).wait_until_finished()
+ action = self.hcloud_network.change_protection(delete=delete_protection)
+ action.wait_until_finished()
self._mark_as_changed()
except HCloudException as exception:
self.fail_json_hcloud(exception)
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/network_info.py b/ansible_collections/hetzner/hcloud/plugins/modules/network_info.py
index 4008352b4..8f1e5fbf7 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/network_info.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/network_info.py
@@ -185,7 +185,6 @@ hcloud_network_info:
"""
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import HCloudException
@@ -201,55 +200,55 @@ class AnsibleHCloudNetworkInfo(AnsibleHCloud):
tmp = []
for network in self.hcloud_network_info:
- if network is not None:
- subnets = []
- for subnet in network.subnets:
- prepared_subnet = {
- "type": subnet.type,
- "ip_range": subnet.ip_range,
- "network_zone": subnet.network_zone,
- "gateway": subnet.gateway,
- }
- subnets.append(prepared_subnet)
- routes = []
- for route in network.routes:
- prepared_route = {"destination": route.destination, "gateway": route.gateway}
- routes.append(prepared_route)
-
- servers = []
- for server in network.servers:
- image = None if server.image is None else to_native(server.image.name)
- ipv4_address = None if server.public_net.ipv4 is None else to_native(server.public_net.ipv4.ip)
- ipv6 = None if server.public_net.ipv6 is None else to_native(server.public_net.ipv6.ip)
- prepared_server = {
- "id": to_native(server.id),
- "name": to_native(server.name),
- "ipv4_address": ipv4_address,
- "ipv6": ipv6,
- "image": image,
- "server_type": to_native(server.server_type.name),
- "datacenter": to_native(server.datacenter.name),
- "location": to_native(server.datacenter.location.name),
- "rescue_enabled": server.rescue_enabled,
- "backup_window": to_native(server.backup_window),
- "labels": server.labels,
- "status": to_native(server.status),
- }
- servers.append(prepared_server)
-
- tmp.append(
- {
- "id": to_native(network.id),
- "name": to_native(network.name),
- "ip_range": to_native(network.ip_range),
- "subnetworks": subnets,
- "routes": routes,
- "expose_routes_to_vswitch": network.expose_routes_to_vswitch,
- "servers": servers,
- "labels": network.labels,
- "delete_protection": network.protection["delete"],
- }
- )
+ if network is None:
+ continue
+
+ subnets = []
+ for subnet in network.subnets:
+ prepared_subnet = {
+ "type": subnet.type,
+ "ip_range": subnet.ip_range,
+ "network_zone": subnet.network_zone,
+ "gateway": subnet.gateway,
+ }
+ subnets.append(prepared_subnet)
+
+ routes = []
+ for route in network.routes:
+ prepared_route = {"destination": route.destination, "gateway": route.gateway}
+ routes.append(prepared_route)
+
+ servers = []
+ for server in network.servers:
+ prepared_server = {
+ "id": str(server.id),
+ "name": server.name,
+ "ipv4_address": server.public_net.ipv4.ip if server.public_net.ipv4 is not None else None,
+ "ipv6": server.public_net.ipv6.ip if server.public_net.ipv6 is not None else None,
+ "image": server.image.name if server.image is not None else None,
+ "server_type": server.server_type.name,
+ "datacenter": server.datacenter.name,
+ "location": server.datacenter.location.name,
+ "rescue_enabled": server.rescue_enabled,
+ "backup_window": server.backup_window,
+ "labels": server.labels,
+ "status": server.status,
+ }
+ servers.append(prepared_server)
+
+ tmp.append(
+ {
+ "id": str(network.id),
+ "name": network.name,
+ "ip_range": network.ip_range,
+ "subnetworks": subnets,
+ "routes": routes,
+ "expose_routes_to_vswitch": network.expose_routes_to_vswitch,
+ "servers": servers,
+ "labels": network.labels,
+ "delete_protection": network.protection["delete"],
+ }
+ )
return tmp
def get_networks(self):
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/placement_group.py b/ansible_collections/hetzner/hcloud/plugins/modules/placement_group.py
index ba26fad22..45a0cd76b 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/placement_group.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/placement_group.py
@@ -107,7 +107,6 @@ hcloud_placement_group:
"""
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import HCloudException
@@ -121,10 +120,10 @@ class AnsibleHCloudPlacementGroup(AnsibleHCloud):
def _prepare_result(self):
return {
- "id": to_native(self.hcloud_placement_group.id),
- "name": to_native(self.hcloud_placement_group.name),
+ "id": str(self.hcloud_placement_group.id),
+ "name": self.hcloud_placement_group.name,
"labels": self.hcloud_placement_group.labels,
- "type": to_native(self.hcloud_placement_group.type),
+ "type": self.hcloud_placement_group.type,
"servers": self.hcloud_placement_group.servers,
}
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/primary_ip.py b/ansible_collections/hetzner/hcloud/plugins/modules/primary_ip.py
index 607f6c7e1..08bcea493 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/primary_ip.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/primary_ip.py
@@ -35,6 +35,12 @@ options:
- Home Location of the Hetzner Cloud Primary IP.
- Required if no I(server) is given and Primary IP does not exist.
type: str
+ server:
+ description:
+ - Name or ID of the Hetzner Cloud Server the Primary IP should be assigned to.
+ - The Primary IP cannot be assigned to a running server.
+ - Required if no O(datacenter) is given and the Primary IP does not exist.
+ type: str
type:
description:
- Type of the Primary IP.
@@ -43,9 +49,9 @@ options:
type: str
auto_delete:
description:
- - Delete this Primary IP when the resource it is assigned to is deleted
+ - Delete the Primary IP when the resource it is assigned to is deleted.
type: bool
- default: no
+ default: false
delete_protection:
description:
- Protect the Primary IP for deletion.
@@ -66,22 +72,39 @@ extends_documentation_fragment:
"""
EXAMPLES = """
-- name: Create a basic IPv4 Primary IP
+- name: Create a IPv4 Primary IP
hetzner.hcloud.primary_ip:
name: my-primary-ip
datacenter: fsn1-dc14
type: ipv4
state: present
-- name: Create a basic IPv6 Primary IP
+
+- name: Create a IPv6 Primary IP
hetzner.hcloud.primary_ip:
name: my-primary-ip
datacenter: fsn1-dc14
type: ipv6
state: present
-- name: Primary IP should be absent
+
+- name: Delete a Primary IP
hetzner.hcloud.primary_ip:
name: my-primary-ip
state: absent
+
+- name: Ensure the server is stopped
+ hetzner.hcloud.server:
+ name: my-server
+ state: stopped
+- name: Create a Primary IP attached to a Server
+ hetzner.hcloud.primary_ip:
+ name: my-primary-ip
+ server: my-server
+ type: ipv4
+ state: present
+- name: Ensure the server is started
+ hetzner.hcloud.server:
+ name: my-server
+ state: started
"""
RETURN = """
@@ -127,10 +150,24 @@ hcloud_primary_ip:
sample:
key: value
mylabel: 123
+ assignee_id:
+ description: ID of the resource the Primary IP is assigned to, null if it is not assigned.
+ type: int
+ returned: always
+ sample: 1937415
+ assignee_type:
+ description: Resource type the Primary IP can be assigned to.
+ type: str
+ returned: always
+ sample: server
+ auto_delete:
+ description: Delete the Primary IP when the resource it is assigned to is deleted.
+ type: bool
+ returned: always
+ sample: false
"""
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import HCloudException
@@ -144,13 +181,18 @@ class AnsibleHCloudPrimaryIP(AnsibleHCloud):
def _prepare_result(self):
return {
- "id": to_native(self.hcloud_primary_ip.id),
- "name": to_native(self.hcloud_primary_ip.name),
- "ip": to_native(self.hcloud_primary_ip.ip),
- "type": to_native(self.hcloud_primary_ip.type),
- "datacenter": to_native(self.hcloud_primary_ip.datacenter.name),
+ "id": str(self.hcloud_primary_ip.id),
+ "name": self.hcloud_primary_ip.name,
+ "ip": self.hcloud_primary_ip.ip,
+ "type": self.hcloud_primary_ip.type,
+ "datacenter": self.hcloud_primary_ip.datacenter.name,
"labels": self.hcloud_primary_ip.labels,
"delete_protection": self.hcloud_primary_ip.protection["delete"],
+ "assignee_id": (
+ str(self.hcloud_primary_ip.assignee_id) if self.hcloud_primary_ip.assignee_id is not None else None
+ ),
+ "assignee_type": self.hcloud_primary_ip.assignee_type,
+ "auto_delete": self.hcloud_primary_ip.auto_delete,
}
def _get_primary_ip(self):
@@ -163,23 +205,35 @@ class AnsibleHCloudPrimaryIP(AnsibleHCloud):
self.fail_json_hcloud(exception)
def _create_primary_ip(self):
- self.module.fail_on_missing_params(required_params=["type", "datacenter"])
+ self.fail_on_invalid_params(
+ required=["type", "name"],
+ required_one_of=[["server", "datacenter"]],
+ )
try:
params = {
"type": self.module.params.get("type"),
"name": self.module.params.get("name"),
- "datacenter": self.client.datacenters.get_by_name(self.module.params.get("datacenter")),
+ "auto_delete": self.module.params.get("auto_delete"),
+ "datacenter": None, # TODO: https://github.com/hetznercloud/hcloud-python/pull/363
}
+ if self.module.params.get("datacenter") is not None:
+ params["datacenter"] = self.client.datacenters.get_by_name(self.module.params.get("datacenter"))
+ elif self.module.params.get("server") is not None:
+ params["assignee_id"] = self._client_get_by_name_or_id("servers", self.module.params.get("server")).id
+
if self.module.params.get("labels") is not None:
params["labels"] = self.module.params.get("labels")
if not self.module.check_mode:
resp = self.client.primary_ips.create(**params)
+ if resp.action is not None:
+ resp.action.wait_until_finished()
self.hcloud_primary_ip = resp.primary_ip
delete_protection = self.module.params.get("delete_protection")
if delete_protection is not None:
- self.hcloud_primary_ip.change_protection(delete=delete_protection).wait_until_finished()
+ action = self.hcloud_primary_ip.change_protection(delete=delete_protection)
+ action.wait_until_finished()
except HCloudException as exception:
self.fail_json_hcloud(exception)
self._mark_as_changed()
@@ -187,16 +241,26 @@ class AnsibleHCloudPrimaryIP(AnsibleHCloud):
def _update_primary_ip(self):
try:
+ changes = {}
+
+ auto_delete = self.module.params.get("auto_delete")
+ if auto_delete is not None and auto_delete != self.hcloud_primary_ip.auto_delete:
+ changes["auto_delete"] = auto_delete
+
labels = self.module.params.get("labels")
if labels is not None and labels != self.hcloud_primary_ip.labels:
+ changes["labels"] = labels
+
+ if changes:
if not self.module.check_mode:
- self.hcloud_primary_ip.update(labels=labels)
+ self.hcloud_primary_ip.update(**changes)
self._mark_as_changed()
delete_protection = self.module.params.get("delete_protection")
if delete_protection is not None and delete_protection != self.hcloud_primary_ip.protection["delete"]:
if not self.module.check_mode:
- self.hcloud_primary_ip.change_protection(delete=delete_protection).wait_until_finished()
+ action = self.hcloud_primary_ip.change_protection(delete=delete_protection)
+ action.wait_until_finished()
self._mark_as_changed()
self._get_primary_ip()
@@ -228,6 +292,7 @@ class AnsibleHCloudPrimaryIP(AnsibleHCloud):
id={"type": "int"},
name={"type": "str"},
datacenter={"type": "str"},
+ server={"type": "str"},
auto_delete={"type": "bool", "default": False},
type={"choices": ["ipv4", "ipv6"]},
labels={"type": "dict"},
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/primary_ip_info.py b/ansible_collections/hetzner/hcloud/plugins/modules/primary_ip_info.py
index c0bfdbb35..72e359ae2 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/primary_ip_info.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/primary_ip_info.py
@@ -117,10 +117,14 @@ hcloud_primary_ip_info:
description: True if the Primary IP is protected for deletion
returned: always
type: bool
+ auto_delete:
+ description: Delete the Primary IP when the resource it is assigned to is deleted.
+ type: bool
+ returned: always
+ sample: false
"""
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import HCloudException
@@ -136,26 +140,24 @@ class AnsibleHCloudPrimaryIPInfo(AnsibleHCloud):
tmp = []
for primary_ip in self.hcloud_primary_ip_info:
- if primary_ip is not None:
- dns_ptr = None
- if len(primary_ip.dns_ptr) > 0:
- dns_ptr = primary_ip.dns_ptr[0]["dns_ptr"]
- tmp.append(
- {
- "id": to_native(primary_ip.id),
- "name": to_native(primary_ip.name),
- "ip": to_native(primary_ip.ip),
- "type": to_native(primary_ip.type),
- "assignee_id": (
- to_native(primary_ip.assignee_id) if primary_ip.assignee_id is not None else None
- ),
- "assignee_type": to_native(primary_ip.assignee_type),
- "home_location": to_native(primary_ip.datacenter.name),
- "dns_ptr": to_native(dns_ptr) if dns_ptr is not None else None,
- "labels": primary_ip.labels,
- "delete_protection": primary_ip.protection["delete"],
- }
- )
+ if primary_ip is None:
+ continue
+
+ tmp.append(
+ {
+ "id": str(primary_ip.id),
+ "name": primary_ip.name,
+ "ip": primary_ip.ip,
+ "type": primary_ip.type,
+ "assignee_id": str(primary_ip.assignee_id) if primary_ip.assignee_id is not None else None,
+ "assignee_type": primary_ip.assignee_type,
+ "auto_delete": primary_ip.auto_delete,
+ "home_location": primary_ip.datacenter.name,
+ "dns_ptr": primary_ip.dns_ptr[0]["dns_ptr"] if len(primary_ip.dns_ptr) else None,
+ "labels": primary_ip.labels,
+ "delete_protection": primary_ip.protection["delete"],
+ }
+ )
return tmp
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/rdns.py b/ansible_collections/hetzner/hcloud/plugins/modules/rdns.py
index b2decdec8..4e21f3e92 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/rdns.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/rdns.py
@@ -136,7 +136,6 @@ import ipaddress
from typing import Any
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import HCloudException
@@ -157,18 +156,18 @@ class AnsibleHCloudReverseDNS(AnsibleHCloud):
"server": None,
"floating_ip": None,
"load_balancer": None,
- "ip_address": to_native(self.hcloud_rdns["ip_address"]),
- "dns_ptr": to_native(self.hcloud_rdns["dns_ptr"]),
+ "ip_address": self.hcloud_rdns["ip_address"],
+ "dns_ptr": self.hcloud_rdns["dns_ptr"],
}
if self.module.params.get("server"):
- result["server"] = to_native(self.hcloud_resource.name)
+ result["server"] = self.hcloud_resource.name
elif self.module.params.get("floating_ip"):
- result["floating_ip"] = to_native(self.hcloud_resource.name)
+ result["floating_ip"] = self.hcloud_resource.name
elif self.module.params.get("load_balancer"):
- result["load_balancer"] = to_native(self.hcloud_resource.name)
+ result["load_balancer"] = self.hcloud_resource.name
elif self.module.params.get("primary_ip"):
- result["primary_ip"] = to_native(self.hcloud_resource.name)
+ result["primary_ip"] = self.hcloud_resource.name
return result
def _get_resource(self):
@@ -277,7 +276,8 @@ class AnsibleHCloudReverseDNS(AnsibleHCloud):
if not self.module.check_mode:
try:
- self.hcloud_resource.change_dns_ptr(**params).wait_until_finished()
+ action = self.hcloud_resource.change_dns_ptr(**params)
+ action.wait_until_finished()
except HCloudException as exception:
self.fail_json_hcloud(exception)
self._mark_as_changed()
@@ -294,7 +294,8 @@ class AnsibleHCloudReverseDNS(AnsibleHCloud):
if not self.module.check_mode:
try:
- self.hcloud_resource.change_dns_ptr(**params).wait_until_finished()
+ action = self.hcloud_resource.change_dns_ptr(**params)
+ action.wait_until_finished()
except HCloudException as exception:
self.fail_json_hcloud(exception)
self._mark_as_changed()
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/route.py b/ansible_collections/hetzner/hcloud/plugins/modules/route.py
index 3c96a7382..37ff50b07 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/route.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/route.py
@@ -86,7 +86,6 @@ hcloud_route:
"""
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import HCloudException
@@ -101,8 +100,8 @@ class AnsibleHCloudRoute(AnsibleHCloud):
def _prepare_result(self):
return {
- "network": to_native(self.hcloud_network.name),
- "destination": to_native(self.hcloud_route.destination),
+ "network": self.hcloud_network.name,
+ "destination": self.hcloud_route.destination,
"gateway": self.hcloud_route.gateway,
}
@@ -130,7 +129,8 @@ class AnsibleHCloudRoute(AnsibleHCloud):
if not self.module.check_mode:
try:
- self.hcloud_network.add_route(route=route).wait_until_finished()
+ action = self.hcloud_network.add_route(route=route)
+ action.wait_until_finished()
except HCloudException as exception:
self.fail_json_hcloud(exception)
@@ -150,7 +150,8 @@ class AnsibleHCloudRoute(AnsibleHCloud):
if self.hcloud_route is not None and self.hcloud_network is not None:
if not self.module.check_mode:
try:
- self.hcloud_network.delete_route(self.hcloud_route).wait_until_finished()
+ action = self.hcloud_network.delete_route(self.hcloud_route)
+ action.wait_until_finished()
except HCloudException as exception:
self.fail_json_hcloud(exception)
self._mark_as_changed()
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/server.py b/ansible_collections/hetzner/hcloud/plugins/modules/server.py
index f5cadb807..d7bae3fc1 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/server.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/server.py
@@ -22,50 +22,58 @@ author:
options:
id:
description:
- - The ID of the Hetzner Cloud server to manage.
- - Only required if no server I(name) is given
+ - ID of the Hetzner Cloud Server to manage.
+ - Only required if no server O(name) is given
type: int
name:
description:
- - The Name of the Hetzner Cloud server to manage.
- - Only required if no server I(id) is given or a server does not exist.
+ - Name of the Hetzner Cloud Server to manage.
+ - Only required if no server O(id) is given or a server does not exist.
type: str
server_type:
description:
- - The Server Type of the Hetzner Cloud server to manage.
+ - Hetzner Cloud Server Type (name or ID) of the server.
- Required if server does not exist.
type: str
ssh_keys:
description:
- - List of SSH key names
- - The key names correspond to the SSH keys configured for your
- Hetzner Cloud account access.
+ - List of Hetzner Cloud SSH Keys (name or ID) to create the server with.
+ - Only used during the server creation.
type: list
elements: str
volumes:
description:
- - List of Volumes IDs that should be attached to the server on server creation.
+ - List of Hetzner Cloud Volumes (name or ID) that should be attached to the server.
+ - Only used during the server creation.
type: list
elements: str
firewalls:
description:
- - List of Firewall IDs that should be attached to the server on server creation.
+ - List of Hetzner Cloud Firewalls (name or ID) that should be attached to the server.
type: list
elements: str
image:
description:
- - Image the server should be created from.
- - Required if server does not exist.
+ - Hetzner Cloud Image (name or ID) to create the server from.
+ - Required if server does not exist or when O(state=rebuild).
type: str
+ image_allow_deprecated:
+ description:
+ - Allows the creation of servers with deprecated images.
+ type: bool
+ default: false
+ aliases: [allow_deprecated_image]
location:
description:
- - Location of Server.
- - Required if no I(datacenter) is given and server does not exist.
+ - Hetzner Cloud Location (name or ID) to create the server in.
+ - Required if no O(datacenter) is given and server does not exist.
+ - Only used during the server creation.
type: str
datacenter:
description:
- - Datacenter of Server.
- - Required if no I(location) is given and server does not exist.
+ - Hetzner Cloud Datacenter (name or ID) to create the server in.
+ - Required if no O(location) is given and server does not exist.
+ - Only used during the server creation.
type: str
backups:
description:
@@ -79,50 +87,42 @@ options:
default: false
enable_ipv4:
description:
- - Enables the public ipv4 address
+ - Enables the public ipv4 address.
type: bool
default: true
enable_ipv6:
description:
- - Enables the public ipv6 address
+ - Enables the public ipv6 address.
type: bool
default: true
ipv4:
description:
- - ID of the ipv4 Primary IP to use. If omitted and enable_ipv4 is true, a new ipv4 Primary IP will automatically be created
+ - Hetzner Cloud Primary IPv4 (name or ID) to use.
+ - If omitted and O(enable_ipv4=true), a new ipv4 Primary IP will automatically be created.
type: str
ipv6:
description:
- - ID of the ipv6 Primary IP to use. If omitted and enable_ipv6 is true, a new ipv6 Primary IP will automatically be created.
+ - Hetzner Cloud Primary IPv6 (name or ID) to use.
+ - If omitted and O(enable_ipv6=true), a new ipv6 Primary IP will automatically be created.
type: str
private_networks:
description:
- - List of private networks the server is attached to (name or ID)
+ - List of Hetzner Cloud Networks (name or ID) the server should be attached to.
- If None, private networks are left as they are (e.g. if previously added by hcloud_server_network),
if it has any other value (including []), only those networks are attached to the server.
type: list
elements: str
- force_upgrade:
- description:
- - Deprecated
- - Force the upgrade of the server.
- - Power off the server if it is running on upgrade.
- type: bool
force:
description:
- Force the update of the server.
- - May power off the server if update.
- type: bool
- default: false
- allow_deprecated_image:
- description:
- - Allows the creation of servers with deprecated images.
+ - May power off the server if update is applied.
type: bool
default: false
+ aliases: [force_upgrade]
user_data:
description:
- User Data to be passed to the server on creation.
- - Only used if server does not exist.
+ - Only used during the server creation.
type: str
rescue_mode:
description:
@@ -135,16 +135,16 @@ options:
delete_protection:
description:
- Protect the Server for deletion.
- - Needs to be the same as I(rebuild_protection).
+ - Needs to be the same as O(rebuild_protection).
type: bool
rebuild_protection:
description:
- Protect the Server for rebuild.
- - Needs to be the same as I(delete_protection).
+ - Needs to be the same as O(delete_protection).
type: bool
placement_group:
description:
- - Placement Group of the server.
+ - Hetzner Cloud Placement Group (name or ID) to create the server in.
type: str
state:
description:
@@ -336,9 +336,9 @@ hcloud_server:
"""
from datetime import datetime, timedelta, timezone
+from typing import TYPE_CHECKING, Literal
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import HCloudException
@@ -348,8 +348,14 @@ from ..module_utils.vendor.hcloud.servers import (
Server,
ServerCreatePublicNetwork,
)
-from ..module_utils.vendor.hcloud.ssh_keys import SSHKey
-from ..module_utils.vendor.hcloud.volumes import Volume
+
+if TYPE_CHECKING:
+ from ..module_utils.vendor.hcloud.actions import BoundAction
+ from ..module_utils.vendor.hcloud.firewalls import BoundFirewall
+ from ..module_utils.vendor.hcloud.networks import BoundNetwork
+ from ..module_utils.vendor.hcloud.placement_groups import BoundPlacementGroup
+ from ..module_utils.vendor.hcloud.primary_ips import PrimaryIP
+ from ..module_utils.vendor.hcloud.server_types import ServerType
class AnsibleHCloudServer(AnsibleHCloud):
@@ -358,38 +364,31 @@ class AnsibleHCloudServer(AnsibleHCloud):
hcloud_server: BoundServer | None = None
def _prepare_result(self):
- image = None if self.hcloud_server.image is None else to_native(self.hcloud_server.image.name)
- placement_group = (
- None if self.hcloud_server.placement_group is None else to_native(self.hcloud_server.placement_group.name)
- )
- ipv4_address = (
- None if self.hcloud_server.public_net.ipv4 is None else to_native(self.hcloud_server.public_net.ipv4.ip)
- )
- ipv6 = None if self.hcloud_server.public_net.ipv6 is None else to_native(self.hcloud_server.public_net.ipv6.ip)
- backup_window = (
- None if self.hcloud_server.backup_window is None else to_native(self.hcloud_server.backup_window)
- )
return {
- "id": to_native(self.hcloud_server.id),
- "name": to_native(self.hcloud_server.name),
- "created": to_native(self.hcloud_server.created.isoformat()),
- "ipv4_address": ipv4_address,
- "ipv6": ipv6,
- "private_networks": [to_native(net.network.name) for net in self.hcloud_server.private_net],
+ "id": str(self.hcloud_server.id),
+ "name": self.hcloud_server.name,
+ "created": self.hcloud_server.created.isoformat(),
+ "ipv4_address": (
+ self.hcloud_server.public_net.ipv4.ip if self.hcloud_server.public_net.ipv4 is not None else None
+ ),
+ "ipv6": self.hcloud_server.public_net.ipv6.ip if self.hcloud_server.public_net.ipv6 is not None else None,
+ "private_networks": [net.network.name for net in self.hcloud_server.private_net],
"private_networks_info": [
- {"name": to_native(net.network.name), "ip": net.ip} for net in self.hcloud_server.private_net
+ {"name": net.network.name, "ip": net.ip} for net in self.hcloud_server.private_net
],
- "image": image,
- "server_type": to_native(self.hcloud_server.server_type.name),
- "datacenter": to_native(self.hcloud_server.datacenter.name),
- "location": to_native(self.hcloud_server.datacenter.location.name),
- "placement_group": placement_group,
+ "image": self.hcloud_server.image.name if self.hcloud_server.image is not None else None,
+ "server_type": self.hcloud_server.server_type.name,
+ "datacenter": self.hcloud_server.datacenter.name,
+ "location": self.hcloud_server.datacenter.location.name,
+ "placement_group": (
+ self.hcloud_server.placement_group.name if self.hcloud_server.placement_group is not None else None
+ ),
"rescue_enabled": self.hcloud_server.rescue_enabled,
- "backup_window": backup_window,
+ "backup_window": self.hcloud_server.backup_window,
"labels": self.hcloud_server.labels,
"delete_protection": self.hcloud_server.protection["delete"],
"rebuild_protection": self.hcloud_server.protection["rebuild"],
- "status": to_native(self.hcloud_server.status),
+ "status": self.hcloud_server.status,
}
def _get_server(self):
@@ -405,73 +404,76 @@ class AnsibleHCloudServer(AnsibleHCloud):
self.module.fail_on_missing_params(required_params=["name", "server_type", "image"])
server_type = self._get_server_type()
+ image = self._get_image(server_type)
params = {
"name": self.module.params.get("name"),
+ "labels": self.module.params.get("labels"),
"server_type": server_type,
+ "image": image,
"user_data": self.module.params.get("user_data"),
- "labels": self.module.params.get("labels"),
- "image": self._get_image(server_type),
- "placement_group": self._get_placement_group(),
"public_net": ServerCreatePublicNetwork(
enable_ipv4=self.module.params.get("enable_ipv4"),
enable_ipv6=self.module.params.get("enable_ipv6"),
),
}
+ if self.module.params.get("placement_group") is not None:
+ params["placement_group"] = self._client_get_by_name_or_id(
+ "placement_groups", self.module.params.get("placement_group")
+ )
+
if self.module.params.get("ipv4") is not None:
- primary_ip = self.client.primary_ips.get_by_name(self.module.params.get("ipv4"))
- if not primary_ip:
- primary_ip = self.client.primary_ips.get_by_id(self.module.params.get("ipv4"))
- params["public_net"].ipv4 = primary_ip
+ params["public_net"].ipv4 = self._client_get_by_name_or_id("primary_ips", self.module.params.get("ipv4"))
if self.module.params.get("ipv6") is not None:
- primary_ip = self.client.primary_ips.get_by_name(self.module.params.get("ipv6"))
- if not primary_ip:
- primary_ip = self.client.primary_ips.get_by_id(self.module.params.get("ipv6"))
- params["public_net"].ipv6 = primary_ip
+ params["public_net"].ipv6 = self._client_get_by_name_or_id("primary_ips", self.module.params.get("ipv6"))
if self.module.params.get("private_networks") is not None:
- _networks = []
- for network_name_or_id in self.module.params.get("private_networks"):
- _networks.append(
- self.client.networks.get_by_name(network_name_or_id)
- or self.client.networks.get_by_id(network_name_or_id)
- )
- params["networks"] = _networks
+ params["networks"] = [
+ self._client_get_by_name_or_id("networks", name_or_id)
+ for name_or_id in self.module.params.get("private_networks")
+ ]
if self.module.params.get("ssh_keys") is not None:
- params["ssh_keys"] = [SSHKey(name=ssh_key_name) for ssh_key_name in self.module.params.get("ssh_keys")]
+ params["ssh_keys"] = [
+ self._client_get_by_name_or_id("ssh_keys", name_or_id)
+ for name_or_id in self.module.params.get("ssh_keys")
+ ]
if self.module.params.get("volumes") is not None:
- params["volumes"] = [Volume(id=volume_id) for volume_id in self.module.params.get("volumes")]
+ params["volumes"] = [
+ self._client_get_by_name_or_id("volumes", name_or_id)
+ for name_or_id in self.module.params.get("volumes")
+ ]
+
if self.module.params.get("firewalls") is not None:
- params["firewalls"] = []
- for firewall_param in self.module.params.get("firewalls"):
- firewall = self.client.firewalls.get_by_name(firewall_param)
- if firewall is not None:
- # When firewall name is not available look for id instead
- params["firewalls"].append(firewall)
- else:
- params["firewalls"].append(self.client.firewalls.get_by_id(firewall_param))
+ params["firewalls"] = [
+ self._client_get_by_name_or_id("firewalls", name_or_id)
+ for name_or_id in self.module.params.get("firewalls")
+ ]
if self.module.params.get("location") is None and self.module.params.get("datacenter") is None:
# When not given, the API will choose the location.
params["location"] = None
params["datacenter"] = None
elif self.module.params.get("location") is not None and self.module.params.get("datacenter") is None:
- params["location"] = self.client.locations.get_by_name(self.module.params.get("location"))
+ params["location"] = self._client_get_by_name_or_id("locations", self.module.params.get("location"))
elif self.module.params.get("location") is None and self.module.params.get("datacenter") is not None:
- params["datacenter"] = self.client.datacenters.get_by_name(self.module.params.get("datacenter"))
+ params["datacenter"] = self._client_get_by_name_or_id("datacenters", self.module.params.get("datacenter"))
if self.module.params.get("state") == "stopped":
params["start_after_create"] = False
+
if not self.module.check_mode:
try:
resp = self.client.servers.create(**params)
self.result["root_password"] = resp.root_password
- resp.action.wait_until_finished(max_retries=1000)
- [action.wait_until_finished() for action in resp.next_actions]
+ # Action should take 60 to 90 seconds on average, but can be >10m when creating a
+ # server from a custom images
+ resp.action.wait_until_finished(max_retries=1800)
+ for action in resp.next_actions:
+ action.wait_until_finished()
rescue_mode = self.module.params.get("rescue_mode")
if rescue_mode:
@@ -481,40 +483,35 @@ class AnsibleHCloudServer(AnsibleHCloud):
backups = self.module.params.get("backups")
if backups:
self._get_server()
- self.hcloud_server.enable_backup().wait_until_finished()
+ action = self.hcloud_server.enable_backup()
+ action.wait_until_finished()
delete_protection = self.module.params.get("delete_protection")
rebuild_protection = self.module.params.get("rebuild_protection")
if delete_protection is not None and rebuild_protection is not None:
self._get_server()
- self.hcloud_server.change_protection(
+ action = self.hcloud_server.change_protection(
delete=delete_protection,
rebuild=rebuild_protection,
- ).wait_until_finished()
+ )
+ action.wait_until_finished()
except HCloudException as exception:
self.fail_json_hcloud(exception)
self._mark_as_changed()
self._get_server()
- def _get_image(self, server_type):
- image_resp = self.client.images.get_list(
+ def _get_image(self, server_type: ServerType):
+ image = self.client.images.get_by_name_and_architecture(
name=self.module.params.get("image"),
architecture=server_type.architecture,
include_deprecated=True,
)
- images = getattr(image_resp, "images")
- image = None
- if images is not None and len(images) > 0:
- # If image name is not available look for id instead
- image = images[0]
- else:
- try:
- image = self.client.images.get_by_id(self.module.params.get("image"))
- except HCloudException as exception:
- self.fail_json_hcloud(exception, msg=f"Image {self.module.params.get('image')} was not found")
+ if image is None:
+ image = self.client.images.get_by_id(self.module.params.get("image"))
+
if image.deprecated is not None:
available_until = image.deprecated + timedelta(days=90)
- if self.module.params.get("allow_deprecated_image"):
+ if self.module.params.get("image_allow_deprecated"):
self.module.warn(
f"You try to use a deprecated image. The image {image.name} will "
f"continue to be available until {available_until.strftime('%Y-%m-%d')}."
@@ -524,27 +521,18 @@ class AnsibleHCloudServer(AnsibleHCloud):
msg=(
f"You try to use a deprecated image. The image {image.name} will "
f"continue to be available until {available_until.strftime('%Y-%m-%d')}. "
- "If you want to use this image use allow_deprecated_image=true."
+ "If you want to use this image use image_allow_deprecated=true."
)
)
return image
- def _get_server_type(self):
- server_type = self.client.server_types.get_by_name(self.module.params.get("server_type"))
- if server_type is None:
- try:
- server_type = self.client.server_types.get_by_id(self.module.params.get("server_type"))
- except HCloudException as exception:
- self.fail_json_hcloud(
- exception,
- msg=f"server_type {self.module.params.get('server_type')} was not found",
- )
+ def _get_server_type(self) -> ServerType:
+ server_type = self._client_get_by_name_or_id("server_types", self.module.params.get("server_type"))
self._check_and_warn_deprecated_server(server_type)
-
return server_type
- def _check_and_warn_deprecated_server(self, server_type):
+ def _check_and_warn_deprecated_server(self, server_type: ServerType) -> None:
if server_type.deprecation is None:
return
@@ -567,42 +555,16 @@ class AnsibleHCloudServer(AnsibleHCloud):
"the server_type parameter on the hetzner.hcloud.server module."
)
- def _get_placement_group(self):
- if self.module.params.get("placement_group") is None:
- return None
-
- placement_group = self.client.placement_groups.get_by_name(self.module.params.get("placement_group"))
- if placement_group is None:
- try:
- placement_group = self.client.placement_groups.get_by_id(self.module.params.get("placement_group"))
- except HCloudException as exception:
- self.fail_json_hcloud(
- exception,
- msg=f"placement_group {self.module.params.get('placement_group')} was not found",
- )
-
- return placement_group
-
- def _get_primary_ip(self, field):
- if self.module.params.get(field) is None:
- return None
-
- primary_ip = self.client.primary_ips.get_by_name(self.module.params.get(field))
- if primary_ip is None:
- try:
- primary_ip = self.client.primary_ips.get_by_id(self.module.params.get(field))
- except HCloudException as exception:
- self.fail_json_hcloud(exception, msg=f"primary_ip {self.module.params.get(field)} was not found")
-
- return primary_ip
-
- def _update_server(self):
- if "force_upgrade" in self.module.params and self.module.params.get("force_upgrade") is not None:
- self.module.warn("force_upgrade is deprecated, use force instead")
-
+ def _update_server(self) -> None:
try:
previous_server_status = self.hcloud_server.status
+ labels = self.module.params.get("labels")
+ if labels is not None and labels != self.hcloud_server.labels:
+ if not self.module.check_mode:
+ self.hcloud_server.update(labels=labels)
+ self._mark_as_changed()
+
rescue_mode = self.module.params.get("rescue_mode")
if rescue_mode and self.hcloud_server.rescue_enabled is False:
if not self.module.check_mode:
@@ -610,167 +572,39 @@ class AnsibleHCloudServer(AnsibleHCloud):
self._mark_as_changed()
elif not rescue_mode and self.hcloud_server.rescue_enabled is True:
if not self.module.check_mode:
- self.hcloud_server.disable_rescue().wait_until_finished()
+ action = self.hcloud_server.disable_rescue()
+ action.wait_until_finished()
self._mark_as_changed()
backups = self.module.params.get("backups")
if backups and self.hcloud_server.backup_window is None:
if not self.module.check_mode:
- self.hcloud_server.enable_backup().wait_until_finished()
+ action = self.hcloud_server.enable_backup()
+ action.wait_until_finished()
self._mark_as_changed()
elif backups is not None and not backups and self.hcloud_server.backup_window is not None:
if not self.module.check_mode:
- self.hcloud_server.disable_backup().wait_until_finished()
+ action = self.hcloud_server.disable_backup()
+ action.wait_until_finished()
self._mark_as_changed()
- labels = self.module.params.get("labels")
- if labels is not None and labels != self.hcloud_server.labels:
- if not self.module.check_mode:
- self.hcloud_server.update(labels=labels)
- self._mark_as_changed()
+ if self.module.params.get("firewalls") is not None:
+ self._update_server_firewalls()
- wanted_firewalls = self.module.params.get("firewalls")
- if wanted_firewalls is not None:
- # Removing existing but not wanted firewalls
- for current_firewall in self.hcloud_server.public_net.firewalls:
- if current_firewall.firewall.name not in wanted_firewalls:
- self._mark_as_changed()
- if self.module.check_mode:
- continue
-
- firewall_resource = FirewallResource(type="server", server=self.hcloud_server)
- actions = self.client.firewalls.remove_from_resources(
- current_firewall.firewall,
- [firewall_resource],
- )
- for action in actions:
- action.wait_until_finished()
-
- # Adding wanted firewalls that doesn't exist yet
- for firewall_name in wanted_firewalls:
- found = False
- for firewall in self.hcloud_server.public_net.firewalls:
- if firewall.firewall.name == firewall_name:
- found = True
- break
-
- if not found:
- self._mark_as_changed()
- if not self.module.check_mode:
- firewall = self.client.firewalls.get_by_name(firewall_name)
- if firewall is None:
- self.module.fail_json(msg=f"firewall {firewall_name} was not found")
- firewall_resource = FirewallResource(type="server", server=self.hcloud_server)
- actions = self.client.firewalls.apply_to_resources(firewall, [firewall_resource])
- for action in actions:
- action.wait_until_finished()
-
- if "placement_group" in self.module.params:
- if self.module.params["placement_group"] is None and self.hcloud_server.placement_group is not None:
- if not self.module.check_mode:
- self.hcloud_server.remove_from_placement_group().wait_until_finished()
- self._mark_as_changed()
- else:
- placement_group = self._get_placement_group()
- if placement_group is not None and (
- self.hcloud_server.placement_group is None
- or self.hcloud_server.placement_group.id != placement_group.id
- ):
- self.stop_server_if_forced()
- if not self.module.check_mode:
- self.hcloud_server.add_to_placement_group(placement_group).wait_until_finished()
- self._mark_as_changed()
-
- if "ipv4" in self.module.params:
- if (
- self.module.params["ipv4"] is None
- and self.hcloud_server.public_net.primary_ipv4 is not None
- and not self.module.params.get("enable_ipv4")
- ):
- self.stop_server_if_forced()
- if not self.module.check_mode:
- self.hcloud_server.public_net.primary_ipv4.unassign().wait_until_finished()
- self._mark_as_changed()
- else:
- primary_ip = self._get_primary_ip("ipv4")
- if primary_ip is not None and (
- self.hcloud_server.public_net.primary_ipv4 is None
- or self.hcloud_server.public_net.primary_ipv4.id != primary_ip.id
- ):
- self.stop_server_if_forced()
- if not self.module.check_mode:
- if self.hcloud_server.public_net.primary_ipv4:
- self.hcloud_server.public_net.primary_ipv4.unassign().wait_until_finished()
- primary_ip.assign(self.hcloud_server.id, "server").wait_until_finished()
- self._mark_as_changed()
- if "ipv6" in self.module.params:
- if (
- (self.module.params["ipv6"] is None or self.module.params["ipv6"] == "")
- and self.hcloud_server.public_net.primary_ipv6 is not None
- and not self.module.params.get("enable_ipv6")
- ):
- self.stop_server_if_forced()
- if not self.module.check_mode:
- self.hcloud_server.public_net.primary_ipv6.unassign().wait_until_finished()
- self._mark_as_changed()
- else:
- primary_ip = self._get_primary_ip("ipv6")
- if primary_ip is not None and (
- self.hcloud_server.public_net.primary_ipv6 is None
- or self.hcloud_server.public_net.primary_ipv6.id != primary_ip.id
- ):
- self.stop_server_if_forced()
- if not self.module.check_mode:
- if self.hcloud_server.public_net.primary_ipv6 is not None:
- self.hcloud_server.public_net.primary_ipv6.unassign().wait_until_finished()
- primary_ip.assign(self.hcloud_server.id, "server").wait_until_finished()
- self._mark_as_changed()
- if "private_networks" in self.module.params and self.module.params["private_networks"] is not None:
- if not bool(self.module.params["private_networks"]):
- # This handles None, "" and []
- networks_target = {}
- else:
- _networks = {}
- for network_name_or_id in self.module.params.get("private_networks"):
- _found_network = self.client.networks.get_by_name(
- network_name_or_id
- ) or self.client.networks.get_by_id(network_name_or_id)
- _networks.update({_found_network.id: _found_network})
- networks_target = _networks
- networks_is = dict()
- for p_network in self.hcloud_server.private_net:
- networks_is.update({p_network.network.id: p_network.network})
- for network_id in set(list(networks_is) + list(networks_target)):
- if network_id in networks_is and network_id not in networks_target:
- self.stop_server_if_forced()
- if not self.module.check_mode:
- self.hcloud_server.detach_from_network(networks_is[network_id]).wait_until_finished()
- self._mark_as_changed()
- elif network_id in networks_target and network_id not in networks_is:
- self.stop_server_if_forced()
- if not self.module.check_mode:
- self.hcloud_server.attach_to_network(networks_target[network_id]).wait_until_finished()
- self._mark_as_changed()
-
- server_type = self.module.params.get("server_type")
- if server_type is not None:
- if self.hcloud_server.server_type.name == server_type:
- # Check if we should warn for using an deprecated server type
- self._check_and_warn_deprecated_server(self.hcloud_server.server_type)
-
- else:
- # Server type should be changed
- self.stop_server_if_forced()
-
- timeout = 100
- if self.module.params.get("upgrade_disk"):
- timeout = 1000 # When we upgrade the disk to the resize progress takes some more time.
- if not self.module.check_mode:
- self.hcloud_server.change_type(
- server_type=self._get_server_type(),
- upgrade_disk=self.module.params.get("upgrade_disk"),
- ).wait_until_finished(timeout)
- self._mark_as_changed()
+ if self.module.params.get("placement_group") is not None:
+ self._update_server_placement_group()
+
+ if self.module.params.get("ipv4") is not None:
+ self._update_server_ip("ipv4")
+
+ if self.module.params.get("ipv6") is not None:
+ self._update_server_ip("ipv6")
+
+ if self.module.params.get("private_networks") is not None:
+ self._update_server_networks()
+
+ if self.module.params.get("server_type") is not None:
+ self._update_server_server_type()
if not self.module.check_mode and (
(self.module.params.get("state") == "present" and previous_server_status == Server.STATUS_RUNNING)
@@ -785,15 +619,197 @@ class AnsibleHCloudServer(AnsibleHCloud):
or rebuild_protection != self.hcloud_server.protection["rebuild"]
):
if not self.module.check_mode:
- self.hcloud_server.change_protection(
+ action = self.hcloud_server.change_protection(
delete=delete_protection,
rebuild=rebuild_protection,
- ).wait_until_finished()
+ )
+ action.wait_until_finished()
self._mark_as_changed()
self._get_server()
except HCloudException as exception:
self.fail_json_hcloud(exception)
+ def _update_server_placement_group(self) -> None:
+ current: BoundPlacementGroup | None = self.hcloud_server.placement_group
+ wanted = self.module.params.get("placement_group")
+
+ # Return if nothing changed
+ if current is not None and current.has_id_or_name(wanted):
+ return
+
+ # Fetch resource if parameter is truthy
+ if wanted:
+ placement_group = self._client_get_by_name_or_id("placement_groups", wanted)
+
+ # Remove if current is defined
+ if current is not None:
+ if not self.module.check_mode:
+ action = self.hcloud_server.remove_from_placement_group()
+ action.wait_until_finished()
+ self._mark_as_changed()
+
+ # Return if parameter is falsy
+ if not wanted:
+ return
+
+ # Assign new
+ self.stop_server_if_forced()
+ if not self.module.check_mode:
+ action = self.hcloud_server.add_to_placement_group(placement_group)
+ action.wait_until_finished()
+ self._mark_as_changed()
+
+ def _update_server_server_type(self) -> None:
+ current: ServerType = self.hcloud_server.server_type
+ wanted = self.module.params.get("server_type")
+
+ # Return if nothing changed
+ if current.has_id_or_name(wanted):
+ # Check if we should warn for using an deprecated server type
+ self._check_and_warn_deprecated_server(self.hcloud_server.server_type)
+ return
+
+ self.stop_server_if_forced()
+
+ upgrade_disk = self.module.params.get("upgrade_disk")
+ # Upgrading a server takes 160 seconds on average, upgrading the disk should
+ # take more time
+ upgrade_timeout = 600 if upgrade_disk else 180
+
+ if not self.module.check_mode:
+ action = self.hcloud_server.change_type(
+ server_type=self._get_server_type(),
+ upgrade_disk=upgrade_disk,
+ )
+ action.wait_until_finished(max_retries=upgrade_timeout)
+ self._mark_as_changed()
+
+ def _update_server_ip(self, kind: Literal["ipv4", "ipv6"]) -> None:
+ current: PrimaryIP | None = getattr(self.hcloud_server.public_net, f"primary_{kind}")
+ wanted = self.module.params.get(kind)
+ enable = self.module.params.get(f"enable_{kind}")
+
+ # Return if nothing changed
+ if current is not None and current.has_id_or_name(wanted) and enable:
+ return
+
+ # Fetch resource if parameter is truthy
+ if wanted:
+ primary_ip = self._client_get_by_name_or_id("primary_ips", wanted)
+
+ # Remove if current is defined
+ if current is not None:
+ self.stop_server_if_forced()
+ if not self.module.check_mode:
+ action = self.client.primary_ips.unassign(current)
+ action.wait_until_finished()
+ self._mark_as_changed()
+
+ # Return if parameter is falsy or resource is disabled
+ if not wanted or not enable:
+ return
+
+ # Assign new
+ self.stop_server_if_forced()
+ if not self.module.check_mode:
+ action = self.client.primary_ips.assign(
+ primary_ip,
+ assignee_id=self.hcloud_server.id,
+ assignee_type="server",
+ )
+ action.wait_until_finished()
+ self._mark_as_changed()
+
+ def _update_server_networks(self) -> None:
+ current: list[BoundNetwork] = [item.network for item in self.hcloud_server.private_net]
+ wanted: list[BoundNetwork] = [
+ self._client_get_by_name_or_id("networks", name_or_id)
+ for name_or_id in self.module.params.get("private_networks")
+ ]
+
+ current_ids = {item.id for item in current}
+ wanted_ids = {item.id for item in wanted}
+
+ # Removing existing but not wanted networks
+ actions: list[BoundAction] = []
+ for current_network in current:
+ if current_network.id in wanted_ids:
+ continue
+
+ self._mark_as_changed()
+ if self.module.check_mode:
+ continue
+
+ actions.append(self.hcloud_server.detach_from_network(current_network))
+
+ for action in actions:
+ action.wait_until_finished()
+
+ # Adding wanted networks that doesn't exist yet
+ actions: list[BoundAction] = []
+ for wanted_network in wanted:
+ if wanted_network.id in current_ids:
+ continue
+
+ self._mark_as_changed()
+ if self.module.check_mode:
+ continue
+
+ actions.append(self.hcloud_server.attach_to_network(wanted_network))
+
+ for action in actions:
+ action.wait_until_finished()
+
+ def _update_server_firewalls(self) -> None:
+ current: list[BoundFirewall] = [item.firewall for item in self.hcloud_server.public_net.firewalls]
+ wanted: list[BoundFirewall] = [
+ self._client_get_by_name_or_id("firewalls", name_or_id)
+ for name_or_id in self.module.params.get("firewalls")
+ ]
+
+ current_ids = {item.id for item in current}
+ wanted_ids = {item.id for item in wanted}
+
+ # Removing existing but not wanted firewalls
+ actions: list[BoundAction] = []
+ for current_firewall in current:
+ if current_firewall.id in wanted_ids:
+ continue
+
+ self._mark_as_changed()
+ if self.module.check_mode:
+ continue
+
+ actions.extend(
+ self.client.firewalls.remove_from_resources(
+ current_firewall,
+ [FirewallResource(type="server", server=self.hcloud_server)],
+ )
+ )
+
+ for action in actions:
+ action.wait_until_finished()
+
+ # Adding wanted firewalls that doesn't exist yet
+ actions: list[BoundAction] = []
+ for wanted_firewall in wanted:
+ if wanted_firewall.id in current_ids:
+ continue
+
+ self._mark_as_changed()
+ if self.module.check_mode:
+ continue
+
+ actions.extend(
+ self.client.firewalls.apply_to_resources(
+ wanted_firewall,
+ [FirewallResource(type="server", server=self.hcloud_server)],
+ )
+ )
+
+ for action in actions:
+ action.wait_until_finished()
+
def _set_rescue_mode(self, rescue_mode):
if self.module.params.get("ssh_keys"):
resp = self.hcloud_server.enable_rescue(
@@ -813,7 +829,8 @@ class AnsibleHCloudServer(AnsibleHCloud):
if self.hcloud_server:
if self.hcloud_server.status != Server.STATUS_RUNNING:
if not self.module.check_mode:
- self.client.servers.power_on(self.hcloud_server).wait_until_finished()
+ action = self.client.servers.power_on(self.hcloud_server)
+ action.wait_until_finished()
self._mark_as_changed()
self._get_server()
except HCloudException as exception:
@@ -824,7 +841,8 @@ class AnsibleHCloudServer(AnsibleHCloud):
if self.hcloud_server:
if self.hcloud_server.status != Server.STATUS_OFF:
if not self.module.check_mode:
- self.client.servers.power_off(self.hcloud_server).wait_until_finished()
+ action = self.client.servers.power_off(self.hcloud_server)
+ action.wait_until_finished()
self._mark_as_changed()
self._get_server()
except HCloudException as exception:
@@ -833,18 +851,14 @@ class AnsibleHCloudServer(AnsibleHCloud):
def stop_server_if_forced(self):
previous_server_status = self.hcloud_server.status
if previous_server_status == Server.STATUS_RUNNING and not self.module.check_mode:
- if (
- self.module.params.get("force_upgrade")
- or self.module.params.get("force")
- or self.module.params.get("state") == "stopped"
- ):
+ if self.module.params.get("force") or self.module.params.get("state") == "stopped":
self.stop_server() # Only stopped server can be upgraded
return previous_server_status
- else:
- self.module.warn(
- f"You can not upgrade a running instance {self.hcloud_server.name}. "
- "You need to stop the instance or use force=true."
- )
+
+ self.module.warn(
+ f"You can not upgrade a running instance {self.hcloud_server.name}. "
+ "You need to stop the instance or use force=true."
+ )
return None
@@ -874,7 +888,8 @@ class AnsibleHCloudServer(AnsibleHCloud):
self._get_server()
if self.hcloud_server is not None:
if not self.module.check_mode:
- self.client.servers.delete(self.hcloud_server).wait_until_finished()
+ action = self.client.servers.delete(self.hcloud_server)
+ action.wait_until_finished()
self._mark_as_changed()
self.hcloud_server = None
except HCloudException as exception:
@@ -887,6 +902,7 @@ class AnsibleHCloudServer(AnsibleHCloud):
id={"type": "int"},
name={"type": "str"},
image={"type": "str"},
+ image_allow_deprecated={"type": "bool", "default": False, "aliases": ["allow_deprecated_image"]},
server_type={"type": "str"},
location={"type": "str"},
datacenter={"type": "str"},
@@ -902,9 +918,14 @@ class AnsibleHCloudServer(AnsibleHCloud):
ipv4={"type": "str"},
ipv6={"type": "str"},
private_networks={"type": "list", "elements": "str", "default": None},
- force={"type": "bool", "default": False},
- force_upgrade={"type": "bool"},
- allow_deprecated_image={"type": "bool", "default": False},
+ force={
+ "type": "bool",
+ "default": False,
+ "aliases": ["force_upgrade"],
+ "deprecated_aliases": [
+ {"collection_name": "hetzner.hcloud", "name": "force_upgrade", "version": "4.0.0"}
+ ],
+ },
rescue_mode={"type": "str"},
delete_protection={"type": "bool"},
rebuild_protection={"type": "bool"},
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/server_info.py b/ansible_collections/hetzner/hcloud/plugins/modules/server_info.py
index cee1634cb..3417e58af 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/server_info.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/server_info.py
@@ -146,7 +146,6 @@ hcloud_server_info:
"""
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import HCloudException
@@ -162,36 +161,31 @@ class AnsibleHCloudServerInfo(AnsibleHCloud):
tmp = []
for server in self.hcloud_server_info:
- if server is not None:
- image = None if server.image is None else to_native(server.image.name)
- placement_group = None if server.placement_group is None else to_native(server.placement_group.name)
- ipv4_address = None if server.public_net.ipv4 is None else to_native(server.public_net.ipv4.ip)
- ipv6 = None if server.public_net.ipv6 is None else to_native(server.public_net.ipv6.ip)
- backup_window = None if server.backup_window is None else to_native(server.backup_window)
- tmp.append(
- {
- "id": to_native(server.id),
- "name": to_native(server.name),
- "created": to_native(server.created.isoformat()),
- "ipv4_address": ipv4_address,
- "ipv6": ipv6,
- "private_networks": [to_native(net.network.name) for net in server.private_net],
- "private_networks_info": [
- {"name": to_native(net.network.name), "ip": net.ip} for net in server.private_net
- ],
- "image": image,
- "server_type": to_native(server.server_type.name),
- "datacenter": to_native(server.datacenter.name),
- "location": to_native(server.datacenter.location.name),
- "placement_group": placement_group,
- "rescue_enabled": server.rescue_enabled,
- "backup_window": backup_window,
- "labels": server.labels,
- "status": to_native(server.status),
- "delete_protection": server.protection["delete"],
- "rebuild_protection": server.protection["rebuild"],
- }
- )
+ if server is None:
+ continue
+
+ tmp.append(
+ {
+ "id": str(server.id),
+ "name": server.name,
+ "created": server.created.isoformat(),
+ "ipv4_address": server.public_net.ipv4.ip if server.public_net.ipv4 is not None else None,
+ "ipv6": server.public_net.ipv6.ip if server.public_net.ipv6 is not None else None,
+ "private_networks": [net.network.name for net in server.private_net],
+ "private_networks_info": [{"name": net.network.name, "ip": net.ip} for net in server.private_net],
+ "image": server.image.name if server.image is not None else None,
+ "server_type": server.server_type.name,
+ "datacenter": server.datacenter.name,
+ "location": server.datacenter.location.name,
+ "placement_group": server.placement_group.name if server.placement_group is not None else None,
+ "rescue_enabled": server.rescue_enabled,
+ "backup_window": server.backup_window,
+ "labels": server.labels,
+ "status": server.status,
+ "delete_protection": server.protection["delete"],
+ "rebuild_protection": server.protection["rebuild"],
+ }
+ )
return tmp
def get_servers(self):
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/server_network.py b/ansible_collections/hetzner/hcloud/plugins/modules/server_network.py
index ca80a8a76..bc6dec428 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/server_network.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/server_network.py
@@ -111,7 +111,6 @@ hcloud_server_network:
"""
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import APIException, HCloudException
@@ -128,10 +127,10 @@ class AnsibleHCloudServerNetwork(AnsibleHCloud):
def _prepare_result(self):
return {
- "network": to_native(self.hcloud_network.name),
- "server": to_native(self.hcloud_server.name),
- "ip": to_native(self.hcloud_server_network.ip),
- "alias_ips": self.hcloud_server_network.alias_ips,
+ "network": self.hcloud_network.name,
+ "server": self.hcloud_server.name,
+ "ip": self.hcloud_server_network.ip,
+ "alias_ips": list(sorted(self.hcloud_server_network.alias_ips)),
}
def _get_server_and_network(self):
@@ -165,7 +164,8 @@ class AnsibleHCloudServerNetwork(AnsibleHCloud):
if not self.module.check_mode:
try:
- self.hcloud_server.attach_to_network(**params).wait_until_finished()
+ action = self.hcloud_server.attach_to_network(**params)
+ action.wait_until_finished()
except HCloudException as exception:
self.fail_json_hcloud(exception)
@@ -183,7 +183,8 @@ class AnsibleHCloudServerNetwork(AnsibleHCloud):
if not self.module.check_mode:
try:
- self.hcloud_server.change_alias_ips(**params).wait_until_finished()
+ action = self.hcloud_server.change_alias_ips(**params)
+ action.wait_until_finished()
except APIException as exception:
self.fail_json_hcloud(exception)
@@ -205,7 +206,8 @@ class AnsibleHCloudServerNetwork(AnsibleHCloud):
if self.hcloud_server_network is not None and self.hcloud_server is not None:
if not self.module.check_mode:
try:
- self.hcloud_server.detach_from_network(self.hcloud_server_network.network).wait_until_finished()
+ action = self.hcloud_server.detach_from_network(self.hcloud_server_network.network)
+ action.wait_until_finished()
except HCloudException as exception:
self.fail_json_hcloud(exception)
self._mark_as_changed()
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/server_type_info.py b/ansible_collections/hetzner/hcloud/plugins/modules/server_type_info.py
index 61f1f5011..4f16b52fe 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/server_type_info.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/server_type_info.py
@@ -124,7 +124,6 @@ hcloud_server_type_info:
"""
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import HCloudException
@@ -140,29 +139,31 @@ class AnsibleHCloudServerTypeInfo(AnsibleHCloud):
tmp = []
for server_type in self.hcloud_server_type_info:
- if server_type is not None:
- tmp.append(
- {
- "id": to_native(server_type.id),
- "name": to_native(server_type.name),
- "description": to_native(server_type.description),
- "cores": server_type.cores,
- "memory": server_type.memory,
- "disk": server_type.disk,
- "storage_type": to_native(server_type.storage_type),
- "cpu_type": to_native(server_type.cpu_type),
- "architecture": to_native(server_type.architecture),
- "included_traffic": server_type.included_traffic,
- "deprecation": (
- {
- "announced": server_type.deprecation.announced.isoformat(),
- "unavailable_after": server_type.deprecation.unavailable_after.isoformat(),
- }
- if server_type.deprecation is not None
- else None
- ),
- }
- )
+ if server_type is None:
+ continue
+
+ tmp.append(
+ {
+ "id": str(server_type.id),
+ "name": server_type.name,
+ "description": server_type.description,
+ "cores": server_type.cores,
+ "memory": server_type.memory,
+ "disk": server_type.disk,
+ "storage_type": server_type.storage_type,
+ "cpu_type": server_type.cpu_type,
+ "architecture": server_type.architecture,
+ "included_traffic": server_type.included_traffic,
+ "deprecation": (
+ {
+ "announced": server_type.deprecation.announced.isoformat(),
+ "unavailable_after": server_type.deprecation.unavailable_after.isoformat(),
+ }
+ if server_type.deprecation is not None
+ else None
+ ),
+ }
+ )
return tmp
def get_server_types(self):
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/ssh_key.py b/ansible_collections/hetzner/hcloud/plugins/modules/ssh_key.py
index 349c52c68..e33987c44 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/ssh_key.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/ssh_key.py
@@ -113,7 +113,6 @@ hcloud_ssh_key:
"""
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import HCloudException
@@ -127,10 +126,10 @@ class AnsibleHCloudSSHKey(AnsibleHCloud):
def _prepare_result(self):
return {
- "id": to_native(self.hcloud_ssh_key.id),
- "name": to_native(self.hcloud_ssh_key.name),
- "fingerprint": to_native(self.hcloud_ssh_key.fingerprint),
- "public_key": to_native(self.hcloud_ssh_key.public_key),
+ "id": str(self.hcloud_ssh_key.id),
+ "name": self.hcloud_ssh_key.name,
+ "fingerprint": self.hcloud_ssh_key.fingerprint,
+ "public_key": self.hcloud_ssh_key.public_key,
"labels": self.hcloud_ssh_key.labels,
}
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/ssh_key_info.py b/ansible_collections/hetzner/hcloud/plugins/modules/ssh_key_info.py
index 7a4ab5928..b6b22ff35 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/ssh_key_info.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/ssh_key_info.py
@@ -79,7 +79,6 @@ hcloud_ssh_key_info:
"""
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import HCloudException
@@ -92,20 +91,22 @@ class AnsibleHCloudSSHKeyInfo(AnsibleHCloud):
hcloud_ssh_key_info: list[BoundSSHKey] | None = None
def _prepare_result(self):
- ssh_keys = []
+ tmp = []
for ssh_key in self.hcloud_ssh_key_info:
- if ssh_key:
- ssh_keys.append(
- {
- "id": to_native(ssh_key.id),
- "name": to_native(ssh_key.name),
- "fingerprint": to_native(ssh_key.fingerprint),
- "public_key": to_native(ssh_key.public_key),
- "labels": ssh_key.labels,
- }
- )
- return ssh_keys
+ if ssh_key is None:
+ continue
+
+ tmp.append(
+ {
+ "id": str(ssh_key.id),
+ "name": ssh_key.name,
+ "fingerprint": ssh_key.fingerprint,
+ "public_key": ssh_key.public_key,
+ "labels": ssh_key.labels,
+ }
+ )
+ return tmp
def get_ssh_keys(self):
try:
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/subnetwork.py b/ansible_collections/hetzner/hcloud/plugins/modules/subnetwork.py
index aea40bb13..6f7feeaad 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/subnetwork.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/subnetwork.py
@@ -123,7 +123,6 @@ hcloud_subnetwork:
"""
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import HCloudException
@@ -138,10 +137,10 @@ class AnsibleHCloudSubnetwork(AnsibleHCloud):
def _prepare_result(self):
return {
- "network": to_native(self.hcloud_network.name),
- "ip_range": to_native(self.hcloud_subnetwork.ip_range),
- "type": to_native(self.hcloud_subnetwork.type),
- "network_zone": to_native(self.hcloud_subnetwork.network_zone),
+ "network": self.hcloud_network.name,
+ "ip_range": self.hcloud_subnetwork.ip_range,
+ "type": self.hcloud_subnetwork.type,
+ "network_zone": self.hcloud_subnetwork.network_zone,
"gateway": self.hcloud_subnetwork.gateway,
"vswitch_id": self.hcloud_subnetwork.vswitch_id,
}
@@ -174,7 +173,8 @@ class AnsibleHCloudSubnetwork(AnsibleHCloud):
if not self.module.check_mode:
try:
- self.hcloud_network.add_subnet(subnet=NetworkSubnet(**params)).wait_until_finished()
+ action = self.hcloud_network.add_subnet(subnet=NetworkSubnet(**params))
+ action.wait_until_finished()
except HCloudException as exception:
self.fail_json_hcloud(exception)
@@ -194,7 +194,8 @@ class AnsibleHCloudSubnetwork(AnsibleHCloud):
if self.hcloud_subnetwork is not None and self.hcloud_network is not None:
if not self.module.check_mode:
try:
- self.hcloud_network.delete_subnet(self.hcloud_subnetwork).wait_until_finished()
+ action = self.hcloud_network.delete_subnet(self.hcloud_subnetwork)
+ action.wait_until_finished()
except HCloudException as exception:
self.fail_json_hcloud(exception)
self._mark_as_changed()
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/volume.py b/ansible_collections/hetzner/hcloud/plugins/modules/volume.py
index 8442ed90b..1bcb44253 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/volume.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/volume.py
@@ -160,7 +160,6 @@ hcloud_volume:
"""
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import HCloudException
@@ -173,18 +172,14 @@ class AnsibleHCloudVolume(AnsibleHCloud):
hcloud_volume: BoundVolume | None = None
def _prepare_result(self):
- server_name = None
- if self.hcloud_volume.server is not None:
- server_name = to_native(self.hcloud_volume.server.name)
-
return {
- "id": to_native(self.hcloud_volume.id),
- "name": to_native(self.hcloud_volume.name),
+ "id": str(self.hcloud_volume.id),
+ "name": self.hcloud_volume.name,
"size": self.hcloud_volume.size,
- "location": to_native(self.hcloud_volume.location.name),
+ "location": self.hcloud_volume.location.name,
"labels": self.hcloud_volume.labels,
- "server": server_name,
- "linux_device": to_native(self.hcloud_volume.linux_device),
+ "server": self.hcloud_volume.server.name if self.hcloud_volume.server is not None else None,
+ "linux_device": self.hcloud_volume.linux_device,
"delete_protection": self.hcloud_volume.protection["delete"],
}
@@ -221,7 +216,8 @@ class AnsibleHCloudVolume(AnsibleHCloud):
delete_protection = self.module.params.get("delete_protection")
if delete_protection is not None:
self._get_volume()
- self.hcloud_volume.change_protection(delete=delete_protection).wait_until_finished()
+ action = self.hcloud_volume.change_protection(delete=delete_protection)
+ action.wait_until_finished()
except HCloudException as exception:
self.fail_json_hcloud(exception)
self._mark_as_changed()
@@ -233,7 +229,8 @@ class AnsibleHCloudVolume(AnsibleHCloud):
if size:
if self.hcloud_volume.size < size:
if not self.module.check_mode:
- self.hcloud_volume.resize(size).wait_until_finished()
+ action = self.hcloud_volume.resize(size)
+ action.wait_until_finished()
self._mark_as_changed()
elif self.hcloud_volume.size > size:
self.module.warn("Shrinking of volumes is not supported")
@@ -244,12 +241,14 @@ class AnsibleHCloudVolume(AnsibleHCloud):
if self.hcloud_volume.server is None or self.hcloud_volume.server.name != server.name:
if not self.module.check_mode:
automount = self.module.params.get("automount", False)
- self.hcloud_volume.attach(server, automount=automount).wait_until_finished()
+ action = self.hcloud_volume.attach(server, automount=automount)
+ action.wait_until_finished()
self._mark_as_changed()
else:
if self.hcloud_volume.server is not None:
if not self.module.check_mode:
- self.hcloud_volume.detach().wait_until_finished()
+ action = self.hcloud_volume.detach()
+ action.wait_until_finished()
self._mark_as_changed()
labels = self.module.params.get("labels")
@@ -261,7 +260,8 @@ class AnsibleHCloudVolume(AnsibleHCloud):
delete_protection = self.module.params.get("delete_protection")
if delete_protection is not None and delete_protection != self.hcloud_volume.protection["delete"]:
if not self.module.check_mode:
- self.hcloud_volume.change_protection(delete=delete_protection).wait_until_finished()
+ action = self.hcloud_volume.change_protection(delete=delete_protection)
+ action.wait_until_finished()
self._mark_as_changed()
self._get_volume()
@@ -281,7 +281,8 @@ class AnsibleHCloudVolume(AnsibleHCloud):
if self.hcloud_volume is not None:
if not self.module.check_mode:
if self.hcloud_volume.server is not None:
- self.hcloud_volume.detach().wait_until_finished()
+ action = self.hcloud_volume.detach()
+ action.wait_until_finished()
self.client.volumes.delete(self.hcloud_volume)
self._mark_as_changed()
self.hcloud_volume = None
diff --git a/ansible_collections/hetzner/hcloud/plugins/modules/volume_info.py b/ansible_collections/hetzner/hcloud/plugins/modules/volume_info.py
index 1e507690e..b30956d74 100644
--- a/ansible_collections/hetzner/hcloud/plugins/modules/volume_info.py
+++ b/ansible_collections/hetzner/hcloud/plugins/modules/volume_info.py
@@ -95,7 +95,6 @@ hcloud_volume_info:
"""
from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.text.converters import to_native
from ..module_utils.hcloud import AnsibleHCloud
from ..module_utils.vendor.hcloud import HCloudException
@@ -111,22 +110,21 @@ class AnsibleHCloudVolumeInfo(AnsibleHCloud):
tmp = []
for volume in self.hcloud_volume_info:
- if volume is not None:
- server_name = None
- if volume.server is not None:
- server_name = to_native(volume.server.name)
- tmp.append(
- {
- "id": to_native(volume.id),
- "name": to_native(volume.name),
- "size": volume.size,
- "location": to_native(volume.location.name),
- "labels": volume.labels,
- "server": server_name,
- "linux_device": to_native(volume.linux_device),
- "delete_protection": volume.protection["delete"],
- }
- )
+ if volume is None:
+ continue
+
+ tmp.append(
+ {
+ "id": str(volume.id),
+ "name": volume.name,
+ "size": volume.size,
+ "location": volume.location.name,
+ "labels": volume.labels,
+ "server": volume.server.name if volume.server is not None else None,
+ "linux_device": volume.linux_device,
+ "delete_protection": volume.protection["delete"],
+ }
+ )
return tmp
diff --git a/ansible_collections/hetzner/hcloud/pyproject.toml b/ansible_collections/hetzner/hcloud/pyproject.toml
index 5263580cb..8047f107f 100644
--- a/ansible_collections/hetzner/hcloud/pyproject.toml
+++ b/ansible_collections/hetzner/hcloud/pyproject.toml
@@ -25,4 +25,9 @@ good-names = ["i", "j", "k", "ex", "_", "ip", "id"]
[tool.pylint.messages_control]
disable = [
"wrong-import-position",
+ "missing-module-docstring",
+ "missing-class-docstring",
+ "missing-function-docstring",
+ "duplicate-code",
+ "use-dict-literal",
]
diff --git a/ansible_collections/hetzner/hcloud/requirements.txt b/ansible_collections/hetzner/hcloud/requirements.txt
index 0e9148f96..510a5ef1e 100644
--- a/ansible_collections/hetzner/hcloud/requirements.txt
+++ b/ansible_collections/hetzner/hcloud/requirements.txt
@@ -1,4 +1,4 @@
-ansible-core>=2.13
+ansible-core>=2.14
# Collections requirements
netaddr
@@ -9,4 +9,4 @@ requests
# Development requirements
pylint
-antsibull-docs>=2.7,<2.8
+antsibull-docs>=2.10,<2.11
diff --git a/ansible_collections/hetzner/hcloud/scripts/vendor.py b/ansible_collections/hetzner/hcloud/scripts/vendor.py
index b55a66577..4fa881d1d 100755
--- a/ansible_collections/hetzner/hcloud/scripts/vendor.py
+++ b/ansible_collections/hetzner/hcloud/scripts/vendor.py
@@ -22,7 +22,7 @@ from textwrap import dedent
logger = logging.getLogger("vendor")
HCLOUD_SOURCE_URL = "https://github.com/hetznercloud/hcloud-python"
-HCLOUD_VERSION = "v1.33.2"
+HCLOUD_VERSION = "v1.35.0"
HCLOUD_VENDOR_PATH = "plugins/module_utils/vendor/hcloud"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/cloud-config-hcloud.ini.in b/ansible_collections/hetzner/hcloud/tests/integration/cloud-config-hcloud.ini.in
new file mode 100644
index 000000000..06cd2c4b8
--- /dev/null
+++ b/ansible_collections/hetzner/hcloud/tests/integration/cloud-config-hcloud.ini.in
@@ -0,0 +1,2 @@
+[default]
+hcloud_api_token=$HCLOUD_TOKEN
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/common/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/common/defaults/main/common.yml
index e45380565..2b6549ec6 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/common/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/common/defaults/main/common.yml
@@ -5,5 +5,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/certificate/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/certificate/aliases
index 0e887600e..18b11115e 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/certificate/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/certificate/aliases
@@ -1,2 +1,3 @@
cloud/hcloud
+gather_facts/no
azp/group2
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/certificate/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/certificate/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/certificate/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/certificate/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/certificate_info/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/certificate_info/aliases
index 0e887600e..18b11115e 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/certificate_info/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/certificate_info/aliases
@@ -1,2 +1,3 @@
cloud/hcloud
+gather_facts/no
azp/group2
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/certificate_info/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/certificate_info/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/certificate_info/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/certificate_info/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/datacenter_info/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/datacenter_info/aliases
index 0e887600e..18b11115e 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/datacenter_info/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/datacenter_info/aliases
@@ -1,2 +1,3 @@
cloud/hcloud
+gather_facts/no
azp/group2
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/datacenter_info/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/datacenter_info/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/datacenter_info/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/datacenter_info/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall/aliases
index 0e887600e..18b11115e 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall/aliases
@@ -1,2 +1,3 @@
cloud/hcloud
+gather_facts/no
azp/group2
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall/tasks/cleanup.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall/tasks/cleanup.yml
index 37fbd3413..fd69ed570 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall/tasks/cleanup.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall/tasks/cleanup.yml
@@ -1,10 +1,11 @@
---
-- name: Cleanup test_server
- hetzner.hcloud.server:
- name: "{{ hcloud_server_name }}"
- state: absent
-
- name: Cleanup test_firewall
hetzner.hcloud.firewall:
name: "{{ hcloud_firewall_name }}"
state: absent
+ force: true
+
+- name: Cleanup test_server
+ hetzner.hcloud.server:
+ name: "{{ hcloud_server_name }}"
+ state: absent
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall/tasks/test.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall/tasks/test.yml
index 57059848f..8179bc61a 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall/tasks/test.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall/tasks/test.yml
@@ -183,7 +183,7 @@
ansible.builtin.assert:
that:
- result is failed
- - '"is still in use" in result.msg'
+ - result.failure.code == "resource_in_use"
- name: Test delete with force
hetzner.hcloud.firewall:
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall_info/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall_info/aliases
index 55ec821a4..18b11115e 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall_info/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall_info/aliases
@@ -1,2 +1,3 @@
cloud/hcloud
-shippable/hcloud/group2
+gather_facts/no
+azp/group2
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall_info/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall_info/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall_info/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall_info/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall_info/tasks/cleanup.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall_info/tasks/cleanup.yml
index 37fbd3413..fd69ed570 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall_info/tasks/cleanup.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall_info/tasks/cleanup.yml
@@ -1,10 +1,11 @@
---
-- name: Cleanup test_server
- hetzner.hcloud.server:
- name: "{{ hcloud_server_name }}"
- state: absent
-
- name: Cleanup test_firewall
hetzner.hcloud.firewall:
name: "{{ hcloud_firewall_name }}"
state: absent
+ force: true
+
+- name: Cleanup test_server
+ hetzner.hcloud.server:
+ name: "{{ hcloud_server_name }}"
+ state: absent
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall_resource/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall_resource/aliases
index 0e887600e..d9a549fdd 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall_resource/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall_resource/aliases
@@ -1,2 +1,3 @@
cloud/hcloud
-azp/group2
+gather_facts/no
+azp/group1
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall_resource/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall_resource/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall_resource/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall_resource/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall_resource/tasks/cleanup.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall_resource/tasks/cleanup.yml
index 37fbd3413..fd69ed570 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall_resource/tasks/cleanup.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/firewall_resource/tasks/cleanup.yml
@@ -1,10 +1,11 @@
---
-- name: Cleanup test_server
- hetzner.hcloud.server:
- name: "{{ hcloud_server_name }}"
- state: absent
-
- name: Cleanup test_firewall
hetzner.hcloud.firewall:
name: "{{ hcloud_firewall_name }}"
state: absent
+ force: true
+
+- name: Cleanup test_server
+ hetzner.hcloud.server:
+ name: "{{ hcloud_server_name }}"
+ state: absent
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/floating_ip/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/floating_ip/aliases
index a6a90a6bf..c96df02ff 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/floating_ip/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/floating_ip/aliases
@@ -1,2 +1,3 @@
cloud/hcloud
+gather_facts/no
azp/group3
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/floating_ip/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/floating_ip/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/floating_ip/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/floating_ip/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/floating_ip/tasks/test.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/floating_ip/tasks/test.yml
index fba06e308..23f29b229 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/floating_ip/tasks/test.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/floating_ip/tasks/test.yml
@@ -21,7 +21,7 @@
name: "{{ hcloud_server_name }}"
server_type: cx11
image: ubuntu-22.04
- state: started
+ state: stopped
location: "fsn1"
register: main_server
- name: verify setup server
@@ -34,7 +34,7 @@
name: "{{ hcloud_server_name }}2"
server_type: cx11
image: ubuntu-22.04
- state: started
+ state: stopped
register: main_server2
- name: verify setup another server
assert:
@@ -101,6 +101,7 @@
assert:
that:
- result is failed
+ - result.failure.code == "invalid_input"
- result.msg == "invalid input in fields 'server', 'home_location'"
- name: test create Floating IP with check mode
@@ -371,7 +372,8 @@
assert:
that:
- result is failed
- - 'result.msg == "Floating IP deletion is protected"'
+ - result.failure.code == "protected"
+ - result.msg == "Floating IP deletion is protected"
- name: test update Floating IP delete protection
hetzner.hcloud.floating_ip:
@@ -459,7 +461,8 @@
assert:
that:
- result is failed
- - 'result.msg == "Floating IP deletion is protected"'
+ - result.failure.code == "protected"
+ - result.msg == "Floating IP deletion is protected"
- name: test update Floating IP delete protection
hetzner.hcloud.floating_ip:
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/floating_ip_info/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/floating_ip_info/aliases
index a6a90a6bf..c96df02ff 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/floating_ip_info/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/floating_ip_info/aliases
@@ -1,2 +1,3 @@
cloud/hcloud
+gather_facts/no
azp/group3
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/floating_ip_info/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/floating_ip_info/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/floating_ip_info/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/floating_ip_info/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/image_info/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/image_info/aliases
index 0e887600e..18b11115e 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/image_info/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/image_info/aliases
@@ -1,2 +1,3 @@
cloud/hcloud
+gather_facts/no
azp/group2
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/image_info/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/image_info/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/image_info/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/image_info/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/iso_info/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/iso_info/aliases
index a6a90a6bf..c96df02ff 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/iso_info/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/iso_info/aliases
@@ -1,2 +1,3 @@
cloud/hcloud
+gather_facts/no
azp/group3
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/iso_info/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/iso_info/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/iso_info/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/iso_info/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer/aliases
index 62828d1e9..d9a549fdd 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer/aliases
@@ -1,2 +1,3 @@
cloud/hcloud
+gather_facts/no
azp/group1
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer/tasks/test.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer/tasks/test.yml
index 343f15672..3b7de5b11 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer/tasks/test.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer/tasks/test.yml
@@ -120,7 +120,8 @@
ansible.builtin.assert:
that:
- result is failed
- - 'result.msg == "load balancer deletion is protected"'
+ - result.failure.code == "protected"
+ - result.msg == "load balancer deletion is protected"
- name: Test update delete_protection
hetzner.hcloud.load_balancer:
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_info/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_info/aliases
index 62828d1e9..d9a549fdd 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_info/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_info/aliases
@@ -1,2 +1,3 @@
cloud/hcloud
+gather_facts/no
azp/group1
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_info/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_info/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_info/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_info/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_info/tasks/prepare.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_info/tasks/prepare.yml
index bfad755df..653417e18 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_info/tasks/prepare.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_info/tasks/prepare.yml
@@ -4,7 +4,7 @@
name: "{{ hcloud_server_name }}"
server_type: cx11
image: ubuntu-22.04
- state: started
+ state: stopped
register: test_server
- name: Create test_load_balancer
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_network/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_network/aliases
index 62828d1e9..d9a549fdd 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_network/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_network/aliases
@@ -1,2 +1,3 @@
cloud/hcloud
+gather_facts/no
azp/group1
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_network/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_network/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_network/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_network/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_service/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_service/aliases
index 62828d1e9..d9a549fdd 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_service/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_service/aliases
@@ -1,2 +1,3 @@
cloud/hcloud
+gather_facts/no
azp/group1
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_service/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_service/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_service/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_service/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_target/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_target/aliases
index 62828d1e9..d9a549fdd 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_target/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_target/aliases
@@ -1,2 +1,3 @@
cloud/hcloud
+gather_facts/no
azp/group1
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_target/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_target/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_target/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_target/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_target/tasks/test.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_target/tasks/test.yml
index 19fd0e9af..a392f4f3d 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_target/tasks/test.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_target/tasks/test.yml
@@ -6,7 +6,7 @@
name: "{{hcloud_server_name}}"
server_type: cx11
image: ubuntu-22.04
- state: started
+ state: stopped
location: "fsn1"
register: server
- name: verify setup server
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_type_info/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_type_info/aliases
index 0e887600e..18b11115e 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_type_info/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_type_info/aliases
@@ -1,2 +1,3 @@
cloud/hcloud
+gather_facts/no
azp/group2
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_type_info/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_type_info/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_type_info/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/load_balancer_type_info/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/location_info/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/location_info/aliases
index a6a90a6bf..c96df02ff 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/location_info/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/location_info/aliases
@@ -1,2 +1,3 @@
cloud/hcloud
+gather_facts/no
azp/group3
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/location_info/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/location_info/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/location_info/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/location_info/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/network/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/network/aliases
index f150235ee..d9a549fdd 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/network/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/network/aliases
@@ -1,3 +1,3 @@
cloud/hcloud
+gather_facts/no
azp/group1
-disabled
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/network/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/network/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/network/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/network/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/network/defaults/main/main.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/network/defaults/main/main.yml
index a8320602c..a01c6d60c 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/network/defaults/main/main.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/network/defaults/main/main.yml
@@ -2,4 +2,3 @@
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
---
hcloud_network_name: "{{ hcloud_ns }}"
-hcloud_network_name_with_vswitch: "{{ hcloud_ns }}-vswitch"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/network/tasks/cleanup.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/network/tasks/cleanup.yml
new file mode 100644
index 000000000..989d01b80
--- /dev/null
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/network/tasks/cleanup.yml
@@ -0,0 +1,5 @@
+---
+- name: Cleanup test_network
+ hetzner.hcloud.network:
+ name: "{{ hcloud_network_name }}"
+ state: absent
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/network/tasks/test.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/network/tasks/test.yml
index b4f3de284..b814ceb15 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/network/tasks/test.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/network/tasks/test.yml
@@ -1,268 +1,186 @@
# Copyright: (c) 2019, Hetzner Cloud GmbH <info@hetzner-cloud.de>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
---
-- name: setup ensure network is absent
+- name: Test missing required parameters
hetzner.hcloud.network:
- name: "{{ item }}"
- state: absent
- with_items:
- - "{{ hcloud_network_name }}"
- - "{{ hcloud_network_name_with_vswitch }}"
-
-- name: test missing ip_range parameter on create Network
- hetzner.hcloud.network:
- name: "{{hcloud_network_name}}"
- register: result
+ name: "{{ hcloud_network_name }}"
+ state: present
ignore_errors: true
-- name: verify fail missing ip_range parameter on create Network result
- assert:
+ register: result
+- name: Verify missing required parameters
+ ansible.builtin.assert:
that:
- result is failed
- 'result.msg == "missing required arguments: ip_range"'
-- name: test create Network with check mode
+- name: Test create with check mode
hetzner.hcloud.network:
- name: "{{hcloud_network_name}}"
+ name: "{{ hcloud_network_name }}"
ip_range: "10.0.0.0/16"
- register: result
+ labels:
+ key: value
check_mode: true
-- name: verify create Network with check mode result
- assert:
+ register: result
+- name: Verify create with check mode
+ ansible.builtin.assert:
that:
- result is changed
-- name: test create Network
- hetzner.hcloud.network:
- name: "{{hcloud_network_name}}"
- ip_range: "10.0.0.0/16"
- register: network
-- name: verify test create Network result
- assert:
- that:
- - network is changed
- - network.hcloud_network.name == hcloud_network_name
- - network.hcloud_network.ip_range == "10.0.0.0/16"
-
-- name: test create Network idempotence
- hetzner.hcloud.network:
- name: "{{hcloud_network_name}}"
- ip_range: "10.0.0.0/16"
- register: network
-- name: verify test create network
- assert:
- that:
- - network is not changed
-
-- name: test create Network with expose_routes_to_vswitch
+- name: Test create
hetzner.hcloud.network:
- name: "{{hcloud_network_name_with_vswitch}}"
+ name: "{{ hcloud_network_name }}"
ip_range: "10.0.0.0/16"
- expose_routes_to_vswitch: true
- register: network
-- name: verify test create Network with vSwitch result
- assert:
- that:
- - network is changed
- - network.hcloud_network.name == hcloud_network_name_with_vswitch
- - network.hcloud_network.ip_range == "10.0.0.0/16"
- - network.hcloud_network.expose_routes_to_vswitch is true
-
-- name: test create Network with expose_routes_to_vswitch idempotence
- hetzner.hcloud.network:
- name: "{{hcloud_network_name_with_vswitch}}"
- ip_range: "10.0.0.0/16"
- expose_routes_to_vswitch: true
- register: network
-- name: verify test create network idempotency
- assert:
- that:
- - network is not changed
-
-- name: test update Network label
- hetzner.hcloud.network:
- name: "{{hcloud_network_name}}"
labels:
key: value
- register: network
-- name: verify test update Network label
- assert:
+ register: result
+- name: Verify create
+ ansible.builtin.assert:
that:
- - network is changed
- - network.hcloud_network.labels.key == "value"
+ - result is changed
+ - result.hcloud_network.name == hcloud_network_name
+ - result.hcloud_network.ip_range == "10.0.0.0/16"
+ - result.hcloud_network.labels.key == "value"
+ - result.hcloud_network.expose_routes_to_vswitch == false
+ - result.hcloud_network.delete_protection == false
-- name: test update Network label idempotency
+- name: Test create idempotency
hetzner.hcloud.network:
- name: "{{hcloud_network_name}}"
+ name: "{{ hcloud_network_name }}"
+ ip_range: "10.0.0.0/16"
labels:
key: value
- register: network
-- name: verify test update Network label idempotency
- assert:
- that:
- - network is not changed
-
-- name: test update Network ip range
- hetzner.hcloud.network:
- name: "{{hcloud_network_name}}"
- ip_range: "10.0.0.0/8"
- register: network
-- name: verify test update Network ip range
- assert:
- that:
- - network is changed
- - network.hcloud_network.ip_range == "10.0.0.0/8"
-
-- name: test update Network ip range idempotency
- hetzner.hcloud.network:
- name: "{{hcloud_network_name}}"
- ip_range: "10.0.0.0/8"
- register: network
-- name: verify test update Network ip range idempotency
- assert:
- that:
- - network is not changed
-
-- name: test update Network expose_routes_to_vswitch
- hetzner.hcloud.network:
- name: "{{hcloud_network_name_with_vswitch}}"
- expose_routes_to_vswitch: false
- register: network
-- name: verify test update Network expose_routes_to_vswitch
- assert:
- that:
- - network is changed
- - network.hcloud_network.expose_routes_to_vswitch is false
-
-- name: test update Network expose_routes_to_vswitch idempotency
- hetzner.hcloud.network:
- name: "{{hcloud_network_name_with_vswitch}}"
- expose_routes_to_vswitch: false
- register: network
-- name: verify test update Network expose_routes_to_vswitch idempotency
- assert:
+ register: result
+- name: Verify create idempotency
+ ansible.builtin.assert:
that:
- - network is not changed
+ - result is not changed
-- name: test update Network delete protection
+- name: Test update
hetzner.hcloud.network:
- name: "{{hcloud_network_name}}"
+ name: "{{ hcloud_network_name }}"
ip_range: "10.0.0.0/8"
+ labels:
+ key: changed
+ foo: bar
+ expose_routes_to_vswitch: true
delete_protection: true
- register: network
-- name: verify test update Network delete protection
- assert:
+ register: result
+- name: Verify update
+ ansible.builtin.assert:
that:
- - network is changed
- - network.hcloud_network.delete_protection is sameas true
+ - result is changed
+ - result.hcloud_network.ip_range == "10.0.0.0/8"
+ - result.hcloud_network.labels.key == "changed"
+ - result.hcloud_network.labels.foo == "bar"
+ - result.hcloud_network.expose_routes_to_vswitch == true
+ - result.hcloud_network.delete_protection == true
-- name: test update Network delete protection idempotency
+- name: Test update idempotency
hetzner.hcloud.network:
- name: "{{hcloud_network_name}}"
+ name: "{{ hcloud_network_name }}"
ip_range: "10.0.0.0/8"
+ labels:
+ key: changed
+ foo: bar
delete_protection: true
- register: network
-- name: verify test update Network delete protection idempotency
- assert:
- that:
- - network is not changed
- - network.hcloud_network.delete_protection is sameas true
-
-- name: test Network without delete protection set to be idempotent
- hetzner.hcloud.network:
- name: "{{hcloud_network_name}}"
- ip_range: "10.0.0.0/8"
- register: network
-- name: verify test Network without delete protection set to be idempotent
- assert:
+ register: result
+- name: Verify update idempotency
+ ansible.builtin.assert:
that:
- - network is not changed
- - network.hcloud_network.delete_protection is sameas true
+ - result is not changed
-- name: test delete Network fails if it is protected
+- name: Test delete with delete protection
hetzner.hcloud.network:
- name: "{{hcloud_network_name}}"
+ name: "{{ hcloud_network_name }}"
state: absent
ignore_errors: true
register: result
-- name: verify delete Network
- assert:
+- name: Verify delete with delete protection
+ ansible.builtin.assert:
that:
- result is failed
- - 'result.msg == "network deletion is protected"'
+ - result.failure.code == "protected"
+ - result.msg == "network deletion is protected"
-- name: test update Network delete protection
+- name: Test update delete protection
hetzner.hcloud.network:
- name: "{{hcloud_network_name}}"
- ip_range: "10.0.0.0/8"
+ name: "{{ hcloud_network_name }}"
delete_protection: false
- register: network
-- name: verify test update Network delete protection
- assert:
+ register: result
+- name: Verify update delete protection
+ ansible.builtin.assert:
that:
- - network is changed
- - network.hcloud_network.delete_protection is sameas false
+ - result is changed
+ - result.hcloud_network.delete_protection == false
-- name: test delete Network
+- name: Test update name
hetzner.hcloud.network:
- name: "{{hcloud_network_name}}"
- state: absent
+ id: "{{ result.hcloud_network.id }}"
+ name: "changed-{{ hcloud_network_name }}"
register: result
-- name: verify delete Network
- assert:
+- name: Verify update name
+ ansible.builtin.assert:
that:
- - result is success
+ - result is changed
+ - result.hcloud_network.name == "changed-" + hcloud_network_name
-- name: test create Network with delete protection
+- name: Test update name and labels
hetzner.hcloud.network:
- name: "{{hcloud_network_name}}"
- ip_range: "10.0.0.0/8"
- delete_protection: true
- register: network
-- name: verify create Network with delete protection
- assert:
+ id: "{{ result.hcloud_network.id }}"
+ name: "{{ hcloud_network_name }}"
+ labels:
+ key: value
+ register: result
+- name: Verify update name and labels
+ ansible.builtin.assert:
that:
- - network is changed
- - network.hcloud_network.delete_protection is sameas true
+ - result is changed
+ - result.hcloud_network.name == hcloud_network_name
+ - result.hcloud_network.labels.key == "value"
+ - result.hcloud_network.labels.foo is not defined
-- name: test delete Network fails if it is protected
+- name: Test delete
hetzner.hcloud.network:
- name: "{{hcloud_network_name}}"
+ name: "{{ hcloud_network_name }}"
state: absent
- ignore_errors: true
register: result
-- name: verify delete Network
- assert:
+- name: Verify delete
+ ansible.builtin.assert:
that:
- - result is failed
- - 'result.msg == "network deletion is protected"'
+ - result is changed
-- name: test update Network delete protection
+- name: Test create with vSwitch
hetzner.hcloud.network:
- name: "{{hcloud_network_name}}"
- delete_protection: false
- register: network
-- name: verify test update Network delete protection
- assert:
+ name: "{{ hcloud_network_name }}"
+ ip_range: "10.0.0.0/16"
+ expose_routes_to_vswitch: true
+ register: result
+- name: Verify create with vSwitch
+ ansible.builtin.assert:
that:
- - network is changed
- - network.hcloud_network.delete_protection is sameas false
+ - result is changed
+ - result.hcloud_network.name == hcloud_network_name
+ - result.hcloud_network.ip_range == "10.0.0.0/16"
+ - result.hcloud_network.expose_routes_to_vswitch == true
+ - result.hcloud_network.delete_protection == false
-- name: test delete Network
+- name: Test create with vSwitch idempotency
hetzner.hcloud.network:
- name: "{{hcloud_network_name}}"
- state: absent
+ name: "{{ hcloud_network_name }}"
+ ip_range: "10.0.0.0/16"
+ expose_routes_to_vswitch: true
register: result
-- name: verify delete Network
- assert:
+- name: Verify create
+ ansible.builtin.assert:
that:
- - result is success
+ - result is not changed
-- name: test delete Network with expose_routes_to_vswitch
+- name: Test delete with vSwitch
hetzner.hcloud.network:
- name: "{{hcloud_network_name_with_vswitch}}"
+ name: "{{ hcloud_network_name }}"
state: absent
register: result
-- name: verify delete Network with expose_routes_to_vswitch
- assert:
+- name: Verify delete with vSwitch
+ ansible.builtin.assert:
that:
- - result is success
+ - result is changed
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/network_info/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/network_info/aliases
index 62828d1e9..d9a549fdd 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/network_info/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/network_info/aliases
@@ -1,2 +1,3 @@
cloud/hcloud
+gather_facts/no
azp/group1
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/network_info/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/network_info/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/network_info/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/network_info/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/placement_group/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/placement_group/aliases
index 0e887600e..18b11115e 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/placement_group/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/placement_group/aliases
@@ -1,2 +1,3 @@
cloud/hcloud
+gather_facts/no
azp/group2
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/placement_group/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/placement_group/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/placement_group/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/placement_group/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/placement_group/tasks/test.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/placement_group/tasks/test.yml
index 3694c846f..d988275d6 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/placement_group/tasks/test.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/placement_group/tasks/test.yml
@@ -80,7 +80,7 @@
- name: test remove server from placement group
hetzner.hcloud.server:
name: "{{ hcloud_server_name }}"
- placement_group: null
+ placement_group: ""
state: present
register: result
- name: verify remove server from placement group
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip/aliases
index a6a90a6bf..c96df02ff 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip/aliases
@@ -1,2 +1,3 @@
cloud/hcloud
+gather_facts/no
azp/group3
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip/tasks/cleanup.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip/tasks/cleanup.yml
new file mode 100644
index 000000000..d8c44b945
--- /dev/null
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip/tasks/cleanup.yml
@@ -0,0 +1,10 @@
+---
+- name: Cleanup test_server
+ hetzner.hcloud.server:
+ name: "{{ hcloud_server_name }}"
+ state: absent
+
+- name: Cleanup test_primary_ip
+ hetzner.hcloud.primary_ip:
+ name: "{{ hcloud_primary_ip_name }}"
+ state: absent
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip/tasks/prepare.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip/tasks/prepare.yml
new file mode 100644
index 000000000..8200e97a1
--- /dev/null
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip/tasks/prepare.yml
@@ -0,0 +1,10 @@
+---
+- name: Create test_server
+ hetzner.hcloud.server:
+ name: "{{ hcloud_server_name }}"
+ server_type: cx11
+ image: ubuntu-22.04
+ state: stopped
+ enable_ipv4: false
+ enable_ipv6: false
+ register: test_server
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip/tasks/test.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip/tasks/test.yml
index 4c0fd2e5f..84fd6a31f 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip/tasks/test.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip/tasks/test.yml
@@ -1,248 +1,181 @@
# Copyright: (c) 2019, Hetzner Cloud GmbH <info@hetzner-cloud.de>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
---
-- name: setup ensure primary ip is absent
+- name: Test missing required parameters
hetzner.hcloud.primary_ip:
- name: "{{ hcloud_primary_ip_name }}"
- state: absent
-
-- name: test create Primary IP with check mode
- hetzner.hcloud.primary_ip:
- name: "{{ hcloud_primary_ip_name }}"
- type: ipv4
- datacenter: "fsn1-dc14"
- register: primaryIP
- check_mode: true
-- name: verify test create Primary IP with check mode
- assert:
- that:
- - primaryIP is changed
-
-- name: test create Primary IP
- hetzner.hcloud.primary_ip:
- name: "{{ hcloud_primary_ip_name }}"
- type: ipv4
- datacenter: "fsn1-dc14"
- register: primaryIP
-- name: verify test create Primary IP
- assert:
- that:
- - primaryIP is changed
- - primaryIP.hcloud_primary_ip.name ==hcloud_primary_ip_name
- - primaryIP.hcloud_primary_ip.datacenter == "fsn1-dc14"
-
-- name: test create Primary IP idempotency
- hetzner.hcloud.primary_ip:
- name: "{{ hcloud_primary_ip_name }}"
- type: ipv4
- datacenter: "fsn1-dc14"
- register: primaryIP
-- name: verify test create Primary IP idempotency
- assert:
+ state: present
+ ignore_errors: true
+ register: result
+- name: Verify missing required parameters
+ ansible.builtin.assert:
that:
- - primaryIP is not changed
+ - result is failed
+ - 'result.msg == "one of the following is required: id, name"'
-- name: test update Primary IP
+- name: Test create with check mode
hetzner.hcloud.primary_ip:
name: "{{ hcloud_primary_ip_name }}"
- type: ipv4
- datacenter: "fsn1-dc14"
+ type: ipv6
+ datacenter: fsn1-dc14
labels:
key: value
- register: primaryIP
-- name: verify test update Primary IP
- assert:
+ check_mode: true
+ register: result
+- name: Verify create with check mode
+ ansible.builtin.assert:
that:
- - primaryIP is changed
+ - result is changed
-- name: test update Primary IP idempotency
+- name: Test create
hetzner.hcloud.primary_ip:
name: "{{ hcloud_primary_ip_name }}"
- type: ipv4
- datacenter: "fsn1-dc14"
+ type: ipv6
+ datacenter: fsn1-dc14
labels:
key: value
- register: primaryIP
-- name: verify test update Primary IP idempotency
- assert:
+ register: result
+- name: Verify create
+ ansible.builtin.assert:
that:
- - primaryIP is not changed
+ - result is changed
+ - result.hcloud_primary_ip.name == hcloud_primary_ip_name
+ - result.hcloud_primary_ip.type == "ipv6"
+ - result.hcloud_primary_ip.datacenter == "fsn1-dc14"
+ - result.hcloud_primary_ip.assignee_type == "server"
+ - result.hcloud_primary_ip.assignee_id is none
+ - result.hcloud_primary_ip.labels.key == "value"
+ - result.hcloud_primary_ip.auto_delete is false
+ - result.hcloud_primary_ip.delete_protection is false
-- name: test update Primary IP with same labels
+- name: Test create idempotency
hetzner.hcloud.primary_ip:
name: "{{ hcloud_primary_ip_name }}"
- type: ipv4
- datacenter: "fsn1-dc14"
+ type: ipv6
+ datacenter: fsn1-dc14
labels:
key: value
- register: primaryIP
-- name: verify test update Primary IP with same labels
- assert:
+ register: result
+- name: Verify create idempotency
+ ansible.builtin.assert:
that:
- - primaryIP is not changed
+ - result is not changed
-- name: test update Primary IP with other labels
+- name: Test update
hetzner.hcloud.primary_ip:
name: "{{ hcloud_primary_ip_name }}"
- type: ipv4
- datacenter: "fsn1-dc14"
+ type: ipv6
+ datacenter: fsn1-dc14
labels:
key: value
- other: label
- register: primaryIP
-- name: verify test update Primary IP with other labels
- assert:
+ foo: bar
+ auto_delete: true
+ register: result
+- name: Verify update
+ ansible.builtin.assert:
that:
- - primaryIP is changed
+ - result is changed
+ - result.hcloud_primary_ip.name == hcloud_primary_ip_name
+ - result.hcloud_primary_ip.type == "ipv6"
+ - result.hcloud_primary_ip.datacenter == "fsn1-dc14"
+ - result.hcloud_primary_ip.assignee_type == "server"
+ - result.hcloud_primary_ip.assignee_id is none
+ - result.hcloud_primary_ip.labels.key == "value"
+ - result.hcloud_primary_ip.labels.foo == "bar"
+ - result.hcloud_primary_ip.delete_protection is false
+ - result.hcloud_primary_ip.auto_delete is true
-- name: test update Primary IP with other labels in different order
+- name: Test update idempotency
hetzner.hcloud.primary_ip:
name: "{{ hcloud_primary_ip_name }}"
- type: ipv4
- datacenter: "fsn1-dc14"
+ type: ipv6
+ datacenter: fsn1-dc14
labels:
- other: label
key: value
- register: primaryIP
-- name: verify test update Primary IP with other labels in different order
- assert:
- that:
- - primaryIP is not changed
-
-- name: test update Primary IP delete protection
- hetzner.hcloud.primary_ip:
- name: "{{ hcloud_primary_ip_name }}"
- type: ipv4
- delete_protection: true
- register: primaryIP
-- name: verify update Primary IP delete protection
- assert:
+ foo: bar
+ auto_delete: true
+ register: result
+- name: Verify update idempotency
+ ansible.builtin.assert:
that:
- - primaryIP is changed
- - primaryIP.hcloud_primary_ip.delete_protection is sameas true
+ - result is not changed
-- name: test update Primary IP delete protection idempotency
+- name: Test update delete protection
hetzner.hcloud.primary_ip:
name: "{{ hcloud_primary_ip_name }}"
- type: ipv4
delete_protection: true
- register: primaryIP
-- name: verify update Primary IP delete protection idempotency
- assert:
- that:
- - primaryIP is not changed
- - primaryIP.hcloud_primary_ip.delete_protection is sameas true
-
-- name: test Primary IP without delete protection set to be idempotent
- hetzner.hcloud.primary_ip:
- name: "{{ hcloud_primary_ip_name }}"
- type: ipv4
- register: primaryIP
-- name: verify Primary IP without delete protection set to be idempotent
- assert:
+ register: result
+- name: Verify update delete protection
+ ansible.builtin.assert:
that:
- - primaryIP is not changed
- - primaryIP.hcloud_primary_ip.delete_protection is sameas true
+ - result is changed
+ - result.hcloud_primary_ip.delete_protection is true
-- name: test delete Primary IP fails if it is protected
+- name: Test delete with delete protection
hetzner.hcloud.primary_ip:
name: "{{ hcloud_primary_ip_name }}"
- state: "absent"
- register: result
+ state: absent
ignore_errors: true
-- name: verify test delete primary ip
- assert:
+ register: result
+- name: Verify delete with delete protection
+ ansible.builtin.assert:
that:
- result is failed
- - 'result.msg == "Primary IP deletion is protected"'
+ - result.failure.code == "protected"
+ - result.msg == "Primary IP deletion is protected"
-- name: test update Primary IP delete protection
+- name: Test update delete protection
hetzner.hcloud.primary_ip:
name: "{{ hcloud_primary_ip_name }}"
- type: ipv4
delete_protection: false
- register: primaryIP
-- name: verify update Primary IP delete protection
- assert:
- that:
- - primaryIP is changed
- - primaryIP.hcloud_primary_ip.delete_protection is sameas false
-
-- name: test delete primary ip
- hetzner.hcloud.primary_ip:
- name: "{{ hcloud_primary_ip_name }}"
- state: "absent"
register: result
-- name: verify test delete primary ip
- assert:
+- name: Verify update delete protection
+ ansible.builtin.assert:
that:
- result is changed
+ - result.hcloud_primary_ip.delete_protection is false
-- name: test create ipv6 primary ip
+- name: Test delete
hetzner.hcloud.primary_ip:
name: "{{ hcloud_primary_ip_name }}"
- type: ipv6
- datacenter: "fsn1-dc14"
- state: "present"
+ state: absent
register: result
-- name: verify test create ipv6 primary ip
- assert:
+- name: Verify delete
+ ansible.builtin.assert:
that:
- result is changed
-- name: test delete ipv6 primary ip
+- name: Test create with server
hetzner.hcloud.primary_ip:
name: "{{ hcloud_primary_ip_name }}"
- state: "absent"
+ type: ipv6
+ server: "{{ hcloud_server_name }}"
register: result
-- name: verify test delete ipv6 primary ip
- assert:
+- name: Verify create with server
+ ansible.builtin.assert:
that:
- result is changed
+ - result.hcloud_primary_ip.name == hcloud_primary_ip_name
+ - result.hcloud_primary_ip.type == "ipv6"
+ - result.hcloud_primary_ip.assignee_id == test_server.hcloud_server.id | string
+ - result.hcloud_primary_ip.assignee_type == "server"
-- name: test create Primary IP with delete protection
- hetzner.hcloud.primary_ip:
- name: "{{ hcloud_primary_ip_name }}"
- type: ipv4
- datacenter: fsn1-dc14
- delete_protection: true
- register: primaryIP
-- name: verify create Primary IP with delete protection
- assert:
- that:
- - primaryIP is changed
- - primaryIP.hcloud_primary_ip.delete_protection is sameas true
-
-- name: test delete Primary IP fails if it is protected
+- name: Test create with server idempotency
hetzner.hcloud.primary_ip:
name: "{{ hcloud_primary_ip_name }}"
- state: "absent"
+ type: ipv6
+ server: "{{ hcloud_server_name }}"
register: result
- ignore_errors: true
-- name: verify test delete primary ip
- assert:
+- name: Verify create with server idempotency
+ ansible.builtin.assert:
that:
- - result is failed
- - 'result.msg == "Primary IP deletion is protected"'
+ - result is not changed
-- name: test update Primary IP delete protection
+- name: Test delete with server
hetzner.hcloud.primary_ip:
name: "{{ hcloud_primary_ip_name }}"
- type: ipv4
- delete_protection: false
- register: primaryIP
-- name: verify update Primary IP delete protection
- assert:
- that:
- - primaryIP is changed
- - primaryIP.hcloud_primary_ip.delete_protection is sameas false
-
-- name: test delete primary ip
- hetzner.hcloud.primary_ip:
- name: "{{ hcloud_primary_ip_name }}"
- state: "absent"
+ state: absent
register: result
-- name: verify test delete primary ip
- assert:
+- name: Verify delete with server
+ ansible.builtin.assert:
that:
- result is changed
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip_info/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip_info/aliases
index a6a90a6bf..c96df02ff 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip_info/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip_info/aliases
@@ -1,2 +1,3 @@
cloud/hcloud
+gather_facts/no
azp/group3
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip_info/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip_info/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip_info/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip_info/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/rdns/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/rdns/aliases
index 62828d1e9..d9a549fdd 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/rdns/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/rdns/aliases
@@ -1,2 +1,3 @@
cloud/hcloud
+gather_facts/no
azp/group1
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/rdns/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/rdns/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/rdns/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/rdns/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/route/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/route/aliases
index 62828d1e9..d9a549fdd 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/route/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/route/aliases
@@ -1,2 +1,3 @@
cloud/hcloud
+gather_facts/no
azp/group1
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/route/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/route/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/route/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/route/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/server/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/server/aliases
index a6a90a6bf..c96df02ff 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/server/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/server/aliases
@@ -1,2 +1,3 @@
cloud/hcloud
+gather_facts/no
azp/group3
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/server/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/server/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/server/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/server/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/server/tasks/test_basic.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/server/tasks/test_basic.yml
index 1e94d67af..879e2d678 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/server/tasks/test_basic.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/server/tasks/test_basic.yml
@@ -315,7 +315,8 @@
assert:
that:
- result is failed
- - 'result.msg == "server deletion is protected"'
+ - result.failure.code == "protected"
+ - result.msg == "server deletion is protected"
- name: test rebuild server fails if it is protected
hetzner.hcloud.server:
@@ -328,7 +329,8 @@
assert:
that:
- result is failed
- - 'result.msg == "server rebuild is protected"'
+ - result.failure.code == "protected"
+ - result.msg == "server rebuild is protected"
- name: test remove server protection
hetzner.hcloud.server:
@@ -585,7 +587,8 @@
assert:
that:
- result is failed
- - 'result.msg == "server deletion is protected"'
+ - result.failure.code == "protected"
+ - result.msg == "server deletion is protected"
- name: remove protection from server
hetzner.hcloud.server:
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/server/tasks/test_firewalls.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/server/tasks/test_firewalls.yml
index 896a6c5cf..230df46de 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/server/tasks/test_firewalls.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/server/tasks/test_firewalls.yml
@@ -13,7 +13,9 @@
assert:
that:
- result is failed
- - 'result.msg == "firewall not-existing was not found"'
+ - result.failure.code == "not_found"
+ - result.msg == "firewall not-existing was not found"
+
- name: setup create firewalls
hetzner.hcloud.firewall:
name: "{{ item }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/server/tasks/test_validation.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/server/tasks/test_validation.yml
index d4e0ef8b4..e051816f9 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/server/tasks/test_validation.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/server/tasks/test_validation.yml
@@ -34,7 +34,8 @@
assert:
that:
- result is failed
- - 'result.msg == "server_type not-existing-server-type was not found"'
+ - result.failure.code == "not_found"
+ - result.msg == "server_type not-existing-server-type was not found"
- name: test create server with not existing image
hetzner.hcloud.server:
@@ -48,4 +49,5 @@
assert:
that:
- result is failed
- - 'result.msg == "Image my-not-existing-image-20.04 was not found"'
+ - result.failure.code == "not_found"
+ - result.msg == "Image my-not-existing-image-20.04 was not found"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/server_info/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/server_info/aliases
index 0e887600e..18b11115e 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/server_info/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/server_info/aliases
@@ -1,2 +1,3 @@
cloud/hcloud
+gather_facts/no
azp/group2
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/server_info/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/server_info/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/server_info/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/server_info/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/server_info/tasks/prepare.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/server_info/tasks/prepare.yml
index 9e8aa2c9f..8a7a09605 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/server_info/tasks/prepare.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/server_info/tasks/prepare.yml
@@ -4,7 +4,7 @@
name: "{{ hcloud_server_name }}"
server_type: cx11
image: ubuntu-22.04
- state: started
+ state: stopped
labels:
key: value
register: test_server
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/server_network/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/server_network/aliases
index 6e9b68657..18b11115e 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/server_network/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/server_network/aliases
@@ -1,3 +1,3 @@
cloud/hcloud
+gather_facts/no
azp/group2
-disabled
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/server_network/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/server_network/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/server_network/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/server_network/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/server_network/tasks/cleanup.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/server_network/tasks/cleanup.yml
new file mode 100644
index 000000000..af15c63bb
--- /dev/null
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/server_network/tasks/cleanup.yml
@@ -0,0 +1,10 @@
+---
+- name: Cleanup test_server
+ hetzner.hcloud.server:
+ name: "{{ hcloud_server_name }}"
+ state: absent
+
+- name: Cleanup test_network
+ hetzner.hcloud.network:
+ name: "{{ hcloud_network_name }}"
+ state: absent
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/server_network/tasks/prepare.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/server_network/tasks/prepare.yml
new file mode 100644
index 000000000..b74f43f06
--- /dev/null
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/server_network/tasks/prepare.yml
@@ -0,0 +1,24 @@
+---
+- name: Create test_network
+ hetzner.hcloud.network:
+ name: "{{ hcloud_network_name }}"
+ ip_range: 10.0.0.0/16
+ labels:
+ key: value
+ register: test_network
+
+- name: Create test_subnetwork
+ hetzner.hcloud.subnetwork:
+ network: "{{ hcloud_network_name }}"
+ type: server
+ network_zone: eu-central
+ ip_range: 10.0.1.0/24
+ register: test_subnetwork
+
+- name: Create test_server
+ hetzner.hcloud.server:
+ name: "{{ hcloud_server_name }}"
+ server_type: cx11
+ image: ubuntu-22.04
+ state: stopped
+ register: test_server
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/server_network/tasks/test.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/server_network/tasks/test.yml
index a77f2e30a..a232ae5d5 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/server_network/tasks/test.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/server_network/tasks/test.yml
@@ -1,222 +1,152 @@
# Copyright: (c) 2019, Hetzner Cloud GmbH <info@hetzner-cloud.de>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
---
-- name: setup network
- hetzner.hcloud.network:
- name: "{{ hcloud_network_name }}"
- ip_range: "10.0.0.0/8"
- state: present
- register: network
-- name: verify setup network
- assert:
- that:
- - network is success
-
-- name: setup subnetwork
- hetzner.hcloud.subnetwork:
- network: "{{ hcloud_network_name }}"
- ip_range: "10.0.0.0/16"
- type: "server"
- network_zone: "eu-central"
- state: present
- register: subnetwork
-- name: verify subnetwork
- assert:
- that:
- - subnetwork is success
-
-- name: setup server
- hetzner.hcloud.server:
- name: "{{hcloud_server_name}}"
- server_type: cx11
- image: ubuntu-22.04
- state: started
- location: "fsn1"
- register: server
-- name: verify setup server
- assert:
- that:
- - server is success
-
-- name: test missing required parameters on create server network
+- name: Test missing required parameters
hetzner.hcloud.server_network:
state: present
- register: result
ignore_errors: true
-- name: verify fail test missing required parameters on create server network
- assert:
+ register: result
+- name: Verify missing required parameters
+ ansible.builtin.assert:
that:
- result is failed
- 'result.msg == "missing required arguments: network, server"'
-- name: test create server network with checkmode
+- name: Test create with checkmode
hetzner.hcloud.server_network:
network: "{{ hcloud_network_name }}"
- server: "{{hcloud_server_name}}"
+ server: "{{ hcloud_server_name }}"
state: present
- register: result
check_mode: true
-- name: verify test create server network with checkmode
- assert:
+ register: result
+- name: Verify create with checkmode
+ ansible.builtin.assert:
that:
- result is changed
-- name: test create server network
+- name: Test create
hetzner.hcloud.server_network:
network: "{{ hcloud_network_name }}"
- server: "{{hcloud_server_name}}"
+ server: "{{ hcloud_server_name }}"
state: present
- register: serverNetwork
-- name: verify create server network
- assert:
+ register: result
+- name: Verify create
+ ansible.builtin.assert:
that:
- - serverNetwork is changed
- - serverNetwork.hcloud_server_network.network == hcloud_network_name
- - serverNetwork.hcloud_server_network.server == hcloud_server_name
+ - result is changed
+ - result.hcloud_server_network.network == hcloud_network_name
+ - result.hcloud_server_network.server == hcloud_server_name
-- name: test create server network idempotency
+- name: Test create idempotency
hetzner.hcloud.server_network:
network: "{{ hcloud_network_name }}"
- server: "{{hcloud_server_name}}"
+ server: "{{ hcloud_server_name }}"
state: present
- register: serverNetwork
-- name: verify create server network idempotency
- assert:
+ register: result
+- name: Verify create idempotency
+ ansible.builtin.assert:
that:
- - serverNetwork is not changed
+ - result is not changed
-- name: test absent server network
+- name: Test delete
hetzner.hcloud.server_network:
network: "{{ hcloud_network_name }}"
- server: "{{hcloud_server_name}}"
+ server: "{{ hcloud_server_name }}"
state: absent
register: result
-- name: verify test absent server network
- assert:
+- name: Verify delete
+ ansible.builtin.assert:
that:
- result is changed
-- name: test create server network with specified ip
+- name: Test create with ip
hetzner.hcloud.server_network:
network: "{{ hcloud_network_name }}"
- server: "{{hcloud_server_name}}"
- ip: "10.0.0.2"
+ server: "{{ hcloud_server_name }}"
+ ip: "10.0.1.2"
state: present
- register: serverNetwork
-- name: verify create server network with specified ip
- assert:
+ register: result
+- name: Verify create with ip
+ ansible.builtin.assert:
that:
- - serverNetwork is changed
- - serverNetwork.hcloud_server_network.network == hcloud_network_name
- - serverNetwork.hcloud_server_network.server == hcloud_server_name
- - serverNetwork.hcloud_server_network.ip == "10.0.0.2"
+ - result is changed
+ - result.hcloud_server_network.network == hcloud_network_name
+ - result.hcloud_server_network.server == hcloud_server_name
+ - result.hcloud_server_network.ip == "10.0.1.2"
-- name: cleanup create server network with specified ip
+- name: Test delete with ip
hetzner.hcloud.server_network:
network: "{{ hcloud_network_name }}"
- server: "{{hcloud_server_name}}"
+ server: "{{ hcloud_server_name }}"
state: absent
register: result
-- name: verify cleanup create server network with specified ip
- assert:
+- name: Verify delete with ip
+ ansible.builtin.assert:
that:
- result is changed
-- name: test create server network with alias ips
+- name: Test create with alias ips
hetzner.hcloud.server_network:
network: "{{ hcloud_network_name }}"
- server: "{{hcloud_server_name}}"
- ip: "10.0.0.2"
+ server: "{{ hcloud_server_name }}"
+ ip: "10.0.1.2"
alias_ips:
- - "10.0.1.2"
- - "10.0.2.3"
+ - "10.0.1.10"
+ - "10.0.1.11"
state: present
- register: serverNetwork
-- name: verify create server network with alias ips
- assert:
+ register: result
+- name: Verify create with alias ips
+ ansible.builtin.assert:
that:
- - serverNetwork is changed
- - serverNetwork.hcloud_server_network.network == hcloud_network_name
- - serverNetwork.hcloud_server_network.server == hcloud_server_name
- - serverNetwork.hcloud_server_network.ip == "10.0.0.2"
- - 'serverNetwork.hcloud_server_network.alias_ips[0] == "10.0.2.3"'
- - 'serverNetwork.hcloud_server_network.alias_ips[1] == "10.0.1.2"'
+ - result is changed
+ - result.hcloud_server_network.network == hcloud_network_name
+ - result.hcloud_server_network.server == hcloud_server_name
+ - result.hcloud_server_network.ip == "10.0.1.2"
+ - result.hcloud_server_network.alias_ips[0] == "10.0.1.10"
+ - result.hcloud_server_network.alias_ips[1] == "10.0.1.11"
-- name: test update server network with alias ips
+- name: Test update with alias ips
hetzner.hcloud.server_network:
network: "{{ hcloud_network_name }}"
- server: "{{hcloud_server_name}}"
- ip: "10.0.0.2"
+ server: "{{ hcloud_server_name }}"
+ ip: "10.0.1.2"
alias_ips:
- - "10.0.2.3"
- - "10.0.3.1"
+ - "10.0.1.10"
+ - "10.0.1.20"
state: present
- register: serverNetwork
-- name: verify create server network with alias ips
- assert:
+ register: result
+- name: Verify update with alias ips
+ ansible.builtin.assert:
that:
- - serverNetwork is changed
- - serverNetwork.hcloud_server_network.network == hcloud_network_name
- - serverNetwork.hcloud_server_network.server == hcloud_server_name
- - serverNetwork.hcloud_server_network.ip == "10.0.0.2"
- - 'serverNetwork.hcloud_server_network.alias_ips[0] == "10.0.2.3"'
- - 'serverNetwork.hcloud_server_network.alias_ips[1] == "10.0.3.1"'
+ - result is changed
+ - result.hcloud_server_network.network == hcloud_network_name
+ - result.hcloud_server_network.server == hcloud_server_name
+ - result.hcloud_server_network.ip == "10.0.1.2"
+ - result.hcloud_server_network.alias_ips[0] == "10.0.1.10"
+ - result.hcloud_server_network.alias_ips[1] == "10.0.1.20"
-- name: test update server network with alias ips idempotency
+- name: Test update with alias ips idempotency
hetzner.hcloud.server_network:
network: "{{ hcloud_network_name }}"
- server: "{{hcloud_server_name}}"
- ip: "10.0.0.2"
+ server: "{{ hcloud_server_name }}"
+ ip: "10.0.1.2"
alias_ips:
- - "10.0.2.3"
- - "10.0.3.1"
+ - "10.0.1.10"
+ - "10.0.1.20"
state: present
- register: serverNetwork
-- name: verify create server network with alias ips idempotency
- assert:
- that:
- - serverNetwork is not changed
-
-- name: cleanup create server network with alias ips
- hetzner.hcloud.server_network:
- network: "{{ hcloud_network_name }}"
- server: "{{hcloud_server_name}}"
- state: absent
- register: result
-- name: verify cleanup create server network with alias ips
- assert:
- that:
- - result is changed
-
-- name: cleanup server
- hetzner.hcloud.server:
- name: "{{ hcloud_server_name }}"
- state: absent
register: result
-- name: verify cleanup server
- assert:
+- name: Verify update with alias ips idempotency
+ ansible.builtin.assert:
that:
- - result is success
+ - result is not changed
-- name: cleanup subnetwork
- hetzner.hcloud.subnetwork:
+- name: Test delete with alias ips
+ hetzner.hcloud.server_network:
network: "{{ hcloud_network_name }}"
- ip_range: "10.0.0.0/16"
- type: "server"
- network_zone: "eu-central"
+ server: "{{ hcloud_server_name }}"
state: absent
register: result
-- name: verify cleanup subnetwork
- assert:
+- name: Verify delete with alias ips
+ ansible.builtin.assert:
that:
- result is changed
-
-- name: cleanup
- hetzner.hcloud.network:
- name: "{{hcloud_network_name}}"
- state: absent
- register: result
-- name: verify cleanup
- assert:
- that:
- - result is success
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/server_type_info/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/server_type_info/aliases
index 0e887600e..18b11115e 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/server_type_info/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/server_type_info/aliases
@@ -1,2 +1,3 @@
cloud/hcloud
+gather_facts/no
azp/group2
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/server_type_info/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/server_type_info/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/server_type_info/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/server_type_info/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/ssh_key/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/ssh_key/aliases
index 0e887600e..18b11115e 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/ssh_key/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/ssh_key/aliases
@@ -1,2 +1,3 @@
cloud/hcloud
+gather_facts/no
azp/group2
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/ssh_key/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/ssh_key/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/ssh_key/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/ssh_key/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/ssh_key/tasks/test.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/ssh_key/tasks/test.yml
index 41b9c351d..e314266a4 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/ssh_key/tasks/test.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/ssh_key/tasks/test.yml
@@ -133,7 +133,8 @@
assert:
that:
- result is failed
- - 'result.msg == "SSH key with the same fingerprint already exists"'
+ - result.failure.code == "uniqueness_error"
+ - result.msg == "SSH key with the same fingerprint already exists"
- name: test delete ssh key
hetzner.hcloud.ssh_key:
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/ssh_key_info/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/ssh_key_info/aliases
index 0e887600e..18b11115e 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/ssh_key_info/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/ssh_key_info/aliases
@@ -1,2 +1,3 @@
cloud/hcloud
+gather_facts/no
azp/group2
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/ssh_key_info/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/ssh_key_info/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/ssh_key_info/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/ssh_key_info/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/subnetwork/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/subnetwork/aliases
index a6a90a6bf..c96df02ff 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/subnetwork/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/subnetwork/aliases
@@ -1,2 +1,3 @@
cloud/hcloud
+gather_facts/no
azp/group3
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/subnetwork/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/subnetwork/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/subnetwork/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/subnetwork/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/volume/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/volume/aliases
index 0e887600e..18b11115e 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/volume/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/volume/aliases
@@ -1,2 +1,3 @@
cloud/hcloud
+gather_facts/no
azp/group2
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/volume/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/volume/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/volume/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/volume/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/volume/tasks/test.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/volume/tasks/test.yml
index fd47d5343..9b586e051 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/volume/tasks/test.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/volume/tasks/test.yml
@@ -6,7 +6,7 @@
name: "{{hcloud_server_name}}"
server_type: cx11
image: ubuntu-22.04
- state: started
+ state: stopped
location: "fsn1"
register: vol_server
- name: verify setup server
@@ -208,7 +208,8 @@
assert:
that:
- result is failed
- - 'result.msg == "volume deletion is protected"'
+ - result.failure.code == "protected"
+ - result.msg == "volume deletion is protected"
- name: test update Volume delete protection
hetzner.hcloud.volume:
@@ -254,7 +255,8 @@
assert:
that:
- result is failed
- - 'result.msg == "volume deletion is protected"'
+ - result.failure.code == "protected"
+ - result.msg == "volume deletion is protected"
- name: test update Volume delete protection
hetzner.hcloud.volume:
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/volume_info/aliases b/ansible_collections/hetzner/hcloud/tests/integration/targets/volume_info/aliases
index 0e887600e..18b11115e 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/volume_info/aliases
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/volume_info/aliases
@@ -1,2 +1,3 @@
cloud/hcloud
+gather_facts/no
azp/group2
diff --git a/ansible_collections/hetzner/hcloud/tests/integration/targets/volume_info/defaults/main/common.yml b/ansible_collections/hetzner/hcloud/tests/integration/targets/volume_info/defaults/main/common.yml
index e316b233c..159bb2088 100644
--- a/ansible_collections/hetzner/hcloud/tests/integration/targets/volume_info/defaults/main/common.yml
+++ b/ansible_collections/hetzner/hcloud/tests/integration/targets/volume_info/defaults/main/common.yml
@@ -8,5 +8,5 @@ hcloud_prefix: "tests"
# Used to namespace resources created by concurrent test pipelines/targets
hcloud_run_ns: "{{ hcloud_prefix | md5 }}"
-hcloud_role_ns: "{{ role_name | split('_') | map('first') | join() }}"
+hcloud_role_ns: "{{ role_name | split('_') | map('batch', 2) | map('first') | flatten() | join() }}"
hcloud_ns: "ansible-{{ hcloud_run_ns }}-{{ hcloud_role_ns }}"
diff --git a/ansible_collections/hetzner/hcloud/tests/sanity/ignore-2.13.txt b/ansible_collections/hetzner/hcloud/tests/sanity/ignore-2.13.txt
deleted file mode 100644
index 185a458e3..000000000
--- a/ansible_collections/hetzner/hcloud/tests/sanity/ignore-2.13.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-plugins/inventory/hcloud.py validate-modules:illegal-future-imports
-plugins/inventory/hcloud.py validate-modules:import-before-documentation
-plugins/inventory/hcloud.py yamllint:unparsable-with-libyaml # bug in ansible-test - https://github.com/ansible/ansible/issues/82353
-plugins/modules/certificate_info.py validate-modules:illegal-future-imports
-plugins/modules/certificate_info.py validate-modules:import-before-documentation
-plugins/modules/certificate.py validate-modules:illegal-future-imports
-plugins/modules/certificate.py validate-modules:import-before-documentation
-plugins/modules/datacenter_info.py validate-modules:illegal-future-imports
-plugins/modules/datacenter_info.py validate-modules:import-before-documentation
-plugins/modules/firewall_info.py validate-modules:illegal-future-imports
-plugins/modules/firewall_info.py validate-modules:import-before-documentation
-plugins/modules/firewall_resource.py validate-modules:illegal-future-imports
-plugins/modules/firewall_resource.py validate-modules:import-before-documentation
-plugins/modules/firewall.py validate-modules:illegal-future-imports
-plugins/modules/firewall.py validate-modules:import-before-documentation
-plugins/modules/floating_ip_info.py validate-modules:illegal-future-imports
-plugins/modules/floating_ip_info.py validate-modules:import-before-documentation
-plugins/modules/floating_ip.py validate-modules:illegal-future-imports
-plugins/modules/floating_ip.py validate-modules:import-before-documentation
-plugins/modules/image_info.py validate-modules:illegal-future-imports
-plugins/modules/image_info.py validate-modules:import-before-documentation
-plugins/modules/iso_info.py validate-modules:illegal-future-imports
-plugins/modules/iso_info.py validate-modules:import-before-documentation
-plugins/modules/load_balancer_info.py validate-modules:illegal-future-imports
-plugins/modules/load_balancer_info.py validate-modules:import-before-documentation
-plugins/modules/load_balancer_network.py validate-modules:illegal-future-imports
-plugins/modules/load_balancer_network.py validate-modules:import-before-documentation
-plugins/modules/load_balancer_service.py validate-modules:illegal-future-imports
-plugins/modules/load_balancer_service.py validate-modules:import-before-documentation
-plugins/modules/load_balancer_target.py validate-modules:illegal-future-imports
-plugins/modules/load_balancer_target.py validate-modules:import-before-documentation
-plugins/modules/load_balancer_type_info.py validate-modules:illegal-future-imports
-plugins/modules/load_balancer_type_info.py validate-modules:import-before-documentation
-plugins/modules/load_balancer.py validate-modules:illegal-future-imports
-plugins/modules/load_balancer.py validate-modules:import-before-documentation
-plugins/modules/location_info.py validate-modules:illegal-future-imports
-plugins/modules/location_info.py validate-modules:import-before-documentation
-plugins/modules/network_info.py validate-modules:illegal-future-imports
-plugins/modules/network_info.py validate-modules:import-before-documentation
-plugins/modules/network.py validate-modules:illegal-future-imports
-plugins/modules/network.py validate-modules:import-before-documentation
-plugins/modules/placement_group.py validate-modules:illegal-future-imports
-plugins/modules/placement_group.py validate-modules:import-before-documentation
-plugins/modules/primary_ip_info.py validate-modules:illegal-future-imports
-plugins/modules/primary_ip_info.py validate-modules:import-before-documentation
-plugins/modules/primary_ip.py validate-modules:illegal-future-imports
-plugins/modules/primary_ip.py validate-modules:import-before-documentation
-plugins/modules/rdns.py validate-modules:illegal-future-imports
-plugins/modules/rdns.py validate-modules:import-before-documentation
-plugins/modules/route.py validate-modules:illegal-future-imports
-plugins/modules/route.py validate-modules:import-before-documentation
-plugins/modules/server_info.py validate-modules:illegal-future-imports
-plugins/modules/server_info.py validate-modules:import-before-documentation
-plugins/modules/server_network.py validate-modules:illegal-future-imports
-plugins/modules/server_network.py validate-modules:import-before-documentation
-plugins/modules/server_type_info.py validate-modules:illegal-future-imports
-plugins/modules/server_type_info.py validate-modules:import-before-documentation
-plugins/modules/server.py validate-modules:illegal-future-imports
-plugins/modules/server.py validate-modules:import-before-documentation
-plugins/modules/ssh_key_info.py validate-modules:illegal-future-imports
-plugins/modules/ssh_key_info.py validate-modules:import-before-documentation
-plugins/modules/ssh_key.py validate-modules:illegal-future-imports
-plugins/modules/ssh_key.py validate-modules:import-before-documentation
-plugins/modules/subnetwork.py validate-modules:illegal-future-imports
-plugins/modules/subnetwork.py validate-modules:import-before-documentation
-plugins/modules/volume_info.py validate-modules:illegal-future-imports
-plugins/modules/volume_info.py validate-modules:import-before-documentation
-plugins/modules/volume.py validate-modules:illegal-future-imports
-plugins/modules/volume.py validate-modules:import-before-documentation
diff --git a/ansible_collections/hetzner/hcloud/tests/unit/conftest.py b/ansible_collections/hetzner/hcloud/tests/unit/conftest.py
new file mode 100644
index 000000000..af891afc2
--- /dev/null
+++ b/ansible_collections/hetzner/hcloud/tests/unit/conftest.py
@@ -0,0 +1,15 @@
+from __future__ import annotations
+
+from unittest.mock import MagicMock
+
+import pytest
+
+
+@pytest.fixture()
+def module():
+ obj = MagicMock()
+ obj.params = {
+ "api_token": "dummy",
+ "api_endpoint": "https://api.hetzner.cloud/v1",
+ }
+ return obj
diff --git a/ansible_collections/hetzner/hcloud/tests/unit/inventory/test_hcloud.py b/ansible_collections/hetzner/hcloud/tests/unit/inventory/test_hcloud.py
new file mode 100644
index 000000000..b5d3b777b
--- /dev/null
+++ b/ansible_collections/hetzner/hcloud/tests/unit/inventory/test_hcloud.py
@@ -0,0 +1,75 @@
+from __future__ import annotations
+
+import json
+from unittest.mock import MagicMock
+
+from plugins.inventory.hcloud import InventoryModule, first_ipv6_address
+from plugins.module_utils.vendor.hcloud.servers import BoundServer
+
+
+def test_first_ipv6_address():
+ found = first_ipv6_address("2001:db8::/64")
+ assert isinstance(found, str)
+ assert found == "2001:db8::1"
+
+
+def test_build_inventory_server():
+ client = MagicMock()
+ inventory = InventoryModule()
+ inventory.get_option = MagicMock()
+ inventory.get_option.return_value = None
+
+ server = BoundServer(
+ client,
+ {
+ "id": 45921624,
+ "name": "my-server",
+ "labels": {},
+ "status": "running",
+ "public_net": {
+ "ipv4": {
+ "id": 56583278,
+ "ip": "127.0.0.1",
+ "blocked": False,
+ "dns_ptr": "static.1.0.0.127.clients.your-server.de",
+ },
+ "ipv6": {"id": 56583279, "ip": "2001:db8::/64", "blocked": False, "dns_ptr": []},
+ "floating_ips": [],
+ "firewalls": [],
+ },
+ "private_net": [],
+ "server_type": {"id": 1, "name": "cx11", "architecture": "x86"},
+ "datacenter": {
+ "id": 3,
+ "name": "hel1-dc2",
+ "location": {"id": 3, "name": "hel1"},
+ },
+ "image": {"id": 114690387, "name": "debian-12", "os_flavor": "debian", "os_version": "12"},
+ },
+ )
+ # pylint: disable=protected-access
+ variables = inventory._build_inventory_server(server)
+
+ # Ensure the host_vars are json serializable
+ json.dumps(variables)
+
+ assert variables == {
+ "id": 45921624,
+ "name": "my-server",
+ "status": "running",
+ "type": "cx11",
+ "server_type": "cx11",
+ "architecture": "x86",
+ "location": "hel1",
+ "datacenter": "hel1-dc2",
+ "labels": {},
+ "ipv4": "127.0.0.1",
+ "ipv6": "2001:db8::1",
+ "ipv6_network": "2001:db8::",
+ "ipv6_network_mask": "64",
+ "private_networks": [],
+ "image_id": 114690387,
+ "image_name": "debian-12",
+ "image_os_flavor": "debian",
+ "ansible_host": None,
+ }
diff --git a/ansible_collections/hetzner/hcloud/tests/unit/module_utils/test_hcloud.py b/ansible_collections/hetzner/hcloud/tests/unit/module_utils/test_hcloud.py
index c1a9ffb77..2f5e7509f 100644
--- a/ansible_collections/hetzner/hcloud/tests/unit/module_utils/test_hcloud.py
+++ b/ansible_collections/hetzner/hcloud/tests/unit/module_utils/test_hcloud.py
@@ -2,8 +2,8 @@ from __future__ import annotations
import traceback
from datetime import datetime, timezone
-from unittest.mock import MagicMock
+import pytest
from ansible_collections.hetzner.hcloud.plugins.module_utils.hcloud import AnsibleHCloud
from ansible_collections.hetzner.hcloud.plugins.module_utils.vendor.hcloud import (
APIException,
@@ -16,12 +16,7 @@ from ansible_collections.hetzner.hcloud.plugins.module_utils.vendor.hcloud.actio
)
-def test_hcloud_fail_json_hcloud():
- module = MagicMock()
- module.params = {
- "api_token": "fake_token",
- "api_endpoint": "https://api.hetzner.cloud/v1",
- }
+def test_hcloud_fail_json_hcloud(module):
AnsibleHCloud.represent = "hcloud_test"
hcloud = AnsibleHCloud(module)
@@ -123,3 +118,28 @@ def test_hcloud_fail_json_hcloud():
}
},
)
+
+
+@pytest.mark.parametrize(
+ ("kwargs", "msg"),
+ [
+ ({"required": ["key1"]}, None),
+ ({"required": ["missing"]}, "missing required arguments: missing"),
+ ({"required_one_of": [["key1", "missing"]]}, None),
+ ({"required_one_of": [["missing1", "missing2"]]}, "one of the following is required: missing1, missing2"),
+ ],
+)
+def test_hcloud_fail_on_invalid_params(module, kwargs, msg):
+ AnsibleHCloud.represent = "hcloud_test"
+ hcloud = AnsibleHCloud(module)
+
+ module.params = {
+ "key1": "value",
+ "key2": "value",
+ }
+
+ hcloud.fail_on_invalid_params(**kwargs)
+ if msg is None:
+ module.fail_json.assert_not_called()
+ else:
+ module.fail_json.assert_called_with(msg=msg)
diff --git a/ansible_collections/hpe/nimble/.gitignore b/ansible_collections/hpe/nimble/.gitignore
deleted file mode 100644
index b008ceb97..000000000
--- a/ansible_collections/hpe/nimble/.gitignore
+++ /dev/null
@@ -1,132 +0,0 @@
-/tests/output/
-/changelogs/.plugin-cache.yml
-
-# Byte-compiled / optimized / DLL files
-__pycache__/
-*.py[cod]
-*$py.class
-
-# C extensions
-*.so
-
-# Distribution / packaging
-.Python
-build/
-develop-eggs/
-dist/
-downloads/
-eggs/
-.eggs/
-lib/
-lib64/
-parts/
-sdist/
-var/
-wheels/
-pip-wheel-metadata/
-share/python-wheels/
-*.egg-info/
-.installed.cfg
-*.egg
-MANIFEST
-
-# PyInstaller
-# Usually these files are written by a python script from a template
-# before PyInstaller builds the exe, so as to inject date/other infos into it.
-*.manifest
-*.spec
-
-# Installer logs
-pip-log.txt
-pip-delete-this-directory.txt
-
-# Unit test / coverage reports
-htmlcov/
-.tox/
-.nox/
-.coverage
-.coverage.*
-.cache
-nosetests.xml
-coverage.xml
-*.cover
-*.py,cover
-.hypothesis/
-.pytest_cache/
-
-# Translations
-*.mo
-*.pot
-
-# Django stuff:
-*.log
-local_settings.py
-db.sqlite3
-db.sqlite3-journal
-
-# Flask stuff:
-instance/
-.webassets-cache
-
-# Scrapy stuff:
-.scrapy
-
-# Sphinx documentation
-docs/_build/
-
-# PyBuilder
-target/
-
-# Jupyter Notebook
-.ipynb_checkpoints
-
-# IPython
-profile_default/
-ipython_config.py
-
-# pyenv
-.python-version
-
-# pipenv
-# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
-# However, in case of collaboration, if having platform-specific dependencies or dependencies
-# having no cross-platform support, pipenv may install dependencies that don't work, or not
-# install all needed dependencies.
-#Pipfile.lock
-
-# PEP 582; used by e.g. github.com/David-OConnor/pyflow
-__pypackages__/
-
-# Celery stuff
-celerybeat-schedule
-celerybeat.pid
-
-# SageMath parsed files
-*.sage.py
-
-# Environments
-.env
-.venv
-env/
-venv/
-ENV/
-env.bak/
-venv.bak/
-
-# Spyder project settings
-.spyderproject
-.spyproject
-
-# Rope project settings
-.ropeproject
-
-# mkdocs documentation
-/site
-
-# mypy
-.mypy_cache/
-.dmypy.json
-dmypy.json
-
-# Pyre type checker
-.pyre/
diff --git a/ansible_collections/hpe/nimble/CHANGELOG.rst b/ansible_collections/hpe/nimble/CHANGELOG.rst
deleted file mode 100644
index 85b0e2c25..000000000
--- a/ansible_collections/hpe/nimble/CHANGELOG.rst
+++ /dev/null
@@ -1,104 +0,0 @@
-===============================================================
-HPE Nimble Storage Content Collection for Ansible Release Notes
-===============================================================
-
-.. contents:: Topics
-
-v1.1.3
-======
-
-Release Summary
----------------
-
-This release provides compatibility with Ansible v4.0.0
-
-Minor Changes
--------------
-
-- Updated changelog file to correct the version
-
-v1.1.2
-======
-
-Release Summary
----------------
-
-This release provides compatibility with Ansible v4.0.0
-
-Minor Changes
--------------
-
-- Updated changelog file to correct the version
-
-v1.1.1
-======
-
-Release Summary
----------------
-
-This release provides compatibility with Ansible v4.0.0
-
-Minor Changes
--------------
-
-- Updated galaxy file to correct the version
-
-v1.1.0
-======
-
-Release Summary
----------------
-
-This release provides compatibility with Ansible v4.0.0
-
-Minor Changes
--------------
-
-- Made it compatible with Ansible v4.0.0
-
-v1.0.1
-======
-
-Release Summary
----------------
-
-This release provides compatibility with Ansible v3.0.0
-
-Minor Changes
--------------
-
-- Made it compatible with Ansible v3.0.0
-
-v1.0.0
-======
-
-Release Summary
----------------
-
-First release of the `HPE Nimble Storage Content Collection for Ansible`.
-
-New Modules
------------
-
-- hpe_nimble_access_control_record - Manage the HPE Nimble Storage access control records
-- hpe_nimble_array - Manage the HPE Nimble Storage array
-- hpe_nimble_chap_user - Manage the HPE Nimble Storage CHAP users
-- hpe_nimble_disk - Manage the HPE Nimble Storage disks
-- hpe_nimble_encryption - Manage the HPE Nimble Storage encryption
-- hpe_nimble_fc - Manage the HPE Nimble Storage fibre channel
-- hpe_nimble_group - Manage the HPE Nimble Storage groups
-- hpe_nimble_info - Collect information from HPE Nimble Storage array
-- hpe_nimble_initiator_group - Manage the HPE Nimble Storage initiator groups
-- hpe_nimble_network - Manage the HPE Nimble Storage network configuration
-- hpe_nimble_partner - Manage the HPE Nimble Storage replication partners
-- hpe_nimble_performance_policy - Manage the HPE Nimble Storage performance policies
-- hpe_nimble_pool - Manage the HPE Nimble Storage pools
-- hpe_nimble_protection_schedule - Manage the HPE Nimble Storage protection schedules
-- hpe_nimble_protection_template - Manage the HPE Nimble Storage protection templates
-- hpe_nimble_shelf - Manage the HPE Nimble Storage shelves
-- hpe_nimble_snapshot_collection - Manage the HPE Nimble Storage snapshot collections
-- hpe_nimble_snapshot - Manage the HPE Nimble Storage snapshots
-- hpe_nimble_user - Manage the HPE Nimble Storage users
-- hpe_nimble_user_policy - Manage the HPE Nimble Storage user policies
-- hpe_nimble_volume - Manage the HPE Nimble Storage volumes
-- hpe_nimble_volume_collection - Manage the HPE Nimble Storage volume collections \ No newline at end of file
diff --git a/ansible_collections/hpe/nimble/FILES.json b/ansible_collections/hpe/nimble/FILES.json
deleted file mode 100644
index c33f99610..000000000
--- a/ansible_collections/hpe/nimble/FILES.json
+++ /dev/null
@@ -1,320 +0,0 @@
-{
- "files": [
- {
- "name": ".",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": ".gitignore",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b921ff80575e4fc2d564015ce59b67d23a4a0e1240ddc88889a5b66079934dbc",
- "format": 1
- },
- {
- "name": "CHANGELOG.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3d9f0cbb11a25a686b00ffd0e596970565a323214c2231afadde72e50ef1f3ee",
- "format": 1
- },
- {
- "name": "README.md",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "31f1b6613ef0d4a4b462abecdd0a88bdd42cbcac253595e9147644e8aba61944",
- "format": 1
- },
- {
- "name": "bindep.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8aee7049b6cd75dededbb0cadbf1c150750e2258b4a13fa2a12e215ed56b5473",
- "format": 1
- },
- {
- "name": "changelogs",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "changelogs/changelog.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "71875495e892e19e53b1083aacc56f292056bd145fcc1a7165e5c1c662b62448",
- "format": 1
- },
- {
- "name": "changelogs/config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "54200d257c93985fecf32a8e9da400ea25f644fcd8fcf648173f47458cb2036d",
- "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": "df18179bb2f5447a56ac92261a911649b96821c0b2c08eea62d5cc6b0195203f",
- "format": 1
- },
- {
- "name": "plugins",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "plugins/doc_fragments",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "plugins/doc_fragments/hpe_nimble.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b7545855e7c4fc6a142e610d09432dbd67715dedc24c59cc894df06244834da0",
- "format": 1
- },
- {
- "name": "plugins/module_utils",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "plugins/module_utils/hpe_nimble.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "32bf11fde1a3bc43877782e9fcc9f577759764cdb5ec376bd8f8c0d963a111c8",
- "format": 1
- },
- {
- "name": "plugins/modules",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "plugins/modules/hpe_nimble_access_control_record.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "52a5a9d5549ab1b239c90d9c7d4f953a44f236e3225e99ac8f037928f9a27f83",
- "format": 1
- },
- {
- "name": "plugins/modules/hpe_nimble_array.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2c1291da662f388a498e6a11155abab7e761f322341f2426771f6def4288078c",
- "format": 1
- },
- {
- "name": "plugins/modules/hpe_nimble_chap_user.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "081cab7ba722cafa093a2fbc9e40537fdd3fb4b72ca28ebcf4c48c2da3ef6001",
- "format": 1
- },
- {
- "name": "plugins/modules/hpe_nimble_disk.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f17fe677e14e80eb54a3bc6b34ef748b5d0010eb0fc64a58ec4c804616a6a7c8",
- "format": 1
- },
- {
- "name": "plugins/modules/hpe_nimble_encryption.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "23034eee1dfecf74557b17e0da2102850998f5a02e749473ddebddafd340a50b",
- "format": 1
- },
- {
- "name": "plugins/modules/hpe_nimble_fc.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "35a3141b0fa6794a1a1b3f3a42b2cc7d710a9b21526626a05123c94b2b5fd5d9",
- "format": 1
- },
- {
- "name": "plugins/modules/hpe_nimble_group.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "bff706d2a5ef5ee056b761f8512a3b71a737230894df29471f2f0eb274d91642",
- "format": 1
- },
- {
- "name": "plugins/modules/hpe_nimble_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0d5177886b913c4f9db645ff1db6373123c37475e33911f7e8ab3451baf85a52",
- "format": 1
- },
- {
- "name": "plugins/modules/hpe_nimble_initiator_group.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2df3e8217f1d2b2f60949e081a911ea88c52610d219682927a959e905b00fb8f",
- "format": 1
- },
- {
- "name": "plugins/modules/hpe_nimble_network.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "dad8c8634e44a7ebd1d3662d01adce040dd065616b874b25862169d338cf2e5c",
- "format": 1
- },
- {
- "name": "plugins/modules/hpe_nimble_partner.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3f578aa6178c4b3ecee4832330fc0c12a222cabc2ed0964fffe2122f9e7a422",
- "format": 1
- },
- {
- "name": "plugins/modules/hpe_nimble_performance_policy.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2c3e3ad323f7566de579c9791c426f939be3f30b99204a497a2c8a9f0f0b946e",
- "format": 1
- },
- {
- "name": "plugins/modules/hpe_nimble_pool.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "04c2e758f7cbbf80eee0f76ed3667f414cdaae8726e9ff72665564d7b89b785f",
- "format": 1
- },
- {
- "name": "plugins/modules/hpe_nimble_protection_schedule.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "77741320bc4cf2766f20e4eadb1feccf8acd398eca41914992f54017f89b2fec",
- "format": 1
- },
- {
- "name": "plugins/modules/hpe_nimble_protection_template.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2024701e15e8c1b198a053683ae3c2c8a5cf45e5170673743a23e3f1a4e7a29f",
- "format": 1
- },
- {
- "name": "plugins/modules/hpe_nimble_shelf.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a9c3c2ae537dd77a10d769e2cb6df1721bc80eb6c1906d401d6cb74cd32b462c",
- "format": 1
- },
- {
- "name": "plugins/modules/hpe_nimble_snapshot.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d4438bfd6a02de360e6ec93bde03e5be320f85577bb3f2e06fa0bbfe62e36d94",
- "format": 1
- },
- {
- "name": "plugins/modules/hpe_nimble_snapshot_collection.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "05dc62523978f6353815c39d823f48e699f3b2833e977a7cb7a041089d1b4297",
- "format": 1
- },
- {
- "name": "plugins/modules/hpe_nimble_user.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "dbb3ac98864ed783d8aaf024c7a546d497ac19704508bda27b81049e7d156d89",
- "format": 1
- },
- {
- "name": "plugins/modules/hpe_nimble_user_policy.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cfd56e871e83439c0cd677a462ce647d52aedda26c22e99077c4f53fd0607c32",
- "format": 1
- },
- {
- "name": "plugins/modules/hpe_nimble_volume.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8791363eb74273ef1f3b81f44613cc0b3d482869089de67b41ccffeec5e0bab4",
- "format": 1
- },
- {
- "name": "plugins/modules/hpe_nimble_volume_collection.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d79bf8a0c5b5a45e2fd52d84f3478fbe5aa2e06732f04dcb08aede18c02a1d32",
- "format": 1
- },
- {
- "name": "requirements.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d761b9ae3fc4cbf00ad0bffbbea7699a9d5c2c052d0754a7ccc683abd903fc54",
- "format": 1
- },
- {
- "name": "tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/sanity",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/sanity/ignore-2.10.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d46bd10bddda0a5438eb973c22511dd8d89dcbc7633a6f8c4b37b591c9fc218b",
- "format": 1
- },
- {
- "name": "tests/sanity/ignore-2.11.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d46bd10bddda0a5438eb973c22511dd8d89dcbc7633a6f8c4b37b591c9fc218b",
- "format": 1
- },
- {
- "name": "tests/sanity/ignore-2.12.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d46bd10bddda0a5438eb973c22511dd8d89dcbc7633a6f8c4b37b591c9fc218b",
- "format": 1
- },
- {
- "name": "tests/sanity/ignore-2.9.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d46bd10bddda0a5438eb973c22511dd8d89dcbc7633a6f8c4b37b591c9fc218b",
- "format": 1
- }
- ],
- "format": 1
-} \ No newline at end of file
diff --git a/ansible_collections/hpe/nimble/MANIFEST.json b/ansible_collections/hpe/nimble/MANIFEST.json
deleted file mode 100644
index f427e4dde..000000000
--- a/ansible_collections/hpe/nimble/MANIFEST.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "collection_info": {
- "namespace": "hpe",
- "name": "nimble",
- "version": "1.1.4",
- "authors": [
- "HPE Nimble Storage <nimble-dcs-storage-automation-eng@hpe.com>"
- ],
- "readme": "README.md",
- "tags": [
- "storage"
- ],
- "description": "HPE Nimble Storage Content Collection for Ansible",
- "license": [
- "Apache-2.0"
- ],
- "license_file": null,
- "dependencies": {},
- "repository": "https://github.com/hpe-storage/nimble-ansible-modules",
- "documentation": "https://hpe-storage.github.io/nimble-ansible-modules",
- "homepage": "http://hpe.com/storage/nimble",
- "issues": "https://github.com/hpe-storage/nimble-ansible-modules/issues"
- },
- "file_manifest_file": {
- "name": "FILES.json",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4a87bd6b7880bec9b4c323165c4140540867e4963c5af796f88e88a2b5228d70",
- "format": 1
- },
- "format": 1
-} \ No newline at end of file
diff --git a/ansible_collections/hpe/nimble/README.md b/ansible_collections/hpe/nimble/README.md
deleted file mode 100644
index 162067904..000000000
--- a/ansible_collections/hpe/nimble/README.md
+++ /dev/null
@@ -1,98 +0,0 @@
-# HPE Nimble Storage Content Collection for Ansible
-
-## Requirements
-
-- Ansible 2.9 or later
-- Python 3.6 or later
-- HPE Nimble Storage SDK for Python
-- HPE Nimble Storage arrays running NimbleOS 5.0 or later
-
-## Installation
-
-Install the HPE Nimble Storage array collection on your Ansible management host.
-
-```
-ansible-galaxy collection install hpe.nimble
-```
-
-## Available Modules
-
-- hpe_nimble_access_control_record - Manage the HPE Nimble Storage access control records
-- hpe_nimble_array - Manage the HPE Nimble Storage array
-- hpe_nimble_chap_user - Manage the HPE Nimble Storage CHAP users
-- hpe_nimble_disk - Manage the HPE Nimble Storage disks
-- hpe_nimble_encryption - Manage the HPE Nimble Storage encryption
-- hpe_nimble_fc - Manage the HPE Nimble Storage fibre channel
-- hpe_nimble_group - Manage the HPE Nimble Storage groups
-- hpe_nimble_info - Collect information from HPE Nimble Storage array
-- hpe_nimble_initiator_group - Manage the HPE Nimble Storage initiator groups
-- hpe_nimble_network - Manage the HPE Nimble Storage network configuration
-- hpe_nimble_partner - Manage the HPE Nimble Storage replication partners
-- hpe_nimble_performance_policy - Manage the HPE Nimble Storage performance policies
-- hpe_nimble_pool - Manage the HPE Nimble Storage pools
-- hpe_nimble_protection_schedule - Manage the HPE Nimble Storage protection schedules
-- hpe_nimble_protection_template - Manage the HPE Nimble Storage protection templates
-- hpe_nimble_shelf - Manage the HPE Nimble Storage shelves
-- hpe_nimble_snapshot_collection - Manage the HPE Nimble Storage snapshot collections
-- hpe_nimble_snapshot - Manage the HPE Nimble Storage snapshots
-- hpe_nimble_user - Manage the HPE Nimble Storage users
-- hpe_nimble_user_policy - Manage the HPE Nimble Storage user policies
-- hpe_nimble_volume - Manage the HPE Nimble Storage volumes
-- hpe_nimble_volume_collection - Manage the HPE Nimble Storage volume collections
-
-## Support
-
-HPE Nimble Storage Content Collection for Ansible is supported by HPE when used with HPE Nimble Storage arrays on valid support contracts. Please send an email to [support@nimblestorage.com](mailto:support@nimblestorage.com) to get started with any issue you might need assistance with. Engage with your HPE representative for other means on how to get in touch with Nimble support directly.
-
-## Releasing, Versioning and Deprecation
-
-This collection follows [Semantic Versioning](https://semver.org/). More details on versioning can be found [in the Ansible docs](https://docs.ansible.com/ansible/latest/dev_guide/developing_collections.html#collection-versions).
-
-We plan to regularly release new minor or bugfix versions once new features or bugfixes have been implemented.
-
-Releasing the current major version happens from the `main` branch. We will create a `stable-1` branch for 1.x.y versions once we start working on a 2.0.0 release, to allow backporting bugfixes and features from the 2.0.0 branch (`main`) to `stable-1`. A `stable-2` branch will be created once we work on a 3.0.0 release, and so on.
-
-We currently are not planning any deprecations or new major releases like 2.0.0 containing backwards incompatible changes. If backwards incompatible changes are needed, we plan to deprecate the old behavior as early as possible. We also plan to backport at least bugfixes for the old major version for some time after releasing a new major version. We will not block community members from backporting other bugfixes and features from the latest stable version to older release branches, under the condition that these backports are of reasonable quality.
-
-## License
-
-HPE Nimble Storage Content Collection for Ansible is released under the GPL-3.0 license.
-
- Copyright (C) 2021 Hewlett Packard Enterprise Development LP
-
- This program 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.
-
- This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
-
-See [LICENSE](https://github.com/hpe-storage/nimble-ansible-modules/blob/master/LICENSE) for the full terms.
-
-The modules interfacing with the array SDKs are released under the Apache-2.0 license.
-
- Copyright 2020 Hewlett Packard Enterprise Development LP
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-See [MODULE-LICENSE](https://github.com/hpe-storage/nimble-ansible-modules/blob/master/MODULE-LICENSE) for the full terms.
-
-## Code of Conduct
-
-This repository adheres to the [Ansible Community code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html)
diff --git a/ansible_collections/hpe/nimble/bindep.txt b/ansible_collections/hpe/nimble/bindep.txt
deleted file mode 100644
index 234903cca..000000000
--- a/ansible_collections/hpe/nimble/bindep.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-# This is a cross-platform list tracking distribution packages needed by tests;
-# see https://docs.openstack.org/infra/bindep/ for additional information.
-
-libyaml-devel [test platform:rpm]
-libyaml-dev [test platform:dpkg]
-python3-devel [test platform:rpm]
-python3 [test platform:rpm] \ No newline at end of file
diff --git a/ansible_collections/hpe/nimble/changelogs/changelog.yaml b/ansible_collections/hpe/nimble/changelogs/changelog.yaml
deleted file mode 100644
index 8675131e2..000000000
--- a/ansible_collections/hpe/nimble/changelogs/changelog.yaml
+++ /dev/null
@@ -1,100 +0,0 @@
-ancestor: null
-releases:
-
- 1.1.3:
- changes:
- release_summary: 'This patch release provides compatibility with Ansible v4.0.0'
- release_date: '2021-04-24'
-
- 1.1.2:
- changes:
- release_summary: 'This patch release provides compatibility with Ansible v4.0.0'
- release_date: '2021-04-24'
-
- 1.1.1:
- changes:
- release_summary: 'This patch release provides compatibility with Ansible v4.0.0'
- release_date: '2021-04-24'
-
- 1.1.0:
- changes:
- release_summary: 'This patch release provides compatibility with Ansible v4.0.0'
- release_date: '2021-04-15'
-
- 1.0.1:
- changes:
- release_summary: 'This patch release provides compatibility with Ansible v3.0.0'
- release_date: '2021-03-20'
-
- 1.0.0:
- changes:
- release_summary: 'First release of the HPE Nimble Storage Content Collection for Ansible'
-
- release_date: '2020-10-18'
- modules:
- - description: Manage the HPE Nimble Storage access control records.
- name: hpe_nimble_access_control_record
- namespace: ''
- - description: Manage the HPE Nimble Storage array.
- name: hpe_nimble_array
- namespace: ''
- - description: Manage the HPE Nimble Storage CHAP user.
- name: hpe_nimble_chap_user
- namespace: ''
- - description: Manage the HPE Nimble Storage disk.
- name: hpe_nimble_disk
- namespace: ''
- - description: Manage the HPE Nimble Storage encryption.
- name: hpe_nimble_encryption
- namespace: ''
- - description: Manage the HPE Nimble Storage Fibre Channel.
- name: hpe_nimble_fc
- namespace: ''
- - description: Manage the HPE Nimble Storage group.
- name: hpe_nimble_group
- namespace: ''
- - description: Collect information from HPE Nimble Storage array.
- name: hpe_nimble_info
- namespace: ''
- - description: Manage the HPE Nimble Storage initiator groups.
- name: hpe_nimble_initiator_group
- namespace: ''
- - description: Manage the HPE Nimble Storage network configuration.
- name: hpe_nimble_network
- namespace: ''
- - description: Manage the HPE Nimble Storage Replication Partner.
- name: hpe_nimble_partner
- namespace: ''
- - description: Manage the HPE Nimble Storage performance policies
- name: hpe_nimble_performance_policy
- namespace: ''
- - description: Manage the HPE Nimble Storage pools.
- name: hpe_nimble_pool
- namespace: ''
- - description: Manage the HPE Nimble Storage protection schedules.
- name: hpe_nimble_protection_schedule
- namespace: ''
- - description: Manage the HPE Nimble Storage protection templates.
- name: hpe_nimble_protection_template
- namespace: ''
- - description: Manage the HPE Nimble Storage shelves.
- name: hpe_nimble_shelf
- namespace: ''
- - description: Manage the HPE Nimble Storage snapshots.
- name: hpe_nimble_snapshot
- namespace: ''
- - description: Manage the HPE Nimble Storage snapshot collections.
- name: hpe_nimble_snapshot_collection
- namespace: ''
- - description: Manage the HPE Nimble Storage users.
- name: hpe_nimble_user
- namespace: ''
- - description: Manage the HPE Nimble Storage user policies.
- name: hpe_nimble_user_policy
- namespace: ''
- - description: Manage the HPE Nimble Storage volumes.
- name: hpe_nimble_volume
- namespace: ''
- - description: Manage the HPE Nimble Storage volume collections.
- name: hpe_nimble_volume_collection
- namespace: ''
diff --git a/ansible_collections/hpe/nimble/changelogs/config.yaml b/ansible_collections/hpe/nimble/changelogs/config.yaml
deleted file mode 100644
index 20ca45bb4..000000000
--- a/ansible_collections/hpe/nimble/changelogs/config.yaml
+++ /dev/null
@@ -1,32 +0,0 @@
-changelog_filename_template: ../CHANGELOG.rst
-changelog_filename_version_depth: 0
-changes_file: changelog.yaml
-changes_format: combined
-ignore_other_fragment_extensions: true
-keep_fragments: false
-mention_ancestor: true
-new_plugins_after_name: removed_features
-notesdir: fragments
-prelude_section_name: release_summary
-prelude_section_title: Release Summary
-sanitize_changelog: true
-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
-title: HPE Nimble Storage Content Collection for Ansible
-trivial_section_name: trivial
-use_fqcn: true
diff --git a/ansible_collections/hpe/nimble/meta/runtime.yml b/ansible_collections/hpe/nimble/meta/runtime.yml
deleted file mode 100644
index 2ee3c9fa9..000000000
--- a/ansible_collections/hpe/nimble/meta/runtime.yml
+++ /dev/null
@@ -1,2 +0,0 @@
----
-requires_ansible: '>=2.9.10'
diff --git a/ansible_collections/hpe/nimble/plugins/doc_fragments/hpe_nimble.py b/ansible_collections/hpe/nimble/plugins/doc_fragments/hpe_nimble.py
deleted file mode 100644
index d2a31e0df..000000000
--- a/ansible_collections/hpe/nimble/plugins/doc_fragments/hpe_nimble.py
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2021 Hewlett Packard Enterprise Development LP
-
-# This program 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.
-#
-# This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
-
-# author Alok Ranjan (alok.ranjan2@hpe.com)
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-class ModuleDocFragment(object):
-
- # HPE Nimble doc fragment
- DOCUMENTATION = '''
-options:
- host:
- description:
- - HPE Nimble Storage IP address.
- required: True
- type: str
- password:
- description:
- - HPE Nimble Storage password.
- required: True
- type: str
- username:
- description:
- - HPE Nimble Storage user name.
- required: True
- type: str
-requirements:
- - Ansible 2.9 or later
- - Python 3.6 or later
- - HPE Nimble Storage SDK for Python
- - HPE Nimble Storage arrays running NimbleOS 5.0 or later
-
-'''
diff --git a/ansible_collections/hpe/nimble/plugins/module_utils/hpe_nimble.py b/ansible_collections/hpe/nimble/plugins/module_utils/hpe_nimble.py
deleted file mode 100644
index 02c673e4e..000000000
--- a/ansible_collections/hpe/nimble/plugins/module_utils/hpe_nimble.py
+++ /dev/null
@@ -1,332 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright 2020 Hewlett Packard Enterprise Development LP
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
-# file except in compliance with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software distributed
-# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-# OF ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
-
-# author Alok Ranjan (alok.ranjan2@hpe.com)
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-import datetime
-import uuid
-
-__version__ = "1.1.0"
-
-
-def is_null_or_empty(name):
- if type(name) is bool:
- return False
- if not name or name == "":
- return True
- return False
-
-
-def get_unique_string(baseName):
- unique_string = baseName + datetime.datetime.now().strftime(
- "-%d-%m-%Y") + '-' + str(uuid.uuid1().time)
- # make sure the length is not more than 64 char as nimble array allows only up to 64 char
- unique_string = unique_string[:63]
- return unique_string
-
-
-# remove arguments from kwargs which are by default none or empty
-def remove_null_args(**kwargs):
- tosearch = kwargs.copy()
- for key, value in tosearch.items():
- # list can be empty in case of update. Hence we should not remove that arg
- if type(value) is not bool and type(value) is not list:
- if is_null_or_empty(value):
- kwargs.pop(key)
- return kwargs
-
-
-def is_dict_item_present_on_server(server_list_of_dict, dict_to_check):
-
- if dict_to_check is None and server_list_of_dict is None:
- return True
- if len(dict_to_check) == 0:
- return False
- if type(server_list_of_dict) is not list:
- return False
-
- for server_dict in server_list_of_dict:
- if (dict_to_check.items() <= server_dict.items()) is True:
- return True
- return False
-
-
-# remove unchanged item from kwargs by matching them with the data present in given object attrs
-def remove_unchanged_or_null_args(server_resp, **kwargs):
- # Filter out null/empty arguments from the input
- params = remove_null_args(**kwargs)
- # check if server resp has attribute called attrs
- if hasattr(server_resp, "attrs") is False or type(server_resp.attrs) is not dict:
- return (params, params)
-
- params_to_search = params.copy()
- changed_attrs_dict = {}
-
- for key, value in params_to_search.items():
- # there could be a possibility that a user provided a wrong "key" name which is not at all present
- # in server resp.In that case get() will return None and hence will be added to list of changed_attrs.
- server_value = server_resp.attrs.get(key)
-
- if type(server_value) is list and type(value) is dict:
- if len(value) == 0:
- continue
- # we will land here if the user wants to update a metadata.
- # server return a list of metadata dictionary
- temp_server_metadata_dict = {}
- for server_entry in server_value:
- temp_server_metadata_dict[server_entry['key']] = server_entry['value']
- if (value.items() <= temp_server_metadata_dict.items()) is False:
- changed_attrs_dict[key] = value
- else:
- params.pop(key)
-
- elif type(server_value) is dict and type(value) is dict:
- if len(value) == 0:
- continue
- if (value.items() <= server_value.items()) is False:
- changed_attrs_dict[key] = value
- else:
- params.pop(key)
-
- elif type(server_value) is list and type(value) is list:
- found_changed_list = False
- if len(value) != len(server_value):
- changed_attrs_dict[key] = value
- continue
- # check if the list has dictionary to compare
- for entry_to_check in value:
- if type(entry_to_check) is dict:
- if is_dict_item_present_on_server(server_value, entry_to_check) is True:
- continue
- # no need to further check for other keys as we already got one mismatch
- changed_attrs_dict[key] = value
- found_changed_list = True
- else:
- if server_value.sort() != value.sort():
- changed_attrs_dict[key] = value
- found_changed_list = True
- break
- if found_changed_list is False:
- params.pop(key)
-
- elif server_value is None and type(value) is list:
- # this is a special case wherein the user has provided an empty list and
- # server already has null value for that list. in this case we should not add the
- # argument to changed_attrs_dict
- if len(value) == 0:
- # don't add empty list for update
- continue
- changed_attrs_dict[key] = value
- elif server_value != value:
- # This is a special key used to force any operation for object.
- # So, that is never updated as a server attribute.
- if key != "force":
- changed_attrs_dict[key] = value
- else:
- # remove this from param from dictionary as value is same and already present on server
- params.pop(key)
- return (changed_attrs_dict, params)
-
-
-def basic_auth_arg_fields():
-
- fields = {
- "host": {
- "required": True,
- "type": "str"
- },
- "username": {
- "required": True,
- "type": "str"
- },
- "password": {
- "required": True,
- "type": "str",
- "no_log": True
- }
- }
- return fields
-
-
-def get_vol_id(client_obj, vol_name):
- if is_null_or_empty(vol_name):
- return None
- else:
- resp = client_obj.volumes.get(name=vol_name)
- if resp is None:
- raise Exception(f"Invalid value for volume {vol_name}")
- return resp.attrs.get("id")
-
-
-def get_volcoll_id(client_obj, volcoll_name):
- if is_null_or_empty(volcoll_name):
- return None
- else:
- resp = client_obj.volume_collections.get(name=volcoll_name)
- if resp is None:
- raise Exception(f"Invalid value for volcoll {volcoll_name}")
- return resp.attrs.get("id")
-
-
-def get_owned_by_group_id(client_obj, owned_by_group_name):
- if is_null_or_empty(owned_by_group_name):
- return None
- else:
- resp = client_obj.groups.get(name=owned_by_group_name)
- if resp is None:
- raise Exception(f"Invalid value for owned by group {owned_by_group_name}")
- return resp.attrs.get("id")
-
-
-def get_pool_id(client_obj, pool_name):
- if is_null_or_empty(pool_name):
- return None
- else:
- resp = client_obj.pools.get(name=pool_name)
- if resp is None:
- raise Exception(f"Invalid value for pool {pool_name}")
- return resp.attrs.get("id")
-
-
-def get_folder_id(client_obj, folder_name):
- if is_null_or_empty(folder_name):
- return None
- else:
- resp = client_obj.folders.get(name=folder_name)
- if resp is None:
- raise Exception(f"Invalid value for folder {folder_name}")
- return resp.attrs.get("id")
-
-
-def get_perfpolicy_id(client_obj, perfpolicy_name):
- if is_null_or_empty(perfpolicy_name):
- return None
- else:
- resp = client_obj.performance_policies.get(name=perfpolicy_name)
- if resp is None:
- raise Exception(f"Invalid value for performance policy: {perfpolicy_name}")
- return resp.attrs.get("id")
-
-
-def get_prottmpl_id(client_obj, prottmpl_name):
- if is_null_or_empty(prottmpl_name):
- return None
- else:
- resp = client_obj.protection_templates.get(name=prottmpl_name)
- if resp is None:
- raise Exception(f"Invalid value for protection template {prottmpl_name}")
- return resp.attrs.get("id")
-
-
-def get_chap_user_id(client_obj, chap_user_name):
- if is_null_or_empty(chap_user_name):
- return None
- else:
- resp = client_obj.chap_users.get(name=chap_user_name)
- if resp is None:
- raise Exception(f"Invalid value for chap user {chap_user_name}")
- return resp.attrs.get("id")
-
-
-def get_pe_id(client_obj, pe_name):
- if is_null_or_empty(pe_name):
- return None
- else:
- resp = client_obj.protocol_endpoints.get(name=pe_name)
- if resp is None:
- raise Exception(f"Invalid value for protection endpoint {pe_name}")
- return resp.attrs.get("id")
-
-
-def get_snapshot_id(client_obj, vol_name, snap_name):
- if is_null_or_empty(vol_name) or is_null_or_empty(snap_name):
- return None
- else:
- resp = client_obj.snapshots.get(vol_name=vol_name, name=snap_name)
- if resp is None:
- raise Exception(f"No snapshot with name '{snap_name}' found for volume {vol_name}.")
- return resp.attrs.get("id")
-
-
-def get_replication_partner_id(client_obj, replication_partner_name):
- if is_null_or_empty(replication_partner_name):
- return None
- else:
- resp = client_obj.replication_partners.get(name=replication_partner_name)
- if resp is None:
- raise Exception(f"Invalid value for replication partner {replication_partner_name}")
- return resp.attrs.get("id")
-
-
-def get_volcoll_or_prottmpl_id(client_obj, volcoll_name, prot_template_name):
- if is_null_or_empty(volcoll_name) and is_null_or_empty(prot_template_name):
- return None
- if is_null_or_empty(volcoll_name) is False and is_null_or_empty(prot_template_name) is False:
- raise Exception("Volcoll and prot_template are mutually exlusive. Please provide either one of them.")
- else:
- if volcoll_name is not None:
- resp = get_volcoll_id(client_obj, volcoll_name)
- if resp is None:
- raise Exception(f"Invalid value for volcoll: {volcoll_name}")
- elif prot_template_name is not None:
- resp = get_prottmpl_id(client_obj, prot_template_name)
- if resp is None:
- raise Exception(f"Invalid value for protection template {prot_template_name}")
- return resp
-
-
-def get_downstream_partner_id(client_obj, downstream_partner):
- if is_null_or_empty(downstream_partner):
- return None
- else:
- resp = client_obj.replication_partners.get(name=downstream_partner)
- if resp is None:
- raise Exception(f"Invalid value for downstream partner {downstream_partner}")
- return resp.attrs.get("id")
-
-
-def get_initiator_group_id(client_obj, ig_name):
- if is_null_or_empty(ig_name):
- return None
- else:
- resp = client_obj.initiator_groups.get(name=ig_name)
- if resp is None:
- raise Exception(f"Invalid value for initiator group {ig_name}")
- return resp.attrs.get("id")
-
-
-def is_array_version_above_or_equal(array_obj_client, arr_version_to_check):
- if arr_version_to_check is None:
- return False
- resp = array_obj_client.get()
- if resp is None:
- return False
- array_version = resp.attrs.get("version")
- if array_version is None:
- return False
-
- temp = array_version.split('-')
- array_version = temp[0]
- arr_version = array_version.split('.')
- version_to_check = arr_version_to_check.split('.')
- if arr_version[0] > version_to_check[0]:
- return True
- elif arr_version[0] >= version_to_check[0] and arr_version[1] >= version_to_check[1]:
- return True
- elif arr_version[0] >= version_to_check[0] and arr_version[1] >= version_to_check[1] and arr_version[2] >= version_to_check[2]:
- return True
- return False
diff --git a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_access_control_record.py b/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_access_control_record.py
deleted file mode 100644
index 4ad3118d7..000000000
--- a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_access_control_record.py
+++ /dev/null
@@ -1,270 +0,0 @@
-#!/usr/bin/python
-
-# Copyright 2020 Hewlett Packard Enterprise Development LP
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
-# file except in compliance with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software distributed
-# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-# OF ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
-
-# author Alok Ranjan (alok.ranjan2@hpe.com)
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-DOCUMENTATION = r'''
----
-author:
- - HPE Nimble Storage Ansible Team (@ar-india) <nimble-dcs-storage-automation-eng@hpe.com>
-description: Manage the access control records on an HPE Nimble Storage group.
-module: hpe_nimble_access_control_record
-options:
- apply_to:
- required: False
- choices:
- - volume
- - snapshot
- - both
- type: str
- description:
- - The type of object to which this access control record applies.
- chap_user:
- required: False
- type: str
- description:
- - Name for the CHAP user.
- initiator_group:
- required: True
- type: str
- description:
- - The initiator group name.
- lun:
- required: False
- type: int
- description:
- - If this access control record applies to a regular volume, this attribute is the volume's LUN (Logical Unit Number).
- - If the access protocol is iSCSI, the LUN will be 0. However, if the access protocol is Fibre Channel, the LUN will be in the range from 0 to 2047.
- state:
- required: True
- choices:
- - present
- - absent
- - create
- type: str
- description:
- - The access control record operation.
- volume:
- required: True
- type: str
- description:
- - The name of the volume that this access control record applies to.
-extends_documentation_fragment: hpe.nimble.hpe_nimble
-short_description: Manage the HPE Nimble Storage access control records
-version_added: "1.0.0"
-notes:
- - This module does not support C(check_mode).
-'''
-
-EXAMPLES = r'''
-
-# If state is "create", create access control record for given volume, fails if it exist.
-# if state is present, create access control record if not already present.
-- name: Create access control record for volume
- hpe.nimble.hpe_nimble_access_control_record:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- volume: "{{ volume }}"
- initiator_group: "{{ initiator_group }}"
- state: "{{ state | default('present') }}"
-
-# Delete the access control record for a given volume name
-- name: Delete access control record for volume
- hpe.nimble.hpe_nimble_access_control_record:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- volume: "{{ volume }}"
- initiator_group: "{{ initiator_group }}"
- state: "absent" # fail if volume does not exist
-
-'''
-RETURN = r'''
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-try:
- from nimbleclient.v1 import client
-except ImportError:
- client = None
-from ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble import __version__ as NIMBLE_ANSIBLE_VERSION
-import ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble as utils
-
-
-def create_acr(
- client_obj,
- state,
- initiator_group,
- volume,
- **kwargs):
-
- if utils.is_null_or_empty(initiator_group):
- return (False, False, "Access control record creation failed. No initiator group provided.", {})
- if utils.is_null_or_empty(volume):
- return (False, False, "Access control record creation failed. No volume name provided.", {})
-
- try:
- # see if the igroup is already present
- ig_resp = client_obj.initiator_groups.get(id=None, name=initiator_group)
- if ig_resp is None:
- return (False, False, f"Initiator Group '{initiator_group}' is not present on array.", {})
- vol_resp = client_obj.volumes.get(id=None, name=volume)
- if vol_resp is None:
- return (False, False, f"Volume name '{volume}' is not present on array.", {})
-
- acr_resp = client_obj.access_control_records.get(vol_name=volume, initiator_group_name=initiator_group, apply_to=kwargs['apply_to'])
- if utils.is_null_or_empty(acr_resp) is False:
- changed_attrs_dict, params = utils.remove_unchanged_or_null_args(acr_resp, **kwargs)
- else:
- params = utils.remove_null_args(**kwargs)
- if acr_resp is None or changed_attrs_dict.__len__() > 0:
- acr_resp = client_obj.access_control_records.create(initiator_group_id=ig_resp.attrs.get("id"),
- vol_id=vol_resp.attrs.get("id"),
- **params)
- # params['volume'] = volume
- # params['initiator_group'] = initiator_group
- return (True, True, "Successfully created access control record.", acr_resp.attrs)
- else:
- # if state is set to present, we pass
- if state == "present":
- return (True, False, f"Access control record for volume '{volume}' with initiator group '{initiator_group}' is already present.",
- acr_resp.attrs)
- return (False, False, f"Access control record for volume '{volume}' with initiator group '{initiator_group}' cannot "
- "be created as it is already present.", {})
- except Exception as ex:
- return (False, False, f"Access control record creation failed | {ex}", {})
-
-
-def delete_acr(
- client_obj,
- initiator_group,
- volume,
- **kwargs):
-
- if utils.is_null_or_empty(initiator_group):
- return (False, False, "Access control record deletion failed. No initiator group provided.")
- if utils.is_null_or_empty(volume):
- return (False, False, "Access control record deletion failed. No volume provided.")
- params = utils.remove_null_args(**kwargs)
-
- try:
- acr_list_resp = client_obj.access_control_records.list(vol_name=volume, initiator_group_name=initiator_group, **params)
- if acr_list_resp is not None and acr_list_resp.__len__() > 0:
- for acr_resp in acr_list_resp:
- client_obj.access_control_records.delete(acr_resp.attrs.get("id"))
- return (True, True, f"Successfully deleted access control record for initiator group '{initiator_group}' associated with volume '{volume}'.")
- else:
- return (True, False, f"No access control record for initiator group '{initiator_group}' associated with volume '{volume}' found.")
- except Exception as ex:
- return (False, False, f"Access control record deletion failed | {ex}")
-
-
-def main():
-
- fields = {
- "state": {
- "required": True,
- "choices": ['present', 'absent', 'create'],
- "type": "str"
- },
- "apply_to": {
- "required": False,
- "choices": ['volume', 'snapshot', 'both'],
- "type": "str"
- },
- "chap_user": {
- "required": False,
- "type": "str"
- },
- "lun": {
- "required": False,
- "type": "int"
- },
- "volume": {
- "required": True,
- "type": "str"
- },
- "initiator_group": {
- "required": True,
- "type": "str"
- }
- }
- default_fields = utils.basic_auth_arg_fields()
- fields.update(default_fields)
-
- module = AnsibleModule(argument_spec=fields)
- if client is None:
- module.fail_json(msg='Python nimble-sdk could not be found.')
-
- hostname = module.params["host"]
- username = module.params["username"]
- password = module.params["password"]
- state = module.params["state"]
- apply_to = module.params["apply_to"]
- chap_user = module.params["chap_user"]
- lun = module.params["lun"]
- volume = module.params["volume"]
- initiator_group = module.params["initiator_group"]
-
- if (username is None or password is None or hostname is None):
- module.fail_json(
- msg="Missing variables: hostname, username and password is mandatory.")
- # defaults
- return_status = changed = False
- msg = "No task to run."
- resp = None
- try:
- client_obj = client.NimOSClient(
- hostname,
- username,
- password,
- f"HPE Nimble Ansible Modules v{NIMBLE_ANSIBLE_VERSION}"
- )
-
- # States
- if state == "create" or state == "present":
- return_status, changed, msg, resp = create_acr(
- client_obj,
- state,
- initiator_group,
- volume,
- apply_to=apply_to,
- chap_user_id=utils.get_chap_user_id(client_obj, chap_user),
- lun=lun)
-
- elif state == "absent":
- return_status, changed, msg = delete_acr(
- client_obj,
- initiator_group,
- volume,
- chap_user=chap_user)
- except Exception as ex:
- # failed for some reason.
- msg = str(ex)
-
- if return_status:
- if utils.is_null_or_empty(resp):
- module.exit_json(return_status=return_status, changed=changed, msg=msg)
- else:
- module.exit_json(return_status=return_status, changed=changed, msg=msg, attrs=resp)
- else:
- module.fail_json(return_status=return_status, changed=changed, msg=msg)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_array.py b/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_array.py
deleted file mode 100644
index 71f1c4138..000000000
--- a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_array.py
+++ /dev/null
@@ -1,468 +0,0 @@
-#!/usr/bin/python
-
-# Copyright 2020 Hewlett Packard Enterprise Development LP
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
-# file except in compliance with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software distributed
-# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-# OF ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
-
-# author Alok Ranjan (alok.ranjan2@hpe.com)
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-DOCUMENTATION = r'''
----
-author:
- - HPE Nimble Storage Ansible Team (@ar-india) <nimble-dcs-storage-automation-eng@hpe.com>
-description: Manage the array on an HPE Nimble Storage group.
-module: hpe_nimble_array
-options:
- allow_lower_limits:
- required: False
- type: bool
- description:
- - A True setting will allow you to add an array with lower limits to a pool with higher limits.
- change_name:
- required: False
- type: str
- description:
- - Change the name of the existing array.
- create_pool:
- required: False
- type: bool
- description:
- - Whether to create an associated pool during the array creation.
- ctrlr_a_support_ip:
- required: False
- type: str
- description:
- - Controller A Support IP Address. Four numbers in the range (0,255) separated by periods.
- ctrlr_b_support_ip:
- required: False
- type: str
- description:
- - Controller B Support IP Address. Four numbers in the range (0,255) separated by periods.
- failover:
- required: False
- type: bool
- description:
- - Perform a failover on the specified array.
- force:
- required: False
- type: bool
- description:
- - Forcibly delete the specified array.
- halt:
- required: False
- type: bool
- description:
- - Halt the specified array. Restarting the array will require physically powering it back on.
- name:
- required: True
- type: str
- description:
- - The user-provided name of the array. It is also the array's hostname.
- nic_list:
- required: False
- type: list
- elements: dict
- description:
- - List NICs information. Used when creating an array.
- pool_description:
- required: False
- type: str
- description:
- - Text description of the pool to be created during array creation.
- pool_name:
- required: False
- type: str
- description:
- - Name of pool to which this is a member.
- reboot:
- required: False
- type: bool
- description:
- - Reboot the specified array.
- secondary_mgmt_ip:
- required: False
- type: str
- description:
- - Secondary management IP address for the group.
- serial:
- required: False
- type: str
- description:
- - Serial number of the array.
- state:
- required: True
- choices:
- - create
- - present
- - absent
- type: str
- description:
- - The array operation
-extends_documentation_fragment: hpe.nimble.hpe_nimble
-short_description: Manage the HPE Nimble Storage array
-version_added: "1.0.0"
-notes:
- - This module does not support C(check_mode).
-'''
-
-EXAMPLES = r'''
-
-# if state is create , then create a array if not present. Fails if already present.
-# if state is present, then create a array if not present. Succeed if it already exists.
-- name: Create array if not present
- hpe.nimble.hpe_nimble_array:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- state: "{{ state | default('present') }}"
- name: "{{ name }}"
- ctrlr_b_support_ip: "{{ ctrlr_b_support_ip | mandatory}}"
- ctrlr_a_support_ip: "{{ ctrlr_a_support_ip | mandatory}}"
- serial: "{{ serial | mandatory}}"
- nic_list: "{{ nic_list | mandatory}}"
- pool_name: "{{ pool_name | mandatory}}"
-
-- name: Delete array
- hpe.nimble.hpe_nimble_array:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- vol_name: "{{ansible_default_ipv4['address']}}-{{ vol_name }}"
- name: "{{ name }}"
- state: absent
-
-- name: Failover array
- hpe.nimble.hpe_nimble_array:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- failover: true
- state: present
-
-- name: Halt array
- hpe.nimble.hpe_nimble_array:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- state: present
- halt: true
-
-- name: Reboot array
- hpe.nimble.hpe_nimble_array:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- state: present
- reboot: true
-
-'''
-RETURN = r'''
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-try:
- from nimbleclient.v1 import client
-except ImportError:
- client = None
-from ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble import __version__ as NIMBLE_ANSIBLE_VERSION
-import ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble as utils
-
-
-def create_array(
- client_obj,
- array_name,
- **kwargs):
-
- if utils.is_null_or_empty(array_name):
- return (False, False, "Create array failed as array name is not present.", {}, {})
-
- try:
- array_resp = client_obj.arrays.get(id=None, name=array_name)
- if utils.is_null_or_empty(array_resp):
- params = utils.remove_null_args(**kwargs)
- array_resp = client_obj.arrays.create(name=array_name, **params)
- if array_resp is not None:
- return (True, True, f"Created array '{array_name}' successfully.", {}, array_resp.attrs)
- else:
- return (False, False, f"Array '{array_name}' cannot be created as it is already present", {}, array_resp.attrs)
- except Exception as ex:
- return (False, False, f"Array creation failed |{ex}", {}, {})
-
-
-def update_array(
- client_obj,
- array_resp,
- **kwargs):
-
- if utils.is_null_or_empty(array_resp):
- return (False, False, "Update array failed as array name is not present.", {}, {})
-
- try:
- array_name = array_resp.attrs.get("name")
- changed_attrs_dict, params = utils.remove_unchanged_or_null_args(array_resp, **kwargs)
- if changed_attrs_dict.__len__() > 0:
- array_resp = client_obj.arrays.update(id=array_resp.attrs.get("id"), **params)
- return (True, True, f"Array '{array_name}' already present. Modified the following attributes '{changed_attrs_dict}'",
- changed_attrs_dict, array_resp.attrs)
- else:
- return (True, False, f"Array '{array_name}' already present in given state.", {}, array_resp.attrs)
-
- except Exception as ex:
- return (False, False, f"Array update failed |{ex}", {}, {})
-
-
-def delete_array(
- client_obj,
- array_name):
-
- if utils.is_null_or_empty(array_name):
- return (False, False, "Delete array failed as array name is not present.", {})
-
- try:
- array_resp = client_obj.arrays.get(id=None, name=array_name)
- if utils.is_null_or_empty(array_resp):
- return (False, False, f"Array '{array_name}' cannot be deleted as it is not present.", {})
- else:
- array_resp = client_obj.arrays.delete(id=array_resp.attrs.get("id"))
- return (True, True, f"Deleted array '{array_name}' successfully.", {})
- except Exception as ex:
- return (False, False, f"Array deletion failed |{ex}", {})
-
-
-def failover_array(
- client_obj,
- array_name,
- **kwargs):
-
- if utils.is_null_or_empty(array_name):
- return (False, False, "Failover array failed as array name is not present.", {})
- try:
- array_resp = client_obj.arrays.get(id=None, name=array_name)
- if utils.is_null_or_empty(array_resp):
- return (False, False, f"Array '{array_name}' cannot failover as it is not present.", {})
- else:
- params = utils.remove_null_args(**kwargs)
- array_resp = client_obj.arrays.failover(id=array_resp.attrs.get("id"), **params)
- return (True, True, f"Failover array '{array_name}' successfully.", {})
- except Exception as ex:
- return (False, False, f"Array failover failed |{ex}", {})
-
-
-def halt_array(
- client_obj,
- array_name):
-
- if utils.is_null_or_empty(array_name):
- return (False, False, "Halt array failed as array name is not present.", {})
-
- try:
- array_resp = client_obj.arrays.get(id=None, name=array_name)
- if utils.is_null_or_empty(array_resp):
- return (False, False, f"Array '{array_name}' cannot be halted as it is not present.", {})
- else:
- array_resp = client_obj.arrays.halt(id=array_resp.attrs.get("id"))
- return (True, True, f"Halted array '{array_name}' successfully.", {})
- except Exception as ex:
- return (False, False, f"Array Halt failed |{ex}", {})
-
-
-def reboot_array(
- client_obj,
- array_name):
-
- if utils.is_null_or_empty(array_name):
- return (False, False, "Reboot array failed as array name is not present.", {})
-
- try:
- array_resp = client_obj.arrays.get(id=None, name=array_name)
- if utils.is_null_or_empty(array_resp):
- return (False, False, f"Array '{array_name}' cannot be rebooted as it is not present.", {})
- else:
- array_resp = client_obj.arrays.reboot(id=array_resp.attrs.get("id"))
- return (True, True, f"Rebooted array '{array_name}' successfully.", {})
- except Exception as ex:
- return (False, False, f"Array reboot failed |{ex}", {})
-
-
-def main():
-
- fields = {
- "state": {
- "required": True,
- "choices": ['create', 'present', 'absent'],
- "type": "str"
- },
- "name": {
- "required": True,
- "type": "str"
- },
- "pool_name": {
- "required": False,
- "type": "str"
- },
- "serial": {
- "required": False,
- "type": "str"
- },
- "change_name": {
- "required": False,
- "type": "str"
- },
- "create_pool": {
- "required": False,
- "type": "bool"
- },
- "pool_description": {
- "required": False,
- "type": "str"
- },
- "allow_lower_limits": {
- "required": False,
- "type": "bool"
- },
- "ctrlr_a_support_ip": {
- "required": False,
- "type": "str"
- },
- "ctrlr_b_support_ip": {
- "required": False,
- "type": "str"
- },
- "nic_list": {
- "required": False,
- "type": 'list',
- "elements": 'dict'
- },
- "secondary_mgmt_ip": {
- "required": False,
- "type": "str"
- },
- "force": {
- "required": False,
- "type": "bool"
- },
- "failover": {
- "required": False,
- "type": "bool"
- },
- "halt": {
- "required": False,
- "type": "bool"
- },
- "reboot": {
- "required": False,
- "type": "bool"
- }
- }
- default_fields = utils.basic_auth_arg_fields()
- fields.update(default_fields)
- module = AnsibleModule(argument_spec=fields)
- if client is None:
- module.fail_json(msg='Python nimble-sdk could not be found.')
-
- hostname = module.params["host"]
- username = module.params["username"]
- password = module.params["password"]
- state = module.params["state"]
- array_name = module.params["name"]
- change_name = module.params["change_name"]
- pool_name = module.params["pool_name"]
- serial = module.params["serial"]
- create_pool = module.params["create_pool"]
- pool_description = module.params["pool_description"]
- allow_lower_limits = module.params["allow_lower_limits"]
- ctrlr_a_support_ip = module.params["ctrlr_a_support_ip"]
- ctrlr_b_support_ip = module.params["ctrlr_b_support_ip"]
- nic_list = module.params["nic_list"]
- secondary_mgmt_ip = module.params["secondary_mgmt_ip"]
- force = module.params["force"]
- failover = module.params["failover"]
- halt = module.params["halt"]
- reboot = module.params["reboot"]
-
- if (username is None or password is None or hostname is None):
- module.fail_json(
- msg="Missing variables: hostname, username and password is mandatory.")
-
- # defaults
- return_status = changed = False
- msg = "No task to run."
- resp = None
- try:
- client_obj = client.NimOSClient(
- hostname,
- username,
- password,
- f"HPE Nimble Ansible Modules v{NIMBLE_ANSIBLE_VERSION}"
- )
-
- # States
- if state == "present" and failover is True:
- return_status, changed, msg, changed_attrs_dict = failover_array(client_obj, array_name, force=force)
-
- elif state == "present" and halt is True:
- return_status, changed, msg, changed_attrs_dict = halt_array(client_obj, array_name)
-
- elif state == "present" and reboot is True:
- return_status, changed, msg, changed_attrs_dict = reboot_array(client_obj, array_name)
-
- elif ((failover is None or failover is False)
- and (halt is None or halt is False)
- and (reboot is None or reboot is False)
- and (state == "create" or state == "present")):
-
- array_resp = client_obj.arrays.get(name=array_name)
- if array_resp is None or state == "create":
- return_status, changed, msg, changed_attrs_dict, resp = create_array(
- client_obj,
- array_name,
- pool_name=pool_name,
- serial=serial,
- create_pool=create_pool,
- pool_description=pool_description,
- allow_lower_limits=allow_lower_limits,
- ctrlr_a_support_ip=ctrlr_a_support_ip,
- ctrlr_b_support_ip=ctrlr_b_support_ip,
- nic_list=nic_list,
- secondary_mgmt_ip=secondary_mgmt_ip,
- force=force,
- failover=failover,
- halt=halt,
- reboot=reboot)
- else:
- return_status, changed, msg, changed_attrs_dict, resp = update_array(
- client_obj,
- array_resp,
- name=change_name,
- force=force)
- elif state == "absent":
- return_status, changed, msg, changed_attrs_dict = delete_array(client_obj, array_name)
- except Exception as ex:
- # failed for some reason.
- msg = str(ex)
-
- if return_status:
- if utils.is_null_or_empty(resp):
- module.exit_json(return_status=return_status, changed=changed, msg=msg)
- else:
- module.exit_json(return_status=return_status, changed=changed, msg=msg, attrs=resp)
- else:
- module.fail_json(return_status=return_status, changed=changed, msg=msg)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_chap_user.py b/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_chap_user.py
deleted file mode 100644
index 2e75898ba..000000000
--- a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_chap_user.py
+++ /dev/null
@@ -1,274 +0,0 @@
-#!/usr/bin/python
-
-# # Copyright 2020 Hewlett Packard Enterprise Development LP
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
-# file except in compliance with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software distributed
-# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-# OF ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
-
-# author Alok Ranjan (alok.ranjan2@hpe.com)
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-DOCUMENTATION = r'''
----
-author:
- - HPE Nimble Storage Ansible Team (@ar-india) <nimble-dcs-storage-automation-eng@hpe.com>
-description: Manage the CHAP user on an HPE Nimble Storage group.
-module: hpe_nimble_chap_user
-options:
- change_name:
- required: False
- type: str
- description:
- - Change the name of the existing CHAP user.
- description:
- required: False
- type: str
- description:
- - Text description of CHAP user.
- initiator_iqns:
- required: False
- type: list
- elements: dict
- description:
- - List of iSCSI initiators. To be configured with this CHAP user for iSCSI Group Target CHAP authentication. This attribute
- cannot be modified at the same time with other attributes. If any specified initiator is already associated with another CHAP
- user, it will be replaced by this CHAP user for future CHAP authentication.
- name:
- required: True
- type: str
- description:
- - The CHAP user name.
- state:
- required: True
- choices:
- - create
- - present
- - absent
- type: str
- description:
- - The CHAP user operation.
- user_password:
- required: False
- type: str
- description:
- - CHAP secret. The CHAP secret should be between 12-16 characters and cannot contain spaces or most punctuation.
- string of 12 to 16 printable ASCII characters excluding ampersand and ^[];`
-extends_documentation_fragment: hpe.nimble.hpe_nimble
-short_description: Manage the HPE Nimble Storage CHAP user
-version_added: "1.0.0"
-notes:
- - This module does not support C(check_mode).
-'''
-
-EXAMPLES = r'''
-
-# if state is create, then create chap user, fails if it exist or cannot create
-# if state is present, then create chap user if not present, else success
-- name: Create Chap User
- hpe.nimble.hpe_nimble_chap_user:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- description: "{{ description }}"
- user_password: "{{ user_password | mandatory }}"
- state: "{{ state | default('present') }}"
-
-- name: Delete Chap User
- hpe.nimble.hpe_nimble_chap_user:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- state: "absent"
-
-'''
-RETURN = r'''
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-try:
- from nimbleclient.v1 import client
-except ImportError:
- client = None
-from ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble import __version__ as NIMBLE_ANSIBLE_VERSION
-import ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble as utils
-
-
-def create_chap_user(
- client_obj,
- user_name,
- password,
- **kwargs):
-
- if utils.is_null_or_empty(user_name):
- return (False, False, "Create chap user failed as user is not present.", {}, {})
- if utils.is_null_or_empty(password):
- return (False, False, "Create chap user failed as password is not present.", {}, {})
-
- try:
- user_resp = client_obj.chap_users.get(id=None, name=user_name)
- if utils.is_null_or_empty(user_resp):
- params = utils.remove_null_args(**kwargs)
- user_resp = client_obj.chap_users.create(name=user_name, password=password, **params)
- return (True, True, f"Chap user '{user_name}' created successfully.", {}, user_resp.attrs)
- else:
- return (False, False, f"Chap user '{user_name}' cannot be created as it is already present in given state.", {}, user_resp.attrs)
- except Exception as ex:
- return (False, False, f"Chap user creation failed |{ex}", {}, {})
-
-
-def update_chap_user(
- client_obj,
- user_name,
- **kwargs):
-
- if utils.is_null_or_empty(user_name):
- return (False, False, "Update chap user failed as user is not present.", {}, {})
-
- try:
- user_resp = client_obj.chap_users.get(id=None, name=user_name)
- if utils.is_null_or_empty(user_resp):
- return (False, False, f"Chap user '{user_name}' cannot be updated as it is not present.", {}, {})
-
- changed_attrs_dict, params = utils.remove_unchanged_or_null_args(user_resp, **kwargs)
- if changed_attrs_dict.__len__() > 0:
- user_resp = client_obj.chap_users.update(id=user_resp.attrs.get("id"), **params)
- return (True, True, f"Chap user '{user_name}' already present. Modified the following attributes '{changed_attrs_dict}'",
- changed_attrs_dict, user_resp.attrs)
- else:
- return (True, False, f"Chap user '{user_resp.attrs.get('name')}' already present in given state.", {}, user_resp.attrs)
- except Exception as ex:
- return (False, False, f"Chap user update failed |{ex}", {}, {})
-
-
-def delete_chap_user(
- client_obj,
- user_name):
-
- if utils.is_null_or_empty(user_name):
- return (False, False, "Delete chap user failed as user is not present.", {})
-
- try:
- user_resp = client_obj.chap_users.get(id=None, name=user_name)
- if utils.is_null_or_empty(user_resp):
- return (False, False, f"Chap user '{user_name}' cannot be deleted as it is not present.", {})
-
- client_obj.chap_users.delete(id=user_resp.attrs.get("id"))
- return (True, True, f"Deleted chap user '{user_name}' successfully.", {})
- except Exception as ex:
- return (False, False, f"Delete chap user failed |{ex}", {})
-
-
-def main():
-
- fields = {
- "change_name": {
- "required": False,
- "type": "str"
- },
- "description": {
- "required": False,
- "type": "str"
- },
- "initiator_iqns": {
- "required": False,
- "type": "list",
- "elements": 'dict'
- },
- "name": {
- "required": True,
- "type": "str"
- },
- "user_password": {
- "required": False,
- "type": "str",
- "no_log": True
- },
- "state": {
- "required": True,
- "choices": ['create',
- 'present',
- 'absent'
- ],
- "type": "str"
- }
- }
- default_fields = utils.basic_auth_arg_fields()
- fields.update(default_fields)
- required_if = [('state', 'create', ['user_password'])]
-
- module = AnsibleModule(argument_spec=fields, required_if=required_if)
- if client is None:
- module.fail_json(msg='Python nimble-sdk could not be found.')
-
- hostname = module.params["host"]
- username = module.params["username"]
- password = module.params["password"]
- change_name = module.params["change_name"]
- description = module.params["description"]
- initiator_iqns = module.params["initiator_iqns"]
- user_name = module.params["name"]
- user_password = module.params["user_password"]
- state = module.params["state"]
-
- if (username is None or password is None or hostname is None):
- module.fail_json(
- msg="Missing variables: hostname, username and password is mandatory.")
-
- # defaults
- return_status = changed = False
- msg = "No task to run."
- resp = None
- try:
- client_obj = client.NimOSClient(
- hostname,
- username,
- password,
- f"HPE Nimble Ansible Modules v{NIMBLE_ANSIBLE_VERSION}"
- )
-
- # States
- if state == "create" or state == "present":
- if not client_obj.chap_users.get(id=None, name=user_name) or state == "create":
- return_status, changed, msg, changed_attrs_dict, resp = create_chap_user(
- client_obj,
- user_name,
- user_password,
- description=description)
- else:
- # update op
- return_status, changed, msg, changed_attrs_dict, resp = update_chap_user(
- client_obj,
- user_name,
- name=change_name,
- password=user_password,
- description=description,
- initiator_iqns=initiator_iqns)
-
- elif state == "absent":
- return_status, changed, msg, changed_attrs_dict = delete_chap_user(client_obj, user_name)
- except Exception as ex:
- # failed for some reason.
- msg = str(ex)
-
- if return_status:
- if utils.is_null_or_empty(resp):
- module.exit_json(return_status=return_status, changed=changed, msg=msg)
- else:
- module.exit_json(return_status=return_status, changed=changed, msg=msg, attrs=resp)
- else:
- module.fail_json(return_status=return_status, changed=changed, msg=msg)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_disk.py b/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_disk.py
deleted file mode 100644
index 3d5e90d13..000000000
--- a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_disk.py
+++ /dev/null
@@ -1,200 +0,0 @@
-#!/usr/bin/python
-
-# Copyright 2020 Hewlett Packard Enterprise Development LP
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
-# file except in compliance with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software distributed
-# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-# OF ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
-
-# author Alok Ranjan (alok.ranjan2@hpe.com)
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-DOCUMENTATION = r'''
----
-author:
- - HPE Nimble Storage Ansible Team (@ar-india) <nimble-dcs-storage-automation-eng@hpe.com>
-description: Manage disks on an HPE Nimble Storage group.
-module: hpe_nimble_disk
-options:
- disk_op:
- required: True
- choices:
- - add
- - remove
- type: str
- description:
- - The intended operation to be performed on the specified disk.
- force:
- type: bool
- description:
- - Forcibly add a disk.
- shelf_location:
- required: True
- type: str
- description:
- - Position of the shelf the disk belongs to.
- slot:
- required: True
- type: int
- description:
- - Disk slot number.
- state:
- required: True
- choices:
- - present
- type: str
- description:
- - The disk operation.
-extends_documentation_fragment: hpe.nimble.hpe_nimble
-short_description: Manage the HPE Nimble Storage disk
-version_added: "1.0.0"
-notes:
- - This module does not support C(check_mode).
-'''
-
-EXAMPLES = r'''
-
-- name: Update Disk
- hpe.nimble.hpe_nimble_disk:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- slot: "{{ slot | mandatory }}"
- shelf_location: "{{ shelf_location | mandatory }}"
- disk_op: "{{ disk_op | mandatory }}"
- force: "{{ force }}"
- state: present
-
-'''
-RETURN = r'''
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-try:
- from nimbleclient.v1 import client
-except ImportError:
- client = None
-from ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble import __version__ as NIMBLE_ANSIBLE_VERSION
-import ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble as utils
-
-
-def update_disk(
- client_obj,
- slot,
- shelf_location,
- **kwargs):
-
- if utils.is_null_or_empty(shelf_location):
- return (False, False, "Disk update failed as no shelf location provided.", {}, {})
-
- try:
- # get the details of the disk for a given slot and shelf_location
- disk_resp = client_obj.disks.list(detail=True)
- if disk_resp is None:
- return (False, False, "No Disk is present on array.", {}, {})
- else:
- disk_id = None
- changed_attrs_dict = {}
- for disk_obj in disk_resp:
- if slot == disk_obj.attrs.get("slot") and shelf_location == disk_obj.attrs.get("shelf_location"):
- disk_id = disk_obj.attrs.get("id")
- break
- params = utils.remove_null_args(**kwargs)
- disk_resp = client_obj.disks.update(id=disk_id, **params)
- if hasattr(disk_resp, 'attrs'):
- disk_resp = disk_resp.attrs
- changed_attrs_dict['slot'] = slot
- changed_attrs_dict['shelf_location'] = shelf_location
- return (True, True, f"Successfully updated disk to slot '{slot}' at shelf location '{shelf_location}'.", changed_attrs_dict, disk_resp)
- except Exception as ex:
- return (False, False, f"Disk update failed |'{ex}'", {}, {})
-
-
-def main():
-
- fields = {
- "state": {
- "required": True,
- "choices": ['present'],
- "type": "str"
- },
- "disk_op": {
- "required": True,
- "choices": ['add', 'remove'],
- "type": "str"
- },
- "slot": {
- "required": True,
- "type": "int"
- },
- "shelf_location": {
- "required": True,
- "type": "str"
- },
- "force": {
- "required": False,
- "type": "bool"
- }
- }
- default_fields = utils.basic_auth_arg_fields()
- fields.update(default_fields)
- module = AnsibleModule(argument_spec=fields)
- if client is None:
- module.fail_json(msg='Python nimble-sdk could not be found.')
-
- hostname = module.params["host"]
- username = module.params["username"]
- password = module.params["password"]
- state = module.params["state"]
- disk_op = module.params["disk_op"]
- slot = module.params["slot"]
- shelf_location = module.params["shelf_location"]
- force = module.params["force"]
-
- if (username is None or password is None or hostname is None):
- module.fail_json(
- msg="Missing variables: hostname, username and password is mandatory.")
-
- # defaults
- return_status = changed = False
- msg = "No task to run."
- resp = None
- try:
- client_obj = client.NimOSClient(
- hostname,
- username,
- password,
- f"HPE Nimble Ansible Modules v{NIMBLE_ANSIBLE_VERSION}"
- )
-
- # States
- if state == "present":
- return_status, changed, msg, changed_attrs_dict, resp = update_disk(
- client_obj,
- slot,
- shelf_location,
- disk_op=disk_op,
- force=force)
- except Exception as ex:
- # failed for some reason.
- msg = str(ex)
-
- if return_status:
- if utils.is_null_or_empty(resp):
- module.exit_json(return_status=return_status, changed=changed, msg=msg)
- else:
- module.exit_json(return_status=return_status, changed=changed, msg=msg, attrs=resp)
- else:
- module.fail_json(return_status=return_status, changed=changed, msg=msg)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_encryption.py b/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_encryption.py
deleted file mode 100644
index c2c96c38b..000000000
--- a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_encryption.py
+++ /dev/null
@@ -1,372 +0,0 @@
-#!/usr/bin/python
-
-# # Copyright 2020 Hewlett Packard Enterprise Development LP
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
-# file except in compliance with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software distributed
-# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-# OF ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
-
-# author Alok Ranjan (alok.ranjan2@hpe.com)
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-DOCUMENTATION = r'''
----
-author:
- - HPE Nimble Storage Ansible Team (@ar-india) <nimble-dcs-storage-automation-eng@hpe.com>
-description: Manage the encryption on an Nimble Storage group.
-module: hpe_nimble_encryption
-options:
- active:
- type: bool
- description:
- - Whether the master key is active or not.
- age:
- required: False
- type: int
- description:
- - Minimum age (in hours) of inactive encryption keys to be purged. '0' indicates to purge the keys immediately.
- encryption_config:
- required: False
- type: dict
- description:
- - How encryption is configured for this group. Group encryption settings.
- group_encrypt:
- required: False
- type: bool
- description:
- - Flag for setting group encryption.
- name:
- required: True
- type: str
- description:
- - Name of the master key. The only allowed value is "default".
- passphrase:
- required: False
- type: str
- description:
- - Passphrase used to protect the master key, required during creation, enabling/disabling the key and change the
- passphrase to a new value. String with size from 8 to 64 printable characters.
- purge_inactive:
- required: False
- type: bool
- description:
- - Purges encryption keys that have been inactive for the age or longer. If you do not specify an age, the keys will be purged immediately.
- new_passphrase:
- required: False
- type: str
- description:
- - When changing the passphrase, this attribute specifies the new value of the passphrase. String with size from 8 to 64 printable characters.
- state:
- required: True
- choices:
- - create
- - present
- - absent
- type: str
- description:
- - The encryption operation.
-extends_documentation_fragment: hpe.nimble.hpe_nimble
-short_description: Manage the HPE Nimble Storage encryption
-version_added: "1.0.0"
-notes:
- - This module does not support C(check_mode).
-'''
-
-EXAMPLES = r'''
-
-# if state is create, then create master key, fails if it exist or cannot create
-# if state is present, then create master key if not present ,else success
-- name: Create master key
- hpe.nimble.hpe_nimble_encryption:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "default"
- passphrase: "{{ passphrase }}"
- active: "{{ active | default('false') }}"
- state: "{{ state | default('present') }}"
-
-- name: Delete master key
- hpe.nimble.hpe_nimble_encryption:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "default"
- state: "absent"
-
-- name: Purge inactive master key
- hpe.nimble.hpe_nimble_encryption:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "default"
- age: "{{ age | mandatory }}"
- state: "present"
- purge_inactive: true
-
-- name: Group encryption
- hpe.nimble.hpe_nimble_encryption:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- encryption_config: "{{ encryption_config | mandatory }}"
- state: "present"
- group_encrypt: true
-
-'''
-RETURN = r'''
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-try:
- from nimbleclient.v1 import client
-except ImportError:
- client = None
-from ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble import __version__ as NIMBLE_ANSIBLE_VERSION
-import ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble as utils
-
-
-def create_master_key(
- client_obj,
- master_key,
- passphrase):
-
- if utils.is_null_or_empty(master_key):
- return (False, False, "Create master key failed as no key is provided.", {}, {})
-
- try:
- master_key_resp = client_obj.master_key.get(id=None, name=master_key)
- if utils.is_null_or_empty(master_key_resp):
- master_key_resp = client_obj.master_key.create(name=master_key, passphrase=passphrase)
- return (True, True, f"Master key '{master_key}' created successfully.", {}, master_key_resp.attrs)
- else:
- return (False, False, f"Master key '{master_key}' cannot be created as it is already present in given state.", {}, master_key_resp.attrs)
- except Exception as ex:
- return (False, False, f"Master key creation failed |{ex}", {}, {})
-
-
-def update_master_key(
- client_obj,
- master_key,
- **kwargs):
-
- if utils.is_null_or_empty(master_key):
- return (False, False, "Update master key failed as master key is not present.", {}, {})
-
- try:
- master_key_resp = client_obj.master_key.get(id=None, name=master_key)
- if utils.is_null_or_empty(master_key_resp):
- return (False, False, f"Master key '{master_key}' cannot be updated as it is not present.", {}, {})
-
- changed_attrs_dict, params = utils.remove_unchanged_or_null_args(master_key_resp, **kwargs)
- changed_attrs_dict.pop('passphrase')
- if changed_attrs_dict.__len__() > 0:
- master_key_resp = client_obj.master_key.update(id=master_key_resp.attrs.get("id"), name=master_key, **params)
- return (True, True, f"Master key '{master_key}' already present. Modified the following attributes '{changed_attrs_dict}'",
- changed_attrs_dict, master_key_resp.attrs)
- else:
- return (True, False, f"Master key '{master_key}' already present in given state.", {}, master_key_resp.attrs)
- except Exception as ex:
- return (False, False, f"Master key update failed |{ex}", {}, {})
-
-
-def delete_master_key(
- client_obj,
- master_key):
-
- if utils.is_null_or_empty(master_key):
- return (False, False, "Delete master key failed as master key is not present.", {})
-
- try:
- master_key_resp = client_obj.master_key.get(id=None, name=master_key)
- if utils.is_null_or_empty(master_key_resp):
- return (False, False, f"Master key '{master_key}' cannot be deleted as it is not present.", {})
-
- client_obj.master_key.delete(id=master_key_resp.attrs.get("id"))
- return (True, True, f"Deleted master key '{master_key}' successfully.", {})
- except Exception as ex:
- return (False, False, f"Delete master key failed |{ex}", {})
-
-
-def purge_inactive_key(
- client_obj,
- master_key,
- **kwargs):
-
- if utils.is_null_or_empty(master_key):
- return (False, False, "Purge inactive master key failed as master key is not present.", {})
-
- try:
- master_key_resp = client_obj.master_key.get(id=None, name=master_key)
- if utils.is_null_or_empty(master_key_resp):
- return (False, False, f"Master key '{master_key}' cannot be purged as it is not present.", {})
-
- params = utils.remove_null_args(**kwargs)
- client_obj.master_key.purge_inactive(id=master_key_resp.attrs.get("id"), **params)
- return (True, True, f"Purged inactive master key '{master_key}' successfully.", {})
- except Exception as ex:
- return (False, False, f"Purge inactive master key failed |{ex}", {})
-
-
-def group_encryption(
- client_obj,
- group_name,
- encryption_config):
-
- if utils.is_null_or_empty(group_name):
- return (False, False, "Encryption setting for group failed as group name is not present.", {}, {})
-
- try:
- group_resp = client_obj.groups.get(id=None, name=group_name)
- if utils.is_null_or_empty(group_resp):
- return (False, False, f"Encryption setting for group '{group_name}' cannot be done as it is not present.", {}, {})
- changed_attrs_dict, params = utils.remove_unchanged_or_null_args(group_resp, encryption_config=encryption_config)
- if changed_attrs_dict.__len__() > 0:
- group_resp = client_obj.groups.update(id=group_resp.attrs.get("id"), encryption_config=encryption_config)
- return (True, True, f"Encryption setting for group '{group_name}' changed successfully. ", changed_attrs_dict, group_resp.attrs)
- else:
- return (True, False, f"Encryption setting for group '{group_resp.attrs.get('name')}' is already in same state.", {}, group_resp.attrs)
- except Exception as ex:
- return (False, False, f"Encryption setting for group failed |{ex}", {}, {})
-
-
-def main():
-
- fields = {
- "active": {
- "required": False,
- "type": "bool"
- },
- "age": {
- "required": False,
- "type": "int"
- },
- "encryption_config": {
- "required": False,
- "type": "dict"
- },
- "group_encrypt": {
- "required": False,
- "type": "bool"
- },
- "name": {
- "required": True,
- "type": "str"
- },
- "passphrase": {
- "required": False,
- "type": "str",
- "no_log": True
- },
- "purge_inactive": {
- "required": False,
- "type": "bool"
- },
- "new_passphrase": {
- "required": False,
- "type": "str",
- "no_log": True
- },
- "state": {
- "required": True,
- "choices": ['create',
- 'present',
- 'absent'
- ],
- "type": "str"
- }
- }
- default_fields = utils.basic_auth_arg_fields()
- fields.update(default_fields)
- required_if = [('state', 'create', ['passphrase'])]
-
- module = AnsibleModule(argument_spec=fields, required_if=required_if)
- if client is None:
- module.fail_json(msg='Python nimble-sdk could not be found.')
-
- hostname = module.params["host"]
- username = module.params["username"]
- password = module.params["password"]
- active = module.params["active"]
- age = module.params["age"]
- encryption_config = module.params["encryption_config"]
- group_encrypt = module.params["group_encrypt"]
- master_key = module.params["name"]
- passphrase = module.params["passphrase"]
- purge_inactive = module.params["purge_inactive"]
- new_passphrase = module.params["new_passphrase"]
- state = module.params["state"]
-
- if (username is None or password is None or hostname is None):
- module.fail_json(
- msg="Missing variables: hostname, username and password is mandatory.")
-
- # defaults
- return_status = changed = False
- msg = "No task to run."
- resp = None
- try:
- client_obj = client.NimOSClient(
- hostname,
- username,
- password,
- f"HPE Nimble Ansible Modules v{NIMBLE_ANSIBLE_VERSION}"
- )
-
- # States
- if ((purge_inactive is None or purge_inactive is False)
- and (group_encrypt is None or group_encrypt is False)
- and (state == "create" or state == "present")):
- if not client_obj.master_key.get(id=None, name=master_key) or state == "create":
- return_status, changed, msg, changed_attrs_dict, resp = create_master_key(
- client_obj,
- master_key,
- passphrase)
- else:
- # update op
- return_status, changed, msg, changed_attrs_dict, resp = update_master_key(
- client_obj,
- master_key,
- active=active,
- passphrase=passphrase,
- new_passphrase=new_passphrase)
-
- elif state == "absent":
- return_status, changed, msg, changed_attrs_dict = delete_master_key(client_obj, master_key)
-
- elif state == "present" and purge_inactive is True:
- return_status, changed, msg, changed_attrs_dict = purge_inactive_key(
- client_obj,
- master_key,
- age=age)
-
- elif state == "present" and group_encrypt is True:
- group_name = module.params["name"]
- return_status, changed, msg, changed_attrs_dict, resp = group_encryption(
- client_obj,
- group_name,
- encryption_config)
- except Exception as ex:
- # failed for some reason.
- msg = str(ex)
-
- if return_status:
- if utils.is_null_or_empty(resp):
- module.exit_json(return_status=return_status, changed=changed, msg=msg)
- else:
- module.exit_json(return_status=return_status, changed=changed, msg=msg, attrs=resp)
- else:
- module.fail_json(return_status=return_status, changed=changed, msg=msg)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_fc.py b/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_fc.py
deleted file mode 100644
index 0c69d0fbd..000000000
--- a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_fc.py
+++ /dev/null
@@ -1,324 +0,0 @@
-#!/usr/bin/python
-
-# Copyright 2020 Hewlett Packard Enterprise Development LP
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
-# file except in compliance with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software distributed
-# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-# OF ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
-
-# author Alok Ranjan (alok.ranjan2@hpe.com)
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-DOCUMENTATION = r'''
----
-author:
- - HPE Nimble Storage Ansible Team (@ar-india) <nimble-dcs-storage-automation-eng@hpe.com>
-description: Manage storage Fibre Channel on an HPE Nimble Storage group.
-module: hpe_nimble_fc
-options:
- array_name_or_serial:
- required: True
- type: str
- description:
- - Name or serial number of array where the interface is hosted.
- controller:
- required: False
- type: str
- description:
- - Name (A or B) of the controller where the interface is hosted.
- hw_upgrade:
- required: False
- type: bool
- description:
- - Update fibre channel configuration after hardware changes. Possible values:- 'true' 'false'.
- name:
- required: False
- type: str
- description:
- - Name of fibre channel interface
- online:
- required: False
- type: bool
- description:
- - Identify whether the fibre channel interface is online. Possible values:- 'true' 'false'.
- precheck:
- required: False
- type: bool
- description:
- - Check if the interfaces are offline before regenerating the WWNN. Possible values:- 'true' 'false'.
- regenerate:
- required: False
- type: bool
- description:
- - Regenerate fibre channel configuration. Possible values:- 'true' 'false'.
- state:
- required: True
- choices:
- - present
- type: str
- description:
- - The fibre channel operation.
- wwnn_base_str:
- required: False
- type: str
- description:
- - Base WWNN. Six bytes expressed in hex separated by colons. Example:- 'af:32:f1'.
-extends_documentation_fragment: hpe.nimble.hpe_nimble
-short_description: Manage the HPE Nimble Storage Fibre Channel
-version_added: "1.0.0"
-notes:
- - This module does not support C(check_mode).
-'''
-
-EXAMPLES = r'''
-
-- name: Update fibre channel interface
- hpe.nimble.hpe_nimble_fc:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- array_name_or_serial: "{{ array_name_or_serial | mandatory }}"
- name: "{{ name | mandatory }}"
- controller: "{{ controller | mandatory }}"
- online: "{{ online | mandatory }}"
- state: "{{ 'present' }}"
-
-- name: Regenerate fibre channel config
- hpe.nimble.hpe_nimble_fc:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- array_name_or_serial: "{{ array_name_or_serial | mandatory }}" # provide the group_leader_array name
- wwnn_base_str: "{{ wwnn_base_str | mandatory }}"
- regenerate: true
- precheck: true
- state: "{{ 'present' }}"
-
-- name: Hardware upgrade for fibre channel
- hpe.nimble.hpe_nimble_fc:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- array_name_or_serial: "{{ array_name_or_serial | mandatory }}"
- hw_upgrade: true
- state: "{{ 'present' }}"
-
-'''
-RETURN = r'''
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-try:
- from nimbleclient.v1 import client
-except ImportError:
- client = None
-from ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble import __version__ as NIMBLE_ANSIBLE_VERSION
-import ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble as utils
-
-
-def update_fc_interface(
- client_obj,
- array_name_or_serial,
- fc_name,
- controller,
- online):
-
- if utils.is_null_or_empty(array_name_or_serial):
- return (False, False, "Fibre channel interface update failed as no array name is provided.", {}, {})
- if utils.is_null_or_empty(fc_name):
- return (False, False, "Fibre channel interface update failed as no interface name is provided.", {}, {})
- if utils.is_null_or_empty(controller):
- return (False, False, "Fibre channel interface update failed as no controller name is provided.", {}, {})
- if utils.is_null_or_empty(online):
- return (False, False, "Fibre channel interface update failed as online flag is not provided.", {}, {})
- try:
- # get the details of the fc
- fc_resp = client_obj.fibre_channel_interfaces.list(detail=True, array_name_or_serial=array_name_or_serial)
- if fc_resp is None:
- return (False, False, f"No fibre channel is present for array '{array_name_or_serial}'.", {}, {})
- else:
- fc_result = None
- for fc_interface_obj in fc_resp:
- if fc_interface_obj.attrs.get("name") == fc_name and fc_interface_obj.attrs.get("controller_name") == controller:
- fc_result = fc_interface_obj
- break
- if fc_result is not None:
- changed_attrs_dict, params = utils.remove_unchanged_or_null_args(fc_result, online=online)
- if changed_attrs_dict.__len__() > 0:
- fc_result = client_obj.fibre_channel_interfaces.update(id=fc_result.attrs.get("id"), online=online)
- if hasattr(fc_result, 'attrs'):
- fc_result = fc_result.attrs
- return (True, True, "Updated fibre channel interface.", {}, fc_result)
- else:
- if hasattr(fc_result, 'attrs'):
- fc_result = fc_result.attrs
- return (True, False, "Fibre channel interface already in given state.", {}, fc_result)
- except Exception as ex:
- return (False, False, f"Fibre channel update failed |'{ex}'", {}, {})
-
-
-def regenerate_wwn(
- client_obj,
- array_name_or_serial,
- wwnn_base_str,
- precheck):
-
- if utils.is_null_or_empty(array_name_or_serial):
- return (False, False, "Fibre channel config update failed as no array name is provided.", {}, {})
- try:
- # get the details of the fc config
- fc_config_resp = client_obj.fibre_channel_configs.get(id=None, group_leader_array=array_name_or_serial)
- if fc_config_resp is None:
- return (False, False, f"No fibre channel config is present for array '{array_name_or_serial}'.", {}, {})
- else:
- changed_attrs_dict = {}
- fc_config_resp = client_obj.fibre_channel_configs.regenerate(fc_config_resp.attrs.get("id"), precheck, wwnn_base_str)
- if hasattr(fc_config_resp, 'attrs'):
- fc_config_resp = fc_config_resp.attrs
- changed_attrs_dict['wwnn_base_str'] = wwnn_base_str
- return (True, True, f"Updated fibre channel config for group leader array '{array_name_or_serial}'."
- f"Modified the following fields '{changed_attrs_dict}'.", changed_attrs_dict, fc_config_resp)
- except Exception as ex:
- return (False, False, f"Fibre channel config update failed |'{ex}'", {}, {})
-
-
-def upgrade_hardware(
- client_obj,
- array_name_or_serial):
-
- if utils.is_null_or_empty(array_name_or_serial):
- return (False, False, "Hardware update failed as no array name is provided.", {}, {})
- try:
- # get the details of the fc config
- fc_config_resp = client_obj.fibre_channel_configs.get(id=None, group_leader_array=array_name_or_serial)
- if fc_config_resp is None:
- return (False, False, f"No fibre channel config is present for array '{array_name_or_serial}'.", {}, {})
- else:
- fc_config_resp = client_obj.fibre_channel_configs.hw_upgrade(fc_config_resp.attrs.get("id"))
- if hasattr(fc_config_resp, 'attrs'):
- fc_config_resp = fc_config_resp.attrs
- return (True, True, f"Hardware update for group leader array '{array_name_or_serial}' done successfully", {}, fc_config_resp)
- except Exception as ex:
- return (False, False, f"Hardware update failed |'{ex}'", {}, {})
-
-
-def main():
-
- fields = {
- "array_name_or_serial": {
- "required": True,
- "type": "str"
- },
- "controller": {
- "required": False,
- "type": "str"
- },
- "hw_upgrade": {
- "required": False,
- "type": "bool"
- },
- "name": {
- "required": False,
- "type": "str"
- },
- "online": {
- "required": False,
- "type": "bool"
- },
- "precheck": {
- "required": False,
- "type": "bool"
- },
- "regenerate": {
- "required": False,
- "type": "bool"
- },
- "state": {
- "required": True,
- "choices": ['present'],
- "type": "str"
- },
- "wwnn_base_str": {
- "required": False,
- "type": "str"
- },
- }
- default_fields = utils.basic_auth_arg_fields()
- fields.update(default_fields)
- module = AnsibleModule(argument_spec=fields)
- if client is None:
- module.fail_json(msg='Python nimble-sdk could not be found.')
-
- hostname = module.params["host"]
- username = module.params["username"]
- password = module.params["password"]
- array_name_or_serial = module.params["array_name_or_serial"]
- controller = module.params["controller"]
- hw_upgrade = module.params["hw_upgrade"]
- fc_name = module.params["name"]
- online = module.params["online"]
- precheck = module.params["precheck"]
- regenerate = module.params["regenerate"]
- state = module.params["state"]
- wwnn_base_str = module.params["wwnn_base_str"]
-
- if (username is None or password is None or hostname is None):
- module.fail_json(
- msg="Missing variables: hostname, username and password is mandatory.")
-
- # defaults
- return_status = changed = False
- msg = "No task to run."
- resp = None
- try:
- client_obj = client.NimOSClient(
- hostname,
- username,
- password,
- f"HPE Nimble Ansible Modules v{NIMBLE_ANSIBLE_VERSION}"
- )
-
- # States
- if state == "present":
- if regenerate is True:
- return_status, changed, msg, changed_attrs_dict, resp = regenerate_wwn(
- client_obj,
- array_name_or_serial,
- wwnn_base_str,
- precheck)
-
- elif hw_upgrade is True:
- return_status, changed, msg, changed_attrs_dict, resp = upgrade_hardware(
- client_obj,
- array_name_or_serial)
-
- else:
- return_status, changed, msg, changed_attrs_dict, resp = update_fc_interface(
- client_obj,
- array_name_or_serial,
- fc_name,
- controller,
- online)
- except Exception as ex:
- # failed for some reason.
- msg = str(ex)
-
- if return_status:
- if utils.is_null_or_empty(resp):
- module.exit_json(return_status=return_status, changed=changed, msg=msg)
- else:
- module.exit_json(return_status=return_status, changed=changed, msg=msg, attrs=resp)
- else:
- module.fail_json(return_status=return_status, changed=changed, msg=msg)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_group.py b/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_group.py
deleted file mode 100644
index 1c74b16a5..000000000
--- a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_group.py
+++ /dev/null
@@ -1,1257 +0,0 @@
-#!/usr/bin/python
-
-# # Copyright 2020 Hewlett Packard Enterprise Development LP
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
-# file except in compliance with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software distributed
-# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-# OF ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
-
-# author Alok Ranjan (alok.ranjan2@hpe.com)
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-DOCUMENTATION = r'''
----
-author:
- - HPE Nimble Storage Ansible Team (@ar-india) <nimble-dcs-storage-automation-eng@hpe.com>
-description: Manage an HPE Nimble Storage group on an Nimble Storage array.
-module: hpe_nimble_group
-options:
- alarms:
- required: False
- type: bool
- description:
- - Whether alarm feature is enabled.
- alert_to_email_addrs:
- required: False
- type: str
- description:
- - Comma-separated list of email addresses to receive emails. Comma separated email list.
- alert_from_email_addrs:
- required: False
- type: str
- description:
- - From email address to use while sending emails. Case insensitive email address.
- alert_min_level:
- required: False
- choices:
- - info
- - notice
- - warning
- - critical
- type: str
- description:
- - Minimum level of alert to be notified.
- allow_analytics_gui:
- required: False
- type: bool
- description:
- - Specify whether to allow HPE Nimble Storage to use Google Analytics in the GUI. HPE Nimble Storage uses Google Analytics
- to gather data related to GUI usage. The data gathered is used to evaluate and improve the product.
- allow_support_tunnel:
- required: False
- type: bool
- description:
- - Whether to allow support tunnel.
- auto_switchover:
- required: False
- type: bool
- description:
- - Whether automatic switchover of Group management services feature is enabled.
- autoclean_unmanaged_snapshots:
- required: False
- type: bool
- description:
- - Whether autoclean unmanaged snapshots feature is enabled.
- autoclean_unmanaged_snapshots_ttl_unit:
- required: False
- type: int
- description:
- - Unit for unmanaged snapshot time to live.
- autosupport:
- required: False
- type: bool
- description:
- - Whether to send autosupport.
- cc_mode:
- required: False
- type: bool
- description:
- - Enable or disable Common Criteria mode.
- change_name:
- required: False
- type: str
- description:
- - Change name of the existing group.
- check_migrate:
- required: False
- type: bool
- description:
- - Check if the group Management Service can be migrated to the group Management Service backup array.
- date:
- required: False
- type: int
- description:
- - Unix epoch time local to the group. Seconds since last epoch. Example- 3400.
- default_iscsi_target_scope:
- required: False
- choices:
- - volume
- - group
- type: str
- description:
- - Newly created volumes are exported under iSCSI Group Target or iSCSI Volume Target.
- default_volume_limit:
- required: False
- type: int
- description:
- - Default limit for a volume space usage as a percentage of volume size. Volume will be taken offline/made non-writable on exceeding its
- limit. Percentage as integer from 0 to 100.
- domain_name:
- required: False
- type: str
- description:
- - Domain name for this group. String of alphanumeric characters, valid range is from 2 to 255; Each label must be between 1 and 63 characters
- long; - and . are allowed after the first and before the last character.
- dns_servers:
- required: False
- type: list
- elements: dict
- description:
- - IP addresses for this group's dns servers.
- fc_enabled:
- required: False
- type: bool
- description:
- - Whether FC is enabled on this group.
- force:
- required: False
- type: bool
- default: False
- description:
- - Can be used with halt or merge flag. Halt remaining arrays when one or more is unreachable.
- Ignore warnings and forcibly merge specified group with this group.
- group_snapshot_ttl:
- required: False
- type: int
- description:
- - Snapshot Time-to-live(TTL) configured at group level for automatic deletion of unmanaged snapshots. Value 0 indicates unlimited TTL.
- group_target_enabled:
- required: False
- type: bool
- description:
- - Is group_target enabled on this group.
- group_target_name:
- required: False
- type: str
- description:
- - Iscsi target name for this group. String of up to 255 alphanumeric, hyphenated, colon, or period-separated characters;
- but cannot begin with hyphen, colon or period. This type is used for the group target name.
- halt:
- required: False
- type: bool
- description:
- - Halt all arrays in the group.
- iscsi_enabled:
- required: False
- type: bool
- description:
- - Whether iSCSI is enabled on this group.
- isns_enabled:
- required: False
- type: bool
- description:
- - Whether iSNS is enabled.
- isns_port:
- required: False
- type: int
- description:
- - Port number for iSNS Server. Positive integer value up to 65535 representing TCP/IP port.
- isns_server:
- required: False
- type: str
- description:
- - Hostname or IP Address of iSNS Server.
- level:
- required: False
- choices:
- - info
- - notice
- - warning
- - critical
- type: str
- description:
- - Level of the test alert.
- login_banner_after_auth:
- required: False
- type: bool
- description:
- - Should the banner be displayed before the user credentials are prompted or after prompting the user credentials.
- login_banner_message:
- required: False
- type: str
- description:
- - The message for the login banner that is displayed during user login activity. String upto 2048 characters.
- login_banner_reset:
- required: False
- type: str
- description:
- - This will reset the banner to the version of the installed NOS. When login_banner_after_auth is specified, login_banner_reset can not be set to true.
- merge:
- required: False
- type: bool
- description:
- - Perform group merge with the specified group.
- migrate:
- required: False
- type: bool
- description:
- - Migrate the group Management Service to the current group Management Service backup array.
- name:
- required: True
- type: str
- description:
- - Name of the group.
- ntp_server:
- required: False
- type: str
- description:
- - Either IP address or hostname of the NTP server for this group. Plain string.
- proxy_port:
- required: False
- type: int
- description:
- - Proxy Port of HTTP Proxy Server. Integer value between 0-65535 representing TCP/IP port.
- proxy_server:
- required: False
- type: str
- description:
- - Hostname or IP Address of HTTP Proxy Server. Setting this attribute to an empty string will unset all proxy settings.
- proxy_username:
- required: False
- type: str
- description:
- - Username to authenticate with HTTP Proxy Server. HTTP proxy server username, string up to 255 characters, special
- - characters ([, ], `, ;, ampersand, tab, space, newline) are not allowed.
- proxy_password:
- required: False
- type: str
- description:
- - Password to authenticate with HTTP Proxy Server.
- reboot:
- required: False
- type: bool
- description:
- - Reboot all arrays in the group.
- repl_throttle_list:
- required: False
- type: list
- elements: dict
- description:
- - All the replication bandwidth limits on the system. All the throttles for the partner.
- send_alert_to_support:
- required: False
- type: bool
- description:
- - Whether to send alert to Support.
- skip_secondary_mgmt_ip:
- required: False
- type: bool
- description:
- - Skip check for secondary management IP address.
- smtp_auth_enabled:
- required: False
- type: bool
- description:
- - Whether SMTP Server requires authentication.
- smtp_auth_password:
- required: False
- type: str
- description:
- - Password to authenticate with SMTP Server.
- smtp_auth_username:
- required: False
- type: str
- description:
- - Username to authenticate with SMTP Server.
- smtp_port:
- required: False
- type: int
- description:
- - Port number of SMTP Server.
- smtp_encrypt_type:
- required: False
- choices:
- - none
- - starttls
- - ssl
- type: str
- description:
- - Level of encryption for SMTP.
- snmp_community:
- required: False
- type: str
- description:
- - Community string to be used with SNMP.
- snmp_get_enabled:
- required: False
- type: bool
- description:
- - Whether to accept SNMP get commands.
- snmp_get_port:
- required: False
- type: int
- description:
- - Port number to which SNMP get requests should be sent.
- snmp_trap_enabled:
- required: False
- type: bool
- description:
- - Whether to enable SNMP traps.
- snmp_trap_host:
- required: False
- type: str
- description:
- - Hostname or IP Address to send SNMP traps.
- snmp_trap_port:
- required: False
- type: int
- description:
- - Port number of SNMP trap host.
- snmp_sys_contact:
- required: False
- type: str
- description:
- - Name of the SNMP administrator. Plain string.
- snmp_sys_location:
- required: False
- type: str
- description:
- - Location of the group. Plain string.
- src_group_ip:
- required: False
- type: str
- description:
- - IP address of the source group.
- src_group_name:
- required: False
- type: str
- description:
- - Name of the source group.
- src_username:
- required: False
- type: str
- description:
- - Username of the source group.
- src_passphrase:
- required: False
- type: str
- description:
- - Source group encryption passphrase. Encryption passphrase. String with size from 8 to 64 printable characters.
- src_password:
- required: False
- type: str
- description:
- - Password of the source group.
- state:
- required: True
- choices:
- - present
- - absent
- type: str
- description:
- - The group operation.
- syslogd_enabled:
- required: False
- type: bool
- description:
- - Is syslogd enabled on this system.
- syslogd_port:
- required: False
- type: int
- description:
- - Port number for syslogd server.
- syslogd_server:
- required: False
- type: str
- description:
- - Hostname of the syslogd server.
- tdz_enabled:
- required: False
- type: bool
- description:
- - Is Target Driven Zoning (TDZ) enabled on this group.
- tdz_prefix:
- required: False
- type: str
- description:
- - Target Driven Zoning (TDZ) prefix for peer zones created by TDZ.
- test_alert:
- required: False
- type: bool
- description:
- - Generate a test alert.
- timezone:
- required: False
- type: str
- description:
- - Timezone in which this group is located. Plain string.
- tlsv1_enabled:
- required: False
- type: bool
- description:
- - Enable or disable TLSv1.0 and TLSv1.1.
- user_inactivity_timeout:
- required: False
- type: int
- description:
- - The amount of time in seconds that the user session is inactive before timing out. User inactivity timeout in second, valid range is from 1 to 43200.
- validate_merge:
- required: False
- type: bool
- description:
- - Perform group merge validation.
- vss_validation_timeout:
- required: False
- type: int
- description:
- - The amount of time in seconds to validate Microsoft VSS application synchronization before timing out. VSS validation timeout in second,
- valid range is from 1 to 3600.
- vvol_enabled:
- required: False
- type: bool
- description:
- - Are vVol enabled on this group.
-extends_documentation_fragment: hpe.nimble.hpe_nimble
-short_description: Manage the HPE Nimble Storage group
-version_added: "1.0.0"
-notes:
- - This module does not support C(check_mode).
-'''
-
-EXAMPLES = r'''
-
-- name: Update group
- hpe.nimble.hpe_nimble_group:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- send_alert_to_support: "{{ send_alert_to_support }}"
- alert_to_email_addrs: "{{ alert_to_email_addrs }}"
- state: "present"
-
-- name: Reboot group
- hpe.nimble.hpe_nimble_group:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- state: "present"
- reboot: true
-
-- name: Halt group
- hpe.nimble.hpe_nimble_group:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- state: "present"
- halt: true
-
-- name: Validate merge group
- hpe.nimble.hpe_nimble_group:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- src_group_ip: "{{ src_group_ip }}"
- src_password: "{{ src_password }}"
- skip_secondary_mgmt_ip: "{{ skip_secondary_mgmt_ip }}"
- src_passphrase: "{{ src_passphrase }}"
- state: "present"
- validate_merge: true
-
-- name: Merge group
- hpe.nimble.hpe_nimble_group:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- src_group_ip: "{{ src_group_ip }}"
- src_password: "{{ src_password }}"
- skip_secondary_mgmt_ip: "{{ skip_secondary_mgmt_ip }}"
- src_passphrase: "{{ src_passphrase }}"
- state: "present"
- merge: true
-
-- name: Test alert group
- hpe.nimble.hpe_nimble_group:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- level: "{{ level }}"
- state: "present"
- test_alert: true
-
-- name: Migrate group
- hpe.nimble.hpe_nimble_group:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- state: "present"
- migrate: true
-
-- name: Check migrate group
- hpe.nimble.hpe_nimble_group:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- state: "present"
- check_migrate: true
-
-'''
-RETURN = r'''
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-try:
- from nimbleclient.v1 import client
-except ImportError:
- client = None
-from ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble import __version__ as NIMBLE_ANSIBLE_VERSION
-import ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble as utils
-
-
-def update_group(
- client_obj,
- group_name,
- **kwargs):
-
- if utils.is_null_or_empty(group_name):
- return (False, False, "Update group failed as it is not present.", {}, {})
-
- try:
- group_resp = client_obj.groups.get(id=None, name=group_name)
- if utils.is_null_or_empty(group_resp):
- return (False, False, f"Group '{group_name}' cannot be updated as it is not present.", {}, {})
-
- changed_attrs_dict, params = utils.remove_unchanged_or_null_args(group_resp, **kwargs)
- if changed_attrs_dict.__len__() > 0:
- group_resp = client_obj.groups.update(id=group_resp.attrs.get("id"), **params)
- return (True, True, f"Group '{group_name}' already present. Modified the following attributes '{changed_attrs_dict}'",
- changed_attrs_dict, group_resp.attrs)
- else:
- return (True, False, f"Group '{group_resp.attrs.get('name')}' already present in given state.", {}, group_resp.attrs)
- except Exception as ex:
- return (False, False, f"Group update failed | '{ex}'", {}, {})
-
-
-def reboot_group(
- client_obj,
- group_name):
-
- if utils.is_null_or_empty(group_name):
- return (False, False, "Reboot group failed as it is not present.", {})
-
- try:
- group_resp = client_obj.groups.get(id=None, name=group_name)
- if utils.is_null_or_empty(group_resp):
- return (False, False, f"Group '{group_name}' cannot be rebooted as it is not present.", {})
-
- client_obj.groups.reboot(id=group_resp.attrs.get("id"))
- return (True, True, f"Rebooted group '{group_name}' successfully.", {})
- except Exception as ex:
- return (False, False, f"Reboot group failed | '{ex}'", {})
-
-
-def halt_group(
- client_obj,
- group_name,
- **kwargs):
-
- if utils.is_null_or_empty(group_name):
- return (False, False, "Halt group failed as it is not present.", {})
-
- try:
- group_resp = client_obj.groups.get(id=None, name=group_name)
- if utils.is_null_or_empty(group_resp):
- return (False, False, f"Group '{group_name}' cannot be halted as it is not present.", {})
- params = utils.remove_null_args(**kwargs)
- client_obj.groups.halt(id=group_resp.attrs.get("id"), **params)
- return (True, True, f"Halted group '{group_name}' successfully.", {})
- except Exception as ex:
- return (False, False, f"Halt group failed | '{ex}'", {})
-
-
-def test_alert_group(
- client_obj,
- group_name,
- level):
-
- if utils.is_null_or_empty(group_name):
- return (False, False, "Test alert for group failed as it is not present.", {})
-
- try:
- group_resp = client_obj.groups.get(id=None, name=group_name)
- if utils.is_null_or_empty(group_resp):
- return (False, False, f"Test alert for group '{group_name}' cannot be done as it is not present.", {})
-
- client_obj.groups.test_alert(id=group_resp.attrs.get("id"), level=level)
- return (True, True, f"Tested alert for group '{group_name}' successfully.", {})
- except Exception as ex:
- return (False, False, f"Test alert for group failed | '{ex}'", {})
-
-
-def validate_merge_group(
- client_obj,
- group_name,
- **kwargs):
-
- if utils.is_null_or_empty(group_name):
- return (False, False, "Validate merge for group failed as it is not present.", {}, {})
- try:
-
- group_resp = client_obj.groups.get(id=None, name=group_name)
- if utils.is_null_or_empty(group_resp):
- return (False, False, f"Validate merge for group '{group_name}' cannot be done as it is not present.", {}, {})
-
- params = utils.remove_null_args(**kwargs)
- validate_merge_resp = client_obj.groups.validate_merge(id=group_resp.attrs.get("id"), **params)
-
- if hasattr(validate_merge_resp, 'attrs'):
- validate_merge_resp = validate_merge_resp.attrs
-
- if utils.is_null_or_empty(validate_merge_resp.get("validation_error_msg")):
- return (True, False, f"Validate merge operation for group '{group_name}' done successfully.", {}, validate_merge_resp)
- else:
- msg = validate_merge_resp.get("validation_error_msg")
- return (False, False, f"Validate merge operation for group '{group_name}' failed with error '{msg}'", {}, validate_merge_resp)
- except Exception as ex:
- return (False, False, f"Validate merge for group failed | '{ex}'", {}, {})
-
-
-def merge_group(
- client_obj,
- group_name,
- **kwargs):
-
- if utils.is_null_or_empty(group_name):
- return (False, False, "Merge for group failed as it is not present.", {}, {})
- try:
- group_resp = client_obj.groups.get(id=None, name=group_name)
- if utils.is_null_or_empty(group_resp):
- return (False, False, f"Merge for group '{group_name}' cannot be done as it is not present.", {}, {})
-
- params = utils.remove_null_args(**kwargs)
- merge_resp = client_obj.groups.merge(id=group_resp.attrs.get("id"), **params)
-
- if hasattr(merge_resp, 'attrs'):
- merge_resp = merge_resp.attrs
- return (True, True, f"Merged group '{group_name}' successfully.", {}, merge_resp)
- except Exception as ex:
- return (False, False, f"Merge for group failed | '{ex}'", {}, {})
-
-
-def check_migrate_group(
- client_obj,
- group_name):
-
- if utils.is_null_or_empty(group_name):
- return (False, False, "Check migrate for group failed as it is not present.", {})
-
- try:
- group_resp = client_obj.groups.get(id=None, name=group_name)
- if utils.is_null_or_empty(group_resp):
- return (False, False, f"Check migrate for group '{group_name}' cannot be done as it is not present.", {})
-
- client_obj.groups.check_migrate(id=group_resp.attrs.get("id"))
- return (True, True, f"Check migrate for group '{group_name}' done successfully.", {})
- except Exception as ex:
- return (False, False, f"Check migrate for group failed | '{ex}'", {})
-
-
-def migrate_group(
- client_obj,
- group_name):
-
- if utils.is_null_or_empty(group_name):
- return (False, False, "Group migrate failed as it is not present.", {})
-
- try:
- group_resp = client_obj.groups.get(id=None, name=group_name)
- if utils.is_null_or_empty(group_resp):
- return (False, False, f"Migrate for group '{group_name}' cannot be done as it is not present.", {})
-
- client_obj.groups.migrate(id=group_resp.attrs.get("id"))
- return (True, True, f"Group '{group_name}' migrated successfully.", {})
- except Exception as ex:
- return (False, False, f"Group migrate failed | '{ex}'", {})
-
-
-def main():
-
- fields = {
- "alarms": {
- "required": False,
- "type": "bool"
- },
- "alert_to_email_addrs": {
- "required": False,
- "type": "str"
- },
- "alert_from_email_addrs": {
- "required": False,
- "type": "str"
- },
- "alert_min_level": {
- "required": False,
- "choices": ['info',
- 'notice',
- 'warning',
- 'critical'
- ],
- "type": "str"
- },
- "allow_analytics_gui": {
- "required": False,
- "type": "bool"
- },
- "allow_support_tunnel": {
- "required": False,
- "type": "bool"
- },
- "auto_switchover": {
- "required": False,
- "type": "bool"
- },
- "autoclean_unmanaged_snapshots": {
- "required": False,
- "type": "bool"
- },
- "autoclean_unmanaged_snapshots_ttl_unit": {
- "required": False,
- "type": "int"
- },
- "autosupport": {
- "required": False,
- "type": "bool"
- },
- "cc_mode": {
- "required": False,
- "type": "bool"
- },
- "change_name": {
- "required": False,
- "type": "str"
- },
- "check_migrate": {
- "required": False,
- "type": "bool"
- },
- "date": {
- "required": False,
- "type": "int"
- },
- "default_iscsi_target_scope": {
- "required": False,
- "choices": ['volume',
- 'group'
- ],
- "type": "str"
- },
- "default_volume_limit": {
- "required": False,
- "type": "int"
- },
- "domain_name": {
- "required": False,
- "type": "str"
- },
- "dns_servers": {
- "required": False,
- "type": "list",
- "elements": 'dict'
- },
- "fc_enabled": {
- "required": False,
- "type": "bool"
- },
- "force": {
- "required": False,
- "type": "bool",
- "default": False
- },
- "group_snapshot_ttl": {
- "required": False,
- "type": "int"
- },
- "group_target_enabled": {
- "required": False,
- "type": "bool"
- },
- "group_target_name": {
- "required": False,
- "type": "str"
- },
- "halt": {
- "required": False,
- "type": "bool"
- },
- "iscsi_enabled": {
- "required": False,
- "type": "bool"
- },
- "isns_enabled": {
- "required": False,
- "type": "bool"
- },
- "isns_port": {
- "required": False,
- "type": "int"
- },
- "isns_server": {
- "required": False,
- "type": "str"
- },
- "level": {
- "required": False,
- "choices": ['info',
- 'notice',
- 'warning',
- 'critical'
- ],
- "type": "str"
- },
- "login_banner_after_auth": {
- "required": False,
- "type": "bool"
- },
- "login_banner_message": {
- "required": False,
- "type": "str"
- },
- "login_banner_reset": {
- "required": False,
- "type": "str"
- },
- "merge": {
- "required": False,
- "type": "bool"
- },
- "migrate": {
- "required": False,
- "type": "bool"
- },
- "name": {
- "required": True,
- "type": "str"
- },
- "ntp_server": {
- "required": False,
- "type": "str"
- },
- "proxy_port": {
- "required": False,
- "type": "int"
- },
- "proxy_server": {
- "required": False,
- "type": "str"
- },
- "proxy_username": {
- "required": False,
- "type": "str"
- },
- "proxy_password": {
- "required": False,
- "type": "str",
- "no_log": True
- },
- "reboot": {
- "required": False,
- "type": "bool"
- },
- "repl_throttle_list": {
- "required": False,
- "type": "list",
- "elements": 'dict'
- },
- "send_alert_to_support": {
- "required": False,
- "type": "bool"
- },
- "skip_secondary_mgmt_ip": {
- "required": False,
- "type": "bool"
- },
- "smtp_auth_enabled": {
- "required": False,
- "type": "bool"
- },
- "smtp_auth_password": {
- "required": False,
- "type": "str",
- "no_log": True
- },
- "smtp_auth_username": {
- "required": False,
- "type": "str"
- },
- "smtp_port": {
- "required": False,
- "type": "int"
- },
- "smtp_encrypt_type": {
- "required": False,
- "choices": ['none',
- 'starttls',
- 'ssl'
- ],
- "type": "str"
- },
- "snmp_community": {
- "required": False,
- "type": "str"
- },
- "snmp_get_enabled": {
- "required": False,
- "type": "bool"
- },
- "snmp_get_port": {
- "required": False,
- "type": "int"
- },
- "snmp_trap_enabled": {
- "required": False,
- "type": "bool"
- },
- "snmp_trap_host": {
- "required": False,
- "type": "str"
- },
- "snmp_trap_port": {
- "required": False,
- "type": "int"
- },
- "snmp_sys_contact": {
- "required": False,
- "type": "str"
- },
- "snmp_sys_location": {
- "required": False,
- "type": "str"
- },
- "src_group_ip": {
- "required": False,
- "type": "str"
- },
- "src_group_name": {
- "required": False,
- "type": "str"
- },
- "src_username": {
- "required": False,
- "type": "str"
- },
- "src_passphrase": {
- "required": False,
- "type": "str",
- "no_log": True
- },
- "src_password": {
- "required": False,
- "type": "str",
- "no_log": True
- },
- "state": {
- "required": True,
- "choices": ['present',
- 'absent'
- ],
- "type": "str"
- },
- "syslogd_enabled": {
- "required": False,
- "type": "bool"
- },
- "syslogd_port": {
- "required": False,
- "type": "int"
- },
- "syslogd_server": {
- "required": False,
- "type": "str"
- },
- "tdz_enabled": {
- "required": False,
- "type": "bool"
- },
- "tdz_prefix": {
- "required": False,
- "type": "str"
- },
- "test_alert": {
- "required": False,
- "type": "bool"
- },
- "timezone": {
- "required": False,
- "type": "str"
- },
- "tlsv1_enabled": {
- "required": False,
- "type": "bool"
- },
- "user_inactivity_timeout": {
- "required": False,
- "type": "int"
- },
- "validate_merge": {
- "required": False,
- "type": "bool"
- },
- "vss_validation_timeout": {
- "required": False,
- "type": "int"
- },
- "vvol_enabled": {
- "required": False,
- "type": "bool"
- }
- }
- default_fields = utils.basic_auth_arg_fields()
- fields.update(default_fields)
- module = AnsibleModule(argument_spec=fields)
- if client is None:
- module.fail_json(msg='Python nimble-sdk could not be found.')
-
- hostname = module.params["host"]
- username = module.params["username"]
- password = module.params["password"]
- alarms = module.params["alarms"]
- alert_to_email_addrs = module.params["alert_to_email_addrs"]
- alert_from_email_addrs = module.params["alert_from_email_addrs"]
- alert_min_level = module.params["alert_min_level"]
- allow_analytics_gui = module.params["allow_analytics_gui"]
- allow_support_tunnel = module.params["allow_support_tunnel"]
- auto_switchover = module.params["auto_switchover"]
- autoclean_unmanaged_snapshots = module.params["autoclean_unmanaged_snapshots"]
- autoclean_unmanaged_snapshots_ttl_unit = module.params["autoclean_unmanaged_snapshots_ttl_unit"]
- autosupport = module.params["autosupport"]
- cc_mode = module.params["cc_mode"]
- change_name = module.params["change_name"]
- check_migrate = module.params["check_migrate"]
- date = module.params["date"]
- default_iscsi_target_scope = module.params["default_iscsi_target_scope"]
- default_volume_limit = module.params["default_volume_limit"]
- domain_name = module.params["domain_name"]
- dns_servers = module.params["dns_servers"]
- fc_enabled = module.params["fc_enabled"]
- force = module.params["force"]
- group_snapshot_ttl = module.params["group_snapshot_ttl"]
- group_target_enabled = module.params["group_target_enabled"]
- group_target_name = module.params["group_target_name"]
- halt = module.params["halt"]
- iscsi_enabled = module.params["iscsi_enabled"]
- isns_enabled = module.params["isns_enabled"]
- isns_port = module.params["isns_port"]
- isns_server = module.params["isns_server"]
- level = module.params["level"]
- login_banner_after_auth = module.params["login_banner_after_auth"]
- login_banner_message = module.params["login_banner_message"]
- login_banner_reset = module.params["login_banner_reset"]
- merge = module.params["merge"]
- migrate = module.params["migrate"]
- group_name = module.params["name"]
- ntp_server = module.params["ntp_server"]
- proxy_port = module.params["proxy_port"]
- proxy_server = module.params["proxy_server"]
- proxy_username = module.params["proxy_username"]
- proxy_password = module.params["proxy_password"]
- reboot = module.params["reboot"]
- repl_throttle_list = module.params["repl_throttle_list"]
- send_alert_to_support = module.params["send_alert_to_support"]
- skip_secondary_mgmt_ip = module.params["skip_secondary_mgmt_ip"]
- smtp_auth_enabled = module.params["smtp_auth_enabled"]
- smtp_auth_password = module.params["smtp_auth_password"]
- smtp_auth_username = module.params["smtp_auth_username"]
- smtp_port = module.params["smtp_port"]
- smtp_encrypt_type = module.params["smtp_encrypt_type"]
- snmp_community = module.params["snmp_community"]
- snmp_get_enabled = module.params["snmp_get_enabled"]
- snmp_get_port = module.params["snmp_get_port"]
- snmp_trap_enabled = module.params["snmp_trap_enabled"]
- snmp_trap_host = module.params["snmp_trap_host"]
- snmp_trap_port = module.params["snmp_trap_port"]
- snmp_sys_contact = module.params["snmp_sys_contact"]
- snmp_sys_location = module.params["snmp_sys_location"]
- src_group_ip = module.params["src_group_ip"]
- src_group_name = module.params["src_group_name"]
- src_username = module.params["src_username"]
- src_passphrase = module.params["src_passphrase"]
- src_password = module.params["src_password"]
- state = module.params["state"]
- syslogd_enabled = module.params["syslogd_enabled"]
- syslogd_port = module.params["syslogd_port"]
- syslogd_server = module.params["syslogd_server"]
- tdz_enabled = module.params["tdz_enabled"]
- tdz_prefix = module.params["tdz_prefix"]
- test_alert = module.params["test_alert"]
- timezone = module.params["timezone"]
- tlsv1_enabled = module.params["tlsv1_enabled"]
- user_inactivity_timeout = module.params["user_inactivity_timeout"]
- validate_merge = module.params["validate_merge"]
- vss_validation_timeout = module.params["vss_validation_timeout"]
- vvol_enabled = module.params["vvol_enabled"]
-
- if (username is None or password is None or hostname is None):
- module.fail_json(
- msg="Missing variables: hostname, username and password is mandatory.")
-
- # defaults
- return_status = changed = False
- msg = "No task to run."
- resp = None
- try:
- client_obj = client.NimOSClient(
- hostname,
- username,
- password,
- f"HPE Nimble Ansible Modules v{NIMBLE_ANSIBLE_VERSION}"
- )
-
- # States
- if state == "present":
- if reboot is True:
- return_status, changed, msg, changed_attrs_dict = reboot_group(client_obj, group_name)
-
- elif halt is True:
- return_status, changed, msg, changed_attrs_dict = halt_group(client_obj, group_name, force=force)
-
- elif test_alert is True:
- return_status, changed, msg, changed_attrs_dict = test_alert_group(client_obj, group_name, level)
-
- elif validate_merge is True:
- return_status, changed, msg, changed_attrs_dict, resp = validate_merge_group(
- client_obj,
- group_name,
- src_group_ip=src_group_ip,
- src_group_name=src_group_name,
- src_password=src_password,
- src_username=src_username,
- skip_secondary_mgmt_ip=skip_secondary_mgmt_ip,
- src_passphrase=src_passphrase)
-
- elif merge is True:
- return_status, changed, msg, changed_attrs_dict, resp = merge_group(
- client_obj,
- group_name,
- src_group_ip=src_group_ip,
- src_group_name=src_group_name,
- src_password=src_password,
- src_username=src_username,
- force=force,
- skip_secondary_mgmt_ip=skip_secondary_mgmt_ip,
- src_passphrase=src_passphrase)
-
- elif check_migrate is True:
- return_status, changed, msg, changed_attrs_dict = check_migrate_group(client_obj, group_name)
-
- elif migrate is True:
- return_status, changed, msg, changed_attrs_dict = migrate_group(client_obj, group_name)
-
- else:
- # update op
- return_status, changed, msg, changed_attrs_dict, resp = update_group(
- client_obj,
- group_name,
- name=change_name,
- alarms=alarms,
- alert_to_email_addrs=alert_to_email_addrs,
- alert_from_email_addrs=alert_from_email_addrs,
- alert_min_level=alert_min_level,
- allow_analytics_gui=allow_analytics_gui,
- allow_support_tunnel=allow_support_tunnel,
- auto_switchover=auto_switchover,
- autoclean_unmanaged_snapshots=autoclean_unmanaged_snapshots,
- autoclean_unmanaged_snapshots_ttl_unit=autoclean_unmanaged_snapshots_ttl_unit,
- autosupport=autosupport,
- cc_mode=cc_mode,
- date=date,
- default_iscsi_target_scope=default_iscsi_target_scope,
- default_volume_limit=default_volume_limit,
- domain_name=domain_name,
- dns_servers=dns_servers,
- fc_enabled=fc_enabled,
- group_snapshot_ttl=group_snapshot_ttl,
- group_target_enabled=group_target_enabled,
- group_target_name=group_target_name,
- iscsi_enabled=iscsi_enabled,
- isns_enabled=isns_enabled,
- isns_port=isns_port,
- isns_server=isns_server,
- login_banner_after_auth=login_banner_after_auth,
- login_banner_message=login_banner_message,
- login_banner_reset=login_banner_reset,
- ntp_server=ntp_server,
- proxy_port=proxy_port,
- proxy_password=proxy_password,
- proxy_server=proxy_server,
- proxy_username=proxy_username,
- repl_throttle_list=repl_throttle_list,
- send_alert_to_support=send_alert_to_support,
- smtp_auth_enabled=smtp_auth_enabled,
- smtp_auth_password=smtp_auth_password,
- smtp_auth_username=smtp_auth_username,
- smtp_port=smtp_port,
- smtp_encrypt_type=smtp_encrypt_type,
- snmp_community=snmp_community,
- snmp_get_enabled=snmp_get_enabled,
- snmp_get_port=snmp_get_port,
- snmp_trap_enabled=snmp_trap_enabled,
- snmp_trap_host=snmp_trap_host,
- snmp_trap_port=snmp_trap_port,
- snmp_sys_contact=snmp_sys_contact,
- snmp_sys_location=snmp_sys_location,
- syslogd_enabled=syslogd_enabled,
- syslogd_port=syslogd_port,
- syslogd_server=syslogd_server,
- tdz_enabled=tdz_enabled,
- tdz_prefix=tdz_prefix,
- timezone=timezone,
- tlsv1_enabled=tlsv1_enabled,
- user_inactivity_timeout=user_inactivity_timeout,
- vss_validation_timeout=vss_validation_timeout,
- vvol_enabled=vvol_enabled)
-
- elif state == "absent":
- return_status, changed, msg, changed_attrs_dict = reboot_group(client_obj, group_name)
- except Exception as ex:
- # failed for some reason.
- msg = str(ex)
-
- if return_status:
- if utils.is_null_or_empty(resp):
- module.exit_json(return_status=return_status, changed=changed, msg=msg)
- else:
- module.exit_json(return_status=return_status, changed=changed, msg=msg, attrs=resp)
- else:
- if utils.is_null_or_empty(resp):
- module.fail_json(return_status=return_status, changed=changed, msg=msg)
- else:
- module.fail_json(return_status=return_status, changed=changed, msg=msg, attrs=resp)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_info.py b/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_info.py
deleted file mode 100644
index 51fd94b31..000000000
--- a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_info.py
+++ /dev/null
@@ -1,1026 +0,0 @@
-#!/usr/bin/python
-
-# Copyright 2020 Hewlett Packard Enterprise Development LP
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
-# file except in compliance with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software distributed
-# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-# OF ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
-
-# author Alok Ranjan (alok.ranjan2@hpe.com)
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-DOCUMENTATION = r'''
----
-author:
- - HPE Nimble Storage Ansible Team (@ar-india) <nimble-dcs-storage-automation-eng@hpe.com>
-description:
- - Collect information from a HPE Nimble Storage array. By default, the module will collect basic information
- including array, groups config, protection templates, protection schedules, snapshots, snapshot collections, volume
- collections and volume counts. Additional information can be collected based on the configured set of arguments.
-module: hpe_nimble_info
-options:
- gather_subset:
- required: False
- default: minimum
- type: list
- elements: raw
- description:
- - When supplied, this argument will define the information to be collected. Possible values for this include "all" "minimum" "config"
- "access_control_records", "alarms", "application_servers", "application_categories", "arrays", "chap_users", "controllers", "disks",
- "fibre_channel_interfaces", "fibre_channel_configs", "fibre_channel_initiator_aliases", "fibre_channel_ports", "folders", "groups",
- "initiator_groups", "initiators", "master_key", "network_configs", "performance_policies", "pools", "protection_schedules",
- "protection_templates", "protocol_endpoints", "replication_partners", "shelves", "snapshots", "snapshot_collections", "software_versions",
- "user_groups", "user_policies", "users", "volumes", "volume_collections".
-
- - Each subset except "all", "minimum" and "config" supports four types of subset options. Subset "all" supports limit and detail as subset options.
- Subset "config" and "minimum" does not support any subset options.
-
- - See the example section for usage of the following subset options.
- - fields - A string representing which attributes to display for a given subset.
- - limit - An integer value which represents how many latest items to show for a given subset.
- - detail - A bool flag when set to true fetches everything for a given subset. Default is "True".
- - query - A key-value pair to query.
-extends_documentation_fragment: hpe.nimble.hpe_nimble
-short_description: Collect information from HPE Nimble Storage array
-version_added: "1.0.0"
-notes:
- - This module supports C(check_mode).
-'''
-
-EXAMPLES = r'''
-
-- name: Collect default set of information
- hpe.nimble.hpe_nimble_info:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- gather_subset:
- - minimum:
- register: array_info
-
-- name: Show default information
- ansible.builtin.debug:
- msg: "{{ array_info['nimble_info']['default'] }}"
-
-- name: Collect config
- hpe.nimble.hpe_nimble_info:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- gather_subset:
- - config:
- register: array_info
-
-- name: Show config information
- ansible.builtin.debug:
- msg: "{{ array_info['nimble_info']['config'] }}"
-
-- name: Collect all
- hpe.nimble.hpe_nimble_info:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- gather_subset:
- - all:
- limit: 1
- register: array_info
-
-- name: Show all information
- ansible.builtin.debug:
- msg: "{{ array_info['nimble_info'] }}"
-
-- name: Collect volume, snapshot and volume collection. Below query will show just one
- snapshot detail with attributes 'name and id' for a volume called 'vol1'
- hpe.nimble.hpe_nimble_info:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- gather_subset:
- - volumes:
- fields: "name,id"
- limit: 2
- - volume_collections:
- limit: 1
- detail: false
- - snapshots:
- fields: "name,id"
- query:
- vol_name: "vol1"
- limit: 1
- detail: True
- register: array_info
-
-- name: Show information
- ansible.builtin.debug:
- msg: "{{ array_info['nimble_info'] }}"
-
-'''
-RETURN = r'''
-nimble_info:
- description: Returns the information collected from the HPE Nimble Storage array
- returned: always
- type: complex
- contains: {}
- sample: {
- "config": {
- "arrays": [
- {
- "all_flash": false,
- "extended_model": "vmware-4G-5T-160F",
- "full_name": "ansibler1-va",
- "role": "leader",
- "serial": "ansibler1-va"
- }
- ],
- "groups": [
- {
- "alarms_enabled": true,
- "auto_switchover_enabled": true,
- "auto_switchover_messages": [],
- "autosupport_enabled": true,
- "default_iscsi_target_scope": "group",
- "dns_servers": [
- {
- "ip_addr": "10.235.0.185"
- },
- {
- "ip_addr": "10.1.255.254"
- }
- ],
- "domain_name": "vlab.nimblestorage.com",
- "encryption_config": {
- "cipher": "aes_256_xts",
- "encryption_active": true,
- "encryption_key_manager": "local",
- "master_key_set": true,
- "mode": "available",
- "scope": "group"
- },
- "failover_mode": "Manual",
- "fc_enabled": false,
- "iscsi_enabled": true,
- "isns_enabled": true,
- "leader_array_name": "ansibler1-va",
- "member_list": [
- "ansibler1-va"
- ],
- "name": "group-ansibler1-va",
- "ntp_server": "time.nimblestorage.com",
- "send_alert_to_support": true,
- "smtp_auth_enabled": false,
- "smtp_auth_username": "",
- "smtp_port": 25,
- "smtp_server": "",
- "snmp_community": "public",
- "snmp_trap_enabled": false,
- "snmp_trap_host": "",
- "snmp_trap_port": 162,
- "syslogd_enabled": false,
- "syslogd_server": "",
- "vvol_enabled": true
- }
- ],
- "network_configs": [
- {
- "active_since": 1592210265,
- "array_list": [
- {
- "ctrlr_a_support_ip": "10.18.1.1",
- "ctrlr_b_support_ip": "10.18.2.2",
- "member_gid": 1,
- "name": "ansibler1-va",
- "nic_list": [
- {
- "data_ip": "172.16.41.139",
- "name": "eth3",
- "subnet_label": "data1",
- "tagged": false
- },
- {
- "data_ip": "172.16.234.76",
- "name": "eth4",
- "subnet_label": "data2",
- "tagged": false
- },
- {
- "data_ip": "",
- "name": "eth2",
- "subnet_label": "mgmt-data",
- "tagged": false
- },
- {
- "data_ip": "",
- "name": "eth1",
- "subnet_label": "mgmt-data",
- "tagged": false
- }
- ]
- }
- ],
- "creation_time": 1586411318,
- "group_leader_array": "ansibler1-va",
- "id": "177321e77f009f2013000000000000000000000001",
- "iscsi_automatic_connection_method": true,
- "iscsi_connection_rebalancing": true,
- "last_active": 1592210256,
- "last_modified": 1586411356,
- "mgmt_ip": "10.18.171.96",
- "name": "active",
- "role": "active",
- "route_list": [
- {
- "gateway": "10.18.160.1",
- "tgt_netmask": "0.0.0.0",
- "tgt_network": "0.0.0.0"
- }
- ],
- "secondary_mgmt_ip": "",
- "subnet_list": [
- {
- "allow_group": true,
- "allow_iscsi": true,
- "discovery_ip": "172.16.41.140",
- "failover": true,
- "failover_enable_time": 0,
- "label": "data1",
- "mtu": 1500,
- "netmask": "255.255.224.0",
- "network": "172.16.32.0",
- "netzone_type": "single",
- "type": "data",
- "vlan_id": 0
- },
- {
- "allow_group": true,
- "allow_iscsi": true,
- "discovery_ip": "172.16.234.101",
- "failover": true,
- "failover_enable_time": 0,
- "label": "data2",
- "mtu": 1500,
- "netmask": "255.255.224.0",
- "network": "172.16.224.0",
- "netzone_type": "single",
- "type": "data",
- "vlan_id": 0
- },
- {
- "allow_group": false,
- "allow_iscsi": false,
- "discovery_ip": "",
- "failover": true,
- "failover_enable_time": 0,
- "label": "mgmt-data",
- "mtu": 1500,
- "netmask": "255.255.224.0",
- "network": "10.18.160.0",
- "netzone_type": "none",
- "type": "mgmt",
- "vlan_id": 0
- }
- ]
- },
- {
- "active_since": 0,
- "array_list": [
- {
- "ctrlr_a_support_ip": "10.18.1.1",
- "ctrlr_b_support_ip": "10.18.2.2",
- "member_gid": 1,
- "name": "ansibler1-va",
- "nic_list": [
- {
- "data_ip": "",
- "name": "eth2",
- "subnet_label": "mgmt-data",
- "tagged": false
- },
- {
- "data_ip": "",
- "name": "eth1",
- "subnet_label": "mgmt-data",
- "tagged": false
- },
- {
- "data_ip": "172.16.41.139",
- "name": "eth3",
- "subnet_label": "data1",
- "tagged": false
- },
- {
- "data_ip": "172.16.234.76",
- "name": "eth4",
- "subnet_label": "data2",
- "tagged": false
- }
- ]
- }
- ],
- "creation_time": 1586411356,
- "group_leader_array": "ansibler1-va",
- "id": "177321e77f009f2013000000000000000000000002",
- "iscsi_automatic_connection_method": true,
- "iscsi_connection_rebalancing": true,
- "last_active": 1592210265,
- "last_modified": 1586411318,
- "mgmt_ip": "10.18.171.96",
- "name": "backup",
- "role": "backup",
- "route_list": [
- {
- "gateway": "10.18.160.1",
- "tgt_netmask": "0.0.0.0",
- "tgt_network": "0.0.0.0"
- }
- ],
- "secondary_mgmt_ip": "",
- "subnet_list": [
- {
- "allow_group": false,
- "allow_iscsi": false,
- "discovery_ip": "",
- "failover": true,
- "failover_enable_time": 0,
- "label": "mgmt-data",
- "mtu": 1500,
- "netmask": "255.255.224.0",
- "network": "10.18.160.0",
- "netzone_type": "none",
- "type": "mgmt",
- "vlan_id": 0
- },
- {
- "allow_group": true,
- "allow_iscsi": true,
- "discovery_ip": "172.16.41.140",
- "failover": true,
- "failover_enable_time": 0,
- "label": "data1",
- "mtu": 1500,
- "netmask": "255.255.224.0",
- "network": "172.16.32.0",
- "netzone_type": "single",
- "type": "data",
- "vlan_id": 0
- },
- {
- "allow_group": true,
- "allow_iscsi": true,
- "discovery_ip": "172.16.234.101",
- "failover": true,
- "failover_enable_time": 0,
- "label": "data2",
- "mtu": 1500,
- "netmask": "255.255.224.0",
- "network": "172.16.224.0",
- "netzone_type": "single",
- "type": "data",
- "vlan_id": 0
- }
- ]
- }
- ],
- "pools": [
- {
- "array_count": 1,
- "dedupe_all_volumes": false,
- "dedupe_capable": false,
- "is_default": true,
- "name": "default",
- "vol_list": [
- {
- "id": "0675a5e21cc205c609000000000000000000000001",
- "name": "vol1",
- "vol_id": "0675a5e21cc205c609000000000000000000000001",
- "vol_name": "vol1"
- },
- {
- "id": "067321e77f009f2013000000000000000000000271",
- "name": "volumetc-vol1-0-24-07-2020-71470d6d-cd6e-11ea-9165-00505696c568",
- "vol_id": "067321e77f009f2013000000000000000000000271",
- "vol_name": "volumetc-vol1-0-24-07-2020-71470d6d-cd6e-11ea-9165-00505696c568"
- },
- {
- "id": "067321e77f009f201300000000000000000000024d",
- "name": "ansible-vol1",
- "vol_id": "067321e77f009f201300000000000000000000024d",
- "vol_name": "ansible-vol1"
- }
- ]
- }
- ]
- },
- "default": {
- "arrays": [
- {
- "all_flash": false,
- "extended_model": "vmware-4G-5T-160F",
- "full_name": "ansibler1-va"
- }
- ],
- "disks": 16,
- "folders": 0,
- "groups": [
- {
- "auto_switchover_messages": [],
- "default_iscsi_target_scope": "group",
- "encryption_config": {
- "cipher": "aes_256_xts",
- "encryption_active": true,
- "encryption_key_manager": "local",
- "master_key_set": true,
- "mode": "available",
- "scope": "group"
- },
- "fc_enabled": false,
- "iscsi_enabled": true,
- "leader_array_name": "ansibler1-va",
- "name": "group-ansibler1-va",
- "num_snaps": 49
- }
- ],
- "initiator_groups": 1,
- "protection_schedules": 6,
- "protection_templates": 3,
- "protocol_endpoints": 0,
- "snapshot_collections": 49,
- "snapshots": 49,
- "software_versions": "5.2.2.0-730069-opt",
- "users": 2,
- "volume_collections": 1,
- "volumes": 3
- },
- "snapshots":
- [
- {
- "access_control_records": null,
- "agent_type": "none",
- "app_uuid": "",
- "creation_time": 1586429663,
- "description": "Replicated by protection policy volcoll2 schedule Schedule-new",
- "expiry_after": 1,
- "expiry_time": 0,
- "id": "0475a5e21cc205c609000000000000000200000004",
- "is_manually_managed": true,
- "is_replica": true,
- "is_unmanaged": false,
- "last_modified": 1586429956,
- "metadata": null,
- "name": "adfsasfasfasf",
- "new_data_compressed_bytes": 0,
- "new_data_uncompressed_bytes": 0,
- "new_data_valid": true,
- "offline_reason": "user",
- "online": false,
- "origin_name": "",
- "pool_name": "default",
- "replication_status": null,
- "schedule_id": "0c7321e77f009f2013000000000000000000000008",
- "schedule_name": "Schedule-new",
- "serial_number": "022e0240e677ef2f6c9ce9006cc7be73",
- "size": 1073741824,
- "snap_collection_id": "0575a5e21cc205c609000000000000000000000004",
- "snap_collection_name": "adfsasfasfasf",
- "target_name": "iqn.2007-11.com.nimblestorage:group-ansibler1-va-g7321e77f009f2013",
- "vol_id": "0675a5e21cc205c609000000000000000000000001",
- "vol_name": "vol1",
- "vpd_ieee0": "022e0240e677ef2f",
- "vpd_ieee1": "6c9ce9006cc7be73",
- "vpd_t10": "Nimble 022e0240e677ef2f6c9ce9006cc7be73",
- "writable": false
- }
- ],
- "volume_collections":
- [
- "volcoll2": {
- "id": "077321e77f009f2013000000000000000000000005",
- "name": "volcoll2"
- }
- ],
- "volumes":
- [
- "10.18.180.239-ansible-vol1": {
- "id": "067321e77f009f2013000000000000000000000230",
- "name": "10.18.180.239-ansible-vol1"
- },
- "changed-volname": {
- "id": "067321e77f009f201300000000000000000000022f",
- "name": "changed-volname"
- }
- ]
- }
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-try:
- from nimbleclient.v1 import client
-except ImportError:
- client = None
-from ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble import __version__ as NIMBLE_ANSIBLE_VERSION
-import ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble as utils
-import re
-
-limit_not_supported = [
- "controllers",
- "disks",
- "shelves",
- "software_versions"
-]
-
-
-def add_to_valid_subset_list(valid_subset_list,
- subset_name,
- subset_options,
- fetch_all=False):
-
- if valid_subset_list is None:
- return []
- valid_subset = {}
- fields = query = limit = None
- detail = True # default
- count = -1
-
- if subset_options is not None:
- if 'fields' in subset_options and subset_options['fields'] is not None:
- temp = ""
- for item in subset_options['fields']:
- temp += item + ','
- fields = temp.strip(',')
- # fields = subset_options['fields'].strip()
- if 'detail' in subset_options and subset_options['detail'] is not None:
- detail = subset_options['detail']
- if 'limit' in subset_options:
- count = limit = subset_options['limit']
- if fetch_all is True:
- # few subset do not support limit option. hence in case of subset 'all' ,set it to none
- if subset_name in limit_not_supported:
- limit = None
-
- if subset_options is not None and 'query' in subset_options:
- query = subset_options['query']
-
- valid_subset['name'] = subset_name.lower()
- valid_subset['fields'] = fields
- valid_subset['query'] = query
- valid_subset['limit'] = limit
- valid_subset['detail'] = detail
- valid_subset['count'] = count
- valid_subset_list.append(dict(valid_subset))
- return valid_subset_list
-
-
-def is_subset_option_valid(subset_options):
- if subset_options is None:
- return (True, "", "")
- if isinstance(subset_options, dict) is False:
- raise Exception("Subset options should be provided as dictionary.")
- for key, value in subset_options.items():
- if key != "fields" and key != "query" and key != "limit" and key != "detail":
- return (False, key, "Valid subset option names are:'fields', 'query', 'limit', and 'detail'")
- if key == 'limit' and type(value) is not int:
- return (False, key, "Subset options 'limit' should be provided as integer.")
- if key == 'detail' and type(value) is not bool:
- return (False, key, "Subset options 'detail' should be provided as bool.")
- if key == 'fields' and type(value) is not list:
- return (False, key, "Subset options 'fields' should be provided as list.")
- if key == 'query' and type(value) is not dict:
- return (False, key, "Subset options 'query' should be provided as dict.")
- return (True, "", "")
-
-
-def is_subset_already_added(key, valid_subset_list):
- if valid_subset_list is None:
- return False
- for item in valid_subset_list:
- if key == item['name']:
- return True
- return False
-
-
-def handle_all_subset(info_subset, valid_subset_list, subset_options):
-
- if valid_subset_list is None or info_subset is None:
- return []
- msg = "Subset options 'fields and query' cannot be used with 'all' subset. Only 'limit and detail' option can be used."
-
- if subset_options is not None:
- if 'fields' in subset_options or 'query' in subset_options:
- raise Exception(msg)
-
- for key, value in info_subset.items():
- if (is_subset_already_added(key, valid_subset_list) is False
- and (key != 'minimum' and key != 'config' and key != 'snapshots')):
- add_to_valid_subset_list(valid_subset_list, key, subset_options, True)
- return valid_subset_list
-
-
-def raise_invalid_subset_ex(key):
- msg = f"Subset name '{key}' is not valid. Please provide a correct subset name."
- raise Exception(msg)
-
-
-def raise_repeat_subset_ex(key):
- msg = f"Subset '{key}' is already provided as input. Please remove one entry."
- raise Exception(msg)
-
-
-def raise_subset_mutually_exclusive_ex():
- msg = "Subset 'all' and 'minimum' are mutually exclusive. Please provide only one of them"
- raise Exception(msg)
-
-
-def parse_subset_list(info_subset, gather_subset):
- valid_subset_list = []
- try:
- if gather_subset is None or isinstance(gather_subset, list) is False:
- add_to_valid_subset_list(valid_subset_list, 'minimum', None)
- return valid_subset_list
- # each entry in gather subset represents a dictonary or list for each object set
- for object_set in gather_subset:
- object_set_type = type(object_set)
-
- if object_set_type is dict:
- for key, subset_options in object_set.items():
- key = key.strip()
- if info_subset.get(key, None) is None:
- raise_invalid_subset_ex(key)
- flag, param_key, err_msg = is_subset_option_valid(subset_options)
-
- if flag is False:
- msg = f"Invalid subset option '{param_key}' provided for subset '{key}'."
- raise Exception(msg + ' ' + err_msg)
- else:
- if key == 'all':
- if is_subset_already_added('minimum', valid_subset_list) is True:
- raise_subset_mutually_exclusive_ex()
- handle_all_subset(info_subset, valid_subset_list, subset_options)
- continue
- if key == 'minimum' or key == 'config':
- if subset_options is not None:
- raise Exception("Subset options cannot be used with 'minimum' and 'config' subset.")
- if key == 'minimum':
- if is_subset_already_added('all', valid_subset_list) is True:
- raise_subset_mutually_exclusive_ex()
- elif is_subset_already_added(key, valid_subset_list) is True:
- raise_repeat_subset_ex(key)
- add_to_valid_subset_list(valid_subset_list, key, subset_options)
- elif object_set_type is str:
- key = object_set.strip()
- if info_subset.get(key, None) is None:
- raise_invalid_subset_ex(key)
-
- if is_subset_already_added(key, valid_subset_list) is True:
- raise_repeat_subset_ex(key)
-
- if key == 'all':
- if is_subset_already_added('minimum', valid_subset_list) is True:
- raise_subset_mutually_exclusive_ex()
- handle_all_subset(info_subset, valid_subset_list, None)
- continue
-
- add_to_valid_subset_list(valid_subset_list, key, None)
- return (valid_subset_list)
- except Exception as ex:
- raise(ex)
-
-
-def generate_dict(name, resp):
- temp_dict = {}
- if utils.is_null_or_empty(resp) or name is None:
- return {}
- for item in resp:
- key = item.attrs.get(name)
- if key in temp_dict:
- # we need to convert the dict into a list of items as we have more than one item for the same key
- temp_list = [temp_dict[key]]
- if isinstance(temp_dict[key], dict) is True:
- temp_dict.pop(key)
- temp_dict.setdefault(key, temp_list).append(item.attrs)
- elif key is None or key == "N/A":
- temp_dict.setdefault(name, []).append(item.attrs)
- else:
- temp_dict[key] = item.attrs
- return temp_dict
-
-
-def fetch_config_subset(info_subset):
- if info_subset is None:
- return ({}, True)
- toreturn = {'config': {}}
- result = {}
- temp_dict = {}
- grp_fields = """
- smtp_server,
- smtp_port,
- smtp_auth_enabled,
- smtp_auth_username,
- autosupport_enabled,
- send_alert_to_support,
- isns_enabled,
- snmp_trap_enabled,
- snmp_trap_host,
- snmp_trap_port,
- snmp_community,
- domain_name,
- dns_servers,
- ntp_server,
- syslogd_enabled,
- syslogd_server,
- vvol_enabled,
- alarms_enabled,
- member_list,
- encryption_config,
- name,
- fc_enabled,
- iscsi_enabled
-
- """
- try:
- for key, cl_obj in info_subset.items():
- if key == 'arrays':
- resp = cl_obj.list(detail=True, fields="extended_model,full_name,all_flash,serial,role")
- elif key == 'groups':
- resp = cl_obj.list(detail=True, fields=re.sub('\\s+', '', grp_fields))
- elif key == 'pools':
- resp = cl_obj.list(detail=True, fields="array_count,dedupe_all_volumes,dedupe_capable,is_default,name,vol_list")
- elif key == 'network_configs':
- resp = cl_obj.list(detail=True)
- else:
- continue
- temp_dict[key] = resp
- # prepare
- result['arrays'] = generate_dict('arrays', temp_dict['arrays'])['arrays']
- result['groups'] = generate_dict('groups', temp_dict['groups'])['groups']
- result['pools'] = generate_dict('pools', temp_dict['pools'])['pools']
- result['network_configs'] = generate_dict('network_configs', temp_dict['network_configs'])['network_configs']
- toreturn['config'] = result
- return (toreturn, True)
- except Exception:
- raise
-
-
-def fetch_minimum_subset(info_subset):
-
- if info_subset is None:
- return ({}, True)
- minimum_subset = [
- "arrays",
- "disks",
- "folders",
- "groups",
- "initiator_groups",
- "performance_policies",
- "pools",
- "protection_schedules",
- "protection_templates",
- "protocol_endpoints",
- "snapshot_collections",
- "software_versions",
- "users",
- "volumes",
- "volume_collections"
- ]
- toreturn = {'default': {}}
- result = {}
- temp_dict = {}
-
- try:
- for key in minimum_subset:
- cl_obj = info_subset[key]
- if key == 'arrays':
- resp = cl_obj.list(detail=True, fields="extended_model,full_name,all_flash")
- elif key == 'groups':
- # certain fields were only added in NimOS 5.1 and above
- if utils.is_array_version_above_or_equal(info_subset['arrays'], "5.1"):
- resp = cl_obj.list(detail=True,
- fields="encryption_config,name,fc_enabled,iscsi_enabled,leader_array_name,default_iscsi_target_scope,num_snaps")
- else:
- resp = cl_obj.list(detail=True, fields="name")
- else:
- resp = cl_obj.list(detail=False)
- temp_dict[key] = resp
- # prepare
- result['volumes'] = len(temp_dict['volumes'])
- result['volume_collections'] = len(temp_dict['volume_collections'])
- result['users'] = len(temp_dict['users'])
- result['software_versions'] = temp_dict['software_versions'][-1].attrs.get('version') # get the latest
- result['snapshot_collections'] = len(temp_dict['snapshot_collections'])
- result['snapshots'] = temp_dict['groups'][-1].attrs.get('num_snaps')
- result['protocol_endpoints'] = len(temp_dict['protocol_endpoints'])
- result['protection_templates'] = len(temp_dict['protection_templates'])
- result['protection_schedules'] = len(temp_dict['protection_schedules'])
- result['initiator_groups'] = len(temp_dict['initiator_groups'])
- result['folders'] = len(temp_dict['folders'])
- result['disks'] = len(temp_dict['disks'])
- result['folders'] = len(temp_dict['folders'])
- result['arrays'] = generate_dict('arrays', temp_dict['arrays'])['arrays']
- result['groups'] = generate_dict('groups', temp_dict['groups'])['groups']
- toreturn['default'] = result
- return (toreturn, True)
- except Exception as ex:
- result['failed'] = str(ex)
- toreturn['default'] = result
- return (toreturn, False)
-
-# snapshots actually needs a vol_name/vol_id as mandatory params. Hence ,in case of 'all' subset
-# where user cannot provide a query option. we need to fetch the snapshots by iterating
-# over the list of volumes and see if those volumes have snapshots.
-
-
-def fetch_snapshots_for_all_subset(subset, client_obj):
- if subset is None or client_obj is None:
- return {}
- result = {}
- total_snap = []
- # get the volume list
- vol_list_resp = client_obj.volumes.list(detail=False)
- if vol_list_resp is not None and vol_list_resp.__len__() > 0:
- for vol_item in vol_list_resp:
- vol_name = vol_item.attrs.get('name')
- snap_list = client_obj.snapshots.list(detail=subset['detail'], vol_name=vol_name, limit=subset['limit'])
- if snap_list is not None and snap_list.__len__() > 0:
- total_snap.extend(snap_list)
- if subset['limit'] is not None and total_snap.__len__() >= subset['limit']:
- total_snap = total_snap[0:subset['limit']]
- break
- if total_snap.__len__() > 0:
- result['snapshots'] = generate_dict('snapshots', total_snap)['snapshots']
- return result
-
-
-def fetch_subset(valid_subset_list, info_subset):
- if valid_subset_list is None or isinstance(valid_subset_list, list) is False:
- return {}
- try:
- result_dict = {}
- resp = None
- for subset in valid_subset_list:
- result = {}
- try:
- if subset['name'] == "minimum":
- result, flag = fetch_minimum_subset(info_subset)
- if flag is False:
- raise Exception(result)
- elif subset['name'] == "config":
- result, flag = fetch_config_subset(info_subset)
- if flag is False:
- raise Exception(result)
- elif subset['name'] == "all":
- result = fetch_snapshots_for_all_subset(subset, info_subset['all'])
- for key, value in result.items():
- result_dict[key] = value
- continue
- else:
- # if subset is user_policies then make sure nimos aversion is fiji and above
- if subset['name'] == 'user_policies' and utils.is_array_version_above_or_equal(info_subset['arrays'], "5.1.0") is False:
- continue
- cl_obj_set = info_subset[subset['name']]
- query = subset['query']
- if query is not None:
- resp = cl_obj_set.list(detail=subset['detail'], **query, fields=subset['fields'], limit=subset['limit'])
- else:
- resp = cl_obj_set.list(detail=subset['detail'], fields=subset['fields'], limit=subset['limit'])
- if resp is not None and resp.__len__() != 0:
- # limit is not supported for few subset, hence for those slice the result and keep the number as asked by user.
- if subset['count'] != -1 and resp.__len__() > subset['count']:
- resp = resp[: subset['count']]
-
- result[subset['name']] = generate_dict('data', resp)['data']
- else:
- result[subset['name']] = resp
- for key, value in result.items():
- result_dict[key] = value
- except Exception as ex:
- msg = f"Failed to fetch {subset['name']} details. Error:'{str(ex)}'"
- raise Exception(msg) from ex
- return result_dict
- except Exception:
- raise
-
-
-def intialize_info_subset(client_obj):
-
- info_subset = {
- "all": client_obj,
- "minimum": client_obj,
- "config": client_obj,
- "access_control_records": client_obj.access_control_records,
- "alarms": client_obj.alarms,
- "application_servers": client_obj.application_servers,
- "application_categories": client_obj.application_categories,
- "arrays": client_obj.arrays,
- "chap_users": client_obj.chap_users,
- "controllers": client_obj.controllers,
- "disks": client_obj.disks,
- "fibre_channel_interfaces": client_obj.fibre_channel_interfaces,
- "fibre_channel_configs": client_obj.fibre_channel_configs,
- "fibre_channel_initiator_aliases": client_obj.fibre_channel_initiator_aliases,
- "fibre_channel_ports": client_obj.fibre_channel_ports,
- "folders": client_obj.folders,
- "groups": client_obj.groups,
- "initiator_groups": client_obj.initiator_groups,
- "initiators": client_obj.initiators,
- "master_key": client_obj.master_key,
- "network_configs": client_obj.network_configs,
- "network_interfaces": client_obj.network_interfaces,
- "performance_policies": client_obj.performance_policies,
- "pools": client_obj.pools,
- "protection_schedules": client_obj.protection_schedules,
- "protection_templates": client_obj.protection_templates,
- "protocol_endpoints": client_obj.protocol_endpoints,
- "replication_partners": client_obj.replication_partners,
- "shelves": client_obj.shelves,
- "snapshots": client_obj.snapshots,
- "snapshot_collections": client_obj.snapshot_collections,
- "software_versions": client_obj.software_versions,
- "user_groups": client_obj.user_groups,
- "user_policies": client_obj.user_policies,
- "users": client_obj.users,
- "volumes": client_obj.volumes,
- "volume_collections": client_obj.volume_collections
- }
- return info_subset
-
-
-def get_subset_info(
- client_obj,
- gather_subset):
-
- if utils.is_null_or_empty(gather_subset):
- return (False, False, "Please provide atleast one subset.", {})
- result_dict = []
- try:
- info_subset = intialize_info_subset(client_obj)
- valid_subset_list = parse_subset_list(info_subset, gather_subset)
- if valid_subset_list is not None and valid_subset_list.__len__() > 0:
- # we got subset list to work on. get the details of these subset
- result_dict = fetch_subset(valid_subset_list, info_subset)
- return (True, False, "Fetched the subset details.", result_dict)
- else:
- return (True, False, "No vaild subset provided.", result_dict)
- except Exception as ex:
- return (False, False, f"{ex}", {})
-
-
-def main():
-
- fields = {
- "gather_subset": {
- "required": False,
- "type": "list",
- "elements": 'raw',
- 'default': "minimum"
- }
- }
- default_fields = utils.basic_auth_arg_fields()
- fields.update(default_fields)
- module = AnsibleModule(argument_spec=fields, supports_check_mode=True)
- if client is None:
- module.fail_json(msg='Python nimble-sdk could not be found.')
-
- hostname = module.params["host"]
- username = module.params["username"]
- password = module.params["password"]
- gather_subset = module.params["gather_subset"]
-
- if (username is None or password is None or hostname is None):
- module.fail_json(
- msg="Missing variables: hostname, username and password is mandatory.")
- # defaults
- return_status = changed = False
- msg = "No task to run."
- try:
- client_obj = client.NimOSClient(
- hostname,
- username,
- password,
- f"HPE Nimble Ansible Modules v{NIMBLE_ANSIBLE_VERSION}"
- )
-
- return_status, changed, msg, result_dict = get_subset_info(client_obj, gather_subset)
- except Exception as ex:
- # failed for some reason.
- msg = str(ex)
-
- if return_status:
- if utils.is_null_or_empty(result_dict) is False and result_dict.__len__() > 0:
- module.exit_json(return_status=return_status,
- changed=changed,
- message=msg,
- nimble_info=result_dict)
- else:
- module.exit_json(return_status=return_status, changed=changed, msg=msg)
- else:
- module.fail_json(return_status=return_status, changed=changed, msg=msg)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_initiator_group.py b/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_initiator_group.py
deleted file mode 100644
index 1a2c9c58c..000000000
--- a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_initiator_group.py
+++ /dev/null
@@ -1,357 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# Copyright 2020 Hewlett Packard Enterprise Development LP
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
-# file except in compliance with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software distributed
-# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-# OF ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
-
-# author Alok Ranjan (alok.ranjan2@hpe.com)
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-DOCUMENTATION = r'''
----
-author:
- - HPE Nimble Storage Ansible Team (@ar-india) <nimble-dcs-storage-automation-eng@hpe.com>
-description: Manage the HPE Nimble Storage initiator groups.
-module: hpe_nimble_initiator_group
-options:
- access_protocol:
- choices:
- - iscsi
- - fc
- required: False
- type: str
- description:
- - Initiator group access protocol.
- app_uuid:
- required: False
- type: str
- description:
- - Application identifier of initiator group. String of up to 255 alphanumeric characters, hyphen, colon, dot and underscore are allowed.
- change_name:
- required: False
- type: str
- description:
- - Change name of the existing initiator group.
- description:
- required: False
- type: str
- description:
- - Text description of initiator group.
- fc_initiators:
- required: False
- type: list
- elements: dict
- description:
- - List of FC initiators. When create/update fc_initiators, WWPN is required.
- fc_tdz_ports:
- required: False
- type: list
- elements: int
- description:
- - List of target fibre channel ports with target driven zoning configured on this initiator group.
- host_type:
- required: False
- type: str
- description:
- - Initiator group host type. Available options are auto and hpux. The default option is auto. This attribute will be
- applied to all the initiators in the initiator group. Initiators with different host OSes should not be kept in the
- same initiator group having a non-default host type attribute.
- iscsi_initiators:
- required: False
- type: list
- elements: dict
- description:
- - List of iSCSI initiators. When create/update iscsi_initiators, either iqn or ip_address is always required with label.
- metadata:
- required: False
- type: dict
- description:
- - Key-value pairs that augment an initiator group's attributes. List of key-value pairs. Keys must be unique and non-empty.
- name:
- required: True
- type: str
- description:
- - Name of the initiator group.
- state:
- required: True
- choices:
- - present
- - absent
- - create
- type: str
- description:
- - The initiator group operation.
- target_subnets:
- required: False
- type: list
- elements: dict
- description:
- - List of target subnet labels. If specified, discovery and access to volumes will be restricted to the specified subnets.
-extends_documentation_fragment: hpe.nimble.hpe_nimble
-short_description: Manage the HPE Nimble Storage initiator groups
-version_added: "1.0.0"
-notes:
- - This module does not support C(check_mode).
-'''
-
-EXAMPLES = r'''
-
-# if state is create, then create ig. Fails if already present.
-# if state is present, then create ig if not present. Succeeds if it already exists.
-- name: Create an igroup
- hpe.nimble.hpe_nimble_initiator_group:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- access_protocol: "{{ access_protocol | default('iscsi')}}"
- name: "{{ name }}"
- iscsi_initiators: "{{ iscsi_initiators | default([])}}" # list of dictionaries. Each entry in the dictionary has one initiator details.
- description: "{{ description | default(None) }}"
- state: "{{ state | default('present') }}"
-
-- name: Delete igroup
- hpe.nimble.hpe_nimble_initiator_group:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- access_protocol: "{{ access_protocol | default('iscsi')}}"
- name: "{{ name }}"
- state: absent
-
-'''
-RETURN = r'''
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-try:
- from nimbleclient.v1 import client
-except ImportError:
- client = None
-from ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble import __version__ as NIMBLE_ANSIBLE_VERSION
-import ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble as utils
-
-
-def create_igroup(
- client_obj,
- initiator_group_name,
- **kwargs):
-
- if utils.is_null_or_empty(initiator_group_name):
- return (False, False, "Initiator group creation failed. Initiator group name is null.", {}, {})
-
- try:
- ig_resp = client_obj.initiator_groups.get(id=None, name=initiator_group_name)
- if utils.is_null_or_empty(ig_resp):
- # remove unchanged and null arguments from kwargs
- params = utils.remove_null_args(**kwargs)
- ig_resp = client_obj.initiator_groups.create(name=initiator_group_name, **params)
- return (True, True, f"Created initiator Group '{initiator_group_name}' successfully.", {}, ig_resp.attrs)
- else:
- return (False, False, f"Cannot create initiator Group '{initiator_group_name}' as it is already present in given state.", {}, {})
-
- except Exception as ex:
- return (False, False, f"Initiator group creation failed | {ex}", {}, {})
-
-
-def update_igroup(
- client_obj,
- ig_resp,
- **kwargs):
-
- if utils.is_null_or_empty(ig_resp):
- return (False, False, "Update initiator group failed as it is not present.", {}, {})
- try:
- ig_name = ig_resp.attrs.get("name")
- changed_attrs_dict, params = utils.remove_unchanged_or_null_args(ig_resp, **kwargs)
- if changed_attrs_dict.__len__() > 0:
- ig_resp = client_obj.initiator_groups.update(id=ig_resp.attrs.get("id"), **params)
- return (True, True, f"Initiator group '{ig_name}' already present. Modified the following attributes '{changed_attrs_dict}'",
- changed_attrs_dict, ig_resp.attrs)
- else:
- return (True, False, f"Initiator group '{ig_name}' already present in given state.", {}, ig_resp.attrs)
- except Exception as ex:
- return (False, False, f"Initiator group update failed | {ex}", {}, {})
-
-
-def delete_igroup(
- client_obj,
- initiator_group_name):
-
- if utils.is_null_or_empty(initiator_group_name):
- return (False, False, "Initiator group deletion failed as it is not present.", {})
-
- try:
- # see if the igroup is already present
- ig_resp = client_obj.initiator_groups.get(id=None, name=initiator_group_name)
- if ig_resp is not None:
- client_obj.initiator_groups.delete(ig_resp.attrs.get("id"))
- return (True, True, f"Successfully deleted initiator group '{initiator_group_name}'.", {})
- elif ig_resp is None:
- return (False, False, f"Initiator group '{initiator_group_name}' is not present on array.", {})
- else:
- return (False, False, f"Failed to delete initiator group '{initiator_group_name}'.", {})
- except Exception as ex:
- return (False, False, f"Initiator group deletion failed | {ex}", {})
-
-
-def main():
-
- fields = {
- "state": {
- "required": True,
- "choices": ['present',
- 'absent',
- 'create'
- ],
- "type": "str"
- },
- "change_name": {
- "required": False,
- "type": "str"
- },
- "name": {
- "required": True,
- "type": "str"
- },
- "description": {
- "required": False,
- "type": "str"
- },
- "access_protocol": {
- "choices": ['iscsi',
- 'fc'
- ],
- "required": False,
- "type": "str"
- },
- "host_type": {
- "required": False,
- "type": "str"
- },
- "fc_tdz_ports": {
- "required": False,
- "type": "list",
- "elements": 'int'
- },
- "target_subnets": {
- "required": False,
- "type": "list",
- "elements": 'dict'
- },
- "iscsi_initiators": {
- "required": False,
- "type": "list",
- "elements": 'dict'
- },
- "fc_initiators": {
- "required": False,
- "type": "list",
- "elements": 'dict'
- },
- "app_uuid": {
- "required": False,
- "type": "str"
- },
- "metadata": {
- "required": False,
- "type": "dict"
- }
- }
-
- default_fields = utils.basic_auth_arg_fields()
- fields.update(default_fields)
- required_if = [('state', 'create', ['access_protocol'])]
- module = AnsibleModule(argument_spec=fields, required_if=required_if)
- if client is None:
- module.fail_json(msg='Python nimble-sdk could not be found.')
-
- hostname = module.params["host"]
- username = module.params["username"]
- password = module.params["password"]
- state = module.params["state"]
- initiator_group_name = module.params["name"]
- change_name = module.params["change_name"]
- description = module.params["description"]
- access_protocol = module.params["access_protocol"]
- host_type = module.params["host_type"]
- fc_tdz_ports = module.params["fc_tdz_ports"]
- target_subnets = module.params["target_subnets"]
- iscsi_initiators = module.params["iscsi_initiators"]
- fc_initiators = module.params["fc_initiators"]
- app_uuid = module.params["app_uuid"]
- metadata = module.params["metadata"]
-
- if (username is None or password is None or hostname is None):
- module.fail_json(
- msg="Missing variables: hostname, username and password is mandatory.")
-
- # defaults
- return_status = changed = False
- msg = "No task to run."
- resp = None
- try:
- client_obj = client.NimOSClient(
- hostname,
- username,
- password,
- f"HPE Nimble Ansible Modules v{NIMBLE_ANSIBLE_VERSION}"
- )
-
- # States
- if state == "create" or state == "present":
- ig_resp = client_obj.initiator_groups.get(id=None, name=initiator_group_name)
- if utils.is_null_or_empty(ig_resp) or state == "create":
-
- return_status, changed, msg, changed_attrs_dict, resp = create_igroup(
- client_obj,
- initiator_group_name,
- description=description,
- access_protocol=access_protocol,
- host_type=host_type,
- fc_tdz_ports=fc_tdz_ports,
- target_subnets=target_subnets,
- iscsi_initiators=iscsi_initiators,
- fc_initiators=fc_initiators,
- app_uuid=app_uuid,
- metadata=metadata)
- else:
- return_status, changed, msg, changed_attrs_dict, resp = update_igroup(
- client_obj,
- ig_resp,
- name=change_name,
- description=description,
- host_type=host_type,
- fc_tdz_ports=fc_tdz_ports,
- target_subnets=target_subnets,
- iscsi_initiators=iscsi_initiators,
- fc_initiators=fc_initiators,
- metadata=metadata)
-
- elif state == "absent":
- return_status, changed, msg, changed_attrs_dict = delete_igroup(client_obj, initiator_group_name)
- except Exception as ex:
- # failed for some reason.
- msg = str(ex)
-
- if return_status:
- if utils.is_null_or_empty(resp):
- module.exit_json(return_status=return_status, changed=changed, msg=msg)
- else:
- module.exit_json(return_status=return_status, changed=changed, msg=msg, attrs=resp)
- else:
- module.fail_json(return_status=return_status, changed=changed, msg=msg)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_network.py b/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_network.py
deleted file mode 100644
index 93c8d3e99..000000000
--- a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_network.py
+++ /dev/null
@@ -1,427 +0,0 @@
-#!/usr/bin/python
-
-# # Copyright 2020 Hewlett Packard Enterprise Development LP
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
-# file except in compliance with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software distributed
-# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-# OF ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
-
-# author Alok Ranjan (alok.ranjan2@hpe.com)
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-DOCUMENTATION = r'''
----
-author:
- - HPE Nimble Storage Ansible Team (@ar-india) <nimble-dcs-storage-automation-eng@hpe.com>
-description: Manage the storage network configuration on the HPE Nimble Storage group.
-module: hpe_nimble_network
-options:
- activate:
- required: False
- type: bool
- description:
- - Activate a network configuration.
- array:
- required: False
- type: list
- elements: dict
- description:
- - List of array network configs.
- change_name:
- required: False
- type: str
- description:
- - Change name of the existing network config.
- iscsi_automatic_connection_method:
- required: False
- type: bool
- description:
- - Whether automatic connection method is enabled. Enabling this means means redirecting connections from the specified iSCSI
- discovery IP address to the best data IP address based on connection counts.
- iscsi_connection_rebalancing:
- required: False
- type: bool
- description:
- - Whether rebalancing is enabled. Enabling this means rebalancing iSCSI connections by periodically breaking existing
- connections that are out-of-balance, allowing the host to reconnect to a more appropriate data IP address.
- ignore_validation_mask:
- required: False
- type: int
- description:
- - Indicates whether to ignore the validation.
- mgmt_ip:
- required: False
- type: str
- description:
- - Management IP address for the Group. Four numbers in the range (0,255) separated by periods.
- name:
- required: True
- type: str
- choices:
- - active
- - backup
- - draft
- description:
- - Name of the network configuration. Use the name 'draft' when creating a draft configuration.
- secondary_mgmt_ip:
- required: False
- type: str
- description:
- - Secondary management IP address for the Group. Four numbers in the range [0,255] separated by periods.
- subnet:
- required: False
- type: list
- elements: dict
- description:
- - List of subnet configs.
- route:
- required: False
- type: list
- elements: dict
- description:
- - List of static routes.
- state:
- required: True
- choices:
- - create
- - present
- - absent
- type: str
- description:
- - The network config operation.
- validate:
- required: False
- type: bool
- description:
- - Validate a network configuration.
-extends_documentation_fragment: hpe.nimble.hpe_nimble
-short_description: Manage the HPE Nimble Storage network configuration
-version_added: "1.0.0"
-notes:
- - This module does not support C(check_mode).
-'''
-
-EXAMPLES = r'''
-
-# if state is create, then create network config, fails if it exist or cannot create
-# if state is present, then create network config if not present ,else success
-- name: Create network config
- hpe.nimble.hpe_nimble_network:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- route: "{{ route }}"
- subnet: "{{ subnet }}"
- array: "{{ array }}"
- iscsi_automatic_connection_method: true
- iscsi_connection_rebalancing: False
- mgmt_ip: "{{ mgmt_ip }}"
- state: "{{ state | default('present') }}"
-
-- name: Delete network config
- hpe.nimble.hpe_nimble_network:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- state: "absent"
-
-- name: Validate network config
- hpe.nimble.hpe_nimble_network:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- state: "present"
- ignore_validation_mask: 1
- validate: true
-
-- name: Activate Network config
- hpe.nimble.hpe_nimble_network:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- state: "present"
- ignore_validation_mask: 1
- activate: true
-
-'''
-RETURN = r'''
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-try:
- from nimbleclient.v1 import client
-except ImportError:
- client = None
-from ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble import __version__ as NIMBLE_ANSIBLE_VERSION
-import ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble as utils
-
-
-def create_update_network_config(
- client_obj,
- name,
- state,
- iscsi_automatic_connection_method,
- iscsi_connection_rebalancing,
- mgmt_ip,
- change_name,
- **kwargs):
-
- if utils.is_null_or_empty(name):
- return (False, False, "Create network config failed as name is not present.", {}, {})
-
- try:
- network_resp = client_obj.network_configs.get(id=None, name=name)
- if utils.is_null_or_empty(network_resp):
- params = utils.remove_null_args(**kwargs)
- network_resp = client_obj.network_configs.create(name=name,
- iscsi_automatic_connection_method=iscsi_automatic_connection_method,
- iscsi_connection_rebalancing=iscsi_connection_rebalancing,
- mgmt_ip=mgmt_ip,
- **params)
- return (True, True, f"Network config '{name}' created successfully.", {}, network_resp.attrs)
- else:
- if state == "create":
- return (False, False, f"Network config '{name}' cannot be created as it is already present in given state.", {}, network_resp.attrs)
-
- # update case
- kwargs['name'] = change_name
- changed_attrs_dict, params = utils.remove_unchanged_or_null_args(network_resp, **kwargs)
- # even though some of the attributes have not changed but it still has to be passed in case of update.
- params = utils.remove_null_args(**kwargs)
- if changed_attrs_dict.__len__() > 0:
- network_resp = client_obj.network_configs.update(id=network_resp.attrs.get("id"),
- name=name,
- iscsi_automatic_connection_method=iscsi_automatic_connection_method,
- iscsi_connection_rebalancing=iscsi_connection_rebalancing,
- mgmt_ip=mgmt_ip,
- **params)
- return (True, True, f"Network config '{name}' already present. Modified the following attributes '{changed_attrs_dict}'",
- changed_attrs_dict, network_resp.attrs)
- else:
- return (True, False, f"Network config '{network_resp.attrs.get('name')}' already present in given state.", {}, network_resp.attrs)
- except Exception as ex:
- return (False, False, f"Network config creation failed |'{ex}'", {}, {})
-
-
-def delete_network_config(
- client_obj,
- name):
-
- if utils.is_null_or_empty(name):
- return (False, False, "Delete network config failed as name is not present.", {})
-
- try:
- network_resp = client_obj.network_configs.get(id=None, name=name)
- if utils.is_null_or_empty(network_resp):
- return (False, False, f"Network config '{name}' cannot be deleted as it is not present.", {})
-
- client_obj.network_configs.delete(id=network_resp.attrs.get("id"))
- return (True, True, f"Deleted network config '{name}' successfully.", {})
- except Exception as ex:
- return (False, False, f"Delete network config failed |'{ex}'", {})
-
-
-def validate_network_config(
- client_obj,
- name,
- ignore_validation_mask):
-
- if utils.is_null_or_empty(name):
- return (False, False, "Validate network config failed as name is not present.", {})
-
- try:
- network_resp = client_obj.network_configs.get(id=None, name=name)
- if utils.is_null_or_empty(network_resp):
- return (False, False, f"Network config '{name}' cannot be validated as it is not present.", {})
-
- client_obj.network_configs.validate_netconfig(
- id=network_resp.attrs.get("id"),
- ignore_validation_mask=ignore_validation_mask)
-
- return (True, False, f"Validated network config '{name}' successfully.", {})
- except Exception as ex:
- return (False, False, f"Validate Network config failed |'{ex}'", {})
-
-
-def activate_network_config(
- client_obj,
- name,
- ignore_validation_mask):
-
- if utils.is_null_or_empty(name):
- return (False, False, "Activate network config failed as name is not present.", {})
-
- try:
- network_resp = client_obj.network_configs.get(id=None, name=name)
- if utils.is_null_or_empty(network_resp):
- return (False, False, f"Network config '{name}' cannot be activated as it is not present.", {})
-
- client_obj.network_configs.activate_netconfig(id=network_resp.attrs.get("id"),
- ignore_validation_mask=ignore_validation_mask)
-
- return (True, True, f"Activated network config '{name}' successfully.", {})
- except Exception as ex:
- return (False, False, f"Activate Network config failed |'{ex}'", {})
-
-
-def main():
-
- fields = {
- "activate": {
- "required": False,
- "type": "bool"
- },
- "array": {
- "required": False,
- "type": "list",
- "elements": 'dict'
- },
- "change_name": {
- "required": False,
- "type": "str"
- },
- "iscsi_automatic_connection_method": {
- "required": False,
- "type": "bool"
- },
- "iscsi_connection_rebalancing": {
- "required": False,
- "type": "bool"
- },
- "ignore_validation_mask": {
- "required": False,
- "type": "int"
- },
- "mgmt_ip": {
- "required": False,
- "type": "str"
- },
- "name": {
- "required": True,
- "choices": ['active',
- 'backup',
- 'draft'
- ],
- "type": "str"
- },
- "secondary_mgmt_ip": {
- "required": False,
- "type": "str"
- },
- "subnet": {
- "required": False,
- "type": "list",
- "elements": 'dict'
- },
- "route": {
- "required": False,
- "type": "list",
- "elements": 'dict'
- },
- "state": {
- "required": True,
- "choices": ['create',
- 'present',
- 'absent'
- ],
- "type": "str"
- },
- "validate": {
- "required": False,
- "type": "bool"
- }
- }
- default_fields = utils.basic_auth_arg_fields()
- fields.update(default_fields)
- required_if = [('state', 'create', ['array', 'iscsi_automatic_connection_method', 'iscsi_connection_rebalancing', 'mgmt_ip', 'subnet', 'route'])]
- module = AnsibleModule(argument_spec=fields, required_if=required_if)
- if client is None:
- module.fail_json(msg='Python nimble-sdk could not be found.')
-
- hostname = module.params["host"]
- username = module.params["username"]
- password = module.params["password"]
- activate = module.params["activate"]
- array = module.params["array"]
- iscsi_automatic_connection_method = module.params["iscsi_automatic_connection_method"]
- iscsi_connection_rebalancing = module.params["iscsi_connection_rebalancing"]
- ignore_validation_mask = module.params["ignore_validation_mask"]
- mgmt_ip = module.params["mgmt_ip"]
- name = module.params["name"]
- change_name = module.params["change_name"]
- secondary_mgmt_ip = module.params["secondary_mgmt_ip"]
- subnet = module.params["subnet"]
- route = module.params["route"]
- state = module.params["state"]
- validate = module.params["validate"]
-
- if (username is None or password is None or hostname is None):
- module.fail_json(
- msg="Missing variables: hostname, username and password is mandatory.")
-
- # defaults
- return_status = changed = False
- msg = "No task to run."
- resp = None
- try:
- client_obj = client.NimOSClient(
- hostname,
- username,
- password,
- f"HPE Nimble Ansible Modules v{NIMBLE_ANSIBLE_VERSION}"
- )
-
- # States
- if ((validate is None or validate is False)
- and (activate is None or activate is False)
- and (state == "create" or state == "present")):
- # if not client_obj.network_configs.get(id=None, name=name) or state == "create":
- return_status, changed, msg, changed_attrs_dict, resp = create_update_network_config(
- client_obj,
- name,
- state,
- iscsi_automatic_connection_method,
- iscsi_connection_rebalancing,
- mgmt_ip,
- change_name,
- array_list=array,
- ignore_validation_mask=ignore_validation_mask,
- secondary_mgmt_ip=secondary_mgmt_ip,
- subnet_list=subnet,
- route_list=route)
-
- elif state == "absent":
- return_status, changed, msg, changed_attrs_dict = delete_network_config(client_obj, name)
-
- elif state == "present" and validate is True:
- return_status, changed, msg, changed_attrs_dict = validate_network_config(client_obj, name, ignore_validation_mask)
-
- elif state == "present" and activate is True:
- return_status, changed, msg, changed_attrs_dict = activate_network_config(client_obj, name, ignore_validation_mask)
- except Exception as ex:
- # failed for some reason.
- msg = str(ex)
-
- if return_status:
- if utils.is_null_or_empty(resp):
- module.exit_json(return_status=return_status, changed=changed, msg=msg)
- else:
- module.exit_json(return_status=return_status, changed=changed, msg=msg, attrs=resp)
- else:
- module.fail_json(return_status=return_status, changed=changed, msg=msg)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_partner.py b/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_partner.py
deleted file mode 100644
index 6266f473f..000000000
--- a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_partner.py
+++ /dev/null
@@ -1,511 +0,0 @@
-#!/usr/bin/python
-
-# # Copyright 2020 Hewlett Packard Enterprise Development LP
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
-# file except in compliance with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software distributed
-# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-# OF ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
-
-# author Alok Ranjan (alok.ranjan2@hpe.com)
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-DOCUMENTATION = r'''
----
-author:
- - HPE Nimble Storage Ansible Team (@ar-india) <nimble-dcs-storage-automation-eng@hpe.com>
-description: Manage the replication partner on an HPE Nimble Storage group.
-module: hpe_nimble_partner
-options:
- control_port:
- required: False
- type: int
- description:
- - Port number of partner control interface. Value -1 for an invalid port or a positive integer value up to 65535 representing the TCP/IP port.
- data_port:
- required: False
- type: int
- description:
- - Port number of partner data interface. Value -1 for an invalid port or a positive integer value up to 65535 representing the TCP/IP port.
- description:
- required: False
- type: str
- description:
- - Description of replication partner.
- downstream_hostname:
- required: True
- type: str
- description:
- - IP address or hostname of partner interface. This must be the partner's Group Management IP address.
- String of up to 64 alphanumeric characters, - and . and ':' are allowed after first character.
- folder:
- required: False
- type: str
- description:
- - The Folder ID within the pool where volumes replicated from this partner will be created. This is not supported for pool partners.
- match_folder:
- required: False
- type: bool
- description:
- - Indicates whether to match the upstream volume's folder on the downstream.
- name:
- required: False
- type: str
- description:
- - Name of replication partner. String of up to 64 alphanumeric characters, - and . and ':' are allowed after first character.
- pause:
- required: False
- type: bool
- description:
- - Pause replication for the specified partner.
- pool:
- required: False
- type: str
- description:
- - The pool name where volumes replicated from this partner will be created. Replica volumes created as clones ignore
- this parameter and are always created in the same pool as their parent volume.
- repl_data_hostname:
- required: False
- type: str
- description:
- - IP address or hostname of partner data interface. String of up to 64 alphanumeric characters, - and . and ':' are allowed after first character.
- resume:
- required: False
- type: bool
- description:
- - Resume replication for the specified partner.
- secret:
- required: False
- type: str
- description:
- - Replication partner shared secret, used for mutual authentication of the partners.
- state:
- required: True
- choices:
- - create
- - present
- - absent
- type: str
- description:
- - The replication partner operation.
- subnet_label:
- required: False
- type: str
- description:
- - Indicates whether to match the upstream volume's folder on the downstream.
- subnet_type:
- required: False
- choices:
- - invalid
- - unconfigured
- - unconfigured
- - mgmt
- - data
- - mgmt_data
- type: str
- description:
- - Type of the subnet used to replicate to this partner.
- test:
- required: False
- type: bool
- description:
- - Test connectivity to the specified partner.
- throttles:
- required: False
- type: list
- elements: dict
- description:
- - Throttles used while replicating from/to this partner. All the throttles for the partner.
-extends_documentation_fragment: hpe.nimble.hpe_nimble
-short_description: Manage the HPE Nimble Storage Replication Partner
-version_added: "1.0.0"
-notes:
- - This module does not support C(check_mode).
-'''
-
-EXAMPLES = r'''
-
-# if state is create, then create partner, fails if it exist or cannot create
-# if state is present, then create partner if not present ,else success
-- name: Create Partner
- hpe.nimble.hpe_nimble_partner:
- host: "{{ host }}" # upstream host
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name | mandatory }}"
- description: "{{ description }}"
- downstream_hostname: "{{ downstream_hostname | mandatory }}"
- secret: "{{ secret | mandatory }}"
- subnet_label: "{{ subnet_label | mandatory }}"
- state: "{{ state | default('present') }}"
-
-- name: Delete Partner
- hpe.nimble.hpe_nimble_partner:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- downstream_hostname: "{{ downstream_hostname | mandatory }}"
- state: "absent"
-
-- name: Test Partner
- hpe.nimble.hpe_nimble_partner:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- downstream_hostname: "{{ downstream_hostname | mandatory }}"
- state: "present"
- test: true
-
-- name: Pause Partner
- hpe.nimble.hpe_nimble_partner:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- downstream_hostname: "{{ downstream_hostname | mandatory }}"
- state: "present"
- pause: true
-
-- name: Resume Partner
- hpe.nimble.hpe_nimble_partner:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- downstream_hostname: "{{ downstream_hostname | mandatory }}"
- state: "present"
- resume: true
-
-'''
-RETURN = r'''
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-try:
- from nimbleclient.v1 import client
-except ImportError:
- client = None
-from ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble import __version__ as NIMBLE_ANSIBLE_VERSION
-import ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble as utils
-
-
-def create_partner(
- client_obj,
- downstream_hostname, # downstream
- **kwargs):
-
- if utils.is_null_or_empty(downstream_hostname):
- return (False, False, "Create replication partner failed as name is not present.", {})
-
- try:
- upstream_repl_resp = client_obj.replication_partners.get(id=None, hostname=downstream_hostname)
- if utils.is_null_or_empty(upstream_repl_resp):
- params = utils.remove_null_args(**kwargs)
- upstream_repl_resp = client_obj.replication_partners.create(hostname=downstream_hostname, **params)
- return (True, True, f"Replication partner '{downstream_hostname}' created successfully.", {}, upstream_repl_resp.attrs)
- else:
- return (False, False, f"Replication partner '{downstream_hostname}' cannot be created as it is already present in given state.",
- {}, upstream_repl_resp.attrs)
- except Exception as ex:
- return (False, False, f"Replication partner creation failed |{ex}", {}, {})
-
-
-def update_partner(
- client_obj,
- downstream_hostname, # downstream
- secret,
- **kwargs):
-
- if utils.is_null_or_empty(downstream_hostname):
- return (False, False, "Update replication partner failed as no downstream partner is provided.", {}, {})
-
- try:
- upstream_repl_resp = client_obj.replication_partners.get(id=None, hostname=downstream_hostname)
- if utils.is_null_or_empty(upstream_repl_resp):
- return (False, False, f"Replication partner '{downstream_hostname}' cannot be updated as it is not present.", {}, {})
-
- changed_attrs_dict, params = utils.remove_unchanged_or_null_args(upstream_repl_resp, **kwargs)
- if changed_attrs_dict.__len__() > 0:
- upstream_repl_resp = client_obj.replication_partners.update(id=upstream_repl_resp.attrs.get("id"), secret=secret, **params)
- return (True, True, f"Replication partner '{downstream_hostname}' already present. Modified the following attributes '{changed_attrs_dict}'",
- changed_attrs_dict, upstream_repl_resp.attrs)
- else:
- return (True, False, f"Replication partner '{upstream_repl_resp.attrs.get('name')}' already present in given state.", {}, upstream_repl_resp.attrs)
- except Exception as ex:
- return (False, False, f"Replication partner update failed |{ex}", {}, {})
-
-
-def delete_partner(
- client_obj,
- downstream_hostname):
-
- if utils.is_null_or_empty(downstream_hostname):
- return (False, False, "Delete replication partner failed as no downstream partner is provided.", {})
-
- try:
- upstream_repl_resp = client_obj.replication_partners.get(id=None, hostname=downstream_hostname)
- if utils.is_null_or_empty(upstream_repl_resp):
- return (False, False, f"Replication partner '{downstream_hostname}' cannot be deleted as it is not present.", {})
- client_obj.replication_partners.delete(id=upstream_repl_resp.attrs.get("id"))
-
- return (True, True, f"Deleted replication partner '{downstream_hostname}' successfully.", {})
- except Exception as ex:
- return (False, False, f"Delete replication partner failed |{ex}", {})
-
-
-def test_partner(
- client_obj,
- downstream_hostname):
-
- if utils.is_null_or_empty(downstream_hostname):
- return (False, False, "Test replication partner failed as no downstream partner is provided.", {})
-
- try:
- upstream_repl_resp = client_obj.replication_partners.get(id=None, hostname=downstream_hostname)
- if utils.is_null_or_empty(upstream_repl_resp):
- return (False, False, f"Replication partner '{downstream_hostname}' cannot be tested as it is not present.", {})
-
- client_obj.replication_partners.test(id=upstream_repl_resp.attrs.get("id"))
- return (True, False, f"Tested replication partner '{downstream_hostname}' successfully.", {})
- except Exception as ex:
- return (False, False, f"Test replication partner failed |{ex}", {})
-
-
-def pause_partner(
- client_obj,
- downstream_hostname):
-
- if utils.is_null_or_empty(downstream_hostname):
- return (False, False, "Pause replication partner failed as no downstream partner is provided.", {})
-
- try:
- upstream_repl_resp = client_obj.replication_partners.get(id=None, hostname=downstream_hostname)
- if utils.is_null_or_empty(upstream_repl_resp):
- return (False, False, f"Replication partner '{downstream_hostname}' cannot be paused as it is not present.", {})
- if upstream_repl_resp.attrs.get("paused") is False:
- client_obj.replication_partners.pause(id=upstream_repl_resp.attrs.get("id"))
- return (True, True, f"Paused replication partner '{downstream_hostname}' successfully.", {})
- else:
- return (True, False, f"Replication partner '{downstream_hostname}' is already in paused state.", {})
- except Exception as ex:
- return (False, False, f"Pause replication partner failed |{ex}", {})
-
-
-def resume_partner(
- client_obj,
- downstream_hostname):
-
- if utils.is_null_or_empty(downstream_hostname):
- return (False, False, "Resume replication partner failed as no downstream partner is provided.", {})
-
- try:
- upstream_repl_resp = client_obj.replication_partners.get(id=None, hostname=downstream_hostname)
- if utils.is_null_or_empty(upstream_repl_resp):
- return (False, False, f"Replication partner '{downstream_hostname}' cannot be resumed as it is not present.", {})
-
- client_obj.replication_partners.resume(id=upstream_repl_resp.attrs.get("id"))
- return (True, True, f"Resumed replication partner '{downstream_hostname}' successfully.", {})
- except Exception as ex:
- return (False, False, f"Resume replication partner failed |{ex}", {})
-
-
-def main():
-
- fields = {
- "control_port": {
- "required": False,
- "type": "int"
- },
- "data_port": {
- "required": False,
- "type": "int"
- },
- "description": {
- "required": False,
- "type": "str"
- },
- "folder": {
- "required": False,
- "type": "str"
- },
- "match_folder": {
- "required": False,
- "type": "bool"
- },
- "name": {
- "required": False,
- "type": "str"
- },
- "downstream_hostname": {
- "required": True,
- "type": "str"
- },
- "pause": {
- "required": False,
- "type": "bool"
- },
- "pool": {
- "required": False,
- "type": "str"
- },
- "repl_data_hostname": {
- "required": False,
- "type": "str"
- },
- "resume": {
- "required": False,
- "type": "bool"
- },
- "secret": {
- "required": False,
- "type": "str",
- "no_log": True
- },
- "subnet_label": {
- "required": False,
- "type": "str"
- },
- "subnet_type": {
- "required": False,
- "choices": ['invalid',
- 'unconfigured',
- 'unconfigured',
- 'mgmt',
- 'data',
- 'mgmt_data'
- ],
- "type": "str"
- },
- "test": {
- "required": False,
- "type": "bool"
- },
- "throttles": {
- "required": False,
- "type": "list",
- "elements": 'dict'
- },
- "state": {
- "required": True,
- "choices": ['create',
- 'present',
- 'absent'
- ],
- "type": "str"
- }
- }
- default_fields = utils.basic_auth_arg_fields()
- fields.update(default_fields)
- required_if = [('state', 'create', ['subnet_label', 'secret', 'downstream_hostname', 'name'])]
-
- module = AnsibleModule(argument_spec=fields, required_if=required_if)
- if client is None:
- module.fail_json(msg='Python nimble-sdk could not be found.')
-
- hostname = module.params["host"]
- username = module.params["username"]
- password = module.params["password"]
- control_port = module.params["control_port"]
- data_port = module.params["data_port"]
- description = module.params["description"]
- folder = module.params["folder"]
- match_folder = module.params["match_folder"]
- repl_partner_name = module.params["name"]
- downstream_hostname = module.params["downstream_hostname"]
- pause = module.params["pause"]
- pool = module.params["pool"]
- repl_data_hostname = module.params["repl_data_hostname"]
- resume = module.params["resume"]
- secret = module.params["secret"]
- subnet_label = module.params["subnet_label"]
- subnet_type = module.params["subnet_type"]
- test = module.params["test"]
- throttles = module.params["throttles"]
- state = module.params["state"]
-
- if (username is None or password is None or hostname is None):
- module.fail_json(
- msg="Missing variables: hostname, username and password is mandatory.")
-
- # defaults
- return_status = changed = False
- msg = "No task to run."
- resp = None
- try:
- client_obj = client.NimOSClient(
- hostname,
- username,
- password,
- f"HPE Nimble Ansible Modules v{NIMBLE_ANSIBLE_VERSION}"
- )
-
- # States
- if ((test is None or test is False)
- and (resume is None or resume is False)
- and (pause is None or pause is False)
- and (state == "create" or state == "present")):
- if not client_obj.replication_partners.get(id=None, hostname=downstream_hostname) or state == "create":
- return_status, changed, msg, changed_attrs_dict, resp = create_partner(
- client_obj,
- downstream_hostname,
- control_port=control_port,
- data_port=data_port,
- description=description,
- folder_id=utils.get_folder_id(client_obj, folder),
- match_folder=match_folder,
- name=repl_partner_name, # downstream partner name
- pool_id=utils.get_pool_id(client_obj, pool),
- repl_hostname=repl_data_hostname,
- secret=secret,
- subnet_label=subnet_label,
- subnet_type=subnet_type,
- throttles=throttles)
- else:
- # update op
- return_status, changed, msg, changed_attrs_dict, resp = update_partner(
- client_obj,
- downstream_hostname,
- secret,
- control_port=control_port,
- data_port=data_port,
- description=description,
- folder_id=utils.get_folder_id(client_obj, folder),
- match_folder=match_folder,
- name=repl_partner_name, # downstream partner name
- pool_id=utils.get_pool_id(client_obj, pool),
- repl_hostname=repl_data_hostname,
- subnet_label=subnet_label,
- subnet_type=subnet_type,
- throttles=throttles)
-
- elif state == "absent":
- return_status, changed, msg, changed_attrs_dict = delete_partner(client_obj, downstream_hostname)
-
- elif state == "present" and test is True:
- return_status, changed, msg, changed_attrs_dict = test_partner(client_obj, downstream_hostname)
-
- elif state == "present" and pause is True:
- return_status, changed, msg, changed_attrs_dict = pause_partner(client_obj, downstream_hostname)
-
- elif state == "present" and resume is True:
- return_status, changed, msg, changed_attrs_dict = resume_partner(client_obj, downstream_hostname)
- except Exception as ex:
- # failed for some reason.
- msg = str(ex)
-
- if return_status:
- if utils.is_null_or_empty(resp):
- module.exit_json(return_status=return_status, changed=changed, msg=msg)
- else:
- module.exit_json(return_status=return_status, changed=changed, msg=msg, attrs=resp)
- else:
- module.fail_json(return_status=return_status, changed=changed, msg=msg)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_performance_policy.py b/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_performance_policy.py
deleted file mode 100644
index 91c836ced..000000000
--- a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_performance_policy.py
+++ /dev/null
@@ -1,343 +0,0 @@
-#!/usr/bin/python
-
-# Copyright 2020 Hewlett Packard Enterprise Development LP
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
-# file except in compliance with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software distributed
-# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-# OF ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
-
-# author Alok Ranjan (alok.ranjan2@hpe.com)
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-DOCUMENTATION = r'''
----
-author:
- - HPE Nimble Storage Ansible Team (@ar-india) <nimble-dcs-storage-automation-eng@hpe.com>
-description: Manage the performance policies on an HPE Nimble Storage group.
-module: hpe_nimble_performance_policy
-options:
- app_category:
- required: False
- type: str
- description:
- - Specifies the application category of the associated volume.
- block_size:
- required: False
- type: int
- description:
- - Block Size in bytes to be used by the volumes created with this specific performance policy. Supported block sizes are
- 4096 bytes (4 KB), 8192 bytes (8 KB), 16384 bytes(16 KB), and 32768 bytes (32 KB). Block size of a performance policy cannot
- be changed once the performance policy is created.
- cache:
- required: False
- type: bool
- description:
- - Flag denoting if data in the associated volume should be cached.
- cache_policy:
- required: False
- choices:
- - disabled
- - normal
- - aggressive
- - no_write
- - aggressive_read_no_write
- type: str
- description:
- - Specifies how data of associated volume should be cached. Normal policy caches data but skips in certain conditions such as
- sequential I/O. Aggressive policy will accelerate caching of all data belonging to this volume, regardless of sequentiality.
- change_name:
- required: False
- type: str
- description:
- - Change name of the existing performance policy.
- compress:
- required: False
- type: bool
- description:
- - Flag denoting if data in the associated volume should be compressed.
- description:
- required: False
- type: str
- description:
- - Description of a performance policy.
- dedupe:
- type: bool
- description:
- - Specifies if dedupe is enabled for volumes created with this performance policy.
- name:
- required: True
- type: str
- description:
- - Name of the performance policy.
- space_policy:
- required: False
- choices:
- - invalid
- - offline
- - non_writable
- - read_only
- - login_only
- type: str
- description:
- - Specifies the state of the volume upon space constraint violation such as volume limit violation or volumes above their volume reserve,
- if the pool free space is exhausted. Supports two policies, 'offline' and 'non_writable'.
- state:
- required: True
- choices:
- - present
- - absent
- - create
- type: str
- description:
- - The performance policy operation.
-extends_documentation_fragment: hpe.nimble.hpe_nimble
-short_description: Manage the HPE Nimble Storage performance policies
-version_added: "1.0.0"
-notes:
- - This module does not support C(check_mode).
-'''
-
-EXAMPLES = r'''
-
-# if state is create , then create a performance policy if not present. Fails if already present.
-# if state is present, then create a performance policy if not present. Succeed if it already exists.
-- name: Create performance policy if not present
- hpe.nimble.hpe_nimble_performance_policy:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- state: "{{ state | default('present') }}"
- name: "{{ name }}"
- description: "{{ description }}"
- block_size: "{{ block_size }}"
- compress: "{{ compress }}"
-
-- name: Delete performance policy
- hpe.nimble.hpe_nimble_performance_policy:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- state: absent
-
-'''
-RETURN = r'''
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-try:
- from nimbleclient.v1 import client
-except ImportError:
- client = None
-from ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble import __version__ as NIMBLE_ANSIBLE_VERSION
-import ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble as utils
-
-
-def create_perf_policy(
- client_obj,
- perf_policy_name,
- **kwargs):
-
- if utils.is_null_or_empty(perf_policy_name):
- return (False, False, "Create performance policy failed. Performance policy name is not present.", {}, {})
-
- try:
- perf_policy_resp = client_obj.performance_policies.get(id=None, name=perf_policy_name)
- if utils.is_null_or_empty(perf_policy_resp):
- params = utils.remove_null_args(**kwargs)
- perf_policy_resp = client_obj.performance_policies.create(name=perf_policy_name,
- **params)
- if perf_policy_resp is not None:
- return (True, True, f"Created performance policy '{perf_policy_name}' successfully.", {}, perf_policy_resp.attrs)
- else:
- return (False, False, f"Cannot create Performance policy '{perf_policy_name}' as it is already present", {}, {})
- except Exception as ex:
- return (False, False, f"Performance policy creation failed | {ex}", {}, {})
-
-
-def update_perf_policy(
- client_obj,
- perf_policy_resp,
- **kwargs):
-
- if utils.is_null_or_empty(perf_policy_resp):
- return (False, False, "Update performance policy failed. Performance policy name is not present.", {}, {})
-
- try:
- perf_policy_name = perf_policy_resp.attrs.get("name")
- changed_attrs_dict, params = utils.remove_unchanged_or_null_args(perf_policy_resp, **kwargs)
- if changed_attrs_dict.__len__() > 0:
- perf_policy_resp = client_obj.performance_policies.update(id=perf_policy_resp.attrs.get("id"), **params)
- return (True, True, f"Performance policy '{perf_policy_name}' already present. Modified the following attributes '{changed_attrs_dict}'",
- changed_attrs_dict, perf_policy_resp.attrs)
- else:
- return (True, False, f"Performance policy '{perf_policy_name}' already present in given state.", {}, perf_policy_resp.attrs)
- except Exception as ex:
- return (False, False, f"Performance policy update failed | {ex}", {}, {})
-
-
-def delete_perf_policy(
- client_obj,
- perf_policy_name):
-
- if utils.is_null_or_empty(perf_policy_name):
- return (False, False, "Delete performance policy failed. Performance policy name is not present.", {})
-
- try:
- perf_policy_resp = client_obj.performance_policies.get(id=None, name=perf_policy_name)
- if utils.is_null_or_empty(perf_policy_resp):
- return (False, False, f"Cannot delete Performance policy '{perf_policy_name}' as it is not present ", {})
- else:
- perf_policy_resp = client_obj.performance_policies.delete(id=perf_policy_resp.attrs.get("id"))
- return (True, True, f"Deleted performance policy '{perf_policy_name}' successfully.", {})
- except Exception as ex:
- return (False, False, f"Performance policy deletion failed | {ex}", {})
-
-
-def main():
-
- fields = {
- "app_category": {
- "required": False,
- "type": "str"
- },
- "block_size": {
- "required": False,
- "type": "int"
- },
- "cache": {
- "required": False,
- "type": "bool"
- },
- "cache_policy": {
- "required": False,
- "choices": ['disabled', 'normal', 'aggressive', 'no_write', 'aggressive_read_no_write'],
- "type": "str"
- },
- "change_name": {
- "required": False,
- "type": "str"
- },
- "compress": {
- "required": False,
- "type": "bool"
- },
- "description": {
- "required": False,
- "type": "str"
- },
- "dedupe": {
- "required": False,
- "type": "bool"
- },
- "name": {
- "required": True,
- "type": "str"
- },
- "space_policy": {
- "required": False,
- "choices": ['invalid', 'offline', 'non_writable', 'read_only', 'login_only'],
- "type": "str"
- },
- "state": {
- "required": True,
- "choices": ['present',
- 'absent',
- 'create'
- ],
- "type": "str"
- }
- }
- default_fields = utils.basic_auth_arg_fields()
- fields.update(default_fields)
- module = AnsibleModule(argument_spec=fields)
- if client is None:
- module.fail_json(msg='Python nimble-sdk could not be found.')
-
- hostname = module.params["host"]
- username = module.params["username"]
- password = module.params["password"]
- app_category = module.params["app_category"]
- block_size = module.params["block_size"]
- cache = module.params["cache"]
- cache_policy = module.params["cache_policy"]
- compress = module.params["compress"]
- description = module.params["description"]
- dedupe = module.params["dedupe"]
- perf_policy_name = module.params["name"]
- change_name = module.params["change_name"]
- space_policy = module.params["space_policy"]
- state = module.params["state"]
-
- if (username is None or password is None or hostname is None):
- module.fail_json(
- msg="Missing variables: hostname, username and password is mandatory.")
-
- # defaults
- return_status = changed = False
- msg = "No task to run."
- resp = None
- try:
- client_obj = client.NimOSClient(
- hostname,
- username,
- password,
- f"HPE Nimble Ansible Modules v{NIMBLE_ANSIBLE_VERSION}"
- )
-
- # States
- if state == "create" or state == "present":
- perf_policy_resp = client_obj.performance_policies.get(id=None, name=perf_policy_name)
- if utils.is_null_or_empty(perf_policy_resp) or state == "create":
- return_status, changed, msg, changed_attrs_dict, resp = create_perf_policy(
- client_obj,
- perf_policy_name,
- app_category=app_category,
- block_size=block_size,
- cache=cache,
- cache_policy=cache_policy,
- compress=compress,
- description=description,
- dedupe_enabled=dedupe,
- space_policy=space_policy)
- else:
- # update op
- return_status, changed, msg, changed_attrs_dict, resp = update_perf_policy(
- client_obj,
- perf_policy_resp,
- name=change_name,
- app_category=app_category,
- cache=cache,
- cache_policy=cache_policy,
- compress=compress,
- description=description,
- dedupe_enabled=dedupe,
- space_policy=space_policy)
-
- elif state == "absent":
- return_status, changed, msg, changed_attrs_dict = delete_perf_policy(
- client_obj,
- perf_policy_name)
- except Exception as ex:
- # failed for some reason.
- msg = str(ex)
-
- if return_status:
- if utils.is_null_or_empty(resp):
- module.exit_json(return_status=return_status, changed=changed, msg=msg)
- else:
- module.exit_json(return_status=return_status, changed=changed, msg=msg, attrs=resp)
- else:
- module.fail_json(return_status=return_status, changed=changed, msg=msg)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_pool.py b/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_pool.py
deleted file mode 100644
index a0b73f747..000000000
--- a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_pool.py
+++ /dev/null
@@ -1,352 +0,0 @@
-#!/usr/bin/python
-
-# Copyright 2020 Hewlett Packard Enterprise Development LP
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
-# file except in compliance with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software distributed
-# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-# OF ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
-
-# author Alok Ranjan (alok.ranjan2@hpe.com)
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-DOCUMENTATION = r'''
----
-author:
- - HPE Nimble Storage Ansible Team (@ar-india) <nimble-dcs-storage-automation-eng@hpe.com>
-description: Manage the storage pools on an HPE Nimble Storage group.
-module: hpe_nimble_pool
-options:
- array_list:
- required: False
- type: list
- elements: dict
- description:
- - List of arrays in the pool with detailed information. To create or update array list, only array ID is required.
- change_name:
- required: False
- type: str
- description:
- - Change name of the existing pool.
- description:
- required: False
- type: str
- description:
- - Text description of pool.
- dedupe_all_volumes:
- type: bool
- description:
- - Indicates if dedupe is enabled by default for new volumes on this pool.
- force:
- required: False
- type: bool
- description:
- - Forcibly delete the specified pool even if it contains deleted volumes whose space is being reclaimed.
- Forcibly remove an array from array_list via an update operation even if the array is not reachable.
- There should no volumes in the pool for the force update operation to succeed.
- is_default:
- required: False
- type: bool
- description:
- - Indicates if this is the default pool.
- merge:
- required: False
- type: bool
- description:
- - Merge the specified pool into the target pool. All volumes on the specified pool are moved to the target pool and the
- specified pool is then deleted. All the arrays in the pool are assigned to the target pool.
- name:
- required: True
- type: str
- description:
- - Name of the pool.
- state:
- required: True
- choices:
- - present
- - absent
- - create
- type: str
- description:
- - The pool operation.
- target:
- required: False
- type: str
- description:
- - Name of the target pool.
-extends_documentation_fragment: hpe.nimble.hpe_nimble
-short_description: Manage the HPE Nimble Storage pools
-version_added: "1.0.0"
-notes:
- - This module does not support C(check_mode).
-'''
-
-EXAMPLES = r'''
-
-# if state is create , then create a pool if not present. Fails if already present.
-# if state is present, then create a pool if not present. Succeed if it already exists.
-- name: Create pool if not present
- hpe.nimble.hpe_nimble_pool:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- state: "{{ state | default('present') }}"
- name: "{{ name }}"
- array_list: "{{ array_list }} "
- description: "{{ description }}"
-
-- name: Delete pool
- hpe.nimble.hpe_nimble_pool:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- state: absent
-
-'''
-RETURN = r'''
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-try:
- from nimbleclient.v1 import client
-except ImportError:
- client = None
-from ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble import __version__ as NIMBLE_ANSIBLE_VERSION
-import ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble as utils
-
-
-def create_pool(
- client_obj,
- pool_name,
- **kwargs):
-
- if utils.is_null_or_empty(pool_name):
- return (False, False, "Create pool failed as pool name is not present.", {}, {})
-
- try:
- pool_resp = client_obj.pools.get(id=None, name=pool_name)
- if utils.is_null_or_empty(pool_resp):
- params = utils.remove_null_args(**kwargs)
- pool_resp = client_obj.pools.create(name=pool_name,
- **params)
- if pool_resp is not None:
- return (True, True, f"Created pool '{pool_name}' successfully.", {}, pool_resp.attrs)
- else:
- return (False, False, f"Pool '{pool_name}' cannot be created as it is already present in given state.", {}, pool_resp.attrs)
- except Exception as ex:
- return (False, False, f"Pool creation failed | {ex}", {}, {})
-
-
-def update_pool(
- client_obj,
- pool_resp,
- **kwargs):
-
- if utils.is_null_or_empty(pool_resp):
- return (False, False, "Update pool failed as pool name is not present.", {}, {})
- try:
- pool_name = pool_resp.attrs.get("name")
- changed_attrs_dict, params = utils.remove_unchanged_or_null_args(pool_resp, **kwargs)
- if changed_attrs_dict.__len__() > 0:
- pool_resp = client_obj.pools.update(id=pool_resp.attrs.get("id"), **params)
- return (True, True, f"Pool '{pool_name}' already present. Modified the following attributes '{changed_attrs_dict}'",
- changed_attrs_dict, pool_resp.attrs)
- else:
- return (True, False, f"Pool '{pool_name}' already present in given state.", {}, pool_resp.attrs)
-
- except Exception as ex:
- return (False, False, f"Pool update failed | {ex}", {}, {})
-
-
-def delete_pool(
- client_obj,
- pool_name):
-
- if utils.is_null_or_empty(pool_name):
- return (False, False, "Delete pool failed as pool name is not present.", {})
-
- try:
- pool_resp = client_obj.pools.get(id=None, name=pool_name)
- if utils.is_null_or_empty(pool_resp):
- return (False, False, f"Cannot delete pool '{pool_name}' as it is not present.", {})
- else:
- pool_resp = client_obj.pools.delete(id=pool_resp.attrs.get("id"))
- return (True, True, f"Deleted pool '{pool_name}' successfully.", {})
- except Exception as ex:
- return (False, False, f"Pool deletion failed | {ex}", {})
-
-
-def merge_pool(
- client_obj,
- pool_name,
- target,
- **kwargs):
-
- if utils.is_null_or_empty(pool_name):
- return (False, False, "Merge pool failed as pool name is not present.", {}, {})
- if utils.is_null_or_empty(target):
- return (False, False, "Delete pool failed as target pool name is not present.", {}, {})
-
- try:
- pool_resp = client_obj.pools.get(id=None, name=pool_name)
- if utils.is_null_or_empty(pool_resp):
- return (False, False, f"Merge pools failed as source pool '{pool_name}' is not present.", {}, {})
- target_pool_resp = client_obj.pools.get(id=None, name=target)
- if utils.is_null_or_empty(target_pool_resp):
- return (False, False, f"Merge pools failed as target pool '{target}' is not present.", {}, {})
-
- params = utils.remove_null_args(**kwargs)
- resp = client_obj.pools.merge(id=pool_resp.attrs.get("id"),
- target_pool_id=target_pool_resp.attrs.get("id"),
- **params)
- if hasattr(resp, 'attrs'):
- resp = resp.attrs
- return (True, True, f"Merged target pool '{target}' to pool '{pool_name}' successfully.", {}, resp)
- except Exception as ex:
- return (False, False, f"Merge pool failed | {ex}", {}, {})
-
-
-def main():
-
- fields = {
- "array_list": {
- "required": False,
- "type": "list",
- "elements": 'dict'
- },
- "change_name": {
- "required": False,
- "type": "str"
- },
- "description": {
- "required": False,
- "type": "str"
- },
- "dedupe_all_volumes": {
- "required": False,
- "type": "bool"
- },
- "force": {
- "required": False,
- "type": "bool"
- },
- "is_default": {
- "required": False,
- "type": "bool"
- },
- "merge": {
- "required": False,
- "type": "bool"
- },
- "name": {
- "required": True,
- "type": "str"
- },
- "state": {
- "required": True,
- "choices": ['present',
- 'absent',
- 'create'
- ],
- "type": "str"
- },
- "target": {
- "required": False,
- "type": "str"
- }
- }
- default_fields = utils.basic_auth_arg_fields()
- fields.update(default_fields)
- required_if = [('state', 'create', ['array_list'])]
-
- module = AnsibleModule(argument_spec=fields, required_if=required_if)
- if client is None:
- module.fail_json(msg='Python nimble-sdk could not be found.')
-
- hostname = module.params["host"]
- username = module.params["username"]
- password = module.params["password"]
- state = module.params["state"]
- pool_name = module.params["name"]
- change_name = module.params["change_name"]
- description = module.params["description"]
- array_list = module.params["array_list"]
- force = module.params["force"]
- dedupe_all_volumes = module.params["dedupe_all_volumes"]
- is_default = module.params["is_default"]
- target = module.params["target"]
- merge = module.params["merge"]
-
- if (username is None or password is None or hostname is None):
- module.fail_json(
- msg="Missing variables: hostname, username and password is mandatory.")
-
- # defaults
- return_status = changed = False
- msg = "No task to run."
- resp = None
- try:
- client_obj = client.NimOSClient(
- hostname,
- username,
- password,
- f"HPE Nimble Ansible Modules v{NIMBLE_ANSIBLE_VERSION}"
- )
-
- # States
- if state == 'present' and merge is True:
- return_status, changed, msg, changed_attrs_dict, resp = merge_pool(
- client_obj,
- pool_name,
- target,
- force=force)
-
- elif (merge is None or merge is False) and (state == "create" or state == "present"):
- pool_resp = client_obj.pools.get(id=None, name=pool_name)
-
- if utils.is_null_or_empty(pool_resp) or state == "create":
- return_status, changed, msg, changed_attrs_dict, resp = create_pool(
- client_obj,
- pool_name,
- description=description,
- array_list=array_list,
- dedupe_all_volumes=dedupe_all_volumes)
- else:
- # update op
- return_status, changed, msg, changed_attrs_dict, resp = update_pool(
- client_obj,
- pool_resp,
- name=change_name,
- description=description,
- array_list=array_list,
- force=force,
- dedupe_all_volumes=dedupe_all_volumes,
- is_default=is_default)
-
- elif state == "absent":
- return_status, changed, msg, changed_attrs_dict = delete_pool(
- client_obj,
- pool_name)
- except Exception as ex:
- # failed for some reason.
- msg = str(ex)
-
- if return_status:
- if utils.is_null_or_empty(resp):
- module.exit_json(return_status=return_status, changed=changed, msg=msg)
- else:
- module.exit_json(return_status=return_status, changed=changed, msg=msg, attrs=resp)
- else:
- module.fail_json(return_status=return_status, changed=changed, msg=msg)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_protection_schedule.py b/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_protection_schedule.py
deleted file mode 100644
index fdfb1ed10..000000000
--- a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_protection_schedule.py
+++ /dev/null
@@ -1,521 +0,0 @@
-#!/usr/bin/python
-
-# Copyright 2020 Hewlett Packard Enterprise Development LP
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
-# file except in compliance with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software distributed
-# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-# OF ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
-
-# author Alok Ranjan (alok.ranjan2@hpe.com)
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-DOCUMENTATION = r'''
----
-author:
- - Alok Ranjan (@ranjanal)
-description: Manage the protection schedules on an HPE Nimble Storage group.
-module: hpe_nimble_protection_schedule
-options:
- at_time:
- required: False
- type: int
- default: 0
- description:
- - Time of day when snapshot should be taken. In case repeat frequency specifies more than one snapshot
- in a day then the until_time option specifies until what time of day to take snapshots.
- change_name:
- required: False
- type: str
- description:
- - Change the name of existing protection schedule.
- days:
- required: False
- type: str
- description:
- - Specifies which days snapshots should be taken. Comma separated list of days of the week or 'all'.
- description:
- required: False
- type: str
- description:
- - Description of the schedule.
- disable_appsync:
- required: False
- type: bool
- description:
- - Disables application synchronized snapshots and creates crash consistent snapshots instead.
- downstream_partner:
- required: False
- type: str
- description:
- - Specifies the partner name if snapshots created by this schedule should be replicated.
- name:
- required: True
- type: str
- description:
- - Name of the protection schedule to create.
- num_retain:
- required: False
- type: int
- description:
- - Number of snapshots to retain. If replication is enabled on this schedule the array will always retain the latest
- replicated snapshot, which may exceed the specified retention value. This is necessary to ensure efficient replication performance.
- num_retain_replica:
- required: False
- type: int
- default: 0
- description:
- - Number of snapshots to retain on the replica.
- period:
- required: False
- type: int
- description:
- - Repeat interval for snapshots with respect to the period_unit. For example,
- a value of 2 with the 'period_unit' of 'hours' results in one snapshot every 2 hours.
- period_unit:
- choices:
- - minutes
- - hours
- - days
- - weeks
- required: False
- type: str
- description:
- - Time unit over which to take the number of snapshots specified in 'period'. For example, a value of 'days' with a
- 'period' of '1' results in one snapshot every day.
- prot_template_name:
- required: False
- type: str
- description:
- - Name of the protection template in which this protection schedule is attached to.
- repl_alert_thres:
- required: False
- type: int
- description:
- - Replication alert threshold in seconds. If the replication of a snapshot takes more than this amount of time to complete
- an alert will be generated. Enter 0 to disable this alert.
- replicate_every:
- required: False
- type: int
- description:
- - Specifies which snapshots should be replicated. If snapshots are replicated and this option is not specified, every snapshot is replicated.
- schedule_type:
- choices:
- - regular
- - external_trigger
- required: False
- type: str
- description:
- - Normal schedules have internal timers which drive snapshot creation. An externally driven schedule has no internal timers.
- All snapshot activity is driven by an external trigger. In other words, these schedules are used only for externally driven manual snapshots.
- skip_db_consistency_check:
- required: False
- type: bool
- description:
- - Skip consistency check for database files on snapshots created by this schedule. This option only applies to snapshot schedules of a protection
- template with application synchronization set to VSS, application ID set to MS Exchange 2010 or later w/DAG, this schedule's snap_verify option
- set to yes, and its disable_appsync option set to false. Skipping consistency checks is only recommended if each database in a DAG has multiple copies.
- snap_verify:
- required: False
- type: bool
- description:
- - Run verification tool on snapshot created by this schedule. This option can only be used with snapshot schedules of a protection template
- that has application synchronization. The tool used to verify snapshot depends on the type of application. For example, if application
- synchronization is VSS and the application ID is Exchange, eseutil tool is run on the snapshots. If verification fails, the logs are not truncated.
- state:
- required: True
- choices:
- - present
- - absent
- - create
- type: str
- description:
- - The protection schedule operations
- until_time:
- required: False
- type: int
- description:
- - Time of day to stop taking snapshots. Applicable only when repeat frequency specifies more than one snapshot in a day.
- use_downstream_for_DR:
- required: False
- type: bool
- description:
- - Break synchronous replication for the specified volume collection and present downstream volumes to host(s). Downstream volumes in the volume
- collection will be set to online and presented to the host(s) using new serial and LUN numbers. No changes will be made to the upstream volumes,
- their serial and LUN numbers, and their online state. The existing ACLs on the upstream volumes will be copied to the downstream volumes.
- Use this in conjunction with an empty downstream_partner_id. This unconfigures synchronous replication when the partner is removed from the
- last replicating schedule in the specified volume collection and presents the downstream volumes to host(s). Host(s) will need to be configured
- to access the new volumes with the newly assigned serial and LUN numbers. Use this option to expose downstream volumes in a synchronously replicated
- volume collection to host(s) only when the upstream partner is confirmed to be down and there is no communication between partners. Do not execute this
- operation if a previous Group Management Service takeover has been performed on a different array. Do not perform a subsequent Group Management Service
- takeover on a different array as it will lead to irreconcilable conflicts. This limitation is cleared once the Group management service backup array has
- successfully synchronized after reconnection.
- volcoll_or_prottmpl_type:
- choices:
- - protection_template
- - volume_collection
- required: True
- type: str
- description:
- - Type of the protection policy this schedule is attached to.
- volcoll_name:
- required: False
- type: str
- description:
- - Name of the volume collection in which this protection schedule is attached to.
-extends_documentation_fragment: hpe.nimble.hpe_nimble
-short_description: Manage the HPE Nimble Storage protection schedules
-version_added: "1.0.0"
-notes:
- - This module does not support C(check_mode).
-'''
-
-EXAMPLES = r'''
-
-# if state is create , then create a protection schedule if not present. Fails if already present.
-# if state is present, then create a protection schedule if not present. Succeed if it already exists.
-- name: Create protection schedule if not present
- hpe.nimble.hpe_nimble_protection_schedule:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- description: "{{ description | default(None)}}"
- state: "{{ state | default('present') }}"
- volcoll_or_prottmpl_type: "{{ volcoll_or_prottmpl_type }}"
- prot_template_name: "{{ prot_template_name }}"
- num_retain: "{{ num_retain }}"
-
-- name: Delete protection schedule
- hpe.nimble.hpe_nimble_protection_schedule:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- volcoll_or_prottmpl_type: "{{ volcoll_or_prottmpl_type }}"
- volcoll_name: "{{ volcoll_name }}"
- state: absent
-
-'''
-RETURN = r'''
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-try:
- from nimbleclient.v1 import client
-except ImportError:
- client = None
-from ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble import __version__ as NIMBLE_ANSIBLE_VERSION
-import ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble as utils
-
-
-def create_prot_schedule(
- client_obj,
- prot_schedule_name,
- **kwargs):
-
- if utils.is_null_or_empty(prot_schedule_name):
- return (False, False, "Create protection schedule failed as protection schedule name is not present.", {}, {})
- try:
- prot_schedule_resp = client_obj.protection_schedules.get(id=None,
- name=prot_schedule_name,
- volcoll_or_prottmpl_type=kwargs['volcoll_or_prottmpl_type'],
- volcoll_or_prottmpl_id=kwargs['volcoll_or_prottmpl_id'])
- if utils.is_null_or_empty(prot_schedule_resp):
- params = utils.remove_null_args(**kwargs)
- prot_schedule_resp = client_obj.protection_schedules.create(name=prot_schedule_name, **params)
- return (True, True, f"Created protection schedule '{prot_schedule_name}' successfully.", {}, prot_schedule_resp.attrs)
- else:
- return (False, False, f"Cannot create protection schedule '{prot_schedule_name}' as it is already present in given state.",
- {}, prot_schedule_resp.attrs)
- except Exception as ex:
- return (False, False, f"Protection schedule creation failed | {ex}", {}, {})
-
-
-def update_prot_schedule(
- client_obj,
- prot_schedule_resp,
- **kwargs):
-
- if utils.is_null_or_empty(prot_schedule_resp):
- return (False, False, "Update protection schedule failed as protection schedule is not present.", {}, {})
- try:
- prot_schedule_name = prot_schedule_resp.attrs.get("name")
- changed_attrs_dict, params = utils.remove_unchanged_or_null_args(prot_schedule_resp, **kwargs)
- if changed_attrs_dict.__len__() > 0:
- prot_schedule_resp = client_obj.protection_schedules.update(id=prot_schedule_resp.attrs.get("id"), **params)
- return (True, True, f"Protection schedule '{prot_schedule_name}' already present. Modified the following attributes '{changed_attrs_dict}'",
- changed_attrs_dict, prot_schedule_resp.attrs)
- else:
- return (True, False, f"Protection schedule '{prot_schedule_name}' already present in given state.", {}, prot_schedule_resp.attrs)
- except Exception as ex:
- return (False, False, f"Protection schedule update failed |{ex}", {}, {})
-
-
-def delete_prot_schedule(client_obj,
- prot_schedule_name,
- volcoll_or_prottmpl_type,
- volcoll_or_prottmpl_id):
-
- if utils.is_null_or_empty(prot_schedule_name):
- return (False, False, "Protection schedule deletion failed as protection schedule name is not present", {})
-
- try:
- prot_schedule_resp = client_obj.protection_schedules.get(id=None,
- name=prot_schedule_name,
- volcoll_or_prottmpl_type=volcoll_or_prottmpl_type,
- volcoll_or_prottmpl_id=volcoll_or_prottmpl_id)
- if utils.is_null_or_empty(prot_schedule_resp):
- return (False, False, f"Protection schedule '{prot_schedule_name}' not present to delete.", {})
- else:
- client_obj.protection_schedules.delete(id=prot_schedule_resp.attrs.get("id"))
- return (True, True, f"Deleted protection schedule '{prot_schedule_name}' successfully.", {})
- except Exception as ex:
- return (False, False, f"Protection schedule deletion failed | {ex}", {})
-
-
-def main():
-
- fields = {
- "state": {
- "required": True,
- "choices": ['present',
- 'absent',
- 'create'
- ],
- "type": "str"
- },
- "change_name": {
- "required": False,
- "type": "str"
- },
- "name": {
- "required": True,
- "type": "str"
- },
- "description": {
- "required": False,
- "type": "str"
- },
- "volcoll_or_prottmpl_type": {
- "choices": ['protection_template', 'volume_collection'],
- "required": True,
- "type": "str"
- },
- "volcoll_name": {
- "required": False,
- "type": "str"
- },
- "prot_template_name": {
- "required": False,
- "type": "str"
- },
- "period": {
- "required": False,
- "type": "int"
- },
- "period_unit": {
- "choices": ['minutes', 'hours', 'days', 'weeks'],
- "required": False,
- "type": "str"
- },
- "at_time": {
- "required": False,
- "type": "int"
- },
- "until_time": {
- "required": False,
- "type": "int"
- },
- "days": {
- "required": False,
- "type": "str"
- },
- "num_retain": {
- "required": False,
- "type": "int"
- },
- "downstream_partner": {
- "required": False,
- "type": "str"
- },
- "replicate_every": {
- "required": False,
- "type": "int"
- },
- "num_retain_replica": {
- "required": False,
- "type": "int"
- },
- "repl_alert_thres": {
- "required": False,
- "type": "int"
- },
- "snap_verify": {
- "required": False,
- "type": "bool"
- },
- "skip_db_consistency_check": {
- "required": False,
- "type": "bool"
- },
- "disable_appsync": {
- "required": False,
- "type": "bool"
- },
- "schedule_type": {
- "choices": ['regular', 'external_trigger'],
- "required": False,
- "type": "str"
- },
- "use_downstream_for_DR": {
- "required": False,
- "type": "bool"
- }
- }
-
- mutually_exclusive = [
- ['prot_template_name', 'volcoll_name']
- ]
- required_if = [
- ['state', 'create', ['num_retain']]
- ]
- required_one_of = [
- ['volcoll_name', 'prot_template_name']
- ]
- default_fields = utils.basic_auth_arg_fields()
- fields.update(default_fields)
- module = AnsibleModule(argument_spec=fields, mutually_exclusive=mutually_exclusive, required_if=required_if, required_one_of=required_one_of)
- if client is None:
- module.fail_json(msg='Python nimble-sdk could not be found.')
-
- hostname = module.params["host"]
- username = module.params["username"]
- password = module.params["password"]
- state = module.params["state"]
- prot_schedule_name = module.params["name"]
- change_name = module.params["change_name"]
- description = module.params["description"]
- volcoll_or_prottmpl_type = module.params["volcoll_or_prottmpl_type"]
- volcoll_name = module.params["volcoll_name"]
- prot_template_name = module.params["prot_template_name"]
- period = module.params["period"]
- period_unit = module.params["period_unit"]
- at_time = module.params["at_time"]
- until_time = module.params["until_time"]
- days = module.params["days"]
- num_retain = module.params["num_retain"]
- downstream_partner = module.params["downstream_partner"]
- replicate_every = module.params["replicate_every"]
- num_retain_replica = module.params["num_retain_replica"]
- repl_alert_thres = module.params["repl_alert_thres"]
- snap_verify = module.params["snap_verify"]
- skip_db_consistency_check = module.params["skip_db_consistency_check"]
- disable_appsync = module.params["disable_appsync"]
- schedule_type = module.params["schedule_type"]
- use_downstream_for_DR = module.params["use_downstream_for_DR"]
-
- if (username is None or password is None or hostname is None):
- module.fail_json(
- msg="Missing variables: hostname, username and password is mandatory.")
-
- # defaults
- return_status = changed = False
- msg = "No task to run."
- resp = None
- try:
- client_obj = client.NimOSClient(
- hostname,
- username,
- password,
- f"HPE Nimble Ansible Modules v{NIMBLE_ANSIBLE_VERSION}"
- )
-
- # States
- if state == "create" or state == "present":
- # we need to enforce the below params as mandatory as there can be a scenario where in a protection schedule with the same name
- # exists in a different volume collection or in different protection tempalate. Hence, if a user wants to modify/update
- # a protection schedule , they need to provide all the three params for us to query and find the exact protection schedule
- if volcoll_name is None and prot_template_name is None or volcoll_or_prottmpl_type is None:
- module.fail_json(msg='Please provide the Mandatory params : volcoll_or_prottmpl_type, and volcoll_name or prot_template_name.')
-
- prot_schedule_resp = client_obj.protection_schedules.get(
- id=None,
- name=prot_schedule_name,
- volcoll_or_prottmpl_type=volcoll_or_prottmpl_type,
- volcoll_or_prottmpl_id=utils.get_volcoll_or_prottmpl_id(client_obj, volcoll_name, prot_template_name))
-
- if utils.is_null_or_empty(prot_schedule_resp) or state == "create":
- return_status, changed, msg, changed_attrs_dict, resp = create_prot_schedule(
- client_obj,
- prot_schedule_name,
- description=description,
- volcoll_or_prottmpl_type=volcoll_or_prottmpl_type,
- volcoll_or_prottmpl_id=utils.get_volcoll_or_prottmpl_id(client_obj, volcoll_name, prot_template_name),
- period=period,
- period_unit=period_unit,
- at_time=at_time,
- until_time=until_time,
- days=days,
- num_retain=num_retain,
- downstream_partner=downstream_partner,
- downstream_partner_id=utils.get_downstream_partner_id(client_obj, downstream_partner),
- replicate_every=replicate_every,
- num_retain_replica=num_retain_replica,
- repl_alert_thres=repl_alert_thres,
- snap_verify=snap_verify,
- skip_db_consistency_check=skip_db_consistency_check,
- disable_appsync=disable_appsync,
- schedule_type=schedule_type)
- else:
- # update op
- return_status, changed, msg, changed_attrs_dict, resp = update_prot_schedule(
- client_obj,
- prot_schedule_resp,
- name=change_name,
- description=description,
- period=period,
- period_unit=period_unit,
- at_time=at_time,
- until_time=until_time,
- days=days,
- num_retain=num_retain,
- downstream_partner=downstream_partner,
- downstream_partner_id=utils.get_downstream_partner_id(client_obj, downstream_partner),
- replicate_every=replicate_every,
- num_retain_replica=num_retain_replica,
- repl_alert_thres=repl_alert_thres,
- snap_verify=snap_verify,
- skip_db_consistency_check=skip_db_consistency_check,
- disable_appsync=disable_appsync,
- schedule_type=schedule_type,
- use_downstream_for_DR=use_downstream_for_DR)
-
- elif state == "absent":
- return_status, changed, msg, changed_attrs_dict = delete_prot_schedule(
- client_obj,
- prot_schedule_name,
- volcoll_or_prottmpl_type,
- utils.get_volcoll_or_prottmpl_id(client_obj, volcoll_name, prot_template_name))
- except Exception as ex:
- # failed for some reason.
- msg = str(ex)
-
- if return_status:
- if utils.is_null_or_empty(resp):
- module.exit_json(return_status=return_status, changed=changed, msg=msg)
- else:
- module.exit_json(return_status=return_status, changed=changed, msg=msg, attrs=resp)
- else:
- module.fail_json(return_status=return_status, changed=changed, msg=msg)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_protection_template.py b/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_protection_template.py
deleted file mode 100644
index 7491d8440..000000000
--- a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_protection_template.py
+++ /dev/null
@@ -1,386 +0,0 @@
-#!/usr/bin/python
-
-# Copyright 2020 Hewlett Packard Enterprise Development LP
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
-# file except in compliance with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software distributed
-# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-# OF ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
-
-# author Alok Ranjan (alok.ranjan2@hpe.com)
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-DOCUMENTATION = r'''
----
-author:
- - HPE Nimble Storage Ansible Team (@ar-india) <nimble-dcs-storage-automation-eng@hpe.com>
-description: Manage the protection templates on an HPE Nimble Storage group.
-module: hpe_nimble_protection_template
-options:
- agent_hostname:
- required: False
- type: str
- description:
- - Generic backup agent hostname.
- agent_password:
- required: False
- type: str
- description:
- - Generic backup agent password.
- agent_username:
- required: False
- type: str
- description:
- - Generic backup agent username.
- app_cluster:
- required: False
- type: str
- description:
- - If the application is running within a windows cluster environment, this is the cluster name.
- app_id:
- required: False
- choices:
- - inval
- - exchange
- - exchange_dag
- - hyperv
- - sql2005
- - sql2008
- - sql2012
- - sql2014
- - sql2016
- - sql2017
- type: str
- description:
- - Application ID running on the server.
- app_server:
- required: False
- type: str
- description:
- - Application server hostname.
- app_service_name:
- required: False
- type: str
- description:
- - If the application is running within a windows cluster environment then this is the instance name of the service running within the cluster environment.
- app_sync:
- choices:
- - none
- - vss
- - vmware
- - generic
- required: False
- type: str
- description:
- - Application synchronization.
- change_name:
- required: False
- type: str
- description:
- - Change name of the existing protection template.
- description:
- required: False
- type: str
- description:
- - Text description of protection template.
- name:
- required: True
- type: str
- description:
- - Name of the protection template.
- state:
- required: True
- choices:
- - present
- - absent
- - create
- type: str
- description:
- - The protection template operations.
- vcenter_hostname:
- required: False
- type: str
- description:
- - VMware vCenter hostname.
- vcenter_password:
- required: False
- type: str
- description:
- - Application VMware vCenter password. A password with few constraints.
- vcenter_username:
- required: False
- type: str
- description:
- - Application VMware vCenter username. String of up to 80 alphanumeric characters, beginning with a letter.
- It can include ampersand (@), backslash (\), dash (-), period (.), and underscore (_).
-extends_documentation_fragment: hpe.nimble.hpe_nimble
-short_description: Manage the HPE Nimble Storage protection templates
-version_added: "1.0.0"
-notes:
- - This module does not support C(check_mode).
-'''
-
-EXAMPLES = r'''
-
-# if state is create , then create a protection template if not present. Fails if already present.
-# if state is present, then create a protection template if not present. Succeed if it already exists.
-- name: Create protection template if not present
- hpe.nimble.hpe_nimble_protection_template:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- description: "{{ description | default(None)}}"
- state: "{{ state | default('present') }}"
-
-- name: Delete protection template
- hpe.nimble.hpe_nimble_protection_template:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- state: absent
-
-'''
-RETURN = r'''
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-try:
- from nimbleclient.v1 import client
-except ImportError:
- client = None
-from ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble import __version__ as NIMBLE_ANSIBLE_VERSION
-import ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble as utils
-
-
-def create_prot_template(
- client_obj,
- prot_template_name,
- **kwargs):
-
- if utils.is_null_or_empty(prot_template_name):
- return (False, False, "Create protection template failed as protection template name is not present.", {}, {})
- try:
- prot_template_resp = client_obj.protection_templates.get(id=None, name=prot_template_name)
- if utils.is_null_or_empty(prot_template_resp):
- params = utils.remove_null_args(**kwargs)
- prot_template_resp = client_obj.protection_templates.create(name=prot_template_name, **params)
- return (True, True, f"Protection template '{prot_template_name}' created successfully.", {}, prot_template_resp.attrs)
- else:
- return (False, False, f"Protection template '{prot_template_name}' cannot be created as it is already present in given state.",
- {}, prot_template_resp.attrs)
- except Exception as ex:
- return (False, False, f"Protection template creation failed | {ex}", {}, {})
-
-
-def update_prot_template(
- client_obj,
- prot_template_resp,
- **kwargs):
-
- if utils.is_null_or_empty(prot_template_resp):
- return (False, False, "Update protection template failed as protection template is not present.", {}, {})
- try:
- prot_template_name = prot_template_resp.attrs.get("name")
- changed_attrs_dict, params = utils.remove_unchanged_or_null_args(prot_template_resp, **kwargs)
- if changed_attrs_dict.__len__() > 0:
- prot_template_resp = client_obj.protection_templates.update(id=prot_template_resp.attrs.get("id"), **params)
- return (True, True, f"Protection template '{prot_template_name}' already present. Modified the following attributes '{changed_attrs_dict}'",
- changed_attrs_dict, prot_template_resp.attrs)
- else:
- return (True, False, f"Protection template '{prot_template_name}' already present in given state.", {}, prot_template_resp.attrs)
- except Exception as ex:
- return (False, False, f"Protection template update failed | {ex}", {}, {})
-
-
-def delete_prot_template(client_obj, prot_template_name):
-
- if utils.is_null_or_empty(prot_template_name):
- return (False, False, "Protection template deletion failed as protection template name is not present.", {})
-
- try:
- prot_template_resp = client_obj.protection_templates.get(id=None, name=prot_template_name)
- if utils.is_null_or_empty(prot_template_resp):
- return (False, False, f"Protection template '{prot_template_name}' not present to delete.", {})
- else:
- client_obj.protection_templates.delete(id=prot_template_resp.attrs.get("id"))
- return (True, True, f"Deleted protection template '{prot_template_name}' successfully.", {})
- except Exception as ex:
- return (False, False, f"Protection template deletion failed | {ex}", {})
-
-
-def main():
-
- fields = {
- "state": {
- "required": True,
- "choices": ['present',
- 'absent',
- 'create'
- ],
- "type": "str"
- },
- "change_name": {
- "required": False,
- "type": "str"
- },
- "name": {
- "required": True,
- "type": "str"
- },
- "description": {
- "required": False,
- "type": "str"
- },
- "app_sync": {
- "choices": ['none', 'vss', 'vmware', 'generic'],
- "required": False,
- "type": "str"
- },
- "app_server": {
- "required": False,
- "type": "str"
- },
- "app_id": {
- "required": False,
- "choices": ['inval', 'exchange', 'exchange_dag', 'hyperv', 'sql2005', 'sql2008', 'sql2012', 'sql2014', 'sql2016', 'sql2017'],
- "type": "str"
- },
- "app_cluster": {
- "required": False,
- "type": "str"
- },
- "app_service_name": {
- "required": False,
- "type": "str"
- },
- "vcenter_hostname": {
- "required": False,
- "type": "str"
- },
- "vcenter_username": {
- "required": False,
- "type": "str"
- },
- "vcenter_password": {
- "required": False,
- "type": "str",
- "no_log": True
- },
- "agent_hostname": {
- "required": False,
- "type": "str"
- },
- "agent_username": {
- "required": False,
- "type": "str"
- },
- "agent_password": {
- "required": False,
- "type": "str",
- "no_log": True
- }
- }
- default_fields = utils.basic_auth_arg_fields()
- fields.update(default_fields)
- module = AnsibleModule(argument_spec=fields)
- if client is None:
- module.fail_json(msg='Python nimble-sdk could not be found.')
-
- hostname = module.params["host"]
- username = module.params["username"]
- password = module.params["password"]
- state = module.params["state"]
- prot_template_name = module.params["name"]
- change_name = module.params["change_name"]
- description = module.params["description"]
- app_sync = module.params["app_sync"]
- app_server = module.params["app_server"]
- app_id = module.params["app_id"]
- app_cluster = module.params["app_cluster"]
- app_service_name = module.params["app_service_name"]
- vcenter_hostname = module.params["vcenter_hostname"]
- vcenter_username = module.params["vcenter_username"]
- vcenter_password = module.params["vcenter_password"]
- agent_hostname = module.params["agent_hostname"]
- agent_username = module.params["agent_username"]
- agent_password = module.params["agent_password"]
-
- if (username is None or password is None or hostname is None or prot_template_name is None):
- module.fail_json(
- msg="Missing variables: hostname, username, password and protection template is mandatory.")
-
- # defaults
- return_status = changed = False
- msg = "No task to run."
- resp = None
- try:
- client_obj = client.NimOSClient(
- hostname,
- username,
- password,
- f"HPE Nimble Ansible Modules v{NIMBLE_ANSIBLE_VERSION}"
- )
-
- # States
- if state == "create" or state == "present":
- prot_template_resp = client_obj.protection_templates.get(id=None, name=prot_template_name)
- if utils.is_null_or_empty(prot_template_resp) or state == "create":
- return_status, changed, msg, changed_attrs_dict, resp = create_prot_template(
- client_obj,
- prot_template_name,
- description=description,
- app_sync=app_sync,
- app_server=app_server,
- app_id=app_id,
- app_cluster_name=app_cluster,
- app_service_name=app_service_name,
- vcenter_hostname=vcenter_hostname,
- vcenter_username=vcenter_username,
- vcenter_password=vcenter_password,
- agent_hostname=agent_hostname,
- agent_username=agent_username,
- agent_password=agent_password)
- else:
- # update op
- return_status, changed, msg, changed_attrs_dict, resp = update_prot_template(
- client_obj,
- prot_template_resp,
- name=change_name,
- description=description,
- app_sync=app_sync,
- app_server=app_server,
- app_id=app_id, app_cluster_name=app_cluster,
- app_service_name=app_service_name,
- vcenter_hostname=vcenter_hostname,
- vcenter_username=vcenter_username,
- vcenter_password=vcenter_password,
- agent_hostname=agent_hostname,
- agent_username=agent_username,
- agent_password=agent_password)
-
- elif state == "absent":
- return_status, changed, msg, changed_attrs_dict = delete_prot_template(client_obj, prot_template_name)
- except Exception as ex:
- # failed for some reason.
- msg = str(ex)
-
- if return_status:
- if utils.is_null_or_empty(resp):
- module.exit_json(return_status=return_status, changed=changed, msg=msg)
- else:
- module.exit_json(return_status=return_status, changed=changed, msg=msg, attrs=resp)
- else:
- module.fail_json(return_status=return_status, changed=changed, msg=msg)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_shelf.py b/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_shelf.py
deleted file mode 100644
index 88e15e058..000000000
--- a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_shelf.py
+++ /dev/null
@@ -1,228 +0,0 @@
-#!/usr/bin/python
-
-# Copyright 2020 Hewlett Packard Enterprise Development LP
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
-# file except in compliance with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software distributed
-# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-# OF ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
-
-# author Alok Ranjan (alok.ranjan2@hpe.com)
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-DOCUMENTATION = r'''
----
-author:
- - HPE Nimble Storage Ansible Team (@ar-india) <nimble-dcs-storage-automation-eng@hpe.com>
-description: Manage the shelves on an HPE Nimble Storage group.
-module: hpe_nimble_shelf
-options:
- accept_dedupe_impact:
- required: False
- type: bool
- description:
- - Accept the reduction or elimination of deduplication capability on the system as a result of activating a shelf
- that does not meet the necessary deduplication requirements.
- accept_foreign:
- required: False
- type: bool
- description:
- - Accept the removal of data on the shelf disks and activate foreign shelf.
- activated:
- required: True
- type: bool
- description:
- - Activated state for shelf or disk set means it is available to store date on. An activated shelf may not be deactivated.
- driveset:
- required: False
- type: int
- description:
- - Driveset to activate.
- force:
- required: False
- type: bool
- description:
- - Forcibly activate shelf.
- last_request:
- required: False
- type: bool
- description:
- - Indicates this is the last request in a series of shelf add requests.
- state:
- required: True
- choices:
- - present
- type: str
- description:
- - The shelf operation.
- shelf_serial:
- required: True
- type: str
- description:
- - Serial number of shelf.
-extends_documentation_fragment: hpe.nimble.hpe_nimble
-short_description: Manage the HPE Nimble Storage shelves
-version_added: "1.0.0"
-notes:
- - This module does not support C(check_mode).
-'''
-
-EXAMPLES = r'''
-
-- name: Update shelf
- hpe.nimble.hpe_nimble_shelf:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- shelf_serial: "{{ shelf_serial | mandatory }}"
- accept_foreign: "{{ accept_foreign }}"
- force: "{{ force }}"
- activated: "{{ activated }}"
- state: present
-
-'''
-RETURN = r'''
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-try:
- from nimbleclient.v1 import client
-except ImportError:
- client = None
-from ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble import __version__ as NIMBLE_ANSIBLE_VERSION
-import ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble as utils
-
-
-def update_shelve(
- client_obj,
- shelf_serial,
- **kwargs):
-
- if utils.is_null_or_empty(shelf_serial):
- return (False, False, "Shelf update failed as no shelf id provided.", {})
-
- try:
- shelf_list_resp = client_obj.shelves.list(detail=True)
- if utils.is_null_or_empty(shelf_list_resp):
- return (False, False, f"Shelf serial '{shelf_serial}' is not present on array.", {})
- else:
- shelf_resp = None
- # check if the given shelf serial is present on array
- for resp in shelf_list_resp:
- if shelf_serial == resp.attrs.get("serial"):
- shelf_resp = resp
- break
- if utils.is_null_or_empty(shelf_resp):
- return (False, False, f"Shelf serial '{shelf_serial}' is not present on array.", {})
- else:
- changed_attrs_dict, params = utils.remove_unchanged_or_null_args(shelf_resp, **kwargs)
- if changed_attrs_dict.__len__() > 0:
- shelf_resp = client_obj.shelves.update(id=shelf_resp.attrs.get("id"), **params)
- return (True, True, f"Successfully updated Shelf '{shelf_serial}'.", shelf_resp.attrs)
- else:
- return (True, False, f"Shelf serial '{shelf_serial}' already updated.", shelf_resp.attrs)
- except Exception as e:
- return (False, False, "Shelf update failed | %s" % str(e), {})
-
-
-def main():
-
- fields = {
- "state": {
- "required": True,
- "choices": ['present'],
- "type": "str"
- },
- "shelf_serial": {
- "required": True,
- "type": "str"
- },
- "activated": {
- "required": True,
- "type": "bool"
- },
- "driveset": {
- "required": False,
- "type": "int"
- },
- "force": {
- "required": False,
- "type": "bool"
- },
- "accept_foreign": {
- "required": False,
- "type": "bool"
- },
- "accept_dedupe_impact": {
- "required": False,
- "type": "bool"
- },
- "last_request": {
- "required": False,
- "type": "bool"
- }
- }
- default_fields = utils.basic_auth_arg_fields()
- fields.update(default_fields)
- module = AnsibleModule(argument_spec=fields)
- if client is None:
- module.fail_json(msg='Python nimble-sdk could not be found.')
-
- hostname = module.params["host"]
- username = module.params["username"]
- password = module.params["password"]
- state = module.params["state"]
- shelf_serial = module.params["shelf_serial"]
- activated = module.params["activated"]
- driveset = module.params["driveset"]
- force = module.params["force"]
- accept_foreign = module.params["accept_foreign"]
- accept_dedupe_impact = module.params["accept_dedupe_impact"]
- last_request = module.params["last_request"]
-
- if (username is None or password is None or hostname is None):
- module.fail_json(
- msg="Missing variables: hostname, username and password is mandatory.")
-
- # defaults
- return_status = changed = False
- msg = "No task to run."
- resp = None
- try:
- client_obj = client.NimOSClient(
- hostname,
- username,
- password,
- f"HPE Nimble Ansible Modules v{NIMBLE_ANSIBLE_VERSION}"
- )
-
- # States
- if state == "present":
- return_status, changed, msg, resp = update_shelve(
- client_obj,
- shelf_serial,
- activated=activated,
- driveset=driveset,
- force=force,
- accept_foreign=accept_foreign,
- accept_dedupe_impact=accept_dedupe_impact,
- last_request=last_request)
- except Exception as ex:
- # failed for some reason.
- msg = str(ex)
-
- if return_status:
- module.exit_json(return_status=return_status, changed=changed, msg=msg, attrs=resp)
- else:
- module.fail_json(return_status=return_status, changed=changed, msg=msg)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_snapshot.py b/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_snapshot.py
deleted file mode 100644
index aaf891550..000000000
--- a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_snapshot.py
+++ /dev/null
@@ -1,360 +0,0 @@
-#!/usr/bin/python
-
-# Copyright 2020 Hewlett Packard Enterprise Development LP
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
-# file except in compliance with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software distributed
-# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-# OF ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
-
-# author Alok Ranjan (alok.ranjan2@hpe.com)
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-DOCUMENTATION = r'''
----
-author:
- - HPE Nimble Storage Ansible Team (@ar-india) <nimble-dcs-storage-automation-eng@hpe.com>
-description: Manage the snapshots on an HPE Nimble Storage group.
-module: hpe_nimble_snapshot
-options:
- agent_type:
- required: False
- choices:
- - none
- - smis
- - vvol
- - openstack
- - openstackv2
- type: str
- description:
- - External management agent type.
- app_uuid:
- required: False
- type: str
- description:
- - Application identifier of snapshot.
- change_name:
- required: False
- type: str
- description:
- - Change name of the existing snapshot.
- description:
- required: False
- type: str
- description:
- - Text description of snapshot.
- expiry_after:
- required: False
- type: int
- description:
- - Number of seconds after which this snapshot is considered expired by snapshot TTL. A value of 0 indicates that snapshot never expires.
- force:
- required: False
- type: bool
- description:
- - Forcibly delete the specified snapshot even if it is the last replicated collection. Doing so could lead to full re-seeding at the next replication.
- metadata:
- required: False
- type: dict
- description:
- - Key-value pairs that augment a snapshot's attributes. List of key-value pairs. Keys must be unique and non-empty.
- name:
- required: True
- type: str
- description:
- - Name of the snapshot.
- online:
- required: False
- type: bool
- description:
- - Online state for a snapshot means it could be mounted for data restore.
- state:
- required: True
- choices:
- - present
- - absent
- - create
- type: str
- description:
- - The snapshot state.
- volume:
- required: True
- type: str
- description:
- - Parent volume name.
- writable:
- required: False
- type: bool
- description:
- - Allow snapshot to be writable. Mandatory and must be set to 'true' for VSS application synchronized snapshots.
-extends_documentation_fragment: hpe.nimble.hpe_nimble
-short_description: Manage the HPE Nimble Storage snapshots
-version_added: "1.0.0"
-notes:
- - This module does not support C(check_mode).
-'''
-
-EXAMPLES = r'''
-
-# if state is create , then create a snapshot if not present. Fails if already present.
-# if state is present, then create a snapshot if not present. Succeeds if it already exists.
-- name: Create snapshot if not present
- hpe.nimble.hpe_nimble_snapshot:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- state: "{{ state | default('present') }}"
- volume: "{{ volume }}"
- name: "{{ name }}"
- online: "{{ online | default(true) }}"
- writable: "{{ writable | default(false) }}"
-
-- name: Delete snapshot (must be offline)
- hpe.nimble.hpe_nimble_snapshot:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- volume: "{{ volume }}"
- name: "{{ name }}"
- state: absent
-
-'''
-RETURN = r'''
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-try:
- from nimbleclient.v1 import client
-except ImportError:
- client = None
-from ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble import __version__ as NIMBLE_ANSIBLE_VERSION
-import ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble as utils
-
-
-def create_snapshot(
- client_obj,
- vol_name,
- snapshot_name,
- **kwargs):
-
- if utils.is_null_or_empty(snapshot_name):
- return (False, False, "Create snapshot failed as snapshot is not present.", {}, {})
- if utils.is_null_or_empty(vol_name):
- return (False, False, "Create snapshot failed as volume is not present.", {}, {})
-
- try:
- vol_resp = client_obj.volumes.get(id=None, name=vol_name)
- if utils.is_null_or_empty(vol_resp):
- return (False, False, f"Volume '{vol_name}' not present on array for taking snapshot.", {}, {})
- snap_resp = client_obj.snapshots.get(id=None, vol_name=vol_name, name=snapshot_name)
- if utils.is_null_or_empty(snap_resp):
- params = utils.remove_null_args(**kwargs)
- snap_resp = client_obj.snapshots.create(name=snapshot_name,
- vol_id=vol_resp.attrs.get("id"),
- **params)
- if snap_resp is not None:
- return (True, True, f"Snapshot '{snapshot_name}' created successfully.", {}, snap_resp.attrs)
- else:
- return (False, False, f"Snapshot '{snapshot_name}' cannot be created as it is already present in given state.", {}, {})
- except Exception as ex:
- return (False, False, f"Snapshot creation failed | {ex}", {}, {})
-
-
-def update_snapshot(
- client_obj,
- snap_resp,
- **kwargs):
-
- if utils.is_null_or_empty(snap_resp):
- return (False, False, "Update snapshot failed as snapshot is not present.", {}, {})
-
- try:
- snapshot_name = snap_resp.attrs.get("name")
- changed_attrs_dict, params = utils.remove_unchanged_or_null_args(snap_resp, **kwargs)
- if changed_attrs_dict.__len__() > 0:
- snap_resp = client_obj.snapshots.update(id=snap_resp.attrs.get("id"), **params)
- return (True, True, f"Snapshot '{snapshot_name}' already present. Modified the following attributes '{changed_attrs_dict}'",
- changed_attrs_dict, snap_resp.attrs)
- else:
- return (True, False, f"Snapshot '{snapshot_name}' already present in given state.", {}, snap_resp.attrs)
-
- except Exception as ex:
- return (False, False, f"Snapshot update failed | {ex}", {}, {})
-
-
-def delete_snapshot(
- client_obj,
- vol_name,
- snapshot_name):
-
- if utils.is_null_or_empty(snapshot_name):
- return (False, False, "Delete snapshot failed as snapshot is not present.", {})
- if utils.is_null_or_empty(vol_name):
- return (False, False, "Delete snapshot failed. Volume is not present.", {})
-
- try:
- vol_resp = client_obj.volumes.get(id=None, name=vol_name)
- if utils.is_null_or_empty(vol_resp):
- return (False, False, f"Volume '{vol_name}' is not present on Array for deleting snapshot.", {})
- snap_resp = client_obj.snapshots.get(id=None, vol_name=vol_name, name=snapshot_name)
- if utils.is_null_or_empty(snap_resp):
- return (False, False, f"Snapshot '{snapshot_name}' cannot be deleted as it is not present in given volume '{vol_name}'.", {})
- else:
- client_obj.snapshots.delete(id=snap_resp.attrs.get("id"))
- return (True, True, f"Deleted snapshot '{snapshot_name}' successfully.", {})
- except Exception as ex:
- return (False, False, f"Snapshot deletion failed | {ex}", {})
-
-
-def main():
-
- fields = {
- "state": {
- "required": True,
- "choices": ['present',
- 'absent',
- 'create'
- ],
- "type": "str"
- },
- "change_name": {
- "required": False,
- "type": "str"
- },
- "name": {
- "required": True,
- "type": "str"
- },
- "description": {
- "required": False,
- "type": "str"
- },
- "volume": {
- "required": True,
- "type": "str"
- },
- "online": {
- "required": False,
- "type": "bool"
- },
- "writable": {
- "required": False,
- "type": "bool"
- },
- "app_uuid": {
- "required": False,
- "type": "str"
- },
- "metadata": {
- "required": False,
- "type": "dict"
- },
- "agent_type": {
- "required": False,
- "choices": ['none', 'smis', 'vvol', 'openstack', 'openstackv2'],
- "type": "str"
- },
- "expiry_after": {
- "required": False,
- "type": "int"
- },
- "force": {
- "required": False,
- "type": "bool"
- }
- }
- default_fields = utils.basic_auth_arg_fields()
- fields.update(default_fields)
- required_if = [('state', 'create', ['volume'])]
-
- module = AnsibleModule(argument_spec=fields, required_if=required_if)
- if client is None:
- module.fail_json(msg='Python nimble-sdk could not be found.')
-
- hostname = module.params["host"]
- username = module.params["username"]
- password = module.params["password"]
- state = module.params["state"]
- snapshot_name = module.params["name"]
- change_name = module.params["change_name"]
- description = module.params["description"]
- vol_name = module.params["volume"]
- online = module.params["online"]
- writable = module.params["writable"]
- app_uuid = module.params["app_uuid"]
- metadata = module.params["metadata"]
- agent_type = module.params["agent_type"]
- expiry_after = module.params["expiry_after"]
- force = module.params["force"]
-
- if (username is None or password is None or hostname is None or snapshot_name is None):
- module.fail_json(
- msg="Storage system IP or username or password is null or snapshot name is null.")
-
- # defaults
- return_status = changed = False
- msg = "No task to run."
- resp = None
- try:
- client_obj = client.NimOSClient(
- hostname,
- username,
- password,
- f"HPE Nimble Ansible Modules v{NIMBLE_ANSIBLE_VERSION}"
- )
-
- # States
- if state == "create" or state == "present":
- snap_resp = client_obj.snapshots.get(id=None, vol_name=vol_name, name=snapshot_name)
- if utils.is_null_or_empty(snap_resp) or state == "create":
- return_status, changed, msg, changed_attrs_dict, resp = create_snapshot(
- client_obj,
- vol_name,
- snapshot_name,
- description=description,
- online=online,
- writable=writable,
- app_uuid=app_uuid,
- metadata=metadata,
- agent_type=agent_type)
- else:
- # update op
- return_status, changed, msg, changed_attrs_dict, resp = update_snapshot(
- client_obj,
- snap_resp,
- name=change_name,
- description=description,
- online=online,
- expiry_after=expiry_after,
- app_uuid=app_uuid,
- metadata=metadata,
- force=force)
-
- elif state == "absent":
- return_status, changed, msg, changed_attrs_dict = delete_snapshot(
- client_obj,
- vol_name,
- snapshot_name)
-
- except Exception as ex:
- # failed for some reason.
- msg = str(ex)
-
- if return_status:
- if utils.is_null_or_empty(resp):
- module.exit_json(return_status=return_status, changed=changed, msg=msg)
- else:
- module.exit_json(return_status=return_status, changed=changed, msg=msg, attrs=resp)
- else:
- module.fail_json(return_status=return_status, changed=changed, msg=msg)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_snapshot_collection.py b/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_snapshot_collection.py
deleted file mode 100644
index ed8e743e6..000000000
--- a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_snapshot_collection.py
+++ /dev/null
@@ -1,403 +0,0 @@
-#!/usr/bin/python
-
-# Copyright 2020 Hewlett Packard Enterprise Development LP
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
-# file except in compliance with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software distributed
-# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-# OF ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
-
-# author Alok Ranjan (alok.ranjan2@hpe.com)
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-DOCUMENTATION = r'''
----
-author:
- - HPE Nimble Storage Ansible Team (@ar-india) <nimble-dcs-storage-automation-eng@hpe.com>
-description: Manage the snapshot collections on an HPE Nimble Storage group.
-module: hpe_nimble_snapshot_collection
-options:
- agent_type:
- required: False
- type: str
- description:
- - External management agent type for snapshots being created as part of snapshot collection.
- allow_writes:
- required: False
- type: bool
- description:
- - Allow applications to write to created snapshot(s). Mandatory and must be set to 'true' for VSS application synchronized snapshots.
- change_name:
- required: False
- type: str
- description:
- - Change name of the existing snapshot collection.
- description:
- required: False
- type: str
- description:
- - Text description of snapshot collection.
- disable_appsync:
- required: False
- type: bool
- description:
- - Do not perform application synchronization for this snapshot. Create a crash-consistent snapshot instead.
- expiry_after:
- required: False
- type: int
- description:
- - Number of seconds after which this snapcoll is considered expired by the snapshot TTL. A value of 0 indicates that the snapshot
- never expires, 1 indicates that the snapshot uses a group-level configured TTL value and any other value indicates the number of seconds.
- force:
- required: False
- type: bool
- description:
- - Forcibly delete the specified snapshot collection even if it is the last replicated snapshot. Doing so could lead to full re-seeding at the
- next replication.
- invoke_on_upstream_partner:
- required: False
- type: bool
- description:
- - Invoke snapshot request on upstream partner. This operation is not supported for synchronous replication volume collections.
- is_external_trigger:
- required: False
- type: bool
- description:
- - Is externally triggered.
- metadata:
- required: False
- type: dict
- description:
- - Key-value pairs that augment a snapshot collection attributes. List of key-value pairs. Keys must be unique and non-empty.
- name:
- required: True
- type: str
- description:
- - Name of the snapshot collection.
- replicate_to:
- required: False
- type: str
- description:
- - Specifies the partner name that the snapshots in this snapshot collection are replicated to.
- skip_db_consistency_check:
- required: False
- type: bool
- description:
- - Skip consistency check for database files on this snapshot. This option only applies to volume collections with application
- synchronization set to VSS, application ID set to MS Exchange 2010 or later with Database Availability Group (DAG), snap_verify option
- set to true, and disable_appsync option set to false.
- snap_verify:
- required: False
- type: bool
- description:
- - Run verification tool on this snapshot. This option can only be used with a volume collection that has application synchronization.
- start_online:
- required: False
- type: bool
- description:
- - Start with snapshot set online.
- state:
- required: True
- choices:
- - present
- - absent
- - create
- type: str
- description:
- - The snapshot collection operation.
- vol_snap_attr_list:
- required: False
- type: list
- elements: dict
- description:
- - List of snapshot attributes for snapshots being created as part of snapshot collection creation. List of volumes with per snapshot attributes.
- volcoll:
- required: True
- type: str
- description:
- - Parent volume collection name.
-extends_documentation_fragment: hpe.nimble.hpe_nimble
-short_description: Manage the HPE Nimble Storage snapshot collections
-version_added: "1.0.0"
-notes:
- - This module does not support C(check_mode).
-'''
-
-EXAMPLES = r'''
-
-# if state is create , then create a snapshot collection if not present. Fails if already present.
-# if state is present, then create a snapshot collection if not present. Succeeds if it already exists
-- name: Create snapshot collection if not present
- hpe.nimble.hpe_nimble_snapshot_collection:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- state: "{{ state | default('present') }}"
- name: "{{ name | mandatory}}"
- volcoll: "{{ volcoll | mandatory}}"
- description: "{{ description }}"
-
-- name: Delete snapshot collection (must be offline)
- hpe.nimble.hpe_nimble_snapshot_collection:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- volcoll: "{{ volcoll }}"
- state: absent
-
-'''
-RETURN = r'''
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-try:
- from nimbleclient.v1 import client
-except ImportError:
- client = None
-from ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble import __version__ as NIMBLE_ANSIBLE_VERSION
-import ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble as utils
-
-
-def create_snapcoll(
- client_obj,
- snapcoll_name,
- volcoll_name,
- **kwargs):
-
- if utils.is_null_or_empty(snapcoll_name):
- return (False, False, "Create snapshot collection failed. snapshot collection name is not present.", {}, {})
- try:
- snapcoll_resp = client_obj.snapshot_collections.get(id=None, name=snapcoll_name, volcoll_name=volcoll_name)
- if utils.is_null_or_empty(snapcoll_resp):
- params = utils.remove_null_args(**kwargs)
- snapcoll_resp = client_obj.snapshot_collections.create(name=snapcoll_name, **params)
- return (True, True, f"Created snapshot collection '{snapcoll_name}' for volume collection '{volcoll_name}' successfully.", {}, snapcoll_resp.attrs)
- else:
- return (False, False, f"Snapshot collection '{snapcoll_name}' for volume collection '{volcoll_name}' cannot be created"
- "as it is already present in given state.", {}, snapcoll_resp.attrs)
- except Exception as ex:
- return (False, False, f"Snapshot collection creation failed | {ex}", {}, {})
-
-
-def update_snapcoll(
- client_obj,
- snapcoll_resp,
- **kwargs):
-
- if utils.is_null_or_empty(snapcoll_resp):
- return (False, False, "Update snapshot collection failed as snapshot collection is not present.", {}, {})
- try:
- snapcoll_name = snapcoll_resp.attrs.get("name")
- changed_attrs_dict, params = utils.remove_unchanged_or_null_args(snapcoll_resp, **kwargs)
- if changed_attrs_dict.__len__() > 0:
- snapcoll_resp = client_obj.snapshot_collections.update(id=snapcoll_resp.attrs.get("id"), **params)
- return (True, True, f"Snapshot collection '{snapcoll_name}' already present. Modified the following attributes '{changed_attrs_dict}'",
- changed_attrs_dict, snapcoll_resp.attrs)
- else:
- return (True, False, f"Snapshot collection '{snapcoll_name}' already present in given state.", {}, snapcoll_resp.attrs)
- except Exception as ex:
- return (False, False, f"Snapshot collection update failed | {ex}", {}, {})
-
-
-def delete_snapcoll(client_obj, snapcoll_name, volcoll_name):
-
- if utils.is_null_or_empty(snapcoll_name):
- return (False, False, "Snapshot collection deletion failed as snapshot collection name is not present.", {})
-
- try:
- snapcoll_resp = client_obj.snapshot_collections.get(id=None, name=snapcoll_name, volcoll_name=volcoll_name)
- if utils.is_null_or_empty(snapcoll_resp):
- return (False, False, f"Snapshot collection '{snapcoll_name}' for volume collection '{volcoll_name}' not present to delete.", {})
- else:
- client_obj.snapshot_collections.delete(id=snapcoll_resp.attrs.get("id"))
- return (True, True, f"Snapshot collection '{snapcoll_name}' for volume collection '{volcoll_name}' deleted successfully.", {})
- except Exception as ex:
- return (False, False, f"Snapshot collection deletion failed | {ex}", {})
-
-
-def main():
-
- fields = {
- "state": {
- "required": True,
- "choices": ['present',
- 'absent',
- 'create'
- ],
- "type": "str"
- },
- "change_name": {
- "required": False,
- "type": "str"
- },
- "name": {
- "required": True,
- "type": "str"
- },
- "description": {
- "required": False,
- "type": "str"
- },
- "volcoll": {
- "required": True,
- "type": "str"
- },
- "is_external_trigger": {
- "required": False,
- "type": "bool"
- },
- "vol_snap_attr_list": {
- "required": False,
- "type": "list",
- "elements": 'dict'
- },
- "replicate_to": {
- "required": False,
- "type": "str"
- },
- "start_online": {
- "required": False,
- "type": "bool"
- },
- "allow_writes": {
- "required": False,
- "type": "bool"
- },
- "disable_appsync": {
- "required": False,
- "type": "bool"
- },
- "snap_verify": {
- "required": False,
- "type": "bool"
- },
- "skip_db_consistency_check": {
- "required": False,
- "type": "bool"
- },
- "invoke_on_upstream_partner": {
- "required": False,
- "type": "bool"
- },
- "agent_type": {
- "required": False,
- "type": "str"
- },
- "metadata": {
- "required": False,
- "type": "dict"
- },
- "expiry_after": {
- "required": False,
- "type": "int"
- },
- "force": {
- "required": False,
- "type": "bool"
- }
- }
- default_fields = utils.basic_auth_arg_fields()
- fields.update(default_fields)
-
- module = AnsibleModule(argument_spec=fields)
- if client is None:
- module.fail_json(msg='Python nimble-sdk could not be found.')
-
- hostname = module.params["host"]
- username = module.params["username"]
- password = module.params["password"]
- state = module.params["state"]
- snapcoll_name = module.params["name"]
- change_name = module.params["change_name"]
- description = module.params["description"]
- volcoll = module.params["volcoll"]
- is_external_trigger = module.params["is_external_trigger"]
- vol_snap_attr_list = module.params["vol_snap_attr_list"]
- replicate_to = module.params["replicate_to"]
- start_online = module.params["start_online"]
- allow_writes = module.params["allow_writes"]
- disable_appsync = module.params["disable_appsync"]
- snap_verify = module.params["snap_verify"]
- skip_db_consistency_check = module.params["skip_db_consistency_check"]
- invoke_on_upstream_partner = module.params["invoke_on_upstream_partner"]
- agent_type = module.params["agent_type"]
- metadata = module.params["metadata"]
- expiry_after = module.params["expiry_after"]
- force = module.params["force"]
-
- if (username is None or password is None or hostname is None or snapcoll_name is None):
- module.fail_json(
- msg="Missing variables: hostname, username, password and snapshot collection name is mandatory.")
-
- # defaults
- return_status = changed = False
- msg = "No task to run."
- resp = None
- try:
- client_obj = client.NimOSClient(
- hostname,
- username,
- password,
- f"HPE Nimble Ansible Modules v{NIMBLE_ANSIBLE_VERSION}"
- )
-
- # States
- if state == "create" or state == "present":
- snapcoll_resp = client_obj.snapshot_collections.get(id=None, name=snapcoll_name, volcoll_name=volcoll)
- if utils.is_null_or_empty(snapcoll_resp) or state == "create":
- return_status, changed, msg, changed_attrs_dict, resp = create_snapcoll(
- client_obj,
- snapcoll_name,
- volcoll,
- description=description,
- volcoll_id=utils.get_volcoll_id(client_obj, volcoll),
- is_external_trigger=is_external_trigger,
- vol_snap_attr_list=vol_snap_attr_list,
- replicate_to=replicate_to,
- start_online=start_online,
- allow_writes=allow_writes,
- disable_appsync=disable_appsync,
- snap_verify=snap_verify,
- skip_db_consistency_check=skip_db_consistency_check,
- invoke_on_upstream_partner=invoke_on_upstream_partner,
- agent_type=agent_type,
- metadata=metadata)
- else:
- # update op
- return_status, changed, msg, changed_attrs_dict, resp = update_snapcoll(
- client_obj,
- snapcoll_resp,
- name=change_name,
- description=description,
- replicate_to=replicate_to,
- expiry_after=expiry_after,
- metadata=metadata,
- force=force)
-
- elif state == "absent":
- return_status, changed, msg, changed_attrs_dict = delete_snapcoll(client_obj,
- snapcoll_name,
- volcoll)
- except Exception as ex:
- # failed for some reason.
- msg = str(ex)
-
- if return_status:
- if utils.is_null_or_empty(resp):
- module.exit_json(return_status=return_status, changed=changed, msg=msg)
- else:
- module.exit_json(return_status=return_status, changed=changed, msg=msg, attrs=resp)
- else:
- module.fail_json(return_status=return_status, changed=changed, msg=msg)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_user.py b/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_user.py
deleted file mode 100644
index 8deb733c6..000000000
--- a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_user.py
+++ /dev/null
@@ -1,381 +0,0 @@
-#!/usr/bin/python
-
-# # Copyright 2020 Hewlett Packard Enterprise Development LP
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
-# file except in compliance with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software distributed
-# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-# OF ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
-
-# author Alok Ranjan (alok.ranjan2@hpe.com)
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-DOCUMENTATION = r'''
----
-author:
- - HPE Nimble Storage Ansible Team (@ar-india) <nimble-dcs-storage-automation-eng@hpe.com>
-description: Manage the users on an HPE Nimble Storage group.
-module: hpe_nimble_user
-options:
- auth_password:
- required: False
- type: str
- description:
- - Authorization password for changing password.
- change_name:
- required: False
- type: str
- description:
- - Change name of the existing user.
- description:
- required: False
- type: str
- description:
- - Description of the user.
- disabled:
- required: False
- type: bool
- description:
- - User is currently disabled.
- email_addr:
- required: False
- type: str
- description:
- - Email address of the user.
- full_name:
- required: False
- type: str
- description:
- - Fully qualified name of the user.
- inactivity_timeout:
- required: False
- type: int
- default: 0
- description:
- - The amount of time that the user session is inactive before timing out. A value of 0 indicates that the timeout is taken from the group setting.
- name:
- required: True
- type: str
- description:
- - Name of the user.
- user_password:
- required: False
- type: str
- description:
- - User's login password.
- role:
- required: False
- choices:
- - administrator
- - poweruser
- - operator
- - guest
- type: str
- description:
- - Role of the user. Default is 'guest'.
- state:
- required: True
- choices:
- - create
- - present
- - absent
- type: str
- description:
- - The user operation.
- unlock:
- required: False
- type: bool
- description:
- - Unlock the user.
-extends_documentation_fragment: hpe.nimble.hpe_nimble
-short_description: Manage the HPE Nimble Storage users
-version_added: "1.0.0"
-notes:
- - This module does not support C(check_mode).
-'''
-
-EXAMPLES = r'''
-
-# if state is create, then create user, fails if it exist or cannot create
-# if state is present, then create user if not present, else success
-- name: Create user
- hpe.nimble.hpe_nimble_user:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- description: "{{ description }}"
- state: "{{ state | default('present') }}"
-
-- name: Delete user
- hpe.nimble.hpe_nimble_user:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- state: "absent"
-
-- name: Unlock user
- hpe.nimble.hpe_nimble_user:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- state: "present"
- unlock: true
-
-'''
-RETURN = r'''
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-try:
- from nimbleclient.v1 import client
-except ImportError:
- client = None
-from ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble import __version__ as NIMBLE_ANSIBLE_VERSION
-import ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble as utils
-
-
-def create_user(
- client_obj,
- user_name,
- password,
- **kwargs):
-
- if utils.is_null_or_empty(user_name):
- return (False, False, "Create user failed as user is not present.", {}, {})
- if utils.is_null_or_empty(password):
- return (False, False, "Create user failed as password is not present.", {}, {})
-
- try:
- user_resp = client_obj.users.get(id=None, name=user_name)
- if utils.is_null_or_empty(user_resp):
- params = utils.remove_null_args(**kwargs)
- user_resp = client_obj.users.create(name=user_name, password=password, **params)
- return (True, True, f"User '{user_name}' created successfully.", {}, user_resp.attrs)
- else:
- return (False, False, f"User '{user_name}' cannot be created as it is already present in given state.", {}, {})
- except Exception as ex:
- return (False, False, f"User creation failed | {ex}", {}, {})
-
-
-def update_user(
- client_obj,
- user_name,
- **kwargs):
-
- if utils.is_null_or_empty(user_name):
- return (False, False, "Update user failed as user is not present.", {}, {})
-
- try:
- user_resp = client_obj.users.get(id=None, name=user_name)
- if utils.is_null_or_empty(user_resp):
- return (False, False, f"User '{user_name}' cannot be updated as it is not present.", {}, {})
-
- changed_attrs_dict, params = utils.remove_unchanged_or_null_args(user_resp, **kwargs)
- if changed_attrs_dict.__len__() > 0:
- user_resp = client_obj.users.update(id=user_resp.attrs.get("id"), **params)
- return (True, True, f"User '{user_name}' already present. Modified the following attributes '{changed_attrs_dict}'",
- changed_attrs_dict, user_resp.attrs)
- else:
- return (True, False, f"User '{user_resp.attrs.get('name')}' already present in given state.", {}, user_resp.attrs)
- except Exception as ex:
- return (False, False, f"User update failed | {ex}", {}, {})
-
-
-def delete_user(
- client_obj,
- user_name):
-
- if utils.is_null_or_empty(user_name):
- return (False, False, "Delete user failed as user is not present.", {})
-
- try:
- user_resp = client_obj.users.get(id=None, name=user_name)
- if utils.is_null_or_empty(user_resp):
- return (False, False, f"User '{user_name}' cannot be deleted as it is not present.", {})
-
- client_obj.users.delete(id=user_resp.attrs.get("id"))
- return (True, True, f"Deleted user '{user_name}' successfully.", {})
- except Exception as ex:
- return (False, False, f"Delete user failed | {ex}", {})
-
-
-def unlock_user(
- client_obj,
- user_name):
-
- if utils.is_null_or_empty(user_name):
- return (False, False, "Unlock user failed as user name is not present.", {})
-
- try:
- user_resp = client_obj.users.get(id=None, name=user_name)
- if utils.is_null_or_empty(user_resp):
- return (False, False, f"User '{user_name}' cannot be unlocked as it is not present.", {})
-
- client_obj.users.unlock(id=user_resp.attrs.get("id"))
- return (True, True, f"Unlocked user '{user_name}' successfully.", {})
- except Exception as ex:
- return (False, False, f"Unlock user failed | {ex}", {})
-
-
-def main():
-
- fields = {
- "state": {
- "required": True,
- "choices": ['create',
- 'present',
- 'absent'
- ],
- "type": "str"
- },
- "change_name": {
- "required": False,
- "type": "str"
- },
- "name": {
- "required": True,
- "type": "str"
- },
- "description": {
- "required": False,
- "type": "str"
- },
- "role": {
- "required": False,
- "choices": ['administrator',
- 'poweruser',
- 'operator',
- 'guest'
- ],
- "type": "str"
- },
- "user_password": {
- "required": False,
- "type": "str",
- "no_log": True
- },
- "inactivity_timeout": {
- "required": False,
- "type": "int"
- },
- "full_name": {
- "required": False,
- "type": "str"
- },
- "email_addr": {
- "required": False,
- "type": "str"
- },
- "disabled": {
- "required": False,
- "type": "bool"
- },
- "auth_password": {
- "required": False,
- "type": "str",
- "no_log": True
- },
- "unlock": {
- "required": False,
- "type": "bool"
- }
- }
- default_fields = utils.basic_auth_arg_fields()
- fields.update(default_fields)
- required_if = [('state', 'create', ['user_password'])]
-
- module = AnsibleModule(argument_spec=fields, required_if=required_if)
- if client is None:
- module.fail_json(msg='Python nimble-sdk could not be found.')
-
- hostname = module.params["host"]
- username = module.params["username"]
- password = module.params["password"]
- state = module.params["state"]
- user_name = module.params["name"]
- change_name = module.params["change_name"]
- description = module.params["description"]
- role = module.params["role"]
- user_password = module.params["user_password"]
- inactivity_timeout = module.params["inactivity_timeout"]
- full_name = module.params["full_name"]
- email_addr = module.params["email_addr"]
- disabled = module.params["disabled"]
- auth_password = module.params["auth_password"]
- unlock = module.params["unlock"]
-
- if (username is None or password is None or hostname is None):
- module.fail_json(
- msg="Missing variables: hostname, username and password is mandatory.")
-
- # defaults
- return_status = changed = False
- msg = "No task to run."
- resp = None
- try:
- client_obj = client.NimOSClient(
- hostname,
- username,
- password,
- f"HPE Nimble Ansible Modules v{NIMBLE_ANSIBLE_VERSION}"
- )
-
- # States
- if ((unlock is None or unlock is False) and (state == "create" or state == "present")):
- if not client_obj.users.get(id=None, name=user_name) or state == "create":
- return_status, changed, msg, changed_attrs_dict, resp = create_user(
- client_obj,
- user_name,
- user_password,
- description=description,
- role=role,
- inactivity_timeout=inactivity_timeout,
- full_name=full_name,
- email_addr=email_addr,
- disabled=disabled)
- else:
- # update op
- return_status, changed, msg, changed_attrs_dict, resp = update_user(
- client_obj,
- user_name,
- name=change_name,
- password=user_password,
- description=description,
- role=role,
- inactivity_timeout=inactivity_timeout,
- full_name=full_name,
- email_addr=email_addr,
- disabled=disabled,
- auth_password=auth_password)
-
- elif state == "absent":
- return_status, changed, msg, changed_attrs_dict = delete_user(client_obj, user_name)
-
- elif state == "present" and unlock is True:
- return_status, changed, msg, changed_attrs_dict = unlock_user(client_obj, user_name)
-
- except Exception as ex:
- # failed for some reason.
- msg = str(ex)
-
- if return_status:
- if utils.is_null_or_empty(resp):
- module.exit_json(return_status=return_status, changed=changed, msg=msg)
- else:
- module.exit_json(return_status=return_status, changed=changed, msg=msg, attrs=resp)
- else:
- module.fail_json(return_status=return_status, changed=changed, msg=msg)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_user_policy.py b/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_user_policy.py
deleted file mode 100644
index a81b20928..000000000
--- a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_user_policy.py
+++ /dev/null
@@ -1,241 +0,0 @@
-#!/usr/bin/python
-
-# Copyright 2020 Hewlett Packard Enterprise Development LP
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
-# file except in compliance with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software distributed
-# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-# OF ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
-
-# author Alok Ranjan (alok.ranjan2@hpe.com)
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-DOCUMENTATION = r'''
----
-author:
- - HPE Nimble Storage Ansible Team (@ar-india) <nimble-dcs-storage-automation-eng@hpe.com>
-description: Manage the user policies on an HPE Nimble Storage group.
-module: hpe_nimble_user_policy
-options:
- allowed_attempts:
- required: False
- type: int
- description:
- - Number of authentication attempts allowed before the user account is locked. Allowed range is [1, 10] inclusive. '0' indicates no limit.
- digit:
- required: False
- type: int
- description:
- - Number of numerical characters required in user passwords. Allowed range is [0, 255] inclusive.
- lower:
- required: False
- type: int
- description:
- - Number of lowercase characters required in user passwords. Allowed range is [0, 255] inclusive.
- max_sessions:
- required: False
- type: int
- description:
- - Maximum number of sessions allowed for a group. Allowed range is [10, 1000] inclusive.
- min_length:
- required: False
- type: int
- description:
- - Minimum length for user passwords. Allowed range is [8, 255] inclusive.
- no_reuse:
- required: False
- type: int
- description:
- - Number of times that a password must change before you can reuse a previous password. Allowed range is [1,20] inclusive.
- previous_diff:
- required: False
- type: int
- description:
- - Number of characters that must be different from the previous password. Allowed range is [1, 255] inclusive.
- special:
- required: False
- type: int
- description:
- - Number of special characters required in user passwords. Allowed range is [0, 255] inclusive.
- state:
- required: True
- choices:
- - present
- type: str
- description:
- - The user policy operation.
- upper:
- required: False
- type: int
- description:
- - Number of uppercase characters required in user passwords. Allowed range is [0, 255] inclusive.
-extends_documentation_fragment: hpe.nimble.hpe_nimble
-short_description: Manage the HPE Nimble Storage user policies
-version_added: "1.0.0"
-notes:
- - This module does not support C(check_mode).
-'''
-
-EXAMPLES = r'''
-
-- name: Update user policy
- hpe.nimble.hpe_nimble_user_policy:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- upper: "{{ upper }}"
- allowed_attempts: 2
- min_length: 10
- state: "present"
-
-'''
-RETURN = r'''
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-try:
- from nimbleclient.v1 import client
-except ImportError:
- client = None
-from ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble import __version__ as NIMBLE_ANSIBLE_VERSION
-import ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble as utils
-
-
-def update_user_policy(
- client_obj,
- **kwargs):
-
- try:
- user_resp = client_obj.user_policies.get()
- if utils.is_null_or_empty(user_resp):
- return (False, False, "User policy is not present on Array", {}, {})
-
- changed_attrs_dict, params = utils.remove_unchanged_or_null_args(user_resp, **kwargs)
- if changed_attrs_dict.__len__() > 0:
- user_resp = client_obj.user_policies.update(id=user_resp.attrs.get("id"), **params)
- return (True, True, f"Updated user policy successfully with following attributes '{changed_attrs_dict}'.", changed_attrs_dict, user_resp.attrs)
- else:
- return (True, False, "User Policy already present in given state.", {}, user_resp.attrs)
- except Exception as ex:
- return (False, False, f"User Policy Update failed | {ex}", {}, {})
-
-
-def main():
-
- fields = {
- "state": {
- "required": True,
- "choices": ['present'
- ],
- "type": 'str'
- },
- "allowed_attempts": {
- "required": False,
- "type": "int"
- },
- "min_length": {
- "required": False,
- "type": "int"
- },
- "upper": {
- "required": False,
- "type": "int"
- },
- "lower": {
- "required": False,
- "type": "int"
- },
- "digit": {
- "required": False,
- "type": "int"
- },
- "special": {
- "required": False,
- "type": "int"
- },
- "previous_diff": {
- "required": False,
- "type": "int"
- },
- "no_reuse": {
- "required": False,
- "type": "int"
- },
- "max_sessions": {
- "required": False,
- "type": "int"
- }
- }
- default_fields = utils.basic_auth_arg_fields()
- fields.update(default_fields)
- module = AnsibleModule(argument_spec=fields)
- if client is None:
- module.fail_json(msg='the python nimble_sdk module is required')
-
- hostname = module.params["host"]
- username = module.params["username"]
- password = module.params["password"]
- state = module.params["state"]
- allowed_attempts = module.params["allowed_attempts"]
- min_length = module.params["min_length"]
- upper = module.params["upper"]
- lower = module.params["lower"]
- digit = module.params["digit"]
- special = module.params["special"]
- previous_diff = module.params["previous_diff"]
- no_reuse = module.params["no_reuse"]
- max_sessions = module.params["max_sessions"]
-
- if (username is None or password is None or hostname is None):
- module.fail_json(
- msg="Storage system IP or username or password is null")
- # defaults
- return_status = changed = False
- msg = "No task to run."
- resp = None
-
- try:
- client_obj = client.NimOSClient(
- hostname,
- username,
- password,
- f"HPE Nimble Ansible Modules v{NIMBLE_ANSIBLE_VERSION}"
- )
-
- # States
- if state == "present":
- return_status, changed, msg, changed_attrs_dict, resp = update_user_policy(
- client_obj,
- allowed_attempts=allowed_attempts,
- min_length=min_length,
- upper=upper,
- lower=lower,
- digit=digit,
- special=special,
- previous_diff=previous_diff,
- no_reuse=no_reuse,
- max_sessions=max_sessions)
-
- except Exception as ex:
- # failed for some reason.
- msg = str(ex)
-
- if return_status:
- if utils.is_null_or_empty(resp):
- module.exit_json(return_status=return_status, changed=changed, msg=msg)
- else:
- module.exit_json(return_status=return_status, changed=changed, msg=msg, attrs=resp)
- else:
- module.fail_json(return_status=return_status, changed=changed, msg=msg)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_volume.py b/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_volume.py
deleted file mode 100644
index 87d76ec25..000000000
--- a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_volume.py
+++ /dev/null
@@ -1,843 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# Copyright 2020 Hewlett Packard Enterprise Development LP
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
-# file except in compliance with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software distributed
-# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-# OF ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
-
-# author Alok Ranjan (alok.ranjan2@hpe.com)
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-DOCUMENTATION = r'''
----
-author:
- - HPE Nimble Storage Ansible Team (@ar-india) <nimble-dcs-storage-automation-eng@hpe.com>
-description: Manage the volumes on an HPE Nimble Storage group.
-module: hpe_nimble_volume
-options:
- agent_type:
- required: False
- choices:
- - none
- - smis
- - vvol
- - openstack
- - openstackv2
- type: str
- description:
- - External management agent type.
- app_uuid:
- required: False
- type: str
- description:
- - Application identifier of volume.
- block_size:
- required: False
- type: int
- description:
- - Size in bytes of blocks in the volume.
- cache_pinned:
- required: False
- type: bool
- description:
- - If set to true, all the contents of this volume are kept in flash cache.
- caching:
- required: False
- type: bool
- description:
- - Indicate caching the volume is enabled.
- change_name:
- required: False
- type: str
- description:
- - Change name of the existing source volume.
- clone:
- required: False
- type: bool
- description:
- - Whether this volume is a clone. Use this attribute in combination with name and snapshot to create a clone by setting clone = true.
- dedupe:
- required: False
- type: bool
- description:
- - Indicate whether dedupe is enabled.
- description:
- required: False
- type: str
- default: null
- description:
- - Text description of volume.
- destination:
- required: False
- type: str
- description:
- - Name of the destination pool where the volume is moving to.
- encryption_cipher:
- required: False
- choices:
- - none
- - aes_256_xts
- type: str
- description:
- - The encryption cipher of the volume.
- folder:
- required: False
- type: str
- description:
- - Name of the folder holding this volume.
- force:
- required: False
- type: bool
- description:
- - Forcibly offline, reduce size or change read-only status a volume.
- force_vvol:
- required: False
- type: bool
- default: False
- description:
- - Forcibly move a virtual volume.
- iscsi_target_scope:
- required: False
- type: str
- choices:
- - volume
- - group
- description:
- - This indicates whether volume is exported under iSCSI Group Target or iSCSI volume target. This attribute is only meaningful to iSCSI system.
- limit:
- required: False
- type: int
- description:
- - Limit on the volume's mapped usage, expressed as a percentage of the volume's size.
- limit_iops:
- required: False
- type: int
- description:
- - IOPS limit for this volume.
- limit_mbps:
- required: False
- type: int
- description:
- - Throughput limit for this volume in MB/s.
- metadata:
- required: False
- type: dict
- description:
- - User defined key-value pairs that augment an volume's attributes. List of key-value pairs. Keys must be unique and non-empty.
- When creating an object, values must be non-empty. When updating an object, an empty value causes the corresponding key to be removed.
- move:
- required: False
- type: bool
- description:
- - Move a volume to different pool.
- multi_initiator:
- required: False
- type: bool
- description:
- - For iSCSI volume target, this flag indicates whether the volume and its snapshots can be accessed from multiple initiators at the same time.
- name:
- required: True
- type: str
- description:
- - Name of the source volume.
- online:
- required: False
- type: bool
- description:
- - Online state of volume, available for host initiators to establish connections.
- owned_by_group:
- required: False
- type: str
- description:
- - Name of group that currently owns the volume.
- parent:
- required: False
- type: str
- description:
- - Name of parent volume.
- perf_policy:
- required: False
- type: str
- default: null
- description:
- - Name of the performance policy. After creating a volume, performance policy for the volume can only be
- changed to another performance policy with same block size.
- pool:
- required: False
- type: str
- description:
- - Name associated with the pool in the storage pool table.
- read_only:
- required: False
- type: bool
- description:
- - Volume is read-only.
- size:
- type: int
- description:
- - Volume size in megabytes. Size is required for creating a volume but not for cloning an existing volume.
- snapshot:
- required: False
- type: str
- description:
- - Base snapshot name. This attribute is required together with name and clone when cloning a volume with the create operation.
- state:
- description:
- - The volume operations.
- choices:
- - present
- - absent
- - create
- - restore
- required: True
- type: str
- thinly_provisioned:
- required: False
- type: bool
- description:
- - Set volume's provisioning level to thin.
- volcoll:
- required: False
- type: str
- description:
- - Name of volume collection of which this volume is a member. Use this attribute in update operation to associate or dissociate volumes with or from
- volume collections. When associating, set this attribute to the name of the volume collection. When dissociating, set this attribute to empty string.
-extends_documentation_fragment: hpe.nimble.hpe_nimble
-short_description: Manage the HPE Nimble Storage volumes
-version_added: "1.0.0"
-notes:
- - This module does not support C(check_mode).
-'''
-
-EXAMPLES = r'''
-
-# If state is "create", then create a volume if not present. Fails if already present.
-# if state is present, then create a volume if not present. Succeeds if it already exists.
-- name: Create volume if not present
- hpe.nimble.hpe_nimble_volume:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- state: "{{ state | default('present') }}"
- size: "{{ size }}"
- limit_iops: "{{ limit_iops }}"
- limit_mbps: 5000
- force: false
- metadata: "{{ metadata }}" # metadata = {'mykey1': 'myval1', 'mykey2': 'myval2'}
- description: "{{ description }}"
- name: "{{ name }}"
-
-- name: Changing volume "{{ name }}" to offline state
- hpe.nimble.hpe_nimble_volume:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- online: False
- state: present
- name: "{{ name }}"
-
-- name: Changing volume "{{ name }}" to online state
- hpe.nimble.hpe_nimble_volume:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- online: True
- state: present
- name: "{{ name }}"
-
-# Create a clone from the given snapshot name.
-# If snapshot name is not provided then a snapshot is created on the source volume.
-# Clone task only run if "parent" is specified. Snapshot is optional.
-- name: Create or Refresh a clone
- hpe.nimble.hpe_nimble_volume:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}" # name here is the name of cloned volume
- parent: "{{ parent | mandatory }}"
- snapshot: "{{ snapshot | default(None)}}"
- state: "{{ state | default('present') }}"
- when:
- - parent is defined
-
-- name: Destroy volume (must be offline)
- hpe.nimble.hpe_nimble_volume:
- name: "{{ name }}"
- state: absent
-
-# If no snapshot is given, then restore volume to last snapshot. Fails if no snapshots exist.
-# If snapshot is provided, then restore volume from specified snapshot.
-- name: Restore volume "{{ name }}"
- hpe.nimble.hpe_nimble_volume:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- snapshot: "{{ snapshot | default(None)}}"
- state: restore
-
-- name: Delete volume "{{ name }}" (must be offline)
- hpe.nimble.hpe_nimble_volume:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- state: absent
-
-- name: Move volume to pool
- hpe.nimble.hpe_nimble_volume:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- move: true
- name: "{{ name }}"
- state: present
- destination: "{{ destination | mandatory }}"
-
-'''
-RETURN = r'''
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-try:
- from nimbleclient.v1 import client
- from nimbleclient import exceptions
-except ImportError:
- client = None
-from ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble import __version__ as NIMBLE_ANSIBLE_VERSION
-# from hpe_nimble import __version__ as NIMBLE_ANSIBLE_VERSION
-import ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble as utils
-from enum import Enum
-
-
-class Vol_Operation(Enum):
- SUCCESS = 0
- ALREADY_EXISTS = -1
- FAILED = 1
-
-# util functions
-
-
-def move_volume(
- client_obj,
- vol_name,
- dest_pool,
- force_vvol):
-
- if utils.is_null_or_empty(vol_name):
- return (False, False, "Volume move failed as volume name is null.", {}, {})
-
- if utils.is_null_or_empty(dest_pool):
- return (False, False, "Volume move failed as destination pool is null.", {}, {})
- try:
- vol_resp = client_obj.volumes.get(id=None, name=vol_name)
- if utils.is_null_or_empty(vol_resp):
- return (False, False, f"Volume '{vol_name}' not present to move.", {}, {})
-
- resp = client_obj.volumes.move(id=vol_resp.attrs.get("id"), dest_pool_id=utils.get_pool_id(client_obj, dest_pool), force_vvol=force_vvol)
- return (True, True, f"Volume '{vol_resp.attrs.get('name')}' moved successfully.", {}, resp)
- except Exception as ex:
- return (False, False, f"Volume move failed | '{ex}'", {}, {})
-
-
-def update_volume(
- client_obj,
- vol_resp,
- **kwargs):
-
- if utils.is_null_or_empty(vol_resp):
- return (False, False, "Invalid volume to update.", {}, {})
- try:
- changed_attrs_dict, params = utils.remove_unchanged_or_null_args(vol_resp, **kwargs)
-
- if 'volcoll_name' in kwargs:
- if kwargs['volcoll_name'] == "" and vol_resp.attrs.get('volcoll_id') != "":
- params['volcoll_id'] = ""
- changed_attrs_dict['volcoll_id'] = ""
- else:
- if 'volcoll_name' in params:
- params.pop('volcoll_name')
- changed_attrs_dict.pop('volcoll_name')
-
- if changed_attrs_dict.__len__() > 0:
- resp = client_obj.volumes.update(id=vol_resp.attrs.get("id"), **params)
- return (True, True, f"Volume '{vol_resp.attrs.get('name')}' already present. Modified the following attributes '{changed_attrs_dict}'",
- changed_attrs_dict, resp.attrs)
- else:
- return (True, False, f"Volume '{vol_resp.attrs.get('name')}' already present in given state.", {}, vol_resp.attrs)
- except Exception as ex:
- return (False, False, f"Volume update failed '{ex}'", {}, {})
-
-
-def create_volume(
- client_obj,
- vol_name,
- **kwargs):
-
- if utils.is_null_or_empty(vol_name):
- return (False, False, "Volume creation failed as volume name is null.", {}, {})
-
- try:
- vol_resp = client_obj.volumes.get(id=None, name=vol_name)
- # remove unchanged and null arguments from kwargs
- params = utils.remove_null_args(**kwargs)
- if utils.is_null_or_empty(vol_resp):
- resp = client_obj.volumes.create(vol_name, **params)
- return (True, True, f"Created volume '{vol_name}' successfully.", {}, resp.attrs)
- else:
- return (False, False, f"Volume '{vol_name}' cannot be created as it is already present in given state.", {}, {})
- except Exception as ex:
- return (False, False, f"Volume creation failed '{ex}'", {}, {})
-
-
-def delete_volume(client_obj, vol_name):
- if utils.is_null_or_empty(vol_name):
- return (False, False, "Volume deletion failed as volume name is null.", {})
-
- try:
- vol_resp = client_obj.volumes.get(id=None, name=vol_name)
- if utils.is_null_or_empty(vol_resp):
- return (False, False, f"Volume '{vol_name}' not present to delete.", {})
- else:
- client_obj.volumes.delete(id=vol_resp.attrs.get("id"))
- return (True, True, f"Deleted volume '{vol_name}' successfully.", {})
- except Exception as ex:
- return (False, False, f"Volume deletion for {vol_name} failed '{ex}'", {})
-
-
-def restore_volume(client_obj, vol_name, snapshot_to_restore=None):
- if utils.is_null_or_empty(vol_name):
- return (False, False, "Volume restore failed as volume name is null.", {}, {})
- try:
- vol_resp = client_obj.volumes.get(id=None, name=vol_name)
- if utils.is_null_or_empty(vol_resp):
- return (False, False, f"Volume '{vol_name}' not present to restore.", {}, {})
-
- if utils.is_null_or_empty(snapshot_to_restore):
- # restore the volume to the last snapshot
- snap_list_resp = client_obj.snapshots.list(vol_name=vol_name)
- if utils.is_null_or_empty(snap_list_resp):
- return (False, False, f"Volume '{vol_name}' cannot be restored as no snapshot is present in source volume.", {}, {})
- snap_resp = snap_list_resp[-1]
- snapshot_to_restore = snap_resp.attrs.get("name")
- else:
- # get the snapshot detail from the given source vol
- snap_resp = client_obj.snapshots.get(vol_name=vol_name, name=snapshot_to_restore)
- if utils.is_null_or_empty(snap_resp):
- return (False, False, f"Volume '{vol_name}' cannot not be restored as given snapshot name '{snapshot_to_restore}' is not present in"
- "source volume.", {}, {})
-
- # offline and restore
- client_obj.volumes.offline(id=vol_resp.attrs.get("id"))
- resp = client_obj.volumes.restore(base_snap_id=snap_resp.attrs.get("id"),
- id=vol_resp.attrs.get("id"))
- # bring volume online
- client_obj.volumes.online(id=vol_resp.attrs.get("id"))
- return (True, True, f"Restored volume '{vol_name}' from snapshot '{snapshot_to_restore}' successfully.", {}, resp)
- except Exception as ex:
- return (False, False, f"Volume restore failed '{ex}'", {}, {})
-
-
-# given a snapshot name,create a clone.
-# return code
-# SUCCESS = 0
-# ALREADY_EXISTS = -1
-# FAILED = 1
-def create_clone_from_snapshot(
- client_obj,
- snap_list_resp,
- vol_name,
- snapshot_to_clone,
- state):
- # if client_obj is None or not snap_list_resp or snap_list_resp is None or parent is None:
- if (utils.is_null_or_empty(client_obj)
- or utils.is_null_or_empty(vol_name)
- or utils.is_null_or_empty(snap_list_resp)
- or utils.is_null_or_empty(snapshot_to_clone)):
- return (False, "Create clone from snapshot failed as valid arguments are not provided. Please check the argument provided for volume and snapshot.", {})
- try:
- # to_return = Vol_Operation.FAILED # assume failed
- # find the snapshot from snapshot list
- for snap_obj in snap_list_resp:
- if snap_obj.attrs.get("name") == snapshot_to_clone:
- # create
- resp = client_obj.volumes.create(name=vol_name,
- base_snap_id=snap_obj.attrs.get("id"),
- clone=True)
- if utils.is_null_or_empty(resp) is False:
- return (Vol_Operation.SUCCESS, f'{vol_name}', resp.attrs)
- return (Vol_Operation.FAILED)
- except exceptions.NimOSAPIError as ex:
- if "SM_eexist" in str(ex):
- # check the state. if it set to present then return true
- if state == "present":
- return (Vol_Operation.ALREADY_EXISTS, f"Cloned volume '{vol_name}' is already present in given state.", {})
- else:
- return (Vol_Operation.FAILED, f"Create clone from snapshot failed as cloned volume '{vol_name}' already exist| {ex}", {})
- except Exception as ex:
- return (Vol_Operation.FAILED, f"Create clone from snapshot failed | {ex}", {})
-
-
-def clone_volume(
- client_obj,
- parent,
- state,
- vol_name=None,
- snapshot_to_clone=None):
-
- if utils.is_null_or_empty(vol_name):
- return (False, False, "Clone operation failed. Clone volume name is not present.", {}, {})
- # this function will handle 2 scenario.
- # If snapshot name is given. we try to clone from that else
- # we first create a snapshot of source volume and then
- # clone from the snapshot
- try:
- if utils.is_null_or_empty(snapshot_to_clone):
- if utils.is_null_or_empty(parent):
- return (False, False, "Clone operation failed. Parent volume name is not present.", {}, {})
- # get the vol id
- vol_resp = client_obj.volumes.get(name=parent)
- if utils.is_null_or_empty(vol_resp):
- return (False, False, "Clone operation failed. Parent volume name is not present.", {}, {})
- else:
- # create a temp snapshot
- snapshot_to_clone = utils.get_unique_string("ansible-snapshot")
- snap_resp = client_obj.snapshots.create(name=snapshot_to_clone,
- vol_id=vol_resp.attrs.get("id"),
- description="created by ansible",
- online=False,
- writable=False)
- if utils.is_null_or_empty(snap_resp):
- return (False, False, "Clone Operation Failed as could not create a snapshot from source volume", {}, {})
- # create clone
- clonevol_resp, msg, resp = create_clone_from_snapshot(client_obj, [snap_resp], vol_name, snapshot_to_clone, state)
- if clonevol_resp == Vol_Operation.ALREADY_EXISTS or clonevol_resp == Vol_Operation.FAILED:
- # remove the snapshot
- client_obj.snapshots.delete(id=snap_resp.attrs.get("id"))
- else:
- # get the snapshot detail from the given source vol
- snap_list_resp = client_obj.snapshots.list(vol_name=parent, name=snapshot_to_clone)
- if utils.is_null_or_empty(snap_list_resp):
- return (False, False, f"Could not create clone volume '{vol_name}' as given snapshot name '{snapshot_to_clone}' is not present "
- "in parent volume", {}, {})
- # create clone
- clonevol_resp, msg, resp = create_clone_from_snapshot(client_obj, snap_list_resp, vol_name, snapshot_to_clone, state)
-
- if clonevol_resp is Vol_Operation.SUCCESS:
- return (True, True, f"Successfully created cloned volume '{msg}'", {}, resp)
- elif clonevol_resp is Vol_Operation.FAILED:
- return (False, False, f"Failed to clone volume. Msg: '{msg}'", {}, {})
- elif clonevol_resp == Vol_Operation.ALREADY_EXISTS:
- return (True, False, f" '{msg}'", {}, {})
- except Exception as ex:
- return (False, False, f"clone volume operation Failed '{ex}'", {}, {})
-
-
-def main():
-
- fields = {
- "state": {
- "required": True,
- "choices": ['present',
- 'absent',
- 'create',
- 'restore'
- ],
- "type": "str"
- },
- "name": {
- "required": True,
- "type": "str"
- },
- "change_name": {
- "required": False,
- "type": "str"
- },
- "size": {
- "type": "int"
- },
- "description": {
- "required": False,
- "type": "str"
- },
- "perf_policy": {
- "required": False,
- "type": "str"
- },
- "limit": {
- "required": False,
- "type": "int",
- },
- "online": {
- "required": False,
- "type": "bool"
- },
- "owned_by_group": {
- "required": False,
- "type": "str"
- },
- "multi_initiator": {
- "required": False,
- "type": "bool"
- },
- "iscsi_target_scope": {
- "required": False,
- "choices": ['volume', 'group'],
- "type": "str"
- },
- "pool": {
- "required": False,
- "type": "str"
- },
- "read_only": {
- "required": False,
- "type": "bool"
- },
- "block_size": {
- "required": False,
- "type": "int"
- },
- "clone": {
- "required": False,
- "type": "bool"
- },
- "agent_type": {
- "required": False,
- "choices": ['none', 'smis', 'vvol', 'openstack', 'openstackv2'],
- "type": "str"
- },
- "destination": {
- "required": False,
- "type": "str"
- },
- "cache_pinned": {
- "required": False,
- "type": "bool"
- },
- "thinly_provisioned": {
- "required": False,
- "type": "bool"
- },
- "encryption_cipher": {
- "required": False,
- "choices": ['none', 'aes_256_xts'],
- "type": "str"
- },
- "app_uuid": {
- "required": False,
- "type": "str"
- },
- "folder": {
- "required": False,
- "type": "str",
- },
- "dedupe": {
- "required": False,
- "type": "bool"
- },
- "limit_iops": {
- "required": False,
- "type": "int"
- },
- "limit_mbps": {
- "required": False,
- "type": "int"
- },
- "parent": {
- "required": False,
- "type": "str"
- },
- "snapshot": {
- "required": False,
- "type": "str"
- },
- "volcoll": {
- "required": False,
- "type": "str"
- },
- "metadata": {
- "required": False,
- "type": "dict"
- },
- "force": {
- "required": False,
- "type": "bool"
- },
- "caching": {
- "required": False,
- "type": "bool"
- },
- "force_vvol": {
- "required": False,
- "type": "bool",
- "default": False
- },
- "move": {
- "required": False,
- "type": "bool"
- }
- }
- default_fields = utils.basic_auth_arg_fields()
- fields.update(default_fields)
- required_if = [('state', 'restore', ['snapshot'])]
-
- module = AnsibleModule(argument_spec=fields, required_if=required_if)
- if client is None:
- module.fail_json(msg='Python nimble-sdk could not be found.')
-
- state = module.params["state"]
- vol_name = module.params["name"]
- change_name = module.params["change_name"]
- size = module.params["size"]
- description = module.params["description"]
- perf_policy = module.params["perf_policy"]
- limit = module.params["limit"]
- online = module.params["online"]
- owned_by_group = module.params["owned_by_group"]
- multi_initiator = module.params["multi_initiator"]
- iscsi_target_scope = module.params["iscsi_target_scope"]
- pool = module.params["pool"]
- read_only = module.params["read_only"]
- block_size = module.params["block_size"]
- clone = module.params["clone"]
- agent_type = module.params["agent_type"]
- dest_pool = module.params["destination"]
- cache_pinned = module.params["cache_pinned"]
- thinly_provisioned = module.params["thinly_provisioned"]
- encryption_cipher = module.params["encryption_cipher"]
- app_uuid = module.params["app_uuid"]
- folder = module.params["folder"]
- dedupe = module.params["dedupe"]
- limit_iops = module.params["limit_iops"]
- limit_mbps = module.params["limit_mbps"]
- parent = module.params["parent"] # used for cloning
- snapshot = module.params["snapshot"]
- volcoll = module.params["volcoll"]
- metadata = module.params["metadata"]
- force = module.params["force"]
- caching = module.params["caching"]
- force_vvol = module.params["force_vvol"]
- move = module.params["move"]
- hostname = module.params["host"]
- username = module.params["username"]
- password = module.params["password"]
-
- if (username is None or password is None or hostname is None):
- module.fail_json(msg="Missing variables: hostname, username and password is mandatory.")
- # defaults
- return_status = changed = False
- msg = "No task to run."
- resp = None
-
- try:
- client_obj = client.NimOSClient(
- hostname,
- username,
- password,
- f"HPE Nimble Ansible Modules v{NIMBLE_ANSIBLE_VERSION}"
- )
- # States
- if move is True and state == "present":
- if utils.is_null_or_empty(dest_pool) is False:
- return_status, changed, msg, changed_attrs_dict, resp = move_volume(client_obj, vol_name, dest_pool, force_vvol)
- else:
- module.fail_json(msg="Volume move failed as destination pool is null.")
-
- elif (move is None or move is False) and (state == "create" or state == "present"):
- if utils.is_null_or_empty(vol_name):
- return_status = changed = False
- msg = "Volume creation failed as volume name is null"
-
- # state create/present can be provided for creating a new volume or
- # creating a clone from source volume
- if parent is not None:
- return_status, changed, msg, changed_attrs_dict, resp = clone_volume(
- client_obj, parent, state,
- vol_name, snapshot)
- else:
- vol_resp = client_obj.volumes.get(id=None, name=vol_name)
- if utils.is_null_or_empty(vol_resp) or state == "create":
- return_status, changed, msg, changed_attrs_dict, resp = create_volume(
- client_obj, vol_name,
- perfpolicy_id=utils.get_perfpolicy_id(client_obj, perf_policy),
- size=size,
- description=description,
- limit=limit,
- online=online,
- owned_by_group_id=utils.get_owned_by_group_id(client_obj, owned_by_group),
- multi_initiator=multi_initiator,
- iscsi_target_scope=iscsi_target_scope,
- pool_id=utils.get_pool_id(client_obj, pool),
- read_only=read_only,
- block_size=block_size,
- clone=clone,
- agent_type=agent_type,
- dest_pool_id=utils.get_pool_id(client_obj, dest_pool),
- cache_pinned=cache_pinned,
- thinly_provisioned=thinly_provisioned,
- encryption_cipher=encryption_cipher,
- app_uuid=app_uuid,
- folder_id=utils.get_folder_id(client_obj, folder),
- metadata=metadata,
- dedupe_enabled=dedupe,
- limit_iops=limit_iops,
- limit_mbps=limit_mbps)
- else:
- return_status, changed, msg, changed_attrs_dict, resp = update_volume(
- client_obj,
- vol_resp,
- name=change_name,
- volcoll_name=volcoll,
- size=size,
- description=description,
- perfpolicy_id=utils.get_perfpolicy_id(client_obj, perf_policy),
- limit=limit,
- online=online,
- owned_by_group_id=utils.get_owned_by_group_id(client_obj, owned_by_group),
- multi_initiator=multi_initiator,
- iscsi_target_scope=iscsi_target_scope,
- read_only=read_only,
- block_size=block_size,
- volcoll_id=utils.get_volcoll_id(client_obj, volcoll),
- agent_type=agent_type,
- force=force,
- cache_pinned=cache_pinned,
- thinly_provisioned=thinly_provisioned,
- app_uuid=app_uuid,
- folder_id=utils.get_folder_id(client_obj, folder),
- metadata=metadata,
- caching_enabled=caching,
- dedupe_enabled=dedupe,
- limit_iops=limit_iops,
- limit_mbps=limit_mbps)
-
- elif state == "absent":
- return_status, changed, msg, changed_attrs_dict = delete_volume(client_obj, vol_name)
-
- elif state == "restore":
- return_status, changed, msg, changed_attrs_dict, resp = restore_volume(client_obj, vol_name, snapshot)
- except Exception as ex:
- # failed for some reason.
- msg = str(ex)
-
- if return_status:
- if utils.is_null_or_empty(resp):
- module.exit_json(return_status=return_status, changed=changed, msg=msg)
- else:
- module.exit_json(return_status=return_status, changed=changed, msg=msg, attrs=resp)
- else:
- module.fail_json(return_status=return_status, changed=changed, msg=msg)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_volume_collection.py b/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_volume_collection.py
deleted file mode 100644
index ff91f0167..000000000
--- a/ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_volume_collection.py
+++ /dev/null
@@ -1,717 +0,0 @@
-#!/usr/bin/python
-
-# Copyright 2020 Hewlett Packard Enterprise Development LP
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
-# file except in compliance with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software distributed
-# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-# OF ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
-
-# author Alok Ranjan (alok.ranjan2@hpe.com)
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-DOCUMENTATION = r'''
----
-author:
- - HPE Nimble Storage Ansible Team (@ar-india) <nimble-dcs-storage-automation-eng@hpe.com>
-description: Manage the volume collections on an HPE Nimble Storage group.
-module: hpe_nimble_volume_collection
-options:
- abort_handover:
- required: False
- type: bool
- description:
- - Abort in-progress handover. If for some reason a previously invoked handover request is unable to complete, this action can be used to cancel it.
- This operation is not supported for synchronous replication volume collections.
- agent_hostname:
- required: False
- type: str
- description:
- - Generic backup agent hostname.
- agent_password:
- required: False
- type: str
- description:
- - Generic backup agent password.
- agent_username:
- required: False
- type: str
- description:
- - Generic backup agent username.
- app_cluster:
- required: False
- type: str
- description:
- - If the application is running within a Windows cluster environment, this is the cluster name.
- app_id:
- required: False
- choices:
- - inval
- - exchange
- - exchange_dag
- - hyperv
- - sql2005
- - sql2008
- - sql2012
- - sql2014
- - sql2016
- - sql2017
- type: str
- description:
- - Application ID running on the server.
- app_server:
- required: False
- type: str
- description:
- - Application server hostname.
- app_service:
- required: False
- type: str
- description:
- - If the application is running within a windows cluster environment then this is the instance name of the service running within the cluster environment.
- app_sync:
- choices:
- - none
- - vss
- - vmware
- - generic
- required: False
- type: str
- description:
- - Application synchronization.
- change_name:
- required: False
- type: str
- description:
- - Change name of the existing volume collection.
- demote:
- required: False
- type: bool
- description:
- - Release ownership of the specified volume collection. The volumes associated with the volume collection will be set to offline and
- a snapshot will be created, then full control over the volume collection will be transferred to the new owner. This option can be used
- following a promote to revert the volume collection back to its prior configured state. This operation does not alter the configuration on
- the new owner itself, but does require the new owner to be running in order to obtain its identity information. This operation is not supported
- for synchronous replication volume collections.
- description:
- required: False
- type: str
- description:
- - Text description of volume collection.
- handover:
- required: False
- type: bool
- description:
- - Gracefully transfer ownership of the specified volume collection. This action can be used to pass control of the volume collection
- to the downstream replication partner. Ownership and full control over the volume collection will be given to the downstream replication
- partner. The volumes associated with the volume collection will be set to offline prior to the final snapshot being taken and replicated,
- thus ensuring full data synchronization as part of the transfer. By default, the new owner will automatically begin replicating the volume
- collection back to this node when the handover completes.
- invoke_on_upstream_partner:
- required: False
- type: bool
- description:
- - Invoke handover request on upstream partner. This operation is not supported for synchronous replication volume collections.
- is_standalone_volcoll:
- required: False
- type: bool
- description:
- - Indicates whether this is a standalone volume collection.
- metadata:
- required: False
- type: dict
- description:
- - User defined key-value pairs that augment a volume collection attributes. List of key-value pairs. Keys must be unique and non-empty.
- When creating an object, values must be non-empty. When updating an object, an empty value causes the corresponding key to be removed.
- name:
- required: True
- type: str
- description:
- - Name of the volume collection.
- no_reverse:
- required: False
- type: bool
- description:
- - Do not automatically reverse direction of replication.
- Using this argument will prevent the new owner from automatically replicating the volume collection to this node when the handover completes.
- override_upstream_down:
- required: False
- type: bool
- description:
- - Allow the handover request to proceed even if upstream array is down. The default behavior is to return an error when upstream is down.
- This option is applicable for synchronous replication only.
- promote:
- required: False
- type: bool
- description:
- - Take ownership of the specified volume collection. The volumes associated with the volume collection will be set to online and be
- available for reading and writing. Replication will be disabled on the affected schedules and must be re-configured if desired. Snapshot
- retention for the affected schedules will be set to the greater of the current local or replica retention values. This operation is not
- supported for synchronous replication volume collections.
- prot_template:
- required: False
- type: str
- description:
- - Name of the protection template whose attributes will be used to create this volume collection.
- This attribute is only used for input when creating a volume collection and is not outputted.
- replication_partner:
- required: False
- type: str
- description:
- - Name of the new volume collection owner.
- replication_type:
- choices:
- - periodic_snapshot
- - synchronous
- required: False
- type: str
- description:
- - Type of replication configured for the volume collection.
- state:
- required: True
- choices:
- - present
- - absent
- - create
- type: str
- description:
- - The volume collection operations.
- validate:
- required: False
- type: bool
- description:
- - Validate a volume collection with either Microsoft VSS or VMware application synchronization.
- vcenter_hostname:
- required: False
- type: str
- description:
- - VMware vCenter hostname.
- vcenter_username:
- required: False
- type: str
- description:
- - Application VMware vCenter username. String of up to 80 alphanumeric characters, beginning with a letter.
- It can include ampersand (@), backslash (\), dash (-), period (.), and underscore (_).
- vcenter_password:
- required: False
- type: str
- description:
- - Application VMware vCenter password. A password with few constraints.
-extends_documentation_fragment: hpe.nimble.hpe_nimble
-short_description: Manage the HPE Nimble Storage volume collections
-version_added: "1.0.0"
-notes:
- - This module does not support C(check_mode).
-'''
-
-EXAMPLES = r'''
-
-# if state is create , then create a volcoll if not present. Fails if already present.
-# if state is present, then create a volcoll if not present. Succeed if it already exists.
-- name: Create volume collection if not present
- hpe.nimble.hpe_nimble_volume_collection:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- description: "{{ description | default(None)}}"
- state: "{{ state | default('present') }}"
-
-- name: Delete volume collection
- hpe.nimble.hpe_nimble_volume_collection:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- state: absent
-
-- name: Promote volume collection
- hpe.nimble.hpe_nimble_volume_collection:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- state: present
- promote: True
-
-- name: Demote volume collection
- hpe.nimble.hpe_nimble_volume_collection:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- state: present
- demote: True
-
-- name: Handover volume collection
- hpe.nimble.hpe_nimble_volume_collection:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- state: present
- handover: True
-
-- name: Abort handover volume collection
- hpe.nimble.hpe_nimble_volume_collection:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- state: present
- abort_handover: True
-
-- name: Validate volume collection
- hpe.nimble.hpe_nimble_volume_collection:
- host: "{{ host }}"
- username: "{{ username }}"
- password: "{{ password }}"
- name: "{{ name }}"
- state: present
- validate: True
-
-'''
-RETURN = r'''
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-try:
- from nimbleclient.v1 import client
-except ImportError:
- client = None
-from ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble import __version__ as NIMBLE_ANSIBLE_VERSION
-import ansible_collections.hpe.nimble.plugins.module_utils.hpe_nimble as utils
-
-
-def create_volcoll(
- client_obj,
- volcoll_name,
- **kwargs):
-
- if utils.is_null_or_empty(volcoll_name):
- return (False, False, "Create volume collection failed as volume collection is not present.", {}, {})
- try:
- volcoll_resp = client_obj.volume_collections.get(id=None, name=volcoll_name)
- if utils.is_null_or_empty(volcoll_resp):
- params = utils.remove_null_args(**kwargs)
- volcoll_resp = client_obj.volume_collections.create(name=volcoll_name, **params)
- return (True, True, f"Created volume collection '{volcoll_name}' successfully.", {}, volcoll_resp.attrs)
- else:
- return (False, False, f"Volume collection '{volcoll_name}' cannot be created as it is already present in given state.", {}, {})
- except Exception as ex:
- return (False, False, f"Volume collection creation failed | {ex}", {}, {})
-
-
-def update_volcoll(
- client_obj,
- volcoll_resp,
- **kwargs):
-
- if utils.is_null_or_empty(volcoll_resp):
- return (False, False, "Update volume collection failed as volume collection is not present.", {}, {})
- try:
- volcoll_name = volcoll_resp.attrs.get("name")
- changed_attrs_dict, params = utils.remove_unchanged_or_null_args(volcoll_resp, **kwargs)
- if changed_attrs_dict.__len__() > 0:
- volcoll_resp = client_obj.volume_collections.update(id=volcoll_resp.attrs.get("id"), **params)
- return (True, True, f"Volume collection '{volcoll_name}' already present. Modified the following attributes '{changed_attrs_dict}'",
- changed_attrs_dict, volcoll_resp.attrs)
- else:
- return (True, False, f"Volume collection '{volcoll_name}' already present in given state.", {}, volcoll_resp.attrs)
- except Exception as ex:
- return (False, False, f"Volume collection update failed | {ex}", {}, {})
-
-
-def delete_volcoll(client_obj, volcoll_name):
-
- if utils.is_null_or_empty(volcoll_name):
- return (False, False, "Delete volume collection failed as volume collection name is null.", {})
-
- try:
- volcoll_resp = client_obj.volume_collections.get(id=None, name=volcoll_name)
- if utils.is_null_or_empty(volcoll_resp):
- return (False, False, f"Volume collection '{volcoll_name}' not present to delete.", {})
- else:
-
- client_obj.volume_collections.delete(id=volcoll_resp.attrs.get("id"))
- return (True, True, f"Deleted volume collection '{volcoll_name}' successfully.", {})
- except Exception as ex:
- return (False, False, f"Volume collection deletion failed | {ex}", {})
-
-
-def promote_volcoll(client_obj, volcoll_name):
-
- if utils.is_null_or_empty(volcoll_name):
- return (False, False, "Promote volume collection failed as volume collection name is null.", {})
-
- try:
- volcoll_resp = client_obj.volume_collections.get(id=None, name=volcoll_name)
- if utils.is_null_or_empty(volcoll_resp):
- return (False, False, f"Volume collection '{volcoll_name}' not present to promote.", {})
- else:
- client_obj.volume_collections.promote(id=volcoll_resp.attrs.get("id"))
- return (True, True, f"Promoted volume collection '{volcoll_name}' successfully.", {})
- except Exception as ex:
- return (False, False, f"Promote volume collection failed | {ex}", {})
-
-
-def demote_volcoll(
- client_obj,
- volcoll_name,
- **kwargs):
-
- if utils.is_null_or_empty(volcoll_name):
- return (False, False, "Demote volume collection failed as volume collection name is null.", {})
-
- try:
- volcoll_resp = client_obj.volume_collections.get(id=None, name=volcoll_name)
- params = utils.remove_null_args(**kwargs)
- if utils.is_null_or_empty(volcoll_resp):
- return (False, False, f"Volume collection '{volcoll_name}' not present to demote.", {})
- else:
- client_obj.volume_collections.demote(id=volcoll_resp.attrs.get("id"), **params)
- return (True, True, f"Demoted volume collection '{volcoll_name}' successfully.", {})
- except Exception as ex:
- return (False, False, f"Demote volume collection failed | {ex}", {})
-
-
-def handover_volcoll(
- client_obj,
- volcoll_name,
- **kwargs):
-
- if utils.is_null_or_empty(volcoll_name):
- return (False, False, "Handover of volume collection failed as volume collection name is null.", {})
-
- try:
- volcoll_resp = client_obj.volume_collections.get(id=None, name=volcoll_name)
- params = utils.remove_null_args(**kwargs)
- if utils.is_null_or_empty(volcoll_resp):
- return (False, False, f"Volume collection '{volcoll_name}' not present for handover.", {})
- else:
- client_obj.volume_collections.handover(id=volcoll_resp.attrs.get("id"), **params)
- return (True, True, f"Handover of volume collection '{volcoll_name}' done successfully.", {})
- except Exception as ex:
- return (False, False, f"Handover of volume collection failed | {ex}", {})
-
-
-def abort_handover_volcoll(
- client_obj,
- volcoll_name):
-
- if utils.is_null_or_empty(volcoll_name):
- return (False, False, "Abort handover of volume collection failed as volume collection name is null.", {})
-
- try:
- volcoll_resp = client_obj.volume_collections.get(id=None, name=volcoll_name)
- if utils.is_null_or_empty(volcoll_resp):
- return (False, False, f"Volume collection '{volcoll_name}' not present for abort handover.", {})
- else:
- client_obj.volume_collections.abort_handover(id=volcoll_resp.attrs.get("id"))
- return (True, True, f"Abort handover of volume collection '{volcoll_name}' done successfully.", {})
- except Exception as ex:
- return (False, False, f"Abort handover of volume collection failed | {ex}", {})
-
-
-def validate_volcoll(
- client_obj,
- volcoll_name):
-
- if utils.is_null_or_empty(volcoll_name):
- return (False, False, "Validate volume collection failed as volume collection name is null.", {}, {})
-
- try:
- volcoll_resp = client_obj.volume_collections.get(id=None, name=volcoll_name)
- if utils.is_null_or_empty(volcoll_resp):
- return (False, False, f"Volume collection '{volcoll_name}' not present for validation.", {}, {})
- else:
- volcoll_validate_resp = client_obj.volume_collections.validate(id=volcoll_resp.attrs.get("id"))
- if hasattr(volcoll_validate_resp, 'attrs'):
- volcoll_validate_resp = volcoll_validate_resp.attrs
- return (True, False, f"Validation of volume collection '{volcoll_name}' done successfully.", {}, volcoll_validate_resp)
- except Exception as ex:
- return (False, False, f"Validation of volume collection failed | {ex}", {}, {})
-
-
-def main():
-
- fields = {
- "state": {
- "required": True,
- "choices": ['present',
- 'absent',
- 'create'
- ],
- "type": "str"
- },
- "prot_template": {
- "required": False,
- "type": "str"
- },
- "name": {
- "required": True,
- "type": "str"
- },
- "change_name": {
- "required": False,
- "type": "str"
- },
- "description": {
- "required": False,
- "type": "str"
- },
- "replication_type": {
- "choices": ['periodic_snapshot', 'synchronous'],
- "required": False,
- "type": "str"
- },
- "app_sync": {
- "choices": ['none', 'vss', 'vmware', 'generic'],
- "required": False,
- "type": "str"
- },
- "app_server": {
- "required": False,
- "type": "str"
- },
- "app_id": {
- "required": False,
- "choices": ['inval', 'exchange', 'exchange_dag', 'hyperv', 'sql2005', 'sql2008', 'sql2012', 'sql2014', 'sql2016', 'sql2017'],
- "type": "str"
- },
- "app_cluster": {
- "required": False,
- "type": "str"
- },
- "app_service": {
- "required": False,
- "type": "str"
- },
- "vcenter_hostname": {
- "required": False,
- "type": "str"
- },
- "vcenter_username": {
- "required": False,
- "type": "str"
- },
- "vcenter_password": {
- "required": False,
- "type": "str",
- "no_log": True
- },
- "agent_hostname": {
- "required": False,
- "type": "str"
- },
- "agent_username": {
- "required": False,
- "type": "str"
- },
- "agent_password": {
- "required": False,
- "type": "str",
- "no_log": True
- },
- "is_standalone_volcoll": {
- "required": False,
- "type": "bool"
- },
- "metadata": {
- "required": False,
- "type": "dict"
- },
- "promote": {
- "required": False,
- "type": "bool"
- },
- "demote": {
- "required": False,
- "type": "bool"
- },
- "handover": {
- "required": False,
- "type": "bool"
- },
- "abort_handover": {
- "required": False,
- "type": "bool"
- },
- "validate": {
- "required": False,
- "type": "bool"
- },
- "replication_partner": {
- "required": False,
- "type": "str"
- },
- "invoke_on_upstream_partner": {
- "required": False,
- "type": "bool"
- },
- "no_reverse": {
- "required": False,
- "type": "bool"
- },
- "override_upstream_down": {
- "required": False,
- "type": "bool"
- }
- }
- default_fields = utils.basic_auth_arg_fields()
- fields.update(default_fields)
- module = AnsibleModule(argument_spec=fields)
- if client is None:
- module.fail_json(msg='Python nimble-sdk could not be found.')
-
- hostname = module.params["host"]
- username = module.params["username"]
- password = module.params["password"]
- state = module.params["state"]
- prot_template = module.params["prot_template"]
- volcoll_name = module.params["name"]
- change_name = module.params["change_name"]
- description = module.params["description"]
- replication_type = module.params["replication_type"]
- app_sync = module.params["app_sync"]
- app_server = module.params["app_server"]
- app_id = module.params["app_id"]
- app_cluster = module.params["app_cluster"]
- app_service = module.params["app_service"]
- vcenter_hostname = module.params["vcenter_hostname"]
- vcenter_username = module.params["vcenter_username"]
- vcenter_password = module.params["vcenter_password"]
- agent_hostname = module.params["agent_hostname"]
- agent_username = module.params["agent_username"]
- agent_password = module.params["agent_password"]
- is_standalone_volcoll = module.params["is_standalone_volcoll"]
- metadata = module.params["metadata"]
- promote = module.params["promote"]
- demote = module.params["demote"]
- handover = module.params["handover"]
- abort_handover = module.params["abort_handover"]
- validate = module.params["validate"]
- replication_partner = module.params["replication_partner"]
- invoke_on_upstream_partner = module.params["invoke_on_upstream_partner"]
- no_reverse = module.params["no_reverse"]
- override_upstream_down = module.params["override_upstream_down"]
-
- if (username is None or password is None or hostname is None):
- module.fail_json(msg="Missing variables: hostname, username and password is mandatory.")
-
- # defaults
- return_status = changed = False
- msg = "No task to run."
- resp = None
-
- try:
- client_obj = client.NimOSClient(
- hostname,
- username,
- password,
- f"HPE Nimble Ansible Modules v{NIMBLE_ANSIBLE_VERSION}"
- )
-
- # States.
- if state == 'present' and promote is True:
- return_status, changed, msg, changed_attrs_dict = promote_volcoll(client_obj, volcoll_name)
-
- elif state == 'present' and demote is True:
- return_status, changed, msg, changed_attrs_dict = demote_volcoll(
- client_obj,
- volcoll_name,
- invoke_on_upstream_partner=invoke_on_upstream_partner,
- replication_partner_id=utils.get_replication_partner_id(client_obj, replication_partner))
-
- elif state == 'present' and handover is True:
- replication_partner_id = utils.get_replication_partner_id(client_obj, replication_partner)
- if utils.is_null_or_empty(replication_partner_id) is True:
- module.fail_json(msg="Handover for volume collection failed. Please provide a valid replication partner.")
-
- return_status, changed, msg, changed_attrs_dict = handover_volcoll(
- client_obj,
- volcoll_name,
- invoke_on_upstream_partner=invoke_on_upstream_partner,
- no_reverse=no_reverse,
- override_upstream_down=override_upstream_down,
- replication_partner_id=replication_partner_id)
-
- elif state == 'present' and abort_handover is True:
- return_status, changed, msg, changed_attrs_dict = abort_handover_volcoll(client_obj, volcoll_name)
-
- elif state == 'present' and validate is True:
- return_status, changed, msg, changed_attrs_dict, resp = validate_volcoll(client_obj, volcoll_name)
-
- elif ((promote is None or promote is False)
- and (demote is None or demote is False)
- and (abort_handover is None or abort_handover is False)
- and (handover is None or handover is False)
- and (validate is None or validate is False)
- and (state == "create" or state == "present")):
-
- volcoll_resp = client_obj.volume_collections.get(id=None, name=volcoll_name)
- if utils.is_null_or_empty(volcoll_resp) or state == "create":
- return_status, changed, msg, changed_attrs_dict, resp = create_volcoll(
- client_obj,
- volcoll_name,
- prottmpl_id=utils.get_prottmpl_id(client_obj, prot_template),
- description=description,
- replication_type=replication_type,
- app_sync=app_sync,
- app_server=app_server,
- app_id=app_id,
- app_cluster=app_cluster,
- app_service=app_service,
- vcenter_hostname=vcenter_hostname,
- vcenter_username=vcenter_username,
- vcenter_password=vcenter_password,
- agent_hostname=agent_hostname,
- agent_username=agent_username,
- agent_password=agent_password,
- is_standalone_volcoll=is_standalone_volcoll,
- metadata=metadata)
- else:
- # update op
- return_status, changed, msg, changed_attrs_dict, resp = update_volcoll(
- client_obj,
- volcoll_resp,
- name=change_name,
- description=description,
- app_sync=app_sync,
- app_server=app_server,
- app_id=app_id,
- app_cluster=app_cluster,
- app_service=app_service,
- vcenter_hostname=vcenter_hostname,
- vcenter_username=vcenter_username,
- vcenter_password=vcenter_password,
- agent_hostname=agent_hostname,
- agent_username=agent_username,
- agent_password=agent_password,
- metadata=metadata)
-
- elif state == "absent":
- return_status, changed, msg, changed_attrs_dict = delete_volcoll(client_obj, volcoll_name)
-
- except Exception as ex:
- # failed for some reason.
- msg = str(ex)
-
- if return_status:
- if utils.is_null_or_empty(resp):
- module.exit_json(return_status=return_status, changed=changed, msg=msg)
- else:
- module.exit_json(return_status=return_status, changed=changed, msg=msg, attrs=resp)
- else:
- module.fail_json(return_status=return_status, changed=changed, msg=msg)
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/hpe/nimble/requirements.txt b/ansible_collections/hpe/nimble/requirements.txt
deleted file mode 100644
index 2dfb9f36c..000000000
--- a/ansible_collections/hpe/nimble/requirements.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-nimble-sdk
-selectors2 ; python_version == '3.6' \ No newline at end of file
diff --git a/ansible_collections/hpe/nimble/tests/sanity/ignore-2.10.txt b/ansible_collections/hpe/nimble/tests/sanity/ignore-2.10.txt
deleted file mode 100644
index d25b59a9d..000000000
--- a/ansible_collections/hpe/nimble/tests/sanity/ignore-2.10.txt
+++ /dev/null
@@ -1,160 +0,0 @@
-plugins/modules/hpe_nimble_volume.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_volume_collection.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_user.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_user_policy.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_snapshot.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_snapshot_collection.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_shelf.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_performance_policy.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_protection_template.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_protection_schedule.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_pool.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_partner.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_network.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_initiator_group.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_info.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_group.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_fc.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_encryption.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_disk.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_chap_user.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_array.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_access_control_record.py validate-modules:missing-gplv3-license
-plugins/module_utils/hpe_nimble.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_volume.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_volume_collection.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_user.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_user_policy.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_snapshot.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_snapshot_collection.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_shelf.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_performance_policy.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_protection_template.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_protection_schedule.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_pool.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_partner.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_network.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_initiator_group.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_info.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_group.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_fc.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_encryption.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_disk.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_chap_user.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_array.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_access_control_record.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/module_utils/hpe_nimble.py compile-2.7!skip
-plugins/modules/hpe_nimble_volume.py compile-2.7!skip
-plugins/modules/hpe_nimble_volume_collection.py compile-2.7!skip
-plugins/modules/hpe_nimble_user.py compile-2.7!skip
-plugins/modules/hpe_nimble_user_policy.py compile-2.7!skip
-plugins/modules/hpe_nimble_snapshot.py compile-2.7!skip
-plugins/modules/hpe_nimble_snapshot_collection.py compile-2.7!skip
-plugins/modules/hpe_nimble_shelf.py compile-2.7!skip
-plugins/modules/hpe_nimble_performance_policy.py compile-2.7!skip
-plugins/modules/hpe_nimble_protection_template.py compile-2.7!skip
-plugins/modules/hpe_nimble_protection_schedule.py compile-2.7!skip
-plugins/modules/hpe_nimble_pool.py compile-2.7!skip
-plugins/modules/hpe_nimble_partner.py compile-2.7!skip
-plugins/modules/hpe_nimble_network.py compile-2.7!skip
-plugins/modules/hpe_nimble_initiator_group.py compile-2.7!skip
-plugins/modules/hpe_nimble_info.py compile-2.7!skip
-plugins/modules/hpe_nimble_group.py compile-2.7!skip
-plugins/modules/hpe_nimble_fc.py compile-2.7!skip
-plugins/modules/hpe_nimble_encryption.py compile-2.7!skip
-plugins/modules/hpe_nimble_disk.py compile-2.7!skip
-plugins/modules/hpe_nimble_chap_user.py compile-2.7!skip
-plugins/modules/hpe_nimble_array.py compile-2.7!skip
-plugins/modules/hpe_nimble_access_control_record.py compile-2.7!skip
-plugins/module_utils/hpe_nimble.py compile-3.5!skip
-plugins/modules/hpe_nimble_volume.py compile-3.5!skip
-plugins/modules/hpe_nimble_volume_collection.py compile-3.5!skip
-plugins/modules/hpe_nimble_user.py compile-3.5!skip
-plugins/modules/hpe_nimble_user_policy.py compile-3.5!skip
-plugins/modules/hpe_nimble_snapshot.py compile-3.5!skip
-plugins/modules/hpe_nimble_snapshot_collection.py compile-3.5!skip
-plugins/modules/hpe_nimble_shelf.py compile-3.5!skip
-plugins/modules/hpe_nimble_performance_policy.py compile-3.5!skip
-plugins/modules/hpe_nimble_protection_template.py compile-3.5!skip
-plugins/modules/hpe_nimble_protection_schedule.py compile-3.5!skip
-plugins/modules/hpe_nimble_pool.py compile-3.5!skip
-plugins/modules/hpe_nimble_partner.py compile-3.5!skip
-plugins/modules/hpe_nimble_network.py compile-3.5!skip
-plugins/modules/hpe_nimble_initiator_group.py compile-3.5!skip
-plugins/modules/hpe_nimble_info.py compile-3.5!skip
-plugins/modules/hpe_nimble_group.py compile-3.5!skip
-plugins/modules/hpe_nimble_fc.py compile-3.5!skip
-plugins/modules/hpe_nimble_encryption.py compile-3.5!skip
-plugins/modules/hpe_nimble_disk.py compile-3.5!skip
-plugins/modules/hpe_nimble_chap_user.py compile-3.5!skip
-plugins/modules/hpe_nimble_array.py compile-3.5!skip
-plugins/modules/hpe_nimble_access_control_record.py compile-3.5!skip
-plugins/module_utils/hpe_nimble.py import-2.6!skip
-plugins/modules/hpe_nimble_volume.py import-2.6!skip
-plugins/modules/hpe_nimble_volume_collection.py import-2.6!skip
-plugins/modules/hpe_nimble_user.py import-2.6!skip
-plugins/modules/hpe_nimble_user_policy.py import-2.6!skip
-plugins/modules/hpe_nimble_snapshot.py import-2.6!skip
-plugins/modules/hpe_nimble_snapshot_collection.py import-2.6!skip
-plugins/modules/hpe_nimble_shelf.py import-2.6!skip
-plugins/modules/hpe_nimble_performance_policy.py import-2.6!skip
-plugins/modules/hpe_nimble_protection_template.py import-2.6!skip
-plugins/modules/hpe_nimble_protection_schedule.py import-2.6!skip
-plugins/modules/hpe_nimble_pool.py import-2.6!skip
-plugins/modules/hpe_nimble_partner.py import-2.6!skip
-plugins/modules/hpe_nimble_network.py import-2.6!skip
-plugins/modules/hpe_nimble_initiator_group.py import-2.6!skip
-plugins/modules/hpe_nimble_info.py import-2.6!skip
-plugins/modules/hpe_nimble_group.py import-2.6!skip
-plugins/modules/hpe_nimble_fc.py import-2.6!skip
-plugins/modules/hpe_nimble_encryption.py import-2.6!skip
-plugins/modules/hpe_nimble_disk.py import-2.6!skip
-plugins/modules/hpe_nimble_chap_user.py import-2.6!skip
-plugins/modules/hpe_nimble_array.py import-2.6!skip
-plugins/modules/hpe_nimble_access_control_record.py import-2.6!skip
-plugins/module_utils/hpe_nimble.py import-2.7!skip
-plugins/modules/hpe_nimble_volume.py import-2.7!skip
-plugins/modules/hpe_nimble_volume_collection.py import-2.7!skip
-plugins/modules/hpe_nimble_user.py import-2.7!skip
-plugins/modules/hpe_nimble_user_policy.py import-2.7!skip
-plugins/modules/hpe_nimble_snapshot.py import-2.7!skip
-plugins/modules/hpe_nimble_snapshot_collection.py import-2.7!skip
-plugins/modules/hpe_nimble_shelf.py import-2.7!skip
-plugins/modules/hpe_nimble_performance_policy.py import-2.7!skip
-plugins/modules/hpe_nimble_protection_template.py import-2.7!skip
-plugins/modules/hpe_nimble_protection_schedule.py import-2.7!skip
-plugins/modules/hpe_nimble_pool.py import-2.7!skip
-plugins/modules/hpe_nimble_partner.py import-2.7!skip
-plugins/modules/hpe_nimble_network.py import-2.7!skip
-plugins/modules/hpe_nimble_initiator_group.py import-2.7!skip
-plugins/modules/hpe_nimble_info.py import-2.7!skip
-plugins/modules/hpe_nimble_group.py import-2.7!skip
-plugins/modules/hpe_nimble_fc.py import-2.7!skip
-plugins/modules/hpe_nimble_encryption.py import-2.7!skip
-plugins/modules/hpe_nimble_disk.py import-2.7!skip
-plugins/modules/hpe_nimble_chap_user.py import-2.7!skip
-plugins/modules/hpe_nimble_array.py import-2.7!skip
-plugins/modules/hpe_nimble_access_control_record.py import-2.7!skip
-plugins/module_utils/hpe_nimble.py import-3.5!skip
-plugins/modules/hpe_nimble_volume.py import-3.5!skip
-plugins/modules/hpe_nimble_volume_collection.py import-3.5!skip
-plugins/modules/hpe_nimble_user.py import-3.5!skip
-plugins/modules/hpe_nimble_user_policy.py import-3.5!skip
-plugins/modules/hpe_nimble_snapshot.py import-3.5!skip
-plugins/modules/hpe_nimble_snapshot_collection.py import-3.5!skip
-plugins/modules/hpe_nimble_shelf.py import-3.5!skip
-plugins/modules/hpe_nimble_performance_policy.py import-3.5!skip
-plugins/modules/hpe_nimble_protection_template.py import-3.5!skip
-plugins/modules/hpe_nimble_protection_schedule.py import-3.5!skip
-plugins/modules/hpe_nimble_pool.py import-3.5!skip
-plugins/modules/hpe_nimble_partner.py import-3.5!skip
-plugins/modules/hpe_nimble_network.py import-3.5!skip
-plugins/modules/hpe_nimble_initiator_group.py import-3.5!skip
-plugins/modules/hpe_nimble_info.py import-3.5!skip
-plugins/modules/hpe_nimble_group.py import-3.5!skip
-plugins/modules/hpe_nimble_fc.py import-3.5!skip
-plugins/modules/hpe_nimble_encryption.py import-3.5!skip
-plugins/modules/hpe_nimble_disk.py import-3.5!skip
-plugins/modules/hpe_nimble_chap_user.py import-3.5!skip
-plugins/modules/hpe_nimble_array.py import-3.5!skip
-plugins/modules/hpe_nimble_access_control_record.py import-3.5!skip \ No newline at end of file
diff --git a/ansible_collections/hpe/nimble/tests/sanity/ignore-2.11.txt b/ansible_collections/hpe/nimble/tests/sanity/ignore-2.11.txt
deleted file mode 100644
index d25b59a9d..000000000
--- a/ansible_collections/hpe/nimble/tests/sanity/ignore-2.11.txt
+++ /dev/null
@@ -1,160 +0,0 @@
-plugins/modules/hpe_nimble_volume.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_volume_collection.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_user.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_user_policy.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_snapshot.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_snapshot_collection.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_shelf.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_performance_policy.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_protection_template.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_protection_schedule.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_pool.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_partner.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_network.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_initiator_group.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_info.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_group.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_fc.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_encryption.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_disk.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_chap_user.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_array.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_access_control_record.py validate-modules:missing-gplv3-license
-plugins/module_utils/hpe_nimble.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_volume.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_volume_collection.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_user.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_user_policy.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_snapshot.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_snapshot_collection.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_shelf.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_performance_policy.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_protection_template.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_protection_schedule.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_pool.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_partner.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_network.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_initiator_group.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_info.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_group.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_fc.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_encryption.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_disk.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_chap_user.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_array.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_access_control_record.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/module_utils/hpe_nimble.py compile-2.7!skip
-plugins/modules/hpe_nimble_volume.py compile-2.7!skip
-plugins/modules/hpe_nimble_volume_collection.py compile-2.7!skip
-plugins/modules/hpe_nimble_user.py compile-2.7!skip
-plugins/modules/hpe_nimble_user_policy.py compile-2.7!skip
-plugins/modules/hpe_nimble_snapshot.py compile-2.7!skip
-plugins/modules/hpe_nimble_snapshot_collection.py compile-2.7!skip
-plugins/modules/hpe_nimble_shelf.py compile-2.7!skip
-plugins/modules/hpe_nimble_performance_policy.py compile-2.7!skip
-plugins/modules/hpe_nimble_protection_template.py compile-2.7!skip
-plugins/modules/hpe_nimble_protection_schedule.py compile-2.7!skip
-plugins/modules/hpe_nimble_pool.py compile-2.7!skip
-plugins/modules/hpe_nimble_partner.py compile-2.7!skip
-plugins/modules/hpe_nimble_network.py compile-2.7!skip
-plugins/modules/hpe_nimble_initiator_group.py compile-2.7!skip
-plugins/modules/hpe_nimble_info.py compile-2.7!skip
-plugins/modules/hpe_nimble_group.py compile-2.7!skip
-plugins/modules/hpe_nimble_fc.py compile-2.7!skip
-plugins/modules/hpe_nimble_encryption.py compile-2.7!skip
-plugins/modules/hpe_nimble_disk.py compile-2.7!skip
-plugins/modules/hpe_nimble_chap_user.py compile-2.7!skip
-plugins/modules/hpe_nimble_array.py compile-2.7!skip
-plugins/modules/hpe_nimble_access_control_record.py compile-2.7!skip
-plugins/module_utils/hpe_nimble.py compile-3.5!skip
-plugins/modules/hpe_nimble_volume.py compile-3.5!skip
-plugins/modules/hpe_nimble_volume_collection.py compile-3.5!skip
-plugins/modules/hpe_nimble_user.py compile-3.5!skip
-plugins/modules/hpe_nimble_user_policy.py compile-3.5!skip
-plugins/modules/hpe_nimble_snapshot.py compile-3.5!skip
-plugins/modules/hpe_nimble_snapshot_collection.py compile-3.5!skip
-plugins/modules/hpe_nimble_shelf.py compile-3.5!skip
-plugins/modules/hpe_nimble_performance_policy.py compile-3.5!skip
-plugins/modules/hpe_nimble_protection_template.py compile-3.5!skip
-plugins/modules/hpe_nimble_protection_schedule.py compile-3.5!skip
-plugins/modules/hpe_nimble_pool.py compile-3.5!skip
-plugins/modules/hpe_nimble_partner.py compile-3.5!skip
-plugins/modules/hpe_nimble_network.py compile-3.5!skip
-plugins/modules/hpe_nimble_initiator_group.py compile-3.5!skip
-plugins/modules/hpe_nimble_info.py compile-3.5!skip
-plugins/modules/hpe_nimble_group.py compile-3.5!skip
-plugins/modules/hpe_nimble_fc.py compile-3.5!skip
-plugins/modules/hpe_nimble_encryption.py compile-3.5!skip
-plugins/modules/hpe_nimble_disk.py compile-3.5!skip
-plugins/modules/hpe_nimble_chap_user.py compile-3.5!skip
-plugins/modules/hpe_nimble_array.py compile-3.5!skip
-plugins/modules/hpe_nimble_access_control_record.py compile-3.5!skip
-plugins/module_utils/hpe_nimble.py import-2.6!skip
-plugins/modules/hpe_nimble_volume.py import-2.6!skip
-plugins/modules/hpe_nimble_volume_collection.py import-2.6!skip
-plugins/modules/hpe_nimble_user.py import-2.6!skip
-plugins/modules/hpe_nimble_user_policy.py import-2.6!skip
-plugins/modules/hpe_nimble_snapshot.py import-2.6!skip
-plugins/modules/hpe_nimble_snapshot_collection.py import-2.6!skip
-plugins/modules/hpe_nimble_shelf.py import-2.6!skip
-plugins/modules/hpe_nimble_performance_policy.py import-2.6!skip
-plugins/modules/hpe_nimble_protection_template.py import-2.6!skip
-plugins/modules/hpe_nimble_protection_schedule.py import-2.6!skip
-plugins/modules/hpe_nimble_pool.py import-2.6!skip
-plugins/modules/hpe_nimble_partner.py import-2.6!skip
-plugins/modules/hpe_nimble_network.py import-2.6!skip
-plugins/modules/hpe_nimble_initiator_group.py import-2.6!skip
-plugins/modules/hpe_nimble_info.py import-2.6!skip
-plugins/modules/hpe_nimble_group.py import-2.6!skip
-plugins/modules/hpe_nimble_fc.py import-2.6!skip
-plugins/modules/hpe_nimble_encryption.py import-2.6!skip
-plugins/modules/hpe_nimble_disk.py import-2.6!skip
-plugins/modules/hpe_nimble_chap_user.py import-2.6!skip
-plugins/modules/hpe_nimble_array.py import-2.6!skip
-plugins/modules/hpe_nimble_access_control_record.py import-2.6!skip
-plugins/module_utils/hpe_nimble.py import-2.7!skip
-plugins/modules/hpe_nimble_volume.py import-2.7!skip
-plugins/modules/hpe_nimble_volume_collection.py import-2.7!skip
-plugins/modules/hpe_nimble_user.py import-2.7!skip
-plugins/modules/hpe_nimble_user_policy.py import-2.7!skip
-plugins/modules/hpe_nimble_snapshot.py import-2.7!skip
-plugins/modules/hpe_nimble_snapshot_collection.py import-2.7!skip
-plugins/modules/hpe_nimble_shelf.py import-2.7!skip
-plugins/modules/hpe_nimble_performance_policy.py import-2.7!skip
-plugins/modules/hpe_nimble_protection_template.py import-2.7!skip
-plugins/modules/hpe_nimble_protection_schedule.py import-2.7!skip
-plugins/modules/hpe_nimble_pool.py import-2.7!skip
-plugins/modules/hpe_nimble_partner.py import-2.7!skip
-plugins/modules/hpe_nimble_network.py import-2.7!skip
-plugins/modules/hpe_nimble_initiator_group.py import-2.7!skip
-plugins/modules/hpe_nimble_info.py import-2.7!skip
-plugins/modules/hpe_nimble_group.py import-2.7!skip
-plugins/modules/hpe_nimble_fc.py import-2.7!skip
-plugins/modules/hpe_nimble_encryption.py import-2.7!skip
-plugins/modules/hpe_nimble_disk.py import-2.7!skip
-plugins/modules/hpe_nimble_chap_user.py import-2.7!skip
-plugins/modules/hpe_nimble_array.py import-2.7!skip
-plugins/modules/hpe_nimble_access_control_record.py import-2.7!skip
-plugins/module_utils/hpe_nimble.py import-3.5!skip
-plugins/modules/hpe_nimble_volume.py import-3.5!skip
-plugins/modules/hpe_nimble_volume_collection.py import-3.5!skip
-plugins/modules/hpe_nimble_user.py import-3.5!skip
-plugins/modules/hpe_nimble_user_policy.py import-3.5!skip
-plugins/modules/hpe_nimble_snapshot.py import-3.5!skip
-plugins/modules/hpe_nimble_snapshot_collection.py import-3.5!skip
-plugins/modules/hpe_nimble_shelf.py import-3.5!skip
-plugins/modules/hpe_nimble_performance_policy.py import-3.5!skip
-plugins/modules/hpe_nimble_protection_template.py import-3.5!skip
-plugins/modules/hpe_nimble_protection_schedule.py import-3.5!skip
-plugins/modules/hpe_nimble_pool.py import-3.5!skip
-plugins/modules/hpe_nimble_partner.py import-3.5!skip
-plugins/modules/hpe_nimble_network.py import-3.5!skip
-plugins/modules/hpe_nimble_initiator_group.py import-3.5!skip
-plugins/modules/hpe_nimble_info.py import-3.5!skip
-plugins/modules/hpe_nimble_group.py import-3.5!skip
-plugins/modules/hpe_nimble_fc.py import-3.5!skip
-plugins/modules/hpe_nimble_encryption.py import-3.5!skip
-plugins/modules/hpe_nimble_disk.py import-3.5!skip
-plugins/modules/hpe_nimble_chap_user.py import-3.5!skip
-plugins/modules/hpe_nimble_array.py import-3.5!skip
-plugins/modules/hpe_nimble_access_control_record.py import-3.5!skip \ No newline at end of file
diff --git a/ansible_collections/hpe/nimble/tests/sanity/ignore-2.12.txt b/ansible_collections/hpe/nimble/tests/sanity/ignore-2.12.txt
deleted file mode 100644
index d25b59a9d..000000000
--- a/ansible_collections/hpe/nimble/tests/sanity/ignore-2.12.txt
+++ /dev/null
@@ -1,160 +0,0 @@
-plugins/modules/hpe_nimble_volume.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_volume_collection.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_user.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_user_policy.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_snapshot.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_snapshot_collection.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_shelf.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_performance_policy.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_protection_template.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_protection_schedule.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_pool.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_partner.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_network.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_initiator_group.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_info.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_group.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_fc.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_encryption.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_disk.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_chap_user.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_array.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_access_control_record.py validate-modules:missing-gplv3-license
-plugins/module_utils/hpe_nimble.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_volume.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_volume_collection.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_user.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_user_policy.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_snapshot.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_snapshot_collection.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_shelf.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_performance_policy.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_protection_template.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_protection_schedule.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_pool.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_partner.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_network.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_initiator_group.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_info.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_group.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_fc.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_encryption.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_disk.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_chap_user.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_array.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_access_control_record.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/module_utils/hpe_nimble.py compile-2.7!skip
-plugins/modules/hpe_nimble_volume.py compile-2.7!skip
-plugins/modules/hpe_nimble_volume_collection.py compile-2.7!skip
-plugins/modules/hpe_nimble_user.py compile-2.7!skip
-plugins/modules/hpe_nimble_user_policy.py compile-2.7!skip
-plugins/modules/hpe_nimble_snapshot.py compile-2.7!skip
-plugins/modules/hpe_nimble_snapshot_collection.py compile-2.7!skip
-plugins/modules/hpe_nimble_shelf.py compile-2.7!skip
-plugins/modules/hpe_nimble_performance_policy.py compile-2.7!skip
-plugins/modules/hpe_nimble_protection_template.py compile-2.7!skip
-plugins/modules/hpe_nimble_protection_schedule.py compile-2.7!skip
-plugins/modules/hpe_nimble_pool.py compile-2.7!skip
-plugins/modules/hpe_nimble_partner.py compile-2.7!skip
-plugins/modules/hpe_nimble_network.py compile-2.7!skip
-plugins/modules/hpe_nimble_initiator_group.py compile-2.7!skip
-plugins/modules/hpe_nimble_info.py compile-2.7!skip
-plugins/modules/hpe_nimble_group.py compile-2.7!skip
-plugins/modules/hpe_nimble_fc.py compile-2.7!skip
-plugins/modules/hpe_nimble_encryption.py compile-2.7!skip
-plugins/modules/hpe_nimble_disk.py compile-2.7!skip
-plugins/modules/hpe_nimble_chap_user.py compile-2.7!skip
-plugins/modules/hpe_nimble_array.py compile-2.7!skip
-plugins/modules/hpe_nimble_access_control_record.py compile-2.7!skip
-plugins/module_utils/hpe_nimble.py compile-3.5!skip
-plugins/modules/hpe_nimble_volume.py compile-3.5!skip
-plugins/modules/hpe_nimble_volume_collection.py compile-3.5!skip
-plugins/modules/hpe_nimble_user.py compile-3.5!skip
-plugins/modules/hpe_nimble_user_policy.py compile-3.5!skip
-plugins/modules/hpe_nimble_snapshot.py compile-3.5!skip
-plugins/modules/hpe_nimble_snapshot_collection.py compile-3.5!skip
-plugins/modules/hpe_nimble_shelf.py compile-3.5!skip
-plugins/modules/hpe_nimble_performance_policy.py compile-3.5!skip
-plugins/modules/hpe_nimble_protection_template.py compile-3.5!skip
-plugins/modules/hpe_nimble_protection_schedule.py compile-3.5!skip
-plugins/modules/hpe_nimble_pool.py compile-3.5!skip
-plugins/modules/hpe_nimble_partner.py compile-3.5!skip
-plugins/modules/hpe_nimble_network.py compile-3.5!skip
-plugins/modules/hpe_nimble_initiator_group.py compile-3.5!skip
-plugins/modules/hpe_nimble_info.py compile-3.5!skip
-plugins/modules/hpe_nimble_group.py compile-3.5!skip
-plugins/modules/hpe_nimble_fc.py compile-3.5!skip
-plugins/modules/hpe_nimble_encryption.py compile-3.5!skip
-plugins/modules/hpe_nimble_disk.py compile-3.5!skip
-plugins/modules/hpe_nimble_chap_user.py compile-3.5!skip
-plugins/modules/hpe_nimble_array.py compile-3.5!skip
-plugins/modules/hpe_nimble_access_control_record.py compile-3.5!skip
-plugins/module_utils/hpe_nimble.py import-2.6!skip
-plugins/modules/hpe_nimble_volume.py import-2.6!skip
-plugins/modules/hpe_nimble_volume_collection.py import-2.6!skip
-plugins/modules/hpe_nimble_user.py import-2.6!skip
-plugins/modules/hpe_nimble_user_policy.py import-2.6!skip
-plugins/modules/hpe_nimble_snapshot.py import-2.6!skip
-plugins/modules/hpe_nimble_snapshot_collection.py import-2.6!skip
-plugins/modules/hpe_nimble_shelf.py import-2.6!skip
-plugins/modules/hpe_nimble_performance_policy.py import-2.6!skip
-plugins/modules/hpe_nimble_protection_template.py import-2.6!skip
-plugins/modules/hpe_nimble_protection_schedule.py import-2.6!skip
-plugins/modules/hpe_nimble_pool.py import-2.6!skip
-plugins/modules/hpe_nimble_partner.py import-2.6!skip
-plugins/modules/hpe_nimble_network.py import-2.6!skip
-plugins/modules/hpe_nimble_initiator_group.py import-2.6!skip
-plugins/modules/hpe_nimble_info.py import-2.6!skip
-plugins/modules/hpe_nimble_group.py import-2.6!skip
-plugins/modules/hpe_nimble_fc.py import-2.6!skip
-plugins/modules/hpe_nimble_encryption.py import-2.6!skip
-plugins/modules/hpe_nimble_disk.py import-2.6!skip
-plugins/modules/hpe_nimble_chap_user.py import-2.6!skip
-plugins/modules/hpe_nimble_array.py import-2.6!skip
-plugins/modules/hpe_nimble_access_control_record.py import-2.6!skip
-plugins/module_utils/hpe_nimble.py import-2.7!skip
-plugins/modules/hpe_nimble_volume.py import-2.7!skip
-plugins/modules/hpe_nimble_volume_collection.py import-2.7!skip
-plugins/modules/hpe_nimble_user.py import-2.7!skip
-plugins/modules/hpe_nimble_user_policy.py import-2.7!skip
-plugins/modules/hpe_nimble_snapshot.py import-2.7!skip
-plugins/modules/hpe_nimble_snapshot_collection.py import-2.7!skip
-plugins/modules/hpe_nimble_shelf.py import-2.7!skip
-plugins/modules/hpe_nimble_performance_policy.py import-2.7!skip
-plugins/modules/hpe_nimble_protection_template.py import-2.7!skip
-plugins/modules/hpe_nimble_protection_schedule.py import-2.7!skip
-plugins/modules/hpe_nimble_pool.py import-2.7!skip
-plugins/modules/hpe_nimble_partner.py import-2.7!skip
-plugins/modules/hpe_nimble_network.py import-2.7!skip
-plugins/modules/hpe_nimble_initiator_group.py import-2.7!skip
-plugins/modules/hpe_nimble_info.py import-2.7!skip
-plugins/modules/hpe_nimble_group.py import-2.7!skip
-plugins/modules/hpe_nimble_fc.py import-2.7!skip
-plugins/modules/hpe_nimble_encryption.py import-2.7!skip
-plugins/modules/hpe_nimble_disk.py import-2.7!skip
-plugins/modules/hpe_nimble_chap_user.py import-2.7!skip
-plugins/modules/hpe_nimble_array.py import-2.7!skip
-plugins/modules/hpe_nimble_access_control_record.py import-2.7!skip
-plugins/module_utils/hpe_nimble.py import-3.5!skip
-plugins/modules/hpe_nimble_volume.py import-3.5!skip
-plugins/modules/hpe_nimble_volume_collection.py import-3.5!skip
-plugins/modules/hpe_nimble_user.py import-3.5!skip
-plugins/modules/hpe_nimble_user_policy.py import-3.5!skip
-plugins/modules/hpe_nimble_snapshot.py import-3.5!skip
-plugins/modules/hpe_nimble_snapshot_collection.py import-3.5!skip
-plugins/modules/hpe_nimble_shelf.py import-3.5!skip
-plugins/modules/hpe_nimble_performance_policy.py import-3.5!skip
-plugins/modules/hpe_nimble_protection_template.py import-3.5!skip
-plugins/modules/hpe_nimble_protection_schedule.py import-3.5!skip
-plugins/modules/hpe_nimble_pool.py import-3.5!skip
-plugins/modules/hpe_nimble_partner.py import-3.5!skip
-plugins/modules/hpe_nimble_network.py import-3.5!skip
-plugins/modules/hpe_nimble_initiator_group.py import-3.5!skip
-plugins/modules/hpe_nimble_info.py import-3.5!skip
-plugins/modules/hpe_nimble_group.py import-3.5!skip
-plugins/modules/hpe_nimble_fc.py import-3.5!skip
-plugins/modules/hpe_nimble_encryption.py import-3.5!skip
-plugins/modules/hpe_nimble_disk.py import-3.5!skip
-plugins/modules/hpe_nimble_chap_user.py import-3.5!skip
-plugins/modules/hpe_nimble_array.py import-3.5!skip
-plugins/modules/hpe_nimble_access_control_record.py import-3.5!skip \ No newline at end of file
diff --git a/ansible_collections/hpe/nimble/tests/sanity/ignore-2.9.txt b/ansible_collections/hpe/nimble/tests/sanity/ignore-2.9.txt
deleted file mode 100644
index d25b59a9d..000000000
--- a/ansible_collections/hpe/nimble/tests/sanity/ignore-2.9.txt
+++ /dev/null
@@ -1,160 +0,0 @@
-plugins/modules/hpe_nimble_volume.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_volume_collection.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_user.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_user_policy.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_snapshot.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_snapshot_collection.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_shelf.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_performance_policy.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_protection_template.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_protection_schedule.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_pool.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_partner.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_network.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_initiator_group.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_info.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_group.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_fc.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_encryption.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_disk.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_chap_user.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_array.py validate-modules:missing-gplv3-license
-plugins/modules/hpe_nimble_access_control_record.py validate-modules:missing-gplv3-license
-plugins/module_utils/hpe_nimble.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_volume.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_volume_collection.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_user.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_user_policy.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_snapshot.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_snapshot_collection.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_shelf.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_performance_policy.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_protection_template.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_protection_schedule.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_pool.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_partner.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_network.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_initiator_group.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_info.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_group.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_fc.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_encryption.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_disk.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_chap_user.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_array.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/modules/hpe_nimble_access_control_record.py compile-2.6!skip # Python 2.6 is not supported on the controller
-plugins/module_utils/hpe_nimble.py compile-2.7!skip
-plugins/modules/hpe_nimble_volume.py compile-2.7!skip
-plugins/modules/hpe_nimble_volume_collection.py compile-2.7!skip
-plugins/modules/hpe_nimble_user.py compile-2.7!skip
-plugins/modules/hpe_nimble_user_policy.py compile-2.7!skip
-plugins/modules/hpe_nimble_snapshot.py compile-2.7!skip
-plugins/modules/hpe_nimble_snapshot_collection.py compile-2.7!skip
-plugins/modules/hpe_nimble_shelf.py compile-2.7!skip
-plugins/modules/hpe_nimble_performance_policy.py compile-2.7!skip
-plugins/modules/hpe_nimble_protection_template.py compile-2.7!skip
-plugins/modules/hpe_nimble_protection_schedule.py compile-2.7!skip
-plugins/modules/hpe_nimble_pool.py compile-2.7!skip
-plugins/modules/hpe_nimble_partner.py compile-2.7!skip
-plugins/modules/hpe_nimble_network.py compile-2.7!skip
-plugins/modules/hpe_nimble_initiator_group.py compile-2.7!skip
-plugins/modules/hpe_nimble_info.py compile-2.7!skip
-plugins/modules/hpe_nimble_group.py compile-2.7!skip
-plugins/modules/hpe_nimble_fc.py compile-2.7!skip
-plugins/modules/hpe_nimble_encryption.py compile-2.7!skip
-plugins/modules/hpe_nimble_disk.py compile-2.7!skip
-plugins/modules/hpe_nimble_chap_user.py compile-2.7!skip
-plugins/modules/hpe_nimble_array.py compile-2.7!skip
-plugins/modules/hpe_nimble_access_control_record.py compile-2.7!skip
-plugins/module_utils/hpe_nimble.py compile-3.5!skip
-plugins/modules/hpe_nimble_volume.py compile-3.5!skip
-plugins/modules/hpe_nimble_volume_collection.py compile-3.5!skip
-plugins/modules/hpe_nimble_user.py compile-3.5!skip
-plugins/modules/hpe_nimble_user_policy.py compile-3.5!skip
-plugins/modules/hpe_nimble_snapshot.py compile-3.5!skip
-plugins/modules/hpe_nimble_snapshot_collection.py compile-3.5!skip
-plugins/modules/hpe_nimble_shelf.py compile-3.5!skip
-plugins/modules/hpe_nimble_performance_policy.py compile-3.5!skip
-plugins/modules/hpe_nimble_protection_template.py compile-3.5!skip
-plugins/modules/hpe_nimble_protection_schedule.py compile-3.5!skip
-plugins/modules/hpe_nimble_pool.py compile-3.5!skip
-plugins/modules/hpe_nimble_partner.py compile-3.5!skip
-plugins/modules/hpe_nimble_network.py compile-3.5!skip
-plugins/modules/hpe_nimble_initiator_group.py compile-3.5!skip
-plugins/modules/hpe_nimble_info.py compile-3.5!skip
-plugins/modules/hpe_nimble_group.py compile-3.5!skip
-plugins/modules/hpe_nimble_fc.py compile-3.5!skip
-plugins/modules/hpe_nimble_encryption.py compile-3.5!skip
-plugins/modules/hpe_nimble_disk.py compile-3.5!skip
-plugins/modules/hpe_nimble_chap_user.py compile-3.5!skip
-plugins/modules/hpe_nimble_array.py compile-3.5!skip
-plugins/modules/hpe_nimble_access_control_record.py compile-3.5!skip
-plugins/module_utils/hpe_nimble.py import-2.6!skip
-plugins/modules/hpe_nimble_volume.py import-2.6!skip
-plugins/modules/hpe_nimble_volume_collection.py import-2.6!skip
-plugins/modules/hpe_nimble_user.py import-2.6!skip
-plugins/modules/hpe_nimble_user_policy.py import-2.6!skip
-plugins/modules/hpe_nimble_snapshot.py import-2.6!skip
-plugins/modules/hpe_nimble_snapshot_collection.py import-2.6!skip
-plugins/modules/hpe_nimble_shelf.py import-2.6!skip
-plugins/modules/hpe_nimble_performance_policy.py import-2.6!skip
-plugins/modules/hpe_nimble_protection_template.py import-2.6!skip
-plugins/modules/hpe_nimble_protection_schedule.py import-2.6!skip
-plugins/modules/hpe_nimble_pool.py import-2.6!skip
-plugins/modules/hpe_nimble_partner.py import-2.6!skip
-plugins/modules/hpe_nimble_network.py import-2.6!skip
-plugins/modules/hpe_nimble_initiator_group.py import-2.6!skip
-plugins/modules/hpe_nimble_info.py import-2.6!skip
-plugins/modules/hpe_nimble_group.py import-2.6!skip
-plugins/modules/hpe_nimble_fc.py import-2.6!skip
-plugins/modules/hpe_nimble_encryption.py import-2.6!skip
-plugins/modules/hpe_nimble_disk.py import-2.6!skip
-plugins/modules/hpe_nimble_chap_user.py import-2.6!skip
-plugins/modules/hpe_nimble_array.py import-2.6!skip
-plugins/modules/hpe_nimble_access_control_record.py import-2.6!skip
-plugins/module_utils/hpe_nimble.py import-2.7!skip
-plugins/modules/hpe_nimble_volume.py import-2.7!skip
-plugins/modules/hpe_nimble_volume_collection.py import-2.7!skip
-plugins/modules/hpe_nimble_user.py import-2.7!skip
-plugins/modules/hpe_nimble_user_policy.py import-2.7!skip
-plugins/modules/hpe_nimble_snapshot.py import-2.7!skip
-plugins/modules/hpe_nimble_snapshot_collection.py import-2.7!skip
-plugins/modules/hpe_nimble_shelf.py import-2.7!skip
-plugins/modules/hpe_nimble_performance_policy.py import-2.7!skip
-plugins/modules/hpe_nimble_protection_template.py import-2.7!skip
-plugins/modules/hpe_nimble_protection_schedule.py import-2.7!skip
-plugins/modules/hpe_nimble_pool.py import-2.7!skip
-plugins/modules/hpe_nimble_partner.py import-2.7!skip
-plugins/modules/hpe_nimble_network.py import-2.7!skip
-plugins/modules/hpe_nimble_initiator_group.py import-2.7!skip
-plugins/modules/hpe_nimble_info.py import-2.7!skip
-plugins/modules/hpe_nimble_group.py import-2.7!skip
-plugins/modules/hpe_nimble_fc.py import-2.7!skip
-plugins/modules/hpe_nimble_encryption.py import-2.7!skip
-plugins/modules/hpe_nimble_disk.py import-2.7!skip
-plugins/modules/hpe_nimble_chap_user.py import-2.7!skip
-plugins/modules/hpe_nimble_array.py import-2.7!skip
-plugins/modules/hpe_nimble_access_control_record.py import-2.7!skip
-plugins/module_utils/hpe_nimble.py import-3.5!skip
-plugins/modules/hpe_nimble_volume.py import-3.5!skip
-plugins/modules/hpe_nimble_volume_collection.py import-3.5!skip
-plugins/modules/hpe_nimble_user.py import-3.5!skip
-plugins/modules/hpe_nimble_user_policy.py import-3.5!skip
-plugins/modules/hpe_nimble_snapshot.py import-3.5!skip
-plugins/modules/hpe_nimble_snapshot_collection.py import-3.5!skip
-plugins/modules/hpe_nimble_shelf.py import-3.5!skip
-plugins/modules/hpe_nimble_performance_policy.py import-3.5!skip
-plugins/modules/hpe_nimble_protection_template.py import-3.5!skip
-plugins/modules/hpe_nimble_protection_schedule.py import-3.5!skip
-plugins/modules/hpe_nimble_pool.py import-3.5!skip
-plugins/modules/hpe_nimble_partner.py import-3.5!skip
-plugins/modules/hpe_nimble_network.py import-3.5!skip
-plugins/modules/hpe_nimble_initiator_group.py import-3.5!skip
-plugins/modules/hpe_nimble_info.py import-3.5!skip
-plugins/modules/hpe_nimble_group.py import-3.5!skip
-plugins/modules/hpe_nimble_fc.py import-3.5!skip
-plugins/modules/hpe_nimble_encryption.py import-3.5!skip
-plugins/modules/hpe_nimble_disk.py import-3.5!skip
-plugins/modules/hpe_nimble_chap_user.py import-3.5!skip
-plugins/modules/hpe_nimble_array.py import-3.5!skip
-plugins/modules/hpe_nimble_access_control_record.py import-3.5!skip \ No newline at end of file
diff --git a/ansible_collections/ibm/qradar/.ansible-lint b/ansible_collections/ibm/qradar/.ansible-lint
new file mode 100644
index 000000000..8d9bb70b8
--- /dev/null
+++ b/ansible_collections/ibm/qradar/.ansible-lint
@@ -0,0 +1,5 @@
+---
+profile: production
+
+exclude_paths:
+ - changelogs/changelog.yaml
diff --git a/ansible_collections/ibm/qradar/.github/dependabot.yml b/ansible_collections/ibm/qradar/.github/dependabot.yml
new file mode 100644
index 000000000..66f19d7e4
--- /dev/null
+++ b/ansible_collections/ibm/qradar/.github/dependabot.yml
@@ -0,0 +1,10 @@
+---
+version: 2
+updates:
+ - package-ecosystem: github-actions
+ directory: /
+ schedule:
+ interval: daily
+ open-pull-requests-limit: 3
+ labels:
+ - skip-changelog
diff --git a/ansible_collections/ibm/qradar/.github/release-drafter.yml b/ansible_collections/ibm/qradar/.github/release-drafter.yml
new file mode 100644
index 000000000..e3e5966e4
--- /dev/null
+++ b/ansible_collections/ibm/qradar/.github/release-drafter.yml
@@ -0,0 +1,3 @@
+---
+# see https://github.com/ansible-community/devtools
+_extends: ansible-community/devtools
diff --git a/ansible_collections/ansible/netcommon/.github/workflows/ack.yml b/ansible_collections/ibm/qradar/.github/workflows/ack.yml
index fda595dc5..ef09fe3d0 100644
--- a/ansible_collections/ansible/netcommon/.github/workflows/ack.yml
+++ b/ansible_collections/ibm/qradar/.github/workflows/ack.yml
@@ -9,7 +9,6 @@ concurrency:
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/ibm/qradar/.github/workflows/codecoverage.yml b/ansible_collections/ibm/qradar/.github/workflows/codecoverage.yml
new file mode 100644
index 000000000..606180741
--- /dev/null
+++ b/ansible_collections/ibm/qradar/.github/workflows/codecoverage.yml
@@ -0,0 +1,14 @@
+---
+name: Code Coverage
+
+on: # yamllint disable-line rule:truthy
+ push:
+ pull_request:
+ branches: [main]
+jobs:
+ codecoverage:
+ uses: ansible-network/github_actions/.github/workflows/coverage_network_devices.yml@main
+ with:
+ collection_pre_install: >-
+ git+https://github.com/ansible-collections/ansible.utils.git
+ git+https://github.com/ansible-collections/ansible.netcommon.git
diff --git a/ansible_collections/cisco/ios/.github/workflows/lint.yml b/ansible_collections/ibm/qradar/.github/workflows/lint.yml
index fbac38cbf..fbac38cbf 100644
--- a/ansible_collections/cisco/ios/.github/workflows/lint.yml
+++ b/ansible_collections/ibm/qradar/.github/workflows/lint.yml
diff --git a/ansible_collections/arista/eos/.github/workflows/push.yml b/ansible_collections/ibm/qradar/.github/workflows/push.yml
index 67940aa72..b8846a398 100644
--- a/ansible_collections/arista/eos/.github/workflows/push.yml
+++ b/ansible_collections/ibm/qradar/.github/workflows/push.yml
@@ -12,16 +12,15 @@ concurrency:
on: # yamllint disable-line rule:truthy
workflow_dispatch:
-
env:
- NAMESPACE: arista
- COLLECTION_NAME: eos
+ NAMESPACE: ibm
+ COLLECTION_NAME: qradar
ANSIBLE_COLLECTIONS_PATHS: ./
jobs:
update_release_draft:
uses: ansible/devtools/.github/workflows/push_network.yml@main
with:
- repo: ansible-collections/arista.eos
+ repo: ansible-collections/ibm.qradar
secrets:
BOT_PAT: ${{ secrets.BOT_PAT }}
diff --git a/ansible_collections/ibm/qradar/.github/workflows/release.yml b/ansible_collections/ibm/qradar/.github/workflows/release.yml
new file mode 100644
index 000000000..749b3c344
--- /dev/null
+++ b/ansible_collections/ibm/qradar/.github/workflows/release.yml
@@ -0,0 +1,13 @@
+---
+name: release
+on: # yamllint disable-line rule:truthy
+ release:
+ types: [published]
+jobs:
+ release:
+ uses: ansible/devtools/.github/workflows/release_collection.yml@main
+ with:
+ environment: release
+ secrets:
+ ah_token: ${{ secrets.AH_TOKEN }}
+ ansible_galaxy_api_key: ${{ secrets.ANSIBLE_GALAXY_API_KEY }}
diff --git a/ansible_collections/ibm/qradar/.github/workflows/test.yml b/ansible_collections/ibm/qradar/.github/workflows/tests.yml
index e2a19e00a..74056d553 100644
--- a/ansible_collections/ibm/qradar/.github/workflows/test.yml
+++ b/ansible_collections/ibm/qradar/.github/workflows/tests.yml
@@ -1,18 +1,18 @@
---
-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
sanity:
uses: ansible-network/github_actions/.github/workflows/sanity.yml@main
unit-galaxy:
@@ -24,18 +24,17 @@ jobs:
git+https://github.com/ansible-collections/ansible.utils.git
git+https://github.com/ansible-collections/ansible.netcommon.git
all_green:
- if: ${{ always() }}
+ if: ${{ always() && (github.event_name != 'schedule') }}
needs:
- - changelog
- sanity
- unit-galaxy
- unit-source
runs-on: ubuntu-latest
steps:
- run: >-
- python -c "assert set([
- '${{ needs.changelog.result }}',
+ python -c "assert 'failure' not in
+ set([
'${{ needs.sanity.result }}',
'${{ needs.unit-galaxy.result }}',
'${{ needs.unit-source.result }}'
- ]) == {'success'}" \ No newline at end of file
+ ])"
diff --git a/ansible_collections/ibm/qradar/.gitignore b/ansible_collections/ibm/qradar/.gitignore
index 651a7bc91..1f9858c45 100644
--- a/ansible_collections/ibm/qradar/.gitignore
+++ b/ansible_collections/ibm/qradar/.gitignore
@@ -1,3 +1,10 @@
+# CML/virl lab cache
+.virl/
+
+# A collection directory, resulting from the use of the pytest-ansible-units plugin
+collections/
+
+
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
@@ -103,9 +110,9 @@ venv.bak/
# mypy
.mypy_cache/
-# mazer / ansible collections
-releases/
-
-*.tar.gz
+# ide
+*.code-workspace
+.vscode/
+.DS_Store
-tests/output*
+changelogs/.plugin-cache.yaml
diff --git a/ansible_collections/ibm/qradar/.isort.cfg b/ansible_collections/ibm/qradar/.isort.cfg
new file mode 100644
index 000000000..3e6d0fb29
--- /dev/null
+++ b/ansible_collections/ibm/qradar/.isort.cfg
@@ -0,0 +1,6 @@
+[settings]
+known_first_party=ansible_collections.ibm.qradar
+line_length=100
+lines_after_imports=2
+lines_between_types=1
+profile=black
diff --git a/ansible_collections/ibm/qradar/.pre-commit-config.yaml b/ansible_collections/ibm/qradar/.pre-commit-config.yaml
index 7d4355f70..92ecede00 100644
--- a/ansible_collections/ibm/qradar/.pre-commit-config.yaml
+++ b/ansible_collections/ibm/qradar/.pre-commit-config.yaml
@@ -1,7 +1,12 @@
---
repos:
+ - repo: https://github.com/ansible-network/collection_prep
+ rev: 1.1.1
+ hooks:
+ - id: update-docs
+
- repo: https://github.com/pre-commit/pre-commit-hooks
- rev: v4.2.0
+ rev: v4.5.0
hooks:
- id: check-merge-conflict
- id: check-symlinks
@@ -10,12 +15,31 @@ repos:
- id: no-commit-to-branch
args: [--branch, main]
- id: trailing-whitespace
+
+ - repo: https://github.com/asottile/add-trailing-comma
+ rev: v3.1.0
+ hooks:
+ - id: add-trailing-comma
+
+ - repo: https://github.com/pre-commit/mirrors-prettier
+ rev: v3.1.0
+ hooks:
+ - id: prettier
+ entry: env CI=1 bash -c "prettier --list-different . || ec=$? && prettier --loglevel=error --write . && exit $ec"
+ pass_filenames: false
+ args: []
+ additional_dependencies:
+ - prettier
+ - prettier-plugin-toml
+
+ - repo: https://github.com/PyCQA/isort
+ rev: 5.12.0
+ hooks:
+ - id: isort
+ name: Sort import statements using isort
+ args: [--filter-files]
+
- repo: https://github.com/psf/black
- rev: 22.3.0
+ rev: 23.11.0
hooks:
- id: black
- args: [-l, "100"]
- - repo: https://github.com/ansible-network/collection_prep
- rev: 1.0.0
- hooks:
- - id: update-docs
diff --git a/ansible_collections/ibm/qradar/.prettierignore b/ansible_collections/ibm/qradar/.prettierignore
new file mode 100644
index 000000000..9f980a682
--- /dev/null
+++ b/ansible_collections/ibm/qradar/.prettierignore
@@ -0,0 +1,22 @@
+# Stuff we don't want priettier to ever to look into
+.*/
+
+# Environments
+.env
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+
+# A linked collection directory created by pytest-ansible-units
+
+collections/
+
+# Tracked but not manually edited
+
+# Tracked but manually formatted
+
+# WIP
+README.md
diff --git a/ansible_collections/ibm/qradar/CHANGELOG.rst b/ansible_collections/ibm/qradar/CHANGELOG.rst
index f937e8e9f..117d5fc77 100644
--- a/ansible_collections/ibm/qradar/CHANGELOG.rst
+++ b/ansible_collections/ibm/qradar/CHANGELOG.rst
@@ -4,6 +4,25 @@ IBM Qradar Collection Release Notes
.. contents:: Topics
+v3.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 `v2.1.0`.
+
+Major Changes
+-------------
+
+- Bumping `requires_ansible` to `>=2.14.0`, since previous ansible-core versions are EoL now.
+
+Bugfixes
+--------
+
+- A bunch of ansible-lint and ansible-test sanity issues have been fixed.
+
+
v2.1.0
======
diff --git a/ansible_collections/ibm/qradar/FILES.json b/ansible_collections/ibm/qradar/FILES.json
index 84a0f1790..03160ab27 100644
--- a/ansible_collections/ibm/qradar/FILES.json
+++ b/ansible_collections/ibm/qradar/FILES.json
@@ -8,146 +8,209 @@
"format": 1
},
{
- "name": ".github",
+ "name": "codecov.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4aa7e485dd4db6f8a55b046088c745def2b3145d9499ccda4e9a3336467dcea2",
+ "format": 1
+ },
+ {
+ "name": "LICENSE",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986",
+ "format": 1
+ },
+ {
+ "name": ".yamllint",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "827ef9e031ecdcaf137be239d33ef93fcbbc3611cbb6b30b0e507d0e03373d0e",
+ "format": 1
+ },
+ {
+ "name": "requirements.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": ".github/workflows",
+ "name": "meta/runtime.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "33dbe37da65e207c3cf01b0320d2e0505c515d9c8262d343ce0eeb54932cbc9f",
+ "format": 1
+ },
+ {
+ "name": "README.md",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9c74fb8b8254bac397a104e298c19f5c745fbd0a49668d0c3a8109d86b6e0bb0",
+ "format": 1
+ },
+ {
+ "name": "plugins",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": ".github/workflows/test.yml",
+ "name": "plugins/httpapi",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "plugins/httpapi/qradar.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "abbe2f2b782e28e478a011667782bcd93a86c21f1554f5eaa772305af4d37640",
+ "chksum_sha256": "23db40436b182dd7011133d48740f3ad61150b654bd0a59ea8d295dbde384b71",
"format": 1
},
{
- "name": "changelogs",
+ "name": "plugins/modules",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "changelogs/changelog.yaml",
+ "name": "plugins/modules/qradar_log_source_management.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c675ed616cbec4e8e3343eb024182ca9c7d6dbc1e72e3b8f3598da67349ff5bc",
+ "chksum_sha256": "c378a4caa2f71974a072f18eae5f3ec2347953c178c75ffe1f2633bf7dcb1897",
"format": 1
},
{
- "name": "changelogs/config.yaml",
+ "name": "plugins/modules/deploy.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d2c4dcbe8870d9e338d757b61e3f3cc08ab7f4535795d67a3df7b5f15e4fd6c8",
+ "chksum_sha256": "a343676ac8e349f33711cea53b6870b7248b76e6febbbfca1259d49eee4508e3",
"format": 1
},
{
- "name": "docs",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/rule.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "04108c2d38f900b5223ec1cd6d8ca6010f57d7d61f84c9518175f077f4d39bbf",
"format": 1
},
{
- "name": "docs/ibm.qradar.deploy_module.rst",
+ "name": "plugins/modules/qradar_rule.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "905ea7071de3986d5fec78b1314b7901838add60f05418861c47667c11762605",
+ "chksum_sha256": "04108c2d38f900b5223ec1cd6d8ca6010f57d7d61f84c9518175f077f4d39bbf",
"format": 1
},
{
- "name": "docs/ibm.qradar.log_source_management_module.rst",
+ "name": "plugins/modules/qradar_offense_action.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "967f8c4a1fffeab83b6d2b0a8a0a55098f8ed89cd5a5e947d88fe7c3860e508f",
+ "chksum_sha256": "cc4f52f737a9ffbae3dcc00b667883ef0e1ffde2993f23b9a14cec753fe8ce30",
"format": 1
},
{
- "name": "docs/ibm.qradar.offense_action_module.rst",
+ "name": "plugins/modules/offense_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "499aa85776594aa101b48286715c4f50980807f3aeb057e05c983c2b853ae1f3",
+ "chksum_sha256": "5169f96dcf88d13ee4f5e36c21142b1a4047baa39d537f83fdd4d54d69e87a9a",
"format": 1
},
{
- "name": "docs/ibm.qradar.offense_info_module.rst",
+ "name": "plugins/modules/log_source_management.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "147d44b8ed4d5fd6cf7fb4df19b370625e9064455e76f5ccad4139a979ba29c2",
+ "chksum_sha256": "c378a4caa2f71974a072f18eae5f3ec2347953c178c75ffe1f2633bf7dcb1897",
"format": 1
},
{
- "name": "docs/ibm.qradar.offense_note_module.rst",
+ "name": "plugins/modules/qradar_offense_note.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "20b656a582532cb4f46af1840c6d9e6bfb7e75299ce84b30a2aaa1f9bf9db15c",
+ "chksum_sha256": "5d946202d41494f6b5167bd2a61a41bcfd145930d963818392ae9af56a8003b4",
"format": 1
},
{
- "name": "docs/ibm.qradar.qradar_analytics_rules_module.rst",
+ "name": "plugins/modules/qradar_analytics_rules.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eaeff500aa899570ba58be93ecd66808c4959df923243b2373f07b43e4d18d43",
+ "chksum_sha256": "f9062cb8661e430f7bc1d765a0ca4d5a8aec4ba93a137f311c45b64334ffd30c",
"format": 1
},
{
- "name": "docs/ibm.qradar.qradar_httpapi.rst",
+ "name": "plugins/modules/qradar_log_sources_management.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d9bff624389781d9d2b517ccf2fb797811a98007aa3e0d6a999d3b0d462a2956",
+ "chksum_sha256": "037f16ccb809bb1a758e24402e4a59a3b45a3fe282206ac0571f7f897cb895d7",
"format": 1
},
{
- "name": "docs/ibm.qradar.qradar_log_sources_management_module.rst",
+ "name": "plugins/modules/qradar_rule_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "58f7e256f3556620aaf73fc4ef793713d3f021fa1ef4424b063ced7494d4752d",
+ "chksum_sha256": "186bcf87f8e837b4d6b268d46f249643275f4314b22d5e844e255516f0922d26",
"format": 1
},
{
- "name": "docs/ibm.qradar.rule_info_module.rst",
+ "name": "plugins/modules/qradar_deploy.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "607c6f296c8106aa22a070d4c6513c663ab3ae2fcc93e22f9b462d27b41fda53",
+ "chksum_sha256": "a343676ac8e349f33711cea53b6870b7248b76e6febbbfca1259d49eee4508e3",
"format": 1
},
{
- "name": "docs/ibm.qradar.rule_module.rst",
+ "name": "plugins/modules/offense_action.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "86039262bfcc0df113911178cc1fc5a8bae0e92b6a20d4bd0b79e7f76f337620",
+ "chksum_sha256": "cc4f52f737a9ffbae3dcc00b667883ef0e1ffde2993f23b9a14cec753fe8ce30",
"format": 1
},
{
- "name": "meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/offense_note.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5d946202d41494f6b5167bd2a61a41bcfd145930d963818392ae9af56a8003b4",
"format": 1
},
{
- "name": "meta/runtime.yml",
+ "name": "plugins/modules/rule_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "414e97f033acc6afc08f9bb522bbf5db1b4f359a820c01f82be4bc50f1e55352",
+ "chksum_sha256": "186bcf87f8e837b4d6b268d46f249643275f4314b22d5e844e255516f0922d26",
"format": 1
},
{
- "name": "plugins",
+ "name": "plugins/modules/qradar_offense_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5169f96dcf88d13ee4f5e36c21142b1a4047baa39d537f83fdd4d54d69e87a9a",
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
+ "name": "plugins/module_utils/qradar.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b9d944e009465426cbfc542f0e8ac3ab6d475bfe3fc25b4e2ccf37bc51d369d1",
+ "format": 1
+ },
+ {
"name": "plugins/action",
"ftype": "dir",
"chksum_type": null,
@@ -165,168 +228,210 @@
"name": "plugins/action/qradar_analytics_rules.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "69740224f09fe0f6dff44597fa30c5707fd77c0e6429e479fdc5feffaa50843e",
+ "chksum_sha256": "6683ffbf1d19b81081e232dce41743e2bc9b5be6e216ba8775b4217e7fa297ca",
"format": 1
},
{
"name": "plugins/action/qradar_log_sources_management.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "24ffae07d93bae8d3850f0bba2c50c7b10c7d124a57542f24542b9ac112faa91",
+ "chksum_sha256": "3aab75520fc41aa84f40c0a32dd78aea75a0f97ec5c5a1dc97d74e9c1b6adb8e",
"format": 1
},
{
- "name": "plugins/httpapi",
+ "name": ".ansible-lint",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b47f72e159f93a5ff07ea2534752e0fa977b214e9ac05c667fa83ac13be4e50c",
+ "format": 1
+ },
+ {
+ "name": "test-requirements.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ef11b7e31c53ed88a2352faacda33806dda00f45d4e9cce540a40e6a47ccbe73",
+ "format": 1
+ },
+ {
+ "name": "tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/httpapi/qradar.py",
+ "name": "tests/sanity",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/sanity/ignore-2.9.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ba3b495f9dfdff81318a594c4b1874548239b916f3a9a30b6e9775a35761c5d3",
+ "chksum_sha256": "9246dc0a460b34f99c668d253511798595dc611dfda1fb828bdb9d13672fdfed",
"format": 1
},
{
- "name": "plugins/module_utils",
+ "name": "tests/unit",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/qradar.py",
+ "name": "tests/unit/requirements.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ae62dfc3637bfb6eae56ae40e922b35087b550fc7554ab47bbf94b53d43de1a4",
+ "chksum_sha256": "49ba996dc4735c3463e9af561344346dfae14bcc1a68096ce78364b377f0df1f",
"format": 1
},
{
- "name": "plugins/modules",
+ "name": "tests/unit/plugins",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/qradar_deploy.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e061cdb5af3a9c2f2c7f14ca300feb52a2cd41e3669f7814311cfcedaeec08f7",
+ "name": "tests/unit/plugins/modules",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/qradar_log_source_management.py",
+ "name": "tests/unit/plugins/modules/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b8f915dec02b41d29af6680823bf538dd2f648d1142124cf54565ad7ba260e49",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/modules/qradar_offense_action.py",
+ "name": "tests/unit/plugins/modules/conftest.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2f25e23ff4bba3332a877fb5cf6f2c2f28e7a776cacdfdb08648d5d9527d00db",
+ "chksum_sha256": "e0ae70fa7c2a5e56d7f02a47c3602398cff60c8eb021772ac59a76df2a234048",
"format": 1
},
{
- "name": "plugins/modules/qradar_offense_info.py",
+ "name": "tests/unit/plugins/modules/utils.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "de02f673e3ff3653ca8f9e8a43e980ef7811fc0e4b8ede36c10cb495c2ce44d7",
+ "chksum_sha256": "36b272718629a9491578048908464bdd009437cfe6a1fd1c40ffe6dbebaa1875",
"format": 1
},
{
- "name": "plugins/modules/qradar_offense_note.py",
+ "name": "tests/unit/plugins/action",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/unit/plugins/action/test_qradar_analytics_rules.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "511912ef4baaafb001439ee96559843a2ac2054d77e7e4e4f97fef79b7261f94",
+ "chksum_sha256": "f699006252320b9fb0ec4d6f329641f30ea4396fda8cc0f26ae81828f64b46d5",
"format": 1
},
{
- "name": "plugins/modules/qradar_rule.py",
+ "name": "tests/unit/plugins/action/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ed52d8c0cfc0e1860240cf2b913eeba6f7263c6b0029aac8468410b8aae8e141",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/modules/qradar_rule_info.py",
+ "name": "tests/unit/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5a68a767a121239541d4685d65022b48b4b990c12a679406d232c089a686b456",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/modules/deploy.py",
+ "name": "tests/unit/mock",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/unit/mock/vault_helper.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e061cdb5af3a9c2f2c7f14ca300feb52a2cd41e3669f7814311cfcedaeec08f7",
+ "chksum_sha256": "55bd0e924dcc22d050612c944bff0ef745e51faac9260dce9b9b2018c4c8a661",
"format": 1
},
{
- "name": "plugins/modules/log_source_management.py",
+ "name": "tests/unit/mock/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b8f915dec02b41d29af6680823bf538dd2f648d1142124cf54565ad7ba260e49",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/modules/offense_action.py",
+ "name": "tests/unit/mock/procenv.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2f25e23ff4bba3332a877fb5cf6f2c2f28e7a776cacdfdb08648d5d9527d00db",
+ "chksum_sha256": "4cde8da110df91dab071c776c8694e6f8f0ce859933436a8fb1598f168cccdb9",
"format": 1
},
{
- "name": "plugins/modules/offense_info.py",
+ "name": "tests/unit/mock/loader.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "de02f673e3ff3653ca8f9e8a43e980ef7811fc0e4b8ede36c10cb495c2ce44d7",
+ "chksum_sha256": "07eb6a715b3bc2a0f03d6fbaa5428cb74796403e1d30348f0d6c88022cea3eed",
"format": 1
},
{
- "name": "plugins/modules/offense_note.py",
+ "name": "tests/unit/mock/yaml_helper.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "511912ef4baaafb001439ee96559843a2ac2054d77e7e4e4f97fef79b7261f94",
+ "chksum_sha256": "134eef238c83a9611799871b743e49e9bfbcd8bdddf2cc6a7bf69fd1000345b3",
"format": 1
},
{
- "name": "plugins/modules/qradar_analytics_rules.py",
+ "name": "tests/unit/mock/path.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "20a9edb860d5e98e1bb08f4320bcbd13726e0b52cbfa23f55875e10c00212472",
+ "chksum_sha256": "e7a8f960d10a413dd86f44485a1437366491514b819c869984058a11676f34ba",
"format": 1
},
{
- "name": "plugins/modules/qradar_log_sources_management.py",
+ "name": "tests/unit/compat",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/unit/compat/unittest.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f5fa473f263ccc2ebd15724c2722b20891f6a818729b0d966d2f00a35fc6acc2",
+ "chksum_sha256": "727203a3846be41893b78a4b77852a1658925e936fb19539551958a5d8e8fb81",
"format": 1
},
{
- "name": "plugins/modules/rule.py",
+ "name": "tests/unit/compat/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ed52d8c0cfc0e1860240cf2b913eeba6f7263c6b0029aac8468410b8aae8e141",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/modules/rule_info.py",
+ "name": "tests/unit/compat/mock.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5a68a767a121239541d4685d65022b48b4b990c12a679406d232c089a686b456",
+ "chksum_sha256": "b91b074a0bb9cfda8560f02aa3cefe0bfaae9b045f8386597bfe342f1e5a0717",
"format": 1
},
{
- "name": "tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/.keep",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
@@ -344,84 +449,84 @@
"format": 1
},
{
- "name": "tests/integration/targets/deploy",
+ "name": "tests/integration/targets/offense",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/deploy/tasks",
+ "name": "tests/integration/targets/offense/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/deploy/tasks/main.yml",
+ "name": "tests/integration/targets/offense/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "83cc8a6c22f6d0424f4595ed06c3253351fdfb61c88a8cf9a4ce640121f17a63",
"format": 1
},
{
- "name": "tests/integration/targets/deploy/aliases",
+ "name": "tests/integration/targets/offense/aliases",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e317ad2cb83962cf790cc6c46c9c099b2b1636a63a18192532a624f196b78df1",
"format": 1
},
{
- "name": "tests/integration/targets/log_source_management",
+ "name": "tests/integration/targets/qradar_rule",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/log_source_management/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/qradar_rule/aliases",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e317ad2cb83962cf790cc6c46c9c099b2b1636a63a18192532a624f196b78df1",
"format": 1
},
{
- "name": "tests/integration/targets/log_source_management/tasks/main.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6821a3548927a93503e37fd42e276c8ebc829bc72ae55dc47b8f3c20e32f11d8",
+ "name": "tests/integration/targets/qradar_offense",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/log_source_management/aliases",
+ "name": "tests/integration/targets/qradar_offense/aliases",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e317ad2cb83962cf790cc6c46c9c099b2b1636a63a18192532a624f196b78df1",
"format": 1
},
{
- "name": "tests/integration/targets/offense",
+ "name": "tests/integration/targets/rule",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/offense/tasks",
+ "name": "tests/integration/targets/rule/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/offense/tasks/main.yml",
+ "name": "tests/integration/targets/rule/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "985949c5779a18b1d13a05230a565e24d4edc5b8e9d87ae16ea47c07a44e3a75",
+ "chksum_sha256": "171c995ef3f9449275934955792aa3a86b570b9f4511109e3c4e69f14714cb96",
"format": 1
},
{
- "name": "tests/integration/targets/offense/aliases",
+ "name": "tests/integration/targets/rule/aliases",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e317ad2cb83962cf790cc6c46c9c099b2b1636a63a18192532a624f196b78df1",
@@ -456,465 +561,430 @@
"format": 1
},
{
- "name": "tests/integration/targets/qradar_log_sources_management",
+ "name": "tests/integration/targets/deploy",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/qradar_log_sources_management/defaults",
+ "name": "tests/integration/targets/deploy/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/qradar_log_sources_management/defaults/main.yaml",
+ "name": "tests/integration/targets/deploy/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c8e82c716422654d049fd043bbf84d624ed532f96741e032f52f14c19e970d3e",
- "format": 1
- },
- {
- "name": "tests/integration/targets/qradar_log_sources_management/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/qradar_log_sources_management/meta/main.yaml",
+ "name": "tests/integration/targets/deploy/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
+ "chksum_sha256": "e317ad2cb83962cf790cc6c46c9c099b2b1636a63a18192532a624f196b78df1",
"format": 1
},
{
- "name": "tests/integration/targets/qradar_log_sources_management/tasks",
+ "name": "tests/integration/targets/log_source_management",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/qradar_log_sources_management/tasks/cli.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "79c2820b2b63ca8b1b4025dfdac534f3296e24d72ad688c06d33268cfafff497",
+ "name": "tests/integration/targets/log_source_management/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/qradar_log_sources_management/tasks/main.yaml",
+ "name": "tests/integration/targets/log_source_management/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e7d7f58a1d24f52718c31cc560ba27eaf69da2df9e8b0d26516560b547d1d9da",
+ "chksum_sha256": "346485b9603298f42471c95f7a2c22f84ad34e589e8379e2fd50456c3b5761e0",
"format": 1
},
{
- "name": "tests/integration/targets/qradar_log_sources_management/tasks/redirection.yaml",
+ "name": "tests/integration/targets/log_source_management/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5b071a65a98718e6fbc859cf577103adc6dd5700bc7263877936d391639e61f3",
+ "chksum_sha256": "e317ad2cb83962cf790cc6c46c9c099b2b1636a63a18192532a624f196b78df1",
"format": 1
},
{
- "name": "tests/integration/targets/qradar_log_sources_management/tests",
+ "name": "tests/integration/targets/qradar_log_sources_management",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/qradar_log_sources_management/tests/cli",
+ "name": "tests/integration/targets/qradar_log_sources_management/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/qradar_log_sources_management/tests/cli/_populate_log_sources_config.yaml",
+ "name": "tests/integration/targets/qradar_log_sources_management/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d216d1ab07e6220f2d5dcd22f84c70849db6945d9a3680d4190a92e4198c24b7",
+ "chksum_sha256": "75d83a8aa1677129e967a13404e097759d4685abd50f922d149cb45ae112b00f",
"format": 1
},
{
- "name": "tests/integration/targets/qradar_log_sources_management/tests/cli/_remove_log_sources_config.yaml",
+ "name": "tests/integration/targets/qradar_log_sources_management/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f817d766182cdf2e099e8d96f468bf1e7db3159091394578b72097767ec5fceb",
+ "chksum_sha256": "2f9456c14163cd3739af82e9b03804574e4927cc87610498b538f98780ce8057",
"format": 1
},
{
- "name": "tests/integration/targets/qradar_log_sources_management/tests/cli/deleted.yaml",
+ "name": "tests/integration/targets/qradar_log_sources_management/tasks/redirection.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "18f5096b5f3e533da91e48f0659696f616adb83d3f48a940b2711a1c34f48af3",
+ "chksum_sha256": "5650670078ee98a1c74dde60512bf365e9c8e6390fd4f252c6a520c127467e48",
"format": 1
},
{
- "name": "tests/integration/targets/qradar_log_sources_management/tests/cli/gathered.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "69e7f5c3460b00653d155a4e71b882125ca7c183429e951ddd069965afbe9c3e",
+ "name": "tests/integration/targets/qradar_log_sources_management/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/qradar_log_sources_management/tests/cli/merged.yaml",
+ "name": "tests/integration/targets/qradar_log_sources_management/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "304640c1a0e6ee8436f147745e62b44cb536b176a8cecb50441e0ca2c7c11e8a",
+ "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3",
"format": 1
},
{
- "name": "tests/integration/targets/qradar_log_sources_management/tests/cli/replaced.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "038a9601139d83cec40b40f711bc6eca1602bae2d988fde4bcdd84b6be18c6a4",
+ "name": "tests/integration/targets/qradar_log_sources_management/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/qradar_log_sources_management/tests/cli/rtt.yaml",
+ "name": "tests/integration/targets/qradar_log_sources_management/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4cb3f0ad53ddd35f3d47cef6262bb97af8b045b625ed5bcf9310950604ffaf84",
+ "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/qradar_log_sources_management/vars",
+ "name": "tests/integration/targets/qradar_log_sources_management/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/qradar_log_sources_management/vars/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a7ce38445031d76134d0cd52780f5905abb1cffce74718fe61fefa1c8fbf2f9f",
- "format": 1
- },
- {
- "name": "tests/integration/targets/qradar_offense",
+ "name": "tests/integration/targets/qradar_log_sources_management/tests/cli",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/qradar_offense/aliases",
+ "name": "tests/integration/targets/qradar_log_sources_management/tests/cli/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e317ad2cb83962cf790cc6c46c9c099b2b1636a63a18192532a624f196b78df1",
- "format": 1
- },
- {
- "name": "tests/integration/targets/qradar_rule",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "f06ab1369d820859393d3838da2e825f17c7e21013c60bb43838f21400d923b0",
"format": 1
},
{
- "name": "tests/integration/targets/qradar_rule/aliases",
+ "name": "tests/integration/targets/qradar_log_sources_management/tests/cli/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e317ad2cb83962cf790cc6c46c9c099b2b1636a63a18192532a624f196b78df1",
+ "chksum_sha256": "a6920423a420a47539b311c48d41fd3be3ef3921b9047304800329fcd62b8735",
"format": 1
},
{
- "name": "tests/integration/targets/rule",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/qradar_log_sources_management/tests/cli/_populate_log_sources_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c173df5f78694395fbd097074b34b81ff3f9fa50cc173199ae0010e380d4f383",
"format": 1
},
{
- "name": "tests/integration/targets/rule/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/qradar_log_sources_management/tests/cli/rtt.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7f4dee852a9328374d5cf8fe6e9c8b5528683ea451efd41b17f0af60e06ba4da",
"format": 1
},
{
- "name": "tests/integration/targets/rule/tasks/main.yml",
+ "name": "tests/integration/targets/qradar_log_sources_management/tests/cli/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1d47767a0f7a9e41ac6cfe46ae8f0184a05fa4f81f5ef7b64c0387fce1a163c1",
+ "chksum_sha256": "07a48637fa1060daceb0128e415ea0fb734ec991740a3e9258222c66e334395e",
"format": 1
},
{
- "name": "tests/integration/targets/rule/aliases",
+ "name": "tests/integration/targets/qradar_log_sources_management/tests/cli/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e317ad2cb83962cf790cc6c46c9c099b2b1636a63a18192532a624f196b78df1",
+ "chksum_sha256": "f2732c7f6f198a99a472093912a8f15659bae5461248fb6a0fb9c7a99aada896",
"format": 1
},
{
- "name": "tests/integration/target-prefixes.network",
+ "name": "tests/integration/targets/qradar_log_sources_management/tests/cli/_remove_log_sources_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f4d2f34d7884174dabd0e91e1f2ae1a22499f44e634261344ad065a167f5f862",
+ "chksum_sha256": "e70da2a6a5f0f5b26592c1e50d533193cc9ae0c11b7989eb5ba1777c97d5d811",
"format": 1
},
{
- "name": "tests/sanity",
+ "name": "tests/integration/targets/qradar_log_sources_management/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/sanity/ignore-2.9.txt",
+ "name": "tests/integration/targets/qradar_log_sources_management/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9246dc0a460b34f99c668d253511798595dc611dfda1fb828bdb9d13672fdfed",
+ "chksum_sha256": "bca95d24f2c640405026076e1b28e28ae4d24ebdd6082eb0288fa087d7de178b",
"format": 1
},
{
- "name": "tests/unit",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/target-prefixes.network",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f4d2f34d7884174dabd0e91e1f2ae1a22499f44e634261344ad065a167f5f862",
"format": 1
},
{
- "name": "tests/unit/compat",
+ "name": "docs",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/compat/__init__.py",
+ "name": "docs/ibm.qradar.qradar_log_sources_management_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "610f0ea43aed7b158537e14f0350c93cd50a1550d21e13385c80516b7fa20b6c",
"format": 1
},
{
- "name": "tests/unit/compat/builtins.py",
+ "name": "docs/ibm.qradar.qradar_analytics_rules_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ba13a350ade8ef804336f888d5883b8e54f8bddfb9d0fadc10277a8ca6540f4e",
+ "chksum_sha256": "e0f2ac972ba74463502acf9315e827a85c5c421fb4418a133f6dec38848fbfd7",
"format": 1
},
{
- "name": "tests/unit/compat/mock.py",
+ "name": "docs/ibm.qradar.rule_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "52ecd54195edca933104eb3e937547c7395ff604ada2694a8b184c2c1466dbf1",
+ "chksum_sha256": "86039262bfcc0df113911178cc1fc5a8bae0e92b6a20d4bd0b79e7f76f337620",
"format": 1
},
{
- "name": "tests/unit/compat/unittest.py",
+ "name": "docs/ibm.qradar.rule_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3ed698b1faec43d87a2c1ebcb15a2aae48b09ff355bb9a598e5f5a1c928dbb30",
- "format": 1
- },
- {
- "name": "tests/unit/mock",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "607c6f296c8106aa22a070d4c6513c663ab3ae2fcc93e22f9b462d27b41fda53",
"format": 1
},
{
- "name": "tests/unit/mock/__init__.py",
+ "name": "docs/ibm.qradar.qradar_httpapi.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "d9bff624389781d9d2b517ccf2fb797811a98007aa3e0d6a999d3b0d462a2956",
"format": 1
},
{
- "name": "tests/unit/mock/loader.py",
+ "name": "docs/ibm.qradar.offense_action_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "99243cafb4042ee1354d81e3f21647b18bba2b81e1bcd0d77d5487d6069740b9",
+ "chksum_sha256": "499aa85776594aa101b48286715c4f50980807f3aeb057e05c983c2b853ae1f3",
"format": 1
},
{
- "name": "tests/unit/mock/path.py",
+ "name": "docs/ibm.qradar.offense_note_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "77760b066115f34f1ecce2387f8194ba254f3dc44ed89f439f3e6adfd258cdf1",
+ "chksum_sha256": "20b656a582532cb4f46af1840c6d9e6bfb7e75299ce84b30a2aaa1f9bf9db15c",
"format": 1
},
{
- "name": "tests/unit/mock/procenv.py",
+ "name": "docs/ibm.qradar.offense_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d7f9e134ebd607e1b2910d62cd8997535c8a2cced4473a2bf5cdaae2233e3049",
+ "chksum_sha256": "147d44b8ed4d5fd6cf7fb4df19b370625e9064455e76f5ccad4139a979ba29c2",
"format": 1
},
{
- "name": "tests/unit/mock/vault_helper.py",
+ "name": "docs/ibm.qradar.deploy_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "feae23166b6eb502f7d9b77c314970516c9a99aaad7de01295b4dfdad53c5c09",
+ "chksum_sha256": "905ea7071de3986d5fec78b1314b7901838add60f05418861c47667c11762605",
"format": 1
},
{
- "name": "tests/unit/mock/yaml_helper.py",
+ "name": "docs/ibm.qradar.log_source_management_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "94e2f3c867d2582c9f7a0e99e544718e355025c4a51c9925e70158fa89b3609e",
- "format": 1
- },
- {
- "name": "tests/unit/plugins",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "967f8c4a1fffeab83b6d2b0a8a0a55098f8ed89cd5a5e947d88fe7c3860e508f",
"format": 1
},
{
- "name": "tests/unit/plugins/action",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": ".isort.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fd259158086fc19b6cd30087f4022537f0fb602e16d472fa52e01ff49ce48371",
"format": 1
},
{
- "name": "tests/unit/plugins/action/__init__.py",
+ "name": "pyproject.toml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "ba383ecc0b6b3a23e4bce8269e716ba103def0943564ff0a821718ddd4786070",
"format": 1
},
{
- "name": "tests/unit/plugins/action/test_qradar_analytics_rules.py",
+ "name": "bindep.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "82ca5c7c9be3c8ad8c86dccba1b7f48e2deea8be67efd24689fdfab994136ea9",
+ "chksum_sha256": "80645079eb025b3a905b4775ac545d080a3d7d35d537c31e04f7197c94315ab5",
"format": 1
},
{
- "name": "tests/unit/plugins/modules",
+ "name": "changelogs",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/plugins/modules/__init__.py",
+ "name": "changelogs/config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "0c775b3aad450f0d3f6579f77bff72150841c1dd8564dc439cc2398dc82b2c95",
"format": 1
},
{
- "name": "tests/unit/plugins/modules/conftest.py",
+ "name": "changelogs/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2af4846e50d461a131ad3edfb609fbb39a9eb1796048c62e4ead8234bcf5c6a1",
+ "chksum_sha256": "d3d2a4383c362e6ba094f8907ff2faba56fbae071b3e284456df83b128c9fea1",
"format": 1
},
{
- "name": "tests/unit/plugins/modules/utils.py",
+ "name": "tox.ini",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ecb4e4c4a3a490b49d33d043d246bea11580cfe5460e70630a793c2ffd0ff450",
+ "chksum_sha256": "beb3313789623e5570d0871f6115ba563a0d92ea75e8e89cbd9f79045b4fe279",
"format": 1
},
{
- "name": "tests/unit/__init__.py",
+ "name": "CHANGELOG.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "b29e19b072604f36b57d5a15296f4dafe6823a88b2283a0d470627bdc65549e9",
"format": 1
},
{
- "name": "tests/unit/requirements.txt",
+ "name": ".gitignore",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "49ba996dc4735c3463e9af561344346dfae14bcc1a68096ce78364b377f0df1f",
+ "chksum_sha256": "179a6d0780422c32653a71b9395a3ecb8b3859346ffa3e38ca3c8d90f8063fd2",
"format": 1
},
{
- "name": "tests/.keep",
+ "name": ".pre-commit-config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "abfba9f6b56a992c574b0be4bd190d3a078279a6f7f357391562bdc8c9c5499b",
"format": 1
},
{
- "name": ".gitignore",
+ "name": ".prettierignore",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "63e02bf68769e25aba8db3f3cf2c1cd8b1e92e71ce3ef2d13e949b994e424b75",
+ "chksum_sha256": "9881cacd6494858bc3c50f32917a7971c275f5dbeaa27d438985eacb344f9857",
"format": 1
},
{
- "name": ".pre-commit-config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6aabafd87ba32cf5d946aedd801dd41ee6fa90c7699a54f7d52c02b9c6576e14",
+ "name": ".github",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": ".yamllint",
+ "name": ".github/dependabot.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "827ef9e031ecdcaf137be239d33ef93fcbbc3611cbb6b30b0e507d0e03373d0e",
+ "chksum_sha256": "e39a1df1f81f943962e6cfb4f8ec384804ae7099cc8bc26c3bfdb957ba9de2d3",
"format": 1
},
{
- "name": "CHANGELOG.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d7387333cff83fd516f8ec5f3808dabcf3e7bff7da05f76ab1793e6fbd6836db",
+ "name": ".github/workflows",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "LICENSE",
+ "name": ".github/workflows/codecoverage.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986",
+ "chksum_sha256": "c897a9049e77f9061073ee895aa4a5304cadc2523c566d410b6c4b5b1946d88f",
"format": 1
},
{
- "name": "README.md",
+ "name": ".github/workflows/lint.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1e50ccabd2166f551342cba98c6747604ed6d7df8fdda10fcfedbf89837df04d",
+ "chksum_sha256": "4aeac57f14d48d82a859c822f84a0573419958bc70708f19caa6daac5c771ff9",
"format": 1
},
{
- "name": "bindep.txt",
+ "name": ".github/workflows/ack.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f20e24c3b24e3738a72623924e20848bb3bab9ea951099b7d2fcce091b9673a8",
+ "chksum_sha256": "d6b4d340f95c3abd91a7689d511b4aa003702eb6b68830c69d09c75fc944b732",
"format": 1
},
{
- "name": "pyproject.toml",
+ "name": ".github/workflows/release.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "39dc64b0a646edff79e3a08ae4d3bae8fe707149df149814149d45ce07c30937",
+ "chksum_sha256": "a63b3e77a75b16d7295bc98c7fef3e23ecd1fd27e551e91f79144e3a6fbe13ac",
"format": 1
},
{
- "name": "requirements.txt",
+ "name": ".github/workflows/push.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "97239c29b7314dd70fcd9b2b90a51bb0e84a78971ce572571dd363d376a87867",
"format": 1
},
{
- "name": "test-requirements.txt",
+ "name": ".github/workflows/tests.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eaa5e13a5ebe3344585b2e5ac61a6974a6d5b132f13a815d3a0f68c36ecfe8ad",
+ "chksum_sha256": "b9c53e96a44fcc5957dfb2e48a5d09f43c5bee9f925d053811c435747830a75a",
"format": 1
},
{
- "name": "tox.ini",
+ "name": ".github/release-drafter.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fa849abc071b00742c00b96e3df480355a2af2c60e4c920f085a9ac5616d8d4b",
+ "chksum_sha256": "7cbc785c8661033cd9dd7a60897484fce731cbe3dc124a689fc3e934b1d974fb",
"format": 1
}
],
diff --git a/ansible_collections/ibm/qradar/MANIFEST.json b/ansible_collections/ibm/qradar/MANIFEST.json
index abcace9e9..4d1b3d2e8 100644
--- a/ansible_collections/ibm/qradar/MANIFEST.json
+++ b/ansible_collections/ibm/qradar/MANIFEST.json
@@ -2,7 +2,7 @@
"collection_info": {
"namespace": "ibm",
"name": "qradar",
- "version": "2.1.0",
+ "version": "3.0.0",
"authors": [
"Ansible Security Team (https://github.com/ansible-security)"
],
@@ -12,12 +12,10 @@
"qradar"
],
"description": "Ansible Security Collection for IBM Qradar SIEM",
- "license": [
- "GPL-3.0-or-later"
- ],
- "license_file": null,
+ "license": [],
+ "license_file": "LICENSE",
"dependencies": {
- "ansible.netcommon": ">=2.5.1"
+ "ansible.netcommon": ">=6.0.0"
},
"repository": "https://github.com/ansible-collections/ibm.qradar",
"documentation": "https://github.com/ansible-collections/ibm.qradar",
@@ -28,7 +26,7 @@
"name": "FILES.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6ba5743d2a4af148e4e25deb85d86aa62e1b5ba35f8f0c1ef23a52b863b2b2a4",
+ "chksum_sha256": "5e67b8e606839e38a3a6795f2495d5a4d7c7caac085992ab25ed04a98bb004a4",
"format": 1
},
"format": 1
diff --git a/ansible_collections/ibm/qradar/README.md b/ansible_collections/ibm/qradar/README.md
index dc0cb7f3a..3c410ada1 100644
--- a/ansible_collections/ibm/qradar/README.md
+++ b/ansible_collections/ibm/qradar/README.md
@@ -1,6 +1,8 @@
# IBM QRadar Ansible Collection
-[![CI](https://zuul-ci.org/gated.svg)](https://dashboard.zuul.ansible.com/t/ansible/project/github.com/ansible-collections/ibm.qradar) <!--[![Codecov](https://img.shields.io/codecov/c/github/ansible-collections/ibm.qradar)](https://codecov.io/gh/ansible-collections/ibm.qradar)-->
+[![CI](https://zuul-ci.org/gated.svg)](https://dashboard.zuul.ansible.com/t/ansible/project/github.com/ansible-collections/ibm.qradar) <!--[![Codecov](https://img.shields.io/codecov/c/github/ansible-collections/vyos)](https://codecov.io/gh/ansible-collections/ibm.qradar)-->
+[![Codecov](https://codecov.io/gh/ansible-collections/ibm.qradar/branch/main/graph/badge.svg)](https://codecov.io/gh/ansible-collections/ibm.qradar)
+[![CI](https://github.com/ansible-collections/ibm.qradar/actions/workflows/tests.yml/badge.svg?branch=main&event=schedule)](https://github.com/ansible-collections/ibm.qradar/actions/workflows/tests.yml)
This is the [Ansible
Collection](https://docs.ansible.com/ansible/latest/dev_guide/developing_collections.html)
@@ -16,8 +18,10 @@ and provide feedback about.
<!--start requires_ansible-->
## 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`).
Plugins and modules within a collection may be tested with only specific Ansible versions.
A collection may contain metadata that identifies these versions.
PEP440 is the schema used to describe the versions of Ansible.
@@ -72,8 +76,8 @@ qradar.example.com
ansible_network_os=ibm.qradar.qradar
ansible_user=admin
ansible_httpapi_pass=SuperSekretPassword
-ansible_httpapi_use_ssl=yes
-ansible_httpapi_validate_certs=yes
+ansible_httpapi_use_ssl=true
+ansible_httpapi_validate_certs=true
ansible_connection=httpapi
```
diff --git a/ansible_collections/ibm/qradar/bindep.txt b/ansible_collections/ibm/qradar/bindep.txt
index 1eeaeb4de..ba9c980fb 100644
--- a/ansible_collections/ibm/qradar/bindep.txt
+++ b/ansible_collections/ibm/qradar/bindep.txt
@@ -4,5 +4,3 @@
gcc-c++ [doc test platform:rpm]
python3-devel [test platform:rpm]
python3 [test platform:rpm]
-libssh-devel [test platform:rpm]
-libssh-dev [test platform:dpkg] \ No newline at end of file
diff --git a/ansible_collections/ibm/qradar/changelogs/changelog.yaml b/ansible_collections/ibm/qradar/changelogs/changelog.yaml
index 35d420526..b07985e36 100644
--- a/ansible_collections/ibm/qradar/changelogs/changelog.yaml
+++ b/ansible_collections/ibm/qradar/changelogs/changelog.yaml
@@ -2,68 +2,85 @@ ancestor: null
releases:
1.0.0:
modules:
- - description: Trigger a qradar configuration deployment
- name: ibm.qradar.deploy
- namespace: ''
- - description: Manage Log Sources in QRadar
- name: ibm.qradar.log_source_management
- namespace: ''
- - description: Take action on a QRadar Offense
- name: ibm.qradar.offense_action
- namespace: ''
- - description: Obtain information about one or many QRadar Offenses, with filter
- options
- name: ibm.qradar.offense_info
- namespace: ''
- - description: Create or update a QRadar Offense Note
- name: ibm.qradar.offense_note
- namespace: ''
- - description: Manage state of QRadar Rules, with filter options
- name: ibm.qradar.rule
- namespace: ''
- - description: Obtain information about one or many QRadar Rules, with filter
- options
- name: ibm.qradar.rule_info
- namespace: ''
- release_date: '2020-06-22'
+ - description: Trigger a qradar configuration deployment
+ name: ibm.qradar.deploy
+ namespace: ""
+ - description: Manage Log Sources in QRadar
+ name: ibm.qradar.log_source_management
+ namespace: ""
+ - description: Take action on a QRadar Offense
+ name: ibm.qradar.offense_action
+ namespace: ""
+ - description:
+ Obtain information about one or many QRadar Offenses, with filter
+ options
+ name: ibm.qradar.offense_info
+ namespace: ""
+ - description: Create or update a QRadar Offense Note
+ name: ibm.qradar.offense_note
+ namespace: ""
+ - description: Manage state of QRadar Rules, with filter options
+ name: ibm.qradar.rule
+ namespace: ""
+ - description:
+ Obtain information about one or many QRadar Rules, with filter
+ options
+ name: ibm.qradar.rule_info
+ namespace: ""
+ release_date: "2020-06-22"
1.0.1:
changes:
release_summary: Removed tech preview from collection Readme file.
- release_date: '2020-06-23'
+ release_date: "2020-06-23"
1.0.2:
changes:
release_summary: Releasing 1.0.2 with updated changelog.
- release_date: '2020-08-27'
+ release_date: "2020-08-27"
1.0.3:
changes:
release_summary: Re-releasing 1.0.2 with updated galaxy file.
- release_date: '2020-09-1'
2.0.0:
changes:
major_changes:
- - Minimum required ansible.netcommon version is 2.5.1.
- - Updated base plugin references to ansible.netcommon.
+ - Minimum required ansible.netcommon version is 2.5.1.
+ - Updated base plugin references to ansible.netcommon.
fragments:
- - netcommon_ref_update.yaml
- - update_tests_unit_black_requirements.yaml
- release_date: '2022-04-29'
+ - netcommon_ref_update.yaml
+ - update_tests_unit_black_requirements.yaml
+ release_date: "2022-04-29"
2.1.0:
changes:
minor_changes:
- - Add Qradar Analytics rules resource module.
- - Add Qradar Log Sources Management resource module.
+ - Add Qradar Analytics rules resource module.
+ - Add Qradar Log Sources Management resource module.
fragments:
- - add_qradar_analytics_rules_module.yaml
- - add_qradar_log_sources_management_module.yaml
- - doc_update_for_deprecation.yaml
- - fix_doc_for_sanity_failures.yaml
- - doc_update_with_correct_version.yaml
- - undo_changelog_override.yaml
+ - add_qradar_analytics_rules_module.yaml
+ - add_qradar_log_sources_management_module.yaml
+ - doc_update_for_deprecation.yaml
+ - doc_update_with_correct_version.yaml
+ - fix_doc_for_sanity_failures.yaml
+ - undo_changelog_override.yaml
modules:
- - description: Qradar Analytics Rules Management resource module
- name: qradar_analytics_rules
- namespace: private.var.folders._0.m716s5gx1g3d5j1dw_s2w1ph0000gn.T.antsibull-changelog9yvlq4ax.collections.ansible_collections.ibm.qradar.plugins.modules
- - description: Qradar Log Sources Management resource module
- name: qradar_log_sources_management
- namespace: private.var.folders._0.m716s5gx1g3d5j1dw_s2w1ph0000gn.T.antsibull-changelog9yvlq4ax.collections.ansible_collections.ibm.qradar.plugins.modules
- release_date: '2022-09-07'
+ - description: Qradar Analytics Rules Management resource module
+ name: qradar_analytics_rules
+ namespace: ""
+ - description: Qradar Log Sources Management resource module
+ name: qradar_log_sources_management
+ namespace: ""
+ release_date: "2022-09-07"
+ 3.0.0:
+ changes:
+ bugfixes:
+ - A bunch of ansible-lint and ansible-test sanity issues have been fixed.
+ 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 `v2.1.0`.
+ fragments:
+ - codecov_pr.yml
+ - prep_300.yaml
+ - updates.yaml
+ release_date: "2023-12-01"
diff --git a/ansible_collections/ibm/qradar/changelogs/config.yaml b/ansible_collections/ibm/qradar/changelogs/config.yaml
index c0c71629b..9959d2506 100644
--- a/ansible_collections/ibm/qradar/changelogs/config.yaml
+++ b/ansible_collections/ibm/qradar/changelogs/config.yaml
@@ -1,4 +1,5 @@
-changelog_filename_template: CHANGELOG.rst
+---
+changelog_filename_template: ../CHANGELOG.rst
changelog_filename_version_depth: 0
changes_file: changelog.yaml
changes_format: combined
@@ -10,21 +11,21 @@ prelude_section_name: release_summary
prelude_section_title: Release Summary
flatmap: true
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: IBM Qradar Collection
trivial_section_name: trivial
diff --git a/ansible_collections/ibm/qradar/codecov.yml b/ansible_collections/ibm/qradar/codecov.yml
new file mode 100644
index 000000000..c77c91a90
--- /dev/null
+++ b/ansible_collections/ibm/qradar/codecov.yml
@@ -0,0 +1,15 @@
+---
+codecov:
+ require_ci_to_pass: true
+comment:
+ layout: " diff, flags, files"
+ behavior: default
+ require_changes: false
+ require_base: false
+ require_head: true
+coverage:
+ status:
+ patch: false
+ project:
+ default:
+ threshold: 0.3%
diff --git a/ansible_collections/ibm/qradar/docs/ibm.qradar.qradar_analytics_rules_module.rst b/ansible_collections/ibm/qradar/docs/ibm.qradar.qradar_analytics_rules_module.rst
index bc657fd5b..99b3c7c81 100644
--- a/ansible_collections/ibm/qradar/docs/ibm.qradar.qradar_analytics_rules_module.rst
+++ b/ansible_collections/ibm/qradar/docs/ibm.qradar.qradar_analytics_rules_module.rst
@@ -249,7 +249,7 @@ Examples
# Using GATHERED state
# --------------------
- - name: Get information about the Rule named "Ansible Example DDOS Rule"
+ - name: Get information about the Rule named "Ansible Example DDOS Rule"
ibm.qradar.qradar_analytics_rules:
config:
name: "Ansible Example DDOS Rule"
@@ -274,7 +274,7 @@ Examples
# owner: admin
# type: EVENT
- - name: Get information about the Rule with ID 100443
+ - name: Get information about the Rule with ID 100443
ibm.qradar.qradar_analytics_rules:
config:
id: 100443
diff --git a/ansible_collections/ibm/qradar/docs/ibm.qradar.qradar_log_sources_management_module.rst b/ansible_collections/ibm/qradar/docs/ibm.qradar.qradar_log_sources_management_module.rst
index f8611f8dd..5ed48ef1e 100644
--- a/ansible_collections/ibm/qradar/docs/ibm.qradar.qradar_log_sources_management_module.rst
+++ b/ansible_collections/ibm/qradar/docs/ibm.qradar.qradar_log_sources_management_module.rst
@@ -606,7 +606,7 @@ Examples
- name: "Apache HTTP Server logs"
type_name: "Apache HTTP Server"
description: "REPLACED Apache HTTP Server remote logs from rsyslog"
- identifier: "192.0.2.1"
+ identifier: "192.0.2.1"
# RUN output:
# -----------
diff --git a/ansible_collections/ibm/qradar/meta/runtime.yml b/ansible_collections/ibm/qradar/meta/runtime.yml
index 157f6c130..755d4c391 100644
--- a/ansible_collections/ibm/qradar/meta/runtime.yml
+++ b/ansible_collections/ibm/qradar/meta/runtime.yml
@@ -31,4 +31,4 @@ plugin_routing:
redirect: ibm.qradar.qradar_log_source_management
log_sources_management:
redirect: ibm.qradar.qradar_log_sources_management
-requires_ansible: '>=2.9.10'
+requires_ansible: ">=2.14.0"
diff --git a/ansible_collections/ibm/qradar/plugins/action/qradar_analytics_rules.py b/ansible_collections/ibm/qradar/plugins/action/qradar_analytics_rules.py
index 906cbc9e5..559869c6f 100644
--- a/ansible_collections/ibm/qradar/plugins/action/qradar_analytics_rules.py
+++ b/ansible_collections/ibm/qradar/plugins/action/qradar_analytics_rules.py
@@ -23,27 +23,25 @@ The module file for qradar_analytics_rules
from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
import json
-from ansible.plugins.action import ActionBase
-from ansible.module_utils.connection import Connection
+
from ansible.module_utils._text import to_text
+from ansible.module_utils.connection import Connection
from ansible.module_utils.six.moves.urllib.parse import quote
-
-from ansible_collections.ansible.netcommon.plugins.module_utils.network.common import (
- utils,
+from ansible.plugins.action import ActionBase
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common import utils
+from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import (
+ AnsibleArgSpecValidator,
)
+
from ansible_collections.ibm.qradar.plugins.module_utils.qradar import (
QRadarRequest,
remove_unsupported_keys_from_payload_dict,
)
-from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import (
- AnsibleArgSpecValidator,
-)
-from ansible_collections.ibm.qradar.plugins.modules.qradar_analytics_rules import (
- DOCUMENTATION,
-)
+from ansible_collections.ibm.qradar.plugins.modules.qradar_analytics_rules import DOCUMENTATION
class ActionModule(ActionBase):
@@ -86,13 +84,13 @@ class ActionModule(ActionBase):
"""
if search_for_resource.get("id"):
api_obj_url = self.api_object + "/{0}".format(
- search_for_resource["id"]
+ search_for_resource["id"],
)
elif search_for_resource.get("name"):
api_obj_url = self.api_object + "?filter={0}".format(
quote(
- 'name="{0}"'.format(to_text(search_for_resource["name"]))
- )
+ 'name="{0}"'.format(to_text(search_for_resource["name"])),
+ ),
)
elif search_for_resource.get("range"):
api_obj_url = self.api_object
@@ -104,10 +102,7 @@ class ActionModule(ActionBase):
if (
rule_source_exists
and len(rule_source_exists) == 1
- and (
- search_for_resource.get("name")
- and not search_for_resource.get("id")
- )
+ and (search_for_resource.get("name") and not search_for_resource.get("id"))
):
rule_source_exists = rule_source_exists[0]
return rule_source_exists
@@ -124,13 +119,14 @@ class ActionModule(ActionBase):
after = {}
changed = False
rule_exists = self.search_for_resource(
- qradar_request, module_config_params
+ qradar_request,
+ module_config_params,
)
if rule_exists:
changed = True
before = rule_exists
code, qradar_return_data = qradar_request.delete(
- self.api_object + "/{0}".format(rule_exists["id"])
+ self.api_object + "/{0}".format(rule_exists["id"]),
)
config.update({"before": before, "after": after})
else:
@@ -149,7 +145,8 @@ class ActionModule(ActionBase):
changed = False
rule_exists = self.search_for_resource(
- qradar_request, module_config_params
+ qradar_request,
+ module_config_params,
)
if rule_exists:
if isinstance(rule_exists, list):
@@ -168,7 +165,7 @@ class ActionModule(ActionBase):
)
if qradar_return_data[0] >= 200:
config.update(
- {"before": before, "after": qradar_return_data[1]}
+ {"before": before, "after": qradar_return_data[1]},
)
else:
config.update({"before": before})
@@ -179,10 +176,9 @@ class ActionModule(ActionBase):
self._result = super(ActionModule, self).run(tmp, task_vars)
headers = None
if self._task.args.get("config"):
- self._task.args[
- "config"
- ] = remove_unsupported_keys_from_payload_dict(
- self._task.args["config"], self.supported_params
+ self._task.args["config"] = remove_unsupported_keys_from_payload_dict(
+ self._task.args["config"],
+ self.supported_params,
)
self._check_argspec()
if self._result.get("failed"):
@@ -191,20 +187,23 @@ class ActionModule(ActionBase):
headers = {
"Content-Type": "application/json",
"Range": "items={0}".format(
- self._task.args["config"]["range"]
+ self._task.args["config"]["range"],
),
}
conn = Connection(self._connection.socket_path)
if headers:
conn_request = QRadarRequest(
- connection=conn, headers=headers, task_vars=task_vars
+ connection=conn,
+ headers=headers,
+ task_vars=task_vars,
)
else:
conn_request = QRadarRequest(connection=conn, task_vars=task_vars)
if self._task.args["state"] == "gathered":
if self._task.args.get("config"):
self._result["gathered"] = self.search_for_resource(
- conn_request, self._task.args["config"]
+ conn_request,
+ self._task.args["config"],
)
elif self._task.args["state"] == "merged":
if self._task.args.get("config"):
@@ -212,7 +211,8 @@ class ActionModule(ActionBase):
self._result[self.module_return],
self._result["changed"],
) = self.configure_module_api(
- conn_request, self._task.args["config"]
+ conn_request,
+ self._task.args["config"],
)
elif self._task.args["state"] == "deleted":
if self._task.args.get("config"):
@@ -220,7 +220,8 @@ class ActionModule(ActionBase):
self._result[self.module_return],
self._result["changed"],
) = self.delete_module_api_config(
- conn_request, self._task.args["config"]
+ conn_request,
+ self._task.args["config"],
)
return self._result
diff --git a/ansible_collections/ibm/qradar/plugins/action/qradar_log_sources_management.py b/ansible_collections/ibm/qradar/plugins/action/qradar_log_sources_management.py
index 5d5efcd5e..c09c32227 100644
--- a/ansible_collections/ibm/qradar/plugins/action/qradar_log_sources_management.py
+++ b/ansible_collections/ibm/qradar/plugins/action/qradar_log_sources_management.py
@@ -23,27 +23,28 @@ The module file for qradar_log_sources_management
from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
-from copy import copy
import json
-from ansible.plugins.action import ActionBase
+
+from copy import copy
+
from ansible.errors import AnsibleActionFail
from ansible.module_utils.connection import Connection
from ansible.module_utils.six.moves.urllib.parse import quote
-
-from ansible_collections.ansible.netcommon.plugins.module_utils.network.common import (
- utils,
+from ansible.plugins.action import ActionBase
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common import utils
+from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import (
+ AnsibleArgSpecValidator,
)
+
from ansible_collections.ibm.qradar.plugins.module_utils.qradar import (
QRadarRequest,
find_dict_in_list,
list_to_dict,
remove_unsupported_keys_from_payload_dict,
)
-from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import (
- AnsibleArgSpecValidator,
-)
from ansible_collections.ibm.qradar.plugins.modules.qradar_log_sources_management import (
DOCUMENTATION,
)
@@ -55,11 +56,13 @@ class ActionModule(ActionBase):
def __init__(self, *args, **kwargs):
super(ActionModule, self).__init__(*args, **kwargs)
self._result = None
- self.api_object = (
- "/api/config/event_sources/log_source_management/log_sources"
+ self.api_object = "/api/config/event_sources/log_source_management/log_sources"
+ self.api_object_types = (
+ "/api/config/event_sources/log_source_management/log_source_types?filter="
+ )
+ self.api_object_search = (
+ "/api/config/event_sources/log_source_management/log_sources?filter="
)
- self.api_object_types = "/api/config/event_sources/log_source_management/log_source_types?filter="
- self.api_object_search = "/api/config/event_sources/log_source_management/log_sources?filter="
self.api_return = "log_sources_management"
self.module_return = "qradar_log_sources_management"
self.supported_params = [
@@ -98,9 +101,8 @@ class ActionModule(ActionBase):
def set_log_source_values(self, qradar_request, config_params):
# find log source types details
if config_params.get("type_name"):
-
api_object = self.api_object_types + "{0}".format(
- quote('name="{0}"'.format(config_params["type_name"]))
+ quote('name="{0}"'.format(config_params["type_name"])),
)
code, log_source_type_found = qradar_request.get(api_object)
if config_params.get("type_id"):
@@ -112,7 +114,7 @@ class ActionModule(ActionBase):
config_params.pop("type_name")
else:
raise AnsibleActionFail(
- "Incompatible type provided, please consult QRadar Documentation for Log Source Types!"
+ "Incompatible type provided, please consult QRadar Documentation for Log Source Types!",
)
if log_source_type_found:
@@ -124,7 +126,7 @@ class ActionModule(ActionBase):
)
if not found_dict_in_list:
config_params.fail_json(
- msg="Incompatible protocol_type_id provided, please consult QRadar Documentation for Log Source Types"
+ msg="Incompatible protocol_type_id provided, please consult QRadar Documentation for Log Source Types",
)
elif log_source_type_found[0].get("protocol_types"):
# Set it to the default as provided by the QRadar Instance
@@ -142,27 +144,29 @@ class ActionModule(ActionBase):
"id": config_params["protocol_type_id"],
"name": "identifier",
"value": config_params["identifier"],
- }
+ },
]
config_params.pop("identifier")
return config_params
def search_for_resource_name(
- self, qradar_request, search_resource_by_names=None
+ self,
+ qradar_request,
+ search_resource_by_names=None,
):
search_result = []
if isinstance(search_resource_by_names, list):
for each in search_resource_by_names:
each = utils.remove_empties(each)
query_api_object = self.api_object_search + "{0}".format(
- quote('name="{0}"'.format(each["name"]))
+ quote('name="{0}"'.format(each["name"])),
)
code, log_source_exists = qradar_request.get(query_api_object)
if log_source_exists and (code >= 200 and code < 300):
search_result.append(log_source_exists[0])
elif isinstance(search_resource_by_names, str):
query_api_object = self.api_object_search + "{0}".format(
- quote('name="{0}"'.format(search_resource_by_names))
+ quote('name="{0}"'.format(search_resource_by_names)),
)
code, log_source_exists = qradar_request.get(query_api_object)
if log_source_exists and (code >= 200 and code < 300):
@@ -182,12 +186,13 @@ class ActionModule(ActionBase):
for each in module_config_params:
each = utils.remove_empties(each)
log_source_exists = self.search_for_resource_name(
- qradar_request, each["name"]
+ qradar_request,
+ each["name"],
)
if log_source_exists:
before.append(log_source_exists)
query_object = self.api_object + "/{0}".format(
- log_source_exists["id"]
+ log_source_exists["id"],
)
code, qradar_return_data = qradar_request.delete(query_object)
if code >= 200 and code < 300:
@@ -207,7 +212,8 @@ class ActionModule(ActionBase):
each = utils.remove_empties(each)
each = self.set_log_source_values(conn_request, each)
search_result = self.search_for_resource_name(
- conn_request, each["name"]
+ conn_request,
+ each["name"],
)
if search_result:
if search_result["name"] == each["name"]:
@@ -219,15 +225,15 @@ class ActionModule(ActionBase):
if diff:
if self._task.args["state"] == "merged":
each = utils.remove_empties(
- utils.dict_merge(search_result, each)
+ utils.dict_merge(search_result, each),
)
temp_request_param.append(each)
elif self._task.args["state"] == "replaced":
query_object = self.api_object + "/{0}".format(
- search_result["id"]
+ search_result["id"],
)
code, qradar_return_data = conn_request.delete(
- query_object
+ query_object,
)
temp_request_param.append(each)
else:
@@ -254,7 +260,7 @@ class ActionModule(ActionBase):
"Failed with http_response: {0} and message: {1}".format(
response["http_response"]["message"],
response["message"],
- )
+ ),
)
config.update({"before": before, "after": after})
else:
@@ -266,10 +272,9 @@ class ActionModule(ActionBase):
self._supports_check_mode = True
self._result = super(ActionModule, self).run(tmp, task_vars)
if self._task.args.get("config"):
- self._task.args[
- "config"
- ] = remove_unsupported_keys_from_payload_dict(
- self._task.args["config"], self.supported_params
+ self._task.args["config"] = remove_unsupported_keys_from_payload_dict(
+ self._task.args["config"],
+ self.supported_params,
)
self._check_argspec()
if self._result.get("failed"):
@@ -279,20 +284,19 @@ class ActionModule(ActionBase):
if self._task.args["state"] == "gathered":
if self._task.args.get("config"):
self._result["gathered"] = self.search_for_resource_name(
- conn_request, self._task.args["config"]
+ conn_request,
+ self._task.args["config"],
)
else:
self._result["gathered"] = conn_request.get(self.api_object)
- elif (
- self._task.args["state"] == "merged"
- or self._task.args["state"] == "replaced"
- ):
+ elif self._task.args["state"] == "merged" or self._task.args["state"] == "replaced":
if self._task.args.get("config"):
(
self._result[self.module_return],
self._result["changed"],
) = self.configure_module_api(
- conn_request, self._task.args["config"]
+ conn_request,
+ self._task.args["config"],
)
elif self._task.args["state"] == "deleted":
if self._task.args.get("config"):
@@ -300,7 +304,8 @@ class ActionModule(ActionBase):
self._result[self.module_return],
self._result["changed"],
) = self.delete_module_api_config(
- conn_request, self._task.args["config"]
+ conn_request,
+ self._task.args["config"],
)
return self._result
diff --git a/ansible_collections/ibm/qradar/plugins/httpapi/qradar.py b/ansible_collections/ibm/qradar/plugins/httpapi/qradar.py
index 004c7815e..1b394ceee 100644
--- a/ansible_collections/ibm/qradar/plugins/httpapi/qradar.py
+++ b/ansible_collections/ibm/qradar/plugins/httpapi/qradar.py
@@ -3,6 +3,7 @@
from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
DOCUMENTATION = """
@@ -19,14 +20,11 @@ version_added: "1.0.0"
import json
from ansible.module_utils.basic import to_text
-from ansible.module_utils.six.moves.urllib.error import HTTPError
-from ansible_collections.ansible.netcommon.plugins.plugin_utils.httpapi_base import (
- HttpApiBase,
-)
from ansible.module_utils.connection import ConnectionError
-from ansible_collections.ibm.qradar.plugins.module_utils.qradar import (
- BASE_HEADERS,
-)
+from ansible.module_utils.six.moves.urllib.error import HTTPError
+from ansible_collections.ansible.netcommon.plugins.plugin_utils.httpapi_base import HttpApiBase
+
+from ansible_collections.ibm.qradar.plugins.module_utils.qradar import BASE_HEADERS
class HttpApi(HttpApiBase):
@@ -36,7 +34,10 @@ class HttpApi(HttpApiBase):
try:
self._display_request(request_method)
response, response_data = self.connection.send(
- path, payload, method=request_method, headers=headers
+ path,
+ payload,
+ method=request_method,
+ headers=headers,
)
value = self._get_response_value(response_data)
diff --git a/ansible_collections/ibm/qradar/plugins/module_utils/qradar.py b/ansible_collections/ibm/qradar/plugins/module_utils/qradar.py
index e1569863f..0b57ba7c7 100644
--- a/ansible_collections/ibm/qradar/plugins/module_utils/qradar.py
+++ b/ansible_collections/ibm/qradar/plugins/module_utils/qradar.py
@@ -6,15 +6,17 @@
from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
-from ansible.module_utils.urls import CertificateError
-from ansible.module_utils.six.moves.urllib.parse import quote_plus
-from ansible.module_utils.connection import ConnectionError
-from ansible.module_utils.connection import Connection
+import json
+
+from copy import copy
+from ssl import CertificateError
+
from ansible.module_utils._text import to_text
+from ansible.module_utils.connection import Connection, ConnectionError
from ansible.module_utils.six import iteritems
-from copy import copy
-import json
+from ansible.module_utils.six.moves.urllib.parse import quote_plus
BASE_HEADERS = {"Content-Type": "application/json", "Version": "9.1"}
@@ -43,17 +45,17 @@ def set_offense_values(module, qradar_request):
found_closing_reason = qradar_request.get_by_path(
"api/siem/offense_closing_reasons?filter={0}".format(
quote_plus(
- 'text="{0}"'.format(module.params["closing_reason"])
- )
- )
+ 'text="{0}"'.format(module.params["closing_reason"]),
+ ),
+ ),
)
if found_closing_reason:
module.params["closing_reason_id"] = found_closing_reason[0]["id"]
else:
module.fail_json(
"Unable to find closing_reason text: {0}".format(
- module.params["closing_reason"]
- )
+ module.params["closing_reason"],
+ ),
)
if module.params["status"]:
@@ -97,7 +99,7 @@ def list_to_dict(input_dict):
if each.get("id") or each.get("id") == 0:
each.pop("id")
each_key_values = "_".join(
- [str(x) for x in each.values()]
+ [str(x) for x in each.values()],
)
temp_dict.update({each_key_values: each})
input_dict[k] = temp_dict
@@ -141,20 +143,23 @@ class QRadarRequest(object):
response = {}
try:
code, response = self.connection.send_request(
- method, uri, payload=payload, headers=self.headers
+ method,
+ uri,
+ payload=payload,
+ headers=self.headers,
)
except ConnectionError as e:
self.module.fail_json(
- msg="connection error occurred: {0}".format(e)
+ msg="connection error occurred: {0}".format(e),
)
except CertificateError as e:
self.module.fail_json(
- msg="certificate error occurred: {0}".format(e)
+ msg="certificate error occurred: {0}".format(e),
)
except ValueError as e:
try:
self.module.fail_json(
- msg="certificate not found: {0}".format(e)
+ msg="certificate not found: {0}".format(e),
)
except AttributeError:
pass
@@ -167,7 +172,7 @@ class QRadarRequest(object):
):
return {}
if to_text("The rule does not exist.") in to_text(
- response["description"]
+ response["description"],
):
return code, {}
@@ -180,15 +185,17 @@ class QRadarRequest(object):
else:
self.module.fail_json(
msg="qradar httpapi returned error {0} with message {1}".format(
- code, response
- )
+ code,
+ response,
+ ),
)
elif not (code >= 200 and code < 300):
try:
self.module.fail_json(
msg="qradar httpapi returned error {0} with message {1}".format(
- code, response
- )
+ code,
+ response,
+ ),
)
except AttributeError:
pass
@@ -229,7 +236,7 @@ class QRadarRequest(object):
except TypeError as e:
self.module.fail_json(
- msg="invalid data type provided: {0}".format(e)
+ msg="invalid data type provided: {0}".format(e),
)
def post_by_path(self, rest_path, data=None):
diff --git a/ansible_collections/ibm/qradar/plugins/modules/deploy.py b/ansible_collections/ibm/qradar/plugins/modules/deploy.py
index dc41acd99..40bb41244 100644
--- a/ansible_collections/ibm/qradar/plugins/modules/deploy.py
+++ b/ansible_collections/ibm/qradar/plugins/modules/deploy.py
@@ -6,6 +6,7 @@
from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
DOCUMENTATION = """
@@ -37,22 +38,19 @@ EXAMPLES = """
type: INCREMENTAL
"""
-from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils._text import to_text
+from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.ibm.qradar.plugins.module_utils.qradar import (
- QRadarRequest,
-)
+from ansible_collections.ibm.qradar.plugins.module_utils.qradar import QRadarRequest
def main():
-
argspec = dict(
type=dict(
choices=["INCREMENTAL", "FULL"],
required=False,
default="INCREMENTAL",
- )
+ ),
)
module = AnsibleModule(argument_spec=argspec, supports_check_mode=False)
@@ -63,12 +61,11 @@ def main():
)
qradar_return_data = qradar_request.post_by_path(
- "api/staged_config/deploy_status"
+ "api/staged_config/deploy_status",
)
if "message" in qradar_return_data and (
- to_text("No changes to deploy")
- in to_text(qradar_return_data["message"])
+ to_text("No changes to deploy") in to_text(qradar_return_data["message"])
):
module.exit_json(
msg="No changes to deploy",
@@ -78,7 +75,7 @@ def main():
else:
module.exit_json(
msg="Successfully initiated {0} deployment.".format(
- module.params["type"]
+ module.params["type"],
),
qradar_return_data=qradar_return_data,
changed=True,
diff --git a/ansible_collections/ibm/qradar/plugins/modules/log_source_management.py b/ansible_collections/ibm/qradar/plugins/modules/log_source_management.py
index fa793a596..18f2a7ecd 100644
--- a/ansible_collections/ibm/qradar/plugins/modules/log_source_management.py
+++ b/ansible_collections/ibm/qradar/plugins/modules/log_source_management.py
@@ -6,6 +6,7 @@
from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
DOCUMENTATION = """
@@ -73,31 +74,31 @@ EXAMPLES = """
identifier: "192.168.1.101"
"""
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils._text import to_text
+import json
+from ansible.module_utils._text import to_text
+from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.six.moves.urllib.parse import quote
+
from ansible_collections.ibm.qradar.plugins.module_utils.qradar import (
QRadarRequest,
find_dict_in_list,
)
-import json
-
def set_log_source_values(module, qradar_request):
if module.params["type_name"]:
code, query_response = qradar_request.get(
"/api/config/event_sources/log_source_management/log_source_types?filter={0}".format(
- quote('name="{0}"'.format(module.params["type_name"]))
- )
+ quote('name="{0}"'.format(module.params["type_name"])),
+ ),
)
log_source_type_found = query_response[0]
if module.params["type_id"]:
code, query_response = qradar_request.get(
"/api/config/event_sources/log_source_management/log_source_types?filter={0}".format(
- quote('name="{0}"'.format(module.params["type_name"]))
- )
+ quote('name="{0}"'.format(module.params["type_name"])),
+ ),
)
code, log_source_type_found = query_response[0]
if log_source_type_found:
@@ -105,7 +106,7 @@ def set_log_source_values(module, qradar_request):
module.params["type_id"] = log_source_type_found["id"]
else:
module.fail_json(
- msg="Incompatible type provided, please consult QRadar Documentation for Log Source Types"
+ msg="Incompatible type provided, please consult QRadar Documentation for Log Source Types",
)
if module.params["protocol_type_id"]:
@@ -116,25 +117,24 @@ def set_log_source_values(module, qradar_request):
)
if not found_dict_in_list:
module.fail_json(
- msg="Incompatible protocol_type_id provided, please consult QRadar Documentation for Log Source Types"
+ msg="Incompatible protocol_type_id provided, please consult QRadar Documentation for Log Source Types",
)
else:
# Set it to the default as provided by the QRadar Instance
- module.params["protocol_type_id"] = log_source_type_found[
- "protocol_types"
- ][0]["protocol_id"]
+ module.params["protocol_type_id"] = log_source_type_found["protocol_types"][0][
+ "protocol_id"
+ ]
module.params["protocol_parameters"] = [
{
"id": module.params["protocol_type_id"],
"name": "identifier",
"value": module.params["identifier"],
- }
+ },
]
def main():
-
argspec = dict(
name=dict(required=True, type="str"),
state=dict(choices=["present", "absent"], required=True),
@@ -159,12 +159,11 @@ def main():
code, log_source_exists = qradar_request.get(
"/api/config/event_sources/log_source_management/log_sources?filter={0}".format(
- quote('name="{0}"'.format(module.params["name"]))
- )
+ quote('name="{0}"'.format(module.params["name"])),
+ ),
)
if log_source_exists:
-
if module.params["state"] == "present":
(
existing_log_source_protocol_identifier,
@@ -178,8 +177,7 @@ def main():
set_log_source_values(module, qradar_request)
comparison_map = [
- existing_log_source_protocol_identifier["value"]
- == module.params["identifier"],
+ existing_log_source_protocol_identifier["value"] == module.params["identifier"],
log_source_exists[0]["name"] == module.params["name"],
log_source_exists[0]["type_id"] == module.params["type_id"],
to_text(log_source_exists[0]["description"])
@@ -189,17 +187,15 @@ def main():
if all(comparison_map):
module.exit_json(changed=False, msg="Nothing to do.")
else:
- log_source_exists[0]["protocol_parameters"][
- _elspi_index
- ] = module.params["protocol_parameters"][0]
+ log_source_exists[0]["protocol_parameters"][_elspi_index] = module.params[
+ "protocol_parameters"
+ ][0]
log_source_exists[0]["name"] = module.params["name"]
log_source_exists[0]["type_id"] = module.params["type_id"]
- log_source_exists[0]["description"] = module.params[
- "description"
- ]
+ log_source_exists[0]["description"] = module.params["description"]
if module.check_mode:
qradar_return_data = {
- "EMPTY": "IN CHECK MODE, NO TRANSACTION TOOK PLACE"
+ "EMPTY": "IN CHECK MODE, NO TRANSACTION TOOK PLACE",
}
else:
code, qradar_return_data = qradar_request.create_update(
@@ -209,7 +205,7 @@ def main():
module.exit_json(
msg="Successfully updated log source: {0}".format(
- module.params["name"]
+ module.params["name"],
),
qradar_return_data=qradar_return_data,
changed=True,
@@ -218,18 +214,18 @@ def main():
if module.params["state"] == "absent":
if module.check_mode:
qradar_return_data = {
- "EMPTY": "IN CHECK MODE, NO TRANSACTION TOOK PLACE"
+ "EMPTY": "IN CHECK MODE, NO TRANSACTION TOOK PLACE",
}
else:
code, qradar_return_data = qradar_request.delete(
"/api/config/event_sources/log_source_management/log_sources/{0}".format(
- log_source_exists[0]["id"]
- )
+ log_source_exists[0]["id"],
+ ),
)
module.exit_json(
msg="Successfully deleted log source: {0}".format(
- module.params["name"]
+ module.params["name"],
),
qradar_return_data=qradar_return_data,
changed=True,
@@ -239,7 +235,7 @@ def main():
set_log_source_values(module, qradar_request)
if module.check_mode:
qradar_return_data = {
- "EMPTY": "IN CHECK MODE, NO TRANSACTION TOOK PLACE"
+ "EMPTY": "IN CHECK MODE, NO TRANSACTION TOOK PLACE",
}
else:
code, qradar_return_data = qradar_request.create_update(
@@ -249,7 +245,7 @@ def main():
module.exit_json(
msg="Successfully created log source: {0}".format(
- module.params["name"]
+ module.params["name"],
),
qradar_return_data=qradar_return_data,
changed=True,
diff --git a/ansible_collections/ibm/qradar/plugins/modules/offense_action.py b/ansible_collections/ibm/qradar/plugins/modules/offense_action.py
index 784f1e7b1..4944f4627 100644
--- a/ansible_collections/ibm/qradar/plugins/modules/offense_action.py
+++ b/ansible_collections/ibm/qradar/plugins/modules/offense_action.py
@@ -6,6 +6,7 @@
from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
DOCUMENTATION = """
@@ -72,8 +73,8 @@ author: Ansible Security Automation Team (@maxamillion) <https://github.com/ansi
EXAMPLES = """
"""
-from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils._text import to_text
+from ansible.module_utils.basic import AnsibleModule
from ansible_collections.ibm.qradar.plugins.module_utils.qradar import (
QRadarRequest,
@@ -82,7 +83,6 @@ from ansible_collections.ibm.qradar.plugins.module_utils.qradar import (
def main():
-
argspec = dict(
# name=dict(required=False, type='str'),
# id=dict(required=False, type='str'),
@@ -118,7 +118,7 @@ def main():
# found_offense = qradar_request.get('/api/siem/offenses?filter={0}'.format(module.params['name']))
code, found_offense = qradar_request.get(
- "/api/siem/offenses/{0}".format(module.params["id"])
+ "/api/siem/offenses/{0}".format(module.params["id"]),
)
if found_offense:
@@ -127,43 +127,40 @@ def main():
post_strs = []
if module.params["status"] and (
- to_text(found_offense["status"])
- != to_text(module.params["status"])
+ to_text(found_offense["status"]) != to_text(module.params["status"])
):
post_strs.append(
- "status={0}".format(to_text(module.params["status"]))
+ "status={0}".format(to_text(module.params["status"])),
)
if module.params["assigned_to"] and (
- to_text(found_offense["assigned_to"])
- != to_text(module.params["assigned_to"])
+ to_text(found_offense["assigned_to"]) != to_text(module.params["assigned_to"])
):
post_strs.append(
- "assigned_to={0}".format(module.params["assigned_to"])
+ "assigned_to={0}".format(module.params["assigned_to"]),
)
if module.params["closing_reason_id"] and (
- found_offense["closing_reason_id"]
- != module.params["closing_reason_id"]
+ found_offense["closing_reason_id"] != module.params["closing_reason_id"]
):
post_strs.append(
"closing_reason_id={0}".format(
- module.params["closing_reason_id"]
- )
+ module.params["closing_reason_id"],
+ ),
)
if module.params["follow_up"] and (
found_offense["follow_up"] != module.params["follow_up"]
):
post_strs.append(
- "follow_up={0}".format(module.params["follow_up"])
+ "follow_up={0}".format(module.params["follow_up"]),
)
if module.params["protected"] and (
found_offense["protected"] != module.params["protected"]
):
post_strs.append(
- "protected={0}".format(module.params["protected"])
+ "protected={0}".format(module.params["protected"]),
)
if post_strs:
@@ -175,25 +172,27 @@ def main():
qradar_return_data = qradar_request.post_by_path(
"api/siem/offenses/{0}?{1}".format(
- module.params["id"], "&".join(post_strs)
- )
+ module.params["id"],
+ "&".join(post_strs),
+ ),
)
# FIXME - handle the scenario in which we can search by name and this isn't a required param anymore
module.exit_json(
msg="Successfully updated Offense ID: {0}".format(
- module.params["id"]
+ module.params["id"],
),
qradar_return_data=qradar_return_data,
changed=True,
)
else:
module.exit_json(
- msg="No changes necessary. Nothing to do.", changed=False
+ msg="No changes necessary. Nothing to do.",
+ changed=False,
)
else:
# FIXME - handle the scenario in which we can search by name and this isn't a required param anymore
module.fail_json(
- msg="Unable to find Offense ID: {0}".format(module.params["id"])
+ msg="Unable to find Offense ID: {0}".format(module.params["id"]),
)
diff --git a/ansible_collections/ibm/qradar/plugins/modules/offense_info.py b/ansible_collections/ibm/qradar/plugins/modules/offense_info.py
index 1ead8a1ae..1b5ae67c7 100644
--- a/ansible_collections/ibm/qradar/plugins/modules/offense_info.py
+++ b/ansible_collections/ibm/qradar/plugins/modules/offense_info.py
@@ -6,6 +6,7 @@
from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
DOCUMENTATION = """
@@ -113,10 +114,10 @@ EXAMPLES = """
var: offense_list
"""
-from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils._text import to_text
-
+from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.six.moves.urllib.parse import quote
+
from ansible_collections.ibm.qradar.plugins.module_utils.qradar import (
QRadarRequest,
find_dict_in_list,
@@ -125,7 +126,6 @@ from ansible_collections.ibm.qradar.plugins.module_utils.qradar import (
def main():
-
argspec = dict(
id=dict(required=False, type="int"),
name=dict(required=False, type="str"),
@@ -158,7 +158,7 @@ def main():
if module.params["id"]:
code, offenses = qradar_request.get(
- "/api/siem/offenses/{0}".format(module.params["id"])
+ "/api/siem/offenses/{0}".format(module.params["id"]),
)
else:
@@ -166,43 +166,45 @@ def main():
if module.params["status"]:
query_strs.append(
- quote("status={0}".format(to_text(module.params["status"])))
+ quote("status={0}".format(to_text(module.params["status"]))),
)
if module.params["assigned_to"]:
query_strs.append(
- quote("assigned_to={0}".format(module.params["assigned_to"]))
+ quote("assigned_to={0}".format(module.params["assigned_to"])),
)
if module.params["closing_reason_id"]:
query_strs.append(
quote(
"closing_reason_id={0}".format(
- module.params["closing_reason_id"]
- )
- )
+ module.params["closing_reason_id"],
+ ),
+ ),
)
if module.params["follow_up"] is not None:
query_strs.append(
- quote("follow_up={0}".format(module.params["follow_up"]))
+ quote("follow_up={0}".format(module.params["follow_up"])),
)
if module.params["protected"] is not None:
query_strs.append(
- quote("protected={0}".format(module.params["protected"]))
+ quote("protected={0}".format(module.params["protected"])),
)
if query_strs:
code, offenses = qradar_request.get(
- "/api/siem/offenses?filter={0}".format("&".join(query_strs))
+ "/api/siem/offenses?filter={0}".format("&".join(query_strs)),
)
else:
code, offenses = qradar_request.get("/api/siem/offenses")
if module.params["name"]:
named_offense = find_dict_in_list(
- offenses, "description", module.params["name"]
+ offenses,
+ "description",
+ module.params["name"],
)
if named_offense:
offenses = named_offense
diff --git a/ansible_collections/ibm/qradar/plugins/modules/offense_note.py b/ansible_collections/ibm/qradar/plugins/modules/offense_note.py
index 53b6ec95c..2cda42c69 100644
--- a/ansible_collections/ibm/qradar/plugins/modules/offense_note.py
+++ b/ansible_collections/ibm/qradar/plugins/modules/offense_note.py
@@ -6,6 +6,7 @@
from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
DOCUMENTATION = """
@@ -53,27 +54,25 @@ EXAMPLES = """
"""
from ansible.module_utils.basic import AnsibleModule
-
from ansible.module_utils.six.moves.urllib.parse import quote
-from ansible_collections.ibm.qradar.plugins.module_utils.qradar import (
- QRadarRequest,
-)
+
+from ansible_collections.ibm.qradar.plugins.module_utils.qradar import QRadarRequest
def set_offense_values(module, qradar_request):
if module.params["closing_reason"]:
code, found_closing_reason = qradar_request.get(
"/api/siem/offense_closing_reasons?filter={0}".format(
- quote('text="{0}"'.format(module.params["closing_reason"]))
- )
+ quote('text="{0}"'.format(module.params["closing_reason"])),
+ ),
)
if found_closing_reason:
module.params["closing_reason_id"] = found_closing_reason[0]["id"]
else:
module.fail_json(
"Unable to find closing_reason text: {0}".format(
- module.params["closing_reason"]
- )
+ module.params["closing_reason"],
+ ),
)
if module.params["status"]:
@@ -81,7 +80,6 @@ def set_offense_values(module, qradar_request):
def main():
-
argspec = dict(
# state=dict(required=False, choices=["present", "absent"], type='str', default="present"),
id=dict(required=True, type="int"),
@@ -104,7 +102,7 @@ def main():
"/api/siem/offenses/{0}/notes?filter={1}".format(
module.params["id"],
quote('note_text="{0}"'.format(module.params["note_text"])),
- )
+ ),
)
# if module.params['state'] == 'present':
@@ -115,7 +113,8 @@ def main():
note = found_notes[0]
if note["note_text"] == module.params["note_text"]:
module.exit_json(
- msg="No changes necessary. Nothing to do.", changed=False
+ msg="No changes necessary. Nothing to do.",
+ changed=False,
)
else:
if module.check_mode:
@@ -133,7 +132,7 @@ def main():
)
module.exit_json(
msg="Successfully created Offense Note ID: {0}".format(
- qradar_return_data["id"]
+ qradar_return_data["id"],
),
qradar_return_data=qradar_return_data,
changed=False,
@@ -155,7 +154,7 @@ def main():
)
module.exit_json(
msg="Successfully created Offense Note ID: {0}".format(
- qradar_return_data["id"]
+ qradar_return_data["id"],
),
qradar_return_data=qradar_return_data,
changed=True,
diff --git a/ansible_collections/ibm/qradar/plugins/modules/qradar_analytics_rules.py b/ansible_collections/ibm/qradar/plugins/modules/qradar_analytics_rules.py
index 8f65069f5..812b15e51 100644
--- a/ansible_collections/ibm/qradar/plugins/modules/qradar_analytics_rules.py
+++ b/ansible_collections/ibm/qradar/plugins/modules/qradar_analytics_rules.py
@@ -4,6 +4,7 @@
from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
DOCUMENTATION = """
@@ -123,7 +124,7 @@ EXAMPLES = """
# Using GATHERED state
# --------------------
-- name: Get information about the Rule named "Ansible Example DDOS Rule"
+- name: Get information about the Rule named "Ansible Example DDOS Rule"
ibm.qradar.qradar_analytics_rules:
config:
name: "Ansible Example DDOS Rule"
@@ -148,7 +149,7 @@ EXAMPLES = """
# owner: admin
# type: EVENT
-- name: Get information about the Rule with ID 100443
+- name: Get information about the Rule with ID 100443
ibm.qradar.qradar_analytics_rules:
config:
id: 100443
@@ -262,7 +263,6 @@ EXAMPLES = """
# origin: USER
# owner: admin
# type: EVENT
-
"""
RETURN = """
diff --git a/ansible_collections/ibm/qradar/plugins/modules/qradar_deploy.py b/ansible_collections/ibm/qradar/plugins/modules/qradar_deploy.py
index dc41acd99..40bb41244 100644
--- a/ansible_collections/ibm/qradar/plugins/modules/qradar_deploy.py
+++ b/ansible_collections/ibm/qradar/plugins/modules/qradar_deploy.py
@@ -6,6 +6,7 @@
from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
DOCUMENTATION = """
@@ -37,22 +38,19 @@ EXAMPLES = """
type: INCREMENTAL
"""
-from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils._text import to_text
+from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.ibm.qradar.plugins.module_utils.qradar import (
- QRadarRequest,
-)
+from ansible_collections.ibm.qradar.plugins.module_utils.qradar import QRadarRequest
def main():
-
argspec = dict(
type=dict(
choices=["INCREMENTAL", "FULL"],
required=False,
default="INCREMENTAL",
- )
+ ),
)
module = AnsibleModule(argument_spec=argspec, supports_check_mode=False)
@@ -63,12 +61,11 @@ def main():
)
qradar_return_data = qradar_request.post_by_path(
- "api/staged_config/deploy_status"
+ "api/staged_config/deploy_status",
)
if "message" in qradar_return_data and (
- to_text("No changes to deploy")
- in to_text(qradar_return_data["message"])
+ to_text("No changes to deploy") in to_text(qradar_return_data["message"])
):
module.exit_json(
msg="No changes to deploy",
@@ -78,7 +75,7 @@ def main():
else:
module.exit_json(
msg="Successfully initiated {0} deployment.".format(
- module.params["type"]
+ module.params["type"],
),
qradar_return_data=qradar_return_data,
changed=True,
diff --git a/ansible_collections/ibm/qradar/plugins/modules/qradar_log_source_management.py b/ansible_collections/ibm/qradar/plugins/modules/qradar_log_source_management.py
index fa793a596..18f2a7ecd 100644
--- a/ansible_collections/ibm/qradar/plugins/modules/qradar_log_source_management.py
+++ b/ansible_collections/ibm/qradar/plugins/modules/qradar_log_source_management.py
@@ -6,6 +6,7 @@
from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
DOCUMENTATION = """
@@ -73,31 +74,31 @@ EXAMPLES = """
identifier: "192.168.1.101"
"""
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils._text import to_text
+import json
+from ansible.module_utils._text import to_text
+from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.six.moves.urllib.parse import quote
+
from ansible_collections.ibm.qradar.plugins.module_utils.qradar import (
QRadarRequest,
find_dict_in_list,
)
-import json
-
def set_log_source_values(module, qradar_request):
if module.params["type_name"]:
code, query_response = qradar_request.get(
"/api/config/event_sources/log_source_management/log_source_types?filter={0}".format(
- quote('name="{0}"'.format(module.params["type_name"]))
- )
+ quote('name="{0}"'.format(module.params["type_name"])),
+ ),
)
log_source_type_found = query_response[0]
if module.params["type_id"]:
code, query_response = qradar_request.get(
"/api/config/event_sources/log_source_management/log_source_types?filter={0}".format(
- quote('name="{0}"'.format(module.params["type_name"]))
- )
+ quote('name="{0}"'.format(module.params["type_name"])),
+ ),
)
code, log_source_type_found = query_response[0]
if log_source_type_found:
@@ -105,7 +106,7 @@ def set_log_source_values(module, qradar_request):
module.params["type_id"] = log_source_type_found["id"]
else:
module.fail_json(
- msg="Incompatible type provided, please consult QRadar Documentation for Log Source Types"
+ msg="Incompatible type provided, please consult QRadar Documentation for Log Source Types",
)
if module.params["protocol_type_id"]:
@@ -116,25 +117,24 @@ def set_log_source_values(module, qradar_request):
)
if not found_dict_in_list:
module.fail_json(
- msg="Incompatible protocol_type_id provided, please consult QRadar Documentation for Log Source Types"
+ msg="Incompatible protocol_type_id provided, please consult QRadar Documentation for Log Source Types",
)
else:
# Set it to the default as provided by the QRadar Instance
- module.params["protocol_type_id"] = log_source_type_found[
- "protocol_types"
- ][0]["protocol_id"]
+ module.params["protocol_type_id"] = log_source_type_found["protocol_types"][0][
+ "protocol_id"
+ ]
module.params["protocol_parameters"] = [
{
"id": module.params["protocol_type_id"],
"name": "identifier",
"value": module.params["identifier"],
- }
+ },
]
def main():
-
argspec = dict(
name=dict(required=True, type="str"),
state=dict(choices=["present", "absent"], required=True),
@@ -159,12 +159,11 @@ def main():
code, log_source_exists = qradar_request.get(
"/api/config/event_sources/log_source_management/log_sources?filter={0}".format(
- quote('name="{0}"'.format(module.params["name"]))
- )
+ quote('name="{0}"'.format(module.params["name"])),
+ ),
)
if log_source_exists:
-
if module.params["state"] == "present":
(
existing_log_source_protocol_identifier,
@@ -178,8 +177,7 @@ def main():
set_log_source_values(module, qradar_request)
comparison_map = [
- existing_log_source_protocol_identifier["value"]
- == module.params["identifier"],
+ existing_log_source_protocol_identifier["value"] == module.params["identifier"],
log_source_exists[0]["name"] == module.params["name"],
log_source_exists[0]["type_id"] == module.params["type_id"],
to_text(log_source_exists[0]["description"])
@@ -189,17 +187,15 @@ def main():
if all(comparison_map):
module.exit_json(changed=False, msg="Nothing to do.")
else:
- log_source_exists[0]["protocol_parameters"][
- _elspi_index
- ] = module.params["protocol_parameters"][0]
+ log_source_exists[0]["protocol_parameters"][_elspi_index] = module.params[
+ "protocol_parameters"
+ ][0]
log_source_exists[0]["name"] = module.params["name"]
log_source_exists[0]["type_id"] = module.params["type_id"]
- log_source_exists[0]["description"] = module.params[
- "description"
- ]
+ log_source_exists[0]["description"] = module.params["description"]
if module.check_mode:
qradar_return_data = {
- "EMPTY": "IN CHECK MODE, NO TRANSACTION TOOK PLACE"
+ "EMPTY": "IN CHECK MODE, NO TRANSACTION TOOK PLACE",
}
else:
code, qradar_return_data = qradar_request.create_update(
@@ -209,7 +205,7 @@ def main():
module.exit_json(
msg="Successfully updated log source: {0}".format(
- module.params["name"]
+ module.params["name"],
),
qradar_return_data=qradar_return_data,
changed=True,
@@ -218,18 +214,18 @@ def main():
if module.params["state"] == "absent":
if module.check_mode:
qradar_return_data = {
- "EMPTY": "IN CHECK MODE, NO TRANSACTION TOOK PLACE"
+ "EMPTY": "IN CHECK MODE, NO TRANSACTION TOOK PLACE",
}
else:
code, qradar_return_data = qradar_request.delete(
"/api/config/event_sources/log_source_management/log_sources/{0}".format(
- log_source_exists[0]["id"]
- )
+ log_source_exists[0]["id"],
+ ),
)
module.exit_json(
msg="Successfully deleted log source: {0}".format(
- module.params["name"]
+ module.params["name"],
),
qradar_return_data=qradar_return_data,
changed=True,
@@ -239,7 +235,7 @@ def main():
set_log_source_values(module, qradar_request)
if module.check_mode:
qradar_return_data = {
- "EMPTY": "IN CHECK MODE, NO TRANSACTION TOOK PLACE"
+ "EMPTY": "IN CHECK MODE, NO TRANSACTION TOOK PLACE",
}
else:
code, qradar_return_data = qradar_request.create_update(
@@ -249,7 +245,7 @@ def main():
module.exit_json(
msg="Successfully created log source: {0}".format(
- module.params["name"]
+ module.params["name"],
),
qradar_return_data=qradar_return_data,
changed=True,
diff --git a/ansible_collections/ibm/qradar/plugins/modules/qradar_log_sources_management.py b/ansible_collections/ibm/qradar/plugins/modules/qradar_log_sources_management.py
index e5ba46a0b..646795cd7 100644
--- a/ansible_collections/ibm/qradar/plugins/modules/qradar_log_sources_management.py
+++ b/ansible_collections/ibm/qradar/plugins/modules/qradar_log_sources_management.py
@@ -4,6 +4,7 @@
from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
DOCUMENTATION = """
@@ -253,7 +254,7 @@ EXAMPLES = """
- name: "Apache HTTP Server logs"
type_name: "Apache HTTP Server"
description: "REPLACED Apache HTTP Server remote logs from rsyslog"
- identifier: "192.0.2.1"
+ identifier: "192.0.2.1"
# RUN output:
# -----------
diff --git a/ansible_collections/ibm/qradar/plugins/modules/qradar_offense_action.py b/ansible_collections/ibm/qradar/plugins/modules/qradar_offense_action.py
index 784f1e7b1..4944f4627 100644
--- a/ansible_collections/ibm/qradar/plugins/modules/qradar_offense_action.py
+++ b/ansible_collections/ibm/qradar/plugins/modules/qradar_offense_action.py
@@ -6,6 +6,7 @@
from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
DOCUMENTATION = """
@@ -72,8 +73,8 @@ author: Ansible Security Automation Team (@maxamillion) <https://github.com/ansi
EXAMPLES = """
"""
-from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils._text import to_text
+from ansible.module_utils.basic import AnsibleModule
from ansible_collections.ibm.qradar.plugins.module_utils.qradar import (
QRadarRequest,
@@ -82,7 +83,6 @@ from ansible_collections.ibm.qradar.plugins.module_utils.qradar import (
def main():
-
argspec = dict(
# name=dict(required=False, type='str'),
# id=dict(required=False, type='str'),
@@ -118,7 +118,7 @@ def main():
# found_offense = qradar_request.get('/api/siem/offenses?filter={0}'.format(module.params['name']))
code, found_offense = qradar_request.get(
- "/api/siem/offenses/{0}".format(module.params["id"])
+ "/api/siem/offenses/{0}".format(module.params["id"]),
)
if found_offense:
@@ -127,43 +127,40 @@ def main():
post_strs = []
if module.params["status"] and (
- to_text(found_offense["status"])
- != to_text(module.params["status"])
+ to_text(found_offense["status"]) != to_text(module.params["status"])
):
post_strs.append(
- "status={0}".format(to_text(module.params["status"]))
+ "status={0}".format(to_text(module.params["status"])),
)
if module.params["assigned_to"] and (
- to_text(found_offense["assigned_to"])
- != to_text(module.params["assigned_to"])
+ to_text(found_offense["assigned_to"]) != to_text(module.params["assigned_to"])
):
post_strs.append(
- "assigned_to={0}".format(module.params["assigned_to"])
+ "assigned_to={0}".format(module.params["assigned_to"]),
)
if module.params["closing_reason_id"] and (
- found_offense["closing_reason_id"]
- != module.params["closing_reason_id"]
+ found_offense["closing_reason_id"] != module.params["closing_reason_id"]
):
post_strs.append(
"closing_reason_id={0}".format(
- module.params["closing_reason_id"]
- )
+ module.params["closing_reason_id"],
+ ),
)
if module.params["follow_up"] and (
found_offense["follow_up"] != module.params["follow_up"]
):
post_strs.append(
- "follow_up={0}".format(module.params["follow_up"])
+ "follow_up={0}".format(module.params["follow_up"]),
)
if module.params["protected"] and (
found_offense["protected"] != module.params["protected"]
):
post_strs.append(
- "protected={0}".format(module.params["protected"])
+ "protected={0}".format(module.params["protected"]),
)
if post_strs:
@@ -175,25 +172,27 @@ def main():
qradar_return_data = qradar_request.post_by_path(
"api/siem/offenses/{0}?{1}".format(
- module.params["id"], "&".join(post_strs)
- )
+ module.params["id"],
+ "&".join(post_strs),
+ ),
)
# FIXME - handle the scenario in which we can search by name and this isn't a required param anymore
module.exit_json(
msg="Successfully updated Offense ID: {0}".format(
- module.params["id"]
+ module.params["id"],
),
qradar_return_data=qradar_return_data,
changed=True,
)
else:
module.exit_json(
- msg="No changes necessary. Nothing to do.", changed=False
+ msg="No changes necessary. Nothing to do.",
+ changed=False,
)
else:
# FIXME - handle the scenario in which we can search by name and this isn't a required param anymore
module.fail_json(
- msg="Unable to find Offense ID: {0}".format(module.params["id"])
+ msg="Unable to find Offense ID: {0}".format(module.params["id"]),
)
diff --git a/ansible_collections/ibm/qradar/plugins/modules/qradar_offense_info.py b/ansible_collections/ibm/qradar/plugins/modules/qradar_offense_info.py
index 1ead8a1ae..1b5ae67c7 100644
--- a/ansible_collections/ibm/qradar/plugins/modules/qradar_offense_info.py
+++ b/ansible_collections/ibm/qradar/plugins/modules/qradar_offense_info.py
@@ -6,6 +6,7 @@
from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
DOCUMENTATION = """
@@ -113,10 +114,10 @@ EXAMPLES = """
var: offense_list
"""
-from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils._text import to_text
-
+from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.six.moves.urllib.parse import quote
+
from ansible_collections.ibm.qradar.plugins.module_utils.qradar import (
QRadarRequest,
find_dict_in_list,
@@ -125,7 +126,6 @@ from ansible_collections.ibm.qradar.plugins.module_utils.qradar import (
def main():
-
argspec = dict(
id=dict(required=False, type="int"),
name=dict(required=False, type="str"),
@@ -158,7 +158,7 @@ def main():
if module.params["id"]:
code, offenses = qradar_request.get(
- "/api/siem/offenses/{0}".format(module.params["id"])
+ "/api/siem/offenses/{0}".format(module.params["id"]),
)
else:
@@ -166,43 +166,45 @@ def main():
if module.params["status"]:
query_strs.append(
- quote("status={0}".format(to_text(module.params["status"])))
+ quote("status={0}".format(to_text(module.params["status"]))),
)
if module.params["assigned_to"]:
query_strs.append(
- quote("assigned_to={0}".format(module.params["assigned_to"]))
+ quote("assigned_to={0}".format(module.params["assigned_to"])),
)
if module.params["closing_reason_id"]:
query_strs.append(
quote(
"closing_reason_id={0}".format(
- module.params["closing_reason_id"]
- )
- )
+ module.params["closing_reason_id"],
+ ),
+ ),
)
if module.params["follow_up"] is not None:
query_strs.append(
- quote("follow_up={0}".format(module.params["follow_up"]))
+ quote("follow_up={0}".format(module.params["follow_up"])),
)
if module.params["protected"] is not None:
query_strs.append(
- quote("protected={0}".format(module.params["protected"]))
+ quote("protected={0}".format(module.params["protected"])),
)
if query_strs:
code, offenses = qradar_request.get(
- "/api/siem/offenses?filter={0}".format("&".join(query_strs))
+ "/api/siem/offenses?filter={0}".format("&".join(query_strs)),
)
else:
code, offenses = qradar_request.get("/api/siem/offenses")
if module.params["name"]:
named_offense = find_dict_in_list(
- offenses, "description", module.params["name"]
+ offenses,
+ "description",
+ module.params["name"],
)
if named_offense:
offenses = named_offense
diff --git a/ansible_collections/ibm/qradar/plugins/modules/qradar_offense_note.py b/ansible_collections/ibm/qradar/plugins/modules/qradar_offense_note.py
index 53b6ec95c..2cda42c69 100644
--- a/ansible_collections/ibm/qradar/plugins/modules/qradar_offense_note.py
+++ b/ansible_collections/ibm/qradar/plugins/modules/qradar_offense_note.py
@@ -6,6 +6,7 @@
from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
DOCUMENTATION = """
@@ -53,27 +54,25 @@ EXAMPLES = """
"""
from ansible.module_utils.basic import AnsibleModule
-
from ansible.module_utils.six.moves.urllib.parse import quote
-from ansible_collections.ibm.qradar.plugins.module_utils.qradar import (
- QRadarRequest,
-)
+
+from ansible_collections.ibm.qradar.plugins.module_utils.qradar import QRadarRequest
def set_offense_values(module, qradar_request):
if module.params["closing_reason"]:
code, found_closing_reason = qradar_request.get(
"/api/siem/offense_closing_reasons?filter={0}".format(
- quote('text="{0}"'.format(module.params["closing_reason"]))
- )
+ quote('text="{0}"'.format(module.params["closing_reason"])),
+ ),
)
if found_closing_reason:
module.params["closing_reason_id"] = found_closing_reason[0]["id"]
else:
module.fail_json(
"Unable to find closing_reason text: {0}".format(
- module.params["closing_reason"]
- )
+ module.params["closing_reason"],
+ ),
)
if module.params["status"]:
@@ -81,7 +80,6 @@ def set_offense_values(module, qradar_request):
def main():
-
argspec = dict(
# state=dict(required=False, choices=["present", "absent"], type='str', default="present"),
id=dict(required=True, type="int"),
@@ -104,7 +102,7 @@ def main():
"/api/siem/offenses/{0}/notes?filter={1}".format(
module.params["id"],
quote('note_text="{0}"'.format(module.params["note_text"])),
- )
+ ),
)
# if module.params['state'] == 'present':
@@ -115,7 +113,8 @@ def main():
note = found_notes[0]
if note["note_text"] == module.params["note_text"]:
module.exit_json(
- msg="No changes necessary. Nothing to do.", changed=False
+ msg="No changes necessary. Nothing to do.",
+ changed=False,
)
else:
if module.check_mode:
@@ -133,7 +132,7 @@ def main():
)
module.exit_json(
msg="Successfully created Offense Note ID: {0}".format(
- qradar_return_data["id"]
+ qradar_return_data["id"],
),
qradar_return_data=qradar_return_data,
changed=False,
@@ -155,7 +154,7 @@ def main():
)
module.exit_json(
msg="Successfully created Offense Note ID: {0}".format(
- qradar_return_data["id"]
+ qradar_return_data["id"],
),
qradar_return_data=qradar_return_data,
changed=True,
diff --git a/ansible_collections/ibm/qradar/plugins/modules/qradar_rule.py b/ansible_collections/ibm/qradar/plugins/modules/qradar_rule.py
index f99bab134..f3f975ae0 100644
--- a/ansible_collections/ibm/qradar/plugins/modules/qradar_rule.py
+++ b/ansible_collections/ibm/qradar/plugins/modules/qradar_rule.py
@@ -6,6 +6,7 @@
from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
DOCUMENTATION = """
@@ -57,17 +58,15 @@ EXAMPLES = """
state: enabled
"""
-from ansible.module_utils.basic import AnsibleModule
+import json
+from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.six.moves.urllib.parse import quote
-from ansible_collections.ibm.qradar.plugins.module_utils.qradar import (
- QRadarRequest,
-)
-import json
+from ansible_collections.ibm.qradar.plugins.module_utils.qradar import QRadarRequest
-def main():
+def main():
argspec = dict(
id=dict(required=False, type="int"),
name=dict(required=False, type="str"),
@@ -98,14 +97,14 @@ def main():
if module.params["id"]:
code, module.params["rule"] = qradar_request.get(
- "/api/analytics/rules/{0}".format(module.params["id"])
+ "/api/analytics/rules/{0}".format(module.params["id"]),
)
elif module.params["name"]:
code, rules = qradar_request.get(
"/api/analytics/rules?filter={0}".format(
- quote('"{0}"'.format(module.params["name"]))
- )
+ quote('"{0}"'.format(module.params["name"])),
+ ),
)
if rules:
module.params["rule"] = rules[0]
@@ -118,7 +117,7 @@ def main():
if module.params["id"]:
module.exit_json(
msg="No change needed for rule ID: {0}".format(
- module.params["id"]
+ module.params["id"],
),
qradar_return_data={},
changed=False,
@@ -126,7 +125,7 @@ def main():
if module.params["name"]:
module.exit_json(
msg="Successfully enabled rule named: {0}".format(
- module.params["name"]
+ module.params["name"],
),
qradar_return_data={},
changed=False,
@@ -137,14 +136,14 @@ def main():
qradar_return_data = qradar_request.post_by_path(
"api/analytics/rules/{0}".format(
- module.params["rule"]["id"]
+ module.params["rule"]["id"],
),
data=json.dumps(module.params["rule"]),
)
if module.params["id"]:
module.exit_json(
msg="Successfully enabled rule ID: {0}".format(
- module.params["id"]
+ module.params["id"],
),
qradar_return_data=qradar_return_data,
changed=True,
@@ -152,7 +151,7 @@ def main():
if module.params["name"]:
module.exit_json(
msg="Successfully enabled rule named: {0}".format(
- module.params["name"]
+ module.params["name"],
),
qradar_return_data=qradar_return_data,
changed=True,
@@ -161,14 +160,14 @@ def main():
if module.params["id"]:
module.fail_json(
msg="Unable to find rule ID: {0}".format(
- module.params["id"]
- )
+ module.params["id"],
+ ),
)
if module.params["name"]:
module.fail_json(
msg='Unable to find rule named: "{0}"'.format(
- module.params["name"]
- )
+ module.params["name"],
+ ),
)
elif module.params["state"] == "disabled":
@@ -178,7 +177,7 @@ def main():
if module.params["id"]:
module.exit_json(
msg="No change needed for rule ID: {0}".format(
- module.params["id"]
+ module.params["id"],
),
qradar_return_data={},
changed=False,
@@ -186,7 +185,7 @@ def main():
if module.params["name"]:
module.exit_json(
msg="Successfully enabled rule named: {0}".format(
- module.params["name"]
+ module.params["name"],
),
qradar_return_data={},
changed=False,
@@ -197,14 +196,14 @@ def main():
qradar_return_data = qradar_request.post_by_path(
"api/analytics/rules/{0}".format(
- module.params["rule"]["id"]
+ module.params["rule"]["id"],
),
data=json.dumps(module.params["rule"]),
)
if module.params["id"]:
module.exit_json(
msg="Successfully disabled rule ID: {0}".format(
- module.params["id"]
+ module.params["id"],
),
qradar_return_data=qradar_return_data,
changed=True,
@@ -212,7 +211,7 @@ def main():
if module.params["name"]:
module.exit_json(
msg="Successfully disabled rule named: {0}".format(
- module.params["name"]
+ module.params["name"],
),
qradar_return_data=qradar_return_data,
changed=True,
@@ -221,25 +220,25 @@ def main():
if module.params["id"]:
module.fail_json(
msg="Unable to find rule ID: {0}".format(
- module.params["id"]
- )
+ module.params["id"],
+ ),
)
if module.params["name"]:
module.fail_json(
msg='Unable to find rule named: "{0}"'.format(
- module.params["name"]
- )
+ module.params["name"],
+ ),
)
elif module.params["state"] == "absent":
if module.params["rule"]:
code, qradar_return_data = qradar_request.delete(
- "/api/analytics/rules/{0}".format(module.params["rule"]["id"])
+ "/api/analytics/rules/{0}".format(module.params["rule"]["id"]),
)
if module.params["id"]:
module.exit_json(
msg="Successfully deleted rule ID: {0}".format(
- module.params["id"]
+ module.params["id"],
),
qradar_return_data=qradar_return_data,
changed=True,
@@ -247,7 +246,7 @@ def main():
if module.params["name"]:
module.exit_json(
msg="Successfully deleted rule named: {0}".format(
- module.params["name"]
+ module.params["name"],
),
qradar_return_data=qradar_return_data,
changed=True,
diff --git a/ansible_collections/ibm/qradar/plugins/modules/qradar_rule_info.py b/ansible_collections/ibm/qradar/plugins/modules/qradar_rule_info.py
index d5c92453a..833e7584f 100644
--- a/ansible_collections/ibm/qradar/plugins/modules/qradar_rule_info.py
+++ b/ansible_collections/ibm/qradar/plugins/modules/qradar_rule_info.py
@@ -6,6 +6,7 @@
from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
DOCUMENTATION = """
@@ -70,17 +71,14 @@ EXAMPLES = """
var: custom_ddos_rule_info
"""
-from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils._text import to_text
-
+from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.six.moves.urllib.parse import quote
-from ansible_collections.ibm.qradar.plugins.module_utils.qradar import (
- QRadarRequest,
-)
+from ansible_collections.ibm.qradar.plugins.module_utils.qradar import QRadarRequest
-def main():
+def main():
argspec = dict(
id=dict(required=False, type="int"),
name=dict(required=False, type="str"),
@@ -91,7 +89,9 @@ def main():
type="str",
),
origin=dict(
- required=False, choices=["SYSTEM", "OVERRIDE", "USER"], type="str"
+ required=False,
+ choices=["SYSTEM", "OVERRIDE", "USER"],
+ type="str",
),
)
@@ -105,7 +105,7 @@ def main():
if module.params["id"]:
code, rules = qradar_request.get(
- "/api/analytics/rules/{0}".format(module.params["id"])
+ "/api/analytics/rules/{0}".format(module.params["id"]),
)
else:
@@ -113,12 +113,12 @@ def main():
if module.params["name"]:
query_strs.append(
- quote('name="{0}"'.format(to_text(module.params["name"])))
+ quote('name="{0}"'.format(to_text(module.params["name"]))),
)
if module.params["owner"]:
query_strs.append(
- quote("owner={0}".format(module.params["owner"]))
+ quote("owner={0}".format(module.params["owner"])),
)
if module.params["type"]:
@@ -126,12 +126,12 @@ def main():
if module.params["origin"]:
query_strs.append(
- quote("origin={0}".format(module.params["origin"]))
+ quote("origin={0}".format(module.params["origin"])),
)
if query_strs:
code, rules = qradar_request.get(
- "/api/analytics/rules?filter={0}".format("&".join(query_strs))
+ "/api/analytics/rules?filter={0}".format("&".join(query_strs)),
)
else:
code, rules = qradar_request.get("/api/analytics/rules")
diff --git a/ansible_collections/ibm/qradar/plugins/modules/rule.py b/ansible_collections/ibm/qradar/plugins/modules/rule.py
index f99bab134..f3f975ae0 100644
--- a/ansible_collections/ibm/qradar/plugins/modules/rule.py
+++ b/ansible_collections/ibm/qradar/plugins/modules/rule.py
@@ -6,6 +6,7 @@
from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
DOCUMENTATION = """
@@ -57,17 +58,15 @@ EXAMPLES = """
state: enabled
"""
-from ansible.module_utils.basic import AnsibleModule
+import json
+from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.six.moves.urllib.parse import quote
-from ansible_collections.ibm.qradar.plugins.module_utils.qradar import (
- QRadarRequest,
-)
-import json
+from ansible_collections.ibm.qradar.plugins.module_utils.qradar import QRadarRequest
-def main():
+def main():
argspec = dict(
id=dict(required=False, type="int"),
name=dict(required=False, type="str"),
@@ -98,14 +97,14 @@ def main():
if module.params["id"]:
code, module.params["rule"] = qradar_request.get(
- "/api/analytics/rules/{0}".format(module.params["id"])
+ "/api/analytics/rules/{0}".format(module.params["id"]),
)
elif module.params["name"]:
code, rules = qradar_request.get(
"/api/analytics/rules?filter={0}".format(
- quote('"{0}"'.format(module.params["name"]))
- )
+ quote('"{0}"'.format(module.params["name"])),
+ ),
)
if rules:
module.params["rule"] = rules[0]
@@ -118,7 +117,7 @@ def main():
if module.params["id"]:
module.exit_json(
msg="No change needed for rule ID: {0}".format(
- module.params["id"]
+ module.params["id"],
),
qradar_return_data={},
changed=False,
@@ -126,7 +125,7 @@ def main():
if module.params["name"]:
module.exit_json(
msg="Successfully enabled rule named: {0}".format(
- module.params["name"]
+ module.params["name"],
),
qradar_return_data={},
changed=False,
@@ -137,14 +136,14 @@ def main():
qradar_return_data = qradar_request.post_by_path(
"api/analytics/rules/{0}".format(
- module.params["rule"]["id"]
+ module.params["rule"]["id"],
),
data=json.dumps(module.params["rule"]),
)
if module.params["id"]:
module.exit_json(
msg="Successfully enabled rule ID: {0}".format(
- module.params["id"]
+ module.params["id"],
),
qradar_return_data=qradar_return_data,
changed=True,
@@ -152,7 +151,7 @@ def main():
if module.params["name"]:
module.exit_json(
msg="Successfully enabled rule named: {0}".format(
- module.params["name"]
+ module.params["name"],
),
qradar_return_data=qradar_return_data,
changed=True,
@@ -161,14 +160,14 @@ def main():
if module.params["id"]:
module.fail_json(
msg="Unable to find rule ID: {0}".format(
- module.params["id"]
- )
+ module.params["id"],
+ ),
)
if module.params["name"]:
module.fail_json(
msg='Unable to find rule named: "{0}"'.format(
- module.params["name"]
- )
+ module.params["name"],
+ ),
)
elif module.params["state"] == "disabled":
@@ -178,7 +177,7 @@ def main():
if module.params["id"]:
module.exit_json(
msg="No change needed for rule ID: {0}".format(
- module.params["id"]
+ module.params["id"],
),
qradar_return_data={},
changed=False,
@@ -186,7 +185,7 @@ def main():
if module.params["name"]:
module.exit_json(
msg="Successfully enabled rule named: {0}".format(
- module.params["name"]
+ module.params["name"],
),
qradar_return_data={},
changed=False,
@@ -197,14 +196,14 @@ def main():
qradar_return_data = qradar_request.post_by_path(
"api/analytics/rules/{0}".format(
- module.params["rule"]["id"]
+ module.params["rule"]["id"],
),
data=json.dumps(module.params["rule"]),
)
if module.params["id"]:
module.exit_json(
msg="Successfully disabled rule ID: {0}".format(
- module.params["id"]
+ module.params["id"],
),
qradar_return_data=qradar_return_data,
changed=True,
@@ -212,7 +211,7 @@ def main():
if module.params["name"]:
module.exit_json(
msg="Successfully disabled rule named: {0}".format(
- module.params["name"]
+ module.params["name"],
),
qradar_return_data=qradar_return_data,
changed=True,
@@ -221,25 +220,25 @@ def main():
if module.params["id"]:
module.fail_json(
msg="Unable to find rule ID: {0}".format(
- module.params["id"]
- )
+ module.params["id"],
+ ),
)
if module.params["name"]:
module.fail_json(
msg='Unable to find rule named: "{0}"'.format(
- module.params["name"]
- )
+ module.params["name"],
+ ),
)
elif module.params["state"] == "absent":
if module.params["rule"]:
code, qradar_return_data = qradar_request.delete(
- "/api/analytics/rules/{0}".format(module.params["rule"]["id"])
+ "/api/analytics/rules/{0}".format(module.params["rule"]["id"]),
)
if module.params["id"]:
module.exit_json(
msg="Successfully deleted rule ID: {0}".format(
- module.params["id"]
+ module.params["id"],
),
qradar_return_data=qradar_return_data,
changed=True,
@@ -247,7 +246,7 @@ def main():
if module.params["name"]:
module.exit_json(
msg="Successfully deleted rule named: {0}".format(
- module.params["name"]
+ module.params["name"],
),
qradar_return_data=qradar_return_data,
changed=True,
diff --git a/ansible_collections/ibm/qradar/plugins/modules/rule_info.py b/ansible_collections/ibm/qradar/plugins/modules/rule_info.py
index d5c92453a..833e7584f 100644
--- a/ansible_collections/ibm/qradar/plugins/modules/rule_info.py
+++ b/ansible_collections/ibm/qradar/plugins/modules/rule_info.py
@@ -6,6 +6,7 @@
from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
DOCUMENTATION = """
@@ -70,17 +71,14 @@ EXAMPLES = """
var: custom_ddos_rule_info
"""
-from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils._text import to_text
-
+from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.six.moves.urllib.parse import quote
-from ansible_collections.ibm.qradar.plugins.module_utils.qradar import (
- QRadarRequest,
-)
+from ansible_collections.ibm.qradar.plugins.module_utils.qradar import QRadarRequest
-def main():
+def main():
argspec = dict(
id=dict(required=False, type="int"),
name=dict(required=False, type="str"),
@@ -91,7 +89,9 @@ def main():
type="str",
),
origin=dict(
- required=False, choices=["SYSTEM", "OVERRIDE", "USER"], type="str"
+ required=False,
+ choices=["SYSTEM", "OVERRIDE", "USER"],
+ type="str",
),
)
@@ -105,7 +105,7 @@ def main():
if module.params["id"]:
code, rules = qradar_request.get(
- "/api/analytics/rules/{0}".format(module.params["id"])
+ "/api/analytics/rules/{0}".format(module.params["id"]),
)
else:
@@ -113,12 +113,12 @@ def main():
if module.params["name"]:
query_strs.append(
- quote('name="{0}"'.format(to_text(module.params["name"])))
+ quote('name="{0}"'.format(to_text(module.params["name"]))),
)
if module.params["owner"]:
query_strs.append(
- quote("owner={0}".format(module.params["owner"]))
+ quote("owner={0}".format(module.params["owner"])),
)
if module.params["type"]:
@@ -126,12 +126,12 @@ def main():
if module.params["origin"]:
query_strs.append(
- quote("origin={0}".format(module.params["origin"]))
+ quote("origin={0}".format(module.params["origin"])),
)
if query_strs:
code, rules = qradar_request.get(
- "/api/analytics/rules?filter={0}".format("&".join(query_strs))
+ "/api/analytics/rules?filter={0}".format("&".join(query_strs)),
)
else:
code, rules = qradar_request.get("/api/analytics/rules")
diff --git a/ansible_collections/ibm/qradar/pyproject.toml b/ansible_collections/ibm/qradar/pyproject.toml
index c9ca12efb..0bc23202d 100644
--- a/ansible_collections/ibm/qradar/pyproject.toml
+++ b/ansible_collections/ibm/qradar/pyproject.toml
@@ -8,4 +8,4 @@ testpaths = [
]
filterwarnings = [
'ignore:AnsibleCollectionFinder has already been configured',
-] \ No newline at end of file
+]
diff --git a/ansible_collections/ibm/qradar/test-requirements.txt b/ansible_collections/ibm/qradar/test-requirements.txt
index 8002336b1..94ff7c9e3 100644
--- a/ansible_collections/ibm/qradar/test-requirements.txt
+++ b/ansible_collections/ibm/qradar/test-requirements.txt
@@ -1,8 +1,9 @@
-black==22.3.0 ; python_version > '3.5'
+# For ansible-tox-linters
+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
+
+# Unit test runner
+pytest-ansible ; python_version >= '3.9'
+git+https://github.com/ansible-community/pytest-ansible-units.git ; python_version < '3.9'
+pytest-xdist
diff --git a/ansible_collections/ibm/qradar/tests/integration/targets/log_source_management/tasks/main.yml b/ansible_collections/ibm/qradar/tests/integration/targets/log_source_management/tasks/main.yml
index cf547abcb..88ae78609 100644
--- a/ansible_collections/ibm/qradar/tests/integration/targets/log_source_management/tasks/main.yml
+++ b/ansible_collections/ibm/qradar/tests/integration/targets/log_source_management/tasks/main.yml
@@ -1,60 +1,60 @@
---
- name: Create Testing Apache HTTP Server log source
log_source_management:
- name: "Testing Collections PB - 192.168.1.112"
- type_name: "Apache HTTP Server"
+ name: Testing Collections PB - 192.168.1.112
+ type_name: Apache HTTP Server
state: present
- description: "Testing Collection PB Description"
- identifier: "192.168.1.112"
+ description: Testing Collection PB Description
+ identifier: 192.168.1.112
register: snort_log_source_create
- name: Assert Create Test Apache HTTP Server log source changed
- assert:
+ ansible.builtin.assert:
that:
- snort_log_source_create is changed
- snort_log_source_create is not failed
- name: Create Testing Apache HTTP Server log source RERUN
log_source_management:
- name: "Testing Collections PB - 192.168.1.112"
- type_name: "Apache HTTP Server"
+ name: Testing Collections PB - 192.168.1.112
+ type_name: Apache HTTP Server
state: present
- description: "Testing Collection PB Description"
- identifier: "192.168.1.112"
+ description: Testing Collection PB Description
+ identifier: 192.168.1.112
register: snort_log_source_create_rerun
- name: Assert Create Test Apache HTTP Server log source is not changed on RERUN
- assert:
+ ansible.builtin.assert:
that:
- snort_log_source_create_rerun is not changed
- snort_log_source_create_rerun is not failed
- name: Delete Testing Apache HTTP Server log source
log_source_management:
- name: "Testing Collections PB - 192.168.1.112"
- type_name: "Apache HTTP Server"
+ name: Testing Collections PB - 192.168.1.112
+ type_name: Apache HTTP Server
state: absent
- description: "Testing Collection PB Description"
- identifier: "192.168.1.112"
+ description: Testing Collection PB Description
+ identifier: 192.168.1.112
register: snort_log_source_delete
- name: Assert Delete Test Apache HTTP Server log source changed
- assert:
+ ansible.builtin.assert:
that:
- snort_log_source_delete is changed
- snort_log_source_delete is not failed
- name: Delete Testing Apache HTTP Server log source RERUN
log_source_management:
- name: "Testing Collections PB - 192.168.1.112"
- type_name: "Apache HTTP Server"
+ name: Testing Collections PB - 192.168.1.112
+ type_name: Apache HTTP Server
state: absent
- description: "Testing Collection PB Description"
- identifier: "192.168.1.112"
+ description: Testing Collection PB Description
+ identifier: 192.168.1.112
register: snort_log_source_delete_rerun
- name: Assert Delete Test Apache HTTP Server log source is not changed on RERUN
- assert:
+ ansible.builtin.assert:
that:
- snort_log_source_delete_rerun is not changed
- snort_log_source_delete_rerun is not failed
diff --git a/ansible_collections/ibm/qradar/tests/integration/targets/offense/tasks/main.yml b/ansible_collections/ibm/qradar/tests/integration/targets/offense/tasks/main.yml
index 7495ec9b8..f93cb9657 100644
--- a/ansible_collections/ibm/qradar/tests/integration/targets/offense/tasks/main.yml
+++ b/ansible_collections/ibm/qradar/tests/integration/targets/offense/tasks/main.yml
@@ -1,19 +1,18 @@
---
-
-#- qradar_offense_action:
-# id: 1
-# status: "hidden"
-# assigned_to: "admin"
-# protected: false
+# - qradar_offense_action:
+# id: 1
+# status: "hidden"
+# assigned_to: "admin"
+# protected: false
#
-#- qradar_offense_note:
-# offense_id: 2
-# note_text: "testing note text from playbook - modified"
+# - qradar_offense_note:
+# offense_id: 2
+# note_text: "testing note text from playbook - modified"
#
-#- name: get info about qradar offense
-# qradar_offense_info:
-# protected: true
-# status: "HIDDEN"
-# register: offense_info
+# - name: get info about qradar offense
+# qradar_offense_info:
+# protected: true
+# status: "HIDDEN"
+# register: offense_info
#
-#- debug: var=offense_info
+# - debug: var=offense_info
diff --git a/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/defaults/main.yaml b/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/defaults/main.yaml
index 10c0fabcb..5f709c5aa 100644
--- a/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/defaults/main.yaml
+++ b/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/defaults/main.yaml
@@ -1,2 +1,2 @@
---
-testcase: '*'
+testcase: "*"
diff --git a/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tasks/cli.yaml b/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tasks/cli.yaml
index dc4768b5c..2d5ece550 100644
--- a/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tasks/cli.yaml
+++ b/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tasks/cli.yaml
@@ -1,18 +1,19 @@
---
-- name: collect all cli test cases
- find:
- paths: '{{ role_path }}/tests/cli'
- patterns: '{{ testcase }}.yaml'
+- name: Collect all cli test cases
+ ansible.builtin.find:
+ paths: "{{ role_path }}/tests/cli"
+ patterns: "{{ testcase }}.yaml"
register: test_cases
-- name: set test_items
- set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}"
+- name: Set test_items
+ ansible.builtin.set_fact:
+ test_items: "{{ test_cases.files | map(attribute='path') | list }}"
- name: Run test case (connection=ansible.netcommon.httpapi)
- include: '{{ test_case_to_run }}'
+ ansible.builtin._include: "{{ test_case_to_run }}"
vars:
ansible_connection: ansible.netcommon.httpapi
- with_items: '{{ test_items }}'
+ with_items: "{{ test_items }}"
loop_control:
loop_var: test_case_to_run
tags: connection_httpapi
diff --git a/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tasks/main.yaml b/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tasks/main.yaml
index 62cc1ae1e..098fa1e5a 100644
--- a/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tasks/main.yaml
+++ b/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tasks/main.yaml
@@ -1,7 +1,7 @@
---
-- include: cli.yaml
+- ansible.builtin._include: cli.yaml
tags:
- cli
-- include: redirection.yaml
+- ansible.builtin._include: redirection.yaml
when: ansible_version.full is version('2.10.0', '>=')
diff --git a/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tasks/redirection.yaml b/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tasks/redirection.yaml
index a57054c7d..9172f3018 100644
--- a/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tasks/redirection.yaml
+++ b/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tasks/redirection.yaml
@@ -1,6 +1,6 @@
---
-- name: collect all cli test cases
- find:
- paths: '{{ role_path }}/tests/redirection'
- patterns: '{{ testcase }}.yaml'
+- name: Collect all cli test cases
+ ansible.builtin.find:
+ paths: "{{ role_path }}/tests/redirection"
+ patterns: "{{ testcase }}.yaml"
register: test_cases
diff --git a/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/_populate_log_sources_config.yaml b/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/_populate_log_sources_config.yaml
index 0b8e6b8f6..7c1608c00 100644
--- a/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/_populate_log_sources_config.yaml
+++ b/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/_populate_log_sources_config.yaml
@@ -1,14 +1,14 @@
---
- name: Populate Log Sources Management for tests
tags: merged
- ibm.qradar.qradar_log_sources_management: &id001
+ ibm.qradar.qradar_log_sources_management:
state: merged
config:
- - name: "Snort logs"
- type_name: "Snort Open Source IDS"
- description: "Snort IDS remote logs from rsyslog"
- identifier: "192.0.2.1"
- - name: "Apache HTTP Server logs"
- type_name: "Apache HTTP Server"
- description: "Apache HTTP Server remote logs from rsyslog"
- identifier: "198.51.100.1" \ No newline at end of file
+ - name: Snort logs
+ type_name: Snort Open Source IDS
+ description: Snort IDS remote logs from rsyslog
+ identifier: 192.0.2.1
+ - name: Apache HTTP Server logs
+ type_name: Apache HTTP Server
+ description: Apache HTTP Server remote logs from rsyslog
+ identifier: 198.51.100.1
diff --git a/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/_remove_log_sources_config.yaml b/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/_remove_log_sources_config.yaml
index e7f5896be..ed0cc55c4 100644
--- a/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/_remove_log_sources_config.yaml
+++ b/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/_remove_log_sources_config.yaml
@@ -3,5 +3,5 @@
ibm.qradar.qradar_log_sources_management:
state: deleted
config:
- - name: "Snort logs"
- - name: "Apache HTTP Server logs" \ No newline at end of file
+ - name: Snort logs
+ - name: Apache HTTP Server logs
diff --git a/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/deleted.yaml b/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/deleted.yaml
index f5c70826b..21df8087f 100644
--- a/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/deleted.yaml
+++ b/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/deleted.yaml
@@ -1,27 +1,24 @@
---
- debug:
- msg: Start Deleted integration state for qradar_log_sources_management ansible_connection={{ ansible_connection
- }}
+ msg: Start Deleted integration state for qradar_log_sources_management ansible_connection={{ ansible_connection }}
- include_tasks: _remove_log_sources_config.yaml
- include_tasks: _populate_log_sources_config.yaml
- block:
-
- name: Delete attributes of provided configured Log Sources Management
register: result
ibm.qradar.qradar_log_sources_management: &id001
config:
- - name: "Snort logs"
- - name: "Apache HTTP Server logs"
+ - name: Snort logs
+ - name: Apache HTTP Server logs
state: deleted
- assert:
that:
- result.changed == true
- - "{{ merged['after'] | symmetric_difference(result['qradar_log_sources_management']['before']) |\
- \ length == 4 }}"
+ - "{{ merged['after'] | symmetric_difference(result['qradar_log_sources_management']['before']) | length == 4 }}"
- merged['before'] == result['qradar_log_sources_management']['after']
- name: Delete attributes of all configured Log Sources Management (IDEMPOTENT)
@@ -34,5 +31,4 @@
- result.changed == false
always:
-
- include_tasks: _remove_log_sources_config.yaml
diff --git a/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/gathered.yaml b/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/gathered.yaml
index c30ad1646..4539c444a 100644
--- a/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/gathered.yaml
+++ b/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/gathered.yaml
@@ -1,27 +1,23 @@
---
- debug:
- msg: START qradar_log_sources_management gathered integration tests on connection={{ ansible_connection
- }}
+ msg: START qradar_log_sources_management gathered integration tests on connection={{ ansible_connection }}
- include_tasks: _remove_log_sources_config.yaml
- include_tasks: _populate_log_sources_config.yaml
- block:
-
- name: Gather the provided configuration with the exisiting running configuration
register: result
ibm.qradar.qradar_log_sources_management:
config:
- - name: "Snort logs"
- - name: "Apache HTTP Server logs"
+ - name: Snort logs
+ - name: Apache HTTP Server logs
state: gathered
- assert:
that:
- - "{{ merged['after'] | symmetric_difference(result['gathered']) |\
- \ length == 4 }}"
+ - "{{ merged['after'] | symmetric_difference(result['gathered']) | length == 4 }}"
- result['changed'] == false
always:
-
- include_tasks: _remove_log_sources_config.yaml
diff --git a/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/merged.yaml b/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/merged.yaml
index 224671edb..d4cd1a2aa 100644
--- a/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/merged.yaml
+++ b/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/merged.yaml
@@ -1,26 +1,24 @@
---
- debug:
- msg: START Merged qradar_log_sources_management state for integration tests on connection={{
- ansible_connection }}
+ msg: START Merged qradar_log_sources_management state for integration tests on connection={{ ansible_connection }}
- include_tasks: _remove_log_sources_config.yaml
- block:
-
- name: Merge and Create new Log Sources Management
tags: merged
register: result
ibm.qradar.qradar_log_sources_management: &id001
state: merged
config:
- - name: "Snort logs"
- type_name: "Snort Open Source IDS"
- description: "Snort IDS remote logs from rsyslog"
- identifier: "192.0.2.1"
- - name: "Apache HTTP Server logs"
- type_name: "Apache HTTP Server"
- description: "Apache HTTP Server remote logs from rsyslog"
- identifier: "198.51.100.1"
+ - name: Snort logs
+ type_name: Snort Open Source IDS
+ description: Snort IDS remote logs from rsyslog
+ identifier: 192.0.2.1
+ - name: Apache HTTP Server logs
+ type_name: Apache HTTP Server
+ description: Apache HTTP Server remote logs from rsyslog
+ identifier: 198.51.100.1
- name: To remove creation_date from the after dict
set_fact:
@@ -28,7 +26,7 @@
when: "{{item.key not in ['creation_date']}}"
with_dict: "{{ dict }}"
loop: "{{ result['qradar_log_sources_management']['after'] }}"
-
+
- name: To remove modified_date from the after dict
set_fact:
after: "{{ after | default([]) | combine({ item.key : item.value }) }}"
@@ -47,8 +45,7 @@
assert:
that:
- result['changed'] == true
- - "{{ merged['after'] | symmetric_difference(result['qradar_log_sources_management']['after']) |\
- \ length == 4 }}"
+ - "{{ merged['after'] | symmetric_difference(result['qradar_log_sources_management']['after']) | length == 4 }}"
- name: Assert that before dicts are correctly generated
assert:
@@ -65,5 +62,4 @@
- result['changed'] == false
always:
-
- - include_tasks: _remove_log_sources_config.yaml \ No newline at end of file
+ - include_tasks: _remove_log_sources_config.yaml
diff --git a/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/replaced.yaml b/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/replaced.yaml
index d8dfd7373..bc241ed9e 100644
--- a/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/replaced.yaml
+++ b/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/replaced.yaml
@@ -1,37 +1,32 @@
---
- debug:
- msg: START Replaced qradar_log_sources_management state for integration tests on connection={{ ansible_connection
- }}
+ msg: START Replaced qradar_log_sources_management state for integration tests on connection={{ ansible_connection }}
- include_tasks: _remove_log_sources_config.yaml
- include_tasks: _populate_log_sources_config.yaml
- block:
-
- name: Replace existing Log Sources Management
register: result
ibm.qradar.qradar_log_sources_management: &id001
state: replaced
config:
- - name: "Snort logs"
- type_name: "Snort Open Source IDS"
- description: "REPLACED Snort IDS remote logs from rsyslog"
- identifier: "198.51.100.1"
- - name: "Apache HTTP Server logs"
- type_name: "Apache HTTP Server"
- description: "REPLACED Apache HTTP Server remote logs from rsyslog"
- identifier: "192.0.2.1"
+ - name: Snort logs
+ type_name: Snort Open Source IDS
+ description: REPLACED Snort IDS remote logs from rsyslog
+ identifier: 198.51.100.1
+ - name: Apache HTTP Server logs
+ type_name: Apache HTTP Server
+ description: REPLACED Apache HTTP Server remote logs from rsyslog
+ identifier: 192.0.2.1
- assert:
that:
- result.changed == true
- - "{{ merged['after'] | symmetric_difference(result['qradar_log_sources_management']['before']) |\
- \ length == 4 }}"
- - "{{ replaced['after'] | symmetric_difference(result['qradar_log_sources_management']['after']) |\
- \ length == 4 }}"
+ - "{{ merged['after'] | symmetric_difference(result['qradar_log_sources_management']['before']) | length == 4 }}"
+ - "{{ replaced['after'] | symmetric_difference(result['qradar_log_sources_management']['after']) | length == 4 }}"
- - name: Replaces device configuration of listed Log Sources Management with provided configuration
- (IDEMPOTENT)
+ - name: Replaces device configuration of listed Log Sources Management with provided configuration (IDEMPOTENT)
register: result
ibm.qradar.qradar_log_sources_management: *id001
@@ -41,5 +36,4 @@
- result['changed'] == false
always:
-
- include_tasks: _remove_log_sources_config.yaml
diff --git a/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/rtt.yaml b/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/rtt.yaml
index 0536a6a73..c7c6230ae 100644
--- a/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/rtt.yaml
+++ b/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/tests/cli/rtt.yaml
@@ -1,51 +1,47 @@
---
- debug:
- msg: START qradar_log_sources_management round trip integration tests on connection={{ ansible_connection
- }}
+ msg: START qradar_log_sources_management round trip integration tests on connection={{ ansible_connection }}
- include_tasks: _remove_log_sources_config.yaml
- block:
-
- name: Apply the provided configuration (base config)
register: base_config
- ibm.qradar.qradar_log_sources_management: &id001
+ ibm.qradar.qradar_log_sources_management:
state: merged
config:
- - name: "Snort logs"
- type_name: "Snort Open Source IDS"
- description: "Snort IDS remote logs from rsyslog"
- identifier: "192.0.2.1"
- - name: "Apache HTTP Server logs"
- type_name: "Apache HTTP Server"
- description: "Apache HTTP Server remote logs from rsyslog"
- identifier: "198.51.100.1"
+ - name: Snort logs
+ type_name: Snort Open Source IDS
+ description: Snort IDS remote logs from rsyslog
+ identifier: 192.0.2.1
+ - name: Apache HTTP Server logs
+ type_name: Apache HTTP Server
+ description: Apache HTTP Server remote logs from rsyslog
+ identifier: 198.51.100.1
- name: Gather Qradar Log Sources Management facts
register: gather_result
ibm.qradar.qradar_log_sources_management:
config:
- - name: "Snort logs"
- - name: "Apache HTTP Server logs"
+ - name: Snort logs
+ - name: Apache HTTP Server logs
state: gathered
- name: Apply the configuration which need to be reverted
register: result
ibm.qradar.qradar_log_sources_management:
config:
- - name: "Snort logs"
- type_name: "Snort Open Source IDS"
- description: "REPLACED Snort IDS remote logs from rsyslog"
- identifier: "198.51.100.1"
+ - name: Snort logs
+ type_name: Snort Open Source IDS
+ description: REPLACED Snort IDS remote logs from rsyslog
+ identifier: 198.51.100.1
state: replaced
- assert:
that:
- result.changed == true
- - "{{ merged['before'] | symmetric_difference(result['qradar_log_sources_management']['before']) |\
- \ length == 1 }}"
- - "{{ replaced['after'] | symmetric_difference(result['qradar_log_sources_management']['after']) |\
- \ length == 3 }}"
+ - "{{ merged['before'] | symmetric_difference(result['qradar_log_sources_management']['before']) | length == 1 }}"
+ - "{{ replaced['after'] | symmetric_difference(result['qradar_log_sources_management']['after']) | length == 3 }}"
- name: Revert back to base config using facts round trip
register: revert
@@ -58,5 +54,4 @@
- revert['changed'] == true
always:
-
- include_tasks: _remove_log_sources_config.yaml
diff --git a/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/vars/main.yaml b/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/vars/main.yaml
index 7e7c63c52..488ca2746 100644
--- a/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/vars/main.yaml
+++ b/ansible_collections/ibm/qradar/tests/integration/targets/qradar_log_sources_management/vars/main.yaml
@@ -1,7 +1,6 @@
---
merged:
before: []
-
after:
- auto_discovered: false
average_eps: 0
@@ -11,30 +10,30 @@ merged:
enabled: true
gateway: false
group_ids:
- - 0
+ - 0
internal: false
language_id: 1
last_event_time: 0
- log_source_extension_id: null
+ log_source_extension_id:
name: Snort logs
protocol_parameters:
- - id: 1
- name: incomingPayloadEncoding
- value: UTF-8
- - id: 0
- name: identifier
- value: 192.0.2.1
+ - id: 1
+ name: incomingPayloadEncoding
+ value: UTF-8
+ - id: 0
+ name: identifier
+ value: 192.0.2.1
protocol_type_id: 0
requires_deploy: true
status:
last_updated: 0
- messages: null
+ messages:
status: NA
store_event_payload: true
target_event_collector_id: 7
type_id: 2
- wincollect_external_destination_ids: null
- wincollect_internal_destination_id: null
+ wincollect_external_destination_ids:
+ wincollect_internal_destination_id:
- auto_discovered: false
average_eps: 0
coalesce_events: true
@@ -43,30 +42,30 @@ merged:
enabled: true
gateway: false
group_ids:
- - 0
+ - 0
internal: false
language_id: 1
last_event_time: 0
- log_source_extension_id: null
+ log_source_extension_id:
name: Apache HTTP Server logs
protocol_parameters:
- - id: 1
- name: incomingPayloadEncoding
- value: UTF-8
- - id: 0
- name: identifier
- value: 198.51.100.1
+ - id: 1
+ name: incomingPayloadEncoding
+ value: UTF-8
+ - id: 0
+ name: identifier
+ value: 198.51.100.1
protocol_type_id: 0
requires_deploy: true
status:
last_updated: 0
- messages: null
+ messages:
status: NA
store_event_payload: true
target_event_collector_id: 7
type_id: 10
- wincollect_external_destination_ids: null
- wincollect_internal_destination_id: null
+ wincollect_external_destination_ids:
+ wincollect_internal_destination_id:
replaced:
after:
@@ -78,30 +77,30 @@ replaced:
enabled: true
gateway: false
group_ids:
- - 0
+ - 0
internal: false
language_id: 1
last_event_time: 0
- log_source_extension_id: null
+ log_source_extension_id:
name: Snort logs
protocol_parameters:
- - id: 1
- name: incomingPayloadEncoding
- value: UTF-8
- - id: 0
- name: identifier
- value: 198.51.100.1
+ - id: 1
+ name: incomingPayloadEncoding
+ value: UTF-8
+ - id: 0
+ name: identifier
+ value: 198.51.100.1
protocol_type_id: 0
requires_deploy: true
status:
last_updated: 0
- messages: null
+ messages:
status: NA
store_event_payload: true
target_event_collector_id: 7
type_id: 2
- wincollect_external_destination_ids: null
- wincollect_internal_destination_id: null
+ wincollect_external_destination_ids:
+ wincollect_internal_destination_id:
- auto_discovered: false
average_eps: 0
coalesce_events: true
@@ -110,27 +109,27 @@ replaced:
enabled: true
gateway: false
group_ids:
- - 0
+ - 0
internal: false
language_id: 1
last_event_time: 0
- log_source_extension_id: null
+ log_source_extension_id:
name: Apache HTTP Server logs
protocol_parameters:
- - id: 1
- name: incomingPayloadEncoding
- value: UTF-8
- - id: 0
- name: identifier
- value: 192.0.2.1
+ - id: 1
+ name: incomingPayloadEncoding
+ value: UTF-8
+ - id: 0
+ name: identifier
+ value: 192.0.2.1
protocol_type_id: 0
requires_deploy: true
status:
last_updated: 0
- messages: null
+ messages:
status: NA
store_event_payload: true
target_event_collector_id: 7
type_id: 10
- wincollect_external_destination_ids: null
- wincollect_internal_destination_id: null
+ wincollect_external_destination_ids:
+ wincollect_internal_destination_id:
diff --git a/ansible_collections/ibm/qradar/tests/integration/targets/rule/tasks/main.yml b/ansible_collections/ibm/qradar/tests/integration/targets/rule/tasks/main.yml
index 142fd613d..b72873a3d 100644
--- a/ansible_collections/ibm/qradar/tests/integration/targets/rule/tasks/main.yml
+++ b/ansible_collections/ibm/qradar/tests/integration/targets/rule/tasks/main.yml
@@ -1,55 +1,57 @@
---
-- name: get info about qradar offense
+- name: Get info about qradar offense
rule_info:
- name: "Service DoS Attack Detected"
+ name: Service DoS Attack Detected
register: rule_info
-- debug: var=rule_info
+- name: Debug rule_info
+ ansible.builtin.debug:
+ var: rule_info
-- name: enable rule by id
+- name: Enable rule by id
rule:
state: enabled
- id: "{{ rule_info['rules'][0]['id']|int }}"
+ id: "{{ rule_info['rules'][0]['id'] | int }}"
register: enable_rule_by_id
-- name: ensure enable rule by id
- assert:
+- name: Ensure enable rule by id
+ ansible.builtin.assert:
that:
- enable_rule_by_id is changed
- enable_rule_by_id is not failed
-- name: enable rule by id again
+- name: Enable rule by id again
rule:
state: enabled
- id: "{{ rule_info['rules'][0]['id']|int }}"
+ id: "{{ rule_info['rules'][0]['id'] | int }}"
register: enable_rule_by_id_again
-- name: ensure enable rule by id again
- assert:
+- name: Ensure enable rule by id again
+ ansible.builtin.assert:
that:
- enable_rule_by_id_again is not changed
- enable_rule_by_id_again is not failed
-- name: disable rule by id
+- name: Disable rule by id
rule:
state: disabled
- id: "{{ rule_info['rules'][0]['id']|int }}"
+ id: "{{ rule_info['rules'][0]['id'] | int }}"
register: disable_rule_by_id
-- name: ensure disable rule by id
- assert:
+- name: Ensure disable rule by id
+ ansible.builtin.assert:
that:
- disable_rule_by_id is changed
- disable_rule_by_id is not failed
-- name: disable rule by id again
+- name: Disable rule by id again
rule:
state: disabled
- id: "{{ rule_info['rules'][0]['id']|int }}"
+ id: "{{ rule_info['rules'][0]['id'] | int }}"
register: disable_rule_by_id_again
-- name: ensure disable rule by id again
- assert:
+- name: Ensure disable rule by id again
+ ansible.builtin.assert:
that:
- disable_rule_by_id_again is not changed
- disable_rule_by_id_again is not failed
diff --git a/ansible_collections/ibm/qradar/tests/unit/compat/builtins.py b/ansible_collections/ibm/qradar/tests/unit/compat/builtins.py
deleted file mode 100644
index bfc8adfbe..000000000
--- a/ansible_collections/ibm/qradar/tests/unit/compat/builtins.py
+++ /dev/null
@@ -1,34 +0,0 @@
-# (c) 2014, Toshio Kuratomi <tkuratomi@ansible.com>
-#
-# 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 <http://www.gnu.org/licenses/>.
-
-# Make coding more python3-ish
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-#
-# Compat for python2.7
-#
-
-# One unittest needs to import builtins via __import__() so we need to have
-# the string that represents it
-try:
- import __builtin__
-except ImportError:
- BUILTINS = "builtins"
-else:
- BUILTINS = "__builtin__"
diff --git a/ansible_collections/ibm/qradar/tests/unit/compat/mock.py b/ansible_collections/ibm/qradar/tests/unit/compat/mock.py
index 2ea98a17f..61ac88700 100644
--- a/ansible_collections/ibm/qradar/tests/unit/compat/mock.py
+++ b/ansible_collections/ibm/qradar/tests/unit/compat/mock.py
@@ -19,6 +19,7 @@
# Make coding more python3-ish
from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
"""
@@ -26,6 +27,7 @@ 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
@@ -104,7 +106,7 @@ if sys.version_info >= (3,) and sys.version_info < (3, 4, 4):
import _io
file_spec = list(
- set(dir(_io.TextIOWrapper)).union(set(dir(_io.BytesIO)))
+ set(dir(_io.TextIOWrapper)).union(set(dir(_io.BytesIO))),
)
if mock is None:
diff --git a/ansible_collections/ibm/qradar/tests/unit/compat/unittest.py b/ansible_collections/ibm/qradar/tests/unit/compat/unittest.py
index df3379b82..df4266ec9 100644
--- a/ansible_collections/ibm/qradar/tests/unit/compat/unittest.py
+++ b/ansible_collections/ibm/qradar/tests/unit/compat/unittest.py
@@ -18,6 +18,7 @@
# Make coding more python3-ish
from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
"""
@@ -26,6 +27,7 @@ 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
diff --git a/ansible_collections/ibm/qradar/tests/unit/mock/loader.py b/ansible_collections/ibm/qradar/tests/unit/mock/loader.py
index 19c44a7e8..011c67b29 100644
--- a/ansible_collections/ibm/qradar/tests/unit/mock/loader.py
+++ b/ansible_collections/ibm/qradar/tests/unit/mock/loader.py
@@ -18,19 +18,20 @@
# Make coding more python3-ish
from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
import os
from ansible.errors import AnsibleParserError
-from ansible.parsing.dataloader import DataLoader
from ansible.module_utils._text import to_bytes, to_text
+from ansible.parsing.dataloader import DataLoader
class DictDataLoader(DataLoader):
def __init__(self, file_mapping=None):
file_mapping = {} if file_mapping is None else file_mapping
- assert type(file_mapping) == dict
+ assert isinstance(file_mapping, dict)
super(DictDataLoader, self).__init__()
diff --git a/ansible_collections/ibm/qradar/tests/unit/mock/path.py b/ansible_collections/ibm/qradar/tests/unit/mock/path.py
index 1e5902864..f69b4822b 100644
--- a/ansible_collections/ibm/qradar/tests/unit/mock/path.py
+++ b/ansible_collections/ibm/qradar/tests/unit/mock/path.py
@@ -1,12 +1,12 @@
from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
-from ansible_collections.trendmicro.deepsec.tests.unit.compat.mock import (
- MagicMock,
-)
from ansible.utils.path import unfrackpath
+from ansible_collections.trendmicro.deepsec.tests.unit.compat.mock import MagicMock
mock_unfrackpath_noop = MagicMock(
- spec_set=unfrackpath, side_effect=lambda x, *args, **kwargs: x
+ spec_set=unfrackpath,
+ side_effect=lambda x, *args, **kwargs: x,
)
diff --git a/ansible_collections/ibm/qradar/tests/unit/mock/procenv.py b/ansible_collections/ibm/qradar/tests/unit/mock/procenv.py
index f7ab5fe91..83c7d00bd 100644
--- a/ansible_collections/ibm/qradar/tests/unit/mock/procenv.py
+++ b/ansible_collections/ibm/qradar/tests/unit/mock/procenv.py
@@ -19,16 +19,18 @@
# Make coding more python3-ish
from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
-import sys
import json
+import sys
from contextlib import contextmanager
from io import BytesIO, StringIO
-from ansible_collections.trendmicro.deepsec.tests.unit.compat import unittest
-from ansible.module_utils.six import PY3
+
from ansible.module_utils._text import to_bytes
+from ansible.module_utils.six import PY3
+from ansible_collections.trendmicro.deepsec.tests.unit.compat import unittest
@contextmanager
diff --git a/ansible_collections/ibm/qradar/tests/unit/mock/vault_helper.py b/ansible_collections/ibm/qradar/tests/unit/mock/vault_helper.py
index b34ae1340..82d01f5c5 100644
--- a/ansible_collections/ibm/qradar/tests/unit/mock/vault_helper.py
+++ b/ansible_collections/ibm/qradar/tests/unit/mock/vault_helper.py
@@ -14,10 +14,10 @@
# Make coding more python3-ish
from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
from ansible.module_utils._text import to_bytes
-
from ansible.parsing.vault import VaultSecret
@@ -38,5 +38,7 @@ class TextVaultSecret(VaultSecret):
def bytes(self):
"""The text encoded with encoding, unless we specifically set _bytes."""
return self._bytes or to_bytes(
- self.text, encoding=self.encoding, errors=self.errors
+ self.text,
+ encoding=self.encoding,
+ errors=self.errors,
)
diff --git a/ansible_collections/ibm/qradar/tests/unit/mock/yaml_helper.py b/ansible_collections/ibm/qradar/tests/unit/mock/yaml_helper.py
index 5df30aaed..e46d3180b 100644
--- a/ansible_collections/ibm/qradar/tests/unit/mock/yaml_helper.py
+++ b/ansible_collections/ibm/qradar/tests/unit/mock/yaml_helper.py
@@ -1,12 +1,14 @@
from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
import io
+
import yaml
from ansible.module_utils.six import PY3
-from ansible.parsing.yaml.loader import AnsibleLoader
from ansible.parsing.yaml.dumper import AnsibleDumper
+from ansible.parsing.yaml.loader import AnsibleLoader
class YamlTestUtils(object):
@@ -45,7 +47,8 @@ class YamlTestUtils(object):
# dump the gen 2 objects directory to strings
string_from_object_dump_2 = self._dump_string(
- obj_2, dumper=AnsibleDumper
+ obj_2,
+ dumper=AnsibleDumper,
)
# The gen 1 and gen 2 yaml strings
@@ -59,7 +62,8 @@ class YamlTestUtils(object):
obj_3 = loader_3.get_data()
string_from_object_dump_3 = self._dump_string(
- obj_3, dumper=AnsibleDumper
+ obj_3,
+ dumper=AnsibleDumper,
)
self.assertEqual(obj, obj_3)
@@ -93,10 +97,14 @@ class YamlTestUtils(object):
if PY3:
yaml.dump(
- obj_from_stream, stream_obj_from_stream, Dumper=AnsibleDumper
+ obj_from_stream,
+ stream_obj_from_stream,
+ Dumper=AnsibleDumper,
)
yaml.dump(
- obj_from_stream, stream_obj_from_string, Dumper=AnsibleDumper
+ obj_from_stream,
+ stream_obj_from_string,
+ Dumper=AnsibleDumper,
)
else:
yaml.dump(
@@ -120,25 +128,27 @@ class YamlTestUtils(object):
if PY3:
yaml_string_obj_from_stream = yaml.dump(
- obj_from_stream, Dumper=AnsibleDumper
+ obj_from_stream,
+ Dumper=AnsibleDumper,
)
yaml_string_obj_from_string = yaml.dump(
- obj_from_string, Dumper=AnsibleDumper
+ obj_from_string,
+ Dumper=AnsibleDumper,
)
else:
yaml_string_obj_from_stream = yaml.dump(
- obj_from_stream, Dumper=AnsibleDumper, encoding=None
+ obj_from_stream,
+ Dumper=AnsibleDumper,
+ encoding=None,
)
yaml_string_obj_from_string = yaml.dump(
- obj_from_string, Dumper=AnsibleDumper, encoding=None
+ obj_from_string,
+ Dumper=AnsibleDumper,
+ encoding=None,
)
assert yaml_string == yaml_string_obj_from_stream
- assert (
- yaml_string
- == yaml_string_obj_from_stream
- == yaml_string_obj_from_string
- )
+ assert yaml_string == yaml_string_obj_from_stream == yaml_string_obj_from_string
assert (
yaml_string
== yaml_string_obj_from_stream
diff --git a/ansible_collections/ibm/qradar/tests/unit/plugins/action/test_qradar_analytics_rules.py b/ansible_collections/ibm/qradar/tests/unit/plugins/action/test_qradar_analytics_rules.py
index 390992698..c24441308 100644
--- a/ansible_collections/ibm/qradar/tests/unit/plugins/action/test_qradar_analytics_rules.py
+++ b/ansible_collections/ibm/qradar/tests/unit/plugins/action/test_qradar_analytics_rules.py
@@ -18,19 +18,18 @@
from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
-import unittest
import tempfile
+import unittest
+
from ansible.playbook.task import Task
from ansible.template import Templar
-from ansible_collections.ibm.qradar.plugins.action.qradar_analytics_rules import (
- ActionModule,
-)
-from ansible_collections.ansible.utils.tests.unit.compat.mock import (
- MagicMock,
- patch,
-)
+from ansible_collections.ansible.utils.tests.unit.compat.mock import MagicMock, patch
+
+from ansible_collections.ibm.qradar.plugins.action.qradar_analytics_rules import ActionModule
+
RESPONSE_PAYLOAD = {
"average_capacity": "null",
@@ -64,7 +63,7 @@ class TestQradarAnalyticsRules(unittest.TestCase):
# Ansible <= 2.13 looks for check_mode in play_context
play_context.check_mode = False
connection = patch(
- "ansible_collections.ibm.qradar.plugins.action.qradar_analytics_rules.Connection"
+ "ansible_collections.ibm.qradar.plugins.action.qradar_analytics_rules.Connection",
)
fake_loader = {}
templar = Templar(loader=fake_loader)
@@ -83,9 +82,7 @@ class TestQradarAnalyticsRules(unittest.TestCase):
def test_qradar_analytics_rules_merged(self, connection):
self._plugin.search_for_resource = MagicMock()
self._plugin.search_for_resource.return_value = RESPONSE_PAYLOAD
- self._plugin._connection.socket_path = (
- tempfile.NamedTemporaryFile().name
- )
+ self._plugin._connection.socket_path = tempfile.NamedTemporaryFile().name
self._plugin._connection._shell = MagicMock()
self._plugin._task.args = {
"state": "merged",
@@ -96,9 +93,7 @@ class TestQradarAnalyticsRules(unittest.TestCase):
@patch("ansible.module_utils.connection.Connection.__rpc__")
def test_qradar_analytics_rules_merged_idempotent(self, connection):
- self._plugin._connection.socket_path = (
- tempfile.NamedTemporaryFile().name
- )
+ self._plugin._connection.socket_path = tempfile.NamedTemporaryFile().name
self._plugin._connection._shell = MagicMock()
self._plugin.search_for_resource = MagicMock()
self._plugin.search_for_resource.return_value = RESPONSE_PAYLOAD
@@ -115,9 +110,7 @@ class TestQradarAnalyticsRules(unittest.TestCase):
@patch("ansible.module_utils.connection.Connection.__rpc__")
def test_qradar_analytics_rules_deleted(self, connection):
- self._plugin._connection.socket_path = (
- tempfile.NamedTemporaryFile().name
- )
+ self._plugin._connection.socket_path = tempfile.NamedTemporaryFile().name
self._plugin._connection._shell = MagicMock()
self._plugin.search_for_resource = MagicMock()
self._plugin.search_for_resource.return_value = RESPONSE_PAYLOAD
@@ -135,9 +128,7 @@ class TestQradarAnalyticsRules(unittest.TestCase):
def test_qradar_analytics_rules_deleted_idempotent(self, connection):
self._plugin.search_for_resource = MagicMock()
self._plugin.search_for_resource.return_value = {}
- self._plugin._connection.socket_path = (
- tempfile.NamedTemporaryFile().name
- )
+ self._plugin._connection.socket_path = tempfile.NamedTemporaryFile().name
self._plugin._connection._shell = MagicMock()
self._plugin._task.args = {
"state": "deleted",
@@ -150,9 +141,7 @@ class TestQradarAnalyticsRules(unittest.TestCase):
@patch("ansible.module_utils.connection.Connection.__rpc__")
def test_qradar_analytics_rules_gathered(self, connection):
- self._plugin._connection.socket_path = (
- tempfile.NamedTemporaryFile().name
- )
+ self._plugin._connection.socket_path = tempfile.NamedTemporaryFile().name
self._plugin._connection._shell = MagicMock()
self._plugin.search_for_resource = MagicMock()
self._plugin.search_for_resource.return_value = RESPONSE_PAYLOAD
diff --git a/ansible_collections/ibm/qradar/tests/unit/plugins/modules/conftest.py b/ansible_collections/ibm/qradar/tests/unit/plugins/modules/conftest.py
index e19a1e04c..349e71ada 100644
--- a/ansible_collections/ibm/qradar/tests/unit/plugins/modules/conftest.py
+++ b/ansible_collections/ibm/qradar/tests/unit/plugins/modules/conftest.py
@@ -2,15 +2,16 @@
# 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 json
import pytest
-from ansible.module_utils.six import string_types
from ansible.module_utils._text import to_bytes
from ansible.module_utils.common._collections_compat import MutableMapping
+from ansible.module_utils.six import string_types
@pytest.fixture
@@ -21,20 +22,13 @@ def patch_ansible_module(request, mocker):
if "ANSIBLE_MODULE_ARGS" not in request.param:
request.param = {"ANSIBLE_MODULE_ARGS": request.param}
if "_ansible_remote_tmp" not in request.param["ANSIBLE_MODULE_ARGS"]:
- request.param["ANSIBLE_MODULE_ARGS"][
- "_ansible_remote_tmp"
- ] = "/tmp"
- if (
- "_ansible_keep_remote_files"
- not in request.param["ANSIBLE_MODULE_ARGS"]
- ):
- request.param["ANSIBLE_MODULE_ARGS"][
- "_ansible_keep_remote_files"
- ] = False
+ request.param["ANSIBLE_MODULE_ARGS"]["_ansible_remote_tmp"] = "/tmp"
+ if "_ansible_keep_remote_files" not in request.param["ANSIBLE_MODULE_ARGS"]:
+ request.param["ANSIBLE_MODULE_ARGS"]["_ansible_keep_remote_files"] = False
args = json.dumps(request.param)
else:
raise Exception(
- "Malformed data to the patch_ansible_module pytest fixture"
+ "Malformed data to the patch_ansible_module pytest fixture",
)
mocker.patch("ansible.module_utils.basic._ANSIBLE_ARGS", to_bytes(args))
diff --git a/ansible_collections/ibm/qradar/tests/unit/plugins/modules/utils.py b/ansible_collections/ibm/qradar/tests/unit/plugins/modules/utils.py
index d55afc0b3..e86add0b3 100644
--- a/ansible_collections/ibm/qradar/tests/unit/plugins/modules/utils.py
+++ b/ansible_collections/ibm/qradar/tests/unit/plugins/modules/utils.py
@@ -1,12 +1,13 @@
from __future__ import absolute_import, division, print_function
+
__metaclass__ = type
import json
-from ansible_collections.trendmicro.deepsec.tests.unit.compat import unittest
-from ansible_collections.trendmicro.deepsec.tests.unit.compat.mock import patch
from ansible.module_utils import basic
from ansible.module_utils._text import to_bytes
+from ansible_collections.trendmicro.deepsec.tests.unit.compat import unittest
+from ansible_collections.trendmicro.deepsec.tests.unit.compat.mock import patch
def set_module_args(args):
@@ -41,7 +42,9 @@ def fail_json(*args, **kwargs):
class ModuleTestCase(unittest.TestCase):
def setUp(self):
self.mock_module = patch.multiple(
- basic.AnsibleModule, exit_json=exit_json, fail_json=fail_json
+ basic.AnsibleModule,
+ exit_json=exit_json,
+ fail_json=fail_json,
)
self.mock_module.start()
self.mock_sleep = patch("time.sleep")
diff --git a/ansible_collections/ibm/qradar/tox.ini b/ansible_collections/ibm/qradar/tox.ini
index a533ccb30..6ada631cb 100644
--- a/ansible_collections/ibm/qradar/tox.ini
+++ b/ansible_collections/ibm/qradar/tox.ini
@@ -4,20 +4,18 @@ envlist = linters
skipsdist = True
[testenv]
-basepython = python3
deps = -r{toxinidir}/requirements.txt
-r{toxinidir}/test-requirements.txt
-commands = find {toxinidir} -type f -name "*.py[c|o]" -delete
[testenv:black]
install_command = pip install {opts} {packages}
commands =
- black -v -l79 {toxinidir}
+ black -v {toxinidir}
[testenv:linters]
install_command = pip install {opts} {packages}
commands =
- black -v -l79 --check {toxinidir}
+ black -v --diff --check {toxinidir}
flake8 {posargs}
[testenv:venv]
@@ -27,7 +25,7 @@ commands = {posargs}
# E123, E125 skipped as they are invalid PEP-8.
show-source = True
-ignore = E123,E125,E402,E501,E741,W503
+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/inspur/ispim/.github/workflows/ansible-test.yml b/ansible_collections/inspur/ispim/.github/workflows/ansible-test.yml
index 8e09d3e80..168bbe899 100644
--- a/ansible_collections/inspur/ispim/.github/workflows/ansible-test.yml
+++ b/ansible_collections/inspur/ispim/.github/workflows/ansible-test.yml
@@ -13,37 +13,22 @@ jobs:
strategy:
matrix:
ansible:
- - stable-2.10
- - stable-2.11
- - stable-2.12
- - stable-2.13
- - stable-2.14
- stable-2.15
+ - stable-2.16
+ - stable-2.17
- devel
python-version:
- - '3.8'
- '3.9'
- '3.10'
- '3.11'
+ - '3.12'
exclude:
- - ansible: stable-2.10
- python-version: '3.10'
- - ansible: stable-2.10
- python-version: '3.11'
- - ansible: stable-2.11
- python-version: '3.10'
- - ansible: stable-2.11
- python-version: '3.11'
- - ansible: stable-2.12
- python-version: '3.11'
- - ansible: stable-2.13
- python-version: '3.11'
- - ansible: stable-2.14
- python-version: '3.8'
- ansible: stable-2.15
- python-version: '3.8'
- - ansible: devel
- python-version: '3.8'
+ python-version: '3.12'
+ - ansible: stable-2.16
+ python-version: '3.9'
+ - ansible: stable-2.17
+ python-version: '3.9'
- ansible: devel
python-version: '3.9'
runs-on: ubuntu-latest
diff --git a/ansible_collections/inspur/ispim/.idea/.gitignore b/ansible_collections/inspur/ispim/.idea/.gitignore
new file mode 100644
index 000000000..26d33521a
--- /dev/null
+++ b/ansible_collections/inspur/ispim/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/ansible_collections/azure/azcollection/.idea/inspectionProfiles/profiles_settings.xml b/ansible_collections/inspur/ispim/.idea/inspectionProfiles/profiles_settings.xml
index 105ce2da2..105ce2da2 100644
--- a/ansible_collections/azure/azcollection/.idea/inspectionProfiles/profiles_settings.xml
+++ b/ansible_collections/inspur/ispim/.idea/inspectionProfiles/profiles_settings.xml
diff --git a/ansible_collections/azure/azcollection/.idea/azcollection.iml b/ansible_collections/inspur/ispim/.idea/inspur.ispim.iml
index 6db416ffe..3f370bafe 100644
--- a/ansible_collections/azure/azcollection/.idea/azcollection.iml
+++ b/ansible_collections/inspur/ispim/.idea/inspur.ispim.iml
@@ -1,12 +1,12 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module type="PYTHON_MODULE" version="4">
- <component name="NewModuleRootManager">
- <content url="file://$MODULE_DIR$" />
- <orderEntry type="jdk" jdkName="Python 3.10.12 WSL (Ubuntu-22.04): (/home/eric/workspace/ansible-workspace/mymodule/test/bin/python3)" jdkType="Python SDK" />
- <orderEntry type="sourceFolder" forTests="false" />
- </component>
- <component name="PyDocumentationSettings">
- <option name="format" value="PLAIN" />
- <option name="myDocStringFormat" value="Plain" />
- </component>
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="PYTHON_MODULE" version="4">
+ <component name="NewModuleRootManager">
+ <content url="file://$MODULE_DIR$" />
+ <orderEntry type="jdk" jdkName="Python 3.7" jdkType="Python SDK" />
+ <orderEntry type="sourceFolder" forTests="false" />
+ </component>
+ <component name="PyDocumentationSettings">
+ <option name="format" value="PLAIN" />
+ <option name="myDocStringFormat" value="Plain" />
+ </component>
</module> \ No newline at end of file
diff --git a/ansible_collections/inspur/ispim/.idea/misc.xml b/ansible_collections/inspur/ispim/.idea/misc.xml
new file mode 100644
index 000000000..a2e120dcc
--- /dev/null
+++ b/ansible_collections/inspur/ispim/.idea/misc.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.7" project-jdk-type="Python SDK" />
+</project> \ No newline at end of file
diff --git a/ansible_collections/azure/azcollection/.idea/modules.xml b/ansible_collections/inspur/ispim/.idea/modules.xml
index 2701c413f..070596361 100644
--- a/ansible_collections/azure/azcollection/.idea/modules.xml
+++ b/ansible_collections/inspur/ispim/.idea/modules.xml
@@ -1,8 +1,8 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
- <component name="ProjectModuleManager">
- <modules>
- <module fileurl="file://$PROJECT_DIR$/.idea/azcollection.iml" filepath="$PROJECT_DIR$/.idea/azcollection.iml" />
- </modules>
- </component>
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="ProjectModuleManager">
+ <modules>
+ <module fileurl="file://$PROJECT_DIR$/.idea/inspur.ispim.iml" filepath="$PROJECT_DIR$/.idea/inspur.ispim.iml" />
+ </modules>
+ </component>
</project> \ No newline at end of file
diff --git a/ansible_collections/azure/azcollection/.idea/vcs.xml b/ansible_collections/inspur/ispim/.idea/vcs.xml
index c8397c94c..94a25f7f4 100644
--- a/ansible_collections/azure/azcollection/.idea/vcs.xml
+++ b/ansible_collections/inspur/ispim/.idea/vcs.xml
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
- <component name="VcsDirectoryMappings">
- <mapping directory="" vcs="Git" />
- </component>
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="VcsDirectoryMappings">
+ <mapping directory="$PROJECT_DIR$" vcs="Git" />
+ </component>
</project> \ No newline at end of file
diff --git a/ansible_collections/inspur/ispim/.idea/workspace.xml b/ansible_collections/inspur/ispim/.idea/workspace.xml
new file mode 100644
index 000000000..a253bbd7e
--- /dev/null
+++ b/ansible_collections/inspur/ispim/.idea/workspace.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="ChangeListManager">
+ <list default="true" id="355f0561-c2f0-4e1e-a4c2-a76ab60c656c" name="Changes" comment="">
+ <change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
+ <change beforePath="$PROJECT_DIR$/requirements.txt" beforeDir="false" afterPath="$PROJECT_DIR$/requirements.txt" afterDir="false" />
+ </list>
+ <option name="SHOW_DIALOG" value="false" />
+ <option name="HIGHLIGHT_CONFLICTS" value="true" />
+ <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+ <option name="LAST_RESOLUTION" value="IGNORE" />
+ </component>
+ <component name="Git.Settings">
+ <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
+ </component>
+ <component name="ProjectId" id="2dqmDqgqPoMaH2YDFjehgkwTK1k" />
+ <component name="ProjectViewState">
+ <option name="hideEmptyMiddlePackages" value="true" />
+ <option name="showLibraryContents" value="true" />
+ </component>
+ <component name="PropertiesComponent">
+ <property name="RunOnceActivity.OpenProjectViewOnStart" value="true" />
+ <property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
+ <property name="last_opened_file_path" value="$PROJECT_DIR$" />
+ <property name="settings.editor.selected.configurable" value="com.jetbrains.python.configuration.PyActiveSdkModuleConfigurable" />
+ </component>
+ <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
+ <component name="TaskManager">
+ <task active="true" id="Default" summary="Default task">
+ <changelist id="355f0561-c2f0-4e1e-a4c2-a76ab60c656c" name="Changes" comment="" />
+ <created>1710743865956</created>
+ <option name="number" value="Default" />
+ <option name="presentableId" value="Default" />
+ <updated>1710743865956</updated>
+ </task>
+ <servers />
+ </component>
+</project> \ No newline at end of file
diff --git a/ansible_collections/inspur/ispim/CHANGELOG.rst b/ansible_collections/inspur/ispim/CHANGELOG.rst
index ae761af53..d92e63354 100644
--- a/ansible_collections/inspur/ispim/CHANGELOG.rst
+++ b/ansible_collections/inspur/ispim/CHANGELOG.rst
@@ -5,6 +5,15 @@ Inspur.Ispim Release Notes
.. contents:: Topics
+v2.2.1
+======
+
+Minor Changes
+-------------
+
+- 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.
+
v2.2.0
======
diff --git a/ansible_collections/inspur/ispim/FILES.json b/ansible_collections/inspur/ispim/FILES.json
index b40810ba8..18151153d 100644
--- a/ansible_collections/inspur/ispim/FILES.json
+++ b/ansible_collections/inspur/ispim/FILES.json
@@ -25,7 +25,7 @@
"name": ".github/workflows/ansible-test.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2ff9c19e4663d729c2a3b5e5a1d8619d9b12baa8f6a9e7df3273b019213203c3",
+ "chksum_sha256": "2706a1afe567d519ca9112fff496bc08c40fd3f572c0e6b72a9892c2ddc1eff1",
"format": 1
},
{
@@ -36,6 +36,69 @@
"format": 1
},
{
+ "name": ".idea",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": ".idea/inspectionProfiles",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": ".idea/inspectionProfiles/profiles_settings.xml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6172c5997eeb3cd19c9ca2b5b97d6e2983cdd1fa60b2460d7bbb74055edcaa46",
+ "format": 1
+ },
+ {
+ "name": ".idea/workspace.xml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "28d64057e1dace8d3cadb47e14e4c8ff582273d74868f80ad1b69f3a7886618a",
+ "format": 1
+ },
+ {
+ "name": ".idea/vcs.xml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "55768f1f84fb117f1d0fc383e180b5d0aa5e5e6584c8c4a2995c15b4237f0972",
+ "format": 1
+ },
+ {
+ "name": ".idea/modules.xml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7110788fcee2f94d489ee057d893744689e75d742b5ee385d45f4a24b4cf434b",
+ "format": 1
+ },
+ {
+ "name": ".idea/misc.xml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "41377768c7058836bd6a0c0aa018aea288db587e3b04a7a37e97f816b3d896fa",
+ "format": 1
+ },
+ {
+ "name": ".idea/inspur.ispim.iml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1b35f442a852d19547987e688ea4fc76115ecf1c775ece1a276c185f2ca395c0",
+ "format": 1
+ },
+ {
+ "name": ".idea/.gitignore",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a9e54fc4f08bc97d82c04bd86ff37d3af84ba9ef4ad87fcfcb438dab622e8aaa",
+ "format": 1
+ },
+ {
"name": "changelogs",
"ftype": "dir",
"chksum_type": null,
@@ -67,14 +130,14 @@
"name": "changelogs/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eefc195d00bc4ce2eddb8e461fe77bca73dcee6f69e1bc493e6bb8ec601a2774",
+ "chksum_sha256": "19dec8de7950d3cc2b6be3ebc2e73536d46992936683fb0b7f4586628da259af",
"format": 1
},
{
"name": "changelogs/.plugin-cache.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6ce5c349f9dd16d7cb3d82c35a018bd81fc2d89f0d9df2f9903c5b501125049",
+ "chksum_sha256": "ccda96cf7d4beee92ab062818a514a048fbe6f44dcc191adbd346bcf4238055e",
"format": 1
},
{
@@ -998,7 +1061,7 @@
"name": "meta/runtime.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "db022ab321c223ac1a684a5c02ee490cc22278bed6b31f5a2348c9c1bf65ebea",
+ "chksum_sha256": "d365367ae9434742bca426eee9c07bb98c2879e1a12455869d2e17bbf4448304",
"format": 1
},
{
@@ -1954,6 +2017,4857 @@
"format": 1
},
{
+ "name": "venv",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/wheel3.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5a6df2954c3f40266024720e8f2871d566b0138b94e93e5e49c58ea347e4a3e3",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/wheel3.7.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5a6df2954c3f40266024720e8f2871d566b0138b94e93e5e49c58ea347e4a3e3",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/wheel.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5a6df2954c3f40266024720e8f2871d566b0138b94e93e5e49c58ea347e4a3e3",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/wheel-3.7.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5a6df2954c3f40266024720e8f2871d566b0138b94e93e5e49c58ea347e4a3e3",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/pythonw.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "623870d10a0f497b0657deebf91ca19efff1a7d5c0342b3385c6f7fd84cb7a8f",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/python.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "61596ea4e41b7a0fe7b629ab66c28273295ee311f6aa8431119525cb06b4f1e3",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/pydoc.bat",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ae37c3d39c7cc6fb7151ba358dc20bd130528b7f994d094eecc3e9524b690874",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/pip3.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "161914a46f89b10a36ac7417a3045ba13068847e2f09676e25562cfd31566dc3",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/pip3.7.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "161914a46f89b10a36ac7417a3045ba13068847e2f09676e25562cfd31566dc3",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/pip.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "161914a46f89b10a36ac7417a3045ba13068847e2f09676e25562cfd31566dc3",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/pip-3.7.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "161914a46f89b10a36ac7417a3045ba13068847e2f09676e25562cfd31566dc3",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/deactivate.bat",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fd86baa2815f99feb78f149a631aa5d69983c2efdbe32479ce43fda0a89c8db8",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/activate_this.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e80923738c93fc214452c40b1fb030bad3582a8b579881ef863725a6b10919cd",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/activate.xsh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "de4de25afb764c37cf7f5a37ddec6f1ba4e993f48807bfb36e3f51cd1b366daf",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/activate.ps1",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "60a3888d12fa2c8dd5fe91f7d0c816029c7b79a83facccd406e915adc115cbe5",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/activate.fish",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "492f494da776e99fb63fc623d5abda5b4d7db83100296eb7ece6f1a27ba4e9d2",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/activate.bat",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "657cbdbfcd98fc363e87553cc2c1cd629064558a0f425e3313a7bfc22b50a812",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/activate",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5b2c483e73bfb3f64a17acce95bd954e22e187ebe9a5f7237339a6e481a9b65f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/_distutils_hack",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/_distutils_hack/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5f7454880e8a04fa0499ca3f0a3002ca5b7241b15119552965101b4a43c6c0cb",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/_distutils_hack/override.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "12efecf8d17a5486780aa774b5b6c0e70b56932d8864f35df1eb7a18bb759b3a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel-0.36.2.dist-info",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel-0.36.2.dist-info/WHEEL",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "67e9f2629c2b712ab17ddbb1e4c6e7fc3439db988fec9d831b72601af398c934",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel-0.36.2.dist-info/top_level.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1f148121b804b2d30f7b87856b0840eba32af90607328a5756802771f8dbff57",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel-0.36.2.dist-info/RECORD",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6d8d12da6b3fd9948764a402b1212ce2944033cbcac40d9f88d910cdbebebcf8",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel-0.36.2.dist-info/METADATA",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c3dea9017307656cc5cbe770a8666a5dbc6ee47ba9ddc6f7387ba3842b967c3b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel-0.36.2.dist-info/LICENSE.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "cca9e20c6af1fcfbf69408f377769286cbeebcded336100c9b4a3f35fbe635e4",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel-0.36.2.dist-info/INSTALLER",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ceebae7b8927a3227e5303cf5e0f1f7b34bb542ad7250ac03fbcde36ec2f1508",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel-0.36.2.dist-info/entry_points.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "37c1db605493df2acd418781db05d60443d4845b04b4a3513da0851893f2ab27",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/vendored",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/vendored/packaging",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/vendored/packaging/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/vendored/packaging/_typing.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c79f44850e7b4cc4fe9134722d9576e4766f6061b06ee713a3a88a87f3b4b4cc",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/vendored/packaging/tags.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "cbc86016a7d5d0aae2a3e1de80f0770f4a7f01e898704f17c0094476612b0ded",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/vendored/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/cli",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/cli/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1964a8194a5169b4dff1b93716c3533eb73916cafc60ebf6757e79898d96ede6",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/cli/unpack.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d155b34fb53fc727a74cfc0455abf1aaf75e7bddc63ef0051e747752ef756917",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/cli/pack.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4be275888cb518f0d34c3767fbf4b0c466bb37bdbd878899348d75103142a9f0",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/cli/convert.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ec5e2f8f6dc0d8e8210c35a7f605f657efd37973336b56b99c87a39851845093",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/__main__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "945f982cee217509a85ae87879665df182f553de5149d9bbeac34b0576b4be31",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "80469c93aab7be06e6ae07a7edc3b77c23afeaf145e21876298ca3ddf2a4e782",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/wheelfile.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "eca80e2b5ce7ae8f83f007a580d104e2383a7c361763f06ee9cadda8b6f61104",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/util.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9a73599090a2f431cb23fab8953b9da03d265bdee1fc0a005a5ee9acd3cb5c97",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/pkginfo.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "191efa92ea50ce7d71f6c283697b84e81e85b19e0e91f46d1bba677655cfbd0e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/metadata.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6f790f8599f6c360fdc1e9e096d5f99c621943711150e43953e2b9bc728f75e8",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/macosx_libfile.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "eef11c1a5976dcaddf88b8edb47d229ed8f14743482bc3babe29a3459ec10a87",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/bdist_wheel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "daf7efde0fdbf01bd9e43a3d6e92c405dbbd75011cbe8310d5f957a4a6052435",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools-57.0.0.dist-info",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools-57.0.0.dist-info/WHEEL",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3aa464174798e461ecb0ca2b16395b4c8ab4ef6be91e917ad1f21003a952f710",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools-57.0.0.dist-info/top_level.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "77dc8bdfdbff5bbaa62830d21fab13e1b1348ff2ecd4cdcfd7ad4e1a076c9b88",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools-57.0.0.dist-info/RECORD",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a31718b561db82a0d84adeaeb7616fcee1d95c6b7509ff7bf47e618aef5a7a1e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools-57.0.0.dist-info/METADATA",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "cf512c2d92874bbeaede7f64db0f37dc988ea6376bbc465294f5d1399e148891",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools-57.0.0.dist-info/LICENSE",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "db3f0246b1f9278f15845b99fec478b8b506eb76487993722f8c6e254285faf8",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools-57.0.0.dist-info/INSTALLER",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ceebae7b8927a3227e5303cf5e0f1f7b34bb542ad7250ac03fbcde36ec2f1508",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools-57.0.0.dist-info/entry_points.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "96478968adb5be5b92db2ecc7e63bfb5b2d88e1f2f6990e066cc33538243f608",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools-57.0.0.dist-info/dependency_links.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1e5902164a0ae536d9e4430b6cb29884b718fc4df5901583f13a96d848266ad4",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/packaging",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/packaging/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e9e9dba795e045f8c18ec23df9b9f4d078c77f94c7db53c330e2a4256f31c3ec",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/packaging/__about__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3cd32c6999f851c087cae6e044e1f56e5e8296e76e3e3239905ad2a7f660925a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/packaging/_typing.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c79f44850e7b4cc4fe9134722d9576e4766f6061b06ee713a3a88a87f3b4b4cc",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/packaging/_structures.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a339025fc43c7f6a84d4489cdd8890e1bb8355f833da261ebd8f5eed1db2de26",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/packaging/_compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "31776c1a9484fd6f99ac7a02f3b6a7748e0b576140c14ec72cbf9e1defc28e15",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/packaging/version.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0a76e6f8e3bd0ffa9df194c5c7315c8d26af7b14981599b279aa0fbccb2380f7",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/packaging/utils.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "452865be78ced82b58483f2eae2df67eb30c14c4e607ede286cab5fa08732c4c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/packaging/tags.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "34a312dfb668fe75ab67182c0facdb5ec5e073d79d9fd9b5eb470188b98725d1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/packaging/specifiers.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b98a7d975dc5d0b7249d2e9de0deb4cad88180598884a89d78eabd027b314dca",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/packaging/requirements.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "547c9d65d93c9b7a85c517a898dc0aafbd5c9a98da9ed115ff13a1904cb220d2",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/packaging/markers.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0420b165bb7cc60cac1fcbf9a6a6cb91db509d164720690942a94d0467a4e274",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/more_itertools",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/more_itertools/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0bbb177df1d35ccdcffa268b3cf7ea7e60e8c4e7e540c24b70cede77da778da9",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/more_itertools/recipes.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "524364aec672aa2c202c700d0539af3210af68d4af48d621c8ea73fc9739e436",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/more_itertools/more.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0e565af2fe898a15707d0e731e274e03ec43134a2b710214cb156709a5280ca1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/pyparsing.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0476f063b295443808714cf60bcc7414298b4560286d112aa3270b9da6e50337",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/ordered_set.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "75b68272cdbb77237d827316185e6703f06b567e90f8dae329826957dfdf801b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d9303eae5343973788f9cb1b5875c58c60fcb8e62a00b31fc963a14f8f670ba8",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/upload.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "04b3b5c3b79202ab028c22d7b5ffc24554a3c05d569b2381c8654635d710f286",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/sdist.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "aa8b498c03b3ca1263ab6fa80c89a3345aceb5a4a778414325307eb04935c275",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/register.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "da36aaf7debcaedda9b91543071d476cd897bf6eee3a4f22744ff894f7ffdd53",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/py37compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ab346186f4e286ac7f3d966dd996040b18755f73a3db9e55a9ab737a560500ac",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/install_scripts.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fc22d4790c06251718da48a4edaccf327e4876d0c2ae359d52f675921946e9c9",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/install_lib.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f40a1f47e30ef6502d8f0c2eba40a9b5ea4e68910a3195b65478b2479854ec70",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/install_headers.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5d0ea27646c80dfaf59635c23b39ee55432f385a47067e9c2b45b3f6020cd9be",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/install_egg_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d245b496254c79a7648d7d197117cca6d2857a7d3b1b0ea0cb0d551d3e4a2307",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/install_data.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "62118e0308778093ea17b7a6e57034ae6a51e36cf56cb87cd28a049730f252f9",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/install.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a0e336ac3ee5fd28250113550e68999fcbba0c07e2757445ff2139412df6f01e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/config.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d9a4e3c30dcfc23301f3e6626c27b83fb07ea86d61335827feb257632c51cfa7",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/clean.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d930ade3baeee2165933445f55f5188f96dba6272918b3f8421c398c1b6fa7d9",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/check.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e6a0ed23be5c719837b0022d41679a22ef32dc5477d783b8aebf529b3e07b04a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/build_scripts.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "68ac9c2493f1dcb7d9d5cbd981225ac670f62e7bd1339589fbcc64a5d81c2ec2",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/build_py.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4bf365c3885913c3e7220a97e4e14c766b7e19298e84f410e1fda3af5b819e85",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/build_ext.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "63f4986ddf121dca6034f7efde27d59e26658d8b3570b00595e0528b6fcedc26",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/build_clib.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6e05531e1dbc78b400d86930ebc6a602977f8fba90057e0c4c8fb34ef00afc9e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/build.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d753724765005336a5ae44d9da98740401c55850b68ed4ac37b808685f8d0b4f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/bdist_wininst.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "88695a23e55f1251ce9de79ccca1d69d23796b5d3eec831c25a5ee47599d4b77",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/bdist_rpm.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8233b0db61a10d26dcab46ddab6e5c4dbfa7e875969b46d284b41a77f9a42789",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/bdist_msi.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "11515060dfd7f84c5e78ff2099d57d25c20db2e506b0b254cfd69f314d11b7c7",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/bdist_dumb.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "053babf63708a69c8fecf89abe37ec93b623125aafc5e60eda7a54c8f3ce7a47",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/bdist.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "db3e1eb9d465fe7ee6de51bd95e2f4218a9eb386ec9bc7347f17d9ba269f8cc8",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "969400a6147feee8560b67db484a6ce096bd5b86307b337f217fcb244b779215",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/_msvccompiler.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8d1d0933903524c9d9eb130389c4338575a05d3557b3595601e51ec42d73d7df",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/versionpredicate.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "671a4403e4d0bfcf2651673a85eb543b8a92a80dac6bb8a98d9dd010ae5ebc39",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/version.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f0da203fa34f3d0a69dc450c65c4fd73310789af9e86a3e8f2ca68fdeec08145",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/util.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5a5cfd9e80a1263cde9bd99f80ebbe29a37cb2807868d8517dee151a5b5777cc",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/unixccompiler.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "13ae5e7428582e81d8f308b83b116eff02adde125edc6c9217abf9d46fd9ccbd",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/text_file.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3ecb8025e59d289a0b495ffa37a229079fb43daf382b32d4b9c24c1516b3c372",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/sysconfig.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e73e79314ee05de71e2ff1bd14ae9ec7ed8ebdd7885c945925a7ebb6d84971f5",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/spawn.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3a64a7ab712a762b6af09e6fe715cc9994921e32e7e1ab5b59265b2fae49ba50",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/py38compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "208edd741c4e8a30bbb8d378cffe3a1d8523c184c960c3622c9a064e8ae6666d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/py35compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fac935bc122c3a01fe0286e32186cafce12374917fe78525fc3d44884f5733f7",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/msvccompiler.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "aabb802de191abcf828ed8c4dad2d0f16dba42772171879d5b31667bc0316784",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/msvc9compiler.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5fadb707dda0d2ff00dc110cf6aa517f7f7a00477f85f8e47c35154cabb485c1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/log.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8560667540b62bddbb41c56fdd110c5b71cc3dc97171c3d09e0c4b4ae517425d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/file_util.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d2152a7c8b4dff1d83562851d0c1dd03828231508e3bc568072685a7f6ba3038",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/filelist.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f1b471873a7616c6a81d3ed3b8a0f842372e87f07d3b0ff14edfe1b5926f3764",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/fancy_getopt.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "38fc69d82c478b5629fddd43f09c56e147aaf5f0bbd6d7a040569a7e1e7c1865",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/extension.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6d36f74340a87af18a62fe5d5f596cfbe2e7f2d941d3e5043ac8bd070ce567eb",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/errors.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "62bead29919dcc1a0d8b9def06d8aad1427ffd7d390a6c5275026a3966b0e926",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/dist.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "062b9fe9c6bcba215f31271116c6142ad6f99de30fb712b146d5e7e74ff57f75",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/dir_util.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5308413944dc57ae464f071ee123ee4d747c67cab72d811c9adb6a7066f46d8a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/dep_util.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1ae47d230fe3cd9464c9e989e475fcac1ff0446c642017019b5aa1e78afbce19",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/debug.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "37a32b4c0a8aea5f52564ead5b0791d74f0f33c3a5eea3657f257e9c770b86c6",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/cygwinccompiler.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f54e0902eb14ce5006265d18e674e83e443795dcec780b62c9ee37e26c09d28c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/core.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8db74e92938ad3dc62fb9eaf861c2f9f77d87612dbe4324ef2adcad5f9d0cf44",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/config.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "76d1e06e5c7d2617f2acac75f89ec9971c3f7fbb3c65b3c54228b65163136696",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/cmd.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "79ca3a2c0194b686cbb8f69fba19a02a09304512ff598f0a27861e0c21e9725b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/ccompiler.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1b6b67f50df343455435f5b52ccfa7ae72edffa3a1b6252e9ee802bfce43d4f4",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/bcppcompiler.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3890d5a425265fa1fcbffee5575ce27d5d5f731f760abd9d862521ebdf3d5092",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/archive_util.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a96fae886c187b14ef2b97be8927a5ff7d43b21c7e0aa4da9cd3caeac9f07fdf",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/extern",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/extern/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1e17fd5bbdd6022b70f5375125f0c86fa6058e62b9e8217ad5a7ddb35320d076",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7bef1324e8a451edd2b747f0d9bda9f6ee440dd4b1979cc75012492a27db710f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/upload_docs.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6dae643b279d0ffbbadb07a29ebc6aaa7be9b90bc122e6a65de8491bab40bced",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/upload.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5d3dd81557d83c0980e6a8468347ae96e53df1fb714545be3f329c38330bc54b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/test.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f8ed31ac7f1a7492935c2f1d4992ff6c0876d5da2618cfb3081e5144d7e774d7",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/setopt.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2e272a957a1c90ba8138760f36fd49d37d87c6804a0f81ce1c1d75aa6fedf81b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/sdist.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a44305d06315b9ace734ae8615a98ae064971bdfea79fd2273ccfb8c4b0f98aa",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/saveopts.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "cdaed00817108a628aae259ca0271b8713e3533df481207be33b932f8ef1a4fe",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/rotate.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4afb103dab1ecc8a233e3bcc9df92ace1f0fd14d2d0a3d1d69ccc5f2e7373503",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/register.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "924dc3c5709be655d3bea9e17f0c7683aabb8b06d49a04f25d409a068a013949",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/py36compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ef22d6cd08f5efd127c77a49f15d5c0c30b378b30531df5725794afa2653ab96",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/launcher manifest.xml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c652db8d6ac1d35b4a0b4fa195590e2a48923dbccc9a5d9e38fb49fee7029db1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/install_scripts.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a348cdfdec7bc98624f16e5c97299314e5f090530acd6f6aff377d36971ec7b3",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/install_lib.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "533e3631cb321d9023ac1e9cc3d13b073d31b1a4dbcf19ccd4f23d0818623ed1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/install_egg_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6cc81e21e4625f34380c018f575df6f24723c108c78ce594e059e00162d5efc4",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/install.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f1da0cc5e4040e82b811ca3498ed969575f3ce9f509ec18943b67bc969193c6f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/egg_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b1ef85858235b1933329dea59dd57ffaf364277d615f81d8e1970c52eef597d9",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/easy_install.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d77069534616d1434963e9353925423e3ec49c26747a9e5f6424b4b8ab99d266",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/dist_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e6dea439fadd8002d3f8fde882cb3a3c5f64f8b7b27acb9ec9cba4ddd5326672",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/develop.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "074a79761ed5ad231d11f85d504fc02655a4d94c407ac38e635e02015e7f0c40",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/build_py.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7cfecae97f154bdd83fbf8472b98ccf7dc27a928d342125cc79fbc5a9ef8301f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/build_ext.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "688fea9caf66f2550b6434ba5ccbffa768f6a487a155b49aadbe0f2470c0eddc",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/build_clib.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7d61d2146924d7454275d0560accef361a306c6f59f42657563436b92227a0eb",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/bdist_rpm.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ff863bb55033bb5cc4b8373cb6945d13fb32df3493de1dcb3d3b738a8a2ce429",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/bdist_egg.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "faea6207a7c5b66f1c412423d4b4435691b5f93d78dc3b170af5747e1d37bbb5",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/alias.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d6c2d0c5970d87a7434290e69b81bb506193a25f379d8d4d4cf98d05b9b6b222",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d1cdb7d8b47238b19d2fe6309a093cb8cb9bc7b236d70fa2c495a24f48d02be7",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_imp.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1e617dd486e2b517ec0f9cfe838ff099cb87f916a1c8838d6cf82208e160b730",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_deprecation_warning.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8d4f7e76d7efe9c2a6b5024e5cdf273f59a6ee038dc3990a12d88fb5bc276722",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/windows_support.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e46adfa923f6f9d2c6268653ab683a7422a4c90c716b69f92108979490a86041",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/wheel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d0ff2d4a4d74e6e17f51bfb7d0dd875365f6bfb30a0d2763a5e4254515b74a42",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/version.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a20fdcb9941bd1023aba429915f6563e5af51e02413cf9f6bceda6fdb23d6531",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/unicode_utils.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "68e385a38246c00b2206db46603b2a152ed8a9641e6768fa0d6882b9cb51ff4d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/ssl_support.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "08f53fe354bec7657aa8eb8436bdb042c392c651ef240a173b1b803dbaf18e93",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/script.tmpl",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5864ede6989eccedbb73e0dbc7a9794384f715fdb4039cfbf3bda1bf76808586",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/script (dev).tmpl",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "454cd0cc2414697b7074bb581d661b21098e6844b906baaad45bd403fb6efb92",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/sandbox.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "222af199e0876e5d421d3ee910f810ead4f1f7053ce789fe776a7cd12bbcb797",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/py34compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "29839deb26d1c63056f0d266603f2dfd4cb2566caca69157a87a452ddb251975",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/package_index.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0bf1529ca9bb599334c1eca9359353652f62f48ebdc2d97707313ea917778d20",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/namespaces.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3cca8654f5cf610823513bc483d6c671c440908383ad0e8d9ac0e0fdfc04af02",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/msvc.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "dcb2edf77f1ee8e47bc163f322f090bbb2c25994882aaa0a57ac37afc8d5de46",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/monkey.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d1edc77552971cbe35e4eee7a7e014aa11055cf3ee0dd24a6c8e3b72143f0c4e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/lib2to3_ex.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "60a03b0a6748256c32d3ecae640c548283476d71664f8a79de235a7567414029",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/launch.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4f23d3f887354f612762f18edba81f3513f8cac065ae1a5b4634315ac88ee35e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/installer.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8db85bed9564355fdb4943207e72dc670d081ebe911059ca178a3bff526ac66d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/gui.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5c1af46c7300e87a73dacf6cf41ce397e3f05df6bd9c7e227b4ac59f85769160",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/gui-64.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "69828c857d4824b9f850b1e0597d2c134c91114b7a0774c41dffe33b0eb23721",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/gui-32.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5c1af46c7300e87a73dacf6cf41ce397e3f05df6bd9c7e227b4ac59f85769160",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/glob.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d686636df8c01d25db81d852b91e98194f232a86fd2fc36d126058a9c3d32d89",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/extension.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "34c338e978cd7557a559e99cd31f02c95280e4ab3a666df14d6480d924bac593",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/errors.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "31539cbf7f351cd49a8c3804516cce43827a0790470813128c77da59c130035a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/dist.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "41565bdb2a608535c5bb3ce9ef9dcadf81f229410058232f01e6120682db0e59",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/dep_util.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "043c75064ccd427b6f001e1a972a476d6e54541ce3aad86cd34d0fad42f866a7",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/depends.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8877d974b7650aed81965485f5b460ecd534a2a6cf58c1fc9639b806ec100d8d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/config.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6bf4bd76a6f9975f2f96a7b906b537d37a99e9e1686a00b93d98d8c11617fe6c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/cli.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "75f12ea2f30d9c0d872dade345f30f562e6d93847b6a509ba53beec6d0b2c346",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/cli-64.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "28b001bb9a72ae7a24242bfab248d767a1ac5dec981c672a3944f7a072375e9a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/cli-32.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "75f12ea2f30d9c0d872dade345f30f562e6d93847b6a509ba53beec6d0b2c346",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/build_meta.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c7b148d543ca08ac41052a295e871f1839c96bdf2b40ef1ab4a5d2c09b5d89df",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/archive_util.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "99a2436e8cd16c37923f0e77553d1c6ff212dd6d00a7bde5251f2d5fc4590f1d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/_vendor",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/_vendor/packaging",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/_vendor/packaging/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e9e9dba795e045f8c18ec23df9b9f4d078c77f94c7db53c330e2a4256f31c3ec",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/_vendor/packaging/__about__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3cd32c6999f851c087cae6e044e1f56e5e8296e76e3e3239905ad2a7f660925a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/_vendor/packaging/_typing.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c79f44850e7b4cc4fe9134722d9576e4766f6061b06ee713a3a88a87f3b4b4cc",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/_vendor/packaging/_structures.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a339025fc43c7f6a84d4489cdd8890e1bb8355f833da261ebd8f5eed1db2de26",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/_vendor/packaging/_compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "31776c1a9484fd6f99ac7a02f3b6a7748e0b576140c14ec72cbf9e1defc28e15",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/_vendor/packaging/version.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0a76e6f8e3bd0ffa9df194c5c7315c8d26af7b14981599b279aa0fbccb2380f7",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/_vendor/packaging/utils.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "452865be78ced82b58483f2eae2df67eb30c14c4e607ede286cab5fa08732c4c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/_vendor/packaging/tags.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "34a312dfb668fe75ab67182c0facdb5ec5e073d79d9fd9b5eb470188b98725d1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/_vendor/packaging/specifiers.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b98a7d975dc5d0b7249d2e9de0deb4cad88180598884a89d78eabd027b314dca",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/_vendor/packaging/requirements.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "47c2b81f8c57fe20f82efa46c35537a2eb8f6c637ec33b05803edbae100cef56",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/_vendor/packaging/markers.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6129ed4243272b2c35fc51baa1134d9c6c4b2fa6c0c5c1973adb8513e6134b79",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/_vendor/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/_vendor/pyparsing.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0476f063b295443808714cf60bcc7414298b4560286d112aa3270b9da6e50337",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/_vendor/appdirs.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3227af504bafde5fe6408487e52174b210e4fc13611c7cd88803eb4f72133782",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/tests/data",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/tests/data/my-test-package-source",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/tests/data/my-test-package-source/setup.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "32b7b39779eac646248c26292319a3861838011f21822e1065d1189a4f88ed1f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/extern",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/extern/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "dcf8b1693f53cf3778368c95e8256119ded2ffd67e539caf31601fb592af0ba9",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3f73cd377fe6f0926b60ca7e8be4aafb7ae12b9bee562aaa8e7d545ca1df7bb4",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip-21.1.2.dist-info",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip-21.1.2.dist-info/WHEEL",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3aa464174798e461ecb0ca2b16395b4c8ab4ef6be91e917ad1f21003a952f710",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip-21.1.2.dist-info/top_level.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ceebae7b8927a3227e5303cf5e0f1f7b34bb542ad7250ac03fbcde36ec2f1508",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip-21.1.2.dist-info/RECORD",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9a16bca4afc8289b1ef9ba921812984bf128ccdd8d4471b6b7754c2de17b5531",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip-21.1.2.dist-info/METADATA",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "cbb3214af4af30eb6e82c9e42e5860e79e97d0a7c0c1b49b42d58891870fd749",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip-21.1.2.dist-info/LICENSE.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "23a7361c2b1581028bc623b9da2bd24997abcaa4781ace6ad444a37944f8dae1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip-21.1.2.dist-info/INSTALLER",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ceebae7b8927a3227e5303cf5e0f1f7b34bb542ad7250ac03fbcde36ec2f1508",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip-21.1.2.dist-info/entry_points.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1ed7c33b0a5496bf6cef78ea2d0eb017d574ff4aaf517270081cfb570c7451ed",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/webencodings",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/webencodings/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a8e04922e3f2ff8072607e96fdb360245faa610d83a14f9d2ac0eee724560978",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/webencodings/x_user_defined.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c8ea9649d9a9cad19f52087f67a258803361a1cf81007cb279e4f5e45af8dad3",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/webencodings/tests.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3ad18bca384d6357ef916d46bcb27f155f59a2a0bd027ca3afbab79314dbccdb",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/webencodings/mklabels.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "19821ecb09e968b9cfd064a273c2c55a0774515bcefe5d4d73a62817ef3b47fe",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/webencodings/labels.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e003bf2b14dd76a1adacbf67b3b9003e36f409c37ac6c088c5b2b7ec763daf71",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/util",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2449929a6aaa2f26b0f0fe75814226661f06c20f62d7349ef83a2a022b67da77",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/util/wait.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "dcc50a452014243076b60728eea454b245b4cd7180598bd1444e10d7feb194bb",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/util/url.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "28fff26870344c5140b1048899cfc53873be5aadcf3477ff6ca39b29cae0754e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4126c150d381f7287a0270e7eb54ab2d0d21839a33d08f7eb97106f75009b888",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "74a707facaa247f1125aa28fd4f27a4940144afa82f9f90c406ad3a2457834c6",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "bce3823d19fe74e0d4676aad3027d2b5bd099a382b80968a2ea27daaf2ae705b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/util/retry.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b3764d2973bafeddb7650320f3396edb43cc4aaada4f8f79f92fe6118ff5f5a9",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/util/response.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "189a60dc4822f6a6895d1c01879c2ff8c36e4566a7e4122ee34a117a8c563f6f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/util/request.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "367cda10a4353dabb0e4c14c57a1e68043072137f402e6bd7d0bb38b6b99cc67",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/util/queue.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9d1817f3f797fbf564bf1a17d3de905a8cfc3ecd101d4004c482c263fecf9dc3",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/util/proxy.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1468a90049ef66d7b295d5cd8dc7b80c407b633c14f9ae657a9f32e52d2a1d08",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/util/connection.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fc8f99a05e7cc572cb8e8f90e4819a26b331cb6216fdec48f0af4ef69abba29d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/packages",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ce9a5ecdd1107691ac61eac8ea657a31f518cb8f79255e2670e582fc681b9635",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e9d67eab4ef883b5e1b09dbb3050a091cb7c895359077b0c66f2a17fe294572d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9dbcedde2d1a80f54fd3b8eaaa08e16988cc9ae022fd6e44d04cb0662bd53bc1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/packages/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "87804b843e2d2da071d5a75a0ed2977eea6c82a634c162d76ff7f5ff256557a0",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/packages/six.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "69dc78cfe78cfc3d15beed0822a573140090feec7d97ae32ec391211f6f1083b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/contrib",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "96021db12c9ca9f0745e6e41889cd719e20a4fbc9b0903053c902091cc0f6b5b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "791cb5323fb0a60eec47af8e4af9d25788d46e3313e3ae1d2cdfc25b16c8455c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6c36f2384856d8228b25c42a00a032ac41cdf9a925b321c52aaeaf17c645b269",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0dc463336974ad0308ca162b37aafeb6756463a6530f11c994cf3fbac0241820",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3041076b762a1bc89f0cf606d203b5d82d6d66ed88f87a86178942e7770714f8",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "92a9bd497e21ffa87be90c060c188d43b8be92d299ba766ec734d58e3b470eda",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e88f79875ffbd5fcf19a831236d634801f259f20a856d3ff0e9a851a3d787dd5",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "966f3a5e368e23b6a36e89ec37424b0347249204855a183158a2d6fd89ade2c2",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8f7cb31c86e65bb092f8829027df8f3d07ff60a3bc10e01ecbfacc5b4511eeeb",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/_version.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d818e4fdc078f7ddb53d3bdeade5a9f194773612cda02300c874863fe39eb0b9",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/_collections.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "469d6657206073f52501ca7a3376add6c909057479278dcd6b0453bd6da0fd76",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/response.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "846846061ed3904921fc8420e42d56ff1b8f36b8082afe415173f213eab42ee1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/request.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "645488a97d02e968b38b179c0a1677fe8932bbb044bf4959bb5553d2cea1e123",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c21ce55fa51312038330e0b2d190cc50e351042cf9c3220cf19f68a57018f8b9",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/filepost.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e5bfeaaa04475652fbb8bb5d018073061f861e653901f255b7fd8dd174b73de6",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/fields.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "92f2c30a0fc9987d652e3514118fc52d2f14858ee106f0cfb951136d8f2676b3",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/exceptions.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d0c9e7a372874cd7d745f63beb7f0db9f38f9146fa9973a6f8baa3fb8c76c3c0",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "20aa1eb89658f580189b418ae2af8c5c08725d6d0cfc59ef69b61a36c0c847e1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/connection.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "abebdffd333733245b65c167dfe5422990527f4a048468efec115e666ffb930e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/toml",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/toml/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "918818cde861531d5c72db2ea6b9a310ac2749d990782e77713c62ee7c50ae4a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/toml/tz.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fb9be0f30920fdab67562d939c4bde7b121513b4ff171055afffb65957ced680",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/toml/ordered.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "516b791246bdd0859505876f2e06393d79e405c558a478e7c3d4faeeb33ce53f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/toml/encoder.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b417bddff181db52b9d939526cc898b867881971fbd05d96cc083e9487d5a24a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/toml/decoder.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "75e0cf42aa63f76486ea902dc0b6e0287ac8b25cbb840646f94ea0db2ee1c867",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/tenacity",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/tenacity/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "eaa4a33760490edf3ae1bea7c45a1a9696c22d01e20f68980259d44bd756492c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/tenacity/_utils.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5b59ee8c7ba6d5ff62e114293928eab10a3dfe642d694b4dce75c09901ec2f6f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/tenacity/_asyncio.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e82e127eff4839461fd7ed2fb88a04e8e19b989ac9cb01f4f98b25af199bc4ac",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/tenacity/wait.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "140a087c851235fe4e589613ee7863142d2e3958a31cc05de7a0094722cddb7d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/tenacity/tornadoweb.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ab75d95b603d464cb50615106cd1c5eb584cd445d0e7b740ef0c4f9e548ec77b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/tenacity/stop.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e1c8d27bf60f49ac33ea223e4010cdd3115f13fce52af8e1170c76d599720f61",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/tenacity/retry.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c6c90b19ad7912c3613cf3a621470a4bb0aa8da440b56c4614d3cd4638f3f545",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/tenacity/nap.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ed556e74e4e6bafffe0bf5c996f8c67201db57afc0d87973ca6697bbcbe3d5df",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/tenacity/compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "747a272642651f00f6726a8bad81d85344ddce6d9b9f5fbbe90652b7a3827a6c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/tenacity/before_sleep.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "95910c1cd685466742730b3732887810e67dcdea38311c6c91d894b9dbcdbaf6",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/tenacity/before.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "07da405e7ebf27550acf04cbf6716d4693a1360f2ce6f1928b86ea9f1e3e95a0",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/tenacity/after.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "28d222d964fcdebe1ea80dd069730ad735d0ce46cb8151e3e6e45a9d8e8769b3",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/resolvelib",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/resolvelib/compat",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/resolvelib/compat/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/resolvelib/compat/collections_abc.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "bb2f31519f8d0c4c3dd7ab6e8145e6f0783008688c3b47fe45c767a647d77ceb",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/resolvelib/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "41602a344ae3c6a10c2a5f8051c717cf5d1a08a5663be5a65afc5497740e9456",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/resolvelib/structs.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "67a9b80a42899561f864829e944b0a35e66a293bf2bb1e21a81373638919ccba",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3fa6aafbba58e44ef344e6f4cd4516a85207100f4b9b4316b31fdb617cd48370",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/resolvelib/reporters.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "850bef5eeb8404ec8458ef0a0df2ec58a5635f9e5414c014c0ed1864c369cc0c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/resolvelib/providers.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6dfcc50d977b52a924012ee550cfc77986c0f87ce329f0e595efe99ffefdbe2a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/__version__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "93827c735c85445cf0196c2537b9a268339c945b5b708b351a59e64f5ed86d74",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "89bee74630da75b08c39e5f6b0c40b71b5f3cbdf361e82916362c3fe05aac0f3",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/_internal_utils.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "671dcf9c451c7327ec07e89ed759d95405bca82949cb4831d6a34c13bae04f5f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/utils.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fcaf4082437a79f3def9afb3819bab5f376ce4f042d02cc39328c0136a024054",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/structures.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9ac02dafd9aad49c4777e251ca220b7dd165a5b270bef16e3f7adf5104ff4311",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/status_codes.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "813efd3dbb3f7108c1829f9fbeb520835767d8340edf66c38f84c89e39cc3d27",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/sessions.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "06c9d1fb36082e0a05cc9eb2ab84fc86dfe2d0fc303c6540c56c56695e5d7078",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/packages.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9e32665627d8e1a49cb6e5b73cfe441510b18c4c0c4433ba27f7de1b674a5ac2",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/models.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "52491a56e535b5cf81298078d5d76cdf9b1a8aca13a5a609d980421591047e13",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/hooks.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "411786cb2d1b45caf9ae4c02b8e6cd6a46d8b1cec492229e0701b8a877a4af64",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/help.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4893d57285dea3b29f2b803124de5e1554028ebd229bceed5369fbb9b2ec92c5",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/exceptions.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "77d7c9270f1814107d5731bdaa1bf12ee3b1e9b7b773f0f06dc93e75550401cb",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/cookies.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "63e6ca5fa4ef5b716762513a02ed125ed55559c68d745bee030431c3e1b48932",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2d05ae091e2a5e4eb0efea90a295f2cf458d1d47400f8d24d262a768011fd7e8",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/certs.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9d7455abd0ed1a6bffd4061bc234eef54ae001c749bf4e59be435e6a82ce6716",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/auth.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "38ca092152b244bcbd4c7afdd72f2bc72b19b9c9703c1f8ad57835cc1a265214",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/api.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3e51ccf874f73d0e65cae7e8786995fa7271462ed49d4c86561ece57b07d5d5e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/adapters.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7be6e6284029355a85772971b8c2497e2687765992ff3856848304ce51ef1ae7",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/progress",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/progress/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7dc6d0417a399e9d82a10ca1487e57a6b9227302d934b78f477b886a1ce748ed",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/progress/spinner.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "93c25b0d6f784f4f965ee5dfc5920585da0d3d8a778df9e95ea0677d1bf97c6b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/progress/counter.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3339f206bbcf5ab3a519ee0c64094651bf6adda3837bafda35878013f54da180",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/progress/bar.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "42e0ee54d7265e0a71b4db713b416aef6c4a8a0c4005a566c58181c3827767f1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pkg_resources",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5e91817ef4bd7da7c0e9b9b9af1eef9f1771b3bcaaca873f367a73280a6427ae",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pkg_resources/py31compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "09193c7e488f4432ec6e2e6965c2ac1c8fff3db9a1ffde0bf26afd432f406f65",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pep517",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pep517/in_process",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pep517/in_process/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3325a8022f091dd701bfbc97b96a544950036f1e8b481f6b661ee44c881d03c6",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pep517/in_process/_in_process.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5eb28e4d44497626b947b8b78bf390992f3d2c04855c4dc74177d7eb7a990481",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pep517/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9a3bbd7a51472c4509db7ad4e59a5d8fc9d139d634563ddba78660bc14ece9b8",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pep517/wrappers.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "41865f3759d6a2ae19da4ad8f945f5e092c0c6474dc2e8d88d119feea15cf75e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pep517/meta.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f269cce650e74f8cd742905396225b4467deb07ee28a81f0a336c3c402cf4bd6",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pep517/envbuild.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b332941653b9d17d5a8507d7c33e210fd576544fdbcfd30b54f21e89db05a38c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pep517/dirtools.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "da69009002f4991cff7a56058d12ae7a44c9562a47d734e7e2d6dfd440debfce",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pep517/compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "33ee6ce15369f2b8f24fbe9967f89b9cf0f8e03615cd2425c821076b28ed0cfc",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pep517/colorlog.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4e4f40b989bf70b17704a4c1a124c9b7d6d1af29f4685a232103b06df5544f14",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pep517/check.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f0b24bb5f67df7301c578bca2756bea1d331836b042260fb44c360fc4adefb56",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pep517/build.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "678f4299115a7d7ecd8e804ca1d8a26f04186bf118cf7134177d5bec3e5656fb",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/packaging",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/packaging/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e9e9dba795e045f8c18ec23df9b9f4d078c77f94c7db53c330e2a4256f31c3ec",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/packaging/__about__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8f807b20c312aa95276337187791f95999482d77af0fb666fe7f658ff4d1393c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/packaging/_typing.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "560034000bec73deca0799c5f3dce8b9d3b208c12c57b165697cd96d8a849330",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/packaging/_structures.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a339025fc43c7f6a84d4489cdd8890e1bb8355f833da261ebd8f5eed1db2de26",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/packaging/_compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "31776c1a9484fd6f99ac7a02f3b6a7748e0b576140c14ec72cbf9e1defc28e15",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/packaging/version.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b7b169b192a60e770c9fa106dbc744bbfe4d05951af7f1d5a221be7ec0e8de87",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/packaging/utils.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e6f531c025584a668d24581deca682069c475d037cf4a22f44bbc2b03cdaa349",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/packaging/tags.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "04c10bff75b713c9d72bf017016aa695871cb2fa339c52a44c19133d1e3c0c1f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/packaging/specifiers.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "45ac50f892b20aa2394019ba803bdba19d8aea38cb55dfa9c6ad24bd87f6f247",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/packaging/requirements.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "307a9ffc52a28470b4564381eb6654754c86f289042fdec3e17cbf8cad72152d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/packaging/markers.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f033a7d5cee867f0f248194ba26ffda38f46ce86d519837cfa4a4afe7b23f284",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/msgpack",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/msgpack/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "da027072c4c8680b4233418c8b6ad4fbf63a9082de790baa464ad0db68d200d7",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/msgpack/_version.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "745474de80029e3e25b0a775467c03ec13cc89523f14cca074e2f54ce044c3f5",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/msgpack/fallback.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "469bf52dd7b2f1ff2e7919d0ce70f80112819fd7713363f2c153645c8f0811e1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/msgpack/ext.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e25df9e98e2c54472f0a56b6761fdc2f9eef87818c8597dade4b961c51d8cfa0",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/msgpack/exceptions.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7424d67a2f1da64accb100dc8d093be004e5f47b08047d326edf3338f36a3187",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/idna",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/idna/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f4db7bc69c9eb770e63ab3d41a8a03740c261d966ed6a500cb611a27dde41a24",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/idna/uts46data.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e0264407a65082648d2004c19f657fc5d5bd3c481539700e611cc27901ac2bf1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/idna/package_data.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "931a6d16f799dfbcdb3d298a53b28c100f0f8bb877fac335fa9d9a826d8fa422",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/idna/intranges.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4d8d65a7164841610fead36a8d9905039860a0c58e8f53819a7506f22853f3b1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/idna/idnadata.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "725e31f512ddc3564cb4411bbcac00b17f8877701d2233b95371daa0a33a546b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/idna/core.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "55d1464328a2b7578c294436c7498d5e819386b5e5472a74ef498f0f22d7f588",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/idna/compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "83eecf878e67cc82deffbc6fc5d6d379bac766ae26416c48387d6b8cc73ac6bb",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/idna/codec.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e1154c86a16ab898321812b2978d0046a7200f39030d7654bf297510e0912c51",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/_trie",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/_trie/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9ea7e03bdd74df6f411152794f8a6c57042d8ddda2272117436f97f1cd58c705",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/_trie/_base.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "09ac9b63232ba3cb844506236f2dad4de4946ad9d60df5aba1437d37b7adcb9c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/_trie/py.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c179902eb6517f833258dca0d26de1f359bd22784b47b189d34da6208661fbca",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3813ed7354d4e661b2cb5f100ccc4a132604cf4c3115450d8f9bf4f978266216",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/genshi.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e03d8f1026799f764ddeabb78cc97dc98ec1f358e7400a414125657da22e61b0",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/etree_lxml.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fdbd0b01558b715bbd59a53ffb0dc3f1fd08452a426e37faebb57edcd45d853c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/etree.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c68d4be66f55b647e91492b4a459a42d56a386a618562b15667de4f646293e42",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/dom.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "107c8547c0fc958367c8353d971fc82a2815251c9e7141ae6b498e8bb1c1ba47",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/base.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a2e88eb2e4b3bc8d0a8337563fc3e5c4869236cf5f6a585b8a29c011cfd42096",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "032b12272bcf7e290230cb1356f6b1c2480389e10b0f975f47c149200baaee16",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/etree_lxml.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f60a838ecf88c6c3e10586b9729befd85675299946f371a2baccb69459af2241",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/etree.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c39645a4a93a6c0c67af00f6fc1ac5e44542eefcf3d0bdcb322f52c6b6dcffcc",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/dom.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "db6c216f40bbd735c8b1a8b999a9a0eaacc11228a070122f683cb802cc376add",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/base.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "cfea39d6fb7daff9762031b9222a1338a1b36677b8172dff15cfbbcedace8782",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "034ad8e605c87b86c93a248644efe3fed1619e04413bc4193f33ed3f0e5d173a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/sax.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "04a4bcc284139ca8aa79f7c7b310a152a2f8ab6651ff06f97dcf4c277cd00bcb",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/genshi.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "087dbba40b032a6bb864690052bc2dcbbbb429ab862c26512cf33368edcce6fa",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/filters",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/filters/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/filters/whitespace.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f1e5aa671778502e33945196ea2c98e9ffb6bae4fca4e09200b737219b7bfede",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/filters/sanitizer.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9baa069a40619060279f69d5e83e2113bf12099e961272bdaca759077b970487",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/filters/optionaltags.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f25593ef927468138798f81f9aa4c749f3e93cca74d53f3834abb409179dc5c1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/filters/lint.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e4eaae7ac58d288e261fbe974ff8e6529bd793a9c01d46a842a0f22d7a63d80",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7a00d75041d79801bde74e31cf42ba00b0e0624bd4ac2daad7961455e3655508",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/filters/base.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "cfe214f590188e9b15b2a995b7b92e582eb78d1d7584332be8256bbee6a8f16d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "95589973624c09c9578bfe6076ebe6773ad1c6d3b95e8f4e3676c70550acca45",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "058cdc282a9e1228b9db10eba8116bba19e6b66922b875c5c8587e720950f269",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/_utils.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0f1f402a7b64b118c54f5bde063ec8dfada97f93a021a4f4ce0970ab8dd19df5",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/_tokenizer.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d389a0036b0d4e78aeb65d9fc45bfe7a2e5b9ece2245a3f15575c787f1eb57fe",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/_inputstream.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8c4acd012325920b3b32938cf557bf55d2c3272145c1e0232ee855bad673df75",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/_ihatexml.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "89f3b017ba57aa6c938485dcddba1673deace0c0decea46b455a7b1700d8505b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/serializer.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fcfa6f719174edcc04ef1afdb8a919aa1e5fe1411a23c96d094db13c9cda4e99",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/html5parser.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6a7afe697adefc899fae4437e5cfeb7ed297c42f34bc909110a7b4e93ab5e470",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/constants.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2e5fb2ccb53f8dc8f2008fe1e7bce4a99eda416139b79c40e32fe3420a14521c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/_backport",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/_backport/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6ea4bf753387eae5bd88681dd2ecdfa4f8e8eaf678c693d9ee4c9f649daf35ac",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/_backport/tarfile.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "221a7bad745c8db20ac3c08e9bdc1278f57d0111976d217d8065c0327d90f8a5",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0501c595bea9b9b0a5fddbd3d4d8edcc8b61ca5a1f8ca8aca31db7f6cb438345",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b3064ac6af516397bdaf73d70ab96f40f32cbce7625990531cb11ba92f0b24b5",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/_backport/shutil.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "217fc6d8d3eac1e70989b9080e37b4e1baaed31a4791f490d8668674456a3396",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/_backport/misc.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "29679c20d75b14d3b148e3f57c617af340899da0ba4b87c146012d6984f0d228",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "def780936acfce7381da0b0aead8db6e1d1340c9861393fcd9e13dc17aba3489",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/wheel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "bfa0e7c13aa1347c2b11516bf3f61e8935ba1b87ed3ff7afb32c0d82b99d6f6a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/w64.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d1a473a0dd813bd3565b810dcb8ff8bc7907478a994c564d55200925894e0d32",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/w32.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "949b6765d794c53656c9afc45b90d9a2cfcae6bb30444086b29225f19242217b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/version.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fe7ec5ea3baf40601c9fbebd13f4876bb7ce71fe44465115ca627f1233d1c06c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/util.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7f68d908fadc2c2b7a2dc9c2d20532f85babeb4b570fcade03b938ac3a47303c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/t64.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a00a877acefcad45953343ad56a22152f7aaba5fcf2a10215d84169d47fbcd1d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/t32.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "352df104254095ddf925514d99bfb5411c95b5386e90caf06557979f82e16844",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/scripts.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fcc023dec32ebf9ea4b8cf05b222165ea6d3d209ae98f19a391fdab4ece7e1ae",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/resources.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d851afd191c5d782978cb2252f447df7597241019c7b0392e2627ee67f895677",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/metadata.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "cf628fcb7877b5c0e76fd5ecee702a4393b3d1baa358050598a59c14a468a1d8",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/markers.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e807377027c504445ec621125883979a0f9aa483fc9767ac69f3525f728ccbef",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/manifest.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9d0121626828ade681673c85cf062c5f124046eddfa38124ba7535eb7535ea21",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/locators.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "73d13870311a709fee29bb84e41a805687285a9eabb2e0464e488d0d0ab7cd5e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/index.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4972b3a5008445cb71603329fce2de7b67f42747b5f5984674222832551f5103",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/database.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2a5d18bcf40a73839ca558bb939705ce2c9d335c4e2bc8aa7712c65e06d91d5e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "003039eb1880c5aaf7994eaa7a694184d6ecac53e8b174613b8e11cec6c93ea9",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/colorama",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/colorama/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a42744aebcb32d2cc35b93fead13c194f2ea6c1b4844d241e9c320a1e267b399",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/colorama/winterm.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "db2ff66fb66cbf7e1f780b0febb98b39573e060ab9d667581a8e7bd55a6b96b3",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/colorama/win32.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6c9f0897d8f0681379049f1b98de85a18675418b8c2afda3f1f1ab5e1ed3263c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/colorama/initialise.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3e9ae8bc3371313aefa0d1c570bd8d663a47d97cc373c04bc4bc6212b7d49789",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/colorama/ansitowin32.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c95ec212609bd7d3239c928e0d9104bcc1ff7e76c98709e9ce8e2cc59b865e60",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/colorama/ansi.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4e8a7811e12e69074159db5e28c11c18e4de29e175f50f96a3febf0a3e643b34",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/metadata",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/metadata/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/metadata/languages.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e35b4bab778b4ab0446c455542954616af4aee8d659fd6f51e9635974842510a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/cli",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/cli/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/cli/chardetect.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5cae73aa3506d9ae3ecba78b1d9f13858729e96594add96610bc4dca971cd921",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "99665a5a6bd9921c1f044013f4ed58ea74537cace14fb1478504d302e8dba940",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/version.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0380882c501df0c4551b51e85cfa78e622bd44b956c95ef76b512dc04f13be7f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/utf8prober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "21d0fcbf7cd63ac07c38b8b23e2fb2fdfab08a9445c55f4d73578a04b4ae204c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/universaldetector.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0e96535c25f49d41d7c6443db2be06671181fe1bde67a856b77b8cf7872058ab",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/sjisprober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "208b7e9598f4589a8ae2b9946732993f8189944f0a504b45615b98f7a7a4e4c4",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/sbcsgroupprober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "86a79f42e5e6885c83040ace8ee8c7ea177a5855e5383d64582b310e18f1e557",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/sbcharsetprober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9e6c8ccaec731bcec337a2b7464d8c53324b30b47af4cad6a5d9c7ccec155304",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/mbcssm.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "498df6c15205dc7cdc8d8dc1684b29cbd99eb5b3522b120807444a3e7eed8e92",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/mbcsgroupprober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "87a4d19e762ad8ec46d56743e493b2c5c755a67edd1b4abebc1f275abe666e1e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/mbcharsetprober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "011f797851fdbeea927ef2d064df8be628de6b6e4d3810a85eac3cb393bdc4b4",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/latin1prober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4b6228391845937f451053a54855ad815c9b4623fa87b0652e574755c94d914f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/langturkishmodel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "adfc1a9d3a6d4f04b2704e3e3fe41ab0f9b377e5d56207afcadce3944cc106ef",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/langthaimodel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "475c171e750cb5e8e9c342671ff24ef177586ac304eb08d5aa9d733fb4ca2e08",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/langrussianmodel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4c7a893a14b189341c1dba03352739ca87dcda4a175d01471728edcae9ed51f3",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/langhungarianmodel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "46d247ec365db26687ab22b8e8a9269e4e70407889c093cf252aaa225a5e6517",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/langhebrewmodel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0f33cfe933c61bff8f57bb6ab29bbf77c76eb9eaa6eee37ee5e434687530d468",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/langgreekmodel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4beb8d4358a10bbe72841bd2bb1db880b159bf743272d3300ba3b12c9757f9bc",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/langbulgarianmodel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ae4f42269bb13b46ce6dba0972fea03605aea2c61999df2a10476ce72ec34bf6",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/jpcntx.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3d894da915104fc2ccddc4f91661c63f48a2b1c1654d6103f763002ef06e9e0a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/jisfreq.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "be9989bf606ed09f209cc5513c730579f4d1be8fe16b59abc8b8a0f0207080e8",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/hebrewprober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "737499f8aee1bf2cc663a251019c4983027fb144bd93459892f318d34601605a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/gb2312prober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "806bc85a2f568438c4fb14171ef348cab9cbbc46cc01883251267ae4751fca5c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/gb2312freq.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "257f25b3078a2e69c2c2693c507110b0b824affacffe411bbe2bc2e2a3ceae57",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/euctwprober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d77a7a10fe3245ac6a9cfe221edc47389e91db3c47ab5fe6f214d18f3559f797",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/euctwfreq.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "368d56c9db853a00795484d403b3cbc82e6825137347231b07168a235975e8c0",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/euckrprober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "32a14c4d05f15b81dbcc8a59f652831c1dc637c48fe328877a74e67fc83f3f16",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/euckrfreq.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fbb19d9af8167b3e3e78ee12b97a5aeed0620e2e6f45743c5af74503355a49fa",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/eucjpprober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "883f09769d084918e08e254dedfd1ef3119e409e46336a1e675740f276d2794c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/escsm.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "46e5e580dbd32036ab9ddbe594d0a4e56641229742c50d2471df4402ec5487ce",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/escprober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "924caa560d58c370c8380309d9b765c9081415086e1c05bc7541ac913a0d5927",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/enums.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0229b075bf5ab357492996853541f63a158854155de9990927f58ae6c358f1c5",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/cp949prober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4d9e37e105fccf306c9d4bcbffcc26e004154d9d9992a10440bfe5370f5ff68c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e34cebeb0202670927c72b8b18670838fcaf7bc0d379b0426dbbedb6f9e6a794",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/codingstatemachine.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "558a7fe9ccb2922e6c1e05c34999d75b8ab5a1e94773772ef40c904d7eeeba0f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/charsetprober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2929b0244ae3ca9ca3d1b459982e45e5e33b73c61080b6088d95e29ed64db2d8",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/charsetgroupprober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1992d17873fa151467e3786f48ea060b161a984acacf2a7a460390c55782de48",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/chardistribution.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "df0a164bad8aac6a282b2ab3e334129e315b2696ba57b834d9d68089b4f0725f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/big5prober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "901c476dd7ad0693deef1ae56fe7bdf748a8b7ae20fde1922dddf6941eff8773",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/big5freq.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0ffccae46cb3a15b117acd0790b2738a5b45417d1b2822ceac57bdff10ef3bff",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/certifi",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/certifi/__main__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d64dc2afde6f0b1c464460e58eb5b7c0c76965d2f73617f4bb59fe936a9db026",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/certifi/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4ac99d9851e31c263854bb6ac29a7d3ff8ec39c02e1e3fb97395aaa04cfea058",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/certifi/core.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "80e15dd331d8971e24aeb2c49fdf367ac3ad9b3ddd8e21b40454838608e5bdc2",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/certifi/cacert.pem",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "bb77f13d3fbec9e98bbf28ac95046b44196c7d8f55ab7720061e99991a829197",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/cachecontrol",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/cachecontrol/caches",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fa01cd298bda783d243a4e4cef878eaec4a020a52d0ba8ba19f6e6ba01b0784a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1f17a5329342a3e758af67e2243c0cde1861466c5462d079b579b51a90004f86",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9d854ab09b5787a8095ef767d625b2ae1c6f930a50acaf9e2a8311cee8b090a9",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a49b40694c4eb0c3e7cad2350378ee009917603afc92b7529ec838620dce0448",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "511184d0aac0f3b41e9021b74863dab6548f4f9ef57594c38cd6be6575f7a437",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e4b5f4b89c2435052d612130dda1a61aef5663cc068a977cd6627c946d1dd0ce",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "bc86b88efab8c7f29238b74421e7689275f669760742e8cb0c5578f85db50e7a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "045187277c90731bd98b37e8f742cb674e13fd9e574825ef168b6ba7b52cd2c7",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "bc008a3bc2e5ceefd95b28d5d45c67d4c0384c653ad0de4ddc64ab0057406364",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/cachecontrol/controller.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "096117de979d20cf6ceb4b2e7f8cd93ed9bf26f5609efa203062bf3a2046e45f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/cachecontrol/compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "90736f31176deacfd7c2aabff6a266afda2edf060c38c50cc4f3dcc0dc53f0c7",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/cachecontrol/cache.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d5f738c093fc1d8b75c9c9c95de130e690a97812f60aac71ea0f456f40180d64",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b12c1a49877ddc821f085538b4e3204a8e9bd8b0adfe0052690523f24b4914e0",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "802ad0c0f058d8e64179e76f28e2dd459dd6d4b21133ad1f1ba7789a05bffbd6",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/vendor.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c9a376a8b2e42aea119852c2c462752d9b598ae57b4fb3688ac66ac163518485",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/six.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "53867fcafe77e16e423728d8f62f15d4e5d8d928c09f2f32d8be6f0cb8614e13",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pyparsing.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2756f8cf74bf2b0c895bb84a1a7a0dfa15d6f6980c23320fe904e1c98e7226ae",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distro.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c713088766b72a68a9a5e5841f3ca74dd1d3dff8d9334a3ea68b3474058944e3",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/appdirs.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "33a218449b5d6609923c25c248c051074553dcff0c7456d60836d22eb07611b8",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/vcs",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/vcs/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0a3cb11c281db75f65db58f4b491a243fe9893c9be2969904e1998be58ddd5ea",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/vcs/versioncontrol.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "37ad1348c6d3afbf400f347ad410ab93c62881441c0419cd68b8093d37d7b1f7",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/vcs/subversion.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "94f7c2bbce352403111bf8d35ff4db459ac1a4a748779790f2deffc48ef0dcbd",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/vcs/mercurial.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d97dde232780590588d93c683d3fb1b95b03e9fc6bed84b21f0e0c47d116cf83",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/vcs/git.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "511533d644aa84386a26cafdba56854dec0ff198f07fba153cfeec91d8fd48c4",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/vcs/bazaar.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "032fef37ef3bbd8484cc1a974f7455c25e34be5939ea3de3cbf01f41b323e2ea",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/wheel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0ce21565a5cdedb30e01e304ab320e6471a5e0e14ef8a1ab12a05407ce3c0cfa",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/virtualenv.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8914cafac0fa6d6a47a97719d0409f76914b59ab4c3871545422116b42fa1aed",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/urls.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5f38d0b0719dd980e6261a02a20b293d3aa1e8a979b4610d4473dcc234b4242e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/unpacking.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3e2a186307d30a7fd57987abf34a2786b3bd6358207ada8e3d23aba06dfc6d14",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/temp_dir.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f60b3737d1907955d15568c921a952a47d6e8fcc905cf4f36ab6f99f5fc7315a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/subprocess.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "bb168fdc8ccf8816211b431b75f3cafee721640876eee677c0edeae6145f132a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/setuptools_build.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c64f6c4418d4c8d4c7b3f4ef11679b556b3519f2cf376d3c333a525ebf4e93f0",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/pkg_resources.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8f01f925588f7be2655cbbcb0b4f8049f4d309162f9b4bbd0b04067168f14ad2",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/parallel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "45917825d74f11655b9243c29277efa6a68b7e6dcf9aa77f001a021e6578957b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/packaging.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "235f77f0007b169adc54925de82d2f4a232e0956a39abc59179e6f5f98f46cca",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/models.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a82818c94c369881f5a6899bb09dd842c32d38d660c89e011b03b93099d20b87",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/misc.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "17b2c36fa3d02309e26302dcce1536a520321d9f5b9d3553d7223f39db98877c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/logging.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "064a774128eeaf77a492e9c0227b0627a96ceca17c00d4ed0601a18d8d2f96d8",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/inject_securetransport.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b4697d060cadd881cab41ddbd01fbaaf75b6c981773a0f8f05ed3ae3b4b7959b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/hashes.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a35a90124a9ed80aac466fc984ba0ce21931995b5ec07d1966943a10139b1ee5",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/glibc.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "18cd58da15a439ffedba6c9218583e88d6dcee88a505042b8dccdbffbd39085f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/filetypes.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c1ebe255b6a91d6550ffcf8af8f4d0fd39d82faea4662e12ad50539916195cb7",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/filesystem.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6b7ae7a1407f1d37446c368050748d30f207a8776ce1403e98b4396ef80e8d24",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/entrypoints.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9b851790b6539cfb1d4a2b10ccd1621ccd4265c30af0dd4203df20e0e45ec767",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/encoding.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4f47104e4181efeb37c22bcb94770a6caaaf268334c8b768f28b7cf4b946773d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/distutils_args.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2b15936b3d3b03fd6e902cb0fe935a87e8bab01beb56d74cb2717c8e0b833584",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f9c859531749905446fa9036318eff5a28b9539a35f28e4ae00a81b1677ddbe7",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/deprecation.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "083f60535ce60ed0b7364d93335e0556901afdbc4231dd372b1e6ddcba05c248",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/datetime.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6e265d109110046abc03e37ba28a68b22a5e1b39921dd234597eb492597f004b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/compatibility_tags.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "21c4041c2649bdd7ca7220029971822addfd628836fd0d9740a307a2303fda98",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "239f2d4d9deaa8666a78654ffe611133c37b40fbbbd6788ba717cedc88f68df4",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/appdirs.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1c208568ead93a730bcd10e929770c88587fda4599f8fcc574df2978b8b090d6",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/resolution",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/resolution/resolvelib",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "de1967ad9925b33154c06405177de72e410ef24c73e2f677fee2a9fcbf18be61",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7c5d911fa5426a74ee17e8b0bbcb5963c061d056a40c14f0eed9032724eccbd1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c60682b572e3efdd40fea45f57d6359d719e69656adc9134ca0200dd83515aad",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1d82139e3b3b85cc431803420dd2f8aa0d8c2756b0d6303d70ccb134fda62eb9",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "173c4a73385e9771a156238811f18751f510eab3775346e530c52ebbe6e51df5",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b5aa9e0e65e4d24018f4456a48c84426b898d363124a16d9bedf55a84020930e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "744292b8af41e4ce767354ae801e37cd79e7c603563536bb8420b022d497eb57",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "31b6a4caa4a8b41195269237900a6aa8fd9f3cf66287d0e0b1f929b8577e0033",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/resolution/legacy",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "385ffa621e21ac57c9e2ed072c5e19441940f2504751f01a16786e54a21084f3",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/resolution/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/resolution/base.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4f84277d284912ba4f59ee223a23bb5665eecf56f17b6d0b2cdb37dc052c9583",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/req",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/req/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "95134706fd1901935b4b099753e5d4766eba82c88d9ae8810e2d431582788484",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/req/req_uninstall.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8000a29d321c49c646c3cd6a2da15d4e3f4a197955b82a6bbbb5ef1c68c813e1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/req/req_tracker.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5ee3f0797d656c95d3da04a40972024b98676ba6f299ee4f790a783a4f3e476a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/req/req_set.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "02eb6c6a2576b3ed882f0b56b530383895bf64b460e065e0eb033463f8596f59",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/req/req_install.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "451da691a014d91103b63658de7472d288dc500fc17f42698d7f594f265451ae",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/req/req_file.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9cf205976322f540c686b8fe2b4137fd0ba017bb65dd4043b72d5ccdb205edf9",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/req/constructors.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e2c8a719deecaca848f780d5e973bea915f633a2abf74ece166b1f9252abb7ae",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/operations",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/operations/install",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/operations/install/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "997ee1c83d863413b69851a8903437d2bfc65efed8fcf2ddb71714bf5e387beb",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/operations/install/wheel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d605761bea30940da2c1c6f160073804e4e23d144607c4f3a6e534c2e84cd954",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/operations/install/legacy.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7f9f5f41b34b3b6aef97c6cd426fc2b96e9d80fbd75d0ef2e5aa6e956662d351",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/operations/install/editable_legacy.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6e304e6df13ab33dd498623bcb8f860a029ad969938275a514553b6fe8b4b10b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/operations/build",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/operations/build/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/operations/build/wheel_legacy.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "34e2614d831896375b8b3168fd68e468a1961b548467a681cab05d0abaec641f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/operations/build/wheel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5982ccc6ec6a3776a1253424d8c23d85d999281a45cb11de36951d3b43f26f15",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/operations/build/metadata_legacy.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "10230184b10f110bfa3d4502a4f0975bec0df50457758e393cd5c9bfb0592935",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/operations/build/metadata.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8c9a74e51ae9d0032c41bee2cc35db3460b52ed3cdc0e847423edc44ce77db87",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/operations/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/operations/prepare.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0171cd83588671e835972a83a9b71a6e600521f4359357087e09956392425a8a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/operations/freeze.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0fe7b1d01c32e84d04552fe01e58b1944a4a0e94711599d4993cbb9dff2ceedb",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/operations/check.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3ad319d9f7f4ce4f0686997b7885f2499e03f290947f33c060da464f1c35a965",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/network",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/network/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8dfe93b799d5ffbce401106b2a88c85c8b607a3be87a054954a51b8406b92287",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/network/xmlrpc.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "08bd5604e4e0c4fc1b719e90b9b678a574178dbeea4d31694d415ef9969691c0",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/network/utils.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "baa4fa4243bd347530a93c3780705631015d698a9869b078db741466e8900f77",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/network/session.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5477a2a2b3df9583cd58ada933fab6d9cf87e6099104387d50a0895b75405052",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/network/lazy_wheel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5cc7eb0cad48072e382f71b1dd467607cb3dd154570daf7ae76d0838f9b398e5",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/network/download.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f1fadbd9b20d39ffa36e614f6a929bc843bdb235c95891ba389696e2143daf7b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/network/cache.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "27fc69b0b59b46b942494710840e7e4ee4f92d6225a55b531f87d9d574a3c9be",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/network/auth.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "77c0dfd1fcb4d4fd632651775c330cf000b292d47570df735111bec9ed6771cd",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/models",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/models/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "dc31d477fab1a4fa337f3a2ea2a6bd83db6cd42cebe6a6877c5c5b9f1ae27a93",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/models/wheel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3168f142404d5c8e97396893bb3306eee38d845bbcc40f783aa0fff41b88b157",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/models/target_python.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "48b186df3f4f8ff0a20398e6327343bf630ddd24f791e56e6a7543cd3bcee693",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/models/selection_prefs.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "68d4432fdec6cf7c96256de8834caebce914d3650bf0e78d403b836ad67c483a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/models/search_scope.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e2e18d12a62bcf892eebf5b3a30aa2bee32f3747e3e57434dd6075e188dc3795",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/models/scheme.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8aa71e0bb80a8939f664b8023a01906dc9a8e3d4d183d1274144ac407dd4fbb0",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/models/link.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e707476c60cb6da7d2758a68d8acbb17d451a36dbacd1cba8a4ddc2c7ffc2b07",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/models/index.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6ac32b69954f234b27c9ee34e06ced1295e029eae3d72005999976a7778de018",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/models/format_control.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9768e9e3b996b09a7bf8bc4cb34e65f53faa160f59e4fc1dc8ff51ed773f5594",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/models/direct_url.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "56b9c934ea9c3f39df35aae34096afb31dad806ec67dc2dae8fc990ae7ff2fb0",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/models/candidate.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2e5c8617648c1a379eb7d6cb6c40330160cff3659ca77df8d98b1aeed096ffd3",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/metadata",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/metadata/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "288351f1960efe295cda9915dede4a7102f358b35cdc68d90e4946593549fb35",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/metadata/pkg_resources.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e0554fc58140050ff5b5b87f0910732b8c74fd22201f5b822b1d992f2864a2e4",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/metadata/base.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e81881fdbde5bcd1d821529bceb0e18b46c999296ce50d4afa205e1d694a9c8c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/locations",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/locations/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f445d1c42a7288c0a553cefe3f913aead705c726dc03f2b32ebcdc2b656def3b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/locations/_sysconfig.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4edf2090deec8716eaa14973a8cd7d9b28814736dfb7d0b39267124b8607935b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/locations/_distutils.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2f97e5452afd047d250703d497ad5cc817353a7543d3a14e10d9033118f2837f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/locations/base.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "41b929826cc86d606750bdbfdeabb6f6ca8235ec28a986e4570f0a9a28117b67",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/index",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/index/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "be9b7e25e4d979f87c6be142db665e0525c555bb817174868882e141925a3694",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/index/sources.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "495c8f8adbf4f3e41a961dbf064e5d88027d18003f77e6bdde4a28b90a1d006d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/index/package_finder.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "dc9f51cead4d00eda9ff30dbe1fbf7dc6781041398bac57d917b409f68fa7825",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/index/collector.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6845ed1cad0b6b89c63fb9aee4de42437b667e369cccbc1b1a2f00af8a06cf9a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/distributions",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/distributions/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a30d623d6fd0a7e4cec8e53e5a084e282f2f02fd7f4b2935cc44d954efef2841",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/distributions/wheel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9fd32a3685b232a36c71f6cd79eaa1d5bceda19522079c751fd878b457e2254c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/distributions/sdist.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "728f1f351f2a2211d12c19dcc15f76a09edef0838218f804b1b10574d3e4d589",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/distributions/installed.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b9a4cc3ef63786bfccd410b2d74eef2475aca4a30982b3f1bf7d16dffcd96744",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/distributions/base.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5159dd6a89348ce1eb2c7d09a8dd18ce5c55127bc542e998cb7edd898dd90ae1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "bfec6697ca0cc2b4210a9980a64a5c30e13decca7c41a071a1139b9c64b8dfff",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands/wheel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c0a19292cb988e38603986bf8c3eae95a2a93d7694ccf8b2cdf44d353e033a2a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands/uninstall.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "103731ddad3797753cb69676a787df21d9f8e61636605126abdca879c705da8c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands/show.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b33daf6f187897b063e232a59031931d80fa23cfddb92a525055715221f8e314",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands/search.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1307063e40c34f014ca62d8f04a84fb965f660130f732ecec755857169e8b9ac",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands/list.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8dfa834b8c6f9ba595f2b1d54a6be9688f35d6e92f0f83a23d9c0618a330c242",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands/install.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "685bd941f3eb32b1c36fa8e36e6ad5972bc3c4c21e5f765c64a490bd8e9cd0a2",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands/help.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e8c9f3ada93f8fec84de9b030aa8b61b121226a219274e0339b294f50867c4c1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands/hash.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8a9eb802c27a105504696283bec6667501e4b35253120ac38c7e5bca5f886327",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands/freeze.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "bcf560bb005bd79b9bbfc12cf683d2c9678f05ed9cab7f50c635382a2cde4f09",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands/download.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ceff12fc3376fa4e8ad15491df208f2d2acb7a1a18923dc8bf23b51e8f2df15e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands/debug.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ca7b4ea65c3ddd56684005410770573cabaa6da9b8993e9312b6acb45c05cb7b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands/configuration.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5f57dd55d120f0c1c5b40ad4fb76cce9604d6b1d44ed9eeab333c47652b5ceaa",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands/completion.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5314b4f6cf2b127534f000223778077502235385c64a5bf9489deb209753ca10",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands/check.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0edd30ecda85a7ca3fe3927bc37d8642b29ececcf6bf0a3f53c526b070fd60d2",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands/cache.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0042dff7c45647f82253dc25d114977fe32c4f23b91bf8b03b4887a05e056e67",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/cli",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/cli/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1641c1829c716fefe077aaf51639cd85f30ecc0518c97a17289e9a6e28df7055",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/cli/status_codes.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b0414751a5096eabfc880acbdc702d733b5666618e157d358537ac4b2b43121d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/cli/spinners.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "54b752582bf29372a892e8cbc817ff40a61c19bade3d0a0f078bfb8ea1bbc720",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/cli/req_command.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ade7cfc9974aba5bab89d70b68275226d832605721c5df72f2930ca7fecf3beb",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/cli/progress_bars.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "724fc82e38ba6914c6d33c576a39cf588a504c6c53ce6de7b1c64ec703664d6a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/cli/parser.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "af1e30e88803d0e6e2eedd64f66574ce5621cbf0ee0a86830aa86450a30e14d5",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/cli/main_parser.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1bbd19d5f5cb633789baea2d8302b0abe75a089d230a6987c71e9a147cfa5804",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/cli/main.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1bf3ac63ae85651b662eb309e24de6efbb66b6c451450777ffeaa57b596f9a78",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/cli/command_context.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "936245e563ec3f530d29a5d62bc8d915b26161f7f391dbc668fb0be77b596c35",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/cli/cmdoptions.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e76248c8fe42eb24fc0e94f53b666c78063ebccbcb4dbf05a8ed20f3938560cb",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/cli/base_command.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "dba3079e5cd9482f969368f6386b010ece5c97695a76ba2f272572d7fda0d199",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/cli/autocompletion.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "af619049a1c78a6d4bc0f84c68ef4c3de29db12bf91fc4bd12556c981c9035ec",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5ef275248ba64277cb345c5545d7ffc6b6e191383558c52b7f61b3ac7dbb1770",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/wheel_builder.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "856eb7666001afae6b3a24910475eed63054744670e4b662c342da4016f3d252",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/self_outdated_check.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8afa1461a1aeabe45afc3be566f3ed1e181b63decd28762e3c6ceb80dd86d40f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/pyproject.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6cdfdd962155c68acb213c421334f45263d81684aa93fbc606d3354308906b2b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/main.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "059d2f91daa0a68b5e4e8d40d50f28bc57bc13380a14958e5233e621441f1826",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/exceptions.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d89409492ebca20811fd920e03e8755360d10035116e4427f4d7f8119599f37e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/configuration.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4012df86ffac6cffa8474f0d1714989effe62c1f9282d34eb165c017db4311c3",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/cache.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e9538db6845e1996c177bb2a6359fa87091d582e22cf7b665f05f0663a6364ac",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/build_env.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "da116d6c4a0ee2f0341717a137f7b6a1767fdc4ded02f2a99d599cf2c3988efd",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/__main__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "997c160dfb4d2cc29fc15a8a156184feeb8166f1922225042e12e47b2b08b997",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c65eaf2564e7eec07bbf987ba8f8fe0ad4f37d7bdb05ecd8d45c5ef529a37752",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/py.typed",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "97d83e15cd7382d219ef4b4b243731eaa29ea83bad4d555271e22a52877e6b08",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/_virtualenv.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "684b8c07932ba4a84ac2e5ae9afe49ef04e92bac3d8d4191d455cf09d093e5fc",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/_virtualenv.pth",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "69ac3d8f27e679c81b94ab30b3b56e9cd138219b1ba94a1fa3606d5a76a1433d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel-0.36.2.virtualenv",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools-57.0.0.virtualenv",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip-21.1.2.virtualenv",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/distutils-precedence.pth",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7ea7ffef3fe2a117ee12c68ed6553617f0d7fd2f0590257c25c484959a3b7373",
+ "format": 1
+ },
+ {
+ "name": "venv/pyvenv.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0d5b0c7ba5822b4d2506d49267ee3b67ba7a9b6ccb46aaa4d32fee4677a3fd15",
+ "format": 1
+ },
+ {
+ "name": "venv/.gitignore",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "df42dbae16a5aa1a1fcf05f9c2e52c84ed6da86e55d105fe603bf0c0fdadf7bb",
+ "format": 1
+ },
+ {
"name": "__init__.py",
"ftype": "file",
"chksum_type": "sha256",
@@ -1964,7 +6878,7 @@
"name": "CHANGELOG.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "66193d88779c0af663a37ab4052fad2df20b6c48d5b1da29f7007b0328d01059",
+ "chksum_sha256": "25c5de906a2d74d3af202a6750ac334da616a06567d44058b54154e94e570711",
"format": 1
},
{
@@ -1985,14 +6899,14 @@
"name": "README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0790bb9051ea97efba90ce8dabb74e8703d75091aa7692204831a8ac4b23f3bb",
+ "chksum_sha256": "4d3e8acd6e4e1f4a717de66ae790c01bf7c799bfe7d7f8b4644dead575744ad4",
"format": 1
},
{
"name": "requirements.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f51d475f3a1c18b29c7305653f0d34dca5dedbcf55136dc24b7e4d485b97122f",
+ "chksum_sha256": "d10e5c97d19424664edb2bed8e69cdf28b801aae5dc5aa13d3b8233728ca2979",
"format": 1
}
],
diff --git a/ansible_collections/inspur/ispim/MANIFEST.json b/ansible_collections/inspur/ispim/MANIFEST.json
index 1c17b459b..20a500983 100644
--- a/ansible_collections/inspur/ispim/MANIFEST.json
+++ b/ansible_collections/inspur/ispim/MANIFEST.json
@@ -2,7 +2,7 @@
"collection_info": {
"namespace": "inspur",
"name": "ispim",
- "version": "2.2.0",
+ "version": "2.2.1",
"authors": [
"Baoshan Wang <wangbaoshan@inspur.com>"
],
@@ -29,7 +29,7 @@
"name": "FILES.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "73ae68f77dbcd6040daf9921dd7abcc32ae72b0f46a30e9503be6b1538df9aa2",
+ "chksum_sha256": "fe724cfa8ea36e96c7142a5ab63c448380019001fa4961120aa8bec38c9988a4",
"format": 1
},
"format": 1
diff --git a/ansible_collections/inspur/ispim/README.md b/ansible_collections/inspur/ispim/README.md
index 09cc03edc..a596693de 100644
--- a/ansible_collections/inspur/ispim/README.md
+++ b/ansible_collections/inspur/ispim/README.md
@@ -4,17 +4,17 @@ This repo contains the `inspur.ispim` Ansible Collection. Inspur server supports
## Tested with Ansible
-Tested with the current Ansible 2.10 releases and the current development version of Ansible. Ansible versions before 2.10.0 are not supported.
+Tested with the current Ansible 2.15 releases and the current development version of Ansible. Ansible versions before 2.10.0 are not supported.
## External requirements
Circumstance instruction:
-Ansible module is suitable for ansible version 2.10
+Ansible module is suitable for ansible version 2.15
Main steps:
-Install Ansible 2.10
-Install inspursmsdk
+* Install Ansible 2.15
+* Install inspursmsdk: pip install inspursmsdk
<!--- A step-by-step reproduction of the problem is helpful if there is no related issue -->
Thes modules require the following to be installed on the control node:
diff --git a/ansible_collections/inspur/ispim/changelogs/.plugin-cache.yaml b/ansible_collections/inspur/ispim/changelogs/.plugin-cache.yaml
index 54a1668ea..ed3accb92 100644
--- a/ansible_collections/inspur/ispim/changelogs/.plugin-cache.yaml
+++ b/ansible_collections/inspur/ispim/changelogs/.plugin-cache.yaml
@@ -652,4 +652,4 @@ plugins:
shell: {}
strategy: {}
vars: {}
-version: 2.2.0
+version: 2.2.1
diff --git a/ansible_collections/inspur/ispim/changelogs/changelog.yaml b/ansible_collections/inspur/ispim/changelogs/changelog.yaml
index bf6d2ccc2..e2e7a8a17 100644
--- a/ansible_collections/inspur/ispim/changelogs/changelog.yaml
+++ b/ansible_collections/inspur/ispim/changelogs/changelog.yaml
@@ -483,3 +483,12 @@ releases:
fragments:
- 29-edit_smtp_com.yaml
release_date: '2023-11-28'
+ 2.2.1:
+ changes:
+ minor_changes:
+ - 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.
+ fragments:
+ - 31-edit_ansible-test.yml
+ - 32-edit_ansible-test-2.17.yml
+ release_date: '2024-05-13'
diff --git a/ansible_collections/inspur/ispim/meta/runtime.yml b/ansible_collections/inspur/ispim/meta/runtime.yml
index 86ccce27b..1c7d1bb7c 100644
--- a/ansible_collections/inspur/ispim/meta/runtime.yml
+++ b/ansible_collections/inspur/ispim/meta/runtime.yml
@@ -1,2 +1,2 @@
---
-requires_ansible: '>=2.10'
+requires_ansible: '>=2.15'
diff --git a/ansible_collections/inspur/ispim/requirements.txt b/ansible_collections/inspur/ispim/requirements.txt
index d0b2f9ad4..9243a8e9f 100644
--- a/ansible_collections/inspur/ispim/requirements.txt
+++ b/ansible_collections/inspur/ispim/requirements.txt
@@ -1,2 +1 @@
-inspursmsdk 1.5.0+
-Python 3.7+ \ No newline at end of file
+inspursmsdk>=1.5.0 \ No newline at end of file
diff --git a/ansible_collections/junipernetworks/junos/.ansible-lint b/ansible_collections/junipernetworks/junos/.ansible-lint
new file mode 100644
index 000000000..8d9bb70b8
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/.ansible-lint
@@ -0,0 +1,5 @@
+---
+profile: production
+
+exclude_paths:
+ - changelogs/changelog.yaml
diff --git a/ansible_collections/junipernetworks/junos/.flake8 b/ansible_collections/junipernetworks/junos/.flake8
new file mode 100644
index 000000000..03be69242
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/.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/junipernetworks/junos/.github/workflows/ack.yml b/ansible_collections/junipernetworks/junos/.github/workflows/ack.yml
deleted file mode 100644
index fda595dc5..000000000
--- a/ansible_collections/junipernetworks/junos/.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/junipernetworks/junos/.github/workflows/check_label.yml b/ansible_collections/junipernetworks/junos/.github/workflows/check_label.yml
new file mode 100644
index 000000000..b120bfa32
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/.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/junipernetworks/junos/.github/workflows/draft_release.yml b/ansible_collections/junipernetworks/junos/.github/workflows/draft_release.yml
new file mode 100644
index 000000000..b65c12cca
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/.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: junos
+ 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/junipernetworks/junos/.github/workflows/push.yml b/ansible_collections/junipernetworks/junos/.github/workflows/push.yml
deleted file mode 100644
index 8434ea5d1..000000000
--- a/ansible_collections/junipernetworks/junos/.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: junipernetworks
- COLLECTION_NAME: junos
- ANSIBLE_COLLECTIONS_PATHS: ./
-
-jobs:
- update_release_draft:
- uses: ansible/devtools/.github/workflows/push_network.yml@main
- with:
- repo: ansible-collections/junipernetworks.junos
- secrets:
- BOT_PAT: ${{ secrets.BOT_PAT }}
diff --git a/ansible_collections/junipernetworks/junos/.github/workflows/tests.yml b/ansible_collections/junipernetworks/junos/.github/workflows/tests.yml
index e94026c6d..c0bf515ac 100644
--- a/ansible_collections/junipernetworks/junos/.github/workflows/tests.yml
+++ b/ansible_collections/junipernetworks/junos/.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() && (github.event_name != 'schedule') }}
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.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/junipernetworks/junos/.pre-commit-config.yaml b/ansible_collections/junipernetworks/junos/.pre-commit-config.yaml
index 275086d8d..2e88d4577 100644
--- a/ansible_collections/junipernetworks/junos/.pre-commit-config.yaml
+++ b/ansible_collections/junipernetworks/junos/.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: 23.12.1
hooks:
- id: black
+
+ - repo: https://github.com/pycqa/flake8
+ rev: 7.0.0
+ hooks:
+ - id: flake8
diff --git a/ansible_collections/junipernetworks/junos/CHANGELOG.rst b/ansible_collections/junipernetworks/junos/CHANGELOG.rst
index 73ef77b5f..d8bcbc11e 100644
--- a/ansible_collections/junipernetworks/junos/CHANGELOG.rst
+++ b/ansible_collections/junipernetworks/junos/CHANGELOG.rst
@@ -5,6 +5,92 @@ Junipernetworks Junos 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
+-------------
+
+- This release removes previously deprecated modules from this collection. Please refer to the **Removed Features** section for details.
+
+Removed Features (previously deprecated)
+----------------------------------------
+
+- Remove deprected junos_logging module which is replaced by junos_logging_global resource module.
+
+Bugfixes
+--------
+
+- Fix the empty facts list placement
+
+v6.0.2
+======
+
+Bugfixes
+--------
+
+- acls
+- 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
+
+Documentation Changes
+---------------------
+
+- Remove the part of the description which incorrectly describes the behavior and type of confirm attribute.
+- Update example performing `confirm_commit`.
+- Update with more examples using the `confirm` option to set a timer.
+
+v6.0.1
+======
+
+Bugfixes
+--------
+
+- Prevents module_defaults from were being incorrectly applied to the platform action, instead of the concerned module.
+
+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.1`.
+
+Major Changes
+-------------
+
+- Bumping `requires_ansible` to `>=2.14.0`, since previous ansible-core versions are EoL now.
+
v5.3.1
======
diff --git a/ansible_collections/junipernetworks/junos/FILES.json b/ansible_collections/junipernetworks/junos/FILES.json
index da63ee3e6..b65b71f50 100644
--- a/ansible_collections/junipernetworks/junos/FILES.json
+++ b/ansible_collections/junipernetworks/junos/FILES.json
@@ -8,52 +8,66 @@
"format": 1
},
{
- "name": "codecov.yml",
+ "name": ".github",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": ".github/dependabot.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4aa7e485dd4db6f8a55b046088c745def2b3145d9499ccda4e9a3336467dcea2",
+ "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": "a56c8aba05b81d2e1d6575b37963f40df663387030de5eaac6f5c9dfd7af54f1",
"format": 1
},
{
- "name": ".yamllint",
+ "name": ".github/workflows/draft_release.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "827ef9e031ecdcaf137be239d33ef93fcbbc3611cbb6b30b0e507d0e03373d0e",
+ "chksum_sha256": "e8ad00c6053c348c7c2a60f2f6e68232459de307e0133b5b7041140676562077",
"format": 1
},
{
- "name": "requirements.txt",
+ "name": ".github/workflows/check_label.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "72120963f8c7e635d07e9383be6e58963fe00d8496e6545facd7e00082a4351b",
+ "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": "b5b7187b67da01f2d782b6158d3519127a5131f7b266592839eda3d938b67c0d",
"format": 1
},
{
- "name": "meta/runtime.yml",
+ "name": ".github/workflows/release.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ed198f0d427c1317f5bf5bd0589830d0cdbdbc7f9f50bc9893544a52ca365659",
+ "chksum_sha256": "c9b7dba505905600bbb9f0d8e9956b7cc20f80edfa742dfdae9395542f417aa1",
"format": 1
},
{
- "name": "README.md",
+ "name": ".github/release-drafter.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2dc9f0d0301e93e8c4335dde8d0f0a5e8213ea182ddd0ff7c09a1864a829b18d",
+ "chksum_sha256": "7cbc785c8661033cd9dd7a60897484fce731cbe3dc124a689fc3e934b1d974fb",
"format": 1
},
{
@@ -64,332 +78,367 @@
"format": 1
},
{
- "name": "plugins/terminal",
+ "name": "plugins/doc_fragments",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/terminal/__init__.py",
+ "name": "plugins/doc_fragments/junos.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "5294623e923b47674ea7fcfafc3b51a847e7e87942ee4169e5067aef5be13bb1",
"format": 1
},
{
- "name": "plugins/terminal/junos.py",
+ "name": "plugins/doc_fragments/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7a753a93aab66c8d3aa61ffbc0a3cffa9a4c19b60b04e281fffd4a028ee025e5",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/netconf",
+ "name": "plugins/action",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/netconf/__init__.py",
+ "name": "plugins/action/junos.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/netconf/junos.py",
+ "name": "plugins/action/l2_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0748873fbfd215ae3a28d9c12bc28cba70f3b2892afb054ac3f1935250663900",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/cliconf",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/action/hostname.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/cliconf/__init__.py",
+ "name": "plugins/action/rpc.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/cliconf/junos.py",
+ "name": "plugins/action/security_zones.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "927ec120e824df3ce856084834a5ade6c24b8a5c4600830da8b68fd3c66f2f7e",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"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": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_acls.py",
+ "name": "plugins/action/lacp.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7b840a4eb0515cf20f08504b12527f3682277d4d3fc890a20c43ba3c6774331c",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_banner.py",
+ "name": "plugins/action/acl_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8d8fd80f73b1372288842f4bcb88c10ea942da1300fd83abb4d61344acd02aab",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_vrf.py",
+ "name": "plugins/action/vrf.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ab4709ddc2cb63bfa4b20cd32a4ed32757f1bf544413fb76f8d20b9080a8c69f",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_bgp_global.py",
+ "name": "plugins/action/interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e9669b05036c44531bcb7c498aed6bf26a44a807423d7f9245a29c5e6e27a77b",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_lldp_global.py",
+ "name": "plugins/action/lag_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8976ed6186d6dbe8af60ba32e64de959f1b48d97af2ae4be9e7d36dcd0e89f03",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_command.py",
+ "name": "plugins/action/command.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4c849c92e52778ff2e2921b60adcb437bc0285242c4acaa28f8990d702dc691f",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_lacp.py",
+ "name": "plugins/action/ntp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d9f2e4ff87b7fce833a5e4a8cf7eb47ffdd12e7c6a980a0bdfb7fd4d7c008b57",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_static_routes.py",
+ "name": "plugins/action/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2c91ff6e46f595f9f0e29721d0a45dc8b61f22aac87f339dfa683dddaba2d0d7",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/modules/junos_security_policies_global.py",
+ "name": "plugins/action/system.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "171403f7e2aed2f3efdadeac65626a6de4fc1377c82d2a035a736e987b645673",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_facts.py",
+ "name": "plugins/action/snmp_server.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4bcb1142f3cec172af6f2325d1241df9db91343193548003cefe199841ae45a5",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_ospfv3.py",
+ "name": "plugins/action/ospfv2.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3c700a2299725aae6b7e4917a74726240ddd15159609e9bc2682de6a9c185e3f",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_netconf.py",
+ "name": "plugins/action/ospfv3.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0b7a1a0700bb32524bde4ad8559c5595481a33bcb4b24c78578445e1e84ad0f6",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_vlans.py",
+ "name": "plugins/action/scp.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b52a1557ee5352494b985acc10d7c7d1d607c69354f1b4db096238e10d7413bb",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_logging.py",
+ "name": "plugins/action/bgp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "06c0d46cfa6ef40ce2211c4a0f6f24628165e0cc0f6c2d526538478e4520fbd7",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_config.py",
+ "name": "plugins/action/logging_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0aa45eea7a3d67495c2bc7842b3e3c2a080da1fcaee005d007f7bb5f58594ebd",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_routing_options.py",
+ "name": "plugins/action/lldp_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0474996549452d2795863f28eb69b51bfca4d5beab089c3d2e4eec5af49e8b7a",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_package.py",
+ "name": "plugins/action/ospf_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a25342058d7c34065cc0836dd0a998c251b814df48c86e74b814b746dab8b089",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/__init__.py",
+ "name": "plugins/action/banner.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_l2_interfaces.py",
+ "name": "plugins/action/acls.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c2588107140c415914de2e3f70207950d6a9273de7bf5e25a699b3c1e15d8a14",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_lacp_interfaces.py",
+ "name": "plugins/action/l3_intefaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aa96729f20fc524e27b4618c2508223122f97af0f54039d6f6397ba8af46090c",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_security_zones.py",
+ "name": "plugins/action/user.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "301f4ef2124f91e5ed2dd6a56a81b31bcbda045c3f5146d609e2838c2dae0f8e",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_scp.py",
+ "name": "plugins/action/bgp_address_family.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "65ff7c4f0f934877c1ec769108a7839b8b690118da1c800b8243e605771edc9f",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_interfaces.py",
+ "name": "plugins/action/security_policies.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "29ecfe2acb6c98a3b2081b77446de065e139cb4378c9a1b9ae128447b37c9368",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_lldp_interfaces.py",
+ "name": "plugins/action/routing_instances.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "80158e131b1738cb4f2d4de7f2a9d5d42fc8709c651f834fd5c6dd37021d098d",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_lag_interfaces.py",
+ "name": "plugins/action/logging.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "19e99c1a56ac0ea2b4adffbc0eb689c2a46cbe2360f8e019b3aa37a1ab143018",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_rpc.py",
+ "name": "plugins/action/ping.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5cf5ed6bbb369bf50565ea8b8ac8044371445fc0d7edd3d978b99e4cc0b1da36",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_system.py",
+ "name": "plugins/action/prefix_lists.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2635eb9827190e6730ebb7be9ba0f0e6e232302a948cba6880a5ccf00ea3b9ab",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_acl_interfaces.py",
+ "name": "plugins/action/security_policies_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ab29072bfc7fef0934b4f0cc8092756a4eda3df16b33ce7c341ce9ce7f96a61d",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_logging_global.py",
+ "name": "plugins/action/lldp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "50e8fa45f5184a381823ff10e7180009810ba1fa65c92bc9def44135847934e2",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_security_policies.py",
+ "name": "plugins/action/package.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fa867759f13b9c37011417ebbae1983aa8bd49014d47d225c10c836d50341d1c",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_routing_instances.py",
+ "name": "plugins/action/static_routes.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2ac171bdae6f922892cbb6f237fedf57a397fbaaf1bbf4f755b1aa2782b599ec",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_ping.py",
+ "name": "plugins/action/config.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "60bb7b3367606e75c651f2ab39dbc498efe35e02a9f8cd87835293873eacae9f",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_prefix_lists.py",
+ "name": "plugins/action/netconf.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c82456ce16a53bc4972a6d3b49a800cb855fb6cab2520fce6580539ba6a8ffce",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_bgp_address_family.py",
+ "name": "plugins/action/lacp_intefaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "771f174a0f9fb5902926d0d51ca8113c3575483bad2ff4b6e0dd8e8e50402106",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_user.py",
+ "name": "plugins/action/vlans.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ac09a5a8fd1c094d4919a1c338e70ee37122ea25b9c8b8f15374e22cef60da8a",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_ntp_global.py",
+ "name": "plugins/action/routing_options.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "20c687260995640277dffed828e4175fdc12edcc1cf8ebcac4adb130c121785f",
+ "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
"format": 1
},
{
- "name": "plugins/modules/junos_ospfv2.py",
+ "name": "plugins/modules",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/junos_acl_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "68938ce7dec95ceb489e7523256280a80053d692ff0adfa9efb5c3e4d944310b",
+ "chksum_sha256": "ab29072bfc7fef0934b4f0cc8092756a4eda3df16b33ce7c341ce9ce7f96a61d",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/junos_command.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4c849c92e52778ff2e2921b60adcb437bc0285242c4acaa28f8990d702dc691f",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/junos_lldp_global.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8976ed6186d6dbe8af60ba32e64de959f1b48d97af2ae4be9e7d36dcd0e89f03",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/junos_logging_global.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "50e8fa45f5184a381823ff10e7180009810ba1fa65c92bc9def44135847934e2",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/junos_lldp_interfaces.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "80158e131b1738cb4f2d4de7f2a9d5d42fc8709c651f834fd5c6dd37021d098d",
"format": 1
},
{
@@ -400,17 +449,31 @@
"format": 1
},
{
- "name": "plugins/modules/junos_hostname.py",
+ "name": "plugins/modules/junos_bgp_address_family.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d950b8c2c345c298127dc183d53e6803d568cbc2c4867ec66097ff643fdd012f",
+ "chksum_sha256": "771f174a0f9fb5902926d0d51ca8113c3575483bad2ff4b6e0dd8e8e50402106",
"format": 1
},
{
- "name": "plugins/modules/junos_l3_interfaces.py",
+ "name": "plugins/modules/junos_ntp_global.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "20c687260995640277dffed828e4175fdc12edcc1cf8ebcac4adb130c121785f",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/junos_scp.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "55a8215c15a9c06ec42cfdd8cdec37c7a9a0a7f7787b120be857daa9eaa8bc69",
+ "chksum_sha256": "65ff7c4f0f934877c1ec769108a7839b8b690118da1c800b8243e605771edc9f",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/junos_system.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2635eb9827190e6730ebb7be9ba0f0e6e232302a948cba6880a5ccf00ea3b9ab",
"format": 1
},
{
@@ -421,255 +484,304 @@
"format": 1
},
{
- "name": "plugins/doc_fragments",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/junos_l2_interfaces.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3c47c6dc071e188fb60138372c98d7d3e56eea3b8fb7d8f2328ee6970f7e085e",
"format": 1
},
{
- "name": "plugins/doc_fragments/__init__.py",
+ "name": "plugins/modules/junos_acls.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "7b840a4eb0515cf20f08504b12527f3682277d4d3fc890a20c43ba3c6774331c",
"format": 1
},
{
- "name": "plugins/doc_fragments/junos.py",
+ "name": "plugins/modules/junos_facts.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5294623e923b47674ea7fcfafc3b51a847e7e87942ee4169e5067aef5be13bb1",
+ "chksum_sha256": "4bcb1142f3cec172af6f2325d1241df9db91343193548003cefe199841ae45a5",
"format": 1
},
{
- "name": "plugins/module_utils",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/junos_routing_options.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0474996549452d2795863f28eb69b51bfca4d5beab089c3d2e4eec5af49e8b7a",
"format": 1
},
{
- "name": "plugins/module_utils/__init__.py",
+ "name": "plugins/modules/junos_vrf.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "ab4709ddc2cb63bfa4b20cd32a4ed32757f1bf544413fb76f8d20b9080a8c69f",
"format": 1
},
{
- "name": "plugins/module_utils/network",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/junos_bgp_global.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e9669b05036c44531bcb7c498aed6bf26a44a807423d7f9245a29c5e6e27a77b",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/junos_lag_interfaces.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "19e99c1a56ac0ea2b4adffbc0eb689c2a46cbe2360f8e019b3aa37a1ab143018",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/__init__.py",
+ "name": "plugins/modules/junos_ospfv2.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "68938ce7dec95ceb489e7523256280a80053d692ff0adfa9efb5c3e4d944310b",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/junos_interfaces.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "29ecfe2acb6c98a3b2081b77446de065e139cb4378c9a1b9ae128447b37c9368",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/bgp_address_family",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/junos_lacp_interfaces.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "aa96729f20fc524e27b4618c2508223122f97af0f54039d6f6397ba8af46090c",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/bgp_address_family/bgp_address_family.py",
+ "name": "plugins/modules/junos_security_policies.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "89eab55bab6787e95a1d6b9c8f72b0593ca899e53f750541ea85e836c62de4d6",
+ "chksum_sha256": "fa867759f13b9c37011417ebbae1983aa8bd49014d47d225c10c836d50341d1c",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/bgp_address_family/__init__.py",
+ "name": "plugins/modules/junos_hostname.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "d950b8c2c345c298127dc183d53e6803d568cbc2c4867ec66097ff643fdd012f",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/static_routes",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/junos_netconf.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0b7a1a0700bb32524bde4ad8559c5595481a33bcb4b24c78578445e1e84ad0f6",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/static_routes/static_routes.py",
+ "name": "plugins/modules/junos_lacp.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2887ece67e8b0b676c03ed878529256fb1ad050ca06c1bce1bba38583fdc4ca3",
+ "chksum_sha256": "d9f2e4ff87b7fce833a5e4a8cf7eb47ffdd12e7c6a980a0bdfb7fd4d7c008b57",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/static_routes/__init__.py",
+ "name": "plugins/modules/junos_user.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "ac09a5a8fd1c094d4919a1c338e70ee37122ea25b9c8b8f15374e22cef60da8a",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/prefix_lists",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/junos_rpc.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5cf5ed6bbb369bf50565ea8b8ac8044371445fc0d7edd3d978b99e4cc0b1da36",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/prefix_lists/__init__.py",
+ "name": "plugins/modules/junos_static_routes.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "2c91ff6e46f595f9f0e29721d0a45dc8b61f22aac87f339dfa683dddaba2d0d7",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/prefix_lists/prefix_lists.py",
+ "name": "plugins/modules/junos_ping.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "94b94bff134cd75255b69e8eabd02cbf20034987af7123dde1302a9369a33a92",
+ "chksum_sha256": "60bb7b3367606e75c651f2ab39dbc498efe35e02a9f8cd87835293873eacae9f",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/hostname",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/junos_security_policies_global.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "171403f7e2aed2f3efdadeac65626a6de4fc1377c82d2a035a736e987b645673",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/hostname/hostname.py",
+ "name": "plugins/modules/junos_config.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "086449727c22526b4d6ec69f81aaa65ef7e20d7afe4dc8f5a74364050f58f197",
+ "chksum_sha256": "884c21dee0cb5351f02164dcf1cb1c8fda903cddf252efd55e70d7680850a89a",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/hostname/__init__.py",
+ "name": "plugins/modules/junos_package.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "a25342058d7c34065cc0836dd0a998c251b814df48c86e74b814b746dab8b089",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/lldp_interfaces",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/junos_ospfv3.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3c700a2299725aae6b7e4917a74726240ddd15159609e9bc2682de6a9c185e3f",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/lldp_interfaces/__init__.py",
+ "name": "plugins/modules/junos_security_zones.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "301f4ef2124f91e5ed2dd6a56a81b31bcbda045c3f5146d609e2838c2dae0f8e",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/lldp_interfaces/lldp_interfaces.py",
+ "name": "plugins/modules/junos_l3_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1df21a17a08ca662fde86eb104a1b315e94b1608d2714d93d40a2fc495527ad0",
+ "chksum_sha256": "618d2f12fe2e07c3f41bde1d01786014e8d8eabea5f194874f7a069314ab8ea1",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/lacp",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/junos_banner.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8d8fd80f73b1372288842f4bcb88c10ea942da1300fd83abb4d61344acd02aab",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/lacp/lacp.py",
+ "name": "plugins/modules/junos_prefix_lists.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "44936dff8bf302bdd1c920bc3fa6dbddfbfa262c0280c9022e3773db8782c868",
+ "chksum_sha256": "c82456ce16a53bc4972a6d3b49a800cb855fb6cab2520fce6580539ba6a8ffce",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/lacp/__init__.py",
+ "name": "plugins/modules/junos_vlans.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "b52a1557ee5352494b985acc10d7c7d1d607c69354f1b4db096238e10d7413bb",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/ospfv2",
+ "name": "plugins/modules/junos_routing_instances.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2ac171bdae6f922892cbb6f237fedf57a397fbaaf1bbf4f755b1aa2782b599ec",
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/ospfv2/__init__.py",
+ "name": "plugins/module_utils/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/ospfv2/ospfv2.py",
+ "name": "plugins/module_utils/network",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils/network/junos",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils/network/junos/junos.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5228a74b64a0c6cfdadb6aa523c07c7c0fc94ad073c8d67004c85d4359d5f3dd",
+ "chksum_sha256": "601f3146a98848d7acb795387f1f8541fd48d2bcca060e1eacfa07e3e36e9a04",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/logging_global",
+ "name": "plugins/module_utils/network/junos/utils",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/logging_global/__init__.py",
+ "name": "plugins/module_utils/network/junos/utils/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/logging_global/logging_global.py",
+ "name": "plugins/module_utils/network/junos/utils/utils.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "90aa258a0413fd85f229500f10df5a4d37a90837ea686739ac33a8fe237bfbe4",
+ "chksum_sha256": "d939568e6cc51b1dfecd971faef5c5b5daf45489d9ebf3f1ff1867670d5a32ea",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/ospfv3",
+ "name": "plugins/module_utils/network/junos/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils/network/junos/facts",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/ospfv3/__init__.py",
+ "name": "plugins/module_utils/network/junos/facts/lacp",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils/network/junos/facts/lacp/lacp.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "44936dff8bf302bdd1c920bc3fa6dbddfbfa262c0280c9022e3773db8782c868",
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils/network/junos/facts/lacp/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/ospfv3/ospfv3.py",
+ "name": "plugins/module_utils/network/junos/facts/facts.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3d375a5f2448fcd0109eb79289723cb47076212ca96f7d3953a40a82a87271a3",
+ "chksum_sha256": "cfcd05893d6ef57d7cd8d8f02b42562d95f88227f6b38c58a1b754df595c140f",
"format": 1
},
{
@@ -694,304 +806,325 @@
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/l2_interfaces",
+ "name": "plugins/module_utils/network/junos/facts/ospfv2",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/l2_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/junos/facts/ospfv2/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/l2_interfaces/l2_interfaces.py",
+ "name": "plugins/module_utils/network/junos/facts/ospfv2/ospfv2.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d473b4fd6fcceb453f5737c49d3a4496312aca47d43ea6986013af3349e23d5d",
+ "chksum_sha256": "0a3035620bf3950af583ea98d08e1b14a57e1e8bb692ae4db4cd59c6d599c7c3",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/ospf_interfaces",
+ "name": "plugins/module_utils/network/junos/facts/interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/ospf_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/junos/facts/interfaces/interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "f68580cf08d91d58daf195a401ce8149d53bd1b39f663f11cbad334bb6f92e04",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/ospf_interfaces/ospf_interfaces.py",
+ "name": "plugins/module_utils/network/junos/facts/interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9fb2f9201f58ce1d44ccf58f6dbb4a8ddc2f0dc14a24711c1e3d8ff9b9ed4a20",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/acl_interfaces",
+ "name": "plugins/module_utils/network/junos/facts/routing_instances",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/acl_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/junos/facts/routing_instances/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/acl_interfaces/acl_interfaces.py",
+ "name": "plugins/module_utils/network/junos/facts/routing_instances/routing_instances.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "96790e91d95b732dff326e712b71fbfc2fcf90f37b8e1ac48ec494250c941a24",
+ "chksum_sha256": "489b7ad0bc98ee965608dac54e3f7911b1f81d8753769d77279513552f5f4db8",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/security_policies",
+ "name": "plugins/module_utils/network/junos/facts/acl_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/security_policies/security_policies.py",
+ "name": "plugins/module_utils/network/junos/facts/acl_interfaces/acl_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c13f6094663d084a4a5fde18f9094a8cf2cf4434be1e827415babba820c9fefb",
+ "chksum_sha256": "96790e91d95b732dff326e712b71fbfc2fcf90f37b8e1ac48ec494250c941a24",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/security_policies/__init__.py",
+ "name": "plugins/module_utils/network/junos/facts/acl_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/lldp_global",
+ "name": "plugins/module_utils/network/junos/facts/l2_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/lldp_global/__init__.py",
+ "name": "plugins/module_utils/network/junos/facts/l2_interfaces/l2_interfaces.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d473b4fd6fcceb453f5737c49d3a4496312aca47d43ea6986013af3349e23d5d",
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils/network/junos/facts/l2_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/lldp_global/lldp_global.py",
+ "name": "plugins/module_utils/network/junos/facts/lag_interfaces",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils/network/junos/facts/lag_interfaces/lag_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d6ae5428d96ce7838d54b1d6697f19056940afea5a457691dba4fa512be7d46c",
+ "chksum_sha256": "771999bc9241bf629356732305d827a3dc1f812bdeaf95b9350257b9829011e3",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/__init__.py",
+ "name": "plugins/module_utils/network/junos/facts/lag_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/snmp_server",
+ "name": "plugins/module_utils/network/junos/facts/routing_options",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/snmp_server/snmp_server.py",
+ "name": "plugins/module_utils/network/junos/facts/routing_options/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c62d20cd6d62bdbec004c9f840cddcf5649be5feda41c84417ce0371b6f6cf14",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/snmp_server/__init__.py",
+ "name": "plugins/module_utils/network/junos/facts/routing_options/routing_options.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "d8ba26ae7fd578055733e724697d2e94d2c217c0d69772f6997453a71d2f7fd8",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/security_zones",
+ "name": "plugins/module_utils/network/junos/facts/hostname",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/security_zones/security_zones.py",
+ "name": "plugins/module_utils/network/junos/facts/hostname/hostname.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cbb73b02383c6787a4bbe18eeb1a566363d7af2e9326b3c56b2820d2198519bb",
+ "chksum_sha256": "086449727c22526b4d6ec69f81aaa65ef7e20d7afe4dc8f5a74364050f58f197",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/security_zones/__init__.py",
+ "name": "plugins/module_utils/network/junos/facts/hostname/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/lacp_interfaces",
+ "name": "plugins/module_utils/network/junos/facts/lldp_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/lacp_interfaces/lacp_interfaces.py",
+ "name": "plugins/module_utils/network/junos/facts/lldp_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f93a737a129b5d05fe28f5c6c3bb44a830df90b3dd61fb17444bd80b93ad9a09",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/lacp_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/junos/facts/lldp_interfaces/lldp_interfaces.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "70811467fcf2b15d187f17e4e5820e9c78ded6f3083a9dcbdcdf864bf30a46e3",
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils/network/junos/facts/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/acls",
+ "name": "plugins/module_utils/network/junos/facts/lldp_global",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/acls/__init__.py",
+ "name": "plugins/module_utils/network/junos/facts/lldp_global/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/acls/acls.py",
+ "name": "plugins/module_utils/network/junos/facts/lldp_global/lldp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eef5be8b578155642be73aa8311dfd978c0dc01a5a3fba3939ba2faceba4bba8",
+ "chksum_sha256": "960cf86762b273a1772353c2d51af656092f3e7d357f376961c6835ee428db1a",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/ntp_global",
+ "name": "plugins/module_utils/network/junos/facts/snmp_server",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/ntp_global/ntp_global.py",
+ "name": "plugins/module_utils/network/junos/facts/snmp_server/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fa1d7dd9759815b42609d676a8430789049b3f28368b3b0cb5cc8d6665ff0f03",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/ntp_global/__init__.py",
+ "name": "plugins/module_utils/network/junos/facts/snmp_server/snmp_server.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "06c938f01562f42ab5b25d41664de1876fed6004678f011638dd4e1e825b9702",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/lag_interfaces",
+ "name": "plugins/module_utils/network/junos/facts/prefix_lists",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/lag_interfaces/lag_interfaces.py",
+ "name": "plugins/module_utils/network/junos/facts/prefix_lists/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "771999bc9241bf629356732305d827a3dc1f812bdeaf95b9350257b9829011e3",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/lag_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/junos/facts/prefix_lists/prefix_lists.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "b2a79a4d417a61679dcea9df07b7deb89c07fd00d2ef3f48d94503c45a8cfd11",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/routing_instances",
+ "name": "plugins/module_utils/network/junos/facts/ntp_global",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/routing_instances/routing_instances.py",
+ "name": "plugins/module_utils/network/junos/facts/ntp_global/ntp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3d09198249f250a585d299c8e1771a7304cfafb231040abbf4cebba3d3cd43c",
+ "chksum_sha256": "239a2b0e8e67f513756cbc17ebdede947bed9957fd107e03a52a56b2e403869f",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/routing_instances/__init__.py",
+ "name": "plugins/module_utils/network/junos/facts/ntp_global/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/vlans",
+ "name": "plugins/module_utils/network/junos/facts/security_policies_global",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/vlans/vlans.py",
+ "name": "plugins/module_utils/network/junos/facts/security_policies_global/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6a31b3b1d45130b9d77d4aabf789cc2294b61c46a2c2526dc6e7a9af68c015c0",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/vlans/__init__.py",
+ "name": "plugins/module_utils/network/junos/facts/security_policies_global/security_policies_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "a28392d4616d8d136967f7aef3d088f8327c27ca81c9d22bd31b5126454e3f06",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/interfaces",
+ "name": "plugins/module_utils/network/junos/facts/security_policies",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/interfaces/interfaces.py",
+ "name": "plugins/module_utils/network/junos/facts/security_policies/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f68580cf08d91d58daf195a401ce8149d53bd1b39f663f11cbad334bb6f92e04",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/interfaces/__init__.py",
+ "name": "plugins/module_utils/network/junos/facts/security_policies/security_policies.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "e502296f8435ffca697167e03629c9248c47325600255a7642c97761f812753c",
"format": 1
},
{
@@ -1016,311 +1149,304 @@
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/bgp_global",
+ "name": "plugins/module_utils/network/junos/facts/acls",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/bgp_global/bgp_global.py",
+ "name": "plugins/module_utils/network/junos/facts/acls/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d341e9a255c4a64bc7699b5df292b8aab8568f07e952297ee6655db83878481a",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/bgp_global/__init__.py",
+ "name": "plugins/module_utils/network/junos/facts/acls/acls.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "5001d9826089b99dbc51da7bf9aaa884fe54df4aefef7bd1407d161a0e204660",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/security_policies_global",
+ "name": "plugins/module_utils/network/junos/facts/security_zones",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/security_policies_global/security_policies_global.py",
+ "name": "plugins/module_utils/network/junos/facts/security_zones/security_zones.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5b73a48e9e07cff06d4a3d1124c3b794850c8045c4623e46cc4e739cf5a32a08",
+ "chksum_sha256": "61609f34d9b2c447c6fd777c4b43130296b5639ce70c6d25d03176e025783b4e",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/security_policies_global/__init__.py",
+ "name": "plugins/module_utils/network/junos/facts/security_zones/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/facts.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cfcd05893d6ef57d7cd8d8f02b42562d95f88227f6b38c58a1b754df595c140f",
- "format": 1
- },
- {
- "name": "plugins/module_utils/network/junos/facts/routing_options",
+ "name": "plugins/module_utils/network/junos/facts/bgp_global",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/routing_options/__init__.py",
+ "name": "plugins/module_utils/network/junos/facts/bgp_global/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/facts/routing_options/routing_options.py",
+ "name": "plugins/module_utils/network/junos/facts/bgp_global/bgp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "230976ef9749bfa817c9205d7ca5a315767d6659589beaddef062716b199b81a",
- "format": 1
- },
- {
- "name": "plugins/module_utils/network/junos/argspec",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "d341e9a255c4a64bc7699b5df292b8aab8568f07e952297ee6655db83878481a",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/bgp_address_family",
+ "name": "plugins/module_utils/network/junos/facts/static_routes",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/bgp_address_family/bgp_address_family.py",
+ "name": "plugins/module_utils/network/junos/facts/static_routes/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "631e77bbb41f6bbb34bef7e0a1635413911fd4744a595060296f861dc63d2864",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/bgp_address_family/__init__.py",
+ "name": "plugins/module_utils/network/junos/facts/static_routes/static_routes.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "f6db0676a18bc464bafb06ea2835ee56b87a60655ca556caa8e6e458a70547a2",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/static_routes",
+ "name": "plugins/module_utils/network/junos/facts/logging_global",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/static_routes/static_routes.py",
+ "name": "plugins/module_utils/network/junos/facts/logging_global/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "981e24f69455e6598b73620e9a3a46a6a38e92cd5d249650586641d26338cca1",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/static_routes/__init__.py",
+ "name": "plugins/module_utils/network/junos/facts/logging_global/logging_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "67f3108c962de58e61e596b65a9873c7db45304f6a630d6f07ed4b4f0ff5818e",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/prefix_lists",
+ "name": "plugins/module_utils/network/junos/facts/ospf_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/prefix_lists/__init__.py",
+ "name": "plugins/module_utils/network/junos/facts/ospf_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/prefix_lists/prefix_lists.py",
+ "name": "plugins/module_utils/network/junos/facts/ospf_interfaces/ospf_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b8ab0bb2961d97dac8d7d9e947058528e9d31dcad8ec210c6d0e63ecb0cd428c",
+ "chksum_sha256": "f39bec8e0b904e35c0902587796f29724ac12ec0883a4d60f58e3dd2e12fbd65",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/hostname",
+ "name": "plugins/module_utils/network/junos/facts/bgp_address_family",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/hostname/hostname.py",
+ "name": "plugins/module_utils/network/junos/facts/bgp_address_family/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bc0972c01a77f54216305610589d3bd2c2be035084c2a895859ce83b80fc016b",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/hostname/__init__.py",
+ "name": "plugins/module_utils/network/junos/facts/bgp_address_family/bgp_address_family.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "89eab55bab6787e95a1d6b9c8f72b0593ca899e53f750541ea85e836c62de4d6",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/lldp_interfaces",
+ "name": "plugins/module_utils/network/junos/facts/vlans",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/lldp_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/junos/facts/vlans/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/lldp_interfaces/lldp_interfaces.py",
+ "name": "plugins/module_utils/network/junos/facts/vlans/vlans.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "401c26d38a8a470e9946bb6c743196681ecc97054feca043af0744f69343d27a",
+ "chksum_sha256": "a279b7df78c3ccd65a3ddf60cc2520a0cb0d92fd4e7834927c19751a76ef3ec6",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/lacp",
+ "name": "plugins/module_utils/network/junos/facts/lacp_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/lacp/lacp.py",
+ "name": "plugins/module_utils/network/junos/facts/lacp_interfaces/lacp_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c909e98e4992fdc470732fff7e71016766edfcaa01a46de20712dd4d5a12050f",
+ "chksum_sha256": "f93a737a129b5d05fe28f5c6c3bb44a830df90b3dd61fb17444bd80b93ad9a09",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/lacp/__init__.py",
+ "name": "plugins/module_utils/network/junos/facts/lacp_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/ospfv2",
+ "name": "plugins/module_utils/network/junos/facts/ospfv3",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/ospfv2/__init__.py",
+ "name": "plugins/module_utils/network/junos/facts/ospfv3/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/ospfv2/ospfv2.py",
+ "name": "plugins/module_utils/network/junos/facts/ospfv3/ospfv3.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "70cfa5de84015312181c262d5edb88f08881b404e3b7f4e2b3865eecb7d90f3f",
+ "chksum_sha256": "447e2f34c60d22233890647c6792d09d683feb8ddc6f4f5446806e5398991789",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/logging_global",
+ "name": "plugins/module_utils/network/junos/argspec",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/logging_global/__init__.py",
+ "name": "plugins/module_utils/network/junos/argspec/lacp",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils/network/junos/argspec/lacp/lacp.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "c909e98e4992fdc470732fff7e71016766edfcaa01a46de20712dd4d5a12050f",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/logging_global/logging_global.py",
+ "name": "plugins/module_utils/network/junos/argspec/lacp/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "15ed3daf016f8c316e016dfce6a3059984820e84861c5a50b2cd7251cc2a4ed0",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/ospfv3",
+ "name": "plugins/module_utils/network/junos/argspec/ospfv2",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/ospfv3/__init__.py",
+ "name": "plugins/module_utils/network/junos/argspec/ospfv2/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/ospfv3/ospfv3.py",
+ "name": "plugins/module_utils/network/junos/argspec/ospfv2/ospfv2.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6f6baae6c8d0cd7a42d175f8237a94d49bbc748da8f39fe30d78db52e4bce753",
+ "chksum_sha256": "70cfa5de84015312181c262d5edb88f08881b404e3b7f4e2b3865eecb7d90f3f",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/l2_interfaces",
+ "name": "plugins/module_utils/network/junos/argspec/interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/l2_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/junos/argspec/interfaces/interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "0afa05ec549bc39da1392a7432968c280a626e0da14e12a0e27e07098a6ed32d",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/l2_interfaces/l2_interfaces.py",
+ "name": "plugins/module_utils/network/junos/argspec/interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "efbd8b98fa5da8778f43d3a6d3cc0c014fe93b2f7880f4114b794e351cba2b9b",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/ospf_interfaces",
+ "name": "plugins/module_utils/network/junos/argspec/routing_instances",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/ospf_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/junos/argspec/routing_instances/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/ospf_interfaces/ospf_interfaces.py",
+ "name": "plugins/module_utils/network/junos/argspec/routing_instances/routing_instances.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "27e83e48f119c26a0650d59424b48d594f948c6fc63de6d05eca17c388ffe2f4",
+ "chksum_sha256": "3ec4d7437cc5586002d8cf9b449e7428a395880b02f13d178762cde6dd78deaa",
"format": 1
},
{
@@ -1331,171 +1457,192 @@
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/acl_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/junos/argspec/acl_interfaces/acl_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "266f490e5364e72650ae56a41c325229066f28066854701e46093ab87648de51",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/acl_interfaces/acl_interfaces.py",
+ "name": "plugins/module_utils/network/junos/argspec/acl_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "266f490e5364e72650ae56a41c325229066f28066854701e46093ab87648de51",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/security_policies",
+ "name": "plugins/module_utils/network/junos/argspec/l2_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/security_policies/security_policies.py",
+ "name": "plugins/module_utils/network/junos/argspec/l2_interfaces/l2_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4da59c067f1b71ae1e75503d98915d568b8f798a7da1cf4136f3065a674df9c3",
+ "chksum_sha256": "efbd8b98fa5da8778f43d3a6d3cc0c014fe93b2f7880f4114b794e351cba2b9b",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/security_policies/__init__.py",
+ "name": "plugins/module_utils/network/junos/argspec/l2_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/lldp_global",
+ "name": "plugins/module_utils/network/junos/argspec/lag_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/lldp_global/__init__.py",
+ "name": "plugins/module_utils/network/junos/argspec/lag_interfaces/lag_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "51e2ede7acfbd40fe4f8d1a8a2bdf6fdfdaecd213e213da7f25e659772166ee6",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/lldp_global/lldp_global.py",
+ "name": "plugins/module_utils/network/junos/argspec/lag_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f501b9cddefef6a0be35a982dc1f49d0f6721ed06e71a16a369dac9eff0593f9",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/__init__.py",
+ "name": "plugins/module_utils/network/junos/argspec/routing_options",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils/network/junos/argspec/routing_options/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/snmp_server",
+ "name": "plugins/module_utils/network/junos/argspec/routing_options/routing_options.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "24b6905c1d2720142bfa1f3643afd9d1087640fea46b7bd2a9ecb847fe2bf2be",
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils/network/junos/argspec/hostname",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/snmp_server/snmp_server.py",
+ "name": "plugins/module_utils/network/junos/argspec/hostname/hostname.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f1987ea2bf63d532ac4f194ffe2df4eeb2c2eec4856b9b9bc27741c47a539e6b",
+ "chksum_sha256": "bc0972c01a77f54216305610589d3bd2c2be035084c2a895859ce83b80fc016b",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/snmp_server/__init__.py",
+ "name": "plugins/module_utils/network/junos/argspec/hostname/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/facts",
+ "name": "plugins/module_utils/network/junos/argspec/lldp_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/facts/__init__.py",
+ "name": "plugins/module_utils/network/junos/argspec/lldp_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/facts/facts.py",
+ "name": "plugins/module_utils/network/junos/argspec/lldp_interfaces/lldp_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "588316eb871e9a00db5269adf4d4f67ca2cf467e0699eeef0844e75b40de6953",
+ "chksum_sha256": "401c26d38a8a470e9946bb6c743196681ecc97054feca043af0744f69343d27a",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/security_zones",
+ "name": "plugins/module_utils/network/junos/argspec/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils/network/junos/argspec/lldp_global",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/security_zones/security_zones.py",
+ "name": "plugins/module_utils/network/junos/argspec/lldp_global/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b74961352f230df3c0fc3d1c8d031fe4f9abb6e5182620c22955fabe0afcba6c",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/security_zones/__init__.py",
+ "name": "plugins/module_utils/network/junos/argspec/lldp_global/lldp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "f501b9cddefef6a0be35a982dc1f49d0f6721ed06e71a16a369dac9eff0593f9",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/lacp_interfaces",
+ "name": "plugins/module_utils/network/junos/argspec/snmp_server",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/lacp_interfaces/lacp_interfaces.py",
+ "name": "plugins/module_utils/network/junos/argspec/snmp_server/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8c0c308e2b451d3f2b8ab8ba9e44b6bb4909e08c454f6b06fa2ebe55a375b8ad",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/lacp_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/junos/argspec/snmp_server/snmp_server.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "f1987ea2bf63d532ac4f194ffe2df4eeb2c2eec4856b9b9bc27741c47a539e6b",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/acls",
+ "name": "plugins/module_utils/network/junos/argspec/prefix_lists",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/acls/__init__.py",
+ "name": "plugins/module_utils/network/junos/argspec/prefix_lists/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/acls/acls.py",
+ "name": "plugins/module_utils/network/junos/argspec/prefix_lists/prefix_lists.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7101b7be0a51fe637423985da6fb810432950ad33eea1c42e389ea0f409c1f65",
+ "chksum_sha256": "b8ab0bb2961d97dac8d7d9e947058528e9d31dcad8ec210c6d0e63ecb0cd428c",
"format": 1
},
{
@@ -1520,283 +1667,304 @@
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/lag_interfaces",
+ "name": "plugins/module_utils/network/junos/argspec/security_policies_global",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/lag_interfaces/lag_interfaces.py",
+ "name": "plugins/module_utils/network/junos/argspec/security_policies_global/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "51e2ede7acfbd40fe4f8d1a8a2bdf6fdfdaecd213e213da7f25e659772166ee6",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/lag_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/junos/argspec/security_policies_global/security_policies_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "e29761490c30f4dd7fbbec8289646e48ab9c4758811ef365d02b749b9599e289",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/routing_instances",
+ "name": "plugins/module_utils/network/junos/argspec/security_policies",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/routing_instances/routing_instances.py",
+ "name": "plugins/module_utils/network/junos/argspec/security_policies/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3ec4d7437cc5586002d8cf9b449e7428a395880b02f13d178762cde6dd78deaa",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/routing_instances/__init__.py",
+ "name": "plugins/module_utils/network/junos/argspec/security_policies/security_policies.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "4da59c067f1b71ae1e75503d98915d568b8f798a7da1cf4136f3065a674df9c3",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/vlans",
+ "name": "plugins/module_utils/network/junos/argspec/facts",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/vlans/vlans.py",
+ "name": "plugins/module_utils/network/junos/argspec/facts/facts.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fccebb67c15266353af3b4b8438c50452a76246a84847561429f68bb299f48df",
+ "chksum_sha256": "588316eb871e9a00db5269adf4d4f67ca2cf467e0699eeef0844e75b40de6953",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/vlans/__init__.py",
+ "name": "plugins/module_utils/network/junos/argspec/facts/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/interfaces",
+ "name": "plugins/module_utils/network/junos/argspec/l3_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/interfaces/interfaces.py",
+ "name": "plugins/module_utils/network/junos/argspec/l3_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0afa05ec549bc39da1392a7432968c280a626e0da14e12a0e27e07098a6ed32d",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/interfaces/__init__.py",
+ "name": "plugins/module_utils/network/junos/argspec/l3_interfaces/l3_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "5918147337a997c12a473049b3672f0f941cc9129b103df578c8ad7627582dcd",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/l3_interfaces",
+ "name": "plugins/module_utils/network/junos/argspec/acls",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/l3_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/junos/argspec/acls/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/l3_interfaces/l3_interfaces.py",
+ "name": "plugins/module_utils/network/junos/argspec/acls/acls.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5918147337a997c12a473049b3672f0f941cc9129b103df578c8ad7627582dcd",
+ "chksum_sha256": "7101b7be0a51fe637423985da6fb810432950ad33eea1c42e389ea0f409c1f65",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/bgp_global",
+ "name": "plugins/module_utils/network/junos/argspec/security_zones",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/bgp_global/bgp_global.py",
+ "name": "plugins/module_utils/network/junos/argspec/security_zones/security_zones.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "007454b80cb74ab2649da400a2096b3d7567334823f989f4a9267ea946268ca3",
+ "chksum_sha256": "b74961352f230df3c0fc3d1c8d031fe4f9abb6e5182620c22955fabe0afcba6c",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/bgp_global/__init__.py",
+ "name": "plugins/module_utils/network/junos/argspec/security_zones/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/security_policies_global",
+ "name": "plugins/module_utils/network/junos/argspec/bgp_global",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/security_policies_global/security_policies_global.py",
+ "name": "plugins/module_utils/network/junos/argspec/bgp_global/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e29761490c30f4dd7fbbec8289646e48ab9c4758811ef365d02b749b9599e289",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/security_policies_global/__init__.py",
+ "name": "plugins/module_utils/network/junos/argspec/bgp_global/bgp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "007454b80cb74ab2649da400a2096b3d7567334823f989f4a9267ea946268ca3",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/routing_options",
+ "name": "plugins/module_utils/network/junos/argspec/static_routes",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/routing_options/__init__.py",
+ "name": "plugins/module_utils/network/junos/argspec/static_routes/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/argspec/routing_options/routing_options.py",
+ "name": "plugins/module_utils/network/junos/argspec/static_routes/static_routes.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "24b6905c1d2720142bfa1f3643afd9d1087640fea46b7bd2a9ecb847fe2bf2be",
+ "chksum_sha256": "981e24f69455e6598b73620e9a3a46a6a38e92cd5d249650586641d26338cca1",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config",
+ "name": "plugins/module_utils/network/junos/argspec/logging_global",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/bgp_address_family",
+ "name": "plugins/module_utils/network/junos/argspec/logging_global/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils/network/junos/argspec/logging_global/logging_global.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "15ed3daf016f8c316e016dfce6a3059984820e84861c5a50b2cd7251cc2a4ed0",
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils/network/junos/argspec/ospf_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/bgp_address_family/bgp_address_family.py",
+ "name": "plugins/module_utils/network/junos/argspec/ospf_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4308d40aae3f14befe52481b514fd615533e613ac280452d9b5836f487c516c6",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/bgp_address_family/__init__.py",
+ "name": "plugins/module_utils/network/junos/argspec/ospf_interfaces/ospf_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "27e83e48f119c26a0650d59424b48d594f948c6fc63de6d05eca17c388ffe2f4",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/static_routes",
+ "name": "plugins/module_utils/network/junos/argspec/bgp_address_family",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/static_routes/static_routes.py",
+ "name": "plugins/module_utils/network/junos/argspec/bgp_address_family/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "52ea908dc9603575564bc5edff65bc7cfbd18a89e7fa2ec1f826b955cfe891fc",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/static_routes/__init__.py",
+ "name": "plugins/module_utils/network/junos/argspec/bgp_address_family/bgp_address_family.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "631e77bbb41f6bbb34bef7e0a1635413911fd4744a595060296f861dc63d2864",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/prefix_lists",
+ "name": "plugins/module_utils/network/junos/argspec/vlans",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/prefix_lists/__init__.py",
+ "name": "plugins/module_utils/network/junos/argspec/vlans/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/prefix_lists/prefix_lists.py",
+ "name": "plugins/module_utils/network/junos/argspec/vlans/vlans.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "13a5dfa46801532d713b03b325b8d250a58a7e78d555f421d77d20aef67514f9",
+ "chksum_sha256": "fccebb67c15266353af3b4b8438c50452a76246a84847561429f68bb299f48df",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/hostname",
+ "name": "plugins/module_utils/network/junos/argspec/lacp_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/hostname/hostname.py",
+ "name": "plugins/module_utils/network/junos/argspec/lacp_interfaces/lacp_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "98909f99f52710bb239f512f01368d1ed562c6596f9f85ddd4eb9a36d9e7bade",
+ "chksum_sha256": "8c0c308e2b451d3f2b8ab8ba9e44b6bb4909e08c454f6b06fa2ebe55a375b8ad",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/hostname/__init__.py",
+ "name": "plugins/module_utils/network/junos/argspec/lacp_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/lldp_interfaces",
+ "name": "plugins/module_utils/network/junos/argspec/ospfv3",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/lldp_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/junos/argspec/ospfv3/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/lldp_interfaces/lldp_interfaces.py",
+ "name": "plugins/module_utils/network/junos/argspec/ospfv3/ospfv3.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9a3c3e3e17f83895459b7052b2a1baf96461a0efa68362f581f6b012f62617d2",
+ "chksum_sha256": "6f6baae6c8d0cd7a42d175f8237a94d49bbc748da8f39fe30d78db52e4bce753",
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils/network/junos/config",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
@@ -1842,241 +2010,241 @@
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/logging_global",
+ "name": "plugins/module_utils/network/junos/config/interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/logging_global/__init__.py",
+ "name": "plugins/module_utils/network/junos/config/interfaces/interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "857fd6a70790d54f80a14dfff735c5f345384b6d3a1381877e55f25b257d34bd",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/logging_global/logging_global.py",
+ "name": "plugins/module_utils/network/junos/config/interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1c182a0fa2fd2e54191755a18dc30685d0f88d819b2720121bc6fde3a27e6151",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/ospfv3",
+ "name": "plugins/module_utils/network/junos/config/routing_instances",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/ospfv3/__init__.py",
+ "name": "plugins/module_utils/network/junos/config/routing_instances/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/ospfv3/ospfv3.py",
+ "name": "plugins/module_utils/network/junos/config/routing_instances/routing_instances.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "69511d8d9cf8e1ed95a1deca6b0785e4b804abcbec8cc28f6283426325e990ee",
+ "chksum_sha256": "88b3847a6ee2218f3ce31258a38f70b295860bfbc2844117835ea1b0e749e4fb",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/l2_interfaces",
+ "name": "plugins/module_utils/network/junos/config/acl_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/l2_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/junos/config/acl_interfaces/acl_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "36738fa182091a428361f018a5864a84410880df76c21739d170e943339e3850",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/l2_interfaces/l2_interfaces.py",
+ "name": "plugins/module_utils/network/junos/config/acl_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a029d1415f0f0274c245c810123c678bf53766d1fc530744685fc59adb452ac4",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/ospf_interfaces",
+ "name": "plugins/module_utils/network/junos/config/l2_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/ospf_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/junos/config/l2_interfaces/l2_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "a029d1415f0f0274c245c810123c678bf53766d1fc530744685fc59adb452ac4",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/ospf_interfaces/ospf_interfaces.py",
+ "name": "plugins/module_utils/network/junos/config/l2_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "934eeadc92217fb3ee73af6d2ed6a0b8c79f2783be9a521a71b8811200c2dd58",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/acl_interfaces",
+ "name": "plugins/module_utils/network/junos/config/lag_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/acl_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/junos/config/lag_interfaces/lag_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "c76ba50fb43d6b0eb0ba7f2a56b9ac00c2cb3ef36200ee62394efdedb1d013de",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/acl_interfaces/acl_interfaces.py",
+ "name": "plugins/module_utils/network/junos/config/lag_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "36738fa182091a428361f018a5864a84410880df76c21739d170e943339e3850",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/security_policies",
+ "name": "plugins/module_utils/network/junos/config/routing_options",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/security_policies/security_policies.py",
+ "name": "plugins/module_utils/network/junos/config/routing_options/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2451ab92b864c21ba4c18496f19918e1cfe489352069a91751d8de29bcd53bf7",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/security_policies/__init__.py",
+ "name": "plugins/module_utils/network/junos/config/routing_options/routing_options.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "b3b8a5fae686977942fb4b15bec1ef5c42d6744d6fb4992d3a64b0694b5e562f",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/lldp_global",
+ "name": "plugins/module_utils/network/junos/config/hostname",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/lldp_global/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "plugins/module_utils/network/junos/config/lldp_global/lldp_global.py",
+ "name": "plugins/module_utils/network/junos/config/hostname/hostname.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8a6ed296e35769df250c928d886ffc424786404dabe4887034b3d1cef6e14c6b",
+ "chksum_sha256": "98909f99f52710bb239f512f01368d1ed562c6596f9f85ddd4eb9a36d9e7bade",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/__init__.py",
+ "name": "plugins/module_utils/network/junos/config/hostname/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/snmp_server",
+ "name": "plugins/module_utils/network/junos/config/lldp_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/snmp_server/snmp_server.py",
+ "name": "plugins/module_utils/network/junos/config/lldp_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7b80f5408c52240d700225b34c0bf78706628e4700b431582b6a491a8a0abc94",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/snmp_server/__init__.py",
+ "name": "plugins/module_utils/network/junos/config/lldp_interfaces/lldp_interfaces.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9a3c3e3e17f83895459b7052b2a1baf96461a0efa68362f581f6b012f62617d2",
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils/network/junos/config/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/security_zones",
+ "name": "plugins/module_utils/network/junos/config/lldp_global",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/security_zones/security_zones.py",
+ "name": "plugins/module_utils/network/junos/config/lldp_global/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9721187f918f026b804f3df3b2ff2b7ad8f720ecd34c94b976473e9e86b9dffa",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/security_zones/__init__.py",
+ "name": "plugins/module_utils/network/junos/config/lldp_global/lldp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "b467342f8ebfd8f1d582be0c0d3957608d3d5b35b440d0bef05b9adbb41deaf0",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/lacp_interfaces",
+ "name": "plugins/module_utils/network/junos/config/snmp_server",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/lacp_interfaces/lacp_interfaces.py",
+ "name": "plugins/module_utils/network/junos/config/snmp_server/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "56b3b18fad45f4f6714f9c8dfc2e79baac8f8261733e7f5170100f1c54e4be2c",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/lacp_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/junos/config/snmp_server/snmp_server.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "7b80f5408c52240d700225b34c0bf78706628e4700b431582b6a491a8a0abc94",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/acls",
+ "name": "plugins/module_utils/network/junos/config/prefix_lists",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/acls/__init__.py",
+ "name": "plugins/module_utils/network/junos/config/prefix_lists/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/acls/acls.py",
+ "name": "plugins/module_utils/network/junos/config/prefix_lists/prefix_lists.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8d197fbe7a69f86c9ee4b9a2999f982c3d87c1f7f99db09a8c4acb897b876b17",
+ "chksum_sha256": "13a5dfa46801532d713b03b325b8d250a58a7e78d555f421d77d20aef67514f9",
"format": 1
},
{
@@ -2101,108 +2269,108 @@
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/lag_interfaces",
+ "name": "plugins/module_utils/network/junos/config/security_policies_global",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/lag_interfaces/lag_interfaces.py",
+ "name": "plugins/module_utils/network/junos/config/security_policies_global/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c76ba50fb43d6b0eb0ba7f2a56b9ac00c2cb3ef36200ee62394efdedb1d013de",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/lag_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/junos/config/security_policies_global/security_policies_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "5fb29cb28786698f38ae92f3814bb006d4599ff254e8e16244b6dacbfc5b3593",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/routing_instances",
+ "name": "plugins/module_utils/network/junos/config/security_policies",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/routing_instances/routing_instances.py",
+ "name": "plugins/module_utils/network/junos/config/security_policies/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "88b3847a6ee2218f3ce31258a38f70b295860bfbc2844117835ea1b0e749e4fb",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/routing_instances/__init__.py",
+ "name": "plugins/module_utils/network/junos/config/security_policies/security_policies.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "2451ab92b864c21ba4c18496f19918e1cfe489352069a91751d8de29bcd53bf7",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/vlans",
+ "name": "plugins/module_utils/network/junos/config/l3_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/vlans/vlans.py",
+ "name": "plugins/module_utils/network/junos/config/l3_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "32cd48bd67e3f40e715f4086aa7136b5370fe4d4715bec3d64fb1737b3f7f1e8",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/vlans/__init__.py",
+ "name": "plugins/module_utils/network/junos/config/l3_interfaces/l3_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "b988ee89f60461fc8fa8bac746c7b7c2e929482e5ce7808b3bfebffb1a1ee89e",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/interfaces",
+ "name": "plugins/module_utils/network/junos/config/acls",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/interfaces/interfaces.py",
+ "name": "plugins/module_utils/network/junos/config/acls/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "857fd6a70790d54f80a14dfff735c5f345384b6d3a1381877e55f25b257d34bd",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/interfaces/__init__.py",
+ "name": "plugins/module_utils/network/junos/config/acls/acls.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "8d197fbe7a69f86c9ee4b9a2999f982c3d87c1f7f99db09a8c4acb897b876b17",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/l3_interfaces",
+ "name": "plugins/module_utils/network/junos/config/security_zones",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/l3_interfaces/__init__.py",
+ "name": "plugins/module_utils/network/junos/config/security_zones/security_zones.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "9721187f918f026b804f3df3b2ff2b7ad8f720ecd34c94b976473e9e86b9dffa",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/l3_interfaces/l3_interfaces.py",
+ "name": "plugins/module_utils/network/junos/config/security_zones/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b988ee89f60461fc8fa8bac746c7b7c2e929482e5ce7808b3bfebffb1a1ee89e",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
@@ -2213,962 +2381,1025 @@
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/bgp_global/bgp_global.py",
+ "name": "plugins/module_utils/network/junos/config/bgp_global/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "088176cf61f0f690047e9aa818ad9ab62b5033c55a8e141823992aa97e9679dc",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/bgp_global/__init__.py",
+ "name": "plugins/module_utils/network/junos/config/bgp_global/bgp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "088176cf61f0f690047e9aa818ad9ab62b5033c55a8e141823992aa97e9679dc",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/security_policies_global",
+ "name": "plugins/module_utils/network/junos/config/static_routes",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/security_policies_global/security_policies_global.py",
+ "name": "plugins/module_utils/network/junos/config/static_routes/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5fb29cb28786698f38ae92f3814bb006d4599ff254e8e16244b6dacbfc5b3593",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/security_policies_global/__init__.py",
+ "name": "plugins/module_utils/network/junos/config/static_routes/static_routes.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "52ea908dc9603575564bc5edff65bc7cfbd18a89e7fa2ec1f826b955cfe891fc",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/routing_options",
+ "name": "plugins/module_utils/network/junos/config/logging_global",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/routing_options/__init__.py",
+ "name": "plugins/module_utils/network/junos/config/logging_global/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/config/routing_options/routing_options.py",
+ "name": "plugins/module_utils/network/junos/config/logging_global/logging_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b3b8a5fae686977942fb4b15bec1ef5c42d6744d6fb4992d3a64b0694b5e562f",
+ "chksum_sha256": "1c182a0fa2fd2e54191755a18dc30685d0f88d819b2720121bc6fde3a27e6151",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/utils",
+ "name": "plugins/module_utils/network/junos/config/ospf_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/utils/__init__.py",
+ "name": "plugins/module_utils/network/junos/config/ospf_interfaces/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/utils/utils.py",
+ "name": "plugins/module_utils/network/junos/config/ospf_interfaces/ospf_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d939568e6cc51b1dfecd971faef5c5b5daf45489d9ebf3f1ff1867670d5a32ea",
+ "chksum_sha256": "6c8e048532e8e0aa3c221403db5e3c1f6b92b8f40ad2bf932aeb1a979c507b33",
"format": 1
},
{
- "name": "plugins/module_utils/network/junos/junos.py",
+ "name": "plugins/module_utils/network/junos/config/bgp_address_family",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils/network/junos/config/bgp_address_family/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "601f3146a98848d7acb795387f1f8541fd48d2bcca060e1eacfa07e3e36e9a04",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/network/__init__.py",
+ "name": "plugins/module_utils/network/junos/config/bgp_address_family/bgp_address_family.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "4308d40aae3f14befe52481b514fd615533e613ac280452d9b5836f487c516c6",
"format": 1
},
{
- "name": "plugins/action",
+ "name": "plugins/module_utils/network/junos/config/vlans",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/action/__init__.py",
+ "name": "plugins/module_utils/network/junos/config/vlans/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/action/junos.py",
+ "name": "plugins/module_utils/network/junos/config/vlans/vlans.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "52e64984062ae3aa70c21154f4d94edfcb7f728080a4781e0e85b984e424a6b4",
+ "chksum_sha256": "32cd48bd67e3f40e715f4086aa7136b5370fe4d4715bec3d64fb1737b3f7f1e8",
"format": 1
},
{
- "name": "test-requirements.txt",
+ "name": "plugins/module_utils/network/junos/config/lacp_interfaces",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils/network/junos/config/lacp_interfaces/lacp_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "252dc496236f786a9c503a0e569eff6990316b93d55bd58bf4a34cde2404c59a",
+ "chksum_sha256": "56b3b18fad45f4f6714f9c8dfc2e79baac8f8261733e7f5170100f1c54e4be2c",
"format": 1
},
{
- "name": "tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/module_utils/network/junos/config/lacp_interfaces/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/sanity",
+ "name": "plugins/module_utils/network/junos/config/ospfv3",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/sanity/ignore-2.9.txt",
+ "name": "plugins/module_utils/network/junos/config/ospfv3/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "62a30515d429b76a520669490ac361db7634ee3252dd907cbbec7ccadcd061bd",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.13.txt",
+ "name": "plugins/module_utils/network/junos/config/ospfv3/ospfv3.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "18bf204fc6f6e08b0c20807cd7974995ed92b7d77df238e11ca5f3116c537e29",
+ "chksum_sha256": "69511d8d9cf8e1ed95a1deca6b0785e4b804abcbec8cc28f6283426325e990ee",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.11.txt",
+ "name": "plugins/module_utils/network/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "18bf204fc6f6e08b0c20807cd7974995ed92b7d77df238e11ca5f3116c537e29",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.10.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "18bf204fc6f6e08b0c20807cd7974995ed92b7d77df238e11ca5f3116c537e29",
+ "name": "plugins/terminal",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/sanity/ignore-2.14.txt",
+ "name": "plugins/terminal/junos.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "18bf204fc6f6e08b0c20807cd7974995ed92b7d77df238e11ca5f3116c537e29",
+ "chksum_sha256": "7a753a93aab66c8d3aa61ffbc0a3cffa9a4c19b60b04e281fffd4a028ee025e5",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.17.txt",
+ "name": "plugins/terminal/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "18bf204fc6f6e08b0c20807cd7974995ed92b7d77df238e11ca5f3116c537e29",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.16.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "18bf204fc6f6e08b0c20807cd7974995ed92b7d77df238e11ca5f3116c537e29",
+ "name": "plugins/cliconf",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/sanity/ignore-2.12.txt",
+ "name": "plugins/cliconf/junos.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "18bf204fc6f6e08b0c20807cd7974995ed92b7d77df238e11ca5f3116c537e29",
+ "chksum_sha256": "4852fb7d85e4de7c21e54c0001c9c12d7dd5176214e5c026b1bdc509235bab4f",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.15.txt",
+ "name": "plugins/cliconf/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "18bf204fc6f6e08b0c20807cd7974995ed92b7d77df238e11ca5f3116c537e29",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit",
+ "name": "plugins/netconf",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/requirements.txt",
+ "name": "plugins/netconf/junos.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "49ba996dc4735c3463e9af561344346dfae14bcc1a68096ce78364b377f0df1f",
+ "chksum_sha256": "0748873fbfd215ae3a28d9c12bc28cba70f3b2892afb054ac3f1935250663900",
"format": 1
},
{
- "name": "tests/unit/plugins",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/netconf/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/plugins/terminal",
+ "name": "meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/plugins/terminal/test_junos.py",
+ "name": "meta/runtime.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0c1a68c4e3aa8f143a63f903461ac72b7db68911ec8800961455f6d68c5c7ffb",
+ "chksum_sha256": "1f9d4c73f9cdb6e1a884268f3b7d99b1faa800baca49d80573d2e353ea5ee9a1",
"format": 1
},
{
- "name": "tests/unit/plugins/terminal/__init__.py",
+ "name": ".ansible-lint",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "b47f72e159f93a5ff07ea2534752e0fa977b214e9ac05c667fa83ac13be4e50c",
"format": 1
},
{
- "name": "tests/unit/plugins/__init__.py",
+ "name": ".pre-commit-config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "b36d46358b1a4976ee1de8c87caacc0583892e9af5502a8fdeaac85a7f506dd5",
"format": 1
},
{
- "name": "tests/unit/__init__.py",
+ "name": "pyproject.toml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "1cb6a45dfa2625123890b93ad7fdc156b063c16e8ae6dba11511a1d1986b0fcc",
"format": 1
},
{
- "name": "tests/unit/mock",
+ "name": "README.md",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "bff6b3d03bfe295730df451e2c9233a6c7220ed01371c39d43401133609a1416",
+ "format": 1
+ },
+ {
+ "name": "changelogs",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/mock/vault_helper.py",
+ "name": "changelogs/fragments",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "changelogs/fragments/.keep",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "55bd0e924dcc22d050612c944bff0ef745e51faac9260dce9b9b2018c4c8a661",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/unit/mock/__init__.py",
+ "name": "changelogs/config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "5cfa2df4e55abdedbdf6786d3152af410249523c96a41f89a34be3510af3395e",
"format": 1
},
{
- "name": "tests/unit/mock/procenv.py",
+ "name": "changelogs/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0060a3b1408dd90d8da17535f812a7273f84b73bc8cc96b311b5adee393ec465",
+ "chksum_sha256": "ef815167824e67f5f79bacc0fe38eca3a8a9f6bd2ff0d4ae32100a1c1295d4d9",
"format": 1
},
{
- "name": "tests/unit/mock/loader.py",
+ "name": ".isort.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2343d1f644250d4b616f0bf0a826fdee8fe306243d8412d44dd0e033352b262b",
+ "chksum_sha256": "9a0037e12d4e5d11a360d4522e64be506299bad16812825ebd7b5f0be9918524",
"format": 1
},
{
- "name": "tests/unit/mock/yaml_helper.py",
+ "name": ".yamllint",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "134eef238c83a9611799871b743e49e9bfbcd8bdddf2cc6a7bf69fd1000345b3",
+ "chksum_sha256": "827ef9e031ecdcaf137be239d33ef93fcbbc3611cbb6b30b0e507d0e03373d0e",
"format": 1
},
{
- "name": "tests/unit/mock/path.py",
+ "name": "test-requirements.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a402ff41d20717a59a59e360966df71293571ff7bab36af7d55ab3bdcbda0014",
+ "chksum_sha256": "93efb16371b32630b2f25924dc7aae81c2ae1c0a20b568c457019a14bae135bf",
"format": 1
},
{
- "name": "tests/unit/modules",
+ "name": ".prettierignore",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5c227902cb92d03412c05c2fd86d8aa4f5d32afddbd718da067b02a3eef4b358",
+ "format": 1
+ },
+ {
+ "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": "e3f98508805af0da212b0fd104e964e875cc1964a31ed0e264fad016ac56f037",
"format": 1
},
{
- "name": "tests/unit/modules/utils.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6e21e604a63f7e84baf5dc408224b29638864242d11c0ccac4e56a8e2f1f5d15",
+ "name": "tests/integration/targets",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network",
+ "name": "tests/integration/targets/junos_security_zones",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/junos",
+ "name": "tests/integration/targets/junos_security_zones/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/test_junos_scp.py",
+ "name": "tests/integration/targets/junos_security_zones/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "86a1def96c1f37faf45f72d304748b6123642646f1c9b264e9539582d2a04470",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/test_junos_security_policies.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c411890cbe802c15cc841d2f783b476f2c49825c866a0ebf9dabc6b0fb7ae531",
+ "name": "tests/integration/targets/junos_security_zones/vars",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/test_junos_ntp_global.py",
+ "name": "tests/integration/targets/junos_security_zones/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2dc3549e0cfdb401166bc9c3a112a7202ad0ed55f340fef23d795db97ada6445",
+ "chksum_sha256": "af63125e0d6fbca0f844ff71b1f26210c452ad70cd094931bf0a177e1ddd73f7",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/test_junos_l3_interfaces.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7d2db61567220c96e4887bd3383d25631bd759b0e22757e2b1a8c27aa1d0f214",
+ "name": "tests/integration/targets/junos_security_zones/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/test_junos_facts.py",
+ "name": "tests/integration/targets/junos_security_zones/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "12a78a7e5aef66b5eea9e60ef9f48140ed96384f712a980126b5d9f4d78dc218",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/test_junos_hostname.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cb1d2e7cae039c517d42c1e1d328ce004f7a9c78cb3bfcdde3dabc60bbf161a0",
+ "name": "tests/integration/targets/junos_security_zones/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/test_junos_ospf_interfaces.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "987a7c3d65d856973d8c775225d23da22b5cdfe2ebf4aef39300b177f57f45a7",
+ "name": "tests/integration/targets/junos_security_zones/tests/netconf",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/test_junos_routing_options.py",
+ "name": "tests/integration/targets/junos_security_zones/tests/netconf/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "66303035081d82b0e2eae079f9a826d5be699cdf4485381c012431dfb77a50d5",
+ "chksum_sha256": "8a7c2f670c6bc9435a0bd6eca8d81fdbd924cf4140c149c11a1b5623709d7dea",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/test_junos_snmp_server.py",
+ "name": "tests/integration/targets/junos_security_zones/tests/netconf/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "722ef94abda593d283489624726c0c994eceb42e8f45ef1a219264ce88bb15fe",
+ "chksum_sha256": "0b0a4ab8f0b94769621bd3585b2338252acb7bb110fba2eaa0033eee5c669d48",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/test_junos_ospfv3.py",
+ "name": "tests/integration/targets/junos_security_zones/tests/netconf/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b70336d1f08b0bebff0e06bfd07f9909d7004c8157facb0afd36e81517a394a5",
+ "chksum_sha256": "8cc511b2192c8ed212733f44b30dc4ed907865504d862ef3701150be9366cc41",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/__init__.py",
+ "name": "tests/integration/targets/junos_security_zones/tests/netconf/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "8ac531e0078326b78ed040e715ced5c69a57266a7ba0f8e878b5a132b3268a16",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/test_junos_ping.py",
+ "name": "tests/integration/targets/junos_security_zones/tests/netconf/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "598585442aa7c45c51a328d1767bdfe554b9efa0f88108312699c597e1860f57",
+ "chksum_sha256": "29fb25dec128037263716c898deb0aaeb5aca9b98b069a7a4c3d0b941417f57b",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/test_junos_ospfv2.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5bc7a90753a688333f39f6482b7ea4ca49c887939a6fe9eb3d8df9a773ffd68d",
+ "name": "tests/integration/targets/junos_security_zones/tests/netconf/fixtures",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/test_junos_vlans.py",
+ "name": "tests/integration/targets/junos_security_zones/tests/netconf/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "623946836ebc7547eea1151c17dc3baf22214108db1c339ffa0936e75eb3b002",
+ "chksum_sha256": "72a5d8773cfbf73e55a219ddd23fc03d5698af853088f5087cb9d3916a7e2743",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/test_junos_bgp_address_family.py",
+ "name": "tests/integration/targets/junos_security_zones/tests/netconf/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "07f74b42154bbc08b9d6d6800070b83627b6225107a1b3fbe4b792cff611d2c1",
+ "chksum_sha256": "ae8d6e41134cd6292e031bde0a1e41390a0877b7a8aa2609b0611d21f8c92dd7",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/test_junos_bgp_global.py",
+ "name": "tests/integration/targets/junos_security_zones/tests/netconf/rtt.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0bd60871d00cd1630ce390242532897ecdd0d778bdf22d5f40070b752aba8a40",
+ "chksum_sha256": "8610a0f4f2176625cff923f881740f3834ae1e11eb3707ee655a9a5bc28f66ec",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/test_junos_package.py",
+ "name": "tests/integration/targets/junos_security_zones/tests/netconf/_initial_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e68ac4279a6613f90c8fd53cd0d42fefb661f8504bf44c841314a010dcd87249",
+ "chksum_sha256": "97f5b6df3ba9463c6bffe711cf66d9f7ee8efeb65f153e4b47de128dc68e6a48",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/test_junos_l2_interfaces.py",
+ "name": "tests/integration/targets/junos_security_zones/tests/netconf/_reset_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5dc8d64fcad89065457b3b2ba60029ef87cecd2c61283e13d98c7655c39a3325",
+ "chksum_sha256": "8d240f3c782eef1fd316414e92647db865fd6d8f416f4444f9c9fc13626703f3",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/test_junos_netconf.py",
+ "name": "tests/integration/targets/junos_security_zones/tests/netconf/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2482f6a254651cd65365975d516df3dabc36dabb335e01b78a743596ad357f1c",
+ "chksum_sha256": "8d829c21014964be69edddccf727e72f3e20c6e97019bede439270ad4f5edcc5",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/junos_module.py",
+ "name": "tests/integration/targets/junos_security_zones/tests/netconf/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "77b38ebd0d49b8a6297e4f186dab942d645747a40ee376a6422e4cb1e465593e",
+ "chksum_sha256": "f7a29442765f7f3776e1b43980900eb7f2ebe5d17904e3fc36c601c41b7d28fb",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/test_junos_security_zones.py",
+ "name": "tests/integration/targets/junos_security_zones/tests/netconf/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "24102393aa0eae8c5db9e6daf1ccbcfdf01a6862e2db2bb24f549d4ea4c9ae81",
+ "chksum_sha256": "76407a5ce6e30b3b6bf16b5ae782d4fd7a0b92ae49ef92a7b77c755bbcbe2969",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/test_junos_routing_instances.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f57731c928380c9a8ca2f09710f64f5c147809f9e8e9e766dd760a6e9146ba26",
+ "name": "tests/integration/targets/junos_security_zones/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/test_junos_interfaces.py",
+ "name": "tests/integration/targets/junos_security_zones/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d666cca7056d62e78df27ccbb5d5f172ca4b24a8694a79e1fedec943bd537f7f",
+ "chksum_sha256": "6859e775c6926fd41248bfce2e80a71c7e08cc626a5cf5882bbd5134e1e58e46",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/test_junos_command.py",
+ "name": "tests/integration/targets/junos_security_zones/tasks/netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c3bd50b38ae745e2d13c3dde3a0196cff99cdc61474fefeb81e8f11d20e370b4",
+ "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/test_junos_logging_global.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "dad36e0bafdcec3bde8808b305f972f1a2e19cddd5b4ebcb1bd65d1097ab4490",
+ "name": "tests/integration/targets/junos_routing_instances",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/test_junos_security_policies_global.py",
+ "name": "tests/integration/targets/junos_routing_instances/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_routing_instances/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "026e23b951c6f79e30b389efad8874eb4c59f751829e5df870f489e12567383b",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures",
+ "name": "tests/integration/targets/junos_routing_instances/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_routing_instances_config.cfg",
+ "name": "tests/integration/targets/junos_routing_instances/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9492071c37154f5769046e38477904bf0829498697f3c2b4fd0b214ef14a27da",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/get_configuration_rpc_reply_xml.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9646d44347455a648826a01a979a033c85488b33f0663ef83a1602f98a3eabd0",
+ "name": "tests/integration/targets/junos_routing_instances/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/load_configuration_xml.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b9095b5352838f46207fca0046504e331c8d370dc85332520ccc0247028479f9",
+ "name": "tests/integration/targets/junos_routing_instances/tests/netconf",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/get_configuration_rpc_reply_text.txt",
+ "name": "tests/integration/targets/junos_routing_instances/tests/netconf/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b8288d3ef161c912a6016c1979234cfb8061d730f90ad6cac8a55de097d5ea1c",
+ "chksum_sha256": "707b5d9aa8e023d22f7ea57a1cce39fe05c6079f01c69dfe0d6312b76363cdba",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_config.set",
+ "name": "tests/integration/targets/junos_routing_instances/tests/netconf/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "533fb52817ff0c37cf4de7ad9fee8fb63587882fccfdbcd1f6a928b5f4ac0165",
+ "chksum_sha256": "41158fc9c9c801d84be463ea99b38536554851c6a8a4427a333793b78b542869",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/show_version_json.txt",
+ "name": "tests/integration/targets/junos_routing_instances/tests/netconf/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "00d9dd3100b96e96a6692f58f5d3a792275f1703a64acdbddf69601a7c93834c",
+ "chksum_sha256": "4245f6c677e2c7abffa6c8be158ba432af572304448f2f7baa8156e107938c86",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/show_interfaces_details_xml.txt",
+ "name": "tests/integration/targets/junos_routing_instances/tests/netconf/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5da1160ee1c09d42921f8664244e49c31ac21bf2b784e94794b4f134a36af4ed",
+ "chksum_sha256": "a8d2acc111a2980a9bc317bac9d08c68230f8b44cef3ffb56b516c0a71596bc1",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_config.text",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "52acbee815525e2a4ce9fca63c85297c52a32a0d6957c41bc3f37c3b90b4ae3b",
+ "name": "tests/integration/targets/junos_routing_instances/tests/netconf/fixtures",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/show_system_memory_xml.txt",
+ "name": "tests/integration/targets/junos_routing_instances/tests/netconf/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "962e8ea71a1ac6eb59d63e094f6fdc59afa2906c2d566a6f6092a8ec5e3f8e6f",
+ "chksum_sha256": "049f649304e92c13c8f5e6d00b7deeac4bd7dd1c3b14321407a46ee15863d544",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_routing_options_config.cfg",
+ "name": "tests/integration/targets/junos_routing_instances/tests/netconf/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "28bb98e8ecfb270479852cb8a0ab34c6e6362ec60e7858f64bd4843c76d548b7",
+ "chksum_sha256": "7f82e8795705fb9302d04f74dcce0137f7a8788c9c85eb2379ca6acdae0482d6",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_ping_ping_10.10.10.11_count_5_size_512_interval_2",
+ "name": "tests/integration/targets/junos_routing_instances/tests/netconf/_initial_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2dc39ef974356df3ba62871556a0253541b5fad3cad4e3ff1ea3d69101b6ad43",
+ "chksum_sha256": "618fd41de1d2ba07af50f84e9e7e25ffee98121299422765bbd6a4cd43ea615c",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_bgp_global_config.cfg",
+ "name": "tests/integration/targets/junos_routing_instances/tests/netconf/_reset_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8951ff0e1a3b6d71c64c3c00e22d6a9abf665c4ba9cc9ac55aa3f2fc487c7a22",
+ "chksum_sha256": "8ba46007f3628fbe6ee4591f4ad6b279f6f19ac5d91248ff4cec5fee3a3be931",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/show_system_storage_xml.txt",
+ "name": "tests/integration/targets/junos_routing_instances/tests/netconf/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "95430aab542287c13556d64fedaa017250d82bcd09bd9fcca6f7439838d9af7f",
+ "chksum_sha256": "d32cbe476e915ccf76733adf534ccf9309395d6799353ef8aed11b3fbd6ca301",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_prefix_lists_config.cfg",
+ "name": "tests/integration/targets/junos_routing_instances/tests/netconf/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bbb29c36dc361586ea1762fbb6f8ded0716e7046e0b3ab5022b3c96ba4b45dce",
+ "chksum_sha256": "e4083fb5493628e48734ba76d4cf99b1f4e7fe815a6aa18f740e6021310a1f3f",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_ospfv2.cfg",
+ "name": "tests/integration/targets/junos_routing_instances/tests/netconf/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0fb6b3eba75e5cf010f196a9f376f6d890508caa25726faeeec3cf0b8120579c",
+ "chksum_sha256": "2629804c535bb7e552f7d44b7ffced5fa494809e44aa0a016dd4bea636741c08",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_bgp_global.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7b3b18f683207cb7d272bbc509b50c37eda8b58dc6cfe4aa04978241a32c802b",
+ "name": "tests/integration/targets/junos_routing_instances/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_bgp_address_family_config.cfg",
+ "name": "tests/integration/targets/junos_routing_instances/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c0bf370e7a4fd2b80232065fd7c03cfc5ef7aaecc5597a7d8e6e45dda8301dee",
+ "chksum_sha256": "6859e775c6926fd41248bfce2e80a71c7e08cc626a5cf5882bbd5134e1e58e46",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_logging_global_config.cfg",
+ "name": "tests/integration/targets/junos_routing_instances/tasks/netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0536991827ef435cce6176c19a2fd1f906673459e231018172247fac6f606f7b",
+ "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "name": "tests/integration/targets/junos_user",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_ping_ping_10.10.10.10_count_2",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "45b8dcf26e3f693cbfd5e66a886f6c42c8427844e62cc3fee6fa02950c80e832",
+ "name": "tests/integration/targets/junos_user/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_ospf_interfaces.cfg",
+ "name": "tests/integration/targets/junos_user/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "50828852d511aafe1ec8580f427386ded914d7cfcd79fe6ccaadab5f8128164a",
+ "chksum_sha256": "58c4318f7d20aff7df7bc4267d1f9fe62a4333a9012420e84274b35d4adf1b26",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_config.json",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "38efed50de799e3f3a85e4609ee840ad8dd285d1e59d2c21d30dacbb136e85b7",
+ "name": "tests/integration/targets/junos_user/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/get_configuration_rpc_reply_set.txt",
+ "name": "tests/integration/targets/junos_user/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0b9e2ca1106615a162444ab130bdeb6c56f601e617060022b96ad5ff2311d0d6",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/show_chassis_hardware_xml.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d6d686902c059632720826594a665ebdda8cfe166ec082796ae56da11d64e421",
+ "name": "tests/integration/targets/junos_user/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_interfaces_config.xml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e0dcf81fecfea2443b931ea13585c90f86328910b71285add801bda7265c3636",
+ "name": "tests/integration/targets/junos_user/tests/netconf",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/get_configuration_rpc_reply_diff.txt",
+ "name": "tests/integration/targets/junos_user/tests/netconf/basic.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3c61cfce095ac967c024d72f88f3f6fb02d8597af464fe68aed4e19ee125fa0a",
+ "chksum_sha256": "e8e92d7542ad280130c12b8a8b2a964692a947cfbd81f71b79a72ea0a47824e8",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_ospfv2_config.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "71b084d4497ff84b165285a49320f353fc97f2839bcf47fcad05bd3b5e05b036",
+ "name": "tests/integration/targets/junos_user/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/get_configuration_rpc_reply.txt",
+ "name": "tests/integration/targets/junos_user/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c1794bf9ef01dea9904756da46036db8e8520e95c292a68bcf3e8545ef0c9f90",
+ "chksum_sha256": "e727033350980ea9df8bbfde6b874c51150f907f51fa8fc4cc8070e3f50ec5d3",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_ospf_interfaces_config.cfg",
+ "name": "tests/integration/targets/junos_user/tasks/netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b9f3fc1df4bee23098cf23bfa6a67d0c6fb9f1cae822426af13ad6c4268b3361",
+ "chksum_sha256": "1946facde8e5b023ffc633db3d6261d8de690c1fb2101af1214f8d4d55ce1f56",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_l2_interfaces.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "24c59086e1366073480715f57aacecc54e44c120e17b25b2f7402333aa1cb0ef",
+ "name": "tests/integration/targets/junos_smoke",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_security_policies_config.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1216c97a8cdee96ebcab47ca43769b6ed167880e85eef5e9ccb179ce19ccafd0",
+ "name": "tests/integration/targets/junos_smoke/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_ping_ping_10.10.10.12_count_5_do-not-fragment_rapid",
+ "name": "tests/integration/targets/junos_smoke/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "58cfa0cf75995cf12c2dc3bc72fc13182c13f1cbbab31543a07e8545350d19b1",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_l3_interfaces.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "98490f3b9ec1e6e82897e25048eec0a74e602fba1047832f132ab97b87e3e2fa",
+ "name": "tests/integration/targets/junos_smoke/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_ospfv3_config.cfg",
+ "name": "tests/integration/targets/junos_smoke/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b9f3fc1df4bee23098cf23bfa6a67d0c6fb9f1cae822426af13ad6c4268b3361",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_snmp_server_config.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ff3d690032a33fc60a78b722b81c3f2038df2cb1b8aa56d5b186c80bfecdd195",
+ "name": "tests/integration/targets/junos_smoke/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_ntp_global_config.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cf65e12feb7d404a9b0e0a999103bf037c07ed11709f676988d5debcbaadafbf",
+ "name": "tests/integration/targets/junos_smoke/tests/cli",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/show_version_text.txt",
+ "name": "tests/integration/targets/junos_smoke/tests/cli/reboot.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2a1956bb5615571aa71269bb65caae43c44f59430097b755eaee205ce60c4da8",
+ "chksum_sha256": "54db130663eff024eb5b3fb6ac61d79ffae1ded3c341a1062579ae1c63be4e11",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_security_policies_global_config.cfg",
+ "name": "tests/integration/targets/junos_smoke/tests/cli/caching.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e9462852c080047c4d22f2521a2915964b45d55848dbc2c348bf6238f1b4114b",
+ "chksum_sha256": "63d3d2578702ff3bc51e29d16b7b4e63ed28edbddda8627ba2fd65b29f07315e",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_bgp_address_family.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7b3b18f683207cb7d272bbc509b50c37eda8b58dc6cfe4aa04978241a32c802b",
+ "name": "tests/integration/targets/junos_smoke/tests/netconf",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_l2_interfaces_config.cfg",
+ "name": "tests/integration/targets/junos_smoke/tests/netconf/common_utils.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e0dcf81fecfea2443b931ea13585c90f86328910b71285add801bda7265c3636",
+ "chksum_sha256": "86f1d6186d9036ff2cda9b18be64f04264be2052476b9585b46f1cc18393299a",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/show_version_xml.txt",
+ "name": "tests/integration/targets/junos_smoke/tests/netconf/module_utils_junos.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "919747d67bc939991faa1a64441e9a22b997d240df74c0991e361776dc8ecaa2",
+ "chksum_sha256": "591380db5e46372be7cdbe63d11848b9cef38dd8e57da857aad9739025919641",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_config.xml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7f20565b1504913b40b5e6c3a181a184884847beaad0b5e9d153f4695acd6c8d",
+ "name": "tests/integration/targets/junos_smoke/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_ospfv3.cfg",
+ "name": "tests/integration/targets/junos_smoke/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4473a0f4634d65ecdf1d9ab0e02ad91ffc7a6ed9031abe91a0ef9e4e02aadd58",
+ "chksum_sha256": "1ed6aab865c43fdcad8b6871d5800e82ca311f8f3823e56bca3d06b9bf7ba94c",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_interfaces.cfg",
+ "name": "tests/integration/targets/junos_smoke/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "65df2d02ae1f7f5dca4d74f0ae59e12737cdf93eb7ea35de636b0d14ea9322c6",
+ "chksum_sha256": "7bfbffe2f1c1a542332fdcbc89d4a3854ff15259e01a6bafef86a83fae35e3c2",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_ping_ping_10.10.10.20_count_4",
+ "name": "tests/integration/targets/junos_smoke/tasks/netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bf73afa78e3abecd0fd0f9fcce47d0e8684deed25a54bccdcfce911a083e7c0c",
+ "chksum_sha256": "fc09c85d3d223c19ea63a3fae43eb5638f3b5e6651609cf4d321208639122cbd",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/show_chassis_routing-engine_xml.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a9818e113293701cc01971ed0c7edb733f81384d539c08d49af16b56356ead12",
+ "name": "tests/integration/targets/junos_ospfv3",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_vlans_config.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3b3800aac4bb8cb5e3e3d7e95fafdf870ad2bcff4507f9d4f763c8229d4dd4e3",
+ "name": "tests/integration/targets/junos_ospfv3/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_security_zones_config.cfg",
+ "name": "tests/integration/targets/junos_ospfv3/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "72a5d8773cfbf73e55a219ddd23fc03d5698af853088f5087cb9d3916a7e2743",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/junos_hostname_config.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "86436c245da27a6ddaf085a66679b98fcba33b0d5ef801652d8bde564c5f4417",
+ "name": "tests/integration/targets/junos_ospfv3/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/fixtures/get_configuration_rpc_reply_json.txt",
+ "name": "tests/integration/targets/junos_ospfv3/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1e77d8a4c829ca72a36c925ed12e7dcb6117ab7369f1f059b4fa9dedbea7f589",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/test_junos_rpc.py",
+ "name": "tests/integration/targets/junos_ospfv3/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_ospfv3/tests/netconf",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_ospfv3/tests/netconf/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e670798774f32d6efafa3a49802553e74792652b3b8b31ecef594c0415bcad80",
+ "chksum_sha256": "19b7947b6ab8252d1d76661d734eefeded6aaeb7d951aeffa0addce670aa4bd3",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/test_junos_prefix_lists.py",
+ "name": "tests/integration/targets/junos_ospfv3/tests/netconf/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "444602e7a299d6b905bfdb9704682185ee37c0d3b3cf8ca79fc33bf5b1f094db",
+ "chksum_sha256": "ce5f704892852d0f18b14dc4ee89678a1d4341668e44751b7b2d6b7db5d04e14",
"format": 1
},
{
- "name": "tests/unit/modules/network/junos/test_junos_config.py",
+ "name": "tests/integration/targets/junos_ospfv3/tests/netconf/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1773063d097955568b73d812bb8a7823a80051db27c2956ac3ff0eb8f51cf4ab",
+ "chksum_sha256": "58a66e5c8859a7cfe9748fc0e87cbc5d065357a9b8f240661b2f734eb288099f",
"format": 1
},
{
- "name": "tests/unit/modules/network/__init__.py",
+ "name": "tests/integration/targets/junos_ospfv3/tests/netconf/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "a885760267113e8d1431f886e7343dd134a8eb31f591c9ece9a30a9febfb31c5",
"format": 1
},
{
- "name": "tests/unit/compat",
+ "name": "tests/integration/targets/junos_ospfv3/tests/netconf/fixtures",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/compat/unittest.py",
+ "name": "tests/integration/targets/junos_ospfv3/tests/netconf/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "727203a3846be41893b78a4b77852a1658925e936fb19539551958a5d8e8fb81",
+ "chksum_sha256": "1d77e679fba773847ebcac2d2eb479c251beeaacdac14521dd6666ac539891a4",
"format": 1
},
{
- "name": "tests/unit/compat/__init__.py",
+ "name": "tests/integration/targets/junos_ospfv3/tests/netconf/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "f230ac640c63bd54e9ab49277ca63565f2940fc4a4ed7acab1d9c26708ff4235",
"format": 1
},
{
- "name": "tests/unit/compat/mock.py",
+ "name": "tests/integration/targets/junos_ospfv3/tests/netconf/_initial_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ad85c7a32b4c62ac4a75fbe82c0c973d5d20691b258ea7c64c4aa8901fe26ccf",
+ "chksum_sha256": "a504de6423c5338c5335fc35422b5bb0040370537b529008a363efe601aa16b6",
"format": 1
},
{
- "name": "tests/integration",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_ospfv3/tests/netconf/_reset_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "cb7b37b391d8a5a6d9e12999a355740df8805aa64ce189981b4ef4c658735470",
"format": 1
},
{
- "name": "tests/integration/targets",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_ospfv3/tests/netconf/overridden.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8421f06b4b592969a37a8fb0d739edeeb7d5b096030096ae8541a9d929787082",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv3",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_ospfv3/tests/netconf/merged.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6e462265ffe66572c162f4f28c563b3dfd4c0c23d915355e7cfee914a2308cca",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_ospfv3/tests/netconf/replaced.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "350496d406c1e1d55725df0ecb5fd30400275042de4daf41ae92cc70e380e334",
"format": 1
},
{
@@ -3193,185 +3424,213 @@
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv3/meta",
+ "name": "tests/integration/targets/junos_routing_options",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv3/meta/main.yaml",
+ "name": "tests/integration/targets/junos_routing_options/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_routing_options/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv3/defaults",
+ "name": "tests/integration/targets/junos_routing_options/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv3/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_routing_options/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "b0dad22bd982e1dc14740d32937c7c31ddf82f5fe6d1689a15fc723aa2fe5f91",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv3/tests",
+ "name": "tests/integration/targets/junos_routing_options/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv3/tests/netconf",
+ "name": "tests/integration/targets/junos_routing_options/meta/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_routing_options/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv3/tests/netconf/deleted.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f230ac640c63bd54e9ab49277ca63565f2940fc4a4ed7acab1d9c26708ff4235",
+ "name": "tests/integration/targets/junos_routing_options/tests/netconf",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv3/tests/netconf/gathered.yaml",
+ "name": "tests/integration/targets/junos_routing_options/tests/netconf/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "58a66e5c8859a7cfe9748fc0e87cbc5d065357a9b8f240661b2f734eb288099f",
+ "chksum_sha256": "140f095f42a3049193e72a297b0f320e4f3c9d9bf630fd555033db3cb796e90b",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv3/tests/netconf/empty_config.yaml",
+ "name": "tests/integration/targets/junos_routing_options/tests/netconf/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a885760267113e8d1431f886e7343dd134a8eb31f591c9ece9a30a9febfb31c5",
+ "chksum_sha256": "aeec20572a2337eb6920f08c1e683df42a2d77157b627cc3c702ae785f381d6e",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv3/tests/netconf/_initial_config.yaml",
+ "name": "tests/integration/targets/junos_routing_options/tests/netconf/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a504de6423c5338c5335fc35422b5bb0040370537b529008a363efe601aa16b6",
+ "chksum_sha256": "f691b0994a2a45d0cb98c0f6fe2b9e9970be59a4dc8e48297d425499e52d1ba4",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv3/tests/netconf/merged.yaml",
+ "name": "tests/integration/targets/junos_routing_options/tests/netconf/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6e462265ffe66572c162f4f28c563b3dfd4c0c23d915355e7cfee914a2308cca",
+ "chksum_sha256": "88a72f59e38cc345203ff46ac64edf209142a669b6775a94ed60408dbce4fae3",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv3/tests/netconf/overridden.yaml",
+ "name": "tests/integration/targets/junos_routing_options/tests/netconf/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8421f06b4b592969a37a8fb0d739edeeb7d5b096030096ae8541a9d929787082",
+ "chksum_sha256": "4f23a00ee4e2d649c926dfe56c6e601bf176145dafc88442dda848aa492d8797",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv3/tests/netconf/fixtures",
+ "name": "tests/integration/targets/junos_routing_options/tests/netconf/fixtures",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv3/tests/netconf/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/junos_routing_options/tests/netconf/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1d77e679fba773847ebcac2d2eb479c251beeaacdac14521dd6666ac539891a4",
+ "chksum_sha256": "aa310db3ac9c122a80e375582988ad5f7e3b27ee1ef2984a09e92db2826f4d1f",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv3/tests/netconf/replaced.yaml",
+ "name": "tests/integration/targets/junos_routing_options/tests/netconf/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "350496d406c1e1d55725df0ecb5fd30400275042de4daf41ae92cc70e380e334",
+ "chksum_sha256": "5afe0b0a0f964bbb1eacf828241f9d6880d4155e07dddebbc06cbab4fe1177be",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv3/tests/netconf/parsed.yaml",
+ "name": "tests/integration/targets/junos_routing_options/tests/netconf/rtt.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "19b7947b6ab8252d1d76661d734eefeded6aaeb7d951aeffa0addce670aa4bd3",
+ "chksum_sha256": "97ed698e3215b67ef24ac3aa69d44da18c193f9f02d3ea2a876ea637273cd02c",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv3/tests/netconf/_reset_config.yaml",
+ "name": "tests/integration/targets/junos_routing_options/tests/netconf/_reset_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cb7b37b391d8a5a6d9e12999a355740df8805aa64ce189981b4ef4c658735470",
+ "chksum_sha256": "feacd22c689c662edd50c17c3daf13276734c2aea867a7af21dbeb13a309a6e2",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv3/tests/netconf/rendered.yaml",
+ "name": "tests/integration/targets/junos_routing_options/tests/netconf/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ce5f704892852d0f18b14dc4ee89678a1d4341668e44751b7b2d6b7db5d04e14",
+ "chksum_sha256": "38c77427a98ffbc4a623dc01722e565c08754282a0a0eaf02e7dfe440badb6ef",
"format": 1
},
{
- "name": "tests/integration/targets/junos_static_routes",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_routing_options/tests/netconf/merged.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "33aaaf4d48243dbe9296e9e042cb27f360bee34a8587a1516ce0e8796e498fce",
"format": 1
},
{
- "name": "tests/integration/targets/junos_static_routes/tasks",
+ "name": "tests/integration/targets/junos_routing_options/tests/netconf/replaced.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b9eb04d768dfe49511a2c8588034ed0e5a60781148eaa462083fde53f558a501",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_routing_options/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_static_routes/tasks/main.yaml",
+ "name": "tests/integration/targets/junos_routing_options/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "6859e775c6926fd41248bfce2e80a71c7e08cc626a5cf5882bbd5134e1e58e46",
"format": 1
},
{
- "name": "tests/integration/targets/junos_static_routes/tasks/netconf.yaml",
+ "name": "tests/integration/targets/junos_routing_options/tasks/netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_static_routes/meta",
+ "name": "tests/integration/targets/junos_static_routes",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_static_routes/meta/main.yaml",
+ "name": "tests/integration/targets/junos_static_routes/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_static_routes/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "efb275d54a7c21fd007e1d1c8b10b65d148a9121af425a4e7fbd60abacd23fc8",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_static_routes/defaults",
+ "name": "tests/integration/targets/junos_static_routes/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_static_routes/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_static_routes/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "efb275d54a7c21fd007e1d1c8b10b65d148a9121af425a4e7fbd60abacd23fc8",
"format": 1
},
{
@@ -3389,10 +3648,10 @@
"format": 1
},
{
- "name": "tests/integration/targets/junos_static_routes/tests/netconf/_remove_config.yaml",
+ "name": "tests/integration/targets/junos_static_routes/tests/netconf/_base_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5171aa16ecd105acab742140d5bf420826bb08bcf99443a828654fc43aa6d85c",
+ "chksum_sha256": "bfa5d38b676c52b6303d08a88a4ee86a430b36fa79822eb251fda92224af9933",
"format": 1
},
{
@@ -3403,24 +3662,24 @@
"format": 1
},
{
- "name": "tests/integration/targets/junos_static_routes/tests/netconf/_base_config.yaml",
+ "name": "tests/integration/targets/junos_static_routes/tests/netconf/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bfa5d38b676c52b6303d08a88a4ee86a430b36fa79822eb251fda92224af9933",
+ "chksum_sha256": "5171aa16ecd105acab742140d5bf420826bb08bcf99443a828654fc43aa6d85c",
"format": 1
},
{
- "name": "tests/integration/targets/junos_static_routes/tests/netconf/merged.yaml",
+ "name": "tests/integration/targets/junos_static_routes/tests/netconf/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "66c6475bd4eee3d410773a8ce7967c9418330832db74cd3837caf59c1453f33a",
+ "chksum_sha256": "db7a3b1bfe392ac0508c34d9ac8f2703cfce6e40b18084df4174f2bbbaab5180",
"format": 1
},
{
- "name": "tests/integration/targets/junos_static_routes/tests/netconf/overridden.yaml",
+ "name": "tests/integration/targets/junos_static_routes/tests/netconf/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "db7a3b1bfe392ac0508c34d9ac8f2703cfce6e40b18084df4174f2bbbaab5180",
+ "chksum_sha256": "66c6475bd4eee3d410773a8ce7967c9418330832db74cd3837caf59c1453f33a",
"format": 1
},
{
@@ -3431,5547 +3690,5442 @@
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging_global",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_logging_global/tasks",
+ "name": "tests/integration/targets/junos_static_routes/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging_global/tasks/main.yaml",
+ "name": "tests/integration/targets/junos_static_routes/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4239ce4ad6fc58a529cc073139b7b2abbdba62ae32bfc234e309af398d365eb6",
+ "chksum_sha256": "6859e775c6926fd41248bfce2e80a71c7e08cc626a5cf5882bbd5134e1e58e46",
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging_global/tasks/netconf.yaml",
+ "name": "tests/integration/targets/junos_static_routes/tasks/netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging_global/meta",
+ "name": "tests/integration/targets/junos_acl_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging_global/meta/main.yml",
+ "name": "tests/integration/targets/junos_acl_interfaces/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_acl_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging_global/defaults",
+ "name": "tests/integration/targets/junos_acl_interfaces/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging_global/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_acl_interfaces/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging_global/tests",
+ "name": "tests/integration/targets/junos_acl_interfaces/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging_global/tests/netconf",
+ "name": "tests/integration/targets/junos_acl_interfaces/tests/netconf",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging_global/tests/netconf/deleted.yaml",
+ "name": "tests/integration/targets/junos_acl_interfaces/tests/netconf/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1fc1a701e79dff995f7c73be2b536802657e37759b52c424d86cc6a08049956a",
+ "chksum_sha256": "856be5720d341ecfe38ed73a6fc5b38bef58ba3cabda135a42df90fd65db649b",
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging_global/tests/netconf/gathered.yaml",
+ "name": "tests/integration/targets/junos_acl_interfaces/tests/netconf/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f562cdcf46e8914526dc833ea9dcd7853ce5f0889c860b253bf29a76d63e13ff",
+ "chksum_sha256": "91b36b428ce955f7929ec4195a256dccb2d2b5926093c9cfdfb969895c50786e",
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging_global/tests/netconf/empty_config.yaml",
+ "name": "tests/integration/targets/junos_acl_interfaces/tests/netconf/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9af6e95d468868608a8ee2ac5a736e05d0912abf883f3004305aab0b12a64dbf",
+ "chksum_sha256": "ef107c677fdfb30ff79d823577ee1c84890bd7886acb6fb2396107b99fbcab53",
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging_global/tests/netconf/_initial_config.yaml",
+ "name": "tests/integration/targets/junos_acl_interfaces/tests/netconf/_initial_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f3e5d31b5c95eeddd8db1b98e3d236b1845b57b8ec6325e7c72b58ed4f74b9d7",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_logging_global/tests/netconf/backups",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "47cd198cd9eb3a08e813c896b92cfc0eda48eb31e4b11a35b55a7b97a0eb8932",
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging_global/tests/netconf/backups/empty_config.yaml",
+ "name": "tests/integration/targets/junos_acl_interfaces/tests/netconf/_reset_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a199720ea8a377c143b7563572b60e1e5bb12f929695b914785cd436ccb89d4a",
+ "chksum_sha256": "1b74a6f4e78bc9098e835c4eaa579a97f4264f521bbb3e5c2fb1b30e956370c1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging_global/tests/netconf/merged.yaml",
+ "name": "tests/integration/targets/junos_acl_interfaces/tests/netconf/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2ced1cd369a59d60b9f2de48c0d3e6284d71a54821f3f6501106a2ad7e0e90f0",
+ "chksum_sha256": "4e8c520f54c6ce56d0da73b90650b12c638dc19db9ee6df206077bdd6b07a626",
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging_global/tests/netconf/overridden.yaml",
+ "name": "tests/integration/targets/junos_acl_interfaces/tests/netconf/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "326e85d7a20fce18191830f205ede5126f8e739e284bd9fbcc1dee1d311c9c34",
+ "chksum_sha256": "b0433b5d3c8b197deeb46826bc3d796bdecc84e7eb860984bbf654aa610c6e6b",
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging_global/tests/netconf/rtt.yml",
+ "name": "tests/integration/targets/junos_acl_interfaces/tests/netconf/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "34d2a9f5f1d5f2a942c6e963a493f71ba5404cf0f39bb6a6a549b956babf55c3",
+ "chksum_sha256": "382845484c54c164ed28ab7b0ec3ee53e12e7d5c15f449715d5aa50aa201372b",
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging_global/tests/netconf/fixtures",
+ "name": "tests/integration/targets/junos_acl_interfaces/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging_global/tests/netconf/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/junos_acl_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "610b72bbd1a2b52abebcad6740fe0e311eba9491d685a7132db0eb9ba367a205",
+ "chksum_sha256": "dedf802497c657594764c710abb69c6a2eb5bf58fc7d51282731973a56e85168",
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging_global/tests/netconf/replaced.yaml",
+ "name": "tests/integration/targets/junos_acl_interfaces/tasks/netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0d1cf41f011d78e8e4acb637d236eeec13f124dfa19a4426b91fcc5d2b938f5e",
+ "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging_global/tests/netconf/parsed.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "bd4bc36fdaf73489ea9f8b6ccadb9eed4444fb5a042f87b57c45d03ebfbccd2d",
+ "name": "tests/integration/targets/junos_rpc",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging_global/tests/netconf/_reset_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "076fe1eb3dc4643aeee762bbd4d9539893b4dd224deac32f9593f6ac93c2eddd",
+ "name": "tests/integration/targets/junos_rpc/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging_global/tests/netconf/rendered.yaml",
+ "name": "tests/integration/targets/junos_rpc/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2d7f42fa466e6c747d83a19b6f437295ad2d3a3aae822c5b87218ad38a939acc",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging_global/vars",
+ "name": "tests/integration/targets/junos_rpc/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging_global/vars/main.yaml",
+ "name": "tests/integration/targets/junos_rpc/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "65beace3c6c7aeebd3ba5c0fce3d511c1a854c59b787d7c484a3b47f765ef66d",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospf_interfaces",
+ "name": "tests/integration/targets/junos_rpc/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospf_interfaces/tasks",
+ "name": "tests/integration/targets/junos_rpc/tests/netconf",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospf_interfaces/tasks/main.yaml",
+ "name": "tests/integration/targets/junos_rpc/tests/netconf/rpc.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5faeba3c6c57e0ac48c1b15188434458eec4ad6520920210114d67e2a65aac57",
+ "chksum_sha256": "6dcf22486f6872bfad638a22b0bf0c9d3bd8014426f56b5336a1a54cde62a6a0",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospf_interfaces/tasks/netconf.yaml",
+ "name": "tests/integration/targets/junos_rpc/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_rpc/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
+ "chksum_sha256": "e727033350980ea9df8bbfde6b874c51150f907f51fa8fc4cc8070e3f50ec5d3",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospf_interfaces/meta",
+ "name": "tests/integration/targets/junos_rpc/tasks/netconf.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1946facde8e5b023ffc633db3d6261d8de690c1fb2101af1214f8d4d55ce1f56",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_bgp_address_family",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospf_interfaces/meta/main.yaml",
+ "name": "tests/integration/targets/junos_bgp_address_family/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_bgp_address_family/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospf_interfaces/defaults",
+ "name": "tests/integration/targets/junos_bgp_address_family/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospf_interfaces/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_bgp_address_family/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospf_interfaces/tests",
+ "name": "tests/integration/targets/junos_bgp_address_family/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospf_interfaces/tests/netconf",
+ "name": "tests/integration/targets/junos_bgp_address_family/tests/netconf",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospf_interfaces/tests/netconf/deleted.yaml",
+ "name": "tests/integration/targets/junos_bgp_address_family/tests/netconf/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "847f8aba20c0bcaf2784b4838a5a5e7ecdf1b796e81534aff0bffc84da5ef14e",
+ "chksum_sha256": "38b76b973ae8e0c22e1c02fbd879d4924a8ddce3c54671353956c5aaacf59531",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospf_interfaces/tests/netconf/gathered.yaml",
+ "name": "tests/integration/targets/junos_bgp_address_family/tests/netconf/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d638bd2d4b3aeb159dae307c1deadf8ceb7d1f750beda0f59aca094c4873924b",
+ "chksum_sha256": "cb5ceb89fa49b884da83854ef39519368b95df370bf98871b10d6ea9403f55df",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospf_interfaces/tests/netconf/empty_config.yaml",
+ "name": "tests/integration/targets/junos_bgp_address_family/tests/netconf/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "97384a43d4050a4fcd2e7d6bc07b458ac7123a090a225decd7a4563d9aba491a",
+ "chksum_sha256": "fdea66c1005edd57bc77c5e95dc0d4db878e448ecaa2d766efdcc45f09fe8533",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospf_interfaces/tests/netconf/merged_update.yaml",
+ "name": "tests/integration/targets/junos_bgp_address_family/tests/netconf/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "92c2ca40e73c8e2fa9addbe09f6a07743a7434233b046d5780684bf21e2b3f5a",
+ "chksum_sha256": "f03982c9fa9c148a3bce04ab16a14073564d6b96fb0dc9d80a4280d44bae67e6",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospf_interfaces/tests/netconf/_initial_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a4c7314dd0a394dfe668ed11858428df5b2c29b573ce7cda69c3328a266a1419",
+ "name": "tests/integration/targets/junos_bgp_address_family/tests/netconf/fixtures",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospf_interfaces/tests/netconf/merged.yaml",
+ "name": "tests/integration/targets/junos_bgp_address_family/tests/netconf/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "89d7df715e2566cbb2623be0dae95dd17499fa0bb60ac266e692b327441e1fca",
+ "chksum_sha256": "21f4f80f8a632bb05e189b506b3dd4ee2c52927fd9cb4023d5b1d2a307044983",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospf_interfaces/tests/netconf/overridden.yaml",
+ "name": "tests/integration/targets/junos_bgp_address_family/tests/netconf/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "24468c08de78c5021ba88a104de643df2e29ef6057a7071a9f5df57fe6de9898",
+ "chksum_sha256": "70bf59e2250beff1ce0bc112e7a8c542b7f6182bf0e9f47fbbda45da3ec06de5",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospf_interfaces/tests/netconf/fixtures",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_bgp_address_family/tests/netconf/_reset_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0017fbbaa15229f0e59e1565894ec6236a9b6c38a0791822e83a0176d133559e",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospf_interfaces/tests/netconf/fixtures/parse_ospf_router_id.cfg",
+ "name": "tests/integration/targets/junos_bgp_address_family/tests/netconf/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a0460d8722acf4ccb04f2421ea81f55174132aec6b6f5aff0f3164a8378d7462",
+ "chksum_sha256": "5608ca62c28b3bf93f65e7eaad6130bb108162210583bf0538a6dbf212b8e2ff",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospf_interfaces/tests/netconf/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/junos_bgp_address_family/tests/netconf/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f60999fbccc0af10279afdf8e6f48d83e58d392e0b7c2559e11747d039b261ee",
+ "chksum_sha256": "c59df9ef3ff42cfd3bdd470925c0a3e1f8fdbead2dc6e2d201e46a2aa827d64a",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospf_interfaces/tests/netconf/replaced.yaml",
+ "name": "tests/integration/targets/junos_bgp_address_family/tests/netconf/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d2a0a5e986d21f4febfc5d62bf68182848d907d8e4fa5dce4ac84ce608ddb5ce",
+ "chksum_sha256": "4cea93e925dd207634a39d7db89f41b3226361b684cd4e73907528b76b2de868",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospf_interfaces/tests/netconf/parsed.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "fe59572095f90670742714b59e6e2927e7586519f509e1f47ab61cff0f77c894",
+ "name": "tests/integration/targets/junos_bgp_address_family/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospf_interfaces/tests/netconf/_reset_config.yaml",
+ "name": "tests/integration/targets/junos_bgp_address_family/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b8723cfc473ca01e7be478bd87f74df0b993c1fd59a23faa21f75e08e63b7299",
+ "chksum_sha256": "6859e775c6926fd41248bfce2e80a71c7e08cc626a5cf5882bbd5134e1e58e46",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospf_interfaces/tests/netconf/rendered.yaml",
+ "name": "tests/integration/targets/junos_bgp_address_family/tasks/netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "768de6cab48ef7da91e3a62d9c1b220e11ebec0a87edc69c0f5434d518ced61c",
+ "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_facts",
+ "name": "tests/integration/targets/junos_security_policies",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_facts/tasks",
+ "name": "tests/integration/targets/junos_security_policies/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_facts/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e727033350980ea9df8bbfde6b874c51150f907f51fa8fc4cc8070e3f50ec5d3",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_facts/tasks/netconf.yaml",
+ "name": "tests/integration/targets/junos_security_policies/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be90db2aa35bf39ec0fc02a996e8d5e40b83b0917dab8aa2339a1d22ed5cad0e",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_facts/meta",
+ "name": "tests/integration/targets/junos_security_policies/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_facts/meta/main.yml",
+ "name": "tests/integration/targets/junos_security_policies/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
+ "chksum_sha256": "4deaf51b2f16c99c7681725fb943e6aebbd1148a35a640be0ab3eb755840ba3a",
"format": 1
},
{
- "name": "tests/integration/targets/junos_facts/defaults",
+ "name": "tests/integration/targets/junos_security_policies/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_facts/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_security_policies/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
"format": 1
},
{
- "name": "tests/integration/targets/junos_facts/tests",
+ "name": "tests/integration/targets/junos_security_policies/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_facts/tests/netconf",
+ "name": "tests/integration/targets/junos_security_policies/tests/netconf",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_facts/tests/netconf/facts.yaml",
+ "name": "tests/integration/targets/junos_security_policies/tests/netconf/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9c4d7fd03f0a950b13ed257fd81af007019fa35f6b8e088b83ebc8195b5ef0a3",
+ "chksum_sha256": "016771aea305560bd8dd151b5c956fc76a005fb72cb9499de0c379c194d1a704",
"format": 1
},
{
- "name": "tests/integration/targets/junos_rpc",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_security_policies/tests/netconf/_populate_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f28b62ace16039ab3d1a158658ad0eee2a5aa1b60759cf1f61e6f2b1257254df",
"format": 1
},
{
- "name": "tests/integration/targets/junos_rpc/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_security_policies/tests/netconf/rendered.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e14fe35238c7a90cbc7404ad0f44596371a2eebaaa1a212d64f6e34cbffb21eb",
"format": 1
},
{
- "name": "tests/integration/targets/junos_rpc/tasks/main.yaml",
+ "name": "tests/integration/targets/junos_security_policies/tests/netconf/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e727033350980ea9df8bbfde6b874c51150f907f51fa8fc4cc8070e3f50ec5d3",
+ "chksum_sha256": "e26d1bb898a8b80c5a4409fa8347b4686d22d68995c386b88b1acea58052b98b",
"format": 1
},
{
- "name": "tests/integration/targets/junos_rpc/tasks/netconf.yaml",
+ "name": "tests/integration/targets/junos_security_policies/tests/netconf/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1946facde8e5b023ffc633db3d6261d8de690c1fb2101af1214f8d4d55ce1f56",
+ "chksum_sha256": "3cb5abb3511da59cc841edf9b3120380ace3f373903d49a8df724d34940aefce",
"format": 1
},
{
- "name": "tests/integration/targets/junos_rpc/meta",
+ "name": "tests/integration/targets/junos_security_policies/tests/netconf/fixtures",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_rpc/meta/main.yml",
+ "name": "tests/integration/targets/junos_security_policies/tests/netconf/fixtures/parsed.xml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
+ "chksum_sha256": "c675cea3f99d7bc6a5a9416e9ba20e6745aa981968cab970fb378e6ee37ce5aa",
"format": 1
},
{
- "name": "tests/integration/targets/junos_rpc/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_security_policies/tests/netconf/deleted.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "39cd5df63bd55f3ddf784e611627b54029596c80fc25189fd00499a82de7d3ba",
"format": 1
},
{
- "name": "tests/integration/targets/junos_rpc/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_security_policies/tests/netconf/rtt.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
+ "chksum_sha256": "5ce4ffcc6b729daec418088a402e4625e7ac2b65af7260c79adb6f11c8ed2ec5",
"format": 1
},
{
- "name": "tests/integration/targets/junos_rpc/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_security_policies/tests/netconf/_initial_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "63cb2d305f3b2b8375cfe110ccc027d605eb168ba862699a3b3a544b8d87296f",
"format": 1
},
{
- "name": "tests/integration/targets/junos_rpc/tests/netconf",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_security_policies/tests/netconf/_reset_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "904c7f297382fe7a7994ee762c1baa400d1350c1b305e6969014d151de1d1a9a",
"format": 1
},
{
- "name": "tests/integration/targets/junos_rpc/tests/netconf/rpc.yaml",
+ "name": "tests/integration/targets/junos_security_policies/tests/netconf/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6dcf22486f6872bfad638a22b0bf0c9d3bd8014426f56b5336a1a54cde62a6a0",
+ "chksum_sha256": "76982131c022074bcf992f16061721685fa1136d527793ff18ff6470b0c1fb93",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv2",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_security_policies/tests/netconf/merged.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a7b3535922126dceed45fd5938029e83cd6184a6d2385e22e5ebc6bf5cd41f75",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv2/tasks",
+ "name": "tests/integration/targets/junos_security_policies/tests/netconf/replaced.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ecf1c66717a28d45cca3e598f7209834214cabedd726c3471116221f2e11f638",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_security_policies/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv2/tasks/main.yaml",
+ "name": "tests/integration/targets/junos_security_policies/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5faeba3c6c57e0ac48c1b15188434458eec4ad6520920210114d67e2a65aac57",
+ "chksum_sha256": "6859e775c6926fd41248bfce2e80a71c7e08cc626a5cf5882bbd5134e1e58e46",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv2/tasks/netconf.yaml",
+ "name": "tests/integration/targets/junos_security_policies/tasks/netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv2/meta",
+ "name": "tests/integration/targets/junos_l2_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv2/meta/main.yaml",
+ "name": "tests/integration/targets/junos_l2_interfaces/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_l2_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv2/defaults",
+ "name": "tests/integration/targets/junos_l2_interfaces/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv2/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_l2_interfaces/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv2/tests",
+ "name": "tests/integration/targets/junos_l2_interfaces/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv2/tests/netconf",
+ "name": "tests/integration/targets/junos_l2_interfaces/tests/netconf",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv2/tests/netconf/deleted.yaml",
+ "name": "tests/integration/targets/junos_l2_interfaces/tests/netconf/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "17825b257c688893464a0094b309efd2e078fb8157f8477f5328a1ab6c5fbd97",
+ "chksum_sha256": "b373b23c8385fde76eadd95edcfb45d2fe71f8b3e3b9b6554b311163d949ffc3",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv2/tests/netconf/gathered.yaml",
+ "name": "tests/integration/targets/junos_l2_interfaces/tests/netconf/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c5a6cb013c7e5d0568303d0ee58bcd26dcd3448f3b06dd34c9d599c34bd3f36a",
+ "chksum_sha256": "19eb1cb8c4c2f40071b029eb62a7312e6b3273c7948a438b1b35ce780c32475b",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv2/tests/netconf/empty_config.yaml",
+ "name": "tests/integration/targets/junos_l2_interfaces/tests/netconf/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9a4b7443f9567b41727a5d357e31f0495ef92d9b8d3d928f8567f8b2894f921a",
+ "chksum_sha256": "af33aa7223a48cab620bb31a6d1dfad55ea995fee1851de39926776775837cbc",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv2/tests/netconf/_initial_config.yaml",
+ "name": "tests/integration/targets/junos_l2_interfaces/tests/netconf/fixtures",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_l2_interfaces/tests/netconf/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "973f85046cde058aa91399f01aafb04c042c52c802538639c1770c55cecf0c8d",
+ "chksum_sha256": "e0dcf81fecfea2443b931ea13585c90f86328910b71285add801bda7265c3636",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv2/tests/netconf/rtt.yaml",
+ "name": "tests/integration/targets/junos_l2_interfaces/tests/netconf/_base_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f078d10b5fe4ca0a4caa44b968c5a9aead11e220f22ffe5d00845d02c8f881da",
+ "chksum_sha256": "c17ed7273352e5ae3a01737054081b89f5daeef876d1c5fac0db5b2ecb8950e6",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv2/tests/netconf/merged.yaml",
+ "name": "tests/integration/targets/junos_l2_interfaces/tests/netconf/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "82ecb5453d4c76f99446240c9c1fa2d7f5fc45304d559325184bce03ba0f64a6",
+ "chksum_sha256": "bac996860ada5e921e149d186b95533139cbfaac0cac8424783899b2179a8d24",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv2/tests/netconf/overridden.yaml",
+ "name": "tests/integration/targets/junos_l2_interfaces/tests/netconf/rtt.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cc2334e44cc814227f9f8c50446f4e005363b94642fd37455b8f902dde65ab24",
+ "chksum_sha256": "537973ad6900cd3468e46654ad124dc5ef17c11a13c2a18e391d8e15b44e752f",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv2/tests/netconf/fixtures",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_l2_interfaces/tests/netconf/_remove_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2c23e7e54ae73e30c371d44aa84bd5e4e3e095b1b373afc52d4e7ec6f3bc258b",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv2/tests/netconf/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/junos_l2_interfaces/tests/netconf/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a690256e56d841b0e69010998ef63e9816121db1ac2a994f8800578e206c9fa2",
+ "chksum_sha256": "0504fd9e84a3385d66e31ef84a8c7ffb8ddb525819593d5248a77947d9c78044",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv2/tests/netconf/replaced.yaml",
+ "name": "tests/integration/targets/junos_l2_interfaces/tests/netconf/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f769f1442dfcb26eeefc4a20808e773eb1d5db8b0ce698e5af0f0d43405f7e28",
+ "chksum_sha256": "13024460e326b04fd6fe6a7825e9a46b8bc6ce9819ba6cf5a846a341d58a3507",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv2/tests/netconf/parsed.yaml",
+ "name": "tests/integration/targets/junos_l2_interfaces/tests/netconf/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "24110506dce6a1acf10ba1ee0f7991f69fb454c9c464058dc6660085aeaac754",
+ "chksum_sha256": "6edd256af87afe61f3caa203f0d37301b58de62653a331fa388dde0a69eb6cc3",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv2/tests/netconf/_reset_config.yaml",
+ "name": "tests/integration/targets/junos_l2_interfaces/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_l2_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aa0d973fb111eb73bcbe02116f395956d21c2fd6a4c8a64cba5b53feb156a3dd",
+ "chksum_sha256": "6859e775c6926fd41248bfce2e80a71c7e08cc626a5cf5882bbd5134e1e58e46",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ospfv2/tests/netconf/rendered.yaml",
+ "name": "tests/integration/targets/junos_l2_interfaces/tasks/netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7442893271080723d682b5872b45909e0dd7832305a9ff3c5c9ba5edba5cd857",
+ "chksum_sha256": "45637e547498ff1d584b43d64cdb545283055dd51e7cbce649a1b344a5566cb0",
"format": 1
},
{
- "name": "tests/integration/targets/junos_command",
+ "name": "tests/integration/targets/junos_config",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tasks",
+ "name": "tests/integration/targets/junos_config/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tasks/netconf_json.yaml",
+ "name": "tests/integration/targets/junos_config/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "71516dbb78c53604148415ad5626c34ee3030c82728bc9f3c2a032851648e339",
+ "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "612a33b6753baaf0154b2a0690b744deae539de705558c4a56d317ccd2d8b854",
+ "name": "tests/integration/targets/junos_config/templates",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tasks/netconf_xml.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4c722c2d0b825c5c6e8d522640ecdc98b26084946a59de82cf0bfff07dac1fa7",
+ "name": "tests/integration/targets/junos_config/templates/basic",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tasks/netconf_text.yaml",
+ "name": "tests/integration/targets/junos_config/templates/basic/config.xml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "274fd845f69a5501756cb86bbd41088eec2a0cbc69250153f587976727e1011f",
+ "chksum_sha256": "4d6334450d173802f80b0c55ea41fa8e094afeabfe76c14d54c036b8d48a9eee",
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tasks/cli.yaml",
+ "name": "tests/integration/targets/junos_config/templates/basic/config.j2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8bf3d8209693784fd02f0c9f430519c3ee9d27d90c5aef93fb06efe0541cf77f",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_command/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "7f984e7d5384674518e1bd994d53139ad2a3d56cc8d823c078c00a1e65c94cda",
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/meta/main.yml",
+ "name": "tests/integration/targets/junos_config/templates/basic/config.set",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
+ "chksum_sha256": "e55d8c57f22746493a68395134a4c07e361bf83a7f5b21a95905ef7ee40cbda1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/defaults",
+ "name": "tests/integration/targets/junos_config/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_config/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tests",
+ "name": "tests/integration/targets/junos_config/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tests/cli",
+ "name": "tests/integration/targets/junos_config/tests/redirection",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tests/cli/cli_commmand.yaml",
+ "name": "tests/integration/targets/junos_config/tests/redirection/shortname.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5266fa0edc63b6ca83fbb7074bc8203ca4eefe09492e44bba140eb2cd6d1aefc",
+ "chksum_sha256": "6b1f7d41f6377e7456ac464eef4de5bc86a5dbef030d57b77b361c73471b91b3",
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tests/netconf_json",
+ "name": "tests/integration/targets/junos_config/tests/cli_config",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tests/netconf_json/lessthan.yaml",
+ "name": "tests/integration/targets/junos_config/tests/cli_config/cli_backup.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "46f3b7e08ea7e59fd6d233657dd93eda7ef4730f8057ea0c8f2e53d278f83ad9",
+ "chksum_sha256": "1cfa70ec55d445903975a372167840d1f175641604c847f8741acf28ee8e378b",
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tests/netconf_json/greaterthanorequal.yaml",
+ "name": "tests/integration/targets/junos_config/tests/cli_config/cli_replace.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0ba61dab7a4acd479e39df8039d99d80242f5d6cdd90f85b2e1ab9208fb17743",
+ "chksum_sha256": "b1a748515ac3e7ede4724251b01372dcc5b4a9676a417aaf744fdbfb1e597994",
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tests/netconf_json/contains.yaml",
+ "name": "tests/integration/targets/junos_config/tests/cli_config/cli_basic.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "71a375a286b4f440c50a9c6c82c36045ca7ecec6a29816386559b792ff4d066b",
+ "chksum_sha256": "eba80fbddca0baa46c7439ee80946990cd91e55da912b9571ae6559288b6d15c",
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tests/netconf_json/equal.yaml",
+ "name": "tests/integration/targets/junos_config/tests/netconf",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_config/tests/netconf/bad_action.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "44f8cdd9fde78c55275e2339c33bb12dddfce2ca2d5f0f2e0bd59907beae8a3a",
+ "chksum_sha256": "1a8a59bf146aaa8353f85ecae0b178f16409782aa376f42ff22c7707ec351b6c",
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tests/netconf_json/bad_operator.yaml",
+ "name": "tests/integration/targets/junos_config/tests/netconf/invalid.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b5fd958f25016372728899436773ee543050da327e509f090ba88ca4636c0d2d",
+ "chksum_sha256": "76594cda9479fe42fcc322308d028e273d33d8f54f4be9ae59d47fbf2b64c611",
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tests/netconf_json/lessthanorequal.yaml",
+ "name": "tests/integration/targets/junos_config/tests/netconf/src_invalid.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "991acfafd4fb6ca665f33465692ad8b12d01bd6526b5e9f2b1880a3ce3cfbcbe",
+ "chksum_sha256": "c2d40a306a95cbd2ec37c729bba258c2a7acdded7eac74eb3fc18f5c78e83e60",
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tests/netconf_json/output.yaml",
+ "name": "tests/integration/targets/junos_config/tests/netconf/single.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1ff281d2c6a00c5a8966af7c146013d28215b96e501ce445d99e12fc204aa313",
+ "chksum_sha256": "8a764839bae6345fe760c187666e16afa24c8ef0e1d2394976516abe824c041a",
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tests/netconf_json/greaterthan.yaml",
+ "name": "tests/integration/targets/junos_config/tests/netconf/backup.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aa183d6e2138a9213b5e2522db349163d9da96ad375fc17c9ad11bede8c7fce4",
+ "chksum_sha256": "fc13146756466fb242b2846c094c66512bef612525d04b84ec383e2ae76b58f8",
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tests/netconf_json/notequal.yaml",
+ "name": "tests/integration/targets/junos_config/tests/netconf/multiple.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6a3de2915a9be18c95ba8bd1053dddc9868f43ce7f85cb15518f449b26974ed9",
+ "chksum_sha256": "a101529e9f690d667375cbc2c1af3c165b84bbf028a57e32e656335bc6fd8b48",
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tests/netconf_text",
+ "name": "tests/integration/targets/junos_config/tests/netconf/src_basic.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "48b84bd53ef11400ce442cba8558667a982dd8e84497e3e23ffa7791b1c342dd",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_config/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tests/netconf_text/invalid.yaml",
+ "name": "tests/integration/targets/junos_config/tasks/redirection.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3e93db6f55ae56facb4e9d839a4c3cf32e2501c0eb96e5e31f1683bef67e21f",
+ "chksum_sha256": "fc890d4d4d13191bbbbe07f1edf38861cd83759d33e4456fdacfc21acce63db3",
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tests/netconf_text/contains.yaml",
+ "name": "tests/integration/targets/junos_config/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "36ca486cc8cdded6e343c1f81b51d4a9749a855ad43c890bfa0784357eaa7d4d",
+ "chksum_sha256": "fba795a2f2f8c6b449e057d2c14be5aa9ea9e94bfc19aa628dddb26130e7911f",
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tests/netconf_text/bad_operator.yaml",
+ "name": "tests/integration/targets/junos_config/tasks/cli_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fb8f6aad9b9a23d02a7883bb702bad2ba5a4eb2124412357c186da75147632f7",
+ "chksum_sha256": "898ac0c25c8756735dba3ece1d68f589e01c1351ddae4f4d045873fe65c9f064",
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tests/netconf_text/output.yaml",
+ "name": "tests/integration/targets/junos_config/tasks/netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c13ff65171668de3ae66eae7ab6f2cd1319440eb88a02330b5efc8ba41bcddeb",
+ "chksum_sha256": "be90db2aa35bf39ec0fc02a996e8d5e40b83b0917dab8aa2339a1d22ed5cad0e",
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tests/netconf_text/timeout.yaml",
+ "name": "tests/integration/targets/junos_vlans",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_vlans/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_vlans/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2a9576208f842de6adbae341991bc32516d8ceef291d14bcdf2221d7769c87ca",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tests/netconf_text/no_config.yaml",
+ "name": "tests/integration/targets/junos_vlans/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_vlans/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4656bc0775ed558f79cb2db08097be7a3fe6fe119b69bf0e59236165a4bd51e2",
+ "chksum_sha256": "efb275d54a7c21fd007e1d1c8b10b65d148a9121af425a4e7fbd60abacd23fc8",
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tests/netconf_xml",
+ "name": "tests/integration/targets/junos_vlans/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tests/netconf_xml/lessthan.yaml",
+ "name": "tests/integration/targets/junos_vlans/tests/netconf",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_vlans/tests/netconf/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7ad0acba5ab78a50a2fc805c83c96b6e2a9c482c9981f66692654df0c7a4305d",
+ "chksum_sha256": "8c4c751a8589f2f8b9398d2f308546c9fd6f6786945135cafe407f05a7d6a551",
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tests/netconf_xml/invalid.yaml",
+ "name": "tests/integration/targets/junos_vlans/tests/netconf/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f5fd5a9a1d9d45b784d9acec4738d7ba8476d9b19f6226796b9e819b5cecba88",
+ "chksum_sha256": "df538e025fc1c99a5bcd71a5fa94ef936be10c15b8cb69ee3eacc97c3ec1d526",
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tests/netconf_xml/greaterthanorequal.yaml",
+ "name": "tests/integration/targets/junos_vlans/tests/netconf/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8ddb628e09f70a9736acacf44235afb4e35b18d56bc8efbbe6d0f8b200ce03a5",
+ "chksum_sha256": "640ec1521d32739f67366042c0ec200638ed1b81603b55af0fd7300a7a6ad9b0",
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tests/netconf_xml/contains.yaml",
+ "name": "tests/integration/targets/junos_vlans/tests/netconf/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9ba38e35af89df460e59da5f49f3e326f4e59b095b08827478bd6529b428b0e8",
+ "chksum_sha256": "ae5ea725cc0a012e0c98b0a0e9d3d172dd8bb364f2e50779c4e6876b2e61c6bc",
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tests/netconf_xml/equal.yaml",
+ "name": "tests/integration/targets/junos_vlans/tests/netconf/fixtures",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_vlans/tests/netconf/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "27cf24898299e694a84f6984d1e94b61c859b565868803d4891450e79dabc09d",
+ "chksum_sha256": "3baba00d1d6d1dadb4b5976f47607540d8771ea4f07dcdcee03f5e376dd61165",
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tests/netconf_xml/bad_operator.yaml",
+ "name": "tests/integration/targets/junos_vlans/tests/netconf/_base_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "66a36b766c06b4b70d12b42a83fb66740b0a82288cc9b71604daee36a158cd96",
+ "chksum_sha256": "5d3cc2b3afe3dc0dadeea0b369c6745302fbbb6ada04c3defb870fea734f2d7b",
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tests/netconf_xml/lessthanorequal.yaml",
+ "name": "tests/integration/targets/junos_vlans/tests/netconf/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "77b6fdaa510c5b4d2829d3cba8a685b1b510f1f4dbf9b2adadec7ac5f1de247d",
+ "chksum_sha256": "217ad5b6e68a2d1cfdef9b4841dc5f91714a5034424265409be1ca7c7546c9a7",
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tests/netconf_xml/output.yaml",
+ "name": "tests/integration/targets/junos_vlans/tests/netconf/rtt.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c9ebd6b3029527e75e68e93f4708ed227221406982dd3908fb0ceb37bf96142f",
+ "chksum_sha256": "cfff19b900dd791ca391b9fd18742fc3c355acfa6d00810d24214ac0f6bfc871",
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tests/netconf_xml/greaterthan.yaml",
+ "name": "tests/integration/targets/junos_vlans/tests/netconf/_initial_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "22850c6970343bb05f625f546b1f92a6deb8756549234f11056405077e43f953",
+ "chksum_sha256": "f2bf894f4956d79da86103eab885a01457f893317ded8b0cf5f2cd0f63ab2239",
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tests/netconf_xml/timeout.yaml",
+ "name": "tests/integration/targets/junos_vlans/tests/netconf/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cdca9d6014c8b58811033e57029c08288af780cb15957fde32b40019868cebd9",
+ "chksum_sha256": "771b5ef527b2dc79fd79336d9485837675f5f6cf429434fc27943f49a7e164ee",
"format": 1
},
{
- "name": "tests/integration/targets/junos_command/tests/netconf_xml/notequal.yaml",
+ "name": "tests/integration/targets/junos_vlans/tests/netconf/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0a2cefdd4e1e0b7deb888b200e6dfbe0dc1c1e2288b3e9266ac0443b6f6aac09",
+ "chksum_sha256": "5ea25501651a613ba680c4da9b6a018d85408f3bbe1290d9c79360ad041d0ac0",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp_interfaces",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_vlans/tests/netconf/merged.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4fb4c83265fed002fe9ec78794e29394b3c567bdaf8df25da466ea56ad380bd2",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp_interfaces/tasks",
+ "name": "tests/integration/targets/junos_vlans/tests/netconf/replaced.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "63f819af50f638193f92ae6d4550e1db2ecc3e7f80eb2beade2288944c607988",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_vlans/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp_interfaces/tasks/main.yaml",
+ "name": "tests/integration/targets/junos_vlans/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "da661e43be2450ce0a58c2d1bd37b7670c88e33fba0da29cd410c6f23e189b9f",
+ "chksum_sha256": "6859e775c6926fd41248bfce2e80a71c7e08cc626a5cf5882bbd5134e1e58e46",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp_interfaces/tasks/netconf.yaml",
+ "name": "tests/integration/targets/junos_vlans/tasks/netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp_interfaces/meta",
+ "name": "tests/integration/targets/junos_command",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp_interfaces/meta/main.yaml",
+ "name": "tests/integration/targets/junos_command/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_command/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "efb275d54a7c21fd007e1d1c8b10b65d148a9121af425a4e7fbd60abacd23fc8",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp_interfaces/defaults",
+ "name": "tests/integration/targets/junos_command/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp_interfaces/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_command/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp_interfaces/tests",
+ "name": "tests/integration/targets/junos_command/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp_interfaces/tests/netconf",
+ "name": "tests/integration/targets/junos_command/tests/netconf_text",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp_interfaces/tests/netconf/_remove_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cd919eaf78c0d5b2990f067ae16f1402f344ace9925c189958f7067884345d09",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_lacp_interfaces/tests/netconf/deleted.yaml",
+ "name": "tests/integration/targets/junos_command/tests/netconf_text/invalid.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d1add93a918bfef3d70aef062c3aae94a47d1b3716a74b89358e966283c08ccf",
+ "chksum_sha256": "e3e93db6f55ae56facb4e9d839a4c3cf32e2501c0eb96e5e31f1683bef67e21f",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp_interfaces/tests/netconf/gathered.yaml",
+ "name": "tests/integration/targets/junos_command/tests/netconf_text/timeout.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1215e9671a99210505a60d59ba0f148a8ec0fa67d333f82d3ec0fb7d8d872dcb",
+ "chksum_sha256": "2a9576208f842de6adbae341991bc32516d8ceef291d14bcdf2221d7769c87ca",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp_interfaces/tests/netconf/_base_config.yaml",
+ "name": "tests/integration/targets/junos_command/tests/netconf_text/no_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7782df6c4b604977c0c7f281092fbf10cbc91720007ef8e67dba22003450d145",
+ "chksum_sha256": "4656bc0775ed558f79cb2db08097be7a3fe6fe119b69bf0e59236165a4bd51e2",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp_interfaces/tests/netconf/rtt.yaml",
+ "name": "tests/integration/targets/junos_command/tests/netconf_text/bad_operator.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "498586a44d564daabbc39fc40cb7d8a4469f5882406a8ab46dc065412556c947",
+ "chksum_sha256": "fb8f6aad9b9a23d02a7883bb702bad2ba5a4eb2124412357c186da75147632f7",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp_interfaces/tests/netconf/merged.yaml",
+ "name": "tests/integration/targets/junos_command/tests/netconf_text/output.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "35ee38eac192f14a4904e7a0255a696112a831ecdf2a5c24f74a097f4500252c",
+ "chksum_sha256": "c13ff65171668de3ae66eae7ab6f2cd1319440eb88a02330b5efc8ba41bcddeb",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp_interfaces/tests/netconf/overridden.yml",
+ "name": "tests/integration/targets/junos_command/tests/netconf_text/contains.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0d53434db13dd5c50d5a7cd84e3403b617f4c551b6aa7f51e298d0385de30133",
+ "chksum_sha256": "36ca486cc8cdded6e343c1f81b51d4a9749a855ad43c890bfa0784357eaa7d4d",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp_interfaces/tests/netconf/fixtures",
+ "name": "tests/integration/targets/junos_command/tests/netconf_json",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp_interfaces/tests/netconf/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/junos_command/tests/netconf_json/notequal.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "77112338be093f7a03c25fd8749011e7ad7de2066542b44c09f291405a76da00",
+ "chksum_sha256": "6a3de2915a9be18c95ba8bd1053dddc9868f43ce7f85cb15518f449b26974ed9",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp_interfaces/tests/netconf/replaced.yaml",
+ "name": "tests/integration/targets/junos_command/tests/netconf_json/equal.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9e01243ac9906911f80837437215ddaaa5f2a25167bf042048a974f0b209500f",
+ "chksum_sha256": "44f8cdd9fde78c55275e2339c33bb12dddfce2ca2d5f0f2e0bd59907beae8a3a",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp_interfaces/tests/netconf/parsed.yaml",
+ "name": "tests/integration/targets/junos_command/tests/netconf_json/greaterthanorequal.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5507c1e13968eac2c90f6662a91ba3420c9af38e538372e9a64534cdd5952c61",
+ "chksum_sha256": "0ba61dab7a4acd479e39df8039d99d80242f5d6cdd90f85b2e1ab9208fb17743",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp_interfaces/tests/netconf/rendered.yaml",
+ "name": "tests/integration/targets/junos_command/tests/netconf_json/lessthanorequal.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1ada2eacba8eb22edcabe39600c85b3d8089699d0664aeb08fe7ff322e910fca",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_vrf",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_vrf/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "991acfafd4fb6ca665f33465692ad8b12d01bd6526b5e9f2b1880a3ce3cfbcbe",
"format": 1
},
{
- "name": "tests/integration/targets/junos_vrf/tasks/main.yaml",
+ "name": "tests/integration/targets/junos_command/tests/netconf_json/lessthan.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e727033350980ea9df8bbfde6b874c51150f907f51fa8fc4cc8070e3f50ec5d3",
+ "chksum_sha256": "46f3b7e08ea7e59fd6d233657dd93eda7ef4730f8057ea0c8f2e53d278f83ad9",
"format": 1
},
{
- "name": "tests/integration/targets/junos_vrf/tasks/netconf.yaml",
+ "name": "tests/integration/targets/junos_command/tests/netconf_json/bad_operator.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1946facde8e5b023ffc633db3d6261d8de690c1fb2101af1214f8d4d55ce1f56",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_vrf/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "b5fd958f25016372728899436773ee543050da327e509f090ba88ca4636c0d2d",
"format": 1
},
{
- "name": "tests/integration/targets/junos_vrf/meta/main.yml",
+ "name": "tests/integration/targets/junos_command/tests/netconf_json/greaterthan.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_vrf/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "aa183d6e2138a9213b5e2522db349163d9da96ad375fc17c9ad11bede8c7fce4",
"format": 1
},
{
- "name": "tests/integration/targets/junos_vrf/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_command/tests/netconf_json/output.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
+ "chksum_sha256": "1ff281d2c6a00c5a8966af7c146013d28215b96e501ce445d99e12fc204aa313",
"format": 1
},
{
- "name": "tests/integration/targets/junos_vrf/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_command/tests/netconf_json/contains.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "71a375a286b4f440c50a9c6c82c36045ca7ecec6a29816386559b792ff4d066b",
"format": 1
},
{
- "name": "tests/integration/targets/junos_vrf/tests/netconf",
+ "name": "tests/integration/targets/junos_command/tests/cli",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_vrf/tests/netconf/basic.yaml",
+ "name": "tests/integration/targets/junos_command/tests/cli/cli_commmand.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d1b0fe67be093ce85673fdb2a29646edd61025742313f8ee12467201c6301d1c",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_lacp",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "5266fa0edc63b6ca83fbb7074bc8203ca4eefe09492e44bba140eb2cd6d1aefc",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp/tasks",
+ "name": "tests/integration/targets/junos_command/tests/netconf_xml",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp/tasks/main.yaml",
+ "name": "tests/integration/targets/junos_command/tests/netconf_xml/notequal.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "695c1124ba12e4fd97496b87a4a4cad41e513d56e0b9f2996da640f035ed2085",
+ "chksum_sha256": "0a2cefdd4e1e0b7deb888b200e6dfbe0dc1c1e2288b3e9266ac0443b6f6aac09",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp/tasks/netconf.yaml",
+ "name": "tests/integration/targets/junos_command/tests/netconf_xml/equal.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_lacp/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "27cf24898299e694a84f6984d1e94b61c859b565868803d4891450e79dabc09d",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp/meta/main.yml",
+ "name": "tests/integration/targets/junos_command/tests/netconf_xml/greaterthanorequal.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_lacp/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "8ddb628e09f70a9736acacf44235afb4e35b18d56bc8efbbe6d0f8b200ce03a5",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_command/tests/netconf_xml/lessthanorequal.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "77b6fdaa510c5b4d2829d3cba8a685b1b510f1f4dbf9b2adadec7ac5f1de247d",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_command/tests/netconf_xml/invalid.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f5fd5a9a1d9d45b784d9acec4738d7ba8476d9b19f6226796b9e819b5cecba88",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp/tests/netconf",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_command/tests/netconf_xml/timeout.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "cdca9d6014c8b58811033e57029c08288af780cb15957fde32b40019868cebd9",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp/tests/netconf/_remove_config.yaml",
+ "name": "tests/integration/targets/junos_command/tests/netconf_xml/lessthan.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "98170a2521713ea54e67c82e273e1746738ed54819eb2fbb0856710d189d173d",
+ "chksum_sha256": "7ad0acba5ab78a50a2fc805c83c96b6e2a9c482c9981f66692654df0c7a4305d",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp/tests/netconf/deleted.yaml",
+ "name": "tests/integration/targets/junos_command/tests/netconf_xml/bad_operator.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a5d0751e9f34444306957e4c7708e1e52f275b3b11a1ae206641c3bd821fbe86",
+ "chksum_sha256": "66a36b766c06b4b70d12b42a83fb66740b0a82288cc9b71604daee36a158cd96",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp/tests/netconf/gathered.yaml",
+ "name": "tests/integration/targets/junos_command/tests/netconf_xml/greaterthan.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7456e8a75e4d01f284aadd830c4b3250aa7168aeece0f0ada452c16eaec6946e",
+ "chksum_sha256": "22850c6970343bb05f625f546b1f92a6deb8756549234f11056405077e43f953",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp/tests/netconf/rtt.yaml",
+ "name": "tests/integration/targets/junos_command/tests/netconf_xml/output.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5b50a1144438b3f499d9e8f6538323ef0af12994ccf5d3611ff695e8ef2a7022",
+ "chksum_sha256": "c9ebd6b3029527e75e68e93f4708ed227221406982dd3908fb0ceb37bf96142f",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp/tests/netconf/merged.yaml",
+ "name": "tests/integration/targets/junos_command/tests/netconf_xml/contains.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "18a72bc9fa7af695681d1c5ad174431624a61b1d23646111622aa4badecabe67",
+ "chksum_sha256": "9ba38e35af89df460e59da5f49f3e326f4e59b095b08827478bd6529b428b0e8",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp/tests/netconf/fixtures",
+ "name": "tests/integration/targets/junos_command/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp/tests/netconf/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/junos_command/tasks/netconf_json.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7206ec05e4a9670e83cc407c9ca5649eb57f01d30d3b176dece84accdeca69ae",
+ "chksum_sha256": "71516dbb78c53604148415ad5626c34ee3030c82728bc9f3c2a032851648e339",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp/tests/netconf/replaced.yaml",
+ "name": "tests/integration/targets/junos_command/tasks/netconf_text.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2ab346f49b577ac56280a71bdb32cbc24d44a6aab4daaccf3adc2b75510463ba",
+ "chksum_sha256": "274fd845f69a5501756cb86bbd41088eec2a0cbc69250153f587976727e1011f",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp/tests/netconf/parsed.yaml",
+ "name": "tests/integration/targets/junos_command/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9ac7dea1e62e62fc54d2af0f219eaee161e74dc246d6ef5639a8f254443390a6",
+ "chksum_sha256": "612a33b6753baaf0154b2a0690b744deae539de705558c4a56d317ccd2d8b854",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lacp/tests/netconf/rendered.yaml",
+ "name": "tests/integration/targets/junos_command/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b4e206e6b128a783f03fdf33dc3e968fb730fb59f6f082db89a1be5f4c28a8ff",
+ "chksum_sha256": "8bf3d8209693784fd02f0c9f430519c3ee9d27d90c5aef93fb06efe0541cf77f",
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_address_family",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_command/tasks/netconf_xml.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4c722c2d0b825c5c6e8d522640ecdc98b26084946a59de82cf0bfff07dac1fa7",
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_address_family/tasks",
+ "name": "tests/integration/targets/junos_logging_global",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_address_family/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6859e775c6926fd41248bfce2e80a71c7e08cc626a5cf5882bbd5134e1e58e46",
+ "name": "tests/integration/targets/junos_logging_global/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_address_family/tasks/netconf.yaml",
+ "name": "tests/integration/targets/junos_logging_global/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_address_family/meta",
+ "name": "tests/integration/targets/junos_logging_global/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_address_family/meta/main.yml",
+ "name": "tests/integration/targets/junos_logging_global/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
+ "chksum_sha256": "65beace3c6c7aeebd3ba5c0fce3d511c1a854c59b787d7c484a3b47f765ef66d",
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_address_family/defaults",
+ "name": "tests/integration/targets/junos_logging_global/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_address_family/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_logging_global/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_address_family/tests",
+ "name": "tests/integration/targets/junos_logging_global/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_address_family/tests/netconf",
+ "name": "tests/integration/targets/junos_logging_global/tests/netconf",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_address_family/tests/netconf/deleted.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "70bf59e2250beff1ce0bc112e7a8c542b7f6182bf0e9f47fbbda45da3ec06de5",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_bgp_address_family/tests/netconf/gathered.yaml",
+ "name": "tests/integration/targets/junos_logging_global/tests/netconf/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fdea66c1005edd57bc77c5e95dc0d4db878e448ecaa2d766efdcc45f09fe8533",
+ "chksum_sha256": "bd4bc36fdaf73489ea9f8b6ccadb9eed4444fb5a042f87b57c45d03ebfbccd2d",
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_address_family/tests/netconf/empty_config.yaml",
+ "name": "tests/integration/targets/junos_logging_global/tests/netconf/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f03982c9fa9c148a3bce04ab16a14073564d6b96fb0dc9d80a4280d44bae67e6",
+ "chksum_sha256": "2d7f42fa466e6c747d83a19b6f437295ad2d3a3aae822c5b87218ad38a939acc",
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_address_family/tests/netconf/merged.yaml",
+ "name": "tests/integration/targets/junos_logging_global/tests/netconf/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c59df9ef3ff42cfd3bdd470925c0a3e1f8fdbead2dc6e2d201e46a2aa827d64a",
+ "chksum_sha256": "f562cdcf46e8914526dc833ea9dcd7853ce5f0889c860b253bf29a76d63e13ff",
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_address_family/tests/netconf/overridden.yaml",
+ "name": "tests/integration/targets/junos_logging_global/tests/netconf/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5608ca62c28b3bf93f65e7eaad6130bb108162210583bf0538a6dbf212b8e2ff",
+ "chksum_sha256": "9af6e95d468868608a8ee2ac5a736e05d0912abf883f3004305aab0b12a64dbf",
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_address_family/tests/netconf/fixtures",
+ "name": "tests/integration/targets/junos_logging_global/tests/netconf/fixtures",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_address_family/tests/netconf/fixtures/parsed.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "21f4f80f8a632bb05e189b506b3dd4ee2c52927fd9cb4023d5b1d2a307044983",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_bgp_address_family/tests/netconf/replaced.yaml",
+ "name": "tests/integration/targets/junos_logging_global/tests/netconf/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4cea93e925dd207634a39d7db89f41b3226361b684cd4e73907528b76b2de868",
+ "chksum_sha256": "610b72bbd1a2b52abebcad6740fe0e311eba9491d685a7132db0eb9ba367a205",
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_address_family/tests/netconf/parsed.yaml",
+ "name": "tests/integration/targets/junos_logging_global/tests/netconf/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "38b76b973ae8e0c22e1c02fbd879d4924a8ddce3c54671353956c5aaacf59531",
+ "chksum_sha256": "1fc1a701e79dff995f7c73be2b536802657e37759b52c424d86cc6a08049956a",
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_address_family/tests/netconf/_reset_config.yaml",
+ "name": "tests/integration/targets/junos_logging_global/tests/netconf/rtt.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0017fbbaa15229f0e59e1565894ec6236a9b6c38a0791822e83a0176d133559e",
+ "chksum_sha256": "34d2a9f5f1d5f2a942c6e963a493f71ba5404cf0f39bb6a6a549b956babf55c3",
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_address_family/tests/netconf/rendered.yaml",
+ "name": "tests/integration/targets/junos_logging_global/tests/netconf/_initial_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cb5ceb89fa49b884da83854ef39519368b95df370bf98871b10d6ea9403f55df",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_system",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_system/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "f3e5d31b5c95eeddd8db1b98e3d236b1845b57b8ec6325e7c72b58ed4f74b9d7",
"format": 1
},
{
- "name": "tests/integration/targets/junos_system/tasks/main.yaml",
+ "name": "tests/integration/targets/junos_logging_global/tests/netconf/_reset_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e727033350980ea9df8bbfde6b874c51150f907f51fa8fc4cc8070e3f50ec5d3",
+ "chksum_sha256": "076fe1eb3dc4643aeee762bbd4d9539893b4dd224deac32f9593f6ac93c2eddd",
"format": 1
},
{
- "name": "tests/integration/targets/junos_system/tasks/netconf.yaml",
+ "name": "tests/integration/targets/junos_logging_global/tests/netconf/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3006a95309847acbfecc0a9c6cbeaad782956e7814679010a9bbb7782cab4aa8",
+ "chksum_sha256": "326e85d7a20fce18191830f205ede5126f8e739e284bd9fbcc1dee1d311c9c34",
"format": 1
},
{
- "name": "tests/integration/targets/junos_system/meta",
+ "name": "tests/integration/targets/junos_logging_global/tests/netconf/backups",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_system/meta/main.yml",
+ "name": "tests/integration/targets/junos_logging_global/tests/netconf/backups/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_system/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "a199720ea8a377c143b7563572b60e1e5bb12f929695b914785cd436ccb89d4a",
"format": 1
},
{
- "name": "tests/integration/targets/junos_system/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_logging_global/tests/netconf/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
+ "chksum_sha256": "2ced1cd369a59d60b9f2de48c0d3e6284d71a54821f3f6501106a2ad7e0e90f0",
"format": 1
},
{
- "name": "tests/integration/targets/junos_system/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_logging_global/tests/netconf/replaced.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0d1cf41f011d78e8e4acb637d236eeec13f124dfa19a4426b91fcc5d2b938f5e",
"format": 1
},
{
- "name": "tests/integration/targets/junos_system/tests/netconf",
+ "name": "tests/integration/targets/junos_logging_global/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_system/tests/netconf/basic.yaml",
+ "name": "tests/integration/targets/junos_logging_global/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "737db05e1953f8db6a60807a390b2ade773dcf92b8f21d3aed93f10aa6a1c87b",
+ "chksum_sha256": "4239ce4ad6fc58a529cc073139b7b2abbdba62ae32bfc234e309af398d365eb6",
"format": 1
},
{
- "name": "tests/integration/targets/junos_system/aliases",
+ "name": "tests/integration/targets/junos_logging_global/tasks/netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_snmp_server",
+ "name": "tests/integration/targets/junos_hostname",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_snmp_server/tasks",
+ "name": "tests/integration/targets/junos_hostname/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_snmp_server/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6859e775c6926fd41248bfce2e80a71c7e08cc626a5cf5882bbd5134e1e58e46",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_snmp_server/tasks/netconf.yaml",
+ "name": "tests/integration/targets/junos_hostname/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_snmp_server/meta",
+ "name": "tests/integration/targets/junos_hostname/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_snmp_server/meta/main.yml",
+ "name": "tests/integration/targets/junos_hostname/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
+ "chksum_sha256": "b98e791e7ad4cbfbd8ce30cb3022b270230ab2e45847c04fe77d5d1dd5bf7b12",
"format": 1
},
{
- "name": "tests/integration/targets/junos_snmp_server/defaults",
+ "name": "tests/integration/targets/junos_hostname/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_snmp_server/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_hostname/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
"format": 1
},
{
- "name": "tests/integration/targets/junos_snmp_server/tests",
+ "name": "tests/integration/targets/junos_hostname/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_snmp_server/tests/netconf",
+ "name": "tests/integration/targets/junos_hostname/tests/netconf",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_snmp_server/tests/netconf/deleted.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "92e2829fa0cb2f63063f5aace2377e2921f9321dd1e5268674a62dbd0d77a224",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_snmp_server/tests/netconf/gathered.yaml",
+ "name": "tests/integration/targets/junos_hostname/tests/netconf/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6efb62f03f36c571dd83d43b78e7497edde18648430fea073e5ec4dd671b8201",
+ "chksum_sha256": "9d45b2a71361361156bc82215ae1acecdf8e0c6c198564221878e7aab20b9b29",
"format": 1
},
{
- "name": "tests/integration/targets/junos_snmp_server/tests/netconf/empty_config.yaml",
+ "name": "tests/integration/targets/junos_hostname/tests/netconf/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec3e130e584202fe4c138bb15e0474f12f42d852180097e5723932d797e8842f",
+ "chksum_sha256": "7d34df5a47ff725e6c4b985f52025390db4b2f74d6d6b75cb8999cf2efc26eb3",
"format": 1
},
{
- "name": "tests/integration/targets/junos_snmp_server/tests/netconf/_initial_config.yaml",
+ "name": "tests/integration/targets/junos_hostname/tests/netconf/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9f4be4ad7d63358e8190d2fc6fcda1669d77b59e1e0d232e15ad338974d07c3a",
+ "chksum_sha256": "3b282d6a72bc4377ddfa8b8ca7739d097ab1d89a467ea7b1ba95f5380f512643",
"format": 1
},
{
- "name": "tests/integration/targets/junos_snmp_server/tests/netconf/rtt.yaml",
+ "name": "tests/integration/targets/junos_hostname/tests/netconf/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a7ff7fb0534ca8b333f965e51ff3fd5ebe47e18dc407ccf019e1d2e7f3e568d4",
+ "chksum_sha256": "600c48f1df3955d538656c3432aa43ea2adba586c577263aa7daa1f152e8446b",
"format": 1
},
{
- "name": "tests/integration/targets/junos_snmp_server/tests/netconf/backups",
+ "name": "tests/integration/targets/junos_hostname/tests/netconf/fixtures",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_snmp_server/tests/netconf/backups/empty_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a199720ea8a377c143b7563572b60e1e5bb12f929695b914785cd436ccb89d4a",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_snmp_server/tests/netconf/merged.yaml",
+ "name": "tests/integration/targets/junos_hostname/tests/netconf/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dc9d8ff5760507223877b37bb65c6083f14304740ead70129662304267d8324c",
+ "chksum_sha256": "bd14466157e5abe475ca8fa042823fb202ce9d4d5e507b377f1548a1cc73940d",
"format": 1
},
{
- "name": "tests/integration/targets/junos_snmp_server/tests/netconf/overridden.yaml",
+ "name": "tests/integration/targets/junos_hostname/tests/netconf/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8cadf8b80457c955f22c1080c709652ac57874cd2ed8e5093086625d3e4fbc60",
+ "chksum_sha256": "26dabccea514448a4e4fcd5bb157ebf911ad78dcd005dad730fda67f7dee8f25",
"format": 1
},
{
- "name": "tests/integration/targets/junos_snmp_server/tests/netconf/_populate_config.yaml",
+ "name": "tests/integration/targets/junos_hostname/tests/netconf/rtt.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dba186fea16ddf43f92a52e12447abb35f8768fa4ca4d4e197f40f4d67bbc6d9",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_snmp_server/tests/netconf/fixtures",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "41871f4904f54fa80565b1e0d226e8f6c67ec826ad5aea279eb6961d82ac2996",
"format": 1
},
{
- "name": "tests/integration/targets/junos_snmp_server/tests/netconf/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/junos_hostname/tests/netconf/_initial_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75d7ce74bc974651f36b79e38f6d82fa194348da859316ba96f7c8b46a462746",
+ "chksum_sha256": "230a242d02636957af38a09910128f5e3471a27c0895f4d02bf3b2c36c9720f5",
"format": 1
},
{
- "name": "tests/integration/targets/junos_snmp_server/tests/netconf/replaced.yaml",
+ "name": "tests/integration/targets/junos_hostname/tests/netconf/_reset_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5b04a13a51a36b464330f8caf574c37db0e8da91c0149bfd246aa070c948c7b2",
+ "chksum_sha256": "3fcfdba1e96a9f37052d4971ca05776b4d52d6f4584cba773052ed6ea56ed3c7",
"format": 1
},
{
- "name": "tests/integration/targets/junos_snmp_server/tests/netconf/parsed.yaml",
+ "name": "tests/integration/targets/junos_hostname/tests/netconf/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "05b7d590b4a4a01cef48c86b56ba744e3b28e8fe1aab50a1ebcad40ac25fb79c",
+ "chksum_sha256": "1bdcb4db12340c90eb076083e5e5e7ae60b3121b779016b7727822bd6fe55ce1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_snmp_server/tests/netconf/_reset_config.yaml",
+ "name": "tests/integration/targets/junos_hostname/tests/netconf/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f3c990bf8e5f662b59917bc792379f273fffe3268231ab5690d20283782ea3d5",
+ "chksum_sha256": "78b87fda1deca6d9a6d8decd0fb14b255db836008cc0325dbc179870e1640a65",
"format": 1
},
{
- "name": "tests/integration/targets/junos_snmp_server/tests/netconf/rendered.yaml",
+ "name": "tests/integration/targets/junos_hostname/tests/netconf/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a10f5a5ea42df2a8c92afedc170caa9fb6b9bf04a3799e93f854f3a7faca8392",
+ "chksum_sha256": "015ba9b5d86865fa7e149a48af30c36323b5225c6142346863587bdd1c2d7b63",
"format": 1
},
{
- "name": "tests/integration/targets/junos_snmp_server/vars",
+ "name": "tests/integration/targets/junos_hostname/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_snmp_server/vars/main.yaml",
+ "name": "tests/integration/targets/junos_hostname/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b78ff73f201d89a20ea8a6caee05dc207b6b68dc4c42e2790474775f17a28f",
+ "chksum_sha256": "6859e775c6926fd41248bfce2e80a71c7e08cc626a5cf5882bbd5134e1e58e46",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_zones",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_hostname/tasks/netconf.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_zones/tasks",
+ "name": "tests/integration/targets/junos_lacp",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_zones/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6859e775c6926fd41248bfce2e80a71c7e08cc626a5cf5882bbd5134e1e58e46",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_security_zones/tasks/netconf.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_security_zones/meta",
+ "name": "tests/integration/targets/junos_lacp/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_zones/meta/main.yml",
+ "name": "tests/integration/targets/junos_lacp/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_zones/defaults",
+ "name": "tests/integration/targets/junos_lacp/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_zones/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_lacp/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_zones/tests",
+ "name": "tests/integration/targets/junos_lacp/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_zones/tests/netconf",
+ "name": "tests/integration/targets/junos_lacp/tests/netconf",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_zones/tests/netconf/deleted.yaml",
+ "name": "tests/integration/targets/junos_lacp/tests/netconf/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ae8d6e41134cd6292e031bde0a1e41390a0877b7a8aa2609b0611d21f8c92dd7",
+ "chksum_sha256": "9ac7dea1e62e62fc54d2af0f219eaee161e74dc246d6ef5639a8f254443390a6",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_zones/tests/netconf/gathered.yaml",
+ "name": "tests/integration/targets/junos_lacp/tests/netconf/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8ac531e0078326b78ed040e715ced5c69a57266a7ba0f8e878b5a132b3268a16",
+ "chksum_sha256": "b4e206e6b128a783f03fdf33dc3e968fb730fb59f6f082db89a1be5f4c28a8ff",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_zones/tests/netconf/empty_config.yaml",
+ "name": "tests/integration/targets/junos_lacp/tests/netconf/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "29fb25dec128037263716c898deb0aaeb5aca9b98b069a7a4c3d0b941417f57b",
+ "chksum_sha256": "7456e8a75e4d01f284aadd830c4b3250aa7168aeece0f0ada452c16eaec6946e",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_zones/tests/netconf/_initial_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "97f5b6df3ba9463c6bffe711cf66d9f7ee8efeb65f153e4b47de128dc68e6a48",
+ "name": "tests/integration/targets/junos_lacp/tests/netconf/fixtures",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_zones/tests/netconf/merged.yaml",
+ "name": "tests/integration/targets/junos_lacp/tests/netconf/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f7a29442765f7f3776e1b43980900eb7f2ebe5d17904e3fc36c601c41b7d28fb",
+ "chksum_sha256": "7206ec05e4a9670e83cc407c9ca5649eb57f01d30d3b176dece84accdeca69ae",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_zones/tests/netconf/overridden.yaml",
+ "name": "tests/integration/targets/junos_lacp/tests/netconf/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8d829c21014964be69edddccf727e72f3e20c6e97019bede439270ad4f5edcc5",
+ "chksum_sha256": "a5d0751e9f34444306957e4c7708e1e52f275b3b11a1ae206641c3bd821fbe86",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_zones/tests/netconf/rtt.yml",
+ "name": "tests/integration/targets/junos_lacp/tests/netconf/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8610a0f4f2176625cff923f881740f3834ae1e11eb3707ee655a9a5bc28f66ec",
+ "chksum_sha256": "98170a2521713ea54e67c82e273e1746738ed54819eb2fbb0856710d189d173d",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_zones/tests/netconf/_populate_config.yaml",
+ "name": "tests/integration/targets/junos_lacp/tests/netconf/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0b0a4ab8f0b94769621bd3585b2338252acb7bb110fba2eaa0033eee5c669d48",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_security_zones/tests/netconf/fixtures",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "18a72bc9fa7af695681d1c5ad174431624a61b1d23646111622aa4badecabe67",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_zones/tests/netconf/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/junos_lacp/tests/netconf/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "72a5d8773cfbf73e55a219ddd23fc03d5698af853088f5087cb9d3916a7e2743",
+ "chksum_sha256": "2ab346f49b577ac56280a71bdb32cbc24d44a6aab4daaccf3adc2b75510463ba",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_zones/tests/netconf/replaced.yaml",
+ "name": "tests/integration/targets/junos_lacp/tests/netconf/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "76407a5ce6e30b3b6bf16b5ae782d4fd7a0b92ae49ef92a7b77c755bbcbe2969",
+ "chksum_sha256": "5b50a1144438b3f499d9e8f6538323ef0af12994ccf5d3611ff695e8ef2a7022",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_zones/tests/netconf/parsed.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8a7c2f670c6bc9435a0bd6eca8d81fdbd924cf4140c149c11a1b5623709d7dea",
+ "name": "tests/integration/targets/junos_lacp/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_zones/tests/netconf/_reset_config.yaml",
+ "name": "tests/integration/targets/junos_lacp/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8d240f3c782eef1fd316414e92647db865fd6d8f416f4444f9c9fc13626703f3",
+ "chksum_sha256": "695c1124ba12e4fd97496b87a4a4cad41e513d56e0b9f2996da640f035ed2085",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_zones/tests/netconf/rendered.yaml",
+ "name": "tests/integration/targets/junos_lacp/tasks/netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8cc511b2192c8ed212733f44b30dc4ed907865504d862ef3701150be9366cc41",
+ "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_zones/vars",
+ "name": "tests/integration/targets/junos_lldp_global",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_zones/vars/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "af63125e0d6fbca0f844ff71b1f26210c452ad70cd094931bf0a177e1ddd73f7",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_hostname",
+ "name": "tests/integration/targets/junos_lldp_global/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_hostname/tasks",
+ "name": "tests/integration/targets/junos_lldp_global/defaults/main.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_lldp_global/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_hostname/tasks/main.yaml",
+ "name": "tests/integration/targets/junos_lldp_global/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6859e775c6926fd41248bfce2e80a71c7e08cc626a5cf5882bbd5134e1e58e46",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
"format": 1
},
{
- "name": "tests/integration/targets/junos_hostname/tasks/netconf.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
+ "name": "tests/integration/targets/junos_lldp_global/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_hostname/meta",
+ "name": "tests/integration/targets/junos_lldp_global/tests/netconf",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_hostname/meta/main.yml",
+ "name": "tests/integration/targets/junos_lldp_global/tests/netconf/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_hostname/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "bfc0302be4a1562069cc24b33ad2f6032ec18c776cae96f47ac225a17caf4168",
"format": 1
},
{
- "name": "tests/integration/targets/junos_hostname/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_lldp_global/tests/netconf/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "302ab946a8bae94f9da38cc06e80451b1fbd778790ab2de216e309847f7b5425",
"format": 1
},
{
- "name": "tests/integration/targets/junos_hostname/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_lldp_global/tests/netconf/gathered.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d7b7d07fb1999244297de1f6b4586ae441d7ac97d9cfa8ce29e8efc98d4f4b4c",
"format": 1
},
{
- "name": "tests/integration/targets/junos_hostname/tests/netconf",
+ "name": "tests/integration/targets/junos_lldp_global/tests/netconf/fixtures",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_hostname/tests/netconf/deleted.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "26dabccea514448a4e4fcd5bb157ebf911ad78dcd005dad730fda67f7dee8f25",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_hostname/tests/netconf/gathered.yaml",
+ "name": "tests/integration/targets/junos_lldp_global/tests/netconf/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3b282d6a72bc4377ddfa8b8ca7739d097ab1d89a467ea7b1ba95f5380f512643",
+ "chksum_sha256": "dd2bd6bf5e3586c5121310490846758eeb302931b2b2a3fbce16e9405c849f67",
"format": 1
},
{
- "name": "tests/integration/targets/junos_hostname/tests/netconf/empty_config.yaml",
+ "name": "tests/integration/targets/junos_lldp_global/tests/netconf/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "600c48f1df3955d538656c3432aa43ea2adba586c577263aa7daa1f152e8446b",
+ "chksum_sha256": "1bfa3e00a1ee208f76f178cb14758673ee897155206b335bfb79b822bda7d809",
"format": 1
},
{
- "name": "tests/integration/targets/junos_hostname/tests/netconf/_initial_config.yaml",
+ "name": "tests/integration/targets/junos_lldp_global/tests/netconf/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "230a242d02636957af38a09910128f5e3471a27c0895f4d02bf3b2c36c9720f5",
+ "chksum_sha256": "7678b66e0721e989ac00cb0fabc55742be8954ee0fdbfaa4345c3068b4e1d7d4",
"format": 1
},
{
- "name": "tests/integration/targets/junos_hostname/tests/netconf/merged.yaml",
+ "name": "tests/integration/targets/junos_lldp_global/tests/netconf/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "78b87fda1deca6d9a6d8decd0fb14b255db836008cc0325dbc179870e1640a65",
+ "chksum_sha256": "f6e3d2216d5e7a2065ca2473544679e8ccd268d9768d4e3be595dff8bd82e714",
"format": 1
},
{
- "name": "tests/integration/targets/junos_hostname/tests/netconf/overridden.yaml",
+ "name": "tests/integration/targets/junos_lldp_global/tests/netconf/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1bdcb4db12340c90eb076083e5e5e7ae60b3121b779016b7727822bd6fe55ce1",
+ "chksum_sha256": "40f118df09dc8e09b05a021a4968bca80384856a19502d0474c386c64fd0ca1b",
"format": 1
},
{
- "name": "tests/integration/targets/junos_hostname/tests/netconf/rtt.yml",
+ "name": "tests/integration/targets/junos_lldp_global/tests/netconf/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "41871f4904f54fa80565b1e0d226e8f6c67ec826ad5aea279eb6961d82ac2996",
+ "chksum_sha256": "b7516dd5a2f70ddc84f498cb4119e6f66d077a0e5dac0360a943531a2b6bbcd4",
"format": 1
},
{
- "name": "tests/integration/targets/junos_hostname/tests/netconf/fixtures",
+ "name": "tests/integration/targets/junos_lldp_global/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_hostname/tests/netconf/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/junos_lldp_global/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bd14466157e5abe475ca8fa042823fb202ce9d4d5e507b377f1548a1cc73940d",
+ "chksum_sha256": "4239ce4ad6fc58a529cc073139b7b2abbdba62ae32bfc234e309af398d365eb6",
"format": 1
},
{
- "name": "tests/integration/targets/junos_hostname/tests/netconf/replaced.yaml",
+ "name": "tests/integration/targets/junos_lldp_global/tasks/netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "015ba9b5d86865fa7e149a48af30c36323b5225c6142346863587bdd1c2d7b63",
+ "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_hostname/tests/netconf/parsed.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9d45b2a71361361156bc82215ae1acecdf8e0c6c198564221878e7aab20b9b29",
+ "name": "tests/integration/targets/junos_lag_interfaces",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_hostname/tests/netconf/_reset_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3fcfdba1e96a9f37052d4971ca05776b4d52d6f4584cba773052ed6ea56ed3c7",
+ "name": "tests/integration/targets/junos_lag_interfaces/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_hostname/tests/netconf/rendered.yaml",
+ "name": "tests/integration/targets/junos_lag_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7d34df5a47ff725e6c4b985f52025390db4b2f74d6d6b75cb8999cf2efc26eb3",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_hostname/vars",
+ "name": "tests/integration/targets/junos_lag_interfaces/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_hostname/vars/main.yaml",
+ "name": "tests/integration/targets/junos_lag_interfaces/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b98e791e7ad4cbfbd8ce30cb3022b270230ab2e45847c04fe77d5d1dd5bf7b12",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
"format": 1
},
{
- "name": "tests/integration/targets/junos_l2_interfaces",
+ "name": "tests/integration/targets/junos_lag_interfaces/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_l2_interfaces/tasks",
+ "name": "tests/integration/targets/junos_lag_interfaces/tests/netconf",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_l2_interfaces/tasks/main.yaml",
+ "name": "tests/integration/targets/junos_lag_interfaces/tests/netconf/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6859e775c6926fd41248bfce2e80a71c7e08cc626a5cf5882bbd5134e1e58e46",
+ "chksum_sha256": "f6a63f014861a62d22b7969689f1dc3966a4282b8c95a165b1cc3d35018ae88e",
"format": 1
},
{
- "name": "tests/integration/targets/junos_l2_interfaces/tasks/netconf.yaml",
+ "name": "tests/integration/targets/junos_lag_interfaces/tests/netconf/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "45637e547498ff1d584b43d64cdb545283055dd51e7cbce649a1b344a5566cb0",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_l2_interfaces/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "657037ae627b0e9265dbf5ed20bcd7e0e10f3987c751a443e5708a47df928de9",
"format": 1
},
{
- "name": "tests/integration/targets/junos_l2_interfaces/meta/main.yaml",
+ "name": "tests/integration/targets/junos_lag_interfaces/tests/netconf/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
+ "chksum_sha256": "bcf0f0aeee50ed4d9bafe71db01017fc7f05ef1d8451bd48cc8bb7ca7d309593",
"format": 1
},
{
- "name": "tests/integration/targets/junos_l2_interfaces/defaults",
+ "name": "tests/integration/targets/junos_lag_interfaces/tests/netconf/fixtures",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_l2_interfaces/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_lag_interfaces/tests/netconf/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "6362681d72bb84236c6063867d677a9c6802996a268047dc081ae4dead5345fe",
"format": 1
},
{
- "name": "tests/integration/targets/junos_l2_interfaces/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_lag_interfaces/tests/netconf/_base_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "422b30525a97a151a644f4ef3e0905f48f6baba2382b53fda2d0670bcdc47c68",
"format": 1
},
{
- "name": "tests/integration/targets/junos_l2_interfaces/tests/netconf",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_lag_interfaces/tests/netconf/deleted.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "72efe0c964cbc8425cf2dbcd901ae1e93d5702142a0b3b7531686f4dbe896dd8",
"format": 1
},
{
- "name": "tests/integration/targets/junos_l2_interfaces/tests/netconf/_remove_config.yaml",
+ "name": "tests/integration/targets/junos_lag_interfaces/tests/netconf/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2c23e7e54ae73e30c371d44aa84bd5e4e3e095b1b373afc52d4e7ec6f3bc258b",
+ "chksum_sha256": "1cb41bf2ef192855fa29d8ba1fc78380ae705498ba17b54345b003c15d8eea30",
"format": 1
},
{
- "name": "tests/integration/targets/junos_l2_interfaces/tests/netconf/deleted.yaml",
+ "name": "tests/integration/targets/junos_lag_interfaces/tests/netconf/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bac996860ada5e921e149d186b95533139cbfaac0cac8424783899b2179a8d24",
+ "chksum_sha256": "d15eee369dbf92bd5b263170f19ecceccb1d29295f86f1ec0afa1b2542f8a43a",
"format": 1
},
{
- "name": "tests/integration/targets/junos_l2_interfaces/tests/netconf/gathered.yaml",
+ "name": "tests/integration/targets/junos_lag_interfaces/tests/netconf/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "af33aa7223a48cab620bb31a6d1dfad55ea995fee1851de39926776775837cbc",
+ "chksum_sha256": "0354f48c3517eea3b0643f7999f6d127c124f7990be5cd6be92bba3c87aec71b",
"format": 1
},
{
- "name": "tests/integration/targets/junos_l2_interfaces/tests/netconf/_base_config.yaml",
+ "name": "tests/integration/targets/junos_lag_interfaces/tests/netconf/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c17ed7273352e5ae3a01737054081b89f5daeef876d1c5fac0db5b2ecb8950e6",
+ "chksum_sha256": "cac34b639c32c5c27f26cda22f7d9aa11b4cbcaf8a8c2694622e3890526ebcc7",
"format": 1
},
{
- "name": "tests/integration/targets/junos_l2_interfaces/tests/netconf/merged.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "13024460e326b04fd6fe6a7825e9a46b8bc6ce9819ba6cf5a846a341d58a3507",
+ "name": "tests/integration/targets/junos_lag_interfaces/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_l2_interfaces/tests/netconf/overridden.yaml",
+ "name": "tests/integration/targets/junos_lag_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0504fd9e84a3385d66e31ef84a8c7ffb8ddb525819593d5248a77947d9c78044",
+ "chksum_sha256": "4239ce4ad6fc58a529cc073139b7b2abbdba62ae32bfc234e309af398d365eb6",
"format": 1
},
{
- "name": "tests/integration/targets/junos_l2_interfaces/tests/netconf/rtt.yml",
+ "name": "tests/integration/targets/junos_lag_interfaces/tasks/netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "adda5cc44c1ab6f4eb7fa0a2f3812d0836957bdfc6e7eddfb8932d17a1895eb2",
+ "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_l2_interfaces/tests/netconf/fixtures",
+ "name": "tests/integration/targets/junos_ospfv2",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_l2_interfaces/tests/netconf/fixtures/parsed.cfg",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e0dcf81fecfea2443b931ea13585c90f86328910b71285add801bda7265c3636",
+ "name": "tests/integration/targets/junos_ospfv2/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_l2_interfaces/tests/netconf/replaced.yaml",
+ "name": "tests/integration/targets/junos_ospfv2/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6edd256af87afe61f3caa203f0d37301b58de62653a331fa388dde0a69eb6cc3",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_l2_interfaces/tests/netconf/parsed.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b373b23c8385fde76eadd95edcfb45d2fe71f8b3e3b9b6554b311163d949ffc3",
+ "name": "tests/integration/targets/junos_ospfv2/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_l2_interfaces/tests/netconf/rendered.yaml",
+ "name": "tests/integration/targets/junos_ospfv2/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "19eb1cb8c4c2f40071b029eb62a7312e6b3273c7948a438b1b35ce780c32475b",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
"format": 1
},
{
- "name": "tests/integration/targets/junos_banner",
+ "name": "tests/integration/targets/junos_ospfv2/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_banner/tasks",
+ "name": "tests/integration/targets/junos_ospfv2/tests/netconf",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_banner/tasks/main.yaml",
+ "name": "tests/integration/targets/junos_ospfv2/tests/netconf/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e727033350980ea9df8bbfde6b874c51150f907f51fa8fc4cc8070e3f50ec5d3",
+ "chksum_sha256": "24110506dce6a1acf10ba1ee0f7991f69fb454c9c464058dc6660085aeaac754",
"format": 1
},
{
- "name": "tests/integration/targets/junos_banner/tasks/netconf.yaml",
+ "name": "tests/integration/targets/junos_ospfv2/tests/netconf/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be90db2aa35bf39ec0fc02a996e8d5e40b83b0917dab8aa2339a1d22ed5cad0e",
+ "chksum_sha256": "7442893271080723d682b5872b45909e0dd7832305a9ff3c5c9ba5edba5cd857",
"format": 1
},
{
- "name": "tests/integration/targets/junos_banner/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_ospfv2/tests/netconf/gathered.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c5a6cb013c7e5d0568303d0ee58bcd26dcd3448f3b06dd34c9d599c34bd3f36a",
"format": 1
},
{
- "name": "tests/integration/targets/junos_banner/meta/main.yml",
+ "name": "tests/integration/targets/junos_ospfv2/tests/netconf/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
+ "chksum_sha256": "9a4b7443f9567b41727a5d357e31f0495ef92d9b8d3d928f8567f8b2894f921a",
"format": 1
},
{
- "name": "tests/integration/targets/junos_banner/defaults",
+ "name": "tests/integration/targets/junos_ospfv2/tests/netconf/fixtures",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_banner/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_ospfv2/tests/netconf/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
+ "chksum_sha256": "a690256e56d841b0e69010998ef63e9816121db1ac2a994f8800578e206c9fa2",
"format": 1
},
{
- "name": "tests/integration/targets/junos_banner/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_ospfv2/tests/netconf/deleted.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "17825b257c688893464a0094b309efd2e078fb8157f8477f5328a1ab6c5fbd97",
"format": 1
},
{
- "name": "tests/integration/targets/junos_banner/tests/netconf",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_ospfv2/tests/netconf/_initial_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "973f85046cde058aa91399f01aafb04c042c52c802538639c1770c55cecf0c8d",
"format": 1
},
{
- "name": "tests/integration/targets/junos_banner/tests/netconf/basic.yaml",
+ "name": "tests/integration/targets/junos_ospfv2/tests/netconf/_reset_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "560415c9318dc6aa3e10ceb7116f47daafb741ca68c148a09bc1acc3aa169354",
+ "chksum_sha256": "aa0d973fb111eb73bcbe02116f395956d21c2fd6a4c8a64cba5b53feb156a3dd",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies_global",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_ospfv2/tests/netconf/overridden.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "cc2334e44cc814227f9f8c50446f4e005363b94642fd37455b8f902dde65ab24",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies_global/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_ospfv2/tests/netconf/merged.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "82ecb5453d4c76f99446240c9c1fa2d7f5fc45304d559325184bce03ba0f64a6",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies_global/tasks/main.yaml",
+ "name": "tests/integration/targets/junos_ospfv2/tests/netconf/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6859e775c6926fd41248bfce2e80a71c7e08cc626a5cf5882bbd5134e1e58e46",
+ "chksum_sha256": "f769f1442dfcb26eeefc4a20808e773eb1d5db8b0ce698e5af0f0d43405f7e28",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies_global/tasks/netconf.yaml",
+ "name": "tests/integration/targets/junos_ospfv2/tests/netconf/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
+ "chksum_sha256": "f078d10b5fe4ca0a4caa44b968c5a9aead11e220f22ffe5d00845d02c8f881da",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies_global/meta",
+ "name": "tests/integration/targets/junos_ospfv2/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies_global/meta/main.yml",
+ "name": "tests/integration/targets/junos_ospfv2/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_security_policies_global/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "5faeba3c6c57e0ac48c1b15188434458eec4ad6520920210114d67e2a65aac57",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies_global/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_ospfv2/tasks/netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies_global/tests",
+ "name": "tests/integration/targets/junos_lacp_interfaces",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies_global/tests/netconf",
+ "name": "tests/integration/targets/junos_lacp_interfaces/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies_global/tests/netconf/deleted.yaml",
+ "name": "tests/integration/targets/junos_lacp_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bb80b4f48c8de02108eb0fea7d780d64e59eb7326362ac192eb782391cf7181c",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies_global/tests/netconf/gathered.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "16c2a1698ee0dbd5edc0c239f8986c08f8159528fe3b7990ed5873f60d003f8b",
+ "name": "tests/integration/targets/junos_lacp_interfaces/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies_global/tests/netconf/empty_config.yaml",
+ "name": "tests/integration/targets/junos_lacp_interfaces/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fafc2da62cf712d0117ae338fe363b040f5c7dd4969ce287dfa3318f6ac4423f",
+ "chksum_sha256": "efb275d54a7c21fd007e1d1c8b10b65d148a9121af425a4e7fbd60abacd23fc8",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies_global/tests/netconf/_initial_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ae8128c308746259f25d9bc41d97ee15b5c7405e674891d8ae599fc3e2328879",
+ "name": "tests/integration/targets/junos_lacp_interfaces/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies_global/tests/netconf/merged.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a589f47fc49da28c7f380734b48db2f682c1b2e432d77ab227d2f6f30682ff39",
+ "name": "tests/integration/targets/junos_lacp_interfaces/tests/netconf",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies_global/tests/netconf/overridden.yaml",
+ "name": "tests/integration/targets/junos_lacp_interfaces/tests/netconf/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "935fcb42d47d2cfe6ea5cd8aba20e8a83461f822ae45de8e2881c3393ae32139",
+ "chksum_sha256": "5507c1e13968eac2c90f6662a91ba3420c9af38e538372e9a64534cdd5952c61",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies_global/tests/netconf/rtt.yml",
+ "name": "tests/integration/targets/junos_lacp_interfaces/tests/netconf/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "251482cdb55715eb323cb0c10b29292c8e73ba800d0fed4f4c192a846b25877a",
+ "chksum_sha256": "1ada2eacba8eb22edcabe39600c85b3d8089699d0664aeb08fe7ff322e910fca",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies_global/tests/netconf/_populate_config.yaml",
+ "name": "tests/integration/targets/junos_lacp_interfaces/tests/netconf/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b7bb3d4ac43a4b6c4920580458fde90451217805f6fbe2e8d26507559f083519",
+ "chksum_sha256": "1215e9671a99210505a60d59ba0f148a8ec0fa67d333f82d3ec0fb7d8d872dcb",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies_global/tests/netconf/fixtures",
+ "name": "tests/integration/targets/junos_lacp_interfaces/tests/netconf/fixtures",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies_global/tests/netconf/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/junos_lacp_interfaces/tests/netconf/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4a98bcfdfa2c2acbd0f2bc2061457d855d4e18bfccd39d517aa1fb43fc2ade15",
+ "chksum_sha256": "77112338be093f7a03c25fd8749011e7ad7de2066542b44c09f291405a76da00",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies_global/tests/netconf/replaced.yaml",
+ "name": "tests/integration/targets/junos_lacp_interfaces/tests/netconf/_base_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4f42d4ccdf3bbc1b40266f59bb4bf7bb5d17522b9f9024108c8e04b749cd0589",
+ "chksum_sha256": "7782df6c4b604977c0c7f281092fbf10cbc91720007ef8e67dba22003450d145",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies_global/tests/netconf/parsed.yaml",
+ "name": "tests/integration/targets/junos_lacp_interfaces/tests/netconf/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4905f9e7594d4b1d98f41721a16a66a810b538fbc0d6a85c0ce71f352c251523",
+ "chksum_sha256": "d1add93a918bfef3d70aef062c3aae94a47d1b3716a74b89358e966283c08ccf",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies_global/tests/netconf/_reset_config.yaml",
+ "name": "tests/integration/targets/junos_lacp_interfaces/tests/netconf/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "95666f3ea0c587421ce2de87a8d6335bbfff236e8b4d1a9835a0278f186867cd",
+ "chksum_sha256": "cd919eaf78c0d5b2990f067ae16f1402f344ace9925c189958f7067884345d09",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies_global/tests/netconf/rendered.yaml",
+ "name": "tests/integration/targets/junos_lacp_interfaces/tests/netconf/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ac117f64285489963952a8c90bcf8a5eb34e6f73f47814300043e78bee1efce9",
+ "chksum_sha256": "35ee38eac192f14a4904e7a0255a696112a831ecdf2a5c24f74a097f4500252c",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies_global/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_lacp_interfaces/tests/netconf/replaced.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9e01243ac9906911f80837437215ddaaa5f2a25167bf042048a974f0b209500f",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies_global/vars/main.yaml",
+ "name": "tests/integration/targets/junos_lacp_interfaces/tests/netconf/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cc9a26cdbd03e746f437f26100d24dbea854043ca957d63a3238e8da719c29e9",
+ "chksum_sha256": "498586a44d564daabbc39fc40cb7d8a4469f5882406a8ab46dc065412556c947",
"format": 1
},
{
- "name": "tests/integration/targets/junos_netconf",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_lacp_interfaces/tests/netconf/overridden.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0d53434db13dd5c50d5a7cd84e3403b617f4c551b6aa7f51e298d0385de30133",
"format": 1
},
{
- "name": "tests/integration/targets/junos_netconf/tasks",
+ "name": "tests/integration/targets/junos_lacp_interfaces/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_netconf/tasks/main.yaml",
+ "name": "tests/integration/targets/junos_lacp_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aa875f9fe92d7067f287fc4dbfb86e48469088e4f4d18ce116da50ca903ee0f7",
+ "chksum_sha256": "da661e43be2450ce0a58c2d1bd37b7670c88e33fba0da29cd410c6f23e189b9f",
"format": 1
},
{
- "name": "tests/integration/targets/junos_netconf/tasks/cli.yaml",
+ "name": "tests/integration/targets/junos_lacp_interfaces/tasks/netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "826c7e9a0626f7e2c4e1f2565a026941489817111fe1c3013140672889e409ea",
+ "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_netconf/defaults",
+ "name": "tests/integration/targets/junos_snmp_server",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_netconf/defaults/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_netconf/tests",
+ "name": "tests/integration/targets/junos_snmp_server/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_netconf/tests/cli",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_snmp_server/defaults/main.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_netconf/tests/cli/netconf.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3823390234f45e755bc5d70615e1cc5e3d30ee5443be234fb4e8c9e788cee4b6",
+ "name": "tests/integration/targets/junos_snmp_server/vars",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_netconf/tests/cli/changeport.yaml",
+ "name": "tests/integration/targets/junos_snmp_server/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d37e2286b38da041dcf797bf980112ec1d49cde6a186eef9d07888ca60ef40af",
+ "chksum_sha256": "e3b78ff73f201d89a20ea8a6caee05dc207b6b68dc4c42e2790474775f17a28f",
"format": 1
},
{
- "name": "tests/integration/targets/junos_netconf/tests/utils",
+ "name": "tests/integration/targets/junos_snmp_server/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_netconf/tests/utils/junos_command.yaml",
+ "name": "tests/integration/targets/junos_snmp_server/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fe2b80159d9e159e367a89bbfaee14d1ad2a2a09c3ab0968e5891ab6adb9cee3",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies",
+ "name": "tests/integration/targets/junos_snmp_server/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies/tasks",
+ "name": "tests/integration/targets/junos_snmp_server/tests/netconf",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies/tasks/main.yaml",
+ "name": "tests/integration/targets/junos_snmp_server/tests/netconf/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6859e775c6926fd41248bfce2e80a71c7e08cc626a5cf5882bbd5134e1e58e46",
+ "chksum_sha256": "05b7d590b4a4a01cef48c86b56ba744e3b28e8fe1aab50a1ebcad40ac25fb79c",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies/tasks/netconf.yaml",
+ "name": "tests/integration/targets/junos_snmp_server/tests/netconf/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_security_policies/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "dba186fea16ddf43f92a52e12447abb35f8768fa4ca4d4e197f40f4d67bbc6d9",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies/meta/main.yml",
+ "name": "tests/integration/targets/junos_snmp_server/tests/netconf/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
+ "chksum_sha256": "a10f5a5ea42df2a8c92afedc170caa9fb6b9bf04a3799e93f854f3a7faca8392",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_snmp_server/tests/netconf/gathered.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6efb62f03f36c571dd83d43b78e7497edde18648430fea073e5ec4dd671b8201",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_snmp_server/tests/netconf/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "ec3e130e584202fe4c138bb15e0474f12f42d852180097e5723932d797e8842f",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies/tests",
+ "name": "tests/integration/targets/junos_snmp_server/tests/netconf/fixtures",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies/tests/netconf",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_snmp_server/tests/netconf/fixtures/parsed.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "75d7ce74bc974651f36b79e38f6d82fa194348da859316ba96f7c8b46a462746",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies/tests/netconf/deleted.yaml",
+ "name": "tests/integration/targets/junos_snmp_server/tests/netconf/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "39cd5df63bd55f3ddf784e611627b54029596c80fc25189fd00499a82de7d3ba",
+ "chksum_sha256": "92e2829fa0cb2f63063f5aace2377e2921f9321dd1e5268674a62dbd0d77a224",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies/tests/netconf/gathered.yaml",
+ "name": "tests/integration/targets/junos_snmp_server/tests/netconf/_initial_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e26d1bb898a8b80c5a4409fa8347b4686d22d68995c386b88b1acea58052b98b",
+ "chksum_sha256": "9f4be4ad7d63358e8190d2fc6fcda1669d77b59e1e0d232e15ad338974d07c3a",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies/tests/netconf/empty_config.yaml",
+ "name": "tests/integration/targets/junos_snmp_server/tests/netconf/_reset_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3cb5abb3511da59cc841edf9b3120380ace3f373903d49a8df724d34940aefce",
+ "chksum_sha256": "f3c990bf8e5f662b59917bc792379f273fffe3268231ab5690d20283782ea3d5",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies/tests/netconf/_initial_config.yaml",
+ "name": "tests/integration/targets/junos_snmp_server/tests/netconf/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "63cb2d305f3b2b8375cfe110ccc027d605eb168ba862699a3b3a544b8d87296f",
+ "chksum_sha256": "8cadf8b80457c955f22c1080c709652ac57874cd2ed8e5093086625d3e4fbc60",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies/tests/netconf/merged.yaml",
+ "name": "tests/integration/targets/junos_snmp_server/tests/netconf/backups",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_snmp_server/tests/netconf/backups/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a7b3535922126dceed45fd5938029e83cd6184a6d2385e22e5ebc6bf5cd41f75",
+ "chksum_sha256": "a199720ea8a377c143b7563572b60e1e5bb12f929695b914785cd436ccb89d4a",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies/tests/netconf/overridden.yaml",
+ "name": "tests/integration/targets/junos_snmp_server/tests/netconf/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "76982131c022074bcf992f16061721685fa1136d527793ff18ff6470b0c1fb93",
+ "chksum_sha256": "dc9d8ff5760507223877b37bb65c6083f14304740ead70129662304267d8324c",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies/tests/netconf/rtt.yml",
+ "name": "tests/integration/targets/junos_snmp_server/tests/netconf/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5ce4ffcc6b729daec418088a402e4625e7ac2b65af7260c79adb6f11c8ed2ec5",
+ "chksum_sha256": "5b04a13a51a36b464330f8caf574c37db0e8da91c0149bfd246aa070c948c7b2",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies/tests/netconf/_populate_config.yaml",
+ "name": "tests/integration/targets/junos_snmp_server/tests/netconf/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f28b62ace16039ab3d1a158658ad0eee2a5aa1b60759cf1f61e6f2b1257254df",
+ "chksum_sha256": "a7ff7fb0534ca8b333f965e51ff3fd5ebe47e18dc407ccf019e1d2e7f3e568d4",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies/tests/netconf/fixtures",
+ "name": "tests/integration/targets/junos_snmp_server/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies/tests/netconf/fixtures/parsed.xml",
+ "name": "tests/integration/targets/junos_snmp_server/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c675cea3f99d7bc6a5a9416e9ba20e6745aa981968cab970fb378e6ee37ce5aa",
+ "chksum_sha256": "6859e775c6926fd41248bfce2e80a71c7e08cc626a5cf5882bbd5134e1e58e46",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies/tests/netconf/replaced.yaml",
+ "name": "tests/integration/targets/junos_snmp_server/tasks/netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ecf1c66717a28d45cca3e598f7209834214cabedd726c3471116221f2e11f638",
+ "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies/tests/netconf/parsed.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "016771aea305560bd8dd151b5c956fc76a005fb72cb9499de0c379c194d1a704",
+ "name": "tests/integration/targets/junos_l3_interfaces",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies/tests/netconf/_reset_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "904c7f297382fe7a7994ee762c1baa400d1350c1b305e6969014d151de1d1a9a",
+ "name": "tests/integration/targets/junos_l3_interfaces/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies/tests/netconf/rendered.yaml",
+ "name": "tests/integration/targets/junos_l3_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e14fe35238c7a90cbc7404ad0f44596371a2eebaaa1a212d64f6e34cbffb21eb",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies/vars",
+ "name": "tests/integration/targets/junos_l3_interfaces/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_security_policies/vars/main.yaml",
+ "name": "tests/integration/targets/junos_l3_interfaces/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4deaf51b2f16c99c7681725fb943e6aebbd1148a35a640be0ab3eb755840ba3a",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
"format": 1
},
{
- "name": "tests/integration/targets/junos_smoke",
+ "name": "tests/integration/targets/junos_l3_interfaces/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_smoke/tasks",
+ "name": "tests/integration/targets/junos_l3_interfaces/tests/netconf",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_smoke/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1ed6aab865c43fdcad8b6871d5800e82ca311f8f3823e56bca3d06b9bf7ba94c",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_smoke/tasks/cli.yaml",
+ "name": "tests/integration/targets/junos_l3_interfaces/tests/netconf/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7bfbffe2f1c1a542332fdcbc89d4a3854ff15259e01a6bafef86a83fae35e3c2",
+ "chksum_sha256": "aae73401a3875d3e300c6cb1feaecfb90dda0960cb8a5e90ea0315542f199dc9",
"format": 1
},
{
- "name": "tests/integration/targets/junos_smoke/tasks/netconf.yaml",
+ "name": "tests/integration/targets/junos_l3_interfaces/tests/netconf/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fc09c85d3d223c19ea63a3fae43eb5638f3b5e6651609cf4d321208639122cbd",
+ "chksum_sha256": "800b45c331345dde3e54b0b067ff922982049dfa5f38a66d4dd3d84aba033581",
"format": 1
},
{
- "name": "tests/integration/targets/junos_smoke/meta",
+ "name": "tests/integration/targets/junos_l3_interfaces/tests/netconf/fixtures",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_smoke/meta/main.yml",
+ "name": "tests/integration/targets/junos_l3_interfaces/tests/netconf/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_smoke/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "e1de14afc1f1c7fdfd493a909abb1a7750c41e523202b5f1b28b5e72697dc392",
"format": 1
},
{
- "name": "tests/integration/targets/junos_smoke/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_l3_interfaces/tests/netconf/junos_l3_interfaces.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_smoke/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "13a0fdaad9f2c794ac4176d880607e72107f644d0cb12e7751bb487b4ad59f55",
"format": 1
},
{
- "name": "tests/integration/targets/junos_smoke/tests/cli",
+ "name": "tests/integration/targets/junos_l3_interfaces/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_smoke/tests/cli/caching.yaml",
+ "name": "tests/integration/targets/junos_l3_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "63d3d2578702ff3bc51e29d16b7b4e63ed28edbddda8627ba2fd65b29f07315e",
+ "chksum_sha256": "4239ce4ad6fc58a529cc073139b7b2abbdba62ae32bfc234e309af398d365eb6",
"format": 1
},
{
- "name": "tests/integration/targets/junos_smoke/tests/cli/reboot.yaml",
+ "name": "tests/integration/targets/junos_l3_interfaces/tasks/netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "54db130663eff024eb5b3fb6ac61d79ffae1ded3c341a1062579ae1c63be4e11",
+ "chksum_sha256": "07a74b16a6595dcb47295bc6af7c5d3d58f1e5920c9c3d9ff99d2c0b644897a7",
"format": 1
},
{
- "name": "tests/integration/targets/junos_smoke/tests/netconf",
+ "name": "tests/integration/targets/prepare_junos_tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_smoke/tests/netconf/common_utils.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "86f1d6186d9036ff2cda9b18be64f04264be2052476b9585b46f1cc18393299a",
+ "name": "tests/integration/targets/prepare_junos_tests/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_smoke/tests/netconf/module_utils_junos.yaml",
+ "name": "tests/integration/targets/prepare_junos_tests/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "591380db5e46372be7cdbe63d11848b9cef38dd8e57da857aad9739025919641",
+ "chksum_sha256": "851860fe2ed1258710d7fcf89ac5b7d8c3c87755e89ca56fdd79bea022eb2b92",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ntp_global",
+ "name": "tests/integration/targets/prepare_junos_tests/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_ntp_global/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/prepare_junos_tests/tasks/prepare.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "74b314e77e169d5a6035c8142bc45f78a868d1fccecef3e27cb3f3c750f72959",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ntp_global/tasks/main.yaml",
+ "name": "tests/integration/targets/prepare_junos_tests/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4239ce4ad6fc58a529cc073139b7b2abbdba62ae32bfc234e309af398d365eb6",
+ "chksum_sha256": "a8893cac7b99500ebfe79f20e4944144677404e0d3816991427c7a55add78d10",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ntp_global/tasks/netconf.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
+ "name": "tests/integration/targets/junos_ospf_interfaces",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_ntp_global/meta",
+ "name": "tests/integration/targets/junos_ospf_interfaces/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_ntp_global/meta/main.yml",
+ "name": "tests/integration/targets/junos_ospf_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ntp_global/defaults",
+ "name": "tests/integration/targets/junos_ospf_interfaces/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_ntp_global/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_ospf_interfaces/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ntp_global/tests",
+ "name": "tests/integration/targets/junos_ospf_interfaces/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_ntp_global/tests/netconf",
+ "name": "tests/integration/targets/junos_ospf_interfaces/tests/netconf",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_ntp_global/tests/netconf/deleted.yaml",
+ "name": "tests/integration/targets/junos_ospf_interfaces/tests/netconf/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5bea4a301b248089d1242c4856ce936920e927adf0f90bc87340ffdde692bb7c",
+ "chksum_sha256": "fe59572095f90670742714b59e6e2927e7586519f509e1f47ab61cff0f77c894",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ntp_global/tests/netconf/gathered.yaml",
+ "name": "tests/integration/targets/junos_ospf_interfaces/tests/netconf/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f0c1fb4c8cf84929a522258d16fae2b12ae43b0bc2583c53ff1947c696b7219e",
+ "chksum_sha256": "768de6cab48ef7da91e3a62d9c1b220e11ebec0a87edc69c0f5434d518ced61c",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ntp_global/tests/netconf/empty_config.yaml",
+ "name": "tests/integration/targets/junos_ospf_interfaces/tests/netconf/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "753d4fd7d42e83bbb8a3ce79a2461ae524c7562be29ba448400ce1cd7444d7c5",
+ "chksum_sha256": "d638bd2d4b3aeb159dae307c1deadf8ceb7d1f750beda0f59aca094c4873924b",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ntp_global/tests/netconf/_initial_config.yaml",
+ "name": "tests/integration/targets/junos_ospf_interfaces/tests/netconf/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "125dc25abbdefc1a5141d4e4b804774970b0edb77b4e7cb39f9aed1539671b17",
+ "chksum_sha256": "97384a43d4050a4fcd2e7d6bc07b458ac7123a090a225decd7a4563d9aba491a",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ntp_global/tests/netconf/backups",
+ "name": "tests/integration/targets/junos_ospf_interfaces/tests/netconf/fixtures",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_ntp_global/tests/netconf/backups/empty_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a199720ea8a377c143b7563572b60e1e5bb12f929695b914785cd436ccb89d4a",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_ntp_global/tests/netconf/merged.yaml",
+ "name": "tests/integration/targets/junos_ospf_interfaces/tests/netconf/fixtures/parse_ospf_router_id.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "875d944f33fb23214309cf2e6f915a7574d52b491c889bfea7d3fa3acb28f3b9",
+ "chksum_sha256": "a0460d8722acf4ccb04f2421ea81f55174132aec6b6f5aff0f3164a8378d7462",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ntp_global/tests/netconf/overridden.yaml",
+ "name": "tests/integration/targets/junos_ospf_interfaces/tests/netconf/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4f3e6613c568b4ed1e5d6f2e4a547cc0e2a256962622b8c8696f09e2e87a4889",
+ "chksum_sha256": "f60999fbccc0af10279afdf8e6f48d83e58d392e0b7c2559e11747d039b261ee",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ntp_global/tests/netconf/rtt.yml",
+ "name": "tests/integration/targets/junos_ospf_interfaces/tests/netconf/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "63461bfdd8462a284de6db8f29fbc55a93ba7ba225ed31cd7dc87bc114239db7",
+ "chksum_sha256": "847f8aba20c0bcaf2784b4838a5a5e7ecdf1b796e81534aff0bffc84da5ef14e",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ntp_global/tests/netconf/_populate_config.yaml",
+ "name": "tests/integration/targets/junos_ospf_interfaces/tests/netconf/_initial_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2828dbbe09b33274e4134fc6961743ca83b7e62889d178f07b71c0d2d6284cc8",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_ntp_global/tests/netconf/fixtures",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "a4c7314dd0a394dfe668ed11858428df5b2c29b573ce7cda69c3328a266a1419",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ntp_global/tests/netconf/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/junos_ospf_interfaces/tests/netconf/_reset_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bd14466157e5abe475ca8fa042823fb202ce9d4d5e507b377f1548a1cc73940d",
+ "chksum_sha256": "d87ee05d0ba2b1954bfdd3f9fd5c8671a94ea99331641ce8056515ca7fd7b5fb",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ntp_global/tests/netconf/replaced.yaml",
+ "name": "tests/integration/targets/junos_ospf_interfaces/tests/netconf/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f9be81e5e1dc8e6df7b47cb2acea87f32e01204b2c1b499aee7b9d4044c4d01f",
+ "chksum_sha256": "24468c08de78c5021ba88a104de643df2e29ef6057a7071a9f5df57fe6de9898",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ntp_global/tests/netconf/parsed.yaml",
+ "name": "tests/integration/targets/junos_ospf_interfaces/tests/netconf/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "06eb47716788d5240ba254ecefdb3f1d409876044e37eff9497968ffb2242777",
+ "chksum_sha256": "89d7df715e2566cbb2623be0dae95dd17499fa0bb60ac266e692b327441e1fca",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ntp_global/tests/netconf/_reset_config.yaml",
+ "name": "tests/integration/targets/junos_ospf_interfaces/tests/netconf/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9d00d9a386f386ddb75b879de83a5ee69411386a8dedac51dccc0088290a5ee1",
+ "chksum_sha256": "d2a0a5e986d21f4febfc5d62bf68182848d907d8e4fa5dce4ac84ce608ddb5ce",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ntp_global/tests/netconf/rendered.yaml",
+ "name": "tests/integration/targets/junos_ospf_interfaces/tests/netconf/merged_update.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0223fd85a1c3f6e28b13edac1b465269dcdc5ea469049fad798edec9ff6f75cb",
+ "chksum_sha256": "92c2ca40e73c8e2fa9addbe09f6a07743a7434233b046d5780684bf21e2b3f5a",
"format": 1
},
{
- "name": "tests/integration/targets/junos_ntp_global/vars",
+ "name": "tests/integration/targets/junos_ospf_interfaces/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_ntp_global/vars/main.yaml",
+ "name": "tests/integration/targets/junos_ospf_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8942f742ca8c7e92dfe7a19192742bcd5ece3d60e64ecdd055e6744f59e1b3b1",
+ "chksum_sha256": "5faeba3c6c57e0ac48c1b15188434458eec4ad6520920210114d67e2a65aac57",
"format": 1
},
{
- "name": "tests/integration/targets/junos_prefix_lists",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_ospf_interfaces/tasks/netconf.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_prefix_lists/tasks",
+ "name": "tests/integration/targets/junos_ntp_global",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_prefix_lists/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6859e775c6926fd41248bfce2e80a71c7e08cc626a5cf5882bbd5134e1e58e46",
+ "name": "tests/integration/targets/junos_ntp_global/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_prefix_lists/tasks/netconf.yaml",
+ "name": "tests/integration/targets/junos_ntp_global/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_prefix_lists/meta",
+ "name": "tests/integration/targets/junos_ntp_global/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_prefix_lists/meta/main.yml",
+ "name": "tests/integration/targets/junos_ntp_global/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
+ "chksum_sha256": "8942f742ca8c7e92dfe7a19192742bcd5ece3d60e64ecdd055e6744f59e1b3b1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_prefix_lists/defaults",
+ "name": "tests/integration/targets/junos_ntp_global/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_prefix_lists/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_ntp_global/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
"format": 1
},
{
- "name": "tests/integration/targets/junos_prefix_lists/tests",
+ "name": "tests/integration/targets/junos_ntp_global/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_prefix_lists/tests/netconf",
+ "name": "tests/integration/targets/junos_ntp_global/tests/netconf",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_prefix_lists/tests/netconf/deleted.yaml",
+ "name": "tests/integration/targets/junos_ntp_global/tests/netconf/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "260cdebe02248e2994669ddf2406dacf75f35d794c7aa1bb632fc206aab4969e",
+ "chksum_sha256": "06eb47716788d5240ba254ecefdb3f1d409876044e37eff9497968ffb2242777",
"format": 1
},
{
- "name": "tests/integration/targets/junos_prefix_lists/tests/netconf/gathered.yaml",
+ "name": "tests/integration/targets/junos_ntp_global/tests/netconf/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bd88ebcdf63e03aa530319364228caa369894890daf117f259ba892e53973a60",
+ "chksum_sha256": "2828dbbe09b33274e4134fc6961743ca83b7e62889d178f07b71c0d2d6284cc8",
"format": 1
},
{
- "name": "tests/integration/targets/junos_prefix_lists/tests/netconf/empty_config.yaml",
+ "name": "tests/integration/targets/junos_ntp_global/tests/netconf/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "99934f97a7d51eb4294206cbe75acc56c55895b6decbe884b613055e2179fc54",
+ "chksum_sha256": "0223fd85a1c3f6e28b13edac1b465269dcdc5ea469049fad798edec9ff6f75cb",
"format": 1
},
{
- "name": "tests/integration/targets/junos_prefix_lists/tests/netconf/merged.yaml",
+ "name": "tests/integration/targets/junos_ntp_global/tests/netconf/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0f4c5c4214a07fe02adb0b614cae5b5ba8cef25129ace9de71e03ef43edd0dcf",
+ "chksum_sha256": "f0c1fb4c8cf84929a522258d16fae2b12ae43b0bc2583c53ff1947c696b7219e",
"format": 1
},
{
- "name": "tests/integration/targets/junos_prefix_lists/tests/netconf/overridden.yaml",
+ "name": "tests/integration/targets/junos_ntp_global/tests/netconf/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4f3451d6348f96082b66fc6d5b7c0fd7ab01d3e77e22f69090177fda3fdf7bc5",
+ "chksum_sha256": "753d4fd7d42e83bbb8a3ce79a2461ae524c7562be29ba448400ce1cd7444d7c5",
"format": 1
},
{
- "name": "tests/integration/targets/junos_prefix_lists/tests/netconf/fixtures",
+ "name": "tests/integration/targets/junos_ntp_global/tests/netconf/fixtures",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_prefix_lists/tests/netconf/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/junos_ntp_global/tests/netconf/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2cfa6379cd3bac4d9b364334ad4812ee7ec214ed4f113fa5d5c9689148261e4d",
+ "chksum_sha256": "bd14466157e5abe475ca8fa042823fb202ce9d4d5e507b377f1548a1cc73940d",
"format": 1
},
{
- "name": "tests/integration/targets/junos_prefix_lists/tests/netconf/replaced.yaml",
+ "name": "tests/integration/targets/junos_ntp_global/tests/netconf/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9118328badb1bdd0fb390c0cd680051da3810adb7417c8d74a9560ae25f6daf7",
+ "chksum_sha256": "5bea4a301b248089d1242c4856ce936920e927adf0f90bc87340ffdde692bb7c",
"format": 1
},
{
- "name": "tests/integration/targets/junos_prefix_lists/tests/netconf/parsed.yaml",
+ "name": "tests/integration/targets/junos_ntp_global/tests/netconf/rtt.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "148be2f8a0bfff029ecc9b20ce6de3c0c2504c0a3f44e797f1523549d269e38d",
+ "chksum_sha256": "63461bfdd8462a284de6db8f29fbc55a93ba7ba225ed31cd7dc87bc114239db7",
"format": 1
},
{
- "name": "tests/integration/targets/junos_prefix_lists/tests/netconf/_reset_config.yaml",
+ "name": "tests/integration/targets/junos_ntp_global/tests/netconf/_initial_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eb71d58e72f9a854cbcf5528dadd4abf4134f8284c86e1f46fdc2e3b4e43a79d",
+ "chksum_sha256": "125dc25abbdefc1a5141d4e4b804774970b0edb77b4e7cb39f9aed1539671b17",
"format": 1
},
{
- "name": "tests/integration/targets/junos_prefix_lists/tests/netconf/rendered.yaml",
+ "name": "tests/integration/targets/junos_ntp_global/tests/netconf/_reset_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "841e97d3c2594908704ec3742b171855dcc0bd3e66f350ac38335219c99a9a43",
+ "chksum_sha256": "9d00d9a386f386ddb75b879de83a5ee69411386a8dedac51dccc0088290a5ee1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_global",
+ "name": "tests/integration/targets/junos_ntp_global/tests/netconf/overridden.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4f3e6613c568b4ed1e5d6f2e4a547cc0e2a256962622b8c8696f09e2e87a4889",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_ntp_global/tests/netconf/backups",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_global/tasks",
+ "name": "tests/integration/targets/junos_ntp_global/tests/netconf/backups/empty_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a199720ea8a377c143b7563572b60e1e5bb12f929695b914785cd436ccb89d4a",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_ntp_global/tests/netconf/merged.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "875d944f33fb23214309cf2e6f915a7574d52b491c889bfea7d3fa3acb28f3b9",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_ntp_global/tests/netconf/replaced.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f9be81e5e1dc8e6df7b47cb2acea87f32e01204b2c1b499aee7b9d4044c4d01f",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_ntp_global/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_global/tasks/main.yaml",
+ "name": "tests/integration/targets/junos_ntp_global/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "4239ce4ad6fc58a529cc073139b7b2abbdba62ae32bfc234e309af398d365eb6",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_global/tasks/netconf.yaml",
+ "name": "tests/integration/targets/junos_ntp_global/tasks/netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_global/meta",
+ "name": "tests/integration/targets/junos_prefix_lists",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_global/meta/main.yml",
+ "name": "tests/integration/targets/junos_prefix_lists/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_prefix_lists/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_global/defaults",
+ "name": "tests/integration/targets/junos_prefix_lists/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_global/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_prefix_lists/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_global/tests",
+ "name": "tests/integration/targets/junos_prefix_lists/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_global/tests/netconf",
+ "name": "tests/integration/targets/junos_prefix_lists/tests/netconf",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_global/tests/netconf/_remove_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7678b66e0721e989ac00cb0fabc55742be8954ee0fdbfaa4345c3068b4e1d7d4",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_lldp_global/tests/netconf/deleted.yaml",
+ "name": "tests/integration/targets/junos_prefix_lists/tests/netconf/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1bfa3e00a1ee208f76f178cb14758673ee897155206b335bfb79b822bda7d809",
+ "chksum_sha256": "148be2f8a0bfff029ecc9b20ce6de3c0c2504c0a3f44e797f1523549d269e38d",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_global/tests/netconf/gathered.yaml",
+ "name": "tests/integration/targets/junos_prefix_lists/tests/netconf/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d7b7d07fb1999244297de1f6b4586ae441d7ac97d9cfa8ce29e8efc98d4f4b4c",
+ "chksum_sha256": "841e97d3c2594908704ec3742b171855dcc0bd3e66f350ac38335219c99a9a43",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_global/tests/netconf/rtt.yaml",
+ "name": "tests/integration/targets/junos_prefix_lists/tests/netconf/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b7516dd5a2f70ddc84f498cb4119e6f66d077a0e5dac0360a943531a2b6bbcd4",
+ "chksum_sha256": "bd88ebcdf63e03aa530319364228caa369894890daf117f259ba892e53973a60",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_global/tests/netconf/merged.yaml",
+ "name": "tests/integration/targets/junos_prefix_lists/tests/netconf/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6e3d2216d5e7a2065ca2473544679e8ccd268d9768d4e3be595dff8bd82e714",
+ "chksum_sha256": "99934f97a7d51eb4294206cbe75acc56c55895b6decbe884b613055e2179fc54",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_global/tests/netconf/fixtures",
+ "name": "tests/integration/targets/junos_prefix_lists/tests/netconf/fixtures",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_global/tests/netconf/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/junos_prefix_lists/tests/netconf/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dd2bd6bf5e3586c5121310490846758eeb302931b2b2a3fbce16e9405c849f67",
+ "chksum_sha256": "2cfa6379cd3bac4d9b364334ad4812ee7ec214ed4f113fa5d5c9689148261e4d",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_global/tests/netconf/replaced.yaml",
+ "name": "tests/integration/targets/junos_prefix_lists/tests/netconf/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "40f118df09dc8e09b05a021a4968bca80384856a19502d0474c386c64fd0ca1b",
+ "chksum_sha256": "260cdebe02248e2994669ddf2406dacf75f35d794c7aa1bb632fc206aab4969e",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_global/tests/netconf/parsed.yaml",
+ "name": "tests/integration/targets/junos_prefix_lists/tests/netconf/_reset_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bfc0302be4a1562069cc24b33ad2f6032ec18c776cae96f47ac225a17caf4168",
+ "chksum_sha256": "eb71d58e72f9a854cbcf5528dadd4abf4134f8284c86e1f46fdc2e3b4e43a79d",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_global/tests/netconf/rendered.yaml",
+ "name": "tests/integration/targets/junos_prefix_lists/tests/netconf/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "302ab946a8bae94f9da38cc06e80451b1fbd778790ab2de216e309847f7b5425",
+ "chksum_sha256": "4f3451d6348f96082b66fc6d5b7c0fd7ab01d3e77e22f69090177fda3fdf7bc5",
"format": 1
},
{
- "name": "tests/integration/targets/junos_interfaces",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_prefix_lists/tests/netconf/merged.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0f4c5c4214a07fe02adb0b614cae5b5ba8cef25129ace9de71e03ef43edd0dcf",
"format": 1
},
{
- "name": "tests/integration/targets/junos_interfaces/tasks",
+ "name": "tests/integration/targets/junos_prefix_lists/tests/netconf/replaced.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9118328badb1bdd0fb390c0cd680051da3810adb7417c8d74a9560ae25f6daf7",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_prefix_lists/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_interfaces/tasks/main.yaml",
+ "name": "tests/integration/targets/junos_prefix_lists/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "6859e775c6926fd41248bfce2e80a71c7e08cc626a5cf5882bbd5134e1e58e46",
"format": 1
},
{
- "name": "tests/integration/targets/junos_interfaces/tasks/netconf.yaml",
+ "name": "tests/integration/targets/junos_prefix_lists/tasks/netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_interfaces/meta",
+ "name": "tests/integration/targets/junos_system",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_interfaces/meta/main.yaml",
+ "name": "tests/integration/targets/junos_system/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_system/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
- "name": "tests/integration/targets/junos_interfaces/defaults",
+ "name": "tests/integration/targets/junos_system/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_interfaces/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_system/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
"format": 1
},
{
- "name": "tests/integration/targets/junos_interfaces/tests",
+ "name": "tests/integration/targets/junos_system/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_interfaces/tests/netconf",
+ "name": "tests/integration/targets/junos_system/tests/netconf",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_interfaces/tests/netconf/_remove_config.yaml",
+ "name": "tests/integration/targets/junos_system/tests/netconf/basic.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d9825909d170137f0169fb716d817d0aa41e949db1eea8d373f6723f57cba116",
+ "chksum_sha256": "737db05e1953f8db6a60807a390b2ade773dcf92b8f21d3aed93f10aa6a1c87b",
"format": 1
},
{
- "name": "tests/integration/targets/junos_interfaces/tests/netconf/deleted.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "334b7920b11f296e7600cd48baeb18ce5cd288717543853461bc91e022041222",
+ "name": "tests/integration/targets/junos_system/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_interfaces/tests/netconf/gathered.yaml",
+ "name": "tests/integration/targets/junos_system/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6a059ca58a6906d2b6480ac0296a83f7ca7d61af0aaeb5d9ed342299c366bb32",
+ "chksum_sha256": "e727033350980ea9df8bbfde6b874c51150f907f51fa8fc4cc8070e3f50ec5d3",
"format": 1
},
{
- "name": "tests/integration/targets/junos_interfaces/tests/netconf/groups.yaml",
+ "name": "tests/integration/targets/junos_system/tasks/netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9e318dceb6f81af373d743ffa5272a28422a7e5f33f5a958cf2860c839901390",
+ "chksum_sha256": "3006a95309847acbfecc0a9c6cbeaad782956e7814679010a9bbb7782cab4aa8",
"format": 1
},
{
- "name": "tests/integration/targets/junos_interfaces/tests/netconf/_initial_config.yaml",
+ "name": "tests/integration/targets/junos_system/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "14b9c10e6800af658dc1f3fcdfb13e168951de360be87867f15411b43076c223",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/junos_interfaces/tests/netconf/rtt.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "95dc5232d1a73bc72ffb5dfab754c6d9971a24cf422e9001dc60ddaec899da07",
+ "name": "tests/integration/targets/junos_lldp_interfaces",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_interfaces/tests/netconf/merged.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "87e878b3a8097ffcca1fae275d5a643d86456c96f63ea9bafb5b7b7355afd10b",
+ "name": "tests/integration/targets/junos_lldp_interfaces/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_interfaces/tests/netconf/overridden.yaml",
+ "name": "tests/integration/targets/junos_lldp_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "41a3d2ec866ea5cf2258c06ffbbe31038cab3cc1d6f79cdff6a99f88190a39e5",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_interfaces/tests/netconf/fixtures",
+ "name": "tests/integration/targets/junos_lldp_interfaces/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_interfaces/tests/netconf/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/junos_lldp_interfaces/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e0dcf81fecfea2443b931ea13585c90f86328910b71285add801bda7265c3636",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
"format": 1
},
{
- "name": "tests/integration/targets/junos_interfaces/tests/netconf/replaced.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "52957ef7daf70f40bf6a4741a42da5e7f82bbc6b67b830899667b62b6a5a4f85",
+ "name": "tests/integration/targets/junos_lldp_interfaces/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_interfaces/tests/netconf/parsed.yaml",
+ "name": "tests/integration/targets/junos_lldp_interfaces/tests/netconf",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_lldp_interfaces/tests/netconf/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6dc3ad5aaaa7664632e3d9aba1a81f29423fff040085b78ca0eed5aa60530b58",
+ "chksum_sha256": "cb72a9194b46ee33eabbf1e9b67bb9e982f0033cb3ce2b1b19370db793c395e7",
"format": 1
},
{
- "name": "tests/integration/targets/junos_interfaces/tests/netconf/rendered.yaml",
+ "name": "tests/integration/targets/junos_lldp_interfaces/tests/netconf/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a745fb6c5059eb9c77cca93ddb1e91755acaa867ffd5f481395d43ad3728f5a5",
+ "chksum_sha256": "512148e07b86f3dfcda14c159b99af790e502329decce28fdad7dc87996133e7",
"format": 1
},
{
- "name": "tests/integration/targets/junos_acls",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_lldp_interfaces/tests/netconf/gathered.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a91c48dc2e5c6fd960e2bac1fe2f708ef5ec53b73b5c58d4e2953479486935cc",
"format": 1
},
{
- "name": "tests/integration/targets/junos_acls/tasks",
+ "name": "tests/integration/targets/junos_lldp_interfaces/tests/netconf/fixtures",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_acls/tasks/main.yaml",
+ "name": "tests/integration/targets/junos_lldp_interfaces/tests/netconf/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2f6151e4a2a93bc086b790ee3a501cdb7250d7f3f5a71fd06a1b89fe3881b101",
+ "chksum_sha256": "6eb35350f92a0ae0527f94e27daa5506279c181db31be1a332a9f74cee66ad8f",
"format": 1
},
{
- "name": "tests/integration/targets/junos_acls/tasks/netconf.yaml",
+ "name": "tests/integration/targets/junos_lldp_interfaces/tests/netconf/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
+ "chksum_sha256": "f8da092b479832d981e18a403a247a5f398be51d3618bf9bcd6adecd6ade6603",
"format": 1
},
{
- "name": "tests/integration/targets/junos_acls/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_lldp_interfaces/tests/netconf/_remove_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "064e57d0ef1ecabdf04ecbd83a445a257815c58717956e79fe358948b5189c8a",
"format": 1
},
{
- "name": "tests/integration/targets/junos_acls/meta/main.yaml",
+ "name": "tests/integration/targets/junos_lldp_interfaces/tests/netconf/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
+ "chksum_sha256": "b55ace9a6f0bfc64c2403a0dc378ad9ea4992f51795dd7e9580c244247ea688c",
"format": 1
},
{
- "name": "tests/integration/targets/junos_acls/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_lldp_interfaces/tests/netconf/merged.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "724ff8d403f1e5199c4782652db55274115ea8129b74ef73a7c231ef394e2bb4",
"format": 1
},
{
- "name": "tests/integration/targets/junos_acls/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_lldp_interfaces/tests/netconf/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "1f0d41c05af0cfa16b80b0d129425353225ba19ea33206cf6dc4510f6efbffa1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_acls/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_lldp_interfaces/tests/netconf/rtt.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3789650f6288e17a8c1999331b043bf9403a7a5afeac87b647348f1ba9a3c05a",
"format": 1
},
{
- "name": "tests/integration/targets/junos_acls/tests/netconf",
+ "name": "tests/integration/targets/junos_lldp_interfaces/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_acls/tests/netconf/idempotent.yaml",
+ "name": "tests/integration/targets/junos_lldp_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "59eec828971eae9ba7b584d87b4e15dc788791d7e9a438765277f92163cea99f",
+ "chksum_sha256": "4239ce4ad6fc58a529cc073139b7b2abbdba62ae32bfc234e309af398d365eb6",
"format": 1
},
{
- "name": "tests/integration/targets/junos_acls/tests/netconf/deleted.yaml",
+ "name": "tests/integration/targets/junos_lldp_interfaces/tasks/netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4d36906bc9d6cb7839a210f7c688af552aced4332fe6d294c028c99c5d192808",
+ "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_acls/tests/netconf/gathered.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1c78a03edc62e8fe5093769559049598ec54eed6ee34ff1be7a4bd7ca1d0f334",
+ "name": "tests/integration/targets/junos_netconf",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_acls/tests/netconf/reset_policy_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3133d054fb17cecc431da4aacabda89136ea669baf1f930c8dd8bf961d850d2d",
+ "name": "tests/integration/targets/junos_netconf/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_acls/tests/netconf/empty_config.yaml",
+ "name": "tests/integration/targets/junos_netconf/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aa32412720d18dead847f85cd22c35705724541e489f3f045b117265c2da2b75",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
- "name": "tests/integration/targets/junos_acls/tests/netconf/config_policy.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a7b613e7f4b3d626ddc5821c283c9d55ddbba350d37d7c523bf248e0fc599bf4",
+ "name": "tests/integration/targets/junos_netconf/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_acls/tests/netconf/merged.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3f489f5450522cf2ca9078abbba22c104222032df32804d3be2fef2878c426b9",
+ "name": "tests/integration/targets/junos_netconf/tests/utils",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_acls/tests/netconf/overridden.yaml",
+ "name": "tests/integration/targets/junos_netconf/tests/utils/junos_command.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f53e6ab652b057dfaccda221c21c65173c5d42ae6fb848ba73396771a3d5fa63",
+ "chksum_sha256": "fe2b80159d9e159e367a89bbfaee14d1ad2a2a09c3ab0968e5891ab6adb9cee3",
"format": 1
},
{
- "name": "tests/integration/targets/junos_acls/tests/netconf/fixtures",
+ "name": "tests/integration/targets/junos_netconf/tests/cli",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_acls/tests/netconf/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/junos_netconf/tests/cli/changeport.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9692a9cc1e4349d5055f6592296758c5612979b869549b261d7f8cb22076ff52",
+ "chksum_sha256": "d37e2286b38da041dcf797bf980112ec1d49cde6a186eef9d07888ca60ef40af",
"format": 1
},
{
- "name": "tests/integration/targets/junos_acls/tests/netconf/replaced.yaml",
+ "name": "tests/integration/targets/junos_netconf/tests/cli/netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "05b0bcb9ae22db881ed263fa127eac84a234021ee88118dbca5c5656679ff978",
+ "chksum_sha256": "3823390234f45e755bc5d70615e1cc5e3d30ee5443be234fb4e8c9e788cee4b6",
"format": 1
},
{
- "name": "tests/integration/targets/junos_acls/tests/netconf/parsed.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c23da5d3f436231b378533a5ab89b086b7fa023f7a9780461f2d9c9ff3cdcab9",
+ "name": "tests/integration/targets/junos_netconf/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_acls/tests/netconf/_reset_config.yaml",
+ "name": "tests/integration/targets/junos_netconf/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "65b95de98f801d3efbbcc7c4ba777dc8af5e89a18d85876a2296d819243e9a4c",
+ "chksum_sha256": "aa875f9fe92d7067f287fc4dbfb86e48469088e4f4d18ce116da50ca903ee0f7",
"format": 1
},
{
- "name": "tests/integration/targets/junos_acls/tests/netconf/rendered.yaml",
+ "name": "tests/integration/targets/junos_netconf/tasks/cli.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "08e46921760c563c33b03eac99d451230904fffa85ee387ae65f51e61cf05c19",
+ "chksum_sha256": "826c7e9a0626f7e2c4e1f2565a026941489817111fe1c3013140672889e409ea",
"format": 1
},
{
- "name": "tests/integration/targets/junos_vlans",
+ "name": "tests/integration/targets/junos_bgp_global",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_vlans/tasks",
+ "name": "tests/integration/targets/junos_bgp_global/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_vlans/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6859e775c6926fd41248bfce2e80a71c7e08cc626a5cf5882bbd5134e1e58e46",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_vlans/tasks/netconf.yaml",
+ "name": "tests/integration/targets/junos_bgp_global/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_vlans/meta",
+ "name": "tests/integration/targets/junos_bgp_global/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_vlans/meta/main.yaml",
+ "name": "tests/integration/targets/junos_bgp_global/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "efb275d54a7c21fd007e1d1c8b10b65d148a9121af425a4e7fbd60abacd23fc8",
+ "chksum_sha256": "b153b729248015e1aaa1e5bc6f4db2bfa87170e1cd347099f4f4a31fb86a2b02",
"format": 1
},
{
- "name": "tests/integration/targets/junos_vlans/defaults",
+ "name": "tests/integration/targets/junos_bgp_global/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_vlans/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_bgp_global/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
"format": 1
},
{
- "name": "tests/integration/targets/junos_vlans/tests",
+ "name": "tests/integration/targets/junos_bgp_global/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_vlans/tests/netconf",
+ "name": "tests/integration/targets/junos_bgp_global/tests/netconf",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_vlans/tests/netconf/_remove_config.yaml",
+ "name": "tests/integration/targets/junos_bgp_global/tests/netconf/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "771b5ef527b2dc79fd79336d9485837675f5f6cf429434fc27943f49a7e164ee",
+ "chksum_sha256": "f766f5ed3acca8c6b754d2bcdbbbbf459b75391dc12a6b63cef730358a39409f",
"format": 1
},
{
- "name": "tests/integration/targets/junos_vlans/tests/netconf/deleted.yaml",
+ "name": "tests/integration/targets/junos_bgp_global/tests/netconf/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "217ad5b6e68a2d1cfdef9b4841dc5f91714a5034424265409be1ca7c7546c9a7",
+ "chksum_sha256": "92cf627fa61c4f4a4678156b3fa873264b1ced99c1c6bd2a93d8ccfa853aeb92",
"format": 1
},
{
- "name": "tests/integration/targets/junos_vlans/tests/netconf/gathered.yaml",
+ "name": "tests/integration/targets/junos_bgp_global/tests/netconf/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "640ec1521d32739f67366042c0ec200638ed1b81603b55af0fd7300a7a6ad9b0",
+ "chksum_sha256": "1afed1f11693d4fcfcef6f5404d1bc14d62fdeb26bd3f43cc05ba1efd41762d6",
"format": 1
},
{
- "name": "tests/integration/targets/junos_vlans/tests/netconf/empty_config.yaml",
+ "name": "tests/integration/targets/junos_bgp_global/tests/netconf/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ae5ea725cc0a012e0c98b0a0e9d3d172dd8bb364f2e50779c4e6876b2e61c6bc",
+ "chksum_sha256": "a5ef27e2b0c24a04e52b871c4f660a2f2edd8420a4a5380c73da9382587bce8e",
"format": 1
},
{
- "name": "tests/integration/targets/junos_vlans/tests/netconf/_base_config.yaml",
+ "name": "tests/integration/targets/junos_bgp_global/tests/netconf/fixtures",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_bgp_global/tests/netconf/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5d3cc2b3afe3dc0dadeea0b369c6745302fbbb6ada04c3defb870fea734f2d7b",
+ "chksum_sha256": "2d162dc9b1404da0180805dc8bf0f1b96f65950cbec78041396108887715866a",
"format": 1
},
{
- "name": "tests/integration/targets/junos_vlans/tests/netconf/_initial_config.yaml",
+ "name": "tests/integration/targets/junos_bgp_global/tests/netconf/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f2bf894f4956d79da86103eab885a01457f893317ded8b0cf5f2cd0f63ab2239",
+ "chksum_sha256": "8531868c12a65d880e751f8fccfdaa091562f8dea89c8641240946ec028f92af",
"format": 1
},
{
- "name": "tests/integration/targets/junos_vlans/tests/netconf/merged.yaml",
+ "name": "tests/integration/targets/junos_bgp_global/tests/netconf/rtt.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4fb4c83265fed002fe9ec78794e29394b3c567bdaf8df25da466ea56ad380bd2",
+ "chksum_sha256": "4dc545f32755c069f4533ed048730ad70050aea906982c181d43ec77cc4b7b1e",
"format": 1
},
{
- "name": "tests/integration/targets/junos_vlans/tests/netconf/overridden.yaml",
+ "name": "tests/integration/targets/junos_bgp_global/tests/netconf/_initial_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5ea25501651a613ba680c4da9b6a018d85408f3bbe1290d9c79360ad041d0ac0",
+ "chksum_sha256": "20a1538392897f7778c8219a43a8662cd4e63e8568bca44f0437de3d4bc2e621",
"format": 1
},
{
- "name": "tests/integration/targets/junos_vlans/tests/netconf/rtt.yml",
+ "name": "tests/integration/targets/junos_bgp_global/tests/netconf/_reset_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cfff19b900dd791ca391b9fd18742fc3c355acfa6d00810d24214ac0f6bfc871",
+ "chksum_sha256": "b29393a5633254b0ccc43252a26235d5ddd9bae978d9a042ad63d114b99f3047",
"format": 1
},
{
- "name": "tests/integration/targets/junos_vlans/tests/netconf/fixtures",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_bgp_global/tests/netconf/overridden.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6271267f45321582881e7c1b8b0a4d4edd7f37b5f79a9e12d0a4d856b048871b",
"format": 1
},
{
- "name": "tests/integration/targets/junos_vlans/tests/netconf/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/junos_bgp_global/tests/netconf/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3baba00d1d6d1dadb4b5976f47607540d8771ea4f07dcdcee03f5e376dd61165",
+ "chksum_sha256": "aa3d594cdca27a7016fbedcfa2fb295611ebdc65dc26af22ba18ec6c8a4d617c",
"format": 1
},
{
- "name": "tests/integration/targets/junos_vlans/tests/netconf/replaced.yaml",
+ "name": "tests/integration/targets/junos_bgp_global/tests/netconf/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "63f819af50f638193f92ae6d4550e1db2ecc3e7f80eb2beade2288944c607988",
+ "chksum_sha256": "8e52f99edc30a0e4ee431600fea788437a003b5c6035ec22bf22fa5abf03cc7a",
"format": 1
},
{
- "name": "tests/integration/targets/junos_vlans/tests/netconf/parsed.yaml",
+ "name": "tests/integration/targets/junos_bgp_global/tests/netconf/purged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8c4c751a8589f2f8b9398d2f308546c9fd6f6786945135cafe407f05a7d6a551",
+ "chksum_sha256": "d916c1d36d28898d24fa09e1345f52f171b57e994cbcb06de96c726ddd2facab",
"format": 1
},
{
- "name": "tests/integration/targets/junos_vlans/tests/netconf/rendered.yaml",
+ "name": "tests/integration/targets/junos_bgp_global/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_bgp_global/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "df538e025fc1c99a5bcd71a5fa94ef936be10c15b8cb69ee3eacc97c3ec1d526",
+ "chksum_sha256": "6859e775c6926fd41248bfce2e80a71c7e08cc626a5cf5882bbd5134e1e58e46",
"format": 1
},
{
- "name": "tests/integration/targets/prepare_junos_tests",
+ "name": "tests/integration/targets/junos_bgp_global/tasks/netconf.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_acls",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/prepare_junos_tests/tasks",
+ "name": "tests/integration/targets/junos_acls/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/junos_acls/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "74b314e77e169d5a6035c8142bc45f78a868d1fccecef3e27cb3f3c750f72959",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/prepare_junos_tests/meta",
+ "name": "tests/integration/targets/junos_acls/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/prepare_junos_tests/meta/main.yaml",
+ "name": "tests/integration/targets/junos_acls/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "851860fe2ed1258710d7fcf89ac5b7d8c3c87755e89ca56fdd79bea022eb2b92",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_interfaces",
+ "name": "tests/integration/targets/junos_acls/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_interfaces/tasks",
+ "name": "tests/integration/targets/junos_acls/tests/netconf",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_interfaces/tasks/main.yaml",
+ "name": "tests/integration/targets/junos_acls/tests/netconf/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4239ce4ad6fc58a529cc073139b7b2abbdba62ae32bfc234e309af398d365eb6",
+ "chksum_sha256": "c23da5d3f436231b378533a5ab89b086b7fa023f7a9780461f2d9c9ff3cdcab9",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_interfaces/tasks/netconf.yaml",
+ "name": "tests/integration/targets/junos_acls/tests/netconf/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
+ "chksum_sha256": "08e46921760c563c33b03eac99d451230904fffa85ee387ae65f51e61cf05c19",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_interfaces/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_acls/tests/netconf/gathered.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1c78a03edc62e8fe5093769559049598ec54eed6ee34ff1be7a4bd7ca1d0f334",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_interfaces/meta/main.yaml",
+ "name": "tests/integration/targets/junos_acls/tests/netconf/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
+ "chksum_sha256": "aa32412720d18dead847f85cd22c35705724541e489f3f045b117265c2da2b75",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_interfaces/defaults",
+ "name": "tests/integration/targets/junos_acls/tests/netconf/fixtures",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_interfaces/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_acls/tests/netconf/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "9692a9cc1e4349d5055f6592296758c5612979b869549b261d7f8cb22076ff52",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_interfaces/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_acls/tests/netconf/reset_policy_config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3133d054fb17cecc431da4aacabda89136ea669baf1f930c8dd8bf961d850d2d",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_interfaces/tests/netconf",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_acls/tests/netconf/config_policy.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a7b613e7f4b3d626ddc5821c283c9d55ddbba350d37d7c523bf248e0fc599bf4",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_interfaces/tests/netconf/_remove_config.yaml",
+ "name": "tests/integration/targets/junos_acls/tests/netconf/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "064e57d0ef1ecabdf04ecbd83a445a257815c58717956e79fe358948b5189c8a",
+ "chksum_sha256": "4d36906bc9d6cb7839a210f7c688af552aced4332fe6d294c028c99c5d192808",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_interfaces/tests/netconf/deleted.yaml",
+ "name": "tests/integration/targets/junos_acls/tests/netconf/_reset_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f8da092b479832d981e18a403a247a5f398be51d3618bf9bcd6adecd6ade6603",
+ "chksum_sha256": "65b95de98f801d3efbbcc7c4ba777dc8af5e89a18d85876a2296d819243e9a4c",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_interfaces/tests/netconf/gathered.yaml",
+ "name": "tests/integration/targets/junos_acls/tests/netconf/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a91c48dc2e5c6fd960e2bac1fe2f708ef5ec53b73b5c58d4e2953479486935cc",
+ "chksum_sha256": "f53e6ab652b057dfaccda221c21c65173c5d42ae6fb848ba73396771a3d5fa63",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_interfaces/tests/netconf/rtt.yaml",
+ "name": "tests/integration/targets/junos_acls/tests/netconf/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3789650f6288e17a8c1999331b043bf9403a7a5afeac87b647348f1ba9a3c05a",
+ "chksum_sha256": "3f489f5450522cf2ca9078abbba22c104222032df32804d3be2fef2878c426b9",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_interfaces/tests/netconf/merged.yaml",
+ "name": "tests/integration/targets/junos_acls/tests/netconf/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "724ff8d403f1e5199c4782652db55274115ea8129b74ef73a7c231ef394e2bb4",
+ "chksum_sha256": "05b0bcb9ae22db881ed263fa127eac84a234021ee88118dbca5c5656679ff978",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_interfaces/tests/netconf/overridden.yaml",
+ "name": "tests/integration/targets/junos_acls/tests/netconf/idempotent.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b55ace9a6f0bfc64c2403a0dc378ad9ea4992f51795dd7e9580c244247ea688c",
+ "chksum_sha256": "59eec828971eae9ba7b584d87b4e15dc788791d7e9a438765277f92163cea99f",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_interfaces/tests/netconf/fixtures",
+ "name": "tests/integration/targets/junos_acls/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_interfaces/tests/netconf/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/junos_acls/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6eb35350f92a0ae0527f94e27daa5506279c181db31be1a332a9f74cee66ad8f",
+ "chksum_sha256": "2f6151e4a2a93bc086b790ee3a501cdb7250d7f3f5a71fd06a1b89fe3881b101",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_interfaces/tests/netconf/replaced.yaml",
+ "name": "tests/integration/targets/junos_acls/tasks/netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1f0d41c05af0cfa16b80b0d129425353225ba19ea33206cf6dc4510f6efbffa1",
+ "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_interfaces/tests/netconf/parsed.yaml",
+ "name": "tests/integration/targets/junos_vrf",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_vrf/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_vrf/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cb72a9194b46ee33eabbf1e9b67bb9e982f0033cb3ce2b1b19370db793c395e7",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lldp_interfaces/tests/netconf/rendered.yaml",
+ "name": "tests/integration/targets/junos_vrf/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_vrf/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "512148e07b86f3dfcda14c159b99af790e502329decce28fdad7dc87996133e7",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
"format": 1
},
{
- "name": "tests/integration/targets/junos_user",
+ "name": "tests/integration/targets/junos_vrf/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_user/tasks",
+ "name": "tests/integration/targets/junos_vrf/tests/netconf",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_user/tasks/main.yaml",
+ "name": "tests/integration/targets/junos_vrf/tests/netconf/basic.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d1b0fe67be093ce85673fdb2a29646edd61025742313f8ee12467201c6301d1c",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_vrf/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_vrf/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "e727033350980ea9df8bbfde6b874c51150f907f51fa8fc4cc8070e3f50ec5d3",
"format": 1
},
{
- "name": "tests/integration/targets/junos_user/tasks/netconf.yaml",
+ "name": "tests/integration/targets/junos_vrf/tasks/netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
"chksum_sha256": "1946facde8e5b023ffc633db3d6261d8de690c1fb2101af1214f8d4d55ce1f56",
"format": 1
},
{
- "name": "tests/integration/targets/junos_user/meta",
+ "name": "tests/integration/targets/junos_banner",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_user/meta/main.yml",
+ "name": "tests/integration/targets/junos_banner/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/junos_banner/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
- "name": "tests/integration/targets/junos_user/defaults",
+ "name": "tests/integration/targets/junos_banner/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_user/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_banner/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "58c4318f7d20aff7df7bc4267d1f9fe62a4333a9012420e84274b35d4adf1b26",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
"format": 1
},
{
- "name": "tests/integration/targets/junos_user/tests",
+ "name": "tests/integration/targets/junos_banner/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_user/tests/netconf",
+ "name": "tests/integration/targets/junos_banner/tests/netconf",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_user/tests/netconf/basic.yaml",
+ "name": "tests/integration/targets/junos_banner/tests/netconf/basic.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e8e92d7542ad280130c12b8a8b2a964692a947cfbd81f71b79a72ea0a47824e8",
+ "chksum_sha256": "560415c9318dc6aa3e10ceb7116f47daafb741ca68c148a09bc1acc3aa169354",
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_global",
+ "name": "tests/integration/targets/junos_banner/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_global/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_banner/tasks/main.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e727033350980ea9df8bbfde6b874c51150f907f51fa8fc4cc8070e3f50ec5d3",
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_global/tasks/main.yaml",
+ "name": "tests/integration/targets/junos_banner/tasks/netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6859e775c6926fd41248bfce2e80a71c7e08cc626a5cf5882bbd5134e1e58e46",
+ "chksum_sha256": "be90db2aa35bf39ec0fc02a996e8d5e40b83b0917dab8aa2339a1d22ed5cad0e",
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_global/tasks/netconf.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
+ "name": "tests/integration/targets/junos_interfaces",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_global/meta",
+ "name": "tests/integration/targets/junos_interfaces/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_global/meta/main.yml",
+ "name": "tests/integration/targets/junos_interfaces/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_global/defaults",
+ "name": "tests/integration/targets/junos_interfaces/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_global/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_interfaces/meta/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_global/tests",
+ "name": "tests/integration/targets/junos_interfaces/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_global/tests/netconf",
+ "name": "tests/integration/targets/junos_interfaces/tests/netconf",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_global/tests/netconf/deleted.yaml",
+ "name": "tests/integration/targets/junos_interfaces/tests/netconf/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8531868c12a65d880e751f8fccfdaa091562f8dea89c8641240946ec028f92af",
+ "chksum_sha256": "6dc3ad5aaaa7664632e3d9aba1a81f29423fff040085b78ca0eed5aa60530b58",
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_global/tests/netconf/gathered.yaml",
+ "name": "tests/integration/targets/junos_interfaces/tests/netconf/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1afed1f11693d4fcfcef6f5404d1bc14d62fdeb26bd3f43cc05ba1efd41762d6",
+ "chksum_sha256": "a745fb6c5059eb9c77cca93ddb1e91755acaa867ffd5f481395d43ad3728f5a5",
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_global/tests/netconf/empty_config.yaml",
+ "name": "tests/integration/targets/junos_interfaces/tests/netconf/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a5ef27e2b0c24a04e52b871c4f660a2f2edd8420a4a5380c73da9382587bce8e",
+ "chksum_sha256": "6a059ca58a6906d2b6480ac0296a83f7ca7d61af0aaeb5d9ed342299c366bb32",
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_global/tests/netconf/_initial_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "20a1538392897f7778c8219a43a8662cd4e63e8568bca44f0437de3d4bc2e621",
+ "name": "tests/integration/targets/junos_interfaces/tests/netconf/fixtures",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_global/tests/netconf/merged.yaml",
+ "name": "tests/integration/targets/junos_interfaces/tests/netconf/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aa3d594cdca27a7016fbedcfa2fb295611ebdc65dc26af22ba18ec6c8a4d617c",
+ "chksum_sha256": "e0dcf81fecfea2443b931ea13585c90f86328910b71285add801bda7265c3636",
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_global/tests/netconf/overridden.yaml",
+ "name": "tests/integration/targets/junos_interfaces/tests/netconf/groups.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6271267f45321582881e7c1b8b0a4d4edd7f37b5f79a9e12d0a4d856b048871b",
+ "chksum_sha256": "9e318dceb6f81af373d743ffa5272a28422a7e5f33f5a958cf2860c839901390",
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_global/tests/netconf/rtt.yml",
+ "name": "tests/integration/targets/junos_interfaces/tests/netconf/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4dc545f32755c069f4533ed048730ad70050aea906982c181d43ec77cc4b7b1e",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_bgp_global/tests/netconf/fixtures",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "334b7920b11f296e7600cd48baeb18ce5cd288717543853461bc91e022041222",
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_global/tests/netconf/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/junos_interfaces/tests/netconf/_initial_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2d162dc9b1404da0180805dc8bf0f1b96f65950cbec78041396108887715866a",
+ "chksum_sha256": "14b9c10e6800af658dc1f3fcdfb13e168951de360be87867f15411b43076c223",
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_global/tests/netconf/replaced.yaml",
+ "name": "tests/integration/targets/junos_interfaces/tests/netconf/_remove_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8e52f99edc30a0e4ee431600fea788437a003b5c6035ec22bf22fa5abf03cc7a",
+ "chksum_sha256": "d9825909d170137f0169fb716d817d0aa41e949db1eea8d373f6723f57cba116",
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_global/tests/netconf/parsed.yaml",
+ "name": "tests/integration/targets/junos_interfaces/tests/netconf/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f766f5ed3acca8c6b754d2bcdbbbbf459b75391dc12a6b63cef730358a39409f",
+ "chksum_sha256": "41a3d2ec866ea5cf2258c06ffbbe31038cab3cc1d6f79cdff6a99f88190a39e5",
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_global/tests/netconf/_reset_config.yaml",
+ "name": "tests/integration/targets/junos_interfaces/tests/netconf/merged.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b29393a5633254b0ccc43252a26235d5ddd9bae978d9a042ad63d114b99f3047",
+ "chksum_sha256": "87e878b3a8097ffcca1fae275d5a643d86456c96f63ea9bafb5b7b7355afd10b",
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_global/tests/netconf/purged.yaml",
+ "name": "tests/integration/targets/junos_interfaces/tests/netconf/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d916c1d36d28898d24fa09e1345f52f171b57e994cbcb06de96c726ddd2facab",
+ "chksum_sha256": "52957ef7daf70f40bf6a4741a42da5e7f82bbc6b67b830899667b62b6a5a4f85",
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_global/tests/netconf/rendered.yaml",
+ "name": "tests/integration/targets/junos_interfaces/tests/netconf/rtt.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "92cf627fa61c4f4a4678156b3fa873264b1ced99c1c6bd2a93d8ccfa853aeb92",
+ "chksum_sha256": "95dc5232d1a73bc72ffb5dfab754c6d9971a24cf422e9001dc60ddaec899da07",
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_global/vars",
+ "name": "tests/integration/targets/junos_interfaces/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_bgp_global/vars/main.yaml",
+ "name": "tests/integration/targets/junos_interfaces/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b153b729248015e1aaa1e5bc6f4db2bfa87170e1cd347099f4f4a31fb86a2b02",
+ "chksum_sha256": "6859e775c6926fd41248bfce2e80a71c7e08cc626a5cf5882bbd5134e1e58e46",
"format": 1
},
{
- "name": "tests/integration/targets/junos_acl_interfaces",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_interfaces/tasks/netconf.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_acl_interfaces/tasks",
+ "name": "tests/integration/targets/junos_facts",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_acl_interfaces/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "dedf802497c657594764c710abb69c6a2eb5bf58fc7d51282731973a56e85168",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_acl_interfaces/tasks/netconf.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_acl_interfaces/meta",
+ "name": "tests/integration/targets/junos_facts/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_acl_interfaces/meta/main.yaml",
+ "name": "tests/integration/targets/junos_facts/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
+ "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a",
"format": 1
},
{
- "name": "tests/integration/targets/junos_acl_interfaces/defaults",
+ "name": "tests/integration/targets/junos_facts/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_acl_interfaces/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_facts/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
"format": 1
},
{
- "name": "tests/integration/targets/junos_acl_interfaces/tests",
+ "name": "tests/integration/targets/junos_facts/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_acl_interfaces/tests/netconf",
+ "name": "tests/integration/targets/junos_facts/tests/netconf",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_acl_interfaces/tests/netconf/deleted.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ef107c677fdfb30ff79d823577ee1c84890bd7886acb6fb2396107b99fbcab53",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_acl_interfaces/tests/netconf/gathered.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "856be5720d341ecfe38ed73a6fc5b38bef58ba3cabda135a42df90fd65db649b",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_acl_interfaces/tests/netconf/empty_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "91b36b428ce955f7929ec4195a256dccb2d2b5926093c9cfdfb969895c50786e",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_acl_interfaces/tests/netconf/_initial_config.yaml",
+ "name": "tests/integration/targets/junos_facts/tests/netconf/network_facts.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "47cd198cd9eb3a08e813c896b92cfc0eda48eb31e4b11a35b55a7b97a0eb8932",
+ "chksum_sha256": "3235c9f223c17727372acb2d2bcd4045f28605d5e60afb7ec0d9fb4f4da89758",
"format": 1
},
{
- "name": "tests/integration/targets/junos_acl_interfaces/tests/netconf/merged.yaml",
+ "name": "tests/integration/targets/junos_facts/tests/netconf/facts.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b0433b5d3c8b197deeb46826bc3d796bdecc84e7eb860984bbf654aa610c6e6b",
+ "chksum_sha256": "9c4d7fd03f0a950b13ed257fd81af007019fa35f6b8e088b83ebc8195b5ef0a3",
"format": 1
},
{
- "name": "tests/integration/targets/junos_acl_interfaces/tests/netconf/overridden.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4e8c520f54c6ce56d0da73b90650b12c638dc19db9ee6df206077bdd6b07a626",
+ "name": "tests/integration/targets/junos_facts/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_acl_interfaces/tests/netconf/replaced.yaml",
+ "name": "tests/integration/targets/junos_facts/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "382845484c54c164ed28ab7b0ec3ee53e12e7d5c15f449715d5aa50aa201372b",
+ "chksum_sha256": "e727033350980ea9df8bbfde6b874c51150f907f51fa8fc4cc8070e3f50ec5d3",
"format": 1
},
{
- "name": "tests/integration/targets/junos_acl_interfaces/tests/netconf/_reset_config.yaml",
+ "name": "tests/integration/targets/junos_facts/tasks/netconf.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1b74a6f4e78bc9098e835c4eaa579a97f4264f521bbb3e5c2fb1b30e956370c1",
+ "chksum_sha256": "be90db2aa35bf39ec0fc02a996e8d5e40b83b0917dab8aa2339a1d22ed5cad0e",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lag_interfaces",
+ "name": "tests/integration/targets/junos_security_policies_global",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_lag_interfaces/tasks",
+ "name": "tests/integration/targets/junos_security_policies_global/defaults",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_lag_interfaces/tasks/main.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4239ce4ad6fc58a529cc073139b7b2abbdba62ae32bfc234e309af398d365eb6",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_lag_interfaces/tasks/netconf.yaml",
+ "name": "tests/integration/targets/junos_security_policies_global/defaults/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
+ "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lag_interfaces/meta",
+ "name": "tests/integration/targets/junos_security_policies_global/vars",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_lag_interfaces/meta/main.yaml",
+ "name": "tests/integration/targets/junos_security_policies_global/vars/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
+ "chksum_sha256": "cc9a26cdbd03e746f437f26100d24dbea854043ca957d63a3238e8da719c29e9",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lag_interfaces/defaults",
+ "name": "tests/integration/targets/junos_security_policies_global/meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_lag_interfaces/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_security_policies_global/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lag_interfaces/tests",
+ "name": "tests/integration/targets/junos_security_policies_global/tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_lag_interfaces/tests/netconf",
+ "name": "tests/integration/targets/junos_security_policies_global/tests/netconf",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_lag_interfaces/tests/netconf/_remove_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1cb41bf2ef192855fa29d8ba1fc78380ae705498ba17b54345b003c15d8eea30",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_lag_interfaces/tests/netconf/deleted.yaml",
+ "name": "tests/integration/targets/junos_security_policies_global/tests/netconf/parsed.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "72efe0c964cbc8425cf2dbcd901ae1e93d5702142a0b3b7531686f4dbe896dd8",
+ "chksum_sha256": "4905f9e7594d4b1d98f41721a16a66a810b538fbc0d6a85c0ce71f352c251523",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lag_interfaces/tests/netconf/gathered.yaml",
+ "name": "tests/integration/targets/junos_security_policies_global/tests/netconf/_populate_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bcf0f0aeee50ed4d9bafe71db01017fc7f05ef1d8451bd48cc8bb7ca7d309593",
+ "chksum_sha256": "b7bb3d4ac43a4b6c4920580458fde90451217805f6fbe2e8d26507559f083519",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lag_interfaces/tests/netconf/_base_config.yaml",
+ "name": "tests/integration/targets/junos_security_policies_global/tests/netconf/rendered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "422b30525a97a151a644f4ef3e0905f48f6baba2382b53fda2d0670bcdc47c68",
+ "chksum_sha256": "ac117f64285489963952a8c90bcf8a5eb34e6f73f47814300043e78bee1efce9",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lag_interfaces/tests/netconf/merged.yaml",
+ "name": "tests/integration/targets/junos_security_policies_global/tests/netconf/gathered.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0354f48c3517eea3b0643f7999f6d127c124f7990be5cd6be92bba3c87aec71b",
+ "chksum_sha256": "16c2a1698ee0dbd5edc0c239f8986c08f8159528fe3b7990ed5873f60d003f8b",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lag_interfaces/tests/netconf/overridden.yaml",
+ "name": "tests/integration/targets/junos_security_policies_global/tests/netconf/empty_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d15eee369dbf92bd5b263170f19ecceccb1d29295f86f1ec0afa1b2542f8a43a",
+ "chksum_sha256": "fafc2da62cf712d0117ae338fe363b040f5c7dd4969ce287dfa3318f6ac4423f",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lag_interfaces/tests/netconf/fixtures",
+ "name": "tests/integration/targets/junos_security_policies_global/tests/netconf/fixtures",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_lag_interfaces/tests/netconf/fixtures/parsed.cfg",
+ "name": "tests/integration/targets/junos_security_policies_global/tests/netconf/fixtures/parsed.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6362681d72bb84236c6063867d677a9c6802996a268047dc081ae4dead5345fe",
+ "chksum_sha256": "4a98bcfdfa2c2acbd0f2bc2061457d855d4e18bfccd39d517aa1fb43fc2ade15",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lag_interfaces/tests/netconf/replaced.yaml",
+ "name": "tests/integration/targets/junos_security_policies_global/tests/netconf/deleted.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cac34b639c32c5c27f26cda22f7d9aa11b4cbcaf8a8c2694622e3890526ebcc7",
+ "chksum_sha256": "bb80b4f48c8de02108eb0fea7d780d64e59eb7326362ac192eb782391cf7181c",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lag_interfaces/tests/netconf/parsed.yaml",
+ "name": "tests/integration/targets/junos_security_policies_global/tests/netconf/rtt.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6a63f014861a62d22b7969689f1dc3966a4282b8c95a165b1cc3d35018ae88e",
+ "chksum_sha256": "251482cdb55715eb323cb0c10b29292c8e73ba800d0fed4f4c192a846b25877a",
"format": 1
},
{
- "name": "tests/integration/targets/junos_lag_interfaces/tests/netconf/rendered.yaml",
+ "name": "tests/integration/targets/junos_security_policies_global/tests/netconf/_initial_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "657037ae627b0e9265dbf5ed20bcd7e0e10f3987c751a443e5708a47df928de9",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_routing_options",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_routing_options/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "ae8128c308746259f25d9bc41d97ee15b5c7405e674891d8ae599fc3e2328879",
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_options/tasks/main.yaml",
+ "name": "tests/integration/targets/junos_security_policies_global/tests/netconf/_reset_config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6859e775c6926fd41248bfce2e80a71c7e08cc626a5cf5882bbd5134e1e58e46",
+ "chksum_sha256": "95666f3ea0c587421ce2de87a8d6335bbfff236e8b4d1a9835a0278f186867cd",
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_options/tasks/netconf.yaml",
+ "name": "tests/integration/targets/junos_security_policies_global/tests/netconf/overridden.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
+ "chksum_sha256": "935fcb42d47d2cfe6ea5cd8aba20e8a83461f822ae45de8e2881c3393ae32139",
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_options/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_security_policies_global/tests/netconf/merged.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a589f47fc49da28c7f380734b48db2f682c1b2e432d77ab227d2f6f30682ff39",
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_options/meta/main.yml",
+ "name": "tests/integration/targets/junos_security_policies_global/tests/netconf/replaced.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
+ "chksum_sha256": "4f42d4ccdf3bbc1b40266f59bb4bf7bb5d17522b9f9024108c8e04b749cd0589",
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_options/defaults",
+ "name": "tests/integration/targets/junos_security_policies_global/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_options/defaults/main.yaml",
+ "name": "tests/integration/targets/junos_security_policies_global/tasks/main.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "6859e775c6926fd41248bfce2e80a71c7e08cc626a5cf5882bbd5134e1e58e46",
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_options/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/junos_security_policies_global/tasks/netconf.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_options/tests/netconf",
+ "name": "tests/sanity",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_options/tests/netconf/deleted.yaml",
+ "name": "tests/sanity/ignore-2.15.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5afe0b0a0f964bbb1eacf828241f9d6880d4155e07dddebbc06cbab4fe1177be",
+ "chksum_sha256": "18bf204fc6f6e08b0c20807cd7974995ed92b7d77df238e11ca5f3116c537e29",
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_options/tests/netconf/gathered.yaml",
+ "name": "tests/sanity/ignore-2.14.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "88a72f59e38cc345203ff46ac64edf209142a669b6775a94ed60408dbce4fae3",
+ "chksum_sha256": "18bf204fc6f6e08b0c20807cd7974995ed92b7d77df238e11ca5f3116c537e29",
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_options/tests/netconf/empty_config.yaml",
+ "name": "tests/sanity/ignore-2.18.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4f23a00ee4e2d649c926dfe56c6e601bf176145dafc88442dda848aa492d8797",
+ "chksum_sha256": "18bf204fc6f6e08b0c20807cd7974995ed92b7d77df238e11ca5f3116c537e29",
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_options/tests/netconf/merged.yaml",
+ "name": "tests/sanity/ignore-2.17.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "33aaaf4d48243dbe9296e9e042cb27f360bee34a8587a1516ce0e8796e498fce",
+ "chksum_sha256": "18bf204fc6f6e08b0c20807cd7974995ed92b7d77df238e11ca5f3116c537e29",
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_options/tests/netconf/overridden.yaml",
+ "name": "tests/sanity/ignore-2.16.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "38c77427a98ffbc4a623dc01722e565c08754282a0a0eaf02e7dfe440badb6ef",
+ "chksum_sha256": "18bf204fc6f6e08b0c20807cd7974995ed92b7d77df238e11ca5f3116c537e29",
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_options/tests/netconf/rtt.yml",
+ "name": "tests/config.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "97ed698e3215b67ef24ac3aa69d44da18c193f9f02d3ea2a876ea637273cd02c",
+ "chksum_sha256": "4129945061440c8d8c281590b8054b194f5958833c722aa40e878b09038c380e",
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_options/tests/netconf/_populate_config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "aeec20572a2337eb6920f08c1e683df42a2d77157b627cc3c702ae785f381d6e",
+ "name": "tests/unit",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_options/tests/netconf/fixtures",
+ "name": "tests/unit/mock",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_options/tests/netconf/fixtures/parsed.cfg",
+ "name": "tests/unit/mock/loader.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aa310db3ac9c122a80e375582988ad5f7e3b27ee1ef2984a09e92db2826f4d1f",
+ "chksum_sha256": "2343d1f644250d4b616f0bf0a826fdee8fe306243d8412d44dd0e033352b262b",
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_options/tests/netconf/replaced.yaml",
+ "name": "tests/unit/mock/yaml_helper.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b9eb04d768dfe49511a2c8588034ed0e5a60781148eaa462083fde53f558a501",
+ "chksum_sha256": "134eef238c83a9611799871b743e49e9bfbcd8bdddf2cc6a7bf69fd1000345b3",
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_options/tests/netconf/parsed.yaml",
+ "name": "tests/unit/mock/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "140f095f42a3049193e72a297b0f320e4f3c9d9bf630fd555033db3cb796e90b",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_options/tests/netconf/_reset_config.yaml",
+ "name": "tests/unit/mock/vault_helper.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "feacd22c689c662edd50c17c3daf13276734c2aea867a7af21dbeb13a309a6e2",
+ "chksum_sha256": "55bd0e924dcc22d050612c944bff0ef745e51faac9260dce9b9b2018c4c8a661",
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_options/tests/netconf/rendered.yaml",
+ "name": "tests/unit/mock/procenv.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f691b0994a2a45d0cb98c0f6fe2b9e9970be59a4dc8e48297d425499e52d1ba4",
+ "chksum_sha256": "3ff983479d7aa4b90efe73337f723c14224edabcdfde4efe49f24cd905f45f1a",
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_options/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_routing_options/vars/main.yaml",
+ "name": "tests/unit/mock/path.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b0dad22bd982e1dc14740d32937c7c31ddf82f5fe6d1689a15fc723aa2fe5f91",
+ "chksum_sha256": "110552d5ab0ffabe2bc6b6c57e9f389be3920da2e0f37ea5b628795d1b426bfd",
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_instances",
+ "name": "tests/unit/plugins",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_instances/tasks",
+ "name": "tests/unit/plugins/terminal",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_instances/tasks/main.yaml",
+ "name": "tests/unit/plugins/terminal/test_junos.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6859e775c6926fd41248bfce2e80a71c7e08cc626a5cf5882bbd5134e1e58e46",
+ "chksum_sha256": "0c1a68c4e3aa8f143a63f903461ac72b7db68911ec8800961455f6d68c5c7ffb",
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_instances/tasks/netconf.yaml",
+ "name": "tests/unit/plugins/terminal/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "15aaeadf08b810a04988939fc6892194f234c2d34ed21230574d914448e20ce1",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_routing_instances/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_instances/meta/main.yml",
+ "name": "tests/unit/plugins/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_instances/defaults",
+ "name": "tests/unit/modules",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_instances/defaults/main.yaml",
+ "name": "tests/unit/modules/conftest.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "e0ae70fa7c2a5e56d7f02a47c3602398cff60c8eb021772ac59a76df2a234048",
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_instances/tests",
- "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/integration/targets/junos_routing_instances/tests/netconf",
+ "name": "tests/unit/modules/network",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_instances/tests/netconf/deleted.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7f82e8795705fb9302d04f74dcce0137f7a8788c9c85eb2379ca6acdae0482d6",
- "format": 1
- },
- {
- "name": "tests/integration/targets/junos_routing_instances/tests/netconf/gathered.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4245f6c677e2c7abffa6c8be158ba432af572304448f2f7baa8156e107938c86",
+ "name": "tests/unit/modules/network/junos",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_instances/tests/netconf/empty_config.yaml",
+ "name": "tests/unit/modules/network/junos/test_junos_package.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a8d2acc111a2980a9bc317bac9d08c68230f8b44cef3ffb56b516c0a71596bc1",
+ "chksum_sha256": "e74fe746328d25c2d91e6b36d1cec21790944513db03b9fef7831f88237bd2fa",
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_instances/tests/netconf/_initial_config.yaml",
+ "name": "tests/unit/modules/network/junos/test_junos_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "618fd41de1d2ba07af50f84e9e7e25ffee98121299422765bbd6a4cd43ea615c",
+ "chksum_sha256": "dfca738f321c8cad9917b4df3d8ade6e01e7c5db148839f7acfecb32f532af41",
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_instances/tests/netconf/merged.yaml",
+ "name": "tests/unit/modules/network/junos/test_junos_facts.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e4083fb5493628e48734ba76d4cf99b1f4e7fe815a6aa18f740e6021310a1f3f",
+ "chksum_sha256": "0134d1cdb19aec1757ac485a4187a59e16c0eb7c6fd839007745ff8483ca8cb1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_instances/tests/netconf/overridden.yaml",
+ "name": "tests/unit/modules/network/junos/test_junos_security_policies.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d32cbe476e915ccf76733adf534ccf9309395d6799353ef8aed11b3fbd6ca301",
+ "chksum_sha256": "de01636e26fd6ced0f76b08dd1e74616d95030b82e81ed52cb20530fb569b0de",
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_instances/tests/netconf/fixtures",
+ "name": "tests/unit/modules/network/junos/fixtures",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_instances/tests/netconf/fixtures/parsed.cfg",
+ "name": "tests/unit/modules/network/junos/fixtures/junos_interfaces.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "049f649304e92c13c8f5e6d00b7deeac4bd7dd1c3b14321407a46ee15863d544",
+ "chksum_sha256": "65df2d02ae1f7f5dca4d74f0ae59e12737cdf93eb7ea35de636b0d14ea9322c6",
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_instances/tests/netconf/replaced.yaml",
+ "name": "tests/unit/modules/network/junos/fixtures/junos_interfaces_config.xml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2629804c535bb7e552f7d44b7ffced5fa494809e44aa0a016dd4bea636741c08",
+ "chksum_sha256": "e0dcf81fecfea2443b931ea13585c90f86328910b71285add801bda7265c3636",
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_instances/tests/netconf/parsed.yaml",
+ "name": "tests/unit/modules/network/junos/fixtures/junos_bgp_global.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "707b5d9aa8e023d22f7ea57a1cce39fe05c6079f01c69dfe0d6312b76363cdba",
+ "chksum_sha256": "7b3b18f683207cb7d272bbc509b50c37eda8b58dc6cfe4aa04978241a32c802b",
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_instances/tests/netconf/_reset_config.yaml",
+ "name": "tests/unit/modules/network/junos/fixtures/junos_ping_ping_10.10.10.20_count_4",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8ba46007f3628fbe6ee4591f4ad6b279f6f19ac5d91248ff4cec5fee3a3be931",
+ "chksum_sha256": "bf73afa78e3abecd0fd0f9fcce47d0e8684deed25a54bccdcfce911a083e7c0c",
"format": 1
},
{
- "name": "tests/integration/targets/junos_routing_instances/tests/netconf/rendered.yaml",
+ "name": "tests/unit/modules/network/junos/fixtures/get_configuration_rpc_reply_xml.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "41158fc9c9c801d84be463ea99b38536554851c6a8a4427a333793b78b542869",
+ "chksum_sha256": "9646d44347455a648826a01a979a033c85488b33f0663ef83a1602f98a3eabd0",
"format": 1
},
{
- "name": "tests/integration/targets/junos_config",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/junos/fixtures/get_configuration_rpc_reply.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c1794bf9ef01dea9904756da46036db8e8520e95c292a68bcf3e8545ef0c9f90",
"format": 1
},
{
- "name": "tests/integration/targets/junos_config/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/junos/fixtures/junos_bgp_address_family.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7b3b18f683207cb7d272bbc509b50c37eda8b58dc6cfe4aa04978241a32c802b",
"format": 1
},
{
- "name": "tests/integration/targets/junos_config/tasks/main.yaml",
+ "name": "tests/unit/modules/network/junos/fixtures/load_configuration_xml.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fba795a2f2f8c6b449e057d2c14be5aa9ea9e94bfc19aa628dddb26130e7911f",
+ "chksum_sha256": "b9095b5352838f46207fca0046504e331c8d370dc85332520ccc0247028479f9",
"format": 1
},
{
- "name": "tests/integration/targets/junos_config/tasks/netconf.yaml",
+ "name": "tests/unit/modules/network/junos/fixtures/show_chassis_routing-engine_xml.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be90db2aa35bf39ec0fc02a996e8d5e40b83b0917dab8aa2339a1d22ed5cad0e",
+ "chksum_sha256": "a9818e113293701cc01971ed0c7edb733f81384d539c08d49af16b56356ead12",
"format": 1
},
{
- "name": "tests/integration/targets/junos_config/tasks/cli_config.yaml",
+ "name": "tests/unit/modules/network/junos/fixtures/show_version_json.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "898ac0c25c8756735dba3ece1d68f589e01c1351ddae4f4d045873fe65c9f064",
+ "chksum_sha256": "00d9dd3100b96e96a6692f58f5d3a792275f1703a64acdbddf69601a7c93834c",
"format": 1
},
{
- "name": "tests/integration/targets/junos_config/tasks/redirection.yaml",
+ "name": "tests/unit/modules/network/junos/fixtures/junos_l2_interfaces_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fc890d4d4d13191bbbbe07f1edf38861cd83759d33e4456fdacfc21acce63db3",
+ "chksum_sha256": "e0dcf81fecfea2443b931ea13585c90f86328910b71285add801bda7265c3636",
"format": 1
},
{
- "name": "tests/integration/targets/junos_config/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/junos/fixtures/show_chassis_hardware_xml.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d6d686902c059632720826594a665ebdda8cfe166ec082796ae56da11d64e421",
"format": 1
},
{
- "name": "tests/integration/targets/junos_config/meta/main.yml",
+ "name": "tests/unit/modules/network/junos/fixtures/get_configuration_rpc_reply_set.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
+ "chksum_sha256": "0b9e2ca1106615a162444ab130bdeb6c56f601e617060022b96ad5ff2311d0d6",
"format": 1
},
{
- "name": "tests/integration/targets/junos_config/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/junos/fixtures/junos_ospfv2_config.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "71b084d4497ff84b165285a49320f353fc97f2839bcf47fcad05bd3b5e05b036",
"format": 1
},
{
- "name": "tests/integration/targets/junos_config/defaults/main.yaml",
+ "name": "tests/unit/modules/network/junos/fixtures/junos_ospfv3_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
+ "chksum_sha256": "b9f3fc1df4bee23098cf23bfa6a67d0c6fb9f1cae822426af13ad6c4268b3361",
"format": 1
},
{
- "name": "tests/integration/targets/junos_config/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/junos/fixtures/get_configuration_rpc_reply_diff.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3c61cfce095ac967c024d72f88f3f6fb02d8597af464fe68aed4e19ee125fa0a",
"format": 1
},
{
- "name": "tests/integration/targets/junos_config/tests/netconf",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/junos/fixtures/junos_config.set",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "533fb52817ff0c37cf4de7ad9fee8fb63587882fccfdbcd1f6a928b5f4ac0165",
"format": 1
},
{
- "name": "tests/integration/targets/junos_config/tests/netconf/invalid.yaml",
+ "name": "tests/unit/modules/network/junos/fixtures/junos_config.xml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "76594cda9479fe42fcc322308d028e273d33d8f54f4be9ae59d47fbf2b64c611",
+ "chksum_sha256": "7f20565b1504913b40b5e6c3a181a184884847beaad0b5e9d153f4695acd6c8d",
"format": 1
},
{
- "name": "tests/integration/targets/junos_config/tests/netconf/multiple.yaml",
+ "name": "tests/unit/modules/network/junos/fixtures/junos_ospfv3.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a101529e9f690d667375cbc2c1af3c165b84bbf028a57e32e656335bc6fd8b48",
+ "chksum_sha256": "4473a0f4634d65ecdf1d9ab0e02ad91ffc7a6ed9031abe91a0ef9e4e02aadd58",
"format": 1
},
{
- "name": "tests/integration/targets/junos_config/tests/netconf/single.yaml",
+ "name": "tests/unit/modules/network/junos/fixtures/junos_ospfv2.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8a764839bae6345fe760c187666e16afa24c8ef0e1d2394976516abe824c041a",
+ "chksum_sha256": "0fb6b3eba75e5cf010f196a9f376f6d890508caa25726faeeec3cf0b8120579c",
"format": 1
},
{
- "name": "tests/integration/targets/junos_config/tests/netconf/bad_action.yaml",
+ "name": "tests/unit/modules/network/junos/fixtures/junos_vlans_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1a8a59bf146aaa8353f85ecae0b178f16409782aa376f42ff22c7707ec351b6c",
+ "chksum_sha256": "3b3800aac4bb8cb5e3e3d7e95fafdf870ad2bcff4507f9d4f763c8229d4dd4e3",
"format": 1
},
{
- "name": "tests/integration/targets/junos_config/tests/netconf/src_basic.yaml",
+ "name": "tests/unit/modules/network/junos/fixtures/junos_l3_interfaces.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "48b84bd53ef11400ce442cba8558667a982dd8e84497e3e23ffa7791b1c342dd",
+ "chksum_sha256": "98490f3b9ec1e6e82897e25048eec0a74e602fba1047832f132ab97b87e3e2fa",
"format": 1
},
{
- "name": "tests/integration/targets/junos_config/tests/netconf/backup.yaml",
+ "name": "tests/unit/modules/network/junos/fixtures/junos_bgp_address_family_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fc13146756466fb242b2846c094c66512bef612525d04b84ec383e2ae76b58f8",
+ "chksum_sha256": "c0bf370e7a4fd2b80232065fd7c03cfc5ef7aaecc5597a7d8e6e45dda8301dee",
"format": 1
},
{
- "name": "tests/integration/targets/junos_config/tests/netconf/src_invalid.yaml",
+ "name": "tests/unit/modules/network/junos/fixtures/show_system_memory_xml.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c2d40a306a95cbd2ec37c729bba258c2a7acdded7eac74eb3fc18f5c78e83e60",
+ "chksum_sha256": "962e8ea71a1ac6eb59d63e094f6fdc59afa2906c2d566a6f6092a8ec5e3f8e6f",
"format": 1
},
{
- "name": "tests/integration/targets/junos_config/tests/redirection",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/junos/fixtures/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/junos_config/tests/redirection/shortname.yaml",
+ "name": "tests/unit/modules/network/junos/fixtures/show_system_storage_xml.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6b1f7d41f6377e7456ac464eef4de5bc86a5dbef030d57b77b361c73471b91b3",
+ "chksum_sha256": "95430aab542287c13556d64fedaa017250d82bcd09bd9fcca6f7439838d9af7f",
"format": 1
},
{
- "name": "tests/integration/targets/junos_config/tests/cli_config",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/junos/fixtures/junos_ospf_interfaces_config.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b9f3fc1df4bee23098cf23bfa6a67d0c6fb9f1cae822426af13ad6c4268b3361",
"format": 1
},
{
- "name": "tests/integration/targets/junos_config/tests/cli_config/cli_backup.yaml",
+ "name": "tests/unit/modules/network/junos/fixtures/junos_routing_options_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1cfa70ec55d445903975a372167840d1f175641604c847f8741acf28ee8e378b",
+ "chksum_sha256": "28bb98e8ecfb270479852cb8a0ab34c6e6362ec60e7858f64bd4843c76d548b7",
"format": 1
},
{
- "name": "tests/integration/targets/junos_config/tests/cli_config/cli_basic.yaml",
+ "name": "tests/unit/modules/network/junos/fixtures/junos_ntp_global_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eba80fbddca0baa46c7439ee80946990cd91e55da912b9571ae6559288b6d15c",
+ "chksum_sha256": "cf65e12feb7d404a9b0e0a999103bf037c07ed11709f676988d5debcbaadafbf",
"format": 1
},
{
- "name": "tests/integration/targets/junos_config/tests/cli_config/cli_replace.yaml",
+ "name": "tests/unit/modules/network/junos/fixtures/junos_ping_ping_10.10.10.11_count_5_size_512_interval_2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b1a748515ac3e7ede4724251b01372dcc5b4a9676a417aaf744fdbfb1e597994",
+ "chksum_sha256": "2dc39ef974356df3ba62871556a0253541b5fad3cad4e3ff1ea3d69101b6ad43",
"format": 1
},
{
- "name": "tests/integration/targets/junos_config/templates",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/junos/fixtures/junos_ping_ping_10.10.10.12_count_5_do-not-fragment_rapid",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "58cfa0cf75995cf12c2dc3bc72fc13182c13f1cbbab31543a07e8545350d19b1",
"format": 1
},
{
- "name": "tests/integration/targets/junos_config/templates/basic",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/junos/fixtures/junos_logging_global_config.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0536991827ef435cce6176c19a2fd1f906673459e231018172247fac6f606f7b",
"format": 1
},
{
- "name": "tests/integration/targets/junos_config/templates/basic/config.xml",
+ "name": "tests/unit/modules/network/junos/fixtures/junos_ping_ping_10.10.10.10_count_2",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4d6334450d173802f80b0c55ea41fa8e094afeabfe76c14d54c036b8d48a9eee",
+ "chksum_sha256": "45b8dcf26e3f693cbfd5e66a886f6c42c8427844e62cc3fee6fa02950c80e832",
"format": 1
},
{
- "name": "tests/integration/targets/junos_config/templates/basic/config.set",
+ "name": "tests/unit/modules/network/junos/fixtures/get_configuration_rpc_reply_json.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e55d8c57f22746493a68395134a4c07e361bf83a7f5b21a95905ef7ee40cbda1",
+ "chksum_sha256": "1e77d8a4c829ca72a36c925ed12e7dcb6117ab7369f1f059b4fa9dedbea7f589",
"format": 1
},
{
- "name": "tests/integration/targets/junos_config/templates/basic/config.j2",
+ "name": "tests/unit/modules/network/junos/fixtures/junos_ospf_interfaces.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7f984e7d5384674518e1bd994d53139ad2a3d56cc8d823c078c00a1e65c94cda",
+ "chksum_sha256": "50828852d511aafe1ec8580f427386ded914d7cfcd79fe6ccaadab5f8128164a",
"format": 1
},
{
- "name": "tests/integration/targets/junos_l3_interfaces",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/junos/fixtures/junos_security_policies_global_config.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e9462852c080047c4d22f2521a2915964b45d55848dbc2c348bf6238f1b4114b",
"format": 1
},
{
- "name": "tests/integration/targets/junos_l3_interfaces/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/junos/fixtures/show_version_xml.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "919747d67bc939991faa1a64441e9a22b997d240df74c0991e361776dc8ecaa2",
"format": 1
},
{
- "name": "tests/integration/targets/junos_l3_interfaces/tasks/main.yaml",
+ "name": "tests/unit/modules/network/junos/fixtures/junos_snmp_server_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4239ce4ad6fc58a529cc073139b7b2abbdba62ae32bfc234e309af398d365eb6",
+ "chksum_sha256": "ff3d690032a33fc60a78b722b81c3f2038df2cb1b8aa56d5b186c80bfecdd195",
"format": 1
},
{
- "name": "tests/integration/targets/junos_l3_interfaces/tasks/netconf.yaml",
+ "name": "tests/unit/modules/network/junos/fixtures/junos_config.text",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "07a74b16a6595dcb47295bc6af7c5d3d58f1e5920c9c3d9ff99d2c0b644897a7",
+ "chksum_sha256": "52acbee815525e2a4ce9fca63c85297c52a32a0d6957c41bc3f37c3b90b4ae3b",
"format": 1
},
{
- "name": "tests/integration/targets/junos_l3_interfaces/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/junos/fixtures/junos_security_policies_config.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1216c97a8cdee96ebcab47ca43769b6ed167880e85eef5e9ccb179ce19ccafd0",
"format": 1
},
{
- "name": "tests/integration/targets/junos_l3_interfaces/meta/main.yaml",
+ "name": "tests/unit/modules/network/junos/fixtures/junos_prefix_lists_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
+ "chksum_sha256": "bbb29c36dc361586ea1762fbb6f8ded0716e7046e0b3ab5022b3c96ba4b45dce",
"format": 1
},
{
- "name": "tests/integration/targets/junos_l3_interfaces/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/junos/fixtures/junos_config.json",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "38efed50de799e3f3a85e4609ee840ad8dd285d1e59d2c21d30dacbb136e85b7",
"format": 1
},
{
- "name": "tests/integration/targets/junos_l3_interfaces/defaults/main.yaml",
+ "name": "tests/unit/modules/network/junos/fixtures/show_version_text.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1",
+ "chksum_sha256": "2a1956bb5615571aa71269bb65caae43c44f59430097b755eaee205ce60c4da8",
"format": 1
},
{
- "name": "tests/integration/targets/junos_l3_interfaces/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/junos/fixtures/get_configuration_rpc_reply_text.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b8288d3ef161c912a6016c1979234cfb8061d730f90ad6cac8a55de097d5ea1c",
"format": 1
},
{
- "name": "tests/integration/targets/junos_l3_interfaces/tests/netconf",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/junos/fixtures/junos_routing_instances_config.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9492071c37154f5769046e38477904bf0829498697f3c2b4fd0b214ef14a27da",
"format": 1
},
{
- "name": "tests/integration/targets/junos_l3_interfaces/tests/netconf/junos_l3_interfaces.yml",
+ "name": "tests/unit/modules/network/junos/fixtures/junos_bgp_global_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "13a0fdaad9f2c794ac4176d880607e72107f644d0cb12e7751bb487b4ad59f55",
+ "chksum_sha256": "8951ff0e1a3b6d71c64c3c00e22d6a9abf665c4ba9cc9ac55aa3f2fc487c7a22",
"format": 1
},
{
- "name": "tests/integration/targets/junos_l3_interfaces/tests/netconf/fixtures",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/junos/fixtures/junos_l2_interfaces.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "24c59086e1366073480715f57aacecc54e44c120e17b25b2f7402333aa1cb0ef",
"format": 1
},
{
- "name": "tests/integration/targets/junos_l3_interfaces/tests/netconf/fixtures/parsed.cfg",
+ "name": "tests/unit/modules/network/junos/fixtures/show_interfaces_details_xml.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e1de14afc1f1c7fdfd493a909abb1a7750c41e523202b5f1b28b5e72697dc392",
+ "chksum_sha256": "5da1160ee1c09d42921f8664244e49c31ac21bf2b784e94794b4f134a36af4ed",
"format": 1
},
{
- "name": "tests/integration/targets/junos_l3_interfaces/tests/netconf/parsed.yaml",
+ "name": "tests/unit/modules/network/junos/fixtures/junos_hostname_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aae73401a3875d3e300c6cb1feaecfb90dda0960cb8a5e90ea0315542f199dc9",
+ "chksum_sha256": "86436c245da27a6ddaf085a66679b98fcba33b0d5ef801652d8bde564c5f4417",
"format": 1
},
{
- "name": "tests/integration/targets/junos_l3_interfaces/tests/netconf/rendered.yaml",
+ "name": "tests/unit/modules/network/junos/fixtures/junos_security_zones_config.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "800b45c331345dde3e54b0b067ff922982049dfa5f38a66d4dd3d84aba033581",
+ "chksum_sha256": "72a5d8773cfbf73e55a219ddd23fc03d5698af853088f5087cb9d3916a7e2743",
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/junos/test_junos_snmp_server.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "400649e3f999cffb5f8b768ae70ec46b41e61fbc92e5c47ff24f1c7cc4ed9ca5",
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/junos/test_junos_ospf_interfaces.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3e501f52f5f8c77263a01aeb701de55882953fb22e5e9ff6fccbfb6ad3141721",
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging/tasks/main.yaml",
+ "name": "tests/unit/modules/network/junos/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "92cbd43574bbfdaa210122a3fbe9a20faf7284bd562f1f6a350853884fa4eac2",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging/tasks/netconf.yaml",
+ "name": "tests/unit/modules/network/junos/test_junos_hostname.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3006a95309847acbfecc0a9c6cbeaad782956e7814679010a9bbb7782cab4aa8",
+ "chksum_sha256": "9c5f1f36eaeb3674be89e4b008cdb73800017faa3fbf281b68a11865779e1f85",
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/junos/test_junos_config.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "adba877fad9c9748adad9582eb9d24efab8107d3c27a52c1d76b7649c1c21481",
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging/meta/main.yml",
+ "name": "tests/unit/modules/network/junos/test_junos_ospfv3.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bc68ec01fd23c20e3b8b8c51a032ab8839e7bb710a457f32a3627c9dd7f8591",
+ "chksum_sha256": "b156108ea990fe350fa2d7594080551e404a687ffa50e8c9b3e117268f64f783",
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/junos/test_junos_scp.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0458ef1b267cc2ff50f2841cf6709212e4722275cd15d9071a54296c5598bd96",
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging/defaults/main.yaml",
+ "name": "tests/unit/modules/network/junos/test_junos_netconf.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032",
+ "chksum_sha256": "6ca952fd12ff2334f193b35b3c87bc05059f7635373ac88df5d693f3757e91f8",
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging/tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/junos/test_junos_l3_interfaces.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f857456d9eef4ec564d47807eb5f603d30419acbe24e9d1ec6cb5b9ecca2dede",
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging/tests/netconf",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/junos/test_junos_bgp_address_family.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5a4f0b3e42da9bc24a8e29f8202e7b7a737791d49fbc8cc5b3491ca26aee38b5",
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging/tests/netconf/basic.yaml",
+ "name": "tests/unit/modules/network/junos/test_junos_prefix_lists.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e2b732c602d35d29c0c823ec48c9358fc33a537bf82295e1d0548884eb046872",
+ "chksum_sha256": "2496ce74c40a8698097d9842b10b1d32f446f6c28242487775ae9738a2c1881a",
"format": 1
},
{
- "name": "tests/integration/targets/junos_logging/aliases",
+ "name": "tests/unit/modules/network/junos/test_junos_vlans.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "d539f8b52e2ae0e2ed3e3154015d4e88396fd08425e0da65430a4712fdc31fa3",
"format": 1
},
{
- "name": "tests/integration/target-prefixes.network",
+ "name": "tests/unit/modules/network/junos/junos_module.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3f98508805af0da212b0fd104e964e875cc1964a31ed0e264fad016ac56f037",
+ "chksum_sha256": "77b38ebd0d49b8a6297e4f186dab942d645747a40ee376a6422e4cb1e465593e",
"format": 1
},
{
- "name": "tests/.gitignore",
+ "name": "tests/unit/modules/network/junos/test_junos_security_policies_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b5726d3ec9335a09c124469eca039523847a6b0f08a083efaefd002b83326600",
+ "chksum_sha256": "8d1c759b573dc7ad3b605d1b61ea990c0df0dd783aeb25393b2935e7ecbf1619",
"format": 1
},
{
- "name": "docs",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/unit/modules/network/junos/test_junos_ntp_global.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0dc5cb3a8ac37be5772be0541c57814fbfa2cc9b68122134e1ddba0250d31451",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_cliconf.rst",
+ "name": "tests/unit/modules/network/junos/test_junos_bgp_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "61ef607afd8afff078c3787f3b75a4c870ac27a71aeb77037b02d909c304298b",
+ "chksum_sha256": "9c9d69827221d1abb7eabcc148f6013a2d79bff8776a7b2a8b84fe0cb483df68",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_lag_interfaces_module.rst",
+ "name": "tests/unit/modules/network/junos/test_junos_routing_instances.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "787d7b1e44363c18b45a8471765f6937e1235a8499865000bd700ecb3c893f54",
+ "chksum_sha256": "d3b4f70903ee6b27f54d5124d750c93f296f98866917a794bb1a417377852e90",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_ospfv2_module.rst",
+ "name": "tests/unit/modules/network/junos/test_junos_logging_global.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bcbecba974a852853e4ffde32b3c9d1c68dc618d2ab5a7aef9d98dd4ea87917e",
+ "chksum_sha256": "e6c1bcc7309b08cd608fb33f78abd436919b2fdacfd67004468c9f9dfececfe0",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_scp_module.rst",
+ "name": "tests/unit/modules/network/junos/test_junos_ping.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3502ed01a666b445e325e1e2abf8bc04c81a8cfc7f9862a2c5534b9a58819950",
+ "chksum_sha256": "35a3fdd13f21ebe4cbdc73dd471c54545c0f7cfd2a78957ed15ceb4483d405b9",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_acl_interfaces_module.rst",
+ "name": "tests/unit/modules/network/junos/test_junos_routing_options.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3c9478dbc1fd1b32cc6f78ab9a8ff48ddd84acfeb0570a38505f886979108594",
+ "chksum_sha256": "2b78e762a38a9a07eeb4763863efd674e4629d98b62f6520ef0d7adec071fe19",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_bgp_global_module.rst",
+ "name": "tests/unit/modules/network/junos/test_junos_security_zones.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "91445b0062de1b99f12289e8328a4101c52c53b212112dc9f29b754e9f9134d5",
+ "chksum_sha256": "fc2fe918347d4a1c4152a087133970fec3c0abe799061388c1b7c8fe5eb8e084",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_acls_module.rst",
+ "name": "tests/unit/modules/network/junos/test_junos_command.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a1aae5fd4ccc313041592cb9ec553b76f8d777117686d3b338b49134bca1859f",
+ "chksum_sha256": "6f46e1e7d7cd263a26b13ad81babb6f5262f8dfaeed45d5b91077b979076ae8f",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_l2_interfaces_module.rst",
+ "name": "tests/unit/modules/network/junos/test_junos_l2_interfaces.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "96866e1ee001591b23c3faed8f46997b467fcbe035efb0729266f47b5f03e778",
+ "chksum_sha256": "c0a22cf190db72cab81ab01dcd467d5de9d2fcd7a20162b828339bd1b16686b9",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_ntp_global_module.rst",
+ "name": "tests/unit/modules/network/junos/test_junos_ospfv2.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0bed0c9b369ba164f031f315c549e23656b15b354cf1d8e2e43346c1c6f0bb41",
+ "chksum_sha256": "7fdf4d792fbacf561227d27d4189d753a5e8399e84caeaa08fe8684ca295a3fc",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_vlans_module.rst",
+ "name": "tests/unit/modules/network/junos/test_junos_rpc.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "83c2fb1aaf33310b74aa7748e60afc3d86a97f690c9117dc0cfa5d54bd51af95",
+ "chksum_sha256": "f5ca9e2a6aac3d1a81ee218ae0399fc5543e0dfc9258f731872d5011ce65f9ae",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_package_module.rst",
+ "name": "tests/unit/modules/network/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b2715ee74e9bf47a94740757ec2b3162778fead244a5377370db03a2fb45ae9b",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_hostname_module.rst",
+ "name": "tests/unit/modules/utils.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "535066e80fb4273d3a68c3b5e84712073fd96468befd6b02bdf0a2d7ef3396a9",
+ "chksum_sha256": "414c272e9a403bb6009460ec9502c5acfaa9c80b2159c742f6cb2e225938be3e",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_snmp_server_module.rst",
+ "name": "tests/unit/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ac35e68138cfe63db4ff782b8392aa3cd119c613c49fc33417dbc6360fc12f3b",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_routing_options_module.rst",
+ "name": "tests/unit/requirements.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9c1834da84af51c1b3ed8546da1c684c160f30b5cd1bcfbeb0723d3ed8d139e3",
+ "chksum_sha256": "49ba996dc4735c3463e9af561344346dfae14bcc1a68096ce78364b377f0df1f",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_l3_interfaces_module.rst",
+ "name": "tests/.gitignore",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ac905e997c9a2e6b0b83a67219b974f5371dcbe28ade5ac20f0090efe71f9123",
+ "chksum_sha256": "b5726d3ec9335a09c124469eca039523847a6b0f08a083efaefd002b83326600",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_lldp_interfaces_module.rst",
+ "name": "codecov.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ee14b6e2216a1bfcfd1dd8aab64c9eac783991e07c20a7631772a73f7b15dd8a",
+ "chksum_sha256": "4aa7e485dd4db6f8a55b046088c745def2b3145d9499ccda4e9a3336467dcea2",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_ospf_interfaces_module.rst",
+ "name": "tox-ansible.ini",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6da3d02bfa0065ed2bf60e824dce71cc6dc497463834d076ffef3dfb81d58267",
+ "chksum_sha256": "da802bfc2dc2671ca7caba028e8a635b459b131874041d119b698717333a7a49",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_security_policies_module.rst",
+ "name": ".gitignore",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "47c7313a45350d46a3207879849a7edbc352234fa5e1a1d0e5e98d87606834ef",
+ "chksum_sha256": "315971ad9cc5d6ada2391f0940e1800149b211a18be3c7a8f396735d7978702b",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_lacp_module.rst",
+ "name": "LICENSE",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ffbeecae6323b644f732e52db7d332c214c506b2aa19148cf9dc0dba931a7b2f",
+ "chksum_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_prefix_lists_module.rst",
+ "name": ".flake8",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f4eced326ba76538041bf131b2a3d3943c8669ea70a7d815de198f1b0bc9bf49",
+ "chksum_sha256": "7214cfc0a1b4e8b89190e868962196874d9396503f77e47d7dfa342bd29b2a74",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_ospfv3_module.rst",
+ "name": "CHANGELOG.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a650d32f15db73b74f7e20214910a331e2e7f2fb2462e1ce8fb06466b32801e4",
+ "chksum_sha256": "6ed0bc5f95418c64666dcff65683de5fe2e25eadd215df3df2a94c5000efade4",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_security_policies_global_module.rst",
+ "name": "requirements.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b81dd1c97963377c1dba6b703821ed668395028d7e73b6f34db98d5b7fe29c09",
+ "chksum_sha256": "72120963f8c7e635d07e9383be6e58963fe00d8496e6545facd7e00082a4351b",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_banner_module.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "bbdbf43cc2c8724c1a66127fcf74ee0ab928cd8633a2ddfe9650573628ef5f2d",
+ "name": "docs",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_logging_global_module.rst",
+ "name": "docs/junipernetworks.junos.junos_acl_interfaces_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f763a82d4c20f1c993e7f74d86b2b95776876edcb8aea75da1a9f4fc2703464a",
+ "chksum_sha256": "3c9478dbc1fd1b32cc6f78ab9a8ff48ddd84acfeb0570a38505f886979108594",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_facts_module.rst",
+ "name": "docs/junipernetworks.junos.junos_bgp_global_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e9ececb593dd9136f764612c8cb554cee711dcfe27a8f19881cc0337f76571ab",
+ "chksum_sha256": "91445b0062de1b99f12289e8328a4101c52c53b212112dc9f29b754e9f9134d5",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_ping_module.rst",
+ "name": "docs/junipernetworks.junos.junos_lldp_global_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ff706f3ef5240227e799bf098f4b56bbc5eb6b01bb87ba8392e7ea15a87372bd",
+ "chksum_sha256": "a70269e3652b27a94dab6c442a114fed0cd552dc79ff2699c824f7b2ed354efc",
"format": 1
},
{
@@ -8982,262 +9136,269 @@
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_logging_module.rst",
+ "name": "docs/junipernetworks.junos.junos_netconf_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f1475a33fa62807e09b4d03f83ab453e7b37f390cd1a2b31e3f72f1eb030d7b0",
+ "chksum_sha256": "ee525c5a38123911d4e47ea6a316ec446ba36a5a59b28476cedc6c097ab3e691",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_static_routes_module.rst",
+ "name": "docs/junipernetworks.junos.junos_hostname_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d68f20c26bc65ccd116efbcb04180adc5a141787d7ee60153d5ae8ff7f93c624",
+ "chksum_sha256": "535066e80fb4273d3a68c3b5e84712073fd96468befd6b02bdf0a2d7ef3396a9",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_netconf_module.rst",
+ "name": "docs/junipernetworks.junos.junos_routing_instances_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ee525c5a38123911d4e47ea6a316ec446ba36a5a59b28476cedc6c097ab3e691",
+ "chksum_sha256": "53a67c02be94bbc8b0b35faecf99d7ff076a1457e85f9fa16d060ae2d59ce289",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_rpc_module.rst",
+ "name": "docs/junipernetworks.junos.junos_routing_options_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "82b147bd7ec071bb0703718174ecd74576e9105a7f397c0edbca1e408dfdda00",
+ "chksum_sha256": "9c1834da84af51c1b3ed8546da1c684c160f30b5cd1bcfbeb0723d3ed8d139e3",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_routing_instances_module.rst",
+ "name": "docs/junipernetworks.junos.junos_ospfv3_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "53a67c02be94bbc8b0b35faecf99d7ff076a1457e85f9fa16d060ae2d59ce289",
+ "chksum_sha256": "a650d32f15db73b74f7e20214910a331e2e7f2fb2462e1ce8fb06466b32801e4",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_user_module.rst",
+ "name": "docs/junipernetworks.junos.junos_lldp_interfaces_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "03ea649e081efdde592357ee35447384128fc5048912562ecc329e2c5525566b",
+ "chksum_sha256": "ee14b6e2216a1bfcfd1dd8aab64c9eac783991e07c20a7631772a73f7b15dd8a",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_interfaces_module.rst",
+ "name": "docs/junipernetworks.junos.junos_lacp_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "60f7bf31a86baf8e03946528a413476991a0d4745ebd7e47ae64e20a68fbc7e0",
+ "chksum_sha256": "ffbeecae6323b644f732e52db7d332c214c506b2aa19148cf9dc0dba931a7b2f",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_lldp_global_module.rst",
+ "name": "docs/junipernetworks.junos.junos_cliconf.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a70269e3652b27a94dab6c442a114fed0cd552dc79ff2699c824f7b2ed354efc",
+ "chksum_sha256": "61ef607afd8afff078c3787f3b75a4c870ac27a71aeb77037b02d909c304298b",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_security_zones_module.rst",
+ "name": "docs/junipernetworks.junos.junos_lag_interfaces_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "84470a721603716fc9f96148a70ef6a6cfafc230b4b0862175366d0d743fbac1",
+ "chksum_sha256": "787d7b1e44363c18b45a8471765f6937e1235a8499865000bd700ecb3c893f54",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_command_module.rst",
+ "name": "docs/junipernetworks.junos.junos_netconf.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "39f5d111cb71f425c44278a9f0c1bbfbe16d311c794a98d06c36fadf22a94265",
+ "chksum_sha256": "14b028e7197d8b36e5548a189873cac83617ed127d11284f4ab557203b0d7f88",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_netconf.rst",
+ "name": "docs/junipernetworks.junos.junos_system_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "14b028e7197d8b36e5548a189873cac83617ed127d11284f4ab557203b0d7f88",
+ "chksum_sha256": "284394786b5d048e1f6833dd1581437e69edfd3e9012b87ace78b500dfe7884c",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_vrf_module.rst",
+ "name": "docs/junipernetworks.junos.junos_prefix_lists_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3c37761090a81cc597a23d31e0202da7c6803ba70b9dfb54db87f17a05717d67",
+ "chksum_sha256": "f4eced326ba76538041bf131b2a3d3943c8669ea70a7d815de198f1b0bc9bf49",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_config_module.rst",
+ "name": "docs/junipernetworks.junos.junos_ping_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9216d75e7c90d93153752899275ca7e6717403c54fda6df5c71c36df21875b22",
+ "chksum_sha256": "ff706f3ef5240227e799bf098f4b56bbc5eb6b01bb87ba8392e7ea15a87372bd",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_bgp_address_family_module.rst",
+ "name": "docs/junipernetworks.junos.junos_scp_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0f3eb30b2db1124c4139d7fba1ad18cfb1ce8be2d4b052fb89cebfb961963eb3",
+ "chksum_sha256": "3502ed01a666b445e325e1e2abf8bc04c81a8cfc7f9862a2c5534b9a58819950",
"format": 1
},
{
- "name": "docs/junipernetworks.junos.junos_system_module.rst",
+ "name": "docs/junipernetworks.junos.junos_security_policies_global_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "284394786b5d048e1f6833dd1581437e69edfd3e9012b87ace78b500dfe7884c",
+ "chksum_sha256": "b81dd1c97963377c1dba6b703821ed668395028d7e73b6f34db98d5b7fe29c09",
"format": 1
},
{
- "name": ".isort.cfg",
+ "name": "docs/junipernetworks.junos.junos_vrf_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9a0037e12d4e5d11a360d4522e64be506299bad16812825ebd7b5f0be9918524",
+ "chksum_sha256": "3c37761090a81cc597a23d31e0202da7c6803ba70b9dfb54db87f17a05717d67",
"format": 1
},
{
- "name": "pyproject.toml",
+ "name": "docs/junipernetworks.junos.junos_ospf_interfaces_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1cb6a45dfa2625123890b93ad7fdc156b063c16e8ae6dba11511a1d1986b0fcc",
+ "chksum_sha256": "6da3d02bfa0065ed2bf60e824dce71cc6dc497463834d076ffef3dfb81d58267",
"format": 1
},
{
- "name": "bindep.txt",
+ "name": "docs/junipernetworks.junos.junos_config_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "600b108016611a2a846e0ed86f52da6a9184cddea7e4b6859ffdf2aa5a9af19b",
+ "chksum_sha256": "627b57c31dd442aeed20dbdf33d414b466c985593e87a33b2fc6d361b086e078",
"format": 1
},
{
- "name": "changelogs",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "docs/junipernetworks.junos.junos_security_policies_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "47c7313a45350d46a3207879849a7edbc352234fa5e1a1d0e5e98d87606834ef",
"format": 1
},
{
- "name": "changelogs/fragments",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "docs/junipernetworks.junos.junos_static_routes_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d68f20c26bc65ccd116efbcb04180adc5a141787d7ee60153d5ae8ff7f93c624",
"format": 1
},
{
- "name": "changelogs/fragments/.keep",
+ "name": "docs/junipernetworks.junos.junos_banner_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "bbdbf43cc2c8724c1a66127fcf74ee0ab928cd8633a2ddfe9650573628ef5f2d",
"format": 1
},
{
- "name": "changelogs/config.yaml",
+ "name": "docs/junipernetworks.junos.junos_acls_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5cfa2df4e55abdedbdf6786d3152af410249523c96a41f89a34be3510af3395e",
+ "chksum_sha256": "a1aae5fd4ccc313041592cb9ec553b76f8d777117686d3b338b49134bca1859f",
"format": 1
},
{
- "name": "changelogs/changelog.yaml",
+ "name": "docs/junipernetworks.junos.junos_snmp_server_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8523dd9b7099cc44e9350fe1bca05f7725558c72eff3ceaa277a827566aae9f2",
+ "chksum_sha256": "ac35e68138cfe63db4ff782b8392aa3cd119c613c49fc33417dbc6360fc12f3b",
"format": 1
},
{
- "name": "tox.ini",
+ "name": "docs/junipernetworks.junos.junos_logging_global_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5f3772a197ba80e8bd7dfd59cf18c30f081e1247f42ea7e20dc1e8df3b06c184",
+ "chksum_sha256": "f763a82d4c20f1c993e7f74d86b2b95776876edcb8aea75da1a9f4fc2703464a",
"format": 1
},
{
- "name": "CHANGELOG.rst",
+ "name": "docs/junipernetworks.junos.junos_ospfv2_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9a2c1afa7d6f2bd436195a262607daeb9ddcff82bcdff3bc3499a229eb1c0fd8",
+ "chksum_sha256": "bcbecba974a852853e4ffde32b3c9d1c68dc618d2ab5a7aef9d98dd4ea87917e",
"format": 1
},
{
- "name": ".gitignore",
+ "name": "docs/junipernetworks.junos.junos_ntp_global_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "315971ad9cc5d6ada2391f0940e1800149b211a18be3c7a8f396735d7978702b",
+ "chksum_sha256": "0bed0c9b369ba164f031f315c549e23656b15b354cf1d8e2e43346c1c6f0bb41",
"format": 1
},
{
- "name": ".pre-commit-config.yaml",
+ "name": "docs/junipernetworks.junos.junos_vlans_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "08940a10222925e0f47d36e2457f1b3e7045ed20b4e72989208b83cda88a2c25",
+ "chksum_sha256": "83c2fb1aaf33310b74aa7748e60afc3d86a97f690c9117dc0cfa5d54bd51af95",
"format": 1
},
{
- "name": ".prettierignore",
+ "name": "docs/junipernetworks.junos.junos_interfaces_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5c227902cb92d03412c05c2fd86d8aa4f5d32afddbd718da067b02a3eef4b358",
+ "chksum_sha256": "60f7bf31a86baf8e03946528a413476991a0d4745ebd7e47ae64e20a68fbc7e0",
"format": 1
},
{
- "name": ".github",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "docs/junipernetworks.junos.junos_facts_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e9ececb593dd9136f764612c8cb554cee711dcfe27a8f19881cc0337f76571ab",
"format": 1
},
{
- "name": ".github/dependabot.yml",
+ "name": "docs/junipernetworks.junos.junos_user_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "11ceee3c57116e9fd08bc423414b1095ff002aa012d6fb325b1a7e24d7e28461",
+ "chksum_sha256": "03ea649e081efdde592357ee35447384128fc5048912562ecc329e2c5525566b",
"format": 1
},
{
- "name": ".github/workflows",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "docs/junipernetworks.junos.junos_bgp_address_family_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0f3eb30b2db1124c4139d7fba1ad18cfb1ce8be2d4b052fb89cebfb961963eb3",
"format": 1
},
{
- "name": ".github/workflows/codecoverage.yml",
+ "name": "docs/junipernetworks.junos.junos_l2_interfaces_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a56c8aba05b81d2e1d6575b37963f40df663387030de5eaac6f5c9dfd7af54f1",
+ "chksum_sha256": "46d88933b5eb0e5806789a4e4927bc003af4f1d81f748e50ba0a756409d02aab",
"format": 1
},
{
- "name": ".github/workflows/ack.yml",
+ "name": "docs/junipernetworks.junos.junos_package_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "24c6fbafaa69e3e3ee696f2cefa5120794b62cef7e870553dddce8b8af0a127c",
+ "chksum_sha256": "b2715ee74e9bf47a94740757ec2b3162778fead244a5377370db03a2fb45ae9b",
"format": 1
},
{
- "name": ".github/workflows/release.yml",
+ "name": "docs/junipernetworks.junos.junos_security_zones_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c9b7dba505905600bbb9f0d8e9956b7cc20f80edfa742dfdae9395542f417aa1",
+ "chksum_sha256": "84470a721603716fc9f96148a70ef6a6cfafc230b4b0862175366d0d743fbac1",
"format": 1
},
{
- "name": ".github/workflows/push.yml",
+ "name": "docs/junipernetworks.junos.junos_command_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ae51ce2e47c0569a12eed22cec3fcf7f609e44fc8d75ad67e076770717adfd2f",
+ "chksum_sha256": "39f5d111cb71f425c44278a9f0c1bbfbe16d311c794a98d06c36fadf22a94265",
"format": 1
},
{
- "name": ".github/workflows/tests.yml",
+ "name": "docs/junipernetworks.junos.junos_l3_interfaces_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "171f96988e94904529bd337341a93ebb689e4a220663260d5cc0839aac584d21",
+ "chksum_sha256": "92fb6b4d9af0ae7b723266f3e9fdf5984a1e34cd89fe2296624c2dad77628ac0",
"format": 1
},
{
- "name": ".github/release-drafter.yml",
+ "name": "docs/junipernetworks.junos.junos_rpc_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7cbc785c8661033cd9dd7a60897484fce731cbe3dc124a689fc3e934b1d974fb",
+ "chksum_sha256": "82b147bd7ec071bb0703718174ecd74576e9105a7f397c0edbca1e408dfdda00",
+ "format": 1
+ },
+ {
+ "name": "bindep.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "269d09ec28c497c8cfd41a61066d66748d819078a6d8ed84f07ec85ae1dee762",
"format": 1
}
],
diff --git a/ansible_collections/junipernetworks/junos/MANIFEST.json b/ansible_collections/junipernetworks/junos/MANIFEST.json
index 778cc30f6..37ce8b546 100644
--- a/ansible_collections/junipernetworks/junos/MANIFEST.json
+++ b/ansible_collections/junipernetworks/junos/MANIFEST.json
@@ -2,7 +2,7 @@
"collection_info": {
"namespace": "junipernetworks",
"name": "junos",
- "version": "5.3.1",
+ "version": "8.0.0",
"authors": [
"Ansible Network Community (ansible-network)"
],
@@ -19,7 +19,7 @@
"license": [],
"license_file": "LICENSE",
"dependencies": {
- "ansible.netcommon": ">=2.5.1"
+ "ansible.netcommon": ">=6.1.0"
},
"repository": "https://github.com/ansible-collections/junipernetworks.junos",
"documentation": null,
@@ -30,7 +30,7 @@
"name": "FILES.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ceb92f0594402948a6a16ec8c3b6cc0f3a38433e1e96efed3abb5c3a7730af25",
+ "chksum_sha256": "dcb6547e01a901e2f60f56c1e1ccaee21bbb2a4ec9018a71a70069ac01f8c676",
"format": 1
},
"format": 1
diff --git a/ansible_collections/junipernetworks/junos/README.md b/ansible_collections/junipernetworks/junos/README.md
index c0d2a7014..241cc3664 100644
--- a/ansible_collections/junipernetworks/junos/README.md
+++ b/ansible_collections/junipernetworks/junos/README.md
@@ -11,7 +11,7 @@ This collection has been tested against Juniper Networks Junos OS 18.4R1.
<!--start requires_ansible-->
## 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`).
@@ -57,7 +57,6 @@ Name | Description
[junipernetworks.junos.junos_lag_interfaces](https://github.com/ansible-collections/junipernetworks.junos/blob/main/docs/junipernetworks.junos.junos_lag_interfaces_module.rst)|Link Aggregation Juniper JUNOS resource module
[junipernetworks.junos.junos_lldp_global](https://github.com/ansible-collections/junipernetworks.junos/blob/main/docs/junipernetworks.junos.junos_lldp_global_module.rst)|LLDP resource module
[junipernetworks.junos.junos_lldp_interfaces](https://github.com/ansible-collections/junipernetworks.junos/blob/main/docs/junipernetworks.junos.junos_lldp_interfaces_module.rst)|LLDP interfaces resource module
-[junipernetworks.junos.junos_logging](https://github.com/ansible-collections/junipernetworks.junos/blob/main/docs/junipernetworks.junos.junos_logging_module.rst)|Manage logging on network devices
[junipernetworks.junos.junos_logging_global](https://github.com/ansible-collections/junipernetworks.junos/blob/main/docs/junipernetworks.junos.junos_logging_global_module.rst)|Manage logging configuration on Junos devices.
[junipernetworks.junos.junos_netconf](https://github.com/ansible-collections/junipernetworks.junos/blob/main/docs/junipernetworks.junos.junos_netconf_module.rst)|Configures the Junos Netconf system service
[junipernetworks.junos.junos_ntp_global](https://github.com/ansible-collections/junipernetworks.junos/blob/main/docs/junipernetworks.junos.junos_ntp_global_module.rst)|Manage NTP configuration on Junos devices.
@@ -120,8 +119,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:
- [Juniper Junos Platform options](https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html).
diff --git a/ansible_collections/junipernetworks/junos/bindep.txt b/ansible_collections/junipernetworks/junos/bindep.txt
index cab23f9fc..cffe80b2a 100644
--- a/ansible_collections/junipernetworks/junos/bindep.txt
+++ b/ansible_collections/junipernetworks/junos/bindep.txt
@@ -4,5 +4,4 @@
gcc-c++ [doc test platform:rpm]
python3-devel [test platform:rpm]
python3 [test platform:rpm]
-libssh-devel [test platform:rpm]
-libssh-dev [test platform:dpkg]
+libssh-devel [compile platform:rpm]
diff --git a/ansible_collections/junipernetworks/junos/changelogs/changelog.yaml b/ansible_collections/junipernetworks/junos/changelogs/changelog.yaml
index d7b1308e0..3da3e4cec 100644
--- a/ansible_collections/junipernetworks/junos/changelogs/changelog.yaml
+++ b/ansible_collections/junipernetworks/junos/changelogs/changelog.yaml
@@ -576,3 +576,82 @@ releases:
- sanity_job_fix.yaml
- update_l2_3_docs.yaml
release_date: "2023-11-27"
+ 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.1`.
+ fragments:
+ - update_l2_interfaces_tests.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.
+ fragments:
+ - module_defaults.yaml
+ - trivial_lint.yaml
+ release_date: "2024-01-31"
+ 6.0.2:
+ changes:
+ bugfixes:
+ - acls
+ - 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
+ doc_changes:
+ - Remove the part of the description which incorrectly describes the behavior
+ and type of confirm attribute.
+ - Update example performing `confirm_commit`.
+ - Update with more examples using the `confirm` option to set a timer.
+ fragments:
+ - empty_facts.yaml
+ - update_junos_config_docs.yaml
+ release_date: "2024-03-06"
+ 7.0.0:
+ changes:
+ bugfixes:
+ - Fix the empty facts list placement
+ major_changes:
+ - This release removes previously deprecated modules from this collection. Please
+ refer to the **Removed Features** section for details.
+ removed_features:
+ - Remove deprected junos_logging module which is replaced by junos_logging_global
+ resource module.
+ fragments:
+ - fix_upstream_tetst.yaml
+ - remove_deprecated.yaml
+ - trivial_tests_updates.yaml
+ release_date: "2024-03-27"
+ 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:
+ - 218sanity.yml
+ - add_restore_implementation.yaml
+ release_date: "2024-04-13"
diff --git a/ansible_collections/junipernetworks/junos/docs/junipernetworks.junos.junos_config_module.rst b/ansible_collections/junipernetworks/junos/docs/junipernetworks.junos.junos_config_module.rst
index 5abc26ee7..61051583d 100644
--- a/ansible_collections/junipernetworks/junos/docs/junipernetworks.junos.junos_config_module.rst
+++ b/ansible_collections/junipernetworks/junos/docs/junipernetworks.junos.junos_config_module.rst
@@ -177,7 +177,7 @@ Parameters
<b>Default:</b><br/><div style="color: blue">0</div>
</td>
<td>
- <div>The <code>confirm</code> argument will configure a time out value in minutes for the commit to be confirmed before it is automatically rolled back. If the <code>confirm</code> argument is set to False, this argument is silently ignored. If the value for this argument is set to 0, the commit is confirmed immediately.</div>
+ <div>The <code>confirm</code> argument will configure a time out value in minutes for the commit to be confirmed before it is automatically rolled back. If the value for this argument is set to 0, the commit is confirmed immediately which is also the default behaviour.</div>
</td>
</tr>
<tr>
@@ -410,6 +410,16 @@ Examples
filename: backup.cfg
dir_path: /home/user
+ - name: Set description with timer to confirm commit
+ junipernetworks.junos.junos_config:
+ lines:
+ - set interfaces fxp0 description "wait for a commit confirmation for 3 minutes; otherwise, it will be rolled back."
+ confirm: 3
+
+ - name: Perform confirm commit
+ junipernetworks.junos.junos_config:
+ confirm_commit: true
+
Return Values
diff --git a/ansible_collections/junipernetworks/junos/docs/junipernetworks.junos.junos_l2_interfaces_module.rst b/ansible_collections/junipernetworks/junos/docs/junipernetworks.junos.junos_l2_interfaces_module.rst
index b14828db2..b6f422db9 100644
--- a/ansible_collections/junipernetworks/junos/docs/junipernetworks.junos.junos_l2_interfaces_module.rst
+++ b/ansible_collections/junipernetworks/junos/docs/junipernetworks.junos.junos_l2_interfaces_module.rst
@@ -466,11 +466,11 @@ Examples
- name: Override provided configuration with device configuration
junipernetworks.junos.junos_l2_interfaces:
config:
- - name: ge-0/0/4
- trunk:
- allowed_vlans:
- - v101
- native_vlan: 30
+ - name: ge-0/0/4
+ trunk:
+ allowed_vlans:
+ - v101
+ native_vlan: 30
state: overridden
# Task Output
@@ -630,14 +630,14 @@ Examples
- name: Replace provided configuration with device configuration
junipernetworks.junos.junos_l2_interfaces:
config:
- - name: ge-0/0/3
- access:
- vlan: v101
- - name: ge-0/0/4
- trunk:
- allowed_vlans:
- - vlan30
- native_vlan: 50
+ - name: ge-0/0/3
+ access:
+ vlan: v101
+ - name: ge-0/0/4
+ trunk:
+ allowed_vlans:
+ - vlan30
+ native_vlan: 50
state: replaced
# Task Output
@@ -810,8 +810,8 @@ Examples
interface itself)."
junipernetworks.junos.junos_l2_interfaces:
config:
- - name: ge-0/0/1
- - name: ge-0/0/2
+ - name: ge-0/0/1
+ - name: ge-0/0/2
state: deleted
# Task Output
diff --git a/ansible_collections/junipernetworks/junos/docs/junipernetworks.junos.junos_l3_interfaces_module.rst b/ansible_collections/junipernetworks/junos/docs/junipernetworks.junos.junos_l3_interfaces_module.rst
index ef68d82f2..b8b9ff9c5 100644
--- a/ansible_collections/junipernetworks/junos/docs/junipernetworks.junos.junos_l3_interfaces_module.rst
+++ b/ansible_collections/junipernetworks/junos/docs/junipernetworks.junos.junos_l3_interfaces_module.rst
@@ -239,14 +239,14 @@ Examples
- name: Merge provided configuration with device configuration
junipernetworks.junos.junos_l3_interfaces:
config:
- - name: ge-0/0/1
- ipv4:
- - address: 192.168.1.10/24
- ipv6:
- - address: 8d8d:8d01::1/64
- - name: ge-0/0/2
- ipv4:
- - address: dhcp
+ - name: ge-0/0/1
+ ipv4:
+ - address: 192.168.1.10/24
+ ipv6:
+ - address: 8d8d:8d01::1/64
+ - name: ge-0/0/2
+ ipv4:
+ - address: dhcp
state: merged
# Task Output
@@ -372,13 +372,13 @@ Examples
- name: Override provided configuration with device configuration
junipernetworks.junos.junos_l3_interfaces:
config:
- - name: ge-0/0/1
- ipv4:
- - address: 192.168.1.10/24
- - ipv4:
- - address: dhcp
- name: fxp0
- unit: '0'
+ - name: ge-0/0/1
+ ipv4:
+ - address: 192.168.1.10/24
+ - ipv4:
+ - address: dhcp
+ name: fxp0
+ unit: '0'
state: overridden
# Task Output
@@ -541,14 +541,14 @@ Examples
- name: Replace provided configuration with device configuration
junipernetworks.junos.junos_l3_interfaces:
config:
- - name: ge-0/0/1
- ipv4:
- - address: 192.168.1.10/24
- ipv6:
- - address: 8d8d:8d01::1/64
- - name: ge-0/0/2
- ipv4:
- - address: dhcp
+ - name: ge-0/0/1
+ ipv4:
+ - address: 192.168.1.10/24
+ ipv6:
+ - address: 8d8d:8d01::1/64
+ - name: ge-0/0/2
+ ipv4:
+ - address: dhcp
state: replaced
# Task Output
@@ -710,8 +710,8 @@ Examples
- name: Delete L3 logical interface
junipernetworks.junos.junos_l3_interfaces:
config:
- - name: ge-0/0/1
- - name: ge-0/0/2
+ - name: ge-0/0/1
+ - name: ge-0/0/2
state: deleted
# Task Output
diff --git a/ansible_collections/junipernetworks/junos/docs/junipernetworks.junos.junos_logging_module.rst b/ansible_collections/junipernetworks/junos/docs/junipernetworks.junos.junos_logging_module.rst
deleted file mode 100644
index 7274d565b..000000000
--- a/ansible_collections/junipernetworks/junos/docs/junipernetworks.junos.junos_logging_module.rst
+++ /dev/null
@@ -1,487 +0,0 @@
-.. _junipernetworks.junos.junos_logging_module:
-
-
-***********************************
-junipernetworks.junos.junos_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: junos_logging_global
-
-
-
-Synopsis
---------
-- This module provides declarative management of logging on Juniper JUNOS devices.
-
-
-
-Requirements
-------------
-The below requirements are needed on the host that executes this module.
-
-- ncclient (>=v0.5.2)
-
-
-Parameters
-----------
-
-.. raw:: html
-
- <table border=0 cellpadding=0 class="documentation-table">
- <tr>
- <th colspan="2">Parameter</th>
- <th>Choices/<font color="blue">Defaults</font></th>
- <th width="100%">Comments</th>
- </tr>
- <tr>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>active</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">boolean</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li><div style="color: blue"><b>yes</b>&nbsp;&larr;</div></li>
- </ul>
- </td>
- <td>
- <div>Specifies whether or not the configuration is active or deactivated</div>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>aggregate</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">list</span>
- / <span style="color: purple">elements=dictionary</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>List of logging definitions.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>active</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">boolean</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li>yes</li>
- </ul>
- </td>
- <td>
- <div>Specifies whether or not the configuration is active or deactivated</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>dest</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>console</li>
- <li>host</li>
- <li>file</li>
- <li>user</li>
- </ul>
- </td>
- <td>
- <div>Destination of the logs.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>facility</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Set logging facility.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>files</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Number of files to be archived, this is applicable if value of <em>dest</em> is <code>file</code>. The acceptable value is in range from 1 to 1000.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>level</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Set logging severity levels.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>name</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>If value of <code>dest</code> is <em>file</em> it indicates file-name, for <em>user</em> it indicates username and for <em>host</em> indicates the host name to be notified.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>rotate_frequency</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Rotate log frequency in minutes, this is applicable if value of <em>dest</em> is <code>file</code>. The acceptable value is in range of 1 to 59. This controls the frequency after which log file is rotated.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>size</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Size of the file in archive, this is applicable if value of <em>dest</em> is <code>file</code>. The acceptable value is in range from 65536 to 1073741824 bytes.</div>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder"></td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>state</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>present</li>
- <li>absent</li>
- </ul>
- </td>
- <td>
- <div>State of the logging configuration.</div>
- </td>
- </tr>
-
- <tr>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>dest</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>console</li>
- <li>host</li>
- <li>file</li>
- <li>user</li>
- </ul>
- </td>
- <td>
- <div>Destination of the logs.</div>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>facility</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Set logging facility.</div>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>files</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Number of files to be archived, this is applicable if value of <em>dest</em> is <code>file</code>. The acceptable value is in range from 1 to 1000.</div>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>level</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Set logging severity levels.</div>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>name</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>If value of <code>dest</code> is <em>file</em> it indicates file-name, for <em>user</em> it indicates username and for <em>host</em> indicates the host name to be notified.</div>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>rotate_frequency</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Rotate log frequency in minutes, this is applicable if value of <em>dest</em> is <code>file</code>. The acceptable value is in range of 1 to 59. This controls the frequency after which log file is rotated.</div>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>size</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">integer</span>
- </div>
- </td>
- <td>
- </td>
- <td>
- <div>Size of the file in archive, this is applicable if value of <em>dest</em> is <code>file</code>. The acceptable value is in range from 65536 to 1073741824 bytes.</div>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="parameter-"></div>
- <b>state</b>
- <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li><div style="color: blue"><b>present</b>&nbsp;&larr;</div></li>
- <li>absent</li>
- </ul>
- </td>
- <td>
- <div>State of the logging configuration.</div>
- </td>
- </tr>
- </table>
- <br/>
-
-
-Notes
------
-
-.. note::
- - This module requires the netconf system service be enabled on the remote device being managed.
- - Tested against vSRX JUNOS version 15.1X49-D15.4, vqfx-10000 JUNOS Version 15.1X53-D60.4.
- - Recommended connection is ``netconf``. See `the Junos OS Platform Options <../network/user_guide/platform_junos.html>`_.
- - This module also works with ``local`` connections for legacy playbooks.
- - For information on using CLI and netconf see the :ref:`Junos OS Platform Options guide <junos_platform_options>`
- - For more information on using Ansible to manage network devices see the :ref:`Ansible Network Guide <network_guide>`
- - For more information on using Ansible to manage Juniper network devices see https://www.ansible.com/ansible-juniper.
-
-
-
-Examples
---------
-
-.. code-block:: yaml
-
- - name: configure console logging
- junipernetworks.junos.junos_logging:
- dest: console
- facility: any
- level: critical
-
- - name: remove console logging configuration
- junipernetworks.junos.junos_logging:
- dest: console
- state: absent
-
- - name: configure file logging
- junipernetworks.junos.junos_logging:
- dest: file
- name: test
- facility: pfe
- level: error
-
- - name: configure logging parameter
- junipernetworks.junos.junos_logging:
- files: 30
- size: 65536
- rotate_frequency: 10
-
- - name: Configure file logging using aggregate
- junipernetworks.junos.junos_logging:
- dest: file
- aggregate:
- - name: test-1
- facility: pfe
- level: critical
- - name: test-2
- facility: kernel
- level: emergency
- active: true
-
- - name: Delete file logging using aggregate
- junipernetworks.junos.junos_logging:
- aggregate:
- - {dest: file, name: test-1, facility: pfe, level: critical}
- - {dest: file, name: test-2, facility: kernel, level: emergency}
- state: absent
-
-
-
-Return Values
--------------
-Common return values are documented `here <https://docs.ansible.com/ansible/latest/reference_appendices/common_return_values.html#common-return-values>`_, the following are the fields unique to this module:
-
-.. raw:: html
-
- <table border=0 cellpadding=0 class="documentation-table">
- <tr>
- <th colspan="1">Key</th>
- <th>Returned</th>
- <th width="100%">Description</th>
- </tr>
- <tr>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="return-"></div>
- <b>diff.prepared</b>
- <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>when configuration is changed and diff option is enabled.</td>
- <td>
- <div>Configuration difference before and after applying change.</div>
- <br/>
- <div style="font-size: smaller"><b>Sample:</b></div>
- <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">[edit system syslog] + [edit system syslog]
- file interactive-commands { ... }
- + file test { + pfe critical; + }</div>
- </td>
- </tr>
- </table>
- <br/><br/>
-
-
-Status
-------
-
-
-- This module will be removed in a release after 2023-08-01. *[deprecated]*
-- For more information see `DEPRECATED`_.
-
-
-Authors
-~~~~~~~
-
-- Ganesh Nalawade (@ganeshrn)
diff --git a/ansible_collections/junipernetworks/junos/meta/runtime.yml b/ansible_collections/junipernetworks/junos/meta/runtime.yml
index d66238ec0..4bc0093fb 100644
--- a/ansible_collections/junipernetworks/junos/meta/runtime.yml
+++ b/ansible_collections/junipernetworks/junos/meta/runtime.yml
@@ -1,169 +1,6 @@
---
-requires_ansible: ">=2.9.10"
+requires_ansible: ">=2.14.0"
plugin_routing:
- action:
- junos_acl_interfaces:
- redirect: junipernetworks.junos.junos
- acl_interfaces:
- redirect: junipernetworks.junos.junos
- junos_acls:
- redirect: junipernetworks.junos.junos
- acls:
- redirect: junipernetworks.junos.junos
- junos_banner:
- redirect: junipernetworks.junos.junos
- banner:
- redirect: junipernetworks.junos.junos
- junos_command:
- redirect: junipernetworks.junos.junos
- command:
- redirect: junipernetworks.junos.junos
- junos_config:
- redirect: junipernetworks.junos.junos
- config:
- redirect: junipernetworks.junos.junos
- junos_facts:
- redirect: junipernetworks.junos.junos
- facts:
- redirect: junipernetworks.junos.junos
- junos_interfaces:
- redirect: junipernetworks.junos.junos
- interfaces:
- redirect: junipernetworks.junos.junos
- junos_l2_interfaces:
- redirect: junipernetworks.junos.junos
- l2_interfaces:
- redirect: junipernetworks.junos.junos
- junos_l3_interfaces:
- redirect: junipernetworks.junos.junos
- l3_interfaces:
- redirect: junipernetworks.junos.junos
- junos_lacp:
- redirect: junipernetworks.junos.junos
- lacp:
- redirect: junipernetworks.junos.junos
- junos_lacp_interfaces:
- redirect: junipernetworks.junos.junos
- lacp_interfaces:
- redirect: junipernetworks.junos.junos
- junos_lag_interfaces:
- redirect: junipernetworks.junos.junos
- lag_interfaces:
- redirect: junipernetworks.junos.junos
- junos_lldp_global:
- redirect: junipernetworks.junos.junos
- security_policies_global:
- redirect: junipernetworks.junos.junos
- junos_security_policies_global:
- redirect: junipernetworks.junos.junos
- lldp_global:
- redirect: junipernetworks.junos.junos
- junos_bgp_global:
- redirect: junipernetworks.junos.junos
- bgp_global:
- redirect: junipernetworks.junos.junos
- junos_bgp_address_family:
- redirect: junipernetworks.junos.junos
- bgp_address_family:
- redirect: junipernetworks.junos.junos
- junos_routing_instances:
- redirect: junipernetworks.junos.junos
- routing_instances:
- redirect: junipernetworks.junos.junos
- junos_prefix_lists:
- redirect: junipernetworks.junos.junos
- prefix_lists:
- redirect: junipernetworks.junos.junos
- junos_logging_global:
- redirect: junipernetworks.junos.junos
- logging_global:
- redirect: junipernetworks.junos.junos
- junos_ntp_global:
- redirect: junipernetworks.junos.junos
- ntp_global:
- redirect: junipernetworks.junos.junos
- junos_security_policies:
- redirect: junipernetworks.junos.junos
- security_policies:
- redirect: junipernetworks.junos.junos
- junos_security_zones:
- redirect: junipernetworks.junos.junos
- security_zones:
- redirect: junipernetworks.junos.junos
- junos_snmp_server:
- redirect: junipernetworks.junos.junos
- snmp_server:
- redirect: junipernetworks.junos.junos
- junos_hostname:
- redirect: junipernetworks.junos.junos
- hostname:
- redirect: junipernetworks.junos.junos
- junos_routing_options:
- redirect: junipernetworks.junos.junos
- routing_options:
- redirect: junipernetworks.junos.junos
- junos_lldp_interface:
- redirect: junipernetworks.junos.junos
- junos_lldp_interfaces:
- redirect: junipernetworks.junos.junos
- lldp_interfaces:
- redirect: junipernetworks.junos.junos
- junos_logging:
- redirect: junipernetworks.junos.junos
- logging:
- redirect: junipernetworks.junos.junos
- junos_netconf:
- redirect: junipernetworks.junos.junos
- netconf:
- redirect: junipernetworks.junos.junos
- junos_ospfv2:
- redirect: junipernetworks.junos.junos
- ospfv2:
- redirect: junipernetworks.junos.junos
- junos_ospfv3:
- redirect: junipernetworks.junos.junos
- ospfv3:
- redirect: junipernetworks.junos.junos
- junos_ospf_interfaces:
- redirect: junipernetworks.junos.junos
- ospf_interfaces:
- redirect: junipernetworks.junos.junos
- junos_package:
- redirect: junipernetworks.junos.junos
- package:
- redirect: junipernetworks.junos.junos
- junos_ping:
- redirect: junipernetworks.junos.junos
- ping:
- redirect: junipernetworks.junos.junos
- junos_rpc:
- redirect: junipernetworks.junos.junos
- rpc:
- redirect: junipernetworks.junos.junos
- junos_scp:
- redirect: junipernetworks.junos.junos
- scp:
- redirect: junipernetworks.junos.junos
- junos_static_routes:
- redirect: junipernetworks.junos.junos
- static_routes:
- redirect: junipernetworks.junos.junos
- junos_system:
- redirect: junipernetworks.junos.junos
- system:
- redirect: junipernetworks.junos.junos
- junos_user:
- redirect: junipernetworks.junos.junos
- user:
- redirect: junipernetworks.junos.junos
- junos_vlans:
- redirect: junipernetworks.junos.junos
- vlans:
- redirect: junipernetworks.junos.junos
- junos_vrf:
- redirect: junipernetworks.junos.junos
- vrf:
- redirect: junipernetworks.junos.junos
modules:
acl_interfaces:
redirect: junipernetworks.junos.junos_acl_interfaces
@@ -217,15 +54,6 @@ plugin_routing:
redirect: junipernetworks.junos.junos_routing_options
lldp_interfaces:
redirect: junipernetworks.junos.junos_lldp_interfaces
- logging:
- redirect: junipernetworks.junos.junos_logging
- deprecation:
- removal_date: "2023-08-01"
- warning_text: See the plugin documentation for more details
- junos_logging:
- deprecation:
- removal_date: "2023-08-01"
- warning_text: See the plugin documentation for more details
netconf:
redirect: junipernetworks.junos.junos_netconf
ospfv2:
diff --git a/ansible_collections/junipernetworks/junos/plugins/action/acl_interfaces.py b/ansible_collections/junipernetworks/junos/plugins/action/acl_interfaces.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/acl_interfaces.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/acls.py b/ansible_collections/junipernetworks/junos/plugins/action/acls.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/acls.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/banner.py b/ansible_collections/junipernetworks/junos/plugins/action/banner.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/banner.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/bgp_address_family.py b/ansible_collections/junipernetworks/junos/plugins/action/bgp_address_family.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/bgp_address_family.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/bgp_global.py b/ansible_collections/junipernetworks/junos/plugins/action/bgp_global.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/bgp_global.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/command.py b/ansible_collections/junipernetworks/junos/plugins/action/command.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/command.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/config.py b/ansible_collections/junipernetworks/junos/plugins/action/config.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/config.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/facts.py b/ansible_collections/junipernetworks/junos/plugins/action/facts.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/facts.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/hostname.py b/ansible_collections/junipernetworks/junos/plugins/action/hostname.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/hostname.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/interfaces.py b/ansible_collections/junipernetworks/junos/plugins/action/interfaces.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/interfaces.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/l2_interfaces.py b/ansible_collections/junipernetworks/junos/plugins/action/l2_interfaces.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/l2_interfaces.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/l3_intefaces.py b/ansible_collections/junipernetworks/junos/plugins/action/l3_intefaces.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/l3_intefaces.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/lacp.py b/ansible_collections/junipernetworks/junos/plugins/action/lacp.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/lacp.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/lacp_intefaces.py b/ansible_collections/junipernetworks/junos/plugins/action/lacp_intefaces.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/lacp_intefaces.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/lag_interfaces.py b/ansible_collections/junipernetworks/junos/plugins/action/lag_interfaces.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/lag_interfaces.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/lldp_global.py b/ansible_collections/junipernetworks/junos/plugins/action/lldp_global.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/lldp_global.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/lldp_interfaces.py b/ansible_collections/junipernetworks/junos/plugins/action/lldp_interfaces.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/lldp_interfaces.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/logging.py b/ansible_collections/junipernetworks/junos/plugins/action/logging.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/logging.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/logging_global.py b/ansible_collections/junipernetworks/junos/plugins/action/logging_global.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/logging_global.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/netconf.py b/ansible_collections/junipernetworks/junos/plugins/action/netconf.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/netconf.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/ntp_global.py b/ansible_collections/junipernetworks/junos/plugins/action/ntp_global.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/ntp_global.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/ospf_interfaces.py b/ansible_collections/junipernetworks/junos/plugins/action/ospf_interfaces.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/ospf_interfaces.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/ospfv2.py b/ansible_collections/junipernetworks/junos/plugins/action/ospfv2.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/ospfv2.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/ospfv3.py b/ansible_collections/junipernetworks/junos/plugins/action/ospfv3.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/ospfv3.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/package.py b/ansible_collections/junipernetworks/junos/plugins/action/package.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/package.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/ping.py b/ansible_collections/junipernetworks/junos/plugins/action/ping.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/ping.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/prefix_lists.py b/ansible_collections/junipernetworks/junos/plugins/action/prefix_lists.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/prefix_lists.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/routing_instances.py b/ansible_collections/junipernetworks/junos/plugins/action/routing_instances.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/routing_instances.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/routing_options.py b/ansible_collections/junipernetworks/junos/plugins/action/routing_options.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/routing_options.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/rpc.py b/ansible_collections/junipernetworks/junos/plugins/action/rpc.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/rpc.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/scp.py b/ansible_collections/junipernetworks/junos/plugins/action/scp.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/scp.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/security_policies.py b/ansible_collections/junipernetworks/junos/plugins/action/security_policies.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/security_policies.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/security_policies_global.py b/ansible_collections/junipernetworks/junos/plugins/action/security_policies_global.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/security_policies_global.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/security_zones.py b/ansible_collections/junipernetworks/junos/plugins/action/security_zones.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/security_zones.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/snmp_server.py b/ansible_collections/junipernetworks/junos/plugins/action/snmp_server.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/snmp_server.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/static_routes.py b/ansible_collections/junipernetworks/junos/plugins/action/static_routes.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/static_routes.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/system.py b/ansible_collections/junipernetworks/junos/plugins/action/system.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/system.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/user.py b/ansible_collections/junipernetworks/junos/plugins/action/user.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/user.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/vlans.py b/ansible_collections/junipernetworks/junos/plugins/action/vlans.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/vlans.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/action/vrf.py b/ansible_collections/junipernetworks/junos/plugins/action/vrf.py
new file mode 100644
index 000000000..4c5d480af
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/plugins/action/vrf.py
@@ -0,0 +1,168 @@
+#
+# (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 <http://www.gnu.org/licenses/>.
+#
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import copy
+import sys
+
+from ansible.utils.display import Display
+from ansible_collections.ansible.netcommon.plugins.action.network import (
+ ActionModule as ActionNetworkModule,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ load_provider,
+)
+
+from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
+
+
+display = Display()
+
+CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]
+
+
+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 ["junos_config", "config"] else False
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ pc.remote_user = provider["username"] or self._play_context.connection_user
+ pc.password = provider["password"] or self._play_context.password
+ pc.private_key_file = provider["ssh_keyfile"] or self._play_context.private_key_file
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "ansible.netcommon.persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ # TODO: Remove below code after ansible minimal is cut out
+ if connection is None:
+ pc.network_os = "junos"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ connection = self._shared_loader_obj.connection_loader.get(
+ "persistent",
+ pc,
+ sys.stdin,
+ task_uuid=self._task._uuid,
+ )
+
+ display.vvv(
+ "using connection plugin %s (was local)" % pc.connection,
+ pc.remote_addr,
+ )
+
+ command_timeout = (
+ int(provider["timeout"])
+ if provider["timeout"]
+ else connection.get_option("persistent_command_timeout")
+ )
+ connection.set_options(
+ direct={"persistent_command_timeout": command_timeout},
+ )
+
+ socket_path = connection.run()
+ display.vvvv("socket_path: %s" % socket_path, pc.remote_addr)
+ if not socket_path:
+ return {
+ "failed": True,
+ "msg": "unable to open shell. Please see: "
+ + "https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell",
+ }
+
+ task_vars["ansible_socket"] = socket_path
+ warnings.append(
+ [
+ "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s"
+ % pc.connection,
+ ],
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
+ 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/junipernetworks/junos/plugins/cliconf/junos.py b/ansible_collections/junipernetworks/junos/plugins/cliconf/junos.py
index 75a2e23bd..4461c9cb0 100644
--- a/ansible_collections/junipernetworks/junos/plugins/cliconf/junos.py
+++ b/ansible_collections/junipernetworks/junos/plugins/cliconf/junos.py
@@ -272,6 +272,15 @@ class Cliconf(CliconfBase):
self.discard_changes()
return resp
+ @configure
+ def restore(self, filename=None, path=""):
+ if not filename:
+ raise ValueError("'file_name' value is required for restore")
+ cmd = f"load override {path}{filename}"
+ resp = self.send_command(cmd)
+ self.commit()
+ return resp
+
def get_diff(self, rollback_id=None):
diff = {"config_diff": None}
response = self.compare_configuration(rollback_id=rollback_id)
diff --git a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/config/lldp_global/lldp_global.py b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/config/lldp_global/lldp_global.py
index 5b0d5c78f..a92c6399c 100644
--- a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/config/lldp_global/lldp_global.py
+++ b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/config/lldp_global/lldp_global.py
@@ -239,31 +239,32 @@ class Lldp_global(ConfigBase):
"""
lldp_xml = []
- lldp_root = build_root_xml_node("lldp")
- build_child_xml_node(
- lldp_root,
- "management-address",
- None,
- {"delete": "delete"},
- )
- build_child_xml_node(
- lldp_root,
- "advertisement-interval",
- None,
- {"delete": "delete"},
- )
- build_child_xml_node(
- lldp_root,
- "transmit-delay",
- None,
- {"delete": "delete"},
- )
- build_child_xml_node(
- lldp_root,
- "hold-multiplier",
- None,
- {"delete": "delete"},
- )
- build_child_xml_node(lldp_root, "disable", None, {"delete": "delete"})
- lldp_xml.append(lldp_root)
+ if have:
+ lldp_root = build_root_xml_node("lldp")
+ build_child_xml_node(
+ lldp_root,
+ "management-address",
+ None,
+ {"delete": "delete"},
+ )
+ build_child_xml_node(
+ lldp_root,
+ "advertisement-interval",
+ None,
+ {"delete": "delete"},
+ )
+ build_child_xml_node(
+ lldp_root,
+ "transmit-delay",
+ None,
+ {"delete": "delete"},
+ )
+ build_child_xml_node(
+ lldp_root,
+ "hold-multiplier",
+ None,
+ {"delete": "delete"},
+ )
+ build_child_xml_node(lldp_root, "disable", None, {"delete": "delete"})
+ lldp_xml.append(lldp_root)
return lldp_xml
diff --git a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/config/ospf_interfaces/ospf_interfaces.py b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/config/ospf_interfaces/ospf_interfaces.py
index 990cae77e..31df42c10 100644
--- a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/config/ospf_interfaces/ospf_interfaces.py
+++ b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/config/ospf_interfaces/ospf_interfaces.py
@@ -64,7 +64,7 @@ class Ospf_interfaces(ConfigBase):
data=data,
)
ospf_interfaces_facts = facts["ansible_network_resources"].get(
- "junos_ospf_interfaces",
+ "ospf_interfaces",
)
if not ospf_interfaces_facts:
return []
diff --git a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/acls/acls.py b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/acls/acls.py
index 7ff8fb2c3..65c81fe58 100644
--- a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/acls/acls.py
+++ b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/acls/acls.py
@@ -85,7 +85,7 @@ class AclsFacts(object):
objs = []
for resource in resources:
- if resource:
+ if resource is not None:
xml = self._get_xml_dict(resource)
for family, sub_dict in xml["firewall"]["family"].items():
sub_dict["family"] = family
@@ -96,9 +96,8 @@ class AclsFacts(object):
if obj:
objs.append(obj)
- facts = {}
+ facts = {"acls": []}
if objs:
- facts["acls"] = []
params = utils.validate_config(
self.argument_spec,
{"config": objs},
diff --git a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/lldp_global/lldp_global.py b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/lldp_global/lldp_global.py
index 3b48e9720..c69a4cedd 100644
--- a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/lldp_global/lldp_global.py
+++ b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/lldp_global/lldp_global.py
@@ -80,7 +80,7 @@ class Lldp_globalFacts(object):
to_bytes(data, errors="surrogate_then_replace"),
)
- facts = {}
+ facts = {"lldp_global": {}}
config = deepcopy(self.generated_spec)
resources = data.xpath("configuration/protocols/lldp")
if resources:
diff --git a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/lldp_interfaces/lldp_interfaces.py b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/lldp_interfaces/lldp_interfaces.py
index a5d1af467..7f6e48215 100644
--- a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/lldp_interfaces/lldp_interfaces.py
+++ b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/lldp_interfaces/lldp_interfaces.py
@@ -87,7 +87,7 @@ class Lldp_interfacesFacts(object):
obj = self.render_config(self.generated_spec, resource)
if obj:
objs.append(obj)
- facts = {}
+ facts = {"lldp_interfaces": []}
if objs:
facts["lldp_interfaces"] = []
params = utils.validate_config(
diff --git a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/logging_global/logging_global.py b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/logging_global/logging_global.py
index 2affbde19..0ca196bb9 100644
--- a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/logging_global/logging_global.py
+++ b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/logging_global/logging_global.py
@@ -99,7 +99,7 @@ class Logging_globalFacts(object):
xml = self._get_xml_dict(resource)
objs = self.render_config(self.generated_spec, xml)
- facts = {}
+ facts = {"logging_global": {}}
if objs:
facts["logging_global"] = {}
params = utils.validate_config(
diff --git a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/ntp_global/ntp_global.py b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/ntp_global/ntp_global.py
index a7dc37b57..82d1e0603 100644
--- a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/ntp_global/ntp_global.py
+++ b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/ntp_global/ntp_global.py
@@ -99,9 +99,8 @@ class Ntp_globalFacts(object):
xml = self._get_xml_dict(resource)
objs = self.render_config(self.generated_spec, xml)
- facts = {}
+ facts = {"ntp_global": {}}
if objs:
- facts["ntp_global"] = {}
params = utils.validate_config(
self.argument_spec,
{"config": objs},
diff --git a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/ospf_interfaces/ospf_interfaces.py b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/ospf_interfaces/ospf_interfaces.py
index 55c162d25..bb37c5150 100644
--- a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/ospf_interfaces/ospf_interfaces.py
+++ b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/ospf_interfaces/ospf_interfaces.py
@@ -116,9 +116,8 @@ class Ospf_interfacesFacts(object):
xml = self._get_xml_dict(resource)
objs = self.render_config(self.generated_spec, xml)
- facts = {}
+ facts = {"ospf_interfaces": []}
if objs:
- facts["junos_ospf_interfaces"] = []
params = _validate_config(
self._module,
self.argument_spec,
@@ -127,7 +126,7 @@ class Ospf_interfacesFacts(object):
)
for cfg in params["config"]:
- facts["junos_ospf_interfaces"].append(remove_empties(cfg))
+ facts["ospf_interfaces"].append(remove_empties(cfg))
ansible_facts["ansible_network_resources"].update(facts)
return ansible_facts
diff --git a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/ospfv2/ospfv2.py b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/ospfv2/ospfv2.py
index 44bbb9732..70fdf40d2 100644
--- a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/ospfv2/ospfv2.py
+++ b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/ospfv2/ospfv2.py
@@ -122,9 +122,8 @@ class Ospfv2Facts(object):
if obj:
objs.append(obj)
- facts = {}
+ facts = {"ospfv2": []}
if objs is not None:
- facts["ospfv2"] = []
params = utils.validate_config(
self.argument_spec,
{"config": objs},
diff --git a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/ospfv3/ospfv3.py b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/ospfv3/ospfv3.py
index 8bbd04fcd..79bb61bd7 100644
--- a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/ospfv3/ospfv3.py
+++ b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/ospfv3/ospfv3.py
@@ -123,9 +123,8 @@ class Ospfv3Facts(object):
if obj:
objs.append(obj)
- facts = {}
+ facts = {"ospfv3": []}
if objs:
- facts["ospfv3"] = []
params = utils.validate_config(
self.argument_spec,
{"config": objs},
diff --git a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/prefix_lists/prefix_lists.py b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/prefix_lists/prefix_lists.py
index 4d3ec81c0..0f26ece3f 100644
--- a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/prefix_lists/prefix_lists.py
+++ b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/prefix_lists/prefix_lists.py
@@ -101,9 +101,8 @@ class Prefix_listsFacts(object):
xml = self._get_xml_dict(resource)
objs = self.render_config(self.generated_spec, xml)
- facts = {}
+ facts = {"prefix_lists": []}
if objs:
- facts["prefix_lists"] = []
params = utils.validate_config(
self.argument_spec,
{"config": objs},
diff --git a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/routing_instances/routing_instances.py b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/routing_instances/routing_instances.py
index d571e4e53..1766e4836 100644
--- a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/routing_instances/routing_instances.py
+++ b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/routing_instances/routing_instances.py
@@ -97,9 +97,8 @@ class Routing_instancesFacts(object):
xml = self._get_xml_dict(resource)
objs = self.render_config(self.generated_spec, xml)
- facts = {}
+ facts = {"routing_instances": []}
if objs:
- facts["routing_instances"] = []
params = utils.validate_config(
self.argument_spec,
{"config": objs},
diff --git a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/routing_options/routing_options.py b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/routing_options/routing_options.py
index 78664fea8..b0e45a82a 100644
--- a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/routing_options/routing_options.py
+++ b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/routing_options/routing_options.py
@@ -97,9 +97,8 @@ class Routing_optionsFacts(object):
xml = self._get_xml_dict(resource)
objs = self.render_config(self.generated_spec, xml)
- facts = {}
+ facts = {"routing_options": []}
if objs:
- facts["routing_options"] = {}
params = utils.validate_config(
self.argument_spec,
{"config": objs},
diff --git a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/security_policies/security_policies.py b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/security_policies/security_policies.py
index 0c4d25e5e..c40c0f973 100644
--- a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/security_policies/security_policies.py
+++ b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/security_policies/security_policies.py
@@ -109,9 +109,8 @@ class Security_policiesFacts(object):
xml = self._get_xml_dict(resource)
objs = self.render_config(self.generated_spec, xml)
- facts = {}
+ facts = {"security_policies": {}}
if objs:
- facts["security_policies"] = {}
params = utils.validate_config(
self.argument_spec,
{"config": objs},
diff --git a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/security_policies_global/security_policies_global.py b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/security_policies_global/security_policies_global.py
index 692a07b60..8fdb7e016 100644
--- a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/security_policies_global/security_policies_global.py
+++ b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/security_policies_global/security_policies_global.py
@@ -109,9 +109,8 @@ class Security_policies_globalFacts(object):
xml = self._get_xml_dict(resource)
objs = self.render_config(self.generated_spec, xml)
- facts = {}
+ facts = {"security_policies_global": {}}
if objs:
- facts["security_policies_global"] = {}
params = utils.validate_config(
self.argument_spec,
{"config": objs},
diff --git a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/security_zones/security_zones.py b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/security_zones/security_zones.py
index 1e77168ac..61ca3f898 100644
--- a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/security_zones/security_zones.py
+++ b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/security_zones/security_zones.py
@@ -109,9 +109,8 @@ class Security_zonesFacts(object):
xml = self._get_xml_dict(resource)
objs = self.render_config(self.generated_spec, xml)
- facts = {}
+ facts = {"security_zones": {}}
if objs:
- facts["security_zones"] = {}
params = utils.validate_config(
self.argument_spec,
{"config": objs},
diff --git a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/snmp_server/snmp_server.py b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/snmp_server/snmp_server.py
index b3c35bfec..52d228a16 100644
--- a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/snmp_server/snmp_server.py
+++ b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/snmp_server/snmp_server.py
@@ -97,9 +97,8 @@ class Snmp_serverFacts(object):
xml = self._get_xml_dict(resource)
objs = self.render_config(self.generated_spec, xml)
- facts = {}
+ facts = {"snmp_server": {}}
if objs:
- facts["snmp_server"] = {}
params = utils.validate_config(
self.argument_spec,
{"config": objs},
diff --git a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/static_routes/static_routes.py b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/static_routes/static_routes.py
index 0be6f032d..e2a21e24b 100644
--- a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/static_routes/static_routes.py
+++ b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/static_routes/static_routes.py
@@ -95,9 +95,8 @@ class Static_routesFacts(object):
if obj:
objs.append(obj)
- facts = {}
+ facts = {"static_routes": []}
if objs:
- facts["static_routes"] = []
params = utils.validate_config(
self.argument_spec,
{"config": objs},
diff --git a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/vlans/vlans.py b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/vlans/vlans.py
index f4d35e635..43058f023 100644
--- a/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/vlans/vlans.py
+++ b/ansible_collections/junipernetworks/junos/plugins/module_utils/network/junos/facts/vlans/vlans.py
@@ -94,9 +94,8 @@ class VlansFacts(object):
obj = self.render_config(self.generated_spec, resource)
if obj:
objs.append(obj)
- facts = {}
+ facts = {"vlans": []}
if objs:
- facts["vlans"] = []
params = utils.validate_config(
self.argument_spec,
{"config": objs},
diff --git a/ansible_collections/junipernetworks/junos/plugins/modules/junos_config.py b/ansible_collections/junipernetworks/junos/plugins/modules/junos_config.py
index 5b5151d39..c019e9c2b 100644
--- a/ansible_collections/junipernetworks/junos/plugins/modules/junos_config.py
+++ b/ansible_collections/junipernetworks/junos/plugins/modules/junos_config.py
@@ -66,9 +66,8 @@ options:
confirm:
description:
- The C(confirm) argument will configure a time out value in minutes for the commit
- to be confirmed before it is automatically rolled back. If the C(confirm) argument
- is set to False, this argument is silently ignored. If the value for this argument
- is set to 0, the commit is confirmed immediately.
+ to be confirmed before it is automatically rolled back. If the value for this argument
+ is set to 0, the commit is confirmed immediately which is also the default behaviour.
type: int
default: 0
comment:
@@ -238,6 +237,16 @@ EXAMPLES = """
backup_options:
filename: backup.cfg
dir_path: /home/user
+
+- name: Set description with timer to confirm commit
+ junipernetworks.junos.junos_config:
+ lines:
+ - set interfaces fxp0 description "wait for a commit confirmation for 3 minutes; otherwise, it will be rolled back."
+ confirm: 3
+
+- name: Perform confirm commit
+ junipernetworks.junos.junos_config:
+ confirm_commit: true
"""
RETURN = """
diff --git a/ansible_collections/junipernetworks/junos/plugins/modules/junos_l2_interfaces.py b/ansible_collections/junipernetworks/junos/plugins/modules/junos_l2_interfaces.py
index bbd5f25b5..6a8424b40 100644
--- a/ansible_collections/junipernetworks/junos/plugins/modules/junos_l2_interfaces.py
+++ b/ansible_collections/junipernetworks/junos/plugins/modules/junos_l2_interfaces.py
@@ -330,11 +330,11 @@ EXAMPLES = """
- name: Override provided configuration with device configuration
junipernetworks.junos.junos_l2_interfaces:
config:
- - name: ge-0/0/4
- trunk:
- allowed_vlans:
- - v101
- native_vlan: 30
+ - name: ge-0/0/4
+ trunk:
+ allowed_vlans:
+ - v101
+ native_vlan: 30
state: overridden
# Task Output
@@ -494,14 +494,14 @@ EXAMPLES = """
- name: Replace provided configuration with device configuration
junipernetworks.junos.junos_l2_interfaces:
config:
- - name: ge-0/0/3
- access:
- vlan: v101
- - name: ge-0/0/4
- trunk:
- allowed_vlans:
- - vlan30
- native_vlan: 50
+ - name: ge-0/0/3
+ access:
+ vlan: v101
+ - name: ge-0/0/4
+ trunk:
+ allowed_vlans:
+ - vlan30
+ native_vlan: 50
state: replaced
# Task Output
@@ -674,8 +674,8 @@ EXAMPLES = """
interface itself)."
junipernetworks.junos.junos_l2_interfaces:
config:
- - name: ge-0/0/1
- - name: ge-0/0/2
+ - name: ge-0/0/1
+ - name: ge-0/0/2
state: deleted
# Task Output
diff --git a/ansible_collections/junipernetworks/junos/plugins/modules/junos_l3_interfaces.py b/ansible_collections/junipernetworks/junos/plugins/modules/junos_l3_interfaces.py
index 3e9fd57b7..f57ffe0c8 100644
--- a/ansible_collections/junipernetworks/junos/plugins/modules/junos_l3_interfaces.py
+++ b/ansible_collections/junipernetworks/junos/plugins/modules/junos_l3_interfaces.py
@@ -132,14 +132,14 @@ EXAMPLES = """
- name: Merge provided configuration with device configuration
junipernetworks.junos.junos_l3_interfaces:
config:
- - name: ge-0/0/1
- ipv4:
- - address: 192.168.1.10/24
- ipv6:
- - address: 8d8d:8d01::1/64
- - name: ge-0/0/2
- ipv4:
- - address: dhcp
+ - name: ge-0/0/1
+ ipv4:
+ - address: 192.168.1.10/24
+ ipv6:
+ - address: 8d8d:8d01::1/64
+ - name: ge-0/0/2
+ ipv4:
+ - address: dhcp
state: merged
# Task Output
@@ -265,13 +265,13 @@ EXAMPLES = """
- name: Override provided configuration with device configuration
junipernetworks.junos.junos_l3_interfaces:
config:
- - name: ge-0/0/1
- ipv4:
- - address: 192.168.1.10/24
- - ipv4:
- - address: dhcp
- name: fxp0
- unit: '0'
+ - name: ge-0/0/1
+ ipv4:
+ - address: 192.168.1.10/24
+ - ipv4:
+ - address: dhcp
+ name: fxp0
+ unit: '0'
state: overridden
# Task Output
@@ -434,14 +434,14 @@ EXAMPLES = """
- name: Replace provided configuration with device configuration
junipernetworks.junos.junos_l3_interfaces:
config:
- - name: ge-0/0/1
- ipv4:
- - address: 192.168.1.10/24
- ipv6:
- - address: 8d8d:8d01::1/64
- - name: ge-0/0/2
- ipv4:
- - address: dhcp
+ - name: ge-0/0/1
+ ipv4:
+ - address: 192.168.1.10/24
+ ipv6:
+ - address: 8d8d:8d01::1/64
+ - name: ge-0/0/2
+ ipv4:
+ - address: dhcp
state: replaced
# Task Output
@@ -603,8 +603,8 @@ EXAMPLES = """
- name: Delete L3 logical interface
junipernetworks.junos.junos_l3_interfaces:
config:
- - name: ge-0/0/1
- - name: ge-0/0/2
+ - name: ge-0/0/1
+ - name: ge-0/0/2
state: deleted
# Task Output
diff --git a/ansible_collections/junipernetworks/junos/plugins/modules/junos_logging.py b/ansible_collections/junipernetworks/junos/plugins/modules/junos_logging.py
deleted file mode 100644
index 8f736d054..000000000
--- a/ansible_collections/junipernetworks/junos/plugins/modules/junos_logging.py
+++ /dev/null
@@ -1,403 +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: junos_logging
-author: Ganesh Nalawade (@ganeshrn)
-short_description: Manage logging on network devices
-description:
-- This module provides declarative management of logging on Juniper JUNOS devices.
-version_added: 1.0.0
-extends_documentation_fragment:
-- junipernetworks.junos.junos
-deprecated:
- alternative: junos_logging_global
- why: Updated module released with more functionality.
- removed_at_date: '2023-08-01'
-options:
- dest:
- description:
- - Destination of the logs.
- choices:
- - console
- - host
- - file
- - user
- type: str
- name:
- description:
- - If value of C(dest) is I(file) it indicates file-name, for I(user) it indicates
- username and for I(host) indicates the host name to be notified.
- type: str
- facility:
- description:
- - Set logging facility.
- type: str
- level:
- description:
- - Set logging severity levels.
- type: str
- aggregate:
- description:
- - List of logging definitions.
- type: list
- elements: dict
- suboptions:
- dest:
- description:
- - Destination of the logs.
- choices:
- - console
- - host
- - file
- - user
- type: str
- name:
- description:
- - If value of C(dest) is I(file) it indicates file-name, for I(user) it indicates
- username and for I(host) indicates the host name to be notified.
- type: str
- facility:
- description:
- - Set logging facility.
- type: str
- level:
- description:
- - Set logging severity levels.
- type: str
- state:
- description:
- - State of the logging configuration.
- type: str
- choices:
- - present
- - absent
- active:
- description:
- - Specifies whether or not the configuration is active or deactivated
- type: bool
- rotate_frequency:
- description:
- - Rotate log frequency in minutes, this is applicable if value of I(dest) is C(file).
- The acceptable value is in range of 1 to 59. This controls the frequency after
- which log file is rotated.
- type: int
- required: false
- size:
- description:
- - Size of the file in archive, this is applicable if value of I(dest) is C(file).
- The acceptable value is in range from 65536 to 1073741824 bytes.
- type: int
- required: false
- files:
- description:
- - Number of files to be archived, this is applicable if value of I(dest) is C(file).
- The acceptable value is in range from 1 to 1000.
- type: int
- required: false
- state:
- description:
- - State of the logging configuration.
- default: present
- type: str
- choices:
- - present
- - absent
- active:
- description:
- - Specifies whether or not the configuration is active or deactivated
- default: true
- type: bool
- rotate_frequency:
- description:
- - Rotate log frequency in minutes, this is applicable if value of I(dest) is C(file).
- The acceptable value is in range of 1 to 59. This controls the frequency after
- which log file is rotated.
- type: int
- required: false
- size:
- description:
- - Size of the file in archive, this is applicable if value of I(dest) is C(file).
- The acceptable value is in range from 65536 to 1073741824 bytes.
- required: false
- type: int
- files:
- description:
- - Number of files to be archived, this is applicable if value of I(dest) is C(file).
- The acceptable value is in range from 1 to 1000.
- type: int
- required: false
-requirements:
-- ncclient (>=v0.5.2)
-notes:
-- This module requires the netconf system service be enabled on the remote device
- being managed.
-- Tested against vSRX JUNOS version 15.1X49-D15.4, vqfx-10000 JUNOS Version 15.1X53-D60.4.
-- Recommended connection is C(netconf). See L(the Junos OS Platform Options,../network/user_guide/platform_junos.html).
-- This module also works with C(local) connections for legacy playbooks.
-"""
-
-EXAMPLES = """
-- name: configure console logging
- junipernetworks.junos.junos_logging:
- dest: console
- facility: any
- level: critical
-
-- name: remove console logging configuration
- junipernetworks.junos.junos_logging:
- dest: console
- state: absent
-
-- name: configure file logging
- junipernetworks.junos.junos_logging:
- dest: file
- name: test
- facility: pfe
- level: error
-
-- name: configure logging parameter
- junipernetworks.junos.junos_logging:
- files: 30
- size: 65536
- rotate_frequency: 10
-
-- name: Configure file logging using aggregate
- junipernetworks.junos.junos_logging:
- dest: file
- aggregate:
- - name: test-1
- facility: pfe
- level: critical
- - name: test-2
- facility: kernel
- level: emergency
- active: true
-
-- name: Delete file logging using aggregate
- junipernetworks.junos.junos_logging:
- aggregate:
- - {dest: file, name: test-1, facility: pfe, level: critical}
- - {dest: file, name: test-2, facility: kernel, level: emergency}
- state: absent
-"""
-
-RETURN = """
-diff.prepared:
- description: Configuration difference before and after applying change.
- returned: when configuration is changed and diff option is enabled.
- type: str
- sample: >
- [edit system syslog]
- + [edit system syslog]
- file interactive-commands { ... }
- + file test {
- + pfe critical;
- + }
-"""
-import collections
-
-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.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
- commit_configuration,
- discard_changes,
- load_config,
- locked_config,
- map_obj_to_ele,
- map_params_to_obj,
- to_param_list,
- tostring,
-)
-
-
-USE_PERSISTENT_CONNECTION = True
-
-
-def validate_files(value, module):
- if value and not 1 <= value <= 1000:
- module.fail_json(msg="files must be between 1 and 1000")
-
-
-def validate_size(value, module):
- if value and not 65536 <= value <= 1073741824:
- module.fail_json(msg="size must be between 65536 and 1073741824")
-
-
-def validate_rotate_frequency(value, module):
- if value and not 1 <= value <= 59:
- module.fail_json(msg="rotate_frequency must be between 1 and 59")
-
-
-def validate_param_values(module, obj, param=None):
- if not param:
- param = module.params
- for key in obj:
- # validate the param value (if validator func exists)
- validator = globals().get("validate_%s" % key)
- if callable(validator):
- validator(param.get(key), module)
-
-
-def main():
- """main entry point for module execution"""
- element_spec = dict(
- dest=dict(choices=["console", "host", "file", "user"]),
- name=dict(),
- facility=dict(),
- level=dict(),
- rotate_frequency=dict(type="int"),
- size=dict(type="int"),
- files=dict(type="int"),
- state=dict(default="present", choices=["present", "absent"]),
- active=dict(default=True, type="bool"),
- )
-
- aggregate_spec = deepcopy(element_spec)
-
- # remove default in aggregate spec, to handle common arguments
- remove_default_spec(aggregate_spec)
-
- argument_spec = dict(
- aggregate=dict(type="list", elements="dict", options=aggregate_spec),
- )
-
- argument_spec.update(element_spec)
-
- required_if = [
- ("dest", "host", ["name", "facility", "level"]),
- ("dest", "file", ["name", "facility", "level"]),
- ("dest", "user", ["name", "facility", "level"]),
- ("dest", "console", ["facility", "level"]),
- ]
-
- module = AnsibleModule(
- argument_spec=argument_spec,
- required_if=required_if,
- supports_check_mode=True,
- )
-
- warnings = list()
- result = {"changed": False}
-
- if warnings:
- result["warnings"] = warnings
-
- params = to_param_list(module)
-
- requests = list()
- for param in params:
- # if key doesn't exist in the item, get it from module.params
- for key in param:
- if param.get(key) is None:
- param[key] = module.params[key]
-
- try:
- check_required_if(required_if, param)
- except TypeError as exc:
- module.fail_json(to_text(exc))
-
- item = param.copy()
- dest = item.get("dest")
- if dest == "console" and item.get("name"):
- module.fail_json(
- msg="%s and %s are mutually exclusive" % ("console", "name"),
- )
-
- top = "system/syslog"
- is_facility_key = False
- field_top = None
- if dest:
- if dest == "console":
- field_top = dest
- is_facility_key = True
- else:
- field_top = dest + "/contents"
- is_facility_key = False
-
- param_to_xpath_map = collections.OrderedDict()
- param_to_xpath_map.update(
- [
- ("name", {"xpath": "name", "is_key": True, "top": dest}),
- (
- "facility",
- {
- "xpath": "name",
- "is_key": is_facility_key,
- "top": field_top,
- },
- ),
- (
- "size",
- {
- "xpath": "size",
- "leaf_only": True,
- "is_key": True,
- "top": "archive",
- },
- ),
- (
- "files",
- {
- "xpath": "files",
- "leaf_only": True,
- "is_key": True,
- "top": "archive",
- },
- ),
- (
- "rotate_frequency",
- {"xpath": "log-rotate-frequency", "leaf_only": True},
- ),
- ],
- )
-
- if item.get("level"):
- param_to_xpath_map["level"] = {
- "xpath": item.get("level"),
- "tag_only": True,
- "top": field_top,
- }
-
- validate_param_values(module, param_to_xpath_map, param=item)
-
- want = map_params_to_obj(module, param_to_xpath_map, param=item)
- requests.append(map_obj_to_ele(module, want, top, param=item))
-
- diff = None
- with locked_config(module):
- for req in requests:
- diff = load_config(module, tostring(req), warnings, action="merge")
-
- commit = not module.check_mode
- if diff:
- if commit:
- commit_configuration(module)
- else:
- discard_changes(module)
- result["changed"] = True
-
- if module._diff:
- result["diff"] = {"prepared": diff}
-
- module.exit_json(**result)
-
-
-if __name__ == "__main__":
- main()
diff --git a/ansible_collections/junipernetworks/junos/test-requirements.txt b/ansible_collections/junipernetworks/junos/test-requirements.txt
index ee046d74c..ab0eac353 100644
--- a/ansible_collections/junipernetworks/junos/test-requirements.txt
+++ b/ansible_collections/junipernetworks/junos/test-requirements.txt
@@ -1,7 +1,7 @@
-black==22.3.0 ; python_version > '3.5'
+black==23.3.0 ; python_version > '3.7'
flake8
-git+https://github.com/ansible-community/pytest-ansible-units.git
mock
+pytest-ansible ; python_version >= '3.9'
+git+https://github.com/ansible-community/pytest-ansible-units.git ; python_version < '3.9'
pytest-xdist
yamllint
-coverage==4.5.4
diff --git a/ansible_collections/junipernetworks/junos/tests/config.yml b/ansible_collections/junipernetworks/junos/tests/config.yml
new file mode 100644
index 000000000..c26ea5966
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/tests/config.yml
@@ -0,0 +1,3 @@
+---
+modules:
+ python_requires: ">=3.9"
diff --git a/ansible_collections/junipernetworks/junos/tests/integration/targets/junos_facts/tests/netconf/network_facts.yaml b/ansible_collections/junipernetworks/junos/tests/integration/targets/junos_facts/tests/netconf/network_facts.yaml
new file mode 100644
index 000000000..f0d08f310
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/tests/integration/targets/junos_facts/tests/netconf/network_facts.yaml
@@ -0,0 +1,124 @@
+---
+- ansible.builtin.debug:
+ msg="START cli_config/cli_basic.yaml on connection={{ ansible_connection
+ }}"
+
+- name: Reset acls
+ junipernetworks.junos.junos_acls:
+ state: deleted
+
+- name: Reset vlans
+ junipernetworks.junos.junos_vlans:
+ state: deleted
+
+- name: Reset lldp_global
+ junipernetworks.junos.junos_lldp_global:
+ state: deleted
+
+- name: Reset lldp_interfaces
+ junipernetworks.junos.junos_lldp_interfaces:
+ state: deleted
+
+- name: Reset logging_global
+ junipernetworks.junos.junos_logging_global:
+ state: deleted
+
+- name: Reset ntp_global
+ junipernetworks.junos.junos_ntp_global:
+ state: deleted
+
+- name: Reset ospf_interfaces
+ junipernetworks.junos.junos_ospf_interfaces:
+ state: deleted
+
+- name: Reset ospfv2
+ junipernetworks.junos.junos_ospfv2:
+ state: deleted
+
+- name: Reset ospfv3
+ junipernetworks.junos.junos_ospfv3:
+ state: deleted
+
+- name: Reset prefix_lists
+ junipernetworks.junos.junos_prefix_lists:
+ state: deleted
+
+- name: Reset routing_instances
+ junipernetworks.junos.junos_routing_instances:
+ state: deleted
+
+- name: Reset routing_options
+ junipernetworks.junos.junos_routing_options:
+ state: deleted
+
+- name: Reset security_policies
+ junipernetworks.junos.junos_security_policies:
+ state: deleted
+
+- name: Reset security_policies_global
+ junipernetworks.junos.junos_security_policies_global:
+ state: deleted
+
+- name: Reset security_zones
+ junipernetworks.junos.junos_security_zones:
+ state: deleted
+
+- name: Reset snmp_server
+ junipernetworks.junos.junos_snmp_server:
+ state: deleted
+
+- name: Reset static_routes
+ junipernetworks.junos.junos_static_routes:
+ state: deleted
+
+- name: Gather junipernetworks junos facts
+ junipernetworks.junos.junos_facts:
+ gather_subset: config
+ gather_network_resources:
+ - acls
+ - 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
+ register: gather_resources
+
+- name: Display Facts
+ ansible.builtin.debug:
+ msg: "{{ gather_resources }}"
+
+- name: Assert that empty facts was generated
+ ansible.builtin.assert:
+ that:
+ - " gather_resources['ansible_facts']['ansible_network_resources']['acls'] == []"
+ - " gather_resources['ansible_facts']['ansible_network_resources']['lldp_global'] == {}"
+ - " gather_resources['ansible_facts']['ansible_network_resources']['lldp_interfaces'] == []"
+ - " gather_resources['ansible_facts']['ansible_network_resources']['logging_global'] == {}"
+ - " gather_resources['ansible_facts']['ansible_network_resources']['ntp_global'] == {}"
+ - " gather_resources['ansible_facts']['ansible_network_resources']['ospf_interfaces'] == []"
+ - " gather_resources['ansible_facts']['ansible_network_resources']['ospfv2'] == []"
+ - " gather_resources['ansible_facts']['ansible_network_resources']['ospfv3'] == []"
+ - " gather_resources['ansible_facts']['ansible_network_resources']['prefix_lists'] == []"
+ - " gather_resources['ansible_facts']['ansible_network_resources']['routing_instances'] == []"
+ - " gather_resources['ansible_facts']['ansible_network_resources']['routing_options'] == []"
+ - " gather_resources['ansible_facts']['ansible_network_resources']['security_policies'] == {}"
+ - " gather_resources['ansible_facts']['ansible_network_resources']['security_policies_global'] == {}"
+ - " gather_resources['ansible_facts']['ansible_network_resources']['security_zones'] == {}"
+ - " gather_resources['ansible_facts']['ansible_network_resources']['snmp_server'] == {}"
+ - " gather_resources['ansible_facts']['ansible_network_resources']['static_routes'] == []"
+ - " gather_resources['ansible_facts']['ansible_network_resources']['vlans'] == []"
+
+- ansible.builtin.debug:
+ msg="END cli_config/cli_basic.yaml on connection={{ ansible_connection
+ }}"
diff --git a/ansible_collections/junipernetworks/junos/tests/integration/targets/junos_l2_interfaces/tests/netconf/rtt.yml b/ansible_collections/junipernetworks/junos/tests/integration/targets/junos_l2_interfaces/tests/netconf/rtt.yml
index 634727a67..f934983c9 100644
--- a/ansible_collections/junipernetworks/junos/tests/integration/targets/junos_l2_interfaces/tests/netconf/rtt.yml
+++ b/ansible_collections/junipernetworks/junos/tests/integration/targets/junos_l2_interfaces/tests/netconf/rtt.yml
@@ -16,7 +16,6 @@
trunk:
allowed_vlans:
- vlan100
- native_vlan: "200"
state: merged
- name: Gather interfaces facts
@@ -30,17 +29,12 @@
register: result
junipernetworks.junos.junos_l2_interfaces:
config:
- - name: ge-0/0/1
+ - name: ge-0/0/2
trunk:
allowed_vlans:
- vlan100
- - vlan300
- native_vlan: "400"
-
- - name: ge-0/0/2
- access:
- vlan: vlan200
- state: replaced
+ native_vlan: "200"
+ state: overridden
- name: Assert that changes were applied
ansible.builtin.assert:
diff --git a/ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/aliases b/ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/aliases
deleted file mode 100644
index e69de29bb..000000000
--- a/ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/aliases
+++ /dev/null
diff --git a/ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/defaults/main.yaml b/ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/defaults/main.yaml
deleted file mode 100644
index 5f709c5aa..000000000
--- a/ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/defaults/main.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
----
-testcase: "*"
diff --git a/ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/meta/main.yml b/ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/meta/main.yml
deleted file mode 100644
index d80f5fbf3..000000000
--- a/ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/meta/main.yml
+++ /dev/null
@@ -1,3 +0,0 @@
----
-dependencies:
- - prepare_junos_tests
diff --git a/ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/tasks/main.yaml b/ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/tasks/main.yaml
deleted file mode 100644
index eace31d3f..000000000
--- a/ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/tasks/main.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
----
-- name: Invoke netconf
- ansible.builtin.include_tasks: netconf.yaml
diff --git a/ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/tasks/netconf.yaml b/ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/tasks/netconf.yaml
deleted file mode 100644
index 6071adcfe..000000000
--- a/ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/tasks/netconf.yaml
+++ /dev/null
@@ -1,21 +0,0 @@
----
-- name: Collect all netconf test cases
- ansible.builtin.find:
- paths: "{{ role_path }}/tests/netconf"
- patterns: "{{ testcase }}.yaml"
- register: test_cases
- connection: local
-
-- 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 }}"
- with_items: "{{ test_items }}"
- loop_control:
- loop_var: test_case_to_run
- vars:
- ansible_connection: ansible.netcommon.netconf
- tags:
- - netconf
diff --git a/ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/tests/netconf/basic.yaml b/ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/tests/netconf/basic.yaml
deleted file mode 100644
index 030ce9e69..000000000
--- a/ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/tests/netconf/basic.yaml
+++ /dev/null
@@ -1,407 +0,0 @@
----
-- ansible.builtin.debug:
- msg="START junos_logging netconf/basic.yaml on connection={{ ansible_connection
- }}"
-
-- name: setup - remove file logging
- junipernetworks.junos.junos_logging:
- dest: file
- name: test
- facility: pfe
- level: error
- state: absent
-
-- name: Create file logging
- register: result
- junipernetworks.junos.junos_logging:
- dest: file
- name: test_file
- facility: pfe
- level: error
- state: present
-
-- name: Get running configuration
- register: config
- junipernetworks.junos.junos_rpc:
- rpc: get-configuration
-
-- ansible.builtin.assert:
- that:
- - result.changed == true
- - "'<name>test_file</name>' in config.xml"
- - "'<name>pfe</name>' in config.xml"
- - "'<error/>' in config.xml"
-
-- name: Create file logging (idempotent)
- register: result
- junipernetworks.junos.junos_logging:
- dest: file
- name: test_file
- facility: pfe
- level: error
- state: present
-
-- ansible.builtin.assert:
- that:
- - result.changed == false
-
-- name: Deactivate logging configuration
- register: result
- junipernetworks.junos.junos_logging:
- dest: file
- name: test_file
- facility: pfe
- level: error
- state: present
- active: false
-
-- name: Get running configuration
- register: config
- junipernetworks.junos.junos_rpc:
- rpc: get-configuration
-
-- ansible.builtin.assert:
- that:
- - result.changed == true
- - '''<file inactive="inactive">'' in config.xml'
- - '''<contents inactive="inactive">'' in config.xml'
-
-- name: Activate logging configuration
- register: result
- junipernetworks.junos.junos_logging:
- dest: file
- name: test_file
- facility: pfe
- level: error
- state: present
- active: true
-
-- name: Get running configuration
- register: config
- junipernetworks.junos.junos_rpc:
- rpc: get-configuration
-
-- ansible.builtin.assert:
- that:
- - result.changed == true
- - "'<name>test_file</name>' in config.xml"
- - "'<name>pfe</name>' in config.xml"
- - "'<error/>' in config.xml"
-
-- name: Delete logging configuration
- register: result
- junipernetworks.junos.junos_logging:
- dest: file
- name: test_file
- facility: pfe
- level: error
- state: absent
-
-- name: Get running configuration
- register: config
- junipernetworks.junos.junos_rpc:
- rpc: get-configuration
-
-- ansible.builtin.assert:
- that:
- - result.changed == true
- - "'<name>test_file</name>' not in config.xml"
-
-- name: Configure console logging
- register: result
- junipernetworks.junos.junos_logging:
- dest: console
- facility: kernel
- level: emergency
- state: present
- active: true
-
-- name: Get running configuration
- register: config
- junipernetworks.junos.junos_rpc:
- rpc: get-configuration
-
-- ansible.builtin.assert:
- that:
- - result.changed == true
- - "'<console>' in config.xml"
- - "'<name>kernel</name>' in config.xml"
- - "'<emergency/>' in config.xml"
-
-- name: Configure console logging (idempotent)
- register: result
- junipernetworks.junos.junos_logging:
- dest: console
- facility: kernel
- level: emergency
- state: present
- active: true
-
-- ansible.builtin.assert:
- that:
- - result.changed == false
-
-- name: Disable console logging
- register: result
- junipernetworks.junos.junos_logging:
- dest: console
- facility: kernel
- level: emergency
- state: present
- active: false
-
-- name: Get running configuration
- register: config
- junipernetworks.junos.junos_rpc:
- rpc: get-configuration
-
-- ansible.builtin.assert:
- that:
- - result.changed == true
- - '''<console inactive="inactive">'' in config.xml'
-
-- name: Delete console logging
- register: result
- junipernetworks.junos.junos_logging:
- dest: console
- facility: kernel
- level: emergency
- state: absent
-
-- name: Get running configuration
- register: config
- junipernetworks.junos.junos_rpc:
- rpc: get-configuration
-
-- ansible.builtin.assert:
- that:
- - result.changed == true
- - "'<console>' not in config.xml"
-
-- name: Configure logging parameters
- register: result
- junipernetworks.junos.junos_logging:
- size: 65536
- files: 40
- rotate_frequency: 20
- state: present
-
-- name: Get running configuration
- register: config
- junipernetworks.junos.junos_rpc:
- rpc: get-configuration
-
-- ansible.builtin.assert:
- that:
- - result.changed == true
- - "'<size>64k</size>' in config.xml"
- - "'<files>40</files>' in config.xml"
- - "'<log-rotate-frequency>20</log-rotate-frequency>' in config.xml"
-
-- name: Configure logging parameters (idempotent)
- register: result
- junipernetworks.junos.junos_logging:
- size: 65536
- files: 40
- rotate_frequency: 20
- state: present
- active: true
-
-- ansible.builtin.assert:
- that:
- - result.changed == false
-
-- name: Disable logging parameters
- register: result
- junipernetworks.junos.junos_logging:
- size: 65536
- files: 40
- rotate_frequency: 20
- state: present
- active: false
-
-- name: Get running configuration
- register: config
- junipernetworks.junos.junos_rpc:
- rpc: get-configuration
-
-- ansible.builtin.assert:
- that:
- - result.changed == true
- - '''<size inactive="inactive">64k</size>'' in config.xml'
- - '''<files inactive="inactive">40</files>'' in config.xml'
- - "'<log-rotate-frequency inactive=\"inactive\">20</log-rotate-frequency>'\
- \ in config.xml"
-
-- name: Activate logging parameters
- register: result
- junipernetworks.junos.junos_logging:
- size: 65536
- files: 40
- rotate_frequency: 20
- state: present
- active: true
-
-- name: Get running configuration
- register: config
- junipernetworks.junos.junos_rpc:
- rpc: get-configuration
-
-- ansible.builtin.assert:
- that:
- - result.changed == true
- - "'<size>64k</size>' in config.xml"
- - "'<files>40</files>' in config.xml"
- - "'<log-rotate-frequency>20</log-rotate-frequency>' in config.xml"
-
-- name: Delete logging parameters
- register: result
- junipernetworks.junos.junos_logging:
- size: 65536
- files: 40
- rotate_frequency: 20
- state: absent
-
-- name: Get running configuration
- register: config
- junipernetworks.junos.junos_rpc:
- rpc: get-configuration
-
-- ansible.builtin.assert:
- that:
- - result.changed == true
- - "'<size>64k</size>' not in config.xml"
- - "'<files>40</files>' not in config.xml"
- - "'<log-rotate-frequency>20</log-rotate-frequency>' not in config.xml"
-
-- name: Seup file logging using aggregate
- register: result
- junipernetworks.junos.junos_logging:
- aggregate:
- - dest: file
- name: test-1
- facility: pfe
- level: critical
- state: absent
-
- - dest: file
- name: test-2
- facility: kernel
- level: emergency
- state: absent
-
-- name: Configure file logging using aggregate
- register: result
- junipernetworks.junos.junos_logging:
- aggregate:
- - dest: file
- name: test-1
- facility: pfe
- level: critical
- active: true
-
- - dest: file
- name: test-2
- facility: kernel
- level: emergency
- active: true
-
-- ansible.builtin.assert:
- that:
- - result.changed == true
- - result.diff.prepared is search("\+ *file test-1")
- - result.diff.prepared is search("\+ *pfe critical")
- - result.diff.prepared is search("\+ *file test-2")
- - result.diff.prepared is search("\+ *kernel emergency")
-
-- name: Deactivate file logging configuration using aggregate
- register: result
- junipernetworks.junos.junos_logging:
- aggregate:
- - dest: file
- name: test-1
- facility: pfe
- level: critical
-
- - dest: file
- name: test-2
- facility: kernel
- level: emergency
- active: false
-
-- ansible.builtin.assert:
- that:
- - result.changed == true
- - result.diff.prepared is search("! *inactive[:] file test-1")
- - result.diff.prepared is search("! *inactive[:] pfe")
- - result.diff.prepared is search("! *inactive[:] file test-2")
- - result.diff.prepared is search("! *inactive[:] kernel")
-
-- name: activate file logging configuration using aggregate
- register: result
- junipernetworks.junos.junos_logging:
- aggregate:
- - dest: file
- name: test-1
- facility: pfe
- level: critical
-
- - dest: file
- name: test-2
- facility: kernel
- level: emergency
- active: true
-
-- ansible.builtin.assert:
- that:
- - result.changed == true
- - result.diff.prepared is search("! *active[:] file test-1")
- - result.diff.prepared is search("! *active[:] pfe")
- - result.diff.prepared is search("! *active[:] file test-2")
- - result.diff.prepared is search("! *active[:] kernel")
-
-- name: Delete file logging using aggregate
- register: result
- junipernetworks.junos.junos_logging:
- aggregate:
- - dest: file
- name: test-1
- facility: pfe
- level: critical
-
- - dest: file
- name: test-2
- facility: kernel
- level: emergency
- state: absent
-
-- ansible.builtin.assert:
- that:
- - result.changed == true
- - result.diff.prepared is search("\- *file test-1")
- - result.diff.prepared is search("\- *pfe critical")
- - result.diff.prepared is search("\- *file test-2")
- - result.diff.prepared is search("\- *kernel emergency")
-
-- name: Delete file logging using aggregate (idempotent)
- register: result
- junipernetworks.junos.junos_logging:
- aggregate:
- - dest: file
- name: test-1
- facility: pfe
- level: critical
-
- - dest: file
- name: test-2
- facility: kernel
- level: emergency
- state: absent
-
-- ansible.builtin.assert:
- that:
- - result.changed == false
-
-- ansible.builtin.debug:
- msg="END junos_logging netconf/basic.yaml on connection={{ ansible_connection
- }}"
diff --git a/ansible_collections/junipernetworks/junos/tests/integration/targets/junos_ospf_interfaces/tests/netconf/_reset_config.yaml b/ansible_collections/junipernetworks/junos/tests/integration/targets/junos_ospf_interfaces/tests/netconf/_reset_config.yaml
index 8ed9385eb..070a57754 100644
--- a/ansible_collections/junipernetworks/junos/tests/integration/targets/junos_ospf_interfaces/tests/netconf/_reset_config.yaml
+++ b/ansible_collections/junipernetworks/junos/tests/integration/targets/junos_ospf_interfaces/tests/netconf/_reset_config.yaml
@@ -1,11 +1,11 @@
---
- ansible.builtin.debug:
- msg: "START junos_ospfv3 reset config on connection={{ ansible_connection }}"
+ msg: "START reset ospf and routing-options config on connection={{ ansible_connection }}"
-- name: Reset configuration for ospf3 and routing-options
+- name: Reset configuration for ospf and routing-options
junipernetworks.junos.junos_config:
lines:
- delete protocols ospf
- delete routing-options
- ansible.builtin.debug:
- msg: "END junos_ospfv3 reset config on connection={{ ansible_connection }}"
+ msg: "END ospf and routing-options reset config on connection={{ ansible_connection }}"
diff --git a/ansible_collections/junipernetworks/junos/tests/integration/targets/prepare_junos_tests/tasks/main.yml b/ansible_collections/junipernetworks/junos/tests/integration/targets/prepare_junos_tests/tasks/main.yml
index 179fb0d95..68bf6e300 100644
--- a/ansible_collections/junipernetworks/junos/tests/integration/targets/prepare_junos_tests/tasks/main.yml
+++ b/ansible_collections/junipernetworks/junos/tests/integration/targets/prepare_junos_tests/tasks/main.yml
@@ -1,18 +1,4 @@
---
-- name: Debug task
- ansible.builtin.debug:
- msg: "START prepare_junos_tests/main.yaml"
-
-- name: Ensure netconf is enabled
- connection: ansible.netcommon.network_cli
- tags: netconf
- junipernetworks.junos.junos_netconf:
- state: present
-
-- name: Wait for netconf server to come up
- delegate_to: localhost
- tags: netconf
- ansible.builtin.wait_for:
- host: "{{ hostvars[item].ansible_host }}"
- port: 830
- with_inventory_hostnames: junos
+- name: Run the prepare steps if requested
+ ansible.builtin.include_tasks: prepare.yml
+ when: prepare_junos_tests_task | default(True) | bool
diff --git a/ansible_collections/junipernetworks/junos/tests/integration/targets/prepare_junos_tests/tasks/prepare.yml b/ansible_collections/junipernetworks/junos/tests/integration/targets/prepare_junos_tests/tasks/prepare.yml
new file mode 100644
index 000000000..179fb0d95
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/tests/integration/targets/prepare_junos_tests/tasks/prepare.yml
@@ -0,0 +1,18 @@
+---
+- name: Debug task
+ ansible.builtin.debug:
+ msg: "START prepare_junos_tests/main.yaml"
+
+- name: Ensure netconf is enabled
+ connection: ansible.netcommon.network_cli
+ tags: netconf
+ junipernetworks.junos.junos_netconf:
+ state: present
+
+- name: Wait for netconf server to come up
+ delegate_to: localhost
+ tags: netconf
+ ansible.builtin.wait_for:
+ host: "{{ hostvars[item].ansible_host }}"
+ port: 830
+ with_inventory_hostnames: junos
diff --git a/ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.11.txt b/ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.11.txt
deleted file mode 100644
index ed6d78dfe..000000000
--- a/ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.11.txt
+++ /dev/null
@@ -1 +0,0 @@
-plugins/action/junos.py action-plugin-docs # base class for deprecated network platform modules using `connection: local`
diff --git a/ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.12.txt b/ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.12.txt
deleted file mode 100644
index ed6d78dfe..000000000
--- a/ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.12.txt
+++ /dev/null
@@ -1 +0,0 @@
-plugins/action/junos.py action-plugin-docs # base class for deprecated network platform modules using `connection: local`
diff --git a/ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.13.txt b/ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.13.txt
deleted file mode 100644
index ed6d78dfe..000000000
--- a/ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.13.txt
+++ /dev/null
@@ -1 +0,0 @@
-plugins/action/junos.py action-plugin-docs # base class for deprecated network platform modules using `connection: local`
diff --git a/ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.10.txt b/ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.18.txt
index ed6d78dfe..ed6d78dfe 100644
--- a/ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.10.txt
+++ b/ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.18.txt
diff --git a/ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.9.txt b/ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.9.txt
deleted file mode 100644
index e6e2e3680..000000000
--- a/ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.9.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-plugins/action/junos.py action-plugin-docs # base class for deprecated network platform modules using `connection: local`
-plugins/modules/junos_logging.py validate-modules:deprecation-mismatch # 2.9 expects METADATA
-plugins/modules/junos_logging.py validate-modules:invalid-documentation # removed_at_date not supported in `deprecated` dict
-plugins/modules/junos_scp.py validate-modules:deprecation-mismatch # 2.9 expects METADATA
-plugins/modules/junos_scp.py validate-modules:invalid-documentation # removed_at_date not supported in `deprecated` dict
diff --git a/ansible_collections/junipernetworks/junos/tests/unit/compat/__init__.py b/ansible_collections/junipernetworks/junos/tests/unit/compat/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/ansible_collections/junipernetworks/junos/tests/unit/compat/__init__.py
+++ /dev/null
diff --git a/ansible_collections/junipernetworks/junos/tests/unit/compat/mock.py b/ansible_collections/junipernetworks/junos/tests/unit/compat/mock.py
deleted file mode 100644
index 860a9e84b..000000000
--- a/ansible_collections/junipernetworks/junos/tests/unit/compat/mock.py
+++ /dev/null
@@ -1,130 +0,0 @@
-# (c) 2014, Toshio Kuratomi <tkuratomi@ansible.com>
-#
-# 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 <http://www.gnu.org/licenses/>.
-
-# Make coding more python3-ish
-from __future__ import absolute_import, division, print_function
-
-
-__metaclass__ = type
-
-import _io
-
-
-"""
-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:
- 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/junipernetworks/junos/tests/unit/compat/unittest.py b/ansible_collections/junipernetworks/junos/tests/unit/compat/unittest.py
deleted file mode 100644
index df4266ec9..000000000
--- a/ansible_collections/junipernetworks/junos/tests/unit/compat/unittest.py
+++ /dev/null
@@ -1,41 +0,0 @@
-# (c) 2014, Toshio Kuratomi <tkuratomi@ansible.com>
-#
-# 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 <http://www.gnu.org/licenses/>.
-
-# 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/junipernetworks/junos/tests/unit/mock/path.py b/ansible_collections/junipernetworks/junos/tests/unit/mock/path.py
index a7171080e..7d287a5fb 100644
--- a/ansible_collections/junipernetworks/junos/tests/unit/mock/path.py
+++ b/ansible_collections/junipernetworks/junos/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.junipernetworks.junos.tests.unit.compat.mock import MagicMock
+from ansible.utils.path import unfrackpath
mock_unfrackpath_noop = MagicMock(
diff --git a/ansible_collections/junipernetworks/junos/tests/unit/mock/procenv.py b/ansible_collections/junipernetworks/junos/tests/unit/mock/procenv.py
index 79f2f97ca..e6e09464b 100644
--- a/ansible_collections/junipernetworks/junos/tests/unit/mock/procenv.py
+++ b/ansible_collections/junipernetworks/junos/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.junipernetworks.junos.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/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_bgp_address_family.py b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_bgp_address_family.py
index f28cb61a0..5a743bee7 100644
--- a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_bgp_address_family.py
+++ b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_bgp_address_family.py
@@ -26,8 +26,9 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
+from unittest.mock import patch
+
from ansible_collections.junipernetworks.junos.plugins.modules import junos_bgp_address_family
-from ansible_collections.junipernetworks.junos.tests.unit.compat.mock import patch
from ansible_collections.junipernetworks.junos.tests.unit.modules.utils import set_module_args
from .junos_module import TestJunosModule, load_fixture
diff --git a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_bgp_global.py b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_bgp_global.py
index f1d377494..f5d8dfcd5 100644
--- a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_bgp_global.py
+++ b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_bgp_global.py
@@ -26,8 +26,9 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
+from unittest.mock import patch
+
from ansible_collections.junipernetworks.junos.plugins.modules import junos_bgp_global
-from ansible_collections.junipernetworks.junos.tests.unit.compat.mock import patch
from ansible_collections.junipernetworks.junos.tests.unit.modules.utils import set_module_args
from .junos_module import TestJunosModule, load_fixture
diff --git a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_command.py b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_command.py
index 720b32981..5e0669577 100644
--- a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_command.py
+++ b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_command.py
@@ -26,8 +26,9 @@ try:
except ImportError:
from xml.etree.ElementTree import fromstring
+from unittest.mock import patch
+
from ansible_collections.junipernetworks.junos.plugins.modules import junos_command
-from ansible_collections.junipernetworks.junos.tests.unit.compat.mock import patch
from ansible_collections.junipernetworks.junos.tests.unit.modules.utils import set_module_args
from .junos_module import TestJunosModule, load_fixture
diff --git a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_config.py b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_config.py
index f3adb4767..e24a56c47 100644
--- a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_config.py
+++ b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_config.py
@@ -22,10 +22,11 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
+from unittest.mock import patch
+
from ansible.module_utils._text import to_text
from ansible_collections.junipernetworks.junos.plugins.modules import junos_config
-from ansible_collections.junipernetworks.junos.tests.unit.compat.mock import patch
from ansible_collections.junipernetworks.junos.tests.unit.modules.utils import set_module_args
from .junos_module import TestJunosModule, load_fixture
diff --git a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_facts.py b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_facts.py
index 1e6bc12d3..154ea4f50 100644
--- a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_facts.py
+++ b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_facts.py
@@ -26,8 +26,9 @@ try:
except ImportError:
from xml.etree.ElementTree import fromstring
+from unittest.mock import patch
+
from ansible_collections.junipernetworks.junos.plugins.modules import junos_facts
-from ansible_collections.junipernetworks.junos.tests.unit.compat.mock import patch
from ansible_collections.junipernetworks.junos.tests.unit.modules.utils import set_module_args
from .junos_module import TestJunosModule, load_fixture
diff --git a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_hostname.py b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_hostname.py
index a6c40395f..8fe1931d7 100644
--- a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_hostname.py
+++ b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_hostname.py
@@ -26,8 +26,9 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
+from unittest.mock import patch
+
from ansible_collections.junipernetworks.junos.plugins.modules import junos_hostname
-from ansible_collections.junipernetworks.junos.tests.unit.compat.mock import patch
from ansible_collections.junipernetworks.junos.tests.unit.modules.utils import set_module_args
from .junos_module import TestJunosModule, load_fixture
diff --git a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_interfaces.py b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_interfaces.py
index 55ee8c766..d2f41bf6c 100644
--- a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_interfaces.py
+++ b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_interfaces.py
@@ -26,8 +26,9 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
+from unittest.mock import patch
+
from ansible_collections.junipernetworks.junos.plugins.modules import junos_interfaces
-from ansible_collections.junipernetworks.junos.tests.unit.compat.mock import patch
from ansible_collections.junipernetworks.junos.tests.unit.modules.utils import set_module_args
from .junos_module import TestJunosModule, load_fixture
diff --git a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_l2_interfaces.py b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_l2_interfaces.py
index 1524047f5..06d61143e 100644
--- a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_l2_interfaces.py
+++ b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_l2_interfaces.py
@@ -26,8 +26,9 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
+from unittest.mock import patch
+
from ansible_collections.junipernetworks.junos.plugins.modules import junos_l2_interfaces
-from ansible_collections.junipernetworks.junos.tests.unit.compat.mock import patch
from ansible_collections.junipernetworks.junos.tests.unit.modules.utils import set_module_args
from .junos_module import TestJunosModule, load_fixture
diff --git a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_l3_interfaces.py b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_l3_interfaces.py
index dba2e4b7d..600861a68 100644
--- a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_l3_interfaces.py
+++ b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_l3_interfaces.py
@@ -26,8 +26,9 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
+from unittest.mock import patch
+
from ansible_collections.junipernetworks.junos.plugins.modules import junos_l3_interfaces
-from ansible_collections.junipernetworks.junos.tests.unit.compat.mock import patch
from ansible_collections.junipernetworks.junos.tests.unit.modules.utils import set_module_args
from .junos_module import TestJunosModule, load_fixture
diff --git a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_logging_global.py b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_logging_global.py
index d1046c14c..55ac5170a 100644
--- a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_logging_global.py
+++ b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_logging_global.py
@@ -26,8 +26,9 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
+from unittest.mock import patch
+
from ansible_collections.junipernetworks.junos.plugins.modules import junos_logging_global
-from ansible_collections.junipernetworks.junos.tests.unit.compat.mock import patch
from ansible_collections.junipernetworks.junos.tests.unit.modules.utils import set_module_args
from .junos_module import TestJunosModule, load_fixture
diff --git a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_netconf.py b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_netconf.py
index 8f98536c7..70e4fe0b2 100644
--- a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_netconf.py
+++ b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_netconf.py
@@ -21,8 +21,9 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
+from unittest.mock import patch
+
from ansible_collections.junipernetworks.junos.plugins.modules import junos_netconf
-from ansible_collections.junipernetworks.junos.tests.unit.compat.mock import patch
from ansible_collections.junipernetworks.junos.tests.unit.modules.utils import set_module_args
from .junos_module import TestJunosModule
diff --git a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_ntp_global.py b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_ntp_global.py
index d99faf11a..26836a7c4 100644
--- a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_ntp_global.py
+++ b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_ntp_global.py
@@ -26,8 +26,9 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
+from unittest.mock import patch
+
from ansible_collections.junipernetworks.junos.plugins.modules import junos_ntp_global
-from ansible_collections.junipernetworks.junos.tests.unit.compat.mock import patch
from ansible_collections.junipernetworks.junos.tests.unit.modules.utils import set_module_args
from .junos_module import TestJunosModule, load_fixture
diff --git a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_ospf_interfaces.py b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_ospf_interfaces.py
index e57a65955..39ea2b77d 100644
--- a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_ospf_interfaces.py
+++ b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_ospf_interfaces.py
@@ -26,8 +26,9 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
+from unittest.mock import MagicMock, patch
+
from ansible_collections.junipernetworks.junos.plugins.modules import junos_ospf_interfaces
-from ansible_collections.junipernetworks.junos.tests.unit.compat.mock import MagicMock, patch
from ansible_collections.junipernetworks.junos.tests.unit.modules.utils import set_module_args
from .junos_module import TestJunosModule, load_fixture
diff --git a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_ospfv2.py b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_ospfv2.py
index 593acd831..3ec9f589c 100644
--- a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_ospfv2.py
+++ b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_ospfv2.py
@@ -26,8 +26,9 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
+from unittest.mock import patch
+
from ansible_collections.junipernetworks.junos.plugins.modules import junos_ospfv2
-from ansible_collections.junipernetworks.junos.tests.unit.compat.mock import patch
from ansible_collections.junipernetworks.junos.tests.unit.modules.utils import set_module_args
from .junos_module import TestJunosModule, load_fixture
@@ -567,7 +568,7 @@ class TestJunosOspfv2Module(TestJunosModule):
result = self.execute_module(changed=True, commands=commands)
self.assertEqual(sorted(result["commands"]), sorted(commands))
- def test_junos_ospfv2_rendered(self):
+ def test_junos_ospfv2_deleted(self):
set_module_args(
dict(
config=[],
@@ -576,11 +577,13 @@ class TestJunosOspfv2Module(TestJunosModule):
)
commands = [
'<nc:protocols xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"><nc:ospf>'
- '<nc:area delete="delete">0.0.0.100</nc:area><nc:spf-options delete="delete"/>'
- '<nc:reference-bandwidth delete="delete"/><nc:no-rfc-1583 delete="delete"/>'
- '<nc:overload delete="delete"/></nc:ospf></nc:protocols>',
+ '<nc:area delete="delete">0.0.0.100</nc:area><nc:area delete="delete">0.0.0.200</nc:area>'
+ '<nc:spf-options delete="delete"/><nc:reference-bandwidth delete="delete"/>'
+ '<nc:no-rfc-1583 delete="delete"/><nc:overload delete="delete"/>'
+ '<nc:prefix-export-limit delete="delete"/></nc:ospf></nc:protocols>',
]
result = self.execute_module(changed=True, commands=commands)
+
self.assertEqual(sorted(result["commands"]), sorted(commands))
def test_junos_ospfv2_parsed(self):
diff --git a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_ospfv3.py b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_ospfv3.py
index a96d95bac..beef248b3 100644
--- a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_ospfv3.py
+++ b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_ospfv3.py
@@ -26,8 +26,9 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
+from unittest.mock import MagicMock, patch
+
from ansible_collections.junipernetworks.junos.plugins.modules import junos_ospfv3
-from ansible_collections.junipernetworks.junos.tests.unit.compat.mock import MagicMock, patch
from ansible_collections.junipernetworks.junos.tests.unit.modules.utils import set_module_args
from .junos_module import TestJunosModule, load_fixture
diff --git a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_package.py b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_package.py
index f679fa5a3..943c7e9e0 100644
--- a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_package.py
+++ b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_package.py
@@ -21,7 +21,8 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
-from ansible_collections.junipernetworks.junos.tests.unit.compat.mock import MagicMock, patch
+from unittest.mock import MagicMock, patch
+
from ansible_collections.junipernetworks.junos.tests.unit.modules.utils import set_module_args
from .junos_module import TestJunosModule
diff --git a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_ping.py b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_ping.py
index da101d418..4a6d27011 100644
--- a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_ping.py
+++ b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_ping.py
@@ -21,8 +21,9 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
+from unittest.mock import MagicMock, patch
+
from ansible_collections.junipernetworks.junos.plugins.modules import junos_ping
-from ansible_collections.junipernetworks.junos.tests.unit.compat.mock import MagicMock, patch
from ansible_collections.junipernetworks.junos.tests.unit.modules.utils import set_module_args
from .junos_module import TestJunosModule, load_fixture
diff --git a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_prefix_lists.py b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_prefix_lists.py
index d46b38684..9db905a4c 100644
--- a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_prefix_lists.py
+++ b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_prefix_lists.py
@@ -26,8 +26,9 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
+from unittest.mock import patch
+
from ansible_collections.junipernetworks.junos.plugins.modules import junos_prefix_lists
-from ansible_collections.junipernetworks.junos.tests.unit.compat.mock import patch
from ansible_collections.junipernetworks.junos.tests.unit.modules.utils import set_module_args
from .junos_module import TestJunosModule, load_fixture
diff --git a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_routing_instances.py b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_routing_instances.py
index 5d656852d..214bddb80 100644
--- a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_routing_instances.py
+++ b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_routing_instances.py
@@ -26,8 +26,9 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
+from unittest.mock import patch
+
from ansible_collections.junipernetworks.junos.plugins.modules import junos_routing_instances
-from ansible_collections.junipernetworks.junos.tests.unit.compat.mock import patch
from ansible_collections.junipernetworks.junos.tests.unit.modules.utils import set_module_args
from .junos_module import TestJunosModule, load_fixture
diff --git a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_routing_options.py b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_routing_options.py
index 2f80838b0..0f506bc8c 100644
--- a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_routing_options.py
+++ b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_routing_options.py
@@ -26,8 +26,9 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
+from unittest.mock import patch
+
from ansible_collections.junipernetworks.junos.plugins.modules import junos_routing_options
-from ansible_collections.junipernetworks.junos.tests.unit.compat.mock import patch
from ansible_collections.junipernetworks.junos.tests.unit.modules.utils import set_module_args
from .junos_module import TestJunosModule, load_fixture
diff --git a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_rpc.py b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_rpc.py
index 4c914aa3d..11a3bb8a2 100644
--- a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_rpc.py
+++ b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_rpc.py
@@ -26,8 +26,9 @@ try:
except ImportError:
from xml.etree.ElementTree import fromstring
+from unittest.mock import patch
+
from ansible_collections.junipernetworks.junos.plugins.modules import junos_rpc
-from ansible_collections.junipernetworks.junos.tests.unit.compat.mock import patch
from ansible_collections.junipernetworks.junos.tests.unit.modules.utils import set_module_args
from .junos_module import TestJunosModule, load_fixture
diff --git a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_scp.py b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_scp.py
index 0788d6523..fc2bd1b82 100644
--- a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_scp.py
+++ b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_scp.py
@@ -23,7 +23,8 @@ __metaclass__ = type
import os
-from ansible_collections.junipernetworks.junos.tests.unit.compat.mock import MagicMock, patch
+from unittest.mock import MagicMock, patch
+
from ansible_collections.junipernetworks.junos.tests.unit.modules.utils import set_module_args
from .junos_module import TestJunosModule
diff --git a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_security_policies.py b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_security_policies.py
index b41161672..22eb2b14c 100644
--- a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_security_policies.py
+++ b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_security_policies.py
@@ -26,8 +26,9 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
+from unittest.mock import patch
+
from ansible_collections.junipernetworks.junos.plugins.modules import junos_security_policies
-from ansible_collections.junipernetworks.junos.tests.unit.compat.mock import patch
from ansible_collections.junipernetworks.junos.tests.unit.modules.utils import set_module_args
from .junos_module import TestJunosModule, load_fixture
diff --git a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_security_policies_global.py b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_security_policies_global.py
index 1dd375233..1c1131d90 100644
--- a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_security_policies_global.py
+++ b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_security_policies_global.py
@@ -26,8 +26,9 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
+from unittest.mock import patch
+
from ansible_collections.junipernetworks.junos.plugins.modules import junos_security_policies_global
-from ansible_collections.junipernetworks.junos.tests.unit.compat.mock import patch
from ansible_collections.junipernetworks.junos.tests.unit.modules.utils import set_module_args
from .junos_module import TestJunosModule, load_fixture
diff --git a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_security_zones.py b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_security_zones.py
index 764d1a7e8..b5eb03851 100644
--- a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_security_zones.py
+++ b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_security_zones.py
@@ -26,8 +26,9 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
+from unittest.mock import patch
+
from ansible_collections.junipernetworks.junos.plugins.modules import junos_security_zones
-from ansible_collections.junipernetworks.junos.tests.unit.compat.mock import patch
from ansible_collections.junipernetworks.junos.tests.unit.modules.utils import set_module_args
from .junos_module import TestJunosModule, load_fixture
diff --git a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_snmp_server.py b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_snmp_server.py
index ed73b8c5a..f29381a19 100644
--- a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_snmp_server.py
+++ b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_snmp_server.py
@@ -26,8 +26,9 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
+from unittest.mock import patch
+
from ansible_collections.junipernetworks.junos.plugins.modules import junos_snmp_server
-from ansible_collections.junipernetworks.junos.tests.unit.compat.mock import patch
from ansible_collections.junipernetworks.junos.tests.unit.modules.utils import set_module_args
from .junos_module import TestJunosModule, load_fixture
diff --git a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_vlans.py b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_vlans.py
index c6f33fc12..1f0890a51 100644
--- a/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_vlans.py
+++ b/ansible_collections/junipernetworks/junos/tests/unit/modules/network/junos/test_junos_vlans.py
@@ -26,8 +26,9 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
+from unittest.mock import patch
+
from ansible_collections.junipernetworks.junos.plugins.modules import junos_vlans
-from ansible_collections.junipernetworks.junos.tests.unit.compat.mock import patch
from ansible_collections.junipernetworks.junos.tests.unit.modules.utils import set_module_args
from .junos_module import TestJunosModule, load_fixture
diff --git a/ansible_collections/junipernetworks/junos/tests/unit/modules/utils.py b/ansible_collections/junipernetworks/junos/tests/unit/modules/utils.py
index d1cc4ec53..87be9cf8e 100644
--- a/ansible_collections/junipernetworks/junos/tests/unit/modules/utils.py
+++ b/ansible_collections/junipernetworks/junos/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.junipernetworks.junos.tests.unit.compat import unittest
-from ansible_collections.junipernetworks.junos.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/junipernetworks/junos/tox-ansible.ini b/ansible_collections/junipernetworks/junos/tox-ansible.ini
new file mode 100644
index 000000000..5e1f4b36a
--- /dev/null
+++ b/ansible_collections/junipernetworks/junos/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/kaytus/ksmanage/.github/workflows/ansible-test.yml b/ansible_collections/kaytus/ksmanage/.github/workflows/ansible-test.yml
new file mode 100644
index 000000000..fbb52168f
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/.github/workflows/ansible-test.yml
@@ -0,0 +1,54 @@
+name: CI
+on:
+ pull_request:
+ push:
+ # Run CI once per day (at 06:00 UTC)
+ # This ensures that even if there haven't been commits that we are still testing against latest version of ansible-test for each ansible-base version
+ schedule:
+ - cron: '0 6 * * *'
+
+jobs:
+ sanity:
+ name: Sanity (${{ matrix.ansible }})
+ strategy:
+ matrix:
+ ansible:
+ - stable-2.14
+ - stable-2.15
+ - stable-2.16
+ - stable-2.17
+ - devel
+ python-version:
+ - '3.9'
+ - '3.10'
+ - '3.11'
+ - '3.12'
+ exclude:
+ - ansible: stable-2.14
+ python-version: '3.12'
+ - ansible: stable-2.15
+ python-version: '3.12'
+ - ansible: stable-2.16
+ python-version: '3.9'
+ - ansible: stable-2.17
+ python-version: '3.9'
+ - ansible: devel
+ python-version: '3.9'
+ runs-on: ubuntu-latest
+ steps:
+
+ - name: Check out code
+ uses: actions/checkout@v1
+ with:
+ path: ansible_collections/kaytus/ksmanage
+
+ - name: Set up Python (${{ matrix.python-version }})
+ uses: actions/setup-python@v1
+ with:
+ python-version: ${{ matrix.python-version }}
+
+ - name: Install ansible-base (${{ matrix.ansible }})
+ run: pip install https://github.com/ansible/ansible/archive/${{ matrix.ansible }}.tar.gz --disable-pip-version-check
+
+ - name: Run sanity tests
+ run: ansible-test sanity --docker -v --color
diff --git a/ansible_collections/kaytus/ksmanage/.idea/.gitignore b/ansible_collections/kaytus/ksmanage/.idea/.gitignore
new file mode 100644
index 000000000..eaf91e2ac
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/ansible_collections/kaytus/ksmanage/.idea/inspectionProfiles/profiles_settings.xml b/ansible_collections/kaytus/ksmanage/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 000000000..105ce2da2
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,6 @@
+<component name="InspectionProjectProfileManager">
+ <settings>
+ <option name="USE_PROJECT_PROFILE" value="false" />
+ <version value="1.0" />
+ </settings>
+</component> \ No newline at end of file
diff --git a/ansible_collections/kaytus/ksmanage/.idea/kaytus.ksmanage.iml b/ansible_collections/kaytus/ksmanage/.idea/kaytus.ksmanage.iml
new file mode 100644
index 000000000..2946dc0d1
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/.idea/kaytus.ksmanage.iml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="PYTHON_MODULE" version="4">
+ <component name="NewModuleRootManager">
+ <content url="file://$MODULE_DIR$" />
+ <orderEntry type="inheritedJdk" />
+ <orderEntry type="sourceFolder" forTests="false" />
+ </component>
+ <component name="PyDocumentationSettings">
+ <option name="format" value="PLAIN" />
+ <option name="myDocStringFormat" value="Plain" />
+ </component>
+</module> \ No newline at end of file
diff --git a/ansible_collections/kaytus/ksmanage/.idea/modules.xml b/ansible_collections/kaytus/ksmanage/.idea/modules.xml
new file mode 100644
index 000000000..188e70dc8
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/.idea/modules.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="ProjectModuleManager">
+ <modules>
+ <module fileurl="file://$PROJECT_DIR$/.idea/kaytus.ksmanage.iml" filepath="$PROJECT_DIR$/.idea/kaytus.ksmanage.iml" />
+ </modules>
+ </component>
+</project> \ No newline at end of file
diff --git a/ansible_collections/kaytus/ksmanage/.idea/vcs.xml b/ansible_collections/kaytus/ksmanage/.idea/vcs.xml
new file mode 100644
index 000000000..9661ac713
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/.idea/vcs.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="VcsDirectoryMappings">
+ <mapping directory="$PROJECT_DIR$" vcs="Git" />
+ </component>
+</project> \ No newline at end of file
diff --git a/ansible_collections/kaytus/ksmanage/.idea/workspace.xml b/ansible_collections/kaytus/ksmanage/.idea/workspace.xml
new file mode 100644
index 000000000..e7adf3bfd
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/.idea/workspace.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="ChangeListManager">
+ <list default="true" id="eee6cc36-2e53-4ba3-a496-4db0ba2b7648" name="Changes" comment="" />
+ <option name="SHOW_DIALOG" value="false" />
+ <option name="HIGHLIGHT_CONFLICTS" value="true" />
+ <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+ <option name="LAST_RESOLUTION" value="IGNORE" />
+ </component>
+ <component name="Git.Settings">
+ <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
+ </component>
+ <component name="ProjectId" id="2fGLYAS4W8rGydHdMdxcQm2KXUW" />
+ <component name="ProjectLevelVcsManager" settingsEditedManually="true" />
+ <component name="ProjectViewState">
+ <option name="hideEmptyMiddlePackages" value="true" />
+ <option name="showLibraryContents" value="true" />
+ </component>
+ <component name="PropertiesComponent">
+ <property name="RunOnceActivity.OpenProjectViewOnStart" value="true" />
+ <property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
+ </component>
+ <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
+ <component name="TaskManager">
+ <task active="true" id="Default" summary="Default task">
+ <changelist id="eee6cc36-2e53-4ba3-a496-4db0ba2b7648" name="Changes" comment="" />
+ <created>1713422526344</created>
+ <option name="number" value="Default" />
+ <option name="presentableId" value="Default" />
+ <updated>1713422526344</updated>
+ </task>
+ <servers />
+ </component>
+</project> \ No newline at end of file
diff --git a/ansible_collections/kaytus/ksmanage/CHANGELOG.rst b/ansible_collections/kaytus/ksmanage/CHANGELOG.rst
new file mode 100644
index 000000000..dcab2e9ae
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/CHANGELOG.rst
@@ -0,0 +1,214 @@
+====================================================
+CHANGE THIS IN changelogs/config.yaml! Release Notes
+====================================================
+
+.. contents:: Topics
+
+
+v1.2.1
+======
+
+Bugfixes
+--------
+
+- Change the example gather_facts no to false(https://github.com/ieisystem/kaytus.ksmanage/pull/20).
+- Delete the unwanted links.yml file (https://github.com/ieisystem/kaytus.ksmanage/pull/21).
+
+v1.2.0
+======
+
+Removed Features (previously deprecated)
+----------------------------------------
+
+- add_ldisk - Delete the ``add_ldisk.info`` parameter. Use ``kaytus.ksmanage.pdisk_info`` instead (https://github.com/ieisystem/kaytus.ksmanage/pull/17).
+- edit_ldisk - Delete the ``edit_ldisk.info`` parameter. Use ``kaytus.ksmanage.ldisk_info`` instead (https://github.com/ieisystem/kaytus.ksmanage/pull/17).
+- edit_pdisk - Delete the ``edit_pdisk.info`` parameter. Use ``kaytus.ksmanage.pdisk_info`` instead (https://github.com/ieisystem/kaytus.ksmanage/pull/17).
+
+Bugfixes
+--------
+
+- Add ansible 2.17 version tests to our CI test scripts (https://github.com/ieisystem/kaytus.ksmanage/pull/16).
+- Delete the useless __init__.py file in modules and module_utils (https://github.com/ieisystem/kaytus.ksmanage/pull/15).
+- ksmanage - Changed the message that no dependencies were installed (https://github.com/ieisystem/kaytus.ksmanage/pull/18).
+
+v1.1.3
+======
+
+Minor Changes
+-------------
+
+- Change the value of the dn field in the example so that the written argument does not contain Spaces.
+
+v1.1.2
+======
+
+Minor Changes
+-------------
+
+- Fix problems such as typos or grammatical errors in the document.
+
+v1.1.1
+======
+
+Minor Changes
+-------------
+
+- Fix any issues in your module that don't meet the ansible module format and documentation requirements.
+
+v1.1.0
+======
+
+Minor Changes
+-------------
+
+- Fix any issues in your module that don't meet the ansible module format and documentation requirements.
+
+v1.0.0
+======
+
+Major Changes
+-------------
+
+- add all modules.
+
+Minor Changes
+-------------
+
+- Modify the README.md file version to publish the reference link.
+
+Bugfixes
+--------
+
+- Modify the inmanage error referenced in modules utils.
+
+New Modules
+-----------
+
+- ad_group - Manage active directory group information
+- ad_group_info - Get active directory group information
+- ad_info - Get active directory information
+- adapter_info - Get adapter information
+- add_ldisk - Create logical disk
+- alert_policy_info - Get alert policy
+- audit_log_info - Get BMC audit log information
+- auto_capture_info - Get auto capture screen information
+- backplane_info - Get disk backplane information
+- backup - Backup server settings
+- bios_export - Export BIOS config
+- bios_import - Import BIOS config
+- bios_info - Get BIOS setup
+- bmc_info - Get BMC information
+- boot_image_info - Get bmc boot image information
+- boot_option_info - Get BIOS boot options
+- clear_audit_log - Clear BMC audit log
+- clear_event_log - Clear event log
+- clear_system_log - Clear BMC system log
+- collect_blackbox - Collect blackbox log
+- collect_log - Collect logs
+- connect_media_info - Get remote images redirection information
+- cpu_info - Get CPU information
+- del_session - Delete session
+- dns_info - Get dns information
+- download_auto_screenshot - Download auto screenshots
+- download_manual_screenshot - Download manual screenshots
+- edit_ad - Set active directory information
+- edit_alert_policy - Set alert policy
+- edit_auto_capture - Set auto capture screen
+- edit_bios - Set BIOS setup attributes
+- edit_boot_image - Set bmc boot image
+- edit_boot_option - Set BIOS boot options
+- edit_connect_media - Start/Stop virtual media Image
+- edit_dns - Set dns information
+- edit_event_log_policy - Set event log policy
+- edit_fan - Set fan information
+- edit_fru - Set fru settings
+- edit_ipv4 - Set ipv4 information
+- edit_ipv6 - Set ipv6 information
+- edit_kvm - Set KVM
+- edit_ldap - Set ldap information
+- edit_ldisk - Set logical disk
+- edit_log_setting - Set bmc system and audit log setting
+- edit_m6_log_setting - Set bmc system and audit log setting
+- edit_manual_capture - Set manual capture screen
+- edit_media_instance - Set Virtual Media Instance
+- edit_ncsi - Set ncsi information
+- edit_network - Set network information
+- edit_network_bond - Set network bond
+- edit_network_link - Set network link
+- edit_ntp - Set NTP
+- edit_pdisk - Set physical disk
+- edit_power_budget - Set power budget information
+- edit_power_restore - Set power restore information
+- edit_power_status - Set power status information
+- edit_preserve_config - Set preserve config
+- edit_psu_config - Set psu config information
+- edit_psu_peak - Set psu peak information
+- edit_restore_factory_default - Set preserver config
+- edit_service - Set service settings
+- edit_smtp - Set SMTP information
+- edit_smtp_com - Set SMTP information
+- edit_smtp_dest - Set SMTP information
+- edit_snmp - Set snmp
+- edit_snmp_trap - Set snmp trap
+- edit_threshold - Set threshold information
+- edit_uid - Set UID
+- edit_virtual_media - Set virtual media
+- edit_vlan - Set vlan information
+- event_log_info - Get event log information
+- event_log_policy_info - Get event log policy information
+- fan_info - Get fan information
+- fru_info - Get fru information
+- fw_version_info - Get firmware version information
+- gpu_info - Get GPU information
+- hard_disk_info - Get hard disk information
+- hba_info - Get CPU information
+- kvm_info - Get KVM information
+- ldap_group - Manage ldap group information
+- ldap_group_info - Get ldap group information
+- ldap_info - Get ldap information
+- ldisk_info - Get logical disks information
+- log_setting_info - Get bmc log setting information
+- media_instance_info - Get Virtual Media Instance information
+- mem_info - Get memory information
+- ncsi_info - Get ncsi information
+- network_bond_info - Get network bond information
+- network_info - Get network information
+- network_link_info - Get network link information
+- ntp_info - Get NTP information
+- onboard_disk_info - Get onboard disks information
+- pcie_info - Get PCIE information
+- pdisk_info - Get physical disks information
+- power_budget_info - Get power budget information
+- power_consumption_info - Get power consumption information
+- power_restore_info - Get power restore information
+- power_status_info - Get power status information
+- preserve_config_info - Get preserve config information
+- psu_config_info - Get psu config information
+- psu_info - Get psu information
+- psu_peak_info - Get psu peak information
+- raid_info - Get RAID/HBA card and controller information
+- reset_bmc - BMC reset
+- reset_kvm - KVM reset
+- restore - Restore server settings
+- self_test_info - Get self test information
+- sensor_info - Get sensor information
+- server_info - Get server status information
+- service_info - Get service information
+- session_info - Get online session information
+- smtp_info - Get SMTP information
+- snmp_info - Get snmp get/set information
+- snmp_trap_info - Get snmp trap information
+- support_info - Get support information
+- system_log_info - Get BMC system log information
+- temp_info - Get temp information
+- threshold_info - Get threshold information
+- uid_info - Get UID information
+- update_cpld - Update CPLD
+- update_fw - Update firmware
+- update_psu - Update PSU
+- user - Manage user
+- user_group - Manage user group
+- user_group_info - Get user group information
+- user_info - Get user information
+- virtual_media_info - Get Virtual Media information
+- volt_info - Get volt information
diff --git a/ansible_collections/community/sap/CODE_OF_CONDUCT.md b/ansible_collections/kaytus/ksmanage/CODE_OF_CONDUCT.md
index 0164155b8..89d6f5c97 100644
--- a/ansible_collections/community/sap/CODE_OF_CONDUCT.md
+++ b/ansible_collections/kaytus/ksmanage/CODE_OF_CONDUCT.md
@@ -1,3 +1,3 @@
-# Community Code of Conduct
-
-Please see the official [Ansible Community Code of Conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
+# Community Code of Conduct
+
+Please see the official [Ansible Community Code of Conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
diff --git a/ansible_collections/kaytus/ksmanage/FILES.json b/ansible_collections/kaytus/ksmanage/FILES.json
new file mode 100644
index 000000000..c19356103
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/FILES.json
@@ -0,0 +1,6879 @@
+{
+ "files": [
+ {
+ "name": ".",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/wheel3.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "04d610e5fad2b156c25d2298052a0a945ff422cfb854ed76f216a148bc9a05b4",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/wheel3.7.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "04d610e5fad2b156c25d2298052a0a945ff422cfb854ed76f216a148bc9a05b4",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/wheel.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "04d610e5fad2b156c25d2298052a0a945ff422cfb854ed76f216a148bc9a05b4",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/wheel-3.7.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "04d610e5fad2b156c25d2298052a0a945ff422cfb854ed76f216a148bc9a05b4",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/pythonw.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "623870d10a0f497b0657deebf91ca19efff1a7d5c0342b3385c6f7fd84cb7a8f",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/python.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "61596ea4e41b7a0fe7b629ab66c28273295ee311f6aa8431119525cb06b4f1e3",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/pydoc.bat",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a55bb19fc9a7f4ffd1774df8f5f881122c08b8cbdf25049f809d9d963513d9f0",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/pip3.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "addac07465b44ae5745dcd67cd405afd02e0c065010a301e68caf15004aaf6f5",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/pip3.7.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "addac07465b44ae5745dcd67cd405afd02e0c065010a301e68caf15004aaf6f5",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/pip.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "addac07465b44ae5745dcd67cd405afd02e0c065010a301e68caf15004aaf6f5",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/pip-3.7.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "addac07465b44ae5745dcd67cd405afd02e0c065010a301e68caf15004aaf6f5",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/deactivate.bat",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e8ece79cef870b6c2759437b6004fe6e3f35e7378a31710f0b491ec816302945",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/activate_this.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e80923738c93fc214452c40b1fb030bad3582a8b579881ef863725a6b10919cd",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/activate.xsh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d633b0be29ac6642093911f167b09922562b9a282a9ede8748e02367e1adc63a",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/activate.ps1",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "60a3888d12fa2c8dd5fe91f7d0c816029c7b79a83facccd406e915adc115cbe5",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/activate.fish",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "119ae41a1773a920865e62ee82c3632571b7413eb568115bed817c333c1cf0cb",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/activate.bat",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a8d9d08af40fffd9541eed214ae159e715056d27b95977eb17ef532d4366f7a4",
+ "format": 1
+ },
+ {
+ "name": "venv/Scripts/activate",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f6b7539b1862c89b1d1b0fca3607012904f255a16a5b43f8d10d34bd5b2dd250",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/_distutils_hack",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/_distutils_hack/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5f7454880e8a04fa0499ca3f0a3002ca5b7241b15119552965101b4a43c6c0cb",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/_distutils_hack/override.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "12efecf8d17a5486780aa774b5b6c0e70b56932d8864f35df1eb7a18bb759b3a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel-0.36.2.dist-info",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel-0.36.2.dist-info/WHEEL",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "67e9f2629c2b712ab17ddbb1e4c6e7fc3439db988fec9d831b72601af398c934",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel-0.36.2.dist-info/top_level.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1f148121b804b2d30f7b87856b0840eba32af90607328a5756802771f8dbff57",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel-0.36.2.dist-info/RECORD",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6d8d12da6b3fd9948764a402b1212ce2944033cbcac40d9f88d910cdbebebcf8",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel-0.36.2.dist-info/METADATA",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c3dea9017307656cc5cbe770a8666a5dbc6ee47ba9ddc6f7387ba3842b967c3b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel-0.36.2.dist-info/LICENSE.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "cca9e20c6af1fcfbf69408f377769286cbeebcded336100c9b4a3f35fbe635e4",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel-0.36.2.dist-info/INSTALLER",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0b77bdb04e0461147a7c783c200bc11a6591886e59e2509f5d7f6cb7179d01ab",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel-0.36.2.dist-info/entry_points.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "37c1db605493df2acd418781db05d60443d4845b04b4a3513da0851893f2ab27",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/vendored",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/vendored/packaging",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/vendored/packaging/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/vendored/packaging/_typing.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c79f44850e7b4cc4fe9134722d9576e4766f6061b06ee713a3a88a87f3b4b4cc",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/vendored/packaging/tags.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "cbc86016a7d5d0aae2a3e1de80f0770f4a7f01e898704f17c0094476612b0ded",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/vendored/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/cli",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/cli/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1964a8194a5169b4dff1b93716c3533eb73916cafc60ebf6757e79898d96ede6",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/cli/unpack.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d155b34fb53fc727a74cfc0455abf1aaf75e7bddc63ef0051e747752ef756917",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/cli/pack.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4be275888cb518f0d34c3767fbf4b0c466bb37bdbd878899348d75103142a9f0",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/cli/convert.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ec5e2f8f6dc0d8e8210c35a7f605f657efd37973336b56b99c87a39851845093",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/__main__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "945f982cee217509a85ae87879665df182f553de5149d9bbeac34b0576b4be31",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "80469c93aab7be06e6ae07a7edc3b77c23afeaf145e21876298ca3ddf2a4e782",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/wheelfile.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "eca80e2b5ce7ae8f83f007a580d104e2383a7c361763f06ee9cadda8b6f61104",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/util.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9a73599090a2f431cb23fab8953b9da03d265bdee1fc0a005a5ee9acd3cb5c97",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/pkginfo.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "191efa92ea50ce7d71f6c283697b84e81e85b19e0e91f46d1bba677655cfbd0e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/metadata.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6f790f8599f6c360fdc1e9e096d5f99c621943711150e43953e2b9bc728f75e8",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/macosx_libfile.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "eef11c1a5976dcaddf88b8edb47d229ed8f14743482bc3babe29a3459ec10a87",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel/bdist_wheel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "daf7efde0fdbf01bd9e43a3d6e92c405dbbd75011cbe8310d5f957a4a6052435",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools-57.0.0.dist-info",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools-57.0.0.dist-info/WHEEL",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3aa464174798e461ecb0ca2b16395b4c8ab4ef6be91e917ad1f21003a952f710",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools-57.0.0.dist-info/top_level.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "77dc8bdfdbff5bbaa62830d21fab13e1b1348ff2ecd4cdcfd7ad4e1a076c9b88",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools-57.0.0.dist-info/RECORD",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a31718b561db82a0d84adeaeb7616fcee1d95c6b7509ff7bf47e618aef5a7a1e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools-57.0.0.dist-info/METADATA",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "cf512c2d92874bbeaede7f64db0f37dc988ea6376bbc465294f5d1399e148891",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools-57.0.0.dist-info/LICENSE",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "db3f0246b1f9278f15845b99fec478b8b506eb76487993722f8c6e254285faf8",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools-57.0.0.dist-info/INSTALLER",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0b77bdb04e0461147a7c783c200bc11a6591886e59e2509f5d7f6cb7179d01ab",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools-57.0.0.dist-info/entry_points.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "96478968adb5be5b92db2ecc7e63bfb5b2d88e1f2f6990e066cc33538243f608",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools-57.0.0.dist-info/dependency_links.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1e5902164a0ae536d9e4430b6cb29884b718fc4df5901583f13a96d848266ad4",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/packaging",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/packaging/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e9e9dba795e045f8c18ec23df9b9f4d078c77f94c7db53c330e2a4256f31c3ec",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/packaging/__about__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3cd32c6999f851c087cae6e044e1f56e5e8296e76e3e3239905ad2a7f660925a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/packaging/_typing.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c79f44850e7b4cc4fe9134722d9576e4766f6061b06ee713a3a88a87f3b4b4cc",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/packaging/_structures.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a339025fc43c7f6a84d4489cdd8890e1bb8355f833da261ebd8f5eed1db2de26",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/packaging/_compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "31776c1a9484fd6f99ac7a02f3b6a7748e0b576140c14ec72cbf9e1defc28e15",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/packaging/version.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0a76e6f8e3bd0ffa9df194c5c7315c8d26af7b14981599b279aa0fbccb2380f7",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/packaging/utils.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "452865be78ced82b58483f2eae2df67eb30c14c4e607ede286cab5fa08732c4c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/packaging/tags.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "34a312dfb668fe75ab67182c0facdb5ec5e073d79d9fd9b5eb470188b98725d1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/packaging/specifiers.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b98a7d975dc5d0b7249d2e9de0deb4cad88180598884a89d78eabd027b314dca",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/packaging/requirements.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "547c9d65d93c9b7a85c517a898dc0aafbd5c9a98da9ed115ff13a1904cb220d2",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/packaging/markers.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0420b165bb7cc60cac1fcbf9a6a6cb91db509d164720690942a94d0467a4e274",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/more_itertools",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/more_itertools/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0bbb177df1d35ccdcffa268b3cf7ea7e60e8c4e7e540c24b70cede77da778da9",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/more_itertools/recipes.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "524364aec672aa2c202c700d0539af3210af68d4af48d621c8ea73fc9739e436",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/more_itertools/more.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0e565af2fe898a15707d0e731e274e03ec43134a2b710214cb156709a5280ca1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/pyparsing.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "99a86d920729de0acd003d2b7bff51d032ef067be3ce978bc2026a4fedc7d421",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_vendor/ordered_set.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "75b68272cdbb77237d827316185e6703f06b567e90f8dae329826957dfdf801b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d9303eae5343973788f9cb1b5875c58c60fcb8e62a00b31fc963a14f8f670ba8",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/upload.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "04b3b5c3b79202ab028c22d7b5ffc24554a3c05d569b2381c8654635d710f286",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/sdist.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "aa8b498c03b3ca1263ab6fa80c89a3345aceb5a4a778414325307eb04935c275",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/register.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "da36aaf7debcaedda9b91543071d476cd897bf6eee3a4f22744ff894f7ffdd53",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/py37compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ab346186f4e286ac7f3d966dd996040b18755f73a3db9e55a9ab737a560500ac",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/install_scripts.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fc22d4790c06251718da48a4edaccf327e4876d0c2ae359d52f675921946e9c9",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/install_lib.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f40a1f47e30ef6502d8f0c2eba40a9b5ea4e68910a3195b65478b2479854ec70",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/install_headers.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5d0ea27646c80dfaf59635c23b39ee55432f385a47067e9c2b45b3f6020cd9be",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/install_egg_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d245b496254c79a7648d7d197117cca6d2857a7d3b1b0ea0cb0d551d3e4a2307",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/install_data.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "62118e0308778093ea17b7a6e57034ae6a51e36cf56cb87cd28a049730f252f9",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/install.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a0e336ac3ee5fd28250113550e68999fcbba0c07e2757445ff2139412df6f01e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/config.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d9a4e3c30dcfc23301f3e6626c27b83fb07ea86d61335827feb257632c51cfa7",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/clean.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d930ade3baeee2165933445f55f5188f96dba6272918b3f8421c398c1b6fa7d9",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/check.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e6a0ed23be5c719837b0022d41679a22ef32dc5477d783b8aebf529b3e07b04a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/build_scripts.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "68ac9c2493f1dcb7d9d5cbd981225ac670f62e7bd1339589fbcc64a5d81c2ec2",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/build_py.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4bf365c3885913c3e7220a97e4e14c766b7e19298e84f410e1fda3af5b819e85",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/build_ext.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "63f4986ddf121dca6034f7efde27d59e26658d8b3570b00595e0528b6fcedc26",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/build_clib.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6e05531e1dbc78b400d86930ebc6a602977f8fba90057e0c4c8fb34ef00afc9e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/build.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d753724765005336a5ae44d9da98740401c55850b68ed4ac37b808685f8d0b4f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/bdist_wininst.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "88695a23e55f1251ce9de79ccca1d69d23796b5d3eec831c25a5ee47599d4b77",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/bdist_rpm.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8233b0db61a10d26dcab46ddab6e5c4dbfa7e875969b46d284b41a77f9a42789",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/bdist_msi.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "11515060dfd7f84c5e78ff2099d57d25c20db2e506b0b254cfd69f314d11b7c7",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/bdist_dumb.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "053babf63708a69c8fecf89abe37ec93b623125aafc5e60eda7a54c8f3ce7a47",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/command/bdist.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "db3e1eb9d465fe7ee6de51bd95e2f4218a9eb386ec9bc7347f17d9ba269f8cc8",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "969400a6147feee8560b67db484a6ce096bd5b86307b337f217fcb244b779215",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/_msvccompiler.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8d1d0933903524c9d9eb130389c4338575a05d3557b3595601e51ec42d73d7df",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/versionpredicate.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "671a4403e4d0bfcf2651673a85eb543b8a92a80dac6bb8a98d9dd010ae5ebc39",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/version.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f0da203fa34f3d0a69dc450c65c4fd73310789af9e86a3e8f2ca68fdeec08145",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/util.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5a5cfd9e80a1263cde9bd99f80ebbe29a37cb2807868d8517dee151a5b5777cc",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/unixccompiler.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "13ae5e7428582e81d8f308b83b116eff02adde125edc6c9217abf9d46fd9ccbd",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/text_file.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3ecb8025e59d289a0b495ffa37a229079fb43daf382b32d4b9c24c1516b3c372",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/sysconfig.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e73e79314ee05de71e2ff1bd14ae9ec7ed8ebdd7885c945925a7ebb6d84971f5",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/spawn.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3a64a7ab712a762b6af09e6fe715cc9994921e32e7e1ab5b59265b2fae49ba50",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/py38compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "208edd741c4e8a30bbb8d378cffe3a1d8523c184c960c3622c9a064e8ae6666d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/py35compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fac935bc122c3a01fe0286e32186cafce12374917fe78525fc3d44884f5733f7",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/msvccompiler.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "aabb802de191abcf828ed8c4dad2d0f16dba42772171879d5b31667bc0316784",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/msvc9compiler.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5fadb707dda0d2ff00dc110cf6aa517f7f7a00477f85f8e47c35154cabb485c1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/log.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8560667540b62bddbb41c56fdd110c5b71cc3dc97171c3d09e0c4b4ae517425d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/file_util.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d2152a7c8b4dff1d83562851d0c1dd03828231508e3bc568072685a7f6ba3038",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/filelist.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f1b471873a7616c6a81d3ed3b8a0f842372e87f07d3b0ff14edfe1b5926f3764",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/fancy_getopt.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "38fc69d82c478b5629fddd43f09c56e147aaf5f0bbd6d7a040569a7e1e7c1865",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/extension.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6d36f74340a87af18a62fe5d5f596cfbe2e7f2d941d3e5043ac8bd070ce567eb",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/errors.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "62bead29919dcc1a0d8b9def06d8aad1427ffd7d390a6c5275026a3966b0e926",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/dist.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "062b9fe9c6bcba215f31271116c6142ad6f99de30fb712b146d5e7e74ff57f75",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/dir_util.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5308413944dc57ae464f071ee123ee4d747c67cab72d811c9adb6a7066f46d8a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/dep_util.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1ae47d230fe3cd9464c9e989e475fcac1ff0446c642017019b5aa1e78afbce19",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/debug.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "37a32b4c0a8aea5f52564ead5b0791d74f0f33c3a5eea3657f257e9c770b86c6",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/cygwinccompiler.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f54e0902eb14ce5006265d18e674e83e443795dcec780b62c9ee37e26c09d28c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/core.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8db74e92938ad3dc62fb9eaf861c2f9f77d87612dbe4324ef2adcad5f9d0cf44",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/config.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "76d1e06e5c7d2617f2acac75f89ec9971c3f7fbb3c65b3c54228b65163136696",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/cmd.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "79ca3a2c0194b686cbb8f69fba19a02a09304512ff598f0a27861e0c21e9725b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/ccompiler.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1b6b67f50df343455435f5b52ccfa7ae72edffa3a1b6252e9ee802bfce43d4f4",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/bcppcompiler.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3890d5a425265fa1fcbffee5575ce27d5d5f731f760abd9d862521ebdf3d5092",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_distutils/archive_util.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a96fae886c187b14ef2b97be8927a5ff7d43b21c7e0aa4da9cd3caeac9f07fdf",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/extern",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/extern/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1e17fd5bbdd6022b70f5375125f0c86fa6058e62b9e8217ad5a7ddb35320d076",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7bef1324e8a451edd2b747f0d9bda9f6ee440dd4b1979cc75012492a27db710f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/upload_docs.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6dae643b279d0ffbbadb07a29ebc6aaa7be9b90bc122e6a65de8491bab40bced",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/upload.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5d3dd81557d83c0980e6a8468347ae96e53df1fb714545be3f329c38330bc54b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/test.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f8ed31ac7f1a7492935c2f1d4992ff6c0876d5da2618cfb3081e5144d7e774d7",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/setopt.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2e272a957a1c90ba8138760f36fd49d37d87c6804a0f81ce1c1d75aa6fedf81b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/sdist.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a44305d06315b9ace734ae8615a98ae064971bdfea79fd2273ccfb8c4b0f98aa",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/saveopts.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "cdaed00817108a628aae259ca0271b8713e3533df481207be33b932f8ef1a4fe",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/rotate.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4afb103dab1ecc8a233e3bcc9df92ace1f0fd14d2d0a3d1d69ccc5f2e7373503",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/register.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "924dc3c5709be655d3bea9e17f0c7683aabb8b06d49a04f25d409a068a013949",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/py36compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ef22d6cd08f5efd127c77a49f15d5c0c30b378b30531df5725794afa2653ab96",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/launcher manifest.xml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c652db8d6ac1d35b4a0b4fa195590e2a48923dbccc9a5d9e38fb49fee7029db1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/install_scripts.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a348cdfdec7bc98624f16e5c97299314e5f090530acd6f6aff377d36971ec7b3",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/install_lib.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "533e3631cb321d9023ac1e9cc3d13b073d31b1a4dbcf19ccd4f23d0818623ed1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/install_egg_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6cc81e21e4625f34380c018f575df6f24723c108c78ce594e059e00162d5efc4",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/install.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f1da0cc5e4040e82b811ca3498ed969575f3ce9f509ec18943b67bc969193c6f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/egg_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b1ef85858235b1933329dea59dd57ffaf364277d615f81d8e1970c52eef597d9",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/easy_install.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d77069534616d1434963e9353925423e3ec49c26747a9e5f6424b4b8ab99d266",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/dist_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e6dea439fadd8002d3f8fde882cb3a3c5f64f8b7b27acb9ec9cba4ddd5326672",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/develop.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "074a79761ed5ad231d11f85d504fc02655a4d94c407ac38e635e02015e7f0c40",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/build_py.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7cfecae97f154bdd83fbf8472b98ccf7dc27a928d342125cc79fbc5a9ef8301f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/build_ext.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "688fea9caf66f2550b6434ba5ccbffa768f6a487a155b49aadbe0f2470c0eddc",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/build_clib.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7d61d2146924d7454275d0560accef361a306c6f59f42657563436b92227a0eb",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/bdist_rpm.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ff863bb55033bb5cc4b8373cb6945d13fb32df3493de1dcb3d3b738a8a2ce429",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/bdist_egg.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "faea6207a7c5b66f1c412423d4b4435691b5f93d78dc3b170af5747e1d37bbb5",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/command/alias.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d6c2d0c5970d87a7434290e69b81bb506193a25f379d8d4d4cf98d05b9b6b222",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d1cdb7d8b47238b19d2fe6309a093cb8cb9bc7b236d70fa2c495a24f48d02be7",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_imp.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1e617dd486e2b517ec0f9cfe838ff099cb87f916a1c8838d6cf82208e160b730",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/_deprecation_warning.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8d4f7e76d7efe9c2a6b5024e5cdf273f59a6ee038dc3990a12d88fb5bc276722",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/windows_support.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e46adfa923f6f9d2c6268653ab683a7422a4c90c716b69f92108979490a86041",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/wheel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d0ff2d4a4d74e6e17f51bfb7d0dd875365f6bfb30a0d2763a5e4254515b74a42",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/version.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a20fdcb9941bd1023aba429915f6563e5af51e02413cf9f6bceda6fdb23d6531",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/unicode_utils.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "68e385a38246c00b2206db46603b2a152ed8a9641e6768fa0d6882b9cb51ff4d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/ssl_support.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "08f53fe354bec7657aa8eb8436bdb042c392c651ef240a173b1b803dbaf18e93",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/script.tmpl",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5864ede6989eccedbb73e0dbc7a9794384f715fdb4039cfbf3bda1bf76808586",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/script (dev).tmpl",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "454cd0cc2414697b7074bb581d661b21098e6844b906baaad45bd403fb6efb92",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/sandbox.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "222af199e0876e5d421d3ee910f810ead4f1f7053ce789fe776a7cd12bbcb797",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/py34compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "29839deb26d1c63056f0d266603f2dfd4cb2566caca69157a87a452ddb251975",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/package_index.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0bf1529ca9bb599334c1eca9359353652f62f48ebdc2d97707313ea917778d20",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/namespaces.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3cca8654f5cf610823513bc483d6c671c440908383ad0e8d9ac0e0fdfc04af02",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/msvc.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "dcb2edf77f1ee8e47bc163f322f090bbb2c25994882aaa0a57ac37afc8d5de46",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/monkey.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d1edc77552971cbe35e4eee7a7e014aa11055cf3ee0dd24a6c8e3b72143f0c4e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/lib2to3_ex.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "60a03b0a6748256c32d3ecae640c548283476d71664f8a79de235a7567414029",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/launch.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4f23d3f887354f612762f18edba81f3513f8cac065ae1a5b4634315ac88ee35e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/installer.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8db85bed9564355fdb4943207e72dc670d081ebe911059ca178a3bff526ac66d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/gui.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5c1af46c7300e87a73dacf6cf41ce397e3f05df6bd9c7e227b4ac59f85769160",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/gui-64.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "69828c857d4824b9f850b1e0597d2c134c91114b7a0774c41dffe33b0eb23721",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/gui-32.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5c1af46c7300e87a73dacf6cf41ce397e3f05df6bd9c7e227b4ac59f85769160",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/glob.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d686636df8c01d25db81d852b91e98194f232a86fd2fc36d126058a9c3d32d89",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/extension.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "34c338e978cd7557a559e99cd31f02c95280e4ab3a666df14d6480d924bac593",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/errors.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "31539cbf7f351cd49a8c3804516cce43827a0790470813128c77da59c130035a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/dist.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "41565bdb2a608535c5bb3ce9ef9dcadf81f229410058232f01e6120682db0e59",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/dep_util.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "043c75064ccd427b6f001e1a972a476d6e54541ce3aad86cd34d0fad42f866a7",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/depends.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8877d974b7650aed81965485f5b460ecd534a2a6cf58c1fc9639b806ec100d8d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/config.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6bf4bd76a6f9975f2f96a7b906b537d37a99e9e1686a00b93d98d8c11617fe6c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/cli.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "75f12ea2f30d9c0d872dade345f30f562e6d93847b6a509ba53beec6d0b2c346",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/cli-64.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "28b001bb9a72ae7a24242bfab248d767a1ac5dec981c672a3944f7a072375e9a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/cli-32.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "75f12ea2f30d9c0d872dade345f30f562e6d93847b6a509ba53beec6d0b2c346",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/build_meta.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c7b148d543ca08ac41052a295e871f1839c96bdf2b40ef1ab4a5d2c09b5d89df",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools/archive_util.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "99a2436e8cd16c37923f0e77553d1c6ff212dd6d00a7bde5251f2d5fc4590f1d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/_vendor",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/_vendor/packaging",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/_vendor/packaging/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e9e9dba795e045f8c18ec23df9b9f4d078c77f94c7db53c330e2a4256f31c3ec",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/_vendor/packaging/__about__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3cd32c6999f851c087cae6e044e1f56e5e8296e76e3e3239905ad2a7f660925a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/_vendor/packaging/_typing.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c79f44850e7b4cc4fe9134722d9576e4766f6061b06ee713a3a88a87f3b4b4cc",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/_vendor/packaging/_structures.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a339025fc43c7f6a84d4489cdd8890e1bb8355f833da261ebd8f5eed1db2de26",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/_vendor/packaging/_compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "31776c1a9484fd6f99ac7a02f3b6a7748e0b576140c14ec72cbf9e1defc28e15",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/_vendor/packaging/version.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0a76e6f8e3bd0ffa9df194c5c7315c8d26af7b14981599b279aa0fbccb2380f7",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/_vendor/packaging/utils.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "452865be78ced82b58483f2eae2df67eb30c14c4e607ede286cab5fa08732c4c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/_vendor/packaging/tags.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "34a312dfb668fe75ab67182c0facdb5ec5e073d79d9fd9b5eb470188b98725d1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/_vendor/packaging/specifiers.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b98a7d975dc5d0b7249d2e9de0deb4cad88180598884a89d78eabd027b314dca",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/_vendor/packaging/requirements.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "47c2b81f8c57fe20f82efa46c35537a2eb8f6c637ec33b05803edbae100cef56",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/_vendor/packaging/markers.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6129ed4243272b2c35fc51baa1134d9c6c4b2fa6c0c5c1973adb8513e6134b79",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/_vendor/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/_vendor/pyparsing.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "99a86d920729de0acd003d2b7bff51d032ef067be3ce978bc2026a4fedc7d421",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/_vendor/appdirs.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3227af504bafde5fe6408487e52174b210e4fc13611c7cd88803eb4f72133782",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/tests/data",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/tests/data/my-test-package-source",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/tests/data/my-test-package-source/setup.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "32b7b39779eac646248c26292319a3861838011f21822e1065d1189a4f88ed1f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/extern",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/extern/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "dcf8b1693f53cf3778368c95e8256119ded2ffd67e539caf31601fb592af0ba9",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pkg_resources/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3f73cd377fe6f0926b60ca7e8be4aafb7ae12b9bee562aaa8e7d545ca1df7bb4",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip-21.1.2.dist-info",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip-21.1.2.dist-info/WHEEL",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3aa464174798e461ecb0ca2b16395b4c8ab4ef6be91e917ad1f21003a952f710",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip-21.1.2.dist-info/top_level.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ceebae7b8927a3227e5303cf5e0f1f7b34bb542ad7250ac03fbcde36ec2f1508",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip-21.1.2.dist-info/RECORD",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9a16bca4afc8289b1ef9ba921812984bf128ccdd8d4471b6b7754c2de17b5531",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip-21.1.2.dist-info/METADATA",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "cbb3214af4af30eb6e82c9e42e5860e79e97d0a7c0c1b49b42d58891870fd749",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip-21.1.2.dist-info/LICENSE.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "23a7361c2b1581028bc623b9da2bd24997abcaa4781ace6ad444a37944f8dae1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip-21.1.2.dist-info/INSTALLER",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0b77bdb04e0461147a7c783c200bc11a6591886e59e2509f5d7f6cb7179d01ab",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip-21.1.2.dist-info/entry_points.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1ed7c33b0a5496bf6cef78ea2d0eb017d574ff4aaf517270081cfb570c7451ed",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/webencodings",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/webencodings/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a8e04922e3f2ff8072607e96fdb360245faa610d83a14f9d2ac0eee724560978",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/webencodings/x_user_defined.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c8ea9649d9a9cad19f52087f67a258803361a1cf81007cb279e4f5e45af8dad3",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/webencodings/tests.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3ad18bca384d6357ef916d46bcb27f155f59a2a0bd027ca3afbab79314dbccdb",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/webencodings/mklabels.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "19821ecb09e968b9cfd064a273c2c55a0774515bcefe5d4d73a62817ef3b47fe",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/webencodings/labels.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e003bf2b14dd76a1adacbf67b3b9003e36f409c37ac6c088c5b2b7ec763daf71",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/util",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2449929a6aaa2f26b0f0fe75814226661f06c20f62d7349ef83a2a022b67da77",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/util/wait.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "dcc50a452014243076b60728eea454b245b4cd7180598bd1444e10d7feb194bb",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/util/url.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "28fff26870344c5140b1048899cfc53873be5aadcf3477ff6ca39b29cae0754e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4126c150d381f7287a0270e7eb54ab2d0d21839a33d08f7eb97106f75009b888",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "74a707facaa247f1125aa28fd4f27a4940144afa82f9f90c406ad3a2457834c6",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "bce3823d19fe74e0d4676aad3027d2b5bd099a382b80968a2ea27daaf2ae705b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/util/retry.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b3764d2973bafeddb7650320f3396edb43cc4aaada4f8f79f92fe6118ff5f5a9",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/util/response.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "189a60dc4822f6a6895d1c01879c2ff8c36e4566a7e4122ee34a117a8c563f6f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/util/request.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "367cda10a4353dabb0e4c14c57a1e68043072137f402e6bd7d0bb38b6b99cc67",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/util/queue.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9d1817f3f797fbf564bf1a17d3de905a8cfc3ecd101d4004c482c263fecf9dc3",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/util/proxy.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1468a90049ef66d7b295d5cd8dc7b80c407b633c14f9ae657a9f32e52d2a1d08",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/util/connection.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fc8f99a05e7cc572cb8e8f90e4819a26b331cb6216fdec48f0af4ef69abba29d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/packages",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ce9a5ecdd1107691ac61eac8ea657a31f518cb8f79255e2670e582fc681b9635",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e9d67eab4ef883b5e1b09dbb3050a091cb7c895359077b0c66f2a17fe294572d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9dbcedde2d1a80f54fd3b8eaaa08e16988cc9ae022fd6e44d04cb0662bd53bc1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/packages/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "87804b843e2d2da071d5a75a0ed2977eea6c82a634c162d76ff7f5ff256557a0",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/packages/six.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "69dc78cfe78cfc3d15beed0822a573140090feec7d97ae32ec391211f6f1083b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/contrib",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "96021db12c9ca9f0745e6e41889cd719e20a4fbc9b0903053c902091cc0f6b5b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "791cb5323fb0a60eec47af8e4af9d25788d46e3313e3ae1d2cdfc25b16c8455c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6c36f2384856d8228b25c42a00a032ac41cdf9a925b321c52aaeaf17c645b269",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0dc463336974ad0308ca162b37aafeb6756463a6530f11c994cf3fbac0241820",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3041076b762a1bc89f0cf606d203b5d82d6d66ed88f87a86178942e7770714f8",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "92a9bd497e21ffa87be90c060c188d43b8be92d299ba766ec734d58e3b470eda",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e88f79875ffbd5fcf19a831236d634801f259f20a856d3ff0e9a851a3d787dd5",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "966f3a5e368e23b6a36e89ec37424b0347249204855a183158a2d6fd89ade2c2",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8f7cb31c86e65bb092f8829027df8f3d07ff60a3bc10e01ecbfacc5b4511eeeb",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/_version.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d818e4fdc078f7ddb53d3bdeade5a9f194773612cda02300c874863fe39eb0b9",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/_collections.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "469d6657206073f52501ca7a3376add6c909057479278dcd6b0453bd6da0fd76",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/response.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "846846061ed3904921fc8420e42d56ff1b8f36b8082afe415173f213eab42ee1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/request.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "645488a97d02e968b38b179c0a1677fe8932bbb044bf4959bb5553d2cea1e123",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c21ce55fa51312038330e0b2d190cc50e351042cf9c3220cf19f68a57018f8b9",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/filepost.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e5bfeaaa04475652fbb8bb5d018073061f861e653901f255b7fd8dd174b73de6",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/fields.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "92f2c30a0fc9987d652e3514118fc52d2f14858ee106f0cfb951136d8f2676b3",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/exceptions.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d0c9e7a372874cd7d745f63beb7f0db9f38f9146fa9973a6f8baa3fb8c76c3c0",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "20aa1eb89658f580189b418ae2af8c5c08725d6d0cfc59ef69b61a36c0c847e1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/urllib3/connection.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "abebdffd333733245b65c167dfe5422990527f4a048468efec115e666ffb930e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/toml",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/toml/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "918818cde861531d5c72db2ea6b9a310ac2749d990782e77713c62ee7c50ae4a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/toml/tz.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fb9be0f30920fdab67562d939c4bde7b121513b4ff171055afffb65957ced680",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/toml/ordered.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "516b791246bdd0859505876f2e06393d79e405c558a478e7c3d4faeeb33ce53f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/toml/encoder.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b417bddff181db52b9d939526cc898b867881971fbd05d96cc083e9487d5a24a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/toml/decoder.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "75e0cf42aa63f76486ea902dc0b6e0287ac8b25cbb840646f94ea0db2ee1c867",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/tenacity",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/tenacity/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "eaa4a33760490edf3ae1bea7c45a1a9696c22d01e20f68980259d44bd756492c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/tenacity/_utils.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5b59ee8c7ba6d5ff62e114293928eab10a3dfe642d694b4dce75c09901ec2f6f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/tenacity/_asyncio.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e82e127eff4839461fd7ed2fb88a04e8e19b989ac9cb01f4f98b25af199bc4ac",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/tenacity/wait.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "140a087c851235fe4e589613ee7863142d2e3958a31cc05de7a0094722cddb7d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/tenacity/tornadoweb.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ab75d95b603d464cb50615106cd1c5eb584cd445d0e7b740ef0c4f9e548ec77b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/tenacity/stop.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e1c8d27bf60f49ac33ea223e4010cdd3115f13fce52af8e1170c76d599720f61",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/tenacity/retry.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c6c90b19ad7912c3613cf3a621470a4bb0aa8da440b56c4614d3cd4638f3f545",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/tenacity/nap.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ed556e74e4e6bafffe0bf5c996f8c67201db57afc0d87973ca6697bbcbe3d5df",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/tenacity/compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "747a272642651f00f6726a8bad81d85344ddce6d9b9f5fbbe90652b7a3827a6c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/tenacity/before_sleep.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "95910c1cd685466742730b3732887810e67dcdea38311c6c91d894b9dbcdbaf6",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/tenacity/before.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "07da405e7ebf27550acf04cbf6716d4693a1360f2ce6f1928b86ea9f1e3e95a0",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/tenacity/after.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "28d222d964fcdebe1ea80dd069730ad735d0ce46cb8151e3e6e45a9d8e8769b3",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/resolvelib",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/resolvelib/compat",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/resolvelib/compat/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/resolvelib/compat/collections_abc.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "bb2f31519f8d0c4c3dd7ab6e8145e6f0783008688c3b47fe45c767a647d77ceb",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/resolvelib/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "41602a344ae3c6a10c2a5f8051c717cf5d1a08a5663be5a65afc5497740e9456",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/resolvelib/structs.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "67a9b80a42899561f864829e944b0a35e66a293bf2bb1e21a81373638919ccba",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3fa6aafbba58e44ef344e6f4cd4516a85207100f4b9b4316b31fdb617cd48370",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/resolvelib/reporters.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "850bef5eeb8404ec8458ef0a0df2ec58a5635f9e5414c014c0ed1864c369cc0c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/resolvelib/providers.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6dfcc50d977b52a924012ee550cfc77986c0f87ce329f0e595efe99ffefdbe2a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/__version__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "93827c735c85445cf0196c2537b9a268339c945b5b708b351a59e64f5ed86d74",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "89bee74630da75b08c39e5f6b0c40b71b5f3cbdf361e82916362c3fe05aac0f3",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/_internal_utils.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "671dcf9c451c7327ec07e89ed759d95405bca82949cb4831d6a34c13bae04f5f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/utils.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fcaf4082437a79f3def9afb3819bab5f376ce4f042d02cc39328c0136a024054",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/structures.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9ac02dafd9aad49c4777e251ca220b7dd165a5b270bef16e3f7adf5104ff4311",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/status_codes.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "813efd3dbb3f7108c1829f9fbeb520835767d8340edf66c38f84c89e39cc3d27",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/sessions.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "06c9d1fb36082e0a05cc9eb2ab84fc86dfe2d0fc303c6540c56c56695e5d7078",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/packages.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9e32665627d8e1a49cb6e5b73cfe441510b18c4c0c4433ba27f7de1b674a5ac2",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/models.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "52491a56e535b5cf81298078d5d76cdf9b1a8aca13a5a609d980421591047e13",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/hooks.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "411786cb2d1b45caf9ae4c02b8e6cd6a46d8b1cec492229e0701b8a877a4af64",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/help.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4893d57285dea3b29f2b803124de5e1554028ebd229bceed5369fbb9b2ec92c5",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/exceptions.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "77d7c9270f1814107d5731bdaa1bf12ee3b1e9b7b773f0f06dc93e75550401cb",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/cookies.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "63e6ca5fa4ef5b716762513a02ed125ed55559c68d745bee030431c3e1b48932",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2d05ae091e2a5e4eb0efea90a295f2cf458d1d47400f8d24d262a768011fd7e8",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/certs.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9d7455abd0ed1a6bffd4061bc234eef54ae001c749bf4e59be435e6a82ce6716",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/auth.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "38ca092152b244bcbd4c7afdd72f2bc72b19b9c9703c1f8ad57835cc1a265214",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/api.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3e51ccf874f73d0e65cae7e8786995fa7271462ed49d4c86561ece57b07d5d5e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/requests/adapters.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7be6e6284029355a85772971b8c2497e2687765992ff3856848304ce51ef1ae7",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/progress",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/progress/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7dc6d0417a399e9d82a10ca1487e57a6b9227302d934b78f477b886a1ce748ed",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/progress/spinner.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "93c25b0d6f784f4f965ee5dfc5920585da0d3d8a778df9e95ea0677d1bf97c6b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/progress/counter.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3339f206bbcf5ab3a519ee0c64094651bf6adda3837bafda35878013f54da180",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/progress/bar.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "42e0ee54d7265e0a71b4db713b416aef6c4a8a0c4005a566c58181c3827767f1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pkg_resources",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5e91817ef4bd7da7c0e9b9b9af1eef9f1771b3bcaaca873f367a73280a6427ae",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pkg_resources/py31compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "09193c7e488f4432ec6e2e6965c2ac1c8fff3db9a1ffde0bf26afd432f406f65",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pep517",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pep517/in_process",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pep517/in_process/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3325a8022f091dd701bfbc97b96a544950036f1e8b481f6b661ee44c881d03c6",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pep517/in_process/_in_process.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5eb28e4d44497626b947b8b78bf390992f3d2c04855c4dc74177d7eb7a990481",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pep517/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9a3bbd7a51472c4509db7ad4e59a5d8fc9d139d634563ddba78660bc14ece9b8",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pep517/wrappers.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "41865f3759d6a2ae19da4ad8f945f5e092c0c6474dc2e8d88d119feea15cf75e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pep517/meta.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f269cce650e74f8cd742905396225b4467deb07ee28a81f0a336c3c402cf4bd6",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pep517/envbuild.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b332941653b9d17d5a8507d7c33e210fd576544fdbcfd30b54f21e89db05a38c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pep517/dirtools.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "da69009002f4991cff7a56058d12ae7a44c9562a47d734e7e2d6dfd440debfce",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pep517/compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "33ee6ce15369f2b8f24fbe9967f89b9cf0f8e03615cd2425c821076b28ed0cfc",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pep517/colorlog.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4e4f40b989bf70b17704a4c1a124c9b7d6d1af29f4685a232103b06df5544f14",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pep517/check.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f0b24bb5f67df7301c578bca2756bea1d331836b042260fb44c360fc4adefb56",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pep517/build.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "678f4299115a7d7ecd8e804ca1d8a26f04186bf118cf7134177d5bec3e5656fb",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/packaging",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/packaging/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e9e9dba795e045f8c18ec23df9b9f4d078c77f94c7db53c330e2a4256f31c3ec",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/packaging/__about__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8f807b20c312aa95276337187791f95999482d77af0fb666fe7f658ff4d1393c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/packaging/_typing.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "560034000bec73deca0799c5f3dce8b9d3b208c12c57b165697cd96d8a849330",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/packaging/_structures.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a339025fc43c7f6a84d4489cdd8890e1bb8355f833da261ebd8f5eed1db2de26",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/packaging/_compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "31776c1a9484fd6f99ac7a02f3b6a7748e0b576140c14ec72cbf9e1defc28e15",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/packaging/version.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b7b169b192a60e770c9fa106dbc744bbfe4d05951af7f1d5a221be7ec0e8de87",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/packaging/utils.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e6f531c025584a668d24581deca682069c475d037cf4a22f44bbc2b03cdaa349",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/packaging/tags.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "04c10bff75b713c9d72bf017016aa695871cb2fa339c52a44c19133d1e3c0c1f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/packaging/specifiers.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "45ac50f892b20aa2394019ba803bdba19d8aea38cb55dfa9c6ad24bd87f6f247",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/packaging/requirements.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "307a9ffc52a28470b4564381eb6654754c86f289042fdec3e17cbf8cad72152d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/packaging/markers.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f033a7d5cee867f0f248194ba26ffda38f46ce86d519837cfa4a4afe7b23f284",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/msgpack",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/msgpack/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "da027072c4c8680b4233418c8b6ad4fbf63a9082de790baa464ad0db68d200d7",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/msgpack/_version.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "745474de80029e3e25b0a775467c03ec13cc89523f14cca074e2f54ce044c3f5",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/msgpack/fallback.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "469bf52dd7b2f1ff2e7919d0ce70f80112819fd7713363f2c153645c8f0811e1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/msgpack/ext.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e25df9e98e2c54472f0a56b6761fdc2f9eef87818c8597dade4b961c51d8cfa0",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/msgpack/exceptions.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7424d67a2f1da64accb100dc8d093be004e5f47b08047d326edf3338f36a3187",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/idna",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/idna/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f4db7bc69c9eb770e63ab3d41a8a03740c261d966ed6a500cb611a27dde41a24",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/idna/uts46data.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e0264407a65082648d2004c19f657fc5d5bd3c481539700e611cc27901ac2bf1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/idna/package_data.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "931a6d16f799dfbcdb3d298a53b28c100f0f8bb877fac335fa9d9a826d8fa422",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/idna/intranges.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4d8d65a7164841610fead36a8d9905039860a0c58e8f53819a7506f22853f3b1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/idna/idnadata.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "725e31f512ddc3564cb4411bbcac00b17f8877701d2233b95371daa0a33a546b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/idna/core.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "55d1464328a2b7578c294436c7498d5e819386b5e5472a74ef498f0f22d7f588",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/idna/compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "83eecf878e67cc82deffbc6fc5d6d379bac766ae26416c48387d6b8cc73ac6bb",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/idna/codec.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e1154c86a16ab898321812b2978d0046a7200f39030d7654bf297510e0912c51",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/_trie",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/_trie/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9ea7e03bdd74df6f411152794f8a6c57042d8ddda2272117436f97f1cd58c705",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/_trie/_base.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "09ac9b63232ba3cb844506236f2dad4de4946ad9d60df5aba1437d37b7adcb9c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/_trie/py.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c179902eb6517f833258dca0d26de1f359bd22784b47b189d34da6208661fbca",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3813ed7354d4e661b2cb5f100ccc4a132604cf4c3115450d8f9bf4f978266216",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/genshi.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e03d8f1026799f764ddeabb78cc97dc98ec1f358e7400a414125657da22e61b0",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/etree_lxml.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fdbd0b01558b715bbd59a53ffb0dc3f1fd08452a426e37faebb57edcd45d853c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/etree.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c68d4be66f55b647e91492b4a459a42d56a386a618562b15667de4f646293e42",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/dom.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "107c8547c0fc958367c8353d971fc82a2815251c9e7141ae6b498e8bb1c1ba47",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/base.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a2e88eb2e4b3bc8d0a8337563fc3e5c4869236cf5f6a585b8a29c011cfd42096",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "032b12272bcf7e290230cb1356f6b1c2480389e10b0f975f47c149200baaee16",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/etree_lxml.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f60a838ecf88c6c3e10586b9729befd85675299946f371a2baccb69459af2241",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/etree.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c39645a4a93a6c0c67af00f6fc1ac5e44542eefcf3d0bdcb322f52c6b6dcffcc",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/dom.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "db6c216f40bbd735c8b1a8b999a9a0eaacc11228a070122f683cb802cc376add",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/base.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "cfea39d6fb7daff9762031b9222a1338a1b36677b8172dff15cfbbcedace8782",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "034ad8e605c87b86c93a248644efe3fed1619e04413bc4193f33ed3f0e5d173a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/sax.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "04a4bcc284139ca8aa79f7c7b310a152a2f8ab6651ff06f97dcf4c277cd00bcb",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/genshi.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "087dbba40b032a6bb864690052bc2dcbbbb429ab862c26512cf33368edcce6fa",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/filters",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/filters/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/filters/whitespace.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f1e5aa671778502e33945196ea2c98e9ffb6bae4fca4e09200b737219b7bfede",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/filters/sanitizer.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9baa069a40619060279f69d5e83e2113bf12099e961272bdaca759077b970487",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/filters/optionaltags.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f25593ef927468138798f81f9aa4c749f3e93cca74d53f3834abb409179dc5c1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/filters/lint.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e4eaae7ac58d288e261fbe974ff8e6529bd793a9c01d46a842a0f22d7a63d80",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7a00d75041d79801bde74e31cf42ba00b0e0624bd4ac2daad7961455e3655508",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/filters/base.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "cfe214f590188e9b15b2a995b7b92e582eb78d1d7584332be8256bbee6a8f16d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "95589973624c09c9578bfe6076ebe6773ad1c6d3b95e8f4e3676c70550acca45",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "058cdc282a9e1228b9db10eba8116bba19e6b66922b875c5c8587e720950f269",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/_utils.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0f1f402a7b64b118c54f5bde063ec8dfada97f93a021a4f4ce0970ab8dd19df5",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/_tokenizer.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d389a0036b0d4e78aeb65d9fc45bfe7a2e5b9ece2245a3f15575c787f1eb57fe",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/_inputstream.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8c4acd012325920b3b32938cf557bf55d2c3272145c1e0232ee855bad673df75",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/_ihatexml.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "89f3b017ba57aa6c938485dcddba1673deace0c0decea46b455a7b1700d8505b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/serializer.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fcfa6f719174edcc04ef1afdb8a919aa1e5fe1411a23c96d094db13c9cda4e99",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/html5parser.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6a7afe697adefc899fae4437e5cfeb7ed297c42f34bc909110a7b4e93ab5e470",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/html5lib/constants.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2e5fb2ccb53f8dc8f2008fe1e7bce4a99eda416139b79c40e32fe3420a14521c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/_backport",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/_backport/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6ea4bf753387eae5bd88681dd2ecdfa4f8e8eaf678c693d9ee4c9f649daf35ac",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/_backport/tarfile.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "221a7bad745c8db20ac3c08e9bdc1278f57d0111976d217d8065c0327d90f8a5",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0501c595bea9b9b0a5fddbd3d4d8edcc8b61ca5a1f8ca8aca31db7f6cb438345",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b3064ac6af516397bdaf73d70ab96f40f32cbce7625990531cb11ba92f0b24b5",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/_backport/shutil.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "217fc6d8d3eac1e70989b9080e37b4e1baaed31a4791f490d8668674456a3396",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/_backport/misc.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "29679c20d75b14d3b148e3f57c617af340899da0ba4b87c146012d6984f0d228",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "def780936acfce7381da0b0aead8db6e1d1340c9861393fcd9e13dc17aba3489",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/wheel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "bfa0e7c13aa1347c2b11516bf3f61e8935ba1b87ed3ff7afb32c0d82b99d6f6a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/w64.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d1a473a0dd813bd3565b810dcb8ff8bc7907478a994c564d55200925894e0d32",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/w32.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "949b6765d794c53656c9afc45b90d9a2cfcae6bb30444086b29225f19242217b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/version.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fe7ec5ea3baf40601c9fbebd13f4876bb7ce71fe44465115ca627f1233d1c06c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/util.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7f68d908fadc2c2b7a2dc9c2d20532f85babeb4b570fcade03b938ac3a47303c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/t64.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a00a877acefcad45953343ad56a22152f7aaba5fcf2a10215d84169d47fbcd1d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/t32.exe",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "352df104254095ddf925514d99bfb5411c95b5386e90caf06557979f82e16844",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/scripts.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fcc023dec32ebf9ea4b8cf05b222165ea6d3d209ae98f19a391fdab4ece7e1ae",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/resources.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d851afd191c5d782978cb2252f447df7597241019c7b0392e2627ee67f895677",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/metadata.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "cf628fcb7877b5c0e76fd5ecee702a4393b3d1baa358050598a59c14a468a1d8",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/markers.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e807377027c504445ec621125883979a0f9aa483fc9767ac69f3525f728ccbef",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/manifest.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9d0121626828ade681673c85cf062c5f124046eddfa38124ba7535eb7535ea21",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/locators.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "73d13870311a709fee29bb84e41a805687285a9eabb2e0464e488d0d0ab7cd5e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/index.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4972b3a5008445cb71603329fce2de7b67f42747b5f5984674222832551f5103",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/database.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2a5d18bcf40a73839ca558bb939705ce2c9d335c4e2bc8aa7712c65e06d91d5e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distlib/compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "003039eb1880c5aaf7994eaa7a694184d6ecac53e8b174613b8e11cec6c93ea9",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/colorama",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/colorama/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a42744aebcb32d2cc35b93fead13c194f2ea6c1b4844d241e9c320a1e267b399",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/colorama/winterm.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "db2ff66fb66cbf7e1f780b0febb98b39573e060ab9d667581a8e7bd55a6b96b3",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/colorama/win32.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6c9f0897d8f0681379049f1b98de85a18675418b8c2afda3f1f1ab5e1ed3263c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/colorama/initialise.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3e9ae8bc3371313aefa0d1c570bd8d663a47d97cc373c04bc4bc6212b7d49789",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/colorama/ansitowin32.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c95ec212609bd7d3239c928e0d9104bcc1ff7e76c98709e9ce8e2cc59b865e60",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/colorama/ansi.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4e8a7811e12e69074159db5e28c11c18e4de29e175f50f96a3febf0a3e643b34",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/metadata",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/metadata/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/metadata/languages.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e35b4bab778b4ab0446c455542954616af4aee8d659fd6f51e9635974842510a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/cli",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/cli/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/cli/chardetect.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5cae73aa3506d9ae3ecba78b1d9f13858729e96594add96610bc4dca971cd921",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "99665a5a6bd9921c1f044013f4ed58ea74537cace14fb1478504d302e8dba940",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/version.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0380882c501df0c4551b51e85cfa78e622bd44b956c95ef76b512dc04f13be7f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/utf8prober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "21d0fcbf7cd63ac07c38b8b23e2fb2fdfab08a9445c55f4d73578a04b4ae204c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/universaldetector.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0e96535c25f49d41d7c6443db2be06671181fe1bde67a856b77b8cf7872058ab",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/sjisprober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "208b7e9598f4589a8ae2b9946732993f8189944f0a504b45615b98f7a7a4e4c4",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/sbcsgroupprober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "86a79f42e5e6885c83040ace8ee8c7ea177a5855e5383d64582b310e18f1e557",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/sbcharsetprober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9e6c8ccaec731bcec337a2b7464d8c53324b30b47af4cad6a5d9c7ccec155304",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/mbcssm.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "498df6c15205dc7cdc8d8dc1684b29cbd99eb5b3522b120807444a3e7eed8e92",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/mbcsgroupprober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "87a4d19e762ad8ec46d56743e493b2c5c755a67edd1b4abebc1f275abe666e1e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/mbcharsetprober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "011f797851fdbeea927ef2d064df8be628de6b6e4d3810a85eac3cb393bdc4b4",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/latin1prober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4b6228391845937f451053a54855ad815c9b4623fa87b0652e574755c94d914f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/langturkishmodel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "adfc1a9d3a6d4f04b2704e3e3fe41ab0f9b377e5d56207afcadce3944cc106ef",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/langthaimodel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "475c171e750cb5e8e9c342671ff24ef177586ac304eb08d5aa9d733fb4ca2e08",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/langrussianmodel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4c7a893a14b189341c1dba03352739ca87dcda4a175d01471728edcae9ed51f3",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/langhungarianmodel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "46d247ec365db26687ab22b8e8a9269e4e70407889c093cf252aaa225a5e6517",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/langhebrewmodel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0f33cfe933c61bff8f57bb6ab29bbf77c76eb9eaa6eee37ee5e434687530d468",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/langgreekmodel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4beb8d4358a10bbe72841bd2bb1db880b159bf743272d3300ba3b12c9757f9bc",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/langbulgarianmodel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ae4f42269bb13b46ce6dba0972fea03605aea2c61999df2a10476ce72ec34bf6",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/jpcntx.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3d894da915104fc2ccddc4f91661c63f48a2b1c1654d6103f763002ef06e9e0a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/jisfreq.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "be9989bf606ed09f209cc5513c730579f4d1be8fe16b59abc8b8a0f0207080e8",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/hebrewprober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "737499f8aee1bf2cc663a251019c4983027fb144bd93459892f318d34601605a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/gb2312prober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "806bc85a2f568438c4fb14171ef348cab9cbbc46cc01883251267ae4751fca5c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/gb2312freq.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "257f25b3078a2e69c2c2693c507110b0b824affacffe411bbe2bc2e2a3ceae57",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/euctwprober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d77a7a10fe3245ac6a9cfe221edc47389e91db3c47ab5fe6f214d18f3559f797",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/euctwfreq.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "368d56c9db853a00795484d403b3cbc82e6825137347231b07168a235975e8c0",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/euckrprober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "32a14c4d05f15b81dbcc8a59f652831c1dc637c48fe328877a74e67fc83f3f16",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/euckrfreq.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fbb19d9af8167b3e3e78ee12b97a5aeed0620e2e6f45743c5af74503355a49fa",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/eucjpprober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "883f09769d084918e08e254dedfd1ef3119e409e46336a1e675740f276d2794c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/escsm.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "46e5e580dbd32036ab9ddbe594d0a4e56641229742c50d2471df4402ec5487ce",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/escprober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "924caa560d58c370c8380309d9b765c9081415086e1c05bc7541ac913a0d5927",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/enums.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0229b075bf5ab357492996853541f63a158854155de9990927f58ae6c358f1c5",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/cp949prober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4d9e37e105fccf306c9d4bcbffcc26e004154d9d9992a10440bfe5370f5ff68c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e34cebeb0202670927c72b8b18670838fcaf7bc0d379b0426dbbedb6f9e6a794",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/codingstatemachine.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "558a7fe9ccb2922e6c1e05c34999d75b8ab5a1e94773772ef40c904d7eeeba0f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/charsetprober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2929b0244ae3ca9ca3d1b459982e45e5e33b73c61080b6088d95e29ed64db2d8",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/charsetgroupprober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1992d17873fa151467e3786f48ea060b161a984acacf2a7a460390c55782de48",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/chardistribution.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "df0a164bad8aac6a282b2ab3e334129e315b2696ba57b834d9d68089b4f0725f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/big5prober.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "901c476dd7ad0693deef1ae56fe7bdf748a8b7ae20fde1922dddf6941eff8773",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/chardet/big5freq.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0ffccae46cb3a15b117acd0790b2738a5b45417d1b2822ceac57bdff10ef3bff",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/certifi",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/certifi/__main__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d64dc2afde6f0b1c464460e58eb5b7c0c76965d2f73617f4bb59fe936a9db026",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/certifi/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4ac99d9851e31c263854bb6ac29a7d3ff8ec39c02e1e3fb97395aaa04cfea058",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/certifi/core.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "80e15dd331d8971e24aeb2c49fdf367ac3ad9b3ddd8e21b40454838608e5bdc2",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/certifi/cacert.pem",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "bb77f13d3fbec9e98bbf28ac95046b44196c7d8f55ab7720061e99991a829197",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/cachecontrol",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/cachecontrol/caches",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fa01cd298bda783d243a4e4cef878eaec4a020a52d0ba8ba19f6e6ba01b0784a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1f17a5329342a3e758af67e2243c0cde1861466c5462d079b579b51a90004f86",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9d854ab09b5787a8095ef767d625b2ae1c6f930a50acaf9e2a8311cee8b090a9",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a49b40694c4eb0c3e7cad2350378ee009917603afc92b7529ec838620dce0448",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "511184d0aac0f3b41e9021b74863dab6548f4f9ef57594c38cd6be6575f7a437",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e4b5f4b89c2435052d612130dda1a61aef5663cc068a977cd6627c946d1dd0ce",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "bc86b88efab8c7f29238b74421e7689275f669760742e8cb0c5578f85db50e7a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "045187277c90731bd98b37e8f742cb674e13fd9e574825ef168b6ba7b52cd2c7",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "bc008a3bc2e5ceefd95b28d5d45c67d4c0384c653ad0de4ddc64ab0057406364",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/cachecontrol/controller.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "096117de979d20cf6ceb4b2e7f8cd93ed9bf26f5609efa203062bf3a2046e45f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/cachecontrol/compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "90736f31176deacfd7c2aabff6a266afda2edf060c38c50cc4f3dcc0dc53f0c7",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/cachecontrol/cache.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d5f738c093fc1d8b75c9c9c95de130e690a97812f60aac71ea0f456f40180d64",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b12c1a49877ddc821f085538b4e3204a8e9bd8b0adfe0052690523f24b4914e0",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "802ad0c0f058d8e64179e76f28e2dd459dd6d4b21133ad1f1ba7789a05bffbd6",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/vendor.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c9a376a8b2e42aea119852c2c462752d9b598ae57b4fb3688ac66ac163518485",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/six.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "53867fcafe77e16e423728d8f62f15d4e5d8d928c09f2f32d8be6f0cb8614e13",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/pyparsing.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2756f8cf74bf2b0c895bb84a1a7a0dfa15d6f6980c23320fe904e1c98e7226ae",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/distro.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c713088766b72a68a9a5e5841f3ca74dd1d3dff8d9334a3ea68b3474058944e3",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_vendor/appdirs.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "33a218449b5d6609923c25c248c051074553dcff0c7456d60836d22eb07611b8",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/vcs",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/vcs/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0a3cb11c281db75f65db58f4b491a243fe9893c9be2969904e1998be58ddd5ea",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/vcs/versioncontrol.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "37ad1348c6d3afbf400f347ad410ab93c62881441c0419cd68b8093d37d7b1f7",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/vcs/subversion.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "94f7c2bbce352403111bf8d35ff4db459ac1a4a748779790f2deffc48ef0dcbd",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/vcs/mercurial.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d97dde232780590588d93c683d3fb1b95b03e9fc6bed84b21f0e0c47d116cf83",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/vcs/git.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "511533d644aa84386a26cafdba56854dec0ff198f07fba153cfeec91d8fd48c4",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/vcs/bazaar.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "032fef37ef3bbd8484cc1a974f7455c25e34be5939ea3de3cbf01f41b323e2ea",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/wheel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0ce21565a5cdedb30e01e304ab320e6471a5e0e14ef8a1ab12a05407ce3c0cfa",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/virtualenv.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8914cafac0fa6d6a47a97719d0409f76914b59ab4c3871545422116b42fa1aed",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/urls.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5f38d0b0719dd980e6261a02a20b293d3aa1e8a979b4610d4473dcc234b4242e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/unpacking.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3e2a186307d30a7fd57987abf34a2786b3bd6358207ada8e3d23aba06dfc6d14",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/temp_dir.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f60b3737d1907955d15568c921a952a47d6e8fcc905cf4f36ab6f99f5fc7315a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/subprocess.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "bb168fdc8ccf8816211b431b75f3cafee721640876eee677c0edeae6145f132a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/setuptools_build.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c64f6c4418d4c8d4c7b3f4ef11679b556b3519f2cf376d3c333a525ebf4e93f0",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/pkg_resources.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8f01f925588f7be2655cbbcb0b4f8049f4d309162f9b4bbd0b04067168f14ad2",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/parallel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "45917825d74f11655b9243c29277efa6a68b7e6dcf9aa77f001a021e6578957b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/packaging.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "235f77f0007b169adc54925de82d2f4a232e0956a39abc59179e6f5f98f46cca",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/models.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a82818c94c369881f5a6899bb09dd842c32d38d660c89e011b03b93099d20b87",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/misc.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "17b2c36fa3d02309e26302dcce1536a520321d9f5b9d3553d7223f39db98877c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/logging.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "064a774128eeaf77a492e9c0227b0627a96ceca17c00d4ed0601a18d8d2f96d8",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/inject_securetransport.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b4697d060cadd881cab41ddbd01fbaaf75b6c981773a0f8f05ed3ae3b4b7959b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/hashes.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a35a90124a9ed80aac466fc984ba0ce21931995b5ec07d1966943a10139b1ee5",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/glibc.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "18cd58da15a439ffedba6c9218583e88d6dcee88a505042b8dccdbffbd39085f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/filetypes.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c1ebe255b6a91d6550ffcf8af8f4d0fd39d82faea4662e12ad50539916195cb7",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/filesystem.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6b7ae7a1407f1d37446c368050748d30f207a8776ce1403e98b4396ef80e8d24",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/entrypoints.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9b851790b6539cfb1d4a2b10ccd1621ccd4265c30af0dd4203df20e0e45ec767",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/encoding.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4f47104e4181efeb37c22bcb94770a6caaaf268334c8b768f28b7cf4b946773d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/distutils_args.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2b15936b3d3b03fd6e902cb0fe935a87e8bab01beb56d74cb2717c8e0b833584",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f9c859531749905446fa9036318eff5a28b9539a35f28e4ae00a81b1677ddbe7",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/deprecation.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "083f60535ce60ed0b7364d93335e0556901afdbc4231dd372b1e6ddcba05c248",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/datetime.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6e265d109110046abc03e37ba28a68b22a5e1b39921dd234597eb492597f004b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/compatibility_tags.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "21c4041c2649bdd7ca7220029971822addfd628836fd0d9740a307a2303fda98",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/compat.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "239f2d4d9deaa8666a78654ffe611133c37b40fbbbd6788ba717cedc88f68df4",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/utils/appdirs.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1c208568ead93a730bcd10e929770c88587fda4599f8fcc574df2978b8b090d6",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/resolution",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/resolution/resolvelib",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "de1967ad9925b33154c06405177de72e410ef24c73e2f677fee2a9fcbf18be61",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7c5d911fa5426a74ee17e8b0bbcb5963c061d056a40c14f0eed9032724eccbd1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c60682b572e3efdd40fea45f57d6359d719e69656adc9134ca0200dd83515aad",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1d82139e3b3b85cc431803420dd2f8aa0d8c2756b0d6303d70ccb134fda62eb9",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "173c4a73385e9771a156238811f18751f510eab3775346e530c52ebbe6e51df5",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b5aa9e0e65e4d24018f4456a48c84426b898d363124a16d9bedf55a84020930e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "744292b8af41e4ce767354ae801e37cd79e7c603563536bb8420b022d497eb57",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "31b6a4caa4a8b41195269237900a6aa8fd9f3cf66287d0e0b1f929b8577e0033",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/resolution/legacy",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "385ffa621e21ac57c9e2ed072c5e19441940f2504751f01a16786e54a21084f3",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/resolution/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/resolution/base.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4f84277d284912ba4f59ee223a23bb5665eecf56f17b6d0b2cdb37dc052c9583",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/req",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/req/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "95134706fd1901935b4b099753e5d4766eba82c88d9ae8810e2d431582788484",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/req/req_uninstall.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8000a29d321c49c646c3cd6a2da15d4e3f4a197955b82a6bbbb5ef1c68c813e1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/req/req_tracker.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5ee3f0797d656c95d3da04a40972024b98676ba6f299ee4f790a783a4f3e476a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/req/req_set.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "02eb6c6a2576b3ed882f0b56b530383895bf64b460e065e0eb033463f8596f59",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/req/req_install.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "451da691a014d91103b63658de7472d288dc500fc17f42698d7f594f265451ae",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/req/req_file.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9cf205976322f540c686b8fe2b4137fd0ba017bb65dd4043b72d5ccdb205edf9",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/req/constructors.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e2c8a719deecaca848f780d5e973bea915f633a2abf74ece166b1f9252abb7ae",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/operations",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/operations/install",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/operations/install/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "997ee1c83d863413b69851a8903437d2bfc65efed8fcf2ddb71714bf5e387beb",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/operations/install/wheel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d605761bea30940da2c1c6f160073804e4e23d144607c4f3a6e534c2e84cd954",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/operations/install/legacy.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7f9f5f41b34b3b6aef97c6cd426fc2b96e9d80fbd75d0ef2e5aa6e956662d351",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/operations/install/editable_legacy.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6e304e6df13ab33dd498623bcb8f860a029ad969938275a514553b6fe8b4b10b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/operations/build",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/operations/build/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/operations/build/wheel_legacy.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "34e2614d831896375b8b3168fd68e468a1961b548467a681cab05d0abaec641f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/operations/build/wheel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5982ccc6ec6a3776a1253424d8c23d85d999281a45cb11de36951d3b43f26f15",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/operations/build/metadata_legacy.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "10230184b10f110bfa3d4502a4f0975bec0df50457758e393cd5c9bfb0592935",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/operations/build/metadata.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8c9a74e51ae9d0032c41bee2cc35db3460b52ed3cdc0e847423edc44ce77db87",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/operations/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/operations/prepare.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0171cd83588671e835972a83a9b71a6e600521f4359357087e09956392425a8a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/operations/freeze.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0fe7b1d01c32e84d04552fe01e58b1944a4a0e94711599d4993cbb9dff2ceedb",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/operations/check.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3ad319d9f7f4ce4f0686997b7885f2499e03f290947f33c060da464f1c35a965",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/network",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/network/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8dfe93b799d5ffbce401106b2a88c85c8b607a3be87a054954a51b8406b92287",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/network/xmlrpc.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "08bd5604e4e0c4fc1b719e90b9b678a574178dbeea4d31694d415ef9969691c0",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/network/utils.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "baa4fa4243bd347530a93c3780705631015d698a9869b078db741466e8900f77",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/network/session.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5477a2a2b3df9583cd58ada933fab6d9cf87e6099104387d50a0895b75405052",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/network/lazy_wheel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5cc7eb0cad48072e382f71b1dd467607cb3dd154570daf7ae76d0838f9b398e5",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/network/download.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f1fadbd9b20d39ffa36e614f6a929bc843bdb235c95891ba389696e2143daf7b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/network/cache.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "27fc69b0b59b46b942494710840e7e4ee4f92d6225a55b531f87d9d574a3c9be",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/network/auth.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "77c0dfd1fcb4d4fd632651775c330cf000b292d47570df735111bec9ed6771cd",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/models",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/models/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "dc31d477fab1a4fa337f3a2ea2a6bd83db6cd42cebe6a6877c5c5b9f1ae27a93",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/models/wheel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3168f142404d5c8e97396893bb3306eee38d845bbcc40f783aa0fff41b88b157",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/models/target_python.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "48b186df3f4f8ff0a20398e6327343bf630ddd24f791e56e6a7543cd3bcee693",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/models/selection_prefs.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "68d4432fdec6cf7c96256de8834caebce914d3650bf0e78d403b836ad67c483a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/models/search_scope.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e2e18d12a62bcf892eebf5b3a30aa2bee32f3747e3e57434dd6075e188dc3795",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/models/scheme.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8aa71e0bb80a8939f664b8023a01906dc9a8e3d4d183d1274144ac407dd4fbb0",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/models/link.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e707476c60cb6da7d2758a68d8acbb17d451a36dbacd1cba8a4ddc2c7ffc2b07",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/models/index.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6ac32b69954f234b27c9ee34e06ced1295e029eae3d72005999976a7778de018",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/models/format_control.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9768e9e3b996b09a7bf8bc4cb34e65f53faa160f59e4fc1dc8ff51ed773f5594",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/models/direct_url.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "56b9c934ea9c3f39df35aae34096afb31dad806ec67dc2dae8fc990ae7ff2fb0",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/models/candidate.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2e5c8617648c1a379eb7d6cb6c40330160cff3659ca77df8d98b1aeed096ffd3",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/metadata",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/metadata/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "288351f1960efe295cda9915dede4a7102f358b35cdc68d90e4946593549fb35",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/metadata/pkg_resources.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e0554fc58140050ff5b5b87f0910732b8c74fd22201f5b822b1d992f2864a2e4",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/metadata/base.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e81881fdbde5bcd1d821529bceb0e18b46c999296ce50d4afa205e1d694a9c8c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/locations",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/locations/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f445d1c42a7288c0a553cefe3f913aead705c726dc03f2b32ebcdc2b656def3b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/locations/_sysconfig.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4edf2090deec8716eaa14973a8cd7d9b28814736dfb7d0b39267124b8607935b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/locations/_distutils.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2f97e5452afd047d250703d497ad5cc817353a7543d3a14e10d9033118f2837f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/locations/base.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "41b929826cc86d606750bdbfdeabb6f6ca8235ec28a986e4570f0a9a28117b67",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/index",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/index/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "be9b7e25e4d979f87c6be142db665e0525c555bb817174868882e141925a3694",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/index/sources.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "495c8f8adbf4f3e41a961dbf064e5d88027d18003f77e6bdde4a28b90a1d006d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/index/package_finder.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "dc9f51cead4d00eda9ff30dbe1fbf7dc6781041398bac57d917b409f68fa7825",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/index/collector.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6845ed1cad0b6b89c63fb9aee4de42437b667e369cccbc1b1a2f00af8a06cf9a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/distributions",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/distributions/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a30d623d6fd0a7e4cec8e53e5a084e282f2f02fd7f4b2935cc44d954efef2841",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/distributions/wheel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9fd32a3685b232a36c71f6cd79eaa1d5bceda19522079c751fd878b457e2254c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/distributions/sdist.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "728f1f351f2a2211d12c19dcc15f76a09edef0838218f804b1b10574d3e4d589",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/distributions/installed.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b9a4cc3ef63786bfccd410b2d74eef2475aca4a30982b3f1bf7d16dffcd96744",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/distributions/base.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5159dd6a89348ce1eb2c7d09a8dd18ce5c55127bc542e998cb7edd898dd90ae1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "bfec6697ca0cc2b4210a9980a64a5c30e13decca7c41a071a1139b9c64b8dfff",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands/wheel.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c0a19292cb988e38603986bf8c3eae95a2a93d7694ccf8b2cdf44d353e033a2a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands/uninstall.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "103731ddad3797753cb69676a787df21d9f8e61636605126abdca879c705da8c",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands/show.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b33daf6f187897b063e232a59031931d80fa23cfddb92a525055715221f8e314",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands/search.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1307063e40c34f014ca62d8f04a84fb965f660130f732ecec755857169e8b9ac",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands/list.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8dfa834b8c6f9ba595f2b1d54a6be9688f35d6e92f0f83a23d9c0618a330c242",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands/install.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "685bd941f3eb32b1c36fa8e36e6ad5972bc3c4c21e5f765c64a490bd8e9cd0a2",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands/help.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e8c9f3ada93f8fec84de9b030aa8b61b121226a219274e0339b294f50867c4c1",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands/hash.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8a9eb802c27a105504696283bec6667501e4b35253120ac38c7e5bca5f886327",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands/freeze.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "bcf560bb005bd79b9bbfc12cf683d2c9678f05ed9cab7f50c635382a2cde4f09",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands/download.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ceff12fc3376fa4e8ad15491df208f2d2acb7a1a18923dc8bf23b51e8f2df15e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands/debug.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ca7b4ea65c3ddd56684005410770573cabaa6da9b8993e9312b6acb45c05cb7b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands/configuration.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5f57dd55d120f0c1c5b40ad4fb76cce9604d6b1d44ed9eeab333c47652b5ceaa",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands/completion.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5314b4f6cf2b127534f000223778077502235385c64a5bf9489deb209753ca10",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands/check.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0edd30ecda85a7ca3fe3927bc37d8642b29ececcf6bf0a3f53c526b070fd60d2",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/commands/cache.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0042dff7c45647f82253dc25d114977fe32c4f23b91bf8b03b4887a05e056e67",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/cli",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/cli/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1641c1829c716fefe077aaf51639cd85f30ecc0518c97a17289e9a6e28df7055",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/cli/status_codes.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b0414751a5096eabfc880acbdc702d733b5666618e157d358537ac4b2b43121d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/cli/spinners.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "54b752582bf29372a892e8cbc817ff40a61c19bade3d0a0f078bfb8ea1bbc720",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/cli/req_command.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ade7cfc9974aba5bab89d70b68275226d832605721c5df72f2930ca7fecf3beb",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/cli/progress_bars.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "724fc82e38ba6914c6d33c576a39cf588a504c6c53ce6de7b1c64ec703664d6a",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/cli/parser.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "af1e30e88803d0e6e2eedd64f66574ce5621cbf0ee0a86830aa86450a30e14d5",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/cli/main_parser.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1bbd19d5f5cb633789baea2d8302b0abe75a089d230a6987c71e9a147cfa5804",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/cli/main.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1bf3ac63ae85651b662eb309e24de6efbb66b6c451450777ffeaa57b596f9a78",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/cli/command_context.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "936245e563ec3f530d29a5d62bc8d915b26161f7f391dbc668fb0be77b596c35",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/cli/cmdoptions.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e76248c8fe42eb24fc0e94f53b666c78063ebccbcb4dbf05a8ed20f3938560cb",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/cli/base_command.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "dba3079e5cd9482f969368f6386b010ece5c97695a76ba2f272572d7fda0d199",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/cli/autocompletion.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "af619049a1c78a6d4bc0f84c68ef4c3de29db12bf91fc4bd12556c981c9035ec",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5ef275248ba64277cb345c5545d7ffc6b6e191383558c52b7f61b3ac7dbb1770",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/wheel_builder.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "856eb7666001afae6b3a24910475eed63054744670e4b662c342da4016f3d252",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/self_outdated_check.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8afa1461a1aeabe45afc3be566f3ed1e181b63decd28762e3c6ceb80dd86d40f",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/pyproject.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6cdfdd962155c68acb213c421334f45263d81684aa93fbc606d3354308906b2b",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/main.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "059d2f91daa0a68b5e4e8d40d50f28bc57bc13380a14958e5233e621441f1826",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/exceptions.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d89409492ebca20811fd920e03e8755360d10035116e4427f4d7f8119599f37e",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/configuration.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4012df86ffac6cffa8474f0d1714989effe62c1f9282d34eb165c017db4311c3",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/cache.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e9538db6845e1996c177bb2a6359fa87091d582e22cf7b665f05f0663a6364ac",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/_internal/build_env.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "da116d6c4a0ee2f0341717a137f7b6a1767fdc4ded02f2a99d599cf2c3988efd",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/__main__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "997c160dfb4d2cc29fc15a8a156184feeb8166f1922225042e12e47b2b08b997",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c65eaf2564e7eec07bbf987ba8f8fe0ad4f37d7bdb05ecd8d45c5ef529a37752",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip/py.typed",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "97d83e15cd7382d219ef4b4b243731eaa29ea83bad4d555271e22a52877e6b08",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/_virtualenv.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "59869c0d6c3581d3aacba1f55276962ac863b4fbdbfe39ecf97ca72ba98ca43d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/_virtualenv.pth",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "69ac3d8f27e679c81b94ab30b3b56e9cd138219b1ba94a1fa3606d5a76a1433d",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/wheel-0.36.2.virtualenv",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/setuptools-57.0.0.virtualenv",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/pip-21.1.2.virtualenv",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "venv/Lib/site-packages/distutils-precedence.pth",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7ea7ffef3fe2a117ee12c68ed6553617f0d7fd2f0590257c25c484959a3b7373",
+ "format": 1
+ },
+ {
+ "name": "venv/pyvenv.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "413a3f4b68c48779e09283181d9cd6c85333d1bc4960d283b399d126026de940",
+ "format": 1
+ },
+ {
+ "name": "venv/.gitignore",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6c76bee988684532bc13468f82833b352c14d129f968b50b1f4a0e08d172edcb",
+ "format": 1
+ },
+ {
+ "name": "plugins",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "plugins/module_utils/ksmanage.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c3e9bf167a8e6b21d4677c6d79ea51da246a9228c28a738876b1de0c79c86a78",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/volt_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0e70c9b385bb6c7af682f1f229fba5da4ab6d683dd2baaf2ccfd4ac0c199f84d",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/virtual_media_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a8af67348679355245c9a320493fde671d77b72aefe7ef493f30302b132da6a3",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/user_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7b19d044a6ccef6ad89c3293ea61fce3aa5194ae7334ec5f627751b597c96dbd",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/user_group_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4d6c5aa67702309b293c44c60e14439f2bd3bd1057bfd387e0fce239dbaef34b",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/user_group.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7f3b0e667760535ad5d5ca1b19464362a49c8a4a4558df35bcde07a9f8bd91a6",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/user.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6ba0ddba629db03edb035ed13c246eb7f93bf2038c5645e31776096bc6e848ac",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/update_psu.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3a4bb26f60695963686fe6f8af9e8f7a11cf9979a9e7203668e18649f3fcf1c",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/update_fw.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ce6f1b810d60c1360b5b735a0ea81a449870557e48f7d2fe78307fe1651156a3",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/update_cpld.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fe976bc2e3e7547b38d381ac869086b017b379d096f860d21440fb1cac20ad67",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/uid_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "bd56a1bd10e268663c110771f989285f139734088987fb025587922ec4d77e51",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/threshold_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6832a0122a1f9c9d50625e2bc864dd2c93baf0d937bb63bb6968fa00c040fb6b",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/temp_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "929036d571228993fe448b1a306743d933f1208f60572c11fa9a83609e15b1bb",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/system_log_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e028b990ae87783d42ecbae49da62d9fc91b8345e902e70313872976e1b907a5",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/support_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f79d97b4db64b3a5ee8690e0bda4b9e082b23d4834ae4604372de451a906fb8a",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/snmp_trap_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "40a706111b09455f01a62725493ef77828e63bf79cdc51c4889a0a33d05907d0",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/snmp_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7ce8e2ec53bc505271edd23093d68d9340802ec4ab650908f7f584334b9ca713",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/smtp_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "30e57ce96e2951b584696dfdb952dc610c7ff5f2ebc4e4017d640feaebe66e96",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/session_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f177a8245112272526d58d5e3bd7a16a9550018bba604a47a6eaaf29e18380a8",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/service_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "064db737f0ec86804040fbfeec30f7ded997f797026e60239eeedaf467a8c7d8",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/server_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6511a585dc29477c249e9b184ec4bc7808a7a89321df7cca3241d57ca63a9435",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/sensor_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6acdffef8697c7410f28b6ff568db065a291f04aedcb635aa910fd5fc47f8b2e",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/self_test_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4b0531b4227885daa2388d7a9728313cbe4a1ae0f739c3458ef38e0a1bf906a5",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/restore.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a7c955deef0066048f8492ebe5f7b4feee60ab5376ac7ade09486ce39f4d18bc",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/reset_kvm.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "221dbf024b59db1167ca4489d2b3193f5818d66d4d0b64702aba0b8f2987e9b4",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/reset_bmc.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "175b844a10c5276f711da1935df5fa6b468bf33c8c7710ad1b0489f82a56ff36",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/raid_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3cd1c881c0afdd4170bca8b3d3dd9368a99f82dbf375ada11e73e64058419400",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/psu_peak_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "cd4b49223b1796cf6b15f83717c8515527df5304ce6ba8f1a7c8812003a37f59",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/psu_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8f50d6bfdc8d50c981c02fa32429fc10811598823ac90d1a63756b96b65f7243",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/psu_config_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d4914d843830dc30e2b56c8edc82ec68496372c660b1f4a60b85c7a552dd398c",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/preserve_config_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "eabac88a9bc1032bcba0136bc9ba8ff9d8ce5fc42d01e3a14d65702f20a30293",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/power_status_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "09c4009fe0de619df7c710815af88dcef4dcfdefe5633e54dbc8090739e34f08",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/power_restore_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5acb6dbfa51c34961afe2557e85645e1d787fe99395c0b658dfaac06cd4275a4",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/power_consumption_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e9b67bf5a4e8a3d155b54a72504f5c299f4883c84af24e5c1063167e8359d1e3",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/power_budget_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "af17644390049f500b2215b3d804217580ef2a3f26a438a1e21af929a91be73d",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/pdisk_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "929cb66e8fde0a953b7b3e6c4aeaad1f57730879197d55b02456ab157ce7c96a",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/pcie_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f9432c199af48ed51038f7fd2038dc7f641ef0158210bcb483c3b36d8aac7c2c",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/onboard_disk_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0597fb088190e31b359c4ee133e218f2ebb86eebc8619125b544709923ac1ba6",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/ntp_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e814c3fac45e5a1d4be2f00d6a81d8ffae107a18d37f3f86ef46b833be332887",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/network_link_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f5748c61b058011e6891c93f7bd934ec956727aefde1840625daaf760ca2ca13",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/network_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1c742e81deaad76d1a3ce790b1884ea0cc3a5855a991bc51c1c83adbf02db0c6",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/network_bond_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "06c33a1594e1e59005bd19f0aedefe2b44d20bba1609f7d205a910ea1912cec0",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/ncsi_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "96b51e7b6fcf31f091d962ae0bf73b114abe742442fc90cb0d059670e8861f11",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/mem_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "db5d25c4b78d6d801a0a234f1e919f9525dbeb7bda9dd3550d3138528d55cae9",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/media_instance_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5fa461e06ba37871fb069cfcab79ce748ba0e207701881120cf5249ce24b96e9",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/log_setting_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a8c3874028cc8b3e5642cab42a420df7c4b23b44efef3a9024808a0d26e1467e",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/ldisk_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3884d64d6c0c612c7980b45c175b8593fc786393e19476c1210bafd54d8ebf72",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/ldap_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a0c0d707f7dabaf2b37b27f2a18359fd62d79e366e44d3bd4911ae6362627034",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/ldap_group_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a13b7c725c724afdbee4088e3b221816111d5a17b0a558dc0c483cbfb492c301",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/ldap_group.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ded0e76076824106170818d11845099ad6ac7745cec7af38aad180db86c17264",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/kvm_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5fe769d9fb4415435425edbe87276484245b6889eb982ab1e320c85dbc0053b6",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/hba_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f266d9be706b25f9df783d22d4152d700b4b97001c39681c5dd5eacbec54429f",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/hard_disk_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "717ad0493fbc9f1cebe026fb93d91498414b557f7fabe8ec28e90fe400fde5b2",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/gpu_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "de641a8159d45c327fc4ae3562938e92402cdeb40adacbb723712e94512dffa6",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/fw_version_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "30eeb47c637a062002c75a45802cd35248453c2c4eb7565a6df8a4d3e32420bc",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/fru_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "48a7daf23cb60f31b2116164f59fbd426742faebcaa72541d5a6ecdb728f1aca",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/fan_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "35ebd539913876657c7463770ae6462ed4499754e0a80d7386af53c47713f4d4",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/event_log_policy_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0f103b37b51b00e5d3c6fbd9921d6e9b483dd0ad681347d83d6b668448fb89ba",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/event_log_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e0fd9f1b1aeb832914f0d61accb87e323a5454c434bb205de1faa546ba87209f",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_vlan.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e369f661e0fcb7ec0b262c75b652d29aef0f39122ba8661103d09c82ee7c40ae",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_virtual_media.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "68954426790783b8f94774ba42c09635cb02c7e4ea7a778cb3786af81bba0256",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_uid.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5bed71c9f7fe15a3825f9b74a689b9f81c817dd9e0a40ee718059125baf2d976",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_threshold.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "07a32de06fb22fb0b3045b4761619530b7f602ead87a1e92d23c1b8629000a83",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_snmp_trap.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "987ff62bc966428ac2ca5c38ac251e75a383d0148d69a3fa5d3b40276a909d92",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_snmp.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c7a1d6d7c658b879c3db7872e0facadd2ed738bbece5a6fa8d6637bf656d4b94",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_smtp_dest.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "47225ae610b8aa0aa5b51684ffca34b4191fb9d4eea2825aff995d616ba55329",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_smtp_com.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ab52697021b73eef407c0535209f4efa907ef1401fff04ac6c0b46114a1b1daf",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_smtp.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "16ddd6a69ffae650ec58dae5c3482f0792da4290e9f1052d365dc2e05c88e230",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_service.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "53d6458660bb37662b29c97206856079c607798e903d77103b436b53df2e2fa1",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_restore_factory_default.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d0086d3775bdb4638d6ee47e3cfcd5001de34ef486ef6cfad7205ad10519edbd",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_psu_peak.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "29fd2270eba8b8f1c0115187f5cb327cfff1fed5b4d8f29d8ba20f64903b161e",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_psu_config.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e08e246f658c24c1def1a16c8567ca2ae97543e194ab5e84e51ec7f6edd8e7df",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_preserve_config.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "02752b428837778100173e17b7ac52f2b583a9c112cbf0e4491b358d702ef4be",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_power_status.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ad44bc91db65eb64c0e4e1b50092cedd50e32c880020002e49809592b4aa48d3",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_power_restore.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9218647db44644a9ad7d19a4584b87e20f538609ddd33d3f73a9d169f073cf02",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_power_budget.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2805eb2368f1226c2fef0b56270bcb5ff6c9396c744cf31c70013b3fadf5d595",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_pdisk.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c544a3e7f671c730b00c01ab6030c3ea56c92310e403ac3cf8a1fcb566924975",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_ntp.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "492bd4f2520ab3e930c8b567e78f978927165ad8db746bfd6968d30d855de539",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_network_link.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b2b1141b654e03cefc7d93342aaadcaecfc7b68a1da519faf5251f920eed27cb",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_network_bond.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6dde038036ddbfd2539b9813127d9d08571a231ae4d4bfebe5f12194543d76b5",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_network.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4c1741341b6893b2f87215dcaae4d37b82d834adb1949f07b54cea65c01ea93a",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_ncsi.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9c4703f8ce8469a2936daeb33c90f58d3a955df03cd4e7acd52d35e79144e94a",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_media_instance.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "20f6c53043b36cfbe17020d0a6e84768394b6c3eb82ebc5875d847f0d72bdd47",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_manual_capture.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "325e52adf5ee8cb0b695f73faf9d32ed125a25ea055841a7945ad8777ebef5bf",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_m6_log_setting.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f3583a96fb13f7bd8953992378472c4a11076554f397fe529f9a9a99d7d5c3e7",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_log_setting.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d7289c93002df69beb45f60ce1486089f34c11a42f01dd4f430b002354625477",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_ldisk.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "769f727a9e6c6057b975826b5839a122f53fee85a9fbdbc9045ec81454d7383a",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_ldap.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "90e5bcbfb769ad88b845f6c4bfc046c9892ab14d4ef7fc6cc8054be7099d10b2",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_kvm.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4c08f47aeb544157c1f289a5c2b9522bc0d9c7c02f816193c5c9ee4ec318aa17",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_ipv6.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "adb2e727d7e6a39c773944145c48e7d5443a8e11e15cec1306f02636ba53808f",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_ipv4.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e1199b728b06d90ae9e81d70714e5d93d0ab091fabd65e1ee61c5f9c33a0187e",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_fru.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c8fff7e000f13b53a9798d8ca5c85ffb93ffe80a6904b9ee3820cd6d7a08dca2",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_fan.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "bc3872ef084c3abd58ae0d7f0e5e324313470fa781056f5064bf5dc9435947f5",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_event_log_policy.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "53955a87190d19b87fe58e9a9c254aac14097cdcb0e74d5285fe2eca54ff6853",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_dns.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3e6849dc0dd0774b06b0ac12e0f70868084371e6de5eca183090553f4479d221",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_connect_media.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "45936fb17f0b534f30ff6b2090fe18d7aa07fe2dd29670da52590c51060f217b",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_boot_option.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b33b52eb682e3d8f3a0da80cc742841394da422addf2b406712a99bb44c4cdf5",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_boot_image.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "91ca33155193875e5abce41898e8013512a1be84ebda4bb2ff679b3f0435b502",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_bios.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ac81454b9d175c64e29ce6f3b1f75e0a66e82c845f590f81950b834aa1db5b77",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_auto_capture.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a5296df438a418416e0d6d9655a20a9d924cd4a961a950416f6ea67e18526693",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_alert_policy.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5c18bddf6e2b6ca437e11f8492dd788594528817a283270076336b4de2238d26",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/edit_ad.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c8d56dd0f393889eac4e781d3820636d0efbfdee5341439fa14ef556e42e9668",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/download_manual_screenshot.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5e4b40ac7605132c35c6587cdd82bc7eea405c690a642cecbbecc9e3866aa128",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/download_auto_screenshot.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f1bb6cc42bd5913efc256af2af06b2fc4223a11b41daae736ac0ce3518ad7aa2",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/dns_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1f6f632c31ed346fdcc413141d4ec2d46bddb909e2dfa94bade11a2f69d0624a",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/del_session.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a8083ee5f1dd99666ef192ca740f2e75f1b989af3d735930087c9c0b93895971",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/cpu_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4cf297f15aaf003c5acaaae35b3e1700ef9611d3370659342aab1951f1452169",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/connect_media_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5f32972f14202310da2f4113c5ecb88ebeb18bc5668ec9e7570a448e623d750d",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/collect_log.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "511933f9c48ecb6863fc976a9a6799e82ece9103c0229239c060bfe35fd80f0a",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/collect_blackbox.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "500465ef9fbc9762a52f643292669db89238a7231cd3c98f0f86e83cb6dcb298",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/clear_system_log.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "27da56e79331c5336924e0f8249ade4c60f0cafa72f32a8b23af3ae0edc46ddd",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/clear_event_log.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f391a2fe006493e436d158e6e000a4c5ee755e2edb9888995898363c435e2843",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/clear_audit_log.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2a19b1e7d7d5ff9ea7f077599d84909b9b744303a42178084f4f8aba43f5a301",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/boot_option_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "40d7ee930518ce115d0bcafc8996adae3f99166057cbd21f7198a34725443963",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/boot_image_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c4ca2b520c0d9ef06e1ccea29e95bd402526898896dd66a8cdc3daf99207024e",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/bmc_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c9ccefc73c9b1777a8081ded3315c815eddf82acf681475d82e173f853b57c33",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/bios_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "db4e344849b9afe2a6adb62457b0e2d722426313911708998d527be0f4956f22",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/bios_import.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ebc6d547d97e0fc44a8c0ba35898960cb95f0aec3b86f60a3142b2d49d2cd8de",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/bios_export.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4161afe8afa404e3e5983481b77ddb9e90466ecab76713c3e0b7dc8c0dbbc806",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/backup.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d95f0328985db9b64db9718895d8a7a5a717c518b26515c29cbc4489f566f2bd",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/backplane_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "37830ee2e77e1eae4e87de141fd62c8b88924039423e88a0b8dad9663f9f6813",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/auto_capture_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a33714df9ddf512d8afeaa23e463ca5ec168089dbeae46cf69d76a884782510a",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/audit_log_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "910fd95820d55eaca48730434f83d46da254020f34152a106f710f9c6e643d9b",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/alert_policy_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "06d27927313d505875e958e77bfbed46ced453ce2da78333a6fd79cd7ce49062",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/ad_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a8bc4380c527e3e12992f10c64e5c0347190eb1f66d5c69ba9b1bebbd1c3886a",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/ad_group_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3661f03c9baeeea3a99cf3a938d2e227459a7e7583bd8c45526b9889320ee47e",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/ad_group.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "57412cef649ce9a0dbb0b95575471c37980c1a6756e3198ccdb3a44020d5d2a5",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/add_ldisk.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ffaf24a8a2b7158a0d5c8de687d04f5d90db4ad4158ef4882da714a3d8badd31",
+ "format": 1
+ },
+ {
+ "name": "plugins/modules/adapter_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "947a287e1226975830cf6a225ab6db6ed680560ec0e5a6ebc8f28d829b549c27",
+ "format": 1
+ },
+ {
+ "name": "plugins/doc_fragments",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "plugins/doc_fragments/ksmanage.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1337581fec2d5cbaf4bed68f2c14c470b1cc6aeca198acdb118e46970de80b67",
+ "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": "2ca92f825f34be21055804baae18dc3f52156b54abc6d7810ad95fcbb21688d5",
+ "format": 1
+ },
+ {
+ "name": "docs",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "docs/volt_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2438770071e5a055f5c934da7804a440a095c2cd857012b3981ca2cd3ba2217b",
+ "format": 1
+ },
+ {
+ "name": "docs/virtual_media_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ddc25061407e583d7d86c577cb6f532dc53bca63a49628f38bf5f872dff980f3",
+ "format": 1
+ },
+ {
+ "name": "docs/user_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e64aab6fa90ee8350bd42a67df33cda2da542fd97485f7e4f1eca3b6e54eba7e",
+ "format": 1
+ },
+ {
+ "name": "docs/user_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "943bbd715ab15a422621ebc43ae9e267fa0c5fef94e6a57e3a3bf08627449b34",
+ "format": 1
+ },
+ {
+ "name": "docs/user_group_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5032a3fc9ef50eed4a52148fc597d85c00fe2e3cbde900650062fc432aace29b",
+ "format": 1
+ },
+ {
+ "name": "docs/user_group_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5437e39456aa2eb334acda8492ccc6bcd409f3ca31de9faece31dbe8098ba478",
+ "format": 1
+ },
+ {
+ "name": "docs/update_psu_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9327e2ab76888f1e3fef302c32c70ff0ed79d0088c4eee8e18b4a01e9b054869",
+ "format": 1
+ },
+ {
+ "name": "docs/update_fw_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ea915a8f080326152cc9c10d73956b334395f3c2d4fc83f37890ead9ea29b008",
+ "format": 1
+ },
+ {
+ "name": "docs/update_cpld_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7c746f96b1f5b085ab91279e816721f9fbab180d0e2ee925c8741d65099db73a",
+ "format": 1
+ },
+ {
+ "name": "docs/uid_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a8218857621a2f6719e89232ba41c57d41b45db352dd94bcd92ad5fd9d4ece24",
+ "format": 1
+ },
+ {
+ "name": "docs/threshold_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "667e457b9e10748a4fe661b6e41f79d0ef6c7945ef8fdd4ae390f3835ab7a722",
+ "format": 1
+ },
+ {
+ "name": "docs/temp_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "70b36b2e957d946e9939b032476334e15b1251854a5f05626abb7f0eedd64f78",
+ "format": 1
+ },
+ {
+ "name": "docs/system_log_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "acb50059665f96ce0727e083b607f0538def0134c97ead16f662a025d01a5c2c",
+ "format": 1
+ },
+ {
+ "name": "docs/support_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9652487f87ce4e3c336ceb5039251b5174a6ea7921d346e6b6c1467005a3eabd",
+ "format": 1
+ },
+ {
+ "name": "docs/snmp_trap_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "12ab22f23b7473aec7a6faead13ebd716637bb0674fae2c036331a0f8a75bd92",
+ "format": 1
+ },
+ {
+ "name": "docs/snmp_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ebf640884b01c6c2135ba233fa339d1afd3d86fe104d47247ab3950d67e7f43b",
+ "format": 1
+ },
+ {
+ "name": "docs/smtp_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "db9b75d90722e907c3cef45292d99e877422ad85b741c5508adf0d9029f175f6",
+ "format": 1
+ },
+ {
+ "name": "docs/session_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "280f357a2c242b5ea7b5c81373b4638f36803c386cede0693130e635edb08135",
+ "format": 1
+ },
+ {
+ "name": "docs/service_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a695f51b8dc5228c03d3b4bcb15728aaf9802e8c2bd745b300ba98538c3a052d",
+ "format": 1
+ },
+ {
+ "name": "docs/server_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6c0b7b94ecb85455a5482cbfcd12cb8a05f85d7e5ead06bd994aecc61f0dea79",
+ "format": 1
+ },
+ {
+ "name": "docs/sensor_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d1df08b3bc39d458b1a37b324a6f7b71453b3a69ce5ed2a1d5b6ebbf2ba3c658",
+ "format": 1
+ },
+ {
+ "name": "docs/self_test_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c34e751e9e13eed10c0502166eec358e195759209c29c32db10874d0b64d69d8",
+ "format": 1
+ },
+ {
+ "name": "docs/restore_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "24c63e3f0c96bb44b8697d7011fa66c50e7b6d9733cc90200ac9e1e417e12e58",
+ "format": 1
+ },
+ {
+ "name": "docs/reset_kvm_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8c963574137aed4924c177dc4f5b4a655fe18c269d0c2a4fab4192d391613dcb",
+ "format": 1
+ },
+ {
+ "name": "docs/reset_bmc_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f53fbeab20657d2a426e4fce17879c014e9b649acf1c035c37742e51f82c730d",
+ "format": 1
+ },
+ {
+ "name": "docs/raid_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2a15642471a3342d5d0fba336830a0cd1b3f6c768b23ca7c2b7585e3632e7673",
+ "format": 1
+ },
+ {
+ "name": "docs/psu_peak_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7410cea8db80a3238ae4167f993504b7b5b7228dcad08e8f2b615b73b4798bf6",
+ "format": 1
+ },
+ {
+ "name": "docs/psu_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "68ac98aa9e3f4b186edcd58f74f6a690a246032bf4ae67ec44fc1e4d4dc0b607",
+ "format": 1
+ },
+ {
+ "name": "docs/psu_config_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "97457c5aea1d871602695e04cf448eaa077278f2dce9c701cae88cae76a732d8",
+ "format": 1
+ },
+ {
+ "name": "docs/preserve_config_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3bf7e64215b921e2632eab84eeb1cd42c3bcc630ee326bf4e1b93af6684d2c3a",
+ "format": 1
+ },
+ {
+ "name": "docs/power_status_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "16444abf365d7ec122cb822db070649d85749507a4cf77a0ede63e1986f0f17e",
+ "format": 1
+ },
+ {
+ "name": "docs/power_restore_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b31295475c1887bd26f7eb1965a378c071c0fc546d49f6c85d317892c7ec4f52",
+ "format": 1
+ },
+ {
+ "name": "docs/power_consumption_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9301d09e1648aa8e5bcf85bd90bc480fdf9a25228cfba307dd653b40fda0dcb4",
+ "format": 1
+ },
+ {
+ "name": "docs/power_budget_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3ce91440122ae39eff0e6ad820e8ab21f220f3c0a91fcfd074ae7515ab8be53",
+ "format": 1
+ },
+ {
+ "name": "docs/pdisk_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3c44327b1e08f8a4b8a21b487897b22d05d35c715572482e48d1cd84f1822f41",
+ "format": 1
+ },
+ {
+ "name": "docs/pcie_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "41c530ec0d3990982a276f80eca7ebd88f40f1c3c0450e20777f6e773a89fe3a",
+ "format": 1
+ },
+ {
+ "name": "docs/onboard_disk_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c041e5e49fc25209d40154e67b61d5a0dcdf2dcce0900cc1a30aba30e7023792",
+ "format": 1
+ },
+ {
+ "name": "docs/ntp_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2d1871fa4e582db6f0f156f0eaeb181e6579c7d8cee20fa02e6333b3e8f13147",
+ "format": 1
+ },
+ {
+ "name": "docs/network_link_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8a0c0d374b543a249854f1abf215516093d63892d8ebdf548e95305c211b72f4",
+ "format": 1
+ },
+ {
+ "name": "docs/network_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e66fc83de600d12b8eeb1bd0b81fdd209ad31c186cc49a74408daccac72ef498",
+ "format": 1
+ },
+ {
+ "name": "docs/network_bond_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "36a6a63af135f42a7e68342ed054f0881bf36c4d7b3ee245a6525123f6cab298",
+ "format": 1
+ },
+ {
+ "name": "docs/ncsi_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f3244934a91384229331ff5295aa3891f064c62a127f71b0da9d24ed76ca704b",
+ "format": 1
+ },
+ {
+ "name": "docs/mem_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a84d7b6be415a2c421fcda09c1ea3fe0cb7fa3c048a1ec63088eb7cacbc11c62",
+ "format": 1
+ },
+ {
+ "name": "docs/media_instance_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "53c3f6563a0b378a45009c38f2d4ab0818d71e70f36e49e0b2e64723f2a28686",
+ "format": 1
+ },
+ {
+ "name": "docs/log_setting_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5a2ebdd4f47c0956c4fdd66e952ae4a8328db39a5e97ef27daf67c50df35cd34",
+ "format": 1
+ },
+ {
+ "name": "docs/ldisk_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d27a2bcdee242c452b034133daea6dd85c10542e166bcd5127d64be9993ad426",
+ "format": 1
+ },
+ {
+ "name": "docs/ldap_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "65d728081b6b84df67dbbfcac6531abf94cf4c970aede6b8aa7ce9d30f492283",
+ "format": 1
+ },
+ {
+ "name": "docs/ldap_group_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "38b4ae3c925fd5c58e20bbf34b560404bb615c11e05cd6b805d34805c9145034",
+ "format": 1
+ },
+ {
+ "name": "docs/ldap_group_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "348e645cf102c2bde47bb84cfeecbb59bc49bafbc8faa92ea65ab56db6a06a2f",
+ "format": 1
+ },
+ {
+ "name": "docs/kvm_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5f1544c1c06eedd76cead81da9330facd39024f726c55376cb8df7d3768c505b",
+ "format": 1
+ },
+ {
+ "name": "docs/index.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d1e6efd63090c42bff783b9f06faba41850edf416cf981326e08073524d3635e",
+ "format": 1
+ },
+ {
+ "name": "docs/hba_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3fbd5521801b19f4c63e3e3ce678fc33f7316b4a9b27602b7987759717e909f",
+ "format": 1
+ },
+ {
+ "name": "docs/hard_disk_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "582a9397687cbd5210e8c91288fee6ec9ba6228367c75c5d389c467837dce803",
+ "format": 1
+ },
+ {
+ "name": "docs/gpu_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "91e7172e2fff2b2ce3eb6482ea47abdaa8f06534a1f70a27068a8bbe8ccc77de",
+ "format": 1
+ },
+ {
+ "name": "docs/fw_version_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7be0dd0318339c15b0d53461d922ff553319e254decdfb0a7abeebdde1739c1d",
+ "format": 1
+ },
+ {
+ "name": "docs/fru_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f6f81205f1488cf3aeee9b010900e8ea96f5c8f9cfc08cabb0fec0a38b39069e",
+ "format": 1
+ },
+ {
+ "name": "docs/fan_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5a1fb8385cee8b66f4fae40171d6005fb60e19fad902e7eb16073dc3586ba809",
+ "format": 1
+ },
+ {
+ "name": "docs/event_log_policy_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "923eb3470d1028c2175c93d6d68ad0b3b008751d79c9923bb35924f4564affe7",
+ "format": 1
+ },
+ {
+ "name": "docs/event_log_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fd55bf15c41930cec94487360a4440bdd81b8042efc0adbf9cc0379d2cdd393d",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_vlan_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "835d1b329c8b1517ee3aeb798171ca496e5b7890f705126ca436b9258794afbc",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_virtual_media_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "bf1af1f59006f84f2abe89cccd3af29e69deac5e5ea332df6aa41ef9523c2672",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_uid_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "535b426a0a21a5e60ec0730987929d6858a6a1d40afa356ccd60dddc6426138b",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_threshold_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7b7bee3c2e79c14030c36067ce89653f74f64be82377d413b2fda1477b0fd7d0",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_snmp_trap_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "cbc586f165be3d51fc142b9790177ece8a73a2dc4209cdb3d5419f01e3df8e92",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_snmp_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "23752a3a9c2bc543e1ea637d71c5e52c1affa984881a44df2922cc9050a6edf9",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_smtp_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "15bce11630530856ebf57676e5e6691254c8ef5c897eb933aadcc1c07ab99701",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_smtp_dest_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b5cccc8a3552dd2859424859dac80c7fd5c9e4603d08aa9478cb95ac95053512",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_smtp_com_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ad2c56891defc7d45e61d9c1ecea60eae353ce4b31a44323c193619dfc7f45f3",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_service_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0bde5d6e654e2bb7172acbb13472d8dc80965a9a85bc8a1073a129669bff6da9",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_restore_factory_default_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d56cf66b938d28c425e2a7ffdc2b27bbe587aa87b50133cbbb0f4578b33fec7a",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_psu_peak_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fb96a8ba1372ec8c51b94ca1e92739371f8a33293acf6f9c20a3ee7372292ca9",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_psu_config_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "51ce6709501ca0c732260637da283045e9b89e71b053e6f4f7513cc37fbc77d9",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_preserve_config_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "80228b222ddc428a49c0ff34624bdbbf9accd1c7e4ddc65703140efacc0e38d8",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_power_status_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "80413f82cb756224af3ad81b8b9a801294c3938307ddebb6178738a46210ce47",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_power_restore_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e68e6f01c223bf5aaa0db09bad6f337211ebdb2962434861fe0590ba4dd81290",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_power_budget_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ffe9f11c01b96791caee9bcf7bdb85cdf31df42c01c2b81e0e59aec97df9521e",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_pdisk_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0499ac63139b49aae97e771ee15aaa2e4e1452d293d06b873d6d9f4243a1752d",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_ntp_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5061093611d4ae78029b747b3aeb4ccfda1863957f9ec58fa4b75e02883aa71e",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_network_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b95c2225a2416a96c7a2b1b00105f6717556b050db19450ab3163735716a02eb",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_network_link_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6cc631c793e51490d9c99496f3aef75a25969c24066fc4ce90c7bb4d2b4bfe76",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_network_bond_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "369d0b507e14011c72e7e8439d37c1f9497aff33af680c948cc6b0cbe4d5d112",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_ncsi_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "da7c13bf49ceb9072c896fb024787c63320d33cb5f807f88878e69b4d287bff7",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_media_instance_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3df37495d68be3e5518d5451221f33521593b996713ff223334c1545b59209f5",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_manual_capture_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fbc78c8260fd10080496aa17672f747a0699ca613d080526d6421cc5baba0ac3",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_m6_log_setting_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b7a442039d7e7bba4802d5955353e1b6df5a7518b068512f4cdcabdc6fa61528",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_log_setting_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7689e0c9d8fb3a6b8dfdcbec028ca619fc76ad5a991266c8ed56b84a6b5b1d22",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_ldisk_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "eacff6fb205a8bc0b2a4d3068a0175254aa5b4abe3d691dda375a2449fa407f4",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_ldap_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "786e471e760887a5ab342808f17ea45f5013cc4c9ea8ed55a28bd0cfd50ea1ed",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_kvm_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d405e86fd6816138f177e611fa347110e7c79fba49c2e95117ccf284cf855d05",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_ipv6_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9a429056626127fbfa4042c1ce38980d839360b06617b1771d8b5480cb9844fd",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_ipv4_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9f22a39b31df592fda79850bdfabce1cfc48c03522eb5a42cbc3282e1c9e75d7",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_fru_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5fc8458e9b1883e83f8dcb8d9483c07314ebf7e2cf1175da2e3b9484a8c242a3",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_fan_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "32841e5459ad7fa7b5ec6193ac8aec300e58a15f4708a3eb8015d86334b2025c",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_event_log_policy_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "23a605db6a4f3cbe451c42f6cfb9792647907607fbd3f2054aa42b21cb81af84",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_dns_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e28f242a04d94e07bf6787fb2dbf53c1ab4be68be14dafd61a741f4eab7772ae",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_connect_media_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "68d99af1c9b114f2d08ab114610c074a17bc613064caa60490b2a35d0bc8c906",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_boot_option_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8f6eb8ca234c875f3c0c6cbd1022f0f59ea40209e0adae80e0347d8952f1a91b",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_boot_image_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d68392a30312e7b63962020bc0bee5a47e19f88a6426130748842d7bd8da7232",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_bios_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ef32b101c00e3acb4a7a3eae5e4b13e61af76cb9cc0d415cca0b7481f80cf183",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_auto_capture_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3784e9fe2b9d091b73798ba6e86d9a82343681f6e200dcedf8008f5eb51ec49c",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_alert_policy_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6fff27156b822c65b3f83bb46621c199bd1f37547b6cb5d253a4deaf31d513c4",
+ "format": 1
+ },
+ {
+ "name": "docs/edit_ad_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "eafb668f2061e1f734beff97e4af528cbd1404d964e335d96bbd005ef51219cc",
+ "format": 1
+ },
+ {
+ "name": "docs/download_manual_screenshot_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "28a36bac990288afae747403695a4860c649a94eb67f90c6f9bb76817d0503ac",
+ "format": 1
+ },
+ {
+ "name": "docs/download_auto_screenshot_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ee88aad005f07d2fbc98b7e88babf756264bb236ea44876d5b0104f9d18768a5",
+ "format": 1
+ },
+ {
+ "name": "docs/dns_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f00bb5713da0868badec729ddb560161b237c94fce627afb0ef8ef3f23af31fc",
+ "format": 1
+ },
+ {
+ "name": "docs/del_session_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a3e3af052eda644eaa0400fd4b90de46703fe92fcd0f809dc3c986e4024d6a98",
+ "format": 1
+ },
+ {
+ "name": "docs/cpu_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "aeda31593a5856c16fff22a9ab5ac1a06b21a08cc46f17e2e22f8e4d9f0d7e9e",
+ "format": 1
+ },
+ {
+ "name": "docs/connect_media_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ac9b10030cec707f95ab385d46f868a1548c831e67ba1158facc606fb965e197",
+ "format": 1
+ },
+ {
+ "name": "docs/collect_log_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c5ee6b33475684b19efcdaf5500b053a09cdbdf35c7242b6619fb1467c6efde4",
+ "format": 1
+ },
+ {
+ "name": "docs/collect_blackbox_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5c4a606f19ad7cbde342aa3e63e56ec62fc6af2259b5c4e1b1d80306a842ab62",
+ "format": 1
+ },
+ {
+ "name": "docs/clear_system_log_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "23d0045ec209dc021c44b6635b281681f7bb505ae30270acd579dc97e8e9aa9d",
+ "format": 1
+ },
+ {
+ "name": "docs/clear_event_log_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9e2b6ffc3f6ff60f0a52bc7ee17ddae9a0de3b3b3bfe6aea2d8d5bce499ed5e1",
+ "format": 1
+ },
+ {
+ "name": "docs/clear_audit_log_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fa6c39c0992d2f6cb442c5dae4a6e6e84e96ccbfa48f59cb8e8d374ba8f266c1",
+ "format": 1
+ },
+ {
+ "name": "docs/boot_option_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e844dce1fa56828c3fe63f456021a500152d5f4e1e0beb17d09230b7fcbb1ae",
+ "format": 1
+ },
+ {
+ "name": "docs/boot_image_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "efa7088966a327074beca17a8d715768eb4df6a3a3cd8ca4f1086a8ae097b539",
+ "format": 1
+ },
+ {
+ "name": "docs/bmc_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "85c4427ae179e1d4a00d9e11edb350dfeb7a2255ac2c87d2b2d1f331e815552d",
+ "format": 1
+ },
+ {
+ "name": "docs/bios_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7a726975d2dd0957ad0b7b5a134b4667eb44912447dd1692363e46cda8c6f4d0",
+ "format": 1
+ },
+ {
+ "name": "docs/bios_import_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e61d538abddd2feab711a1df6dbbe2ef50e236e3ecb9921720b315c7081673c3",
+ "format": 1
+ },
+ {
+ "name": "docs/bios_export_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a47e97dbad38ef826446b795950c1d9cfab5d75b2f4116f8fa49cdaeefbbb583",
+ "format": 1
+ },
+ {
+ "name": "docs/backup_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a04e11939760ab8fb8a97837fedbe2aa1d8fc7eb3ce37f6ca2a69106b7d05076",
+ "format": 1
+ },
+ {
+ "name": "docs/backplane_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "bf4540ab53dde798bb68299673053c9e0bc599b3bf49792c3e905edc0952ec1f",
+ "format": 1
+ },
+ {
+ "name": "docs/auto_capture_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d70866018c58f8543c88db6aef4156b50f699a35fe3990f3623ab7eeae44e685",
+ "format": 1
+ },
+ {
+ "name": "docs/audit_log_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3a264f0a5b9d20a41ea10b41fbeb92e4263a334c3c05e691fdc94eb16f264a62",
+ "format": 1
+ },
+ {
+ "name": "docs/alert_policy_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e99691ab33d858ae2a76d5a08bb71addc8d8ee9df516d3fd87e4f30ca2d48ea0",
+ "format": 1
+ },
+ {
+ "name": "docs/ad_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a6b7938b7a342eb40872d170cc6d0cb0cffe6af04f5ac4df75406c577d35e7c7",
+ "format": 1
+ },
+ {
+ "name": "docs/ad_group_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ad52e37b3e590ca3d0b606a621b29b11db48ab401bf05a50541a585bf9b93f8a",
+ "format": 1
+ },
+ {
+ "name": "docs/ad_group_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b735e6d3c0c809184fbd9067d3b58666db2729c70f42a8f139e185e247cf52ba",
+ "format": 1
+ },
+ {
+ "name": "docs/add_ldisk_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "51013b1fd0005c7f7e982d203162e415c4d7b729e60c641b731bbeaaf1db39bd",
+ "format": 1
+ },
+ {
+ "name": "docs/adapter_info_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a84a72e8d65ea687be9527720e0f62d18ac6689bc59111b2479cd879d117a130",
+ "format": 1
+ },
+ {
+ "name": "changelogs",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "changelogs/fragments",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "changelogs/fragments/.keep",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
+ "name": "changelogs/config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "53143d6c6656a23762c2ea43ce7115b0ac71abd1e74d97775128cfc7e8c832bf",
+ "format": 1
+ },
+ {
+ "name": "changelogs/changelog.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "68423ef04f6c56c34a208801cde3797cc62c558d55aad8077742d82a71f987b8",
+ "format": 1
+ },
+ {
+ "name": "changelogs/.plugin-cache.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b6d6113717e0e315285c7e0c7010e6c5536edab02ec7233403548853ad3e2a53",
+ "format": 1
+ },
+ {
+ "name": ".idea",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": ".idea/inspectionProfiles",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": ".idea/inspectionProfiles/profiles_settings.xml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6172c5997eeb3cd19c9ca2b5b97d6e2983cdd1fa60b2460d7bbb74055edcaa46",
+ "format": 1
+ },
+ {
+ "name": ".idea/workspace.xml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9daa015853a1dec3af372ca87efd1b8327e25ac09934a58758c942dc3989589c",
+ "format": 1
+ },
+ {
+ "name": ".idea/vcs.xml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "136f8b0a20e3e16f5b60e8505219c34746e1ec62c68433f4f8ec97eefe3aa038",
+ "format": 1
+ },
+ {
+ "name": ".idea/modules.xml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "254afa59eaee9e4ae7f4f7d499730e0f1aed66c13e0ca7ebaa49da891961040c",
+ "format": 1
+ },
+ {
+ "name": ".idea/kaytus.ksmanage.iml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ad3cb481713f7a74e29ed42d121b8e94ca3bd51e262c2d6122a334f06dace88a",
+ "format": 1
+ },
+ {
+ "name": ".idea/.gitignore",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e2e37ed60c50d8e41c42aa9f3505642a5f1689e67fb6bc7fe8a06dab09a0fa96",
+ "format": 1
+ },
+ {
+ "name": ".github",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": ".github/workflows",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": ".github/workflows/ansible-test.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "57eae27acf8e95c2a7a54737757dc458d7e1d92c528147c4335694926fb02afc",
+ "format": 1
+ },
+ {
+ "name": "requirements.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ef4f74801ee735132cee77b4d649b81c7f95233d14aa409f565250d903134313",
+ "format": 1
+ },
+ {
+ "name": "README.md",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b4a50b7a90cd6656554f78cf467d5f6dbe4d6050c1668157dfc1ca487a3aa6f7",
+ "format": 1
+ },
+ {
+ "name": "LICENSE",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "230184f60bae2feaf244f10a8bac053c8ff33a183bcc365b4d8b876d2b7f4809",
+ "format": 1
+ },
+ {
+ "name": "CODE_OF_CONDUCT.md",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "855a46ca79e3a1b68c4e8d344881e4b8321ab63fe1c4d15a5ce35856f20b7d9a",
+ "format": 1
+ },
+ {
+ "name": "CHANGELOG.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "62cee53d75ee78f45b5e494cf40bfe073eb859d03cd8006df5e51ff72795cdff",
+ "format": 1
+ }
+ ],
+ "format": 1
+} \ No newline at end of file
diff --git a/ansible_collections/community/sap/LICENSE b/ansible_collections/kaytus/ksmanage/LICENSE
index f288702d2..3877ae0a7 100644
--- a/ansible_collections/community/sap/LICENSE
+++ b/ansible_collections/kaytus/ksmanage/LICENSE
@@ -1,674 +1,674 @@
- GNU GENERAL PUBLIC LICENSE
- Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
- The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works. By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users. We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors. You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
- To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights. Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received. You must make sure that they, too, receive
-or can get the source code. And you must show them these terms so they
-know their rights.
-
- Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
- For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software. For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
- Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so. This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software. The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable. Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products. If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
- Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary. To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS
-
- 0. Definitions.
-
- "This License" refers to version 3 of the GNU General Public License.
-
- "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
- "The Program" refers to any copyrightable work licensed under this
-License. Each licensee is addressed as "you". "Licensees" and
-"recipients" may be individuals or organizations.
-
- To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy. The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
- A "covered work" means either the unmodified Program or a work based
-on the Program.
-
- To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy. Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
- To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies. Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
- An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License. If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
- 1. Source Code.
-
- The "source code" for a work means the preferred form of the work
-for making modifications to it. "Object code" means any non-source
-form of a work.
-
- A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
- The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form. A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
- The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities. However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work. For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
- The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
- The Corresponding Source for a work in source code form is that
-same work.
-
- 2. Basic Permissions.
-
- All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met. This License explicitly affirms your unlimited
-permission to run the unmodified Program. The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work. This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
- You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force. You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright. Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
- Conveying under any other circumstances is permitted solely under
-the conditions stated below. Sublicensing is not allowed; section 10
-makes it unnecessary.
-
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
- No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
- When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
- 4. Conveying Verbatim Copies.
-
- You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
- You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
- 5. Conveying Modified Source Versions.
-
- You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
- a) The work must carry prominent notices stating that you modified
- it, and giving a relevant date.
-
- b) The work must carry prominent notices stating that it is
- released under this License and any conditions added under section
- 7. This requirement modifies the requirement in section 4 to
- "keep intact all notices".
-
- c) You must license the entire work, as a whole, under this
- License to anyone who comes into possession of a copy. This
- License will therefore apply, along with any applicable section 7
- additional terms, to the whole of the work, and all its parts,
- regardless of how they are packaged. This License gives no
- permission to license the work in any other way, but it does not
- invalidate such permission if you have separately received it.
-
- d) If the work has interactive user interfaces, each must display
- Appropriate Legal Notices; however, if the Program has interactive
- interfaces that do not display Appropriate Legal Notices, your
- work need not make them do so.
-
- A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit. Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
- 6. Conveying Non-Source Forms.
-
- You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
- a) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by the
- Corresponding Source fixed on a durable physical medium
- customarily used for software interchange.
-
- b) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that product
- model, to give anyone who possesses the object code either (1) a
- copy of the Corresponding Source for all the software in the
- product that is covered by this License, on a durable physical
- medium customarily used for software interchange, for a price no
- more than your reasonable cost of physically performing this
- conveying of source, or (2) access to copy the
- Corresponding Source from a network server at no charge.
-
- c) Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
- alternative is allowed only occasionally and noncommercially, and
- only if you received the object code with such an offer, in accord
- with subsection 6b.
-
- d) Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to the
- Corresponding Source in the same way through the same place at no
- further charge. You need not require recipients to copy the
- Corresponding Source along with the object code. If the place to
- copy the object code is a network server, the Corresponding Source
- may be on a different server (operated by you or a third party)
- that supports equivalent copying facilities, provided you maintain
- clear directions next to the object code saying where to find the
- Corresponding Source. Regardless of what server hosts the
- Corresponding Source, you remain obligated to ensure that it is
- available for as long as needed to satisfy these requirements.
-
- e) Convey the object code using peer-to-peer transmission, provided
- you inform other peers where the object code and Corresponding
- Source of the work are being offered to the general public at no
- charge under subsection 6d.
-
- A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
- A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling. In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage. For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product. A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
- "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source. The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
- If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information. But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
- The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed. Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
- Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
- 7. Additional Terms.
-
- "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law. If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
- When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it. (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.) You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
- Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
- a) Disclaiming warranty or limiting liability differently from the
- terms of sections 15 and 16 of this License; or
-
- b) Requiring preservation of specified reasonable legal notices or
- author attributions in that material or in the Appropriate Legal
- Notices displayed by works containing it; or
-
- c) Prohibiting misrepresentation of the origin of that material, or
- requiring that modified versions of such material be marked in
- reasonable ways as different from the original version; or
-
- d) Limiting the use for publicity purposes of names of licensors or
- authors of the material; or
-
- e) Declining to grant rights under trademark law for use of some
- trade names, trademarks, or service marks; or
-
- f) Requiring indemnification of licensors and authors of that
- material by anyone who conveys the material (or modified versions of
- it) with contractual assumptions of liability to the recipient, for
- any liability that these contractual assumptions directly impose on
- those licensors and authors.
-
- All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10. If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term. If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
- If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
- Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
- 8. Termination.
-
- You may not propagate or modify a covered work except as expressly
-provided under this License. Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
- However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
- Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
- Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
- 9. Acceptance Not Required for Having Copies.
-
- You are not required to accept this License in order to receive or
-run a copy of the Program. Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance. However,
-nothing other than this License grants you permission to propagate or
-modify any covered work. These actions infringe copyright if you do
-not accept this License. Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
- 10. Automatic Licensing of Downstream Recipients.
-
- Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License. You are not responsible
-for enforcing compliance by third parties with this License.
-
- An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations. If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
- You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License. For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
- 11. Patents.
-
- A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based. The
-work thus licensed is called the contributor's "contributor version".
-
- A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version. For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
- Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
- In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement). To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
- If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients. "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
- If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
- A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License. You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
- Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
- 12. No Surrender of Others' Freedom.
-
- If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all. For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
- 13. Use with the GNU Affero General Public License.
-
- Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work. The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
- 14. Revised Versions of this License.
-
- The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
- If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
- Later license versions may give you additional or different
-permissions. However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
- 15. Disclaimer of Warranty.
-
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. Limitation of Liability.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
- 17. Interpretation of Sections 15 and 16.
-
- If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program 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.
-
- This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
- If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
- <program> Copyright (C) <year> <name of author>
- This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
- You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<https://www.gnu.org/licenses/>.
-
- The GNU General Public License does not permit incorporating your program
-into proprietary programs. If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License. But first, please read
-<https://www.gnu.org/licenses/why-not-lgpl.html>.
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program 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.
+
+ This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<https://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<https://www.gnu.org/licenses/why-not-lgpl.html>.
diff --git a/ansible_collections/kaytus/ksmanage/MANIFEST.json b/ansible_collections/kaytus/ksmanage/MANIFEST.json
new file mode 100644
index 000000000..dc8dd8bf1
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/MANIFEST.json
@@ -0,0 +1,36 @@
+{
+ "collection_info": {
+ "namespace": "kaytus",
+ "name": "ksmanage",
+ "version": "1.2.1",
+ "authors": [
+ "Baoshan Wang <wangbaoshan@ieisystem.com>"
+ ],
+ "readme": "README.md",
+ "tags": [
+ "kaytus",
+ "ksmanage",
+ "server",
+ "manager",
+ "tools"
+ ],
+ "description": "kaytus Server supports ansible management device.",
+ "license": [
+ "GPL-2.0-or-later"
+ ],
+ "license_file": null,
+ "dependencies": {},
+ "repository": "https://github.com/ieisystem/kaytus.ksmanage",
+ "documentation": "https://ieisystem.github.io/kaytus.ksmanage-docs/index.html",
+ "homepage": "https://github.com/ieisystem/kaytus.ksmanage",
+ "issues": "https://github.com/ieisystem/kaytus.ksmanage/issues"
+ },
+ "file_manifest_file": {
+ "name": "FILES.json",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7f95f54b58ee68784af7988b3b3b4c79100647265486dfd286f45fc6537584da",
+ "format": 1
+ },
+ "format": 1
+} \ No newline at end of file
diff --git a/ansible_collections/kaytus/ksmanage/README.md b/ansible_collections/kaytus/ksmanage/README.md
new file mode 100644
index 000000000..742aec87b
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/README.md
@@ -0,0 +1,92 @@
+# kaytus ksmanage Collection
+
+This repo contains the `kaytus,ksmanage` Ansible Collection. Collections are used to manage common KAYTUS servers, and Basic management of the server based on restful interface. Including server BMC configuration, firmware upgrade, BIOS configuration and other functions.
+
+.
+
+## Tested with Ansible
+
+Tested with the current Ansible 2.10 releases and the current development version of Ansible. Ansible versions before 2.10.0 are not supported.
+
+## External requirements
+
+Circumstance instruction:
+Ansible module is suitable for ansible version 2.10
+
+Main steps:
+
+Install Ansible 2.10
+Install inManage
+<!--- A step-by-step reproduction of the problem is helpful if there is no related issue -->
+Thes modules require the following to be installed on the control node:
+
+* Python 3.7 or later
+* [Ansible](http://www.ansible.com) 2.10 or later
+* [ieisystem support] [inManage](https://github.com/ieisystem/inManage) 1.1.0 or later
+
+## Included content
+
+Please check the included content on the [Ansible Galaxy page for this collection](https://galaxy.ansible.com/ui/repo/published/kaytus/ksmanage)
+
+## Using this collection
+
+Before using the General community collection, you need to install the collection with the `ansible-galaxy` CLI:
+
+ ansible-galaxy collection install kaytus.ksmanage
+
+You can also include it in a `requirements.yml` file and install it via `ansible-galaxy collection install -r requirements.yml` using the format:
+
+```yaml
+collections:
+- name: kaytus.ksmanage
+```
+
+See [Ansible Using collections](https://ieisystem.github.io/kaytus.ksmanage-docs/index.html) for more details.
+
+## Contributing to this collection
+
+If you want to develop new content for this collection or improve what is already here, the easiest way to work on the collection is to clone it into one of the configured [`COLLECTIONS_PATH`](https://docs.ansible.com/ansible/latest/reference_appendices/config.html#collections-paths), and work on it there.
+
+You can find more information in the [developer guide for collections](https://docs.ansible.com/ansible/devel/dev_guide/developing_collections.html#contributing-to-collections), and in the [Ansible kaytus.ksmanage Guide](https://ieisystem.github.io/kaytus.ksmanage-docs/index.html).
+
+### Running tests
+
+See [here](https://docs.ansible.com/ansible/devel/dev_guide/developing_collections.html#testing-collections).
+
+### Communication
+
+wangbaoshan@ieisystem.com
+
+
+### Publishing New Version
+
+Basic instructions without release branches:
+
+1. Create `changelogs/fragments/<version>.yml` with `release_summary:` section (which must be a string, not a list).
+2. Run `antsibull-changelog release --collection-flatmap yes`
+3. Make sure `CHANGELOG.rst` and `changelogs/changelog.yaml` are added to git, and the deleted fragments have been removed.
+4. Tag the commit with `<version>`. Push changes and tag to the main repository.
+
+## Release notes
+
+See the [changelog](https://github.com/ieisystem/kaytus.ksmanage/blob/main/CHANGELOG.rst).
+
+## Roadmap
+
+See [this issue](https://github.com/ieisystem/kaytus.ksmanage/issues/3) for information on releasing, versioning and deprecation.
+
+In general, we plan to release a major version every year, and minor versions every three months. Major versions can contain breaking changes, while minor versions only contain new features and bugfixes.
+
+
+## More information
+
+- [Ansible Collection overview](https://github.com/ansible-collections/overview)
+- [Ansible User guide](https://docs.ansible.com/ansible/latest/user_guide/index.html)
+- [Ansible Developer guide](https://docs.ansible.com/ansible/latest/dev_guide/index.html)
+- [Ansible Community code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html)
+
+## Licensing
+
+GNU General Public License v3.0 or later.
+
+See [COPYING](https://www.gnu.org/licenses/gpl-3.0.txt) to see the full text.
diff --git a/ansible_collections/kaytus/ksmanage/changelogs/.plugin-cache.yaml b/ansible_collections/kaytus/ksmanage/changelogs/.plugin-cache.yaml
new file mode 100644
index 000000000..87cb7b2c1
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/changelogs/.plugin-cache.yaml
@@ -0,0 +1,655 @@
+plugins:
+ become: {}
+ cache: {}
+ callback: {}
+ cliconf: {}
+ connection: {}
+ httpapi: {}
+ inventory: {}
+ lookup: {}
+ module:
+ ad_group:
+ description: Manage active directory group information
+ name: ad_group
+ namespace: ''
+ version_added: 1.0.0
+ ad_group_info:
+ description: Get active directory group information
+ name: ad_group_info
+ namespace: ''
+ version_added: 1.0.0
+ ad_info:
+ description: Get active directory information
+ name: ad_info
+ namespace: ''
+ version_added: 1.0.0
+ adapter_info:
+ description: Get adapter information
+ name: adapter_info
+ namespace: ''
+ version_added: 1.0.0
+ add_ldisk:
+ description: Create logical disk
+ name: add_ldisk
+ namespace: ''
+ version_added: 1.0.0
+ alert_policy_info:
+ description: Get alert policy
+ name: alert_policy_info
+ namespace: ''
+ version_added: 1.0.0
+ audit_log_info:
+ description: Get BMC audit log information
+ name: audit_log_info
+ namespace: ''
+ version_added: 1.0.0
+ auto_capture_info:
+ description: Get auto capture screen information
+ name: auto_capture_info
+ namespace: ''
+ version_added: 1.0.0
+ backplane_info:
+ description: Get disk backplane information
+ name: backplane_info
+ namespace: ''
+ version_added: 1.0.0
+ backup:
+ description: Backup server settings
+ name: backup
+ namespace: ''
+ version_added: 1.0.0
+ bios_export:
+ description: Export BIOS config
+ name: bios_export
+ namespace: ''
+ version_added: 1.0.0
+ bios_import:
+ description: Import BIOS config
+ name: bios_import
+ namespace: ''
+ version_added: 1.0.0
+ bios_info:
+ description: Get BIOS setup
+ name: bios_info
+ namespace: ''
+ version_added: 1.0.0
+ bmc_info:
+ description: Get BMC information
+ name: bmc_info
+ namespace: ''
+ version_added: 1.0.0
+ boot_image_info:
+ description: Get bmc boot image information
+ name: boot_image_info
+ namespace: ''
+ version_added: 1.0.0
+ boot_option_info:
+ description: Get BIOS boot options
+ name: boot_option_info
+ namespace: ''
+ version_added: 1.0.0
+ clear_audit_log:
+ description: Clear BMC audit log
+ name: clear_audit_log
+ namespace: ''
+ version_added: 1.0.0
+ clear_event_log:
+ description: Clear event log
+ name: clear_event_log
+ namespace: ''
+ version_added: 1.0.0
+ clear_system_log:
+ description: Clear BMC system log
+ name: clear_system_log
+ namespace: ''
+ version_added: 1.0.0
+ collect_blackbox:
+ description: Collect blackbox log
+ name: collect_blackbox
+ namespace: ''
+ version_added: 1.0.0
+ collect_log:
+ description: Collect logs
+ name: collect_log
+ namespace: ''
+ version_added: 1.0.0
+ connect_media_info:
+ description: Get remote images redirection information
+ name: connect_media_info
+ namespace: ''
+ version_added: 1.0.0
+ cpu_info:
+ description: Get CPU information
+ name: cpu_info
+ namespace: ''
+ version_added: 1.0.0
+ del_session:
+ description: Delete session
+ name: del_session
+ namespace: ''
+ version_added: 1.0.0
+ dns_info:
+ description: Get dns information
+ name: dns_info
+ namespace: ''
+ version_added: 1.0.0
+ download_auto_screenshot:
+ description: Download auto screenshots
+ name: download_auto_screenshot
+ namespace: ''
+ version_added: 1.0.0
+ download_manual_screenshot:
+ description: Download manual screenshots
+ name: download_manual_screenshot
+ namespace: ''
+ version_added: 1.0.0
+ edit_ad:
+ description: Set active directory information
+ name: edit_ad
+ namespace: ''
+ version_added: 1.0.0
+ edit_alert_policy:
+ description: Set alert policy
+ name: edit_alert_policy
+ namespace: ''
+ version_added: 1.0.0
+ edit_auto_capture:
+ description: Set auto capture screen
+ name: edit_auto_capture
+ namespace: ''
+ version_added: 1.0.0
+ edit_bios:
+ description: Set BIOS setup attributes
+ name: edit_bios
+ namespace: ''
+ version_added: 1.0.0
+ edit_boot_image:
+ description: Set bmc boot image
+ name: edit_boot_image
+ namespace: ''
+ version_added: 1.0.0
+ edit_boot_option:
+ description: Set BIOS boot options
+ name: edit_boot_option
+ namespace: ''
+ version_added: 1.0.0
+ edit_connect_media:
+ description: Start/Stop virtual media Image
+ name: edit_connect_media
+ namespace: ''
+ version_added: 1.0.0
+ edit_dns:
+ description: Set dns information
+ name: edit_dns
+ namespace: ''
+ version_added: 1.0.0
+ edit_event_log_policy:
+ description: Set event log policy
+ name: edit_event_log_policy
+ namespace: ''
+ version_added: 1.0.0
+ edit_fan:
+ description: Set fan information
+ name: edit_fan
+ namespace: ''
+ version_added: 1.0.0
+ edit_fru:
+ description: Set fru settings
+ name: edit_fru
+ namespace: ''
+ version_added: 1.0.0
+ edit_ipv4:
+ description: Set ipv4 information
+ name: edit_ipv4
+ namespace: ''
+ version_added: 1.0.0
+ edit_ipv6:
+ description: Set ipv6 information
+ name: edit_ipv6
+ namespace: ''
+ version_added: 1.0.0
+ edit_kvm:
+ description: Set KVM
+ name: edit_kvm
+ namespace: ''
+ version_added: 1.0.0
+ edit_ldap:
+ description: Set ldap information
+ name: edit_ldap
+ namespace: ''
+ version_added: 1.0.0
+ edit_ldisk:
+ description: Set logical disk
+ name: edit_ldisk
+ namespace: ''
+ version_added: 1.0.0
+ edit_log_setting:
+ description: Set bmc system and audit log setting
+ name: edit_log_setting
+ namespace: ''
+ version_added: 1.0.0
+ edit_m6_log_setting:
+ description: Set bmc system and audit log setting
+ name: edit_m6_log_setting
+ namespace: ''
+ version_added: 1.0.0
+ edit_manual_capture:
+ description: Set manual capture screen
+ name: edit_manual_capture
+ namespace: ''
+ version_added: 1.0.0
+ edit_media_instance:
+ description: Set Virtual Media Instance
+ name: edit_media_instance
+ namespace: ''
+ version_added: 1.0.0
+ edit_ncsi:
+ description: Set ncsi information
+ name: edit_ncsi
+ namespace: ''
+ version_added: 1.0.0
+ edit_network:
+ description: Set network information
+ name: edit_network
+ namespace: ''
+ version_added: 1.0.0
+ edit_network_bond:
+ description: Set network bond
+ name: edit_network_bond
+ namespace: ''
+ version_added: 1.0.0
+ edit_network_link:
+ description: Set network link
+ name: edit_network_link
+ namespace: ''
+ version_added: 1.0.0
+ edit_ntp:
+ description: Set NTP
+ name: edit_ntp
+ namespace: ''
+ version_added: 1.0.0
+ edit_pdisk:
+ description: Set physical disk
+ name: edit_pdisk
+ namespace: ''
+ version_added: 1.0.0
+ edit_power_budget:
+ description: Set power budget information
+ name: edit_power_budget
+ namespace: ''
+ version_added: 1.0.0
+ edit_power_restore:
+ description: Set power restore information
+ name: edit_power_restore
+ namespace: ''
+ version_added: 1.0.0
+ edit_power_status:
+ description: Set power status information
+ name: edit_power_status
+ namespace: ''
+ version_added: 1.0.0
+ edit_preserve_config:
+ description: Set preserve config
+ name: edit_preserve_config
+ namespace: ''
+ version_added: 1.0.0
+ edit_psu_config:
+ description: Set psu config information
+ name: edit_psu_config
+ namespace: ''
+ version_added: 1.0.0
+ edit_psu_peak:
+ description: Set psu peak information
+ name: edit_psu_peak
+ namespace: ''
+ version_added: 1.0.0
+ edit_restore_factory_default:
+ description: Set preserver config
+ name: edit_restore_factory_default
+ namespace: ''
+ version_added: 1.0.0
+ edit_service:
+ description: Set service settings
+ name: edit_service
+ namespace: ''
+ version_added: 1.0.0
+ edit_smtp:
+ description: Set SMTP information
+ name: edit_smtp
+ namespace: ''
+ version_added: 1.0.0
+ edit_smtp_com:
+ description: Set SMTP information
+ name: edit_smtp_com
+ namespace: ''
+ version_added: 1.0.0
+ edit_smtp_dest:
+ description: Set SMTP information
+ name: edit_smtp_dest
+ namespace: ''
+ version_added: 1.0.0
+ edit_snmp:
+ description: Set snmp
+ name: edit_snmp
+ namespace: ''
+ version_added: 1.0.0
+ edit_snmp_trap:
+ description: Set snmp trap
+ name: edit_snmp_trap
+ namespace: ''
+ version_added: 1.0.0
+ edit_threshold:
+ description: Set threshold information
+ name: edit_threshold
+ namespace: ''
+ version_added: 1.0.0
+ edit_uid:
+ description: Set UID
+ name: edit_uid
+ namespace: ''
+ version_added: 1.0.0
+ edit_virtual_media:
+ description: Set virtual media
+ name: edit_virtual_media
+ namespace: ''
+ version_added: 1.0.0
+ edit_vlan:
+ description: Set vlan information
+ name: edit_vlan
+ namespace: ''
+ version_added: 1.0.0
+ event_log_info:
+ description: Get event log information
+ name: event_log_info
+ namespace: ''
+ version_added: 1.0.0
+ event_log_policy_info:
+ description: Get event log policy information
+ name: event_log_policy_info
+ namespace: ''
+ version_added: 1.0.0
+ fan_info:
+ description: Get fan information
+ name: fan_info
+ namespace: ''
+ version_added: 1.0.0
+ fru_info:
+ description: Get fru information
+ name: fru_info
+ namespace: ''
+ version_added: 1.0.0
+ fw_version_info:
+ description: Get firmware version information
+ name: fw_version_info
+ namespace: ''
+ version_added: 1.0.0
+ gpu_info:
+ description: Get GPU information
+ name: gpu_info
+ namespace: ''
+ version_added: 1.0.0
+ hard_disk_info:
+ description: Get hard disk information
+ name: hard_disk_info
+ namespace: ''
+ version_added: 1.0.0
+ hba_info:
+ description: Get CPU information
+ name: hba_info
+ namespace: ''
+ version_added: 1.0.0
+ kvm_info:
+ description: Get KVM information
+ name: kvm_info
+ namespace: ''
+ version_added: 1.0.0
+ ldap_group:
+ description: Manage ldap group information
+ name: ldap_group
+ namespace: ''
+ version_added: 1.0.0
+ ldap_group_info:
+ description: Get ldap group information
+ name: ldap_group_info
+ namespace: ''
+ version_added: 1.0.0
+ ldap_info:
+ description: Get ldap information
+ name: ldap_info
+ namespace: ''
+ version_added: 1.0.0
+ ldisk_info:
+ description: Get logical disks information
+ name: ldisk_info
+ namespace: ''
+ version_added: 1.0.0
+ log_setting_info:
+ description: Get bmc log setting information
+ name: log_setting_info
+ namespace: ''
+ version_added: 1.0.0
+ media_instance_info:
+ description: Get Virtual Media Instance information
+ name: media_instance_info
+ namespace: ''
+ version_added: 1.0.0
+ mem_info:
+ description: Get memory information
+ name: mem_info
+ namespace: ''
+ version_added: 1.0.0
+ ncsi_info:
+ description: Get ncsi information
+ name: ncsi_info
+ namespace: ''
+ version_added: 1.0.0
+ network_bond_info:
+ description: Get network bond information
+ name: network_bond_info
+ namespace: ''
+ version_added: 1.0.0
+ network_info:
+ description: Get network information
+ name: network_info
+ namespace: ''
+ version_added: 1.0.0
+ network_link_info:
+ description: Get network link information
+ name: network_link_info
+ namespace: ''
+ version_added: 1.0.0
+ ntp_info:
+ description: Get NTP information
+ name: ntp_info
+ namespace: ''
+ version_added: 1.0.0
+ onboard_disk_info:
+ description: Get onboard disks information
+ name: onboard_disk_info
+ namespace: ''
+ version_added: 1.0.0
+ pcie_info:
+ description: Get PCIE information
+ name: pcie_info
+ namespace: ''
+ version_added: 1.0.0
+ pdisk_info:
+ description: Get physical disks information
+ name: pdisk_info
+ namespace: ''
+ version_added: 1.0.0
+ power_budget_info:
+ description: Get power budget information
+ name: power_budget_info
+ namespace: ''
+ version_added: 1.0.0
+ power_consumption_info:
+ description: Get power consumption information
+ name: power_consumption_info
+ namespace: ''
+ version_added: 1.0.0
+ power_restore_info:
+ description: Get power restore information
+ name: power_restore_info
+ namespace: ''
+ version_added: 1.0.0
+ power_status_info:
+ description: Get power status information
+ name: power_status_info
+ namespace: ''
+ version_added: 1.0.0
+ preserve_config_info:
+ description: Get preserve config information
+ name: preserve_config_info
+ namespace: ''
+ version_added: 1.0.0
+ psu_config_info:
+ description: Get psu config information
+ name: psu_config_info
+ namespace: ''
+ version_added: 1.0.0
+ psu_info:
+ description: Get psu information
+ name: psu_info
+ namespace: ''
+ version_added: 1.0.0
+ psu_peak_info:
+ description: Get psu peak information
+ name: psu_peak_info
+ namespace: ''
+ version_added: 1.0.0
+ raid_info:
+ description: Get RAID/HBA card and controller information
+ name: raid_info
+ namespace: ''
+ version_added: 1.0.0
+ reset_bmc:
+ description: BMC reset
+ name: reset_bmc
+ namespace: ''
+ version_added: 1.0.0
+ reset_kvm:
+ description: KVM reset
+ name: reset_kvm
+ namespace: ''
+ version_added: 1.0.0
+ restore:
+ description: Restore server settings
+ name: restore
+ namespace: ''
+ version_added: 1.0.0
+ self_test_info:
+ description: Get self test information
+ name: self_test_info
+ namespace: ''
+ version_added: 1.0.0
+ sensor_info:
+ description: Get sensor information
+ name: sensor_info
+ namespace: ''
+ version_added: 1.0.0
+ server_info:
+ description: Get server status information
+ name: server_info
+ namespace: ''
+ version_added: 1.0.0
+ service_info:
+ description: Get service information
+ name: service_info
+ namespace: ''
+ version_added: 1.0.0
+ session_info:
+ description: Get online session information
+ name: session_info
+ namespace: ''
+ version_added: 1.0.0
+ smtp_info:
+ description: Get SMTP information
+ name: smtp_info
+ namespace: ''
+ version_added: 1.0.0
+ snmp_info:
+ description: Get snmp get/set information
+ name: snmp_info
+ namespace: ''
+ version_added: 1.0.0
+ snmp_trap_info:
+ description: Get snmp trap information
+ name: snmp_trap_info
+ namespace: ''
+ version_added: 1.0.0
+ support_info:
+ description: Get support information
+ name: support_info
+ namespace: ''
+ version_added: 1.0.0
+ system_log_info:
+ description: Get BMC system log information
+ name: system_log_info
+ namespace: ''
+ version_added: 1.0.0
+ temp_info:
+ description: Get temp information
+ name: temp_info
+ namespace: ''
+ version_added: 1.0.0
+ threshold_info:
+ description: Get threshold information
+ name: threshold_info
+ namespace: ''
+ version_added: 1.0.0
+ uid_info:
+ description: Get UID information
+ name: uid_info
+ namespace: ''
+ version_added: 1.0.0
+ update_cpld:
+ description: Update CPLD
+ name: update_cpld
+ namespace: ''
+ version_added: 1.0.0
+ update_fw:
+ description: Update firmware
+ name: update_fw
+ namespace: ''
+ version_added: 1.0.0
+ update_psu:
+ description: Update PSU
+ name: update_psu
+ namespace: ''
+ version_added: 1.0.0
+ user:
+ description: Manage user
+ name: user
+ namespace: ''
+ version_added: 1.0.0
+ user_group:
+ description: Manage user group
+ name: user_group
+ namespace: ''
+ version_added: 1.0.0
+ user_group_info:
+ description: Get user group information
+ name: user_group_info
+ namespace: ''
+ version_added: 1.0.0
+ user_info:
+ description: Get user information
+ name: user_info
+ namespace: ''
+ version_added: 1.0.0
+ virtual_media_info:
+ description: Get Virtual Media information
+ name: virtual_media_info
+ namespace: ''
+ version_added: 1.0.0
+ volt_info:
+ description: Get volt information
+ name: volt_info
+ namespace: ''
+ version_added: 1.0.0
+ netconf: {}
+ shell: {}
+ strategy: {}
+ vars: {}
+version: 1.2.1
diff --git a/ansible_collections/kaytus/ksmanage/changelogs/changelog.yaml b/ansible_collections/kaytus/ksmanage/changelogs/changelog.yaml
new file mode 100644
index 000000000..7de44986b
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/changelogs/changelog.yaml
@@ -0,0 +1,459 @@
+ancestor: null
+releases:
+ 1.0.0:
+ changes:
+ bugfixes:
+ - Modify the inmanage error referenced in modules utils.
+ major_changes:
+ - add all modules.
+ minor_changes:
+ - Modify the README.md file version to publish the reference link.
+ fragments:
+ - 1-add_modules.yaml
+ - 2-edit_module_utils.yaml
+ - 3-edit_readme.yaml
+ modules:
+ - description: Manage active directory group information
+ name: ad_group
+ namespace: ''
+ - description: Get active directory group information
+ name: ad_group_info
+ namespace: ''
+ - description: Get active directory information
+ name: ad_info
+ namespace: ''
+ - description: Get adapter information
+ name: adapter_info
+ namespace: ''
+ - description: Create logical disk
+ name: add_ldisk
+ namespace: ''
+ - description: Get alert policy
+ name: alert_policy_info
+ namespace: ''
+ - description: Get BMC audit log information
+ name: audit_log_info
+ namespace: ''
+ - description: Get auto capture screen information
+ name: auto_capture_info
+ namespace: ''
+ - description: Get disk backplane information
+ name: backplane_info
+ namespace: ''
+ - description: Backup server settings
+ name: backup
+ namespace: ''
+ - description: Export BIOS config
+ name: bios_export
+ namespace: ''
+ - description: Import BIOS config
+ name: bios_import
+ namespace: ''
+ - description: Get BIOS setup
+ name: bios_info
+ namespace: ''
+ - description: Get BMC information
+ name: bmc_info
+ namespace: ''
+ - description: Get bmc boot image information
+ name: boot_image_info
+ namespace: ''
+ - description: Get BIOS boot options
+ name: boot_option_info
+ namespace: ''
+ - description: Clear BMC audit log
+ name: clear_audit_log
+ namespace: ''
+ - description: Clear event log
+ name: clear_event_log
+ namespace: ''
+ - description: Clear BMC system log
+ name: clear_system_log
+ namespace: ''
+ - description: Collect blackbox log
+ name: collect_blackbox
+ namespace: ''
+ - description: Collect logs
+ name: collect_log
+ namespace: ''
+ - description: Get remote images redirection information
+ name: connect_media_info
+ namespace: ''
+ - description: Get CPU information
+ name: cpu_info
+ namespace: ''
+ - description: Delete session
+ name: del_session
+ namespace: ''
+ - description: Get dns information
+ name: dns_info
+ namespace: ''
+ - description: Download auto screenshots
+ name: download_auto_screenshot
+ namespace: ''
+ - description: Download manual screenshots
+ name: download_manual_screenshot
+ namespace: ''
+ - description: Set active directory information
+ name: edit_ad
+ namespace: ''
+ - description: Set alert policy
+ name: edit_alert_policy
+ namespace: ''
+ - description: Set auto capture screen
+ name: edit_auto_capture
+ namespace: ''
+ - description: Set BIOS setup attributes
+ name: edit_bios
+ namespace: ''
+ - description: Set bmc boot image
+ name: edit_boot_image
+ namespace: ''
+ - description: Set BIOS boot options
+ name: edit_boot_option
+ namespace: ''
+ - description: Start/Stop virtual media Image
+ name: edit_connect_media
+ namespace: ''
+ - description: Set dns information
+ name: edit_dns
+ namespace: ''
+ - description: Set event log policy
+ name: edit_event_log_policy
+ namespace: ''
+ - description: Set fan information
+ name: edit_fan
+ namespace: ''
+ - description: Set fru settings
+ name: edit_fru
+ namespace: ''
+ - description: Set ipv4 information
+ name: edit_ipv4
+ namespace: ''
+ - description: Set ipv6 information
+ name: edit_ipv6
+ namespace: ''
+ - description: Set KVM
+ name: edit_kvm
+ namespace: ''
+ - description: Set ldap information
+ name: edit_ldap
+ namespace: ''
+ - description: Set logical disk
+ name: edit_ldisk
+ namespace: ''
+ - description: Set bmc system and audit log setting
+ name: edit_log_setting
+ namespace: ''
+ - description: Set bmc system and audit log setting
+ name: edit_m6_log_setting
+ namespace: ''
+ - description: Set manual capture screen
+ name: edit_manual_capture
+ namespace: ''
+ - description: Set Virtual Media Instance
+ name: edit_media_instance
+ namespace: ''
+ - description: Set ncsi information
+ name: edit_ncsi
+ namespace: ''
+ - description: Set network information
+ name: edit_network
+ namespace: ''
+ - description: Set network bond
+ name: edit_network_bond
+ namespace: ''
+ - description: Set network link
+ name: edit_network_link
+ namespace: ''
+ - description: Set NTP
+ name: edit_ntp
+ namespace: ''
+ - description: Set physical disk
+ name: edit_pdisk
+ namespace: ''
+ - description: Set power budget information
+ name: edit_power_budget
+ namespace: ''
+ - description: Set power restore information
+ name: edit_power_restore
+ namespace: ''
+ - description: Set power status information
+ name: edit_power_status
+ namespace: ''
+ - description: Set preserve config
+ name: edit_preserve_config
+ namespace: ''
+ - description: Set psu config information
+ name: edit_psu_config
+ namespace: ''
+ - description: Set psu peak information
+ name: edit_psu_peak
+ namespace: ''
+ - description: Set preserver config
+ name: edit_restore_factory_default
+ namespace: ''
+ - description: Set service settings
+ name: edit_service
+ namespace: ''
+ - description: Set SMTP information
+ name: edit_smtp
+ namespace: ''
+ - description: Set SMTP information
+ name: edit_smtp_com
+ namespace: ''
+ - description: Set SMTP information
+ name: edit_smtp_dest
+ namespace: ''
+ - description: Set snmp
+ name: edit_snmp
+ namespace: ''
+ - description: Set snmp trap
+ name: edit_snmp_trap
+ namespace: ''
+ - description: Set threshold information
+ name: edit_threshold
+ namespace: ''
+ - description: Set UID
+ name: edit_uid
+ namespace: ''
+ - description: Set virtual media
+ name: edit_virtual_media
+ namespace: ''
+ - description: Set vlan information
+ name: edit_vlan
+ namespace: ''
+ - description: Get event log information
+ name: event_log_info
+ namespace: ''
+ - description: Get event log policy information
+ name: event_log_policy_info
+ namespace: ''
+ - description: Get fan information
+ name: fan_info
+ namespace: ''
+ - description: Get fru information
+ name: fru_info
+ namespace: ''
+ - description: Get firmware version information
+ name: fw_version_info
+ namespace: ''
+ - description: Get GPU information
+ name: gpu_info
+ namespace: ''
+ - description: Get hard disk information
+ name: hard_disk_info
+ namespace: ''
+ - description: Get CPU information
+ name: hba_info
+ namespace: ''
+ - description: Get KVM information
+ name: kvm_info
+ namespace: ''
+ - description: Manage ldap group information
+ name: ldap_group
+ namespace: ''
+ - description: Get ldap group information
+ name: ldap_group_info
+ namespace: ''
+ - description: Get ldap information
+ name: ldap_info
+ namespace: ''
+ - description: Get logical disks information
+ name: ldisk_info
+ namespace: ''
+ - description: Get bmc log setting information
+ name: log_setting_info
+ namespace: ''
+ - description: Get Virtual Media Instance information
+ name: media_instance_info
+ namespace: ''
+ - description: Get memory information
+ name: mem_info
+ namespace: ''
+ - description: Get ncsi information
+ name: ncsi_info
+ namespace: ''
+ - description: Get network bond information
+ name: network_bond_info
+ namespace: ''
+ - description: Get network information
+ name: network_info
+ namespace: ''
+ - description: Get network link information
+ name: network_link_info
+ namespace: ''
+ - description: Get NTP information
+ name: ntp_info
+ namespace: ''
+ - description: Get onboard disks information
+ name: onboard_disk_info
+ namespace: ''
+ - description: Get PCIE information
+ name: pcie_info
+ namespace: ''
+ - description: Get physical disks information
+ name: pdisk_info
+ namespace: ''
+ - description: Get power budget information
+ name: power_budget_info
+ namespace: ''
+ - description: Get power consumption information
+ name: power_consumption_info
+ namespace: ''
+ - description: Get power restore information
+ name: power_restore_info
+ namespace: ''
+ - description: Get power status information
+ name: power_status_info
+ namespace: ''
+ - description: Get preserve config information
+ name: preserve_config_info
+ namespace: ''
+ - description: Get psu config information
+ name: psu_config_info
+ namespace: ''
+ - description: Get psu information
+ name: psu_info
+ namespace: ''
+ - description: Get psu peak information
+ name: psu_peak_info
+ namespace: ''
+ - description: Get RAID/HBA card and controller information
+ name: raid_info
+ namespace: ''
+ - description: BMC reset
+ name: reset_bmc
+ namespace: ''
+ - description: KVM reset
+ name: reset_kvm
+ namespace: ''
+ - description: Restore server settings
+ name: restore
+ namespace: ''
+ - description: Get self test information
+ name: self_test_info
+ namespace: ''
+ - description: Get sensor information
+ name: sensor_info
+ namespace: ''
+ - description: Get server status information
+ name: server_info
+ namespace: ''
+ - description: Get service information
+ name: service_info
+ namespace: ''
+ - description: Get online session information
+ name: session_info
+ namespace: ''
+ - description: Get SMTP information
+ name: smtp_info
+ namespace: ''
+ - description: Get snmp get/set information
+ name: snmp_info
+ namespace: ''
+ - description: Get snmp trap information
+ name: snmp_trap_info
+ namespace: ''
+ - description: Get support information
+ name: support_info
+ namespace: ''
+ - description: Get BMC system log information
+ name: system_log_info
+ namespace: ''
+ - description: Get temp information
+ name: temp_info
+ namespace: ''
+ - description: Get threshold information
+ name: threshold_info
+ namespace: ''
+ - description: Get UID information
+ name: uid_info
+ namespace: ''
+ - description: Update CPLD
+ name: update_cpld
+ namespace: ''
+ - description: Update firmware
+ name: update_fw
+ namespace: ''
+ - description: Update PSU
+ name: update_psu
+ namespace: ''
+ - description: Manage user
+ name: user
+ namespace: ''
+ - description: Manage user group
+ name: user_group
+ namespace: ''
+ - description: Get user group information
+ name: user_group_info
+ namespace: ''
+ - description: Get user information
+ name: user_info
+ namespace: ''
+ - description: Get Virtual Media information
+ name: virtual_media_info
+ namespace: ''
+ - description: Get volt information
+ name: volt_info
+ namespace: ''
+ release_date: '2023-12-07'
+ 1.1.0:
+ changes:
+ minor_changes:
+ - Fix any issues in your module that don't meet the ansible module format and
+ documentation requirements.
+ fragments:
+ - 6-edit_documentation.yml
+ release_date: '2024-03-08'
+ 1.1.1:
+ changes:
+ minor_changes:
+ - Fix any issues in your module that don't meet the ansible module format and
+ documentation requirements.
+ fragments:
+ - 8-edit_documentation.yml
+ release_date: '2024-03-12'
+ 1.1.2:
+ changes:
+ minor_changes:
+ - Fix problems such as typos or grammatical errors in the document.
+ fragments:
+ - 11-edit_doc_spell.yaml
+ release_date: '2024-03-25'
+ 1.1.3:
+ changes:
+ minor_changes:
+ - Change the value of the dn field in the example so that the written argument
+ does not contain Spaces.
+ fragments:
+ - 13-eidt_ldap_examples.yml
+ release_date: '2024-03-28'
+ 1.2.0:
+ changes:
+ bugfixes:
+ - Add ansible 2.17 version tests to our CI test scripts (https://github.com/ieisystem/kaytus.ksmanage/pull/16).
+ - Delete the useless __init__.py file in modules and module_utils (https://github.com/ieisystem/kaytus.ksmanage/pull/15).
+ - ksmanage - Changed the message that no dependencies were installed (https://github.com/ieisystem/kaytus.ksmanage/pull/18).
+ removed_features:
+ - add_ldisk - Delete the ``add_ldisk.info`` parameter. Use ``kaytus.ksmanage.pdisk_info``
+ instead (https://github.com/ieisystem/kaytus.ksmanage/pull/17).
+ - edit_ldisk - Delete the ``edit_ldisk.info`` parameter. Use ``kaytus.ksmanage.ldisk_info``
+ instead (https://github.com/ieisystem/kaytus.ksmanage/pull/17).
+ - edit_pdisk - Delete the ``edit_pdisk.info`` parameter. Use ``kaytus.ksmanage.pdisk_info``
+ instead (https://github.com/ieisystem/kaytus.ksmanage/pull/17).
+ fragments:
+ - 15-delete_init_file.yml
+ - 16-ansible2.17_added_for_CI_testing.yml
+ - 17-remove_modules_info.yml
+ - 18-edit_module_utils.yml
+ release_date: '2024-04-18'
+ 1.2.1:
+ changes:
+ bugfixes:
+ - Change the example gather_facts no to false(https://github.com/ieisystem/kaytus.ksmanage/pull/20).
+ - Delete the unwanted links.yml file (https://github.com/ieisystem/kaytus.ksmanage/pull/21).
+ fragments:
+ - 20-edit_example_gather_facts.yml
+ - 21-delete_links.yml
+ release_date: '2024-04-23'
diff --git a/ansible_collections/community/azure/changelogs/config.yaml b/ansible_collections/kaytus/ksmanage/changelogs/config.yaml
index 810dea1ad..53522d90d 100644
--- a/ansible_collections/community/azure/changelogs/config.yaml
+++ b/ansible_collections/kaytus/ksmanage/changelogs/config.yaml
@@ -1,29 +1,29 @@
-changelog_filename_template: ../CHANGELOG.rst
-changelog_filename_version_depth: 0
-changes_file: changelog.yaml
-changes_format: combined
-keep_fragments: false
-mention_ancestor: true
-new_plugins_after_name: removed_features
-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
-title: Community Azure
-trivial_section_name: trivial
+changelog_filename_template: ../CHANGELOG.rst
+changelog_filename_version_depth: 0
+changes_file: changelog.yaml
+changes_format: combined
+keep_fragments: false
+mention_ancestor: true
+new_plugins_after_name: removed_features
+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
+title: CHANGE THIS IN changelogs/config.yaml!
+trivial_section_name: trivial
diff --git a/ansible_collections/community/azure/changelogs/fragments/.keep b/ansible_collections/kaytus/ksmanage/changelogs/fragments/.keep
index e69de29bb..e69de29bb 100644
--- a/ansible_collections/community/azure/changelogs/fragments/.keep
+++ b/ansible_collections/kaytus/ksmanage/changelogs/fragments/.keep
diff --git a/ansible_collections/kaytus/ksmanage/docs/ad_group_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/ad_group_info_module.rst
new file mode 100644
index 000000000..123f0ef6c
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/ad_group_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.ad_group_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.ad_group_info -- Get active directory group information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.ad_group_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get active directory group information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Ad group test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get active directory group information"
+ kaytus.ksmanage.ad_group_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/ad_group_module.rst b/ansible_collections/kaytus/ksmanage/docs/ad_group_module.rst
new file mode 100644
index 000000000..bbb4efc72
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/ad_group_module.rst
@@ -0,0 +1,431 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.ad_group_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.ad_group -- Manage active directory group information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.ad_group`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Manage active directory group information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-domain"></div>
+ <b>domain</b>
+ <a class="ansibleOptionLink" href="#parameter-domain" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Enter the Role Group Domain. This is the domain where the role group is located.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-kvm"></div>
+ <b>kvm</b>
+ <a class="ansibleOptionLink" href="#parameter-kvm" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>This field provides access to KVM for AD authenticated role group user.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-name"></div>
+ <b>name</b>
+ <a class="ansibleOptionLink" href="#parameter-name" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Enter the Role Group Name. This name identifies the role group in Active Directory.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-pri"></div>
+ <b>pri</b>
+ <a class="ansibleOptionLink" href="#parameter-pri" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>administrator</li>
+ <li>user</li>
+ <li>operator</li>
+ <li>oem</li>
+ <li>none</li>
+ </ul>
+ </td>
+ <td>
+ <div>Enter the Role Group Privilege. This is the level of privilege to be assigned for this role group.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#parameter-state" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li><div style="color: blue"><b>present</b>&nbsp;&larr;</div></li>
+ <li>absent</li>
+ </ul>
+ </td>
+ <td>
+ <div>Whether the active directory group should exist or not, taking action if the state is different from what is stated.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-vm"></div>
+ <b>vm</b>
+ <a class="ansibleOptionLink" href="#parameter-vm" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>This field provides access to VMedia for AD authenticated role group user.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Ad group test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Add active directory group information"
+ kaytus.ksmanage.ad_group:
+ state: "present"
+ name: "wbs"
+ domain: "test.com"
+ pri: "administrator"
+ kvm: "enable"
+ vm: "disable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set active directory group information"
+ kaytus.ksmanage.ad_group:
+ state: "present"
+ name: "wbs"
+ pri: "user"
+ kvm: "disable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Delete active directory group information"
+ kaytus.ksmanage.ad_group:
+ state: "absent"
+ name: "wbs"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/ad_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/ad_info_module.rst
new file mode 100644
index 000000000..b75defd6b
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/ad_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.ad_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.ad_info -- Get active directory information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.ad_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get active directory information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Ad test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get active directory information"
+ kaytus.ksmanage.ad_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/adapter_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/adapter_info_module.rst
new file mode 100644
index 000000000..9b87ba31d
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/adapter_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.adapter_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.adapter_info -- Get adapter information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.adapter_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get adapter information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Adapter test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get adapter information"
+ kaytus.ksmanage.adapter_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/add_ldisk_module.rst b/ansible_collections/kaytus/ksmanage/docs/add_ldisk_module.rst
new file mode 100644
index 000000000..c5eec8c88
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/add_ldisk_module.rst
@@ -0,0 +1,589 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.add_ldisk_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.add_ldisk -- Create logical disk
+++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.add_ldisk`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Create logical disk on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-accelerator"></div>
+ <b>accelerator</b>
+ <a class="ansibleOptionLink" href="#parameter-accelerator" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>1</li>
+ <li>2</li>
+ <li>3</li>
+ </ul>
+ </td>
+ <td>
+ <div>Driver accelerator, 1 - 1h, 2 - 2h, 3 - 3h.</div>
+ <div>Required when controller type is PMC.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-access"></div>
+ <b>access</b>
+ <a class="ansibleOptionLink" href="#parameter-access" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>1</li>
+ <li>2</li>
+ <li>3</li>
+ </ul>
+ </td>
+ <td>
+ <div>Access Policy, 1 - Read Write, 2 - Read Only, 3 - Blocked.</div>
+ <div>Required when controller type is LSI.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-cache"></div>
+ <b>cache</b>
+ <a class="ansibleOptionLink" href="#parameter-cache" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>1</li>
+ <li>2</li>
+ <li>3</li>
+ </ul>
+ </td>
+ <td>
+ <div>Drive Cache, 1 - Unchanged, 2 - Enabled, 3 - Disabled.</div>
+ <div>Required when controller type is LSI.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-ctrl_id"></div>
+ <b>ctrl_id</b>
+ <a class="ansibleOptionLink" href="#parameter-ctrl_id" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Raid controller ID.</div>
+ <div>Required when controller type is LSI, PMC or MV.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-init"></div>
+ <b>init</b>
+ <a class="ansibleOptionLink" href="#parameter-init" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>1</li>
+ <li>2</li>
+ <li>3</li>
+ </ul>
+ </td>
+ <td>
+ <div>Init State, 1 - No Init, 2 - Quick Init, 3 - Full Init.</div>
+ <div>Required when controller type is LSI.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-io"></div>
+ <b>io</b>
+ <a class="ansibleOptionLink" href="#parameter-io" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>1</li>
+ <li>2</li>
+ </ul>
+ </td>
+ <td>
+ <div>IO Policy, 1 - Direct IO, 2 - Cached IO.</div>
+ <div>Required when controller type is LSI.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-level"></div>
+ <b>level</b>
+ <a class="ansibleOptionLink" href="#parameter-level" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>0</li>
+ <li>1</li>
+ <li>5</li>
+ <li>6</li>
+ <li>10</li>
+ </ul>
+ </td>
+ <td>
+ <div>RAID Level, 0 - RAID0, 1 - RAID1, 5 - RAID5, 6 - RAID6, 10 - RAID10.</div>
+ <div>Required when and controller type is LSI or PMC.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-r"></div>
+ <b>r</b>
+ <a class="ansibleOptionLink" href="#parameter-r" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>1</li>
+ <li>2</li>
+ </ul>
+ </td>
+ <td>
+ <div>Read Policy, 1 - Read Ahead, 2 - No Read Ahead.</div>
+ <div>Required when controller type is LSI.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-select"></div>
+ <b>select</b>
+ <a class="ansibleOptionLink" href="#parameter-select" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Select Size, from 1 to 100.</div>
+ <div>Required when controller type is LSI.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-size"></div>
+ <b>size</b>
+ <a class="ansibleOptionLink" href="#parameter-size" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>0</li>
+ <li>1</li>
+ <li>2</li>
+ <li>3</li>
+ <li>4</li>
+ <li>5</li>
+ </ul>
+ </td>
+ <td>
+ <div>Strip Size, 0 - 32k, 1 - 64k, 2 - 128k, 3 - 256k, 4 - 512k, 5 - 1024k.</div>
+ <div>Required when <em>Info=None</em> and controller type is LSI, PMC or MV.</div>
+ <div>When the controller type is MV, size is [0, 1].</div>
+ <div>When the controller type is LSI or PMC, size is [1, 2, 3, 4, 5].</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-slot"></div>
+ <b>slot</b>
+ <a class="ansibleOptionLink" href="#parameter-slot" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=integer</span> </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Slot Num, input multiple slotNumber like 0, 1, 2....</div>
+ <div>Required when controller type is LSI or PMC.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-vname"></div>
+ <b>vname</b>
+ <a class="ansibleOptionLink" href="#parameter-vname" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Virtual drive name.</div>
+ <div>Required when controller type is PMC or server model is M7.</div>
+ <div>Required when controller type is MV.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-w"></div>
+ <b>w</b>
+ <a class="ansibleOptionLink" href="#parameter-w" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>1</li>
+ <li>2</li>
+ <li>3</li>
+ </ul>
+ </td>
+ <td>
+ <div>Write Policy, 1 - Write Through, 2 - Write Back, 3 - Write caching ok if bad BBU.</div>
+ <div>Required when controller type is LSI.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Add ldisk test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Add LSI ldisk"
+ kaytus.ksmanage.add_ldisk:
+ ctrl_id: 0
+ level: 1
+ size: 1
+ access: 1
+ r: 1
+ w: 1
+ io: 1
+ cache: 1
+ init: 2
+ select: 10
+ slot: 0, 1
+ provider: "{{ ksmanage }}"
+
+ - name: "Add PMC ldisk"
+ kaytus.ksmanage.add_ldisk:
+ ctrl_id: 0
+ level: 1
+ size: 1
+ accelerator: 1
+ slot: 0, 1
+ vname: "test"
+ provider: "{{ ksmanage }}"
+
+ - name: "Add MV ldisk"
+ kaytus.ksmanage.add_ldisk:
+ ctrl_id: 0
+ size: 1
+ vname: "test"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/alert_policy_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/alert_policy_info_module.rst
new file mode 100644
index 000000000..73cca53e3
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/alert_policy_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.alert_policy_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.alert_policy_info -- Get alert policy
++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.alert_policy_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get alert policy on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Alert test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get alert policy"
+ kaytus.ksmanage.alert_policy_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/audit_log_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/audit_log_info_module.rst
new file mode 100644
index 000000000..e5e620208
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/audit_log_info_module.rst
@@ -0,0 +1,358 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.audit_log_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.audit_log_info -- Get BMC audit log information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.audit_log_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get BMC audit log information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-audit_file"></div>
+ <b>audit_file</b>
+ <a class="ansibleOptionLink" href="#parameter-audit_file" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Store logs to a file.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-count"></div>
+ <b>count</b>
+ <a class="ansibleOptionLink" href="#parameter-count" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Get the most recent log of a specified number.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-log_time"></div>
+ <b>log_time</b>
+ <a class="ansibleOptionLink" href="#parameter-log_time" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Get logs after the specified date, time should be YYYY-MM-DDTHH:MM+HH:MM, like 2019-06-27T12:30+08:00.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Bmc audit log test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get bmc audit log information"
+ kaytus.ksmanage.audit_log_info:
+ log_time: "2020-06-01T12:30+08:00"
+ provider: "{{ ksmanage }}"
+
+ - name: "Get bmc audit log information"
+ kaytus.ksmanage.audit_log_info:
+ count: 30
+ provider: "{{ ksmanage }}"
+
+ - name: "Get bmc audit log information"
+ kaytus.ksmanage.audit_log_info:
+ audit_file: "/home/wbs/wbs.log"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/auto_capture_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/auto_capture_info_module.rst
new file mode 100644
index 000000000..02edf7255
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/auto_capture_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.auto_capture_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.auto_capture_info -- Get auto capture screen information
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.auto_capture_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get auto capture screen information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Screen test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get auto capture screen information"
+ kaytus.ksmanage.auto_capture_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/backplane_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/backplane_info_module.rst
new file mode 100644
index 000000000..e918903ce
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/backplane_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.backplane_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.backplane_info -- Get disk backplane information
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.backplane_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get disk backplane information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Disk backplane test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get backplane information"
+ kaytus.ksmanage.backplane_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/backup_module.rst b/ansible_collections/kaytus/ksmanage/docs/backup_module.rst
new file mode 100644
index 000000000..ee88063be
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/backup_module.rst
@@ -0,0 +1,355 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.backup_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.backup -- Backup server settings
+++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.backup`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Backup server settings on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-bak_file"></div>
+ <b>bak_file</b>
+ <a class="ansibleOptionLink" href="#parameter-bak_file" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Backup file or bak folder.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-item"></div>
+ <b>item</b>
+ <a class="ansibleOptionLink" href="#parameter-item" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>all</li>
+ <li>network</li>
+ <li>service</li>
+ <li>ntp</li>
+ <li>snmptrap</li>
+ <li>dns</li>
+ <li>smtp</li>
+ <li>ad</li>
+ <li>ldap</li>
+ <li>user</li>
+ <li>bios</li>
+ <li>kvm</li>
+ <li>ipmi</li>
+ <li>authentication</li>
+ <li>syslog</li>
+ <li>ncsi</li>
+ </ul>
+ </td>
+ <td>
+ <div>Export item.</div>
+ <div>The values for M5 modules are &#x27;all&#x27;, &#x27;network&#x27;, &#x27;service&#x27;, &#x27;ntp&#x27;, &#x27;snmptrap&#x27;, &#x27;dns&#x27;, &#x27;smtp&#x27;, &#x27;ad&#x27;, &#x27;ldap&#x27;, &#x27;user&#x27;, &#x27;bios&#x27;.</div>
+ <div>The values for M6 modules are &#x27;all&#x27;, &#x27;network&#x27;, &#x27;service&#x27;, &#x27;ntp&#x27;, &#x27;snmptrap&#x27;, &#x27;kvm&#x27;, &#x27;ipmi&#x27;, &#x27;authentication&#x27;, &#x27;syslog&#x27;.</div>
+ <div>The values for M7 modules are &#x27;all&#x27;, &#x27;network&#x27;, &#x27;service&#x27;, &#x27;syslog&#x27;, &#x27;ncsi&#x27;.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Backup test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Backup server settings"
+ kaytus.ksmanage.backup:
+ bak_file: "/home/wbs/"
+ item: "all"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/bios_export_module.rst b/ansible_collections/kaytus/ksmanage/docs/bios_export_module.rst
new file mode 100644
index 000000000..64eb77270
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/bios_export_module.rst
@@ -0,0 +1,318 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.bios_export_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.bios_export -- Export BIOS config
++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.bios_export`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Export BIOS config on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-file_url"></div>
+ <b>file_url</b>
+ <a class="ansibleOptionLink" href="#parameter-file_url" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Suffix is .json/.conf, FILEURI format, &quot;/directory/filename&quot;.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Bios test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Export bios config"
+ kaytus.ksmanage.bios_export:
+ file_url: "/home/wbs/bios.conf"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/bios_import_module.rst b/ansible_collections/kaytus/ksmanage/docs/bios_import_module.rst
new file mode 100644
index 000000000..dd9e07c01
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/bios_import_module.rst
@@ -0,0 +1,318 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.bios_import_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.bios_import -- Import BIOS config
++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.bios_import`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Import BIOS config on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-file_url"></div>
+ <b>file_url</b>
+ <a class="ansibleOptionLink" href="#parameter-file_url" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Suffix is .json/.conf, FILEURI format, &quot;/directory/filename&quot;.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Bios test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Import bios config"
+ kaytus.ksmanage.bios_import:
+ file_url: "/home/wbs/bios.conf"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/bios_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/bios_info_module.rst
new file mode 100644
index 000000000..a7318a4c8
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/bios_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.bios_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.bios_info -- Get BIOS setup
++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.bios_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get BIOS setup on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Bios test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get bios setup"
+ kaytus.ksmanage.bios_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/bmc_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/bmc_info_module.rst
new file mode 100644
index 000000000..e7a44a3ba
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/bmc_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.bmc_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.bmc_info -- Get BMC information
++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.bmc_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get BMC information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Bmc info test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get BMC information"
+ kaytus.ksmanage.bmc_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/boot_image_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/boot_image_info_module.rst
new file mode 100644
index 000000000..400782f81
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/boot_image_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.boot_image_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.boot_image_info -- Get bmc boot image information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.boot_image_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get bmc boot image information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Boot image test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get bmc boot image information"
+ kaytus.ksmanage.boot_image_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/boot_option_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/boot_option_info_module.rst
new file mode 100644
index 000000000..30efdda01
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/boot_option_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.boot_option_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.boot_option_info -- Get BIOS boot options
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.boot_option_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get BIOS boot options on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Boot test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get bios boot option"
+ kaytus.ksmanage.boot_option_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/clear_audit_log_module.rst b/ansible_collections/kaytus/ksmanage/docs/clear_audit_log_module.rst
new file mode 100644
index 000000000..8b38949c4
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/clear_audit_log_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.clear_audit_log_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.clear_audit_log -- Clear BMC audit log
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.clear_audit_log`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Clear BMC audit log on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Clear BMC audit log test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Clear BMC audit log "
+ kaytus.ksmanage.clear_audit_log:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/clear_event_log_module.rst b/ansible_collections/kaytus/ksmanage/docs/clear_event_log_module.rst
new file mode 100644
index 000000000..095526741
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/clear_event_log_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.clear_event_log_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.clear_event_log -- Clear event log
+++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.clear_event_log`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Clear event log on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Clear event log test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Clear event log"
+ kaytus.ksmanage.clear_event_log:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/clear_system_log_module.rst b/ansible_collections/kaytus/ksmanage/docs/clear_system_log_module.rst
new file mode 100644
index 000000000..561df8d35
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/clear_system_log_module.rst
@@ -0,0 +1,334 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.clear_system_log_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.clear_system_log -- Clear BMC system log
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.clear_system_log`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Clear BMC system log on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-level"></div>
+ <b>level</b>
+ <a class="ansibleOptionLink" href="#parameter-level" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li><div style="color: blue"><b>alert</b>&nbsp;&larr;</div></li>
+ <li>critical</li>
+ <li>error</li>
+ <li>notice</li>
+ <li>warning</li>
+ <li>debug</li>
+ <li>emergency</li>
+ <li>info</li>
+ <li>all</li>
+ </ul>
+ </td>
+ <td>
+ <div>Log level.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Clear BMC system log test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Clear BMC system log"
+ kaytus.ksmanage.clear_system_log:
+ level: "alert"
+ provider: "{{ ksmanage }}"
+
+ - name: "Clear BMC system log"
+ kaytus.ksmanage.clear_system_log:
+ level: "all"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/collect_blackbox_module.rst b/ansible_collections/kaytus/ksmanage/docs/collect_blackbox_module.rst
new file mode 100644
index 000000000..1a2268bce
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/collect_blackbox_module.rst
@@ -0,0 +1,319 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.collect_blackbox_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.collect_blackbox -- Collect blackbox log
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.collect_blackbox`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Collect blackbox log on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-file_url"></div>
+ <b>file_url</b>
+ <a class="ansibleOptionLink" href="#parameter-file_url" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>File download path.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Collect blackbox test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Collect blackbox log"
+ kaytus.ksmanage.collect_blackbox:
+ file_url: "/home/wbs/wbs.log"
+ provider: "{{ ksmanage }}"
+
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/collect_log_module.rst b/ansible_collections/kaytus/ksmanage/docs/collect_log_module.rst
new file mode 100644
index 000000000..6786d75c1
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/collect_log_module.rst
@@ -0,0 +1,318 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.collect_log_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.collect_log -- Collect logs
++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.collect_log`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Collect logs on kaytus Server, it takes about 5 minutes.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-file_url"></div>
+ <b>file_url</b>
+ <a class="ansibleOptionLink" href="#parameter-file_url" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>File download path or path with filename, for example filepath/filename.tar.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Collect test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Collect logs"
+ kaytus.ksmanage.collect_log:
+ file_url: "/home/wbs/test.tar"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/connect_media_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/connect_media_info_module.rst
new file mode 100644
index 000000000..41e742ed6
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/connect_media_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.connect_media_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.connect_media_info -- Get remote images redirection information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.connect_media_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get remote images redirection information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Connect media test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get remote images redirection information"
+ kaytus.ksmanage.connect_media_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/cpu_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/cpu_info_module.rst
new file mode 100644
index 000000000..49bab2565
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/cpu_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.cpu_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.cpu_info -- Get CPU information
++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.cpu_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get CPU information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: CPU test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get cpu information"
+ kaytus.ksmanage.cpu_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/del_session_module.rst b/ansible_collections/kaytus/ksmanage/docs/del_session_module.rst
new file mode 100644
index 000000000..ea4c6630c
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/del_session_module.rst
@@ -0,0 +1,318 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.del_session_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.del_session -- Delete session
++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.del_session`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Delete session on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-sid"></div>
+ <b>sid</b>
+ <a class="ansibleOptionLink" href="#parameter-sid" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Session Id, input &quot;all&quot; to delete all sessions.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Delete session test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Delete session"
+ kaytus.ksmanage.del_session:
+ sid: "223"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/dns_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/dns_info_module.rst
new file mode 100644
index 000000000..c183ea16d
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/dns_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.dns_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.dns_info -- Get dns information
++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.dns_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get dns information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: DNS test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get dns information"
+ kaytus.ksmanage.dns_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/download_auto_screenshot_module.rst b/ansible_collections/kaytus/ksmanage/docs/download_auto_screenshot_module.rst
new file mode 100644
index 000000000..767f2e6d8
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/download_auto_screenshot_module.rst
@@ -0,0 +1,318 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.download_auto_screenshot_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.download_auto_screenshot -- Download auto screenshots
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.download_auto_screenshot`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Download auto screenshots on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-file_url"></div>
+ <b>file_url</b>
+ <a class="ansibleOptionLink" href="#parameter-file_url" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Screen capture file path.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Screen test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Download auto screenshots"
+ kaytus.ksmanage.download_auto_screenshot:
+ file_url: "/home/wbs/screen"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/download_manual_screenshot_module.rst b/ansible_collections/kaytus/ksmanage/docs/download_manual_screenshot_module.rst
new file mode 100644
index 000000000..4cbe1fba2
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/download_manual_screenshot_module.rst
@@ -0,0 +1,318 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.download_manual_screenshot_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.download_manual_screenshot -- Download manual screenshots
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.download_manual_screenshot`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Download manual screenshots on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-file_url"></div>
+ <b>file_url</b>
+ <a class="ansibleOptionLink" href="#parameter-file_url" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Screen capture file path.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Screen test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Download manual screenshots"
+ kaytus.ksmanage.download_manual_screenshot:
+ file_url: "/home/wbs/screen"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_ad_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_ad_module.rst
new file mode 100644
index 000000000..a0116cd7c
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_ad_module.rst
@@ -0,0 +1,459 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_ad_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_ad -- Set active directory information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_ad`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set active directory information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-addr1"></div>
+ <b>addr1</b>
+ <a class="ansibleOptionLink" href="#parameter-addr1" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Domain Controller Server Address1. Enter the IP address of Active Directory server.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-addr2"></div>
+ <b>addr2</b>
+ <a class="ansibleOptionLink" href="#parameter-addr2" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Domain Controller Server Address2. Enter the IP address of Active Directory server.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-addr3"></div>
+ <b>addr3</b>
+ <a class="ansibleOptionLink" href="#parameter-addr3" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Domain Controller Server Address3. Enter the IP address of Active Directory server.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-code"></div>
+ <b>code</b>
+ <a class="ansibleOptionLink" href="#parameter-code" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Secret Password. Specify the Password of the administrator.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-domain"></div>
+ <b>domain</b>
+ <a class="ansibleOptionLink" href="#parameter-domain" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>User Domain Name. Specify the Domain Name for the user for example MyDomain.com.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-enable"></div>
+ <b>enable</b>
+ <a class="ansibleOptionLink" href="#parameter-enable" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Active Directory Authentication Status.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-name"></div>
+ <b>name</b>
+ <a class="ansibleOptionLink" href="#parameter-name" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Secret Username. Specify the Username of an administrator of the Active Directory Server.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-ssl_enable"></div>
+ <b>ssl_enable</b>
+ <a class="ansibleOptionLink" href="#parameter-ssl_enable" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Active Directory SSL Status.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-timeout"></div>
+ <b>timeout</b>
+ <a class="ansibleOptionLink" href="#parameter-timeout" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>The Time Out configuration(15-300).</div>
+ <div>Only the M5 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Ad test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set active directory information"
+ kaytus.ksmanage.edit_ad:
+ enable: "disable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set active directory information"
+ kaytus.ksmanage.edit_ad:
+ enable: "enable"
+ name: "test"
+ code: "123456"
+ timeout: 120
+ domain: "test.com"
+ addr1: "100.2.2.2"
+ addr2: "100.2.2.3"
+ addr3: "100.2.2.4"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_alert_policy_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_alert_policy_module.rst
new file mode 100644
index 000000000..bf081d5d1
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_alert_policy_module.rst
@@ -0,0 +1,430 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_alert_policy_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_alert_policy -- Set alert policy
++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_alert_policy`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set alert policy on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-channel"></div>
+ <b>channel</b>
+ <a class="ansibleOptionLink" href="#parameter-channel" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>shared</li>
+ <li>dedicated</li>
+ </ul>
+ </td>
+ <td>
+ <div>LAN Channel.</div>
+ <div>Only the M5 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-destination"></div>
+ <b>destination</b>
+ <a class="ansibleOptionLink" href="#parameter-destination" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Alert destination. The address of the server receiving trap information sent by Trap.</div>
+ <div>when type is snmp, specify an IP address.</div>
+ <div>When type is email, specify a username.</div>
+ <div>When type is snmpdomain, specify a domain.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-id"></div>
+ <b>id</b>
+ <a class="ansibleOptionLink" href="#parameter-id" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>1</li>
+ <li>2</li>
+ <li>3</li>
+ <li>4</li>
+ </ul>
+ </td>
+ <td>
+ <div>Alert id. Customize the channel for sending alarms in Trap.</div>
+ <div>The values for M5 modules are 1, 2, 3.</div>
+ <div>The values for M6 modules are 1, 2, 3, 4.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-status"></div>
+ <b>status</b>
+ <a class="ansibleOptionLink" href="#parameter-status" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Alert policy status. Whether to enable the receiving end for sending messages in trap mode.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-trap_port"></div>
+ <b>trap_port</b>
+ <a class="ansibleOptionLink" href="#parameter-trap_port" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>SNMP trap port(1-65535).</div>
+ <div>Only the M6 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-type"></div>
+ <b>type</b>
+ <a class="ansibleOptionLink" href="#parameter-type" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>snmp</li>
+ <li>email</li>
+ <li>snmpdomain</li>
+ </ul>
+ </td>
+ <td>
+ <div>Alert Type.</div>
+ <div>Only the M5 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Alert policy test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set alert policy"
+ kaytus.ksmanage.edit_alert_policy:
+ id: 1
+ status: "enable"
+ type: "snmp"
+ destination: "100.2.2.2"
+ channel: "shared"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set alert policy"
+ kaytus.ksmanage.edit_alert_policy:
+ id: 1
+ status: "disable"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_auto_capture_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_auto_capture_module.rst
new file mode 100644
index 000000000..afe6776c8
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_auto_capture_module.rst
@@ -0,0 +1,322 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_auto_capture_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_auto_capture -- Set auto capture screen
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_auto_capture`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set auto capture screen on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-status"></div>
+ <b>status</b>
+ <a class="ansibleOptionLink" href="#parameter-status" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Capture status.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Screen test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set auto capture screen"
+ kaytus.ksmanage.edit_auto_capture:
+ status: "enable"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_bios_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_bios_module.rst
new file mode 100644
index 000000000..ecc2eed00
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_bios_module.rst
@@ -0,0 +1,377 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_bios_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_bios -- Set BIOS setup attributes
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_bios`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set BIOS setup attributes on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-attribute"></div>
+ <b>attribute</b>
+ <a class="ansibleOptionLink" href="#parameter-attribute" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>BIOS setup option.</div>
+ <div>Required when <em>list=False</em> and <em>file_url=None</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-file_url"></div>
+ <b>file_url</b>
+ <a class="ansibleOptionLink" href="#parameter-file_url" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>BIOS option file. attribute must be used with value.</div>
+ <div>Mutually exclusive with fileurl format, &quot;/directory/filename&quot;.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-list"></div>
+ <b>list</b>
+ <a class="ansibleOptionLink" href="#parameter-list" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li><div style="color: blue"><b>no</b>&nbsp;&larr;</div></li>
+ <li>yes</li>
+ </ul>
+ </td>
+ <td>
+ <div>Show attribute name and configurable value.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-value"></div>
+ <b>value</b>
+ <a class="ansibleOptionLink" href="#parameter-value" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>BIOS setup option value.</div>
+ <div>Required when <em>list=False</em> and <em>file_url=None</em>.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Bios test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set bios setup"
+ kaytus.ksmanage.edit_bios:
+ attribute: "VMX"
+ value: "Disable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set bios setup"
+ kaytus.ksmanage.edit_bios:
+ attribute: "VMX"
+ value: "Enable"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_boot_image_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_boot_image_module.rst
new file mode 100644
index 000000000..c8443f0e9
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_boot_image_module.rst
@@ -0,0 +1,327 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_boot_image_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_boot_image -- Set bmc boot image
++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_boot_image`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set bmc boot image on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-image"></div>
+ <b>image</b>
+ <a class="ansibleOptionLink" href="#parameter-image" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>0</li>
+ <li>1</li>
+ <li>2</li>
+ <li>3</li>
+ <li>4</li>
+ <li>5</li>
+ </ul>
+ </td>
+ <td>
+ <div>BMC boot image.</div>
+ <div>0-Higher firmware version; 1-Image 1; 2-Image 2; 3-Lower firmware version; 4-Latest updated firmware; 5-Not latest updated firmware.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Boot image test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set bmc boot image"
+ kaytus.ksmanage.edit_boot_image:
+ image: 2
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_boot_option_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_boot_option_module.rst
new file mode 100644
index 000000000..b3ef68d54
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_boot_option_module.rst
@@ -0,0 +1,365 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_boot_option_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_boot_option -- Set BIOS boot options
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_boot_option`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set BIOS boot options on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-device"></div>
+ <b>device</b>
+ <a class="ansibleOptionLink" href="#parameter-device" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>none</li>
+ <li>HDD</li>
+ <li>PXE</li>
+ <li>CD</li>
+ <li>BIOSSETUP</li>
+ </ul>
+ </td>
+ <td>
+ <div>Boot device.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-effective"></div>
+ <b>effective</b>
+ <a class="ansibleOptionLink" href="#parameter-effective" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>Once</li>
+ <li>Continuous</li>
+ </ul>
+ </td>
+ <td>
+ <div>Effective, once or continuous.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-mode"></div>
+ <b>mode</b>
+ <a class="ansibleOptionLink" href="#parameter-mode" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>Legacy</li>
+ <li>UEFI</li>
+ </ul>
+ </td>
+ <td>
+ <div>Boot type.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Boot test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set bios boot option"
+ kaytus.ksmanage.edit_boot_option:
+ device: "PXE"
+ effective: "Once"
+ mode: "Legacy"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_connect_media_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_connect_media_module.rst
new file mode 100644
index 000000000..f4eb71c0e
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_connect_media_module.rst
@@ -0,0 +1,360 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_connect_media_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_connect_media -- Start/Stop virtual media Image
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_connect_media`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Start/Stop virtual media Image on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-image_name"></div>
+ <b>image_name</b>
+ <a class="ansibleOptionLink" href="#parameter-image_name" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Image name.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-image_type"></div>
+ <b>image_type</b>
+ <a class="ansibleOptionLink" href="#parameter-image_type" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>CD</li>
+ <li>FD</li>
+ <li>HD</li>
+ </ul>
+ </td>
+ <td>
+ <div>Virtual media type.</div>
+ <div>Only the M5 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-op_type"></div>
+ <b>op_type</b>
+ <a class="ansibleOptionLink" href="#parameter-op_type" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>start</li>
+ <li>stop</li>
+ </ul>
+ </td>
+ <td>
+ <div>Start or stop media.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Connect media test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set remote image redirection"
+ kaytus.ksmanage.edit_connect_media:
+ image_type: "CD"
+ op_type: "start"
+ image_name: "aa.iso"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_dns_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_dns_module.rst
new file mode 100644
index 000000000..f436412dc
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_dns_module.rst
@@ -0,0 +1,620 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_dns_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_dns -- Set dns information
++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_dns`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set dns information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-dns_iface"></div>
+ <b>dns_iface</b>
+ <a class="ansibleOptionLink" href="#parameter-dns_iface" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>DNS Interface, input like &#x27;eth0&#x27;, &#x27;eth1&#x27;, &#x27;bond0&#x27;.</div>
+ <div>Required when <em>dns_manual=auto</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-dns_manual"></div>
+ <b>dns_manual</b>
+ <a class="ansibleOptionLink" href="#parameter-dns_manual" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>manual</li>
+ <li>auto</li>
+ </ul>
+ </td>
+ <td>
+ <div>DNS Settings. Select whether the DNS interface will be configured manually or automatically.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-dns_priority"></div>
+ <b>dns_priority</b>
+ <a class="ansibleOptionLink" href="#parameter-dns_priority" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>4</li>
+ <li>6</li>
+ </ul>
+ </td>
+ <td>
+ <div>IP Priority.</div>
+ <div>Required when <em>dns_manual=auto</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-dns_server1"></div>
+ <b>dns_server1</b>
+ <a class="ansibleOptionLink" href="#parameter-dns_server1" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>DNS Server1 IPv4 or IPv6 address.</div>
+ <div>Required when <em>dns_manual=manual</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-dns_server2"></div>
+ <b>dns_server2</b>
+ <a class="ansibleOptionLink" href="#parameter-dns_server2" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>DNS Server2 IPv4 or IPv6 address.</div>
+ <div>Required when <em>dns_manual=manual</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-dns_server3"></div>
+ <b>dns_server3</b>
+ <a class="ansibleOptionLink" href="#parameter-dns_server3" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>DNS Server3 IPv4 or IPv6 address.</div>
+ <div>Required when <em>dns_manual=manual</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-dns_status"></div>
+ <b>dns_status</b>
+ <a class="ansibleOptionLink" href="#parameter-dns_status" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>DNS status.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-domain_iface"></div>
+ <b>domain_iface</b>
+ <a class="ansibleOptionLink" href="#parameter-domain_iface" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Network Interface, input like &#x27;eth0_v4&#x27;, &#x27;eth0_v6&#x27;, &#x27;eth1_v4&#x27;, &#x27;eth1_v6&#x27;, &#x27;bond0_v4&#x27;, &#x27;bond0_v6&#x27;.</div>
+ <div>Required when <em>domain_manual=auto</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-domain_manual"></div>
+ <b>domain_manual</b>
+ <a class="ansibleOptionLink" href="#parameter-domain_manual" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>manual</li>
+ <li>auto</li>
+ </ul>
+ </td>
+ <td>
+ <div>Domain Settings. Select whether the domain interface will be configured manually or automatically.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-domain_name"></div>
+ <b>domain_name</b>
+ <a class="ansibleOptionLink" href="#parameter-domain_name" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Domain Name.</div>
+ <div>Required when <em>domain_manual=manual</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host_cfg"></div>
+ <b>host_cfg</b>
+ <a class="ansibleOptionLink" href="#parameter-host_cfg" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>manual</li>
+ <li>auto</li>
+ </ul>
+ </td>
+ <td>
+ <div>Host Settings. Select whether the host name will be configured manually or automatically.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host_name"></div>
+ <b>host_name</b>
+ <a class="ansibleOptionLink" href="#parameter-host_name" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Host Name.</div>
+ <div>Required when <em>host_cfg=manual</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-register_status1"></div>
+ <b>register_status1</b>
+ <a class="ansibleOptionLink" href="#parameter-register_status1" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>BMC register status 1.</div>
+ <div>Only the M6 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-register_status2"></div>
+ <b>register_status2</b>
+ <a class="ansibleOptionLink" href="#parameter-register_status2" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>BMC register status 2.</div>
+ <div>Only the M6 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-registration_method1"></div>
+ <b>registration_method1</b>
+ <a class="ansibleOptionLink" href="#parameter-registration_method1" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>nsupdate</li>
+ <li>dhcp</li>
+ <li>hostname</li>
+ </ul>
+ </td>
+ <td>
+ <div>Registration method 1.</div>
+ <div>Only the M6 model supports this parameter.</div>
+ <div>Required when <em>register_status1=enable</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-registration_method2"></div>
+ <b>registration_method2</b>
+ <a class="ansibleOptionLink" href="#parameter-registration_method2" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>nsupdate</li>
+ <li>dhcp</li>
+ <li>hostname</li>
+ </ul>
+ </td>
+ <td>
+ <div>Registration method 2.</div>
+ <div>Only the M6 model supports this parameter.</div>
+ <div>Required when <em>register_status2=enable</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: DNS test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set dns information"
+ kaytus.ksmanage.edit_dns:
+ dns_status: "disable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set dns information"
+ kaytus.ksmanage.edit_dns:
+ dns_status: "enable"
+ host_cfg: "manual"
+ host_name: "123456789"
+ domain_manual: "auto"
+ domain_iface: "eth0_v4"
+ dns_manual: "manual"
+ dns_server1: "100.2.2.2"
+ dns_server2: "100.2.2.3"
+ dns_server3: "100.2.2.4"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set dns information"
+ kaytus.ksmanage.edit_dns:
+ dns_status: "enable"
+ host_cfg: "manual"
+ host_name: "123456789"
+ domain_manual: "manual"
+ domain_name: "test.com"
+ dns_manual: "auto"
+ dns_iface: "eth0"
+ dns_priority: "4"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_event_log_policy_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_event_log_policy_module.rst
new file mode 100644
index 000000000..3161894bb
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_event_log_policy_module.rst
@@ -0,0 +1,322 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_event_log_policy_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_event_log_policy -- Set event log policy
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_event_log_policy`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set event log policy on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-policy"></div>
+ <b>policy</b>
+ <a class="ansibleOptionLink" href="#parameter-policy" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>Linear</li>
+ <li>Circular</li>
+ </ul>
+ </td>
+ <td>
+ <div>Event log policy.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Event log policy test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set event log policy"
+ kaytus.ksmanage.edit_event_log_policy:
+ policy: "Linear"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_fan_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_fan_module.rst
new file mode 100644
index 000000000..403c59785
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_fan_module.rst
@@ -0,0 +1,359 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_fan_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_fan -- Set fan information
++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_fan`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set fan information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-fan_speed"></div>
+ <b>fan_speed</b>
+ <a class="ansibleOptionLink" href="#parameter-fan_speed" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Fan speed (duty ratio), range in 1 - 100.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-id"></div>
+ <b>id</b>
+ <a class="ansibleOptionLink" href="#parameter-id" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Fan id 255 is for all fans, 0~n.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-mode"></div>
+ <b>mode</b>
+ <a class="ansibleOptionLink" href="#parameter-mode" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>Automatic</li>
+ <li>Manual</li>
+ </ul>
+ </td>
+ <td>
+ <div>Control mode, Manual or Automatic , Manual must be used with fans_peed.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Fan test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set fan information"
+ kaytus.ksmanage.edit_fan:
+ mode: "Automatic"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set fan information"
+ kaytus.ksmanage.edit_fan:
+ mode: "Manual"
+ id: 1
+ fan_speed: 80
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_fru_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_fru_module.rst
new file mode 100644
index 000000000..f205bb1fd
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_fru_module.rst
@@ -0,0 +1,352 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_fru_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_fru -- Set fru settings
+++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_fru`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set fru settings on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-attribute"></div>
+ <b>attribute</b>
+ <a class="ansibleOptionLink" href="#parameter-attribute" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>CP</li>
+ <li>CS</li>
+ <li>PM</li>
+ <li>PPN</li>
+ <li>PS</li>
+ <li>PN</li>
+ <li>PV</li>
+ <li>PAT</li>
+ <li>BM</li>
+ <li>BPN</li>
+ <li>BS</li>
+ <li>BP</li>
+ </ul>
+ </td>
+ <td>
+ <div>CP is Chassis Part Number, CS is Chassis Serial, PM is Product Manufacturer.</div>
+ <div>PPN is Product Part Number, PS is Product Serial, PN is Product Name.</div>
+ <div>PV is Product Version, PAT is Product Asset Tag, BM is Board Mfg, BPN is Board Product Name.</div>
+ <div>BS is Board Serial, BP is Board Part Number.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-value"></div>
+ <b>value</b>
+ <a class="ansibleOptionLink" href="#parameter-value" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Set the value of attribute.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Fru test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set Fru"
+ kaytus.ksmanage.edit_fru:
+ attribute: "CP"
+ value: "test"
+ provider: "{{ ksmanage }}"
+
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_ipv4_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_ipv4_module.rst
new file mode 100644
index 000000000..1e87370c3
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_ipv4_module.rst
@@ -0,0 +1,427 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_ipv4_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_ipv4 -- Set ipv4 information
++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_ipv4`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set ipv4 information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-interface_name"></div>
+ <b>interface_name</b>
+ <a class="ansibleOptionLink" href="#parameter-interface_name" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>eth0</li>
+ <li>eth1</li>
+ <li>bond0</li>
+ </ul>
+ </td>
+ <td>
+ <div>Set interface name. Select the LAN interface to be configured.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-ipv4_address"></div>
+ <b>ipv4_address</b>
+ <a class="ansibleOptionLink" href="#parameter-ipv4_address" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>If DHCP is disabled, specify a static IPv4 address to be configured for the selected interface.</div>
+ <div>Required when <em>ipv4_dhcp_enable=static</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-ipv4_dhcp_enable"></div>
+ <b>ipv4_dhcp_enable</b>
+ <a class="ansibleOptionLink" href="#parameter-ipv4_dhcp_enable" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>dhcp</li>
+ <li>static</li>
+ </ul>
+ </td>
+ <td>
+ <div>Enable &#x27;Enable DHCP&#x27; to dynamically configure IPv4 address using Dynamic Host Configuration Protocol (DHCP).</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-ipv4_gateway"></div>
+ <b>ipv4_gateway</b>
+ <a class="ansibleOptionLink" href="#parameter-ipv4_gateway" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>If DHCP is disabled, specify a static Default Gateway to be configured for the selected interface.</div>
+ <div>Required when <em>ipv4_dhcp_enable=static</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-ipv4_status"></div>
+ <b>ipv4_status</b>
+ <a class="ansibleOptionLink" href="#parameter-ipv4_status" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Enable or disable IPV4.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-ipv4_subnet"></div>
+ <b>ipv4_subnet</b>
+ <a class="ansibleOptionLink" href="#parameter-ipv4_subnet" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>If DHCP is disabled, specify a static Subnet Mask to be configured for the selected interface.</div>
+ <div>Required when <em>ipv4_dhcp_enable=static</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Ipv4 test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set ipv4 information"
+ kaytus.ksmanage.edit_ipv4:
+ interface_name: "eth0"
+ ipv4_status: "disable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set ipv4 information"
+ kaytus.ksmanage.edit_ipv4:
+ interface_name: "eth0"
+ ipv4_status: "enable"
+ ipv4_dhcp_enable: "dhcp"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set ipv4 information"
+ kaytus.ksmanage.edit_ipv4:
+ interface_name: "eth0"
+ ipv4_status: "enable"
+ ipv4_dhcp_enable: "static"
+ ipv4_address: "100.2.36.10"
+ ipv4_subnet: "255.255.255.0"
+ ipv4_gateway: "100.2.36.1"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_ipv6_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_ipv6_module.rst
new file mode 100644
index 000000000..69cb8acb8
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_ipv6_module.rst
@@ -0,0 +1,444 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_ipv6_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_ipv6 -- Set ipv6 information
++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_ipv6`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set ipv6 information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-interface_name"></div>
+ <b>interface_name</b>
+ <a class="ansibleOptionLink" href="#parameter-interface_name" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>eth0</li>
+ <li>eth1</li>
+ <li>bond0</li>
+ </ul>
+ </td>
+ <td>
+ <div>Set interface name. Select the LAN interface to be configured.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-ipv6_address"></div>
+ <b>ipv6_address</b>
+ <a class="ansibleOptionLink" href="#parameter-ipv6_address" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>If DHCP is disabled, specify a static IPv6 address to be configured for the selected interface.</div>
+ <div>Required when <em>ipv6_dhcp_enable=static</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-ipv6_dhcp_enable"></div>
+ <b>ipv6_dhcp_enable</b>
+ <a class="ansibleOptionLink" href="#parameter-ipv6_dhcp_enable" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>dhcp</li>
+ <li>static</li>
+ </ul>
+ </td>
+ <td>
+ <div>Enable &#x27;Enable DHCP&#x27; to dynamically configure IPv6 address using Dynamic Host Configuration Protocol (DHCP).</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-ipv6_gateway"></div>
+ <b>ipv6_gateway</b>
+ <a class="ansibleOptionLink" href="#parameter-ipv6_gateway" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>If DHCP is disabled, specify a static Default Gateway to be configured for the selected interface.</div>
+ <div>Required when <em>ipv6_dhcp_enable=static</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-ipv6_index"></div>
+ <b>ipv6_index</b>
+ <a class="ansibleOptionLink" href="#parameter-ipv6_index" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Ipv6 index(0-15).</div>
+ <div>Required when <em>ipv6_dhcp_enable=static</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-ipv6_prefix"></div>
+ <b>ipv6_prefix</b>
+ <a class="ansibleOptionLink" href="#parameter-ipv6_prefix" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>The subnet prefix length for the IPv6 settings(0-128).</div>
+ <div>Required when <em>ipv6_dhcp_enable=static</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-ipv6_status"></div>
+ <b>ipv6_status</b>
+ <a class="ansibleOptionLink" href="#parameter-ipv6_status" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Enable or disable IPV6.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Ipv6 test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set ipv6 information"
+ kaytus.ksmanage.edit_ipv6:
+ interface_name: "eth0"
+ ipv6_status: "disable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set ipv6 information"
+ kaytus.ksmanage.edit_ipv6:
+ interface_name: "eth0"
+ ipv6_status: "enable"
+ ipv6_dhcp_enable: "dhcp"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set ipv6 information"
+ kaytus.ksmanage.edit_ipv6:
+ interface_name: "eth0"
+ ipv6_status: "enable"
+ ipv6_dhcp_enable: "static"
+ ipv6_address: "::ffff:100:2:36:10"
+ ipv6_index: 12
+ ipv6_prefix: 16
+ ipv6_gateway: "::"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_kvm_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_kvm_module.rst
new file mode 100644
index 000000000..bf4d36aaa
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_kvm_module.rst
@@ -0,0 +1,543 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_kvm_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_kvm -- Set KVM
++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_kvm`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set KVM on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-automatic_off"></div>
+ <b>automatic_off</b>
+ <a class="ansibleOptionLink" href="#parameter-automatic_off" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Automatically OFF Server Monitor, When KVM Launches.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-client_type"></div>
+ <b>client_type</b>
+ <a class="ansibleOptionLink" href="#parameter-client_type" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>vnc</li>
+ <li>viewer</li>
+ </ul>
+ </td>
+ <td>
+ <div>Client Type.</div>
+ <div>Only the M6 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-keyboard_language"></div>
+ <b>keyboard_language</b>
+ <a class="ansibleOptionLink" href="#parameter-keyboard_language" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>AD</li>
+ <li>DA</li>
+ <li>NL-BE</li>
+ <li>NL-NL</li>
+ <li>GB</li>
+ <li>US</li>
+ <li>FI</li>
+ <li>FR-BE</li>
+ <li>FR</li>
+ <li>DE</li>
+ <li>DE-CH</li>
+ <li>IT</li>
+ <li>JP</li>
+ <li>ON</li>
+ <li>PT</li>
+ <li>EC</li>
+ <li>SV</li>
+ <li>TR_F</li>
+ <li>TR_Q</li>
+ </ul>
+ </td>
+ <td>
+ <div>Select the Keyboard Language.</div>
+ <div>AD is Auto Detect, DA is Danish, NL-BE is Dutch Belgium, NL-NL is Dutch Netherland.</div>
+ <div>GB is English UK , US is English US, FI is Finnish, FR-BE is French Belgium, FR is French France.</div>
+ <div>DE is German Germany, DE-CH is German Switzerland, IT is Italian, JP is Japanese.</div>
+ <div>NO is Norwegian, PT is Portuguese, ES is Spanish, SV is Swedish, TR_F is Turkish F, TR_Q is Turkish Q.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-kvm_encryption"></div>
+ <b>kvm_encryption</b>
+ <a class="ansibleOptionLink" href="#parameter-kvm_encryption" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Encrypt KVM packets.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-local_monitor_off"></div>
+ <b>local_monitor_off</b>
+ <a class="ansibleOptionLink" href="#parameter-local_monitor_off" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Server Monitor OFF Feature Status.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-media_attach"></div>
+ <b>media_attach</b>
+ <a class="ansibleOptionLink" href="#parameter-media_attach" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>attach</li>
+ <li>auto</li>
+ </ul>
+ </td>
+ <td>
+ <div>Two types of VM attach mode are available.</div>
+ <div>Attach is Immediately attaches Virtual Media to the server upon bootup.</div>
+ <div>Auto is Attaches Virtual Media to the server only when a virtual media session is started.</div>
+ <div>Only the M5 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-non_secure"></div>
+ <b>non_secure</b>
+ <a class="ansibleOptionLink" href="#parameter-non_secure" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Enable/disable Non Secure Connection Type.</div>
+ <div>Only the M6 model supports this parameter.</div>
+ <div>Required when <em>client_type=vnc</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-retry_count"></div>
+ <b>retry_count</b>
+ <a class="ansibleOptionLink" href="#parameter-retry_count" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Number of times to be retried in case a KVM failure occurs.Retry count ranges from 1 to 20.</div>
+ <div>Only the M5 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-retry_time_interval"></div>
+ <b>retry_time_interval</b>
+ <a class="ansibleOptionLink" href="#parameter-retry_time_interval" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>The Identification for retry time interval configuration (5-30) seconds.</div>
+ <div>Only the M5 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-ssh_vnc"></div>
+ <b>ssh_vnc</b>
+ <a class="ansibleOptionLink" href="#parameter-ssh_vnc" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Enable/disable VNC over SSH in BMC.</div>
+ <div>Only the M6 model supports this parameter.</div>
+ <div>Required when <em>client_type=vnc</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-stunnel_vnc"></div>
+ <b>stunnel_vnc</b>
+ <a class="ansibleOptionLink" href="#parameter-stunnel_vnc" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Enable/disable VNC over Stunnel in BMC.</div>
+ <div>Only the M6 model supports this parameter.</div>
+ <div>Required when <em>client_type=vnc</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: KVM test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set KVM"
+ kaytus.ksmanage.edit_kvm:
+ kvm_encryption: "enable"
+ media_attach: "auto"
+ keyboard_language: "AD"
+ retry_count: 13
+ retry_time_interval: 10
+ local_monitor_off: "enable"
+ automatic_off: "enable"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_ldap_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_ldap_module.rst
new file mode 100644
index 000000000..99b725d90
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_ldap_module.rst
@@ -0,0 +1,526 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_ldap_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_ldap -- Set ldap information
++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_ldap`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set ldap information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-address"></div>
+ <b>address</b>
+ <a class="ansibleOptionLink" href="#parameter-address" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Server Address.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-attr"></div>
+ <b>attr</b>
+ <a class="ansibleOptionLink" href="#parameter-attr" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>cn</li>
+ <li>uid</li>
+ </ul>
+ </td>
+ <td>
+ <div>Attribute of User Login.</div>
+ <div>The Attribute of User Login field indicates to the LDAP/E-Directory server which attribute should be used to identify the user.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-base"></div>
+ <b>base</b>
+ <a class="ansibleOptionLink" href="#parameter-base" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Search Base.</div>
+ <div>The Search Base allows the LDAP/E-Directory server to find which part of the external directory tree is to be searched.</div>
+ <div>This search base may be equivalent to the organization or the group of the external directory.</div>
+ <div>Search base is a string of 4 to 64 alphanumeric characters.</div>
+ <div>It must start with an alphabetical character.</div>
+ <div>Special Symbols like dot(.), comma(, ), hyphen(-), underscore(_), equal-to(=) are allowed.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-ca"></div>
+ <b>ca</b>
+ <a class="ansibleOptionLink" href="#parameter-ca" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>CA certificate file path.</div>
+ <div>Required when <em>encry=StartTLS</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-ce"></div>
+ <b>ce</b>
+ <a class="ansibleOptionLink" href="#parameter-ce" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Certificate file path.</div>
+ <div>Required when <em>encry=StartTLS</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-cn"></div>
+ <b>cn</b>
+ <a class="ansibleOptionLink" href="#parameter-cn" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>ip</li>
+ <li>fqdn</li>
+ </ul>
+ </td>
+ <td>
+ <div>Common name type.</div>
+ <div>Required when <em>encry=StartTLS</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-code"></div>
+ <b>code</b>
+ <a class="ansibleOptionLink" href="#parameter-code" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Password. The Bind password is also used in the bind authentication operations between client and server.</div>
+ <div>Required when <em>enable=enable</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-dn"></div>
+ <b>dn</b>
+ <a class="ansibleOptionLink" href="#parameter-dn" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Bind DN. The Bind DN is used in bind operations, which authenticates the client to the server.</div>
+ <div>Bind DN is a string of 4 to 64 alphanumeric characters.</div>
+ <div>It must start with an alphabetical character.</div>
+ <div>Special Symbols like dot(.), comma(, ), hyphen(-), underscore(_), equal-to(=) are allowed.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-enable"></div>
+ <b>enable</b>
+ <a class="ansibleOptionLink" href="#parameter-enable" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>LDAP/E-Directory Authentication Status.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-encry"></div>
+ <b>encry</b>
+ <a class="ansibleOptionLink" href="#parameter-encry" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>no</li>
+ <li>SSL</li>
+ <li>StartTLS</li>
+ </ul>
+ </td>
+ <td>
+ <div>Encryption Type.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-pk"></div>
+ <b>pk</b>
+ <a class="ansibleOptionLink" href="#parameter-pk" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Private Key file path.</div>
+ <div>Required when <em>encry=StartTLS</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-server_port"></div>
+ <b>server_port</b>
+ <a class="ansibleOptionLink" href="#parameter-server_port" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Server Port. Specify the LDAP/E-Directory Port.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Ldap test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set ldap information"
+ kaytus.ksmanage.edit_ldap:
+ enable: "disable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set ldap information"
+ kaytus.ksmanage.edit_ldap:
+ enable: "enable"
+ encry: "SSL"
+ address: "100.2.2.2"
+ server_port: 389
+ dn: "cn=manager,ou=login,dc=domain,dc=com"
+ code: "123456"
+ base: "cn=manager"
+ attr: "uid"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_ldisk_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_ldisk_module.rst
new file mode 100644
index 000000000..50b3a7bc5
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_ldisk_module.rst
@@ -0,0 +1,378 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_ldisk_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_ldisk -- Set logical disk
+++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_ldisk`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set logical disk on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-ctrl_id"></div>
+ <b>ctrl_id</b>
+ <a class="ansibleOptionLink" href="#parameter-ctrl_id" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Raid controller ID.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-duration"></div>
+ <b>duration</b>
+ <a class="ansibleOptionLink" href="#parameter-duration" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Duration range is 1-255, physical drive under PMC raid controller.</div>
+ <div>Required when <em>option=LOC</em>.</div>
+ <div>Only the M6 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-ldisk_id"></div>
+ <b>ldisk_id</b>
+ <a class="ansibleOptionLink" href="#parameter-ldisk_id" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Logical disk ID.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-option"></div>
+ <b>option</b>
+ <a class="ansibleOptionLink" href="#parameter-option" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>LOC</li>
+ <li>STL</li>
+ <li>FI</li>
+ <li>SFI</li>
+ <li>SI</li>
+ <li>DEL</li>
+ </ul>
+ </td>
+ <td>
+ <div>Set operation options for a logical disk.</div>
+ <div>LOC is Locate Logical Drive, STL is Stop Locate LogicalDrive.</div>
+ <div>FI is Fast Initialization, SFI is Slow/Full Initialization.</div>
+ <div>SI is Stop Initialization, DEL is Delete LogicalDrive.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Edit ldisk test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Edit ldisk"
+ kaytus.ksmanage.edit_ldisk:
+ ctrl_id: 0
+ ldisk_id: 1
+ option: "LOC"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_log_setting_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_log_setting_module.rst
new file mode 100644
index 000000000..5cec4672c
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_log_setting_module.rst
@@ -0,0 +1,474 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_log_setting_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_log_setting -- Set bmc system and audit log setting
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_log_setting`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set bmc system and audit log setting on kaytus Server.
+- Only the M5 models support this feature.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-audit_status"></div>
+ <b>audit_status</b>
+ <a class="ansibleOptionLink" href="#parameter-audit_status" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Audit Log Status.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-audit_type"></div>
+ <b>audit_type</b>
+ <a class="ansibleOptionLink" href="#parameter-audit_type" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>local</li>
+ <li>remote</li>
+ <li>both</li>
+ </ul>
+ </td>
+ <td>
+ <div>Audit log type.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-file_size"></div>
+ <b>file_size</b>
+ <a class="ansibleOptionLink" href="#parameter-file_size" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>File Size(3-65535bytes), set when type is local(default 30000).</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-protocol_type"></div>
+ <b>protocol_type</b>
+ <a class="ansibleOptionLink" href="#parameter-protocol_type" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>UDP</li>
+ <li>TCP</li>
+ </ul>
+ </td>
+ <td>
+ <div>Protocol Type, set when type is remote.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-rotate_count"></div>
+ <b>rotate_count</b>
+ <a class="ansibleOptionLink" href="#parameter-rotate_count" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>0</li>
+ <li>1</li>
+ </ul>
+ </td>
+ <td>
+ <div>Rotate Count, set when type is local, 0-delete old files(default), 1-bak old files.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-server_addr"></div>
+ <b>server_addr</b>
+ <a class="ansibleOptionLink" href="#parameter-server_addr" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Server Address, set when type is remote.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-server_port"></div>
+ <b>server_port</b>
+ <a class="ansibleOptionLink" href="#parameter-server_port" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Server Port(0-65535), set when type is remote.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-status"></div>
+ <b>status</b>
+ <a class="ansibleOptionLink" href="#parameter-status" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>System Log Status.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-type"></div>
+ <b>type</b>
+ <a class="ansibleOptionLink" href="#parameter-type" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>local</li>
+ <li>remote</li>
+ <li>both</li>
+ </ul>
+ </td>
+ <td>
+ <div>System log type.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Edit log setting test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Edit bmc system log setting"
+ kaytus.ksmanage.edit_log_setting:
+ status: "enable"
+ type: "both"
+ provider: "{{ ksmanage }}"
+
+ - name: "Edit bmc audit log setting"
+ kaytus.ksmanage.edit_log_setting:
+ audit_status: "enable"
+ audit_type: "remote"
+ server_addr: "100.2.126.11"
+ server_port: "514"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_m6_log_setting_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_m6_log_setting_module.rst
new file mode 100644
index 000000000..4468a6a03
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_m6_log_setting_module.rst
@@ -0,0 +1,490 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_m6_log_setting_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_m6_log_setting -- Set bmc system and audit log setting
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_m6_log_setting`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set bmc system and audit log setting on kaytus Server.
+- Only the M6 models support this feature.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host_tag"></div>
+ <b>host_tag</b>
+ <a class="ansibleOptionLink" href="#parameter-host_tag" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>HostName</li>
+ <li>SerialNum</li>
+ <li>AssertTag</li>
+ </ul>
+ </td>
+ <td>
+ <div>System log host tag, set when <em>status=enable</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-level"></div>
+ <b>level</b>
+ <a class="ansibleOptionLink" href="#parameter-level" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>Critical</li>
+ <li>Warning</li>
+ <li>Info</li>
+ </ul>
+ </td>
+ <td>
+ <div>Events Level, set when <em>status=enable</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-log_type"></div>
+ <b>log_type</b>
+ <a class="ansibleOptionLink" href="#parameter-log_type" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>idl</li>
+ <li>audit</li>
+ <li>both</li>
+ </ul>
+ </td>
+ <td>
+ <div>Remote Log Type, set when server_id is not none.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-protocol_type"></div>
+ <b>protocol_type</b>
+ <a class="ansibleOptionLink" href="#parameter-protocol_type" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>UDP</li>
+ <li>TCP</li>
+ </ul>
+ </td>
+ <td>
+ <div>Protocol Type, set when <em>status=enable</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-server_addr"></div>
+ <b>server_addr</b>
+ <a class="ansibleOptionLink" href="#parameter-server_addr" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Server Address, set when server_id is not none.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-server_id"></div>
+ <b>server_id</b>
+ <a class="ansibleOptionLink" href="#parameter-server_id" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>0</li>
+ <li>1</li>
+ <li>2</li>
+ <li>3</li>
+ </ul>
+ </td>
+ <td>
+ <div>Syslog Server ID, set when <em>status=enable</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-server_port"></div>
+ <b>server_port</b>
+ <a class="ansibleOptionLink" href="#parameter-server_port" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Server Address, set when server_id is not none.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-status"></div>
+ <b>status</b>
+ <a class="ansibleOptionLink" href="#parameter-status" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>System Log Status.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-test"></div>
+ <b>test</b>
+ <a class="ansibleOptionLink" href="#parameter-test" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li><div style="color: blue"><b>no</b>&nbsp;&larr;</div></li>
+ <li>yes</li>
+ </ul>
+ </td>
+ <td>
+ <div>Test remote log settings, set when server_id is not none.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Edit log setting test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Edit bmc system log setting"
+ kaytus.ksmanage.edit_m6_log_setting:
+ status: "disable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Edit bmc audit log setting"
+ kaytus.ksmanage.edit_m6_log_setting:
+ status: "enable"
+ host_tag: "HostName"
+ level: "Info"
+ protocol_type: "TCP"
+ server_id: 0
+ server_addr: "100.2.126.11"
+ server_port: 514
+ log_type: "both"
+ provider: "{{ ksmanage }}"
+
+ - name: "test bmc audit log"
+ kaytus.ksmanage.edit_m6_log_setting:
+ server_id: 0
+ test: True
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_manual_capture_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_manual_capture_module.rst
new file mode 100644
index 000000000..569225d31
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_manual_capture_module.rst
@@ -0,0 +1,322 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_manual_capture_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_manual_capture -- Set manual capture screen
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_manual_capture`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set manual capture screen on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-type"></div>
+ <b>type</b>
+ <a class="ansibleOptionLink" href="#parameter-type" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>capture</li>
+ <li>delete</li>
+ </ul>
+ </td>
+ <td>
+ <div>Manual type.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Screen test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set manual capture screen"
+ kaytus.ksmanage.edit_manual_capture:
+ type: "capture"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_media_instance_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_media_instance_module.rst
new file mode 100644
index 000000000..8120c19d4
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_media_instance_module.rst
@@ -0,0 +1,502 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_media_instance_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_media_instance -- Set Virtual Media Instance
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_media_instance`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set Virtual Media Instance on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-kvm_num_cd"></div>
+ <b>kvm_num_cd</b>
+ <a class="ansibleOptionLink" href="#parameter-kvm_num_cd" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>0</li>
+ <li>1</li>
+ <li>2</li>
+ <li>3</li>
+ <li>4</li>
+ </ul>
+ </td>
+ <td>
+ <div>Select the number of Remote KVM CD/DVD devices that support for virtual Media redirection.</div>
+ <div>The max support number of html5 KVM is 2 and java KVM is 4.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-kvm_num_fd"></div>
+ <b>kvm_num_fd</b>
+ <a class="ansibleOptionLink" href="#parameter-kvm_num_fd" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>0</li>
+ <li>1</li>
+ <li>2</li>
+ <li>3</li>
+ <li>4</li>
+ </ul>
+ </td>
+ <td>
+ <div>Select the number of Remote KVM floppy devices that support for Virtual Media redirection.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-kvm_num_hd"></div>
+ <b>kvm_num_hd</b>
+ <a class="ansibleOptionLink" href="#parameter-kvm_num_hd" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>0</li>
+ <li>1</li>
+ <li>2</li>
+ <li>3</li>
+ <li>4</li>
+ </ul>
+ </td>
+ <td>
+ <div>Select the number of Remote KVM Hard disk devices to support for Virtual Media redirection.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-num_cd"></div>
+ <b>num_cd</b>
+ <a class="ansibleOptionLink" href="#parameter-num_cd" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>0</li>
+ <li>1</li>
+ <li>2</li>
+ <li>3</li>
+ <li>4</li>
+ </ul>
+ </td>
+ <td>
+ <div>Select the number of CD/DVD devices that support for Virtual Media redirection.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-num_fd"></div>
+ <b>num_fd</b>
+ <a class="ansibleOptionLink" href="#parameter-num_fd" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>0</li>
+ <li>1</li>
+ <li>2</li>
+ <li>3</li>
+ <li>4</li>
+ </ul>
+ </td>
+ <td>
+ <div>Select the number of floppy devices that support for Virtual Media redirection.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-num_hd"></div>
+ <b>num_hd</b>
+ <a class="ansibleOptionLink" href="#parameter-num_hd" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>0</li>
+ <li>1</li>
+ <li>2</li>
+ <li>3</li>
+ <li>4</li>
+ </ul>
+ </td>
+ <td>
+ <div>Select the number of harddisk devices that support for Virtual Media redirection.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-power_save_mode"></div>
+ <b>power_save_mode</b>
+ <a class="ansibleOptionLink" href="#parameter-power_save_mode" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>Enable</li>
+ <li>Disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Check this option to enable Power Save Mode in BMC.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-sd_media"></div>
+ <b>sd_media</b>
+ <a class="ansibleOptionLink" href="#parameter-sd_media" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>Enable</li>
+ <li>Disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Check this option to enable SD Media support in BMC.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-secure_channel"></div>
+ <b>secure_channel</b>
+ <a class="ansibleOptionLink" href="#parameter-secure_channel" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>Enable</li>
+ <li>Disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Check this option to enable encrypt media recirection packets.</div>
+ <div>Only the M5/M6 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Media instance test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set media instance"
+ kaytus.ksmanage.edit_media_instance:
+ num_fd: 1
+ num_cd: 1
+ num_hd: 1
+ kvm_num_fd: 1
+ kvm_num_cd: 1
+ kvm_num_hd: 1
+ sd_media: "Enable"
+ secure_channel: "Enable"
+ power_save_mode: "Enable"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_ncsi_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_ncsi_module.rst
new file mode 100644
index 000000000..d3fe17c74
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_ncsi_module.rst
@@ -0,0 +1,389 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_ncsi_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_ncsi -- Set ncsi information
++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_ncsi`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set ncsi information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-channel_number"></div>
+ <b>channel_number</b>
+ <a class="ansibleOptionLink" href="#parameter-channel_number" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>0</li>
+ <li>1</li>
+ <li>2</li>
+ <li>3</li>
+ </ul>
+ </td>
+ <td>
+ <div>Channel number.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-interface_name"></div>
+ <b>interface_name</b>
+ <a class="ansibleOptionLink" href="#parameter-interface_name" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Interface name, for example eth0.</div>
+ <div>Only the M5 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-mode"></div>
+ <b>mode</b>
+ <a class="ansibleOptionLink" href="#parameter-mode" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>auto</li>
+ <li>manual</li>
+ <li>Disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>NCSI mode, auto-Auto Failover, manual-Manual Switch.</div>
+ <div>Only M6 model supports <code>Disable</code> Settings.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-nic_type"></div>
+ <b>nic_type</b>
+ <a class="ansibleOptionLink" href="#parameter-nic_type" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>PHY</li>
+ <li>OCP</li>
+ <li>OCP1</li>
+ <li>PCIE</li>
+ <li>auto</li>
+ <li>Disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Nic type.</div>
+ <div>Only NF3280A6 and NF3180A6 model supports <code>Disable</code> Settings, but not support <code>PHY</code> Settings.</div>
+ <div>M6 model only support <code>OCP</code>, <code>OCP1</code>, <code>PCIE</code> settings.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: NCSI test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set ncsi information"
+ kaytus.ksmanage.edit_ncsi:
+ mode: "manual"
+ nic_type: "PCIE"
+ interface_name: "eth0"
+ channel_number: 1
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_network_bond_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_network_bond_module.rst
new file mode 100644
index 000000000..7be810932
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_network_bond_module.rst
@@ -0,0 +1,363 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_network_bond_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_network_bond -- Set network bond
++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_network_bond`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set network bond on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-auto_config"></div>
+ <b>auto_config</b>
+ <a class="ansibleOptionLink" href="#parameter-auto_config" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Enable this option to configure the interfaces in service configuration automatically.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-bond"></div>
+ <b>bond</b>
+ <a class="ansibleOptionLink" href="#parameter-bond" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Network bond status, If VLAN is enabled for slave interfaces, then Bonding cannot be enabled.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-interface"></div>
+ <b>interface</b>
+ <a class="ansibleOptionLink" href="#parameter-interface" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>shared</li>
+ <li>dedicated</li>
+ <li>both</li>
+ </ul>
+ </td>
+ <td>
+ <div>Interface name.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Bond test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set network bond"
+ kaytus.ksmanage.edit_network_bond:
+ bond: "enable"
+ interface: "dedicated"
+ auto_config: "enable"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_network_link_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_network_link_module.rst
new file mode 100644
index 000000000..997d8d2d9
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_network_link_module.rst
@@ -0,0 +1,392 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_network_link_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_network_link -- Set network link
++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_network_link`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set network link on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-auto_nego"></div>
+ <b>auto_nego</b>
+ <a class="ansibleOptionLink" href="#parameter-auto_nego" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>This option allows the device to perform auto-configuration.</div>
+ <div>To achieve the best mode of operation (speed and duplex) on the link.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-duplex_mode"></div>
+ <b>duplex_mode</b>
+ <a class="ansibleOptionLink" href="#parameter-duplex_mode" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>HALF</li>
+ <li>FULL</li>
+ </ul>
+ </td>
+ <td>
+ <div>Select any one of the following Duplex Mode.</div>
+ <div>Required when <em>auto_nego=disable</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-interface"></div>
+ <b>interface</b>
+ <a class="ansibleOptionLink" href="#parameter-interface" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>shared</li>
+ <li>dedicated</li>
+ <li>both</li>
+ </ul>
+ </td>
+ <td>
+ <div>Interface name.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-link_speed"></div>
+ <b>link_speed</b>
+ <a class="ansibleOptionLink" href="#parameter-link_speed" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>10</li>
+ <li>100</li>
+ </ul>
+ </td>
+ <td>
+ <div>Link speed will list all the supported capabilities of the network interface. It can be 10/100 Mbps.</div>
+ <div>Required when <em>auto_nego=disable</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Link test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set network link"
+ kaytus.ksmanage.edit_network_link:
+ interface: "dedicated"
+ auto_nego: "enable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set network link"
+ kaytus.ksmanage.edit_network_link:
+ interface: "dedicated"
+ auto_nego: "disable"
+ link_speed: 100
+ duplex_mode: "FULL"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_network_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_network_module.rst
new file mode 100644
index 000000000..c22cbccb5
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_network_module.rst
@@ -0,0 +1,343 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_network_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_network -- Set network information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_network`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set network information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-interface_name"></div>
+ <b>interface_name</b>
+ <a class="ansibleOptionLink" href="#parameter-interface_name" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>eth0</li>
+ <li>eth1</li>
+ <li>bond0</li>
+ </ul>
+ </td>
+ <td>
+ <div>Set interface name. Select the LAN interface to be configured.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-lan_enable"></div>
+ <b>lan_enable</b>
+ <a class="ansibleOptionLink" href="#parameter-lan_enable" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Enable or disable this interface. If disable, you cannot use this interface any more.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Network test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set network information"
+ kaytus.ksmanage.edit_network:
+ interface_name: "eth0"
+ lan_enable: "enable"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_ntp_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_ntp_module.rst
new file mode 100644
index 000000000..ecf48a766
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_ntp_module.rst
@@ -0,0 +1,486 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_ntp_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_ntp -- Set NTP
++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_ntp`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set NTP on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-auto_date"></div>
+ <b>auto_date</b>
+ <a class="ansibleOptionLink" href="#parameter-auto_date" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Date auto synchronize.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-max_variety"></div>
+ <b>max_variety</b>
+ <a class="ansibleOptionLink" href="#parameter-max_variety" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>NTP Maximum jump time(minute), max variety(1-60).</div>
+ <div>Only the M6 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-ntp_time"></div>
+ <b>ntp_time</b>
+ <a class="ansibleOptionLink" href="#parameter-ntp_time" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>NTP time(YYYYmmddHHMMSS).</div>
+ <div>Only the M5 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-server1"></div>
+ <b>server1</b>
+ <a class="ansibleOptionLink" href="#parameter-server1" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>NTP Server1(ipv4 or ipv6 or domain name), set when auto_date is enable.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-server2"></div>
+ <b>server2</b>
+ <a class="ansibleOptionLink" href="#parameter-server2" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>NTP Server2(ipv4 or ipv6 or domain name), set when auto_date is enable.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-server3"></div>
+ <b>server3</b>
+ <a class="ansibleOptionLink" href="#parameter-server3" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>NTP Server3(ipv4 or ipv6 or domain name), set when auto_date is enable.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-server4"></div>
+ <b>server4</b>
+ <a class="ansibleOptionLink" href="#parameter-server4" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>NTP Server4(ipv4 or ipv6 or domain name), set when auto_date is enable.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-server5"></div>
+ <b>server5</b>
+ <a class="ansibleOptionLink" href="#parameter-server5" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>NTP Server5(ipv4 or ipv6 or domain name), set when auto_date is enable.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-server6"></div>
+ <b>server6</b>
+ <a class="ansibleOptionLink" href="#parameter-server6" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>NTP Server6(ipv4 or ipv6 or domain name), set when auto_date is enable.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-syn_cycle"></div>
+ <b>syn_cycle</b>
+ <a class="ansibleOptionLink" href="#parameter-syn_cycle" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>NTP syn cycle(minute), sync cycle(5-1440).</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-time_zone"></div>
+ <b>time_zone</b>
+ <a class="ansibleOptionLink" href="#parameter-time_zone" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>UTC time zone, chose from {-12, -11.5, -11, ... , 11, 11.5, 12}.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: NTP test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set ntp"
+ kaytus.ksmanage.edit_ntp:
+ auto_date: "enable"
+ server2: "time.nist.gov"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set ntp"
+ kaytus.ksmanage.edit_ntp:
+ auto_date: "disable"
+ ntp_time: "20200609083600"
+ provider: "{{ ksmanage }}"
+
+ - name: "set ntp"
+ kaytus.ksmanage.edit_ntp:
+ time_zone: "8"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_pdisk_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_pdisk_module.rst
new file mode 100644
index 000000000..db2e9118d
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_pdisk_module.rst
@@ -0,0 +1,482 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_pdisk_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_pdisk -- Set physical disk
++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_pdisk`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set physical disk on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-action"></div>
+ <b>action</b>
+ <a class="ansibleOptionLink" href="#parameter-action" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>remove</li>
+ <li>global</li>
+ <li>dedicate</li>
+ </ul>
+ </td>
+ <td>
+ <div>Action while set physical drive hotspare.</div>
+ <div>Required when <em>option=HS</em>.</div>
+ <div>Only the M5 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-ctrl_id"></div>
+ <b>ctrl_id</b>
+ <a class="ansibleOptionLink" href="#parameter-ctrl_id" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Raid controller ID.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-device_id"></div>
+ <b>device_id</b>
+ <a class="ansibleOptionLink" href="#parameter-device_id" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Physical drive id.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-duration"></div>
+ <b>duration</b>
+ <a class="ansibleOptionLink" href="#parameter-duration" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Duration range is 1-255, physical drive under PMC raid controller.</div>
+ <div>Required when <em>option=LOC</em>.</div>
+ <div>Only the M6 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-encl"></div>
+ <b>encl</b>
+ <a class="ansibleOptionLink" href="#parameter-encl" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>yes</li>
+ <li>no</li>
+ </ul>
+ </td>
+ <td>
+ <div>IsEnclAffinity while set physical drive hotspare.</div>
+ <div>Required when <em>option=HS</em> and <em>action=dedicate</em>.</div>
+ <div>Only the M5 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-logical_drivers"></div>
+ <b>logical_drivers</b>
+ <a class="ansibleOptionLink" href="#parameter-logical_drivers" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=integer</span> </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Logical Drivers while set physical drive hotspare, input multiple Logical Drivers index like 0, 1, 2.....</div>
+ <div>Required when <em>option=HS</em> and <em>action=dedicate</em>.</div>
+ <div>Only the M5 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-option"></div>
+ <b>option</b>
+ <a class="ansibleOptionLink" href="#parameter-option" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>UG</li>
+ <li>UB</li>
+ <li>OFF</li>
+ <li>FAIL</li>
+ <li>RBD</li>
+ <li>ON</li>
+ <li>JB</li>
+ <li>ES</li>
+ <li>EM</li>
+ <li>EN</li>
+ <li>ET</li>
+ <li>LOC</li>
+ <li>STL</li>
+ <li>HS</li>
+ </ul>
+ </td>
+ <td>
+ <div>Set operation options for a physical disk.</div>
+ <div>UG is Unconfigured Good, UB is Unconfigured Bad.</div>
+ <div>OFF is offline, FAIL is Failed, RBD is Rebuild.</div>
+ <div>ON is Online, JB is JBOD, ES is Drive Erase stop.</div>
+ <div>EM is Drive Erase Simple, EN is Drive Erase Normal.</div>
+ <div>ET is Drive Erase Through, LOC is Locate, STL is Stop Locate.</div>
+ <div>HS is Hot spare.</div>
+ <div>Only the M5 model supports <code>HS</code> Settings.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-revertible"></div>
+ <b>revertible</b>
+ <a class="ansibleOptionLink" href="#parameter-revertible" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>yes</li>
+ <li>no</li>
+ </ul>
+ </td>
+ <td>
+ <div>IsRevertible while set physical drive hotspare.</div>
+ <div>Required when <em>option=HS</em> and <em>action=dedicate</em>.</div>
+ <div>Only the M5 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Edit pdisk test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Edit pdisk"
+ kaytus.ksmanage.edit_pdisk:
+ ctrl_id: 0
+ device_id: 1
+ option: "LOC"
+ provider: "{{ ksmanage }}"
+
+ - name: "M5 Edit pdisk"
+ kaytus.ksmanage.edit_pdisk:
+ ctrl_id: 0
+ device_id: 1
+ option: "HS"
+ action: "dedicate"
+ revertible: "yes"
+ encl: "yes"
+ logical_drivers: 1
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_power_budget_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_power_budget_module.rst
new file mode 100644
index 000000000..7d28c1a97
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_power_budget_module.rst
@@ -0,0 +1,685 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_power_budget_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_power_budget -- Set power budget information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_power_budget`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set power budget information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-action"></div>
+ <b>action</b>
+ <a class="ansibleOptionLink" href="#parameter-action" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>add</li>
+ <li>delete</li>
+ <li>open</li>
+ <li>close</li>
+ </ul>
+ </td>
+ <td>
+ <div>Type to action.</div>
+ <div>Required when <em>range=False</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-domain"></div>
+ <b>domain</b>
+ <a class="ansibleOptionLink" href="#parameter-domain" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>system</li>
+ <li>cpu</li>
+ </ul>
+ </td>
+ <td>
+ <div>Domain id.</div>
+ <div>Required when <em>range=False</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-end1"></div>
+ <b>end1</b>
+ <a class="ansibleOptionLink" href="#parameter-end1" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Pause period of add, end time, must be greater than start time, from 0 to 24.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-end2"></div>
+ <b>end2</b>
+ <a class="ansibleOptionLink" href="#parameter-end2" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Pause period of add, end time, must be greater than start time, from 0 to 24.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-end3"></div>
+ <b>end3</b>
+ <a class="ansibleOptionLink" href="#parameter-end3" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Pause period of add, end time, must be greater than start time, from 0 to 24.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-end4"></div>
+ <b>end4</b>
+ <a class="ansibleOptionLink" href="#parameter-end4" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Pause period of add, end time, must be greater than start time, from 0 to 24.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-end5"></div>
+ <b>end5</b>
+ <a class="ansibleOptionLink" href="#parameter-end5" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Pause period of add, end time, must be greater than start time, from 0 to 24.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-except_action"></div>
+ <b>except_action</b>
+ <a class="ansibleOptionLink" href="#parameter-except_action" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>0</li>
+ <li>1</li>
+ <li>2</li>
+ <li>3</li>
+ </ul>
+ </td>
+ <td>
+ <div>Except action, 0 is do nothing, 1 is send alert, 2 is shutdown system, 3 is shutdown system and send alert.</div>
+ <div>Only the M7 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-id"></div>
+ <b>id</b>
+ <a class="ansibleOptionLink" href="#parameter-id" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>1</li>
+ <li>2</li>
+ <li>3</li>
+ <li>4</li>
+ </ul>
+ </td>
+ <td>
+ <div>Policy id.</div>
+ <div>Required when <em>range=False</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-range"></div>
+ <b>range</b>
+ <a class="ansibleOptionLink" href="#parameter-range" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li><div style="color: blue"><b>no</b>&nbsp;&larr;</div></li>
+ <li>yes</li>
+ </ul>
+ </td>
+ <td>
+ <div>Range of power budget watts.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-start1"></div>
+ <b>start1</b>
+ <a class="ansibleOptionLink" href="#parameter-start1" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Pause period of add, start time, from 0 to 24.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-start2"></div>
+ <b>start2</b>
+ <a class="ansibleOptionLink" href="#parameter-start2" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Pause period of add, start time, from 0 to 24.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-start3"></div>
+ <b>start3</b>
+ <a class="ansibleOptionLink" href="#parameter-start3" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Pause period of add, start time, from 0 to 24.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-start4"></div>
+ <b>start4</b>
+ <a class="ansibleOptionLink" href="#parameter-start4" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Pause period of add, start time, from 0 to 24.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-start5"></div>
+ <b>start5</b>
+ <a class="ansibleOptionLink" href="#parameter-start5" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Period of add, start time, from 0 to 24.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-watts"></div>
+ <b>watts</b>
+ <a class="ansibleOptionLink" href="#parameter-watts" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Power budget watts of add.</div>
+ <div>Required when <em>action=add</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-week1"></div>
+ <b>week1</b>
+ <a class="ansibleOptionLink" href="#parameter-week1" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=string</span> </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Pause period of add, repetition period.</div>
+ <div>The input parameters are &#x27;Mon&#x27;, &#x27;Tue&#x27;, &#x27;Wed&#x27;, &#x27;Thur&#x27;, &#x27;Fri&#x27;, &#x27;Sat&#x27;, &#x27;Sun&#x27;, separated by commas, such as Mon, Wed, Fri.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-week2"></div>
+ <b>week2</b>
+ <a class="ansibleOptionLink" href="#parameter-week2" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=string</span> </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Pause period of add, repetition period.</div>
+ <div>The input parameters are &#x27;Mon&#x27;, &#x27;Tue&#x27;, &#x27;Wed&#x27;, &#x27;Thur&#x27;, &#x27;Fri&#x27;, &#x27;Sat&#x27;, &#x27;Sun&#x27;, separated by commas, such as Mon, Wed, Fri.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-week3"></div>
+ <b>week3</b>
+ <a class="ansibleOptionLink" href="#parameter-week3" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=string</span> </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Pause period of add, repetition period.</div>
+ <div>The input parameters are &#x27;Mon&#x27;, &#x27;Tue&#x27;, &#x27;Wed&#x27;, &#x27;Thur&#x27;, &#x27;Fri&#x27;, &#x27;Sat&#x27;, &#x27;Sun&#x27;, separated by commas, such as Mon, Wed, Fri.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-week4"></div>
+ <b>week4</b>
+ <a class="ansibleOptionLink" href="#parameter-week4" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=string</span> </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Pause period of add, repetition period.</div>
+ <div>The input parameters are &#x27;Mon&#x27;, &#x27;Tue&#x27;, &#x27;Wed&#x27;, &#x27;Thur&#x27;, &#x27;Fri&#x27;, &#x27;Sat&#x27;, &#x27;Sun&#x27;, separated by commas, such as Mon, Wed, Fri.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-week5"></div>
+ <b>week5</b>
+ <a class="ansibleOptionLink" href="#parameter-week5" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=string</span> </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Pause period of add, repetition period.</div>
+ <div>The input parameters are &#x27;Mon&#x27;, &#x27;Tue&#x27;, &#x27;Wed&#x27;, &#x27;Thur&#x27;, &#x27;Fri&#x27;, &#x27;Sat&#x27;, &#x27;Sun&#x27;, separated by commas, such as Mon, Wed, Fri.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Power budget test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get power budget range"
+ kaytus.ksmanage.edit_power_budget:
+ range: True
+ provider: "{{ ksmanage }}"
+
+ - name: "add power budget"
+ kaytus.ksmanage.edit_power_budget:
+ action: "add"
+ id: 1
+ watts: 1500
+ start1: 2
+ end1: 5
+ week1:
+ - Mon
+ - Wed
+ - Fri
+ provider: "{{ ksmanage }}"
+
+ - name: "Set power budget status to open"
+ kaytus.ksmanage.edit_power_budget:
+ action: "open"
+ id: 1
+ provider: "{{ ksmanage }}"
+
+ - name: "Set power budget status to close"
+ kaytus.ksmanage.edit_power_budget:
+ action: "close"
+ id: 1
+ provider: "{{ ksmanage }}"
+
+ - name: "Delete power budget"
+ kaytus.ksmanage.edit_power_budget:
+ action: "delete"
+ id: 1
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_power_restore_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_power_restore_module.rst
new file mode 100644
index 000000000..8a4fdfd77
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_power_restore_module.rst
@@ -0,0 +1,323 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_power_restore_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_power_restore -- Set power restore information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_power_restore`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set power restore information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-option"></div>
+ <b>option</b>
+ <a class="ansibleOptionLink" href="#parameter-option" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>on</li>
+ <li>off</li>
+ <li>restore</li>
+ </ul>
+ </td>
+ <td>
+ <div>Set power policy option.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Power restore test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set power restore information"
+ kaytus.ksmanage.edit_power_restore:
+ option: "on"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_power_status_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_power_status_module.rst
new file mode 100644
index 000000000..61d8ce18f
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_power_status_module.rst
@@ -0,0 +1,325 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_power_status_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_power_status -- Set power status information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_power_status`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set power status information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#parameter-state" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>On</li>
+ <li>ForceOff</li>
+ <li>ForcePowerCycle</li>
+ <li>ForceReset</li>
+ <li>GracefulShutdown</li>
+ </ul>
+ </td>
+ <td>
+ <div>Power status.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Power status test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set power status information"
+ kaytus.ksmanage.edit_power_status:
+ state: "On"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_preserve_config_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_preserve_config_module.rst
new file mode 100644
index 000000000..1cc0f8008
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_preserve_config_module.rst
@@ -0,0 +1,373 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_preserve_config_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_preserve_config -- Set preserve config
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_preserve_config`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set preserve config on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-override"></div>
+ <b>override</b>
+ <a class="ansibleOptionLink" href="#parameter-override" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=string</span> </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>authentication</li>
+ <li>dcmi</li>
+ <li>fru</li>
+ <li>hostname</li>
+ <li>ipmi</li>
+ <li>kvm</li>
+ <li>network</li>
+ <li>ntp</li>
+ <li>pef</li>
+ <li>sdr</li>
+ <li>sel</li>
+ <li>smtp</li>
+ <li>snmp</li>
+ <li>sol</li>
+ <li>ssh</li>
+ <li>syslog</li>
+ <li>user</li>
+ </ul>
+ </td>
+ <td>
+ <div>Configuration items that need to be retained.</div>
+ <div>Required when <em>setting=manual</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-setting"></div>
+ <b>setting</b>
+ <a class="ansibleOptionLink" href="#parameter-setting" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>all</li>
+ <li>none</li>
+ <li>manual</li>
+ </ul>
+ </td>
+ <td>
+ <div>Preserve option, all - preserve all config; none - overwrite all config; manual - manual choose.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Preserve test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set preserve all"
+ kaytus.ksmanage.edit_preserve_config:
+ setting: "all"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set preserve none"
+ edit_preserve_config:
+ setting: "none"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set preserve manual"
+ edit_preserve_config:
+ setting: "manual"
+ override:
+ - fru
+ - ntp
+ - network
+ - user
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_psu_config_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_psu_config_module.rst
new file mode 100644
index 000000000..1466ceac0
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_psu_config_module.rst
@@ -0,0 +1,339 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_psu_config_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_psu_config -- Set psu config information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_psu_config`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set psu config information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-id"></div>
+ <b>id</b>
+ <a class="ansibleOptionLink" href="#parameter-id" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Power id.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-switch"></div>
+ <b>switch</b>
+ <a class="ansibleOptionLink" href="#parameter-switch" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>active</li>
+ <li>standby</li>
+ <li>normal</li>
+ </ul>
+ </td>
+ <td>
+ <div>Power supply mode, active or standby.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Psu config test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set psu config information"
+ kaytus.ksmanage.edit_psu_config:
+ id: 1
+ switch: "active"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_psu_peak_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_psu_peak_module.rst
new file mode 100644
index 000000000..d01632022
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_psu_peak_module.rst
@@ -0,0 +1,343 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_psu_peak_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_psu_peak -- Set psu peak information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_psu_peak`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set psu peak information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-status"></div>
+ <b>status</b>
+ <a class="ansibleOptionLink" href="#parameter-status" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Power peak status.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-time"></div>
+ <b>time</b>
+ <a class="ansibleOptionLink" href="#parameter-time" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Maximum random time, range of values(1-600), unit(second).</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Psu peak test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set psu peak information"
+ kaytus.ksmanage.edit_psu_peak:
+ status: "disable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set psu peak information"
+ kaytus.ksmanage.edit_psu_peak:
+ status: "enable"
+ time: 10
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_restore_factory_default_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_restore_factory_default_module.rst
new file mode 100644
index 000000000..77ffa69e4
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_restore_factory_default_module.rst
@@ -0,0 +1,368 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_restore_factory_default_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_restore_factory_default -- Set preserver config
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_restore_factory_default`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set preserver config on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-mode"></div>
+ <b>mode</b>
+ <a class="ansibleOptionLink" href="#parameter-mode" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>all</li>
+ <li>none</li>
+ <li>manual</li>
+ </ul>
+ </td>
+ <td>
+ <div>Restore factory defaults mode.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-override"></div>
+ <b>override</b>
+ <a class="ansibleOptionLink" href="#parameter-override" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=string</span> </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>authentication</li>
+ <li>dcmi</li>
+ <li>fru</li>
+ <li>hostname</li>
+ <li>ipmi</li>
+ <li>kvm</li>
+ <li>network</li>
+ <li>ntp</li>
+ <li>pef</li>
+ <li>sdr</li>
+ <li>sel</li>
+ <li>smtp</li>
+ <li>snmp</li>
+ <li>sol</li>
+ <li>ssh</li>
+ <li>syslog</li>
+ <li>user</li>
+ </ul>
+ </td>
+ <td>
+ <div>Configuration items that need to be retained.</div>
+ <div>Required when <em>mode=manual</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Restore default test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set restore default auto"
+ kaytus.ksmanage.edit_restore_factory_default:
+ mode: "all"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set restore default manual"
+ kaytus.ksmanage.edit_restore_factory_default:
+ mode: "manual"
+ override:
+ - fru
+ - ntp
+ - network
+ - user
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_service_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_service_module.rst
new file mode 100644
index 000000000..d5628c468
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_service_module.rst
@@ -0,0 +1,428 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_service_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_service -- Set service settings
+++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_service`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set service settings on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-interface"></div>
+ <b>interface</b>
+ <a class="ansibleOptionLink" href="#parameter-interface" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>eth0</li>
+ <li>eth1</li>
+ <li>both</li>
+ <li>bond0</li>
+ </ul>
+ </td>
+ <td>
+ <div>It shows the interface in which service is running.</div>
+ <div>The user can choose any one of the available interfaces.</div>
+ <div>Only the M5 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-non_secure_port"></div>
+ <b>non_secure_port</b>
+ <a class="ansibleOptionLink" href="#parameter-non_secure_port" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Used to configure non secure port number for the service.</div>
+ <div>Port value ranges from 1 to 65535.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-secure_port"></div>
+ <b>secure_port</b>
+ <a class="ansibleOptionLink" href="#parameter-secure_port" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Used to configure secure port number for the service.</div>
+ <div>Port value ranges from 1 to 65535.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-service_name"></div>
+ <b>service_name</b>
+ <a class="ansibleOptionLink" href="#parameter-service_name" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>web</li>
+ <li>kvm</li>
+ <li>cd-media</li>
+ <li>fd-media</li>
+ <li>hd-media</li>
+ <li>ssh</li>
+ <li>telnet</li>
+ <li>solssh</li>
+ <li>snmp</li>
+ <li>vnc</li>
+ </ul>
+ </td>
+ <td>
+ <div>Displays service name of the selected slot(readonly).</div>
+ <div>The <em>vnc</em> option is not supported in M5.</div>
+ <div>The <em>fd-media/telnet/snmp</em> option is not supported in M6.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#parameter-state" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>active</li>
+ <li>inactive</li>
+ </ul>
+ </td>
+ <td>
+ <div>Displays the current status of the service, either active or inactive state.</div>
+ <div>Check this option to start the inactive service.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-timeout"></div>
+ <b>timeout</b>
+ <a class="ansibleOptionLink" href="#parameter-timeout" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Displays the session timeout value of the service.</div>
+ <div>For web, SSH and telnet service, user can configure the session timeout value.</div>
+ <div>Web timeout value ranges from 300 to 1800 seconds.</div>
+ <div>SSH and Telnet timeout value ranges from 60 to 1800 seconds.</div>
+ <div>Timeout value should be in multiples of 60 seconds.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Edit service test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Edit kvm"
+ kaytus.ksmanage.edit_service:
+ service_name: "kvm"
+ state: "active"
+ timeout: "1200"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_smtp_com_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_smtp_com_module.rst
new file mode 100644
index 000000000..24f139729
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_smtp_com_module.rst
@@ -0,0 +1,578 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_smtp_com_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_smtp_com -- Set SMTP information
++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_smtp_com`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set SMTP com information on kaytus Server.
+- Only the M6 models support this feature.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-asset_tag"></div>
+ <b>asset_tag</b>
+ <a class="ansibleOptionLink" href="#parameter-asset_tag" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Product asset label.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-email"></div>
+ <b>email</b>
+ <a class="ansibleOptionLink" href="#parameter-email" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Sender email.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-event_level"></div>
+ <b>event_level</b>
+ <a class="ansibleOptionLink" href="#parameter-event_level" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>Info</li>
+ <li>Warning</li>
+ <li>Critical</li>
+ </ul>
+ </td>
+ <td>
+ <div>Events above this level will be sent.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host_name"></div>
+ <b>host_name</b>
+ <a class="ansibleOptionLink" href="#parameter-host_name" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Server name.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-serial_number"></div>
+ <b>serial_number</b>
+ <a class="ansibleOptionLink" href="#parameter-serial_number" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Serial number.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-server_auth"></div>
+ <b>server_auth</b>
+ <a class="ansibleOptionLink" href="#parameter-server_auth" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>SMTP server authentication.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-server_ip"></div>
+ <b>server_ip</b>
+ <a class="ansibleOptionLink" href="#parameter-server_ip" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>SMTP server IP.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-server_password"></div>
+ <b>server_password</b>
+ <a class="ansibleOptionLink" href="#parameter-server_password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>SMTP server Password, length be 4 to 64 bits, cannot contain &#x27; &#x27;(space).</div>
+ <div>Required when <em>server_auth=enable</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-server_port"></div>
+ <b>server_port</b>
+ <a class="ansibleOptionLink" href="#parameter-server_port" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>SMTP server port, The Identification for retry count configuration(1-65535).</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-server_secure_port"></div>
+ <b>server_secure_port</b>
+ <a class="ansibleOptionLink" href="#parameter-server_secure_port" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>SMTP server secure port, The Identification for retry count configuration(1-65535).</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-server_username"></div>
+ <b>server_username</b>
+ <a class="ansibleOptionLink" href="#parameter-server_username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>SMTP server Username, length be 4 to 64 bits.</div>
+ <div>Must start with letters and cannot contain &#x27;,&#x27;(comma) &#x27;:&#x27;(colon) &#x27; &#x27;(space) &#x27;;&#x27;(semicolon) &#x27;\&#x27;(backslash).</div>
+ <div>Required when <em>server_auth=enable</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-ssl_tls_enable"></div>
+ <b>ssl_tls_enable</b>
+ <a class="ansibleOptionLink" href="#parameter-ssl_tls_enable" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>SMTP SSLTLS Enable.</div>
+ <div><em>ssl_tls_enable=disable</em>, when <em>star_tls_enable=enable</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-star_tls_enable"></div>
+ <b>star_tls_enable</b>
+ <a class="ansibleOptionLink" href="#parameter-star_tls_enable" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>SMTP STARTTLS Enable.</div>
+ <div><em>star_tls_enable=disable</em>, when <em>ssl_tls_enable=enable</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-status"></div>
+ <b>status</b>
+ <a class="ansibleOptionLink" href="#parameter-status" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>SMTP Support.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-subject"></div>
+ <b>subject</b>
+ <a class="ansibleOptionLink" href="#parameter-subject" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Email theme.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Smtp com test
+ hosts: ksmanage
+ no_log: true
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set smtp com information"
+ kaytus.ksmanage.edit_smtp_com:
+ status: "disable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set smtp com information"
+ kaytus.ksmanage.edit_smtp_com:
+ status: "enable"
+ server_ip: "100.2.2.2"
+ email: "ks@kaytus.com"
+ server_auth: "enable"
+ server_username: "admin"
+ server_password: "1234qwer!@#$"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_smtp_dest_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_smtp_dest_module.rst
new file mode 100644
index 000000000..e2c403eb8
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_smtp_dest_module.rst
@@ -0,0 +1,383 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_smtp_dest_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_smtp_dest -- Set SMTP information
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_smtp_dest`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set SMTP dest information on kaytus Server.
+- Only the M6 models support this feature.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-address"></div>
+ <b>address</b>
+ <a class="ansibleOptionLink" href="#parameter-address" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Email address.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-description"></div>
+ <b>description</b>
+ <a class="ansibleOptionLink" href="#parameter-description" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Description information.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-id"></div>
+ <b>id</b>
+ <a class="ansibleOptionLink" href="#parameter-id" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>1</li>
+ <li>2</li>
+ <li>3</li>
+ <li>4</li>
+ </ul>
+ </td>
+ <td>
+ <div>Email destination id.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-status"></div>
+ <b>status</b>
+ <a class="ansibleOptionLink" href="#parameter-status" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Email enable.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Smtp dest test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set smtp dest information"
+ kaytus.ksmanage.edit_smtp_dest:
+ id: 1
+ status: "disable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set smtp dest information"
+ kaytus.ksmanage.edit_smtp_dest:
+ id: 1
+ status: "enable"
+ address: "100.2.2.2"
+ description": "test"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_smtp_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_smtp_module.rst
new file mode 100644
index 000000000..b00842ae8
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_smtp_module.rst
@@ -0,0 +1,587 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_smtp_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_smtp -- Set SMTP information
++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_smtp`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set SMTP information on kaytus Server.
+- Only the M5 models support this feature.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-email"></div>
+ <b>email</b>
+ <a class="ansibleOptionLink" href="#parameter-email" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Sender email.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-interface"></div>
+ <b>interface</b>
+ <a class="ansibleOptionLink" href="#parameter-interface" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>eth0</li>
+ <li>eth1</li>
+ <li>bond0</li>
+ </ul>
+ </td>
+ <td>
+ <div>LAN Channel, eth0 is shared, eth1 is dedicated.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-primary_auth"></div>
+ <b>primary_auth</b>
+ <a class="ansibleOptionLink" href="#parameter-primary_auth" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Primary SMTP server authentication.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-primary_ip"></div>
+ <b>primary_ip</b>
+ <a class="ansibleOptionLink" href="#parameter-primary_ip" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Primary SMTP server IP.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-primary_name"></div>
+ <b>primary_name</b>
+ <a class="ansibleOptionLink" href="#parameter-primary_name" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Primary SMTP server name.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-primary_password"></div>
+ <b>primary_password</b>
+ <a class="ansibleOptionLink" href="#parameter-primary_password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Primary SMTP server Password, length be 4 to 64 bits, cannot contain &#x27; &#x27;(space).</div>
+ <div>Required when <em>primary_auth=enable</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-primary_port"></div>
+ <b>primary_port</b>
+ <a class="ansibleOptionLink" href="#parameter-primary_port" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Primary SMTP server port, The Identification for retry count configuration(1-65535).</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-primary_status"></div>
+ <b>primary_status</b>
+ <a class="ansibleOptionLink" href="#parameter-primary_status" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Primary SMTP Support.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-primary_username"></div>
+ <b>primary_username</b>
+ <a class="ansibleOptionLink" href="#parameter-primary_username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Primary SMTP server Username, length be 4 to 64 bits.</div>
+ <div>Must start with letters and cannot contain &#x27;, &#x27;(comma) &#x27;:&#x27;(colon) &#x27; &#x27;(space) &#x27;;&#x27;(semicolon) &#x27;\&#x27;(backslash).</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-secondary_auth"></div>
+ <b>secondary_auth</b>
+ <a class="ansibleOptionLink" href="#parameter-secondary_auth" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Secondary SMTP server authentication.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-secondary_ip"></div>
+ <b>secondary_ip</b>
+ <a class="ansibleOptionLink" href="#parameter-secondary_ip" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Secondary SMTP server IP.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-secondary_name"></div>
+ <b>secondary_name</b>
+ <a class="ansibleOptionLink" href="#parameter-secondary_name" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Secondary SMTP server name.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-secondary_password"></div>
+ <b>secondary_password</b>
+ <a class="ansibleOptionLink" href="#parameter-secondary_password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Secondary SMTP server Password, length be 4 to 64 bits, cannot contain &#x27; &#x27;(space).</div>
+ <div>Required when <em>secondary_auth=enable</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-secondary_port"></div>
+ <b>secondary_port</b>
+ <a class="ansibleOptionLink" href="#parameter-secondary_port" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Secondary SMTP server port, The Identification for retry count configuration(1-65535).</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-secondary_status"></div>
+ <b>secondary_status</b>
+ <a class="ansibleOptionLink" href="#parameter-secondary_status" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Secondary SMTP Support.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-secondary_username"></div>
+ <b>secondary_username</b>
+ <a class="ansibleOptionLink" href="#parameter-secondary_username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Secondary SMTP server Username, length be 4 to 64 bits.</div>
+ <div>Must start with letters and cannot contain &#x27;,&#x27;(comma) &#x27;:&#x27;(colon) &#x27; &#x27;(space) &#x27;;&#x27;(semicolon) &#x27;\&#x27;(backslash).</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Smtp test
+ hosts: ksmanage
+ no_log: true
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set smtp information"
+ kaytus.ksmanage.edit_smtp:
+ interface: "eth0"
+ email: "ieit@ieisystem.com"
+ primary_status: "enable"
+ primary_ip: "100.2.2.2"
+ primary_name: "test"
+ primary_auth: "disable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set smtp information"
+ kaytus.ksmanage.edit_smtp:
+ interface: "eth0"
+ email: "ieit@ieisystem.com"
+ primary_status: "enable"
+ primary_ip: "100.2.2.2"
+ primary_name: "test"
+ primary_auth: "enable"
+ primary_username: "test"
+ primary_password: my_password
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_snmp_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_snmp_module.rst
new file mode 100644
index 000000000..d153a2fb1
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_snmp_module.rst
@@ -0,0 +1,540 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_snmp_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_snmp -- Set snmp
++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_snmp`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set snmp on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-auth_password"></div>
+ <b>auth_password</b>
+ <a class="ansibleOptionLink" href="#parameter-auth_password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Set the authentication password for the V3 trap or v3get/v3set.</div>
+ <div>The password is a string of 8 to 16 alphanumeric characters.</div>
+ <div>Required when <em>auth_protocol</em> is either <code>SHA</code> or <code>MD5</code>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-auth_protocol"></div>
+ <b>auth_protocol</b>
+ <a class="ansibleOptionLink" href="#parameter-auth_protocol" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>NONE</li>
+ <li>SHA</li>
+ <li>MD5</li>
+ </ul>
+ </td>
+ <td>
+ <div>Choose the authentication protocol for the V3 trap or v3get/v3set.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-community"></div>
+ <b>community</b>
+ <a class="ansibleOptionLink" href="#parameter-community" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Community of v1/v2c or v1get/v1set/v2cget/v2cset.</div>
+ <div>Only the M5 models support this feature.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-priv_password"></div>
+ <b>priv_password</b>
+ <a class="ansibleOptionLink" href="#parameter-priv_password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Set the privacy password for the V3 trap or v3get/v3set.</div>
+ <div>The password is a string of 8 to 16 alphanumeric characters.</div>
+ <div>Required when <em>priv_protocol</em> is either <code>DES</code> or <code>AES</code>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-priv_protocol"></div>
+ <b>priv_protocol</b>
+ <a class="ansibleOptionLink" href="#parameter-priv_protocol" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>NONE</li>
+ <li>DES</li>
+ <li>AES</li>
+ </ul>
+ </td>
+ <td>
+ <div>Choose the privacy protocol for the V3 trap or v3get/v3set.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-read_community"></div>
+ <b>read_community</b>
+ <a class="ansibleOptionLink" href="#parameter-read_community" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Read Only Community, Community should between 1 and 16 characters.</div>
+ <div>Only the M6 models support this feature.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-read_write_community"></div>
+ <b>read_write_community</b>
+ <a class="ansibleOptionLink" href="#parameter-read_write_community" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Read And Write Community, Community should between 1 and 16 characters.</div>
+ <div>Only the M6 models support this feature.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-snmp_status"></div>
+ <b>snmp_status</b>
+ <a class="ansibleOptionLink" href="#parameter-snmp_status" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=string</span> </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>NMP read/write status of customize.</div>
+ <div>The input parameters are &#x27;v1get&#x27;, &#x27;v1set&#x27;, &#x27;v2cget&#x27;, &#x27;v2cset&#x27;, &#x27;v3get&#x27;, &#x27;v3set&#x27;, separated by commas, such as v1get, v1set, v2cget.</div>
+ <div>Only the M5 models support this feature.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-v1status"></div>
+ <b>v1status</b>
+ <a class="ansibleOptionLink" href="#parameter-v1status" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>SNMP V1 enable.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-v2status"></div>
+ <b>v2status</b>
+ <a class="ansibleOptionLink" href="#parameter-v2status" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>SNMP V2 enable.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-v3status"></div>
+ <b>v3status</b>
+ <a class="ansibleOptionLink" href="#parameter-v3status" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>SNMP V3 enable.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-v3username"></div>
+ <b>v3username</b>
+ <a class="ansibleOptionLink" href="#parameter-v3username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Set a username for the V3 trap or v3get/v3set.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-version"></div>
+ <b>version</b>
+ <a class="ansibleOptionLink" href="#parameter-version" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>0</li>
+ <li>1</li>
+ <li>2</li>
+ <li>3</li>
+ <li>4</li>
+ </ul>
+ </td>
+ <td>
+ <div>SNMP trap version option, 0 - &#x27;v1&#x27;, 1 - &#x27;v2c&#x27;, 2 - &#x27;v3&#x27;, 3 - &#x27;all&#x27;, 4 - &#x27;customize&#x27;.</div>
+ <div>Only the M5 models support this feature.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Snmp test
+ hosts: ksmanage
+ no_log: true
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set snmp get/set"
+ kaytus.ksmanage.edit_snmp:
+ community: "test"
+ v3username: "test"
+ provider: "{{ ksmanage }}"
+
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_snmp_trap_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_snmp_trap_module.rst
new file mode 100644
index 000000000..8efffc81a
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_snmp_trap_module.rst
@@ -0,0 +1,598 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_snmp_trap_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_snmp_trap -- Set snmp trap
++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_snmp_trap`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set snmp trap on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-auth_password"></div>
+ <b>auth_password</b>
+ <a class="ansibleOptionLink" href="#parameter-auth_password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Set the authentication password for the V3 trap.</div>
+ <div>The password is a string of 8 to 16 alphanumeric characters.</div>
+ <div>Required when <em>auth_protocol</em> is either <code>SHA</code> or <code>MD5</code>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-auth_protocol"></div>
+ <b>auth_protocol</b>
+ <a class="ansibleOptionLink" href="#parameter-auth_protocol" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>NONE</li>
+ <li>SHA</li>
+ <li>MD5</li>
+ </ul>
+ </td>
+ <td>
+ <div>Choose the authentication protocol for the V3 trap.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-community"></div>
+ <b>community</b>
+ <a class="ansibleOptionLink" href="#parameter-community" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Community of v1/v2c.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-contact"></div>
+ <b>contact</b>
+ <a class="ansibleOptionLink" href="#parameter-contact" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Set the contact, can be NULL.</div>
+ <div>Only the M5 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-engine_id"></div>
+ <b>engine_id</b>
+ <a class="ansibleOptionLink" href="#parameter-engine_id" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies an engine identifier for the V3 trap. The value should be string of 10 to 48 hex characters, must be even, can be NULL.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-event_severity"></div>
+ <b>event_severity</b>
+ <a class="ansibleOptionLink" href="#parameter-event_severity" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>all</li>
+ <li>warning</li>
+ <li>critical</li>
+ </ul>
+ </td>
+ <td>
+ <div>Event Severity.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host_id"></div>
+ <b>host_id</b>
+ <a class="ansibleOptionLink" href="#parameter-host_id" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>HostName</li>
+ <li>SerialNum</li>
+ <li>AssertTag</li>
+ </ul>
+ </td>
+ <td>
+ <div>Host id.</div>
+ <div>Only the M6 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-location"></div>
+ <b>location</b>
+ <a class="ansibleOptionLink" href="#parameter-location" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Set the host location, can be NULL.</div>
+ <div>Only the M5 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-os"></div>
+ <b>os</b>
+ <a class="ansibleOptionLink" href="#parameter-os" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Set the host operating system, can be NULL.</div>
+ <div>Only the M5 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-priv_password"></div>
+ <b>priv_password</b>
+ <a class="ansibleOptionLink" href="#parameter-priv_password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Set the privacy password for the V3 trap.</div>
+ <div>The password is a string of 8 to 16 alphanumeric characters.</div>
+ <div>Required when <em>priv_protocol</em> is either <code>DES</code> or <code>AES</code>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-priv_protocol"></div>
+ <b>priv_protocol</b>
+ <a class="ansibleOptionLink" href="#parameter-priv_protocol" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>NONE</li>
+ <li>DES</li>
+ <li>AES</li>
+ </ul>
+ </td>
+ <td>
+ <div>Choose the privacy protocol for the V3 trap.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-system_id"></div>
+ <b>system_id</b>
+ <a class="ansibleOptionLink" href="#parameter-system_id" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Set the system ID, can be NULL.</div>
+ <div>Only the M5 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-system_name"></div>
+ <b>system_name</b>
+ <a class="ansibleOptionLink" href="#parameter-system_name" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Set the system name, can be NULL.</div>
+ <div>Only the M5 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-trap_port"></div>
+ <b>trap_port</b>
+ <a class="ansibleOptionLink" href="#parameter-trap_port" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Set a port for the SNMP trap in the range of 1 to 65535.</div>
+ <div>Only the M5 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-v3username"></div>
+ <b>v3username</b>
+ <a class="ansibleOptionLink" href="#parameter-v3username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Set the username for the V3 trap.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-version"></div>
+ <b>version</b>
+ <a class="ansibleOptionLink" href="#parameter-version" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>0</li>
+ <li>1</li>
+ <li>2</li>
+ <li>3</li>
+ </ul>
+ </td>
+ <td>
+ <div>SNMP trap version, 1 is v1, 2 is v2c(v2), 3 is v3, 0 is disable snmp trap.</div>
+ <div>Only the M6 model supports <code>0</code> Settings.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Trap test
+ hosts: ksmanage
+ no_log: true
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set snmp trap v2c"
+ kaytus.ksmanage.edit_snmp_trap:
+ version: 2
+ event_severity: "warning"
+ community: "test"
+ system_name: "ieisystem"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set snmp trap v3"
+ kaytus.ksmanage.edit_snmp_trap:
+ version: 3
+ event_severity: "all"
+ v3username: "ieisystem"
+ engine_id: "1234567890"
+ auth_protocol: "SHA"
+ auth_password: "12345678"
+ priv_protocol: "AES"
+ priv_password: "123454678"
+ trap_port: 162
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_threshold_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_threshold_module.rst
new file mode 100644
index 000000000..b9aff43a0
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_threshold_module.rst
@@ -0,0 +1,410 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_threshold_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_threshold -- Set threshold information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_threshold`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set threshold information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-lc"></div>
+ <b>lc</b>
+ <a class="ansibleOptionLink" href="#parameter-lc" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Lower critical threshold, should be integer.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-lnc"></div>
+ <b>lnc</b>
+ <a class="ansibleOptionLink" href="#parameter-lnc" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Lower non critical threshold, should be integer.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-lnr"></div>
+ <b>lnr</b>
+ <a class="ansibleOptionLink" href="#parameter-lnr" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Lower non recoverable threshold, should be integer.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-name"></div>
+ <b>name</b>
+ <a class="ansibleOptionLink" href="#parameter-name" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Sensor name.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-uc"></div>
+ <b>uc</b>
+ <a class="ansibleOptionLink" href="#parameter-uc" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Up critical threshold, should be integer.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-unc"></div>
+ <b>unc</b>
+ <a class="ansibleOptionLink" href="#parameter-unc" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Up non critical threshold, should be integer.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-unr"></div>
+ <b>unr</b>
+ <a class="ansibleOptionLink" href="#parameter-unr" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Up non recoverable threshold, should be integer.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Threshold test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set threshold information"
+ kaytus.ksmanage.edit_threshold:
+ name: "GPU1_Temp"
+ uc: 94
+ unc: 92
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_uid_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_uid_module.rst
new file mode 100644
index 000000000..7dbc0d87e
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_uid_module.rst
@@ -0,0 +1,343 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_uid_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_uid -- Set UID
++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_uid`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set UID on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-led"></div>
+ <b>led</b>
+ <a class="ansibleOptionLink" href="#parameter-led" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>on</li>
+ <li>off</li>
+ </ul>
+ </td>
+ <td>
+ <div>Turn on or turn off the led.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-time"></div>
+ <b>time</b>
+ <a class="ansibleOptionLink" href="#parameter-time" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Set led blink time(second).</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: UID test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set uid"
+ kaytus.ksmanage.edit_uid:
+ led: "on"
+ time: 10
+ provider: "{{ ksmanage }}"
+
+ - name: "Set uid"
+ kaytus.ksmanage.edit_uid:
+ led: "off"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_virtual_media_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_virtual_media_module.rst
new file mode 100644
index 000000000..ae75b9534
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_virtual_media_module.rst
@@ -0,0 +1,511 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_virtual_media_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_virtual_media -- Set virtual media
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_virtual_media`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set virtual media on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-local_media_support"></div>
+ <b>local_media_support</b>
+ <a class="ansibleOptionLink" href="#parameter-local_media_support" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>Enable</li>
+ <li>Disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>To enable or disable Local Media Support, check or uncheck the checkbox respectively.</div>
+ <div>Only the M5 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-mount"></div>
+ <b>mount</b>
+ <a class="ansibleOptionLink" href="#parameter-mount" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>Enable</li>
+ <li>Disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Whether to mount virtual media.</div>
+ <div>Only the M5 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-mount_type"></div>
+ <b>mount_type</b>
+ <a class="ansibleOptionLink" href="#parameter-mount_type" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>CD</li>
+ <li>FD</li>
+ <li>HD</li>
+ </ul>
+ </td>
+ <td>
+ <div>Virtual mount type.</div>
+ <div>The <em>FD</em> option is not supported in M6.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-remote_domain_name"></div>
+ <b>remote_domain_name</b>
+ <a class="ansibleOptionLink" href="#parameter-remote_domain_name" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Remote Domain Name, Domain Name field is optional.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-remote_media_support"></div>
+ <b>remote_media_support</b>
+ <a class="ansibleOptionLink" href="#parameter-remote_media_support" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>Enable</li>
+ <li>Disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>To enable or disable Remote Media support, check or uncheck the checkbox respectively.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-remote_password"></div>
+ <b>remote_password</b>
+ <a class="ansibleOptionLink" href="#parameter-remote_password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Remote Password.</div>
+ <div>Required when <em>remote_share_type=cifs</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-remote_server_address"></div>
+ <b>remote_server_address</b>
+ <a class="ansibleOptionLink" href="#parameter-remote_server_address" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Address of the server where the remote media images are stored.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-remote_share_type"></div>
+ <b>remote_share_type</b>
+ <a class="ansibleOptionLink" href="#parameter-remote_share_type" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>nfs</li>
+ <li>cifs</li>
+ </ul>
+ </td>
+ <td>
+ <div>Share Type of the remote media server either NFS or Samba(CIFS).</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-remote_source_path"></div>
+ <b>remote_source_path</b>
+ <a class="ansibleOptionLink" href="#parameter-remote_source_path" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Source path to the remote media images..</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-remote_user_name"></div>
+ <b>remote_user_name</b>
+ <a class="ansibleOptionLink" href="#parameter-remote_user_name" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Remote User Name.</div>
+ <div>Required when <em>remote_share_type=cifs</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-same_settings"></div>
+ <b>same_settings</b>
+ <a class="ansibleOptionLink" href="#parameter-same_settings" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>0</li>
+ <li>1</li>
+ </ul>
+ </td>
+ <td>
+ <div>Same settings with <em>CD</em>, 0 is No, 1 is Yes.</div>
+ <div>Required when <em>mount_type=0</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Media test
+ hosts: ksmanage
+ no_log: true
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set local media"
+ kaytus.ksmanage.edit_virtual_media:
+ local_media_support: "Enable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set remote media"
+ kaytus.ksmanage.edit_virtual_media:
+ remote_media_support: "Enable"
+ mount_type: 'CD'
+ same_settings: 0
+ mount: "Enable"
+ remote_server_address: "100.2.28.203"
+ remote_source_path: "/data/nfs/server/"
+ remote_share_type: "nfs"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/edit_vlan_module.rst b/ansible_collections/kaytus/ksmanage/docs/edit_vlan_module.rst
new file mode 100644
index 000000000..de8697253
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/edit_vlan_module.rst
@@ -0,0 +1,381 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.edit_vlan_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.edit_vlan -- Set vlan information
++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.edit_vlan`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Set vlan information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-interface_name"></div>
+ <b>interface_name</b>
+ <a class="ansibleOptionLink" href="#parameter-interface_name" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>eth0</li>
+ <li>eth1</li>
+ <li>bond0</li>
+ </ul>
+ </td>
+ <td>
+ <div>Set interface name. Select the LAN interface to be configured.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-vlan_id"></div>
+ <b>vlan_id</b>
+ <a class="ansibleOptionLink" href="#parameter-vlan_id" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>The Identification for VLAN configuration(2-4094).</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-vlan_priority"></div>
+ <b>vlan_priority</b>
+ <a class="ansibleOptionLink" href="#parameter-vlan_priority" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>The priority for VLAN configuration(1-7).</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-vlan_status"></div>
+ <b>vlan_status</b>
+ <a class="ansibleOptionLink" href="#parameter-vlan_status" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Enable or disable vlan.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Vlan test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set vlan information"
+ kaytus.ksmanage.edit_vlan:
+ interface_name: "eth0"
+ vlan_status: "disable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set vlan information"
+ kaytus.ksmanage.edit_vlan:
+ interface_name: "eth0"
+ vlan_status: "enable"
+ vlan_id: 2
+ vlan_priority: 1
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/event_log_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/event_log_info_module.rst
new file mode 100644
index 000000000..f044fa131
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/event_log_info_module.rst
@@ -0,0 +1,358 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.event_log_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.event_log_info -- Get event log information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.event_log_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get event log information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-count"></div>
+ <b>count</b>
+ <a class="ansibleOptionLink" href="#parameter-count" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Get the most recent log of a specified number.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-event_file"></div>
+ <b>event_file</b>
+ <a class="ansibleOptionLink" href="#parameter-event_file" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Store logs to a file.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-log_time"></div>
+ <b>log_time</b>
+ <a class="ansibleOptionLink" href="#parameter-log_time" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Get logs after the specified date, time should be YYYY-MM-DDTHH:MM+HH:MM, like 2019-06-27T12:30+08:00.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Event log info test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get event log information"
+ kaytus.ksmanage.event_log_info:
+ log_time: "2020-06-01T12:30+08:00"
+ provider: "{{ ksmanage }}"
+
+ - name: "Get event log information"
+ kaytus.ksmanage.event_log_info:
+ count: 30
+ provider: "{{ ksmanage }}"
+
+ - name: "Get event log information"
+ kaytus.ksmanage.event_log_info:
+ event_file: "/home/wbs/wbs.log"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/event_log_policy_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/event_log_policy_info_module.rst
new file mode 100644
index 000000000..15f9eabb4
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/event_log_policy_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.event_log_policy_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.event_log_policy_info -- Get event log policy information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.event_log_policy_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get event log policy information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Event log policy test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get event log policy information"
+ kaytus.ksmanage.event_log_policy_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/fan_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/fan_info_module.rst
new file mode 100644
index 000000000..e6312749b
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/fan_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.fan_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.fan_info -- Get fan information
++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.fan_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get fan information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Fan test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get fan information"
+ kaytus.ksmanage.fan_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/fru_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/fru_info_module.rst
new file mode 100644
index 000000000..d6cb650ad
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/fru_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.fru_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.fru_info -- Get fru information
++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.fru_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get fru information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Fru info test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get fru information"
+ kaytus.ksmanage.fru_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/fw_version_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/fw_version_info_module.rst
new file mode 100644
index 000000000..249c9960a
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/fw_version_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.fw_version_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.fw_version_info -- Get firmware version information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.fw_version_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get firmware version information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Firmware version test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get firmware version information"
+ kaytus.ksmanage.fw_version_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/gpu_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/gpu_info_module.rst
new file mode 100644
index 000000000..cbef0cd68
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/gpu_info_module.rst
@@ -0,0 +1,303 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.gpu_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.gpu_info -- Get GPU information
++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.gpu_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get GPU information on kaytus Server.
+- Only the M6 models support this feature.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: GPU test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get gpu information"
+ kaytus.ksmanage.gpu_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/hard_disk_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/hard_disk_info_module.rst
new file mode 100644
index 000000000..0e3c61bdb
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/hard_disk_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.hard_disk_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.hard_disk_info -- Get hard disk information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.hard_disk_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get hard disk information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Hard disk test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get hard disk information"
+ kaytus.ksmanage.hard_disk_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/hba_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/hba_info_module.rst
new file mode 100644
index 000000000..da2f90f34
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/hba_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.hba_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.hba_info -- Get CPU information
++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.hba_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get HBA information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: HBA test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get hba information"
+ kaytus.ksmanage.hba_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/index.rst b/ansible_collections/kaytus/ksmanage/docs/index.rst
new file mode 100644
index 000000000..5f7e2fcf8
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/index.rst
@@ -0,0 +1,149 @@
+:orphan:
+
+.. _plugins_in_kaytus.ksmanage:
+
+Plugin Index
+============
+
+These are the plugins in the kaytus.ksmanage collection
+
+.. toctree::
+ :maxdepth: 1
+
+
+Modules
+-------
+
+* :ref:`ad_group <ansible_collections.kaytus.ksmanage.ad_group_module>` -- Manage active directory group information
+* :ref:`ad_group_info <ansible_collections.kaytus.ksmanage.ad_group_info_module>` -- Get active directory group information
+* :ref:`ad_info <ansible_collections.kaytus.ksmanage.ad_info_module>` -- Get active directory information
+* :ref:`adapter_info <ansible_collections.kaytus.ksmanage.adapter_info_module>` -- Get adapter information
+* :ref:`add_ldisk <ansible_collections.kaytus.ksmanage.add_ldisk_module>` -- Create logical disk
+* :ref:`alert_policy_info <ansible_collections.kaytus.ksmanage.alert_policy_info_module>` -- Get alert policy
+* :ref:`audit_log_info <ansible_collections.kaytus.ksmanage.audit_log_info_module>` -- Get BMC audit log information
+* :ref:`auto_capture_info <ansible_collections.kaytus.ksmanage.auto_capture_info_module>` -- Get auto capture screen information
+* :ref:`backplane_info <ansible_collections.kaytus.ksmanage.backplane_info_module>` -- Get disk backplane information
+* :ref:`backup <ansible_collections.kaytus.ksmanage.backup_module>` -- Backup server settings
+* :ref:`bios_export <ansible_collections.kaytus.ksmanage.bios_export_module>` -- Export BIOS config
+* :ref:`bios_import <ansible_collections.kaytus.ksmanage.bios_import_module>` -- Import BIOS config
+* :ref:`bios_info <ansible_collections.kaytus.ksmanage.bios_info_module>` -- Get BIOS setup
+* :ref:`bmc_info <ansible_collections.kaytus.ksmanage.bmc_info_module>` -- Get BMC information
+* :ref:`boot_image_info <ansible_collections.kaytus.ksmanage.boot_image_info_module>` -- Get bmc boot image information
+* :ref:`boot_option_info <ansible_collections.kaytus.ksmanage.boot_option_info_module>` -- Get BIOS boot options
+* :ref:`clear_audit_log <ansible_collections.kaytus.ksmanage.clear_audit_log_module>` -- Clear BMC audit log
+* :ref:`clear_event_log <ansible_collections.kaytus.ksmanage.clear_event_log_module>` -- Clear event log
+* :ref:`clear_system_log <ansible_collections.kaytus.ksmanage.clear_system_log_module>` -- Clear BMC system log
+* :ref:`collect_blackbox <ansible_collections.kaytus.ksmanage.collect_blackbox_module>` -- Collect blackbox log
+* :ref:`collect_log <ansible_collections.kaytus.ksmanage.collect_log_module>` -- Collect logs
+* :ref:`connect_media_info <ansible_collections.kaytus.ksmanage.connect_media_info_module>` -- Get remote images redirection information
+* :ref:`cpu_info <ansible_collections.kaytus.ksmanage.cpu_info_module>` -- Get CPU information
+* :ref:`del_session <ansible_collections.kaytus.ksmanage.del_session_module>` -- Delete session
+* :ref:`dns_info <ansible_collections.kaytus.ksmanage.dns_info_module>` -- Get dns information
+* :ref:`download_auto_screenshot <ansible_collections.kaytus.ksmanage.download_auto_screenshot_module>` -- Download auto screenshots
+* :ref:`download_manual_screenshot <ansible_collections.kaytus.ksmanage.download_manual_screenshot_module>` -- Download manual screenshots
+* :ref:`edit_ad <ansible_collections.kaytus.ksmanage.edit_ad_module>` -- Set active directory information
+* :ref:`edit_alert_policy <ansible_collections.kaytus.ksmanage.edit_alert_policy_module>` -- Set alert policy
+* :ref:`edit_auto_capture <ansible_collections.kaytus.ksmanage.edit_auto_capture_module>` -- Set auto capture screen
+* :ref:`edit_bios <ansible_collections.kaytus.ksmanage.edit_bios_module>` -- Set BIOS setup attributes
+* :ref:`edit_boot_image <ansible_collections.kaytus.ksmanage.edit_boot_image_module>` -- Set bmc boot image
+* :ref:`edit_boot_option <ansible_collections.kaytus.ksmanage.edit_boot_option_module>` -- Set BIOS boot options
+* :ref:`edit_connect_media <ansible_collections.kaytus.ksmanage.edit_connect_media_module>` -- Start/Stop virtual media Image
+* :ref:`edit_dns <ansible_collections.kaytus.ksmanage.edit_dns_module>` -- Set dns information
+* :ref:`edit_event_log_policy <ansible_collections.kaytus.ksmanage.edit_event_log_policy_module>` -- Set event log policy
+* :ref:`edit_fan <ansible_collections.kaytus.ksmanage.edit_fan_module>` -- Set fan information
+* :ref:`edit_fru <ansible_collections.kaytus.ksmanage.edit_fru_module>` -- Set fru settings
+* :ref:`edit_ipv4 <ansible_collections.kaytus.ksmanage.edit_ipv4_module>` -- Set ipv4 information
+* :ref:`edit_ipv6 <ansible_collections.kaytus.ksmanage.edit_ipv6_module>` -- Set ipv6 information
+* :ref:`edit_kvm <ansible_collections.kaytus.ksmanage.edit_kvm_module>` -- Set KVM
+* :ref:`edit_ldap <ansible_collections.kaytus.ksmanage.edit_ldap_module>` -- Set ldap information
+* :ref:`edit_ldisk <ansible_collections.kaytus.ksmanage.edit_ldisk_module>` -- Set logical disk
+* :ref:`edit_log_setting <ansible_collections.kaytus.ksmanage.edit_log_setting_module>` -- Set bmc system and audit log setting
+* :ref:`edit_m6_log_setting <ansible_collections.kaytus.ksmanage.edit_m6_log_setting_module>` -- Set bmc system and audit log setting
+* :ref:`edit_manual_capture <ansible_collections.kaytus.ksmanage.edit_manual_capture_module>` -- Set manual capture screen
+* :ref:`edit_media_instance <ansible_collections.kaytus.ksmanage.edit_media_instance_module>` -- Set Virtual Media Instance
+* :ref:`edit_ncsi <ansible_collections.kaytus.ksmanage.edit_ncsi_module>` -- Set ncsi information
+* :ref:`edit_network <ansible_collections.kaytus.ksmanage.edit_network_module>` -- Set network information
+* :ref:`edit_network_bond <ansible_collections.kaytus.ksmanage.edit_network_bond_module>` -- Set network bond
+* :ref:`edit_network_link <ansible_collections.kaytus.ksmanage.edit_network_link_module>` -- Set network link
+* :ref:`edit_ntp <ansible_collections.kaytus.ksmanage.edit_ntp_module>` -- Set NTP
+* :ref:`edit_pdisk <ansible_collections.kaytus.ksmanage.edit_pdisk_module>` -- Set physical disk
+* :ref:`edit_power_budget <ansible_collections.kaytus.ksmanage.edit_power_budget_module>` -- Set power budget information
+* :ref:`edit_power_restore <ansible_collections.kaytus.ksmanage.edit_power_restore_module>` -- Set power restore information
+* :ref:`edit_power_status <ansible_collections.kaytus.ksmanage.edit_power_status_module>` -- Set power status information
+* :ref:`edit_preserve_config <ansible_collections.kaytus.ksmanage.edit_preserve_config_module>` -- Set preserve config
+* :ref:`edit_psu_config <ansible_collections.kaytus.ksmanage.edit_psu_config_module>` -- Set psu config information
+* :ref:`edit_psu_peak <ansible_collections.kaytus.ksmanage.edit_psu_peak_module>` -- Set psu peak information
+* :ref:`edit_restore_factory_default <ansible_collections.kaytus.ksmanage.edit_restore_factory_default_module>` -- Set preserver config
+* :ref:`edit_service <ansible_collections.kaytus.ksmanage.edit_service_module>` -- Set service settings
+* :ref:`edit_smtp <ansible_collections.kaytus.ksmanage.edit_smtp_module>` -- Set SMTP information
+* :ref:`edit_smtp_com <ansible_collections.kaytus.ksmanage.edit_smtp_com_module>` -- Set SMTP information
+* :ref:`edit_smtp_dest <ansible_collections.kaytus.ksmanage.edit_smtp_dest_module>` -- Set SMTP information
+* :ref:`edit_snmp <ansible_collections.kaytus.ksmanage.edit_snmp_module>` -- Set snmp
+* :ref:`edit_snmp_trap <ansible_collections.kaytus.ksmanage.edit_snmp_trap_module>` -- Set snmp trap
+* :ref:`edit_threshold <ansible_collections.kaytus.ksmanage.edit_threshold_module>` -- Set threshold information
+* :ref:`edit_uid <ansible_collections.kaytus.ksmanage.edit_uid_module>` -- Set UID
+* :ref:`edit_virtual_media <ansible_collections.kaytus.ksmanage.edit_virtual_media_module>` -- Set virtual media
+* :ref:`edit_vlan <ansible_collections.kaytus.ksmanage.edit_vlan_module>` -- Set vlan information
+* :ref:`event_log_info <ansible_collections.kaytus.ksmanage.event_log_info_module>` -- Get event log information
+* :ref:`event_log_policy_info <ansible_collections.kaytus.ksmanage.event_log_policy_info_module>` -- Get event log policy information
+* :ref:`fan_info <ansible_collections.kaytus.ksmanage.fan_info_module>` -- Get fan information
+* :ref:`fru_info <ansible_collections.kaytus.ksmanage.fru_info_module>` -- Get fru information
+* :ref:`fw_version_info <ansible_collections.kaytus.ksmanage.fw_version_info_module>` -- Get firmware version information
+* :ref:`gpu_info <ansible_collections.kaytus.ksmanage.gpu_info_module>` -- Get GPU information
+* :ref:`hard_disk_info <ansible_collections.kaytus.ksmanage.hard_disk_info_module>` -- Get hard disk information
+* :ref:`hba_info <ansible_collections.kaytus.ksmanage.hba_info_module>` -- Get CPU information
+* :ref:`kvm_info <ansible_collections.kaytus.ksmanage.kvm_info_module>` -- Get KVM information
+* :ref:`ldap_group <ansible_collections.kaytus.ksmanage.ldap_group_module>` -- Manage ldap group information
+* :ref:`ldap_group_info <ansible_collections.kaytus.ksmanage.ldap_group_info_module>` -- Get ldap group information
+* :ref:`ldap_info <ansible_collections.kaytus.ksmanage.ldap_info_module>` -- Get ldap information
+* :ref:`ldisk_info <ansible_collections.kaytus.ksmanage.ldisk_info_module>` -- Get logical disks information
+* :ref:`log_setting_info <ansible_collections.kaytus.ksmanage.log_setting_info_module>` -- Get bmc log setting information
+* :ref:`media_instance_info <ansible_collections.kaytus.ksmanage.media_instance_info_module>` -- Get Virtual Media Instance information
+* :ref:`mem_info <ansible_collections.kaytus.ksmanage.mem_info_module>` -- Get memory information
+* :ref:`ncsi_info <ansible_collections.kaytus.ksmanage.ncsi_info_module>` -- Get ncsi information
+* :ref:`network_bond_info <ansible_collections.kaytus.ksmanage.network_bond_info_module>` -- Get network bond information
+* :ref:`network_info <ansible_collections.kaytus.ksmanage.network_info_module>` -- Get network information
+* :ref:`network_link_info <ansible_collections.kaytus.ksmanage.network_link_info_module>` -- Get network link information
+* :ref:`ntp_info <ansible_collections.kaytus.ksmanage.ntp_info_module>` -- Get NTP information
+* :ref:`onboard_disk_info <ansible_collections.kaytus.ksmanage.onboard_disk_info_module>` -- Get onboard disks information
+* :ref:`pcie_info <ansible_collections.kaytus.ksmanage.pcie_info_module>` -- Get PCIE information
+* :ref:`pdisk_info <ansible_collections.kaytus.ksmanage.pdisk_info_module>` -- Get physical disks information
+* :ref:`power_budget_info <ansible_collections.kaytus.ksmanage.power_budget_info_module>` -- Get power budget information
+* :ref:`power_consumption_info <ansible_collections.kaytus.ksmanage.power_consumption_info_module>` -- Get power consumption information
+* :ref:`power_restore_info <ansible_collections.kaytus.ksmanage.power_restore_info_module>` -- Get power restore information
+* :ref:`power_status_info <ansible_collections.kaytus.ksmanage.power_status_info_module>` -- Get power status information
+* :ref:`preserve_config_info <ansible_collections.kaytus.ksmanage.preserve_config_info_module>` -- Get preserve config information
+* :ref:`psu_config_info <ansible_collections.kaytus.ksmanage.psu_config_info_module>` -- Get psu config information
+* :ref:`psu_info <ansible_collections.kaytus.ksmanage.psu_info_module>` -- Get psu information
+* :ref:`psu_peak_info <ansible_collections.kaytus.ksmanage.psu_peak_info_module>` -- Get psu peak information
+* :ref:`raid_info <ansible_collections.kaytus.ksmanage.raid_info_module>` -- Get RAID/HBA card and controller information
+* :ref:`reset_bmc <ansible_collections.kaytus.ksmanage.reset_bmc_module>` -- BMC reset
+* :ref:`reset_kvm <ansible_collections.kaytus.ksmanage.reset_kvm_module>` -- KVM reset
+* :ref:`restore <ansible_collections.kaytus.ksmanage.restore_module>` -- Restore server settings
+* :ref:`self_test_info <ansible_collections.kaytus.ksmanage.self_test_info_module>` -- Get self test information
+* :ref:`sensor_info <ansible_collections.kaytus.ksmanage.sensor_info_module>` -- Get sensor information
+* :ref:`server_info <ansible_collections.kaytus.ksmanage.server_info_module>` -- Get server status information
+* :ref:`service_info <ansible_collections.kaytus.ksmanage.service_info_module>` -- Get service information
+* :ref:`session_info <ansible_collections.kaytus.ksmanage.session_info_module>` -- Get online session information
+* :ref:`smtp_info <ansible_collections.kaytus.ksmanage.smtp_info_module>` -- Get SMTP information
+* :ref:`snmp_info <ansible_collections.kaytus.ksmanage.snmp_info_module>` -- Get snmp get/set information
+* :ref:`snmp_trap_info <ansible_collections.kaytus.ksmanage.snmp_trap_info_module>` -- Get snmp trap information
+* :ref:`support_info <ansible_collections.kaytus.ksmanage.support_info_module>` -- Get support information
+* :ref:`system_log_info <ansible_collections.kaytus.ksmanage.system_log_info_module>` -- Get BMC system log information
+* :ref:`temp_info <ansible_collections.kaytus.ksmanage.temp_info_module>` -- Get temp information
+* :ref:`threshold_info <ansible_collections.kaytus.ksmanage.threshold_info_module>` -- Get threshold information
+* :ref:`uid_info <ansible_collections.kaytus.ksmanage.uid_info_module>` -- Get UID information
+* :ref:`update_cpld <ansible_collections.kaytus.ksmanage.update_cpld_module>` -- Update CPLD
+* :ref:`update_fw <ansible_collections.kaytus.ksmanage.update_fw_module>` -- Update firmware
+* :ref:`update_psu <ansible_collections.kaytus.ksmanage.update_psu_module>` -- Update PSU
+* :ref:`user <ansible_collections.kaytus.ksmanage.user_module>` -- Manage user
+* :ref:`user_group <ansible_collections.kaytus.ksmanage.user_group_module>` -- Manage user group
+* :ref:`user_group_info <ansible_collections.kaytus.ksmanage.user_group_info_module>` -- Get user group information
+* :ref:`user_info <ansible_collections.kaytus.ksmanage.user_info_module>` -- Get user information
+* :ref:`virtual_media_info <ansible_collections.kaytus.ksmanage.virtual_media_info_module>` -- Get Virtual Media information
+* :ref:`volt_info <ansible_collections.kaytus.ksmanage.volt_info_module>` -- Get volt information
+
+
+.. seealso::
+
+ List of :ref:`collections <list_of_collections>` with docs hosted here. \ No newline at end of file
diff --git a/ansible_collections/kaytus/ksmanage/docs/kvm_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/kvm_info_module.rst
new file mode 100644
index 000000000..d49a4419d
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/kvm_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.kvm_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.kvm_info -- Get KVM information
++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.kvm_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get KVM information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: KVM test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get KVM information"
+ kaytus.ksmanage.kvm_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/ldap_group_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/ldap_group_info_module.rst
new file mode 100644
index 000000000..b9547b613
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/ldap_group_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.ldap_group_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.ldap_group_info -- Get ldap group information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.ldap_group_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get ldap group information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Ldap group test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get ldap group information"
+ kaytus.ksmanage.ldap_group_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/ldap_group_module.rst b/ansible_collections/kaytus/ksmanage/docs/ldap_group_module.rst
new file mode 100644
index 000000000..11bb506fe
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/ldap_group_module.rst
@@ -0,0 +1,431 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.ldap_group_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.ldap_group -- Manage ldap group information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.ldap_group`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Manage ldap group information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-base"></div>
+ <b>base</b>
+ <a class="ansibleOptionLink" href="#parameter-base" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Search Base.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-kvm"></div>
+ <b>kvm</b>
+ <a class="ansibleOptionLink" href="#parameter-kvm" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Kvm privilege.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-name"></div>
+ <b>name</b>
+ <a class="ansibleOptionLink" href="#parameter-name" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Group name.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-pri"></div>
+ <b>pri</b>
+ <a class="ansibleOptionLink" href="#parameter-pri" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>administrator</li>
+ <li>user</li>
+ <li>operator</li>
+ <li>oem</li>
+ <li>none</li>
+ </ul>
+ </td>
+ <td>
+ <div>Group privilege.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#parameter-state" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li><div style="color: blue"><b>present</b>&nbsp;&larr;</div></li>
+ <li>absent</li>
+ </ul>
+ </td>
+ <td>
+ <div>Whether the ldap group should exist or not, taking action if the state is different from what is stated.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-vm"></div>
+ <b>vm</b>
+ <a class="ansibleOptionLink" href="#parameter-vm" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Vmedia privilege.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Ldap group test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Add ldap group information"
+ kaytus.ksmanage.ldap_group:
+ state: "present"
+ name: "wbs"
+ base: "cn=manager"
+ pri: "administrator"
+ kvm: "enable"
+ vm: "disable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set ldap group information"
+ kaytus.ksmanage.ldap_group:
+ state: "present"
+ name: "wbs"
+ pri: "user"
+ kvm: "disable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Delete ldap group information"
+ kaytus.ksmanage.ldap_group:
+ state: "absent"
+ name: "wbs"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/ldap_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/ldap_info_module.rst
new file mode 100644
index 000000000..ff3930935
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/ldap_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.ldap_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.ldap_info -- Get ldap information
++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.ldap_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get ldap information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Ldap test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get ldap information"
+ kaytus.ksmanage.ldap_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/ldisk_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/ldisk_info_module.rst
new file mode 100644
index 000000000..5bdc084f4
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/ldisk_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.ldisk_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.ldisk_info -- Get logical disks information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.ldisk_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get logical disks information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Ldisk test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get logical disks information"
+ kaytus.ksmanage.ldisk_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/log_setting_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/log_setting_info_module.rst
new file mode 100644
index 000000000..8ee414a37
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/log_setting_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.log_setting_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.log_setting_info -- Get bmc log setting information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.log_setting_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get bmc log setting information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Bmc log setting test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get bmc log setting information"
+ kaytus.ksmanage.log_setting_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/media_instance_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/media_instance_info_module.rst
new file mode 100644
index 000000000..526996e24
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/media_instance_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.media_instance_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.media_instance_info -- Get Virtual Media Instance information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.media_instance_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get Virtual Media Instance information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Media instance test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get Virtual Media Instance information"
+ kaytus.ksmanage.media_instance_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/mem_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/mem_info_module.rst
new file mode 100644
index 000000000..2eec9089b
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/mem_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.mem_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.mem_info -- Get memory information
+++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.mem_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get memory information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Memory test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get memory information"
+ kaytus.ksmanage.mem_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/ncsi_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/ncsi_info_module.rst
new file mode 100644
index 000000000..02f5968e3
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/ncsi_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.ncsi_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.ncsi_info -- Get ncsi information
++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.ncsi_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get ncsi information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: NCSI test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get ncsi information"
+ kaytus.ksmanage.ncsi_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/network_bond_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/network_bond_info_module.rst
new file mode 100644
index 000000000..982b0cd3a
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/network_bond_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.network_bond_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.network_bond_info -- Get network bond information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.network_bond_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get network bond information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Bond test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get network bond information"
+ kaytus.ksmanage.network_bond_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/network_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/network_info_module.rst
new file mode 100644
index 000000000..18f60a34e
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/network_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.network_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.network_info -- Get network information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.network_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get network information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Network test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get network information"
+ kaytus.ksmanage.network_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/network_link_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/network_link_info_module.rst
new file mode 100644
index 000000000..1eee30569
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/network_link_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.network_link_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.network_link_info -- Get network link information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.network_link_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get network link information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Link test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get network link information"
+ kaytus.ksmanage.network_link_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/ntp_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/ntp_info_module.rst
new file mode 100644
index 000000000..3afae3bb7
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/ntp_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.ntp_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.ntp_info -- Get NTP information
++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.ntp_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get NTP information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: NTP test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get ntp information"
+ kaytus.ksmanage.ntp_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/onboard_disk_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/onboard_disk_info_module.rst
new file mode 100644
index 000000000..d1b0492f4
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/onboard_disk_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.onboard_disk_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.onboard_disk_info -- Get onboard disks information
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.onboard_disk_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get onboard disks information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Onboard test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get onboard disks information"
+ kaytus.ksmanage.onboard_disk_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/pcie_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/pcie_info_module.rst
new file mode 100644
index 000000000..703295de1
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/pcie_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.pcie_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.pcie_info -- Get PCIE information
++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.pcie_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get PCIE information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: PCIE test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get PCIE information"
+ kaytus.ksmanage.pcie_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/pdisk_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/pdisk_info_module.rst
new file mode 100644
index 000000000..833e99678
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/pdisk_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.pdisk_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.pdisk_info -- Get physical disks information
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.pdisk_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get physical disks information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Pdisk test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get physical disks information"
+ kaytus.ksmanage.pdisk_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/power_budget_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/power_budget_info_module.rst
new file mode 100644
index 000000000..f5b67925a
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/power_budget_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.power_budget_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.power_budget_info -- Get power budget information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.power_budget_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get power budget information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Power budget test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get power budget information"
+ kaytus.ksmanage.power_budget_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/power_consumption_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/power_consumption_info_module.rst
new file mode 100644
index 000000000..93100b023
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/power_consumption_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.power_consumption_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.power_consumption_info -- Get power consumption information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.power_consumption_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get power consumption information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Power consumption test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get power consumption information"
+ kaytus.ksmanage.power_consumption_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/power_restore_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/power_restore_info_module.rst
new file mode 100644
index 000000000..4e2cef249
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/power_restore_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.power_restore_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.power_restore_info -- Get power restore information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.power_restore_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get power restore information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Power restore test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get power restore information"
+ kaytus.ksmanage.power_restore_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/power_status_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/power_status_info_module.rst
new file mode 100644
index 000000000..ca0ada784
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/power_status_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.power_status_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.power_status_info -- Get power status information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.power_status_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get power status information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Power status test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get power status information"
+ kaytus.ksmanage.power_status_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/preserve_config_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/preserve_config_info_module.rst
new file mode 100644
index 000000000..4355044d9
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/preserve_config_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.preserve_config_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.preserve_config_info -- Get preserve config information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.preserve_config_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get preserve config information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Preserve test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get preserve config information"
+ kaytus.ksmanage.preserve_config_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/psu_config_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/psu_config_info_module.rst
new file mode 100644
index 000000000..edd7f62d1
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/psu_config_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.psu_config_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.psu_config_info -- Get psu config information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.psu_config_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get psu config information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Psu config test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get psu config information"
+ kaytus.ksmanage.psu_config_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/psu_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/psu_info_module.rst
new file mode 100644
index 000000000..e38da43b9
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/psu_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.psu_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.psu_info -- Get psu information
++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.psu_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get psu information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Psu test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get psu information"
+ kaytus.ksmanage.psu_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/psu_peak_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/psu_peak_info_module.rst
new file mode 100644
index 000000000..01872cdb8
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/psu_peak_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.psu_peak_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.psu_peak_info -- Get psu peak information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.psu_peak_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get psu peak information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Psu peak test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get psu peak information"
+ kaytus.ksmanage.psu_peak_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/raid_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/raid_info_module.rst
new file mode 100644
index 000000000..83dc91897
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/raid_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.raid_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.raid_info -- Get RAID/HBA card and controller information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.raid_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get RAID/HBA card and controller information information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Raid test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get raid information"
+ kaytus.ksmanage.raid_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/reset_bmc_module.rst b/ansible_collections/kaytus/ksmanage/docs/reset_bmc_module.rst
new file mode 100644
index 000000000..538de2f47
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/reset_bmc_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.reset_bmc_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.reset_bmc -- BMC reset
+++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.reset_bmc`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- BMC reset on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Reset bmc test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Reset bmc"
+ kaytus.ksmanage.reset_bmc:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/reset_kvm_module.rst b/ansible_collections/kaytus/ksmanage/docs/reset_kvm_module.rst
new file mode 100644
index 000000000..5feacf138
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/reset_kvm_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.reset_kvm_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.reset_kvm -- KVM reset
+++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.reset_kvm`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- KVM reset on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Reset kvm test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Reset kvm"
+ kaytus.ksmanage.reset_kvm:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/restore_module.rst b/ansible_collections/kaytus/ksmanage/docs/restore_module.rst
new file mode 100644
index 000000000..126a6ee82
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/restore_module.rst
@@ -0,0 +1,348 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.restore_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.restore -- Restore server settings
+++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.restore`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Restore server settings on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-bak_file"></div>
+ <b>bak_file</b>
+ <a class="ansibleOptionLink" href="#parameter-bak_file" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Select backup file or bak folder.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-item"></div>
+ <b>item</b>
+ <a class="ansibleOptionLink" href="#parameter-item" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>all</li>
+ <li>network</li>
+ <li>dns</li>
+ <li>service</li>
+ <li>ntp</li>
+ <li>smtp</li>
+ <li>snmptrap</li>
+ <li>ad</li>
+ <li>ldap</li>
+ <li>user</li>
+ <li>bios</li>
+ </ul>
+ </td>
+ <td>
+ <div>Select export item.</div>
+ <div>Only the M5 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Restore test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Restore server settings"
+ kaytus.ksmanage.restore:
+ bak_file: "/home/wbs/backfile"
+ item: "all"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/self_test_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/self_test_info_module.rst
new file mode 100644
index 000000000..1d862de9b
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/self_test_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.self_test_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.self_test_info -- Get self test information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.self_test_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get self test information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Self test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get self test information"
+ kaytus.ksmanage.self_test_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/sensor_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/sensor_info_module.rst
new file mode 100644
index 000000000..23e916893
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/sensor_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.sensor_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.sensor_info -- Get sensor information
++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.sensor_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get sensor information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Sensor test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get sensor information"
+ kaytus.ksmanage.sensor_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/server_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/server_info_module.rst
new file mode 100644
index 000000000..00af7471a
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/server_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.server_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.server_info -- Get server status information
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.server_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get server status information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Server test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get server status information"
+ kaytus.ksmanage.server_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/service_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/service_info_module.rst
new file mode 100644
index 000000000..044882ccb
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/service_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.service_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.service_info -- Get service information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.service_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get service information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Service info test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get service information"
+ kaytus.ksmanage.service_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/session_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/session_info_module.rst
new file mode 100644
index 000000000..bbbfc7b83
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/session_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.session_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.session_info -- Get online session information
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.session_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get online session information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Session test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get session information"
+ kaytus.ksmanage.session_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/smtp_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/smtp_info_module.rst
new file mode 100644
index 000000000..e60b7590d
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/smtp_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.smtp_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.smtp_info -- Get SMTP information
++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.smtp_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get SMTP information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Smtp test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get smtp information"
+ kaytus.ksmanage.smtp_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/snmp_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/snmp_info_module.rst
new file mode 100644
index 000000000..10fdfeebc
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/snmp_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.snmp_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.snmp_info -- Get snmp get/set information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.snmp_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get snmp get/set information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Snmp test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get snmp get/set information"
+ kaytus.ksmanage.snmp_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/snmp_trap_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/snmp_trap_info_module.rst
new file mode 100644
index 000000000..b20b0c406
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/snmp_trap_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.snmp_trap_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.snmp_trap_info -- Get snmp trap information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.snmp_trap_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get snmp trap information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Trap test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get snmp trap information"
+ kaytus.ksmanage.snmp_trap_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/support_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/support_info_module.rst
new file mode 100644
index 000000000..48f5b4e19
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/support_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.support_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.support_info -- Get support information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.support_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get the kaytus Server support list information.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Support list test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get support information"
+ kaytus.ksmanage.support_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/system_log_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/system_log_info_module.rst
new file mode 100644
index 000000000..f32d734bd
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/system_log_info_module.rst
@@ -0,0 +1,384 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.system_log_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.system_log_info -- Get BMC system log information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.system_log_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get BMC system log information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-count"></div>
+ <b>count</b>
+ <a class="ansibleOptionLink" href="#parameter-count" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Get the most recent log of a specified number.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-level"></div>
+ <b>level</b>
+ <a class="ansibleOptionLink" href="#parameter-level" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li><div style="color: blue"><b>alert</b>&nbsp;&larr;</div></li>
+ <li>critical</li>
+ <li>error</li>
+ <li>notice</li>
+ <li>warning</li>
+ <li>debug</li>
+ <li>emergency</li>
+ <li>info</li>
+ </ul>
+ </td>
+ <td>
+ <div>Log level.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-log_time"></div>
+ <b>log_time</b>
+ <a class="ansibleOptionLink" href="#parameter-log_time" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Get logs after the specified date, time should be YYYY-MM-DDTHH:MM+HH:MM, like 2019-06-27T12:30+08:00.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-system_file"></div>
+ <b>system_file</b>
+ <a class="ansibleOptionLink" href="#parameter-system_file" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Store logs to a file.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Bmc system log info test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get bmc system log information"
+ kaytus.ksmanage.system_log_info:
+ level: "alert"
+ log_time: "2020-06-01T12:30+08:00"
+ provider: "{{ ksmanage }}"
+
+ - name: "Get bmc system log information"
+ kaytus.ksmanage.system_log_info:
+ count: 30
+ provider: "{{ ksmanage }}"
+
+ - name: "Get bmc system log information"
+ kaytus.ksmanage.system_log_info:
+ system_file: "/home/wbs/wbs.log"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/temp_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/temp_info_module.rst
new file mode 100644
index 000000000..5e002df4f
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/temp_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.temp_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.temp_info -- Get temp information
++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.temp_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get temp information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Temp test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get temp information"
+ kaytus.ksmanage.temp_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/threshold_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/threshold_info_module.rst
new file mode 100644
index 000000000..0b8d36530
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/threshold_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.threshold_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.threshold_info -- Get threshold information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.threshold_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get threshold information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Threshold test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get threshold information"
+ kaytus.ksmanage.threshold_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/uid_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/uid_info_module.rst
new file mode 100644
index 000000000..cdd209e86
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/uid_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.uid_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.uid_info -- Get UID information
++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.uid_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get UID information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: UID test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get UID information"
+ kaytus.ksmanage.uid_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/update_cpld_module.rst b/ansible_collections/kaytus/ksmanage/docs/update_cpld_module.rst
new file mode 100644
index 000000000..9bff7c976
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/update_cpld_module.rst
@@ -0,0 +1,362 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.update_cpld_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.update_cpld -- Update CPLD
+++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.update_cpld`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Update CPLD on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-file_url"></div>
+ <b>file_url</b>
+ <a class="ansibleOptionLink" href="#parameter-file_url" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>CPLD image file path.</div>
+ <div>Required when <em>list=False</em>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-id"></div>
+ <b>id</b>
+ <a class="ansibleOptionLink" href="#parameter-id" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>CPLD id.</div>
+ <div>Required when <em>list=False</em>.</div>
+ <div>Only the M5 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-list"></div>
+ <b>list</b>
+ <a class="ansibleOptionLink" href="#parameter-list" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li><div style="color: blue"><b>no</b>&nbsp;&larr;</div></li>
+ <li>yes</li>
+ </ul>
+ </td>
+ <td>
+ <div>Get cpld list.</div>
+ <div>Only the M5 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: CPLD test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get cpld list"
+ kaytus.ksmanage.update_cpld:
+ list: True
+ provider: "{{ ksmanage }}"
+
+ - name: "Update cpld"
+ update_cpld:
+ id: 1
+ file_url: "home/wbs/raw.bin"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/update_fw_module.rst b/ansible_collections/kaytus/ksmanage/docs/update_fw_module.rst
new file mode 100644
index 000000000..be678438f
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/update_fw_module.rst
@@ -0,0 +1,426 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.update_fw_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.update_fw -- Update firmware
+++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.update_fw`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Update firmware on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-dual_image"></div>
+ <b>dual_image</b>
+ <a class="ansibleOptionLink" href="#parameter-dual_image" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>single</li>
+ <li><div style="color: blue"><b>dual</b>&nbsp;&larr;</div></li>
+ </ul>
+ </td>
+ <td>
+ <div>Update dual image(default) or not.</div>
+ <div>Only the M5 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-has_me"></div>
+ <b>has_me</b>
+ <a class="ansibleOptionLink" href="#parameter-has_me" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>0</li>
+ <li>1</li>
+ </ul>
+ <b>Default:</b><br/><div style="color: blue">1</div>
+ </td>
+ <td>
+ <div>Update me or not when update bios, only work in INTEL platform, 0-no, 1-yes.</div>
+ <div>Only the M5 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-mode"></div>
+ <b>mode</b>
+ <a class="ansibleOptionLink" href="#parameter-mode" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li><div style="color: blue"><b>Auto</b>&nbsp;&larr;</div></li>
+ <li>Manual</li>
+ </ul>
+ </td>
+ <td>
+ <div>Active mode, Manual or Auto(default).</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-over_ride"></div>
+ <b>over_ride</b>
+ <a class="ansibleOptionLink" href="#parameter-over_ride" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>0</li>
+ <li>1</li>
+ </ul>
+ <b>Default:</b><br/><div style="color: blue">0</div>
+ </td>
+ <td>
+ <div>Reserve Configurations, 0-reserve, 1-override.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-type"></div>
+ <b>type</b>
+ <a class="ansibleOptionLink" href="#parameter-type" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>BMC</li>
+ <li>BIOS</li>
+ </ul>
+ </td>
+ <td>
+ <div>Firmware type.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-url"></div>
+ <b>url</b>
+ <a class="ansibleOptionLink" href="#parameter-url" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Firmware image url.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Update fw test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "update bios"
+ kaytus.ksmanage.update_fw:
+ url: "/home/wbs/SA5112M5_BIOS_4.1.8_Standard_20200117.bin"
+ type: "BIOS"
+ provider: "{{ ksmanage }}"
+
+ - name: "update bmc"
+ kaytus.ksmanage.update_fw:
+ url: "/home/wbs/SA5112M5_BMC_4.17.7_Standard_20200430"
+ mode: "Auto"
+ type: "BMC"
+ dual_image: "dual"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/update_psu_module.rst b/ansible_collections/kaytus/ksmanage/docs/update_psu_module.rst
new file mode 100644
index 000000000..401f33041
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/update_psu_module.rst
@@ -0,0 +1,338 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.update_psu_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.update_psu -- Update PSU
+++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.update_psu`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Update psu on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-mode"></div>
+ <b>mode</b>
+ <a class="ansibleOptionLink" href="#parameter-mode" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li><div style="color: blue"><b>Auto</b>&nbsp;&larr;</div></li>
+ <li>Manual</li>
+ </ul>
+ </td>
+ <td>
+ <div>Server Auto Reset Option, Manual or Auto(default).</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-url"></div>
+ <b>url</b>
+ <a class="ansibleOptionLink" href="#parameter-url" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Firmware image url.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Update psu test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "update psu"
+ kaytus.ksmanage.update_psu:
+ url: "/home/wbs/CRPS1300D2W_00.01.04_BootLoader_Pri_Sec.hpm"
+ mode: "Auto"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/user_group_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/user_group_info_module.rst
new file mode 100644
index 000000000..3272be892
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/user_group_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.user_group_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.user_group_info -- Get user group information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.user_group_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get user group information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: User group test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get user group information"
+ kaytus.ksmanage.user_group_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/user_group_module.rst b/ansible_collections/kaytus/ksmanage/docs/user_group_module.rst
new file mode 100644
index 000000000..e92cf95bd
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/user_group_module.rst
@@ -0,0 +1,532 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.user_group_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.user_group -- Manage user group
++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.user_group`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Manage user group on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-debug"></div>
+ <b>debug</b>
+ <a class="ansibleOptionLink" href="#parameter-debug" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Debug diagnose privilege.</div>
+ <div>Required when <em>state=present</em>.</div>
+ <div>Only the M6 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-general"></div>
+ <b>general</b>
+ <a class="ansibleOptionLink" href="#parameter-general" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>General configuration privilege.</div>
+ <div>Required when <em>state=present</em>.</div>
+ <div>Only the M6 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-kvm"></div>
+ <b>kvm</b>
+ <a class="ansibleOptionLink" href="#parameter-kvm" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Remote KVM configuration privilege.</div>
+ <div>Required when <em>state=present</em>.</div>
+ <div>Only the M6 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-media"></div>
+ <b>media</b>
+ <a class="ansibleOptionLink" href="#parameter-media" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Remote media configuration privilege.</div>
+ <div>Required when <em>state=present</em>.</div>
+ <div>Only the M6 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-name"></div>
+ <b>name</b>
+ <a class="ansibleOptionLink" href="#parameter-name" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span> </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Group name.</div>
+ <div>The range of group name for M6 model is OEM1, OEM2, OEM3, OEM4.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-power"></div>
+ <b>power</b>
+ <a class="ansibleOptionLink" href="#parameter-power" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Power control privilege.</div>
+ <div>Required when <em>state=present</em>.</div>
+ <div>Only the M6 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-pri"></div>
+ <b>pri</b>
+ <a class="ansibleOptionLink" href="#parameter-pri" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>administrator</li>
+ <li>operator</li>
+ <li>user</li>
+ <li>oem</li>
+ <li>none</li>
+ </ul>
+ </td>
+ <td>
+ <div>Group privilege.</div>
+ <div>Required when <em>state=present</em>.</div>
+ <div>Only the M5 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-security"></div>
+ <b>security</b>
+ <a class="ansibleOptionLink" href="#parameter-security" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Security configuration privilege.</div>
+ <div>Required when <em>state=present</em>.</div>
+ <div>Only the M6 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-self"></div>
+ <b>self</b>
+ <a class="ansibleOptionLink" href="#parameter-self" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>Itself configuration privilege.</div>
+ <div>Required when <em>state=present</em>.</div>
+ <div>Only the M6 model supports this parameter.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#parameter-state" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li><div style="color: blue"><b>present</b>&nbsp;&larr;</div></li>
+ <li>absent</li>
+ </ul>
+ </td>
+ <td>
+ <div>Whether the user group should exist or not, taking action if the state is different from what is stated.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: User group test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Add user group"
+ kaytus.ksmanage.user_group:
+ state: "present"
+ name: "test"
+ pri: "administrator"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set user group"
+ kaytus.ksmanage.user_group:
+ state: "present"
+ name: "test"
+ pri: "user"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set m6 user group"
+ kaytus.ksmanage.user_group:
+ state: "present"
+ name: "OEM1"
+ general: "enable"
+ kvm: "enable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Delete user group"
+ kaytus.ksmanage.user_group:
+ state: "absent"
+ name: "test"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/user_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/user_info_module.rst
new file mode 100644
index 000000000..747573924
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/user_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.user_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.user_info -- Get user information
++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.user_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get user information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: User test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get user information"
+ kaytus.ksmanage.user_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/user_module.rst b/ansible_collections/kaytus/ksmanage/docs/user_module.rst
new file mode 100644
index 000000000..9b0fd6d77
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/user_module.rst
@@ -0,0 +1,454 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.user_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.user -- Manage user
++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.user`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Manage user on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-access"></div>
+ <b>access</b>
+ <a class="ansibleOptionLink" href="#parameter-access" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enable</li>
+ <li>disable</li>
+ </ul>
+ </td>
+ <td>
+ <div>User access.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-email"></div>
+ <b>email</b>
+ <a class="ansibleOptionLink" href="#parameter-email" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>User email.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-priv"></div>
+ <b>priv</b>
+ <a class="ansibleOptionLink" href="#parameter-priv" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=string</span> </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>kvm</li>
+ <li>vmm</li>
+ <li>sol</li>
+ <li>none</li>
+ </ul>
+ </td>
+ <td>
+ <div>Other user permissions, select one or more from None/KVM/VMM/SOL.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-role_id"></div>
+ <b>role_id</b>
+ <a class="ansibleOptionLink" href="#parameter-role_id" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>User group.</div>
+ <div>Default user group &#x27;Administrator&#x27;, &#x27;Operator&#x27;, &#x27;User&#x27;.</div>
+ <div>Use command <code>user_group_info</code> can get all group information.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#parameter-state" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li><div style="color: blue"><b>present</b>&nbsp;&larr;</div></li>
+ <li>absent</li>
+ </ul>
+ </td>
+ <td>
+ <div>Whether the user should exist or not, taking action if the state is different from what is stated.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-uid"></div>
+ <b>uid</b>
+ <a class="ansibleOptionLink" href="#parameter-uid" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>User id, The range is 1 to 16.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-uname"></div>
+ <b>uname</b>
+ <a class="ansibleOptionLink" href="#parameter-uname" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>User name, Required when uid is None.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-upass"></div>
+ <b>upass</b>
+ <a class="ansibleOptionLink" href="#parameter-upass" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>User password.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Does not support ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: User test
+ hosts: ksmanage
+ no_log: true
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Add user"
+ kaytus.ksmanage.user:
+ state: "present"
+ uname: "wbs"
+ upass: "admin"
+ role_id: "Administrator"
+ priv: "kvm, sol"
+ email: "wbs@ieisystem.com"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set user"
+ kaytus.ksmanage.user:
+ state: "present"
+ uname: "wbs"
+ upass: "12345678"
+ role_id: "user"
+ priv: "kvm, sol"
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/virtual_media_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/virtual_media_info_module.rst
new file mode 100644
index 000000000..5042af089
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/virtual_media_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.virtual_media_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.virtual_media_info -- Get Virtual Media information
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.virtual_media_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get Virtual Media information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Media test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get Virtual Media information"
+ kaytus.ksmanage.virtual_media_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/docs/volt_info_module.rst b/ansible_collections/kaytus/ksmanage/docs/volt_info_module.rst
new file mode 100644
index 000000000..59f5139be
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/docs/volt_info_module.rst
@@ -0,0 +1,302 @@
+.. Document meta
+
+:orphan:
+
+.. Anchors
+
+.. _ansible_collections.kaytus.ksmanage.volt_info_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Anchors: aliases
+
+
+
+.. Title
+
+kaytus.ksmanage.volt_info -- Get volt information
++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This plugin is part of the `kaytus.ksmanage collection <https://galaxy.ansible.com/kaytus/ksmanage>`_.
+
+ To install it use: :code:`ansible-galaxy collection install kaytus.ksmanage`.
+
+ To use it in a playbook, specify: :code:`kaytus.ksmanage.volt_info`.
+
+.. version_added
+
+.. versionadded:: 1.0.0 of kaytus.ksmanage
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Get volt information on kaytus Server.
+
+
+.. Aliases
+
+
+.. Requirements
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- Python 3.7+
+- inManage
+
+
+.. Options
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="2">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-provider"></div>
+ <b>provider</b>
+ <a class="ansibleOptionLink" href="#parameter-provider" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A dict object containing connection details.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/host"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/host" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the DNS host name or address for connecting to the remote device over the specified transport. The value of host is used as the destination address for the transport.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/password"></div>
+ <b>password</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/password" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Specifies the password to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_PASSWORD</code> will be used instead.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-provider/username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-provider/username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-username"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Configures the username to use to authenticate the connection to the remote device. If the value is not specified in the task, the value of environment variable <code>ANSIBLE_NET_USERNAME</code> will be used instead.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Supports ``check_mode``.
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: Volt test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get volt information"
+ kaytus.ksmanage.volt_info:
+ provider: "{{ ksmanage }}"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-changed"></div>
+ <b>changed</b>
+ <a class="ansibleOptionLink" href="#return-changed" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Check to see if a change was made on the device.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-message"></div>
+ <b>message</b>
+ <a class="ansibleOptionLink" href="#return-message" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Messages returned after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-state"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#return-state" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Status after module execution.</div>
+ <br/>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- WangBaoshan (@ieisystem)
+
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/kaytus/ksmanage/meta/runtime.yml b/ansible_collections/kaytus/ksmanage/meta/runtime.yml
new file mode 100644
index 000000000..8fa412c27
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/meta/runtime.yml
@@ -0,0 +1,2 @@
+---
+requires_ansible: '>=2.10'
diff --git a/ansible_collections/kaytus/ksmanage/plugins/doc_fragments/ksmanage.py b/ansible_collections/kaytus/ksmanage/plugins/doc_fragments/ksmanage.py
new file mode 100644
index 000000000..d81584675
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/doc_fragments/ksmanage.py
@@ -0,0 +1,59 @@
+# -*- 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
+
+
+class ModuleDocFragment(object):
+
+ # Standard files documentation fragment
+ DOCUMENTATION = r'''
+options:
+ provider:
+ description:
+ - A dict object containing connection details.
+ type: dict
+ suboptions:
+ host:
+ description:
+ - Specifies the DNS host name or address for connecting to the remote
+ device over the specified transport. The value of host is used as
+ the destination address for the transport.
+ type: str
+ username:
+ description:
+ - Configures the username to use to authenticate the connection to
+ the remote device. If the value is not specified in the task, the value of environment
+ variable C(ANSIBLE_NET_USERNAME) will be used instead.
+ type: str
+ password:
+ description:
+ - Specifies the password to use to authenticate the connection to
+ the remote device. If the value is not specified in the task, the
+ value of environment variable C(ANSIBLE_NET_PASSWORD) will be used instead.
+ type: str
+ host:
+ description:
+ - Specifies the DNS host name or address for connecting to the remote
+ device over the specified transport. The value of host is used as
+ the destination address for the transport.
+ type: str
+ username:
+ description:
+ - Configures the username to use to authenticate the connection to
+ the remote device. If the value is not specified in the task, the value of environment
+ variable C(ANSIBLE_NET_USERNAME) will be used instead.
+ type: str
+ password:
+ description:
+ - Specifies the password to use to authenticate the connection to
+ the remote device. If the value is not specified in the task, the
+ value of environment variable C(ANSIBLE_NET_PASSWORD) will be used instead.
+ type: str
+requirements:
+ - Python 3.7+
+ - inManage
+'''
diff --git a/ansible_collections/kaytus/ksmanage/plugins/module_utils/ksmanage.py b/ansible_collections/kaytus/ksmanage/plugins/module_utils/ksmanage.py
new file mode 100644
index 000000000..40cf48526
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/module_utils/ksmanage.py
@@ -0,0 +1,54 @@
+# -*- coding:utf-8 -*-
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+
+from __future__ import (absolute_import, division, print_function)
+
+__metaclass__ = type
+
+try:
+ import inmanage
+ ksmanage_temp = True
+except ImportError:
+ ksmanage_temp = False
+from ansible.module_utils.basic import env_fallback
+from ansible.module_utils.six import iteritems
+
+ksmanage_provider_spec = {
+ 'host': dict(type='str'),
+ 'username': dict(type='str', fallback=(env_fallback, ['ANSIBLE_NET_USERNAME'])),
+ 'password': dict(type='str', fallback=(env_fallback, ['ANSIBLE_NET_PASSWORD']), no_log=True),
+}
+ksmanage_argument_spec = {
+ 'provider': dict(type='dict', options=ksmanage_provider_spec),
+}
+ksmanage_top_spec = {
+ 'host': dict(type='str'),
+ 'username': dict(type='str'),
+ 'password': dict(type='str', no_log=True),
+}
+ksmanage_argument_spec.update(ksmanage_top_spec)
+
+
+def load_params(module):
+ """load_params"""
+ provider = module.params.get('provider') or dict()
+ for key, value in iteritems(provider):
+ if key in ksmanage_argument_spec:
+ if module.params.get(key) is None and value is not None:
+ module.params[key] = value
+
+
+def get_connection(module):
+ """get_connection"""
+ load_params(module)
+ # result = dict()
+ # if module.check_mode:
+ # result['changed'] = True
+ # result['state'] = 'Success'
+ # result['message'] = module.params['subcommand']
+ # else:
+ dict_param = module.params
+ if not ksmanage_temp:
+ module.fail_json(msg='inManage must be installed to use this module')
+ result = inmanage.main(dict_param)
+ return result
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/ad_group.py b/ansible_collections/kaytus/ksmanage/plugins/modules/ad_group.py
new file mode 100644
index 000000000..f7c408922
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/ad_group.py
@@ -0,0 +1,158 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: ad_group
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Manage active directory group information
+description:
+ - Manage active directory group information on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ state:
+ description:
+ - Whether the active directory group should exist or not, taking action if the state is different from what is stated.
+ choices: ['present', 'absent']
+ default: present
+ type: str
+ name:
+ description:
+ - Enter the Role Group Name. This name identifies the role group in Active Directory.
+ type: str
+ required: true
+ domain:
+ description:
+ - Enter the Role Group Domain. This is the domain where the role group is located.
+ type: str
+ pri:
+ description:
+ - Enter the Role Group Privilege. This is the level of privilege to be assigned for this role group.
+ choices: ['administrator', 'user', 'operator', 'oem', 'none']
+ type: str
+ kvm:
+ description:
+ - This field provides access to KVM for AD authenticated role group user.
+ choices: ['enable', 'disable']
+ type: str
+ vm:
+ description:
+ - This field provides access to VMedia for AD authenticated role group user.
+ choices: ['enable', 'disable']
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Ad group test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Add active directory group information"
+ kaytus.ksmanage.ad_group:
+ state: "present"
+ name: "wbs"
+ domain: "test.com"
+ pri: "administrator"
+ kvm: "enable"
+ vm: "disable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set active directory group information"
+ kaytus.ksmanage.ad_group:
+ state: "present"
+ name: "wbs"
+ pri: "user"
+ kvm: "disable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Delete active directory group information"
+ kaytus.ksmanage.ad_group:
+ state: "absent"
+ name: "wbs"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class AD(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'editadgroup'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ state=dict(type='str', choices=['present', 'absent'], default='present'),
+ name=dict(type='str', required=True),
+ domain=dict(type='str', required=False),
+ pri=dict(type='str', required=False, choices=['administrator', 'user', 'operator', 'oem', 'none']),
+ kvm=dict(type='str', required=False, choices=['enable', 'disable']),
+ vm=dict(type='str', required=False, choices=['enable', 'disable']),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ ad_obj = AD(argument_spec)
+ ad_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/ad_group_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/ad_group_info.py
new file mode 100644
index 000000000..8db3d1d0a
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/ad_group_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: ad_group_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get active directory group information
+description:
+ - Get active directory group information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Ad group test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get active directory group information"
+ kaytus.ksmanage.ad_group_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class AD(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getadgroup'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ ad_obj = AD(argument_spec)
+ ad_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/ad_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/ad_info.py
new file mode 100644
index 000000000..37f7e2743
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/ad_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: ad_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get active directory information
+description:
+ - Get active directory information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Ad test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get active directory information"
+ kaytus.ksmanage.ad_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class AD(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getad'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ ad_obj = AD(argument_spec)
+ ad_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/adapter_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/adapter_info.py
new file mode 100644
index 000000000..c9d9c6565
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/adapter_info.py
@@ -0,0 +1,119 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: adapter_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get adapter information
+description:
+ - Get adapter information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Adapter test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get adapter information"
+ kaytus.ksmanage.adapter_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Adapter(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getnic'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ nic_result = self.results
+ if nic_result['State'] == "Success":
+ nic = nic_result['Message'][0]
+ sysadapter_len = nic.get('Maximum', 0)
+ idx = 0
+ sortedRes = dict()
+ if sysadapter_len > 0:
+ nic = nic.get('NIC', [])
+ List = []
+ while idx < sysadapter_len:
+ nic_info = nic[idx]
+ sysadapter_info = nic_info.get('Controller')
+ List.extend(sysadapter_info)
+ idx = idx + 1
+ sortedRes["State"] = "Success"
+ sortedRes["Message"] = List
+ else:
+ sortedRes["State"] = "Failure"
+ sortedRes["Message"] = "cannot get information"
+ self.module.exit_json(**sortedRes)
+ else:
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ adapter_obj = Adapter(argument_spec)
+ adapter_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/add_ldisk.py b/ansible_collections/kaytus/ksmanage/plugins/modules/add_ldisk.py
new file mode 100644
index 000000000..c839c324b
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/add_ldisk.py
@@ -0,0 +1,221 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: add_ldisk
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Create logical disk
+description:
+ - Create logical disk on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ ctrl_id:
+ description:
+ - Raid controller ID.
+ - Required when controller type is LSI, PMC or MV.
+ type: int
+ level:
+ description:
+ - RAID Level, 0 - RAID0, 1 - RAID1, 5 - RAID5, 6 - RAID6, 10 - RAID10.
+ - Required when and controller type is LSI or PMC.
+ choices: [0, 1, 5, 6, 10]
+ type: int
+ size:
+ description:
+ - Strip Size, 0 - 32k, 1 - 64k, 2 - 128k, 3 - 256k, 4 - 512k, 5 - 1024k.
+ - Required when I(Info=None) and controller type is LSI, PMC or MV.
+ - When the controller type is MV, size is [0, 1].
+ - When the controller type is LSI or PMC, size is [1, 2, 3, 4, 5].
+ choices: [0, 1, 2, 3, 4, 5]
+ type: int
+ access:
+ description:
+ - Access Policy, 1 - Read Write, 2 - Read Only, 3 - Blocked.
+ - Required when controller type is LSI.
+ choices: [1, 2, 3]
+ type: int
+ r:
+ description:
+ - Read Policy, 1 - Read Ahead, 2 - No Read Ahead.
+ - Required when controller type is LSI.
+ choices: [1, 2]
+ type: int
+ w:
+ description:
+ - Write Policy, 1 - Write Through, 2 - Write Back, 3 - Write caching ok if bad BBU.
+ - Required when controller type is LSI.
+ choices: [1, 2, 3]
+ type: int
+ io:
+ description:
+ - IO Policy, 1 - Direct IO, 2 - Cached IO.
+ - Required when controller type is LSI.
+ choices: [1, 2]
+ type: int
+ cache:
+ description:
+ - Drive Cache, 1 - Unchanged, 2 - Enabled, 3 - Disabled.
+ - Required when controller type is LSI.
+ choices: [1, 2, 3]
+ type: int
+ init:
+ description:
+ - Init State, 1 - No Init, 2 - Quick Init, 3 - Full Init.
+ - Required when controller type is LSI.
+ choices: [1, 2, 3]
+ type: int
+ select:
+ description:
+ - Select Size, from 1 to 100.
+ - Required when controller type is LSI.
+ type: int
+ slot:
+ description:
+ - Slot Num, input multiple slotNumber like 0, 1, 2....
+ - Required when controller type is LSI or PMC.
+ type: list
+ elements: int
+ accelerator:
+ description:
+ - Driver accelerator, 1 - 1h, 2 - 2h, 3 - 3h.
+ - Required when controller type is PMC.
+ choices: [1, 2, 3]
+ type: int
+ vname:
+ description:
+ - Virtual drive name.
+ - Required when controller type is PMC or server model is M7.
+ - Required when controller type is MV.
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Add ldisk test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Add LSI ldisk"
+ kaytus.ksmanage.add_ldisk:
+ ctrl_id: 0
+ level: 1
+ size: 1
+ access: 1
+ r: 1
+ w: 1
+ io: 1
+ cache: 1
+ init: 2
+ select: 10
+ slot: 0, 1
+ provider: "{{ ksmanage }}"
+
+ - name: "Add PMC ldisk"
+ kaytus.ksmanage.add_ldisk:
+ ctrl_id: 0
+ level: 1
+ size: 1
+ accelerator: 1
+ slot: 0, 1
+ vname: "test"
+ provider: "{{ ksmanage }}"
+
+ - name: "Add MV ldisk"
+ kaytus.ksmanage.add_ldisk:
+ ctrl_id: 0
+ size: 1
+ vname: "test"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Disk(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'addldisk'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ ctrl_id=dict(type='int', required=False),
+ level=dict(type='int', required=False, choices=[0, 1, 5, 6, 10]),
+ size=dict(type='int', required=False, choices=[0, 1, 2, 3, 4, 5]),
+ access=dict(type='int', required=False, choices=[1, 2, 3]),
+ r=dict(type='int', required=False, choices=[1, 2]),
+ w=dict(type='int', required=False, choices=[1, 2, 3]),
+ io=dict(type='int', required=False, choices=[1, 2]),
+ cache=dict(type='int', required=False, choices=[1, 2, 3]),
+ init=dict(type='int', required=False, choices=[1, 2, 3]),
+ select=dict(type='int', required=False),
+ slot=dict(type='list', elements='int', required=False),
+ accelerator=dict(type='int', required=False, choices=[1, 2, 3]),
+ vname=dict(type='str', required=False),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ disk_obj = Disk(argument_spec)
+ disk_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/alert_policy_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/alert_policy_info.py
new file mode 100644
index 000000000..e807902b8
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/alert_policy_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: alert_policy_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get alert policy
+description:
+ - Get alert policy on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Alert test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get alert policy"
+ kaytus.ksmanage.alert_policy_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class SNMP(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getalertpolicy'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ snmp_obj = SNMP(argument_spec)
+ snmp_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/audit_log_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/audit_log_info.py
new file mode 100644
index 000000000..263c7e5fe
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/audit_log_info.py
@@ -0,0 +1,126 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: audit_log_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get BMC audit log information
+description:
+ - Get BMC audit log information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options:
+ log_time:
+ description:
+ - Get logs after the specified date, time should be YYYY-MM-DDTHH:MM+HH:MM, like 2019-06-27T12:30+08:00.
+ type: str
+ count:
+ description:
+ - Get the most recent log of a specified number.
+ type: int
+ audit_file:
+ description:
+ - Store logs to a file.
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Bmc audit log test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get bmc audit log information"
+ kaytus.ksmanage.audit_log_info:
+ log_time: "2020-06-01T12:30+08:00"
+ provider: "{{ ksmanage }}"
+
+ - name: "Get bmc audit log information"
+ kaytus.ksmanage.audit_log_info:
+ count: 30
+ provider: "{{ ksmanage }}"
+
+ - name: "Get bmc audit log information"
+ kaytus.ksmanage.audit_log_info:
+ audit_file: "/home/wbs/wbs.log"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class AuditLog(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getauditlog'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ log_time=dict(type='str', required=False),
+ count=dict(type='int', required=False),
+ audit_file=dict(type='str', required=False),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ log_obj = AuditLog(argument_spec)
+ log_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/auto_capture_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/auto_capture_info.py
new file mode 100644
index 000000000..deeb416c4
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/auto_capture_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: auto_capture_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get auto capture screen information
+description:
+ - Get auto capture screen information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Screen test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get auto capture screen information"
+ kaytus.ksmanage.auto_capture_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Screen(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getscreen'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ screen_obj = Screen(argument_spec)
+ screen_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/backplane_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/backplane_info.py
new file mode 100644
index 000000000..cfce77c78
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/backplane_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: backplane_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get disk backplane information
+description:
+ - Get disk backplane information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Disk backplane test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get backplane information"
+ kaytus.ksmanage.backplane_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Backplane(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getbackplane'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ back_obj = Backplane(argument_spec)
+ back_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/backup.py b/ansible_collections/kaytus/ksmanage/plugins/modules/backup.py
new file mode 100644
index 000000000..13023d0ad
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/backup.py
@@ -0,0 +1,120 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: backup
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Backup server settings
+description:
+ - Backup server settings on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ bak_file:
+ description:
+ - Backup file or bak folder.
+ required: true
+ type: str
+ item:
+ description:
+ - Export item.
+ - The values for M5 modules are 'all', 'network', 'service', 'ntp', 'snmptrap', 'dns', 'smtp', 'ad', 'ldap', 'user', 'bios'.
+ - The values for M6 modules are 'all', 'network', 'service', 'ntp', 'snmptrap', 'kvm', 'ipmi', 'authentication', 'syslog'.
+ - The values for M7 modules are 'all', 'network', 'service', 'syslog', 'ncsi'.
+ choices: ['all', 'network', 'service', 'ntp', 'snmptrap', 'dns', 'smtp', 'ad', 'ldap',
+ 'user', 'bios', 'kvm', 'ipmi', 'authentication', 'syslog', 'ncsi']
+ required: true
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Backup test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Backup server settings"
+ kaytus.ksmanage.backup:
+ bak_file: "/home/wbs/"
+ item: "all"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Backup(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'backup'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ bak_file=dict(type='str', required=True),
+ item=dict(type='str', required=True, choices=['all', 'network', 'service', 'ntp', 'snmptrap', 'dns', 'smtp', 'ad',
+ 'ldap', 'user', 'bios', 'kvm', 'ipmi', 'authentication', 'syslog', 'ncsi']),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ backup_obj = Backup(argument_spec)
+ backup_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/bios_export.py b/ansible_collections/kaytus/ksmanage/plugins/modules/bios_export.py
new file mode 100644
index 000000000..6934504f2
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/bios_export.py
@@ -0,0 +1,107 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: bios_export
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Export BIOS config
+description:
+ - Export BIOS config on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ file_url:
+ description:
+ - Suffix is .json/.conf, FILEURI format, "/directory/filename".
+ required: true
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Bios test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Export bios config"
+ kaytus.ksmanage.bios_export:
+ file_url: "/home/wbs/bios.conf"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class BIOS(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'exportbioscfg'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ file_url=dict(type='str', required=True),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ bios_obj = BIOS(argument_spec)
+ bios_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/bios_import.py b/ansible_collections/kaytus/ksmanage/plugins/modules/bios_import.py
new file mode 100644
index 000000000..bbb226448
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/bios_import.py
@@ -0,0 +1,109 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: bios_import
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Import BIOS config
+description:
+ - Import BIOS config on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ file_url:
+ description:
+ - Suffix is .json/.conf, FILEURI format, "/directory/filename".
+ required: true
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Bios test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Import bios config"
+ kaytus.ksmanage.bios_import:
+ file_url: "/home/wbs/bios.conf"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class BIOS(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'importbioscfg'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ file_url=dict(type='str', required=True),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ bios_obj = BIOS(argument_spec)
+ bios_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/bios_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/bios_info.py
new file mode 100644
index 000000000..b55094fbf
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/bios_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: bios_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get BIOS setup
+description:
+ - Get BIOS setup on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Bios test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get bios setup"
+ kaytus.ksmanage.bios_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class BIOS(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getbios'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ bios_obj = BIOS(argument_spec)
+ bios_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/bmc_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/bmc_info.py
new file mode 100644
index 000000000..feb205002
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/bmc_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: bmc_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get BMC information
+description:
+ - Get BMC information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Bmc info test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get BMC information"
+ kaytus.ksmanage.bmc_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class BMCInfo(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getbmcinfo'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ bmc_obj = BMCInfo(argument_spec)
+ bmc_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/boot_image_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/boot_image_info.py
new file mode 100644
index 000000000..b9a8c2f68
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/boot_image_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: boot_image_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get bmc boot image information
+description:
+ - Get bmc boot image information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Boot image test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get bmc boot image information"
+ kaytus.ksmanage.boot_image_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Image(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getbootimage'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ image_obj = Image(argument_spec)
+ image_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/boot_option_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/boot_option_info.py
new file mode 100644
index 000000000..58b013fc2
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/boot_option_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: boot_option_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get BIOS boot options
+description:
+ - Get BIOS boot options on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Boot test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get bios boot option"
+ kaytus.ksmanage.boot_option_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class BIOS(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getsysboot'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ bios_obj = BIOS(argument_spec)
+ bios_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/clear_audit_log.py b/ansible_collections/kaytus/ksmanage/plugins/modules/clear_audit_log.py
new file mode 100644
index 000000000..7b3bb25af
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/clear_audit_log.py
@@ -0,0 +1,101 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: clear_audit_log
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Clear BMC audit log
+description:
+ - Clear BMC audit log on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Clear BMC audit log test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Clear BMC audit log "
+ kaytus.ksmanage.clear_audit_log:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class AuditLog(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'clearauditlog'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ log_obj = AuditLog(argument_spec)
+ log_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/clear_event_log.py b/ansible_collections/kaytus/ksmanage/plugins/modules/clear_event_log.py
new file mode 100644
index 000000000..8648ef256
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/clear_event_log.py
@@ -0,0 +1,101 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: clear_event_log
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Clear event log
+description:
+ - Clear event log on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Clear event log test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Clear event log"
+ kaytus.ksmanage.clear_event_log:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class EventLog(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'cleareventlog'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ log_obj = EventLog(argument_spec)
+ log_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/clear_system_log.py b/ansible_collections/kaytus/ksmanage/plugins/modules/clear_system_log.py
new file mode 100644
index 000000000..ac7b573bf
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/clear_system_log.py
@@ -0,0 +1,115 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: clear_system_log
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Clear BMC system log
+description:
+ - Clear BMC system log on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ level:
+ description:
+ - Log level.
+ default: alert
+ choices: ['alert', 'critical', 'error', 'notice', 'warning', 'debug', 'emergency', 'info', 'all']
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Clear BMC system log test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Clear BMC system log"
+ kaytus.ksmanage.clear_system_log:
+ level: "alert"
+ provider: "{{ ksmanage }}"
+
+ - name: "Clear BMC system log"
+ kaytus.ksmanage.clear_system_log:
+ level: "all"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class SystemLog(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'clearsystemlog'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ level=dict(type='str', default='alert', choices=['alert', 'critical', 'error', 'notice', 'warning', 'debug', 'emergency', 'info', 'all']),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ log_obj = SystemLog(argument_spec)
+ log_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/collect_blackbox.py b/ansible_collections/kaytus/ksmanage/plugins/modules/collect_blackbox.py
new file mode 100644
index 000000000..19d2a904b
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/collect_blackbox.py
@@ -0,0 +1,108 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: collect_blackbox
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Collect blackbox log
+description:
+ - Collect blackbox log on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ file_url:
+ description:
+ - File download path.
+ required: true
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Collect blackbox test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Collect blackbox log"
+ kaytus.ksmanage.collect_blackbox:
+ file_url: "/home/wbs/wbs.log"
+ provider: "{{ ksmanage }}"
+
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Blackbox(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'collectblackbox'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ file_url=dict(type='str', required=True),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ log_obj = Blackbox(argument_spec)
+ log_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/collect_log.py b/ansible_collections/kaytus/ksmanage/plugins/modules/collect_log.py
new file mode 100644
index 000000000..a8f3c71ad
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/collect_log.py
@@ -0,0 +1,107 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: collect_log
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Collect logs
+description:
+ - Collect logs on kaytus Server, it takes about 5 minutes.
+notes:
+ - Does not support C(check_mode).
+options:
+ file_url:
+ description:
+ - File download path or path with filename, for example filepath/filename.tar.
+ type: str
+ required: true
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Collect test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Collect logs"
+ kaytus.ksmanage.collect_log:
+ file_url: "/home/wbs/test.tar"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Log(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'collect'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ file_url=dict(type='str', required=True),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ log_obj = Log(argument_spec)
+ log_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/connect_media_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/connect_media_info.py
new file mode 100644
index 000000000..a4f7e6e33
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/connect_media_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: connect_media_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get remote images redirection information
+description:
+ - Get remote images redirection information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Connect media test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get remote images redirection information"
+ kaytus.ksmanage.connect_media_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Connect(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getconnectmedia'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ connect_obj = Connect(argument_spec)
+ connect_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/cpu_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/cpu_info.py
new file mode 100644
index 000000000..1f57a6218
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/cpu_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: cpu_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get CPU information
+description:
+ - Get CPU information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: CPU test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get cpu information"
+ kaytus.ksmanage.cpu_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class CPU(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getcpu'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ cpu_obj = CPU(argument_spec)
+ cpu_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/del_session.py b/ansible_collections/kaytus/ksmanage/plugins/modules/del_session.py
new file mode 100644
index 000000000..cbf698d0a
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/del_session.py
@@ -0,0 +1,109 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: del_session
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Delete session
+description:
+ - Delete session on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ sid:
+ description:
+ - Session Id, input "all" to delete all sessions.
+ type: str
+ required: true
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Delete session test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Delete session"
+ kaytus.ksmanage.del_session:
+ sid: "223"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Session(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'delsession'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ sid=dict(type='str', required=True),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ session_obj = Session(argument_spec)
+ session_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/dns_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/dns_info.py
new file mode 100644
index 000000000..ea537808c
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/dns_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: dns_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get dns information
+description:
+ - Get dns information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: DNS test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get dns information"
+ kaytus.ksmanage.dns_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class DNS(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getdns'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ dns_obj = DNS(argument_spec)
+ dns_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/download_auto_screenshot.py b/ansible_collections/kaytus/ksmanage/plugins/modules/download_auto_screenshot.py
new file mode 100644
index 000000000..1b31074d5
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/download_auto_screenshot.py
@@ -0,0 +1,107 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: download_auto_screenshot
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Download auto screenshots
+description:
+ - Download auto screenshots on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ file_url:
+ description:
+ - Screen capture file path.
+ type: str
+ required: true
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Screen test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Download auto screenshots"
+ kaytus.ksmanage.download_auto_screenshot:
+ file_url: "/home/wbs/screen"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Screen(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'downscreen'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ file_url=dict(type='str', required=True),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ screen_obj = Screen(argument_spec)
+ screen_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/download_manual_screenshot.py b/ansible_collections/kaytus/ksmanage/plugins/modules/download_manual_screenshot.py
new file mode 100644
index 000000000..d9b960dbe
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/download_manual_screenshot.py
@@ -0,0 +1,107 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: download_manual_screenshot
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Download manual screenshots
+description:
+ - Download manual screenshots on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ file_url:
+ description:
+ - Screen capture file path.
+ type: str
+ required: true
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Screen test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Download manual screenshots"
+ kaytus.ksmanage.download_manual_screenshot:
+ file_url: "/home/wbs/screen"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Screen(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'downscreenmanual'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ file_url=dict(type='str', required=True),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ screen_obj = Screen(argument_spec)
+ screen_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_ad.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_ad.py
new file mode 100644
index 000000000..86d195996
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_ad.py
@@ -0,0 +1,163 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_ad
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set active directory information
+description:
+ - Set active directory information on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ enable:
+ description:
+ - Active Directory Authentication Status.
+ choices: ['enable', 'disable']
+ type: str
+ ssl_enable:
+ description:
+ - Active Directory SSL Status.
+ choices: ['enable', 'disable']
+ type: str
+ name:
+ description:
+ - Secret Username. Specify the Username of an administrator of the Active Directory Server.
+ type: str
+ code:
+ description:
+ - Secret Password. Specify the Password of the administrator.
+ type: str
+ timeout:
+ description:
+ - The Time Out configuration(15-300).
+ - Only the M5 model supports this parameter.
+ type: int
+ domain:
+ description:
+ - User Domain Name. Specify the Domain Name for the user for example MyDomain.com.
+ type: str
+ addr1:
+ description:
+ - Domain Controller Server Address1. Enter the IP address of Active Directory server.
+ type: str
+ addr2:
+ description:
+ - Domain Controller Server Address2. Enter the IP address of Active Directory server.
+ type: str
+ addr3:
+ description:
+ - Domain Controller Server Address3. Enter the IP address of Active Directory server.
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Ad test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set active directory information"
+ kaytus.ksmanage.edit_ad:
+ enable: "disable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set active directory information"
+ kaytus.ksmanage.edit_ad:
+ enable: "enable"
+ name: "test"
+ code: "123456"
+ timeout: 120
+ domain: "test.com"
+ addr1: "100.2.2.2"
+ addr2: "100.2.2.3"
+ addr3: "100.2.2.4"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class AD(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setad'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ enable=dict(type='str', required=False, choices=['enable', 'disable']),
+ ssl_enable=dict(type='str', required=False, choices=['enable', 'disable']),
+ name=dict(type='str', required=False),
+ code=dict(type='str', required=False),
+ timeout=dict(type='int', required=False),
+ domain=dict(type='str', required=False),
+ addr1=dict(type='str', required=False),
+ addr2=dict(type='str', required=False),
+ addr3=dict(type='str', required=False),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ ad_obj = AD(argument_spec)
+ ad_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_alert_policy.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_alert_policy.py
new file mode 100644
index 000000000..0739c11e7
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_alert_policy.py
@@ -0,0 +1,156 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_alert_policy
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set alert policy
+description:
+ - Set alert policy on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ id:
+ description:
+ - Alert id. Customize the channel for sending alarms in Trap.
+ - The values for M5 modules are 1, 2, 3.
+ - The values for M6 modules are 1, 2, 3, 4.
+ choices: [1, 2, 3, 4]
+ required: true
+ type: int
+ status:
+ description:
+ - Alert policy status. Whether to enable the receiving end for sending messages in trap mode.
+ choices: ['enable', 'disable']
+ type: str
+ type:
+ description:
+ - Alert Type.
+ - Only the M5 model supports this parameter.
+ choices: ['snmp', 'email', 'snmpdomain']
+ type: str
+ destination:
+ description:
+ - Alert destination. The address of the server receiving trap information sent by Trap.
+ - when type is snmp, specify an IP address.
+ - When type is email, specify a username.
+ - When type is snmpdomain, specify a domain.
+ type: str
+ channel:
+ description:
+ - LAN Channel.
+ - Only the M5 model supports this parameter.
+ choices: ['shared', 'dedicated']
+ type: str
+ trap_port:
+ description:
+ - SNMP trap port(1-65535).
+ - Only the M6 model supports this parameter.
+ type: int
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Alert policy test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set alert policy"
+ kaytus.ksmanage.edit_alert_policy:
+ id: 1
+ status: "enable"
+ type: "snmp"
+ destination: "100.2.2.2"
+ channel: "shared"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set alert policy"
+ kaytus.ksmanage.edit_alert_policy:
+ id: 1
+ status: "disable"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class SNMP(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setalertpolicy'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ id=dict(type='int', required=True, choices=[1, 2, 3, 4]),
+ status=dict(type='str', required=False, choices=['enable', 'disable']),
+ type=dict(type='str', required=False, choices=['snmp', 'email', 'snmpdomain']),
+ destination=dict(type='str', required=False),
+ channel=dict(type='str', required=False, choices=['shared', 'dedicated']),
+ trap_port=dict(type='int', required=False),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ snmp_obj = SNMP(argument_spec)
+ snmp_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_auto_capture.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_auto_capture.py
new file mode 100644
index 000000000..379c1612f
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_auto_capture.py
@@ -0,0 +1,110 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_auto_capture
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set auto capture screen
+description:
+ - Set auto capture screen on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ status:
+ description:
+ - Capture status.
+ choices: ['enable', 'disable']
+ type: str
+ required: true
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Screen test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set auto capture screen"
+ kaytus.ksmanage.edit_auto_capture:
+ status: "enable"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Screen(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setscreen'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ status=dict(type='str', required=True, choices=['enable', 'disable']),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ screen_obj = Screen(argument_spec)
+ screen_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_bios.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_bios.py
new file mode 100644
index 000000000..09b6b87d6
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_bios.py
@@ -0,0 +1,134 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_bios
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set BIOS setup attributes
+description:
+ - Set BIOS setup attributes on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ list:
+ description:
+ - Show attribute name and configurable value.
+ default: False
+ type: bool
+ attribute:
+ description:
+ - BIOS setup option.
+ - Required when I(list=False) and I(file_url=None).
+ type: str
+ value:
+ description:
+ - BIOS setup option value.
+ - Required when I(list=False) and I(file_url=None).
+ type: str
+ file_url:
+ description:
+ - BIOS option file. attribute must be used with value.
+ - Mutually exclusive with fileurl format, "/directory/filename".
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Bios test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set bios setup"
+ kaytus.ksmanage.edit_bios:
+ attribute: "VMX"
+ value: "Disable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set bios setup"
+ kaytus.ksmanage.edit_bios:
+ attribute: "VMX"
+ value: "Enable"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class BIOS(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setbios'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ list=dict(type='bool', required=False, default=False),
+ attribute=dict(type='str', required=False),
+ value=dict(type='str', required=False),
+ file_url=dict(type='str', required=False)
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ bios_obj = BIOS(argument_spec)
+ bios_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_boot_image.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_boot_image.py
new file mode 100644
index 000000000..799f71687
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_boot_image.py
@@ -0,0 +1,111 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_boot_image
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set bmc boot image
+description:
+ - Set bmc boot image on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ image:
+ description:
+ - BMC boot image.
+ - 0-Higher firmware version; 1-Image 1; 2-Image 2; 3-Lower firmware version; 4-Latest updated firmware; 5-Not latest updated firmware.
+ choices: [0, 1, 2, 3, 4, 5]
+ type: int
+ required: true
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Boot image test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set bmc boot image"
+ kaytus.ksmanage.edit_boot_image:
+ image: 2
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Image(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setbootimage'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ image=dict(type='int', required=True, choices=[0, 1, 2, 3, 4, 5]),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ image_obj = Image(argument_spec)
+ image_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_boot_option.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_boot_option.py
new file mode 100644
index 000000000..1a2cd56ee
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_boot_option.py
@@ -0,0 +1,123 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_boot_option
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set BIOS boot options
+description:
+ - Set BIOS boot options on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ device:
+ description:
+ - Boot device.
+ choices: ['none', 'HDD', 'PXE', 'CD', 'BIOSSETUP']
+ type: str
+ effective:
+ description:
+ - Effective, once or continuous.
+ choices: ['Once', 'Continuous']
+ type: str
+ mode:
+ description:
+ - Boot type.
+ choices: ['Legacy', 'UEFI']
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Boot test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set bios boot option"
+ kaytus.ksmanage.edit_boot_option:
+ device: "PXE"
+ effective: "Once"
+ mode: "Legacy"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class BIOS(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setsysboot'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ device=dict(type='str', required=False, choices=['none', 'HDD', 'PXE', 'CD', 'BIOSSETUP']),
+ effective=dict(type='str', required=False, choices=['Once', 'Continuous']),
+ mode=dict(type='str', required=False, choices=['Legacy', 'UEFI'])
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ bios_obj = BIOS(argument_spec)
+ bios_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_connect_media.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_connect_media.py
new file mode 100644
index 000000000..1dca09259
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_connect_media.py
@@ -0,0 +1,126 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_connect_media
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Start/Stop virtual media Image
+description:
+ - Start/Stop virtual media Image on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ image_type:
+ description:
+ - Virtual media type.
+ - Only the M5 model supports this parameter.
+ choices: ['CD', 'FD', 'HD']
+ type: str
+ required: true
+ op_type:
+ description:
+ - Start or stop media.
+ choices: ['start', 'stop']
+ type: str
+ required: true
+ image_name:
+ description:
+ - Image name.
+ type: str
+ required: true
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Connect media test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set remote image redirection"
+ kaytus.ksmanage.edit_connect_media:
+ image_type: "CD"
+ op_type: "start"
+ image_name: "aa.iso"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Connect(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setconnectmedia'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ image_type=dict(type='str', required=True, choices=['CD', 'FD', 'HD']),
+ op_type=dict(type='str', required=True, choices=['start', 'stop']),
+ image_name=dict(type='str', required=True),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ connect_obj = Connect(argument_spec)
+ connect_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_dns.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_dns.py
new file mode 100644
index 000000000..171890488
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_dns.py
@@ -0,0 +1,231 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_dns
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set dns information
+description:
+ - Set dns information on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ dns_status:
+ description:
+ - DNS status.
+ choices: ['enable', 'disable']
+ type: str
+ host_cfg:
+ description:
+ - Host Settings. Select whether the host name will be configured manually or automatically.
+ choices: ['manual', 'auto']
+ type: str
+ host_name:
+ description:
+ - Host Name.
+ - Required when I(host_cfg=manual).
+ type: str
+ domain_manual:
+ description:
+ - Domain Settings. Select whether the domain interface will be configured manually or automatically.
+ choices: ['manual', 'auto']
+ type: str
+ domain_iface:
+ description:
+ - Network Interface, input like 'eth0_v4', 'eth0_v6', 'eth1_v4', 'eth1_v6', 'bond0_v4', 'bond0_v6'.
+ - Required when I(domain_manual=auto).
+ type: str
+ domain_name:
+ description:
+ - Domain Name.
+ - Required when I(domain_manual=manual).
+ type: str
+ dns_manual:
+ description:
+ - DNS Settings. Select whether the DNS interface will be configured manually or automatically.
+ choices: ['manual', 'auto']
+ type: str
+ dns_iface:
+ description:
+ - DNS Interface, input like 'eth0', 'eth1', 'bond0'.
+ - Required when I(dns_manual=auto).
+ type: str
+ dns_priority:
+ description:
+ - IP Priority.
+ - Required when I(dns_manual=auto).
+ choices: ['4', '6']
+ type: str
+ dns_server1:
+ description:
+ - DNS Server1 IPv4 or IPv6 address.
+ - Required when I(dns_manual=manual).
+ type: str
+ dns_server2:
+ description:
+ - DNS Server2 IPv4 or IPv6 address.
+ - Required when I(dns_manual=manual).
+ type: str
+ dns_server3:
+ description:
+ - DNS Server3 IPv4 or IPv6 address.
+ - Required when I(dns_manual=manual).
+ type: str
+ register_status1:
+ description:
+ - BMC register status 1.
+ - Only the M6 model supports this parameter.
+ choices: ['enable', 'disable']
+ type: str
+ registration_method1:
+ description:
+ - Registration method 1.
+ - Only the M6 model supports this parameter.
+ - Required when I(register_status1=enable).
+ choices: ['nsupdate', 'dhcp', 'hostname']
+ type: str
+ register_status2:
+ description:
+ - BMC register status 2.
+ - Only the M6 model supports this parameter.
+ choices: ['enable', 'disable']
+ type: str
+ registration_method2:
+ description:
+ - Registration method 2.
+ - Only the M6 model supports this parameter.
+ - Required when I(register_status2=enable).
+ choices: ['nsupdate', 'dhcp', 'hostname']
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: DNS test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set dns information"
+ kaytus.ksmanage.edit_dns:
+ dns_status: "disable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set dns information"
+ kaytus.ksmanage.edit_dns:
+ dns_status: "enable"
+ host_cfg: "manual"
+ host_name: "123456789"
+ domain_manual: "auto"
+ domain_iface: "eth0_v4"
+ dns_manual: "manual"
+ dns_server1: "100.2.2.2"
+ dns_server2: "100.2.2.3"
+ dns_server3: "100.2.2.4"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set dns information"
+ kaytus.ksmanage.edit_dns:
+ dns_status: "enable"
+ host_cfg: "manual"
+ host_name: "123456789"
+ domain_manual: "manual"
+ domain_name: "test.com"
+ dns_manual: "auto"
+ dns_iface: "eth0"
+ dns_priority: "4"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class DNS(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setdns'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ dns_status=dict(type='str', required=False, choices=['enable', 'disable']),
+ host_cfg=dict(type='str', required=False, choices=['manual', 'auto']),
+ host_name=dict(type='str', required=False),
+ domain_manual=dict(type='str', required=False, choices=['manual', 'auto']),
+ domain_iface=dict(type='str', required=False),
+ domain_name=dict(type='str', required=False),
+ dns_manual=dict(type='str', required=False, choices=['manual', 'auto']),
+ dns_iface=dict(type='str', required=False),
+ dns_priority=dict(type='str', required=False, choices=['4', '6']),
+ dns_server1=dict(type='str', required=False),
+ dns_server2=dict(type='str', required=False),
+ dns_server3=dict(type='str', required=False),
+ register_status1=dict(type='str', required=False, choices=['enable', 'disable']),
+ registration_method1=dict(type='str', required=False, choices=['nsupdate', 'dhcp', 'hostname']),
+ register_status2=dict(type='str', required=False, choices=['enable', 'disable']),
+ registration_method2=dict(type='str', required=False, choices=['nsupdate', 'dhcp', 'hostname']),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ dns_obj = DNS(argument_spec)
+ dns_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_event_log_policy.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_event_log_policy.py
new file mode 100644
index 000000000..39d46e9e1
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_event_log_policy.py
@@ -0,0 +1,110 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_event_log_policy
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set event log policy
+description:
+ - Set event log policy on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ policy:
+ description:
+ - Event log policy.
+ choices: ['Linear', 'Circular']
+ type: str
+ required: true
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Event log policy test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set event log policy"
+ kaytus.ksmanage.edit_event_log_policy:
+ policy: "Linear"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Log(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'seteventlogpolicy'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ policy=dict(type='str', required=True, choices=['Linear', 'Circular']),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ log_obj = Log(argument_spec)
+ log_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_fan.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_fan.py
new file mode 100644
index 000000000..e89d74d9b
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_fan.py
@@ -0,0 +1,126 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_fan
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set fan information
+description:
+ - Set fan information on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ mode:
+ description:
+ - Control mode, Manual or Automatic , Manual must be used with fans_peed.
+ choices: ['Automatic', 'Manual']
+ type: str
+ id:
+ description:
+ - Fan id 255 is for all fans, 0~n.
+ type: int
+ fan_speed:
+ description:
+ - Fan speed (duty ratio), range in 1 - 100.
+ type: int
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Fan test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set fan information"
+ kaytus.ksmanage.edit_fan:
+ mode: "Automatic"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set fan information"
+ kaytus.ksmanage.edit_fan:
+ mode: "Manual"
+ id: 1
+ fan_speed: 80
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Fan(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'fancontrol'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ mode=dict(type='str', required=False, choices=['Automatic', 'Manual']),
+ id=dict(type='int', required=False),
+ fan_speed=dict(type='int', required=False),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ fan_obj = Fan(argument_spec)
+ fan_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_fru.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_fru.py
new file mode 100644
index 000000000..4106a527f
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_fru.py
@@ -0,0 +1,121 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_fru
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set fru settings
+description:
+ - Set fru settings on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ attribute:
+ description:
+ - CP is Chassis Part Number, CS is Chassis Serial, PM is Product Manufacturer.
+ - PPN is Product Part Number, PS is Product Serial, PN is Product Name.
+ - PV is Product Version, PAT is Product Asset Tag, BM is Board Mfg, BPN is Board Product Name.
+ - BS is Board Serial, BP is Board Part Number.
+ choices: ['CP', 'CS', 'PM', 'PPN', 'PS', 'PN', 'PV', 'PAT', 'BM', 'BPN', 'BS', 'BP']
+ required: true
+ type: str
+ value:
+ description:
+ - Set the value of attribute.
+ required: true
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Fru test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set Fru"
+ kaytus.ksmanage.edit_fru:
+ attribute: "CP"
+ value: "test"
+ provider: "{{ ksmanage }}"
+
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class UID(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setfru'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ attribute=dict(type='str', required=True, choices=['CP', 'CS', 'PM', 'PPN', 'PS', 'PN', 'PV', 'PAT', 'BM', 'BPN', 'BS', 'BP']),
+ value=dict(type='str', required=True),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ uid_obj = UID(argument_spec)
+ uid_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_ipv4.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_ipv4.py
new file mode 100644
index 000000000..9eb55397b
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_ipv4.py
@@ -0,0 +1,159 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_ipv4
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set ipv4 information
+description:
+ - Set ipv4 information on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ interface_name:
+ description:
+ - Set interface name. Select the LAN interface to be configured.
+ choices: ['eth0', 'eth1', 'bond0']
+ required: true
+ type: str
+ ipv4_status:
+ description:
+ - Enable or disable IPV4.
+ choices: ['enable', 'disable']
+ type: str
+ ipv4_dhcp_enable:
+ description:
+ - Enable 'Enable DHCP' to dynamically configure IPv4 address using Dynamic Host Configuration Protocol (DHCP).
+ choices: ['dhcp', 'static']
+ type: str
+ ipv4_address:
+ description:
+ - If DHCP is disabled, specify a static IPv4 address to be configured for the selected interface.
+ - Required when I(ipv4_dhcp_enable=static).
+ type: str
+ ipv4_subnet:
+ description:
+ - If DHCP is disabled, specify a static Subnet Mask to be configured for the selected interface.
+ - Required when I(ipv4_dhcp_enable=static).
+ type: str
+ ipv4_gateway:
+ description:
+ - If DHCP is disabled, specify a static Default Gateway to be configured for the selected interface.
+ - Required when I(ipv4_dhcp_enable=static).
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Ipv4 test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set ipv4 information"
+ kaytus.ksmanage.edit_ipv4:
+ interface_name: "eth0"
+ ipv4_status: "disable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set ipv4 information"
+ kaytus.ksmanage.edit_ipv4:
+ interface_name: "eth0"
+ ipv4_status: "enable"
+ ipv4_dhcp_enable: "dhcp"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set ipv4 information"
+ kaytus.ksmanage.edit_ipv4:
+ interface_name: "eth0"
+ ipv4_status: "enable"
+ ipv4_dhcp_enable: "static"
+ ipv4_address: "100.2.36.10"
+ ipv4_subnet: "255.255.255.0"
+ ipv4_gateway: "100.2.36.1"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Network(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setipv4'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ interface_name=dict(type='str', required=True, choices=['eth0', 'eth1', 'bond0']),
+ ipv4_status=dict(type='str', required=False, choices=['enable', 'disable']),
+ ipv4_dhcp_enable=dict(type='str', required=False, choices=['dhcp', 'static']),
+ ipv4_address=dict(type='str', required=False),
+ ipv4_subnet=dict(type='str', required=False),
+ ipv4_gateway=dict(type='str', required=False),
+
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ net_obj = Network(argument_spec)
+ net_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_ipv6.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_ipv6.py
new file mode 100644
index 000000000..41cf9db73
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_ipv6.py
@@ -0,0 +1,166 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_ipv6
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set ipv6 information
+description:
+ - Set ipv6 information on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ interface_name:
+ description:
+ - Set interface name. Select the LAN interface to be configured.
+ choices: ['eth0', 'eth1', 'bond0']
+ required: True
+ type: str
+ ipv6_status:
+ description:
+ - Enable or disable IPV6.
+ choices: ['enable', 'disable']
+ type: str
+ ipv6_dhcp_enable:
+ description:
+ - Enable 'Enable DHCP' to dynamically configure IPv6 address using Dynamic Host Configuration Protocol (DHCP).
+ choices: ['dhcp', 'static']
+ type: str
+ ipv6_address:
+ description:
+ - If DHCP is disabled, specify a static IPv6 address to be configured for the selected interface.
+ - Required when I(ipv6_dhcp_enable=static).
+ type: str
+ ipv6_index:
+ description:
+ - Ipv6 index(0-15).
+ - Required when I(ipv6_dhcp_enable=static).
+ type: int
+ ipv6_prefix:
+ description:
+ - The subnet prefix length for the IPv6 settings(0-128).
+ - Required when I(ipv6_dhcp_enable=static).
+ type: int
+ ipv6_gateway:
+ description:
+ - If DHCP is disabled, specify a static Default Gateway to be configured for the selected interface.
+ - Required when I(ipv6_dhcp_enable=static).
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Ipv6 test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set ipv6 information"
+ kaytus.ksmanage.edit_ipv6:
+ interface_name: "eth0"
+ ipv6_status: "disable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set ipv6 information"
+ kaytus.ksmanage.edit_ipv6:
+ interface_name: "eth0"
+ ipv6_status: "enable"
+ ipv6_dhcp_enable: "dhcp"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set ipv6 information"
+ kaytus.ksmanage.edit_ipv6:
+ interface_name: "eth0"
+ ipv6_status: "enable"
+ ipv6_dhcp_enable: "static"
+ ipv6_address: "::ffff:100:2:36:10"
+ ipv6_index: 12
+ ipv6_prefix: 16
+ ipv6_gateway: "::"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Network(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setipv6'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ interface_name=dict(type='str', required=True, choices=['eth0', 'eth1', 'bond0']),
+ ipv6_status=dict(type='str', required=False, choices=['enable', 'disable']),
+ ipv6_dhcp_enable=dict(type='str', required=False, choices=['dhcp', 'static']),
+ ipv6_address=dict(type='str', required=False),
+ ipv6_index=dict(type='int', required=False),
+ ipv6_prefix=dict(type='int', required=False),
+ ipv6_gateway=dict(type='str', required=False),
+
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ net_obj = Network(argument_spec)
+ net_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_kvm.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_kvm.py
new file mode 100644
index 000000000..24edb1d13
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_kvm.py
@@ -0,0 +1,191 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_kvm
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set KVM
+description:
+ - Set KVM on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ client_type:
+ description:
+ - Client Type.
+ - Only the M6 model supports this parameter.
+ choices: ['vnc', 'viewer']
+ type: str
+ kvm_encryption:
+ description:
+ - Encrypt KVM packets.
+ choices: ['enable', 'disable']
+ type: str
+ media_attach:
+ description:
+ - Two types of VM attach mode are available.
+ - Attach is Immediately attaches Virtual Media to the server upon bootup.
+ - Auto is Attaches Virtual Media to the server only when a virtual media session is started.
+ - Only the M5 model supports this parameter.
+ choices: ['attach', 'auto']
+ type: str
+ keyboard_language:
+ description:
+ - Select the Keyboard Language.
+ - AD is Auto Detect, DA is Danish, NL-BE is Dutch Belgium, NL-NL is Dutch Netherland.
+ - GB is English UK , US is English US, FI is Finnish, FR-BE is French Belgium, FR is French France.
+ - DE is German Germany, DE-CH is German Switzerland, IT is Italian, JP is Japanese.
+ - NO is Norwegian, PT is Portuguese, ES is Spanish, SV is Swedish, TR_F is Turkish F, TR_Q is Turkish Q.
+ choices: ['AD', 'DA', 'NL-BE', 'NL-NL', 'GB', 'US', 'FI', 'FR-BE', 'FR', 'DE', 'DE-CH', 'IT', 'JP', 'ON', 'PT', 'EC', 'SV', 'TR_F', 'TR_Q']
+ type: str
+ retry_count:
+ description:
+ - Number of times to be retried in case a KVM failure occurs.Retry count ranges from 1 to 20.
+ - Only the M5 model supports this parameter.
+ type: int
+ retry_time_interval:
+ description:
+ - The Identification for retry time interval configuration (5-30) seconds.
+ - Only the M5 model supports this parameter.
+ type: int
+ local_monitor_off:
+ description:
+ - Server Monitor OFF Feature Status.
+ choices: ['enable', 'disable']
+ type: str
+ automatic_off:
+ description:
+ - Automatically OFF Server Monitor, When KVM Launches.
+ choices: ['enable', 'disable']
+ type: str
+ non_secure:
+ description:
+ - Enable/disable Non Secure Connection Type.
+ - Only the M6 model supports this parameter.
+ - Required when I(client_type=vnc).
+ choices: ['enable', 'disable']
+ type: str
+ ssh_vnc:
+ description:
+ - Enable/disable VNC over SSH in BMC.
+ - Only the M6 model supports this parameter.
+ - Required when I(client_type=vnc).
+ choices: ['enable', 'disable']
+ type: str
+ stunnel_vnc:
+ description:
+ - Enable/disable VNC over Stunnel in BMC.
+ - Only the M6 model supports this parameter.
+ - Required when I(client_type=vnc).
+ choices: ['enable', 'disable']
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: KVM test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set KVM"
+ kaytus.ksmanage.edit_kvm:
+ kvm_encryption: "enable"
+ media_attach: "auto"
+ keyboard_language: "AD"
+ retry_count: 13
+ retry_time_interval: 10
+ local_monitor_off: "enable"
+ automatic_off: "enable"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class KVM(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setkvm'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ client_type=dict(type='str', required=False, choices=['vnc', 'viewer']),
+ kvm_encryption=dict(type='str', required=False, choices=['enable', 'disable']),
+ media_attach=dict(type='str', required=False, choices=['attach', 'auto']),
+ keyboard_language=dict(type='str', required=False,
+ choices=['AD', 'DA', 'NL-BE', 'NL-NL', 'GB', 'US', 'FI', 'FR-BE', 'FR',
+ 'DE', 'DE-CH', 'IT', 'JP', 'ON', 'PT', 'EC', 'SV', 'TR_F', 'TR_Q']),
+ retry_count=dict(type='int', required=False),
+ retry_time_interval=dict(type='int', required=False),
+ local_monitor_off=dict(type='str', required=False, choices=['enable', 'disable']),
+ automatic_off=dict(type='str', required=False, choices=['enable', 'disable']),
+ non_secure=dict(type='str', required=False, choices=['enable', 'disable']),
+ ssh_vnc=dict(type='str', required=False, choices=['enable', 'disable']),
+ stunnel_vnc=dict(type='str', required=False, choices=['enable', 'disable']),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ kvm_obj = KVM(argument_spec)
+ kvm_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_ldap.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_ldap.py
new file mode 100644
index 000000000..5654ba1a1
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_ldap.py
@@ -0,0 +1,193 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_ldap
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set ldap information
+description:
+ - Set ldap information on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ enable:
+ description:
+ - LDAP/E-Directory Authentication Status.
+ choices: ['enable', 'disable']
+ type: str
+ encry:
+ description:
+ - Encryption Type.
+ choices: ['no', 'SSL', 'StartTLS']
+ type: str
+ address:
+ description:
+ - Server Address.
+ type: str
+ server_port:
+ description:
+ - Server Port. Specify the LDAP/E-Directory Port.
+ type: int
+ dn:
+ description:
+ - Bind DN. The Bind DN is used in bind operations, which authenticates the client to the server.
+ - Bind DN is a string of 4 to 64 alphanumeric characters.
+ - It must start with an alphabetical character.
+ - Special Symbols like dot(.), comma(, ), hyphen(-), underscore(_), equal-to(=) are allowed.
+ type: str
+ code:
+ description:
+ - Password. The Bind password is also used in the bind authentication operations between client and server.
+ - Required when I(enable=enable).
+ type: str
+ base:
+ description:
+ - Search Base.
+ - The Search Base allows the LDAP/E-Directory server to find which part of the external directory tree is to be searched.
+ - This search base may be equivalent to the organization or the group of the external directory.
+ - Search base is a string of 4 to 64 alphanumeric characters.
+ - It must start with an alphabetical character.
+ - Special Symbols like dot(.), comma(, ), hyphen(-), underscore(_), equal-to(=) are allowed.
+ type: str
+ attr:
+ description:
+ - Attribute of User Login.
+ - The Attribute of User Login field indicates to the LDAP/E-Directory server which attribute should be used to identify the user.
+ choices: ['cn', 'uid']
+ type: str
+ cn:
+ description:
+ - Common name type.
+ - Required when I(encry=StartTLS).
+ choices: ['ip', 'fqdn']
+ type: str
+ ca:
+ description:
+ - CA certificate file path.
+ - Required when I(encry=StartTLS).
+ type: str
+ ce:
+ description:
+ - Certificate file path.
+ - Required when I(encry=StartTLS).
+ type: str
+ pk:
+ description:
+ - Private Key file path.
+ - Required when I(encry=StartTLS).
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Ldap test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set ldap information"
+ kaytus.ksmanage.edit_ldap:
+ enable: "disable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set ldap information"
+ kaytus.ksmanage.edit_ldap:
+ enable: "enable"
+ encry: "SSL"
+ address: "100.2.2.2"
+ server_port: 389
+ dn: "cn=manager,ou=login,dc=domain,dc=com"
+ code: "123456"
+ base: "cn=manager"
+ attr: "uid"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class LDAP(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setldap'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ enable=dict(type='str', required=False, choices=['enable', 'disable']),
+ encry=dict(type='str', required=False, choices=['no', 'SSL', 'StartTLS']),
+ address=dict(type='str', required=False),
+ server_port=dict(type='int', required=False),
+ dn=dict(type='str', required=False),
+ code=dict(type='str', required=False),
+ base=dict(type='str', required=False),
+ attr=dict(type='str', required=False, choices=['cn', 'uid']),
+ cn=dict(type='str', required=False, choices=['ip', 'fqdn']),
+ ca=dict(type='str', required=False),
+ ce=dict(type='str', required=False),
+ pk=dict(type='str', required=False),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ ldap_obj = LDAP(argument_spec)
+ ldap_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_ldisk.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_ldisk.py
new file mode 100644
index 000000000..b264e8865
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_ldisk.py
@@ -0,0 +1,131 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_ldisk
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set logical disk
+description:
+ - Set logical disk on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ ctrl_id:
+ description:
+ - Raid controller ID.
+ type: int
+ ldisk_id:
+ description:
+ - Logical disk ID.
+ type: int
+ option:
+ description:
+ - Set operation options for a logical disk.
+ - LOC is Locate Logical Drive, STL is Stop Locate LogicalDrive.
+ - FI is Fast Initialization, SFI is Slow/Full Initialization.
+ - SI is Stop Initialization, DEL is Delete LogicalDrive.
+ choices: ['LOC', 'STL', 'FI', 'SFI', 'SI', 'DEL']
+ type: str
+ duration:
+ description:
+ - Duration range is 1-255, physical drive under PMC raid controller.
+ - Required when I(option=LOC).
+ - Only the M6 model supports this parameter.
+ type: int
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Edit ldisk test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Edit ldisk"
+ kaytus.ksmanage.edit_ldisk:
+ ctrl_id: 0
+ ldisk_id: 1
+ option: "LOC"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Disk(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setldisk'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ ctrl_id=dict(type='int', required=False),
+ ldisk_id=dict(type='int', required=False),
+ option=dict(type='str', required=False, choices=['LOC', 'STL', 'FI', 'SFI', 'SI', 'DEL']),
+ duration=dict(type='int', required=False),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ disk_obj = Disk(argument_spec)
+ disk_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_log_setting.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_log_setting.py
new file mode 100644
index 000000000..dfdc94058
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_log_setting.py
@@ -0,0 +1,164 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_log_setting
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set bmc system and audit log setting
+description:
+ - Set bmc system and audit log setting on kaytus Server.
+ - Only the M5 models support this feature.
+notes:
+ - Does not support C(check_mode).
+options:
+ status:
+ description:
+ - System Log Status.
+ choices: ['enable', 'disable']
+ type: str
+ type:
+ description:
+ - System log type.
+ choices: ['local', 'remote', 'both']
+ type: str
+ file_size:
+ description:
+ - File Size(3-65535bytes), set when type is local(default 30000).
+ type: int
+ audit_status:
+ description:
+ - Audit Log Status.
+ choices: ['enable', 'disable']
+ type: str
+ audit_type:
+ description:
+ - Audit log type.
+ choices: ['local', 'remote', 'both']
+ type: str
+ rotate_count:
+ description:
+ - Rotate Count, set when type is local, 0-delete old files(default), 1-bak old files.
+ choices: [0, 1]
+ type: int
+ server_addr:
+ description:
+ - Server Address, set when type is remote.
+ type: str
+ server_port:
+ description:
+ - Server Port(0-65535), set when type is remote.
+ type: int
+ protocol_type:
+ description:
+ - Protocol Type, set when type is remote.
+ choices: ['UDP', 'TCP']
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Edit log setting test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Edit bmc system log setting"
+ kaytus.ksmanage.edit_log_setting:
+ status: "enable"
+ type: "both"
+ provider: "{{ ksmanage }}"
+
+ - name: "Edit bmc audit log setting"
+ kaytus.ksmanage.edit_log_setting:
+ audit_status: "enable"
+ audit_type: "remote"
+ server_addr: "100.2.126.11"
+ server_port: "514"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class LogSetting(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setbmclogsettings'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ status=dict(type='str', required=False, choices=['enable', 'disable']),
+ type=dict(type='str', required=False, choices=['local', 'remote', 'both']),
+ file_size=dict(type='int', required=False),
+ audit_status=dict(type='str', required=False, choices=['enable', 'disable']),
+ audit_type=dict(type='str', required=False, choices=['local', 'remote', 'both']),
+ rotate_count=dict(type='int', required=False, choices=[0, 1]),
+ server_addr=dict(type='str', required=False),
+ server_port=dict(type='int', required=False),
+ protocol_type=dict(type='str', required=False, choices=['UDP', 'TCP']),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ log_obj = LogSetting(argument_spec)
+ log_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_m6_log_setting.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_m6_log_setting.py
new file mode 100644
index 000000000..219a7b3ed
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_m6_log_setting.py
@@ -0,0 +1,174 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_m6_log_setting
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set bmc system and audit log setting
+description:
+ - Set bmc system and audit log setting on kaytus Server.
+ - Only the M6 models support this feature.
+notes:
+ - Does not support C(check_mode).
+options:
+ status:
+ description:
+ - System Log Status.
+ choices: ['enable', 'disable']
+ type: str
+ host_tag:
+ description:
+ - System log host tag, set when I(status=enable).
+ choices: ['HostName', 'SerialNum', 'AssertTag']
+ type: str
+ level:
+ description:
+ - Events Level, set when I(status=enable).
+ choices: ['Critical', 'Warning', 'Info']
+ type: str
+ protocol_type:
+ description:
+ - Protocol Type, set when I(status=enable).
+ choices: ['UDP', 'TCP']
+ type: str
+ server_id:
+ description:
+ - Syslog Server ID, set when I(status=enable).
+ choices: [0, 1, 2, 3]
+ type: int
+ server_addr:
+ description:
+ - Server Address, set when server_id is not none.
+ type: str
+ server_port:
+ description:
+ - Server Address, set when server_id is not none.
+ type: int
+ log_type:
+ description:
+ - Remote Log Type, set when server_id is not none.
+ choices: ['idl', 'audit', 'both']
+ type: str
+ test:
+ description:
+ - Test remote log settings, set when server_id is not none.
+ default: False
+ type: bool
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Edit log setting test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Edit bmc system log setting"
+ kaytus.ksmanage.edit_m6_log_setting:
+ status: "disable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Edit bmc audit log setting"
+ kaytus.ksmanage.edit_m6_log_setting:
+ status: "enable"
+ host_tag: "HostName"
+ level: "Info"
+ protocol_type: "TCP"
+ server_id: 0
+ server_addr: "100.2.126.11"
+ server_port: 514
+ log_type: "both"
+ provider: "{{ ksmanage }}"
+
+ - name: "test bmc audit log"
+ kaytus.ksmanage.edit_m6_log_setting:
+ server_id: 0
+ test: True
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class LogSetting(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setbmclogcfg'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ status=dict(type='str', required=False, choices=['enable', 'disable']),
+ host_tag=dict(type='str', required=False, choices=['HostName', 'SerialNum', 'AssertTag']),
+ level=dict(type='str', required=False, choices=['Critical', 'Warning', 'Info']),
+ protocol_type=dict(type='str', required=False, choices=['UDP', 'TCP']),
+ server_id=dict(type='int', required=False, choices=[0, 1, 2, 3]),
+ server_addr=dict(type='str', required=False),
+ server_port=dict(type='int', required=False),
+ log_type=dict(type='str', required=False, choices=['idl', 'audit', 'both']),
+ test=dict(type='bool', required=False, default=False),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ log_obj = LogSetting(argument_spec)
+ log_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_manual_capture.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_manual_capture.py
new file mode 100644
index 000000000..aca81c38a
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_manual_capture.py
@@ -0,0 +1,110 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_manual_capture
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set manual capture screen
+description:
+ - Set manual capture screen on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ type:
+ description:
+ - Manual type.
+ choices: ['capture', 'delete']
+ type: str
+ required: true
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Screen test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set manual capture screen"
+ kaytus.ksmanage.edit_manual_capture:
+ type: "capture"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Screen(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'screenmanual'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ type=dict(type='str', required=True, choices=['capture', 'delete']),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ screen_obj = Screen(argument_spec)
+ screen_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_media_instance.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_media_instance.py
new file mode 100644
index 000000000..0d92cfe9a
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_media_instance.py
@@ -0,0 +1,167 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_media_instance
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set Virtual Media Instance
+description:
+ - Set Virtual Media Instance on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ num_fd:
+ description:
+ - Select the number of floppy devices that support for Virtual Media redirection.
+ choices: [0, 1, 2, 3, 4]
+ type: int
+ num_cd:
+ description:
+ - Select the number of CD/DVD devices that support for Virtual Media redirection.
+ choices: [0, 1, 2, 3, 4]
+ type: int
+ num_hd:
+ description:
+ - Select the number of harddisk devices that support for Virtual Media redirection.
+ choices: [0, 1, 2, 3, 4]
+ type: int
+ kvm_num_fd:
+ description:
+ - Select the number of Remote KVM floppy devices that support for Virtual Media redirection.
+ choices: [0, 1, 2, 3, 4]
+ type: int
+ kvm_num_cd:
+ description:
+ - Select the number of Remote KVM CD/DVD devices that support for virtual Media redirection.
+ - The max support number of html5 KVM is 2 and java KVM is 4.
+ choices: [0, 1, 2, 3, 4]
+ type: int
+ kvm_num_hd:
+ description:
+ - Select the number of Remote KVM Hard disk devices to support for Virtual Media redirection.
+ choices: [0, 1, 2, 3, 4]
+ type: int
+ sd_media:
+ description:
+ - Check this option to enable SD Media support in BMC.
+ choices: ['Enable', 'Disable']
+ type: str
+ secure_channel:
+ description:
+ - Check this option to enable encrypt media recirection packets.
+ - Only the M5/M6 model supports this parameter.
+ choices: ['Enable', 'Disable']
+ type: str
+ power_save_mode:
+ description:
+ - Check this option to enable Power Save Mode in BMC.
+ choices: ['Enable', 'Disable']
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Media instance test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set media instance"
+ kaytus.ksmanage.edit_media_instance:
+ num_fd: 1
+ num_cd: 1
+ num_hd: 1
+ kvm_num_fd: 1
+ kvm_num_cd: 1
+ kvm_num_hd: 1
+ sd_media: "Enable"
+ secure_channel: "Enable"
+ power_save_mode: "Enable"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Instance(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setmediainstance'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ num_fd=dict(type='int', required=False, choices=[0, 1, 2, 3, 4]),
+ num_cd=dict(type='int', required=False, choices=[0, 1, 2, 3, 4]),
+ num_hd=dict(type='int', required=False, choices=[0, 1, 2, 3, 4]),
+ kvm_num_fd=dict(type='int', required=False, choices=[0, 1, 2, 3, 4]),
+ kvm_num_cd=dict(type='int', required=False, choices=[0, 1, 2, 3, 4]),
+ kvm_num_hd=dict(type='int', required=False, choices=[0, 1, 2, 3, 4]),
+ sd_media=dict(type='str', required=False, choices=['Enable', 'Disable']),
+ secure_channel=dict(type='str', required=False, choices=['Enable', 'Disable']),
+ power_save_mode=dict(type='str', required=False, choices=['Enable', 'Disable']),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ instance_obj = Instance(argument_spec)
+ instance_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_ncsi.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_ncsi.py
new file mode 100644
index 000000000..a78b6fea0
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_ncsi.py
@@ -0,0 +1,133 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_ncsi
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set ncsi information
+description:
+ - Set ncsi information on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ nic_type:
+ description:
+ - Nic type.
+ - Only NF3280A6 and NF3180A6 model supports C(Disable) Settings, but not support C(PHY) Settings.
+ - M6 model only support C(OCP), C(OCP1), C(PCIE) settings.
+ choices: ['PHY', 'OCP', 'OCP1', 'PCIE', 'auto', 'Disable']
+ type: str
+ mode:
+ description:
+ - NCSI mode, auto-Auto Failover, manual-Manual Switch.
+ - Only M6 model supports C(Disable) Settings.
+ choices: ['auto', 'manual', 'Disable']
+ type: str
+ interface_name:
+ description:
+ - Interface name, for example eth0.
+ - Only the M5 model supports this parameter.
+ type: str
+ channel_number:
+ description:
+ - Channel number.
+ choices: [0, 1, 2, 3]
+ type: int
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: NCSI test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set ncsi information"
+ kaytus.ksmanage.edit_ncsi:
+ mode: "manual"
+ nic_type: "PCIE"
+ interface_name: "eth0"
+ channel_number: 1
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class NCSI(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setncsi'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ nic_type=dict(type='str', required=False, choices=['PHY', 'OCP', 'OCP1', 'PCIE', 'auto', 'Disable']),
+ mode=dict(type='str', required=False, choices=['auto', 'manual', 'Disable']),
+ interface_name=dict(type='str', required=False),
+ channel_number=dict(type='int', required=False, choices=[0, 1, 2, 3]),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ ncsi_obj = NCSI(argument_spec)
+ ncsi_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_network.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_network.py
new file mode 100644
index 000000000..c67b8c943
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_network.py
@@ -0,0 +1,118 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_network
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set network information
+description:
+ - Set network information on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ interface_name:
+ description:
+ - Set interface name. Select the LAN interface to be configured.
+ choices: ['eth0', 'eth1', 'bond0']
+ required: true
+ type: str
+ lan_enable:
+ description:
+ - Enable or disable this interface. If disable, you cannot use this interface any more.
+ choices: ['enable', 'disable']
+ required: true
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Network test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set network information"
+ kaytus.ksmanage.edit_network:
+ interface_name: "eth0"
+ lan_enable: "enable"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Network(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setnetwork'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ interface_name=dict(type='str', required=True, choices=['eth0', 'eth1', 'bond0']),
+ lan_enable=dict(type='str', required=True, choices=['enable', 'disable']),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ net_obj = Network(argument_spec)
+ net_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_network_bond.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_network_bond.py
new file mode 100644
index 000000000..418fc66e3
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_network_bond.py
@@ -0,0 +1,123 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_network_bond
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set network bond
+description:
+ - Set network bond on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ bond:
+ description:
+ - Network bond status, If VLAN is enabled for slave interfaces, then Bonding cannot be enabled.
+ choices: ['enable', 'disable']
+ type: str
+ interface:
+ description:
+ - Interface name.
+ choices: ['shared', 'dedicated', 'both']
+ type: str
+ auto_config:
+ description:
+ - Enable this option to configure the interfaces in service configuration automatically.
+ choices: ['enable', 'disable']
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Bond test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set network bond"
+ kaytus.ksmanage.edit_network_bond:
+ bond: "enable"
+ interface: "dedicated"
+ auto_config: "enable"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Bond(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setnetworkbond'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ bond=dict(type='str', required=False, choices=['enable', 'disable']),
+ interface=dict(type='str', required=False, choices=['shared', 'dedicated', 'both']),
+ auto_config=dict(type='str', required=False, choices=['enable', 'disable']),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ bond_obj = Bond(argument_spec)
+ bond_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_network_link.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_network_link.py
new file mode 100644
index 000000000..094cefa6c
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_network_link.py
@@ -0,0 +1,140 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_network_link
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set network link
+description:
+ - Set network link on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ interface:
+ description:
+ - Interface name.
+ choices: ['shared', 'dedicated', 'both']
+ type: str
+ required: true
+ auto_nego:
+ description:
+ - This option allows the device to perform auto-configuration.
+ - To achieve the best mode of operation (speed and duplex) on the link.
+ choices: ['enable', 'disable']
+ type: str
+ link_speed:
+ description:
+ - Link speed will list all the supported capabilities of the network interface. It can be 10/100 Mbps.
+ - Required when I(auto_nego=disable).
+ choices: [10, 100]
+ type: int
+ duplex_mode:
+ description:
+ - Select any one of the following Duplex Mode.
+ - Required when I(auto_nego=disable).
+ choices: ['HALF', 'FULL']
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Link test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set network link"
+ kaytus.ksmanage.edit_network_link:
+ interface: "dedicated"
+ auto_nego: "enable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set network link"
+ kaytus.ksmanage.edit_network_link:
+ interface: "dedicated"
+ auto_nego: "disable"
+ link_speed: 100
+ duplex_mode: "FULL"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Link(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setnetworklink'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ interface=dict(type='str', required=True, choices=['shared', 'dedicated', 'both']),
+ auto_nego=dict(type='str', required=False, choices=['enable', 'disable']),
+ link_speed=dict(type='int', required=False, choices=[10, 100]),
+ duplex_mode=dict(type='str', required=False, choices=['HALF', 'FULL']),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ link_obj = Link(argument_spec)
+ link_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_ntp.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_ntp.py
new file mode 100644
index 000000000..5ca241f0d
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_ntp.py
@@ -0,0 +1,173 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_ntp
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set NTP
+description:
+ - Set NTP on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ auto_date:
+ description:
+ - Date auto synchronize.
+ choices: ['enable', 'disable']
+ type: str
+ ntp_time:
+ description:
+ - NTP time(YYYYmmddHHMMSS).
+ - Only the M5 model supports this parameter.
+ type: str
+ time_zone:
+ description:
+ - UTC time zone, chose from {-12, -11.5, -11, ... , 11, 11.5, 12}.
+ type: str
+ server1:
+ description:
+ - NTP Server1(ipv4 or ipv6 or domain name), set when auto_date is enable.
+ type: str
+ server2:
+ description:
+ - NTP Server2(ipv4 or ipv6 or domain name), set when auto_date is enable.
+ type: str
+ server3:
+ description:
+ - NTP Server3(ipv4 or ipv6 or domain name), set when auto_date is enable.
+ type: str
+ server4:
+ description:
+ - NTP Server4(ipv4 or ipv6 or domain name), set when auto_date is enable.
+ type: str
+ server5:
+ description:
+ - NTP Server5(ipv4 or ipv6 or domain name), set when auto_date is enable.
+ type: str
+ server6:
+ description:
+ - NTP Server6(ipv4 or ipv6 or domain name), set when auto_date is enable.
+ type: str
+ syn_cycle:
+ description:
+ - NTP syn cycle(minute), sync cycle(5-1440).
+ type: int
+ max_variety:
+ description:
+ - NTP Maximum jump time(minute), max variety(1-60).
+ - Only the M6 model supports this parameter.
+ type: int
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: NTP test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set ntp"
+ kaytus.ksmanage.edit_ntp:
+ auto_date: "enable"
+ server2: "time.nist.gov"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set ntp"
+ kaytus.ksmanage.edit_ntp:
+ auto_date: "disable"
+ ntp_time: "20200609083600"
+ provider: "{{ ksmanage }}"
+
+ - name: "set ntp"
+ kaytus.ksmanage.edit_ntp:
+ time_zone: "8"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class NTP(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'settime'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ auto_date=dict(type='str', required=False, choices=['enable', 'disable']),
+ ntp_time=dict(type='str', required=False),
+ time_zone=dict(type='str', required=False),
+ server1=dict(type='str', required=False),
+ server2=dict(type='str', required=False),
+ server3=dict(type='str', required=False),
+ server4=dict(type='str', required=False),
+ server5=dict(type='str', required=False),
+ server6=dict(type='str', required=False),
+ syn_cycle=dict(type='int', required=False),
+ max_variety=dict(type='int', required=False),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ ntp_obj = NTP(argument_spec)
+ ntp_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_pdisk.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_pdisk.py
new file mode 100644
index 000000000..f9b347796
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_pdisk.py
@@ -0,0 +1,178 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_pdisk
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set physical disk
+description:
+ - Set physical disk on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ ctrl_id:
+ description:
+ - Raid controller ID.
+ type: int
+ device_id:
+ description:
+ - Physical drive id.
+ type: int
+ option:
+ description:
+ - Set operation options for a physical disk.
+ - UG is Unconfigured Good, UB is Unconfigured Bad.
+ - OFF is offline, FAIL is Failed, RBD is Rebuild.
+ - ON is Online, JB is JBOD, ES is Drive Erase stop.
+ - EM is Drive Erase Simple, EN is Drive Erase Normal.
+ - ET is Drive Erase Through, LOC is Locate, STL is Stop Locate.
+ - HS is Hot spare.
+ - Only the M5 model supports C(HS) Settings.
+ choices: ['UG', 'UB', 'OFF', 'FAIL', 'RBD', 'ON', 'JB', 'ES', 'EM', 'EN', 'ET', 'LOC', 'STL', 'HS']
+ type: str
+ action:
+ description:
+ - Action while set physical drive hotspare.
+ - Required when I(option=HS).
+ - Only the M5 model supports this parameter.
+ choices: ['remove', 'global', 'dedicate']
+ type: str
+ revertible:
+ description:
+ - IsRevertible while set physical drive hotspare.
+ - Required when I(option=HS) and I(action=dedicate).
+ - Only the M5 model supports this parameter.
+ choices: ['yes', 'no']
+ type: str
+ encl:
+ description:
+ - IsEnclAffinity while set physical drive hotspare.
+ - Required when I(option=HS) and I(action=dedicate).
+ - Only the M5 model supports this parameter.
+ choices: ['yes', 'no']
+ type: str
+ logical_drivers:
+ description:
+ - Logical Drivers while set physical drive hotspare, input multiple Logical Drivers index like 0, 1, 2.....
+ - Required when I(option=HS) and I(action=dedicate).
+ - Only the M5 model supports this parameter.
+ type: list
+ elements: int
+ duration:
+ description:
+ - Duration range is 1-255, physical drive under PMC raid controller.
+ - Required when I(option=LOC).
+ - Only the M6 model supports this parameter.
+ type: int
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Edit pdisk test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Edit pdisk"
+ kaytus.ksmanage.edit_pdisk:
+ ctrl_id: 0
+ device_id: 1
+ option: "LOC"
+ provider: "{{ ksmanage }}"
+
+ - name: "M5 Edit pdisk"
+ kaytus.ksmanage.edit_pdisk:
+ ctrl_id: 0
+ device_id: 1
+ option: "HS"
+ action: "dedicate"
+ revertible: "yes"
+ encl: "yes"
+ logical_drivers: 1
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Disk(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setpdisk'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ ctrl_id=dict(type='int', required=False),
+ device_id=dict(type='int', required=False),
+ option=dict(type='str', required=False, choices=['UG', 'UB', 'OFF', 'FAIL', 'RBD', 'ON', 'JB', 'ES', 'EM', 'EN', 'ET', 'LOC', 'STL', 'HS']),
+ action=dict(type='str', required=False, choices=['remove', 'global', 'dedicate']),
+ revertible=dict(type='str', required=False, choices=['yes', 'no']),
+ encl=dict(type='str', required=False, choices=['yes', 'no']),
+ logical_drivers=dict(type='list', elements='int', required=False),
+ duration=dict(type='int', required=False),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ disk_obj = Disk(argument_spec)
+ disk_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_power_budget.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_power_budget.py
new file mode 100644
index 000000000..db75410dc
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_power_budget.py
@@ -0,0 +1,260 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_power_budget
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set power budget information
+description:
+ - Set power budget information on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ range:
+ description:
+ - Range of power budget watts.
+ choices: ['True', 'False']
+ default: False
+ type: bool
+ domain:
+ description:
+ - Domain id.
+ - Required when I(range=False).
+ choices: ['system', 'cpu']
+ type: str
+ action:
+ description:
+ - Type to action.
+ - Required when I(range=False).
+ choices: ['add', 'delete', 'open', 'close']
+ type: str
+ id:
+ description:
+ - Policy id.
+ - Required when I(range=False).
+ choices: [1, 2, 3, 4]
+ type: int
+ watts:
+ description:
+ - Power budget watts of add.
+ - Required when I(action=add).
+ type: int
+ except_action:
+ description:
+ - Except action, 0 is do nothing, 1 is send alert, 2 is shutdown system, 3 is shutdown system and send alert.
+ - Only the M7 model supports this parameter.
+ choices: [0, 1, 2, 3]
+ type: int
+ start1:
+ description:
+ - Pause period of add, start time, from 0 to 24.
+ type: int
+ end1:
+ description:
+ - Pause period of add, end time, must be greater than start time, from 0 to 24.
+ type: int
+ week1:
+ description:
+ - Pause period of add, repetition period.
+ - The input parameters are 'Mon', 'Tue', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun', separated by commas, such as Mon, Wed, Fri.
+ type: list
+ elements: str
+ start2:
+ description:
+ - Pause period of add, start time, from 0 to 24.
+ type: int
+ end2:
+ description:
+ - Pause period of add, end time, must be greater than start time, from 0 to 24.
+ type: int
+ week2:
+ description:
+ - Pause period of add, repetition period.
+ - The input parameters are 'Mon', 'Tue', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun', separated by commas, such as Mon, Wed, Fri.
+ type: list
+ elements: str
+ start3:
+ description:
+ - Pause period of add, start time, from 0 to 24.
+ type: int
+ end3:
+ description:
+ - Pause period of add, end time, must be greater than start time, from 0 to 24.
+ type: int
+ week3:
+ description:
+ - Pause period of add, repetition period.
+ - The input parameters are 'Mon', 'Tue', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun', separated by commas, such as Mon, Wed, Fri.
+ type: list
+ elements: str
+ start4:
+ description:
+ - Pause period of add, start time, from 0 to 24.
+ type: int
+ end4:
+ description:
+ - Pause period of add, end time, must be greater than start time, from 0 to 24.
+ type: int
+ week4:
+ description:
+ - Pause period of add, repetition period.
+ - The input parameters are 'Mon', 'Tue', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun', separated by commas, such as Mon, Wed, Fri.
+ type: list
+ elements: str
+ start5:
+ description:
+ - Period of add, start time, from 0 to 24.
+ type: int
+ end5:
+ description:
+ - Pause period of add, end time, must be greater than start time, from 0 to 24.
+ type: int
+ week5:
+ description:
+ - Pause period of add, repetition period.
+ - The input parameters are 'Mon', 'Tue', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun', separated by commas, such as Mon, Wed, Fri.
+ type: list
+ elements: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Power budget test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get power budget range"
+ kaytus.ksmanage.edit_power_budget:
+ range: True
+ provider: "{{ ksmanage }}"
+
+ - name: "add power budget"
+ kaytus.ksmanage.edit_power_budget:
+ action: "add"
+ id: 1
+ watts: 1500
+ start1: 2
+ end1: 5
+ week1:
+ - Mon
+ - Wed
+ - Fri
+ provider: "{{ ksmanage }}"
+
+ - name: "Set power budget status to open"
+ kaytus.ksmanage.edit_power_budget:
+ action: "open"
+ id: 1
+ provider: "{{ ksmanage }}"
+
+ - name: "Set power budget status to close"
+ kaytus.ksmanage.edit_power_budget:
+ action: "close"
+ id: 1
+ provider: "{{ ksmanage }}"
+
+ - name: "Delete power budget"
+ kaytus.ksmanage.edit_power_budget:
+ action: "delete"
+ id: 1
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Power(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setpowerbudget'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ range=dict(type='bool', default=False, choices=[True, False]),
+ domain=dict(type='str', required=False, choices=['system', 'cpu']),
+ action=dict(type='str', required=False, choices=['add', 'delete', 'open', 'close']),
+ id=dict(type='int', required=False, choices=[1, 2, 3, 4]),
+ watts=dict(type='int', required=False),
+ except_action=dict(type='int', required=False, choices=[0, 1, 2, 3]),
+ start1=dict(type='int', required=False),
+ end1=dict(type='int', required=False),
+ week1=dict(type='list', elements='str', required=False),
+ start2=dict(type='int', required=False),
+ end2=dict(type='int', required=False),
+ week2=dict(type='list', elements='str', required=False),
+ start3=dict(type='int', required=False),
+ end3=dict(type='int', required=False),
+ week3=dict(type='list', elements='str', required=False),
+ start4=dict(type='int', required=False),
+ end4=dict(type='int', required=False),
+ week4=dict(type='list', elements='str', required=False),
+ start5=dict(type='int', required=False),
+ end5=dict(type='int', required=False),
+ week5=dict(type='list', elements='str', required=False),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ power_obj = Power(argument_spec)
+ power_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_power_restore.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_power_restore.py
new file mode 100644
index 000000000..ec0fccc11
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_power_restore.py
@@ -0,0 +1,110 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_power_restore
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set power restore information
+description:
+ - Set power restore information on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ option:
+ description:
+ - Set power policy option.
+ choices: ['on', 'off', 'restore']
+ type: str
+ required: true
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Power restore test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set power restore information"
+ kaytus.ksmanage.edit_power_restore:
+ option: "on"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Power(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setpowerrestore'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ option=dict(type='str', required=True, choices=['on', 'off', 'restore']),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ power_obj = Power(argument_spec)
+ power_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_power_status.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_power_status.py
new file mode 100644
index 000000000..8c9350f2e
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_power_status.py
@@ -0,0 +1,110 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_power_status
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set power status information
+description:
+ - Set power status information on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ state:
+ description:
+ - Power status.
+ choices: ['On', 'ForceOff', 'ForcePowerCycle', 'ForceReset', 'GracefulShutdown']
+ type: str
+ required: true
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Power status test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set power status information"
+ kaytus.ksmanage.edit_power_status:
+ state: "On"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Power(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'powercontrol'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ state=dict(type='str', required=True, choices=['On', 'ForceOff', 'ForcePowerCycle', 'ForceReset', 'GracefulShutdown']),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ power_obj = Power(argument_spec)
+ power_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_preserve_config.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_preserve_config.py
new file mode 100644
index 000000000..ef34c5829
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_preserve_config.py
@@ -0,0 +1,136 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_preserve_config
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set preserve config
+description:
+ - Set preserve config on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ setting:
+ description:
+ - Preserve option, all - preserve all config; none - overwrite all config; manual - manual choose.
+ choices: ['all', 'none', 'manual']
+ type: str
+ required: true
+ override:
+ description:
+ - Configuration items that need to be retained.
+ - Required when I(setting=manual).
+ choices: ['authentication', 'dcmi', 'fru', 'hostname', 'ipmi', 'kvm', 'network', 'ntp', 'pef',
+ 'sdr', 'sel', 'smtp', 'snmp', 'sol', 'ssh', 'syslog', 'user']
+ type: list
+ elements: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Preserve test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set preserve all"
+ kaytus.ksmanage.edit_preserve_config:
+ setting: "all"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set preserve none"
+ edit_preserve_config:
+ setting: "none"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set preserve manual"
+ edit_preserve_config:
+ setting: "manual"
+ override:
+ - fru
+ - ntp
+ - network
+ - user
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Preserve(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'preserveconfig'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ setting=dict(type='str', required=True, choices=['all', 'none', 'manual']),
+ override=dict(type='list', elements='str', required=False,
+ choices=['authentication', 'dcmi', 'fru', 'hostname', 'ipmi', 'kvm', 'network', 'ntp',
+ 'pef', 'sdr', 'sel', 'smtp', 'snmp', 'sol', 'ssh', 'syslog', 'user']),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ pre_obj = Preserve(argument_spec)
+ pre_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_psu_config.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_psu_config.py
new file mode 100644
index 000000000..eb11809ef
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_psu_config.py
@@ -0,0 +1,116 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_psu_config
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set psu config information
+description:
+ - Set psu config information on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ id:
+ description:
+ - Power id.
+ type: int
+ required: true
+ switch:
+ description:
+ - Power supply mode, active or standby.
+ choices: ['active', 'standby', 'normal']
+ type: str
+ required: true
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Psu config test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set psu config information"
+ kaytus.ksmanage.edit_psu_config:
+ id: 1
+ switch: "active"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Psu(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setpsuconfig'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ id=dict(type='int', required=True),
+ switch=dict(type='str', required=True, choices=['active', 'standby', 'normal']),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ psu_obj = Psu(argument_spec)
+ psu_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_psu_peak.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_psu_peak.py
new file mode 100644
index 000000000..3af211ea6
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_psu_peak.py
@@ -0,0 +1,121 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_psu_peak
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set psu peak information
+description:
+ - Set psu peak information on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ status:
+ description:
+ - Power peak status.
+ choices: ['enable', 'disable']
+ type: str
+ required: true
+ time:
+ description:
+ - Maximum random time, range of values(1-600), unit(second).
+ type: int
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Psu peak test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set psu peak information"
+ kaytus.ksmanage.edit_psu_peak:
+ status: "disable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set psu peak information"
+ kaytus.ksmanage.edit_psu_peak:
+ status: "enable"
+ time: 10
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Psu(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setpsupeak'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ status=dict(type='str', required=True, choices=['enable', 'disable']),
+ time=dict(type='int', required=False),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ psu_obj = Psu(argument_spec)
+ psu_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_restore_factory_default.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_restore_factory_default.py
new file mode 100644
index 000000000..6a8b2a34e
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_restore_factory_default.py
@@ -0,0 +1,131 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_restore_factory_default
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set preserver config
+description:
+ - Set preserver config on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ mode:
+ description:
+ - Restore factory defaults mode.
+ choices: ['all', 'none', 'manual']
+ type: str
+ required: true
+ override:
+ description:
+ - Configuration items that need to be retained.
+ - Required when I(mode=manual).
+ choices: ['authentication', 'dcmi', 'fru', 'hostname', 'ipmi', 'kvm', 'network', 'ntp', 'pef',
+ 'sdr', 'sel', 'smtp', 'snmp', 'sol', 'ssh', 'syslog', 'user']
+ type: list
+ elements: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Restore default test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set restore default auto"
+ kaytus.ksmanage.edit_restore_factory_default:
+ mode: "all"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set restore default manual"
+ kaytus.ksmanage.edit_restore_factory_default:
+ mode: "manual"
+ override:
+ - fru
+ - ntp
+ - network
+ - user
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Preserver(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'restorefactorydefaults'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ mode=dict(type='str', required=True, choices=['all', 'none', 'manual']),
+ override=dict(type='list', elements='str', required=False,
+ choices=['authentication', 'dcmi', 'fru', 'hostname', 'ipmi', 'kvm', 'network', 'ntp',
+ 'pef', 'sdr', 'sel', 'smtp', 'snmp', 'sol', 'ssh', 'syslog', 'user']),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ pre_obj = Preserver(argument_spec)
+ pre_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_service.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_service.py
new file mode 100644
index 000000000..213fac42d
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_service.py
@@ -0,0 +1,150 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_service
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set service settings
+description:
+ - Set service settings on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ service_name:
+ description:
+ - Displays service name of the selected slot(readonly).
+ - The I(vnc) option is not supported in M5.
+ - The I(fd-media/telnet/snmp) option is not supported in M6.
+ choices: ['web', 'kvm', 'cd-media', 'fd-media', 'hd-media', 'ssh', 'telnet', 'solssh', 'snmp', 'vnc']
+ type: str
+ required: true
+ state:
+ description:
+ - Displays the current status of the service, either active or inactive state.
+ - Check this option to start the inactive service.
+ choices: ['active', 'inactive']
+ type: str
+ interface:
+ description:
+ - It shows the interface in which service is running.
+ - The user can choose any one of the available interfaces.
+ - Only the M5 model supports this parameter.
+ choices: ['eth0', 'eth1', 'both', 'bond0']
+ type: str
+ non_secure_port:
+ description:
+ - Used to configure non secure port number for the service.
+ - Port value ranges from 1 to 65535.
+ type: int
+ secure_port:
+ description:
+ - Used to configure secure port number for the service.
+ - Port value ranges from 1 to 65535.
+ type: int
+ timeout:
+ description:
+ - Displays the session timeout value of the service.
+ - For web, SSH and telnet service, user can configure the session timeout value.
+ - Web timeout value ranges from 300 to 1800 seconds.
+ - SSH and Telnet timeout value ranges from 60 to 1800 seconds.
+ - Timeout value should be in multiples of 60 seconds.
+ type: int
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Edit service test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Edit kvm"
+ kaytus.ksmanage.edit_service:
+ service_name: "kvm"
+ state: "active"
+ timeout: "1200"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Service(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setservice'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ service_name=dict(type='str', required=True, choices=['web', 'kvm', 'cd-media', 'fd-media', 'hd-media', 'ssh', 'telnet', 'solssh', 'snmp', 'vnc']),
+ state=dict(type='str', required=False, choices=['active', 'inactive']),
+ interface=dict(type='str', required=False, choices=['eth0', 'eth1', 'both', 'bond0']),
+ non_secure_port=dict(type='int', required=False),
+ secure_port=dict(type='int', required=False),
+ timeout=dict(type='int', required=False)
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ service_obj = Service(argument_spec)
+ service_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_smtp.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_smtp.py
new file mode 100644
index 000000000..dc2035364
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_smtp.py
@@ -0,0 +1,213 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_smtp
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set SMTP information
+description:
+ - Set SMTP information on kaytus Server.
+ - Only the M5 models support this feature.
+notes:
+ - Does not support C(check_mode).
+options:
+ interface:
+ description:
+ - LAN Channel, eth0 is shared, eth1 is dedicated.
+ choices: ['eth0', 'eth1', 'bond0']
+ type: str
+ required: true
+ email:
+ description:
+ - Sender email.
+ type: str
+ primary_status:
+ description:
+ - Primary SMTP Support.
+ choices: ['enable', 'disable']
+ type: str
+ primary_ip:
+ description:
+ - Primary SMTP server IP.
+ type: str
+ primary_name:
+ description:
+ - Primary SMTP server name.
+ type: str
+ primary_port:
+ description:
+ - Primary SMTP server port, The Identification for retry count configuration(1-65535).
+ type: int
+ primary_auth:
+ description:
+ - Primary SMTP server authentication.
+ choices: ['enable', 'disable']
+ type: str
+ primary_username:
+ description:
+ - Primary SMTP server Username, length be 4 to 64 bits.
+ - Must start with letters and cannot contain ', '(comma) ':'(colon) ' '(space) ';'(semicolon) '\\'(backslash).
+ type: str
+ primary_password:
+ description:
+ - Primary SMTP server Password, length be 4 to 64 bits, cannot contain ' '(space).
+ - Required when I(primary_auth=enable).
+ type: str
+ secondary_status:
+ description:
+ - Secondary SMTP Support.
+ choices: ['enable', 'disable']
+ type: str
+ secondary_ip:
+ description:
+ - Secondary SMTP server IP.
+ type: str
+ secondary_name:
+ description:
+ - Secondary SMTP server name.
+ type: str
+ secondary_port:
+ description:
+ - Secondary SMTP server port, The Identification for retry count configuration(1-65535).
+ type: int
+ secondary_auth:
+ description:
+ - Secondary SMTP server authentication.
+ choices: ['enable', 'disable']
+ type: str
+ secondary_username:
+ description:
+ - Secondary SMTP server Username, length be 4 to 64 bits.
+ - Must start with letters and cannot contain ','(comma) ':'(colon) ' '(space) ';'(semicolon) '\\'(backslash).
+ type: str
+ secondary_password:
+ description:
+ - Secondary SMTP server Password, length be 4 to 64 bits, cannot contain ' '(space).
+ - Required when I(secondary_auth=enable).
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Smtp test
+ hosts: ksmanage
+ no_log: true
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set smtp information"
+ kaytus.ksmanage.edit_smtp:
+ interface: "eth0"
+ email: "ieit@ieisystem.com"
+ primary_status: "enable"
+ primary_ip: "100.2.2.2"
+ primary_name: "test"
+ primary_auth: "disable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set smtp information"
+ kaytus.ksmanage.edit_smtp:
+ interface: "eth0"
+ email: "ieit@ieisystem.com"
+ primary_status: "enable"
+ primary_ip: "100.2.2.2"
+ primary_name: "test"
+ primary_auth: "enable"
+ primary_username: "test"
+ primary_password: my_password
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class SMTP(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setsmtp'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ interface=dict(type='str', required=True, choices=['eth0', 'eth1', 'bond0']),
+ email=dict(type='str', required=False),
+ primary_status=dict(type='str', required=False, choices=['enable', 'disable']),
+ primary_ip=dict(type='str', required=False),
+ primary_name=dict(type='str', required=False),
+ primary_port=dict(type='int', required=False),
+ primary_auth=dict(type='str', required=False, choices=['enable', 'disable']),
+ primary_username=dict(type='str', required=False),
+ primary_password=dict(type='str', required=False, no_log=True),
+ secondary_status=dict(type='str', required=False, choices=['enable', 'disable']),
+ secondary_ip=dict(type='str', required=False),
+ secondary_name=dict(type='str', required=False),
+ secondary_port=dict(type='int', required=False),
+ secondary_auth=dict(type='str', required=False, choices=['enable', 'disable']),
+ secondary_username=dict(type='str', required=False),
+ secondary_password=dict(type='str', required=False, no_log=True),
+
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ smtp_obj = SMTP(argument_spec)
+ smtp_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_smtp_com.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_smtp_com.py
new file mode 100644
index 000000000..c66dd6e53
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_smtp_com.py
@@ -0,0 +1,204 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_smtp_com
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set SMTP information
+description:
+ - Set SMTP com information on kaytus Server.
+ - Only the M6 models support this feature.
+notes:
+ - Does not support C(check_mode).
+options:
+ status:
+ description:
+ - SMTP Support.
+ choices: ['enable', 'disable']
+ required: true
+ type: str
+ server_ip:
+ description:
+ - SMTP server IP.
+ type: str
+ server_port:
+ description:
+ - SMTP server port, The Identification for retry count configuration(1-65535).
+ type: int
+ server_secure_port:
+ description:
+ - SMTP server secure port, The Identification for retry count configuration(1-65535).
+ type: int
+ email:
+ description:
+ - Sender email.
+ type: str
+ server_auth:
+ description:
+ - SMTP server authentication.
+ choices: ['enable', 'disable']
+ type: str
+ server_username:
+ description:
+ - SMTP server Username, length be 4 to 64 bits.
+ - Must start with letters and cannot contain ','(comma) ':'(colon) ' '(space) ';'(semicolon) '\\'(backslash).
+ - Required when I(server_auth=enable).
+ type: str
+ server_password:
+ description:
+ - SMTP server Password, length be 4 to 64 bits, cannot contain ' '(space).
+ - Required when I(server_auth=enable).
+ type: str
+ ssl_tls_enable:
+ description:
+ - SMTP SSLTLS Enable.
+ - I(ssl_tls_enable=disable), when I(star_tls_enable=enable).
+ choices: ['enable', 'disable']
+ type: str
+ star_tls_enable:
+ description:
+ - SMTP STARTTLS Enable.
+ - I(star_tls_enable=disable), when I(ssl_tls_enable=enable).
+ choices: ['enable', 'disable']
+ type: str
+ subject:
+ description:
+ - Email theme.
+ type: str
+ host_name:
+ description:
+ - Server name.
+ choices: ['enable', 'disable']
+ type: str
+ serial_number:
+ description:
+ - Serial number.
+ choices: ['enable', 'disable']
+ type: str
+ asset_tag:
+ description:
+ - Product asset label.
+ choices: ['enable', 'disable']
+ type: str
+ event_level:
+ description:
+ - Events above this level will be sent.
+ choices: ['Info', 'Warning', 'Critical']
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Smtp com test
+ hosts: ksmanage
+ no_log: true
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set smtp com information"
+ kaytus.ksmanage.edit_smtp_com:
+ status: "disable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set smtp com information"
+ kaytus.ksmanage.edit_smtp_com:
+ status: "enable"
+ server_ip: "100.2.2.2"
+ email: "ks@kaytus.com"
+ server_auth: "enable"
+ server_username: "admin"
+ server_password: "1234qwer!@#$"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class SMTP(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setsmtpcom'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ status=dict(type='str', required=True, choices=['enable', 'disable']),
+ server_ip=dict(type='str', required=False),
+ server_port=dict(type='int', required=False),
+ server_secure_port=dict(type='int', required=False),
+ email=dict(type='str', required=False),
+ server_auth=dict(type='str', required=False, choices=['enable', 'disable']),
+ server_username=dict(type='str', required=False),
+ server_password=dict(type='str', required=False, no_log=True),
+ ssl_tls_enable=dict(type='str', required=False, choices=['enable', 'disable']),
+ star_tls_enable=dict(type='str', required=False, choices=['enable', 'disable']),
+ subject=dict(type='str', required=False),
+ host_name=dict(type='str', required=False, choices=['enable', 'disable']),
+ serial_number=dict(type='str', required=False, choices=['enable', 'disable']),
+ asset_tag=dict(type='str', required=False, choices=['enable', 'disable']),
+ event_level=dict(type='str', required=False, choices=['Info', 'Warning', 'Critical']),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ smtp_obj = SMTP(argument_spec)
+ smtp_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_smtp_dest.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_smtp_dest.py
new file mode 100644
index 000000000..7216d2e0c
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_smtp_dest.py
@@ -0,0 +1,136 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_smtp_dest
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set SMTP information
+description:
+ - Set SMTP dest information on kaytus Server.
+ - Only the M6 models support this feature.
+notes:
+ - Does not support C(check_mode).
+options:
+ id:
+ description:
+ - Email destination id.
+ choices: [1, 2, 3, 4]
+ type: int
+ required: true
+ status:
+ description:
+ - Email enable.
+ choices: ['enable', 'disable']
+ type: str
+ address:
+ description:
+ - Email address.
+ type: str
+ description:
+ description:
+ - Description information.
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Smtp dest test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set smtp dest information"
+ kaytus.ksmanage.edit_smtp_dest:
+ id: 1
+ status: "disable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set smtp dest information"
+ kaytus.ksmanage.edit_smtp_dest:
+ id: 1
+ status: "enable"
+ address: "100.2.2.2"
+ description": "test"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class SMTP(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setsmtpdest'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ id=dict(type='int', required=True, choices=[1, 2, 3, 4]),
+ status=dict(type='str', required=False, choices=['enable', 'disable']),
+ address=dict(type='str', required=False),
+ description=dict(type='str', required=False),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ smtp_obj = SMTP(argument_spec)
+ smtp_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_snmp.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_snmp.py
new file mode 100644
index 000000000..60512e324
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_snmp.py
@@ -0,0 +1,188 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_snmp
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set snmp
+description:
+ - Set snmp on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ version:
+ description:
+ - SNMP trap version option, 0 - 'v1', 1 - 'v2c', 2 - 'v3', 3 - 'all', 4 - 'customize'.
+ - Only the M5 models support this feature.
+ choices: [0, 1, 2, 3, 4]
+ type: int
+ snmp_status:
+ description:
+ - NMP read/write status of customize.
+ - The input parameters are 'v1get', 'v1set', 'v2cget', 'v2cset', 'v3get', 'v3set', separated by commas, such as v1get, v1set, v2cget.
+ - Only the M5 models support this feature.
+ type: list
+ elements: str
+ community:
+ description:
+ - Community of v1/v2c or v1get/v1set/v2cget/v2cset.
+ - Only the M5 models support this feature.
+ type: str
+ v1status:
+ description:
+ - SNMP V1 enable.
+ choices: ['enable', 'disable']
+ type: str
+ v2status:
+ description:
+ - SNMP V2 enable.
+ choices: ['enable', 'disable']
+ type: str
+ v3status:
+ description:
+ - SNMP V3 enable.
+ choices: ['enable', 'disable']
+ type: str
+ read_community:
+ description:
+ - Read Only Community, Community should between 1 and 16 characters.
+ - Only the M6 models support this feature.
+ type: str
+ read_write_community:
+ description:
+ - Read And Write Community, Community should between 1 and 16 characters.
+ - Only the M6 models support this feature.
+ type: str
+ v3username:
+ description:
+ - Set a username for the V3 trap or v3get/v3set.
+ type: str
+ auth_protocol:
+ description:
+ - Choose the authentication protocol for the V3 trap or v3get/v3set.
+ choices: ['NONE', 'SHA', 'MD5']
+ type: str
+ auth_password:
+ description:
+ - Set the authentication password for the V3 trap or v3get/v3set.
+ - The password is a string of 8 to 16 alphanumeric characters.
+ - Required when I(auth_protocol) is either C(SHA) or C(MD5).
+ type: str
+ priv_protocol:
+ description:
+ - Choose the privacy protocol for the V3 trap or v3get/v3set.
+ choices: ['NONE', 'DES', 'AES']
+ type: str
+ priv_password:
+ description:
+ - Set the privacy password for the V3 trap or v3get/v3set.
+ - The password is a string of 8 to 16 alphanumeric characters.
+ - Required when I(priv_protocol) is either C(DES) or C(AES).
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Snmp test
+ hosts: ksmanage
+ no_log: true
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set snmp get/set"
+ kaytus.ksmanage.edit_snmp:
+ community: "test"
+ v3username: "test"
+ provider: "{{ ksmanage }}"
+
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class SNMP(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setsnmp'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ version=dict(type='int', required=False, choices=[0, 1, 2, 3, 4]),
+ snmp_status=dict(type='list', elements='str', required=False),
+ community=dict(type='str', required=False),
+ v1status=dict(type='str', required=False, choices=['enable', 'disable']),
+ v2status=dict(type='str', required=False, choices=['enable', 'disable']),
+ v3status=dict(type='str', required=False, choices=['enable', 'disable']),
+ read_community=dict(type='str', required=False),
+ read_write_community=dict(type='str', required=False),
+ v3username=dict(type='str', required=False),
+ auth_protocol=dict(type='str', required=False, choices=['NONE', 'SHA', 'MD5']),
+ auth_password=dict(type='str', required=False, no_log=True),
+ priv_protocol=dict(type='str', required=False, choices=['NONE', 'DES', 'AES']),
+ priv_password=dict(type='str', required=False, no_log=True),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ snmp_obj = SNMP(argument_spec)
+ snmp_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_snmp_trap.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_snmp_trap.py
new file mode 100644
index 000000000..f9226c87a
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_snmp_trap.py
@@ -0,0 +1,217 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_snmp_trap
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set snmp trap
+description:
+ - Set snmp trap on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ version:
+ description:
+ - SNMP trap version, 1 is v1, 2 is v2c(v2), 3 is v3, 0 is disable snmp trap.
+ - Only the M6 model supports C(0) Settings.
+ choices: [0, 1, 2, 3]
+ type: int
+ event_severity:
+ description:
+ - Event Severity.
+ choices: ['all', 'warning', 'critical']
+ type: str
+ community:
+ description:
+ - Community of v1/v2c.
+ type: str
+ host_id:
+ description:
+ - Host id.
+ - Only the M6 model supports this parameter.
+ choices: ['HostName', 'SerialNum', 'AssertTag']
+ type: str
+ v3username:
+ description:
+ - Set the username for the V3 trap.
+ type: str
+ engine_id:
+ description:
+ - Specifies an engine identifier for the V3 trap. The value should be string of 10 to 48 hex characters, must be even, can be NULL.
+ type: str
+ auth_protocol:
+ description:
+ - Choose the authentication protocol for the V3 trap.
+ choices: ['NONE', 'SHA', 'MD5']
+ type: str
+ auth_password:
+ description:
+ - Set the authentication password for the V3 trap.
+ - The password is a string of 8 to 16 alphanumeric characters.
+ - Required when I(auth_protocol) is either C(SHA) or C(MD5).
+ type: str
+ priv_protocol:
+ description:
+ - Choose the privacy protocol for the V3 trap.
+ choices: ['NONE', 'DES', 'AES']
+ type: str
+ priv_password:
+ description:
+ - Set the privacy password for the V3 trap.
+ - The password is a string of 8 to 16 alphanumeric characters.
+ - Required when I(priv_protocol) is either C(DES) or C(AES).
+ type: str
+ system_name:
+ description:
+ - Set the system name, can be NULL.
+ - Only the M5 model supports this parameter.
+ type: str
+ system_id:
+ description:
+ - Set the system ID, can be NULL.
+ - Only the M5 model supports this parameter.
+ type: str
+ location:
+ description:
+ - Set the host location, can be NULL.
+ - Only the M5 model supports this parameter.
+ type: str
+ contact:
+ description:
+ - Set the contact, can be NULL.
+ - Only the M5 model supports this parameter.
+ type: str
+ os:
+ description:
+ - Set the host operating system, can be NULL.
+ - Only the M5 model supports this parameter.
+ type: str
+ trap_port:
+ description:
+ - Set a port for the SNMP trap in the range of 1 to 65535.
+ - Only the M5 model supports this parameter.
+ type: int
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Trap test
+ hosts: ksmanage
+ no_log: true
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set snmp trap v2c"
+ kaytus.ksmanage.edit_snmp_trap:
+ version: 2
+ event_severity: "warning"
+ community: "test"
+ system_name: "ieisystem"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set snmp trap v3"
+ kaytus.ksmanage.edit_snmp_trap:
+ version: 3
+ event_severity: "all"
+ v3username: "ieisystem"
+ engine_id: "1234567890"
+ auth_protocol: "SHA"
+ auth_password: "12345678"
+ priv_protocol: "AES"
+ priv_password: "123454678"
+ trap_port: 162
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class SNMP(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setsnmptrap'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ version=dict(type='int', required=False, choices=[0, 1, 2, 3]),
+ event_severity=dict(type='str', required=False, choices=['all', 'warning', 'critical']),
+ community=dict(type='str', required=False),
+ host_id=dict(type='str', required=False, choices=['HostName', 'SerialNum', 'AssertTag']),
+ v3username=dict(type='str', required=False),
+ engine_id=dict(type='str', required=False),
+ auth_protocol=dict(type='str', required=False, choices=['NONE', 'SHA', 'MD5']),
+ auth_password=dict(type='str', required=False, no_log=True),
+ priv_protocol=dict(type='str', required=False, choices=['NONE', 'DES', 'AES']),
+ priv_password=dict(type='str', required=False, no_log=True),
+ system_name=dict(type='str', required=False),
+ system_id=dict(type='str', required=False),
+ location=dict(type='str', required=False),
+ contact=dict(type='str', required=False),
+ os=dict(type='str', required=False),
+ trap_port=dict(type='int', required=False),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ snmp_obj = SNMP(argument_spec)
+ snmp_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_threshold.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_threshold.py
new file mode 100644
index 000000000..70070aef9
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_threshold.py
@@ -0,0 +1,141 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_threshold
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set threshold information
+description:
+ - Set threshold information on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ name:
+ description:
+ - Sensor name.
+ type: str
+ required: true
+ lnr:
+ description:
+ - Lower non recoverable threshold, should be integer.
+ type: int
+ lc:
+ description:
+ - Lower critical threshold, should be integer.
+ type: int
+ lnc:
+ description:
+ - Lower non critical threshold, should be integer.
+ type: int
+ unc:
+ description:
+ - Up non critical threshold, should be integer.
+ type: int
+ uc:
+ description:
+ - Up critical threshold, should be integer.
+ type: int
+ unr:
+ description:
+ - Up non recoverable threshold, should be integer.
+ type: int
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Threshold test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set threshold information"
+ kaytus.ksmanage.edit_threshold:
+ name: "GPU1_Temp"
+ uc: 94
+ unc: 92
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Threshold(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setthreshold'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ name=dict(type='str', required=True),
+ lnr=dict(type='int', required=False),
+ lc=dict(type='int', required=False),
+ lnc=dict(type='int', required=False),
+ unc=dict(type='int', required=False),
+ uc=dict(type='int', required=False),
+ unr=dict(type='int', required=False),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ threshoold_obj = Threshold(argument_spec)
+ threshoold_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_uid.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_uid.py
new file mode 100644
index 000000000..156e8195c
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_uid.py
@@ -0,0 +1,121 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_uid
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set UID
+description:
+ - Set UID on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ led:
+ description:
+ - Turn on or turn off the led.
+ choices: ['on', 'off']
+ type: str
+ required: true
+ time:
+ description:
+ - Set led blink time(second).
+ type: int
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: UID test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set uid"
+ kaytus.ksmanage.edit_uid:
+ led: "on"
+ time: 10
+ provider: "{{ ksmanage }}"
+
+ - name: "Set uid"
+ kaytus.ksmanage.edit_uid:
+ led: "off"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class UID(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setuid'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ led=dict(type='str', required=True, choices=['on', 'off']),
+ time=dict(type='int', required=False),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ uid_obj = UID(argument_spec)
+ uid_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_virtual_media.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_virtual_media.py
new file mode 100644
index 000000000..7b4a7a644
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_virtual_media.py
@@ -0,0 +1,182 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_virtual_media
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set virtual media
+description:
+ - Set virtual media on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ local_media_support:
+ description:
+ - To enable or disable Local Media Support, check or uncheck the checkbox respectively.
+ - Only the M5 model supports this parameter.
+ choices: ['Enable', 'Disable']
+ type: str
+ remote_media_support:
+ description:
+ - To enable or disable Remote Media support, check or uncheck the checkbox respectively.
+ choices: ['Enable', 'Disable']
+ type: str
+ mount_type:
+ description:
+ - Virtual mount type.
+ - The I(FD) option is not supported in M6.
+ choices: ['CD', 'FD', 'HD']
+ type: str
+ same_settings:
+ description:
+ - Same settings with I(CD), 0 is No, 1 is Yes.
+ - Required when I(mount_type=0).
+ choices: [0, 1]
+ type: int
+ mount:
+ description:
+ - Whether to mount virtual media.
+ - Only the M5 model supports this parameter.
+ choices: ['Enable', 'Disable']
+ type: str
+ remote_server_address:
+ description:
+ - Address of the server where the remote media images are stored.
+ type: str
+ remote_source_path:
+ description:
+ - Source path to the remote media images..
+ type: str
+ remote_share_type:
+ description:
+ - Share Type of the remote media server either NFS or Samba(CIFS).
+ choices: ['nfs', 'cifs']
+ type: str
+ remote_domain_name:
+ description:
+ - Remote Domain Name, Domain Name field is optional.
+ type: str
+ remote_user_name:
+ description:
+ - Remote User Name.
+ - Required when I(remote_share_type=cifs).
+ type: str
+ remote_password:
+ description:
+ - Remote Password.
+ - Required when I(remote_share_type=cifs).
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Media test
+ hosts: ksmanage
+ no_log: true
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set local media"
+ kaytus.ksmanage.edit_virtual_media:
+ local_media_support: "Enable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set remote media"
+ kaytus.ksmanage.edit_virtual_media:
+ remote_media_support: "Enable"
+ mount_type: 'CD'
+ same_settings: 0
+ mount: "Enable"
+ remote_server_address: "100.2.28.203"
+ remote_source_path: "/data/nfs/server/"
+ remote_share_type: "nfs"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Media(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setvirtualmedia'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ local_media_support=dict(type='str', required=False, choices=['Enable', 'Disable']),
+ remote_media_support=dict(type='str', required=False, choices=['Enable', 'Disable']),
+ mount_type=dict(type='str', required=False, choices=['CD', 'FD', 'HD']),
+ same_settings=dict(type='int', required=False, choices=[0, 1]),
+ mount=dict(type='str', required=False, choices=['Enable', 'Disable']),
+ remote_server_address=dict(type='str', required=False),
+ remote_source_path=dict(type='str', required=False),
+ remote_share_type=dict(type='str', required=False, choices=['nfs', 'cifs']),
+ remote_domain_name=dict(type='str', required=False),
+ remote_user_name=dict(type='str', required=False),
+ remote_password=dict(type='str', required=False, no_log=True),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ media_obj = Media(argument_spec)
+ media_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/edit_vlan.py b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_vlan.py
new file mode 100644
index 000000000..97c2df83e
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/edit_vlan.py
@@ -0,0 +1,136 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: edit_vlan
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Set vlan information
+description:
+ - Set vlan information on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ interface_name:
+ description:
+ - Set interface name. Select the LAN interface to be configured.
+ choices: ['eth0', 'eth1', 'bond0']
+ required: true
+ type: str
+ vlan_status:
+ description:
+ - Enable or disable vlan.
+ choices: ['enable', 'disable']
+ type: str
+ vlan_id:
+ description:
+ - The Identification for VLAN configuration(2-4094).
+ type: int
+ vlan_priority:
+ description:
+ - The priority for VLAN configuration(1-7).
+ type: int
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Vlan test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Set vlan information"
+ kaytus.ksmanage.edit_vlan:
+ interface_name: "eth0"
+ vlan_status: "disable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set vlan information"
+ kaytus.ksmanage.edit_vlan:
+ interface_name: "eth0"
+ vlan_status: "enable"
+ vlan_id: 2
+ vlan_priority: 1
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Network(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'setvlan'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ interface_name=dict(type='str', required=True, choices=['eth0', 'eth1', 'bond0']),
+ vlan_status=dict(type='str', required=False, choices=['enable', 'disable']),
+ vlan_id=dict(type='int', required=False),
+ vlan_priority=dict(type='int', required=False),
+
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ net_obj = Network(argument_spec)
+ net_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/event_log_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/event_log_info.py
new file mode 100644
index 000000000..89e64f014
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/event_log_info.py
@@ -0,0 +1,126 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: event_log_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get event log information
+description:
+ - Get event log information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options:
+ log_time:
+ description:
+ - Get logs after the specified date, time should be YYYY-MM-DDTHH:MM+HH:MM, like 2019-06-27T12:30+08:00.
+ type: str
+ count:
+ description:
+ - Get the most recent log of a specified number.
+ type: int
+ event_file:
+ description:
+ - Store logs to a file.
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Event log info test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get event log information"
+ kaytus.ksmanage.event_log_info:
+ log_time: "2020-06-01T12:30+08:00"
+ provider: "{{ ksmanage }}"
+
+ - name: "Get event log information"
+ kaytus.ksmanage.event_log_info:
+ count: 30
+ provider: "{{ ksmanage }}"
+
+ - name: "Get event log information"
+ kaytus.ksmanage.event_log_info:
+ event_file: "/home/wbs/wbs.log"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class EventLog(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'geteventlog'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ log_time=dict(type='str', required=False),
+ count=dict(type='int', required=False),
+ event_file=dict(type='str', required=False),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ log_obj = EventLog(argument_spec)
+ log_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/event_log_policy_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/event_log_policy_info.py
new file mode 100644
index 000000000..04772fbb3
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/event_log_policy_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: event_log_policy_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get event log policy information
+description:
+ - Get event log policy information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Event log policy test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get event log policy information"
+ kaytus.ksmanage.event_log_policy_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Log(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'geteventlogpolicy'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ log_obj = Log(argument_spec)
+ log_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/fan_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/fan_info.py
new file mode 100644
index 000000000..55b38f126
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/fan_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: fan_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get fan information
+description:
+ - Get fan information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Fan test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get fan information"
+ kaytus.ksmanage.fan_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Fan(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getfan'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ fan_obj = Fan(argument_spec)
+ fan_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/fru_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/fru_info.py
new file mode 100644
index 000000000..9ed35cd3a
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/fru_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: fru_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get fru information
+description:
+ - Get fru information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Fru info test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get fru information"
+ kaytus.ksmanage.fru_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Fru(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getfru'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ fru_obj = Fru(argument_spec)
+ fru_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/fw_version_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/fw_version_info.py
new file mode 100644
index 000000000..f70eb9e13
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/fw_version_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: fw_version_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get firmware version information
+description:
+ - Get firmware version information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Firmware version test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get firmware version information"
+ kaytus.ksmanage.fw_version_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class FwVersion(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getfw'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ fw_obj = FwVersion(argument_spec)
+ fw_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/gpu_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/gpu_info.py
new file mode 100644
index 000000000..e84f29e56
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/gpu_info.py
@@ -0,0 +1,100 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: gpu_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get GPU information
+description:
+ - Get GPU information on kaytus Server.
+ - Only the M6 models support this feature.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: GPU test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get gpu information"
+ kaytus.ksmanage.gpu_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class CPU(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getgpu'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ cpu_obj = CPU(argument_spec)
+ cpu_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/hard_disk_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/hard_disk_info.py
new file mode 100644
index 000000000..6011a97b4
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/hard_disk_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: hard_disk_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get hard disk information
+description:
+ - Get hard disk information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Hard disk test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get hard disk information"
+ kaytus.ksmanage.hard_disk_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Harddisk(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getharddisk'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ disk_obj = Harddisk(argument_spec)
+ disk_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/hba_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/hba_info.py
new file mode 100644
index 000000000..c0a62c9df
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/hba_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: hba_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get CPU information
+description:
+ - Get HBA information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: HBA test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get hba information"
+ kaytus.ksmanage.hba_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class HBA(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'gethba'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ hba_obj = HBA(argument_spec)
+ hba_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/kvm_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/kvm_info.py
new file mode 100644
index 000000000..c651c4282
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/kvm_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: kvm_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get KVM information
+description:
+ - Get KVM information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: KVM test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get KVM information"
+ kaytus.ksmanage.kvm_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class KVM(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getkvm'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ kvm_obj = KVM(argument_spec)
+ kvm_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/ldap_group.py b/ansible_collections/kaytus/ksmanage/plugins/modules/ldap_group.py
new file mode 100644
index 000000000..7a5911643
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/ldap_group.py
@@ -0,0 +1,158 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: ldap_group
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Manage ldap group information
+description:
+ - Manage ldap group information on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ state:
+ description:
+ - Whether the ldap group should exist or not, taking action if the state is different from what is stated.
+ choices: ['present', 'absent']
+ default: present
+ type: str
+ name:
+ description:
+ - Group name.
+ type: str
+ required: true
+ base:
+ description:
+ - Search Base.
+ type: str
+ pri:
+ description:
+ - Group privilege.
+ choices: ['administrator', 'user', 'operator', 'oem', 'none']
+ type: str
+ kvm:
+ description:
+ - Kvm privilege.
+ choices: ['enable', 'disable']
+ type: str
+ vm:
+ description:
+ - Vmedia privilege.
+ choices: ['enable', 'disable']
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Ldap group test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Add ldap group information"
+ kaytus.ksmanage.ldap_group:
+ state: "present"
+ name: "wbs"
+ base: "cn=manager"
+ pri: "administrator"
+ kvm: "enable"
+ vm: "disable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set ldap group information"
+ kaytus.ksmanage.ldap_group:
+ state: "present"
+ name: "wbs"
+ pri: "user"
+ kvm: "disable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Delete ldap group information"
+ kaytus.ksmanage.ldap_group:
+ state: "absent"
+ name: "wbs"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class LDAP(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'editldapgroup'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ state=dict(type='str', choices=['present', 'absent'], default='present'),
+ name=dict(type='str', required=True),
+ base=dict(type='str', required=False),
+ pri=dict(type='str', required=False, choices=['administrator', 'user', 'operator', 'oem', 'none']),
+ kvm=dict(type='str', required=False, choices=['enable', 'disable']),
+ vm=dict(type='str', required=False, choices=['enable', 'disable']),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ ldap_obj = LDAP(argument_spec)
+ ldap_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/ldap_group_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/ldap_group_info.py
new file mode 100644
index 000000000..92c5e1ec7
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/ldap_group_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: ldap_group_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get ldap group information
+description:
+ - Get ldap group information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Ldap group test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get ldap group information"
+ kaytus.ksmanage.ldap_group_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class LDAP(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getldapgroup'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ ldap_obj = LDAP(argument_spec)
+ ldap_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/ldap_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/ldap_info.py
new file mode 100644
index 000000000..9d3c01628
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/ldap_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: ldap_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get ldap information
+description:
+ - Get ldap information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Ldap test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get ldap information"
+ kaytus.ksmanage.ldap_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class LDAP(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getldap'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ ldap_obj = LDAP(argument_spec)
+ ldap_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/ldisk_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/ldisk_info.py
new file mode 100644
index 000000000..530a3980c
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/ldisk_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: ldisk_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get logical disks information
+description:
+ - Get logical disks information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Ldisk test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get logical disks information"
+ kaytus.ksmanage.ldisk_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Disk(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getldisk'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ disk_obj = Disk(argument_spec)
+ disk_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/log_setting_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/log_setting_info.py
new file mode 100644
index 000000000..2a2f1ab34
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/log_setting_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: log_setting_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get bmc log setting information
+description:
+ - Get bmc log setting information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Bmc log setting test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get bmc log setting information"
+ kaytus.ksmanage.log_setting_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class LogSetting(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getbmclogsettings'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ cpu_obj = LogSetting(argument_spec)
+ cpu_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/media_instance_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/media_instance_info.py
new file mode 100644
index 000000000..4071e1b77
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/media_instance_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: media_instance_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get Virtual Media Instance information
+description:
+ - Get Virtual Media Instance information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Media instance test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get Virtual Media Instance information"
+ kaytus.ksmanage.media_instance_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Instance(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getmediainstance'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ instance_obj = Instance(argument_spec)
+ instance_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/mem_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/mem_info.py
new file mode 100644
index 000000000..e0d60a76b
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/mem_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: mem_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get memory information
+description:
+ - Get memory information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Memory test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get memory information"
+ kaytus.ksmanage.mem_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Memory(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getmemory'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ mem_obj = Memory(argument_spec)
+ mem_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/ncsi_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/ncsi_info.py
new file mode 100644
index 000000000..2b423c69b
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/ncsi_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: ncsi_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get ncsi information
+description:
+ - Get ncsi information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: NCSI test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get ncsi information"
+ kaytus.ksmanage.ncsi_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class NCSI(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getncsi'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ ncsi_obj = NCSI(argument_spec)
+ ncsi_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/network_bond_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/network_bond_info.py
new file mode 100644
index 000000000..21b1178cd
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/network_bond_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: network_bond_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get network bond information
+description:
+ - Get network bond information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Bond test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get network bond information"
+ kaytus.ksmanage.network_bond_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Bond(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getnetworkbond'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ bond_obj = Bond(argument_spec)
+ bond_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/network_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/network_info.py
new file mode 100644
index 000000000..ae778635f
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/network_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: network_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get network information
+description:
+ - Get network information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Network test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get network information"
+ kaytus.ksmanage.network_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Network(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getnetwork'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ net_obj = Network(argument_spec)
+ net_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/network_link_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/network_link_info.py
new file mode 100644
index 000000000..065d51021
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/network_link_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: network_link_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get network link information
+description:
+ - Get network link information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Link test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get network link information"
+ kaytus.ksmanage.network_link_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Link(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getnetworklink'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ link_obj = Link(argument_spec)
+ link_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/ntp_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/ntp_info.py
new file mode 100644
index 000000000..a8579c043
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/ntp_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: ntp_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get NTP information
+description:
+ - Get NTP information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: NTP test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get ntp information"
+ kaytus.ksmanage.ntp_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class NTP(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'gettime'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ ntp_obj = NTP(argument_spec)
+ ntp_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/onboard_disk_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/onboard_disk_info.py
new file mode 100644
index 000000000..33afd524f
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/onboard_disk_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: onboard_disk_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get onboard disks information
+description:
+ - Get onboard disks information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Onboard test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get onboard disks information"
+ kaytus.ksmanage.onboard_disk_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Disk(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'gethdddisk'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ disk_obj = Disk(argument_spec)
+ disk_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/pcie_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/pcie_info.py
new file mode 100644
index 000000000..528e122a0
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/pcie_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: pcie_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get PCIE information
+description:
+ - Get PCIE information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: PCIE test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get PCIE information"
+ kaytus.ksmanage.pcie_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class PCIE(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getpcie'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ pcie_obj = PCIE(argument_spec)
+ pcie_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/pdisk_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/pdisk_info.py
new file mode 100644
index 000000000..f294fd0a6
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/pdisk_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: pdisk_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get physical disks information
+description:
+ - Get physical disks information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Pdisk test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get physical disks information"
+ kaytus.ksmanage.pdisk_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Disk(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getpdisk'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ disk_obj = Disk(argument_spec)
+ disk_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/power_budget_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/power_budget_info.py
new file mode 100644
index 000000000..d2631de2f
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/power_budget_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: power_budget_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get power budget information
+description:
+ - Get power budget information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Power budget test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get power budget information"
+ kaytus.ksmanage.power_budget_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Power(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getpowerbudget'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ power_obj = Power(argument_spec)
+ power_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/power_consumption_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/power_consumption_info.py
new file mode 100644
index 000000000..0f899c662
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/power_consumption_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: power_consumption_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get power consumption information
+description:
+ - Get power consumption information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Power consumption test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get power consumption information"
+ kaytus.ksmanage.power_consumption_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Power(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getpowerconsumption'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ power_obj = Power(argument_spec)
+ power_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/power_restore_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/power_restore_info.py
new file mode 100644
index 000000000..519729ea6
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/power_restore_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: power_restore_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get power restore information
+description:
+ - Get power restore information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Power restore test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get power restore information"
+ kaytus.ksmanage.power_restore_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Power(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getpowerrestore'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ power_obj = Power(argument_spec)
+ power_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/power_status_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/power_status_info.py
new file mode 100644
index 000000000..c3b32b145
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/power_status_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: power_status_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get power status information
+description:
+ - Get power status information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Power status test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get power status information"
+ kaytus.ksmanage.power_status_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Power(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getpowerstatus'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ power_obj = Power(argument_spec)
+ power_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/preserve_config_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/preserve_config_info.py
new file mode 100644
index 000000000..08f597174
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/preserve_config_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: preserve_config_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get preserve config information
+description:
+ - Get preserve config information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Preserve test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get preserve config information"
+ kaytus.ksmanage.preserve_config_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Preserver(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getpreserveconfig'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ pre_obj = Preserver(argument_spec)
+ pre_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/psu_config_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/psu_config_info.py
new file mode 100644
index 000000000..7a2f1c7f1
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/psu_config_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: psu_config_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get psu config information
+description:
+ - Get psu config information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Psu config test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get psu config information"
+ kaytus.ksmanage.psu_config_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Psu(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getpsuconfig'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ psu_obj = Psu(argument_spec)
+ psu_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/psu_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/psu_info.py
new file mode 100644
index 000000000..df4b85861
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/psu_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: psu_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get psu information
+description:
+ - Get psu information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Psu test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get psu information"
+ kaytus.ksmanage.psu_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Psu(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getpsu'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ psu_obj = Psu(argument_spec)
+ psu_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/psu_peak_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/psu_peak_info.py
new file mode 100644
index 000000000..4b4b6f0e0
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/psu_peak_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: psu_peak_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get psu peak information
+description:
+ - Get psu peak information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Psu peak test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get psu peak information"
+ kaytus.ksmanage.psu_peak_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Psu(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getpsupeak'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ psu_obj = Psu(argument_spec)
+ psu_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/raid_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/raid_info.py
new file mode 100644
index 000000000..8b321de2d
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/raid_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: raid_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get RAID/HBA card and controller information
+description:
+ - Get RAID/HBA card and controller information information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Raid test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get raid information"
+ kaytus.ksmanage.raid_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Raid(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getraid'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ raid_obj = Raid(argument_spec)
+ raid_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/reset_bmc.py b/ansible_collections/kaytus/ksmanage/plugins/modules/reset_bmc.py
new file mode 100644
index 000000000..2a1b38a13
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/reset_bmc.py
@@ -0,0 +1,101 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: reset_bmc
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: BMC reset
+description:
+ - BMC reset on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Reset bmc test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Reset bmc"
+ kaytus.ksmanage.reset_bmc:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Reset(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'resetbmc'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ reset_obj = Reset(argument_spec)
+ reset_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/reset_kvm.py b/ansible_collections/kaytus/ksmanage/plugins/modules/reset_kvm.py
new file mode 100644
index 000000000..10d2c8161
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/reset_kvm.py
@@ -0,0 +1,101 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: reset_kvm
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: KVM reset
+description:
+ - KVM reset on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Reset kvm test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Reset kvm"
+ kaytus.ksmanage.reset_kvm:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Reset(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'resetkvm'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ reset_obj = Reset(argument_spec)
+ reset_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/restore.py b/ansible_collections/kaytus/ksmanage/plugins/modules/restore.py
new file mode 100644
index 000000000..f77bb1112
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/restore.py
@@ -0,0 +1,117 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: restore
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Restore server settings
+description:
+ - Restore server settings on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ bak_file:
+ description:
+ - Select backup file or bak folder.
+ required: true
+ type: str
+ item:
+ description:
+ - Select export item.
+ - Only the M5 model supports this parameter.
+ choices: ['all', 'network', 'dns', 'service', 'ntp', 'smtp', 'snmptrap', 'ad', 'ldap', 'user', 'bios']
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Restore test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Restore server settings"
+ kaytus.ksmanage.restore:
+ bak_file: "/home/wbs/backfile"
+ item: "all"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Restore(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'restore'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ bak_file=dict(type='str', required=True),
+ item=dict(type='str', required=False, choices=['all', 'network', 'dns', 'service', 'ntp', 'smtp', 'snmptrap', 'ad', 'ldap', 'user', 'bios']),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ restore_obj = Restore(argument_spec)
+ restore_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/self_test_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/self_test_info.py
new file mode 100644
index 000000000..3b21f7b03
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/self_test_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: self_test_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get self test information
+description:
+ - Get self test information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Self test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get self test information"
+ kaytus.ksmanage.self_test_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Test(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getselftest'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ test_obj = Test(argument_spec)
+ test_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/sensor_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/sensor_info.py
new file mode 100644
index 000000000..ef5afdc4b
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/sensor_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: sensor_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get sensor information
+description:
+ - Get sensor information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Sensor test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get sensor information"
+ kaytus.ksmanage.sensor_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Sensor(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getsensor'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ sensor_obj = Sensor(argument_spec)
+ sensor_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/server_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/server_info.py
new file mode 100644
index 000000000..72361a41e
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/server_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: server_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get server status information
+description:
+ - Get server status information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Server test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get server status information"
+ kaytus.ksmanage.server_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class ServerStatus(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getserver'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ server_obj = ServerStatus(argument_spec)
+ server_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/service_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/service_info.py
new file mode 100644
index 000000000..b2294552f
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/service_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: service_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get service information
+description:
+ - Get service information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Service info test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get service information"
+ kaytus.ksmanage.service_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Service(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getservice'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ service_obj = Service(argument_spec)
+ service_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/session_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/session_info.py
new file mode 100644
index 000000000..b8ea756f6
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/session_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: session_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get online session information
+description:
+ - Get online session information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Session test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get session information"
+ kaytus.ksmanage.session_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Session(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getsessions'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ session_obj = Session(argument_spec)
+ session_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/smtp_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/smtp_info.py
new file mode 100644
index 000000000..9f8700c03
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/smtp_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: smtp_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get SMTP information
+description:
+ - Get SMTP information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Smtp test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get smtp information"
+ kaytus.ksmanage.smtp_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class SMTP(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getsmtp'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ smtp_obj = SMTP(argument_spec)
+ smtp_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/snmp_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/snmp_info.py
new file mode 100644
index 000000000..4f40991e3
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/snmp_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: snmp_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get snmp get/set information
+description:
+ - Get snmp get/set information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Snmp test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get snmp get/set information"
+ kaytus.ksmanage.snmp_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class SNMP(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getsnmp'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ snmp_obj = SNMP(argument_spec)
+ snmp_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/snmp_trap_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/snmp_trap_info.py
new file mode 100644
index 000000000..1ecebd66e
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/snmp_trap_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: snmp_trap_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get snmp trap information
+description:
+ - Get snmp trap information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Trap test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get snmp trap information"
+ kaytus.ksmanage.snmp_trap_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class SNMP(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getsnmptrap'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ snmp_obj = SNMP(argument_spec)
+ snmp_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/support_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/support_info.py
new file mode 100644
index 000000000..711de031d
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/support_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: support_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get support information
+description:
+ - Get the kaytus Server support list information.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Support list test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get support information"
+ kaytus.ksmanage.support_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Support(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'support_model'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ support_obj = Support(argument_spec)
+ support_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/system_log_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/system_log_info.py
new file mode 100644
index 000000000..c74f38001
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/system_log_info.py
@@ -0,0 +1,134 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: system_log_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get BMC system log information
+description:
+ - Get BMC system log information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options:
+ level:
+ description:
+ - Log level.
+ default: alert
+ choices: ['alert', 'critical', 'error', 'notice', 'warning', 'debug', 'emergency', 'info']
+ type: str
+ log_time:
+ description:
+ - Get logs after the specified date, time should be YYYY-MM-DDTHH:MM+HH:MM, like 2019-06-27T12:30+08:00.
+ type: str
+ count:
+ description:
+ - Get the most recent log of a specified number.
+ type: int
+ system_file:
+ description:
+ - Store logs to a file.
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Bmc system log info test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get bmc system log information"
+ kaytus.ksmanage.system_log_info:
+ level: "alert"
+ log_time: "2020-06-01T12:30+08:00"
+ provider: "{{ ksmanage }}"
+
+ - name: "Get bmc system log information"
+ kaytus.ksmanage.system_log_info:
+ count: 30
+ provider: "{{ ksmanage }}"
+
+ - name: "Get bmc system log information"
+ kaytus.ksmanage.system_log_info:
+ system_file: "/home/wbs/wbs.log"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class SystemLog(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getsystemlog'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ level=dict(type='str', default='alert', choices=['alert', 'critical', 'error', 'notice', 'warning', 'debug', 'emergency', 'info']),
+ log_time=dict(type='str', required=False),
+ count=dict(type='int', required=False),
+ system_file=dict(type='str', required=False),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ log_obj = SystemLog(argument_spec)
+ log_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/temp_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/temp_info.py
new file mode 100644
index 000000000..a8fbef6ff
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/temp_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: temp_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get temp information
+description:
+ - Get temp information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Temp test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get temp information"
+ kaytus.ksmanage.temp_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Sensor(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'gettemp'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ sensor_obj = Sensor(argument_spec)
+ sensor_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/threshold_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/threshold_info.py
new file mode 100644
index 000000000..ae4dbfbbf
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/threshold_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: threshold_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get threshold information
+description:
+ - Get threshold information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Threshold test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get threshold information"
+ kaytus.ksmanage.threshold_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Threshold(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getthreshold'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ threshoold_obj = Threshold(argument_spec)
+ threshoold_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/uid_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/uid_info.py
new file mode 100644
index 000000000..b24547181
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/uid_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: uid_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get UID information
+description:
+ - Get UID information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: UID test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get UID information"
+ kaytus.ksmanage.uid_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class UID(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getuid'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ uid_obj = UID(argument_spec)
+ uid_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/update_cpld.py b/ansible_collections/kaytus/ksmanage/plugins/modules/update_cpld.py
new file mode 100644
index 000000000..0a20e6a11
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/update_cpld.py
@@ -0,0 +1,130 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: update_cpld
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Update CPLD
+description:
+ - Update CPLD on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ list:
+ description:
+ - Get cpld list.
+ - Only the M5 model supports this parameter.
+ choices: [True, False]
+ default: False
+ type: bool
+ id:
+ description:
+ - CPLD id.
+ - Required when I(list=False).
+ - Only the M5 model supports this parameter.
+ type: int
+ file_url:
+ description:
+ - CPLD image file path.
+ - Required when I(list=False).
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: CPLD test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get cpld list"
+ kaytus.ksmanage.update_cpld:
+ list: True
+ provider: "{{ ksmanage }}"
+
+ - name: "Update cpld"
+ update_cpld:
+ id: 1
+ file_url: "home/wbs/raw.bin"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class CPLD(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'updatecpld'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ list=dict(type='bool', default=False, choices=[True, False]),
+ id=dict(type='int', required=False),
+ file_url=dict(type='str', required=False),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ cpld_obj = CPLD(argument_spec)
+ cpld_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/update_fw.py b/ansible_collections/kaytus/ksmanage/plugins/modules/update_fw.py
new file mode 100644
index 000000000..43b18d287
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/update_fw.py
@@ -0,0 +1,154 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: update_fw
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Update firmware
+description:
+ - Update firmware on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ url:
+ description:
+ - Firmware image url.
+ required: true
+ type: str
+ mode:
+ description:
+ - Active mode, Manual or Auto(default).
+ default: Auto
+ choices: ['Auto', 'Manual']
+ type: str
+ type:
+ description:
+ - Firmware type.
+ choices: ['BMC', 'BIOS']
+ type: str
+ over_ride:
+ description:
+ - Reserve Configurations, 0-reserve, 1-override.
+ default: 0
+ choices: [0, 1]
+ type: int
+ has_me:
+ description:
+ - Update me or not when update bios, only work in INTEL platform, 0-no, 1-yes.
+ - Only the M5 model supports this parameter.
+ default: 1
+ choices: [0, 1]
+ type: int
+ dual_image:
+ description:
+ - Update dual image(default) or not.
+ - Only the M5 model supports this parameter.
+ default: dual
+ choices: ['single', 'dual']
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Update fw test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "update bios"
+ kaytus.ksmanage.update_fw:
+ url: "/home/wbs/SA5112M5_BIOS_4.1.8_Standard_20200117.bin"
+ type: "BIOS"
+ provider: "{{ ksmanage }}"
+
+ - name: "update bmc"
+ kaytus.ksmanage.update_fw:
+ url: "/home/wbs/SA5112M5_BMC_4.17.7_Standard_20200430"
+ mode: "Auto"
+ type: "BMC"
+ dual_image: "dual"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Update(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'fwupdate'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ url=dict(type='str', required=True),
+ mode=dict(type='str', default='Auto', choices=['Auto', 'Manual']),
+ over_ride=dict(type='int', default=0, choices=[0, 1]),
+ type=dict(type='str', required=False, choices=['BMC', 'BIOS']),
+ has_me=dict(type='int', default=1, choices=[0, 1]),
+ dual_image=dict(type='str', default='dual', choices=['single', 'dual']),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ update_obj = Update(argument_spec)
+ update_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/update_psu.py b/ansible_collections/kaytus/ksmanage/plugins/modules/update_psu.py
new file mode 100644
index 000000000..1e658dfcc
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/update_psu.py
@@ -0,0 +1,117 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: update_psu
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Update PSU
+description:
+ - Update psu on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ url:
+ description:
+ - Firmware image url.
+ required: true
+ type: str
+ mode:
+ description:
+ - Server Auto Reset Option, Manual or Auto(default).
+ default: Auto
+ choices: ['Auto', 'Manual']
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Update psu test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "update psu"
+ kaytus.ksmanage.update_psu:
+ url: "/home/wbs/CRPS1300D2W_00.01.04_BootLoader_Pri_Sec.hpm"
+ mode: "Auto"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Update(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'updatepsu'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ url=dict(type='str', required=True),
+ mode=dict(type='str', default='Auto', choices=['Auto', 'Manual']),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ update_obj = Update(argument_spec)
+ update_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/user.py b/ansible_collections/kaytus/ksmanage/plugins/modules/user.py
new file mode 100644
index 000000000..b193d23f7
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/user.py
@@ -0,0 +1,165 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: user
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Manage user
+description:
+ - Manage user on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ state:
+ description:
+ - Whether the user should exist or not, taking action if the state is different from what is stated.
+ choices: ['present', 'absent']
+ default: present
+ type: str
+ uid:
+ description:
+ - User id, The range is 1 to 16.
+ type: int
+ uname:
+ description:
+ - User name, Required when uid is None.
+ type: str
+ upass:
+ description:
+ - User password.
+ type: str
+ role_id:
+ description:
+ - User group.
+ - Default user group 'Administrator', 'Operator', 'User'.
+ - Use command C(user_group_info) can get all group information.
+ type: str
+ access:
+ description:
+ - User access.
+ choices: ['enable', 'disable']
+ type: str
+ priv:
+ description:
+ - Other user permissions, select one or more from None/KVM/VMM/SOL.
+ choices: ['kvm', 'vmm', 'sol', 'none']
+ type: list
+ elements: str
+ email:
+ description:
+ - User email.
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: User test
+ hosts: ksmanage
+ no_log: true
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Add user"
+ kaytus.ksmanage.user:
+ state: "present"
+ uname: "wbs"
+ upass: "admin"
+ role_id: "Administrator"
+ priv: "kvm, sol"
+ email: "wbs@ieisystem.com"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set user"
+ kaytus.ksmanage.user:
+ state: "present"
+ uname: "wbs"
+ upass: "12345678"
+ role_id: "user"
+ priv: "kvm, sol"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class User(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'edituser'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ state=dict(type='str', choices=['present', 'absent'], default='present'),
+ uid=dict(type='int', required=False),
+ uname=dict(type='str', required=False),
+ upass=dict(type='str', required=False, no_log=True),
+ role_id=dict(type='str', required=False),
+ access=dict(type='str', required=False, choices=['enable', 'disable']),
+ priv=dict(type='list', elements='str', required=False, choices=['kvm', 'vmm', 'sol', 'none']),
+ email=dict(type='str', required=False)
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ user_obj = User(argument_spec)
+ user_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/user_group.py b/ansible_collections/kaytus/ksmanage/plugins/modules/user_group.py
new file mode 100644
index 000000000..c4f0e98fa
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/user_group.py
@@ -0,0 +1,204 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: user_group
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Manage user group
+description:
+ - Manage user group on kaytus Server.
+notes:
+ - Does not support C(check_mode).
+options:
+ state:
+ description:
+ - Whether the user group should exist or not, taking action if the state is different from what is stated.
+ choices: ['present', 'absent']
+ default: present
+ type: str
+ name:
+ description:
+ - Group name.
+ - The range of group name for M6 model is OEM1, OEM2, OEM3, OEM4.
+ required: true
+ type: str
+ pri:
+ description:
+ - Group privilege.
+ - Required when I(state=present).
+ - Only the M5 model supports this parameter.
+ choices: ['administrator', 'operator', 'user', 'oem', 'none']
+ type: str
+ general:
+ description:
+ - General configuration privilege.
+ - Required when I(state=present).
+ - Only the M6 model supports this parameter.
+ choices: ['enable', 'disable']
+ type: str
+ power:
+ description:
+ - Power control privilege.
+ - Required when I(state=present).
+ - Only the M6 model supports this parameter.
+ choices: ['enable', 'disable']
+ type: str
+ media:
+ description:
+ - Remote media configuration privilege.
+ - Required when I(state=present).
+ - Only the M6 model supports this parameter.
+ choices: ['enable', 'disable']
+ type: str
+ kvm:
+ description:
+ - Remote KVM configuration privilege.
+ - Required when I(state=present).
+ - Only the M6 model supports this parameter.
+ choices: ['enable', 'disable']
+ type: str
+ security:
+ description:
+ - Security configuration privilege.
+ - Required when I(state=present).
+ - Only the M6 model supports this parameter.
+ choices: ['enable', 'disable']
+ type: str
+ debug:
+ description:
+ - Debug diagnose privilege.
+ - Required when I(state=present).
+ - Only the M6 model supports this parameter.
+ choices: ['enable', 'disable']
+ type: str
+ self:
+ description:
+ - Itself configuration privilege.
+ - Required when I(state=present).
+ - Only the M6 model supports this parameter.
+ choices: ['enable', 'disable']
+ type: str
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: User group test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Add user group"
+ kaytus.ksmanage.user_group:
+ state: "present"
+ name: "test"
+ pri: "administrator"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set user group"
+ kaytus.ksmanage.user_group:
+ state: "present"
+ name: "test"
+ pri: "user"
+ provider: "{{ ksmanage }}"
+
+ - name: "Set m6 user group"
+ kaytus.ksmanage.user_group:
+ state: "present"
+ name: "OEM1"
+ general: "enable"
+ kvm: "enable"
+ provider: "{{ ksmanage }}"
+
+ - name: "Delete user group"
+ kaytus.ksmanage.user_group:
+ state: "absent"
+ name: "test"
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+from ansible.module_utils.basic import AnsibleModule
+
+
+class UserGroup(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=False)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'editusergroup'
+ self.results = get_connection(self.module)
+ if self.results['State'] == 'Success':
+ self.results['changed'] = True
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict(
+ state=dict(type='str', choices=['present', 'absent'], default='present'),
+ name=dict(type='str', required=True),
+ pri=dict(type='str', required=False, choices=['administrator', 'operator', 'user', 'oem', 'none']),
+ general=dict(type='str', required=False, choices=['enable', 'disable']),
+ power=dict(type='str', required=False, choices=['enable', 'disable']),
+ media=dict(type='str', required=False, choices=['enable', 'disable']),
+ kvm=dict(type='str', required=False, choices=['enable', 'disable']),
+ security=dict(type='str', required=False, choices=['enable', 'disable']),
+ debug=dict(type='str', required=False, choices=['enable', 'disable']),
+ self=dict(type='str', required=False, choices=['enable', 'disable']),
+ )
+ argument_spec.update(ksmanage_argument_spec)
+ usergroup_obj = UserGroup(argument_spec)
+ usergroup_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/user_group_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/user_group_info.py
new file mode 100644
index 000000000..aa56c62a5
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/user_group_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: user_group_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get user group information
+description:
+ - Get user group information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: User group test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get user group information"
+ kaytus.ksmanage.user_group_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class UserGroup(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getusergroup'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ usergroup_obj = UserGroup(argument_spec)
+ usergroup_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/user_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/user_info.py
new file mode 100644
index 000000000..a2069f990
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/user_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: user_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get user information
+description:
+ - Get user information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: User test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get user information"
+ kaytus.ksmanage.user_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class User(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getuser'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ user_obj = User(argument_spec)
+ user_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/virtual_media_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/virtual_media_info.py
new file mode 100644
index 000000000..566bc6828
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/virtual_media_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: virtual_media_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get Virtual Media information
+description:
+ - Get Virtual Media information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Media test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get Virtual Media information"
+ kaytus.ksmanage.virtual_media_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Media(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getvirtualmedia'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ media_obj = Media(argument_spec)
+ media_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/plugins/modules/volt_info.py b/ansible_collections/kaytus/ksmanage/plugins/modules/volt_info.py
new file mode 100644
index 000000000..8207b75a3
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/plugins/modules/volt_info.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+
+# Copyright(C) 2023 Kaytus Inc. All Rights Reserved.
+# 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: volt_info
+version_added: "1.0.0"
+author:
+ - WangBaoshan (@ieisystem)
+short_description: Get volt information
+description:
+ - Get volt information on kaytus Server.
+notes:
+ - Supports C(check_mode).
+options: {}
+extends_documentation_fragment:
+ - kaytus.ksmanage.ksmanage
+'''
+
+EXAMPLES = '''
+- name: Volt test
+ hosts: ksmanage
+ connection: local
+ gather_facts: false
+ vars:
+ ksmanage:
+ host: "{{ ansible_ssh_host }}"
+ username: "{{ username }}"
+ password: "{{ password }}"
+
+ tasks:
+
+ - name: "Get volt information"
+ kaytus.ksmanage.volt_info:
+ provider: "{{ ksmanage }}"
+'''
+
+RETURN = '''
+message:
+ description: Messages returned after module execution.
+ returned: always
+ type: str
+state:
+ description: Status after module execution.
+ returned: always
+ type: str
+changed:
+ description: Check to see if a change was made on the device.
+ returned: always
+ type: bool
+'''
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.kaytus.ksmanage.plugins.module_utils.ksmanage import (ksmanage_argument_spec, get_connection)
+
+
+class Sensor(object):
+ def __init__(self, argument_spec):
+ self.spec = argument_spec
+ self.module = None
+ self.init_module()
+ self.results = dict()
+
+ def init_module(self):
+ """Init module object"""
+
+ self.module = AnsibleModule(
+ argument_spec=self.spec, supports_check_mode=True)
+
+ def run_command(self):
+ self.module.params['subcommand'] = 'getvolt'
+ self.results = get_connection(self.module)
+
+ def show_result(self):
+ """Show result"""
+ self.module.exit_json(**self.results)
+
+ def work(self):
+ """Worker"""
+ self.run_command()
+ self.show_result()
+
+
+def main():
+ argument_spec = dict()
+ argument_spec.update(ksmanage_argument_spec)
+ sensor_obj = Sensor(argument_spec)
+ sensor_obj.work()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/kaytus/ksmanage/requirements.txt b/ansible_collections/kaytus/ksmanage/requirements.txt
new file mode 100644
index 000000000..81b70119e
--- /dev/null
+++ b/ansible_collections/kaytus/ksmanage/requirements.txt
@@ -0,0 +1 @@
+inManage==1.0.0 \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/.ansible-lint b/ansible_collections/kubernetes/core/.ansible-lint
index f139e6a02..021b91886 100644
--- a/ansible_collections/kubernetes/core/.ansible-lint
+++ b/ansible_collections/kubernetes/core/.ansible-lint
@@ -1,7 +1,6 @@
---
profile: production
-skip_list:
- - meta-runtime[unsupported-version]
+
exclude_paths:
- tests/integration
- tests/sanity
diff --git a/ansible_collections/kubernetes/core/.github/stale.yml b/ansible_collections/kubernetes/core/.github/stale.yml
index 4c7afd27e..230cf78a6 100644
--- a/ansible_collections/kubernetes/core/.github/stale.yml
+++ b/ansible_collections/kubernetes/core/.github/stale.yml
@@ -12,6 +12,7 @@ daysUntilClose: 30
# Only issues or pull requests with all of these labels are check if stale.
# Defaults to `[]` (disabled)
onlyLabels: []
+
# Issues or Pull Requests with these labels will never be considered stale. Set
# to `[]` to disable
exemptLabels:
diff --git a/ansible_collections/kubernetes/core/.github/workflows/linters.yaml b/ansible_collections/kubernetes/core/.github/workflows/linters.yaml
index 589bfa786..33c819d59 100644
--- a/ansible_collections/kubernetes/core/.github/workflows/linters.yaml
+++ b/ansible_collections/kubernetes/core/.github/workflows/linters.yaml
@@ -10,7 +10,7 @@ on:
- main
- stable-*
tags:
- - "*"
+ - '*'
jobs:
linters:
@@ -21,4 +21,4 @@ jobs:
- uses: actions/checkout@v4
- name: Run ansible-lint
- uses: ansible/ansible-lint@v6.21.0
+ uses: ansible/ansible-lint@v24.2.3
diff --git a/ansible_collections/kubernetes/core/.github/workflows/unit-tests.yaml b/ansible_collections/kubernetes/core/.github/workflows/unit-tests.yaml
index 3f4ed52cd..19c8519b2 100644
--- a/ansible_collections/kubernetes/core/.github/workflows/unit-tests.yaml
+++ b/ansible_collections/kubernetes/core/.github/workflows/unit-tests.yaml
@@ -1,4 +1,3 @@
----
name: Unit tests
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
diff --git a/ansible_collections/kubernetes/core/CHANGELOG.rst b/ansible_collections/kubernetes/core/CHANGELOG.rst
index 1cad02814..f93c131fc 100644
--- a/ansible_collections/kubernetes/core/CHANGELOG.rst
+++ b/ansible_collections/kubernetes/core/CHANGELOG.rst
@@ -4,26 +4,79 @@ Kubernetes Collection Release Notes
.. contents:: Topics
-v2.4.2
+v3.1.0
======
Release Summary
---------------
-fix resource discovery when complex subresources present
+This release comes with some bugfixes and documentation updates. It also adds new features to the kubectl connection plugin and the kustomize lookup plugin.
+
+Minor Changes
+-------------
+
+- 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)
+
+Bugfixes
+--------
+
+- helm - expand kubeconfig path with user's home directory for consistency with k8s
+- k8s_json_patch - rename action symlink to ensure k8s action plugin is used (https://github.com/ansible-collections/kubernetes.core/pull/652).
+
+v3.0.1
+======
+
+Release Summary
+---------------
+
+This release fixes issue with resources discovery when complex subresources are present, and fixes issues with `reuse-values` parameter for helm module.
Bugfixes
--------
- 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 - use ``reuse-values`` when running ``helm diff`` command (https://github.com/ansible-collections/kubernetes.core/issues/680).
+- 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).
-v2.4.1
+v3.0.0
======
Release Summary
---------------
-The kubernetes.core 2.4.1 release includes several trivial bug fixes related to code sanity.
+This major release drops support for ansible-core versions lower than 2.14, Python versions lower than 3.9 and updates python kubernetes library to 24.2.0, helm/kind-action to 1.8.0, kubernetes >= 1.24, along with bug fixes and minor changes.
+
+Minor Changes
+-------------
+
+- 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).
+
+Breaking Changes / Porting Guide
+--------------------------------
+
+- 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.
+
+Deprecated Features
+-------------------
+
+- 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).
+
+Bugfixes
+--------
+
+- 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 - 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 post_renderer when checking ``changed`` status for a helm release (https://github.com/ansible-collections/kubernetes.core/pull/588).
+- 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).
v2.4.0
======
@@ -116,7 +169,7 @@ v2.3.1
Bugfixes
--------
-- Catch exception raised when the process is waiting for resources (https://github.com/ansible-collections/kubernetes.core/issues/407).
+- Catch expectation raised when the process is waiting for resources (https://github.com/ansible-collections/kubernetes.core/issues/407).
- Remove `omit` placeholder when defining resource using template parameter (https://github.com/ansible-collections/kubernetes.core/issues/431).
- k8s - fix the issue when trying to delete resources using label_selectors options (https://github.com/ansible-collections/kubernetes.core/issues/433).
- k8s_cp - fix issue when using parameter local_path with file on managed node. (https://github.com/ansible-collections/kubernetes.core/issues/421).
diff --git a/ansible_collections/kubernetes/core/FILES.json b/ansible_collections/kubernetes/core/FILES.json
index df7a884ae..194bc9a29 100644
--- a/ansible_collections/kubernetes/core/FILES.json
+++ b/ansible_collections/kubernetes/core/FILES.json
@@ -46,7 +46,7 @@
"name": ".github/workflows/linters.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "079c550400fd4af5ae0bb846395300fb193163bcc9269a572bafd3e4bc8b2e06",
+ "chksum_sha256": "3da81e6c1c8702776456e17451f8a72e63311767231f93ae7d785bf56b11f1e7",
"format": 1
},
{
@@ -60,7 +60,7 @@
"name": ".github/workflows/unit-tests.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75fa5cf2ecf4f35b5b297c33fd1bd4ac17fcfff8061c784dcb4999190b7c1467",
+ "chksum_sha256": "bc13d9a63f26298cf1d165db4b0850e207bc7ac59c46f30cc8eeb0a9b273abf5",
"format": 1
},
{
@@ -74,7 +74,7 @@
"name": ".github/stale.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aa6e60574b9fcbe36ec409ac30cc81977a2d97f2ee40335144ca5303cca983d3",
+ "chksum_sha256": "923b49f6fb8b325ea890d05a42537b3f9c5aaf26b64a704c0fef4b696aa6a4bb",
"format": 1
},
{
@@ -88,14 +88,14 @@
"name": "changelogs/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3393f1a989678a4b8583a8dcc30ff7d2c15374ebf48b676539a18ccc6fa5ec00",
+ "chksum_sha256": "a9dceb8816711232f8abe7c4507257d879f61468e572b7010c3f8f1f9f9a8bf2",
"format": 1
},
{
"name": "changelogs/config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d32a71362725ba6d9cc3d550e9b7f5f338c6692e7840c052c87263d069a1afc4",
+ "chksum_sha256": "2903835efadf1f03f8a05ba8428d1530259e322d039dcd3edbe707bcaea82e3d",
"format": 1
},
{
@@ -179,28 +179,28 @@
"name": "docs/kubernetes.core.helm_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "89adae8f40c2da10c350d9cfc1b3844104f9c8d51da2fbf13b9301cad91b5a96",
+ "chksum_sha256": "0e38e2d6b68d639a9975cdc22f2276174c31293921f0b4b607e59b887410c805",
"format": 1
},
{
"name": "docs/kubernetes.core.helm_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a8e5c2ca7aa70bca9641dd290814de18d2ade93939cdbae64a7b7484a5418565",
+ "chksum_sha256": "f72ef09fa5348f0277f6c5ed28d858814855ae75ae926d7b0aaca203727576a0",
"format": 1
},
{
"name": "docs/kubernetes.core.helm_plugin_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "51ba9800d8f92207fb2580158d75a05c942882fe237dfdbceb1b16014e13ef5d",
+ "chksum_sha256": "037b18c3a69faced12b6da2d709bb187d425d158bd83096038069450d9587fe8",
"format": 1
},
{
"name": "docs/kubernetes.core.helm_plugin_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b9ed32e51ca564332c6c070793ed4950b9c52394f62f37416658988d5d16efd0",
+ "chksum_sha256": "aa30739edee6b5d56b381675fad5664f907b6552629c898ee7cf63f06e813aa4",
"format": 1
},
{
@@ -214,126 +214,126 @@
"name": "docs/kubernetes.core.helm_repository_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4c7b2efcf6832cf1b53e9fec808449ae5ea973306ae2a3eeeed4ea7405327e06",
+ "chksum_sha256": "a9c1e4bbdbfe5fb137c9e019ae87b62332b0d2190a9686398a317420bed66f7f",
"format": 1
},
{
"name": "docs/kubernetes.core.helm_template_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "70f91cecfcc664c8ac35b58ce351fbf2a8f3051608580b180c830ca617b4f856",
+ "chksum_sha256": "2394fafdd2cf7b174cf373a400b4880009940b25b60a7fa57bbda34a5b7a9f48",
"format": 1
},
{
"name": "docs/kubernetes.core.k8s_cluster_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "061da0cf6ce62e3ba49491f11533d76e4dc8073ca8a9dbee2d3c981ad56f3d70",
+ "chksum_sha256": "2c71c7e8d1eddb627e24c25844c90ed7ec4c60d9fd28dfec1b261ec60bc0e172",
"format": 1
},
{
"name": "docs/kubernetes.core.k8s_cp_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3cb1cc05abdeaa923c87b17cff8b7c6d2aab7273b67ef6879f594cfc5ec1489d",
+ "chksum_sha256": "f405574e406eb7bd6961cb99f7173c795a256c13bbe24fa27d57c78fa2e4a012",
"format": 1
},
{
"name": "docs/kubernetes.core.k8s_drain_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b8e412c8036aa76e0ae785941b8bf317ab71296d910da6750b3793271607533c",
+ "chksum_sha256": "b60655b9ffca9e7e95cc339be18c857a8bcdd778c84b03cc936dc9aea6de2a3b",
"format": 1
},
{
"name": "docs/kubernetes.core.k8s_exec_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5b0c29c1755d04f7be9391da36a1803b6040f18fe7efdd72a14051ad758ed9e5",
+ "chksum_sha256": "962734517240c963fe8508901aa9aae5a0daf7353b2a92f1f7378da2f101071e",
"format": 1
},
{
"name": "docs/kubernetes.core.k8s_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d26adc890f69739b4744ad88a1757cbf68fca96cf9b1394a7614ffc6760732b8",
+ "chksum_sha256": "eedd93d93fea7fcacae736db7068b5002094d6dbd81714783a2e310e551330e4",
"format": 1
},
{
"name": "docs/kubernetes.core.k8s_inventory.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f0e7072fe1ebf5e12870ba93e0de9bb571f3538322d60ee6925ac025023b4ff4",
+ "chksum_sha256": "6d970818f092674dec18fdbbe88cce8c212ee6764a2d9682ccd16e82e6696023",
"format": 1
},
{
"name": "docs/kubernetes.core.k8s_json_patch_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b628ee67825e39bf7517eae54e7c322968719807cf349ed650674c99c334607a",
+ "chksum_sha256": "b0bf0b27d352e9949d63e6fb51b95571aa88b6e9c462f9e6c0cc220ce0bdb42d",
"format": 1
},
{
"name": "docs/kubernetes.core.k8s_log_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "407fd3cf0c037d5a5226c554f5d318e549b9e9fb862b9835d958612a0f515f27",
+ "chksum_sha256": "1047340361d2224a1db230a9aa2ec5301a0d8b1393477f026ec95c6863b90d79",
"format": 1
},
{
"name": "docs/kubernetes.core.k8s_lookup.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fac344797caf1dcdf99adeec0a0d850d1fd74fbf46f3a226b52931f1fa6bca0d",
+ "chksum_sha256": "32af712f441235a30dda8cb7ca68212173056c3e29a6040a0b2a354c393e7874",
"format": 1
},
{
"name": "docs/kubernetes.core.k8s_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "890765b7b747dc2762b0683c704fec4d18ddac7daccb68e28a75cf9f79a47893",
+ "chksum_sha256": "96a24617bda42364e46c8489ae6e5e602a6707498bc46f3316f3c7ccf11a741a",
"format": 1
},
{
"name": "docs/kubernetes.core.k8s_rollback_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9fd9867dcd6be0868d7fb419b9ce930f6ecbbbf66af9e4ec22ba3c3ce8151d5c",
+ "chksum_sha256": "32007424eb6aefa7bfaee457fa4f7d00938bc104582ee96fa4e8009772403ddb",
"format": 1
},
{
"name": "docs/kubernetes.core.k8s_scale_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "89d2cb58fcea0081652fd6a72f2370900cd9cd54b4444cc6a1cced61d505127e",
+ "chksum_sha256": "7b97791e906be358e9b64d6237920a02401b39e6b6f3bd9ef426c8bd5bc731aa",
"format": 1
},
{
"name": "docs/kubernetes.core.k8s_service_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a766b619b69267f29cab51baf780de200fa7fa2377fcda92585657e1dc849d0f",
+ "chksum_sha256": "d90f729010c2b0dd322a58d64c180ececebbc78fde26c21602d6bdd9b2e02a2f",
"format": 1
},
{
"name": "docs/kubernetes.core.k8s_taint_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d64a4250bdca5ac386fa4539fa837c7d89a26e63d24fc01777d1f2125b70f160",
+ "chksum_sha256": "7b8e2d98d5d82128f748096527150aaaf74eaab226c6af9f8d4277265577adfc",
"format": 1
},
{
"name": "docs/kubernetes.core.kubectl_connection.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7cb93572ffd283a453b53bd8d100ce0949a6a6cdce850c5deecd22cafa0eb4e8",
+ "chksum_sha256": "9286d253650a63d78908c1525a78cca5adacdbbddbd41fc713302d3683724a9a",
"format": 1
},
{
"name": "docs/kubernetes.core.kustomize_lookup.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6006ecdeaec488a59651653d7c48c0f4d156f49fc3a12409f75a187eafb57b7",
+ "chksum_sha256": "2d5d4c59492231f560b574716592e02395e332f9b3c922d09ce1870a22d91f89",
"format": 1
},
{
@@ -347,7 +347,7 @@
"name": "meta/runtime.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "84ea6841db16c04017807462ccb97131474b0a11d75d7b70233f3ae712983121",
+ "chksum_sha256": "7ea3ff6f907ecc449cbc9f2a327838184e129685588d9b9f4636c6448b35a7c8",
"format": 1
},
{
@@ -368,112 +368,112 @@
"name": "plugins/action/helm.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1c8c0b75ee4f8568f7eb0aa93fbf0b1daeb8eb1ffe9d92e8cfc76a4e5d47cc20",
+ "chksum_sha256": "bce106e52469f1425d3119d613db91e18b5c4767dd90e1e22b189e665ccd351a",
"format": 1
},
{
"name": "plugins/action/helm_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1c8c0b75ee4f8568f7eb0aa93fbf0b1daeb8eb1ffe9d92e8cfc76a4e5d47cc20",
+ "chksum_sha256": "bce106e52469f1425d3119d613db91e18b5c4767dd90e1e22b189e665ccd351a",
"format": 1
},
{
"name": "plugins/action/helm_plugin.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1c8c0b75ee4f8568f7eb0aa93fbf0b1daeb8eb1ffe9d92e8cfc76a4e5d47cc20",
+ "chksum_sha256": "bce106e52469f1425d3119d613db91e18b5c4767dd90e1e22b189e665ccd351a",
"format": 1
},
{
"name": "plugins/action/helm_plugin_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1c8c0b75ee4f8568f7eb0aa93fbf0b1daeb8eb1ffe9d92e8cfc76a4e5d47cc20",
+ "chksum_sha256": "bce106e52469f1425d3119d613db91e18b5c4767dd90e1e22b189e665ccd351a",
"format": 1
},
{
"name": "plugins/action/helm_repository.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1c8c0b75ee4f8568f7eb0aa93fbf0b1daeb8eb1ffe9d92e8cfc76a4e5d47cc20",
+ "chksum_sha256": "bce106e52469f1425d3119d613db91e18b5c4767dd90e1e22b189e665ccd351a",
"format": 1
},
{
"name": "plugins/action/k8s.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1c8c0b75ee4f8568f7eb0aa93fbf0b1daeb8eb1ffe9d92e8cfc76a4e5d47cc20",
+ "chksum_sha256": "bce106e52469f1425d3119d613db91e18b5c4767dd90e1e22b189e665ccd351a",
"format": 1
},
{
"name": "plugins/action/k8s_cluster_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1c8c0b75ee4f8568f7eb0aa93fbf0b1daeb8eb1ffe9d92e8cfc76a4e5d47cc20",
+ "chksum_sha256": "bce106e52469f1425d3119d613db91e18b5c4767dd90e1e22b189e665ccd351a",
"format": 1
},
{
"name": "plugins/action/k8s_cp.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1c8c0b75ee4f8568f7eb0aa93fbf0b1daeb8eb1ffe9d92e8cfc76a4e5d47cc20",
+ "chksum_sha256": "bce106e52469f1425d3119d613db91e18b5c4767dd90e1e22b189e665ccd351a",
"format": 1
},
{
"name": "plugins/action/k8s_drain.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1c8c0b75ee4f8568f7eb0aa93fbf0b1daeb8eb1ffe9d92e8cfc76a4e5d47cc20",
+ "chksum_sha256": "bce106e52469f1425d3119d613db91e18b5c4767dd90e1e22b189e665ccd351a",
"format": 1
},
{
"name": "plugins/action/k8s_exec.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1c8c0b75ee4f8568f7eb0aa93fbf0b1daeb8eb1ffe9d92e8cfc76a4e5d47cc20",
+ "chksum_sha256": "bce106e52469f1425d3119d613db91e18b5c4767dd90e1e22b189e665ccd351a",
"format": 1
},
{
- "name": "plugins/action/k8s_log.py",
+ "name": "plugins/action/k8s_json_patch.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1c8c0b75ee4f8568f7eb0aa93fbf0b1daeb8eb1ffe9d92e8cfc76a4e5d47cc20",
+ "chksum_sha256": "bce106e52469f1425d3119d613db91e18b5c4767dd90e1e22b189e665ccd351a",
"format": 1
},
{
- "name": "plugins/action/k8s_rollback.py",
+ "name": "plugins/action/k8s_log.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1c8c0b75ee4f8568f7eb0aa93fbf0b1daeb8eb1ffe9d92e8cfc76a4e5d47cc20",
+ "chksum_sha256": "bce106e52469f1425d3119d613db91e18b5c4767dd90e1e22b189e665ccd351a",
"format": 1
},
{
- "name": "plugins/action/k8s_scale.py",
+ "name": "plugins/action/k8s_rollback.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1c8c0b75ee4f8568f7eb0aa93fbf0b1daeb8eb1ffe9d92e8cfc76a4e5d47cc20",
+ "chksum_sha256": "bce106e52469f1425d3119d613db91e18b5c4767dd90e1e22b189e665ccd351a",
"format": 1
},
{
- "name": "plugins/action/k8s_service.py",
+ "name": "plugins/action/k8s_scale.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1c8c0b75ee4f8568f7eb0aa93fbf0b1daeb8eb1ffe9d92e8cfc76a4e5d47cc20",
+ "chksum_sha256": "bce106e52469f1425d3119d613db91e18b5c4767dd90e1e22b189e665ccd351a",
"format": 1
},
{
- "name": "plugins/action/ks8_json_patch.py",
+ "name": "plugins/action/k8s_service.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1c8c0b75ee4f8568f7eb0aa93fbf0b1daeb8eb1ffe9d92e8cfc76a4e5d47cc20",
+ "chksum_sha256": "bce106e52469f1425d3119d613db91e18b5c4767dd90e1e22b189e665ccd351a",
"format": 1
},
{
"name": "plugins/action/k8s_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1c8c0b75ee4f8568f7eb0aa93fbf0b1daeb8eb1ffe9d92e8cfc76a4e5d47cc20",
+ "chksum_sha256": "bce106e52469f1425d3119d613db91e18b5c4767dd90e1e22b189e665ccd351a",
"format": 1
},
{
@@ -487,7 +487,7 @@
"name": "plugins/connection/kubectl.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5895e521f261d2172764464c56e886ce61652bb8f9d0b88b51afb909da5d159f",
+ "chksum_sha256": "08e05362470ad358e2f8336bf2d47bb91e841d4fb070e807b2e675b7a9ffeab2",
"format": 1
},
{
@@ -508,56 +508,56 @@
"name": "plugins/doc_fragments/helm_common_options.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a66b232cb2fa3c8a28498bd30389ca8f4ffd7ae97b70bfe601788d46779f9cb3",
+ "chksum_sha256": "9011bc4019bae2731ccc0c24951b02843d3d5abe41c0c55e463bbe75b2b7a166",
"format": 1
},
{
"name": "plugins/doc_fragments/k8s_auth_options.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8d189a6ab2d0937cd572d2510823ecbe1a9742d5bed23a6406eae926aa1f7f7d",
+ "chksum_sha256": "5d4b12c4a93bffc9dd043c4bf3ed2eb4ec2b0f45aca28efcaaad02658ce11fe6",
"format": 1
},
{
"name": "plugins/doc_fragments/k8s_delete_options.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3e47df1b0ac656ad1b756b0628aeef1bbd47baa2dfbff643fd151467d0d18c97",
+ "chksum_sha256": "cf77963591ffb56b479367b4de340bf2b3b2af4f6aa1eb807e3241129e44f016",
"format": 1
},
{
"name": "plugins/doc_fragments/k8s_name_options.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "293ef90ac4a1ad52677f22c747dda0d9e740c1a8e8c1fc783d110c2bbb35dc76",
+ "chksum_sha256": "47bad02cd0e7eec3382811941252a3668517ec70409ecdacd9ce53f63f5fe8cb",
"format": 1
},
{
"name": "plugins/doc_fragments/k8s_resource_options.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "30875d624f093085908955fb0ff53ab73602e5dffa66cbcba32de0a3e48785b3",
+ "chksum_sha256": "74ea7ea72060387c19772261f7451f20e41953fd9ba4ac7fe23ef49df37094f9",
"format": 1
},
{
"name": "plugins/doc_fragments/k8s_scale_options.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "81ae1fe5c034a916cba915be2a35406d56340ead6a3189963911ebc93796d322",
+ "chksum_sha256": "1b86cf18b42651786e99d125bcc1bb0f0c3c67c954d19b548768389b6ea4ac30",
"format": 1
},
{
"name": "plugins/doc_fragments/k8s_state_options.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "569e138705ec9b5bf2ba429cc0e71e87e4459cd1289470fb71e7436cd949f1c3",
+ "chksum_sha256": "8c3dc917d1da488bb1807a5c6b4e2a2fc50d45324ebbf0052207a4b964ec8bc8",
"format": 1
},
{
"name": "plugins/doc_fragments/k8s_wait_options.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3c86e0272f62fbfc49c1c5eeeb4d7c61d9726bcec5e8965ae5c77edcab97296",
+ "chksum_sha256": "bc9a393a2fa34fba1b4237a0087f1d0a9b3e0e9512fb5ba8a1c59688e59bdced",
"format": 1
},
{
@@ -571,7 +571,7 @@
"name": "plugins/filter/k8s.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "62fc604b3650ef08387c5127ec9f107d3e0bbd5019a3dcee49fdc77558bb59d1",
+ "chksum_sha256": "1732300a6c48e6e6e678ea2b1dffb4a22779c6c7fe04f9fe64fd397df08af7c1",
"format": 1
},
{
@@ -592,7 +592,7 @@
"name": "plugins/inventory/k8s.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "69faaca6259bbc1850c5efa053b84de457efc8b32e1ee8ce13cb0b815c8e52c8",
+ "chksum_sha256": "27d1adb4227f2c07c9bd79d11909df1a7f577ad698340d5c9e956cf1b9e47293",
"format": 1
},
{
@@ -606,14 +606,14 @@
"name": "plugins/lookup/k8s.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2b24cf87c1463e091f41879aa2117b532dc481b74f7e9999cd049cdb5a8ee1ac",
+ "chksum_sha256": "71dec0a63377e83cd66fe74cf88464ee1c78b498af6f369e8fb3e171a92d2ae7",
"format": 1
},
{
"name": "plugins/lookup/kustomize.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cf1be05e740300ccb2d9a64f89024f8e645e9a3f33d921abd4c9e7e139645785",
+ "chksum_sha256": "b8b6ca236d007ce4ca03bf1e31ec5e5a10c360a8cdff5933006ab23b21948e8f",
"format": 1
},
{
@@ -634,7 +634,7 @@
"name": "plugins/module_utils/client/discovery.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f9af2ebc4962d187531400fb80e34168c9d35412b7045c8c27ab1330d59852cf",
+ "chksum_sha256": "d30f9c5a9c90972264289b0e5cee95effe9319595e23aeaa4e079afeb716338a",
"format": 1
},
{
@@ -655,14 +655,14 @@
"name": "plugins/module_utils/k8s/client.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f7428c830e53238c9682715651d3a125d172bea223970d851cc823291bb84c17",
+ "chksum_sha256": "0056d2093cab9094eaa5cbeccd9256317f61f5c50d5044b2baf30dc5ba94fd97",
"format": 1
},
{
"name": "plugins/module_utils/k8s/core.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "55a0a8cceda4e9ca604fe724af5d6cf82d9e382d138b110ac5d7ba9b073549d5",
+ "chksum_sha256": "a54455932f24cd7580024e2058e290414fcad3b597332d4b0627b8898b3b95c3",
"format": 1
},
{
@@ -676,28 +676,28 @@
"name": "plugins/module_utils/k8s/resource.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bf5d3132b51a4b725c11cd9a69bc75274663059234b56a6231271bf8c23bcaef",
+ "chksum_sha256": "78f2e91fa52267f93d7f72191bdddcffaf92c9a9978c5c923f8f5912f3691fb6",
"format": 1
},
{
"name": "plugins/module_utils/k8s/runner.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9d1a9e22e30f2a1faf0d84687d5181517fda5844c97003e0d24e4b024d7412dd",
+ "chksum_sha256": "b2f5e05be622a194b431c8dc0ad28b3dc88e6c6d5a0143d77ed74438c4fc53f1",
"format": 1
},
{
"name": "plugins/module_utils/k8s/service.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9f3c774651fac14bfd191bff16e5c374049dd434880d63ca9a7a1b4dbde7bd7b",
+ "chksum_sha256": "ecf3dbe6b2e55701a62ac8796d4b1fc5174673d89a0bc892c4472a61c2278c0e",
"format": 1
},
{
"name": "plugins/module_utils/k8s/waiter.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c5c11459d7e02516b111cb64a5e31cf3afa1d9a9ffadfbc87ab477d5684d49d7",
+ "chksum_sha256": "00aaf46f557298aec65db2efefc1f749753136e37d4d58de1ec52d1ef0f960e6",
"format": 1
},
{
@@ -718,14 +718,14 @@
"name": "plugins/module_utils/ansiblemodule.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e6a42da6322ac61fc8c0d86a9b60c4ad4255a2ba19d0c69a139c80ace2773e4f",
+ "chksum_sha256": "cde56b067dc7815d559ff8eb2335ad50ef43fc92fcc50812b44c61fb4b854ba6",
"format": 1
},
{
"name": "plugins/module_utils/apply.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d13b411d95075d9aca971d7c4badd496a981011903d08f93ae0cd62f73968d10",
+ "chksum_sha256": "769c127e1015586d75ccab76ab1e56dcd286de42073074c15c2b0472e0956e4c",
"format": 1
},
{
@@ -739,14 +739,14 @@
"name": "plugins/module_utils/common.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1ba4d32d44ef9366cb5f181a91692f269aac5f4ccc4c971237ac720a1c47cbe3",
+ "chksum_sha256": "b90c5e00a256b1a968b03ae1fc119a11b11a50cffc4cfc19c8609a4c1d6ce9fd",
"format": 1
},
{
"name": "plugins/module_utils/copy.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e225cb19d811f0eb677f624db73f65ff5ead23e3701b7a266a9d5d03a3e99151",
+ "chksum_sha256": "aec7f7effed09d03fe2b8b4218e51d6b3c921a01c05e0c2d26a58e90e35f708a",
"format": 1
},
{
@@ -760,14 +760,14 @@
"name": "plugins/module_utils/hashes.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8495aceb22009f8529c1f5a82f4c338d9a727d23d0a85f7386183609c9e34c5c",
+ "chksum_sha256": "a8ccce48ad134285d61384ea7598c1efdbd9ae4222e0566d154d86ecbfa3a02e",
"format": 1
},
{
"name": "plugins/module_utils/helm.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "03c4cccb138537a8291f32025575c7ccc1a6b903b84a9f492851a1e2d07c2a07",
+ "chksum_sha256": "d38bca9cd97f41fad4d4d41d9f174b9e31c54924ead73b36b81ba273ec45f87f",
"format": 1
},
{
@@ -781,14 +781,14 @@
"name": "plugins/module_utils/k8sdynamicclient.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c58236ebcf4a9d39ccce1fb9f0084c716596fa269557553db1d421f9769c1088",
+ "chksum_sha256": "6b44b539981affc25ede49cc8a7f994fe19b5c60aaa1e400a480e735f7ed1be6",
"format": 1
},
{
"name": "plugins/module_utils/selector.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a912a35f5014bdf2a30625614b05acd2d71fabaea2b980bb4f6b110151e3e345",
+ "chksum_sha256": "d5e15a8ac4f916ee4b578450449a525dbda727b77178941a81c21e9e228e7987",
"format": 1
},
{
@@ -816,133 +816,133 @@
"name": "plugins/modules/helm.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1213cd7c02f4e2f28f4126c74e3145dfbd4b04185fb74c3a3b930f49ffbaaac1",
+ "chksum_sha256": "24809d4f0d94f2acc0d9de7c3858804a6ecfe17d8c2b9a182431ce381ef1a84a",
"format": 1
},
{
"name": "plugins/modules/helm_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7f2140cb6d7a692eed5feb96859e0099e23b497cd377a91c51579e5dc361d182",
+ "chksum_sha256": "86cad6e59f97bdcbebbf53eeb0ea9eaf7a031eef477ecd76bf109cb872c7fa1e",
"format": 1
},
{
"name": "plugins/modules/helm_plugin.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0425eaf1efe23f6d9eb6812300d0525eee18c769e80c6c74e193ee376c05901b",
+ "chksum_sha256": "c99d47fc5fcffafc060416fae69f740b6d18700f00843f0de2315eb32432c113",
"format": 1
},
{
"name": "plugins/modules/helm_plugin_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "80794a520c59990974d93c32d813ecee8de50b2cb36ababde183ee5db62c8cfa",
+ "chksum_sha256": "42afe7b57c92837736d4df8f9e48fe3b71c2f529970acb65ad6b6fb5cf8e0148",
"format": 1
},
{
"name": "plugins/modules/helm_pull.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "da8a930e40e61287c5da5a1e4c15c29907d8330d060b89ecdc3a238855553c03",
+ "chksum_sha256": "9273b4acaacb7b74943c1cd84b583a11aa605cc24bad1c7d78b2a219f5558303",
"format": 1
},
{
"name": "plugins/modules/helm_repository.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2d348193a38287251a86a8efb47a52d26fdae877447dc9933a1ee14281e9d3ee",
+ "chksum_sha256": "d248b9c1339b7265266f9d9956eca41edbb47d54ba7459cc5862fc98061bcb89",
"format": 1
},
{
"name": "plugins/modules/helm_template.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fee5bdfcf7a99492b9b5dc4c86e62505b87d79c76450e09bbb323915aab5848f",
+ "chksum_sha256": "ad6faef74432361e5ff03669553cfa7d4ff87e07ec6a0bb69fb65e38cf7de3ac",
"format": 1
},
{
"name": "plugins/modules/k8s.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "61802b08c5cebba766fb8a9f2d950aad7a8eff2489eb5958d6dd1d897884fc90",
+ "chksum_sha256": "8f1e954707d0f04d4f18796a146c9d9b38ab54f83b209b899292711c93fe18af",
"format": 1
},
{
"name": "plugins/modules/k8s_cluster_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a04f656c51d094f1acb7b347d39da19ab3c46b35de9f07f23b9910ae601665f7",
+ "chksum_sha256": "0616d8c6ac9c83a572a1afe2d7cc68f5870bfac77a618171f003b9eb25c5877c",
"format": 1
},
{
"name": "plugins/modules/k8s_cp.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f5cd6f3791bfb5856900f4d3c24bb7dc4c2f895e89c619a0e1480b3634c75330",
+ "chksum_sha256": "8f19067c472d4761792fdbf93578c9224714bf241bf0eae4015892589ce3c237",
"format": 1
},
{
"name": "plugins/modules/k8s_drain.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8501728be21a5dea5f91fd97ea5cc1f840a85d8a545899f026d2bc5971b306db",
+ "chksum_sha256": "b08836133883d3d1fe219a8edc0eb97137046f29df8cef5c2ae246bb2b1ac8c0",
"format": 1
},
{
"name": "plugins/modules/k8s_exec.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3e85e93a987900104d20a7c8ed736df1a720c072dd181d4a092fb5344e08257a",
+ "chksum_sha256": "81f3fa756696852814f241a06dc95c6dad16acf9fe3e43e08696876d8fb6c08d",
"format": 1
},
{
"name": "plugins/modules/k8s_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b7b67467c41866e95eac0c74f914ce0f5c073d4fbb1c2ca93cfc310d31384049",
+ "chksum_sha256": "573d7d612c588820f615e0fd3f188a646d74d17636f56c560caf8c3f801296d4",
"format": 1
},
{
"name": "plugins/modules/k8s_json_patch.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "44097a47c792a7899ff04788d0f958a1819194224a5588eb5a5db5f448722be7",
+ "chksum_sha256": "4475cdf40cec8277e690fab7627b9a40bb567e9f53ac728db49742fed18362b6",
"format": 1
},
{
"name": "plugins/modules/k8s_log.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d855aec3ee0be16af005b6371e2eb887f6eca8983af4d520d6a6733246540b53",
+ "chksum_sha256": "fc05e30eb060ff3bce8403eeb5f9748ab82242ef28a34dfe5ae20227e57fcbc5",
"format": 1
},
{
"name": "plugins/modules/k8s_rollback.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e9ff60598e33faa157b6c4c04e95002a162becd56286400cb9aaa7c5432f1cfe",
+ "chksum_sha256": "f8bf4bf26cc8634882fd70e704cef6033642a15a316a4859cc03544fd3c31013",
"format": 1
},
{
"name": "plugins/modules/k8s_scale.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c4a04c19741cd4834c8a1926790fc0d94e7fbea8c3e15daa42ac47da4bd63049",
+ "chksum_sha256": "cf508fa2f02619293fa664cf55531d5dd1b15d8d35f2bfe382fdc9f756a826c3",
"format": 1
},
{
"name": "plugins/modules/k8s_service.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "da88e5c089db282cf1413ff002a6e781c7f05a54689c992494b52b9054689a41",
+ "chksum_sha256": "079bdfa6f65254fc1547b985e4713d25e6c5ff9c28332b9358e7a4456ff57979",
"format": 1
},
{
"name": "plugins/modules/k8s_taint.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec21f39fd4efd743655d36a8091c24b7bfcd76af239cb5cb068415fad9552517",
+ "chksum_sha256": "85d951125ea30ae907d40e79ef22d6e6be5aa5613cfa561de361be7ad5bb30ec",
"format": 1
},
{
@@ -984,7 +984,7 @@
"name": "tests/integration/targets/helm/defaults/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4f8b1fa71279ad05526d564d79582b3be0ea406397bdde007f7f84cf557fc063",
+ "chksum_sha256": "3e0c593e7f65eb2019aa6a6f94163b8f0fc2f03d31825a4c5cf62e24f89da653",
"format": 1
},
{
@@ -1170,10 +1170,17 @@
"format": 1
},
{
+ "name": "tests/integration/targets/helm/library/helm_test_pending.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6d99fe79d8191d5e488830d12fec57dd24b0273c5fc1fe78e10ec058d86c4132",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/helm/library/helm_test_version.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fb24cdcfd0d0e43450817fb51e96c4e78cc9ed74a4d65493a5c31e71398e2fee",
+ "chksum_sha256": "8d0a65aa2d47d2222ba3f40a29d8cabce93e7f7bbaef2e302fcb2907d91e326d",
"format": 1
},
{
@@ -1243,7 +1250,7 @@
"name": "tests/integration/targets/helm/tasks/run_test.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "951714c0c82ed7edc2c3217592668cd6d0e89dca1b04347d6bd5261ba5475412",
+ "chksum_sha256": "0e9631dc89e0aead697db7cbf7c968fac4b01501aa54f35bafbc067a18c952cc",
"format": 1
},
{
@@ -1261,10 +1268,24 @@
"format": 1
},
{
+ "name": "tests/integration/targets/helm/tasks/test_helm_reuse_values.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "048db343560977f14b89320b1e2acb80185e91637b69d2588bb44116ae409f33",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/helm/tasks/test_helm_uninstall.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8b7b2a8d5ec8bda414225cadc593308480165473842b3d6b7eacbbc77bd68d64",
+ "chksum_sha256": "035a1fdd23c55e2ddb2c6d75adec68efef3abe139410abfc6140965d08b04628",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/helm/tasks/test_helm_with_space_into_chart_name.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6e00ad23adf106e55dd37273edd6797f92011f969d6ad7a826377604ddca0691",
"format": 1
},
{
@@ -1296,6 +1317,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/helm/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b5301d16a79e8fafbd41f45eed94ab9428023557601dbd9d965a6216a3d5ae17",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/helm/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/helm_diff",
"ftype": "dir",
"chksum_type": null,
@@ -1324,6 +1359,41 @@
"format": 1
},
{
+ "name": "tests/integration/targets/helm_diff/files/test-chart-reuse-values",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/helm_diff/files/test-chart-reuse-values/templates",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/helm_diff/files/test-chart-reuse-values/templates/configmap.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9925ce72f89a09a39d3d77aae5c40c89eeea7dcc1b6175cc9bbc86be72463539",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/helm_diff/files/test-chart-reuse-values/Chart.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f0caead20030f65c7f90d5b3a061c310a2ec565290d929349b4707d6f26e28ac",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/helm_diff/files/test-chart-reuse-values/values.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1b49985939a64d6dcef87ff60f5ee46112c9462f468a686d3ea9ddcd82b4042c",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/helm_diff/files/test-chart",
"ftype": "dir",
"chksum_type": null,
@@ -1376,7 +1446,14 @@
"name": "tests/integration/targets/helm_diff/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e369b170ddb55919f665ffb224c8cbef7df5713b8961a9b016524cc0f8b9b43f",
+ "chksum_sha256": "2f481b9008eef657e61f46b3604d8fa00480f1d988c7bc17e9bad6cc0c370fb9",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/helm_diff/tasks/reuse_values.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "101840c2bc4fcda18ad657055483c43b287a163c942d15a2b14e227875e97215",
"format": 1
},
{
@@ -1387,6 +1464,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/helm_diff/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5cc7722bb3690e2c2a3ef3259ee5ba795e5096a7fe07df8e65b58d176ff5f82a",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/helm_diff/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/helm_kubeconfig",
"ftype": "dir",
"chksum_type": null,
@@ -1418,7 +1509,7 @@
"name": "tests/integration/targets/helm_kubeconfig/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "706a0802afe247b21d705adcf9438b038b0d27a20202880fd729aaa46ee4e419",
+ "chksum_sha256": "c62410da25d2dbb4bc0c82bd69412598750a7b3f12e1dfdf357e750cd7efb78e",
"format": 1
},
{
@@ -1471,6 +1562,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/helm_kubeconfig/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3b8efae56c9317b22dd7da982cae9024de2bfd3b2942e6b7ecd3a9ac5f382d10",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/helm_kubeconfig/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/helm_plugin",
"ftype": "dir",
"chksum_type": null,
@@ -1548,6 +1653,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/helm_plugin/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "44d41a91eb0dc703b1c388c388ef381ba8a9f43f8aaf6e5800ec4dd742049cff",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/helm_plugin/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/helm_pull",
"ftype": "dir",
"chksum_type": null,
@@ -1576,6 +1695,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/helm_pull/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7d34b496a58b4f9ab9e878db3a005420a41990059c01c6d9557b9ce715493960",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/helm_pull/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/helm_repository",
"ftype": "dir",
"chksum_type": null,
@@ -1632,6 +1765,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/helm_repository/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7e9a1c0bca295a21b11e94e545e91c0f7b06491a7dec984a7343a2d8048ed5b5",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/helm_repository/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/helm_set_values",
"ftype": "dir",
"chksum_type": null,
@@ -1663,7 +1810,7 @@
"name": "tests/integration/targets/helm_set_values/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "706a0802afe247b21d705adcf9438b038b0d27a20202880fd729aaa46ee4e419",
+ "chksum_sha256": "c62410da25d2dbb4bc0c82bd69412598750a7b3f12e1dfdf357e750cd7efb78e",
"format": 1
},
{
@@ -1688,6 +1835,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/helm_set_values/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4d1bccf02290fec6f13aa79d5e20e2d525d760afbfa6e2dbdc0803a2957e1e36",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/helm_set_values/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/install_helm",
"ftype": "dir",
"chksum_type": null,
@@ -1796,7 +1957,7 @@
"name": "tests/integration/targets/inventory_k8s/runme.sh",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5415aa52dcafe384fbd790cc1af78830c102d68eb355b5cbf757fa0c86a953e7",
+ "chksum_sha256": "eb45e4409fecf9bd8bd95c1d6f740dc8b0911face5db181ac51190f2f12bff4d",
"format": 1
},
{
@@ -1828,6 +1989,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/k8s_access_review/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "676de1495c95f4765a77a30ca28d639903ec4fcfdddbb1a2f8f05202951bf816",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_access_review/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/k8s_append_hash",
"ftype": "dir",
"chksum_type": null,
@@ -1884,6 +2059,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/k8s_append_hash/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "eabe5d163b726a4e0d09ef22d5f7ab345d99c42e63f63904c783b705ab9f77af",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_append_hash/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/k8s_apply",
"ftype": "dir",
"chksum_type": null,
@@ -1947,6 +2136,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/k8s_apply/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c9e8505b682cfd25777f7db45392b56147d42fa547151112d22873f2f19c4ddc",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_apply/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/k8s_check_mode",
"ftype": "dir",
"chksum_type": null,
@@ -2010,6 +2213,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/k8s_check_mode/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f8bb62dba8c6f0795d499169d495f30d8e13bc57f3b6a76c38201e1e0543e0d2",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_check_mode/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/k8s_cluster_info",
"ftype": "dir",
"chksum_type": null,
@@ -2038,6 +2255,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/k8s_cluster_info/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "230c51ed36ca2856bbdb0e96139307712e98eef752d337d7b243d38162dc78e8",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_cluster_info/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/k8s_copy",
"ftype": "dir",
"chksum_type": null,
@@ -2143,17 +2374,10 @@
"format": 1
},
{
- "name": "tests/integration/targets/k8s_copy/library/k8s_create_file.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "93f30185ab7c1555eedf7d2a1644459e429098a5a6cd29b655f46e5e986b80d4",
- "format": 1
- },
- {
"name": "tests/integration/targets/k8s_copy/library/kubectl_file_compare.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b0ac3c26cf1fa994d208e31fddd30dc0df0efc4a8d759e6dc4be8065a743b7fc",
+ "chksum_sha256": "2e96dd9e8b2cee2bd4c575a1905377de5e68f1dfa849c1091139779f6c122a3b",
"format": 1
},
{
@@ -2223,7 +2447,7 @@
"name": "tests/integration/targets/k8s_copy/tasks/test_copy_large_file.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "91ac7bdf37253df75fc425266714bacc2a99a3d69d126429851f816b152a26e2",
+ "chksum_sha256": "63e1e76b75b383def9da4da09248d7136c5b6e8ca2936ff4aa58265c5b7ca90e",
"format": 1
},
{
@@ -2255,6 +2479,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/k8s_copy/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1af734f87b0761897551399745d2e4a337a02a54cd08808d2ae62590564a1e3c",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_copy/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/k8s_crd",
"ftype": "dir",
"chksum_type": null,
@@ -2332,6 +2570,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/k8s_crd/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7933d29b81246a08c584af68f59844114f07cb501d1f6103c826c03d1aeb7c82",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_crd/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/k8s_delete",
"ftype": "dir",
"chksum_type": null,
@@ -2353,6 +2605,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/k8s_delete/files",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_delete/files/deployments.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ed446e5873aea240cdb494e19664ea560f9e8b37081a959f3e3f6ebb861ae2bd",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/k8s_delete/meta",
"ftype": "dir",
"chksum_type": null,
@@ -2377,7 +2643,7 @@
"name": "tests/integration/targets/k8s_delete/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1b24137238beb8cc3cbfb0a6bd54bf7edbc47c888d5386955e62f23d5269d593",
+ "chksum_sha256": "764c6509bb41fd1834de668bd095a92e1611976701a02bd67bae3a1897d5ea09",
"format": 1
},
{
@@ -2388,6 +2654,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/k8s_delete/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "57f8b9a17861725f061c50803742607ab38e5cc52d568f0770b8f1c801d04d56",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_delete/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/k8s_diff",
"ftype": "dir",
"chksum_type": null,
@@ -2458,6 +2738,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/k8s_diff/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "cd0cd1ea502aa343fcc37661a7e82dc7e4c1630684b1c9c86a62a8ecc2624d14",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_diff/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/k8s_drain",
"ftype": "dir",
"chksum_type": null,
@@ -2503,7 +2797,7 @@
"name": "tests/integration/targets/k8s_drain/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "497fcfe822f26afc3b5f3841848ad69bd0e937c6d820833e956f64961d6e6d2f",
+ "chksum_sha256": "1e3f9c80f5dcb0bd0d519d7f1c44ff4c858fdc6db47267bd20a9c3f05985991d",
"format": 1
},
{
@@ -2514,6 +2808,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/k8s_drain/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0f3b1a904d40487a3aabca3d0cf382fae369bc3a1ec0114c053bc65b1356ea6f",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_drain/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/k8s_exec",
"ftype": "dir",
"chksum_type": null,
@@ -2570,6 +2878,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/k8s_exec/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "67b65b83642110a67a88b4136141ad0d788c121382da039faf79ca3079686793",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_exec/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/k8s_full",
"ftype": "dir",
"chksum_type": null,
@@ -2626,6 +2948,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/k8s_full/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "809ffad70bedeb3e91fc07fa8eb94744c054eb4866a1dda465fa93cd3d0e6906",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_full/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/k8s_gc",
"ftype": "dir",
"chksum_type": null,
@@ -2682,6 +3018,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/k8s_gc/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "422848575978d033202ef6d05bbba54509a5af01cbc62bf694a55a9e606e3b58",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_gc/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/k8s_generate_name",
"ftype": "dir",
"chksum_type": null,
@@ -2710,6 +3060,90 @@
"format": 1
},
{
+ "name": "tests/integration/targets/k8s_generate_name/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3bb24f0cb8e2361932b20de62da1a984bd9c01ce2d456a109925b6e6a97648de",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_generate_name/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_hide_fields",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_hide_fields/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_hide_fields/defaults/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b02007b67dc813a28f59017eee61cb5596b949c747fd39a68bc48632844828ef",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_hide_fields/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_hide_fields/meta/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a5f181f2a4fac30b6ab1513fe8607539e30b4d95d68d7de29a56905844f28998",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_hide_fields/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_hide_fields/tasks/main.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3f6774bc7b9dce71ceb6d95d0a0f2aebb0b0f3dba3670d67251a8480fafc6bc8",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_hide_fields/aliases",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6fa0cf6146c6cf230ad5a94dcd9b8a431ea32ff4949f95305c2fa5f42a322cf2",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_hide_fields/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4a7d83a4a0c2cfb420c3805ec9eb633c0cdefe90c9b1bdb048ca48ec96db97d8",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_hide_fields/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8d7fd83a50323c8866adf44163eaac5ead0a7bcfe31f26ddc13623beed087814",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/k8s_info",
"ftype": "dir",
"chksum_type": null,
@@ -2776,7 +3210,7 @@
"name": "tests/integration/targets/k8s_info/tasks/wait.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "396d2ee6262c763600d91b36df4815a8d7c4981337ddf4fedf0f93c61eaf6c09",
+ "chksum_sha256": "f4252ee1051f1e41126ac7c4cfec78fa1ce2a7eb95c23b4c5bae9bece253af30",
"format": 1
},
{
@@ -2787,6 +3221,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/k8s_info/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ee26ce3444252ae7154fd71a14d174dd980e3ad7f61a196130eb997509ee8c71",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_info/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/k8s_json_patch",
"ftype": "dir",
"chksum_type": null,
@@ -2843,6 +3291,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/k8s_json_patch/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2718a2f0fdcb21e56340d5dd44a0bb4a9dc040b9097a54fd0ea9756e470cc14a",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_json_patch/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/k8s_label_selectors",
"ftype": "dir",
"chksum_type": null,
@@ -2899,6 +3361,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/k8s_label_selectors/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d7ef4e3d1a1cece989d1c170ce05f5715aa89eb651c6c03c9a87d691c5ecbccb",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_label_selectors/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/k8s_lists",
"ftype": "dir",
"chksum_type": null,
@@ -2955,6 +3431,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/k8s_lists/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3491ff3cb985496928a67190ba7de11e5d4d2b53265df6fbcef0ab273cf331c4",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_lists/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/k8s_log",
"ftype": "dir",
"chksum_type": null,
@@ -3011,6 +3501,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/k8s_log/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "00a6111ce9c52bb1be8f007717f2a7e6272aae2ed97642d8ba774e180a58f32a",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_log/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/k8s_manifest_url",
"ftype": "dir",
"chksum_type": null,
@@ -3067,6 +3571,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/k8s_manifest_url/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "69d57a0135a4e51dff30b9ad6e27738498c14c8e69f07dd135801218880e25b6",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_manifest_url/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/k8s_merge_type",
"ftype": "dir",
"chksum_type": null,
@@ -3123,6 +3641,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/k8s_merge_type/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e2e091f7b393ab19999cd2d5f8632f3ac5d204e8717b2b7f358fe5877790c41e",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_merge_type/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/k8s_patched",
"ftype": "dir",
"chksum_type": null,
@@ -3179,6 +3711,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/k8s_patched/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e66f3418971059e8c2a21a77ffaf9f024ffaf3b4deae8d61ff1b25e892fe7cd8",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_patched/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/k8s_rollback",
"ftype": "dir",
"chksum_type": null,
@@ -3235,6 +3781,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/k8s_rollback/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b023097c4ff41c5c176f2c7b349be05fbbdc7c0dc92656a231b0d7147666c7b2",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_rollback/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/k8s_scale",
"ftype": "dir",
"chksum_type": null,
@@ -3294,7 +3854,7 @@
"name": "tests/integration/targets/k8s_scale/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "af632f359f1507bfc0a8e4eb1b2b36e1222a06ae21859d7c9dfc83da19a37118",
+ "chksum_sha256": "592b114db2bca211b1ee59a9a3cd4678a0192e668a3b1b9b3a7124d559cc3426",
"format": 1
},
{
@@ -3305,6 +3865,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/k8s_scale/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "00fe4658a47629714be2ec4336d8ec902e024e7452d2462ef924afb94be0f219",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_scale/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/k8s_taint",
"ftype": "dir",
"chksum_type": null,
@@ -3361,6 +3935,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/k8s_taint/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "efde8a99b3fe17ef28c0e201265b92bd2cb2c6a8c2ec234c64abcdc6c97fad60",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_taint/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/k8s_template",
"ftype": "dir",
"chksum_type": null,
@@ -3459,6 +4047,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/k8s_template/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f8a9a7e394fe029bdd322589d1faffe102a3c031f3fc305e0bec7355992f93cc",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_template/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/k8s_user_impersonation",
"ftype": "dir",
"chksum_type": null,
@@ -3515,6 +4117,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/k8s_user_impersonation/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "529d8f8451fc84dc8306745e99e31a5b9b9191fe6905a2cf7bfd7282bcbcb610",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_user_impersonation/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/k8s_validate",
"ftype": "dir",
"chksum_type": null,
@@ -3560,7 +4176,7 @@
"name": "tests/integration/targets/k8s_validate/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6cbec7acc2026e44531f73245f00878f03a52bd4cb0c774335c628a421cb9f28",
+ "chksum_sha256": "83626dee78e667bdcb9213bc274aa405a2e5961c93ab6d9f6c16711a23846c58",
"format": 1
},
{
@@ -3571,6 +4187,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/k8s_validate/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "04740e0290685e11d704ef68ad14f56d7c6442f8488cde143bb36e6d97fe6b12",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_validate/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/k8s_waiter",
"ftype": "dir",
"chksum_type": null,
@@ -3627,6 +4257,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/k8s_waiter/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "32b9f63e66cd5a96c12ed60ef4504c1777b02fd49f9f59b8ea699009226ee6b6",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/k8s_waiter/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/lookup_k8s",
"ftype": "dir",
"chksum_type": null,
@@ -3683,6 +4327,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/lookup_k8s/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "432e21b1239347693be98c582b735e6f720c7c5b5683c948450c2c5b695ed627",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/lookup_k8s/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/lookup_kustomize",
"ftype": "dir",
"chksum_type": null,
@@ -3739,6 +4397,20 @@
"format": 1
},
{
+ "name": "tests/integration/targets/lookup_kustomize/playbook.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4cbbf3c72c7880f2dd213218de6482bae3fecc335e94ddd83bbc04bb0041931b",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/lookup_kustomize/runme.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f",
+ "format": 1
+ },
+ {
"name": "tests/integration/targets/remove_namespace",
"ftype": "dir",
"chksum_type": null,
@@ -3798,7 +4470,7 @@
"name": "tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "50fa9ab8aca36af544a370d3c2b5d3b557bd848d0d9ae1f0e751634ea75bbb6b",
+ "chksum_sha256": "c4b3d5a693438becc07ce98c3c2cc50a110f7d886c49bf444cb073c7d733abd9",
"format": 1
},
{
@@ -3879,66 +4551,38 @@
"format": 1
},
{
- "name": "tests/sanity/ignore-2.10.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "df0567067fd935ff36eae1b6952a83b392be1c333519821a3af56437f4a55a2f",
- "format": 1
- },
- {
- "name": "tests/sanity/ignore-2.11.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "70624e6d15f87ec118ba71c135b060431f04aa3746123666e8cb951b9cb1bca1",
- "format": 1
- },
- {
- "name": "tests/sanity/ignore-2.12.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c108894b090a50da8f307726409f3055b481d5ee255f2932c1d52bae72d50058",
- "format": 1
- },
- {
- "name": "tests/sanity/ignore-2.13.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c108894b090a50da8f307726409f3055b481d5ee255f2932c1d52bae72d50058",
- "format": 1
- },
- {
"name": "tests/sanity/ignore-2.14.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "42e419caf846ed0dcc02202e9a4b75591f31dabc45c730e182d4c5a3d915be82",
+ "chksum_sha256": "73f995367c7bb72172998e3a83988cd8eed0731251cb186622f430e841523bb1",
"format": 1
},
{
"name": "tests/sanity/ignore-2.15.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3d41bd605b43a4f205532a2b699580a36949428e269d7ab38f0e117a8f6714b",
+ "chksum_sha256": "3663bd06ef274990d5929638a9bd2fa06bd87f45502a5f5565e5a405caf2a476",
"format": 1
},
{
"name": "tests/sanity/ignore-2.16.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1dccc6da515a13558fab57a5c95645e064f7f2592db56bcb145d758e45991363",
+ "chksum_sha256": "ee479546af5f4e87382278080e90e71b255f74bf387f6f8824878485ec6935b4",
"format": 1
},
{
"name": "tests/sanity/ignore-2.17.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cabeaf26387322db20141d82f01d2718ea57b23b18fb71e493c837370a087e32",
+ "chksum_sha256": "7cb5f1e5af3b322b33f99c02859a6ae5aab7fbd10fa6bd12e34f35af4524f743",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.9.txt",
+ "name": "tests/sanity/ignore-2.18.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f81ba55b45ea34f4fe65ecaba048fb917867bd7b87b020069ddb83f145179391",
+ "chksum_sha256": "7cb5f1e5af3b322b33f99c02859a6ae5aab7fbd10fa6bd12e34f35af4524f743",
"format": 1
},
{
@@ -3959,7 +4603,7 @@
"name": "tests/unit/action/test_remove_omit.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "30e4e2521f84b3bd3a408ebb75c3adeeb0e99382bd9f34afc461ae6778fa5683",
+ "chksum_sha256": "3f2d0b8fe129fbfe31f72c33d25ceedbe0e05502962d240f47537c9c5f2737dd",
"format": 1
},
{
@@ -4001,14 +4645,14 @@
"name": "tests/unit/module_utils/test_apply.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "28703ed0cab23068fbbd0d99ba1095ca2c2c484f28fa25c05716ed29671c2ac5",
+ "chksum_sha256": "0b8058ce637b4ab02bf946b846e697022427c10b92a4472bf46e5d0c08ba7350",
"format": 1
},
{
"name": "tests/unit/module_utils/test_client.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "84829637b1d0d7210f75b3c33210dde9d1233230563b9fcf0557695787e9f700",
+ "chksum_sha256": "167c9612520a208b6e6a490befc3e2026b4b7c27855cc93da075afaa78efae85",
"format": 1
},
{
@@ -4022,14 +4666,14 @@
"name": "tests/unit/module_utils/test_core.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "25d001234f6af4441e1fd3e75b9a691f0b016662000e898d7603879ec01eb57e",
+ "chksum_sha256": "aa2ef6a20267aaca6bc100411ede12038544603b7f5ba60b46d9d70412a51937",
"format": 1
},
{
"name": "tests/unit/module_utils/test_discoverer.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0517cb0710d18a3730e675e6206e21fc50ec98c6338eb25547838d4cf107dd87",
+ "chksum_sha256": "5467c15583ddd86b28049b8f3dbfacdb0563d51667bc975b402266aad3a90d64",
"format": 1
},
{
@@ -4043,7 +4687,7 @@
"name": "tests/unit/module_utils/test_helm.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e7b1d5eec28c07a73b0e71b67bf6211496adb11c9ff748f7bb47e7c5bc279ed4",
+ "chksum_sha256": "ee5cb16e95cae3202d2ff171c15c748722211855c2cc615d62f6990f1e975329",
"format": 1
},
{
@@ -4064,7 +4708,7 @@
"name": "tests/unit/module_utils/test_runner.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bf805b42bed1e709ce7d2b2bb2139d0b9014ba3a712168b0095f78f4143217e4",
+ "chksum_sha256": "c8fa05c5a69a92ae8283c5f0ea54548bb74a1e1c5c9916a11014c5cea5954706",
"format": 1
},
{
@@ -4078,14 +4722,14 @@
"name": "tests/unit/module_utils/test_service.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "22eb9a8b500a62548486b754dacccd40f92e612659705cda953c68e95178a802",
+ "chksum_sha256": "406fb385b62fe21d8f5436e501a79888e57cb0fa635887dd0af79d5f90a3def2",
"format": 1
},
{
"name": "tests/unit/module_utils/test_waiter.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a83e8cf7a00c1f6f6d9b08fcb01a9b0807f3d59081c4697da0bec1908a1a6eb1",
+ "chksum_sha256": "08f3d8bb12b136adf86d38f90d5944072139dd30f549dd5c9f725b1486030122",
"format": 1
},
{
@@ -4106,14 +4750,14 @@
"name": "tests/unit/modules/test_helm_template_module.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ce4462f8dc0e6f61abd6ed59951d95ed57aac564da92b494d23d31c963ce5df6",
+ "chksum_sha256": "d3ed685e3c3cd3f6eac343edfdaed0358c336358f48a54978d46b5d4542ebe78",
"format": 1
},
{
"name": "tests/unit/modules/test_module_helm.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "65480cc9a747d2f5d7f14e9936f9c53ca4cd781b1e01c9d739304795d0c8d259",
+ "chksum_sha256": "6b210b6df40eb3a137728870443978512f73729ace3206aa1770f57dd707270f",
"format": 1
},
{
@@ -4134,7 +4778,7 @@
"name": "tests/unit/conftest.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e71c6426972ffd4826b7d5fb7f021333ca0760ea442b9e549b0916e837cd54c7",
+ "chksum_sha256": "8ebad32afd8333eb2f5a4ab6aafdc7cf6309fe9b69c7d4932aa327e0aeaa0d55",
"format": 1
},
{
@@ -4155,7 +4799,7 @@
"name": ".ansible-lint",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c7f042498988069158af67d1654477ba2897c44f7a54120aada6d2c3e5355628",
+ "chksum_sha256": "b90959aefc23655a9f56fe7b5247c8cf82c594f7f4e269cfbcd916ebc5a2367d",
"format": 1
},
{
@@ -4176,7 +4820,7 @@
"name": "CHANGELOG.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7d39ea37e36b9eef78ec1515b8f4270b36e4847f58d0bee7fdd7bfa08abb0181",
+ "chksum_sha256": "ab78cf4fb4f75175d5ddea647bf1e4a77c5ec5d0f204abb7ff7e06c08dca5c55",
"format": 1
},
{
@@ -4197,7 +4841,7 @@
"name": "Makefile",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cc231a95d40d0f7a28d49ea378be431e9c0b046bdc70bc79fb34e2623aaf102c",
+ "chksum_sha256": "72fce95837f17ca1375a1f2130a5b695e500f1ac1cb87942d51dd1a3ed99343b",
"format": 1
},
{
@@ -4211,7 +4855,7 @@
"name": "README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4a5e2a68aa595990f3ca1921ee2a6140f065e71d1bfcc145c56de532e452124f",
+ "chksum_sha256": "690f7280c8733a5b793e7491c6234caaffae167e6a45637c416658fdd84fa0ec",
"format": 1
},
{
@@ -4232,7 +4876,7 @@
"name": "requirements.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f4d1053cac2a14673a9faf001292589693d10f6126b23255e34beb8223d1de91",
+ "chksum_sha256": "98d0caf1b4904aefece588e6282a226889644491e5cfca7670ec3c9f300cd31e",
"format": 1
},
{
@@ -4253,7 +4897,7 @@
"name": "tox.ini",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "63b3c9e7c1e29e051dde455446312eaededeee7006c4e5e23746049fa7de2255",
+ "chksum_sha256": "953a38288849462a19658d71097da3aa6a6aeb37471f7a6e081b141caf6dbfcd",
"format": 1
}
],
diff --git a/ansible_collections/kubernetes/core/MANIFEST.json b/ansible_collections/kubernetes/core/MANIFEST.json
index a965e0179..e4e7f12e9 100644
--- a/ansible_collections/kubernetes/core/MANIFEST.json
+++ b/ansible_collections/kubernetes/core/MANIFEST.json
@@ -2,7 +2,7 @@
"collection_info": {
"namespace": "kubernetes",
"name": "core",
- "version": "2.4.2",
+ "version": "3.1.0",
"authors": [
"chouseknecht (https://github.com/chouseknecht)",
"geerlingguy (https://www.jeffgeerling.com/)",
@@ -36,7 +36,7 @@
"name": "FILES.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ddf0469e4a5072f0670d71f80bac5f570bff4361f4db80f2b517e8ef2b7a7eb1",
+ "chksum_sha256": "497a265e1b9a279b5abb4fcb6acc3ad94db0ee0519969df4bf816c4a90b7b8cb",
"format": 1
},
"format": 1
diff --git a/ansible_collections/kubernetes/core/Makefile b/ansible_collections/kubernetes/core/Makefile
index 77ca0d25f..b76f3af50 100644
--- a/ansible_collections/kubernetes/core/Makefile
+++ b/ansible_collections/kubernetes/core/Makefile
@@ -1,5 +1,5 @@
# Also needs to be updated in galaxy.yml
-VERSION = 2.4.1
+VERSION = 3.0.0
TEST_ARGS ?= ""
PYTHON_VERSION ?= `python -c 'import platform; print(".".join(platform.python_version_tuple()[0:2]))'`
diff --git a/ansible_collections/kubernetes/core/README.md b/ansible_collections/kubernetes/core/README.md
index 95b0d05d3..67993a06e 100644
--- a/ansible_collections/kubernetes/core/README.md
+++ b/ansible_collections/kubernetes/core/README.md
@@ -9,7 +9,7 @@ The collection includes a variety of Ansible content to help automate the manage
<!--start requires_ansible-->
## Ansible version compatibility
-This collection has been tested against following Ansible versions: **>=2.9.17**.
+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,13 +20,13 @@ PEP440 is the schema used to describe the versions of Ansible.
## Python Support
-* Collection supports 3.6+
+* Collection supports 3.9+
Note: Python2 is deprecated from [1st January 2020](https://www.python.org/doc/sunset-python-2/). Please switch to Python3.
## Kubernetes Version Support
-This collection supports Kubernetes versions >=1.19.
+This collection supports Kubernetes versions >= 1.24.
## Included content
@@ -93,7 +93,7 @@ You can also include it in a `requirements.yml` file and install it via `ansible
---
collections:
- name: kubernetes.core
- version: 2.4.1
+ version: 3.0.0
```
### Installing the Kubernetes Python Library
diff --git a/ansible_collections/kubernetes/core/changelogs/changelog.yaml b/ansible_collections/kubernetes/core/changelogs/changelog.yaml
index 13f227875..a6a689887 100644
--- a/ansible_collections/kubernetes/core/changelogs/changelog.yaml
+++ b/ansible_collections/kubernetes/core/changelogs/changelog.yaml
@@ -762,20 +762,95 @@ releases:
name: helm_pull
namespace: ''
release_date: '2023-01-24'
- 2.4.1:
+ 3.0.0:
changes:
- release_summary: The kubernetes.core 2.4.1 release includes several trivial
- bug fixes related to sanity.
+ breaking_changes:
+ - 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.
+ bugfixes:
+ - 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 - 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 post_renderer when checking ``changed`` status for a helm release
+ (https://github.com/ansible-collections/kubernetes.core/pull/588).
+ - 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).
+ deprecated_features:
+ - 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).
+ minor_changes:
+ - 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).
+ release_summary: This major release drops support for ansible-core versions
+ lower than 2.14, Python versions lower than 3.9 and updates python kubernetes
+ library to 24.2.0, helm/kind-action to 1.8.0, kubernetes >= 1.24, along with
+ bug fixes and minor changes.
fragments:
- - fix_sanity_errors.yml
- release_date: '2024-02-06'
- 2.4.2:
+ - 20230206-deprecate-k8s-inventory.yml
+ - 20231110-helm-quote-ref.yaml
+ - 517-k8s-make-name-optional.yaml
+ - 575-helm-add-support-for-reuse_values-and-reset_values.yml
+ - 579-k8s_scale-fix-issue-with-scaling-statefulsets.yml
+ - 583-k8s_scale-clean-handling-of-ResourceTimeout-exception.yaml
+ - 586-helm-fix-post-renderer-arg.yml
+ - 588-helm-use-post-renderer-for-helmdiff.yml
+ - 589-helm-uninstall-chart-releases-with-statuses-different-than-deployed.yaml
+ - 606-k8s_drain-add-pod_selectors-parameter.yaml
+ - 612-fix-helm-tests.yaml
+ - 629-add-hidden-fields-option.yaml
+ - gha-sanity-fixes.yaml
+ - helm-delete-temporary-file-created-when-using-option-release_values.yaml
+ - remove_ansible_2_13.yaml
+ - update_supported_versions.yaml
+ release_date: '2023-11-17'
+ 3.0.1:
changes:
bugfixes:
- Resolve Collections util resource discovery fails when complex subresources
present (https://github.com/ansible-collections/kubernetes.core/pull/676).
- release_summary: fix resource discovery when complex subresources present
+ - align `helmdiff_check()` function commandline rendering with the `deploy()`
+ function (https://github.com/ansible-collections/kubernetes.core/pull/670).
+ - helm - use ``reuse-values`` when running ``helm diff`` command (https://github.com/ansible-collections/kubernetes.core/issues/680).
+ - 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).
+ release_summary: This release fixes issue with resources discovery when complex
+ subresources are present, and fixes issues with `reuse-values` parameter for
+ helm module.
fragments:
- - 2.4.2.yml
+ - 20240117-fix-helm-diff-cmd-line-rendering.yml
- 20240222-Collections-util-resource-discovery-fails-when-complex-subresources-present.yml
+ - 20240228-fix-helm-diff-with-reuse-values.yml
+ - 3.0.1.yml
release_date: '2024-03-01'
+ 3.1.0:
+ changes:
+ bugfixes:
+ - helm - expand kubeconfig path with user's home directory for consistency with
+ k8s
+ - k8s_json_patch - rename action symlink to ensure k8s action plugin is used
+ (https://github.com/ansible-collections/kubernetes.core/pull/652).
+ minor_changes:
+ - 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)
+ release_summary: This release comes with some bugfixes and documentation updates.
+ It also adds new features to the kubectl connection plugin and the kustomize
+ lookup plugin.
+ fragments:
+ - 20240426-add-support-of-kubectl-local-env-vars-for-connection-plugin.yml
+ - 3.1.0.yml
+ - 592-kustomize-helm-support.yml
+ - 652-fix-json-patch-action.yml
+ - 654-helm-expand-user.yml
+ release_date: '2024-05-16'
diff --git a/ansible_collections/kubernetes/core/changelogs/config.yaml b/ansible_collections/kubernetes/core/changelogs/config.yaml
index 138225941..69554b846 100644
--- a/ansible_collections/kubernetes/core/changelogs/config.yaml
+++ b/ansible_collections/kubernetes/core/changelogs/config.yaml
@@ -10,21 +10,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: Kubernetes Collection
trivial_section_name: trivial
diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_info_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_info_module.rst
index f74546b25..4b5ef7c06 100644
--- a/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_info_module.rst
+++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_info_module.rst
@@ -108,6 +108,27 @@ Parameters
<tr>
<td colspan="1">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>get_all_values</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.4.0</div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li><div style="color: blue"><b>no</b>&nbsp;&larr;</div></li>
+ <li>yes</li>
+ </ul>
+ </td>
+ <td>
+ <div>Set to <code>True</code> if you want to get all (computed) values of the release.</div>
+ <div>When <code>False</code> (default), only user supplied values are returned.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>host</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -127,7 +148,7 @@ Parameters
<b>kubeconfig</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
- <span style="color: purple">path</span>
+ <span style="color: purple">raw</span>
</div>
</td>
<td>
@@ -135,6 +156,7 @@ Parameters
<td>
<div>Helm option to specify kubeconfig path to use.</div>
<div>If the value is not specified in the task, the value of environment variable <code>K8S_AUTH_KUBECONFIG</code> will be used instead.</div>
+ <div>The configuration can be provided as dictionary. Added in version 2.4.0.</div>
<div style="font-size: small; color: darkgreen"><br/>aliases: kubeconfig_path</div>
</td>
</tr>
@@ -175,6 +197,32 @@ Parameters
<tr>
<td colspan="1">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>release_state</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ <b>Default:</b><br/><div style="color: blue">[]</div>
+ </td>
+ <td>
+ <div>Show releases as per their states.</div>
+ <div>Default value is <code>deployed</code> and <code>failed</code>.</div>
+ <div>If set to <code>all</code>, show all releases without any filter applied.</div>
+ <div>If set to <code>deployed</code>, show deployed releases.</div>
+ <div>If set to <code>failed</code>, show failed releases.</div>
+ <div>If set to <code>pending</code>, show pending releases.</div>
+ <div>If set to <code>superseded</code>, show superseded releases.</div>
+ <div>If set to <code>uninstalled</code>, show uninstalled releases, if <code>helm uninstall --keep-history</code> was used.</div>
+ <div>If set to <code>uninstalling</code>, show releases that are currently being uninstalled.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>validate_certs</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -204,11 +252,18 @@ Examples
.. code-block:: yaml
- - name: Deploy latest version of Grafana chart inside monitoring namespace
+ - name: Gather information of Grafana chart inside monitoring namespace
kubernetes.core.helm_info:
name: test
release_namespace: monitoring
+ - name: Gather information about test-chart with pending state
+ kubernetes.core.helm_info:
+ name: test-chart
+ release_namespace: testenv
+ release_state:
+ - pending
+
Return Values
@@ -274,6 +329,42 @@ Common return values are documented `here <https://docs.ansible.com/ansible/late
<td class="elbow-placeholder">&nbsp;</td>
<td colspan="1">
<div class="ansibleOptionAnchor" id="return-"></div>
+ <b>hooks</b>
+ <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=dictionary</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.4.0</div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Hooks of the release</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder">&nbsp;</td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-"></div>
+ <b>manifest</b>
+ <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=dictionary</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.4.0</div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Manifest of the release</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder">&nbsp;</td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-"></div>
<b>name</b>
<a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
<div style="font-size: small">
@@ -306,6 +397,23 @@ Common return values are documented `here <https://docs.ansible.com/ansible/late
<td class="elbow-placeholder">&nbsp;</td>
<td colspan="1">
<div class="ansibleOptionAnchor" id="return-"></div>
+ <b>notes</b>
+ <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.4.0</div>
+ </td>
+ <td>always</td>
+ <td>
+ <div>Notes of the release</div>
+ <br/>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder">&nbsp;</td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-"></div>
<b>revision</b>
<a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
<div style="font-size: small">
diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_module.rst
index 77b2c27bf..93da13595 100644
--- a/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_module.rst
+++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_module.rst
@@ -36,12 +36,12 @@ Parameters
<table border=0 cellpadding=0 class="documentation-table">
<tr>
- <th colspan="1">Parameter</th>
+ <th colspan="2">Parameter</th>
<th>Choices/<font color="blue">Defaults</font></th>
<th width="100%">Comments</th>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>api_key</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -57,7 +57,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>atomic</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -76,7 +76,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>binary_path</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -91,7 +91,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>ca_cert</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -108,7 +108,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>chart_ref</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -127,7 +127,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>chart_repo_url</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -142,7 +142,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>chart_version</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -157,7 +157,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>context</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -174,7 +174,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>create_namespace</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -194,13 +194,14 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>dependency_update</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
<span style="color: purple">boolean</span>
</div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.4.0</div>
</td>
<td>
<ul style="margin: 0; padding: 0"><b>Choices:</b>
@@ -209,7 +210,7 @@ Parameters
</ul>
</td>
<td>
- <div>Run standelone <code>helm dependency update CHART</code> before the operation.</div>
+ <div>Run standalone <code>helm dependency update CHART</code> before the operation.</div>
<div>Run inline <code>--dependency-update</code> with <code>helm install</code> command. This feature is not supported yet with the <code>helm upgrade</code> command.</div>
<div>So we should consider to use <em>dependency_update</em> options with <em>replace</em> option enabled when specifying <em>chart_repo_url</em>.</div>
<div>The <em>dependency_update</em> option require the add of <code>dependencies</code> block in <code>Chart.yaml/requirements.yaml</code> file.</div>
@@ -218,7 +219,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>disable_hook</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -237,7 +238,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>force</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -256,7 +257,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>history_max</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -273,7 +274,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>host</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -289,12 +290,12 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>kubeconfig</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
- <span style="color: purple">path</span>
+ <span style="color: purple">raw</span>
</div>
</td>
<td>
@@ -302,11 +303,28 @@ Parameters
<td>
<div>Helm option to specify kubeconfig path to use.</div>
<div>If the value is not specified in the task, the value of environment variable <code>K8S_AUTH_KUBECONFIG</code> will be used instead.</div>
+ <div>The configuration can be provided as dictionary. Added in version 2.4.0.</div>
<div style="font-size: small; color: darkgreen"><br/>aliases: kubeconfig_path</div>
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>post_renderer</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.4.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Path to an executable to be used for post rendering.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>purge</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -325,7 +343,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>release_name</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -342,7 +360,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>release_namespace</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -359,7 +377,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>release_state</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -379,7 +397,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>release_values</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -396,7 +414,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>replace</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -418,8 +436,109 @@ Parameters
</td>
</tr>
<tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>reset_values</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.5.0</div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>no</li>
+ <li><div style="color: blue"><b>yes</b>&nbsp;&larr;</div></li>
+ </ul>
+ </td>
+ <td>
+ <div>When upgrading package, reset the values to the ones built into the chart.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>reuse_values</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.5.0</div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>no</li>
+ <li>yes</li>
+ </ul>
+ </td>
+ <td>
+ <div>When upgrading package, specifies wether to reuse the last release&#x27;s values and merge in any overrides from parameters <em>release_values</em>, <em>values_files</em> or <em>set_values</em>.</div>
+ <div>If <em>reset_values</em> is set to <code>True</code>, this is ignored.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>set_values</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=dictionary</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.4.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Values to pass to chart configuration</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>value</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Value to pass to chart configuration (e.g phase=prod).</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
<td colspan="1">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>value_type</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">-</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li><div style="color: blue"><b>raw</b>&nbsp;&larr;</div></li>
+ <li>string</li>
+ <li>json</li>
+ <li>file</li>
+ </ul>
+ </td>
+ <td>
+ <div>Use <code>raw</code> set individual value.</div>
+ <div>Use <code>string</code> to force a string for an individual value.</div>
+ <div>Use <code>file</code> to set individual values from a file when the value itself is too long for the command line or is dynamically generated.</div>
+ <div>Use <code>json</code> to set json values (scalars/objects/arrays). This feature requires helm&gt;=3.10.0.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>skip_crds</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -438,7 +557,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>timeout</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -456,7 +575,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>update_repo_cache</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -475,7 +594,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>validate_certs</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -496,7 +615,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>values_files</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -517,7 +636,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>wait</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -537,7 +656,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>wait_timeout</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -556,6 +675,12 @@ Parameters
<br/>
+Notes
+-----
+
+.. note::
+ - The default idempotency check can fail to report changes when ``release_state`` is set to ``present`` and ``chart_repo_url`` is defined. Install helm diff >= 3.4.1 for better results.
+
Examples
@@ -612,6 +737,15 @@ Examples
state: absent
update_repo_cache: true
+ - name: Deploy Grafana chart using set values on target
+ kubernetes.core.helm:
+ name: test
+ chart_ref: stable/grafana
+ release_namespace: monitoring
+ set_values:
+ - value: phase=prod
+ value_type: string
+
# From git
- name: Git clone stable repo on HEAD
ansible.builtin.git:
@@ -657,6 +791,17 @@ Examples
logging:
enabled: True
+ # Deploy latest version
+ - name: Deploy latest version of Grafana chart using reuse_values
+ kubernetes.core.helm:
+ name: test
+ chart_ref: stable/grafana
+ release_namespace: monitoring
+ reuse_values: true
+ values:
+ replicas: 2
+ version: 3e8ec0b2dffa40fb97d5342e4af887de95faa8c61a62480dd7f8aa03dffcf533
+
Return Values
diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_plugin_info_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_plugin_info_module.rst
index 86c563f91..ec0b7ce77 100644
--- a/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_plugin_info_module.rst
+++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_plugin_info_module.rst
@@ -126,7 +126,7 @@ Parameters
<b>kubeconfig</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
- <span style="color: purple">path</span>
+ <span style="color: purple">raw</span>
</div>
</td>
<td>
@@ -134,6 +134,7 @@ Parameters
<td>
<div>Helm option to specify kubeconfig path to use.</div>
<div>If the value is not specified in the task, the value of environment variable <code>K8S_AUTH_KUBECONFIG</code> will be used instead.</div>
+ <div>The configuration can be provided as dictionary. Added in version 2.4.0.</div>
<div style="font-size: small; color: darkgreen"><br/>aliases: kubeconfig_path</div>
</td>
</tr>
diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_plugin_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_plugin_module.rst
index ca1f1d03d..aae718992 100644
--- a/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_plugin_module.rst
+++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_plugin_module.rst
@@ -126,7 +126,7 @@ Parameters
<b>kubeconfig</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
- <span style="color: purple">path</span>
+ <span style="color: purple">raw</span>
</div>
</td>
<td>
@@ -134,6 +134,7 @@ Parameters
<td>
<div>Helm option to specify kubeconfig path to use.</div>
<div>If the value is not specified in the task, the value of environment variable <code>K8S_AUTH_KUBECONFIG</code> will be used instead.</div>
+ <div>The configuration can be provided as dictionary. Added in version 2.4.0.</div>
<div style="font-size: small; color: darkgreen"><br/>aliases: kubeconfig_path</div>
</td>
</tr>
@@ -150,7 +151,7 @@ Parameters
</td>
<td>
<div>Name of Helm plugin.</div>
- <div>Required only if <code>state=absent</code>.</div>
+ <div>Required only if <code>state=absent</code> or <code>state=latest</code>.</div>
</td>
</tr>
<tr>
@@ -173,6 +174,23 @@ Parameters
<tr>
<td colspan="1">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>plugin_version</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Plugin version to install. If this is not specified, the latest version is installed.</div>
+ <div>Ignored when <code>state=absent</code> or <code>state=latest</code>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>state</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -183,10 +201,12 @@ Parameters
<ul style="margin: 0; padding: 0"><b>Choices:</b>
<li>absent</li>
<li><div style="color: blue"><b>present</b>&nbsp;&larr;</div></li>
+ <li>latest</li>
</ul>
</td>
<td>
<div>If <code>state=present</code> the Helm plugin will be installed.</div>
+ <div>If <code>state=latest</code> the Helm plugin will be updated. Added in version 2.3.0.</div>
<div>If <code>state=absent</code> the Helm plugin will be removed.</div>
</td>
</tr>
@@ -237,6 +257,17 @@ Examples
plugin_name: env
state: absent
+ - name: Install Helm plugin with a specific version
+ kubernetes.core.helm_plugin:
+ plugin_version: 2.0.1
+ plugin_path: https://domain/path/to/plugin.tar.gz
+ state: present
+
+ - name: Update Helm plugin
+ kubernetes.core.helm_plugin:
+ plugin_name: secrets
+ state: latest
+
Return Values
diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_repository_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_repository_module.rst
index aa39ede68..ee4169ee7 100644
--- a/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_repository_module.rst
+++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_repository_module.rst
@@ -43,6 +43,22 @@ Parameters
<tr>
<td colspan="1">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>api_key</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Token used to authenticate with the API. Can also be specified via <code>K8S_AUTH_API_KEY</code> environment variable.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>binary_path</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -58,6 +74,117 @@ Parameters
<tr>
<td colspan="1">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>ca_cert</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">path</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Path to a CA certificate used to authenticate with the API. The full certificate chain must be provided to avoid certificate validation errors. Can also be specified via <code>K8S_AUTH_SSL_CA_CERT</code> environment variable.</div>
+ <div style="font-size: small; color: darkgreen"><br/>aliases: ssl_ca_cert</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>context</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.4.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Helm option to specify which kubeconfig context to use.</div>
+ <div>If the value is not specified in the task, the value of environment variable <code>K8S_AUTH_CONTEXT</code> will be used instead.</div>
+ <div style="font-size: small; color: darkgreen"><br/>aliases: kube_context</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>force_update</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.4.0</div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li><div style="color: blue"><b>no</b>&nbsp;&larr;</div></li>
+ <li>yes</li>
+ </ul>
+ </td>
+ <td>
+ <div>Whether or not to replace (overwrite) the repo if it already exists.</div>
+ <div style="font-size: small; color: darkgreen"><br/>aliases: force</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>host</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Provide a URL for accessing the API. Can also be specified via <code>K8S_AUTH_HOST</code> environment variable.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>kubeconfig</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">raw</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.4.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Helm option to specify kubeconfig path to use.</div>
+ <div>If the value is not specified in the task, the value of environment variable <code>K8S_AUTH_KUBECONFIG</code> will be used instead.</div>
+ <div>The configuration can be provided as dictionary.</div>
+ <div style="font-size: small; color: darkgreen"><br/>aliases: kubeconfig_path</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>pass_credentials</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li><div style="color: blue"><b>no</b>&nbsp;&larr;</div></li>
+ <li>yes</li>
+ </ul>
+ </td>
+ <td>
+ <div>Pass credentials to all domains.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>repo_name</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -142,6 +269,27 @@ Parameters
<div style="font-size: small; color: darkgreen"><br/>aliases: username</div>
</td>
</tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>validate_certs</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>no</li>
+ <li><div style="color: blue"><b>yes</b>&nbsp;&larr;</div></li>
+ </ul>
+ </td>
+ <td>
+ <div>Whether or not to verify the API server&#x27;s SSL certificates. Can also be specified via <code>K8S_AUTH_VERIFY_SSL</code> environment variable.</div>
+ <div style="font-size: small; color: darkgreen"><br/>aliases: verify_ssl</div>
+ </td>
+ </tr>
</table>
<br/>
diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_template_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_template_module.rst
index 67e53716b..c89d27e21 100644
--- a/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_template_module.rst
+++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_template_module.rst
@@ -28,12 +28,12 @@ Parameters
<table border=0 cellpadding=0 class="documentation-table">
<tr>
- <th colspan="1">Parameter</th>
+ <th colspan="2">Parameter</th>
<th>Choices/<font color="blue">Defaults</font></th>
<th width="100%">Comments</th>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>binary_path</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -48,7 +48,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>chart_ref</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -67,7 +67,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>chart_repo_url</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -82,7 +82,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>chart_version</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -97,13 +97,14 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>dependency_update</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
<span style="color: purple">boolean</span>
</div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.4.0</div>
</td>
<td>
<ul style="margin: 0; padding: 0"><b>Choices:</b>
@@ -119,7 +120,27 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>disable_hook</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.4.0</div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li><div style="color: blue"><b>no</b>&nbsp;&larr;</div></li>
+ <li>yes</li>
+ </ul>
+ </td>
+ <td>
+ <div>Prevent hooks from running during install.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>include_crds</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -138,7 +159,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>output_dir</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -154,7 +175,40 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>release_name</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.4.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Release name to use in rendered templates.</div>
+ <div style="font-size: small; color: darkgreen"><br/>aliases: name</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>release_namespace</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.4.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>namespace scope for this request.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>release_values</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -171,8 +225,86 @@ Parameters
</td>
</tr>
<tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>set_values</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=dictionary</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.4.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Values to pass to chart configuration.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>value</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Value to pass to chart configuration (e.g phase=prod).</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
<td colspan="1">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>value_type</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">-</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li><div style="color: blue"><b>raw</b>&nbsp;&larr;</div></li>
+ <li>string</li>
+ <li>json</li>
+ <li>file</li>
+ </ul>
+ </td>
+ <td>
+ <div>Use <code>raw</code> set individual value.</div>
+ <div>Use <code>string</code> to force a string for an individual value.</div>
+ <div>Use <code>file</code> to set individual values from a file when the value itself is too long for the command line or is dynamically generated.</div>
+ <div>Use <code>json</code> to set json values (scalars/objects/arrays). This feature requires helm&gt;=3.10.0.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>show_only</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.4.0</div>
+ </td>
+ <td>
+ <b>Default:</b><br/><div style="color: blue">[]</div>
+ </td>
+ <td>
+ <div>Only show manifests rendered from the given templates.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>update_repo_cache</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -190,7 +322,7 @@ Parameters
</td>
</tr>
<tr>
- <td colspan="1">
+ <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>values_files</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
@@ -235,6 +367,24 @@ Examples
dest: myfile.yaml
content: "{{ result.stdout }}"
+ - name: Render MutatingWebhooksConfiguration for revision tag "canary", rev "1-13-0"
+ kubernetes.core.helm_template:
+ chart_ref: istio/istiod
+ chart_version: "1.13.0"
+ release_namespace: "istio-system"
+ show_only:
+ - "templates/revision-tags.yaml"
+ release_values:
+ revision: "1-13-0"
+ revisionTags:
+ - "canary"
+ register: result
+
+ - name: Write templates to file
+ copy:
+ dest: myfile.yaml
+ content: "{{ result.stdout }}"
+
Return Values
diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_cluster_info_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_cluster_info_module.rst
index 5e42983c5..a0b621d66 100644
--- a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_cluster_info_module.rst
+++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_cluster_info_module.rst
@@ -27,8 +27,8 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- python >= 3.6
-- kubernetes >= 12.0.0
+- python >= 3.9
+- kubernetes >= 24.2.0
- PyYAML >= 3.11
@@ -203,12 +203,32 @@ Parameters
</td>
<td>
<div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div>
+ <div>Multiple Kubernetes config file can be provided using separator &#x27;;&#x27; for Windows platform or &#x27;:&#x27; for others platforms.</div>
<div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version &gt;= 17.17.0. Added in version 2.2.0.</div>
</td>
</tr>
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>no_proxy</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>The comma separated list of hosts/domains/IP/CIDR that shouldn&#x27;t go through proxy. Can also be specified via K8S_AUTH_NO_PROXY environment variable.</div>
+ <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. NO_PROXY).</div>
+ <div>This feature requires kubernetes&gt;=19.15.0. When kubernetes library is less than 19.15.0, it fails even no_proxy set in correct.</div>
+ <div>example value is &quot;localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16&quot;</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>password</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_cp_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_cp_module.rst
index c61e1c121..21badc81f 100644
--- a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_cp_module.rst
+++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_cp_module.rst
@@ -25,8 +25,8 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- python >= 3.6
-- kubernetes >= 12.0.0
+- python >= 3.9
+- kubernetes >= 24.2.0
Parameters
@@ -215,6 +215,7 @@ Parameters
</td>
<td>
<div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div>
+ <div>Multiple Kubernetes config file can be provided using separator &#x27;;&#x27; for Windows platform or &#x27;:&#x27; for others platforms.</div>
<div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version &gt;= 17.17.0. Added in version 2.2.0.</div>
</td>
</tr>
@@ -274,6 +275,25 @@ Parameters
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>no_proxy</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>The comma separated list of hosts/domains/IP/CIDR that shouldn&#x27;t go through proxy. Can also be specified via K8S_AUTH_NO_PROXY environment variable.</div>
+ <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. NO_PROXY).</div>
+ <div>This feature requires kubernetes&gt;=19.15.0. When kubernetes library is less than 19.15.0, it fails even no_proxy set in correct.</div>
+ <div>example value is &quot;localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16&quot;</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>password</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -538,7 +558,7 @@ Examples
state: from_pod
# copy content into a file in the remote pod
- - name: Copy /tmp/foo from a remote pod to /tmp/bar locally
+ - name: Copy content into a file in the remote pod
kubernetes.core.k8s_cp:
state: to_pod
namespace: some-namespace
diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_drain_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_drain_module.rst
index fa6e5ffbd..70c2badad 100644
--- a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_drain_module.rst
+++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_drain_module.rst
@@ -29,8 +29,8 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- python >= 3.6
-- kubernetes >= 12.0.0
+- python >= 3.9
+- kubernetes >= 24.2.0
Parameters
@@ -132,6 +132,7 @@ Parameters
</div>
</td>
<td>
+ <b>Default:</b><br/><div style="color: blue">{}</div>
</td>
<td>
<div>Specify options to delete pods.</div>
@@ -147,6 +148,7 @@ Parameters
<div style="font-size: small">
<span style="color: purple">boolean</span>
</div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
</td>
<td>
<ul style="margin: 0; padding: 0"><b>Choices:</b>
@@ -155,7 +157,7 @@ Parameters
</ul>
</td>
<td>
- <div>Continue even if there are pods using emptyDir (local data that will be deleted when the node is drained)</div>
+ <div>Continue even if there are pods using emptyDir (local data that will be deleted when the node is drained).</div>
</td>
</tr>
<tr>
@@ -334,6 +336,7 @@ Parameters
</td>
<td>
<div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div>
+ <div>Multiple Kubernetes config file can be provided using separator &#x27;;&#x27; for Windows platform or &#x27;:&#x27; for others platforms.</div>
<div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version &gt;= 17.17.0. Added in version 2.2.0.</div>
</td>
</tr>
@@ -356,6 +359,25 @@ Parameters
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>no_proxy</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>The comma separated list of hosts/domains/IP/CIDR that shouldn&#x27;t go through proxy. Can also be specified via K8S_AUTH_NO_PROXY environment variable.</div>
+ <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. NO_PROXY).</div>
+ <div>This feature requires kubernetes&gt;=19.15.0. When kubernetes library is less than 19.15.0, it fails even no_proxy set in correct.</div>
+ <div>example value is &quot;localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16&quot;</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>password</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -395,6 +417,25 @@ Parameters
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>pod_selectors</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.5.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Label selector to filter pods on the node.</div>
+ <div>This option has effect only when <code>state</code> is set to <em>drain</em>.</div>
+ <div style="font-size: small; color: darkgreen"><br/>aliases: label_selectors</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>proxy</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -561,7 +602,7 @@ Examples
state: drain
name: foo
delete_options:
- terminate_grace_period: 900
+ terminate_grace_period: 900
- name: Mark node "foo" as schedulable.
kubernetes.core.k8s_drain:
@@ -573,6 +614,14 @@ Examples
state: cordon
name: foo
+ - name: Drain node "foo" using label selector to filter the list of pods to be drained.
+ kubernetes.core.k8s_drain:
+ state: drain
+ name: foo
+ pod_selectors:
+ - 'app!=csi-attacher'
+ - 'app!=csi-provisioner'
+
Return Values
diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_exec_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_exec_module.rst
index a928352ee..49be34212 100644
--- a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_exec_module.rst
+++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_exec_module.rst
@@ -25,8 +25,8 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- python >= 3.6
-- kubernetes >= 12.0.0
+- python >= 3.9
+- kubernetes >= 24.2.0
- PyYAML >= 3.11
@@ -117,7 +117,7 @@ Parameters
<td>
</td>
<td>
- <div>The command to execute</div>
+ <div>The command to execute.</div>
</td>
</tr>
<tr>
@@ -134,6 +134,7 @@ Parameters
<td>
<div>The name of the container in the pod to connect to.</div>
<div>Defaults to only container if there is only one container in the pod.</div>
+ <div>If not specified, will choose the first container from the given pod as kubectl cmdline does.</div>
</td>
</tr>
<tr>
@@ -214,6 +215,7 @@ Parameters
</td>
<td>
<div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div>
+ <div>Multiple Kubernetes config file can be provided using separator &#x27;;&#x27; for Windows platform or &#x27;:&#x27; for others platforms.</div>
<div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version &gt;= 17.17.0. Added in version 2.2.0.</div>
</td>
</tr>
@@ -230,7 +232,26 @@ Parameters
<td>
</td>
<td>
- <div>The pod namespace name</div>
+ <div>The pod namespace name.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>no_proxy</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>The comma separated list of hosts/domains/IP/CIDR that shouldn&#x27;t go through proxy. Can also be specified via K8S_AUTH_NO_PROXY environment variable.</div>
+ <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. NO_PROXY).</div>
+ <div>This feature requires kubernetes&gt;=19.15.0. When kubernetes library is less than 19.15.0, it fails even no_proxy set in correct.</div>
+ <div>example value is &quot;localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16&quot;</div>
</td>
</tr>
<tr>
@@ -285,7 +306,7 @@ Parameters
<td>
</td>
<td>
- <div>The pod name</div>
+ <div>The pod name.</div>
</td>
</tr>
<tr>
@@ -302,7 +323,7 @@ Parameters
<td>
<div>The URL of an HTTP proxy to use for the connection.</div>
<div>Can also be specified via <em>K8S_AUTH_PROXY</em> environment variable.</div>
- <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. HTTP_PROXY).</div>
+ <div>Please note that this module does not pick up typical proxy settings from the environment (for example, HTTP_PROXY).</div>
</td>
</tr>
<tr>
@@ -449,6 +470,13 @@ Examples
msg: "cmd failed"
when: command_status.rc != 0
+ - name: Specify a container name to execute the command on
+ kubernetes.core.k8s_exec:
+ namespace: myproject
+ pod: busybox-test
+ container: manager
+ command: echo "hello"
+
Return Values
diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_info_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_info_module.rst
index e4d248af9..af5f4656d 100644
--- a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_info_module.rst
+++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_info_module.rst
@@ -28,8 +28,8 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- python >= 3.6
-- kubernetes >= 12.0.0
+- python >= 3.9
+- kubernetes >= 24.2.0
- PyYAML >= 3.11
@@ -153,6 +153,7 @@ Parameters
</div>
</td>
<td>
+ <b>Default:</b><br/><div style="color: blue">[]</div>
</td>
<td>
<div>List of field selectors to use to filter results</div>
@@ -161,6 +162,25 @@ Parameters
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>hidden_fields</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.5.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Hide fields matching any of the field definitions in the result</div>
+ <div>An example might be <code>hidden_fields=[metadata.managedFields]</code></div>
+ <div>Only field definitions that don&#x27;t reference list items are supported (so V(spec.containers[0]) would not work)</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>host</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -240,6 +260,7 @@ Parameters
</td>
<td>
<div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div>
+ <div>Multiple Kubernetes config file can be provided using separator &#x27;;&#x27; for Windows platform or &#x27;:&#x27; for others platforms.</div>
<div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version &gt;= 17.17.0. Added in version 2.2.0.</div>
</td>
</tr>
@@ -254,6 +275,7 @@ Parameters
</div>
</td>
<td>
+ <b>Default:</b><br/><div style="color: blue">[]</div>
</td>
<td>
<div>List of label selectors to use to filter results</div>
@@ -298,6 +320,25 @@ Parameters
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>no_proxy</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>The comma separated list of hosts/domains/IP/CIDR that shouldn&#x27;t go through proxy. Can also be specified via K8S_AUTH_NO_PROXY environment variable.</div>
+ <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. NO_PROXY).</div>
+ <div>This feature requires kubernetes&gt;=19.15.0. When kubernetes library is less than 19.15.0, it fails even no_proxy set in correct.</div>
+ <div>example value is &quot;localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16&quot;</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>password</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_inventory.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_inventory.rst
index 79769c1b4..7a8cfd62a 100644
--- a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_inventory.rst
+++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_inventory.rst
@@ -13,6 +13,15 @@ kubernetes.core.k8s
:local:
:depth: 1
+DEPRECATED
+----------
+:Removed in collection release after
+:Why: As discussed in https://github.com/ansible-collections/kubernetes.core/issues/31, we decided to
+remove the k8s inventory plugin in release 4.0.0.
+
+:Alternative: Use :ref:`kubernetes.core.k8s_info <kubernetes.core.k8s_info_module>` and :ref:`ansible.builtin.add_host <ansible.builtin.add_host_module>` instead.
+
+
Synopsis
--------
@@ -27,8 +36,8 @@ Requirements
------------
The below requirements are needed on the local Ansible controller node that executes this inventory.
-- python >= 3.6
-- kubernetes >= 12.0.0
+- python >= 3.9
+- kubernetes >= 24.2.0
- PyYAML >= 3.11
@@ -322,24 +331,24 @@ Examples
# File must be named k8s.yaml or k8s.yml
- # Authenticate with token, and return all pods and services for all namespaces
- plugin: kubernetes.core.k8s
- connections:
- - host: https://192.168.64.4:8443
- api_key: xxxxxxxxxxxxxxxx
- validate_certs: false
+ - name: Authenticate with token, and return all pods and services for all namespaces
+ plugin: kubernetes.core.k8s
+ connections:
+ - host: https://192.168.64.4:8443
+ api_key: xxxxxxxxxxxxxxxx
+ validate_certs: false
- # Use default config (~/.kube/config) file and active context, and return objects for a specific namespace
- plugin: kubernetes.core.k8s
- connections:
- - namespaces:
- - testing
+ - name: Use default config (~/.kube/config) file and active context, and return objects for a specific namespace
+ plugin: kubernetes.core.k8s
+ connections:
+ - namespaces:
+ - testing
- # Use a custom config file, and a specific context.
- plugin: kubernetes.core.k8s
- connections:
- - kubeconfig: /path/to/config
- context: 'awx/192-168-64-4:8443/developer'
+ - name: Use a custom config file, and a specific context.
+ plugin: kubernetes.core.k8s
+ connections:
+ - kubeconfig: /path/to/config
+ context: 'awx/192-168-64-4:8443/developer'
@@ -348,11 +357,15 @@ Status
------
+- This inventory will be removed in version 4.0.0. *[deprecated]*
+- For more information see `DEPRECATED`_.
+
+
Authors
~~~~~~~
-- Chris Houseknecht <@chouseknecht>
-- Fabian von Feilitzsch <@fabianvf>
+- Chris Houseknecht (@chouseknecht)
+- Fabian von Feilitzsch (@fabianvf)
.. hint::
diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_json_patch_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_json_patch_module.rst
index 926c84104..3ab82a1b2 100644
--- a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_json_patch_module.rst
+++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_json_patch_module.rst
@@ -27,8 +27,8 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- python >= 3.6
-- kubernetes >= 12.0.0
+- python >= 3.9
+- kubernetes >= 24.2.0
- PyYAML >= 3.11
- jsonpatch
@@ -220,6 +220,7 @@ Parameters
</td>
<td>
<div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div>
+ <div>Multiple Kubernetes config file can be provided using separator &#x27;;&#x27; for Windows platform or &#x27;:&#x27; for others platforms.</div>
<div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version &gt;= 17.17.0. Added in version 2.2.0.</div>
</td>
</tr>
@@ -259,6 +260,25 @@ Parameters
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>no_proxy</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>The comma separated list of hosts/domains/IP/CIDR that shouldn&#x27;t go through proxy. Can also be specified via K8S_AUTH_NO_PROXY environment variable.</div>
+ <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. NO_PROXY).</div>
+ <div>This feature requires kubernetes&gt;=19.15.0. When kubernetes library is less than 19.15.0, it fails even no_proxy set in correct.</div>
+ <div>example value is &quot;localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16&quot;</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>password</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -594,7 +614,7 @@ Examples
path: /metadata/labels/app
value: myapp
- op: replace
- patch: /spec/containers/0/image
+ path: /spec/containers/0/image
value: nginx
diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_log_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_log_module.rst
index a639fb7d2..f2cbe671b 100644
--- a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_log_module.rst
+++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_log_module.rst
@@ -28,8 +28,8 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- python >= 3.6
-- kubernetes >= 12.0.0
+- python >= 3.9
+- kubernetes >= 24.2.0
- PyYAML >= 3.11
@@ -47,6 +47,27 @@ Parameters
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>all_containers</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.4.0</div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>no</li>
+ <li>yes</li>
+ </ul>
+ </td>
+ <td>
+ <div>If set to <code>true</code>, retrieve all containers&#x27; logs in the pod(s).</div>
+ <div>mutually exclusive with <code>container</code>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>api_key</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -141,7 +162,8 @@ Parameters
<td>
<div>Use to specify the container within a pod to grab the log from.</div>
<div>If there is only one container, this will default to that container.</div>
- <div>If there is more than one container, this option is required.</div>
+ <div>If there is more than one container, this option is required or set <em>all_containers</em> to <code>true</code>.</div>
+ <div>mutually exclusive with <code>all_containers</code>.</div>
</td>
</tr>
<tr>
@@ -240,6 +262,7 @@ Parameters
</td>
<td>
<div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div>
+ <div>Multiple Kubernetes config file can be provided using separator &#x27;;&#x27; for Windows platform or &#x27;:&#x27; for others platforms.</div>
<div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version &gt;= 17.17.0. Added in version 2.2.0.</div>
</td>
</tr>
@@ -254,6 +277,7 @@ Parameters
</div>
</td>
<td>
+ <b>Default:</b><br/><div style="color: blue">[]</div>
</td>
<td>
<div>List of label selectors to use to filter results</div>
@@ -298,6 +322,25 @@ Parameters
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>no_proxy</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>The comma separated list of hosts/domains/IP/CIDR that shouldn&#x27;t go through proxy. Can also be specified via K8S_AUTH_NO_PROXY environment variable.</div>
+ <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. NO_PROXY).</div>
+ <div>This feature requires kubernetes&gt;=19.15.0. When kubernetes library is less than 19.15.0, it fails even no_proxy set in correct.</div>
+ <div>example value is &quot;localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16&quot;</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>password</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -337,6 +380,26 @@ Parameters
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>previous</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.4.0</div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li><div style="color: blue"><b>no</b>&nbsp;&larr;</div></li>
+ <li>yes</li>
+ </ul>
+ </td>
+ <td>
+ <div>If <code>true</code>, print the logs for the previous instance of the container in a pod if it exists.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>proxy</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -438,6 +501,22 @@ Parameters
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>tail_lines</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.4.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A number of lines from the end of the logs to retrieve.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>username</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -519,8 +598,16 @@ Examples
kind: DeploymentConfig
namespace: testing
name: example
+ tail_lines: 100
register: log
+ # This will get the logs from all containers in Pod
+ - name: Get the logs from all containers in pod
+ kubernetes.core.k8s_log:
+ namespace: testing
+ name: some-pod
+ all_containers: true
+
Return Values
diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_lookup.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_lookup.rst
index 9e428c8be..347a8c055 100644
--- a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_lookup.rst
+++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_lookup.rst
@@ -26,8 +26,8 @@ Requirements
------------
The below requirements are needed on the local Ansible controller node that executes this lookup.
-- python >= 3.6
-- kubernetes >= 12.0.0
+- python >= 3.9
+- kubernetes >= 24.2.0
- PyYAML >= 3.11
@@ -438,106 +438,28 @@ Common return values are documented `here <https://docs.ansible.com/ansible/late
<table border=0 cellpadding=0 class="documentation-table">
<tr>
- <th colspan="2">Key</th>
+ <th colspan="1">Key</th>
<th>Returned</th>
<th width="100%">Description</th>
</tr>
<tr>
- <td colspan="2">
+ <td colspan="1">
<div class="ansibleOptionAnchor" id="return-"></div>
<b>_list</b>
<a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
<div style="font-size: small">
- <span style="color: purple">complex</span>
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=dictionary</span>
</div>
</td>
<td></td>
<td>
<div>One ore more object definitions returned from the API.</div>
<br/>
+ <div style="font-size: smaller"><b>Sample:</b></div>
+ <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">[{&#x27;kind&#x27;: &#x27;ConfigMap&#x27;, &#x27;apiVersion&#x27;: &#x27;v1&#x27;, &#x27;metadata&#x27;: {&#x27;creationTimestamp&#x27;: &#x27;2022-03-04T13:59:49Z&#x27;, &#x27;name&#x27;: &#x27;my-config-map&#x27;, &#x27;namespace&#x27;: &#x27;default&#x27;, &#x27;resourceVersion&#x27;: &#x27;418&#x27;, &#x27;uid&#x27;: &#x27;5714b011-d090-4eac-8272-a0ea82ec0abd&#x27;}, &#x27;data&#x27;: {&#x27;key1&#x27;: &#x27;val1&#x27;}}]</div>
</td>
</tr>
- <tr>
- <td class="elbow-placeholder">&nbsp;</td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="return-"></div>
- <b>api_version</b>
- <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>success</td>
- <td>
- <div>The versioned schema of this representation of an object.</div>
- <br/>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder">&nbsp;</td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="return-"></div>
- <b>kind</b>
- <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>success</td>
- <td>
- <div>Represents the REST resource this object represents.</div>
- <br/>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder">&nbsp;</td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="return-"></div>
- <b>metadata</b>
- <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
- <div style="font-size: small">
- <span style="color: purple">complex</span>
- </div>
- </td>
- <td>success</td>
- <td>
- <div>Standard object metadata. Includes name, namespace, annotations, labels, etc.</div>
- <br/>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder">&nbsp;</td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="return-"></div>
- <b>spec</b>
- <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
- <div style="font-size: small">
- <span style="color: purple">complex</span>
- </div>
- </td>
- <td>success</td>
- <td>
- <div>Specific attributes of the object. Will vary based on the <em>api_version</em> and <em>kind</em>.</div>
- <br/>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder">&nbsp;</td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="return-"></div>
- <b>status</b>
- <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
- <div style="font-size: small">
- <span style="color: purple">complex</span>
- </div>
- </td>
- <td>success</td>
- <td>
- <div>Current status details for the object.</div>
- <br/>
- </td>
- </tr>
-
</table>
<br/><br/>
@@ -549,8 +471,8 @@ Status
Authors
~~~~~~~
-- Chris Houseknecht <@chouseknecht>
-- Fabian von Feilitzsch <@fabianvf>
+- Chris Houseknecht (@chouseknecht)
+- Fabian von Feilitzsch (@fabianvf)
.. hint::
diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_module.rst
index 9db23e054..d4f9d23c0 100644
--- a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_module.rst
+++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_module.rst
@@ -29,8 +29,8 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- python >= 3.6
-- kubernetes >= 12.0.0
+- python >= 3.9
+- kubernetes >= 24.2.0
- PyYAML >= 3.11
- jsonpatch
@@ -211,6 +211,30 @@ Parameters
<tr>
<td colspan="3">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>delete_all</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.5.0</div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li><div style="color: blue"><b>no</b>&nbsp;&larr;</div></li>
+ <li>yes</li>
+ </ul>
+ </td>
+ <td>
+ <div>When this option is set to <em>true</em> and <em>state=absent</em>, module will delete all resources of the specified resource type in the requested namespace.</div>
+ <div>Ignored when <code>state</code> is not set to <em>absent</em> or when one of (src), <code>name</code> or <code>resource_definition</code> is provided.</div>
+ <div>Parameter <code>kind</code> is required to use this option.</div>
+ <div>This parameter can be used with <code>label_selectors</code> to restrict the resources to be deleted.</div>
+ <div style="font-size: small; color: darkgreen"><br/>aliases: all</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="3">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>delete_options</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -339,6 +363,45 @@ Parameters
<tr>
<td colspan="3">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>generate_name</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Use to specify the basis of an object name and random characters will be added automatically on server to generate a unique name.</div>
+ <div>This option is ignored when <em>state</em> is not set to <code>present</code> or when <em>apply</em> is set to <code>yes</code>.</div>
+ <div>If <em>resource definition</em> is provided, the <em>metadata.generateName</em> value from the <em>resource_definition</em> will override this option.</div>
+ <div>If <em>resource definition</em> is provided, and contains <em>metadata.name</em>, this option is ignored.</div>
+ <div>mutually exclusive with <code>name</code>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="3">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>hidden_fields</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.5.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Hide fields matching this option in the result</div>
+ <div>An example might be <code>hidden_fields=[metadata.managedFields]</code></div>
+ <div>Only field definitions that don&#x27;t reference list items are supported (so V(spec.containers[0]) would not work)</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="3">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>host</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -417,6 +480,7 @@ Parameters
</td>
<td>
<div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div>
+ <div>Multiple Kubernetes config file can be provided using separator &#x27;;&#x27; for Windows platform or &#x27;:&#x27; for others platforms.</div>
<div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version &gt;= 17.17.0. Added in version 2.2.0.</div>
</td>
</tr>
@@ -460,7 +524,7 @@ Parameters
<div>See <a href='https://kubernetes.io/docs/tasks/run-application/update-api-object-kubectl-patch/#use-a-json-merge-patch-to-update-a-deployment'>https://kubernetes.io/docs/tasks/run-application/update-api-object-kubectl-patch/#use-a-json-merge-patch-to-update-a-deployment</a></div>
<div>If more than one <code>merge_type</code> is given, the merge_types will be tried in order. This defaults to <code>[&#x27;strategic-merge&#x27;, &#x27;merge&#x27;]</code>, which is ideal for using the same parameters on resource kinds that combine Custom Resources and built-in resources.</div>
<div>mutually exclusive with <code>apply</code></div>
- <div><em>merge_type=json</em> is deprecated and will be removed in version 3.0.0. Please use <span class='module'>kubernetes.core.k8s_json_patch</span> instead.</div>
+ <div><em>merge_type=json</em> is deprecated and will be removed in version 4.0.0. Please use <span class='module'>kubernetes.core.k8s_json_patch</span> instead.</div>
</td>
</tr>
<tr>
@@ -502,6 +566,25 @@ Parameters
<tr>
<td colspan="3">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>no_proxy</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>The comma separated list of hosts/domains/IP/CIDR that shouldn&#x27;t go through proxy. Can also be specified via K8S_AUTH_NO_PROXY environment variable.</div>
+ <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. NO_PROXY).</div>
+ <div>This feature requires kubernetes&gt;=19.15.0. When kubernetes library is less than 19.15.0, it fails even no_proxy set in correct.</div>
+ <div>example value is &quot;localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16&quot;</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="3">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>password</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -643,6 +726,63 @@ Parameters
<tr>
<td colspan="3">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>server_side_apply</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>When this option is set, apply runs in the server instead of the client.</div>
+ <div>Ignored if <code>apply</code> is not set or is set to False.</div>
+ <div>This option requires &quot;kubernetes &gt;= 19.15.0&quot;.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>field_manager</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ / <span style="color: red">required</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Name of the manager used to track field ownership.</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>force_conflicts</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li><div style="color: blue"><b>no</b>&nbsp;&larr;</div></li>
+ <li>yes</li>
+ </ul>
+ </td>
+ <td>
+ <div>A conflict is a special status error that occurs when an Server Side Apply operation tries to change a field, which another user also claims to manage.</div>
+ <div>When set to True, server-side apply will force the changes against conflicts.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="3">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>src</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -654,7 +794,8 @@ Parameters
<td>
<div>Provide a path to a file containing a valid YAML definition of an object or objects to be created or updated. Mutually exclusive with <em>resource_definition</em>. NOTE: <em>kind</em>, <em>api_version</em>, <em>name</em>, and <em>namespace</em> will be overwritten by corresponding values found in the configuration read in from the <em>src</em> file.</div>
<div>Reads from the local file system. To read from the Ansible controller&#x27;s file system, including vaulted files, use the file lookup plugin or template lookup plugin, combined with the from_yaml filter, and pass the result to <em>resource_definition</em>. See Examples below.</div>
- <div>Mutually exclusive with <em>template</em> in case of <span class='module'>k8s</span> module.</div>
+ <div>The URL to manifest files that can be used to create the resource. Added in version 2.4.0.</div>
+ <div>Mutually exclusive with <em>template</em> in case of <span class='module'>kubernetes.core.k8s</span> module.</div>
</td>
</tr>
<tr>
@@ -1016,6 +1157,14 @@ Examples
state: present
definition: "{{ lookup('file', '/testing/deployment.yml') | from_yaml }}"
+ - name: >-
+ (Alternative) Read definition file from the Ansible controller file system.
+ In this case, the definition file contains multiple YAML documents, separated by ---.
+ If the definition file has been encrypted with Ansible Vault it will automatically be decrypted.
+ kubernetes.core.k8s:
+ state: present
+ definition: "{{ lookup('file', '/testing/deployment.yml') | from_yaml_all }}"
+
- name: Read definition template file from the Ansible controller file system
kubernetes.core.k8s:
state: present
@@ -1033,10 +1182,10 @@ Examples
kubernetes.core.k8s:
state: present
template:
- - path: '/testing/deployment_one.j2'
- - path: '/testing/deployment_two.j2'
- variable_start_string: '[['
- variable_end_string: ']]'
+ - path: '/testing/deployment_one.j2'
+ - path: '/testing/deployment_two.j2'
+ variable_start_string: '[['
+ variable_end_string: ']]'
- name: fail on validation errors
kubernetes.core.k8s:
@@ -1093,6 +1242,41 @@ Examples
labels:
support: patch
+ # Create object using generateName
+ - name: create resource using name generated by the server
+ kubernetes.core.k8s:
+ state: present
+ generate_name: pod-
+ definition:
+ apiVersion: v1
+ kind: Pod
+ spec:
+ containers:
+ - name: py
+ image: python:3.7-alpine
+ imagePullPolicy: IfNotPresent
+
+ # Server side apply
+ - name: Create configmap using server side apply
+ kubernetes.core.k8s:
+ namespace: testing
+ definition:
+ apiVersion: v1
+ kind: ConfigMap
+ metadata:
+ name: my-configmap
+ apply: yes
+ server_side_apply:
+ field_manager: ansible
+
+ # Delete all Deployment from specified namespace
+ - name: Delete all Deployment from specified namespace
+ kubernetes.core.k8s:
+ api_version: apps/v1
+ namespace: testing
+ kind: Deployment
+ delete_all: true
+
Return Values
diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_rollback_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_rollback_module.rst
index 99ff84b97..f5f29aa50 100644
--- a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_rollback_module.rst
+++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_rollback_module.rst
@@ -27,8 +27,8 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- python >= 3.6
-- kubernetes >= 12.0.0
+- python >= 3.9
+- kubernetes >= 24.2.0
- PyYAML >= 3.11
@@ -152,6 +152,7 @@ Parameters
</div>
</td>
<td>
+ <b>Default:</b><br/><div style="color: blue">[]</div>
</td>
<td>
<div>List of field selectors to use to filter results.</div>
@@ -238,6 +239,7 @@ Parameters
</td>
<td>
<div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div>
+ <div>Multiple Kubernetes config file can be provided using separator &#x27;;&#x27; for Windows platform or &#x27;:&#x27; for others platforms.</div>
<div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version &gt;= 17.17.0. Added in version 2.2.0.</div>
</td>
</tr>
@@ -252,6 +254,7 @@ Parameters
</div>
</td>
<td>
+ <b>Default:</b><br/><div style="color: blue">[]</div>
</td>
<td>
<div>List of label selectors to use to filter results.</div>
@@ -296,6 +299,25 @@ Parameters
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>no_proxy</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>The comma separated list of hosts/domains/IP/CIDR that shouldn&#x27;t go through proxy. Can also be specified via K8S_AUTH_NO_PROXY environment variable.</div>
+ <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. NO_PROXY).</div>
+ <div>This feature requires kubernetes&gt;=19.15.0. When kubernetes library is less than 19.15.0, it fails even no_proxy set in correct.</div>
+ <div>example value is &quot;localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16&quot;</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>password</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_scale_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_scale_module.rst
index c1f56a089..101eee816 100644
--- a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_scale_module.rst
+++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_scale_module.rst
@@ -25,8 +25,8 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- python >= 3.6
-- kubernetes >= 12.0.0
+- python >= 3.9
+- kubernetes >= 24.2.0
- PyYAML >= 3.11
@@ -255,6 +255,7 @@ Parameters
</td>
<td>
<div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div>
+ <div>Multiple Kubernetes config file can be provided using separator &#x27;;&#x27; for Windows platform or &#x27;:&#x27; for others platforms.</div>
<div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version &gt;= 17.17.0. Added in version 2.2.0.</div>
</td>
</tr>
@@ -270,6 +271,7 @@ Parameters
<div style="font-style: italic; font-size: small; color: darkgreen">added in 2.0.0</div>
</td>
<td>
+ <b>Default:</b><br/><div style="color: blue">[]</div>
</td>
<td>
<div>List of label selectors to use to filter results.</div>
@@ -314,6 +316,25 @@ Parameters
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>no_proxy</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>The comma separated list of hosts/domains/IP/CIDR that shouldn&#x27;t go through proxy. Can also be specified via K8S_AUTH_NO_PROXY environment variable.</div>
+ <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. NO_PROXY).</div>
+ <div>This feature requires kubernetes&gt;=19.15.0. When kubernetes library is less than 19.15.0, it fails even no_proxy set in correct.</div>
+ <div>example value is &quot;localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16&quot;</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>password</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -497,7 +518,8 @@ Parameters
<td>
<div>Provide a path to a file containing a valid YAML definition of an object or objects to be created or updated. Mutually exclusive with <em>resource_definition</em>. NOTE: <em>kind</em>, <em>api_version</em>, <em>name</em>, and <em>namespace</em> will be overwritten by corresponding values found in the configuration read in from the <em>src</em> file.</div>
<div>Reads from the local file system. To read from the Ansible controller&#x27;s file system, including vaulted files, use the file lookup plugin or template lookup plugin, combined with the from_yaml filter, and pass the result to <em>resource_definition</em>. See Examples below.</div>
- <div>Mutually exclusive with <em>template</em> in case of <span class='module'>k8s</span> module.</div>
+ <div>The URL to manifest files that can be used to create the resource. Added in version 2.4.0.</div>
+ <div>Mutually exclusive with <em>template</em> in case of <span class='module'>kubernetes.core.k8s</span> module.</div>
</td>
</tr>
<tr>
diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_service_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_service_module.rst
index 2941b9171..57ebe6d12 100644
--- a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_service_module.rst
+++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_service_module.rst
@@ -24,8 +24,8 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- python >= 3.6
-- kubernetes >= 12.0.0
+- python >= 3.9
+- kubernetes >= 24.2.0
Parameters
@@ -220,6 +220,7 @@ Parameters
</td>
<td>
<div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div>
+ <div>Multiple Kubernetes config file can be provided using separator &#x27;;&#x27; for Windows platform or &#x27;:&#x27; for others platforms.</div>
<div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version &gt;= 17.17.0. Added in version 2.2.0.</div>
</td>
</tr>
@@ -283,6 +284,25 @@ Parameters
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>no_proxy</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>The comma separated list of hosts/domains/IP/CIDR that shouldn&#x27;t go through proxy. Can also be specified via K8S_AUTH_NO_PROXY environment variable.</div>
+ <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. NO_PROXY).</div>
+ <div>This feature requires kubernetes&gt;=19.15.0. When kubernetes library is less than 19.15.0, it fails even no_proxy set in correct.</div>
+ <div>example value is &quot;localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16&quot;</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>password</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -468,7 +488,8 @@ Parameters
<td>
<div>Provide a path to a file containing a valid YAML definition of an object or objects to be created or updated. Mutually exclusive with <em>resource_definition</em>. NOTE: <em>kind</em>, <em>api_version</em>, <em>name</em>, and <em>namespace</em> will be overwritten by corresponding values found in the configuration read in from the <em>src</em> file.</div>
<div>Reads from the local file system. To read from the Ansible controller&#x27;s file system, including vaulted files, use the file lookup plugin or template lookup plugin, combined with the from_yaml filter, and pass the result to <em>resource_definition</em>. See Examples below.</div>
- <div>Mutually exclusive with <em>template</em> in case of <span class='module'>k8s</span> module.</div>
+ <div>The URL to manifest files that can be used to create the resource. Added in version 2.4.0.</div>
+ <div>Mutually exclusive with <em>template</em> in case of <span class='module'>kubernetes.core.k8s</span> module.</div>
</td>
</tr>
<tr>
diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_taint_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_taint_module.rst
index 4c342a207..b3a089740 100644
--- a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_taint_module.rst
+++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_taint_module.rst
@@ -26,8 +26,8 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- python >= 3.6
-- kubernetes >= 12.0.0
+- python >= 3.9
+- kubernetes >= 24.2.0
Parameters
@@ -182,6 +182,7 @@ Parameters
</td>
<td>
<div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div>
+ <div>Multiple Kubernetes config file can be provided using separator &#x27;;&#x27; for Windows platform or &#x27;:&#x27; for others platforms.</div>
<div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version &gt;= 17.17.0. Added in version 2.2.0.</div>
</td>
</tr>
diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.kubectl_connection.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.kubectl_connection.rst
index 595ee4059..48db35992 100644
--- a/ansible_collections/kubernetes/core/docs/kubernetes.core.kubectl_connection.rst
+++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.kubectl_connection.rst
@@ -208,6 +208,28 @@ Parameters
</td>
<td>
<div>Path to a kubectl config file. Defaults to <em>~/.kube/config</em></div>
+ <div>The configuration can be provided as dictionary. Added in version 2.4.0.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>kubectl_local_env_vars</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ <div style="font-style: italic; font-size: small; color: darkgreen">added in 3.1.0</div>
+ </td>
+ <td>
+ <b>Default:</b><br/><div style="color: blue">{}</div>
+ </td>
+ <td>
+ <div>var: ansible_kubectl_local_env_vars</div>
+ </td>
+ <td>
+ <div>Local enviromantal variable to be passed locally to the kubectl command line.</div>
+ <div>Please be aware that this passes information directly on the command line and it could expose sensitive data.</div>
</td>
</tr>
<tr>
@@ -354,7 +376,7 @@ Status
Authors
~~~~~~~
-- xuxinkun
+- xuxinkun (@xuxinkun)
.. hint::
diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.kustomize_lookup.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.kustomize_lookup.rst
index 38d328ed7..423e8aaff 100644
--- a/ansible_collections/kubernetes/core/docs/kubernetes.core.kustomize_lookup.rst
+++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.kustomize_lookup.rst
@@ -80,6 +80,24 @@ Parameters
<tr>
<td colspan="1">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>enable_helm</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">-</span>
+ </div>
+ </td>
+ <td>
+ <b>Default:</b><br/><div style="color: blue">"False"</div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Enable the helm chart inflation generator</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>opt_dirs</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -112,17 +130,21 @@ Examples
.. code-block:: yaml
- name: Run lookup using kustomize
- set_fact:
+ ansible.builtin.set_fact:
resources: "{{ lookup('kubernetes.core.kustomize', binary_path='/path/to/kustomize') }}"
- name: Run lookup using kubectl kustomize
- set_fact:
+ ansible.builtin.set_fact:
resources: "{{ lookup('kubernetes.core.kustomize', binary_path='/path/to/kubectl') }}"
- name: Create kubernetes resources for lookup output
- k8s:
+ kubernetes.core.k8s:
definition: "{{ lookup('kubernetes.core.kustomize', dir='/path/to/kustomization') }}"
+ - name: Create kubernetes resources for lookup output with `--enable-helm` set
+ kubernetes.core.k8s:
+ definition: "{{ lookup('kubernetes.core.kustomize', dir='/path/to/kustomization', enable_helm=True) }}"
+
Return Values
@@ -133,106 +155,27 @@ Common return values are documented `here <https://docs.ansible.com/ansible/late
<table border=0 cellpadding=0 class="documentation-table">
<tr>
- <th colspan="2">Key</th>
+ <th colspan="1">Key</th>
<th>Returned</th>
<th width="100%">Description</th>
</tr>
<tr>
- <td colspan="2">
- <div class="ansibleOptionAnchor" id="return-"></div>
- <b>_list</b>
- <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
- <div style="font-size: small">
- <span style="color: purple">complex</span>
- </div>
- </td>
- <td></td>
- <td>
- <div>One ore more object definitions returned from the tool execution.</div>
- <br/>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder">&nbsp;</td>
<td colspan="1">
<div class="ansibleOptionAnchor" id="return-"></div>
- <b>api_version</b>
- <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
- <div style="font-size: small">
- <span style="color: purple">string</span>
- </div>
- </td>
- <td>success</td>
- <td>
- <div>The versioned schema of this representation of an object.</div>
- <br/>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder">&nbsp;</td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="return-"></div>
- <b>kind</b>
+ <b>_list</b>
<a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
<div style="font-size: small">
<span style="color: purple">string</span>
</div>
</td>
- <td>success</td>
- <td>
- <div>Represents the REST resource this object represents.</div>
- <br/>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder">&nbsp;</td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="return-"></div>
- <b>metadata</b>
- <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
- <div style="font-size: small">
- <span style="color: purple">complex</span>
- </div>
- </td>
- <td>success</td>
- <td>
- <div>Standard object metadata. Includes name, namespace, annotations, labels, etc.</div>
- <br/>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder">&nbsp;</td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="return-"></div>
- <b>spec</b>
- <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
- <div style="font-size: small">
- <span style="color: purple">complex</span>
- </div>
- </td>
- <td>success</td>
- <td>
- <div>Specific attributes of the object. Will vary based on the <em>api_version</em> and <em>kind</em>.</div>
- <br/>
- </td>
- </tr>
- <tr>
- <td class="elbow-placeholder">&nbsp;</td>
- <td colspan="1">
- <div class="ansibleOptionAnchor" id="return-"></div>
- <b>status</b>
- <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
- <div style="font-size: small">
- <span style="color: purple">complex</span>
- </div>
- </td>
- <td>success</td>
+ <td></td>
<td>
- <div>Current status details for the object.</div>
+ <div>YAML string for the object definitions returned from the tool execution.</div>
<br/>
+ <div style="font-size: smaller"><b>Sample:</b></div>
+ <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">{&#x27;kind&#x27;: &#x27;ConfigMap&#x27;, &#x27;apiVersion&#x27;: &#x27;v1&#x27;, &#x27;metadata&#x27;: {&#x27;name&#x27;: &#x27;my-config-map&#x27;, &#x27;namespace&#x27;: &#x27;default&#x27;}, &#x27;data&#x27;: {&#x27;key1&#x27;: &#x27;val1&#x27;}}</div>
</td>
</tr>
-
</table>
<br/><br/>
@@ -244,7 +187,7 @@ Status
Authors
~~~~~~~
-- Aubin Bikouo <@abikouo>
+- Aubin Bikouo (@abikouo)
.. hint::
diff --git a/ansible_collections/kubernetes/core/meta/runtime.yml b/ansible_collections/kubernetes/core/meta/runtime.yml
index b9a963766..99134a2c3 100644
--- a/ansible_collections/kubernetes/core/meta/runtime.yml
+++ b/ansible_collections/kubernetes/core/meta/runtime.yml
@@ -1,5 +1,5 @@
---
-requires_ansible: ">=2.9.17"
+requires_ansible: '>=2.14.0'
action_groups:
helm:
@@ -20,6 +20,12 @@ plugin_routing:
inventory:
openshift:
redirect: community.okd.openshift
+ k8s:
+ deprecation:
+ removal_version: 4.0.0
+ warning_text: >-
+ The k8s inventory plugin has been deprecated and
+ will be removed in release 4.0.0.
modules:
k8s_auth:
redirect: community.okd.k8s_auth
@@ -29,18 +35,18 @@ plugin_routing:
warning_text: Use kubernetes.core.k8s_info instead.
k8s_raw:
tombstone:
- removal_version: "0.1.0"
+ removal_version: 0.1.0
warning_text: The k8s_raw module was slated for deprecation in Ansible 2.10 and has been removed. Use kubernetes.core.k8s instead.
openshift_raw:
tombstone:
- removal_version: "0.1.0"
+ removal_version: 0.1.0
warning_text: The openshift_raw module was slated for deprecation in Ansible 2.10 and has been removed. Use kubernetes.core.k8s instead.
openshift_scale:
tombstone:
- removal_version: "0.1.0"
+ removal_version: 0.1.0
warning_text: The openshift_scale module was slated for deprecation in Ansible 2.10 and has been removed. Use kubernetes.core.k8s_scale instead.
lookup:
openshift:
tombstone:
- removal_version: "0.1.0"
+ removal_version: 0.1.0
warning_text: The openshift lookup plugin was slated for deprecation in Ansible 2.10 and has been removed. Use kubernetes.core.k8s instead.
diff --git a/ansible_collections/kubernetes/core/plugins/action/helm.py b/ansible_collections/kubernetes/core/plugins/action/helm.py
index 181daca4e..650e0beaf 100644
--- a/ansible_collections/kubernetes/core/plugins/action/helm.py
+++ b/ansible_collections/kubernetes/core/plugins/action/helm.py
@@ -8,21 +8,21 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
import copy
-import traceback
import os
-from contextlib import contextmanager
import platform
+import traceback
+from contextlib import contextmanager
from ansible.config.manager import ensure_type
from ansible.errors import (
- AnsibleError,
- AnsibleFileNotFound,
AnsibleAction,
AnsibleActionFail,
+ AnsibleError,
+ AnsibleFileNotFound,
)
+from ansible.module_utils._text import to_bytes, to_native, to_text
from ansible.module_utils.parsing.convert_bool import boolean
-from ansible.module_utils.six import string_types, iteritems
-from ansible.module_utils._text import to_text, to_bytes, to_native
+from ansible.module_utils.six import iteritems, string_types
from ansible.plugins.action import ActionBase
@@ -55,7 +55,6 @@ ENV_KUBECONFIG_PATH_SEPARATOR = ";" if platform.system() == "Windows" else ":"
class ActionModule(ActionBase):
-
TRANSFERS_FILES = True
DEFAULT_NEWLINE_SEQUENCE = "\n"
diff --git a/ansible_collections/kubernetes/core/plugins/action/helm_info.py b/ansible_collections/kubernetes/core/plugins/action/helm_info.py
index 181daca4e..650e0beaf 100644
--- a/ansible_collections/kubernetes/core/plugins/action/helm_info.py
+++ b/ansible_collections/kubernetes/core/plugins/action/helm_info.py
@@ -8,21 +8,21 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
import copy
-import traceback
import os
-from contextlib import contextmanager
import platform
+import traceback
+from contextlib import contextmanager
from ansible.config.manager import ensure_type
from ansible.errors import (
- AnsibleError,
- AnsibleFileNotFound,
AnsibleAction,
AnsibleActionFail,
+ AnsibleError,
+ AnsibleFileNotFound,
)
+from ansible.module_utils._text import to_bytes, to_native, to_text
from ansible.module_utils.parsing.convert_bool import boolean
-from ansible.module_utils.six import string_types, iteritems
-from ansible.module_utils._text import to_text, to_bytes, to_native
+from ansible.module_utils.six import iteritems, string_types
from ansible.plugins.action import ActionBase
@@ -55,7 +55,6 @@ ENV_KUBECONFIG_PATH_SEPARATOR = ";" if platform.system() == "Windows" else ":"
class ActionModule(ActionBase):
-
TRANSFERS_FILES = True
DEFAULT_NEWLINE_SEQUENCE = "\n"
diff --git a/ansible_collections/kubernetes/core/plugins/action/helm_plugin.py b/ansible_collections/kubernetes/core/plugins/action/helm_plugin.py
index 181daca4e..650e0beaf 100644
--- a/ansible_collections/kubernetes/core/plugins/action/helm_plugin.py
+++ b/ansible_collections/kubernetes/core/plugins/action/helm_plugin.py
@@ -8,21 +8,21 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
import copy
-import traceback
import os
-from contextlib import contextmanager
import platform
+import traceback
+from contextlib import contextmanager
from ansible.config.manager import ensure_type
from ansible.errors import (
- AnsibleError,
- AnsibleFileNotFound,
AnsibleAction,
AnsibleActionFail,
+ AnsibleError,
+ AnsibleFileNotFound,
)
+from ansible.module_utils._text import to_bytes, to_native, to_text
from ansible.module_utils.parsing.convert_bool import boolean
-from ansible.module_utils.six import string_types, iteritems
-from ansible.module_utils._text import to_text, to_bytes, to_native
+from ansible.module_utils.six import iteritems, string_types
from ansible.plugins.action import ActionBase
@@ -55,7 +55,6 @@ ENV_KUBECONFIG_PATH_SEPARATOR = ";" if platform.system() == "Windows" else ":"
class ActionModule(ActionBase):
-
TRANSFERS_FILES = True
DEFAULT_NEWLINE_SEQUENCE = "\n"
diff --git a/ansible_collections/kubernetes/core/plugins/action/helm_plugin_info.py b/ansible_collections/kubernetes/core/plugins/action/helm_plugin_info.py
index 181daca4e..650e0beaf 100644
--- a/ansible_collections/kubernetes/core/plugins/action/helm_plugin_info.py
+++ b/ansible_collections/kubernetes/core/plugins/action/helm_plugin_info.py
@@ -8,21 +8,21 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
import copy
-import traceback
import os
-from contextlib import contextmanager
import platform
+import traceback
+from contextlib import contextmanager
from ansible.config.manager import ensure_type
from ansible.errors import (
- AnsibleError,
- AnsibleFileNotFound,
AnsibleAction,
AnsibleActionFail,
+ AnsibleError,
+ AnsibleFileNotFound,
)
+from ansible.module_utils._text import to_bytes, to_native, to_text
from ansible.module_utils.parsing.convert_bool import boolean
-from ansible.module_utils.six import string_types, iteritems
-from ansible.module_utils._text import to_text, to_bytes, to_native
+from ansible.module_utils.six import iteritems, string_types
from ansible.plugins.action import ActionBase
@@ -55,7 +55,6 @@ ENV_KUBECONFIG_PATH_SEPARATOR = ";" if platform.system() == "Windows" else ":"
class ActionModule(ActionBase):
-
TRANSFERS_FILES = True
DEFAULT_NEWLINE_SEQUENCE = "\n"
diff --git a/ansible_collections/kubernetes/core/plugins/action/helm_repository.py b/ansible_collections/kubernetes/core/plugins/action/helm_repository.py
index 181daca4e..650e0beaf 100644
--- a/ansible_collections/kubernetes/core/plugins/action/helm_repository.py
+++ b/ansible_collections/kubernetes/core/plugins/action/helm_repository.py
@@ -8,21 +8,21 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
import copy
-import traceback
import os
-from contextlib import contextmanager
import platform
+import traceback
+from contextlib import contextmanager
from ansible.config.manager import ensure_type
from ansible.errors import (
- AnsibleError,
- AnsibleFileNotFound,
AnsibleAction,
AnsibleActionFail,
+ AnsibleError,
+ AnsibleFileNotFound,
)
+from ansible.module_utils._text import to_bytes, to_native, to_text
from ansible.module_utils.parsing.convert_bool import boolean
-from ansible.module_utils.six import string_types, iteritems
-from ansible.module_utils._text import to_text, to_bytes, to_native
+from ansible.module_utils.six import iteritems, string_types
from ansible.plugins.action import ActionBase
@@ -55,7 +55,6 @@ ENV_KUBECONFIG_PATH_SEPARATOR = ";" if platform.system() == "Windows" else ":"
class ActionModule(ActionBase):
-
TRANSFERS_FILES = True
DEFAULT_NEWLINE_SEQUENCE = "\n"
diff --git a/ansible_collections/kubernetes/core/plugins/action/k8s.py b/ansible_collections/kubernetes/core/plugins/action/k8s.py
index 181daca4e..650e0beaf 100644
--- a/ansible_collections/kubernetes/core/plugins/action/k8s.py
+++ b/ansible_collections/kubernetes/core/plugins/action/k8s.py
@@ -8,21 +8,21 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
import copy
-import traceback
import os
-from contextlib import contextmanager
import platform
+import traceback
+from contextlib import contextmanager
from ansible.config.manager import ensure_type
from ansible.errors import (
- AnsibleError,
- AnsibleFileNotFound,
AnsibleAction,
AnsibleActionFail,
+ AnsibleError,
+ AnsibleFileNotFound,
)
+from ansible.module_utils._text import to_bytes, to_native, to_text
from ansible.module_utils.parsing.convert_bool import boolean
-from ansible.module_utils.six import string_types, iteritems
-from ansible.module_utils._text import to_text, to_bytes, to_native
+from ansible.module_utils.six import iteritems, string_types
from ansible.plugins.action import ActionBase
@@ -55,7 +55,6 @@ ENV_KUBECONFIG_PATH_SEPARATOR = ";" if platform.system() == "Windows" else ":"
class ActionModule(ActionBase):
-
TRANSFERS_FILES = True
DEFAULT_NEWLINE_SEQUENCE = "\n"
diff --git a/ansible_collections/kubernetes/core/plugins/action/k8s_cluster_info.py b/ansible_collections/kubernetes/core/plugins/action/k8s_cluster_info.py
index 181daca4e..650e0beaf 100644
--- a/ansible_collections/kubernetes/core/plugins/action/k8s_cluster_info.py
+++ b/ansible_collections/kubernetes/core/plugins/action/k8s_cluster_info.py
@@ -8,21 +8,21 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
import copy
-import traceback
import os
-from contextlib import contextmanager
import platform
+import traceback
+from contextlib import contextmanager
from ansible.config.manager import ensure_type
from ansible.errors import (
- AnsibleError,
- AnsibleFileNotFound,
AnsibleAction,
AnsibleActionFail,
+ AnsibleError,
+ AnsibleFileNotFound,
)
+from ansible.module_utils._text import to_bytes, to_native, to_text
from ansible.module_utils.parsing.convert_bool import boolean
-from ansible.module_utils.six import string_types, iteritems
-from ansible.module_utils._text import to_text, to_bytes, to_native
+from ansible.module_utils.six import iteritems, string_types
from ansible.plugins.action import ActionBase
@@ -55,7 +55,6 @@ ENV_KUBECONFIG_PATH_SEPARATOR = ";" if platform.system() == "Windows" else ":"
class ActionModule(ActionBase):
-
TRANSFERS_FILES = True
DEFAULT_NEWLINE_SEQUENCE = "\n"
diff --git a/ansible_collections/kubernetes/core/plugins/action/k8s_cp.py b/ansible_collections/kubernetes/core/plugins/action/k8s_cp.py
index 181daca4e..650e0beaf 100644
--- a/ansible_collections/kubernetes/core/plugins/action/k8s_cp.py
+++ b/ansible_collections/kubernetes/core/plugins/action/k8s_cp.py
@@ -8,21 +8,21 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
import copy
-import traceback
import os
-from contextlib import contextmanager
import platform
+import traceback
+from contextlib import contextmanager
from ansible.config.manager import ensure_type
from ansible.errors import (
- AnsibleError,
- AnsibleFileNotFound,
AnsibleAction,
AnsibleActionFail,
+ AnsibleError,
+ AnsibleFileNotFound,
)
+from ansible.module_utils._text import to_bytes, to_native, to_text
from ansible.module_utils.parsing.convert_bool import boolean
-from ansible.module_utils.six import string_types, iteritems
-from ansible.module_utils._text import to_text, to_bytes, to_native
+from ansible.module_utils.six import iteritems, string_types
from ansible.plugins.action import ActionBase
@@ -55,7 +55,6 @@ ENV_KUBECONFIG_PATH_SEPARATOR = ";" if platform.system() == "Windows" else ":"
class ActionModule(ActionBase):
-
TRANSFERS_FILES = True
DEFAULT_NEWLINE_SEQUENCE = "\n"
diff --git a/ansible_collections/kubernetes/core/plugins/action/k8s_drain.py b/ansible_collections/kubernetes/core/plugins/action/k8s_drain.py
index 181daca4e..650e0beaf 100644
--- a/ansible_collections/kubernetes/core/plugins/action/k8s_drain.py
+++ b/ansible_collections/kubernetes/core/plugins/action/k8s_drain.py
@@ -8,21 +8,21 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
import copy
-import traceback
import os
-from contextlib import contextmanager
import platform
+import traceback
+from contextlib import contextmanager
from ansible.config.manager import ensure_type
from ansible.errors import (
- AnsibleError,
- AnsibleFileNotFound,
AnsibleAction,
AnsibleActionFail,
+ AnsibleError,
+ AnsibleFileNotFound,
)
+from ansible.module_utils._text import to_bytes, to_native, to_text
from ansible.module_utils.parsing.convert_bool import boolean
-from ansible.module_utils.six import string_types, iteritems
-from ansible.module_utils._text import to_text, to_bytes, to_native
+from ansible.module_utils.six import iteritems, string_types
from ansible.plugins.action import ActionBase
@@ -55,7 +55,6 @@ ENV_KUBECONFIG_PATH_SEPARATOR = ";" if platform.system() == "Windows" else ":"
class ActionModule(ActionBase):
-
TRANSFERS_FILES = True
DEFAULT_NEWLINE_SEQUENCE = "\n"
diff --git a/ansible_collections/kubernetes/core/plugins/action/k8s_exec.py b/ansible_collections/kubernetes/core/plugins/action/k8s_exec.py
index 181daca4e..650e0beaf 100644
--- a/ansible_collections/kubernetes/core/plugins/action/k8s_exec.py
+++ b/ansible_collections/kubernetes/core/plugins/action/k8s_exec.py
@@ -8,21 +8,21 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
import copy
-import traceback
import os
-from contextlib import contextmanager
import platform
+import traceback
+from contextlib import contextmanager
from ansible.config.manager import ensure_type
from ansible.errors import (
- AnsibleError,
- AnsibleFileNotFound,
AnsibleAction,
AnsibleActionFail,
+ AnsibleError,
+ AnsibleFileNotFound,
)
+from ansible.module_utils._text import to_bytes, to_native, to_text
from ansible.module_utils.parsing.convert_bool import boolean
-from ansible.module_utils.six import string_types, iteritems
-from ansible.module_utils._text import to_text, to_bytes, to_native
+from ansible.module_utils.six import iteritems, string_types
from ansible.plugins.action import ActionBase
@@ -55,7 +55,6 @@ ENV_KUBECONFIG_PATH_SEPARATOR = ";" if platform.system() == "Windows" else ":"
class ActionModule(ActionBase):
-
TRANSFERS_FILES = True
DEFAULT_NEWLINE_SEQUENCE = "\n"
diff --git a/ansible_collections/kubernetes/core/plugins/action/k8s_info.py b/ansible_collections/kubernetes/core/plugins/action/k8s_info.py
index 181daca4e..650e0beaf 100644
--- a/ansible_collections/kubernetes/core/plugins/action/k8s_info.py
+++ b/ansible_collections/kubernetes/core/plugins/action/k8s_info.py
@@ -8,21 +8,21 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
import copy
-import traceback
import os
-from contextlib import contextmanager
import platform
+import traceback
+from contextlib import contextmanager
from ansible.config.manager import ensure_type
from ansible.errors import (
- AnsibleError,
- AnsibleFileNotFound,
AnsibleAction,
AnsibleActionFail,
+ AnsibleError,
+ AnsibleFileNotFound,
)
+from ansible.module_utils._text import to_bytes, to_native, to_text
from ansible.module_utils.parsing.convert_bool import boolean
-from ansible.module_utils.six import string_types, iteritems
-from ansible.module_utils._text import to_text, to_bytes, to_native
+from ansible.module_utils.six import iteritems, string_types
from ansible.plugins.action import ActionBase
@@ -55,7 +55,6 @@ ENV_KUBECONFIG_PATH_SEPARATOR = ";" if platform.system() == "Windows" else ":"
class ActionModule(ActionBase):
-
TRANSFERS_FILES = True
DEFAULT_NEWLINE_SEQUENCE = "\n"
diff --git a/ansible_collections/kubernetes/core/plugins/action/ks8_json_patch.py b/ansible_collections/kubernetes/core/plugins/action/k8s_json_patch.py
index 181daca4e..650e0beaf 100644
--- a/ansible_collections/kubernetes/core/plugins/action/ks8_json_patch.py
+++ b/ansible_collections/kubernetes/core/plugins/action/k8s_json_patch.py
@@ -8,21 +8,21 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
import copy
-import traceback
import os
-from contextlib import contextmanager
import platform
+import traceback
+from contextlib import contextmanager
from ansible.config.manager import ensure_type
from ansible.errors import (
- AnsibleError,
- AnsibleFileNotFound,
AnsibleAction,
AnsibleActionFail,
+ AnsibleError,
+ AnsibleFileNotFound,
)
+from ansible.module_utils._text import to_bytes, to_native, to_text
from ansible.module_utils.parsing.convert_bool import boolean
-from ansible.module_utils.six import string_types, iteritems
-from ansible.module_utils._text import to_text, to_bytes, to_native
+from ansible.module_utils.six import iteritems, string_types
from ansible.plugins.action import ActionBase
@@ -55,7 +55,6 @@ ENV_KUBECONFIG_PATH_SEPARATOR = ";" if platform.system() == "Windows" else ":"
class ActionModule(ActionBase):
-
TRANSFERS_FILES = True
DEFAULT_NEWLINE_SEQUENCE = "\n"
diff --git a/ansible_collections/kubernetes/core/plugins/action/k8s_log.py b/ansible_collections/kubernetes/core/plugins/action/k8s_log.py
index 181daca4e..650e0beaf 100644
--- a/ansible_collections/kubernetes/core/plugins/action/k8s_log.py
+++ b/ansible_collections/kubernetes/core/plugins/action/k8s_log.py
@@ -8,21 +8,21 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
import copy
-import traceback
import os
-from contextlib import contextmanager
import platform
+import traceback
+from contextlib import contextmanager
from ansible.config.manager import ensure_type
from ansible.errors import (
- AnsibleError,
- AnsibleFileNotFound,
AnsibleAction,
AnsibleActionFail,
+ AnsibleError,
+ AnsibleFileNotFound,
)
+from ansible.module_utils._text import to_bytes, to_native, to_text
from ansible.module_utils.parsing.convert_bool import boolean
-from ansible.module_utils.six import string_types, iteritems
-from ansible.module_utils._text import to_text, to_bytes, to_native
+from ansible.module_utils.six import iteritems, string_types
from ansible.plugins.action import ActionBase
@@ -55,7 +55,6 @@ ENV_KUBECONFIG_PATH_SEPARATOR = ";" if platform.system() == "Windows" else ":"
class ActionModule(ActionBase):
-
TRANSFERS_FILES = True
DEFAULT_NEWLINE_SEQUENCE = "\n"
diff --git a/ansible_collections/kubernetes/core/plugins/action/k8s_rollback.py b/ansible_collections/kubernetes/core/plugins/action/k8s_rollback.py
index 181daca4e..650e0beaf 100644
--- a/ansible_collections/kubernetes/core/plugins/action/k8s_rollback.py
+++ b/ansible_collections/kubernetes/core/plugins/action/k8s_rollback.py
@@ -8,21 +8,21 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
import copy
-import traceback
import os
-from contextlib import contextmanager
import platform
+import traceback
+from contextlib import contextmanager
from ansible.config.manager import ensure_type
from ansible.errors import (
- AnsibleError,
- AnsibleFileNotFound,
AnsibleAction,
AnsibleActionFail,
+ AnsibleError,
+ AnsibleFileNotFound,
)
+from ansible.module_utils._text import to_bytes, to_native, to_text
from ansible.module_utils.parsing.convert_bool import boolean
-from ansible.module_utils.six import string_types, iteritems
-from ansible.module_utils._text import to_text, to_bytes, to_native
+from ansible.module_utils.six import iteritems, string_types
from ansible.plugins.action import ActionBase
@@ -55,7 +55,6 @@ ENV_KUBECONFIG_PATH_SEPARATOR = ";" if platform.system() == "Windows" else ":"
class ActionModule(ActionBase):
-
TRANSFERS_FILES = True
DEFAULT_NEWLINE_SEQUENCE = "\n"
diff --git a/ansible_collections/kubernetes/core/plugins/action/k8s_scale.py b/ansible_collections/kubernetes/core/plugins/action/k8s_scale.py
index 181daca4e..650e0beaf 100644
--- a/ansible_collections/kubernetes/core/plugins/action/k8s_scale.py
+++ b/ansible_collections/kubernetes/core/plugins/action/k8s_scale.py
@@ -8,21 +8,21 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
import copy
-import traceback
import os
-from contextlib import contextmanager
import platform
+import traceback
+from contextlib import contextmanager
from ansible.config.manager import ensure_type
from ansible.errors import (
- AnsibleError,
- AnsibleFileNotFound,
AnsibleAction,
AnsibleActionFail,
+ AnsibleError,
+ AnsibleFileNotFound,
)
+from ansible.module_utils._text import to_bytes, to_native, to_text
from ansible.module_utils.parsing.convert_bool import boolean
-from ansible.module_utils.six import string_types, iteritems
-from ansible.module_utils._text import to_text, to_bytes, to_native
+from ansible.module_utils.six import iteritems, string_types
from ansible.plugins.action import ActionBase
@@ -55,7 +55,6 @@ ENV_KUBECONFIG_PATH_SEPARATOR = ";" if platform.system() == "Windows" else ":"
class ActionModule(ActionBase):
-
TRANSFERS_FILES = True
DEFAULT_NEWLINE_SEQUENCE = "\n"
diff --git a/ansible_collections/kubernetes/core/plugins/action/k8s_service.py b/ansible_collections/kubernetes/core/plugins/action/k8s_service.py
index 181daca4e..650e0beaf 100644
--- a/ansible_collections/kubernetes/core/plugins/action/k8s_service.py
+++ b/ansible_collections/kubernetes/core/plugins/action/k8s_service.py
@@ -8,21 +8,21 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
import copy
-import traceback
import os
-from contextlib import contextmanager
import platform
+import traceback
+from contextlib import contextmanager
from ansible.config.manager import ensure_type
from ansible.errors import (
- AnsibleError,
- AnsibleFileNotFound,
AnsibleAction,
AnsibleActionFail,
+ AnsibleError,
+ AnsibleFileNotFound,
)
+from ansible.module_utils._text import to_bytes, to_native, to_text
from ansible.module_utils.parsing.convert_bool import boolean
-from ansible.module_utils.six import string_types, iteritems
-from ansible.module_utils._text import to_text, to_bytes, to_native
+from ansible.module_utils.six import iteritems, string_types
from ansible.plugins.action import ActionBase
@@ -55,7 +55,6 @@ ENV_KUBECONFIG_PATH_SEPARATOR = ";" if platform.system() == "Windows" else ":"
class ActionModule(ActionBase):
-
TRANSFERS_FILES = True
DEFAULT_NEWLINE_SEQUENCE = "\n"
diff --git a/ansible_collections/kubernetes/core/plugins/connection/kubectl.py b/ansible_collections/kubernetes/core/plugins/connection/kubectl.py
index d0c3baa8b..2a5e1b988 100644
--- a/ansible_collections/kubernetes/core/plugins/connection/kubectl.py
+++ b/ansible_collections/kubernetes/core/plugins/connection/kubectl.py
@@ -72,6 +72,15 @@ DOCUMENTATION = r"""
- name: ansible_kubectl_extra_args
env:
- name: K8S_AUTH_EXTRA_ARGS
+ kubectl_local_env_vars:
+ description:
+ - Local enviromantal variable to be passed locally to the kubectl command line.
+ - Please be aware that this passes information directly on the command line and it could expose sensitive data.
+ default: {}
+ type: dict
+ version_added: 3.1.0
+ vars:
+ - name: ansible_kubectl_local_env_vars
kubectl_kubeconfig:
description:
- Path to a kubectl config file. Defaults to I(~/.kube/config)
@@ -172,18 +181,18 @@ DOCUMENTATION = r"""
aliases: [ kubectl_verify_ssl ]
"""
+import json
import os
import os.path
import shutil
import subprocess
import tempfile
-import json
-from ansible.parsing.yaml.loader import AnsibleLoader
from ansible.errors import AnsibleError, AnsibleFileNotFound
-from ansible.module_utils.six.moves import shlex_quote
from ansible.module_utils._text import to_bytes
-from ansible.plugins.connection import ConnectionBase, BUFSIZE
+from ansible.module_utils.six.moves import shlex_quote
+from ansible.parsing.yaml.loader import AnsibleLoader
+from ansible.plugins.connection import BUFSIZE, ConnectionBase
from ansible.utils.display import Display
display = Display()
@@ -301,6 +310,19 @@ class Connection(ConnectionBase):
return local_cmd, censored_local_cmd
+ def _local_env(self):
+ """Return a dict of local environment variables to pass to the kubectl command"""
+ local_env = {}
+ local_local_env_vars_name = "{0}_local_env_vars".format(self.transport)
+ local_env_vars = self.get_option(local_local_env_vars_name)
+ if local_env_vars:
+ if isinstance(local_env_vars, dict):
+ local_env_vars = json.dumps(local_env_vars)
+ local_env = os.environ.copy()
+ local_env.update(json.loads(local_env_vars))
+ return local_env
+ return None
+
def _connect(self, port=None):
"""Connect to the container. Nothing to do"""
super(Connection, self)._connect()
@@ -329,6 +351,7 @@ class Connection(ConnectionBase):
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
+ env=self._local_env(),
)
stdout, stderr = p.communicate(in_data)
@@ -378,7 +401,11 @@ class Connection(ConnectionBase):
args = [to_bytes(i, errors="surrogate_or_strict") for i in args]
try:
p = subprocess.Popen(
- args, stdin=in_file, stdout=subprocess.PIPE, stderr=subprocess.PIPE
+ args,
+ stdin=in_file,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ env=self._local_env(),
)
except OSError:
raise AnsibleError(
@@ -415,7 +442,11 @@ class Connection(ConnectionBase):
) as out_file:
try:
p = subprocess.Popen(
- args, stdin=subprocess.PIPE, stdout=out_file, stderr=subprocess.PIPE
+ args,
+ stdin=subprocess.PIPE,
+ stdout=out_file,
+ stderr=subprocess.PIPE,
+ env=self._local_env(),
)
except OSError:
raise AnsibleError(
diff --git a/ansible_collections/kubernetes/core/plugins/doc_fragments/helm_common_options.py b/ansible_collections/kubernetes/core/plugins/doc_fragments/helm_common_options.py
index dde91db12..cc5d28bdd 100644
--- a/ansible_collections/kubernetes/core/plugins/doc_fragments/helm_common_options.py
+++ b/ansible_collections/kubernetes/core/plugins/doc_fragments/helm_common_options.py
@@ -12,7 +12,6 @@ __metaclass__ = type
class ModuleDocFragment(object):
-
DOCUMENTATION = r"""
options:
binary_path:
@@ -37,12 +36,12 @@ options:
description:
- Provide a URL for accessing the API. Can also be specified via C(K8S_AUTH_HOST) environment variable.
type: str
- version_added: "1.2.0"
+ version_added: 1.2.0
api_key:
description:
- Token used to authenticate with the API. Can also be specified via C(K8S_AUTH_API_KEY) environment variable.
type: str
- version_added: "1.2.0"
+ version_added: 1.2.0
validate_certs:
description:
- Whether or not to verify the API server's SSL certificates. Can also be specified via C(K8S_AUTH_VERIFY_SSL)
@@ -50,12 +49,12 @@ options:
type: bool
aliases: [ verify_ssl ]
default: True
- version_added: "1.2.0"
+ version_added: 1.2.0
ca_cert:
description:
- Path to a CA certificate used to authenticate with the API. The full certificate chain must be provided to
avoid certificate validation errors. Can also be specified via C(K8S_AUTH_SSL_CA_CERT) environment variable.
type: path
aliases: [ ssl_ca_cert ]
- version_added: "1.2.0"
+ version_added: 1.2.0
"""
diff --git a/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_auth_options.py b/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_auth_options.py
index 516ef64fd..c2ef9a065 100644
--- a/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_auth_options.py
+++ b/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_auth_options.py
@@ -11,7 +11,6 @@ __metaclass__ = type
class ModuleDocFragment(object):
-
DOCUMENTATION = r"""
options:
host:
diff --git a/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_delete_options.py b/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_delete_options.py
index a8f20cf9c..305e933d1 100644
--- a/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_delete_options.py
+++ b/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_delete_options.py
@@ -11,12 +11,11 @@ __metaclass__ = type
class ModuleDocFragment(object):
-
DOCUMENTATION = r"""
options:
delete_options:
type: dict
- version_added: '1.2.0'
+ version_added: 1.2.0
description:
- Configure behavior when deleting an object.
- Only used when I(state=absent).
diff --git a/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_name_options.py b/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_name_options.py
index e14658b03..07f7c2935 100644
--- a/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_name_options.py
+++ b/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_name_options.py
@@ -11,7 +11,6 @@ __metaclass__ = type
class ModuleDocFragment(object):
-
DOCUMENTATION = r"""
options:
api_version:
diff --git a/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_resource_options.py b/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_resource_options.py
index 6920efa45..0aa275af9 100644
--- a/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_resource_options.py
+++ b/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_resource_options.py
@@ -11,7 +11,6 @@ __metaclass__ = type
class ModuleDocFragment(object):
-
DOCUMENTATION = r"""
options:
resource_definition:
diff --git a/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_scale_options.py b/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_scale_options.py
index ca0605fdf..87fa17d31 100644
--- a/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_scale_options.py
+++ b/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_scale_options.py
@@ -11,7 +11,6 @@ __metaclass__ = type
class ModuleDocFragment(object):
-
DOCUMENTATION = r"""
options:
replicas:
diff --git a/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_state_options.py b/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_state_options.py
index 033318667..e01a9aaff 100644
--- a/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_state_options.py
+++ b/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_state_options.py
@@ -11,7 +11,6 @@ __metaclass__ = type
class ModuleDocFragment(object):
-
DOCUMENTATION = r"""
options:
state:
diff --git a/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_wait_options.py b/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_wait_options.py
index e498e3ac6..acf8f8aea 100644
--- a/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_wait_options.py
+++ b/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_wait_options.py
@@ -11,7 +11,6 @@ __metaclass__ = type
class ModuleDocFragment(object):
-
DOCUMENTATION = r"""
options:
wait:
diff --git a/ansible_collections/kubernetes/core/plugins/filter/k8s.py b/ansible_collections/kubernetes/core/plugins/filter/k8s.py
index a8ec560b3..f5e0170e5 100644
--- a/ansible_collections/kubernetes/core/plugins/filter/k8s.py
+++ b/ansible_collections/kubernetes/core/plugins/filter/k8s.py
@@ -1,50 +1,12 @@
# Copyright (c) 2017 Ansible Project
# 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
+
from __future__ import absolute_import, division, print_function
__metaclass__ = type
-DOCUMENTATION = r"""
-
-name: k8s_config_resource_name
-short_description: Generate resource name for the given resource of type ConfigMap, Secret
-description:
- - Generate resource name for the given resource of type ConfigMap, Secret.
- - Resource must have a C(metadata.name) key to generate a resource name
-options:
- _input:
- description:
- - A valid YAML definition for a ConfigMap or a Secret.
- type: dict
- required: true
-author:
- - ansible cloud team
-
-"""
-
-EXAMPLES = r"""
-# Dump generated name for a configmap into a variable
-- set_fact:
- generated_name: '{{ definition | kubernetes.core.k8s_config_resource_name }}'
- vars:
- definition:
- apiVersion: v1
- kind: ConfigMap
- metadata:
- name: myconfigmap
- namespace: mynamespace
-"""
-
-RETURN = r"""
- _value:
- description: Generated resource name.
- type: str
-"""
-
-
from ansible.errors import AnsibleFilterError
from ansible_collections.kubernetes.core.plugins.module_utils.hashes import (
generate_hash,
diff --git a/ansible_collections/kubernetes/core/plugins/inventory/k8s.py b/ansible_collections/kubernetes/core/plugins/inventory/k8s.py
index 462856bb6..1a6c5bfce 100644
--- a/ansible_collections/kubernetes/core/plugins/inventory/k8s.py
+++ b/ansible_collections/kubernetes/core/plugins/inventory/k8s.py
@@ -19,6 +19,13 @@ DOCUMENTATION = """
- Uses the kubectl connection plugin to access the Kubernetes cluster.
- Uses k8s.(yml|yaml) YAML configuration file to set parameter values.
+ deprecated:
+ removed_in: 4.0.0
+ why: |
+ As discussed in U(https://github.com/ansible-collections/kubernetes.core/issues/31), we decided to
+ remove the k8s inventory plugin in release 4.0.0.
+ alternative: "Use M(kubernetes.core.k8s_info) and M(ansible.builtin.add_host) instead."
+
options:
plugin:
description: token that ensures this is a source file for the 'k8s' plugin.
@@ -27,7 +34,7 @@ DOCUMENTATION = """
connections:
description:
- Optional list of cluster connection settings. If no connections are provided, the default
- '~/.kube/config' and active context will be used, and objects will be returned for all namespaces
+ I(~/.kube/config) and active context will be used, and objects will be returned for all namespaces
the active user is authorized to access.
suboptions:
name:
@@ -38,7 +45,7 @@ DOCUMENTATION = """
description:
- Path to an existing Kubernetes config file. If not provided, and no other connection
options are provided, the Kubernetes client will attempt to load the default
- configuration file from '~/.kube/config'. Can also be specified via K8S_AUTH_KUBECONFIG
+ configuration file from I(~/.kube/config). Can also be specified via K8S_AUTH_KUBECONFIG
environment variable.
context:
description:
@@ -86,12 +93,12 @@ DOCUMENTATION = """
to access.
requirements:
- - "python >= 3.6"
- - "kubernetes >= 12.0.0"
+ - "python >= 3.9"
+ - "kubernetes >= 24.2.0"
- "PyYAML >= 3.11"
"""
-EXAMPLES = """
+EXAMPLES = r"""
# File must be named k8s.yaml or k8s.yml
- name: Authenticate with token, and return all pods and services for all namespaces
@@ -117,6 +124,7 @@ EXAMPLES = """
import json
from ansible.errors import AnsibleError
+from ansible.plugins.inventory import BaseInventoryPlugin, Cacheable, Constructable
from ansible_collections.kubernetes.core.plugins.module_utils.common import (
HAS_K8S_MODULE_HELPER,
k8s_import_exception,
@@ -124,7 +132,6 @@ from ansible_collections.kubernetes.core.plugins.module_utils.common import (
from ansible_collections.kubernetes.core.plugins.module_utils.k8s.client import (
get_api_client,
)
-from ansible.plugins.inventory import BaseInventoryPlugin, Constructable, Cacheable
try:
from kubernetes.dynamic.exceptions import DynamicApiError
@@ -155,6 +162,12 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
def parse(self, inventory, loader, path, cache=True):
super(InventoryModule, self).parse(inventory, loader, path)
+
+ self.display.deprecated(
+ "The 'k8s' inventory plugin has been deprecated and will be removed in release 4.0.0",
+ version="4.0.0",
+ collection_name="kubernetes.core",
+ )
cache_key = self._get_cache_prefix(path)
config_data = self._read_config_data(path)
self.setup(config_data, cache, cache_key)
@@ -180,7 +193,6 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
self.fetch_objects(connections)
def fetch_objects(self, connections):
-
if connections:
if not isinstance(connections, list):
raise K8sInventoryException("Expecting connections to be a list.")
diff --git a/ansible_collections/kubernetes/core/plugins/lookup/k8s.py b/ansible_collections/kubernetes/core/plugins/lookup/k8s.py
index bd69a9923..a8d2c79c8 100644
--- a/ansible_collections/kubernetes/core/plugins/lookup/k8s.py
+++ b/ansible_collections/kubernetes/core/plugins/lookup/k8s.py
@@ -114,8 +114,8 @@ DOCUMENTATION = """
aliases: [ verify_ssl ]
requirements:
- - "python >= 3.6"
- - "kubernetes >= 12.0.0"
+ - "python >= 3.9"
+ - "kubernetes >= 24.2.0"
- "PyYAML >= 3.11"
"""
@@ -179,7 +179,6 @@ import os
from ansible.errors import AnsibleError
from ansible.module_utils.common._collections_compat import KeysView
from ansible.module_utils.common.validation import check_type_bool
-
from ansible_collections.kubernetes.core.plugins.module_utils.k8s.client import (
get_api_client,
)
@@ -214,7 +213,6 @@ except ImportError as e:
class KubernetesLookup(object):
def __init__(self):
-
if not HAS_K8S_MODULE_HELPER:
raise Exception(
"Requires the Kubernetes Python client. Try `pip install kubernetes`. Detail: {0}".format(
diff --git a/ansible_collections/kubernetes/core/plugins/lookup/kustomize.py b/ansible_collections/kubernetes/core/plugins/lookup/kustomize.py
index ef7e50f06..88a039e67 100644
--- a/ansible_collections/kubernetes/core/plugins/lookup/kustomize.py
+++ b/ansible_collections/kubernetes/core/plugins/lookup/kustomize.py
@@ -8,7 +8,7 @@ DOCUMENTATION = """
short_description: Build a set of kubernetes resources using a 'kustomization.yaml' file.
- version_added: "2.2.0"
+ version_added: 2.2.0
author:
- Aubin Bikouo (@abikouo)
@@ -30,6 +30,10 @@ DOCUMENTATION = """
opt_dirs:
description:
- An optional list of directories to search for the executable in addition to PATH.
+ enable_helm:
+ description:
+ - Enable the helm chart inflation generator
+ default: "False"
requirements:
- "python >= 3.6"
@@ -37,16 +41,20 @@ DOCUMENTATION = """
EXAMPLES = """
- name: Run lookup using kustomize
- set_fact:
+ ansible.builtin.set_fact:
resources: "{{ lookup('kubernetes.core.kustomize', binary_path='/path/to/kustomize') }}"
- name: Run lookup using kubectl kustomize
- set_fact:
+ ansible.builtin.set_fact:
resources: "{{ lookup('kubernetes.core.kustomize', binary_path='/path/to/kubectl') }}"
- name: Create kubernetes resources for lookup output
- k8s:
+ kubernetes.core.k8s:
definition: "{{ lookup('kubernetes.core.kustomize', dir='/path/to/kustomization') }}"
+
+- name: Create kubernetes resources for lookup output with `--enable-helm` set
+ kubernetes.core.k8s:
+ definition: "{{ lookup('kubernetes.core.kustomize', dir='/path/to/kustomization', enable_helm=True) }}"
"""
RETURN = """
@@ -64,12 +72,11 @@ RETURN = """
key1: val1
"""
+import subprocess
+
from ansible.errors import AnsibleLookupError
-from ansible.plugins.lookup import LookupBase
from ansible.module_utils.common.process import get_bin_path
-
-
-import subprocess
+from ansible.plugins.lookup import LookupBase
def get_binary_from_path(name, opt_dirs=None):
@@ -92,7 +99,14 @@ def run_command(command):
class LookupModule(LookupBase):
def run(
- self, terms, variables=None, dir=".", binary_path=None, opt_dirs=None, **kwargs
+ self,
+ terms,
+ variables=None,
+ dir=".",
+ binary_path=None,
+ opt_dirs=None,
+ enable_helm=False,
+ **kwargs
):
executable_path = binary_path
if executable_path is None:
@@ -123,6 +137,9 @@ class LookupModule(LookupBase):
)
)
+ if enable_helm:
+ command += ["--enable-helm"]
+
(out, err) = run_command(command)
if err:
raise AnsibleLookupError(
diff --git a/ansible_collections/kubernetes/core/plugins/module_utils/ansiblemodule.py b/ansible_collections/kubernetes/core/plugins/module_utils/ansiblemodule.py
index 8b17866dc..d3eba8df7 100644
--- a/ansible_collections/kubernetes/core/plugins/module_utils/ansiblemodule.py
+++ b/ansible_collections/kubernetes/core/plugins/module_utils/ansiblemodule.py
@@ -14,9 +14,9 @@ except TypeError:
if enable_turbo_mode:
try:
- from ansible_collections.cloud.common.plugins.module_utils.turbo.module import (
+ from ansible_collections.cloud.common.plugins.module_utils.turbo.module import ( # noqa: F401
AnsibleTurboModule as AnsibleModule,
- ) # noqa: F401
+ )
AnsibleModule.collection_name = "kubernetes.core"
except ImportError:
diff --git a/ansible_collections/kubernetes/core/plugins/module_utils/apply.py b/ansible_collections/kubernetes/core/plugins/module_utils/apply.py
index dea185ef3..18b153a3b 100644
--- a/ansible_collections/kubernetes/core/plugins/module_utils/apply.py
+++ b/ansible_collections/kubernetes/core/plugins/module_utils/apply.py
@@ -17,8 +17,8 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
-from collections import OrderedDict
import json
+from collections import OrderedDict
from ansible.module_utils.common.dict_transformations import dict_merge
from ansible_collections.kubernetes.core.plugins.module_utils.exceptions import (
@@ -31,7 +31,6 @@ from ansible_collections.kubernetes.core.plugins.module_utils.version import (
LooseVersion,
)
-
try:
from kubernetes.dynamic.exceptions import NotFoundError
except ImportError:
diff --git a/ansible_collections/kubernetes/core/plugins/module_utils/client/discovery.py b/ansible_collections/kubernetes/core/plugins/module_utils/client/discovery.py
index f0d94e19f..44cdb1f69 100644
--- a/ansible_collections/kubernetes/core/plugins/module_utils/client/discovery.py
+++ b/ansible_collections/kubernetes/core/plugins/module_utils/client/discovery.py
@@ -13,15 +13,18 @@
# limitations under the License.
+import hashlib
import json
import os
-from collections import defaultdict
-import hashlib
import tempfile
+from collections import defaultdict
from functools import partial
import kubernetes.dynamic
import kubernetes.dynamic.discovery
+from ansible_collections.kubernetes.core.plugins.module_utils.client.resource import (
+ ResourceList,
+)
from kubernetes import __version__
from kubernetes.dynamic.exceptions import (
ResourceNotFoundError,
@@ -29,10 +32,6 @@ from kubernetes.dynamic.exceptions import (
ServiceUnavailableError,
)
-from ansible_collections.kubernetes.core.plugins.module_utils.client.resource import (
- ResourceList,
-)
-
class Discoverer(kubernetes.dynamic.discovery.Discoverer):
def __init__(self, client, cache_file):
diff --git a/ansible_collections/kubernetes/core/plugins/module_utils/common.py b/ansible_collections/kubernetes/core/plugins/module_utils/common.py
index a46c813fe..f92c8fade 100644
--- a/ansible_collections/kubernetes/core/plugins/module_utils/common.py
+++ b/ansible_collections/kubernetes/core/plugins/module_utils/common.py
@@ -20,17 +20,20 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
import base64
-import time
+import hashlib
import os
-import traceback
import sys
-import hashlib
+import time
+import traceback
from datetime import datetime
from tempfile import NamedTemporaryFile
-from ansible_collections.kubernetes.core.plugins.module_utils.version import (
- LooseVersion,
-)
+from ansible.module_utils._text import to_bytes, to_native, to_text
+from ansible.module_utils.basic import missing_required_lib
+from ansible.module_utils.common.dict_transformations import dict_merge
+from ansible.module_utils.parsing.convert_bool import boolean
+from ansible.module_utils.six import iteritems, string_types
+from ansible.module_utils.urls import Request
from ansible_collections.kubernetes.core.plugins.module_utils.args_common import (
AUTH_ARG_MAP,
AUTH_ARG_SPEC,
@@ -42,27 +45,23 @@ from ansible_collections.kubernetes.core.plugins.module_utils.hashes import (
from ansible_collections.kubernetes.core.plugins.module_utils.selector import (
LabelSelectorFilter,
)
-
-from ansible.module_utils.basic import missing_required_lib
-from ansible.module_utils.six import iteritems, string_types
-from ansible.module_utils._text import to_native, to_bytes, to_text
-from ansible.module_utils.common.dict_transformations import dict_merge
-from ansible.module_utils.parsing.convert_bool import boolean
-from ansible.module_utils.urls import Request
+from ansible_collections.kubernetes.core.plugins.module_utils.version import (
+ LooseVersion,
+)
K8S_IMP_ERR = None
try:
import kubernetes
from kubernetes.dynamic.exceptions import (
- NotFoundError,
- ResourceNotFoundError,
- ResourceNotUniqueError,
- DynamicApiError,
+ BadRequestError,
ConflictError,
+ DynamicApiError,
ForbiddenError,
- MethodNotAllowedError,
- BadRequestError,
KubernetesValidateMissing,
+ MethodNotAllowedError,
+ NotFoundError,
+ ResourceNotFoundError,
+ ResourceNotUniqueError,
)
HAS_K8S_MODULE_HELPER = True
@@ -797,8 +796,8 @@ class K8sAnsibleMixin(object):
self.resource_definitions = [implicit_definition]
def check_library_version(self):
- if LooseVersion(self.kubernetes_version) < LooseVersion("12.0.0"):
- self.fail_json(msg="kubernetes >= 12.0.0 is required")
+ if LooseVersion(self.kubernetes_version) < LooseVersion("24.2.0"):
+ self.fail_json(msg="kubernetes >= 24.2.0 is required")
def flatten_list_kind(self, list_resource, definitions):
flattened = []
@@ -819,7 +818,7 @@ class K8sAnsibleMixin(object):
try:
self.client = get_api_client(self.module)
# Hopefully the kubernetes client will provide its own exception class one day
- except (urllib3.exceptions.RequestError) as e:
+ except urllib3.exceptions.RequestError as e:
self.fail_json(msg="Couldn't connect to Kubernetes: %s" % str(e))
flattened_definitions = []
@@ -837,7 +836,7 @@ class K8sAnsibleMixin(object):
resource = self.find_resource(kind, api_version, fail=True)
flattened_definitions.append((resource, definition))
- for (resource, definition) in flattened_definitions:
+ for resource, definition in flattened_definitions:
kind = definition.get("kind", self.kind)
api_version = definition.get("apiVersion", self.api_version)
definition = self.set_defaults(resource, definition)
@@ -1436,7 +1435,7 @@ class K8sAnsibleMixin(object):
if merge_type == "json":
self.module.deprecate(
msg="json as a merge_type value is deprecated. Please use the k8s_json_patch module instead.",
- version="3.0.0",
+ version="4.0.0",
collection_name="kubernetes.core",
)
try:
diff --git a/ansible_collections/kubernetes/core/plugins/module_utils/copy.py b/ansible_collections/kubernetes/core/plugins/module_utils/copy.py
index c7e1b4e21..c70eed1a4 100644
--- a/ansible_collections/kubernetes/core/plugins/module_utils/copy.py
+++ b/ansible_collections/kubernetes/core/plugins/module_utils/copy.py
@@ -18,25 +18,26 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
import os
-from tempfile import TemporaryFile, NamedTemporaryFile
-from select import select
-from abc import ABCMeta, abstractmethod
import tarfile
+from abc import ABCMeta, abstractmethod
+from select import select
+from tempfile import NamedTemporaryFile, TemporaryFile
+
+from ansible.module_utils._text import to_native
# from ansible_collections.kubernetes.core.plugins.module_utils.ansiblemodule import AnsibleModule
from ansible_collections.kubernetes.core.plugins.module_utils.k8s.exceptions import (
CoreException,
)
-from ansible.module_utils._text import to_native
try:
from kubernetes.client.api import core_v1_api
from kubernetes.stream import stream
from kubernetes.stream.ws_client import (
- STDOUT_CHANNEL,
- STDERR_CHANNEL,
- ERROR_CHANNEL,
ABNF,
+ ERROR_CHANNEL,
+ STDERR_CHANNEL,
+ STDOUT_CHANNEL,
)
except ImportError:
pass
diff --git a/ansible_collections/kubernetes/core/plugins/module_utils/hashes.py b/ansible_collections/kubernetes/core/plugins/module_utils/hashes.py
index 3d44a7d90..5e0e70559 100644
--- a/ansible_collections/kubernetes/core/plugins/module_utils/hashes.py
+++ b/ansible_collections/kubernetes/core/plugins/module_utils/hashes.py
@@ -19,8 +19,8 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
-import json
import hashlib
+import json
try:
import string
@@ -37,7 +37,7 @@ except ImportError:
def sorted_dict(unsorted_dict):
result = OrderedDict()
- for (k, v) in sorted(unsorted_dict.items()):
+ for k, v in sorted(unsorted_dict.items()):
if isinstance(v, dict):
v = sorted_dict(v)
result[k] = v
diff --git a/ansible_collections/kubernetes/core/plugins/module_utils/helm.py b/ansible_collections/kubernetes/core/plugins/module_utils/helm.py
index a7a2fa7c0..faa12c03a 100644
--- a/ansible_collections/kubernetes/core/plugins/module_utils/helm.py
+++ b/ansible_collections/kubernetes/core/plugins/module_utils/helm.py
@@ -7,19 +7,18 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
+import copy
+import json
import os
+import re
import tempfile
import traceback
-import re
-import json
-import copy
-from ansible.module_utils.basic import missing_required_lib
+from ansible.module_utils.basic import AnsibleModule, missing_required_lib
from ansible.module_utils.six import string_types
from ansible_collections.kubernetes.core.plugins.module_utils.version import (
LooseVersion,
)
-from ansible.module_utils.basic import AnsibleModule
try:
import yaml
@@ -84,7 +83,6 @@ class AnsibleHelmModule(object):
"""
def __init__(self, **kwargs):
-
self._module = None
if "module" in kwargs:
self._module = kwargs.get("module")
@@ -117,7 +115,7 @@ class AnsibleHelmModule(object):
kubeconfig = self.params.get("kubeconfig")
if kubeconfig:
if isinstance(kubeconfig, string_types):
- with open(kubeconfig) as fd:
+ with open(os.path.expanduser(kubeconfig)) as fd:
kubeconfig_content = yaml.safe_load(fd)
elif isinstance(kubeconfig, dict):
kubeconfig_content = kubeconfig
@@ -184,7 +182,6 @@ class AnsibleHelmModule(object):
)
def get_helm_version(self):
-
command = self.get_helm_binary() + " version"
rc, out, err = self.run_command(command)
m = re.match(r'version.BuildInfo{Version:"v([0-9\.]*)",', out)
@@ -216,7 +213,6 @@ class AnsibleHelmModule(object):
return yaml.safe_load(out)
def parse_yaml_content(self, content):
-
if not HAS_YAML:
self.fail_json(msg=missing_required_lib("yaml"), exception=HAS_YAML)
@@ -228,7 +224,6 @@ class AnsibleHelmModule(object):
)
def get_manifest(self, release_name):
-
command = [
self.get_helm_binary(),
"get",
@@ -241,7 +236,6 @@ class AnsibleHelmModule(object):
return self.parse_yaml_content(out)
def get_notes(self, release_name):
-
command = [
self.get_helm_binary(),
"get",
diff --git a/ansible_collections/kubernetes/core/plugins/module_utils/k8s/client.py b/ansible_collections/kubernetes/core/plugins/module_utils/k8s/client.py
index 2589e5607..a0d8dcfa6 100644
--- a/ansible_collections/kubernetes/core/plugins/module_utils/k8s/client.py
+++ b/ansible_collections/kubernetes/core/plugins/module_utils/k8s/client.py
@@ -1,12 +1,11 @@
# Copyright: (c) 2021, Red Hat | Ansible
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-import os
import hashlib
+import os
from typing import Any, Dict, List, Optional
from ansible.module_utils.six import iteritems, string_types
-
from ansible_collections.kubernetes.core.plugins.module_utils.args_common import (
AUTH_ARG_MAP,
AUTH_ARG_SPEC,
diff --git a/ansible_collections/kubernetes/core/plugins/module_utils/k8s/core.py b/ansible_collections/kubernetes/core/plugins/module_utils/k8s/core.py
index 131e80e29..7d8c31671 100644
--- a/ansible_collections/kubernetes/core/plugins/module_utils/k8s/core.py
+++ b/ansible_collections/kubernetes/core/plugins/module_utils/k8s/core.py
@@ -1,15 +1,12 @@
import traceback
-
from typing import Optional
+from ansible.module_utils.basic import AnsibleModule, missing_required_lib
+from ansible.module_utils.common.text.converters import to_text
from ansible_collections.kubernetes.core.plugins.module_utils.version import (
LooseVersion,
)
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.basic import missing_required_lib
-from ansible.module_utils.common.text.converters import to_text
-
class AnsibleK8SModule:
"""A base module class for K8S modules.
@@ -38,7 +35,7 @@ class AnsibleK8SModule:
if self.settings["check_k8s"]:
self.requires("kubernetes")
- self.has_at_least("kubernetes", "12.0.0", warn=True)
+ self.has_at_least("kubernetes", "24.2.0", warn=True)
if self.settings["check_pyyaml"]:
self.requires("pyyaml")
diff --git a/ansible_collections/kubernetes/core/plugins/module_utils/k8s/resource.py b/ansible_collections/kubernetes/core/plugins/module_utils/k8s/resource.py
index 4c9d3e1d1..314f7a38a 100644
--- a/ansible_collections/kubernetes/core/plugins/module_utils/k8s/resource.py
+++ b/ansible_collections/kubernetes/core/plugins/module_utils/k8s/resource.py
@@ -2,7 +2,7 @@
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
import os
-from typing import cast, Dict, Iterable, List, Optional, Union
+from typing import Dict, Iterable, List, Optional, Union, cast
from ansible.module_utils.six import string_types
from ansible.module_utils.urls import Request
diff --git a/ansible_collections/kubernetes/core/plugins/module_utils/k8s/runner.py b/ansible_collections/kubernetes/core/plugins/module_utils/k8s/runner.py
index 438b32116..61ad1fb6a 100644
--- a/ansible_collections/kubernetes/core/plugins/module_utils/k8s/runner.py
+++ b/ansible_collections/kubernetes/core/plugins/module_utils/k8s/runner.py
@@ -4,12 +4,12 @@
from typing import Dict
from ansible.module_utils._text import to_native
-
from ansible_collections.kubernetes.core.plugins.module_utils.k8s.client import (
get_api_client,
)
from ansible_collections.kubernetes.core.plugins.module_utils.k8s.exceptions import (
CoreException,
+ ResourceTimeout,
)
from ansible_collections.kubernetes.core.plugins.module_utils.k8s.resource import (
create_definitions,
@@ -17,9 +17,7 @@ from ansible_collections.kubernetes.core.plugins.module_utils.k8s.resource impor
from ansible_collections.kubernetes.core.plugins.module_utils.k8s.service import (
K8sService,
diff_objects,
-)
-from ansible_collections.kubernetes.core.plugins.module_utils.k8s.exceptions import (
- ResourceTimeout,
+ hide_fields,
)
from ansible_collections.kubernetes.core.plugins.module_utils.k8s.waiter import exists
from ansible_collections.kubernetes.core.plugins.module_utils.selector import (
@@ -46,16 +44,51 @@ def validate(client, module, resource):
return [_prepend_resource_info(resource, msg) for msg in warnings + errors]
+def get_definitions(svc, params):
+ try:
+ definitions = create_definitions(params)
+ except Exception as e:
+ msg = "Failed to load resource definition: {0}".format(e)
+ raise CoreException(msg) from e
+
+ delete_all = params.get("delete_all")
+ src = params.get("src")
+ resource_definition = params.get("resource_definition")
+ name = params.get("name")
+ state = params.get("state")
+
+ if (
+ delete_all
+ and state == "absent"
+ and name is None
+ and resource_definition is None
+ and src is None
+ ):
+ # Delete all resources in the namespace for the specified resource type
+ if params.get("kind") is None:
+ raise CoreException(
+ "'kind' option is required to specify the resource type."
+ )
+
+ resource = svc.find_resource(
+ params.get("kind"), params.get("api_version"), fail=True
+ )
+ definitions = svc.retrieve_all(
+ resource,
+ params.get("namespace"),
+ params.get("label_selectors"),
+ )
+
+ return definitions
+
+
def run_module(module) -> None:
results = []
changed = False
client = get_api_client(module)
svc = K8sService(client, module)
- try:
- definitions = create_definitions(module.params)
- except Exception as e:
- msg = "Failed to load resource definition: {0}".format(e)
- raise CoreException(msg) from e
+
+ definitions = get_definitions(svc, module.params)
for definition in definitions:
result = {"changed": False, "result": {}}
@@ -102,6 +135,7 @@ def perform_action(svc, definition: Dict, params: Dict) -> Dict:
state = params.get("state", None)
kind = definition.get("kind")
api_version = definition.get("apiVersion")
+ hidden_fields = params.get("hidden_fields")
result = {"changed": False, "result": {}}
instance = {}
@@ -177,7 +211,7 @@ def perform_action(svc, definition: Dict, params: Dict) -> Dict:
existing = existing.to_dict()
else:
existing = {}
- match, diffs = diff_objects(existing, instance)
+ match, diffs = diff_objects(existing, instance, hidden_fields)
if match and diffs:
result.setdefault("warnings", []).append(
"No meaningful diff was generated, but the API may not be idempotent "
@@ -187,7 +221,7 @@ def perform_action(svc, definition: Dict, params: Dict) -> Dict:
if svc.module._diff:
result["diff"] = diffs
- result["result"] = instance
+ result["result"] = hide_fields(instance, hidden_fields)
if not success:
raise ResourceTimeout(
'"{0}" "{1}": Timed out waiting on resource'.format(
diff --git a/ansible_collections/kubernetes/core/plugins/module_utils/k8s/service.py b/ansible_collections/kubernetes/core/plugins/module_utils/k8s/service.py
index 6a32f9a84..a1d3f7bfe 100644
--- a/ansible_collections/kubernetes/core/plugins/module_utils/k8s/service.py
+++ b/ansible_collections/kubernetes/core/plugins/module_utils/k8s/service.py
@@ -1,38 +1,33 @@
# Copyright: (c) 2021, Red Hat | Ansible
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
+import copy
from typing import Any, Dict, List, Optional, Tuple
+from ansible.module_utils.common.dict_transformations import dict_merge
from ansible_collections.kubernetes.core.plugins.module_utils.hashes import (
generate_hash,
)
-
+from ansible_collections.kubernetes.core.plugins.module_utils.k8s.core import requires
+from ansible_collections.kubernetes.core.plugins.module_utils.k8s.exceptions import (
+ CoreException,
+)
from ansible_collections.kubernetes.core.plugins.module_utils.k8s.waiter import (
Waiter,
exists,
- resource_absent,
get_waiter,
+ resource_absent,
)
-from ansible_collections.kubernetes.core.plugins.module_utils.k8s.core import (
- requires,
-)
-
-from ansible_collections.kubernetes.core.plugins.module_utils.k8s.exceptions import (
- CoreException,
-)
-
-from ansible.module_utils.common.dict_transformations import dict_merge
-
try:
from kubernetes.dynamic.exceptions import (
- NotFoundError,
- ResourceNotFoundError,
- ResourceNotUniqueError,
+ BadRequestError,
ConflictError,
ForbiddenError,
MethodNotAllowedError,
- BadRequestError,
+ NotFoundError,
+ ResourceNotFoundError,
+ ResourceNotUniqueError,
)
except ImportError:
# Handled in module setup
@@ -151,7 +146,7 @@ class K8sService:
if merge_type == "json":
self.module.deprecate(
msg="json as a merge_type value is deprecated. Please use the k8s_json_patch module instead.",
- version="3.0.0",
+ version="4.0.0",
collection_name="kubernetes.core",
)
try:
@@ -211,6 +206,30 @@ class K8sService:
return existing
+ def retrieve_all(
+ self, resource: Resource, namespace: str, label_selectors: List[str] = None
+ ) -> List[Dict]:
+ definitions: List[ResourceInstance] = []
+
+ try:
+ params = dict(namespace=namespace)
+ if label_selectors:
+ params["label_selector"] = ",".join(label_selectors)
+ resource_list = self.client.get(resource, **params)
+ for item in resource_list.items:
+ existing = self.client.get(
+ resource, name=item.metadata.name, namespace=namespace
+ )
+ definitions.append(existing.to_dict())
+ except (NotFoundError, MethodNotAllowedError):
+ pass
+ except Exception as e:
+ reason = e.body if hasattr(e, "body") else e
+ msg = "Failed to retrieve requested object: {0}".format(reason)
+ raise CoreException(msg) from e
+
+ return definitions
+
def find(
self,
kind: str,
@@ -224,6 +243,7 @@ class K8sService:
wait_timeout: Optional[int] = 120,
state: Optional[str] = "present",
condition: Optional[Dict] = None,
+ hidden_fields: Optional[List] = None,
) -> Dict:
resource = self.find_resource(kind, api_version)
api_found = bool(resource)
@@ -286,7 +306,9 @@ class K8sService:
instances = resources.get("items") or [resources]
if not wait:
- result["resources"] = instances
+ result["resources"] = [
+ hide_fields(instance, hidden_fields) for instance in instances
+ ]
return result
# Now wait for the specified state of any resource instances we have found.
@@ -305,7 +327,7 @@ class K8sService:
"Failed to gather information about %s(s) even"
" after waiting for %s seconds" % (res.get("kind"), duration)
)
- result["resources"].append(res)
+ result["resources"].append(hide_fields(res, hidden_fields))
return result
def create(self, resource: Resource, definition: Dict) -> Dict:
@@ -471,7 +493,9 @@ class K8sService:
return k8s_obj
-def diff_objects(existing: Dict, new: Dict) -> Tuple[bool, Dict]:
+def diff_objects(
+ existing: Dict, new: Dict, hidden_fields: Optional[list] = None
+) -> Tuple[bool, Dict]:
result = {}
diff = recursive_diff(existing, new)
if not diff:
@@ -493,4 +517,29 @@ def diff_objects(existing: Dict, new: Dict) -> Tuple[bool, Dict]:
if not set(result["before"]["metadata"].keys()).issubset(ignored_keys):
return False, result
+ result["before"] = hide_fields(result["before"], hidden_fields)
+ result["after"] = hide_fields(result["after"], hidden_fields)
+
return True, result
+
+
+def hide_fields(definition: dict, hidden_fields: Optional[list]) -> dict:
+ if not hidden_fields:
+ return definition
+ result = copy.deepcopy(definition)
+ for hidden_field in hidden_fields:
+ result = hide_field(result, hidden_field)
+ return result
+
+
+# hide_field is not hugely sophisticated and designed to cope
+# with e.g. status or metadata.managedFields rather than e.g.
+# spec.template.spec.containers[0].env[3].value
+def hide_field(definition: dict, hidden_field: str) -> dict:
+ split = hidden_field.split(".", 1)
+ if split[0] in definition:
+ if len(split) == 2:
+ definition[split[0]] = hide_field(definition[split[0]], split[1])
+ else:
+ del definition[split[0]]
+ return definition
diff --git a/ansible_collections/kubernetes/core/plugins/module_utils/k8s/waiter.py b/ansible_collections/kubernetes/core/plugins/module_utils/k8s/waiter.py
index 653e17084..5328d6318 100644
--- a/ansible_collections/kubernetes/core/plugins/module_utils/k8s/waiter.py
+++ b/ansible_collections/kubernetes/core/plugins/module_utils/k8s/waiter.py
@@ -3,7 +3,6 @@ from functools import partial
from typing import Any, Callable, Dict, Iterator, List, Optional, Tuple, Union
from ansible.module_utils.parsing.convert_bool import boolean
-
from ansible_collections.kubernetes.core.plugins.module_utils.k8s.exceptions import (
CoreException,
)
@@ -61,6 +60,13 @@ def daemonset_ready(daemonset: ResourceInstance) -> bool:
def statefulset_ready(statefulset: ResourceInstance) -> bool:
+ if statefulset.spec.updateStrategy.type == "OnDelete":
+ return bool(
+ statefulset.status
+ and statefulset.status.observedGeneration
+ == (statefulset.metadata.generation or 0)
+ and statefulset.status.replicas == statefulset.spec.replicas
+ )
# These may be None
updated_replicas = statefulset.status.updatedReplicas or 0
ready_replicas = statefulset.status.readyReplicas or 0
diff --git a/ansible_collections/kubernetes/core/plugins/module_utils/k8sdynamicclient.py b/ansible_collections/kubernetes/core/plugins/module_utils/k8sdynamicclient.py
index b1beca4cd..7a6e8e66a 100644
--- a/ansible_collections/kubernetes/core/plugins/module_utils/k8sdynamicclient.py
+++ b/ansible_collections/kubernetes/core/plugins/module_utils/k8sdynamicclient.py
@@ -18,12 +18,11 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
-from kubernetes.dynamic import DynamicClient
-
from ansible_collections.kubernetes.core.plugins.module_utils.apply import k8s_apply
from ansible_collections.kubernetes.core.plugins.module_utils.exceptions import (
ApplyException,
)
+from kubernetes.dynamic import DynamicClient
class K8SDynamicClient(DynamicClient):
diff --git a/ansible_collections/kubernetes/core/plugins/module_utils/selector.py b/ansible_collections/kubernetes/core/plugins/module_utils/selector.py
index 2a85d0bfd..08178602a 100644
--- a/ansible_collections/kubernetes/core/plugins/module_utils/selector.py
+++ b/ansible_collections/kubernetes/core/plugins/module_utils/selector.py
@@ -16,7 +16,6 @@ import re
class Selector(object):
-
equality_based_operators = ("==", "!=", "=")
def __init__(self, data):
diff --git a/ansible_collections/kubernetes/core/plugins/modules/helm.py b/ansible_collections/kubernetes/core/plugins/modules/helm.py
index 9b2ed3866..079285d7b 100644
--- a/ansible_collections/kubernetes/core/plugins/modules/helm.py
+++ b/ansible_collections/kubernetes/core/plugins/modules/helm.py
@@ -14,7 +14,7 @@ module: helm
short_description: Manages Kubernetes packages with the Helm package manager
-version_added: "0.11.0"
+version_added: 0.11.0
author:
- Lucas Boisserie (@LucasBoisserie)
@@ -61,7 +61,7 @@ options:
default: false
type: bool
aliases: [ dep_up ]
- version_added: "2.4.0"
+ version_added: 2.4.0
release_name:
description:
- Release name to manage.
@@ -99,7 +99,7 @@ options:
default: []
type: list
elements: str
- version_added: '1.1.0'
+ version_added: 1.1.0
update_repo_cache:
description:
- Run C(helm repo update) before the operation. Can be run as part of the package installation or as a separate step (see Examples).
@@ -129,7 +129,22 @@ options:
- string
- json
- file
- version_added: '2.4.0'
+ version_added: 2.4.0
+ reuse_values:
+ description:
+ - When upgrading package, specifies wether to reuse the last release's values and merge in any overrides from parameters I(release_values),
+ I(values_files) or I(set_values).
+ - If I(reset_values) is set to C(True), this is ignored.
+ type: bool
+ required: false
+ version_added: 2.5.0
+ reset_values:
+ description:
+ - When upgrading package, reset the values to the ones built into the chart.
+ type: bool
+ required: false
+ default: True
+ version_added: 2.5.0
#Helm options
disable_hook:
@@ -166,7 +181,7 @@ options:
- similar to C(wait_timeout) but does not required C(wait) to be activated.
- Mutually exclusive with C(wait_timeout).
type: str
- version_added: "2.3.0"
+ version_added: 2.3.0
atomic:
description:
- If set, the installation process deletes the installation on failure.
@@ -177,12 +192,12 @@ options:
- Create the release namespace if not present.
type: bool
default: False
- version_added: "0.11.1"
+ version_added: 0.11.1
post_renderer:
description:
- Path to an executable to be used for post rendering.
type: str
- version_added: "2.4.0"
+ version_added: 2.4.0
replace:
description:
- Reuse the given name, only if that name is a deleted release which remains in the history.
@@ -190,19 +205,19 @@ options:
- mutually exclusive with with C(history_max).
type: bool
default: False
- version_added: "1.11.0"
+ version_added: 1.11.0
skip_crds:
description:
- Skip custom resource definitions when installing or upgrading.
type: bool
default: False
- version_added: "1.2.0"
+ version_added: 1.2.0
history_max:
description:
- Limit the maximum number of revisions saved per release.
- mutually exclusive with with C(replace).
type: int
- version_added: "2.2.0"
+ version_added: 2.2.0
extends_documentation_fragment:
- kubernetes.core.helm_common_options
"""
@@ -310,6 +325,17 @@ EXAMPLES = r"""
enabled: True
logging:
enabled: True
+
+# Deploy latest version
+- name: Deploy latest version of Grafana chart using reuse_values
+ kubernetes.core.helm:
+ name: test
+ chart_ref: stable/grafana
+ release_namespace: monitoring
+ reuse_values: true
+ values:
+ replicas: 2
+ version: 3e8ec0b2dffa40fb97d5342e4af887de95faa8c61a62480dd7f8aa03dffcf533
"""
RETURN = r"""
@@ -367,10 +393,11 @@ command:
sample: helm upgrade ...
"""
+import copy
import re
import tempfile
import traceback
-import copy
+
from ansible_collections.kubernetes.core.plugins.module_utils.version import (
LooseVersion,
)
@@ -406,14 +433,20 @@ def get_release(state, release_name):
return None
-def get_release_status(module, release_name):
+def get_release_status(module, release_name, all_status=False):
"""
- Get Release state from deployed release
+ Get Release state from all release status (deployed, failed, pending-install, etc)
"""
- list_command = (
- module.get_helm_binary() + " list --output=yaml --filter " + release_name
- )
+ list_command = [
+ module.get_helm_binary(),
+ "list",
+ "--output=yaml",
+ "--filter",
+ release_name,
+ ]
+ if all_status:
+ list_command.append("--all")
rc, out, err = module.run_helm_command(list_command)
@@ -439,7 +472,7 @@ def run_dep_update(module, chart_ref):
"""
Run dependency update
"""
- dep_update = module.get_helm_binary() + " dependency update " + chart_ref
+ dep_update = module.get_helm_binary() + f" dependency update '{chart_ref}'"
rc, out, err = module.run_helm_command(dep_update)
@@ -447,7 +480,7 @@ def fetch_chart_info(module, command, chart_ref):
"""
Get chart info
"""
- inspect_command = command + " show chart " + chart_ref
+ inspect_command = command + f" show chart '{chart_ref}'"
rc, out, err = module.run_helm_command(inspect_command)
@@ -455,6 +488,7 @@ def fetch_chart_info(module, command, chart_ref):
def deploy(
+ module,
command,
release_name,
release_values,
@@ -473,6 +507,8 @@ def deploy(
timeout=None,
dependency_update=None,
set_value_args=None,
+ reuse_values=None,
+ reset_values=True,
):
"""
Install/upgrade/rollback release chart
@@ -484,9 +520,11 @@ def deploy(
deploy_command += " --dependency-update"
else:
deploy_command = command + " upgrade -i" # install/upgrade
+ if reset_values:
+ deploy_command += " --reset-values"
- # Always reset values to keep release_values equal to values released
- deploy_command += " --reset-values"
+ if reuse_values is not None:
+ deploy_command += " --reuse-values=" + str(reuse_values)
if wait:
deploy_command += " --wait"
@@ -520,9 +558,10 @@ def deploy(
with open(path, "w") as yaml_file:
yaml.dump(release_values, yaml_file, default_flow_style=False)
deploy_command += " -f=" + path
+ module.add_cleanup_file(path)
if post_renderer:
- deploy_command = " --post-renderer=" + post_renderer
+ deploy_command += " --post-renderer=" + post_renderer
if skip_crds:
deploy_command += " --skip-crds"
@@ -533,7 +572,7 @@ def deploy(
if set_value_args:
deploy_command += " " + set_value_args
- deploy_command += " " + release_name + " " + chart_name
+ deploy_command += " " + release_name + f" '{chart_name}'"
return deploy_command
@@ -599,6 +638,10 @@ def helmdiff_check(
chart_version=None,
replace=False,
chart_repo_url=None,
+ post_renderer=False,
+ set_value_args=None,
+ reuse_values=None,
+ reset_values=True,
):
"""
Use helm diff to determine if a release would change by upgrading a chart.
@@ -612,7 +655,13 @@ def helmdiff_check(
if chart_version is not None:
cmd += " " + "--version=" + chart_version
if not replace:
- cmd += " " + "--reset-values"
+ cmd += " " + "--reset-values=" + str(reset_values)
+ if post_renderer:
+ cmd += " --post-renderer=" + post_renderer
+
+ if values_files:
+ for value_file in values_files:
+ cmd += " --values=" + value_file
if release_values != {}:
fd, path = tempfile.mkstemp(suffix=".yml")
@@ -621,9 +670,11 @@ def helmdiff_check(
cmd += " -f=" + path
module.add_cleanup_file(path)
- if values_files:
- for values_file in values_files:
- cmd += " -f=" + values_file
+ if set_value_args:
+ cmd += " " + set_value_args
+
+ if reuse_values:
+ cmd += " --reuse-values"
rc, out, err = module.run_helm_command(cmd)
return (len(out.strip()) > 0, out.strip())
@@ -682,6 +733,8 @@ def argument_spec():
skip_crds=dict(type="bool", default=False),
history_max=dict(type="int"),
set_values=dict(type="list", elements="dict"),
+ reuse_values=dict(type="bool"),
+ reset_values=dict(type="bool", default=True),
)
)
return arg_spec
@@ -732,34 +785,38 @@ def main():
history_max = module.params.get("history_max")
timeout = module.params.get("timeout")
set_values = module.params.get("set_values")
+ reuse_values = module.params.get("reuse_values")
+ reset_values = module.params.get("reset_values")
if update_repo_cache:
run_repo_update(module)
# Get real/deployed release status
- release_status = get_release_status(module, release_name)
+ all_status = release_state == "absent"
+ release_status = get_release_status(module, release_name, all_status=all_status)
helm_cmd = module.get_helm_binary()
opt_result = {}
if release_state == "absent" and release_status is not None:
- if replace:
- module.fail_json(msg="replace is not applicable when state is absent")
-
- if wait:
- helm_version = module.get_helm_version()
- if LooseVersion(helm_version) < LooseVersion("3.7.0"):
- opt_result["warnings"] = []
- opt_result["warnings"].append(
- "helm uninstall support option --wait for helm release >= 3.7.0"
- )
- wait = False
+ # skip release statuses 'uninstalled' and 'uninstalling'
+ if not release_status["status"].startswith("uninstall"):
+ if replace:
+ module.fail_json(msg="replace is not applicable when state is absent")
+
+ if wait:
+ helm_version = module.get_helm_version()
+ if LooseVersion(helm_version) < LooseVersion("3.7.0"):
+ opt_result["warnings"] = []
+ opt_result["warnings"].append(
+ "helm uninstall support option --wait for helm release >= 3.7.0"
+ )
+ wait = False
- helm_cmd = delete(
- helm_cmd, release_name, purge, disable_hook, wait, wait_timeout
- )
- changed = True
+ helm_cmd = delete(
+ helm_cmd, release_name, purge, disable_hook, wait, wait_timeout
+ )
+ changed = True
elif release_state == "present":
-
if chart_version is not None:
helm_cmd += " --version=" + chart_version
@@ -799,12 +856,13 @@ def main():
"Please consider add dependencies block or disable dependency_update to remove this warning."
)
- if release_status is None: # Not installed
- set_value_args = None
- if set_values:
- set_value_args = module.get_helm_set_values_args(set_values)
+ set_value_args = None
+ if set_values:
+ set_value_args = module.get_helm_set_values_args(set_values)
+ if release_status is None: # Not installed
helm_cmd = deploy(
+ module,
helm_cmd,
release_name,
release_values,
@@ -823,11 +881,12 @@ def main():
history_max=history_max,
timeout=timeout,
set_value_args=set_value_args,
+ reuse_values=reuse_values,
+ reset_values=reset_values,
)
changed = True
else:
-
helm_diff_version = get_plugin_version("diff")
if helm_diff_version and (
not chart_repo_url
@@ -845,6 +904,10 @@ def main():
chart_version,
replace,
chart_repo_url,
+ post_renderer,
+ set_value_args,
+ reuse_values=reuse_values,
+ reset_values=reset_values,
)
if would_change and module._diff:
opt_result["diff"] = {"prepared": prepared}
@@ -858,11 +921,8 @@ def main():
)
if force or would_change:
- set_value_args = None
- if set_values:
- set_value_args = module.get_helm_set_values_args(set_values)
-
helm_cmd = deploy(
+ module,
helm_cmd,
release_name,
release_values,
@@ -881,6 +941,8 @@ def main():
timeout=timeout,
dependency_update=dependency_update,
set_value_args=set_value_args,
+ reuse_values=reuse_values,
+ reset_values=reset_values,
)
changed = True
@@ -914,7 +976,7 @@ def main():
changed=changed,
stdout=out,
stderr=err,
- status=get_release_status(module, release_name),
+ status=get_release_status(module, release_name, all_status=True),
command=helm_cmd,
**opt_result,
)
diff --git a/ansible_collections/kubernetes/core/plugins/modules/helm_info.py b/ansible_collections/kubernetes/core/plugins/modules/helm_info.py
index 5a7a56166..2e3fe6e9c 100644
--- a/ansible_collections/kubernetes/core/plugins/modules/helm_info.py
+++ b/ansible_collections/kubernetes/core/plugins/modules/helm_info.py
@@ -14,7 +14,7 @@ module: helm_info
short_description: Get information from Helm package deployed inside the cluster
-version_added: "0.11.0"
+version_added: 0.11.0
author:
- Lucas Boisserie (@LucasBoisserie)
@@ -53,7 +53,7 @@ options:
type: list
elements: str
default: []
- version_added: "2.3.0"
+ version_added: 2.3.0
get_all_values:
description:
- Set to C(True) if you want to get all (computed) values of the release.
@@ -61,7 +61,7 @@ options:
required: false
default: false
type: bool
- version_added: "2.4.0"
+ version_added: 2.4.0
extends_documentation_fragment:
- kubernetes.core.helm_common_options
"""
@@ -123,22 +123,22 @@ status:
elements: dict
description: Hooks of the release
returned: always
- version_added: "2.4.0"
+ version_added: 2.4.0
notes:
type: str
description: Notes of the release
returned: always
- version_added: "2.4.0"
+ version_added: 2.4.0
manifest:
type: list
elements: dict
description: Manifest of the release
returned: always
- version_added: "2.4.0"
+ version_added: 2.4.0
"""
-import traceback
import copy
+import traceback
try:
import yaml
diff --git a/ansible_collections/kubernetes/core/plugins/modules/helm_plugin.py b/ansible_collections/kubernetes/core/plugins/modules/helm_plugin.py
index 795dbf29e..69323e890 100644
--- a/ansible_collections/kubernetes/core/plugins/modules/helm_plugin.py
+++ b/ansible_collections/kubernetes/core/plugins/modules/helm_plugin.py
@@ -12,7 +12,7 @@ DOCUMENTATION = r"""
---
module: helm_plugin
short_description: Manage Helm plugins
-version_added: "1.0.0"
+version_added: 1.0.0
author:
- Abhijeet Kasurde (@Akasurde)
requirements:
@@ -47,7 +47,7 @@ options:
- Ignored when C(state=absent) or C(state=latest).
required: false
type: str
- version_added: "2.3.0"
+ version_added: 2.3.0
extends_documentation_fragment:
- kubernetes.core.helm_common_options
"""
@@ -109,6 +109,7 @@ rc:
"""
import copy
+
from ansible_collections.kubernetes.core.plugins.module_utils.helm import (
AnsibleHelmModule,
parse_helm_plugin_list,
diff --git a/ansible_collections/kubernetes/core/plugins/modules/helm_plugin_info.py b/ansible_collections/kubernetes/core/plugins/modules/helm_plugin_info.py
index 3b9fcd189..2d92e995a 100644
--- a/ansible_collections/kubernetes/core/plugins/modules/helm_plugin_info.py
+++ b/ansible_collections/kubernetes/core/plugins/modules/helm_plugin_info.py
@@ -12,7 +12,7 @@ DOCUMENTATION = r"""
---
module: helm_plugin_info
short_description: Gather information about Helm plugins
-version_added: "1.0.0"
+version_added: 1.0.0
author:
- Abhijeet Kasurde (@Akasurde)
requirements:
@@ -71,9 +71,10 @@ rc:
"""
import copy
+
from ansible_collections.kubernetes.core.plugins.module_utils.helm import (
- parse_helm_plugin_list,
AnsibleHelmModule,
+ parse_helm_plugin_list,
)
from ansible_collections.kubernetes.core.plugins.module_utils.helm_args_common import (
HELM_AUTH_ARG_SPEC,
@@ -82,7 +83,6 @@ from ansible_collections.kubernetes.core.plugins.module_utils.helm_args_common i
def main():
-
argument_spec = copy.deepcopy(HELM_AUTH_ARG_SPEC)
argument_spec.update(
dict(
diff --git a/ansible_collections/kubernetes/core/plugins/modules/helm_pull.py b/ansible_collections/kubernetes/core/plugins/modules/helm_pull.py
index 03edb97e6..1eeb188d9 100644
--- a/ansible_collections/kubernetes/core/plugins/modules/helm_pull.py
+++ b/ansible_collections/kubernetes/core/plugins/modules/helm_pull.py
@@ -12,7 +12,7 @@ DOCUMENTATION = r"""
---
module: helm_pull
short_description: download a chart from a repository and (optionally) unpack it in local directory.
-version_added: "2.4.0"
+version_added: 2.4.0
author:
- Aubin Bikouo (@abikouo)
description:
diff --git a/ansible_collections/kubernetes/core/plugins/modules/helm_repository.py b/ansible_collections/kubernetes/core/plugins/modules/helm_repository.py
index 34213addc..2165e0888 100644
--- a/ansible_collections/kubernetes/core/plugins/modules/helm_repository.py
+++ b/ansible_collections/kubernetes/core/plugins/modules/helm_repository.py
@@ -14,7 +14,7 @@ module: helm_repository
short_description: Manage Helm repositories.
-version_added: "0.11.0"
+version_added: 0.11.0
author:
- Lucas Boisserie (@LucasBoisserie)
@@ -76,12 +76,12 @@ options:
description:
- Provide a URL for accessing the API. Can also be specified via C(K8S_AUTH_HOST) environment variable.
type: str
- version_added: "2.3.0"
+ version_added: 2.3.0
api_key:
description:
- Token used to authenticate with the API. Can also be specified via C(K8S_AUTH_API_KEY) environment variable.
type: str
- version_added: "2.3.0"
+ version_added: 2.3.0
validate_certs:
description:
- Whether or not to verify the API server's SSL certificates. Can also be specified via C(K8S_AUTH_VERIFY_SSL)
@@ -89,21 +89,21 @@ options:
type: bool
aliases: [ verify_ssl ]
default: True
- version_added: "2.3.0"
+ version_added: 2.3.0
ca_cert:
description:
- Path to a CA certificate used to authenticate with the API. The full certificate chain must be provided to
avoid certificate validation errors. Can also be specified via C(K8S_AUTH_SSL_CA_CERT) environment variable.
type: path
aliases: [ ssl_ca_cert ]
- version_added: "2.3.0"
+ version_added: 2.3.0
context:
description:
- Helm option to specify which kubeconfig context to use.
- If the value is not specified in the task, the value of environment variable C(K8S_AUTH_CONTEXT) will be used instead.
type: str
aliases: [ kube_context ]
- version_added: "2.4.0"
+ version_added: 2.4.0
kubeconfig:
description:
- Helm option to specify kubeconfig path to use.
@@ -111,14 +111,14 @@ options:
- The configuration can be provided as dictionary.
type: raw
aliases: [ kubeconfig_path ]
- version_added: "2.4.0"
+ version_added: 2.4.0
force_update:
description:
- Whether or not to replace (overwrite) the repo if it already exists.
type: bool
aliases: [ force ]
default: False
- version_added: "2.4.0"
+ version_added: 2.4.0
"""
EXAMPLES = r"""
@@ -166,8 +166,8 @@ msg:
sample: 'Repository already have a repository named bitnami'
"""
-import traceback
import copy
+import traceback
try:
import yaml
diff --git a/ansible_collections/kubernetes/core/plugins/modules/helm_template.py b/ansible_collections/kubernetes/core/plugins/modules/helm_template.py
index 2a1872573..b748b1554 100644
--- a/ansible_collections/kubernetes/core/plugins/modules/helm_template.py
+++ b/ansible_collections/kubernetes/core/plugins/modules/helm_template.py
@@ -53,7 +53,7 @@ options:
default: false
type: bool
aliases: [ dep_up ]
- version_added: "2.4.0"
+ version_added: 2.4.0
disable_hook:
description:
- Prevent hooks from running during install.
@@ -139,7 +139,7 @@ options:
- string
- json
- file
- version_added: '2.4.0'
+ version_added: 2.4.0
"""
EXAMPLES = r"""
diff --git a/ansible_collections/kubernetes/core/plugins/modules/k8s.py b/ansible_collections/kubernetes/core/plugins/modules/k8s.py
index a14dfc77b..f90d465d3 100644
--- a/ansible_collections/kubernetes/core/plugins/modules/k8s.py
+++ b/ansible_collections/kubernetes/core/plugins/modules/k8s.py
@@ -63,7 +63,7 @@ options:
C(['strategic-merge', 'merge']), which is ideal for using the same parameters on resource kinds that
combine Custom Resources and built-in resources.
- mutually exclusive with C(apply)
- - I(merge_type=json) is deprecated and will be removed in version 3.0.0. Please use M(kubernetes.core.k8s_json_patch) instead.
+ - I(merge_type=json) is deprecated and will be removed in version 4.0.0. Please use M(kubernetes.core.k8s_json_patch) instead.
choices:
- json
- merge
@@ -172,10 +172,31 @@ options:
- When set to True, server-side apply will force the changes against conflicts.
type: bool
default: False
+ delete_all:
+ description:
+ - When this option is set to I(true) and I(state=absent),
+ module will delete all resources of the specified resource type in the requested namespace.
+ - Ignored when C(state) is not set to I(absent) or when one of (src),
+ C(name) or C(resource_definition) is provided.
+ - Parameter C(kind) is required to use this option.
+ - This parameter can be used with C(label_selectors) to restrict the resources to be deleted.
+ type: bool
+ default: false
+ version_added: 2.5.0
+ aliases:
+ - all
+ hidden_fields:
+ description:
+ - Hide fields matching this option in the result
+ - An example might be C(hidden_fields=[metadata.managedFields])
+ - Only field definitions that don't reference list items are supported (so V(spec.containers[0]) would not work)
+ type: list
+ elements: str
+ version_added: 2.5.0
requirements:
- - "python >= 3.6"
- - "kubernetes >= 12.0.0"
+ - "python >= 3.9"
+ - "kubernetes >= 24.2.0"
- "PyYAML >= 3.11"
- "jsonpatch"
"""
@@ -343,6 +364,14 @@ EXAMPLES = r"""
apply: yes
server_side_apply:
field_manager: ansible
+
+# Delete all Deployment from specified namespace
+- name: Delete all Deployment from specified namespace
+ kubernetes.core.k8s:
+ api_version: apps/v1
+ namespace: testing
+ kind: Deployment
+ delete_all: true
"""
RETURN = r"""
@@ -394,10 +423,10 @@ from ansible_collections.kubernetes.core.plugins.module_utils.ansiblemodule impo
)
from ansible_collections.kubernetes.core.plugins.module_utils.args_common import (
AUTH_ARG_SPEC,
- WAIT_ARG_SPEC,
+ DELETE_OPTS_ARG_SPEC,
NAME_ARG_SPEC,
RESOURCE_ARG_SPEC,
- DELETE_OPTS_ARG_SPEC,
+ WAIT_ARG_SPEC,
)
from ansible_collections.kubernetes.core.plugins.module_utils.k8s.core import (
AnsibleK8SModule,
@@ -450,6 +479,8 @@ def argspec():
argument_spec["server_side_apply"] = dict(
type="dict", default=None, options=server_apply_spec()
)
+ argument_spec["delete_all"] = dict(type="bool", default=False, aliases=["all"])
+ argument_spec["hidden_fields"] = dict(type="list", elements="str")
return argument_spec
diff --git a/ansible_collections/kubernetes/core/plugins/modules/k8s_cluster_info.py b/ansible_collections/kubernetes/core/plugins/modules/k8s_cluster_info.py
index 9cd2ac17b..227d5ba25 100644
--- a/ansible_collections/kubernetes/core/plugins/modules/k8s_cluster_info.py
+++ b/ansible_collections/kubernetes/core/plugins/modules/k8s_cluster_info.py
@@ -11,7 +11,7 @@ __metaclass__ = type
DOCUMENTATION = r"""
module: k8s_cluster_info
-version_added: "0.11.1"
+version_added: 0.11.1
short_description: Describe Kubernetes (K8s) cluster, APIs available and their respective versions
@@ -34,8 +34,8 @@ extends_documentation_fragment:
- kubernetes.core.k8s_auth_options
requirements:
- - "python >= 3.6"
- - "kubernetes >= 12.0.0"
+ - "python >= 3.9"
+ - "kubernetes >= 24.2.0"
- "PyYAML >= 3.11"
"""
@@ -154,15 +154,15 @@ except ImportError:
from ansible_collections.kubernetes.core.plugins.module_utils.ansiblemodule import (
AnsibleModule,
)
+from ansible_collections.kubernetes.core.plugins.module_utils.args_common import (
+ AUTH_ARG_SPEC,
+)
from ansible_collections.kubernetes.core.plugins.module_utils.k8s.core import (
AnsibleK8SModule,
)
from ansible_collections.kubernetes.core.plugins.module_utils.k8s.exceptions import (
CoreException,
)
-from ansible_collections.kubernetes.core.plugins.module_utils.args_common import (
- AUTH_ARG_SPEC,
-)
def execute_module(module, client):
diff --git a/ansible_collections/kubernetes/core/plugins/modules/k8s_cp.py b/ansible_collections/kubernetes/core/plugins/modules/k8s_cp.py
index e8f1dea72..16f0f8cbc 100644
--- a/ansible_collections/kubernetes/core/plugins/modules/k8s_cp.py
+++ b/ansible_collections/kubernetes/core/plugins/modules/k8s_cp.py
@@ -14,7 +14,7 @@ module: k8s_cp
short_description: Copy files and directories to and from pod.
-version_added: "2.2.0"
+version_added: 2.2.0
author:
- Aubin Bikouo (@abikouo)
@@ -26,8 +26,8 @@ extends_documentation_fragment:
- kubernetes.core.k8s_auth_options
requirements:
- - "python >= 3.6"
- - "kubernetes >= 12.0.0"
+ - "python >= 3.9"
+ - "kubernetes >= 24.2.0"
options:
namespace:
@@ -139,9 +139,18 @@ result:
import copy
+from ansible.module_utils._text import to_native
from ansible_collections.kubernetes.core.plugins.module_utils.ansiblemodule import (
AnsibleModule,
)
+from ansible_collections.kubernetes.core.plugins.module_utils.args_common import (
+ AUTH_ARG_SPEC,
+)
+from ansible_collections.kubernetes.core.plugins.module_utils.copy import (
+ K8SCopyFromPod,
+ K8SCopyToPod,
+ check_pod,
+)
from ansible_collections.kubernetes.core.plugins.module_utils.k8s.client import (
get_api_client,
)
@@ -155,16 +164,6 @@ from ansible_collections.kubernetes.core.plugins.module_utils.k8s.service import
K8sService,
)
-from ansible_collections.kubernetes.core.plugins.module_utils.args_common import (
- AUTH_ARG_SPEC,
-)
-from ansible_collections.kubernetes.core.plugins.module_utils.copy import (
- K8SCopyFromPod,
- K8SCopyToPod,
- check_pod,
-)
-from ansible.module_utils._text import to_native
-
def argspec():
argument_spec = copy.deepcopy(AUTH_ARG_SPEC)
diff --git a/ansible_collections/kubernetes/core/plugins/modules/k8s_drain.py b/ansible_collections/kubernetes/core/plugins/modules/k8s_drain.py
index fef2ced78..87cb26824 100644
--- a/ansible_collections/kubernetes/core/plugins/modules/k8s_drain.py
+++ b/ansible_collections/kubernetes/core/plugins/modules/k8s_drain.py
@@ -15,7 +15,7 @@ module: k8s_drain
short_description: Drain, Cordon, or Uncordon node in k8s cluster
-version_added: "2.2.0"
+version_added: 2.2.0
author: Aubin Bikouo (@abikouo)
@@ -41,12 +41,21 @@ options:
- The name of the node.
required: true
type: str
+ pod_selectors:
+ description:
+ - Label selector to filter pods on the node.
+ - This option has effect only when C(state) is set to I(drain).
+ type: list
+ elements: str
+ version_added: 2.5.0
+ aliases:
+ - label_selectors
delete_options:
type: dict
+ default: {}
description:
- Specify options to delete pods.
- This option has effect only when C(state) is set to I(drain).
- default: {}
suboptions:
terminate_grace_period:
description:
@@ -88,8 +97,8 @@ options:
type: int
requirements:
- - python >= 3.6
- - kubernetes >= 12.0.0
+ - python >= 3.9
+ - kubernetes >= 24.2.0
"""
EXAMPLES = r"""
@@ -115,6 +124,14 @@ EXAMPLES = r"""
kubernetes.core.k8s_drain:
state: cordon
name: foo
+
+- name: Drain node "foo" using label selector to filter the list of pods to be drained.
+ kubernetes.core.k8s_drain:
+ state: drain
+ name: foo
+ pod_selectors:
+ - 'app!=csi-attacher'
+ - 'app!=csi-provisioner'
"""
RETURN = r"""
@@ -128,8 +145,9 @@ result:
import copy
import time
import traceback
-
from datetime import datetime
+
+from ansible.module_utils._text import to_native
from ansible_collections.kubernetes.core.plugins.module_utils.ansiblemodule import (
AnsibleModule,
)
@@ -146,12 +164,10 @@ from ansible_collections.kubernetes.core.plugins.module_utils.k8s.exceptions imp
CoreException,
)
-from ansible.module_utils._text import to_native
-
try:
from kubernetes.client.api import core_v1_api
- from kubernetes.client.models import V1DeleteOptions, V1ObjectMeta
from kubernetes.client.exceptions import ApiException
+ from kubernetes.client.models import V1DeleteOptions, V1ObjectMeta
except ImportError:
# ImportError are managed by the common module already.
pass
@@ -328,6 +344,17 @@ class K8sDrainAnsible(object):
)
)
+ def list_pods(self):
+ params = {
+ "field_selector": "spec.nodeName={name}".format(
+ name=self._module.params.get("name")
+ )
+ }
+ pod_selectors = self._module.params.get("pod_selectors")
+ if pod_selectors:
+ params["label_selector"] = ",".join(pod_selectors)
+ return self._api_instance.list_pod_for_all_namespaces(**params)
+
def delete_or_evict_pods(self, node_unschedulable):
# Mark node as unschedulable
result = []
@@ -350,12 +377,7 @@ class K8sDrainAnsible(object):
self.patch_node(unschedulable=False)
try:
- field_selector = "spec.nodeName={name}".format(
- name=self._module.params.get("name")
- )
- pod_list = self._api_instance.list_pod_for_all_namespaces(
- field_selector=field_selector
- )
+ pod_list = self.list_pods()
# Filter pods
force = self._drain_options.get("force", False)
ignore_daemonset = self._drain_options.get("ignore_daemonsets", False)
@@ -406,7 +428,6 @@ class K8sDrainAnsible(object):
return dict(result=" ".join(result))
def patch_node(self, unschedulable):
-
body = {"spec": {"unschedulable": unschedulable}}
try:
self._api_instance.patch_node(
@@ -418,7 +439,6 @@ class K8sDrainAnsible(object):
)
def execute_module(self):
-
state = self._module.params.get("state")
name = self._module.params.get("name")
try:
@@ -486,6 +506,11 @@ def argspec():
wait_sleep=dict(type="int", default=5),
),
),
+ pod_selectors=dict(
+ type="list",
+ elements="str",
+ aliases=["label_selectors"],
+ ),
)
)
return argument_spec
diff --git a/ansible_collections/kubernetes/core/plugins/modules/k8s_exec.py b/ansible_collections/kubernetes/core/plugins/modules/k8s_exec.py
index c54c23c06..9e0670fdb 100644
--- a/ansible_collections/kubernetes/core/plugins/modules/k8s_exec.py
+++ b/ansible_collections/kubernetes/core/plugins/modules/k8s_exec.py
@@ -15,7 +15,7 @@ module: k8s_exec
short_description: Execute command in Pod
-version_added: "0.10.0"
+version_added: 0.10.0
author: "Tristan de Cacqueray (@tristanC)"
@@ -26,8 +26,8 @@ extends_documentation_fragment:
- kubernetes.core.k8s_auth_options
requirements:
- - "python >= 3.6"
- - "kubernetes >= 12.0.0"
+ - "python >= 3.9"
+ - "kubernetes >= 24.2.0"
- "PyYAML >= 3.11"
notes:
@@ -131,27 +131,27 @@ except ImportError:
# ImportError are managed by the common module already.
pass
+from ansible.module_utils._text import to_native
from ansible_collections.kubernetes.core.plugins.module_utils.ansiblemodule import (
AnsibleModule,
)
-from ansible.module_utils._text import to_native
from ansible_collections.kubernetes.core.plugins.module_utils.common import (
AUTH_ARG_SPEC,
)
-from ansible_collections.kubernetes.core.plugins.module_utils.k8s.core import (
- AnsibleK8SModule,
-)
from ansible_collections.kubernetes.core.plugins.module_utils.k8s.client import (
get_api_client,
)
+from ansible_collections.kubernetes.core.plugins.module_utils.k8s.core import (
+ AnsibleK8SModule,
+)
from ansible_collections.kubernetes.core.plugins.module_utils.k8s.exceptions import (
CoreException,
)
try:
from kubernetes.client.apis import core_v1_api
- from kubernetes.stream import stream
from kubernetes.client.exceptions import ApiException
+ from kubernetes.stream import stream
except ImportError:
# ImportError are managed by the common module already.
pass
diff --git a/ansible_collections/kubernetes/core/plugins/modules/k8s_info.py b/ansible_collections/kubernetes/core/plugins/modules/k8s_info.py
index fdd5093ac..db85d6250 100644
--- a/ansible_collections/kubernetes/core/plugins/modules/k8s_info.py
+++ b/ansible_collections/kubernetes/core/plugins/modules/k8s_info.py
@@ -44,6 +44,14 @@ options:
type: list
elements: str
default: []
+ hidden_fields:
+ description:
+ - Hide fields matching any of the field definitions in the result
+ - An example might be C(hidden_fields=[metadata.managedFields])
+ - Only field definitions that don't reference list items are supported (so V(spec.containers[0]) would not work)
+ type: list
+ elements: str
+ version_added: 2.5.0
extends_documentation_fragment:
- kubernetes.core.k8s_auth_options
@@ -51,8 +59,8 @@ extends_documentation_fragment:
- kubernetes.core.k8s_wait_options
requirements:
- - "python >= 3.6"
- - "kubernetes >= 12.0.0"
+ - "python >= 3.9"
+ - "kubernetes >= 24.2.0"
- "PyYAML >= 3.11"
"""
@@ -157,12 +165,12 @@ from ansible_collections.kubernetes.core.plugins.module_utils.args_common import
AUTH_ARG_SPEC,
WAIT_ARG_SPEC,
)
-from ansible_collections.kubernetes.core.plugins.module_utils.k8s.core import (
- AnsibleK8SModule,
-)
from ansible_collections.kubernetes.core.plugins.module_utils.k8s.client import (
get_api_client,
)
+from ansible_collections.kubernetes.core.plugins.module_utils.k8s.core import (
+ AnsibleK8SModule,
+)
from ansible_collections.kubernetes.core.plugins.module_utils.k8s.exceptions import (
CoreException,
)
@@ -183,6 +191,7 @@ def execute_module(module, svc):
wait_sleep=module.params["wait_sleep"],
wait_timeout=module.params["wait_timeout"],
condition=module.params["wait_condition"],
+ hidden_fields=module.params["hidden_fields"],
)
module.exit_json(changed=False, **facts)
@@ -198,6 +207,7 @@ def argspec():
namespace=dict(),
label_selectors=dict(type="list", elements="str", default=[]),
field_selectors=dict(type="list", elements="str", default=[]),
+ hidden_fields=dict(type="list", elements="str"),
)
)
return args
diff --git a/ansible_collections/kubernetes/core/plugins/modules/k8s_json_patch.py b/ansible_collections/kubernetes/core/plugins/modules/k8s_json_patch.py
index 5ea8dbc95..92b652ca2 100644
--- a/ansible_collections/kubernetes/core/plugins/modules/k8s_json_patch.py
+++ b/ansible_collections/kubernetes/core/plugins/modules/k8s_json_patch.py
@@ -62,8 +62,8 @@ extends_documentation_fragment:
- kubernetes.core.k8s_wait_options
requirements:
- - "python >= 3.6"
- - "kubernetes >= 12.0.0"
+ - "python >= 3.9"
+ - "kubernetes >= 24.2.0"
- "PyYAML >= 3.11"
- "jsonpatch"
"""
@@ -127,8 +127,8 @@ error:
import copy
import traceback
-from ansible.module_utils.basic import missing_required_lib
from ansible.module_utils._text import to_native
+from ansible.module_utils.basic import missing_required_lib
from ansible_collections.kubernetes.core.plugins.module_utils.ansiblemodule import (
AnsibleModule,
)
@@ -152,7 +152,6 @@ from ansible_collections.kubernetes.core.plugins.module_utils.k8s.waiter import
get_waiter,
)
-
try:
from kubernetes.dynamic.exceptions import DynamicApiError
except ImportError:
diff --git a/ansible_collections/kubernetes/core/plugins/modules/k8s_log.py b/ansible_collections/kubernetes/core/plugins/modules/k8s_log.py
index 48537e4ac..c8cadbe2d 100644
--- a/ansible_collections/kubernetes/core/plugins/modules/k8s_log.py
+++ b/ansible_collections/kubernetes/core/plugins/modules/k8s_log.py
@@ -14,7 +14,7 @@ module: k8s_log
short_description: Fetch logs from Kubernetes resources
-version_added: "0.10.0"
+version_added: 0.10.0
author:
- "Fabian von Feilitzsch (@fabianvf)"
@@ -61,30 +61,30 @@ options:
- A relative time in seconds before the current time from which to show logs.
required: no
type: str
- version_added: '2.2.0'
+ version_added: 2.2.0
previous:
description:
- If C(true), print the logs for the previous instance of the container in a pod if it exists.
required: no
type: bool
default: False
- version_added: '2.4.0'
+ version_added: 2.4.0
tail_lines:
description:
- A number of lines from the end of the logs to retrieve.
required: no
type: int
- version_added: '2.4.0'
+ version_added: 2.4.0
all_containers:
description:
- If set to C(true), retrieve all containers' logs in the pod(s).
- mutually exclusive with C(container).
type: bool
- version_added: '2.4.0'
+ version_added: 2.4.0
requirements:
- - "python >= 3.6"
- - "kubernetes >= 12.0.0"
+ - "python >= 3.9"
+ - "kubernetes >= 24.2.0"
- "PyYAML >= 3.11"
"""
diff --git a/ansible_collections/kubernetes/core/plugins/modules/k8s_rollback.py b/ansible_collections/kubernetes/core/plugins/modules/k8s_rollback.py
index 8dd686294..4fbf61049 100644
--- a/ansible_collections/kubernetes/core/plugins/modules/k8s_rollback.py
+++ b/ansible_collections/kubernetes/core/plugins/modules/k8s_rollback.py
@@ -12,7 +12,7 @@ __metaclass__ = type
DOCUMENTATION = r"""
module: k8s_rollback
short_description: Rollback Kubernetes (K8S) Deployments and DaemonSets
-version_added: "1.0.0"
+version_added: 1.0.0
author:
- "Julien Huon (@julienhuon)"
description:
@@ -34,8 +34,8 @@ extends_documentation_fragment:
- kubernetes.core.k8s_auth_options
- kubernetes.core.k8s_name_options
requirements:
- - "python >= 3.6"
- - "kubernetes >= 12.0.0"
+ - "python >= 3.9"
+ - "kubernetes >= 24.2.0"
- "PyYAML >= 3.11"
"""
diff --git a/ansible_collections/kubernetes/core/plugins/modules/k8s_scale.py b/ansible_collections/kubernetes/core/plugins/modules/k8s_scale.py
index c3e5f8425..6e7d8c44a 100644
--- a/ansible_collections/kubernetes/core/plugins/modules/k8s_scale.py
+++ b/ansible_collections/kubernetes/core/plugins/modules/k8s_scale.py
@@ -6,7 +6,6 @@
from __future__ import absolute_import, division, print_function
-
__metaclass__ = type
@@ -46,8 +45,8 @@ options:
version_added: 2.0.0
requirements:
- - "python >= 3.6"
- - "kubernetes >= 12.0.0"
+ - "python >= 3.9"
+ - "kubernetes >= 24.2.0"
- "PyYAML >= 3.11"
"""
@@ -151,14 +150,13 @@ except ImportError:
pass
from ansible.module_utils._text import to_native
-
from ansible_collections.kubernetes.core.plugins.module_utils.ansiblemodule import (
AnsibleModule,
)
from ansible_collections.kubernetes.core.plugins.module_utils.args_common import (
AUTH_ARG_SPEC,
- RESOURCE_ARG_SPEC,
NAME_ARG_SPEC,
+ RESOURCE_ARG_SPEC,
)
from ansible_collections.kubernetes.core.plugins.module_utils.k8s.client import (
get_api_client,
@@ -170,15 +168,15 @@ from ansible_collections.kubernetes.core.plugins.module_utils.k8s.exceptions imp
CoreException,
ResourceTimeout,
)
+from ansible_collections.kubernetes.core.plugins.module_utils.k8s.resource import (
+ create_definitions,
+)
from ansible_collections.kubernetes.core.plugins.module_utils.k8s.service import (
diff_objects,
)
from ansible_collections.kubernetes.core.plugins.module_utils.k8s.waiter import (
get_waiter,
)
-from ansible_collections.kubernetes.core.plugins.module_utils.k8s.resource import (
- create_definitions,
-)
SCALE_ARG_SPEC = {
"replicas": {"type": "int", "required": True},
@@ -391,7 +389,7 @@ def scale(
namespace=namespace,
)
if not success:
- raise ResourceTimeout("Resource scaling timed out", **result)
+ raise ResourceTimeout("Resource scaling timed out", result)
match, diffs = diff_objects(existing.to_dict(), result["result"])
result["changed"] = not match
diff --git a/ansible_collections/kubernetes/core/plugins/modules/k8s_service.py b/ansible_collections/kubernetes/core/plugins/modules/k8s_service.py
index 1eed29bd3..b3cb74444 100644
--- a/ansible_collections/kubernetes/core/plugins/modules/k8s_service.py
+++ b/ansible_collections/kubernetes/core/plugins/modules/k8s_service.py
@@ -83,8 +83,8 @@ options:
type: bool
requirements:
- - python >= 3.6
- - kubernetes >= 12.0.0
+ - python >= 3.9
+ - kubernetes >= 24.2.0
"""
EXAMPLES = r"""
@@ -143,7 +143,6 @@ result:
"""
import copy
-
from collections import defaultdict
from ansible_collections.kubernetes.core.plugins.module_utils.ansiblemodule import (
@@ -154,25 +153,24 @@ from ansible_collections.kubernetes.core.plugins.module_utils.args_common import
COMMON_ARG_SPEC,
RESOURCE_ARG_SPEC,
)
-from ansible_collections.kubernetes.core.plugins.module_utils.k8s.core import (
- AnsibleK8SModule,
-)
from ansible_collections.kubernetes.core.plugins.module_utils.k8s.client import (
get_api_client,
)
+from ansible_collections.kubernetes.core.plugins.module_utils.k8s.core import (
+ AnsibleK8SModule,
+)
from ansible_collections.kubernetes.core.plugins.module_utils.k8s.exceptions import (
CoreException,
)
-from ansible_collections.kubernetes.core.plugins.module_utils.k8s.service import (
- K8sService,
-)
from ansible_collections.kubernetes.core.plugins.module_utils.k8s.resource import (
create_definitions,
)
from ansible_collections.kubernetes.core.plugins.module_utils.k8s.runner import (
perform_action,
)
-
+from ansible_collections.kubernetes.core.plugins.module_utils.k8s.service import (
+ K8sService,
+)
SERVICE_ARG_SPEC = {
"apply": {"type": "bool", "default": False},
diff --git a/ansible_collections/kubernetes/core/plugins/modules/k8s_taint.py b/ansible_collections/kubernetes/core/plugins/modules/k8s_taint.py
index bfa80db5e..a7c0ae27d 100644
--- a/ansible_collections/kubernetes/core/plugins/modules/k8s_taint.py
+++ b/ansible_collections/kubernetes/core/plugins/modules/k8s_taint.py
@@ -13,7 +13,7 @@ __metaclass__ = type
DOCUMENTATION = r"""
module: k8s_taint
short_description: Taint a node in a Kubernetes/OpenShift cluster
-version_added: "2.3.0"
+version_added: 2.3.0
author: Alina Buzachis (@alinabuzachis)
description:
- Taint allows a node to refuse Pod to be scheduled unless that Pod has a matching toleration.
@@ -60,8 +60,8 @@ options:
default: false
type: bool
requirements:
- - python >= 3.6
- - kubernetes >= 12.0.0
+ - python >= 3.9
+ - kubernetes >= 24.2.0
"""
EXAMPLES = r"""
@@ -127,7 +127,6 @@ result:
import copy
from ansible.module_utils._text import to_native
-
from ansible_collections.kubernetes.core.plugins.module_utils.ansiblemodule import (
AnsibleModule,
)
diff --git a/ansible_collections/kubernetes/core/requirements.txt b/ansible_collections/kubernetes/core/requirements.txt
index cea805958..320e4eb7f 100644
--- a/ansible_collections/kubernetes/core/requirements.txt
+++ b/ansible_collections/kubernetes/core/requirements.txt
@@ -1,3 +1,3 @@
-kubernetes>=12.0.0
+kubernetes>=24.2.0
requests-oauthlib
jsonpatch
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm/defaults/main.yml b/ansible_collections/kubernetes/core/tests/integration/targets/helm/defaults/main.yml
index ae860ce85..39841cce6 100644
--- a/ansible_collections/kubernetes/core/tests/integration/targets/helm/defaults/main.yml
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm/defaults/main.yml
@@ -24,3 +24,5 @@ test_namespace:
- "helm-local-path-003"
- "helm-from-repository"
- "helm-from-url"
+ - "helm-reuse-values"
+ - "helm-chart-with-space-into-name"
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm/library/helm_test_pending.py b/ansible_collections/kubernetes/core/tests/integration/targets/helm/library/helm_test_pending.py
new file mode 100644
index 000000000..cc8bde7f9
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm/library/helm_test_pending.py
@@ -0,0 +1,130 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+# Copyright: (c) 2023, 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 = r"""
+---
+module: helm_test_pending
+short_description: created pending-install release
+author:
+ - Aubin Bikouo (@abikouo)
+requirements:
+ - "helm (https://github.com/helm/helm/releases)"
+description:
+ - This module is used to create a pending install release for integration testing
+ - The scope of this module is the integration testing of the kubernetes.core collection only.
+options:
+ binary_path:
+ description:
+ - The path of a helm binary to use.
+ required: true
+ type: path
+ chart_ref:
+ description:
+ - chart reference on chart repository (e.g. my-repo/my-chart-ref)
+ required: true
+ type: str
+ chart_release:
+ description:
+ - Release name to manage.
+ required: true
+ type: str
+ chart_release_namespace:
+ description:
+ - Kubernetes namespace where the chart should be installed.
+ required: true
+ type: str
+"""
+
+EXAMPLES = r"""
+"""
+
+RETURN = r"""
+"""
+
+import json
+import subprocess
+import time
+
+from ansible.module_utils.basic import AnsibleModule
+
+
+class HelmReleaseNotFoundError(Exception):
+ def __init__(self, message):
+ super().__init__(message)
+
+
+def create_pending_install_release(helm_binary, chart_ref, chart_release, namespace):
+ # create pending-install release
+ command = [
+ helm_binary,
+ "install",
+ chart_release,
+ chart_ref,
+ "--namespace",
+ namespace,
+ "--wait",
+ ]
+ proc = subprocess.Popen(command)
+ time.sleep(2)
+ proc.kill()
+ # ensure release status is pending-install
+ command = [
+ helm_binary,
+ "list",
+ "--all",
+ "--output=json",
+ "--namespace",
+ namespace,
+ "--filter",
+ chart_release,
+ ]
+ cmd = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ out, err = cmd.communicate()
+
+ data = json.loads(out)
+ if not data:
+ error = "Release %s not found." % chart_release
+ raise HelmReleaseNotFoundError(message=error)
+ return data[0]["status"] == "pending-install", data[0]["status"]
+
+
+def main():
+ module = AnsibleModule(
+ argument_spec=dict(
+ binary_path=dict(type="path", required=True),
+ chart_ref=dict(type="str", required=True),
+ chart_release=dict(type="str", required=True),
+ chart_release_namespace=dict(type="str", required=True),
+ ),
+ )
+
+ params = dict(
+ helm_binary=module.params.get("binary_path"),
+ chart_release=module.params.get("chart_release"),
+ chart_ref=module.params.get("chart_ref"),
+ namespace=module.params.get("chart_release_namespace"),
+ )
+
+ try:
+ result, status = create_pending_install_release(**params)
+ if not result:
+ module.fail_json(
+ msg="unable to create pending-install release, current status is %s"
+ % status
+ )
+ module.exit_json(changed=True, msg="Release created with status '%s'" % status)
+ except HelmReleaseNotFoundError as err:
+ module.fail_json(
+ msg="Error while trying to create pending-install release due to '%s'" % err
+ )
+
+
+if __name__ == "__main__":
+ main()
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm/library/helm_test_version.py b/ansible_collections/kubernetes/core/tests/integration/targets/helm/library/helm_test_version.py
index dfd9a0860..1ac12e0f6 100644
--- a/ansible_collections/kubernetes/core/tests/integration/targets/helm/library/helm_test_version.py
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm/library/helm_test_version.py
@@ -52,12 +52,12 @@ result:
"""
import re
+
+from ansible.module_utils.basic import AnsibleModule
from ansible_collections.kubernetes.core.plugins.module_utils.version import (
LooseVersion,
)
-from ansible.module_utils.basic import AnsibleModule
-
def main():
module = AnsibleModule(
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/helm/playbook.yaml
new file mode 100644
index 000000000..92e2e48b1
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm/playbook.yaml
@@ -0,0 +1,7 @@
+---
+- connection: local
+ gather_facts: true
+ hosts: localhost
+
+ roles:
+ - helm
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/helm/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/run_test.yml b/ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/run_test.yml
index 545b25c8e..76d55b22c 100644
--- a/ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/run_test.yml
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/run_test.yml
@@ -25,12 +25,18 @@
- from_repository
- from_url
+- name: test helm upgrade with reuse_values
+ include_tasks: test_helm_reuse_values.yml
+
- name: test helm dependency update
include_tasks: test_up_dep.yml
- name: Test helm uninstall
include_tasks: test_helm_uninstall.yml
+- name: Test helm install with chart name containing space
+ include_tasks: test_helm_with_space_into_chart_name.yml
+
# https://github.com/ansible-collections/community.kubernetes/issues/296
- name: Test Skip CRDS feature in helm chart install
include_tasks: test_crds.yml
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/test_helm_reuse_values.yml b/ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/test_helm_reuse_values.yml
new file mode 100644
index 000000000..9384fd4f4
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/test_helm_reuse_values.yml
@@ -0,0 +1,75 @@
+---
+- name: Test helm reuse_values
+ vars:
+ helm_namespace: "{{ test_namespace[9] }}"
+ chart_release_values:
+ replica:
+ replicaCount: 3
+ master:
+ count: 1
+ kind: Deployment
+ chart_reuse_values:
+ replica:
+ replicaCount: 1
+ master:
+ count: 3
+ block:
+ - name: Initial chart installation
+ helm:
+ binary_path: "{{ helm_binary }}"
+ chart_ref: redis
+ chart_repo_url: https://charts.bitnami.com/bitnami
+ release_name: test-redis
+ release_namespace: "{{ helm_namespace }}"
+ create_namespace: true
+ release_values: "{{ chart_release_values }}"
+ register: install
+
+ - name: Get value set as string
+ helm_info:
+ binary_path: "{{ helm_binary }}"
+ release_name: test-redis
+ release_namespace: "{{ helm_namespace }}"
+ register: release_value
+
+ - name: Validate that chart values are as expected
+ assert:
+ that:
+ - install is changed
+ - '"--reuse-values=True" not in install.command'
+ - release_value["status"]["values"] == chart_release_values
+
+ - name: Upgrade chart using reuse_values=true
+ helm:
+ binary_path: "{{ helm_binary }}"
+ chart_ref: redis
+ chart_repo_url: https://charts.bitnami.com/bitnami
+ release_name: test-redis
+ release_namespace: "{{ helm_namespace }}"
+ reuse_values: true
+ reset_values: false
+ release_values: "{{ chart_reuse_values }}"
+ register: upgrade
+
+ - name: Get value set as string
+ helm_info:
+ binary_path: "{{ helm_binary }}"
+ release_name: test-redis
+ release_namespace: "{{ helm_namespace }}"
+ register: release_value
+
+ - name: Validate that chart values are as expected
+ assert:
+ that:
+ - upgrade is changed
+ - '"--reuse-values=True" in upgrade.command'
+ - '"--reset-values" not in upgrade.command'
+ - release_value["status"]["values"] == chart_release_values | combine(chart_reuse_values, recursive=true)
+
+ always:
+ - name: Remove helm namespace
+ k8s:
+ api_version: v1
+ kind: Namespace
+ name: "{{ helm_namespace }}"
+ state: absent
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/test_helm_uninstall.yml b/ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/test_helm_uninstall.yml
index e82891e4d..23e36fb0e 100644
--- a/ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/test_helm_uninstall.yml
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/test_helm_uninstall.yml
@@ -7,6 +7,7 @@
- vars:
chart_source: "https://github.com/kubernetes/kube-state-metrics/releases/download/kube-state-metrics-helm-chart-2.13.3/kube-state-metrics-2.13.3.tgz"
chart_name: "test-wait-uninstall"
+ chart_name_pending: "test-uninstall-pending-release"
helm_namespace: "{{ test_namespace[1] }}"
block:
@@ -64,6 +65,36 @@
wait: yes
register: uninstall
+ # Test uninstall chart release with 'pending-install' status
+ - name: Create chart release with 'pending-install' status
+ helm_test_pending:
+ binary_path: "{{ helm_binary }}"
+ chart_ref: "{{ chart_source }}"
+ chart_release: "{{ chart_name_pending }}"
+ chart_release_namespace: "{{ helm_namespace }}"
+
+ - name: Uninstall chart release with 'pending-install' status
+ helm:
+ binary_path: "{{ helm_binary }}"
+ release_name: "{{ chart_name_pending }}"
+ namespace: "{{ helm_namespace }}"
+ release_state: absent
+ register: _uninstall
+
+ - name: Get Helm release details
+ helm_info:
+ binary_path: "{{ helm_binary }}"
+ release_namespace: "{{ helm_namespace }}"
+ release_state: pending
+ release_name: "{{ chart_name_pending }}"
+ register: _info
+
+ - name: assert release does not exist anymore
+ assert:
+ that:
+ - _uninstall is changed
+ - _info.status is undefined
+
always:
- name: Delete temp directory
file:
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/test_helm_with_space_into_chart_name.yml b/ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/test_helm_with_space_into_chart_name.yml
new file mode 100644
index 000000000..fcf867665
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/test_helm_with_space_into_chart_name.yml
@@ -0,0 +1,58 @@
+---
+- name: Create test directory
+ ansible.builtin.tempfile:
+ state: directory
+ suffix: .helm
+ register: test_dir
+
+- name: Test helm using directory with space
+ vars:
+ helm_dir: "{{ test_dir.path }}/Deploy Chart"
+ helm_namespace: "{{ test_namespace[10] }}"
+ chart_release_name: "deploy-chart-with-space-into-name"
+ helm_local_src: "test-chart"
+ block:
+ - name: Copy helm file into destination
+ ansible.builtin.copy:
+ src: "{{ helm_local_src }}"
+ dest: "{{ helm_dir }}"
+
+ - name: Install chart from local source with Space into name
+ helm:
+ binary_path: "{{ helm_binary }}"
+ name: "{{ chart_release_name }}"
+ chart_ref: "{{ helm_dir }}/{{ helm_local_src | basename }}"
+ namespace: "{{ helm_namespace }}"
+ create_namespace: true
+ register: install_chart
+
+ - name: Assert that chart is installed
+ assert:
+ that:
+ - install_chart is changed
+ - install_chart.status.status | lower == 'deployed'
+
+ - name: Check helm_info content
+ helm_info:
+ binary_path: "{{ helm_binary }}"
+ name: "{{ chart_release_name }}"
+ namespace: "{{ helm_namespace }}"
+ register: chart_info
+
+ - name: Assert that Chart is installed (using helm_info)
+ assert:
+ that:
+ - chart_info.status.status | lower == 'deployed'
+
+ always:
+ - name: Delete temporary directory
+ ansible.builtin.file:
+ state: absent
+ name: "{{ test_dir.path }}"
+
+ - name: Remove helm namespace
+ k8s:
+ api_version: v1
+ kind: Namespace
+ name: "{{ helm_namespace }}"
+ state: absent
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/files/test-chart-reuse-values/Chart.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/files/test-chart-reuse-values/Chart.yaml
new file mode 100644
index 000000000..c3681dba0
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/files/test-chart-reuse-values/Chart.yaml
@@ -0,0 +1,24 @@
+apiVersion: v2
+name: chart-reuse-values
+description: A Helm chart for Kubernetes
+
+# A chart can be either an 'application' or a 'library' chart.
+#
+# Application charts are a collection of templates that can be packaged into versioned archives
+# to be deployed.
+#
+# Library charts provide useful utilities or functions for the chart developer. They're included as
+# a dependency of application charts to inject those utilities and functions into the rendering
+# pipeline. Library charts do not define any templates and therefore cannot be deployed.
+type: application
+
+# This is the chart version. This version number should be incremented each time you make changes
+# to the chart and its templates, including the app version.
+# Versions are expected to follow Semantic Versioning (https://semver.org/)
+version: 0.1.0
+
+# This is the version number of the application being deployed. This version number should be
+# incremented each time you make changes to the application. Versions are not expected to
+# follow Semantic Versioning. They should reflect the version the application is using.
+# It is recommended to use it with quotes.
+appVersion: "1.16.0"
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/files/test-chart-reuse-values/templates/configmap.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/files/test-chart-reuse-values/templates/configmap.yaml
new file mode 100644
index 000000000..4bbad8d69
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/files/test-chart-reuse-values/templates/configmap.yaml
@@ -0,0 +1,7 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: cmap
+data:
+ ansible_version: {{ .Values.ansible_version }}
+ phase: {{ .Values.phase }}
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/files/test-chart-reuse-values/values.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/files/test-chart-reuse-values/values.yaml
new file mode 100644
index 000000000..f2cd9d72b
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/files/test-chart-reuse-values/values.yaml
@@ -0,0 +1,2 @@
+ansible_version: milestone
+phase: uat
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/playbook.yaml
new file mode 100644
index 000000000..cb953721a
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/playbook.yaml
@@ -0,0 +1,7 @@
+---
+- connection: local
+ gather_facts: true
+ hosts: localhost
+
+ roles:
+ - helm_diff
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/tasks/main.yml b/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/tasks/main.yml
index d54d0ba72..c37d947f5 100644
--- a/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/tasks/main.yml
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/tasks/main.yml
@@ -143,6 +143,8 @@
chart_ref: "{{ test_chart_ref }}"
values:
foo: gaz
+ values_files:
+ - "{{ test_chart_ref }}/values.yml"
register: install
- assert:
@@ -157,6 +159,46 @@
chart_ref: "{{ test_chart_ref }}"
values:
foo: gaz
+ values_files:
+ - "{{ test_chart_ref }}/values.yml"
+ register: install
+
+ - assert:
+ that:
+ - install is not changed
+
+ - name: Upgrade with set_values
+ helm:
+ binary_path: "{{ helm_binary }}"
+ name: test-chart
+ namespace: "{{ helm_namespace }}"
+ chart_ref: "{{ test_chart_ref }}"
+ values:
+ foo: gaz
+ values_files:
+ - "{{ test_chart_ref }}/values.yml"
+ set_values:
+ - value: foo=qux
+ value_type: string
+ register: install
+
+ - assert:
+ that:
+ - install is changed
+
+ - name: Upgrade with set_values idempotency check
+ helm:
+ binary_path: "{{ helm_binary }}"
+ name: test-chart
+ namespace: "{{ helm_namespace }}"
+ chart_ref: "{{ test_chart_ref }}"
+ values:
+ foo: gaz
+ values_files:
+ - "{{ test_chart_ref }}/values.yml"
+ set_values:
+ - value: foo=qux
+ value_type: string
register: install
- assert:
@@ -256,4 +298,7 @@
kind: Namespace
name: "{{ helm_namespace }}"
state: absent
+ wait: true
ignore_errors: yes
+
+- include_tasks: reuse_values.yml
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/tasks/reuse_values.yml b/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/tasks/reuse_values.yml
new file mode 100644
index 000000000..f2d80a8f4
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/tasks/reuse_values.yml
@@ -0,0 +1,93 @@
+---
+- name: Create temporary directory for helm chart
+ tempfile:
+ suffix: .helm
+ state: directory
+ register: helm_dir
+
+- name: Test helm diff functionality
+ vars:
+ test_chart_path: "{{ helm_dir.path }}/test-chart-reuse-values"
+ test_release_name: "myrelease"
+
+ block:
+
+ - name: Install helm diff
+ kubernetes.core.helm_plugin:
+ binary_path: "{{ helm_binary }}"
+ state: present
+ plugin_path: https://github.com/databus23/helm-diff
+ plugin_version: 3.9.4
+
+ - name: Copy test chart
+ ansible.builtin.copy:
+ src: "test-chart-reuse-values"
+ dest: "{{ helm_dir.path }}"
+
+ - name: Create helm release
+ kubernetes.core.helm:
+ state: present
+ binary_path: "{{ helm_binary }}"
+ chart_ref: "{{ test_chart_path }}"
+ release_name: "{{ test_release_name }}"
+ release_namespace: "{{ helm_namespace }}"
+ create_namespace: true
+ release_values:
+ ansible_version: devel
+ phase: ci
+ wait: true
+
+ - name: Upgrade helm release (reset_values=false and reuse_values=true)
+ kubernetes.core.helm:
+ binary_path: "{{ helm_binary }}"
+ chart_ref: "{{ test_chart_path }}"
+ reset_values: false
+ reuse_values: true
+ release_name: "{{ test_release_name }}"
+ release_namespace: "{{ helm_namespace }}"
+ values:
+ ansible_version: devel
+ register: helm_upgrade
+
+ - name: Ensure task did not reported change
+ assert:
+ that:
+ - helm_upgrade is not changed
+
+ - name: Upgrade helm release (reuse_values=true with default value for reset_values)
+ kubernetes.core.helm:
+ binary_path: "{{ helm_binary }}"
+ chart_ref: "{{ test_chart_path }}"
+ reuse_values: true
+ release_name: "{{ test_release_name }}"
+ release_namespace: "{{ helm_namespace }}"
+ values:
+ ansible_version: devel
+ register: helm_upgrade
+
+ - name: Ensure task reported change
+ assert:
+ that:
+ - helm_upgrade is changed
+
+ always:
+ - name: Remove temporary directory
+ file:
+ path: "{{ helm_dir.path }}"
+ state: absent
+ ignore_errors: true
+
+ - name: Uninstall helm diff
+ kubernetes.core.helm_plugin:
+ binary_path: "{{ helm_binary }}"
+ state: absent
+ plugin_name: diff
+ ignore_errors: true
+
+ - name: Remove helm namespace
+ kubernetes.core.k8s:
+ api_version: v1
+ kind: Namespace
+ name: "{{ helm_namespace }}"
+ state: absent
+ ignore_errors: true
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/meta/main.yml b/ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/meta/main.yml
index 2e3ba2fa3..10d989e78 100644
--- a/ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/meta/main.yml
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/meta/main.yml
@@ -1,3 +1,4 @@
---
dependencies:
- remove_namespace
+ - install_helm
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/playbook.yaml
new file mode 100644
index 000000000..8c6c252a7
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/playbook.yaml
@@ -0,0 +1,7 @@
+---
+- connection: local
+ gather_facts: true
+ hosts: localhost
+
+ roles:
+ - helm_kubeconfig
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_plugin/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/helm_plugin/playbook.yaml
new file mode 100644
index 000000000..2b50d19c6
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_plugin/playbook.yaml
@@ -0,0 +1,7 @@
+---
+- connection: local
+ gather_facts: true
+ hosts: localhost
+
+ roles:
+ - helm_plugin
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_plugin/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/helm_plugin/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_plugin/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_pull/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/helm_pull/playbook.yaml
new file mode 100644
index 000000000..43c5e6d43
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_pull/playbook.yaml
@@ -0,0 +1,7 @@
+---
+- connection: local
+ gather_facts: true
+ hosts: localhost
+
+ roles:
+ - helm_pull
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_pull/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/helm_pull/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_pull/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_repository/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/helm_repository/playbook.yaml
new file mode 100644
index 000000000..f2a56a7bb
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_repository/playbook.yaml
@@ -0,0 +1,7 @@
+---
+- connection: local
+ gather_facts: true
+ hosts: localhost
+
+ roles:
+ - helm_repository
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_repository/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/helm_repository/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_repository/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_set_values/meta/main.yml b/ansible_collections/kubernetes/core/tests/integration/targets/helm_set_values/meta/main.yml
index 2e3ba2fa3..10d989e78 100644
--- a/ansible_collections/kubernetes/core/tests/integration/targets/helm_set_values/meta/main.yml
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_set_values/meta/main.yml
@@ -1,3 +1,4 @@
---
dependencies:
- remove_namespace
+ - install_helm
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_set_values/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/helm_set_values/playbook.yaml
new file mode 100644
index 000000000..5d3109d24
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_set_values/playbook.yaml
@@ -0,0 +1,7 @@
+---
+- connection: local
+ gather_facts: true
+ hosts: localhost
+
+ roles:
+ - helm_set_values
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_set_values/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/helm_set_values/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_set_values/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/inventory_k8s/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/inventory_k8s/runme.sh
index 4548f4bb9..0691d8d5d 100755
--- a/ansible_collections/kubernetes/core/tests/integration/targets/inventory_k8s/runme.sh
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/inventory_k8s/runme.sh
@@ -8,6 +8,7 @@ USER_CREDENTIALS_DIR=$(pwd)
ansible-playbook playbooks/delete_resources.yml -e "user_credentials_dir=${USER_CREDENTIALS_DIR}" "$@"
{
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
export ANSIBLE_INVENTORY_ENABLED=kubernetes.core.k8s,yaml
export ANSIBLE_PYTHON_INTERPRETER=auto_silent
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_access_review/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_access_review/playbook.yaml
new file mode 100644
index 000000000..a97d2ee20
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_access_review/playbook.yaml
@@ -0,0 +1,6 @@
+---
+- connection: local
+ gather_facts: false
+ hosts: localhost
+ roles:
+ - k8s_access_review
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_access_review/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_access_review/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_access_review/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_append_hash/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_append_hash/playbook.yaml
new file mode 100644
index 000000000..1ef60c4aa
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_append_hash/playbook.yaml
@@ -0,0 +1,6 @@
+---
+- connection: local
+ gather_facts: false
+ hosts: localhost
+ roles:
+ - k8s_append_hash
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_append_hash/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_append_hash/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_append_hash/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_apply/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_apply/playbook.yaml
new file mode 100644
index 000000000..a1ec85526
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_apply/playbook.yaml
@@ -0,0 +1,6 @@
+---
+- connection: local
+ gather_facts: false
+ hosts: localhost
+ roles:
+ - k8s_apply
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_apply/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_apply/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_apply/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_check_mode/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_check_mode/playbook.yaml
new file mode 100644
index 000000000..ee9f14f57
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_check_mode/playbook.yaml
@@ -0,0 +1,6 @@
+---
+- connection: local
+ gather_facts: false
+ hosts: localhost
+ roles:
+ - k8s_check_mode
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_check_mode/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_check_mode/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_check_mode/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_cluster_info/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_cluster_info/playbook.yaml
new file mode 100644
index 000000000..3f26f1dd1
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_cluster_info/playbook.yaml
@@ -0,0 +1,6 @@
+---
+- connection: local
+ gather_facts: false
+ hosts: localhost
+ roles:
+ - k8s_cluster_info
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_cluster_info/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_cluster_info/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_cluster_info/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/library/k8s_create_file.py b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/library/k8s_create_file.py
deleted file mode 100644
index 6898c36a5..000000000
--- a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/library/k8s_create_file.py
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-# Copyright: (c) 2021, Aubin Bikouo <@abikouo>
-# 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 = r"""
-
-module: k8s_create_file
-
-short_description: Create large file with a defined size.
-
-author:
- - Aubin Bikouo (@abikouo)
-
-description:
- - This module is used to validate k8s_cp module.
-
-options:
- path:
- description:
- - The destination path for the file to create.
- type: path
- required: yes
- size:
- description:
- - The size of the output file in MB.
- type: int
- default: 400
- binary:
- description:
- - If this flag is set to yes, the generated file content binary data.
- type: bool
- default: False
-"""
-
-EXAMPLES = r"""
-- name: create 150MB file
- k8s_diff:
- path: large_file.txt
- size: 150
-"""
-
-
-RETURN = r"""
-"""
-
-import os
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils._text import to_native
-
-
-def execute_module(module):
- try:
- size = module.params.get("size") * 1024 * 1024
- path = module.params.get("path")
- write_mode = "w"
- if module.params.get("binary"):
- content = os.urandom(size)
- write_mode = "wb"
- else:
- content = ""
- count = 0
- while len(content) < size:
- content += "This file has been generated using ansible: {0}\n".format(
- count
- )
- count += 1
-
- with open(path, write_mode) as f:
- f.write(content)
- module.exit_json(changed=True, size=len(content))
- except Exception as e:
- module.fail_json(msg="failed to create file due to: {0}".format(to_native(e)))
-
-
-def main():
- argument_spec = {}
- argument_spec["size"] = {"type": "int", "default": 400}
- argument_spec["path"] = {"type": "path", "required": True}
- argument_spec["binary"] = {"type": "bool", "default": False}
- module = AnsibleModule(argument_spec=argument_spec)
-
- execute_module(module)
-
-
-if __name__ == "__main__":
- main()
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/library/kubectl_file_compare.py b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/library/kubectl_file_compare.py
index bcf097839..e84bbffd8 100644
--- a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/library/kubectl_file_compare.py
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/library/kubectl_file_compare.py
@@ -89,10 +89,10 @@ EXAMPLES = r"""
RETURN = r"""
"""
-import os
import filecmp
-
+import os
from tempfile import NamedTemporaryFile, TemporaryDirectory
+
from ansible.module_utils.basic import AnsibleModule
@@ -157,7 +157,6 @@ def compare_directories(dir1, dir2):
def execute_module(module):
-
args = module.params.get("args")
local_path = module.params.get("local_path")
namespace = module.params.get("namespace")
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/playbook.yaml
new file mode 100644
index 000000000..a0fec9444
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/playbook.yaml
@@ -0,0 +1,6 @@
+---
+- connection: local
+ gather_facts: false
+ hosts: localhost
+ roles:
+ - k8s_copy
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/tasks/test_copy_large_file.yml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/tasks/test_copy_large_file.yml
index 6758202eb..27d4050ac 100644
--- a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/tasks/test_copy_large_file.yml
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/tasks/test_copy_large_file.yml
@@ -10,16 +10,13 @@
path: "{{ test_directory }}"
state: directory
- - name: create large text file
- k8s_create_file:
- path: "{{ test_directory }}/large_text_file.txt"
- size: 150
+ - name: Create a large text file
+ ansible.builtin.shell:
+ cmd: base64 /dev/random | head -c 150M > {{ test_directory }}/large_text_file.txt
- - name: create large binary file
- k8s_create_file:
- path: "{{ test_directory }}/large_bin_file.bin"
- size: 200
- binary: true
+ - name: Create a large binary file
+ ansible.builtin.command:
+ cmd: dd if=/dev/random of={{ test_directory }}/large_bin_file.bin bs=1M count=200
# Copy large text file from/to local filesystem to Pod
- name: copy large file into remote Pod
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_crd/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_crd/playbook.yaml
new file mode 100644
index 000000000..303acd539
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_crd/playbook.yaml
@@ -0,0 +1,6 @@
+---
+- connection: local
+ gather_facts: false
+ hosts: localhost
+ roles:
+ - k8s_crd
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_crd/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_crd/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_crd/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/files/deployments.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/files/deployments.yaml
new file mode 100644
index 000000000..594d4522a
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/files/deployments.yaml
@@ -0,0 +1,70 @@
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: nginx-d
+ labels:
+ context: ansible
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ context: ansible
+ template:
+ metadata:
+ labels:
+ context: ansible
+ spec:
+ containers:
+ - name: nginx
+ image: nginx
+ ports:
+ - containerPort: 80
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: openjdk-d
+ labels:
+ context: ansible
+spec:
+ replicas: 2
+ selector:
+ matchLabels:
+ context: ansible
+ template:
+ metadata:
+ labels:
+ context: ansible
+ spec:
+ containers:
+ - name: openjdk
+ image: openjdk:17
+ command:
+ - /bin/sh
+ - -c
+ - while true;do date;sleep 5; done
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: alpine-d
+ labels:
+ context: ansible
+spec:
+ replicas: 3
+ selector:
+ matchLabels:
+ context: ansible
+ template:
+ metadata:
+ labels:
+ context: ansible
+ spec:
+ containers:
+ - name: alpine
+ image: alpine
+ command:
+ - /bin/sh
+ - -c
+ - while true;do date;sleep 5; done
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/playbook.yaml
new file mode 100644
index 000000000..ab89107b0
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/playbook.yaml
@@ -0,0 +1,6 @@
+---
+- connection: local
+ gather_facts: false
+ hosts: localhost
+ roles:
+ - k8s_delete
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/tasks/main.yml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/tasks/main.yml
index 88edf59bd..d7b144cb4 100644
--- a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/tasks/main.yml
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/tasks/main.yml
@@ -121,6 +121,77 @@
that:
- _result.resources | length == 0
+ # test deletion using delete_all=true
+ - name: Create deployments
+ k8s:
+ namespace: "{{ test_namespace }}"
+ src: files/deployments.yaml
+ wait: true
+ register: result
+
+ - name: Trying to delete deployments without name and label_selectors and select_all=false
+ k8s:
+ kind: Deployment
+ api_version: apps/v1
+ namespace: "{{ test_namespace }}"
+ state: absent
+ register: _delete
+
+ - name: Ensure Deployment were not deleted
+ assert:
+ that:
+ - _delete is not changed
+
+ - name: Validate that Deployment still exist
+ k8s_info:
+ kind: Deployment
+ api_version: apps/v1
+ namespace: "{{ test_namespace }}"
+ label_selectors:
+ - context=ansible
+ register: _deployment
+ failed_when: _deployment.resources | length == 0
+
+ - name: Trying to delete using delete_all=true but missing kind option
+ k8s:
+ api_version: apps/v1
+ namespace: "{{ test_namespace }}"
+ delete_all: true
+ state: absent
+ register: _delete
+ ignore_errors: true
+
+ - name: assert task failed with proper message
+ assert:
+ that:
+ - _delete is failed
+ - _delete.msg == "'kind' option is required to specify the resource type."
+
+ - name: Trying to delete deployments without name and label_selectors and delete_all=true
+ k8s:
+ kind: Deployment
+ api_version: apps/v1
+ namespace: "{{ test_namespace }}"
+ delete_all: true
+ wait: true
+ state: absent
+ register: _delete
+
+ - name: Ensure Deployment were deleted
+ assert:
+ that:
+ - _delete is changed
+
+ - name: Validate that Deployment do not exist anymore
+ k8s_info:
+ kind: Deployment
+ api_version: apps/v1
+ namespace: "{{ test_namespace }}"
+ label_selectors:
+ - context=ansible
+ register: _deployment
+ failed_when: _deployment.resources | length > 0
+
always:
- name: Remove namespace
k8s:
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_diff/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_diff/playbook.yaml
new file mode 100644
index 000000000..bd6fe9645
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_diff/playbook.yaml
@@ -0,0 +1,6 @@
+---
+- connection: local
+ gather_facts: false
+ hosts: localhost
+ roles:
+ - k8s_diff
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_diff/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_diff/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_diff/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_drain/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_drain/playbook.yaml
new file mode 100644
index 000000000..f31993483
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_drain/playbook.yaml
@@ -0,0 +1,6 @@
+---
+- connection: local
+ gather_facts: false
+ hosts: localhost
+ roles:
+ - k8s_drain
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_drain/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_drain/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_drain/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_drain/tasks/main.yml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_drain/tasks/main.yml
index f16f8affc..5891011f9 100644
--- a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_drain/tasks/main.yml
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_drain/tasks/main.yml
@@ -281,6 +281,7 @@
that:
- dset_result.resources | list | length > 0
+ # test: drain using disable_eviction=true
- name: Uncordon node
k8s_drain:
state: uncordon
@@ -347,6 +348,90 @@
register: _result
failed_when: _result.resources
+ # test: drain using pod_selectors
+ - name: Uncordon node
+ k8s_drain:
+ state: uncordon
+ name: '{{ node_to_drain }}'
+
+ - name: create a Pod for test
+ k8s:
+ namespace: '{{ test_namespace }}'
+ wait: true
+ wait_timeout: "{{ k8s_wait_timeout | default(omit) }}"
+ definition:
+ apiVersion: v1
+ kind: Pod
+ metadata:
+ name: 'ansible-drain-pod'
+ labels:
+ app: ansible-drain
+ spec:
+ affinity:
+ nodeAffinity:
+ requiredDuringSchedulingIgnoredDuringExecution:
+ nodeSelectorTerms:
+ - matchFields:
+ - key: metadata.name
+ operator: In
+ values:
+ - '{{ node_to_drain }}'
+ containers:
+ - name: ansible-container
+ image: busybox
+ command:
+ - '/bin/sh'
+ - '-c'
+ - 'while true; do echo $(date); sleep 10; done'
+
+ - name: Drain node using pod_selectors 'app!=ansible-drain'
+ k8s_drain:
+ state: drain
+ name: '{{ node_to_drain }}'
+ pod_selectors:
+ - app!=ansible-drain
+ delete_options:
+ terminate_grace_period: 0
+ delete_emptydir_data: true
+ force: true
+ ignore_daemonsets: true
+ register: drain_pod_selector
+
+ - name: assert that node has been drained
+ assert:
+ that:
+ - drain_pod_selector is changed
+ - '"node {{ node_to_drain }} marked unschedulable." in drain_pod_selector.result'
+
+ - name: assert that pod created before is still running
+ k8s_info:
+ namespace: '{{ test_namespace }}'
+ kind: Pod
+ label_selectors:
+ - app=ansible-drain
+ field_selectors:
+ - status.phase=Running
+ register: pods
+ failed_when: pods.resources == []
+
+ - name: Drain node using pod_selectors 'app=ansible-drain'
+ k8s_drain:
+ state: drain
+ name: '{{ node_to_drain }}'
+ pod_selectors:
+ - app=ansible-drain
+ delete_options:
+ terminate_grace_period: 0
+ force: true
+ register: drain_pod_selector_equal
+
+ - name: assert that node was not drained
+ assert:
+ that:
+ - drain_pod_selector_equal is changed
+ - '"node {{ node_to_drain }} already marked unschedulable." in drain_pod_selector_equal.result'
+ - '"Deleting Pods not managed by ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet: {{ test_namespace }}/ansible-drain-pod." in drain_pod_selector_equal.warnings'
+
- name: Uncordon node
k8s_drain:
state: uncordon
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_exec/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_exec/playbook.yaml
new file mode 100644
index 000000000..f2c6a67cd
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_exec/playbook.yaml
@@ -0,0 +1,6 @@
+---
+- connection: local
+ gather_facts: false
+ hosts: localhost
+ roles:
+ - k8s_exec
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_exec/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_exec/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_exec/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_full/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_full/playbook.yaml
new file mode 100644
index 000000000..f0f4f3745
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_full/playbook.yaml
@@ -0,0 +1,6 @@
+---
+- connection: local
+ gather_facts: false
+ hosts: localhost
+ roles:
+ - k8s_full
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_full/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_full/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_full/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_gc/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_gc/playbook.yaml
new file mode 100644
index 000000000..d1c5b4ff9
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_gc/playbook.yaml
@@ -0,0 +1,6 @@
+---
+- connection: local
+ gather_facts: false
+ hosts: localhost
+ roles:
+ - k8s_gc
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_gc/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_gc/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_gc/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_generate_name/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_generate_name/playbook.yaml
new file mode 100644
index 000000000..fa5db406b
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_generate_name/playbook.yaml
@@ -0,0 +1,6 @@
+---
+- connection: local
+ gather_facts: false
+ hosts: localhost
+ roles:
+ - k8s_generate_name
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_generate_name/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_generate_name/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_generate_name/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/aliases b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/aliases
new file mode 100644
index 000000000..64f66d0a5
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/aliases
@@ -0,0 +1,3 @@
+time=59
+k8s
+k8s_info
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/defaults/main.yml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/defaults/main.yml
new file mode 100644
index 000000000..1858b94ea
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/defaults/main.yml
@@ -0,0 +1,12 @@
+---
+test_namespace: "hide-fields"
+hide_fields_namespace: "hide-fields"
+hide_fields_base_configmap:
+ apiVersion: v1
+ kind: ConfigMap
+ metadata:
+ name: hide-fields-cm
+ namespace: hide-fields
+ data:
+ hello: world
+ another: value
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/meta/main.yml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/meta/main.yml
new file mode 100644
index 000000000..08362c780
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/meta/main.yml
@@ -0,0 +1,2 @@
+dependencies:
+- setup_namespace
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/playbook.yaml
new file mode 100644
index 000000000..349b62951
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/playbook.yaml
@@ -0,0 +1,6 @@
+---
+- connection: local
+ gather_facts: false
+ hosts: localhost
+ roles:
+ - k8s_hide_fields
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/runme.sh
new file mode 100755
index 000000000..29fda1c9a
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@"
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/tasks/main.yml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/tasks/main.yml
new file mode 100644
index 000000000..4b361fb96
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/tasks/main.yml
@@ -0,0 +1,108 @@
+- block:
+ - name: Creation with hidden fields should work
+ k8s:
+ definition: "{{ hide_fields_base_configmap}}"
+ hidden_fields:
+ - metadata.managedFields
+ register: hf1
+
+ - name: Ensure hidden fields are not present
+ assert:
+ that:
+ - "'managedFields' not in hf1.result['metadata']"
+
+ - name: Running without hidden fields should work
+ k8s:
+ definition: "{{ hide_fields_base_configmap}}"
+
+ - name: Running with missing hidden fields should have no effect
+ k8s:
+ definition: "{{ hide_fields_base_configmap}}"
+ hidden_fields:
+ - does.not.exist
+ register: hf2
+
+ - name: Ensure no change with missing hidden fields
+ assert:
+ that:
+ - not hf2.changed
+
+ - name: Hide status and managed fields
+ k8s:
+ definition: "{{ hide_fields_base_configmap}}"
+ hidden_fields:
+ - status
+ - metadata.managedFields
+ register: hf3
+ diff: true
+
+ - name: Ensure hidden fields are not present
+ assert:
+ that:
+ - "'status' not in hf3.result"
+ - "'managedFields' not in hf3.result['metadata']"
+
+ - name: k8s_info works with hidden fields
+ k8s_info:
+ name: "{{ hide_fields_base_configmap.metadata.name }}"
+ namespace: "{{ hide_fields_base_configmap.metadata.namespace }}"
+ kind: ConfigMap
+ hidden_fields:
+ - metadata.managedFields
+ register: hf4
+
+ - name: Ensure hidden fields are not present
+ assert:
+ that:
+ - hf4.resources | length == 1
+ - "'managedFields' not in hf4.resources[0]['metadata']"
+
+
+ - name: Hiding a changed field should still result in a change
+ k8s:
+ definition: "{{ hide_fields_base_configmap | combine({'data':{'hello':'different'}}) }}"
+ hidden_fields:
+ - data
+ - metadata.managedFields
+ register: hf5
+ diff: true
+
+ - name: Ensure that hidden changed field changed
+ assert:
+ that:
+ - hf5.changed
+
+ - name: Apply works with hidden fields
+ k8s:
+ definition: "{{ hide_fields_base_configmap | combine({'data':{'anew':'value'}}) }}"
+ hidden_fields:
+ - data
+ apply: true
+ register: hf6
+ diff: true
+
+ - name: Ensure that hidden changed field changed
+ assert:
+ that:
+ - hf6.changed
+
+ - name: Hidden field should not show up in deletion
+ k8s:
+ definition: "{{ hide_fields_base_configmap}}"
+ hidden_fields:
+ - status
+ state: absent
+ register: hf7
+
+ - name: Ensure hidden fields are not present
+ assert:
+ that:
+ - "'status' not in hf7.result"
+
+ always:
+ - name: Remove namespace
+ k8s:
+ kind: Namespace
+ name: "{{ hide_fields_namespace }}"
+ state: absent
+ ignore_errors: true
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/playbook.yaml
new file mode 100644
index 000000000..0070d8910
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/playbook.yaml
@@ -0,0 +1,6 @@
+---
+- connection: local
+ gather_facts: false
+ hosts: localhost
+ roles:
+ - k8s_info
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/tasks/wait.yml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/tasks/wait.yml
index 2608f8208..03fc72695 100644
--- a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/tasks/wait.yml
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/tasks/wait.yml
@@ -192,7 +192,7 @@
- name: Check that module waited
assert:
that:
- - "{{ lookup('pipe', 'date +%s') }} - {{ start }} > 30"
+ - ( lookup('pipe', 'date +%s')|int - start|int ) > 30
- name: Create simple pod
k8s:
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_json_patch/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_json_patch/playbook.yaml
new file mode 100644
index 000000000..7206db569
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_json_patch/playbook.yaml
@@ -0,0 +1,6 @@
+---
+- connection: local
+ gather_facts: false
+ hosts: localhost
+ roles:
+ - k8s_json_patch
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_json_patch/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_json_patch/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_json_patch/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_label_selectors/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_label_selectors/playbook.yaml
new file mode 100644
index 000000000..bff2875ba
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_label_selectors/playbook.yaml
@@ -0,0 +1,6 @@
+---
+- connection: local
+ gather_facts: false
+ hosts: localhost
+ roles:
+ - k8s_label_selectors
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_label_selectors/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_label_selectors/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_label_selectors/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_lists/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_lists/playbook.yaml
new file mode 100644
index 000000000..0b7156d5b
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_lists/playbook.yaml
@@ -0,0 +1,6 @@
+---
+- connection: local
+ gather_facts: false
+ hosts: localhost
+ roles:
+ - k8s_lists
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_lists/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_lists/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_lists/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_log/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_log/playbook.yaml
new file mode 100644
index 000000000..1855427a4
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_log/playbook.yaml
@@ -0,0 +1,6 @@
+---
+- connection: local
+ gather_facts: false
+ hosts: localhost
+ roles:
+ - k8s_log
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_log/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_log/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_log/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_manifest_url/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_manifest_url/playbook.yaml
new file mode 100644
index 000000000..9196cafad
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_manifest_url/playbook.yaml
@@ -0,0 +1,6 @@
+---
+- connection: local
+ gather_facts: false
+ hosts: localhost
+ roles:
+ - k8s_manifest_url
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_manifest_url/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_manifest_url/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_manifest_url/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_merge_type/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_merge_type/playbook.yaml
new file mode 100644
index 000000000..5aec041fc
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_merge_type/playbook.yaml
@@ -0,0 +1,6 @@
+---
+- connection: local
+ gather_facts: false
+ hosts: localhost
+ roles:
+ - k8s_merge_type
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_merge_type/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_merge_type/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_merge_type/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_patched/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_patched/playbook.yaml
new file mode 100644
index 000000000..e3b890d1f
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_patched/playbook.yaml
@@ -0,0 +1,6 @@
+---
+- connection: local
+ gather_facts: false
+ hosts: localhost
+ roles:
+ - k8s_patched
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_patched/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_patched/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_patched/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_rollback/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_rollback/playbook.yaml
new file mode 100644
index 000000000..f91f78ea7
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_rollback/playbook.yaml
@@ -0,0 +1,6 @@
+---
+- connection: local
+ gather_facts: false
+ hosts: localhost
+ roles:
+ - k8s_rollback
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_rollback/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_rollback/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_rollback/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_scale/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_scale/playbook.yaml
new file mode 100644
index 000000000..2c48db5ab
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_scale/playbook.yaml
@@ -0,0 +1,6 @@
+---
+- connection: local
+ gather_facts: false
+ hosts: localhost
+ roles:
+ - k8s_scale
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_scale/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_scale/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_scale/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_scale/tasks/main.yml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_scale/tasks/main.yml
index eb2107d30..f5c79df55 100644
--- a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_scale/tasks/main.yml
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_scale/tasks/main.yml
@@ -389,6 +389,71 @@
that:
- output.result.status.replicas == 0
+ - name: Create a StatefulSet with updateStrategy=OnDelete
+ kubernetes.core.k8s:
+ wait: yes
+ wait_timeout: "{{ k8s_wait_timeout | default(omit) }}"
+ definition:
+ apiVersion: apps/v1
+ kind: StatefulSet
+ metadata:
+ namespace: "{{ scale_namespace }}"
+ name: scale-set-ondelete
+ spec:
+ replicas: 2
+ updateStrategy:
+ type: OnDelete
+ selector:
+ matchLabels:
+ app: foo
+ template:
+ metadata:
+ labels:
+ app: foo
+ spec:
+ terminationGracePeriodSeconds: 10
+ containers:
+ - image: busybox
+ name: busybox
+ command:
+ - sleep
+ - "600"
+ register: output
+
+ - assert:
+ that:
+ - output.result.status.replicas == 2
+
+ - name: Wait for StatefulSet to scale down to 0
+ kubernetes.core.k8s_scale:
+ kind: StatefulSet
+ api_version: apps/v1
+ name: scale-set-ondelete
+ namespace: "{{ scale_namespace }}"
+ replicas: 0
+ wait: yes
+ wait_timeout: "{{ k8s_wait_timeout | default(omit) }}"
+ register: output
+
+ - assert:
+ that:
+ - output.result.status.replicas == 0
+
+ - name: Wait for StatefulSet to scale up to 2
+ kubernetes.core.k8s_scale:
+ kind: StatefulSet
+ api_version: apps/v1
+ name: scale-set-ondelete
+ namespace: "{{ scale_namespace }}"
+ replicas: 2
+ wait: yes
+ wait_timeout: "{{ k8s_wait_timeout | default(omit) }}"
+ register: output
+
+ - assert:
+ that:
+ - output.result.status.replicas == 2
+
always:
- name: Remove namespace
k8s:
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_taint/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_taint/playbook.yaml
new file mode 100644
index 000000000..805c34760
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_taint/playbook.yaml
@@ -0,0 +1,6 @@
+---
+- connection: local
+ gather_facts: false
+ hosts: localhost
+ roles:
+ - k8s_taint
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_taint/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_taint/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_taint/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_template/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_template/playbook.yaml
new file mode 100644
index 000000000..1a4e61122
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_template/playbook.yaml
@@ -0,0 +1,6 @@
+---
+- connection: local
+ gather_facts: false
+ hosts: localhost
+ roles:
+ - k8s_template
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_template/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_template/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_template/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_user_impersonation/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_user_impersonation/playbook.yaml
new file mode 100644
index 000000000..e09f40e90
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_user_impersonation/playbook.yaml
@@ -0,0 +1,6 @@
+---
+- connection: local
+ gather_facts: false
+ hosts: localhost
+ roles:
+ - k8s_user_impersonation
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_user_impersonation/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_user_impersonation/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_user_impersonation/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_validate/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_validate/playbook.yaml
new file mode 100644
index 000000000..510c8e6cd
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_validate/playbook.yaml
@@ -0,0 +1,6 @@
+---
+- connection: local
+ gather_facts: false
+ hosts: localhost
+ roles:
+ - k8s_validate
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_validate/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_validate/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_validate/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_validate/tasks/main.yml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_validate/tasks/main.yml
index 900e6f70b..b7b99c18a 100644
--- a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_validate/tasks/main.yml
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_validate/tasks/main.yml
@@ -52,6 +52,7 @@
name:
- kubernetes
- kubernetes-validate
+ - setuptools
virtualenv: "{{ virtualenv }}"
virtualenv_command: "{{ virtualenv_command }}"
virtualenv_site_packages: false
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_waiter/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_waiter/playbook.yaml
new file mode 100644
index 000000000..4e5171ee3
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_waiter/playbook.yaml
@@ -0,0 +1,6 @@
+---
+- connection: local
+ gather_facts: false
+ hosts: localhost
+ roles:
+ - k8s_waiter
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_waiter/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_waiter/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_waiter/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/lookup_k8s/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/lookup_k8s/playbook.yaml
new file mode 100644
index 000000000..47a0c7ff6
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/lookup_k8s/playbook.yaml
@@ -0,0 +1,6 @@
+---
+- connection: local
+ gather_facts: false
+ hosts: localhost
+ roles:
+ - lookup_k8s
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/lookup_k8s/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/lookup_k8s/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/lookup_k8s/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/lookup_kustomize/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/lookup_kustomize/playbook.yaml
new file mode 100644
index 000000000..1a5ed844a
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/lookup_kustomize/playbook.yaml
@@ -0,0 +1,6 @@
+---
+- connection: local
+ gather_facts: false
+ hosts: localhost
+ roles:
+ - lookup_kustomize
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/lookup_kustomize/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/lookup_kustomize/runme.sh
new file mode 100755
index 000000000..02ef14603
--- /dev/null
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/lookup_kustomize/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -eux
+export ANSIBLE_CALLBACKS_ENABLED=profile_tasks
+export ANSIBLE_ROLES_PATH=../
+ansible-playbook playbook.yaml "$@" \ No newline at end of file
diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py b/ansible_collections/kubernetes/core/tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py
index 9c9e87966..1e0d45ec3 100644
--- a/ansible_collections/kubernetes/core/tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py
+++ b/ansible_collections/kubernetes/core/tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py
@@ -78,7 +78,6 @@ from ansible_collections.kubernetes.core.plugins.module_utils.k8s.client import
class K8SInventoryTestModule(AnsibleModule):
def __init__(self):
-
argument_spec = dict(
kube_config=dict(required=True, type="path"),
dest_dir=dict(required=True, type="path"),
@@ -88,7 +87,6 @@ class K8SInventoryTestModule(AnsibleModule):
self.execute_module()
def execute_module(self):
-
dest_dir = os.path.abspath(self.params.get("dest_dir"))
kubeconfig_path = self.params.get("kube_config")
if not os.path.isdir(dest_dir):
diff --git a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.10.txt b/ansible_collections/kubernetes/core/tests/sanity/ignore-2.10.txt
deleted file mode 100644
index b617363d1..000000000
--- a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.10.txt
+++ /dev/null
@@ -1,616 +0,0 @@
-plugins/module_utils/client/discovery.py import-3.6!skip
-plugins/module_utils/client/discovery.py import-3.7!skip
-plugins/module_utils/client/discovery.py import-3.8!skip
-plugins/module_utils/client/discovery.py import-3.9!skip
-plugins/module_utils/client/resource.py import-3.6!skip
-plugins/module_utils/client/resource.py import-3.7!skip
-plugins/module_utils/client/resource.py import-3.8!skip
-plugins/module_utils/client/resource.py import-3.9!skip
-plugins/module_utils/k8sdynamicclient.py import-3.6!skip
-plugins/module_utils/k8sdynamicclient.py import-3.7!skip
-plugins/module_utils/k8sdynamicclient.py import-3.8!skip
-plugins/module_utils/k8sdynamicclient.py import-3.9!skip
-tests/unit/module_utils/fixtures/definitions.yml yamllint!skip
-tests/unit/module_utils/fixtures/deployments.yml yamllint!skip
-tests/unit/module_utils/fixtures/pods.yml yamllint!skip
-tests/integration/targets/helm/files/appversionless-chart-v2/templates/configmap.yaml yamllint!skip
-tests/integration/targets/helm/files/appversionless-chart/templates/configmap.yaml yamllint!skip
-tests/integration/targets/helm/files/test-chart-v2/templates/configmap.yaml yamllint!skip
-tests/integration/targets/helm/files/test-chart/templates/configmap.yaml yamllint!skip
-tests/integration/targets/helm_diff/files/test-chart/templates/configmap.yaml yamllint!skip
-tests/integration/targets/k8s_scale/files/deployment.yaml yamllint!skip
-tests/sanity/refresh_ignore_files shebang!skip
-plugins/doc_fragments/k8s_name_options.py future-import-boilerplate!skip
-plugins/doc_fragments/k8s_auth_options.py future-import-boilerplate!skip
-plugins/doc_fragments/helm_common_options.py future-import-boilerplate!skip
-plugins/doc_fragments/k8s_state_options.py future-import-boilerplate!skip
-plugins/doc_fragments/k8s_wait_options.py future-import-boilerplate!skip
-plugins/doc_fragments/k8s_scale_options.py future-import-boilerplate!skip
-plugins/doc_fragments/k8s_delete_options.py future-import-boilerplate!skip
-plugins/doc_fragments/__init__.py future-import-boilerplate!skip
-plugins/doc_fragments/k8s_resource_options.py future-import-boilerplate!skip
-plugins/module_utils/helm.py future-import-boilerplate!skip
-plugins/module_utils/apply.py future-import-boilerplate!skip
-plugins/module_utils/hashes.py future-import-boilerplate!skip
-plugins/module_utils/helm_args_common.py future-import-boilerplate!skip
-plugins/module_utils/version.py future-import-boilerplate!skip
-plugins/module_utils/_version.py future-import-boilerplate!skip
-plugins/module_utils/copy.py future-import-boilerplate!skip
-plugins/module_utils/args_common.py future-import-boilerplate!skip
-plugins/module_utils/__init__.py future-import-boilerplate!skip
-plugins/module_utils/selector.py future-import-boilerplate!skip
-plugins/module_utils/k8sdynamicclient.py future-import-boilerplate!skip
-plugins/module_utils/common.py future-import-boilerplate!skip
-plugins/module_utils/ansiblemodule.py future-import-boilerplate!skip
-plugins/module_utils/exceptions.py future-import-boilerplate!skip
-plugins/module_utils/client/resource.py future-import-boilerplate!skip
-plugins/module_utils/client/discovery.py future-import-boilerplate!skip
-plugins/module_utils/k8s/resource.py future-import-boilerplate!skip
-plugins/module_utils/k8s/core.py future-import-boilerplate!skip
-plugins/module_utils/k8s/waiter.py future-import-boilerplate!skip
-plugins/module_utils/k8s/client.py future-import-boilerplate!skip
-plugins/module_utils/k8s/runner.py future-import-boilerplate!skip
-plugins/module_utils/k8s/service.py future-import-boilerplate!skip
-plugins/module_utils/k8s/exceptions.py future-import-boilerplate!skip
-plugins/connection/kubectl.py future-import-boilerplate!skip
-plugins/inventory/k8s.py future-import-boilerplate!skip
-plugins/lookup/k8s.py future-import-boilerplate!skip
-plugins/lookup/kustomize.py future-import-boilerplate!skip
-plugins/modules/k8s_scale.py future-import-boilerplate!skip
-plugins/modules/helm_template.py future-import-boilerplate!skip
-plugins/modules/k8s_exec.py future-import-boilerplate!skip
-plugins/modules/helm.py future-import-boilerplate!skip
-plugins/modules/helm_plugin_info.py future-import-boilerplate!skip
-plugins/modules/helm_info.py future-import-boilerplate!skip
-plugins/modules/helm_repository.py future-import-boilerplate!skip
-plugins/modules/k8s_rollback.py future-import-boilerplate!skip
-plugins/modules/k8s_log.py future-import-boilerplate!skip
-plugins/modules/k8s_drain.py future-import-boilerplate!skip
-plugins/modules/helm_plugin.py future-import-boilerplate!skip
-plugins/modules/k8s_taint.py future-import-boilerplate!skip
-plugins/modules/k8s.py future-import-boilerplate!skip
-plugins/modules/k8s_service.py future-import-boilerplate!skip
-plugins/modules/k8s_cluster_info.py future-import-boilerplate!skip
-plugins/modules/k8s_info.py future-import-boilerplate!skip
-plugins/modules/k8s_cp.py future-import-boilerplate!skip
-plugins/modules/__init__.py future-import-boilerplate!skip
-plugins/modules/k8s_json_patch.py future-import-boilerplate!skip
-plugins/action/k8s_info.py future-import-boilerplate!skip
-plugins/filter/k8s.py future-import-boilerplate!skip
-tests/unit/conftest.py future-import-boilerplate!skip
-tests/unit/utils/ansible_module_mock.py future-import-boilerplate!skip
-tests/unit/module_utils/test_helm.py future-import-boilerplate!skip
-tests/unit/module_utils/test_marshal.py future-import-boilerplate!skip
-tests/unit/module_utils/test_discoverer.py future-import-boilerplate!skip
-tests/unit/module_utils/test_hashes.py future-import-boilerplate!skip
-tests/unit/module_utils/test_resource.py future-import-boilerplate!skip
-tests/unit/module_utils/test_service.py future-import-boilerplate!skip
-tests/unit/module_utils/test_waiter.py future-import-boilerplate!skip
-tests/unit/module_utils/test_common.py future-import-boilerplate!skip
-tests/unit/module_utils/test_selector.py future-import-boilerplate!skip
-tests/unit/module_utils/test_apply.py future-import-boilerplate!skip
-tests/unit/module_utils/test_runner.py future-import-boilerplate!skip
-tests/unit/module_utils/test_client.py future-import-boilerplate!skip
-tests/unit/module_utils/test_core.py future-import-boilerplate!skip
-tests/unit/modules/test_helm_template_module.py future-import-boilerplate!skip
-tests/unit/modules/test_helm_template.py future-import-boilerplate!skip
-tests/unit/modules/test_module_helm.py future-import-boilerplate!skip
-tests/unit/action/test_remove_omit.py future-import-boilerplate!skip
-plugins/doc_fragments/k8s_name_options.py metaclass-boilerplate!skip
-plugins/doc_fragments/k8s_auth_options.py metaclass-boilerplate!skip
-plugins/doc_fragments/helm_common_options.py metaclass-boilerplate!skip
-plugins/doc_fragments/k8s_state_options.py metaclass-boilerplate!skip
-plugins/doc_fragments/k8s_wait_options.py metaclass-boilerplate!skip
-plugins/doc_fragments/k8s_scale_options.py metaclass-boilerplate!skip
-plugins/doc_fragments/k8s_delete_options.py metaclass-boilerplate!skip
-plugins/doc_fragments/__init__.py metaclass-boilerplate!skip
-plugins/doc_fragments/k8s_resource_options.py metaclass-boilerplate!skip
-plugins/module_utils/helm.py metaclass-boilerplate!skip
-plugins/module_utils/apply.py metaclass-boilerplate!skip
-plugins/module_utils/hashes.py metaclass-boilerplate!skip
-plugins/module_utils/helm_args_common.py metaclass-boilerplate!skip
-plugins/module_utils/version.py metaclass-boilerplate!skip
-plugins/module_utils/_version.py metaclass-boilerplate!skip
-plugins/module_utils/copy.py metaclass-boilerplate!skip
-plugins/module_utils/args_common.py metaclass-boilerplate!skip
-plugins/module_utils/__init__.py metaclass-boilerplate!skip
-plugins/module_utils/selector.py metaclass-boilerplate!skip
-plugins/module_utils/k8sdynamicclient.py metaclass-boilerplate!skip
-plugins/module_utils/common.py metaclass-boilerplate!skip
-plugins/module_utils/ansiblemodule.py metaclass-boilerplate!skip
-plugins/module_utils/exceptions.py metaclass-boilerplate!skip
-plugins/module_utils/client/resource.py metaclass-boilerplate!skip
-plugins/module_utils/client/discovery.py metaclass-boilerplate!skip
-plugins/module_utils/k8s/resource.py metaclass-boilerplate!skip
-plugins/module_utils/k8s/core.py metaclass-boilerplate!skip
-plugins/module_utils/k8s/waiter.py metaclass-boilerplate!skip
-plugins/module_utils/k8s/client.py metaclass-boilerplate!skip
-plugins/module_utils/k8s/runner.py metaclass-boilerplate!skip
-plugins/module_utils/k8s/service.py metaclass-boilerplate!skip
-plugins/module_utils/k8s/exceptions.py metaclass-boilerplate!skip
-plugins/connection/kubectl.py metaclass-boilerplate!skip
-plugins/inventory/k8s.py metaclass-boilerplate!skip
-plugins/lookup/k8s.py metaclass-boilerplate!skip
-plugins/lookup/kustomize.py metaclass-boilerplate!skip
-plugins/modules/k8s_scale.py metaclass-boilerplate!skip
-plugins/modules/helm_template.py metaclass-boilerplate!skip
-plugins/modules/k8s_exec.py metaclass-boilerplate!skip
-plugins/modules/helm.py metaclass-boilerplate!skip
-plugins/modules/helm_plugin_info.py metaclass-boilerplate!skip
-plugins/modules/helm_info.py metaclass-boilerplate!skip
-plugins/modules/helm_repository.py metaclass-boilerplate!skip
-plugins/modules/k8s_rollback.py metaclass-boilerplate!skip
-plugins/modules/k8s_log.py metaclass-boilerplate!skip
-plugins/modules/k8s_drain.py metaclass-boilerplate!skip
-plugins/modules/helm_plugin.py metaclass-boilerplate!skip
-plugins/modules/k8s_taint.py metaclass-boilerplate!skip
-plugins/modules/k8s.py metaclass-boilerplate!skip
-plugins/modules/k8s_service.py metaclass-boilerplate!skip
-plugins/modules/k8s_cluster_info.py metaclass-boilerplate!skip
-plugins/modules/k8s_info.py metaclass-boilerplate!skip
-plugins/modules/k8s_cp.py metaclass-boilerplate!skip
-plugins/modules/__init__.py metaclass-boilerplate!skip
-plugins/modules/k8s_json_patch.py metaclass-boilerplate!skip
-plugins/action/k8s_info.py metaclass-boilerplate!skip
-plugins/filter/k8s.py metaclass-boilerplate!skip
-tests/unit/conftest.py metaclass-boilerplate!skip
-tests/unit/utils/ansible_module_mock.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_helm.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_marshal.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_discoverer.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_hashes.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_resource.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_service.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_waiter.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_common.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_selector.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_apply.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_runner.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_client.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_core.py metaclass-boilerplate!skip
-tests/unit/modules/test_helm_template_module.py metaclass-boilerplate!skip
-tests/unit/modules/test_helm_template.py metaclass-boilerplate!skip
-tests/unit/modules/test_module_helm.py metaclass-boilerplate!skip
-tests/unit/action/test_remove_omit.py metaclass-boilerplate!skip
-plugins/modules/k8s_scale.py import-2.6!skip
-plugins/modules/k8s_scale.py import-2.7!skip
-plugins/modules/k8s_scale.py import-3.5!skip
-plugins/modules/helm_template.py import-2.6!skip
-plugins/modules/helm_template.py import-2.7!skip
-plugins/modules/helm_template.py import-3.5!skip
-plugins/modules/k8s_exec.py import-2.6!skip
-plugins/modules/k8s_exec.py import-2.7!skip
-plugins/modules/k8s_exec.py import-3.5!skip
-plugins/modules/helm.py import-2.6!skip
-plugins/modules/helm.py import-2.7!skip
-plugins/modules/helm.py import-3.5!skip
-plugins/modules/helm_plugin_info.py import-2.6!skip
-plugins/modules/helm_plugin_info.py import-2.7!skip
-plugins/modules/helm_plugin_info.py import-3.5!skip
-plugins/modules/helm_info.py import-2.6!skip
-plugins/modules/helm_info.py import-2.7!skip
-plugins/modules/helm_info.py import-3.5!skip
-plugins/modules/helm_repository.py import-2.6!skip
-plugins/modules/helm_repository.py import-2.7!skip
-plugins/modules/helm_repository.py import-3.5!skip
-plugins/modules/k8s_rollback.py import-2.6!skip
-plugins/modules/k8s_rollback.py import-2.7!skip
-plugins/modules/k8s_rollback.py import-3.5!skip
-plugins/modules/k8s_log.py import-2.6!skip
-plugins/modules/k8s_log.py import-2.7!skip
-plugins/modules/k8s_log.py import-3.5!skip
-plugins/modules/k8s_drain.py import-2.6!skip
-plugins/modules/k8s_drain.py import-2.7!skip
-plugins/modules/k8s_drain.py import-3.5!skip
-plugins/modules/helm_plugin.py import-2.6!skip
-plugins/modules/helm_plugin.py import-2.7!skip
-plugins/modules/helm_plugin.py import-3.5!skip
-plugins/modules/k8s_taint.py import-2.6!skip
-plugins/modules/k8s_taint.py import-2.7!skip
-plugins/modules/k8s_taint.py import-3.5!skip
-plugins/modules/k8s.py import-2.6!skip
-plugins/modules/k8s.py import-2.7!skip
-plugins/modules/k8s.py import-3.5!skip
-plugins/modules/k8s_service.py import-2.6!skip
-plugins/modules/k8s_service.py import-2.7!skip
-plugins/modules/k8s_service.py import-3.5!skip
-plugins/modules/k8s_cluster_info.py import-2.6!skip
-plugins/modules/k8s_cluster_info.py import-2.7!skip
-plugins/modules/k8s_cluster_info.py import-3.5!skip
-plugins/modules/k8s_info.py import-2.6!skip
-plugins/modules/k8s_info.py import-2.7!skip
-plugins/modules/k8s_info.py import-3.5!skip
-plugins/modules/k8s_cp.py import-2.6!skip
-plugins/modules/k8s_cp.py import-2.7!skip
-plugins/modules/k8s_cp.py import-3.5!skip
-plugins/modules/__init__.py import-2.6!skip
-plugins/modules/__init__.py import-2.7!skip
-plugins/modules/__init__.py import-3.5!skip
-plugins/modules/k8s_json_patch.py import-2.6!skip
-plugins/modules/k8s_json_patch.py import-2.7!skip
-plugins/modules/k8s_json_patch.py import-3.5!skip
-plugins/module_utils/helm.py import-2.6!skip
-plugins/module_utils/helm.py import-2.7!skip
-plugins/module_utils/helm.py import-3.5!skip
-plugins/module_utils/apply.py import-2.6!skip
-plugins/module_utils/apply.py import-2.7!skip
-plugins/module_utils/apply.py import-3.5!skip
-plugins/module_utils/hashes.py import-2.6!skip
-plugins/module_utils/hashes.py import-2.7!skip
-plugins/module_utils/hashes.py import-3.5!skip
-plugins/module_utils/helm_args_common.py import-2.6!skip
-plugins/module_utils/helm_args_common.py import-2.7!skip
-plugins/module_utils/helm_args_common.py import-3.5!skip
-plugins/module_utils/version.py import-2.6!skip
-plugins/module_utils/version.py import-2.7!skip
-plugins/module_utils/version.py import-3.5!skip
-plugins/module_utils/_version.py import-2.6!skip
-plugins/module_utils/_version.py import-2.7!skip
-plugins/module_utils/_version.py import-3.5!skip
-plugins/module_utils/copy.py import-2.6!skip
-plugins/module_utils/copy.py import-2.7!skip
-plugins/module_utils/copy.py import-3.5!skip
-plugins/module_utils/args_common.py import-2.6!skip
-plugins/module_utils/args_common.py import-2.7!skip
-plugins/module_utils/args_common.py import-3.5!skip
-plugins/module_utils/__init__.py import-2.6!skip
-plugins/module_utils/__init__.py import-2.7!skip
-plugins/module_utils/__init__.py import-3.5!skip
-plugins/module_utils/selector.py import-2.6!skip
-plugins/module_utils/selector.py import-2.7!skip
-plugins/module_utils/selector.py import-3.5!skip
-plugins/module_utils/k8sdynamicclient.py import-2.6!skip
-plugins/module_utils/k8sdynamicclient.py import-2.7!skip
-plugins/module_utils/k8sdynamicclient.py import-3.5!skip
-plugins/module_utils/common.py import-2.6!skip
-plugins/module_utils/common.py import-2.7!skip
-plugins/module_utils/common.py import-3.5!skip
-plugins/module_utils/ansiblemodule.py import-2.6!skip
-plugins/module_utils/ansiblemodule.py import-2.7!skip
-plugins/module_utils/ansiblemodule.py import-3.5!skip
-plugins/module_utils/exceptions.py import-2.6!skip
-plugins/module_utils/exceptions.py import-2.7!skip
-plugins/module_utils/exceptions.py import-3.5!skip
-plugins/module_utils/client/resource.py import-2.6!skip
-plugins/module_utils/client/resource.py import-2.7!skip
-plugins/module_utils/client/resource.py import-3.5!skip
-plugins/module_utils/client/discovery.py import-2.6!skip
-plugins/module_utils/client/discovery.py import-2.7!skip
-plugins/module_utils/client/discovery.py import-3.5!skip
-plugins/module_utils/k8s/resource.py import-2.6!skip
-plugins/module_utils/k8s/resource.py import-2.7!skip
-plugins/module_utils/k8s/resource.py import-3.5!skip
-plugins/module_utils/k8s/core.py import-2.6!skip
-plugins/module_utils/k8s/core.py import-2.7!skip
-plugins/module_utils/k8s/core.py import-3.5!skip
-plugins/module_utils/k8s/waiter.py import-2.6!skip
-plugins/module_utils/k8s/waiter.py import-2.7!skip
-plugins/module_utils/k8s/waiter.py import-3.5!skip
-plugins/module_utils/k8s/client.py import-2.6!skip
-plugins/module_utils/k8s/client.py import-2.7!skip
-plugins/module_utils/k8s/client.py import-3.5!skip
-plugins/module_utils/k8s/runner.py import-2.6!skip
-plugins/module_utils/k8s/runner.py import-2.7!skip
-plugins/module_utils/k8s/runner.py import-3.5!skip
-plugins/module_utils/k8s/service.py import-2.6!skip
-plugins/module_utils/k8s/service.py import-2.7!skip
-plugins/module_utils/k8s/service.py import-3.5!skip
-plugins/module_utils/k8s/exceptions.py import-2.6!skip
-plugins/module_utils/k8s/exceptions.py import-2.7!skip
-plugins/module_utils/k8s/exceptions.py import-3.5!skip
-plugins/doc_fragments/k8s_name_options.py compile-2.6!skip
-plugins/doc_fragments/k8s_name_options.py compile-2.7!skip
-plugins/doc_fragments/k8s_name_options.py compile-3.5!skip
-plugins/doc_fragments/k8s_auth_options.py compile-2.6!skip
-plugins/doc_fragments/k8s_auth_options.py compile-2.7!skip
-plugins/doc_fragments/k8s_auth_options.py compile-3.5!skip
-plugins/doc_fragments/helm_common_options.py compile-2.6!skip
-plugins/doc_fragments/helm_common_options.py compile-2.7!skip
-plugins/doc_fragments/helm_common_options.py compile-3.5!skip
-plugins/doc_fragments/k8s_state_options.py compile-2.6!skip
-plugins/doc_fragments/k8s_state_options.py compile-2.7!skip
-plugins/doc_fragments/k8s_state_options.py compile-3.5!skip
-plugins/doc_fragments/k8s_wait_options.py compile-2.6!skip
-plugins/doc_fragments/k8s_wait_options.py compile-2.7!skip
-plugins/doc_fragments/k8s_wait_options.py compile-3.5!skip
-plugins/doc_fragments/k8s_scale_options.py compile-2.6!skip
-plugins/doc_fragments/k8s_scale_options.py compile-2.7!skip
-plugins/doc_fragments/k8s_scale_options.py compile-3.5!skip
-plugins/doc_fragments/k8s_delete_options.py compile-2.6!skip
-plugins/doc_fragments/k8s_delete_options.py compile-2.7!skip
-plugins/doc_fragments/k8s_delete_options.py compile-3.5!skip
-plugins/doc_fragments/__init__.py compile-2.6!skip
-plugins/doc_fragments/__init__.py compile-2.7!skip
-plugins/doc_fragments/__init__.py compile-3.5!skip
-plugins/doc_fragments/k8s_resource_options.py compile-2.6!skip
-plugins/doc_fragments/k8s_resource_options.py compile-2.7!skip
-plugins/doc_fragments/k8s_resource_options.py compile-3.5!skip
-plugins/module_utils/helm.py compile-2.6!skip
-plugins/module_utils/helm.py compile-2.7!skip
-plugins/module_utils/helm.py compile-3.5!skip
-plugins/module_utils/apply.py compile-2.6!skip
-plugins/module_utils/apply.py compile-2.7!skip
-plugins/module_utils/apply.py compile-3.5!skip
-plugins/module_utils/hashes.py compile-2.6!skip
-plugins/module_utils/hashes.py compile-2.7!skip
-plugins/module_utils/hashes.py compile-3.5!skip
-plugins/module_utils/helm_args_common.py compile-2.6!skip
-plugins/module_utils/helm_args_common.py compile-2.7!skip
-plugins/module_utils/helm_args_common.py compile-3.5!skip
-plugins/module_utils/version.py compile-2.6!skip
-plugins/module_utils/version.py compile-2.7!skip
-plugins/module_utils/version.py compile-3.5!skip
-plugins/module_utils/_version.py compile-2.6!skip
-plugins/module_utils/_version.py compile-2.7!skip
-plugins/module_utils/_version.py compile-3.5!skip
-plugins/module_utils/copy.py compile-2.6!skip
-plugins/module_utils/copy.py compile-2.7!skip
-plugins/module_utils/copy.py compile-3.5!skip
-plugins/module_utils/args_common.py compile-2.6!skip
-plugins/module_utils/args_common.py compile-2.7!skip
-plugins/module_utils/args_common.py compile-3.5!skip
-plugins/module_utils/__init__.py compile-2.6!skip
-plugins/module_utils/__init__.py compile-2.7!skip
-plugins/module_utils/__init__.py compile-3.5!skip
-plugins/module_utils/selector.py compile-2.6!skip
-plugins/module_utils/selector.py compile-2.7!skip
-plugins/module_utils/selector.py compile-3.5!skip
-plugins/module_utils/k8sdynamicclient.py compile-2.6!skip
-plugins/module_utils/k8sdynamicclient.py compile-2.7!skip
-plugins/module_utils/k8sdynamicclient.py compile-3.5!skip
-plugins/module_utils/common.py compile-2.6!skip
-plugins/module_utils/common.py compile-2.7!skip
-plugins/module_utils/common.py compile-3.5!skip
-plugins/module_utils/ansiblemodule.py compile-2.6!skip
-plugins/module_utils/ansiblemodule.py compile-2.7!skip
-plugins/module_utils/ansiblemodule.py compile-3.5!skip
-plugins/module_utils/exceptions.py compile-2.6!skip
-plugins/module_utils/exceptions.py compile-2.7!skip
-plugins/module_utils/exceptions.py compile-3.5!skip
-plugins/module_utils/client/resource.py compile-2.6!skip
-plugins/module_utils/client/resource.py compile-2.7!skip
-plugins/module_utils/client/resource.py compile-3.5!skip
-plugins/module_utils/client/discovery.py compile-2.6!skip
-plugins/module_utils/client/discovery.py compile-2.7!skip
-plugins/module_utils/client/discovery.py compile-3.5!skip
-plugins/module_utils/k8s/resource.py compile-2.6!skip
-plugins/module_utils/k8s/resource.py compile-2.7!skip
-plugins/module_utils/k8s/resource.py compile-3.5!skip
-plugins/module_utils/k8s/core.py compile-2.6!skip
-plugins/module_utils/k8s/core.py compile-2.7!skip
-plugins/module_utils/k8s/core.py compile-3.5!skip
-plugins/module_utils/k8s/waiter.py compile-2.6!skip
-plugins/module_utils/k8s/waiter.py compile-2.7!skip
-plugins/module_utils/k8s/waiter.py compile-3.5!skip
-plugins/module_utils/k8s/client.py compile-2.6!skip
-plugins/module_utils/k8s/client.py compile-2.7!skip
-plugins/module_utils/k8s/client.py compile-3.5!skip
-plugins/module_utils/k8s/runner.py compile-2.6!skip
-plugins/module_utils/k8s/runner.py compile-2.7!skip
-plugins/module_utils/k8s/runner.py compile-3.5!skip
-plugins/module_utils/k8s/service.py compile-2.6!skip
-plugins/module_utils/k8s/service.py compile-2.7!skip
-plugins/module_utils/k8s/service.py compile-3.5!skip
-plugins/module_utils/k8s/exceptions.py compile-2.6!skip
-plugins/module_utils/k8s/exceptions.py compile-2.7!skip
-plugins/module_utils/k8s/exceptions.py compile-3.5!skip
-plugins/connection/kubectl.py compile-2.6!skip
-plugins/connection/kubectl.py compile-2.7!skip
-plugins/connection/kubectl.py compile-3.5!skip
-plugins/inventory/k8s.py compile-2.6!skip
-plugins/inventory/k8s.py compile-2.7!skip
-plugins/inventory/k8s.py compile-3.5!skip
-plugins/lookup/k8s.py compile-2.6!skip
-plugins/lookup/k8s.py compile-2.7!skip
-plugins/lookup/k8s.py compile-3.5!skip
-plugins/lookup/kustomize.py compile-2.6!skip
-plugins/lookup/kustomize.py compile-2.7!skip
-plugins/lookup/kustomize.py compile-3.5!skip
-plugins/modules/k8s_scale.py compile-2.6!skip
-plugins/modules/k8s_scale.py compile-2.7!skip
-plugins/modules/k8s_scale.py compile-3.5!skip
-plugins/modules/helm_template.py compile-2.6!skip
-plugins/modules/helm_template.py compile-2.7!skip
-plugins/modules/helm_template.py compile-3.5!skip
-plugins/modules/k8s_exec.py compile-2.6!skip
-plugins/modules/k8s_exec.py compile-2.7!skip
-plugins/modules/k8s_exec.py compile-3.5!skip
-plugins/modules/helm.py compile-2.6!skip
-plugins/modules/helm.py compile-2.7!skip
-plugins/modules/helm.py compile-3.5!skip
-plugins/modules/helm_plugin_info.py compile-2.6!skip
-plugins/modules/helm_plugin_info.py compile-2.7!skip
-plugins/modules/helm_plugin_info.py compile-3.5!skip
-plugins/modules/helm_info.py compile-2.6!skip
-plugins/modules/helm_info.py compile-2.7!skip
-plugins/modules/helm_info.py compile-3.5!skip
-plugins/modules/helm_repository.py compile-2.6!skip
-plugins/modules/helm_repository.py compile-2.7!skip
-plugins/modules/helm_repository.py compile-3.5!skip
-plugins/modules/k8s_rollback.py compile-2.6!skip
-plugins/modules/k8s_rollback.py compile-2.7!skip
-plugins/modules/k8s_rollback.py compile-3.5!skip
-plugins/modules/k8s_log.py compile-2.6!skip
-plugins/modules/k8s_log.py compile-2.7!skip
-plugins/modules/k8s_log.py compile-3.5!skip
-plugins/modules/k8s_drain.py compile-2.6!skip
-plugins/modules/k8s_drain.py compile-2.7!skip
-plugins/modules/k8s_drain.py compile-3.5!skip
-plugins/modules/helm_plugin.py compile-2.6!skip
-plugins/modules/helm_plugin.py compile-2.7!skip
-plugins/modules/helm_plugin.py compile-3.5!skip
-plugins/modules/k8s_taint.py compile-2.6!skip
-plugins/modules/k8s_taint.py compile-2.7!skip
-plugins/modules/k8s_taint.py compile-3.5!skip
-plugins/modules/k8s.py compile-2.6!skip
-plugins/modules/k8s.py compile-2.7!skip
-plugins/modules/k8s.py compile-3.5!skip
-plugins/modules/k8s_service.py compile-2.6!skip
-plugins/modules/k8s_service.py compile-2.7!skip
-plugins/modules/k8s_service.py compile-3.5!skip
-plugins/modules/k8s_cluster_info.py compile-2.6!skip
-plugins/modules/k8s_cluster_info.py compile-2.7!skip
-plugins/modules/k8s_cluster_info.py compile-3.5!skip
-plugins/modules/k8s_info.py compile-2.6!skip
-plugins/modules/k8s_info.py compile-2.7!skip
-plugins/modules/k8s_info.py compile-3.5!skip
-plugins/modules/k8s_cp.py compile-2.6!skip
-plugins/modules/k8s_cp.py compile-2.7!skip
-plugins/modules/k8s_cp.py compile-3.5!skip
-plugins/modules/__init__.py compile-2.6!skip
-plugins/modules/__init__.py compile-2.7!skip
-plugins/modules/__init__.py compile-3.5!skip
-plugins/modules/k8s_json_patch.py compile-2.6!skip
-plugins/modules/k8s_json_patch.py compile-2.7!skip
-plugins/modules/k8s_json_patch.py compile-3.5!skip
-plugins/action/k8s_info.py compile-2.6!skip
-plugins/action/k8s_info.py compile-2.7!skip
-plugins/action/k8s_info.py compile-3.5!skip
-plugins/filter/k8s.py compile-2.6!skip
-plugins/filter/k8s.py compile-2.7!skip
-plugins/filter/k8s.py compile-3.5!skip
-tests/unit/conftest.py compile-2.6!skip
-tests/unit/conftest.py compile-2.7!skip
-tests/unit/conftest.py compile-3.5!skip
-tests/unit/utils/ansible_module_mock.py compile-2.6!skip
-tests/unit/utils/ansible_module_mock.py compile-2.7!skip
-tests/unit/utils/ansible_module_mock.py compile-3.5!skip
-tests/unit/module_utils/test_helm.py compile-2.6!skip
-tests/unit/module_utils/test_helm.py compile-2.7!skip
-tests/unit/module_utils/test_helm.py compile-3.5!skip
-tests/unit/module_utils/test_marshal.py compile-2.6!skip
-tests/unit/module_utils/test_marshal.py compile-2.7!skip
-tests/unit/module_utils/test_marshal.py compile-3.5!skip
-tests/unit/module_utils/test_discoverer.py compile-2.6!skip
-tests/unit/module_utils/test_discoverer.py compile-2.7!skip
-tests/unit/module_utils/test_discoverer.py compile-3.5!skip
-tests/unit/module_utils/test_hashes.py compile-2.6!skip
-tests/unit/module_utils/test_hashes.py compile-2.7!skip
-tests/unit/module_utils/test_hashes.py compile-3.5!skip
-tests/unit/module_utils/test_resource.py compile-2.6!skip
-tests/unit/module_utils/test_resource.py compile-2.7!skip
-tests/unit/module_utils/test_resource.py compile-3.5!skip
-tests/unit/module_utils/test_service.py compile-2.6!skip
-tests/unit/module_utils/test_service.py compile-2.7!skip
-tests/unit/module_utils/test_service.py compile-3.5!skip
-tests/unit/module_utils/test_waiter.py compile-2.6!skip
-tests/unit/module_utils/test_waiter.py compile-2.7!skip
-tests/unit/module_utils/test_waiter.py compile-3.5!skip
-tests/unit/module_utils/test_common.py compile-2.6!skip
-tests/unit/module_utils/test_common.py compile-2.7!skip
-tests/unit/module_utils/test_common.py compile-3.5!skip
-tests/unit/module_utils/test_selector.py compile-2.6!skip
-tests/unit/module_utils/test_selector.py compile-2.7!skip
-tests/unit/module_utils/test_selector.py compile-3.5!skip
-tests/unit/module_utils/test_apply.py compile-2.6!skip
-tests/unit/module_utils/test_apply.py compile-2.7!skip
-tests/unit/module_utils/test_apply.py compile-3.5!skip
-tests/unit/module_utils/test_runner.py compile-2.6!skip
-tests/unit/module_utils/test_runner.py compile-2.7!skip
-tests/unit/module_utils/test_runner.py compile-3.5!skip
-tests/unit/module_utils/test_client.py compile-2.6!skip
-tests/unit/module_utils/test_client.py compile-2.7!skip
-tests/unit/module_utils/test_client.py compile-3.5!skip
-tests/unit/module_utils/test_core.py compile-2.6!skip
-tests/unit/module_utils/test_core.py compile-2.7!skip
-tests/unit/module_utils/test_core.py compile-3.5!skip
-tests/unit/modules/test_helm_template_module.py compile-2.6!skip
-tests/unit/modules/test_helm_template_module.py compile-2.7!skip
-tests/unit/modules/test_helm_template_module.py compile-3.5!skip
-tests/unit/modules/test_helm_template.py compile-2.6!skip
-tests/unit/modules/test_helm_template.py compile-2.7!skip
-tests/unit/modules/test_helm_template.py compile-3.5!skip
-tests/unit/modules/test_module_helm.py compile-2.6!skip
-tests/unit/modules/test_module_helm.py compile-2.7!skip
-tests/unit/modules/test_module_helm.py compile-3.5!skip
-tests/unit/action/test_remove_omit.py compile-2.6!skip
-tests/unit/action/test_remove_omit.py compile-2.7!skip
-tests/unit/action/test_remove_omit.py compile-3.5!skip
-tests/integration/targets/k8s_copy/library/k8s_create_file.py compile-2.6!skip
-tests/integration/targets/k8s_copy/library/k8s_create_file.py compile-2.7!skip
-tests/integration/targets/k8s_copy/library/k8s_create_file.py compile-3.5!skip
-tests/integration/targets/k8s_copy/library/kubectl_file_compare.py compile-2.6!skip
-tests/integration/targets/k8s_copy/library/kubectl_file_compare.py compile-2.7!skip
-tests/integration/targets/k8s_copy/library/kubectl_file_compare.py compile-3.5!skip
-tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py compile-2.6!skip
-tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py compile-2.7!skip
-tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py compile-3.5!skip
-tests/integration/targets/helm/library/helm_test_version.py compile-2.6!skip
-tests/integration/targets/helm/library/helm_test_version.py compile-2.7!skip
-tests/integration/targets/helm/library/helm_test_version.py compile-3.5!skip
-plugins/modules/k8s_scale.py pylint!skip
-plugins/modules/helm_template.py pylint!skip
-plugins/modules/k8s_exec.py pylint!skip
-plugins/modules/helm.py pylint!skip
-plugins/modules/helm_plugin_info.py pylint!skip
-plugins/modules/helm_info.py pylint!skip
-plugins/modules/helm_repository.py pylint!skip
-plugins/modules/k8s_rollback.py pylint!skip
-plugins/modules/k8s_log.py pylint!skip
-plugins/modules/k8s_drain.py pylint!skip
-plugins/modules/helm_plugin.py pylint!skip
-plugins/modules/k8s_taint.py pylint!skip
-plugins/modules/k8s.py pylint!skip
-plugins/modules/k8s_service.py pylint!skip
-plugins/modules/k8s_cluster_info.py pylint!skip
-plugins/modules/k8s_info.py pylint!skip
-plugins/modules/k8s_cp.py pylint!skip
-plugins/modules/__init__.py pylint!skip
-plugins/modules/k8s_json_patch.py pylint!skip
-plugins/module_utils/helm.py pylint!skip
-plugins/module_utils/apply.py pylint!skip
-plugins/module_utils/hashes.py pylint!skip
-plugins/module_utils/helm_args_common.py pylint!skip
-plugins/module_utils/version.py pylint!skip
-plugins/module_utils/_version.py pylint!skip
-plugins/module_utils/copy.py pylint!skip
-plugins/module_utils/args_common.py pylint!skip
-plugins/module_utils/__init__.py pylint!skip
-plugins/module_utils/selector.py pylint!skip
-plugins/module_utils/k8sdynamicclient.py pylint!skip
-plugins/module_utils/common.py pylint!skip
-plugins/module_utils/ansiblemodule.py pylint!skip
-plugins/module_utils/exceptions.py pylint!skip
-plugins/module_utils/client/resource.py pylint!skip
-plugins/module_utils/client/discovery.py pylint!skip
-plugins/module_utils/k8s/resource.py pylint!skip
-plugins/module_utils/k8s/core.py pylint!skip
-plugins/module_utils/k8s/waiter.py pylint!skip
-plugins/module_utils/k8s/client.py pylint!skip
-plugins/module_utils/k8s/runner.py pylint!skip
-plugins/module_utils/k8s/service.py pylint!skip
-plugins/module_utils/k8s/exceptions.py pylint!skip
-tests/integration/targets/k8s_copy/library/k8s_create_file.py pylint!skip
-tests/integration/targets/k8s_copy/library/kubectl_file_compare.py pylint!skip
-tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py pylint!skip
-tests/integration/targets/helm/library/helm_test_version.py pylint!skip
-tests/unit/conftest.py pylint!skip
-tests/unit/utils/ansible_module_mock.py pylint!skip
-tests/unit/module_utils/test_helm.py pylint!skip
-tests/unit/module_utils/test_marshal.py pylint!skip
-tests/unit/module_utils/test_discoverer.py pylint!skip
-tests/unit/module_utils/test_hashes.py pylint!skip
-tests/unit/module_utils/test_resource.py pylint!skip
-tests/unit/module_utils/test_service.py pylint!skip
-tests/unit/module_utils/test_waiter.py pylint!skip
-tests/unit/module_utils/test_common.py pylint!skip
-tests/unit/module_utils/test_selector.py pylint!skip
-tests/unit/module_utils/test_apply.py pylint!skip
-tests/unit/module_utils/test_runner.py pylint!skip
-tests/unit/module_utils/test_client.py pylint!skip
-tests/unit/module_utils/test_core.py pylint!skip
-tests/unit/modules/test_helm_template_module.py pylint!skip
-tests/unit/modules/test_helm_template.py pylint!skip
-tests/unit/modules/test_module_helm.py pylint!skip
-tests/unit/action/test_remove_omit.py pylint!skip
-plugins/modules/k8s.py validate-modules!skip
-plugins/modules/k8s_cp.py validate-modules!skip
-plugins/modules/k8s_drain.py validate-modules!skip
-plugins/modules/k8s_exec.py validate-modules!skip
-plugins/modules/k8s_info.py validate-modules!skip
-plugins/modules/k8s_json_patch.py validate-modules!skip
-plugins/modules/k8s_log.py validate-modules!skip
-plugins/modules/k8s_rollback.py validate-modules!skip
-plugins/modules/k8s_scale.py validate-modules!skip
-plugins/modules/k8s_service.py validate-modules!skip
-plugins/modules/k8s_taint.py validate-modules!skip
diff --git a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.11.txt b/ansible_collections/kubernetes/core/tests/sanity/ignore-2.11.txt
deleted file mode 100644
index 80122d803..000000000
--- a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.11.txt
+++ /dev/null
@@ -1,592 +0,0 @@
-plugins/module_utils/client/discovery.py import-3.6!skip
-plugins/module_utils/client/discovery.py import-3.7!skip
-plugins/module_utils/client/discovery.py import-3.8!skip
-plugins/module_utils/client/discovery.py import-3.9!skip
-plugins/module_utils/client/resource.py import-3.6!skip
-plugins/module_utils/client/resource.py import-3.7!skip
-plugins/module_utils/client/resource.py import-3.8!skip
-plugins/module_utils/client/resource.py import-3.9!skip
-plugins/module_utils/k8sdynamicclient.py import-3.6!skip
-plugins/module_utils/k8sdynamicclient.py import-3.7!skip
-plugins/module_utils/k8sdynamicclient.py import-3.8!skip
-plugins/module_utils/k8sdynamicclient.py import-3.9!skip
-plugins/modules/k8s.py validate-modules:parameter-type-not-in-doc
-plugins/modules/k8s_scale.py validate-modules:parameter-type-not-in-doc
-plugins/modules/k8s_service.py validate-modules:parameter-type-not-in-doc
-tests/unit/module_utils/fixtures/definitions.yml yamllint!skip
-tests/unit/module_utils/fixtures/deployments.yml yamllint!skip
-tests/unit/module_utils/fixtures/pods.yml yamllint!skip
-tests/integration/targets/helm/files/appversionless-chart-v2/templates/configmap.yaml yamllint!skip
-tests/integration/targets/helm/files/appversionless-chart/templates/configmap.yaml yamllint!skip
-tests/integration/targets/helm/files/test-chart-v2/templates/configmap.yaml yamllint!skip
-tests/integration/targets/helm/files/test-chart/templates/configmap.yaml yamllint!skip
-tests/integration/targets/helm_diff/files/test-chart/templates/configmap.yaml yamllint!skip
-tests/integration/targets/k8s_scale/files/deployment.yaml yamllint!skip
-tests/sanity/refresh_ignore_files shebang!skip
-plugins/modules/k8s.py validate-modules:return-syntax-error
-plugins/modules/k8s_scale.py validate-modules:return-syntax-error
-plugins/modules/k8s_service.py validate-modules:return-syntax-error
-plugins/modules/k8s_taint.py validate-modules:return-syntax-error
-plugins/doc_fragments/k8s_name_options.py future-import-boilerplate!skip
-plugins/doc_fragments/k8s_auth_options.py future-import-boilerplate!skip
-plugins/doc_fragments/helm_common_options.py future-import-boilerplate!skip
-plugins/doc_fragments/k8s_state_options.py future-import-boilerplate!skip
-plugins/doc_fragments/k8s_wait_options.py future-import-boilerplate!skip
-plugins/doc_fragments/k8s_scale_options.py future-import-boilerplate!skip
-plugins/doc_fragments/k8s_delete_options.py future-import-boilerplate!skip
-plugins/doc_fragments/__init__.py future-import-boilerplate!skip
-plugins/doc_fragments/k8s_resource_options.py future-import-boilerplate!skip
-plugins/module_utils/helm.py future-import-boilerplate!skip
-plugins/module_utils/apply.py future-import-boilerplate!skip
-plugins/module_utils/hashes.py future-import-boilerplate!skip
-plugins/module_utils/helm_args_common.py future-import-boilerplate!skip
-plugins/module_utils/version.py future-import-boilerplate!skip
-plugins/module_utils/_version.py future-import-boilerplate!skip
-plugins/module_utils/copy.py future-import-boilerplate!skip
-plugins/module_utils/args_common.py future-import-boilerplate!skip
-plugins/module_utils/__init__.py future-import-boilerplate!skip
-plugins/module_utils/selector.py future-import-boilerplate!skip
-plugins/module_utils/k8sdynamicclient.py future-import-boilerplate!skip
-plugins/module_utils/common.py future-import-boilerplate!skip
-plugins/module_utils/ansiblemodule.py future-import-boilerplate!skip
-plugins/module_utils/exceptions.py future-import-boilerplate!skip
-plugins/module_utils/client/resource.py future-import-boilerplate!skip
-plugins/module_utils/client/discovery.py future-import-boilerplate!skip
-plugins/module_utils/k8s/resource.py future-import-boilerplate!skip
-plugins/module_utils/k8s/core.py future-import-boilerplate!skip
-plugins/module_utils/k8s/waiter.py future-import-boilerplate!skip
-plugins/module_utils/k8s/client.py future-import-boilerplate!skip
-plugins/module_utils/k8s/runner.py future-import-boilerplate!skip
-plugins/module_utils/k8s/service.py future-import-boilerplate!skip
-plugins/module_utils/k8s/exceptions.py future-import-boilerplate!skip
-plugins/connection/kubectl.py future-import-boilerplate!skip
-plugins/inventory/k8s.py future-import-boilerplate!skip
-plugins/lookup/k8s.py future-import-boilerplate!skip
-plugins/lookup/kustomize.py future-import-boilerplate!skip
-plugins/modules/k8s_scale.py future-import-boilerplate!skip
-plugins/modules/helm_template.py future-import-boilerplate!skip
-plugins/modules/k8s_exec.py future-import-boilerplate!skip
-plugins/modules/helm.py future-import-boilerplate!skip
-plugins/modules/helm_plugin_info.py future-import-boilerplate!skip
-plugins/modules/helm_info.py future-import-boilerplate!skip
-plugins/modules/helm_repository.py future-import-boilerplate!skip
-plugins/modules/k8s_rollback.py future-import-boilerplate!skip
-plugins/modules/k8s_log.py future-import-boilerplate!skip
-plugins/modules/k8s_drain.py future-import-boilerplate!skip
-plugins/modules/helm_plugin.py future-import-boilerplate!skip
-plugins/modules/k8s_taint.py future-import-boilerplate!skip
-plugins/modules/k8s.py future-import-boilerplate!skip
-plugins/modules/k8s_service.py future-import-boilerplate!skip
-plugins/modules/k8s_cluster_info.py future-import-boilerplate!skip
-plugins/modules/k8s_info.py future-import-boilerplate!skip
-plugins/modules/k8s_cp.py future-import-boilerplate!skip
-plugins/modules/__init__.py future-import-boilerplate!skip
-plugins/modules/k8s_json_patch.py future-import-boilerplate!skip
-plugins/action/k8s_info.py future-import-boilerplate!skip
-plugins/filter/k8s.py future-import-boilerplate!skip
-tests/unit/conftest.py future-import-boilerplate!skip
-tests/unit/utils/ansible_module_mock.py future-import-boilerplate!skip
-tests/unit/module_utils/test_helm.py future-import-boilerplate!skip
-tests/unit/module_utils/test_marshal.py future-import-boilerplate!skip
-tests/unit/module_utils/test_discoverer.py future-import-boilerplate!skip
-tests/unit/module_utils/test_hashes.py future-import-boilerplate!skip
-tests/unit/module_utils/test_resource.py future-import-boilerplate!skip
-tests/unit/module_utils/test_service.py future-import-boilerplate!skip
-tests/unit/module_utils/test_waiter.py future-import-boilerplate!skip
-tests/unit/module_utils/test_common.py future-import-boilerplate!skip
-tests/unit/module_utils/test_selector.py future-import-boilerplate!skip
-tests/unit/module_utils/test_apply.py future-import-boilerplate!skip
-tests/unit/module_utils/test_runner.py future-import-boilerplate!skip
-tests/unit/module_utils/test_client.py future-import-boilerplate!skip
-tests/unit/module_utils/test_core.py future-import-boilerplate!skip
-tests/unit/modules/test_helm_template_module.py future-import-boilerplate!skip
-tests/unit/modules/test_helm_template.py future-import-boilerplate!skip
-tests/unit/modules/test_module_helm.py future-import-boilerplate!skip
-tests/unit/action/test_remove_omit.py future-import-boilerplate!skip
-plugins/doc_fragments/k8s_name_options.py metaclass-boilerplate!skip
-plugins/doc_fragments/k8s_auth_options.py metaclass-boilerplate!skip
-plugins/doc_fragments/helm_common_options.py metaclass-boilerplate!skip
-plugins/doc_fragments/k8s_state_options.py metaclass-boilerplate!skip
-plugins/doc_fragments/k8s_wait_options.py metaclass-boilerplate!skip
-plugins/doc_fragments/k8s_scale_options.py metaclass-boilerplate!skip
-plugins/doc_fragments/k8s_delete_options.py metaclass-boilerplate!skip
-plugins/doc_fragments/__init__.py metaclass-boilerplate!skip
-plugins/doc_fragments/k8s_resource_options.py metaclass-boilerplate!skip
-plugins/module_utils/helm.py metaclass-boilerplate!skip
-plugins/module_utils/apply.py metaclass-boilerplate!skip
-plugins/module_utils/hashes.py metaclass-boilerplate!skip
-plugins/module_utils/helm_args_common.py metaclass-boilerplate!skip
-plugins/module_utils/version.py metaclass-boilerplate!skip
-plugins/module_utils/_version.py metaclass-boilerplate!skip
-plugins/module_utils/copy.py metaclass-boilerplate!skip
-plugins/module_utils/args_common.py metaclass-boilerplate!skip
-plugins/module_utils/__init__.py metaclass-boilerplate!skip
-plugins/module_utils/selector.py metaclass-boilerplate!skip
-plugins/module_utils/k8sdynamicclient.py metaclass-boilerplate!skip
-plugins/module_utils/common.py metaclass-boilerplate!skip
-plugins/module_utils/ansiblemodule.py metaclass-boilerplate!skip
-plugins/module_utils/exceptions.py metaclass-boilerplate!skip
-plugins/module_utils/client/resource.py metaclass-boilerplate!skip
-plugins/module_utils/client/discovery.py metaclass-boilerplate!skip
-plugins/module_utils/k8s/resource.py metaclass-boilerplate!skip
-plugins/module_utils/k8s/core.py metaclass-boilerplate!skip
-plugins/module_utils/k8s/waiter.py metaclass-boilerplate!skip
-plugins/module_utils/k8s/client.py metaclass-boilerplate!skip
-plugins/module_utils/k8s/runner.py metaclass-boilerplate!skip
-plugins/module_utils/k8s/service.py metaclass-boilerplate!skip
-plugins/module_utils/k8s/exceptions.py metaclass-boilerplate!skip
-plugins/connection/kubectl.py metaclass-boilerplate!skip
-plugins/inventory/k8s.py metaclass-boilerplate!skip
-plugins/lookup/k8s.py metaclass-boilerplate!skip
-plugins/lookup/kustomize.py metaclass-boilerplate!skip
-plugins/modules/k8s_scale.py metaclass-boilerplate!skip
-plugins/modules/helm_template.py metaclass-boilerplate!skip
-plugins/modules/k8s_exec.py metaclass-boilerplate!skip
-plugins/modules/helm.py metaclass-boilerplate!skip
-plugins/modules/helm_plugin_info.py metaclass-boilerplate!skip
-plugins/modules/helm_info.py metaclass-boilerplate!skip
-plugins/modules/helm_repository.py metaclass-boilerplate!skip
-plugins/modules/k8s_rollback.py metaclass-boilerplate!skip
-plugins/modules/k8s_log.py metaclass-boilerplate!skip
-plugins/modules/k8s_drain.py metaclass-boilerplate!skip
-plugins/modules/helm_plugin.py metaclass-boilerplate!skip
-plugins/modules/k8s_taint.py metaclass-boilerplate!skip
-plugins/modules/k8s.py metaclass-boilerplate!skip
-plugins/modules/k8s_service.py metaclass-boilerplate!skip
-plugins/modules/k8s_cluster_info.py metaclass-boilerplate!skip
-plugins/modules/k8s_info.py metaclass-boilerplate!skip
-plugins/modules/k8s_cp.py metaclass-boilerplate!skip
-plugins/modules/__init__.py metaclass-boilerplate!skip
-plugins/modules/k8s_json_patch.py metaclass-boilerplate!skip
-plugins/action/k8s_info.py metaclass-boilerplate!skip
-plugins/filter/k8s.py metaclass-boilerplate!skip
-tests/unit/conftest.py metaclass-boilerplate!skip
-tests/unit/utils/ansible_module_mock.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_helm.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_marshal.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_discoverer.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_hashes.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_resource.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_service.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_waiter.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_common.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_selector.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_apply.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_runner.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_client.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_core.py metaclass-boilerplate!skip
-tests/unit/modules/test_helm_template_module.py metaclass-boilerplate!skip
-tests/unit/modules/test_helm_template.py metaclass-boilerplate!skip
-tests/unit/modules/test_module_helm.py metaclass-boilerplate!skip
-tests/unit/action/test_remove_omit.py metaclass-boilerplate!skip
-plugins/doc_fragments/k8s_name_options.py import-2.6!skip
-plugins/doc_fragments/k8s_name_options.py import-2.7!skip
-plugins/doc_fragments/k8s_name_options.py import-3.5!skip
-plugins/doc_fragments/k8s_auth_options.py import-2.6!skip
-plugins/doc_fragments/k8s_auth_options.py import-2.7!skip
-plugins/doc_fragments/k8s_auth_options.py import-3.5!skip
-plugins/doc_fragments/helm_common_options.py import-2.6!skip
-plugins/doc_fragments/helm_common_options.py import-2.7!skip
-plugins/doc_fragments/helm_common_options.py import-3.5!skip
-plugins/doc_fragments/k8s_state_options.py import-2.6!skip
-plugins/doc_fragments/k8s_state_options.py import-2.7!skip
-plugins/doc_fragments/k8s_state_options.py import-3.5!skip
-plugins/doc_fragments/k8s_wait_options.py import-2.6!skip
-plugins/doc_fragments/k8s_wait_options.py import-2.7!skip
-plugins/doc_fragments/k8s_wait_options.py import-3.5!skip
-plugins/doc_fragments/k8s_scale_options.py import-2.6!skip
-plugins/doc_fragments/k8s_scale_options.py import-2.7!skip
-plugins/doc_fragments/k8s_scale_options.py import-3.5!skip
-plugins/doc_fragments/k8s_delete_options.py import-2.6!skip
-plugins/doc_fragments/k8s_delete_options.py import-2.7!skip
-plugins/doc_fragments/k8s_delete_options.py import-3.5!skip
-plugins/doc_fragments/__init__.py import-2.6!skip
-plugins/doc_fragments/__init__.py import-2.7!skip
-plugins/doc_fragments/__init__.py import-3.5!skip
-plugins/doc_fragments/k8s_resource_options.py import-2.6!skip
-plugins/doc_fragments/k8s_resource_options.py import-2.7!skip
-plugins/doc_fragments/k8s_resource_options.py import-3.5!skip
-plugins/module_utils/helm.py import-2.6!skip
-plugins/module_utils/helm.py import-2.7!skip
-plugins/module_utils/helm.py import-3.5!skip
-plugins/module_utils/apply.py import-2.6!skip
-plugins/module_utils/apply.py import-2.7!skip
-plugins/module_utils/apply.py import-3.5!skip
-plugins/module_utils/hashes.py import-2.6!skip
-plugins/module_utils/hashes.py import-2.7!skip
-plugins/module_utils/hashes.py import-3.5!skip
-plugins/module_utils/helm_args_common.py import-2.6!skip
-plugins/module_utils/helm_args_common.py import-2.7!skip
-plugins/module_utils/helm_args_common.py import-3.5!skip
-plugins/module_utils/version.py import-2.6!skip
-plugins/module_utils/version.py import-2.7!skip
-plugins/module_utils/version.py import-3.5!skip
-plugins/module_utils/_version.py import-2.6!skip
-plugins/module_utils/_version.py import-2.7!skip
-plugins/module_utils/_version.py import-3.5!skip
-plugins/module_utils/copy.py import-2.6!skip
-plugins/module_utils/copy.py import-2.7!skip
-plugins/module_utils/copy.py import-3.5!skip
-plugins/module_utils/args_common.py import-2.6!skip
-plugins/module_utils/args_common.py import-2.7!skip
-plugins/module_utils/args_common.py import-3.5!skip
-plugins/module_utils/__init__.py import-2.6!skip
-plugins/module_utils/__init__.py import-2.7!skip
-plugins/module_utils/__init__.py import-3.5!skip
-plugins/module_utils/selector.py import-2.6!skip
-plugins/module_utils/selector.py import-2.7!skip
-plugins/module_utils/selector.py import-3.5!skip
-plugins/module_utils/k8sdynamicclient.py import-2.6!skip
-plugins/module_utils/k8sdynamicclient.py import-2.7!skip
-plugins/module_utils/k8sdynamicclient.py import-3.5!skip
-plugins/module_utils/common.py import-2.6!skip
-plugins/module_utils/common.py import-2.7!skip
-plugins/module_utils/common.py import-3.5!skip
-plugins/module_utils/ansiblemodule.py import-2.6!skip
-plugins/module_utils/ansiblemodule.py import-2.7!skip
-plugins/module_utils/ansiblemodule.py import-3.5!skip
-plugins/module_utils/exceptions.py import-2.6!skip
-plugins/module_utils/exceptions.py import-2.7!skip
-plugins/module_utils/exceptions.py import-3.5!skip
-plugins/module_utils/client/resource.py import-2.6!skip
-plugins/module_utils/client/resource.py import-2.7!skip
-plugins/module_utils/client/resource.py import-3.5!skip
-plugins/module_utils/client/discovery.py import-2.6!skip
-plugins/module_utils/client/discovery.py import-2.7!skip
-plugins/module_utils/client/discovery.py import-3.5!skip
-plugins/module_utils/k8s/resource.py import-2.6!skip
-plugins/module_utils/k8s/resource.py import-2.7!skip
-plugins/module_utils/k8s/resource.py import-3.5!skip
-plugins/module_utils/k8s/core.py import-2.6!skip
-plugins/module_utils/k8s/core.py import-2.7!skip
-plugins/module_utils/k8s/core.py import-3.5!skip
-plugins/module_utils/k8s/waiter.py import-2.6!skip
-plugins/module_utils/k8s/waiter.py import-2.7!skip
-plugins/module_utils/k8s/waiter.py import-3.5!skip
-plugins/module_utils/k8s/client.py import-2.6!skip
-plugins/module_utils/k8s/client.py import-2.7!skip
-plugins/module_utils/k8s/client.py import-3.5!skip
-plugins/module_utils/k8s/runner.py import-2.6!skip
-plugins/module_utils/k8s/runner.py import-2.7!skip
-plugins/module_utils/k8s/runner.py import-3.5!skip
-plugins/module_utils/k8s/service.py import-2.6!skip
-plugins/module_utils/k8s/service.py import-2.7!skip
-plugins/module_utils/k8s/service.py import-3.5!skip
-plugins/module_utils/k8s/exceptions.py import-2.6!skip
-plugins/module_utils/k8s/exceptions.py import-2.7!skip
-plugins/module_utils/k8s/exceptions.py import-3.5!skip
-plugins/connection/kubectl.py import-2.6!skip
-plugins/connection/kubectl.py import-2.7!skip
-plugins/connection/kubectl.py import-3.5!skip
-plugins/inventory/k8s.py import-2.6!skip
-plugins/inventory/k8s.py import-2.7!skip
-plugins/inventory/k8s.py import-3.5!skip
-plugins/lookup/k8s.py import-2.6!skip
-plugins/lookup/k8s.py import-2.7!skip
-plugins/lookup/k8s.py import-3.5!skip
-plugins/lookup/kustomize.py import-2.6!skip
-plugins/lookup/kustomize.py import-2.7!skip
-plugins/lookup/kustomize.py import-3.5!skip
-plugins/modules/k8s_scale.py import-2.6!skip
-plugins/modules/k8s_scale.py import-2.7!skip
-plugins/modules/k8s_scale.py import-3.5!skip
-plugins/modules/helm_template.py import-2.6!skip
-plugins/modules/helm_template.py import-2.7!skip
-plugins/modules/helm_template.py import-3.5!skip
-plugins/modules/k8s_exec.py import-2.6!skip
-plugins/modules/k8s_exec.py import-2.7!skip
-plugins/modules/k8s_exec.py import-3.5!skip
-plugins/modules/helm.py import-2.6!skip
-plugins/modules/helm.py import-2.7!skip
-plugins/modules/helm.py import-3.5!skip
-plugins/modules/helm_plugin_info.py import-2.6!skip
-plugins/modules/helm_plugin_info.py import-2.7!skip
-plugins/modules/helm_plugin_info.py import-3.5!skip
-plugins/modules/helm_info.py import-2.6!skip
-plugins/modules/helm_info.py import-2.7!skip
-plugins/modules/helm_info.py import-3.5!skip
-plugins/modules/helm_repository.py import-2.6!skip
-plugins/modules/helm_repository.py import-2.7!skip
-plugins/modules/helm_repository.py import-3.5!skip
-plugins/modules/k8s_rollback.py import-2.6!skip
-plugins/modules/k8s_rollback.py import-2.7!skip
-plugins/modules/k8s_rollback.py import-3.5!skip
-plugins/modules/k8s_log.py import-2.6!skip
-plugins/modules/k8s_log.py import-2.7!skip
-plugins/modules/k8s_log.py import-3.5!skip
-plugins/modules/k8s_drain.py import-2.6!skip
-plugins/modules/k8s_drain.py import-2.7!skip
-plugins/modules/k8s_drain.py import-3.5!skip
-plugins/modules/helm_plugin.py import-2.6!skip
-plugins/modules/helm_plugin.py import-2.7!skip
-plugins/modules/helm_plugin.py import-3.5!skip
-plugins/modules/k8s_taint.py import-2.6!skip
-plugins/modules/k8s_taint.py import-2.7!skip
-plugins/modules/k8s_taint.py import-3.5!skip
-plugins/modules/k8s.py import-2.6!skip
-plugins/modules/k8s.py import-2.7!skip
-plugins/modules/k8s.py import-3.5!skip
-plugins/modules/k8s_service.py import-2.6!skip
-plugins/modules/k8s_service.py import-2.7!skip
-plugins/modules/k8s_service.py import-3.5!skip
-plugins/modules/k8s_cluster_info.py import-2.6!skip
-plugins/modules/k8s_cluster_info.py import-2.7!skip
-plugins/modules/k8s_cluster_info.py import-3.5!skip
-plugins/modules/k8s_info.py import-2.6!skip
-plugins/modules/k8s_info.py import-2.7!skip
-plugins/modules/k8s_info.py import-3.5!skip
-plugins/modules/k8s_cp.py import-2.6!skip
-plugins/modules/k8s_cp.py import-2.7!skip
-plugins/modules/k8s_cp.py import-3.5!skip
-plugins/modules/__init__.py import-2.6!skip
-plugins/modules/__init__.py import-2.7!skip
-plugins/modules/__init__.py import-3.5!skip
-plugins/modules/k8s_json_patch.py import-2.6!skip
-plugins/modules/k8s_json_patch.py import-2.7!skip
-plugins/modules/k8s_json_patch.py import-3.5!skip
-plugins/action/k8s_info.py import-2.6!skip
-plugins/action/k8s_info.py import-2.7!skip
-plugins/action/k8s_info.py import-3.5!skip
-plugins/filter/k8s.py import-2.6!skip
-plugins/filter/k8s.py import-2.7!skip
-plugins/filter/k8s.py import-3.5!skip
-plugins/doc_fragments/k8s_name_options.py compile-2.6!skip
-plugins/doc_fragments/k8s_name_options.py compile-2.7!skip
-plugins/doc_fragments/k8s_name_options.py compile-3.5!skip
-plugins/doc_fragments/k8s_auth_options.py compile-2.6!skip
-plugins/doc_fragments/k8s_auth_options.py compile-2.7!skip
-plugins/doc_fragments/k8s_auth_options.py compile-3.5!skip
-plugins/doc_fragments/helm_common_options.py compile-2.6!skip
-plugins/doc_fragments/helm_common_options.py compile-2.7!skip
-plugins/doc_fragments/helm_common_options.py compile-3.5!skip
-plugins/doc_fragments/k8s_state_options.py compile-2.6!skip
-plugins/doc_fragments/k8s_state_options.py compile-2.7!skip
-plugins/doc_fragments/k8s_state_options.py compile-3.5!skip
-plugins/doc_fragments/k8s_wait_options.py compile-2.6!skip
-plugins/doc_fragments/k8s_wait_options.py compile-2.7!skip
-plugins/doc_fragments/k8s_wait_options.py compile-3.5!skip
-plugins/doc_fragments/k8s_scale_options.py compile-2.6!skip
-plugins/doc_fragments/k8s_scale_options.py compile-2.7!skip
-plugins/doc_fragments/k8s_scale_options.py compile-3.5!skip
-plugins/doc_fragments/k8s_delete_options.py compile-2.6!skip
-plugins/doc_fragments/k8s_delete_options.py compile-2.7!skip
-plugins/doc_fragments/k8s_delete_options.py compile-3.5!skip
-plugins/doc_fragments/__init__.py compile-2.6!skip
-plugins/doc_fragments/__init__.py compile-2.7!skip
-plugins/doc_fragments/__init__.py compile-3.5!skip
-plugins/doc_fragments/k8s_resource_options.py compile-2.6!skip
-plugins/doc_fragments/k8s_resource_options.py compile-2.7!skip
-plugins/doc_fragments/k8s_resource_options.py compile-3.5!skip
-plugins/module_utils/helm.py compile-2.6!skip
-plugins/module_utils/helm.py compile-2.7!skip
-plugins/module_utils/helm.py compile-3.5!skip
-plugins/module_utils/apply.py compile-2.6!skip
-plugins/module_utils/apply.py compile-2.7!skip
-plugins/module_utils/apply.py compile-3.5!skip
-plugins/module_utils/hashes.py compile-2.6!skip
-plugins/module_utils/hashes.py compile-2.7!skip
-plugins/module_utils/hashes.py compile-3.5!skip
-plugins/module_utils/helm_args_common.py compile-2.6!skip
-plugins/module_utils/helm_args_common.py compile-2.7!skip
-plugins/module_utils/helm_args_common.py compile-3.5!skip
-plugins/module_utils/version.py compile-2.6!skip
-plugins/module_utils/version.py compile-2.7!skip
-plugins/module_utils/version.py compile-3.5!skip
-plugins/module_utils/_version.py compile-2.6!skip
-plugins/module_utils/_version.py compile-2.7!skip
-plugins/module_utils/_version.py compile-3.5!skip
-plugins/module_utils/copy.py compile-2.6!skip
-plugins/module_utils/copy.py compile-2.7!skip
-plugins/module_utils/copy.py compile-3.5!skip
-plugins/module_utils/args_common.py compile-2.6!skip
-plugins/module_utils/args_common.py compile-2.7!skip
-plugins/module_utils/args_common.py compile-3.5!skip
-plugins/module_utils/__init__.py compile-2.6!skip
-plugins/module_utils/__init__.py compile-2.7!skip
-plugins/module_utils/__init__.py compile-3.5!skip
-plugins/module_utils/selector.py compile-2.6!skip
-plugins/module_utils/selector.py compile-2.7!skip
-plugins/module_utils/selector.py compile-3.5!skip
-plugins/module_utils/k8sdynamicclient.py compile-2.6!skip
-plugins/module_utils/k8sdynamicclient.py compile-2.7!skip
-plugins/module_utils/k8sdynamicclient.py compile-3.5!skip
-plugins/module_utils/common.py compile-2.6!skip
-plugins/module_utils/common.py compile-2.7!skip
-plugins/module_utils/common.py compile-3.5!skip
-plugins/module_utils/ansiblemodule.py compile-2.6!skip
-plugins/module_utils/ansiblemodule.py compile-2.7!skip
-plugins/module_utils/ansiblemodule.py compile-3.5!skip
-plugins/module_utils/exceptions.py compile-2.6!skip
-plugins/module_utils/exceptions.py compile-2.7!skip
-plugins/module_utils/exceptions.py compile-3.5!skip
-plugins/module_utils/client/resource.py compile-2.6!skip
-plugins/module_utils/client/resource.py compile-2.7!skip
-plugins/module_utils/client/resource.py compile-3.5!skip
-plugins/module_utils/client/discovery.py compile-2.6!skip
-plugins/module_utils/client/discovery.py compile-2.7!skip
-plugins/module_utils/client/discovery.py compile-3.5!skip
-plugins/module_utils/k8s/resource.py compile-2.6!skip
-plugins/module_utils/k8s/resource.py compile-2.7!skip
-plugins/module_utils/k8s/resource.py compile-3.5!skip
-plugins/module_utils/k8s/core.py compile-2.6!skip
-plugins/module_utils/k8s/core.py compile-2.7!skip
-plugins/module_utils/k8s/core.py compile-3.5!skip
-plugins/module_utils/k8s/waiter.py compile-2.6!skip
-plugins/module_utils/k8s/waiter.py compile-2.7!skip
-plugins/module_utils/k8s/waiter.py compile-3.5!skip
-plugins/module_utils/k8s/client.py compile-2.6!skip
-plugins/module_utils/k8s/client.py compile-2.7!skip
-plugins/module_utils/k8s/client.py compile-3.5!skip
-plugins/module_utils/k8s/runner.py compile-2.6!skip
-plugins/module_utils/k8s/runner.py compile-2.7!skip
-plugins/module_utils/k8s/runner.py compile-3.5!skip
-plugins/module_utils/k8s/service.py compile-2.6!skip
-plugins/module_utils/k8s/service.py compile-2.7!skip
-plugins/module_utils/k8s/service.py compile-3.5!skip
-plugins/module_utils/k8s/exceptions.py compile-2.6!skip
-plugins/module_utils/k8s/exceptions.py compile-2.7!skip
-plugins/module_utils/k8s/exceptions.py compile-3.5!skip
-plugins/connection/kubectl.py compile-2.6!skip
-plugins/connection/kubectl.py compile-2.7!skip
-plugins/connection/kubectl.py compile-3.5!skip
-plugins/inventory/k8s.py compile-2.6!skip
-plugins/inventory/k8s.py compile-2.7!skip
-plugins/inventory/k8s.py compile-3.5!skip
-plugins/lookup/k8s.py compile-2.6!skip
-plugins/lookup/k8s.py compile-2.7!skip
-plugins/lookup/k8s.py compile-3.5!skip
-plugins/lookup/kustomize.py compile-2.6!skip
-plugins/lookup/kustomize.py compile-2.7!skip
-plugins/lookup/kustomize.py compile-3.5!skip
-plugins/modules/k8s_scale.py compile-2.6!skip
-plugins/modules/k8s_scale.py compile-2.7!skip
-plugins/modules/k8s_scale.py compile-3.5!skip
-plugins/modules/helm_template.py compile-2.6!skip
-plugins/modules/helm_template.py compile-2.7!skip
-plugins/modules/helm_template.py compile-3.5!skip
-plugins/modules/k8s_exec.py compile-2.6!skip
-plugins/modules/k8s_exec.py compile-2.7!skip
-plugins/modules/k8s_exec.py compile-3.5!skip
-plugins/modules/helm.py compile-2.6!skip
-plugins/modules/helm.py compile-2.7!skip
-plugins/modules/helm.py compile-3.5!skip
-plugins/modules/helm_plugin_info.py compile-2.6!skip
-plugins/modules/helm_plugin_info.py compile-2.7!skip
-plugins/modules/helm_plugin_info.py compile-3.5!skip
-plugins/modules/helm_info.py compile-2.6!skip
-plugins/modules/helm_info.py compile-2.7!skip
-plugins/modules/helm_info.py compile-3.5!skip
-plugins/modules/helm_repository.py compile-2.6!skip
-plugins/modules/helm_repository.py compile-2.7!skip
-plugins/modules/helm_repository.py compile-3.5!skip
-plugins/modules/k8s_rollback.py compile-2.6!skip
-plugins/modules/k8s_rollback.py compile-2.7!skip
-plugins/modules/k8s_rollback.py compile-3.5!skip
-plugins/modules/k8s_log.py compile-2.6!skip
-plugins/modules/k8s_log.py compile-2.7!skip
-plugins/modules/k8s_log.py compile-3.5!skip
-plugins/modules/k8s_drain.py compile-2.6!skip
-plugins/modules/k8s_drain.py compile-2.7!skip
-plugins/modules/k8s_drain.py compile-3.5!skip
-plugins/modules/helm_plugin.py compile-2.6!skip
-plugins/modules/helm_plugin.py compile-2.7!skip
-plugins/modules/helm_plugin.py compile-3.5!skip
-plugins/modules/k8s_taint.py compile-2.6!skip
-plugins/modules/k8s_taint.py compile-2.7!skip
-plugins/modules/k8s_taint.py compile-3.5!skip
-plugins/modules/k8s.py compile-2.6!skip
-plugins/modules/k8s.py compile-2.7!skip
-plugins/modules/k8s.py compile-3.5!skip
-plugins/modules/k8s_service.py compile-2.6!skip
-plugins/modules/k8s_service.py compile-2.7!skip
-plugins/modules/k8s_service.py compile-3.5!skip
-plugins/modules/k8s_cluster_info.py compile-2.6!skip
-plugins/modules/k8s_cluster_info.py compile-2.7!skip
-plugins/modules/k8s_cluster_info.py compile-3.5!skip
-plugins/modules/k8s_info.py compile-2.6!skip
-plugins/modules/k8s_info.py compile-2.7!skip
-plugins/modules/k8s_info.py compile-3.5!skip
-plugins/modules/k8s_cp.py compile-2.6!skip
-plugins/modules/k8s_cp.py compile-2.7!skip
-plugins/modules/k8s_cp.py compile-3.5!skip
-plugins/modules/__init__.py compile-2.6!skip
-plugins/modules/__init__.py compile-2.7!skip
-plugins/modules/__init__.py compile-3.5!skip
-plugins/modules/k8s_json_patch.py compile-2.6!skip
-plugins/modules/k8s_json_patch.py compile-2.7!skip
-plugins/modules/k8s_json_patch.py compile-3.5!skip
-plugins/action/k8s_info.py compile-2.6!skip
-plugins/action/k8s_info.py compile-2.7!skip
-plugins/action/k8s_info.py compile-3.5!skip
-plugins/filter/k8s.py compile-2.6!skip
-plugins/filter/k8s.py compile-2.7!skip
-plugins/filter/k8s.py compile-3.5!skip
-tests/unit/conftest.py compile-2.6!skip
-tests/unit/conftest.py compile-2.7!skip
-tests/unit/conftest.py compile-3.5!skip
-tests/unit/utils/ansible_module_mock.py compile-2.6!skip
-tests/unit/utils/ansible_module_mock.py compile-2.7!skip
-tests/unit/utils/ansible_module_mock.py compile-3.5!skip
-tests/unit/module_utils/test_helm.py compile-2.6!skip
-tests/unit/module_utils/test_helm.py compile-2.7!skip
-tests/unit/module_utils/test_helm.py compile-3.5!skip
-tests/unit/module_utils/test_marshal.py compile-2.6!skip
-tests/unit/module_utils/test_marshal.py compile-2.7!skip
-tests/unit/module_utils/test_marshal.py compile-3.5!skip
-tests/unit/module_utils/test_discoverer.py compile-2.6!skip
-tests/unit/module_utils/test_discoverer.py compile-2.7!skip
-tests/unit/module_utils/test_discoverer.py compile-3.5!skip
-tests/unit/module_utils/test_hashes.py compile-2.6!skip
-tests/unit/module_utils/test_hashes.py compile-2.7!skip
-tests/unit/module_utils/test_hashes.py compile-3.5!skip
-tests/unit/module_utils/test_resource.py compile-2.6!skip
-tests/unit/module_utils/test_resource.py compile-2.7!skip
-tests/unit/module_utils/test_resource.py compile-3.5!skip
-tests/unit/module_utils/test_service.py compile-2.6!skip
-tests/unit/module_utils/test_service.py compile-2.7!skip
-tests/unit/module_utils/test_service.py compile-3.5!skip
-tests/unit/module_utils/test_waiter.py compile-2.6!skip
-tests/unit/module_utils/test_waiter.py compile-2.7!skip
-tests/unit/module_utils/test_waiter.py compile-3.5!skip
-tests/unit/module_utils/test_common.py compile-2.6!skip
-tests/unit/module_utils/test_common.py compile-2.7!skip
-tests/unit/module_utils/test_common.py compile-3.5!skip
-tests/unit/module_utils/test_selector.py compile-2.6!skip
-tests/unit/module_utils/test_selector.py compile-2.7!skip
-tests/unit/module_utils/test_selector.py compile-3.5!skip
-tests/unit/module_utils/test_apply.py compile-2.6!skip
-tests/unit/module_utils/test_apply.py compile-2.7!skip
-tests/unit/module_utils/test_apply.py compile-3.5!skip
-tests/unit/module_utils/test_runner.py compile-2.6!skip
-tests/unit/module_utils/test_runner.py compile-2.7!skip
-tests/unit/module_utils/test_runner.py compile-3.5!skip
-tests/unit/module_utils/test_client.py compile-2.6!skip
-tests/unit/module_utils/test_client.py compile-2.7!skip
-tests/unit/module_utils/test_client.py compile-3.5!skip
-tests/unit/module_utils/test_core.py compile-2.6!skip
-tests/unit/module_utils/test_core.py compile-2.7!skip
-tests/unit/module_utils/test_core.py compile-3.5!skip
-tests/unit/modules/test_helm_template_module.py compile-2.6!skip
-tests/unit/modules/test_helm_template_module.py compile-2.7!skip
-tests/unit/modules/test_helm_template_module.py compile-3.5!skip
-tests/unit/modules/test_helm_template.py compile-2.6!skip
-tests/unit/modules/test_helm_template.py compile-2.7!skip
-tests/unit/modules/test_helm_template.py compile-3.5!skip
-tests/unit/modules/test_module_helm.py compile-2.6!skip
-tests/unit/modules/test_module_helm.py compile-2.7!skip
-tests/unit/modules/test_module_helm.py compile-3.5!skip
-tests/unit/action/test_remove_omit.py compile-2.6!skip
-tests/unit/action/test_remove_omit.py compile-2.7!skip
-tests/unit/action/test_remove_omit.py compile-3.5!skip
-tests/integration/targets/k8s_copy/library/k8s_create_file.py compile-2.6!skip
-tests/integration/targets/k8s_copy/library/k8s_create_file.py compile-2.7!skip
-tests/integration/targets/k8s_copy/library/k8s_create_file.py compile-3.5!skip
-tests/integration/targets/k8s_copy/library/kubectl_file_compare.py compile-2.6!skip
-tests/integration/targets/k8s_copy/library/kubectl_file_compare.py compile-2.7!skip
-tests/integration/targets/k8s_copy/library/kubectl_file_compare.py compile-3.5!skip
-tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py compile-2.6!skip
-tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py compile-2.7!skip
-tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py compile-3.5!skip
-tests/integration/targets/helm/library/helm_test_version.py compile-2.6!skip
-tests/integration/targets/helm/library/helm_test_version.py compile-2.7!skip
-tests/integration/targets/helm/library/helm_test_version.py compile-3.5!skip
diff --git a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.13.txt b/ansible_collections/kubernetes/core/tests/sanity/ignore-2.13.txt
deleted file mode 100644
index 6cfa02f6b..000000000
--- a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.13.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-plugins/module_utils/client/discovery.py import-3.6!skip
-plugins/module_utils/client/discovery.py import-3.7!skip
-plugins/module_utils/client/discovery.py import-3.8!skip
-plugins/module_utils/client/discovery.py import-3.9!skip
-plugins/module_utils/client/discovery.py import-3.10!skip
-plugins/module_utils/client/resource.py import-3.6!skip
-plugins/module_utils/client/resource.py import-3.7!skip
-plugins/module_utils/client/resource.py import-3.8!skip
-plugins/module_utils/client/resource.py import-3.9!skip
-plugins/module_utils/client/resource.py import-3.10!skip
-plugins/module_utils/k8sdynamicclient.py import-3.6!skip
-plugins/module_utils/k8sdynamicclient.py import-3.7!skip
-plugins/module_utils/k8sdynamicclient.py import-3.8!skip
-plugins/module_utils/k8sdynamicclient.py import-3.9!skip
-plugins/module_utils/k8sdynamicclient.py import-3.10!skip
-plugins/modules/k8s.py validate-modules:parameter-type-not-in-doc
-plugins/modules/k8s_scale.py validate-modules:parameter-type-not-in-doc
-plugins/modules/k8s_service.py validate-modules:parameter-type-not-in-doc
-tests/unit/module_utils/fixtures/definitions.yml yamllint!skip
-tests/unit/module_utils/fixtures/deployments.yml yamllint!skip
-tests/unit/module_utils/fixtures/pods.yml yamllint!skip
-tests/integration/targets/helm/files/appversionless-chart-v2/templates/configmap.yaml yamllint!skip
-tests/integration/targets/helm/files/appversionless-chart/templates/configmap.yaml yamllint!skip
-tests/integration/targets/helm/files/test-chart-v2/templates/configmap.yaml yamllint!skip
-tests/integration/targets/helm/files/test-chart/templates/configmap.yaml yamllint!skip
-tests/integration/targets/helm_diff/files/test-chart/templates/configmap.yaml yamllint!skip
-tests/integration/targets/k8s_scale/files/deployment.yaml yamllint!skip
-tests/sanity/refresh_ignore_files shebang!skip
-plugins/modules/k8s.py validate-modules:return-syntax-error
-plugins/modules/k8s_scale.py validate-modules:return-syntax-error
-plugins/modules/k8s_service.py validate-modules:return-syntax-error
-plugins/modules/k8s_taint.py validate-modules:return-syntax-error
diff --git a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.14.txt b/ansible_collections/kubernetes/core/tests/sanity/ignore-2.14.txt
index f62989e02..637747685 100644
--- a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.14.txt
+++ b/ansible_collections/kubernetes/core/tests/sanity/ignore-2.14.txt
@@ -32,3 +32,5 @@ plugins/modules/k8s.py validate-modules:return-syntax-error
plugins/modules/k8s_scale.py validate-modules:return-syntax-error
plugins/modules/k8s_service.py validate-modules:return-syntax-error
plugins/modules/k8s_taint.py validate-modules:return-syntax-error
+tests/integration/targets/k8s_delete/files/deployments.yaml yamllint!skip
+tests/integration/targets/helm_diff/files/test-chart-reuse-values/templates/configmap.yaml yamllint!skip
diff --git a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.15.txt b/ansible_collections/kubernetes/core/tests/sanity/ignore-2.15.txt
index 86c079160..8f2d9f899 100644
--- a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.15.txt
+++ b/ansible_collections/kubernetes/core/tests/sanity/ignore-2.15.txt
@@ -22,6 +22,7 @@ plugins/modules/k8s_scale.py validate-modules:parameter-type-not-in-doc
plugins/modules/k8s_service.py validate-modules:parameter-type-not-in-doc
tests/unit/module_utils/fixtures/definitions.yml yamllint!skip
tests/unit/module_utils/fixtures/deployments.yml yamllint!skip
+tests/integration/targets/k8s_delete/files/deployments.yaml yamllint!skip
tests/unit/module_utils/fixtures/pods.yml yamllint!skip
tests/integration/targets/helm/files/appversionless-chart-v2/templates/configmap.yaml yamllint!skip
tests/integration/targets/helm/files/appversionless-chart/templates/configmap.yaml yamllint!skip
@@ -33,3 +34,4 @@ plugins/modules/k8s.py validate-modules:return-syntax-error
plugins/modules/k8s_scale.py validate-modules:return-syntax-error
plugins/modules/k8s_service.py validate-modules:return-syntax-error
plugins/modules/k8s_taint.py validate-modules:return-syntax-error
+tests/integration/targets/helm_diff/files/test-chart-reuse-values/templates/configmap.yaml yamllint!skip
diff --git a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.16.txt b/ansible_collections/kubernetes/core/tests/sanity/ignore-2.16.txt
index cb6e74504..e41e02e31 100644
--- a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.16.txt
+++ b/ansible_collections/kubernetes/core/tests/sanity/ignore-2.16.txt
@@ -25,6 +25,7 @@ plugins/modules/k8s_scale.py validate-modules:parameter-type-not-in-doc
plugins/modules/k8s_service.py validate-modules:parameter-type-not-in-doc
tests/unit/module_utils/fixtures/definitions.yml yamllint!skip
tests/unit/module_utils/fixtures/deployments.yml yamllint!skip
+tests/integration/targets/k8s_delete/files/deployments.yaml yamllint!skip
tests/unit/module_utils/fixtures/pods.yml yamllint!skip
tests/integration/targets/helm/files/appversionless-chart-v2/templates/configmap.yaml yamllint!skip
tests/integration/targets/helm/files/appversionless-chart/templates/configmap.yaml yamllint!skip
@@ -36,3 +37,4 @@ plugins/modules/k8s.py validate-modules:return-syntax-error
plugins/modules/k8s_scale.py validate-modules:return-syntax-error
plugins/modules/k8s_service.py validate-modules:return-syntax-error
plugins/modules/k8s_taint.py validate-modules:return-syntax-error
+tests/integration/targets/helm_diff/files/test-chart-reuse-values/templates/configmap.yaml yamllint!skip
diff --git a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.17.txt b/ansible_collections/kubernetes/core/tests/sanity/ignore-2.17.txt
index 11c8b21e1..c154baaf2 100644
--- a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.17.txt
+++ b/ansible_collections/kubernetes/core/tests/sanity/ignore-2.17.txt
@@ -16,6 +16,7 @@ plugins/modules/k8s_scale.py validate-modules:parameter-type-not-in-doc
plugins/modules/k8s_service.py validate-modules:parameter-type-not-in-doc
tests/unit/module_utils/fixtures/definitions.yml yamllint!skip
tests/unit/module_utils/fixtures/deployments.yml yamllint!skip
+tests/integration/targets/k8s_delete/files/deployments.yaml yamllint!skip
tests/unit/module_utils/fixtures/pods.yml yamllint!skip
tests/integration/targets/helm/files/appversionless-chart-v2/templates/configmap.yaml yamllint!skip
tests/integration/targets/helm/files/appversionless-chart/templates/configmap.yaml yamllint!skip
@@ -27,3 +28,4 @@ plugins/modules/k8s.py validate-modules:return-syntax-error
plugins/modules/k8s_scale.py validate-modules:return-syntax-error
plugins/modules/k8s_service.py validate-modules:return-syntax-error
plugins/modules/k8s_taint.py validate-modules:return-syntax-error
+tests/integration/targets/helm_diff/files/test-chart-reuse-values/templates/configmap.yaml yamllint!skip
diff --git a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.12.txt b/ansible_collections/kubernetes/core/tests/sanity/ignore-2.18.txt
index 6cfa02f6b..c154baaf2 100644
--- a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.12.txt
+++ b/ansible_collections/kubernetes/core/tests/sanity/ignore-2.18.txt
@@ -1,23 +1,22 @@
-plugins/module_utils/client/discovery.py import-3.6!skip
-plugins/module_utils/client/discovery.py import-3.7!skip
-plugins/module_utils/client/discovery.py import-3.8!skip
plugins/module_utils/client/discovery.py import-3.9!skip
plugins/module_utils/client/discovery.py import-3.10!skip
-plugins/module_utils/client/resource.py import-3.6!skip
-plugins/module_utils/client/resource.py import-3.7!skip
-plugins/module_utils/client/resource.py import-3.8!skip
+plugins/module_utils/client/discovery.py import-3.11!skip
+plugins/module_utils/client/discovery.py import-3.12!skip
plugins/module_utils/client/resource.py import-3.9!skip
plugins/module_utils/client/resource.py import-3.10!skip
-plugins/module_utils/k8sdynamicclient.py import-3.6!skip
-plugins/module_utils/k8sdynamicclient.py import-3.7!skip
-plugins/module_utils/k8sdynamicclient.py import-3.8!skip
+plugins/module_utils/client/resource.py import-3.11!skip
+plugins/module_utils/client/resource.py import-3.12!skip
plugins/module_utils/k8sdynamicclient.py import-3.9!skip
plugins/module_utils/k8sdynamicclient.py import-3.10!skip
+plugins/module_utils/k8sdynamicclient.py import-3.11!skip
+plugins/module_utils/k8sdynamicclient.py import-3.12!skip
+plugins/module_utils/version.py pylint!skip
plugins/modules/k8s.py validate-modules:parameter-type-not-in-doc
plugins/modules/k8s_scale.py validate-modules:parameter-type-not-in-doc
plugins/modules/k8s_service.py validate-modules:parameter-type-not-in-doc
tests/unit/module_utils/fixtures/definitions.yml yamllint!skip
tests/unit/module_utils/fixtures/deployments.yml yamllint!skip
+tests/integration/targets/k8s_delete/files/deployments.yaml yamllint!skip
tests/unit/module_utils/fixtures/pods.yml yamllint!skip
tests/integration/targets/helm/files/appversionless-chart-v2/templates/configmap.yaml yamllint!skip
tests/integration/targets/helm/files/appversionless-chart/templates/configmap.yaml yamllint!skip
@@ -25,8 +24,8 @@ tests/integration/targets/helm/files/test-chart-v2/templates/configmap.yaml yaml
tests/integration/targets/helm/files/test-chart/templates/configmap.yaml yamllint!skip
tests/integration/targets/helm_diff/files/test-chart/templates/configmap.yaml yamllint!skip
tests/integration/targets/k8s_scale/files/deployment.yaml yamllint!skip
-tests/sanity/refresh_ignore_files shebang!skip
plugins/modules/k8s.py validate-modules:return-syntax-error
plugins/modules/k8s_scale.py validate-modules:return-syntax-error
plugins/modules/k8s_service.py validate-modules:return-syntax-error
plugins/modules/k8s_taint.py validate-modules:return-syntax-error
+tests/integration/targets/helm_diff/files/test-chart-reuse-values/templates/configmap.yaml yamllint!skip
diff --git a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.9.txt b/ansible_collections/kubernetes/core/tests/sanity/ignore-2.9.txt
deleted file mode 100644
index 7828a0c08..000000000
--- a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.9.txt
+++ /dev/null
@@ -1,613 +0,0 @@
-plugins/module_utils/client/discovery.py import-3.6!skip
-plugins/module_utils/client/discovery.py import-3.7!skip
-plugins/module_utils/client/discovery.py import-3.8!skip
-plugins/module_utils/client/resource.py import-3.6!skip
-plugins/module_utils/client/resource.py import-3.7!skip
-plugins/module_utils/client/resource.py import-3.8!skip
-plugins/module_utils/k8sdynamicclient.py import-3.6!skip
-plugins/module_utils/k8sdynamicclient.py import-3.7!skip
-plugins/module_utils/k8sdynamicclient.py import-3.8!skip
-tests/unit/module_utils/fixtures/definitions.yml yamllint!skip
-tests/unit/module_utils/fixtures/deployments.yml yamllint!skip
-tests/unit/module_utils/fixtures/pods.yml yamllint!skip
-tests/integration/targets/helm/files/appversionless-chart-v2/templates/configmap.yaml yamllint!skip
-tests/integration/targets/helm/files/appversionless-chart/templates/configmap.yaml yamllint!skip
-tests/integration/targets/helm/files/test-chart-v2/templates/configmap.yaml yamllint!skip
-tests/integration/targets/helm/files/test-chart/templates/configmap.yaml yamllint!skip
-tests/integration/targets/helm_diff/files/test-chart/templates/configmap.yaml yamllint!skip
-tests/integration/targets/k8s_scale/files/deployment.yaml yamllint!skip
-tests/sanity/refresh_ignore_files shebang!skip
-plugins/doc_fragments/k8s_name_options.py future-import-boilerplate!skip
-plugins/doc_fragments/k8s_auth_options.py future-import-boilerplate!skip
-plugins/doc_fragments/helm_common_options.py future-import-boilerplate!skip
-plugins/doc_fragments/k8s_state_options.py future-import-boilerplate!skip
-plugins/doc_fragments/k8s_wait_options.py future-import-boilerplate!skip
-plugins/doc_fragments/k8s_scale_options.py future-import-boilerplate!skip
-plugins/doc_fragments/k8s_delete_options.py future-import-boilerplate!skip
-plugins/doc_fragments/__init__.py future-import-boilerplate!skip
-plugins/doc_fragments/k8s_resource_options.py future-import-boilerplate!skip
-plugins/module_utils/helm.py future-import-boilerplate!skip
-plugins/module_utils/apply.py future-import-boilerplate!skip
-plugins/module_utils/hashes.py future-import-boilerplate!skip
-plugins/module_utils/helm_args_common.py future-import-boilerplate!skip
-plugins/module_utils/version.py future-import-boilerplate!skip
-plugins/module_utils/_version.py future-import-boilerplate!skip
-plugins/module_utils/copy.py future-import-boilerplate!skip
-plugins/module_utils/args_common.py future-import-boilerplate!skip
-plugins/module_utils/__init__.py future-import-boilerplate!skip
-plugins/module_utils/selector.py future-import-boilerplate!skip
-plugins/module_utils/k8sdynamicclient.py future-import-boilerplate!skip
-plugins/module_utils/common.py future-import-boilerplate!skip
-plugins/module_utils/ansiblemodule.py future-import-boilerplate!skip
-plugins/module_utils/exceptions.py future-import-boilerplate!skip
-plugins/module_utils/client/resource.py future-import-boilerplate!skip
-plugins/module_utils/client/discovery.py future-import-boilerplate!skip
-plugins/module_utils/k8s/resource.py future-import-boilerplate!skip
-plugins/module_utils/k8s/core.py future-import-boilerplate!skip
-plugins/module_utils/k8s/waiter.py future-import-boilerplate!skip
-plugins/module_utils/k8s/client.py future-import-boilerplate!skip
-plugins/module_utils/k8s/runner.py future-import-boilerplate!skip
-plugins/module_utils/k8s/service.py future-import-boilerplate!skip
-plugins/module_utils/k8s/exceptions.py future-import-boilerplate!skip
-plugins/connection/kubectl.py future-import-boilerplate!skip
-plugins/inventory/k8s.py future-import-boilerplate!skip
-plugins/lookup/k8s.py future-import-boilerplate!skip
-plugins/lookup/kustomize.py future-import-boilerplate!skip
-plugins/modules/k8s_scale.py future-import-boilerplate!skip
-plugins/modules/helm_template.py future-import-boilerplate!skip
-plugins/modules/k8s_exec.py future-import-boilerplate!skip
-plugins/modules/helm.py future-import-boilerplate!skip
-plugins/modules/helm_plugin_info.py future-import-boilerplate!skip
-plugins/modules/helm_info.py future-import-boilerplate!skip
-plugins/modules/helm_repository.py future-import-boilerplate!skip
-plugins/modules/k8s_rollback.py future-import-boilerplate!skip
-plugins/modules/k8s_log.py future-import-boilerplate!skip
-plugins/modules/k8s_drain.py future-import-boilerplate!skip
-plugins/modules/helm_plugin.py future-import-boilerplate!skip
-plugins/modules/k8s_taint.py future-import-boilerplate!skip
-plugins/modules/k8s.py future-import-boilerplate!skip
-plugins/modules/k8s_service.py future-import-boilerplate!skip
-plugins/modules/k8s_cluster_info.py future-import-boilerplate!skip
-plugins/modules/k8s_info.py future-import-boilerplate!skip
-plugins/modules/k8s_cp.py future-import-boilerplate!skip
-plugins/modules/__init__.py future-import-boilerplate!skip
-plugins/modules/k8s_json_patch.py future-import-boilerplate!skip
-plugins/action/k8s_info.py future-import-boilerplate!skip
-plugins/filter/k8s.py future-import-boilerplate!skip
-tests/unit/conftest.py future-import-boilerplate!skip
-tests/unit/utils/ansible_module_mock.py future-import-boilerplate!skip
-tests/unit/module_utils/test_helm.py future-import-boilerplate!skip
-tests/unit/module_utils/test_marshal.py future-import-boilerplate!skip
-tests/unit/module_utils/test_discoverer.py future-import-boilerplate!skip
-tests/unit/module_utils/test_hashes.py future-import-boilerplate!skip
-tests/unit/module_utils/test_resource.py future-import-boilerplate!skip
-tests/unit/module_utils/test_service.py future-import-boilerplate!skip
-tests/unit/module_utils/test_waiter.py future-import-boilerplate!skip
-tests/unit/module_utils/test_common.py future-import-boilerplate!skip
-tests/unit/module_utils/test_selector.py future-import-boilerplate!skip
-tests/unit/module_utils/test_apply.py future-import-boilerplate!skip
-tests/unit/module_utils/test_runner.py future-import-boilerplate!skip
-tests/unit/module_utils/test_client.py future-import-boilerplate!skip
-tests/unit/module_utils/test_core.py future-import-boilerplate!skip
-tests/unit/modules/test_helm_template_module.py future-import-boilerplate!skip
-tests/unit/modules/test_helm_template.py future-import-boilerplate!skip
-tests/unit/modules/test_module_helm.py future-import-boilerplate!skip
-tests/unit/action/test_remove_omit.py future-import-boilerplate!skip
-plugins/doc_fragments/k8s_name_options.py metaclass-boilerplate!skip
-plugins/doc_fragments/k8s_auth_options.py metaclass-boilerplate!skip
-plugins/doc_fragments/helm_common_options.py metaclass-boilerplate!skip
-plugins/doc_fragments/k8s_state_options.py metaclass-boilerplate!skip
-plugins/doc_fragments/k8s_wait_options.py metaclass-boilerplate!skip
-plugins/doc_fragments/k8s_scale_options.py metaclass-boilerplate!skip
-plugins/doc_fragments/k8s_delete_options.py metaclass-boilerplate!skip
-plugins/doc_fragments/__init__.py metaclass-boilerplate!skip
-plugins/doc_fragments/k8s_resource_options.py metaclass-boilerplate!skip
-plugins/module_utils/helm.py metaclass-boilerplate!skip
-plugins/module_utils/apply.py metaclass-boilerplate!skip
-plugins/module_utils/hashes.py metaclass-boilerplate!skip
-plugins/module_utils/helm_args_common.py metaclass-boilerplate!skip
-plugins/module_utils/version.py metaclass-boilerplate!skip
-plugins/module_utils/_version.py metaclass-boilerplate!skip
-plugins/module_utils/copy.py metaclass-boilerplate!skip
-plugins/module_utils/args_common.py metaclass-boilerplate!skip
-plugins/module_utils/__init__.py metaclass-boilerplate!skip
-plugins/module_utils/selector.py metaclass-boilerplate!skip
-plugins/module_utils/k8sdynamicclient.py metaclass-boilerplate!skip
-plugins/module_utils/common.py metaclass-boilerplate!skip
-plugins/module_utils/ansiblemodule.py metaclass-boilerplate!skip
-plugins/module_utils/exceptions.py metaclass-boilerplate!skip
-plugins/module_utils/client/resource.py metaclass-boilerplate!skip
-plugins/module_utils/client/discovery.py metaclass-boilerplate!skip
-plugins/module_utils/k8s/resource.py metaclass-boilerplate!skip
-plugins/module_utils/k8s/core.py metaclass-boilerplate!skip
-plugins/module_utils/k8s/waiter.py metaclass-boilerplate!skip
-plugins/module_utils/k8s/client.py metaclass-boilerplate!skip
-plugins/module_utils/k8s/runner.py metaclass-boilerplate!skip
-plugins/module_utils/k8s/service.py metaclass-boilerplate!skip
-plugins/module_utils/k8s/exceptions.py metaclass-boilerplate!skip
-plugins/connection/kubectl.py metaclass-boilerplate!skip
-plugins/inventory/k8s.py metaclass-boilerplate!skip
-plugins/lookup/k8s.py metaclass-boilerplate!skip
-plugins/lookup/kustomize.py metaclass-boilerplate!skip
-plugins/modules/k8s_scale.py metaclass-boilerplate!skip
-plugins/modules/helm_template.py metaclass-boilerplate!skip
-plugins/modules/k8s_exec.py metaclass-boilerplate!skip
-plugins/modules/helm.py metaclass-boilerplate!skip
-plugins/modules/helm_plugin_info.py metaclass-boilerplate!skip
-plugins/modules/helm_info.py metaclass-boilerplate!skip
-plugins/modules/helm_repository.py metaclass-boilerplate!skip
-plugins/modules/k8s_rollback.py metaclass-boilerplate!skip
-plugins/modules/k8s_log.py metaclass-boilerplate!skip
-plugins/modules/k8s_drain.py metaclass-boilerplate!skip
-plugins/modules/helm_plugin.py metaclass-boilerplate!skip
-plugins/modules/k8s_taint.py metaclass-boilerplate!skip
-plugins/modules/k8s.py metaclass-boilerplate!skip
-plugins/modules/k8s_service.py metaclass-boilerplate!skip
-plugins/modules/k8s_cluster_info.py metaclass-boilerplate!skip
-plugins/modules/k8s_info.py metaclass-boilerplate!skip
-plugins/modules/k8s_cp.py metaclass-boilerplate!skip
-plugins/modules/__init__.py metaclass-boilerplate!skip
-plugins/modules/k8s_json_patch.py metaclass-boilerplate!skip
-plugins/action/k8s_info.py metaclass-boilerplate!skip
-plugins/filter/k8s.py metaclass-boilerplate!skip
-tests/unit/conftest.py metaclass-boilerplate!skip
-tests/unit/utils/ansible_module_mock.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_helm.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_marshal.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_discoverer.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_hashes.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_resource.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_service.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_waiter.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_common.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_selector.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_apply.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_runner.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_client.py metaclass-boilerplate!skip
-tests/unit/module_utils/test_core.py metaclass-boilerplate!skip
-tests/unit/modules/test_helm_template_module.py metaclass-boilerplate!skip
-tests/unit/modules/test_helm_template.py metaclass-boilerplate!skip
-tests/unit/modules/test_module_helm.py metaclass-boilerplate!skip
-tests/unit/action/test_remove_omit.py metaclass-boilerplate!skip
-plugins/modules/k8s_scale.py import-2.6!skip
-plugins/modules/k8s_scale.py import-2.7!skip
-plugins/modules/k8s_scale.py import-3.5!skip
-plugins/modules/helm_template.py import-2.6!skip
-plugins/modules/helm_template.py import-2.7!skip
-plugins/modules/helm_template.py import-3.5!skip
-plugins/modules/k8s_exec.py import-2.6!skip
-plugins/modules/k8s_exec.py import-2.7!skip
-plugins/modules/k8s_exec.py import-3.5!skip
-plugins/modules/helm.py import-2.6!skip
-plugins/modules/helm.py import-2.7!skip
-plugins/modules/helm.py import-3.5!skip
-plugins/modules/helm_plugin_info.py import-2.6!skip
-plugins/modules/helm_plugin_info.py import-2.7!skip
-plugins/modules/helm_plugin_info.py import-3.5!skip
-plugins/modules/helm_info.py import-2.6!skip
-plugins/modules/helm_info.py import-2.7!skip
-plugins/modules/helm_info.py import-3.5!skip
-plugins/modules/helm_repository.py import-2.6!skip
-plugins/modules/helm_repository.py import-2.7!skip
-plugins/modules/helm_repository.py import-3.5!skip
-plugins/modules/k8s_rollback.py import-2.6!skip
-plugins/modules/k8s_rollback.py import-2.7!skip
-plugins/modules/k8s_rollback.py import-3.5!skip
-plugins/modules/k8s_log.py import-2.6!skip
-plugins/modules/k8s_log.py import-2.7!skip
-plugins/modules/k8s_log.py import-3.5!skip
-plugins/modules/k8s_drain.py import-2.6!skip
-plugins/modules/k8s_drain.py import-2.7!skip
-plugins/modules/k8s_drain.py import-3.5!skip
-plugins/modules/helm_plugin.py import-2.6!skip
-plugins/modules/helm_plugin.py import-2.7!skip
-plugins/modules/helm_plugin.py import-3.5!skip
-plugins/modules/k8s_taint.py import-2.6!skip
-plugins/modules/k8s_taint.py import-2.7!skip
-plugins/modules/k8s_taint.py import-3.5!skip
-plugins/modules/k8s.py import-2.6!skip
-plugins/modules/k8s.py import-2.7!skip
-plugins/modules/k8s.py import-3.5!skip
-plugins/modules/k8s_service.py import-2.6!skip
-plugins/modules/k8s_service.py import-2.7!skip
-plugins/modules/k8s_service.py import-3.5!skip
-plugins/modules/k8s_cluster_info.py import-2.6!skip
-plugins/modules/k8s_cluster_info.py import-2.7!skip
-plugins/modules/k8s_cluster_info.py import-3.5!skip
-plugins/modules/k8s_info.py import-2.6!skip
-plugins/modules/k8s_info.py import-2.7!skip
-plugins/modules/k8s_info.py import-3.5!skip
-plugins/modules/k8s_cp.py import-2.6!skip
-plugins/modules/k8s_cp.py import-2.7!skip
-plugins/modules/k8s_cp.py import-3.5!skip
-plugins/modules/__init__.py import-2.6!skip
-plugins/modules/__init__.py import-2.7!skip
-plugins/modules/__init__.py import-3.5!skip
-plugins/modules/k8s_json_patch.py import-2.6!skip
-plugins/modules/k8s_json_patch.py import-2.7!skip
-plugins/modules/k8s_json_patch.py import-3.5!skip
-plugins/module_utils/helm.py import-2.6!skip
-plugins/module_utils/helm.py import-2.7!skip
-plugins/module_utils/helm.py import-3.5!skip
-plugins/module_utils/apply.py import-2.6!skip
-plugins/module_utils/apply.py import-2.7!skip
-plugins/module_utils/apply.py import-3.5!skip
-plugins/module_utils/hashes.py import-2.6!skip
-plugins/module_utils/hashes.py import-2.7!skip
-plugins/module_utils/hashes.py import-3.5!skip
-plugins/module_utils/helm_args_common.py import-2.6!skip
-plugins/module_utils/helm_args_common.py import-2.7!skip
-plugins/module_utils/helm_args_common.py import-3.5!skip
-plugins/module_utils/version.py import-2.6!skip
-plugins/module_utils/version.py import-2.7!skip
-plugins/module_utils/version.py import-3.5!skip
-plugins/module_utils/_version.py import-2.6!skip
-plugins/module_utils/_version.py import-2.7!skip
-plugins/module_utils/_version.py import-3.5!skip
-plugins/module_utils/copy.py import-2.6!skip
-plugins/module_utils/copy.py import-2.7!skip
-plugins/module_utils/copy.py import-3.5!skip
-plugins/module_utils/args_common.py import-2.6!skip
-plugins/module_utils/args_common.py import-2.7!skip
-plugins/module_utils/args_common.py import-3.5!skip
-plugins/module_utils/__init__.py import-2.6!skip
-plugins/module_utils/__init__.py import-2.7!skip
-plugins/module_utils/__init__.py import-3.5!skip
-plugins/module_utils/selector.py import-2.6!skip
-plugins/module_utils/selector.py import-2.7!skip
-plugins/module_utils/selector.py import-3.5!skip
-plugins/module_utils/k8sdynamicclient.py import-2.6!skip
-plugins/module_utils/k8sdynamicclient.py import-2.7!skip
-plugins/module_utils/k8sdynamicclient.py import-3.5!skip
-plugins/module_utils/common.py import-2.6!skip
-plugins/module_utils/common.py import-2.7!skip
-plugins/module_utils/common.py import-3.5!skip
-plugins/module_utils/ansiblemodule.py import-2.6!skip
-plugins/module_utils/ansiblemodule.py import-2.7!skip
-plugins/module_utils/ansiblemodule.py import-3.5!skip
-plugins/module_utils/exceptions.py import-2.6!skip
-plugins/module_utils/exceptions.py import-2.7!skip
-plugins/module_utils/exceptions.py import-3.5!skip
-plugins/module_utils/client/resource.py import-2.6!skip
-plugins/module_utils/client/resource.py import-2.7!skip
-plugins/module_utils/client/resource.py import-3.5!skip
-plugins/module_utils/client/discovery.py import-2.6!skip
-plugins/module_utils/client/discovery.py import-2.7!skip
-plugins/module_utils/client/discovery.py import-3.5!skip
-plugins/module_utils/k8s/resource.py import-2.6!skip
-plugins/module_utils/k8s/resource.py import-2.7!skip
-plugins/module_utils/k8s/resource.py import-3.5!skip
-plugins/module_utils/k8s/core.py import-2.6!skip
-plugins/module_utils/k8s/core.py import-2.7!skip
-plugins/module_utils/k8s/core.py import-3.5!skip
-plugins/module_utils/k8s/waiter.py import-2.6!skip
-plugins/module_utils/k8s/waiter.py import-2.7!skip
-plugins/module_utils/k8s/waiter.py import-3.5!skip
-plugins/module_utils/k8s/client.py import-2.6!skip
-plugins/module_utils/k8s/client.py import-2.7!skip
-plugins/module_utils/k8s/client.py import-3.5!skip
-plugins/module_utils/k8s/runner.py import-2.6!skip
-plugins/module_utils/k8s/runner.py import-2.7!skip
-plugins/module_utils/k8s/runner.py import-3.5!skip
-plugins/module_utils/k8s/service.py import-2.6!skip
-plugins/module_utils/k8s/service.py import-2.7!skip
-plugins/module_utils/k8s/service.py import-3.5!skip
-plugins/module_utils/k8s/exceptions.py import-2.6!skip
-plugins/module_utils/k8s/exceptions.py import-2.7!skip
-plugins/module_utils/k8s/exceptions.py import-3.5!skip
-plugins/doc_fragments/k8s_name_options.py compile-2.6!skip
-plugins/doc_fragments/k8s_name_options.py compile-2.7!skip
-plugins/doc_fragments/k8s_name_options.py compile-3.5!skip
-plugins/doc_fragments/k8s_auth_options.py compile-2.6!skip
-plugins/doc_fragments/k8s_auth_options.py compile-2.7!skip
-plugins/doc_fragments/k8s_auth_options.py compile-3.5!skip
-plugins/doc_fragments/helm_common_options.py compile-2.6!skip
-plugins/doc_fragments/helm_common_options.py compile-2.7!skip
-plugins/doc_fragments/helm_common_options.py compile-3.5!skip
-plugins/doc_fragments/k8s_state_options.py compile-2.6!skip
-plugins/doc_fragments/k8s_state_options.py compile-2.7!skip
-plugins/doc_fragments/k8s_state_options.py compile-3.5!skip
-plugins/doc_fragments/k8s_wait_options.py compile-2.6!skip
-plugins/doc_fragments/k8s_wait_options.py compile-2.7!skip
-plugins/doc_fragments/k8s_wait_options.py compile-3.5!skip
-plugins/doc_fragments/k8s_scale_options.py compile-2.6!skip
-plugins/doc_fragments/k8s_scale_options.py compile-2.7!skip
-plugins/doc_fragments/k8s_scale_options.py compile-3.5!skip
-plugins/doc_fragments/k8s_delete_options.py compile-2.6!skip
-plugins/doc_fragments/k8s_delete_options.py compile-2.7!skip
-plugins/doc_fragments/k8s_delete_options.py compile-3.5!skip
-plugins/doc_fragments/__init__.py compile-2.6!skip
-plugins/doc_fragments/__init__.py compile-2.7!skip
-plugins/doc_fragments/__init__.py compile-3.5!skip
-plugins/doc_fragments/k8s_resource_options.py compile-2.6!skip
-plugins/doc_fragments/k8s_resource_options.py compile-2.7!skip
-plugins/doc_fragments/k8s_resource_options.py compile-3.5!skip
-plugins/module_utils/helm.py compile-2.6!skip
-plugins/module_utils/helm.py compile-2.7!skip
-plugins/module_utils/helm.py compile-3.5!skip
-plugins/module_utils/apply.py compile-2.6!skip
-plugins/module_utils/apply.py compile-2.7!skip
-plugins/module_utils/apply.py compile-3.5!skip
-plugins/module_utils/hashes.py compile-2.6!skip
-plugins/module_utils/hashes.py compile-2.7!skip
-plugins/module_utils/hashes.py compile-3.5!skip
-plugins/module_utils/helm_args_common.py compile-2.6!skip
-plugins/module_utils/helm_args_common.py compile-2.7!skip
-plugins/module_utils/helm_args_common.py compile-3.5!skip
-plugins/module_utils/version.py compile-2.6!skip
-plugins/module_utils/version.py compile-2.7!skip
-plugins/module_utils/version.py compile-3.5!skip
-plugins/module_utils/_version.py compile-2.6!skip
-plugins/module_utils/_version.py compile-2.7!skip
-plugins/module_utils/_version.py compile-3.5!skip
-plugins/module_utils/copy.py compile-2.6!skip
-plugins/module_utils/copy.py compile-2.7!skip
-plugins/module_utils/copy.py compile-3.5!skip
-plugins/module_utils/args_common.py compile-2.6!skip
-plugins/module_utils/args_common.py compile-2.7!skip
-plugins/module_utils/args_common.py compile-3.5!skip
-plugins/module_utils/__init__.py compile-2.6!skip
-plugins/module_utils/__init__.py compile-2.7!skip
-plugins/module_utils/__init__.py compile-3.5!skip
-plugins/module_utils/selector.py compile-2.6!skip
-plugins/module_utils/selector.py compile-2.7!skip
-plugins/module_utils/selector.py compile-3.5!skip
-plugins/module_utils/k8sdynamicclient.py compile-2.6!skip
-plugins/module_utils/k8sdynamicclient.py compile-2.7!skip
-plugins/module_utils/k8sdynamicclient.py compile-3.5!skip
-plugins/module_utils/common.py compile-2.6!skip
-plugins/module_utils/common.py compile-2.7!skip
-plugins/module_utils/common.py compile-3.5!skip
-plugins/module_utils/ansiblemodule.py compile-2.6!skip
-plugins/module_utils/ansiblemodule.py compile-2.7!skip
-plugins/module_utils/ansiblemodule.py compile-3.5!skip
-plugins/module_utils/exceptions.py compile-2.6!skip
-plugins/module_utils/exceptions.py compile-2.7!skip
-plugins/module_utils/exceptions.py compile-3.5!skip
-plugins/module_utils/client/resource.py compile-2.6!skip
-plugins/module_utils/client/resource.py compile-2.7!skip
-plugins/module_utils/client/resource.py compile-3.5!skip
-plugins/module_utils/client/discovery.py compile-2.6!skip
-plugins/module_utils/client/discovery.py compile-2.7!skip
-plugins/module_utils/client/discovery.py compile-3.5!skip
-plugins/module_utils/k8s/resource.py compile-2.6!skip
-plugins/module_utils/k8s/resource.py compile-2.7!skip
-plugins/module_utils/k8s/resource.py compile-3.5!skip
-plugins/module_utils/k8s/core.py compile-2.6!skip
-plugins/module_utils/k8s/core.py compile-2.7!skip
-plugins/module_utils/k8s/core.py compile-3.5!skip
-plugins/module_utils/k8s/waiter.py compile-2.6!skip
-plugins/module_utils/k8s/waiter.py compile-2.7!skip
-plugins/module_utils/k8s/waiter.py compile-3.5!skip
-plugins/module_utils/k8s/client.py compile-2.6!skip
-plugins/module_utils/k8s/client.py compile-2.7!skip
-plugins/module_utils/k8s/client.py compile-3.5!skip
-plugins/module_utils/k8s/runner.py compile-2.6!skip
-plugins/module_utils/k8s/runner.py compile-2.7!skip
-plugins/module_utils/k8s/runner.py compile-3.5!skip
-plugins/module_utils/k8s/service.py compile-2.6!skip
-plugins/module_utils/k8s/service.py compile-2.7!skip
-plugins/module_utils/k8s/service.py compile-3.5!skip
-plugins/module_utils/k8s/exceptions.py compile-2.6!skip
-plugins/module_utils/k8s/exceptions.py compile-2.7!skip
-plugins/module_utils/k8s/exceptions.py compile-3.5!skip
-plugins/connection/kubectl.py compile-2.6!skip
-plugins/connection/kubectl.py compile-2.7!skip
-plugins/connection/kubectl.py compile-3.5!skip
-plugins/inventory/k8s.py compile-2.6!skip
-plugins/inventory/k8s.py compile-2.7!skip
-plugins/inventory/k8s.py compile-3.5!skip
-plugins/lookup/k8s.py compile-2.6!skip
-plugins/lookup/k8s.py compile-2.7!skip
-plugins/lookup/k8s.py compile-3.5!skip
-plugins/lookup/kustomize.py compile-2.6!skip
-plugins/lookup/kustomize.py compile-2.7!skip
-plugins/lookup/kustomize.py compile-3.5!skip
-plugins/modules/k8s_scale.py compile-2.6!skip
-plugins/modules/k8s_scale.py compile-2.7!skip
-plugins/modules/k8s_scale.py compile-3.5!skip
-plugins/modules/helm_template.py compile-2.6!skip
-plugins/modules/helm_template.py compile-2.7!skip
-plugins/modules/helm_template.py compile-3.5!skip
-plugins/modules/k8s_exec.py compile-2.6!skip
-plugins/modules/k8s_exec.py compile-2.7!skip
-plugins/modules/k8s_exec.py compile-3.5!skip
-plugins/modules/helm.py compile-2.6!skip
-plugins/modules/helm.py compile-2.7!skip
-plugins/modules/helm.py compile-3.5!skip
-plugins/modules/helm_plugin_info.py compile-2.6!skip
-plugins/modules/helm_plugin_info.py compile-2.7!skip
-plugins/modules/helm_plugin_info.py compile-3.5!skip
-plugins/modules/helm_info.py compile-2.6!skip
-plugins/modules/helm_info.py compile-2.7!skip
-plugins/modules/helm_info.py compile-3.5!skip
-plugins/modules/helm_repository.py compile-2.6!skip
-plugins/modules/helm_repository.py compile-2.7!skip
-plugins/modules/helm_repository.py compile-3.5!skip
-plugins/modules/k8s_rollback.py compile-2.6!skip
-plugins/modules/k8s_rollback.py compile-2.7!skip
-plugins/modules/k8s_rollback.py compile-3.5!skip
-plugins/modules/k8s_log.py compile-2.6!skip
-plugins/modules/k8s_log.py compile-2.7!skip
-plugins/modules/k8s_log.py compile-3.5!skip
-plugins/modules/k8s_drain.py compile-2.6!skip
-plugins/modules/k8s_drain.py compile-2.7!skip
-plugins/modules/k8s_drain.py compile-3.5!skip
-plugins/modules/helm_plugin.py compile-2.6!skip
-plugins/modules/helm_plugin.py compile-2.7!skip
-plugins/modules/helm_plugin.py compile-3.5!skip
-plugins/modules/k8s_taint.py compile-2.6!skip
-plugins/modules/k8s_taint.py compile-2.7!skip
-plugins/modules/k8s_taint.py compile-3.5!skip
-plugins/modules/k8s.py compile-2.6!skip
-plugins/modules/k8s.py compile-2.7!skip
-plugins/modules/k8s.py compile-3.5!skip
-plugins/modules/k8s_service.py compile-2.6!skip
-plugins/modules/k8s_service.py compile-2.7!skip
-plugins/modules/k8s_service.py compile-3.5!skip
-plugins/modules/k8s_cluster_info.py compile-2.6!skip
-plugins/modules/k8s_cluster_info.py compile-2.7!skip
-plugins/modules/k8s_cluster_info.py compile-3.5!skip
-plugins/modules/k8s_info.py compile-2.6!skip
-plugins/modules/k8s_info.py compile-2.7!skip
-plugins/modules/k8s_info.py compile-3.5!skip
-plugins/modules/k8s_cp.py compile-2.6!skip
-plugins/modules/k8s_cp.py compile-2.7!skip
-plugins/modules/k8s_cp.py compile-3.5!skip
-plugins/modules/__init__.py compile-2.6!skip
-plugins/modules/__init__.py compile-2.7!skip
-plugins/modules/__init__.py compile-3.5!skip
-plugins/modules/k8s_json_patch.py compile-2.6!skip
-plugins/modules/k8s_json_patch.py compile-2.7!skip
-plugins/modules/k8s_json_patch.py compile-3.5!skip
-plugins/action/k8s_info.py compile-2.6!skip
-plugins/action/k8s_info.py compile-2.7!skip
-plugins/action/k8s_info.py compile-3.5!skip
-plugins/filter/k8s.py compile-2.6!skip
-plugins/filter/k8s.py compile-2.7!skip
-plugins/filter/k8s.py compile-3.5!skip
-tests/unit/conftest.py compile-2.6!skip
-tests/unit/conftest.py compile-2.7!skip
-tests/unit/conftest.py compile-3.5!skip
-tests/unit/utils/ansible_module_mock.py compile-2.6!skip
-tests/unit/utils/ansible_module_mock.py compile-2.7!skip
-tests/unit/utils/ansible_module_mock.py compile-3.5!skip
-tests/unit/module_utils/test_helm.py compile-2.6!skip
-tests/unit/module_utils/test_helm.py compile-2.7!skip
-tests/unit/module_utils/test_helm.py compile-3.5!skip
-tests/unit/module_utils/test_marshal.py compile-2.6!skip
-tests/unit/module_utils/test_marshal.py compile-2.7!skip
-tests/unit/module_utils/test_marshal.py compile-3.5!skip
-tests/unit/module_utils/test_discoverer.py compile-2.6!skip
-tests/unit/module_utils/test_discoverer.py compile-2.7!skip
-tests/unit/module_utils/test_discoverer.py compile-3.5!skip
-tests/unit/module_utils/test_hashes.py compile-2.6!skip
-tests/unit/module_utils/test_hashes.py compile-2.7!skip
-tests/unit/module_utils/test_hashes.py compile-3.5!skip
-tests/unit/module_utils/test_resource.py compile-2.6!skip
-tests/unit/module_utils/test_resource.py compile-2.7!skip
-tests/unit/module_utils/test_resource.py compile-3.5!skip
-tests/unit/module_utils/test_service.py compile-2.6!skip
-tests/unit/module_utils/test_service.py compile-2.7!skip
-tests/unit/module_utils/test_service.py compile-3.5!skip
-tests/unit/module_utils/test_waiter.py compile-2.6!skip
-tests/unit/module_utils/test_waiter.py compile-2.7!skip
-tests/unit/module_utils/test_waiter.py compile-3.5!skip
-tests/unit/module_utils/test_common.py compile-2.6!skip
-tests/unit/module_utils/test_common.py compile-2.7!skip
-tests/unit/module_utils/test_common.py compile-3.5!skip
-tests/unit/module_utils/test_selector.py compile-2.6!skip
-tests/unit/module_utils/test_selector.py compile-2.7!skip
-tests/unit/module_utils/test_selector.py compile-3.5!skip
-tests/unit/module_utils/test_apply.py compile-2.6!skip
-tests/unit/module_utils/test_apply.py compile-2.7!skip
-tests/unit/module_utils/test_apply.py compile-3.5!skip
-tests/unit/module_utils/test_runner.py compile-2.6!skip
-tests/unit/module_utils/test_runner.py compile-2.7!skip
-tests/unit/module_utils/test_runner.py compile-3.5!skip
-tests/unit/module_utils/test_client.py compile-2.6!skip
-tests/unit/module_utils/test_client.py compile-2.7!skip
-tests/unit/module_utils/test_client.py compile-3.5!skip
-tests/unit/module_utils/test_core.py compile-2.6!skip
-tests/unit/module_utils/test_core.py compile-2.7!skip
-tests/unit/module_utils/test_core.py compile-3.5!skip
-tests/unit/modules/test_helm_template_module.py compile-2.6!skip
-tests/unit/modules/test_helm_template_module.py compile-2.7!skip
-tests/unit/modules/test_helm_template_module.py compile-3.5!skip
-tests/unit/modules/test_helm_template.py compile-2.6!skip
-tests/unit/modules/test_helm_template.py compile-2.7!skip
-tests/unit/modules/test_helm_template.py compile-3.5!skip
-tests/unit/modules/test_module_helm.py compile-2.6!skip
-tests/unit/modules/test_module_helm.py compile-2.7!skip
-tests/unit/modules/test_module_helm.py compile-3.5!skip
-tests/unit/action/test_remove_omit.py compile-2.6!skip
-tests/unit/action/test_remove_omit.py compile-2.7!skip
-tests/unit/action/test_remove_omit.py compile-3.5!skip
-tests/integration/targets/k8s_copy/library/k8s_create_file.py compile-2.6!skip
-tests/integration/targets/k8s_copy/library/k8s_create_file.py compile-2.7!skip
-tests/integration/targets/k8s_copy/library/k8s_create_file.py compile-3.5!skip
-tests/integration/targets/k8s_copy/library/kubectl_file_compare.py compile-2.6!skip
-tests/integration/targets/k8s_copy/library/kubectl_file_compare.py compile-2.7!skip
-tests/integration/targets/k8s_copy/library/kubectl_file_compare.py compile-3.5!skip
-tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py compile-2.6!skip
-tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py compile-2.7!skip
-tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py compile-3.5!skip
-tests/integration/targets/helm/library/helm_test_version.py compile-2.6!skip
-tests/integration/targets/helm/library/helm_test_version.py compile-2.7!skip
-tests/integration/targets/helm/library/helm_test_version.py compile-3.5!skip
-plugins/modules/k8s_scale.py pylint!skip
-plugins/modules/helm_template.py pylint!skip
-plugins/modules/k8s_exec.py pylint!skip
-plugins/modules/helm.py pylint!skip
-plugins/modules/helm_plugin_info.py pylint!skip
-plugins/modules/helm_info.py pylint!skip
-plugins/modules/helm_repository.py pylint!skip
-plugins/modules/k8s_rollback.py pylint!skip
-plugins/modules/k8s_log.py pylint!skip
-plugins/modules/k8s_drain.py pylint!skip
-plugins/modules/helm_plugin.py pylint!skip
-plugins/modules/k8s_taint.py pylint!skip
-plugins/modules/k8s.py pylint!skip
-plugins/modules/k8s_service.py pylint!skip
-plugins/modules/k8s_cluster_info.py pylint!skip
-plugins/modules/k8s_info.py pylint!skip
-plugins/modules/k8s_cp.py pylint!skip
-plugins/modules/__init__.py pylint!skip
-plugins/modules/k8s_json_patch.py pylint!skip
-plugins/module_utils/helm.py pylint!skip
-plugins/module_utils/apply.py pylint!skip
-plugins/module_utils/hashes.py pylint!skip
-plugins/module_utils/helm_args_common.py pylint!skip
-plugins/module_utils/version.py pylint!skip
-plugins/module_utils/_version.py pylint!skip
-plugins/module_utils/copy.py pylint!skip
-plugins/module_utils/args_common.py pylint!skip
-plugins/module_utils/__init__.py pylint!skip
-plugins/module_utils/selector.py pylint!skip
-plugins/module_utils/k8sdynamicclient.py pylint!skip
-plugins/module_utils/common.py pylint!skip
-plugins/module_utils/ansiblemodule.py pylint!skip
-plugins/module_utils/exceptions.py pylint!skip
-plugins/module_utils/client/resource.py pylint!skip
-plugins/module_utils/client/discovery.py pylint!skip
-plugins/module_utils/k8s/resource.py pylint!skip
-plugins/module_utils/k8s/core.py pylint!skip
-plugins/module_utils/k8s/waiter.py pylint!skip
-plugins/module_utils/k8s/client.py pylint!skip
-plugins/module_utils/k8s/runner.py pylint!skip
-plugins/module_utils/k8s/service.py pylint!skip
-plugins/module_utils/k8s/exceptions.py pylint!skip
-tests/integration/targets/k8s_copy/library/k8s_create_file.py pylint!skip
-tests/integration/targets/k8s_copy/library/kubectl_file_compare.py pylint!skip
-tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py pylint!skip
-tests/integration/targets/helm/library/helm_test_version.py pylint!skip
-tests/unit/conftest.py pylint!skip
-tests/unit/utils/ansible_module_mock.py pylint!skip
-tests/unit/module_utils/test_helm.py pylint!skip
-tests/unit/module_utils/test_marshal.py pylint!skip
-tests/unit/module_utils/test_discoverer.py pylint!skip
-tests/unit/module_utils/test_hashes.py pylint!skip
-tests/unit/module_utils/test_resource.py pylint!skip
-tests/unit/module_utils/test_service.py pylint!skip
-tests/unit/module_utils/test_waiter.py pylint!skip
-tests/unit/module_utils/test_common.py pylint!skip
-tests/unit/module_utils/test_selector.py pylint!skip
-tests/unit/module_utils/test_apply.py pylint!skip
-tests/unit/module_utils/test_runner.py pylint!skip
-tests/unit/module_utils/test_client.py pylint!skip
-tests/unit/module_utils/test_core.py pylint!skip
-tests/unit/modules/test_helm_template_module.py pylint!skip
-tests/unit/modules/test_helm_template.py pylint!skip
-tests/unit/modules/test_module_helm.py pylint!skip
-tests/unit/action/test_remove_omit.py pylint!skip
-plugins/modules/k8s.py validate-modules!skip
-plugins/modules/k8s_cp.py validate-modules!skip
-plugins/modules/k8s_drain.py validate-modules!skip
-plugins/modules/k8s_exec.py validate-modules!skip
-plugins/modules/k8s_info.py validate-modules!skip
-plugins/modules/k8s_json_patch.py validate-modules!skip
-plugins/modules/k8s_log.py validate-modules!skip
-plugins/modules/k8s_rollback.py validate-modules!skip
-plugins/modules/k8s_scale.py validate-modules!skip
-plugins/modules/k8s_service.py validate-modules!skip
-plugins/modules/k8s_taint.py validate-modules!skip
diff --git a/ansible_collections/kubernetes/core/tests/unit/action/test_remove_omit.py b/ansible_collections/kubernetes/core/tests/unit/action/test_remove_omit.py
index 3432c19f9..e8206a440 100644
--- a/ansible_collections/kubernetes/core/tests/unit/action/test_remove_omit.py
+++ b/ansible_collections/kubernetes/core/tests/unit/action/test_remove_omit.py
@@ -7,6 +7,7 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
from datetime import datetime
+
from ansible_collections.kubernetes.core.plugins.action.k8s_info import RemoveOmit
diff --git a/ansible_collections/kubernetes/core/tests/unit/conftest.py b/ansible_collections/kubernetes/core/tests/unit/conftest.py
index 20615adb0..63eca8b57 100644
--- a/ansible_collections/kubernetes/core/tests/unit/conftest.py
+++ b/ansible_collections/kubernetes/core/tests/unit/conftest.py
@@ -6,12 +6,11 @@ import json
import sys
from io import BytesIO
-import pytest
-
import ansible.module_utils.basic
-from ansible.module_utils.six import string_types
+import pytest
from ansible.module_utils._text import to_bytes
from ansible.module_utils.common._collections_compat import MutableMapping
+from ansible.module_utils.six import string_types
@pytest.fixture
diff --git a/ansible_collections/kubernetes/core/tests/unit/module_utils/test_apply.py b/ansible_collections/kubernetes/core/tests/unit/module_utils/test_apply.py
index 07986007b..3dd116108 100644
--- a/ansible_collections/kubernetes/core/tests/unit/module_utils/test_apply.py
+++ b/ansible_collections/kubernetes/core/tests/unit/module_utils/test_apply.py
@@ -18,8 +18,8 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
from ansible_collections.kubernetes.core.plugins.module_utils.apply import (
- merge,
apply_patch,
+ merge,
)
tests = [
diff --git a/ansible_collections/kubernetes/core/tests/unit/module_utils/test_client.py b/ansible_collections/kubernetes/core/tests/unit/module_utils/test_client.py
index bba03589e..d3fec2299 100644
--- a/ansible_collections/kubernetes/core/tests/unit/module_utils/test_client.py
+++ b/ansible_collections/kubernetes/core/tests/unit/module_utils/test_client.py
@@ -1,14 +1,14 @@
-import os
import base64
+import os
import tempfile
-import yaml
-import mock
-from mock import MagicMock
+import mock
+import yaml
from ansible_collections.kubernetes.core.plugins.module_utils.k8s.client import (
_create_auth_spec,
_create_configuration,
)
+from mock import MagicMock
TEST_HOST = "test-host"
TEST_SSL_HOST = "https://test-host"
diff --git a/ansible_collections/kubernetes/core/tests/unit/module_utils/test_core.py b/ansible_collections/kubernetes/core/tests/unit/module_utils/test_core.py
index 189f1f950..a49ea12cc 100644
--- a/ansible_collections/kubernetes/core/tests/unit/module_utils/test_core.py
+++ b/ansible_collections/kubernetes/core/tests/unit/module_utils/test_core.py
@@ -6,12 +6,11 @@ import json
import kubernetes
import pytest
-
from ansible_collections.kubernetes.core.plugins.module_utils.k8s.core import (
AnsibleK8SModule,
)
-MINIMAL_K8S_VERSION = "12.0.0"
+MINIMAL_K8S_VERSION = "24.2.0"
UNSUPPORTED_K8S_VERSION = "11.0.0"
@@ -50,9 +49,9 @@ def test_warn_on_k8s_version(monkeypatch, stdin, capfd):
dependencies = [
- ["18.20.0", "12.0.1", False],
- ["18.20.0", "18.20.0", True],
- ["12.0.1", "18.20.0", True],
+ ["28.20.0", "24.2.1", False],
+ ["28.20.0", "28.20.0", True],
+ ["24.2.1", "28.20.0", True],
]
@@ -68,7 +67,7 @@ def test_has_at_least(monkeypatch, stdin, desired, actual, result, capfd):
dependencies = [
- ["kubernetes", "18.20.0", "(kubernetes>=18.20.0)"],
+ ["kubernetes", "28.20.0", "(kubernetes>=28.20.0)"],
["foobar", "1.0.0", "(foobar>=1.0.0)"],
["foobar", None, "(foobar)"],
]
@@ -80,7 +79,7 @@ dependencies = [
def test_requires_fails_with_message(
monkeypatch, stdin, dependency, version, msg, capfd
):
- monkeypatch.setattr(kubernetes, "__version__", "12.0.0")
+ monkeypatch.setattr(kubernetes, "__version__", "24.2.0")
module = AnsibleK8SModule(argument_spec={})
with pytest.raises(SystemExit):
module.requires(dependency, version)
diff --git a/ansible_collections/kubernetes/core/tests/unit/module_utils/test_discoverer.py b/ansible_collections/kubernetes/core/tests/unit/module_utils/test_discoverer.py
index b23a7a9aa..618b0cb08 100644
--- a/ansible_collections/kubernetes/core/tests/unit/module_utils/test_discoverer.py
+++ b/ansible_collections/kubernetes/core/tests/unit/module_utils/test_discoverer.py
@@ -14,19 +14,17 @@
import pytest
-
-from kubernetes.client import ApiClient
-from kubernetes.dynamic import Resource
-
-from ansible_collections.kubernetes.core.plugins.module_utils.k8sdynamicclient import (
- K8SDynamicClient,
-)
from ansible_collections.kubernetes.core.plugins.module_utils.client.discovery import (
LazyDiscoverer,
)
from ansible_collections.kubernetes.core.plugins.module_utils.client.resource import (
ResourceList,
)
+from ansible_collections.kubernetes.core.plugins.module_utils.k8sdynamicclient import (
+ K8SDynamicClient,
+)
+from kubernetes.client import ApiClient
+from kubernetes.dynamic import Resource
@pytest.fixture(scope="module")
diff --git a/ansible_collections/kubernetes/core/tests/unit/module_utils/test_helm.py b/ansible_collections/kubernetes/core/tests/unit/module_utils/test_helm.py
index de2c1569d..5db0a017c 100644
--- a/ansible_collections/kubernetes/core/tests/unit/module_utils/test_helm.py
+++ b/ansible_collections/kubernetes/core/tests/unit/module_utils/test_helm.py
@@ -7,22 +7,21 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
import os.path
-import yaml
+import random
+import string
import tempfile
-import pytest
-
+from unittest.mock import MagicMock
+import pytest
+import yaml
from ansible_collections.kubernetes.core.plugins.module_utils.helm import (
AnsibleHelmModule,
write_temp_kubeconfig,
)
-from unittest.mock import MagicMock
-import random
-import string
@pytest.fixture()
-def ansible_helm_module():
+def _ansible_helm_module():
module = MagicMock()
module.params = {
"api_key": None,
@@ -114,7 +113,6 @@ def test_write_temp_kubeconfig_with_kubeconfig():
def test_module_get_helm_binary_from_params():
-
helm_binary_path = MagicMock()
helm_sys_binary_path = MagicMock()
@@ -129,7 +127,6 @@ def test_module_get_helm_binary_from_params():
def test_module_get_helm_binary_from_system():
-
helm_sys_binary_path = MagicMock()
module = MagicMock()
module.params = {}
@@ -139,31 +136,29 @@ def test_module_get_helm_binary_from_system():
assert helm_module.get_helm_binary() == helm_sys_binary_path
-def test_module_get_helm_plugin_list(ansible_helm_module):
-
- ansible_helm_module.run_helm_command = MagicMock()
- ansible_helm_module.run_helm_command.return_value = (0, "output", "error")
+def test_module_get_helm_plugin_list(_ansible_helm_module):
+ _ansible_helm_module.run_helm_command = MagicMock()
+ _ansible_helm_module.run_helm_command.return_value = (0, "output", "error")
- rc, out, err, command = ansible_helm_module.get_helm_plugin_list()
+ rc, out, err, command = _ansible_helm_module.get_helm_plugin_list()
assert (rc, out, err) == (0, "output", "error")
assert command == "some/path/to/helm/executable plugin list"
- ansible_helm_module.get_helm_binary.assert_called_once()
- ansible_helm_module.run_helm_command.assert_called_once_with(
+ _ansible_helm_module.get_helm_binary.assert_called_once()
+ _ansible_helm_module.run_helm_command.assert_called_once_with(
"some/path/to/helm/executable plugin list"
)
-def test_module_get_helm_plugin_list_failure(ansible_helm_module):
-
- ansible_helm_module.run_helm_command = MagicMock()
- ansible_helm_module.run_helm_command.return_value = (-1, "output", "error")
+def test_module_get_helm_plugin_list_failure(_ansible_helm_module):
+ _ansible_helm_module.run_helm_command = MagicMock()
+ _ansible_helm_module.run_helm_command.return_value = (-1, "output", "error")
with pytest.raises(SystemExit):
- ansible_helm_module.get_helm_plugin_list()
+ _ansible_helm_module.get_helm_plugin_list()
- ansible_helm_module.fail_json.assert_called_once_with(
+ _ansible_helm_module.fail_json.assert_called_once_with(
msg="Failed to get Helm plugin info",
command="some/path/to/helm/executable plugin list",
stdout="output",
@@ -174,8 +169,7 @@ def test_module_get_helm_plugin_list_failure(ansible_helm_module):
@pytest.mark.parametrize("no_values", [True, False])
@pytest.mark.parametrize("get_all", [True, False])
-def test_module_get_values(ansible_helm_module, no_values, get_all):
-
+def test_module_get_values(_ansible_helm_module, no_values, get_all):
expected = {"test": "units"}
output = "---\ntest: units\n"
@@ -183,19 +177,19 @@ def test_module_get_values(ansible_helm_module, no_values, get_all):
expected = {}
output = "null"
- ansible_helm_module.run_helm_command = MagicMock()
- ansible_helm_module.run_helm_command.return_value = (0, output, "error")
+ _ansible_helm_module.run_helm_command = MagicMock()
+ _ansible_helm_module.run_helm_command.return_value = (0, output, "error")
release_name = "".join(
random.choice(string.ascii_letters + string.digits) for x in range(10)
)
- result = ansible_helm_module.get_values(release_name, get_all=get_all)
+ result = _ansible_helm_module.get_values(release_name, get_all=get_all)
- ansible_helm_module.get_helm_binary.assert_called_once()
+ _ansible_helm_module.get_helm_binary.assert_called_once()
command = f"some/path/to/helm/executable get values --output=yaml {release_name}"
if get_all:
command += " -a"
- ansible_helm_module.run_helm_command.assert_called_once_with(command)
+ _ansible_helm_module.run_helm_command.assert_called_once_with(command)
assert result == expected
@@ -210,21 +204,19 @@ def test_module_get_values(ansible_helm_module, no_values, get_all):
('Client: &version.Version{SemVer:"v3.12.3"', None),
],
)
-def test_module_get_helm_version(ansible_helm_module, output, expected):
-
- ansible_helm_module.run_command = MagicMock()
- ansible_helm_module.run_command.return_value = (0, output, "error")
+def test_module_get_helm_version(_ansible_helm_module, output, expected):
+ _ansible_helm_module.run_command = MagicMock()
+ _ansible_helm_module.run_command.return_value = (0, output, "error")
- result = ansible_helm_module.get_helm_version()
+ result = _ansible_helm_module.get_helm_version()
- ansible_helm_module.get_helm_binary.assert_called_once()
+ _ansible_helm_module.get_helm_binary.assert_called_once()
command = "some/path/to/helm/executable version"
- ansible_helm_module.run_command.assert_called_once_with(command)
+ _ansible_helm_module.run_command.assert_called_once_with(command)
assert result == expected
-def test_module_run_helm_command(ansible_helm_module):
-
+def test_module_run_helm_command(_ansible_helm_module):
error = "".join(
random.choice(string.ascii_letters + string.digits) for x in range(10)
)
@@ -232,27 +224,26 @@ def test_module_run_helm_command(ansible_helm_module):
random.choice(string.ascii_letters + string.digits) for x in range(10)
)
- ansible_helm_module.run_command.return_value = (0, output, error)
+ _ansible_helm_module.run_command.return_value = (0, output, error)
- ansible_helm_module._prepare_helm_environment = MagicMock()
+ _ansible_helm_module._prepare_helm_environment = MagicMock()
env_update = {x: random.choice(string.ascii_letters) for x in range(10)}
- ansible_helm_module._prepare_helm_environment.return_value = env_update
+ _ansible_helm_module._prepare_helm_environment.return_value = env_update
command = "".join(
random.choice(string.ascii_letters + string.digits) for x in range(10)
)
- rc, out, err = ansible_helm_module.run_helm_command(command)
+ rc, out, err = _ansible_helm_module.run_helm_command(command)
assert (rc, out, err) == (0, output, error)
- ansible_helm_module.run_command.assert_called_once_with(
+ _ansible_helm_module.run_command.assert_called_once_with(
command, environ_update=env_update
)
@pytest.mark.parametrize("fails_on_error", [True, False])
-def test_module_run_helm_command_failure(ansible_helm_module, fails_on_error):
-
+def test_module_run_helm_command_failure(_ansible_helm_module, fails_on_error):
error = "".join(
random.choice(string.ascii_letters + string.digits) for x in range(10)
)
@@ -260,9 +251,9 @@ def test_module_run_helm_command_failure(ansible_helm_module, fails_on_error):
random.choice(string.ascii_letters + string.digits) for x in range(10)
)
return_code = random.randint(1, 10)
- ansible_helm_module.run_command.return_value = (return_code, output, error)
+ _ansible_helm_module.run_command.return_value = (return_code, output, error)
- ansible_helm_module._prepare_environment = MagicMock()
+ _ansible_helm_module._prepare_environment = MagicMock()
command = "".join(
random.choice(string.ascii_letters + string.digits) for x in range(10)
@@ -270,10 +261,10 @@ def test_module_run_helm_command_failure(ansible_helm_module, fails_on_error):
if fails_on_error:
with pytest.raises(SystemExit):
- rc, out, err = ansible_helm_module.run_helm_command(
+ rc, out, err = _ansible_helm_module.run_helm_command(
command, fails_on_error=fails_on_error
)
- ansible_helm_module.fail_json.assert_called_with(
+ _ansible_helm_module.fail_json.assert_called_with(
msg="Failure when executing Helm command. Exited {0}.\nstdout: {1}\nstderr: {2}".format(
return_code, output, error
),
@@ -282,7 +273,7 @@ def test_module_run_helm_command_failure(ansible_helm_module, fails_on_error):
command=command,
)
else:
- rc, out, err = ansible_helm_module.run_helm_command(
+ rc, out, err = _ansible_helm_module.run_helm_command(
command, fails_on_error=fails_on_error
)
assert (rc, out, err) == (return_code, output, error)
@@ -311,7 +302,6 @@ def test_module_run_helm_command_failure(ansible_helm_module, fails_on_error):
],
)
def test_module_prepare_helm_environment(params, env_update, kubeconfig):
-
module = MagicMock()
module.params = params
@@ -355,7 +345,6 @@ def test_module_prepare_helm_environment(params, env_update, kubeconfig):
def test_module_prepare_helm_environment_with_validate_certs(
helm_version, is_env_var_set
):
-
module = MagicMock()
module.params = {"validate_certs": False}
@@ -387,7 +376,6 @@ def test_module_prepare_helm_environment_with_validate_certs(
],
)
def test_module_prepare_helm_environment_with_ca_cert(helm_version, is_env_var_set):
-
ca_cert = "".join(
random.choice(string.ascii_letters + string.digits) for i in range(50)
)
@@ -441,7 +429,6 @@ def test_module_prepare_helm_environment_with_ca_cert(helm_version, is_env_var_s
],
)
def test_module_get_helm_set_values_args(set_values, expected):
-
module = MagicMock()
module.params = {}
module.fail_json.side_effect = SystemExit(1)
diff --git a/ansible_collections/kubernetes/core/tests/unit/module_utils/test_runner.py b/ansible_collections/kubernetes/core/tests/unit/module_utils/test_runner.py
index 45c6f29aa..a0555c411 100644
--- a/ansible_collections/kubernetes/core/tests/unit/module_utils/test_runner.py
+++ b/ansible_collections/kubernetes/core/tests/unit/module_utils/test_runner.py
@@ -1,12 +1,11 @@
-import pytest
from copy import deepcopy
from unittest.mock import Mock
-from kubernetes.dynamic.resource import ResourceInstance
-
+import pytest
from ansible_collections.kubernetes.core.plugins.module_utils.k8s.runner import (
perform_action,
)
+from kubernetes.dynamic.resource import ResourceInstance
definition = {
"apiVersion": "v1",
diff --git a/ansible_collections/kubernetes/core/tests/unit/module_utils/test_service.py b/ansible_collections/kubernetes/core/tests/unit/module_utils/test_service.py
index a1822de61..980336176 100644
--- a/ansible_collections/kubernetes/core/tests/unit/module_utils/test_service.py
+++ b/ansible_collections/kubernetes/core/tests/unit/module_utils/test_service.py
@@ -1,14 +1,12 @@
from unittest.mock import Mock
import pytest
-from kubernetes.dynamic.resource import ResourceInstance, Resource
-
from ansible_collections.kubernetes.core.plugins.module_utils.k8s.service import (
K8sService,
diff_objects,
)
-
from kubernetes.dynamic.exceptions import NotFoundError
+from kubernetes.dynamic.resource import Resource, ResourceInstance
pod_definition = {
"apiVersion": "v1",
diff --git a/ansible_collections/kubernetes/core/tests/unit/module_utils/test_waiter.py b/ansible_collections/kubernetes/core/tests/unit/module_utils/test_waiter.py
index b5ce10a51..e63019ec7 100644
--- a/ansible_collections/kubernetes/core/tests/unit/module_utils/test_waiter.py
+++ b/ansible_collections/kubernetes/core/tests/unit/module_utils/test_waiter.py
@@ -5,20 +5,19 @@ from unittest.mock import Mock
import pytest
import yaml
-from kubernetes.dynamic.resource import ResourceInstance
-from kubernetes.dynamic.exceptions import NotFoundError
-
from ansible_collections.kubernetes.core.plugins.module_utils.k8s.waiter import (
+ DummyWaiter,
+ Waiter,
clock,
custom_condition,
deployment_ready,
- DummyWaiter,
exists,
get_waiter,
pod_ready,
resource_absent,
- Waiter,
)
+from kubernetes.dynamic.exceptions import NotFoundError
+from kubernetes.dynamic.resource import ResourceInstance
def resources(filepath):
diff --git a/ansible_collections/kubernetes/core/tests/unit/modules/test_helm_template_module.py b/ansible_collections/kubernetes/core/tests/unit/modules/test_helm_template_module.py
index 9fd98e4c8..0ff6ad016 100644
--- a/ansible_collections/kubernetes/core/tests/unit/modules/test_helm_template_module.py
+++ b/ansible_collections/kubernetes/core/tests/unit/modules/test_helm_template_module.py
@@ -7,14 +7,13 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
import unittest
-
from unittest.mock import patch
from ansible.module_utils import basic
from ansible_collections.kubernetes.core.plugins.modules import helm_template
from ansible_collections.kubernetes.core.tests.unit.utils.ansible_module_mock import (
- AnsibleFailJson,
AnsibleExitJson,
+ AnsibleFailJson,
exit_json,
fail_json,
get_bin_path,
diff --git a/ansible_collections/kubernetes/core/tests/unit/modules/test_module_helm.py b/ansible_collections/kubernetes/core/tests/unit/modules/test_module_helm.py
index ca61cf3ef..199bd828f 100644
--- a/ansible_collections/kubernetes/core/tests/unit/modules/test_module_helm.py
+++ b/ansible_collections/kubernetes/core/tests/unit/modules/test_module_helm.py
@@ -7,14 +7,13 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
import unittest
-
-from unittest.mock import MagicMock, patch, call
+from unittest.mock import MagicMock, call, patch
from ansible.module_utils import basic
from ansible_collections.kubernetes.core.plugins.modules import helm
from ansible_collections.kubernetes.core.tests.unit.utils.ansible_module_mock import (
- AnsibleFailJson,
AnsibleExitJson,
+ AnsibleFailJson,
exit_json,
fail_json,
get_bin_path,
@@ -87,12 +86,12 @@ class TestDependencyUpdateWithoutChartRepoUrlOption(unittest.TestCase):
helm.main()
helm.run_dep_update.assert_not_called()
mock_run_command.assert_called_once_with(
- "/usr/bin/helm upgrade -i --reset-values test /tmp/path",
+ "/usr/bin/helm upgrade -i --reset-values test '/tmp/path'",
environ_update={"HELM_NAMESPACE": "test"},
)
assert (
result.exception.args[0]["command"]
- == "/usr/bin/helm upgrade -i --reset-values test /tmp/path"
+ == "/usr/bin/helm upgrade -i --reset-values test '/tmp/path'"
)
def test_dependency_update_option_false(self):
@@ -117,12 +116,12 @@ class TestDependencyUpdateWithoutChartRepoUrlOption(unittest.TestCase):
helm.main()
helm.run_dep_update.assert_not_called()
mock_run_command.assert_called_once_with(
- "/usr/bin/helm upgrade -i --reset-values test /tmp/path",
+ "/usr/bin/helm upgrade -i --reset-values test '/tmp/path'",
environ_update={"HELM_NAMESPACE": "test"},
)
assert (
result.exception.args[0]["command"]
- == "/usr/bin/helm upgrade -i --reset-values test /tmp/path"
+ == "/usr/bin/helm upgrade -i --reset-values test '/tmp/path'"
)
def test_dependency_update_option_true(self):
@@ -146,14 +145,14 @@ class TestDependencyUpdateWithoutChartRepoUrlOption(unittest.TestCase):
mock_run_command.assert_has_calls(
[
call(
- "/usr/bin/helm upgrade -i --reset-values test /tmp/path",
+ "/usr/bin/helm upgrade -i --reset-values test '/tmp/path'",
environ_update={"HELM_NAMESPACE": "test"},
)
]
)
assert (
result.exception.args[0]["command"]
- == "/usr/bin/helm upgrade -i --reset-values test /tmp/path"
+ == "/usr/bin/helm upgrade -i --reset-values test '/tmp/path'"
)
def test_dependency_update_option_true_without_dependencies_block(self):
@@ -180,14 +179,14 @@ class TestDependencyUpdateWithoutChartRepoUrlOption(unittest.TestCase):
mock_run_command.assert_has_calls(
[
call(
- "/usr/bin/helm upgrade -i --reset-values test /tmp/path",
+ "/usr/bin/helm upgrade -i --reset-values test '/tmp/path'",
environ_update={"HELM_NAMESPACE": "test"},
)
]
)
assert (
result.exception.args[0]["command"]
- == "/usr/bin/helm upgrade -i --reset-values test /tmp/path"
+ == "/usr/bin/helm upgrade -i --reset-values test '/tmp/path'"
)
@@ -250,12 +249,12 @@ class TestDependencyUpdateWithChartRepoUrlOption(unittest.TestCase):
with self.assertRaises(AnsibleExitJson) as result:
helm.main()
mock_run_command.assert_called_once_with(
- "/usr/bin/helm --repo=http://repo.example/charts upgrade -i --reset-values test chart1",
+ "/usr/bin/helm --repo=http://repo.example/charts upgrade -i --reset-values test 'chart1'",
environ_update={"HELM_NAMESPACE": "test"},
)
assert (
result.exception.args[0]["command"]
- == "/usr/bin/helm --repo=http://repo.example/charts upgrade -i --reset-values test chart1"
+ == "/usr/bin/helm --repo=http://repo.example/charts upgrade -i --reset-values test 'chart1'"
)
def test_dependency_update_option_False(self):
@@ -279,12 +278,12 @@ class TestDependencyUpdateWithChartRepoUrlOption(unittest.TestCase):
with self.assertRaises(AnsibleExitJson) as result:
helm.main()
mock_run_command.assert_called_once_with(
- "/usr/bin/helm --repo=http://repo.example/charts upgrade -i --reset-values test chart1",
+ "/usr/bin/helm --repo=http://repo.example/charts upgrade -i --reset-values test 'chart1'",
environ_update={"HELM_NAMESPACE": "test"},
)
assert (
result.exception.args[0]["command"]
- == "/usr/bin/helm --repo=http://repo.example/charts upgrade -i --reset-values test chart1"
+ == "/usr/bin/helm --repo=http://repo.example/charts upgrade -i --reset-values test 'chart1'"
)
def test_dependency_update_option_True_and_replace_option_disabled(self):
@@ -337,12 +336,12 @@ class TestDependencyUpdateWithChartRepoUrlOption(unittest.TestCase):
with self.assertRaises(AnsibleExitJson) as result:
helm.main()
mock_run_command.assert_called_once_with(
- "/usr/bin/helm --repo=http://repo.example/charts install --dependency-update --replace test chart1",
+ "/usr/bin/helm --repo=http://repo.example/charts install --dependency-update --replace test 'chart1'",
environ_update={"HELM_NAMESPACE": "test"},
)
assert (
result.exception.args[0]["command"]
- == "/usr/bin/helm --repo=http://repo.example/charts install --dependency-update --replace test chart1"
+ == "/usr/bin/helm --repo=http://repo.example/charts install --dependency-update --replace test 'chart1'"
)
@@ -404,12 +403,12 @@ class TestDependencyUpdateWithChartRefIsUrl(unittest.TestCase):
with self.assertRaises(AnsibleExitJson) as result:
helm.main()
mock_run_command.assert_called_once_with(
- "/usr/bin/helm upgrade -i --reset-values test http://repo.example/charts/application.tgz",
+ "/usr/bin/helm upgrade -i --reset-values test 'http://repo.example/charts/application.tgz'",
environ_update={"HELM_NAMESPACE": "test"},
)
assert (
result.exception.args[0]["command"]
- == "/usr/bin/helm upgrade -i --reset-values test http://repo.example/charts/application.tgz"
+ == "/usr/bin/helm upgrade -i --reset-values test 'http://repo.example/charts/application.tgz'"
)
def test_dependency_update_option_False(self):
@@ -432,12 +431,12 @@ class TestDependencyUpdateWithChartRefIsUrl(unittest.TestCase):
with self.assertRaises(AnsibleExitJson) as result:
helm.main()
mock_run_command.assert_called_once_with(
- "/usr/bin/helm upgrade -i --reset-values test http://repo.example/charts/application.tgz",
+ "/usr/bin/helm upgrade -i --reset-values test 'http://repo.example/charts/application.tgz'",
environ_update={"HELM_NAMESPACE": "test"},
)
assert (
result.exception.args[0]["command"]
- == "/usr/bin/helm upgrade -i --reset-values test http://repo.example/charts/application.tgz"
+ == "/usr/bin/helm upgrade -i --reset-values test 'http://repo.example/charts/application.tgz'"
)
def test_dependency_update_option_True_and_replace_option_disabled(self):
@@ -488,10 +487,10 @@ class TestDependencyUpdateWithChartRefIsUrl(unittest.TestCase):
with self.assertRaises(AnsibleExitJson) as result:
helm.main()
mock_run_command.assert_called_once_with(
- "/usr/bin/helm install --dependency-update --replace test http://repo.example/charts/application.tgz",
+ "/usr/bin/helm install --dependency-update --replace test 'http://repo.example/charts/application.tgz'",
environ_update={"HELM_NAMESPACE": "test"},
)
assert (
result.exception.args[0]["command"]
- == "/usr/bin/helm install --dependency-update --replace test http://repo.example/charts/application.tgz"
+ == "/usr/bin/helm install --dependency-update --replace test 'http://repo.example/charts/application.tgz'"
)
diff --git a/ansible_collections/kubernetes/core/tox.ini b/ansible_collections/kubernetes/core/tox.ini
index 491046ec3..e2d15b071 100644
--- a/ansible_collections/kubernetes/core/tox.ini
+++ b/ansible_collections/kubernetes/core/tox.ini
@@ -2,6 +2,9 @@
minversion = 1.4.2
skipsdist = True
+[common]
+format_dirs = {toxinidir}/plugins {toxinidir}/tests
+
[testenv:integration]
install_command = pip install {opts} {packages}
@@ -19,20 +22,41 @@ commands=
deps = git+https://github.com/ansible-network/collection_prep
commands = collection_prep_add_docs -p .
-[testenv:black]
+[testenv:black_check]
deps =
black >= 22.0, < 23.0
commands =
black -v --check --diff {toxinidir}/plugins {toxinidir}/tests
+[testenv:black]
+depends =
+ flynt, isort
+deps =
+ black >=23.0, <24.0
+commands =
+ black -v {[common]format_dirs}
+
+[testenv:isort]
+deps =
+ isort
+commands =
+ isort --profile black {[common]format_dirs}
+
+[testenv:flynt]
+deps =
+ flynt
+commands =
+ flynt {[common]format_dirs}
+
[testenv:linters]
deps =
- yamllint
- flake8
{[testenv:black]deps}
-
+ {[testenv:isort]deps}
+ flake8
+ yamllint
commands =
- black -v --check --diff {toxinidir}/plugins {toxinidir}/tests
+ black -v --check {toxinidir}/plugins {toxinidir}/tests
+ isort --profile black --check-only --diff {toxinidir}/plugins {toxinidir}/tests
+ flake8 {posargs} {toxinidir}/plugins {toxinidir}/tests
yamllint -s {toxinidir}
- flake8 {toxinidir}
diff --git a/ansible_collections/netapp/aws/.github/ISSUE_TEMPLATE/bug_report.yml b/ansible_collections/netapp/aws/.github/ISSUE_TEMPLATE/bug_report.yml
deleted file mode 100644
index 2767dba53..000000000
--- a/ansible_collections/netapp/aws/.github/ISSUE_TEMPLATE/bug_report.yml
+++ /dev/null
@@ -1,210 +0,0 @@
----
-name: 🐛 Bug report
-description: Create a report to help us improve
-
-body:
-- type: markdown
- attributes:
- value: >
- **Thank you for wanting to report a bug in netapp.aws!**
-
-
- ⚠
- Verify first that your issue is not [already reported on
- GitHub][issue search] and keep in mind that we may have to keep
- the current behavior because [every change breaks someone's
- workflow][XKCD 1172].
- We try to be mindful about this.
-
- Also test if the latest release and devel branch are affected too.
-
-
- **Tip:** If you are seeking community support, please consider
- [Join our Slack community][ML||IRC].
-
-
-
- [ML||IRC]:
- https://join.slack.com/t/netapppub/shared_invite/zt-njcjx2sh-1VR2mEDvPcJAmPutOnP~mg
-
- [issue search]: ../search?q=is%3Aissue&type=issues
-
- [XKCD 1172]: https://xkcd.com/1172/
-
-
-- type: textarea
- attributes:
- label: Summary
- description: Explain the problem briefly below.
- placeholder: >-
- When I try to do X with netapp.aws from the devel branch on GitHub, Y
- breaks in a way Z under the env E. Here are all the details I know
- about this problem...
- validations:
- required: true
-
-- type: input
- attributes:
- label: Component Name
- description: >
- Write the short name of the rst file, module, plugin, task or
- feature below, *use your best guess if unsure*.
-
-
- **Tip:** Cannot find it in this repository? Please be advised that
- the source for some parts of the documentation are hosted outside
- of this repository. If the page you are reporting describes
- modules/plugins/etc that are not officially supported by the
- Ansible Core Engineering team, there is a good chance that it is
- coming from one of the [Ansible Collections maintained by the
- community][collections org]. If this is the case, please make sure
- to file an issue under the appropriate project there instead.
-
-
- [collections org]: /ansible-collections
- placeholder: dnf, apt, yum, pip, user etc.
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Ansible Version
- description: >-
- Paste verbatim output from `ansible --version` below, under
- the prompt line. Please don't wrap it with tripple backticks — your
- whole input will be turned into a code snippet automatically.
- render: console
- value: |
- $ ansible --version
- placeholder: |
- $ ansible --version
- ansible [core 2.11.0b4.post0] (detached HEAD ref: refs/) last updated 2021/04/02 00:33:35 (GMT +200)
- config file = None
- configured module search path = ['~/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
- ansible python module location = ~/src/github/ansible/ansible/lib/ansible
- ansible collection location = ~/.ansible/collections:/usr/share/ansible/collections
- executable location = bin/ansible
- python version = 3.9.0 (default, Oct 26 2020, 13:08:59) [GCC 10.2.0]
- jinja version = 2.11.3
- libyaml = True
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: CVS for AWS Collection Version
- description: >-
- CVS for AWS Collection Version. Run `ansible-galaxy collection` and copy the entire output
- render: console
- value: |
- $ ansible-galaxy collection list
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Playbook
- description: >-
- The task from the playbook that is give you the issue
- render: console
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Steps to Reproduce
- description: |
- Describe exactly how to reproduce the problem, using a minimal test-case. It would *really* help us understand your problem if you could also pased any playbooks, configs and commands you used.
-
- **HINT:** You can paste https://gist.github.com links for larger files.
- value: |
- <!--- Paste example playbooks or commands between quotes below -->
- ```yaml (paste below)
-
- ```
- placeholder: |
- 1. Implement the following playbook:
-
- ```yaml
- ---
- # ping.yml
- - hosts: all
- gather_facts: false
- tasks:
- - ping:
- ...
- ```
- 2. Then run `ANSIBLE_DEBUG=1 ansible-playbook ping.yml -vvvvv`
- 3. An error occurs.
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Expected Results
- description: >-
- Describe what you expected to happen when running the steps above.
- placeholder: >-
- I expected X to happen because I assumed Y and was shocked
- that it did not.
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Actual Results
- description: |
- Describe what actually happened. If possible run with extra verbosity (`-vvvv`).
-
- Paste verbatim command output and don't wrap it with tripple backticks — your
- whole input will be turned into a code snippet automatically.
- render: console
- placeholder: >-
- Certificate did not match expected hostname: files.pythonhosted.org. Certificate: {'notAfter': 'Apr 28 19:20:25 2021 GMT', 'subjectAltName': ((u'DNS', 'r.ssl.fastly.net'), (u'DNS', '*.catchpoint.com'), (u'DNS', '*.cnn.io'), (u'DNS', '*.dollarshaveclub.com'), (u'DNS', '*.eater.com'), (u'DNS', '*.fastly.picmonkey.com'), (u'DNS', '*.files.saymedia-content.com'), (u'DNS', '*.ft.com'), (u'DNS', '*.meetupstatic.com'), (u'DNS', '*.nfl.com'), (u'DNS', '*.pagar.me'), (u'DNS', '*.picmonkey.com'), (u'DNS', '*.realself.com'), (u'DNS', '*.sbnation.com'), (u'DNS', '*.shakr.com'), (u'DNS', '*.streamable.com'), (u'DNS', '*.surfly.com'), (u'DNS', '*.theverge.com'), (u'DNS', '*.thrillist.com'), (u'DNS', '*.vox-cdn.com'), (u'DNS', '*.vox.com'), (u'DNS', '*.voxmedia.com'), (u'DNS', 'eater.com'), (u'DNS', 'ft.com'), (u'DNS', 'i.gse.io'), (u'DNS', 'picmonkey.com'), (u'DNS', 'realself.com'), (u'DNS', 'static.wixstatic.com'), (u'DNS', 'streamable.com'), (u'DNS', 'surfly.com'), (u'DNS', 'theverge.com'), (u'DNS', 'vox-cdn.com'), (u'DNS', 'vox.com'), (u'DNS', 'www.joyent.com')), 'subject': ((('countryName', u'US'),), (('stateOrProvinceName', u'California'),), (('localityName', u'San Francisco'),), (('organizationName', u'Fastly, Inc'),), (('commonName', u'r.ssl.fastly.net'),))}
- Exception:
- Traceback (most recent call last):
- File "/usr/local/lib/python2.6/dist-packages/pip/basecommand.py", line 215, in main
- status = self.run(options, args)
- File "/usr/local/lib/python2.6/dist-packages/pip/commands/install.py", line 335, in run
- wb.build(autobuilding=True)
- File "/usr/local/lib/python2.6/dist-packages/pip/wheel.py", line 749, in build
- self.requirement_set.prepare_files(self.finder)
- File "/usr/local/lib/python2.6/dist-packages/pip/req/req_set.py", line 380, in prepare_files
- ignore_dependencies=self.ignore_dependencies))
- File "/usr/local/lib/python2.6/dist-packages/pip/req/req_set.py", line 620, in _prepare_file
- session=self.session, hashes=hashes)
- File "/usr/local/lib/python2.6/dist-packages/pip/download.py", line 821, in unpack_url
- hashes=hashes
- File "/usr/local/lib/python2.6/dist-packages/pip/download.py", line 659, in unpack_http_url
- hashes)
- File "/usr/local/lib/python2.6/dist-packages/pip/download.py", line 853, in _download_http_url
- stream=True,
- File "/usr/local/lib/python2.6/dist-packages/pip/_vendor/requests/sessions.py", line 521, in get
- return self.request('GET', url, **kwargs)
- File "/usr/local/lib/python2.6/dist-packages/pip/download.py", line 386, in request
- return super(PipSession, self).request(method, url, *args, **kwargs)
- File "/usr/local/lib/python2.6/dist-packages/pip/_vendor/requests/sessions.py", line 508, in request
- resp = self.send(prep, **send_kwargs)
- File "/usr/local/lib/python2.6/dist-packages/pip/_vendor/requests/sessions.py", line 618, in send
- r = adapter.send(request, **kwargs)
- File "/usr/local/lib/python2.6/dist-packages/pip/_vendor/cachecontrol/adapter.py", line 47, in send
- resp = super(CacheControlAdapter, self).send(request, **kw)
- File "/usr/local/lib/python2.6/dist-packages/pip/_vendor/requests/adapters.py", line 506, in send
- raise SSLError(e, request=request)
- SSLError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Max retries exceeded with url: /packages/ef/ab/aa12712415809bf698e719b307419f953e25344e8f42d557533d7a02b276/netapp_lib-2020.7.16-py2-none-any.whl (Caused by SSLError(CertificateError("hostname 'files.pythonhosted.org' doesn't match either of 'r.ssl.fastly.net', '*.catchpoint.com', '*.cnn.io', '*.dollarshaveclub.com', '*.eater.com', '*.fastly.picmonkey.com', '*.files.saymedia-content.com', '*.ft.com', '*.meetupstatic.com', '*.nfl.com', '*.pagar.me', '*.picmonkey.com', '*.realself.com', '*.sbnation.com', '*.shakr.com', '*.streamable.com', '*.surfly.com', '*.theverge.com', '*.thrillist.com', '*.vox-cdn.com', '*.vox.com', '*.voxmedia.com', 'eater.com', 'ft.com', 'i.gse.io', 'picmonkey.com', 'realself.com', 'static.wixstatic.com', 'streamable.com', 'surfly.com', 'theverge.com', 'vox-cdn.com', 'vox.com', 'www.joyent.com'",),))
- ERROR: Command "/usr/bin/python2.6 /root/ansible/test/lib/ansible_test/_data/quiet_pip.py install --disable-pip-version-check -r /root/ansible/test/lib/ansible_test/_data/requirements/units.txt -r tests/unit/requirements.txt -c /root/ansible/test/lib/ansible_test/_data/requirements/constraints.txt" returned exit status 2.
- ERROR: Command "docker exec d47eb360db4ce779c1f690db964655b76e68895c4360ff252c46fe7fe6f5c75a /usr/bin/env ANSIBLE_TEST_CONTENT_ROOT=/root/ansible_collections/netapp/ontap LC_ALL=en_US.UTF-8 /usr/bin/python3.6 /root/ansible/bin/ansible-test units --metadata tests/output/.tmp/metadata-9i2qfrcl.json --truncate 200 --redact --color yes --requirements --python default --requirements-mode only" returned exit status 1.
- validations:
- required: true
-
-
-- type: markdown
- attributes:
- value: >
- *One last thing...*
-
-
- Thank you for your collaboration!
-
-
-...
diff --git a/ansible_collections/netapp/aws/.github/ISSUE_TEMPLATE/feature_request.yml b/ansible_collections/netapp/aws/.github/ISSUE_TEMPLATE/feature_request.yml
deleted file mode 100644
index c0506a059..000000000
--- a/ansible_collections/netapp/aws/.github/ISSUE_TEMPLATE/feature_request.yml
+++ /dev/null
@@ -1,100 +0,0 @@
----
-name: ✨ Feature request
-description: Suggest an idea for this project
-
-body:
-- type: markdown
- attributes:
- value: >
- **Thank you for wanting to suggest a feature for netapp.aws!**
-
- 💡
- Before you go ahead with your request, please first consider if it
- would be useful for majority of the netapp.aws users. As a
- general rule of thumb, any feature that is only of interest to a
- small sub group should be [implemented in a third-party Ansible
- Collection][contribute to collections] or maybe even just your
- project alone. Be mindful of the fact that the essential
- netapp.aws features have a broad impact.
-
-
- <details>
- <summary>
- ❗ Every change breaks someone's workflow.
- </summary>
-
-
- [![❗ Every change breaks someone's workflow.
- ](https://imgs.xkcd.com/comics/workflow.png)
- ](https://xkcd.com/1172/)
- </details>
-
-
- ⚠
- Verify first that your idea is not [already requested on
- GitHub][issue search].
-
- Also test if the main branch does not already implement this.
-
-
-- type: textarea
- attributes:
- label: Summary
- description: >
- Describe the new feature/improvement you would like briefly below.
-
-
- What's the problem this feature will solve?
-
- What are you trying to do, that you are unable to achieve
- with netapp.aws as it currently stands?
-
-
- * Provide examples of real-world use cases that this would enable
- and how it solves the problem you described.
-
- * How do you solve this now?
-
- * Have you tried to work around the problem using other tools?
-
- * Could there be a different approach to solving this issue?
-
- placeholder: >-
- I am trying to do X with netapp.aws from the devel branch on GitHub and
- I think that implementing a feature Y would be very helpful for me and
- every other user of netapp.aws because of Z.
- validations:
- required: true
-
-- type: input
- attributes:
- label: Component Name
- description: >
- Write the short name of the module, plugin, task or feature below,
- *use your best guess if unsure*.
-
-
- [collections org]: /ansible-collections
- placeholder: dnf, apt, yum, pip, user etc.
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Additional Information
- description: |
- Describe how the feature would be used, why it is needed and what it would solve.
-
- **HINT:** You can paste https://gist.github.com links for larger files.
- value: |
- <!--- Paste example playbooks or commands between quotes below -->
- ```yaml (paste below)
-
- ```
- placeholder: >-
- I asked on https://stackoverflow.com/.... and the community
- advised me to do X, Y and Z.
- validations:
- required: true
-
-...
diff --git a/ansible_collections/netapp/aws/.github/workflows/coverage.yml b/ansible_collections/netapp/aws/.github/workflows/coverage.yml
deleted file mode 100644
index d254e6081..000000000
--- a/ansible_collections/netapp/aws/.github/workflows/coverage.yml
+++ /dev/null
@@ -1,45 +0,0 @@
-name: NetApp.aws Ansible Coverage
-
-on:
- push:
- pull_request:
- schedule:
- - cron: '0 6 * * *'
-
-jobs:
- sanity:
- name: Coverage on AWS
- runs-on: ubuntu-latest
-
- steps:
- - name: Check out code
- uses: actions/checkout@v2
-
- - name: Set up Python
- uses: actions/setup-python@v2
- with:
- python-version: 3.8
-
- - name: Install ansible stable-2.11
- run: pip install https://github.com/ansible/ansible/archive/stable-2.11.tar.gz --disable-pip-version-check
-
- - name: Make directory to make ansible-test happy
- run: |
- pwd
- mkdir -p ansible_collections/netapp/aws/
- rsync -av . ansible_collections/netapp/aws/ --exclude ansible_collections/netapp/aws/
-
- - name: Run Unit Tests
- run: ansible-test units --coverage --color --docker --python 3.8
- working-directory: ansible_collections/netapp/aws/
-
- # ansible-test support producing code coverage date
- - name: Generate coverage report
- run: ansible-test coverage xml -v --requirements --group-by command --group-by version
- working-directory: ansible_collections/netapp/aws/
-
- - name: Upload coverage to Codecov
- uses: codecov/codecov-action@v2
- with:
- working-directory: ansible_collections/netapp/aws/
- verbose: true \ No newline at end of file
diff --git a/ansible_collections/netapp/aws/.github/workflows/main.yml b/ansible_collections/netapp/aws/.github/workflows/main.yml
deleted file mode 100644
index e59624ece..000000000
--- a/ansible_collections/netapp/aws/.github/workflows/main.yml
+++ /dev/null
@@ -1,47 +0,0 @@
-name: NetApp.aws Ansible CI
-
-on:
- push:
- pull_request:
- schedule:
- - cron: '0 6 * * *'
-
-jobs:
- sanity:
- name: Sanity (${{ matrix.ansible }} on AWS
- runs-on: ubuntu-latest
- strategy:
- matrix:
- ansible:
- - stable-2.9
- - stable-2.10
- - stable-2.11
- - stable-2.12
- - stable-2.13
- - devel
-
- steps:
- - name: Check out code
- uses: actions/checkout@v2
-
- - name: Set up Python
- uses: actions/setup-python@v2
- with:
- # Ansible 2.14 requires 3.9 as a minimum
- python-version: 3.9
-
- - name: Install ansible (${{ matrix.ansible }})
- run: pip install https://github.com/ansible/ansible/archive/${{ matrix.ansible }}.tar.gz --disable-pip-version-check
-
- - name: Make directory to make ansible-test happy
- run: |
- pwd
- mkdir -p ansible_collections/netapp/aws/
- rsync -av . ansible_collections/netapp/aws/ --exclude ansible_collections/netapp/aws/
- - name: Run sanity tests AWS
- run: ansible-test sanity --docker -v --color
- working-directory: ansible_collections/netapp/aws/
-
- - name: Run Unit Tests
- run: ansible-test units --docker -v --color
- working-directory: ansible_collections/netapp/aws/
diff --git a/ansible_collections/netapp/aws/CHANGELOG.rst b/ansible_collections/netapp/aws/CHANGELOG.rst
deleted file mode 100644
index 11be8dbab..000000000
--- a/ansible_collections/netapp/aws/CHANGELOG.rst
+++ /dev/null
@@ -1,90 +0,0 @@
-=======================================
-NetApp AWS CVS Collection Release Notes
-=======================================
-
-.. contents:: Topics
-
-
-v21.7.0
-=======
-
-Minor Changes
--------------
-
-- PR1 - allow usage of Ansible module group defaults - for Ansible 2.12+.
-
-v21.6.0
-=======
-
-Minor Changes
--------------
-
-- all modules - ability to trace API calls and responses.
-
-Bugfixes
---------
-
-- all modules - fix traceback TypeError 'NoneType' object is not subscriptable when URL points to a web server.
-
-v21.2.0
-=======
-
-Bugfixes
---------
-
-- all modules - disable logging for ``api_key`` and ``secret_key`` values.
-- all modules - prevent infinite loop when asynchronous action fails.
-- all modules - report error if response does not contain valid JSON.
-- aws_netapp_cvs_filesystems - fix KeyError when exportPolicy is not present.
-
-v20.9.0
-=======
-
-Minor Changes
--------------
-
-- Fix pylint or flake8 warnings reported by galaxy importer.
-
-v20.8.0
-=======
-
-Minor Changes
--------------
-
-- add "elements:" and update "required:" to match module requirements.
-- use a three group format for version_added. So 2.7 becomes 2.7.0. Same thing for 2.8 and 2.9.
-
-v20.6.0
-=======
-
-Bugfixes
---------
-
-- galaxy.yml - fix repository and homepage links.
-
-v20.2.0
-=======
-
-Bugfixes
---------
-
-- galaxy.yml - fix path to github repository.
-
-v19.10.0
-========
-
-Minor Changes
--------------
-
-- refactor existing modules as a collection
-
-v2.9.0
-======
-
-New Modules
------------
-
-- netapp.aws.aws_netapp_cvs_active_directory - NetApp AWS CloudVolumes Service Manage Active Directory.
-- netapp.aws.aws_netapp_cvs_filesystems - NetApp AWS Cloud Volumes Service Manage FileSystem.
-- netapp.aws.aws_netapp_cvs_pool - NetApp AWS Cloud Volumes Service Manage Pools.
-- netapp.aws.aws_netapp_cvs_snapshots - NetApp AWS Cloud Volumes Service Manage Snapshots.
diff --git a/ansible_collections/netapp/aws/COPYING b/ansible_collections/netapp/aws/COPYING
deleted file mode 100644
index 94a9ed024..000000000
--- a/ansible_collections/netapp/aws/COPYING
+++ /dev/null
@@ -1,674 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
- The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works. By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users. We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors. You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
- To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights. Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received. You must make sure that they, too, receive
-or can get the source code. And you must show them these terms so they
-know their rights.
-
- Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
- For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software. For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
- Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so. This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software. The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable. Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products. If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
- Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary. To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS
-
- 0. Definitions.
-
- "This License" refers to version 3 of the GNU General Public License.
-
- "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
- "The Program" refers to any copyrightable work licensed under this
-License. Each licensee is addressed as "you". "Licensees" and
-"recipients" may be individuals or organizations.
-
- To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy. The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
- A "covered work" means either the unmodified Program or a work based
-on the Program.
-
- To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy. Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
- To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies. Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
- An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License. If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
- 1. Source Code.
-
- The "source code" for a work means the preferred form of the work
-for making modifications to it. "Object code" means any non-source
-form of a work.
-
- A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
- The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form. A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
- The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities. However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work. For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
- The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
- The Corresponding Source for a work in source code form is that
-same work.
-
- 2. Basic Permissions.
-
- All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met. This License explicitly affirms your unlimited
-permission to run the unmodified Program. The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work. This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
- You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force. You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright. Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
- Conveying under any other circumstances is permitted solely under
-the conditions stated below. Sublicensing is not allowed; section 10
-makes it unnecessary.
-
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
- No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
- When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
- 4. Conveying Verbatim Copies.
-
- You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
- You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
- 5. Conveying Modified Source Versions.
-
- You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
- a) The work must carry prominent notices stating that you modified
- it, and giving a relevant date.
-
- b) The work must carry prominent notices stating that it is
- released under this License and any conditions added under section
- 7. This requirement modifies the requirement in section 4 to
- "keep intact all notices".
-
- c) You must license the entire work, as a whole, under this
- License to anyone who comes into possession of a copy. This
- License will therefore apply, along with any applicable section 7
- additional terms, to the whole of the work, and all its parts,
- regardless of how they are packaged. This License gives no
- permission to license the work in any other way, but it does not
- invalidate such permission if you have separately received it.
-
- d) If the work has interactive user interfaces, each must display
- Appropriate Legal Notices; however, if the Program has interactive
- interfaces that do not display Appropriate Legal Notices, your
- work need not make them do so.
-
- A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit. Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
- 6. Conveying Non-Source Forms.
-
- You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
- a) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by the
- Corresponding Source fixed on a durable physical medium
- customarily used for software interchange.
-
- b) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that product
- model, to give anyone who possesses the object code either (1) a
- copy of the Corresponding Source for all the software in the
- product that is covered by this License, on a durable physical
- medium customarily used for software interchange, for a price no
- more than your reasonable cost of physically performing this
- conveying of source, or (2) access to copy the
- Corresponding Source from a network server at no charge.
-
- c) Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
- alternative is allowed only occasionally and noncommercially, and
- only if you received the object code with such an offer, in accord
- with subsection 6b.
-
- d) Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to the
- Corresponding Source in the same way through the same place at no
- further charge. You need not require recipients to copy the
- Corresponding Source along with the object code. If the place to
- copy the object code is a network server, the Corresponding Source
- may be on a different server (operated by you or a third party)
- that supports equivalent copying facilities, provided you maintain
- clear directions next to the object code saying where to find the
- Corresponding Source. Regardless of what server hosts the
- Corresponding Source, you remain obligated to ensure that it is
- available for as long as needed to satisfy these requirements.
-
- e) Convey the object code using peer-to-peer transmission, provided
- you inform other peers where the object code and Corresponding
- Source of the work are being offered to the general public at no
- charge under subsection 6d.
-
- A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
- A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling. In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage. For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product. A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
- "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source. The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
- If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information. But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
- The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed. Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
- Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
- 7. Additional Terms.
-
- "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law. If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
- When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it. (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.) You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
- Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
- a) Disclaiming warranty or limiting liability differently from the
- terms of sections 15 and 16 of this License; or
-
- b) Requiring preservation of specified reasonable legal notices or
- author attributions in that material or in the Appropriate Legal
- Notices displayed by works containing it; or
-
- c) Prohibiting misrepresentation of the origin of that material, or
- requiring that modified versions of such material be marked in
- reasonable ways as different from the original version; or
-
- d) Limiting the use for publicity purposes of names of licensors or
- authors of the material; or
-
- e) Declining to grant rights under trademark law for use of some
- trade names, trademarks, or service marks; or
-
- f) Requiring indemnification of licensors and authors of that
- material by anyone who conveys the material (or modified versions of
- it) with contractual assumptions of liability to the recipient, for
- any liability that these contractual assumptions directly impose on
- those licensors and authors.
-
- All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10. If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term. If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
- If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
- Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
- 8. Termination.
-
- You may not propagate or modify a covered work except as expressly
-provided under this License. Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
- However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
- Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
- Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
- 9. Acceptance Not Required for Having Copies.
-
- You are not required to accept this License in order to receive or
-run a copy of the Program. Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance. However,
-nothing other than this License grants you permission to propagate or
-modify any covered work. These actions infringe copyright if you do
-not accept this License. Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
- 10. Automatic Licensing of Downstream Recipients.
-
- Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License. You are not responsible
-for enforcing compliance by third parties with this License.
-
- An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations. If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
- You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License. For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
- 11. Patents.
-
- A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based. The
-work thus licensed is called the contributor's "contributor version".
-
- A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version. For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
- Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
- In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement). To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
- If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients. "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
- If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
- A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License. You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
- Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
- 12. No Surrender of Others' Freedom.
-
- If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all. For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
- 13. Use with the GNU Affero General Public License.
-
- Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work. The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
- 14. Revised Versions of this License.
-
- The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
- If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
- Later license versions may give you additional or different
-permissions. However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
- 15. Disclaimer of Warranty.
-
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. Limitation of Liability.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
- 17. Interpretation of Sections 15 and 16.
-
- If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program 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.
-
- This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
- If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
- <program> Copyright (C) <year> <name of author>
- This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
- You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
- The GNU General Public License does not permit incorporating your program
-into proprietary programs. If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License. But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/ansible_collections/netapp/aws/FILES.json b/ansible_collections/netapp/aws/FILES.json
deleted file mode 100644
index ba75d354a..000000000
--- a/ansible_collections/netapp/aws/FILES.json
+++ /dev/null
@@ -1,383 +0,0 @@
-{
- "files": [
- {
- "name": ".",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "requirements.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ec72420df5dfbdce4111f715c96338df3b7cb75f58e478d2449c9720e560de8c",
- "format": 1
- },
- {
- "name": "plugins",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "plugins/doc_fragments",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "plugins/doc_fragments/netapp.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "73a260df376d83b7076b7654a10e9f238de604470a6ba309e8c6019c0f710203",
- "format": 1
- },
- {
- "name": "plugins/module_utils",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "plugins/module_utils/netapp.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f297bb0e9d58e427eda43771cf2f353ced6d4c3c71291832bae701bd94582643",
- "format": 1
- },
- {
- "name": "plugins/module_utils/netapp_module.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2d69e77a6e5b76dc8909149c8c364454e80fb42631af7d889dfb6e2ff0438c3e",
- "format": 1
- },
- {
- "name": "plugins/modules",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "plugins/modules/aws_netapp_cvs_filesystems.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "600bccc2f8464217ff4672ba52c160fdcbdc27d40ae33b29f8944af10b14af18",
- "format": 1
- },
- {
- "name": "plugins/modules/aws_netapp_cvs_active_directory.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a040e165f265ad4cfc04672506be81a07a032a9e2769f5d84b2a77c3be81fce0",
- "format": 1
- },
- {
- "name": "plugins/modules/aws_netapp_cvs_snapshots.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8edfd787384f01ef37a0032e60898b0253472355a32e420b439e1dbb4d385e85",
- "format": 1
- },
- {
- "name": "plugins/modules/aws_netapp_cvs_pool.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7a4b6fc9d48d61cf80a052455334ffd671dd880e7ec476aff6ccae820b658610",
- "format": 1
- },
- {
- "name": "tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/compat",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/compat/unittest.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cba95d18c5b39c6f49714eacf1ac77452c2e32fa087c03cf01aacd19ae597b0f",
- "format": 1
- },
- {
- "name": "tests/unit/compat/builtins.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0ca4cac919e166b25e601e11acb01f6957dddd574ff0a62569cb994a5ecb63e1",
- "format": 1
- },
- {
- "name": "tests/unit/compat/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "tests/unit/compat/mock.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0af958450cf6de3fbafe94b1111eae8ba5a8dbe1d785ffbb9df81f26e4946d99",
- "format": 1
- },
- {
- "name": "tests/unit/requirements.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "68a61b1d58a722f4ffabaa28da01c9837c93a582ea41c1bfb1c1fd54ea2d8fab",
- "format": 1
- },
- {
- "name": "tests/unit/plugins",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/plugins/module_utils",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/plugins/module_utils/test_netapp.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2d8932ad58a04840536e850abf3f131960e99ec55546081fb63713dbfc3bc05d",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_aws_netapp_cvs_snapshots.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "553b6f1afd566bebf6a90de18f71517efc3a41953bade06cd8972fcbff9ea1fb",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_aws_netapp_cvs_active_directory.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3b42a059c1dfd757cd6294ca9ebce74f1e3ce6690bcddcdca2cdb4e6b8ac771b",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_aws_netapp_cvs_filesystems.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f74d3b3ecbaf71433fcf569a9a09d134f241c8eb5a8e2ed373eeb5638fc79b2e",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_aws_netapp_cvs_pool.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "64f0c7995f02daaf91d3d6cc15f2347ecba5253a2dc13f7a7df6a880c0926fcf",
- "format": 1
- },
- {
- "name": "meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "meta/execution-environment.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "db75f5fcae43fd2db36d3c9a004748dd1ec4165a6e2ebb36ada6943a8b440f4a",
- "format": 1
- },
- {
- "name": "meta/runtime.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8c043a6db126f7b26a926814bf1485e24518dce3eb66607273cbd15835ffa29b",
- "format": 1
- },
- {
- "name": "changelogs",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "changelogs/fragments",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "changelogs/fragments/20.9.0.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "adc1cab2c7625a1e299876d9d622eb1e7529af59042268e088673f408c1d1dce",
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-3569.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3e0500c584d187e1b339a612f800540a39cddcebe5c3e1c8c2e134af0b2baf6",
- "format": 1
- },
- {
- "name": "changelogs/fragments/2019.10.0.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7b1a5ef7df5f1e6e66ddc013149aea0480eb79f911a0563e2e6d7d9af79d5572",
- "format": 1
- },
- {
- "name": "changelogs/fragments/20.2.0.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "91918f48a406834778ff7163c92c12dd1802c0620cb681ee66f8a4709444cf5e",
- "format": 1
- },
- {
- "name": "changelogs/fragments/20.8.0.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a91cbe5f46d2bae6af1eb3693470bdfaf04e5fbd6cdc76882e674389f4352f16",
- "format": 1
- },
- {
- "name": "changelogs/fragments/20.6.0.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6192b3cccdc7c1e1eb0d61a49dd20c6f234499b6dd9b52b2f974b673e99f7a47",
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-3644.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7eaf09f11cdf4fd2628e29124ce128dd984340ee65a233acdde77369ebf08ada",
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-4416.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4224db573f34caeeb956c8728eb343a47bc2729d898001a4c6a671b780dae1bf",
- "format": 1
- },
- {
- "name": "changelogs/config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b0bb3c0938ee0599c727ceef11d224bd771e9db9dc7a0bca162d786c2933ea89",
- "format": 1
- },
- {
- "name": "changelogs/changelog.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8f1d175c82536c75b0c17c289a6aa7e9bd2faeea39485d571cea6cba5c86d9aa",
- "format": 1
- },
- {
- "name": "README.md",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "dedd9d245c2817b6873d338acf855078c7b36b9232b0300c23524a0315beb778",
- "format": 1
- },
- {
- "name": "COPYING",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903",
- "format": 1
- },
- {
- "name": ".github",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": ".github/workflows",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": ".github/workflows/coverage.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "876f2d16a1c4169c208ddec8702048f376eeacd4f697a10cfe4a948444ce3f4e",
- "format": 1
- },
- {
- "name": ".github/workflows/main.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "86f3c8498a18904b255b96834893257285f8538e413334fe72ccae163ac070a9",
- "format": 1
- },
- {
- "name": ".github/ISSUE_TEMPLATE",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": ".github/ISSUE_TEMPLATE/feature_request.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4204f720b07bf0636be6a9c39717e84e59dc1a0b36425bf0f10fc9817131d3e7",
- "format": 1
- },
- {
- "name": ".github/ISSUE_TEMPLATE/bug_report.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1bcc8888ddd84ef0fc9efe03e784278a748a71ec3e4fffa62dc4a8ad02007760",
- "format": 1
- },
- {
- "name": "CHANGELOG.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c9a90849f79ddb81dc0f31e6cad9e6273e82d60b8651404fa31e40f0a6ee66b1",
- "format": 1
- }
- ],
- "format": 1
-} \ No newline at end of file
diff --git a/ansible_collections/netapp/aws/MANIFEST.json b/ansible_collections/netapp/aws/MANIFEST.json
deleted file mode 100644
index 262e3a3df..000000000
--- a/ansible_collections/netapp/aws/MANIFEST.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
- "collection_info": {
- "namespace": "netapp",
- "name": "aws",
- "version": "21.7.1",
- "authors": [
- "NetApp Ansible Team <ng-ansibleteam@netapp.com>"
- ],
- "readme": "README.md",
- "tags": [
- "storage",
- "cloud",
- "netapp",
- "cvs",
- "amazon",
- "aws"
- ],
- "description": "Cloud Volumes Service (CVS) for AWS",
- "license": [],
- "license_file": "COPYING",
- "dependencies": {},
- "repository": "https://github.com/ansible-collections/netapp.aws",
- "documentation": null,
- "homepage": "https://netapp.io/configuration-management-and-automation/",
- "issues": "https://github.com/ansible-collections/netapp.aws/issues"
- },
- "file_manifest_file": {
- "name": "FILES.json",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "288000ca8e2cebddf0a0b8cd43548750171e8049bfa7805c756d432867da9dc9",
- "format": 1
- },
- "format": 1
-} \ No newline at end of file
diff --git a/ansible_collections/netapp/aws/README.md b/ansible_collections/netapp/aws/README.md
deleted file mode 100644
index d6a9d0fa9..000000000
--- a/ansible_collections/netapp/aws/README.md
+++ /dev/null
@@ -1,87 +0,0 @@
-[![Documentation](https://img.shields.io/badge/docs-brightgreen.svg)](https://docs.ansible.com/ansible/devel/collections/netapp/aws/index.html)
-![example workflow](https://github.com/ansible-collections/netapp.aws/actions/workflows/main.yml/badge.svg)
-[![codecov](https://codecov.io/gh/ansible-collections/netapp.aws/branch/main/graph/badge.svg?token=weBYkksxSi)](https://codecov.io/gh/ansible-collections/netapp.aws)
-[![Discord](https://img.shields.io/discord/855068651522490400)](https://discord.gg/NetApp)
-
-
-=============================================================
-
-netapp.aws
-
-NetApp AWS CVS Collection
-
-Copyright (c) 2019 NetApp, Inc. All rights reserved.
-Specifications subject to change without notice.
-
-=============================================================
-
-# Installation
-```bash
-ansible-galaxy collection install netapp.aws
-```
-To use Collection add the following to the top of your playbook, with out this you will be using Ansible 2.9 version of the module
-```
-collections:
- - netapp.aws
-```
-
-# Module documentation
-https://docs.ansible.com/ansible/devel/collections/netapp/aws/
-
-# Need help
-Join our [Discord](https://discord.gg/NetApp) and look for our #ansible channel.
-
-# Notes
-
-These Ansible modules are supporting NetApp Cloud Volumes Service for AWS.
-
-They require a subscription to the service and your API access keys.
-
-The modules currently support Active Directory, Pool, FileSystem (Volume), and Snapshot services.
-
-# Release Notes
-
-
-## 21.7.0
-
-### Minor Changes
-- all modules - allow usage of Ansible module group defaults - for Ansible 2.12+.
-
-## 21.6.0
-
-### Minor Changes
-- all modules - ability to trace API calls and responses.
-
-### Bug Fixes
-- all modules - fix traceback TypeError 'NoneType' object is not subscriptable when URL points to a web server.
-
-## 21.2.0
-
-### Bug Fixes
-- aws_netapp_cvs_filesystems - fix KeyError when exportPolicy is not present.
-- all modules - disable logging for `api_key` and `secret_key` values.
-- all modules - report error if response does not contain valid JSON.
-- all modules - prevent infinite loop when asynchornous action fails.
-
-## 20.9.0
-
-Fix pylint or flake8 warnings reported by galaxy importer.
-
-## 20.8.0
-
-### Module documentation changes
-- use a three group format for `version_added`. So 2.7 becomes 2.7.0. Same thing for 2.8 and 2.9.
-- add `elements:` and update `required:` to match module requirements.
-
-## 20.6.0
-
-### Bug Fixes
-- galaxy.xml: fix repository and homepage links.
-
-## 20.2.0
-
-### Bug Fixes
-- galaxy.yml: fix path to github repository.
-
-## 19.11.0
-- Initial release as a collection.
diff --git a/ansible_collections/netapp/aws/changelogs/changelog.yaml b/ansible_collections/netapp/aws/changelogs/changelog.yaml
deleted file mode 100644
index ba907fcd5..000000000
--- a/ansible_collections/netapp/aws/changelogs/changelog.yaml
+++ /dev/null
@@ -1,81 +0,0 @@
-ancestor: null
-releases:
- 19.10.0:
- changes:
- minor_changes:
- - refactor existing modules as a collection
- fragments:
- - 2019.10.0.yaml
- release_date: '2019-11-14'
- 2.9.0:
- modules:
- - description: NetApp AWS CloudVolumes Service Manage Active Directory.
- name: aws_netapp_cvs_active_directory
- namespace: ''
- - description: NetApp AWS Cloud Volumes Service Manage FileSystem.
- name: aws_netapp_cvs_filesystems
- namespace: ''
- - description: NetApp AWS Cloud Volumes Service Manage Pools.
- name: aws_netapp_cvs_pool
- namespace: ''
- - description: NetApp AWS Cloud Volumes Service Manage Snapshots.
- name: aws_netapp_cvs_snapshots
- namespace: ''
- release_date: '2019-11-13'
- 20.2.0:
- changes:
- bugfixes:
- - galaxy.yml - fix path to github repository.
- fragments:
- - 20.2.0.yaml
- release_date: '2020-02-05'
- 20.6.0:
- changes:
- bugfixes:
- - galaxy.yml - fix repository and homepage links.
- fragments:
- - 20.6.0.yaml
- release_date: '2020-06-03'
- 20.8.0:
- changes:
- minor_changes:
- - add "elements:" and update "required:" to match module requirements.
- - use a three group format for version_added. So 2.7 becomes 2.7.0. Same thing
- for 2.8 and 2.9.
- fragments:
- - 20.8.0.yaml
- release_date: '2020-08-05'
- 20.9.0:
- changes:
- minor_changes:
- - Fix pylint or flake8 warnings reported by galaxy importer.
- fragments:
- - 20.9.0.yaml
- release_date: '2020-09-02'
- 21.2.0:
- changes:
- bugfixes:
- - all modules - disable logging for ``api_key`` and ``secret_key`` values.
- - all modules - prevent infinite loop when asynchronous action fails.
- - all modules - report error if response does not contain valid JSON.
- - aws_netapp_cvs_filesystems - fix KeyError when exportPolicy is not present.
- fragments:
- - DEVOPS-3644.yaml
- release_date: '2021-02-04'
- 21.6.0:
- changes:
- bugfixes:
- - all modules - fix traceback TypeError 'NoneType' object is not subscriptable
- when URL points to a web server.
- minor_changes:
- - all modules - ability to trace API calls and responses.
- fragments:
- - DEVOPS-3569.yaml
- release_date: '2021-07-14'
- 21.7.0:
- changes:
- minor_changes:
- - PR1 - allow usage of Ansible module group defaults - for Ansible 2.12+.
- fragments:
- - DEVOPS-4416.yaml
- release_date: '2021-11-03'
diff --git a/ansible_collections/netapp/aws/changelogs/config.yaml b/ansible_collections/netapp/aws/changelogs/config.yaml
deleted file mode 100644
index 5f649c68c..000000000
--- a/ansible_collections/netapp/aws/changelogs/config.yaml
+++ /dev/null
@@ -1,32 +0,0 @@
-changelog_filename_template: ../CHANGELOG.rst
-changelog_filename_version_depth: 0
-changes_file: changelog.yaml
-changes_format: combined
-ignore_other_fragment_extensions: true
-keep_fragments: true
-mention_ancestor: true
-new_plugins_after_name: removed_features
-notesdir: fragments
-prelude_section_name: release_summary
-prelude_section_title: Release Summary
-sanitize_changelog: true
-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
-title: NetApp AWS CVS Collection
-trivial_section_name: trivial
-use_fqcn: true
diff --git a/ansible_collections/netapp/aws/changelogs/fragments/20.2.0.yaml b/ansible_collections/netapp/aws/changelogs/fragments/20.2.0.yaml
deleted file mode 100644
index 3f764c1c9..000000000
--- a/ansible_collections/netapp/aws/changelogs/fragments/20.2.0.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-bugfixes:
- - galaxy.yml - fix path to github repository.
diff --git a/ansible_collections/netapp/aws/changelogs/fragments/20.6.0.yaml b/ansible_collections/netapp/aws/changelogs/fragments/20.6.0.yaml
deleted file mode 100644
index fcd0d11ee..000000000
--- a/ansible_collections/netapp/aws/changelogs/fragments/20.6.0.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-bugfixes:
- - galaxy.yml - fix repository and homepage links.
diff --git a/ansible_collections/netapp/aws/changelogs/fragments/20.8.0.yaml b/ansible_collections/netapp/aws/changelogs/fragments/20.8.0.yaml
deleted file mode 100644
index c92e9e41b..000000000
--- a/ansible_collections/netapp/aws/changelogs/fragments/20.8.0.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-minor_changes:
- - use a three group format for version_added. So 2.7 becomes 2.7.0. Same thing for 2.8 and 2.9.
- - add "elements:" and update "required:" to match module requirements.
diff --git a/ansible_collections/netapp/aws/changelogs/fragments/20.9.0.yaml b/ansible_collections/netapp/aws/changelogs/fragments/20.9.0.yaml
deleted file mode 100644
index c7328c5eb..000000000
--- a/ansible_collections/netapp/aws/changelogs/fragments/20.9.0.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-minor_changes:
- - Fix pylint or flake8 warnings reported by galaxy importer.
diff --git a/ansible_collections/netapp/aws/changelogs/fragments/2019.10.0.yaml b/ansible_collections/netapp/aws/changelogs/fragments/2019.10.0.yaml
deleted file mode 100644
index 5723daa11..000000000
--- a/ansible_collections/netapp/aws/changelogs/fragments/2019.10.0.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-minor_changes:
- - refactor existing modules as a collection
diff --git a/ansible_collections/netapp/aws/changelogs/fragments/DEVOPS-3569.yaml b/ansible_collections/netapp/aws/changelogs/fragments/DEVOPS-3569.yaml
deleted file mode 100644
index 19ba55d8d..000000000
--- a/ansible_collections/netapp/aws/changelogs/fragments/DEVOPS-3569.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
-minor_changes:
- - all modules - ability to trace API calls and responses.
-bugfixes:
- - all modules - fix traceback TypeError 'NoneType' object is not subscriptable when URL points to a web server.
diff --git a/ansible_collections/netapp/aws/changelogs/fragments/DEVOPS-3644.yaml b/ansible_collections/netapp/aws/changelogs/fragments/DEVOPS-3644.yaml
deleted file mode 100644
index 2c7e83f31..000000000
--- a/ansible_collections/netapp/aws/changelogs/fragments/DEVOPS-3644.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-bugfixes:
- - aws_netapp_cvs_filesystems - fix KeyError when exportPolicy is not present.
- - all modules - disable logging for ``api_key`` and ``secret_key`` values.
- - all modules - report error if response does not contain valid JSON.
- - all modules - prevent infinite loop when asynchronous action fails.
diff --git a/ansible_collections/netapp/aws/changelogs/fragments/DEVOPS-4416.yaml b/ansible_collections/netapp/aws/changelogs/fragments/DEVOPS-4416.yaml
deleted file mode 100644
index 6b4b660a0..000000000
--- a/ansible_collections/netapp/aws/changelogs/fragments/DEVOPS-4416.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-minor_changes:
- - PR1 - allow usage of Ansible module group defaults - for Ansible 2.12+.
diff --git a/ansible_collections/netapp/aws/meta/execution-environment.yml b/ansible_collections/netapp/aws/meta/execution-environment.yml
deleted file mode 100644
index 315d71a13..000000000
--- a/ansible_collections/netapp/aws/meta/execution-environment.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-version: 1
-dependencies:
- python: ../requirements.txt
diff --git a/ansible_collections/netapp/aws/meta/runtime.yml b/ansible_collections/netapp/aws/meta/runtime.yml
deleted file mode 100644
index b6b0adc8e..000000000
--- a/ansible_collections/netapp/aws/meta/runtime.yml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-requires_ansible: ">=2.13"
-action_groups:
- netapp_aws:
- - aws_netapp_cvs_active_directory
- - aws_netapp_cvs_filesystems
- - aws_netapp_cvs_pool
- - aws_netapp_cvs_snapshots
diff --git a/ansible_collections/netapp/aws/plugins/doc_fragments/netapp.py b/ansible_collections/netapp/aws/plugins/doc_fragments/netapp.py
deleted file mode 100644
index aff60719f..000000000
--- a/ansible_collections/netapp/aws/plugins/doc_fragments/netapp.py
+++ /dev/null
@@ -1,55 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright: (c) 2019, NetApp Ansible Team <ng-ansibleteam@netapp.com>
-# 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
-
-
-class ModuleDocFragment(object):
-
- DOCUMENTATION = r'''
-options:
- - See respective platform section for more details
-requirements:
- - See respective platform section for more details
-notes:
- - This is documentation for NetApp's AWS CVS modules.
-'''
-
- # Documentation fragment for AWSCVS
- AWSCVS = """
-options:
- api_key:
- required: true
- type: str
- description:
- - The access key to authenticate with the AWSCVS Web Services Proxy or Embedded Web Services API.
- secret_key:
- required: true
- type: str
- description:
- - The secret_key to authenticate with the AWSCVS Web Services Proxy or Embedded Web Services API.
- api_url:
- required: true
- type: str
- description:
- - The url to the AWSCVS Web Services Proxy or Embedded Web Services API.
- validate_certs:
- required: false
- default: true
- description:
- - Should https certificates be validated?
- type: bool
- feature_flags:
- description:
- - Enable or disable a new feature.
- - This can be used to enable an experimental feature or disable a new feature that breaks backward compatibility.
- - Supported keys and values are subject to change without notice. Unknown keys are ignored.
- - trace_apis can be set to true to enable tracing, data is written to /tmp/um_apis.log.
- type: dict
- version_added: 21.6.0
-notes:
- - The modules prefixed with aws\\_cvs\\_netapp are built to Manage AWS Cloud Volumes Service .
-"""
diff --git a/ansible_collections/netapp/aws/plugins/module_utils/netapp.py b/ansible_collections/netapp/aws/plugins/module_utils/netapp.py
deleted file mode 100644
index 271b66a5d..000000000
--- a/ansible_collections/netapp/aws/plugins/module_utils/netapp.py
+++ /dev/null
@@ -1,241 +0,0 @@
-# This code is part of Ansible, but is an independent component.
-# This particular file snippet, and this file snippet only, is BSD licensed.
-# Modules you write using this snippet, which is embedded dynamically by Ansible
-# still belong to the author of the module, and may assign their own license
-# to the complete work.
-#
-# Copyright (c) 2019, NetApp Ansible Team <ng-ansibleteam@netapp.com>
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without modification,
-# are permitted provided that the following conditions are met:
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above copyright notice,
-# this list of conditions and the following disclaimer in the documentation
-# and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# 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.
-
-'''
-netapp.py
-Support methods and class for AWS CVS modules
-'''
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-
-import logging
-import time
-from ansible.module_utils.basic import missing_required_lib
-
-try:
- from ansible.module_utils.ansible_release import __version__ as ansible_version
-except ImportError:
- ansible_version = 'unknown'
-
-COLLECTION_VERSION = "21.7.1"
-
-try:
- import requests
- HAS_REQUESTS = True
-except ImportError:
- HAS_REQUESTS = False
-
-
-POW2_BYTE_MAP = dict(
- # Here, 1 kb = 1024
- bytes=1,
- b=1,
- kb=1024,
- mb=1024 ** 2,
- gb=1024 ** 3,
- tb=1024 ** 4,
- pb=1024 ** 5,
- eb=1024 ** 6,
- zb=1024 ** 7,
- yb=1024 ** 8
-)
-
-LOG = logging.getLogger(__name__)
-LOG_FILE = '/tmp/aws_cvs_apis.log'
-
-
-def aws_cvs_host_argument_spec():
-
- return dict(
- api_url=dict(required=True, type='str'),
- validate_certs=dict(required=False, type='bool', default=True),
- api_key=dict(required=True, type='str', no_log=True),
- secret_key=dict(required=True, type='str', no_log=True),
- feature_flags=dict(required=False, type='dict', default=dict()),
- )
-
-
-def has_feature(module, feature_name):
- feature = get_feature(module, feature_name)
- if isinstance(feature, bool):
- return feature
- module.fail_json(msg="Error: expected bool type for feature flag: %s" % feature_name)
-
-
-def get_feature(module, feature_name):
- ''' if the user has configured the feature, use it
- otherwise, use our default
- '''
- default_flags = dict(
- strict_json_check=True, # if true, fail if response.content in not empty and is not valid json
- trace_apis=False, # if true, append REST requests/responses to LOG_FILE
- )
-
- if module.params['feature_flags'] is not None and feature_name in module.params['feature_flags']:
- return module.params['feature_flags'][feature_name]
- if feature_name in default_flags:
- return default_flags[feature_name]
- module.fail_json(msg="Internal error: unexpected feature flag: %s" % feature_name)
-
-
-class AwsCvsRestAPI(object):
- ''' wraps requests methods to interface with AWS CVS REST APIs '''
- def __init__(self, module, timeout=60):
- self.module = module
- self.api_key = self.module.params['api_key']
- self.secret_key = self.module.params['secret_key']
- self.api_url = self.module.params['api_url']
- self.verify = self.module.params['validate_certs']
- self.timeout = timeout
- self.url = 'https://' + self.api_url + '/v1/'
- self.errors = list()
- self.debug_logs = list()
- self.check_required_library()
- if has_feature(module, 'trace_apis'):
- logging.basicConfig(filename=LOG_FILE, level=logging.DEBUG, format='%(asctime)s %(levelname)-8s %(message)s')
-
- def check_required_library(self):
- if not HAS_REQUESTS:
- self.module.fail_json(msg=missing_required_lib('requests'))
-
- def send_request(self, method, api, params, json=None):
- ''' send http request and process reponse, including error conditions '''
- if params is not None:
- self.module.fail_json(msg='params is not implemented. api=%s, params=%s' % (api, repr(params)))
- url = self.url + api
- status_code = None
- content = None
- json_dict = None
- json_error = None
- error_details = None
- headers = {
- 'Content-type': "application/json",
- 'api-key': self.api_key,
- 'secret-key': self.secret_key,
- 'Cache-Control': "no-cache",
- }
-
- def check_contents(response):
- '''json() may fail on an empty value, but it's OK if no response is expected.
- To avoid false positives, only report an issue when we expect to read a value.
- The first get will see it.
- '''
- if method == 'GET' and has_feature(self.module, 'strict_json_check'):
- contents = response.content
- if len(contents) > 0:
- raise ValueError("Expecting json, got: %s" % contents)
-
- def get_json(response):
- ''' extract json, and error message if present '''
- error = None
- try:
- json = response.json()
- except ValueError:
- check_contents(response)
- return None, None
- success_code = [200, 201, 202]
- if response.status_code not in success_code:
- error = json.get('message')
- return json, error
-
- def sanitize(value, key=None):
- if isinstance(value, dict):
- new_dict = dict()
- for key, value in value.items():
- new_dict[key] = sanitize(value, key)
- return new_dict
- else:
- if key in ['api-key', 'secret-key', 'password']:
- return '*' * 12
- else:
- return value
-
- self.log_debug('sending', repr(sanitize(dict(method=method, url=url, verify=self.verify, params=params,
- timeout=self.timeout, json=json, headers=headers))))
- try:
- response = requests.request(method, url, headers=headers, timeout=self.timeout, json=json)
- content = response.content # for debug purposes
- status_code = response.status_code
- # If the response was successful, no Exception will be raised
- response.raise_for_status()
- json_dict, json_error = get_json(response)
- except requests.exceptions.HTTPError as err:
- __, json_error = get_json(response)
- if json_error is None:
- self.log_error(status_code, 'HTTP error: %s' % err)
- error_details = str(err)
- # If an error was reported in the json payload, it is handled below
- except requests.exceptions.ConnectionError as err:
- self.log_error(status_code, 'Connection error: %s' % err)
- error_details = str(err)
- except Exception as err:
- self.log_error(status_code, 'Other error: %s' % err)
- error_details = 'general exception: %s' % str(err)
- if json_error is not None:
- self.log_error(status_code, 'Endpoint error: %d: %s' % (status_code, json_error))
- error_details = json_error
- self.log_debug(status_code, content)
- return json_dict, error_details
-
- def get(self, api, params=None):
- method = 'GET'
- return self.send_request(method, api, params)
-
- def post(self, api, data, params=None):
- method = 'POST'
- return self.send_request(method, api, params, json=data)
-
- def patch(self, api, data, params=None):
- method = 'PATCH'
- return self.send_request(method, api, params, json=data)
-
- def put(self, api, data, params=None):
- method = 'PUT'
- return self.send_request(method, api, params, json=data)
-
- def delete(self, api, data, params=None):
- method = 'DELETE'
- return self.send_request(method, api, params, json=data)
-
- def get_state(self, job_id):
- """ Method to get the state of the job """
- response, dummy = self.get('Jobs/%s' % job_id)
- while str(response['state']) == 'ongoing':
- time.sleep(15)
- response, dummy = self.get('Jobs/%s' % job_id)
- return str(response['state'])
-
- def log_error(self, status_code, message):
- LOG.error("%s: %s", status_code, message)
- self.errors.append(message)
- self.debug_logs.append((status_code, message))
-
- def log_debug(self, status_code, content):
- LOG.debug("%s: %s", status_code, content)
- self.debug_logs.append((status_code, content))
diff --git a/ansible_collections/netapp/aws/plugins/module_utils/netapp_module.py b/ansible_collections/netapp/aws/plugins/module_utils/netapp_module.py
deleted file mode 100644
index 3e31ae989..000000000
--- a/ansible_collections/netapp/aws/plugins/module_utils/netapp_module.py
+++ /dev/null
@@ -1,142 +0,0 @@
-# This code is part of Ansible, but is an independent component.
-# This particular file snippet, and this file snippet only, is BSD licensed.
-# Modules you write using this snippet, which is embedded dynamically by Ansible
-# still belong to the author of the module, and may assign their own license
-# to the complete work.
-#
-# Copyright (c) 2018, Laurent Nicolas <laurentn@netapp.com>
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without modification,
-# are permitted provided that the following conditions are met:
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above copyright notice,
-# this list of conditions and the following disclaimer in the documentation
-# and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# 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.
-
-''' Support class for NetApp ansible modules '''
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-
-
-def cmp(a, b):
- """
- Python 3 does not have a cmp function, this will do the cmp.
- :param a: first object to check
- :param b: second object to check
- :return:
- """
- # convert to lower case for string comparison.
- if a is None:
- return -1
- if isinstance(a, str) and isinstance(b, str):
- a = a.lower()
- b = b.lower()
- # if list has string element, convert string to lower case.
- if isinstance(a, list) and isinstance(b, list):
- a = [x.lower() if isinstance(x, str) else x for x in a]
- b = [x.lower() if isinstance(x, str) else x for x in b]
- a.sort()
- b.sort()
- return (a > b) - (a < b)
-
-
-class NetAppModule(object):
- '''
- Common class for NetApp modules
- set of support functions to derive actions based
- on the current state of the system, and a desired state
- '''
-
- def __init__(self):
- self.log = list()
- self.changed = False
- self.parameters = {'name': 'not intialized'}
-
- def set_parameters(self, ansible_params):
- self.parameters = dict()
- for param in ansible_params:
- if ansible_params[param] is not None:
- self.parameters[param] = ansible_params[param]
- return self.parameters
-
- def get_cd_action(self, current, desired):
- ''' takes a desired state and a current state, and return an action:
- create, delete, None
- eg:
- is_present = 'absent'
- some_object = self.get_object(source)
- if some_object is not None:
- is_present = 'present'
- action = cd_action(current=is_present, desired = self.desired.state())
- '''
- if 'state' in desired:
- desired_state = desired['state']
- else:
- desired_state = 'present'
-
- if current is None and desired_state == 'absent':
- return None
- if current is not None and desired_state == 'present':
- return None
- # change in state
- self.changed = True
- if current is not None:
- return 'delete'
- return 'create'
-
- def compare_and_update_values(self, current, desired, keys_to_compare):
- updated_values = dict()
- is_changed = False
- for key in keys_to_compare:
- if key in current:
- if key in desired and desired[key] is not None:
- if current[key] != desired[key]:
- updated_values[key] = desired[key]
- is_changed = True
- else:
- updated_values[key] = current[key]
- else:
- updated_values[key] = current[key]
-
- return updated_values, is_changed
-
- def is_rename_action(self, source, target):
- ''' takes a source and target object, and returns True
- if a rename is required
- eg:
- source = self.get_object(source_name)
- target = self.get_object(target_name)
- action = is_rename_action(source, target)
- :return: None for error, True for rename action, False otherwise
- '''
- if source is None and target is None:
- # error, do nothing
- # cannot rename an non existent resource
- # alternatively we could create B
- return None
- if source is not None and target is not None:
- # error, do nothing
- # idempotency (or) new_name_is_already_in_use
- # alternatively we could delete B and rename A to B
- return False
- if source is None and target is not None:
- # do nothing, maybe the rename was already done
- return False
- # source is not None and target is None:
- # rename is in order
- self.changed = True
- return True
diff --git a/ansible_collections/netapp/aws/plugins/modules/aws_netapp_cvs_active_directory.py b/ansible_collections/netapp/aws/plugins/modules/aws_netapp_cvs_active_directory.py
deleted file mode 100644
index b64c877b4..000000000
--- a/ansible_collections/netapp/aws/plugins/modules/aws_netapp_cvs_active_directory.py
+++ /dev/null
@@ -1,276 +0,0 @@
-#!/usr/bin/python
-
-# (c) 2019, NetApp Inc.
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-"""AWS Cloud Volumes Services - Manage ActiveDirectory"""
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'certified'}
-
-
-DOCUMENTATION = '''
-
-module: aws_netapp_cvs_active_directory
-
-short_description: NetApp AWS CloudVolumes Service Manage Active Directory.
-extends_documentation_fragment:
- - netapp.aws.netapp.awscvs
-version_added: 2.9.0
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-description:
- - Create, Update, Delete ActiveDirectory on AWS Cloud Volumes Service.
-
-options:
- state:
- description:
- - Whether the specified ActiveDirectory should exist or not.
- choices: ['present', 'absent']
- required: true
- type: str
-
- region:
- description:
- - The region to which the Active Directory credentials are associated.
- required: true
- type: str
-
- domain:
- description:
- - Name of the Active Directory domain
- type: str
-
- DNS:
- description:
- - DNS server address for the Active Directory domain
- - Required when C(state=present)
- - Required when C(state=present), to modify ActiveDirectory properties.
- type: str
-
- netBIOS:
- description:
- - NetBIOS name of the server.
- type: str
-
- username:
- description:
- - Username of the Active Directory domain administrator
- type: str
-
- password:
- description:
- - Password of the Active Directory domain administrator
- - Required when C(state=present), to modify ActiveDirectory properties
- type: str
-'''
-
-EXAMPLES = """
- - name: Create Active Directory
- aws_netapp_cvs_active_directory.py:
- state: present
- region: us-east-1
- DNS: 101.102.103.123
- domain: mydomain.com
- password: netapp1!
- netBIOS: testing
- username: user1
- api_url : My_CVS_Hostname
- api_key: My_API_Key
- secret_key : My_Secret_Key
-
- - name: Update Active Directory
- aws_netapp_cvs_active_directory.py:
- state: present
- region: us-east-1
- DNS: 101.102.103.123
- domain: mydomain.com
- password: netapp2!
- netBIOS: testingBIOS
- username: user2
- api_url : My_CVS_Hostname
- api_key: My_API_Key
- secret_key : My_Secret_Key
-
- - name: Delete Active Directory
- aws_netapp_cvs_active_directory.py:
- state: absent
- region: us-east-1
- domain: mydomain.com
- api_url : My_CVS_Hostname
- api_key: My_API_Key
- secret_key : My_Secret_Key
-"""
-
-RETURN = '''
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-import ansible_collections.netapp.aws.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.aws.plugins.module_utils.netapp_module import NetAppModule
-from ansible_collections.netapp.aws.plugins.module_utils.netapp import AwsCvsRestAPI
-
-
-class AwsCvsNetappActiveDir(object):
- """
- Contains methods to parse arguments,
- derive details of AWS_CVS objects
- and send requests to AWS CVS via
- the restApi
- """
-
- def __init__(self):
- """
- Parse arguments, setup state variables,
- check paramenters and ensure request module is installed
- """
- self.argument_spec = netapp_utils.aws_cvs_host_argument_spec()
- self.argument_spec.update(dict(
- state=dict(required=True, choices=['present', 'absent'], type='str'),
- region=dict(required=True, type='str'),
- DNS=dict(required=False, type='str'),
- domain=dict(required=False, type='str'),
- password=dict(required=False, type='str', no_log=True),
- netBIOS=dict(required=False, type='str'),
- username=dict(required=False, type='str')
- ))
-
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- required_if=[
- ('state', 'present', ['domain', 'password']),
- ],
- supports_check_mode=True
- )
-
- self.na_helper = NetAppModule()
-
- # set up state variables
- self.parameters = self.na_helper.set_parameters(self.module.params)
- # Calling generic AWSCVS restApi class
- self.rest_api = AwsCvsRestAPI(self.module)
-
- def get_activedirectory_id(self):
- # Check if ActiveDirectory exists
- # Return UUID for ActiveDirectory is found, None otherwise
- try:
- list_activedirectory, error = self.rest_api.get('Storage/ActiveDirectory')
- except Exception:
- return None
- if error is not None:
- self.module.fail_json(msg='Error calling list_activedirectory: %s' % error)
-
- for activedirectory in list_activedirectory:
- if activedirectory['region'] == self.parameters['region']:
- return activedirectory['UUID']
- return None
-
- def get_activedirectory(self, activedirectory_id=None):
- if activedirectory_id is None:
- return None
- else:
- activedirectory_info, error = self.rest_api.get('Storage/ActiveDirectory/%s' % activedirectory_id)
- if not error:
- return activedirectory_info
- return None
-
- def create_activedirectory(self):
- # Create ActiveDirectory
- api = 'Storage/ActiveDirectory'
- data = {"region": self.parameters['region'], "DNS": self.parameters['DNS'], "domain": self.parameters['domain'],
- "username": self.parameters['username'], "password": self.parameters['password'], "netBIOS": self.parameters['netBIOS']}
-
- response, error = self.rest_api.post(api, data)
-
- if not error:
- return response
- else:
- self.module.fail_json(msg=response['message'])
-
- def delete_activedirectory(self):
- activedirectory_id = self.get_activedirectory_id()
- # Delete ActiveDirectory
-
- if activedirectory_id:
- api = 'Storage/ActiveDirectory/' + activedirectory_id
- data = None
- response, error = self.rest_api.delete(api, data)
- if not error:
- return response
- else:
- self.module.fail_json(msg=response['message'])
-
- else:
- self.module.fail_json(msg="Active Directory does not exist")
-
- def update_activedirectory(self, activedirectory_id, updated_activedirectory):
- # Update ActiveDirectory
- api = 'Storage/ActiveDirectory/' + activedirectory_id
- data = {
- "region": self.parameters['region'],
- "DNS": updated_activedirectory['DNS'],
- "domain": updated_activedirectory['domain'],
- "username": updated_activedirectory['username'],
- "password": updated_activedirectory['password'],
- "netBIOS": updated_activedirectory['netBIOS']
- }
-
- response, error = self.rest_api.put(api, data)
- if not error:
- return response
- else:
- self.module.fail_json(msg=response['message'])
-
- def apply(self):
- """
- Perform pre-checks, call functions and exit
- """
- modify = False
- activedirectory_id = self.get_activedirectory_id()
- current = self.get_activedirectory(activedirectory_id)
- cd_action = self.na_helper.get_cd_action(current, self.parameters)
-
- if current and self.parameters['state'] != 'absent':
- keys_to_check = ['DNS', 'domain', 'username', 'netBIOS']
- updated_active_directory, modify = self.na_helper.compare_and_update_values(current, self.parameters, keys_to_check)
-
- if self.parameters['password']:
- modify = True
- updated_active_directory['password'] = self.parameters['password']
-
- if modify is True:
- self.na_helper.changed = True
- if 'domain' in self.parameters and self.parameters['domain'] is not None:
- ad_exists = self.get_activedirectory(updated_active_directory['domain'])
- if ad_exists:
- modify = False
- self.na_helper.changed = False
-
- if self.na_helper.changed:
- if self.module.check_mode:
- pass
- else:
- if modify is True:
- self.update_activedirectory(activedirectory_id, updated_active_directory)
- elif cd_action == 'create':
- self.create_activedirectory()
- elif cd_action == 'delete':
- self.delete_activedirectory()
-
- self.module.exit_json(changed=self.na_helper.changed)
-
-
-def main():
- """
- Main function
- """
- aws_netapp_cvs_active_directory = AwsCvsNetappActiveDir()
- aws_netapp_cvs_active_directory.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/aws/plugins/modules/aws_netapp_cvs_filesystems.py b/ansible_collections/netapp/aws/plugins/modules/aws_netapp_cvs_filesystems.py
deleted file mode 100644
index 09190b39e..000000000
--- a/ansible_collections/netapp/aws/plugins/modules/aws_netapp_cvs_filesystems.py
+++ /dev/null
@@ -1,362 +0,0 @@
-#!/usr/bin/python
-
-# (c) 2019, NetApp Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-"""AWS Cloud Volumes Services - Manage fileSystem"""
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'community'}
-
-
-DOCUMENTATION = '''
-
-module: aws_netapp_cvs_filesystems
-
-short_description: NetApp AWS Cloud Volumes Service Manage FileSystem.
-extends_documentation_fragment:
- - netapp.aws.netapp.awscvs
-version_added: 2.9.0
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-description:
-- Create, Update, Delete fileSystem on AWS Cloud Volumes Service.
-
-options:
- state:
- description:
- - Whether the specified fileSystem should exist or not.
- required: true
- choices: ['present', 'absent']
- type: str
-
- region:
- description:
- - The region to which the filesystem belongs to.
- required: true
- type: str
-
- creationToken:
- description:
- - Name of the filesystem
- required: true
- type: str
-
- quotaInBytes:
- description:
- - Size of the filesystem
- - Required for create
- type: int
-
- serviceLevel:
- description:
- - Service Level of a filesystem.
- choices: ['standard', 'premium', 'extreme']
- type: str
-
- exportPolicy:
- description:
- - The policy rules to export the filesystem
- type: dict
- suboptions:
- rules:
- description:
- - Set of rules to export the filesystem
- - Requires allowedClients, access and protocol
- type: list
- elements: dict
- suboptions:
- allowedClients:
- description:
- - Comma separated list of ip address blocks of the clients to access the fileSystem
- - Each address block contains the starting IP address and size for the block
- type: str
-
- cifs:
- description:
- - Enable or disable cifs filesystem
- type: bool
-
- nfsv3:
- description:
- - Enable or disable nfsv3 fileSystem
- type: bool
-
- nfsv4:
- description:
- - Enable or disable nfsv4 filesystem
- type: bool
-
- ruleIndex:
- description:
- - Index number of the rule
- type: int
-
- unixReadOnly:
- description:
- - Should fileSystem have read only permission or not
- type: bool
-
- unixReadWrite:
- description:
- - Should fileSystem have read write permission or not
- type: bool
-'''
-
-EXAMPLES = """
-- name: Create FileSystem
- aws_netapp_cvs_filesystems:
- state: present
- region: us-east-1
- creationToken: newVolume-1
- exportPolicy:
- rules:
- - allowedClients: 172.16.0.4
- cifs: False
- nfsv3: True
- nfsv4: True
- ruleIndex: 1
- unixReadOnly: True
- unixReadWrite: False
- quotaInBytes: 100000000000
- api_url : cds-aws-bundles.netapp.com:8080
- api_key: My_API_Key
- secret_key : My_Secret_Key
-
-- name: Update FileSystem
- aws_netapp_cvs_filesystems:
- state: present
- region: us-east-1
- creationToken: newVolume-1
- exportPolicy:
- rules:
- - allowedClients: 172.16.0.4
- cifs: False
- nfsv3: True
- nfsv4: True
- ruleIndex: 1
- unixReadOnly: True
- unixReadWrite: False
- quotaInBytes: 200000000000
- api_url : cds-aws-bundles.netapp.com:8080
- api_key: My_API_Key
- secret_key : My_Secret_Key
-
-- name: Delete FileSystem
- aws_netapp_cvs_filesystems:
- state: present
- region: us-east-1
- creationToken: newVolume-1
- quotaInBytes: 100000000000
- api_url : cds-aws-bundles.netapp.com:8080
- api_key: My_API_Key
- secret_key : My_Secret_Key
-"""
-
-RETURN = """
-"""
-
-from ansible.module_utils.basic import AnsibleModule
-import ansible_collections.netapp.aws.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.aws.plugins.module_utils.netapp_module import NetAppModule
-from ansible_collections.netapp.aws.plugins.module_utils.netapp import AwsCvsRestAPI
-
-
-class AwsCvsNetappFileSystem(object):
- """
- Contains methods to parse arguments,
- derive details of AWS_CVS objects
- and send requests to AWS CVS via
- the restApi
- """
-
- def __init__(self):
- """
- Parse arguments, setup state variables,
- check paramenters and ensure request module is installed
- """
- self.argument_spec = netapp_utils.aws_cvs_host_argument_spec()
- self.argument_spec.update(dict(
- state=dict(required=True, choices=['present', 'absent']),
- region=dict(required=True, type='str'),
- creationToken=dict(required=True, type='str', no_log=False),
- quotaInBytes=dict(required=False, type='int'),
- serviceLevel=dict(required=False, choices=['standard', 'premium', 'extreme']),
- exportPolicy=dict(
- type='dict',
- options=dict(
- rules=dict(
- type='list',
- elements='dict',
- options=dict(
- allowedClients=dict(required=False, type='str'),
- cifs=dict(required=False, type='bool'),
- nfsv3=dict(required=False, type='bool'),
- nfsv4=dict(required=False, type='bool'),
- ruleIndex=dict(required=False, type='int'),
- unixReadOnly=dict(required=False, type='bool'),
- unixReadWrite=dict(required=False, type='bool')
- )
- )
- )
- ),
- ))
-
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- required_if=[
- ('state', 'present', ['region', 'creationToken', 'quotaInBytes']),
- ],
- supports_check_mode=True
- )
-
- self.na_helper = NetAppModule()
-
- # set up state variables
- self.parameters = self.na_helper.set_parameters(self.module.params)
-
- # Calling generic AWSCVS restApi class
- self.rest_api = AwsCvsRestAPI(self.module)
-
- self.data = {}
- for key in self.parameters.keys():
- self.data[key] = self.parameters[key]
-
- def get_filesystem_id(self):
- # Check given FileSystem is exists
- # Return fileSystemId is found, None otherwise
- list_filesystem, error = self.rest_api.get('FileSystems')
- if error:
- self.module.fail_json(msg=error)
-
- for filesystem in list_filesystem:
- if filesystem['creationToken'] == self.parameters['creationToken']:
- return filesystem['fileSystemId']
- return None
-
- def get_filesystem(self, filesystem_id):
- # Get FileSystem information by fileSystemId
- # Return fileSystem Information
- filesystem_info, error = self.rest_api.get('FileSystems/%s' % filesystem_id)
- if error:
- self.module.fail_json(msg=error)
- else:
- return filesystem_info
- return None
-
- def is_job_done(self, response):
- # check jobId is present and equal to 'done'
- # return True on success, False otherwise
- try:
- job_id = response['jobs'][0]['jobId']
- except TypeError:
- job_id = None
-
- if job_id is not None and self.rest_api.get_state(job_id) == 'done':
- return True
- return False
-
- def create_filesystem(self):
- # Create fileSystem
- api = 'FileSystems'
- response, error = self.rest_api.post(api, self.data)
- if not error:
- if self.is_job_done(response):
- return
- error = "Error: unexpected response on FileSystems create: %s" % str(response)
- self.module.fail_json(msg=error)
-
- def delete_filesystem(self, filesystem_id):
- # Delete FileSystem
- api = 'FileSystems/' + filesystem_id
- self.data = None
- response, error = self.rest_api.delete(api, self.data)
- if not error:
- if self.is_job_done(response):
- return
- error = "Error: unexpected response on FileSystems delete: %s" % str(response)
- self.module.fail_json(msg=error)
-
- def update_filesystem(self, filesystem_id):
- # Update FileSystem
- api = 'FileSystems/' + filesystem_id
- response, error = self.rest_api.put(api, self.data)
- if not error:
- if self.is_job_done(response):
- return
- error = "Error: unexpected response on FileSystems update: %s" % str(response)
- self.module.fail_json(msg=error)
-
- def apply(self):
- """
- Perform pre-checks, call functions and exit
- """
-
- filesystem = None
- filesystem_id = self.get_filesystem_id()
-
- if filesystem_id:
- # Getting the FileSystem details
- filesystem = self.get_filesystem(filesystem_id)
-
- cd_action = self.na_helper.get_cd_action(filesystem, self.parameters)
-
- if cd_action is None and self.parameters['state'] == 'present':
- # Check if we need to update the fileSystem
- update_filesystem = False
- if filesystem['quotaInBytes'] is not None and 'quotaInBytes' in self.parameters \
- and filesystem['quotaInBytes'] != self.parameters['quotaInBytes']:
- update_filesystem = True
- elif filesystem['creationToken'] is not None and 'creationToken' in self.parameters \
- and filesystem['creationToken'] != self.parameters['creationToken']:
- update_filesystem = True
- elif filesystem['serviceLevel'] is not None and 'serviceLevel' in self.parameters \
- and filesystem['serviceLevel'] != self.parameters['serviceLevel']:
- update_filesystem = True
- elif 'exportPolicy' in filesystem and filesystem['exportPolicy']['rules'] is not None and 'exportPolicy' in self.parameters:
- for rule_org in filesystem['exportPolicy']['rules']:
- for rule in self.parameters['exportPolicy']['rules']:
- if rule_org['allowedClients'] != rule['allowedClients']:
- update_filesystem = True
- elif rule_org['unixReadOnly'] != rule['unixReadOnly']:
- update_filesystem = True
- elif rule_org['unixReadWrite'] != rule['unixReadWrite']:
- update_filesystem = True
-
- if update_filesystem:
- self.na_helper.changed = True
-
- result_message = ""
-
- if self.na_helper.changed:
- if self.module.check_mode:
- # Skip changes
- result_message = "Check mode, skipping changes"
- else:
- if cd_action == "create":
- self.create_filesystem()
- result_message = "FileSystem Created"
- elif cd_action == "delete":
- self.delete_filesystem(filesystem_id)
- result_message = "FileSystem Deleted"
- else: # modify
- self.update_filesystem(filesystem_id)
- result_message = "FileSystem Updated"
- self.module.exit_json(changed=self.na_helper.changed, msg=result_message)
-
-
-def main():
- """
- Main function
- """
- aws_cvs_netapp_filesystem = AwsCvsNetappFileSystem()
- aws_cvs_netapp_filesystem.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/aws/plugins/modules/aws_netapp_cvs_pool.py b/ansible_collections/netapp/aws/plugins/modules/aws_netapp_cvs_pool.py
deleted file mode 100644
index fa4818a3b..000000000
--- a/ansible_collections/netapp/aws/plugins/modules/aws_netapp_cvs_pool.py
+++ /dev/null
@@ -1,267 +0,0 @@
-#!/usr/bin/python
-
-# (c) 2019, NetApp Inc.
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-"""AWS Cloud Volumes Services - Manage Pools"""
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'community'}
-
-
-DOCUMENTATION = '''
-
-module: aws_netapp_cvs_pool
-
-short_description: NetApp AWS Cloud Volumes Service Manage Pools.
-extends_documentation_fragment:
- - netapp.aws.netapp.awscvs
-version_added: 2.9.0
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-description:
- - Create, Update, Delete Pool on AWS Cloud Volumes Service.
-
-options:
- state:
- description:
- - Whether the specified pool should exist or not.
- choices: ['present', 'absent']
- required: true
- type: str
- region:
- description:
- - The region to which the Pool is associated.
- required: true
- type: str
- name:
- description:
- - pool name ( The human readable name of the Pool )
- - name can be used for create, update and delete operations
- required: true
- type: str
- serviceLevel:
- description:
- - The service level of the Pool
- - can be used with pool create, update operations
- choices: ['basic', 'standard', 'extreme']
- type: str
- sizeInBytes:
- description:
- - Size of the Pool in bytes
- - can be used with pool create, update operations
- - minimum value is 4000000000000 bytes
- type: int
- vendorID:
- description:
- - A vendor ID for the Pool. E.g. an ID allocated by a vendor service for the Pool.
- - can be used with pool create, update operations
- - must be unique
- type: str
- from_name:
- description:
- - rename the existing pool name ( The human readable name of the Pool )
- - I(from_name) is the existing name, and I(name) the new name
- - can be used with update operation
- type: str
-'''
-
-EXAMPLES = """
-- name: Create a new Pool
- aws_netapp_cvs_pool:
- state: present
- name: TestPoolBB12
- serviceLevel: extreme
- sizeInBytes: 4000000000000
- vendorID: ansiblePoolTestVendorBB12
- region: us-east-1
- api_url: cds-aws-bundles.netapp.com
- api_key: MyAPiKey
- secret_key: MySecretKey
-
-- name: Delete a Pool
- aws_netapp_cvs_pool:
- state: absent
- name: TestPoolBB7
- region: us-east-1
- api_url: cds-aws-bundles.netapp.com
- api_key: MyAPiKey
- secret_key: MySecretKey
-
-- name: Update a Pool
- aws_netapp_cvs_pool:
- state: present
- from_name: TestPoolBB12
- name: Mynewpool7
- vendorID: ansibleVendorMynewpool15
- serviceLevel: extreme
- sizeInBytes: 4000000000000
- region: us-east-1
- api_url: cds-aws-bundles.netapp.com
- api_key: MyAPiKey
- secret_key: MySecretKey
-
-"""
-
-RETURN = '''
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-import ansible_collections.netapp.aws.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.aws.plugins.module_utils.netapp_module import NetAppModule
-from ansible_collections.netapp.aws.plugins.module_utils.netapp import AwsCvsRestAPI
-
-
-class NetAppAWSCVS(object):
- '''Class for Pool operations '''
-
- def __init__(self):
- """
- Parse arguments, setup state variables,
- """
- self.argument_spec = netapp_utils.aws_cvs_host_argument_spec()
- self.argument_spec.update(dict(
- state=dict(required=True, choices=['present', 'absent']),
- region=dict(required=True, type='str'),
- name=dict(required=True, type='str'),
- from_name=dict(required=False, type='str'),
- serviceLevel=dict(required=False, choices=['basic', 'standard', 'extreme'], type='str'),
- sizeInBytes=dict(required=False, type='int'),
- vendorID=dict(required=False, type='str'),
- ))
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- supports_check_mode=True
- )
-
- self.na_helper = NetAppModule()
- self.parameters = self.na_helper.set_parameters(self.module.params)
- self.rest_api = AwsCvsRestAPI(self.module)
- self.sizeinbytes_min_value = 4000000000000
-
- def get_aws_netapp_cvs_pool(self, name=None):
- """
- Returns Pool object if exists else Return None
- """
- pool_info = None
-
- if name is None:
- name = self.parameters['name']
-
- pools, error = self.rest_api.get('Pools')
-
- if error is None and pools is not None:
- for pool in pools:
- if 'name' in pool and pool['region'] == self.parameters['region']:
- if pool['name'] == name:
- pool_info = pool
- break
-
- return pool_info
-
- def create_aws_netapp_cvs_pool(self):
- """
- Create a pool
- """
- api = 'Pools'
-
- for key in ['serviceLevel', 'sizeInBytes', 'vendorID']:
- if key not in self.parameters.keys() or self.parameters[key] is None:
- self.module.fail_json(changed=False, msg="Mandatory key '%s' required" % (key))
-
- pool = {
- "name": self.parameters['name'],
- "region": self.parameters['region'],
- "serviceLevel": self.parameters['serviceLevel'],
- "sizeInBytes": self.parameters['sizeInBytes'],
- "vendorID": self.parameters['vendorID']
- }
-
- dummy, error = self.rest_api.post(api, pool)
- if error is not None:
- self.module.fail_json(changed=False, msg=error)
-
- def update_aws_netapp_cvs_pool(self, update_pool_info, pool_id):
- """
- Update a pool
- """
- api = 'Pools/' + pool_id
-
- pool = {
- "name": update_pool_info['name'],
- "region": self.parameters['region'],
- "serviceLevel": update_pool_info['serviceLevel'],
- "sizeInBytes": update_pool_info['sizeInBytes'],
- "vendorID": update_pool_info['vendorID']
- }
-
- dummy, error = self.rest_api.put(api, pool)
- if error is not None:
- self.module.fail_json(changed=False, msg=error)
-
- def delete_aws_netapp_cvs_pool(self, pool_id):
- """
- Delete a pool
- """
- api = 'Pools/' + pool_id
- data = None
- dummy, error = self.rest_api.delete(api, data)
-
- if error is not None:
- self.module.fail_json(changed=False, msg=error)
-
- def apply(self):
- """
- Perform pre-checks, call functions and exit
- """
- update_required = False
- cd_action = None
-
- if 'sizeInBytes' in self.parameters.keys() and self.parameters['sizeInBytes'] < self.sizeinbytes_min_value:
- self.module.fail_json(changed=False, msg="sizeInBytes should be greater than or equal to %d" % (self.sizeinbytes_min_value))
-
- current = self.get_aws_netapp_cvs_pool()
- if self.parameters.get('from_name'):
- existing = self.get_aws_netapp_cvs_pool(self.parameters['from_name'])
- rename = self.na_helper.is_rename_action(existing, current)
- if rename is None:
- self.module.fail_json(changed=False, msg="unable to rename pool: '%s' does not exist" % self.parameters['from_name'])
- if rename:
- current = existing
- else:
- cd_action = self.na_helper.get_cd_action(current, self.parameters)
-
- if cd_action is None and self.parameters['state'] == 'present':
- keys_to_check = ['name', 'vendorID', 'sizeInBytes', 'serviceLevel']
- update_pool_info, update_required = self.na_helper.compare_and_update_values(current, self.parameters, keys_to_check)
-
- if update_required is True:
- self.na_helper.changed = True
- cd_action = 'update'
-
- if self.na_helper.changed:
- if self.module.check_mode:
- pass
- else:
- if cd_action == 'update':
- self.update_aws_netapp_cvs_pool(update_pool_info, current['poolId'])
- elif cd_action == 'create':
- self.create_aws_netapp_cvs_pool()
- elif cd_action == 'delete':
- self.delete_aws_netapp_cvs_pool(current['poolId'])
-
- self.module.exit_json(changed=self.na_helper.changed)
-
-
-def main():
- '''Main Function'''
- aws_cvs_netapp_pool = NetAppAWSCVS()
- aws_cvs_netapp_pool.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/aws/plugins/modules/aws_netapp_cvs_snapshots.py b/ansible_collections/netapp/aws/plugins/modules/aws_netapp_cvs_snapshots.py
deleted file mode 100644
index fa5c5f87c..000000000
--- a/ansible_collections/netapp/aws/plugins/modules/aws_netapp_cvs_snapshots.py
+++ /dev/null
@@ -1,245 +0,0 @@
-#!/usr/bin/python
-
-# (c) 2019, NetApp Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-"""AWS Cloud Volumes Services - Manage Snapshots"""
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'community'}
-
-
-DOCUMENTATION = '''
-
-module: aws_netapp_cvs_snapshots
-
-short_description: NetApp AWS Cloud Volumes Service Manage Snapshots.
-extends_documentation_fragment:
- - netapp.aws.netapp.awscvs
-version_added: 2.9.0
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-description:
-- Create, Update, Delete Snapshot on AWS Cloud Volumes Service.
-
-options:
- state:
- description:
- - Whether the specified snapshot should exist or not.
- required: true
- type: str
- choices: ['present', 'absent']
-
- region:
- description:
- - The region to which the snapshot belongs to.
- required: true
- type: str
-
- name:
- description:
- - Name of the snapshot
- required: true
- type: str
-
- fileSystemId:
- description:
- - Name or Id of the filesystem.
- - Required for create operation
- type: str
-
- from_name:
- description:
- - ID or Name of the snapshot to rename.
- - Required to create an snapshot called 'name' by renaming 'from_name'.
- type: str
-'''
-
-EXAMPLES = """
-- name: Create Snapshot
- aws_netapp_cvs_snapshots:
- state: present
- region: us-east-1
- name: testSnapshot
- fileSystemId: testVolume
- api_url : cds-aws-bundles.netapp.com
- api_key: myApiKey
- secret_key : mySecretKey
-
-- name: Update Snapshot
- aws_netapp_cvs_snapshots:
- state: present
- region: us-east-1
- name: testSnapshot - renamed
- from_name: testSnapshot
- fileSystemId: testVolume
- api_url : cds-aws-bundles.netapp.com
- api_key: myApiKey
- secret_key : mySecretKey
-
-- name: Delete Snapshot
- aws_netapp_cvs_snapshots:
- state: absent
- region: us-east-1
- name: testSnapshot
- api_url : cds-aws-bundles.netapp.com
- api_key: myApiKey
- secret_key : mySecretKey
-"""
-
-RETURN = """
-"""
-
-from ansible.module_utils.basic import AnsibleModule
-import ansible_collections.netapp.aws.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.aws.plugins.module_utils.netapp_module import NetAppModule
-from ansible_collections.netapp.aws.plugins.module_utils.netapp import AwsCvsRestAPI
-
-
-class AwsCvsNetappSnapshot(object):
- """
- Contains methods to parse arguments,
- derive details of AWS_CVS objects
- and send requests to AWS CVS via
- the restApi
- """
-
- def __init__(self):
- """
- Parse arguments, setup state variables,
- check paramenters and ensure request module is installed
- """
- self.argument_spec = netapp_utils.aws_cvs_host_argument_spec()
- self.argument_spec.update(dict(
- state=dict(required=True, choices=['present', 'absent']),
- region=dict(required=True, type='str'),
- name=dict(required=True, type='str'),
- from_name=dict(required=False, type='str'),
- fileSystemId=dict(required=False, type='str')
- ))
-
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- required_if=[
- ('state', 'present', ['fileSystemId']),
- ],
- supports_check_mode=True
- )
-
- self.na_helper = NetAppModule()
-
- # set up state variables
- self.parameters = self.na_helper.set_parameters(self.module.params)
- # Calling generic AWSCVS restApi class
- self.rest_api = AwsCvsRestAPI(self.module)
-
- # Checking for the parameters passed and create new parameters list
- self.data = {}
- for key in self.parameters.keys():
- self.data[key] = self.parameters[key]
-
- def get_snapshot_id(self, name):
- # Check if snapshot exists
- # Return snpashot Id If Snapshot is found, None otherwise
- list_snapshots, error = self.rest_api.get('Snapshots')
-
- if error:
- self.module.fail_json(msg=error)
-
- for snapshot in list_snapshots:
- if snapshot['name'] == name:
- return snapshot['snapshotId']
- return None
-
- def get_filesystem_id(self):
- # Check given FileSystem is exists
- # Return fileSystemId is found, None otherwise
- list_filesystem, error = self.rest_api.get('FileSystems')
-
- if error:
- self.module.fail_json(msg=error)
- for filesystem in list_filesystem:
- if filesystem['fileSystemId'] == self.parameters['fileSystemId']:
- return filesystem['fileSystemId']
- elif filesystem['creationToken'] == self.parameters['fileSystemId']:
- return filesystem['fileSystemId']
- return None
-
- def create_snapshot(self):
- # Create Snapshot
- api = 'Snapshots'
- dummy, error = self.rest_api.post(api, self.data)
- if error:
- self.module.fail_json(msg=error)
-
- def rename_snapshot(self, snapshot_id):
- # Rename Snapshot
- api = 'Snapshots/' + snapshot_id
- dummy, error = self.rest_api.put(api, self.data)
- if error:
- self.module.fail_json(msg=error)
-
- def delete_snapshot(self, snapshot_id):
- # Delete Snapshot
- api = 'Snapshots/' + snapshot_id
- dummy, error = self.rest_api.delete(api, self.data)
- if error:
- self.module.fail_json(msg=error)
-
- def apply(self):
- """
- Perform pre-checks, call functions and exit
- """
- self.snapshot_id = self.get_snapshot_id(self.data['name'])
-
- if self.snapshot_id is None and 'fileSystemId' in self.data:
- self.filesystem_id = self.get_filesystem_id()
- self.data['fileSystemId'] = self.filesystem_id
- if self.filesystem_id is None:
- self.module.fail_json(msg='Error: Specified filesystem id %s does not exist ' % self.data['fileSystemId'])
-
- cd_action = self.na_helper.get_cd_action(self.snapshot_id, self.data)
- result_message = ""
- if self.na_helper.changed:
- if self.module.check_mode:
- # Skip changes
- result_message = "Check mode, skipping changes"
- else:
- if cd_action == "delete":
- self.delete_snapshot(self.snapshot_id)
- result_message = "Snapshot Deleted"
-
- elif cd_action == "create":
- if 'from_name' in self.data:
- # If cd_action is craete and from_name is given
- snapshot_id = self.get_snapshot_id(self.data['from_name'])
- if snapshot_id is not None:
- # If resource pointed by from_name exists, rename the snapshot to name
- self.rename_snapshot(snapshot_id)
- result_message = "Snapshot Updated"
- else:
- # If resource pointed by from_name does not exists, error out
- self.module.fail_json(msg="Resource does not exist : %s" % self.data['from_name'])
- else:
- self.create_snapshot()
- # If from_name is not defined, Create from scratch.
- result_message = "Snapshot Created"
-
- self.module.exit_json(changed=self.na_helper.changed, msg=result_message)
-
-
-def main():
- """
- Main function
- """
- aws_netapp_cvs_snapshots = AwsCvsNetappSnapshot()
- aws_netapp_cvs_snapshots.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/aws/requirements.txt b/ansible_collections/netapp/aws/requirements.txt
deleted file mode 100644
index 663bd1f6a..000000000
--- a/ansible_collections/netapp/aws/requirements.txt
+++ /dev/null
@@ -1 +0,0 @@
-requests \ No newline at end of file
diff --git a/ansible_collections/netapp/aws/tests/unit/compat/__init__.py b/ansible_collections/netapp/aws/tests/unit/compat/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/ansible_collections/netapp/aws/tests/unit/compat/__init__.py
+++ /dev/null
diff --git a/ansible_collections/netapp/aws/tests/unit/compat/builtins.py b/ansible_collections/netapp/aws/tests/unit/compat/builtins.py
deleted file mode 100644
index f60ee6782..000000000
--- a/ansible_collections/netapp/aws/tests/unit/compat/builtins.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# (c) 2014, Toshio Kuratomi <tkuratomi@ansible.com>
-#
-# 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 <http://www.gnu.org/licenses/>.
-
-# Make coding more python3-ish
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-
-#
-# Compat for python2.7
-#
-
-# One unittest needs to import builtins via __import__() so we need to have
-# the string that represents it
-try:
- import __builtin__
-except ImportError:
- BUILTINS = 'builtins'
-else:
- BUILTINS = '__builtin__'
diff --git a/ansible_collections/netapp/aws/tests/unit/compat/mock.py b/ansible_collections/netapp/aws/tests/unit/compat/mock.py
deleted file mode 100644
index 0972cd2e8..000000000
--- a/ansible_collections/netapp/aws/tests/unit/compat/mock.py
+++ /dev/null
@@ -1,122 +0,0 @@
-# (c) 2014, Toshio Kuratomi <tkuratomi@ansible.com>
-#
-# 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 <http://www.gnu.org/licenses/>.
-
-# 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/netapp/aws/tests/unit/compat/unittest.py b/ansible_collections/netapp/aws/tests/unit/compat/unittest.py
deleted file mode 100644
index 73a20cf8c..000000000
--- a/ansible_collections/netapp/aws/tests/unit/compat/unittest.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# (c) 2014, Toshio Kuratomi <tkuratomi@ansible.com>
-#
-# 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 <http://www.gnu.org/licenses/>.
-
-# 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
-
-import pytest
-
-# 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')
-
- class TestCase:
- """ skip everything """
- pytestmark = pytest.mark.skip('Skipping Unit Tests on 2.6 as unittest2 may not be available')
-else:
- from unittest import *
diff --git a/ansible_collections/netapp/aws/tests/unit/plugins/module_utils/test_netapp.py b/ansible_collections/netapp/aws/tests/unit/plugins/module_utils/test_netapp.py
deleted file mode 100644
index 2fb3b7ba0..000000000
--- a/ansible_collections/netapp/aws/tests/unit/plugins/module_utils/test_netapp.py
+++ /dev/null
@@ -1,195 +0,0 @@
-# Copyright (c) 2018 NetApp
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-''' unit tests for module_utils netapp.py '''
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-
-import json
-import os.path
-import sys
-import tempfile
-
-import pytest
-
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-from ansible_collections.netapp.aws.tests.unit.compat.mock import patch
-
-import ansible_collections.netapp.aws.plugins.module_utils.netapp as netapp_utils
-
-
-if not netapp_utils.HAS_REQUESTS and sys.version_info < (2, 7):
- pytestmark = pytest.mark.skip('Skipping Unit Tests on 2.6 as requests is not be available')
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-SRR = {
- 'empty_good': (dict(), None),
- 'get_data': (dict(records=['data1', 'data2']), None),
- 'end_of_sequence': (None, "Unexpected call to send_request"),
- 'generic_error': (None, "Expected error"),
-}
-
-
-def mock_args(feature_flags=None):
- args = {
- 'api_key': 'api_key',
- 'api_url': 'api_url',
- 'secret_key': 'secret_key!',
- }
- if feature_flags is not None:
- args.update({'feature_flags': feature_flags})
- return args
-
-
-def create_module(args):
- argument_spec = netapp_utils.aws_cvs_host_argument_spec()
- set_module_args(args)
- module = basic.AnsibleModule(argument_spec)
- return module
-
-
-def create_restapi_object(args):
- module = create_module(args)
- module.fail_json = fail_json
- rest_api = netapp_utils.AwsCvsRestAPI(module)
- return rest_api
-
-
-class mockResponse:
- def __init__(self, json_data, status_code, raise_action=None):
- self.json_data = json_data
- self.status_code = status_code
- self.content = json_data
- self.raise_action = raise_action
-
- def raise_for_status(self):
- pass
-
- def json(self):
- if self.raise_action == 'bad_json':
- raise ValueError(self.raise_action)
- return self.json_data
-
-
-@patch('ansible_collections.netapp.aws.plugins.module_utils.netapp.AwsCvsRestAPI.send_request')
-def test_empty_get(mock_request):
- ''' get with no data '''
- mock_request.side_effect = [
- SRR['empty_good'],
- SRR['end_of_sequence'],
- ]
- rest_api = create_restapi_object(mock_args())
- message, error = rest_api.get('api', None)
- assert not error
- assert len(message) == 0
-
-
-@patch('ansible_collections.netapp.aws.plugins.module_utils.netapp.AwsCvsRestAPI.send_request')
-def test_get_data(mock_request):
- ''' get with data '''
- mock_request.side_effect = [
- SRR['get_data'],
- SRR['end_of_sequence'],
- ]
- rest_api = create_restapi_object(mock_args())
- message, error = rest_api.get('api', None)
- assert not error
- print('get:', message)
- assert message['records'] == SRR['get_data'][0]['records']
-
-
-def test_has_feature_success_default_0():
- ''' existing feature_flag with default of False'''
- flag = 'trace_apis'
- module = create_module(mock_args())
- value = netapp_utils.has_feature(module, flag)
- assert not value
-
-
-def test_has_feature_success_default_1():
- ''' existing feature_flag with default of True'''
- flag = 'strict_json_check'
- module = create_module(mock_args())
- value = netapp_utils.has_feature(module, flag)
- assert value
-
-
-def test_has_feature_success_user_true():
- ''' existing feature_flag with value set to True '''
- flag = 'user_deprecation_warning'
- args = dict(mock_args({flag: True}))
- module = create_module(args)
- value = netapp_utils.has_feature(module, flag)
- assert value
-
-
-def test_has_feature_success_user_false():
- ''' existing feature_flag with value set to False '''
- flag = 'user_deprecation_warning'
- args = dict(mock_args({flag: False}))
- print(args)
- module = create_module(args)
- value = netapp_utils.has_feature(module, flag)
- assert not value
-
-
-def test_has_feature_invalid_key():
- ''' existing feature_flag with unknown key '''
- flag = 'deprecation_warning_bad_key'
- module = create_module(mock_args())
- # replace ANsible fail method with ours
- module.fail_json = fail_json
- with pytest.raises(AnsibleFailJson) as exc:
- netapp_utils.has_feature(module, flag)
- msg = 'Internal error: unexpected feature flag: %s' % flag
- assert exc.value.args[0]['msg'] == msg
-
-
-@patch('requests.request')
-def test_empty_get_sent(mock_request):
- ''' get with no data '''
- mock_request.return_value = mockResponse(json_data=dict(_links='me'), status_code=200)
- rest_api = create_restapi_object(mock_args())
- message, error = rest_api.get('api', None)
- assert not error
- # only one key (_links)
- assert len(message) == 1
-
-
-@patch('requests.request')
-def test_empty_get_sent_bad_json(mock_request):
- ''' get with no data '''
- mock_request.return_value = mockResponse(json_data='anything', status_code=200, raise_action='bad_json')
- rest_api = create_restapi_object(mock_args())
- message, error = rest_api.get('api', None)
- assert error
- assert 'Expecting json, got: anything' in error
- print('errors:', rest_api.errors)
- print('debug:', rest_api.debug_logs)
-
-
-@patch('requests.request')
-def test_empty_get_sent_bad_but_empty_json(mock_request):
- ''' get with no data '''
- mock_request.return_value = mockResponse(json_data='', status_code=200, raise_action='bad_json')
- rest_api = create_restapi_object(mock_args())
- message, error = rest_api.get('api', None)
- assert error is None
- assert message is None
diff --git a/ansible_collections/netapp/aws/tests/unit/plugins/modules/test_aws_netapp_cvs_active_directory.py b/ansible_collections/netapp/aws/tests/unit/plugins/modules/test_aws_netapp_cvs_active_directory.py
deleted file mode 100644
index 98755b939..000000000
--- a/ansible_collections/netapp/aws/tests/unit/plugins/modules/test_aws_netapp_cvs_active_directory.py
+++ /dev/null
@@ -1,117 +0,0 @@
-# (c) 2019, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-''' unit tests ONTAP Ansible module: '''
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-import json
-import pytest
-import sys
-
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-from ansible_collections.netapp.aws.tests.unit.compat import unittest
-from ansible_collections.netapp.aws.tests.unit.compat.mock import patch
-import ansible_collections.netapp.aws.plugins.module_utils.netapp as netapp_utils
-
-from ansible_collections.netapp.aws.plugins.modules.aws_netapp_cvs_active_directory \
- import AwsCvsNetappActiveDir as ad_module
-
-
-if not netapp_utils.HAS_REQUESTS and sys.version_info < (2, 7):
- pytestmark = pytest.mark.skip('Skipping Unit Tests on 2.6 as requests is not be available')
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleExitJson(Exception):
- """Exception class to be raised by module.exit_json and caught by the test case"""
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
-
-
-def exit_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over exit_json; package return data into an exception"""
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- def setUp(self):
- self.mock_module_helper = patch.multiple(basic.AnsibleModule,
- exit_json=exit_json,
- fail_json=fail_json)
- self.mock_module_helper.start()
- self.addCleanup(self.mock_module_helper.stop)
-
- def set_default_args_fail_check(self):
- return dict({
- 'state': 'present',
- 'DNS': '101.102.103.123',
- 'domain': 'mydomain.com',
- 'password': 'netapp1!',
- 'username': 'myuser',
- 'api_url': 'myapiurl.com',
- 'secret_key': 'mysecretkey',
- 'api_key': 'myapikey'
- })
-
- def set_default_args_pass_check(self):
- return dict({
- 'state': 'present',
- 'DNS': '101.102.103.123',
- 'domain': 'mydomain.com',
- 'password': 'netapp1!',
- 'region': 'us-east-1',
- 'netBIOS': 'testing',
- 'username': 'myuser',
- 'api_url': 'myapiurl.com',
- 'secret_key': 'mysecretkey',
- 'api_key': 'myapikey'
- })
-
- def test_module_fail_when_required_args_missing(self):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleFailJson) as exc:
- set_module_args(self.set_default_args_fail_check())
- ad_module()
- print('Info: %s' % exc.value.args[0]['msg'])
-
- def test_module_fail_when_required_args_present(self):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleExitJson) as exc:
- set_module_args(self.set_default_args_pass_check())
- ad_module()
- exit_json(changed=True, msg="TestCase Fail when required ars are present")
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.aws.plugins.modules.aws_netapp_cvs_active_directory.AwsCvsNetappActiveDir.get_activedirectory_id')
- @patch('ansible_collections.netapp.aws.plugins.modules.aws_netapp_cvs_active_directory.AwsCvsNetappActiveDir.get_activedirectory')
- @patch('ansible_collections.netapp.aws.plugins.module_utils.netapp.AwsCvsRestAPI.post')
- def test_create_aws_netapp_cvs_activedir(self, get_post_api, get_aws_api, get_ad_id):
- set_module_args(self.set_default_args_pass_check())
- my_obj = ad_module()
-
- get_aws_api.return_value = None
- get_post_api.return_value = None, None
- get_ad_id.return_value = "123"
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print('Info: test_create_aws_netapp_cvs_active_directory: %s' % repr(exc.value))
- assert exc.value.args[0]['changed']
diff --git a/ansible_collections/netapp/aws/tests/unit/plugins/modules/test_aws_netapp_cvs_filesystems.py b/ansible_collections/netapp/aws/tests/unit/plugins/modules/test_aws_netapp_cvs_filesystems.py
deleted file mode 100644
index b5a4bad84..000000000
--- a/ansible_collections/netapp/aws/tests/unit/plugins/modules/test_aws_netapp_cvs_filesystems.py
+++ /dev/null
@@ -1,155 +0,0 @@
-# (c) 2019, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-''' unit tests AWS CVS FileSystems Ansible module: aws_netapp_cvs_filesystems'''
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-
-import json
-import pytest
-import sys
-
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-from ansible_collections.netapp.aws.tests.unit.compat import unittest
-from ansible_collections.netapp.aws.tests.unit.compat.mock import patch
-import ansible_collections.netapp.aws.plugins.module_utils.netapp as netapp_utils
-
-from ansible_collections.netapp.aws.plugins.modules.aws_netapp_cvs_filesystems \
- import AwsCvsNetappFileSystem as fileSystem_module
-
-
-if not netapp_utils.HAS_REQUESTS and sys.version_info < (2, 7):
- pytestmark = pytest.mark.skip('Skipping Unit Tests on 2.6 as requests is not be available')
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleExitJson(Exception):
- """Exception class to be raised by module.exit_json and caught by the test case"""
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
-
-
-def exit_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over exit_json; package return data into an exception"""
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- def setUp(self):
- self.mock_module_helper = patch.multiple(basic.AnsibleModule,
- exit_json=exit_json,
- fail_json=fail_json)
- self.mock_module_helper.start()
- self.addCleanup(self.mock_module_helper.stop)
-
- def set_default_args_fail_check(self):
- return dict({
- 'creationToken': 'TestFilesystem',
- 'region': 'us-east-1',
- 'quotaInBytes': 3424,
- 'serviceLevel': 'standard',
- 'api_url': 'hostname.com',
- 'api_key': 'myapikey',
- 'secret_key': 'mysecretkey'
- })
-
- def set_default_args_pass_check(self):
- return dict({
- 'state': 'present',
- 'creationToken': 'TestFilesystem',
- 'region': 'us-east-1',
- 'quotaInBytes': 3424,
- 'serviceLevel': 'standard',
- 'api_url': 'hostname.com',
- 'api_key': 'myapikey',
- 'secret_key': 'mysecretkey'
- })
-
- def set_args_create_aws_netapp_cvs_filesystems(self):
- return dict({
- 'state': 'present',
- 'creationToken': 'TestFilesystem',
- 'region': 'us-east-1',
- 'quotaInBytes': 3424,
- 'serviceLevel': 'standard',
- 'api_url': 'hostname.com',
- 'api_key': 'myapikey',
- 'secret_key': 'mysecretkey'
- })
-
- def set_args_delete_aws_netapp_cvs_filesystems(self):
- return dict({
- 'state': 'absent',
- 'creationToken': 'TestFilesystem',
- 'region': 'us-east-1',
- 'api_url': 'hostname.com',
- 'api_key': 'myapikey',
- 'secret_key': 'mysecretkey'
- })
-
- def test_module_fail_when_required_args_missing(self):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleFailJson) as exc:
- set_module_args(self.set_default_args_fail_check())
- fileSystem_module()
- print('Info: test_module_fail_when_required_args_missing: %s' % exc.value.args[0]['msg'])
-
- def test_module_fail_when_required_args_present(self):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleExitJson) as exc:
- set_module_args(self.set_default_args_pass_check())
- fileSystem_module()
- exit_json(changed=True, msg="Induced arguments check")
- print('Info: test_module_fail_when_required_args_present: %s' % exc.value.args[0]['msg'])
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.aws.plugins.modules.aws_netapp_cvs_filesystems.AwsCvsNetappFileSystem.get_filesystem_id')
- @patch('ansible_collections.netapp.aws.plugins.module_utils.netapp.AwsCvsRestAPI.get_state')
- @patch('ansible_collections.netapp.aws.plugins.module_utils.netapp.AwsCvsRestAPI.post')
- def test_create_aws_netapp_cvs_snapshots_pass(self, get_post_api, get_state_api, get_filesystem_id):
- set_module_args(self.set_args_create_aws_netapp_cvs_filesystems())
- my_obj = fileSystem_module()
- get_filesystem_id.return_value = None
- get_state_api.return_value = 'done'
- response = {'jobs': [{'jobId': 'dummy'}]}
- get_post_api.return_value = response, None
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print('Info: test_create_aws_netapp_cvs_filesystem_pass: %s' % repr(exc.value.args[0]))
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.aws.plugins.modules.aws_netapp_cvs_filesystems.AwsCvsNetappFileSystem.get_filesystem_id')
- @patch('ansible_collections.netapp.aws.plugins.modules.aws_netapp_cvs_filesystems.AwsCvsNetappFileSystem.get_filesystem')
- @patch('ansible_collections.netapp.aws.plugins.module_utils.netapp.AwsCvsRestAPI.get_state')
- @patch('ansible_collections.netapp.aws.plugins.module_utils.netapp.AwsCvsRestAPI.delete')
- def test_delete_aws_netapp_cvs_snapshots_pass(self, get_post_api, get_state_api, get_filesystem, get_filesystem_id):
- set_module_args(self.set_args_delete_aws_netapp_cvs_filesystems())
- my_obj = fileSystem_module()
- get_filesystem_id.return_value = '432-432-532423-4232'
- get_filesystem.return_value = 'dummy'
- get_state_api.return_value = 'done'
- response = {'jobs': [{'jobId': 'dummy'}]}
- get_post_api.return_value = response, None
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print('Info: test_create_aws_netapp_cvs_filesyste_pass: %s' % repr(exc.value.args[0]))
- assert exc.value.args[0]['changed']
diff --git a/ansible_collections/netapp/aws/tests/unit/plugins/modules/test_aws_netapp_cvs_pool.py b/ansible_collections/netapp/aws/tests/unit/plugins/modules/test_aws_netapp_cvs_pool.py
deleted file mode 100644
index 26e822de7..000000000
--- a/ansible_collections/netapp/aws/tests/unit/plugins/modules/test_aws_netapp_cvs_pool.py
+++ /dev/null
@@ -1,258 +0,0 @@
-# (c) 2019, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-''' Unit tests for AWS Cloud Volumes Services - Manage Pools '''
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-import json
-import pytest
-import sys
-
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-from ansible_collections.netapp.aws.tests.unit.compat import unittest
-from ansible_collections.netapp.aws.tests.unit.compat.mock import patch
-import ansible_collections.netapp.aws.plugins.module_utils.netapp as netapp_utils
-
-from ansible_collections.netapp.aws.plugins.modules.aws_netapp_cvs_pool \
- import NetAppAWSCVS as pool_module
-
-
-if not netapp_utils.HAS_REQUESTS and sys.version_info < (2, 7):
- pytestmark = pytest.mark.skip('Skipping Unit Tests on 2.6 as requests is not be available')
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleExitJson(Exception):
- """Exception class to be raised by module.exit_json and caught by the test case"""
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
-
-
-def exit_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over exit_json; package return data into an exception"""
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- def setUp(self):
- self.mock_module_helper = patch.multiple(basic.AnsibleModule,
- exit_json=exit_json,
- fail_json=fail_json)
- self.mock_module_helper.start()
- self.addCleanup(self.mock_module_helper.stop)
-
- def set_default_args_fail_check(self):
- return dict({
- 'from_name': 'TestPoolAA',
- 'name': 'TestPoolAA_new',
- 'serviceLevel': 'standard',
- 'sizeInBytes': 4000000000000,
- 'vendorID': 'ansiblePoolTestVendorA',
- 'region': 'us-east-1',
- 'api_url': 'hostname.invalid',
- 'api_key': 'myapikey',
- 'secret_key': 'mysecretkey'
- })
-
- def set_default_args_pass_check(self):
- return dict({
- 'state': 'present',
- 'from_name': 'TestPoolAA',
- 'name': 'TestPoolAA_new',
- 'serviceLevel': 'standard',
- 'sizeInBytes': 4000000000000,
- 'vendorID': 'ansiblePoolTestVendorA',
- 'region': 'us-east-1',
- 'api_url': 'hostname.invalid',
- 'api_key': 'myapikey',
- 'secret_key': 'mysecretkey'
- })
-
- def set_args_create_aws_netapp_cvs_pool(self):
- return dict({
- 'state': 'present',
- 'name': 'TestPoolAA',
- 'serviceLevel': 'standard',
- 'sizeInBytes': 4000000000000,
- 'vendorID': 'ansiblePoolTestVendorA',
- 'region': 'us-east-1',
- 'api_url': 'hostname.invalid',
- 'api_key': 'myapikey',
- 'secret_key': 'mysecretkey'
- })
-
- def set_args_update_aws_netapp_cvs_pool(self):
- return dict({
- 'state': 'present',
- 'from_name': 'TestPoolAA',
- 'name': 'TestPoolAA_new',
- 'serviceLevel': 'standard',
- 'sizeInBytes': 4000000000000,
- 'vendorID': 'ansiblePoolTestVendorA',
- 'region': 'us-east-1',
- 'api_url': 'hostname.invalid',
- 'api_key': 'myapikey',
- 'secret_key': 'mysecretkey'
- })
-
- def set_args_delete_aws_netapp_cvs_pool(self):
- return dict({
- 'state': 'absent',
- 'name': 'TestPoolAA',
- 'region': 'us-east-1',
- 'api_url': 'hostname.invalid',
- 'api_key': 'myapikey',
- 'secret_key': 'mysecretkey'
- })
-
- def test_module_fail_when_required_args_missing(self):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleFailJson) as exc:
- set_module_args(self.set_default_args_fail_check())
- pool_module()
- print('Info: test_module_fail_when_required_args_missing: %s' % exc.value.args[0]['msg'])
-
- def test_module_pass_when_required_args_present(self):
- ''' required arguments are present '''
- with pytest.raises(AnsibleExitJson) as exc:
- set_module_args(self.set_default_args_pass_check())
- pool_module()
- exit_json(changed=True, msg="Induced arguments check")
- print('Info: test_module_pass_when_required_args_present: %s' % exc.value.args[0]['msg'])
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.aws.plugins.modules.aws_netapp_cvs_pool.NetAppAWSCVS.get_aws_netapp_cvs_pool')
- @patch('ansible_collections.netapp.aws.plugins.module_utils.netapp.AwsCvsRestAPI.put')
- def test_update_aws_netapp_cvs_pool_pass(self, get_put_api, get_aws_api):
- set_module_args(self.set_args_update_aws_netapp_cvs_pool())
- my_obj = pool_module()
- my_pool = {
- "name": "Dummyname",
- "poolId": "1f63b3d0-4fd4-b4fe-1ed6-c62f5f20d975",
- "region": "us-east-1",
- "serviceLevel": "extreme",
- "sizeInBytes": 40000000000000000,
- "state": "available",
- "vendorID": "Dummy"
- }
- get_aws_api.return_value = my_pool
- get_put_api.return_value = my_pool, None
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print('Info: test_update_aws_netapp_cvs_pool_pass: %s' % repr(exc.value))
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.aws.plugins.modules.aws_netapp_cvs_pool.NetAppAWSCVS.get_aws_netapp_cvs_pool')
- @patch('ansible_collections.netapp.aws.plugins.module_utils.netapp.AwsCvsRestAPI.put')
- def test_update_aws_netapp_cvs_pool_fail(self, get_put_api, get_aws_api):
- set_module_args(self.set_args_update_aws_netapp_cvs_pool())
- my_obj = pool_module()
- my_pool = {
- "name": "Dummyname",
- "poolId": "1f63b3d0-4fd4-b4fe-1ed6-c62f5f20d975",
- "region": "us-east-1",
- "serviceLevel": "extreme",
- "sizeInBytes": 40000000000000000,
- "state": "available",
- "vendorID": "Dummy"
- }
- get_put_api.return_value = my_pool, "Error"
- get_aws_api.return_value = my_pool
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.apply()
- print('Info: test_update_aws_netapp_cvs_pool_fail: %s' % repr(exc.value))
- assert exc.value.args[0]['msg'] is not None
-
- @patch('ansible_collections.netapp.aws.plugins.modules.aws_netapp_cvs_pool.NetAppAWSCVS.get_aws_netapp_cvs_pool')
- @patch('ansible_collections.netapp.aws.plugins.module_utils.netapp.AwsCvsRestAPI.post')
- def test_create_aws_netapp_cvs_pool_pass(self, get_post_api, get_aws_api):
- set_module_args(self.set_args_create_aws_netapp_cvs_pool())
- my_obj = pool_module()
- get_aws_api.return_value = None
- get_post_api.return_value = None, None
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print('Info: test_create_aws_netapp_cvs_pool_pass: %s' % repr(exc.value))
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.aws.plugins.modules.aws_netapp_cvs_pool.NetAppAWSCVS.get_aws_netapp_cvs_pool')
- @patch('ansible_collections.netapp.aws.plugins.module_utils.netapp.AwsCvsRestAPI.post')
- def test_create_aws_netapp_cvs_pool_fail(self, get_post_api, get_aws_api):
- set_module_args(self.set_args_create_aws_netapp_cvs_pool())
- my_obj = pool_module()
- my_pool = {
- "name": "Dummyname",
- "poolId": "1f63b3d0-4fd4-b4fe-1ed6-c62f5f20d975",
- "region": "us-east-1",
- "serviceLevel": "extreme",
- "sizeInBytes": 40000000000000000,
- "state": "available",
- "vendorID": "Dummy"
- }
- get_post_api.return_value = my_pool, "Error"
- get_aws_api.return_value = None
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.apply()
- print('Info: test_create_aws_netapp_cvs_pool_fail: %s' % repr(exc.value))
- assert exc.value.args[0]['msg'] is not None
-
- @patch('ansible_collections.netapp.aws.plugins.modules.aws_netapp_cvs_pool.NetAppAWSCVS.get_aws_netapp_cvs_pool')
- @patch('ansible_collections.netapp.aws.plugins.module_utils.netapp.AwsCvsRestAPI.delete')
- def test_delete_aws_netapp_cvs_pool_pass(self, get_delete_api, get_aws_api):
- set_module_args(self.set_args_delete_aws_netapp_cvs_pool())
- my_obj = pool_module()
- my_pool = {
- "name": "Dummyname",
- "poolId": "1f63b3d0-4fd4-b4fe-1ed6-c62f5f20d975",
- "region": "us-east-1",
- "serviceLevel": "extreme",
- "sizeInBytes": 40000000000000000,
- "state": "available",
- "vendorID": "Dummy"
- }
- get_aws_api.return_value = my_pool
- get_delete_api.return_value = None, None
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print('Info: test_delete_aws_netapp_cvs_pool_pass: %s' % repr(exc.value))
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.aws.plugins.modules.aws_netapp_cvs_pool.NetAppAWSCVS.get_aws_netapp_cvs_pool')
- @patch('ansible_collections.netapp.aws.plugins.module_utils.netapp.AwsCvsRestAPI.delete')
- def test_delete_aws_netapp_cvs_pool_fail(self, get_delete_api, get_aws_api):
- set_module_args(self.set_args_delete_aws_netapp_cvs_pool())
- my_obj = pool_module()
- my_pool = {
- "name": "Dummyname",
- "poolId": "1f63b3d0-4fd4-b4fe-1ed6-c62f5f20d975",
- "region": "us-east-1",
- "serviceLevel": "extreme",
- "sizeInBytes": 40000000000000000,
- "state": "available",
- "vendorID": "Dummy"
- }
- get_delete_api.return_value = my_pool, "Error"
- get_aws_api.return_value = my_pool
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.apply()
- print('Info: test_delete_aws_netapp_cvs_pool_fail: %s' % repr(exc.value))
- assert exc.value.args[0]['msg'] is not None
diff --git a/ansible_collections/netapp/aws/tests/unit/plugins/modules/test_aws_netapp_cvs_snapshots.py b/ansible_collections/netapp/aws/tests/unit/plugins/modules/test_aws_netapp_cvs_snapshots.py
deleted file mode 100644
index bb825a2ee..000000000
--- a/ansible_collections/netapp/aws/tests/unit/plugins/modules/test_aws_netapp_cvs_snapshots.py
+++ /dev/null
@@ -1,147 +0,0 @@
-# (c) 2019, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-''' unit tests NetApp AWS CVS Snapshots Ansible module: aws_netapp_cvs_snapshots'''
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-import json
-import pytest
-import sys
-
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-from ansible_collections.netapp.aws.tests.unit.compat import unittest
-from ansible_collections.netapp.aws.tests.unit.compat.mock import patch
-import ansible_collections.netapp.aws.plugins.module_utils.netapp as netapp_utils
-
-from ansible_collections.netapp.aws.plugins.modules.aws_netapp_cvs_snapshots \
- import AwsCvsNetappSnapshot as snapshot_module
-
-
-if not netapp_utils.HAS_REQUESTS and sys.version_info < (2, 7):
- pytestmark = pytest.mark.skip('Skipping Unit Tests on 2.6 as requests is not be available')
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleExitJson(Exception):
- """Exception class to be raised by module.exit_json and caught by the test case"""
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
-
-
-def exit_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over exit_json; package return data into an exception"""
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- def setUp(self):
- self.mock_module_helper = patch.multiple(basic.AnsibleModule,
- exit_json=exit_json,
- fail_json=fail_json)
- self.mock_module_helper.start()
- self.addCleanup(self.mock_module_helper.stop)
-
- def set_default_args_fail_check(self):
- return dict({
- 'name': 'TestFilesystem',
- 'fileSystemId': 'standard',
- 'from_name': 'from_TestFilesystem',
- 'region': 'us-east-1',
- 'api_url': 'hostname.com',
- 'api_key': 'myapikey',
- 'secret_key': 'mysecretkey'
- })
-
- def set_default_args_pass_check(self):
- return dict({
- 'state': 'present',
- 'name': 'testSnapshot',
- 'fileSystemId': 'standard',
- 'from_name': 'from_TestFilesystem',
- 'region': 'us-east-1',
- 'api_url': 'hostname.com',
- 'api_key': 'myapikey',
- 'secret_key': 'mysecretkey'
- })
-
- def set_args_create_aws_netapp_cvs_snapshots(self):
- return dict({
- 'state': 'present',
- 'name': 'testSnapshot',
- 'fileSystemId': '123-4213-432-432',
- 'region': 'us-east-1',
- 'api_url': 'hostname.com',
- 'api_key': 'myapikey',
- 'secret_key': 'mysecretkey'
- })
-
- def set_args_delete_aws_netapp_cvs_snapshots(self):
- return dict({
- 'state': 'absent',
- 'name': 'testSnapshot',
- 'region': 'us-east-1',
- 'api_url': 'hostname.com',
- 'api_key': 'myapikey',
- 'secret_key': 'mysecretkey'
- })
-
- def test_module_fail_when_required_args_missing(self):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleFailJson) as exc:
- set_module_args(self.set_default_args_fail_check())
- snapshot_module()
- print('Info: test_module_fail_when_required_args_missing: %s' % exc.value.args[0]['msg'])
-
- def test_module_fail_when_required_args_present(self):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleExitJson) as exc:
- set_module_args(self.set_default_args_pass_check())
- snapshot_module()
- exit_json(changed=True, msg="Induced arguments check")
- print('Info: test_module_fail_when_required_args_present: %s' % exc.value.args[0]['msg'])
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.aws.plugins.modules.aws_netapp_cvs_snapshots.AwsCvsNetappSnapshot.get_snapshot_id')
- @patch('ansible_collections.netapp.aws.plugins.modules.aws_netapp_cvs_snapshots.AwsCvsNetappSnapshot.get_filesystem_id')
- @patch('ansible_collections.netapp.aws.plugins.module_utils.netapp.AwsCvsRestAPI.post')
- def test_create_aws_netapp_cvs_snapshots_pass(self, get_post_api, get_filesystem_id, get_snapshot_id):
- set_module_args(self.set_args_create_aws_netapp_cvs_snapshots())
- my_obj = snapshot_module()
- get_filesystem_id.return_value = 'fiesystemName'
- get_snapshot_id.return_value = None
- get_post_api.return_value = None, None
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print('Info: test_create_aws_netapp_cvs_snapshots_pass: %s' % repr(exc.value.args[0]))
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.aws.plugins.modules.aws_netapp_cvs_snapshots.AwsCvsNetappSnapshot.get_snapshot_id')
- @patch('ansible_collections.netapp.aws.plugins.module_utils.netapp.AwsCvsRestAPI.delete')
- def test_delete_aws_netapp_cvs_snapshots_pass(self, get_post_api, get_snapshot_id):
- set_module_args(self.set_args_delete_aws_netapp_cvs_snapshots())
- my_obj = snapshot_module()
- get_snapshot_id.return_value = "1f63b3d0-4fd4-b4fe-1ed6-c62f5f20d975"
- get_post_api.return_value = None, None
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print('Info: test_create_aws_netapp_cvs_snapshots_pass: %s' % repr(exc.value.args[0]))
- assert exc.value.args[0]['changed']
diff --git a/ansible_collections/netapp/aws/tests/unit/requirements.txt b/ansible_collections/netapp/aws/tests/unit/requirements.txt
deleted file mode 100644
index b754473a9..000000000
--- a/ansible_collections/netapp/aws/tests/unit/requirements.txt
+++ /dev/null
@@ -1 +0,0 @@
-requests ; python_version >= '2.7'
diff --git a/ansible_collections/netapp/azure/.github/ISSUE_TEMPLATE/bug_report.yml b/ansible_collections/netapp/azure/.github/ISSUE_TEMPLATE/bug_report.yml
deleted file mode 100644
index ed35f3ddd..000000000
--- a/ansible_collections/netapp/azure/.github/ISSUE_TEMPLATE/bug_report.yml
+++ /dev/null
@@ -1,210 +0,0 @@
----
-name: 🐛 Bug report
-description: Create a report to help us improve
-
-body:
-- type: markdown
- attributes:
- value: >
- **Thank you for wanting to report a bug in netapp.azure!**
-
-
- ⚠
- Verify first that your issue is not [already reported on
- GitHub][issue search] and keep in mind that we may have to keep
- the current behavior because [every change breaks someone's
- workflow][XKCD 1172].
- We try to be mindful about this.
-
- Also test if the latest release and devel branch are affected too.
-
-
- **Tip:** If you are seeking community support, please consider
- [Join our Slack community][ML||IRC].
-
-
-
- [ML||IRC]:
- https://join.slack.com/t/netapppub/shared_invite/zt-njcjx2sh-1VR2mEDvPcJAmPutOnP~mg
-
- [issue search]: ../search?q=is%3Aissue&type=issues
-
- [XKCD 1172]: https://xkcd.com/1172/
-
-
-- type: textarea
- attributes:
- label: Summary
- description: Explain the problem briefly below.
- placeholder: >-
- When I try to do X with netapp.azure from the devel branch on GitHub, Y
- breaks in a way Z under the env E. Here are all the details I know
- about this problem...
- validations:
- required: true
-
-- type: input
- attributes:
- label: Component Name
- description: >
- Write the short name of the rst file, module, plugin, task or
- feature below, *use your best guess if unsure*.
-
-
- **Tip:** Cannot find it in this repository? Please be advised that
- the source for some parts of the documentation are hosted outside
- of this repository. If the page you are reporting describes
- modules/plugins/etc that are not officially supported by the
- Ansible Core Engineering team, there is a good chance that it is
- coming from one of the [Ansible Collections maintained by the
- community][collections org]. If this is the case, please make sure
- to file an issue under the appropriate project there instead.
-
-
- [collections org]: /ansible-collections
- placeholder: dnf, apt, yum, pip, user etc.
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Ansible Version
- description: >-
- Paste verbatim output from `ansible --version` below, under
- the prompt line. Please don't wrap it with tripple backticks — your
- whole input will be turned into a code snippet automatically.
- render: console
- value: |
- $ ansible --version
- placeholder: |
- $ ansible --version
- ansible [core 2.11.0b4.post0] (detached HEAD ref: refs/) last updated 2021/04/02 00:33:35 (GMT +200)
- config file = None
- configured module search path = ['~/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
- ansible python module location = ~/src/github/ansible/ansible/lib/ansible
- ansible collection location = ~/.ansible/collections:/usr/share/ansible/collections
- executable location = bin/ansible
- python version = 3.9.0 (default, Oct 26 2020, 13:08:59) [GCC 10.2.0]
- jinja version = 2.11.3
- libyaml = True
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Azure NetApp Files Collection Version
- description: >-
- Azure NetApp Files Collection Version. Run `ansible-galaxy collection` and copy the entire output
- render: console
- value: |
- $ ansible-galaxy collection list
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Playbook
- description: >-
- The task from the playbook that is give you the issue
- render: console
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Steps to Reproduce
- description: |
- Describe exactly how to reproduce the problem, using a minimal test-case. It would *really* help us understand your problem if you could also pased any playbooks, configs and commands you used.
-
- **HINT:** You can paste https://gist.github.com links for larger files.
- value: |
- <!--- Paste example playbooks or commands between quotes below -->
- ```yaml (paste below)
-
- ```
- placeholder: |
- 1. Implement the following playbook:
-
- ```yaml
- ---
- # ping.yml
- - hosts: all
- gather_facts: false
- tasks:
- - ping:
- ...
- ```
- 2. Then run `ANSIBLE_DEBUG=1 ansible-playbook ping.yml -vvvvv`
- 3. An error occurs.
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Expected Results
- description: >-
- Describe what you expected to happen when running the steps above.
- placeholder: >-
- I expected X to happen because I assumed Y and was shocked
- that it did not.
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Actual Results
- description: |
- Describe what actually happened. If possible run with extra verbosity (`-vvvv`).
-
- Paste verbatim command output and don't wrap it with tripple backticks — your
- whole input will be turned into a code snippet automatically.
- render: console
- placeholder: >-
- Certificate did not match expected hostname: files.pythonhosted.org. Certificate: {'notAfter': 'Apr 28 19:20:25 2021 GMT', 'subjectAltName': ((u'DNS', 'r.ssl.fastly.net'), (u'DNS', '*.catchpoint.com'), (u'DNS', '*.cnn.io'), (u'DNS', '*.dollarshaveclub.com'), (u'DNS', '*.eater.com'), (u'DNS', '*.fastly.picmonkey.com'), (u'DNS', '*.files.saymedia-content.com'), (u'DNS', '*.ft.com'), (u'DNS', '*.meetupstatic.com'), (u'DNS', '*.nfl.com'), (u'DNS', '*.pagar.me'), (u'DNS', '*.picmonkey.com'), (u'DNS', '*.realself.com'), (u'DNS', '*.sbnation.com'), (u'DNS', '*.shakr.com'), (u'DNS', '*.streamable.com'), (u'DNS', '*.surfly.com'), (u'DNS', '*.theverge.com'), (u'DNS', '*.thrillist.com'), (u'DNS', '*.vox-cdn.com'), (u'DNS', '*.vox.com'), (u'DNS', '*.voxmedia.com'), (u'DNS', 'eater.com'), (u'DNS', 'ft.com'), (u'DNS', 'i.gse.io'), (u'DNS', 'picmonkey.com'), (u'DNS', 'realself.com'), (u'DNS', 'static.wixstatic.com'), (u'DNS', 'streamable.com'), (u'DNS', 'surfly.com'), (u'DNS', 'theverge.com'), (u'DNS', 'vox-cdn.com'), (u'DNS', 'vox.com'), (u'DNS', 'www.joyent.com')), 'subject': ((('countryName', u'US'),), (('stateOrProvinceName', u'California'),), (('localityName', u'San Francisco'),), (('organizationName', u'Fastly, Inc'),), (('commonName', u'r.ssl.fastly.net'),))}
- Exception:
- Traceback (most recent call last):
- File "/usr/local/lib/python2.6/dist-packages/pip/basecommand.py", line 215, in main
- status = self.run(options, args)
- File "/usr/local/lib/python2.6/dist-packages/pip/commands/install.py", line 335, in run
- wb.build(autobuilding=True)
- File "/usr/local/lib/python2.6/dist-packages/pip/wheel.py", line 749, in build
- self.requirement_set.prepare_files(self.finder)
- File "/usr/local/lib/python2.6/dist-packages/pip/req/req_set.py", line 380, in prepare_files
- ignore_dependencies=self.ignore_dependencies))
- File "/usr/local/lib/python2.6/dist-packages/pip/req/req_set.py", line 620, in _prepare_file
- session=self.session, hashes=hashes)
- File "/usr/local/lib/python2.6/dist-packages/pip/download.py", line 821, in unpack_url
- hashes=hashes
- File "/usr/local/lib/python2.6/dist-packages/pip/download.py", line 659, in unpack_http_url
- hashes)
- File "/usr/local/lib/python2.6/dist-packages/pip/download.py", line 853, in _download_http_url
- stream=True,
- File "/usr/local/lib/python2.6/dist-packages/pip/_vendor/requests/sessions.py", line 521, in get
- return self.request('GET', url, **kwargs)
- File "/usr/local/lib/python2.6/dist-packages/pip/download.py", line 386, in request
- return super(PipSession, self).request(method, url, *args, **kwargs)
- File "/usr/local/lib/python2.6/dist-packages/pip/_vendor/requests/sessions.py", line 508, in request
- resp = self.send(prep, **send_kwargs)
- File "/usr/local/lib/python2.6/dist-packages/pip/_vendor/requests/sessions.py", line 618, in send
- r = adapter.send(request, **kwargs)
- File "/usr/local/lib/python2.6/dist-packages/pip/_vendor/cachecontrol/adapter.py", line 47, in send
- resp = super(CacheControlAdapter, self).send(request, **kw)
- File "/usr/local/lib/python2.6/dist-packages/pip/_vendor/requests/adapters.py", line 506, in send
- raise SSLError(e, request=request)
- SSLError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Max retries exceeded with url: /packages/ef/ab/aa12712415809bf698e719b307419f953e25344e8f42d557533d7a02b276/netapp_lib-2020.7.16-py2-none-any.whl (Caused by SSLError(CertificateError("hostname 'files.pythonhosted.org' doesn't match either of 'r.ssl.fastly.net', '*.catchpoint.com', '*.cnn.io', '*.dollarshaveclub.com', '*.eater.com', '*.fastly.picmonkey.com', '*.files.saymedia-content.com', '*.ft.com', '*.meetupstatic.com', '*.nfl.com', '*.pagar.me', '*.picmonkey.com', '*.realself.com', '*.sbnation.com', '*.shakr.com', '*.streamable.com', '*.surfly.com', '*.theverge.com', '*.thrillist.com', '*.vox-cdn.com', '*.vox.com', '*.voxmedia.com', 'eater.com', 'ft.com', 'i.gse.io', 'picmonkey.com', 'realself.com', 'static.wixstatic.com', 'streamable.com', 'surfly.com', 'theverge.com', 'vox-cdn.com', 'vox.com', 'www.joyent.com'",),))
- ERROR: Command "/usr/bin/python2.6 /root/ansible/test/lib/ansible_test/_data/quiet_pip.py install --disable-pip-version-check -r /root/ansible/test/lib/ansible_test/_data/requirements/units.txt -r tests/unit/requirements.txt -c /root/ansible/test/lib/ansible_test/_data/requirements/constraints.txt" returned exit status 2.
- ERROR: Command "docker exec d47eb360db4ce779c1f690db964655b76e68895c4360ff252c46fe7fe6f5c75a /usr/bin/env ANSIBLE_TEST_CONTENT_ROOT=/root/ansible_collections/netapp/ontap LC_ALL=en_US.UTF-8 /usr/bin/python3.6 /root/ansible/bin/ansible-test units --metadata tests/output/.tmp/metadata-9i2qfrcl.json --truncate 200 --redact --color yes --requirements --python default --requirements-mode only" returned exit status 1.
- validations:
- required: true
-
-
-- type: markdown
- attributes:
- value: >
- *One last thing...*
-
-
- Thank you for your collaboration!
-
-
-...
diff --git a/ansible_collections/netapp/azure/.github/ISSUE_TEMPLATE/feature_request.yml b/ansible_collections/netapp/azure/.github/ISSUE_TEMPLATE/feature_request.yml
deleted file mode 100644
index 621d52529..000000000
--- a/ansible_collections/netapp/azure/.github/ISSUE_TEMPLATE/feature_request.yml
+++ /dev/null
@@ -1,100 +0,0 @@
----
-name: ✨ Feature request
-description: Suggest an idea for this project
-
-body:
-- type: markdown
- attributes:
- value: >
- **Thank you for wanting to suggest a feature for netapp.azure!**
-
- 💡
- Before you go ahead with your request, please first consider if it
- would be useful for majority of the netapp.azure users. As a
- general rule of thumb, any feature that is only of interest to a
- small sub group should be [implemented in a third-party Ansible
- Collection][contribute to collections] or maybe even just your
- project alone. Be mindful of the fact that the essential
- netapp.azure features have a broad impact.
-
-
- <details>
- <summary>
- ❗ Every change breaks someone's workflow.
- </summary>
-
-
- [![❗ Every change breaks someone's workflow.
- ](https://imgs.xkcd.com/comics/workflow.png)
- ](https://xkcd.com/1172/)
- </details>
-
-
- ⚠
- Verify first that your idea is not [already requested on
- GitHub][issue search].
-
- Also test if the main branch does not already implement this.
-
-
-- type: textarea
- attributes:
- label: Summary
- description: >
- Describe the new feature/improvement you would like briefly below.
-
-
- What's the problem this feature will solve?
-
- What are you trying to do, that you are unable to achieve
- with netapp.azure as it currently stands?
-
-
- * Provide examples of real-world use cases that this would enable
- and how it solves the problem you described.
-
- * How do you solve this now?
-
- * Have you tried to work around the problem using other tools?
-
- * Could there be a different approach to solving this issue?
-
- placeholder: >-
- I am trying to do X with netapp.azure from the devel branch on GitHub and
- I think that implementing a feature Y would be very helpful for me and
- every other user of netapp.azure because of Z.
- validations:
- required: true
-
-- type: input
- attributes:
- label: Component Name
- description: >
- Write the short name of the module, plugin, task or feature below,
- *use your best guess if unsure*.
-
-
- [collections org]: /ansible-collections
- placeholder: dnf, apt, yum, pip, user etc.
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Additional Information
- description: |
- Describe how the feature would be used, why it is needed and what it would solve.
-
- **HINT:** You can paste https://gist.github.com links for larger files.
- value: |
- <!--- Paste example playbooks or commands between quotes below -->
- ```yaml (paste below)
-
- ```
- placeholder: >-
- I asked on https://stackoverflow.com/.... and the community
- advised me to do X, Y and Z.
- validations:
- required: true
-
-...
diff --git a/ansible_collections/netapp/azure/.github/workflows/codeql-analysis.yml b/ansible_collections/netapp/azure/.github/workflows/codeql-analysis.yml
deleted file mode 100644
index eea54a872..000000000
--- a/ansible_collections/netapp/azure/.github/workflows/codeql-analysis.yml
+++ /dev/null
@@ -1,71 +0,0 @@
-# For most projects, this workflow file will not need changing; you simply need
-# to commit it to your repository.
-#
-# You may wish to alter this file to override the set of languages analyzed,
-# or to provide custom queries or build logic.
-#
-# ******** NOTE ********
-# We have attempted to detect the languages in your repository. Please check
-# the `language` matrix defined below to confirm you have the correct set of
-# supported CodeQL languages.
-#
-name: "CodeQL"
-
-on:
- push:
- branches: [ main ]
- pull_request:
- # The branches below must be a subset of the branches above
- branches: [ main ]
- schedule:
- - cron: '34 20 * * 6'
-
-jobs:
- analyze:
- name: Analyze
- runs-on: ubuntu-latest
- permissions:
- actions: read
- contents: read
- security-events: write
-
- strategy:
- fail-fast: false
- matrix:
- language: [ 'python' ]
- # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
- # Learn more:
- # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v2
-
- # Initializes the CodeQL tools for scanning.
- - name: Initialize CodeQL
- uses: github/codeql-action/init@v1
- with:
- languages: ${{ matrix.language }}
- # If you wish to specify custom queries, you can do so here or in a config file.
- # By default, queries listed here will override any specified in a config file.
- # Prefix the list here with "+" to use these queries and those in the config file.
- # queries: ./path/to/local/query, your-org/your-repo/queries@main
-
- # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
- # If this step fails, then you should remove it and run the build manually (see below)
- - name: Autobuild
- uses: github/codeql-action/autobuild@v1
-
- # ℹ️ Command-line programs to run using the OS shell.
- # 📚 https://git.io/JvXDl
-
- # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
- # and modify them (or add more) to build your code if your project
- # uses a compiled language
-
- #- run: |
- # make bootstrap
- # make release
-
- - name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@v1
diff --git a/ansible_collections/netapp/azure/.github/workflows/coverage.yml b/ansible_collections/netapp/azure/.github/workflows/coverage.yml
deleted file mode 100644
index 924232e4c..000000000
--- a/ansible_collections/netapp/azure/.github/workflows/coverage.yml
+++ /dev/null
@@ -1,45 +0,0 @@
-name: NetApp.azure Ansible Coverage
-
-on:
- push:
- pull_request:
- schedule:
- - cron: '0 6 * * *'
-
-jobs:
- sanity:
- name: Coverage on Azure
- runs-on: ubuntu-latest
-
- steps:
- - name: Check out code
- uses: actions/checkout@v2
-
- - name: Set up Python
- uses: actions/setup-python@v2
- with:
- python-version: 3.8
-
- - name: Install ansible stable-2.11
- run: pip install https://github.com/ansible/ansible/archive/stable-2.11.tar.gz --disable-pip-version-check
-
- - name: Make directory to make ansible-test happy
- run: |
- pwd
- mkdir -p ansible_collections/netapp/azure/
- rsync -av . ansible_collections/netapp/azure/ --exclude ansible_collections/netapp/azure/
-
- - name: Run Unit Tests
- run: ansible-test units --coverage --color --docker --python 3.8
- working-directory: ansible_collections/netapp/azure/
-
- # ansible-test support producing code coverage date
- - name: Generate coverage report
- run: ansible-test coverage xml -v --requirements --group-by command --group-by version
- working-directory: ansible_collections/netapp/azure/
-
- - name: Upload coverage to Codecov
- uses: codecov/codecov-action@v2
- with:
- working-directory: ansible_collections/netapp/azure/
- verbose: true \ No newline at end of file
diff --git a/ansible_collections/netapp/azure/.github/workflows/main.yml b/ansible_collections/netapp/azure/.github/workflows/main.yml
deleted file mode 100644
index 37408fb67..000000000
--- a/ansible_collections/netapp/azure/.github/workflows/main.yml
+++ /dev/null
@@ -1,67 +0,0 @@
-name: NetApp Ansible CI
-
-on:
- push:
- pull_request:
- schedule:
- - cron: '0 6 * * *'
-
-jobs:
- sanity_azure:
- name: Sanity (${{ matrix.ansible }} on Azure ANF)
- runs-on: ubuntu-latest
- strategy:
- fail-fast: false
- matrix:
- ansible:
- - stable-2.9
- - stable-2.10
- - stable-2.11
- - stable-2.12
- - stable-2.13
- - devel
- collection: [azure]
-
- steps:
- - name: Check out code
- uses: actions/checkout@v2
-
- - name: Set up Python
- uses: actions/setup-python@v2
- with:
- # Ansible 2.14 requires 3.9 as a minimum
- python-version: 3.9
-
- - name: Install ansible (${{ matrix.ansible }})
- run: pip install https://github.com/ansible/ansible/archive/${{ matrix.ansible }}.tar.gz --disable-pip-version-check
-
- - name: Delete collection tar file (azure)
- run: rm -f /tmp/netapp-azure*
-
- - name: Check collection path (azure)
- run: |
- pwd
- ls
-
- - name: Build collection (azure)
- run: ansible-galaxy collection build --output-path /tmp .
-
- - name: Install collection (azure)
- run: ansible-galaxy collection install /tmp/netapp-azure*
-
- - name: Delete collection tar file (azure)
- run: rm -f /tmp/netapp-azure*
-
- - name: Run sanity tests (azure)
- run: ansible-test sanity --docker -v --color
- working-directory: /home/runner/.ansible/collections/ansible_collections/netapp/azure
-
- - name: Make directory to make ansible-test happy
- run: |
- pwd
- mkdir -p ansible_collections/netapp/azure/
- rsync -av . ansible_collections/netapp/azure/ --exclude ansible_collections/netapp/azure/
-
- - name: Run Unit Tests
- run: ansible-test units --docker -v --color
- working-directory: ansible_collections/netapp/azure/
diff --git a/ansible_collections/netapp/azure/CHANGELOG.rst b/ansible_collections/netapp/azure/CHANGELOG.rst
deleted file mode 100644
index fc18835a2..000000000
--- a/ansible_collections/netapp/azure/CHANGELOG.rst
+++ /dev/null
@@ -1,171 +0,0 @@
-=================================================
-Azure NetApp Files (ANF) Collection Release Notes
-=================================================
-
-.. contents:: Topics
-
-
-v21.10.0
-========
-
-Minor Changes
--------------
-
-- PR1 - allow usage of Ansible module group defaults - for Ansible 2.12+.
-
-v21.9.0
-=======
-
-Minor Changes
--------------
-
-- azure_rm_netapp_volume - new option ``feature_flags`` to selectively enable/disable a feature.
-
-Bugfixes
---------
-
-- azure_rm_netapp_volume - 'Change Ownership' is not permitted when creating NFSv4.1 volume with latest azure-mgmt-netapp package (4.0.0).
-
-v21.8.1
-=======
-
-Bugfixes
---------
-
-- Hub Automation cannot generate documentation (cannot use doc fragments from another collection).
-
-v21.8.0
-=======
-
-Bugfixes
---------
-
-- fix CI pipeline as azcollection does not support python 2.6.
-- fix CI pipeline as ignores are not required with latest azcollection.
-
-v21.7.0
-=======
-
-Bugfixes
---------
-
-- fix CI pipeline to work with azcollection, and isolate UTs from azcollection.
-
-v21.6.0
-=======
-
-Minor Changes
--------------
-
-- azure_rm_netapp_account - support additional authentication schemes provided by AzureRMModuleBase.
-- azure_rm_netapp_capacity_pool - support additional authentication schemes provided by AzureRMModuleBase, and tags.
-- azure_rm_netapp_capacity_pool - wait for completion when creating, modifying, or deleting a pool.
-- azure_rm_netapp_snapshot - support additional authentication schemes provided by AzureRMModuleBase.
-- azure_rm_netapp_snapshot - wait for completion when creating, modifying, or deleting a pool.
-- azure_rm_netapp_volume - support additional authentication schemes provided by AzureRMModuleBase, and tags.
-
-v21.5.0
-=======
-
-Minor Changes
--------------
-
-- azure_rm_netapp_volume - enable changes in volume size.
-- azure_rm_netapp_volume - rename msg to mount_path, as documented in RETURN.
-
-v21.3.0
-=======
-
-Minor Changes
--------------
-
-- azure_rm_netapp_account - new option ``active_directories`` to support SMB volumes.
-- azure_rm_netapp_account - new suboptions ``ad_name``, ``kdc_ip``, ``service_root_ca_certificate``` for Active Directory.
-- azure_rm_netapp_volume - new option ``protocol_types`` to support SMB volumes.
-
-Bugfixes
---------
-
-- azure_rm_netapp_account - wait for job completion for asynchroneous requests, and report belated errors.
-- support for azure-mgmt-netapp 1.0.0, while maintaining compatibility with 0.10.0.
-
-v21.2.0
-=======
-
-Minor Changes
--------------
-
-- azure_rm_netapp_account - new option ``active_directories`` to support SMB volumes.
-- azure_rm_netapp_volume - new option ``protocol_types`` to support SMB volumes.
-- azure_rm_netapp_volume - new option ``subnet_name`` as subnet_id is ambiguous. subnet_id is now aliased to subnet_name.
-
-Bugfixes
---------
-
-- azure_rm_netapp_volume - fix 'Nonetype' object is not subscriptable exception when mount target is not created.
-
-v20.8.0
-=======
-
-Minor Changes
--------------
-
-- azure_rm_netapp_capacity_pool - Updated ANF capacity pool modify function for size parameter mandatory issue.
-- use a three group format for version_added. So 2.7 becomes 2.7.0. Same thing for 2.8 and 2.9.
-
-v20.7.0
-=======
-
-Bugfixes
---------
-
-- azure_rm_netapp_capacity_pool - fixed idempotency for delete operation.
-
-v20.6.0
-=======
-
-Minor Changes
--------------
-
-- azure_rm_netapp_capacity_pool - now allows modify for size.
-- azure_rm_netapp_volume - now returns complete mount_path of the volume specified.
-
-v20.5.0
-=======
-
-Minor Changes
--------------
-
-- azure_rm_netapp_account - new option ``tags``.
-- azure_rm_netapp_capacity_pool - new option ``service_level``.
-- azure_rm_netapp_volume - new option ``size``.
-- azure_rm_netapp_volume - new option ``vnet_resource_group_for_subnet``, resource group for virtual_network and subnet_id to be used.
-- azure_rm_netapp_volume - now returns mount_path of the volume specified.
-
-v20.4.0
-=======
-
-Bugfixes
---------
-
-- fix changes to azure-mgmt-netapp as per new release.
-- removed ONTAP dependency import.
-
-v20.2.0
-=======
-
-Bugfixes
---------
-
-- galaxy.yml - fix path to github repository.
-
-v19.10.0
-========
-
-New Modules
------------
-
-- netapp.azure.azure_rm_netapp_account - Manage NetApp Azure Files Account
-- netapp.azure.azure_rm_netapp_capacity_pool - Manage NetApp Azure Files capacity pool
-- netapp.azure.azure_rm_netapp_snapshot - Manage NetApp Azure Files Snapshot
-- netapp.azure.azure_rm_netapp_volume - Manage NetApp Azure Files Volume
diff --git a/ansible_collections/netapp/azure/COPYING b/ansible_collections/netapp/azure/COPYING
deleted file mode 100644
index 94a9ed024..000000000
--- a/ansible_collections/netapp/azure/COPYING
+++ /dev/null
@@ -1,674 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
- The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works. By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users. We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors. You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
- To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights. Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received. You must make sure that they, too, receive
-or can get the source code. And you must show them these terms so they
-know their rights.
-
- Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
- For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software. For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
- Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so. This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software. The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable. Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products. If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
- Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary. To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS
-
- 0. Definitions.
-
- "This License" refers to version 3 of the GNU General Public License.
-
- "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
- "The Program" refers to any copyrightable work licensed under this
-License. Each licensee is addressed as "you". "Licensees" and
-"recipients" may be individuals or organizations.
-
- To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy. The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
- A "covered work" means either the unmodified Program or a work based
-on the Program.
-
- To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy. Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
- To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies. Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
- An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License. If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
- 1. Source Code.
-
- The "source code" for a work means the preferred form of the work
-for making modifications to it. "Object code" means any non-source
-form of a work.
-
- A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
- The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form. A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
- The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities. However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work. For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
- The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
- The Corresponding Source for a work in source code form is that
-same work.
-
- 2. Basic Permissions.
-
- All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met. This License explicitly affirms your unlimited
-permission to run the unmodified Program. The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work. This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
- You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force. You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright. Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
- Conveying under any other circumstances is permitted solely under
-the conditions stated below. Sublicensing is not allowed; section 10
-makes it unnecessary.
-
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
- No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
- When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
- 4. Conveying Verbatim Copies.
-
- You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
- You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
- 5. Conveying Modified Source Versions.
-
- You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
- a) The work must carry prominent notices stating that you modified
- it, and giving a relevant date.
-
- b) The work must carry prominent notices stating that it is
- released under this License and any conditions added under section
- 7. This requirement modifies the requirement in section 4 to
- "keep intact all notices".
-
- c) You must license the entire work, as a whole, under this
- License to anyone who comes into possession of a copy. This
- License will therefore apply, along with any applicable section 7
- additional terms, to the whole of the work, and all its parts,
- regardless of how they are packaged. This License gives no
- permission to license the work in any other way, but it does not
- invalidate such permission if you have separately received it.
-
- d) If the work has interactive user interfaces, each must display
- Appropriate Legal Notices; however, if the Program has interactive
- interfaces that do not display Appropriate Legal Notices, your
- work need not make them do so.
-
- A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit. Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
- 6. Conveying Non-Source Forms.
-
- You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
- a) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by the
- Corresponding Source fixed on a durable physical medium
- customarily used for software interchange.
-
- b) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that product
- model, to give anyone who possesses the object code either (1) a
- copy of the Corresponding Source for all the software in the
- product that is covered by this License, on a durable physical
- medium customarily used for software interchange, for a price no
- more than your reasonable cost of physically performing this
- conveying of source, or (2) access to copy the
- Corresponding Source from a network server at no charge.
-
- c) Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
- alternative is allowed only occasionally and noncommercially, and
- only if you received the object code with such an offer, in accord
- with subsection 6b.
-
- d) Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to the
- Corresponding Source in the same way through the same place at no
- further charge. You need not require recipients to copy the
- Corresponding Source along with the object code. If the place to
- copy the object code is a network server, the Corresponding Source
- may be on a different server (operated by you or a third party)
- that supports equivalent copying facilities, provided you maintain
- clear directions next to the object code saying where to find the
- Corresponding Source. Regardless of what server hosts the
- Corresponding Source, you remain obligated to ensure that it is
- available for as long as needed to satisfy these requirements.
-
- e) Convey the object code using peer-to-peer transmission, provided
- you inform other peers where the object code and Corresponding
- Source of the work are being offered to the general public at no
- charge under subsection 6d.
-
- A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
- A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling. In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage. For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product. A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
- "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source. The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
- If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information. But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
- The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed. Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
- Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
- 7. Additional Terms.
-
- "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law. If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
- When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it. (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.) You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
- Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
- a) Disclaiming warranty or limiting liability differently from the
- terms of sections 15 and 16 of this License; or
-
- b) Requiring preservation of specified reasonable legal notices or
- author attributions in that material or in the Appropriate Legal
- Notices displayed by works containing it; or
-
- c) Prohibiting misrepresentation of the origin of that material, or
- requiring that modified versions of such material be marked in
- reasonable ways as different from the original version; or
-
- d) Limiting the use for publicity purposes of names of licensors or
- authors of the material; or
-
- e) Declining to grant rights under trademark law for use of some
- trade names, trademarks, or service marks; or
-
- f) Requiring indemnification of licensors and authors of that
- material by anyone who conveys the material (or modified versions of
- it) with contractual assumptions of liability to the recipient, for
- any liability that these contractual assumptions directly impose on
- those licensors and authors.
-
- All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10. If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term. If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
- If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
- Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
- 8. Termination.
-
- You may not propagate or modify a covered work except as expressly
-provided under this License. Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
- However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
- Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
- Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
- 9. Acceptance Not Required for Having Copies.
-
- You are not required to accept this License in order to receive or
-run a copy of the Program. Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance. However,
-nothing other than this License grants you permission to propagate or
-modify any covered work. These actions infringe copyright if you do
-not accept this License. Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
- 10. Automatic Licensing of Downstream Recipients.
-
- Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License. You are not responsible
-for enforcing compliance by third parties with this License.
-
- An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations. If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
- You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License. For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
- 11. Patents.
-
- A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based. The
-work thus licensed is called the contributor's "contributor version".
-
- A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version. For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
- Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
- In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement). To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
- If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients. "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
- If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
- A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License. You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
- Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
- 12. No Surrender of Others' Freedom.
-
- If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all. For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
- 13. Use with the GNU Affero General Public License.
-
- Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work. The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
- 14. Revised Versions of this License.
-
- The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
- If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
- Later license versions may give you additional or different
-permissions. However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
- 15. Disclaimer of Warranty.
-
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. Limitation of Liability.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
- 17. Interpretation of Sections 15 and 16.
-
- If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program 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.
-
- This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
- If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
- <program> Copyright (C) <year> <name of author>
- This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
- You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
- The GNU General Public License does not permit incorporating your program
-into proprietary programs. If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License. But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/ansible_collections/netapp/azure/FILES.json b/ansible_collections/netapp/azure/FILES.json
deleted file mode 100644
index b91cf6173..000000000
--- a/ansible_collections/netapp/azure/FILES.json
+++ /dev/null
@@ -1,705 +0,0 @@
-{
- "files": [
- {
- "name": ".",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "requirements.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3fc6781dfd99664ea3df19e10ff3fd4cb5fcb9a1ffab3974bf29a072688fac2b",
- "format": 1
- },
- {
- "name": "plugins",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "plugins/doc_fragments",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "plugins/doc_fragments/netapp.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "05eeac3f09944a70935c66674fecd48fc0992c2706bc4168b10f54dff6517b6e",
- "format": 1
- },
- {
- "name": "plugins/doc_fragments/azure.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e2fddafaafe92473737d8a9b23ad23ce82703b0144a9930f8ace78f7138144f9",
- "format": 1
- },
- {
- "name": "plugins/doc_fragments/azure_tags.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e8c9d720dbc7605d3ee66799e8e81d0886e404c9a07b6b9b8edc844e0646de64",
- "format": 1
- },
- {
- "name": "plugins/module_utils",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "plugins/module_utils/azure_rm_netapp_common.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7dffba3ae74d685e191305887df483f7bcded81cf80618a920c3609de0828777",
- "format": 1
- },
- {
- "name": "plugins/module_utils/netapp_module.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "44ebf2058eef2cc291d84bda55a9d22745a54ea08244d2c3fa498c835a60412f",
- "format": 1
- },
- {
- "name": "plugins/modules",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "plugins/modules/azure_rm_netapp_volume.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "57f7917d51e630e28625b9aed1e055fc993912079ec84066b9b4dc00a79fc076",
- "format": 1
- },
- {
- "name": "plugins/modules/azure_rm_netapp_snapshot.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cb97e5fe758ded5c061c587caa4b5ece7e5093aa8735d28b5915b8ffae10493d",
- "format": 1
- },
- {
- "name": "plugins/modules/azure_rm_netapp_account.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "371e98c5eb914d5b5b29d5a38a0128a473a56503b24a0117cad094cd35fa4f68",
- "format": 1
- },
- {
- "name": "plugins/modules/azure_rm_netapp_capacity_pool.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "45ae9bf9be901a5744da83e0476439cc4afc583f996b5116e63a3ff1388789aa",
- "format": 1
- },
- {
- "name": "tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/compat",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/compat/unittest.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cba95d18c5b39c6f49714eacf1ac77452c2e32fa087c03cf01aacd19ae597b0f",
- "format": 1
- },
- {
- "name": "tests/unit/compat/builtins.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0ca4cac919e166b25e601e11acb01f6957dddd574ff0a62569cb994a5ecb63e1",
- "format": 1
- },
- {
- "name": "tests/unit/compat/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "tests/unit/compat/mock.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0af958450cf6de3fbafe94b1111eae8ba5a8dbe1d785ffbb9df81f26e4946d99",
- "format": 1
- },
- {
- "name": "tests/unit/requirements.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1776552fe8fe8ec7bc9bb0d8323b4892f297ac3a000d438ffce73c82487eb688",
- "format": 1
- },
- {
- "name": "tests/unit/plugins",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/plugins/module_utils",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/plugins/module_utils/test_netapp_module.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "26d17aa4e1be7ddd99dd8150f3f72726693835df4480f09f63d665ba4568054d",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_azure_rm_netapp_volume_import.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6fb1715ddd3de877a50b0f8dd97d5b7e4518ca309f81f188eeedf0da7bd8ed6d",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_azure_rm_netapp_capacity_pool.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "35b9437b1e70cb214f9fb2599f48a2d51fb7f025be21487608a527000cdca225",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_azure_rm_netapp_snapshot.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7fb834aa39535b9eccaab1c67293e4fd44d96c2b8aec2bf963d3dee0e6e939be",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_azure_rm_netapp_volume.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "42e2a55717c6640dc3343055a758b4f930b9010c9d49351dddcc86e828557d5a",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_azure_rm_netapp_account.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d138b9ecf3ad3b50bc4757b2dce610f770523903da67ace63243b66fe1959857",
- "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/azure_rm_netapp_volume",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/azure_rm_netapp_volume/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/azure_rm_netapp_volume/tasks/main.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "37ecd68e07721ba9b164a9cf650354e65d9b522a8fa80ee5dd0a0f85ecbbb82c",
- "format": 1
- },
- {
- "name": "tests/integration/targets/azure_rm_netapp_volume/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/azure_rm_netapp_volume/meta/main.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
- "format": 1
- },
- {
- "name": "tests/integration/targets/azure_rm_netapp_volume/aliases",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "262ad6ab8a8087f2f21d4f26a2c2d02c347a7edf0fb1af8fdb931ab1c1087bbb",
- "format": 1
- },
- {
- "name": "tests/integration/targets/azure_rm_netapp_capacity_pool",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/azure_rm_netapp_capacity_pool/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/azure_rm_netapp_capacity_pool/tasks/main.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "725cf3d8200cc95ad524962e33008627f642ac6cb17daee6d833d7ad4990c904",
- "format": 1
- },
- {
- "name": "tests/integration/targets/azure_rm_netapp_capacity_pool/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/azure_rm_netapp_capacity_pool/meta/main.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "86ade1ce7ec530fef84440672efaf3b60c253946bb82f5f0a134a9691bc6ffad",
- "format": 1
- },
- {
- "name": "tests/integration/targets/azure_rm_netapp_capacity_pool/aliases",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6d10b8feb73c18dc63753fe195137e2505f925ba1cbcdf5df43f67ad8c93f7a3",
- "format": 1
- },
- {
- "name": "tests/integration/targets/azure_rm_netapp_snapshot",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/azure_rm_netapp_snapshot/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/azure_rm_netapp_snapshot/tasks/main.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2c1ad3044c2063456e66ffca7f717b0d5b01561685df50819b3ddab8f256f1e3",
- "format": 1
- },
- {
- "name": "tests/integration/targets/azure_rm_netapp_snapshot/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/azure_rm_netapp_snapshot/meta/main.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
- "format": 1
- },
- {
- "name": "tests/integration/targets/azure_rm_netapp_snapshot/aliases",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "262ad6ab8a8087f2f21d4f26a2c2d02c347a7edf0fb1af8fdb931ab1c1087bbb",
- "format": 1
- },
- {
- "name": "tests/integration/targets/azure_rm_netapp_account",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/azure_rm_netapp_account/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/azure_rm_netapp_account/tasks/main.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "af6c1c6108bde6652e3e6c3fa84bbf33b9e8e8d214fd5e6e2096d8a900993adb",
- "format": 1
- },
- {
- "name": "tests/integration/targets/azure_rm_netapp_account/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/azure_rm_netapp_account/meta/main.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f",
- "format": 1
- },
- {
- "name": "tests/integration/targets/azure_rm_netapp_account/aliases",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "262ad6ab8a8087f2f21d4f26a2c2d02c347a7edf0fb1af8fdb931ab1c1087bbb",
- "format": 1
- },
- {
- "name": "tests/runner",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/runner/requirements",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/runner/requirements/integration.cloud.azure.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "48edd11776e45cc283be0d76efed83271645ff082d0d22c23d8a16ede3f13104",
- "format": 1
- },
- {
- "name": "tests/runner/requirements/unit.cloud.azure.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "48edd11776e45cc283be0d76efed83271645ff082d0d22c23d8a16ede3f13104",
- "format": 1
- },
- {
- "name": "tests/runner/requirements/requirements-azure.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "be5c6dc9b1fe6ffbec88625d6c225df060724e678bf4b179ee4acb6ba18a9fe2",
- "format": 1
- },
- {
- "name": "tests/runner/requirements/units.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "48edd11776e45cc283be0d76efed83271645ff082d0d22c23d8a16ede3f13104",
- "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": "afa4e7501eb80db02661630c468c0dd0a410da1ddb0297b1cbb74fe23d1b6951",
- "format": 1
- },
- {
- "name": "changelogs",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "changelogs/fragments",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-3935.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "275e9147e14cace400fea4ad8d2d88e2a3c41daa65545cf5ade52ffac5bea3be",
- "format": 1
- },
- {
- "name": "changelogs/fragments/20.5.0.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e801f1b985b89427664b5bbc3e86c7f94e0515fe71584171438bdd2e6423f802",
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-3704.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7f7bf4dd5809a694c63075c88409b71d97b3c636fb4c60883e23e1d9c6acf256",
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-3505.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2117a356f790e63f26cbe90c1b8cbc8e66bc4ba44a3cec0d0f219bb3dee6a663",
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-3949.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "46256df687411ac1d89895e32713a4830ccffcf1bb823fbf88597481881aa67f",
- "format": 1
- },
- {
- "name": "changelogs/fragments/20.7.0.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "95ad8a5b1d71afce933fdd69b3116309a6d9a559416d8ab3641470eb5286ee9f",
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-3663.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ede05991f45025041ce7305e06f27f7c7747b0a5e3c61d11e5775796315ad801",
- "format": 1
- },
- {
- "name": "changelogs/fragments/20.2.0.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "91918f48a406834778ff7163c92c12dd1802c0620cb681ee66f8a4709444cf5e",
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-4001.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c9b63b1230f04b472b8d55d5bd616c1687972ec14126e643de62788c9788708a",
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-3526.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "61cb464ce2c8e6aaf9a74beca5e246e4010ee68f2632eba0347e5cf3267e9510",
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-4246.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "87733f8557c5f0c13302e47e18712cc094f8e1cf63665519a340c74baee95e1b",
- "format": 1
- },
- {
- "name": "changelogs/fragments/20.4.0.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c4fd861b273aceb9ec0a456ddbae2a6f82bdd6a2244b81e9b1e903a59eaa83bf",
- "format": 1
- },
- {
- "name": "changelogs/fragments/20.8.0.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "266926d348a95b55d65ff99683f9bdfe7ad1302731c08964bb86ce714272d86c",
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-4135.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3b73cac3f25ff245e6156120be0b828339193515410dfe1746e9fe58b2fc5d1a",
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-4070.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ef62606cf209269c701e931090525e063781b9990853a20f718f250bbccd182d",
- "format": 1
- },
- {
- "name": "changelogs/fragments/20.6.0.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b5988b539e04f6be548b4f07142e208adc5974ed6d67511f2efcd5f721598124",
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-3849.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cfaa25e04a5dcb6f13b27a52d79dd1ee8a06002d028a86a09184b58c431fc5fd",
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-4416.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4224db573f34caeeb956c8728eb343a47bc2729d898001a4c6a671b780dae1bf",
- "format": 1
- },
- {
- "name": "changelogs/config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "fdb1023b66dee056bc12c35cf7326a01c0ce7a8c1eceea032270fd24db9e1467",
- "format": 1
- },
- {
- "name": "changelogs/changelog.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "edbc85fcd35436d9f71c7b5f3247522276ebc4fb00567a74873b163adcadf020",
- "format": 1
- },
- {
- "name": "README.md",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c4071e1bc75bf65da6951045ea60d4bde7036937ac56ff73a32a95764fa9a4a3",
- "format": 1
- },
- {
- "name": "COPYING",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903",
- "format": 1
- },
- {
- "name": ".github",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": ".github/workflows",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": ".github/workflows/coverage.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "081b4ec5fb77d7676357b8600b547e7b2cbad8eb340333305ef5d448d832510b",
- "format": 1
- },
- {
- "name": ".github/workflows/codeql-analysis.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b67ebd724c02ab0bc49f55fe9928691ce9000511f58d1b182245c8ea9fa4bc89",
- "format": 1
- },
- {
- "name": ".github/workflows/main.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "217f80de01b8091549fa87f7a89e7936f1d91abc6e0398aed2c85cac6deb0448",
- "format": 1
- },
- {
- "name": ".github/ISSUE_TEMPLATE",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": ".github/ISSUE_TEMPLATE/feature_request.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4ad81e92ae7b1fbef37afde2fc57466d3d7dd20d5ab9bba1e01e0faac83228cf",
- "format": 1
- },
- {
- "name": ".github/ISSUE_TEMPLATE/bug_report.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ef5f731a1c7790ce52a685a93370a5d0a5523bf75b9b0a0f0d9cc50171c60ac0",
- "format": 1
- },
- {
- "name": "CHANGELOG.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7ee760ffaaed6d3d476d1eb9fda880bbaf3a2247a5014428c058282b597131a7",
- "format": 1
- },
- {
- "name": "HACK.md",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0757d4b54e08f27761851d37143cbe15d58c324db2968fe157546992592bb382",
- "format": 1
- }
- ],
- "format": 1
-} \ No newline at end of file
diff --git a/ansible_collections/netapp/azure/HACK.md b/ansible_collections/netapp/azure/HACK.md
deleted file mode 100644
index cbd239e0e..000000000
--- a/ansible_collections/netapp/azure/HACK.md
+++ /dev/null
@@ -1,13 +0,0 @@
-Because of an issue in Ansible, Hub Automation cannot use doc fragments from an external collection as:
-```
- - azure.azcollection.azure
- - azure.azcollection.azure_tags
-```
-
-Red Hat asked us to make local copies of the azcollection doc fragments. They are in
-```
-ansible_collections/netapp/azure/plugins/doc_fragments/azure.py
-ansible_collections/netapp/azure/plugins/doc_fragments/azure_tags.py
-```
-
-Once the Ansible issue is fixed, we should remove these copies, as they may be out of sync with the azcollection.
diff --git a/ansible_collections/netapp/azure/MANIFEST.json b/ansible_collections/netapp/azure/MANIFEST.json
deleted file mode 100644
index ecfd4c592..000000000
--- a/ansible_collections/netapp/azure/MANIFEST.json
+++ /dev/null
@@ -1,37 +0,0 @@
-{
- "collection_info": {
- "namespace": "netapp",
- "name": "azure",
- "version": "21.10.1",
- "authors": [
- "NetApp Ansible Team <ng-ansibleteam@netapp.com>"
- ],
- "readme": "README.md",
- "tags": [
- "storage",
- "cloud",
- "netapp",
- "cvs",
- "anf",
- "azure"
- ],
- "description": "Azure NetApp Files (ANF)",
- "license": [],
- "license_file": "COPYING",
- "dependencies": {
- "azure.azcollection": ">=1.0.0"
- },
- "repository": "https://github.com/ansible-collections/netapp.azure",
- "documentation": null,
- "homepage": "https://netapp.io/configuration-management-and-automation/",
- "issues": "https://github.com/ansible-collections/netapp.azure/issues"
- },
- "file_manifest_file": {
- "name": "FILES.json",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "dac3f17953d3c381c15de48087a8d6d80a112c8f172006ed178a081fef9023c6",
- "format": 1
- },
- "format": 1
-} \ No newline at end of file
diff --git a/ansible_collections/netapp/azure/README.md b/ansible_collections/netapp/azure/README.md
deleted file mode 100644
index 05dcdd6dd..000000000
--- a/ansible_collections/netapp/azure/README.md
+++ /dev/null
@@ -1,158 +0,0 @@
-[![Documentation](https://img.shields.io/badge/docs-brightgreen.svg)](https://docs.ansible.com/ansible/devel/collections/netapp/azure/index.html)
-![example workflow](https://github.com/ansible-collections/netapp.azure/actions/workflows/main.yml/badge.svg)
-[![codecov](https://codecov.io/gh/ansible-collections/netapp.azure/branch/main/graph/badge.svg?token=weBYkksxSi)](https://codecov.io/gh/ansible-collections/netapp.azure)
-[![Discord](https://img.shields.io/discord/855068651522490400)](https://discord.gg/NetApp)
-=============================================================
-
-netapp.azure
-
-Azure NetApp Files (ANF) Collection
-
-Copyright (c) 2019 NetApp, Inc. All rights reserved.
-Specifications subject to change without notice.
-
-=============================================================
-
-# Installation
-```bash
-ansible-galaxy collection install netapp.azure
-```
-To use Collection add the following to the top of your playbook, with out this you will be using Ansible 2.9 version of the module
-```
-collections:
- - netapp.azure
-```
-
-# Module documentation
-https://docs.ansible.com/ansible/devel/collections/netapp/azure/
-
-# Need help
-Join our [Discord](https://discord.gg/NetApp) and look for our #ansible channel.
-
-# Requirements
-- python >= 2.7
-- azure >= 2.0.0
-- Python azure-mgmt. Install using ```pip install azure-mgmt```
-- Python azure-mgmt-netapp. Install using ```pip install azure-mgmt-netapp```
-- For authentication with Azure NetApp log in before you run your tasks or playbook with 'az login'.
-
-# Code of Conduct
-This collection follows the [Ansible project's Code of Conduct](https://docs.ansible.com/ansible/devel/community/code_of_conduct.html).
-
-# Release Notes
-
-## 21.10.0
-
-### Minor changes
- - all modules - allow usage of Ansible module group defaults - for Ansible 2.12+.
-
-## 21.9.0
-
-### New Options
- - azure_rm_netapp_volume - `feature_flags` to selectively enable/disable a feature.
-
-### Bug Fixes
- - azure_rm_netapp_volume - 'Change Ownership' is not permitted when creating NFSv4.1 volume with latest azure-mgmt-netapp package (4.0.0).
-
-## 21.8.1
-
-### Bug Fixes
- - Hub Automation cannot generate documentation (cannot use doc fragments from another collection).
-
-## 21.8.0
-
-### Bug Fixes
-
-- fix CI pipeline as azcollection does not support python 2.6.
-- fix CI pipeline as ignores are not required with latest azcollection.
-
-## 21.7.0
-
-### Bug Fixes
-
-- fix CI pipeline to work with azcollection, and isolate UTs from azcollection.
-
-## 21.6.0
-
-### Minor changes
-
- - azure_rm_netapp_account - support additional authentication schemes provided by AzureRMModuleBase.
- - azure_rm_netapp_capacity_pool - support additional authentication schemes provided by AzureRMModuleBase, and tags.
- - azure_rm_netapp_capacity_pool - wait for completion when creating, modifying, or deleting a pool.
- - azure_rm_netapp_snapshot - support additional authentication schemes provided by AzureRMModuleBase.
- - azure_rm_netapp_snapshot - wait for completion when creating or deleting a snapshot.
- - azure_rm_netapp_volume - support additional authentication schemes provided by AzureRMModuleBase, and tags.
-
-## 21.5.0
-
-### Minor changes
- - azure_rm_netapp_volume - enable changes in volume size.
- - azure_rm_netapp_volume - rename msg to mount_path, as documented in RETURN.
-
-## 21.3.0
-
-### New Options
- - azure_rm_netapp_account - new suboptions `ad_name`, `kdc_ip`, `service_root_ca_certificate` for Active Directory.
-
-### Bug Fixes
- - support for azure-mgmt-netapp 1.0.0, while maintaining compatibility with 0.10.0.
- - azure_rm_netapp_account - wait for job completion for asynchroneous requests, and report belated errors.
-
-## 21.2.0
-
-### New Options
- - azure_rm_netapp_account: new option `active_directories` to support SMB volumes.
- - azure_rm_netapp_volume: new option `protocol_types` to support SMB volumes.
-
-## 21.1.0
-
-### New Options
- - azure_rm_netapp_volume - new option `subnet_name` as subnet_id is ambiguous. subnet_id is now aliased to subnet_name.
-
-### Bug Fixes
- - azure_rm_netapp_volume - fix 'Nonetype' object is not subscriptable exception when mount target is not created.
-
-## 20.8.0
-
-### Module documentation changes
-- azure_rm_netapp_capacity_pool: Updated ANF capacity pool modify function for `size` parameter mandatory issue.
-- use a three group format for `version_added`. So 2.7 becomes 2.7.0. Same thing for 2.8 and 2.9.
-
-## 20.7.0
-
-### Bug Fixes
-- azure_rm_netapp_capacity_pool: fixed idempotency for delete operation.
-
-## 20.6.0
-
-### New Options
-- azure_rm_netapp_capacity_pool: now allows modify for size.
-- azure_rm_netapp_volume: now returns complete mount_path of the volume specified.
-
-## 20.5.0
-
-### New Options
-- azure_rm_netapp_account: new option `tags`.
-- azure_rm_netapp_capacity_pool: new option `service_level`.
-- azure_rm_netapp_volume: new option `size`.
-- azure_rm_netapp_volume: now returns mount_path of the volume specified.
-- azure_rm_netapp_volume: new option `vnet_resource_group_for_subnet`, resource group for virtual_network and subnet_id to be used.
-
-## 20.4.0
-
-### Bug Fixes
-- fix changes to azure-mgmt-netapp as per new release.
-- removed ONTAP dependency import.
-
-## 20.2.0
-
-### Bug Fixes
-- galaxy.yml: fix path to github repository.
-
-## 19.11.0
-- Initial release.
-### New Modules
-- azure_rm_netapp_account: create/delete NetApp Azure Files Account.
-- azure_rm_netapp_capacity_pool: create/delete NetApp Azure Files capacity pool.
-- azure_rm_netapp_snapshot: create/delete NetApp Azure Files Snapshot.
-- azure_rm_netapp_volume: create/delete NetApp Azure Files volume.
diff --git a/ansible_collections/netapp/azure/changelogs/changelog.yaml b/ansible_collections/netapp/azure/changelogs/changelog.yaml
deleted file mode 100644
index 71085dedf..000000000
--- a/ansible_collections/netapp/azure/changelogs/changelog.yaml
+++ /dev/null
@@ -1,169 +0,0 @@
-ancestor: null
-releases:
- 19.10.0:
- modules:
- - description: Manage NetApp Azure Files Account
- name: azure_rm_netapp_account
- namespace: ''
- - description: Manage NetApp Azure Files capacity pool
- name: azure_rm_netapp_capacity_pool
- namespace: ''
- - description: Manage NetApp Azure Files Snapshot
- name: azure_rm_netapp_snapshot
- namespace: ''
- - description: Manage NetApp Azure Files Volume
- name: azure_rm_netapp_volume
- namespace: ''
- release_date: '2019-11-14'
- 20.2.0:
- changes:
- bugfixes:
- - galaxy.yml - fix path to github repository.
- fragments:
- - 20.2.0.yaml
- release_date: '2020-02-05'
- 20.4.0:
- changes:
- bugfixes:
- - fix changes to azure-mgmt-netapp as per new release.
- - removed ONTAP dependency import.
- fragments:
- - 20.4.0.yaml
- release_date: '2020-04-21'
- 20.5.0:
- changes:
- minor_changes:
- - azure_rm_netapp_account - new option ``tags``.
- - azure_rm_netapp_capacity_pool - new option ``service_level``.
- - azure_rm_netapp_volume - new option ``size``.
- - azure_rm_netapp_volume - new option ``vnet_resource_group_for_subnet``, resource
- group for virtual_network and subnet_id to be used.
- - azure_rm_netapp_volume - now returns mount_path of the volume specified.
- fragments:
- - 20.5.0.yaml
- release_date: '2020-05-06'
- 20.6.0:
- changes:
- minor_changes:
- - azure_rm_netapp_capacity_pool - now allows modify for size.
- - azure_rm_netapp_volume - now returns complete mount_path of the volume specified.
- fragments:
- - 20.6.0.yaml
- release_date: '2020-06-03'
- 20.7.0:
- changes:
- bugfixes:
- - azure_rm_netapp_capacity_pool - fixed idempotency for delete operation.
- fragments:
- - 20.7.0.yaml
- release_date: '2020-06-24'
- 20.8.0:
- changes:
- minor_changes:
- - azure_rm_netapp_capacity_pool - Updated ANF capacity pool modify function
- for size parameter mandatory issue.
- - use a three group format for version_added. So 2.7 becomes 2.7.0. Same thing
- for 2.8 and 2.9.
- fragments:
- - 20.8.0.yaml
- release_date: '2020-08-05'
- 21.10.0:
- changes:
- minor_changes:
- - PR1 - allow usage of Ansible module group defaults - for Ansible 2.12+.
- fragments:
- - DEVOPS-4416.yaml
- release_date: '2021-11-03'
- 21.2.0:
- changes:
- bugfixes:
- - azure_rm_netapp_volume - fix 'Nonetype' object is not subscriptable exception
- when mount target is not created.
- minor_changes:
- - azure_rm_netapp_account - new option ``active_directories`` to support SMB
- volumes.
- - azure_rm_netapp_volume - new option ``protocol_types`` to support SMB volumes.
- - azure_rm_netapp_volume - new option ``subnet_name`` as subnet_id is ambiguous. subnet_id
- is now aliased to subnet_name.
- fragments:
- - DEVOPS-3505.yaml
- release_date: '2021-02-04'
- 21.3.0:
- changes:
- bugfixes:
- - azure_rm_netapp_account - wait for job completion for asynchroneous requests,
- and report belated errors.
- - support for azure-mgmt-netapp 1.0.0, while maintaining compatibility with
- 0.10.0.
- minor_changes:
- - azure_rm_netapp_account - new option ``active_directories`` to support SMB
- volumes.
- - azure_rm_netapp_account - new suboptions ``ad_name``, ``kdc_ip``, ``service_root_ca_certificate```
- for Active Directory.
- - azure_rm_netapp_volume - new option ``protocol_types`` to support SMB volumes.
- fragments:
- - DEVOPS-3526.yaml
- - DEVOPS-3663.yaml
- - DEVOPS-3704.yaml
- release_date: '2021-03-03'
- 21.5.0:
- changes:
- minor_changes:
- - azure_rm_netapp_volume - enable changes in volume size.
- - azure_rm_netapp_volume - rename msg to mount_path, as documented in RETURN.
- fragments:
- - DEVOPS-3849.yaml
- release_date: '2021-04-21'
- 21.6.0:
- changes:
- minor_changes:
- - azure_rm_netapp_account - support additional authentication schemes provided
- by AzureRMModuleBase.
- - azure_rm_netapp_capacity_pool - support additional authentication schemes
- provided by AzureRMModuleBase, and tags.
- - azure_rm_netapp_capacity_pool - wait for completion when creating, modifying,
- or deleting a pool.
- - azure_rm_netapp_snapshot - support additional authentication schemes provided
- by AzureRMModuleBase.
- - azure_rm_netapp_snapshot - wait for completion when creating, modifying, or
- deleting a pool.
- - azure_rm_netapp_volume - support additional authentication schemes provided
- by AzureRMModuleBase, and tags.
- fragments:
- - DEVOPS-3935.yaml
- - DEVOPS-3949.yaml
- release_date: '2021-05-06'
- 21.7.0:
- changes:
- bugfixes:
- - fix CI pipeline to work with azcollection, and isolate UTs from azcollection.
- fragments:
- - DEVOPS-4001.yaml
- release_date: '2021-06-03'
- 21.8.0:
- changes:
- bugfixes:
- - fix CI pipeline as azcollection does not support python 2.6.
- - fix CI pipeline as ignores are not required with latest azcollection.
- fragments:
- - DEVOPS-4070.yaml
- release_date: '2021-07-14'
- 21.8.1:
- changes:
- bugfixes:
- - Hub Automation cannot generate documentation (cannot use doc fragments from
- another collection).
- fragments:
- - DEVOPS-4135.yaml
- release_date: '2021-07-16'
- 21.9.0:
- changes:
- bugfixes:
- - azure_rm_netapp_volume - 'Change Ownership' is not permitted when creating
- NFSv4.1 volume with latest azure-mgmt-netapp package (4.0.0).
- minor_changes:
- - azure_rm_netapp_volume - new option ``feature_flags`` to selectively enable/disable
- a feature.
- fragments:
- - DEVOPS-4246.yaml
- release_date: '2021-09-01'
diff --git a/ansible_collections/netapp/azure/changelogs/config.yaml b/ansible_collections/netapp/azure/changelogs/config.yaml
deleted file mode 100644
index fcd0312f6..000000000
--- a/ansible_collections/netapp/azure/changelogs/config.yaml
+++ /dev/null
@@ -1,32 +0,0 @@
-changelog_filename_template: ../CHANGELOG.rst
-changelog_filename_version_depth: 0
-changes_file: changelog.yaml
-changes_format: combined
-ignore_other_fragment_extensions: true
-keep_fragments: true
-mention_ancestor: false
-new_plugins_after_name: removed_features
-notesdir: fragments
-prelude_section_name: release_summary
-prelude_section_title: Release Summary
-sanitize_changelog: true
-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
-title: Azure NetApp Files (ANF) Collection
-trivial_section_name: trivial
-use_fqcn: true
diff --git a/ansible_collections/netapp/azure/changelogs/fragments/20.2.0.yaml b/ansible_collections/netapp/azure/changelogs/fragments/20.2.0.yaml
deleted file mode 100644
index 3f764c1c9..000000000
--- a/ansible_collections/netapp/azure/changelogs/fragments/20.2.0.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-bugfixes:
- - galaxy.yml - fix path to github repository.
diff --git a/ansible_collections/netapp/azure/changelogs/fragments/20.4.0.yaml b/ansible_collections/netapp/azure/changelogs/fragments/20.4.0.yaml
deleted file mode 100644
index 044018d2c..000000000
--- a/ansible_collections/netapp/azure/changelogs/fragments/20.4.0.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-bugfixes:
- - fix changes to azure-mgmt-netapp as per new release.
- - removed ONTAP dependency import.
diff --git a/ansible_collections/netapp/azure/changelogs/fragments/20.5.0.yaml b/ansible_collections/netapp/azure/changelogs/fragments/20.5.0.yaml
deleted file mode 100644
index a2f16d6b0..000000000
--- a/ansible_collections/netapp/azure/changelogs/fragments/20.5.0.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-minor_changes:
- - azure_rm_netapp_account - new option ``tags``.
- - azure_rm_netapp_capacity_pool - new option ``service_level``.
- - azure_rm_netapp_volume - new option ``size``.
- - azure_rm_netapp_volume - now returns mount_path of the volume specified.
- - azure_rm_netapp_volume - new option ``vnet_resource_group_for_subnet``, resource group for virtual_network and subnet_id to be used.
diff --git a/ansible_collections/netapp/azure/changelogs/fragments/20.6.0.yaml b/ansible_collections/netapp/azure/changelogs/fragments/20.6.0.yaml
deleted file mode 100644
index 67b15df45..000000000
--- a/ansible_collections/netapp/azure/changelogs/fragments/20.6.0.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-minor_changes:
- - azure_rm_netapp_capacity_pool - now allows modify for size.
- - azure_rm_netapp_volume - now returns complete mount_path of the volume specified.
diff --git a/ansible_collections/netapp/azure/changelogs/fragments/20.7.0.yaml b/ansible_collections/netapp/azure/changelogs/fragments/20.7.0.yaml
deleted file mode 100644
index e150ea10d..000000000
--- a/ansible_collections/netapp/azure/changelogs/fragments/20.7.0.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-bugfixes:
- - azure_rm_netapp_capacity_pool - fixed idempotency for delete operation.
diff --git a/ansible_collections/netapp/azure/changelogs/fragments/20.8.0.yaml b/ansible_collections/netapp/azure/changelogs/fragments/20.8.0.yaml
deleted file mode 100644
index 68e9d285d..000000000
--- a/ansible_collections/netapp/azure/changelogs/fragments/20.8.0.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-minor_changes:
- - azure_rm_netapp_capacity_pool - Updated ANF capacity pool modify function for size parameter mandatory issue.
- - use a three group format for version_added. So 2.7 becomes 2.7.0. Same thing for 2.8 and 2.9.
diff --git a/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3505.yaml b/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3505.yaml
deleted file mode 100644
index 87c49d052..000000000
--- a/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3505.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
-minor_changes:
- - azure_rm_netapp_volume - new option ``subnet_name`` as subnet_id is ambiguous. subnet_id is now aliased to subnet_name.
-bugfixes:
- - azure_rm_netapp_volume - fix 'Nonetype' object is not subscriptable exception when mount target is not created.
diff --git a/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3526.yaml b/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3526.yaml
deleted file mode 100644
index 720ce523d..000000000
--- a/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3526.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-minor_changes:
- - azure_rm_netapp_account - new option ``active_directories`` to support SMB volumes.
- - azure_rm_netapp_volume - new option ``protocol_types`` to support SMB volumes.
diff --git a/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3663.yaml b/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3663.yaml
deleted file mode 100644
index e9adbdb9b..000000000
--- a/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3663.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-bugfixes:
- - support for azure-mgmt-netapp 1.0.0, while maintaining compatibility with 0.10.0.
diff --git a/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3704.yaml b/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3704.yaml
deleted file mode 100644
index f0c1f6a38..000000000
--- a/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3704.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-minor_changes:
- - azure_rm_netapp_account - new suboptions ``ad_name``, ``kdc_ip``, ``service_root_ca_certificate``` for Active Directory.
-
-bugfixes:
- - azure_rm_netapp_account - wait for job completion for asynchroneous requests, and report belated errors.
diff --git a/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3849.yaml b/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3849.yaml
deleted file mode 100644
index 7fc5d9fae..000000000
--- a/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3849.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-minor_changes:
- - azure_rm_netapp_volume - enable changes in volume size.
- - azure_rm_netapp_volume - rename msg to mount_path, as documented in RETURN.
diff --git a/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3935.yaml b/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3935.yaml
deleted file mode 100644
index c619dbcd9..000000000
--- a/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3935.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-minor_changes:
- - azure_rm_netapp_account - support additional authentication schemes provided by AzureRMModuleBase.
diff --git a/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3949.yaml b/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3949.yaml
deleted file mode 100644
index 2889546f8..000000000
--- a/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3949.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-minor_changes:
- - azure_rm_netapp_capacity_pool - support additional authentication schemes provided by AzureRMModuleBase, and tags.
- - azure_rm_netapp_capacity_pool - wait for completion when creating, modifying, or deleting a pool.
- - azure_rm_netapp_snapshot - support additional authentication schemes provided by AzureRMModuleBase.
- - azure_rm_netapp_snapshot - wait for completion when creating, modifying, or deleting a pool.
- - azure_rm_netapp_volume - support additional authentication schemes provided by AzureRMModuleBase, and tags.
diff --git a/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4001.yaml b/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4001.yaml
deleted file mode 100644
index 2b09e21ce..000000000
--- a/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4001.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-bugfixes:
- - fix CI pipeline to work with azcollection, and isolate UTs from azcollection.
diff --git a/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4070.yaml b/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4070.yaml
deleted file mode 100644
index 0342115bb..000000000
--- a/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4070.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-bugfixes:
- - fix CI pipeline as azcollection does not support python 2.6.
- - fix CI pipeline as ignores are not required with latest azcollection.
diff --git a/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4135.yaml b/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4135.yaml
deleted file mode 100644
index 50e2e7d36..000000000
--- a/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4135.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-bugfixes:
- - Hub Automation cannot generate documentation (cannot use doc fragments from another collection).
diff --git a/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4246.yaml b/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4246.yaml
deleted file mode 100644
index 781042d6f..000000000
--- a/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4246.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
-minor_changes:
- - azure_rm_netapp_volume - new option ``feature_flags`` to selectively enable/disable a feature.
-bugfixes:
- - azure_rm_netapp_volume - 'Change Ownership' is not permitted when creating NFSv4.1 volume with latest azure-mgmt-netapp package (4.0.0).
diff --git a/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4416.yaml b/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4416.yaml
deleted file mode 100644
index 6b4b660a0..000000000
--- a/ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4416.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-minor_changes:
- - PR1 - allow usage of Ansible module group defaults - for Ansible 2.12+.
diff --git a/ansible_collections/netapp/azure/meta/runtime.yml b/ansible_collections/netapp/azure/meta/runtime.yml
deleted file mode 100644
index fc582847b..000000000
--- a/ansible_collections/netapp/azure/meta/runtime.yml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-requires_ansible: ">=2.13"
-action_groups:
- netapp_azure:
- - azure_rm_netapp_account
- - azure_rm_netapp_capacity_pool
- - azure_rm_netapp_snapshot
- - azure_rm_netapp_volume
diff --git a/ansible_collections/netapp/azure/plugins/doc_fragments/azure.py b/ansible_collections/netapp/azure/plugins/doc_fragments/azure.py
deleted file mode 100644
index 49467db70..000000000
--- a/ansible_collections/netapp/azure/plugins/doc_fragments/azure.py
+++ /dev/null
@@ -1,129 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright: (c) 2016 Matt Davis, <mdavis@ansible.com>
-# Copyright: (c) 2016 Chris Houseknecht, <house@redhat.com>
-# 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
-
-
-class ModuleDocFragment(object):
-
- # Azure doc fragment
- DOCUMENTATION = r'''
-
-options:
- ad_user:
- description:
- - Active Directory username. Use when authenticating with an Active Directory user rather than service
- principal.
- type: str
- password:
- description:
- - Active Directory user password. Use when authenticating with an Active Directory user rather than service
- principal.
- type: str
- profile:
- description:
- - Security profile found in ~/.azure/credentials file.
- type: str
- subscription_id:
- description:
- - Your Azure subscription Id.
- type: str
- client_id:
- description:
- - Azure client ID. Use when authenticating with a Service Principal.
- type: str
- secret:
- description:
- - Azure client secret. Use when authenticating with a Service Principal.
- type: str
- tenant:
- description:
- - Azure tenant ID. Use when authenticating with a Service Principal.
- type: str
- cloud_environment:
- description:
- - For cloud environments other than the US public cloud, the environment name (as defined by Azure Python SDK, eg, C(AzureChinaCloud),
- C(AzureUSGovernment)), or a metadata discovery endpoint URL (required for Azure Stack). Can also be set via credential file profile or
- the C(AZURE_CLOUD_ENVIRONMENT) environment variable.
- type: str
- default: AzureCloud
- version_added: '0.0.1'
- adfs_authority_url:
- description:
- - Azure AD authority url. Use when authenticating with Username/password, and has your own ADFS authority.
- type: str
- version_added: '0.0.1'
- cert_validation_mode:
- description:
- - Controls the certificate validation behavior for Azure endpoints. By default, all modules will validate the server certificate, but
- when an HTTPS proxy is in use, or against Azure Stack, it may be necessary to disable this behavior by passing C(ignore). Can also be
- set via credential file profile or the C(AZURE_CERT_VALIDATION) environment variable.
- type: str
- choices: [ ignore, validate ]
- version_added: '0.0.1'
- auth_source:
- description:
- - Controls the source of the credentials to use for authentication.
- - Can also be set via the C(ANSIBLE_AZURE_AUTH_SOURCE) environment variable.
- - When set to C(auto) (the default) the precedence is module parameters -> C(env) -> C(credential_file) -> C(cli).
- - When set to C(env), the credentials will be read from the environment variables
- - When set to C(credential_file), it will read the profile from C(~/.azure/credentials).
- - When set to C(cli), the credentials will be sources from the Azure CLI profile. C(subscription_id) or the environment variable
- C(AZURE_SUBSCRIPTION_ID) can be used to identify the subscription ID if more than one is present otherwise the default
- az cli subscription is used.
- - When set to C(msi), the host machine must be an azure resource with an enabled MSI extension. C(subscription_id) or the
- environment variable C(AZURE_SUBSCRIPTION_ID) can be used to identify the subscription ID if the resource is granted
- access to more than one subscription, otherwise the first subscription is chosen.
- - The C(msi) was added in Ansible 2.6.
- type: str
- default: auto
- choices:
- - auto
- - cli
- - credential_file
- - env
- - msi
- version_added: '0.0.1'
- api_profile:
- description:
- - Selects an API profile to use when communicating with Azure services. Default value of C(latest) is appropriate for public clouds;
- future values will allow use with Azure Stack.
- type: str
- default: latest
- version_added: '0.0.1'
- log_path:
- description:
- - Parent argument.
- type: str
- log_mode:
- description:
- - Parent argument.
- type: str
-requirements:
- - python >= 2.7
- - The host that executes this module must have the azure.azcollection collection installed via galaxy
- - All python packages listed in collection's requirements-azure.txt must be installed via pip on the host that executes modules from azure.azcollection
- - Full installation instructions may be found https://galaxy.ansible.com/azure/azcollection
-
-notes:
- - For authentication with Azure you can pass parameters, set environment variables, use a profile stored
- in ~/.azure/credentials, or log in before you run your tasks or playbook with C(az login).
- - Authentication is also possible using a service principal or Active Directory user.
- - To authenticate via service principal, pass subscription_id, client_id, secret and tenant or set environment
- variables AZURE_SUBSCRIPTION_ID, AZURE_CLIENT_ID, AZURE_SECRET and AZURE_TENANT.
- - To authenticate via Active Directory user, pass ad_user and password, or set AZURE_AD_USER and
- AZURE_PASSWORD in the environment.
- - "Alternatively, credentials can be stored in ~/.azure/credentials. This is an ini file containing
- a [default] section and the following keys: subscription_id, client_id, secret and tenant or
- subscription_id, ad_user and password. It is also possible to add additional profiles. Specify the profile
- by passing profile or setting AZURE_PROFILE in the environment."
-
-seealso:
- - name: Sign in with Azure CLI
- link: https://docs.microsoft.com/en-us/cli/azure/authenticate-azure-cli?view=azure-cli-latest
- description: How to authenticate using the C(az login) command.
- '''
diff --git a/ansible_collections/netapp/azure/plugins/doc_fragments/azure_tags.py b/ansible_collections/netapp/azure/plugins/doc_fragments/azure_tags.py
deleted file mode 100644
index 8edb80eed..000000000
--- a/ansible_collections/netapp/azure/plugins/doc_fragments/azure_tags.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright: (c) 2016, Matt Davis, <mdavis@ansible.com>
-# Copyright: (c) 2016, Chris Houseknecht, <house@redhat.com>
-# 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
-
-
-class ModuleDocFragment(object):
-
- # Azure doc fragment
- DOCUMENTATION = r'''
-options:
- tags:
- description:
- - Dictionary of string:string pairs to assign as metadata to the object.
- - Metadata tags on the object will be updated with any provided values.
- - To remove tags set append_tags option to false.
- - Currently, Azure DNS zones and Traffic Manager services also don't allow the use of spaces in the tag.
- - Azure Front Door doesn't support the use of # in the tag name.
- - Azure Automation and Azure CDN only support 15 tags on resources.
- type: dict
- append_tags:
- description:
- - Use to control if tags field is canonical or just appends to existing tags.
- - When canonical, any tags not found in the tags parameter will be removed from the object's metadata.
- type: bool
- default: yes
- '''
diff --git a/ansible_collections/netapp/azure/plugins/doc_fragments/netapp.py b/ansible_collections/netapp/azure/plugins/doc_fragments/netapp.py
deleted file mode 100644
index 18e9cc2a2..000000000
--- a/ansible_collections/netapp/azure/plugins/doc_fragments/netapp.py
+++ /dev/null
@@ -1,43 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright: (c) 2019, NetApp Ansible Team ng-ansibleteam@netapp.com
-# 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
-
-
-class ModuleDocFragment(object):
-
- DOCUMENTATION = r'''
-options:
- - See respective platform section for more details
-requirements:
- - See respective platform section for more details
-notes:
- - Ansible modules are available for the following NetApp Storage Platforms: E-Series, ONTAP, SolidFire
-'''
-
- # Documentation fragment for Cloud Volume Services on Azure NetApp (azure_rm_netapp)
- AZURE_RM_NETAPP = r'''
-options:
- resource_group:
- description:
- - Name of the resource group.
- required: true
- type: str
-requirements:
- - python >= 2.7
- - azure >= 2.0.0
- - Python azure-mgmt. Install using 'pip install azure-mgmt'
- - Python azure-mgmt-netapp. Install using 'pip install azure-mgmt-netapp'
- - For authentication with Azure NetApp log in before you run your tasks or playbook with C(az login).
-
-notes:
- - The modules prefixed with azure_rm_netapp are built to support the Cloud Volume Services for Azure NetApp Files.
-
-seealso:
- - name: Sign in with Azure CLI
- link: https://docs.microsoft.com/en-us/cli/azure/authenticate-azure-cli?view=azure-cli-latest
- description: How to authenticate using the C(az login) command.
- '''
diff --git a/ansible_collections/netapp/azure/plugins/module_utils/azure_rm_netapp_common.py b/ansible_collections/netapp/azure/plugins/module_utils/azure_rm_netapp_common.py
deleted file mode 100644
index 166327088..000000000
--- a/ansible_collections/netapp/azure/plugins/module_utils/azure_rm_netapp_common.py
+++ /dev/null
@@ -1,163 +0,0 @@
-# (c) 2019, NetApp, Inc
-# GNU General Public License v3.0+
-# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-'''
-azure_rm_netapp_common
-Wrapper around AzureRMModuleBase base class
-'''
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-
-import sys
-
-HAS_AZURE_COLLECTION = True
-NEW_STYLE = None
-COLLECTION_VERSION = "21.10.1"
-IMPORT_ERRORS = []
-SDK_VERSION = "0.0.0"
-
-if 'pytest' in sys.modules:
- from ansible_collections.netapp.azure.plugins.module_utils.netapp_module import AzureRMModuleBaseMock as AzureRMModuleBase
-else:
- try:
- from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common import AzureRMModuleBase
- except ImportError as exc:
- IMPORT_ERRORS.append(str(exc))
- HAS_AZURE_COLLECTION = False
-
- class AzureRMModuleBase:
- def __init__(self, derived_arg_spec, required_if=None, supports_check_mode=False, supports_tags=True, **kwargs):
- raise ImportError(IMPORT_ERRORS)
-
- except SyntaxError as exc:
- # importing Azure collection fails with python 2.6
- if sys.version_info < (2, 8):
- IMPORT_ERRORS.append(str(exc))
- from ansible_collections.netapp.azure.plugins.module_utils.netapp_module import AzureRMModuleBaseMock as AzureRMModuleBase
- HAS_AZURE_COLLECTION = False
- else:
- raise
-
-try:
- from azure.mgmt.netapp import NetAppManagementClient # 1.0.0 or newer
- NEW_STYLE = True
-except ImportError as exc:
- IMPORT_ERRORS.append(str(exc))
-
-if NEW_STYLE is None:
- try:
- from azure.mgmt.netapp import AzureNetAppFilesManagementClient # 0.10.0 or older
- NEW_STYLE = False
- except ImportError as exc:
- IMPORT_ERRORS.append(str(exc))
-
-try:
- from azure.mgmt.netapp import VERSION as SDK_VERSION
-except ImportError as exc:
- IMPORT_ERRORS.append(str(exc))
-
-
-class AzureRMNetAppModuleBase(AzureRMModuleBase):
- ''' Wrapper around AzureRMModuleBase base class '''
- def __init__(self, derived_arg_spec, required_if=None, supports_check_mode=False, supports_tags=True):
- self._netapp_client = None
- self._new_style = NEW_STYLE
- self._sdk_version = SDK_VERSION
- super(AzureRMNetAppModuleBase, self).__init__(derived_arg_spec=derived_arg_spec,
- required_if=required_if,
- supports_check_mode=supports_check_mode,
- supports_tags=supports_tags)
- if not HAS_AZURE_COLLECTION:
- self.fail_when_import_errors(IMPORT_ERRORS)
-
- def get_mgmt_svc_client(self, client_type, base_url=None, api_version=None):
- if not self._new_style:
- return super(AzureRMNetAppModuleBase, self).get_mgmt_svc_client(client_type, base_url, api_version)
- self.log('Getting management service client NetApp {0}'.format(client_type.__name__))
- self.check_client_version(client_type)
-
- if not base_url:
- # most things are resource_manager, don't make everyone specify
- base_url = self.azure_auth._cloud_environment.endpoints.resource_manager
-
- client_kwargs = dict(credential=self.azure_auth.azure_credentials, subscription_id=self.azure_auth.subscription_id, base_url=base_url)
-
- return client_type(**client_kwargs)
-
- @property
- def netapp_client(self):
- self.log('Getting netapp client')
- if self._new_style is None:
- # note that we always have at least one import error
- self.fail_when_import_errors(IMPORT_ERRORS)
- if self._netapp_client is None:
- if self._new_style:
- self._netapp_client = self.get_mgmt_svc_client(NetAppManagementClient)
- else:
- self._netapp_client = self.get_mgmt_svc_client(AzureNetAppFilesManagementClient,
- base_url=self._cloud_environment.endpoints.resource_manager,
- api_version='2018-05-01')
- return self._netapp_client
-
- @property
- def new_style(self):
- return self._new_style
-
- @property
- def sdk_version(self):
- return self._sdk_version
-
- def get_method(self, category, name):
- try:
- methods = getattr(self.netapp_client, category)
- except AttributeError as exc:
- self.module.fail_json('Error: category %s not found for netapp_client: %s' % (category, str(exc)))
-
- if self._new_style:
- name = 'begin_' + name
- try:
- method = getattr(methods, name)
- except AttributeError as exc:
- self.module.fail_json('Error: method %s not found for netapp_client category: %s - %s' % (name, category, str(exc)))
- return method
-
- def fail_when_import_errors(self, import_errors, has_azure_mgmt_netapp=True):
- if has_azure_mgmt_netapp and not import_errors:
- return
- msg = ''
- if not has_azure_mgmt_netapp:
- msg = "The python azure-mgmt-netapp package is required. "
- if hasattr(self, 'module'):
- msg += 'Import errors: %s' % str(import_errors)
- self.module.fail_json(msg=msg)
- msg += str(import_errors)
- raise ImportError(msg)
-
- def has_feature(self, feature_name):
- feature = self.get_feature(feature_name)
- if isinstance(feature, bool):
- return feature
- self.module.fail_json(msg="Error: expected bool type for feature flag: %s" % feature_name)
-
- def get_feature(self, feature_name):
- ''' if the user has configured the feature, use it
- otherwise, use our default
- '''
- default_flags = dict(
- # TODO: review need for these
- # trace_apis=False, # if true, append REST requests/responses to /tmp/azure_apis.log
- # check_required_params_for_none=True,
- # deprecation_warning=True,
- # show_modified=True,
- #
- # preview features in ANF
- ignore_change_ownership_mode=True
- )
-
- if self.parameters.get('feature_flags') is not None and feature_name in self.parameters['feature_flags']:
- return self.parameters['feature_flags'][feature_name]
- if feature_name in default_flags:
- return default_flags[feature_name]
- self.module.fail_json(msg="Internal error: unexpected feature flag: %s" % feature_name)
diff --git a/ansible_collections/netapp/azure/plugins/module_utils/netapp_module.py b/ansible_collections/netapp/azure/plugins/module_utils/netapp_module.py
deleted file mode 100644
index 9ee758c01..000000000
--- a/ansible_collections/netapp/azure/plugins/module_utils/netapp_module.py
+++ /dev/null
@@ -1,271 +0,0 @@
-# This code is part of Ansible, but is an independent component.
-# This particular file snippet, and this file snippet only, is BSD licensed.
-# Modules you write using this snippet, which is embedded dynamically by Ansible
-# still belong to the author of the module, and may assign their own license
-# to the complete work.
-#
-# Copyright (c) 2018, Laurent Nicolas <laurentn@netapp.com>
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without modification,
-# are permitted provided that the following conditions are met:
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above copyright notice,
-# this list of conditions and the following disclaimer in the documentation
-# and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# 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.
-
-''' Support class for NetApp ansible modules '''
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-
-from ansible.module_utils import basic
-
-
-class AzureRMModuleBaseMock():
- ''' Mock for sanity tests when azcollection is not installed '''
- def __init__(self, derived_arg_spec, required_if=None, supports_check_mode=False, supports_tags=True, **kwargs):
- if supports_tags:
- derived_arg_spec.update(dict(tags=dict()))
- self.module = basic.AnsibleModule(
- argument_spec=derived_arg_spec,
- required_if=required_if,
- supports_check_mode=supports_check_mode
- )
- self.module.warn('Running in Unit Test context!')
- # the following is done in exec_module()
- self.parameters = dict([item for item in self.module.params.items() if item[1] is not None])
- # remove values with a default of None (not required)
- self.module_arg_spec = dict([item for item in self.module_arg_spec.items() if item[0] in self.parameters])
-
- def update_tags(self, tags):
- self.module.log('update_tags called with:', tags)
- return None, None
-
-
-def cmp(obj1, obj2):
- """
- Python 3 does not have a cmp function, this will do the cmp.
- :param a: first object to check
- :param b: second object to check
- :return:
- """
- # convert to lower case for string comparison.
- if obj1 is None:
- return -1
- if isinstance(obj1, str) and isinstance(obj2, str):
- obj1 = obj1.lower()
- obj2 = obj2.lower()
- # if list has string element, convert string to lower case.
- if isinstance(obj1, list) and isinstance(obj2, list):
- obj1 = [x.lower() if isinstance(x, str) else x for x in obj1]
- obj2 = [x.lower() if isinstance(x, str) else x for x in obj2]
- obj1.sort()
- obj2.sort()
- if isinstance(obj1, dict) and isinstance(obj2, dict):
- return 0 if obj1 == obj2 else 1
- return (obj1 > obj2) - (obj1 < obj2)
-
-
-class NetAppModule():
- '''
- Common class for NetApp modules
- set of support functions to derive actions based
- on the current state of the system, and a desired state
- '''
-
- def __init__(self):
- self.log = []
- self.changed = False
- self.parameters = {'name': 'not intialized'}
- self.zapi_string_keys = dict()
- self.zapi_bool_keys = dict()
- self.zapi_list_keys = {}
- self.zapi_int_keys = {}
- self.zapi_required = {}
-
- def set_parameters(self, ansible_params):
- self.parameters = {}
- for param in ansible_params:
- if ansible_params[param] is not None:
- self.parameters[param] = ansible_params[param]
- return self.parameters
-
- def get_cd_action(self, current, desired):
- ''' takes a desired state and a current state, and return an action:
- create, delete, None
- eg:
- is_present = 'absent'
- some_object = self.get_object(source)
- if some_object is not None:
- is_present = 'present'
- action = cd_action(current=is_present, desired = self.desired.state())
- '''
- desired_state = desired['state'] if 'state' in desired else 'present'
- if current is None and desired_state == 'absent':
- return None
- if current is not None and desired_state == 'present':
- return None
- # change in state
- self.changed = True
- if current is not None:
- return 'delete'
- return 'create'
-
- def compare_and_update_values(self, current, desired, keys_to_compare):
- updated_values = {}
- is_changed = False
- for key in keys_to_compare:
- if key in current:
- if key in desired and desired[key] is not None:
- if current[key] != desired[key]:
- updated_values[key] = desired[key]
- is_changed = True
- else:
- updated_values[key] = current[key]
- else:
- updated_values[key] = current[key]
-
- return updated_values, is_changed
-
- @staticmethod
- def check_keys(current, desired):
- ''' TODO: raise an error if keys do not match
- with the exception of:
- new_name, state in desired
- '''
-
- @staticmethod
- def compare_lists(current, desired, get_list_diff):
- ''' compares two lists and return a list of elements that are either the desired elements or elements that are
- modified from the current state depending on the get_list_diff flag
- :param: current: current item attribute in ONTAP
- :param: desired: attributes from playbook
- :param: get_list_diff: specifies whether to have a diff of desired list w.r.t current list for an attribute
- :return: list of attributes to be modified
- :rtype: list
- '''
- desired_diff_list = [item for item in desired if item not in current] # get what in desired and not in current
- current_diff_list = [item for item in current if item not in desired] # get what in current but not in desired
-
- if desired_diff_list or current_diff_list:
- # there are changes
- if get_list_diff:
- return desired_diff_list
- else:
- return desired
- else:
- return []
-
- def get_modified_attributes(self, current, desired, get_list_diff=False):
- ''' takes two dicts of attributes and return a dict of attributes that are
- not in the current state
- It is expected that all attributes of interest are listed in current and
- desired.
- :param: current: current attributes in ONTAP
- :param: desired: attributes from playbook
- :param: get_list_diff: specifies whether to have a diff of desired list w.r.t current list for an attribute
- :return: dict of attributes to be modified
- :rtype: dict
-
- NOTE: depending on the attribute, the caller may need to do a modify or a
- different operation (eg move volume if the modified attribute is an
- aggregate name)
- '''
- # if the object does not exist, we can't modify it
- modified = {}
- if current is None:
- return modified
-
- # error out if keys do not match
- self.check_keys(current, desired)
-
- # collect changed attributes
- for key, value in current.items():
- if key in desired and desired[key] is not None:
- if isinstance(value, list):
- modified_list = self.compare_lists(value, desired[key], get_list_diff) # get modified list from current and desired
- if modified_list:
- modified[key] = modified_list
- elif cmp(value, desired[key]) != 0:
- modified[key] = desired[key]
- if modified:
- self.changed = True
- return modified
-
- def is_rename_action(self, source, target):
- ''' takes a source and target object, and returns True
- if a rename is required
- eg:
- source = self.get_object(source_name)
- target = self.get_object(target_name)
- action = is_rename_action(source, target)
- :return: None for error, True for rename action, False otherwise
- '''
- if source is None and target is None:
- # error, do nothing
- # cannot rename an non existent resource
- # alternatively we could create B
- return None
- if source is not None and target is not None:
- # error, do nothing
- # idempotency (or) new_name_is_already_in_use
- # alternatively we could delete B and rename A to B
- return False
- if source is None:
- # do nothing, maybe the rename was already done
- return False
- # source is not None and target is None:
- # rename is in order
- self.changed = True
- return True
-
- def filter_out_none_entries(self, list_or_dict):
- """take a dict or list as input and return a dict/list without keys/elements whose values are None
- skip empty dicts or lists.
- """
-
- if isinstance(list_or_dict, dict):
- result = {}
- for key, value in list_or_dict.items():
- if isinstance(value, (list, dict)):
- sub = self.filter_out_none_entries(value)
- if sub:
- # skip empty dict or list
- result[key] = sub
- elif value is not None:
- # skip None value
- result[key] = value
- return result
-
- if isinstance(list_or_dict, list):
- alist = []
- for item in list_or_dict:
- if isinstance(item, (list, dict)):
- sub = self.filter_out_none_entries(item)
- if sub:
- # skip empty dict or list
- alist.append(sub)
- elif item is not None:
- # skip None value
- alist.append(item)
- return alist
-
- raise TypeError('unexpected type %s' % type(list_or_dict))
-
- @staticmethod
- def get_not_none_values_from_dict(parameters, keys):
- # python 2.6 does not support dict comprehension using k: v
- return dict((key, value) for key, value in parameters.items() if key in keys and value is not None)
diff --git a/ansible_collections/netapp/azure/plugins/modules/azure_rm_netapp_account.py b/ansible_collections/netapp/azure/plugins/modules/azure_rm_netapp_account.py
deleted file mode 100644
index c09ade0df..000000000
--- a/ansible_collections/netapp/azure/plugins/modules/azure_rm_netapp_account.py
+++ /dev/null
@@ -1,404 +0,0 @@
-#!/usr/bin/python
-#
-# (c) 2019, NetApp, Inc
-# GNU General Public License v3.0+
-# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-'''
-azure_rm_netapp_account
-'''
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-DOCUMENTATION = '''
----
-module: azure_rm_netapp_account
-
-short_description: Manage NetApp Azure Files Account
-version_added: 19.10.0
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-
-description:
- - Create and delete NetApp Azure account.
- Provide the Resource group name for the NetApp account to be created.
-extends_documentation_fragment:
- - netapp.azure.azure
- - netapp.azure.azure_tags
- - netapp.azure.netapp.azure_rm_netapp
-
-options:
- name:
- description:
- - The name of the NetApp account.
- required: true
- type: str
- location:
- description:
- - Resource location.
- - Required for create.
- type: str
-
- active_directories:
- description:
- - list of active directory dictionaries.
- - The list is currently limited to a single active directory (ANF or Azure limit of one AD per subscription).
- type: list
- elements: dict
- version_added: 21.2.0
- suboptions:
- active_directory_id:
- description: not used for create. Not needed for join.
- type: str
- dns:
- description: list of DNS addresses. Required for create or join.
- type: list
- elements: str
- domain:
- description: Fully Qualified Active Directory DNS Domain Name. Required for create or join.
- type: str
- site:
- description: The Active Directory site the service will limit Domain Controller discovery to.
- type: str
- smb_server_name:
- description: Prefix for creating the SMB server's computer account name in the Active Directory domain. Required for create or join.
- type: str
- organizational_unit:
- description: LDAP Path for the Organization Unit where SMB Server machine accounts will be created (i.e. OU=SecondLevel,OU=FirstLevel).
- type: str
- username:
- description: Credentials that have permissions to create SMB server machine account in the AD domain. Required for create or join.
- type: str
- password:
- description: see username. If password is present, the module is not idempotent, as we cannot check the current value. Required for create or join.
- type: str
- aes_encryption:
- description: If enabled, AES encryption will be enabled for SMB communication.
- type: bool
- ldap_signing:
- description: Specifies whether or not the LDAP traffic needs to be signed.
- type: bool
- ad_name:
- description: Name of the active directory machine. Used only while creating kerberos volume.
- type: str
- version_added: 21.3.0
- kdc_ip:
- description: kdc server IP addresses for the active directory machine. Used only while creating kerberos volume.
- type: str
- version_added: 21.3.0
- server_root_ca_certificate:
- description:
- - When LDAP over SSL/TLS is enabled, the LDAP client is required to have base64 encoded Active Directory Certificate Service's
- self-signed root CA certificate, this optional parameter is used only for dual protocol with LDAP user-mapping volumes.
- type: str
- version_added: 21.3.0
- state:
- description:
- - State C(present) will check that the NetApp account exists with the requested configuration.
- - State C(absent) will delete the NetApp account.
- default: present
- choices:
- - absent
- - present
- type: str
- debug:
- description: output details about current account if it exists.
- type: bool
- default: false
-
-'''
-EXAMPLES = '''
-
-- name: Create NetApp Azure Account
- netapp.azure.azure_rm_netapp_account:
- resource_group: myResourceGroup
- name: testaccount
- location: eastus
- tags: {'abc': 'xyz', 'cba': 'zyx'}
-
-- name: Modify Azure NetApp account (Join AD)
- netapp.azure.azure_rm_netapp_account:
- resource_group: myResourceGroup
- name: testaccount
- location: eastus
- active_directories:
- - site: ln
- dns: 10.10.10.10
- domain: domain.com
- smb_server_name: dummy
- password: xxxxxx
- username: laurentn
-
-- name: Delete NetApp Azure Account
- netapp.azure.azure_rm_netapp_account:
- state: absent
- resource_group: myResourceGroup
- name: testaccount
- location: eastus
-
-- name: Create Azure NetApp account (with AD)
- netapp.azure.azure_rm_netapp_account:
- resource_group: laurentngroupnodash
- name: tests-netapp11
- location: eastus
- tags:
- creator: laurentn
- use: Ansible
- active_directories:
- - site: ln
- dns: 10.10.10.10
- domain: domain.com
- smb_server_name: dummy
- password: xxxxxx
- username: laurentn
-'''
-
-RETURN = '''
-'''
-
-import traceback
-
-HAS_AZURE_MGMT_NETAPP = False
-IMPORT_ERRORS = list()
-
-try:
- from msrestazure.azure_exceptions import CloudError
- from azure.core.exceptions import AzureError, ResourceNotFoundError
-except ImportError as exc:
- IMPORT_ERRORS.append(str(exc))
-
-try:
- from azure.mgmt.netapp.models import NetAppAccount, NetAppAccountPatch, ActiveDirectory
- HAS_AZURE_MGMT_NETAPP = True
-except ImportError as exc:
- IMPORT_ERRORS.append(str(exc))
-
-from ansible.module_utils.basic import to_native
-from ansible_collections.netapp.azure.plugins.module_utils.azure_rm_netapp_common import AzureRMNetAppModuleBase
-from ansible_collections.netapp.azure.plugins.module_utils.netapp_module import NetAppModule
-
-
-class AzureRMNetAppAccount(AzureRMNetAppModuleBase):
- ''' create, modify, delete account, including joining AD domain
- '''
- def __init__(self):
-
- self.module_arg_spec = dict(
- resource_group=dict(type='str', required=True),
- name=dict(type='str', required=True),
- location=dict(type='str', required=False),
- state=dict(choices=['present', 'absent'], default='present', type='str'),
- active_directories=dict(type='list', elements='dict', options=dict(
- active_directory_id=dict(type='str'),
- dns=dict(type='list', elements='str'),
- domain=dict(type='str'),
- site=dict(type='str'),
- smb_server_name=dict(type='str'),
- organizational_unit=dict(type='str'),
- username=dict(type='str'),
- password=dict(type='str', no_log=True),
- aes_encryption=dict(type='bool'),
- ldap_signing=dict(type='bool'),
- ad_name=dict(type='str'),
- kdc_ip=dict(type='str'),
- server_root_ca_certificate=dict(type='str', no_log=True),
- )),
- debug=dict(type='bool', default=False)
- )
-
- self.na_helper = NetAppModule()
- self.parameters = dict()
- self.debug = list()
- self.warnings = list()
-
- # import errors are handled in AzureRMModuleBase
- super(AzureRMNetAppAccount, self).__init__(derived_arg_spec=self.module_arg_spec,
- required_if=[('state', 'present', ['location'])],
- supports_check_mode=True)
-
- def get_azure_netapp_account(self):
- """
- Returns NetApp Account object for an existing account
- Return None if account does not exist
- """
- try:
- account_get = self.netapp_client.accounts.get(self.parameters['resource_group'], self.parameters['name'])
- except (CloudError, ResourceNotFoundError): # account does not exist
- return None
- account = vars(account_get)
- ads = None
- if account.get('active_directories') is not None:
- ads = list()
- for each_ad in account.get('active_directories'):
- ad_dict = vars(each_ad)
- dns = ad_dict.get('dns')
- if dns is not None:
- ad_dict['dns'] = sorted(dns.split(','))
- ads.append(ad_dict)
- account['active_directories'] = ads
- return account
-
- def create_account_request_body(self, modify=None):
- """
- Create an Azure NetApp Account Request Body
- :return: None
- """
- options = dict()
- location = None
- for attr in ('location', 'tags', 'active_directories'):
- value = self.parameters.get(attr)
- if attr == 'location' and modify is None:
- location = value
- continue
- if value is not None:
- if modify is None or attr in modify:
- if attr == 'active_directories':
- ads = list()
- for ad_dict in value:
- if ad_dict.get('dns') is not None:
- # API expects a string of comma separated elements
- ad_dict['dns'] = ','.join(ad_dict['dns'])
- ads.append(ActiveDirectory(**self.na_helper.filter_out_none_entries(ad_dict)))
- value = ads
- options[attr] = value
- if modify is None:
- if location is None:
- self.module.fail_json(msg="Error: 'location' is a required parameter")
- return NetAppAccount(location=location, **options)
- return NetAppAccountPatch(**options)
-
- def create_azure_netapp_account(self):
- """
- Create an Azure NetApp Account
- :return: None
- """
- account_body = self.create_account_request_body()
- try:
- response = self.get_method('accounts', 'create_or_update')(body=account_body,
- resource_group_name=self.parameters['resource_group'],
- account_name=self.parameters['name'])
- while response.done() is not True:
- response.result(10)
- except (CloudError, AzureError) as error:
- self.module.fail_json(msg='Error creating Azure NetApp account %s: %s'
- % (self.parameters['name'], to_native(error)),
- exception=traceback.format_exc())
-
- def update_azure_netapp_account(self, modify):
- """
- Create an Azure NetApp Account
- :return: None
- """
- account_body = self.create_account_request_body(modify)
- try:
- response = self.get_method('accounts', 'update')(body=account_body,
- resource_group_name=self.parameters['resource_group'],
- account_name=self.parameters['name'])
- while response.done() is not True:
- response.result(10)
- except (CloudError, AzureError) as error:
- self.module.fail_json(msg='Error creating Azure NetApp account %s: %s'
- % (self.parameters['name'], to_native(error)),
- exception=traceback.format_exc())
-
- def delete_azure_netapp_account(self):
- """
- Delete an Azure NetApp Account
- :return: None
- """
- try:
- response = self.get_method('accounts', 'delete')(resource_group_name=self.parameters['resource_group'],
- account_name=self.parameters['name'])
- while response.done() is not True:
- response.result(10)
- except (CloudError, AzureError) as error:
- self.module.fail_json(msg='Error deleting Azure NetApp account %s: %s'
- % (self.parameters['name'], to_native(error)),
- exception=traceback.format_exc())
-
- def get_changes_in_ads(self, current, desired):
- c_ads = current.get('active_directories')
- d_ads = desired.get('active_directories')
- if not c_ads:
- return desired.get('active_directories'), None
- if not d_ads:
- return None, current.get('active_directories')
- if len(c_ads) > 1 or len(d_ads) > 1:
- msg = 'Error checking for AD, currently only one AD is supported.'
- if len(c_ads) > 1:
- msg += ' Current: %s.' % str(c_ads)
- if len(d_ads) > 1:
- msg += ' Desired: %s.' % str(d_ads)
- self.module.fail_json(msg='Error checking for AD, currently only one AD is supported')
- changed = False
- d_ad = d_ads[0]
- c_ad = c_ads[0]
- for key, value in c_ad.items():
- if key == 'password':
- if d_ad.get(key) is None:
- continue
- self.warnings.append("module is not idempotent if 'password:' is present")
- if d_ad.get(key) is None:
- d_ad[key] = value
- elif d_ad.get(key) != value:
- changed = True
- self.debug.append("key: %s, value %s" % (key, value))
- if changed:
- return [d_ad], None
- return None, None
-
- def exec_module(self, **kwargs):
-
- # unlikely
- self.fail_when_import_errors(IMPORT_ERRORS, HAS_AZURE_MGMT_NETAPP)
-
- # set up parameters according to our initial list
- for key in list(self.module_arg_spec):
- self.parameters[key] = kwargs[key]
- # and common parameter
- for key in ['tags']:
- if key in kwargs:
- self.parameters[key] = kwargs[key]
-
- current = self.get_azure_netapp_account()
- modify = None
- cd_action = self.na_helper.get_cd_action(current, self.parameters)
- self.debug.append('current: %s' % str(current))
- if current is not None and cd_action is None:
- ads_to_add, ads_to_delete = self.get_changes_in_ads(current, self.parameters)
- self.parameters.pop('active_directories', None)
- if ads_to_add:
- self.parameters['active_directories'] = ads_to_add
- if ads_to_delete:
- self.module.fail_json(msg="Error: API does not support unjoining an AD", debug=self.debug)
- modify = self.na_helper.get_modified_attributes(current, self.parameters)
- if 'tags' in modify:
- dummy, modify['tags'] = self.update_tags(current.get('tags'))
-
- if self.na_helper.changed:
- if self.module.check_mode:
- pass
- else:
- if cd_action == 'create':
- self.create_azure_netapp_account()
- elif cd_action == 'delete':
- self.delete_azure_netapp_account()
- elif modify:
- self.update_azure_netapp_account(modify)
- results = dict(
- changed=self.na_helper.changed,
- modify=modify
- )
- if self.warnings:
- results['warnings'] = self.warnings
- if self.parameters['debug']:
- results['debug'] = self.debug
- self.module.exit_json(**results)
-
-
-def main():
- AzureRMNetAppAccount()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/azure/plugins/modules/azure_rm_netapp_capacity_pool.py b/ansible_collections/netapp/azure/plugins/modules/azure_rm_netapp_capacity_pool.py
deleted file mode 100644
index 9d099a03f..000000000
--- a/ansible_collections/netapp/azure/plugins/modules/azure_rm_netapp_capacity_pool.py
+++ /dev/null
@@ -1,259 +0,0 @@
-#!/usr/bin/python
-#
-# (c) 2019, NetApp, Inc
-# GNU General Public License v3.0+
-# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-"""
-azure_rm_netapp_capacity_pool
-"""
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-DOCUMENTATION = '''
----
-module: azure_rm_netapp_capacity_pool
-
-short_description: Manage NetApp Azure Files capacity pool
-version_added: 19.10.0
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-
-description:
- - Create and delete NetApp Azure capacity pool.
- Provide the Resource group name for the capacity pool to be created.
- - Resize NetApp Azure capacity pool
-extends_documentation_fragment:
- - netapp.azure.azure
- - netapp.azure.azure_tags
- - netapp.azure.netapp.azure_rm_netapp
-
-options:
- name:
- description:
- - The name of the capacity pool.
- required: true
- type: str
- account_name:
- description:
- - The name of the NetApp account.
- required: true
- type: str
- location:
- description:
- - Resource location.
- - Required for create.
- type: str
- size:
- description:
- - Provisioned size of the pool (in chunks). Allowed values are in 4TiB chunks.
- - Provide number to be multiplied to 4TiB.
- - Required for create.
- default: 1
- type: int
- service_level:
- description:
- - The service level of the file system.
- - Required for create.
- choices: ['Standard', 'Premium', 'Ultra']
- type: str
- version_added: "20.5.0"
- state:
- description:
- - State C(present) will check that the capacity pool exists with the requested configuration.
- - State C(absent) will delete the capacity pool.
- default: present
- choices: ['present', 'absent']
- type: str
-
-'''
-EXAMPLES = '''
-
-- name: Create Azure NetApp capacity pool
- netapp.azure.azure_rm_netapp_capacity_pool:
- resource_group: myResourceGroup
- account_name: tests-netapp
- name: tests-pool
- location: eastus
- size: 2
- service_level: Standard
-
-- name: Resize Azure NetApp capacity pool
- netapp.azure.azure_rm_netapp_capacity_pool:
- resource_group: myResourceGroup
- account_name: tests-netapp
- name: tests-pool
- location: eastus
- size: 3
- service_level: Standard
-
-- name: Delete Azure NetApp capacity pool
- netapp.azure.azure_rm_netapp_capacity_pool:
- state: absent
- resource_group: myResourceGroup
- account_name: tests-netapp
- name: tests-pool
-
-'''
-
-RETURN = '''
-'''
-
-import traceback
-
-AZURE_OBJECT_CLASS = 'NetAppAccount'
-HAS_AZURE_MGMT_NETAPP = False
-IMPORT_ERRORS = list()
-SIZE_POOL = 4398046511104
-
-try:
- from msrestazure.azure_exceptions import CloudError
- from azure.core.exceptions import AzureError, ResourceNotFoundError
-except ImportError as exc:
- IMPORT_ERRORS.append(str(exc))
-
-try:
- from azure.mgmt.netapp.models import CapacityPool
- HAS_AZURE_MGMT_NETAPP = True
-except ImportError as exc:
- IMPORT_ERRORS.append(str(exc))
-
-from ansible.module_utils.basic import to_native
-from ansible_collections.netapp.azure.plugins.module_utils.azure_rm_netapp_common import AzureRMNetAppModuleBase
-from ansible_collections.netapp.azure.plugins.module_utils.netapp_module import NetAppModule
-
-
-class AzureRMNetAppCapacityPool(AzureRMNetAppModuleBase):
- """ create, modify, delete a capacity pool """
- def __init__(self):
-
- self.module_arg_spec = dict(
- resource_group=dict(type='str', required=True),
- name=dict(type='str', required=True),
- account_name=dict(type='str', required=True),
- location=dict(type='str', required=False),
- state=dict(choices=['present', 'absent'], default='present', type='str'),
- size=dict(type='int', required=False, default=1),
- service_level=dict(type='str', required=False, choices=['Standard', 'Premium', 'Ultra']),
- )
-
- self.na_helper = NetAppModule()
- self.parameters = dict()
-
- # import errors are handled in AzureRMModuleBase
- super(AzureRMNetAppCapacityPool, self).__init__(derived_arg_spec=self.module_arg_spec,
- required_if=[('state', 'present', ['location', 'service_level'])],
- supports_check_mode=True)
-
- def get_azure_netapp_capacity_pool(self):
- """
- Returns capacity pool object for an existing pool
- Return None if capacity pool does not exist
- """
- try:
- capacity_pool_get = self.netapp_client.pools.get(self.parameters['resource_group'],
- self.parameters['account_name'], self.parameters['name'])
- except (CloudError, ResourceNotFoundError): # capacity pool does not exist
- return None
- return capacity_pool_get
-
- def create_azure_netapp_capacity_pool(self):
- """
- Create a capacity pool for the given Azure NetApp Account
- :return: None
- """
- options = self.na_helper.get_not_none_values_from_dict(self.parameters, ['location', 'service_level', 'size', 'tags'])
- capacity_pool_body = CapacityPool(**options)
- try:
- response = self.get_method('pools', 'create_or_update')(body=capacity_pool_body, resource_group_name=self.parameters['resource_group'],
- account_name=self.parameters['account_name'],
- pool_name=self.parameters['name'])
- while response.done() is not True:
- response.result(10)
-
- except (CloudError, AzureError) as error:
- self.module.fail_json(msg='Error creating capacity pool %s for Azure NetApp account %s: %s'
- % (self.parameters['name'], self.parameters['account_name'], to_native(error)),
- exception=traceback.format_exc())
-
- def modify_azure_netapp_capacity_pool(self, modify):
- """
- Modify a capacity pool for the given Azure NetApp Account
- :return: None
- """
- options = self.na_helper.get_not_none_values_from_dict(self.parameters, ['location', 'service_level', 'size', 'tags'])
- capacity_pool_body = CapacityPool(**options)
- try:
- response = self.get_method('pools', 'update')(body=capacity_pool_body, resource_group_name=self.parameters['resource_group'],
- account_name=self.parameters['account_name'],
- pool_name=self.parameters['name'])
- while response.done() is not True:
- response.result(10)
-
- except (CloudError, AzureError) as error:
- self.module.fail_json(msg='Error modifying capacity pool %s for Azure NetApp account %s: %s'
- % (self.parameters['name'], self.parameters['account_name'], to_native(error)),
- exception=traceback.format_exc())
-
- def delete_azure_netapp_capacity_pool(self):
- """
- Delete a capacity pool for the given Azure NetApp Account
- :return: None
- """
- try:
- response = self.get_method('pools', 'delete')(resource_group_name=self.parameters['resource_group'],
- account_name=self.parameters['account_name'], pool_name=self.parameters['name'])
- while response.done() is not True:
- response.result(10)
-
- except (CloudError, AzureError) as error:
- self.module.fail_json(msg='Error deleting capacity pool %s for Azure NetApp account %s: %s'
- % (self.parameters['name'], self.parameters['name'], to_native(error)),
- exception=traceback.format_exc())
-
- def exec_module(self, **kwargs):
-
- # unlikely
- self.fail_when_import_errors(IMPORT_ERRORS, HAS_AZURE_MGMT_NETAPP)
-
- # set up parameters according to our initial list
- for key in list(self.module_arg_spec):
- self.parameters[key] = kwargs[key]
- # and common parameter
- for key in ['tags']:
- if key in kwargs:
- self.parameters[key] = kwargs[key]
- if 'size' in self.parameters:
- self.parameters['size'] *= SIZE_POOL
-
- modify = {}
- current = self.get_azure_netapp_capacity_pool()
- cd_action = self.na_helper.get_cd_action(current, self.parameters)
- if cd_action is None and self.parameters['state'] == 'present':
- current = vars(current)
- # get_azure_netapp_capacity_pool() returns pool name with account name appended in front of it like 'account/pool'
- current['name'] = self.parameters['name']
- modify = self.na_helper.get_modified_attributes(current, self.parameters)
- if 'tags' in modify:
- dummy, modify['tags'] = self.update_tags(current.get('tags'))
-
- if self.na_helper.changed:
- if self.module.check_mode:
- pass
- else:
- if cd_action == 'create':
- self.create_azure_netapp_capacity_pool()
- elif cd_action == 'delete':
- self.delete_azure_netapp_capacity_pool()
- elif modify:
- self.modify_azure_netapp_capacity_pool(modify)
-
- self.module.exit_json(changed=self.na_helper.changed, modify=modify)
-
-
-def main():
- AzureRMNetAppCapacityPool()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/azure/plugins/modules/azure_rm_netapp_snapshot.py b/ansible_collections/netapp/azure/plugins/modules/azure_rm_netapp_snapshot.py
deleted file mode 100644
index 212f10861..000000000
--- a/ansible_collections/netapp/azure/plugins/modules/azure_rm_netapp_snapshot.py
+++ /dev/null
@@ -1,226 +0,0 @@
-#!/usr/bin/python
-#
-# (c) 2019, NetApp, Inc
-# GNU General Public License v3.0+
-# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-"""
-azure_rm_netapp_snapshot
-"""
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-DOCUMENTATION = '''
----
-module: azure_rm_netapp_snapshot
-
-short_description: Manage NetApp Azure Files Snapshot
-version_added: 19.10.0
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-
-description:
- - Create and delete NetApp Azure Snapshot.
-extends_documentation_fragment:
- - netapp.azure.azure
- - netapp.azure.netapp.azure_rm_netapp
-
-options:
- name:
- description:
- - The name of the snapshot.
- required: true
- type: str
- volume_name:
- description:
- - The name of the volume.
- required: true
- type: str
- pool_name:
- description:
- - The name of the capacity pool.
- required: true
- type: str
- account_name:
- description:
- - The name of the NetApp account.
- required: true
- type: str
- location:
- description:
- - Resource location.
- - Required for create.
- type: str
- state:
- description:
- - State C(present) will check that the snapshot exists with the requested configuration.
- - State C(absent) will delete the snapshot.
- default: present
- choices:
- - absent
- - present
- type: str
-
-'''
-EXAMPLES = '''
-
-- name: Create Azure NetApp Snapshot
- netapp.azure.azure_rm_netapp_snapshot:
- resource_group: myResourceGroup
- account_name: tests-netapp
- pool_name: tests-pool
- volume_name: tests-volume2
- name: tests-snapshot
- location: eastus
-
-- name: Delete Azure NetApp Snapshot
- netapp.azure.azure_rm_netapp_snapshot:
- state: absent
- resource_group: myResourceGroup
- account_name: tests-netapp
- pool_name: tests-pool
- volume_name: tests-volume2
- name: tests-snapshot
-
-'''
-
-RETURN = '''
-'''
-
-import traceback
-
-AZURE_OBJECT_CLASS = 'NetAppAccount'
-HAS_AZURE_MGMT_NETAPP = False
-IMPORT_ERRORS = list()
-
-try:
- from msrestazure.azure_exceptions import CloudError
- from azure.core.exceptions import AzureError, ResourceNotFoundError
-except ImportError as exc:
- IMPORT_ERRORS.append(str(exc))
-
-try:
- from azure.mgmt.netapp.models import Snapshot
- HAS_AZURE_MGMT_NETAPP = True
-except ImportError as exc:
- IMPORT_ERRORS.append(str(exc))
-
-from ansible.module_utils.basic import to_native
-from ansible_collections.netapp.azure.plugins.module_utils.azure_rm_netapp_common import AzureRMNetAppModuleBase
-from ansible_collections.netapp.azure.plugins.module_utils.netapp_module import NetAppModule
-
-
-class AzureRMNetAppSnapshot(AzureRMNetAppModuleBase):
- """ crate or delete snapshots """
- def __init__(self):
-
- self.module_arg_spec = dict(
- resource_group=dict(type='str', required=True),
- name=dict(type='str', required=True),
- volume_name=dict(type='str', required=True),
- pool_name=dict(type='str', required=True),
- account_name=dict(type='str', required=True),
- location=dict(type='str', required=False),
- state=dict(choices=['present', 'absent'], default='present', type='str')
- )
- self.na_helper = NetAppModule()
- self.parameters = dict()
-
- # import errors are handled in AzureRMModuleBase
- super(AzureRMNetAppSnapshot, self).__init__(derived_arg_spec=self.module_arg_spec,
- required_if=[('state', 'present', ['location'])],
- supports_check_mode=True,
- supports_tags=False)
-
- def get_azure_netapp_snapshot(self):
- """
- Returns snapshot object for an existing snapshot
- Return None if snapshot does not exist
- """
- try:
- snapshot_get = self.netapp_client.snapshots.get(self.parameters['resource_group'], self.parameters['account_name'],
- self.parameters['pool_name'], self.parameters['volume_name'],
- self.parameters['name'])
- except (CloudError, ResourceNotFoundError): # snapshot does not exist
- return None
- return snapshot_get
-
- def create_azure_netapp_snapshot(self):
- """
- Create a snapshot for the given Azure NetApp Account
- :return: None
- """
- kw_args = dict(
- resource_group_name=self.parameters['resource_group'],
- account_name=self.parameters['account_name'],
- pool_name=self.parameters['pool_name'],
- volume_name=self.parameters['volume_name'],
- snapshot_name=self.parameters['name']
- )
- if self.new_style:
- kw_args['body'] = Snapshot(
- location=self.parameters['location']
- )
- else:
- kw_args['location'] = self.parameters['location']
- try:
- result = self.get_method('snapshots', 'create')(**kw_args)
- # waiting till the status turns Succeeded
- while result.done() is not True:
- result.result(10)
-
- except (CloudError, AzureError) as error:
- self.module.fail_json(msg='Error creating snapshot %s for Azure NetApp account %s: %s'
- % (self.parameters['name'], self.parameters['account_name'], to_native(error)),
- exception=traceback.format_exc())
-
- def delete_azure_netapp_snapshot(self):
- """
- Delete a snapshot for the given Azure NetApp Account
- :return: None
- """
- try:
- result = self.get_method('snapshots', 'delete')(resource_group_name=self.parameters['resource_group'],
- account_name=self.parameters['account_name'],
- pool_name=self.parameters['pool_name'],
- volume_name=self.parameters['volume_name'],
- snapshot_name=self.parameters['name'])
- # waiting till the status turns Succeeded
- while result.done() is not True:
- result.result(10)
-
- except (CloudError, AzureError) as error:
- self.module.fail_json(msg='Error deleting snapshot %s for Azure NetApp account %s: %s'
- % (self.parameters['name'], self.parameters['account_name'], to_native(error)),
- exception=traceback.format_exc())
-
- def exec_module(self, **kwargs):
-
- # unlikely
- self.fail_when_import_errors(IMPORT_ERRORS, HAS_AZURE_MGMT_NETAPP)
-
- # set up parameters according to our initial list
- for key in list(self.module_arg_spec):
- self.parameters[key] = kwargs[key]
-
- current = self.get_azure_netapp_snapshot()
- cd_action = self.na_helper.get_cd_action(current, self.parameters)
-
- if self.na_helper.changed:
- if self.module.check_mode:
- pass
- else:
- if cd_action == 'create':
- self.create_azure_netapp_snapshot()
- elif cd_action == 'delete':
- self.delete_azure_netapp_snapshot()
-
- self.module.exit_json(changed=self.na_helper.changed)
-
-
-def main():
- AzureRMNetAppSnapshot()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/azure/plugins/modules/azure_rm_netapp_volume.py b/ansible_collections/netapp/azure/plugins/modules/azure_rm_netapp_volume.py
deleted file mode 100644
index 487787ee7..000000000
--- a/ansible_collections/netapp/azure/plugins/modules/azure_rm_netapp_volume.py
+++ /dev/null
@@ -1,399 +0,0 @@
-#!/usr/bin/python
-#
-# (c) 2019, NetApp, Inc
-# GNU General Public License v3.0+
-# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-'''
-azure_rm_netapp_volume
-'''
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-DOCUMENTATION = '''
----
-module: azure_rm_netapp_volume
-
-short_description: Manage NetApp Azure Files Volume
-version_added: 19.10.0
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-
-description:
- - Create and delete NetApp Azure volume.
-extends_documentation_fragment:
- - netapp.azure.azure
- - netapp.azure.azure_tags
- - netapp.azure.netapp.azure_rm_netapp
-
-options:
- name:
- description:
- - The name of the volume.
- required: true
- type: str
- file_path:
- description:
- - A unique file path for the volume. Used when creating mount targets.
- type: str
- pool_name:
- description:
- - The name of the capacity pool.
- required: true
- type: str
- account_name:
- description:
- - The name of the NetApp account.
- required: true
- type: str
- location:
- description:
- - Resource location.
- - Required for create.
- type: str
- subnet_name:
- description:
- - Azure resource name for a delegated subnet. Must have the delegation Microsoft.NetApp/volumes.
- - Provide name of the subnet ID.
- - Required for create.
- type: str
- aliases: ['subnet_id']
- version_added: 21.1.0
- virtual_network:
- description:
- - The name of the virtual network required for the subnet to create a volume.
- - Required for create.
- type: str
- service_level:
- description:
- - The service level of the file system.
- - default is Premium.
- type: str
- choices: ['Premium', 'Standard', 'Ultra']
- vnet_resource_group_for_subnet:
- description:
- - Only required if virtual_network to be used is of different resource_group.
- - Name of the resource group for virtual_network and subnet_name to be used.
- type: str
- version_added: "20.5.0"
- size:
- description:
- - Provisioned size of the volume (in GiB).
- - Minimum size is 100 GiB. Upper limit is 100TiB
- - default is 100GiB.
- version_added: "20.5.0"
- type: int
- protocol_types:
- description:
- - Protocol types - NFSv3, NFSv4.1, CIFS (for SMB).
- type: list
- elements: str
- version_added: 21.2.0
- state:
- description:
- - State C(present) will check that the volume exists with the requested configuration.
- - State C(absent) will delete the volume.
- default: present
- choices: ['present', 'absent']
- type: str
- feature_flags:
- description:
- - Enable or disable a new feature.
- - This can be used to enable an experimental feature or disable a new feature that breaks backward compatibility.
- - Supported keys and values are subject to change without notice. Unknown keys are ignored.
- type: dict
- version_added: 21.9.0
-notes:
- - feature_flags is setting ignore_change_ownership_mode to true by default to bypass a 'change ownership mode' issue with azure-mgmt-netapp 4.0.0.
-'''
-EXAMPLES = '''
-
-- name: Create Azure NetApp volume
- netapp.azure.azure_rm_netapp_volume:
- resource_group: myResourceGroup
- account_name: tests-netapp
- pool_name: tests-pool
- name: tests-volume2
- location: eastus
- file_path: tests-volume2
- virtual_network: myVirtualNetwork
- vnet_resource_group_for_subnet: myVirtualNetworkResourceGroup
- subnet_name: test
- service_level: Ultra
- size: 100
-
-- name: Delete Azure NetApp volume
- netapp.azure.azure_rm_netapp_volume:
- state: absent
- resource_group: myResourceGroup
- account_name: tests-netapp
- pool_name: tests-pool
- name: tests-volume2
-
-'''
-
-RETURN = '''
-mount_path:
- description: Returns mount_path of the Volume
- returned: always
- type: str
-
-'''
-
-import traceback
-
-AZURE_OBJECT_CLASS = 'NetAppAccount'
-HAS_AZURE_MGMT_NETAPP = False
-IMPORT_ERRORS = []
-ONE_GIB = 1073741824
-
-try:
- from msrestazure.azure_exceptions import CloudError
- from msrest.exceptions import ValidationError
- from azure.core.exceptions import AzureError, ResourceNotFoundError
-except ImportError as exc:
- IMPORT_ERRORS.append(str(exc))
-
-try:
- from azure.mgmt.netapp.models import Volume, ExportPolicyRule, VolumePropertiesExportPolicy, VolumePatch
- HAS_AZURE_MGMT_NETAPP = True
-except ImportError as exc:
- IMPORT_ERRORS.append(str(exc))
-
-from ansible.module_utils.basic import to_native
-from ansible_collections.netapp.azure.plugins.module_utils.azure_rm_netapp_common import AzureRMNetAppModuleBase
-from ansible_collections.netapp.azure.plugins.module_utils.netapp_module import NetAppModule
-
-
-class AzureRMNetAppVolume(AzureRMNetAppModuleBase):
- ''' create or delete a volume '''
-
- def __init__(self):
-
- self.module_arg_spec = dict(
- resource_group=dict(type='str', required=True),
- name=dict(type='str', required=True),
- file_path=dict(type='str', required=False),
- pool_name=dict(type='str', required=True),
- account_name=dict(type='str', required=True),
- location=dict(type='str', required=False),
- state=dict(choices=['present', 'absent'], default='present', type='str'),
- subnet_name=dict(type='str', required=False, aliases=['subnet_id']),
- virtual_network=dict(type='str', required=False),
- size=dict(type='int', required=False),
- vnet_resource_group_for_subnet=dict(type='str', required=False),
- service_level=dict(type='str', required=False, choices=['Premium', 'Standard', 'Ultra']),
- protocol_types=dict(type='list', elements='str'),
- feature_flags=dict(type='dict')
- )
- self.na_helper = NetAppModule()
- self.parameters = {}
-
- # import errors are handled in AzureRMModuleBase
- super(AzureRMNetAppVolume, self).__init__(derived_arg_spec=self.module_arg_spec,
- required_if=[('state', 'present', ['location', 'file_path', 'subnet_name', 'virtual_network']),
- ],
- supports_check_mode=True)
-
- @staticmethod
- def dict_from_volume_object(volume_object):
-
- def replace_list_of_objects_with_list_of_dicts(adict, key):
- if adict.get(key):
- adict[key] = [vars(x) for x in adict[key]]
-
- current_dict = vars(volume_object)
- attr = 'subnet_id'
- if attr in current_dict:
- current_dict['subnet_name'] = current_dict.pop(attr).split('/')[-1]
- attr = 'mount_targets'
- replace_list_of_objects_with_list_of_dicts(current_dict, attr)
- attr = 'export_policy'
- if current_dict.get(attr):
- attr_dict = vars(current_dict[attr])
- replace_list_of_objects_with_list_of_dicts(attr_dict, 'rules')
- current_dict[attr] = attr_dict
- return current_dict
-
- def get_azure_netapp_volume(self):
- """
- Returns volume object for an existing volume
- Return None if volume does not exist
- """
- try:
- volume_get = self.netapp_client.volumes.get(self.parameters['resource_group'], self.parameters['account_name'],
- self.parameters['pool_name'], self.parameters['name'])
- except (CloudError, ResourceNotFoundError): # volume does not exist
- return None
- return self.dict_from_volume_object(volume_get)
-
- def get_export_policy_rules(self):
- # ExportPolicyRule(rule_index: int=None, unix_read_only: bool=None, unix_read_write: bool=None,
- # kerberos5_read_only: bool=False, kerberos5_read_write: bool=False, kerberos5i_read_only: bool=False,
- # kerberos5i_read_write: bool=False, kerberos5p_read_only: bool=False, kerberos5p_read_write: bool=False,
- # cifs: bool=None, nfsv3: bool=None, nfsv41: bool=None, allowed_clients: str=None, has_root_access: bool=True
- ptypes = self.parameters.get('protocol_types')
- if ptypes is None:
- return None
- ptypes = [x.lower() for x in ptypes]
- if 'nfsv4.1' in ptypes:
- ptypes.append('nfsv41')
- # only create a policy when NFSv4 is used (for now)
- if 'nfsv41' not in ptypes:
- return None
- options = dict(
- rule_index=1,
- allowed_clients='0.0.0.0/0',
- unix_read_write=True)
- if self.has_feature('ignore_change_ownership_mode') and self.sdk_version >= '4.0.0':
- # https://github.com/Azure/azure-sdk-for-python/issues/20356
- options['chown_mode'] = None
- for protocol in ('cifs', 'nfsv3', 'nfsv41'):
- options[protocol] = protocol in ptypes
- return VolumePropertiesExportPolicy(rules=[ExportPolicyRule(**options)])
-
- def create_azure_netapp_volume(self):
- """
- Create a volume for the given Azure NetApp Account
- :return: None
- """
- options = self.na_helper.get_not_none_values_from_dict(self.parameters, ['protocol_types', 'service_level', 'tags', 'usage_threshold'])
- rules = self.get_export_policy_rules()
- if rules is not None:
- # TODO: other options to expose ?
- # options['throughput_mibps'] = 1.6
- # options['encryption_key_source'] = 'Microsoft.NetApp'
- # options['security_style'] = 'Unix'
- # options['unix_permissions'] = '0770'
- # required for NFSv4
- options['export_policy'] = rules
- subnet_id = '/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/virtualNetworks/%s/subnets/%s'\
- % (self.azure_auth.subscription_id,
- self.parameters['resource_group'] if self.parameters.get('vnet_resource_group_for_subnet') is None
- else self.parameters['vnet_resource_group_for_subnet'],
- self.parameters['virtual_network'],
- self.parameters['subnet_name'])
- volume_body = Volume(
- location=self.parameters['location'],
- creation_token=self.parameters['file_path'],
- subnet_id=subnet_id,
- **options
- )
- try:
- result = self.get_method('volumes', 'create_or_update')(body=volume_body, resource_group_name=self.parameters['resource_group'],
- account_name=self.parameters['account_name'],
- pool_name=self.parameters['pool_name'], volume_name=self.parameters['name'])
- # waiting till the status turns Succeeded
- while result.done() is not True:
- result.result(10)
- except (CloudError, ValidationError, AzureError) as error:
- self.module.fail_json(msg='Error creating volume %s for Azure NetApp account %s and subnet ID %s: %s'
- % (self.parameters['name'], self.parameters['account_name'], subnet_id, to_native(error)),
- exception=traceback.format_exc())
-
- def modify_azure_netapp_volume(self):
- """
- Modify a volume for the given Azure NetApp Account
- :return: None
- """
- options = self.na_helper.get_not_none_values_from_dict(self.parameters, ['tags', 'usage_threshold'])
- volume_body = VolumePatch(
- **options
- )
- try:
- result = self.get_method('volumes', 'update')(body=volume_body, resource_group_name=self.parameters['resource_group'],
- account_name=self.parameters['account_name'],
- pool_name=self.parameters['pool_name'], volume_name=self.parameters['name'])
- # waiting till the status turns Succeeded
- while result.done() is not True:
- result.result(10)
- except (CloudError, ValidationError, AzureError) as error:
- self.module.fail_json(msg='Error modifying volume %s for Azure NetApp account %s: %s'
- % (self.parameters['name'], self.parameters['account_name'], to_native(error)),
- exception=traceback.format_exc())
-
- def delete_azure_netapp_volume(self):
- """
- Delete a volume for the given Azure NetApp Account
- :return: None
- """
- try:
- result = self.get_method('volumes', 'delete')(resource_group_name=self.parameters['resource_group'],
- account_name=self.parameters['account_name'],
- pool_name=self.parameters['pool_name'], volume_name=self.parameters['name'])
- # waiting till the status turns Succeeded
- while result.done() is not True:
- result.result(10)
- except (CloudError, AzureError) as error:
- self.module.fail_json(msg='Error deleting volume %s for Azure NetApp account %s: %s'
- % (self.parameters['name'], self.parameters['account_name'], to_native(error)),
- exception=traceback.format_exc())
-
- def validate_modify(self, modify, current):
- disallowed = dict(modify)
- disallowed.pop('tags', None)
- disallowed.pop('usage_threshold', None)
- if disallowed:
- self.module.fail_json(msg="Error: the following properties cannot be modified: %s. Current: %s" % (repr(disallowed), repr(current)))
-
- def exec_module(self, **kwargs):
-
- # unlikely
- self.fail_when_import_errors(IMPORT_ERRORS, HAS_AZURE_MGMT_NETAPP)
-
- # set up parameters according to our initial list
- for key in list(self.module_arg_spec):
- self.parameters[key] = kwargs[key]
- # and common parameter
- for key in ['tags']:
- if key in kwargs:
- self.parameters[key] = kwargs[key]
-
- # API is using 'usage_threshold' for 'size', and the unit is bytes
- if self.parameters.get('size') is not None:
- self.parameters['usage_threshold'] = ONE_GIB * self.parameters.pop('size')
-
- modify = None
- current = self.get_azure_netapp_volume()
- cd_action = self.na_helper.get_cd_action(current, self.parameters)
- if cd_action is None and current:
- # ignore change in name
- name = current.pop('name', None)
- modify = self.na_helper.get_modified_attributes(current, self.parameters)
- if name is not None:
- current['name'] = name
- if 'tags' in modify:
- dummy, modify['tags'] = self.update_tags(current.get('tags'))
- self.validate_modify(modify, current)
-
- if self.na_helper.changed and not self.module.check_mode:
- if cd_action == 'create':
- self.create_azure_netapp_volume()
- elif cd_action == 'delete':
- self.delete_azure_netapp_volume()
- elif modify:
- self.modify_azure_netapp_volume()
-
- def get_mount_info(return_info):
- if return_info is not None and return_info.get('mount_targets'):
- return '%s:/%s' % (return_info['mount_targets'][0]['ip_address'], return_info['creation_token'])
- return None
-
- mount_info = ''
- if self.parameters['state'] == 'present':
- return_info = self.get_azure_netapp_volume()
- if return_info is None and not self.module.check_mode:
- self.module.fail_json(msg='Error: volume %s was created successfully, but cannot be found.' % self.parameters['name'])
- mount_info = get_mount_info(return_info)
- if mount_info is None and not self.module.check_mode:
- self.module.fail_json(msg='Error: volume %s was created successfully, but mount target(s) cannot be found - volume details: %s.'
- % (self.parameters['name'], str(return_info)))
- self.module.exit_json(changed=self.na_helper.changed, mount_path=mount_info, modify=modify)
-
-
-def main():
- AzureRMNetAppVolume()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/azure/requirements.txt b/ansible_collections/netapp/azure/requirements.txt
deleted file mode 100644
index 4badbc6ae..000000000
--- a/ansible_collections/netapp/azure/requirements.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-azure-mgmt-netapp
-requests
-xmltodict \ No newline at end of file
diff --git a/ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_account/tasks/main.yml b/ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_account/tasks/main.yml
deleted file mode 100644
index 9fa627e48..000000000
--- a/ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_account/tasks/main.yml
+++ /dev/null
@@ -1,41 +0,0 @@
-- name: Create Azure NetApp account
- azure_rm_netapp_account:
- resource_group: laurentngroupnodash
- name: tests-netapp1
- location: eastus
- tags: {'test1': 'tesssttt', 'abc': 'xyz'}
- register: output
-
-- assert:
- that: output.changed
-
-- name: Create Azure NetApp account (Idempotency)
- azure_rm_netapp_account:
- resource_group: laurentngroupnodash
- name: tests-netapp1
- location: eastus
- tags: {'test1': 'tesssttt', 'abc': 'xyz'}
- register: output
-
-- assert:
- that: not output.changed
-
-- name: Delete Azure NetApp account
- azure_rm_netapp_account:
- state: absent
- resource_group: laurentngroupnodash
- name: tests-netapp1
- register: output
-
-- assert:
- that: output.changed
-
-- name: Delete Azure NetApp account (Idempotency)
- azure_rm_netapp_account:
- state: absent
- resource_group: laurentngroupnodash
- name: tests-netapp1
- register: output
-
-- assert:
- that: not output.changed
diff --git a/ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_capacity_pool/aliases b/ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_capacity_pool/aliases
deleted file mode 100644
index 3a0c0dc68..000000000
--- a/ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_capacity_pool/aliases
+++ /dev/null
@@ -1,3 +0,0 @@
-cloud/azure
-shippable/azure/group3
-destructive \ No newline at end of file
diff --git a/ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_capacity_pool/meta/main.yml b/ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_capacity_pool/meta/main.yml
deleted file mode 100644
index 48f5726d8..000000000
--- a/ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_capacity_pool/meta/main.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-dependencies:
- - setup_azure \ No newline at end of file
diff --git a/ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_capacity_pool/tasks/main.yml b/ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_capacity_pool/tasks/main.yml
deleted file mode 100644
index 9bbae4ae7..000000000
--- a/ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_capacity_pool/tasks/main.yml
+++ /dev/null
@@ -1,47 +0,0 @@
-- name: Create Azure NetApp capacity pool
- azure_rm_netapp_capacity_pool:
- resource_group: NetworkWatcherRG
- account_name: ansibleazure
- name: tests-poolsss
- location: eastus
- size: 2
- service_level: Standard
- register: output
-
-- assert:
- that: output.changed
-
-- name: Create Azure NetApp capacity pool (Idempotency)
- azure_rm_netapp_capacity_pool:
- resource_group: NetworkWatcherRG
- account_name: ansibleazure
- name: tests-poolsss
- location: eastus
- size: 2
- service_level: Standard
- register: output
-
-- assert:
- that: not output.changed
-
-- name: Delete Azure NetApp capacity pool
- azure_rm_netapp_capacity_pool:
- state: absent
- resource_group: NetworkWatcherRG
- account_name: ansibleazure
- name: tests-poolsss
- register: output
-
-- assert:
- that: output.changed
-
-- name: Delete Azure NetApp capacity pool (Idempotency)
- azure_rm_netapp_capacity_pool:
- state: absent
- resource_group: NetworkWatcherRG
- account_name: ansibleazure
- name: tests-poolsss
- register: output
-
-- assert:
- that: not output.changed \ No newline at end of file
diff --git a/ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_snapshot/tasks/main.yml b/ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_snapshot/tasks/main.yml
deleted file mode 100644
index c1c1cf5c2..000000000
--- a/ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_snapshot/tasks/main.yml
+++ /dev/null
@@ -1,51 +0,0 @@
-- name: Create Azure NetApp snapshot
- azure_rm_netapp_snapshot:
- resource_group: laurentngroupnodash
- account_name: tests-netapp
- pool_name: test-pool
- volume_name: tes
- name: tests-snapshot
- location: eastus
- register: output
-
-- assert:
- that: output.changed
-
-- name: Create Azure NetApp snapshot (Idempotency)
- azure_rm_netapp_snapshot:
- resource_group: laurentngroupnodash
- account_name: tests-netapp
- pool_name: test-pool
- volume_name: tes
- name: tests-snapshot
- location: eastus
- register: output
-
-- assert:
- that: not output.changed
-
-- name: Delete Azure NetApp snapshot
- azure_rm_netapp_snapshot:
- state: absent
- resource_group: laurentngroupnodash
- account_name: tests-netapp
- pool_name: test-pool
- volume_name: tes
- name: tests-snapshot
- register: output
-
-- assert:
- that: output.changed
-
-- name: Delete Azure NetApp snapshot (Idempotency)
- azure_rm_netapp_snapshot:
- state: absent
- resource_group: laurentngroupnodash
- account_name: tests-netapp
- pool_name: test-pool
- volume_name: tes
- name: tests-snapshot
- register: output
-
-- assert:
- that: not output.changed
diff --git a/ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_volume/tasks/main.yml b/ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_volume/tasks/main.yml
deleted file mode 100644
index c5b2a4262..000000000
--- a/ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_volume/tasks/main.yml
+++ /dev/null
@@ -1,57 +0,0 @@
-- name: Create Azure NetApp volume
- azure_rm_netapp_volume:
- resource_group: NetworkWatcherRG
- account_name: ansibleazure
- pool_name: tests-pool
- name: tests-volume2
- location: eastus
- size: 150
- file_path: tests-volume2
- virtual_network: azure_ansible
- subnet_id: test
- service_level: Standard
- register: output
-
-- assert:
- that: output.changed
-
-- name: Create Azure NetApp volume (Idempotency)
- azure_rm_netapp_volume:
- resource_group: NetworkWatcherRG
- account_name: ansibleazure
- pool_name: tests-pool
- name: tests-volume2
- location: eastus
- size: 150
- file_path: tests-volume2
- virtual_network: azure_ansible
- subnet_id: test
- service_level: Standard
- register: output
-
-- assert:
- that: not output.changed
-
-- name: Delete Azure NetApp volume
- azure_rm_netapp_volume:
- state: absent
- resource_group: NetworkWatcherRG
- account_name: ansibleazure
- pool_name: tests-pool
- name: tests-volume2
- register: output
-
-- assert:
- that: output.changed
-
-- name: Delete Azure NetApp volume (Idempotency)
- azure_rm_netapp_volume:
- state: absent
- resource_group: NetworkWatcherRG
- account_name: ansibleazure
- pool_name: tests-pool
- name: tests-volume2
- register: output
-
-- assert:
- that: not output.changed
diff --git a/ansible_collections/netapp/azure/tests/runner/requirements/integration.cloud.azure.txt b/ansible_collections/netapp/azure/tests/runner/requirements/integration.cloud.azure.txt
deleted file mode 100644
index e75cf1e2b..000000000
--- a/ansible_collections/netapp/azure/tests/runner/requirements/integration.cloud.azure.txt
+++ /dev/null
@@ -1 +0,0 @@
-azure-mgmt-netapp ; python_version >= '2.7'
diff --git a/ansible_collections/netapp/azure/tests/runner/requirements/requirements-azure.txt b/ansible_collections/netapp/azure/tests/runner/requirements/requirements-azure.txt
deleted file mode 100644
index 11852e2a5..000000000
--- a/ansible_collections/netapp/azure/tests/runner/requirements/requirements-azure.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-azure-common==1.1.11
-azure-mgmt-compute==4.4.0
-azure-storage==0.35.1
-azure-mgmt-monitor==0.5.2
-azure-mgmt-network==2.3.0
-azure-mgmt-resource==2.1.0
-azure-mgmt-storage==3.1.0
-azure-mgmt-netapp ; python_version >= '2.7'
-azure-cli
diff --git a/ansible_collections/netapp/azure/tests/runner/requirements/unit.cloud.azure.txt b/ansible_collections/netapp/azure/tests/runner/requirements/unit.cloud.azure.txt
deleted file mode 100644
index e75cf1e2b..000000000
--- a/ansible_collections/netapp/azure/tests/runner/requirements/unit.cloud.azure.txt
+++ /dev/null
@@ -1 +0,0 @@
-azure-mgmt-netapp ; python_version >= '2.7'
diff --git a/ansible_collections/netapp/azure/tests/runner/requirements/units.txt b/ansible_collections/netapp/azure/tests/runner/requirements/units.txt
deleted file mode 100644
index e75cf1e2b..000000000
--- a/ansible_collections/netapp/azure/tests/runner/requirements/units.txt
+++ /dev/null
@@ -1 +0,0 @@
-azure-mgmt-netapp ; python_version >= '2.7'
diff --git a/ansible_collections/netapp/azure/tests/unit/compat/__init__.py b/ansible_collections/netapp/azure/tests/unit/compat/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/ansible_collections/netapp/azure/tests/unit/compat/__init__.py
+++ /dev/null
diff --git a/ansible_collections/netapp/azure/tests/unit/compat/builtins.py b/ansible_collections/netapp/azure/tests/unit/compat/builtins.py
deleted file mode 100644
index f60ee6782..000000000
--- a/ansible_collections/netapp/azure/tests/unit/compat/builtins.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# (c) 2014, Toshio Kuratomi <tkuratomi@ansible.com>
-#
-# 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 <http://www.gnu.org/licenses/>.
-
-# Make coding more python3-ish
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-
-#
-# Compat for python2.7
-#
-
-# One unittest needs to import builtins via __import__() so we need to have
-# the string that represents it
-try:
- import __builtin__
-except ImportError:
- BUILTINS = 'builtins'
-else:
- BUILTINS = '__builtin__'
diff --git a/ansible_collections/netapp/azure/tests/unit/compat/mock.py b/ansible_collections/netapp/azure/tests/unit/compat/mock.py
deleted file mode 100644
index 0972cd2e8..000000000
--- a/ansible_collections/netapp/azure/tests/unit/compat/mock.py
+++ /dev/null
@@ -1,122 +0,0 @@
-# (c) 2014, Toshio Kuratomi <tkuratomi@ansible.com>
-#
-# 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 <http://www.gnu.org/licenses/>.
-
-# 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/netapp/azure/tests/unit/compat/unittest.py b/ansible_collections/netapp/azure/tests/unit/compat/unittest.py
deleted file mode 100644
index 73a20cf8c..000000000
--- a/ansible_collections/netapp/azure/tests/unit/compat/unittest.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# (c) 2014, Toshio Kuratomi <tkuratomi@ansible.com>
-#
-# 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 <http://www.gnu.org/licenses/>.
-
-# 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
-
-import pytest
-
-# 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')
-
- class TestCase:
- """ skip everything """
- pytestmark = pytest.mark.skip('Skipping Unit Tests on 2.6 as unittest2 may not be available')
-else:
- from unittest import *
diff --git a/ansible_collections/netapp/azure/tests/unit/plugins/module_utils/test_netapp_module.py b/ansible_collections/netapp/azure/tests/unit/plugins/module_utils/test_netapp_module.py
deleted file mode 100644
index fb83c464e..000000000
--- a/ansible_collections/netapp/azure/tests/unit/plugins/module_utils/test_netapp_module.py
+++ /dev/null
@@ -1,149 +0,0 @@
-# Copyright (c) 2018 NetApp
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-''' unit tests for module_utils netapp_module.py '''
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-
-from ansible_collections.netapp.azure.tests.unit.compat import unittest
-from ansible_collections.netapp.azure.plugins.module_utils.netapp_module import NetAppModule as na_helper
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- def test_get_cd_action_create(self):
- ''' validate cd_action for create '''
- current = None
- desired = {'state': 'present'}
- my_obj = na_helper()
- result = my_obj.get_cd_action(current, desired)
- assert result == 'create'
-
- def test_get_cd_action_delete(self):
- ''' validate cd_action for delete '''
- current = {'state': 'absent'}
- desired = {'state': 'absent'}
- my_obj = na_helper()
- result = my_obj.get_cd_action(current, desired)
- assert result == 'delete'
-
- def test_get_cd_action(self):
- ''' validate cd_action for returning None '''
- current = None
- desired = {'state': 'absent'}
- my_obj = na_helper()
- result = my_obj.get_cd_action(current, desired)
- assert result is None
-
- def test_get_modified_attributes_for_no_data(self):
- ''' validate modified attributes when current is None '''
- current = None
- desired = {'name': 'test'}
- my_obj = na_helper()
- result = my_obj.get_modified_attributes(current, desired)
- assert result == {}
-
- def test_get_modified_attributes(self):
- ''' validate modified attributes '''
- current = {'name': ['test', 'abcd', 'xyz', 'pqr'], 'state': 'present'}
- desired = {'name': ['abcd', 'abc', 'xyz', 'pqr'], 'state': 'absent'}
- my_obj = na_helper()
- result = my_obj.get_modified_attributes(current, desired)
- assert result == desired
-
- def test_get_modified_attributes_for_intersecting_mixed_list(self):
- ''' validate modified attributes for list diff '''
- current = {'name': [2, 'four', 'six', 8]}
- desired = {'name': ['a', 8, 'ab', 'four', 'abcd']}
- my_obj = na_helper()
- result = my_obj.get_modified_attributes(current, desired, True)
- assert result == {'name': ['a', 'ab', 'abcd']}
-
- def test_get_modified_attributes_for_intersecting_list(self):
- ''' validate modified attributes for list diff '''
- current = {'name': ['two', 'four', 'six', 'eight']}
- desired = {'name': ['a', 'six', 'ab', 'four', 'abc']}
- my_obj = na_helper()
- result = my_obj.get_modified_attributes(current, desired, True)
- assert result == {'name': ['a', 'ab', 'abc']}
-
- def test_get_modified_attributes_for_nonintersecting_list(self):
- ''' validate modified attributes for list diff '''
- current = {'name': ['two', 'four', 'six', 'eight']}
- desired = {'name': ['a', 'ab', 'abd']}
- my_obj = na_helper()
- result = my_obj.get_modified_attributes(current, desired, True)
- assert result == {'name': ['a', 'ab', 'abd']}
-
- def test_get_modified_attributes_for_list_of_dicts_no_data(self):
- ''' validate modified attributes for list diff '''
- current = None
- desired = {'address_blocks': [{'start': '10.20.10.40', 'size': 5}]}
- my_obj = na_helper()
- result = my_obj.get_modified_attributes(current, desired, True)
- assert result == {}
-
- def test_get_modified_attributes_for_intersecting_list_of_dicts(self):
- ''' validate modified attributes for list diff '''
- current = {'address_blocks': [{'start': '10.10.10.23', 'size': 5}, {'start': '10.10.10.30', 'size': 5}]}
- desired = {'address_blocks': [{'start': '10.10.10.23', 'size': 5}, {'start': '10.10.10.30', 'size': 5}, {'start': '10.20.10.40', 'size': 5}]}
- my_obj = na_helper()
- result = my_obj.get_modified_attributes(current, desired, True)
- assert result == {'address_blocks': [{'start': '10.20.10.40', 'size': 5}]}
-
- def test_get_modified_attributes_for_nonintersecting_list_of_dicts(self):
- ''' validate modified attributes for list diff '''
- current = {'address_blocks': [{'start': '10.10.10.23', 'size': 5}, {'start': '10.10.10.30', 'size': 5}]}
- desired = {'address_blocks': [{'start': '10.20.10.23', 'size': 5}, {'start': '10.20.10.30', 'size': 5}, {'start': '10.20.10.40', 'size': 5}]}
- my_obj = na_helper()
- result = my_obj.get_modified_attributes(current, desired, True)
- assert result == {'address_blocks': [{'start': '10.20.10.23', 'size': 5}, {'start': '10.20.10.30', 'size': 5}, {'start': '10.20.10.40', 'size': 5}]}
-
- def test_get_modified_attributes_for_list_diff(self):
- ''' validate modified attributes for list diff '''
- current = {'name': ['test', 'abcd'], 'state': 'present'}
- desired = {'name': ['abcd', 'abc'], 'state': 'present'}
- my_obj = na_helper()
- result = my_obj.get_modified_attributes(current, desired, True)
- assert result == {'name': ['abc']}
-
- def test_get_modified_attributes_for_no_change(self):
- ''' validate modified attributes for same data in current and desired '''
- current = {'name': 'test'}
- desired = {'name': 'test'}
- my_obj = na_helper()
- result = my_obj.get_modified_attributes(current, desired)
- assert result == {}
-
- def test_is_rename_action_for_empty_input(self):
- ''' validate rename action for input None '''
- source = None
- target = None
- my_obj = na_helper()
- result = my_obj.is_rename_action(source, target)
- assert result == source
-
- def test_is_rename_action_for_no_source(self):
- ''' validate rename action when source is None '''
- source = None
- target = 'test2'
- my_obj = na_helper()
- result = my_obj.is_rename_action(source, target)
- assert result is False
-
- def test_is_rename_action_for_no_target(self):
- ''' validate rename action when target is None '''
- source = 'test2'
- target = None
- my_obj = na_helper()
- result = my_obj.is_rename_action(source, target)
- assert result is True
-
- def test_is_rename_action(self):
- ''' validate rename action '''
- source = 'test'
- target = 'test2'
- my_obj = na_helper()
- result = my_obj.is_rename_action(source, target)
- assert result is False
diff --git a/ansible_collections/netapp/azure/tests/unit/plugins/modules/test_azure_rm_netapp_account.py b/ansible_collections/netapp/azure/tests/unit/plugins/modules/test_azure_rm_netapp_account.py
deleted file mode 100644
index 0d140b4a0..000000000
--- a/ansible_collections/netapp/azure/tests/unit/plugins/modules/test_azure_rm_netapp_account.py
+++ /dev/null
@@ -1,173 +0,0 @@
-# (c) 2019, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-''' unit tests ONTAP Ansible module: azure_rm_netapp_account'''
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-import json
-import sys
-
-import pytest
-try:
- from requests import Response
-except ImportError:
- if sys.version_info < (2, 7):
- pytestmark = pytest.mark.skip('Skipping Unit Tests on 2.6 as requests is not be available')
-
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-from ansible_collections.netapp.azure.tests.unit.compat import unittest
-from ansible_collections.netapp.azure.tests.unit.compat.mock import patch, Mock
-
-HAS_AZURE_RMNETAPP_IMPORT = True
-try:
- # At this point, python believes the module is already loaded, so the import inside azure_rm_netapp_volume will be skipped.
- from ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_account \
- import AzureRMNetAppAccount as account_module
-except ImportError:
- HAS_AZURE_RMNETAPP_IMPORT = False
-
-HAS_AZURE_CLOUD_ERROR_IMPORT = True
-try:
- from msrestazure.azure_exceptions import CloudError
-except ImportError:
- HAS_AZURE_CLOUD_ERROR_IMPORT = False
-
-if not HAS_AZURE_CLOUD_ERROR_IMPORT and sys.version_info < (3, 5):
- pytestmark = pytest.mark.skip('skipping as missing required azure_exceptions on 2.6 and 2.7')
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleExitJson(Exception):
- """Exception class to be raised by module.exit_json and caught by the test case"""
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
-
-
-def exit_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over exit_json; package return data into an exception"""
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-class MockAzureClient(object):
- ''' mock server connection to ONTAP host '''
- def __init__(self):
- ''' save arguments '''
- self.valid_accounts = ['test1', 'test2']
-
- def get(self, resource_group, account_name): # pylint: disable=unused-argument
- if account_name not in self.valid_accounts:
- invalid = Response()
- invalid.status_code = 404
- raise CloudError(response=invalid)
- return Mock(name=account_name)
-
- def create_or_update(self, body, resource_group, account_name): # pylint: disable=unused-argument,no-self-use
- return None
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- def setUp(self):
- self.mock_module_helper = patch.multiple(basic.AnsibleModule,
- exit_json=exit_json,
- fail_json=fail_json)
- self.mock_module_helper.start()
- self.addCleanup(self.mock_module_helper.stop)
- self.netapp_client = Mock()
- self.netapp_client.accounts = MockAzureClient()
- self._netapp_client = None
-
- def set_default_args(self):
- resource_group = 'azure'
- name = 'test1'
- location = 'abc'
- return dict({
- 'resource_group': resource_group,
- 'name': name,
- 'location': location
- })
-
- def test_module_fail_when_required_args_missing(self):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleFailJson) as exc:
- set_module_args({})
- account_module()
- print('Info: %s' % exc.value.args[0]['msg'])
-
- @patch('ansible_collections.netapp.azure.plugins.module_utils.azure_rm_netapp_common.AzureRMNetAppModuleBase.netapp_client')
- def test_ensure_get_called_valid_account(self, client_f):
- set_module_args(self.set_default_args())
- client_f.return_value = Mock()
- client_f.side_effect = Mock()
- my_obj = account_module()
- my_obj.netapp_client.accounts = self.netapp_client.accounts
- assert my_obj.get_azure_netapp_account() is not None
-
- @patch('ansible_collections.netapp.azure.plugins.module_utils.azure_rm_netapp_common.AzureRMNetAppModuleBase.netapp_client')
- def test_ensure_get_called_non_existing_account(self, client_f):
- data = self.set_default_args()
- data['name'] = 'invalid'
- set_module_args(data)
- client_f.return_value = Mock()
- client_f.side_effect = Mock()
- my_obj = account_module()
- my_obj.netapp_client.accounts = self.netapp_client.accounts
- assert my_obj.get_azure_netapp_account() is None
-
- @patch('ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_account.AzureRMNetAppAccount.get_azure_netapp_account')
- @patch('ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_account.AzureRMNetAppAccount.create_azure_netapp_account')
- @patch('ansible_collections.netapp.azure.plugins.module_utils.azure_rm_netapp_common.AzureRMNetAppModuleBase.netapp_client')
- def test_ensure_create_called(self, client_f, mock_create, mock_get):
- data = dict(self.set_default_args())
- data['name'] = 'create'
- data['tags'] = {'ttt': 'tesssttt', 'abc': 'xyz'}
- set_module_args(data)
- mock_get.return_value = None
- client_f.return_value = Mock()
- client_f.side_effect = Mock()
- my_obj = account_module()
- my_obj.netapp_client.accounts = self.netapp_client.accounts
- with pytest.raises(AnsibleExitJson) as exc:
- # add default args for exec_module
- data['state'] = 'present'
- data['debug'] = False
- my_obj.exec_module(**data)
- assert exc.value.args[0]['changed']
- mock_create.assert_called_with()
-
- @patch('ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_account.AzureRMNetAppAccount.get_azure_netapp_account')
- @patch('ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_account.AzureRMNetAppAccount.delete_azure_netapp_account')
- @patch('ansible_collections.netapp.azure.plugins.module_utils.azure_rm_netapp_common.AzureRMNetAppModuleBase.netapp_client')
- def test_ensure_delete_called(self, client_f, mock_delete, mock_get):
- data = dict(self.set_default_args())
- data['state'] = 'absent'
- set_module_args(data)
- mock_get.return_value = Mock()
- client_f.return_value = Mock()
- client_f.side_effect = Mock()
- my_obj = account_module()
- my_obj.netapp_client.accounts = self.netapp_client.accounts
- with pytest.raises(AnsibleExitJson) as exc:
- # add default args for exec_module
- data['debug'] = False
- my_obj.exec_module(**data)
- assert exc.value.args[0]['changed']
- mock_delete.assert_called_with()
diff --git a/ansible_collections/netapp/azure/tests/unit/plugins/modules/test_azure_rm_netapp_capacity_pool.py b/ansible_collections/netapp/azure/tests/unit/plugins/modules/test_azure_rm_netapp_capacity_pool.py
deleted file mode 100644
index 91c8eefd6..000000000
--- a/ansible_collections/netapp/azure/tests/unit/plugins/modules/test_azure_rm_netapp_capacity_pool.py
+++ /dev/null
@@ -1,197 +0,0 @@
-# (c) 2019, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-''' unit tests ONTAP Ansible module: azure_rm_netapp_capacity_pool'''
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-import json
-import sys
-
-import pytest
-try:
- from requests import Response
-except ImportError:
- if sys.version_info < (2, 7):
- pytestmark = pytest.mark.skip('Skipping Unit Tests on 2.6 as requests is not be available')
-
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-from ansible_collections.netapp.azure.tests.unit.compat import unittest
-from ansible_collections.netapp.azure.tests.unit.compat.mock import patch, Mock
-
-HAS_AZURE_RMNETAPP_IMPORT = True
-try:
- # At this point, python believes the module is already loaded, so the import inside azure_rm_netapp_volume will be skipped.
- from ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_capacity_pool \
- import AzureRMNetAppCapacityPool as capacity_pool_module
-except ImportError:
- HAS_AZURE_RMNETAPP_IMPORT = False
-
-HAS_AZURE_CLOUD_ERROR_IMPORT = True
-try:
- from msrestazure.azure_exceptions import CloudError
-except ImportError:
- HAS_AZURE_CLOUD_ERROR_IMPORT = False
-
-if not HAS_AZURE_CLOUD_ERROR_IMPORT and sys.version_info < (3, 5):
- pytestmark = pytest.mark.skip('skipping as missing required azure_exceptions on 2.6 and 2.7')
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleExitJson(Exception):
- """Exception class to be raised by module.exit_json and caught by the test case"""
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
-
-
-def exit_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over exit_json; package return data into an exception"""
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-class MockAzureClient(object):
- ''' mock server connection to ONTAP host '''
- def __init__(self):
- ''' save arguments '''
- self.valid_pools = ['test1', 'test2']
-
- def get(self, resource_group, account_name, pool_name): # pylint: disable=unused-argument
- if pool_name not in self.valid_pools:
- invalid = Response()
- invalid.status_code = 404
- raise CloudError(response=invalid)
- else:
- return Mock(name=pool_name)
-
- def create_or_update(self, body, resource_group, account_name, pool_name): # pylint: disable=unused-argument
- return None
-
- def update(self, body, resource_group, account_name, pool_name): # pylint: disable=unused-argument
- return None
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- def setUp(self):
- self.mock_module_helper = patch.multiple(basic.AnsibleModule,
- exit_json=exit_json,
- fail_json=fail_json)
- self.mock_module_helper.start()
- self.addCleanup(self.mock_module_helper.stop)
- self.netapp_client = Mock()
- self.netapp_client.pools = MockAzureClient()
- self._netapp_client = None
-
- def set_default_args(self):
- resource_group = 'azure'
- account_name = 'azure'
- name = 'test1'
- location = 'abc'
- size = 1
- service_level = 'Standard'
- return dict({
- 'resource_group': resource_group,
- 'account_name': account_name,
- 'name': name,
- 'location': location,
- 'size': size,
- 'service_level': service_level
- })
-
- def test_module_fail_when_required_args_missing(self):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleFailJson) as exc:
- set_module_args({})
- capacity_pool_module()
- print('Info: %s' % exc.value.args[0]['msg'])
-
- @patch('ansible_collections.netapp.azure.plugins.module_utils.azure_rm_netapp_common.AzureRMNetAppModuleBase.netapp_client')
- def test_ensure_get_called_valid_capacity_pool(self, client_f):
- set_module_args(self.set_default_args())
- client_f.return_value = Mock()
- my_obj = capacity_pool_module()
- my_obj.netapp_client.pools = self.netapp_client.pools
- assert my_obj.get_azure_netapp_capacity_pool() is not None
-
- @patch('ansible_collections.netapp.azure.plugins.module_utils.azure_rm_netapp_common.AzureRMNetAppModuleBase.netapp_client')
- def test_ensure_get_called_non_existing_capacity_pool(self, client_f):
- data = self.set_default_args()
- data['name'] = 'invalid'
- set_module_args(data)
- client_f.return_value = Mock()
- my_obj = capacity_pool_module()
- my_obj.netapp_client.pools = self.netapp_client.pools
- assert my_obj.get_azure_netapp_capacity_pool() is None
-
- @patch('ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_capacity_pool.AzureRMNetAppCapacityPool.get_azure_netapp_capacity_pool')
- @patch('ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_capacity_pool.AzureRMNetAppCapacityPool.create_azure_netapp_capacity_pool')
- @patch('ansible_collections.netapp.azure.plugins.module_utils.azure_rm_netapp_common.AzureRMNetAppModuleBase.netapp_client')
- def test_ensure_create_called(self, client_f, mock_create, mock_get):
- data = dict(self.set_default_args())
- data['name'] = 'create'
- set_module_args(data)
- mock_get.return_value = None
- client_f.return_value = Mock()
- my_obj = capacity_pool_module()
- my_obj.netapp_client.pools = self.netapp_client.pools
- with pytest.raises(AnsibleExitJson) as exc:
- # add default args for exec_module
- data['state'] = 'present'
- data['debug'] = False
- my_obj.exec_module(**data)
- assert exc.value.args[0]['changed']
- mock_create.assert_called_with()
-
- @patch('ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_capacity_pool.AzureRMNetAppCapacityPool.get_azure_netapp_capacity_pool')
- @patch('ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_capacity_pool.AzureRMNetAppCapacityPool.create_azure_netapp_capacity_pool')
- @patch('ansible_collections.netapp.azure.plugins.module_utils.azure_rm_netapp_common.AzureRMNetAppModuleBase.netapp_client')
- def test_ensure_modify_called(self, client_f, mock_modify, mock_get):
- data = dict(self.set_default_args())
- data['name'] = 'create'
- data['size'] = 3
- set_module_args(data)
- mock_get.return_value = None
- client_f.return_value = Mock()
- my_obj = capacity_pool_module()
- my_obj.netapp_client.pools = self.netapp_client.pools
- with pytest.raises(AnsibleExitJson) as exc:
- data['state'] = 'present'
- data['debug'] = False
- my_obj.exec_module(**data)
- assert exc.value.args[0]['changed']
- mock_modify.assert_called_with()
-
- @patch('ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_capacity_pool.AzureRMNetAppCapacityPool.get_azure_netapp_capacity_pool')
- @patch('ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_capacity_pool.AzureRMNetAppCapacityPool.delete_azure_netapp_capacity_pool')
- @patch('ansible_collections.netapp.azure.plugins.module_utils.azure_rm_netapp_common.AzureRMNetAppModuleBase.netapp_client')
- def test_ensure_delete_called(self, client_f, mock_delete, mock_get):
- data = self.set_default_args()
- data['state'] = 'absent'
- set_module_args(data)
- mock_get.return_value = Mock()
- client_f.return_value = Mock()
- my_obj = capacity_pool_module()
- my_obj.netapp_client.pools = self.netapp_client.pools
- with pytest.raises(AnsibleExitJson) as exc:
- data['state'] = 'absent'
- data['debug'] = False
- my_obj.exec_module(**data)
- assert exc.value.args[0]['changed']
- mock_delete.assert_called_with()
diff --git a/ansible_collections/netapp/azure/tests/unit/plugins/modules/test_azure_rm_netapp_snapshot.py b/ansible_collections/netapp/azure/tests/unit/plugins/modules/test_azure_rm_netapp_snapshot.py
deleted file mode 100644
index 0415a4039..000000000
--- a/ansible_collections/netapp/azure/tests/unit/plugins/modules/test_azure_rm_netapp_snapshot.py
+++ /dev/null
@@ -1,165 +0,0 @@
-# (c) 2019, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-''' unit tests ONTAP Ansible module: azure_rm_netapp_snapshot'''
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-import json
-import sys
-
-import pytest
-try:
- from requests import Response
-except ImportError:
- if sys.version_info < (2, 7):
- pytestmark = pytest.mark.skip('Skipping Unit Tests on 2.6 as requests is not be available')
-
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-from ansible_collections.netapp.azure.tests.unit.compat import unittest
-from ansible_collections.netapp.azure.tests.unit.compat.mock import patch, Mock
-
-HAS_AZURE_RMNETAPP_IMPORT = True
-try:
- # At this point, python believes the module is already loaded, so the import inside azure_rm_netapp_volume will be skipped.
- from ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_snapshot \
- import AzureRMNetAppSnapshot as snapshot_module
-except ImportError:
- HAS_AZURE_RMNETAPP_IMPORT = False
-
-HAS_AZURE_CLOUD_ERROR_IMPORT = True
-try:
- from msrestazure.azure_exceptions import CloudError
-except ImportError:
- HAS_AZURE_CLOUD_ERROR_IMPORT = False
-
-if not HAS_AZURE_CLOUD_ERROR_IMPORT and sys.version_info < (3, 5):
- pytestmark = pytest.mark.skip('skipping as missing required azure_exceptions on 2.6 and 2.7')
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleExitJson(Exception):
- """Exception class to be raised by module.exit_json and caught by the test case"""
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
-
-
-def exit_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over exit_json; package return data into an exception"""
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-class MockAzureClient(object):
- ''' mock server connection to ONTAP host '''
- def __init__(self):
- ''' save arguments '''
- self.valid_snapshots = ['test1', 'test2']
-
- def get(self, resource_group, account_name, pool_name, volume_name, snapshot_name): # pylint: disable=unused-argument
- if snapshot_name not in self.valid_snapshots:
- invalid = Response()
- invalid.status_code = 404
- raise CloudError(response=invalid)
- else:
- return Mock(name=snapshot_name)
-
- def create(self, body, resource_group, account_name, pool_name, volume_name, snapshot_name): # pylint: disable=unused-argument
- return None
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- def setUp(self):
- self.mock_module_helper = patch.multiple(basic.AnsibleModule,
- exit_json=exit_json,
- fail_json=fail_json)
- self.mock_module_helper.start()
- self.addCleanup(self.mock_module_helper.stop)
- self.netapp_client = Mock()
- self.netapp_client.pools = MockAzureClient()
- self._netapp_client = None
-
- def set_default_args(self):
- resource_group = 'azure'
- account_name = 'azure'
- pool_name = 'azure'
- volume_name = 'azure'
- name = 'test1'
- location = 'abc'
- return dict({
- 'resource_group': resource_group,
- 'account_name': account_name,
- 'pool_name': pool_name,
- 'volume_name': volume_name,
- 'name': name,
- 'location': location
- })
-
- def test_module_fail_when_required_args_missing(self):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleFailJson) as exc:
- set_module_args({})
- snapshot_module()
- print('Info: %s' % exc.value.args[0]['msg'])
-
- @patch('ansible_collections.netapp.azure.plugins.module_utils.azure_rm_netapp_common.AzureRMNetAppModuleBase.netapp_client')
- def test_ensure_get_called_valid_snapshot(self, client_f):
- set_module_args(self.set_default_args())
- client_f.return_value = Mock()
- my_obj = snapshot_module()
- my_obj.netapp_client.snapshots = self.netapp_client.snapshots
- assert my_obj.get_azure_netapp_snapshot() is not None
-
- @patch('ansible_collections.netapp.azure.plugins.module_utils.azure_rm_netapp_common.AzureRMNetAppModuleBase.netapp_client')
- @patch('ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_snapshot.AzureRMNetAppSnapshot.get_azure_netapp_snapshot')
- @patch('ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_snapshot.AzureRMNetAppSnapshot.create_azure_netapp_snapshot')
- def test_ensure_create_called(self, mock_create, mock_get, client_f):
- data = dict(self.set_default_args())
- data['name'] = 'create'
- set_module_args(data)
- mock_get.return_value = None
- client_f.return_value = Mock()
- my_obj = snapshot_module()
- my_obj.netapp_client.snapshots = self.netapp_client.snapshots
- with pytest.raises(AnsibleExitJson) as exc:
- # add default args for exec_module
- data['state'] = 'present'
- data['debug'] = False
- my_obj.exec_module(**data)
- assert exc.value.args[0]['changed']
- mock_create.assert_called_with()
-
- @patch('ansible_collections.netapp.azure.plugins.module_utils.azure_rm_netapp_common.AzureRMNetAppModuleBase.netapp_client')
- @patch('ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_snapshot.AzureRMNetAppSnapshot.get_azure_netapp_snapshot')
- @patch('ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_snapshot.AzureRMNetAppSnapshot.delete_azure_netapp_snapshot')
- def test_ensure_delete_called(self, mock_delete, mock_get, client_f):
- data = dict(self.set_default_args())
- data['state'] = 'absent'
- set_module_args(data)
- client_f.return_value = Mock()
- mock_get.return_value = Mock()
- my_obj = snapshot_module()
- my_obj.netapp_client.snapshots = self.netapp_client.snapshots
- with pytest.raises(AnsibleExitJson) as exc:
- # add default args for exec_module
- data['debug'] = False
- my_obj.exec_module(**data)
- assert exc.value.args[0]['changed']
- mock_delete.assert_called_with()
diff --git a/ansible_collections/netapp/azure/tests/unit/plugins/modules/test_azure_rm_netapp_volume.py b/ansible_collections/netapp/azure/tests/unit/plugins/modules/test_azure_rm_netapp_volume.py
deleted file mode 100644
index 83c7f812e..000000000
--- a/ansible_collections/netapp/azure/tests/unit/plugins/modules/test_azure_rm_netapp_volume.py
+++ /dev/null
@@ -1,501 +0,0 @@
-# (c) 2019, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-''' unit tests ONTAP Ansible module: azure_rm_netapp_volume'''
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-import json
-import sys
-
-import pytest
-try:
- from requests import Response
-except ImportError:
- if sys.version_info < (2, 7):
- pytestmark = pytest.mark.skip('Skipping Unit Tests on 2.6 as requests is not be available')
-
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-from ansible_collections.netapp.azure.tests.unit.compat.mock import patch, Mock
-
-HAS_AZURE_RMNETAPP_IMPORT = True
-try:
- # At this point, python believes the module is already loaded, so the import inside azure_rm_netapp_volume will be skipped.
- from ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_volume \
- import AzureRMNetAppVolume as volume_module
-except ImportError:
- HAS_AZURE_RMNETAPP_IMPORT = False
-
-HAS_AZURE_CLOUD_ERROR_IMPORT = True
-try:
- from msrestazure.azure_exceptions import CloudError
-except ImportError:
- HAS_AZURE_CLOUD_ERROR_IMPORT = False
-
-if not HAS_AZURE_CLOUD_ERROR_IMPORT and sys.version_info < (3, 5):
- pytestmark = pytest.mark.skip('skipping as missing required azure_exceptions on 2.6 and 2.7')
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleExitJson(Exception):
- """Exception class to be raised by module.exit_json and caught by the test case"""
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
-
-
-def exit_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over exit_json; package return data into an exception"""
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-class MockAzureClient(object):
- ''' mock server connection to ONTAP host '''
- def __init__(self):
- ''' save arguments '''
- self.valid_volumes = ['test1', 'test2']
-
- def get(self, resource_group, account_name, pool_name, volume_name): # pylint: disable=unused-argument
- if volume_name in self.valid_volumes:
- return Mock(name=volume_name,
- subnet_id='/resid/whatever/subnet_name',
- mount_targets=[Mock(ip_address='1.2.3.4')]
- )
-
- invalid = Response()
- invalid.status_code = 404
- raise CloudError(response=invalid)
-
- def create_or_update(self, body, resource_group, account_name, pool_name, volume_name): # pylint: disable=unused-argument
- return None
-
- def begin_create_or_update(self, body, resource_group_name, account_name, pool_name, volume_name): # pylint: disable=unused-argument
- return Mock(done=Mock(side_effect=[False, True]))
-
- def begin_update(self, body, resource_group_name, account_name, pool_name, volume_name): # pylint: disable=unused-argument
- return Mock(done=Mock(side_effect=[False, True]))
-
- def begin_delete(self, resource_group_name, account_name, pool_name, volume_name): # pylint: disable=unused-argument
- return Mock(done=Mock(side_effect=[False, True]))
-
-
-class MockAzureClientRaise(MockAzureClient):
- ''' mock server connection to ONTAP host '''
- response = Mock(status_code=400, context=None, headers=[], text=lambda: 'Forced exception')
-
- def begin_create_or_update(self, body, resource_group_name, account_name, pool_name, volume_name): # pylint: disable=unused-argument
- raise CloudError(MockAzureClientRaise.response)
-
- def begin_update(self, body, resource_group_name, account_name, pool_name, volume_name): # pylint: disable=unused-argument
- raise CloudError(MockAzureClientRaise.response)
-
- def begin_delete(self, resource_group_name, account_name, pool_name, volume_name): # pylint: disable=unused-argument
- raise CloudError(MockAzureClientRaise.response)
-
-
-# using pytest natively, without unittest.TestCase
-@pytest.fixture(name="patch_ansible")
-def fixture_patch_ansible():
- with patch.multiple(basic.AnsibleModule,
- exit_json=exit_json,
- fail_json=fail_json) as mocks:
- yield mocks
-
-
-def set_default_args():
- resource_group = 'azure'
- account_name = 'azure'
- pool_name = 'azure'
- name = 'test1'
- location = 'abc'
- file_path = 'azure'
- subnet_id = 'azure'
- virtual_network = 'azure'
- size = 100
- return dict({
- 'resource_group': resource_group,
- 'account_name': account_name,
- 'pool_name': pool_name,
- 'name': name,
- 'location': location,
- 'file_path': file_path,
- 'subnet_name': subnet_id,
- 'virtual_network': virtual_network,
- 'size': size,
- 'protocol_types': 'nfs',
- 'tags': {'owner': 'laurentn'}
- })
-
-
-def test_module_fail_when_required_args_missing(patch_ansible): # pylint: disable=unused-argument
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleFailJson) as exc:
- set_module_args({})
- volume_module()
- print('Info: %s' % exc.value.args[0]['msg'])
-
-
-@patch('ansible_collections.netapp.azure.plugins.module_utils.azure_rm_netapp_common.AzureRMNetAppModuleBase.netapp_client')
-def test_ensure_get_called_valid_volume(client_f):
- set_module_args(set_default_args())
- client_f.return_value = Mock()
- my_obj = volume_module()
- my_obj.netapp_client.volumes = MockAzureClient()
- assert my_obj.get_azure_netapp_volume() is not None
-
-
-@patch('ansible_collections.netapp.azure.plugins.module_utils.azure_rm_netapp_common.AzureRMNetAppModuleBase.netapp_client')
-def test_ensure_get_called_non_existing_volume(client_f):
- data = dict(set_default_args())
- data['name'] = 'invalid'
- set_module_args(data)
- client_f.return_value = Mock()
- my_obj = volume_module()
- my_obj.netapp_client.volumes = MockAzureClient()
- assert my_obj.get_azure_netapp_volume() is None
-
-
-@patch('ansible_collections.netapp.azure.plugins.module_utils.azure_rm_netapp_common.AzureRMNetAppModuleBase.netapp_client')
-@patch('ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_volume.AzureRMNetAppVolume.get_azure_netapp_volume')
-@patch('ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_volume.AzureRMNetAppVolume.create_azure_netapp_volume')
-def test_ensure_create_called(mock_create, mock_get, client_f, patch_ansible): # pylint: disable=unused-argument
- data = dict(set_default_args())
- data['name'] = 'create'
- set_module_args(data)
- mock_get.side_effect = [
- None, # first get
- dict(mount_targets=[dict(ip_address='11.22.33.44')], # get after create
- creation_token='abcd')
- ]
- client_f.return_value = Mock()
- my_obj = volume_module()
- my_obj.netapp_client.volumes = MockAzureClient()
- with pytest.raises(AnsibleExitJson) as exc:
- # add default args for exec_module
- data['state'] = 'present'
- data['debug'] = False
- my_obj.exec_module(**data)
- assert exc.value.args[0]['changed']
- expected_mount_path = '11.22.33.44:/abcd'
- assert exc.value.args[0]['mount_path'] == expected_mount_path
- mock_create.assert_called_with()
-
-
-@patch('ansible_collections.netapp.azure.plugins.module_utils.azure_rm_netapp_common.AzureRMNetAppModuleBase.netapp_client')
-@patch('ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_volume.AzureRMNetAppVolume.get_azure_netapp_volume')
-def test_create(mock_get, client_f, patch_ansible): # pylint: disable=unused-argument
- data = dict(set_default_args())
- data['name'] = 'create'
- data['protocol_types'] = ['nfsv4.1']
- set_module_args(data)
- mock_get.side_effect = [
- None, # first get
- dict(mount_targets=[dict(ip_address='11.22.33.44')], # get after create
- creation_token='abcd')
- ]
- client_f.return_value = Mock()
- my_obj = volume_module()
- my_obj.azure_auth = Mock(subscription_id='1234')
- my_obj._new_style = True
- my_obj.netapp_client.volumes = MockAzureClient()
- with pytest.raises(AnsibleExitJson) as exc:
- # add default args for exec_module
- data['state'] = 'present'
- data['debug'] = False
- my_obj.exec_module(**data)
- assert exc.value.args[0]['changed']
- expected_mount_path = '11.22.33.44:/abcd'
- assert exc.value.args[0]['mount_path'] == expected_mount_path
-
-
-@patch('ansible_collections.netapp.azure.plugins.module_utils.azure_rm_netapp_common.AzureRMNetAppModuleBase.netapp_client')
-@patch('ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_volume.AzureRMNetAppVolume.get_azure_netapp_volume')
-def test_create_exception(mock_get, client_f, patch_ansible): # pylint: disable=unused-argument
- data = dict(set_default_args())
- data['name'] = 'create'
- data['protocol_types'] = 'nfsv4.1'
- set_module_args(data)
- mock_get.side_effect = [
- None, # first get
- dict(mount_targets=[dict(ip_address='11.22.33.44')], # get after create
- creation_token='abcd')
- ]
- client_f.return_value = Mock()
- my_obj = volume_module()
- my_obj.azure_auth = Mock(subscription_id='1234')
- my_obj._new_style = True
- my_obj.netapp_client.volumes = MockAzureClientRaise()
- with pytest.raises(AnsibleFailJson) as exc:
- # add default args for exec_module
- data['state'] = 'present'
- data['debug'] = False
- my_obj.exec_module(**data)
- expected_msg = 'Error creating volume'
- assert expected_msg in exc.value.args[0]['msg']
-
-
-@patch('ansible_collections.netapp.azure.plugins.module_utils.azure_rm_netapp_common.AzureRMNetAppModuleBase.netapp_client')
-@patch('ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_volume.AzureRMNetAppVolume.get_azure_netapp_volume')
-@patch('ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_volume.AzureRMNetAppVolume.create_azure_netapp_volume')
-def test_ensure_create_called_but_fail_on_get(mock_create, mock_get, client_f, patch_ansible): # pylint: disable=unused-argument
- data = dict(set_default_args())
- data['name'] = 'create'
- set_module_args(data)
- mock_get.side_effect = [
- None, # first get
- dict(mount_targets=None, # get after create
- creation_token='abcd')
- ]
- client_f.return_value = Mock()
- my_obj = volume_module()
- my_obj.netapp_client.volumes = MockAzureClient()
- with pytest.raises(AnsibleFailJson) as exc:
- # add default args for exec_module
- data['state'] = 'present'
- data['debug'] = False
- my_obj.exec_module(**data)
- error = 'Error: volume create was created successfully, but mount target(s) cannot be found - volume details:'
- assert exc.value.args[0]['msg'].startswith(error)
- mock_create.assert_called_with()
-
-
-@patch('ansible_collections.netapp.azure.plugins.module_utils.azure_rm_netapp_common.AzureRMNetAppModuleBase.netapp_client')
-@patch('ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_volume.AzureRMNetAppVolume.get_azure_netapp_volume')
-@patch('ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_volume.AzureRMNetAppVolume.create_azure_netapp_volume')
-def test_ensure_create_called_but_fail_on_mount_target(mock_create, mock_get, client_f, patch_ansible): # pylint: disable=unused-argument
- data = dict(set_default_args())
- data['name'] = 'create'
- set_module_args(data)
- mock_get.return_value = None
- client_f.return_value = Mock()
- my_obj = volume_module()
- my_obj.netapp_client.volumes = MockAzureClient()
- with pytest.raises(AnsibleFailJson) as exc:
- # add default args for exec_module
- data['state'] = 'present'
- data['debug'] = False
- my_obj.exec_module(**data)
- error = 'Error: volume create was created successfully, but cannot be found.'
- assert exc.value.args[0]['msg'] == error
- mock_create.assert_called_with()
-
-
-@patch('ansible_collections.netapp.azure.plugins.module_utils.azure_rm_netapp_common.AzureRMNetAppModuleBase.netapp_client')
-@patch('ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_volume.AzureRMNetAppVolume.get_azure_netapp_volume')
-@patch('ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_volume.AzureRMNetAppVolume.delete_azure_netapp_volume')
-def test_ensure_delete_called(mock_delete, mock_get, client_f, patch_ansible): # pylint: disable=unused-argument
- data = dict(set_default_args())
- data['state'] = 'absent'
- set_module_args(data)
- client_f.return_value = Mock()
- mock_get.return_value = Mock()
- my_obj = volume_module()
- my_obj.netapp_client.volumes = MockAzureClient()
- with pytest.raises(AnsibleExitJson) as exc:
- # add default args for exec_module
- data['debug'] = False
- my_obj.exec_module(**data)
- assert exc.value.args[0]['changed']
- mock_delete.assert_called_with()
-
-
-@patch('ansible_collections.netapp.azure.plugins.module_utils.azure_rm_netapp_common.AzureRMNetAppModuleBase.netapp_client')
-@patch('ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_volume.AzureRMNetAppVolume.get_azure_netapp_volume')
-def test_delete(mock_get, client_f, patch_ansible): # pylint: disable=unused-argument
- data = dict(set_default_args())
- data['name'] = 'delete'
- data['state'] = 'absent'
- set_module_args(data)
- mock_get.side_effect = [
- dict(mount_targets=[dict(ip_address='11.22.33.44')], # first get
- creation_token='abcd')
- ]
- client_f.return_value = Mock()
- my_obj = volume_module()
- my_obj.azure_auth = Mock(subscription_id='1234')
- my_obj._new_style = True
- my_obj.netapp_client.volumes = MockAzureClient()
- with pytest.raises(AnsibleExitJson) as exc:
- # add default args for exec_module
- data['debug'] = False
- my_obj.exec_module(**data)
- assert exc.value.args[0]['changed']
- expected_mount_path = ''
- assert exc.value.args[0]['mount_path'] == expected_mount_path
-
-
-@patch('ansible_collections.netapp.azure.plugins.module_utils.azure_rm_netapp_common.AzureRMNetAppModuleBase.netapp_client')
-@patch('ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_volume.AzureRMNetAppVolume.get_azure_netapp_volume')
-def test_delete_exception(mock_get, client_f, patch_ansible): # pylint: disable=unused-argument
- data = dict(set_default_args())
- data['name'] = 'delete'
- data['state'] = 'absent'
- set_module_args(data)
- mock_get.side_effect = [
- dict(mount_targets=[dict(ip_address='11.22.33.44')], # first get
- creation_token='abcd')
- ]
- client_f.return_value = Mock()
- my_obj = volume_module()
- my_obj.azure_auth = Mock(subscription_id='1234')
- my_obj._new_style = True
- my_obj.netapp_client.volumes = MockAzureClientRaise()
- with pytest.raises(AnsibleFailJson) as exc:
- # add default args for exec_module
- data['debug'] = False
- my_obj.exec_module(**data)
- expected_msg = 'Error deleting volume'
- assert expected_msg in exc.value.args[0]['msg']
-
-
-@patch('ansible_collections.netapp.azure.plugins.module_utils.azure_rm_netapp_common.AzureRMNetAppModuleBase.netapp_client')
-@patch('ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_volume.AzureRMNetAppVolume.get_azure_netapp_volume')
-def test_modify(mock_get, client_f, patch_ansible): # pylint: disable=unused-argument
- data = dict(set_default_args())
- data['name'] = 'modify'
- data['size'] = 200
- data['tags'] = {'added_tag': 'new_tag'}
- set_module_args(data)
- mock_get.side_effect = [
- dict(mount_targets=[dict(ip_address='11.22.33.44')], # first get
- creation_token='abcd',
- tags={},
- usage_threshold=0),
- dict(mount_targets=[dict(ip_address='11.22.33.44')], # get after modify
- creation_token='abcd',
- usage_threshold=10000000)
- ]
- client_f.return_value = Mock()
- my_obj = volume_module()
- my_obj.azure_auth = Mock(subscription_id='1234')
- my_obj._new_style = True
- my_obj.netapp_client.volumes = MockAzureClient()
- with pytest.raises(AnsibleExitJson) as exc:
- # add default args for exec_module
- data['state'] = 'present'
- data['debug'] = False
- my_obj.exec_module(**data)
- assert exc.value.args[0]['changed']
- print('modify', exc.value.args[0])
- expected_mount_path = '11.22.33.44:/abcd'
- assert exc.value.args[0]['mount_path'] == expected_mount_path
-
-
-@patch('ansible_collections.netapp.azure.plugins.module_utils.azure_rm_netapp_common.AzureRMNetAppModuleBase.netapp_client')
-@patch('ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_volume.AzureRMNetAppVolume.get_azure_netapp_volume')
-def test_modify_exception(mock_get, client_f, patch_ansible): # pylint: disable=unused-argument
- data = dict(set_default_args())
- data['name'] = 'modify'
- data['size'] = 200
- set_module_args(data)
- mock_get.side_effect = [
- dict(mount_targets=[dict(ip_address='11.22.33.44')], # first get
- creation_token='abcd',
- usage_threshold=0),
- dict(mount_targets=[dict(ip_address='11.22.33.44')], # get after modify
- creation_token='abcd',
- usage_threshold=10000000)
- ]
- client_f.return_value = Mock()
- my_obj = volume_module()
- my_obj.azure_auth = Mock(subscription_id='1234')
- my_obj._new_style = True
- my_obj.netapp_client.volumes = MockAzureClientRaise()
- with pytest.raises(AnsibleFailJson) as exc:
- # add default args for exec_module
- data['state'] = 'present'
- data['debug'] = False
- my_obj.exec_module(**data)
- expected_msg = 'Error modifying volume'
- assert expected_msg in exc.value.args[0]['msg']
-
-
-@patch('ansible_collections.netapp.azure.plugins.module_utils.azure_rm_netapp_common.AzureRMNetAppModuleBase.netapp_client')
-@patch('ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_volume.AzureRMNetAppVolume.get_azure_netapp_volume')
-def test_modify_not_supported(mock_get, client_f, patch_ansible): # pylint: disable=unused-argument
- data = dict(set_default_args())
- data['name'] = 'modify'
- data['location'] = 'east'
- set_module_args(data)
- mock_get.side_effect = [
- dict(mount_targets=[dict(ip_address='11.22.33.44')], # first get
- creation_token='abcd',
- usage_threshold=0,
- location='west',
- name='old_name'),
- dict(mount_targets=[dict(ip_address='11.22.33.44')], # get after modify
- creation_token='abcd',
- usage_threshold=10000000)
- ]
- client_f.return_value = Mock()
- my_obj = volume_module()
- my_obj.azure_auth = Mock(subscription_id='1234')
- my_obj._new_style = True
- my_obj.netapp_client.volumes = MockAzureClient()
- with pytest.raises(AnsibleFailJson) as exc:
- # add default args for exec_module
- data['state'] = 'present'
- data['debug'] = False
- my_obj.exec_module(**data)
- expected_msg = "Error: the following properties cannot be modified: {'location': 'east'}"
- assert expected_msg in exc.value.args[0]['msg']
-
-
-@patch('ansible_collections.netapp.azure.plugins.module_utils.azure_rm_netapp_common.AzureRMNetAppModuleBase.netapp_client')
-def test_get_export_policy_rules(client_f, patch_ansible):
- set_module_args(set_default_args())
- client_f.return_value = Mock()
- my_obj = volume_module()
- my_obj.netapp_client.volumes = MockAzureClient()
- rules = my_obj.get_export_policy_rules()
- assert rules is None
- del my_obj.parameters['protocol_types']
- rules = my_obj.get_export_policy_rules()
- assert rules is None
- my_obj.parameters['protocol_types'] = ['nFsv4.1']
- rules = my_obj.get_export_policy_rules()
- assert rules is not None
- rules = vars(rules)
- assert 'rules' in rules
- rules = rules['rules']
- assert rules
- rule = vars(rules[0])
- assert rule['nfsv41']
- assert not rule['cifs']
-
-
-def test_dict_from_object():
- set_module_args(set_default_args())
- my_obj = volume_module()
- # just for fun
- module_dict = my_obj.dict_from_volume_object(my_obj)
- print('Module dict', module_dict)
-
- rule_object = Mock()
- rule_object.ip_address = '10.10.10.10'
- export_policy_object = Mock()
- export_policy_object.rules = [rule_object]
- volume_object = Mock()
- volume_object.export_policy = export_policy_object
- volume_dict = my_obj.dict_from_volume_object(volume_object)
- print('Volume dict', volume_dict)
- assert 'export_policy' in volume_dict
- assert 'rules' in volume_dict['export_policy']
- assert isinstance(volume_dict['export_policy']['rules'], list)
- assert len(volume_dict['export_policy']['rules']) == 1
- assert 'ip_address' in volume_dict['export_policy']['rules'][0]
diff --git a/ansible_collections/netapp/azure/tests/unit/plugins/modules/test_azure_rm_netapp_volume_import.py b/ansible_collections/netapp/azure/tests/unit/plugins/modules/test_azure_rm_netapp_volume_import.py
deleted file mode 100644
index 13d3bba29..000000000
--- a/ansible_collections/netapp/azure/tests/unit/plugins/modules/test_azure_rm_netapp_volume_import.py
+++ /dev/null
@@ -1,74 +0,0 @@
-# (c) 2021, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-''' unit tests ONTAP Ansible module: azure_rm_netapp_volume'''
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-import json
-import sys
-
-import pytest
-# from typing import Collection
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-from ansible_collections.netapp.azure.tests.unit.compat.mock import patch
-
-
-if sys.version_info < (3, 5):
- pytestmark = pytest.mark.skip('skipping as missing imports on 2.6 and 2.7')
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-@pytest.fixture(name="patch_ansible")
-def fixture_patch_ansible():
- with patch.multiple(basic.AnsibleModule,
- fail_json=fail_json) as mocks:
- yield mocks
-
-
-# @patch('ansible_collections.netapp.azure.plugins.module_utils.azure_rm_netapp_common.AzureRMNetAppModuleBase.__init__')
-def test_import_error():
- orig_import = __import__
-
- def import_mock(name, *args):
- print('importing: %s' % name)
- if name.startswith('ansible_collections.netapp.azure.plugins.modules'):
- # force a relead to go through secondary imports
- sys.modules.pop(name, None)
- if name in ('azure.core.exceptions', 'azure.mgmt.netapp.models'):
- raise ImportError('forced error on %s' % name)
- return orig_import(name, *args)
-
- # mock_base.return_value = Mock()
- data = dict()
- set_module_args(data)
- with patch('builtins.__import__', side_effect=import_mock):
- from ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_volume import IMPORT_ERRORS
- assert any('azure.core.exceptions' in error for error in IMPORT_ERRORS)
- assert any('azure.mgmt.netapp.models' in error for error in IMPORT_ERRORS)
-
-
-def test_main(patch_ansible): # pylint: disable=unused-argument
- data = dict()
- set_module_args(data)
- from ansible_collections.netapp.azure.plugins.modules.azure_rm_netapp_volume import main
- with pytest.raises(AnsibleFailJson) as exc:
- main()
- expected_msg = "missing required arguments:"
- assert expected_msg in exc.value.args[0]['msg']
diff --git a/ansible_collections/netapp/azure/tests/unit/requirements.txt b/ansible_collections/netapp/azure/tests/unit/requirements.txt
deleted file mode 100644
index 0b89f6365..000000000
--- a/ansible_collections/netapp/azure/tests/unit/requirements.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-azure-mgmt-netapp ; python_version >= '2.7'
-msrestazure ; python_version >= '3.5'
-requests ; python_version >= '2.7'
diff --git a/ansible_collections/netapp/elementsw/.github/ISSUE_TEMPLATE/bug_report.yml b/ansible_collections/netapp/elementsw/.github/ISSUE_TEMPLATE/bug_report.yml
deleted file mode 100644
index 93fbe057a..000000000
--- a/ansible_collections/netapp/elementsw/.github/ISSUE_TEMPLATE/bug_report.yml
+++ /dev/null
@@ -1,210 +0,0 @@
----
-name: 🐛 Bug report
-description: Create a report to help us improve
-
-body:
-- type: markdown
- attributes:
- value: >
- **Thank you for wanting to report a bug in netapp.elementsw!**
-
-
- ⚠
- Verify first that your issue is not [already reported on
- GitHub][issue search] and keep in mind that we may have to keep
- the current behavior because [every change breaks someone's
- workflow][XKCD 1172].
- We try to be mindful about this.
-
- Also test if the latest release and devel branch are affected too.
-
-
- **Tip:** If you are seeking community support, please consider
- [Join our Slack community][ML||IRC].
-
-
-
- [ML||IRC]:
- https://join.slack.com/t/netapppub/shared_invite/zt-njcjx2sh-1VR2mEDvPcJAmPutOnP~mg
-
- [issue search]: ../search?q=is%3Aissue&type=issues
-
- [XKCD 1172]: https://xkcd.com/1172/
-
-
-- type: textarea
- attributes:
- label: Summary
- description: Explain the problem briefly below.
- placeholder: >-
- When I try to do X with netapp.elementsw from the devel branch on GitHub, Y
- breaks in a way Z under the env E. Here are all the details I know
- about this problem...
- validations:
- required: true
-
-- type: input
- attributes:
- label: Component Name
- description: >
- Write the short name of the rst file, module, plugin, task or
- feature below, *use your best guess if unsure*.
-
-
- **Tip:** Cannot find it in this repository? Please be advised that
- the source for some parts of the documentation are hosted outside
- of this repository. If the page you are reporting describes
- modules/plugins/etc that are not officially supported by the
- Ansible Core Engineering team, there is a good chance that it is
- coming from one of the [Ansible Collections maintained by the
- community][collections org]. If this is the case, please make sure
- to file an issue under the appropriate project there instead.
-
-
- [collections org]: /ansible-collections
- placeholder: dnf, apt, yum, pip, user etc.
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Ansible Version
- description: >-
- Paste verbatim output from `ansible --version` below, under
- the prompt line. Please don't wrap it with tripple backticks — your
- whole input will be turned into a code snippet automatically.
- render: console
- value: |
- $ ansible --version
- placeholder: |
- $ ansible --version
- ansible [core 2.11.0b4.post0] (detached HEAD ref: refs/) last updated 2021/04/02 00:33:35 (GMT +200)
- config file = None
- configured module search path = ['~/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
- ansible python module location = ~/src/github/ansible/ansible/lib/ansible
- ansible collection location = ~/.ansible/collections:/usr/share/ansible/collections
- executable location = bin/ansible
- python version = 3.9.0 (default, Oct 26 2020, 13:08:59) [GCC 10.2.0]
- jinja version = 2.11.3
- libyaml = True
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: ElementSW Collection Version
- description: >-
- ElementSW Collection Version. Run `ansible-galaxy collection` and copy the entire output
- render: console
- value: |
- $ ansible-galaxy collection list
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Playbook
- description: >-
- The task from the playbook that is give you the issue
- render: console
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Steps to Reproduce
- description: |
- Describe exactly how to reproduce the problem, using a minimal test-case. It would *really* help us understand your problem if you could also pased any playbooks, configs and commands you used.
-
- **HINT:** You can paste https://gist.github.com links for larger files.
- value: |
- <!--- Paste example playbooks or commands between quotes below -->
- ```yaml (paste below)
-
- ```
- placeholder: |
- 1. Implement the following playbook:
-
- ```yaml
- ---
- # ping.yml
- - hosts: all
- gather_facts: false
- tasks:
- - ping:
- ...
- ```
- 2. Then run `ANSIBLE_DEBUG=1 ansible-playbook ping.yml -vvvvv`
- 3. An error occurs.
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Expected Results
- description: >-
- Describe what you expected to happen when running the steps above.
- placeholder: >-
- I expected X to happen because I assumed Y and was shocked
- that it did not.
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Actual Results
- description: |
- Describe what actually happened. If possible run with extra verbosity (`-vvvv`).
-
- Paste verbatim command output and don't wrap it with tripple backticks — your
- whole input will be turned into a code snippet automatically.
- render: console
- placeholder: >-
- Certificate did not match expected hostname: files.pythonhosted.org. Certificate: {'notAfter': 'Apr 28 19:20:25 2021 GMT', 'subjectAltName': ((u'DNS', 'r.ssl.fastly.net'), (u'DNS', '*.catchpoint.com'), (u'DNS', '*.cnn.io'), (u'DNS', '*.dollarshaveclub.com'), (u'DNS', '*.eater.com'), (u'DNS', '*.fastly.picmonkey.com'), (u'DNS', '*.files.saymedia-content.com'), (u'DNS', '*.ft.com'), (u'DNS', '*.meetupstatic.com'), (u'DNS', '*.nfl.com'), (u'DNS', '*.pagar.me'), (u'DNS', '*.picmonkey.com'), (u'DNS', '*.realself.com'), (u'DNS', '*.sbnation.com'), (u'DNS', '*.shakr.com'), (u'DNS', '*.streamable.com'), (u'DNS', '*.surfly.com'), (u'DNS', '*.theverge.com'), (u'DNS', '*.thrillist.com'), (u'DNS', '*.vox-cdn.com'), (u'DNS', '*.vox.com'), (u'DNS', '*.voxmedia.com'), (u'DNS', 'eater.com'), (u'DNS', 'ft.com'), (u'DNS', 'i.gse.io'), (u'DNS', 'picmonkey.com'), (u'DNS', 'realself.com'), (u'DNS', 'static.wixstatic.com'), (u'DNS', 'streamable.com'), (u'DNS', 'surfly.com'), (u'DNS', 'theverge.com'), (u'DNS', 'vox-cdn.com'), (u'DNS', 'vox.com'), (u'DNS', 'www.joyent.com')), 'subject': ((('countryName', u'US'),), (('stateOrProvinceName', u'California'),), (('localityName', u'San Francisco'),), (('organizationName', u'Fastly, Inc'),), (('commonName', u'r.ssl.fastly.net'),))}
- Exception:
- Traceback (most recent call last):
- File "/usr/local/lib/python2.6/dist-packages/pip/basecommand.py", line 215, in main
- status = self.run(options, args)
- File "/usr/local/lib/python2.6/dist-packages/pip/commands/install.py", line 335, in run
- wb.build(autobuilding=True)
- File "/usr/local/lib/python2.6/dist-packages/pip/wheel.py", line 749, in build
- self.requirement_set.prepare_files(self.finder)
- File "/usr/local/lib/python2.6/dist-packages/pip/req/req_set.py", line 380, in prepare_files
- ignore_dependencies=self.ignore_dependencies))
- File "/usr/local/lib/python2.6/dist-packages/pip/req/req_set.py", line 620, in _prepare_file
- session=self.session, hashes=hashes)
- File "/usr/local/lib/python2.6/dist-packages/pip/download.py", line 821, in unpack_url
- hashes=hashes
- File "/usr/local/lib/python2.6/dist-packages/pip/download.py", line 659, in unpack_http_url
- hashes)
- File "/usr/local/lib/python2.6/dist-packages/pip/download.py", line 853, in _download_http_url
- stream=True,
- File "/usr/local/lib/python2.6/dist-packages/pip/_vendor/requests/sessions.py", line 521, in get
- return self.request('GET', url, **kwargs)
- File "/usr/local/lib/python2.6/dist-packages/pip/download.py", line 386, in request
- return super(PipSession, self).request(method, url, *args, **kwargs)
- File "/usr/local/lib/python2.6/dist-packages/pip/_vendor/requests/sessions.py", line 508, in request
- resp = self.send(prep, **send_kwargs)
- File "/usr/local/lib/python2.6/dist-packages/pip/_vendor/requests/sessions.py", line 618, in send
- r = adapter.send(request, **kwargs)
- File "/usr/local/lib/python2.6/dist-packages/pip/_vendor/cachecontrol/adapter.py", line 47, in send
- resp = super(CacheControlAdapter, self).send(request, **kw)
- File "/usr/local/lib/python2.6/dist-packages/pip/_vendor/requests/adapters.py", line 506, in send
- raise SSLError(e, request=request)
- SSLError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Max retries exceeded with url: /packages/ef/ab/aa12712415809bf698e719b307419f953e25344e8f42d557533d7a02b276/netapp_lib-2020.7.16-py2-none-any.whl (Caused by SSLError(CertificateError("hostname 'files.pythonhosted.org' doesn't match either of 'r.ssl.fastly.net', '*.catchpoint.com', '*.cnn.io', '*.dollarshaveclub.com', '*.eater.com', '*.fastly.picmonkey.com', '*.files.saymedia-content.com', '*.ft.com', '*.meetupstatic.com', '*.nfl.com', '*.pagar.me', '*.picmonkey.com', '*.realself.com', '*.sbnation.com', '*.shakr.com', '*.streamable.com', '*.surfly.com', '*.theverge.com', '*.thrillist.com', '*.vox-cdn.com', '*.vox.com', '*.voxmedia.com', 'eater.com', 'ft.com', 'i.gse.io', 'picmonkey.com', 'realself.com', 'static.wixstatic.com', 'streamable.com', 'surfly.com', 'theverge.com', 'vox-cdn.com', 'vox.com', 'www.joyent.com'",),))
- ERROR: Command "/usr/bin/python2.6 /root/ansible/test/lib/ansible_test/_data/quiet_pip.py install --disable-pip-version-check -r /root/ansible/test/lib/ansible_test/_data/requirements/units.txt -r tests/unit/requirements.txt -c /root/ansible/test/lib/ansible_test/_data/requirements/constraints.txt" returned exit status 2.
- ERROR: Command "docker exec d47eb360db4ce779c1f690db964655b76e68895c4360ff252c46fe7fe6f5c75a /usr/bin/env ANSIBLE_TEST_CONTENT_ROOT=/root/ansible_collections/netapp/ontap LC_ALL=en_US.UTF-8 /usr/bin/python3.6 /root/ansible/bin/ansible-test units --metadata tests/output/.tmp/metadata-9i2qfrcl.json --truncate 200 --redact --color yes --requirements --python default --requirements-mode only" returned exit status 1.
- validations:
- required: true
-
-
-- type: markdown
- attributes:
- value: >
- *One last thing...*
-
-
- Thank you for your collaboration!
-
-
-...
diff --git a/ansible_collections/netapp/elementsw/.github/ISSUE_TEMPLATE/feature_request.yml b/ansible_collections/netapp/elementsw/.github/ISSUE_TEMPLATE/feature_request.yml
deleted file mode 100644
index 8bb6094c7..000000000
--- a/ansible_collections/netapp/elementsw/.github/ISSUE_TEMPLATE/feature_request.yml
+++ /dev/null
@@ -1,100 +0,0 @@
----
-name: ✨ Feature request
-description: Suggest an idea for this project
-
-body:
-- type: markdown
- attributes:
- value: >
- **Thank you for wanting to suggest a feature for netapp.elementsw!**
-
- 💡
- Before you go ahead with your request, please first consider if it
- would be useful for majority of the netapp.elementsw users. As a
- general rule of thumb, any feature that is only of interest to a
- small sub group should be [implemented in a third-party Ansible
- Collection][contribute to collections] or maybe even just your
- project alone. Be mindful of the fact that the essential
- netapp.elementsw features have a broad impact.
-
-
- <details>
- <summary>
- ❗ Every change breaks someone's workflow.
- </summary>
-
-
- [![❗ Every change breaks someone's workflow.
- ](https://imgs.xkcd.com/comics/workflow.png)
- ](https://xkcd.com/1172/)
- </details>
-
-
- ⚠
- Verify first that your idea is not [already requested on
- GitHub][issue search].
-
- Also test if the main branch does not already implement this.
-
-
-- type: textarea
- attributes:
- label: Summary
- description: >
- Describe the new feature/improvement you would like briefly below.
-
-
- What's the problem this feature will solve?
-
- What are you trying to do, that you are unable to achieve
- with netapp.elementsw as it currently stands?
-
-
- * Provide examples of real-world use cases that this would enable
- and how it solves the problem you described.
-
- * How do you solve this now?
-
- * Have you tried to work around the problem using other tools?
-
- * Could there be a different approach to solving this issue?
-
- placeholder: >-
- I am trying to do X with netapp.elementsw from the devel branch on GitHub and
- I think that implementing a feature Y would be very helpful for me and
- every other user of netapp.elementsw because of Z.
- validations:
- required: true
-
-- type: input
- attributes:
- label: Component Name
- description: >
- Write the short name of the module, plugin, task or feature below,
- *use your best guess if unsure*.
-
-
- [collections org]: /ansible-collections
- placeholder: dnf, apt, yum, pip, user etc.
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Additional Information
- description: |
- Describe how the feature would be used, why it is needed and what it would solve.
-
- **HINT:** You can paste https://gist.github.com links for larger files.
- value: |
- <!--- Paste example playbooks or commands between quotes below -->
- ```yaml (paste below)
-
- ```
- placeholder: >-
- I asked on https://stackoverflow.com/.... and the community
- advised me to do X, Y and Z.
- validations:
- required: true
-
-...
diff --git a/ansible_collections/netapp/elementsw/.github/workflows/coverage.yml b/ansible_collections/netapp/elementsw/.github/workflows/coverage.yml
deleted file mode 100644
index 9e2692651..000000000
--- a/ansible_collections/netapp/elementsw/.github/workflows/coverage.yml
+++ /dev/null
@@ -1,45 +0,0 @@
-name: NetApp.elementsw Ansible Coverage
-
-on:
- push:
- pull_request:
- schedule:
- - cron: '0 6 * * *'
-
-jobs:
- sanity:
- name: Coverage on elementsw
- runs-on: ubuntu-latest
-
- steps:
- - name: Check out code
- uses: actions/checkout@v2
-
- - name: Set up Python
- uses: actions/setup-python@v2
- with:
- python-version: 3.8
-
- - name: Install ansible stable-2.11
- run: pip install https://github.com/ansible/ansible/archive/stable-2.11.tar.gz --disable-pip-version-check
-
- - name: Make directory to make ansible-test happy
- run: |
- pwd
- mkdir -p ansible_collections/netapp/elementsw/
- rsync -av . ansible_collections/netapp/elementsw/ --exclude ansible_collections/netapp/elementsw/
-
- - name: Run Unit Tests
- run: ansible-test units --coverage --color --docker --python 3.8
- working-directory: ansible_collections/netapp/elementsw/
-
- # ansible-test support producing code coverage date
- - name: Generate coverage report
- run: ansible-test coverage xml -v --requirements --group-by command --group-by version
- working-directory: ansible_collections/netapp/elementsw/
-
- - name: Upload coverage to Codecov
- uses: codecov/codecov-action@v2
- with:
- working-directory: ansible_collections/netapp/elementsw/
- verbose: true \ No newline at end of file
diff --git a/ansible_collections/netapp/elementsw/.github/workflows/main.yml b/ansible_collections/netapp/elementsw/.github/workflows/main.yml
deleted file mode 100644
index 2b9ec2379..000000000
--- a/ansible_collections/netapp/elementsw/.github/workflows/main.yml
+++ /dev/null
@@ -1,47 +0,0 @@
-name: NetApp.elementsw Ansible CI
-
-on:
- push:
- pull_request:
- schedule:
- - cron: '0 6 * * *'
-
-jobs:
- sanity:
- name: Sanity (${{ matrix.ansible }} on Elementsw
- runs-on: ubuntu-latest
- strategy:
- matrix:
- ansible:
- - stable-2.9
- - stable-2.10
- - stable-2.11
- - stable-2.12
- - devel
-
- steps:
- - name: Check out code
- uses: actions/checkout@v2
-
- - name: Set up Python
- uses: actions/setup-python@v2
- with:
- python-version: 3.8
-
- - name: Install ansible (${{ matrix.ansible }})
- run: pip install https://github.com/ansible/ansible/archive/${{ matrix.ansible }}.tar.gz --disable-pip-version-check
-
- - name: Make directory to make ansible-test happy
- run: |
- pwd
- mkdir -p ansible_collections/netapp/elementsw/
- rsync -av . ansible_collections/netapp/elementsw/ --exclude ansible_collections/netapp/elementsw/
-
-
- - name: Run sanity tests Elementsw
- run: ansible-test sanity --docker -v --color
- working-directory: ansible_collections/netapp/elementsw/
-
- - name: Run Unit Tests
- run: ansible-test units --docker -v --color
- working-directory: ansible_collections/netapp/elementsw/
diff --git a/ansible_collections/netapp/elementsw/CHANGELOG.rst b/ansible_collections/netapp/elementsw/CHANGELOG.rst
deleted file mode 100644
index a611ba793..000000000
--- a/ansible_collections/netapp/elementsw/CHANGELOG.rst
+++ /dev/null
@@ -1,192 +0,0 @@
-=========================================
-NetApp ElementSW Collection Release Notes
-=========================================
-
-.. contents:: Topics
-
-
-v21.7.0
-=======
-
-Minor Changes
--------------
-
-- PR1 - allow usage of Ansible module group defaults - for Ansible 2.12+.
-
-v21.6.1
-=======
-
-Bugfixes
---------
-
-- requirements.txt - point to the correct python dependency
-
-v21.3.0
-=======
-
-Minor Changes
--------------
-
-- na_elementsw_info - add ``cluster_nodes`` and ``cluster_drives``.
-- na_elementsw_qos_policy - explicitly define ``minIOPS``, ``maxIOPS``, ``burstIOPS`` as int.
-
-Bugfixes
---------
-
-- na_elementsw_drive - lastest SDK does not accept ``force_during_bin_sync`` and ``force_during_upgrade``.
-- na_elementsw_qos_policy - loop would convert `minIOPS`, `maxIOPS`, `burstIOPS` to str, causing type mismatch issues in comparisons.
-- na_elementsw_snapshot_schedule - change of interface in SDK ('ScheduleInfo' object has no attribute 'minutes')
-
-v20.11.0
-========
-
-Minor Changes
--------------
-
-- na_elementsw_snapshot_schedule - Add ``retention`` in examples.
-
-Bugfixes
---------
-
-- na_elementsw_drive - Object of type 'dict_values' is not JSON serializable.
-
-v20.10.0
-========
-
-Minor Changes
--------------
-
-- na_elementsw_cluster - add new options ``encryption``, ``order_number``, and ``serial_number``.
-- na_elementsw_network_interfaces - make all options not required, so that only bond_1g can be set for example.
-- na_elementsw_network_interfaces - restructure options into 2 dictionaries ``bond_1g`` and ``bond_10g``, so that there is no shared option. Disallow all older options.
-
-New Modules
------------
-
-- netapp.elementsw.na_elementsw_info - NetApp Element Software Info
-
-v20.9.1
-=======
-
-Bugfixes
---------
-
-- na_elementsw_node - improve error reporting when cluster name cannot be set because node is already active.
-- na_elementsw_schedule - missing imports TimeIntervalFrequency, Schedule, ScheduleInfo have been added back
-
-v20.9.0
-=======
-
-Minor Changes
--------------
-
-- na_elementsw_node - ``cluster_name`` to set the cluster name on new nodes.
-- na_elementsw_node - ``preset_only`` to only set the cluster name before creating a cluster with na_elementsw_cluster.
-- na_elementsw_volume - ``qos_policy_name`` to provide a QOS policy name or ID.
-
-Bugfixes
---------
-
-- na_elementsw_node - fix check_mode so that no action is taken.
-
-New Modules
------------
-
-- netapp.elementsw.na_elementsw_qos_policy - NetApp Element Software create/modify/rename/delete QOS Policy
-
-v20.8.0
-=======
-
-Minor Changes
--------------
-
-- add "required:true" where missing.
-- add "type:str" (or int, dict) where missing in documentation section.
-- na_elementsw_drive - add all drives in a cluster, allow for a list of nodes or a list of drives.
-- remove "required:true" for state and use present as default.
-- use a three group format for ``version_added``. So 2.7 becomes 2.7.0. Same thing for 2.8 and 2.9.
-
-Bugfixes
---------
-
-- na_elementsw_access_group - fix check_mode so that no action is taken.
-- na_elementsw_admin_users - fix check_mode so that no action is taken.
-- na_elementsw_cluster - create cluster if it does not exist. Do not expect MVIP or SVIP to exist before create.
-- na_elementsw_cluster_snmp - double exception because of AttributeError.
-- na_elementsw_drive - node_id or drive_id were not handled properly when using numeric ids.
-- na_elementsw_initiators - volume_access_group_id was ignored. volume_access_groups was ignored and redundant.
-- na_elementsw_ldap - double exception because of AttributeError.
-- na_elementsw_snapshot_schedule - ignore schedules being deleted (idempotency), remove default values and fix documentation.
-- na_elementsw_vlan - AttributeError if VLAN already exists.
-- na_elementsw_vlan - change in attributes was ignored.
-- na_elementsw_vlan - fix check_mode so that no action is taken.
-- na_elementsw_volume - Argument '512emulation' in argument_spec is not a valid python identifier - renamed to enable512emulation.
-- na_elementsw_volume - double exception because of AttributeError.
-
-v20.6.0
-=======
-
-Bugfixes
---------
-
-- galaxy.yml - fix repository and homepage links.
-
-v20.2.0
-=======
-
-Bugfixes
---------
-
-- galaxy.yml - fix path to github repository.
-- netapp.py - report error in case of connection error rather than raising a generic exception by default.
-
-v20.1.0
-=======
-
-New Modules
------------
-
-- netapp.elementsw.na_elementsw_access_group_volumes - NetApp Element Software Add/Remove Volumes to/from Access Group
-
-v19.10.0
-========
-
-Minor Changes
--------------
-
-- refactor existing modules as a collection
-
-v2.8.0
-======
-
-New Modules
------------
-
-- netapp.elementsw.na_elementsw_cluster_config - Configure Element SW Cluster
-- netapp.elementsw.na_elementsw_cluster_snmp - Configure Element SW Cluster SNMP
-- netapp.elementsw.na_elementsw_initiators - Manage Element SW initiators
-
-v2.7.0
-======
-
-New Modules
------------
-
-- netapp.elementsw.na_elementsw_access_group - NetApp Element Software Manage Access Groups
-- netapp.elementsw.na_elementsw_account - NetApp Element Software Manage Accounts
-- netapp.elementsw.na_elementsw_admin_users - NetApp Element Software Manage Admin Users
-- netapp.elementsw.na_elementsw_backup - NetApp Element Software Create Backups
-- netapp.elementsw.na_elementsw_check_connections - NetApp Element Software Check connectivity to MVIP and SVIP.
-- netapp.elementsw.na_elementsw_cluster - NetApp Element Software Create Cluster
-- netapp.elementsw.na_elementsw_cluster_pair - NetApp Element Software Manage Cluster Pair
-- netapp.elementsw.na_elementsw_drive - NetApp Element Software Manage Node Drives
-- netapp.elementsw.na_elementsw_ldap - NetApp Element Software Manage ldap admin users
-- netapp.elementsw.na_elementsw_network_interfaces - NetApp Element Software Configure Node Network Interfaces
-- netapp.elementsw.na_elementsw_node - NetApp Element Software Node Operation
-- netapp.elementsw.na_elementsw_snapshot - NetApp Element Software Manage Snapshots
-- netapp.elementsw.na_elementsw_snapshot_restore - NetApp Element Software Restore Snapshot
-- netapp.elementsw.na_elementsw_snapshot_schedule - NetApp Element Software Snapshot Schedules
-- netapp.elementsw.na_elementsw_vlan - NetApp Element Software Manage VLAN
-- netapp.elementsw.na_elementsw_volume - NetApp Element Software Manage Volumes
-- netapp.elementsw.na_elementsw_volume_clone - NetApp Element Software Create Volume Clone
-- netapp.elementsw.na_elementsw_volume_pair - NetApp Element Software Volume Pair
diff --git a/ansible_collections/netapp/elementsw/FILES.json b/ansible_collections/netapp/elementsw/FILES.json
deleted file mode 100644
index 7113c56bd..000000000
--- a/ansible_collections/netapp/elementsw/FILES.json
+++ /dev/null
@@ -1,649 +0,0 @@
-{
- "files": [
- {
- "name": ".",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "requirements.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0bd0735ea0d7847ed0f372da0cf7d7f8a0a2471aec49b5c16901d1c32793e43e",
- "format": 1
- },
- {
- "name": "plugins",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "plugins/doc_fragments",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "plugins/doc_fragments/netapp.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "fd42778f85cd3b989604d0227af4cc90350d94f5864938eb0bd29cf7a66401c3",
- "format": 1
- },
- {
- "name": "plugins/module_utils",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "plugins/module_utils/netapp.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cc9a4b7d4d77cf221f256e5972707d08f424f319b856ef4a8fdd0dbe9a3dc322",
- "format": 1
- },
- {
- "name": "plugins/module_utils/netapp_module.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a98ea2d0aec17e10c6b5a956cfaa1dcddbd336b674079a1f86e85429381a49e7",
- "format": 1
- },
- {
- "name": "plugins/module_utils/netapp_elementsw_module.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "33132c95ba546d56bf953e1613dd39ad8a258379b3a32120f7be8b19e2c0d8a2",
- "format": 1
- },
- {
- "name": "plugins/modules",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "plugins/modules/na_elementsw_initiators.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4a0e280ee9ef13b994f98c848524dc53b3a3a16559e3d1e22be6573272327c8c",
- "format": 1
- },
- {
- "name": "plugins/modules/na_elementsw_qos_policy.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4934c116271845de9f5da2f9747042601e961bc929f3a22397961313b3888e06",
- "format": 1
- },
- {
- "name": "plugins/modules/na_elementsw_cluster_snmp.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1ee85a0b9e6ac2b0151a52b7722a43ea3e358d48f48816f5fac597151fd58d93",
- "format": 1
- },
- {
- "name": "plugins/modules/na_elementsw_snapshot.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "25b0f4b869b1b814160da50df5b7b06d0e5d3eb83ca8887a0fead337699d6c62",
- "format": 1
- },
- {
- "name": "plugins/modules/na_elementsw_volume.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a4b329b6f3c13f500a95ad0fb40eba4db5873b78b0c137997c858229336011af",
- "format": 1
- },
- {
- "name": "plugins/modules/na_elementsw_access_group_volumes.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "532fbf39ed0ee98af0e9323f037ab0e0f52d5eac9179a82eeb169a5a48cdfd3e",
- "format": 1
- },
- {
- "name": "plugins/modules/na_elementsw_snapshot_schedule.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6a07aa78ae73ec965592b77bad72bbedd724b519e82f51805d5fd414d3f9c414",
- "format": 1
- },
- {
- "name": "plugins/modules/na_elementsw_node.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6882747383c770c6ec43585e3a4db0081c8de165415d40941532324208e3aa4e",
- "format": 1
- },
- {
- "name": "plugins/modules/na_elementsw_access_group.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7099bfffb1ec35ed7c0a40c0708cb4d1d79f6267b16fcc71f759796add15edaf",
- "format": 1
- },
- {
- "name": "plugins/modules/na_elementsw_cluster_pair.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ddd54266eb0a3ebf891d8c1310059b40cfbad7679db3d7f2b9c600baf31e42ca",
- "format": 1
- },
- {
- "name": "plugins/modules/na_elementsw_volume_pair.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ead937f30287dfd02521b4fdda1e0a128cd1d3ba8db4a721330ff4bbfb76e284",
- "format": 1
- },
- {
- "name": "plugins/modules/na_elementsw_cluster_config.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6dc94b752a4931e30ea169f61aec3919a7cd7636ce3aeff4764094d2adc355f7",
- "format": 1
- },
- {
- "name": "plugins/modules/na_elementsw_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "983415a406d31e2edd3e06b64745363e0d1c5ee7575058298bfdce6919522e31",
- "format": 1
- },
- {
- "name": "plugins/modules/na_elementsw_ldap.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8b8a59c8c45c1aa147c2d90b01654135f31ac4a1e31c643ce3b07007d6f28ea9",
- "format": 1
- },
- {
- "name": "plugins/modules/na_elementsw_vlan.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "39414c4cb613271d96220d275f027404e41e4b5dd61db5c7ad6eb3f70bc3243b",
- "format": 1
- },
- {
- "name": "plugins/modules/na_elementsw_cluster.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d42be06f947c782d42fdd9141daeb87374855fc996ecfc53a450e20216cc6e05",
- "format": 1
- },
- {
- "name": "plugins/modules/na_elementsw_volume_clone.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "05f518bb36b88476c0a6dc329587400937c88c64bb335bd0f3ad279c79cf845e",
- "format": 1
- },
- {
- "name": "plugins/modules/na_elementsw_check_connections.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "54458477eb0807256e663f64924d88cf5a5cb8058c0e7212a155a4aff9f87997",
- "format": 1
- },
- {
- "name": "plugins/modules/na_elementsw_drive.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5d7a53bf79e58150eff5f6979890afb54a6859597121a4cee0e7b4e6020f0eb0",
- "format": 1
- },
- {
- "name": "plugins/modules/na_elementsw_account.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7dbfc7b05e3c69ebbb1723314094d62e07a4b328cba09db899808fd50d38bc15",
- "format": 1
- },
- {
- "name": "plugins/modules/na_elementsw_snapshot_restore.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0d70395bc1a83498c08081aaa31fa4e5bb8ebfccbc03b7c9f1cb0aa6a4d132c9",
- "format": 1
- },
- {
- "name": "plugins/modules/na_elementsw_backup.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b545334782c314c7c2c8e857f85838859b461176369ed002f3fba7414062b809",
- "format": 1
- },
- {
- "name": "plugins/modules/na_elementsw_network_interfaces.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d045d9768f1b469c3aeda533dbfdcbdb5a2f51a2d9949c59a3f73b56959ca082",
- "format": 1
- },
- {
- "name": "plugins/modules/na_elementsw_admin_users.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b822e729b9e40361b148fd9739fddf1c26705597a092b5d967e29676eed9fb66",
- "format": 1
- },
- {
- "name": "tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/compat",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/compat/unittest.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cba95d18c5b39c6f49714eacf1ac77452c2e32fa087c03cf01aacd19ae597b0f",
- "format": 1
- },
- {
- "name": "tests/unit/compat/builtins.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0ca4cac919e166b25e601e11acb01f6957dddd574ff0a62569cb994a5ecb63e1",
- "format": 1
- },
- {
- "name": "tests/unit/compat/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "tests/unit/compat/mock.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0af958450cf6de3fbafe94b1111eae8ba5a8dbe1d785ffbb9df81f26e4946d99",
- "format": 1
- },
- {
- "name": "tests/unit/requirements.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "da9e4399d51f4aa7e39d11a4c8adb3ea291252334eeebc6e5569777c717739da",
- "format": 1
- },
- {
- "name": "tests/unit/plugins",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_na_elementsw_cluster.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "66d9f46f9b572b24f6465f43d2aebfb43f3fe2858ad528472559ba089dc2fb3c",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_na_elementsw_access_group_volumes.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f6aa0100e51bbe54b6e9edeb072b7de526542e55da1cede0d1ae5f4367ec89eb",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_na_elementsw_volume.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d910be3c377edddb04f6f74c3e4908a9d6d32c71ec251cf74e9eaa6711b1bffe",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_na_elementsw_vlan.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9390907ec097add3aa2d936dd95f63d05bfac2b5b730ae12df50d14c5a18e0c1",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_na_elementsw_nodes.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b563b9adab2f4c7a67354fa2b7a2e3468cf68b041ba51c788e0e082e4b50b7ba",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_na_elementsw_cluster_config.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ae4c8e648a16dfa704964ef0f3782ea27adec2f1c0ceb5fca84ab86e888caffa",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_na_elementsw_qos_policy.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "189242c5691fba4c436403cbfeb512fdab01c8bd35b028d7262b4cdeca9c7376",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_na_elementsw_account.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5002081bc3177a94e5b2911259138ba80b2cf03006c6333c78cc50731f89fbbe",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_na_elementsw_initiators.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f5cc8b59e5120ff8f6b51a9b2085d336f63c5b91d7d3f21db629176c92c2f011",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_na_elementsw_cluster_snmp.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "655c454425b97c72bb924b5def11e8dc65dd9dc4cd40cf00df66ae85120ba40f",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_na_elementsw_template.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "fb1802b2cd87193966ccc7d8b0c6c94522d7954bfada73febb8aeae77367322c",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_na_elementsw_network_interfaces.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "489f21207a0de4f7ab263096c0f2d2c674cb9a334b45edb76165f7a933b13c5e",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_na_elementsw_access_group.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4682bf1c6d258032a9a9b001254246a2993e006ab2aa32463e42bed5e192e09f",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_na_elementsw_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9a138bc7c455af917d85a69c4e010ae92cda34cff767fe7d0514806ab82d22b0",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules_utils",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules_utils/test_netapp_module.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a40d8651793b9771d6f56d5e8b52772597a77e317002a9f9bf3400cffd014d60",
- "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": "2a2a08d11b2cf3859e796da8a7928461df41efdd14abbc7e4234a37da5ca19c4",
- "format": 1
- },
- {
- "name": "changelogs",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "changelogs/fragments",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-3734.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "419f9e02843f2fc7b584c8d3a4160769b1939784dbc0f726c55daeca0bc6bef9",
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-3324.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "784b39c5d9440affb1dbab3ba8769ec1e88e7570798448c238a77d32dbf6e505",
- "format": 1
- },
- {
- "name": "changelogs/fragments/20.9.0.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "56bed0aab9696af7068eb1bb743eb316ab23c3200ac6faa715a303e5f33f0973",
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-3196.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "94573d6e6ddde5f8a053d72a7e49d87d13c4274f5ea5c24c6c0a95947215977b",
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-3800.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6fc0ea3ba25f76222015eba223c4a88c7d36b52cb5d767a5c3a9374746532a5e",
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-3733.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9a1ce243b30c79588a96fac9c050487d9b9ea63208e9c30934b7af77cc24dfe4",
- "format": 1
- },
- {
- "name": "changelogs/fragments/2019.10.0.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7b1a5ef7df5f1e6e66ddc013149aea0480eb79f911a0563e2e6d7d9af79d5572",
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-3174.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7cfc4addbf3343a3ce121f5de6cc2cc8244ad7b62a7429c2694543dabc2a8ccf",
- "format": 1
- },
- {
- "name": "changelogs/fragments/20.2.0.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2c98764e792ed6c6d9cee6df80b9fff8f4fcadaf765c0aa0f0ed3dd5e3080fec",
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-3117.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "242f770eafb49994810a3263e23e1d342aeb36396819045c48f491810aab6908",
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-3731.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5f92782e45a47a3439f8a858c3f283879fdc070422109d5a9ab2fdaa7ca56293",
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-3310.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8132aa931d13a49ba1a3c0fee131c048c6767ce17b3d9cabafa7e34f3c7c239a",
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-3235.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cddb1135b1c15ca3c8f130bcc439d73ac819c7a3e0472c9ff358c75405bd8cb3",
- "format": 1
- },
- {
- "name": "changelogs/fragments/20.8.0.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b13007f7b14dd35357ec0fb06b0e89cf5fee56036b0a6004dfb21c46010cb7c1",
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-3188.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0efa05e4cca58b1bfe30a60673adc266e7598d841065486b5b29c7e7a8b29bf4",
- "format": 1
- },
- {
- "name": "changelogs/fragments/20.6.0.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6192b3cccdc7c1e1eb0d61a49dd20c6f234499b6dd9b52b2f974b673e99f7a47",
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-4416.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4224db573f34caeeb956c8728eb343a47bc2729d898001a4c6a671b780dae1bf",
- "format": 1
- },
- {
- "name": "changelogs/config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "70f470630a3fb893540ad9060634bfd0955e4a3371ab1a921e44bdc6b5ea1ba5",
- "format": 1
- },
- {
- "name": "changelogs/changelog.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ad8dbe639e83e6feef631362bf2d78cde3c51c093203c0de8113b0d1cbc7756d",
- "format": 1
- },
- {
- "name": "README.md",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ada0df4adf6ff17cdb5493e6050ec750fa13347ea71a6122a7e139f65f842b50",
- "format": 1
- },
- {
- "name": ".github",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": ".github/workflows",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": ".github/workflows/coverage.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5fef29bf470c1567ed5ba3e3d5f227d21db4d23455c4fd12628e3e3ad80ddd76",
- "format": 1
- },
- {
- "name": ".github/workflows/main.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "140dc9b99f730080720586330df5ee7ef8f5e74b5898738d2b269ac52bbe4666",
- "format": 1
- },
- {
- "name": ".github/ISSUE_TEMPLATE",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": ".github/ISSUE_TEMPLATE/feature_request.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1c8be00f495b1a0e20d3e4c2bca809b9eda7d2ab92e838bfad951dfa37e7b3d2",
- "format": 1
- },
- {
- "name": ".github/ISSUE_TEMPLATE/bug_report.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b59987ccd30474cf321e36496cc8b30464bdd816c5b3860d659356bc3e2a2a7f",
- "format": 1
- },
- {
- "name": "CHANGELOG.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1818f97ced0b9d61cd4d65742e14cb618a333be7f734c1fee8bb420323e5373d",
- "format": 1
- }
- ],
- "format": 1
-} \ No newline at end of file
diff --git a/ansible_collections/netapp/elementsw/MANIFEST.json b/ansible_collections/netapp/elementsw/MANIFEST.json
deleted file mode 100644
index fda95d344..000000000
--- a/ansible_collections/netapp/elementsw/MANIFEST.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "collection_info": {
- "namespace": "netapp",
- "name": "elementsw",
- "version": "21.7.0",
- "authors": [
- "NetApp Ansible Team <ng-ansibleteam@netapp.com>"
- ],
- "readme": "README.md",
- "tags": [
- "storage",
- "netapp",
- "solidfire"
- ],
- "description": "Netapp ElementSW (Solidfire) Collection",
- "license": [
- "GPL-2.0-or-later"
- ],
- "license_file": null,
- "dependencies": {},
- "repository": "https://github.com/ansible-collections/netapp.elementsw",
- "documentation": null,
- "homepage": "https://netapp.io/configuration-management-and-automation/",
- "issues": "https://github.com/ansible-collections/netapp.elementsw/issues"
- },
- "file_manifest_file": {
- "name": "FILES.json",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "472a7d73c3fe2719a7c500eadc92b8f89ca852d2c5aee2b71d7afb688c97dc8c",
- "format": 1
- },
- "format": 1
-} \ No newline at end of file
diff --git a/ansible_collections/netapp/elementsw/README.md b/ansible_collections/netapp/elementsw/README.md
deleted file mode 100644
index 96b62e64d..000000000
--- a/ansible_collections/netapp/elementsw/README.md
+++ /dev/null
@@ -1,133 +0,0 @@
-[![Documentation](https://img.shields.io/badge/docs-brightgreen.svg)](https://docs.ansible.com/ansible/devel/collections/netapp/elementsw/index.html)
-![example workflow](https://github.com/ansible-collections/netapp.elementsw/actions/workflows/main.yml/badge.svg)
-[![codecov](https://codecov.io/gh/ansible-collections/netapp.elementsw/branch/main/graph/badge.svg?token=weBYkksxSi)](https://codecov.io/gh/ansible-collections/netapp.elementsw)
-
-
-netapp.elementSW
-
-NetApp ElementSW Collection
-
-Copyright (c) 2019 NetApp, Inc. All rights reserved.
-Specifications subject to change without notice.
-
-# Installation
-```bash
-ansible-galaxy collection install netapp.elementsw
-```
-To use Collection add the following to the top of your playbook, with out this you will be using Ansible 2.9 version of the module
-```
-collections:
- - netapp.elementsw
-```
-
-# Module documentation
-https://docs.ansible.com/ansible/devel/collections/netapp/elementsw/
-
-# Need help
-Join our Slack Channel at [Netapp.io](http://netapp.io/slack)
-
-# Release Notes
-
-## 21.7.0
-
-### Minor changes
- - all modules - enable usage of Ansible module group defaults - for Ansible 2.12+.
-
-## 21.6.1
-### Bug Fixes
- - requirements.txt: point to the correct python dependency
-
-## 21.3.0
-
-### New Options
- - na_elementsw_qos_policy: explicitly define `minIOPS`, `maxIOPS`, `burstIOPS` as int.
-
-### Minor changes
- - na_elementsw_info - add `cluster_nodes` and `cluster_drives`.
-
-### Bug Fixes
- - na_elementsw_drive - latest SDK does not accept ``force_during_bin_sync`` and ``force_during_upgrade``.
- - na_elementsw_qos_policy - loop would convert `minIOPS`, `maxIOPS`, `burstIOPS` to str, causing type mismatch issues in comparisons.
- - na_elementsw_snapshot_schedule - change of interface in SDK ('ScheduleInfo' object has no attribute 'minutes')
-
-## 20.11.0
-
-### Minor changes
-- na_elementsw_snapshot_schedule - Add `retention` in examples.
-
-### Bug Fixes
-- na_elementsw_drive - Object of type 'dict_values' is not JSON serializable.
-
-## 20.10.0
-
-### New Modules
-- na_elementsw_info: support for two subsets `cluster_accounts`, `node_config`.
-
-### New Options
-- na_elementsw_cluster: `encryption` to enable encryption at rest. `order_number` and `serial_number` for demo purposes.
-- na_elementsw_network_interfaces: restructure options, into 2 dictionaries `bond_1g` and `bond_10g`, so that there is no shared option. Disallow all older options.
-- na_elementsw_network_interfaces: make all options not required, so that only bond_1g can be set for example.
-
-## 20.9.1
-
-### Bug Fixes
-- na_elementsw_node: improve error reporting when cluster name cannot be set because node is already active.
-- na_elementsw_schedule - missing imports TimeIntervalFrequency, Schedule, ScheduleInfo have been added back
-
-## 20.9.0
-
-### New Modules
-- na_elementsw_qos_policy: create, modify, rename, or delete QOS policy.
-
-### New Options
-- na_elementsw_node: `cluster_name` to set the cluster name on new nodes.
-- na_elementsw_node: `preset_only` to only set the cluster name before creating a cluster with na_elementsw_cluster.
-- na_elementsw_volume: `qos_policy_name` to provide a QOS policy name or ID.
-
-### Bug Fixes
-- na_elementsw_node: fix check_mode so that no action is taken.
-
-## 20.8.0
-
-### New Options
-- na_elementsw_drive: add all drives in a cluster, allow for a list of nodes or a list of drives.
-
-### Bug Fixes
-- na_elementsw_access_group: fix check_mode so that no action is taken.
-- na_elementsw_admin_users: fix check_mode so that no action is taken.
-- na_elementsw_cluster: create cluster if it does not exist. Do not expect MVIP or SVIP to exist before create.
-- na_elementsw_cluster_snmp: double exception because of AttributeError.
-- na_elementsw_drive: node_id or drive_id were not handled properly when using numeric ids.
-- na_elementsw_initiators: volume_access_group_id was ignored. volume_access_groups was ignored and redundant.
-- na_elementsw_ldap: double exception because of AttributeError.
-- na_elementsw_snapshot_schedule: ignore schedules being deleted (idempotency), remove default values and fix documentation.
-- na_elementsw_vlan: AttributeError if VLAN already exists.
-- na_elementsw_vlan: fix check_mode so that no action is taken.
-- na_elementsw_vlan: change in attributes was ignored.
-- na_elementsw_volume: double exception because of AttributeError.
-- na_elementsw_volume: Argument '512emulation' in argument_spec is not a valid python identifier - renamed to enable512emulation.
-
-### Module documentation changes
-- use a three group format for `version_added`. So 2.7 becomes 2.7.0. Same thing for 2.8 and 2.9.
-- add type: str (or int, dict) where missing in documentation section.
-- add required: true where missing.
-- remove required: true for state and use present as default.
-
-## 20.6.0
-### Bug Fixes
-- galaxy.xml: fix repository and homepage links
-
-## 20.2.0
-### Bug Fixes
-- galaxy.yml: fix path to github repository.
-- netapp.py: report error in case of connection error rather than raising a generic exception by default.
-
-## 20.1.0
-### New Module
-- na_elementsw_access_group_volumes: add/remove volumes to/from existing access group
-
-## 19.11.0
-## 19.10.0
-Changes in 19.10.0 and September collection releases compared to Ansible 2.9
-### Documentation Fixes:
-- na_elementsw_drive: na_elementsw_drive was documented as na_element_drive
diff --git a/ansible_collections/netapp/elementsw/changelogs/changelog.yaml b/ansible_collections/netapp/elementsw/changelogs/changelog.yaml
deleted file mode 100644
index 97d921301..000000000
--- a/ansible_collections/netapp/elementsw/changelogs/changelog.yaml
+++ /dev/null
@@ -1,221 +0,0 @@
-ancestor: null
-releases:
- 19.10.0:
- changes:
- minor_changes:
- - refactor existing modules as a collection
- fragments:
- - 2019.10.0.yaml
- release_date: '2019-11-14'
- 2.7.0:
- modules:
- - description: NetApp Element Software Manage Access Groups
- name: na_elementsw_access_group
- namespace: ''
- - description: NetApp Element Software Manage Accounts
- name: na_elementsw_account
- namespace: ''
- - description: NetApp Element Software Manage Admin Users
- name: na_elementsw_admin_users
- namespace: ''
- - description: NetApp Element Software Create Backups
- name: na_elementsw_backup
- namespace: ''
- - description: NetApp Element Software Check connectivity to MVIP and SVIP.
- name: na_elementsw_check_connections
- namespace: ''
- - description: NetApp Element Software Create Cluster
- name: na_elementsw_cluster
- namespace: ''
- - description: NetApp Element Software Manage Cluster Pair
- name: na_elementsw_cluster_pair
- namespace: ''
- - description: NetApp Element Software Manage Node Drives
- name: na_elementsw_drive
- namespace: ''
- - description: NetApp Element Software Manage ldap admin users
- name: na_elementsw_ldap
- namespace: ''
- - description: NetApp Element Software Configure Node Network Interfaces
- name: na_elementsw_network_interfaces
- namespace: ''
- - description: NetApp Element Software Node Operation
- name: na_elementsw_node
- namespace: ''
- - description: NetApp Element Software Manage Snapshots
- name: na_elementsw_snapshot
- namespace: ''
- - description: NetApp Element Software Restore Snapshot
- name: na_elementsw_snapshot_restore
- namespace: ''
- - description: NetApp Element Software Snapshot Schedules
- name: na_elementsw_snapshot_schedule
- namespace: ''
- - description: NetApp Element Software Manage VLAN
- name: na_elementsw_vlan
- namespace: ''
- - description: NetApp Element Software Manage Volumes
- name: na_elementsw_volume
- namespace: ''
- - description: NetApp Element Software Create Volume Clone
- name: na_elementsw_volume_clone
- namespace: ''
- - description: NetApp Element Software Volume Pair
- name: na_elementsw_volume_pair
- namespace: ''
- release_date: '2018-09-21'
- 2.8.0:
- modules:
- - description: Configure Element SW Cluster
- name: na_elementsw_cluster_config
- namespace: ''
- - description: Configure Element SW Cluster SNMP
- name: na_elementsw_cluster_snmp
- namespace: ''
- - description: Manage Element SW initiators
- name: na_elementsw_initiators
- namespace: ''
- release_date: '2019-04-11'
- 20.1.0:
- modules:
- - description: NetApp Element Software Add/Remove Volumes to/from Access Group
- name: na_elementsw_access_group_volumes
- namespace: ''
- release_date: '2020-01-08'
- 20.10.0:
- changes:
- minor_changes:
- - na_elementsw_cluster - add new options ``encryption``, ``order_number``, and
- ``serial_number``.
- - na_elementsw_network_interfaces - make all options not required, so that only
- bond_1g can be set for example.
- - na_elementsw_network_interfaces - restructure options into 2 dictionaries
- ``bond_1g`` and ``bond_10g``, so that there is no shared option. Disallow
- all older options.
- fragments:
- - DEVOPS-3117.yaml
- - DEVOPS-3196.yaml
- - DEVOPS-3235.yaml
- modules:
- - description: NetApp Element Software Info
- name: na_elementsw_info
- namespace: ''
- release_date: '2020-10-08'
- 20.11.0:
- changes:
- bugfixes:
- - na_elementsw_drive - Object of type 'dict_values' is not JSON serializable.
- minor_changes:
- - na_elementsw_snapshot_schedule - Add ``retention`` in examples.
- fragments:
- - DEVOPS-3310.yml
- - DEVOPS-3324.yaml
- release_date: '2020-11-05'
- 20.2.0:
- changes:
- bugfixes:
- - galaxy.yml - fix path to github repository.
- - netapp.py - report error in case of connection error rather than raising a
- generic exception by default.
- fragments:
- - 20.2.0.yaml
- release_date: '2020-02-05'
- 20.6.0:
- changes:
- bugfixes:
- - galaxy.yml - fix repository and homepage links.
- fragments:
- - 20.6.0.yaml
- release_date: '2020-06-03'
- 20.8.0:
- changes:
- bugfixes:
- - na_elementsw_access_group - fix check_mode so that no action is taken.
- - na_elementsw_admin_users - fix check_mode so that no action is taken.
- - na_elementsw_cluster - create cluster if it does not exist. Do not expect
- MVIP or SVIP to exist before create.
- - na_elementsw_cluster_snmp - double exception because of AttributeError.
- - na_elementsw_drive - node_id or drive_id were not handled properly when using
- numeric ids.
- - na_elementsw_initiators - volume_access_group_id was ignored. volume_access_groups
- was ignored and redundant.
- - na_elementsw_ldap - double exception because of AttributeError.
- - na_elementsw_snapshot_schedule - ignore schedules being deleted (idempotency),
- remove default values and fix documentation.
- - na_elementsw_vlan - AttributeError if VLAN already exists.
- - na_elementsw_vlan - change in attributes was ignored.
- - na_elementsw_vlan - fix check_mode so that no action is taken.
- - na_elementsw_volume - Argument '512emulation' in argument_spec is not a valid
- python identifier - renamed to enable512emulation.
- - na_elementsw_volume - double exception because of AttributeError.
- minor_changes:
- - add "required:true" where missing.
- - add "type:str" (or int, dict) where missing in documentation section.
- - na_elementsw_drive - add all drives in a cluster, allow for a list of nodes
- or a list of drives.
- - remove "required:true" for state and use present as default.
- - use a three group format for ``version_added``. So 2.7 becomes 2.7.0. Same
- thing for 2.8 and 2.9.
- fragments:
- - 20.8.0.yaml
- release_date: '2020-08-05'
- 20.9.0:
- changes:
- bugfixes:
- - na_elementsw_node - fix check_mode so that no action is taken.
- minor_changes:
- - na_elementsw_node - ``cluster_name`` to set the cluster name on new nodes.
- - na_elementsw_node - ``preset_only`` to only set the cluster name before creating
- a cluster with na_elementsw_cluster.
- - na_elementsw_volume - ``qos_policy_name`` to provide a QOS policy name or
- ID.
- fragments:
- - 20.9.0.yaml
- modules:
- - description: NetApp Element Software create/modify/rename/delete QOS Policy
- name: na_elementsw_qos_policy
- namespace: ''
- release_date: '2020-09-02'
- 20.9.1:
- changes:
- bugfixes:
- - na_elementsw_node - improve error reporting when cluster name cannot be set
- because node is already active.
- - na_elementsw_schedule - missing imports TimeIntervalFrequency, Schedule, ScheduleInfo
- have been added back
- fragments:
- - DEVOPS-3174.yaml
- - DEVOPS-3188.yaml
- release_date: '2020-09-08'
- 21.3.0:
- changes:
- bugfixes:
- - na_elementsw_drive - lastest SDK does not accept ``force_during_bin_sync``
- and ``force_during_upgrade``.
- - na_elementsw_qos_policy - loop would convert `minIOPS`, `maxIOPS`, `burstIOPS`
- to str, causing type mismatch issues in comparisons.
- - na_elementsw_snapshot_schedule - change of interface in SDK ('ScheduleInfo'
- object has no attribute 'minutes')
- minor_changes:
- - na_elementsw_info - add ``cluster_nodes`` and ``cluster_drives``.
- - na_elementsw_qos_policy - explicitly define ``minIOPS``, ``maxIOPS``, ``burstIOPS``
- as int.
- fragments:
- - DEVOPS-3731.yaml
- - DEVOPS-3733.yaml
- - DEVOPS-3734.yaml
- release_date: '2021-03-03'
- 21.6.1:
- changes:
- bugfixes:
- - requirements.txt - point to the correct python dependency
- fragments:
- - DEVOPS-3800.yaml
- release_date: '2021-05-18'
- 21.7.0:
- changes:
- minor_changes:
- - PR1 - allow usage of Ansible module group defaults - for Ansible 2.12+.
- fragments:
- - DEVOPS-4416.yaml
- release_date: '2021-11-03'
diff --git a/ansible_collections/netapp/elementsw/changelogs/config.yaml b/ansible_collections/netapp/elementsw/changelogs/config.yaml
deleted file mode 100644
index 2d637df5c..000000000
--- a/ansible_collections/netapp/elementsw/changelogs/config.yaml
+++ /dev/null
@@ -1,32 +0,0 @@
-changelog_filename_template: ../CHANGELOG.rst
-changelog_filename_version_depth: 0
-changes_file: changelog.yaml
-changes_format: combined
-ignore_other_fragment_extensions: true
-keep_fragments: true
-mention_ancestor: true
-new_plugins_after_name: removed_features
-notesdir: fragments
-prelude_section_name: release_summary
-prelude_section_title: Release Summary
-sanitize_changelog: true
-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
-title: NetApp ElementSW Collection
-trivial_section_name: trivial
-use_fqcn: true
diff --git a/ansible_collections/netapp/elementsw/changelogs/fragments/20.2.0.yaml b/ansible_collections/netapp/elementsw/changelogs/fragments/20.2.0.yaml
deleted file mode 100644
index 832b5f56f..000000000
--- a/ansible_collections/netapp/elementsw/changelogs/fragments/20.2.0.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-bugfixes:
- - galaxy.yml - fix path to github repository.
- - netapp.py - report error in case of connection error rather than raising a generic exception by default.
diff --git a/ansible_collections/netapp/elementsw/changelogs/fragments/20.6.0.yaml b/ansible_collections/netapp/elementsw/changelogs/fragments/20.6.0.yaml
deleted file mode 100644
index fcd0d11ee..000000000
--- a/ansible_collections/netapp/elementsw/changelogs/fragments/20.6.0.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-bugfixes:
- - galaxy.yml - fix repository and homepage links.
diff --git a/ansible_collections/netapp/elementsw/changelogs/fragments/20.8.0.yaml b/ansible_collections/netapp/elementsw/changelogs/fragments/20.8.0.yaml
deleted file mode 100644
index 5c959531a..000000000
--- a/ansible_collections/netapp/elementsw/changelogs/fragments/20.8.0.yaml
+++ /dev/null
@@ -1,21 +0,0 @@
-minor_changes:
- - na_elementsw_drive - add all drives in a cluster, allow for a list of nodes or a list of drives.
- - use a three group format for ``version_added``. So 2.7 becomes 2.7.0. Same thing for 2.8 and 2.9.
- - add "type:str" (or int, dict) where missing in documentation section.
- - add "required:true" where missing.
- - remove "required:true" for state and use present as default.
-
-bugfixes:
- - na_elementsw_access_group - fix check_mode so that no action is taken.
- - na_elementsw_admin_users - fix check_mode so that no action is taken.
- - na_elementsw_cluster - create cluster if it does not exist. Do not expect MVIP or SVIP to exist before create.
- - na_elementsw_cluster_snmp - double exception because of AttributeError.
- - na_elementsw_drive - node_id or drive_id were not handled properly when using numeric ids.
- - na_elementsw_initiators - volume_access_group_id was ignored. volume_access_groups was ignored and redundant.
- - na_elementsw_ldap - double exception because of AttributeError.
- - na_elementsw_snapshot_schedule - ignore schedules being deleted (idempotency), remove default values and fix documentation.
- - na_elementsw_vlan - AttributeError if VLAN already exists.
- - na_elementsw_vlan - fix check_mode so that no action is taken.
- - na_elementsw_vlan - change in attributes was ignored.
- - na_elementsw_volume - double exception because of AttributeError.
- - na_elementsw_volume - Argument '512emulation' in argument_spec is not a valid python identifier - renamed to enable512emulation.
diff --git a/ansible_collections/netapp/elementsw/changelogs/fragments/20.9.0.yaml b/ansible_collections/netapp/elementsw/changelogs/fragments/20.9.0.yaml
deleted file mode 100644
index a406c9c2d..000000000
--- a/ansible_collections/netapp/elementsw/changelogs/fragments/20.9.0.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-minor_changes:
- - na_elementsw_node - ``cluster_name`` to set the cluster name on new nodes.
- - na_elementsw_node - ``preset_only`` to only set the cluster name before creating a cluster with na_elementsw_cluster.
- - na_elementsw_volume - ``qos_policy_name`` to provide a QOS policy name or ID.
-
-bugfixes:
- - na_elementsw_node - fix check_mode so that no action is taken.
diff --git a/ansible_collections/netapp/elementsw/changelogs/fragments/2019.10.0.yaml b/ansible_collections/netapp/elementsw/changelogs/fragments/2019.10.0.yaml
deleted file mode 100644
index 5723daa11..000000000
--- a/ansible_collections/netapp/elementsw/changelogs/fragments/2019.10.0.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-minor_changes:
- - refactor existing modules as a collection
diff --git a/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3117.yaml b/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3117.yaml
deleted file mode 100644
index 23a6cafa4..000000000
--- a/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3117.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-minor_changes:
- - na_elementsw_cluster - add new options ``encryption``, ``order_number``, and ``serial_number``.
diff --git a/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3174.yaml b/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3174.yaml
deleted file mode 100644
index 01e754719..000000000
--- a/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3174.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-bugfixes:
- - na_elementsw_node - improve error reporting when cluster name cannot be set because node is already active.
diff --git a/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3188.yaml b/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3188.yaml
deleted file mode 100644
index ad5d8bee7..000000000
--- a/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3188.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-bugfixes:
- - na_elementsw_schedule - missing imports TimeIntervalFrequency, Schedule, ScheduleInfo have been added back \ No newline at end of file
diff --git a/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3196.yaml b/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3196.yaml
deleted file mode 100644
index 21a70b02c..000000000
--- a/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3196.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-minor_changes:
- - na_elementsw_network_interfaces - make all options not required, so that only bond_1g can be set for example.
diff --git a/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3235.yaml b/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3235.yaml
deleted file mode 100644
index 8a2f82f34..000000000
--- a/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3235.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-minor_changes:
- - na_elementsw_network_interfaces - restructure options into 2 dictionaries ``bond_1g`` and ``bond_10g``, so that there is no shared option. Disallow all older options.
diff --git a/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3310.yml b/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3310.yml
deleted file mode 100644
index 729e6d062..000000000
--- a/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3310.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-minor_changes:
- - na_elementsw_snapshot_schedule - Add ``retention`` in examples.
diff --git a/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3324.yaml b/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3324.yaml
deleted file mode 100644
index b87e308d8..000000000
--- a/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3324.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-bugfixes:
- - na_elementsw_drive - Object of type 'dict_values' is not JSON serializable.
diff --git a/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3731.yaml b/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3731.yaml
deleted file mode 100644
index a4e43ed45..000000000
--- a/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3731.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
-minor_changes:
- - na_elementsw_qos_policy - explicitly define ``minIOPS``, ``maxIOPS``, ``burstIOPS`` as int.
-bugfixes:
- - na_elementsw_qos_policy - loop would convert `minIOPS`, `maxIOPS`, `burstIOPS` to str, causing type mismatch issues in comparisons.
diff --git a/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3733.yaml b/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3733.yaml
deleted file mode 100644
index 7310f3b75..000000000
--- a/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3733.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
-minor_changes:
- - na_elementsw_info - add ``cluster_nodes`` and ``cluster_drives``.
-bugfixes:
- - na_elementsw_drive - lastest SDK does not accept ``force_during_bin_sync`` and ``force_during_upgrade``.
diff --git a/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3734.yaml b/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3734.yaml
deleted file mode 100644
index 08c5bf552..000000000
--- a/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3734.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-bugfixes:
- - na_elementsw_snapshot_schedule - change of interface in SDK ('ScheduleInfo' object has no attribute 'minutes')
diff --git a/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3800.yaml b/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3800.yaml
deleted file mode 100644
index b6e57d046..000000000
--- a/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3800.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-bugfixes:
- - requirements.txt - point to the correct python dependency
diff --git a/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-4416.yaml b/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-4416.yaml
deleted file mode 100644
index 6b4b660a0..000000000
--- a/ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-4416.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-minor_changes:
- - PR1 - allow usage of Ansible module group defaults - for Ansible 2.12+.
diff --git a/ansible_collections/netapp/elementsw/meta/runtime.yml b/ansible_collections/netapp/elementsw/meta/runtime.yml
deleted file mode 100644
index 05a30f02f..000000000
--- a/ansible_collections/netapp/elementsw/meta/runtime.yml
+++ /dev/null
@@ -1,28 +0,0 @@
----
-requires_ansible: ">=2.9.10"
-action_groups:
- netapp_elementsw:
- - na_elementsw_access_group
- - na_elementsw_access_group_volumes
- - na_elementsw_account
- - na_elementsw_admin_users
- - na_elementsw_backup
- - na_elementsw_check_connections
- - na_elementsw_cluster_config
- - na_elementsw_cluster_pair
- - na_elementsw_cluster
- - na_elementsw_cluster_snmp
- - na_elementsw_drive
- - na_elementsw_info
- - na_elementsw_initiators
- - na_elementsw_ldap
- - na_elementsw_network_interfaces
- - na_elementsw_node
- - na_elementsw_qos_policy
- - na_elementsw_snapshot
- - na_elementsw_snapshot_restore
- - na_elementsw_snapshot_schedule
- - na_elementsw_vlan
- - na_elementsw_volume_clone
- - na_elementsw_volume_pair
- - na_elementsw_volume
diff --git a/ansible_collections/netapp/elementsw/plugins/doc_fragments/netapp.py b/ansible_collections/netapp/elementsw/plugins/doc_fragments/netapp.py
deleted file mode 100644
index 229d03f7d..000000000
--- a/ansible_collections/netapp/elementsw/plugins/doc_fragments/netapp.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright: (c) 2018, NetApp Ansible Team <ng-ansibleteam@netapp.com>
-# 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
-
-
-class ModuleDocFragment(object):
-
- DOCUMENTATION = r'''
-options:
- - See respective platform section for more details
-requirements:
- - See respective platform section for more details
-notes:
- - Ansible modules are available for the following NetApp Storage Platforms: E-Series, ONTAP, SolidFire
-'''
-
- # Documentation fragment for SolidFire
- SOLIDFIRE = r'''
-options:
- hostname:
- required: true
- description:
- - The hostname or IP address of the SolidFire cluster.
- - For na_elementsw_cluster, the Management IP (MIP) or hostname of the node to initiate the cluster creation from.
- type: str
- username:
- required: true
- description:
- - Please ensure that the user has the adequate permissions. For more information, please read the official documentation
- U(https://mysupport.netapp.com/documentation/docweb/index.html?productID=62636&language=en-US).
- aliases: ['user']
- type: str
- password:
- required: true
- description:
- - Password for the specified user.
- aliases: ['pass']
- type: str
-
-requirements:
- - The modules were developed with SolidFire 10.1
- - solidfire-sdk-python (1.1.0.92) or greater. Install using 'pip install solidfire-sdk-python'
-
-notes:
- - The modules prefixed with na\\_elementsw are built to support the SolidFire storage platform.
-
-'''
diff --git a/ansible_collections/netapp/elementsw/plugins/module_utils/netapp.py b/ansible_collections/netapp/elementsw/plugins/module_utils/netapp.py
deleted file mode 100644
index 4121bf8e7..000000000
--- a/ansible_collections/netapp/elementsw/plugins/module_utils/netapp.py
+++ /dev/null
@@ -1,107 +0,0 @@
-# This code is part of Ansible, but is an independent component.
-# This particular file snippet, and this file snippet only, is BSD licensed.
-# Modules you write using this snippet, which is embedded dynamically by Ansible
-# still belong to the author of the module, and may assign their own license
-# to the complete work.
-#
-# Copyright (c) 2017, Sumit Kumar <sumit4@netapp.com>
-# Copyright (c) 2017, Michael Price <michael.price@netapp.com>
-# Copyright: (c) 2018, NetApp Ansible Team <ng-ansibleteam@netapp.com>
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without modification,
-# are permitted provided that the following conditions are met:
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above copyright notice,
-# this list of conditions and the following disclaimer in the documentation
-# and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# 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.
-
-'''
-Common methods and constants
-'''
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-
-HAS_SF_SDK = False
-SF_BYTE_MAP = dict(
- # Management GUI displays 1024 ** 3 as 1.1 GB, thus use 1000.
- bytes=1,
- b=1,
- kb=1000,
- mb=1000 ** 2,
- gb=1000 ** 3,
- tb=1000 ** 4,
- pb=1000 ** 5,
- eb=1000 ** 6,
- zb=1000 ** 7,
- yb=1000 ** 8
-)
-
-# uncomment this to log API calls
-# import logging
-
-try:
- from solidfire.factory import ElementFactory
- import solidfire.common
- HAS_SF_SDK = True
-except ImportError:
- HAS_SF_SDK = False
-
-COLLECTION_VERSION = "21.7.0"
-
-
-def has_sf_sdk():
- return HAS_SF_SDK
-
-
-def ontap_sf_host_argument_spec():
-
- return dict(
- hostname=dict(required=True, type='str'),
- username=dict(required=True, type='str', aliases=['user']),
- password=dict(required=True, type='str', aliases=['pass'], no_log=True)
- )
-
-
-def create_sf_connection(module, hostname=None, port=None, raise_on_connection_error=False, timeout=None):
- if hostname is None:
- hostname = module.params['hostname']
- username = module.params['username']
- password = module.params['password']
- options = dict()
- if port is not None:
- options['port'] = port
- if timeout is not None:
- options['timeout'] = timeout
-
- if not HAS_SF_SDK:
- module.fail_json(msg="the python SolidFire SDK module is required")
-
- try:
- logging.basicConfig(filename='/tmp/elementsw_apis.log', level=logging.DEBUG, format='%(asctime)s %(levelname)-8s %(message)s')
- except NameError:
- # logging was not imported
- pass
-
- try:
- return_val = ElementFactory.create(hostname, username, password, **options)
- except (solidfire.common.ApiConnectionError, solidfire.common.ApiServerError) as exc:
- if raise_on_connection_error:
- raise exc
- module.fail_json(msg=repr(exc))
- except Exception as exc:
- raise Exception("Unable to create SF connection: %s" % repr(exc))
- return return_val
diff --git a/ansible_collections/netapp/elementsw/plugins/module_utils/netapp_elementsw_module.py b/ansible_collections/netapp/elementsw/plugins/module_utils/netapp_elementsw_module.py
deleted file mode 100644
index 2d8b92cfa..000000000
--- a/ansible_collections/netapp/elementsw/plugins/module_utils/netapp_elementsw_module.py
+++ /dev/null
@@ -1,206 +0,0 @@
-# This code is part of Ansible, but is an independent component.
-# This particular file snippet, and this file snippet only, is BSD licensed.
-# Copyright: (c) 2018, NetApp Ansible Team <ng-ansibleteam@netapp.com>
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-
-from ansible.module_utils._text import to_native
-
-HAS_SF_SDK = False
-try:
- import solidfire.common
- HAS_SF_SDK = True
-except ImportError:
- HAS_SF_SDK = False
-
-
-def has_sf_sdk():
- return HAS_SF_SDK
-
-
-class NaElementSWModule(object):
- ''' Support class for common or shared functions '''
- def __init__(self, elem):
- self.elem_connect = elem
- self.parameters = dict()
-
- def get_volume(self, volume_id):
- """
- Return volume details if volume exists for given volume_id
-
- :param volume_id: volume ID
- :type volume_id: int
- :return: Volume dict if found, None if not found
- :rtype: dict
- """
- volume_list = self.elem_connect.list_volumes(volume_ids=[volume_id])
- for volume in volume_list.volumes:
- if volume.volume_id == volume_id:
- if str(volume.delete_time) == "":
- return volume
- return None
-
- def get_volume_id(self, vol_name, account_id):
- """
- Return volume id from the given (valid) account_id if found
- Return None if not found
-
- :param vol_name: Name of the volume
- :type vol_name: str
- :param account_id: Account ID
- :type account_id: int
-
- :return: Volume ID of the first matching volume if found. None if not found.
- :rtype: int
- """
- volume_list = self.elem_connect.list_volumes_for_account(account_id=account_id)
- for volume in volume_list.volumes:
- if volume.name == vol_name:
- # return volume_id
- if str(volume.delete_time) == "":
- return volume.volume_id
- return None
-
- def volume_id_exists(self, volume_id):
- """
- Return volume_id if volume exists for given volume_id
-
- :param volume_id: volume ID
- :type volume_id: int
- :return: Volume ID if found, None if not found
- :rtype: int
- """
- volume_list = self.elem_connect.list_volumes(volume_ids=[volume_id])
- for volume in volume_list.volumes:
- if volume.volume_id == volume_id:
- if str(volume.delete_time) == "":
- return volume.volume_id
- return None
-
- def volume_exists(self, volume, account_id):
- """
- Return volume_id if exists, None if not found
-
- :param volume: Volume ID or Name
- :type volume: str
- :param account_id: Account ID (valid)
- :type account_id: int
- :return: Volume ID if found, None if not found
- """
- # If volume is an integer, get_by_id
- if str(volume).isdigit():
- volume_id = int(volume)
- try:
- if self.volume_id_exists(volume_id):
- return volume_id
- except solidfire.common.ApiServerError:
- # don't fail, continue and try get_by_name
- pass
- # get volume by name
- volume_id = self.get_volume_id(volume, account_id)
- return volume_id
-
- def get_snapshot(self, snapshot_id, volume_id):
- """
- Return snapshot details if found
-
- :param snapshot_id: Snapshot ID or Name
- :type snapshot_id: str
- :param volume_id: Account ID (valid)
- :type volume_id: int
- :return: Snapshot dict if found, None if not found
- :rtype: dict
- """
- # mandate src_volume_id although not needed by sdk
- snapshot_list = self.elem_connect.list_snapshots(
- volume_id=volume_id)
- for snapshot in snapshot_list.snapshots:
- # if actual id is provided
- if str(snapshot_id).isdigit() and snapshot.snapshot_id == int(snapshot_id):
- return snapshot
- # if snapshot name is provided
- elif snapshot.name == snapshot_id:
- return snapshot
- return None
-
- @staticmethod
- def map_qos_obj_to_dict(qos_obj):
- ''' Take a QOS object and return a key, normalize the key names
- Interestingly, the APIs are using different ids for create and get
- '''
- mappings = [
- ('burst_iops', 'burstIOPS'),
- ('min_iops', 'minIOPS'),
- ('max_iops', 'maxIOPS'),
- ]
- qos_dict = vars(qos_obj)
- # Align names to create API and module interface
- for read, send in mappings:
- if read in qos_dict:
- qos_dict[send] = qos_dict.pop(read)
- return qos_dict
-
- def get_qos_policy(self, name):
- """
- Get QOS Policy
- :description: Get QOS Policy object for a given name
- :return: object, error
- Policy object converted to dict if found, else None
- Error text if error, else None
- :rtype: dict/None, str/None
- """
- try:
- qos_policy_list_obj = self.elem_connect.list_qos_policies()
- except (solidfire.common.ApiServerError, solidfire.common.ApiConnectionError) as exc:
- error = "Error getting list of qos policies: %s" % to_native(exc)
- return None, error
-
- policy_dict = dict()
- if hasattr(qos_policy_list_obj, 'qos_policies'):
- for policy in qos_policy_list_obj.qos_policies:
- # Check and get policy object for a given name
- if str(policy.qos_policy_id) == name:
- policy_dict = vars(policy)
- elif policy.name == name:
- policy_dict = vars(policy)
- if 'qos' in policy_dict:
- policy_dict['qos'] = self.map_qos_obj_to_dict(policy_dict['qos'])
-
- return policy_dict if policy_dict else None, None
-
- def account_exists(self, account):
- """
- Return account_id if account exists for given account id or name
- Raises an exception if account does not exist
-
- :param account: Account ID or Name
- :type account: str
- :return: Account ID if found, None if not found
- """
- # If account is an integer, get_by_id
- if account.isdigit():
- account_id = int(account)
- try:
- result = self.elem_connect.get_account_by_id(account_id=account_id)
- if result.account.account_id == account_id:
- return account_id
- except solidfire.common.ApiServerError:
- # don't fail, continue and try get_by_name
- pass
- # get account by name, the method returns an Exception if account doesn't exist
- result = self.elem_connect.get_account_by_name(username=account)
- return result.account.account_id
-
- def set_element_attributes(self, source):
- """
- Return telemetry attributes for the current execution
-
- :param source: name of the module
- :type source: str
- :return: a dict containing telemetry attributes
- """
- attributes = {}
- attributes['config-mgmt'] = 'ansible'
- attributes['event-source'] = source
- return attributes
diff --git a/ansible_collections/netapp/elementsw/plugins/module_utils/netapp_module.py b/ansible_collections/netapp/elementsw/plugins/module_utils/netapp_module.py
deleted file mode 100644
index c2b02d3d2..000000000
--- a/ansible_collections/netapp/elementsw/plugins/module_utils/netapp_module.py
+++ /dev/null
@@ -1,225 +0,0 @@
-# This code is part of Ansible, but is an independent component.
-# This particular file snippet, and this file snippet only, is BSD licensed.
-# Modules you write using this snippet, which is embedded dynamically by Ansible
-# still belong to the author of the module, and may assign their own license
-# to the complete work.
-#
-# Copyright (c) 2018, NetApp Ansible Team <ng-ansibleteam@netapp.com>
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without modification,
-# are permitted provided that the following conditions are met:
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above copyright notice,
-# this list of conditions and the following disclaimer in the documentation
-# and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# 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.
-
-''' Support class for NetApp ansible modules '''
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-
-
-def cmp(a, b):
- """
- Python 3 does not have a cmp function, this will do the cmp.
- :param a: first object to check
- :param b: second object to check
- :return:
- """
- # convert to lower case for string comparison.
- if a is None:
- return -1
- if type(a) is str and type(b) is str:
- a = a.lower()
- b = b.lower()
- # if list has string element, convert string to lower case.
- if type(a) is list and type(b) is list:
- a = [x.lower() if type(x) is str else x for x in a]
- b = [x.lower() if type(x) is str else x for x in b]
- a.sort()
- b.sort()
- return (a > b) - (a < b)
-
-
-class NetAppModule(object):
- '''
- Common class for NetApp modules
- set of support functions to derive actions based
- on the current state of the system, and a desired state
- '''
-
- def __init__(self):
- self.log = list()
- self.changed = False
- self.parameters = {'name': 'not intialized'}
- # self.debug = list()
-
- def set_parameters(self, ansible_params):
- self.parameters = dict()
- for param in ansible_params:
- if ansible_params[param] is not None:
- self.parameters[param] = ansible_params[param]
- return self.parameters
-
- def get_cd_action(self, current, desired):
- ''' takes a desired state and a current state, and return an action:
- create, delete, None
- eg:
- is_present = 'absent'
- some_object = self.get_object(source)
- if some_object is not None:
- is_present = 'present'
- action = cd_action(current=is_present, desired = self.desired.state())
- '''
- if 'state' in desired:
- desired_state = desired['state']
- else:
- desired_state = 'present'
-
- if current is None and desired_state == 'absent':
- return None
- if current is not None and desired_state == 'present':
- return None
- # change in state
- self.changed = True
- if current is not None:
- return 'delete'
- return 'create'
-
- def compare_and_update_values(self, current, desired, keys_to_compare):
- updated_values = dict()
- is_changed = False
- for key in keys_to_compare:
- if key in current:
- if key in desired and desired[key] is not None:
- if current[key] != desired[key]:
- updated_values[key] = desired[key]
- is_changed = True
- else:
- updated_values[key] = current[key]
- else:
- updated_values[key] = current[key]
-
- return updated_values, is_changed
-
- @staticmethod
- def check_keys(current, desired):
- ''' TODO: raise an error if keys do not match
- with the exception of:
- new_name, state in desired
- '''
- pass
-
- @staticmethod
- def compare_lists(current, desired, get_list_diff):
- ''' compares two lists and return a list of elements that are either the desired elements or elements that are
- modified from the current state depending on the get_list_diff flag
- :param: current: current item attribute in ONTAP
- :param: desired: attributes from playbook
- :param: get_list_diff: specifies whether to have a diff of desired list w.r.t current list for an attribute
- :return: list of attributes to be modified
- :rtype: list
- '''
- desired_diff_list = [item for item in desired if item not in current] # get what in desired and not in current
- current_diff_list = [item for item in current if item not in desired] # get what in current but not in desired
-
- if desired_diff_list or current_diff_list:
- # there are changes
- if get_list_diff:
- return desired_diff_list
- else:
- return desired
- else:
- return []
-
- def get_modified_attributes(self, current, desired, get_list_diff=False, additional_keys=False):
- ''' takes two dicts of attributes and return a dict of attributes that are
- not in the current state
- It is expected that all attributes of interest are listed in current and
- desired.
- The same assumption holds true for any nested directory.
- TODO: This is actually not true for the ElementSW 'attributes' directory.
- Practically it means you cannot add or remove a key in a modify.
- :param: current: current attributes in ONTAP
- :param: desired: attributes from playbook
- :param: get_list_diff: specifies whether to have a diff of desired list w.r.t current list for an attribute
- :return: dict of attributes to be modified
- :rtype: dict
-
- NOTE: depending on the attribute, the caller may need to do a modify or a
- different operation (eg move volume if the modified attribute is an
- aggregate name)
- '''
- # uncomment these 2 lines if needed
- # self.log.append('current: %s' % repr(current))
- # self.log.append('desired: %s' % repr(desired))
- # if the object does not exist, we can't modify it
- modified = dict()
- if current is None:
- return modified
-
- # error out if keys do not match
- self.check_keys(current, desired)
-
- # collect changed attributes
- for key, value in current.items():
- if key in desired and desired[key] is not None:
- if type(value) is list:
- modified_list = self.compare_lists(value, desired[key], get_list_diff) # get modified list from current and desired
- if modified_list:
- modified[key] = modified_list
- elif type(value) is dict:
- modified_dict = self.get_modified_attributes(value, desired[key], get_list_diff, additional_keys=True)
- if modified_dict:
- modified[key] = modified_dict
- elif cmp(value, desired[key]) != 0:
- modified[key] = desired[key]
- if additional_keys:
- for key, value in desired.items():
- if key not in current:
- modified[key] = desired[key]
- if modified:
- self.changed = True
- # Uncomment this line if needed
- # self.log.append('modified: %s' % repr(modified))
- return modified
-
- def is_rename_action(self, source, target):
- ''' takes a source and target object, and returns True
- if a rename is required
- eg:
- source = self.get_object(source_name)
- target = self.get_object(target_name)
- action = is_rename_action(source, target)
- :return: None for error, True for rename action, False otherwise
- '''
- if source is None and target is None:
- # error, do nothing
- # cannot rename an non existent resource
- # alternatively we could create B
- return None
- if source is not None and target is not None:
- # error, do nothing
- # idempotency (or) new_name_is_already_in_use
- # alternatively we could delete B and rename A to B
- return False
- if source is None and target is not None:
- # do nothing, maybe the rename was already done
- return False
- # source is not None and target is None:
- # rename is in order
- self.changed = True
- return True
diff --git a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_access_group.py b/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_access_group.py
deleted file mode 100644
index 467ca415c..000000000
--- a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_access_group.py
+++ /dev/null
@@ -1,397 +0,0 @@
-#!/usr/bin/python
-
-# (c) 2018, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or
-# https://www.gnu.org/licenses/gpl-3.0.txt)
-
-"""
-Element Software Access Group Manager
-"""
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'certified'}
-
-
-DOCUMENTATION = '''
-
-module: na_elementsw_access_group
-
-short_description: NetApp Element Software Manage Access Groups
-extends_documentation_fragment:
- - netapp.elementsw.netapp.solidfire
-version_added: 2.7.0
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-description:
-- Create, destroy, or update access groups on Element Software Cluster.
-
-options:
-
- state:
- description:
- - Whether the specified access group should exist or not.
- choices: ['present', 'absent']
- default: present
- type: str
-
- from_name:
- description:
- - ID or Name of the access group to rename.
- - Required to create a new access group called 'name' by renaming 'from_name'.
- version_added: 2.8.0
- type: str
-
- name:
- description:
- - Name for the access group for create, modify and delete operations.
- required: True
- aliases:
- - src_access_group_id
- type: str
-
- initiators:
- description:
- - List of initiators to include in the access group. If unspecified, the access group will start out without configured initiators.
- type: list
- elements: str
-
- volumes:
- description:
- - List of volumes to initially include in the volume access group. If unspecified, the access group will start without any volumes.
- - It accepts either volume_name or volume_id
- type: list
- elements: str
-
- account_id:
- description:
- - Account ID for the owner of this volume.
- - It accepts either account_name or account_id
- - if account_id is digit, it will consider as account_id
- - If account_id is string, it will consider as account_name
- version_added: 2.8.0
- type: str
-
- virtual_network_id:
- description:
- - The ID of the Element SW Software Cluster Virtual Network to associate the access group with.
- type: int
-
- virtual_network_tags:
- description:
- - The tags of VLAN Virtual Network Tag to associate the access group with.
- type: list
- elements: str
-
- attributes:
- description: List of Name/Value pairs in JSON object format.
- type: dict
-
-'''
-
-EXAMPLES = """
- - name: Create Access Group
- na_elementsw_access_group:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: present
- name: AnsibleAccessGroup
- volumes: [7,8]
- account_id: 1
-
- - name: Modify Access Group
- na_elementsw_access_group:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: present
- name: AnsibleAccessGroup-Renamed
- account_id: 1
- attributes: {"volumes": [1,2,3], "virtual_network_id": 12345}
-
- - name: Rename Access Group
- na_elementsw_access_group:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: present
- from_name: AnsibleAccessGroup
- name: AnsibleAccessGroup-Renamed
-
- - name: Delete Access Group
- na_elementsw_access_group:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: absent
- name: 1
-"""
-
-
-RETURN = """
-
-msg:
- description: Success message
- returned: success
- type: str
-
-"""
-import traceback
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils._text import to_native
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.elementsw.plugins.module_utils.netapp_elementsw_module import NaElementSWModule
-
-HAS_SF_SDK = netapp_utils.has_sf_sdk()
-try:
- import solidfire.common
-except ImportError:
- HAS_SF_SDK = False
-
-
-class ElementSWAccessGroup(object):
- """
- Element Software Volume Access Group
- """
-
- def __init__(self):
-
- self.argument_spec = netapp_utils.ontap_sf_host_argument_spec()
- self.argument_spec.update(dict(
- state=dict(required=False, type='str', choices=['present', 'absent'], default='present'),
- from_name=dict(required=False, type='str'),
- name=dict(required=True, aliases=["src_access_group_id"], type='str'),
- initiators=dict(required=False, type='list', elements='str'),
- volumes=dict(required=False, type='list', elements='str'),
- account_id=dict(required=False, type='str'),
- virtual_network_id=dict(required=False, type='int'),
- virtual_network_tags=dict(required=False, type='list', elements='str'),
- attributes=dict(required=False, type='dict'),
- ))
-
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- required_if=[
- ('state', 'present', ['account_id'])
- ],
- supports_check_mode=True
- )
-
- input_params = self.module.params
-
- # Set up state variables
- self.state = input_params['state']
- self.from_name = input_params['from_name']
- self.access_group_name = input_params['name']
- self.initiators = input_params['initiators']
- self.volumes = input_params['volumes']
- self.account_id = input_params['account_id']
- self.virtual_network_id = input_params['virtual_network_id']
- self.virtual_network_tags = input_params['virtual_network_tags']
- self.attributes = input_params['attributes']
-
- if HAS_SF_SDK is False:
- self.module.fail_json(msg="Unable to import the SolidFire Python SDK")
- else:
- self.sfe = netapp_utils.create_sf_connection(module=self.module)
-
- self.elementsw_helper = NaElementSWModule(self.sfe)
-
- # add telemetry attributes
- if self.attributes is not None:
- self.attributes.update(self.elementsw_helper.set_element_attributes(source='na_elementsw_access_group'))
- else:
- self.attributes = self.elementsw_helper.set_element_attributes(source='na_elementsw_access_group')
-
- def get_access_group(self, name):
- """
- Get Access Group
- :description: Get Access Group object for a given name
-
- :return: object (Group object)
- :rtype: object (Group object)
- """
- access_groups_list = self.sfe.list_volume_access_groups()
- group_obj = None
-
- for group in access_groups_list.volume_access_groups:
- # Check and get access_group object for a given name
- if str(group.volume_access_group_id) == name:
- group_obj = group
- elif group.name == name:
- group_obj = group
-
- return group_obj
-
- def get_account_id(self):
- # Validate account id
- # Return account_id if found, None otherwise
- try:
- account_id = self.elementsw_helper.account_exists(self.account_id)
- return account_id
- except solidfire.common.ApiServerError:
- return None
-
- def get_volume_ids(self):
- # Validate volume_ids
- # Return volume ids if found, fail if not found
- volume_ids = []
- for volume in self.volumes:
- volume_id = self.elementsw_helper.volume_exists(volume, self.account_id)
- if volume_id:
- volume_ids.append(volume_id)
- else:
- self.module.fail_json(msg='Specified volume %s does not exist' % volume)
- return volume_ids
-
- def create_access_group(self):
- """
- Create the Access Group
- """
- try:
- self.sfe.create_volume_access_group(name=self.access_group_name,
- initiators=self.initiators,
- volumes=self.volumes,
- virtual_network_id=self.virtual_network_id,
- virtual_network_tags=self.virtual_network_tags,
- attributes=self.attributes)
- except Exception as e:
- self.module.fail_json(msg="Error creating volume access group %s: %s" %
- (self.access_group_name, to_native(e)), exception=traceback.format_exc())
-
- def delete_access_group(self):
- """
- Delete the Access Group
- """
- try:
- self.sfe.delete_volume_access_group(volume_access_group_id=self.group_id)
-
- except Exception as e:
- self.module.fail_json(msg="Error deleting volume access group %s: %s" %
- (self.access_group_name, to_native(e)),
- exception=traceback.format_exc())
-
- def update_access_group(self):
- """
- Update the Access Group if the access_group already exists
- """
- try:
- self.sfe.modify_volume_access_group(volume_access_group_id=self.group_id,
- virtual_network_id=self.virtual_network_id,
- virtual_network_tags=self.virtual_network_tags,
- initiators=self.initiators,
- volumes=self.volumes,
- attributes=self.attributes)
- except Exception as e:
- self.module.fail_json(msg="Error updating volume access group %s: %s" %
- (self.access_group_name, to_native(e)), exception=traceback.format_exc())
-
- def rename_access_group(self):
- """
- Rename the Access Group to the new name
- """
- try:
- self.sfe.modify_volume_access_group(volume_access_group_id=self.from_group_id,
- virtual_network_id=self.virtual_network_id,
- virtual_network_tags=self.virtual_network_tags,
- name=self.access_group_name,
- initiators=self.initiators,
- volumes=self.volumes,
- attributes=self.attributes)
- except Exception as e:
- self.module.fail_json(msg="Error updating volume access group %s: %s" %
- (self.from_name, to_native(e)), exception=traceback.format_exc())
-
- def apply(self):
- """
- Process the access group operation on the Element Software Cluster
- """
- changed = False
- action = None
-
- input_account_id = self.account_id
- if self.account_id is not None:
- self.account_id = self.get_account_id()
- if self.state == 'present' and self.volumes is not None:
- if self.account_id:
- self.volumes = self.get_volume_ids()
- else:
- self.module.fail_json(msg='Error: Specified account id "%s" does not exist.' % str(input_account_id))
-
- group_detail = self.get_access_group(self.access_group_name)
-
- if group_detail is not None:
- # If access group found
- self.group_id = group_detail.volume_access_group_id
-
- if self.state == "absent":
- action = 'delete'
- changed = True
- else:
- # If state - present, check for any parameter of exising group needs modification.
- if self.volumes is not None and len(self.volumes) > 0:
- # Compare the volume list
- if not group_detail.volumes:
- # If access group does not have any volume attached
- action = 'update'
- changed = True
- else:
- for volumeID in group_detail.volumes:
- if volumeID not in self.volumes:
- action = 'update'
- changed = True
- break
-
- elif self.initiators is not None and group_detail.initiators != self.initiators:
- action = 'update'
- changed = True
-
- elif self.virtual_network_id is not None or self.virtual_network_tags is not None:
- action = 'update'
- changed = True
-
- else:
- # access_group does not exist
- if self.state == "present" and self.from_name is not None:
- group_detail = self.get_access_group(self.from_name)
- if group_detail is not None:
- # If resource pointed by from_name exists, rename the access_group to name
- self.from_group_id = group_detail.volume_access_group_id
- action = 'rename'
- changed = True
- else:
- # If resource pointed by from_name does not exists, error out
- self.module.fail_json(msg="Resource does not exist : %s" % self.from_name)
- elif self.state == "present":
- # If from_name is not defined, Create from scratch.
- action = 'create'
- changed = True
-
- if changed and not self.module.check_mode:
- if action == 'create':
- self.create_access_group()
- elif action == 'rename':
- self.rename_access_group()
- elif action == 'update':
- self.update_access_group()
- elif action == 'delete':
- self.delete_access_group()
-
- self.module.exit_json(changed=changed)
-
-
-def main():
- """
- Main function
- """
- na_elementsw_access_group = ElementSWAccessGroup()
- na_elementsw_access_group.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_access_group_volumes.py b/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_access_group_volumes.py
deleted file mode 100644
index af9053a13..000000000
--- a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_access_group_volumes.py
+++ /dev/null
@@ -1,247 +0,0 @@
-#!/usr/bin/python
-
-# (c) 2019, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or
-# https://www.gnu.org/licenses/gpl-3.0.txt)
-
-"""
-Element Software Access Group Volumes
-"""
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'certified'}
-
-
-DOCUMENTATION = '''
-
-module: na_elementsw_access_group_volumes
-
-short_description: NetApp Element Software Add/Remove Volumes to/from Access Group
-extends_documentation_fragment:
- - netapp.elementsw.netapp.solidfire
-version_added: 20.1.0
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-description:
-- Add or remove volumes to/from access group on Element Software Cluster.
-
-options:
-
- state:
- description:
- - Whether the specified volumes should exist or not for this access group.
- choices: ['present', 'absent']
- default: present
- type: str
-
- access_group:
- description:
- - Name or id for the access group to add volumes to, or remove volumes from
- required: true
- type: str
-
- volumes:
- description:
- - List of volumes to add/remove from/to the access group.
- - It accepts either volume_name or volume_id
- required: True
- type: list
- elements: str
-
- account_id:
- description:
- - Account ID for the owner of this volume.
- - It accepts either account_name or account_id
- - if account_id is numeric, look up for account_id first, then look up for account_name
- - If account_id is not numeric, look up for account_name
- required: true
- type: str
-'''
-
-EXAMPLES = """
- - name: Add Volumes to Access Group
- na_elementsw_access_group:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: present
- access_group: AnsibleAccessGroup
- volumes: ['vol7','vol8','vol9']
- account_id: '1'
-
- - name: Remove Volumes from Access Group
- na_elementsw_access_group:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: absent
- access_group: AnsibleAccessGroup
- volumes: ['vol7','vol9']
- account_id: '1'
-"""
-
-
-RETURN = """
-
-msg:
- description: Success message
- returned: success
- type: str
-
-"""
-import traceback
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils._text import to_native
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.elementsw.plugins.module_utils.netapp_elementsw_module import NaElementSWModule
-
-HAS_SF_SDK = netapp_utils.has_sf_sdk()
-try:
- import solidfire.common
-except ImportError:
- HAS_SF_SDK = False
-
-
-class ElementSWAccessGroupVolumes(object):
- """
- Element Software Access Group Volumes
- """
-
- def __init__(self):
-
- self.argument_spec = netapp_utils.ontap_sf_host_argument_spec()
- self.argument_spec.update(dict(
- state=dict(required=False, type='str', choices=['present', 'absent'], default='present'),
- access_group=dict(required=True, type='str'),
- volumes=dict(required=True, type='list', elements='str'),
- account_id=dict(required=True, type='str'),
- ))
-
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- supports_check_mode=True
- )
-
- input_params = self.module.params
-
- # Set up state variables
- self.state = input_params['state']
- self.access_group_name = input_params['access_group']
- self.volumes = input_params['volumes']
- self.account_id = input_params['account_id']
-
- if HAS_SF_SDK is False:
- self.module.fail_json(msg="Unable to import the SolidFire Python SDK")
- else:
- self.sfe = netapp_utils.create_sf_connection(module=self.module)
-
- self.elementsw_helper = NaElementSWModule(self.sfe)
-
- # add telemetry attributes
- self.attributes = self.elementsw_helper.set_element_attributes(source='na_elementsw_access_group')
-
- def get_access_group(self, name):
- """
- Get Access Group
- :description: Get Access Group object for a given name
-
- :return: object (Group object)
- :rtype: object (Group object)
- """
- access_groups_list = self.sfe.list_volume_access_groups()
- group_obj = None
-
- for group in access_groups_list.volume_access_groups:
- # Check and get access_group object for a given name
- if str(group.volume_access_group_id) == name:
- group_obj = group
- elif group.name == name:
- group_obj = group
-
- return group_obj
-
- def get_account_id(self):
- # Validate account id
- # Return account_id if found, None otherwise
- try:
- account_id = self.elementsw_helper.account_exists(self.account_id)
- return account_id
- except solidfire.common.ApiServerError:
- return None
-
- def get_volume_ids(self):
- # Validate volume_ids
- # Return volume ids if found, fail if not found
- volume_ids = []
- for volume in self.volumes:
- volume_id = self.elementsw_helper.volume_exists(volume, self.account_id)
- if volume_id:
- volume_ids.append(volume_id)
- else:
- self.module.fail_json(msg='Error: Specified volume %s does not exist' % volume)
- return volume_ids
-
- def update_access_group(self, volumes):
- """
- Update the Access Group if the access_group already exists
- """
- try:
- self.sfe.modify_volume_access_group(volume_access_group_id=self.group_id,
- volumes=volumes)
- except Exception as e:
- self.module.fail_json(msg="Error updating volume access group %s: %s" %
- (self.access_group_name, to_native(e)), exception=traceback.format_exc())
-
- def apply(self):
- """
- Process the volume add/remove operations for the access group on the Element Software Cluster
- """
- changed = False
- input_account_id = self.account_id
-
- if self.account_id is not None:
- self.account_id = self.get_account_id()
- if self.account_id is None:
- self.module.fail_json(msg='Error: Specified account id "%s" does not exist.' % str(input_account_id))
-
- # get volume data
- self.volume_ids = self.get_volume_ids()
- group_detail = self.get_access_group(self.access_group_name)
- if group_detail is None:
- self.module.fail_json(msg='Error: Specified access group "%s" does not exist for account id: %s.' % (self.access_group_name, str(input_account_id)))
- self.group_id = group_detail.volume_access_group_id
- volumes = group_detail.volumes
-
- # compare expected list of volumes to existing one
- if self.state == "absent":
- # remove volumes if present in access group
- volumes = [vol for vol in group_detail.volumes if vol not in self.volume_ids]
- else:
- # add volumes if not already present
- volumes = [vol for vol in self.volume_ids if vol not in group_detail.volumes]
- volumes.extend(group_detail.volumes)
-
- # update if there is a change
- if len(volumes) != len(group_detail.volumes):
- if not self.module.check_mode:
- self.update_access_group(volumes)
- changed = True
-
- self.module.exit_json(changed=changed)
-
-
-def main():
- """
- Main function
- """
- na_elementsw_access_group_volumes = ElementSWAccessGroupVolumes()
- na_elementsw_access_group_volumes.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_account.py b/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_account.py
deleted file mode 100644
index 862753747..000000000
--- a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_account.py
+++ /dev/null
@@ -1,340 +0,0 @@
-#!/usr/bin/python
-
-# (c) 2018, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-"""
-Element Software Account Manager
-"""
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'certified'}
-
-
-DOCUMENTATION = '''
-
-module: na_elementsw_account
-
-short_description: NetApp Element Software Manage Accounts
-extends_documentation_fragment:
- - netapp.elementsw.netapp.solidfire
-version_added: 2.7.0
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-description:
-- Create, destroy, or update accounts on Element SW
-
-options:
-
- state:
- description:
- - Whether the specified account should exist or not.
- choices: ['present', 'absent']
- default: present
- type: str
-
- element_username:
- description:
- - Unique username for this account. (May be 1 to 64 characters in length).
- required: true
- aliases:
- - account_id
- type: str
-
- from_name:
- description:
- - ID or Name of the account to rename.
- - Required to create an account called 'element_username' by renaming 'from_name'.
- version_added: 2.8.0
- type: str
-
- initiator_secret:
- description:
- - CHAP secret to use for the initiator. Should be 12-16 characters long and impenetrable.
- - The CHAP initiator secrets must be unique and cannot be the same as the target CHAP secret.
- - If not specified, a random secret is created.
- type: str
-
- target_secret:
- description:
- - CHAP secret to use for the target (mutual CHAP authentication).
- - Should be 12-16 characters long and impenetrable.
- - The CHAP target secrets must be unique and cannot be the same as the initiator CHAP secret.
- - If not specified, a random secret is created.
- type: str
-
- attributes:
- description: List of Name/Value pairs in JSON object format.
- type: dict
-
- status:
- description:
- - Status of the account.
- type: str
-
-'''
-
-EXAMPLES = """
-- name: Create Account
- na_elementsw_account:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: present
- element_username: TenantA
-
-- name: Modify Account
- na_elementsw_account:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: present
- status: locked
- element_username: TenantA
-
-- name: Rename Account
- na_elementsw_account:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: present
- element_username: TenantA_Renamed
- from_name: TenantA
-
-- name: Rename and modify Account
- na_elementsw_account:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: present
- status: locked
- element_username: TenantA_Renamed
- from_name: TenantA
-
-- name: Delete Account
- na_elementsw_account:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: absent
- element_username: TenantA_Renamed
-"""
-
-RETURN = """
-
-"""
-import traceback
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils._text import to_native
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.elementsw.plugins.module_utils.netapp_elementsw_module import NaElementSWModule
-
-
-HAS_SF_SDK = netapp_utils.has_sf_sdk()
-
-
-class ElementSWAccount(object):
- """
- Element SW Account
- """
-
- def __init__(self):
- self.argument_spec = netapp_utils.ontap_sf_host_argument_spec()
- self.argument_spec.update(dict(
- state=dict(required=False, type='str', choices=['present', 'absent'], default='present'),
- element_username=dict(required=True, aliases=["account_id"], type='str'),
- from_name=dict(required=False, default=None),
- initiator_secret=dict(required=False, type='str', no_log=True),
- target_secret=dict(required=False, type='str', no_log=True),
- attributes=dict(required=False, type='dict'),
- status=dict(required=False, type='str'),
- ))
-
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- supports_check_mode=True
- )
-
- params = self.module.params
-
- # set up state variables
- self.state = params.get('state')
- self.element_username = params.get('element_username')
- self.from_name = params.get('from_name')
- self.initiator_secret = params.get('initiator_secret')
- self.target_secret = params.get('target_secret')
- self.attributes = params.get('attributes')
- self.status = params.get('status')
-
- if HAS_SF_SDK is False:
- self.module.fail_json(msg="Unable to import the Element SW Python SDK")
- else:
- self.sfe = netapp_utils.create_sf_connection(module=self.module)
-
- self.elementsw_helper = NaElementSWModule(self.sfe)
-
- # add telemetry attributes
- if self.attributes is not None:
- self.attributes.update(self.elementsw_helper.set_element_attributes(source='na_elementsw_account'))
- else:
- self.attributes = self.elementsw_helper.set_element_attributes(source='na_elementsw_account')
-
- def get_account(self, username):
- """
- Get Account
- :description: Get Account object from account id or name
-
- :return: Details about the account. None if not found.
- :rtype: object (Account object)
- """
-
- account_list = self.sfe.list_accounts()
-
- for account in account_list.accounts:
- # Check and get account object for a given name
- if str(account.account_id) == username:
- return account
- elif account.username == username:
- return account
- return None
-
- def create_account(self):
- """
- Create the Account
- """
- try:
- self.sfe.add_account(username=self.element_username,
- initiator_secret=self.initiator_secret,
- target_secret=self.target_secret,
- attributes=self.attributes)
- except Exception as e:
- self.module.fail_json(msg='Error creating account %s: %s' % (self.element_username, to_native(e)),
- exception=traceback.format_exc())
-
- def delete_account(self):
- """
- Delete the Account
- """
- try:
- self.sfe.remove_account(account_id=self.account_id)
-
- except Exception as e:
- self.module.fail_json(msg='Error deleting account %s: %s' % (self.account_id, to_native(e)),
- exception=traceback.format_exc())
-
- def rename_account(self):
- """
- Rename the Account
- """
- try:
- self.sfe.modify_account(account_id=self.account_id,
- username=self.element_username,
- status=self.status,
- initiator_secret=self.initiator_secret,
- target_secret=self.target_secret,
- attributes=self.attributes)
-
- except Exception as e:
- self.module.fail_json(msg='Error renaming account %s: %s' % (self.account_id, to_native(e)),
- exception=traceback.format_exc())
-
- def update_account(self):
- """
- Update the Account if account already exists
- """
- try:
- self.sfe.modify_account(account_id=self.account_id,
- status=self.status,
- initiator_secret=self.initiator_secret,
- target_secret=self.target_secret,
- attributes=self.attributes)
-
- except Exception as e:
- self.module.fail_json(msg='Error updating account %s: %s' % (self.account_id, to_native(e)),
- exception=traceback.format_exc())
-
- def apply(self):
- """
- Process the account operation on the Element OS Cluster
- """
- changed = False
- update_account = False
- account_detail = self.get_account(self.element_username)
-
- if account_detail is None and self.state == 'present':
- changed = True
-
- elif account_detail is not None:
- # If account found
- self.account_id = account_detail.account_id
-
- if self.state == 'absent':
- changed = True
- else:
- # If state - present, check for any parameter of exising account needs modification.
- if account_detail.username is not None and self.element_username is not None and \
- account_detail.username != self.element_username:
- update_account = True
- changed = True
- elif account_detail.status is not None and self.status is not None \
- and account_detail.status != self.status:
- update_account = True
- changed = True
-
- elif account_detail.initiator_secret is not None and self.initiator_secret is not None \
- and account_detail.initiator_secret != self.initiator_secret:
- update_account = True
- changed = True
-
- elif account_detail.target_secret is not None and self.target_secret is not None \
- and account_detail.target_secret != self.target_secret:
- update_account = True
- changed = True
-
- elif account_detail.attributes is not None and self.attributes is not None \
- and account_detail.attributes != self.attributes:
- update_account = True
- changed = True
- if changed:
- if self.module.check_mode:
- # Skipping the changes
- pass
- else:
- if self.state == 'present':
- if update_account:
- self.update_account()
- else:
- if self.from_name is not None:
- # If from_name is defined
- account_exists = self.get_account(self.from_name)
- if account_exists is not None:
- # If resource pointed by from_name exists, rename the account to name
- self.account_id = account_exists.account_id
- self.rename_account()
- else:
- # If resource pointed by from_name does not exists, error out
- self.module.fail_json(msg="Resource does not exist : %s" % self.from_name)
- else:
- # If from_name is not defined, create from scratch.
- self.create_account()
- elif self.state == 'absent':
- self.delete_account()
-
- self.module.exit_json(changed=changed)
-
-
-def main():
- """
- Main function
- """
- na_elementsw_account = ElementSWAccount()
- na_elementsw_account.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_admin_users.py b/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_admin_users.py
deleted file mode 100644
index 7ad46648a..000000000
--- a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_admin_users.py
+++ /dev/null
@@ -1,233 +0,0 @@
-#!/usr/bin/python
-
-# (c) 2017, NetApp, 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
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'certified'}
-
-
-DOCUMENTATION = '''
-
-module: na_elementsw_admin_users
-
-short_description: NetApp Element Software Manage Admin Users
-extends_documentation_fragment:
- - netapp.elementsw.netapp.solidfire
-version_added: 2.7.0
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-description:
-- Create, destroy, or update admin users on SolidFire
-
-options:
-
- state:
- description:
- - Whether the specified account should exist or not.
- choices: ['present', 'absent']
- default: present
- type: str
-
- element_username:
- description:
- - Unique username for this account. (May be 1 to 64 characters in length).
- required: true
- type: str
-
- element_password:
- description:
- - The password for the new admin account. Setting the password attribute will always reset your password, even if the password is the same
- type: str
-
- acceptEula:
- description:
- - Boolean, true for accepting Eula, False Eula
- type: bool
-
- access:
- description:
- - A list of types the admin has access to
- type: list
- elements: str
-'''
-
-EXAMPLES = """
- - name: Add admin user
- na_elementsw_admin_users:
- state: present
- username: "{{ admin_user_name }}"
- password: "{{ admin_password }}"
- hostname: "{{ hostname }}"
- element_username: carchi8py
- element_password: carchi8py
- acceptEula: True
- access: accounts,drives
-
- - name: modify admin user
- na_elementsw_admin_users:
- state: present
- username: "{{ admin_user_name }}"
- password: "{{ admin_password }}"
- hostname: "{{ hostname }}"
- element_username: carchi8py
- element_password: carchi8py12
- acceptEula: True
- access: accounts,drives,nodes
-
- - name: delete admin user
- na_elementsw_admin_users:
- state: absent
- username: "{{ admin_user_name }}"
- password: "{{ admin_password }}"
- hostname: "{{ hostname }}"
- element_username: carchi8py
-"""
-
-RETURN = """
-
-"""
-
-from ansible.module_utils.basic import AnsibleModule
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.elementsw.plugins.module_utils.netapp_elementsw_module import NaElementSWModule
-
-
-HAS_SF_SDK = netapp_utils.has_sf_sdk()
-
-
-class NetAppElementSWAdminUser(object):
- """
- Class to set, modify and delete admin users on ElementSW box
- """
-
- def __init__(self):
- """
- Initialize the NetAppElementSWAdminUser class.
- """
- self.argument_spec = netapp_utils.ontap_sf_host_argument_spec()
- self.argument_spec.update(dict(
- state=dict(required=False, type='str', choices=['present', 'absent'], default='present'),
- element_username=dict(required=True, type='str'),
- element_password=dict(required=False, type='str', no_log=True),
- acceptEula=dict(required=False, type='bool'),
- access=dict(required=False, type='list', elements='str')
- ))
-
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- supports_check_mode=True
- )
-
- param = self.module.params
- # set up state variables
- self.state = param['state']
- self.element_username = param['element_username']
- self.element_password = param['element_password']
- self.acceptEula = param['acceptEula']
- self.access = param['access']
-
- if HAS_SF_SDK is False:
- self.module.fail_json(msg="Unable to import the SolidFire Python SDK")
- else:
- self.sfe = netapp_utils.create_sf_connection(module=self.module)
-
- self.elementsw_helper = NaElementSWModule(self.sfe)
-
- # add telemetry attributes
- self.attributes = self.elementsw_helper.set_element_attributes(source='na_elementsw_admin_users')
-
- def does_admin_user_exist(self):
- """
- Checks to see if an admin user exists or not
- :return: True if the user exist, False if it dose not exist
- """
- admins_list = self.sfe.list_cluster_admins()
- for admin in admins_list.cluster_admins:
- if admin.username == self.element_username:
- return True
- return False
-
- def get_admin_user(self):
- """
- Get the admin user object
- :return: the admin user object
- """
- admins_list = self.sfe.list_cluster_admins()
- for admin in admins_list.cluster_admins:
- if admin.username == self.element_username:
- return admin
- return None
-
- def modify_admin_user(self):
- """
- Modify a admin user. If a password is set the user will be modified as there is no way to
- compare a new password with an existing one
- :return: if a user was modified or not
- """
- changed = False
- admin_user = self.get_admin_user()
- if self.access is not None and len(self.access) > 0:
- for access in self.access:
- if access not in admin_user.access:
- changed = True
- if changed and not self.module.check_mode:
- self.sfe.modify_cluster_admin(cluster_admin_id=admin_user.cluster_admin_id,
- access=self.access,
- password=self.element_password,
- attributes=self.attributes)
-
- return changed
-
- def add_admin_user(self):
- """
- Add's a new admin user to the element cluster
- :return: nothing
- """
- self.sfe.add_cluster_admin(username=self.element_username,
- password=self.element_password,
- access=self.access,
- accept_eula=self.acceptEula,
- attributes=self.attributes)
-
- def delete_admin_user(self):
- """
- Deletes an existing admin user from the element cluster
- :return: nothing
- """
- admin_user = self.get_admin_user()
- self.sfe.remove_cluster_admin(cluster_admin_id=admin_user.cluster_admin_id)
-
- def apply(self):
- """
- determines which method to call to set, delete or modify admin users
- :return:
- """
- changed = False
- if self.state == "present":
- if self.does_admin_user_exist():
- changed = self.modify_admin_user()
- else:
- if not self.module.check_mode:
- self.add_admin_user()
- changed = True
- else:
- if self.does_admin_user_exist():
- if not self.module.check_mode:
- self.delete_admin_user()
- changed = True
-
- self.module.exit_json(changed=changed)
-
-
-def main():
- v = NetAppElementSWAdminUser()
- v.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_backup.py b/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_backup.py
deleted file mode 100644
index e81e7c5ea..000000000
--- a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_backup.py
+++ /dev/null
@@ -1,243 +0,0 @@
-#!/usr/bin/python
-# (c) 2018, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-"""
-Element Software Backup Manager
-"""
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'certified'}
-
-DOCUMENTATION = '''
-
-module: na_elementsw_backup
-
-short_description: NetApp Element Software Create Backups
-extends_documentation_fragment:
- - netapp.elementsw.netapp.solidfire
-version_added: 2.7.0
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-description:
-- Create backup
-
-options:
-
- src_volume_id:
- description:
- - ID of the backup source volume.
- required: true
- aliases:
- - volume_id
- type: str
-
- dest_hostname:
- description:
- - hostname for the backup source cluster
- - will be set equal to hostname if not specified
- required: false
- type: str
-
- dest_username:
- description:
- - username for the backup destination cluster
- - will be set equal to username if not specified
- required: false
- type: str
-
- dest_password:
- description:
- - password for the backup destination cluster
- - will be set equal to password if not specified
- required: false
- type: str
-
- dest_volume_id:
- description:
- - ID of the backup destination volume
- required: true
- type: str
-
- format:
- description:
- - Backup format to use
- choices: ['native','uncompressed']
- required: false
- default: 'native'
- type: str
-
- script:
- description:
- - the backup script to be executed
- required: false
- type: str
-
- script_parameters:
- description:
- - the backup script parameters
- required: false
- type: dict
-
-'''
-
-EXAMPLES = """
-na_elementsw_backup:
- hostname: "{{ source_cluster_hostname }}"
- username: "{{ source_cluster_username }}"
- password: "{{ source_cluster_password }}"
- src_volume_id: 1
- dest_hostname: "{{ destination_cluster_hostname }}"
- dest_username: "{{ destination_cluster_username }}"
- dest_password: "{{ destination_cluster_password }}"
- dest_volume_id: 3
- format: native
-"""
-
-RETURN = """
-
-"""
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils._text import to_native
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.elementsw.plugins.module_utils.netapp_elementsw_module import NaElementSWModule
-import time
-
-HAS_SF_SDK = netapp_utils.has_sf_sdk()
-try:
- import solidfire.common
-except ImportError:
- HAS_SF_SDK = False
-
-
-class ElementSWBackup(object):
- ''' class to handle backup operations '''
-
- def __init__(self):
- """
- Setup Ansible parameters and SolidFire connection
- """
- self.argument_spec = netapp_utils.ontap_sf_host_argument_spec()
-
- self.argument_spec.update(dict(
-
- src_volume_id=dict(aliases=['volume_id'], required=True, type='str'),
- dest_hostname=dict(required=False, type='str'),
- dest_username=dict(required=False, type='str'),
- dest_password=dict(required=False, type='str', no_log=True),
- dest_volume_id=dict(required=True, type='str'),
- format=dict(required=False, choices=['native', 'uncompressed'], default='native'),
- script=dict(required=False, type='str'),
- script_parameters=dict(required=False, type='dict')
-
-
- ))
-
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- required_together=[['script', 'script_parameters']],
- supports_check_mode=True
- )
- if HAS_SF_SDK is False:
- self.module.fail_json(msg="Unable to import the SolidFire Python SDK")
-
- # If destination cluster details are not specified , set the destination to be the same as the source
- if self.module.params["dest_hostname"] is None:
- self.module.params["dest_hostname"] = self.module.params["hostname"]
- if self.module.params["dest_username"] is None:
- self.module.params["dest_username"] = self.module.params["username"]
- if self.module.params["dest_password"] is None:
- self.module.params["dest_password"] = self.module.params["password"]
-
- params = self.module.params
-
- # establish a connection to both source and destination elementsw clusters
- self.src_connection = netapp_utils.create_sf_connection(self.module)
- self.module.params["username"] = params["dest_username"]
- self.module.params["password"] = params["dest_password"]
- self.module.params["hostname"] = params["dest_hostname"]
- self.dest_connection = netapp_utils.create_sf_connection(self.module)
-
- self.elementsw_helper = NaElementSWModule(self.src_connection)
-
- # add telemetry attributes
- self.attributes = self.elementsw_helper.set_element_attributes(source='na_elementsw_backup')
-
- def apply(self):
- """
- Apply backup creation logic
- """
- self.create_backup()
- self.module.exit_json(changed=True)
-
- def create_backup(self):
- """
- Create backup
- """
-
- # Start volume write on destination cluster
-
- try:
- write_obj = self.dest_connection.start_bulk_volume_write(volume_id=self.module.params["dest_volume_id"],
- format=self.module.params["format"],
- attributes=self.attributes)
- write_key = write_obj.key
- except solidfire.common.ApiServerError as err:
- self.module.fail_json(msg="Error starting bulk write on destination cluster", exception=to_native(err))
-
- # Set script parameters if not passed by user
- # These parameters are equivalent to the options used when a backup is executed via the GUI
-
- if self.module.params["script"] is None and self.module.params["script_parameters"] is None:
-
- self.module.params["script"] = 'bv_internal.py'
- self.module.params["script_parameters"] = {"write": {
- "mvip": self.module.params["dest_hostname"],
- "username": self.module.params["dest_username"],
- "password": self.module.params["dest_password"],
- "key": write_key,
- "endpoint": "solidfire",
- "format": self.module.params["format"]},
- "range": {"lba": 0, "blocks": 244224}}
-
- # Start volume read on source cluster
-
- try:
- read_obj = self.src_connection.start_bulk_volume_read(self.module.params["src_volume_id"],
- self.module.params["format"],
- script=self.module.params["script"],
- script_parameters=self.module.params["script_parameters"],
- attributes=self.attributes)
- except solidfire.common.ApiServerError as err:
- self.module.fail_json(msg="Error starting bulk read on source cluster", exception=to_native(err))
-
- # Poll job status until it has completed
- # SF will automatically timeout if the job is not successful after certain amount of time
-
- completed = False
- while completed is not True:
- # Sleep between polling iterations to reduce api load
- time.sleep(2)
- try:
- result = self.src_connection.get_async_result(read_obj.async_handle, True)
- except solidfire.common.ApiServerError as err:
- self.module.fail_json(msg="Unable to check backup job status", exception=to_native(err))
-
- if result["status"] != 'running':
- completed = True
- if 'error' in result:
- self.module.fail_json(msg=result['error']['message'])
-
-
-def main():
- """ Run backup operation"""
- vol_obj = ElementSWBackup()
- vol_obj.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_check_connections.py b/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_check_connections.py
deleted file mode 100644
index 2f288dc3a..000000000
--- a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_check_connections.py
+++ /dev/null
@@ -1,154 +0,0 @@
-#!/usr/bin/python
-
-# (c) 2018, NetApp, 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
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'certified'}
-
-
-DOCUMENTATION = '''
-
-module: na_elementsw_check_connections
-
-short_description: NetApp Element Software Check connectivity to MVIP and SVIP.
-extends_documentation_fragment:
- - netapp.elementsw.netapp.solidfire
-version_added: 2.7.0
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-description:
-- Used to test the management connection to the cluster.
-- The test pings the MVIP and SVIP, and executes a simple API method to verify connectivity.
-
-options:
-
- skip:
- description:
- - Skip checking connection to SVIP or MVIP.
- choices: ['svip', 'mvip']
- type: str
-
- mvip:
- description:
- - Optionally, use to test connection of a different MVIP.
- - This is not needed to test the connection to the target cluster.
- type: str
-
- svip:
- description:
- - Optionally, use to test connection of a different SVIP.
- - This is not needed to test the connection to the target cluster.
- type: str
-
-'''
-
-
-EXAMPLES = """
- - name: Check connections to MVIP and SVIP
- na_elementsw_check_connections:
- hostname: "{{ solidfire_hostname }}"
- username: "{{ solidfire_username }}"
- password: "{{ solidfire_password }}"
-"""
-
-RETURN = """
-
-"""
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils._text import to_native
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.elementsw.plugins.module_utils.netapp_module import NetAppModule
-
-
-HAS_SF_SDK = netapp_utils.has_sf_sdk()
-
-
-class NaElementSWConnection(object):
-
- def __init__(self):
- self.argument_spec = netapp_utils.ontap_sf_host_argument_spec()
- self.argument_spec.update(dict(
- skip=dict(required=False, type='str', default=None, choices=['mvip', 'svip']),
- mvip=dict(required=False, type='str', default=None),
- svip=dict(required=False, type='str', default=None)
- ))
-
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- required_if=[
- ('skip', 'svip', ['mvip']),
- ('skip', 'mvip', ['svip'])
- ],
- supports_check_mode=True
- )
-
- self.na_helper = NetAppModule()
- self.parameters = self.module.params.copy()
- self.msg = ""
-
- if HAS_SF_SDK is False:
- self.module.fail_json(msg="Unable to import the ElementSW Python SDK")
- else:
- self.elem = netapp_utils.create_sf_connection(self.module, port=442)
-
- def check_mvip_connection(self):
- """
- Check connection to MVIP
-
- :return: true if connection was successful, false otherwise.
- :rtype: bool
- """
- try:
- test = self.elem.test_connect_mvip(mvip=self.parameters['mvip'])
- # Todo - Log details about the test
- return test.details.connected
-
- except Exception as e:
- self.msg += 'Error checking connection to MVIP: %s' % to_native(e)
- return False
-
- def check_svip_connection(self):
- """
- Check connection to SVIP
-
- :return: true if connection was successful, false otherwise.
- :rtype: bool
- """
- try:
- test = self.elem.test_connect_svip(svip=self.parameters['svip'])
- # Todo - Log details about the test
- return test.details.connected
- except Exception as e:
- self.msg += 'Error checking connection to SVIP: %s' % to_native(e)
- return False
-
- def apply(self):
- passed = False
- if self.parameters.get('skip') is None:
- # Set failed and msg
- passed = self.check_mvip_connection()
- # check if both connections have passed
- passed &= self.check_svip_connection()
- elif self.parameters['skip'] == 'mvip':
- passed |= self.check_svip_connection()
- elif self.parameters['skip'] == 'svip':
- passed |= self.check_mvip_connection()
- if not passed:
- self.module.fail_json(msg=self.msg)
- else:
- self.module.exit_json()
-
-
-def main():
- connect_obj = NaElementSWConnection()
- connect_obj.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_cluster.py b/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_cluster.py
deleted file mode 100644
index ede60cae3..000000000
--- a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_cluster.py
+++ /dev/null
@@ -1,372 +0,0 @@
-#!/usr/bin/python
-# (c) 2018, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or
-# https://www.gnu.org/licenses/gpl-3.0.txt)
-
-'''
-Element Software Initialize Cluster
-'''
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'certified'}
-
-
-DOCUMENTATION = '''
-
-module: na_elementsw_cluster
-
-short_description: NetApp Element Software Create Cluster
-extends_documentation_fragment:
- - netapp.elementsw.netapp.solidfire
-version_added: 2.7.0
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-description:
- - Initialize Element Software node ownership to form a cluster.
- - If the cluster does not exist, username/password are still required but ignored for initial creation.
- - username/password are used as the node credentials to see if the cluster already exists.
- - username/password can also be used to set the cluster credentials.
- - If the cluster already exists, no error is returned, but changed is set to false.
- - Cluster modifications are not supported and are ignored.
-
-options:
- management_virtual_ip:
- description:
- - Floating (virtual) IP address for the cluster on the management network.
- required: true
- type: str
-
- storage_virtual_ip:
- description:
- - Floating (virtual) IP address for the cluster on the storage (iSCSI) network.
- required: true
- type: str
-
- replica_count:
- description:
- - Number of replicas of each piece of data to store in the cluster.
- default: 2
- type: int
-
- cluster_admin_username:
- description:
- - Username for the cluster admin.
- - If not provided, default to username.
- type: str
-
- cluster_admin_password:
- description:
- - Initial password for the cluster admin account.
- - If not provided, default to password.
- type: str
-
- accept_eula:
- description:
- - Required to indicate your acceptance of the End User License Agreement when creating this cluster.
- - To accept the EULA, set this parameter to true.
- type: bool
-
- nodes:
- description:
- - Storage IP (SIP) addresses of the initial set of nodes making up the cluster.
- - nodes IP must be in the list.
- required: true
- type: list
- elements: str
-
- attributes:
- description:
- - List of name-value pairs in JSON object format.
- type: dict
-
- timeout:
- description:
- - Time to wait for cluster creation to complete.
- default: 100
- type: int
- version_added: 20.8.0
-
- fail_if_cluster_already_exists_with_larger_ensemble:
- description:
- - If the cluster exists, the default is to verify that I(nodes) is a superset of the existing ensemble.
- - A superset is accepted because some nodes may have a different role.
- - But the module reports an error if the existing ensemble contains a node not listed in I(nodes).
- - This checker is disabled when this option is set to false.
- default: true
- type: bool
- version_added: 20.8.0
-
- encryption:
- description: to enable or disable encryption at rest
- type: bool
- version_added: 20.10.0
-
- order_number:
- description: (experimental) order number as provided by NetApp
- type: str
- version_added: 20.10.0
-
- serial_number:
- description: (experimental) serial number as provided by NetApp
- type: str
- version_added: 20.10.0
-'''
-
-EXAMPLES = """
-
- - name: Initialize new cluster
- tags:
- - elementsw_cluster
- na_elementsw_cluster:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- management_virtual_ip: 10.226.108.32
- storage_virtual_ip: 10.226.109.68
- replica_count: 2
- accept_eula: true
- nodes:
- - 10.226.109.72
- - 10.226.109.74
-"""
-
-RETURN = """
-
-msg:
- description: Success message
- returned: success
- type: str
-
-"""
-import traceback
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils._text import to_native
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.elementsw.plugins.module_utils.netapp_elementsw_module import NaElementSWModule
-
-HAS_SF_SDK = netapp_utils.has_sf_sdk()
-
-
-class ElementSWCluster(object):
- """
- Element Software Initialize node with ownership for cluster formation
- """
-
- def __init__(self):
- self.argument_spec = netapp_utils.ontap_sf_host_argument_spec()
- self.argument_spec.update(dict(
- management_virtual_ip=dict(required=True, type='str'),
- storage_virtual_ip=dict(required=True, type='str'),
- replica_count=dict(required=False, type='int', default=2),
- cluster_admin_username=dict(required=False, type='str'),
- cluster_admin_password=dict(required=False, type='str', no_log=True),
- accept_eula=dict(required=False, type='bool'),
- nodes=dict(required=True, type='list', elements='str'),
- attributes=dict(required=False, type='dict', default=None),
- timeout=dict(required=False, type='int', default=100),
- fail_if_cluster_already_exists_with_larger_ensemble=dict(required=False, type='bool', default=True),
- encryption=dict(required=False, type='bool'),
- order_number=dict(required=False, type='str'),
- serial_number=dict(required=False, type='str'),
- ))
-
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- supports_check_mode=True
- )
-
- input_params = self.module.params
-
- self.management_virtual_ip = input_params['management_virtual_ip']
- self.storage_virtual_ip = input_params['storage_virtual_ip']
- self.replica_count = input_params['replica_count']
- self.accept_eula = input_params.get('accept_eula')
- self.attributes = input_params.get('attributes')
- self.nodes = input_params['nodes']
- self.cluster_admin_username = input_params['username'] if input_params.get('cluster_admin_username') is None else input_params['cluster_admin_username']
- self.cluster_admin_password = input_params['password'] if input_params.get('cluster_admin_password') is None else input_params['cluster_admin_password']
- self.fail_if_cluster_already_exists_with_larger_ensemble = input_params['fail_if_cluster_already_exists_with_larger_ensemble']
- self.encryption = input_params['encryption']
- self.order_number = input_params['order_number']
- self.serial_number = input_params['serial_number']
- self.debug = list()
-
- if HAS_SF_SDK is False:
- self.module.fail_json(msg="Unable to import the SolidFire Python SDK")
-
- # 442 for node APIs, 443 (default) for cluster APIs
- for role, port in [('node', 442), ('cluster', 443)]:
- try:
- # even though username/password should be optional, create_sf_connection fails if not set
- conn = netapp_utils.create_sf_connection(module=self.module, raise_on_connection_error=True, port=port, timeout=input_params['timeout'])
- if role == 'node':
- self.sfe_node = conn
- else:
- self.sfe_cluster = conn
- except netapp_utils.solidfire.common.ApiConnectionError as exc:
- if str(exc) == "Bad Credentials":
- msg = 'Most likely the cluster is already created.'
- msg += ' Make sure to use valid %s credentials for username and password.' % 'node' if port == 442 else 'cluster'
- msg += ' Even though credentials are not required for the first create, they are needed to check whether the cluster already exists.'
- msg += ' Cluster reported: %s' % repr(exc)
- else:
- msg = 'Failed to create connection: %s' % repr(exc)
- self.module.fail_json(msg=msg)
- except Exception as exc:
- self.module.fail_json(msg='Failed to connect: %s' % repr(exc))
-
- self.elementsw_helper = NaElementSWModule(self.sfe_cluster)
-
- # add telemetry attributes
- if self.attributes is not None:
- self.attributes.update(self.elementsw_helper.set_element_attributes(source='na_elementsw_cluster'))
- else:
- self.attributes = self.elementsw_helper.set_element_attributes(source='na_elementsw_cluster')
-
- def get_node_cluster_info(self):
- """
- Get Cluster Info - using node API
- """
- try:
- info = self.sfe_node.get_config()
- self.debug.append(repr(info.config.cluster))
- return info.config.cluster
- except Exception as exc:
- self.debug.append("port: %s, %s" % (str(self.sfe_node._port), repr(exc)))
- return None
-
- def check_cluster_exists(self):
- """
- validate if cluster exists with list of nodes
- error out if something is found but with different nodes
- return a tuple (found, info)
- found is True if found, False if not found
- """
- info = self.get_node_cluster_info()
- if info is None:
- return False
- ensemble = getattr(info, 'ensemble', None)
- if not ensemble:
- return False
- # format is 'id:IP'
- nodes = [x.split(':', 1)[1] for x in ensemble]
- current_ensemble_nodes = set(nodes) if ensemble else set()
- requested_nodes = set(self.nodes) if self.nodes else set()
- extra_ensemble_nodes = current_ensemble_nodes - requested_nodes
- # TODO: the cluster may have more nodes than what is reported in ensemble:
- # nodes_not_in_ensemble = requested_nodes - current_ensemble_nodes
- # So it's OK to find some missing nodes, but not very deterministic.
- # eg some kind of backup nodes could be in nodes_not_in_ensemble.
- if extra_ensemble_nodes and self.fail_if_cluster_already_exists_with_larger_ensemble:
- msg = 'Error: found existing cluster with more nodes in ensemble. Cluster: %s, extra nodes: %s' %\
- (getattr(info, 'cluster', 'not found'), extra_ensemble_nodes)
- msg += '. Cluster info: %s' % repr(info)
- self.module.fail_json(msg=msg)
- if extra_ensemble_nodes:
- self.debug.append("Extra ensemble nodes: %s" % extra_ensemble_nodes)
- nodes_not_in_ensemble = requested_nodes - current_ensemble_nodes
- if nodes_not_in_ensemble:
- self.debug.append("Extra requested nodes not in ensemble: %s" % nodes_not_in_ensemble)
- return True
-
- def create_cluster_api(self, options):
- ''' Call send_request directly rather than using the SDK if new fields are present
- The new SDK will support these in version 1.17 (Nov or Feb)
- '''
- extra_options = ['enableSoftwareEncryptionAtRest', 'orderNumber', 'serialNumber']
- if not any((item in options for item in extra_options)):
- # use SDK
- return self.sfe_cluster.create_cluster(**options)
-
- # call directly the API as the SDK is not updated yet
- params = {
- "mvip": options['mvip'],
- "svip": options['svip'],
- "repCount": options['rep_count'],
- "username": options['username'],
- "password": options['password'],
- "nodes": options['nodes'],
- }
- if options['accept_eula'] is not None:
- params["acceptEula"] = options['accept_eula']
- if options['attributes'] is not None:
- params["attributes"] = options['attributes']
- for option in extra_options:
- if options.get(option):
- params[option] = options[option]
-
- # There is no adaptor.
- return self.sfe_cluster.send_request(
- 'CreateCluster',
- netapp_utils.solidfire.CreateClusterResult,
- params,
- since=None
- )
-
- def create_cluster(self):
- """
- Create Cluster
- """
- options = {
- 'mvip': self.management_virtual_ip,
- 'svip': self.storage_virtual_ip,
- 'rep_count': self.replica_count,
- 'accept_eula': self.accept_eula,
- 'nodes': self.nodes,
- 'attributes': self.attributes,
- 'username': self.cluster_admin_username,
- 'password': self.cluster_admin_password
- }
- if self.encryption is not None:
- options['enableSoftwareEncryptionAtRest'] = self.encryption
- if self.order_number is not None:
- options['orderNumber'] = self.order_number
- if self.serial_number is not None:
- options['serialNumber'] = self.serial_number
-
- return_msg = 'created'
- try:
- # does not work as node even though documentation says otherwise
- # running as node, this error is reported: 500 xUnknownAPIMethod method=CreateCluster
- self.create_cluster_api(options)
- except netapp_utils.solidfire.common.ApiServerError as exc:
- # not sure how this can happen, but the cluster may already exists
- if 'xClusterAlreadyCreated' not in str(exc.message):
- self.module.fail_json(msg='Error creating cluster %s' % to_native(exc), exception=traceback.format_exc())
- return_msg = 'already_exists: %s' % str(exc.message)
- except Exception as exc:
- self.module.fail_json(msg='Error creating cluster %s' % to_native(exc), exception=traceback.format_exc())
- return return_msg
-
- def apply(self):
- """
- Check connection and initialize node with cluster ownership
- """
- changed = False
- result_message = None
- exists = self.check_cluster_exists()
- if exists:
- result_message = "cluster already exists"
- else:
- changed = True
- if not self.module.check_mode:
- result_message = self.create_cluster()
- if result_message.startswith('already_exists:'):
- changed = False
- self.module.exit_json(changed=changed, msg=result_message, debug=self.debug)
-
-
-def main():
- """
- Main function
- """
- na_elementsw_cluster = ElementSWCluster()
- na_elementsw_cluster.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_cluster_config.py b/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_cluster_config.py
deleted file mode 100644
index 94b5c17dc..000000000
--- a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_cluster_config.py
+++ /dev/null
@@ -1,331 +0,0 @@
-#!/usr/bin/python
-# (c) 2018, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or
-# https://www.gnu.org/licenses/gpl-3.0.txt)
-
-'''
-Element Software Configure cluster
-'''
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'community'}
-
-
-DOCUMENTATION = '''
-
-module: na_elementsw_cluster_config
-
-short_description: Configure Element SW Cluster
-extends_documentation_fragment:
- - netapp.elementsw.netapp.solidfire
-version_added: 2.8.0
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-description:
-- Configure Element Software cluster.
-
-options:
- modify_cluster_full_threshold:
- description:
- - The capacity level at which the cluster generates an event
- - Requires a stage3_block_threshold_percent or
- - max_metadata_over_provision_factor or
- - stage2_aware_threshold
- suboptions:
- stage3_block_threshold_percent:
- description:
- - The percentage below the "Error" threshold that triggers a cluster "Warning" alert
- type: int
- max_metadata_over_provision_factor:
- description:
- - The number of times metadata space can be overprovisioned relative to the amount of space available
- type: int
- stage2_aware_threshold:
- description:
- - The number of nodes of capacity remaining in the cluster before the system triggers a notification
- type: int
- type: dict
-
- encryption_at_rest:
- description:
- - enable or disable the Advanced Encryption Standard (AES) 256-bit encryption at rest on the cluster
- choices: ['present', 'absent']
- type: str
-
- set_ntp_info:
- description:
- - configure NTP on cluster node
- - Requires a list of one or more ntp_servers
- suboptions:
- ntp_servers:
- description:
- - list of NTP servers to add to each nodes NTP configuration
- type: list
- elements: str
- broadcastclient:
- type: bool
- default: False
- description:
- - Enables every node in the cluster as a broadcast client
- type: dict
-
- enable_virtual_volumes:
- type: bool
- default: True
- description:
- - Enable the NetApp SolidFire VVols cluster feature
-'''
-
-EXAMPLES = """
-
- - name: Configure cluster
- tags:
- - elementsw_cluster_config
- na_elementsw_cluster_config:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- modify_cluster_full_threshold:
- stage2_aware_threshold: 2
- stage3_block_threshold_percent: 10
- max_metadata_over_provision_factor: 2
- encryption_at_rest: absent
- set_ntp_info:
- broadcastclient: False
- ntp_servers:
- - 1.1.1.1
- - 2.2.2.2
- enable_virtual_volumes: True
-"""
-
-RETURN = """
-
-msg:
- description: Success message
- returned: success
- type: str
-
-"""
-import traceback
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils._text import to_native
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.elementsw.plugins.module_utils.netapp_module import NetAppModule
-
-HAS_SF_SDK = netapp_utils.has_sf_sdk()
-
-
-class ElementSWClusterConfig(object):
- """
- Element Software Configure Element SW Cluster
- """
- def __init__(self):
- self.argument_spec = netapp_utils.ontap_sf_host_argument_spec()
-
- self.argument_spec.update(dict(
- modify_cluster_full_threshold=dict(
- type='dict',
- options=dict(
- stage2_aware_threshold=dict(type='int', default=None),
- stage3_block_threshold_percent=dict(type='int', default=None),
- max_metadata_over_provision_factor=dict(type='int', default=None)
- )
- ),
- encryption_at_rest=dict(type='str', choices=['present', 'absent']),
- set_ntp_info=dict(
- type='dict',
- options=dict(
- broadcastclient=dict(type='bool', default=False),
- ntp_servers=dict(type='list', elements='str')
- )
- ),
- enable_virtual_volumes=dict(type='bool', default=True)
- ))
-
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- supports_check_mode=True
- )
-
- self.na_helper = NetAppModule()
- self.parameters = self.na_helper.set_parameters(self.module.params)
-
- if HAS_SF_SDK is False:
- self.module.fail_json(msg="Unable to import the SolidFire Python SDK")
- else:
- self.sfe = netapp_utils.create_sf_connection(module=self.module)
-
- def get_ntp_details(self):
- """
- get ntp info
- """
- # Get ntp details
- ntp_details = self.sfe.get_ntp_info()
- return ntp_details
-
- def cmp(self, provided_ntp_servers, existing_ntp_servers):
- # As python3 doesn't have default cmp function, defining manually to provide same fuctionality.
- return (provided_ntp_servers > existing_ntp_servers) - (provided_ntp_servers < existing_ntp_servers)
-
- def get_cluster_details(self):
- """
- get cluster info
- """
- cluster_details = self.sfe.get_cluster_info()
- return cluster_details
-
- def get_vvols_status(self):
- """
- get vvols status
- """
- feature_status = self.sfe.get_feature_status(feature='vvols')
- if feature_status is not None:
- return feature_status.features[0].enabled
- return None
-
- def get_cluster_full_threshold_status(self):
- """
- get cluster full threshold
- """
- cluster_full_threshold_status = self.sfe.get_cluster_full_threshold()
- return cluster_full_threshold_status
-
- def setup_ntp_info(self, servers, broadcastclient=None):
- """
- configure ntp
- """
- # Set ntp servers
- try:
- self.sfe.set_ntp_info(servers, broadcastclient)
- except Exception as exception_object:
- self.module.fail_json(msg='Error configuring ntp %s' % (to_native(exception_object)),
- exception=traceback.format_exc())
-
- def set_encryption_at_rest(self, state=None):
- """
- enable/disable encryption at rest
- """
- try:
- if state == 'present':
- encryption_state = 'enable'
- self.sfe.enable_encryption_at_rest()
- elif state == 'absent':
- encryption_state = 'disable'
- self.sfe.disable_encryption_at_rest()
- except Exception as exception_object:
- self.module.fail_json(msg='Failed to %s rest encryption %s' % (encryption_state,
- to_native(exception_object)),
- exception=traceback.format_exc())
-
- def enable_feature(self, feature):
- """
- enable feature
- """
- try:
- self.sfe.enable_feature(feature=feature)
- except Exception as exception_object:
- self.module.fail_json(msg='Error enabling %s %s' % (feature, to_native(exception_object)),
- exception=traceback.format_exc())
-
- def set_cluster_full_threshold(self, stage2_aware_threshold=None,
- stage3_block_threshold_percent=None,
- max_metadata_over_provision_factor=None):
- """
- modify cluster full threshold
- """
- try:
- self.sfe.modify_cluster_full_threshold(stage2_aware_threshold=stage2_aware_threshold,
- stage3_block_threshold_percent=stage3_block_threshold_percent,
- max_metadata_over_provision_factor=max_metadata_over_provision_factor)
- except Exception as exception_object:
- self.module.fail_json(msg='Failed to modify cluster full threshold %s' % (to_native(exception_object)),
- exception=traceback.format_exc())
-
- def apply(self):
- """
- Cluster configuration
- """
- changed = False
- result_message = None
-
- if self.parameters.get('modify_cluster_full_threshold') is not None:
- # get cluster full threshold
- cluster_full_threshold_details = self.get_cluster_full_threshold_status()
- # maxMetadataOverProvisionFactor
- current_mmopf = cluster_full_threshold_details.max_metadata_over_provision_factor
- # stage3BlockThresholdPercent
- current_s3btp = cluster_full_threshold_details.stage3_block_threshold_percent
- # stage2AwareThreshold
- current_s2at = cluster_full_threshold_details.stage2_aware_threshold
-
- # is cluster full threshold state change required?
- if self.parameters.get("modify_cluster_full_threshold")['max_metadata_over_provision_factor'] is not None and \
- current_mmopf != self.parameters['modify_cluster_full_threshold']['max_metadata_over_provision_factor'] or \
- self.parameters.get("modify_cluster_full_threshold")['stage3_block_threshold_percent'] is not None and \
- current_s3btp != self.parameters['modify_cluster_full_threshold']['stage3_block_threshold_percent'] or \
- self.parameters.get("modify_cluster_full_threshold")['stage2_aware_threshold'] is not None and \
- current_s2at != self.parameters['modify_cluster_full_threshold']['stage2_aware_threshold']:
- changed = True
- self.set_cluster_full_threshold(self.parameters['modify_cluster_full_threshold']['stage2_aware_threshold'],
- self.parameters['modify_cluster_full_threshold']['stage3_block_threshold_percent'],
- self.parameters['modify_cluster_full_threshold']['max_metadata_over_provision_factor'])
-
- if self.parameters.get('encryption_at_rest') is not None:
- # get all cluster info
- cluster_info = self.get_cluster_details()
- # register rest state
- current_encryption_at_rest_state = cluster_info.cluster_info.encryption_at_rest_state
-
- # is encryption state change required?
- if current_encryption_at_rest_state == 'disabled' and self.parameters['encryption_at_rest'] == 'present' or \
- current_encryption_at_rest_state == 'enabled' and self.parameters['encryption_at_rest'] == 'absent':
- changed = True
- self.set_encryption_at_rest(self.parameters['encryption_at_rest'])
-
- if self.parameters.get('set_ntp_info') is not None:
- # get all ntp details
- ntp_details = self.get_ntp_details()
- # register list of ntp servers
- ntp_servers = ntp_details.servers
- # broadcastclient
- broadcast_client = ntp_details.broadcastclient
-
- # has either the broadcastclient or the ntp server list changed?
-
- if self.parameters.get('set_ntp_info')['broadcastclient'] != broadcast_client or \
- self.cmp(self.parameters.get('set_ntp_info')['ntp_servers'], ntp_servers) != 0:
- changed = True
- self.setup_ntp_info(self.parameters.get('set_ntp_info')['ntp_servers'],
- self.parameters.get('set_ntp_info')['broadcastclient'])
-
- if self.parameters.get('enable_virtual_volumes') is not None:
- # check vvols status
- current_vvols_status = self.get_vvols_status()
-
- # has the vvols state changed?
- if current_vvols_status is False and self.parameters.get('enable_virtual_volumes') is True:
- changed = True
- self.enable_feature('vvols')
- elif current_vvols_status is True and self.parameters.get('enable_virtual_volumes') is not True:
- # vvols, once enabled, cannot be disabled
- self.module.fail_json(msg='Error disabling vvols: this feature cannot be undone')
-
- if self.module.check_mode is True:
- result_message = "Check mode, skipping changes"
- self.module.exit_json(changed=changed, msg=result_message)
-
-
-def main():
- """
- Main function
- """
- na_elementsw_cluster_config = ElementSWClusterConfig()
- na_elementsw_cluster_config.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_cluster_pair.py b/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_cluster_pair.py
deleted file mode 100644
index af064e214..000000000
--- a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_cluster_pair.py
+++ /dev/null
@@ -1,206 +0,0 @@
-#!/usr/bin/python
-# (c) 2018, NetApp, 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
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'certified'}
-
-
-DOCUMENTATION = '''
-
-module: na_elementsw_cluster_pair
-
-short_description: NetApp Element Software Manage Cluster Pair
-extends_documentation_fragment:
- - netapp.elementsw.netapp.solidfire
-version_added: 2.7.0
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-description:
-- Create, delete cluster pair
-
-options:
-
- state:
- description:
- - Whether the specified cluster pair should exist or not.
- choices: ['present', 'absent']
- default: present
- type: str
-
- dest_mvip:
- description:
- - Destination IP address of the cluster to be paired.
- required: true
- type: str
-
- dest_username:
- description:
- - Destination username for the cluster to be paired.
- - Optional if this is same as source cluster username.
- type: str
-
- dest_password:
- description:
- - Destination password for the cluster to be paired.
- - Optional if this is same as source cluster password.
- type: str
-
-'''
-
-EXAMPLES = """
- - name: Create cluster pair
- na_elementsw_cluster_pair:
- hostname: "{{ src_hostname }}"
- username: "{{ src_username }}"
- password: "{{ src_password }}"
- state: present
- dest_mvip: "{{ dest_hostname }}"
-
- - name: Delete cluster pair
- na_elementsw_cluster_pair:
- hostname: "{{ src_hostname }}"
- username: "{{ src_username }}"
- password: "{{ src_password }}"
- state: absent
- dest_mvip: "{{ dest_hostname }}"
- dest_username: "{{ dest_username }}"
- dest_password: "{{ dest_password }}"
-
-"""
-
-RETURN = """
-
-"""
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils._text import to_native
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.elementsw.plugins.module_utils.netapp_elementsw_module import NaElementSWModule
-from ansible_collections.netapp.elementsw.plugins.module_utils.netapp_module import NetAppModule
-
-HAS_SF_SDK = netapp_utils.has_sf_sdk()
-try:
- import solidfire.common
-except ImportError:
- HAS_SF_SDK = False
-
-
-class ElementSWClusterPair(object):
- """ class to handle cluster pairing operations """
-
- def __init__(self):
- """
- Setup Ansible parameters and ElementSW connection
- """
- self.argument_spec = netapp_utils.ontap_sf_host_argument_spec()
- self.argument_spec.update(dict(
- state=dict(required=False, choices=['present', 'absent'],
- default='present'),
- dest_mvip=dict(required=True, type='str'),
- dest_username=dict(required=False, type='str'),
- dest_password=dict(required=False, type='str', no_log=True)
- ))
-
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- supports_check_mode=True
- )
-
- if HAS_SF_SDK is False:
- self.module.fail_json(msg="Unable to import the SolidFire Python SDK")
- else:
- self.elem = netapp_utils.create_sf_connection(module=self.module)
-
- self.elementsw_helper = NaElementSWModule(self.elem)
- self.na_helper = NetAppModule()
- self.parameters = self.na_helper.set_parameters(self.module.params)
- # get element_sw_connection for destination cluster
- # overwrite existing source host, user and password with destination credentials
- self.module.params['hostname'] = self.parameters['dest_mvip']
- # username and password is same as source,
- # if dest_username and dest_password aren't specified
- if self.parameters.get('dest_username'):
- self.module.params['username'] = self.parameters['dest_username']
- if self.parameters.get('dest_password'):
- self.module.params['password'] = self.parameters['dest_password']
- self.dest_elem = netapp_utils.create_sf_connection(module=self.module)
- self.dest_elementsw_helper = NaElementSWModule(self.dest_elem)
-
- def check_if_already_paired(self, paired_clusters, hostname):
- for pair in paired_clusters.cluster_pairs:
- if pair.mvip == hostname:
- return pair.cluster_pair_id
- return None
-
- def get_src_pair_id(self):
- """
- Check for idempotency
- """
- # src cluster and dest cluster exist
- paired_clusters = self.elem.list_cluster_pairs()
- return self.check_if_already_paired(paired_clusters, self.parameters['dest_mvip'])
-
- def get_dest_pair_id(self):
- """
- Getting destination cluster_pair_id
- """
- paired_clusters = self.dest_elem.list_cluster_pairs()
- return self.check_if_already_paired(paired_clusters, self.parameters['hostname'])
-
- def pair_clusters(self):
- """
- Start cluster pairing on source, and complete on target cluster
- """
- try:
- pair_key = self.elem.start_cluster_pairing()
- self.dest_elem.complete_cluster_pairing(
- cluster_pairing_key=pair_key.cluster_pairing_key)
- except solidfire.common.ApiServerError as err:
- self.module.fail_json(msg="Error pairing cluster %s and %s"
- % (self.parameters['hostname'],
- self.parameters['dest_mvip']),
- exception=to_native(err))
-
- def unpair_clusters(self, pair_id_source, pair_id_dest):
- """
- Delete cluster pair
- """
- try:
- self.elem.remove_cluster_pair(cluster_pair_id=pair_id_source)
- self.dest_elem.remove_cluster_pair(cluster_pair_id=pair_id_dest)
- except solidfire.common.ApiServerError as err:
- self.module.fail_json(msg="Error unpairing cluster %s and %s"
- % (self.parameters['hostname'],
- self.parameters['dest_mvip']),
- exception=to_native(err))
-
- def apply(self):
- """
- Call create / delete cluster pair methods
- """
- pair_id_source = self.get_src_pair_id()
- # If already paired, find the cluster_pair_id of destination cluster
- if pair_id_source:
- pair_id_dest = self.get_dest_pair_id()
- # calling helper to determine action
- cd_action = self.na_helper.get_cd_action(pair_id_source, self.parameters)
- if cd_action == "create":
- self.pair_clusters()
- elif cd_action == "delete":
- self.unpair_clusters(pair_id_source, pair_id_dest)
- self.module.exit_json(changed=self.na_helper.changed)
-
-
-def main():
- """ Apply cluster pair actions """
- cluster_obj = ElementSWClusterPair()
- cluster_obj.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_cluster_snmp.py b/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_cluster_snmp.py
deleted file mode 100644
index 847700197..000000000
--- a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_cluster_snmp.py
+++ /dev/null
@@ -1,365 +0,0 @@
-#!/usr/bin/python
-# (c) 2019, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or
-# https://www.gnu.org/licenses/gpl-3.0.txt)
-
-'''
-Element Software Configure SNMP
-'''
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'community'}
-
-
-DOCUMENTATION = '''
-
-module: na_elementsw_cluster_snmp
-
-short_description: Configure Element SW Cluster SNMP
-extends_documentation_fragment:
- - netapp.elementsw.netapp.solidfire
-version_added: 2.8.0
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-description:
-- Configure Element Software cluster SNMP.
-
-options:
-
- state:
- description:
- - This module enables you to enable SNMP on cluster nodes. When you enable SNMP, \
- the action applies to all nodes in the cluster, and the values that are passed replace, \
- in whole, all values set in any previous call to this module.
- choices: ['present', 'absent']
- default: present
- type: str
-
- snmp_v3_enabled:
- description:
- - Which version of SNMP has to be enabled.
- type: bool
-
- networks:
- description:
- - List of networks and what type of access they have to the SNMP servers running on the cluster nodes.
- - This parameter is required if SNMP v3 is disabled.
- suboptions:
- access:
- description:
- - ro for read-only access.
- - rw for read-write access.
- - rosys for read-only access to a restricted set of system information.
- choices: ['ro', 'rw', 'rosys']
- type: str
- cidr:
- description:
- - A CIDR network mask. This network mask must be an integer greater than or equal to 0, \
- and less than or equal to 32. It must also not be equal to 31.
- type: int
- community:
- description:
- - SNMP community string.
- type: str
- network:
- description:
- - This parameter along with the cidr variable is used to control which network the access and \
- community string apply to.
- - The special value of 'default' is used to specify an entry that applies to all networks.
- - The cidr mask is ignored when network value is either a host name or default.
- type: str
- type: dict
-
- usm_users:
- description:
- - List of users and the type of access they have to the SNMP servers running on the cluster nodes.
- - This parameter is required if SNMP v3 is enabled.
- suboptions:
- access:
- description:
- - rouser for read-only access.
- - rwuser for read-write access.
- - rosys for read-only access to a restricted set of system information.
- choices: ['rouser', 'rwuser', 'rosys']
- type: str
- name:
- description:
- - The name of the user. Must contain at least one character, but no more than 32 characters.
- - Blank spaces are not allowed.
- type: str
- password:
- description:
- - The password of the user. Must be between 8 and 255 characters long (inclusive).
- - Blank spaces are not allowed.
- - Required if 'secLevel' is 'auth' or 'priv.'
- type: str
- passphrase:
- description:
- - The passphrase of the user. Must be between 8 and 255 characters long (inclusive).
- - Blank spaces are not allowed.
- - Required if 'secLevel' is 'priv.'
- type: str
- secLevel:
- description:
- - To define the security level of a user.
- choices: ['noauth', 'auth', 'priv']
- type: str
- type: dict
-
-'''
-
-EXAMPLES = """
-
- - name: configure SnmpNetwork
- tags:
- - elementsw_cluster_snmp
- na_elementsw_cluster_snmp:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: present
- snmp_v3_enabled: True
- usm_users:
- access: rouser
- name: testuser
- password: ChangeMe123
- passphrase: ChangeMe123
- secLevel: auth
- networks:
- access: ro
- cidr: 24
- community: TestNetwork
- network: 192.168.0.1
-
- - name: Disable SnmpNetwork
- tags:
- - elementsw_cluster_snmp
- na_elementsw_cluster_snmp:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: absent
-
-"""
-
-RETURN = """
-
-msg:
- description: Success message
- returned: success
- type: str
-
-"""
-
-import traceback
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils._text import to_native
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.elementsw.plugins.module_utils.netapp_module import NetAppModule
-
-HAS_SF_SDK = netapp_utils.has_sf_sdk()
-
-
-class ElementSWClusterSnmp(object):
- """
- Element Software Configure Element SW Cluster SnmpNetwork
- """
- def __init__(self):
- self.argument_spec = netapp_utils.ontap_sf_host_argument_spec()
-
- self.argument_spec.update(dict(
- state=dict(type='str', choices=['present', 'absent'], default='present'),
- snmp_v3_enabled=dict(type='bool'),
- networks=dict(
- type='dict',
- options=dict(
- access=dict(type='str', choices=['ro', 'rw', 'rosys']),
- cidr=dict(type='int', default=None),
- community=dict(type='str', default=None),
- network=dict(type='str', default=None)
- )
- ),
- usm_users=dict(
- type='dict',
- options=dict(
- access=dict(type='str', choices=['rouser', 'rwuser', 'rosys']),
- name=dict(type='str', default=None),
- password=dict(type='str', default=None, no_log=True),
- passphrase=dict(type='str', default=None, no_log=True),
- secLevel=dict(type='str', choices=['auth', 'noauth', 'priv'])
- )
- ),
- ))
-
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- required_if=[
- ('state', 'present', ['snmp_v3_enabled']),
- ('snmp_v3_enabled', True, ['usm_users']),
- ('snmp_v3_enabled', False, ['networks'])
- ],
- supports_check_mode=True
- )
-
- self.na_helper = NetAppModule()
- self.parameters = self.na_helper.set_parameters(self.module.params)
-
- if self.parameters.get('state') == "present":
- if self.parameters.get('usm_users') is not None:
- # Getting the configuration details to configure SNMP Version3
- self.access_usm = self.parameters.get('usm_users')['access']
- self.name = self.parameters.get('usm_users')['name']
- self.password = self.parameters.get('usm_users')['password']
- self.passphrase = self.parameters.get('usm_users')['passphrase']
- self.secLevel = self.parameters.get('usm_users')['secLevel']
- if self.parameters.get('networks') is not None:
- # Getting the configuration details to configure SNMP Version2
- self.access_network = self.parameters.get('networks')['access']
- self.cidr = self.parameters.get('networks')['cidr']
- self.community = self.parameters.get('networks')['community']
- self.network = self.parameters.get('networks')['network']
-
- if HAS_SF_SDK is False:
- self.module.fail_json(msg="Unable to import the SolidFire Python SDK")
- else:
- self.sfe = netapp_utils.create_sf_connection(module=self.module)
-
- def enable_snmp(self):
- """
- enable snmp feature
- """
- try:
- self.sfe.enable_snmp(snmp_v3_enabled=self.parameters.get('snmp_v3_enabled'))
- except Exception as exception_object:
- self.module.fail_json(msg='Error enabling snmp feature %s' % to_native(exception_object),
- exception=traceback.format_exc())
-
- def disable_snmp(self):
- """
- disable snmp feature
- """
- try:
- self.sfe.disable_snmp()
- except Exception as exception_object:
- self.module.fail_json(msg='Error disabling snmp feature %s' % to_native(exception_object),
- exception=traceback.format_exc())
-
- def configure_snmp(self, actual_networks, actual_usm_users):
- """
- Configure snmp
- """
- try:
- self.sfe.set_snmp_acl(networks=[actual_networks], usm_users=[actual_usm_users])
-
- except Exception as exception_object:
- self.module.fail_json(msg='Error Configuring snmp feature %s' % to_native(exception_object),
- exception=traceback.format_exc())
-
- def apply(self):
- """
- Cluster SNMP configuration
- """
- changed = False
- result_message = None
- update_required = False
- version_change = False
- is_snmp_enabled = self.sfe.get_snmp_state().enabled
-
- if is_snmp_enabled is True:
- # IF SNMP is already enabled
- if self.parameters.get('state') == 'absent':
- # Checking for state change(s) here, and applying it later in the code allows us to support
- # check_mode
- changed = True
-
- elif self.parameters.get('state') == 'present':
- # Checking if SNMP configuration needs to be updated,
- is_snmp_v3_enabled = self.sfe.get_snmp_state().snmp_v3_enabled
-
- if is_snmp_v3_enabled != self.parameters.get('snmp_v3_enabled'):
- # Checking if there any version changes required
- version_change = True
- changed = True
-
- if is_snmp_v3_enabled is True:
- # Checking If snmp configuration for usm_users needs modification
- if len(self.sfe.get_snmp_info().usm_users) == 0:
- # If snmp is getting configured for first time
- update_required = True
- changed = True
- else:
- for usm_user in self.sfe.get_snmp_info().usm_users:
- if usm_user.access != self.access_usm or usm_user.name != self.name or usm_user.password != self.password or \
- usm_user.passphrase != self.passphrase or usm_user.sec_level != self.secLevel:
- update_required = True
- changed = True
- else:
- # Checking If snmp configuration for networks needs modification
- for snmp_network in self.sfe.get_snmp_info().networks:
- if snmp_network.access != self.access_network or snmp_network.cidr != self.cidr or \
- snmp_network.community != self.community or snmp_network.network != self.network:
- update_required = True
- changed = True
-
- else:
- if self.parameters.get('state') == 'present':
- changed = True
-
- result_message = ""
-
- if changed:
- if self.module.check_mode is True:
- result_message = "Check mode, skipping changes"
-
- else:
- if self.parameters.get('state') == "present":
- # IF snmp is not enabled, then enable and configure snmp
- if self.parameters.get('snmp_v3_enabled') is True:
- # IF SNMP is enabled with version 3
- usm_users = {'access': self.access_usm,
- 'name': self.name,
- 'password': self.password,
- 'passphrase': self.passphrase,
- 'secLevel': self.secLevel}
- networks = None
- else:
- # IF SNMP is enabled with version 2
- usm_users = None
- networks = {'access': self.access_network,
- 'cidr': self.cidr,
- 'community': self.community,
- 'network': self.network}
-
- if is_snmp_enabled is False or version_change is True:
- # Enable and configure snmp
- self.enable_snmp()
- self.configure_snmp(networks, usm_users)
- result_message = "SNMP is enabled and configured"
-
- elif update_required is True:
- # If snmp is already enabled, update the configuration if required
- self.configure_snmp(networks, usm_users)
- result_message = "SNMP is configured"
-
- elif is_snmp_enabled is True and self.parameters.get('state') == "absent":
- # If snmp is enabled and state is absent, disable snmp
- self.disable_snmp()
- result_message = "SNMP is disabled"
-
- self.module.exit_json(changed=changed, msg=result_message)
-
-
-def main():
- """
- Main function
- """
- na_elementsw_cluster_snmp = ElementSWClusterSnmp()
- na_elementsw_cluster_snmp.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_drive.py b/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_drive.py
deleted file mode 100644
index f0fd7e38b..000000000
--- a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_drive.py
+++ /dev/null
@@ -1,368 +0,0 @@
-#!/usr/bin/python
-# (c) 2018, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or
-# https://www.gnu.org/licenses/gpl-3.0.txt)
-
-'''
-Element Software Node Drives
-'''
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'certified'}
-
-
-DOCUMENTATION = '''
-
-module: na_elementsw_drive
-
-short_description: NetApp Element Software Manage Node Drives
-extends_documentation_fragment:
- - netapp.elementsw.netapp.solidfire
-version_added: 2.7.0
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-description:
- - Add, Erase or Remove drive for nodes on Element Software Cluster.
-
-options:
- drive_ids:
- description:
- - List of Drive IDs or Serial Names of Node drives.
- - If not specified, add and remove action will be performed on all drives of node_id
- type: list
- elements: str
- aliases: ['drive_id']
-
- state:
- description:
- - Element SW Storage Drive operation state.
- - present - To add drive of node to participate in cluster data storage.
- - absent - To remove the drive from being part of active cluster.
- - clean - Clean-up any residual data persistent on a *removed* drive in a secured method.
- choices: ['present', 'absent', 'clean']
- default: 'present'
- type: str
-
- node_ids:
- description:
- - List of IDs or Names of cluster nodes.
- - If node_ids and drive_ids are not specified, all available drives in the cluster are added if state is present.
- - If node_ids and drive_ids are not specified, all active drives in the cluster are removed if state is absent.
- required: false
- type: list
- elements: str
- aliases: ['node_id']
-
- force_during_upgrade:
- description:
- - Flag to force drive operation during upgrade.
- - Not supported with latest version of SolidFire SDK (1.7.0.152)
- type: 'bool'
-
- force_during_bin_sync:
- description:
- - Flag to force during a bin sync operation.
- - Not supported with latest version of SolidFire SDK (1.7.0.152)
- type: 'bool'
-'''
-
-EXAMPLES = """
- - name: Add drive with status available to cluster
- tags:
- - elementsw_add_drive
- na_elementsw_drive:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: present
- drive_ids: scsi-SATA_SAMSUNG_MZ7LM48S2UJNX0J3221807
- force_during_upgrade: false
- force_during_bin_sync: false
- node_ids: sf4805-meg-03
-
- - name: Remove active drive from cluster
- tags:
- - elementsw_remove_drive
- na_elementsw_drive:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: absent
- force_during_upgrade: false
- drive_ids: scsi-SATA_SAMSUNG_MZ7LM48S2UJNX0J321208
-
- - name: Secure Erase drive
- tags:
- - elemensw_clean_drive
- na_elementsw_drive:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: clean
- drive_ids: scsi-SATA_SAMSUNG_MZ7LM48S2UJNX0J432109
- node_ids: sf4805-meg-03
-
- - name: Add all the drives of all nodes to cluster
- tags:
- - elementsw_add_node
- na_elementsw_drive:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: present
- force_during_upgrade: false
- force_during_bin_sync: false
-
-"""
-
-
-RETURN = """
-
-msg:
- description: Success message
- returned: success
- type: str
-
-"""
-import traceback
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils._text import to_native
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-
-HAS_SF_SDK = netapp_utils.has_sf_sdk()
-
-
-class ElementSWDrive(object):
- """
- Element Software Storage Drive operations
- """
-
- def __init__(self):
- self.argument_spec = netapp_utils.ontap_sf_host_argument_spec()
- self.argument_spec.update(dict(
- state=dict(required=False, choices=['present', 'absent', 'clean'], default='present'),
- drive_ids=dict(required=False, type='list', elements='str', aliases=['drive_id']),
- node_ids=dict(required=False, type='list', elements='str', aliases=['node_id']),
- force_during_upgrade=dict(required=False, type='bool'),
- force_during_bin_sync=dict(required=False, type='bool')
- ))
-
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- supports_check_mode=True
- )
-
- input_params = self.module.params
-
- self.state = input_params['state']
- self.drive_ids = input_params['drive_ids']
- self.node_ids = input_params['node_ids']
- self.force_during_upgrade = input_params['force_during_upgrade']
- self.force_during_bin_sync = input_params['force_during_bin_sync']
- self.list_nodes = None
- self.debug = list()
-
- if HAS_SF_SDK is False:
- self.module.fail_json(
- msg="Unable to import the SolidFire Python SDK")
- else:
- # increase timeout, as removing a disk takes some time
- self.sfe = netapp_utils.create_sf_connection(module=self.module, timeout=120)
-
- def get_node_id(self, node_id):
- """
- Get Node ID
- :description: Find and retrieve node_id from the active cluster
-
- :return: node_id (None if not found)
- :rtype: node_id
- """
- if self.list_nodes is None:
- self.list_nodes = self.sfe.list_active_nodes()
- for current_node in self.list_nodes.nodes:
- if node_id == str(current_node.node_id):
- return current_node.node_id
- elif node_id == current_node.name:
- return current_node.node_id
- self.module.fail_json(msg='unable to find node for node_id=%s' % node_id)
-
- def get_drives_listby_status(self, node_num_ids):
- """
- Capture list of drives based on status for a given node_id
- :description: Capture list of active, failed and available drives from a given node_id
-
- :return: None
- """
- self.active_drives = dict()
- self.available_drives = dict()
- self.other_drives = dict()
- self.all_drives = self.sfe.list_drives()
-
- for drive in self.all_drives.drives:
- # get all drives if no node is given, or match the node_ids
- if node_num_ids is None or drive.node_id in node_num_ids:
- if drive.status in ['active', 'failed']:
- self.active_drives[drive.serial] = drive.drive_id
- elif drive.status == "available":
- self.available_drives[drive.serial] = drive.drive_id
- else:
- self.other_drives[drive.serial] = (drive.drive_id, drive.status)
-
- self.debug.append('available: %s' % self.available_drives)
- self.debug.append('active: %s' % self.active_drives)
- self.debug.append('other: %s' % self.other_drives)
-
- def get_drive_id(self, drive_id, node_num_ids):
- """
- Get Drive ID
- :description: Find and retrieve drive_id from the active cluster
- Assumes self.all_drives is already populated
-
- :return: node_id (None if not found)
- :rtype: node_id
- """
- for drive in self.all_drives.drives:
- if drive_id == str(drive.drive_id):
- break
- if drive_id == drive.serial:
- break
- else:
- self.module.fail_json(msg='unable to find drive for drive_id=%s. Debug=%s' % (drive_id, self.debug))
- if node_num_ids and drive.node_id not in node_num_ids:
- self.module.fail_json(msg='drive for drive_id=%s belongs to another node, with node_id=%d. Debug=%s' % (drive_id, drive.node_id, self.debug))
- return drive.drive_id, drive.status
-
- def get_active_drives(self, drives):
- """
- return a list of active drives
- if drives is specified, only [] or a subset of disks in drives are returned
- else all available drives for this node or cluster are returned
- """
- if drives is None:
- return list(self.active_drives.values())
- return [drive_id for drive_id, status in drives if status in ['active', 'failed']]
-
- def get_available_drives(self, drives, action):
- """
- return a list of available drives (not active)
- if drives is specified, only [] or a subset of disks in drives are returned
- else all available drives for this node or cluster are returned
- """
- if drives is None:
- return list(self.available_drives.values())
- action_list = list()
- for drive_id, drive_status in drives:
- if drive_status == 'available':
- action_list.append(drive_id)
- elif drive_status in ['active', 'failed']:
- # already added
- pass
- elif drive_status == 'erasing' and action == 'erase':
- # already erasing
- pass
- elif drive_status == 'removing':
- self.module.fail_json(msg='Error - cannot %s drive while it is being removed. Debug: %s' % (action, self.debug))
- elif drive_status == 'erasing' and action == 'add':
- self.module.fail_json(msg='Error - cannot %s drive while it is being erased. Debug: %s' % (action, self.debug))
- else:
- self.module.fail_json(msg='Error - cannot %s drive while it is in %s state. Debug: %s' % (action, drive_status, self.debug))
- return action_list
-
- def add_drive(self, drives=None):
- """
- Add Drive available for Cluster storage expansion
- """
- kwargs = dict()
- if self.force_during_upgrade is not None:
- kwargs['force_during_upgrade'] = self.force_during_upgrade
- if self.force_during_bin_sync is not None:
- kwargs['force_during_bin_sync'] = self.force_during_bin_sync
- try:
- self.sfe.add_drives(drives, **kwargs)
- except Exception as exception_object:
- self.module.fail_json(msg='Error adding drive%s: %s: %s' %
- ('s' if len(drives) > 1 else '',
- str(drives),
- to_native(exception_object)),
- exception=traceback.format_exc())
-
- def remove_drive(self, drives=None):
- """
- Remove Drive active in Cluster
- """
- kwargs = dict()
- if self.force_during_upgrade is not None:
- kwargs['force_during_upgrade'] = self.force_during_upgrade
- try:
- self.sfe.remove_drives(drives, **kwargs)
- except Exception as exception_object:
- self.module.fail_json(msg='Error removing drive%s: %s: %s' %
- ('s' if len(drives) > 1 else '',
- str(drives),
- to_native(exception_object)),
- exception=traceback.format_exc())
-
- def secure_erase(self, drives=None):
- """
- Secure Erase any residual data existing on a drive
- """
- try:
- self.sfe.secure_erase_drives(drives)
- except Exception as exception_object:
- self.module.fail_json(msg='Error cleaning data from drive%s: %s: %s' %
- ('s' if len(drives) > 1 else '',
- str(drives),
- to_native(exception_object)),
- exception=traceback.format_exc())
-
- def apply(self):
- """
- Check, process and initiate Drive operation
- """
- changed = False
-
- action_list = []
- node_num_ids = None
- drives = None
- if self.node_ids:
- node_num_ids = [self.get_node_id(node_id) for node_id in self.node_ids]
-
- self.get_drives_listby_status(node_num_ids)
- if self.drive_ids:
- drives = [self.get_drive_id(drive_id, node_num_ids) for drive_id in self.drive_ids]
-
- if self.state == "present":
- action_list = self.get_available_drives(drives, 'add')
- elif self.state == "absent":
- action_list = self.get_active_drives(drives)
- elif self.state == "clean":
- action_list = self.get_available_drives(drives, 'erase')
-
- if len(action_list) > 0:
- changed = True
- if not self.module.check_mode and changed:
- if self.state == "present":
- self.add_drive(action_list)
- elif self.state == "absent":
- self.remove_drive(action_list)
- elif self.state == "clean":
- self.secure_erase(action_list)
-
- self.module.exit_json(changed=changed)
-
-
-def main():
- """
- Main function
- """
-
- na_elementsw_drive = ElementSWDrive()
- na_elementsw_drive.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_info.py b/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_info.py
deleted file mode 100644
index fde928784..000000000
--- a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_info.py
+++ /dev/null
@@ -1,272 +0,0 @@
-#!/usr/bin/python
-# (c) 2020, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-'''
-Element Software Info
-'''
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'certified'}
-
-
-DOCUMENTATION = '''
-
-module: na_elementsw_info
-short_description: NetApp Element Software Info
-extends_documentation_fragment:
- - netapp.elementsw.netapp.solidfire
-version_added: 20.10.0
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-description:
- - Collect cluster and node information.
- - Use a MVIP as hostname for cluster and node scope.
- - Use a MIP as hostname for node scope.
- - When using MIPs, cluster APIs are expected to fail with 'xUnknownAPIMethod method=ListAccounts'
-
-options:
- gather_subsets:
- description:
- - list of subsets to gather from target cluster or node
- - supported values
- - node_config, cluster_accounts, cluster_nodes, cluster_drives.
- - additional values
- - all - for all subsets,
- - all_clusters - all subsets at cluster scope,
- - all_nodes - all subsets at node scope
- type: list
- elements: str
- default: ['all']
- aliases: ['gather_subset']
-
- filter:
- description:
- - When a list of records is returned, this can be used to limit the records to be returned.
- - If more than one key is used, all keys must match.
- type: dict
-
- fail_on_error:
- description:
- - by default, errors are not fatal when collecting a subset. The subset will show on error in the info output.
- - if set to True, the module fails on the first error.
- type: bool
- default: false
-
- fail_on_key_not_found:
- description:
- - force an error when filter is used and a key is not present in records.
- type: bool
- default: true
-
- fail_on_record_not_found:
- description:
- - force an error when filter is used and no record is matched.
- type: bool
- default: false
-'''
-
-EXAMPLES = """
-
- - name: get all available subsets
- na_elementsw_info:
- hostname: "{{ elementsw_mvip }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- gather_subsets: all
- register: result
-
- - name: collect data for elementsw accounts using a filter
- na_elementsw_info:
- hostname: "{{ elementsw_mvip }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- gather_subsets: 'cluster_accounts'
- filter:
- username: "{{ username_to_find }}"
- register: result
-"""
-
-RETURN = """
-
-info:
- description:
- - a dictionary of collected subsets
- - each subset if in JSON format
- returned: success
- type: dict
-
-debug:
- description:
- - a list of detailed error messages if some subsets cannot be collected
- returned: success
- type: list
-
-"""
-from ansible.module_utils.basic import AnsibleModule
-
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.elementsw.plugins.module_utils.netapp_module import NetAppModule
-
-HAS_SF_SDK = netapp_utils.has_sf_sdk()
-
-
-class ElementSWInfo(object):
- '''
- Element Software Initialize node with ownership for cluster formation
- '''
-
- def __init__(self):
- self.argument_spec = netapp_utils.ontap_sf_host_argument_spec()
- self.argument_spec.update(dict(
- gather_subsets=dict(type='list', elements='str', aliases=['gather_subset'], default='all'),
- filter=dict(type='dict'),
- fail_on_error=dict(type='bool', default=False),
- fail_on_key_not_found=dict(type='bool', default=True),
- fail_on_record_not_found=dict(type='bool', default=False),
- ))
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- supports_check_mode=True
- )
-
- self.na_helper = NetAppModule()
- self.parameters = self.na_helper.set_parameters(self.module.params)
- self.debug = list()
-
- if HAS_SF_SDK is False:
- self.module.fail_json(msg="Unable to import the SolidFire Python SDK")
-
- # 442 for node APIs, 443 (default) for cluster APIs
- for role, port in [('node', 442), ('cluster', 443)]:
- try:
- conn = netapp_utils.create_sf_connection(module=self.module, raise_on_connection_error=True, port=port)
- if role == 'node':
- self.sfe_node = conn
- else:
- self.sfe_cluster = conn
- except netapp_utils.solidfire.common.ApiConnectionError as exc:
- if str(exc) == "Bad Credentials":
- msg = ' Make sure to use valid %s credentials for username and password.' % 'node' if port == 442 else 'cluster'
- msg += '%s reported: %s' % ('Node' if port == 442 else 'Cluster', repr(exc))
- else:
- msg = 'Failed to create connection for %s:%d - %s' % (self.parameters['hostname'], port, repr(exc))
- self.module.fail_json(msg=msg)
- except Exception as exc:
- self.module.fail_json(msg='Failed to connect for %s:%d - %s' % (self.parameters['hostname'], port, repr(exc)))
-
- # TODO: add new node methods here
- self.node_methods = dict(
- node_config=self.sfe_node.get_config,
- )
- # TODO: add new cluster methods here
- self.cluster_methods = dict(
- cluster_accounts=self.sfe_cluster.list_accounts,
- cluster_drives=self.sfe_cluster.list_drives,
- cluster_nodes=self.sfe_cluster.list_all_nodes
- )
- self.methods = dict(self.node_methods)
- self.methods.update(self.cluster_methods)
-
- # add telemetry attributes - does not matter if we are using cluster or node here
- # TODO: most if not all get and list APIs do not have an attributes parameter
-
- def get_info(self, name):
- '''
- Get Element Info
- run a cluster or node list method
- return output as json
- '''
- info = None
- if name not in self.methods:
- msg = 'Error: unknown subset %s.' % name
- msg += ' Known_subsets: %s' % ', '.join(self.methods.keys())
- self.module.fail_json(msg=msg, debug=self.debug)
- try:
- info = self.methods[name]()
- return info.to_json()
- except netapp_utils.solidfire.common.ApiServerError as exc:
- # the new SDK rearranged the fields in a different order
- if all(x in str(exc) for x in ('err_json', '500', 'xUnknownAPIMethod', 'method=')):
- info = 'Error (API not in scope?)'
- else:
- info = 'Error'
- msg = '%s for subset: %s: %s' % (info, name, repr(exc))
- if self.parameters['fail_on_error']:
- self.module.fail_json(msg=msg)
- self.debug.append(msg)
- return info
-
- def filter_list_of_dict_by_key(self, records, key, value):
- matched = list()
- for record in records:
- if key in record and record[key] == value:
- matched.append(record)
- if key not in record and self.parameters['fail_on_key_not_found']:
- msg = 'Error: key %s not found in %s' % (key, repr(record))
- self.module.fail_json(msg=msg)
- return matched
-
- def filter_records(self, records, filter_dict):
-
- if isinstance(records, dict):
- if len(records) == 1:
- key, value = list(records.items())[0]
- return dict({key: self.filter_records(value, filter_dict)})
- if not isinstance(records, list):
- return records
- matched = records
- for key, value in filter_dict.items():
- matched = self.filter_list_of_dict_by_key(matched, key, value)
- if self.parameters['fail_on_record_not_found'] and len(matched) == 0:
- msg = 'Error: no match for %s out of %d records' % (repr(self.parameters['filter']), len(records))
- self.debug.append('Unmatched records: %s' % repr(records))
- self.module.fail_json(msg=msg, debug=self.debug)
- return matched
-
- def get_and_filter_info(self, name):
- '''
- Get data
- If filter is present, only return the records that are matched
- return output as json
- '''
- records = self.get_info(name)
- if self.parameters.get('filter') is None:
- return records
- matched = self.filter_records(records, self.parameters.get('filter'))
- return matched
-
- def apply(self):
- '''
- Check connection and initialize node with cluster ownership
- '''
- changed = False
- info = dict()
- my_subsets = ('all', 'all_clusters', 'all_nodes')
- if any(x in self.parameters['gather_subsets'] for x in my_subsets) and len(self.parameters['gather_subsets']) > 1:
- msg = 'When any of %s is used, no other subset is allowed' % repr(my_subsets)
- self.module.fail_json(msg=msg)
- if 'all' in self.parameters['gather_subsets']:
- self.parameters['gather_subsets'] = self.methods.keys()
- if 'all_clusters' in self.parameters['gather_subsets']:
- self.parameters['gather_subsets'] = self.cluster_methods.keys()
- if 'all_nodes' in self.parameters['gather_subsets']:
- self.parameters['gather_subsets'] = self.node_methods.keys()
- for name in self.parameters['gather_subsets']:
- info[name] = self.get_and_filter_info(name)
- self.module.exit_json(changed=changed, info=info, debug=self.debug)
-
-
-def main():
- '''
- Main function
- '''
- na_elementsw_cluster = ElementSWInfo()
- na_elementsw_cluster.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_initiators.py b/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_initiators.py
deleted file mode 100644
index 9bef345b4..000000000
--- a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_initiators.py
+++ /dev/null
@@ -1,343 +0,0 @@
-#!/usr/bin/python
-# (c) 2018, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or
-# https://www.gnu.org/licenses/gpl-3.0.txt)
-
-'''
-Element Software manage initiators
-'''
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'community'}
-
-
-DOCUMENTATION = '''
-
-module: na_elementsw_initiators
-
-short_description: Manage Element SW initiators
-extends_documentation_fragment:
- - netapp.elementsw.netapp.solidfire
-version_added: 2.8.0
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-description:
-- Manage Element Software initiators that allow external clients access to volumes.
-
-options:
- initiators:
- description: A list of objects containing characteristics of each initiator.
- suboptions:
- name:
- description: The name of the initiator.
- type: str
- required: true
-
- alias:
- description: The friendly name assigned to this initiator.
- type: str
-
- initiator_id:
- description: The numeric ID of the initiator.
- type: int
-
- volume_access_group_id:
- description: volumeAccessGroupID to which this initiator belongs.
- type: int
-
- attributes:
- description: A set of JSON attributes to assign to this initiator.
- type: dict
- type: list
- elements: dict
-
- state:
- description:
- - Whether the specified initiator should exist or not.
- choices: ['present', 'absent']
- default: present
- type: str
-'''
-
-EXAMPLES = """
-
- - name: Manage initiators
- tags:
- - na_elementsw_initiators
- na_elementsw_initiators:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- initiators:
- - name: a
- alias: a1
- initiator_id: 1
- volume_access_group_id: 1
- attributes: {"key": "value"}
- - name: b
- alias: b2
- initiator_id: 2
- volume_access_group_id: 2
- state: present
-"""
-
-RETURN = """
-
-msg:
- description: Success message
- returned: success
- type: str
-
-"""
-import traceback
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils._text import to_native
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.elementsw.plugins.module_utils.netapp_elementsw_module import NaElementSWModule
-from ansible_collections.netapp.elementsw.plugins.module_utils.netapp_module import NetAppModule
-HAS_SF_SDK = netapp_utils.has_sf_sdk()
-if HAS_SF_SDK:
- from solidfire.models import ModifyInitiator
-
-
-class ElementSWInitiators(object):
- """
- Element Software Manage Element SW initiators
- """
- def __init__(self):
- self.argument_spec = netapp_utils.ontap_sf_host_argument_spec()
-
- self.argument_spec.update(dict(
- initiators=dict(
- type='list',
- elements='dict',
- options=dict(
- name=dict(type='str', required=True),
- alias=dict(type='str', default=None),
- initiator_id=dict(type='int', default=None),
- volume_access_group_id=dict(type='int', default=None),
- attributes=dict(type='dict', default=None),
- )
- ),
- state=dict(choices=['present', 'absent'], default='present'),
- ))
-
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- supports_check_mode=True
- )
-
- self.na_helper = NetAppModule()
- self.parameters = self.na_helper.set_parameters(self.module.params)
- self.debug = list()
-
- if HAS_SF_SDK is False:
- self.module.fail_json(msg="Unable to import the SolidFire Python SDK")
- else:
- self.sfe = netapp_utils.create_sf_connection(module=self.module)
-
- self.elementsw_helper = NaElementSWModule(self.sfe)
-
- # iterate over each user-provided initiator
- for initiator in self.parameters.get('initiators'):
- # add telemetry attributes
- if 'attributes' in initiator and initiator['attributes']:
- initiator['attributes'].update(self.elementsw_helper.set_element_attributes(source='na_elementsw_initiators'))
- else:
- initiator['attributes'] = self.elementsw_helper.set_element_attributes(source='na_elementsw_initiators')
-
- def compare_initiators(self, user_initiator, existing_initiator):
- """
- compare user input initiator with existing dict
- :return: True if matched, False otherwise
- """
- if user_initiator is None or existing_initiator is None:
- return False
- changed = False
- for param in user_initiator:
- # lookup initiator_name instead of name
- if param == 'name':
- if user_initiator['name'] == existing_initiator['initiator_name']:
- pass
- elif param == 'initiator_id':
- # can't change the key
- pass
- elif user_initiator[param] == existing_initiator[param]:
- pass
- else:
- self.debug.append('Initiator: %s. Changed: %s from: %s to %s' %
- (user_initiator['name'], param, str(existing_initiator[param]), str(user_initiator[param])))
- changed = True
- return changed
-
- def initiator_to_dict(self, initiator_obj):
- """
- converts initiator class object to dict
- :return: reconstructed initiator dict
- """
- known_params = ['initiator_name',
- 'alias',
- 'initiator_id',
- 'volume_access_groups',
- 'volume_access_group_id',
- 'attributes']
- initiator_dict = {}
-
- # missing parameter cause error
- # so assign defaults
- for param in known_params:
- initiator_dict[param] = getattr(initiator_obj, param, None)
- if initiator_dict['volume_access_groups'] is not None:
- if len(initiator_dict['volume_access_groups']) == 1:
- initiator_dict['volume_access_group_id'] = initiator_dict['volume_access_groups'][0]
- elif len(initiator_dict['volume_access_groups']) > 1:
- self.module.fail_json(msg="Only 1 access group is supported, found: %s" % repr(initiator_obj))
- del initiator_dict['volume_access_groups']
- return initiator_dict
-
- def find_initiator(self, id=None, name=None):
- """
- find a specific initiator
- :return: initiator dict
- """
- initiator_details = None
- if self.all_existing_initiators is None:
- return initiator_details
- for initiator in self.all_existing_initiators:
- # if name is provided or
- # if id is provided
- if name is not None:
- if initiator.initiator_name == name:
- initiator_details = self.initiator_to_dict(initiator)
- elif id is not None:
- if initiator.initiator_id == id:
- initiator_details = self.initiator_to_dict(initiator)
- else:
- # if neither id nor name provided
- # return everything
- initiator_details = self.all_existing_initiators
- return initiator_details
-
- @staticmethod
- def rename_key(obj, old_name, new_name):
- obj[new_name] = obj.pop(old_name)
-
- def create_initiator(self, initiator):
- """
- create initiator
- """
- # SF SDK is using camelCase for this one
- self.rename_key(initiator, 'volume_access_group_id', 'volumeAccessGroupID')
- # create_initiators needs an array
- initiator_list = [initiator]
- try:
- self.sfe.create_initiators(initiator_list)
- except Exception as exception_object:
- self.module.fail_json(msg='Error creating initiator %s' % (to_native(exception_object)),
- exception=traceback.format_exc())
-
- def delete_initiator(self, initiator):
- """
- delete initiator
- """
- # delete_initiators needs an array
- initiator_id_array = [initiator]
- try:
- self.sfe.delete_initiators(initiator_id_array)
- except Exception as exception_object:
- self.module.fail_json(msg='Error deleting initiator %s' % (to_native(exception_object)),
- exception=traceback.format_exc())
-
- def modify_initiator(self, initiator, existing_initiator):
- """
- modify initiator
- """
- # create the new initiator dict
- # by merging old and new values
- merged_initiator = existing_initiator.copy()
- # can't change the key
- del initiator['initiator_id']
- merged_initiator.update(initiator)
-
- # we MUST create an object before sending
- # the new initiator to modify_initiator
- initiator_object = ModifyInitiator(initiator_id=merged_initiator['initiator_id'],
- alias=merged_initiator['alias'],
- volume_access_group_id=merged_initiator['volume_access_group_id'],
- attributes=merged_initiator['attributes'])
- initiator_list = [initiator_object]
- try:
- self.sfe.modify_initiators(initiators=initiator_list)
- except Exception as exception_object:
- self.module.fail_json(msg='Error modifying initiator: %s' % (to_native(exception_object)),
- exception=traceback.format_exc())
-
- def apply(self):
- """
- configure initiators
- """
- changed = False
- result_message = None
-
- # get all user provided initiators
- input_initiators = self.parameters.get('initiators')
-
- # get all initiators
- # store in a cache variable
- self.all_existing_initiators = self.sfe.list_initiators().initiators
-
- # iterate over each user-provided initiator
- for in_initiator in input_initiators:
- if self.parameters.get('state') == 'present':
- # check if initiator_id is provided and exists
- if 'initiator_id' in in_initiator and in_initiator['initiator_id'] is not None and \
- self.find_initiator(id=in_initiator['initiator_id']) is not None:
- if self.compare_initiators(in_initiator, self.find_initiator(id=in_initiator['initiator_id'])):
- changed = True
- result_message = 'modifying initiator(s)'
- self.modify_initiator(in_initiator, self.find_initiator(id=in_initiator['initiator_id']))
- # otherwise check if name is provided and exists
- elif 'name' in in_initiator and in_initiator['name'] is not None and self.find_initiator(name=in_initiator['name']) is not None:
- if self.compare_initiators(in_initiator, self.find_initiator(name=in_initiator['name'])):
- changed = True
- result_message = 'modifying initiator(s)'
- self.modify_initiator(in_initiator, self.find_initiator(name=in_initiator['name']))
- # this is a create op if initiator doesn't exist
- else:
- changed = True
- result_message = 'creating initiator(s)'
- self.create_initiator(in_initiator)
- elif self.parameters.get('state') == 'absent':
- # delete_initiators only processes ids
- # so pass ids of initiators to method
- if 'name' in in_initiator and in_initiator['name'] is not None and \
- self.find_initiator(name=in_initiator['name']) is not None:
- changed = True
- result_message = 'deleting initiator(s)'
- self.delete_initiator(self.find_initiator(name=in_initiator['name'])['initiator_id'])
- elif 'initiator_id' in in_initiator and in_initiator['initiator_id'] is not None and \
- self.find_initiator(id=in_initiator['initiator_id']) is not None:
- changed = True
- result_message = 'deleting initiator(s)'
- self.delete_initiator(in_initiator['initiator_id'])
- if self.module.check_mode is True:
- result_message = "Check mode, skipping changes"
- if self.debug:
- result_message += ". %s" % self.debug
- self.module.exit_json(changed=changed, msg=result_message)
-
-
-def main():
- """
- Main function
- """
- na_elementsw_initiators = ElementSWInitiators()
- na_elementsw_initiators.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_ldap.py b/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_ldap.py
deleted file mode 100644
index a71ddf564..000000000
--- a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_ldap.py
+++ /dev/null
@@ -1,254 +0,0 @@
-#!/usr/bin/python
-
-# (c) 2017, NetApp, 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
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'certified'}
-
-
-DOCUMENTATION = '''
-
-module: na_elementsw_ldap
-
-short_description: NetApp Element Software Manage ldap admin users
-extends_documentation_fragment:
- - netapp.elementsw.netapp.solidfire
-version_added: 2.7.0
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-description:
-- Enable, disable ldap, and add ldap users
-
-options:
-
- state:
- description:
- - Whether the specified volume should exist or not.
- choices: ['present', 'absent']
- default: present
- type: str
-
- authType:
- description:
- - Identifies which user authentication method to use.
- choices: ['DirectBind', 'SearchAndBind']
- type: str
-
- groupSearchBaseDn:
- description:
- - The base DN of the tree to start the group search (will do a subtree search from here)
- type: str
-
- groupSearchType:
- description:
- - Controls the default group search filter used
- choices: ['NoGroup', 'ActiveDirectory', 'MemberDN']
- type: str
-
- serverURIs:
- description:
- - A comma-separated list of LDAP server URIs
- type: str
-
- userSearchBaseDN:
- description:
- - The base DN of the tree to start the search (will do a subtree search from here)
- type: str
-
- searchBindDN:
- description:
- - A dully qualified DN to log in with to perform an LDAp search for the user (needs read access to the LDAP directory).
- type: str
-
- searchBindPassword:
- description:
- - The password for the searchBindDN account used for searching
- type: str
-
- userSearchFilter:
- description:
- - the LDAP Filter to use
- type: str
-
- userDNTemplate:
- description:
- - A string that is used form a fully qualified user DN.
- type: str
-
- groupSearchCustomFilter:
- description:
- - For use with the CustomFilter Search type
- type: str
-'''
-
-EXAMPLES = """
- - name: disable ldap authentication
- na_elementsw_ldap:
- state: absent
- username: "{{ admin username }}"
- password: "{{ admin password }}"
- hostname: "{{ hostname }}"
-
- - name: Enable ldap authentication
- na_elementsw_ldap:
- state: present
- username: "{{ admin username }}"
- password: "{{ admin password }}"
- hostname: "{{ hostname }}"
- authType: DirectBind
- serverURIs: ldap://svmdurlabesx01spd_ldapclnt
- groupSearchType: MemberDN
- userDNTemplate: uid=%USERNAME%,cn=users,cn=accounts,dc=corp,dc="{{ company name }}",dc=com
-
-
-"""
-
-RETURN = """
-
-"""
-import traceback
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils._text import to_native
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-
-HAS_SF_SDK = netapp_utils.has_sf_sdk()
-try:
- import solidfire.common
-except Exception:
- HAS_SF_SDK = False
-
-
-class NetappElementLdap(object):
-
- def __init__(self):
- self.argument_spec = netapp_utils.ontap_sf_host_argument_spec()
- self.argument_spec.update(
- state=dict(required=False, type='str', choices=['present', 'absent'], default='present'),
- authType=dict(type='str', choices=['DirectBind', 'SearchAndBind']),
- groupSearchBaseDn=dict(type='str'),
- groupSearchType=dict(type='str', choices=['NoGroup', 'ActiveDirectory', 'MemberDN']),
- serverURIs=dict(type='str'),
- userSearchBaseDN=dict(type='str'),
- searchBindDN=dict(type='str'),
- searchBindPassword=dict(type='str', no_log=True),
- userSearchFilter=dict(type='str'),
- userDNTemplate=dict(type='str'),
- groupSearchCustomFilter=dict(type='str'),
- )
-
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- supports_check_mode=True,
- )
-
- param = self.module.params
-
- # set up state variables
- self.state = param['state']
- self.authType = param['authType']
- self.groupSearchBaseDn = param['groupSearchBaseDn']
- self.groupSearchType = param['groupSearchType']
- self.serverURIs = param['serverURIs']
- if self.serverURIs is not None:
- self.serverURIs = self.serverURIs.split(',')
- self.userSearchBaseDN = param['userSearchBaseDN']
- self.searchBindDN = param['searchBindDN']
- self.searchBindPassword = param['searchBindPassword']
- self.userSearchFilter = param['userSearchFilter']
- self.userDNTemplate = param['userDNTemplate']
- self.groupSearchCustomFilter = param['groupSearchCustomFilter']
-
- if HAS_SF_SDK is False:
- self.module.fail_json(msg="Unable to import the SolidFire Python SDK")
- else:
- self.sfe = netapp_utils.create_sf_connection(module=self.module)
-
- def get_ldap_configuration(self):
- """
- Return ldap configuration if found
-
- :return: Details about the ldap configuration. None if not found.
- :rtype: solidfire.models.GetLdapConfigurationResult
- """
- ldap_config = self.sfe.get_ldap_configuration()
- return ldap_config
-
- def enable_ldap(self):
- """
- Enable LDAP
- :return: nothing
- """
- try:
- self.sfe.enable_ldap_authentication(self.serverURIs, auth_type=self.authType,
- group_search_base_dn=self.groupSearchBaseDn,
- group_search_type=self.groupSearchType,
- group_search_custom_filter=self.groupSearchCustomFilter,
- search_bind_dn=self.searchBindDN,
- search_bind_password=self.searchBindPassword,
- user_search_base_dn=self.userSearchBaseDN,
- user_search_filter=self.userSearchFilter,
- user_dntemplate=self.userDNTemplate)
- except solidfire.common.ApiServerError as error:
- self.module.fail_json(msg='Error enabling LDAP: %s' % (to_native(error)),
- exception=traceback.format_exc())
-
- def check_config(self, ldap_config):
- """
- Check to see if the ldap config has been modified.
- :param ldap_config: The LDAP configuration
- :return: False if the config is the same as the playbook, True if it is not
- """
- if self.authType != ldap_config.ldap_configuration.auth_type:
- return True
- if self.serverURIs != ldap_config.ldap_configuration.server_uris:
- return True
- if self.groupSearchBaseDn != ldap_config.ldap_configuration.group_search_base_dn:
- return True
- if self.groupSearchType != ldap_config.ldap_configuration.group_search_type:
- return True
- if self.groupSearchCustomFilter != ldap_config.ldap_configuration.group_search_custom_filter:
- return True
- if self.searchBindDN != ldap_config.ldap_configuration.search_bind_dn:
- return True
- if self.searchBindPassword != ldap_config.ldap_configuration.search_bind_password:
- return True
- if self.userSearchBaseDN != ldap_config.ldap_configuration.user_search_base_dn:
- return True
- if self.userSearchFilter != ldap_config.ldap_configuration.user_search_filter:
- return True
- if self.userDNTemplate != ldap_config.ldap_configuration.user_dntemplate:
- return True
- return False
-
- def apply(self):
- changed = False
- ldap_config = self.get_ldap_configuration()
- if self.state == 'absent':
- if ldap_config and ldap_config.ldap_configuration.enabled:
- changed = True
- if self.state == 'present' and self.check_config(ldap_config):
- changed = True
- if changed:
- if self.module.check_mode:
- pass
- else:
- if self.state == 'present':
- self.enable_ldap()
- elif self.state == 'absent':
- self.sfe.disable_ldap_authentication()
-
- self.module.exit_json(changed=changed)
-
-
-def main():
- v = NetappElementLdap()
- v.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_network_interfaces.py b/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_network_interfaces.py
deleted file mode 100644
index a9151a620..000000000
--- a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_network_interfaces.py
+++ /dev/null
@@ -1,423 +0,0 @@
-#!/usr/bin/python
-# (c) 2018, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or
-# https://www.gnu.org/licenses/gpl-3.0.txt)
-
-'''
-Element Software Node Network Interfaces - Bond 1G and 10G configuration
-'''
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'certified'}
-
-
-DOCUMENTATION = '''
-
-module: na_elementsw_network_interfaces
-
-short_description: NetApp Element Software Configure Node Network Interfaces
-extends_documentation_fragment:
- - netapp.elementsw.netapp.solidfire
-version_added: 2.7.0
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-description:
- - Configure Element SW Node Network Interfaces for Bond 1G and 10G IP addresses.
- - This module does not create interfaces, it expects the interfaces to already exists and can only modify them.
- - This module cannot set or modify the method (Loopback, manual, dhcp, static).
- - This module is not idempotent and does not support check_mode.
-
-options:
- method:
- description:
- - deprecated, this option would trigger a 'updated failed' error
- type: str
-
- ip_address_1g:
- description:
- - deprecated, use bond_1g option.
- type: str
-
- ip_address_10g:
- description:
- - deprecated, use bond_10g option.
- type: str
-
- subnet_1g:
- description:
- - deprecated, use bond_1g option.
- type: str
-
- subnet_10g:
- description:
- - deprecated, use bond_10g option.
- type: str
-
- gateway_address_1g:
- description:
- - deprecated, use bond_1g option.
- type: str
-
- gateway_address_10g:
- description:
- - deprecated, use bond_10g option.
- type: str
-
- mtu_1g:
- description:
- - deprecated, use bond_1g option.
- type: str
-
- mtu_10g:
- description:
- - deprecated, use bond_10g option.
- type: str
-
- dns_nameservers:
- description:
- - deprecated, use bond_1g and bond_10g options.
- type: list
- elements: str
-
- dns_search_domains:
- description:
- - deprecated, use bond_1g and bond_10g options.
- type: list
- elements: str
-
- bond_mode_1g:
- description:
- - deprecated, use bond_1g option.
- type: str
-
- bond_mode_10g:
- description:
- - deprecated, use bond_10g option.
- type: str
-
- lacp_1g:
- description:
- - deprecated, use bond_1g option.
- type: str
-
- lacp_10g:
- description:
- - deprecated, use bond_10g option.
- type: str
-
- virtual_network_tag:
- description:
- - deprecated, use bond_1g and bond_10g options.
- type: str
-
- bond_1g:
- description:
- - settings for the Bond1G interface.
- type: dict
- suboptions:
- address:
- description:
- - IP address for the interface.
- type: str
- netmask:
- description:
- - subnet mask for the interface.
- type: str
- gateway:
- description:
- - IP router network address to send packets out of the local network.
- type: str
- mtu:
- description:
- - The largest packet size (in bytes) that the interface can transmit..
- - Must be greater than or equal to 1500 bytes.
- type: str
- dns_nameservers:
- description:
- - List of addresses for domain name servers.
- type: list
- elements: str
- dns_search:
- description:
- - List of DNS search domains.
- type: list
- elements: str
- bond_mode:
- description:
- - Bonding mode.
- choices: ['ActivePassive', 'ALB', 'LACP']
- type: str
- bond_lacp_rate:
- description:
- - Link Aggregation Control Protocol - useful only if LACP is selected as the Bond Mode.
- - Slow - Packets are transmitted at 30 second intervals.
- - Fast - Packets are transmitted in 1 second intervals.
- choices: ['Fast', 'Slow']
- type: str
- virtual_network_tag:
- description:
- - The virtual network identifier of the interface (VLAN tag).
- type: str
-
- bond_10g:
- description:
- - settings for the Bond10G interface.
- type: dict
- suboptions:
- address:
- description:
- - IP address for the interface.
- type: str
- netmask:
- description:
- - subnet mask for the interface.
- type: str
- gateway:
- description:
- - IP router network address to send packets out of the local network.
- type: str
- mtu:
- description:
- - The largest packet size (in bytes) that the interface can transmit..
- - Must be greater than or equal to 1500 bytes.
- type: str
- dns_nameservers:
- description:
- - List of addresses for domain name servers.
- type: list
- elements: str
- dns_search:
- description:
- - List of DNS search domains.
- type: list
- elements: str
- bond_mode:
- description:
- - Bonding mode.
- choices: ['ActivePassive', 'ALB', 'LACP']
- type: str
- bond_lacp_rate:
- description:
- - Link Aggregation Control Protocol - useful only if LACP is selected as the Bond Mode.
- - Slow - Packets are transmitted at 30 second intervals.
- - Fast - Packets are transmitted in 1 second intervals.
- choices: ['Fast', 'Slow']
- type: str
- virtual_network_tag:
- description:
- - The virtual network identifier of the interface (VLAN tag).
- type: str
-
-'''
-
-EXAMPLES = """
-
- - name: Set Node network interfaces configuration for Bond 1G and 10G properties
- tags:
- - elementsw_network_interfaces
- na_elementsw_network_interfaces:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- bond_1g:
- address: 10.253.168.131
- netmask: 255.255.248.0
- gateway: 10.253.168.1
- mtu: '1500'
- bond_mode: ActivePassive
- dns_nameservers: dns1,dns2
- dns_search: domain1,domain2
- bond_10g:
- address: 10.253.1.202
- netmask: 255.255.255.192
- gateway: 10.253.1.193
- mtu: '9000'
- bond_mode: LACP
- bond_lacp_rate: Fast
- virtual_network_tag: vnet_tag
-"""
-
-RETURN = """
-
-msg:
- description: Success message
- returned: success
- type: str
-
-"""
-import traceback
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils._text import to_native
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-
-HAS_SF_SDK = netapp_utils.has_sf_sdk()
-
-try:
- from solidfire.models import Network, NetworkConfig
- from solidfire.common import ApiConnectionError as sf_ApiConnectionError, ApiServerError as sf_ApiServerError
- HAS_SF_SDK = True
-except ImportError:
- HAS_SF_SDK = False
-
-
-class ElementSWNetworkInterfaces(object):
- """
- Element Software Network Interfaces - Bond 1G and 10G Network configuration
- """
-
- def __init__(self):
- self.argument_spec = netapp_utils.ontap_sf_host_argument_spec()
- self.argument_spec.update(dict(
- method=dict(required=False, type='str'),
- ip_address_1g=dict(required=False, type='str'),
- ip_address_10g=dict(required=False, type='str'),
- subnet_1g=dict(required=False, type='str'),
- subnet_10g=dict(required=False, type='str'),
- gateway_address_1g=dict(required=False, type='str'),
- gateway_address_10g=dict(required=False, type='str'),
- mtu_1g=dict(required=False, type='str'),
- mtu_10g=dict(required=False, type='str'),
- dns_nameservers=dict(required=False, type='list', elements='str'),
- dns_search_domains=dict(required=False, type='list', elements='str'),
- bond_mode_1g=dict(required=False, type='str'),
- bond_mode_10g=dict(required=False, type='str'),
- lacp_1g=dict(required=False, type='str'),
- lacp_10g=dict(required=False, type='str'),
- virtual_network_tag=dict(required=False, type='str'),
- bond_1g=dict(required=False, type='dict', options=dict(
- address=dict(required=False, type='str'),
- netmask=dict(required=False, type='str'),
- gateway=dict(required=False, type='str'),
- mtu=dict(required=False, type='str'),
- dns_nameservers=dict(required=False, type='list', elements='str'),
- dns_search=dict(required=False, type='list', elements='str'),
- bond_mode=dict(required=False, type='str', choices=['ActivePassive', 'ALB', 'LACP']),
- bond_lacp_rate=dict(required=False, type='str', choices=['Fast', 'Slow']),
- virtual_network_tag=dict(required=False, type='str'),
- )),
- bond_10g=dict(required=False, type='dict', options=dict(
- address=dict(required=False, type='str'),
- netmask=dict(required=False, type='str'),
- gateway=dict(required=False, type='str'),
- mtu=dict(required=False, type='str'),
- dns_nameservers=dict(required=False, type='list', elements='str'),
- dns_search=dict(required=False, type='list', elements='str'),
- bond_mode=dict(required=False, type='str', choices=['ActivePassive', 'ALB', 'LACP']),
- bond_lacp_rate=dict(required=False, type='str', choices=['Fast', 'Slow']),
- virtual_network_tag=dict(required=False, type='str'),
- )),
- ))
-
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- supports_check_mode=False
- )
-
- input_params = self.module.params
- self.fail_when_deprecated_options_are_set(input_params)
-
- self.bond1g = input_params['bond_1g']
- self.bond10g = input_params['bond_10g']
-
- if HAS_SF_SDK is False:
- self.module.fail_json(msg="Unable to import the SolidFire Python SDK")
- # increase time out, as it may take 30 seconds when making a change
- self.sfe = netapp_utils.create_sf_connection(module=self.module, port=442, timeout=90)
-
- def fail_when_deprecated_options_are_set(self, input_params):
- ''' report an error and exit if any deprecated options is set '''
-
- dparms_1g = [x for x in ('ip_address_1g', 'subnet_1g', 'gateway_address_1g', 'mtu_1g', 'bond_mode_1g', 'lacp_1g')
- if input_params[x] is not None]
- dparms_10g = [x for x in ('ip_address_10g', 'subnet_10g', 'gateway_address_10g', 'mtu_10g', 'bond_mode_10g', 'lacp_10g')
- if input_params[x] is not None]
- dparms_common = [x for x in ('dns_nameservers', 'dns_search_domains', 'virtual_network_tag')
- if input_params[x] is not None]
-
- error_msg = ''
- if dparms_1g and dparms_10g:
- error_msg = 'Please use the new bond_1g and bond_10g options to configure the bond interfaces.'
- elif dparms_1g:
- error_msg = 'Please use the new bond_1g option to configure the bond 1G interface.'
- elif dparms_10g:
- error_msg = 'Please use the new bond_10g option to configure the bond 10G interface.'
- elif dparms_common:
- error_msg = 'Please use the new bond_1g or bond_10g options to configure the bond interfaces.'
- if input_params['method']:
- error_msg = 'This module cannot set or change "method". ' + error_msg
- dparms_common.append('method')
- if error_msg:
- error_msg += ' The following parameters are deprecated and cannot be used: '
- dparms = dparms_1g
- dparms.extend(dparms_10g)
- dparms.extend(dparms_common)
- error_msg += ', '.join(dparms)
- self.module.fail_json(msg=error_msg)
-
- def set_network_config(self, network_object):
- """
- set network configuration
- """
- try:
- self.sfe.set_network_config(network=network_object)
- except (sf_ApiConnectionError, sf_ApiServerError) as exception_object:
- self.module.fail_json(msg='Error setting network config for node %s' % (to_native(exception_object)),
- exception=traceback.format_exc())
-
- def set_network_config_object(self, network_params):
- ''' set SolidFire network config object '''
- network_config = dict()
- if network_params is not None:
- for key in network_params:
- if network_params[key] is not None:
- network_config[key] = network_params[key]
- if network_config:
- return NetworkConfig(**network_config)
- return None
-
- def set_network_object(self):
- """
- Set Element SW Network object
- :description: set Network object
-
- :return: Network object
- :rtype: object(Network object)
- """
- bond_1g_network = self.set_network_config_object(self.bond1g)
- bond_10g_network = self.set_network_config_object(self.bond10g)
- network_object = None
- if bond_1g_network is not None or bond_10g_network is not None:
- network_object = Network(bond1_g=bond_1g_network,
- bond10_g=bond_10g_network)
- return network_object
-
- def apply(self):
- """
- Check connection and initialize node with cluster ownership
- """
- changed = False
- result_message = None
- network_object = self.set_network_object()
- if network_object is not None:
- if not self.module.check_mode:
- self.set_network_config(network_object)
- changed = True
- else:
- result_message = "Skipping changes, No change requested"
- self.module.exit_json(changed=changed, msg=result_message)
-
-
-def main():
- """
- Main function
- """
- elementsw_network_interfaces = ElementSWNetworkInterfaces()
- elementsw_network_interfaces.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_node.py b/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_node.py
deleted file mode 100644
index d1412f2d4..000000000
--- a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_node.py
+++ /dev/null
@@ -1,357 +0,0 @@
-#!/usr/bin/python
-# (c) 2018, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or
-# https://www.gnu.org/licenses/gpl-3.0.txt)
-
-'''
-Element Software Node Operation
-'''
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'certified'}
-
-
-DOCUMENTATION = '''
-
-module: na_elementsw_node
-
-short_description: NetApp Element Software Node Operation
-extends_documentation_fragment:
- - netapp.elementsw.netapp.solidfire
-version_added: 2.7.0
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-description:
- - Add, remove cluster node on Element Software Cluster.
- - Set cluster name on node.
- - When using the preset_only option, hostname/username/password are required but not used.
-
-options:
- state:
- description:
- - Element Software Storage Node operation state.
- - present - To add pending node to participate in cluster data storage.
- - absent - To remove node from active cluster. A node cannot be removed if active drives are present.
- choices: ['present', 'absent']
- default: 'present'
- type: str
-
- node_ids:
- description:
- - List of IDs or Names or IP Addresses of nodes to add or remove.
- - If cluster_name is set, node MIPs are required.
- type: list
- elements: str
- required: true
- aliases: ['node_id']
-
- cluster_name:
- description:
- - If set, the current node configuration is updated with this name before adding the node to the cluster.
- - This requires the node_ids to be specified as MIPs (Management IP Adresses)
- type: str
- version_added: 20.9.0
-
- preset_only:
- description:
- - If true and state is 'present', set the cluster name for each node in node_ids, but do not add the nodes.
- - They can be added using na_elementsw_cluster for initial cluster creation.
- - If false, proceed with addition/removal.
- type: bool
- default: false
- version_added: 20.9.0
-'''
-
-EXAMPLES = """
- - name: Add node from pending to active cluster
- tags:
- - elementsw_add_node
- na_elementsw_node:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: present
- node_id: sf4805-meg-03
-
- - name: Remove active node from cluster
- tags:
- - elementsw_remove_node
- na_elementsw_node:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: absent
- node_id: 13
-
- - name: Add node from pending to active cluster using node IP
- tags:
- - elementsw_add_node_ip
- na_elementsw_node:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: present
- node_id: 10.109.48.65
- cluster_name: sfcluster01
-
- - name: Only set cluster name
- tags:
- - elementsw_add_node_ip
- na_elementsw_node:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: present
- node_ids: 10.109.48.65,10.109.48.66
- cluster_name: sfcluster01
- preset_only: true
-"""
-
-
-RETURN = """
-
-msg:
- description: Success message
- returned: success
- type: str
-
-"""
-import traceback
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils._text import to_native
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-
-
-HAS_SF_SDK = netapp_utils.has_sf_sdk()
-
-
-class ElementSWNode(object):
- """
- Element SW Storage Node operations
- """
-
- def __init__(self):
- self.argument_spec = netapp_utils.ontap_sf_host_argument_spec()
- self.argument_spec.update(dict(
- state=dict(required=False, choices=['present', 'absent'], default='present'),
- node_ids=dict(required=True, type='list', elements='str', aliases=['node_id']),
- cluster_name=dict(required=False, type='str'),
- preset_only=dict(required=False, type='bool', default=False),
- ))
-
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- supports_check_mode=True
- )
-
- input_params = self.module.params
-
- self.state = input_params['state']
- self.node_ids = input_params['node_ids']
- self.cluster_name = input_params['cluster_name']
- self.preset_only = input_params['preset_only']
-
- if HAS_SF_SDK is False:
- self.module.fail_json(
- msg="Unable to import the SolidFire Python SDK")
- elif not self.preset_only:
- # Cluster connection is only needed for add/delete operations
- self.sfe = netapp_utils.create_sf_connection(module=self.module)
-
- def check_node_has_active_drives(self, node_id=None):
- """
- Check if node has active drives attached to cluster
- :description: Validate if node have active drives in cluster
-
- :return: True or False
- :rtype: bool
- """
- if node_id is not None:
- cluster_drives = self.sfe.list_drives()
- for drive in cluster_drives.drives:
- if drive.node_id == node_id and drive.status == "active":
- return True
- return False
-
- @staticmethod
- def extract_node_info(node_list):
- summary = list()
- for node in node_list:
- node_dict = dict()
- for key, value in vars(node).items():
- if key in ['assigned_node_id', 'cip', 'mip', 'name', 'node_id', 'pending_node_id', 'sip']:
- node_dict[key] = value
- summary.append(node_dict)
- return summary
-
- def get_node_list(self):
- """
- Get Node List
- :description: Find and retrieve node_ids from the active cluster
-
- :return: None
- :rtype: None
- """
- action_nodes_list = list()
- if len(self.node_ids) > 0:
- unprocessed_node_list = list(self.node_ids)
- list_nodes = []
- try:
- all_nodes = self.sfe.list_all_nodes()
- except netapp_utils.solidfire.common.ApiServerError as exception_object:
- self.module.fail_json(msg='Error getting list of nodes from cluster: %s' % to_native(exception_object),
- exception=traceback.format_exc())
-
- # For add operation lookup for nodes list with status pendingNodes list
- # else nodes will have to be traverse through active cluster
- if self.state == "present":
- list_nodes = all_nodes.pending_nodes
- else:
- list_nodes = all_nodes.nodes
-
- for current_node in list_nodes:
- if self.state == "absent" and \
- (str(current_node.node_id) in self.node_ids or current_node.name in self.node_ids or current_node.mip in self.node_ids):
- if self.check_node_has_active_drives(current_node.node_id):
- self.module.fail_json(msg='Error deleting node %s: node has active drives' % current_node.name)
- else:
- action_nodes_list.append(current_node.node_id)
- if self.state == "present" and \
- (str(current_node.pending_node_id) in self.node_ids or current_node.name in self.node_ids or current_node.mip in self.node_ids):
- action_nodes_list.append(current_node.pending_node_id)
-
- # report an error if state == present and node is unknown
- if self.state == "present":
- for current_node in all_nodes.nodes:
- if str(current_node.node_id) in unprocessed_node_list:
- unprocessed_node_list.remove(str(current_node.node_id))
- elif current_node.name in unprocessed_node_list:
- unprocessed_node_list.remove(current_node.name)
- elif current_node.mip in unprocessed_node_list:
- unprocessed_node_list.remove(current_node.mip)
- for current_node in all_nodes.pending_nodes:
- if str(current_node.pending_node_id) in unprocessed_node_list:
- unprocessed_node_list.remove(str(current_node.pending_node_id))
- elif current_node.name in unprocessed_node_list:
- unprocessed_node_list.remove(current_node.name)
- elif current_node.mip in unprocessed_node_list:
- unprocessed_node_list.remove(current_node.mip)
- if len(unprocessed_node_list) > 0:
- summary = dict(
- nodes=self.extract_node_info(all_nodes.nodes),
- pending_nodes=self.extract_node_info(all_nodes.pending_nodes),
- pending_active_nodes=self.extract_node_info(all_nodes.pending_active_nodes)
- )
- self.module.fail_json(msg='Error adding nodes %s: nodes not in pending or active lists: %s' %
- (to_native(unprocessed_node_list), repr(summary)))
- return action_nodes_list
-
- def add_node(self, nodes_list=None):
- """
- Add Node that are on PendingNodes list available on Cluster
- """
- try:
- self.sfe.add_nodes(nodes_list, auto_install=True)
- except Exception as exception_object:
- self.module.fail_json(msg='Error adding nodes %s to cluster: %s' % (nodes_list, to_native(exception_object)),
- exception=traceback.format_exc())
-
- def remove_node(self, nodes_list=None):
- """
- Remove active node from Cluster
- """
- try:
- self.sfe.remove_nodes(nodes_list)
- except Exception as exception_object:
- self.module.fail_json(msg='Error removing nodes %s from cluster %s' % (nodes_list, to_native(exception_object)),
- exception=traceback.format_exc())
-
- def set_cluster_name(self, node):
- ''' set up cluster name for the node using its MIP '''
- cluster = dict(cluster=self.cluster_name)
- port = 442
- try:
- node_cx = netapp_utils.create_sf_connection(module=self.module, raise_on_connection_error=True, hostname=node, port=port)
- except netapp_utils.solidfire.common.ApiConnectionError as exc:
- if str(exc) == "Bad Credentials":
- msg = 'Most likely the node %s is already in a cluster.' % node
- msg += ' Make sure to use valid node credentials for username and password.'
- msg += ' Node reported: %s' % repr(exc)
- else:
- msg = 'Failed to create connection: %s' % repr(exc)
- self.module.fail_json(msg=msg)
- except Exception as exc:
- self.module.fail_json(msg='Failed to connect to %s:%d - %s' % (node, port, to_native(exc)),
- exception=traceback.format_exc())
-
- try:
- cluster_config = node_cx.get_cluster_config()
- except netapp_utils.solidfire.common.ApiServerError as exc:
- self.module.fail_json(msg='Error getting cluster config: %s' % to_native(exc),
- exception=traceback.format_exc())
-
- if cluster_config.cluster.cluster == self.cluster_name:
- return False
- if cluster_config.cluster.state == 'Active':
- self.module.fail_json(msg="Error updating cluster name for node %s, already in 'Active' state"
- % node, cluster_config=repr(cluster_config))
- if self.module.check_mode:
- return True
-
- try:
- node_cx.set_cluster_config(cluster)
- except netapp_utils.solidfire.common.ApiServerError as exc:
- self.module.fail_json(msg='Error updating cluster name: %s' % to_native(exc),
- cluster_config=repr(cluster_config),
- exception=traceback.format_exc())
- return True
-
- def apply(self):
- """
- Check, process and initiate Cluster Node operation
- """
- changed = False
- updated_nodes = list()
- result_message = ''
- if self.state == "present" and self.cluster_name is not None:
- for node in self.node_ids:
- if self.set_cluster_name(node):
- changed = True
- updated_nodes.append(node)
- if not self.preset_only:
- # let's see if there is anything to add or remove
- action_nodes_list = self.get_node_list()
- action = None
- if self.state == "present" and len(action_nodes_list) > 0:
- changed = True
- action = 'added'
- if not self.module.check_mode:
- self.add_node(action_nodes_list)
- elif self.state == "absent" and len(action_nodes_list) > 0:
- changed = True
- action = 'removed'
- if not self.module.check_mode:
- self.remove_node(action_nodes_list)
- if action:
- result_message = 'List of %s nodes: %s - requested: %s' % (action, to_native(action_nodes_list), to_native(self.node_ids))
- if updated_nodes:
- result_message += '\n' if result_message else ''
- result_message += 'List of updated nodes with %s: %s' % (self.cluster_name, updated_nodes)
- self.module.exit_json(changed=changed, msg=result_message)
-
-
-def main():
- """
- Main function
- """
-
- na_elementsw_node = ElementSWNode()
- na_elementsw_node.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_qos_policy.py b/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_qos_policy.py
deleted file mode 100644
index 9d9e16994..000000000
--- a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_qos_policy.py
+++ /dev/null
@@ -1,270 +0,0 @@
-#!/usr/bin/python
-
-# (c) 2020, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or
-# https://www.gnu.org/licenses/gpl-3.0.txt)
-
-"""
-Element Software QOS Policy
-"""
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'certified'}
-
-
-DOCUMENTATION = '''
-
-module: na_elementsw_qos_policy
-
-short_description: NetApp Element Software create/modify/rename/delete QOS Policy
-extends_documentation_fragment:
- - netapp.elementsw.netapp.solidfire
-version_added: 20.9.0
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-description:
-- Create, modify, rename, or delete QOS policy on Element Software Cluster.
-
-options:
-
- state:
- description:
- - Whether the specified QOS policy should exist or not.
- choices: ['present', 'absent']
- default: present
- type: str
-
- name:
- description:
- - Name or id for the QOS policy.
- required: true
- type: str
-
- from_name:
- description:
- - Name or id for the QOS policy to be renamed.
- type: str
-
- qos:
- description:
- - The quality of service (QQOS) for the policy.
- - Required for create
- - Supported keys are minIOPS, maxIOPS, burstIOPS
- type: dict
- suboptions:
- minIOPS:
- description: The minimum number of IOPS guaranteed for the volume.
- type: int
- version_added: 21.3.0
- maxIOPS:
- description: The maximum number of IOPS allowed for the volume.
- type: int
- version_added: 21.3.0
- burstIOPS:
- description: The maximum number of IOPS allowed over a short period of time for the volume.
- type: int
- version_added: 21.3.0
- debug:
- description: report additional information when set to true.
- type: bool
- default: false
- version_added: 21.3.0
-'''
-
-EXAMPLES = """
- - name: Add QOS Policy
- na_elementsw_qos_policy:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: present
- name: gold
- qos: {minIOPS: 1000, maxIOPS: 20000, burstIOPS: 50000}
-
- - name: Modify QOS Policy
- na_elementsw_qos_policy:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: absent
- name: gold
- qos: {minIOPS: 100, maxIOPS: 5000, burstIOPS: 20000}
-
- - name: Rename QOS Policy
- na_elementsw_qos_policy:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: absent
- from_name: gold
- name: silver
-
- - name: Remove QOS Policy
- na_elementsw_qos_policy:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: absent
- name: silver
-"""
-
-
-RETURN = """
-"""
-
-import traceback
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils._text import to_native
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.elementsw.plugins.module_utils.netapp_elementsw_module import NaElementSWModule
-from ansible_collections.netapp.elementsw.plugins.module_utils.netapp_module import NetAppModule
-
-
-HAS_SF_SDK = netapp_utils.has_sf_sdk()
-try:
- import solidfire.common
-except ImportError:
- HAS_SF_SDK = False
-
-
-class ElementSWQosPolicy(object):
- """
- Element Software QOS Policy
- """
-
- def __init__(self):
-
- self.argument_spec = netapp_utils.ontap_sf_host_argument_spec()
- self.argument_spec.update(dict(
- state=dict(required=False, type='str', choices=['present', 'absent'], default='present'),
- name=dict(required=True, type='str'),
- from_name=dict(required=False, type='str'),
- qos=dict(required=False, type='dict', options=dict(
- minIOPS=dict(type='int'),
- maxIOPS=dict(type='int'),
- burstIOPS=dict(type='int'),
- )),
- debug=dict(required=False, type='bool', default=False)
- ))
-
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- supports_check_mode=True
- )
-
- # Set up state variables
- self.na_helper = NetAppModule()
- self.parameters = self.na_helper.set_parameters(self.module.params)
- self.qos_policy_id = None
- self.debug = dict()
-
- if HAS_SF_SDK is False:
- self.module.fail_json(msg="Unable to import the SolidFire Python SDK")
- else:
- self.sfe = netapp_utils.create_sf_connection(module=self.module)
-
- self.elementsw_helper = NaElementSWModule(self.sfe)
-
- # add telemetry attributes
- self.attributes = self.elementsw_helper.set_element_attributes(source='na_elementsw_qos_policy')
-
- def get_qos_policy(self, name):
- """
- Get QOS Policy
- """
- policy, error = self.elementsw_helper.get_qos_policy(name)
- if error is not None:
- self.module.fail_json(msg=error, exception=traceback.format_exc())
- self.debug['current_policy'] = policy
- return policy
-
- def create_qos_policy(self, name, qos):
- """
- Create the QOS Policy
- """
- try:
- self.sfe.create_qos_policy(name=name, qos=qos)
- except (solidfire.common.ApiServerError, solidfire.common.ApiConnectionError) as exc:
- self.module.fail_json(msg="Error creating qos policy: %s: %s" %
- (name, to_native(exc)), exception=traceback.format_exc())
-
- def update_qos_policy(self, qos_policy_id, modify, name=None):
- """
- Update the QOS Policy if the policy already exists
- """
- options = dict(
- qos_policy_id=qos_policy_id
- )
- if name is not None:
- options['name'] = name
- if 'qos' in modify:
- options['qos'] = modify['qos']
-
- try:
- self.sfe.modify_qos_policy(**options)
- except (solidfire.common.ApiServerError, solidfire.common.ApiConnectionError) as exc:
- self.module.fail_json(msg="Error updating qos policy: %s: %s" %
- (self.parameters['from_name'] if name is not None else self.parameters['name'], to_native(exc)),
- exception=traceback.format_exc())
-
- def delete_qos_policy(self, qos_policy_id):
- """
- Delete the QOS Policy
- """
- try:
- self.sfe.delete_qos_policy(qos_policy_id=qos_policy_id)
- except (solidfire.common.ApiServerError, solidfire.common.ApiConnectionError) as exc:
- self.module.fail_json(msg="Error deleting qos policy: %s: %s" %
- (self.parameters['name'], to_native(exc)), exception=traceback.format_exc())
-
- def apply(self):
- """
- Process the create/delete/rename/modify actions for qos policy on the Element Software Cluster
- """
- modify = dict()
- current = self.get_qos_policy(self.parameters['name'])
- qos_policy_id = None if current is None else current['qos_policy_id']
- cd_action = self.na_helper.get_cd_action(current, self.parameters)
- modify = self.na_helper.get_modified_attributes(current, self.parameters)
- if cd_action == 'create' and self.parameters.get('from_name') is not None:
- from_qos_policy = self.get_qos_policy(self.parameters['from_name'])
- if from_qos_policy is None:
- self.module.fail_json(msg="Error renaming qos policy, no existing policy with name/id: %s" % self.parameters['from_name'])
- cd_action = 'rename'
- qos_policy_id = from_qos_policy['qos_policy_id']
- self.na_helper.changed = True
- modify = self.na_helper.get_modified_attributes(from_qos_policy, self.parameters)
- if cd_action == 'create' and 'qos' not in self.parameters:
- self.module.fail_json(msg="Error creating qos policy: %s, 'qos:' option is required" % self.parameters['name'])
- self.debug['modify'] = modify
-
- if not self.module.check_mode:
- if cd_action == 'create':
- self.create_qos_policy(self.parameters['name'], self.parameters['qos'])
- elif cd_action == 'delete':
- self.delete_qos_policy(qos_policy_id)
- elif cd_action == 'rename':
- self.update_qos_policy(qos_policy_id, modify, name=self.parameters['name'])
- elif modify:
- self.update_qos_policy(qos_policy_id, modify)
-
- results = dict(changed=self.na_helper.changed)
- if self.parameters['debug']:
- results['debug'] = self.debug
- self.module.exit_json(**results)
-
-
-def main():
- """
- Main function
- """
- na_elementsw_qos_policy = ElementSWQosPolicy()
- na_elementsw_qos_policy.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_snapshot.py b/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_snapshot.py
deleted file mode 100644
index 23144e42e..000000000
--- a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_snapshot.py
+++ /dev/null
@@ -1,369 +0,0 @@
-#!/usr/bin/python
-# (c) 2018, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or
-# https://www.gnu.org/licenses/gpl-3.0.txt)
-
-'''
-Element OS Software Snapshot Manager
-'''
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'certified'}
-
-
-DOCUMENTATION = '''
-
-module: na_elementsw_snapshot
-
-short_description: NetApp Element Software Manage Snapshots
-extends_documentation_fragment:
- - netapp.elementsw.netapp.solidfire
-version_added: 2.7.0
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-description:
- - Create, Modify or Delete Snapshot on Element OS Cluster.
-
-options:
- name:
- description:
- - Name of new snapshot create.
- - If unspecified, date and time when the snapshot was taken is used.
- type: str
-
- state:
- description:
- - Whether the specified snapshot should exist or not.
- choices: ['present', 'absent']
- default: 'present'
- type: str
-
- src_volume_id:
- description:
- - ID or Name of active volume.
- required: true
- type: str
-
- account_id:
- description:
- - Account ID or Name of Parent/Source Volume.
- required: true
- type: str
-
- retention:
- description:
- - Retention period for the snapshot.
- - Format is 'HH:mm:ss'.
- type: str
-
- src_snapshot_id:
- description:
- - ID or Name of an existing snapshot.
- - Required when C(state=present), to modify snapshot properties.
- - Required when C(state=present), to create snapshot from another snapshot in the volume.
- - Required when C(state=absent), to delete snapshot.
- type: str
-
- enable_remote_replication:
- description:
- - Flag, whether to replicate the snapshot created to a remote replication cluster.
- - To enable specify 'true' value.
- type: bool
-
- snap_mirror_label:
- description:
- - Label used by SnapMirror software to specify snapshot retention policy on SnapMirror endpoint.
- type: str
-
- expiration_time:
- description:
- - The date and time (format ISO 8601 date string) at which this snapshot will expire.
- type: str
-'''
-
-EXAMPLES = """
- - name: Create snapshot
- tags:
- - elementsw_create_snapshot
- na_elementsw_snapshot:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: present
- src_volume_id: 118
- account_id: sagarsh
- name: newsnapshot-1
-
- - name: Modify Snapshot
- tags:
- - elementsw_modify_snapshot
- na_elementsw_snapshot:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: present
- src_volume_id: sagarshansivolume
- src_snapshot_id: test1
- account_id: sagarsh
- expiration_time: '2018-06-16T12:24:56Z'
- enable_remote_replication: false
-
- - name: Delete Snapshot
- tags:
- - elementsw_delete_snapshot
- na_elementsw_snapshot:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: absent
- src_snapshot_id: deltest1
- account_id: sagarsh
- src_volume_id: sagarshansivolume
-"""
-
-
-RETURN = """
-
-msg:
- description: Success message
- returned: success
- type: str
-
-"""
-import traceback
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils._text import to_native
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.elementsw.plugins.module_utils.netapp_elementsw_module import NaElementSWModule
-
-
-HAS_SF_SDK = netapp_utils.has_sf_sdk()
-
-
-class ElementOSSnapshot(object):
- """
- Element OS Snapshot Manager
- """
-
- def __init__(self):
- self.argument_spec = netapp_utils.ontap_sf_host_argument_spec()
- self.argument_spec.update(dict(
- state=dict(required=False, choices=['present', 'absent'], default='present'),
- account_id=dict(required=True, type='str'),
- name=dict(required=False, type='str'),
- src_volume_id=dict(required=True, type='str'),
- retention=dict(required=False, type='str'),
- src_snapshot_id=dict(required=False, type='str'),
- enable_remote_replication=dict(required=False, type='bool'),
- expiration_time=dict(required=False, type='str'),
- snap_mirror_label=dict(required=False, type='str')
- ))
-
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- supports_check_mode=True
- )
-
- input_params = self.module.params
-
- self.state = input_params['state']
- self.name = input_params['name']
- self.account_id = input_params['account_id']
- self.src_volume_id = input_params['src_volume_id']
- self.src_snapshot_id = input_params['src_snapshot_id']
- self.retention = input_params['retention']
- self.properties_provided = False
-
- self.expiration_time = input_params['expiration_time']
- if input_params['expiration_time'] is not None:
- self.properties_provided = True
-
- self.enable_remote_replication = input_params['enable_remote_replication']
- if input_params['enable_remote_replication'] is not None:
- self.properties_provided = True
-
- self.snap_mirror_label = input_params['snap_mirror_label']
- if input_params['snap_mirror_label'] is not None:
- self.properties_provided = True
-
- if self.state == 'absent' and self.src_snapshot_id is None:
- self.module.fail_json(
- msg="Please provide required parameter : snapshot_id")
-
- if HAS_SF_SDK is False:
- self.module.fail_json(
- msg="Unable to import the SolidFire Python SDK")
- else:
- self.sfe = netapp_utils.create_sf_connection(module=self.module)
-
- self.elementsw_helper = NaElementSWModule(self.sfe)
-
- # add telemetry attributes
- self.attributes = self.elementsw_helper.set_element_attributes(source='na_elementsw_snapshot')
-
- def get_account_id(self):
- """
- Return account id if found
- """
- try:
- # Update and return self.account_id
- self.account_id = self.elementsw_helper.account_exists(self.account_id)
- return self.account_id
- except Exception as err:
- self.module.fail_json(msg="Error: account_id %s does not exist" % self.account_id, exception=to_native(err))
-
- def get_src_volume_id(self):
- """
- Return volume id if found
- """
- src_vol_id = self.elementsw_helper.volume_exists(self.src_volume_id, self.account_id)
- if src_vol_id is not None:
- # Update and return self.volume_id
- self.src_volume_id = src_vol_id
- # Return src_volume_id
- return self.src_volume_id
- return None
-
- def get_snapshot(self, name=None):
- """
- Return snapshot details if found
- """
- src_snapshot = None
- if name is not None:
- src_snapshot = self.elementsw_helper.get_snapshot(name, self.src_volume_id)
- elif self.src_snapshot_id is not None:
- src_snapshot = self.elementsw_helper.get_snapshot(self.src_snapshot_id, self.src_volume_id)
- if src_snapshot is not None:
- # Update self.src_snapshot_id
- self.src_snapshot_id = src_snapshot.snapshot_id
- # Return src_snapshot
- return src_snapshot
-
- def create_snapshot(self):
- """
- Create Snapshot
- """
- try:
- self.sfe.create_snapshot(volume_id=self.src_volume_id,
- snapshot_id=self.src_snapshot_id,
- name=self.name,
- enable_remote_replication=self.enable_remote_replication,
- retention=self.retention,
- snap_mirror_label=self.snap_mirror_label,
- attributes=self.attributes)
- except Exception as exception_object:
- self.module.fail_json(
- msg='Error creating snapshot %s' % (
- to_native(exception_object)),
- exception=traceback.format_exc())
-
- def modify_snapshot(self):
- """
- Modify Snapshot Properties
- """
- try:
- self.sfe.modify_snapshot(snapshot_id=self.src_snapshot_id,
- expiration_time=self.expiration_time,
- enable_remote_replication=self.enable_remote_replication,
- snap_mirror_label=self.snap_mirror_label)
- except Exception as exception_object:
- self.module.fail_json(
- msg='Error modify snapshot %s' % (
- to_native(exception_object)),
- exception=traceback.format_exc())
-
- def delete_snapshot(self):
- """
- Delete Snapshot
- """
- try:
- self.sfe.delete_snapshot(snapshot_id=self.src_snapshot_id)
- except Exception as exception_object:
- self.module.fail_json(
- msg='Error delete snapshot %s' % (
- to_native(exception_object)),
- exception=traceback.format_exc())
-
- def apply(self):
- """
- Check, process and initiate snapshot operation
- """
- changed = False
- result_message = None
- self.get_account_id()
-
- # Dont proceed if source volume is not found
- if self.get_src_volume_id() is None:
- self.module.fail_json(msg="Volume id not found %s" % self.src_volume_id)
-
- # Get snapshot details using source volume
- snapshot_detail = self.get_snapshot()
-
- if snapshot_detail:
- if self.properties_provided:
- if self.expiration_time != snapshot_detail.expiration_time:
- changed = True
- else: # To preserve value in case parameter expiration_time is not defined/provided.
- self.expiration_time = snapshot_detail.expiration_time
-
- if self.enable_remote_replication != snapshot_detail.enable_remote_replication:
- changed = True
- else: # To preserve value in case parameter enable_remote_Replication is not defined/provided.
- self.enable_remote_replication = snapshot_detail.enable_remote_replication
-
- if self.snap_mirror_label != snapshot_detail.snap_mirror_label:
- changed = True
- else: # To preserve value in case parameter snap_mirror_label is not defined/provided.
- self.snap_mirror_label = snapshot_detail.snap_mirror_label
-
- if self.account_id is None or self.src_volume_id is None or self.module.check_mode:
- changed = False
- result_message = "Check mode, skipping changes"
- elif self.state == 'absent' and snapshot_detail is not None:
- self.delete_snapshot()
- changed = True
- elif self.state == 'present' and snapshot_detail is not None:
- if changed:
- self.modify_snapshot() # Modify Snapshot properties
- elif not self.properties_provided:
- if self.name is not None:
- snapshot = self.get_snapshot(self.name)
- # If snapshot with name already exists return without performing any action
- if snapshot is None:
- self.create_snapshot() # Create Snapshot using parent src_snapshot_id
- changed = True
- else:
- self.create_snapshot()
- changed = True
- elif self.state == 'present':
- if self.name is not None:
- snapshot = self.get_snapshot(self.name)
- # If snapshot with name already exists return without performing any action
- if snapshot is None:
- self.create_snapshot() # Create Snapshot using parent src_snapshot_id
- changed = True
- else:
- self.create_snapshot()
- changed = True
- else:
- changed = False
- result_message = "No changes requested, skipping changes"
-
- self.module.exit_json(changed=changed, msg=result_message)
-
-
-def main():
- """
- Main function
- """
-
- na_elementsw_snapshot = ElementOSSnapshot()
- na_elementsw_snapshot.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_snapshot_restore.py b/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_snapshot_restore.py
deleted file mode 100644
index 1e9d8e59a..000000000
--- a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_snapshot_restore.py
+++ /dev/null
@@ -1,203 +0,0 @@
-#!/usr/bin/python
-
-# (c) 2018, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or
-# https://www.gnu.org/licenses/gpl-3.0.txt)
-
-"""
-Element Software Snapshot Restore
-"""
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'certified'}
-
-
-DOCUMENTATION = '''
-
-module: na_elementsw_snapshot_restore
-
-short_description: NetApp Element Software Restore Snapshot
-extends_documentation_fragment:
- - netapp.elementsw.netapp.solidfire
-version_added: 2.7.0
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-description:
-- Element OS Cluster restore snapshot to volume.
-
-options:
-
- src_volume_id:
- description:
- - ID or Name of source active volume.
- required: true
- type: str
-
- src_snapshot_id:
- description:
- - ID or Name of an existing snapshot.
- required: true
- type: str
-
- dest_volume_name:
- description:
- - New Name of destination for restoring the snapshot
- required: true
- type: str
-
- account_id:
- description:
- - Account ID or Name of Parent/Source Volume.
- required: true
- type: str
-'''
-
-EXAMPLES = """
- - name: Restore snapshot to volume
- tags:
- - elementsw_create_snapshot_restore
- na_elementsw_snapshot_restore:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- account_id: ansible-1
- src_snapshot_id: snapshot_20171021
- src_volume_id: volume-playarea
- dest_volume_name: dest-volume-area
-
-"""
-
-
-RETURN = """
-
-msg:
- description: Success message
- returned: success
- type: str
-
-"""
-import traceback
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils._text import to_native
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.elementsw.plugins.module_utils.netapp_elementsw_module import NaElementSWModule
-
-HAS_SF_SDK = netapp_utils.has_sf_sdk()
-
-
-class ElementOSSnapshotRestore(object):
- """
- Element OS Restore from snapshot
- """
-
- def __init__(self):
- self.argument_spec = netapp_utils.ontap_sf_host_argument_spec()
- self.argument_spec.update(dict(
- account_id=dict(required=True, type='str'),
- src_volume_id=dict(required=True, type='str'),
- dest_volume_name=dict(required=True, type='str'),
- src_snapshot_id=dict(required=True, type='str')
- ))
-
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- supports_check_mode=True
- )
-
- input_params = self.module.params
-
- self.account_id = input_params['account_id']
- self.src_volume_id = input_params['src_volume_id']
- self.dest_volume_name = input_params['dest_volume_name']
- self.src_snapshot_id = input_params['src_snapshot_id']
-
- if HAS_SF_SDK is False:
- self.module.fail_json(
- msg="Unable to import the SolidFire Python SDK")
- else:
- self.sfe = netapp_utils.create_sf_connection(module=self.module)
-
- self.elementsw_helper = NaElementSWModule(self.sfe)
-
- # add telemetry attributes
- self.attributes = self.elementsw_helper.set_element_attributes(source='na_elementsw_snapshot_restore')
-
- def get_account_id(self):
- """
- Get account id if found
- """
- try:
- # Update and return self.account_id
- self.account_id = self.elementsw_helper.account_exists(self.account_id)
- return self.account_id
- except Exception as err:
- self.module.fail_json(msg="Error: account_id %s does not exist" % self.account_id, exception=to_native(err))
-
- def get_snapshot_id(self):
- """
- Return snapshot details if found
- """
- src_snapshot = self.elementsw_helper.get_snapshot(self.src_snapshot_id, self.src_volume_id)
- # Update and return self.src_snapshot_id
- if src_snapshot:
- self.src_snapshot_id = src_snapshot.snapshot_id
- # Return self.src_snapshot_id
- return self.src_snapshot_id
- return None
-
- def restore_snapshot(self):
- """
- Restore Snapshot to Volume
- """
- try:
- self.sfe.clone_volume(volume_id=self.src_volume_id,
- name=self.dest_volume_name,
- snapshot_id=self.src_snapshot_id,
- attributes=self.attributes)
- except Exception as exception_object:
- self.module.fail_json(
- msg='Error restore snapshot %s' % (to_native(exception_object)),
- exception=traceback.format_exc())
-
- def apply(self):
- """
- Check, process and initiate restore snapshot to volume operation
- """
- changed = False
- result_message = None
- self.get_account_id()
- src_vol_id = self.elementsw_helper.volume_exists(self.src_volume_id, self.account_id)
-
- if src_vol_id is not None:
- # Update self.src_volume_id
- self.src_volume_id = src_vol_id
- if self.get_snapshot_id() is not None:
- # Addressing idempotency by comparing volume does not exist with same volume name
- if self.elementsw_helper.volume_exists(self.dest_volume_name, self.account_id) is None:
- self.restore_snapshot()
- changed = True
- else:
- result_message = "No changes requested, Skipping changes"
- else:
- self.module.fail_json(msg="Snapshot id not found %s" % self.src_snapshot_id)
- else:
- self.module.fail_json(msg="Volume id not found %s" % self.src_volume_id)
-
- self.module.exit_json(changed=changed, msg=result_message)
-
-
-def main():
- """
- Main function
- """
- na_elementsw_snapshot_restore = ElementOSSnapshotRestore()
- na_elementsw_snapshot_restore.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_snapshot_schedule.py b/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_snapshot_schedule.py
deleted file mode 100644
index 2ace1bd4b..000000000
--- a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_snapshot_schedule.py
+++ /dev/null
@@ -1,586 +0,0 @@
-#!/usr/bin/python
-# (c) 2017, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-"""Element SW Software Snapshot Schedule"""
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'certified'}
-
-
-DOCUMENTATION = '''
-
-module: na_elementsw_snapshot_schedule
-
-short_description: NetApp Element Software Snapshot Schedules
-extends_documentation_fragment:
- - netapp.elementsw.netapp.solidfire
-version_added: 2.7.0
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-description:
-- Create, destroy, or update snapshot schedules on ElementSW
-
-options:
-
- state:
- description:
- - Whether the specified schedule should exist or not.
- choices: ['present', 'absent']
- default: present
- type: str
-
- paused:
- description:
- - Pause / Resume a schedule.
- type: bool
-
- recurring:
- description:
- - Should the schedule recur?
- type: bool
-
- schedule_type:
- description:
- - Schedule type for creating schedule.
- choices: ['DaysOfWeekFrequency','DaysOfMonthFrequency','TimeIntervalFrequency']
- type: str
-
- time_interval_days:
- description: Time interval in days.
- type: int
-
- time_interval_hours:
- description: Time interval in hours.
- type: int
-
- time_interval_minutes:
- description: Time interval in minutes.
- type: int
-
- days_of_week_weekdays:
- description: List of days of the week (Sunday to Saturday)
- type: list
- elements: str
-
- days_of_week_hours:
- description: Time specified in hours
- type: int
-
- days_of_week_minutes:
- description: Time specified in minutes.
- type: int
-
- days_of_month_monthdays:
- description: List of days of the month (1-31)
- type: list
- elements: int
-
- days_of_month_hours:
- description: Time specified in hours
- type: int
-
- days_of_month_minutes:
- description: Time specified in minutes.
- type: int
-
- name:
- description:
- - Name for the snapshot schedule.
- - It accepts either schedule_id or schedule_name
- - if name is digit, it will consider as schedule_id
- - If name is string, it will consider as schedule_name
- required: true
- type: str
-
- snapshot_name:
- description:
- - Name for the created snapshots.
- type: str
-
- volumes:
- description:
- - Volume IDs that you want to set the snapshot schedule for.
- - It accepts both volume_name and volume_id
- type: list
- elements: str
-
- account_id:
- description:
- - Account ID for the owner of this volume.
- - It accepts either account_name or account_id
- - if account_id is digit, it will consider as account_id
- - If account_id is string, it will consider as account_name
- type: str
-
- retention:
- description:
- - Retention period for the snapshot.
- - Format is 'HH:mm:ss'.
- type: str
-
- starting_date:
- description:
- - Starting date for the schedule.
- - Required when C(state=present).
- - "Format: C(2016-12-01T00:00:00Z)"
- type: str
-'''
-
-EXAMPLES = """
- - name: Create Snapshot schedule
- na_elementsw_snapshot_schedule:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: present
- name: Schedule_A
- schedule_type: TimeIntervalFrequency
- time_interval_days: 1
- starting_date: '2016-12-01T00:00:00Z'
- retention: '24:00:00'
- volumes:
- - 7
- - test
- account_id: 1
-
- - name: Update Snapshot schedule
- na_elementsw_snapshot_schedule:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: present
- name: Schedule_A
- schedule_type: TimeIntervalFrequency
- time_interval_days: 1
- starting_date: '2016-12-01T00:00:00Z'
- retention: '24:00:00'
- volumes:
- - 8
- - test1
- account_id: 1
-
- - name: Delete Snapshot schedule
- na_elementsw_snapshot_schedule:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: absent
- name: 6
-"""
-
-RETURN = """
-
-schedule_id:
- description: Schedule ID of the newly created schedule
- returned: success
- type: str
-"""
-import traceback
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils._text import to_native
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.elementsw.plugins.module_utils.netapp_elementsw_module import NaElementSWModule
-
-HAS_SF_SDK = netapp_utils.has_sf_sdk()
-try:
- from solidfire.custom.models import DaysOfWeekFrequency, Weekday, DaysOfMonthFrequency
- from solidfire.common import ApiConnectionError, ApiServerError
- from solidfire.custom.models import TimeIntervalFrequency
- from solidfire.models import Schedule, ScheduleInfo
-except ImportError:
- HAS_SF_SDK = False
-
-try:
- # Hack to see if we we have the 1.7 version of the SDK, or later
- from solidfire.common.model import VER3
- HAS_SF_SDK_1_7 = True
- del VER3
-except ImportError:
- HAS_SF_SDK_1_7 = False
-
-
-class ElementSWSnapShotSchedule(object):
- """
- Contains methods to parse arguments,
- derive details of ElementSW objects
- and send requests to ElementSW via
- the ElementSW SDK
- """
-
- def __init__(self):
- """
- Parse arguments, setup state variables,
- check paramenters and ensure SDK is installed
- """
- self.argument_spec = netapp_utils.ontap_sf_host_argument_spec()
- self.argument_spec.update(dict(
- state=dict(required=False, type='str', choices=['present', 'absent'], default='present'),
- name=dict(required=True, type='str'),
- schedule_type=dict(required=False, choices=['DaysOfWeekFrequency', 'DaysOfMonthFrequency', 'TimeIntervalFrequency']),
-
- time_interval_days=dict(required=False, type='int'),
- time_interval_hours=dict(required=False, type='int'),
- time_interval_minutes=dict(required=False, type='int'),
-
- days_of_week_weekdays=dict(required=False, type='list', elements='str'),
- days_of_week_hours=dict(required=False, type='int'),
- days_of_week_minutes=dict(required=False, type='int'),
-
- days_of_month_monthdays=dict(required=False, type='list', elements='int'),
- days_of_month_hours=dict(required=False, type='int'),
- days_of_month_minutes=dict(required=False, type='int'),
-
- paused=dict(required=False, type='bool'),
- recurring=dict(required=False, type='bool'),
-
- starting_date=dict(required=False, type='str'),
-
- snapshot_name=dict(required=False, type='str'),
- volumes=dict(required=False, type='list', elements='str'),
- account_id=dict(required=False, type='str'),
- retention=dict(required=False, type='str'),
- ))
-
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- required_if=[
- ('state', 'present', ['account_id', 'volumes', 'schedule_type']),
- ('schedule_type', 'DaysOfMonthFrequency', ['days_of_month_monthdays']),
- ('schedule_type', 'DaysOfWeekFrequency', ['days_of_week_weekdays'])
-
- ],
- supports_check_mode=True
- )
-
- param = self.module.params
-
- # set up state variables
- self.state = param['state']
- self.name = param['name']
- self.schedule_type = param['schedule_type']
- self.days_of_week_weekdays = param['days_of_week_weekdays']
- self.days_of_week_hours = param['days_of_week_hours']
- self.days_of_week_minutes = param['days_of_week_minutes']
- self.days_of_month_monthdays = param['days_of_month_monthdays']
- self.days_of_month_hours = param['days_of_month_hours']
- self.days_of_month_minutes = param['days_of_month_minutes']
- self.time_interval_days = param['time_interval_days']
- self.time_interval_hours = param['time_interval_hours']
- self.time_interval_minutes = param['time_interval_minutes']
- self.paused = param['paused']
- self.recurring = param['recurring']
- if self.schedule_type == 'DaysOfWeekFrequency':
- # Create self.weekday list if self.schedule_type is days_of_week
- if self.days_of_week_weekdays is not None:
- # Create self.weekday list if self.schedule_type is days_of_week
- self.weekdays = []
- for day in self.days_of_week_weekdays:
- if str(day).isdigit():
- # If id specified, return appropriate day
- self.weekdays.append(Weekday.from_id(int(day)))
- else:
- # If name specified, return appropriate day
- self.weekdays.append(Weekday.from_name(day.capitalize()))
-
- if self.state == 'present' and self.schedule_type is None:
- # Mandate schedule_type for create operation
- self.module.fail_json(
- msg="Please provide required parameter: schedule_type")
-
- # Mandate schedule name for delete operation
- if self.state == 'absent' and self.name is None:
- self.module.fail_json(
- msg="Please provide required parameter: name")
-
- self.starting_date = param['starting_date']
- self.snapshot_name = param['snapshot_name']
- self.volumes = param['volumes']
- self.account_id = param['account_id']
- self.retention = param['retention']
- self.create_schedule_result = None
-
- if HAS_SF_SDK is False:
- # Create ElementSW connection
- self.module.fail_json(msg="Unable to import the ElementSW Python SDK")
- else:
- self.sfe = netapp_utils.create_sf_connection(module=self.module)
- self.elementsw_helper = NaElementSWModule(self.sfe)
-
- def get_schedule(self):
- # Checking whether schedule id is exist or not
- # Return schedule details if found, None otherwise
- # If exist set variable self.name
- try:
- schedule_list = self.sfe.list_schedules()
- except ApiServerError:
- return None
-
- for schedule in schedule_list.schedules:
- if schedule.to_be_deleted:
- # skip this schedule if it is being deleted, it can as well not exist
- continue
- if str(schedule.schedule_id) == self.name:
- self.name = schedule.name
- return schedule
- elif schedule.name == self.name:
- return schedule
- return None
-
- def get_account_id(self):
- # Validate account id
- # Return account_id if found, None otherwise
- try:
- account_id = self.elementsw_helper.account_exists(self.account_id)
- return account_id
- except ApiServerError:
- return None
-
- def get_volume_id(self):
- # Validate volume_ids
- # Return volume ids if found, fail if not found
- volume_ids = []
- for volume in self.volumes:
- volume_id = self.elementsw_helper.volume_exists(volume.strip(), self.account_id)
- if volume_id:
- volume_ids.append(volume_id)
- else:
- self.module.fail_json(msg='Specified volume %s does not exist' % volume)
- return volume_ids
-
- def get_frequency(self):
- # Configuring frequency depends on self.schedule_type
- frequency = None
- if self.schedule_type is not None and self.schedule_type == 'DaysOfWeekFrequency':
- if self.weekdays is not None:
- params = dict(weekdays=self.weekdays)
- if self.days_of_week_hours is not None:
- params['hours'] = self.days_of_week_hours
- if self.days_of_week_minutes is not None:
- params['minutes'] = self.days_of_week_minutes
- frequency = DaysOfWeekFrequency(**params)
- elif self.schedule_type is not None and self.schedule_type == 'DaysOfMonthFrequency':
- if self.days_of_month_monthdays is not None:
- params = dict(monthdays=self.days_of_month_monthdays)
- if self.days_of_month_hours is not None:
- params['hours'] = self.days_of_month_hours
- if self.days_of_month_minutes is not None:
- params['minutes'] = self.days_of_month_minutes
- frequency = DaysOfMonthFrequency(**params)
- elif self.schedule_type is not None and self.schedule_type == 'TimeIntervalFrequency':
- params = dict()
- if self.time_interval_days is not None:
- params['days'] = self.time_interval_days
- if self.time_interval_hours is not None:
- params['hours'] = self.time_interval_hours
- if self.time_interval_minutes is not None:
- params['minutes'] = self.time_interval_minutes
- if not params or sum(params.values()) == 0:
- self.module.fail_json(msg='Specify at least one non zero value with TimeIntervalFrequency.')
- frequency = TimeIntervalFrequency(**params)
- return frequency
-
- def is_same_schedule_type(self, schedule_detail):
- # To check schedule type is same or not
- if str(schedule_detail.frequency).split('(', maxsplit=1)[0] == self.schedule_type:
- return True
- else:
- return False
-
- def create_schedule(self):
- # Create schedule
- try:
- frequency = self.get_frequency()
- if frequency is None:
- self.module.fail_json(msg='Failed to create schedule frequency object - type %s parameters' % self.schedule_type)
-
- # Create schedule
- name = self.name
- schedule_info = ScheduleInfo(
- volume_ids=self.volumes,
- snapshot_name=self.snapshot_name,
- retention=self.retention
- )
- if HAS_SF_SDK_1_7:
- sched = Schedule(frequency, name, schedule_info)
- else:
- sched = Schedule(schedule_info, name, frequency)
- sched.paused = self.paused
- sched.recurring = self.recurring
- sched.starting_date = self.starting_date
-
- self.create_schedule_result = self.sfe.create_schedule(sched)
-
- except (ApiServerError, ApiConnectionError) as exc:
- self.module.fail_json(msg='Error creating schedule %s: %s' % (self.name, to_native(exc)),
- exception=traceback.format_exc())
-
- def delete_schedule(self, schedule_id):
- # delete schedule
- try:
- get_schedule_result = self.sfe.get_schedule(schedule_id=schedule_id)
- sched = get_schedule_result.schedule
- sched.to_be_deleted = True
- self.sfe.modify_schedule(schedule=sched)
-
- except (ApiServerError, ApiConnectionError) as exc:
- self.module.fail_json(msg='Error deleting schedule %s: %s' % (self.name, to_native(exc)),
- exception=traceback.format_exc())
-
- def update_schedule(self, schedule_id):
- # Update schedule
- try:
- get_schedule_result = self.sfe.get_schedule(schedule_id=schedule_id)
- sched = get_schedule_result.schedule
- # Update schedule properties
- sched.frequency = self.get_frequency()
- if sched.frequency is None:
- self.module.fail_json(msg='Failed to create schedule frequency object - type %s parameters' % self.schedule_type)
-
- if self.volumes is not None and len(self.volumes) > 0:
- sched.schedule_info.volume_ids = self.volumes
- if self.retention is not None:
- sched.schedule_info.retention = self.retention
- if self.snapshot_name is not None:
- sched.schedule_info.snapshot_name = self.snapshot_name
- if self.paused is not None:
- sched.paused = self.paused
- if self.recurring is not None:
- sched.recurring = self.recurring
- if self.starting_date is not None:
- sched.starting_date = self.starting_date
-
- # Make API call
- self.sfe.modify_schedule(schedule=sched)
-
- except (ApiServerError, ApiConnectionError) as exc:
- self.module.fail_json(msg='Error updating schedule %s: %s' % (self.name, to_native(exc)),
- exception=traceback.format_exc())
-
- def apply(self):
- # Perform pre-checks, call functions and exit
-
- changed = False
- update_schedule = False
-
- if self.account_id is not None:
- self.account_id = self.get_account_id()
-
- if self.state == 'present' and self.volumes is not None:
- if self.account_id:
- self.volumes = self.get_volume_id()
- else:
- self.module.fail_json(msg='Specified account id does not exist')
-
- # Getting the schedule details
- schedule_detail = self.get_schedule()
-
- if schedule_detail is None and self.state == 'present':
- if len(self.volumes) > 0:
- changed = True
- else:
- self.module.fail_json(msg='Specified volumes not on cluster')
- elif schedule_detail is not None:
- # Getting the schedule id
- if self.state == 'absent':
- changed = True
- else:
- # Check if we need to update the snapshot schedule
- if self.retention is not None and schedule_detail.schedule_info.retention != self.retention:
- update_schedule = True
- changed = True
- elif self.snapshot_name is not None and schedule_detail.schedule_info.snapshot_name != self.snapshot_name:
- update_schedule = True
- changed = True
- elif self.paused is not None and schedule_detail.paused != self.paused:
- update_schedule = True
- changed = True
- elif self.recurring is not None and schedule_detail.recurring != self.recurring:
- update_schedule = True
- changed = True
- elif self.starting_date is not None and schedule_detail.starting_date != self.starting_date:
- update_schedule = True
- changed = True
- elif self.volumes is not None and len(self.volumes) > 0:
- for volume_id in schedule_detail.schedule_info.volume_ids:
- if volume_id not in self.volumes:
- update_schedule = True
- changed = True
-
- temp_frequency = self.get_frequency()
- if temp_frequency is not None:
- # Checking schedule_type changes
- if self.is_same_schedule_type(schedule_detail):
- # If same schedule type
- if self.schedule_type == "TimeIntervalFrequency":
- # Check if there is any change in schedule.frequency, If schedule_type is time_interval
- if schedule_detail.frequency.days != temp_frequency.days or \
- schedule_detail.frequency.hours != temp_frequency.hours or \
- schedule_detail.frequency.minutes != temp_frequency.minutes:
- update_schedule = True
- changed = True
- elif self.schedule_type == "DaysOfMonthFrequency":
- # Check if there is any change in schedule.frequency, If schedule_type is days_of_month
- if len(schedule_detail.frequency.monthdays) != len(temp_frequency.monthdays) or \
- schedule_detail.frequency.hours != temp_frequency.hours or \
- schedule_detail.frequency.minutes != temp_frequency.minutes:
- update_schedule = True
- changed = True
- elif len(schedule_detail.frequency.monthdays) == len(temp_frequency.monthdays):
- actual_frequency_monthday = schedule_detail.frequency.monthdays
- temp_frequency_monthday = temp_frequency.monthdays
- for monthday in actual_frequency_monthday:
- if monthday not in temp_frequency_monthday:
- update_schedule = True
- changed = True
- elif self.schedule_type == "DaysOfWeekFrequency":
- # Check if there is any change in schedule.frequency, If schedule_type is days_of_week
- if len(schedule_detail.frequency.weekdays) != len(temp_frequency.weekdays) or \
- schedule_detail.frequency.hours != temp_frequency.hours or \
- schedule_detail.frequency.minutes != temp_frequency.minutes:
- update_schedule = True
- changed = True
- elif len(schedule_detail.frequency.weekdays) == len(temp_frequency.weekdays):
- actual_frequency_weekdays = schedule_detail.frequency.weekdays
- temp_frequency_weekdays = temp_frequency.weekdays
- if len([actual_weekday for actual_weekday, temp_weekday in
- zip(actual_frequency_weekdays, temp_frequency_weekdays) if actual_weekday != temp_weekday]) != 0:
- update_schedule = True
- changed = True
- else:
- update_schedule = True
- changed = True
- else:
- self.module.fail_json(msg='Failed to create schedule frequency object - type %s parameters' % self.schedule_type)
-
- result_message = " "
- if changed:
- if self.module.check_mode:
- # Skip changes
- result_message = "Check mode, skipping changes"
- else:
- if self.state == 'present':
- if update_schedule:
- self.update_schedule(schedule_detail.schedule_id)
- result_message = "Snapshot Schedule modified"
- else:
- self.create_schedule()
- result_message = "Snapshot Schedule created"
- elif self.state == 'absent':
- self.delete_schedule(schedule_detail.schedule_id)
- result_message = "Snapshot Schedule deleted"
-
- self.module.exit_json(changed=changed, msg=result_message)
-
-
-def main():
- sss = ElementSWSnapShotSchedule()
- sss.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_vlan.py b/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_vlan.py
deleted file mode 100644
index 299338ad5..000000000
--- a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_vlan.py
+++ /dev/null
@@ -1,274 +0,0 @@
-#!/usr/bin/python
-# (c) 2018, NetApp, 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
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'certified'}
-
-
-DOCUMENTATION = '''
-
-module: na_elementsw_vlan
-
-short_description: NetApp Element Software Manage VLAN
-extends_documentation_fragment:
- - netapp.elementsw.netapp.solidfire
-version_added: 2.7.0
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-description:
-- Create, delete, modify VLAN
-
-options:
-
- state:
- description:
- - Whether the specified vlan should exist or not.
- choices: ['present', 'absent']
- default: present
- type: str
-
- vlan_tag:
- description:
- - Virtual Network Tag
- required: true
- type: str
-
- name:
- description:
- - User defined name for the new VLAN
- - Name of the vlan is unique
- - Required for create
- type: str
-
- svip:
- description:
- - Storage virtual IP which is unique
- - Required for create
- type: str
-
- address_blocks:
- description:
- - List of address blocks for the VLAN
- - Each address block contains the starting IP address and size for the block
- - Required for create
- type: list
- elements: dict
-
- netmask:
- description:
- - Netmask for the VLAN
- - Required for create
- type: str
-
- gateway:
- description:
- - Gateway for the VLAN
- type: str
-
- namespace:
- description:
- - Enable or disable namespaces
- type: bool
-
- attributes:
- description:
- - Dictionary of attributes with name and value for each attribute
- type: dict
-
-'''
-
-EXAMPLES = """
-- name: Create vlan
- na_elementsw_vlan:
- state: present
- name: test
- vlan_tag: 1
- svip: "{{ ip address }}"
- netmask: "{{ netmask }}"
- address_blocks:
- - start: "{{ starting ip_address }}"
- size: 5
- - start: "{{ starting ip_address }}"
- size: 5
- hostname: "{{ netapp_hostname }}"
- username: "{{ netapp_username }}"
- password: "{{ netapp_password }}"
-
-- name: Delete Lun
- na_elementsw_vlan:
- state: absent
- vlan_tag: 1
- hostname: "{{ netapp_hostname }}"
- username: "{{ netapp_username }}"
- password: "{{ netapp_password }}"
-"""
-
-RETURN = """
-
-"""
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils._text import to_native
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.elementsw.plugins.module_utils.netapp_module import NetAppModule
-from ansible_collections.netapp.elementsw.plugins.module_utils.netapp_elementsw_module import NaElementSWModule
-
-HAS_SF_SDK = netapp_utils.has_sf_sdk()
-try:
- import solidfire.common
-except ImportError:
- HAS_SF_SDK = False
-
-
-class ElementSWVlan(object):
- """ class to handle VLAN operations """
-
- def __init__(self):
- """
- Setup Ansible parameters and ElementSW connection
- """
- self.argument_spec = netapp_utils.ontap_sf_host_argument_spec()
- self.argument_spec.update(dict(
- state=dict(required=False, choices=['present', 'absent'],
- default='present'),
- name=dict(required=False, type='str'),
- vlan_tag=dict(required=True, type='str'),
- svip=dict(required=False, type='str'),
- netmask=dict(required=False, type='str'),
- gateway=dict(required=False, type='str'),
- namespace=dict(required=False, type='bool'),
- attributes=dict(required=False, type='dict'),
- address_blocks=dict(required=False, type='list', elements='dict')
- ))
-
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- supports_check_mode=True
- )
-
- if HAS_SF_SDK is False:
- self.module.fail_json(msg="Unable to import the SolidFire Python SDK")
- else:
- self.elem = netapp_utils.create_sf_connection(module=self.module)
-
- self.na_helper = NetAppModule()
- self.parameters = self.na_helper.set_parameters(self.module.params)
-
- self.elementsw_helper = NaElementSWModule(self.elem)
-
- # add telemetry attributes
- if self.parameters.get('attributes') is not None:
- self.parameters['attributes'].update(self.elementsw_helper.set_element_attributes(source='na_elementsw_vlan'))
- else:
- self.parameters['attributes'] = self.elementsw_helper.set_element_attributes(source='na_elementsw_vlan')
-
- def validate_keys(self):
- """
- Validate if all required keys are present before creating
- """
- required_keys = ['address_blocks', 'svip', 'netmask', 'name']
- if all(item in self.parameters.keys() for item in required_keys) is False:
- self.module.fail_json(msg="One or more required fields %s for creating VLAN is missing"
- % required_keys)
- addr_blk_fields = ['start', 'size']
- for address in self.parameters['address_blocks']:
- if 'start' not in address or 'size' not in address:
- self.module.fail_json(msg="One or more required fields %s for address blocks is missing"
- % addr_blk_fields)
-
- def create_network(self):
- """
- Add VLAN
- """
- try:
- self.validate_keys()
- create_params = self.parameters.copy()
- for key in ['username', 'hostname', 'password', 'state', 'vlan_tag']:
- del create_params[key]
- self.elem.add_virtual_network(virtual_network_tag=self.parameters['vlan_tag'], **create_params)
- except solidfire.common.ApiServerError as err:
- self.module.fail_json(msg="Error creating VLAN %s"
- % self.parameters['vlan_tag'],
- exception=to_native(err))
-
- def delete_network(self):
- """
- Remove VLAN
- """
- try:
- self.elem.remove_virtual_network(virtual_network_tag=self.parameters['vlan_tag'])
- except solidfire.common.ApiServerError as err:
- self.module.fail_json(msg="Error deleting VLAN %s"
- % self.parameters['vlan_tag'],
- exception=to_native(err))
-
- def modify_network(self, modify):
- """
- Modify the VLAN
- """
- try:
- self.elem.modify_virtual_network(virtual_network_tag=self.parameters['vlan_tag'], **modify)
- except solidfire.common.ApiServerError as err:
- self.module.fail_json(msg="Error modifying VLAN %s"
- % self.parameters['vlan_tag'],
- exception=to_native(err))
-
- def get_network_details(self):
- """
- Check existing VLANs
- :return: vlan details if found, None otherwise
- :type: dict
- """
- vlans = self.elem.list_virtual_networks(virtual_network_tag=self.parameters['vlan_tag'])
- vlan_details = dict()
- for vlan in vlans.virtual_networks:
- if vlan is not None:
- vlan_details['name'] = vlan.name
- vlan_details['address_blocks'] = list()
- for address in vlan.address_blocks:
- vlan_details['address_blocks'].append({
- 'start': address.start,
- 'size': address.size
- })
- vlan_details['svip'] = vlan.svip
- vlan_details['gateway'] = vlan.gateway
- vlan_details['netmask'] = vlan.netmask
- vlan_details['namespace'] = vlan.namespace
- vlan_details['attributes'] = vlan.attributes
- return vlan_details
- return None
-
- def apply(self):
- """
- Call create / delete / modify vlan methods
- """
- network = self.get_network_details()
- # calling helper to determine action
- cd_action = self.na_helper.get_cd_action(network, self.parameters)
- modify = self.na_helper.get_modified_attributes(network, self.parameters)
- if not self.module.check_mode:
- if cd_action == "create":
- self.create_network()
- elif cd_action == "delete":
- self.delete_network()
- elif modify:
- if 'attributes' in modify:
- # new attributes will replace existing ones
- modify['attributes'] = self.parameters['attributes']
- self.modify_network(modify)
- self.module.exit_json(changed=self.na_helper.changed)
-
-
-def main():
- """ Apply vlan actions """
- network_obj = ElementSWVlan()
- network_obj.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_volume.py b/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_volume.py
deleted file mode 100644
index 3fcaf00ce..000000000
--- a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_volume.py
+++ /dev/null
@@ -1,413 +0,0 @@
-#!/usr/bin/python
-
-# (c) 2017, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-"""Element OS Software Volume Manager"""
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'certified'}
-
-
-DOCUMENTATION = '''
-
-module: na_elementsw_volume
-
-short_description: NetApp Element Software Manage Volumes
-extends_documentation_fragment:
- - netapp.elementsw.netapp.solidfire
-version_added: 2.7.0
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-description:
-- Create, destroy, or update volumes on ElementSW
-
-options:
-
- state:
- description:
- - Whether the specified volume should exist or not.
- choices: ['present', 'absent']
- default: present
- type: str
-
- name:
- description:
- - The name of the volume to manage.
- - It accepts volume_name or volume_id
- required: true
- type: str
-
- account_id:
- description:
- - Account ID for the owner of this volume.
- - It accepts Account_id or Account_name
- required: true
- type: str
-
- enable512e:
- description:
- - Required when C(state=present)
- - Should the volume provide 512-byte sector emulation?
- type: bool
- aliases:
- - enable512emulation
-
- qos:
- description: Initial quality of service settings for this volume. Configure as dict in playbooks.
- type: dict
-
- qos_policy_name:
- description:
- - Quality of service policy for this volume.
- - It can be a name or an id.
- - Mutually exclusive with C(qos) option.
- type: str
-
- attributes:
- description: A YAML dictionary of attributes that you would like to apply on this volume.
- type: dict
-
- size:
- description:
- - The size of the volume in (size_unit).
- - Required when C(state = present).
- type: int
-
- size_unit:
- description:
- - The unit used to interpret the size parameter.
- choices: ['bytes', 'b', 'kb', 'mb', 'gb', 'tb', 'pb', 'eb', 'zb', 'yb']
- default: 'gb'
- type: str
-
- access:
- description:
- - Access allowed for the volume.
- - readOnly Only read operations are allowed.
- - readWrite Reads and writes are allowed.
- - locked No reads or writes are allowed.
- - replicationTarget Identify a volume as the target volume for a paired set of volumes.
- - If the volume is not paired, the access status is locked.
- - If unspecified, the access settings of the clone will be the same as the source.
- choices: ['readOnly', 'readWrite', 'locked', 'replicationTarget']
- type: str
-'''
-
-EXAMPLES = """
- - name: Create Volume
- na_elementsw_volume:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: present
- name: AnsibleVol
- qos: {minIOPS: 1000, maxIOPS: 20000, burstIOPS: 50000}
- account_id: 3
- enable512e: False
- size: 1
- size_unit: gb
-
- - name: Update Volume
- na_elementsw_volume:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: present
- name: AnsibleVol
- account_id: 3
- access: readWrite
-
- - name: Delete Volume
- na_elementsw_volume:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- state: absent
- name: AnsibleVol
- account_id: 2
-"""
-
-RETURN = """
-
-msg:
- description: Success message
- returned: success
- type: str
-
-"""
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils._text import to_native
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.elementsw.plugins.module_utils.netapp_elementsw_module import NaElementSWModule
-
-HAS_SF_SDK = netapp_utils.has_sf_sdk()
-try:
- import solidfire.common
-except ImportError:
- HAS_SF_SDK = False
-
-
-class ElementSWVolume(object):
- """
- Contains methods to parse arguments,
- derive details of ElementSW objects
- and send requests to ElementOS via
- the ElementSW SDK
- """
-
- def __init__(self):
- """
- Parse arguments, setup state variables,
- check paramenters and ensure SDK is installed
- """
- self._size_unit_map = netapp_utils.SF_BYTE_MAP
-
- self.argument_spec = netapp_utils.ontap_sf_host_argument_spec()
- self.argument_spec.update(dict(
- state=dict(required=False, type='str', choices=['present', 'absent'], default='present'),
- name=dict(required=True, type='str'),
- account_id=dict(required=True),
- enable512e=dict(required=False, type='bool', aliases=['enable512emulation']),
- qos=dict(required=False, type='dict', default=None),
- qos_policy_name=dict(required=False, type='str', default=None),
- attributes=dict(required=False, type='dict', default=None),
- size=dict(type='int'),
- size_unit=dict(default='gb',
- choices=['bytes', 'b', 'kb', 'mb', 'gb', 'tb',
- 'pb', 'eb', 'zb', 'yb'], type='str'),
-
- access=dict(required=False, type='str', default=None,
- choices=['readOnly', 'readWrite', 'locked', 'replicationTarget']),
- ))
-
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- required_if=[
- ('state', 'present', ['size', 'enable512e'])
- ],
- mutually_exclusive=[
- ('qos', 'qos_policy_name'),
- ],
- supports_check_mode=True
- )
-
- param = self.module.params
-
- # set up state variables
- self.state = param['state']
- self.name = param['name']
- self.account_id = param['account_id']
- self.enable512e = param['enable512e']
- self.qos = param['qos']
- self.qos_policy_name = param['qos_policy_name']
- self.attributes = param['attributes']
- self.access = param['access']
- self.size_unit = param['size_unit']
- if param['size'] is not None:
- self.size = param['size'] * self._size_unit_map[self.size_unit]
- else:
- self.size = None
-
- if HAS_SF_SDK is False:
- self.module.fail_json(msg="Unable to import the ElementSW Python SDK")
- else:
- try:
- self.sfe = netapp_utils.create_sf_connection(module=self.module)
- except solidfire.common.ApiServerError:
- self.module.fail_json(msg="Unable to create the connection")
-
- self.elementsw_helper = NaElementSWModule(self.sfe)
-
- # add telemetry attributes
- if self.attributes is not None:
- self.attributes.update(self.elementsw_helper.set_element_attributes(source='na_elementsw_volume'))
- else:
- self.attributes = self.elementsw_helper.set_element_attributes(source='na_elementsw_volume')
-
- def get_account_id(self):
- """
- Return account id if found
- """
- try:
- # Update and return self.account_id
- self.account_id = self.elementsw_helper.account_exists(self.account_id)
- except Exception as err:
- self.module.fail_json(msg="Error: account_id %s does not exist" % self.account_id, exception=to_native(err))
- return self.account_id
-
- def get_qos_policy(self, name):
- """
- Get QOS Policy
- """
- policy, error = self.elementsw_helper.get_qos_policy(name)
- if error is not None:
- self.module.fail_json(msg=error)
- return policy
-
- def get_volume(self):
- """
- Return volume details if found
- """
- # Get volume details
- volume_id = self.elementsw_helper.volume_exists(self.name, self.account_id)
-
- if volume_id is not None:
- # Return volume_details
- volume_details = self.elementsw_helper.get_volume(volume_id)
- if volume_details is not None:
- return volume_details
- return None
-
- def create_volume(self, qos_policy_id):
- """
- Create Volume
- :return: True if created, False if fails
- """
- options = dict(
- name=self.name,
- account_id=self.account_id,
- total_size=self.size,
- enable512e=self.enable512e,
- attributes=self.attributes
- )
- if qos_policy_id is not None:
- options['qos_policy_id'] = qos_policy_id
- if self.qos is not None:
- options['qos'] = self.qos
- try:
- self.sfe.create_volume(**options)
- except Exception as err:
- self.module.fail_json(msg="Error provisioning volume: %s of size: %s" % (self.name, self.size),
- exception=to_native(err))
-
- def delete_volume(self, volume_id):
- """
- Delete and purge the volume using volume id
- :return: Success : True , Failed : False
- """
- try:
- self.sfe.delete_volume(volume_id=volume_id)
- self.sfe.purge_deleted_volume(volume_id=volume_id)
- # Delete method will delete and also purge the volume instead of moving the volume state to inactive.
-
- except Exception as err:
- # Throwing the exact error message instead of generic error message
- self.module.fail_json(msg='Error deleting volume: %s, %s' % (str(volume_id), to_native(err)),
- exception=to_native(err))
-
- def update_volume(self, volume_id, qos_policy_id):
- """
- Update the volume with the specified param
- :return: Success : True, Failed : False
- """
- options = dict(
- attributes=self.attributes
- )
- if self.access is not None:
- options['access'] = self.access
- if self.account_id is not None:
- options['account_id'] = self.account_id
- if self.qos is not None:
- options['qos'] = self.qos
- if qos_policy_id is not None:
- options['qos_policy_id'] = qos_policy_id
- if self.size is not None:
- options['total_size'] = self.size
- try:
- self.sfe.modify_volume(volume_id, **options)
- except Exception as err:
- # Throwing the exact error message instead of generic error message
- self.module.fail_json(msg='Error updating volume: %s, %s' % (str(volume_id), to_native(err)),
- exception=to_native(err))
-
- def apply(self):
- # Perform pre-checks, call functions and exit
- changed = False
- qos_policy_id = None
- action = None
-
- self.get_account_id()
- volume_detail = self.get_volume()
-
- if self.state == 'present' and self.qos_policy_name is not None:
- policy = self.get_qos_policy(self.qos_policy_name)
- if policy is None:
- error = 'Cannot find qos policy with name/id: %s' % self.qos_policy_name
- self.module.fail_json(msg=error)
- qos_policy_id = policy['qos_policy_id']
-
- if volume_detail:
- volume_id = volume_detail.volume_id
- if self.state == 'absent':
- action = 'delete'
-
- elif self.state == 'present':
- # Checking all the params for update operation
- if self.access is not None and volume_detail.access != self.access:
- action = 'update'
-
- if self.account_id is not None and volume_detail.account_id != self.account_id:
- action = 'update'
-
- if qos_policy_id is not None and volume_detail.qos_policy_id != qos_policy_id:
- # volume_detail.qos_policy_id may be None if no policy is associated with the volume
- action = 'update'
-
- if self.qos is not None and volume_detail.qos_policy_id is not None:
- # remove qos_policy
- action = 'update'
-
- if self.qos is not None:
- # Actual volume_detail.qos has ['burst_iops', 'burst_time', 'curve', 'max_iops', 'min_iops'] keys.
- # As only minOPS, maxOPS, burstOPS is important to consider, checking only these values.
- volume_qos = vars(volume_detail.qos)
- if volume_qos['min_iops'] != self.qos['minIOPS'] or volume_qos['max_iops'] != self.qos['maxIOPS'] \
- or volume_qos['burst_iops'] != self.qos['burstIOPS']:
- action = 'update'
-
- if self.size is not None and volume_detail.total_size is not None and volume_detail.total_size != self.size:
- size_difference = abs(float(volume_detail.total_size - self.size))
- # Change size only if difference is bigger than 0.001
- if size_difference / self.size > 0.001:
- action = 'update'
-
- if self.attributes is not None and volume_detail.attributes != self.attributes:
- action = 'update'
-
- elif self.state == 'present':
- action = 'create'
-
- result_message = ""
-
- if action is not None:
- changed = True
- if self.module.check_mode:
- result_message = "Check mode, skipping changes"
- else:
- if action == 'create':
- self.create_volume(qos_policy_id)
- result_message = "Volume created"
- elif action == 'update':
- self.update_volume(volume_id, qos_policy_id)
- result_message = "Volume updated"
- elif action == 'delete':
- self.delete_volume(volume_id)
- result_message = "Volume deleted"
-
- self.module.exit_json(changed=changed, msg=result_message)
-
-
-def main():
- # Create object and call apply
- na_elementsw_volume = ElementSWVolume()
- na_elementsw_volume.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_volume_clone.py b/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_volume_clone.py
deleted file mode 100644
index 186ca85bc..000000000
--- a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_volume_clone.py
+++ /dev/null
@@ -1,276 +0,0 @@
-#!/usr/bin/python
-
-# (c) 2018, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or
-# https://www.gnu.org/licenses/gpl-3.0.txt)
-
-"""Element Software volume clone"""
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'certified'}
-
-
-DOCUMENTATION = '''
-
-module: na_elementsw_volume_clone
-
-short_description: NetApp Element Software Create Volume Clone
-extends_documentation_fragment:
- - netapp.elementsw.netapp.solidfire
-version_added: 2.7.0
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-description:
-- Create volume clones on Element OS
-
-options:
-
- name:
- description:
- - The name of the clone.
- required: true
- type: str
-
- src_volume_id:
- description:
- - The id of the src volume to clone. id may be a numeric identifier or a volume name.
- required: true
- type: str
-
- src_snapshot_id:
- description:
- - The id of the snapshot to clone. id may be a numeric identifier or a snapshot name.
- type: str
-
- account_id:
- description:
- - Account ID for the owner of this cloned volume. id may be a numeric identifier or an account name.
- required: true
- type: str
-
- attributes:
- description: A YAML dictionary of attributes that you would like to apply on this cloned volume.
- type: dict
-
- size:
- description:
- - The size of the cloned volume in (size_unit).
- type: int
-
- size_unit:
- description:
- - The unit used to interpret the size parameter.
- choices: ['bytes', 'b', 'kb', 'mb', 'gb', 'tb', 'pb', 'eb', 'zb', 'yb']
- default: 'gb'
- type: str
-
- access:
- choices: ['readOnly', 'readWrite', 'locked', 'replicationTarget']
- description:
- - Access allowed for the volume.
- - If unspecified, the access settings of the clone will be the same as the source.
- - readOnly - Only read operations are allowed.
- - readWrite - Reads and writes are allowed.
- - locked - No reads or writes are allowed.
- - replicationTarget - Identify a volume as the target volume for a paired set of volumes. If the volume is not paired, the access status is locked.
- type: str
-
-'''
-
-EXAMPLES = """
- - name: Clone Volume
- na_elementsw_volume_clone:
- hostname: "{{ elementsw_hostname }}"
- username: "{{ elementsw_username }}"
- password: "{{ elementsw_password }}"
- name: CloneAnsibleVol
- src_volume_id: 123
- src_snapshot_id: 41
- account_id: 3
- size: 1
- size_unit: gb
- access: readWrite
- attributes: {"virtual_network_id": 12345}
-
-"""
-
-RETURN = """
-
-msg:
- description: Success message
- returned: success
- type: str
-
-"""
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils._text import to_native
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.elementsw.plugins.module_utils.netapp_elementsw_module import NaElementSWModule
-
-HAS_SF_SDK = netapp_utils.has_sf_sdk()
-
-
-class ElementOSVolumeClone(object):
- """
- Contains methods to parse arguments,
- derive details of Element Software objects
- and send requests to Element OS via
- the Solidfire SDK
- """
-
- def __init__(self):
- """
- Parse arguments, setup state variables,
- check paramenters and ensure SDK is installed
- """
- self._size_unit_map = netapp_utils.SF_BYTE_MAP
-
- self.argument_spec = netapp_utils.ontap_sf_host_argument_spec()
- self.argument_spec.update(dict(
- name=dict(required=True),
- src_volume_id=dict(required=True),
- src_snapshot_id=dict(),
- account_id=dict(required=True),
- attributes=dict(type='dict', default=None),
- size=dict(type='int'),
- size_unit=dict(default='gb',
- choices=['bytes', 'b', 'kb', 'mb', 'gb', 'tb',
- 'pb', 'eb', 'zb', 'yb'], type='str'),
- access=dict(type='str',
- default=None, choices=['readOnly', 'readWrite',
- 'locked', 'replicationTarget']),
-
- ))
-
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- supports_check_mode=True
- )
-
- parameters = self.module.params
-
- # set up state variables
- self.name = parameters['name']
- self.src_volume_id = parameters['src_volume_id']
- self.src_snapshot_id = parameters['src_snapshot_id']
- self.account_id = parameters['account_id']
- self.attributes = parameters['attributes']
-
- self.size_unit = parameters['size_unit']
- if parameters['size'] is not None:
- self.size = parameters['size'] * \
- self._size_unit_map[self.size_unit]
- else:
- self.size = None
- self.access = parameters['access']
-
- if HAS_SF_SDK is False:
- self.module.fail_json(
- msg="Unable to import the SolidFire Python SDK")
- else:
- self.sfe = netapp_utils.create_sf_connection(module=self.module)
-
- self.elementsw_helper = NaElementSWModule(self.sfe)
-
- # add telemetry attributes
- if self.attributes is not None:
- self.attributes.update(self.elementsw_helper.set_element_attributes(source='na_elementsw_volume_clone'))
- else:
- self.attributes = self.elementsw_helper.set_element_attributes(source='na_elementsw_volume_clone')
-
- def get_account_id(self):
- """
- Return account id if found
- """
- try:
- # Update and return self.account_id
- self.account_id = self.elementsw_helper.account_exists(self.account_id)
- return self.account_id
- except Exception as err:
- self.module.fail_json(msg="Error: account_id %s does not exist" % self.account_id, exception=to_native(err))
-
- def get_snapshot_id(self):
- """
- Return snapshot details if found
- """
- src_snapshot = self.elementsw_helper.get_snapshot(self.src_snapshot_id, self.src_volume_id)
- # Update and return self.src_snapshot_id
- if src_snapshot is not None:
- self.src_snapshot_id = src_snapshot.snapshot_id
- # Return src_snapshot
- return self.src_snapshot_id
- return None
-
- def get_src_volume_id(self):
- """
- Return volume id if found
- """
- src_vol_id = self.elementsw_helper.volume_exists(self.src_volume_id, self.account_id)
- if src_vol_id is not None:
- # Update and return self.volume_id
- self.src_volume_id = src_vol_id
- # Return src_volume_id
- return self.src_volume_id
- return None
-
- def clone_volume(self):
- """Clone Volume from source"""
- try:
- self.sfe.clone_volume(volume_id=self.src_volume_id,
- name=self.name,
- new_account_id=self.account_id,
- new_size=self.size,
- access=self.access,
- snapshot_id=self.src_snapshot_id,
- attributes=self.attributes)
-
- except Exception as err:
- self.module.fail_json(msg="Error creating clone %s of size %s" % (self.name, self.size), exception=to_native(err))
-
- def apply(self):
- """Perform pre-checks, call functions and exit"""
- changed = False
- result_message = ""
-
- if self.get_account_id() is None:
- self.module.fail_json(msg="Account id not found: %s" % (self.account_id))
-
- # there is only one state. other operations
- # are part of the volume module
-
- # ensure that a volume with the clone name
- # isn't already present
- if self.elementsw_helper.volume_exists(self.name, self.account_id) is None:
- # check for the source volume
- if self.get_src_volume_id() is not None:
- # check for a valid snapshot
- if self.src_snapshot_id and not self.get_snapshot_id():
- self.module.fail_json(msg="Snapshot id not found: %s" % (self.src_snapshot_id))
- # change required
- changed = True
- else:
- self.module.fail_json(msg="Volume id not found %s" % (self.src_volume_id))
-
- if changed:
- if self.module.check_mode:
- result_message = "Check mode, skipping changes"
- else:
- self.clone_volume()
- result_message = "Volume cloned"
-
- self.module.exit_json(changed=changed, msg=result_message)
-
-
-def main():
- """Create object and call apply"""
- volume_clone = ElementOSVolumeClone()
- volume_clone.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_volume_pair.py b/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_volume_pair.py
deleted file mode 100644
index 0d5b38a0d..000000000
--- a/ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_volume_pair.py
+++ /dev/null
@@ -1,293 +0,0 @@
-#!/usr/bin/python
-# (c) 2017, NetApp, 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
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'certified'}
-
-DOCUMENTATION = '''
-
-module: na_elementsw_volume_pair
-
-short_description: NetApp Element Software Volume Pair
-extends_documentation_fragment:
- - netapp.elementsw.netapp.solidfire
-version_added: 2.7.0
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-description:
-- Create, delete volume pair
-
-options:
-
- state:
- description:
- - Whether the specified volume pair should exist or not.
- choices: ['present', 'absent']
- default: present
- type: str
-
- src_volume:
- description:
- - Source volume name or volume ID
- required: true
- type: str
-
- src_account:
- description:
- - Source account name or ID
- required: true
- type: str
-
- dest_volume:
- description:
- - Destination volume name or volume ID
- required: true
- type: str
-
- dest_account:
- description:
- - Destination account name or ID
- required: true
- type: str
-
- mode:
- description:
- - Mode to start the volume pairing
- choices: ['async', 'sync', 'snapshotsonly']
- default: async
- type: str
-
- dest_mvip:
- description:
- - Destination IP address of the paired cluster.
- required: true
- type: str
-
- dest_username:
- description:
- - Destination username for the paired cluster
- - Optional if this is same as source cluster username.
- type: str
-
- dest_password:
- description:
- - Destination password for the paired cluster
- - Optional if this is same as source cluster password.
- type: str
-
-'''
-
-EXAMPLES = """
- - name: Create volume pair
- na_elementsw_volume_pair:
- hostname: "{{ src_cluster_hostname }}"
- username: "{{ src_cluster_username }}"
- password: "{{ src_cluster_password }}"
- state: present
- src_volume: test1
- src_account: test2
- dest_volume: test3
- dest_account: test4
- mode: sync
- dest_mvip: "{{ dest_cluster_hostname }}"
-
- - name: Delete volume pair
- na_elementsw_volume_pair:
- hostname: "{{ src_cluster_hostname }}"
- username: "{{ src_cluster_username }}"
- password: "{{ src_cluster_password }}"
- state: absent
- src_volume: 3
- src_account: 1
- dest_volume: 2
- dest_account: 1
- dest_mvip: "{{ dest_cluster_hostname }}"
- dest_username: "{{ dest_cluster_username }}"
- dest_password: "{{ dest_cluster_password }}"
-
-"""
-
-RETURN = """
-
-"""
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils._text import to_native
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.elementsw.plugins.module_utils.netapp_elementsw_module import NaElementSWModule
-from ansible_collections.netapp.elementsw.plugins.module_utils.netapp_module import NetAppModule
-
-HAS_SF_SDK = netapp_utils.has_sf_sdk()
-try:
- import solidfire.common
-except ImportError:
- HAS_SF_SDK = False
-
-
-class ElementSWVolumePair(object):
- ''' class to handle volume pairing operations '''
-
- def __init__(self):
- """
- Setup Ansible parameters and SolidFire connection
- """
- self.argument_spec = netapp_utils.ontap_sf_host_argument_spec()
- self.argument_spec.update(dict(
- state=dict(required=False, choices=['present', 'absent'],
- default='present'),
- src_volume=dict(required=True, type='str'),
- src_account=dict(required=True, type='str'),
- dest_volume=dict(required=True, type='str'),
- dest_account=dict(required=True, type='str'),
- mode=dict(required=False, type='str',
- choices=['async', 'sync', 'snapshotsonly'],
- default='async'),
- dest_mvip=dict(required=True, type='str'),
- dest_username=dict(required=False, type='str'),
- dest_password=dict(required=False, type='str', no_log=True)
- ))
-
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- supports_check_mode=True
- )
-
- if HAS_SF_SDK is False:
- self.module.fail_json(msg="Unable to import the SolidFire Python SDK")
- else:
- self.elem = netapp_utils.create_sf_connection(module=self.module)
-
- self.elementsw_helper = NaElementSWModule(self.elem)
- self.na_helper = NetAppModule()
- self.parameters = self.na_helper.set_parameters(self.module.params)
- # get element_sw_connection for destination cluster
- # overwrite existing source host, user and password with destination credentials
- self.module.params['hostname'] = self.parameters['dest_mvip']
- # username and password is same as source,
- # if dest_username and dest_password aren't specified
- if self.parameters.get('dest_username'):
- self.module.params['username'] = self.parameters['dest_username']
- if self.parameters.get('dest_password'):
- self.module.params['password'] = self.parameters['dest_password']
- self.dest_elem = netapp_utils.create_sf_connection(module=self.module)
- self.dest_elementsw_helper = NaElementSWModule(self.dest_elem)
-
- def check_if_already_paired(self, vol_id):
- """
- Check for idempotency
- A volume can have only one pair
- Return paired-volume-id if volume is paired already
- None if volume is not paired
- """
- paired_volumes = self.elem.list_volumes(volume_ids=[vol_id],
- is_paired=True)
- for vol in paired_volumes.volumes:
- for pair in vol.volume_pairs:
- if pair is not None:
- return pair.remote_volume_id
- return None
-
- def pair_volumes(self):
- """
- Start volume pairing on source, and complete on target volume
- """
- try:
- pair_key = self.elem.start_volume_pairing(
- volume_id=self.parameters['src_vol_id'],
- mode=self.parameters['mode'])
- self.dest_elem.complete_volume_pairing(
- volume_pairing_key=pair_key.volume_pairing_key,
- volume_id=self.parameters['dest_vol_id'])
- except solidfire.common.ApiServerError as err:
- self.module.fail_json(msg="Error pairing volume id %s"
- % (self.parameters['src_vol_id']),
- exception=to_native(err))
-
- def pairing_exists(self, src_id, dest_id):
- src_paired = self.check_if_already_paired(self.parameters['src_vol_id'])
- dest_paired = self.check_if_already_paired(self.parameters['dest_vol_id'])
- if src_paired is not None or dest_paired is not None:
- return True
- return None
-
- def unpair_volumes(self):
- """
- Delete volume pair
- """
- try:
- self.elem.remove_volume_pair(volume_id=self.parameters['src_vol_id'])
- self.dest_elem.remove_volume_pair(volume_id=self.parameters['dest_vol_id'])
- except solidfire.common.ApiServerError as err:
- self.module.fail_json(msg="Error unpairing volume ids %s and %s"
- % (self.parameters['src_vol_id'],
- self.parameters['dest_vol_id']),
- exception=to_native(err))
-
- def get_account_id(self, account, type):
- """
- Get source and destination account IDs
- """
- try:
- if type == 'src':
- self.parameters['src_account_id'] = self.elementsw_helper.account_exists(account)
- elif type == 'dest':
- self.parameters['dest_account_id'] = self.dest_elementsw_helper.account_exists(account)
- except solidfire.common.ApiServerError as err:
- self.module.fail_json(msg="Error: either account %s or %s does not exist"
- % (self.parameters['src_account'],
- self.parameters['dest_account']),
- exception=to_native(err))
-
- def get_volume_id(self, volume, type):
- """
- Get source and destination volume IDs
- """
- if type == 'src':
- self.parameters['src_vol_id'] = self.elementsw_helper.volume_exists(volume, self.parameters['src_account_id'])
- if self.parameters['src_vol_id'] is None:
- self.module.fail_json(msg="Error: source volume %s does not exist"
- % (self.parameters['src_volume']))
- elif type == 'dest':
- self.parameters['dest_vol_id'] = self.dest_elementsw_helper.volume_exists(volume, self.parameters['dest_account_id'])
- if self.parameters['dest_vol_id'] is None:
- self.module.fail_json(msg="Error: destination volume %s does not exist"
- % (self.parameters['dest_volume']))
-
- def get_ids(self):
- """
- Get IDs for volumes and accounts
- """
- self.get_account_id(self.parameters['src_account'], 'src')
- self.get_account_id(self.parameters['dest_account'], 'dest')
- self.get_volume_id(self.parameters['src_volume'], 'src')
- self.get_volume_id(self.parameters['dest_volume'], 'dest')
-
- def apply(self):
- """
- Call create / delete volume pair methods
- """
- self.get_ids()
- paired = self.pairing_exists(self.parameters['src_vol_id'],
- self.parameters['dest_vol_id'])
- # calling helper to determine action
- cd_action = self.na_helper.get_cd_action(paired, self.parameters)
- if cd_action == "create":
- self.pair_volumes()
- elif cd_action == "delete":
- self.unpair_volumes()
- self.module.exit_json(changed=self.na_helper.changed)
-
-
-def main():
- """ Apply volume pair actions """
- vol_obj = ElementSWVolumePair()
- vol_obj.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/elementsw/requirements.txt b/ansible_collections/netapp/elementsw/requirements.txt
deleted file mode 100644
index 2054956e3..000000000
--- a/ansible_collections/netapp/elementsw/requirements.txt
+++ /dev/null
@@ -1 +0,0 @@
-solidfire-sdk-python \ No newline at end of file
diff --git a/ansible_collections/netapp/elementsw/tests/unit/compat/__init__.py b/ansible_collections/netapp/elementsw/tests/unit/compat/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/ansible_collections/netapp/elementsw/tests/unit/compat/__init__.py
+++ /dev/null
diff --git a/ansible_collections/netapp/elementsw/tests/unit/compat/builtins.py b/ansible_collections/netapp/elementsw/tests/unit/compat/builtins.py
deleted file mode 100644
index f60ee6782..000000000
--- a/ansible_collections/netapp/elementsw/tests/unit/compat/builtins.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# (c) 2014, Toshio Kuratomi <tkuratomi@ansible.com>
-#
-# 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 <http://www.gnu.org/licenses/>.
-
-# Make coding more python3-ish
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-
-#
-# Compat for python2.7
-#
-
-# One unittest needs to import builtins via __import__() so we need to have
-# the string that represents it
-try:
- import __builtin__
-except ImportError:
- BUILTINS = 'builtins'
-else:
- BUILTINS = '__builtin__'
diff --git a/ansible_collections/netapp/elementsw/tests/unit/compat/mock.py b/ansible_collections/netapp/elementsw/tests/unit/compat/mock.py
deleted file mode 100644
index 0972cd2e8..000000000
--- a/ansible_collections/netapp/elementsw/tests/unit/compat/mock.py
+++ /dev/null
@@ -1,122 +0,0 @@
-# (c) 2014, Toshio Kuratomi <tkuratomi@ansible.com>
-#
-# 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 <http://www.gnu.org/licenses/>.
-
-# 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/netapp/elementsw/tests/unit/compat/unittest.py b/ansible_collections/netapp/elementsw/tests/unit/compat/unittest.py
deleted file mode 100644
index 73a20cf8c..000000000
--- a/ansible_collections/netapp/elementsw/tests/unit/compat/unittest.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# (c) 2014, Toshio Kuratomi <tkuratomi@ansible.com>
-#
-# 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 <http://www.gnu.org/licenses/>.
-
-# 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
-
-import pytest
-
-# 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')
-
- class TestCase:
- """ skip everything """
- pytestmark = pytest.mark.skip('Skipping Unit Tests on 2.6 as unittest2 may not be available')
-else:
- from unittest import *
diff --git a/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_access_group.py b/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_access_group.py
deleted file mode 100644
index 0bd1e2550..000000000
--- a/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_access_group.py
+++ /dev/null
@@ -1,175 +0,0 @@
-''' unit test for Ansible module: na_elementsw_account.py '''
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-import json
-import pytest
-
-from ansible_collections.netapp.elementsw.tests.unit.compat import unittest
-from ansible_collections.netapp.elementsw.tests.unit.compat.mock import patch
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-
-if not netapp_utils.has_sf_sdk():
- pytestmark = pytest.mark.skip('skipping as missing required SolidFire Python SDK')
-
-from ansible_collections.netapp.elementsw.plugins.modules.na_elementsw_access_group \
- import ElementSWAccessGroup as my_module # module under test
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleExitJson(Exception):
- """Exception class to be raised by module.exit_json and caught by the test case"""
- pass
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
- pass
-
-
-def exit_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over exit_json; package return data into an exception"""
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-ADD_ERROR = 'some_error_in_add_access_group'
-
-
-class MockSFConnection(object):
- ''' mock connection to ElementSW host '''
-
- class Bunch(object): # pylint: disable=too-few-public-methods
- ''' create object with arbitrary attributes '''
- def __init__(self, **kw):
- ''' called with (k1=v1, k2=v2), creates obj.k1, obj.k2 with values v1, v2 '''
- setattr(self, '__dict__', kw)
-
- def __init__(self, force_error=False, where=None):
- ''' save arguments '''
- self.force_error = force_error
- self.where = where
-
- def list_volume_access_groups(self, *args, **kwargs): # pylint: disable=unused-argument
- ''' build access_group list: access_groups.name, access_groups.account_id '''
- access_groups = list()
- access_group_list = self.Bunch(volume_access_groups=access_groups)
- return access_group_list
-
- def create_volume_access_group(self, *args, **kwargs): # pylint: disable=unused-argument
- ''' We don't check the return code, but could force an exception '''
- if self.force_error and 'add' in self.where:
- # The module does not check for a specific exception :(
- raise OSError(ADD_ERROR)
-
- def get_account_by_name(self, *args, **kwargs): # pylint: disable=unused-argument
- ''' returns account_id '''
- if self.force_error and 'account_id' in self.where:
- account_id = None
- else:
- account_id = 1
- print('account_id', account_id)
- account = self.Bunch(account_id=account_id)
- result = self.Bunch(account=account)
- return result
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- def setUp(self):
- self.mock_module_helper = patch.multiple(basic.AnsibleModule,
- exit_json=exit_json,
- fail_json=fail_json)
- self.mock_module_helper.start()
- self.addCleanup(self.mock_module_helper.stop)
-
- def test_module_fail_when_required_args_missing(self):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleFailJson) as exc:
- set_module_args({})
- my_module()
- print('Info: %s' % exc.value.args[0]['msg'])
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_ensure_command_called(self, mock_create_sf_connection):
- ''' a more interesting test '''
- set_module_args({
- 'state': 'present',
- 'name': 'element_groupname',
- 'account_id': 'element_account_id',
- 'hostname': 'hostname',
- 'username': 'username',
- 'password': 'password',
- })
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- # It may not be a good idea to start with apply
- # More atomic methods can be easier to mock
- my_obj.apply()
- print(exc.value.args[0])
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_check_error_reporting_on_add_exception(self, mock_create_sf_connection):
- ''' a more interesting test '''
- set_module_args({
- 'state': 'present',
- 'name': 'element_groupname',
- 'account_id': 'element_account_id',
- 'hostname': 'hostname',
- 'username': 'username',
- 'password': 'password',
- })
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection(force_error=True, where=['add'])
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- # It may not be a good idea to start with apply
- # More atomic methods can be easier to mock
- # apply() is calling list_accounts() and add_account()
- my_obj.apply()
- print(exc.value.args[0])
- message = 'Error creating volume access group element_groupname: %s' % ADD_ERROR
- assert exc.value.args[0]['msg'] == message
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_check_error_reporting_on_invalid_account_id(self, mock_create_sf_connection):
- ''' a more interesting test '''
- set_module_args({
- 'state': 'present',
- 'name': 'element_groupname',
- 'account_id': 'element_account_id',
- 'volumes': ['volume1'],
- 'hostname': 'hostname',
- 'username': 'username',
- 'password': 'password',
- })
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection(force_error=True, where=['account_id'])
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- # It may not be a good idea to start with apply
- # More atomic methods can be easier to mock
- # apply() is calling list_accounts() and add_account()
- my_obj.apply()
- print(exc.value.args[0])
- message = 'Error: Specified account id "%s" does not exist.' % 'element_account_id'
- assert exc.value.args[0]['msg'] == message
diff --git a/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_access_group_volumes.py b/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_access_group_volumes.py
deleted file mode 100644
index fb78ad78a..000000000
--- a/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_access_group_volumes.py
+++ /dev/null
@@ -1,245 +0,0 @@
-''' unit test for Ansible module: na_elementsw_access_group_volumes.py '''
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-import json
-import pytest
-
-from ansible_collections.netapp.elementsw.tests.unit.compat import unittest
-from ansible_collections.netapp.elementsw.tests.unit.compat.mock import patch
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-
-if not netapp_utils.has_sf_sdk():
- pytestmark = pytest.mark.skip('skipping as missing required SolidFire Python SDK')
-
-from ansible_collections.netapp.elementsw.plugins.modules.na_elementsw_access_group_volumes \
- import ElementSWAccessGroupVolumes as my_module # module under test
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleExitJson(Exception):
- """Exception class to be raised by module.exit_json and caught by the test case"""
- pass
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
- pass
-
-
-def exit_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over exit_json; package return data into an exception"""
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-MODIFY_ERROR = 'some_error_in_modify_access_group'
-
-VOLUME_ID = 777
-
-
-class MockSFConnection(object):
- ''' mock connection to ElementSW host '''
-
- class Bunch(object): # pylint: disable=too-few-public-methods
- ''' create object with arbitrary attributes '''
- def __init__(self, **kw):
- ''' called with (k1=v1, k2=v2), creates obj.k1, obj.k2 with values v1, v2 '''
- setattr(self, '__dict__', kw)
-
- def __init__(self, force_error=False, where=None, volume_id=None):
- ''' save arguments '''
- self.force_error = force_error
- self.where = where
- self.volume_id = volume_id
-
- def list_volume_access_groups(self, *args, **kwargs): # pylint: disable=unused-argument
- ''' build access_group list: access_groups.name, access_groups.account_id '''
- group_name = 'element_groupname'
- if self.volume_id is None:
- volume_list = list()
- else:
- volume_list = [self.volume_id]
- access_group = self.Bunch(name=group_name, volume_access_group_id=888, volumes=volume_list)
- access_groups = [access_group]
- access_group_list = self.Bunch(volume_access_groups=access_groups)
- return access_group_list
-
- def list_volumes_for_account(self, *args, **kwargs): # pylint: disable=unused-argument
- ''' build volume list: volume.name, volume.id '''
- volume = self.Bunch(name='element_volumename', volume_id=VOLUME_ID, delete_time='')
- volumes = [volume]
- volume_list = self.Bunch(volumes=volumes)
- return volume_list
-
- def modify_volume_access_group(self, *args, **kwargs): # pylint: disable=unused-argument
- ''' We don't check the return code, but could force an exception '''
- if self.force_error and 'modify_exception' in self.where:
- # The module does not check for a specific exception :(
- raise OSError(MODIFY_ERROR)
-
- def get_account_by_name(self, *args, **kwargs): # pylint: disable=unused-argument
- ''' returns account_id '''
- if self.force_error and 'get_account_id' in self.where:
- account_id = None
- else:
- account_id = 1
- print('account_id', account_id)
- account = self.Bunch(account_id=account_id)
- result = self.Bunch(account=account)
- return result
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- ARGS = {
- 'state': 'present',
- 'access_group': 'element_groupname',
- 'volumes': 'element_volumename',
- 'account_id': 'element_account_id',
- 'hostname': 'hostname',
- 'username': 'username',
- 'password': 'password',
- }
-
- def setUp(self):
- self.mock_module_helper = patch.multiple(basic.AnsibleModule,
- exit_json=exit_json,
- fail_json=fail_json)
- self.mock_module_helper.start()
- self.addCleanup(self.mock_module_helper.stop)
-
- def test_module_fail_when_required_args_missing(self):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleFailJson) as exc:
- set_module_args({})
- my_module()
- print('Info: %s' % exc.value.args[0]['msg'])
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_add_volume(self, mock_create_sf_connection):
- ''' adding a volume '''
- args = dict(self.ARGS) # deep copy as other tests can modify args
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_add_volume_idempotent(self, mock_create_sf_connection):
- ''' adding a volume that is already in the access group '''
- args = dict(self.ARGS)
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection(volume_id=VOLUME_ID)
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert not exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_remove_volume(self, mock_create_sf_connection):
- ''' removing a volume that is in the access group '''
- args = dict(self.ARGS)
- args['state'] = 'absent'
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection(volume_id=VOLUME_ID)
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_remove_volume_idempotent(self, mock_create_sf_connection):
- ''' removing a volume that is not in the access group '''
- args = dict(self.ARGS)
- args['state'] = 'absent'
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert not exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_check_error_reporting_on_modify_exception(self, mock_create_sf_connection):
- ''' modify does not return anything but can raise an exception '''
- args = dict(self.ARGS)
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection(force_error=True, where=['modify_exception'])
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- message = 'Error updating volume access group element_groupname: %s' % MODIFY_ERROR
- assert exc.value.args[0]['msg'] == message
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_check_error_reporting_on_invalid_volume_name(self, mock_create_sf_connection):
- ''' report error if volume does not exist '''
- args = dict(self.ARGS)
- args['volumes'] = ['volume1']
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- message = 'Error: Specified volume %s does not exist' % 'volume1'
- assert exc.value.args[0]['msg'] == message
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_check_error_reporting_on_invalid_account_group_name(self, mock_create_sf_connection):
- ''' report error if access group does not exist '''
- args = dict(self.ARGS)
- args['access_group'] = 'something_else'
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- message = 'Error: Specified access group "%s" does not exist for account id: %s.' % ('something_else', 'element_account_id')
- assert exc.value.args[0]['msg'] == message
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_check_error_reporting_on_invalid_account_id(self, mock_create_sf_connection):
- ''' report error if account id is not found '''
- args = dict(self.ARGS)
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection(force_error=True, where='get_account_id')
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- message = 'Error: Specified account id "%s" does not exist.' % 'element_account_id'
- assert exc.value.args[0]['msg'] == message
diff --git a/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_account.py b/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_account.py
deleted file mode 100644
index 8075ba5c4..000000000
--- a/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_account.py
+++ /dev/null
@@ -1,137 +0,0 @@
-''' unit test for Ansible module: na_elementsw_account.py '''
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-import json
-import pytest
-
-from ansible_collections.netapp.elementsw.tests.unit.compat import unittest
-from ansible_collections.netapp.elementsw.tests.unit.compat.mock import patch
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-
-if not netapp_utils.has_sf_sdk():
- pytestmark = pytest.mark.skip('skipping as missing required SolidFire Python SDK')
-
-from ansible_collections.netapp.elementsw.plugins.modules.na_elementsw_account \
- import ElementSWAccount as my_module # module under test
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleExitJson(Exception):
- """Exception class to be raised by module.exit_json and caught by the test case"""
- pass
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
- pass
-
-
-def exit_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over exit_json; package return data into an exception"""
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-ADD_ERROR = 'some_error_in_add_account'
-
-
-class MockSFConnection(object):
- ''' mock connection to ElementSW host '''
-
- class Bunch(object): # pylint: disable=too-few-public-methods
- ''' create object with arbitrary attributes '''
- def __init__(self, **kw):
- ''' called with (k1=v1, k2=v2), creates obj.k1, obj.k2 with values v1, v2 '''
- setattr(self, '__dict__', kw)
-
- def __init__(self, force_error=False, where=None):
- ''' save arguments '''
- self.force_error = force_error
- self.where = where
-
- def list_accounts(self, *args, **kwargs): # pylint: disable=unused-argument
- ''' build account list: account.username, account.account_id '''
- accounts = list()
- account_list = self.Bunch(accounts=accounts)
- return account_list
-
- def add_account(self, *args, **kwargs): # pylint: disable=unused-argument
- ''' We don't check the return code, but could force an exception '''
- if self.force_error and 'add' in self.where:
- # The module does not check for a specific exception :(
- raise OSError(ADD_ERROR)
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- def setUp(self):
- self.mock_module_helper = patch.multiple(basic.AnsibleModule,
- exit_json=exit_json,
- fail_json=fail_json)
- self.mock_module_helper.start()
- self.addCleanup(self.mock_module_helper.stop)
-
- def test_module_fail_when_required_args_missing(self):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleFailJson) as exc:
- set_module_args({})
- my_module()
- print('Info: %s' % exc.value.args[0]['msg'])
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_ensure_command_called(self, mock_create_sf_connection):
- ''' a more interesting test '''
- set_module_args({
- 'state': 'present',
- 'element_username': 'element_username',
- 'hostname': 'hostname',
- 'username': 'username',
- 'password': 'password',
- })
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- # It may not be a good idea to start with apply
- # More atomic methods can be easier to mock
- my_obj.apply()
- print(exc.value.args[0])
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_check_error_reporting_on_add_exception(self, mock_create_sf_connection):
- ''' a more interesting test '''
- set_module_args({
- 'state': 'present',
- 'element_username': 'element_username',
- 'hostname': 'hostname',
- 'username': 'username',
- 'password': 'password',
- })
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection(force_error=True, where=['add'])
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- # It may not be a good idea to start with apply
- # More atomic methods can be easier to mock
- # apply() is calling list_accounts() and add_account()
- my_obj.apply()
- print(exc.value.args[0])
- message = 'Error creating account element_username: %s' % ADD_ERROR
- assert exc.value.args[0]['msg'] == message
diff --git a/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_cluster.py b/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_cluster.py
deleted file mode 100644
index 6624f374d..000000000
--- a/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_cluster.py
+++ /dev/null
@@ -1,228 +0,0 @@
-''' unit test for Ansible module: na_elementsw_cluster.py '''
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-import inspect
-import json
-import pytest
-
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-from ansible_collections.netapp.elementsw.tests.unit.compat import unittest
-from ansible_collections.netapp.elementsw.tests.unit.compat.mock import patch
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-
-if not netapp_utils.has_sf_sdk():
- pytestmark = pytest.mark.skip('skipping as missing required SolidFire Python SDK')
-
-from ansible_collections.netapp.elementsw.plugins.modules.na_elementsw_cluster \
- import ElementSWCluster as my_module # module under test
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleExitJson(Exception):
- """Exception class to be raised by module.exit_json and caught by the test case"""
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
-
-
-def exit_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over exit_json; package return data into an exception"""
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-NODE_ID1 = 777
-NODE_ID2 = 888
-NODE_ID3 = 999
-
-
-class MockSFConnection(object):
- ''' mock connection to ElementSW host '''
-
- class Bunch(object): # pylint: disable=too-few-public-methods
- ''' create object with arbitrary attributes '''
- def __init__(self, **kw):
- ''' called with (k1=v1, k2=v2), creates obj.k1, obj.k2 with values v1, v2 '''
- setattr(self, '__dict__', kw)
-
- def __repr__(self):
- results = dict()
- for key, value in vars(self).items():
- results[key] = repr(value)
- return repr(results)
-
- def __init__(self, force_error=False, where=None, nodes=None):
- ''' save arguments '''
- self.force_error = force_error
- self.where = where
- self.nodes = nodes
- self._port = 442
- self.called = list()
-
- def record(self, args, kwargs):
- name = inspect.stack()[1][3] # caller function name
- print('%s: , args: %s, kwargs: %s' % (name, args, kwargs))
- self.called.append(name)
-
- def create_cluster(self, *args, **kwargs): # pylint: disable=unused-argument
- self.record(repr(args), repr(kwargs))
-
- def send_request(self, *args, **kwargs): # pylint: disable=unused-argument
- self.record(repr(args), repr(kwargs))
-
- def get_config(self, *args, **kwargs): # pylint: disable=unused-argument
- self.record(repr(args), repr(kwargs))
- if self.force_error and self.where == 'get_config_exception':
- raise ConnectionError
- if self.nodes is not None:
- nodes = ['%d:%s' % (i, node) for i, node in enumerate(self.nodes)]
- else:
- nodes = list()
- cluster = self.Bunch(ensemble=nodes, cluster='cl_name')
- config = self.Bunch(cluster=cluster)
- return self.Bunch(config=config)
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- ARGS = {
- # 'state': 'present',
- 'management_virtual_ip': '10.10.10.10',
- 'storage_virtual_ip': '10.10.10.11',
- 'nodes': [NODE_ID1, NODE_ID2],
- 'hostname': 'hostname',
- 'username': 'username',
- 'password': 'password',
- }
-
- def setUp(self):
- self.mock_module_helper = patch.multiple(basic.AnsibleModule,
- exit_json=exit_json,
- fail_json=fail_json)
- self.mock_module_helper.start()
- self.addCleanup(self.mock_module_helper.stop)
-
- def test_module_fail_when_required_args_missing(self):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleFailJson) as exc:
- set_module_args({})
- my_module()
- print('Info: %s' % exc.value.args[0]['msg'])
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_create(self, mock_create_sf_connection):
- ''' create cluster basic '''
- args = dict(self.ARGS) # deep copy as other tests can modify args
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection(force_error=True, where='get_config_exception')
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert exc.value.args[0]['changed']
- msg = 'created'
- assert msg in exc.value.args[0]['msg']
- assert 'create_cluster' in my_obj.sfe_node.called
- assert 'send_request' not in my_obj.sfe_node.called
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_create_extra_parms(self, mock_create_sf_connection):
- ''' force a direct call to send_request '''
- args = dict(self.ARGS) # deep copy as other tests can modify args
- args['order_number'] = '12345'
- args['serial_number'] = '54321'
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection(force_error=True, where='get_config_exception')
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert exc.value.args[0]['changed']
- assert 'send_request' in my_obj.sfe_node.called
- assert 'create_cluster' not in my_obj.sfe_node.called
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_create_idempotent(self, mock_create_sf_connection):
- ''' cluster already exists with same nodes '''
- args = dict(self.ARGS)
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection(nodes=[NODE_ID1, NODE_ID2])
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert not exc.value.args[0]['changed']
- assert 'send_request' not in my_obj.sfe_node.called
- assert 'create_cluster' not in my_obj.sfe_node.called
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_create_idempotent_extra_nodes(self, mock_create_sf_connection):
- ''' cluster already exists with more nodes '''
- args = dict(self.ARGS)
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection(nodes=[NODE_ID1, NODE_ID2, NODE_ID3])
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- msg = 'Error: found existing cluster with more nodes in ensemble.'
- assert msg in exc.value.args[0]['msg']
- assert 'send_request' not in my_obj.sfe_node.called
- assert 'create_cluster' not in my_obj.sfe_node.called
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_create_idempotent_extra_nodes_ok(self, mock_create_sf_connection):
- ''' cluster already exists with more nodes but we're OK with a superset '''
- args = dict(self.ARGS)
- args['fail_if_cluster_already_exists_with_larger_ensemble'] = False
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection(nodes=[NODE_ID1, NODE_ID2, NODE_ID3])
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert not exc.value.args[0]['changed']
- msg = 'cluster already exists'
- assert msg in exc.value.args[0]['msg']
- assert 'send_request' not in my_obj.sfe_node.called
- assert 'create_cluster' not in my_obj.sfe_node.called
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_create_idempotent_missing_nodes(self, mock_create_sf_connection):
- ''' cluster already exists with fewer nodes.
- Since not every node is lister in the ensemble, we can't tell if it's an error or not '''
- args = dict(self.ARGS)
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection(nodes=[NODE_ID1])
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert not exc.value.args[0]['changed']
- msg = 'cluster already exists'
- assert msg in exc.value.args[0]['msg']
- assert 'send_request' not in my_obj.sfe_node.called
- assert 'create_cluster' not in my_obj.sfe_node.called
diff --git a/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_cluster_config.py b/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_cluster_config.py
deleted file mode 100644
index 79f461ccc..000000000
--- a/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_cluster_config.py
+++ /dev/null
@@ -1,157 +0,0 @@
-''' unit test for Ansible module: na_elementsw_cluster_config.py '''
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-import json
-import pytest
-
-from ansible_collections.netapp.elementsw.tests.unit.compat import unittest
-from ansible_collections.netapp.elementsw.tests.unit.compat.mock import patch
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-
-if not netapp_utils.has_sf_sdk():
- pytestmark = pytest.mark.skip('skipping as missing required SolidFire Python SDK')
-
-from ansible_collections.netapp.elementsw.plugins.modules.na_elementsw_cluster_config \
- import ElementSWClusterConfig as my_module # module under test
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleExitJson(Exception):
- """Exception class to be raised by module.exit_json and caught by the test case"""
- pass
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
- pass
-
-
-def exit_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over exit_json; package return data into an exception"""
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-GET_ERROR = 'some_error_in_get_ntp_info'
-
-
-class MockSFConnection(object):
- ''' mock connection to ElementSW host '''
-
- class Bunch(object): # pylint: disable=too-few-public-methods
- ''' create object with arbitrary attributes '''
-
- def __init__(self, **kw):
- ''' called with (k1=v1, k2=v2), creates obj.k1, obj.k2 with values v1, v2 '''
- setattr(self, '__dict__', kw)
-
- def __init__(self, force_error=False, where=None):
- ''' save arguments '''
- self.force_error = force_error
- self.where = where
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- def setUp(self):
- self.mock_module_helper = patch.multiple(basic.AnsibleModule,
- exit_json=exit_json,
- fail_json=fail_json)
- self.mock_module_helper.start()
- self.addCleanup(self.mock_module_helper.stop)
-
- def set_default_args(self):
- return dict({
- 'hostname': '10.253.168.129',
- 'username': 'namburu',
- 'password': 'SFlab1234',
- })
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_module_fail_when_required_args_missing(self, mock_create_sf_connection):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleFailJson) as exc:
- set_module_args({})
- my_module()
- print('Info: %s' % exc.value.args[0]['msg'])
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_ensure_setup_ntp_info_called(self, mock_create_sf_connection):
- ''' test if setup_ntp_info is called '''
- module_args = {}
- module_args.update(self.set_default_args())
- ntp_dict = {'set_ntp_info': {'broadcastclient': None,
- 'ntp_servers': ['1.1.1.1']}}
- module_args.update(ntp_dict)
- set_module_args(module_args)
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print('Info: test_setup_ntp_info: %s' % repr(exc.value))
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_ensure_set_encryption_at_rest_called(self, mock_create_sf_connection):
- ''' test if set_encryption_at_rest is called '''
- module_args = {}
- module_args.update(self.set_default_args())
- module_args.update({'encryption_at_rest': 'present'})
- set_module_args(module_args)
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print('Info: test_set_encryption_at_rest enable: %s' % repr(exc.value))
- assert not exc.value.args[0]['changed']
- module_args.update({'encryption_at_rest': 'absent'})
- set_module_args(module_args)
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print('Info: test_set_encryption_at_rest disable: %s' % repr(exc.value))
- assert not exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_ensure_enable_feature_called(self, mock_create_sf_connection):
- ''' test if enable_feature for vvols is called '''
- module_args = {}
- module_args.update(self.set_default_args())
- module_args.update({'enable_virtual_volumes': True})
- set_module_args(module_args)
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print('Info: test_enable_feature: %s' % repr(exc.value))
- assert not exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_ensure_set_cluster_full_threshold_called(self, mock_create_sf_connection):
- ''' test if set_cluster_full threshold is called '''
- module_args = {}
- module_args.update(self.set_default_args())
- cluster_mod_dict = \
- {'modify_cluster_full_threshold': {'stage2_aware_threshold': 2,
- 'stage3_block_threshold_percent': 2,
- 'max_metadata_over_provision_factor': 2}}
- module_args.update(cluster_mod_dict)
- set_module_args(module_args)
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print('Info: test_set_cluster_full_threshold: %s' % repr(exc.value))
- assert exc.value.args[0]['changed']
diff --git a/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_cluster_snmp.py b/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_cluster_snmp.py
deleted file mode 100644
index 9236daa04..000000000
--- a/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_cluster_snmp.py
+++ /dev/null
@@ -1,176 +0,0 @@
-''' unit test for Ansible module: na_elementsw_cluster_snmp.py '''
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-import json
-import pytest
-
-from ansible_collections.netapp.elementsw.tests.unit.compat import unittest
-from ansible_collections.netapp.elementsw.tests.unit.compat.mock import patch
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-
-if not netapp_utils.has_sf_sdk():
- pytestmark = pytest.mark.skip('skipping as missing required SolidFire Python SDK')
-
-from ansible_collections.netapp.elementsw.plugins.modules.na_elementsw_cluster_snmp \
- import ElementSWClusterSnmp as my_module # module under test
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleExitJson(Exception):
- """Exception class to be raised by module.exit_json and caught by the test case"""
- pass
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
- pass
-
-
-def exit_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over exit_json; package return data into an exception"""
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-GET_ERROR = 'some_error_in_get_snmp_info'
-
-
-class MockSFConnection(object):
- ''' mock connection to ElementSW host '''
-
- class Bunch(object): # pylint: disable=too-few-public-methods
- ''' create object with arbitrary attributes '''
- def __init__(self, **kw):
- ''' called with (k1=v1, k2=v2), creates obj.k1, obj.k2 with values v1, v2 '''
- setattr(self, '__dict__', kw)
-
- def __init__(self, force_error=False, where=None):
- ''' save arguments '''
- self.force_error = force_error
- self.where = where
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- def setUp(self):
- self.mock_module_helper = patch.multiple(basic.AnsibleModule,
- exit_json=exit_json,
- fail_json=fail_json)
- self.mock_module_helper.start()
- self.addCleanup(self.mock_module_helper.stop)
-
- def set_default_args(self):
- return dict({
- 'hostname': '10.117.78.131',
- 'username': 'admin',
- 'password': 'netapp1!',
- })
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_module_fail_when_required_args_missing(self, mock_create_sf_connection):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleFailJson) as exc:
- set_module_args({})
- my_module()
- print('Info: %s' % exc.value)
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_ensure_enable_snmp_called(self, mock_create_sf_connection):
- ''' test if enable_snmp is called '''
- module_args = {}
- module_args.update(self.set_default_args())
- module_args.update({'snmp_v3_enabled': True,
- 'state': 'present'})
- module_args.update({'usm_users': {'access': 'rouser',
- 'name': 'TestUser',
- 'password': 'ChangeMe@123',
- 'passphrase': 'ChangeMe@123',
- 'secLevel': 'auth', }})
-
- module_args.update({'networks': {'access': 'ro',
- 'cidr': 24,
- 'community': 'TestNetwork',
- 'network': '192.168.0.1', }})
- set_module_args(module_args)
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print('Info: test_if_enable_snmp_called: %s' % repr(exc.value))
- assert exc.value
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_ensure_configure_snmp_from_version_3_TO_version_2_called(self, mock_create_sf_connection):
- ''' test if configure snmp from version_3 to version_2'''
- module_args = {}
- module_args.update(self.set_default_args())
- module_args.update({'snmp_v3_enabled': False,
- 'state': 'present'})
- module_args.update({'usm_users': {'access': 'rouser',
- 'name': 'TestUser',
- 'password': 'ChangeMe@123',
- 'passphrase': 'ChangeMe@123',
- 'secLevel': 'auth', }})
-
- module_args.update({'networks': {'access': 'ro',
- 'cidr': 24,
- 'community': 'TestNetwork',
- 'network': '192.168.0.1', }})
- set_module_args(module_args)
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print('Info: test_ensure_configure_snmp_from_version_3_TO_version_2_called: %s' % repr(exc.value))
- assert exc.value
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_ensure_configure_snmp_from_version_2_TO_version_3_called(self, mock_create_sf_connection):
- ''' test if configure snmp from version_2 to version_3'''
- module_args = {}
- module_args.update(self.set_default_args())
- module_args.update({'snmp_v3_enabled': True,
- 'state': 'present'})
- module_args.update({'usm_users': {'access': 'rouser',
- 'name': 'TestUser_sample',
- 'password': 'ChangeMe@123',
- 'passphrase': 'ChangeMe@123',
- 'secLevel': 'auth', }})
-
- module_args.update({'networks': {'access': 'ro',
- 'cidr': 24,
- 'community': 'TestNetwork',
- 'network': '192.168.0.1', }})
- set_module_args(module_args)
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print('Info: test_ensure_configure_snmp_from_version_2_TO_version_3_called: %s' % repr(exc.value))
- assert exc.value
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_ensure_disable_snmp_called(self, mock_create_sf_connection):
- ''' test if disable_snmp is called '''
- module_args = {}
- module_args.update(self.set_default_args())
- module_args.update({'state': 'absent'})
- set_module_args(module_args)
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print('Info: test_if_disable_snmp_called: %s' % repr(exc.value))
- assert exc.value
diff --git a/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_info.py b/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_info.py
deleted file mode 100644
index dc8fd5e23..000000000
--- a/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_info.py
+++ /dev/null
@@ -1,344 +0,0 @@
-''' unit tests for Ansible module: na_elementsw_info.py '''
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-import inspect
-import json
-import pytest
-
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-from ansible_collections.netapp.elementsw.tests.unit.compat import unittest
-from ansible_collections.netapp.elementsw.tests.unit.compat.mock import patch
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-
-if not netapp_utils.has_sf_sdk():
- pytestmark = pytest.mark.skip('skipping as missing required SolidFire Python SDK')
-
-from ansible_collections.netapp.elementsw.plugins.modules.na_elementsw_info \
- import ElementSWInfo as my_module # module under test
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleExitJson(Exception):
- """Exception class to be raised by module.exit_json and caught by the test case"""
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
-
-
-def exit_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over exit_json; package return data into an exception"""
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-NODE_ID1 = 777
-NODE_ID2 = 888
-NODE_ID3 = 999
-
-
-class MockSFConnection(object):
- ''' mock connection to ElementSW host '''
-
- class Bunch(object): # pylint: disable=too-few-public-methods
- ''' create object with arbitrary attributes '''
- def __init__(self, **kw):
- ''' called with (k1=v1, k2=v2), creates obj.k1, obj.k2 with values v1, v2 '''
- setattr(self, '__dict__', kw)
-
- def __repr__(self):
- results = dict()
- for key, value in vars(self).items():
- results[key] = repr(value)
- return repr(results)
-
- def to_json(self):
- return json.loads(json.dumps(self, default=lambda x: x.__dict__))
-
- def __init__(self, force_error=False, where=None):
- ''' save arguments '''
- self.force_error = force_error
- self.where = where
- self.nodes = [NODE_ID1, NODE_ID2, NODE_ID3]
- self._port = 442
- self.called = list()
- if force_error and where == 'cx':
- raise netapp_utils.solidfire.common.ApiConnectionError('testme')
-
- def record(self, args, kwargs):
- name = inspect.stack()[1][3] # caller function name
- print('%s: , args: %s, kwargs: %s' % (name, args, kwargs))
- self.called.append(name)
-
- def list_accounts(self, *args, **kwargs): # pylint: disable=unused-argument
- ''' build account list: account.username, account.account_id '''
- self.record(repr(args), repr(kwargs))
- accounts = list()
- accounts.append({'username': 'user1'})
- account_list = self.Bunch(accounts=accounts)
- return account_list
-
- def list_all_nodes(self, *args, **kwargs): # pylint: disable=unused-argument
- ''' build all_node list: all_node.name, all_node.all_node_id '''
- self.record(repr(args), repr(kwargs))
- all_nodes = list()
- all_nodes.append({'id': 123})
- all_node_list = self.Bunch(all_nodes=all_nodes)
- return all_node_list
-
- def list_drives(self, *args, **kwargs): # pylint: disable=unused-argument
- ''' build drive list: drive.name, drive.drive_id '''
- self.record(repr(args), repr(kwargs))
- drives = list()
- drives.append({'id': 123})
- drive_list = self.Bunch(drives=drives)
- return drive_list
-
- def get_config(self, *args, **kwargs): # pylint: disable=unused-argument
- self.record(repr(args), repr(kwargs))
- if self.force_error and self.where == 'get_config_exception':
- raise ConnectionError
- if self.nodes is not None:
- nodes = ['%d:%s' % (i, node) for i, node in enumerate(self.nodes)]
- else:
- nodes = list()
- cluster = self.Bunch(ensemble=nodes, cluster='cl_name')
- config = self.Bunch(cluster=cluster)
- return self.Bunch(config=config)
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- ARGS = {
- # 'state': 'present',
- 'hostname': 'hostname',
- 'username': 'username',
- 'password': 'password',
- }
-
- def setUp(self):
- self.mock_module_helper = patch.multiple(basic.AnsibleModule,
- exit_json=exit_json,
- fail_json=fail_json)
- self.mock_module_helper.start()
- self.addCleanup(self.mock_module_helper.stop)
-
- def test_module_fail_when_required_args_missing(self):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleFailJson) as exc:
- set_module_args({})
- my_module()
- print('Info: %s' % exc.value.args[0]['msg'])
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_info_all_default(self, mock_create_sf_connection):
- ''' gather all by default '''
- args = dict(self.ARGS) # deep copy as other tests can modify args
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert not exc.value.args[0]['changed']
- assert 'cluster_accounts' in exc.value.args[0]['info']
- assert 'node_config' in exc.value.args[0]['info']
- username = exc.value.args[0]['info']['cluster_accounts']['accounts'][0]['username']
- assert username == 'user1'
- assert 'list_accounts' in my_obj.sfe_node.called
- assert 'get_config' in my_obj.sfe_node.called
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_info_all_all(self, mock_create_sf_connection):
- ''' gather all explictly '''
- args = dict(self.ARGS) # deep copy as other tests can modify args
- args['gather_subsets'] = ['all']
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert not exc.value.args[0]['changed']
- assert 'list_accounts' in my_obj.sfe_node.called
- assert 'get_config' in my_obj.sfe_node.called
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_info_all_clusters(self, mock_create_sf_connection):
- ''' gather all cluster scoped subsets '''
- args = dict(self.ARGS) # deep copy as other tests can modify args
- args['gather_subsets'] = ['all_clusters']
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert not exc.value.args[0]['changed']
- assert 'cluster_accounts' in exc.value.args[0]['info']
- accounts = exc.value.args[0]['info']['cluster_accounts']
- print('accounts: >>%s<<' % accounts, type(accounts))
- print(my_obj.sfe_node.called)
- assert 'list_accounts' in my_obj.sfe_node.called
- assert 'get_config' not in my_obj.sfe_node.called
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_info_all_nodes(self, mock_create_sf_connection):
- ''' gather all node scoped subsets '''
- args = dict(self.ARGS) # deep copy as other tests can modify args
- args['gather_subsets'] = ['all_nodes']
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert not exc.value.args[0]['changed']
- assert 'node_config' in exc.value.args[0]['info']
- config = exc.value.args[0]['info']['node_config']
- print('config: >>%s<<' % config, type(config))
- print(my_obj.sfe_node.called)
- assert 'list_accounts' not in my_obj.sfe_node.called
- assert 'get_config' in my_obj.sfe_node.called
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_info_all_nodes_not_alone(self, mock_create_sf_connection):
- ''' gather all node scoped subsets but fail as another subset is present '''
- args = dict(self.ARGS) # deep copy as other tests can modify args
- args['gather_subsets'] = ['all_nodes', 'dummy']
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- msg = 'no other subset is allowed'
- assert msg in exc.value.args[0]['msg']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_info_filter_success(self, mock_create_sf_connection):
- ''' filter on key, value - succesful match '''
- args = dict(self.ARGS) # deep copy as other tests can modify args
- args['gather_subsets'] = ['cluster_accounts']
- args['filter'] = dict(username='user1')
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- username = exc.value.args[0]['info']['cluster_accounts']['accounts'][0]['username']
- assert username == 'user1'
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_info_filter_bad_key(self, mock_create_sf_connection):
- ''' filter on key, value - key not found '''
- args = dict(self.ARGS) # deep copy as other tests can modify args
- args['gather_subsets'] = ['cluster_accounts']
- args['filter'] = dict(bad_key='user1')
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- msg = 'Error: key bad_key not found in'
- assert msg in exc.value.args[0]['msg']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_info_filter_bad_key_ignored(self, mock_create_sf_connection):
- ''' filter on key, value - key not found - ignore error '''
- args = dict(self.ARGS) # deep copy as other tests can modify args
- args['gather_subsets'] = ['cluster_accounts']
- args['filter'] = dict(bad_key='user1')
- args['fail_on_key_not_found'] = False
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert exc.value.args[0]['info']['cluster_accounts']['accounts'] == list()
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_info_filter_record_not_found(self, mock_create_sf_connection):
- ''' filter on key, value - no match '''
- args = dict(self.ARGS) # deep copy as other tests can modify args
- args['gather_subsets'] = ['cluster_accounts']
- args['filter'] = dict(bad_key='user1')
- args['fail_on_key_not_found'] = False
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert exc.value.args[0]['info']['cluster_accounts']['accounts'] == list()
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_info_filter_record_not_found_error(self, mock_create_sf_connection):
- ''' filter on key, value - no match - force error on empty '''
- args = dict(self.ARGS) # deep copy as other tests can modify args
- args['gather_subsets'] = ['cluster_accounts']
- args['filter'] = dict(username='user111')
- args['fail_on_record_not_found'] = True
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- msg = 'Error: no match for'
- assert msg in exc.value.args[0]['msg']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_connection_error(self, mock_create_sf_connection):
- ''' filter on key, value - no match - force error on empty '''
- args = dict(self.ARGS) # deep copy as other tests can modify args
- set_module_args(args)
- # force a connection exception
- mock_create_sf_connection.side_effect = netapp_utils.solidfire.common.ApiConnectionError('testme')
- with pytest.raises(AnsibleFailJson) as exc:
- my_module()
- print(exc.value.args[0])
- msg = 'Failed to create connection for hostname:442'
- assert msg in exc.value.args[0]['msg']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_other_connection_error(self, mock_create_sf_connection):
- ''' filter on key, value - no match - force error on empty '''
- args = dict(self.ARGS) # deep copy as other tests can modify args
- set_module_args(args)
- # force a connection exception
- mock_create_sf_connection.side_effect = KeyError('testme')
- with pytest.raises(AnsibleFailJson) as exc:
- my_module()
- print(exc.value.args[0])
- msg = 'Failed to connect for hostname:442'
- assert msg in exc.value.args[0]['msg']
diff --git a/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_initiators.py b/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_initiators.py
deleted file mode 100644
index ee5ff85db..000000000
--- a/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_initiators.py
+++ /dev/null
@@ -1,201 +0,0 @@
-''' unit test for Ansible module: na_elementsw_initiators.py '''
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-import json
-import pytest
-
-from ansible_collections.netapp.elementsw.tests.unit.compat import unittest
-from ansible_collections.netapp.elementsw.tests.unit.compat.mock import patch
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-
-if not netapp_utils.has_sf_sdk():
- pytestmark = pytest.mark.skip('skipping as missing required SolidFire Python SDK')
-
-from ansible_collections.netapp.elementsw.plugins.modules.na_elementsw_initiators \
- import ElementSWInitiators as my_module # module under test
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleExitJson(Exception):
- """Exception class to be raised by module.exit_json and caught by the test case"""
- pass
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
- pass
-
-
-def exit_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over exit_json; package return data into an exception"""
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-class MockSFConnection(object):
- ''' mock connection to ElementSW host '''
-
- class Bunch(object): # pylint: disable=too-few-public-methods
- ''' create object with arbitrary attributes '''
- def __init__(self, **kw):
- ''' called with (k1=v1, k2=v2), creates obj.k1, obj.k2 with values v1, v2 '''
- setattr(self, '__dict__', kw)
-
- class Initiator(object):
- def __init__(self, entries):
- self.__dict__.update(entries)
-
- def list_initiators(self):
- ''' build initiator Obj '''
- initiator = self.Bunch(
- initiator_name="a",
- initiator_id=13,
- alias="a2",
- # Note: 'config-mgmt' and 'event-source' are added for telemetry
- attributes={'key': 'value', 'config-mgmt': 'ansible', 'event-source': 'na_elementsw_initiators'},
- volume_access_groups=[1]
- )
- initiators = self.Bunch(
- initiators=[initiator]
- )
- return initiators
-
- def create_initiators(self, *args, **kwargs): # pylint: disable=unused-argument
- ''' mock method '''
- pass
-
- def delete_initiators(self, *args, **kwargs): # pylint: disable=unused-argument
- ''' mock method '''
- pass
-
- def modify_initiators(self, *args, **kwargs): # pylint: disable=unused-argument
- ''' mock method '''
- pass
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- def setUp(self):
- self.mock_module_helper = patch.multiple(basic.AnsibleModule,
- exit_json=exit_json,
- fail_json=fail_json)
- self.mock_module_helper.start()
- self.addCleanup(self.mock_module_helper.stop)
-
- def set_default_args(self):
- return dict({
- 'hostname': '10.253.168.129',
- 'username': 'namburu',
- 'password': 'SFlab1234',
- })
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_module_fail_when_required_args_missing(self, mock_create_sf_connection):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleFailJson) as exc:
- set_module_args({})
- my_module()
- print('Info: %s' % exc.value.args[0]['msg'])
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_create_initiator(self, mock_create_sf_connection):
- ''' test if create initiator is called '''
- module_args = {}
- module_args.update(self.set_default_args())
- initiator_dict = {
- "state": "present",
- "initiators": [{
- "name": "newinitiator1",
- "alias": "newinitiator1alias",
- "attributes": {"key1": "value1"}
- }]
- }
- module_args.update(initiator_dict)
- set_module_args(module_args)
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print('Info: test_create_initiators: %s' % repr(exc.value))
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_delete_initiator(self, mock_create_sf_connection):
- ''' test if delete initiator is called '''
- module_args = {}
- module_args.update(self.set_default_args())
- initiator_dict = {
- "state": "absent",
- "initiators": [{
- "name": "a"
- }]
- }
- module_args.update(initiator_dict)
- set_module_args(module_args)
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print('Info: test_delete_initiators: %s' % repr(exc.value))
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_modify_initiator(self, mock_create_sf_connection):
- ''' test if modify initiator is called '''
- module_args = {}
- module_args.update(self.set_default_args())
- initiator_dict = {
- "state": "present",
- "initiators": [{
- "name": "a",
- "alias": "a3",
- "attributes": {"key": "value"}
- }]
- }
- module_args.update(initiator_dict)
- set_module_args(module_args)
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print('Info: test_modify_initiators: %s' % repr(exc.value))
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_modify_initiator_idempotent(self, mock_create_sf_connection):
- ''' test if modify initiator is called '''
- module_args = {}
- module_args.update(self.set_default_args())
- initiator_dict = {
- "state": "present",
- "initiators": [{
- "name": "a",
- "alias": "a2",
- "attributes": {"key": "value"},
- "volume_access_group_id": 1
- }]
- }
- module_args.update(initiator_dict)
- set_module_args(module_args)
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print('Info: test_modify_initiators: %s' % repr(exc.value))
- assert not exc.value.args[0]['changed']
diff --git a/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_network_interfaces.py b/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_network_interfaces.py
deleted file mode 100644
index 5364a4e76..000000000
--- a/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_network_interfaces.py
+++ /dev/null
@@ -1,293 +0,0 @@
-''' unit tests for Ansible module: na_elementsw_info.py '''
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-import inspect
-import json
-import pytest
-
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-from ansible_collections.netapp.elementsw.tests.unit.compat import unittest
-from ansible_collections.netapp.elementsw.tests.unit.compat.mock import patch
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-
-if not netapp_utils.has_sf_sdk():
- pytestmark = pytest.mark.skip('skipping as missing required SolidFire Python SDK')
-
-from ansible_collections.netapp.elementsw.plugins.modules.na_elementsw_network_interfaces \
- import ElementSWNetworkInterfaces as my_module # module under test
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleExitJson(Exception):
- """Exception class to be raised by module.exit_json and caught by the test case"""
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
-
-
-def exit_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over exit_json; package return data into an exception"""
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-NODE_ID1 = 777
-NODE_ID2 = 888
-NODE_ID3 = 999
-
-MAPPING = dict(
- bond_mode='bond-mode',
- bond_lacp_rate='bond-lacp_rate',
- dns_nameservers='dns-nameservers',
- dns_search='dns-search',
- virtual_network_tag='virtualNetworkTag',
-)
-
-
-def mapkey(key):
- if key in MAPPING:
- return MAPPING[key]
- return key
-
-
-class MockSFConnection(object):
- ''' mock connection to ElementSW host '''
-
- class Bunch(object): # pylint: disable=too-few-public-methods
- ''' create object with arbitrary attributes '''
- def __init__(self, **kw):
- ''' called with (k1=v1, k2=v2), creates obj.k1, obj.k2 with values v1, v2 '''
- setattr(self, '__dict__', kw)
-
- def __repr__(self):
- results = dict()
- for key, value in vars(self).items():
- results[key] = repr(value)
- return repr(results)
-
- def to_json(self):
- return json.loads(json.dumps(self, default=lambda x: x.__dict__))
-
- def __init__(self, force_error=False, where=None):
- ''' save arguments '''
- self.force_error = force_error
- self.where = where
- # self._port = 442
- self.called = list()
- self.set_network_config_args = dict()
- if force_error and where == 'cx':
- raise netapp_utils.solidfire.common.ApiConnectionError('testme')
-
- def record(self, args, kwargs): # pylint: disable=unused-argument
- name = inspect.stack()[1][3] # caller function name
- # print('%s: , args: %s, kwargs: %s' % (name, args, kwargs))
- self.called.append(name)
-
- def set_network_config(self, *args, **kwargs): # pylint: disable=unused-argument
- self.record(repr(args), repr(kwargs))
- print('network:', kwargs['network'].to_json())
- self.set_network_config_args = kwargs['network'].to_json()
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- DEPRECATED_ARGS = {
- 'ip_address_1g': 'ip_address_1g',
- 'subnet_1g': 'subnet_1g',
- 'gateway_address_1g': 'gateway_address_1g',
- 'mtu_1g': 'mtu_1g', # make sure the use a value != from default
- 'bond_mode_1g': 'ALB', # make sure the use a value != from default
- 'lacp_1g': 'Fast', # make sure the use a value != from default
- 'ip_address_10g': 'ip_address_10g',
- 'subnet_10g': 'subnet_10g',
- 'gateway_address_10g': 'gateway_address_10g',
- 'mtu_10g': 'mtu_10g', # make sure the use a value != from default
- 'bond_mode_10g': 'LACP', # make sure the use a value != from default
- 'lacp_10g': 'Fast', # make sure the use a value != from default
- 'method': 'static',
- 'dns_nameservers': 'dns_nameservers',
- 'dns_search_domains': 'dns_search_domains',
- 'virtual_network_tag': 'virtual_network_tag',
- 'hostname': 'hostname',
- 'username': 'username',
- 'password': 'password',
- }
-
- ARGS = {
- 'bond_1g': {
- 'address': '10.10.10.10',
- 'netmask': '255.255.255.0',
- 'gateway': '10.10.10.1',
- 'mtu': '1500',
- 'bond_mode': 'ActivePassive',
- 'dns_nameservers': ['dns_nameservers'],
- 'dns_search': ['dns_search_domains'],
- 'virtual_network_tag': 'virtual_network_tag',
- },
- 'bond_10g': {
- 'bond_mode': 'LACP',
- 'bond_lacp_rate': 'Fast',
- },
- 'hostname': 'hostname',
- 'username': 'username',
- 'password': 'password',
- }
-
- def setUp(self):
- self.mock_module_helper = patch.multiple(basic.AnsibleModule,
- exit_json=exit_json,
- fail_json=fail_json)
- self.mock_module_helper.start()
- self.addCleanup(self.mock_module_helper.stop)
-
- def test_module_fail_when_required_args_missing(self):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleFailJson) as exc:
- set_module_args({})
- my_module()
- print('Info: %s' % exc.value.args[0]['msg'])
-
- def test_deprecated_nothing(self):
- ''' deprecated without 1g or 10g options '''
- args = dict(self.DEPRECATED_ARGS) # deep copy as other tests can modify args
- for key in list(args):
- if '1g' in key or '10g' in key:
- del args[key]
- set_module_args(args)
- with pytest.raises(AnsibleFailJson) as exc:
- my_module()
- msg = 'Please use the new bond_1g or bond_10g options to configure the bond interfaces.'
- assert msg in exc.value.args[0]['msg']
- msg = 'This module cannot set or change "method"'
- assert msg in exc.value.args[0]['msg']
-
- def test_deprecated_all(self):
- ''' deprecated with all options '''
- args = dict(self.DEPRECATED_ARGS) # deep copy as other tests can modify args
- set_module_args(args)
- with pytest.raises(AnsibleFailJson) as exc:
- my_module()
- msg = 'Please use the new bond_1g and bond_10g options to configure the bond interfaces.'
- assert msg in exc.value.args[0]['msg']
- msg = 'This module cannot set or change "method"'
- assert msg in exc.value.args[0]['msg']
-
- def test_deprecated_1g_only(self):
- ''' deprecated with 1g options only '''
- args = dict(self.DEPRECATED_ARGS) # deep copy as other tests can modify args
- for key in list(args):
- if '10g' in key:
- del args[key]
- set_module_args(args)
- with pytest.raises(AnsibleFailJson) as exc:
- my_module()
- msg = 'Please use the new bond_1g option to configure the bond 1G interface.'
- assert msg in exc.value.args[0]['msg']
- msg = 'This module cannot set or change "method"'
- assert msg in exc.value.args[0]['msg']
-
- def test_deprecated_10g_only(self):
- ''' deprecated with 10g options only '''
- args = dict(self.DEPRECATED_ARGS) # deep copy as other tests can modify args
- for key in list(args):
- if '1g' in key:
- del args[key]
- set_module_args(args)
- with pytest.raises(AnsibleFailJson) as exc:
- my_module()
- msg = 'Please use the new bond_10g option to configure the bond 10G interface.'
- assert msg in exc.value.args[0]['msg']
- msg = 'This module cannot set or change "method"'
- assert msg in exc.value.args[0]['msg']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_modify_nothing(self, mock_create_sf_connection):
- ''' modify without 1g or 10g options '''
- args = dict(self.ARGS) # deep copy as other tests can modify args
- for key in list(args):
- if '1g' in key or '10g' in key:
- del args[key]
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- print('LN:', my_obj.module.params)
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert not exc.value.args[0]['changed']
- assert len(my_obj.sfe.set_network_config_args) == 0
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_modify_all(self, mock_create_sf_connection):
- ''' modify with all options '''
- args = dict(self.ARGS) # deep copy as other tests can modify args
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert exc.value.args[0]['changed']
- assert 'Bond1G' in my_obj.sfe.set_network_config_args
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_modify_1g_only(self, mock_create_sf_connection):
- ''' modify with 1g options only '''
- args = dict(self.ARGS) # deep copy as other tests can modify args
- for key in list(args):
- if '10g' in key:
- del args[key]
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert exc.value.args[0]['changed']
- assert 'Bond1G' in my_obj.sfe.set_network_config_args
- assert 'Bond10G' not in my_obj.sfe.set_network_config_args
- print(my_obj.sfe.set_network_config_args['Bond1G'])
- for key in args['bond_1g']:
- if key != 'bond_lacp_rate':
- assert my_obj.sfe.set_network_config_args['Bond1G'][mapkey(key)] == args['bond_1g'][key]
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_modify_10g_only(self, mock_create_sf_connection):
- ''' modify with 10g options only '''
- args = dict(self.ARGS) # deep copy as other tests can modify args
- for key in list(args):
- if '1g' in key:
- del args[key]
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert exc.value.args[0]['changed']
- assert 'Bond1G' not in my_obj.sfe.set_network_config_args
- assert 'Bond10G' in my_obj.sfe.set_network_config_args
- assert my_obj.sfe.set_network_config_args['Bond10G']['bond-lacp_rate'] == args['bond_10g']['bond_lacp_rate']
- for key in args['bond_10g']:
- assert my_obj.sfe.set_network_config_args['Bond10G'][mapkey(key)] == args['bond_10g'][key]
diff --git a/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_nodes.py b/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_nodes.py
deleted file mode 100644
index 3e163d000..000000000
--- a/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_nodes.py
+++ /dev/null
@@ -1,324 +0,0 @@
-''' unit test for Ansible module: na_elementsw_node.py '''
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-import json
-import pytest
-
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-from ansible_collections.netapp.elementsw.tests.unit.compat import unittest
-from ansible_collections.netapp.elementsw.tests.unit.compat.mock import patch
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-
-if not netapp_utils.has_sf_sdk():
- pytestmark = pytest.mark.skip('skipping as missing required SolidFire Python SDK')
-
-from ansible_collections.netapp.elementsw.plugins.modules.na_elementsw_node \
- import ElementSWNode as my_module # module under test
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleExitJson(Exception):
- """Exception class to be raised by module.exit_json and caught by the test case"""
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
-
-
-def exit_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over exit_json; package return data into an exception"""
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-MODIFY_ERROR = 'some_error_in_modify_access_group'
-
-NODE_ID1 = 777
-NODE_ID2 = 888
-NODE_NAME1 = 'node_name1'
-NODE_NAME2 = 'node_name2'
-
-
-class MockSFConnection(object):
- ''' mock connection to ElementSW host '''
-
- class Bunch(object): # pylint: disable=too-few-public-methods
- ''' create object with arbitrary attributes '''
- def __init__(self, **kw):
- ''' called with (k1=v1, k2=v2), creates obj.k1, obj.k2 with values v1, v2 '''
- setattr(self, '__dict__', kw)
-
- def __init__(self, force_error=False, where=None, node_id=None, cluster_name='', node_state='Pending'):
- ''' save arguments '''
- self.force_error = force_error
- self.where = where
- self.node_id = node_id
- self.cluster_name = cluster_name
- self.node_state = node_state
-
- def list_all_nodes(self, *args, **kwargs): # pylint: disable=unused-argument
- ''' build access_group list: access_groups.name, access_groups.account_id '''
- nodes = list()
- pending_nodes = list()
- active_pending_nodes = list()
- if self.node_id is None:
- node_list = list()
- else:
- node_list = [self.node_id]
- attrs1 = dict(mip='10.10.10.101', name=NODE_NAME1, node_id=NODE_ID1)
- attrs2 = dict(mip='10.10.10.101', name=NODE_NAME2, node_id=NODE_ID2)
- if self.where == 'pending':
- attrs1['pending_node_id'] = NODE_ID1
- attrs2['pending_node_id'] = NODE_ID2
- node1 = self.Bunch(**attrs1)
- node2 = self.Bunch(**attrs2)
- if self.where == 'nodes':
- nodes = [node1, node2]
- elif self.where == 'pending':
- pending_nodes = [node1, node2]
- elif self.where == 'active_pending':
- active_pending_nodes = [node1, node2]
- node_list = self.Bunch(nodes=nodes, pending_nodes=pending_nodes, pending_active_nodes=active_pending_nodes)
- return node_list
-
- def add_nodes(self, *args, **kwargs): # pylint: disable=unused-argument
- print('adding_node: ', repr(args), repr(kwargs))
-
- def remove_nodes(self, *args, **kwargs): # pylint: disable=unused-argument
- print('adding_node: ', repr(args), repr(kwargs))
-
- def get_cluster_config(self, *args, **kwargs): # pylint: disable=unused-argument
- print('get_cluster_config: ', repr(args), repr(kwargs))
- cluster = self.Bunch(cluster=self.cluster_name, state=self.node_state)
- return self.Bunch(cluster=cluster)
-
- def set_cluster_config(self, *args, **kwargs): # pylint: disable=unused-argument
- print('set_cluster_config: ', repr(args), repr(kwargs))
-
- def list_drives(self, *args, **kwargs): # pylint: disable=unused-argument
- print('list_drives: ', repr(args), repr(kwargs))
- drive = self.Bunch(node_id=self.node_id, status="active")
- return self.Bunch(drives=[drive])
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- ARGS = {
- 'state': 'present',
- 'node_ids': [NODE_ID1, NODE_ID2],
- 'hostname': 'hostname',
- 'username': 'username',
- 'password': 'password',
- }
-
- def setUp(self):
- self.mock_module_helper = patch.multiple(basic.AnsibleModule,
- exit_json=exit_json,
- fail_json=fail_json)
- self.mock_module_helper.start()
- self.addCleanup(self.mock_module_helper.stop)
-
- def test_module_fail_when_required_args_missing(self):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleFailJson) as exc:
- set_module_args({})
- my_module()
- print('Info: %s' % exc.value.args[0]['msg'])
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_add_node_fail_not_pending(self, mock_create_sf_connection):
- ''' adding a node - fails as these nodes are unknown '''
- args = dict(self.ARGS) # deep copy as other tests can modify args
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- msg = 'nodes not in pending or active lists'
- assert msg in exc.value.args[0]['msg']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_add_node(self, mock_create_sf_connection):
- ''' adding a node '''
- args = dict(self.ARGS) # deep copy as other tests can modify args
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection(where='pending')
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_add_node_idempotent(self, mock_create_sf_connection):
- ''' adding a node that is already in the cluster '''
- args = dict(self.ARGS)
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection(where='nodes')
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert not exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_remove_node(self, mock_create_sf_connection):
- ''' removing a node that is in the cluster '''
- args = dict(self.ARGS)
- args['state'] = 'absent'
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection(where='nodes')
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_remove_node_idempotent(self, mock_create_sf_connection):
- ''' removing a node that is not in the cluster '''
- args = dict(self.ARGS)
- args['state'] = 'absent'
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert not exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_remove_node_with_active_drive(self, mock_create_sf_connection):
- ''' removing a node that is in the cluster but still associated with a drive '''
- args = dict(self.ARGS)
- args['state'] = 'absent'
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection(node_id=NODE_ID1, where='nodes')
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- msg = 'Error deleting node %s: node has active drives' % NODE_NAME1
- assert msg in exc.value.args[0]['msg']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_set_cluster_name_only(self, mock_create_sf_connection):
- ''' set cluster name without adding the node '''
- args = dict(self.ARGS)
- args['preset_only'] = True
- args['cluster_name'] = 'cluster_name'
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert exc.value.args[0]['changed']
- message = 'List of updated nodes with cluster_name:'
- assert message in exc.value.args[0]['msg']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_set_cluster_name_only_idempotent(self, mock_create_sf_connection):
- ''' set cluster name without adding the node - name already set '''
- args = dict(self.ARGS)
- args['preset_only'] = True
- args['cluster_name'] = 'cluster_name'
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection(cluster_name=args['cluster_name'])
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert not exc.value.args[0]['changed']
- message = ''
- assert message == exc.value.args[0]['msg']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_set_cluster_name_and_add(self, mock_create_sf_connection):
- ''' set cluster name and add the node '''
- args = dict(self.ARGS)
- args['cluster_name'] = 'cluster_name'
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection(where='pending')
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert exc.value.args[0]['changed']
- message = 'List of updated nodes with cluster_name:'
- assert message in exc.value.args[0]['msg']
- message = 'List of added nodes: '
- assert message in exc.value.args[0]['msg']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_set_cluster_name_and_add_idempotent(self, mock_create_sf_connection):
- ''' set cluster name and add the node '''
- args = dict(self.ARGS)
- args['cluster_name'] = 'cluster_name'
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection(where='nodes', cluster_name=args['cluster_name'])
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert not exc.value.args[0]['changed']
- message = ''
- assert message == exc.value.args[0]['msg']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_set_cluster_name_already_active_no_change(self, mock_create_sf_connection):
- ''' set cluster name fails because node state is 'Active' '''
- args = dict(self.ARGS)
- args['cluster_name'] = 'cluster_name'
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection(where='nodes', cluster_name=args['cluster_name'], node_state='Active')
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert not exc.value.args[0]['changed']
- message = ''
- assert message == exc.value.args[0]['msg']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_set_cluster_name_already_active_change_not_allowed(self, mock_create_sf_connection):
- ''' set cluster name fails because node state is 'Active' '''
- args = dict(self.ARGS)
- args['cluster_name'] = 'new_cluster_name'
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection(where='nodes', cluster_name='old_cluster_name', node_state='Active')
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- message = "Error updating cluster name for node %s, already in 'Active' state" % NODE_ID1
- assert message == exc.value.args[0]['msg']
diff --git a/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_qos_policy.py b/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_qos_policy.py
deleted file mode 100644
index 83ac3711a..000000000
--- a/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_qos_policy.py
+++ /dev/null
@@ -1,300 +0,0 @@
-''' unit test for Ansible module: na_elementsw_qos_policy.py '''
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-import json
-import pytest
-
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-from ansible_collections.netapp.elementsw.tests.unit.compat import unittest
-from ansible_collections.netapp.elementsw.tests.unit.compat.mock import patch
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-
-if not netapp_utils.has_sf_sdk():
- pytestmark = pytest.mark.skip('skipping as missing required SolidFire Python SDK')
-
-from ansible_collections.netapp.elementsw.plugins.modules.na_elementsw_qos_policy \
- import ElementSWQosPolicy as my_module # module under test
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleExitJson(Exception):
- """Exception class to be raised by module.exit_json and caught by the test case"""
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
-
-
-def exit_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over exit_json; package return data into an exception"""
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-CREATE_ERROR = 'create', 'some_error_in_create_qos_policy'
-MODIFY_ERROR = 'modify', 'some_error_in_modify_qos_policy'
-DELETE_ERROR = 'delete', 'some_error_in_delete_qos_policy'
-
-POLICY_ID = 888
-POLICY_NAME = 'element_qos_policy_name'
-
-
-class MockSFConnection(object):
- ''' mock connection to ElementSW host '''
-
- class Bunch(object): # pylint: disable=too-few-public-methods
- ''' create object with arbitrary attributes '''
- def __init__(self, **kw):
- ''' called with (k1=v1, k2=v2), creates obj.k1, obj.k2 with values v1, v2 '''
- setattr(self, '__dict__', kw)
-
- def __init__(self, force_error=False, where=None, qos_policy_name=None):
- ''' save arguments '''
- self.force_error = force_error
- self.where = where
- self.policy_name = qos_policy_name
-
- def list_qos_policies(self, *args, **kwargs): # pylint: disable=unused-argument
- ''' build qos_policy list: qos_policy.name, qos_policy.account_id '''
- if self.policy_name:
- qos_policy_name = self.policy_name
- else:
- qos_policy_name = POLICY_NAME
- qos = self.Bunch(min_iops=1000, max_iops=20000, burst_iops=20000)
- qos_policy = self.Bunch(name=qos_policy_name, qos_policy_id=POLICY_ID, qos=qos)
- qos_policies = [qos_policy]
- qos_policy_list = self.Bunch(qos_policies=qos_policies)
- return qos_policy_list
-
- def create_qos_policy(self, *args, **kwargs): # pylint: disable=unused-argument
- ''' We don't check the return code, but could force an exception '''
- if self.force_error and 'create_exception' in self.where:
- raise netapp_utils.solidfire.common.ApiServerError(*CREATE_ERROR)
-
- def modify_qos_policy(self, *args, **kwargs): # pylint: disable=unused-argument
- ''' We don't check the return code, but could force an exception '''
- if self.force_error and 'modify_exception' in self.where:
- raise netapp_utils.solidfire.common.ApiServerError(*MODIFY_ERROR)
-
- def delete_qos_policy(self, *args, **kwargs): # pylint: disable=unused-argument
- ''' We don't check the return code, but could force an exception '''
- if self.force_error and 'delete_exception' in self.where:
- raise netapp_utils.solidfire.common.ApiServerError(*DELETE_ERROR)
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- ARGS = {
- 'state': 'present',
- 'name': 'element_qos_policy_name',
- 'qos': {'minIOPS': 1000, 'maxIOPS': 20000, 'burstIOPS': 20000},
- 'hostname': 'hostname',
- 'username': 'username',
- 'password': 'password',
- }
-
- def setUp(self):
- self.mock_module_helper = patch.multiple(basic.AnsibleModule,
- exit_json=exit_json,
- fail_json=fail_json)
- self.mock_module_helper.start()
- self.addCleanup(self.mock_module_helper.stop)
-
- def test_module_fail_when_required_args_missing(self):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleFailJson) as exc:
- set_module_args({})
- my_module()
- print('Info: %s' % exc.value.args[0]['msg'])
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_add_qos_policy(self, mock_create_sf_connection):
- ''' adding a qos_policy '''
- args = dict(self.ARGS) # deep copy as other tests can modify args
- args['name'] += '_1' # new name to force a create
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_add_qos_policy_idempotent(self, mock_create_sf_connection):
- ''' adding a qos_policy '''
- args = dict(self.ARGS)
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert not exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_delete_qos_policy(self, mock_create_sf_connection):
- ''' removing a qos policy '''
- args = dict(self.ARGS)
- args['state'] = 'absent'
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_delete_qos_policy_idempotent(self, mock_create_sf_connection):
- ''' removing a qos policy '''
- args = dict(self.ARGS)
- args['state'] = 'absent'
- args['name'] += '_1' # new name to force idempotency
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert not exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_modify_qos_policy(self, mock_create_sf_connection):
- ''' modifying a qos policy '''
- args = dict(self.ARGS)
- args['qos'] = {'minIOPS': 2000}
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_rename_qos_policy(self, mock_create_sf_connection):
- ''' renaming a qos policy '''
- args = dict(self.ARGS)
- args['from_name'] = args['name']
- args['name'] = 'a_new_name'
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_rename_modify_qos_policy_idempotent(self, mock_create_sf_connection):
- ''' renaming a qos policy '''
- args = dict(self.ARGS)
- args['from_name'] = 'some_older_name'
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert not exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_create_qos_policy_exception(self, mock_create_sf_connection):
- ''' creating a qos policy can raise an exception '''
- args = dict(self.ARGS)
- args['name'] += '_1' # new name to force a create
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection(force_error=True, where=['create_exception'])
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- message = 'Error creating qos policy: %s' % POLICY_NAME
- assert exc.value.args[0]['msg'].startswith(message)
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_modify_qos_policy_exception(self, mock_create_sf_connection):
- ''' modifying a qos policy can raise an exception '''
- args = dict(self.ARGS)
- args['qos'] = {'minIOPS': 2000}
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection(force_error=True, where=['modify_exception'])
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- message = 'Error updating qos policy: %s' % POLICY_NAME
- assert exc.value.args[0]['msg'].startswith(message)
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_delete_qos_policy_exception(self, mock_create_sf_connection):
- ''' deleting a qos policy can raise an exception '''
- args = dict(self.ARGS)
- args['state'] = 'absent'
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection(force_error=True, where=['delete_exception'])
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- message = 'Error deleting qos policy: %s' % POLICY_NAME
- assert exc.value.args[0]['msg'].startswith(message)
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_check_error_reporting_on_missing_qos_option(self, mock_create_sf_connection):
- ''' report error if qos option is not given on create '''
- args = dict(self.ARGS)
- args['name'] += '_1' # new name to force a create
- args.pop('qos')
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- message = "Error creating qos policy: %s, 'qos:' option is required" % args['name']
- assert exc.value.args[0]['msg'] == message
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_check_error_reporting_on_missing_from_name_policy(self, mock_create_sf_connection):
- ''' report error if qos policy to rename does not exist '''
- args = dict(self.ARGS)
- args['name'] += '_1' # new name to force a create
- args['from_name'] = 'something_not_likely_to_exist'
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- message = "Error renaming qos policy, no existing policy with name/id: %s" % args['from_name']
- assert exc.value.args[0]['msg'] == message
diff --git a/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_template.py b/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_template.py
deleted file mode 100644
index 7dc6e2d6b..000000000
--- a/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_template.py
+++ /dev/null
@@ -1,138 +0,0 @@
-''' unit test for Ansible module: na_elementsw_account.py '''
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-import json
-import pytest
-
-from ansible_collections.netapp.elementsw.tests.unit.compat import unittest
-from ansible_collections.netapp.elementsw.tests.unit.compat.mock import patch
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-
-if not netapp_utils.has_sf_sdk():
- pytestmark = pytest.mark.skip('skipping as missing required SolidFire Python SDK')
-
-from ansible_collections.netapp.elementsw.plugins.modules.na_elementsw_account \
- import ElementSWAccount as my_module # module under test
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleExitJson(Exception):
- """Exception class to be raised by module.exit_json and caught by the test case"""
- pass
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
- pass
-
-
-def exit_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over exit_json; package return data into an exception"""
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-ADD_ERROR = 'some_error_in_add_account'
-
-
-class MockSFConnection(object):
- ''' mock connection to ElementSW host '''
-
- class Bunch(object): # pylint: disable=too-few-public-methods
- ''' create object with arbitrary attributes '''
- def __init__(self, **kw):
- ''' called with (k1=v1, k2=v2), creates obj.k1, obj.k2 with values v1, v2 '''
- setattr(self, '__dict__', kw)
-
- def __init__(self, force_error=False, where=None):
- ''' save arguments '''
- self.force_error = force_error
- self.where = where
-
-# TODO: replace list_accounts and add_account as needed
- def list_accounts(self, *args, **kwargs): # pylint: disable=unused-argument
- ''' build account list: account.username, account.account_id '''
- accounts = list()
- account_list = self.Bunch(accounts=accounts)
- return account_list
-
- def add_account(self, *args, **kwargs): # pylint: disable=unused-argument
- ''' We don't check the return code, but could force an exception '''
- if self.force_error and 'add' in self.where:
- # The module does not check for a specific exception :(
- raise OSError(ADD_ERROR)
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- def setUp(self):
- self.mock_module_helper = patch.multiple(basic.AnsibleModule,
- exit_json=exit_json,
- fail_json=fail_json)
- self.mock_module_helper.start()
- self.addCleanup(self.mock_module_helper.stop)
-
- def test_module_fail_when_required_args_missing(self):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleFailJson) as exc:
- set_module_args({})
- my_module()
- print('Info: %s' % exc.value.args[0]['msg'])
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_ensure_command_called(self, mock_create_sf_connection):
- ''' a more interesting test '''
- set_module_args({
- 'state': 'present',
- 'element_username': 'element_username',
- 'hostname': 'hostname',
- 'username': 'username',
- 'password': 'password',
- })
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- # It may not be a good idea to start with apply
- # More atomic methods can be easier to mock
- my_obj.apply()
- print(exc.value.args[0])
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_check_error_reporting_on_add_exception(self, mock_create_sf_connection):
- ''' a more interesting test '''
- set_module_args({
- 'state': 'present',
- 'element_username': 'element_username',
- 'hostname': 'hostname',
- 'username': 'username',
- 'password': 'password',
- })
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection(force_error=True, where=['add'])
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- # It may not be a good idea to start with apply
- # More atomic methods can be easier to mock
- # apply() is calling list_accounts() and add_account()
- my_obj.apply()
- print(exc.value.args[0])
- message = 'Error creating account element_username: %s' % ADD_ERROR
- assert exc.value.args[0]['msg'] == message
diff --git a/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_vlan.py b/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_vlan.py
deleted file mode 100644
index e2dc51f79..000000000
--- a/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_vlan.py
+++ /dev/null
@@ -1,343 +0,0 @@
-''' unit test for Ansible module: na_elementsw_account.py '''
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-import json
-import pytest
-
-from ansible_collections.netapp.elementsw.tests.unit.compat import unittest
-from ansible_collections.netapp.elementsw.tests.unit.compat.mock import patch, Mock
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-
-if not netapp_utils.has_sf_sdk():
- pytestmark = pytest.mark.skip('skipping as missing required SolidFire Python SDK')
-
-from ansible_collections.netapp.elementsw.plugins.modules.na_elementsw_vlan \
- import ElementSWVlan as vlan # module under test
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleExitJson(Exception):
- """Exception class to be raised by module.exit_json and caught by the test case"""
- pass
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
- pass
-
-
-def exit_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over exit_json; package return data into an exception"""
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-ADD_ERROR = 'some_error_in_add_account'
-
-
-class MockSFConnection(object):
- ''' mock connection to ElementSW host '''
-
- class Bunch(object): # pylint: disable=too-few-public-methods
- ''' create object with arbitrary attributes '''
- def __init__(self, **kw):
- ''' called with (k1=v1, k2=v2), creates obj.k1, obj.k2 with values v1, v2 '''
- setattr(self, '__dict__', kw)
-
- class Vlan(object):
- def __init__(self, entries):
- self.__dict__.update(entries)
-
- def __init__(self, force_error=False, where=None):
- ''' save arguments '''
- self.force_error = force_error
- self.where = where
-
- def list_virtual_networks(self, virtual_network_tag=None): # pylint: disable=unused-argument
- ''' list of vlans '''
- if virtual_network_tag == '1':
- add1 = self.Bunch(
- start='2.2.2.2',
- size=4
- )
- add2 = self.Bunch(
- start='3.3.3.3',
- size=4
- )
- vlan = self.Bunch(
- attributes={'key': 'value', 'config-mgmt': 'ansible', 'event-source': 'na_elementsw_vlan'},
- name="test",
- address_blocks=[
- add1,
- add2
- ],
- svip='192.168.1.2',
- gateway='0.0.0.0',
- netmask='255.255.248.0',
- namespace=False
- )
- vlans = self.Bunch(
- virtual_networks=[vlan]
- )
- else:
- vlans = self.Bunch(
- virtual_networks=[]
- )
- return vlans
-
- def add_virtual_network(self, virtual_network_tag=None, **create): # pylint: disable=unused-argument
- ''' We don't check the return code, but could force an exception '''
- if self.force_error and 'add' in self.where:
- # The module does not check for a specific exception :(
- raise OSError(ADD_ERROR)
-
- def remove_virtual_network(self, virtual_network_tag=None): # pylint: disable=unused-argument
- ''' We don't check the return code, but could force an exception '''
- if self.force_error and 'remove' in self.where:
- # The module does not check for a specific exception :(
- raise OSError(ADD_ERROR)
-
- def modify_virtual_network(self, virtual_network_tag=None, **modify): # pylint: disable=unused-argument
- ''' We don't check the return code, but could force an exception '''
- if self.force_error and 'modify' in self.where:
- # The module does not check for a specific exception :(
- raise OSError(ADD_ERROR)
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- def setUp(self):
- self.mock_module_helper = patch.multiple(basic.AnsibleModule,
- exit_json=exit_json,
- fail_json=fail_json)
- self.mock_module_helper.start()
- self.addCleanup(self.mock_module_helper.stop)
-
- def test_module_fail_when_required_args_missing(self):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleFailJson) as exc:
- set_module_args({})
- vlan()
- print('Info: %s' % exc.value.args[0]['msg'])
-
- def mock_args(self):
- args = {
- 'state': 'present',
- 'name': 'test',
- 'vlan_tag': 1,
- 'address_blocks': [
- {'start': '192.168.1.2', 'size': 5}
- ],
- 'hostname': 'hostname',
- 'username': 'username',
- 'password': 'password',
- 'netmask': '255.255.248.0',
- 'gateway': '0.0.0.0',
- 'namespace': False,
- 'svip': '192.168.1.2'
- }
- return dict(args)
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp_elementsw_module.NaElementSWModule.set_element_attributes')
- def test_successful_create(self, mock_set_attributes, mock_create_sf_connection):
- ''' successful create'''
- mock_set_attributes.return_value = {'key': 'new_value'}
- data = self.mock_args()
- data['vlan_tag'] = '3'
- set_module_args(data)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = vlan()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_successful_delete(self, mock_create_sf_connection):
- ''' successful delete'''
- data = self.mock_args()
- data['state'] = 'absent'
- set_module_args(data)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = vlan()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_successful_modify(self, mock_create_sf_connection):
- ''' successful modify'''
- data = self.mock_args()
- data['svip'] = '3.4.5.6'
- set_module_args(data)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = vlan()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- @patch('ansible_collections.netapp.elementsw.plugins.modules.na_elementsw_vlan.ElementSWVlan.get_network_details')
- def test_successful_modify_address_blocks_same_length(self, mock_get, mock_create_sf_connection):
- ''' successful modify'''
- mock_get.return_value = {
- 'address_blocks': [
- {'start': '10.10.10.20', 'size': 5},
- {'start': '10.10.10.40', 'size': 5}
- ]
- }
- data = self.mock_args()
- data['address_blocks'] = [{'start': '10.10.10.20', 'size': 5},
- {'start': '10.20.10.50', 'size': 5}]
- set_module_args(data)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = vlan()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- @patch('ansible_collections.netapp.elementsw.plugins.modules.na_elementsw_vlan.ElementSWVlan.get_network_details')
- def test_successful_modify_address_blocks_different_length_1(self, mock_get, mock_create_sf_connection):
- ''' successful modify'''
- mock_get.return_value = {
- 'address_blocks': [
- {'start': '10.10.10.20', 'size': 5},
- {'start': '10.20.10.30', 'size': 5}
- ]
- }
- data = self.mock_args()
- data['address_blocks'] = [{'start': '10.10.10.20', 'size': 5},
- {'start': '10.20.10.30', 'size': 5},
- {'start': '10.20.10.50', 'size': 5}]
- set_module_args(data)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = vlan()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- @patch('ansible_collections.netapp.elementsw.plugins.modules.na_elementsw_vlan.ElementSWVlan.get_network_details')
- def test_successful_modify_address_blocks_different_length_2(self, mock_get, mock_create_sf_connection):
- ''' successful modify'''
- mock_get.return_value = {
- 'address_blocks': [
- {'start': '10.10.10.20', 'size': 5},
- {'start': '10.20.10.30', 'size': 5},
- {'start': '10.20.10.40', 'size': 5}
- ]
- }
- data = self.mock_args()
- data['address_blocks'] = [{'start': '10.10.10.20', 'size': 5},
- {'start': '10.20.10.40', 'size': 5},
- {'start': '10.20.10.30', 'size': 5}]
- set_module_args(data)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = vlan()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- assert not exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- @patch('ansible_collections.netapp.elementsw.plugins.modules.na_elementsw_vlan.ElementSWVlan.get_network_details')
- def test_successful_modify_address_blocks_different_length_3(self, mock_get, mock_create_sf_connection):
- ''' successful modify'''
- mock_get.return_value = {
- 'address_blocks': [
- {'start': '10.10.10.20', 'size': 5},
- {'start': '10.10.10.30', 'size': 5},
- {'start': '10.20.10.40', 'size': 5}
- ]
- }
- data = self.mock_args()
- data['address_blocks'] = [{'start': '10.10.10.20', 'size': 5},
- {'start': '10.20.10.40', 'size': 5},
- {'start': '10.20.10.30', 'size': 5}]
- set_module_args(data)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = vlan()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_helper_validate_keys(self, mock_create_sf_connection):
- '''test validate_keys()'''
- data = self.mock_args()
- del data['svip']
- set_module_args(data)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = vlan()
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.validate_keys()
- msg = "One or more required fields ['address_blocks', 'svip', 'netmask', 'name'] for creating VLAN is missing"
- assert exc.value.args[0]['msg'] == msg
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_successful_modify_idempotent(self, mock_create_sf_connection):
- ''' successful modify'''
- data = self.mock_args()
- data['address_blocks'] = [{'start': '2.2.2.2', 'size': 4},
- {'start': '3.3.3.3', 'size': 4}]
- set_module_args(data)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = vlan()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- assert not exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_successful_modify_attribute_value(self, mock_create_sf_connection):
- ''' successful modify'''
- data = self.mock_args()
- data['address_blocks'] = [{'start': '2.2.2.2', 'size': 4},
- {'start': '3.3.3.3', 'size': 4}]
- data['attributes'] = {'key': 'value2'}
- set_module_args(data)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = vlan()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_successful_modify_attribute_key(self, mock_create_sf_connection):
- ''' successful modify'''
- data = self.mock_args()
- data['address_blocks'] = [{'start': '2.2.2.2', 'size': 4},
- {'start': '3.3.3.3', 'size': 4}]
- data['attributes'] = {'key2': 'value2'}
- set_module_args(data)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = vlan()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- assert exc.value.args[0]['changed']
diff --git a/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_volume.py b/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_volume.py
deleted file mode 100644
index 926dda90b..000000000
--- a/ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_volume.py
+++ /dev/null
@@ -1,364 +0,0 @@
-''' unit test for Ansible module: na_elementsw_volume.py '''
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-import json
-import pytest
-
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-from ansible_collections.netapp.elementsw.tests.unit.compat import unittest
-from ansible_collections.netapp.elementsw.tests.unit.compat.mock import patch
-import ansible_collections.netapp.elementsw.plugins.module_utils.netapp as netapp_utils
-
-if not netapp_utils.has_sf_sdk():
- pytestmark = pytest.mark.skip('skipping as missing required SolidFire Python SDK')
-
-from ansible_collections.netapp.elementsw.plugins.modules.na_elementsw_volume \
- import ElementSWVolume as my_module # module under test
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleExitJson(Exception):
- """Exception class to be raised by module.exit_json and caught by the test case"""
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
-
-
-def exit_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over exit_json; package return data into an exception"""
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-CREATE_ERROR = 'create', 'some_error_in_create_volume'
-MODIFY_ERROR = 'modify', 'some_error_in_modify_volume'
-DELETE_ERROR = 'delete', 'some_error_in_delete_volume'
-
-POLICY_ID = 888
-POLICY_NAME = 'element_qos_policy_name'
-VOLUME_ID = 777
-VOLUME_NAME = 'element_volume_name'
-
-
-class MockSFConnection(object):
- ''' mock connection to ElementSW host '''
-
- class Bunch(object): # pylint: disable=too-few-public-methods
- ''' create object with arbitrary attributes '''
- def __init__(self, **kw):
- ''' called with (k1=v1, k2=v2), creates obj.k1, obj.k2 with values v1, v2 '''
- setattr(self, '__dict__', kw)
-
- def __init__(self, force_error=False, where=None, with_qos_policy_id=True):
- ''' save arguments '''
- self.force_error = force_error
- self.where = where
- self.with_qos_policy_id = with_qos_policy_id
-
- def list_qos_policies(self, *args, **kwargs): # pylint: disable=unused-argument
- ''' build qos_policy list '''
- qos_policy_name = POLICY_NAME
- qos = self.Bunch(min_iops=1000, max_iops=20000, burst_iops=20000)
- qos_policy = self.Bunch(name=qos_policy_name, qos_policy_id=POLICY_ID, qos=qos)
- qos_policy_1 = self.Bunch(name=qos_policy_name + '_1', qos_policy_id=POLICY_ID + 1, qos=qos)
- qos_policies = [qos_policy, qos_policy_1]
- qos_policy_list = self.Bunch(qos_policies=qos_policies)
- return qos_policy_list
-
- def list_volumes_for_account(self, *args, **kwargs): # pylint: disable=unused-argument
- ''' build volume list: volume.name, volume.id '''
- volume = self.Bunch(name=VOLUME_NAME, volume_id=VOLUME_ID, delete_time='')
- volumes = [volume]
- volume_list = self.Bunch(volumes=volumes)
- return volume_list
-
- def list_volumes(self, *args, **kwargs): # pylint: disable=unused-argument
- ''' build volume details: volume.name, volume.id '''
- if self.with_qos_policy_id:
- qos_policy_id = POLICY_ID
- else:
- qos_policy_id = None
- qos = self.Bunch(min_iops=1000, max_iops=20000, burst_iops=20000)
- volume = self.Bunch(name=VOLUME_NAME, volume_id=VOLUME_ID, delete_time='', access='rw',
- account_id=1, qos=qos, qos_policy_id=qos_policy_id, total_size=1000000000,
- attributes={'config-mgmt': 'ansible', 'event-source': 'na_elementsw_volume'}
- )
- volumes = [volume]
- volume_list = self.Bunch(volumes=volumes)
- return volume_list
-
- def get_account_by_name(self, *args, **kwargs): # pylint: disable=unused-argument
- ''' returns account_id '''
- if self.force_error and 'get_account_id' in self.where:
- account_id = None
- else:
- account_id = 1
- account = self.Bunch(account_id=account_id)
- result = self.Bunch(account=account)
- return result
-
- def create_volume(self, *args, **kwargs): # pylint: disable=unused-argument
- ''' We don't check the return code, but could force an exception '''
- if self.force_error and 'create_exception' in self.where:
- raise netapp_utils.solidfire.common.ApiServerError(*CREATE_ERROR)
-
- def modify_volume(self, *args, **kwargs): # pylint: disable=unused-argument
- ''' We don't check the return code, but could force an exception '''
- print("modify: %s, %s " % (repr(args), repr(kwargs)))
- if self.force_error and 'modify_exception' in self.where:
- raise netapp_utils.solidfire.common.ApiServerError(*MODIFY_ERROR)
-
- def delete_volume(self, *args, **kwargs): # pylint: disable=unused-argument
- ''' We don't check the return code, but could force an exception '''
- if self.force_error and 'delete_exception' in self.where:
- raise netapp_utils.solidfire.common.ApiServerError(*DELETE_ERROR)
-
- def purge_deleted_volume(self, *args, **kwargs): # pylint: disable=unused-argument
- ''' We don't check the return code, but could force an exception '''
- if self.force_error and 'delete_exception' in self.where:
- raise netapp_utils.solidfire.common.ApiServerError(*DELETE_ERROR)
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- ARGS = {
- 'state': 'present',
- 'name': VOLUME_NAME,
- 'account_id': 'element_account_id',
- 'qos': {'minIOPS': 1000, 'maxIOPS': 20000, 'burstIOPS': 20000},
- 'qos_policy_name': POLICY_NAME,
- 'size': 1,
- 'enable512e': True,
- 'hostname': 'hostname',
- 'username': 'username',
- 'password': 'password',
- }
-
- def setUp(self):
- self.mock_module_helper = patch.multiple(basic.AnsibleModule,
- exit_json=exit_json,
- fail_json=fail_json)
- self.mock_module_helper.start()
- self.addCleanup(self.mock_module_helper.stop)
-
- def test_module_fail_when_required_args_missing(self):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleFailJson) as exc:
- set_module_args({})
- my_module()
- print('Info: %s' % exc.value.args[0]['msg'])
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_add_volume(self, mock_create_sf_connection):
- ''' adding a volume '''
- args = dict(self.ARGS) # deep copy as other tests can modify args
- args['name'] += '_1' # new name to force a create
- args.pop('qos') # parameters are mutually exclusive: qos|qos_policy_name
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_add_or_modify_volume_idempotent_qos_policy(self, mock_create_sf_connection):
- ''' adding a volume '''
- args = dict(self.ARGS)
- args.pop('qos') # parameters are mutually exclusive: qos|qos_policy_name
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert not exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_add_or_modify_volume_idempotent_qos(self, mock_create_sf_connection):
- ''' adding a volume '''
- args = dict(self.ARGS)
- args.pop('qos_policy_name') # parameters are mutually exclusive: qos|qos_policy_name
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection(with_qos_policy_id=False)
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert not exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_delete_volume(self, mock_create_sf_connection):
- ''' removing a volume '''
- args = dict(self.ARGS)
- args['state'] = 'absent'
- args.pop('qos') # parameters are mutually exclusive: qos|qos_policy_name
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_delete_volume_idempotent(self, mock_create_sf_connection):
- ''' removing a volume '''
- args = dict(self.ARGS)
- args['state'] = 'absent'
- args['name'] += '_1' # new name to force idempotency
- args.pop('qos') # parameters are mutually exclusive: qos|qos_policy_name
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert not exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_modify_volume_qos(self, mock_create_sf_connection):
- ''' modifying a volume '''
- args = dict(self.ARGS)
- args['qos'] = {'minIOPS': 2000}
- args.pop('qos_policy_name') # parameters are mutually exclusive: qos|qos_policy_name
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection(with_qos_policy_id=False)
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_modify_volume_qos_policy_to_qos(self, mock_create_sf_connection):
- ''' modifying a volume '''
- args = dict(self.ARGS)
- args['qos'] = {'minIOPS': 2000}
- args.pop('qos_policy_name') # parameters are mutually exclusive: qos|qos_policy_name
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_modify_volume_qos_policy(self, mock_create_sf_connection):
- ''' modifying a volume '''
- args = dict(self.ARGS)
- args['qos_policy_name'] += '_1'
- args.pop('qos') # parameters are mutually exclusive: qos|qos_policy_name
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_modify_volume_qos_to_qos_policy(self, mock_create_sf_connection):
- ''' modifying a volume '''
- args = dict(self.ARGS)
- args.pop('qos') # parameters are mutually exclusive: qos|qos_policy_name
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection(with_qos_policy_id=False)
- my_obj = my_module()
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_create_volume_exception(self, mock_create_sf_connection):
- ''' creating a volume can raise an exception '''
- args = dict(self.ARGS)
- args['name'] += '_1' # new name to force a create
- args.pop('qos') # parameters are mutually exclusive: qos|qos_policy_name
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection(force_error=True, where=['create_exception'])
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- message = 'Error provisioning volume: %s' % args['name']
- assert exc.value.args[0]['msg'].startswith(message)
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_modify_volume_exception(self, mock_create_sf_connection):
- ''' modifying a volume can raise an exception '''
- args = dict(self.ARGS)
- args['qos'] = {'minIOPS': 2000}
- args.pop('qos_policy_name') # parameters are mutually exclusive: qos|qos_policy_name
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection(force_error=True, where=['modify_exception'])
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- message = 'Error updating volume: %s' % VOLUME_ID
- assert exc.value.args[0]['msg'].startswith(message)
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_delete_volume_exception(self, mock_create_sf_connection):
- ''' deleting a volume can raise an exception '''
- args = dict(self.ARGS)
- args['state'] = 'absent'
- args.pop('qos') # parameters are mutually exclusive: qos|qos_policy_name
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection(force_error=True, where=['delete_exception'])
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- message = 'Error deleting volume: %s' % VOLUME_ID
- assert exc.value.args[0]['msg'].startswith(message)
-
- @patch('ansible_collections.netapp.elementsw.plugins.module_utils.netapp.create_sf_connection')
- def test_check_error_reporting_on_non_existent_qos_policy(self, mock_create_sf_connection):
- ''' report error if qos option is not given on create '''
- args = dict(self.ARGS)
- args['name'] += '_1' # new name to force a create
- args.pop('qos')
- args['qos_policy_name'] += '_2'
- set_module_args(args)
- # my_obj.sfe will be assigned a MockSFConnection object:
- mock_create_sf_connection.return_value = MockSFConnection()
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.apply()
- print(exc.value.args[0])
- message = "Cannot find qos policy with name/id: %s" % args['qos_policy_name']
- assert exc.value.args[0]['msg'] == message
diff --git a/ansible_collections/netapp/elementsw/tests/unit/plugins/modules_utils/test_netapp_module.py b/ansible_collections/netapp/elementsw/tests/unit/plugins/modules_utils/test_netapp_module.py
deleted file mode 100644
index 171a7bae5..000000000
--- a/ansible_collections/netapp/elementsw/tests/unit/plugins/modules_utils/test_netapp_module.py
+++ /dev/null
@@ -1,149 +0,0 @@
-# Copyright (c) 2018 NetApp
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-''' unit tests for module_utils netapp_module.py '''
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-
-from ansible_collections.netapp.elementsw.tests.unit.compat import unittest
-from ansible_collections.netapp.elementsw.plugins.module_utils.netapp_module import NetAppModule as na_helper
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- def test_get_cd_action_create(self):
- ''' validate cd_action for create '''
- current = None
- desired = {'state': 'present'}
- my_obj = na_helper()
- result = my_obj.get_cd_action(current, desired)
- assert result == 'create'
-
- def test_get_cd_action_delete(self):
- ''' validate cd_action for delete '''
- current = {'state': 'absent'}
- desired = {'state': 'absent'}
- my_obj = na_helper()
- result = my_obj.get_cd_action(current, desired)
- assert result == 'delete'
-
- def test_get_cd_action(self):
- ''' validate cd_action for returning None '''
- current = None
- desired = {'state': 'absent'}
- my_obj = na_helper()
- result = my_obj.get_cd_action(current, desired)
- assert result is None
-
- def test_get_modified_attributes_for_no_data(self):
- ''' validate modified attributes when current is None '''
- current = None
- desired = {'name': 'test'}
- my_obj = na_helper()
- result = my_obj.get_modified_attributes(current, desired)
- assert result == {}
-
- def test_get_modified_attributes(self):
- ''' validate modified attributes '''
- current = {'name': ['test', 'abcd', 'xyz', 'pqr'], 'state': 'present'}
- desired = {'name': ['abcd', 'abc', 'xyz', 'pqr'], 'state': 'absent'}
- my_obj = na_helper()
- result = my_obj.get_modified_attributes(current, desired)
- assert result == desired
-
- def test_get_modified_attributes_for_intersecting_mixed_list(self):
- ''' validate modified attributes for list diff '''
- current = {'name': [2, 'four', 'six', 8]}
- desired = {'name': ['a', 8, 'ab', 'four', 'abcd']}
- my_obj = na_helper()
- result = my_obj.get_modified_attributes(current, desired, True)
- assert result == {'name': ['a', 'ab', 'abcd']}
-
- def test_get_modified_attributes_for_intersecting_list(self):
- ''' validate modified attributes for list diff '''
- current = {'name': ['two', 'four', 'six', 'eight']}
- desired = {'name': ['a', 'six', 'ab', 'four', 'abc']}
- my_obj = na_helper()
- result = my_obj.get_modified_attributes(current, desired, True)
- assert result == {'name': ['a', 'ab', 'abc']}
-
- def test_get_modified_attributes_for_nonintersecting_list(self):
- ''' validate modified attributes for list diff '''
- current = {'name': ['two', 'four', 'six', 'eight']}
- desired = {'name': ['a', 'ab', 'abd']}
- my_obj = na_helper()
- result = my_obj.get_modified_attributes(current, desired, True)
- assert result == {'name': ['a', 'ab', 'abd']}
-
- def test_get_modified_attributes_for_list_of_dicts_no_data(self):
- ''' validate modified attributes for list diff '''
- current = None
- desired = {'address_blocks': [{'start': '10.20.10.40', 'size': 5}]}
- my_obj = na_helper()
- result = my_obj.get_modified_attributes(current, desired, True)
- assert result == {}
-
- def test_get_modified_attributes_for_intersecting_list_of_dicts(self):
- ''' validate modified attributes for list diff '''
- current = {'address_blocks': [{'start': '10.10.10.23', 'size': 5}, {'start': '10.10.10.30', 'size': 5}]}
- desired = {'address_blocks': [{'start': '10.10.10.23', 'size': 5}, {'start': '10.10.10.30', 'size': 5}, {'start': '10.20.10.40', 'size': 5}]}
- my_obj = na_helper()
- result = my_obj.get_modified_attributes(current, desired, True)
- assert result == {'address_blocks': [{'start': '10.20.10.40', 'size': 5}]}
-
- def test_get_modified_attributes_for_nonintersecting_list_of_dicts(self):
- ''' validate modified attributes for list diff '''
- current = {'address_blocks': [{'start': '10.10.10.23', 'size': 5}, {'start': '10.10.10.30', 'size': 5}]}
- desired = {'address_blocks': [{'start': '10.20.10.23', 'size': 5}, {'start': '10.20.10.30', 'size': 5}, {'start': '10.20.10.40', 'size': 5}]}
- my_obj = na_helper()
- result = my_obj.get_modified_attributes(current, desired, True)
- assert result == {'address_blocks': [{'start': '10.20.10.23', 'size': 5}, {'start': '10.20.10.30', 'size': 5}, {'start': '10.20.10.40', 'size': 5}]}
-
- def test_get_modified_attributes_for_list_diff(self):
- ''' validate modified attributes for list diff '''
- current = {'name': ['test', 'abcd'], 'state': 'present'}
- desired = {'name': ['abcd', 'abc'], 'state': 'present'}
- my_obj = na_helper()
- result = my_obj.get_modified_attributes(current, desired, True)
- assert result == {'name': ['abc']}
-
- def test_get_modified_attributes_for_no_change(self):
- ''' validate modified attributes for same data in current and desired '''
- current = {'name': 'test'}
- desired = {'name': 'test'}
- my_obj = na_helper()
- result = my_obj.get_modified_attributes(current, desired)
- assert result == {}
-
- def test_is_rename_action_for_empty_input(self):
- ''' validate rename action for input None '''
- source = None
- target = None
- my_obj = na_helper()
- result = my_obj.is_rename_action(source, target)
- assert result == source
-
- def test_is_rename_action_for_no_source(self):
- ''' validate rename action when source is None '''
- source = None
- target = 'test2'
- my_obj = na_helper()
- result = my_obj.is_rename_action(source, target)
- assert result is False
-
- def test_is_rename_action_for_no_target(self):
- ''' validate rename action when target is None '''
- source = 'test2'
- target = None
- my_obj = na_helper()
- result = my_obj.is_rename_action(source, target)
- assert result is True
-
- def test_is_rename_action(self):
- ''' validate rename action '''
- source = 'test'
- target = 'test2'
- my_obj = na_helper()
- result = my_obj.is_rename_action(source, target)
- assert result is False
diff --git a/ansible_collections/netapp/elementsw/tests/unit/requirements.txt b/ansible_collections/netapp/elementsw/tests/unit/requirements.txt
deleted file mode 100644
index dde1958f1..000000000
--- a/ansible_collections/netapp/elementsw/tests/unit/requirements.txt
+++ /dev/null
@@ -1 +0,0 @@
-solidfire-sdk-python ; python_version >= '2.7'
diff --git a/ansible_collections/netapp/um_info/.github/ISSUE_TEMPLATE/bug_report.yml b/ansible_collections/netapp/um_info/.github/ISSUE_TEMPLATE/bug_report.yml
deleted file mode 100644
index 71c875355..000000000
--- a/ansible_collections/netapp/um_info/.github/ISSUE_TEMPLATE/bug_report.yml
+++ /dev/null
@@ -1,210 +0,0 @@
----
-name: 🐛 Bug report
-description: Create a report to help us improve
-
-body:
-- type: markdown
- attributes:
- value: >
- **Thank you for wanting to report a bug in netapp.um_info!**
-
-
- ⚠
- Verify first that your issue is not [already reported on
- GitHub][issue search] and keep in mind that we may have to keep
- the current behavior because [every change breaks someone's
- workflow][XKCD 1172].
- We try to be mindful about this.
-
- Also test if the latest release and devel branch are affected too.
-
-
- **Tip:** If you are seeking community support, please consider
- [Join our Slack community][ML||IRC].
-
-
-
- [ML||IRC]:
- https://join.slack.com/t/netapppub/shared_invite/zt-njcjx2sh-1VR2mEDvPcJAmPutOnP~mg
-
- [issue search]: ../search?q=is%3Aissue&type=issues
-
- [XKCD 1172]: https://xkcd.com/1172/
-
-
-- type: textarea
- attributes:
- label: Summary
- description: Explain the problem briefly below.
- placeholder: >-
- When I try to do X with netapp.um_info from the devel branch on GitHub, Y
- breaks in a way Z under the env E. Here are all the details I know
- about this problem...
- validations:
- required: true
-
-- type: input
- attributes:
- label: Component Name
- description: >
- Write the short name of the rst file, module, plugin, task or
- feature below, *use your best guess if unsure*.
-
-
- **Tip:** Cannot find it in this repository? Please be advised that
- the source for some parts of the documentation are hosted outside
- of this repository. If the page you are reporting describes
- modules/plugins/etc that are not officially supported by the
- Ansible Core Engineering team, there is a good chance that it is
- coming from one of the [Ansible Collections maintained by the
- community][collections org]. If this is the case, please make sure
- to file an issue under the appropriate project there instead.
-
-
- [collections org]: /ansible-collections
- placeholder: dnf, apt, yum, pip, user etc.
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Ansible Version
- description: >-
- Paste verbatim output from `ansible --version` below, under
- the prompt line. Please don't wrap it with tripple backticks — your
- whole input will be turned into a code snippet automatically.
- render: console
- value: |
- $ ansible --version
- placeholder: |
- $ ansible --version
- ansible [core 2.11.0b4.post0] (detached HEAD ref: refs/) last updated 2021/04/02 00:33:35 (GMT +200)
- config file = None
- configured module search path = ['~/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
- ansible python module location = ~/src/github/ansible/ansible/lib/ansible
- ansible collection location = ~/.ansible/collections:/usr/share/ansible/collections
- executable location = bin/ansible
- python version = 3.9.0 (default, Oct 26 2020, 13:08:59) [GCC 10.2.0]
- jinja version = 2.11.3
- libyaml = True
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: UM_Info Collection Version
- description: >-
- UM_Info Collection Version. Run `ansible-galaxy collection` and copy the entire output
- render: console
- value: |
- $ ansible-galaxy collection list
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Playbook
- description: >-
- The task from the playbook that is give you the issue
- render: console
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Steps to Reproduce
- description: |
- Describe exactly how to reproduce the problem, using a minimal test-case. It would *really* help us understand your problem if you could also pased any playbooks, configs and commands you used.
-
- **HINT:** You can paste https://gist.github.com links for larger files.
- value: |
- <!--- Paste example playbooks or commands between quotes below -->
- ```yaml (paste below)
-
- ```
- placeholder: |
- 1. Implement the following playbook:
-
- ```yaml
- ---
- # ping.yml
- - hosts: all
- gather_facts: false
- tasks:
- - ping:
- ...
- ```
- 2. Then run `ANSIBLE_DEBUG=1 ansible-playbook ping.yml -vvvvv`
- 3. An error occurs.
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Expected Results
- description: >-
- Describe what you expected to happen when running the steps above.
- placeholder: >-
- I expected X to happen because I assumed Y and was shocked
- that it did not.
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Actual Results
- description: |
- Describe what actually happened. If possible run with extra verbosity (`-vvvv`).
-
- Paste verbatim command output and don't wrap it with tripple backticks — your
- whole input will be turned into a code snippet automatically.
- render: console
- placeholder: >-
- Certificate did not match expected hostname: files.pythonhosted.org. Certificate: {'notAfter': 'Apr 28 19:20:25 2021 GMT', 'subjectAltName': ((u'DNS', 'r.ssl.fastly.net'), (u'DNS', '*.catchpoint.com'), (u'DNS', '*.cnn.io'), (u'DNS', '*.dollarshaveclub.com'), (u'DNS', '*.eater.com'), (u'DNS', '*.fastly.picmonkey.com'), (u'DNS', '*.files.saymedia-content.com'), (u'DNS', '*.ft.com'), (u'DNS', '*.meetupstatic.com'), (u'DNS', '*.nfl.com'), (u'DNS', '*.pagar.me'), (u'DNS', '*.picmonkey.com'), (u'DNS', '*.realself.com'), (u'DNS', '*.sbnation.com'), (u'DNS', '*.shakr.com'), (u'DNS', '*.streamable.com'), (u'DNS', '*.surfly.com'), (u'DNS', '*.theverge.com'), (u'DNS', '*.thrillist.com'), (u'DNS', '*.vox-cdn.com'), (u'DNS', '*.vox.com'), (u'DNS', '*.voxmedia.com'), (u'DNS', 'eater.com'), (u'DNS', 'ft.com'), (u'DNS', 'i.gse.io'), (u'DNS', 'picmonkey.com'), (u'DNS', 'realself.com'), (u'DNS', 'static.wixstatic.com'), (u'DNS', 'streamable.com'), (u'DNS', 'surfly.com'), (u'DNS', 'theverge.com'), (u'DNS', 'vox-cdn.com'), (u'DNS', 'vox.com'), (u'DNS', 'www.joyent.com')), 'subject': ((('countryName', u'US'),), (('stateOrProvinceName', u'California'),), (('localityName', u'San Francisco'),), (('organizationName', u'Fastly, Inc'),), (('commonName', u'r.ssl.fastly.net'),))}
- Exception:
- Traceback (most recent call last):
- File "/usr/local/lib/python2.6/dist-packages/pip/basecommand.py", line 215, in main
- status = self.run(options, args)
- File "/usr/local/lib/python2.6/dist-packages/pip/commands/install.py", line 335, in run
- wb.build(autobuilding=True)
- File "/usr/local/lib/python2.6/dist-packages/pip/wheel.py", line 749, in build
- self.requirement_set.prepare_files(self.finder)
- File "/usr/local/lib/python2.6/dist-packages/pip/req/req_set.py", line 380, in prepare_files
- ignore_dependencies=self.ignore_dependencies))
- File "/usr/local/lib/python2.6/dist-packages/pip/req/req_set.py", line 620, in _prepare_file
- session=self.session, hashes=hashes)
- File "/usr/local/lib/python2.6/dist-packages/pip/download.py", line 821, in unpack_url
- hashes=hashes
- File "/usr/local/lib/python2.6/dist-packages/pip/download.py", line 659, in unpack_http_url
- hashes)
- File "/usr/local/lib/python2.6/dist-packages/pip/download.py", line 853, in _download_http_url
- stream=True,
- File "/usr/local/lib/python2.6/dist-packages/pip/_vendor/requests/sessions.py", line 521, in get
- return self.request('GET', url, **kwargs)
- File "/usr/local/lib/python2.6/dist-packages/pip/download.py", line 386, in request
- return super(PipSession, self).request(method, url, *args, **kwargs)
- File "/usr/local/lib/python2.6/dist-packages/pip/_vendor/requests/sessions.py", line 508, in request
- resp = self.send(prep, **send_kwargs)
- File "/usr/local/lib/python2.6/dist-packages/pip/_vendor/requests/sessions.py", line 618, in send
- r = adapter.send(request, **kwargs)
- File "/usr/local/lib/python2.6/dist-packages/pip/_vendor/cachecontrol/adapter.py", line 47, in send
- resp = super(CacheControlAdapter, self).send(request, **kw)
- File "/usr/local/lib/python2.6/dist-packages/pip/_vendor/requests/adapters.py", line 506, in send
- raise SSLError(e, request=request)
- SSLError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Max retries exceeded with url: /packages/ef/ab/aa12712415809bf698e719b307419f953e25344e8f42d557533d7a02b276/netapp_lib-2020.7.16-py2-none-any.whl (Caused by SSLError(CertificateError("hostname 'files.pythonhosted.org' doesn't match either of 'r.ssl.fastly.net', '*.catchpoint.com', '*.cnn.io', '*.dollarshaveclub.com', '*.eater.com', '*.fastly.picmonkey.com', '*.files.saymedia-content.com', '*.ft.com', '*.meetupstatic.com', '*.nfl.com', '*.pagar.me', '*.picmonkey.com', '*.realself.com', '*.sbnation.com', '*.shakr.com', '*.streamable.com', '*.surfly.com', '*.theverge.com', '*.thrillist.com', '*.vox-cdn.com', '*.vox.com', '*.voxmedia.com', 'eater.com', 'ft.com', 'i.gse.io', 'picmonkey.com', 'realself.com', 'static.wixstatic.com', 'streamable.com', 'surfly.com', 'theverge.com', 'vox-cdn.com', 'vox.com', 'www.joyent.com'",),))
- ERROR: Command "/usr/bin/python2.6 /root/ansible/test/lib/ansible_test/_data/quiet_pip.py install --disable-pip-version-check -r /root/ansible/test/lib/ansible_test/_data/requirements/units.txt -r tests/unit/requirements.txt -c /root/ansible/test/lib/ansible_test/_data/requirements/constraints.txt" returned exit status 2.
- ERROR: Command "docker exec d47eb360db4ce779c1f690db964655b76e68895c4360ff252c46fe7fe6f5c75a /usr/bin/env ANSIBLE_TEST_CONTENT_ROOT=/root/ansible_collections/netapp/ontap LC_ALL=en_US.UTF-8 /usr/bin/python3.6 /root/ansible/bin/ansible-test units --metadata tests/output/.tmp/metadata-9i2qfrcl.json --truncate 200 --redact --color yes --requirements --python default --requirements-mode only" returned exit status 1.
- validations:
- required: true
-
-
-- type: markdown
- attributes:
- value: >
- *One last thing...*
-
-
- Thank you for your collaboration!
-
-
-...
diff --git a/ansible_collections/netapp/um_info/.github/ISSUE_TEMPLATE/feature_request.yml b/ansible_collections/netapp/um_info/.github/ISSUE_TEMPLATE/feature_request.yml
deleted file mode 100644
index 126b4b9cd..000000000
--- a/ansible_collections/netapp/um_info/.github/ISSUE_TEMPLATE/feature_request.yml
+++ /dev/null
@@ -1,100 +0,0 @@
----
-name: ✨ Feature request
-description: Suggest an idea for this project
-
-body:
-- type: markdown
- attributes:
- value: >
- **Thank you for wanting to suggest a feature for netapp.um_info!**
-
- 💡
- Before you go ahead with your request, please first consider if it
- would be useful for majority of the netapp.um_info users. As a
- general rule of thumb, any feature that is only of interest to a
- small sub group should be [implemented in a third-party Ansible
- Collection][contribute to collections] or maybe even just your
- project alone. Be mindful of the fact that the essential
- netapp.um_info features have a broad impact.
-
-
- <details>
- <summary>
- ❗ Every change breaks someone's workflow.
- </summary>
-
-
- [![❗ Every change breaks someone's workflow.
- ](https://imgs.xkcd.com/comics/workflow.png)
- ](https://xkcd.com/1172/)
- </details>
-
-
- ⚠
- Verify first that your idea is not [already requested on
- GitHub][issue search].
-
- Also test if the main branch does not already implement this.
-
-
-- type: textarea
- attributes:
- label: Summary
- description: >
- Describe the new feature/improvement you would like briefly below.
-
-
- What's the problem this feature will solve?
-
- What are you trying to do, that you are unable to achieve
- with netapp.um_info as it currently stands?
-
-
- * Provide examples of real-world use cases that this would enable
- and how it solves the problem you described.
-
- * How do you solve this now?
-
- * Have you tried to work around the problem using other tools?
-
- * Could there be a different approach to solving this issue?
-
- placeholder: >-
- I am trying to do X with netapp.um_info from the devel branch on GitHub and
- I think that implementing a feature Y would be very helpful for me and
- every other user of netapp.um_info because of Z.
- validations:
- required: true
-
-- type: input
- attributes:
- label: Component Name
- description: >
- Write the short name of the module, plugin, task or feature below,
- *use your best guess if unsure*.
-
-
- [collections org]: /ansible-collections
- placeholder: dnf, apt, yum, pip, user etc.
- validations:
- required: true
-
-- type: textarea
- attributes:
- label: Additional Information
- description: |
- Describe how the feature would be used, why it is needed and what it would solve.
-
- **HINT:** You can paste https://gist.github.com links for larger files.
- value: |
- <!--- Paste example playbooks or commands between quotes below -->
- ```yaml (paste below)
-
- ```
- placeholder: >-
- I asked on https://stackoverflow.com/.... and the community
- advised me to do X, Y and Z.
- validations:
- required: true
-
-...
diff --git a/ansible_collections/netapp/um_info/.github/workflows/coverage.yml b/ansible_collections/netapp/um_info/.github/workflows/coverage.yml
deleted file mode 100644
index 39d5818c9..000000000
--- a/ansible_collections/netapp/um_info/.github/workflows/coverage.yml
+++ /dev/null
@@ -1,45 +0,0 @@
-name: NetApp.um_info Ansible Coverage
-
-on:
- push:
- pull_request:
- schedule:
- - cron: '0 6 * * *'
-
-jobs:
- sanity:
- name: Coverage on UM_INFO
- runs-on: ubuntu-latest
-
- steps:
- - name: Check out code
- uses: actions/checkout@v2
-
- - name: Set up Python
- uses: actions/setup-python@v2
- with:
- python-version: 3.8
-
- - name: Install ansible stable-2.11
- run: pip install https://github.com/ansible/ansible/archive/stable-2.11.tar.gz --disable-pip-version-check
-
- - name: Make directory to make ansible-test happy
- run: |
- pwd
- mkdir -p ansible_collections/netapp/um_info/
- rsync -av . ansible_collections/netapp/um_info/ --exclude ansible_collections/netapp/um_info/
-
- - name: Run Unit Tests
- run: ansible-test units --coverage --color --docker --python 3.8
- working-directory: ansible_collections/netapp/um_info/
-
- # ansible-test support producing code coverage date
- - name: Generate coverage report
- run: ansible-test coverage xml -v --requirements --group-by command --group-by version
- working-directory: ansible_collections/netapp/um_info/
-
- - name: Upload coverage to Codecov
- uses: codecov/codecov-action@v2
- with:
- working-directory: ansible_collections/netapp/um_info/
- verbose: true \ No newline at end of file
diff --git a/ansible_collections/netapp/um_info/.github/workflows/main.yml b/ansible_collections/netapp/um_info/.github/workflows/main.yml
deleted file mode 100644
index 9294078a2..000000000
--- a/ansible_collections/netapp/um_info/.github/workflows/main.yml
+++ /dev/null
@@ -1,49 +0,0 @@
-name: NetApp.um_info Ansible CI
-
-on:
- push:
- pull_request:
- schedule:
- - cron: '0 6 * * *'
-
-jobs:
- sanity:
- name: Sanity (${{ matrix.ansible }} on Um_info
- runs-on: ubuntu-latest
- strategy:
- matrix:
- ansible:
- - stable-2.9
- - stable-2.10
- - stable-2.11
- - stable-2.12
- - stable-2.13
- - devel
-
- steps:
- - name: Check out code
- uses: actions/checkout@v2
-
- - name: Set up Python
- uses: actions/setup-python@v2
- with:
- # Ansible 2.14 requires 3.9 as a minimum
- python-version: 3.9
-
- - name: Install ansible (${{ matrix.ansible }})
- run: pip install https://github.com/ansible/ansible/archive/${{ matrix.ansible }}.tar.gz --disable-pip-version-check
-
- - name: Make directory to make ansible-test happy
- run: |
- pwd
- mkdir -p ansible_collections/netapp/um_info/
- rsync -av . ansible_collections/netapp/um_info/ --exclude ansible_collections/netapp/um_info/
-
-
- - name: Run sanity tests Um_info
- run: ansible-test sanity --docker -v --color
- working-directory: ansible_collections/netapp/um_info/
-
- - name: Run Unit Tests
- run: ansible-test units --docker -v --color
- working-directory: ansible_collections/netapp/um_info/
diff --git a/ansible_collections/netapp/um_info/CHANGELOG.rst b/ansible_collections/netapp/um_info/CHANGELOG.rst
deleted file mode 100644
index f5d538d11..000000000
--- a/ansible_collections/netapp/um_info/CHANGELOG.rst
+++ /dev/null
@@ -1,78 +0,0 @@
-====================================================
-NetApp Unified Manager Info Collection Release Notes
-====================================================
-
-.. contents:: Topics
-
-
-v21.8.0
-=======
-
-Minor Changes
--------------
-
-- PR1 - allow usage of Ansible module group defaults - for Ansible 2.12+.
-
-v21.7.0
-=======
-
-Minor Changes
--------------
-
-- all modules - ability to trace API calls and responses.
-- all modules - new ``max_records`` option to limit the amount of data in a single GET response.
-
-Bugfixes
---------
-
-- all modules - report error when connecting to a server that does not run AIQUM.
-- all modules - return all records rather than the first 1000 records (mostly for volumes).
-- rename na_um_list_volumes.p to na_um_list_volumes.py
-
-v21.6.0
-=======
-
-Minor Changes
--------------
-
-- na_um_list_aggregates has been renamed na_um_aggregates_info.
-- na_um_list_clusters has been renamed na_um_clusters_info.
-- na_um_list_nodes has been renamed na_um_nodes_info.
-- na_um_list_svms has been renamed na_um_svms_info.
-- na_um_list_volumes has been renamed na_um_volumes_info.
-
-v21.5.0
-=======
-
-Minor Changes
--------------
-
-- minor changes to meet Red Hat requirements to be certified.
-
-v20.7.0
-=======
-
-Minor Changes
--------------
-
-- na_um_list_aggregates - Now sort by performance_capacity.used
-- na_um_list_nodes - Now sort by performance_capacity.used
-
-v20.6.0
-=======
-
-New Modules
------------
-
-- netapp.um_info.na_um_list_volumes - NetApp Unified Manager list volumes.
-
-v20.5.0
-=======
-
-New Modules
------------
-
-- netapp.um_info.na_um_list_aggregates - NetApp Unified Manager list aggregates.
-- netapp.um_info.na_um_list_clusters - NetApp Unified Manager list cluster.
-- netapp.um_info.na_um_list_nodes - NetApp Unified Manager list nodes.
-- netapp.um_info.na_um_list_svms - NetApp Unified Manager list svms.
diff --git a/ansible_collections/netapp/um_info/COPYING b/ansible_collections/netapp/um_info/COPYING
deleted file mode 100644
index 94a9ed024..000000000
--- a/ansible_collections/netapp/um_info/COPYING
+++ /dev/null
@@ -1,674 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
- The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works. By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users. We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors. You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
- To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights. Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received. You must make sure that they, too, receive
-or can get the source code. And you must show them these terms so they
-know their rights.
-
- Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
- For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software. For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
- Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so. This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software. The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable. Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products. If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
- Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary. To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS
-
- 0. Definitions.
-
- "This License" refers to version 3 of the GNU General Public License.
-
- "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
- "The Program" refers to any copyrightable work licensed under this
-License. Each licensee is addressed as "you". "Licensees" and
-"recipients" may be individuals or organizations.
-
- To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy. The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
- A "covered work" means either the unmodified Program or a work based
-on the Program.
-
- To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy. Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
- To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies. Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
- An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License. If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
- 1. Source Code.
-
- The "source code" for a work means the preferred form of the work
-for making modifications to it. "Object code" means any non-source
-form of a work.
-
- A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
- The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form. A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
- The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities. However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work. For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
- The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
- The Corresponding Source for a work in source code form is that
-same work.
-
- 2. Basic Permissions.
-
- All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met. This License explicitly affirms your unlimited
-permission to run the unmodified Program. The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work. This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
- You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force. You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright. Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
- Conveying under any other circumstances is permitted solely under
-the conditions stated below. Sublicensing is not allowed; section 10
-makes it unnecessary.
-
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
- No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
- When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
- 4. Conveying Verbatim Copies.
-
- You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
- You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
- 5. Conveying Modified Source Versions.
-
- You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
- a) The work must carry prominent notices stating that you modified
- it, and giving a relevant date.
-
- b) The work must carry prominent notices stating that it is
- released under this License and any conditions added under section
- 7. This requirement modifies the requirement in section 4 to
- "keep intact all notices".
-
- c) You must license the entire work, as a whole, under this
- License to anyone who comes into possession of a copy. This
- License will therefore apply, along with any applicable section 7
- additional terms, to the whole of the work, and all its parts,
- regardless of how they are packaged. This License gives no
- permission to license the work in any other way, but it does not
- invalidate such permission if you have separately received it.
-
- d) If the work has interactive user interfaces, each must display
- Appropriate Legal Notices; however, if the Program has interactive
- interfaces that do not display Appropriate Legal Notices, your
- work need not make them do so.
-
- A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit. Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
- 6. Conveying Non-Source Forms.
-
- You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
- a) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by the
- Corresponding Source fixed on a durable physical medium
- customarily used for software interchange.
-
- b) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that product
- model, to give anyone who possesses the object code either (1) a
- copy of the Corresponding Source for all the software in the
- product that is covered by this License, on a durable physical
- medium customarily used for software interchange, for a price no
- more than your reasonable cost of physically performing this
- conveying of source, or (2) access to copy the
- Corresponding Source from a network server at no charge.
-
- c) Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
- alternative is allowed only occasionally and noncommercially, and
- only if you received the object code with such an offer, in accord
- with subsection 6b.
-
- d) Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to the
- Corresponding Source in the same way through the same place at no
- further charge. You need not require recipients to copy the
- Corresponding Source along with the object code. If the place to
- copy the object code is a network server, the Corresponding Source
- may be on a different server (operated by you or a third party)
- that supports equivalent copying facilities, provided you maintain
- clear directions next to the object code saying where to find the
- Corresponding Source. Regardless of what server hosts the
- Corresponding Source, you remain obligated to ensure that it is
- available for as long as needed to satisfy these requirements.
-
- e) Convey the object code using peer-to-peer transmission, provided
- you inform other peers where the object code and Corresponding
- Source of the work are being offered to the general public at no
- charge under subsection 6d.
-
- A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
- A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling. In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage. For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product. A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
- "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source. The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
- If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information. But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
- The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed. Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
- Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
- 7. Additional Terms.
-
- "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law. If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
- When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it. (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.) You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
- Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
- a) Disclaiming warranty or limiting liability differently from the
- terms of sections 15 and 16 of this License; or
-
- b) Requiring preservation of specified reasonable legal notices or
- author attributions in that material or in the Appropriate Legal
- Notices displayed by works containing it; or
-
- c) Prohibiting misrepresentation of the origin of that material, or
- requiring that modified versions of such material be marked in
- reasonable ways as different from the original version; or
-
- d) Limiting the use for publicity purposes of names of licensors or
- authors of the material; or
-
- e) Declining to grant rights under trademark law for use of some
- trade names, trademarks, or service marks; or
-
- f) Requiring indemnification of licensors and authors of that
- material by anyone who conveys the material (or modified versions of
- it) with contractual assumptions of liability to the recipient, for
- any liability that these contractual assumptions directly impose on
- those licensors and authors.
-
- All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10. If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term. If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
- If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
- Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
- 8. Termination.
-
- You may not propagate or modify a covered work except as expressly
-provided under this License. Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
- However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
- Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
- Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
- 9. Acceptance Not Required for Having Copies.
-
- You are not required to accept this License in order to receive or
-run a copy of the Program. Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance. However,
-nothing other than this License grants you permission to propagate or
-modify any covered work. These actions infringe copyright if you do
-not accept this License. Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
- 10. Automatic Licensing of Downstream Recipients.
-
- Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License. You are not responsible
-for enforcing compliance by third parties with this License.
-
- An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations. If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
- You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License. For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
- 11. Patents.
-
- A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based. The
-work thus licensed is called the contributor's "contributor version".
-
- A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version. For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
- Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
- In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement). To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
- If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients. "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
- If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
- A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License. You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
- Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
- 12. No Surrender of Others' Freedom.
-
- If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all. For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
- 13. Use with the GNU Affero General Public License.
-
- Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work. The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
- 14. Revised Versions of this License.
-
- The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
- If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
- Later license versions may give you additional or different
-permissions. However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
- 15. Disclaimer of Warranty.
-
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. Limitation of Liability.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
- 17. Interpretation of Sections 15 and 16.
-
- If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program 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.
-
- This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
- If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
- <program> Copyright (C) <year> <name of author>
- This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
- You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
- The GNU General Public License does not permit incorporating your program
-into proprietary programs. If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License. But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/ansible_collections/netapp/um_info/FILES.json b/ansible_collections/netapp/um_info/FILES.json
deleted file mode 100644
index 769a883a4..000000000
--- a/ansible_collections/netapp/um_info/FILES.json
+++ /dev/null
@@ -1,467 +0,0 @@
-{
- "files": [
- {
- "name": ".",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "requirements.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ec72420df5dfbdce4111f715c96338df3b7cb75f58e478d2449c9720e560de8c",
- "format": 1
- },
- {
- "name": "plugins",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "plugins/doc_fragments",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "plugins/doc_fragments/netapp.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "bd4a43b072697053c41ac2c6979513bd8fadd8c80eece1ca2a5454f24ecf85da",
- "format": 1
- },
- {
- "name": "plugins/module_utils",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "plugins/module_utils/netapp.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a255d934e0f25750f739d26bc124f7542db92b11385d5a3f350409ed6ae3fc2f",
- "format": 1
- },
- {
- "name": "plugins/module_utils/netapp_module.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cf7052585943d6e39a9b671538947f8de77411805f659c148267099603d26bef",
- "format": 1
- },
- {
- "name": "plugins/modules",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "plugins/modules/na_um_list_volumes.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e155cc127f6b1fb1a7512a52b15077e8bcc71cd2bd36fceb8e5811b43fa6c647",
- "format": 1
- },
- {
- "name": "plugins/modules/na_um_list_nodes.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c9dc5fee102f858e25be36bd6a4cbc72732fd4d87f5693d9dc9c070360b05b3b",
- "format": 1
- },
- {
- "name": "plugins/modules/na_um_svms_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "810aed45c718629fc7629558a6f1de69bcb30206dbe1b04b8aff4284512b910f",
- "format": 1
- },
- {
- "name": "plugins/modules/na_um_clusters_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "fa552cbf9cc2684c8378023e0bd8b338d33f8f826c05812addc5867830999b97",
- "format": 1
- },
- {
- "name": "plugins/modules/na_um_aggregates_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b65dde8d0d786b63ea89d411024d5c36dc56fe45d9472eec7f5c1d3dba47fff8",
- "format": 1
- },
- {
- "name": "plugins/modules/na_um_list_clusters.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "fa552cbf9cc2684c8378023e0bd8b338d33f8f826c05812addc5867830999b97",
- "format": 1
- },
- {
- "name": "plugins/modules/na_um_list_svms.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "810aed45c718629fc7629558a6f1de69bcb30206dbe1b04b8aff4284512b910f",
- "format": 1
- },
- {
- "name": "plugins/modules/na_um_nodes_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c9dc5fee102f858e25be36bd6a4cbc72732fd4d87f5693d9dc9c070360b05b3b",
- "format": 1
- },
- {
- "name": "plugins/modules/na_um_volumes_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e155cc127f6b1fb1a7512a52b15077e8bcc71cd2bd36fceb8e5811b43fa6c647",
- "format": 1
- },
- {
- "name": "plugins/modules/na_um_list_aggregates.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b65dde8d0d786b63ea89d411024d5c36dc56fe45d9472eec7f5c1d3dba47fff8",
- "format": 1
- },
- {
- "name": "tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/compat",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/compat/unittest.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cba95d18c5b39c6f49714eacf1ac77452c2e32fa087c03cf01aacd19ae597b0f",
- "format": 1
- },
- {
- "name": "tests/unit/compat/builtins.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0ca4cac919e166b25e601e11acb01f6957dddd574ff0a62569cb994a5ecb63e1",
- "format": 1
- },
- {
- "name": "tests/unit/compat/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "tests/unit/compat/mock.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0af958450cf6de3fbafe94b1111eae8ba5a8dbe1d785ffbb9df81f26e4946d99",
- "format": 1
- },
- {
- "name": "tests/unit/requirements.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "68a61b1d58a722f4ffabaa28da01c9837c93a582ea41c1bfb1c1fd54ea2d8fab",
- "format": 1
- },
- {
- "name": "tests/unit/plugins",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/plugins/module_utils",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/plugins/module_utils/test_netapp.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a4de097829490ea8016a6227b340a27e23a38f40189f12f80217caa199c608ec",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_na_um_volumes_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b8a2d4ca0f304a588de4d642da415362f3b15b2926fa12a90117b58b9f71d6d9",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_na_um_clusters_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "11f9aa85947d440b6a647a2cc6be1cf16d93d69b08ed288a33fa8168836d2521",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_na_um_list_svms.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7933824403b197ec756f540be054a5e2c75b5a3a28cf60280cd11493f4c4b235",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_na_um_list_aggregates.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ba3687cb122aa7452f21052b5a6f26448df8356e92e4b78c20cce55c66ea3026",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_na_um_list_clusters.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "11f9aa85947d440b6a647a2cc6be1cf16d93d69b08ed288a33fa8168836d2521",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_na_um_nodes_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cf4ded8134d30ed7b82769252addf2094d07b6bf3ec81e7aba0615b290558cfb",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_na_um_aggregates_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ba3687cb122aa7452f21052b5a6f26448df8356e92e4b78c20cce55c66ea3026",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_na_um_list_volumes.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b8a2d4ca0f304a588de4d642da415362f3b15b2926fa12a90117b58b9f71d6d9",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_na_um_svms_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7933824403b197ec756f540be054a5e2c75b5a3a28cf60280cd11493f4c4b235",
- "format": 1
- },
- {
- "name": "tests/unit/plugins/modules/test_na_um_list_nodes.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cf4ded8134d30ed7b82769252addf2094d07b6bf3ec81e7aba0615b290558cfb",
- "format": 1
- },
- {
- "name": "meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "meta/execution-environment.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "db75f5fcae43fd2db36d3c9a004748dd1ec4165a6e2ebb36ada6943a8b440f4a",
- "format": 1
- },
- {
- "name": "meta/runtime.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2fe9f7286aadaf2d0c4dbd2a0f118f155f564496bbc1bc742478ef7e8ece8269",
- "format": 1
- },
- {
- "name": "changelogs",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "changelogs/fragments",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-3962.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f4f9cd51e1471197180cbedd7a89fc1ebbbd5f3daed2ac50a63e1df54e28c0b7",
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-4087.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "549499c7518f654d08f85c8d2774506fa8206db9cfad997a620a874ba55a0b24",
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-4059.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a77590a8f2eefce57127281e067aa0a873c7dee6c29c64b9f24a6aa44ed559fc",
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-2952.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "df2ee1a655d129670751fac00f64cb82d73b66b4b2e4babf1c03eef1958f6784",
- "format": 1
- },
- {
- "name": "changelogs/fragments/20.7.0.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "fc97a5a80d92a3fa6228c00d686e4ce5173facb9ce1d2282905883eb4bec385a",
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-3920.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "819a48b8af6f9be3dc5978af0e690830f15f3090cc9ce1e86532d726809cfb2c",
- "format": 1
- },
- {
- "name": "changelogs/fragments/DEVOPS-4416.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4224db573f34caeeb956c8728eb343a47bc2729d898001a4c6a671b780dae1bf",
- "format": 1
- },
- {
- "name": "changelogs/config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "603b6174cae76f0b6d21432d05ba48ec1332b3a24bb910a81d75b1d8c0942914",
- "format": 1
- },
- {
- "name": "changelogs/changelog.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "dfd5a84377e87d5a796d1b6fe3c534fe0bceb63b8bc1dcd94a8bbf9ea9c86947",
- "format": 1
- },
- {
- "name": "README.md",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "69664a93902d708863a70abc626b771889dce8cd6682efc449bb01a0efcc9dca",
- "format": 1
- },
- {
- "name": "COPYING",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903",
- "format": 1
- },
- {
- "name": "metadata-29PbAy.json",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "424c5b110233e003275aaa5d6886c892f39c23b72a69bbf72e9a3172933691a6",
- "format": 1
- },
- {
- "name": ".github",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": ".github/workflows",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": ".github/workflows/coverage.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9e4fe7f09274f317cf0b299f8c35a3df98f8d48e5014a7c7523c587593e1a63c",
- "format": 1
- },
- {
- "name": ".github/workflows/main.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e7781e9cc514eb5cb80bbee9a821af8661cbd39542ddfe6aa59e811afbabdf13",
- "format": 1
- },
- {
- "name": ".github/ISSUE_TEMPLATE",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": ".github/ISSUE_TEMPLATE/feature_request.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "faa5043f7628d0fa7975b9feb2c4d72e73965d0e6f072ca5fa13b00055f773e3",
- "format": 1
- },
- {
- "name": ".github/ISSUE_TEMPLATE/bug_report.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5b1080b0ad861868077511d5a8fa8b3a84c5abb2cfc13cf4fa10eeaffb2c0957",
- "format": 1
- },
- {
- "name": "CHANGELOG.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "eff94a97af8456b8fcf2677bf5e05db854239b496bc787834c562f015937fbcf",
- "format": 1
- }
- ],
- "format": 1
-} \ No newline at end of file
diff --git a/ansible_collections/netapp/um_info/MANIFEST.json b/ansible_collections/netapp/um_info/MANIFEST.json
deleted file mode 100644
index 5683ca1df..000000000
--- a/ansible_collections/netapp/um_info/MANIFEST.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "collection_info": {
- "namespace": "netapp",
- "name": "um_info",
- "version": "21.8.1",
- "authors": [
- "NetApp Ansible Team <ng-ansibleteam@netapp.com>"
- ],
- "readme": "README.md",
- "tags": [
- "storage",
- "netapp",
- "aiqum",
- "um",
- "ontap"
- ],
- "description": "NetApp Unified Manager(AIQUM 9.7) Collection",
- "license": [],
- "license_file": "COPYING",
- "dependencies": {},
- "repository": "https://github.com/ansible-collections/netapp.um_info",
- "documentation": null,
- "homepage": "https://netapp.io/configuration-management-and-automation/",
- "issues": "https://github.com/ansible-collections/netapp.um_info/issues"
- },
- "file_manifest_file": {
- "name": "FILES.json",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e33360247a1805f8191170f1cba1aa27a57e3abac652d447b398169adb14a626",
- "format": 1
- },
- "format": 1
-} \ No newline at end of file
diff --git a/ansible_collections/netapp/um_info/README.md b/ansible_collections/netapp/um_info/README.md
deleted file mode 100644
index c1ad29008..000000000
--- a/ansible_collections/netapp/um_info/README.md
+++ /dev/null
@@ -1,84 +0,0 @@
-[![Documentation](https://img.shields.io/badge/docs-brightgreen.svg)](https://docs.ansible.com/ansible/devel/collections/netapp/um_info/index.html)
-![example workflow](https://github.com/ansible-collections/netapp.um_info/actions/workflows/main.yml/badge.svg)
-[![codecov](https://codecov.io/gh/ansible-collections/netapp.um_info/branch/main/graph/badge.svg?token=weBYkksxSi)](https://codecov.io/gh/ansible-collections/netapp.um_info)
-[![Discord](https://img.shields.io/discord/855068651522490400)](https://discord.gg/NetApp)
-
-
-=============================================================
-
- netapp.um_info
-
- NetApp Unified Manager(AIQUM 9.7) Collection
-
- Copyright (c) 2020 NetApp, Inc. All rights reserved.
- Specifications subject to change without notice.
-
-=============================================================
-# Installation
-```bash
-ansible-galaxy collection install netapp.um_info
-```
-To use Collection add the following to the top of your playbook, with out this you will be using Ansible 2.9 version of the module
-```
-collections:
- - netapp.um_info
-```
-
-# Module documentation
-https://docs.ansible.com/ansible/devel/collections/netapp/um_info/
-
-# Code of Conduct
-This collection follows the [Ansible project's Code of Conduct](https://docs.ansible.com/ansible/devel/community/code_of_conduct.html).
-
-# Need help
-Join our [Discord](https://discord.gg/NetApp)
-
-# Release Notes
-
-## 21.8.0
-
-#### Minor changes
- - all modules - enable usage of Ansible module group defaults - for Ansible 2.12+.
-
-## 21.7.0
-
-#### Minor changes
- - all modules - ability to trace API calls and responses.
- - all modules - new `max_records` option to limit the amount of data in a single GET response.
-
-### Bux fixes
- - all modules - report error when connecting to a server that does not run AIQUM.
- - all modules - return all records rather than the first 1000 records (mostly for volumes).
- - rename na_um_list_volumes.p to na_um_list_volumes.py.
-
-## 21.6.0
-### Minor changes
-- na_um_list_aggregates has been renamed na_um_aggregates_info
-- na_um_list_clusters has been renamed na_um_clusters_info
-- na_um_list_nodes has been renamed na_um_nodes_info
-- na_um_list_svms has been renamed na_um_svms_info
-- na_um_list_volumes has been renamed na_um_volumes_info
-
-## 21.5.0
-
-### Minor changes
-- minor changes to meet Red Hat requirements to be certified.
-
-## 20.7.0
-
-### Minor changes
-- na_um_list_aggregates: Now sort by performance_capacity.used
-- na_um_list_nodes: Now sort by performance_capacity.used
-
-## 20.6.0
-
-### New Modules
-- na_um_list_volumes: list volumes.
-
-## 20.5.0
-
-### New Modules
-- na_um_list_aggregates: list aggregates.
-- na_um_list_clusters: list clusters.
-- na_um_list_nodes: list nodes.
-- na_um_list_svms: list svms.
diff --git a/ansible_collections/netapp/um_info/changelogs/changelog.yaml b/ansible_collections/netapp/um_info/changelogs/changelog.yaml
deleted file mode 100644
index c5d56b307..000000000
--- a/ansible_collections/netapp/um_info/changelogs/changelog.yaml
+++ /dev/null
@@ -1,72 +0,0 @@
-ancestor: null
-releases:
- 20.5.0:
- modules:
- - description: NetApp Unified Manager list aggregates.
- name: na_um_list_aggregates
- namespace: ''
- - description: NetApp Unified Manager list cluster.
- name: na_um_list_clusters
- namespace: ''
- - description: NetApp Unified Manager list nodes.
- name: na_um_list_nodes
- namespace: ''
- - description: NetApp Unified Manager list svms.
- name: na_um_list_svms
- namespace: ''
- release_date: '2020-05-06'
- 20.6.0:
- modules:
- - description: NetApp Unified Manager list volumes.
- name: na_um_list_volumes
- namespace: ''
- release_date: '2020-06-03'
- 20.7.0:
- changes:
- minor_changes:
- - na_um_list_aggregates - Now sort by performance_capacity.used
- - na_um_list_nodes - Now sort by performance_capacity.used
- fragments:
- - 20.7.0.yaml
- release_date: '2020-06-24'
- 21.5.0:
- changes:
- minor_changes:
- - minor changes to meet Red Hat requirements to be certified.
- fragments:
- - DEVOPS-3920.yaml
- release_date: '2021-04-21'
- 21.6.0:
- changes:
- minor_changes:
- - na_um_list_aggregates has been renamed na_um_aggregates_info.
- - na_um_list_clusters has been renamed na_um_clusters_info.
- - na_um_list_nodes has been renamed na_um_nodes_info.
- - na_um_list_svms has been renamed na_um_svms_info.
- - na_um_list_volumes has been renamed na_um_volumes_info.
- fragments:
- - DEVOPS-3962.yaml
- release_date: '2021-05-06'
- 21.7.0:
- changes:
- bugfixes:
- - all modules - report error when connecting to a server that does not run AIQUM.
- - all modules - return all records rather than the first 1000 records (mostly
- for volumes).
- - rename na_um_list_volumes.p to na_um_list_volumes.py
- minor_changes:
- - all modules - ability to trace API calls and responses.
- - all modules - new ``max_records`` option to limit the amount of data in a
- single GET response.
- fragments:
- - DEVOPS-2952.yaml
- - DEVOPS-4059.yaml
- - DEVOPS-4087.yaml
- release_date: '2021-07-14'
- 21.8.0:
- changes:
- minor_changes:
- - PR1 - allow usage of Ansible module group defaults - for Ansible 2.12+.
- fragments:
- - DEVOPS-4416.yaml
- release_date: '2021-11-03'
diff --git a/ansible_collections/netapp/um_info/changelogs/config.yaml b/ansible_collections/netapp/um_info/changelogs/config.yaml
deleted file mode 100644
index a39ec8cc2..000000000
--- a/ansible_collections/netapp/um_info/changelogs/config.yaml
+++ /dev/null
@@ -1,32 +0,0 @@
-changelog_filename_template: ../CHANGELOG.rst
-changelog_filename_version_depth: 0
-changes_file: changelog.yaml
-changes_format: combined
-ignore_other_fragment_extensions: true
-keep_fragments: true
-mention_ancestor: true
-new_plugins_after_name: removed_features
-notesdir: fragments
-prelude_section_name: release_summary
-prelude_section_title: Release Summary
-sanitize_changelog: true
-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
-title: NetApp Unified Manager Info Collection
-trivial_section_name: trivial
-use_fqcn: true
diff --git a/ansible_collections/netapp/um_info/changelogs/fragments/20.7.0.yaml b/ansible_collections/netapp/um_info/changelogs/fragments/20.7.0.yaml
deleted file mode 100644
index 75f9b4e46..000000000
--- a/ansible_collections/netapp/um_info/changelogs/fragments/20.7.0.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-minor_changes:
- - na_um_list_aggregates - Now sort by performance_capacity.used
- - na_um_list_nodes - Now sort by performance_capacity.used
diff --git a/ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-2952.yaml b/ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-2952.yaml
deleted file mode 100644
index 0d0699cc9..000000000
--- a/ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-2952.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
-minor_changes:
- - all modules - new ``max_records`` option to limit the amount of data in a single GET response.
-bugfixes:
- - all modules - return all records rather than the first 1000 records (mostly for volumes).
diff --git a/ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-3920.yaml b/ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-3920.yaml
deleted file mode 100644
index c3c7f1224..000000000
--- a/ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-3920.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-minor_changes:
- - minor changes to meet Red Hat requirements to be certified.
diff --git a/ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-3962.yaml b/ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-3962.yaml
deleted file mode 100644
index 1d3ef3f86..000000000
--- a/ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-3962.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-minor_changes:
-- na_um_list_aggregates has been renamed na_um_aggregates_info.
-- na_um_list_clusters has been renamed na_um_clusters_info.
-- na_um_list_nodes has been renamed na_um_nodes_info.
-- na_um_list_svms has been renamed na_um_svms_info.
-- na_um_list_volumes has been renamed na_um_volumes_info.
diff --git a/ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-4059.yaml b/ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-4059.yaml
deleted file mode 100644
index 824f55f1e..000000000
--- a/ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-4059.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-bugfixes:
- - rename na_um_list_volumes.p to na_um_list_volumes.py
diff --git a/ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-4087.yaml b/ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-4087.yaml
deleted file mode 100644
index 836a4b1b2..000000000
--- a/ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-4087.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
-minor_changes:
- - all modules - ability to trace API calls and responses.
-bugfixes:
- - all modules - report error when connecting to a server that does not run AIQUM.
diff --git a/ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-4416.yaml b/ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-4416.yaml
deleted file mode 100644
index 6b4b660a0..000000000
--- a/ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-4416.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-minor_changes:
- - PR1 - allow usage of Ansible module group defaults - for Ansible 2.12+.
diff --git a/ansible_collections/netapp/um_info/meta/execution-environment.yml b/ansible_collections/netapp/um_info/meta/execution-environment.yml
deleted file mode 100644
index 315d71a13..000000000
--- a/ansible_collections/netapp/um_info/meta/execution-environment.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-version: 1
-dependencies:
- python: ../requirements.txt
diff --git a/ansible_collections/netapp/um_info/meta/runtime.yml b/ansible_collections/netapp/um_info/meta/runtime.yml
deleted file mode 100644
index cc45f44f7..000000000
--- a/ansible_collections/netapp/um_info/meta/runtime.yml
+++ /dev/null
@@ -1,9 +0,0 @@
----
-requires_ansible: ">=2.13"
-action_groups:
- netapp_um_info:
- - na_um_aggregates_info
- - na_um_clusters_info
- - na_um_nodes_info
- - na_um_svms_info
- - na_um_volumes_info
diff --git a/ansible_collections/netapp/um_info/metadata-29PbAy.json b/ansible_collections/netapp/um_info/metadata-29PbAy.json
deleted file mode 100644
index 7ccf48221..000000000
--- a/ansible_collections/netapp/um_info/metadata-29PbAy.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "change_description": {
- "changed_paths": [],
- "command": "",
- "deleted_paths": [],
- "focused_command_targets": {},
- "no_integration_paths": [],
- "regular_command_targets": {}
- },
- "changes": {},
- "ci_provider": "",
- "cloud_config": null,
- "instance_config": null
-}
diff --git a/ansible_collections/netapp/um_info/plugins/doc_fragments/netapp.py b/ansible_collections/netapp/um_info/plugins/doc_fragments/netapp.py
deleted file mode 100644
index 0790f109a..000000000
--- a/ansible_collections/netapp/um_info/plugins/doc_fragments/netapp.py
+++ /dev/null
@@ -1,74 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright: (c) 2020, Suhas Bangalore Shekar <bsuhas@netapp.com>
-# 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
-
-
-class ModuleDocFragment(object):
-
- DOCUMENTATION = r'''
-options:
- - See respective platform section for more details
-requirements:
- - See respective platform section for more details
-notes:
- - Ansible modules are available for the following NetApp Storage Management Platforms: AIQUM 9.7
-'''
-
- # Documentation fragment for AIQUM (um)
- UM = r'''
-options:
- hostname:
- description:
- - The hostname or IP address of the Unified Manager instance.
- type: str
- required: true
- username:
- description:
- - username of the Unified Manager instance.
- type: str
- required: true
- password:
- description:
- - Password for the specified user.
- type: str
- required: true
- validate_certs:
- description:
- - If set to C(False), the SSL certificates will not be validated.
- - This should only set to C(False) used on personally controlled sites using self-signed certificates.
- type: bool
- default: True
- http_port:
- description:
- - Override the default port (443) with this port
- type: int
- feature_flags:
- description:
- - Enable or disable a new feature.
- - This can be used to enable an experimental feature or disable a new feature that breaks backward compatibility.
- - Supported keys and values are subject to change without notice. Unknown keys are ignored.
- - trace_apis can be set to true to enable tracing, data is written to /tmp/um_apis.log.
- type: dict
- version_added: 21.7.0
- max_records:
- description:
- - Maximum number of records retrieved in a single GET request.
- - This module loops on GET requests until all available records are fetched.
- - If absent, AIQUM uses 1000.
- type: int
- version_added: 21.7.0
-
-
-requirements:
- - A AIQUM 9.7 system.
- - Ansible 2.9 or later.
-
-notes:
- - With the 21.6.0 release, all modules have been renamed to na_um_<module>_info. The old ones will continue to work but will be depecrated in the future.
- - The modules prefixed with na_um are built to support the AIQUM 9.7 platform.
- - Supports check_mode.
-'''
diff --git a/ansible_collections/netapp/um_info/plugins/module_utils/netapp.py b/ansible_collections/netapp/um_info/plugins/module_utils/netapp.py
deleted file mode 100644
index 15a113ae4..000000000
--- a/ansible_collections/netapp/um_info/plugins/module_utils/netapp.py
+++ /dev/null
@@ -1,246 +0,0 @@
-# This code is part of Ansible, but is an independent component.
-# This particular file snippet, and this file snippet only, is BSD licensed.
-# Modules you write using this snippet, which is embedded dynamically by Ansible
-# still belong to the author of the module, and may assign their own license
-# to the complete work.
-#
-# Copyright (c) 2017, Sumit Kumar <sumit4@netapp.com>
-# Copyright (c) 2017, Michael Price <michael.price@netapp.com>
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without modification,
-# are permitted provided that the following conditions are met:
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above copyright notice,
-# this list of conditions and the following disclaimer in the documentation
-# and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# 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.
-
-'''
-common routines for um_info
-'''
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-
-import logging
-from ansible.module_utils.basic import missing_required_lib
-from ansible.module_utils._text import to_native
-
-try:
- from ansible.module_utils.ansible_release import __version__ as ansible_version
-except ImportError:
- ansible_version = 'unknown'
-
-COLLECTION_VERSION = "21.8.1"
-
-try:
- import requests
- HAS_REQUESTS = True
-except ImportError:
- HAS_REQUESTS = False
-
-ERROR_MSG = dict(
- no_cserver='This module is expected to run as cluster admin'
-)
-
-LOG = logging.getLogger(__name__)
-LOG_FILE = '/tmp/um_apis.log'
-
-
-def na_um_host_argument_spec():
-
- return dict(
- hostname=dict(required=True, type='str'),
- username=dict(required=True, type='str'),
- password=dict(required=True, type='str', no_log=True),
- validate_certs=dict(required=False, type='bool', default=True),
- http_port=dict(required=False, type='int'),
- feature_flags=dict(required=False, type='dict', default=dict()),
- max_records=dict(required=False, type='int')
- )
-
-
-def has_feature(module, feature_name):
- feature = get_feature(module, feature_name)
- if isinstance(feature, bool):
- return feature
- module.fail_json(msg="Error: expected bool type for feature flag: %s" % feature_name)
-
-
-def get_feature(module, feature_name):
- ''' if the user has configured the feature, use it
- otherwise, use our default
- '''
- default_flags = dict(
- strict_json_check=True, # if true, fail if response.content in not empty and is not valid json
- trace_apis=False, # if true, append REST requests/responses to LOG_FILE
-
- )
-
- if module.params['feature_flags'] is not None and feature_name in module.params['feature_flags']:
- return module.params['feature_flags'][feature_name]
- if feature_name in default_flags:
- return default_flags[feature_name]
- module.fail_json(msg="Internal error: unexpected feature flag: %s" % feature_name)
-
-
-class UMRestAPI(object):
- ''' send REST request and process response '''
- def __init__(self, module, timeout=60):
- self.module = module
- self.username = self.module.params['username']
- self.password = self.module.params['password']
- self.hostname = self.module.params['hostname']
- self.verify = self.module.params['validate_certs']
- self.max_records = self.module.params['max_records']
- self.timeout = timeout
- if self.module.params.get('http_port') is not None:
- self.url = 'https://%s:%d' % (self.hostname, self.module.params['http_port'])
- else:
- self.url = 'https://%s' % self.hostname
- self.errors = list()
- self.debug_logs = list()
- self.check_required_library()
- if has_feature(module, 'trace_apis'):
- logging.basicConfig(filename=LOG_FILE, level=logging.DEBUG, format='%(asctime)s %(levelname)-8s %(message)s')
-
- def check_required_library(self):
- if not HAS_REQUESTS:
- self.module.fail_json(msg=missing_required_lib('requests'))
-
- def get_records(self, message, api):
- records = list()
- try:
- if message['total_records'] > 0:
- records = message['records']
- if message['total_records'] != len(records):
- self.module.warn('Mismatch between received: %d and expected: %d records.' % (len(records), message['total_records']))
- except KeyError as exc:
- self.module.fail_json(msg='Error: unexpected response from %s: %s - expecting key: %s'
- % (api, message, to_native(exc)))
- return records
-
- def send_request(self, method, api, params, json=None, accept=None):
- ''' send http request and process response, including error conditions '''
- url = self.url + api
- status_code = None
- content = None
- json_dict = None
- json_error = None
- error_details = None
- headers = None
- if accept is not None:
- headers = dict()
- # accept is used to turn on/off HAL linking
- if accept is not None:
- headers['accept'] = accept
-
- def check_contents(response):
- '''json() may fail on an empty value, but it's OK if no response is expected.
- To avoid false positives, only report an issue when we expect to read a value.
- The first get will see it.
- '''
- if method == 'GET' and has_feature(self.module, 'strict_json_check'):
- contents = response.content
- if len(contents) > 0:
- raise ValueError("Expecting json, got: %s" % contents)
-
- def get_json(response):
- ''' extract json, and error message if present '''
- try:
- json = response.json()
- except ValueError:
- check_contents(response)
- return None, None
- error = json.get('error')
- return json, error
-
- self.log_debug('sending', repr(dict(method=method, url=url, verify=self.verify, params=params,
- timeout=self.timeout, json=json, headers=headers)))
- try:
- response = requests.request(method, url, verify=self.verify, auth=(self.username, self.password),
- params=params, timeout=self.timeout, json=json, headers=headers)
- content = response.content # for debug purposes
- status_code = response.status_code
- # If the response was successful, no Exception will be raised
- response.raise_for_status()
- json_dict, json_error = get_json(response)
- except requests.exceptions.HTTPError as err:
- __, json_error = get_json(response)
- if json_error is None:
- self.log_error(status_code, 'HTTP error: %s' % err)
- error_details = str(err)
- # If an error was reported in the json payload, it is handled below
- except requests.exceptions.ConnectionError as err:
- self.log_error(status_code, 'Connection error: %s' % err)
- error_details = str(err)
- except Exception as err:
- self.log_error(status_code, 'Other error: %s' % err)
- error_details = str(err)
- if json_error is not None:
- self.log_error(status_code, 'Endpoint error: %d: %s' % (status_code, json_error))
- error_details = json_error
- self.log_debug(status_code, content)
- return json_dict, error_details
-
- def get(self, api, params):
-
- def get_next_api(message):
- '''make sure _links is present, and href is present if next is present
- return api if next is present, None otherwise
- return error if _links or href are missing
- '''
- api, error = None, None
- if message is None or '_links' not in message:
- error = 'Expecting _links key in %s' % message
- elif 'next' in message['_links']:
- if 'href' in message['_links']['next']:
- api = message['_links']['next']['href']
- else:
- error = 'Expecting href key in %s' % message['_links']['next']
- return api, error
-
- method = 'GET'
- records = list()
- if self.max_records is not None:
- if params and 'max_records' not in params:
- params['max_records'] = self.max_records
- else:
- params = dict(max_records=self.max_records)
- api = '/api/%s' % api
-
- while api:
- message, error = self.send_request(method, api, params)
- if error:
- return message, error
- api, error = get_next_api(message)
- if error:
- return message, error
- if 'records' in message:
- records.extend(message['records'])
- params = None # already included in the next link
-
- if records:
- message['records'] = records
- return message, error
-
- def log_error(self, status_code, message):
- LOG.error("%s: %s", status_code, message)
- self.errors.append(message)
- self.debug_logs.append((status_code, message))
-
- def log_debug(self, status_code, content):
- LOG.debug("%s: %s", status_code, content)
- self.debug_logs.append((status_code, content))
diff --git a/ansible_collections/netapp/um_info/plugins/module_utils/netapp_module.py b/ansible_collections/netapp/um_info/plugins/module_utils/netapp_module.py
deleted file mode 100644
index f3b95800e..000000000
--- a/ansible_collections/netapp/um_info/plugins/module_utils/netapp_module.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# This code is part of Ansible, but is an independent component.
-# This particular file snippet, and this file snippet only, is BSD licensed.
-# Modules you write using this snippet, which is embedded dynamically by Ansible
-# still belong to the author of the module, and may assign their own license
-# to the complete work.
-#
-# Copyright (c) 2020, Laurent Nicolas <laurentn@netapp.com>
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without modification,
-# are permitted provided that the following conditions are met:
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above copyright notice,
-# this list of conditions and the following disclaimer in the documentation
-# and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# 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.
-
-''' Support class for NetApp ansible modules '''
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-
-
-class NetAppModule(object):
- '''
- Common class for NetApp modules
- set of support functions to derive actions based
- on the current state of the system, and a desired state
- '''
-
- def __init__(self):
- self.changed = False
- self.parameters = {}
-
- def set_parameters(self, ansible_params):
- self.parameters = dict()
- for param in ansible_params:
- if ansible_params[param] is not None:
- self.parameters[param] = ansible_params[param]
- return self.parameters
diff --git a/ansible_collections/netapp/um_info/plugins/modules/na_um_aggregates_info.py b/ansible_collections/netapp/um_info/plugins/modules/na_um_aggregates_info.py
deleted file mode 100644
index 10a34cfdf..000000000
--- a/ansible_collections/netapp/um_info/plugins/modules/na_um_aggregates_info.py
+++ /dev/null
@@ -1,163 +0,0 @@
-#!/usr/bin/python
-
-# (c) 2020, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-'''
-na_um_list_aggregates
-'''
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'certified'}
-
-
-DOCUMENTATION = '''
-module: na_um_aggregates_info
-short_description: NetApp Unified Manager list aggregates.
-extends_documentation_fragment:
- - netapp.um_info.netapp.um
-version_added: '20.5.0'
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-
-description:
-- List Aggregates on AIQUM.
-'''
-
-EXAMPLES = """
-- name: List Aggregates
- netapp.um_info.na_um_aggregates_info:
- hostname: "{{ hostname }}"
- username: "{{ username }}"
- password: "{{ password }}"
-"""
-
-RETURN = """
-records:
- description: Returns list of Aggregates information
- returned: always
- type: list
- sample: [{'node':
- {'_links':
- {'self':
- {'href': '...'
- }
- },
- 'uuid': '...',
- 'key': '...',
- 'name': '...'
- },
- 'snaplock_type': '...',
- 'uuid': '...',
- 'space':
- {'block_storage':
- {'available': ...,
- 'used': ...,
- 'size': ...
- },
- 'efficiency':
- {'savings': ...,
- 'logical_used': ...
- }
- },
- 'block_storage':
- {'hybrid_cache':
- {'enabled': ...,
- 'size': ...
- },
- 'primary':
- {'raid_size': ...,
- 'raid_type': '...'
- },
- 'mirror':
- {'state': '...'
- }
- },
- 'data_encryption':
- {'software_encryption_enabled': ...
- },
- 'cluster':
- {'_links':
- {'self':
- {'href': '...'
- }
- },
- 'uuid': '...',
- 'key': '...',
- 'name': '...'
- },
- 'state': '...',
- 'create_time': '...',
- '_links':
- {'self':
- {'href': '...'
- }
- },
- 'key': '...',
- 'type': '...',
- 'name': '...'
- }
- ]
-"""
-
-from ansible.module_utils.basic import AnsibleModule
-import ansible_collections.netapp.um_info.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.um_info.plugins.module_utils.netapp_module import NetAppModule
-from ansible_collections.netapp.um_info.plugins.module_utils.netapp import UMRestAPI
-
-
-class NetAppUMAggregate(object):
- ''' aggregates initialize and class methods '''
-
- def __init__(self):
- self.argument_spec = netapp_utils.na_um_host_argument_spec()
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- supports_check_mode=True
- )
-
- self.na_helper = NetAppModule()
- self.parameters = self.na_helper.set_parameters(self.module.params)
-
- self.rest_api = UMRestAPI(self.module)
-
- def get_aggregates(self):
- """
- Fetch details of aggregates.
- :return:
- Dictionary of current details if aggregates found
- None if aggregates is not found
- """
- data = {}
- api = "datacenter/storage/aggregates?order_by=performance_capacity.used"
- message, error = self.rest_api.get(api, data)
- if error:
- self.module.fail_json(msg=error)
- return self.rest_api.get_records(message, api)
-
- def apply(self):
- """
- Apply action to the aggregates listing
- :return: None
- """
- current = self.get_aggregates()
- if current is not None:
- self.na_helper.changed = True
- self.module.exit_json(changed=self.na_helper.changed, msg=current)
-
-
-def main():
- """
- Create Aggregate class instance and invoke apply
- :return: None
- """
- list_aggregates_obj = NetAppUMAggregate()
- list_aggregates_obj.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/um_info/plugins/modules/na_um_clusters_info.py b/ansible_collections/netapp/um_info/plugins/modules/na_um_clusters_info.py
deleted file mode 100644
index 60baa7a48..000000000
--- a/ansible_collections/netapp/um_info/plugins/modules/na_um_clusters_info.py
+++ /dev/null
@@ -1,152 +0,0 @@
-#!/usr/bin/python
-
-# (c) 2020, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-'''
-na_um_list_clusters
-'''
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'certified'}
-
-
-DOCUMENTATION = '''
-module: na_um_clusters_info
-short_description: NetApp Unified Manager list cluster.
-extends_documentation_fragment:
- - netapp.um_info.netapp.um
-version_added: '20.5.0'
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-
-description:
-- List Cluster on AIQUM.
-'''
-
-EXAMPLES = """
-- name: List Clusters
- netapp.um_info.na_um_clusters_info:
- hostname: "{{ hostname }}"
- username: "{{ username }}"
- password: "{{ password }}"
-"""
-
-RETURN = """
-records:
- description: Returns list of Clusters information
- returned: always
- type: list
- sample: [{
- 'name': '...',
- 'version':
- {
- 'generation': ...,
- 'major': ...,
- 'full': '...',
- 'minor': ...
- },
- 'management_ip': '...',
- 'contact': ...,
- '_links':
- {
- 'self':
- {
- 'href': '...'
- }
- },
- 'location': '...',
- 'key': '',
- 'nodes':
- [
- {
- 'uptime': ...,
- 'uuid': '...',
- 'version':
- {
- 'generation': ...,
- 'major': ...,
- 'full': '...',
- 'minor': ...
- },
- '_links':
- {
- 'self':
- {
- 'href': '...'
- }
- },
- 'location': '...',
- 'key': '...',
- 'serial_number': '...',
- 'model': '...',
- 'name': '...'
- }
- ],
- 'isSanOptimized': ...,
- 'uuid': '...'
- }
- ]
-"""
-
-from ansible.module_utils.basic import AnsibleModule
-import ansible_collections.netapp.um_info.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.um_info.plugins.module_utils.netapp_module import NetAppModule
-from ansible_collections.netapp.um_info.plugins.module_utils.netapp import UMRestAPI
-
-
-class NetAppUMCluster(object):
- ''' cluster initialize and class methods '''
-
- def __init__(self):
- self.argument_spec = netapp_utils.na_um_host_argument_spec()
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- supports_check_mode=True
- )
-
- self.na_helper = NetAppModule()
- self.parameters = self.na_helper.set_parameters(self.module.params)
-
- self.rest_api = UMRestAPI(self.module)
-
- def get_clusters(self):
- """
- Fetch details of clusters.
- :return:
- Dictionary of current details if clusters found
- None if clusters is not found
- """
- data = {}
- api = "datacenter/cluster/clusters"
- message, error = self.rest_api.get(api, data)
- if error:
- self.module.fail_json(msg=error)
- return self.rest_api.get_records(message, api)
-
- def apply(self):
- """
- Apply action to the cluster listing
- :return: None
- """
- current = self.get_clusters()
- if current is not None:
- self.na_helper.changed = True
- self.module.exit_json(changed=self.na_helper.changed, msg=current)
-
-
-def main():
- """
- Create Cluster class instance and invoke apply
- :return: None
- """
- list_cluster_obj = NetAppUMCluster()
- list_cluster_obj.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/um_info/plugins/modules/na_um_list_aggregates.py b/ansible_collections/netapp/um_info/plugins/modules/na_um_list_aggregates.py
deleted file mode 100644
index 10a34cfdf..000000000
--- a/ansible_collections/netapp/um_info/plugins/modules/na_um_list_aggregates.py
+++ /dev/null
@@ -1,163 +0,0 @@
-#!/usr/bin/python
-
-# (c) 2020, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-'''
-na_um_list_aggregates
-'''
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'certified'}
-
-
-DOCUMENTATION = '''
-module: na_um_aggregates_info
-short_description: NetApp Unified Manager list aggregates.
-extends_documentation_fragment:
- - netapp.um_info.netapp.um
-version_added: '20.5.0'
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-
-description:
-- List Aggregates on AIQUM.
-'''
-
-EXAMPLES = """
-- name: List Aggregates
- netapp.um_info.na_um_aggregates_info:
- hostname: "{{ hostname }}"
- username: "{{ username }}"
- password: "{{ password }}"
-"""
-
-RETURN = """
-records:
- description: Returns list of Aggregates information
- returned: always
- type: list
- sample: [{'node':
- {'_links':
- {'self':
- {'href': '...'
- }
- },
- 'uuid': '...',
- 'key': '...',
- 'name': '...'
- },
- 'snaplock_type': '...',
- 'uuid': '...',
- 'space':
- {'block_storage':
- {'available': ...,
- 'used': ...,
- 'size': ...
- },
- 'efficiency':
- {'savings': ...,
- 'logical_used': ...
- }
- },
- 'block_storage':
- {'hybrid_cache':
- {'enabled': ...,
- 'size': ...
- },
- 'primary':
- {'raid_size': ...,
- 'raid_type': '...'
- },
- 'mirror':
- {'state': '...'
- }
- },
- 'data_encryption':
- {'software_encryption_enabled': ...
- },
- 'cluster':
- {'_links':
- {'self':
- {'href': '...'
- }
- },
- 'uuid': '...',
- 'key': '...',
- 'name': '...'
- },
- 'state': '...',
- 'create_time': '...',
- '_links':
- {'self':
- {'href': '...'
- }
- },
- 'key': '...',
- 'type': '...',
- 'name': '...'
- }
- ]
-"""
-
-from ansible.module_utils.basic import AnsibleModule
-import ansible_collections.netapp.um_info.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.um_info.plugins.module_utils.netapp_module import NetAppModule
-from ansible_collections.netapp.um_info.plugins.module_utils.netapp import UMRestAPI
-
-
-class NetAppUMAggregate(object):
- ''' aggregates initialize and class methods '''
-
- def __init__(self):
- self.argument_spec = netapp_utils.na_um_host_argument_spec()
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- supports_check_mode=True
- )
-
- self.na_helper = NetAppModule()
- self.parameters = self.na_helper.set_parameters(self.module.params)
-
- self.rest_api = UMRestAPI(self.module)
-
- def get_aggregates(self):
- """
- Fetch details of aggregates.
- :return:
- Dictionary of current details if aggregates found
- None if aggregates is not found
- """
- data = {}
- api = "datacenter/storage/aggregates?order_by=performance_capacity.used"
- message, error = self.rest_api.get(api, data)
- if error:
- self.module.fail_json(msg=error)
- return self.rest_api.get_records(message, api)
-
- def apply(self):
- """
- Apply action to the aggregates listing
- :return: None
- """
- current = self.get_aggregates()
- if current is not None:
- self.na_helper.changed = True
- self.module.exit_json(changed=self.na_helper.changed, msg=current)
-
-
-def main():
- """
- Create Aggregate class instance and invoke apply
- :return: None
- """
- list_aggregates_obj = NetAppUMAggregate()
- list_aggregates_obj.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/um_info/plugins/modules/na_um_list_clusters.py b/ansible_collections/netapp/um_info/plugins/modules/na_um_list_clusters.py
deleted file mode 100644
index 60baa7a48..000000000
--- a/ansible_collections/netapp/um_info/plugins/modules/na_um_list_clusters.py
+++ /dev/null
@@ -1,152 +0,0 @@
-#!/usr/bin/python
-
-# (c) 2020, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-'''
-na_um_list_clusters
-'''
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'certified'}
-
-
-DOCUMENTATION = '''
-module: na_um_clusters_info
-short_description: NetApp Unified Manager list cluster.
-extends_documentation_fragment:
- - netapp.um_info.netapp.um
-version_added: '20.5.0'
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-
-description:
-- List Cluster on AIQUM.
-'''
-
-EXAMPLES = """
-- name: List Clusters
- netapp.um_info.na_um_clusters_info:
- hostname: "{{ hostname }}"
- username: "{{ username }}"
- password: "{{ password }}"
-"""
-
-RETURN = """
-records:
- description: Returns list of Clusters information
- returned: always
- type: list
- sample: [{
- 'name': '...',
- 'version':
- {
- 'generation': ...,
- 'major': ...,
- 'full': '...',
- 'minor': ...
- },
- 'management_ip': '...',
- 'contact': ...,
- '_links':
- {
- 'self':
- {
- 'href': '...'
- }
- },
- 'location': '...',
- 'key': '',
- 'nodes':
- [
- {
- 'uptime': ...,
- 'uuid': '...',
- 'version':
- {
- 'generation': ...,
- 'major': ...,
- 'full': '...',
- 'minor': ...
- },
- '_links':
- {
- 'self':
- {
- 'href': '...'
- }
- },
- 'location': '...',
- 'key': '...',
- 'serial_number': '...',
- 'model': '...',
- 'name': '...'
- }
- ],
- 'isSanOptimized': ...,
- 'uuid': '...'
- }
- ]
-"""
-
-from ansible.module_utils.basic import AnsibleModule
-import ansible_collections.netapp.um_info.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.um_info.plugins.module_utils.netapp_module import NetAppModule
-from ansible_collections.netapp.um_info.plugins.module_utils.netapp import UMRestAPI
-
-
-class NetAppUMCluster(object):
- ''' cluster initialize and class methods '''
-
- def __init__(self):
- self.argument_spec = netapp_utils.na_um_host_argument_spec()
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- supports_check_mode=True
- )
-
- self.na_helper = NetAppModule()
- self.parameters = self.na_helper.set_parameters(self.module.params)
-
- self.rest_api = UMRestAPI(self.module)
-
- def get_clusters(self):
- """
- Fetch details of clusters.
- :return:
- Dictionary of current details if clusters found
- None if clusters is not found
- """
- data = {}
- api = "datacenter/cluster/clusters"
- message, error = self.rest_api.get(api, data)
- if error:
- self.module.fail_json(msg=error)
- return self.rest_api.get_records(message, api)
-
- def apply(self):
- """
- Apply action to the cluster listing
- :return: None
- """
- current = self.get_clusters()
- if current is not None:
- self.na_helper.changed = True
- self.module.exit_json(changed=self.na_helper.changed, msg=current)
-
-
-def main():
- """
- Create Cluster class instance and invoke apply
- :return: None
- """
- list_cluster_obj = NetAppUMCluster()
- list_cluster_obj.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/um_info/plugins/modules/na_um_list_nodes.py b/ansible_collections/netapp/um_info/plugins/modules/na_um_list_nodes.py
deleted file mode 100644
index 27e81ec2e..000000000
--- a/ansible_collections/netapp/um_info/plugins/modules/na_um_list_nodes.py
+++ /dev/null
@@ -1,145 +0,0 @@
-#!/usr/bin/python
-
-# (c) 2020, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-'''
-na_um_list_nodes
-'''
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'certified'}
-
-
-DOCUMENTATION = '''
-module: na_um_nodes_info
-short_description: NetApp Unified Manager list nodes.
-extends_documentation_fragment:
- - netapp.um_info.netapp.um
-version_added: '20.5.0'
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-
-description:
-- List Nodes on AIQUM.
-'''
-
-EXAMPLES = """
-- name: List Nodes
- netapp.um_info.na_um_nodes_info:
- hostname: "{{ hostname }}"
- username: "{{ username }}"
- password: "{{ password }}"
-"""
-
-RETURN = """
-records:
- description: Returns list of Nodes information
- returned: always
- type: list
- sample: [{'allFlashOptimized': ...,
- 'uptime': ...,
- 'vendor': '...',
- 'uuid': '...',
- 'nvramid': '...',
- '_links':
- {'self':
- {'href': '...'
- }
- },
- 'cluster':
- {'_links':
- {'self':
- {'href': '...'
- }
- },
- 'uuid': '...',
- 'key': '...',
- 'name': '...'
- },
- 'version':
- {'generation': ...,
- 'major': ...,
- 'full': '...',
- 'minor': ...
- },
- 'systemid': '...',
- 'location': '...',
- 'key': ...',
- 'is_all_flash_optimized': ...,
- 'serial_number': '...',
- 'model': '...',
- 'ha':
- {'partners':
- [{'_links': {},
- 'uuid': ...,
- 'key': ...,
- 'name': ...
- }]
- },
- 'health': ...,
- 'name': '...'
- }]
-"""
-
-from ansible.module_utils.basic import AnsibleModule
-import ansible_collections.netapp.um_info.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.um_info.plugins.module_utils.netapp_module import NetAppModule
-from ansible_collections.netapp.um_info.plugins.module_utils.netapp import UMRestAPI
-
-
-class NetAppUMNode(object):
- ''' nodes initialize and class methods '''
-
- def __init__(self):
- self.argument_spec = netapp_utils.na_um_host_argument_spec()
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- supports_check_mode=True
- )
-
- self.na_helper = NetAppModule()
- self.parameters = self.na_helper.set_parameters(self.module.params)
-
- self.rest_api = UMRestAPI(self.module)
-
- def get_nodes(self):
- """
- Fetch details of nodes.
- :return:
- Dictionary of current details if nodes found
- None if nodes is not found
- """
- data = {}
- api = "datacenter/cluster/nodes?order_by=performance_capacity.used"
- message, error = self.rest_api.get(api, data)
- if error:
- self.module.fail_json(msg=error)
- return self.rest_api.get_records(message, api)
-
- def apply(self):
- """
- Apply action to the nodes listing
- :return: None
- """
- current = self.get_nodes()
- if current is not None:
- self.na_helper.changed = True
- self.module.exit_json(changed=self.na_helper.changed, msg=current)
-
-
-def main():
- """
- Create Node class instance and invoke apply
- :return: None
- """
- list_nodes_obj = NetAppUMNode()
- list_nodes_obj.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/um_info/plugins/modules/na_um_list_svms.py b/ansible_collections/netapp/um_info/plugins/modules/na_um_list_svms.py
deleted file mode 100644
index 2722e9ef6..000000000
--- a/ansible_collections/netapp/um_info/plugins/modules/na_um_list_svms.py
+++ /dev/null
@@ -1,174 +0,0 @@
-#!/usr/bin/python
-
-# (c) 2020, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-'''
-na_um_list_svms
-'''
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'certified'}
-
-
-DOCUMENTATION = '''
-module: na_um_svms_info
-short_description: NetApp Unified Manager list svms.
-extends_documentation_fragment:
- - netapp.um_info.netapp.um
-version_added: '20.5.0'
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-
-description:
-- List SVMs on AIQUM.
-'''
-
-EXAMPLES = """
-- name: List SVMs
- netapp.um_info.na_um_svms_info:
- hostname: "{{ hostname }}"
- username: "{{ username }}"
- password: "{{ password }}"
-"""
-
-RETURN = """
-records:
- description: Returns list of SVMs information
- returned: always
- type: list
- sample: [{'fcp':
- {'enabled': ...
- },
- 'dns': ...,
- 'snapshot_policy':
- {'_links': {},
- 'uuid': ...,
- 'key': '...',
- 'name': '...'
- },
- 'language': '...',
- 'subtype': 'default',
- 'aggregates':
- [{'_links':
- {'self':
- {'href': '...'
- }
- },
- 'uuid': '...',
- 'key': '...',
- 'name': '...'
- }],
- 'nvme':
- {'enabled': ...
- },
- 'ipspace':
- {'_links': {},
- 'uuid': '...',
- 'key': '...',
- 'name': '...'
- },
- 'uuid': '...',
- 'cluster':
- {'_links':
- {'self':
- {'href': '...'
- }
- },
- 'uuid': '...',
- 'key': '...',
- 'name': '...'
- },
- 'state': '...',
- '_links':
- {'self':
- {'href': '...'
- }
- },
- 'key': '...',
- 'ldap':
- {'enabled': ...
- },
- 'nis':
- {'domain': ...,
- 'enabled': ...,
- 'servers': ...
- },
- 'cifs':
- {'enabled': ...,
- 'name': ...,
- 'ad_domain':
- {'fqdn': ...
- }
- },
- 'iscsi':
- {'enabled': ...
- },
- 'nfs':
- {'enabled': ...
- },
- 'name': '...'
- }]
-"""
-
-from ansible.module_utils.basic import AnsibleModule
-import ansible_collections.netapp.um_info.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.um_info.plugins.module_utils.netapp_module import NetAppModule
-from ansible_collections.netapp.um_info.plugins.module_utils.netapp import UMRestAPI
-
-
-class NetAppUMSVM(object):
- ''' svms initialize and class methods '''
-
- def __init__(self):
- self.argument_spec = netapp_utils.na_um_host_argument_spec()
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- supports_check_mode=True
- )
-
- self.na_helper = NetAppModule()
- self.parameters = self.na_helper.set_parameters(self.module.params)
-
- self.rest_api = UMRestAPI(self.module)
-
- def get_svms(self):
- """
- Fetch details of svms.
- :return:
- Dictionary of current details if svms found
- None if svms is not found
- """
- data = {}
- api = "datacenter/svm/svms"
- message, error = self.rest_api.get(api, data)
- if error:
- self.module.fail_json(msg=error)
- return self.rest_api.get_records(message, api)
-
- def apply(self):
- """
- Apply action to the svms listing
- :return: None
- """
- current = self.get_svms()
- if current is not None:
- self.na_helper.changed = True
- self.module.exit_json(changed=self.na_helper.changed, msg=current)
-
-
-def main():
- """
- Create SVM class instance and invoke apply
- :return: None
- """
- list_svms_obj = NetAppUMSVM()
- list_svms_obj.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/um_info/plugins/modules/na_um_list_volumes.py b/ansible_collections/netapp/um_info/plugins/modules/na_um_list_volumes.py
deleted file mode 100644
index 099213226..000000000
--- a/ansible_collections/netapp/um_info/plugins/modules/na_um_list_volumes.py
+++ /dev/null
@@ -1,133 +0,0 @@
-#!/usr/bin/python
-
-# (c) 2020, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-'''
-na_um_list_volumes
-'''
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'certified'}
-
-
-DOCUMENTATION = '''
-module: na_um_volumes_info
-short_description: NetApp Unified Manager list volumes.
-extends_documentation_fragment:
- - netapp.um_info.netapp.um
-version_added: '20.6.0'
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-
-description:
-- List Volumes on AIQUM.
-'''
-
-EXAMPLES = """
-- name: List Volumes
- netapp.um_info.na_um_volumes_info:
- hostname: "{{ hostname }}"
- username: "{{ username }}"
- password: "{{ password }}"
-"""
-
-RETURN = """
-records:
- description: Returns list of Volumes information
- returned: always
- type: list
- sample: [{'style': '...',
- 'svm':
- {'_links':
- {'self': {...}
- },
- '...'
- },
- 'qos': {...},
- 'name': '...',
- 'language': '...',
- 'space': {...},
- 'aggregates':
- [
- {...}
- ],
- 'tiering': {...},
- 'autosize': {...},
- 'cluster': {...},
- 'state': '...',
- 'create_time': '...',
- '_links':
- {'self':
- {'href': '...'
- }
- },
- 'key': '...',
- 'snapmirror': {...},
- 'snapshot_policy': {...},
- 'type': '...',
- 'uuid': '...'
- }]
-"""
-
-from ansible.module_utils.basic import AnsibleModule
-import ansible_collections.netapp.um_info.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.um_info.plugins.module_utils.netapp_module import NetAppModule
-from ansible_collections.netapp.um_info.plugins.module_utils.netapp import UMRestAPI
-
-
-class NetAppUMVolume(object):
- ''' volumes initialize and class methods '''
-
- def __init__(self):
- self.argument_spec = netapp_utils.na_um_host_argument_spec()
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- supports_check_mode=True
- )
-
- self.na_helper = NetAppModule()
- self.parameters = self.na_helper.set_parameters(self.module.params)
-
- self.rest_api = UMRestAPI(self.module)
-
- def get_volumes(self):
- """
- Fetch details of volumes.
- :return:
- Dictionary of current details if volumes found
- None if volumes is not found
- """
- data = {}
- api = "datacenter/storage/volumes"
- message, error = self.rest_api.get(api, data)
- if error:
- self.module.fail_json(msg=error)
- return self.rest_api.get_records(message, api)
-
- def apply(self):
- """
- Apply action to the volumes listing
- :return: None
- """
- current = self.get_volumes()
- if current is not None:
- self.na_helper.changed = True
- self.module.exit_json(changed=self.na_helper.changed, msg=current)
-
-
-def main():
- """
- Create Volume class instance and invoke apply
- :return: None
- """
- list_volumes_obj = NetAppUMVolume()
- list_volumes_obj.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/um_info/plugins/modules/na_um_nodes_info.py b/ansible_collections/netapp/um_info/plugins/modules/na_um_nodes_info.py
deleted file mode 100644
index 27e81ec2e..000000000
--- a/ansible_collections/netapp/um_info/plugins/modules/na_um_nodes_info.py
+++ /dev/null
@@ -1,145 +0,0 @@
-#!/usr/bin/python
-
-# (c) 2020, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-'''
-na_um_list_nodes
-'''
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'certified'}
-
-
-DOCUMENTATION = '''
-module: na_um_nodes_info
-short_description: NetApp Unified Manager list nodes.
-extends_documentation_fragment:
- - netapp.um_info.netapp.um
-version_added: '20.5.0'
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-
-description:
-- List Nodes on AIQUM.
-'''
-
-EXAMPLES = """
-- name: List Nodes
- netapp.um_info.na_um_nodes_info:
- hostname: "{{ hostname }}"
- username: "{{ username }}"
- password: "{{ password }}"
-"""
-
-RETURN = """
-records:
- description: Returns list of Nodes information
- returned: always
- type: list
- sample: [{'allFlashOptimized': ...,
- 'uptime': ...,
- 'vendor': '...',
- 'uuid': '...',
- 'nvramid': '...',
- '_links':
- {'self':
- {'href': '...'
- }
- },
- 'cluster':
- {'_links':
- {'self':
- {'href': '...'
- }
- },
- 'uuid': '...',
- 'key': '...',
- 'name': '...'
- },
- 'version':
- {'generation': ...,
- 'major': ...,
- 'full': '...',
- 'minor': ...
- },
- 'systemid': '...',
- 'location': '...',
- 'key': ...',
- 'is_all_flash_optimized': ...,
- 'serial_number': '...',
- 'model': '...',
- 'ha':
- {'partners':
- [{'_links': {},
- 'uuid': ...,
- 'key': ...,
- 'name': ...
- }]
- },
- 'health': ...,
- 'name': '...'
- }]
-"""
-
-from ansible.module_utils.basic import AnsibleModule
-import ansible_collections.netapp.um_info.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.um_info.plugins.module_utils.netapp_module import NetAppModule
-from ansible_collections.netapp.um_info.plugins.module_utils.netapp import UMRestAPI
-
-
-class NetAppUMNode(object):
- ''' nodes initialize and class methods '''
-
- def __init__(self):
- self.argument_spec = netapp_utils.na_um_host_argument_spec()
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- supports_check_mode=True
- )
-
- self.na_helper = NetAppModule()
- self.parameters = self.na_helper.set_parameters(self.module.params)
-
- self.rest_api = UMRestAPI(self.module)
-
- def get_nodes(self):
- """
- Fetch details of nodes.
- :return:
- Dictionary of current details if nodes found
- None if nodes is not found
- """
- data = {}
- api = "datacenter/cluster/nodes?order_by=performance_capacity.used"
- message, error = self.rest_api.get(api, data)
- if error:
- self.module.fail_json(msg=error)
- return self.rest_api.get_records(message, api)
-
- def apply(self):
- """
- Apply action to the nodes listing
- :return: None
- """
- current = self.get_nodes()
- if current is not None:
- self.na_helper.changed = True
- self.module.exit_json(changed=self.na_helper.changed, msg=current)
-
-
-def main():
- """
- Create Node class instance and invoke apply
- :return: None
- """
- list_nodes_obj = NetAppUMNode()
- list_nodes_obj.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/um_info/plugins/modules/na_um_svms_info.py b/ansible_collections/netapp/um_info/plugins/modules/na_um_svms_info.py
deleted file mode 100644
index 2722e9ef6..000000000
--- a/ansible_collections/netapp/um_info/plugins/modules/na_um_svms_info.py
+++ /dev/null
@@ -1,174 +0,0 @@
-#!/usr/bin/python
-
-# (c) 2020, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-'''
-na_um_list_svms
-'''
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'certified'}
-
-
-DOCUMENTATION = '''
-module: na_um_svms_info
-short_description: NetApp Unified Manager list svms.
-extends_documentation_fragment:
- - netapp.um_info.netapp.um
-version_added: '20.5.0'
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-
-description:
-- List SVMs on AIQUM.
-'''
-
-EXAMPLES = """
-- name: List SVMs
- netapp.um_info.na_um_svms_info:
- hostname: "{{ hostname }}"
- username: "{{ username }}"
- password: "{{ password }}"
-"""
-
-RETURN = """
-records:
- description: Returns list of SVMs information
- returned: always
- type: list
- sample: [{'fcp':
- {'enabled': ...
- },
- 'dns': ...,
- 'snapshot_policy':
- {'_links': {},
- 'uuid': ...,
- 'key': '...',
- 'name': '...'
- },
- 'language': '...',
- 'subtype': 'default',
- 'aggregates':
- [{'_links':
- {'self':
- {'href': '...'
- }
- },
- 'uuid': '...',
- 'key': '...',
- 'name': '...'
- }],
- 'nvme':
- {'enabled': ...
- },
- 'ipspace':
- {'_links': {},
- 'uuid': '...',
- 'key': '...',
- 'name': '...'
- },
- 'uuid': '...',
- 'cluster':
- {'_links':
- {'self':
- {'href': '...'
- }
- },
- 'uuid': '...',
- 'key': '...',
- 'name': '...'
- },
- 'state': '...',
- '_links':
- {'self':
- {'href': '...'
- }
- },
- 'key': '...',
- 'ldap':
- {'enabled': ...
- },
- 'nis':
- {'domain': ...,
- 'enabled': ...,
- 'servers': ...
- },
- 'cifs':
- {'enabled': ...,
- 'name': ...,
- 'ad_domain':
- {'fqdn': ...
- }
- },
- 'iscsi':
- {'enabled': ...
- },
- 'nfs':
- {'enabled': ...
- },
- 'name': '...'
- }]
-"""
-
-from ansible.module_utils.basic import AnsibleModule
-import ansible_collections.netapp.um_info.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.um_info.plugins.module_utils.netapp_module import NetAppModule
-from ansible_collections.netapp.um_info.plugins.module_utils.netapp import UMRestAPI
-
-
-class NetAppUMSVM(object):
- ''' svms initialize and class methods '''
-
- def __init__(self):
- self.argument_spec = netapp_utils.na_um_host_argument_spec()
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- supports_check_mode=True
- )
-
- self.na_helper = NetAppModule()
- self.parameters = self.na_helper.set_parameters(self.module.params)
-
- self.rest_api = UMRestAPI(self.module)
-
- def get_svms(self):
- """
- Fetch details of svms.
- :return:
- Dictionary of current details if svms found
- None if svms is not found
- """
- data = {}
- api = "datacenter/svm/svms"
- message, error = self.rest_api.get(api, data)
- if error:
- self.module.fail_json(msg=error)
- return self.rest_api.get_records(message, api)
-
- def apply(self):
- """
- Apply action to the svms listing
- :return: None
- """
- current = self.get_svms()
- if current is not None:
- self.na_helper.changed = True
- self.module.exit_json(changed=self.na_helper.changed, msg=current)
-
-
-def main():
- """
- Create SVM class instance and invoke apply
- :return: None
- """
- list_svms_obj = NetAppUMSVM()
- list_svms_obj.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/um_info/plugins/modules/na_um_volumes_info.py b/ansible_collections/netapp/um_info/plugins/modules/na_um_volumes_info.py
deleted file mode 100644
index 099213226..000000000
--- a/ansible_collections/netapp/um_info/plugins/modules/na_um_volumes_info.py
+++ /dev/null
@@ -1,133 +0,0 @@
-#!/usr/bin/python
-
-# (c) 2020, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-'''
-na_um_list_volumes
-'''
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'certified'}
-
-
-DOCUMENTATION = '''
-module: na_um_volumes_info
-short_description: NetApp Unified Manager list volumes.
-extends_documentation_fragment:
- - netapp.um_info.netapp.um
-version_added: '20.6.0'
-author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
-
-description:
-- List Volumes on AIQUM.
-'''
-
-EXAMPLES = """
-- name: List Volumes
- netapp.um_info.na_um_volumes_info:
- hostname: "{{ hostname }}"
- username: "{{ username }}"
- password: "{{ password }}"
-"""
-
-RETURN = """
-records:
- description: Returns list of Volumes information
- returned: always
- type: list
- sample: [{'style': '...',
- 'svm':
- {'_links':
- {'self': {...}
- },
- '...'
- },
- 'qos': {...},
- 'name': '...',
- 'language': '...',
- 'space': {...},
- 'aggregates':
- [
- {...}
- ],
- 'tiering': {...},
- 'autosize': {...},
- 'cluster': {...},
- 'state': '...',
- 'create_time': '...',
- '_links':
- {'self':
- {'href': '...'
- }
- },
- 'key': '...',
- 'snapmirror': {...},
- 'snapshot_policy': {...},
- 'type': '...',
- 'uuid': '...'
- }]
-"""
-
-from ansible.module_utils.basic import AnsibleModule
-import ansible_collections.netapp.um_info.plugins.module_utils.netapp as netapp_utils
-from ansible_collections.netapp.um_info.plugins.module_utils.netapp_module import NetAppModule
-from ansible_collections.netapp.um_info.plugins.module_utils.netapp import UMRestAPI
-
-
-class NetAppUMVolume(object):
- ''' volumes initialize and class methods '''
-
- def __init__(self):
- self.argument_spec = netapp_utils.na_um_host_argument_spec()
- self.module = AnsibleModule(
- argument_spec=self.argument_spec,
- supports_check_mode=True
- )
-
- self.na_helper = NetAppModule()
- self.parameters = self.na_helper.set_parameters(self.module.params)
-
- self.rest_api = UMRestAPI(self.module)
-
- def get_volumes(self):
- """
- Fetch details of volumes.
- :return:
- Dictionary of current details if volumes found
- None if volumes is not found
- """
- data = {}
- api = "datacenter/storage/volumes"
- message, error = self.rest_api.get(api, data)
- if error:
- self.module.fail_json(msg=error)
- return self.rest_api.get_records(message, api)
-
- def apply(self):
- """
- Apply action to the volumes listing
- :return: None
- """
- current = self.get_volumes()
- if current is not None:
- self.na_helper.changed = True
- self.module.exit_json(changed=self.na_helper.changed, msg=current)
-
-
-def main():
- """
- Create Volume class instance and invoke apply
- :return: None
- """
- list_volumes_obj = NetAppUMVolume()
- list_volumes_obj.apply()
-
-
-if __name__ == '__main__':
- main()
diff --git a/ansible_collections/netapp/um_info/requirements.txt b/ansible_collections/netapp/um_info/requirements.txt
deleted file mode 100644
index 663bd1f6a..000000000
--- a/ansible_collections/netapp/um_info/requirements.txt
+++ /dev/null
@@ -1 +0,0 @@
-requests \ No newline at end of file
diff --git a/ansible_collections/netapp/um_info/tests/unit/compat/__init__.py b/ansible_collections/netapp/um_info/tests/unit/compat/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/ansible_collections/netapp/um_info/tests/unit/compat/__init__.py
+++ /dev/null
diff --git a/ansible_collections/netapp/um_info/tests/unit/compat/builtins.py b/ansible_collections/netapp/um_info/tests/unit/compat/builtins.py
deleted file mode 100644
index f60ee6782..000000000
--- a/ansible_collections/netapp/um_info/tests/unit/compat/builtins.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# (c) 2014, Toshio Kuratomi <tkuratomi@ansible.com>
-#
-# 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 <http://www.gnu.org/licenses/>.
-
-# Make coding more python3-ish
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-
-#
-# Compat for python2.7
-#
-
-# One unittest needs to import builtins via __import__() so we need to have
-# the string that represents it
-try:
- import __builtin__
-except ImportError:
- BUILTINS = 'builtins'
-else:
- BUILTINS = '__builtin__'
diff --git a/ansible_collections/netapp/um_info/tests/unit/compat/mock.py b/ansible_collections/netapp/um_info/tests/unit/compat/mock.py
deleted file mode 100644
index 0972cd2e8..000000000
--- a/ansible_collections/netapp/um_info/tests/unit/compat/mock.py
+++ /dev/null
@@ -1,122 +0,0 @@
-# (c) 2014, Toshio Kuratomi <tkuratomi@ansible.com>
-#
-# 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 <http://www.gnu.org/licenses/>.
-
-# 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/netapp/um_info/tests/unit/compat/unittest.py b/ansible_collections/netapp/um_info/tests/unit/compat/unittest.py
deleted file mode 100644
index 73a20cf8c..000000000
--- a/ansible_collections/netapp/um_info/tests/unit/compat/unittest.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# (c) 2014, Toshio Kuratomi <tkuratomi@ansible.com>
-#
-# 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 <http://www.gnu.org/licenses/>.
-
-# 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
-
-import pytest
-
-# 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')
-
- class TestCase:
- """ skip everything """
- pytestmark = pytest.mark.skip('Skipping Unit Tests on 2.6 as unittest2 may not be available')
-else:
- from unittest import *
diff --git a/ansible_collections/netapp/um_info/tests/unit/plugins/module_utils/test_netapp.py b/ansible_collections/netapp/um_info/tests/unit/plugins/module_utils/test_netapp.py
deleted file mode 100644
index eefca9041..000000000
--- a/ansible_collections/netapp/um_info/tests/unit/plugins/module_utils/test_netapp.py
+++ /dev/null
@@ -1,236 +0,0 @@
-# Copyright (c) 2018 NetApp
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-''' unit tests for module_utils netapp.py '''
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-
-import json
-import os.path
-import sys
-import tempfile
-
-import pytest
-
-from ansible.module_utils.ansible_release import __version__ as ansible_version
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-from ansible_collections.netapp.um_info.plugins.module_utils.netapp import COLLECTION_VERSION
-from ansible_collections.netapp.um_info.tests.unit.compat.mock import patch
-
-import ansible_collections.netapp.um_info.plugins.module_utils.netapp as netapp_utils
-
-
-if not netapp_utils.HAS_REQUESTS and sys.version_info < (2, 7):
- pytestmark = pytest.mark.skip('Skipping Unit Tests on 2.6 as requests is not be available')
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-SRR = {
- # common responses
- 'is_rest': (200, {}, None),
- 'is_zapi': (400, {}, "Unreachable"),
- # 'empty_good': ({}, None),
- 'empty_good': (dict(_links=dict(self='me')), None),
- 'get_next': (dict(_links=dict(self='me', next=dict(href='next_records'))), None),
- 'get_data': (dict(_links=dict(self='me'), records=['data1', 'data2']), None),
- 'end_of_sequence': (None, "Unexpected call to send_request"),
- 'generic_error': (None, "Expected error"),
- 'no__links_error': (dict(), None),
- 'no_href_error': (dict(_links=dict(self='me', next=dict())), None),
-}
-
-
-def mock_args(feature_flags=None):
- args = {
- 'hostname': 'test',
- 'username': 'test_user',
- 'password': 'test_pass!',
- }
- if feature_flags is not None:
- args.update({'feature_flags': feature_flags})
- return args
-
-
-def create_module(args):
- argument_spec = netapp_utils.na_um_host_argument_spec()
- set_module_args(args)
- module = basic.AnsibleModule(argument_spec)
- return module
-
-
-def create_restapi_object(args):
- module = create_module(args)
- module.fail_json = fail_json
- rest_api = netapp_utils.UMRestAPI(module)
- return rest_api
-
-
-class mockResponse:
- def __init__(self, json_data, status_code, raise_action=None):
- self.json_data = json_data
- self.status_code = status_code
- self.content = json_data
- self.raise_action = raise_action
-
- def raise_for_status(self):
- pass
-
- def json(self):
- if self.raise_action == 'bad_json':
- raise ValueError(self.raise_action)
- return self.json_data
-
-
-@patch('ansible_collections.netapp.um_info.plugins.module_utils.netapp.UMRestAPI.send_request')
-def test_empty_get(mock_request):
- ''' get with no data '''
- mock_request.side_effect = [
- SRR['empty_good'],
- SRR['end_of_sequence'],
- ]
- rest_api = create_restapi_object(mock_args())
- message, error = rest_api.get('api', None)
- assert not error
- # only one key (_links)
- assert len(message) == 1
-
-
-@patch('ansible_collections.netapp.um_info.plugins.module_utils.netapp.UMRestAPI.send_request')
-def test_get_next(mock_request):
- ''' get with a next href '''
- mock_request.side_effect = [
- SRR['get_next'],
- SRR['get_data'],
- SRR['end_of_sequence'],
- ]
- rest_api = create_restapi_object(mock_args())
- message, error = rest_api.get('api', None)
- assert not error
- print('empty_get:', message)
- assert message['records'] == SRR['get_data'][0]['records']
-
-
-@patch('ansible_collections.netapp.um_info.plugins.module_utils.netapp.UMRestAPI.send_request')
-def test_negative_get_next_no__links(mock_request):
- ''' get with a next href '''
- mock_request.side_effect = [
- SRR['no__links_error'],
- SRR['end_of_sequence'],
- ]
- rest_api = create_restapi_object(mock_args())
- message, error = rest_api.get('api', None)
- print('error:', error)
- assert error
- assert 'Expecting _links key in' in error
-
-
-@patch('ansible_collections.netapp.um_info.plugins.module_utils.netapp.UMRestAPI.send_request')
-def test_negative_get_next_no_href(mock_request):
- ''' get with a next href '''
- mock_request.side_effect = [
- SRR['no_href_error'],
- SRR['end_of_sequence'],
- ]
- rest_api = create_restapi_object(mock_args())
- message, error = rest_api.get('api', None)
- print('error:', error)
- assert error
- assert 'Expecting href key in' in error
-
-
-def test_has_feature_success_default_0():
- ''' existing feature_flag with default of False'''
- flag = 'trace_apis'
- module = create_module(mock_args())
- value = netapp_utils.has_feature(module, flag)
- assert not value
-
-
-def test_has_feature_success_default_1():
- ''' existing feature_flag with default of True'''
- flag = 'strict_json_check'
- module = create_module(mock_args())
- value = netapp_utils.has_feature(module, flag)
- assert value
-
-
-def test_has_feature_success_user_true():
- ''' existing feature_flag with value set to True '''
- flag = 'user_deprecation_warning'
- args = dict(mock_args({flag: True}))
- module = create_module(args)
- value = netapp_utils.has_feature(module, flag)
- assert value
-
-
-def test_has_feature_success_user_false():
- ''' existing feature_flag with value set to False '''
- flag = 'user_deprecation_warning'
- args = dict(mock_args({flag: False}))
- print(args)
- module = create_module(args)
- value = netapp_utils.has_feature(module, flag)
- assert not value
-
-
-def test_has_feature_invalid_key():
- ''' existing feature_flag with unknown key '''
- flag = 'deprecation_warning_bad_key'
- module = create_module(mock_args())
- # replace ANsible fail method with ours
- module.fail_json = fail_json
- with pytest.raises(AnsibleFailJson) as exc:
- netapp_utils.has_feature(module, flag)
- msg = 'Internal error: unexpected feature flag: %s' % flag
- assert exc.value.args[0]['msg'] == msg
-
-
-@patch('requests.request')
-def test_empty_get_sent(mock_request):
- ''' get with no data '''
- mock_request.return_value = mockResponse(json_data=dict(_links='me'), status_code=200)
- rest_api = create_restapi_object(mock_args())
- message, error = rest_api.get('api', None)
- assert not error
- # only one key (_links)
- assert len(message) == 1
-
-
-@patch('requests.request')
-def test_empty_get_sent_bad_json(mock_request):
- ''' get with no data '''
- mock_request.return_value = mockResponse(json_data='anything', status_code=200, raise_action='bad_json')
- rest_api = create_restapi_object(mock_args())
- message, error = rest_api.get('api', None)
- assert error
- assert 'Expecting json, got: anything' in error
- print('errors:', rest_api.errors)
- print('debug:', rest_api.debug_logs)
-
-
-@patch('requests.request')
-def test_empty_get_sent_bad_but_empty_json(mock_request):
- ''' get with no data '''
- mock_request.return_value = mockResponse(json_data='', status_code=200, raise_action='bad_json')
- rest_api = create_restapi_object(mock_args())
- message, error = rest_api.get('api', None)
- assert error
- assert 'Expecting _links key in None' in error
- print('errors:', rest_api.errors)
- print('debug:', rest_api.debug_logs)
diff --git a/ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_aggregates_info.py b/ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_aggregates_info.py
deleted file mode 100644
index 9d2479484..000000000
--- a/ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_aggregates_info.py
+++ /dev/null
@@ -1,159 +0,0 @@
-# (c) 2020, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-""" unit tests for Ansible module: na_um_aggregates_info """
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-import json
-import pytest
-import sys
-
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-from ansible_collections.netapp.um_info.tests.unit.compat import unittest
-from ansible_collections.netapp.um_info.tests.unit.compat.mock import patch, Mock
-import ansible_collections.netapp.um_info.plugins.module_utils.netapp as netapp_utils
-
-from ansible_collections.netapp.um_info.plugins.modules.na_um_aggregates_info\
- import NetAppUMAggregate as my_module # module under test
-
-
-if not netapp_utils.HAS_REQUESTS and sys.version_info < (2, 7):
- pytestmark = pytest.mark.skip('Skipping Unit Tests on 2.6 as requests is not be available')
-
-
-# REST API canned responses when mocking send_request
-SRR = {
- # common responses
- 'empty_not_so_good': ({}, None),
- 'end_of_sequence': (None, "Unexpected call to send_request"),
- 'generic_error': (None, "Expected error"),
- 'get_next': (dict(_links=dict(self='me', next=dict(href='next_records'))), None),
- 'get_data': (dict(_links=dict(self='me'), records=['data1', 'data2'], total_records=2), None),
- 'get_data_missing_field': (dict(_links=dict(self='me'), records=['data1', 'data2']), None),
- # module specific responses
- 'get_aggregates': {'name': 'ansible'}
-}
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleExitJson(Exception):
- """Exception class to be raised by module.exit_json and caught by the test case"""
- pass
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
- pass
-
-
-def exit_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over exit_json; package return data into an exception"""
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-class MockUMConnection(object):
- ''' mock server connection to Unified Manager host '''
-
- def __init__(self):
- ''' pass init '''
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- def setUp(self):
- self.mock_module_helper = patch.multiple(basic.AnsibleModule,
- exit_json=exit_json,
- fail_json=fail_json)
- self.mock_module_helper.start()
- self.addCleanup(self.mock_module_helper.stop)
- self.server = MockUMConnection()
- # whether to use a mock or a simulator
- self.onbox = False
-
- def set_default_args(self):
- if self.onbox:
- hostname = '10.10.10.10'
- username = 'admin'
- password = 'password'
- else:
- hostname = 'hostname'
- username = 'username'
- password = 'password'
- return dict({
- 'hostname': hostname,
- 'username': username,
- 'password': password,
- })
-
- def test_module_fail_when_required_args_missing(self):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleFailJson) as exc:
- set_module_args({})
- my_module()
- print('Info: %s' % exc.value.args[0]['msg'])
-
- @patch('ansible_collections.netapp.um_info.plugins.modules.na_um_aggregates_info.NetAppUMAggregate.get_aggregates')
- def test_ensure_list_aggregates_get_called(self, get_aggregates):
- ''' fetching details of aggregates '''
- set_module_args(self.set_default_args())
- my_obj = my_module()
- my_obj.server = self.server
- my_obj.get_aggregates = Mock(return_value=SRR['get_aggregates'])
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- assert exc.value.args[0]['changed']
- # to reset na_helper from remembering the previous 'changed' value
-
- @patch('ansible_collections.netapp.um_info.plugins.modules.na_um_aggregates_info.NetAppUMAggregate.get_aggregates')
- def test_ensure_get_called_existing(self, get_aggregates):
- ''' test for existing aggregates'''
- set_module_args(self.set_default_args())
- my_obj = my_module()
- my_obj.get_aggregates = Mock(return_value=SRR['get_aggregates'])
- assert my_obj.get_aggregates() is not None
-
- @patch('ansible_collections.netapp.um_info.plugins.module_utils.netapp.UMRestAPI.send_request')
- def test_get_next(self, mock_request):
- ''' test for existing aggregates'''
- set_module_args(self.set_default_args())
- mock_request.side_effect = [
- SRR['get_next'],
- SRR['get_data'],
- SRR['end_of_sequence'],
- ]
- my_obj = my_module()
- assert my_obj.get_aggregates() is not None
-
- @patch('ansible_collections.netapp.um_info.plugins.module_utils.netapp.UMRestAPI.send_request')
- def test_negative_get_next(self, mock_request):
- ''' test for existing aggregates'''
- set_module_args(self.set_default_args())
- mock_request.side_effect = [
- SRR['get_next'],
- SRR['get_data_missing_field'],
- SRR['end_of_sequence'],
- ]
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.get_aggregates() is not None
- print(exc.value.args[0])
- msg = 'unexpected response from datacenter/storage/aggregates?order_by=performance_capacity.used'
- assert msg in exc.value.args[0]['msg']
- msg = "expecting key: 'total_records'"
- assert msg in exc.value.args[0]['msg']
diff --git a/ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_clusters_info.py b/ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_clusters_info.py
deleted file mode 100644
index c4939adb8..000000000
--- a/ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_clusters_info.py
+++ /dev/null
@@ -1,159 +0,0 @@
-# (c) 2020, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-""" unit tests for Ansible module: na_um_clusters_info """
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-import json
-import pytest
-import sys
-
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-from ansible_collections.netapp.um_info.tests.unit.compat import unittest
-from ansible_collections.netapp.um_info.tests.unit.compat.mock import patch, Mock
-import ansible_collections.netapp.um_info.plugins.module_utils.netapp as netapp_utils
-
-from ansible_collections.netapp.um_info.plugins.modules.na_um_clusters_info\
- import NetAppUMCluster as my_module # module under test
-
-
-if not netapp_utils.HAS_REQUESTS and sys.version_info < (2, 7):
- pytestmark = pytest.mark.skip('Skipping Unit Tests on 2.6 as requests is not be available')
-
-
-# REST API canned responses when mocking send_request
-SRR = {
- # common responses
- 'empty_good': ({}, None),
- 'end_of_sequence': (None, "Unexpected call to send_request"),
- 'generic_error': (None, "Expected error"),
- 'get_next': (dict(_links=dict(self='me', next=dict(href='next_records'))), None),
- 'get_data': (dict(_links=dict(self='me'), records=['data1', 'data2'], total_records=2), None),
- 'get_data_missing_field': (dict(_links=dict(self='me'), records=['data1', 'data2']), None),
- # module specific responses
- 'get_cluster': {'name': 'ansible'}
-}
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleExitJson(Exception):
- """Exception class to be raised by module.exit_json and caught by the test case"""
- pass
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
- pass
-
-
-def exit_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over exit_json; package return data into an exception"""
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-class MockUMConnection(object):
- ''' mock server connection to Unified Manager host '''
-
- def __init__(self):
- ''' pass init '''
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- def setUp(self):
- self.mock_module_helper = patch.multiple(basic.AnsibleModule,
- exit_json=exit_json,
- fail_json=fail_json)
- self.mock_module_helper.start()
- self.addCleanup(self.mock_module_helper.stop)
- self.server = MockUMConnection()
- # whether to use a mock or a simulator
- self.onbox = False
-
- def set_default_args(self):
- if self.onbox:
- hostname = '10.10.10.10'
- username = 'admin'
- password = 'password'
- else:
- hostname = 'hostname'
- username = 'username'
- password = 'password'
- return dict({
- 'hostname': hostname,
- 'username': username,
- 'password': password,
- })
-
- def test_module_fail_when_required_args_missing(self):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleFailJson) as exc:
- set_module_args({})
- my_module()
- print('Info: %s' % exc.value.args[0]['msg'])
-
- @patch('ansible_collections.netapp.um_info.plugins.modules.na_um_clusters_info.NetAppUMCluster.get_clusters')
- def test_ensure_list_cluster_get_called(self, get_cluster):
- ''' fetching details of cluster '''
- set_module_args(self.set_default_args())
- my_obj = my_module()
- my_obj.server = self.server
- my_obj.get_cluster = Mock(return_value=SRR['get_cluster'])
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- assert exc.value.args[0]['changed']
- # to reset na_helper from remembering the previous 'changed' value
-
- @patch('ansible_collections.netapp.um_info.plugins.modules.na_um_clusters_info.NetAppUMCluster.get_clusters')
- def test_ensure_get_called_existing(self, get_cluster):
- ''' test for existing cluster'''
- set_module_args(self.set_default_args())
- my_obj = my_module()
- my_obj.get_cluster = Mock(return_value=SRR['get_cluster'])
- assert my_obj.get_cluster() is not None
-
- @patch('ansible_collections.netapp.um_info.plugins.module_utils.netapp.UMRestAPI.send_request')
- def test_get_next(self, mock_request):
- ''' test for existing clusters'''
- set_module_args(self.set_default_args())
- mock_request.side_effect = [
- SRR['get_next'],
- SRR['get_data'],
- SRR['end_of_sequence'],
- ]
- my_obj = my_module()
- assert my_obj.get_clusters() is not None
-
- @patch('ansible_collections.netapp.um_info.plugins.module_utils.netapp.UMRestAPI.send_request')
- def test_negative_get_next(self, mock_request):
- ''' test for existing clusters'''
- set_module_args(self.set_default_args())
- mock_request.side_effect = [
- SRR['get_next'],
- SRR['get_data_missing_field'],
- SRR['end_of_sequence'],
- ]
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.get_clusters() is not None
- print(exc.value.args[0])
- msg = 'unexpected response from datacenter/cluster/clusters'
- assert msg in exc.value.args[0]['msg']
- msg = "expecting key: 'total_records'"
- assert msg in exc.value.args[0]['msg']
diff --git a/ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_list_aggregates.py b/ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_list_aggregates.py
deleted file mode 100644
index 9d2479484..000000000
--- a/ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_list_aggregates.py
+++ /dev/null
@@ -1,159 +0,0 @@
-# (c) 2020, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-""" unit tests for Ansible module: na_um_aggregates_info """
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-import json
-import pytest
-import sys
-
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-from ansible_collections.netapp.um_info.tests.unit.compat import unittest
-from ansible_collections.netapp.um_info.tests.unit.compat.mock import patch, Mock
-import ansible_collections.netapp.um_info.plugins.module_utils.netapp as netapp_utils
-
-from ansible_collections.netapp.um_info.plugins.modules.na_um_aggregates_info\
- import NetAppUMAggregate as my_module # module under test
-
-
-if not netapp_utils.HAS_REQUESTS and sys.version_info < (2, 7):
- pytestmark = pytest.mark.skip('Skipping Unit Tests on 2.6 as requests is not be available')
-
-
-# REST API canned responses when mocking send_request
-SRR = {
- # common responses
- 'empty_not_so_good': ({}, None),
- 'end_of_sequence': (None, "Unexpected call to send_request"),
- 'generic_error': (None, "Expected error"),
- 'get_next': (dict(_links=dict(self='me', next=dict(href='next_records'))), None),
- 'get_data': (dict(_links=dict(self='me'), records=['data1', 'data2'], total_records=2), None),
- 'get_data_missing_field': (dict(_links=dict(self='me'), records=['data1', 'data2']), None),
- # module specific responses
- 'get_aggregates': {'name': 'ansible'}
-}
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleExitJson(Exception):
- """Exception class to be raised by module.exit_json and caught by the test case"""
- pass
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
- pass
-
-
-def exit_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over exit_json; package return data into an exception"""
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-class MockUMConnection(object):
- ''' mock server connection to Unified Manager host '''
-
- def __init__(self):
- ''' pass init '''
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- def setUp(self):
- self.mock_module_helper = patch.multiple(basic.AnsibleModule,
- exit_json=exit_json,
- fail_json=fail_json)
- self.mock_module_helper.start()
- self.addCleanup(self.mock_module_helper.stop)
- self.server = MockUMConnection()
- # whether to use a mock or a simulator
- self.onbox = False
-
- def set_default_args(self):
- if self.onbox:
- hostname = '10.10.10.10'
- username = 'admin'
- password = 'password'
- else:
- hostname = 'hostname'
- username = 'username'
- password = 'password'
- return dict({
- 'hostname': hostname,
- 'username': username,
- 'password': password,
- })
-
- def test_module_fail_when_required_args_missing(self):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleFailJson) as exc:
- set_module_args({})
- my_module()
- print('Info: %s' % exc.value.args[0]['msg'])
-
- @patch('ansible_collections.netapp.um_info.plugins.modules.na_um_aggregates_info.NetAppUMAggregate.get_aggregates')
- def test_ensure_list_aggregates_get_called(self, get_aggregates):
- ''' fetching details of aggregates '''
- set_module_args(self.set_default_args())
- my_obj = my_module()
- my_obj.server = self.server
- my_obj.get_aggregates = Mock(return_value=SRR['get_aggregates'])
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- assert exc.value.args[0]['changed']
- # to reset na_helper from remembering the previous 'changed' value
-
- @patch('ansible_collections.netapp.um_info.plugins.modules.na_um_aggregates_info.NetAppUMAggregate.get_aggregates')
- def test_ensure_get_called_existing(self, get_aggregates):
- ''' test for existing aggregates'''
- set_module_args(self.set_default_args())
- my_obj = my_module()
- my_obj.get_aggregates = Mock(return_value=SRR['get_aggregates'])
- assert my_obj.get_aggregates() is not None
-
- @patch('ansible_collections.netapp.um_info.plugins.module_utils.netapp.UMRestAPI.send_request')
- def test_get_next(self, mock_request):
- ''' test for existing aggregates'''
- set_module_args(self.set_default_args())
- mock_request.side_effect = [
- SRR['get_next'],
- SRR['get_data'],
- SRR['end_of_sequence'],
- ]
- my_obj = my_module()
- assert my_obj.get_aggregates() is not None
-
- @patch('ansible_collections.netapp.um_info.plugins.module_utils.netapp.UMRestAPI.send_request')
- def test_negative_get_next(self, mock_request):
- ''' test for existing aggregates'''
- set_module_args(self.set_default_args())
- mock_request.side_effect = [
- SRR['get_next'],
- SRR['get_data_missing_field'],
- SRR['end_of_sequence'],
- ]
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.get_aggregates() is not None
- print(exc.value.args[0])
- msg = 'unexpected response from datacenter/storage/aggregates?order_by=performance_capacity.used'
- assert msg in exc.value.args[0]['msg']
- msg = "expecting key: 'total_records'"
- assert msg in exc.value.args[0]['msg']
diff --git a/ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_list_clusters.py b/ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_list_clusters.py
deleted file mode 100644
index c4939adb8..000000000
--- a/ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_list_clusters.py
+++ /dev/null
@@ -1,159 +0,0 @@
-# (c) 2020, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-""" unit tests for Ansible module: na_um_clusters_info """
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-import json
-import pytest
-import sys
-
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-from ansible_collections.netapp.um_info.tests.unit.compat import unittest
-from ansible_collections.netapp.um_info.tests.unit.compat.mock import patch, Mock
-import ansible_collections.netapp.um_info.plugins.module_utils.netapp as netapp_utils
-
-from ansible_collections.netapp.um_info.plugins.modules.na_um_clusters_info\
- import NetAppUMCluster as my_module # module under test
-
-
-if not netapp_utils.HAS_REQUESTS and sys.version_info < (2, 7):
- pytestmark = pytest.mark.skip('Skipping Unit Tests on 2.6 as requests is not be available')
-
-
-# REST API canned responses when mocking send_request
-SRR = {
- # common responses
- 'empty_good': ({}, None),
- 'end_of_sequence': (None, "Unexpected call to send_request"),
- 'generic_error': (None, "Expected error"),
- 'get_next': (dict(_links=dict(self='me', next=dict(href='next_records'))), None),
- 'get_data': (dict(_links=dict(self='me'), records=['data1', 'data2'], total_records=2), None),
- 'get_data_missing_field': (dict(_links=dict(self='me'), records=['data1', 'data2']), None),
- # module specific responses
- 'get_cluster': {'name': 'ansible'}
-}
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleExitJson(Exception):
- """Exception class to be raised by module.exit_json and caught by the test case"""
- pass
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
- pass
-
-
-def exit_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over exit_json; package return data into an exception"""
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-class MockUMConnection(object):
- ''' mock server connection to Unified Manager host '''
-
- def __init__(self):
- ''' pass init '''
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- def setUp(self):
- self.mock_module_helper = patch.multiple(basic.AnsibleModule,
- exit_json=exit_json,
- fail_json=fail_json)
- self.mock_module_helper.start()
- self.addCleanup(self.mock_module_helper.stop)
- self.server = MockUMConnection()
- # whether to use a mock or a simulator
- self.onbox = False
-
- def set_default_args(self):
- if self.onbox:
- hostname = '10.10.10.10'
- username = 'admin'
- password = 'password'
- else:
- hostname = 'hostname'
- username = 'username'
- password = 'password'
- return dict({
- 'hostname': hostname,
- 'username': username,
- 'password': password,
- })
-
- def test_module_fail_when_required_args_missing(self):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleFailJson) as exc:
- set_module_args({})
- my_module()
- print('Info: %s' % exc.value.args[0]['msg'])
-
- @patch('ansible_collections.netapp.um_info.plugins.modules.na_um_clusters_info.NetAppUMCluster.get_clusters')
- def test_ensure_list_cluster_get_called(self, get_cluster):
- ''' fetching details of cluster '''
- set_module_args(self.set_default_args())
- my_obj = my_module()
- my_obj.server = self.server
- my_obj.get_cluster = Mock(return_value=SRR['get_cluster'])
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- assert exc.value.args[0]['changed']
- # to reset na_helper from remembering the previous 'changed' value
-
- @patch('ansible_collections.netapp.um_info.plugins.modules.na_um_clusters_info.NetAppUMCluster.get_clusters')
- def test_ensure_get_called_existing(self, get_cluster):
- ''' test for existing cluster'''
- set_module_args(self.set_default_args())
- my_obj = my_module()
- my_obj.get_cluster = Mock(return_value=SRR['get_cluster'])
- assert my_obj.get_cluster() is not None
-
- @patch('ansible_collections.netapp.um_info.plugins.module_utils.netapp.UMRestAPI.send_request')
- def test_get_next(self, mock_request):
- ''' test for existing clusters'''
- set_module_args(self.set_default_args())
- mock_request.side_effect = [
- SRR['get_next'],
- SRR['get_data'],
- SRR['end_of_sequence'],
- ]
- my_obj = my_module()
- assert my_obj.get_clusters() is not None
-
- @patch('ansible_collections.netapp.um_info.plugins.module_utils.netapp.UMRestAPI.send_request')
- def test_negative_get_next(self, mock_request):
- ''' test for existing clusters'''
- set_module_args(self.set_default_args())
- mock_request.side_effect = [
- SRR['get_next'],
- SRR['get_data_missing_field'],
- SRR['end_of_sequence'],
- ]
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.get_clusters() is not None
- print(exc.value.args[0])
- msg = 'unexpected response from datacenter/cluster/clusters'
- assert msg in exc.value.args[0]['msg']
- msg = "expecting key: 'total_records'"
- assert msg in exc.value.args[0]['msg']
diff --git a/ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_list_nodes.py b/ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_list_nodes.py
deleted file mode 100644
index e5769d1f1..000000000
--- a/ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_list_nodes.py
+++ /dev/null
@@ -1,158 +0,0 @@
-# (c) 2020, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-""" unit tests for Ansible module: na_um_nodes_info """
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-import json
-import pytest
-import sys
-
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-from ansible_collections.netapp.um_info.tests.unit.compat import unittest
-from ansible_collections.netapp.um_info.tests.unit.compat.mock import patch, Mock
-import ansible_collections.netapp.um_info.plugins.module_utils.netapp as netapp_utils
-
-from ansible_collections.netapp.um_info.plugins.modules.na_um_nodes_info\
- import NetAppUMNode as my_module # module under test
-
-
-if not netapp_utils.HAS_REQUESTS and sys.version_info < (2, 7):
- pytestmark = pytest.mark.skip('Skipping Unit Tests on 2.6 as requests is not be available')
-
-
-# REST API canned responses when mocking send_request
-SRR = {
- # common responses
- 'empty_good': ({}, None),
- 'end_of_sequence': (None, "Unexpected call to send_request"),
- 'generic_error': (None, "Expected error"),
- 'get_next': (dict(_links=dict(self='me', next=dict(href='next_records'))), None),
- 'get_data': (dict(_links=dict(self='me'), records=['data1', 'data2'], total_records=2), None),
- 'get_data_missing_field': (dict(_links=dict(self='me'), records=['data1', 'data2']), None),
- # module specific responses
- 'get_nodes': {'name': 'ansible'}
-}
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleExitJson(Exception):
- """Exception class to be raised by module.exit_json and caught by the test case"""
- pass
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
- pass
-
-
-def exit_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over exit_json; package return data into an exception"""
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-class MockUMConnection(object):
- ''' mock server connection to Unified Manager host '''
-
- def __init__(self):
- ''' pass init '''
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- def setUp(self):
- self.mock_module_helper = patch.multiple(basic.AnsibleModule,
- exit_json=exit_json,
- fail_json=fail_json)
- self.mock_module_helper.start()
- self.addCleanup(self.mock_module_helper.stop)
- self.server = MockUMConnection()
- # whether to use a mock or a simulator
- self.onbox = False
-
- def set_default_args(self):
- if self.onbox:
- hostname = '10.10.10.10'
- username = 'admin'
- password = 'password'
- else:
- hostname = 'hostname'
- username = 'username'
- password = 'password'
- return dict({
- 'hostname': hostname,
- 'username': username,
- 'password': password,
- })
-
- def test_module_fail_when_required_args_missing(self):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleFailJson) as exc:
- set_module_args({})
- my_module()
- print('Info: %s' % exc.value.args[0]['msg'])
-
- @patch('ansible_collections.netapp.um_info.plugins.modules.na_um_nodes_info.NetAppUMNode.get_nodes')
- def test_ensure_list_nodes_get_called(self, get_nodes):
- ''' fetching details of nodes '''
- set_module_args(self.set_default_args())
- my_obj = my_module()
- my_obj.server = self.server
- my_obj.get_nodes = Mock(return_value=SRR['get_nodes'])
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.um_info.plugins.modules.na_um_nodes_info.NetAppUMNode.get_nodes')
- def test_ensure_get_called_existing(self, get_nodes):
- ''' test for existing nodes'''
- set_module_args(self.set_default_args())
- my_obj = my_module()
- my_obj.get_nodes = Mock(return_value=SRR['get_nodes'])
- assert my_obj.get_nodes() is not None
-
- @patch('ansible_collections.netapp.um_info.plugins.module_utils.netapp.UMRestAPI.send_request')
- def test_get_next(self, mock_request):
- ''' test for existing nodes'''
- set_module_args(self.set_default_args())
- mock_request.side_effect = [
- SRR['get_next'],
- SRR['get_data'],
- SRR['end_of_sequence'],
- ]
- my_obj = my_module()
- assert my_obj.get_nodes() is not None
-
- @patch('ansible_collections.netapp.um_info.plugins.module_utils.netapp.UMRestAPI.send_request')
- def test_negative_get_next(self, mock_request):
- ''' test for existing nodes'''
- set_module_args(self.set_default_args())
- mock_request.side_effect = [
- SRR['get_next'],
- SRR['get_data_missing_field'],
- SRR['end_of_sequence'],
- ]
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.get_nodes() is not None
- print(exc.value.args[0])
- msg = 'unexpected response from datacenter/cluster/nodes'
- assert msg in exc.value.args[0]['msg']
- msg = "expecting key: 'total_records'"
- assert msg in exc.value.args[0]['msg']
diff --git a/ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_list_svms.py b/ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_list_svms.py
deleted file mode 100644
index 2eafd508f..000000000
--- a/ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_list_svms.py
+++ /dev/null
@@ -1,158 +0,0 @@
-# (c) 2020, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-""" unit tests for Ansible module: na_um_svms_info """
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-import json
-import pytest
-import sys
-
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-from ansible_collections.netapp.um_info.tests.unit.compat import unittest
-from ansible_collections.netapp.um_info.tests.unit.compat.mock import patch, Mock
-import ansible_collections.netapp.um_info.plugins.module_utils.netapp as netapp_utils
-
-from ansible_collections.netapp.um_info.plugins.modules.na_um_svms_info\
- import NetAppUMSVM as my_module # module under test
-
-
-if not netapp_utils.HAS_REQUESTS and sys.version_info < (2, 7):
- pytestmark = pytest.mark.skip('Skipping Unit Tests on 2.6 as requests is not be available')
-
-
-# REST API canned responses when mocking send_request
-SRR = {
- # common responses
- 'empty_good': ({}, None),
- 'end_of_sequence': (None, "Unexpected call to send_request"),
- 'generic_error': (None, "Expected error"),
- 'get_next': (dict(_links=dict(self='me', next=dict(href='next_records'))), None),
- 'get_data': (dict(_links=dict(self='me'), records=['data1', 'data2'], total_records=2), None),
- 'get_data_missing_field': (dict(_links=dict(self='me'), records=['data1', 'data2']), None),
- # module specific responses
- 'get_svms': {'name': 'ansible'}
-}
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleExitJson(Exception):
- """Exception class to be raised by module.exit_json and caught by the test case"""
- pass
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
- pass
-
-
-def exit_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over exit_json; package return data into an exception"""
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-class MockUMConnection(object):
- ''' mock server connection to Unified Manager host '''
-
- def __init__(self):
- ''' pass init '''
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- def setUp(self):
- self.mock_module_helper = patch.multiple(basic.AnsibleModule,
- exit_json=exit_json,
- fail_json=fail_json)
- self.mock_module_helper.start()
- self.addCleanup(self.mock_module_helper.stop)
- self.server = MockUMConnection()
- # whether to use a mock or a simulator
- self.onbox = False
-
- def set_default_args(self):
- if self.onbox:
- hostname = '10.10.10.10'
- username = 'admin'
- password = 'password'
- else:
- hostname = 'hostname'
- username = 'username'
- password = 'password'
- return dict({
- 'hostname': hostname,
- 'username': username,
- 'password': password,
- })
-
- def test_module_fail_when_required_args_missing(self):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleFailJson) as exc:
- set_module_args({})
- my_module()
- print('Info: %s' % exc.value.args[0]['msg'])
-
- @patch('ansible_collections.netapp.um_info.plugins.modules.na_um_svms_info.NetAppUMSVM.get_svms')
- def test_ensure_list_svms_get_called(self, get_svms):
- ''' fetching details of svms '''
- set_module_args(self.set_default_args())
- my_obj = my_module()
- my_obj.server = self.server
- my_obj.get_svms = Mock(return_value=SRR['get_svms'])
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.um_info.plugins.modules.na_um_svms_info.NetAppUMSVM.get_svms')
- def test_ensure_get_called_existing(self, get_svms):
- ''' test for existing svms'''
- set_module_args(self.set_default_args())
- my_obj = my_module()
- my_obj.get_svms = Mock(return_value=SRR['get_svms'])
- assert my_obj.get_svms() is not None
-
- @patch('ansible_collections.netapp.um_info.plugins.module_utils.netapp.UMRestAPI.send_request')
- def test_get_next(self, mock_request):
- ''' test for existing svms'''
- set_module_args(self.set_default_args())
- mock_request.side_effect = [
- SRR['get_next'],
- SRR['get_data'],
- SRR['end_of_sequence'],
- ]
- my_obj = my_module()
- assert my_obj.get_svms() is not None
-
- @patch('ansible_collections.netapp.um_info.plugins.module_utils.netapp.UMRestAPI.send_request')
- def test_negative_get_next(self, mock_request):
- ''' test for existing svms'''
- set_module_args(self.set_default_args())
- mock_request.side_effect = [
- SRR['get_next'],
- SRR['get_data_missing_field'],
- SRR['end_of_sequence'],
- ]
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.get_svms() is not None
- print(exc.value.args[0])
- msg = 'unexpected response from datacenter/svm/svms'
- assert msg in exc.value.args[0]['msg']
- msg = "expecting key: 'total_records'"
- assert msg in exc.value.args[0]['msg']
diff --git a/ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_list_volumes.py b/ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_list_volumes.py
deleted file mode 100644
index 4c8a267fb..000000000
--- a/ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_list_volumes.py
+++ /dev/null
@@ -1,158 +0,0 @@
-# (c) 2020, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-""" unit tests for Ansible module: na_um_volumes_info """
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-import json
-import pytest
-import sys
-
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-from ansible_collections.netapp.um_info.tests.unit.compat import unittest
-from ansible_collections.netapp.um_info.tests.unit.compat.mock import patch, Mock
-import ansible_collections.netapp.um_info.plugins.module_utils.netapp as netapp_utils
-
-from ansible_collections.netapp.um_info.plugins.modules.na_um_volumes_info\
- import NetAppUMVolume as my_module # module under test
-
-
-if not netapp_utils.HAS_REQUESTS and sys.version_info < (2, 7):
- pytestmark = pytest.mark.skip('Skipping Unit Tests on 2.6 as requests is not be available')
-
-
-# REST API canned responses when mocking send_request
-SRR = {
- # common responses
- 'empty_good': ({}, None),
- 'end_of_sequence': (None, "Unexpected call to send_request"),
- 'generic_error': (None, "Expected error"),
- 'get_next': (dict(_links=dict(self='me', next=dict(href='next_records'))), None),
- 'get_data': (dict(_links=dict(self='me'), records=['data1', 'data2'], total_records=2), None),
- 'get_data_missing_field': (dict(_links=dict(self='me'), records=['data1', 'data2']), None),
- # module specific responses
- 'get_volumes': {'name': 'ansible'}
-}
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleExitJson(Exception):
- """Exception class to be raised by module.exit_json and caught by the test case"""
- pass
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
- pass
-
-
-def exit_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over exit_json; package return data into an exception"""
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-class MockUMConnection(object):
- ''' mock server connection to Unified Manager host '''
-
- def __init__(self):
- ''' pass init '''
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- def setUp(self):
- self.mock_module_helper = patch.multiple(basic.AnsibleModule,
- exit_json=exit_json,
- fail_json=fail_json)
- self.mock_module_helper.start()
- self.addCleanup(self.mock_module_helper.stop)
- self.server = MockUMConnection()
- # whether to use a mock or a simulator
- self.onbox = False
-
- def set_default_args(self):
- if self.onbox:
- hostname = '10.10.10.10'
- username = 'admin'
- password = 'password'
- else:
- hostname = 'hostname'
- username = 'username'
- password = 'password'
- return dict({
- 'hostname': hostname,
- 'username': username,
- 'password': password,
- })
-
- def test_module_fail_when_required_args_missing(self):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleFailJson) as exc:
- set_module_args({})
- my_module()
- print('Info: %s' % exc.value.args[0]['msg'])
-
- @patch('ansible_collections.netapp.um_info.plugins.modules.na_um_volumes_info.NetAppUMVolume.get_volumes')
- def test_ensure_list_volumes_get_called(self, get_volumes):
- ''' fetching details of volumes '''
- set_module_args(self.set_default_args())
- my_obj = my_module()
- my_obj.server = self.server
- my_obj.get_volumes = Mock(return_value=SRR['get_volumes'])
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.um_info.plugins.modules.na_um_volumes_info.NetAppUMVolume.get_volumes')
- def test_ensure_get_called_existing(self, get_volumes):
- ''' test for existing volumes'''
- set_module_args(self.set_default_args())
- my_obj = my_module()
- my_obj.get_volumes = Mock(return_value=SRR['get_volumes'])
- assert my_obj.get_volumes() is not None
-
- @patch('ansible_collections.netapp.um_info.plugins.module_utils.netapp.UMRestAPI.send_request')
- def test_get_next(self, mock_request):
- ''' test for existing volumes'''
- set_module_args(self.set_default_args())
- mock_request.side_effect = [
- SRR['get_next'],
- SRR['get_data'],
- SRR['end_of_sequence'],
- ]
- my_obj = my_module()
- assert my_obj.get_volumes() is not None
-
- @patch('ansible_collections.netapp.um_info.plugins.module_utils.netapp.UMRestAPI.send_request')
- def test_negative_get_next(self, mock_request):
- ''' test for existing volumes'''
- set_module_args(self.set_default_args())
- mock_request.side_effect = [
- SRR['get_next'],
- SRR['get_data_missing_field'],
- SRR['end_of_sequence'],
- ]
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.get_volumes() is not None
- print(exc.value.args[0])
- msg = 'unexpected response from datacenter/storage/volumes'
- assert msg in exc.value.args[0]['msg']
- msg = "expecting key: 'total_records'"
- assert msg in exc.value.args[0]['msg']
diff --git a/ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_nodes_info.py b/ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_nodes_info.py
deleted file mode 100644
index e5769d1f1..000000000
--- a/ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_nodes_info.py
+++ /dev/null
@@ -1,158 +0,0 @@
-# (c) 2020, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-""" unit tests for Ansible module: na_um_nodes_info """
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-import json
-import pytest
-import sys
-
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-from ansible_collections.netapp.um_info.tests.unit.compat import unittest
-from ansible_collections.netapp.um_info.tests.unit.compat.mock import patch, Mock
-import ansible_collections.netapp.um_info.plugins.module_utils.netapp as netapp_utils
-
-from ansible_collections.netapp.um_info.plugins.modules.na_um_nodes_info\
- import NetAppUMNode as my_module # module under test
-
-
-if not netapp_utils.HAS_REQUESTS and sys.version_info < (2, 7):
- pytestmark = pytest.mark.skip('Skipping Unit Tests on 2.6 as requests is not be available')
-
-
-# REST API canned responses when mocking send_request
-SRR = {
- # common responses
- 'empty_good': ({}, None),
- 'end_of_sequence': (None, "Unexpected call to send_request"),
- 'generic_error': (None, "Expected error"),
- 'get_next': (dict(_links=dict(self='me', next=dict(href='next_records'))), None),
- 'get_data': (dict(_links=dict(self='me'), records=['data1', 'data2'], total_records=2), None),
- 'get_data_missing_field': (dict(_links=dict(self='me'), records=['data1', 'data2']), None),
- # module specific responses
- 'get_nodes': {'name': 'ansible'}
-}
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleExitJson(Exception):
- """Exception class to be raised by module.exit_json and caught by the test case"""
- pass
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
- pass
-
-
-def exit_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over exit_json; package return data into an exception"""
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-class MockUMConnection(object):
- ''' mock server connection to Unified Manager host '''
-
- def __init__(self):
- ''' pass init '''
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- def setUp(self):
- self.mock_module_helper = patch.multiple(basic.AnsibleModule,
- exit_json=exit_json,
- fail_json=fail_json)
- self.mock_module_helper.start()
- self.addCleanup(self.mock_module_helper.stop)
- self.server = MockUMConnection()
- # whether to use a mock or a simulator
- self.onbox = False
-
- def set_default_args(self):
- if self.onbox:
- hostname = '10.10.10.10'
- username = 'admin'
- password = 'password'
- else:
- hostname = 'hostname'
- username = 'username'
- password = 'password'
- return dict({
- 'hostname': hostname,
- 'username': username,
- 'password': password,
- })
-
- def test_module_fail_when_required_args_missing(self):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleFailJson) as exc:
- set_module_args({})
- my_module()
- print('Info: %s' % exc.value.args[0]['msg'])
-
- @patch('ansible_collections.netapp.um_info.plugins.modules.na_um_nodes_info.NetAppUMNode.get_nodes')
- def test_ensure_list_nodes_get_called(self, get_nodes):
- ''' fetching details of nodes '''
- set_module_args(self.set_default_args())
- my_obj = my_module()
- my_obj.server = self.server
- my_obj.get_nodes = Mock(return_value=SRR['get_nodes'])
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.um_info.plugins.modules.na_um_nodes_info.NetAppUMNode.get_nodes')
- def test_ensure_get_called_existing(self, get_nodes):
- ''' test for existing nodes'''
- set_module_args(self.set_default_args())
- my_obj = my_module()
- my_obj.get_nodes = Mock(return_value=SRR['get_nodes'])
- assert my_obj.get_nodes() is not None
-
- @patch('ansible_collections.netapp.um_info.plugins.module_utils.netapp.UMRestAPI.send_request')
- def test_get_next(self, mock_request):
- ''' test for existing nodes'''
- set_module_args(self.set_default_args())
- mock_request.side_effect = [
- SRR['get_next'],
- SRR['get_data'],
- SRR['end_of_sequence'],
- ]
- my_obj = my_module()
- assert my_obj.get_nodes() is not None
-
- @patch('ansible_collections.netapp.um_info.plugins.module_utils.netapp.UMRestAPI.send_request')
- def test_negative_get_next(self, mock_request):
- ''' test for existing nodes'''
- set_module_args(self.set_default_args())
- mock_request.side_effect = [
- SRR['get_next'],
- SRR['get_data_missing_field'],
- SRR['end_of_sequence'],
- ]
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.get_nodes() is not None
- print(exc.value.args[0])
- msg = 'unexpected response from datacenter/cluster/nodes'
- assert msg in exc.value.args[0]['msg']
- msg = "expecting key: 'total_records'"
- assert msg in exc.value.args[0]['msg']
diff --git a/ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_svms_info.py b/ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_svms_info.py
deleted file mode 100644
index 2eafd508f..000000000
--- a/ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_svms_info.py
+++ /dev/null
@@ -1,158 +0,0 @@
-# (c) 2020, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-""" unit tests for Ansible module: na_um_svms_info """
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-import json
-import pytest
-import sys
-
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-from ansible_collections.netapp.um_info.tests.unit.compat import unittest
-from ansible_collections.netapp.um_info.tests.unit.compat.mock import patch, Mock
-import ansible_collections.netapp.um_info.plugins.module_utils.netapp as netapp_utils
-
-from ansible_collections.netapp.um_info.plugins.modules.na_um_svms_info\
- import NetAppUMSVM as my_module # module under test
-
-
-if not netapp_utils.HAS_REQUESTS and sys.version_info < (2, 7):
- pytestmark = pytest.mark.skip('Skipping Unit Tests on 2.6 as requests is not be available')
-
-
-# REST API canned responses when mocking send_request
-SRR = {
- # common responses
- 'empty_good': ({}, None),
- 'end_of_sequence': (None, "Unexpected call to send_request"),
- 'generic_error': (None, "Expected error"),
- 'get_next': (dict(_links=dict(self='me', next=dict(href='next_records'))), None),
- 'get_data': (dict(_links=dict(self='me'), records=['data1', 'data2'], total_records=2), None),
- 'get_data_missing_field': (dict(_links=dict(self='me'), records=['data1', 'data2']), None),
- # module specific responses
- 'get_svms': {'name': 'ansible'}
-}
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleExitJson(Exception):
- """Exception class to be raised by module.exit_json and caught by the test case"""
- pass
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
- pass
-
-
-def exit_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over exit_json; package return data into an exception"""
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-class MockUMConnection(object):
- ''' mock server connection to Unified Manager host '''
-
- def __init__(self):
- ''' pass init '''
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- def setUp(self):
- self.mock_module_helper = patch.multiple(basic.AnsibleModule,
- exit_json=exit_json,
- fail_json=fail_json)
- self.mock_module_helper.start()
- self.addCleanup(self.mock_module_helper.stop)
- self.server = MockUMConnection()
- # whether to use a mock or a simulator
- self.onbox = False
-
- def set_default_args(self):
- if self.onbox:
- hostname = '10.10.10.10'
- username = 'admin'
- password = 'password'
- else:
- hostname = 'hostname'
- username = 'username'
- password = 'password'
- return dict({
- 'hostname': hostname,
- 'username': username,
- 'password': password,
- })
-
- def test_module_fail_when_required_args_missing(self):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleFailJson) as exc:
- set_module_args({})
- my_module()
- print('Info: %s' % exc.value.args[0]['msg'])
-
- @patch('ansible_collections.netapp.um_info.plugins.modules.na_um_svms_info.NetAppUMSVM.get_svms')
- def test_ensure_list_svms_get_called(self, get_svms):
- ''' fetching details of svms '''
- set_module_args(self.set_default_args())
- my_obj = my_module()
- my_obj.server = self.server
- my_obj.get_svms = Mock(return_value=SRR['get_svms'])
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.um_info.plugins.modules.na_um_svms_info.NetAppUMSVM.get_svms')
- def test_ensure_get_called_existing(self, get_svms):
- ''' test for existing svms'''
- set_module_args(self.set_default_args())
- my_obj = my_module()
- my_obj.get_svms = Mock(return_value=SRR['get_svms'])
- assert my_obj.get_svms() is not None
-
- @patch('ansible_collections.netapp.um_info.plugins.module_utils.netapp.UMRestAPI.send_request')
- def test_get_next(self, mock_request):
- ''' test for existing svms'''
- set_module_args(self.set_default_args())
- mock_request.side_effect = [
- SRR['get_next'],
- SRR['get_data'],
- SRR['end_of_sequence'],
- ]
- my_obj = my_module()
- assert my_obj.get_svms() is not None
-
- @patch('ansible_collections.netapp.um_info.plugins.module_utils.netapp.UMRestAPI.send_request')
- def test_negative_get_next(self, mock_request):
- ''' test for existing svms'''
- set_module_args(self.set_default_args())
- mock_request.side_effect = [
- SRR['get_next'],
- SRR['get_data_missing_field'],
- SRR['end_of_sequence'],
- ]
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.get_svms() is not None
- print(exc.value.args[0])
- msg = 'unexpected response from datacenter/svm/svms'
- assert msg in exc.value.args[0]['msg']
- msg = "expecting key: 'total_records'"
- assert msg in exc.value.args[0]['msg']
diff --git a/ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_volumes_info.py b/ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_volumes_info.py
deleted file mode 100644
index 4c8a267fb..000000000
--- a/ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_volumes_info.py
+++ /dev/null
@@ -1,158 +0,0 @@
-# (c) 2020, NetApp, Inc
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-""" unit tests for Ansible module: na_um_volumes_info """
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-import json
-import pytest
-import sys
-
-from ansible.module_utils import basic
-from ansible.module_utils._text import to_bytes
-from ansible_collections.netapp.um_info.tests.unit.compat import unittest
-from ansible_collections.netapp.um_info.tests.unit.compat.mock import patch, Mock
-import ansible_collections.netapp.um_info.plugins.module_utils.netapp as netapp_utils
-
-from ansible_collections.netapp.um_info.plugins.modules.na_um_volumes_info\
- import NetAppUMVolume as my_module # module under test
-
-
-if not netapp_utils.HAS_REQUESTS and sys.version_info < (2, 7):
- pytestmark = pytest.mark.skip('Skipping Unit Tests on 2.6 as requests is not be available')
-
-
-# REST API canned responses when mocking send_request
-SRR = {
- # common responses
- 'empty_good': ({}, None),
- 'end_of_sequence': (None, "Unexpected call to send_request"),
- 'generic_error': (None, "Expected error"),
- 'get_next': (dict(_links=dict(self='me', next=dict(href='next_records'))), None),
- 'get_data': (dict(_links=dict(self='me'), records=['data1', 'data2'], total_records=2), None),
- 'get_data_missing_field': (dict(_links=dict(self='me'), records=['data1', 'data2']), None),
- # module specific responses
- 'get_volumes': {'name': 'ansible'}
-}
-
-
-def set_module_args(args):
- """prepare arguments so that they will be picked up during module creation"""
- args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
- basic._ANSIBLE_ARGS = to_bytes(args) # pylint: disable=protected-access
-
-
-class AnsibleExitJson(Exception):
- """Exception class to be raised by module.exit_json and caught by the test case"""
- pass
-
-
-class AnsibleFailJson(Exception):
- """Exception class to be raised by module.fail_json and caught by the test case"""
- pass
-
-
-def exit_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over exit_json; package return data into an exception"""
- if 'changed' not in kwargs:
- kwargs['changed'] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(*args, **kwargs): # pylint: disable=unused-argument
- """function to patch over fail_json; package return data into an exception"""
- kwargs['failed'] = True
- raise AnsibleFailJson(kwargs)
-
-
-class MockUMConnection(object):
- ''' mock server connection to Unified Manager host '''
-
- def __init__(self):
- ''' pass init '''
-
-
-class TestMyModule(unittest.TestCase):
- ''' a group of related Unit Tests '''
-
- def setUp(self):
- self.mock_module_helper = patch.multiple(basic.AnsibleModule,
- exit_json=exit_json,
- fail_json=fail_json)
- self.mock_module_helper.start()
- self.addCleanup(self.mock_module_helper.stop)
- self.server = MockUMConnection()
- # whether to use a mock or a simulator
- self.onbox = False
-
- def set_default_args(self):
- if self.onbox:
- hostname = '10.10.10.10'
- username = 'admin'
- password = 'password'
- else:
- hostname = 'hostname'
- username = 'username'
- password = 'password'
- return dict({
- 'hostname': hostname,
- 'username': username,
- 'password': password,
- })
-
- def test_module_fail_when_required_args_missing(self):
- ''' required arguments are reported as errors '''
- with pytest.raises(AnsibleFailJson) as exc:
- set_module_args({})
- my_module()
- print('Info: %s' % exc.value.args[0]['msg'])
-
- @patch('ansible_collections.netapp.um_info.plugins.modules.na_um_volumes_info.NetAppUMVolume.get_volumes')
- def test_ensure_list_volumes_get_called(self, get_volumes):
- ''' fetching details of volumes '''
- set_module_args(self.set_default_args())
- my_obj = my_module()
- my_obj.server = self.server
- my_obj.get_volumes = Mock(return_value=SRR['get_volumes'])
- with pytest.raises(AnsibleExitJson) as exc:
- my_obj.apply()
- assert exc.value.args[0]['changed']
-
- @patch('ansible_collections.netapp.um_info.plugins.modules.na_um_volumes_info.NetAppUMVolume.get_volumes')
- def test_ensure_get_called_existing(self, get_volumes):
- ''' test for existing volumes'''
- set_module_args(self.set_default_args())
- my_obj = my_module()
- my_obj.get_volumes = Mock(return_value=SRR['get_volumes'])
- assert my_obj.get_volumes() is not None
-
- @patch('ansible_collections.netapp.um_info.plugins.module_utils.netapp.UMRestAPI.send_request')
- def test_get_next(self, mock_request):
- ''' test for existing volumes'''
- set_module_args(self.set_default_args())
- mock_request.side_effect = [
- SRR['get_next'],
- SRR['get_data'],
- SRR['end_of_sequence'],
- ]
- my_obj = my_module()
- assert my_obj.get_volumes() is not None
-
- @patch('ansible_collections.netapp.um_info.plugins.module_utils.netapp.UMRestAPI.send_request')
- def test_negative_get_next(self, mock_request):
- ''' test for existing volumes'''
- set_module_args(self.set_default_args())
- mock_request.side_effect = [
- SRR['get_next'],
- SRR['get_data_missing_field'],
- SRR['end_of_sequence'],
- ]
- my_obj = my_module()
- with pytest.raises(AnsibleFailJson) as exc:
- my_obj.get_volumes() is not None
- print(exc.value.args[0])
- msg = 'unexpected response from datacenter/storage/volumes'
- assert msg in exc.value.args[0]['msg']
- msg = "expecting key: 'total_records'"
- assert msg in exc.value.args[0]['msg']
diff --git a/ansible_collections/netapp/um_info/tests/unit/requirements.txt b/ansible_collections/netapp/um_info/tests/unit/requirements.txt
deleted file mode 100644
index b754473a9..000000000
--- a/ansible_collections/netapp/um_info/tests/unit/requirements.txt
+++ /dev/null
@@ -1 +0,0 @@
-requests ; python_version >= '2.7'
diff --git a/ansible_collections/netbox/netbox/CHANGELOG.rst b/ansible_collections/netbox/netbox/CHANGELOG.rst
index f215a59a2..0d71beeb4 100644
--- a/ansible_collections/netbox/netbox/CHANGELOG.rst
+++ b/ansible_collections/netbox/netbox/CHANGELOG.rst
@@ -5,6 +5,28 @@ NetBox.NetBox Release Notes
.. contents:: Topics
+v3.18.0
+=======
+
+Minor Changes
+-------------
+
+- nb_inventory - Add Virtual Disks to inventory [#1188](https://github.com/netbox-community/ansible_modules/pull/1188)
+- nb_inventory - Don't extract null values from custom fields [#1184](https://github.com/netbox-community/ansible_modules/pull/1184)
+- 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)
+- 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_power_port - Add label [#1202](https://github.com/netbox-community/ansible_modules/pull/1202)
+
+New Modules
+-----------
+
+- 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
+
v3.17.0
=======
diff --git a/ansible_collections/netbox/netbox/FILES.json b/ansible_collections/netbox/netbox/FILES.json
index 31bb9f489..2c8ac1942 100644
--- a/ansible_collections/netbox/netbox/FILES.json
+++ b/ansible_collections/netbox/netbox/FILES.json
@@ -8,1095 +8,1144 @@
"format": 1
},
{
- "name": "README.md",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f2e837942f3d96fbf5ac0daeb978d7eb1923afff1e9ec95d24c7b3da6bafa83a",
+ "name": "docs",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "meta",
+ "name": "docs/_static",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "meta/runtime.yml",
+ "name": "docs/_static/pygments.css",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5742535b21567fde06f1ba82a282b5878359e62719b6bdefcdd235bc64b4407c",
+ "chksum_sha256": "74318b36e2302111536796af5aa86a9ceab09faa3eedc3e7d28878b8751896d6",
"format": 1
},
{
- "name": "meta/execution-environment.yml",
+ "name": "docs/_static/ansible.css",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0cd0b966cbb8fefb00f7122190d7a9b42dc5da517a8c5ba9d86e34c51bc3e43a",
+ "chksum_sha256": "0787ca656847c399975c5cca01be77f08d4ff9344b87bec1c1ba1aaa3cff56a8",
"format": 1
},
{
- "name": "poetry.lock",
+ "name": "docs/Makefile",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4d9e809d203b13d8502ee83bb29f0f7e23e2ce05fb1f26206fe540858b1d4765",
+ "chksum_sha256": "8b6587b859607f200f116e2cb043fc358e1c3a26c326b563bf348453cfc68307",
"format": 1
},
{
- "name": "hacking",
+ "name": "docs/_extensions",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "hacking/build.sh",
+ "name": "docs/_extensions/pygments_lexer.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c824f229eafb4ad8fcc24c800b6d08ad8af1c8ca866e9cdbfd543429b2a04a24",
+ "chksum_sha256": "b5efd3823b3470001b252cb0f6970477bfc191a884b1a8aaeca235e02570575a",
"format": 1
},
{
- "name": "hacking/update_test_inventories.sh",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c02406514a0a53c1328f5397a4df2aae6ed1096159a3a85db20e34b5c73acdbe",
+ "name": "docs/module_utils",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "hacking/black.sh",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "31b38a6d54cf7fd233d647760c6f9b695bde61762b09b0aba5899ea746d14248",
+ "name": "docs/module_utils/netbox_dcim",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "hacking/make-docs.sh",
+ "name": "docs/module_utils/netbox_dcim/index.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eaf25c88bd9a0d8d8b583c8f65bed04ce553749fe2949e2e07063fc420b08bbb",
+ "chksum_sha256": "aac738555b1754e47e6a3b632cde1a825c7af6f831382487ccad4eccc8910f13",
"format": 1
},
{
- "name": "hacking/local-test.sh",
+ "name": "docs/module_utils/netbox_extras",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "docs/module_utils/netbox_extras/index.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3c4c16322033b5df7c08d9081098e11416b3bbdebede263ba84a92c4f043d815",
+ "chksum_sha256": "91e0d05c958f3fd4bddd1f90fcffd40cb838ca9fe10ddb23fed96c96c29f925b",
"format": 1
},
{
- "name": "docs",
+ "name": "docs/module_utils/netbox_utils",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "docs/Makefile",
+ "name": "docs/module_utils/netbox_utils/index.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8b6587b859607f200f116e2cb043fc358e1c3a26c326b563bf348453cfc68307",
+ "chksum_sha256": "51b1dc879f2785c838a3a573ceeef3c09cf6d169d36f4e856d25cb60fde62463",
"format": 1
},
{
- "name": "docs/plugins",
+ "name": "docs/module_utils/netbox_circuits",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "docs/plugins/netbox_interface_module.rst",
+ "name": "docs/module_utils/netbox_circuits/index.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8b1ee003174219d0988e4d3bbc2946536c0be75a05754113baf615b9dc4f9f6a",
+ "chksum_sha256": "69b4f0147da11b460812a18e1a30c46cf783038607e8aa15b8104ebcf745971b",
"format": 1
},
{
- "name": "docs/plugins/netbox_provider_network_module.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7dd4dd18294c4181cf434f067b814e03991ee2a04ff2c48620a7621975b99c5e",
+ "name": "docs/module_utils/netbox_virtualization",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/plugins/netbox_aggregate_module.rst",
+ "name": "docs/module_utils/netbox_virtualization/index.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3117a4cbca9a193d408484262662363de6d017d22ee72d293d771898d19aeafd",
+ "chksum_sha256": "96fccbb031a84baaa22a47b0feca0bd05c5471eecaceb2908caf75f5d20384a4",
"format": 1
},
{
- "name": "docs/plugins/netbox_vlan_group_module.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e0f161c9c5d1a87ff64fca043e047b8d68730c1cd74a61ceb223942b87b8980e",
+ "name": "docs/module_utils/netbox_tenancy",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/plugins/netbox_console_port_module.rst",
+ "name": "docs/module_utils/netbox_tenancy/index.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "742b052daf2752d1efd0996d281fb28126966632d931cb23c337997c9196d79d",
+ "chksum_sha256": "d3aae8ae61995eda566696ff9322a02bcd663128520294b5dbcee6c2d7b62f71",
"format": 1
},
{
- "name": "docs/plugins/netbox_journal_entry_module.rst",
+ "name": "docs/module_utils/netbox_ipam",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "docs/module_utils/netbox_ipam/index.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c79a4f4a42bf2af1131e639eebdcb2b6504d01f4f8a7169e7f9e8d896a952f95",
+ "chksum_sha256": "5c83d597e8b57c1fc6e1b240b361802f04cf5b2b93ed5b163430c2ad2a25c700",
"format": 1
},
{
- "name": "docs/plugins/netbox_vrf_module.rst",
+ "name": "docs/module_utils/netbox_secrets",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "docs/module_utils/netbox_secrets/index.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "30d2caf69d8f8953f8f86d3519f7eb1f81a723d4a05ef27de48e30cbb45e9add",
+ "chksum_sha256": "8fe38c525cf5a8c333411a9c0266960fb55f3360ec7aaf981a0765d126326c89",
"format": 1
},
{
- "name": "docs/plugins/environment_variables.rst",
+ "name": "docs/module_utils/index.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8e05134cb38bd00d064befb99045c51ae4893762c86b0c2c3007cbc2665090bf",
+ "chksum_sha256": "b4fdf0597f752c618b999e67fb63624f430780bf693e4b2b408ab5666df9d1bd",
"format": 1
},
{
- "name": "docs/plugins/netbox_inventory_item_module.rst",
+ "name": "docs/js",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "docs/js/ansible",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "docs/js/ansible/application.js",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "faee09640da813d6086e85937013e4764d1a8078b77d3708665ec515461939db",
+ "chksum_sha256": "2a63425844f360eba3a0f4548933729f58ec6e6df6fbf1906bf2986e394cf149",
"format": 1
},
{
- "name": "docs/plugins/netbox_console_server_port_module.rst",
+ "name": "docs/conf.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cf61c5126b01a21a243655d776c1c88e9f68a4a56dfa6d8a4fcf4bf0f18cda9d",
+ "chksum_sha256": "cb3bc957fa2adf51bd249cf90fa963c9223be14357b27bafa65b8da76a15df32",
"format": 1
},
{
- "name": "docs/plugins/netbox_custom_field_module.rst",
+ "name": "docs/plugins",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "docs/plugins/netbox_cluster_group_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "77a1e89e0f434d33fba6ccafeba831d627587f5fb6b15bffa00dbaf323a52da2",
+ "chksum_sha256": "cf2aa826844f75d5442f4d72f0bac1ff40940173b7918fad8f2a2e6aa0132182",
"format": 1
},
{
- "name": "docs/plugins/netbox_rack_group_module.rst",
+ "name": "docs/plugins/netbox_site_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bfc9e8eb264a0ebe7ab0f853e6b8ae2865ae625e3bcd2b62282c9f856649cda4",
+ "chksum_sha256": "19594c11cbd212bc119272381f5a9f2680d1666f278394158ee4943e9c442534",
"format": 1
},
{
- "name": "docs/plugins/netbox_location_module.rst",
+ "name": "docs/plugins/netbox_contact_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7bebe6407f308470cd5ac2945f5716172d70410d3bff8cd51f0b09ddc2168fe6",
+ "chksum_sha256": "f3da0572391fe52cffbeeb7c21da524a4553c82023ecefb2250724f6d9c52df2",
"format": 1
},
{
"name": "docs/plugins/netbox_module_type_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d0bfa1d7d7a135540d85ddeee8b191b8744afe5cf47b25ddcacbd66cc35410dd",
+ "chksum_sha256": "791c805acdad6a7f881ce1095f89216dc9f795c99edeb84f9eb6c48716d1d1dc",
"format": 1
},
{
- "name": "docs/plugins/netbox_contact_role_module.rst",
+ "name": "docs/plugins/netbox_config_template_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a666d37130f1dac4b122c08391196c729b7fdda7df5da008a97de253ab05a5ea",
+ "chksum_sha256": "13597eb1a80e98fbcc6753bb3de6c4d8ccb69d214aad52443c311c3d8b17dcb0",
"format": 1
},
{
- "name": "docs/plugins/netbox_service_template_module.rst",
+ "name": "docs/plugins/netbox_interface_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cedeba1b25484b505b2696ae00726ab565379c5ad59dd711696a268d77f1c7a7",
+ "chksum_sha256": "a81f1860d8e8bf8b1c437ba16c9939419a4ba695ed228f0c726b5944c3690ab3",
"format": 1
},
{
- "name": "docs/plugins/netbox_power_outlet_module.rst",
+ "name": "docs/plugins/netbox_power_port_template_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "422bec7c354874701cf27041f70a173dcd097a3fcc56e9922153be62622790e6",
+ "chksum_sha256": "ec264ee717d0d32c697abc10ed886848c4ba386e1094eefd588bcb2411b8b07b",
"format": 1
},
{
- "name": "docs/plugins/netbox_device_type_module.rst",
+ "name": "docs/plugins/netbox_circuit_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ceb4fcf5679772bc5ffd61ca1e1ebb0713e7b51bef15e8f017af319166a4ae6e",
+ "chksum_sha256": "62ff17ad56ca1ae51bdd2772eac51d1424d29b5b11281d11e4af45d10aec20fd",
"format": 1
},
{
- "name": "docs/plugins/netbox_power_port_template_module.rst",
+ "name": "docs/plugins/netbox_inventory_item_role_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b17e5a740aabcd148621da01f031492ea03c86e717d6a9b74aef4c0e6f9cac5d",
+ "chksum_sha256": "d65116e3a0e0d71b1faa8338a40f7f13df4eaeb0804d8530eb1618207daf3ce3",
"format": 1
},
{
- "name": "docs/plugins/netbox_virtual_disk_module.rst",
+ "name": "docs/plugins/netbox_fhrp_group_assignment_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "39d383b32830926403dc6bbe5cd2e6ce745a47a59ae5af6519260e48b0bff618",
+ "chksum_sha256": "069b71f5e27cb50477765f8f648c9e8d2b488596699396089ff2346383011e78",
"format": 1
},
{
- "name": "docs/plugins/netbox_tenant_group_module.rst",
+ "name": "docs/plugins/netbox_virtual_disk_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ad82f9dc01cdac42fc0ae49e04d86237d173086c681f7067a51ceddd5ab49b47",
+ "chksum_sha256": "3c7c2700a0266a0d81beb53b8c35bc840aa153613318c6cafa7b4103100f90e8",
"format": 1
},
{
- "name": "docs/plugins/netbox_vlan_module.rst",
+ "name": "docs/plugins/netbox_export_template_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "977ffed85195f3d055517fac2e584b7f05c7a2315d8f61aa13e25678ae45a97b",
+ "chksum_sha256": "00924f4f3f26fe9127ad6a20336a102c7e5be0a6c242e6a3137c51e6928619cc",
"format": 1
},
{
- "name": "docs/plugins/netbox_console_port_template_module.rst",
+ "name": "docs/plugins/netbox_virtual_machine_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9e5ca89c399a6c3691f5b140c41e4274855c8dcef002fbcd7c41f15e9dc83b1b",
+ "chksum_sha256": "a3d75b052e02c931b24cf7dd04b7ca2246b0c43793f95f76b5d8d4f2e972269d",
"format": 1
},
{
- "name": "docs/plugins/netbox_cluster_type_module.rst",
+ "name": "docs/plugins/netbox_custom_link_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "db768003ce70b5636f1b2fb67e61f7ba8fa9e4a0100cb0dd522f38b270521895",
+ "chksum_sha256": "fd7b23c3ab8e0ddeeea98d8bb9233893a5938e813cc3f35ecb667a9d486d44e5",
"format": 1
},
{
- "name": "docs/plugins/netbox_device_role_module.rst",
+ "name": "docs/plugins/netbox_contact_group_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "477d6e31d9855565b8f432e918a9ca5142467010b329c66a5fbc617a6d23c440",
+ "chksum_sha256": "a2837c6859dfdba133cf1b54259061dbff734f918a2b3d5276c38209283dca4c",
"format": 1
},
{
- "name": "docs/plugins/netbox_tenant_module.rst",
+ "name": "docs/plugins/netbox_platform_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2ce0205f7b9fd4a5fb1c42d48a362a3713510f50ab61f97508d225080e8c198d",
+ "chksum_sha256": "9b1ce38fabb69418ced65ac491b00d9087171972d4fe42a35687091f6041a417",
"format": 1
},
{
- "name": "docs/plugins/netbox_circuit_type_module.rst",
+ "name": "docs/plugins/netbox_contact_role_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f4a74aa192af85e54c5e67397f5325b78aa93c431742bb97aa808aea8a7735f3",
+ "chksum_sha256": "e3df2ce4f83ad06c0073f397497708a99b1103923932eb51d73c9b5f31eb1549",
"format": 1
},
{
- "name": "docs/plugins/netbox_circuit_module.rst",
+ "name": "docs/plugins/nb_inventory_inventory.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0a588ec9aee458dca440967a619ff28c707a5ae2da4c7efbdba3fae1b2c5885e",
+ "chksum_sha256": "a87d71fbc237548249843da9018028e39e249ed79346551b5a9a0fd8ed06856b",
"format": 1
},
{
- "name": "docs/plugins/netbox_cable_module.rst",
+ "name": "docs/plugins/netbox_wireless_lan_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ba7a4e04b66fc49fd53a1fc374a021650c310a4e6da265b45c5117f6c2bb8190",
+ "chksum_sha256": "1908bd1628eb49750019c31ac5356f74c512e95e29ea5ddde054ee63a320d32f",
"format": 1
},
{
- "name": "docs/plugins/netbox_platform_module.rst",
+ "name": "docs/plugins/netbox_vlan_group_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d8058259a7011ea7dcfcf6fccbdf03830d10537fa150f392a137cf1d0dd7efc6",
+ "chksum_sha256": "744574598f8b98ec0ef926dc2a625ec365630769040cf762ddd5546f9899b41c",
"format": 1
},
{
- "name": "docs/plugins/netbox_rir_module.rst",
+ "name": "docs/plugins/netbox_vlan_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e31623dd57bd16689746ce07643890344a7c25d95b5fe881e603163180a9e510",
+ "chksum_sha256": "ec4bc435f50cc6a504140960df1f73aa3559c3b2b09c80996532be3073b4e117",
"format": 1
},
{
- "name": "docs/plugins/netbox_ipam_role_module.rst",
+ "name": "docs/plugins/netbox_power_port_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a749c27881b5c5131e8f0f2fedbd0a2345933c16795c52b72ef04ed01cc32cdd",
+ "chksum_sha256": "2c7dedd266fec7cb07f5fe55f762f835dd92eb586f108c4c1fda40c8d3ac5116",
"format": 1
},
{
"name": "docs/plugins/netbox_device_bay_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d1c1aa631f6e3ec6f7a653bb32cae9cdb09f2703cb1dc9f87787454e33adcb62",
+ "chksum_sha256": "725a28bd7995f5bc8f771c66705951e1002b2f4b20b2a3a68ffc08ac41dbed3f",
"format": 1
},
{
- "name": "docs/plugins/netbox_power_panel_module.rst",
+ "name": "docs/plugins/netbox_circuit_termination_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "93ae5f34d6bef4db5970288ca12a4483b0bfca72abb8b2f374e2d22a19cf5d36",
+ "chksum_sha256": "ac99c0b5b43dadff11bc61c1d38df201a4e58d27bb99b9bd4d60992347d48d38",
"format": 1
},
{
- "name": "docs/plugins/netbox_cluster_group_module.rst",
+ "name": "docs/plugins/netbox_site_group_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3df4b649990b74ef6679564b13831995828c4d0456e9fe50151b7d7beaffbbca",
+ "chksum_sha256": "b9afac864612171a6cf4737e8667f327f2d86e851859558e957e5192f226def6",
"format": 1
},
{
- "name": "docs/plugins/netbox_device_bay_template_module.rst",
+ "name": "docs/plugins/netbox_device_interface_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "591a171e28acb28ff26a90f47e87c0278efccb4c0a1ffa2c8b573ddcf89b8564",
+ "chksum_sha256": "09449a2832be423140eb4a7e1723431781506f0f134c9257d6b89f1bdfb8f227",
"format": 1
},
{
- "name": "docs/plugins/netbox_service_module.rst",
+ "name": "docs/plugins/netbox_ip_address_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3a2027edc57c4ee8be068152fca8d0947efa48d385408777171562c3738ff472",
+ "chksum_sha256": "78f4a78f16fbad0eda34bf20b7f23d8848a449140d7edf69d6ed4bccf6a64bc7",
"format": 1
},
{
- "name": "docs/plugins/nb_lookup_lookup.rst",
+ "name": "docs/plugins/netbox_device_interface_template_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4637137994803c8871ee65ef5def1582c5f2700be5f35777d0664780aacb2cd9",
+ "chksum_sha256": "bf997dc224bfc2493fdb2ba522c40536e84ad7e278f186096232489d945310dd",
"format": 1
},
{
- "name": "docs/plugins/netbox_wireless_lan_group_module.rst",
+ "name": "docs/plugins/netbox_circuit_type_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f2c6a40045ff6da8c3866eb5842c9ac3a068f556fd87a961d0d954bed7ebd6b0",
+ "chksum_sha256": "a92878ea19f67e678ad76ab984848c02e59629f24f2477b3f60fe9cdc4a3564a",
"format": 1
},
{
- "name": "docs/plugins/netbox_inventory_item_role_module.rst",
+ "name": "docs/plugins/netbox_console_port_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b17a27795201878ff2d24a902edac6f31c7192a4ab721d35138e76669b56ecc5",
+ "chksum_sha256": "64bf8db93c7eac612edbeadfdeb160e0e44afb9fe171fe9cbec69211d4e2b7a9",
"format": 1
},
{
- "name": "docs/plugins/netbox_virtual_chassis_module.rst",
+ "name": "docs/plugins/netbox_rir_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ac04d10b7eabb653297b2c3a6dc14e60c2ef578cea9145d3d9df0ed888677c34",
+ "chksum_sha256": "95431e29dc63494e75c00a50edc7ef21a465590e2daf5615c438400524660bf4",
"format": 1
},
{
- "name": "docs/plugins/netbox_power_outlet_template_module.rst",
+ "name": "docs/plugins/netbox_console_server_port_template_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "44150de65f722b99fd7cfcb9b8118f854a7716333f8fc14e4fe1a8e782189a86",
+ "chksum_sha256": "56f7d2539820da217c188d7737a045fa22cb24088d06dff47767c1526ea93bcb",
"format": 1
},
{
"name": "docs/plugins/netbox_front_port_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9246cffb9a737246de04857b93fce9dedc5d9a0cf3db12096e2e90f2cb6ad605",
+ "chksum_sha256": "0e89863e1559c49a3ffa7c0425b4b94a33cfa19c099ac61aa778ec73b1c45f9a",
"format": 1
},
{
- "name": "docs/plugins/netbox_rack_role_module.rst",
+ "name": "docs/plugins/netbox_wireless_lan_group_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0e8c964521a14469d4e5fc793faddfda3dccb0652ddc3e506c89ce1228dba463",
+ "chksum_sha256": "4bf98e78fa29ea2bc047dc7ce54ab84dae42ad7ffdb7923b90e1f0a2c39342ef",
"format": 1
},
{
- "name": "docs/plugins/netbox_cluster_module.rst",
+ "name": "docs/plugins/netbox_power_outlet_template_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "23efee62f3e13e9f86446629edcc707cd1368a41560276d635949961223dd52f",
+ "chksum_sha256": "558ae4f998b33362ceaa13e13554851381bce8d991e440adccb9676777605827",
"format": 1
},
{
- "name": "docs/plugins/netbox_device_interface_module.rst",
+ "name": "docs/plugins/netbox_prefix_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f8dc376207c5689e7c08ca75a0c05d875fd16465dc0016676b267ae32f18f5ee",
+ "chksum_sha256": "303c492974bb9bd45ceb30c9d026b88738984d11435aa5ee9fe68fb19fc60641",
"format": 1
},
{
- "name": "docs/plugins/netbox_route_target_module.rst",
+ "name": "docs/plugins/netbox_console_server_port_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a73849a23d99c9c1f35fbbb6e44d5bed8c9b49e3237872465d5c5acc038a7fa8",
+ "chksum_sha256": "2e42e32c6c2964aacce8f72f4c33413c8435f62419876470f07b39c220baf0d2",
"format": 1
},
{
- "name": "docs/plugins/netbox_circuit_termination_module.rst",
+ "name": "docs/plugins/netbox_provider_network_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e0384717f28de4787cd563deb19f1b09b8b27ee14212d87ac1d94a96708f16a6",
+ "chksum_sha256": "d62c04a676687c7a396b1e1cd11375059b2b08341b034fdfa21a750d89bed2c2",
"format": 1
},
{
- "name": "docs/plugins/netbox_config_context_module.rst",
+ "name": "docs/plugins/netbox_rack_group_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b70438be1de22c60ae3464a6b43fa42103652de2e7c0d101538db128698f2184",
+ "chksum_sha256": "02f174938f3cd714a280849e728af82d5e40f8946881566743694bb38f4f38b9",
"format": 1
},
{
- "name": "docs/plugins/netbox_webhook_module.rst",
+ "name": "docs/plugins/netbox_tag_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6e092c2595b07ec4ad59f893fcfe945e15ed413990ccde9d1be5120ad89b0bd9",
+ "chksum_sha256": "61930da19d2da3f04b674dd2bf14dc5c31965453947c046f7985ad95d829777a",
"format": 1
},
{
- "name": "docs/plugins/netbox_ip_address_module.rst",
+ "name": "docs/plugins/environment_variables.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a99798627580a7dea452eb180de72177461ad85f5d6010a412225066be303f70",
+ "chksum_sha256": "8e05134cb38bd00d064befb99045c51ae4893762c86b0c2c3007cbc2665090bf",
"format": 1
},
{
- "name": "docs/plugins/netbox_prefix_module.rst",
+ "name": "docs/plugins/netbox_journal_entry_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e45d40b747a42bff1b69c2d1ffdfa22c1f56037a68558834c1ea11a4391bc13a",
+ "chksum_sha256": "b155ca58fe8c0eecf86f6471618d025a401b843dbc32b648e30834c50c728576",
"format": 1
},
{
- "name": "docs/plugins/netbox_manufacturer_module.rst",
+ "name": "docs/plugins/netbox_rack_role_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "37223798e5871f4660cca5da1039aa4b53c966c6d46a78c2232160417a15779c",
+ "chksum_sha256": "33147df9be51239a74cd04be29591aa12af8fc4c5fa602b0310ea160fa3235a7",
"format": 1
},
{
"name": "docs/plugins/netbox_front_port_template_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9564a7d2175a280e7409b81a963edb9f0f45c69576da8b33920a6e4011e03d73",
+ "chksum_sha256": "ff39b04c1e1ece028987ddf17c968a9294c3f7ae94ab19df5d5084f1240d29c7",
"format": 1
},
{
- "name": "docs/plugins/netbox_device_interface_template_module.rst",
+ "name": "docs/plugins/netbox_config_context_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ee1023ba3a0b7c3dbd77ca5c10e1aa0a3ac19b34230a6dbbc53ba655b2566e8d",
+ "chksum_sha256": "a0f5225ac1bdc2df393b60ffccefa824e198d2e5908880a00411b5d14b8cd0b8",
"format": 1
},
{
- "name": "docs/plugins/nb_inventory_inventory.rst",
+ "name": "docs/plugins/netbox_power_feed_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f4b4b23f81eb6b010f94f532b23b1301079d899412edd7e31a0a3d28b1919277",
+ "chksum_sha256": "dba1d5783c9f6582967775edaa73c282e6af425bdf004a574f5e370cf1d4a2aa",
"format": 1
},
{
- "name": "docs/plugins/netbox_wireless_lan_module.rst",
+ "name": "docs/plugins/netbox_webhook_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9e5b7cf1de76a029da6b63bc9a3193ee990d9b0206105af025c4bc3eba3fb6d5",
+ "chksum_sha256": "1d7c55e0270f60ee122a111ba5fd0875aa3ab2ebcea597d3f91d1a3952b35285",
"format": 1
},
{
- "name": "docs/plugins/netbox_rack_module.rst",
+ "name": "docs/plugins/nb_lookup_lookup.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bf56e131e59449bfdb6e34ed4995edd21abd87e212f549caf44aa1d2ff74c360",
+ "chksum_sha256": "818598e0d2adb534fd1901b797761e5ad3b4e4189a09ecda43c1f5aef801c5f9",
"format": 1
},
{
- "name": "docs/plugins/netbox_vm_interface_module.rst",
+ "name": "docs/plugins/netbox_custom_field_choice_set_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a892d45101e8f4d9422310fe4794f0adc3c53f599e47bd7d891c15bb7af98f3b",
+ "chksum_sha256": "c7a2cf9f6db482f6cd1687b12cea0bd4154644ea77620b98b60b176df4607e99",
"format": 1
},
{
- "name": "docs/plugins/netbox_console_server_port_template_module.rst",
+ "name": "docs/plugins/netbox_location_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cd3d7c25fb2c4edf351d000af9259e3d89b582a78d0d889258d66041c065eee3",
+ "chksum_sha256": "1f967b168c78229a485447184b600ea0a6993262921e82516d3594191c98a340",
"format": 1
},
{
- "name": "docs/plugins/index.rst",
+ "name": "docs/plugins/netbox_ipam_role_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "76851157d09c465cd36f14c20e29d880df27ea53d613326c6fb13c17f713dc96",
+ "chksum_sha256": "d7aeea61eeed4d231e037b266922cbd33e765fe360f5094c6871b771bb22c9c2",
"format": 1
},
{
- "name": "docs/plugins/netbox_l2vpn_module.rst",
+ "name": "docs/plugins/netbox_device_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "54b2d87e265914f4126eaf60b962497db83cf1719907ec2b0a715340dc8373a2",
+ "chksum_sha256": "d75b3885f4fb5c283b8bf7593242e9661d124becb93300d4b75f759cce73c25e",
"format": 1
},
{
- "name": "docs/plugins/netbox_contact_group_module.rst",
+ "name": "docs/plugins/netbox_asn_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f4804ff1a12e072d2e9debe28addb0673d3f4b9c87b1f613f293bd1806b173b3",
+ "chksum_sha256": "8a1b05764239c3ab2cab75bbd24f5a7f3a79c340b87d1f56712e980fc7f95aed",
"format": 1
},
{
- "name": "docs/plugins/netbox_rear_port_module.rst",
+ "name": "docs/plugins/netbox_wireless_link_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2cb9fb0ac72694b6e956e8d0202159c5e83d3ca14bafa27c462c9c7206fb6e25",
+ "chksum_sha256": "ffe0caf6aca220cac8554ef400bba82f4035cbcc1cf4e9eaeabcfe7502603c57",
"format": 1
},
{
- "name": "docs/plugins/netbox_wireless_link_module.rst",
+ "name": "docs/plugins/netbox_virtual_chassis_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a8643b997f185154cd366b618b3804cf4581d87268a61d4547e463078ce988af",
+ "chksum_sha256": "faf9d732a702f2c0ad630adf7a8f79066b871bd05fcc005f8807daecd593a396",
"format": 1
},
{
- "name": "docs/plugins/netbox_virtual_machine_module.rst",
+ "name": "docs/plugins/netbox_vm_interface_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1b95d1c84ed0b1e0f8457b68bf16730d8b01741da5aaffff76675677e29c6f60",
+ "chksum_sha256": "a8eaaee3abde466f051bf43bd0b19844b486294849a1d1fc648109ba7b37fc42",
"format": 1
},
{
- "name": "docs/plugins/netbox_contact_module.rst",
+ "name": "docs/plugins/netbox_device_role_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fdf220079d330de0c975e40e910ab5712aa2cd2b3ea1d1c122660169b2eb164e",
+ "chksum_sha256": "2ab9666e0164ef9e74ca5e2d0c8f1ff5cf2a372b8fd0c201dcb33311df8410d6",
"format": 1
},
{
- "name": "docs/plugins/netbox_region_module.rst",
+ "name": "docs/plugins/netbox_device_bay_template_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3081a33073ba07bb19f9db2f753557666ba9c79663974260d318e2d50145677f",
+ "chksum_sha256": "0a48a6ba3021c670e5eaf5d867a6c228c98fe0cb575420afb3bf9a510ead0e59",
"format": 1
},
{
- "name": "docs/plugins/netbox_site_group_module.rst",
+ "name": "docs/plugins/netbox_aggregate_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d68757a1904608924338a8e7574b3a4037f951b819da4f47e3cf3cbd3a2c54fd",
+ "chksum_sha256": "fff2b35c0f41a6af911dbb64b25fdae3e5df9ddbdb26830bb67d014d3850d0a4",
"format": 1
},
{
- "name": "docs/plugins/netbox_provider_module.rst",
+ "name": "docs/plugins/netbox_rack_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "664adf5c65bbc7222d100cef36cb66d0461c2146f8f3855aaaaf8d18cae52e5b",
+ "chksum_sha256": "17df26c35c2238f9a8c58462a8ad30f34ac67c52e686a86c98811c0aef06e7ca",
"format": 1
},
{
- "name": "docs/plugins/netbox_tag_module.rst",
+ "name": "docs/plugins/netbox_cluster_type_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fba0be182e033b9c64e2c3190b97e172e6af8117187a400e78b5e1b3c865d53d",
+ "chksum_sha256": "a0eca272ddee6ffceee29cb095cdd4dbb1e29e007e50a3444c16b0e936d8df3a",
"format": 1
},
{
- "name": "docs/plugins/netbox_power_feed_module.rst",
+ "name": "docs/plugins/netbox_cluster_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fe252254ac2ba0c45c9b5a3ec138ed18eb176991cd25a4da169b300109df77d7",
+ "chksum_sha256": "b8d0e1c0e7ef3e92e07f7fde274ed2102fcaf932571fdb81295de788014eccd0",
"format": 1
},
{
- "name": "docs/plugins/netbox_l2vpn_termination_module.rst",
+ "name": "docs/plugins/netbox_module_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "76c9b4a79082f004c4cb6fe6b91b15d3bc8dd28268795b049accdb7c40cb728e",
+ "chksum_sha256": "f3e47912adeabef8e593d54d3825b60f37a232e9796093b01cf8743bcc2453a6",
"format": 1
},
{
- "name": "docs/plugins/netbox_rear_port_template_module.rst",
+ "name": "docs/plugins/netbox_region_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7e37bfe3e8f22147d2899eef16cd85e407be55f4a2c18588f6b60eaa59cf12a0",
+ "chksum_sha256": "8f319c3b75e123423b049eab47ee2c050a9d54f963c571f09aea82ef9325227d",
"format": 1
},
{
- "name": "docs/plugins/netbox_site_module.rst",
+ "name": "docs/plugins/netbox_manufacturer_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8f0f90835cd52bafa90d802a543ab8e8dfe6df712e8a6f777004e668022b107e",
+ "chksum_sha256": "a557d6b6a9eeaefa5f65be4a0eabee6077a311896e01508b12f9374ad3076332",
"format": 1
},
{
- "name": "docs/plugins/netbox_power_port_module.rst",
+ "name": "docs/plugins/netbox_module_bay_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9b32a32a9b62f76b898eec7e5df257b5c0ed42fb0ccaad1fe4437c592eec5c0f",
+ "chksum_sha256": "2e75ac555fd8d421965cb3f210110dd0c7000155480d42b1631df0d41c346118",
"format": 1
},
{
- "name": "docs/plugins/netbox_export_template_module.rst",
+ "name": "docs/plugins/netbox_inventory_item_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "40bcb84b5a7333221d0f3a53e7ba29d80929928791ad5df42e02c834d3bffb19",
+ "chksum_sha256": "86acffad7be0dc8d7e7996f5acb73741c70ccadb32608f756d2a5845f772cb6a",
"format": 1
},
{
- "name": "docs/plugins/netbox_fhrp_group_module.rst",
+ "name": "docs/plugins/netbox_provider_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "630b5cb20930a657e0414eb442c79af47d7e3df1cea49e67ec2c9ad156854584",
+ "chksum_sha256": "5ce40cbac9917a243e1365b342a083b7c7438ecf3844f634b25415dfd4680907",
"format": 1
},
{
- "name": "docs/plugins/netbox_fhrp_group_assignment_module.rst",
+ "name": "docs/plugins/netbox_l2vpn_termination_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6d872c77fad57e170fb44ef29b42f84b14fa7329ab19888027d2849671fef222",
+ "chksum_sha256": "984e86e689629a4e3090a5cfcb61f3ed77f3ec67c61a74a8a6d613cb4e7f9d03",
"format": 1
},
{
- "name": "docs/plugins/netbox_custom_link_module.rst",
+ "name": "docs/plugins/netbox_route_target_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "763dcf531428cd560835cb371f3d09c837002cd788d079427dd4827fb6732b6e",
+ "chksum_sha256": "5ee160f6811124acc96c06b0ccc77737fd4d87c9052c4c793895567125a5496d",
"format": 1
},
{
- "name": "docs/plugins/netbox_asn_module.rst",
+ "name": "docs/plugins/netbox_console_port_template_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "643e99881d7cab16101c6a3304bcadf1354c2b8ab583bdcadb50129d66a6dd7d",
+ "chksum_sha256": "8344beaa34b81f73d28dd709d397ef48a1dc9070cfdebdd462344fc95c3d5062",
"format": 1
},
{
- "name": "docs/plugins/netbox_config_template_module.rst",
+ "name": "docs/plugins/netbox_power_panel_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ddba4fb985b7f8a3e658132ba19f41c90f1c820e72d7edf9a5b29debb72ff305",
+ "chksum_sha256": "43e32df6b480501bf093edb8a3cc25c7d03f53eed96f644024552361d31c0add",
"format": 1
},
{
- "name": "docs/plugins/netbox_device_module.rst",
+ "name": "docs/plugins/index.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "425a77d17d98b9dbddc11c6f0958010a9fae2f59a515378097d2291736ee4ad4",
+ "chksum_sha256": "ec1b374e3b70b7b3a02df485bba028d6ec5e45ddeb233c9232ce2d10b4006841",
"format": 1
},
{
- "name": "docs/_static",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "docs/plugins/netbox_device_type_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7542f9f79902aa07467958a249f70774475de367860867143e3b15c84fecc578",
"format": 1
},
{
- "name": "docs/_static/ansible.css",
+ "name": "docs/plugins/netbox_fhrp_group_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0787ca656847c399975c5cca01be77f08d4ff9344b87bec1c1ba1aaa3cff56a8",
+ "chksum_sha256": "59a88a6dd875b6cf337c3c8c2c51b8a49cf0aa21b61af531aa90960d07bf4cfa",
"format": 1
},
{
- "name": "docs/_static/pygments.css",
+ "name": "docs/plugins/netbox_rear_port_template_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "74318b36e2302111536796af5aa86a9ceab09faa3eedc3e7d28878b8751896d6",
+ "chksum_sha256": "61930a5ec4e1be9082356a247ff0c3cf7eb4dade7e1b46cd390c9c49c8792a44",
"format": 1
},
{
- "name": "docs/media",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "docs/plugins/netbox_l2vpn_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a098ba7976b24e5d6fd8a6e4e4eda80a9fc09b089181be08d9cd5912b6c37b70",
"format": 1
},
{
- "name": "docs/media/postresults.PNG",
+ "name": "docs/plugins/netbox_service_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "12ce503f9c545a573466e75cf028f316afc893e41f056be1ce6838b44db49537",
+ "chksum_sha256": "00331d976747c19b54821c23896ed3459b7c0e4b5366caef66f85272bb478a6c",
"format": 1
},
{
- "name": "docs/requirements.txt",
+ "name": "docs/plugins/netbox_tenant_group_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "39988308e7ae66376608418d13d7979ccd50fcdc3e1c3439912ff9943c210ca3",
+ "chksum_sha256": "35782c3d41dde663c3717b6efb2865f222197ba4cfcd30df916c9adb0c263cdd",
"format": 1
},
{
- "name": "docs/conf.py",
+ "name": "docs/plugins/netbox_rear_port_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "168e6b7c4aea8566d27a5c689d5b8d703a5e36ef1cba4f7fd6838d1fbc608c5a",
+ "chksum_sha256": "34b6bcbd2c3a4e1f2f290cecd7954c4559608553da463eec43348700b9f8d4c1",
"format": 1
},
{
- "name": "docs/changelog",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "docs/plugins/netbox_power_outlet_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "449175237c724791a885357b4069b6ed82132af8a9b142de0fa372ea6f4b8567",
"format": 1
},
{
- "name": "docs/changelog/changelog_include.rst",
+ "name": "docs/plugins/netbox_vrf_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d8a74a8989015f6ff8f2e9c52c07518770e91dd69c81b078eec816aafc8ab9a2",
+ "chksum_sha256": "c3bab4899887b45e9db3bd047082ea7d098e4bbbed22e16837d7c985589a1d97",
"format": 1
},
{
- "name": "docs/changelog/index.rst",
+ "name": "docs/plugins/netbox_service_template_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1831a65ac37c6d38d1024a11f051b0fb19e95123b9372436ea5d6fd366fe8c54",
+ "chksum_sha256": "a33217682a2e9a2a1bd6ac5faa812cd31a3087f0857c2703d4178945f8645185",
"format": 1
},
{
- "name": "docs/_extensions",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "docs/plugins/netbox_tenant_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "545b497d6afb011f8e33794b9ebd048037fa59b55e2425c64f01454e26d93f55",
"format": 1
},
{
- "name": "docs/_extensions/pygments_lexer.py",
+ "name": "docs/plugins/netbox_cable_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b5efd3823b3470001b252cb0f6970477bfc191a884b1a8aaeca235e02570575a",
+ "chksum_sha256": "68a3565de27944eeaaf30adc7026f2cabcbfcdfd1fe9fdc517449719333834d5",
"format": 1
},
{
- "name": "docs/js",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "docs/plugins/netbox_custom_field_module.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "aecd88621418419ab133803c3d1d09f14a287508abfed9fd819514a2dca2c539",
"format": 1
},
{
- "name": "docs/js/ansible",
+ "name": "docs/requirements.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "39988308e7ae66376608418d13d7979ccd50fcdc3e1c3439912ff9943c210ca3",
+ "format": 1
+ },
+ {
+ "name": "docs/changelog",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "docs/js/ansible/application.js",
+ "name": "docs/changelog/changelog_include.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2a63425844f360eba3a0f4548933729f58ec6e6df6fbf1906bf2986e394cf149",
+ "chksum_sha256": "d8a74a8989015f6ff8f2e9c52c07518770e91dd69c81b078eec816aafc8ab9a2",
"format": 1
},
{
- "name": "docs/module_utils",
+ "name": "docs/changelog/index.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1831a65ac37c6d38d1024a11f051b0fb19e95123b9372436ea5d6fd366fe8c54",
+ "format": 1
+ },
+ {
+ "name": "docs/getting_started",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "docs/module_utils/netbox_extras",
+ "name": "docs/getting_started/how-to-use",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "docs/module_utils/netbox_extras/index.rst",
+ "name": "docs/getting_started/how-to-use/modules.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "91e0d05c958f3fd4bddd1f90fcffd40cb838ca9fe10ddb23fed96c96c29f925b",
- "format": 1
- },
- {
- "name": "docs/module_utils/netbox_dcim",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "77c91048d906e5cbd3a09cff4d53a02cb5f87014e854d209f3c482708ddb6a6b",
"format": 1
},
{
- "name": "docs/module_utils/netbox_dcim/index.rst",
+ "name": "docs/getting_started/how-to-use/advanced.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aac738555b1754e47e6a3b632cde1a825c7af6f831382487ccad4eccc8910f13",
+ "chksum_sha256": "21fbfd64d3127309d605716700a7c223fd419c9fc7256414e9dd8ff480330a49",
"format": 1
},
{
- "name": "docs/module_utils/netbox_circuits",
+ "name": "docs/getting_started/how-to-use/media",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "docs/module_utils/netbox_circuits/index.rst",
+ "name": "docs/getting_started/how-to-use/media/advanced_dict.png",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "69b4f0147da11b460812a18e1a30c46cf783038607e8aa15b8104ebcf745971b",
- "format": 1
- },
- {
- "name": "docs/module_utils/netbox_ipam",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "b0d011fef324a804f6cbb2778e65d69c6373c8123fac576d9f49072471a6e908",
"format": 1
},
{
- "name": "docs/module_utils/netbox_ipam/index.rst",
+ "name": "docs/getting_started/how-to-use/media/api_device_post.png",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5c83d597e8b57c1fc6e1b240b361802f04cf5b2b93ed5b163430c2ad2a25c700",
+ "chksum_sha256": "abdd29c2a0dc029c4aa6d4176b1a205dbc5d4d1f434d821e04b9a08a26175221",
"format": 1
},
{
- "name": "docs/module_utils/index.rst",
+ "name": "docs/getting_started/how-to-use/media/advanced_dns_name.png",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b4fdf0597f752c618b999e67fb63624f430780bf693e4b2b408ab5666df9d1bd",
+ "chksum_sha256": "3f4c6892f90e4b7a2ef8ce70fbe04c4c1cee8806d2aa37ffe09955045eb96bb2",
"format": 1
},
{
- "name": "docs/module_utils/netbox_utils",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "docs/getting_started/how-to-use/inventory.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7b28ca7e2a6cf1d0549a4eb2cafc901e3b2adfc449c3de6950bdf165daeb2b35",
"format": 1
},
{
- "name": "docs/module_utils/netbox_utils/index.rst",
+ "name": "docs/getting_started/installation.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "51b1dc879f2785c838a3a573ceeef3c09cf6d169d36f4e856d25cb60fde62463",
+ "chksum_sha256": "a4a35f73d6e5c37ffbc2e117b4c11a1f9ebeaa78d93b9c36efca62080792c7ca",
"format": 1
},
{
- "name": "docs/module_utils/netbox_tenancy",
+ "name": "docs/getting_started/contributing",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "docs/module_utils/netbox_tenancy/index.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d3aae8ae61995eda566696ff9322a02bcd663128520294b5dbcee6c2d7b62f71",
- "format": 1
- },
- {
- "name": "docs/module_utils/netbox_virtualization",
+ "name": "docs/getting_started/contributing/modules",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "docs/module_utils/netbox_virtualization/index.rst",
+ "name": "docs/getting_started/contributing/modules/new_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "96fccbb031a84baaa22a47b0feca0bd05c5471eecaceb2908caf75f5d20384a4",
+ "chksum_sha256": "6fac4851042c6541d5cd1ed9ead7c1fc2690a142254a1d069fcdd535d5de272e",
"format": 1
},
{
- "name": "docs/module_utils/netbox_secrets",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "docs/getting_started/contributing/modules/architecture.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ce74b06a64b3ab858744db7e940c2996aa102a159fcd97bec7191ee1ea78777f",
"format": 1
},
{
- "name": "docs/module_utils/netbox_secrets/index.rst",
+ "name": "docs/getting_started/contributing/modules/update_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8fe38c525cf5a8c333411a9c0266960fb55f3360ec7aaf981a0765d126326c89",
+ "chksum_sha256": "00c882e699b1094dc2996aa8a48bd9f824cd3e9ed97c626db7c4bd7df0af9c2f",
"format": 1
},
{
- "name": "docs/index.rst",
+ "name": "docs/getting_started/contributing/modules/index.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "13a5ee7e9853fc07707a7cdc745cb837c7b2ee852328f4b4c7ebcf6e3acb881b",
+ "chksum_sha256": "5158e3e659bafe06c7cd9d2897af6e7ac6209207d906fb4bb530b200b390832e",
"format": 1
},
{
- "name": "docs/getting_started",
+ "name": "docs/getting_started/contributing/modules/media",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "docs/getting_started/how-to-use.rst",
+ "name": "docs/getting_started/contributing/modules/media/post_rt.png",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "24afa8389fadeb19111920ff8dedfad7bbbe0cf54c9fefa238c564b8809a39e9",
+ "chksum_sha256": "7c5735f28bbce3e68418d44c9d799bfd9a546304ea826bc31e9da6604817ca51",
"format": 1
},
{
- "name": "docs/getting_started/contributing.rst",
+ "name": "docs/getting_started/contributing/modules/media/vrf_options.png",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7029fde832d231a3111e5484faac6759377430100b288bc14f6b2670c6022d73",
- "format": 1
- },
- {
- "name": "docs/getting_started/how-to-use",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "c04ff654c85e611c7968264f1596973cd6f28b6d48a71efcafa5a22f5c498daf",
"format": 1
},
{
- "name": "docs/getting_started/how-to-use/inventory.rst",
+ "name": "docs/getting_started/contributing/index.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7b28ca7e2a6cf1d0549a4eb2cafc901e3b2adfc449c3de6950bdf165daeb2b35",
+ "chksum_sha256": "08326dcd2935d4a33b028eb1dab2a5afda56afb802d9ca6c89e1a59c0c45afd2",
"format": 1
},
{
- "name": "docs/getting_started/how-to-use/media",
+ "name": "docs/getting_started/contributing/inventory",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "docs/getting_started/how-to-use/media/advanced_dict.png",
+ "name": "docs/getting_started/contributing/inventory/index.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b0d011fef324a804f6cbb2778e65d69c6373c8123fac576d9f49072471a6e908",
+ "chksum_sha256": "698639c0280fc8b9d8a8926baf2e53dbaff581600a4cc3f65cf9ecdc4dc19732",
"format": 1
},
{
- "name": "docs/getting_started/how-to-use/media/advanced_dns_name.png",
+ "name": "docs/getting_started/contributing.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3f4c6892f90e4b7a2ef8ce70fbe04c4c1cee8806d2aa37ffe09955045eb96bb2",
+ "chksum_sha256": "7029fde832d231a3111e5484faac6759377430100b288bc14f6b2670c6022d73",
"format": 1
},
{
- "name": "docs/getting_started/how-to-use/media/api_device_post.png",
+ "name": "docs/getting_started/index.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "abdd29c2a0dc029c4aa6d4176b1a205dbc5d4d1f434d821e04b9a08a26175221",
+ "chksum_sha256": "105990e8aebad3487a6e7174313bc26bc4138813416cd4c98c8157f158b6904c",
"format": 1
},
{
- "name": "docs/getting_started/how-to-use/advanced.rst",
+ "name": "docs/getting_started/how-to-use.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "21fbfd64d3127309d605716700a7c223fd419c9fc7256414e9dd8ff480330a49",
+ "chksum_sha256": "24afa8389fadeb19111920ff8dedfad7bbbe0cf54c9fefa238c564b8809a39e9",
"format": 1
},
{
- "name": "docs/getting_started/how-to-use/modules.rst",
+ "name": "docs/index.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "77c91048d906e5cbd3a09cff4d53a02cb5f87014e854d209f3c482708ddb6a6b",
+ "chksum_sha256": "13a5ee7e9853fc07707a7cdc745cb837c7b2ee852328f4b4c7ebcf6e3acb881b",
"format": 1
},
{
- "name": "docs/getting_started/installation.rst",
+ "name": "docs/media",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "docs/media/postresults.PNG",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4a35f73d6e5c37ffbc2e117b4c11a1f9ebeaa78d93b9c36efca62080792c7ca",
+ "chksum_sha256": "12ce503f9c545a573466e75cf028f316afc893e41f056be1ce6838b44db49537",
"format": 1
},
{
- "name": "docs/getting_started/contributing",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "LICENSE",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "605e9047a563c5c8396ffb18232aa4304ec56586aee537c45064c6fb425e44ad",
"format": 1
},
{
- "name": "docs/getting_started/contributing/inventory",
+ "name": ".github",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "docs/getting_started/contributing/inventory/index.rst",
+ "name": ".github/pull_request_template.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "698639c0280fc8b9d8a8926baf2e53dbaff581600a4cc3f65cf9ecdc4dc19732",
+ "chksum_sha256": "63489727d4197ef434809dfd6310bcb819a32864f5586f1b7f604338c3b86808",
"format": 1
},
{
- "name": "docs/getting_started/contributing/modules",
+ "name": ".github/workflows",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "docs/getting_started/contributing/modules/new_module.rst",
+ "name": ".github/workflows/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6fac4851042c6541d5cd1ed9ead7c1fc2690a142254a1d069fcdd535d5de272e",
+ "chksum_sha256": "88328c699e965b13d17597a87ff4e41dfe2011913d3b0463b83996a2e3eb1fa4",
"format": 1
},
{
- "name": "docs/getting_started/contributing/modules/architecture.rst",
+ "name": ".github/workflows/release.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ce74b06a64b3ab858744db7e940c2996aa102a159fcd97bec7191ee1ea78777f",
+ "chksum_sha256": "f60625361566d151303c75db858e6bdeec0d40f1caaf67c1cc832659b29285e4",
"format": 1
},
{
- "name": "docs/getting_started/contributing/modules/media",
+ "name": ".github/ISSUE_TEMPLATE",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "docs/getting_started/contributing/modules/media/vrf_options.png",
+ "name": ".github/ISSUE_TEMPLATE/housekeeping.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c04ff654c85e611c7968264f1596973cd6f28b6d48a71efcafa5a22f5c498daf",
+ "chksum_sha256": "6952213267de18d7a4656f4aa76a8fecd52fad264d38159074ce5fea2ebf3986",
"format": 1
},
{
- "name": "docs/getting_started/contributing/modules/media/post_rt.png",
+ "name": ".github/ISSUE_TEMPLATE/config.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7c5735f28bbce3e68418d44c9d799bfd9a546304ea826bc31e9da6604817ca51",
+ "chksum_sha256": "417cfe754f2372185d81c8ef435d8ade002ab0f5db9f7f917a9ac26ec7479851",
"format": 1
},
{
- "name": "docs/getting_started/contributing/modules/index.rst",
+ "name": ".github/ISSUE_TEMPLATE/documentation_change.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5158e3e659bafe06c7cd9d2897af6e7ac6209207d906fb4bb530b200b390832e",
+ "chksum_sha256": "a1c372660a10ea2ce252341ddcf8f52b5faf3923b4d3ca2f864609450cfe3534",
"format": 1
},
{
- "name": "docs/getting_started/contributing/modules/update_module.rst",
+ "name": ".github/ISSUE_TEMPLATE/bug_report.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "00c882e699b1094dc2996aa8a48bd9f824cd3e9ed97c626db7c4bd7df0af9c2f",
+ "chksum_sha256": "c626f2997fc48e16250057238523be1a42788d29eb48755db176bd433c79e13a",
"format": 1
},
{
- "name": "docs/getting_started/contributing/index.rst",
+ "name": ".github/ISSUE_TEMPLATE/feature_request.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "08326dcd2935d4a33b028eb1dab2a5afda56afb802d9ca6c89e1a59c0c45afd2",
+ "chksum_sha256": "4c042a9f4b7a1e6a8a3c7962b44e364f5b2cfe5242f17415bb9e7af94103561b",
"format": 1
},
{
- "name": "docs/getting_started/index.rst",
+ "name": ".yamllint",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "105990e8aebad3487a6e7174313bc26bc4138813416cd4c98c8157f158b6904c",
+ "chksum_sha256": "9ef09bf0cb4cee6f716aa4aab01a4acb6eeaa3245b9d938394b21afaa0fcbdbd",
+ "format": 1
+ },
+ {
+ "name": "README.md",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f2e837942f3d96fbf5ac0daeb978d7eb1923afff1e9ec95d24c7b3da6bafa83a",
+ "format": 1
+ },
+ {
+ "name": "ansible.cfg",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b5e219ab076b1e90de2c650d480fe0a4b8724f839ac95f5240ed64a80202dfbf",
"format": 1
},
{
@@ -1107,80 +1156,80 @@
"format": 1
},
{
- "name": "plugins/doc_fragments",
+ "name": "plugins/modules",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/doc_fragments/common.py",
+ "name": "plugins/modules/netbox_virtual_chassis.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b4d6dcd47f317aeaf14303eca8299617b4c493b3fe233b30c6bfeb4eda9fdf46",
+ "chksum_sha256": "bd5e27a261c43cb5028367157b89b8370064bca9c65923c4deaa790ed133e252",
"format": 1
},
{
- "name": "plugins/inventory",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/netbox_custom_field_choice_set.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9523ed8f99eccdd36cc52fc94ccd514d17d6f6bca0aeddf4debe2a781e662697",
"format": 1
},
{
- "name": "plugins/inventory/nb_inventory.py",
+ "name": "plugins/modules/netbox_module.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bcc93e1f53d53c445c591683d1f683ec92e70f42bd3856597465ece586d4c0da",
+ "chksum_sha256": "c913a3e3f6aab49d84bedd805ce6b14908424b14383812415ea234913c84887d",
"format": 1
},
{
- "name": "plugins/modules",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/netbox_inventory_item_role.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1852194cc4a32c5d1ba65d6d7d9af0d7a356a907d87f109716c6937581a8c200",
"format": 1
},
{
- "name": "plugins/modules/netbox_rear_port_template.py",
+ "name": "plugins/modules/netbox_device.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f734ec9a2b49ad1fc0db69e9ce28312cd094b80f63601e2b9d11ee1008754ec8",
+ "chksum_sha256": "2e0cffe878e618b9d77f2c280eaba8e5194034719100cdc77ca69abf8c4eff8c",
"format": 1
},
{
- "name": "plugins/modules/netbox_tag.py",
+ "name": "plugins/modules/netbox_cluster_group.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fb7f5f72afff9c96871e51eedd0b228f9f4e21912e26588d64806b4fdcbca654",
+ "chksum_sha256": "1d74dabfe5af59627b1180240a065b01dd0dfc9e212bac12dcca12953ba62ac5",
"format": 1
},
{
- "name": "plugins/modules/netbox_vlan_group.py",
+ "name": "plugins/modules/netbox_rear_port_template.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3182c6ffd3aa41b49a8719bfc3516835f10d243342ae38f04a00fba80150a8b8",
+ "chksum_sha256": "f734ec9a2b49ad1fc0db69e9ce28312cd094b80f63601e2b9d11ee1008754ec8",
"format": 1
},
{
- "name": "plugins/modules/netbox_cluster.py",
+ "name": "plugins/modules/netbox_cluster_type.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5b972e239e6442f94214d6f09c9954598e35e7ee3f109b18421734f86ce1fc5a",
+ "chksum_sha256": "2b8e0c7920a4ea33c1afaf8a5b0389e73d57f1b85e08665ed544e8b6eee72428",
"format": 1
},
{
- "name": "plugins/modules/netbox_rear_port.py",
+ "name": "plugins/modules/netbox_contact_role.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f8ddc6f163389ca5de162ba31eb9bf1a7ddda49e2de9fa5416c5b82377fead3a",
+ "chksum_sha256": "6de8f2911e87114e1370a6605ab3370b1246cc6fe2a65ba3e04744d2f128e85e",
"format": 1
},
{
- "name": "plugins/modules/netbox_tenant_group.py",
+ "name": "plugins/modules/netbox_service.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f1cf231347052f7454411b155525dcf855cea758a5864c4e31673125a5e3cc2e",
+ "chksum_sha256": "e8ea746182e0b927bb8ff2a79ab08271c9dec4f26d099c53d64f786cc8d66e3c",
"format": 1
},
{
@@ -1191,80 +1240,73 @@
"format": 1
},
{
- "name": "plugins/modules/netbox_fhrp_group.py",
+ "name": "plugins/modules/netbox_device_role.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "228d08a624bb22b11664a04099ad53d940887609098fa0f0739bac7fb6b4ac2f",
+ "chksum_sha256": "bb5b536ce0d452b4fa8b67d65f8ac2c64de2b0095161b1a8e931565360b4be34",
"format": 1
},
{
- "name": "plugins/modules/netbox_front_port.py",
+ "name": "plugins/modules/netbox_vrf.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1948a47d56177ae2929d2e3f74c278d9bd105978b915717e082af4e7ac435ec5",
+ "chksum_sha256": "6f99d2df272dd6e25db3cb1e8c78c3917f5788da3eccf2826295833a9eade58c",
"format": 1
},
{
- "name": "plugins/modules/netbox_site.py",
+ "name": "plugins/modules/netbox_site_group.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a97f3d426a08f49df703389bd36e99df062531b93bb2eec9e28b3dcdb963c7d7",
+ "chksum_sha256": "4ac5d367b28cefebefcfd5464fe3e6564e451f14ae57f63f0b5d54daa8a87b65",
"format": 1
},
{
- "name": "plugins/modules/netbox_contact_group.py",
+ "name": "plugins/modules/netbox_l2vpn.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8e85c8a0ebd547ec383843e85a47ae589fe5115106122b14566dfa8aae1c35de",
+ "chksum_sha256": "19cd42b91c64b572b6ac1b015c642e334ddaf71fa40d9918bb55d1571a8777b0",
"format": 1
},
{
- "name": "plugins/modules/netbox_cluster_group.py",
+ "name": "plugins/modules/netbox_circuit_type.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1d74dabfe5af59627b1180240a065b01dd0dfc9e212bac12dcca12953ba62ac5",
+ "chksum_sha256": "ce1798885b4fa32481cf31c7a476d95a12f6bd93450a798dbe6c99b527ca5578",
"format": 1
},
{
- "name": "plugins/modules/netbox_aggregate.py",
+ "name": "plugins/modules/netbox_tag.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "da9b8bebd84958d2339492517fc40a550799214d0f8965b68d4002d38a34c0a0",
+ "chksum_sha256": "fb7f5f72afff9c96871e51eedd0b228f9f4e21912e26588d64806b4fdcbca654",
"format": 1
},
{
"name": "plugins/modules/netbox_device_type.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cbf6ee0a782289c85cadb90a5762a23b3e0ff9ef079d074ab8f7ede7bd0a775c",
+ "chksum_sha256": "0c858de59b7a25dbd1c355136f877409100cc71e600cf91ccd3f9e05eb10bf6d",
"format": 1
},
{
- "name": "plugins/modules/netbox_circuit.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c578a92b541dc67fa7ddd1fcb3334b10b64ca1d0a135ba76d44c8e731c15bcea",
- "format": 1
- },
- {
- "name": "plugins/modules/netbox_ip_address.py",
+ "name": "plugins/modules/netbox_vm_interface.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b9364f34ebc2159204954a0137a707301488090617420d09f43f316c0ee1b507",
+ "chksum_sha256": "2a3691f62ab8f8dd7ff81f1150314c2411eabd9b336e6f8c34d939d8e2c5dd5b",
"format": 1
},
{
- "name": "plugins/modules/netbox_custom_link.py",
+ "name": "plugins/modules/netbox_webhook.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ecd977417da31442926eddd59402a4577071dd250ed9e2e2b25969560fa6c968",
+ "chksum_sha256": "fb5d375b6d89f825848959de2a7d2af42a45242b1679232f8f53bb95f19f2b48",
"format": 1
},
{
- "name": "plugins/modules/netbox_config_context.py",
+ "name": "plugins/modules/netbox_front_port_template.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e0f90a1686acd65c632f46b45efa89251e293937423a14bcd0d724a4a46b6d32",
+ "chksum_sha256": "30151c6e58e9cc87b8d1177d87db2e9eaa6effa6337a3bd6c530ac0f7ed3c230",
"format": 1
},
{
@@ -1275,423 +1317,423 @@
"format": 1
},
{
- "name": "plugins/modules/netbox_platform.py",
+ "name": "plugins/modules/netbox_ip_address.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "04dc885698a9e683fb749114d049e2e08d11f6e3480d7db8db1a4d1fea6a966b",
+ "chksum_sha256": "b9364f34ebc2159204954a0137a707301488090617420d09f43f316c0ee1b507",
"format": 1
},
{
- "name": "plugins/modules/netbox_cable.py",
+ "name": "plugins/modules/netbox_aggregate.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5a085df4f078e073421d4163306d9c505db961850629d28cd5ac7bdcee395480",
+ "chksum_sha256": "da9b8bebd84958d2339492517fc40a550799214d0f8965b68d4002d38a34c0a0",
"format": 1
},
{
- "name": "plugins/modules/netbox_console_server_port_template.py",
+ "name": "plugins/modules/netbox_cluster.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "60ba6f1a53543ea3ed0a4bbfad114cc66d199f8ff61957188795388ca4bd81bc",
+ "chksum_sha256": "5b972e239e6442f94214d6f09c9954598e35e7ee3f109b18421734f86ce1fc5a",
"format": 1
},
{
- "name": "plugins/modules/netbox_virtual_disk.py",
+ "name": "plugins/modules/netbox_fhrp_group.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bf88ca47c7f4faa4af71b0d558c3b099c70e756f87cd23637d6954f597f04110",
+ "chksum_sha256": "228d08a624bb22b11664a04099ad53d940887609098fa0f0739bac7fb6b4ac2f",
"format": 1
},
{
- "name": "plugins/modules/netbox_custom_field.py",
+ "name": "plugins/modules/netbox_power_outlet_template.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "21591188482258b1a6ab06759a3916a1f08326e73541a52491365224f0e43f34",
+ "chksum_sha256": "baa096a7af6d17ec2212ee6fee0bc38568260fed4f775960d9fef9945d60148a",
"format": 1
},
{
- "name": "plugins/modules/netbox_power_panel.py",
+ "name": "plugins/modules/netbox_tenant.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6b5fd67d569c845312ee6fa677be80baf6ba8867a08cbb9cead057892f304607",
+ "chksum_sha256": "96421201ad8e599a976af27bcb95086b71f15d0b44dd60a0f8d4c054c47f5b6a",
"format": 1
},
{
- "name": "plugins/modules/netbox_config_template.py",
+ "name": "plugins/modules/netbox_rack.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ed8ae46bc9f109bc86fe5b32d705749710d99f7f0c07a5e7abe25649338eeaff",
+ "chksum_sha256": "4b9eea63b31a469f99c96bd9d0ec7a62c712f930467ad925c84cb976320b1ef3",
"format": 1
},
{
- "name": "plugins/modules/netbox_rack_role.py",
+ "name": "plugins/modules/netbox_contact_group.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "29ca3073512679336f583b9234da5b899912c4f8e05baf40fb840503d7fb4adb",
+ "chksum_sha256": "8e85c8a0ebd547ec383843e85a47ae589fe5115106122b14566dfa8aae1c35de",
"format": 1
},
{
- "name": "plugins/modules/netbox_journal_entry.py",
+ "name": "plugins/modules/netbox_export_template.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3dfa3404b94a5d0860855b971b44daec97bb849773d00eb9f0756c6a4ef7b63d",
+ "chksum_sha256": "9210933364791e025131d0d43b99906af15e4937351ebc0dd2e19d718c992be8",
"format": 1
},
{
- "name": "plugins/modules/netbox_fhrp_group_assignment.py",
+ "name": "plugins/modules/netbox_asn.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a38961faaadd6b660adf020a91dae8cb26c144a1f6deeb47013eba3f6cc63251",
+ "chksum_sha256": "45d12eb4c19b82f00d7852ba4f6397c8991394bb0a6c8efcda7d0fb5b15033ab",
"format": 1
},
{
- "name": "plugins/modules/netbox_ipam_role.py",
+ "name": "plugins/modules/netbox_power_port_template.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9d8a0f0ef133e7fc3753981e2dd3db572ac34a3fa6077c5068cd0d7cce6cb193",
+ "chksum_sha256": "bfd2823032ae4343c7f2a76c4ad066756f469de058a6f3b716b4562a8f179baf",
"format": 1
},
{
- "name": "plugins/modules/netbox_l2vpn_termination.py",
+ "name": "plugins/modules/netbox_fhrp_group_assignment.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4449989833f616fad444e2a36883f8625f98a9f25af6e6f6e3d3e194c4c53ce9",
+ "chksum_sha256": "a38961faaadd6b660adf020a91dae8cb26c144a1f6deeb47013eba3f6cc63251",
"format": 1
},
{
- "name": "plugins/modules/netbox_power_outlet_template.py",
+ "name": "plugins/modules/netbox_location.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "baa096a7af6d17ec2212ee6fee0bc38568260fed4f775960d9fef9945d60148a",
+ "chksum_sha256": "99c24c9c1837625b5f9ef70aad85ea7e67595f70b6b2a5d8eee16c40bf957664",
"format": 1
},
{
- "name": "plugins/modules/netbox_virtual_chassis.py",
+ "name": "plugins/modules/netbox_rack_role.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bd5e27a261c43cb5028367157b89b8370064bca9c65923c4deaa790ed133e252",
+ "chksum_sha256": "29ca3073512679336f583b9234da5b899912c4f8e05baf40fb840503d7fb4adb",
"format": 1
},
{
- "name": "plugins/modules/netbox_inventory_item.py",
+ "name": "plugins/modules/netbox_config_context.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "271c9aa0834b7fb854b491a7daeeb6ae51cbda1eee6bc2fb9fa2ded6e8c3b280",
+ "chksum_sha256": "e0f90a1686acd65c632f46b45efa89251e293937423a14bcd0d724a4a46b6d32",
"format": 1
},
{
- "name": "plugins/modules/netbox_contact.py",
+ "name": "plugins/modules/netbox_device_bay_template.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8068913242d56a40b186be127c577e11a437dd407a41e5858b7fb9f9fb8e048f",
+ "chksum_sha256": "d0249f5e6f069d400301c90fc44ae2c5421c9e0cdac60e25731c6f8e65a2ebaa",
"format": 1
},
{
- "name": "plugins/modules/netbox_asn.py",
+ "name": "plugins/modules/netbox_module_type.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "45d12eb4c19b82f00d7852ba4f6397c8991394bb0a6c8efcda7d0fb5b15033ab",
+ "chksum_sha256": "1f28401a1e8e43e89470a5000eac0e9de2472d291568bd28358a657653df89dd",
"format": 1
},
{
- "name": "plugins/modules/netbox_power_port_template.py",
+ "name": "plugins/modules/netbox_rir.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bfd2823032ae4343c7f2a76c4ad066756f469de058a6f3b716b4562a8f179baf",
+ "chksum_sha256": "80e822b9412b770273a71f71a65dbb3851641874dea8c5b1259b4e7b83dd85db",
"format": 1
},
{
- "name": "plugins/modules/netbox_export_template.py",
+ "name": "plugins/modules/netbox_tenant_group.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d76a434ca4100dba65b1e000587880893333e0ea672e0f88f09e1f8b0da86d32",
+ "chksum_sha256": "f1cf231347052f7454411b155525dcf855cea758a5864c4e31673125a5e3cc2e",
"format": 1
},
{
- "name": "plugins/modules/netbox_service_template.py",
+ "name": "plugins/modules/netbox_console_server_port_template.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ce5f9655c07d5c21448c5e8b420de6d1a066f976095cb68a3354ed13886ae906",
+ "chksum_sha256": "60ba6f1a53543ea3ed0a4bbfad114cc66d199f8ff61957188795388ca4bd81bc",
"format": 1
},
{
- "name": "plugins/modules/netbox_route_target.py",
+ "name": "plugins/modules/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9bb0ce2ad909ff7d9ad719b303943489ef609a8480eaf9f16fba654028486c7f",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/modules/netbox_wireless_lan.py",
+ "name": "plugins/modules/netbox_wireless_lan_group.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0be96fc84fdb21b809d4d8dd85888e4c2e6cd65ba1750cd5e523c57690f9945d",
+ "chksum_sha256": "660a54257cf8c3b0d3153853b517b9a47550bd5b3f21e88eee29c75fe18d1ac2",
"format": 1
},
{
- "name": "plugins/modules/netbox_contact_role.py",
+ "name": "plugins/modules/netbox_contact.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6de8f2911e87114e1370a6605ab3370b1246cc6fe2a65ba3e04744d2f128e85e",
+ "chksum_sha256": "8068913242d56a40b186be127c577e11a437dd407a41e5858b7fb9f9fb8e048f",
"format": 1
},
{
- "name": "plugins/modules/netbox_service.py",
+ "name": "plugins/modules/netbox_virtual_machine.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e8ea746182e0b927bb8ff2a79ab08271c9dec4f26d099c53d64f786cc8d66e3c",
+ "chksum_sha256": "fbab9a283047c291bdd92de7eaddfa675917957875b02b82190b64633c907885",
"format": 1
},
{
- "name": "plugins/modules/netbox_l2vpn.py",
+ "name": "plugins/modules/netbox_module_bay.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "19cd42b91c64b572b6ac1b015c642e334ddaf71fa40d9918bb55d1571a8777b0",
+ "chksum_sha256": "7cf07b320895fd9106e2059d2f5c5a93dabbbc3c148ad00e08cba3930babfe49",
"format": 1
},
{
- "name": "plugins/modules/netbox_circuit_type.py",
+ "name": "plugins/modules/netbox_wireless_link.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ce1798885b4fa32481cf31c7a476d95a12f6bd93450a798dbe6c99b527ca5578",
+ "chksum_sha256": "6af33a80fac24b61dc5262cebe8bcdced717eaffd4f89ce4c4e69c2bd66928de",
"format": 1
},
{
- "name": "plugins/modules/netbox_manufacturer.py",
+ "name": "plugins/modules/netbox_service_template.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "872a353cec37ea7c4d8eee2de211f81ea1e74f1debb2544c3d53c97fad576cde",
+ "chksum_sha256": "ce5f9655c07d5c21448c5e8b420de6d1a066f976095cb68a3354ed13886ae906",
"format": 1
},
{
- "name": "plugins/modules/netbox_rack.py",
+ "name": "plugins/modules/netbox_rear_port.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c23c2007882e9c25d7a0dd4d4fb9169b192c5008b8c21ea266baeae73ce15c60",
+ "chksum_sha256": "f8ddc6f163389ca5de162ba31eb9bf1a7ddda49e2de9fa5416c5b82377fead3a",
"format": 1
},
{
- "name": "plugins/modules/netbox_tenant.py",
+ "name": "plugins/modules/netbox_circuit.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "96421201ad8e599a976af27bcb95086b71f15d0b44dd60a0f8d4c054c47f5b6a",
+ "chksum_sha256": "c578a92b541dc67fa7ddd1fcb3334b10b64ca1d0a135ba76d44c8e731c15bcea",
"format": 1
},
{
- "name": "plugins/modules/netbox_inventory_item_role.py",
+ "name": "plugins/modules/netbox_device_bay.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1852194cc4a32c5d1ba65d6d7d9af0d7a356a907d87f109716c6937581a8c200",
+ "chksum_sha256": "6d57b68076b63835ed121f47c904888304b6f6266d84569d170f4784f128639f",
"format": 1
},
{
- "name": "plugins/modules/netbox_vm_interface.py",
+ "name": "plugins/modules/netbox_provider_network.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2a3691f62ab8f8dd7ff81f1150314c2411eabd9b336e6f8c34d939d8e2c5dd5b",
+ "chksum_sha256": "5321b303c82d546eebf10d796c4dbda56cda68b261539ae90315e0d9785cb987",
"format": 1
},
{
- "name": "plugins/modules/netbox_device_interface.py",
+ "name": "plugins/modules/netbox_console_server_port.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9ee29f4bfd532625d90eb7e4e2a4798ba6d6a66cbd279c177fad747c657f2178",
+ "chksum_sha256": "50f33803aab89aec74597c474c0c6daebab488b26f9a55a724f33244b2f0e31a",
"format": 1
},
{
- "name": "plugins/modules/netbox_region.py",
+ "name": "plugins/modules/netbox_virtual_disk.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "22f0fcbfeaeb68387b1f10df1338c4a47915b4f4c1abb20414cdb288e0e359b9",
+ "chksum_sha256": "bf88ca47c7f4faa4af71b0d558c3b099c70e756f87cd23637d6954f597f04110",
"format": 1
},
{
- "name": "plugins/modules/netbox_vlan.py",
+ "name": "plugins/modules/netbox_front_port.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ad12d8175ab978f7c7e739f64fc44f478f86f378fb02b10aeb1182bafaa4ad12",
+ "chksum_sha256": "1948a47d56177ae2929d2e3f74c278d9bd105978b915717e082af4e7ac435ec5",
"format": 1
},
{
- "name": "plugins/modules/netbox_location.py",
+ "name": "plugins/modules/netbox_l2vpn_termination.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "99c24c9c1837625b5f9ef70aad85ea7e67595f70b6b2a5d8eee16c40bf957664",
+ "chksum_sha256": "4449989833f616fad444e2a36883f8625f98a9f25af6e6f6e3d3e194c4c53ce9",
"format": 1
},
{
- "name": "plugins/modules/netbox_rack_group.py",
+ "name": "plugins/modules/netbox_circuit_termination.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eeb755f6d2df6171075f79b8c7d27f4f7c77eb2d469ff9c1911ed68f2ac21eec",
+ "chksum_sha256": "831c5bef092967e002c612dcd546efd519c7e065e5c520c672ccb345136244ab",
"format": 1
},
{
- "name": "plugins/modules/netbox_circuit_termination.py",
+ "name": "plugins/modules/netbox_vlan_group.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "831c5bef092967e002c612dcd546efd519c7e065e5c520c672ccb345136244ab",
+ "chksum_sha256": "3182c6ffd3aa41b49a8719bfc3516835f10d243342ae38f04a00fba80150a8b8",
"format": 1
},
{
- "name": "plugins/modules/netbox_console_server_port.py",
+ "name": "plugins/modules/netbox_site.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "50f33803aab89aec74597c474c0c6daebab488b26f9a55a724f33244b2f0e31a",
+ "chksum_sha256": "a97f3d426a08f49df703389bd36e99df062531b93bb2eec9e28b3dcdb963c7d7",
"format": 1
},
{
- "name": "plugins/modules/netbox_device_bay.py",
+ "name": "plugins/modules/netbox_inventory_item.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6d57b68076b63835ed121f47c904888304b6f6266d84569d170f4784f128639f",
+ "chksum_sha256": "271c9aa0834b7fb854b491a7daeeb6ae51cbda1eee6bc2fb9fa2ded6e8c3b280",
"format": 1
},
{
- "name": "plugins/modules/netbox_cluster_type.py",
+ "name": "plugins/modules/netbox_power_feed.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2b8e0c7920a4ea33c1afaf8a5b0389e73d57f1b85e08665ed544e8b6eee72428",
+ "chksum_sha256": "3db0ec1ce6dbffc8fa03fba804554db49833c20d8202a27e577774ca35c105b4",
"format": 1
},
{
- "name": "plugins/modules/netbox_webhook.py",
+ "name": "plugins/modules/netbox_power_port.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fb5d375b6d89f825848959de2a7d2af42a45242b1679232f8f53bb95f19f2b48",
+ "chksum_sha256": "c10b0bbf5340c13c1dc27378b169904679c146cceabdfbff0431540ecdc0cb75",
"format": 1
},
{
- "name": "plugins/modules/netbox_device_role.py",
+ "name": "plugins/modules/netbox_region.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bb5b536ce0d452b4fa8b67d65f8ac2c64de2b0095161b1a8e931565360b4be34",
+ "chksum_sha256": "22f0fcbfeaeb68387b1f10df1338c4a47915b4f4c1abb20414cdb288e0e359b9",
"format": 1
},
{
- "name": "plugins/modules/netbox_provider.py",
+ "name": "plugins/modules/netbox_console_port_template.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fef797794b81ff82648624931815433e7c9ca2be8cc4bc69d9248ac7b43926e0",
+ "chksum_sha256": "2f290656792e035efde8a5ecd0af70074a8926c5201f0dcc265a4da448bb39ed",
"format": 1
},
{
- "name": "plugins/modules/netbox_site_group.py",
+ "name": "plugins/modules/netbox_console_port.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4ac5d367b28cefebefcfd5464fe3e6564e451f14ae57f63f0b5d54daa8a87b65",
+ "chksum_sha256": "1f6fa00dd3919c60835a614be01a910e0d6f55da44f786e505a9c005d0ee0644",
"format": 1
},
{
- "name": "plugins/modules/netbox_module_type.py",
+ "name": "plugins/modules/netbox_custom_link.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1f28401a1e8e43e89470a5000eac0e9de2472d291568bd28358a657653df89dd",
+ "chksum_sha256": "ecd977417da31442926eddd59402a4577071dd250ed9e2e2b25969560fa6c968",
"format": 1
},
{
- "name": "plugins/modules/__init__.py",
+ "name": "plugins/modules/netbox_power_panel.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "6b5fd67d569c845312ee6fa677be80baf6ba8867a08cbb9cead057892f304607",
"format": 1
},
{
- "name": "plugins/modules/netbox_prefix.py",
+ "name": "plugins/modules/netbox_vlan.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "091f9f737a07daad5c3e35d6cbb100f58e32c01099fc16ad3667aa353fa42014",
+ "chksum_sha256": "ad12d8175ab978f7c7e739f64fc44f478f86f378fb02b10aeb1182bafaa4ad12",
"format": 1
},
{
- "name": "plugins/modules/netbox_virtual_machine.py",
+ "name": "plugins/modules/netbox_device_interface.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fbab9a283047c291bdd92de7eaddfa675917957875b02b82190b64633c907885",
+ "chksum_sha256": "9ee29f4bfd532625d90eb7e4e2a4798ba6d6a66cbd279c177fad747c657f2178",
"format": 1
},
{
- "name": "plugins/modules/netbox_rir.py",
+ "name": "plugins/modules/netbox_manufacturer.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "80e822b9412b770273a71f71a65dbb3851641874dea8c5b1259b4e7b83dd85db",
+ "chksum_sha256": "872a353cec37ea7c4d8eee2de211f81ea1e74f1debb2544c3d53c97fad576cde",
"format": 1
},
{
- "name": "plugins/modules/netbox_provider_network.py",
+ "name": "plugins/modules/netbox_provider.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5321b303c82d546eebf10d796c4dbda56cda68b261539ae90315e0d9785cb987",
+ "chksum_sha256": "fef797794b81ff82648624931815433e7c9ca2be8cc4bc69d9248ac7b43926e0",
"format": 1
},
{
- "name": "plugins/modules/netbox_device_bay_template.py",
+ "name": "plugins/modules/netbox_prefix.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d0249f5e6f069d400301c90fc44ae2c5421c9e0cdac60e25731c6f8e65a2ebaa",
+ "chksum_sha256": "091f9f737a07daad5c3e35d6cbb100f58e32c01099fc16ad3667aa353fa42014",
"format": 1
},
{
- "name": "plugins/modules/netbox_front_port_template.py",
+ "name": "plugins/modules/netbox_cable.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "30151c6e58e9cc87b8d1177d87db2e9eaa6effa6337a3bd6c530ac0f7ed3c230",
+ "chksum_sha256": "5a085df4f078e073421d4163306d9c505db961850629d28cd5ac7bdcee395480",
"format": 1
},
{
- "name": "plugins/modules/netbox_vrf.py",
+ "name": "plugins/modules/netbox_wireless_lan.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6f99d2df272dd6e25db3cb1e8c78c3917f5788da3eccf2826295833a9eade58c",
+ "chksum_sha256": "0be96fc84fdb21b809d4d8dd85888e4c2e6cd65ba1750cd5e523c57690f9945d",
"format": 1
},
{
- "name": "plugins/modules/netbox_wireless_link.py",
+ "name": "plugins/modules/netbox_route_target.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6af33a80fac24b61dc5262cebe8bcdced717eaffd4f89ce4c4e69c2bd66928de",
+ "chksum_sha256": "9bb0ce2ad909ff7d9ad719b303943489ef609a8480eaf9f16fba654028486c7f",
"format": 1
},
{
- "name": "plugins/modules/netbox_wireless_lan_group.py",
+ "name": "plugins/modules/netbox_config_template.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "660a54257cf8c3b0d3153853b517b9a47550bd5b3f21e88eee29c75fe18d1ac2",
+ "chksum_sha256": "ed8ae46bc9f109bc86fe5b32d705749710d99f7f0c07a5e7abe25649338eeaff",
"format": 1
},
{
- "name": "plugins/modules/netbox_console_port_template.py",
+ "name": "plugins/modules/netbox_ipam_role.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2f290656792e035efde8a5ecd0af70074a8926c5201f0dcc265a4da448bb39ed",
+ "chksum_sha256": "9d8a0f0ef133e7fc3753981e2dd3db572ac34a3fa6077c5068cd0d7cce6cb193",
"format": 1
},
{
- "name": "plugins/modules/netbox_console_port.py",
+ "name": "plugins/modules/netbox_journal_entry.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1f6fa00dd3919c60835a614be01a910e0d6f55da44f786e505a9c005d0ee0644",
+ "chksum_sha256": "3dfa3404b94a5d0860855b971b44daec97bb849773d00eb9f0756c6a4ef7b63d",
"format": 1
},
{
- "name": "plugins/modules/netbox_device.py",
+ "name": "plugins/modules/netbox_rack_group.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e2936f1c7bf1c38c71c688a3c8cba5787775ae9760d3aa4a6a03aa76592b51b5",
+ "chksum_sha256": "eeb755f6d2df6171075f79b8c7d27f4f7c77eb2d469ff9c1911ed68f2ac21eec",
"format": 1
},
{
- "name": "plugins/modules/netbox_power_port.py",
+ "name": "plugins/modules/netbox_custom_field.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fb057f18da9b73f7bb76c553842267fd292855782ead79635c45e3cbca04cf5c",
+ "chksum_sha256": "a3827e864ab004396ee154f798ebd875bcfb3e9505d623229bdb91b94930d476",
"format": 1
},
{
- "name": "plugins/modules/netbox_power_feed.py",
+ "name": "plugins/modules/netbox_platform.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3db0ec1ce6dbffc8fa03fba804554db49833c20d8202a27e577774ca35c105b4",
+ "chksum_sha256": "04dc885698a9e683fb749114d049e2e08d11f6e3480d7db8db1a4d1fea6a966b",
"format": 1
},
{
@@ -1702,80 +1744,80 @@
"format": 1
},
{
- "name": "plugins/module_utils/netbox_vpn.py",
+ "name": "plugins/module_utils/netbox_ipam.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "af3a42c86663730a585e2853c8bfb36b071b8c75bc33f071579d5471af5b3219",
+ "chksum_sha256": "368bdd616498612f33b9a3903abe22da7df375eb969be91d71e9c21e9fa34398",
"format": 1
},
{
- "name": "plugins/module_utils/netbox_secrets.py",
+ "name": "plugins/module_utils/netbox_tenancy.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b12f0853325dd27f38948cd9da65b72c563ce46612f8cf55cfa5806b1ab784c6",
+ "chksum_sha256": "50a1de4f8a2dd29d4ee73a75fa9ab8e3f5e444a5fc1935a8d09172a56f290d11",
"format": 1
},
{
- "name": "plugins/module_utils/netbox_extras.py",
+ "name": "plugins/module_utils/netbox_circuits.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bfe7a1f3944b89dd424cabcea798d39ef01ee10591a4aa14b5387b3b7a543f57",
+ "chksum_sha256": "1e448439cc15b42ac16bf9e390741429fc6293dae59817e680dc5dae4de5683e",
"format": 1
},
{
- "name": "plugins/module_utils/netbox_ipam.py",
+ "name": "plugins/module_utils/netbox_wireless.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "368bdd616498612f33b9a3903abe22da7df375eb969be91d71e9c21e9fa34398",
+ "chksum_sha256": "e962fa78336a3c28fb139d8ef1485b74451d06bcad5bb779d849344e74303d84",
"format": 1
},
{
- "name": "plugins/module_utils/netbox_wireless.py",
+ "name": "plugins/module_utils/netbox_virtualization.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e962fa78336a3c28fb139d8ef1485b74451d06bcad5bb779d849344e74303d84",
+ "chksum_sha256": "4888905fe5f076ebb504c9259b5a7a04975265001c91daab7a144772f6d331cc",
"format": 1
},
{
- "name": "plugins/module_utils/netbox_circuits.py",
+ "name": "plugins/module_utils/netbox_secrets.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1e448439cc15b42ac16bf9e390741429fc6293dae59817e680dc5dae4de5683e",
+ "chksum_sha256": "b12f0853325dd27f38948cd9da65b72c563ce46612f8cf55cfa5806b1ab784c6",
"format": 1
},
{
- "name": "plugins/module_utils/netbox_dcim.py",
+ "name": "plugins/module_utils/netbox_vpn.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9fdb8f649e3273f098daec4ddb9322af50d8267aea01779b10bcb7add0084d2c",
+ "chksum_sha256": "af3a42c86663730a585e2853c8bfb36b071b8c75bc33f071579d5471af5b3219",
"format": 1
},
{
- "name": "plugins/module_utils/netbox_utils.py",
+ "name": "plugins/module_utils/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8c6376505fa37f1bdd312741729da0e30324488177907b0b9fd9455442d29737",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/module_utils/__init__.py",
+ "name": "plugins/module_utils/netbox_utils.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "1c2b16cae39cf62fde683ea909f7d0b7ec75a5f8d1f8e34b72a6ab7eb5bb54b7",
"format": 1
},
{
- "name": "plugins/module_utils/netbox_virtualization.py",
+ "name": "plugins/module_utils/netbox_extras.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4888905fe5f076ebb504c9259b5a7a04975265001c91daab7a144772f6d331cc",
+ "chksum_sha256": "7caec2ff44747f93ef6f18b1201d4b8abd1ba455f41db4a902d859e819bc99c2",
"format": 1
},
{
- "name": "plugins/module_utils/netbox_tenancy.py",
+ "name": "plugins/module_utils/netbox_dcim.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "50a1de4f8a2dd29d4ee73a75fa9ab8e3f5e444a5fc1935a8d09172a56f290d11",
+ "chksum_sha256": "ad6b8d8a7537c776e8579cbbf75800c7fc57b1d4ea2d56d39d36e03bb1ec4ff6",
"format": 1
},
{
@@ -1789,1302 +1831,1260 @@
"name": "plugins/lookup/nb_lookup.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "497fd628e254fcf3b37434e2a425225b99a3443ec314d9da2c01a9d6910648aa",
+ "chksum_sha256": "408f08203be7b512771b38b514fe7a29c60743b931262a610a1b9c622bb163d3",
"format": 1
},
{
- "name": "pyproject.toml",
+ "name": "plugins/doc_fragments",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "plugins/doc_fragments/common.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ba0b5e3fb7ba0fa1902c7bf060e295dedc18c86f67503b592d6a208ec0c8f401",
+ "chksum_sha256": "b4d6dcd47f317aeaf14303eca8299617b4c493b3fe233b30c6bfeb4eda9fdf46",
"format": 1
},
{
- "name": "changelogs",
+ "name": "plugins/inventory",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "changelogs/changelog.yaml",
+ "name": "plugins/inventory/nb_inventory.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5ffbedccc6552047800546d21500e0eda30de675f0b2ed65305b2a8a4f49b2a5",
+ "chksum_sha256": "1f6866857ed68627ad2d5ee14f3e1ee2f55d163e5f43f94595023acd1ee4a951",
"format": 1
},
{
- "name": "changelogs/config.yaml",
+ "name": "pyproject.toml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bad0157e7ffee11df87f3adaa5dcfa3f1841e816a27cbcf5b866fa21f63ef1bd",
+ "chksum_sha256": "ba0b5e3fb7ba0fa1902c7bf060e295dedc18c86f67503b592d6a208ec0c8f401",
"format": 1
},
{
- "name": "changelogs/fragments",
+ "name": "hacking",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "changelogs/fragments/allow-jinja2.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e53a34d2115046c1544201b3f5828506593ff8249f44b93357b814738073fb47",
- "format": 1
- },
- {
- "name": "changelogs/fragments/619-v3.0-ci-fixes.yml",
+ "name": "hacking/build.sh",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3444f1db81ccc1127d586342c8b97e95dfc000fac01623f525e4d299ebd30df1",
+ "chksum_sha256": "c824f229eafb4ad8fcc24c800b6d08ad8af1c8ca866e9cdbfd543429b2a04a24",
"format": 1
},
{
- "name": "changelogs/fragments/serial_and_asset.yml",
+ "name": "hacking/local-test.sh",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7b73ab2cd318b44b84da88311f5ebdab247f1baa4bddcf30f389f20d5aeb905d",
+ "chksum_sha256": "3c4c16322033b5df7c08d9081098e11416b3bbdebede263ba84a92c4f043d815",
"format": 1
},
{
- "name": "changelogs/fragments/issue-951.yml",
+ "name": "hacking/black.sh",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "050f90608d55a316e87a32ab09547d8f85e6efd0b2b0d5839d53c6610ebe4388",
+ "chksum_sha256": "31b38a6d54cf7fd233d647760c6f9b695bde61762b09b0aba5899ea746d14248",
"format": 1
},
{
- "name": "changelogs/fragments/issue-558.yml",
+ "name": "hacking/make-docs.sh",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9550e7ec1bce5adc7c348f053df4a296bb8f4ebd62aeb75eed39a682ea89ad32",
+ "chksum_sha256": "eaf25c88bd9a0d8d8b583c8f65bed04ce553749fe2949e2e07063fc420b08bbb",
"format": 1
},
{
- "name": "changelogs/fragments/.gitkeep",
+ "name": "hacking/update_test_inventories.sh",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "c02406514a0a53c1328f5397a4df2aae6ed1096159a3a85db20e34b5c73acdbe",
"format": 1
},
{
- "name": "tests/sanity",
+ "name": "meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/sanity/ignore-2.11.txt",
+ "name": "meta/execution-environment.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7ee1c1645a80d2c61de52c79e3bd9fd33be5f33567688af2a16c2b6784c8826f",
+ "chksum_sha256": "0cd0b966cbb8fefb00f7122190d7a9b42dc5da517a8c5ba9d86e34c51bc3e43a",
"format": 1
},
{
- "name": "tests/test_data.py",
+ "name": "meta/runtime.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b5c34afc0e8ddbb4fc388802015f63ff1628e2f3335f8cce280c0e38933acd60",
+ "chksum_sha256": "36b1216fc6aa52034a9eb81aeb6ce92e29b77a61ce63ca17fb3b508434a73880",
"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/v3.7",
+ "name": "changelogs",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks",
+ "name": "changelogs/fragments",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_region.yml",
+ "name": "changelogs/fragments/issue-951.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "64c202f343c3b22244058176bdbe027d1cbc629d189d8dca03f8e2797758d93c",
+ "chksum_sha256": "050f90608d55a316e87a32ab09547d8f85e6efd0b2b0d5839d53c6610ebe4388",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_tenant.yml",
+ "name": "changelogs/fragments/619-v3.0-ci-fixes.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "12293e5057c80b6b491b0c99ec05d3556d2642f5fcb981fa0f215857b5855b3a",
+ "chksum_sha256": "3444f1db81ccc1127d586342c8b97e95dfc000fac01623f525e4d299ebd30df1",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_console_server_port.yml",
+ "name": "changelogs/fragments/allow-jinja2.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d1c5d0d6e586d445667dd44b70a72e7d50564ba7e95cd2321289859eee3e3f6a",
+ "chksum_sha256": "e53a34d2115046c1544201b3f5828506593ff8249f44b93357b814738073fb47",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_power_outlet_template.yml",
+ "name": "changelogs/fragments/.gitkeep",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7076e4492f1e5a9320edee905c9d9b29c0ca0a9222adac0903cd31e424a97edb",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_fhrp_group_assignment.yml",
+ "name": "changelogs/fragments/serial_and_asset.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6315cc64905295c66bc9143b67b6ce4e52e089c85953c0e8729d8ffbd435f0d2",
+ "chksum_sha256": "7b73ab2cd318b44b84da88311f5ebdab247f1baa4bddcf30f389f20d5aeb905d",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_module_type.yml",
+ "name": "changelogs/fragments/issue-558.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b78dc0f37cb445ca99d589c3f296ec1bb6b999dddbcbc2fe8ba64c78e700c53f",
+ "chksum_sha256": "9550e7ec1bce5adc7c348f053df4a296bb8f4ebd62aeb75eed39a682ea89ad32",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_site_group.yml",
+ "name": "changelogs/config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c5770e6c7f178cfed77e7cc9b4b7c7f7d8ed7557420c8e1ee3a221f54e2cbaaf",
+ "chksum_sha256": "bad0157e7ffee11df87f3adaa5dcfa3f1841e816a27cbcf5b866fa21f63ef1bd",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_wireless_lan_group.yml",
+ "name": "changelogs/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "94a103ba1cd08739e44dd0be15e9ce1d88ba143b0efd88d47e78155409dfae3e",
+ "chksum_sha256": "7d495cca776b949e1943c08646aaa9a0e275eeea77ae7fffcf5d673573207cb4",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_route_target.yml",
+ "name": "poetry.lock",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a1265c144e813a4fe745934790f9283d30558187bef8d58f705754719ec480dc",
+ "chksum_sha256": "c7ee82a085b1160c16be841b85dda1f16310e88bd9293710d41b8a02953c170f",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_cluster.yml",
+ "name": "CHANGELOG.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2967ce7f5f94401bfba564fa22901be8a7c81ba4eb848eb018c317538a5cc22e",
+ "chksum_sha256": "a2014457bc901a9f727a9e53a499627ea50dcb3b98ac5cece15052e05ccd5cb5",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_wireless_link.yml",
+ "name": "requirements.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "807da638ea8dc21080bc21a3033dd065570ff93e3dfe9edc4963922505a3613a",
+ "chksum_sha256": "d003b5dde4117b9ef860b6d4fd67096a2909ea206f63116d5d46d1955fcc94f1",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_rack_group.yml",
+ "name": ".readthedocs.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b8e3c495f289093c94d3612213c45a6f89624e4d762fd04e74d3062dab34cf1a",
+ "chksum_sha256": "41d982a373e0e4da1176899b9f0df905cb5a780c37555ddda1aa9f8f962a1985",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_rir.yml",
+ "name": "CONTRIBUTING.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "280fb5eb850e14e7874ada263f1c03f15da3ed24f4730f960967cf8993eb81e3",
+ "chksum_sha256": "11337b573ba4ffe704e9a94e682e018f7a489b4bd9ed5b474643ec2ae136ddf4",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_platform.yml",
+ "name": ".gitignore",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2bdd6dd59eb4dcbfb1e285aef3bfbfe944552c3dd2bd20e17b58b5798926221e",
+ "chksum_sha256": "c0ac384e24827235e0b17021954d2b803c3da263038dfaa24967d3d40a86ea15",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_asn.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8ebdd0a1b9d7008523121a7c14be66d1400a9338828c231272c7f74d5726edce",
+ "name": "tests",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_cluster_type.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c88469e151627ba4f18c90ec7dc96449ebc38e0b10c3715b2527e8ed2317ff87",
+ "name": "tests/sanity",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_device_role.yml",
+ "name": "tests/sanity/ignore-2.11.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fa2e8d09e82a3f099913dc9cf23356a22626895123e59ef9528a183fa5d18dec",
+ "chksum_sha256": "7ee1c1645a80d2c61de52c79e3bd9fd33be5f33567688af2a16c2b6784c8826f",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_virtual_chassis.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "952d715fc4c1dbca7f8d83128b67a0234a37666b9f553506ac749684dd80ebfb",
+ "name": "tests/netbox-docker",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_power_port_template.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b3e31a81a5f25b51c1df6cc5d3f9376be8c93b54888bbcf9b957661792b9e526",
+ "name": "tests/netbox-docker/v3.6",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_service_template.yml",
+ "name": "tests/netbox-docker/v3.6/docker-compose.override.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2dd7572f2ea6c0a92edce50caa99145ea1065fa4800e71afe9c7bfa5fb16f021",
+ "chksum_sha256": "20ca1270c545e81ecf0419e124f8980ce137ac880fbc42e1e4b033107e4d7e97",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_device_bay_template.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b013bde7259d29fb3bc35de81fec4f2a0c24c09d54ada22355a39e406d0a9554",
+ "name": "tests/netbox-docker/v3.5",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_custom_link.yml",
+ "name": "tests/netbox-docker/v3.5/docker-compose.override.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2e9c75e22e6e2540065ed53d26657677c927af1bf3a73c29064c0e3361382e3f",
+ "chksum_sha256": "434cca0751c8c9b5cbceb4cdbf07402aad4037fea150fa6e79e5d4b420272d1a",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_service.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1e3384a81b3bc49bcaf3f7d82268cc03a9dd609e2a88e18eeac2677bcf604154",
+ "name": "tests/netbox-docker/v3.7",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_cluster_group.yml",
+ "name": "tests/netbox-docker/v3.7/docker-compose.override.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "beb8453c7e490b5b8b9412c0d8bc4cd6c234e24368aa1f7c6a3c2a7e651b61c6",
+ "chksum_sha256": "a86ebe548262e0150fe37695b70a346e562c1fdcc3e03324d7ed78ccb7e714f5",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_circuit_type.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0b1e4ff5a8a0341bf0e4e123a523abfb9d194d420b83563536ea837750aa5ec1",
+ "name": "tests/unit",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_journal_entry.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0526255ed056eea4324dc0615f4f1b18be2c3ce66951850736b9d6533ae2660a",
+ "name": "tests/unit/module_utils",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_aggregate.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1ea02627b92f257b58e16c77e038930542b949e6cfc7acb38beac52330318d8c",
+ "name": "tests/unit/module_utils/fixtures",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_virtual_machine.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a804425ab778b2dc44ba33cb1637ee3a336b20f543e6ac9160d0c81d57de0099",
+ "name": "tests/unit/module_utils/fixtures/choices",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_prefix.yml",
+ "name": "tests/unit/module_utils/fixtures/choices/racks.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f55ed9fcbda0d371e51828c3ecee2e103ac45f60ce5e5d6c28a04bb16ba64d76",
+ "chksum_sha256": "710913087d5fe7c6250ac7a6bbdb378fd2a98f5425595ed92a452e6789ea62e1",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_front_port.yml",
+ "name": "tests/unit/module_utils/fixtures/choices/interfaces.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3b56521d53c9a818916cb718e018214e7123db6b3feb0456532d476955d0aa28",
+ "chksum_sha256": "69edd276a4d6ff23a24aa290de80ed861b94cba637207a9edb481d7b4dfa9a59",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_contact.yml",
+ "name": "tests/unit/module_utils/fixtures/choices/device_types.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "10800b08efc61984903e8d350ce3ade71ef7888bd67b75875f04ab463545704e",
+ "chksum_sha256": "065d95e75aa2b700f265e33133b94b5c9f93bd30d9be9a0fdcfe4a17671421ee",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_ip_address.yml",
+ "name": "tests/unit/module_utils/fixtures/choices/devices.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "52a3c82dcf21c3421932677215737f10a3abe07f2a6cb3357b5574695ecc0902",
+ "chksum_sha256": "d28c8ab2e5a53cf617e96c37caa10d4881e19f2756e59ce036610d3ac13935af",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_custom_field.yml",
+ "name": "tests/unit/module_utils/fixtures/choices/virtual_machines.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6e072cc7a5577ea307dfdb9458bc68ffc98d848afb42afb4824765133804cbb3",
+ "chksum_sha256": "8a019714226dd0208003a775d05c48aed8195b0f09a23ad4c5e976a31f2f4b91",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_console_server_port_template.yml",
+ "name": "tests/unit/module_utils/fixtures/choices/services.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "31efff083088eb516aa5e7769b52024bee646ab8f996a708fc09d2445c16ce7d",
+ "chksum_sha256": "1eee733c9069414f6294f64ecf0bd65c0afb42053c0ee8e1d9bf0ac48ca9e59c",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_device_bay.yml",
+ "name": "tests/unit/module_utils/fixtures/choices/sites.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "482fe4849d9caff69a8604ab3e8324b0beaceb49e66360d0c3eb7c79d7ac8c34",
+ "chksum_sha256": "31d58287f5b07e8aa0c0e1c1ca12b907f88d8ab987b98b5ef09beef01a49a090",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_vrf.yml",
+ "name": "tests/unit/module_utils/fixtures/choices/vlans.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0a17e30d5154ca2aa90285ab251f52d457e89ced6509d83366101ad36e0da",
+ "chksum_sha256": "c4b951095ee4c7443616cda2f26ed9e778226bf4b8e193e0f67cc5b0b96a6636",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_tag.yml",
+ "name": "tests/unit/module_utils/fixtures/choices/prefixes.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "32e11eea93510a83b15b736bdf46995492dd0dcbdb025993f16532aad6de2b22",
+ "chksum_sha256": "3a7f82c633273e126c2455161a1c832460b368d8e40677a0cb290ec9910e2bcf",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_inventory_item_role.yml",
+ "name": "tests/unit/module_utils/fixtures/choices/circuits.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b1bbf7b2aabc7b200fb8a612ee092629492c4a0a8cfd5e859c6cd9aadfa09d40",
+ "chksum_sha256": "eef93b5c65458cac7b33b1e1365518d381d3e12bcc73b7afbdd163a42350a521",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_vlan.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f3de3e0d80daef5d6def7c55b974a6c88d4322ac35cb397ca1cbbfe90ef2fd8e",
+ "name": "tests/unit/module_utils/test_data",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_location.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4fde47ce5a7ad1ad91120d23a53db43cf885d640fab3013fcdc4201faf0fccdc",
+ "name": "tests/unit/module_utils/test_data/normalize_data",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_vm_interface.yml",
+ "name": "tests/unit/module_utils/test_data/normalize_data/data.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0de602de86254d9c7f4c09f7b9d87da55dd0ddba4c7dbef6bc68bd041669151d",
+ "chksum_sha256": "fb8e60b069fb6b847cc286cf83c8df8ea5c8b19078f614be83983e85616036aa",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_config_template.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "632cc2291e1afc3307a450b9ec6b5e75b321facf5c0a3881230edd834cb72d43",
+ "name": "tests/unit/module_utils/test_data/build_query_params_child",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_lookup.yml",
+ "name": "tests/unit/module_utils/test_data/build_query_params_child/data.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "12bc28911f599b5e292425de7d0d6f5f596fee407befbabbc0e7de33f9a1d9e0",
+ "chksum_sha256": "bb4a47f18fb6fcab7557a036a71612f65e75d22972139f8916012ebcbb8dcce0",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_console_port.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f22bf91272f6001c1a9d8819ca38a0524c8a442640e5ba2eef2d1d53f4f4340e",
+ "name": "tests/unit/module_utils/test_data/arg_spec_default",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_provider_network.yml",
+ "name": "tests/unit/module_utils/test_data/arg_spec_default/data.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d85ad4ca9dd85d75489fbdb13ef60bc0cead57e5b0161308dcb5625e75c919b4",
+ "chksum_sha256": "f48dd7aea115db209d32d4ce0fc6b9836c877a08bf035ee588bbc3f436b4a076",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_device_interface.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b97b575dba1385ba7361f881a9b4b553982f470eac4183e880c2cf71927e572b",
+ "name": "tests/unit/module_utils/test_data/choices_id",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_contact_role.yml",
+ "name": "tests/unit/module_utils/test_data/choices_id/data.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "52d72f63e31c7de7bc1dc2276112f491466ddbad59628833213f0ce78fb59cb3",
+ "chksum_sha256": "0ef637ce49cb7fbf3fb67f39641b2db2ddddae41a4a5c772e65cb401fc21d595",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_webhook.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "094744978836b9c9e5859b0a927c6d6088c2c1fa2c69366158a3c53cb44db5b0",
+ "name": "tests/unit/module_utils/test_data/build_query_params_no_child",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_inventory_item.yml",
+ "name": "tests/unit/module_utils/test_data/build_query_params_no_child/data.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "94a9328d196fd3e810b0827ea67aac0093b0b1414bf94b865d45181892b42dd6",
+ "chksum_sha256": "a2808a6706a4ba94c964b0bd5ccb27036fb6f4ae58402fc388c4a8a56229f758",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/main.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "50df8b90eb941e06a9a1c738966928ce2efbde1bc418228ed735f1c9024a6759",
+ "name": "tests/unit/module_utils/test_data/find_app",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_device_type.yml",
+ "name": "tests/unit/module_utils/test_data/find_app/data.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "02f5b6658413511f1be6f109ba933c4859131c4985988f0a507b5b288e0684cb",
+ "chksum_sha256": "f57619e431da1db5f3459f0d390e0f98ed8422dd1dfaea0a322faa6689762e2f",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_config_context.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e1dbc4f90c9607e997c2b11c1cd58b37be0363a75d2e791034aaeb6302e1e263",
+ "name": "tests/unit/module_utils/test_data/build_query_params_user_query_params",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_rear_port.yml",
+ "name": "tests/unit/module_utils/test_data/build_query_params_user_query_params/data.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a14bdfe2e9b2c5dc723a6da6b812da1163057f03cf19fe2e5aec663ee6f1452e",
+ "chksum_sha256": "362739ebc62d83999764392653b6347662f5fadf3f88b5b38a9ce0924db2acea",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_l2vpn_termination.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b630f638bb826104bdc423470761fbf67d8495f64f4907deec67d37d7e02a743",
+ "name": "tests/unit/module_utils/test_data/slug",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_fhrp_group.yml",
+ "name": "tests/unit/module_utils/test_data/slug/data.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c7385675cfb10a26888c09d7822315d06d9aaf3daa73a9ba5b1745190affa1ae",
+ "chksum_sha256": "d38464486cef0b272cd7879626d2fbccaba6359c5166c2aed483fcd0c108645c",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_cable.yml",
+ "name": "tests/unit/module_utils/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "480243fd666d163294704b2c74b9034115284efdeb6e0b73b308425b454bfa7f",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_virtual_disk.yml",
+ "name": "tests/unit/module_utils/test_netbox_base_class.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1d9a63d51a8c013d78872361871d75dafc46f01305a08c0c9cff37cf3d271729",
+ "chksum_sha256": "b0dc56f4039832885f094fd6afe72322d991372b113e600ad2f52d0f60a54e74",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_site.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "58ff74a2f2ec0eb44cccf7e545d11d5a1cdeded86afeee1061757117594b38b2",
+ "name": "tests/unit/inventory",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_console_port_template.yml",
+ "name": "tests/unit/inventory/test_nb_inventory.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a0f5b420ba0e259d28ed11d0f9a81f3e6e67744ae3bfdaaf5beb737343a44cef",
+ "chksum_sha256": "2598c9a69dac190a21c54203db31729ee16acc0b4f08a62fe6130dea5230c2c8",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_wireless_lan.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d86fdee3d125962731b3d98a027a30f4d7ba445b0fdc74cd0b0fc3cda5a1d23c",
+ "name": "tests/unit/inventory/test_data",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_rack_role.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "61501632bf0456ba39fbcebc22660f51d3e3000c6bf497c05e207851456537b6",
+ "name": "tests/unit/inventory/test_data/refresh_url",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_rack.yml",
+ "name": "tests/unit/inventory/test_data/refresh_url/data.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "acd85ca6fd6944c33a6a58f14c96fa598e6ec6d19cc38e0ef36cacb1ef973660",
+ "chksum_sha256": "26ce71fb70dc9b712c6c61495f8e03308f03a1d38efce476737100cde2664d93",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_provider.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4deb86969d18e570533d5a2738afddf66725d6d4f4abc3576384aaf226c82ba2",
+ "name": "tests/unit/inventory/test_data/group_extractors",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_l2vpn.yml",
+ "name": "tests/unit/inventory/test_data/group_extractors/data.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "80bf09f6c370f9575209a81f28e5ed2717c05dd14345e395efc615e4884b1979",
+ "chksum_sha256": "a70575200ab06266b0d57856884be9e187cb5fe4737bb93883024dcb66ac8849",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_rear_port_template.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d3d62cd318b253c9f41f11d93ce4ccfa348c61bd0c5f281e7b33110ff9ca1d0f",
+ "name": "tests/unit/inventory/test_data/get_resource_list_chunked",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_ipam_role.yml",
+ "name": "tests/unit/inventory/test_data/get_resource_list_chunked/data.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "87927259bdf063bc202fa76992dc4ea7fdf3953cb181261271af32c0464fef6b",
+ "chksum_sha256": "09bee34133057a8261ff63b1392f689076a161cefca45e489fe9ed0b9846dee4",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_vlan_group.yml",
+ "name": "tests/unit/inventory/test_data/data.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9137743d782b3f5a7c93da6008c5c1251ef3d48f18926d4a6d1e2888fd3ea383",
+ "chksum_sha256": "3894903f8c1c89c1f679f9860e22dd3adb3d3e4c2de310e2b91ddcdf32673411",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_power_port.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d51e0c69d26bf3bb64ae02399ceb1a59f05105e73d17c9c1b0144b85657f5bac",
+ "name": "tests/unit/inventory/test_data/extract_custom_fields",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_circuit.yml",
+ "name": "tests/unit/inventory/test_data/extract_custom_fields/data.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "afb572e4f30a6abcbb2cc5a4441643bc8da05919f825de0681c5e886d6100f30",
+ "chksum_sha256": "b7b970702d1d2884cf0115bc7fef7a54a0c9b49c01d138e568e27902280afd21",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_export_template.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3e3cdf0b433461d0bc0db2cc67e0fd22150ff9922732ac023fb7afc5203216fc",
+ "name": "tests/unit/inventory/test_data/validate_query_parameter",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_front_port_template.yml",
+ "name": "tests/unit/inventory/test_data/validate_query_parameter/data.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "961155a3a4abfda44ec2fef8512e7bf78304aa0c7aa366ce6756a054fe55a668",
+ "chksum_sha256": "c38afa75bd45672caa3cae3eef0306f045828f98f47f3ee8f41e2a51296e4f79",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_device.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3e74537f88cec7810735c35c53132ec899156fd02732cf10e0fb4ff7e1e5a14d",
+ "name": "tests/unit/inventory/test_data/filter_query_parameters",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_power_panel.yml",
+ "name": "tests/unit/inventory/test_data/filter_query_parameters/data.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eac755f52d8df88bb2100cf44cd7557739922838f04ded5da4aff356c75e172b",
+ "chksum_sha256": "3ecebe7994f1acfae3e196b3f8bce30dab18114fa92f662a4e06a57f338870be",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_power_feed.yml",
+ "name": "tests/unit/inventory/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2a784756ec7c4cf50c065187f7c92e6f14117e59f86f32d148304f8ebb4deb46",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_power_outlet.yml",
+ "name": "tests/test_data.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4f94df7d99ba01a989c829231e3a2eab8ff955cb31e8bd1a19afa1b89c266f5f",
+ "chksum_sha256": "b5c34afc0e8ddbb4fc388802015f63ff1628e2f3335f8cce280c0e38933acd60",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_circuit_termination.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "318daab4470ec628ff83d4dfb2a4b7270a42863eb3a80ca142ef9094fa9cb898",
+ "name": "tests/integration",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_tenant_group.yml",
+ "name": "tests/integration/render_config.sh",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1ae1dc4a42a5fb65dcc1272f424a87cbdb6984dfe1787b310583059567fd181d",
+ "chksum_sha256": "76c5a19289c4ca86c9124b748e1a7d7d338ba92a46a451dfede864a91c96075c",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_manufacturer.yml",
+ "name": "tests/integration/integration.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6f45b1dfe652beff573994e37d534d6c421f428d984f43d1bab497618009fef8",
+ "chksum_sha256": "b5e219ab076b1e90de2c650d480fe0a4b8724f839ac95f5240ed64a80202dfbf",
"format": 1
},
{
- "name": "tests/integration/targets/v3.7/tasks/netbox_device_interface_template.yml",
+ "name": "tests/integration/netbox-deploy.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e5e071bccd038ddbae0dc33ed5b2ea7b9cce00cd28f29d8160f0d308784d30dc",
+ "chksum_sha256": "eba03e4920c85a9e0ac4583ce7d3966d610af963600892f94f324e56cd0a4143",
"format": 1
},
{
- "name": "tests/integration/targets/regression-v3.6",
+ "name": "tests/integration/targets",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/regression-v3.6/tasks",
+ "name": "tests/integration/targets/v3.6",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/regression-v3.6/tasks/main.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "41cdf99d833f0b3525d59fee564411727dc3f89e908eaf1240f064ec051291be",
- "format": 1
- },
- {
- "name": "tests/integration/targets/inventory-v3.6",
+ "name": "tests/integration/targets/v3.6/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.6/.gitignore",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_site.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "deacc9eea815485333d506e5bd64fb0c4a4a9980a33ff1b443a2deb0ca488209",
+ "chksum_sha256": "58ff74a2f2ec0eb44cccf7e545d11d5a1cdeded86afeee1061757117594b38b2",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.6/compare_inventory_json.py",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_console_port.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "30c33ec36a02ba2483003189f86f977cc29e460ab660e040f70ec4136770fec1",
+ "chksum_sha256": "f22bf91272f6001c1a9d8819ca38a0524c8a442640e5ba2eef2d1d53f4f4340e",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.6/runme.sh",
+ "name": "tests/integration/targets/v3.6/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f2d26a7388590de5e1126420c402289975eded15a914293329f046406a82ed1d",
+ "chksum_sha256": "ea338364a67fc2261c3255b0e7c4bdbc18c0854744b5fdc70fa515f8e60ffcb5",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.6/aliases",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_vm_interface.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3efbf182d151ffe527a8a250a044a83997eec84d250c8651dcdfe6f62c60a97d",
- "format": 1
- },
- {
- "name": "tests/integration/targets/inventory-v3.6/files",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "0de602de86254d9c7f4c09f7b9d87da55dd0ddba4c7dbef6bc68bd041669151d",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-options-flatten.yml",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_aggregate.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e74d737990bde83f01d36ba03891d575d347b9d522c8bed244851ec6001338c0",
+ "chksum_sha256": "1ea02627b92f257b58e16c77e038930542b949e6cfc7acb38beac52330318d8c",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-options.json",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_platform.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c17f5eef88e43f08288f480719439acd00330c5196d1c14134fa6194103c1519",
+ "chksum_sha256": "2bdd6dd59eb4dcbfb1e285aef3bfbfe944552c3dd2bd20e17b58b5798926221e",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.6/files/test-inventory.json",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_wireless_link.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d1009b6685415e91a9a11dfaa939cacb03fd5f3efd6adff0eb7fa2958ddbdbee",
+ "chksum_sha256": "807da638ea8dc21080bc21a3033dd065570ff93e3dfe9edc4963922505a3613a",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-plurals-flatten.json",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_vlan.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b10179aa589cbcd92340b4dbfd4c816af473e22c2ca6b2edcd60ee9ade7c3b7a",
+ "chksum_sha256": "f3de3e0d80daef5d6def7c55b974a6c88d4322ac35cb397ca1cbbfe90ef2fd8e",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-legacy.json",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_power_outlet.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "83e2fb444512331c6bc9e0677cd7d71450dffcb2625dfa7c759612c254af5c81",
+ "chksum_sha256": "4f94df7d99ba01a989c829231e3a2eab8ff955cb31e8bd1a19afa1b89c266f5f",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-bearer-token.json",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_tag.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d1009b6685415e91a9a11dfaa939cacb03fd5f3efd6adff0eb7fa2958ddbdbee",
+ "chksum_sha256": "32e11eea93510a83b15b736bdf46995492dd0dcbdb025993f16532aad6de2b22",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-bearer-token.yml",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_rack_role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "06c2028c7743ed3ac39e2ff50f7db2cdf81096bf8412cc67af25f0041c9aae1b",
+ "chksum_sha256": "e18dfdc340ea38186fe5fa2e420ee9982f6bbec423964490865ec6683f304cba",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-noracks.json",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_rear_port.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7c504c26d63da38458f77027c0e542aa2bb34eef183829623de02086e79c031c",
+ "chksum_sha256": "a14bdfe2e9b2c5dc723a6da6b812da1163057f03cf19fe2e5aec663ee6f1452e",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.6/files/test-inventory.yml",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_module_type.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f8315a7e1f2c4aaade12b7eab7f2eba9e9763e45fb846730775107aea87b2d86",
+ "chksum_sha256": "b78dc0f37cb445ca99d589c3f296ec1bb6b999dddbcbc2fe8ba64c78e700c53f",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-jinja2-filter.yml",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_provider.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3b673c5a5b01a862fef9114d9a4ba7dcbebcb135efb86f33072ff49f144ddb9",
+ "chksum_sha256": "4deb86969d18e570533d5a2738afddf66725d6d4f4abc3576384aaf226c82ba2",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-plurals.json",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_circuit_termination.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4ba0e5ede35b7822fd1658b50fd9bc80fa259bee9989b0818c8af95b53577999",
+ "chksum_sha256": "318daab4470ec628ff83d4dfb2a4b7270a42863eb3a80ca142ef9094fa9cb898",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-options-flatten.json",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_lookup.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cd27110ff787e21cddc8beaa564db9b7e29a8ac77ce10c99ed1c166006708802",
+ "chksum_sha256": "12bc28911f599b5e292425de7d0d6f5f596fee407befbabbc0e7de33f9a1d9e0",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-legacy.yml",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_vrf.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "46884cd5540b0fef87c808434d64cf34d11b4cb2a837083c024a4280a444e457",
+ "chksum_sha256": "e3b0a17e30d5154ca2aa90285ab251f52d457e89ced6509d83366101ad36e0da",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-jinja2.json",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_fhrp_group_assignment.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c17f5eef88e43f08288f480719439acd00330c5196d1c14134fa6194103c1519",
+ "chksum_sha256": "6315cc64905295c66bc9143b67b6ce4e52e089c85953c0e8729d8ffbd435f0d2",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-jinja2.yml",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_power_panel.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1b9009a12cfbed3386c6a7d857edc56c8fa88b1917fb6fee6334eb4209f7e349",
+ "chksum_sha256": "eac755f52d8df88bb2100cf44cd7557739922838f04ded5da4aff356c75e172b",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-noracks.yml",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_manufacturer.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6d0971c39294eb2c759bfaed12e5c266b1606216d6c384b3ed322240e644d3e2",
+ "chksum_sha256": "6f45b1dfe652beff573994e37d534d6c421f428d984f43d1bab497618009fef8",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-plurals-flatten.yml",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_custom_link.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5e9c03704abbec6258adf89461e897f3ea277970a5f172f651d879fb1da921ed",
+ "chksum_sha256": "2e9c75e22e6e2540065ed53d26657677c927af1bf3a73c29064c0e3361382e3f",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-jinja2-filter.json",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_service.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "65f7c6327d4cbfd7c59d903100681fd668b50e441fb280d3ad38c26d0d03d915",
+ "chksum_sha256": "1e3384a81b3bc49bcaf3f7d82268cc03a9dd609e2a88e18eeac2677bcf604154",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-plurals.yml",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_device_bay.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "08ff16818cf6b69f12219eec23a73b8dd4ed7c10b59869628df74daa8d3c414f",
+ "chksum_sha256": "482fe4849d9caff69a8604ab3e8324b0beaceb49e66360d0c3eb7c79d7ac8c34",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-options.yml",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_front_port.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3f3f9031d9c1d74774e7580fe9676c7f218de99fb8a1fe5e917db51f3bf3f4af",
+ "chksum_sha256": "3b56521d53c9a818916cb718e018214e7123db6b3feb0456532d476955d0aa28",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.6/runme_config.template",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_prefix.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "de40fd34a465f7da8925f1e9ba52359e10ac740e08f2dfa398691810fcc03bd7",
- "format": 1
- },
- {
- "name": "tests/integration/targets/inventory-v3.7",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "f55ed9fcbda0d371e51828c3ecee2e103ac45f60ce5e5d6c28a04bb16ba64d76",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.7/.gitignore",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_site_group.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "deacc9eea815485333d506e5bd64fb0c4a4a9980a33ff1b443a2deb0ca488209",
+ "chksum_sha256": "c5770e6c7f178cfed77e7cc9b4b7c7f7d8ed7557420c8e1ee3a221f54e2cbaaf",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.7/compare_inventory_json.py",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_journal_entry.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "30c33ec36a02ba2483003189f86f977cc29e460ab660e040f70ec4136770fec1",
+ "chksum_sha256": "0526255ed056eea4324dc0615f4f1b18be2c3ce66951850736b9d6533ae2660a",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.7/runme.sh",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_custom_field_choice_set.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f2d26a7388590de5e1126420c402289975eded15a914293329f046406a82ed1d",
+ "chksum_sha256": "707e0f1c5e2fb4486d778314239c4eaa353dbc6a09ec6199e0aa4c52994642b8",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.7/aliases",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_rir.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3efbf182d151ffe527a8a250a044a83997eec84d250c8651dcdfe6f62c60a97d",
+ "chksum_sha256": "280fb5eb850e14e7874ada263f1c03f15da3ed24f4730f960967cf8993eb81e3",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.7/files",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/v3.6/tasks/netbox_power_feed.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2a784756ec7c4cf50c065187f7c92e6f14117e59f86f32d148304f8ebb4deb46",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-options-flatten.yml",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_console_server_port_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e74d737990bde83f01d36ba03891d575d347b9d522c8bed244851ec6001338c0",
+ "chksum_sha256": "31efff083088eb516aa5e7769b52024bee646ab8f996a708fc09d2445c16ce7d",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-options.json",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_console_server_port.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c17f5eef88e43f08288f480719439acd00330c5196d1c14134fa6194103c1519",
+ "chksum_sha256": "d1c5d0d6e586d445667dd44b70a72e7d50564ba7e95cd2321289859eee3e3f6a",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.7/files/test-inventory.json",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_power_port.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d1009b6685415e91a9a11dfaa939cacb03fd5f3efd6adff0eb7fa2958ddbdbee",
+ "chksum_sha256": "d51e0c69d26bf3bb64ae02399ceb1a59f05105e73d17c9c1b0144b85657f5bac",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-plurals-flatten.json",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_contact_role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b10179aa589cbcd92340b4dbfd4c816af473e22c2ca6b2edcd60ee9ade7c3b7a",
+ "chksum_sha256": "52d72f63e31c7de7bc1dc2276112f491466ddbad59628833213f0ce78fb59cb3",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-legacy.json",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_custom_field.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "83e2fb444512331c6bc9e0677cd7d71450dffcb2625dfa7c759612c254af5c81",
+ "chksum_sha256": "46cecc1067a4995a8820e51f451e9d5291864b79876cc8551b60d81baed55b53",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-bearer-token.json",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_export_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d1009b6685415e91a9a11dfaa939cacb03fd5f3efd6adff0eb7fa2958ddbdbee",
+ "chksum_sha256": "3e3cdf0b433461d0bc0db2cc67e0fd22150ff9922732ac023fb7afc5203216fc",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-bearer-token.yml",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_ip_address.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "06c2028c7743ed3ac39e2ff50f7db2cdf81096bf8412cc67af25f0041c9aae1b",
+ "chksum_sha256": "2608d42fc6e56d8ab7d52c28d33658dcca6d8fb350fe2a92ede8d3e852c13ea7",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-noracks.json",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_cluster_type.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7c504c26d63da38458f77027c0e542aa2bb34eef183829623de02086e79c031c",
+ "chksum_sha256": "c88469e151627ba4f18c90ec7dc96449ebc38e0b10c3715b2527e8ed2317ff87",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.7/files/test-inventory.yml",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_route_target.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f8315a7e1f2c4aaade12b7eab7f2eba9e9763e45fb846730775107aea87b2d86",
+ "chksum_sha256": "a1265c144e813a4fe745934790f9283d30558187bef8d58f705754719ec480dc",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-jinja2-filter.yml",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_config_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3b673c5a5b01a862fef9114d9a4ba7dcbebcb135efb86f33072ff49f144ddb9",
+ "chksum_sha256": "632cc2291e1afc3307a450b9ec6b5e75b321facf5c0a3881230edd834cb72d43",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-plurals.json",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_device.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4ba0e5ede35b7822fd1658b50fd9bc80fa259bee9989b0818c8af95b53577999",
+ "chksum_sha256": "572c930adbd6f88811ac62e0616ef5228216368b450a9401445bcc18df53bf11",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-options-flatten.json",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_l2vpn_termination.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cd27110ff787e21cddc8beaa564db9b7e29a8ac77ce10c99ed1c166006708802",
+ "chksum_sha256": "b630f638bb826104bdc423470761fbf67d8495f64f4907deec67d37d7e02a743",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-legacy.yml",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_tenant_group.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "46884cd5540b0fef87c808434d64cf34d11b4cb2a837083c024a4280a444e457",
+ "chksum_sha256": "1ae1dc4a42a5fb65dcc1272f424a87cbdb6984dfe1787b310583059567fd181d",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-jinja2.json",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_ipam_role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c17f5eef88e43f08288f480719439acd00330c5196d1c14134fa6194103c1519",
+ "chksum_sha256": "87927259bdf063bc202fa76992dc4ea7fdf3953cb181261271af32c0464fef6b",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-jinja2.yml",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_console_port_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1b9009a12cfbed3386c6a7d857edc56c8fa88b1917fb6fee6334eb4209f7e349",
+ "chksum_sha256": "a0f5b420ba0e259d28ed11d0f9a81f3e6e67744ae3bfdaaf5beb737343a44cef",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-noracks.yml",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_wireless_lan.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6d0971c39294eb2c759bfaed12e5c266b1606216d6c384b3ed322240e644d3e2",
+ "chksum_sha256": "d86fdee3d125962731b3d98a027a30f4d7ba445b0fdc74cd0b0fc3cda5a1d23c",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-plurals-flatten.yml",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_power_outlet_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5e9c03704abbec6258adf89461e897f3ea277970a5f172f651d879fb1da921ed",
+ "chksum_sha256": "7076e4492f1e5a9320edee905c9d9b29c0ca0a9222adac0903cd31e424a97edb",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-jinja2-filter.json",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_location.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "65f7c6327d4cbfd7c59d903100681fd668b50e441fb280d3ad38c26d0d03d915",
+ "chksum_sha256": "4fde47ce5a7ad1ad91120d23a53db43cf885d640fab3013fcdc4201faf0fccdc",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-plurals.yml",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_contact.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "08ff16818cf6b69f12219eec23a73b8dd4ed7c10b59869628df74daa8d3c414f",
+ "chksum_sha256": "10800b08efc61984903e8d350ce3ade71ef7888bd67b75875f04ab463545704e",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-options.yml",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_region.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3f3f9031d9c1d74774e7580fe9676c7f218de99fb8a1fe5e917db51f3bf3f4af",
+ "chksum_sha256": "64c202f343c3b22244058176bdbe027d1cbc629d189d8dca03f8e2797758d93c",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.7/runme_config.template",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_tenant.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "de40fd34a465f7da8925f1e9ba52359e10ac740e08f2dfa398691810fcc03bd7",
+ "chksum_sha256": "12293e5057c80b6b491b0c99ec05d3556d2642f5fcb981fa0f215857b5855b3a",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.5",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/v3.6/tasks/netbox_config_context.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e1dbc4f90c9607e997c2b11c1cd58b37be0363a75d2e791034aaeb6302e1e263",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.5/.gitignore",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_virtual_machine.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "deacc9eea815485333d506e5bd64fb0c4a4a9980a33ff1b443a2deb0ca488209",
+ "chksum_sha256": "a804425ab778b2dc44ba33cb1637ee3a336b20f543e6ac9160d0c81d57de0099",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.5/compare_inventory_json.py",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_module.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "30c33ec36a02ba2483003189f86f977cc29e460ab660e040f70ec4136770fec1",
+ "chksum_sha256": "884e2cd1c2a1912fa485b7362c2d50a6ba36035d43c020f644ef0323631aa5ef",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.5/runme.sh",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_asn.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f2d26a7388590de5e1126420c402289975eded15a914293329f046406a82ed1d",
+ "chksum_sha256": "8ebdd0a1b9d7008523121a7c14be66d1400a9338828c231272c7f74d5726edce",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.5/aliases",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_virtual_chassis.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3efbf182d151ffe527a8a250a044a83997eec84d250c8651dcdfe6f62c60a97d",
+ "chksum_sha256": "952d715fc4c1dbca7f8d83128b67a0234a37666b9f553506ac749684dd80ebfb",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.5/files",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/v3.6/tasks/netbox_inventory_item_role.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b1bbf7b2aabc7b200fb8a612ee092629492c4a0a8cfd5e859c6cd9aadfa09d40",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-options-flatten.yml",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_front_port_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e74d737990bde83f01d36ba03891d575d347b9d522c8bed244851ec6001338c0",
+ "chksum_sha256": "961155a3a4abfda44ec2fef8512e7bf78304aa0c7aa366ce6756a054fe55a668",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-options.json",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_device_role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c17f5eef88e43f08288f480719439acd00330c5196d1c14134fa6194103c1519",
+ "chksum_sha256": "fa2e8d09e82a3f099913dc9cf23356a22626895123e59ef9528a183fa5d18dec",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.5/files/test-inventory.json",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_cable.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d1009b6685415e91a9a11dfaa939cacb03fd5f3efd6adff0eb7fa2958ddbdbee",
+ "chksum_sha256": "480243fd666d163294704b2c74b9034115284efdeb6e0b73b308425b454bfa7f",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-plurals-flatten.json",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_webhook.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b10179aa589cbcd92340b4dbfd4c816af473e22c2ca6b2edcd60ee9ade7c3b7a",
+ "chksum_sha256": "094744978836b9c9e5859b0a927c6d6088c2c1fa2c69366158a3c53cb44db5b0",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-legacy.json",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_l2vpn.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "83e2fb444512331c6bc9e0677cd7d71450dffcb2625dfa7c759612c254af5c81",
+ "chksum_sha256": "80bf09f6c370f9575209a81f28e5ed2717c05dd14345e395efc615e4884b1979",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-bearer-token.json",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_provider_network.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d1009b6685415e91a9a11dfaa939cacb03fd5f3efd6adff0eb7fa2958ddbdbee",
+ "chksum_sha256": "d85ad4ca9dd85d75489fbdb13ef60bc0cead57e5b0161308dcb5625e75c919b4",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-bearer-token.yml",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_device_bay_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "06c2028c7743ed3ac39e2ff50f7db2cdf81096bf8412cc67af25f0041c9aae1b",
+ "chksum_sha256": "b013bde7259d29fb3bc35de81fec4f2a0c24c09d54ada22355a39e406d0a9554",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-noracks.json",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_fhrp_group.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7c504c26d63da38458f77027c0e542aa2bb34eef183829623de02086e79c031c",
+ "chksum_sha256": "c7385675cfb10a26888c09d7822315d06d9aaf3daa73a9ba5b1745190affa1ae",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.5/files/test-inventory.yml",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_cluster.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f8315a7e1f2c4aaade12b7eab7f2eba9e9763e45fb846730775107aea87b2d86",
+ "chksum_sha256": "2967ce7f5f94401bfba564fa22901be8a7c81ba4eb848eb018c317538a5cc22e",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-jinja2-filter.yml",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_rack_group.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3b673c5a5b01a862fef9114d9a4ba7dcbebcb135efb86f33072ff49f144ddb9",
+ "chksum_sha256": "b8e3c495f289093c94d3612213c45a6f89624e4d762fd04e74d3062dab34cf1a",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-plurals.json",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_device_interface.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4ba0e5ede35b7822fd1658b50fd9bc80fa259bee9989b0818c8af95b53577999",
+ "chksum_sha256": "b97b575dba1385ba7361f881a9b4b553982f470eac4183e880c2cf71927e572b",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-options-flatten.json",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_wireless_lan_group.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cd27110ff787e21cddc8beaa564db9b7e29a8ac77ce10c99ed1c166006708802",
+ "chksum_sha256": "94a103ba1cd08739e44dd0be15e9ce1d88ba143b0efd88d47e78155409dfae3e",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-legacy.yml",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_device_interface_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "46884cd5540b0fef87c808434d64cf34d11b4cb2a837083c024a4280a444e457",
+ "chksum_sha256": "e5e071bccd038ddbae0dc33ed5b2ea7b9cce00cd28f29d8160f0d308784d30dc",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-jinja2.json",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_service_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c17f5eef88e43f08288f480719439acd00330c5196d1c14134fa6194103c1519",
+ "chksum_sha256": "2dd7572f2ea6c0a92edce50caa99145ea1065fa4800e71afe9c7bfa5fb16f021",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-jinja2.yml",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_circuit_type.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1b9009a12cfbed3386c6a7d857edc56c8fa88b1917fb6fee6334eb4209f7e349",
+ "chksum_sha256": "0b1e4ff5a8a0341bf0e4e123a523abfb9d194d420b83563536ea837750aa5ec1",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-noracks.yml",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_rack.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6d0971c39294eb2c759bfaed12e5c266b1606216d6c384b3ed322240e644d3e2",
+ "chksum_sha256": "acd85ca6fd6944c33a6a58f14c96fa598e6ec6d19cc38e0ef36cacb1ef973660",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-plurals-flatten.yml",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_cluster_group.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5e9c03704abbec6258adf89461e897f3ea277970a5f172f651d879fb1da921ed",
+ "chksum_sha256": "beb8453c7e490b5b8b9412c0d8bc4cd6c234e24368aa1f7c6a3c2a7e651b61c6",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-jinja2-filter.json",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_inventory_item.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "65f7c6327d4cbfd7c59d903100681fd668b50e441fb280d3ad38c26d0d03d915",
+ "chksum_sha256": "94a9328d196fd3e810b0827ea67aac0093b0b1414bf94b865d45181892b42dd6",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-plurals.yml",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_module_bay.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "08ff16818cf6b69f12219eec23a73b8dd4ed7c10b59869628df74daa8d3c414f",
+ "chksum_sha256": "5b8ad8989f26551b4d5f7015dd202aed037bcc247bc5f04b1c8aa5d713019831",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-options.yml",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_vlan_group.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3f3f9031d9c1d74774e7580fe9676c7f218de99fb8a1fe5e917db51f3bf3f4af",
+ "chksum_sha256": "9137743d782b3f5a7c93da6008c5c1251ef3d48f18926d4a6d1e2888fd3ea383",
"format": 1
},
{
- "name": "tests/integration/targets/inventory-v3.5/runme_config.template",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_circuit.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "de40fd34a465f7da8925f1e9ba52359e10ac740e08f2dfa398691810fcc03bd7",
+ "chksum_sha256": "afb572e4f30a6abcbb2cc5a4441643bc8da05919f825de0681c5e886d6100f30",
"format": 1
},
{
- "name": "tests/integration/targets/regression-v3.5",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/v3.6/tasks/netbox_rear_port_template.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d3d62cd318b253c9f41f11d93ce4ccfa348c61bd0c5f281e7b33110ff9ca1d0f",
"format": 1
},
{
- "name": "tests/integration/targets/regression-v3.5/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/v3.6/tasks/netbox_power_port_template.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b3e31a81a5f25b51c1df6cc5d3f9376be8c93b54888bbcf9b957661792b9e526",
"format": 1
},
{
- "name": "tests/integration/targets/regression-v3.5/tasks/main.yml",
+ "name": "tests/integration/targets/v3.6/tasks/netbox_device_type.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "41cdf99d833f0b3525d59fee564411727dc3f89e908eaf1240f064ec051291be",
+ "chksum_sha256": "6d6794c8ed22e4f2b14d881a98724c3152a4f03484307254b831cbf416e594ec",
"format": 1
},
{
@@ -3102,178 +3102,185 @@
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_region.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_site.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "64c202f343c3b22244058176bdbe027d1cbc629d189d8dca03f8e2797758d93c",
+ "chksum_sha256": "58ff74a2f2ec0eb44cccf7e545d11d5a1cdeded86afeee1061757117594b38b2",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_tenant.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_console_port.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "12293e5057c80b6b491b0c99ec05d3556d2642f5fcb981fa0f215857b5855b3a",
+ "chksum_sha256": "f22bf91272f6001c1a9d8819ca38a0524c8a442640e5ba2eef2d1d53f4f4340e",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_console_server_port.yml",
+ "name": "tests/integration/targets/v3.5/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d1c5d0d6e586d445667dd44b70a72e7d50564ba7e95cd2321289859eee3e3f6a",
+ "chksum_sha256": "54bc62b0f16212e0dc2f60b91ee8dc8c5cbb579d4d2b180a70bd0c068e7b42ca",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_power_outlet_template.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_vm_interface.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7076e4492f1e5a9320edee905c9d9b29c0ca0a9222adac0903cd31e424a97edb",
+ "chksum_sha256": "0de602de86254d9c7f4c09f7b9d87da55dd0ddba4c7dbef6bc68bd041669151d",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_fhrp_group_assignment.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_aggregate.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6315cc64905295c66bc9143b67b6ce4e52e089c85953c0e8729d8ffbd435f0d2",
+ "chksum_sha256": "1ea02627b92f257b58e16c77e038930542b949e6cfc7acb38beac52330318d8c",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_module_type.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_platform.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b78dc0f37cb445ca99d589c3f296ec1bb6b999dddbcbc2fe8ba64c78e700c53f",
+ "chksum_sha256": "35583509824aac0905c990d980a1e677ce4f259a82c1d2cd3addb0975f6a007d",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_site_group.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_wireless_link.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c5770e6c7f178cfed77e7cc9b4b7c7f7d8ed7557420c8e1ee3a221f54e2cbaaf",
+ "chksum_sha256": "807da638ea8dc21080bc21a3033dd065570ff93e3dfe9edc4963922505a3613a",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_wireless_lan_group.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_vlan.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "94a103ba1cd08739e44dd0be15e9ce1d88ba143b0efd88d47e78155409dfae3e",
+ "chksum_sha256": "f3de3e0d80daef5d6def7c55b974a6c88d4322ac35cb397ca1cbbfe90ef2fd8e",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_route_target.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_power_outlet.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a1265c144e813a4fe745934790f9283d30558187bef8d58f705754719ec480dc",
+ "chksum_sha256": "4f94df7d99ba01a989c829231e3a2eab8ff955cb31e8bd1a19afa1b89c266f5f",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_cluster.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_tag.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2967ce7f5f94401bfba564fa22901be8a7c81ba4eb848eb018c317538a5cc22e",
+ "chksum_sha256": "32e11eea93510a83b15b736bdf46995492dd0dcbdb025993f16532aad6de2b22",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_wireless_link.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_rack_role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "807da638ea8dc21080bc21a3033dd065570ff93e3dfe9edc4963922505a3613a",
+ "chksum_sha256": "61501632bf0456ba39fbcebc22660f51d3e3000c6bf497c05e207851456537b6",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_rack_group.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_rear_port.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b8e3c495f289093c94d3612213c45a6f89624e4d762fd04e74d3062dab34cf1a",
+ "chksum_sha256": "a14bdfe2e9b2c5dc723a6da6b812da1163057f03cf19fe2e5aec663ee6f1452e",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_rir.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_module_type.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "280fb5eb850e14e7874ada263f1c03f15da3ed24f4730f960967cf8993eb81e3",
+ "chksum_sha256": "b78dc0f37cb445ca99d589c3f296ec1bb6b999dddbcbc2fe8ba64c78e700c53f",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_platform.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_provider.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "35583509824aac0905c990d980a1e677ce4f259a82c1d2cd3addb0975f6a007d",
+ "chksum_sha256": "4deb86969d18e570533d5a2738afddf66725d6d4f4abc3576384aaf226c82ba2",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_asn.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_circuit_termination.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8ebdd0a1b9d7008523121a7c14be66d1400a9338828c231272c7f74d5726edce",
+ "chksum_sha256": "318daab4470ec628ff83d4dfb2a4b7270a42863eb3a80ca142ef9094fa9cb898",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_cluster_type.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_lookup.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c88469e151627ba4f18c90ec7dc96449ebc38e0b10c3715b2527e8ed2317ff87",
+ "chksum_sha256": "12bc28911f599b5e292425de7d0d6f5f596fee407befbabbc0e7de33f9a1d9e0",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_device_role.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_vrf.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fa2e8d09e82a3f099913dc9cf23356a22626895123e59ef9528a183fa5d18dec",
+ "chksum_sha256": "e3b0a17e30d5154ca2aa90285ab251f52d457e89ced6509d83366101ad36e0da",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_virtual_chassis.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_fhrp_group_assignment.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "952d715fc4c1dbca7f8d83128b67a0234a37666b9f553506ac749684dd80ebfb",
+ "chksum_sha256": "6315cc64905295c66bc9143b67b6ce4e52e089c85953c0e8729d8ffbd435f0d2",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_power_port_template.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_power_panel.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b3e31a81a5f25b51c1df6cc5d3f9376be8c93b54888bbcf9b957661792b9e526",
+ "chksum_sha256": "eac755f52d8df88bb2100cf44cd7557739922838f04ded5da4aff356c75e172b",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_service_template.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_manufacturer.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2dd7572f2ea6c0a92edce50caa99145ea1065fa4800e71afe9c7bfa5fb16f021",
+ "chksum_sha256": "6f45b1dfe652beff573994e37d534d6c421f428d984f43d1bab497618009fef8",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_device_bay_template.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_custom_link.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b013bde7259d29fb3bc35de81fec4f2a0c24c09d54ada22355a39e406d0a9554",
+ "chksum_sha256": "2e9c75e22e6e2540065ed53d26657677c927af1bf3a73c29064c0e3361382e3f",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_custom_link.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_service.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2e9c75e22e6e2540065ed53d26657677c927af1bf3a73c29064c0e3361382e3f",
+ "chksum_sha256": "1e3384a81b3bc49bcaf3f7d82268cc03a9dd609e2a88e18eeac2677bcf604154",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_service.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_device_bay.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1e3384a81b3bc49bcaf3f7d82268cc03a9dd609e2a88e18eeac2677bcf604154",
+ "chksum_sha256": "482fe4849d9caff69a8604ab3e8324b0beaceb49e66360d0c3eb7c79d7ac8c34",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_cluster_group.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_front_port.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "beb8453c7e490b5b8b9412c0d8bc4cd6c234e24368aa1f7c6a3c2a7e651b61c6",
+ "chksum_sha256": "3b56521d53c9a818916cb718e018214e7123db6b3feb0456532d476955d0aa28",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_circuit_type.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_prefix.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0b1e4ff5a8a0341bf0e4e123a523abfb9d194d420b83563536ea837750aa5ec1",
+ "chksum_sha256": "f55ed9fcbda0d371e51828c3ecee2e103ac45f60ce5e5d6c28a04bb16ba64d76",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/v3.5/tasks/netbox_site_group.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c5770e6c7f178cfed77e7cc9b4b7c7f7d8ed7557420c8e1ee3a221f54e2cbaaf",
"format": 1
},
{
@@ -3284,45 +3291,45 @@
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_aggregate.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_rir.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1ea02627b92f257b58e16c77e038930542b949e6cfc7acb38beac52330318d8c",
+ "chksum_sha256": "280fb5eb850e14e7874ada263f1c03f15da3ed24f4730f960967cf8993eb81e3",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_virtual_machine.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_power_feed.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a804425ab778b2dc44ba33cb1637ee3a336b20f543e6ac9160d0c81d57de0099",
+ "chksum_sha256": "2a784756ec7c4cf50c065187f7c92e6f14117e59f86f32d148304f8ebb4deb46",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_prefix.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_console_server_port_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f55ed9fcbda0d371e51828c3ecee2e103ac45f60ce5e5d6c28a04bb16ba64d76",
+ "chksum_sha256": "31efff083088eb516aa5e7769b52024bee646ab8f996a708fc09d2445c16ce7d",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_front_port.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_console_server_port.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3b56521d53c9a818916cb718e018214e7123db6b3feb0456532d476955d0aa28",
+ "chksum_sha256": "d1c5d0d6e586d445667dd44b70a72e7d50564ba7e95cd2321289859eee3e3f6a",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_contact.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_power_port.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "10800b08efc61984903e8d350ce3ade71ef7888bd67b75875f04ab463545704e",
+ "chksum_sha256": "d51e0c69d26bf3bb64ae02399ceb1a59f05105e73d17c9c1b0144b85657f5bac",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_ip_address.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_contact_role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2608d42fc6e56d8ab7d52c28d33658dcca6d8fb350fe2a92ede8d3e852c13ea7",
+ "chksum_sha256": "52d72f63e31c7de7bc1dc2276112f491466ddbad59628833213f0ce78fb59cb3",
"format": 1
},
{
@@ -3333,150 +3340,164 @@
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_console_server_port_template.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_export_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "31efff083088eb516aa5e7769b52024bee646ab8f996a708fc09d2445c16ce7d",
+ "chksum_sha256": "3e3cdf0b433461d0bc0db2cc67e0fd22150ff9922732ac023fb7afc5203216fc",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_device_bay.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_ip_address.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "482fe4849d9caff69a8604ab3e8324b0beaceb49e66360d0c3eb7c79d7ac8c34",
+ "chksum_sha256": "2608d42fc6e56d8ab7d52c28d33658dcca6d8fb350fe2a92ede8d3e852c13ea7",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_vrf.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_cluster_type.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0a17e30d5154ca2aa90285ab251f52d457e89ced6509d83366101ad36e0da",
+ "chksum_sha256": "c88469e151627ba4f18c90ec7dc96449ebc38e0b10c3715b2527e8ed2317ff87",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_tag.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_route_target.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "32e11eea93510a83b15b736bdf46995492dd0dcbdb025993f16532aad6de2b22",
+ "chksum_sha256": "a1265c144e813a4fe745934790f9283d30558187bef8d58f705754719ec480dc",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_inventory_item_role.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_device.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b1bbf7b2aabc7b200fb8a612ee092629492c4a0a8cfd5e859c6cd9aadfa09d40",
+ "chksum_sha256": "572c930adbd6f88811ac62e0616ef5228216368b450a9401445bcc18df53bf11",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_vlan.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_l2vpn_termination.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f3de3e0d80daef5d6def7c55b974a6c88d4322ac35cb397ca1cbbfe90ef2fd8e",
+ "chksum_sha256": "b630f638bb826104bdc423470761fbf67d8495f64f4907deec67d37d7e02a743",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_location.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_tenant_group.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4fde47ce5a7ad1ad91120d23a53db43cf885d640fab3013fcdc4201faf0fccdc",
+ "chksum_sha256": "1ae1dc4a42a5fb65dcc1272f424a87cbdb6984dfe1787b310583059567fd181d",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_vm_interface.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_ipam_role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0de602de86254d9c7f4c09f7b9d87da55dd0ddba4c7dbef6bc68bd041669151d",
+ "chksum_sha256": "87927259bdf063bc202fa76992dc4ea7fdf3953cb181261271af32c0464fef6b",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_lookup.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_console_port_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "12bc28911f599b5e292425de7d0d6f5f596fee407befbabbc0e7de33f9a1d9e0",
+ "chksum_sha256": "a0f5b420ba0e259d28ed11d0f9a81f3e6e67744ae3bfdaaf5beb737343a44cef",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_console_port.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_wireless_lan.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f22bf91272f6001c1a9d8819ca38a0524c8a442640e5ba2eef2d1d53f4f4340e",
+ "chksum_sha256": "d86fdee3d125962731b3d98a027a30f4d7ba445b0fdc74cd0b0fc3cda5a1d23c",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_provider_network.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_power_outlet_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d85ad4ca9dd85d75489fbdb13ef60bc0cead57e5b0161308dcb5625e75c919b4",
+ "chksum_sha256": "7076e4492f1e5a9320edee905c9d9b29c0ca0a9222adac0903cd31e424a97edb",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_device_interface.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_location.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cb352542fd0d9fb8d6eaf215bb6702e2f1fa131b18405c5a410936b49af156a2",
+ "chksum_sha256": "4fde47ce5a7ad1ad91120d23a53db43cf885d640fab3013fcdc4201faf0fccdc",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_contact_role.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_contact.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "52d72f63e31c7de7bc1dc2276112f491466ddbad59628833213f0ce78fb59cb3",
+ "chksum_sha256": "10800b08efc61984903e8d350ce3ade71ef7888bd67b75875f04ab463545704e",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_webhook.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_region.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "094744978836b9c9e5859b0a927c6d6088c2c1fa2c69366158a3c53cb44db5b0",
+ "chksum_sha256": "64c202f343c3b22244058176bdbe027d1cbc629d189d8dca03f8e2797758d93c",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_inventory_item.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_tenant.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "94a9328d196fd3e810b0827ea67aac0093b0b1414bf94b865d45181892b42dd6",
+ "chksum_sha256": "12293e5057c80b6b491b0c99ec05d3556d2642f5fcb981fa0f215857b5855b3a",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/main.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_config_context.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "54bc62b0f16212e0dc2f60b91ee8dc8c5cbb579d4d2b180a70bd0c068e7b42ca",
+ "chksum_sha256": "e1dbc4f90c9607e997c2b11c1cd58b37be0363a75d2e791034aaeb6302e1e263",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_device_type.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_virtual_machine.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "02f5b6658413511f1be6f109ba933c4859131c4985988f0a507b5b288e0684cb",
+ "chksum_sha256": "a804425ab778b2dc44ba33cb1637ee3a336b20f543e6ac9160d0c81d57de0099",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_config_context.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_module.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e1dbc4f90c9607e997c2b11c1cd58b37be0363a75d2e791034aaeb6302e1e263",
+ "chksum_sha256": "884e2cd1c2a1912fa485b7362c2d50a6ba36035d43c020f644ef0323631aa5ef",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_rear_port.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_asn.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a14bdfe2e9b2c5dc723a6da6b812da1163057f03cf19fe2e5aec663ee6f1452e",
+ "chksum_sha256": "8ebdd0a1b9d7008523121a7c14be66d1400a9338828c231272c7f74d5726edce",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_l2vpn_termination.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_virtual_chassis.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b630f638bb826104bdc423470761fbf67d8495f64f4907deec67d37d7e02a743",
+ "chksum_sha256": "952d715fc4c1dbca7f8d83128b67a0234a37666b9f553506ac749684dd80ebfb",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_fhrp_group.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_inventory_item_role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c7385675cfb10a26888c09d7822315d06d9aaf3daa73a9ba5b1745190affa1ae",
+ "chksum_sha256": "b1bbf7b2aabc7b200fb8a612ee092629492c4a0a8cfd5e859c6cd9aadfa09d40",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/v3.5/tasks/netbox_front_port_template.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "961155a3a4abfda44ec2fef8512e7bf78304aa0c7aa366ce6756a054fe55a668",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/v3.5/tasks/netbox_device_role.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fa2e8d09e82a3f099913dc9cf23356a22626895123e59ef9528a183fa5d18dec",
"format": 1
},
{
@@ -3487,1277 +3508,1368 @@
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_site.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_webhook.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "58ff74a2f2ec0eb44cccf7e545d11d5a1cdeded86afeee1061757117594b38b2",
+ "chksum_sha256": "094744978836b9c9e5859b0a927c6d6088c2c1fa2c69366158a3c53cb44db5b0",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_console_port_template.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_l2vpn.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a0f5b420ba0e259d28ed11d0f9a81f3e6e67744ae3bfdaaf5beb737343a44cef",
+ "chksum_sha256": "80bf09f6c370f9575209a81f28e5ed2717c05dd14345e395efc615e4884b1979",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_wireless_lan.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_provider_network.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d86fdee3d125962731b3d98a027a30f4d7ba445b0fdc74cd0b0fc3cda5a1d23c",
+ "chksum_sha256": "d85ad4ca9dd85d75489fbdb13ef60bc0cead57e5b0161308dcb5625e75c919b4",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_rack_role.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_device_bay_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "61501632bf0456ba39fbcebc22660f51d3e3000c6bf497c05e207851456537b6",
+ "chksum_sha256": "b013bde7259d29fb3bc35de81fec4f2a0c24c09d54ada22355a39e406d0a9554",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_rack.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_fhrp_group.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a5cc467d406405bb9458401645826acc394819d6b994fec2f27477d25677a6b4",
+ "chksum_sha256": "c7385675cfb10a26888c09d7822315d06d9aaf3daa73a9ba5b1745190affa1ae",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_provider.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_cluster.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4deb86969d18e570533d5a2738afddf66725d6d4f4abc3576384aaf226c82ba2",
+ "chksum_sha256": "2967ce7f5f94401bfba564fa22901be8a7c81ba4eb848eb018c317538a5cc22e",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_l2vpn.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_rack_group.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "80bf09f6c370f9575209a81f28e5ed2717c05dd14345e395efc615e4884b1979",
+ "chksum_sha256": "b8e3c495f289093c94d3612213c45a6f89624e4d762fd04e74d3062dab34cf1a",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_rear_port_template.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_device_interface.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3d62cd318b253c9f41f11d93ce4ccfa348c61bd0c5f281e7b33110ff9ca1d0f",
+ "chksum_sha256": "cb352542fd0d9fb8d6eaf215bb6702e2f1fa131b18405c5a410936b49af156a2",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_ipam_role.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_wireless_lan_group.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "87927259bdf063bc202fa76992dc4ea7fdf3953cb181261271af32c0464fef6b",
+ "chksum_sha256": "94a103ba1cd08739e44dd0be15e9ce1d88ba143b0efd88d47e78155409dfae3e",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_vlan_group.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_device_interface_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9137743d782b3f5a7c93da6008c5c1251ef3d48f18926d4a6d1e2888fd3ea383",
+ "chksum_sha256": "e5e071bccd038ddbae0dc33ed5b2ea7b9cce00cd28f29d8160f0d308784d30dc",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_power_port.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_service_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d51e0c69d26bf3bb64ae02399ceb1a59f05105e73d17c9c1b0144b85657f5bac",
+ "chksum_sha256": "2dd7572f2ea6c0a92edce50caa99145ea1065fa4800e71afe9c7bfa5fb16f021",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_circuit.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_circuit_type.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "afb572e4f30a6abcbb2cc5a4441643bc8da05919f825de0681c5e886d6100f30",
+ "chksum_sha256": "0b1e4ff5a8a0341bf0e4e123a523abfb9d194d420b83563536ea837750aa5ec1",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_export_template.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_rack.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3e3cdf0b433461d0bc0db2cc67e0fd22150ff9922732ac023fb7afc5203216fc",
+ "chksum_sha256": "a5cc467d406405bb9458401645826acc394819d6b994fec2f27477d25677a6b4",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_front_port_template.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_cluster_group.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "961155a3a4abfda44ec2fef8512e7bf78304aa0c7aa366ce6756a054fe55a668",
+ "chksum_sha256": "beb8453c7e490b5b8b9412c0d8bc4cd6c234e24368aa1f7c6a3c2a7e651b61c6",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_device.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_inventory_item.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3e74537f88cec7810735c35c53132ec899156fd02732cf10e0fb4ff7e1e5a14d",
+ "chksum_sha256": "94a9328d196fd3e810b0827ea67aac0093b0b1414bf94b865d45181892b42dd6",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_power_panel.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_module_bay.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eac755f52d8df88bb2100cf44cd7557739922838f04ded5da4aff356c75e172b",
+ "chksum_sha256": "5b8ad8989f26551b4d5f7015dd202aed037bcc247bc5f04b1c8aa5d713019831",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_power_feed.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_vlan_group.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2a784756ec7c4cf50c065187f7c92e6f14117e59f86f32d148304f8ebb4deb46",
+ "chksum_sha256": "9137743d782b3f5a7c93da6008c5c1251ef3d48f18926d4a6d1e2888fd3ea383",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_power_outlet.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_circuit.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4f94df7d99ba01a989c829231e3a2eab8ff955cb31e8bd1a19afa1b89c266f5f",
+ "chksum_sha256": "afb572e4f30a6abcbb2cc5a4441643bc8da05919f825de0681c5e886d6100f30",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_circuit_termination.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_rear_port_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "318daab4470ec628ff83d4dfb2a4b7270a42863eb3a80ca142ef9094fa9cb898",
+ "chksum_sha256": "d3d62cd318b253c9f41f11d93ce4ccfa348c61bd0c5f281e7b33110ff9ca1d0f",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_tenant_group.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_power_port_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1ae1dc4a42a5fb65dcc1272f424a87cbdb6984dfe1787b310583059567fd181d",
+ "chksum_sha256": "b3e31a81a5f25b51c1df6cc5d3f9376be8c93b54888bbcf9b957661792b9e526",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_manufacturer.yml",
+ "name": "tests/integration/targets/v3.5/tasks/netbox_device_type.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6f45b1dfe652beff573994e37d534d6c421f428d984f43d1bab497618009fef8",
+ "chksum_sha256": "6d6794c8ed22e4f2b14d881a98724c3152a4f03484307254b831cbf416e594ec",
"format": 1
},
{
- "name": "tests/integration/targets/v3.5/tasks/netbox_device_interface_template.yml",
+ "name": "tests/integration/targets/regression-v3.6",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/regression-v3.6/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/regression-v3.6/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e5e071bccd038ddbae0dc33ed5b2ea7b9cce00cd28f29d8160f0d308784d30dc",
+ "chksum_sha256": "41cdf99d833f0b3525d59fee564411727dc3f89e908eaf1240f064ec051291be",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6",
+ "name": "tests/integration/targets/inventory-v3.5",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks",
+ "name": "tests/integration/targets/inventory-v3.5/files",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_region.yml",
+ "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-plurals-flatten.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "64c202f343c3b22244058176bdbe027d1cbc629d189d8dca03f8e2797758d93c",
+ "chksum_sha256": "b10179aa589cbcd92340b4dbfd4c816af473e22c2ca6b2edcd60ee9ade7c3b7a",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_tenant.yml",
+ "name": "tests/integration/targets/inventory-v3.5/files/test-inventory.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "12293e5057c80b6b491b0c99ec05d3556d2642f5fcb981fa0f215857b5855b3a",
+ "chksum_sha256": "d1009b6685415e91a9a11dfaa939cacb03fd5f3efd6adff0eb7fa2958ddbdbee",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_console_server_port.yml",
+ "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-options.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d1c5d0d6e586d445667dd44b70a72e7d50564ba7e95cd2321289859eee3e3f6a",
+ "chksum_sha256": "c17f5eef88e43f08288f480719439acd00330c5196d1c14134fa6194103c1519",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_power_outlet_template.yml",
+ "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-plurals-flatten.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7076e4492f1e5a9320edee905c9d9b29c0ca0a9222adac0903cd31e424a97edb",
+ "chksum_sha256": "5e9c03704abbec6258adf89461e897f3ea277970a5f172f651d879fb1da921ed",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_fhrp_group_assignment.yml",
+ "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-legacy.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6315cc64905295c66bc9143b67b6ce4e52e089c85953c0e8729d8ffbd435f0d2",
+ "chksum_sha256": "83e2fb444512331c6bc9e0677cd7d71450dffcb2625dfa7c759612c254af5c81",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_module_type.yml",
+ "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-plurals.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b78dc0f37cb445ca99d589c3f296ec1bb6b999dddbcbc2fe8ba64c78e700c53f",
+ "chksum_sha256": "4ba0e5ede35b7822fd1658b50fd9bc80fa259bee9989b0818c8af95b53577999",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_site_group.yml",
+ "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-options.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c5770e6c7f178cfed77e7cc9b4b7c7f7d8ed7557420c8e1ee3a221f54e2cbaaf",
+ "chksum_sha256": "3f3f9031d9c1d74774e7580fe9676c7f218de99fb8a1fe5e917db51f3bf3f4af",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_wireless_lan_group.yml",
+ "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-bearer-token.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "94a103ba1cd08739e44dd0be15e9ce1d88ba143b0efd88d47e78155409dfae3e",
+ "chksum_sha256": "d1009b6685415e91a9a11dfaa939cacb03fd5f3efd6adff0eb7fa2958ddbdbee",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_route_target.yml",
+ "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-jinja2-filter.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a1265c144e813a4fe745934790f9283d30558187bef8d58f705754719ec480dc",
+ "chksum_sha256": "65f7c6327d4cbfd7c59d903100681fd668b50e441fb280d3ad38c26d0d03d915",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_cluster.yml",
+ "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-legacy.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2967ce7f5f94401bfba564fa22901be8a7c81ba4eb848eb018c317538a5cc22e",
+ "chksum_sha256": "46884cd5540b0fef87c808434d64cf34d11b4cb2a837083c024a4280a444e457",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_wireless_link.yml",
+ "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-options-flatten.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "807da638ea8dc21080bc21a3033dd065570ff93e3dfe9edc4963922505a3613a",
+ "chksum_sha256": "cd27110ff787e21cddc8beaa564db9b7e29a8ac77ce10c99ed1c166006708802",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_rack_group.yml",
+ "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-jinja2-filter.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b8e3c495f289093c94d3612213c45a6f89624e4d762fd04e74d3062dab34cf1a",
+ "chksum_sha256": "d3b673c5a5b01a862fef9114d9a4ba7dcbebcb135efb86f33072ff49f144ddb9",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_rir.yml",
+ "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-noracks.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "280fb5eb850e14e7874ada263f1c03f15da3ed24f4730f960967cf8993eb81e3",
+ "chksum_sha256": "6d0971c39294eb2c759bfaed12e5c266b1606216d6c384b3ed322240e644d3e2",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_platform.yml",
+ "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-bearer-token.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2bdd6dd59eb4dcbfb1e285aef3bfbfe944552c3dd2bd20e17b58b5798926221e",
+ "chksum_sha256": "06c2028c7743ed3ac39e2ff50f7db2cdf81096bf8412cc67af25f0041c9aae1b",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_asn.yml",
+ "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-options-flatten.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8ebdd0a1b9d7008523121a7c14be66d1400a9338828c231272c7f74d5726edce",
+ "chksum_sha256": "e74d737990bde83f01d36ba03891d575d347b9d522c8bed244851ec6001338c0",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_cluster_type.yml",
+ "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-jinja2.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c88469e151627ba4f18c90ec7dc96449ebc38e0b10c3715b2527e8ed2317ff87",
+ "chksum_sha256": "c17f5eef88e43f08288f480719439acd00330c5196d1c14134fa6194103c1519",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_device_role.yml",
+ "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-noracks.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fa2e8d09e82a3f099913dc9cf23356a22626895123e59ef9528a183fa5d18dec",
+ "chksum_sha256": "7c504c26d63da38458f77027c0e542aa2bb34eef183829623de02086e79c031c",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_virtual_chassis.yml",
+ "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-plurals.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "952d715fc4c1dbca7f8d83128b67a0234a37666b9f553506ac749684dd80ebfb",
+ "chksum_sha256": "08ff16818cf6b69f12219eec23a73b8dd4ed7c10b59869628df74daa8d3c414f",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_power_port_template.yml",
+ "name": "tests/integration/targets/inventory-v3.5/files/test-inventory.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b3e31a81a5f25b51c1df6cc5d3f9376be8c93b54888bbcf9b957661792b9e526",
+ "chksum_sha256": "f8315a7e1f2c4aaade12b7eab7f2eba9e9763e45fb846730775107aea87b2d86",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_service_template.yml",
+ "name": "tests/integration/targets/inventory-v3.5/files/test-inventory-jinja2.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2dd7572f2ea6c0a92edce50caa99145ea1065fa4800e71afe9c7bfa5fb16f021",
+ "chksum_sha256": "1b9009a12cfbed3386c6a7d857edc56c8fa88b1917fb6fee6334eb4209f7e349",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_device_bay_template.yml",
+ "name": "tests/integration/targets/inventory-v3.5/compare_inventory_json.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b013bde7259d29fb3bc35de81fec4f2a0c24c09d54ada22355a39e406d0a9554",
+ "chksum_sha256": "30c33ec36a02ba2483003189f86f977cc29e460ab660e040f70ec4136770fec1",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_custom_link.yml",
+ "name": "tests/integration/targets/inventory-v3.5/runme.sh",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2e9c75e22e6e2540065ed53d26657677c927af1bf3a73c29064c0e3361382e3f",
+ "chksum_sha256": "f2d26a7388590de5e1126420c402289975eded15a914293329f046406a82ed1d",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_service.yml",
+ "name": "tests/integration/targets/inventory-v3.5/runme_config.template",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1e3384a81b3bc49bcaf3f7d82268cc03a9dd609e2a88e18eeac2677bcf604154",
+ "chksum_sha256": "de40fd34a465f7da8925f1e9ba52359e10ac740e08f2dfa398691810fcc03bd7",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_cluster_group.yml",
+ "name": "tests/integration/targets/inventory-v3.5/.gitignore",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "beb8453c7e490b5b8b9412c0d8bc4cd6c234e24368aa1f7c6a3c2a7e651b61c6",
+ "chksum_sha256": "deacc9eea815485333d506e5bd64fb0c4a4a9980a33ff1b443a2deb0ca488209",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_circuit_type.yml",
+ "name": "tests/integration/targets/inventory-v3.5/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0b1e4ff5a8a0341bf0e4e123a523abfb9d194d420b83563536ea837750aa5ec1",
+ "chksum_sha256": "3efbf182d151ffe527a8a250a044a83997eec84d250c8651dcdfe6f62c60a97d",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_journal_entry.yml",
+ "name": "tests/integration/targets/regression-v3.7",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/regression-v3.7/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/regression-v3.7/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0526255ed056eea4324dc0615f4f1b18be2c3ce66951850736b9d6533ae2660a",
+ "chksum_sha256": "41cdf99d833f0b3525d59fee564411727dc3f89e908eaf1240f064ec051291be",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_aggregate.yml",
+ "name": "tests/integration/targets/inventory-v3.6",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/inventory-v3.6/files",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-plurals-flatten.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1ea02627b92f257b58e16c77e038930542b949e6cfc7acb38beac52330318d8c",
+ "chksum_sha256": "b10179aa589cbcd92340b4dbfd4c816af473e22c2ca6b2edcd60ee9ade7c3b7a",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_virtual_machine.yml",
+ "name": "tests/integration/targets/inventory-v3.6/files/test-inventory.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a804425ab778b2dc44ba33cb1637ee3a336b20f543e6ac9160d0c81d57de0099",
+ "chksum_sha256": "d1009b6685415e91a9a11dfaa939cacb03fd5f3efd6adff0eb7fa2958ddbdbee",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_prefix.yml",
+ "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-options.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f55ed9fcbda0d371e51828c3ecee2e103ac45f60ce5e5d6c28a04bb16ba64d76",
+ "chksum_sha256": "c17f5eef88e43f08288f480719439acd00330c5196d1c14134fa6194103c1519",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_front_port.yml",
+ "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-plurals-flatten.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3b56521d53c9a818916cb718e018214e7123db6b3feb0456532d476955d0aa28",
+ "chksum_sha256": "5e9c03704abbec6258adf89461e897f3ea277970a5f172f651d879fb1da921ed",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_contact.yml",
+ "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-legacy.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "10800b08efc61984903e8d350ce3ade71ef7888bd67b75875f04ab463545704e",
+ "chksum_sha256": "83e2fb444512331c6bc9e0677cd7d71450dffcb2625dfa7c759612c254af5c81",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_ip_address.yml",
+ "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-plurals.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2608d42fc6e56d8ab7d52c28d33658dcca6d8fb350fe2a92ede8d3e852c13ea7",
+ "chksum_sha256": "4ba0e5ede35b7822fd1658b50fd9bc80fa259bee9989b0818c8af95b53577999",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_custom_field.yml",
+ "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-options.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "46cecc1067a4995a8820e51f451e9d5291864b79876cc8551b60d81baed55b53",
+ "chksum_sha256": "3f3f9031d9c1d74774e7580fe9676c7f218de99fb8a1fe5e917db51f3bf3f4af",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_console_server_port_template.yml",
+ "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-bearer-token.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "31efff083088eb516aa5e7769b52024bee646ab8f996a708fc09d2445c16ce7d",
+ "chksum_sha256": "d1009b6685415e91a9a11dfaa939cacb03fd5f3efd6adff0eb7fa2958ddbdbee",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_device_bay.yml",
+ "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-jinja2-filter.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "482fe4849d9caff69a8604ab3e8324b0beaceb49e66360d0c3eb7c79d7ac8c34",
+ "chksum_sha256": "65f7c6327d4cbfd7c59d903100681fd668b50e441fb280d3ad38c26d0d03d915",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_vrf.yml",
+ "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-legacy.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0a17e30d5154ca2aa90285ab251f52d457e89ced6509d83366101ad36e0da",
+ "chksum_sha256": "46884cd5540b0fef87c808434d64cf34d11b4cb2a837083c024a4280a444e457",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_tag.yml",
+ "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-options-flatten.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "32e11eea93510a83b15b736bdf46995492dd0dcbdb025993f16532aad6de2b22",
+ "chksum_sha256": "cd27110ff787e21cddc8beaa564db9b7e29a8ac77ce10c99ed1c166006708802",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_inventory_item_role.yml",
+ "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-jinja2-filter.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b1bbf7b2aabc7b200fb8a612ee092629492c4a0a8cfd5e859c6cd9aadfa09d40",
+ "chksum_sha256": "d3b673c5a5b01a862fef9114d9a4ba7dcbebcb135efb86f33072ff49f144ddb9",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_vlan.yml",
+ "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-noracks.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f3de3e0d80daef5d6def7c55b974a6c88d4322ac35cb397ca1cbbfe90ef2fd8e",
+ "chksum_sha256": "6d0971c39294eb2c759bfaed12e5c266b1606216d6c384b3ed322240e644d3e2",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_location.yml",
+ "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-bearer-token.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4fde47ce5a7ad1ad91120d23a53db43cf885d640fab3013fcdc4201faf0fccdc",
+ "chksum_sha256": "06c2028c7743ed3ac39e2ff50f7db2cdf81096bf8412cc67af25f0041c9aae1b",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_vm_interface.yml",
+ "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-options-flatten.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0de602de86254d9c7f4c09f7b9d87da55dd0ddba4c7dbef6bc68bd041669151d",
+ "chksum_sha256": "e74d737990bde83f01d36ba03891d575d347b9d522c8bed244851ec6001338c0",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_config_template.yml",
+ "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-jinja2.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "632cc2291e1afc3307a450b9ec6b5e75b321facf5c0a3881230edd834cb72d43",
+ "chksum_sha256": "c17f5eef88e43f08288f480719439acd00330c5196d1c14134fa6194103c1519",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_lookup.yml",
+ "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-noracks.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "12bc28911f599b5e292425de7d0d6f5f596fee407befbabbc0e7de33f9a1d9e0",
+ "chksum_sha256": "7c504c26d63da38458f77027c0e542aa2bb34eef183829623de02086e79c031c",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_console_port.yml",
+ "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-plurals.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f22bf91272f6001c1a9d8819ca38a0524c8a442640e5ba2eef2d1d53f4f4340e",
+ "chksum_sha256": "08ff16818cf6b69f12219eec23a73b8dd4ed7c10b59869628df74daa8d3c414f",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_provider_network.yml",
+ "name": "tests/integration/targets/inventory-v3.6/files/test-inventory.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d85ad4ca9dd85d75489fbdb13ef60bc0cead57e5b0161308dcb5625e75c919b4",
+ "chksum_sha256": "f8315a7e1f2c4aaade12b7eab7f2eba9e9763e45fb846730775107aea87b2d86",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_device_interface.yml",
+ "name": "tests/integration/targets/inventory-v3.6/files/test-inventory-jinja2.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b97b575dba1385ba7361f881a9b4b553982f470eac4183e880c2cf71927e572b",
+ "chksum_sha256": "1b9009a12cfbed3386c6a7d857edc56c8fa88b1917fb6fee6334eb4209f7e349",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_contact_role.yml",
+ "name": "tests/integration/targets/inventory-v3.6/compare_inventory_json.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "52d72f63e31c7de7bc1dc2276112f491466ddbad59628833213f0ce78fb59cb3",
+ "chksum_sha256": "30c33ec36a02ba2483003189f86f977cc29e460ab660e040f70ec4136770fec1",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_webhook.yml",
+ "name": "tests/integration/targets/inventory-v3.6/runme.sh",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "094744978836b9c9e5859b0a927c6d6088c2c1fa2c69366158a3c53cb44db5b0",
+ "chksum_sha256": "f2d26a7388590de5e1126420c402289975eded15a914293329f046406a82ed1d",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_inventory_item.yml",
+ "name": "tests/integration/targets/inventory-v3.6/runme_config.template",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "94a9328d196fd3e810b0827ea67aac0093b0b1414bf94b865d45181892b42dd6",
+ "chksum_sha256": "de40fd34a465f7da8925f1e9ba52359e10ac740e08f2dfa398691810fcc03bd7",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/main.yml",
+ "name": "tests/integration/targets/inventory-v3.6/.gitignore",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9a6ca9723a368c3f640063245342cbfb698ec92d4d6855180be5f45be0406a4a",
+ "chksum_sha256": "deacc9eea815485333d506e5bd64fb0c4a4a9980a33ff1b443a2deb0ca488209",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_device_type.yml",
+ "name": "tests/integration/targets/inventory-v3.6/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "02f5b6658413511f1be6f109ba933c4859131c4985988f0a507b5b288e0684cb",
+ "chksum_sha256": "3efbf182d151ffe527a8a250a044a83997eec84d250c8651dcdfe6f62c60a97d",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_config_context.yml",
+ "name": "tests/integration/targets/v3.7",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/v3.7/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/v3.7/tasks/netbox_site.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e1dbc4f90c9607e997c2b11c1cd58b37be0363a75d2e791034aaeb6302e1e263",
+ "chksum_sha256": "58ff74a2f2ec0eb44cccf7e545d11d5a1cdeded86afeee1061757117594b38b2",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_rear_port.yml",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_console_port.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a14bdfe2e9b2c5dc723a6da6b812da1163057f03cf19fe2e5aec663ee6f1452e",
+ "chksum_sha256": "f22bf91272f6001c1a9d8819ca38a0524c8a442640e5ba2eef2d1d53f4f4340e",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_l2vpn_termination.yml",
+ "name": "tests/integration/targets/v3.7/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b630f638bb826104bdc423470761fbf67d8495f64f4907deec67d37d7e02a743",
+ "chksum_sha256": "50df8b90eb941e06a9a1c738966928ce2efbde1bc418228ed735f1c9024a6759",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_fhrp_group.yml",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_vm_interface.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c7385675cfb10a26888c09d7822315d06d9aaf3daa73a9ba5b1745190affa1ae",
+ "chksum_sha256": "0de602de86254d9c7f4c09f7b9d87da55dd0ddba4c7dbef6bc68bd041669151d",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_cable.yml",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_aggregate.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "480243fd666d163294704b2c74b9034115284efdeb6e0b73b308425b454bfa7f",
+ "chksum_sha256": "1ea02627b92f257b58e16c77e038930542b949e6cfc7acb38beac52330318d8c",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_site.yml",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_platform.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "58ff74a2f2ec0eb44cccf7e545d11d5a1cdeded86afeee1061757117594b38b2",
+ "chksum_sha256": "2bdd6dd59eb4dcbfb1e285aef3bfbfe944552c3dd2bd20e17b58b5798926221e",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_console_port_template.yml",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_wireless_link.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a0f5b420ba0e259d28ed11d0f9a81f3e6e67744ae3bfdaaf5beb737343a44cef",
+ "chksum_sha256": "807da638ea8dc21080bc21a3033dd065570ff93e3dfe9edc4963922505a3613a",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_wireless_lan.yml",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_vlan.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d86fdee3d125962731b3d98a027a30f4d7ba445b0fdc74cd0b0fc3cda5a1d23c",
+ "chksum_sha256": "f3de3e0d80daef5d6def7c55b974a6c88d4322ac35cb397ca1cbbfe90ef2fd8e",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_rack_role.yml",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_power_outlet.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e18dfdc340ea38186fe5fa2e420ee9982f6bbec423964490865ec6683f304cba",
+ "chksum_sha256": "4f94df7d99ba01a989c829231e3a2eab8ff955cb31e8bd1a19afa1b89c266f5f",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_rack.yml",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_tag.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "acd85ca6fd6944c33a6a58f14c96fa598e6ec6d19cc38e0ef36cacb1ef973660",
+ "chksum_sha256": "32e11eea93510a83b15b736bdf46995492dd0dcbdb025993f16532aad6de2b22",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_provider.yml",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_rack_role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4deb86969d18e570533d5a2738afddf66725d6d4f4abc3576384aaf226c82ba2",
+ "chksum_sha256": "61501632bf0456ba39fbcebc22660f51d3e3000c6bf497c05e207851456537b6",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_l2vpn.yml",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_rear_port.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "80bf09f6c370f9575209a81f28e5ed2717c05dd14345e395efc615e4884b1979",
+ "chksum_sha256": "a14bdfe2e9b2c5dc723a6da6b812da1163057f03cf19fe2e5aec663ee6f1452e",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_rear_port_template.yml",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_module_type.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3d62cd318b253c9f41f11d93ce4ccfa348c61bd0c5f281e7b33110ff9ca1d0f",
+ "chksum_sha256": "b78dc0f37cb445ca99d589c3f296ec1bb6b999dddbcbc2fe8ba64c78e700c53f",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_ipam_role.yml",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_provider.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "87927259bdf063bc202fa76992dc4ea7fdf3953cb181261271af32c0464fef6b",
+ "chksum_sha256": "4deb86969d18e570533d5a2738afddf66725d6d4f4abc3576384aaf226c82ba2",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_vlan_group.yml",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_circuit_termination.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9137743d782b3f5a7c93da6008c5c1251ef3d48f18926d4a6d1e2888fd3ea383",
+ "chksum_sha256": "318daab4470ec628ff83d4dfb2a4b7270a42863eb3a80ca142ef9094fa9cb898",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_power_port.yml",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_lookup.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d51e0c69d26bf3bb64ae02399ceb1a59f05105e73d17c9c1b0144b85657f5bac",
+ "chksum_sha256": "12bc28911f599b5e292425de7d0d6f5f596fee407befbabbc0e7de33f9a1d9e0",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_circuit.yml",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_vrf.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "afb572e4f30a6abcbb2cc5a4441643bc8da05919f825de0681c5e886d6100f30",
+ "chksum_sha256": "e3b0a17e30d5154ca2aa90285ab251f52d457e89ced6509d83366101ad36e0da",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_export_template.yml",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_fhrp_group_assignment.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3e3cdf0b433461d0bc0db2cc67e0fd22150ff9922732ac023fb7afc5203216fc",
+ "chksum_sha256": "6315cc64905295c66bc9143b67b6ce4e52e089c85953c0e8729d8ffbd435f0d2",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_front_port_template.yml",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_power_panel.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "961155a3a4abfda44ec2fef8512e7bf78304aa0c7aa366ce6756a054fe55a668",
+ "chksum_sha256": "eac755f52d8df88bb2100cf44cd7557739922838f04ded5da4aff356c75e172b",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_device.yml",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_manufacturer.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3e74537f88cec7810735c35c53132ec899156fd02732cf10e0fb4ff7e1e5a14d",
+ "chksum_sha256": "6f45b1dfe652beff573994e37d534d6c421f428d984f43d1bab497618009fef8",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_power_panel.yml",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_custom_link.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eac755f52d8df88bb2100cf44cd7557739922838f04ded5da4aff356c75e172b",
+ "chksum_sha256": "2e9c75e22e6e2540065ed53d26657677c927af1bf3a73c29064c0e3361382e3f",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_power_feed.yml",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_service.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2a784756ec7c4cf50c065187f7c92e6f14117e59f86f32d148304f8ebb4deb46",
+ "chksum_sha256": "1e3384a81b3bc49bcaf3f7d82268cc03a9dd609e2a88e18eeac2677bcf604154",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_power_outlet.yml",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_device_bay.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4f94df7d99ba01a989c829231e3a2eab8ff955cb31e8bd1a19afa1b89c266f5f",
+ "chksum_sha256": "482fe4849d9caff69a8604ab3e8324b0beaceb49e66360d0c3eb7c79d7ac8c34",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_circuit_termination.yml",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_front_port.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "318daab4470ec628ff83d4dfb2a4b7270a42863eb3a80ca142ef9094fa9cb898",
+ "chksum_sha256": "3b56521d53c9a818916cb718e018214e7123db6b3feb0456532d476955d0aa28",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_tenant_group.yml",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_prefix.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1ae1dc4a42a5fb65dcc1272f424a87cbdb6984dfe1787b310583059567fd181d",
+ "chksum_sha256": "f55ed9fcbda0d371e51828c3ecee2e103ac45f60ce5e5d6c28a04bb16ba64d76",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_manufacturer.yml",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_site_group.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6f45b1dfe652beff573994e37d534d6c421f428d984f43d1bab497618009fef8",
+ "chksum_sha256": "c5770e6c7f178cfed77e7cc9b4b7c7f7d8ed7557420c8e1ee3a221f54e2cbaaf",
"format": 1
},
{
- "name": "tests/integration/targets/v3.6/tasks/netbox_device_interface_template.yml",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_journal_entry.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e5e071bccd038ddbae0dc33ed5b2ea7b9cce00cd28f29d8160f0d308784d30dc",
+ "chksum_sha256": "0526255ed056eea4324dc0615f4f1b18be2c3ce66951850736b9d6533ae2660a",
"format": 1
},
{
- "name": "tests/integration/targets/regression-v3.7",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/v3.7/tasks/netbox_rir.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "280fb5eb850e14e7874ada263f1c03f15da3ed24f4730f960967cf8993eb81e3",
"format": 1
},
{
- "name": "tests/integration/targets/regression-v3.7/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/v3.7/tasks/netbox_power_feed.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2a784756ec7c4cf50c065187f7c92e6f14117e59f86f32d148304f8ebb4deb46",
"format": 1
},
{
- "name": "tests/integration/targets/regression-v3.7/tasks/main.yml",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_console_server_port_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "41cdf99d833f0b3525d59fee564411727dc3f89e908eaf1240f064ec051291be",
+ "chksum_sha256": "31efff083088eb516aa5e7769b52024bee646ab8f996a708fc09d2445c16ce7d",
"format": 1
},
{
- "name": "tests/integration/inventory",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_console_server_port.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ba4658da440ac3efc0a81e148618c1c38eff956943329403bc863b8c26ab79fb",
+ "chksum_sha256": "d1c5d0d6e586d445667dd44b70a72e7d50564ba7e95cd2321289859eee3e3f6a",
"format": 1
},
{
- "name": "tests/integration/netbox-deploy.py",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_power_port.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b923f66dc11a260245ea8581eb20e2d354f426992e3cf4b11d62dc33600f1590",
+ "chksum_sha256": "d51e0c69d26bf3bb64ae02399ceb1a59f05105e73d17c9c1b0144b85657f5bac",
"format": 1
},
{
- "name": "tests/integration/render_config.sh",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_contact_role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "76c5a19289c4ca86c9124b748e1a7d7d338ba92a46a451dfede864a91c96075c",
+ "chksum_sha256": "52d72f63e31c7de7bc1dc2276112f491466ddbad59628833213f0ce78fb59cb3",
"format": 1
},
{
- "name": "tests/integration/integration.cfg",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_custom_field.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b5e219ab076b1e90de2c650d480fe0a4b8724f839ac95f5240ed64a80202dfbf",
+ "chksum_sha256": "6e072cc7a5577ea307dfdb9458bc68ffc98d848afb42afb4824765133804cbb3",
"format": 1
},
{
- "name": "tests/netbox-docker",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/v3.7/tasks/netbox_export_template.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3e3cdf0b433461d0bc0db2cc67e0fd22150ff9922732ac023fb7afc5203216fc",
"format": 1
},
{
- "name": "tests/netbox-docker/v3.7",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/v3.7/tasks/netbox_ip_address.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "52a3c82dcf21c3421932677215737f10a3abe07f2a6cb3357b5574695ecc0902",
"format": 1
},
{
- "name": "tests/netbox-docker/v3.7/docker-compose.override.yml",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_cluster_type.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a86ebe548262e0150fe37695b70a346e562c1fdcc3e03324d7ed78ccb7e714f5",
+ "chksum_sha256": "c88469e151627ba4f18c90ec7dc96449ebc38e0b10c3715b2527e8ed2317ff87",
"format": 1
},
{
- "name": "tests/netbox-docker/v3.5",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/v3.7/tasks/netbox_route_target.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a1265c144e813a4fe745934790f9283d30558187bef8d58f705754719ec480dc",
"format": 1
},
{
- "name": "tests/netbox-docker/v3.5/docker-compose.override.yml",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_config_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "434cca0751c8c9b5cbceb4cdbf07402aad4037fea150fa6e79e5d4b420272d1a",
+ "chksum_sha256": "632cc2291e1afc3307a450b9ec6b5e75b321facf5c0a3881230edd834cb72d43",
"format": 1
},
{
- "name": "tests/netbox-docker/v3.6",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/v3.7/tasks/netbox_device.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "572c930adbd6f88811ac62e0616ef5228216368b450a9401445bcc18df53bf11",
"format": 1
},
{
- "name": "tests/netbox-docker/v3.6/docker-compose.override.yml",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_l2vpn_termination.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "20ca1270c545e81ecf0419e124f8980ce137ac880fbc42e1e4b033107e4d7e97",
+ "chksum_sha256": "b630f638bb826104bdc423470761fbf67d8495f64f4907deec67d37d7e02a743",
"format": 1
},
{
- "name": "tests/unit",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/v3.7/tasks/netbox_tenant_group.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1ae1dc4a42a5fb65dcc1272f424a87cbdb6984dfe1787b310583059567fd181d",
"format": 1
},
{
- "name": "tests/unit/inventory",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/v3.7/tasks/netbox_ipam_role.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "87927259bdf063bc202fa76992dc4ea7fdf3953cb181261271af32c0464fef6b",
"format": 1
},
{
- "name": "tests/unit/inventory/test_nb_inventory.py",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_console_port_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dd54840ed281c9ccb4b3b8d38316e0e3eaad208cdba3b8da6db5962e9e638002",
+ "chksum_sha256": "a0f5b420ba0e259d28ed11d0f9a81f3e6e67744ae3bfdaaf5beb737343a44cef",
"format": 1
},
{
- "name": "tests/unit/inventory/test_data",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/v3.7/tasks/netbox_wireless_lan.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d86fdee3d125962731b3d98a027a30f4d7ba445b0fdc74cd0b0fc3cda5a1d23c",
"format": 1
},
{
- "name": "tests/unit/inventory/test_data/validate_query_parameter",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/v3.7/tasks/netbox_power_outlet_template.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7076e4492f1e5a9320edee905c9d9b29c0ca0a9222adac0903cd31e424a97edb",
"format": 1
},
{
- "name": "tests/unit/inventory/test_data/validate_query_parameter/data.json",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_location.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c38afa75bd45672caa3cae3eef0306f045828f98f47f3ee8f41e2a51296e4f79",
+ "chksum_sha256": "4fde47ce5a7ad1ad91120d23a53db43cf885d640fab3013fcdc4201faf0fccdc",
"format": 1
},
{
- "name": "tests/unit/inventory/test_data/group_extractors",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/v3.7/tasks/netbox_contact.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "10800b08efc61984903e8d350ce3ade71ef7888bd67b75875f04ab463545704e",
"format": 1
},
{
- "name": "tests/unit/inventory/test_data/group_extractors/data.json",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_region.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "57236961c19e1196324e8150a4448a4f78d8ab75f01181b78c1c884cbee88b3f",
+ "chksum_sha256": "64c202f343c3b22244058176bdbe027d1cbc629d189d8dca03f8e2797758d93c",
"format": 1
},
{
- "name": "tests/unit/inventory/test_data/get_resource_list_chunked",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/v3.7/tasks/netbox_tenant.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "12293e5057c80b6b491b0c99ec05d3556d2642f5fcb981fa0f215857b5855b3a",
"format": 1
},
{
- "name": "tests/unit/inventory/test_data/get_resource_list_chunked/data.json",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_config_context.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "09bee34133057a8261ff63b1392f689076a161cefca45e489fe9ed0b9846dee4",
+ "chksum_sha256": "e1dbc4f90c9607e997c2b11c1cd58b37be0363a75d2e791034aaeb6302e1e263",
"format": 1
},
{
- "name": "tests/unit/inventory/test_data/filter_query_parameters",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/v3.7/tasks/netbox_virtual_machine.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a804425ab778b2dc44ba33cb1637ee3a336b20f543e6ac9160d0c81d57de0099",
"format": 1
},
{
- "name": "tests/unit/inventory/test_data/filter_query_parameters/data.json",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_module.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3ecebe7994f1acfae3e196b3f8bce30dab18114fa92f662a4e06a57f338870be",
+ "chksum_sha256": "884e2cd1c2a1912fa485b7362c2d50a6ba36035d43c020f644ef0323631aa5ef",
"format": 1
},
{
- "name": "tests/unit/inventory/test_data/refresh_url",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/v3.7/tasks/netbox_asn.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8ebdd0a1b9d7008523121a7c14be66d1400a9338828c231272c7f74d5726edce",
"format": 1
},
{
- "name": "tests/unit/inventory/test_data/refresh_url/data.json",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_virtual_chassis.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "26ce71fb70dc9b712c6c61495f8e03308f03a1d38efce476737100cde2664d93",
+ "chksum_sha256": "952d715fc4c1dbca7f8d83128b67a0234a37666b9f553506ac749684dd80ebfb",
"format": 1
},
{
- "name": "tests/unit/inventory/__init__.py",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_inventory_item_role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "b1bbf7b2aabc7b200fb8a612ee092629492c4a0a8cfd5e859c6cd9aadfa09d40",
"format": 1
},
{
- "name": "tests/unit/module_utils",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/v3.7/tasks/netbox_front_port_template.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "961155a3a4abfda44ec2fef8512e7bf78304aa0c7aa366ce6756a054fe55a668",
"format": 1
},
{
- "name": "tests/unit/module_utils/fixtures",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/v3.7/tasks/netbox_device_role.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fa2e8d09e82a3f099913dc9cf23356a22626895123e59ef9528a183fa5d18dec",
"format": 1
},
{
- "name": "tests/unit/module_utils/fixtures/choices",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/v3.7/tasks/netbox_cable.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "480243fd666d163294704b2c74b9034115284efdeb6e0b73b308425b454bfa7f",
"format": 1
},
{
- "name": "tests/unit/module_utils/fixtures/choices/sites.json",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_webhook.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "31d58287f5b07e8aa0c0e1c1ca12b907f88d8ab987b98b5ef09beef01a49a090",
+ "chksum_sha256": "094744978836b9c9e5859b0a927c6d6088c2c1fa2c69366158a3c53cb44db5b0",
"format": 1
},
{
- "name": "tests/unit/module_utils/fixtures/choices/device_types.json",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_l2vpn.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "065d95e75aa2b700f265e33133b94b5c9f93bd30d9be9a0fdcfe4a17671421ee",
+ "chksum_sha256": "80bf09f6c370f9575209a81f28e5ed2717c05dd14345e395efc615e4884b1979",
"format": 1
},
{
- "name": "tests/unit/module_utils/fixtures/choices/circuits.json",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_provider_network.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eef93b5c65458cac7b33b1e1365518d381d3e12bcc73b7afbdd163a42350a521",
+ "chksum_sha256": "d85ad4ca9dd85d75489fbdb13ef60bc0cead57e5b0161308dcb5625e75c919b4",
"format": 1
},
{
- "name": "tests/unit/module_utils/fixtures/choices/racks.json",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_device_bay_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "710913087d5fe7c6250ac7a6bbdb378fd2a98f5425595ed92a452e6789ea62e1",
+ "chksum_sha256": "b013bde7259d29fb3bc35de81fec4f2a0c24c09d54ada22355a39e406d0a9554",
"format": 1
},
{
- "name": "tests/unit/module_utils/fixtures/choices/devices.json",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_fhrp_group.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d28c8ab2e5a53cf617e96c37caa10d4881e19f2756e59ce036610d3ac13935af",
+ "chksum_sha256": "c7385675cfb10a26888c09d7822315d06d9aaf3daa73a9ba5b1745190affa1ae",
"format": 1
},
{
- "name": "tests/unit/module_utils/fixtures/choices/vlans.json",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_cluster.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c4b951095ee4c7443616cda2f26ed9e778226bf4b8e193e0f67cc5b0b96a6636",
+ "chksum_sha256": "2967ce7f5f94401bfba564fa22901be8a7c81ba4eb848eb018c317538a5cc22e",
"format": 1
},
{
- "name": "tests/unit/module_utils/fixtures/choices/services.json",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_rack_group.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1eee733c9069414f6294f64ecf0bd65c0afb42053c0ee8e1d9bf0ac48ca9e59c",
+ "chksum_sha256": "b8e3c495f289093c94d3612213c45a6f89624e4d762fd04e74d3062dab34cf1a",
"format": 1
},
{
- "name": "tests/unit/module_utils/fixtures/choices/prefixes.json",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_device_interface.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3a7f82c633273e126c2455161a1c832460b368d8e40677a0cb290ec9910e2bcf",
+ "chksum_sha256": "b97b575dba1385ba7361f881a9b4b553982f470eac4183e880c2cf71927e572b",
"format": 1
},
{
- "name": "tests/unit/module_utils/fixtures/choices/virtual_machines.json",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_wireless_lan_group.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8a019714226dd0208003a775d05c48aed8195b0f09a23ad4c5e976a31f2f4b91",
+ "chksum_sha256": "94a103ba1cd08739e44dd0be15e9ce1d88ba143b0efd88d47e78155409dfae3e",
"format": 1
},
{
- "name": "tests/unit/module_utils/fixtures/choices/interfaces.json",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_device_interface_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "69edd276a4d6ff23a24aa290de80ed861b94cba637207a9edb481d7b4dfa9a59",
+ "chksum_sha256": "e5e071bccd038ddbae0dc33ed5b2ea7b9cce00cd28f29d8160f0d308784d30dc",
"format": 1
},
{
- "name": "tests/unit/module_utils/test_data",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/v3.7/tasks/netbox_service_template.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2dd7572f2ea6c0a92edce50caa99145ea1065fa4800e71afe9c7bfa5fb16f021",
"format": 1
},
{
- "name": "tests/unit/module_utils/test_data/find_app",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/v3.7/tasks/netbox_circuit_type.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0b1e4ff5a8a0341bf0e4e123a523abfb9d194d420b83563536ea837750aa5ec1",
"format": 1
},
{
- "name": "tests/unit/module_utils/test_data/find_app/data.json",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_rack.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f57619e431da1db5f3459f0d390e0f98ed8422dd1dfaea0a322faa6689762e2f",
+ "chksum_sha256": "acd85ca6fd6944c33a6a58f14c96fa598e6ec6d19cc38e0ef36cacb1ef973660",
"format": 1
},
{
- "name": "tests/unit/module_utils/test_data/build_query_params_child",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/v3.7/tasks/netbox_cluster_group.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "beb8453c7e490b5b8b9412c0d8bc4cd6c234e24368aa1f7c6a3c2a7e651b61c6",
"format": 1
},
{
- "name": "tests/unit/module_utils/test_data/build_query_params_child/data.json",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_inventory_item.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bb4a47f18fb6fcab7557a036a71612f65e75d22972139f8916012ebcbb8dcce0",
+ "chksum_sha256": "94a9328d196fd3e810b0827ea67aac0093b0b1414bf94b865d45181892b42dd6",
"format": 1
},
{
- "name": "tests/unit/module_utils/test_data/arg_spec_default",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/v3.7/tasks/netbox_module_bay.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5b8ad8989f26551b4d5f7015dd202aed037bcc247bc5f04b1c8aa5d713019831",
"format": 1
},
{
- "name": "tests/unit/module_utils/test_data/arg_spec_default/data.json",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_vlan_group.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f48dd7aea115db209d32d4ce0fc6b9836c877a08bf035ee588bbc3f436b4a076",
+ "chksum_sha256": "9137743d782b3f5a7c93da6008c5c1251ef3d48f18926d4a6d1e2888fd3ea383",
"format": 1
},
{
- "name": "tests/unit/module_utils/test_data/build_query_params_no_child",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/v3.7/tasks/netbox_circuit.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "afb572e4f30a6abcbb2cc5a4441643bc8da05919f825de0681c5e886d6100f30",
"format": 1
},
{
- "name": "tests/unit/module_utils/test_data/build_query_params_no_child/data.json",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_rear_port_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a2808a6706a4ba94c964b0bd5ccb27036fb6f4ae58402fc388c4a8a56229f758",
+ "chksum_sha256": "d3d62cd318b253c9f41f11d93ce4ccfa348c61bd0c5f281e7b33110ff9ca1d0f",
"format": 1
},
{
- "name": "tests/unit/module_utils/test_data/choices_id",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/v3.7/tasks/netbox_power_port_template.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b3e31a81a5f25b51c1df6cc5d3f9376be8c93b54888bbcf9b957661792b9e526",
"format": 1
},
{
- "name": "tests/unit/module_utils/test_data/choices_id/data.json",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_virtual_disk.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0ef637ce49cb7fbf3fb67f39641b2db2ddddae41a4a5c772e65cb401fc21d595",
+ "chksum_sha256": "1d9a63d51a8c013d78872361871d75dafc46f01305a08c0c9cff37cf3d271729",
"format": 1
},
{
- "name": "tests/unit/module_utils/test_data/normalize_data",
+ "name": "tests/integration/targets/v3.7/tasks/netbox_device_type.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6d6794c8ed22e4f2b14d881a98724c3152a4f03484307254b831cbf416e594ec",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/inventory-v3.7",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/unit/module_utils/test_data/normalize_data/data.json",
+ "name": "tests/integration/targets/inventory-v3.7/files",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-plurals-flatten.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fb8e60b069fb6b847cc286cf83c8df8ea5c8b19078f614be83983e85616036aa",
+ "chksum_sha256": "628f7f5d1979ac14d573921f294a16f2e806435c0531b3c4812a4d451245c811",
"format": 1
},
{
- "name": "tests/unit/module_utils/test_data/slug",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/inventory-v3.7/files/test-inventory.json",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "4fa1b3d0e6aae52974d9c5595bced609448e3c71d4183332fca6f9eaa5541162",
"format": 1
},
{
- "name": "tests/unit/module_utils/test_data/slug/data.json",
+ "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-options.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d38464486cef0b272cd7879626d2fbccaba6359c5166c2aed483fcd0c108645c",
+ "chksum_sha256": "abe32d82135b4cb211e594c2a789bea69427808de1a261f016bd68d82e31f6ad",
"format": 1
},
{
- "name": "tests/unit/module_utils/test_data/build_query_params_user_query_params",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-plurals-flatten.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5e9c03704abbec6258adf89461e897f3ea277970a5f172f651d879fb1da921ed",
"format": 1
},
{
- "name": "tests/unit/module_utils/test_data/build_query_params_user_query_params/data.json",
+ "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-legacy.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "362739ebc62d83999764392653b6347662f5fadf3f88b5b38a9ce0924db2acea",
+ "chksum_sha256": "e60953c71b6fd825dc552ee6306a82a395f653677b94d6b75a22610003cd33e6",
"format": 1
},
{
- "name": "tests/unit/module_utils/__init__.py",
+ "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-plurals.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "af1bb368a12123645f179057976ab6ad11049c655c4f96f18185f1c2d4c53705",
"format": 1
},
{
- "name": "tests/unit/module_utils/test_netbox_base_class.py",
+ "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-options.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f63cc503a89556f050f69b40fbbdccceaf734e81e3646b914ecef71d0ee0958b",
+ "chksum_sha256": "3f3f9031d9c1d74774e7580fe9676c7f218de99fb8a1fe5e917db51f3bf3f4af",
"format": 1
},
{
- "name": "requirements.txt",
+ "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-bearer-token.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d003b5dde4117b9ef860b6d4fd67096a2909ea206f63116d5d46d1955fcc94f1",
+ "chksum_sha256": "8c0f26aca1c87eafa7524f177a6ab8dd1c3616a5bc1889e8de0a2ed036521d74",
"format": 1
},
{
- "name": ".gitignore",
+ "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-jinja2-filter.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c0ac384e24827235e0b17021954d2b803c3da263038dfaa24967d3d40a86ea15",
+ "chksum_sha256": "13df164774b2a43a0b6cca377c3e17869a0b1c5394dcc18a3c67cf271fc3c618",
"format": 1
},
{
- "name": "CHANGELOG.rst",
+ "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-legacy.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1fb9faa36881fc0f991244c049b18dea93601a479e2dd0a782fec1c6386b9eec",
+ "chksum_sha256": "46884cd5540b0fef87c808434d64cf34d11b4cb2a837083c024a4280a444e457",
"format": 1
},
{
- "name": "ansible.cfg",
+ "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-options-flatten.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b5e219ab076b1e90de2c650d480fe0a4b8724f839ac95f5240ed64a80202dfbf",
+ "chksum_sha256": "66fef6cc9a2d8d69a7d2eea0b52cfef5d6d0bb7681f11580065bab398f7ee441",
"format": 1
},
{
- "name": ".github",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-jinja2-filter.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d3b673c5a5b01a862fef9114d9a4ba7dcbebcb135efb86f33072ff49f144ddb9",
"format": 1
},
{
- "name": ".github/ISSUE_TEMPLATE",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-noracks.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6d0971c39294eb2c759bfaed12e5c266b1606216d6c384b3ed322240e644d3e2",
"format": 1
},
{
- "name": ".github/ISSUE_TEMPLATE/config.yml",
+ "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-bearer-token.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "417cfe754f2372185d81c8ef435d8ade002ab0f5db9f7f917a9ac26ec7479851",
+ "chksum_sha256": "06c2028c7743ed3ac39e2ff50f7db2cdf81096bf8412cc67af25f0041c9aae1b",
"format": 1
},
{
- "name": ".github/ISSUE_TEMPLATE/housekeeping.yaml",
+ "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-options-flatten.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6952213267de18d7a4656f4aa76a8fecd52fad264d38159074ce5fea2ebf3986",
+ "chksum_sha256": "e74d737990bde83f01d36ba03891d575d347b9d522c8bed244851ec6001338c0",
"format": 1
},
{
- "name": ".github/ISSUE_TEMPLATE/bug_report.yaml",
+ "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-jinja2.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c626f2997fc48e16250057238523be1a42788d29eb48755db176bd433c79e13a",
+ "chksum_sha256": "abe32d82135b4cb211e594c2a789bea69427808de1a261f016bd68d82e31f6ad",
"format": 1
},
{
- "name": ".github/ISSUE_TEMPLATE/documentation_change.yaml",
+ "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-noracks.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a1c372660a10ea2ce252341ddcf8f52b5faf3923b4d3ca2f864609450cfe3534",
+ "chksum_sha256": "108e879a651ae65ef30040c4ab7910160f9ca5e47ef6d5c3d7ce8b48a5dc2d6d",
"format": 1
},
{
- "name": ".github/ISSUE_TEMPLATE/feature_request.yaml",
+ "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-plurals.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4c042a9f4b7a1e6a8a3c7962b44e364f5b2cfe5242f17415bb9e7af94103561b",
+ "chksum_sha256": "08ff16818cf6b69f12219eec23a73b8dd4ed7c10b59869628df74daa8d3c414f",
"format": 1
},
{
- "name": ".github/workflows",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/inventory-v3.7/files/test-inventory.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ed8145f07aad7f80e1d546e815b9bddca58d678466b7cee8f04cae6cf95a3c89",
"format": 1
},
{
- "name": ".github/workflows/release.yml",
+ "name": "tests/integration/targets/inventory-v3.7/files/test-inventory-jinja2.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f60625361566d151303c75db858e6bdeec0d40f1caaf67c1cc832659b29285e4",
+ "chksum_sha256": "1b9009a12cfbed3386c6a7d857edc56c8fa88b1917fb6fee6334eb4209f7e349",
"format": 1
},
{
- "name": ".github/workflows/main.yml",
+ "name": "tests/integration/targets/inventory-v3.7/compare_inventory_json.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "88328c699e965b13d17597a87ff4e41dfe2011913d3b0463b83996a2e3eb1fa4",
+ "chksum_sha256": "30c33ec36a02ba2483003189f86f977cc29e460ab660e040f70ec4136770fec1",
"format": 1
},
{
- "name": ".github/pull_request_template.md",
+ "name": "tests/integration/targets/inventory-v3.7/runme.sh",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "63489727d4197ef434809dfd6310bcb819a32864f5586f1b7f604338c3b86808",
+ "chksum_sha256": "f2d26a7388590de5e1126420c402289975eded15a914293329f046406a82ed1d",
"format": 1
},
{
- "name": ".yamllint",
+ "name": "tests/integration/targets/inventory-v3.7/runme_config.template",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9ef09bf0cb4cee6f716aa4aab01a4acb6eeaa3245b9d938394b21afaa0fcbdbd",
+ "chksum_sha256": "de40fd34a465f7da8925f1e9ba52359e10ac740e08f2dfa398691810fcc03bd7",
"format": 1
},
{
- "name": ".readthedocs.yml",
+ "name": "tests/integration/targets/inventory-v3.7/.gitignore",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "41d982a373e0e4da1176899b9f0df905cb5a780c37555ddda1aa9f8f962a1985",
+ "chksum_sha256": "deacc9eea815485333d506e5bd64fb0c4a4a9980a33ff1b443a2deb0ca488209",
"format": 1
},
{
- "name": "CONTRIBUTING.md",
+ "name": "tests/integration/targets/inventory-v3.7/aliases",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "11337b573ba4ffe704e9a94e682e018f7a489b4bd9ed5b474643ec2ae136ddf4",
+ "chksum_sha256": "3efbf182d151ffe527a8a250a044a83997eec84d250c8651dcdfe6f62c60a97d",
"format": 1
},
{
- "name": "LICENSE",
+ "name": "tests/integration/targets/regression-v3.5",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/regression-v3.5/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/regression-v3.5/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "605e9047a563c5c8396ffb18232aa4304ec56586aee537c45064c6fb425e44ad",
+ "chksum_sha256": "41cdf99d833f0b3525d59fee564411727dc3f89e908eaf1240f064ec051291be",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/inventory",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ba4658da440ac3efc0a81e148618c1c38eff956943329403bc863b8c26ab79fb",
"format": 1
}
],
diff --git a/ansible_collections/netbox/netbox/MANIFEST.json b/ansible_collections/netbox/netbox/MANIFEST.json
index 53de9b307..6c3628492 100644
--- a/ansible_collections/netbox/netbox/MANIFEST.json
+++ b/ansible_collections/netbox/netbox/MANIFEST.json
@@ -2,7 +2,7 @@
"collection_info": {
"namespace": "netbox",
"name": "netbox",
- "version": "3.17.0",
+ "version": "3.18.0",
"authors": [
"Mikhail Yohman <mikhail.yohman@gmail.com>",
"Martin R\u00f8dvand <martin@rodvand.net>"
@@ -27,7 +27,7 @@
"name": "FILES.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "371300175f31c9e43c27bb912ef1bfd82d852976cf9a9ca58939810f6a0eb2d9",
+ "chksum_sha256": "80b7bfa1c27a0cf3fd04c12eb8d74317ed4fe2ac8b217a38ec5a83db94fb6f05",
"format": 1
},
"format": 1
diff --git a/ansible_collections/netbox/netbox/changelogs/changelog.yaml b/ansible_collections/netbox/netbox/changelogs/changelog.yaml
index f113070a6..1c1567a80 100644
--- a/ansible_collections/netbox/netbox/changelogs/changelog.yaml
+++ b/ansible_collections/netbox/netbox/changelogs/changelog.yaml
@@ -858,3 +858,25 @@ releases:
name: netbox_virtual_disk
namespace: ''
release_date: '2024-02-14'
+ 3.18.0:
+ changes:
+ minor_changes:
+ - nb_lookup - Add endpoint for Virtual Disks [#1177](https://github.com/netbox-community/ansible_modules/pull/1177)
+ - nb_lookup - Add custom field choice set [#1186](https://github.com/netbox-community/ansible_modules/pull/1186)
+ - nb_inventory - Don't extract null values from custom fields [#1184](https://github.com/netbox-community/ansible_modules/pull/1184)
+ - nb_inventory - Add Virtual Disks to inventory [#1188](https://github.com/netbox-community/ansible_modules/pull/1188)
+ - netbox_device_type and netbox_rack - Change u_height to float [#1200](https://github.com/netbox-community/ansible_modules/pull/1200)
+ - netbox_power_port - Add label [#1202](https://github.com/netbox-community/ansible_modules/pull/1202)
+ - nb_inventory - Make oob_ip available regardless of oob_ip_as_primary_ip option [#1211](https://github.com/netbox-community/ansible_modules/pull/1211)
+ - netbox_export_templates - Update documentation [#1214](https://github.com/netbox-community/ansible_modules/pull/1214)
+ - nb_inventory - Improve documentation for oob_ip_as_primary_ip [#1218](https://github.com/netbox-community/ansible_modules/pull/1218)
+ modules:
+ - description: Create, updates, or removes Custom Field Choice sets
+ name: netbox_custom_field_choice_set
+ namespace: ''
+ - description: Create, updates, or removes Module Bay
+ name: netbox_module_bay
+ namespace: ''
+ - description: Create, updates, or removes Module
+ namespace: ''
+ release_date: '2024-05-05'
diff --git a/ansible_collections/netbox/netbox/docs/conf.py b/ansible_collections/netbox/netbox/docs/conf.py
index cc5034ae0..87cfe5e7a 100644
--- a/ansible_collections/netbox/netbox/docs/conf.py
+++ b/ansible_collections/netbox/netbox/docs/conf.py
@@ -27,7 +27,7 @@ copyright = "2020, Mikhail Yohman"
author = "Mikhail Yohman <@FragmentedPacket>"
# The full version, including alpha/beta/rc tags
-release = "3.17.0"
+release = "3.18.0"
# -- General configuration ---------------------------------------------------
diff --git a/ansible_collections/netbox/netbox/docs/plugins/index.rst b/ansible_collections/netbox/netbox/docs/plugins/index.rst
index caf18e175..81f04d1cf 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/index.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/index.rst
@@ -9,7 +9,7 @@
Netbox.Netbox
=============
-Collection version 3.17.0
+Collection version 3.18.0
.. contents::
:local:
@@ -73,6 +73,7 @@ Modules
* :ansplugin:`netbox_contact_group module <netbox.netbox.netbox_contact_group#module>` -- Creates or removes contact groups from NetBox
* :ansplugin:`netbox_contact_role module <netbox.netbox.netbox_contact_role#module>` -- Creates or removes contact roles from NetBox
* :ansplugin:`netbox_custom_field module <netbox.netbox.netbox_custom_field#module>` -- Creates, updates or deletes custom fields within NetBox
+* :ansplugin:`netbox_custom_field_choice_set module <netbox.netbox.netbox_custom_field_choice_set#module>` -- Creates, updates or deletes custom field choice sets within Netbox
* :ansplugin:`netbox_custom_link module <netbox.netbox.netbox_custom_link#module>` -- Creates, updates or deletes custom links within NetBox
* :ansplugin:`netbox_device module <netbox.netbox.netbox_device#module>` -- Create, update or delete devices within NetBox
* :ansplugin:`netbox_device_bay module <netbox.netbox.netbox_device_bay#module>` -- Create, update or delete device bays within NetBox
@@ -95,6 +96,8 @@ Modules
* :ansplugin:`netbox_l2vpn_termination module <netbox.netbox.netbox_l2vpn_termination#module>` -- Create, update or delete L2VPNs terminations within NetBox
* :ansplugin:`netbox_location module <netbox.netbox.netbox_location#module>` -- Create, update or delete locations within NetBox
* :ansplugin:`netbox_manufacturer module <netbox.netbox.netbox_manufacturer#module>` -- Create or delete manufacturers within NetBox
+* :ansplugin:`netbox_module module <netbox.netbox.netbox_module#module>` -- Create, update or delete module within NetBox
+* :ansplugin:`netbox_module_bay module <netbox.netbox.netbox_module_bay#module>` -- Create, update or delete module bay within NetBox
* :ansplugin:`netbox_module_type module <netbox.netbox.netbox_module_type#module>` -- Create, update or delete module types within NetBox
* :ansplugin:`netbox_platform module <netbox.netbox.netbox_platform#module>` -- Create or delete platforms within NetBox
* :ansplugin:`netbox_power_feed module <netbox.netbox.netbox_power_feed#module>` -- Create, update or delete power feeds within NetBox
@@ -156,6 +159,7 @@ Modules
netbox_contact_group_module
netbox_contact_role_module
netbox_custom_field_module
+ netbox_custom_field_choice_set_module
netbox_custom_link_module
netbox_device_module
netbox_device_bay_module
@@ -178,6 +182,8 @@ Modules
netbox_l2vpn_termination_module
netbox_location_module
netbox_manufacturer_module
+ netbox_module_module
+ netbox_module_bay_module
netbox_module_type_module
netbox_platform_module
netbox_power_feed_module
diff --git a/ansible_collections/netbox/netbox/docs/plugins/nb_inventory_inventory.rst b/ansible_collections/netbox/netbox/docs/plugins/nb_inventory_inventory.rst
index f52447e4e..ea6711489 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/nb_inventory_inventory.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/nb_inventory_inventory.rst
@@ -23,7 +23,7 @@ netbox.netbox.nb_inventory inventory -- NetBox inventory source
.. Collection note
.. note::
- This inventory plugin is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This inventory plugin is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
@@ -1701,6 +1701,51 @@ Parameters
* - .. raw:: html
<div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-oob_ip_as_primary_ip"></div>
+
+ .. _ansible_collections.netbox.netbox.nb_inventory_inventory__parameter-oob_ip_as_primary_ip:
+
+ .. rst-class:: ansible-option-title
+
+ **oob_ip_as_primary_ip**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-oob_ip_as_primary_ip" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`boolean`
+
+
+
+
+ .. raw:: html
+
+ </div>
+
+ - .. raw:: html
+
+ <div class="ansible-option-cell">
+
+ Use out of band IP as \`ansible host\`
+
+
+ .. rst-class:: ansible-option-line
+
+ :ansible-option-choices:`Choices:`
+
+ - :ansible-option-choices-entry-default:`false` :ansible-option-choices-default-mark:`← (default)`
+ - :ansible-option-choices-entry:`true`
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-plugin"></div>
.. _ansible_collections.netbox.netbox.nb_inventory_inventory__parameter-plugin:
@@ -2331,6 +2376,54 @@ Parameters
* - .. raw:: html
<div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-virtual_disks"></div>
+
+ .. _ansible_collections.netbox.netbox.nb_inventory_inventory__parameter-virtual_disks:
+
+ .. rst-class:: ansible-option-title
+
+ **virtual_disks**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-virtual_disks" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`boolean`
+
+ :ansible-option-versionadded:`added in netbox.netbox 3.18.0`
+
+
+
+
+
+ .. raw:: html
+
+ </div>
+
+ - .. raw:: html
+
+ <div class="ansible-option-cell">
+
+ If True, it adds the virtual disks information in host vars.
+
+
+ .. rst-class:: ansible-option-line
+
+ :ansible-option-choices:`Choices:`
+
+ - :ansible-option-choices-entry-default:`false` :ansible-option-choices-default-mark:`← (default)`
+ - :ansible-option-choices-entry:`true`
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-vm_query_filters"></div>
.. _ansible_collections.netbox.netbox.nb_inventory_inventory__parameter-vm_query_filters:
@@ -2518,6 +2611,7 @@ Authors
- Nikhil Singh Baliyan (@nikkytub)
- Sander Steffann (@steffann)
- Douglas Heriot (@DouglasHeriot)
+- Thore Knickrehm (@tkn2023)
.. hint::
diff --git a/ansible_collections/netbox/netbox/docs/plugins/nb_lookup_lookup.rst b/ansible_collections/netbox/netbox/docs/plugins/nb_lookup_lookup.rst
index 530466b7c..426b77580 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/nb_lookup_lookup.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/nb_lookup_lookup.rst
@@ -23,7 +23,7 @@ netbox.netbox.nb_lookup lookup -- Queries and returns elements from NetBox
.. Collection note
.. note::
- This lookup plugin is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This lookup plugin is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_aggregate_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_aggregate_module.rst
index 96cea2629..fe57cd6f7 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_aggregate_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_aggregate_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_aggregate module -- Creates or removes aggregates from NetB
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_asn_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_asn_module.rst
index 39088eaae..8a9337e7a 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_asn_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_asn_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_asn module -- Create, update or delete ASNs within NetBox
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_cable_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_cable_module.rst
index ff0b43a32..3bbcd412d 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_cable_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_cable_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_cable module -- Create, update or delete cables within NetB
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_circuit_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_circuit_module.rst
index 2c0f3595f..4c00f4555 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_circuit_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_circuit_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_circuit module -- Create, update or delete circuits within
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_circuit_termination_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_circuit_termination_module.rst
index adb846b95..dfcd65f8f 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_circuit_termination_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_circuit_termination_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_circuit_termination module -- Create, update or delete circ
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_circuit_type_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_circuit_type_module.rst
index bd35a9d91..9ad126b18 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_circuit_type_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_circuit_type_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_circuit_type module -- Create, update or delete circuit typ
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_cluster_group_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_cluster_group_module.rst
index b0c95357f..547713794 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_cluster_group_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_cluster_group_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_cluster_group module -- Create, update or delete cluster gr
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_cluster_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_cluster_module.rst
index c17b01a0d..f38502ebe 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_cluster_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_cluster_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_cluster module -- Create, update or delete clusters within
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_cluster_type_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_cluster_type_module.rst
index 7841e23cf..65bdb5e20 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_cluster_type_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_cluster_type_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_cluster_type module -- Create, update or delete cluster typ
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_config_context_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_config_context_module.rst
index 3d87bdac4..e1e8705fa 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_config_context_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_config_context_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_config_context module -- Creates, updates or deletes config
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_config_template_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_config_template_module.rst
index 65031d5e6..33c652098 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_config_template_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_config_template_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_config_template module -- Creates or removes config templat
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_console_port_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_console_port_module.rst
index 52b0685ed..75f18bcd8 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_console_port_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_console_port_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_console_port module -- Create, update or delete console por
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_console_port_template_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_console_port_template_module.rst
index 748e3cafa..08dd9215f 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_console_port_template_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_console_port_template_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_console_port_template module -- Create, update or delete co
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_console_server_port_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_console_server_port_module.rst
index abeddaff6..eb14d265b 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_console_server_port_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_console_server_port_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_console_server_port module -- Create, update or delete cons
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_console_server_port_template_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_console_server_port_template_module.rst
index a733f1e00..a36a72d5b 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_console_server_port_template_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_console_server_port_template_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_console_server_port_template module -- Create, update or de
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_contact_group_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_contact_group_module.rst
index b02ed35d7..af898bc34 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_contact_group_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_contact_group_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_contact_group module -- Creates or removes contact groups f
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_contact_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_contact_module.rst
index 9997173a4..37d57552f 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_contact_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_contact_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_contact module -- Creates or removes contacts from NetBox
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_contact_role_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_contact_role_module.rst
index baf0bcbc1..e17d765e1 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_contact_role_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_contact_role_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_contact_role module -- Creates or removes contact roles fro
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_custom_field_choice_set_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_custom_field_choice_set_module.rst
new file mode 100644
index 000000000..8b4e168b0
--- /dev/null
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_custom_field_choice_set_module.rst
@@ -0,0 +1,762 @@
+
+.. Document meta
+
+:orphan:
+
+.. |antsibull-internal-nbsp| unicode:: 0xA0
+ :trim:
+
+.. meta::
+ :antsibull-docs: 2.7.0
+
+.. Anchors
+
+.. _ansible_collections.netbox.netbox.netbox_custom_field_choice_set_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Title
+
+netbox.netbox.netbox_custom_field_choice_set module -- Creates, updates or deletes custom field choice sets within Netbox
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
+
+ It is not included in ``ansible-core``.
+ To check whether it is installed, run :code:`ansible-galaxy collection list`.
+
+ To install it, use: :code:`ansible-galaxy collection install netbox.netbox`.
+ You need further requirements to be able to use this module,
+ see :ref:`Requirements <ansible_collections.netbox.netbox.netbox_custom_field_choice_set_module_requirements>` for details.
+
+ To use it in a playbook, specify: :code:`netbox.netbox.netbox_custom_field_choice_set`.
+
+.. version_added
+
+.. rst-class:: ansible-version-added
+
+New in netbox.netbox 3.18.0
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Creates, updates or removes custom fields choice sets from Netbox
+
+
+.. Aliases
+
+
+.. Requirements
+
+.. _ansible_collections.netbox.netbox.netbox_custom_field_choice_set_module_requirements:
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- pynetbox
+
+
+
+
+
+
+.. Options
+
+Parameters
+----------
+
+.. tabularcolumns:: \X{1}{3}\X{2}{3}
+
+.. list-table::
+ :width: 100%
+ :widths: auto
+ :header-rows: 1
+ :class: longtable ansible-option-table
+
+ * - Parameter
+ - Comments
+
+ * - .. raw:: html
+
+ <div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-cert"></div>
+
+ .. _ansible_collections.netbox.netbox.netbox_custom_field_choice_set_module__parameter-cert:
+
+ .. rst-class:: ansible-option-title
+
+ **cert**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-cert" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`any`
+
+ .. raw:: html
+
+ </div>
+
+ - .. raw:: html
+
+ <div class="ansible-option-cell">
+
+ Certificate path
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-data"></div>
+
+ .. _ansible_collections.netbox.netbox.netbox_custom_field_choice_set_module__parameter-data:
+
+ .. rst-class:: ansible-option-title
+
+ **data**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-data" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`dictionary` / :ansible-option-required:`required`
+
+ .. raw:: html
+
+ </div>
+
+ - .. raw:: html
+
+ <div class="ansible-option-cell">
+
+ Defines the choice set
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-indent"></div><div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-data/base_choices"></div>
+
+ .. raw:: latex
+
+ \hspace{0.02\textwidth}\begin{minipage}[t]{0.3\textwidth}
+
+ .. _ansible_collections.netbox.netbox.netbox_custom_field_choice_set_module__parameter-data/base_choices:
+
+ .. rst-class:: ansible-option-title
+
+ **base_choices**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-data/base_choices" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`string`
+
+ .. raw:: html
+
+ </div>
+
+ .. raw:: latex
+
+ \end{minipage}
+
+ - .. raw:: html
+
+ <div class="ansible-option-indent-desc"></div><div class="ansible-option-cell">
+
+ Selection of base choice to use in the choice set
+
+
+ .. rst-class:: ansible-option-line
+
+ :ansible-option-choices:`Choices:`
+
+ - :ansible-option-choices-entry:`"IATA"`
+ - :ansible-option-choices-entry:`"ISO\_3166"`
+ - :ansible-option-choices-entry:`"UN\_LOCODE"`
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-indent"></div><div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-data/description"></div>
+
+ .. raw:: latex
+
+ \hspace{0.02\textwidth}\begin{minipage}[t]{0.3\textwidth}
+
+ .. _ansible_collections.netbox.netbox.netbox_custom_field_choice_set_module__parameter-data/description:
+
+ .. rst-class:: ansible-option-title
+
+ **description**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-data/description" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`string`
+
+ .. raw:: html
+
+ </div>
+
+ .. raw:: latex
+
+ \end{minipage}
+
+ - .. raw:: html
+
+ <div class="ansible-option-indent-desc"></div><div class="ansible-option-cell">
+
+ Description of the choice set
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-indent"></div><div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-data/extra_choices"></div>
+
+ .. raw:: latex
+
+ \hspace{0.02\textwidth}\begin{minipage}[t]{0.3\textwidth}
+
+ .. _ansible_collections.netbox.netbox.netbox_custom_field_choice_set_module__parameter-data/extra_choices:
+
+ .. rst-class:: ansible-option-title
+
+ **extra_choices**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-data/extra_choices" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`list` / :ansible-option-elements:`elements=list`
+
+ .. raw:: html
+
+ </div>
+
+ .. raw:: latex
+
+ \end{minipage}
+
+ - .. raw:: html
+
+ <div class="ansible-option-indent-desc"></div><div class="ansible-option-cell">
+
+ List of available choices in the choice set
+
+
+ .. rst-class:: ansible-option-line
+
+ :ansible-option-default-bold:`Default:` :ansible-option-default:`[]`
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-indent"></div><div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-data/name"></div>
+
+ .. raw:: latex
+
+ \hspace{0.02\textwidth}\begin{minipage}[t]{0.3\textwidth}
+
+ .. _ansible_collections.netbox.netbox.netbox_custom_field_choice_set_module__parameter-data/name:
+
+ .. rst-class:: ansible-option-title
+
+ **name**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-data/name" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`string` / :ansible-option-required:`required`
+
+ .. raw:: html
+
+ </div>
+
+ .. raw:: latex
+
+ \end{minipage}
+
+ - .. raw:: html
+
+ <div class="ansible-option-indent-desc"></div><div class="ansible-option-cell">
+
+ Name of the choice set
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-indent"></div><div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-data/order_alphabetically"></div>
+
+ .. raw:: latex
+
+ \hspace{0.02\textwidth}\begin{minipage}[t]{0.3\textwidth}
+
+ .. _ansible_collections.netbox.netbox.netbox_custom_field_choice_set_module__parameter-data/order_alphabetically:
+
+ .. rst-class:: ansible-option-title
+
+ **order_alphabetically**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-data/order_alphabetically" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`boolean`
+
+ .. raw:: html
+
+ </div>
+
+ .. raw:: latex
+
+ \end{minipage}
+
+ - .. raw:: html
+
+ <div class="ansible-option-indent-desc"></div><div class="ansible-option-cell">
+
+ Order the choices alphabetically
+
+
+ .. rst-class:: ansible-option-line
+
+ :ansible-option-choices:`Choices:`
+
+ - :ansible-option-choices-entry:`false`
+ - :ansible-option-choices-entry:`true`
+
+
+ .. raw:: html
+
+ </div>
+
+
+ * - .. raw:: html
+
+ <div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-netbox_token"></div>
+
+ .. _ansible_collections.netbox.netbox.netbox_custom_field_choice_set_module__parameter-netbox_token:
+
+ .. rst-class:: ansible-option-title
+
+ **netbox_token**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-netbox_token" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`string` / :ansible-option-required:`required`
+
+ .. raw:: html
+
+ </div>
+
+ - .. raw:: html
+
+ <div class="ansible-option-cell">
+
+ The NetBox API token.
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-netbox_url"></div>
+
+ .. _ansible_collections.netbox.netbox.netbox_custom_field_choice_set_module__parameter-netbox_url:
+
+ .. rst-class:: ansible-option-title
+
+ **netbox_url**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-netbox_url" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`string` / :ansible-option-required:`required`
+
+ .. raw:: html
+
+ </div>
+
+ - .. raw:: html
+
+ <div class="ansible-option-cell">
+
+ The URL of the NetBox instance.
+
+ Must be accessible by the Ansible control host.
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-query_params"></div>
+
+ .. _ansible_collections.netbox.netbox.netbox_custom_field_choice_set_module__parameter-query_params:
+
+ .. rst-class:: ansible-option-title
+
+ **query_params**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-query_params" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`list` / :ansible-option-elements:`elements=string`
+
+ .. raw:: html
+
+ </div>
+
+ - .. raw:: html
+
+ <div class="ansible-option-cell">
+
+ This can be used to override the specified values in ALLOWED\_QUERY\_PARAMS that are defined
+
+ in plugins/module\_utils/netbox\_utils.py and provides control to users on what may make
+
+ an object unique in their environment.
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-state"></div>
+
+ .. _ansible_collections.netbox.netbox.netbox_custom_field_choice_set_module__parameter-state:
+
+ .. rst-class:: ansible-option-title
+
+ **state**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-state" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`string`
+
+ .. raw:: html
+
+ </div>
+
+ - .. raw:: html
+
+ <div class="ansible-option-cell">
+
+ The state of the object.
+
+
+ .. rst-class:: ansible-option-line
+
+ :ansible-option-choices:`Choices:`
+
+ - :ansible-option-choices-entry-default:`"present"` :ansible-option-choices-default-mark:`← (default)`
+ - :ansible-option-choices-entry:`"absent"`
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-validate_certs"></div>
+
+ .. _ansible_collections.netbox.netbox.netbox_custom_field_choice_set_module__parameter-validate_certs:
+
+ .. rst-class:: ansible-option-title
+
+ **validate_certs**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-validate_certs" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`any`
+
+ .. raw:: html
+
+ </div>
+
+ - .. raw:: html
+
+ <div class="ansible-option-cell">
+
+ If \ :literal:`no`\ , SSL certificates will not be validated.
+
+ This should only be used on personally controlled sites using a self-signed certificates.
+
+
+ .. rst-class:: ansible-option-line
+
+ :ansible-option-default-bold:`Default:` :ansible-option-default:`true`
+
+ .. raw:: html
+
+ </div>
+
+
+.. Attributes
+
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - This should be run with connection \ :literal:`local`\ and hosts \ :literal:`localhost`\
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: "Test Netbox custom_field_choice_set module"
+ connection: local
+ hosts: localhost
+ tasks:
+ - name: Create a choice set with choices
+ netbox.netbox.netbox_custom_field_choice_set:
+ netbox_url: http://netbox.local
+ netbox_token: thisIsMyToken
+ data:
+ name: "ChoiceSetName"
+ description: "Choice Set Description"
+ extra_choices:
+ - ['choice1', 'label1']
+ - ['choice2', 'label2']
+
+ - name: Create a choice set with a base choice
+ netbox.netbox.netbox_custom_field_choice_set:
+ netbox_url: http://netbox.local
+ netbox_token: thisIsMyToken
+ data:
+ name: "ChoiceSetName"
+ description: "Choice Set Description"
+ order_alphabetically: true
+ base_choices: "IATA"
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. tabularcolumns:: \X{1}{3}\X{2}{3}
+
+.. list-table::
+ :width: 100%
+ :widths: auto
+ :header-rows: 1
+ :class: longtable ansible-option-table
+
+ * - Key
+ - Description
+
+ * - .. raw:: html
+
+ <div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="return-custom_field_choice_set"></div>
+
+ .. _ansible_collections.netbox.netbox.netbox_custom_field_choice_set_module__return-custom_field_choice_set:
+
+ .. rst-class:: ansible-option-title
+
+ **custom_field_choice_set**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#return-custom_field_choice_set" title="Permalink to this return value"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`dictionary`
+
+ .. raw:: html
+
+ </div>
+
+ - .. raw:: html
+
+ <div class="ansible-option-cell">
+
+ Serialized object as created/existent/updated/deleted within NetBox
+
+
+ .. rst-class:: ansible-option-line
+
+ :ansible-option-returned-bold:`Returned:` always
+
+
+ .. raw:: html
+
+ </div>
+
+
+ * - .. raw:: html
+
+ <div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="return-msg"></div>
+
+ .. _ansible_collections.netbox.netbox.netbox_custom_field_choice_set_module__return-msg:
+
+ .. rst-class:: ansible-option-title
+
+ **msg**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#return-msg" title="Permalink to this return value"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`string`
+
+ .. raw:: html
+
+ </div>
+
+ - .. raw:: html
+
+ <div class="ansible-option-cell">
+
+ Message indicating failure or info about what has been achieved
+
+
+ .. rst-class:: ansible-option-line
+
+ :ansible-option-returned-bold:`Returned:` always
+
+
+ .. raw:: html
+
+ </div>
+
+
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- Philipp Rintz (@p-rintz)
+
+
+
+.. Extra links
+
+Collection links
+~~~~~~~~~~~~~~~~
+
+.. ansible-links::
+
+ - title: "Issue Tracker"
+ url: "https://github.com/netbox-community/ansible_modules/issues"
+ external: true
+ - title: "Repository (Sources)"
+ url: "https://github.com/netbox-community/ansible_modules"
+ external: true
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_custom_field_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_custom_field_module.rst
index 24d2e6e43..cae37424e 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_custom_field_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_custom_field_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_custom_field module -- Creates, updates or deletes custom f
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
@@ -160,25 +160,25 @@ Parameters
* - .. raw:: html
<div class="ansible-option-indent"></div><div class="ansible-option-cell">
- <div class="ansibleOptionAnchor" id="parameter-data/choices"></div>
+ <div class="ansibleOptionAnchor" id="parameter-data/choice_set"></div>
.. raw:: latex
\hspace{0.02\textwidth}\begin{minipage}[t]{0.3\textwidth}
- .. _ansible_collections.netbox.netbox.netbox_custom_field_module__parameter-data/choices:
+ .. _ansible_collections.netbox.netbox.netbox_custom_field_module__parameter-data/choice_set:
.. rst-class:: ansible-option-title
- **choices**
+ **choice_set**
.. raw:: html
- <a class="ansibleOptionLink" href="#parameter-data/choices" title="Permalink to this option"></a>
+ <a class="ansibleOptionLink" href="#parameter-data/choice_set" title="Permalink to this option"></a>
.. ansible-option-type-line::
- :ansible-option-type:`list` / :ansible-option-elements:`elements=string`
+ :ansible-option-type:`string`
.. raw:: html
@@ -192,7 +192,7 @@ Parameters
<div class="ansible-option-indent-desc"></div><div class="ansible-option-cell">
- List of available choices (for selection fields)
+ The name of the choice set to use (for selection fields)
.. raw:: html
@@ -1149,6 +1149,18 @@ Examples
name: A Custom Field
type: text
+ - name: Create a custom field of type selection
+ netbox.netbox.netbox_custom_field:
+ netbox_url: http://netbox.local
+ netbox_token: thisIsMyToken
+ data:
+ name: "Custom_Field"
+ content_types:
+ - dcim.device
+ - virtualization.virtualmachine
+ type: select
+ choice_set: A Choice Set name
+
- name: Update the custom field to make it required
netbox.netbox.netbox_custom_field:
netbox_url: http://netbox.local
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_custom_link_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_custom_link_module.rst
index 3348ef6fe..d5da98511 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_custom_link_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_custom_link_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_custom_link module -- Creates, updates or deletes custom li
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_device_bay_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_device_bay_module.rst
index 56b730e40..64ca07256 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_device_bay_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_device_bay_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_device_bay module -- Create, update or delete device bays w
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_device_bay_template_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_device_bay_template_module.rst
index 0c255076f..cbd59637f 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_device_bay_template_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_device_bay_template_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_device_bay_template module -- Create, update or delete devi
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_device_interface_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_device_interface_module.rst
index c80d1af13..a1b1126d5 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_device_interface_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_device_interface_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_device_interface module -- Creates or removes interfaces on
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_device_interface_template_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_device_interface_template_module.rst
index 56f28d7be..02f883336 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_device_interface_template_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_device_interface_template_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_device_interface_template module -- Creates or removes inte
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_device_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_device_module.rst
index 47d068742..55fbde240 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_device_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_device_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_device module -- Create, update or delete devices within Ne
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
@@ -846,7 +846,7 @@ Parameters
.. ansible-option-type-line::
- :ansible-option-type:`integer`
+ :ansible-option-type:`float`
.. raw:: html
@@ -1602,7 +1602,7 @@ Examples
data:
name: Test Device
rack: Test Rack
- position: 10
+ position: 10.5
face: Front
state: present
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_device_role_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_device_role_module.rst
index 575aa75e2..d2b2c6fae 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_device_role_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_device_role_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_device_role module -- Create, update or delete devices role
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_device_type_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_device_type_module.rst
index 97e4d9c61..4412fac8d 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_device_type_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_device_type_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_device_type module -- Create, update or delete device types
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
@@ -726,7 +726,7 @@ Parameters
.. ansible-option-type-line::
- :ansible-option-type:`integer`
+ :ansible-option-type:`float`
.. raw:: html
@@ -1087,7 +1087,7 @@ Examples
model: ws-test-3750
manufacturer: Test Manufacturer
part_number: ws-3750g-v2
- u_height: 1
+ u_height: 1.5
is_full_depth: False
subdevice_role: parent
state: present
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_export_template_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_export_template_module.rst
index 695917d5c..82827bb79 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_export_template_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_export_template_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_export_template module -- Creates, updates or deletes expor
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
@@ -719,29 +719,37 @@ Examples
.. code-block:: yaml+jinja
- - name: "Test NetBox custom_link module"
+ - name: "Test NetBox export_templates module"
connection: local
hosts: localhost
tasks:
- - name: Create a custom link on device
+ - name: "Ensure export template for /etc/hosts entries exists"
netbox.netbox.netbox_export_template:
netbox_url: http://netbox.local
netbox_token: thisIsMyToken
data:
- content_type: "dcim.device"
- name: Custom Link
- link_text: "Open Web Management"
- link_url: !unsafe https://{{ obj.name }}.domain.local
-
- - name: Delete the custom link
+ content_types: ["dcim.device", "virtualization.virtualmachine"]
+ name: /etc/hosts
+ description: "Generate entries for /etc/hosts"
+ as_attachment: true
+ template_code: !unsafe |
+ {% for vm in queryset -%}
+ {%- if vm.primary_ip4 and vm.primary_ip6 %}
+ {{ vm.primary_ip4.address.ip }} {{ vm.primary_ip6.address.ip }} {{ vm }}
+ {%- elif vm.primary_ip4 %}
+ {{ vm.primary_ip4.address.ip }} {{ vm }}
+ {%- elif vm.primary_ip6 %}
+ {{ vm.primary_ip6.address.ip }} {{ vm }}
+ {%- endif -%}
+ {%- endfor %}
+
+ - name: Delete the export template
netbox.netbox.netbox_export_template:
netbox_url: http://netbox.local
netbox_token: thisIsMyToken
data:
- content_type: "dcim.device"
- name: Custom Link
- link_text: "Open Web Management"
- link_url: !unsafe https://{{ obj.name }}.domain.local
+ content_type: "dcim.device"
+ name: /etc/hosts
state: absent
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_fhrp_group_assignment_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_fhrp_group_assignment_module.rst
index 493125183..5abb70084 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_fhrp_group_assignment_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_fhrp_group_assignment_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_fhrp_group_assignment module -- Create, update or delete FH
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_fhrp_group_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_fhrp_group_module.rst
index 15d4c16d2..8afcf6262 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_fhrp_group_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_fhrp_group_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_fhrp_group module -- Create, update or delete FHRP groups w
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_front_port_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_front_port_module.rst
index b2914909b..0333c2ccb 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_front_port_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_front_port_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_front_port module -- Create, update or delete front ports w
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_front_port_template_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_front_port_template_module.rst
index ad173b378..3fd593dc6 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_front_port_template_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_front_port_template_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_front_port_template module -- Create, update or delete fron
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_interface_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_interface_module.rst
index 53fe418d2..2aa24f73a 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_interface_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_interface_module.rst
@@ -18,7 +18,7 @@ netbox.netbox.netbox_interface
.. Collection note
.. note::
- This plugin was part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This plugin was part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
This module has been removed
in version 0.1.0 of netbox.netbox.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_inventory_item_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_inventory_item_module.rst
index 86a7ad6e5..018c4318e 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_inventory_item_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_inventory_item_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_inventory_item module -- Creates or removes inventory items
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_inventory_item_role_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_inventory_item_role_module.rst
index bf115eb58..933d52e5f 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_inventory_item_role_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_inventory_item_role_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_inventory_item_role module -- Create, update or delete devi
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_ip_address_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_ip_address_module.rst
index 77500a2be..7820c28ee 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_ip_address_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_ip_address_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_ip_address module -- Creates or removes IP addresses from N
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_ipam_role_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_ipam_role_module.rst
index 10819760e..72c1a7795 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_ipam_role_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_ipam_role_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_ipam_role module -- Creates or removes ipam roles from NetB
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_journal_entry_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_journal_entry_module.rst
index 8811c918c..b93be3f61 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_journal_entry_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_journal_entry_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_journal_entry module -- Creates a journal entry
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_l2vpn_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_l2vpn_module.rst
index 1cb005521..51aae8bad 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_l2vpn_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_l2vpn_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_l2vpn module -- Create, update or delete L2VPNs within NetB
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_l2vpn_termination_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_l2vpn_termination_module.rst
index 7a718c357..456635103 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_l2vpn_termination_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_l2vpn_termination_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_l2vpn_termination module -- Create, update or delete L2VPNs
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_location_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_location_module.rst
index 366ff9452..cc792a21c 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_location_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_location_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_location module -- Create, update or delete locations withi
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_manufacturer_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_manufacturer_module.rst
index b162c04f5..338b46357 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_manufacturer_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_manufacturer_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_manufacturer module -- Create or delete manufacturers withi
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_module_bay_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_module_bay_module.rst
new file mode 100644
index 000000000..613de7741
--- /dev/null
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_module_bay_module.rst
@@ -0,0 +1,825 @@
+
+.. Document meta
+
+:orphan:
+
+.. |antsibull-internal-nbsp| unicode:: 0xA0
+ :trim:
+
+.. meta::
+ :antsibull-docs: 2.7.0
+
+.. Anchors
+
+.. _ansible_collections.netbox.netbox.netbox_module_bay_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Title
+
+netbox.netbox.netbox_module_bay module -- Create, update or delete module bay within NetBox
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
+
+ It is not included in ``ansible-core``.
+ To check whether it is installed, run :code:`ansible-galaxy collection list`.
+
+ To install it, use: :code:`ansible-galaxy collection install netbox.netbox`.
+ You need further requirements to be able to use this module,
+ see :ref:`Requirements <ansible_collections.netbox.netbox.netbox_module_bay_module_requirements>` for details.
+
+ To use it in a playbook, specify: :code:`netbox.netbox.netbox_module_bay`.
+
+.. version_added
+
+.. rst-class:: ansible-version-added
+
+New in netbox.netbox 3.18.0
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Creates, updates or removes module bay from NetBox
+
+
+.. Aliases
+
+
+.. Requirements
+
+.. _ansible_collections.netbox.netbox.netbox_module_bay_module_requirements:
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- pynetbox
+
+
+
+
+
+
+.. Options
+
+Parameters
+----------
+
+.. tabularcolumns:: \X{1}{3}\X{2}{3}
+
+.. list-table::
+ :width: 100%
+ :widths: auto
+ :header-rows: 1
+ :class: longtable ansible-option-table
+
+ * - Parameter
+ - Comments
+
+ * - .. raw:: html
+
+ <div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-cert"></div>
+
+ .. _ansible_collections.netbox.netbox.netbox_module_bay_module__parameter-cert:
+
+ .. rst-class:: ansible-option-title
+
+ **cert**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-cert" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`any`
+
+ .. raw:: html
+
+ </div>
+
+ - .. raw:: html
+
+ <div class="ansible-option-cell">
+
+ Certificate path
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-data"></div>
+
+ .. _ansible_collections.netbox.netbox.netbox_module_bay_module__parameter-data:
+
+ .. rst-class:: ansible-option-title
+
+ **data**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-data" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`dictionary` / :ansible-option-required:`required`
+
+ .. raw:: html
+
+ </div>
+
+ - .. raw:: html
+
+ <div class="ansible-option-cell">
+
+ Defines the module bay configuration
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-indent"></div><div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-data/custom_fields"></div>
+
+ .. raw:: latex
+
+ \hspace{0.02\textwidth}\begin{minipage}[t]{0.3\textwidth}
+
+ .. _ansible_collections.netbox.netbox.netbox_module_bay_module__parameter-data/custom_fields:
+
+ .. rst-class:: ansible-option-title
+
+ **custom_fields**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-data/custom_fields" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`dictionary`
+
+ .. raw:: html
+
+ </div>
+
+ .. raw:: latex
+
+ \end{minipage}
+
+ - .. raw:: html
+
+ <div class="ansible-option-indent-desc"></div><div class="ansible-option-cell">
+
+ must exist in NetBox
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-indent"></div><div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-data/description"></div>
+
+ .. raw:: latex
+
+ \hspace{0.02\textwidth}\begin{minipage}[t]{0.3\textwidth}
+
+ .. _ansible_collections.netbox.netbox.netbox_module_bay_module__parameter-data/description:
+
+ .. rst-class:: ansible-option-title
+
+ **description**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-data/description" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`string`
+
+ .. raw:: html
+
+ </div>
+
+ .. raw:: latex
+
+ \end{minipage}
+
+ - .. raw:: html
+
+ <div class="ansible-option-indent-desc"></div><div class="ansible-option-cell">
+
+ The description of the module bay
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-indent"></div><div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-data/device"></div>
+
+ .. raw:: latex
+
+ \hspace{0.02\textwidth}\begin{minipage}[t]{0.3\textwidth}
+
+ .. _ansible_collections.netbox.netbox.netbox_module_bay_module__parameter-data/device:
+
+ .. rst-class:: ansible-option-title
+
+ **device**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-data/device" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`any` / :ansible-option-required:`required`
+
+ .. raw:: html
+
+ </div>
+
+ .. raw:: latex
+
+ \end{minipage}
+
+ - .. raw:: html
+
+ <div class="ansible-option-indent-desc"></div><div class="ansible-option-cell">
+
+ The device of the module bay
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-indent"></div><div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-data/label"></div>
+
+ .. raw:: latex
+
+ \hspace{0.02\textwidth}\begin{minipage}[t]{0.3\textwidth}
+
+ .. _ansible_collections.netbox.netbox.netbox_module_bay_module__parameter-data/label:
+
+ .. rst-class:: ansible-option-title
+
+ **label**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-data/label" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`string`
+
+ .. raw:: html
+
+ </div>
+
+ .. raw:: latex
+
+ \end{minipage}
+
+ - .. raw:: html
+
+ <div class="ansible-option-indent-desc"></div><div class="ansible-option-cell">
+
+ The label of the module bay
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-indent"></div><div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-data/name"></div>
+
+ .. raw:: latex
+
+ \hspace{0.02\textwidth}\begin{minipage}[t]{0.3\textwidth}
+
+ .. _ansible_collections.netbox.netbox.netbox_module_bay_module__parameter-data/name:
+
+ .. rst-class:: ansible-option-title
+
+ **name**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-data/name" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`any` / :ansible-option-required:`required`
+
+ .. raw:: html
+
+ </div>
+
+ .. raw:: latex
+
+ \end{minipage}
+
+ - .. raw:: html
+
+ <div class="ansible-option-indent-desc"></div><div class="ansible-option-cell">
+
+ The model of the module bay
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-indent"></div><div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-data/position"></div>
+
+ .. raw:: latex
+
+ \hspace{0.02\textwidth}\begin{minipage}[t]{0.3\textwidth}
+
+ .. _ansible_collections.netbox.netbox.netbox_module_bay_module__parameter-data/position:
+
+ .. rst-class:: ansible-option-title
+
+ **position**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-data/position" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`string` / :ansible-option-required:`required`
+
+ .. raw:: html
+
+ </div>
+
+ .. raw:: latex
+
+ \end{minipage}
+
+ - .. raw:: html
+
+ <div class="ansible-option-indent-desc"></div><div class="ansible-option-cell">
+
+ The position of the module bay
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-indent"></div><div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-data/tags"></div>
+
+ .. raw:: latex
+
+ \hspace{0.02\textwidth}\begin{minipage}[t]{0.3\textwidth}
+
+ .. _ansible_collections.netbox.netbox.netbox_module_bay_module__parameter-data/tags:
+
+ .. rst-class:: ansible-option-title
+
+ **tags**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-data/tags" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`list` / :ansible-option-elements:`elements=any`
+
+ .. raw:: html
+
+ </div>
+
+ .. raw:: latex
+
+ \end{minipage}
+
+ - .. raw:: html
+
+ <div class="ansible-option-indent-desc"></div><div class="ansible-option-cell">
+
+ Any tags that the module bay may need to be associated with
+
+
+ .. raw:: html
+
+ </div>
+
+
+ * - .. raw:: html
+
+ <div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-netbox_token"></div>
+
+ .. _ansible_collections.netbox.netbox.netbox_module_bay_module__parameter-netbox_token:
+
+ .. rst-class:: ansible-option-title
+
+ **netbox_token**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-netbox_token" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`string` / :ansible-option-required:`required`
+
+ .. raw:: html
+
+ </div>
+
+ - .. raw:: html
+
+ <div class="ansible-option-cell">
+
+ The NetBox API token.
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-netbox_url"></div>
+
+ .. _ansible_collections.netbox.netbox.netbox_module_bay_module__parameter-netbox_url:
+
+ .. rst-class:: ansible-option-title
+
+ **netbox_url**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-netbox_url" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`string` / :ansible-option-required:`required`
+
+ .. raw:: html
+
+ </div>
+
+ - .. raw:: html
+
+ <div class="ansible-option-cell">
+
+ The URL of the NetBox instance.
+
+ Must be accessible by the Ansible control host.
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-query_params"></div>
+
+ .. _ansible_collections.netbox.netbox.netbox_module_bay_module__parameter-query_params:
+
+ .. rst-class:: ansible-option-title
+
+ **query_params**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-query_params" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`list` / :ansible-option-elements:`elements=string`
+
+ .. raw:: html
+
+ </div>
+
+ - .. raw:: html
+
+ <div class="ansible-option-cell">
+
+ This can be used to override the specified values in ALLOWED\_QUERY\_PARAMS that are defined
+
+ in plugins/module\_utils/netbox\_utils.py and provides control to users on what may make
+
+ an object unique in their environment.
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-state"></div>
+
+ .. _ansible_collections.netbox.netbox.netbox_module_bay_module__parameter-state:
+
+ .. rst-class:: ansible-option-title
+
+ **state**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-state" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`string`
+
+ .. raw:: html
+
+ </div>
+
+ - .. raw:: html
+
+ <div class="ansible-option-cell">
+
+ The state of the object.
+
+
+ .. rst-class:: ansible-option-line
+
+ :ansible-option-choices:`Choices:`
+
+ - :ansible-option-choices-entry-default:`"present"` :ansible-option-choices-default-mark:`← (default)`
+ - :ansible-option-choices-entry:`"absent"`
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-validate_certs"></div>
+
+ .. _ansible_collections.netbox.netbox.netbox_module_bay_module__parameter-validate_certs:
+
+ .. rst-class:: ansible-option-title
+
+ **validate_certs**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-validate_certs" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`any`
+
+ .. raw:: html
+
+ </div>
+
+ - .. raw:: html
+
+ <div class="ansible-option-cell">
+
+ If \ :literal:`no`\ , SSL certificates will not be validated.
+
+ This should only be used on personally controlled sites using a self-signed certificates.
+
+
+ .. rst-class:: ansible-option-line
+
+ :ansible-option-default-bold:`Default:` :ansible-option-default:`true`
+
+ .. raw:: html
+
+ </div>
+
+
+.. Attributes
+
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Tags should be defined as a YAML list
+ - This should be ran with connection \ :literal:`local`\ and hosts \ :literal:`localhost`\
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: "Test NetBox modules"
+ connection: local
+ hosts: localhost
+ gather_facts: False
+
+ tasks:
+ - name: Create module bay within NetBox with only required information
+ netbox.netbox.netbox_module_bay:
+ netbox_url: http://netbox.local
+ netbox_token: thisIsMyToken
+ data:
+ device: C9300-DEMO
+ name: C9300-DEMO-SLOT-0
+ position: 0
+ state: present
+
+ - name: Delete module bay within netbox
+ netbox.netbox.netbox_module_bay:
+ netbox_url: http://netbox.local
+ netbox_token: thisIsMyToken
+ data:
+ name: C9300-DEMO-SLOT-0
+ state: absent
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. tabularcolumns:: \X{1}{3}\X{2}{3}
+
+.. list-table::
+ :width: 100%
+ :widths: auto
+ :header-rows: 1
+ :class: longtable ansible-option-table
+
+ * - Key
+ - Description
+
+ * - .. raw:: html
+
+ <div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="return-module_bay"></div>
+
+ .. _ansible_collections.netbox.netbox.netbox_module_bay_module__return-module_bay:
+
+ .. rst-class:: ansible-option-title
+
+ **module_bay**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#return-module_bay" title="Permalink to this return value"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`dictionary`
+
+ .. raw:: html
+
+ </div>
+
+ - .. raw:: html
+
+ <div class="ansible-option-cell">
+
+ Serialized object as created or already existent within NetBox
+
+
+ .. rst-class:: ansible-option-line
+
+ :ansible-option-returned-bold:`Returned:` success (when \ :emphasis:`state=present`\ )
+
+
+ .. raw:: html
+
+ </div>
+
+
+ * - .. raw:: html
+
+ <div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="return-msg"></div>
+
+ .. _ansible_collections.netbox.netbox.netbox_module_bay_module__return-msg:
+
+ .. rst-class:: ansible-option-title
+
+ **msg**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#return-msg" title="Permalink to this return value"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`string`
+
+ .. raw:: html
+
+ </div>
+
+ - .. raw:: html
+
+ <div class="ansible-option-cell">
+
+ Message indicating failure or info about what has been achieved
+
+
+ .. rst-class:: ansible-option-line
+
+ :ansible-option-returned-bold:`Returned:` always
+
+
+ .. raw:: html
+
+ </div>
+
+
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- Erwan TONNERRE (@etonnerre)
+
+
+
+.. Extra links
+
+Collection links
+~~~~~~~~~~~~~~~~
+
+.. ansible-links::
+
+ - title: "Issue Tracker"
+ url: "https://github.com/netbox-community/ansible_modules/issues"
+ external: true
+ - title: "Repository (Sources)"
+ url: "https://github.com/netbox-community/ansible_modules"
+ external: true
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_module_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_module_module.rst
new file mode 100644
index 000000000..e014a8f2f
--- /dev/null
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_module_module.rst
@@ -0,0 +1,984 @@
+
+.. Document meta
+
+:orphan:
+
+.. |antsibull-internal-nbsp| unicode:: 0xA0
+ :trim:
+
+.. meta::
+ :antsibull-docs: 2.7.0
+
+.. Anchors
+
+.. _ansible_collections.netbox.netbox.netbox_module_module:
+
+.. Anchors: short name for ansible.builtin
+
+.. Title
+
+netbox.netbox.netbox_module module -- Create, update or delete module within NetBox
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. Collection note
+
+.. note::
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
+
+ It is not included in ``ansible-core``.
+ To check whether it is installed, run :code:`ansible-galaxy collection list`.
+
+ To install it, use: :code:`ansible-galaxy collection install netbox.netbox`.
+ You need further requirements to be able to use this module,
+ see :ref:`Requirements <ansible_collections.netbox.netbox.netbox_module_module_requirements>` for details.
+
+ To use it in a playbook, specify: :code:`netbox.netbox.netbox_module`.
+
+.. version_added
+
+.. rst-class:: ansible-version-added
+
+New in netbox.netbox 3.18.0
+
+.. contents::
+ :local:
+ :depth: 1
+
+.. Deprecated
+
+
+Synopsis
+--------
+
+.. Description
+
+- Creates, updates or removes module from NetBox
+
+
+.. Aliases
+
+
+.. Requirements
+
+.. _ansible_collections.netbox.netbox.netbox_module_module_requirements:
+
+Requirements
+------------
+The below requirements are needed on the host that executes this module.
+
+- pynetbox
+
+
+
+
+
+
+.. Options
+
+Parameters
+----------
+
+.. tabularcolumns:: \X{1}{3}\X{2}{3}
+
+.. list-table::
+ :width: 100%
+ :widths: auto
+ :header-rows: 1
+ :class: longtable ansible-option-table
+
+ * - Parameter
+ - Comments
+
+ * - .. raw:: html
+
+ <div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-cert"></div>
+
+ .. _ansible_collections.netbox.netbox.netbox_module_module__parameter-cert:
+
+ .. rst-class:: ansible-option-title
+
+ **cert**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-cert" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`any`
+
+ .. raw:: html
+
+ </div>
+
+ - .. raw:: html
+
+ <div class="ansible-option-cell">
+
+ Certificate path
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-data"></div>
+
+ .. _ansible_collections.netbox.netbox.netbox_module_module__parameter-data:
+
+ .. rst-class:: ansible-option-title
+
+ **data**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-data" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`dictionary` / :ansible-option-required:`required`
+
+ .. raw:: html
+
+ </div>
+
+ - .. raw:: html
+
+ <div class="ansible-option-cell">
+
+ Defines the device type configuration
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-indent"></div><div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-data/asset_tag"></div>
+
+ .. raw:: latex
+
+ \hspace{0.02\textwidth}\begin{minipage}[t]{0.3\textwidth}
+
+ .. _ansible_collections.netbox.netbox.netbox_module_module__parameter-data/asset_tag:
+
+ .. rst-class:: ansible-option-title
+
+ **asset_tag**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-data/asset_tag" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`string`
+
+ .. raw:: html
+
+ </div>
+
+ .. raw:: latex
+
+ \end{minipage}
+
+ - .. raw:: html
+
+ <div class="ansible-option-indent-desc"></div><div class="ansible-option-cell">
+
+ The asset tag of the modyle
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-indent"></div><div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-data/comments"></div>
+
+ .. raw:: latex
+
+ \hspace{0.02\textwidth}\begin{minipage}[t]{0.3\textwidth}
+
+ .. _ansible_collections.netbox.netbox.netbox_module_module__parameter-data/comments:
+
+ .. rst-class:: ansible-option-title
+
+ **comments**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-data/comments" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`string`
+
+ .. raw:: html
+
+ </div>
+
+ .. raw:: latex
+
+ \end{minipage}
+
+ - .. raw:: html
+
+ <div class="ansible-option-indent-desc"></div><div class="ansible-option-cell">
+
+ Comments that may include additional information in regards to the module
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-indent"></div><div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-data/custom_fields"></div>
+
+ .. raw:: latex
+
+ \hspace{0.02\textwidth}\begin{minipage}[t]{0.3\textwidth}
+
+ .. _ansible_collections.netbox.netbox.netbox_module_module__parameter-data/custom_fields:
+
+ .. rst-class:: ansible-option-title
+
+ **custom_fields**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-data/custom_fields" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`dictionary`
+
+ .. raw:: html
+
+ </div>
+
+ .. raw:: latex
+
+ \end{minipage}
+
+ - .. raw:: html
+
+ <div class="ansible-option-indent-desc"></div><div class="ansible-option-cell">
+
+ must exist in NetBox
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-indent"></div><div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-data/description"></div>
+
+ .. raw:: latex
+
+ \hspace{0.02\textwidth}\begin{minipage}[t]{0.3\textwidth}
+
+ .. _ansible_collections.netbox.netbox.netbox_module_module__parameter-data/description:
+
+ .. rst-class:: ansible-option-title
+
+ **description**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-data/description" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`string`
+
+ .. raw:: html
+
+ </div>
+
+ .. raw:: latex
+
+ \end{minipage}
+
+ - .. raw:: html
+
+ <div class="ansible-option-indent-desc"></div><div class="ansible-option-cell">
+
+ The description of the module
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-indent"></div><div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-data/device"></div>
+
+ .. raw:: latex
+
+ \hspace{0.02\textwidth}\begin{minipage}[t]{0.3\textwidth}
+
+ .. _ansible_collections.netbox.netbox.netbox_module_module__parameter-data/device:
+
+ .. rst-class:: ansible-option-title
+
+ **device**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-data/device" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`any` / :ansible-option-required:`required`
+
+ .. raw:: html
+
+ </div>
+
+ .. raw:: latex
+
+ \end{minipage}
+
+ - .. raw:: html
+
+ <div class="ansible-option-indent-desc"></div><div class="ansible-option-cell">
+
+ The device of the module
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-indent"></div><div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-data/module_bay"></div>
+
+ .. raw:: latex
+
+ \hspace{0.02\textwidth}\begin{minipage}[t]{0.3\textwidth}
+
+ .. _ansible_collections.netbox.netbox.netbox_module_module__parameter-data/module_bay:
+
+ .. rst-class:: ansible-option-title
+
+ **module_bay**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-data/module_bay" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`any` / :ansible-option-required:`required`
+
+ .. raw:: html
+
+ </div>
+
+ .. raw:: latex
+
+ \end{minipage}
+
+ - .. raw:: html
+
+ <div class="ansible-option-indent-desc"></div><div class="ansible-option-cell">
+
+ The module bay of the module
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-indent"></div><div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-data/module_type"></div>
+
+ .. raw:: latex
+
+ \hspace{0.02\textwidth}\begin{minipage}[t]{0.3\textwidth}
+
+ .. _ansible_collections.netbox.netbox.netbox_module_module__parameter-data/module_type:
+
+ .. rst-class:: ansible-option-title
+
+ **module_type**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-data/module_type" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`any` / :ansible-option-required:`required`
+
+ .. raw:: html
+
+ </div>
+
+ .. raw:: latex
+
+ \end{minipage}
+
+ - .. raw:: html
+
+ <div class="ansible-option-indent-desc"></div><div class="ansible-option-cell">
+
+ The module type of the module
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-indent"></div><div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-data/serial"></div>
+
+ .. raw:: latex
+
+ \hspace{0.02\textwidth}\begin{minipage}[t]{0.3\textwidth}
+
+ .. _ansible_collections.netbox.netbox.netbox_module_module__parameter-data/serial:
+
+ .. rst-class:: ansible-option-title
+
+ **serial**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-data/serial" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`string`
+
+ .. raw:: html
+
+ </div>
+
+ .. raw:: latex
+
+ \end{minipage}
+
+ - .. raw:: html
+
+ <div class="ansible-option-indent-desc"></div><div class="ansible-option-cell">
+
+ The weight of the device type
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-indent"></div><div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-data/status"></div>
+
+ .. raw:: latex
+
+ \hspace{0.02\textwidth}\begin{minipage}[t]{0.3\textwidth}
+
+ .. _ansible_collections.netbox.netbox.netbox_module_module__parameter-data/status:
+
+ .. rst-class:: ansible-option-title
+
+ **status**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-data/status" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`string`
+
+ .. raw:: html
+
+ </div>
+
+ .. raw:: latex
+
+ \end{minipage}
+
+ - .. raw:: html
+
+ <div class="ansible-option-indent-desc"></div><div class="ansible-option-cell">
+
+ The status of the module
+
+
+ .. rst-class:: ansible-option-line
+
+ :ansible-option-choices:`Choices:`
+
+ - :ansible-option-choices-entry:`"offline"`
+ - :ansible-option-choices-entry:`"active"`
+ - :ansible-option-choices-entry:`"planned"`
+ - :ansible-option-choices-entry:`"staged"`
+ - :ansible-option-choices-entry:`"side-to-rear"`
+ - :ansible-option-choices-entry:`"failed"`
+ - :ansible-option-choices-entry:`"decommissioning"`
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-indent"></div><div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-data/tags"></div>
+
+ .. raw:: latex
+
+ \hspace{0.02\textwidth}\begin{minipage}[t]{0.3\textwidth}
+
+ .. _ansible_collections.netbox.netbox.netbox_module_module__parameter-data/tags:
+
+ .. rst-class:: ansible-option-title
+
+ **tags**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-data/tags" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`list` / :ansible-option-elements:`elements=any`
+
+ .. raw:: html
+
+ </div>
+
+ .. raw:: latex
+
+ \end{minipage}
+
+ - .. raw:: html
+
+ <div class="ansible-option-indent-desc"></div><div class="ansible-option-cell">
+
+ Any tags that the module may need to be associated with
+
+
+ .. raw:: html
+
+ </div>
+
+
+ * - .. raw:: html
+
+ <div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-netbox_token"></div>
+
+ .. _ansible_collections.netbox.netbox.netbox_module_module__parameter-netbox_token:
+
+ .. rst-class:: ansible-option-title
+
+ **netbox_token**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-netbox_token" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`string` / :ansible-option-required:`required`
+
+ .. raw:: html
+
+ </div>
+
+ - .. raw:: html
+
+ <div class="ansible-option-cell">
+
+ The NetBox API token.
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-netbox_url"></div>
+
+ .. _ansible_collections.netbox.netbox.netbox_module_module__parameter-netbox_url:
+
+ .. rst-class:: ansible-option-title
+
+ **netbox_url**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-netbox_url" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`string` / :ansible-option-required:`required`
+
+ .. raw:: html
+
+ </div>
+
+ - .. raw:: html
+
+ <div class="ansible-option-cell">
+
+ The URL of the NetBox instance.
+
+ Must be accessible by the Ansible control host.
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-query_params"></div>
+
+ .. _ansible_collections.netbox.netbox.netbox_module_module__parameter-query_params:
+
+ .. rst-class:: ansible-option-title
+
+ **query_params**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-query_params" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`list` / :ansible-option-elements:`elements=string`
+
+ .. raw:: html
+
+ </div>
+
+ - .. raw:: html
+
+ <div class="ansible-option-cell">
+
+ This can be used to override the specified values in ALLOWED\_QUERY\_PARAMS that are defined
+
+ in plugins/module\_utils/netbox\_utils.py and provides control to users on what may make
+
+ an object unique in their environment.
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-state"></div>
+
+ .. _ansible_collections.netbox.netbox.netbox_module_module__parameter-state:
+
+ .. rst-class:: ansible-option-title
+
+ **state**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-state" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`string`
+
+ .. raw:: html
+
+ </div>
+
+ - .. raw:: html
+
+ <div class="ansible-option-cell">
+
+ The state of the object.
+
+
+ .. rst-class:: ansible-option-line
+
+ :ansible-option-choices:`Choices:`
+
+ - :ansible-option-choices-entry-default:`"present"` :ansible-option-choices-default-mark:`← (default)`
+ - :ansible-option-choices-entry:`"absent"`
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-validate_certs"></div>
+
+ .. _ansible_collections.netbox.netbox.netbox_module_module__parameter-validate_certs:
+
+ .. rst-class:: ansible-option-title
+
+ **validate_certs**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-validate_certs" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`any`
+
+ .. raw:: html
+
+ </div>
+
+ - .. raw:: html
+
+ <div class="ansible-option-cell">
+
+ If \ :literal:`no`\ , SSL certificates will not be validated.
+
+ This should only be used on personally controlled sites using a self-signed certificates.
+
+
+ .. rst-class:: ansible-option-line
+
+ :ansible-option-default-bold:`Default:` :ansible-option-default:`true`
+
+ .. raw:: html
+
+ </div>
+
+
+.. Attributes
+
+
+.. Notes
+
+Notes
+-----
+
+.. note::
+ - Tags should be defined as a YAML list
+ - This should be ran with connection \ :literal:`local`\ and hosts \ :literal:`localhost`\
+
+.. Seealso
+
+
+.. Examples
+
+Examples
+--------
+
+.. code-block:: yaml+jinja
+
+
+ - name: "Test NetBox modules"
+ connection: local
+ hosts: localhost
+ gather_facts: False
+
+ tasks:
+ - name: Create module type within NetBox with only required information
+ netbox.netbox.netbox_module:
+ netbox_url: http://netbox.local
+ netbox_token: thisIsMyToken
+ data:
+ device: C9300-DEMO
+ module_bay: Network Module
+ module_type: C9300-NM-8X
+ state: present
+
+ - name: Create module type within NetBox
+ netbox.netbox.netbox_module:
+ netbox_url: http://netbox.local
+ netbox_token: thisIsMyToken
+ data:
+ device:
+ name: C9300-DEMO
+ site: EUPARIS
+ module_bay:
+ name: Network Module
+ position: 1
+ module_type:
+ manufacturer: Cisco
+ model: C9300-NM-8X
+ state: present
+
+ - name: Delete module type within netbox
+ netbox.netbox.netbox_module:
+ netbox_url: http://netbox.local
+ netbox_token: thisIsMyToken
+ data:
+ device: C9300-DEMO
+ module_bay: Network Module
+ module_type: C9300-NM-8X
+ asset_tag: 00001
+ serial: XXXNNNNXXXX
+ state: absent
+
+
+
+
+.. Facts
+
+
+.. Return values
+
+Return Values
+-------------
+Common return values are documented :ref:`here <common_return_values>`, the following are the fields unique to this module:
+
+.. tabularcolumns:: \X{1}{3}\X{2}{3}
+
+.. list-table::
+ :width: 100%
+ :widths: auto
+ :header-rows: 1
+ :class: longtable ansible-option-table
+
+ * - Key
+ - Description
+
+ * - .. raw:: html
+
+ <div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="return-module"></div>
+
+ .. _ansible_collections.netbox.netbox.netbox_module_module__return-module:
+
+ .. rst-class:: ansible-option-title
+
+ **module**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#return-module" title="Permalink to this return value"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`dictionary`
+
+ .. raw:: html
+
+ </div>
+
+ - .. raw:: html
+
+ <div class="ansible-option-cell">
+
+ Serialized object as created or already existent within NetBox
+
+
+ .. rst-class:: ansible-option-line
+
+ :ansible-option-returned-bold:`Returned:` success (when \ :emphasis:`state=present`\ )
+
+
+ .. raw:: html
+
+ </div>
+
+
+ * - .. raw:: html
+
+ <div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="return-msg"></div>
+
+ .. _ansible_collections.netbox.netbox.netbox_module_module__return-msg:
+
+ .. rst-class:: ansible-option-title
+
+ **msg**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#return-msg" title="Permalink to this return value"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`string`
+
+ .. raw:: html
+
+ </div>
+
+ - .. raw:: html
+
+ <div class="ansible-option-cell">
+
+ Message indicating failure or info about what has been achieved
+
+
+ .. rst-class:: ansible-option-line
+
+ :ansible-option-returned-bold:`Returned:` always
+
+
+ .. raw:: html
+
+ </div>
+
+
+
+.. Status (Presently only deprecated)
+
+
+.. Authors
+
+Authors
+~~~~~~~
+
+- Erwan TONNERRE (@etonnerre)
+
+
+
+.. Extra links
+
+Collection links
+~~~~~~~~~~~~~~~~
+
+.. ansible-links::
+
+ - title: "Issue Tracker"
+ url: "https://github.com/netbox-community/ansible_modules/issues"
+ external: true
+ - title: "Repository (Sources)"
+ url: "https://github.com/netbox-community/ansible_modules"
+ external: true
+
+
+.. Parsing errors
+
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_module_type_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_module_type_module.rst
index c1b65065f..b139455b6 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_module_type_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_module_type_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_module_type module -- Create, update or delete module types
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_platform_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_platform_module.rst
index a7fd21759..b7280a3ef 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_platform_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_platform_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_platform module -- Create or delete platforms within NetBox
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_power_feed_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_power_feed_module.rst
index 25e68e30c..e75e1191c 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_power_feed_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_power_feed_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_power_feed module -- Create, update or delete power feeds w
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_power_outlet_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_power_outlet_module.rst
index cc2155a48..4069dde6f 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_power_outlet_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_power_outlet_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_power_outlet module -- Create, update or delete power outle
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_power_outlet_template_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_power_outlet_template_module.rst
index 3e17dded5..8455ed9d8 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_power_outlet_template_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_power_outlet_template_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_power_outlet_template module -- Create, update or delete po
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_power_panel_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_power_panel_module.rst
index 4ce4ead6e..34c656caf 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_power_panel_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_power_panel_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_power_panel module -- Create, update or delete power panels
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_power_port_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_power_port_module.rst
index 9172b6cd6..52529d411 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_power_port_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_power_port_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_power_port module -- Create, update or delete power ports w
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
@@ -286,6 +286,51 @@ Parameters
* - .. raw:: html
<div class="ansible-option-indent"></div><div class="ansible-option-cell">
+ <div class="ansibleOptionAnchor" id="parameter-data/label"></div>
+
+ .. raw:: latex
+
+ \hspace{0.02\textwidth}\begin{minipage}[t]{0.3\textwidth}
+
+ .. _ansible_collections.netbox.netbox.netbox_power_port_module__parameter-data/label:
+
+ .. rst-class:: ansible-option-title
+
+ **label**
+
+ .. raw:: html
+
+ <a class="ansibleOptionLink" href="#parameter-data/label" title="Permalink to this option"></a>
+
+ .. ansible-option-type-line::
+
+ :ansible-option-type:`string`
+
+ :ansible-option-versionadded:`added in netbox.netbox 3.18.0`
+
+
+ .. raw:: html
+
+ </div>
+
+ .. raw:: latex
+
+ \end{minipage}
+
+ - .. raw:: html
+
+ <div class="ansible-option-indent-desc"></div><div class="ansible-option-cell">
+
+ The label of the power port
+
+
+ .. raw:: html
+
+ </div>
+
+ * - .. raw:: html
+
+ <div class="ansible-option-indent"></div><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-data/maximum_draw"></div>
.. raw:: latex
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_power_port_template_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_power_port_template_module.rst
index 566ad28d6..cf841798f 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_power_port_template_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_power_port_template_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_power_port_template module -- Create, update or delete powe
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_prefix_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_prefix_module.rst
index b2dff30a0..41790ddba 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_prefix_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_prefix_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_prefix module -- Creates or removes prefixes from NetBox
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_provider_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_provider_module.rst
index 18baee358..ff113b098 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_provider_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_provider_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_provider module -- Create, update or delete providers withi
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_provider_network_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_provider_network_module.rst
index f1a2b19cb..6e8561392 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_provider_network_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_provider_network_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_provider_network module -- Create, update or delete provide
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_rack_group_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_rack_group_module.rst
index bcc012d38..32cb29754 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_rack_group_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_rack_group_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_rack_group module -- Create, update or delete racks groups
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_rack_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_rack_module.rst
index 2e1b00d40..2af844e18 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_rack_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_rack_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_rack module -- Create, update or delete racks within NetBox
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
@@ -1101,7 +1101,7 @@ Parameters
.. ansible-option-type-line::
- :ansible-option-type:`integer`
+ :ansible-option-type:`float`
.. raw:: html
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_rack_role_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_rack_role_module.rst
index ec8c5cefd..47113e874 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_rack_role_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_rack_role_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_rack_role module -- Create, update or delete racks roles wi
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_rear_port_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_rear_port_module.rst
index cee13bdfa..9af01eeff 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_rear_port_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_rear_port_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_rear_port module -- Create, update or delete rear ports wit
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_rear_port_template_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_rear_port_template_module.rst
index 0299ae69d..c7d50c12f 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_rear_port_template_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_rear_port_template_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_rear_port_template module -- Create, update or delete rear
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_region_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_region_module.rst
index 41f7498ea..1f1f5b5b7 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_region_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_region_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_region module -- Creates or removes regions from NetBox
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_rir_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_rir_module.rst
index 2f278b597..adfa932bc 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_rir_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_rir_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_rir module -- Create, update or delete RIRs within NetBox
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_route_target_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_route_target_module.rst
index 7c0ee6a90..be1d95ae4 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_route_target_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_route_target_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_route_target module -- Creates or removes route targets fro
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_service_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_service_module.rst
index 7c4ff7ba8..7ebcb52eb 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_service_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_service_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_service module -- Creates or removes service from NetBox
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_service_template_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_service_template_module.rst
index 13bc0ba98..a8eaa5549 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_service_template_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_service_template_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_service_template module -- Create, update or delete service
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_site_group_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_site_group_module.rst
index 90eb0f70c..95b91ae78 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_site_group_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_site_group_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_site_group module -- Create, update, or delete site groups
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_site_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_site_module.rst
index d625a06a2..4b55f9402 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_site_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_site_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_site module -- Creates or removes sites from NetBox
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_tag_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_tag_module.rst
index e49f5b968..40d60705c 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_tag_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_tag_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_tag module -- Creates or removes tags from NetBox
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_tenant_group_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_tenant_group_module.rst
index f91fd8ae1..3ed872aa4 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_tenant_group_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_tenant_group_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_tenant_group module -- Creates or removes tenant groups fro
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_tenant_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_tenant_module.rst
index b4f26f78f..8a606978d 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_tenant_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_tenant_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_tenant module -- Creates or removes tenants from NetBox
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_virtual_chassis_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_virtual_chassis_module.rst
index 17aa18299..ae5726200 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_virtual_chassis_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_virtual_chassis_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_virtual_chassis module -- Create, update or delete virtual
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_virtual_disk_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_virtual_disk_module.rst
index 3112d6013..c259b5764 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_virtual_disk_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_virtual_disk_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_virtual_disk module -- Creates or removes disks from virtua
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_virtual_machine_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_virtual_machine_module.rst
index 71a95fbca..8c591f537 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_virtual_machine_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_virtual_machine_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_virtual_machine module -- Create, update or delete virtual\
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_vlan_group_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_vlan_group_module.rst
index 3a3714480..cc2c938dc 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_vlan_group_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_vlan_group_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_vlan_group module -- Create, update or delete vlans groups
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_vlan_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_vlan_module.rst
index d92f05cc8..b96da4814 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_vlan_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_vlan_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_vlan module -- Create, update or delete vlans within NetBox
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_vm_interface_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_vm_interface_module.rst
index 50a607ad6..af0171388 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_vm_interface_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_vm_interface_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_vm_interface module -- Creates or removes interfaces from v
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_vrf_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_vrf_module.rst
index 4f9ac686c..8107990ea 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_vrf_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_vrf_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_vrf module -- Create, update or delete vrfs within NetBox
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_webhook_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_webhook_module.rst
index bac05070b..fa20b238e 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_webhook_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_webhook_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_webhook module -- Creates, updates or deletes webhook confi
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_wireless_lan_group_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_wireless_lan_group_module.rst
index 95e066f22..479fa8a36 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_wireless_lan_group_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_wireless_lan_group_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_wireless_lan_group module -- Creates or removes Wireless LA
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_wireless_lan_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_wireless_lan_module.rst
index 63adcd848..285a54ea6 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_wireless_lan_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_wireless_lan_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_wireless_lan module -- Creates or removes Wireless LANs fro
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/docs/plugins/netbox_wireless_link_module.rst b/ansible_collections/netbox/netbox/docs/plugins/netbox_wireless_link_module.rst
index 597ac26f5..adf0384ce 100644
--- a/ansible_collections/netbox/netbox/docs/plugins/netbox_wireless_link_module.rst
+++ b/ansible_collections/netbox/netbox/docs/plugins/netbox_wireless_link_module.rst
@@ -23,7 +23,7 @@ netbox.netbox.netbox_wireless_link module -- Creates or removes Wireless links f
.. Collection note
.. note::
- This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.17.0).
+ This module is part of the `netbox.netbox collection <https://galaxy.ansible.com/ui/repo/published/netbox/netbox/>`_ (version 3.18.0).
It is not included in ``ansible-core``.
To check whether it is installed, run :code:`ansible-galaxy collection list`.
diff --git a/ansible_collections/netbox/netbox/meta/runtime.yml b/ansible_collections/netbox/netbox/meta/runtime.yml
index 1c3faae8c..5c69ef1db 100644
--- a/ansible_collections/netbox/netbox/meta/runtime.yml
+++ b/ansible_collections/netbox/netbox/meta/runtime.yml
@@ -50,6 +50,8 @@ action_groups:
- netbox_l2vpn_termination
- netbox_location
- netbox_manufacturer
+ - netbox_module
+ - netbox_module_bay
- netbox_module_type
- netbox_platform
- netbox_power_feed
diff --git a/ansible_collections/netbox/netbox/plugins/inventory/nb_inventory.py b/ansible_collections/netbox/netbox/plugins/inventory/nb_inventory.py
index da9f5ed72..77c501939 100644
--- a/ansible_collections/netbox/netbox/plugins/inventory/nb_inventory.py
+++ b/ansible_collections/netbox/netbox/plugins/inventory/nb_inventory.py
@@ -13,6 +13,7 @@ DOCUMENTATION = """
- Nikhil Singh Baliyan (@nikkytub)
- Sander Steffann (@steffann)
- Douglas Heriot (@DouglasHeriot)
+ - Thore Knickrehm (@tkn2023)
short_description: NetBox inventory source
description:
- Get inventory hosts from NetBox
@@ -99,6 +100,12 @@ DOCUMENTATION = """
default: True
type: boolean
version_added: "0.2.1"
+ virtual_disks:
+ description:
+ - If True, it adds the virtual disks information in host vars.
+ default: False
+ type: boolean
+ version_added: "3.18.0"
interfaces:
description:
- If True, it adds the device or virtual machine interface information in host vars.
@@ -238,6 +245,10 @@ DOCUMENTATION = """
type: boolean
default: True
version_added: "3.6.0"
+ oob_ip_as_primary_ip:
+ description: Use out of band IP as `ansible host`
+ type: boolean
+ default: False
"""
EXAMPLES = """
@@ -588,7 +599,12 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
"services": self.extract_services,
}
)
-
+ if self.virtual_disks:
+ extractors.update(
+ {
+ "virtual_disks": self.extract_virtual_disks,
+ }
+ )
if self.interfaces:
extractors.update(
{
@@ -820,6 +836,13 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
except Exception:
return
+ def extract_oob_ip(self, host):
+ try:
+ address = host["oob_ip"]["address"]
+ return str(ip_interface(address).ip)
+ except Exception:
+ return
+
def extract_tags(self, host):
try:
tag_zero = host["tags"][0]
@@ -834,6 +857,15 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
except Exception:
return host["tags"]
+ def extract_virtual_disks(self, host):
+ try:
+ virtual_disks_lookup = self.vm_virtual_disks_lookup
+ virtual_disks = deepcopy(list(virtual_disks_lookup[host["id"]].values()))
+
+ return virtual_disks
+ except Exception:
+ return
+
def extract_interfaces(self, host):
try:
interfaces_lookup = (
@@ -867,7 +899,11 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
def extract_custom_fields(self, host):
try:
- return host["custom_fields"]
+ return {
+ key: value
+ for key, value in host["custom_fields"].items()
+ if value is not None
+ }
except Exception:
return
@@ -1295,6 +1331,30 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
service_id
] = service
+ def refresh_virtual_disks(self):
+ url_vm_virtual_disks = (
+ self.api_endpoint + "/api/virtualization/virtual-disks/?limit=0"
+ )
+
+ vm_virtual_disks = []
+
+ if self.fetch_all:
+ vm_virtual_disks = self.get_resource_list(url_vm_virtual_disks)
+ else:
+ vm_virtual_disks = self.get_resource_list_chunked(
+ api_url=url_vm_virtual_disks,
+ query_key="virtual_machine_id",
+ query_values=self.vms_lookup.keys(),
+ )
+
+ self.vm_virtual_disks_lookup = defaultdict(dict)
+
+ for virtual_disk in vm_virtual_disks:
+ virtual_disk_id = virtual_disk["id"]
+ vm_id = virtual_disk["virtual_machine"]["id"]
+
+ self.vm_virtual_disks_lookup[vm_id][virtual_disk_id] = virtual_disk
+
def refresh_interfaces(self):
url_device_interfaces = self.api_endpoint + "/api/dcim/interfaces/?limit=0"
url_vm_interfaces = (
@@ -1441,6 +1501,8 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
self.refresh_manufacturers_lookup,
self.refresh_clusters_lookup,
]
+ if self.virtual_disks:
+ lookups.append(self.refresh_virtual_disks)
if self.interfaces:
lookups.append(self.refresh_interfaces)
@@ -1863,6 +1925,12 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
if extracted_primary_ip6:
self.inventory.set_variable(hostname, "primary_ip6", extracted_primary_ip6)
+ extracted_oob_ip = self.extract_oob_ip(host=host)
+ if extracted_oob_ip:
+ self.inventory.set_variable(hostname, "oob_ip", extracted_oob_ip)
+ if self.oob_ip_as_primary_ip:
+ self.inventory.set_variable(hostname, "ansible_host", extracted_oob_ip)
+
for attribute, extractor in self.group_extractors.items():
extracted_value = extractor(host)
@@ -2040,6 +2108,7 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
self.flatten_local_context_data = self.get_option("flatten_local_context_data")
self.flatten_custom_fields = self.get_option("flatten_custom_fields")
self.plurals = self.get_option("plurals")
+ self.virtual_disks = self.get_option("virtual_disks")
self.interfaces = self.get_option("interfaces")
self.services = self.get_option("services")
self.site_data = self.get_option("site_data")
@@ -2053,6 +2122,7 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
self.cert = self.get_option("cert")
self.key = self.get_option("key")
self.ca_path = self.get_option("ca_path")
+ self.oob_ip_as_primary_ip = self.get_option("oob_ip_as_primary_ip")
self._set_authorization()
diff --git a/ansible_collections/netbox/netbox/plugins/lookup/nb_lookup.py b/ansible_collections/netbox/netbox/plugins/lookup/nb_lookup.py
index 01e4d56aa..b70cb22aa 100644
--- a/ansible_collections/netbox/netbox/plugins/lookup/nb_lookup.py
+++ b/ansible_collections/netbox/netbox/plugins/lookup/nb_lookup.py
@@ -181,6 +181,9 @@ def get_endpoint(netbox, term):
"console-server-ports": {"endpoint": netbox.dcim.console_server_ports},
"content-types": {"endpoint": netbox.extras.content_types},
"custom-fields": {"endpoint": netbox.extras.custom_fields},
+ "custom-field-choice-sets": {
+ "endpoint": netbox.extras.custom_field_choice_sets
+ },
"custom-links": {"endpoint": netbox.extras.custom_links},
"device-bay-templates": {"endpoint": netbox.dcim.device_bay_templates},
"device-bays": {"endpoint": netbox.dcim.device_bays},
@@ -247,6 +250,7 @@ def get_endpoint(netbox, term):
"topology-maps": {"endpoint": netbox.extras.topology_maps},
"users": {"endpoint": netbox.users.users},
"virtual-chassis": {"endpoint": netbox.dcim.virtual_chassis},
+ "virtual-disks": {"endpoint": netbox.virtualization.virtual_disks},
"virtual-machines": {"endpoint": netbox.virtualization.virtual_machines},
"virtualization-interfaces": {"endpoint": netbox.virtualization.interfaces},
"vlan-groups": {"endpoint": netbox.ipam.vlan_groups},
diff --git a/ansible_collections/netbox/netbox/plugins/module_utils/netbox_dcim.py b/ansible_collections/netbox/netbox/plugins/module_utils/netbox_dcim.py
index 2482c90cf..b9d5edc12 100644
--- a/ansible_collections/netbox/netbox/plugins/module_utils/netbox_dcim.py
+++ b/ansible_collections/netbox/netbox/plugins/module_utils/netbox_dcim.py
@@ -32,6 +32,8 @@ NB_INVENTORY_ITEMS = "inventory_items"
NB_INVENTORY_ITEM_ROLES = "inventory_item_roles"
NB_LOCATIONS = "locations"
NB_MANUFACTURERS = "manufacturers"
+NB_MODULES = "modules"
+NB_MODULE_BAYS = "module_bays"
NB_MODULE_TYPES = "module_types"
NB_PLATFORMS = "platforms"
NB_POWER_FEEDS = "power_feeds"
@@ -91,6 +93,9 @@ class NetboxDcimModule(NetboxModule):
- inventory_item_roles
- locations
- manufacturers
+ - modules
+ - module_bays
+ - module_types
- platforms
- power_feeds
- power_outlets
@@ -150,6 +155,38 @@ class NetboxDcimModule(NetboxModule):
data.get("termination_b_type"),
termination_b_name,
)
+ elif endpoint_name == "module":
+ if isinstance(
+ self.module.params["data"]["device"], dict
+ ) and self.module.params["data"]["device"].get("name"):
+ device_name = self.module.params["data"]["device"]["name"]
+ elif isinstance(
+ self.module.params["data"]["device"], dict
+ ) and self.module.params["data"]["device"].get("slug"):
+ device_name = self.module.params["data"]["device"]["slug"]
+ else:
+ device_name = self.module.params["data"]["device"]
+ if isinstance(
+ self.module.params["data"]["module_bay"], dict
+ ) and self.module.params["data"]["module_bay"].get("name"):
+ module_bay = self.module.params["data"]["module_bay"]["name"]
+ elif isinstance(
+ self.module.params["data"]["module_bay"], dict
+ ) and self.module.params["data"]["module_bay"].get("slug"):
+ module_bay = self.module.params["data"]["module_bay"]["slug"]
+ else:
+ module_bay = self.module.params["data"]["module_bay"]
+ if isinstance(
+ self.module.params["data"]["module_type"], dict
+ ) and self.module.params["data"]["module_bay"].get("model"):
+ module_type = self.module.params["data"]["module_type"]["model"]
+ elif isinstance(
+ self.module.params["data"]["module_type"], dict
+ ) and self.module.params["data"]["module_bay"].get("part_number"):
+ module_type = self.module.params["data"]["module_type"]["part_number"]
+ else:
+ module_type = self.module.params["data"]["module_type"]
+ name = "%s: %s (%s)" % (device_name, module_bay, module_type)
if self.endpoint in SLUG_REQUIRED:
if not data.get("slug"):
diff --git a/ansible_collections/netbox/netbox/plugins/module_utils/netbox_extras.py b/ansible_collections/netbox/netbox/plugins/module_utils/netbox_extras.py
index 36f4bf864..64eb9c8b9 100644
--- a/ansible_collections/netbox/netbox/plugins/module_utils/netbox_extras.py
+++ b/ansible_collections/netbox/netbox/plugins/module_utils/netbox_extras.py
@@ -14,6 +14,7 @@ from ansible_collections.netbox.netbox.plugins.module_utils.netbox_utils import
NB_CONFIG_CONTEXTS = "config_contexts"
NB_TAGS = "tags"
NB_CUSTOM_FIELDS = "custom_fields"
+NB_CUSTOM_FIELD_CHOICE_SETS = "custom_field_choice_sets"
NB_CUSTOM_LINKS = "custom_links"
NB_EXPORT_TEMPLATES = "export_templates"
NB_JOURNAL_ENTRIES = "journal_entries"
diff --git a/ansible_collections/netbox/netbox/plugins/module_utils/netbox_utils.py b/ansible_collections/netbox/netbox/plugins/module_utils/netbox_utils.py
index 04c327ff8..8e9215ef8 100644
--- a/ansible_collections/netbox/netbox/plugins/module_utils/netbox_utils.py
+++ b/ansible_collections/netbox/netbox/plugins/module_utils/netbox_utils.py
@@ -58,6 +58,8 @@ API_APPS_ENDPOINTS = dict(
"inventory_item_roles": {},
"locations": {},
"manufacturers": {},
+ "modules": {},
+ "module_bays": {},
"module_types": {},
"platforms": {},
"power_feeds": {},
@@ -82,6 +84,7 @@ API_APPS_ENDPOINTS = dict(
"config_templates": {},
"tags": {},
"custom_fields": {},
+ "custom_field_choice_sets": {},
"custom_links": {},
"export_templates": {},
"journal_entries": {},
@@ -145,6 +148,7 @@ QUERY_TYPES = dict(
contact_group="name",
contact_role="name",
custom_field="name",
+ choice_set="name",
custom_link="name",
device="name",
device_role="slug",
@@ -161,6 +165,8 @@ QUERY_TYPES = dict(
l2vpn_termination="id",
location="slug",
manufacturer="slug",
+ modules="id",
+ module_bays="name",
module_type="model",
nat_inside="address",
nat_outside="address",
@@ -226,6 +232,7 @@ CONVERT_TO_ID = {
"config_context": "config_contexts",
"config_template": "config_templates",
"contact_groups": "contact_groups",
+ "choice_set": "custom_field_choice_sets",
"dcim.consoleport": "console_ports",
"dcim.consoleserverport": "console_server_ports",
"dcim.frontport": "front_ports",
@@ -254,6 +261,8 @@ CONVERT_TO_ID = {
"lag": "interfaces",
"manufacturer": "manufacturers",
"master": "devices",
+ "module": "modules",
+ "module_bay": "module_bays",
"module_type": "module_types",
"nat_inside": "ip_addresses",
"nat_outside": "ip_addresses",
@@ -338,6 +347,7 @@ ENDPOINT_NAME_MAPPING = {
"contact_groups": "contact_group",
"contact_roles": "contact_role",
"custom_fields": "custom_field",
+ "custom_field_choice_sets": "choice_set",
"custom_links": "custom_link",
"device_bays": "device_bay",
"device_bay_templates": "device_bay_template",
@@ -359,6 +369,8 @@ ENDPOINT_NAME_MAPPING = {
"l2vpn_terminations": "l2vpn_termination",
"locations": "location",
"manufacturers": "manufacturer",
+ "modules": "module",
+ "module_bays": "module_bay",
"module_types": "module_type",
"platforms": "platform",
"power_feeds": "power_feed",
@@ -438,6 +450,8 @@ ALLOWED_QUERY_PARAMS = {
"contact_group": set(["name"]),
"contact_role": set(["name"]),
"custom_field": set(["name"]),
+ "custom_field_choice_set": set(["name"]),
+ "choice_set": set(["name"]),
"custom_link": set(["name"]),
"dcim.consoleport": set(["name", "device"]),
"dcim.consoleserverport": set(["name", "device"]),
@@ -477,6 +491,8 @@ ALLOWED_QUERY_PARAMS = {
),
"lag": set(["name"]),
"location": set(["name", "slug", "site"]),
+ "module": set(["device", "module_bay", "module_type"]),
+ "module_bay": set(["name"]),
"module_type": set(["model"]),
"manufacturer": set(["slug"]),
"master": set(["name"]),
@@ -1072,6 +1088,13 @@ class NetboxModule(object):
query_key: module_data.get("assigned_object_id"),
}
)
+ elif parent == "module":
+ query_dict.update(
+ {
+ "module_bay_id": query_dict.pop("module_bay"),
+ "module_type_id": query_dict.pop("module_type"),
+ }
+ )
elif "_template" in parent:
if query_dict.get("device_type"):
query_dict["devicetype_id"] = query_dict.pop("device_type")
diff --git a/ansible_collections/netbox/netbox/plugins/modules/netbox_custom_field.py b/ansible_collections/netbox/netbox/plugins/modules/netbox_custom_field.py
index eadfad6d5..ed9c8ed0a 100644
--- a/ansible_collections/netbox/netbox/plugins/modules/netbox_custom_field.py
+++ b/ansible_collections/netbox/netbox/plugins/modules/netbox_custom_field.py
@@ -132,12 +132,11 @@ options:
- The regular expression to enforce on text fields
required: false
type: str
- choices:
+ choice_set:
description:
- - List of available choices (for selection fields)
+ - The name of the choice set to use (for selection fields)
required: false
- type: list
- elements: str
+ type: str
required: true
"""
@@ -157,6 +156,18 @@ EXAMPLES = r"""
name: A Custom Field
type: text
+ - name: Create a custom field of type selection
+ netbox.netbox.netbox_custom_field:
+ netbox_url: http://netbox.local
+ netbox_token: thisIsMyToken
+ data:
+ name: "Custom_Field"
+ content_types:
+ - dcim.device
+ - virtualization.virtualmachine
+ type: select
+ choice_set: A Choice Set name
+
- name: Update the custom field to make it required
netbox.netbox.netbox_custom_field:
netbox_url: http://netbox.local
@@ -258,7 +269,10 @@ def main():
validation_minimum=dict(required=False, type="int"),
validation_maximum=dict(required=False, type="int"),
validation_regex=dict(required=False, type="str"),
- choices=dict(required=False, type="list", elements="str"),
+ choice_set=dict(
+ required=False,
+ type="str",
+ ),
),
)
)
diff --git a/ansible_collections/netbox/netbox/plugins/modules/netbox_custom_field_choice_set.py b/ansible_collections/netbox/netbox/plugins/modules/netbox_custom_field_choice_set.py
new file mode 100644
index 000000000..89badcbd3
--- /dev/null
+++ b/ansible_collections/netbox/netbox/plugins/modules/netbox_custom_field_choice_set.py
@@ -0,0 +1,164 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+# Copyright: (c) 2024, Philipp Rintz (@p-rintz) <git@rintz.net>
+# 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 = r"""
+---
+module: netbox_custom_field_choice_set
+short_description: Creates, updates or deletes custom field choice sets within Netbox
+description:
+ - Creates, updates or removes custom fields choice sets from Netbox
+notes:
+ - This should be run with connection C(local) and hosts C(localhost)
+author:
+ - Philipp Rintz (@p-rintz)
+requirements:
+ - pynetbox
+version_added: "3.18.0"
+extends_documentation_fragment:
+ - netbox.netbox.common
+options:
+ data:
+ type: dict
+ description:
+ - Defines the choice set
+ suboptions:
+ name:
+ description:
+ - Name of the choice set
+ required: true
+ type: str
+ description:
+ description:
+ - Description of the choice set
+ required: false
+ type: str
+ extra_choices:
+ description:
+ - List of available choices in the choice set
+ required: false
+ default: []
+ type: list
+ elements: list
+ base_choices:
+ description:
+ - Selection of base choice to use in the choice set
+ required: false
+ type: str
+ choices:
+ - IATA
+ - ISO_3166
+ - UN_LOCODE
+ order_alphabetically:
+ description:
+ - Order the choices alphabetically
+ required: false
+ type: bool
+ required: true
+"""
+
+EXAMPLES = r"""
+- name: "Test Netbox custom_field_choice_set module"
+ connection: local
+ hosts: localhost
+ tasks:
+ - name: Create a choice set with choices
+ netbox.netbox.netbox_custom_field_choice_set:
+ netbox_url: http://netbox.local
+ netbox_token: thisIsMyToken
+ data:
+ name: "ChoiceSetName"
+ description: "Choice Set Description"
+ extra_choices:
+ - ['choice1', 'label1']
+ - ['choice2', 'label2']
+
+ - name: Create a choice set with a base choice
+ netbox.netbox.netbox_custom_field_choice_set:
+ netbox_url: http://netbox.local
+ netbox_token: thisIsMyToken
+ data:
+ name: "ChoiceSetName"
+ description: "Choice Set Description"
+ order_alphabetically: true
+ base_choices: "IATA"
+"""
+
+RETURN = r"""
+custom_field_choice_set:
+ description: Serialized object as created/existent/updated/deleted within NetBox
+ returned: always
+ type: dict
+msg:
+ description: Message indicating failure or info about what has been achieved
+ returned: always
+ type: str
+"""
+
+from ansible_collections.netbox.netbox.plugins.module_utils.netbox_utils import (
+ NetboxAnsibleModule,
+ NETBOX_ARG_SPEC,
+)
+from ansible_collections.netbox.netbox.plugins.module_utils.netbox_extras import (
+ NetboxExtrasModule,
+ NB_CUSTOM_FIELD_CHOICE_SETS,
+)
+from copy import deepcopy
+
+
+def main():
+ """
+ Main entry point for module execution
+ """
+ argument_spec = deepcopy(NETBOX_ARG_SPEC)
+ argument_spec.update(
+ dict(
+ data=dict(
+ type="dict",
+ required=True,
+ options=dict(
+ name=dict(required=True, type="str"),
+ description=dict(required=False, type="str"),
+ base_choices=dict(
+ required=False,
+ type="str",
+ choices=[
+ "IATA",
+ "ISO_3166",
+ "UN_LOCODE",
+ ],
+ ),
+ extra_choices=dict(
+ required=False,
+ default=[],
+ type="list",
+ elements="list",
+ ),
+ order_alphabetically=dict(required=False, type="bool"),
+ ),
+ )
+ )
+ )
+
+ required_if = [
+ ("state", "present", ["name"]),
+ ("state", "absent", ["name"]),
+ ]
+
+ module = NetboxAnsibleModule(
+ argument_spec=argument_spec, supports_check_mode=True, required_if=required_if
+ )
+
+ netbox_custom_field_choice_set = NetboxExtrasModule(
+ module, NB_CUSTOM_FIELD_CHOICE_SETS
+ )
+ netbox_custom_field_choice_set.run()
+
+
+if __name__ == "__main__": # pragma: no cover
+ main()
diff --git a/ansible_collections/netbox/netbox/plugins/modules/netbox_device.py b/ansible_collections/netbox/netbox/plugins/modules/netbox_device.py
index a76cfe53f..30c8d003c 100644
--- a/ansible_collections/netbox/netbox/plugins/modules/netbox_device.py
+++ b/ansible_collections/netbox/netbox/plugins/modules/netbox_device.py
@@ -85,7 +85,7 @@ options:
description:
- The position of the device in the rack defined above
required: false
- type: int
+ type: float
face:
description:
- Required if I(rack) is defined
@@ -247,7 +247,7 @@ EXAMPLES = r"""
data:
name: Test Device
rack: Test Rack
- position: 10
+ position: 10.5
face: Front
state: present
"""
@@ -296,7 +296,7 @@ def main():
site=dict(required=False, type="raw"),
location=dict(required=False, type="raw"),
rack=dict(required=False, type="raw"),
- position=dict(required=False, type="int"),
+ position=dict(required=False, type="float"),
face=dict(
required=False,
type="str",
diff --git a/ansible_collections/netbox/netbox/plugins/modules/netbox_device_type.py b/ansible_collections/netbox/netbox/plugins/modules/netbox_device_type.py
index be67ec7c9..118fbfe77 100644
--- a/ansible_collections/netbox/netbox/plugins/modules/netbox_device_type.py
+++ b/ansible_collections/netbox/netbox/plugins/modules/netbox_device_type.py
@@ -54,7 +54,7 @@ options:
description:
- The height of the device type in rack units
required: false
- type: int
+ type: float
weight:
description:
- The weight of the device type
@@ -159,7 +159,7 @@ EXAMPLES = r"""
model: ws-test-3750
manufacturer: Test Manufacturer
part_number: ws-3750g-v2
- u_height: 1
+ u_height: 1.5
is_full_depth: False
subdevice_role: parent
state: present
@@ -210,7 +210,7 @@ def main():
model=dict(required=True, type="raw"),
slug=dict(required=False, type="str"),
part_number=dict(required=False, type="str"),
- u_height=dict(required=False, type="int"),
+ u_height=dict(required=False, type="float"),
weight=dict(required=False, type="float"),
weight_unit=dict(
required=False,
diff --git a/ansible_collections/netbox/netbox/plugins/modules/netbox_export_template.py b/ansible_collections/netbox/netbox/plugins/modules/netbox_export_template.py
index ef9ba5f47..bd3056db4 100644
--- a/ansible_collections/netbox/netbox/plugins/modules/netbox_export_template.py
+++ b/ansible_collections/netbox/netbox/plugins/modules/netbox_export_template.py
@@ -75,29 +75,37 @@ options:
"""
EXAMPLES = r"""
-- name: "Test NetBox custom_link module"
+- name: "Test NetBox export_templates module"
connection: local
hosts: localhost
tasks:
- - name: Create a custom link on device
+ - name: "Ensure export template for /etc/hosts entries exists"
netbox.netbox.netbox_export_template:
netbox_url: http://netbox.local
netbox_token: thisIsMyToken
data:
- content_type: "dcim.device"
- name: Custom Link
- link_text: "Open Web Management"
- link_url: !unsafe https://{{ obj.name }}.domain.local
+ content_types: ["dcim.device", "virtualization.virtualmachine"]
+ name: /etc/hosts
+ description: "Generate entries for /etc/hosts"
+ as_attachment: true
+ template_code: !unsafe |
+ {% for vm in queryset -%}
+ {%- if vm.primary_ip4 and vm.primary_ip6 %}
+ {{ vm.primary_ip4.address.ip }} {{ vm.primary_ip6.address.ip }} {{ vm }}
+ {%- elif vm.primary_ip4 %}
+ {{ vm.primary_ip4.address.ip }} {{ vm }}
+ {%- elif vm.primary_ip6 %}
+ {{ vm.primary_ip6.address.ip }} {{ vm }}
+ {%- endif -%}
+ {%- endfor %}
- - name: Delete the custom link
+ - name: Delete the export template
netbox.netbox.netbox_export_template:
netbox_url: http://netbox.local
netbox_token: thisIsMyToken
data:
- content_type: "dcim.device"
- name: Custom Link
- link_text: "Open Web Management"
- link_url: !unsafe https://{{ obj.name }}.domain.local
+ content_type: "dcim.device"
+ name: /etc/hosts
state: absent
"""
diff --git a/ansible_collections/netbox/netbox/plugins/modules/netbox_module.py b/ansible_collections/netbox/netbox/plugins/modules/netbox_module.py
new file mode 100644
index 000000000..3fb75a031
--- /dev/null
+++ b/ansible_collections/netbox/netbox/plugins/modules/netbox_module.py
@@ -0,0 +1,213 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+# Copyright: (c) 2022, Erwan TONNERRE (@etonnerre) <erwan.tonnerre@thalesgroup.com>
+# 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 = r"""
+---
+module: netbox_module
+short_description: Create, update or delete module within NetBox
+description:
+ - Creates, updates or removes module from NetBox
+notes:
+ - Tags should be defined as a YAML list
+ - This should be ran with connection C(local) and hosts C(localhost)
+author:
+ - Erwan TONNERRE (@etonnerre)
+requirements:
+ - pynetbox
+version_added: '3.18.0'
+extends_documentation_fragment:
+ - netbox.netbox.common
+options:
+ data:
+ description:
+ - Defines the device type configuration
+ suboptions:
+ device:
+ description:
+ - The device of the module
+ required: True
+ type: raw
+ module_bay:
+ description:
+ - The module bay of the module
+ required: true
+ type: raw
+ module_type:
+ description:
+ - The module type of the module
+ required: true
+ type: raw
+ status:
+ description:
+ - The status of the module
+ choices:
+ - offline
+ - active
+ - planned
+ - staged
+ - side-to-rear
+ - failed
+ - decommissioning
+ required: false
+ type: str
+ serial:
+ description:
+ - The weight of the device type
+ required: false
+ type: str
+ description:
+ description:
+ - The description of the module
+ required: false
+ type: str
+ asset_tag:
+ description:
+ - The asset tag of the modyle
+ required: false
+ type: str
+ comments:
+ description:
+ - Comments that may include additional information in regards to the module
+ required: false
+ type: str
+ tags:
+ description:
+ - Any tags that the module may need to be associated with
+ required: false
+ type: list
+ elements: raw
+ custom_fields:
+ description:
+ - must exist in NetBox
+ required: false
+ type: dict
+ required: true
+ type: dict
+"""
+
+EXAMPLES = r"""
+- name: "Test NetBox modules"
+ connection: local
+ hosts: localhost
+ gather_facts: False
+
+ tasks:
+ - name: Create module type within NetBox with only required information
+ netbox.netbox.netbox_module:
+ netbox_url: http://netbox.local
+ netbox_token: thisIsMyToken
+ data:
+ device: C9300-DEMO
+ module_bay: Network Module
+ module_type: C9300-NM-8X
+ state: present
+
+ - name: Create module type within NetBox
+ netbox.netbox.netbox_module:
+ netbox_url: http://netbox.local
+ netbox_token: thisIsMyToken
+ data:
+ device:
+ name: C9300-DEMO
+ site: EUPARIS
+ module_bay:
+ name: Network Module
+ position: 1
+ module_type:
+ manufacturer: Cisco
+ model: C9300-NM-8X
+ state: present
+
+ - name: Delete module type within netbox
+ netbox.netbox.netbox_module:
+ netbox_url: http://netbox.local
+ netbox_token: thisIsMyToken
+ data:
+ device: C9300-DEMO
+ module_bay: Network Module
+ module_type: C9300-NM-8X
+ asset_tag: 00001
+ serial: XXXNNNNXXXX
+ state: absent
+"""
+
+RETURN = r"""
+module:
+ description: Serialized object as created or already existent within NetBox
+ returned: success (when I(state=present))
+ type: dict
+msg:
+ description: Message indicating failure or info about what has been achieved
+ returned: always
+ type: str
+"""
+
+from ansible_collections.netbox.netbox.plugins.module_utils.netbox_utils import (
+ NetboxAnsibleModule,
+ NETBOX_ARG_SPEC,
+)
+from ansible_collections.netbox.netbox.plugins.module_utils.netbox_dcim import (
+ NetboxDcimModule,
+ NB_MODULES,
+)
+from copy import deepcopy
+
+
+def main():
+ """
+ Main entry point for module execution
+ """
+ argument_spec = deepcopy(NETBOX_ARG_SPEC)
+ argument_spec.update(
+ dict(
+ data=dict(
+ type="dict",
+ required=True,
+ options=dict(
+ device=dict(required=True, type="raw"),
+ module_bay=dict(required=True, type="raw"),
+ module_type=dict(required=True, type="raw"),
+ status=dict(
+ required=False,
+ type="str",
+ choices=[
+ "offline",
+ "active",
+ "planned",
+ "staged",
+ "side-to-rear",
+ "failed",
+ "decommissioning",
+ ],
+ ),
+ serial=dict(required=False, type="str"),
+ description=dict(required=False, type="str"),
+ asset_tag=dict(required=False, type="str"),
+ comments=dict(required=False, type="str"),
+ tags=dict(required=False, type="list", elements="raw"),
+ custom_fields=dict(required=False, type="dict"),
+ ),
+ ),
+ )
+ )
+ required_if = [
+ ("state", "present", ["device", "module_bay", "module_type", "status"]),
+ ("state", "absent", ["device", "module_bay", "module_type"]),
+ ]
+
+ module = NetboxAnsibleModule(
+ argument_spec=argument_spec, supports_check_mode=True, required_if=required_if
+ )
+
+ netbox_device_type = NetboxDcimModule(module, NB_MODULES)
+ netbox_device_type.run()
+
+
+if __name__ == "__main__": # pragma: no cover
+ main()
diff --git a/ansible_collections/netbox/netbox/plugins/modules/netbox_module_bay.py b/ansible_collections/netbox/netbox/plugins/modules/netbox_module_bay.py
new file mode 100644
index 000000000..df8021a7f
--- /dev/null
+++ b/ansible_collections/netbox/netbox/plugins/modules/netbox_module_bay.py
@@ -0,0 +1,156 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+# Copyright: (c) 2023, Erwan TONNERRE (@etonnerre) <erwan.tonnerre@thalesgroup.com>
+# 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 = r"""
+---
+module: netbox_module_bay
+short_description: Create, update or delete module bay within NetBox
+description:
+ - Creates, updates or removes module bay from NetBox
+notes:
+ - Tags should be defined as a YAML list
+ - This should be ran with connection C(local) and hosts C(localhost)
+author:
+ - Erwan TONNERRE (@etonnerre)
+requirements:
+ - pynetbox
+version_added: '3.18.0'
+extends_documentation_fragment:
+ - netbox.netbox.common
+options:
+ data:
+ description:
+ - Defines the module bay configuration
+ suboptions:
+ device:
+ description:
+ - The device of the module bay
+ required: true
+ type: raw
+ name:
+ description:
+ - The model of the module bay
+ required: true
+ type: raw
+ label:
+ description:
+ - The label of the module bay
+ required: false
+ type: str
+ position:
+ description:
+ - The position of the module bay
+ required: true
+ type: str
+ description:
+ description:
+ - The description of the module bay
+ required: false
+ type: str
+ tags:
+ description:
+ - Any tags that the module bay may need to be associated with
+ required: false
+ type: list
+ elements: raw
+ custom_fields:
+ description:
+ - must exist in NetBox
+ required: false
+ type: dict
+ required: true
+ type: dict
+"""
+
+EXAMPLES = r"""
+- name: "Test NetBox modules"
+ connection: local
+ hosts: localhost
+ gather_facts: False
+
+ tasks:
+ - name: Create module bay within NetBox with only required information
+ netbox.netbox.netbox_module_bay:
+ netbox_url: http://netbox.local
+ netbox_token: thisIsMyToken
+ data:
+ device: C9300-DEMO
+ name: C9300-DEMO-SLOT-0
+ position: 0
+ state: present
+
+ - name: Delete module bay within netbox
+ netbox.netbox.netbox_module_bay:
+ netbox_url: http://netbox.local
+ netbox_token: thisIsMyToken
+ data:
+ name: C9300-DEMO-SLOT-0
+ state: absent
+"""
+
+RETURN = r"""
+module_bay:
+ description: Serialized object as created or already existent within NetBox
+ returned: success (when I(state=present))
+ type: dict
+msg:
+ description: Message indicating failure or info about what has been achieved
+ returned: always
+ type: str
+"""
+
+from ansible_collections.netbox.netbox.plugins.module_utils.netbox_utils import (
+ NetboxAnsibleModule,
+ NETBOX_ARG_SPEC,
+)
+from ansible_collections.netbox.netbox.plugins.module_utils.netbox_dcim import (
+ NetboxDcimModule,
+ NB_MODULE_BAYS,
+)
+from copy import deepcopy
+
+
+def main():
+ """
+ Main entry point for module execution
+ """
+ argument_spec = deepcopy(NETBOX_ARG_SPEC)
+ argument_spec.update(
+ dict(
+ data=dict(
+ type="dict",
+ required=True,
+ options=dict(
+ device=dict(required=True, type="raw"),
+ name=dict(required=True, type="raw"),
+ label=dict(required=False, type="str"),
+ position=dict(required=True, type="str"),
+ description=dict(required=False, type="str"),
+ tags=dict(required=False, type="list", elements="raw"),
+ custom_fields=dict(required=False, type="dict"),
+ ),
+ ),
+ )
+ )
+
+ required_if = [
+ ("state", "present", ["device", "name", "position"]),
+ ("state", "absent", ["name"]),
+ ]
+
+ module = NetboxAnsibleModule(
+ argument_spec=argument_spec, supports_check_mode=True, required_if=required_if
+ )
+
+ netbox_module_bay = NetboxDcimModule(module, NB_MODULE_BAYS)
+ netbox_module_bay.run()
+
+
+if __name__ == "__main__": # pragma: no cover
+ main()
diff --git a/ansible_collections/netbox/netbox/plugins/modules/netbox_power_port.py b/ansible_collections/netbox/netbox/plugins/modules/netbox_power_port.py
index 7929c4728..579242a67 100644
--- a/ansible_collections/netbox/netbox/plugins/modules/netbox_power_port.py
+++ b/ansible_collections/netbox/netbox/plugins/modules/netbox_power_port.py
@@ -41,6 +41,12 @@ options:
- The name of the power port
required: true
type: str
+ label:
+ description:
+ - The label of the power port
+ required: false
+ type: str
+ version_added: "3.18.0"
type:
description:
- The type of the power port
@@ -244,6 +250,7 @@ def main():
options=dict(
device=dict(required=True, type="raw"),
name=dict(required=True, type="str"),
+ label=dict(required=False, type="str"),
type=dict(
required=False,
choices=[
diff --git a/ansible_collections/netbox/netbox/plugins/modules/netbox_rack.py b/ansible_collections/netbox/netbox/plugins/modules/netbox_rack.py
index 2f0901a49..843568955 100644
--- a/ansible_collections/netbox/netbox/plugins/modules/netbox_rack.py
+++ b/ansible_collections/netbox/netbox/plugins/modules/netbox_rack.py
@@ -106,7 +106,7 @@ options:
description:
- The height of the rack in rack units
required: false
- type: int
+ type: float
desc_units:
description:
- Rack units will be numbered top-to-bottom
@@ -298,7 +298,7 @@ def main():
23,
],
),
- u_height=dict(required=False, type="int"),
+ u_height=dict(required=False, type="float"),
desc_units=dict(required=False, type="bool"),
outer_width=dict(required=False, type="int"),
outer_depth=dict(required=False, type="int"),
diff --git a/ansible_collections/netbox/netbox/poetry.lock b/ansible_collections/netbox/netbox/poetry.lock
index 935931202..e1a9ff24f 100644
--- a/ansible_collections/netbox/netbox/poetry.lock
+++ b/ansible_collections/netbox/netbox/poetry.lock
@@ -1,4 +1,4 @@
-# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand.
+# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand.
[[package]]
name = "aiofiles"
@@ -13,87 +13,87 @@ files = [
[[package]]
name = "aiohttp"
-version = "3.9.2"
+version = "3.9.4"
description = "Async http client/server framework (asyncio)"
optional = false
python-versions = ">=3.8"
files = [
- {file = "aiohttp-3.9.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:772fbe371788e61c58d6d3d904268e48a594ba866804d08c995ad71b144f94cb"},
- {file = "aiohttp-3.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:edd4f1af2253f227ae311ab3d403d0c506c9b4410c7fc8d9573dec6d9740369f"},
- {file = "aiohttp-3.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cfee9287778399fdef6f8a11c9e425e1cb13cc9920fd3a3df8f122500978292b"},
- {file = "aiohttp-3.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cc158466f6a980a6095ee55174d1de5730ad7dec251be655d9a6a9dd7ea1ff9"},
- {file = "aiohttp-3.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:54ec82f45d57c9a65a1ead3953b51c704f9587440e6682f689da97f3e8defa35"},
- {file = "aiohttp-3.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abeb813a18eb387f0d835ef51f88568540ad0325807a77a6e501fed4610f864e"},
- {file = "aiohttp-3.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc91d07280d7d169f3a0f9179d8babd0ee05c79d4d891447629ff0d7d8089ec2"},
- {file = "aiohttp-3.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b65e861f4bebfb660f7f0f40fa3eb9f2ab9af10647d05dac824390e7af8f75b7"},
- {file = "aiohttp-3.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:04fd8ffd2be73d42bcf55fd78cde7958eeee6d4d8f73c3846b7cba491ecdb570"},
- {file = "aiohttp-3.9.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3d8d962b439a859b3ded9a1e111a4615357b01620a546bc601f25b0211f2da81"},
- {file = "aiohttp-3.9.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:8ceb658afd12b27552597cf9a65d9807d58aef45adbb58616cdd5ad4c258c39e"},
- {file = "aiohttp-3.9.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:0e4ee4df741670560b1bc393672035418bf9063718fee05e1796bf867e995fad"},
- {file = "aiohttp-3.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2dec87a556f300d3211decf018bfd263424f0690fcca00de94a837949fbcea02"},
- {file = "aiohttp-3.9.2-cp310-cp310-win32.whl", hash = "sha256:3e1a800f988ce7c4917f34096f81585a73dbf65b5c39618b37926b1238cf9bc4"},
- {file = "aiohttp-3.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:ea510718a41b95c236c992b89fdfc3d04cc7ca60281f93aaada497c2b4e05c46"},
- {file = "aiohttp-3.9.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6aaa6f99256dd1b5756a50891a20f0d252bd7bdb0854c5d440edab4495c9f973"},
- {file = "aiohttp-3.9.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a27d8c70ad87bcfce2e97488652075a9bdd5b70093f50b10ae051dfe5e6baf37"},
- {file = "aiohttp-3.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:54287bcb74d21715ac8382e9de146d9442b5f133d9babb7e5d9e453faadd005e"},
- {file = "aiohttp-3.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bb3d05569aa83011fcb346b5266e00b04180105fcacc63743fc2e4a1862a891"},
- {file = "aiohttp-3.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c8534e7d69bb8e8d134fe2be9890d1b863518582f30c9874ed7ed12e48abe3c4"},
- {file = "aiohttp-3.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4bd9d5b989d57b41e4ff56ab250c5ddf259f32db17159cce630fd543376bd96b"},
- {file = "aiohttp-3.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa6904088e6642609981f919ba775838ebf7df7fe64998b1a954fb411ffb4663"},
- {file = "aiohttp-3.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bda42eb410be91b349fb4ee3a23a30ee301c391e503996a638d05659d76ea4c2"},
- {file = "aiohttp-3.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:193cc1ccd69d819562cc7f345c815a6fc51d223b2ef22f23c1a0f67a88de9a72"},
- {file = "aiohttp-3.9.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b9f1cb839b621f84a5b006848e336cf1496688059d2408e617af33e3470ba204"},
- {file = "aiohttp-3.9.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:d22a0931848b8c7a023c695fa2057c6aaac19085f257d48baa24455e67df97ec"},
- {file = "aiohttp-3.9.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4112d8ba61fbd0abd5d43a9cb312214565b446d926e282a6d7da3f5a5aa71d36"},
- {file = "aiohttp-3.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c4ad4241b52bb2eb7a4d2bde060d31c2b255b8c6597dd8deac2f039168d14fd7"},
- {file = "aiohttp-3.9.2-cp311-cp311-win32.whl", hash = "sha256:ee2661a3f5b529f4fc8a8ffee9f736ae054adfb353a0d2f78218be90617194b3"},
- {file = "aiohttp-3.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:4deae2c165a5db1ed97df2868ef31ca3cc999988812e82386d22937d9d6fed52"},
- {file = "aiohttp-3.9.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:6f4cdba12539215aaecf3c310ce9d067b0081a0795dd8a8805fdb67a65c0572a"},
- {file = "aiohttp-3.9.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:84e843b33d5460a5c501c05539809ff3aee07436296ff9fbc4d327e32aa3a326"},
- {file = "aiohttp-3.9.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8008d0f451d66140a5aa1c17e3eedc9d56e14207568cd42072c9d6b92bf19b52"},
- {file = "aiohttp-3.9.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61c47ab8ef629793c086378b1df93d18438612d3ed60dca76c3422f4fbafa792"},
- {file = "aiohttp-3.9.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bc71f748e12284312f140eaa6599a520389273174b42c345d13c7e07792f4f57"},
- {file = "aiohttp-3.9.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a1c3a4d0ab2f75f22ec80bca62385db2e8810ee12efa8c9e92efea45c1849133"},
- {file = "aiohttp-3.9.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a87aa0b13bbee025faa59fa58861303c2b064b9855d4c0e45ec70182bbeba1b"},
- {file = "aiohttp-3.9.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2cc0d04688b9f4a7854c56c18aa7af9e5b0a87a28f934e2e596ba7e14783192"},
- {file = "aiohttp-3.9.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1956e3ac376b1711c1533266dec4efd485f821d84c13ce1217d53e42c9e65f08"},
- {file = "aiohttp-3.9.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:114da29f39eccd71b93a0fcacff178749a5c3559009b4a4498c2c173a6d74dff"},
- {file = "aiohttp-3.9.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:3f17999ae3927d8a9a823a1283b201344a0627272f92d4f3e3a4efe276972fe8"},
- {file = "aiohttp-3.9.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:f31df6a32217a34ae2f813b152a6f348154f948c83213b690e59d9e84020925c"},
- {file = "aiohttp-3.9.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7a75307ffe31329928a8d47eae0692192327c599113d41b278d4c12b54e1bd11"},
- {file = "aiohttp-3.9.2-cp312-cp312-win32.whl", hash = "sha256:972b63d589ff8f305463593050a31b5ce91638918da38139b9d8deaba9e0fed7"},
- {file = "aiohttp-3.9.2-cp312-cp312-win_amd64.whl", hash = "sha256:200dc0246f0cb5405c80d18ac905c8350179c063ea1587580e3335bfc243ba6a"},
- {file = "aiohttp-3.9.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:158564d0d1020e0d3fe919a81d97aadad35171e13e7b425b244ad4337fc6793a"},
- {file = "aiohttp-3.9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:da1346cd0ccb395f0ed16b113ebb626fa43b7b07fd7344fce33e7a4f04a8897a"},
- {file = "aiohttp-3.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:eaa9256de26ea0334ffa25f1913ae15a51e35c529a1ed9af8e6286dd44312554"},
- {file = "aiohttp-3.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1543e7fb00214fb4ccead42e6a7d86f3bb7c34751ec7c605cca7388e525fd0b4"},
- {file = "aiohttp-3.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:186e94570433a004e05f31f632726ae0f2c9dee4762a9ce915769ce9c0a23d89"},
- {file = "aiohttp-3.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d52d20832ac1560f4510d68e7ba8befbc801a2b77df12bd0cd2bcf3b049e52a4"},
- {file = "aiohttp-3.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c45e4e815ac6af3b72ca2bde9b608d2571737bb1e2d42299fc1ffdf60f6f9a1"},
- {file = "aiohttp-3.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa906b9bdfd4a7972dd0628dbbd6413d2062df5b431194486a78f0d2ae87bd55"},
- {file = "aiohttp-3.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:68bbee9e17d66f17bb0010aa15a22c6eb28583edcc8b3212e2b8e3f77f3ebe2a"},
- {file = "aiohttp-3.9.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4c189b64bd6d9a403a1a3f86a3ab3acbc3dc41a68f73a268a4f683f89a4dec1f"},
- {file = "aiohttp-3.9.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:8a7876f794523123bca6d44bfecd89c9fec9ec897a25f3dd202ee7fc5c6525b7"},
- {file = "aiohttp-3.9.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:d23fba734e3dd7b1d679b9473129cd52e4ec0e65a4512b488981a56420e708db"},
- {file = "aiohttp-3.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b141753be581fab842a25cb319f79536d19c2a51995d7d8b29ee290169868eab"},
- {file = "aiohttp-3.9.2-cp38-cp38-win32.whl", hash = "sha256:103daf41ff3b53ba6fa09ad410793e2e76c9d0269151812e5aba4b9dd674a7e8"},
- {file = "aiohttp-3.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:328918a6c2835861ff7afa8c6d2c70c35fdaf996205d5932351bdd952f33fa2f"},
- {file = "aiohttp-3.9.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5264d7327c9464786f74e4ec9342afbbb6ee70dfbb2ec9e3dfce7a54c8043aa3"},
- {file = "aiohttp-3.9.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:07205ae0015e05c78b3288c1517afa000823a678a41594b3fdc870878d645305"},
- {file = "aiohttp-3.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ae0a1e638cffc3ec4d4784b8b4fd1cf28968febc4bd2718ffa25b99b96a741bd"},
- {file = "aiohttp-3.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d43302a30ba1166325974858e6ef31727a23bdd12db40e725bec0f759abce505"},
- {file = "aiohttp-3.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16a967685907003765855999af11a79b24e70b34dc710f77a38d21cd9fc4f5fe"},
- {file = "aiohttp-3.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6fa3ee92cd441d5c2d07ca88d7a9cef50f7ec975f0117cd0c62018022a184308"},
- {file = "aiohttp-3.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b500c5ad9c07639d48615a770f49618130e61be36608fc9bc2d9bae31732b8f"},
- {file = "aiohttp-3.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c07327b368745b1ce2393ae9e1aafed7073d9199e1dcba14e035cc646c7941bf"},
- {file = "aiohttp-3.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:cc7d6502c23a0ec109687bf31909b3fb7b196faf198f8cff68c81b49eb316ea9"},
- {file = "aiohttp-3.9.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:07be2be7071723c3509ab5c08108d3a74f2181d4964e869f2504aaab68f8d3e8"},
- {file = "aiohttp-3.9.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:122468f6fee5fcbe67cb07014a08c195b3d4c41ff71e7b5160a7bcc41d585a5f"},
- {file = "aiohttp-3.9.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:00a9abcea793c81e7f8778ca195a1714a64f6d7436c4c0bb168ad2a212627000"},
- {file = "aiohttp-3.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7a9825fdd64ecac5c670234d80bb52bdcaa4139d1f839165f548208b3779c6c6"},
- {file = "aiohttp-3.9.2-cp39-cp39-win32.whl", hash = "sha256:5422cd9a4a00f24c7244e1b15aa9b87935c85fb6a00c8ac9b2527b38627a9211"},
- {file = "aiohttp-3.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:7d579dcd5d82a86a46f725458418458fa43686f6a7b252f2966d359033ffc8ab"},
- {file = "aiohttp-3.9.2.tar.gz", hash = "sha256:b0ad0a5e86ce73f5368a164c10ada10504bf91869c05ab75d982c6048217fbf7"},
+ {file = "aiohttp-3.9.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:76d32588ef7e4a3f3adff1956a0ba96faabbdee58f2407c122dd45aa6e34f372"},
+ {file = "aiohttp-3.9.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:56181093c10dbc6ceb8a29dfeea1e815e1dfdc020169203d87fd8d37616f73f9"},
+ {file = "aiohttp-3.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c7a5b676d3c65e88b3aca41816bf72831898fcd73f0cbb2680e9d88e819d1e4d"},
+ {file = "aiohttp-3.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1df528a85fb404899d4207a8d9934cfd6be626e30e5d3a5544a83dbae6d8a7e"},
+ {file = "aiohttp-3.9.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f595db1bceabd71c82e92df212dd9525a8a2c6947d39e3c994c4f27d2fe15b11"},
+ {file = "aiohttp-3.9.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c0b09d76e5a4caac3d27752027fbd43dc987b95f3748fad2b924a03fe8632ad"},
+ {file = "aiohttp-3.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:689eb4356649ec9535b3686200b231876fb4cab4aca54e3bece71d37f50c1d13"},
+ {file = "aiohttp-3.9.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3666cf4182efdb44d73602379a66f5fdfd5da0db5e4520f0ac0dcca644a3497"},
+ {file = "aiohttp-3.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b65b0f8747b013570eea2f75726046fa54fa8e0c5db60f3b98dd5d161052004a"},
+ {file = "aiohttp-3.9.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a1885d2470955f70dfdd33a02e1749613c5a9c5ab855f6db38e0b9389453dce7"},
+ {file = "aiohttp-3.9.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0593822dcdb9483d41f12041ff7c90d4d1033ec0e880bcfaf102919b715f47f1"},
+ {file = "aiohttp-3.9.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:47f6eb74e1ecb5e19a78f4a4228aa24df7fbab3b62d4a625d3f41194a08bd54f"},
+ {file = "aiohttp-3.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c8b04a3dbd54de6ccb7604242fe3ad67f2f3ca558f2d33fe19d4b08d90701a89"},
+ {file = "aiohttp-3.9.4-cp310-cp310-win32.whl", hash = "sha256:8a78dfb198a328bfb38e4308ca8167028920fb747ddcf086ce706fbdd23b2926"},
+ {file = "aiohttp-3.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:e78da6b55275987cbc89141a1d8e75f5070e577c482dd48bd9123a76a96f0bbb"},
+ {file = "aiohttp-3.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c111b3c69060d2bafc446917534150fd049e7aedd6cbf21ba526a5a97b4402a5"},
+ {file = "aiohttp-3.9.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:efbdd51872cf170093998c87ccdf3cb5993add3559341a8e5708bcb311934c94"},
+ {file = "aiohttp-3.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7bfdb41dc6e85d8535b00d73947548a748e9534e8e4fddd2638109ff3fb081df"},
+ {file = "aiohttp-3.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bd9d334412961125e9f68d5b73c1d0ab9ea3f74a58a475e6b119f5293eee7ba"},
+ {file = "aiohttp-3.9.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:35d78076736f4a668d57ade00c65d30a8ce28719d8a42471b2a06ccd1a2e3063"},
+ {file = "aiohttp-3.9.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:824dff4f9f4d0f59d0fa3577932ee9a20e09edec8a2f813e1d6b9f89ced8293f"},
+ {file = "aiohttp-3.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52b8b4e06fc15519019e128abedaeb56412b106ab88b3c452188ca47a25c4093"},
+ {file = "aiohttp-3.9.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eae569fb1e7559d4f3919965617bb39f9e753967fae55ce13454bec2d1c54f09"},
+ {file = "aiohttp-3.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:69b97aa5792428f321f72aeb2f118e56893371f27e0b7d05750bcad06fc42ca1"},
+ {file = "aiohttp-3.9.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4d79aad0ad4b980663316f26d9a492e8fab2af77c69c0f33780a56843ad2f89e"},
+ {file = "aiohttp-3.9.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:d6577140cd7db19e430661e4b2653680194ea8c22c994bc65b7a19d8ec834403"},
+ {file = "aiohttp-3.9.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:9860d455847cd98eb67897f5957b7cd69fbcb436dd3f06099230f16a66e66f79"},
+ {file = "aiohttp-3.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:69ff36d3f8f5652994e08bd22f093e11cfd0444cea310f92e01b45a4e46b624e"},
+ {file = "aiohttp-3.9.4-cp311-cp311-win32.whl", hash = "sha256:e27d3b5ed2c2013bce66ad67ee57cbf614288bda8cdf426c8d8fe548316f1b5f"},
+ {file = "aiohttp-3.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:d6a67e26daa686a6fbdb600a9af8619c80a332556245fa8e86c747d226ab1a1e"},
+ {file = "aiohttp-3.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:c5ff8ff44825736a4065d8544b43b43ee4c6dd1530f3a08e6c0578a813b0aa35"},
+ {file = "aiohttp-3.9.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d12a244627eba4e9dc52cbf924edef905ddd6cafc6513849b4876076a6f38b0e"},
+ {file = "aiohttp-3.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dcad56c8d8348e7e468899d2fb3b309b9bc59d94e6db08710555f7436156097f"},
+ {file = "aiohttp-3.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f7e69a7fd4b5ce419238388e55abd220336bd32212c673ceabc57ccf3d05b55"},
+ {file = "aiohttp-3.9.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4870cb049f10d7680c239b55428916d84158798eb8f353e74fa2c98980dcc0b"},
+ {file = "aiohttp-3.9.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b2feaf1b7031ede1bc0880cec4b0776fd347259a723d625357bb4b82f62687b"},
+ {file = "aiohttp-3.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:939393e8c3f0a5bcd33ef7ace67680c318dc2ae406f15e381c0054dd658397de"},
+ {file = "aiohttp-3.9.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d2334e387b2adcc944680bebcf412743f2caf4eeebd550f67249c1c3696be04"},
+ {file = "aiohttp-3.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e0198ea897680e480845ec0ffc5a14e8b694e25b3f104f63676d55bf76a82f1a"},
+ {file = "aiohttp-3.9.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:e40d2cd22914d67c84824045861a5bb0fb46586b15dfe4f046c7495bf08306b2"},
+ {file = "aiohttp-3.9.4-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:aba80e77c227f4234aa34a5ff2b6ff30c5d6a827a91d22ff6b999de9175d71bd"},
+ {file = "aiohttp-3.9.4-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:fb68dc73bc8ac322d2e392a59a9e396c4f35cb6fdbdd749e139d1d6c985f2527"},
+ {file = "aiohttp-3.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f3460a92638dce7e47062cf088d6e7663adb135e936cb117be88d5e6c48c9d53"},
+ {file = "aiohttp-3.9.4-cp312-cp312-win32.whl", hash = "sha256:32dc814ddbb254f6170bca198fe307920f6c1308a5492f049f7f63554b88ef36"},
+ {file = "aiohttp-3.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:63f41a909d182d2b78fe3abef557fcc14da50c7852f70ae3be60e83ff64edba5"},
+ {file = "aiohttp-3.9.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c3770365675f6be220032f6609a8fbad994d6dcf3ef7dbcf295c7ee70884c9af"},
+ {file = "aiohttp-3.9.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:305edae1dea368ce09bcb858cf5a63a064f3bff4767dec6fa60a0cc0e805a1d3"},
+ {file = "aiohttp-3.9.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6f121900131d116e4a93b55ab0d12ad72573f967b100e49086e496a9b24523ea"},
+ {file = "aiohttp-3.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b71e614c1ae35c3d62a293b19eface83d5e4d194e3eb2fabb10059d33e6e8cbf"},
+ {file = "aiohttp-3.9.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:419f009fa4cfde4d16a7fc070d64f36d70a8d35a90d71aa27670bba2be4fd039"},
+ {file = "aiohttp-3.9.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7b39476ee69cfe64061fd77a73bf692c40021f8547cda617a3466530ef63f947"},
+ {file = "aiohttp-3.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b33f34c9c7decdb2ab99c74be6443942b730b56d9c5ee48fb7df2c86492f293c"},
+ {file = "aiohttp-3.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c78700130ce2dcebb1a8103202ae795be2fa8c9351d0dd22338fe3dac74847d9"},
+ {file = "aiohttp-3.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:268ba22d917655d1259af2d5659072b7dc11b4e1dc2cb9662fdd867d75afc6a4"},
+ {file = "aiohttp-3.9.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:17e7c051f53a0d2ebf33013a9cbf020bb4e098c4bc5bce6f7b0c962108d97eab"},
+ {file = "aiohttp-3.9.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:7be99f4abb008cb38e144f85f515598f4c2c8932bf11b65add0ff59c9c876d99"},
+ {file = "aiohttp-3.9.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:d58a54d6ff08d2547656356eea8572b224e6f9bbc0cf55fa9966bcaac4ddfb10"},
+ {file = "aiohttp-3.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7673a76772bda15d0d10d1aa881b7911d0580c980dbd16e59d7ba1422b2d83cd"},
+ {file = "aiohttp-3.9.4-cp38-cp38-win32.whl", hash = "sha256:e4370dda04dc8951012f30e1ce7956a0a226ac0714a7b6c389fb2f43f22a250e"},
+ {file = "aiohttp-3.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:eb30c4510a691bb87081192a394fb661860e75ca3896c01c6d186febe7c88530"},
+ {file = "aiohttp-3.9.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:84e90494db7df3be5e056f91412f9fa9e611fbe8ce4aaef70647297f5943b276"},
+ {file = "aiohttp-3.9.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7d4845f8501ab28ebfdbeab980a50a273b415cf69e96e4e674d43d86a464df9d"},
+ {file = "aiohttp-3.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:69046cd9a2a17245c4ce3c1f1a4ff8c70c7701ef222fce3d1d8435f09042bba1"},
+ {file = "aiohttp-3.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b73a06bafc8dcc508420db43b4dd5850e41e69de99009d0351c4f3007960019"},
+ {file = "aiohttp-3.9.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:418bb0038dfafeac923823c2e63226179976c76f981a2aaad0ad5d51f2229bca"},
+ {file = "aiohttp-3.9.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:71a8f241456b6c2668374d5d28398f8e8cdae4cce568aaea54e0f39359cd928d"},
+ {file = "aiohttp-3.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:935c369bf8acc2dc26f6eeb5222768aa7c62917c3554f7215f2ead7386b33748"},
+ {file = "aiohttp-3.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:74e4e48c8752d14ecfb36d2ebb3d76d614320570e14de0a3aa7a726ff150a03c"},
+ {file = "aiohttp-3.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:916b0417aeddf2c8c61291238ce25286f391a6acb6f28005dd9ce282bd6311b6"},
+ {file = "aiohttp-3.9.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9b6787b6d0b3518b2ee4cbeadd24a507756ee703adbac1ab6dc7c4434b8c572a"},
+ {file = "aiohttp-3.9.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:221204dbda5ef350e8db6287937621cf75e85778b296c9c52260b522231940ed"},
+ {file = "aiohttp-3.9.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:10afd99b8251022ddf81eaed1d90f5a988e349ee7d779eb429fb07b670751e8c"},
+ {file = "aiohttp-3.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2506d9f7a9b91033201be9ffe7d89c6a54150b0578803cce5cb84a943d075bc3"},
+ {file = "aiohttp-3.9.4-cp39-cp39-win32.whl", hash = "sha256:e571fdd9efd65e86c6af2f332e0e95dad259bfe6beb5d15b3c3eca3a6eb5d87b"},
+ {file = "aiohttp-3.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:7d29dd5319d20aa3b7749719ac9685fbd926f71ac8c77b2477272725f882072d"},
+ {file = "aiohttp-3.9.4.tar.gz", hash = "sha256:6ff71ede6d9a5a58cfb7b6fffc83ab5d4a63138276c771ac91ceaaddf5459644"},
]
[package.dependencies]
@@ -285,29 +285,33 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte
[[package]]
name = "black"
-version = "23.10.1"
+version = "24.3.0"
description = "The uncompromising code formatter."
optional = false
python-versions = ">=3.8"
files = [
- {file = "black-23.10.1-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:ec3f8e6234c4e46ff9e16d9ae96f4ef69fa328bb4ad08198c8cee45bb1f08c69"},
- {file = "black-23.10.1-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:1b917a2aa020ca600483a7b340c165970b26e9029067f019e3755b56e8dd5916"},
- {file = "black-23.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c74de4c77b849e6359c6f01987e94873c707098322b91490d24296f66d067dc"},
- {file = "black-23.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:7b4d10b0f016616a0d93d24a448100adf1699712fb7a4efd0e2c32bbb219b173"},
- {file = "black-23.10.1-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b15b75fc53a2fbcac8a87d3e20f69874d161beef13954747e053bca7a1ce53a0"},
- {file = "black-23.10.1-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:e293e4c2f4a992b980032bbd62df07c1bcff82d6964d6c9496f2cd726e246ace"},
- {file = "black-23.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d56124b7a61d092cb52cce34182a5280e160e6aff3137172a68c2c2c4b76bcb"},
- {file = "black-23.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:3f157a8945a7b2d424da3335f7ace89c14a3b0625e6593d21139c2d8214d55ce"},
- {file = "black-23.10.1-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:cfcce6f0a384d0da692119f2d72d79ed07c7159879d0bb1bb32d2e443382bf3a"},
- {file = "black-23.10.1-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:33d40f5b06be80c1bbce17b173cda17994fbad096ce60eb22054da021bf933d1"},
- {file = "black-23.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:840015166dbdfbc47992871325799fd2dc0dcf9395e401ada6d88fe11498abad"},
- {file = "black-23.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:037e9b4664cafda5f025a1728c50a9e9aedb99a759c89f760bd83730e76ba884"},
- {file = "black-23.10.1-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:7cb5936e686e782fddb1c73f8aa6f459e1ad38a6a7b0e54b403f1f05a1507ee9"},
- {file = "black-23.10.1-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:7670242e90dc129c539e9ca17665e39a146a761e681805c54fbd86015c7c84f7"},
- {file = "black-23.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ed45ac9a613fb52dad3b61c8dea2ec9510bf3108d4db88422bacc7d1ba1243d"},
- {file = "black-23.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:6d23d7822140e3fef190734216cefb262521789367fbdc0b3f22af6744058982"},
- {file = "black-23.10.1-py3-none-any.whl", hash = "sha256:d431e6739f727bb2e0495df64a6c7a5310758e87505f5f8cde9ff6c0f2d7e4fe"},
- {file = "black-23.10.1.tar.gz", hash = "sha256:1f8ce316753428ff68749c65a5f7844631aa18c8679dfd3ca9dc1a289979c258"},
+ {file = "black-24.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7d5e026f8da0322b5662fa7a8e752b3fa2dac1c1cbc213c3d7ff9bdd0ab12395"},
+ {file = "black-24.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9f50ea1132e2189d8dff0115ab75b65590a3e97de1e143795adb4ce317934995"},
+ {file = "black-24.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2af80566f43c85f5797365077fb64a393861a3730bd110971ab7a0c94e873e7"},
+ {file = "black-24.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:4be5bb28e090456adfc1255e03967fb67ca846a03be7aadf6249096100ee32d0"},
+ {file = "black-24.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4f1373a7808a8f135b774039f61d59e4be7eb56b2513d3d2f02a8b9365b8a8a9"},
+ {file = "black-24.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:aadf7a02d947936ee418777e0247ea114f78aff0d0959461057cae8a04f20597"},
+ {file = "black-24.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c02e4ea2ae09d16314d30912a58ada9a5c4fdfedf9512d23326128ac08ac3d"},
+ {file = "black-24.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:bf21b7b230718a5f08bd32d5e4f1db7fc8788345c8aea1d155fc17852b3410f5"},
+ {file = "black-24.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:2818cf72dfd5d289e48f37ccfa08b460bf469e67fb7c4abb07edc2e9f16fb63f"},
+ {file = "black-24.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4acf672def7eb1725f41f38bf6bf425c8237248bb0804faa3965c036f7672d11"},
+ {file = "black-24.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7ed6668cbbfcd231fa0dc1b137d3e40c04c7f786e626b405c62bcd5db5857e4"},
+ {file = "black-24.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:56f52cfbd3dabe2798d76dbdd299faa046a901041faf2cf33288bc4e6dae57b5"},
+ {file = "black-24.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:79dcf34b33e38ed1b17434693763301d7ccbd1c5860674a8f871bd15139e7837"},
+ {file = "black-24.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e19cb1c6365fd6dc38a6eae2dcb691d7d83935c10215aef8e6c38edee3f77abd"},
+ {file = "black-24.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65b76c275e4c1c5ce6e9870911384bff5ca31ab63d19c76811cb1fb162678213"},
+ {file = "black-24.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:b5991d523eee14756f3c8d5df5231550ae8993e2286b8014e2fdea7156ed0959"},
+ {file = "black-24.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c45f8dff244b3c431b36e3224b6be4a127c6aca780853574c00faf99258041eb"},
+ {file = "black-24.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6905238a754ceb7788a73f02b45637d820b2f5478b20fec82ea865e4f5d4d9f7"},
+ {file = "black-24.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7de8d330763c66663661a1ffd432274a2f92f07feeddd89ffd085b5744f85e7"},
+ {file = "black-24.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:7bb041dca0d784697af4646d3b62ba4a6b028276ae878e53f6b4f74ddd6db99f"},
+ {file = "black-24.3.0-py3-none-any.whl", hash = "sha256:41622020d7120e01d377f74249e677039d20e6344ff5851de8a10f11f513bf93"},
+ {file = "black-24.3.0.tar.gz", hash = "sha256:a0c9c4a0771afc6919578cec71ce82a3e31e054904e7197deacbc9382671c41f"},
]
[package.dependencies]
@@ -321,7 +325,7 @@ typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""}
[package.extras]
colorama = ["colorama (>=0.4.3)"]
-d = ["aiohttp (>=3.7.4)"]
+d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"]
jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"]
uvloop = ["uvloop (>=0.15.2)"]
@@ -641,43 +645,43 @@ toml = ["tomli"]
[[package]]
name = "cryptography"
-version = "42.0.0"
+version = "42.0.4"
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
optional = false
python-versions = ">=3.7"
files = [
- {file = "cryptography-42.0.0-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:c640b0ef54138fde761ec99a6c7dc4ce05e80420262c20fa239e694ca371d434"},
- {file = "cryptography-42.0.0-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:678cfa0d1e72ef41d48993a7be75a76b0725d29b820ff3cfd606a5b2b33fda01"},
- {file = "cryptography-42.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:146e971e92a6dd042214b537a726c9750496128453146ab0ee8971a0299dc9bd"},
- {file = "cryptography-42.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87086eae86a700307b544625e3ba11cc600c3c0ef8ab97b0fda0705d6db3d4e3"},
- {file = "cryptography-42.0.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:0a68bfcf57a6887818307600c3c0ebc3f62fbb6ccad2240aa21887cda1f8df1b"},
- {file = "cryptography-42.0.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:5a217bca51f3b91971400890905a9323ad805838ca3fa1e202a01844f485ee87"},
- {file = "cryptography-42.0.0-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:ca20550bb590db16223eb9ccc5852335b48b8f597e2f6f0878bbfd9e7314eb17"},
- {file = "cryptography-42.0.0-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:33588310b5c886dfb87dba5f013b8d27df7ffd31dc753775342a1e5ab139e59d"},
- {file = "cryptography-42.0.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9515ea7f596c8092fdc9902627e51b23a75daa2c7815ed5aa8cf4f07469212ec"},
- {file = "cryptography-42.0.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:35cf6ed4c38f054478a9df14f03c1169bb14bd98f0b1705751079b25e1cb58bc"},
- {file = "cryptography-42.0.0-cp37-abi3-win32.whl", hash = "sha256:8814722cffcfd1fbd91edd9f3451b88a8f26a5fd41b28c1c9193949d1c689dc4"},
- {file = "cryptography-42.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:a2a8d873667e4fd2f34aedab02ba500b824692c6542e017075a2efc38f60a4c0"},
- {file = "cryptography-42.0.0-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:8fedec73d590fd30c4e3f0d0f4bc961aeca8390c72f3eaa1a0874d180e868ddf"},
- {file = "cryptography-42.0.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be41b0c7366e5549265adf2145135dca107718fa44b6e418dc7499cfff6b4689"},
- {file = "cryptography-42.0.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ca482ea80626048975360c8e62be3ceb0f11803180b73163acd24bf014133a0"},
- {file = "cryptography-42.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:c58115384bdcfe9c7f644c72f10f6f42bed7cf59f7b52fe1bf7ae0a622b3a139"},
- {file = "cryptography-42.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:56ce0c106d5c3fec1038c3cca3d55ac320a5be1b44bf15116732d0bc716979a2"},
- {file = "cryptography-42.0.0-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:324721d93b998cb7367f1e6897370644751e5580ff9b370c0a50dc60a2003513"},
- {file = "cryptography-42.0.0-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:d97aae66b7de41cdf5b12087b5509e4e9805ed6f562406dfcf60e8481a9a28f8"},
- {file = "cryptography-42.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:85f759ed59ffd1d0baad296e72780aa62ff8a71f94dc1ab340386a1207d0ea81"},
- {file = "cryptography-42.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:206aaf42e031b93f86ad60f9f5d9da1b09164f25488238ac1dc488334eb5e221"},
- {file = "cryptography-42.0.0-cp39-abi3-win32.whl", hash = "sha256:74f18a4c8ca04134d2052a140322002fef535c99cdbc2a6afc18a8024d5c9d5b"},
- {file = "cryptography-42.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:14e4b909373bc5bf1095311fa0f7fcabf2d1a160ca13f1e9e467be1ac4cbdf94"},
- {file = "cryptography-42.0.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3005166a39b70c8b94455fdbe78d87a444da31ff70de3331cdec2c568cf25b7e"},
- {file = "cryptography-42.0.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:be14b31eb3a293fc6e6aa2807c8a3224c71426f7c4e3639ccf1a2f3ffd6df8c3"},
- {file = "cryptography-42.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:bd7cf7a8d9f34cc67220f1195884151426ce616fdc8285df9054bfa10135925f"},
- {file = "cryptography-42.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c310767268d88803b653fffe6d6f2f17bb9d49ffceb8d70aed50ad45ea49ab08"},
- {file = "cryptography-42.0.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bdce70e562c69bb089523e75ef1d9625b7417c6297a76ac27b1b8b1eb51b7d0f"},
- {file = "cryptography-42.0.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:e9326ca78111e4c645f7e49cbce4ed2f3f85e17b61a563328c85a5208cf34440"},
- {file = "cryptography-42.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:69fd009a325cad6fbfd5b04c711a4da563c6c4854fc4c9544bff3088387c77c0"},
- {file = "cryptography-42.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:988b738f56c665366b1e4bfd9045c3efae89ee366ca3839cd5af53eaa1401bce"},
- {file = "cryptography-42.0.0.tar.gz", hash = "sha256:6cf9b76d6e93c62114bd19485e5cb003115c134cf9ce91f8ac924c44f8c8c3f4"},
+ {file = "cryptography-42.0.4-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:ffc73996c4fca3d2b6c1c8c12bfd3ad00def8621da24f547626bf06441400449"},
+ {file = "cryptography-42.0.4-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:db4b65b02f59035037fde0998974d84244a64c3265bdef32a827ab9b63d61b18"},
+ {file = "cryptography-42.0.4-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad9c385ba8ee025bb0d856714f71d7840020fe176ae0229de618f14dae7a6e2"},
+ {file = "cryptography-42.0.4-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69b22ab6506a3fe483d67d1ed878e1602bdd5912a134e6202c1ec672233241c1"},
+ {file = "cryptography-42.0.4-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:e09469a2cec88fb7b078e16d4adec594414397e8879a4341c6ace96013463d5b"},
+ {file = "cryptography-42.0.4-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3e970a2119507d0b104f0a8e281521ad28fc26f2820687b3436b8c9a5fcf20d1"},
+ {file = "cryptography-42.0.4-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:e53dc41cda40b248ebc40b83b31516487f7db95ab8ceac1f042626bc43a2f992"},
+ {file = "cryptography-42.0.4-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:c3a5cbc620e1e17009f30dd34cb0d85c987afd21c41a74352d1719be33380885"},
+ {file = "cryptography-42.0.4-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:6bfadd884e7280df24d26f2186e4e07556a05d37393b0f220a840b083dc6a824"},
+ {file = "cryptography-42.0.4-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:01911714117642a3f1792c7f376db572aadadbafcd8d75bb527166009c9f1d1b"},
+ {file = "cryptography-42.0.4-cp37-abi3-win32.whl", hash = "sha256:fb0cef872d8193e487fc6bdb08559c3aa41b659a7d9be48b2e10747f47863925"},
+ {file = "cryptography-42.0.4-cp37-abi3-win_amd64.whl", hash = "sha256:c1f25b252d2c87088abc8bbc4f1ecbf7c919e05508a7e8628e6875c40bc70923"},
+ {file = "cryptography-42.0.4-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:15a1fb843c48b4a604663fa30af60818cd28f895572386e5f9b8a665874c26e7"},
+ {file = "cryptography-42.0.4-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1327f280c824ff7885bdeef8578f74690e9079267c1c8bd7dc5cc5aa065ae52"},
+ {file = "cryptography-42.0.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ffb03d419edcab93b4b19c22ee80c007fb2d708429cecebf1dd3258956a563a"},
+ {file = "cryptography-42.0.4-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:1df6fcbf60560d2113b5ed90f072dc0b108d64750d4cbd46a21ec882c7aefce9"},
+ {file = "cryptography-42.0.4-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:44a64043f743485925d3bcac548d05df0f9bb445c5fcca6681889c7c3ab12764"},
+ {file = "cryptography-42.0.4-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:3c6048f217533d89f2f8f4f0fe3044bf0b2090453b7b73d0b77db47b80af8dff"},
+ {file = "cryptography-42.0.4-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6d0fbe73728c44ca3a241eff9aefe6496ab2656d6e7a4ea2459865f2e8613257"},
+ {file = "cryptography-42.0.4-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:887623fe0d70f48ab3f5e4dbf234986b1329a64c066d719432d0698522749929"},
+ {file = "cryptography-42.0.4-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:ce8613beaffc7c14f091497346ef117c1798c202b01153a8cc7b8e2ebaaf41c0"},
+ {file = "cryptography-42.0.4-cp39-abi3-win32.whl", hash = "sha256:810bcf151caefc03e51a3d61e53335cd5c7316c0a105cc695f0959f2c638b129"},
+ {file = "cryptography-42.0.4-cp39-abi3-win_amd64.whl", hash = "sha256:a0298bdc6e98ca21382afe914c642620370ce0470a01e1bef6dd9b5354c36854"},
+ {file = "cryptography-42.0.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5f8907fcf57392cd917892ae83708761c6ff3c37a8e835d7246ff0ad251d9298"},
+ {file = "cryptography-42.0.4-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:12d341bd42cdb7d4937b0cabbdf2a94f949413ac4504904d0cdbdce4a22cbf88"},
+ {file = "cryptography-42.0.4-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1cdcdbd117681c88d717437ada72bdd5be9de117f96e3f4d50dab3f59fd9ab20"},
+ {file = "cryptography-42.0.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0e89f7b84f421c56e7ff69f11c441ebda73b8a8e6488d322ef71746224c20fce"},
+ {file = "cryptography-42.0.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f1e85a178384bf19e36779d91ff35c7617c885da487d689b05c1366f9933ad74"},
+ {file = "cryptography-42.0.4-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d2a27aca5597c8a71abbe10209184e1a8e91c1fd470b5070a2ea60cafec35bcd"},
+ {file = "cryptography-42.0.4-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4e36685cb634af55e0677d435d425043967ac2f3790ec652b2b88ad03b85c27b"},
+ {file = "cryptography-42.0.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f47be41843200f7faec0683ad751e5ef11b9a56a220d57f300376cd8aba81660"},
+ {file = "cryptography-42.0.4.tar.gz", hash = "sha256:831a4b37accef30cccd34fcb916a5d7b5be3cbbe27268a02832c3e450aea39cb"},
]
[package.dependencies]
@@ -836,13 +840,13 @@ files = [
[[package]]
name = "idna"
-version = "3.4"
+version = "3.7"
description = "Internationalized Domain Names in Applications (IDNA)"
optional = false
python-versions = ">=3.5"
files = [
- {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"},
- {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"},
+ {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"},
+ {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"},
]
[[package]]
diff --git a/ansible_collections/netbox/netbox/tests/integration/netbox-deploy.py b/ansible_collections/netbox/netbox/tests/integration/netbox-deploy.py
index 90cff633c..de5e080e4 100755
--- a/ansible_collections/netbox/netbox/tests/integration/netbox-deploy.py
+++ b/ansible_collections/netbox/netbox/tests/integration/netbox-deploy.py
@@ -466,6 +466,15 @@ test100_vm = nb.virtualization.virtual_machines.get(name="test100-vm")
test101_vm = nb.virtualization.virtual_machines.get(name="test101-vm")
test_spaces_vm = nb.virtualization.virtual_machines.get(name="Test VM With Spaces")
+# Create Virtaul Disks
+virtual_disks = [
+ {"name": "disk1", "size": 60, "virtual_machine": test100_vm.id},
+ {"name": "disk2", "size": 110, "virtual_machine": test100_vm.id},
+]
+created_virtual_disks = make_netbox_calls(
+ nb.virtualization.virtual_disks, virtual_disks
+)
+
## Create Virtual Machine Interfaces
virtual_machines_intfs = [
# Create test100-vm intfs
diff --git a/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-bearer-token.json b/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-bearer-token.json
index 360a7ac33..f168db52d 100644
--- a/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-bearer-token.json
+++ b/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-bearer-token.json
@@ -44,27 +44,28 @@
"custom_fields": {},
"description": "",
"device": {
- "display": "Test Nexus One",
- "id": 4,
- "name": "Test Nexus One"
+ "display": "Test Nexus Child One",
+ "id": 5,
+ "name": "Test Nexus Child One",
+ "url": "http://localhost:32768/api/dcim/devices/5/"
},
- "display": "Ethernet1/1",
+ "display": "Ethernet2/1",
"duplex": null,
"enabled": true,
- "id": 1,
+ "id": 2,
"ip_addresses": [
{
- "address": "172.16.180.11/24",
+ "address": "172.16.180.12/24",
"comments": "",
"custom_fields": {},
"description": "",
- "display": "172.16.180.11/24",
- "dns_name": "",
+ "display": "172.16.180.12/24",
+ "dns_name": "nexus.example.com",
"family": {
"label": "IPv4",
"value": 4
},
- "id": 3,
+ "id": 4,
"nat_inside": null,
"nat_outside": [],
"role": null,
@@ -74,6 +75,7 @@
},
"tags": [],
"tenant": null,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/4/",
"vrf": null
}
],
@@ -88,7 +90,7 @@
"mode": null,
"module": null,
"mtu": null,
- "name": "Ethernet1/1",
+ "name": "Ethernet2/1",
"parent": null,
"poe_mode": null,
"poe_type": null,
@@ -105,6 +107,7 @@
"value": "1000base-t"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/2/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -124,27 +127,28 @@
"custom_fields": {},
"description": "",
"device": {
- "display": "Test Nexus Child One",
- "id": 5,
- "name": "Test Nexus Child One"
+ "display": "Test Nexus One",
+ "id": 4,
+ "name": "Test Nexus One",
+ "url": "http://localhost:32768/api/dcim/devices/4/"
},
- "display": "Ethernet2/1",
+ "display": "Ethernet1/1",
"duplex": null,
"enabled": true,
- "id": 2,
+ "id": 1,
"ip_addresses": [
{
- "address": "172.16.180.12/24",
+ "address": "172.16.180.11/24",
"comments": "",
"custom_fields": {},
"description": "",
- "display": "172.16.180.12/24",
- "dns_name": "nexus.example.com",
+ "display": "172.16.180.11/24",
+ "dns_name": "",
"family": {
"label": "IPv4",
"value": 4
},
- "id": 4,
+ "id": 3,
"nat_inside": null,
"nat_outside": [],
"role": null,
@@ -154,6 +158,7 @@
},
"tags": [],
"tenant": null,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/3/",
"vrf": null
}
],
@@ -168,7 +173,7 @@
"mode": null,
"module": null,
"mtu": null,
- "name": "Ethernet2/1",
+ "name": "Ethernet1/1",
"parent": null,
"poe_mode": null,
"poe_type": null,
@@ -185,6 +190,7 @@
"value": "1000base-t"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/1/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -206,7 +212,8 @@
"device": {
"display": "Test Nexus One",
"id": 4,
- "name": "Test Nexus One"
+ "name": "Test Nexus One",
+ "url": "http://localhost:32768/api/dcim/devices/4/"
},
"display": "wlink1",
"duplex": null,
@@ -241,6 +248,7 @@
"value": "ieee802.11a"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/6/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -269,7 +277,8 @@
"device": {
"display": "Test Nexus One",
"id": 4,
- "name": "Test Nexus One"
+ "name": "Test Nexus One",
+ "url": "http://localhost:32768/api/dcim/devices/4/"
},
"display": "telnet (TCP/23)",
"id": 3,
@@ -283,6 +292,7 @@
"value": "tcp"
},
"tags": [],
+ "url": "http://localhost:32768/api/ipam/services/3/",
"virtual_machine": null
}
],
@@ -319,10 +329,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/11/",
"virtual_machine": {
"display": "Test VM With Spaces",
"id": 6,
- "name": "Test VM With Spaces"
+ "name": "Test VM With Spaces",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/6/"
},
"vrf": null
},
@@ -345,10 +357,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/12/",
"virtual_machine": {
"display": "Test VM With Spaces",
"id": 6,
- "name": "Test VM With Spaces"
+ "name": "Test VM With Spaces",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/6/"
},
"vrf": null
}
@@ -374,10 +388,12 @@
"value": "tcp"
},
"tags": [],
+ "url": "http://localhost:32768/api/ipam/services/4/",
"virtual_machine": {
"display": "Test VM With Spaces",
"id": 6,
- "name": "Test VM With Spaces"
+ "name": "Test VM With Spaces",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/6/"
}
}
],
@@ -440,7 +456,8 @@
"device": {
"display": "test100 (123456789)",
"id": 1,
- "name": "test100"
+ "name": "test100",
+ "url": "http://localhost:32768/api/dcim/devices/1/"
},
"display": "GigabitEthernet1",
"duplex": null,
@@ -468,6 +485,7 @@
},
"tags": [],
"tenant": null,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/1/",
"vrf": null
}
],
@@ -499,6 +517,7 @@
"value": "1000base-t"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/3/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -520,7 +539,8 @@
"device": {
"display": "test100 (123456789)",
"id": 1,
- "name": "test100"
+ "name": "test100",
+ "url": "http://localhost:32768/api/dcim/devices/1/"
},
"display": "GigabitEthernet2",
"duplex": null,
@@ -548,6 +568,7 @@
},
"tags": [],
"tenant": null,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/2/",
"vrf": null
}
],
@@ -579,6 +600,7 @@
"value": "1000base-t"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/4/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -600,7 +622,8 @@
"device": {
"display": "test100 (123456789)",
"id": 1,
- "name": "test100"
+ "name": "test100",
+ "url": "http://localhost:32768/api/dcim/devices/1/"
},
"display": "wlink1",
"duplex": null,
@@ -635,6 +658,7 @@
"value": "ieee802.11a"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/5/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -667,7 +691,8 @@
"device": {
"display": "test100 (123456789)",
"id": 1,
- "name": "test100"
+ "name": "test100",
+ "url": "http://localhost:32768/api/dcim/devices/1/"
},
"display": "ssh (TCP/22)",
"id": 1,
@@ -681,6 +706,7 @@
"value": "tcp"
},
"tags": [],
+ "url": "http://localhost:32768/api/ipam/services/1/",
"virtual_machine": null
},
{
@@ -690,7 +716,8 @@
"device": {
"display": "test100 (123456789)",
"id": 1,
- "name": "test100"
+ "name": "test100",
+ "url": "http://localhost:32768/api/dcim/devices/1/"
},
"display": "http (TCP/80)",
"id": 2,
@@ -699,13 +726,15 @@
"address": "172.16.180.1/24",
"display": "172.16.180.1/24",
"family": 4,
- "id": 1
+ "id": 1,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/1/"
},
{
"address": "2001::1:1/64",
"display": "2001::1:1/64",
"family": 6,
- "id": 2
+ "id": 2,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/2/"
}
],
"name": "http",
@@ -717,6 +746,7 @@
"value": "tcp"
},
"tags": [],
+ "url": "http://localhost:32768/api/ipam/services/2/",
"virtual_machine": null
}
],
@@ -734,6 +764,7 @@
"cluster_type": "test-cluster-type",
"config_context": {},
"custom_fields": {},
+ "disk": 170,
"interfaces": [
{
"bridge": null,
@@ -754,10 +785,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/1/",
"virtual_machine": {
"display": "test100-vm",
"id": 1,
- "name": "test100-vm"
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
},
"vrf": null
},
@@ -780,10 +813,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/2/",
"virtual_machine": {
"display": "test100-vm",
"id": 1,
- "name": "test100-vm"
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
},
"vrf": null
},
@@ -806,10 +841,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/3/",
"virtual_machine": {
"display": "test100-vm",
"id": 1,
- "name": "test100-vm"
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
},
"vrf": null
},
@@ -832,10 +869,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/4/",
"virtual_machine": {
"display": "test100-vm",
"id": 1,
- "name": "test100-vm"
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
},
"vrf": null
},
@@ -858,10 +897,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/5/",
"virtual_machine": {
"display": "test100-vm",
"id": 1,
- "name": "test100-vm"
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
},
"vrf": null
}
@@ -907,10 +948,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/6/",
"virtual_machine": {
"display": "test101-vm",
"id": 2,
- "name": "test101-vm"
+ "name": "test101-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/2/"
},
"vrf": null
},
@@ -933,10 +976,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/7/",
"virtual_machine": {
"display": "test101-vm",
"id": 2,
- "name": "test101-vm"
+ "name": "test101-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/2/"
},
"vrf": null
},
@@ -959,10 +1004,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/8/",
"virtual_machine": {
"display": "test101-vm",
"id": 2,
- "name": "test101-vm"
+ "name": "test101-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/2/"
},
"vrf": null
},
@@ -985,10 +1032,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/9/",
"virtual_machine": {
"display": "test101-vm",
"id": 2,
- "name": "test101-vm"
+ "name": "test101-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/2/"
},
"vrf": null
},
@@ -1011,10 +1060,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/10/",
"virtual_machine": {
"display": "test101-vm",
"id": 2,
- "name": "test101-vm"
+ "name": "test101-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/2/"
},
"vrf": null
}
diff --git a/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-jinja2-filter.json b/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-jinja2-filter.json
index 6d7249836..0f46b442f 100644
--- a/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-jinja2-filter.json
+++ b/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-jinja2-filter.json
@@ -21,27 +21,28 @@
"custom_fields": {},
"description": "",
"device": {
- "display": "Test Nexus One",
- "id": 4,
- "name": "Test Nexus One"
+ "display": "Test Nexus Child One",
+ "id": 5,
+ "name": "Test Nexus Child One",
+ "url": "http://localhost:32768/api/dcim/devices/5/"
},
- "display": "Ethernet1/1",
+ "display": "Ethernet2/1",
"duplex": null,
"enabled": true,
- "id": 1,
+ "id": 2,
"ip_addresses": [
{
- "address": "172.16.180.11/24",
+ "address": "172.16.180.12/24",
"comments": "",
"custom_fields": {},
"description": "",
- "display": "172.16.180.11/24",
- "dns_name": "",
+ "display": "172.16.180.12/24",
+ "dns_name": "nexus.example.com",
"family": {
"label": "IPv4",
"value": 4
},
- "id": 3,
+ "id": 4,
"nat_inside": null,
"nat_outside": [],
"role": null,
@@ -51,6 +52,7 @@
},
"tags": [],
"tenant": null,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/4/",
"vrf": null
}
],
@@ -65,7 +67,7 @@
"mode": null,
"module": null,
"mtu": null,
- "name": "Ethernet1/1",
+ "name": "Ethernet2/1",
"parent": null,
"poe_mode": null,
"poe_type": null,
@@ -82,6 +84,7 @@
"value": "1000base-t"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/2/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -101,27 +104,28 @@
"custom_fields": {},
"description": "",
"device": {
- "display": "Test Nexus Child One",
- "id": 5,
- "name": "Test Nexus Child One"
+ "display": "Test Nexus One",
+ "id": 4,
+ "name": "Test Nexus One",
+ "url": "http://localhost:32768/api/dcim/devices/4/"
},
- "display": "Ethernet2/1",
+ "display": "Ethernet1/1",
"duplex": null,
"enabled": true,
- "id": 2,
+ "id": 1,
"ip_addresses": [
{
- "address": "172.16.180.12/24",
+ "address": "172.16.180.11/24",
"comments": "",
"custom_fields": {},
"description": "",
- "display": "172.16.180.12/24",
- "dns_name": "nexus.example.com",
+ "display": "172.16.180.11/24",
+ "dns_name": "",
"family": {
"label": "IPv4",
"value": 4
},
- "id": 4,
+ "id": 3,
"nat_inside": null,
"nat_outside": [],
"role": null,
@@ -131,6 +135,7 @@
},
"tags": [],
"tenant": null,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/3/",
"vrf": null
}
],
@@ -145,7 +150,7 @@
"mode": null,
"module": null,
"mtu": null,
- "name": "Ethernet2/1",
+ "name": "Ethernet1/1",
"parent": null,
"poe_mode": null,
"poe_type": null,
@@ -162,6 +167,7 @@
"value": "1000base-t"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/1/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -183,7 +189,8 @@
"device": {
"display": "Test Nexus One",
"id": 4,
- "name": "Test Nexus One"
+ "name": "Test Nexus One",
+ "url": "http://localhost:32768/api/dcim/devices/4/"
},
"display": "wlink1",
"duplex": null,
@@ -218,6 +225,7 @@
"value": "ieee802.11a"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/6/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -246,7 +254,8 @@
"device": {
"display": "Test Nexus One",
"id": 4,
- "name": "Test Nexus One"
+ "name": "Test Nexus One",
+ "url": "http://localhost:32768/api/dcim/devices/4/"
},
"display": "telnet (TCP/23)",
"id": 3,
@@ -260,6 +269,7 @@
"value": "tcp"
},
"tags": [],
+ "url": "http://localhost:32768/api/ipam/services/3/",
"virtual_machine": null
}
],
@@ -323,7 +333,8 @@
"device": {
"display": "test100 (123456789)",
"id": 1,
- "name": "test100"
+ "name": "test100",
+ "url": "http://localhost:32768/api/dcim/devices/1/"
},
"display": "GigabitEthernet1",
"duplex": null,
@@ -351,6 +362,7 @@
},
"tags": [],
"tenant": null,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/1/",
"vrf": null
}
],
@@ -382,6 +394,7 @@
"value": "1000base-t"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/3/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -403,7 +416,8 @@
"device": {
"display": "test100 (123456789)",
"id": 1,
- "name": "test100"
+ "name": "test100",
+ "url": "http://localhost:32768/api/dcim/devices/1/"
},
"display": "GigabitEthernet2",
"duplex": null,
@@ -431,6 +445,7 @@
},
"tags": [],
"tenant": null,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/2/",
"vrf": null
}
],
@@ -462,6 +477,7 @@
"value": "1000base-t"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/4/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -483,7 +499,8 @@
"device": {
"display": "test100 (123456789)",
"id": 1,
- "name": "test100"
+ "name": "test100",
+ "url": "http://localhost:32768/api/dcim/devices/1/"
},
"display": "wlink1",
"duplex": null,
@@ -518,6 +535,7 @@
"value": "ieee802.11a"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/5/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -550,7 +568,8 @@
"device": {
"display": "test100 (123456789)",
"id": 1,
- "name": "test100"
+ "name": "test100",
+ "url": "http://localhost:32768/api/dcim/devices/1/"
},
"display": "ssh (TCP/22)",
"id": 1,
@@ -564,6 +583,7 @@
"value": "tcp"
},
"tags": [],
+ "url": "http://localhost:32768/api/ipam/services/1/",
"virtual_machine": null
},
{
@@ -573,7 +593,8 @@
"device": {
"display": "test100 (123456789)",
"id": 1,
- "name": "test100"
+ "name": "test100",
+ "url": "http://localhost:32768/api/dcim/devices/1/"
},
"display": "http (TCP/80)",
"id": 2,
@@ -582,13 +603,15 @@
"address": "172.16.180.1/24",
"display": "172.16.180.1/24",
"family": 4,
- "id": 1
+ "id": 1,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/1/"
},
{
"address": "2001::1:1/64",
"display": "2001::1:1/64",
"family": 6,
- "id": 2
+ "id": 2,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/2/"
}
],
"name": "http",
@@ -600,6 +623,7 @@
"value": "tcp"
},
"tags": [],
+ "url": "http://localhost:32768/api/ipam/services/2/",
"virtual_machine": null
}
],
@@ -617,6 +641,7 @@
"cluster_type": "test-cluster-type",
"config_context": {},
"custom_fields": {},
+ "disk": 170,
"interfaces": [
{
"bridge": null,
@@ -637,10 +662,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/1/",
"virtual_machine": {
"display": "test100-vm",
"id": 1,
- "name": "test100-vm"
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
},
"vrf": null
},
@@ -663,10 +690,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/2/",
"virtual_machine": {
"display": "test100-vm",
"id": 1,
- "name": "test100-vm"
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
},
"vrf": null
},
@@ -689,10 +718,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/3/",
"virtual_machine": {
"display": "test100-vm",
"id": 1,
- "name": "test100-vm"
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
},
"vrf": null
},
@@ -715,10 +746,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/4/",
"virtual_machine": {
"display": "test100-vm",
"id": 1,
- "name": "test100-vm"
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
},
"vrf": null
},
@@ -741,10 +774,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/5/",
"virtual_machine": {
"display": "test100-vm",
"id": 1,
- "name": "test100-vm"
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
},
"vrf": null
}
@@ -790,10 +825,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/6/",
"virtual_machine": {
"display": "test101-vm",
"id": 2,
- "name": "test101-vm"
+ "name": "test101-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/2/"
},
"vrf": null
},
@@ -816,10 +853,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/7/",
"virtual_machine": {
"display": "test101-vm",
"id": 2,
- "name": "test101-vm"
+ "name": "test101-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/2/"
},
"vrf": null
},
@@ -842,10 +881,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/8/",
"virtual_machine": {
"display": "test101-vm",
"id": 2,
- "name": "test101-vm"
+ "name": "test101-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/2/"
},
"vrf": null
},
@@ -868,10 +909,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/9/",
"virtual_machine": {
"display": "test101-vm",
"id": 2,
- "name": "test101-vm"
+ "name": "test101-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/2/"
},
"vrf": null
},
@@ -894,10 +937,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/10/",
"virtual_machine": {
"display": "test101-vm",
"id": 2,
- "name": "test101-vm"
+ "name": "test101-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/2/"
},
"vrf": null
}
diff --git a/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-jinja2.json b/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-jinja2.json
index 119e5633d..d104c5cea 100644
--- a/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-jinja2.json
+++ b/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-jinja2.json
@@ -145,6 +145,7 @@
"cluster_group": "test-cluster-group",
"cluster_type": "test-cluster-type",
"custom_fields": {},
+ "disk": 170,
"is_virtual": true,
"locations": [],
"regions": [
diff --git a/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-legacy.json b/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-legacy.json
index 6df5dbf2b..46526ced7 100644
--- a/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-legacy.json
+++ b/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-legacy.json
@@ -69,7 +69,8 @@
"device": {
"display": "Test Nexus One",
"id": 4,
- "name": "Test Nexus One"
+ "name": "Test Nexus One",
+ "url": "http://localhost:32768/api/dcim/devices/4/"
},
"display": "telnet (TCP/23)",
"id": 3,
@@ -83,6 +84,7 @@
"value": "tcp"
},
"tags": [],
+ "url": "http://localhost:32768/api/ipam/services/3/",
"virtual_machine": null
}
],
@@ -124,10 +126,12 @@
"value": "tcp"
},
"tags": [],
+ "url": "http://localhost:32768/api/ipam/services/4/",
"virtual_machine": {
"display": "Test VM With Spaces",
"id": 6,
- "name": "Test VM With Spaces"
+ "name": "Test VM With Spaces",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/6/"
}
}
],
@@ -213,7 +217,8 @@
"device": {
"display": "test100 (123456789)",
"id": 1,
- "name": "test100"
+ "name": "test100",
+ "url": "http://localhost:32768/api/dcim/devices/1/"
},
"display": "ssh (TCP/22)",
"id": 1,
@@ -227,6 +232,7 @@
"value": "tcp"
},
"tags": [],
+ "url": "http://localhost:32768/api/ipam/services/1/",
"virtual_machine": null
},
{
@@ -236,7 +242,8 @@
"device": {
"display": "test100 (123456789)",
"id": 1,
- "name": "test100"
+ "name": "test100",
+ "url": "http://localhost:32768/api/dcim/devices/1/"
},
"display": "http (TCP/80)",
"id": 2,
@@ -245,13 +252,15 @@
"address": "172.16.180.1/24",
"display": "172.16.180.1/24",
"family": 4,
- "id": 1
+ "id": 1,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/1/"
},
{
"address": "2001::1:1/64",
"display": "2001::1:1/64",
"family": 6,
- "id": 2
+ "id": 2,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/2/"
}
],
"name": "http",
@@ -263,6 +272,7 @@
"value": "tcp"
},
"tags": [],
+ "url": "http://localhost:32768/api/ipam/services/2/",
"virtual_machine": null
}
],
@@ -281,6 +291,7 @@
"cluster_group": "test-cluster-group",
"cluster_type": "test-cluster-type",
"custom_fields": {},
+ "disk": 170,
"is_virtual": true,
"local_context_data": [
null
diff --git a/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-noracks.json b/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-noracks.json
index b61454e00..afd963a7b 100644
--- a/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-noracks.json
+++ b/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-noracks.json
@@ -61,27 +61,28 @@
"custom_fields": {},
"description": "",
"device": {
- "display": "Test Nexus One",
- "id": 4,
- "name": "Test Nexus One"
+ "display": "Test Nexus Child One",
+ "id": 5,
+ "name": "Test Nexus Child One",
+ "url": "http://localhost:32768/api/dcim/devices/5/"
},
- "display": "Ethernet1/1",
+ "display": "Ethernet2/1",
"duplex": null,
"enabled": true,
- "id": 1,
+ "id": 2,
"ip_addresses": [
{
- "address": "172.16.180.11/24",
+ "address": "172.16.180.12/24",
"comments": "",
"custom_fields": {},
"description": "",
- "display": "172.16.180.11/24",
- "dns_name": "",
+ "display": "172.16.180.12/24",
+ "dns_name": "nexus.example.com",
"family": {
"label": "IPv4",
"value": 4
},
- "id": 3,
+ "id": 4,
"nat_inside": null,
"nat_outside": [],
"role": null,
@@ -91,6 +92,7 @@
},
"tags": [],
"tenant": null,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/4/",
"vrf": null
}
],
@@ -105,7 +107,7 @@
"mode": null,
"module": null,
"mtu": null,
- "name": "Ethernet1/1",
+ "name": "Ethernet2/1",
"parent": null,
"poe_mode": null,
"poe_type": null,
@@ -122,6 +124,7 @@
"value": "1000base-t"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/2/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -141,27 +144,28 @@
"custom_fields": {},
"description": "",
"device": {
- "display": "Test Nexus Child One",
- "id": 5,
- "name": "Test Nexus Child One"
+ "display": "Test Nexus One",
+ "id": 4,
+ "name": "Test Nexus One",
+ "url": "http://localhost:32768/api/dcim/devices/4/"
},
- "display": "Ethernet2/1",
+ "display": "Ethernet1/1",
"duplex": null,
"enabled": true,
- "id": 2,
+ "id": 1,
"ip_addresses": [
{
- "address": "172.16.180.12/24",
+ "address": "172.16.180.11/24",
"comments": "",
"custom_fields": {},
"description": "",
- "display": "172.16.180.12/24",
- "dns_name": "nexus.example.com",
+ "display": "172.16.180.11/24",
+ "dns_name": "",
"family": {
"label": "IPv4",
"value": 4
},
- "id": 4,
+ "id": 3,
"nat_inside": null,
"nat_outside": [],
"role": null,
@@ -171,6 +175,7 @@
},
"tags": [],
"tenant": null,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/3/",
"vrf": null
}
],
@@ -185,7 +190,7 @@
"mode": null,
"module": null,
"mtu": null,
- "name": "Ethernet2/1",
+ "name": "Ethernet1/1",
"parent": null,
"poe_mode": null,
"poe_type": null,
@@ -202,6 +207,7 @@
"value": "1000base-t"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/1/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -223,7 +229,8 @@
"device": {
"display": "Test Nexus One",
"id": 4,
- "name": "Test Nexus One"
+ "name": "Test Nexus One",
+ "url": "http://localhost:32768/api/dcim/devices/4/"
},
"display": "wlink1",
"duplex": null,
@@ -258,6 +265,7 @@
"value": "ieee802.11a"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/6/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -286,7 +294,8 @@
"device": {
"display": "Test Nexus One",
"id": 4,
- "name": "Test Nexus One"
+ "name": "Test Nexus One",
+ "url": "http://localhost:32768/api/dcim/devices/4/"
},
"display": "telnet (TCP/23)",
"id": 3,
@@ -300,6 +309,7 @@
"value": "tcp"
},
"tags": [],
+ "url": "http://localhost:32768/api/ipam/services/3/",
"virtual_machine": null
}
],
@@ -340,10 +350,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/11/",
"virtual_machine": {
"display": "Test VM With Spaces",
"id": 6,
- "name": "Test VM With Spaces"
+ "name": "Test VM With Spaces",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/6/"
},
"vrf": null
},
@@ -366,10 +378,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/12/",
"virtual_machine": {
"display": "Test VM With Spaces",
"id": 6,
- "name": "Test VM With Spaces"
+ "name": "Test VM With Spaces",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/6/"
},
"vrf": null
}
@@ -397,10 +411,12 @@
"value": "tcp"
},
"tags": [],
+ "url": "http://localhost:32768/api/ipam/services/4/",
"virtual_machine": {
"display": "Test VM With Spaces",
"id": 6,
- "name": "Test VM With Spaces"
+ "name": "Test VM With Spaces",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/6/"
}
}
],
@@ -478,7 +494,8 @@
"device": {
"display": "test100 (123456789)",
"id": 1,
- "name": "test100"
+ "name": "test100",
+ "url": "http://localhost:32768/api/dcim/devices/1/"
},
"display": "GigabitEthernet1",
"duplex": null,
@@ -506,6 +523,7 @@
},
"tags": [],
"tenant": null,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/1/",
"vrf": null
}
],
@@ -537,6 +555,7 @@
"value": "1000base-t"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/3/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -558,7 +577,8 @@
"device": {
"display": "test100 (123456789)",
"id": 1,
- "name": "test100"
+ "name": "test100",
+ "url": "http://localhost:32768/api/dcim/devices/1/"
},
"display": "GigabitEthernet2",
"duplex": null,
@@ -586,6 +606,7 @@
},
"tags": [],
"tenant": null,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/2/",
"vrf": null
}
],
@@ -617,6 +638,7 @@
"value": "1000base-t"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/4/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -638,7 +660,8 @@
"device": {
"display": "test100 (123456789)",
"id": 1,
- "name": "test100"
+ "name": "test100",
+ "url": "http://localhost:32768/api/dcim/devices/1/"
},
"display": "wlink1",
"duplex": null,
@@ -673,6 +696,7 @@
"value": "ieee802.11a"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/5/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -704,7 +728,8 @@
"device": {
"display": "test100 (123456789)",
"id": 1,
- "name": "test100"
+ "name": "test100",
+ "url": "http://localhost:32768/api/dcim/devices/1/"
},
"display": "ssh (TCP/22)",
"id": 1,
@@ -718,6 +743,7 @@
"value": "tcp"
},
"tags": [],
+ "url": "http://localhost:32768/api/ipam/services/1/",
"virtual_machine": null
},
{
@@ -727,7 +753,8 @@
"device": {
"display": "test100 (123456789)",
"id": 1,
- "name": "test100"
+ "name": "test100",
+ "url": "http://localhost:32768/api/dcim/devices/1/"
},
"display": "http (TCP/80)",
"id": 2,
@@ -736,13 +763,15 @@
"address": "172.16.180.1/24",
"display": "172.16.180.1/24",
"family": 4,
- "id": 1
+ "id": 1,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/1/"
},
{
"address": "2001::1:1/64",
"display": "2001::1:1/64",
"family": 6,
- "id": 2
+ "id": 2,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/2/"
}
],
"name": "http",
@@ -754,6 +783,7 @@
"value": "tcp"
},
"tags": [],
+ "url": "http://localhost:32768/api/ipam/services/2/",
"virtual_machine": null
}
],
@@ -775,6 +805,7 @@
{}
],
"custom_fields": {},
+ "disk": 170,
"interfaces": [
{
"bridge": null,
@@ -795,10 +826,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/1/",
"virtual_machine": {
"display": "test100-vm",
"id": 1,
- "name": "test100-vm"
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
},
"vrf": null
},
@@ -821,10 +854,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/2/",
"virtual_machine": {
"display": "test100-vm",
"id": 1,
- "name": "test100-vm"
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
},
"vrf": null
},
@@ -847,10 +882,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/3/",
"virtual_machine": {
"display": "test100-vm",
"id": 1,
- "name": "test100-vm"
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
},
"vrf": null
},
@@ -873,10 +910,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/4/",
"virtual_machine": {
"display": "test100-vm",
"id": 1,
- "name": "test100-vm"
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
},
"vrf": null
},
@@ -899,10 +938,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/5/",
"virtual_machine": {
"display": "test100-vm",
"id": 1,
- "name": "test100-vm"
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
},
"vrf": null
}
@@ -954,10 +995,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/6/",
"virtual_machine": {
"display": "test101-vm",
"id": 2,
- "name": "test101-vm"
+ "name": "test101-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/2/"
},
"vrf": null
},
@@ -980,10 +1023,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/7/",
"virtual_machine": {
"display": "test101-vm",
"id": 2,
- "name": "test101-vm"
+ "name": "test101-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/2/"
},
"vrf": null
},
@@ -1006,10 +1051,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/8/",
"virtual_machine": {
"display": "test101-vm",
"id": 2,
- "name": "test101-vm"
+ "name": "test101-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/2/"
},
"vrf": null
},
@@ -1032,10 +1079,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/9/",
"virtual_machine": {
"display": "test101-vm",
"id": 2,
- "name": "test101-vm"
+ "name": "test101-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/2/"
},
"vrf": null
},
@@ -1058,10 +1107,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/10/",
"virtual_machine": {
"display": "test101-vm",
"id": 2,
- "name": "test101-vm"
+ "name": "test101-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/2/"
},
"vrf": null
}
diff --git a/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-options-flatten.json b/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-options-flatten.json
index 8e019bd84..047a60cf4 100644
--- a/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-options-flatten.json
+++ b/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-options-flatten.json
@@ -64,27 +64,28 @@
"custom_fields": {},
"description": "",
"device": {
- "display": "Test Nexus One",
- "id": 4,
- "name": "Test Nexus One"
+ "display": "Test Nexus Child One",
+ "id": 5,
+ "name": "Test Nexus Child One",
+ "url": "http://localhost:32768/api/dcim/devices/5/"
},
- "display": "Ethernet1/1",
+ "display": "Ethernet2/1",
"duplex": null,
"enabled": true,
- "id": 1,
+ "id": 2,
"ip_addresses": [
{
- "address": "172.16.180.11/24",
+ "address": "172.16.180.12/24",
"comments": "",
"custom_fields": {},
"description": "",
- "display": "172.16.180.11/24",
- "dns_name": "",
+ "display": "172.16.180.12/24",
+ "dns_name": "nexus.example.com",
"family": {
"label": "IPv4",
"value": 4
},
- "id": 3,
+ "id": 4,
"nat_inside": null,
"nat_outside": [],
"role": null,
@@ -94,6 +95,7 @@
},
"tags": [],
"tenant": null,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/4/",
"vrf": null
}
],
@@ -108,7 +110,7 @@
"mode": null,
"module": null,
"mtu": null,
- "name": "Ethernet1/1",
+ "name": "Ethernet2/1",
"parent": null,
"poe_mode": null,
"poe_type": null,
@@ -125,6 +127,7 @@
"value": "1000base-t"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/2/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -144,27 +147,28 @@
"custom_fields": {},
"description": "",
"device": {
- "display": "Test Nexus Child One",
- "id": 5,
- "name": "Test Nexus Child One"
+ "display": "Test Nexus One",
+ "id": 4,
+ "name": "Test Nexus One",
+ "url": "http://localhost:32768/api/dcim/devices/4/"
},
- "display": "Ethernet2/1",
+ "display": "Ethernet1/1",
"duplex": null,
"enabled": true,
- "id": 2,
+ "id": 1,
"ip_addresses": [
{
- "address": "172.16.180.12/24",
+ "address": "172.16.180.11/24",
"comments": "",
"custom_fields": {},
"description": "",
- "display": "172.16.180.12/24",
- "dns_name": "nexus.example.com",
+ "display": "172.16.180.11/24",
+ "dns_name": "",
"family": {
"label": "IPv4",
"value": 4
},
- "id": 4,
+ "id": 3,
"nat_inside": null,
"nat_outside": [],
"role": null,
@@ -174,6 +178,7 @@
},
"tags": [],
"tenant": null,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/3/",
"vrf": null
}
],
@@ -188,7 +193,7 @@
"mode": null,
"module": null,
"mtu": null,
- "name": "Ethernet2/1",
+ "name": "Ethernet1/1",
"parent": null,
"poe_mode": null,
"poe_type": null,
@@ -205,6 +210,7 @@
"value": "1000base-t"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/1/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -226,7 +232,8 @@
"device": {
"display": "Test Nexus One",
"id": 4,
- "name": "Test Nexus One"
+ "name": "Test Nexus One",
+ "url": "http://localhost:32768/api/dcim/devices/4/"
},
"display": "wlink1",
"duplex": null,
@@ -261,6 +268,7 @@
"value": "ieee802.11a"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/6/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -289,7 +297,8 @@
"device": {
"display": "Test Nexus One",
"id": 4,
- "name": "Test Nexus One"
+ "name": "Test Nexus One",
+ "url": "http://localhost:32768/api/dcim/devices/4/"
},
"display": "telnet (TCP/23)",
"id": 3,
@@ -303,6 +312,7 @@
"value": "tcp"
},
"tags": [],
+ "url": "http://localhost:32768/api/ipam/services/3/",
"virtual_machine": null
}
],
@@ -337,10 +347,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/11/",
"virtual_machine": {
"display": "Test VM With Spaces",
"id": 6,
- "name": "Test VM With Spaces"
+ "name": "Test VM With Spaces",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/6/"
},
"vrf": null
},
@@ -363,10 +375,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/12/",
"virtual_machine": {
"display": "Test VM With Spaces",
"id": 6,
- "name": "Test VM With Spaces"
+ "name": "Test VM With Spaces",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/6/"
},
"vrf": null
}
@@ -392,10 +406,12 @@
"value": "tcp"
},
"tags": [],
+ "url": "http://localhost:32768/api/ipam/services/4/",
"virtual_machine": {
"display": "Test VM With Spaces",
"id": 6,
- "name": "Test VM With Spaces"
+ "name": "Test VM With Spaces",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/6/"
}
}
],
@@ -450,7 +466,8 @@
"device": {
"display": "test100 (123456789)",
"id": 1,
- "name": "test100"
+ "name": "test100",
+ "url": "http://localhost:32768/api/dcim/devices/1/"
},
"display": "GigabitEthernet1",
"duplex": null,
@@ -478,6 +495,7 @@
},
"tags": [],
"tenant": null,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/1/",
"vrf": null
}
],
@@ -509,6 +527,7 @@
"value": "1000base-t"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/3/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -530,7 +549,8 @@
"device": {
"display": "test100 (123456789)",
"id": 1,
- "name": "test100"
+ "name": "test100",
+ "url": "http://localhost:32768/api/dcim/devices/1/"
},
"display": "GigabitEthernet2",
"duplex": null,
@@ -558,6 +578,7 @@
},
"tags": [],
"tenant": null,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/2/",
"vrf": null
}
],
@@ -589,6 +610,7 @@
"value": "1000base-t"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/4/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -610,7 +632,8 @@
"device": {
"display": "test100 (123456789)",
"id": 1,
- "name": "test100"
+ "name": "test100",
+ "url": "http://localhost:32768/api/dcim/devices/1/"
},
"display": "wlink1",
"duplex": null,
@@ -645,6 +668,7 @@
"value": "ieee802.11a"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/5/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -675,7 +699,8 @@
"device": {
"display": "test100 (123456789)",
"id": 1,
- "name": "test100"
+ "name": "test100",
+ "url": "http://localhost:32768/api/dcim/devices/1/"
},
"display": "ssh (TCP/22)",
"id": 1,
@@ -689,6 +714,7 @@
"value": "tcp"
},
"tags": [],
+ "url": "http://localhost:32768/api/ipam/services/1/",
"virtual_machine": null
},
{
@@ -698,7 +724,8 @@
"device": {
"display": "test100 (123456789)",
"id": 1,
- "name": "test100"
+ "name": "test100",
+ "url": "http://localhost:32768/api/dcim/devices/1/"
},
"display": "http (TCP/80)",
"id": 2,
@@ -707,13 +734,15 @@
"address": "172.16.180.1/24",
"display": "172.16.180.1/24",
"family": 4,
- "id": 1
+ "id": 1,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/1/"
},
{
"address": "2001::1:1/64",
"display": "2001::1:1/64",
"family": 6,
- "id": 2
+ "id": 2,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/2/"
}
],
"name": "http",
@@ -725,6 +754,7 @@
"value": "tcp"
},
"tags": [],
+ "url": "http://localhost:32768/api/ipam/services/2/",
"virtual_machine": null
}
],
@@ -740,6 +770,7 @@
"cluster": "Test Cluster",
"cluster_group": "test-cluster-group",
"cluster_type": "test-cluster-type",
+ "disk": 170,
"interfaces": [
{
"bridge": null,
@@ -760,10 +791,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/1/",
"virtual_machine": {
"display": "test100-vm",
"id": 1,
- "name": "test100-vm"
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
},
"vrf": null
},
@@ -786,10 +819,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/2/",
"virtual_machine": {
"display": "test100-vm",
"id": 1,
- "name": "test100-vm"
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
},
"vrf": null
},
@@ -812,10 +847,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/3/",
"virtual_machine": {
"display": "test100-vm",
"id": 1,
- "name": "test100-vm"
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
},
"vrf": null
},
@@ -838,10 +875,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/4/",
"virtual_machine": {
"display": "test100-vm",
"id": 1,
- "name": "test100-vm"
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
},
"vrf": null
},
@@ -864,10 +903,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/5/",
"virtual_machine": {
"display": "test100-vm",
"id": 1,
- "name": "test100-vm"
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
},
"vrf": null
}
@@ -911,10 +952,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/6/",
"virtual_machine": {
"display": "test101-vm",
"id": 2,
- "name": "test101-vm"
+ "name": "test101-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/2/"
},
"vrf": null
},
@@ -937,10 +980,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/7/",
"virtual_machine": {
"display": "test101-vm",
"id": 2,
- "name": "test101-vm"
+ "name": "test101-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/2/"
},
"vrf": null
},
@@ -963,10 +1008,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/8/",
"virtual_machine": {
"display": "test101-vm",
"id": 2,
- "name": "test101-vm"
+ "name": "test101-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/2/"
},
"vrf": null
},
@@ -989,10 +1036,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/9/",
"virtual_machine": {
"display": "test101-vm",
"id": 2,
- "name": "test101-vm"
+ "name": "test101-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/2/"
},
"vrf": null
},
@@ -1015,10 +1064,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/10/",
"virtual_machine": {
"display": "test101-vm",
"id": 2,
- "name": "test101-vm"
+ "name": "test101-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/2/"
},
"vrf": null
}
diff --git a/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-options.json b/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-options.json
index 119e5633d..d104c5cea 100644
--- a/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-options.json
+++ b/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-options.json
@@ -145,6 +145,7 @@
"cluster_group": "test-cluster-group",
"cluster_type": "test-cluster-type",
"custom_fields": {},
+ "disk": 170,
"is_virtual": true,
"locations": [],
"regions": [
diff --git a/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-plurals-flatten.json b/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-plurals-flatten.json
index bf84ee743..12e096f53 100644
--- a/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-plurals-flatten.json
+++ b/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-plurals-flatten.json
@@ -189,6 +189,7 @@
"cluster": "Test Cluster",
"cluster_group": "test-cluster-group",
"cluster_type": "test-cluster-type",
+ "disk": 170,
"is_virtual": true,
"local_context_data": [
null
diff --git a/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-plurals.json b/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-plurals.json
index 22f9d4e5f..50b8cbbdf 100644
--- a/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-plurals.json
+++ b/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory-plurals.json
@@ -66,27 +66,28 @@
"custom_fields": {},
"description": "",
"device": {
- "display": "Test Nexus One",
- "id": 4,
- "name": "Test Nexus One"
+ "display": "Test Nexus Child One",
+ "id": 5,
+ "name": "Test Nexus Child One",
+ "url": "http://localhost:32768/api/dcim/devices/5/"
},
- "display": "Ethernet1/1",
+ "display": "Ethernet2/1",
"duplex": null,
"enabled": true,
- "id": 1,
+ "id": 2,
"ip_addresses": [
{
- "address": "172.16.180.11/24",
+ "address": "172.16.180.12/24",
"comments": "",
"custom_fields": {},
"description": "",
- "display": "172.16.180.11/24",
- "dns_name": "",
+ "display": "172.16.180.12/24",
+ "dns_name": "nexus.example.com",
"family": {
"label": "IPv4",
"value": 4
},
- "id": 3,
+ "id": 4,
"nat_inside": null,
"nat_outside": [],
"role": null,
@@ -96,6 +97,7 @@
},
"tags": [],
"tenant": null,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/4/",
"vrf": null
}
],
@@ -110,7 +112,7 @@
"mode": null,
"module": null,
"mtu": null,
- "name": "Ethernet1/1",
+ "name": "Ethernet2/1",
"parent": null,
"poe_mode": null,
"poe_type": null,
@@ -127,6 +129,7 @@
"value": "1000base-t"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/2/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -146,27 +149,28 @@
"custom_fields": {},
"description": "",
"device": {
- "display": "Test Nexus Child One",
- "id": 5,
- "name": "Test Nexus Child One"
+ "display": "Test Nexus One",
+ "id": 4,
+ "name": "Test Nexus One",
+ "url": "http://localhost:32768/api/dcim/devices/4/"
},
- "display": "Ethernet2/1",
+ "display": "Ethernet1/1",
"duplex": null,
"enabled": true,
- "id": 2,
+ "id": 1,
"ip_addresses": [
{
- "address": "172.16.180.12/24",
+ "address": "172.16.180.11/24",
"comments": "",
"custom_fields": {},
"description": "",
- "display": "172.16.180.12/24",
- "dns_name": "nexus.example.com",
+ "display": "172.16.180.11/24",
+ "dns_name": "",
"family": {
"label": "IPv4",
"value": 4
},
- "id": 4,
+ "id": 3,
"nat_inside": null,
"nat_outside": [],
"role": null,
@@ -176,6 +180,7 @@
},
"tags": [],
"tenant": null,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/3/",
"vrf": null
}
],
@@ -190,7 +195,7 @@
"mode": null,
"module": null,
"mtu": null,
- "name": "Ethernet2/1",
+ "name": "Ethernet1/1",
"parent": null,
"poe_mode": null,
"poe_type": null,
@@ -207,6 +212,7 @@
"value": "1000base-t"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/1/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -228,7 +234,8 @@
"device": {
"display": "Test Nexus One",
"id": 4,
- "name": "Test Nexus One"
+ "name": "Test Nexus One",
+ "url": "http://localhost:32768/api/dcim/devices/4/"
},
"display": "wlink1",
"duplex": null,
@@ -263,6 +270,7 @@
"value": "ieee802.11a"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/6/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -295,7 +303,8 @@
"device": {
"display": "Test Nexus One",
"id": 4,
- "name": "Test Nexus One"
+ "name": "Test Nexus One",
+ "url": "http://localhost:32768/api/dcim/devices/4/"
},
"display": "telnet (TCP/23)",
"id": 3,
@@ -309,6 +318,7 @@
"value": "tcp"
},
"tags": [],
+ "url": "http://localhost:32768/api/ipam/services/3/",
"virtual_machine": null
}
],
@@ -349,10 +359,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/11/",
"virtual_machine": {
"display": "Test VM With Spaces",
"id": 6,
- "name": "Test VM With Spaces"
+ "name": "Test VM With Spaces",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/6/"
},
"vrf": null
},
@@ -375,10 +387,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/12/",
"virtual_machine": {
"display": "Test VM With Spaces",
"id": 6,
- "name": "Test VM With Spaces"
+ "name": "Test VM With Spaces",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/6/"
},
"vrf": null
}
@@ -407,10 +421,12 @@
"value": "tcp"
},
"tags": [],
+ "url": "http://localhost:32768/api/ipam/services/4/",
"virtual_machine": {
"display": "Test VM With Spaces",
"id": 6,
- "name": "Test VM With Spaces"
+ "name": "Test VM With Spaces",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/6/"
}
}
],
@@ -495,7 +511,8 @@
"device": {
"display": "test100 (123456789)",
"id": 1,
- "name": "test100"
+ "name": "test100",
+ "url": "http://localhost:32768/api/dcim/devices/1/"
},
"display": "GigabitEthernet1",
"duplex": null,
@@ -523,6 +540,7 @@
},
"tags": [],
"tenant": null,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/1/",
"vrf": null
}
],
@@ -554,6 +572,7 @@
"value": "1000base-t"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/3/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -575,7 +594,8 @@
"device": {
"display": "test100 (123456789)",
"id": 1,
- "name": "test100"
+ "name": "test100",
+ "url": "http://localhost:32768/api/dcim/devices/1/"
},
"display": "GigabitEthernet2",
"duplex": null,
@@ -603,6 +623,7 @@
},
"tags": [],
"tenant": null,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/2/",
"vrf": null
}
],
@@ -634,6 +655,7 @@
"value": "1000base-t"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/4/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -655,7 +677,8 @@
"device": {
"display": "test100 (123456789)",
"id": 1,
- "name": "test100"
+ "name": "test100",
+ "url": "http://localhost:32768/api/dcim/devices/1/"
},
"display": "wlink1",
"duplex": null,
@@ -690,6 +713,7 @@
"value": "ieee802.11a"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/5/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -725,7 +749,8 @@
"device": {
"display": "test100 (123456789)",
"id": 1,
- "name": "test100"
+ "name": "test100",
+ "url": "http://localhost:32768/api/dcim/devices/1/"
},
"display": "ssh (TCP/22)",
"id": 1,
@@ -739,6 +764,7 @@
"value": "tcp"
},
"tags": [],
+ "url": "http://localhost:32768/api/ipam/services/1/",
"virtual_machine": null
},
{
@@ -748,7 +774,8 @@
"device": {
"display": "test100 (123456789)",
"id": 1,
- "name": "test100"
+ "name": "test100",
+ "url": "http://localhost:32768/api/dcim/devices/1/"
},
"display": "http (TCP/80)",
"id": 2,
@@ -757,13 +784,15 @@
"address": "172.16.180.1/24",
"display": "172.16.180.1/24",
"family": 4,
- "id": 1
+ "id": 1,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/1/"
},
{
"address": "2001::1:1/64",
"display": "2001::1:1/64",
"family": 6,
- "id": 2
+ "id": 2,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/2/"
}
],
"name": "http",
@@ -775,6 +804,7 @@
"value": "tcp"
},
"tags": [],
+ "url": "http://localhost:32768/api/ipam/services/2/",
"virtual_machine": null
}
],
@@ -796,6 +826,7 @@
{}
],
"custom_fields": {},
+ "disk": 170,
"interfaces": [
{
"bridge": null,
@@ -816,10 +847,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/1/",
"virtual_machine": {
"display": "test100-vm",
"id": 1,
- "name": "test100-vm"
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
},
"vrf": null
},
@@ -842,10 +875,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/2/",
"virtual_machine": {
"display": "test100-vm",
"id": 1,
- "name": "test100-vm"
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
},
"vrf": null
},
@@ -868,10 +903,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/3/",
"virtual_machine": {
"display": "test100-vm",
"id": 1,
- "name": "test100-vm"
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
},
"vrf": null
},
@@ -894,10 +931,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/4/",
"virtual_machine": {
"display": "test100-vm",
"id": 1,
- "name": "test100-vm"
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
},
"vrf": null
},
@@ -920,10 +959,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/5/",
"virtual_machine": {
"display": "test100-vm",
"id": 1,
- "name": "test100-vm"
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
},
"vrf": null
}
@@ -976,10 +1017,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/6/",
"virtual_machine": {
"display": "test101-vm",
"id": 2,
- "name": "test101-vm"
+ "name": "test101-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/2/"
},
"vrf": null
},
@@ -1002,10 +1045,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/7/",
"virtual_machine": {
"display": "test101-vm",
"id": 2,
- "name": "test101-vm"
+ "name": "test101-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/2/"
},
"vrf": null
},
@@ -1028,10 +1073,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/8/",
"virtual_machine": {
"display": "test101-vm",
"id": 2,
- "name": "test101-vm"
+ "name": "test101-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/2/"
},
"vrf": null
},
@@ -1054,10 +1101,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/9/",
"virtual_machine": {
"display": "test101-vm",
"id": 2,
- "name": "test101-vm"
+ "name": "test101-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/2/"
},
"vrf": null
},
@@ -1080,10 +1129,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/10/",
"virtual_machine": {
"display": "test101-vm",
"id": 2,
- "name": "test101-vm"
+ "name": "test101-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/2/"
},
"vrf": null
}
diff --git a/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory.json b/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory.json
index 360a7ac33..28ef4ac7e 100644
--- a/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory.json
+++ b/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory.json
@@ -22,7 +22,8 @@
"label": "Active",
"value": "active"
},
- "tags": []
+ "tags": [],
+ "virtual_disks": []
},
"Test Nexus One": {
"ansible_host": "172.16.180.12",
@@ -41,30 +42,34 @@
"connected_endpoints_type": null,
"count_fhrp_groups": 0,
"count_ipaddresses": 1,
+ "created": "2024-04-10T12:55:46.117264Z",
"custom_fields": {},
"description": "",
"device": {
- "display": "Test Nexus One",
- "id": 4,
- "name": "Test Nexus One"
+ "display": "Test Nexus Child One",
+ "id": 5,
+ "name": "Test Nexus Child One",
+ "url": "http://localhost:32768/api/dcim/devices/5/"
},
- "display": "Ethernet1/1",
+ "display": "Ethernet2/1",
"duplex": null,
"enabled": true,
- "id": 1,
+ "id": 2,
"ip_addresses": [
{
- "address": "172.16.180.11/24",
+ "address": "172.16.180.12/24",
"comments": "",
+ "created": "2024-04-10T12:55:47.352870Z",
"custom_fields": {},
"description": "",
- "display": "172.16.180.11/24",
- "dns_name": "",
+ "display": "172.16.180.12/24",
+ "dns_name": "nexus.example.com",
"family": {
"label": "IPv4",
"value": 4
},
- "id": 3,
+ "id": 4,
+ "last_updated": "2024-04-10T12:55:47.352897Z",
"nat_inside": null,
"nat_outside": [],
"role": null,
@@ -74,12 +79,14 @@
},
"tags": [],
"tenant": null,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/4/",
"vrf": null
}
],
"l2vpn_termination": null,
"label": "",
"lag": null,
+ "last_updated": "2024-04-10T12:55:46.117288Z",
"link_peers": [],
"link_peers_type": null,
"mac_address": null,
@@ -88,7 +95,7 @@
"mode": null,
"module": null,
"mtu": null,
- "name": "Ethernet1/1",
+ "name": "Ethernet2/1",
"parent": null,
"poe_mode": null,
"poe_type": null,
@@ -105,6 +112,7 @@
"value": "1000base-t"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/2/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -121,30 +129,34 @@
"connected_endpoints_type": null,
"count_fhrp_groups": 0,
"count_ipaddresses": 1,
+ "created": "2024-04-10T12:55:46.039597Z",
"custom_fields": {},
"description": "",
"device": {
- "display": "Test Nexus Child One",
- "id": 5,
- "name": "Test Nexus Child One"
+ "display": "Test Nexus One",
+ "id": 4,
+ "name": "Test Nexus One",
+ "url": "http://localhost:32768/api/dcim/devices/4/"
},
- "display": "Ethernet2/1",
+ "display": "Ethernet1/1",
"duplex": null,
"enabled": true,
- "id": 2,
+ "id": 1,
"ip_addresses": [
{
- "address": "172.16.180.12/24",
+ "address": "172.16.180.11/24",
"comments": "",
+ "created": "2024-04-10T12:55:47.320197Z",
"custom_fields": {},
"description": "",
- "display": "172.16.180.12/24",
- "dns_name": "nexus.example.com",
+ "display": "172.16.180.11/24",
+ "dns_name": "",
"family": {
"label": "IPv4",
"value": 4
},
- "id": 4,
+ "id": 3,
+ "last_updated": "2024-04-10T12:55:47.320220Z",
"nat_inside": null,
"nat_outside": [],
"role": null,
@@ -154,12 +166,14 @@
},
"tags": [],
"tenant": null,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/3/",
"vrf": null
}
],
"l2vpn_termination": null,
"label": "",
"lag": null,
+ "last_updated": "2024-04-10T12:55:46.039623Z",
"link_peers": [],
"link_peers_type": null,
"mac_address": null,
@@ -168,7 +182,7 @@
"mode": null,
"module": null,
"mtu": null,
- "name": "Ethernet2/1",
+ "name": "Ethernet1/1",
"parent": null,
"poe_mode": null,
"poe_type": null,
@@ -185,6 +199,7 @@
"value": "1000base-t"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/1/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -201,12 +216,14 @@
"connected_endpoints_type": null,
"count_fhrp_groups": 0,
"count_ipaddresses": 0,
+ "created": "2024-04-10T12:55:46.563561Z",
"custom_fields": {},
"description": "",
"device": {
"display": "Test Nexus One",
"id": 4,
- "name": "Test Nexus One"
+ "name": "Test Nexus One",
+ "url": "http://localhost:32768/api/dcim/devices/4/"
},
"display": "wlink1",
"duplex": null,
@@ -216,6 +233,7 @@
"l2vpn_termination": null,
"label": "",
"lag": null,
+ "last_updated": "2024-04-10T12:55:46.563586Z",
"link_peers": [],
"link_peers_type": null,
"mac_address": null,
@@ -241,6 +259,7 @@
"value": "ieee802.11a"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/6/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -264,16 +283,19 @@
"services": [
{
"comments": "",
+ "created": "2024-04-10T12:55:50.975124Z",
"custom_fields": {},
"description": "",
"device": {
"display": "Test Nexus One",
"id": 4,
- "name": "Test Nexus One"
+ "name": "Test Nexus One",
+ "url": "http://localhost:32768/api/dcim/devices/4/"
},
"display": "telnet (TCP/23)",
"id": 3,
"ipaddresses": [],
+ "last_updated": "2024-04-10T12:55:50.975148Z",
"name": "telnet",
"ports": [
23
@@ -283,6 +305,7 @@
"value": "tcp"
},
"tags": [],
+ "url": "http://localhost:32768/api/ipam/services/3/",
"virtual_machine": null
}
],
@@ -292,7 +315,8 @@
"label": "Active",
"value": "active"
},
- "tags": []
+ "tags": [],
+ "virtual_disks": []
},
"Test VM With Spaces": {
"cluster": "Test Cluster 2",
@@ -304,6 +328,7 @@
"bridge": null,
"count_fhrp_groups": 0,
"count_ipaddresses": 0,
+ "created": "2024-04-10T12:55:50.463620Z",
"custom_fields": {},
"description": "",
"display": "Eth0",
@@ -311,6 +336,7 @@
"id": 11,
"ip_addresses": [],
"l2vpn_termination": null,
+ "last_updated": "2024-04-10T12:55:50.463653Z",
"mac_address": null,
"mode": null,
"mtu": null,
@@ -319,10 +345,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/11/",
"virtual_machine": {
"display": "Test VM With Spaces",
"id": 6,
- "name": "Test VM With Spaces"
+ "name": "Test VM With Spaces",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/6/"
},
"vrf": null
},
@@ -330,6 +358,7 @@
"bridge": null,
"count_fhrp_groups": 0,
"count_ipaddresses": 0,
+ "created": "2024-04-10T12:55:50.509215Z",
"custom_fields": {},
"description": "",
"display": "Eth1",
@@ -337,6 +366,7 @@
"id": 12,
"ip_addresses": [],
"l2vpn_termination": null,
+ "last_updated": "2024-04-10T12:55:50.509242Z",
"mac_address": null,
"mode": null,
"mtu": null,
@@ -345,10 +375,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/12/",
"virtual_machine": {
"display": "Test VM With Spaces",
"id": 6,
- "name": "Test VM With Spaces"
+ "name": "Test VM With Spaces",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/6/"
},
"vrf": null
}
@@ -359,12 +391,14 @@
"services": [
{
"comments": "",
+ "created": "2024-04-10T12:55:51.008597Z",
"custom_fields": {},
"description": "",
"device": null,
"display": "ssh (TCP/22)",
"id": 4,
"ipaddresses": [],
+ "last_updated": "2024-04-10T12:55:51.008622Z",
"name": "ssh",
"ports": [
22
@@ -374,10 +408,12 @@
"value": "tcp"
},
"tags": [],
+ "url": "http://localhost:32768/api/ipam/services/4/",
"virtual_machine": {
"display": "Test VM With Spaces",
"id": 6,
- "name": "Test VM With Spaces"
+ "name": "Test VM With Spaces",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/6/"
}
}
],
@@ -386,7 +422,8 @@
"label": "Active",
"value": "active"
},
- "tags": []
+ "tags": [],
+ "virtual_disks": []
},
"TestDeviceR1": {
"config_context": {},
@@ -413,7 +450,8 @@
"label": "Active",
"value": "active"
},
- "tags": []
+ "tags": [],
+ "virtual_disks": []
},
"test100": {
"asset_tag": "123456789",
@@ -435,12 +473,14 @@
"connected_endpoints_type": null,
"count_fhrp_groups": 0,
"count_ipaddresses": 1,
+ "created": "2024-04-10T12:55:46.277746Z",
"custom_fields": {},
"description": "",
"device": {
"display": "test100 (123456789)",
"id": 1,
- "name": "test100"
+ "name": "test100",
+ "url": "http://localhost:32768/api/dcim/devices/1/"
},
"display": "GigabitEthernet1",
"duplex": null,
@@ -450,6 +490,7 @@
{
"address": "172.16.180.1/24",
"comments": "",
+ "created": "2024-04-10T12:55:47.245995Z",
"custom_fields": {},
"description": "",
"display": "172.16.180.1/24",
@@ -459,6 +500,7 @@
"value": 4
},
"id": 1,
+ "last_updated": "2024-04-10T12:55:47.246027Z",
"nat_inside": null,
"nat_outside": [],
"role": null,
@@ -468,12 +510,14 @@
},
"tags": [],
"tenant": null,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/1/",
"vrf": null
}
],
"l2vpn_termination": null,
"label": "",
"lag": null,
+ "last_updated": "2024-04-10T12:55:46.277783Z",
"link_peers": [],
"link_peers_type": null,
"mac_address": null,
@@ -499,6 +543,7 @@
"value": "1000base-t"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/3/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -515,12 +560,14 @@
"connected_endpoints_type": null,
"count_fhrp_groups": 0,
"count_ipaddresses": 1,
+ "created": "2024-04-10T12:55:46.342494Z",
"custom_fields": {},
"description": "",
"device": {
"display": "test100 (123456789)",
"id": 1,
- "name": "test100"
+ "name": "test100",
+ "url": "http://localhost:32768/api/dcim/devices/1/"
},
"display": "GigabitEthernet2",
"duplex": null,
@@ -530,6 +577,7 @@
{
"address": "2001::1:1/64",
"comments": "",
+ "created": "2024-04-10T12:55:47.283463Z",
"custom_fields": {},
"description": "",
"display": "2001::1:1/64",
@@ -539,6 +587,7 @@
"value": 6
},
"id": 2,
+ "last_updated": "2024-04-10T12:55:47.283489Z",
"nat_inside": null,
"nat_outside": [],
"role": null,
@@ -548,12 +597,14 @@
},
"tags": [],
"tenant": null,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/2/",
"vrf": null
}
],
"l2vpn_termination": null,
"label": "",
"lag": null,
+ "last_updated": "2024-04-10T12:55:46.342519Z",
"link_peers": [],
"link_peers_type": null,
"mac_address": null,
@@ -579,6 +630,7 @@
"value": "1000base-t"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/4/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -595,12 +647,14 @@
"connected_endpoints_type": null,
"count_fhrp_groups": 0,
"count_ipaddresses": 0,
+ "created": "2024-04-10T12:55:46.501948Z",
"custom_fields": {},
"description": "",
"device": {
"display": "test100 (123456789)",
"id": 1,
- "name": "test100"
+ "name": "test100",
+ "url": "http://localhost:32768/api/dcim/devices/1/"
},
"display": "wlink1",
"duplex": null,
@@ -610,6 +664,7 @@
"l2vpn_termination": null,
"label": "",
"lag": null,
+ "last_updated": "2024-04-10T12:55:46.501983Z",
"link_peers": [],
"link_peers_type": null,
"mac_address": null,
@@ -635,6 +690,7 @@
"value": "ieee802.11a"
},
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/dcim/interfaces/5/",
"vdcs": [],
"vrf": null,
"wireless_lans": [],
@@ -662,16 +718,19 @@
"services": [
{
"comments": "",
+ "created": "2024-04-10T12:55:50.860141Z",
"custom_fields": {},
"description": "",
"device": {
"display": "test100 (123456789)",
"id": 1,
- "name": "test100"
+ "name": "test100",
+ "url": "http://localhost:32768/api/dcim/devices/1/"
},
"display": "ssh (TCP/22)",
"id": 1,
"ipaddresses": [],
+ "last_updated": "2024-04-10T12:55:50.860164Z",
"name": "ssh",
"ports": [
22
@@ -681,16 +740,19 @@
"value": "tcp"
},
"tags": [],
+ "url": "http://localhost:32768/api/ipam/services/1/",
"virtual_machine": null
},
{
"comments": "",
+ "created": "2024-04-10T12:55:50.898501Z",
"custom_fields": {},
"description": "",
"device": {
"display": "test100 (123456789)",
"id": 1,
- "name": "test100"
+ "name": "test100",
+ "url": "http://localhost:32768/api/dcim/devices/1/"
},
"display": "http (TCP/80)",
"id": 2,
@@ -699,15 +761,18 @@
"address": "172.16.180.1/24",
"display": "172.16.180.1/24",
"family": 4,
- "id": 1
+ "id": 1,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/1/"
},
{
"address": "2001::1:1/64",
"display": "2001::1:1/64",
"family": 6,
- "id": 2
+ "id": 2,
+ "url": "http://localhost:32768/api/ipam/ip-addresses/2/"
}
],
+ "last_updated": "2024-04-10T12:55:50.898528Z",
"name": "http",
"ports": [
80
@@ -717,6 +782,7 @@
"value": "tcp"
},
"tags": [],
+ "url": "http://localhost:32768/api/ipam/services/2/",
"virtual_machine": null
}
],
@@ -726,7 +792,45 @@
"label": "Active",
"value": "active"
},
- "tags": []
+ "tags": [],
+ "virtual_disks": [
+ {
+ "created": "2024-04-10T12:55:49.675995Z",
+ "custom_fields": {},
+ "description": "",
+ "display": "disk1",
+ "id": 1,
+ "last_updated": "2024-04-10T12:55:49.676030Z",
+ "name": "disk1",
+ "size": 60,
+ "tags": [],
+ "url": "http://localhost:32768/api/virtualization/virtual-disks/1/",
+ "virtual_machine": {
+ "display": "test100-vm",
+ "id": 1,
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
+ }
+ },
+ {
+ "created": "2024-04-10T12:55:49.707065Z",
+ "custom_fields": {},
+ "description": "",
+ "display": "disk2",
+ "id": 2,
+ "last_updated": "2024-04-10T12:55:49.707112Z",
+ "name": "disk2",
+ "size": 110,
+ "tags": [],
+ "url": "http://localhost:32768/api/virtualization/virtual-disks/2/",
+ "virtual_machine": {
+ "display": "test100-vm",
+ "id": 1,
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
+ }
+ }
+ ]
},
"test100-vm": {
"cluster": "Test Cluster",
@@ -734,11 +838,13 @@
"cluster_type": "test-cluster-type",
"config_context": {},
"custom_fields": {},
+ "disk": 170,
"interfaces": [
{
"bridge": null,
"count_fhrp_groups": 0,
"count_ipaddresses": 0,
+ "created": "2024-04-10T12:55:49.971454Z",
"custom_fields": {},
"description": "",
"display": "Eth0",
@@ -746,6 +852,7 @@
"id": 1,
"ip_addresses": [],
"l2vpn_termination": null,
+ "last_updated": "2024-04-10T12:55:49.971497Z",
"mac_address": null,
"mode": null,
"mtu": null,
@@ -754,10 +861,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/1/",
"virtual_machine": {
"display": "test100-vm",
"id": 1,
- "name": "test100-vm"
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
},
"vrf": null
},
@@ -765,6 +874,7 @@
"bridge": null,
"count_fhrp_groups": 0,
"count_ipaddresses": 0,
+ "created": "2024-04-10T12:55:50.036225Z",
"custom_fields": {},
"description": "",
"display": "Eth1",
@@ -772,6 +882,7 @@
"id": 2,
"ip_addresses": [],
"l2vpn_termination": null,
+ "last_updated": "2024-04-10T12:55:50.036270Z",
"mac_address": null,
"mode": null,
"mtu": null,
@@ -780,10 +891,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/2/",
"virtual_machine": {
"display": "test100-vm",
"id": 1,
- "name": "test100-vm"
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
},
"vrf": null
},
@@ -791,6 +904,7 @@
"bridge": null,
"count_fhrp_groups": 0,
"count_ipaddresses": 0,
+ "created": "2024-04-10T12:55:50.084595Z",
"custom_fields": {},
"description": "",
"display": "Eth2",
@@ -798,6 +912,7 @@
"id": 3,
"ip_addresses": [],
"l2vpn_termination": null,
+ "last_updated": "2024-04-10T12:55:50.084623Z",
"mac_address": null,
"mode": null,
"mtu": null,
@@ -806,10 +921,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/3/",
"virtual_machine": {
"display": "test100-vm",
"id": 1,
- "name": "test100-vm"
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
},
"vrf": null
},
@@ -817,6 +934,7 @@
"bridge": null,
"count_fhrp_groups": 0,
"count_ipaddresses": 0,
+ "created": "2024-04-10T12:55:50.131287Z",
"custom_fields": {},
"description": "",
"display": "Eth3",
@@ -824,6 +942,7 @@
"id": 4,
"ip_addresses": [],
"l2vpn_termination": null,
+ "last_updated": "2024-04-10T12:55:50.131330Z",
"mac_address": null,
"mode": null,
"mtu": null,
@@ -832,10 +951,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/4/",
"virtual_machine": {
"display": "test100-vm",
"id": 1,
- "name": "test100-vm"
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
},
"vrf": null
},
@@ -843,6 +964,7 @@
"bridge": null,
"count_fhrp_groups": 0,
"count_ipaddresses": 0,
+ "created": "2024-04-10T12:55:50.177550Z",
"custom_fields": {},
"description": "",
"display": "Eth4",
@@ -850,6 +972,7 @@
"id": 5,
"ip_addresses": [],
"l2vpn_termination": null,
+ "last_updated": "2024-04-10T12:55:50.177580Z",
"mac_address": null,
"mode": null,
"mtu": null,
@@ -858,10 +981,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/5/",
"virtual_machine": {
"display": "test100-vm",
"id": 1,
- "name": "test100-vm"
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
},
"vrf": null
}
@@ -879,7 +1004,45 @@
"label": "Active",
"value": "active"
},
- "tags": []
+ "tags": [],
+ "virtual_disks": [
+ {
+ "created": "2024-04-10T12:55:49.675995Z",
+ "custom_fields": {},
+ "description": "",
+ "display": "disk1",
+ "id": 1,
+ "last_updated": "2024-04-10T12:55:49.676030Z",
+ "name": "disk1",
+ "size": 60,
+ "tags": [],
+ "url": "http://localhost:32768/api/virtualization/virtual-disks/1/",
+ "virtual_machine": {
+ "display": "test100-vm",
+ "id": 1,
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
+ }
+ },
+ {
+ "created": "2024-04-10T12:55:49.707065Z",
+ "custom_fields": {},
+ "description": "",
+ "display": "disk2",
+ "id": 2,
+ "last_updated": "2024-04-10T12:55:49.707112Z",
+ "name": "disk2",
+ "size": 110,
+ "tags": [],
+ "url": "http://localhost:32768/api/virtualization/virtual-disks/2/",
+ "virtual_machine": {
+ "display": "test100-vm",
+ "id": 1,
+ "name": "test100-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/1/"
+ }
+ }
+ ]
},
"test101-vm": {
"cluster": "Test Cluster",
@@ -892,6 +1055,7 @@
"bridge": null,
"count_fhrp_groups": 0,
"count_ipaddresses": 0,
+ "created": "2024-04-10T12:55:50.222402Z",
"custom_fields": {},
"description": "",
"display": "Eth0",
@@ -899,6 +1063,7 @@
"id": 6,
"ip_addresses": [],
"l2vpn_termination": null,
+ "last_updated": "2024-04-10T12:55:50.222435Z",
"mac_address": null,
"mode": null,
"mtu": null,
@@ -907,10 +1072,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/6/",
"virtual_machine": {
"display": "test101-vm",
"id": 2,
- "name": "test101-vm"
+ "name": "test101-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/2/"
},
"vrf": null
},
@@ -918,6 +1085,7 @@
"bridge": null,
"count_fhrp_groups": 0,
"count_ipaddresses": 0,
+ "created": "2024-04-10T12:55:50.268954Z",
"custom_fields": {},
"description": "",
"display": "Eth1",
@@ -925,6 +1093,7 @@
"id": 7,
"ip_addresses": [],
"l2vpn_termination": null,
+ "last_updated": "2024-04-10T12:55:50.268981Z",
"mac_address": null,
"mode": null,
"mtu": null,
@@ -933,10 +1102,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/7/",
"virtual_machine": {
"display": "test101-vm",
"id": 2,
- "name": "test101-vm"
+ "name": "test101-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/2/"
},
"vrf": null
},
@@ -944,6 +1115,7 @@
"bridge": null,
"count_fhrp_groups": 0,
"count_ipaddresses": 0,
+ "created": "2024-04-10T12:55:50.329979Z",
"custom_fields": {},
"description": "",
"display": "Eth2",
@@ -951,6 +1123,7 @@
"id": 8,
"ip_addresses": [],
"l2vpn_termination": null,
+ "last_updated": "2024-04-10T12:55:50.330023Z",
"mac_address": null,
"mode": null,
"mtu": null,
@@ -959,10 +1132,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/8/",
"virtual_machine": {
"display": "test101-vm",
"id": 2,
- "name": "test101-vm"
+ "name": "test101-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/2/"
},
"vrf": null
},
@@ -970,6 +1145,7 @@
"bridge": null,
"count_fhrp_groups": 0,
"count_ipaddresses": 0,
+ "created": "2024-04-10T12:55:50.378705Z",
"custom_fields": {},
"description": "",
"display": "Eth3",
@@ -977,6 +1153,7 @@
"id": 9,
"ip_addresses": [],
"l2vpn_termination": null,
+ "last_updated": "2024-04-10T12:55:50.378744Z",
"mac_address": null,
"mode": null,
"mtu": null,
@@ -985,10 +1162,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/9/",
"virtual_machine": {
"display": "test101-vm",
"id": 2,
- "name": "test101-vm"
+ "name": "test101-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/2/"
},
"vrf": null
},
@@ -996,6 +1175,7 @@
"bridge": null,
"count_fhrp_groups": 0,
"count_ipaddresses": 0,
+ "created": "2024-04-10T12:55:50.419981Z",
"custom_fields": {},
"description": "",
"display": "Eth4",
@@ -1003,6 +1183,7 @@
"id": 10,
"ip_addresses": [],
"l2vpn_termination": null,
+ "last_updated": "2024-04-10T12:55:50.420007Z",
"mac_address": null,
"mode": null,
"mtu": null,
@@ -1011,10 +1192,12 @@
"tagged_vlans": [],
"tags": [],
"untagged_vlan": null,
+ "url": "http://localhost:32768/api/virtualization/interfaces/10/",
"virtual_machine": {
"display": "test101-vm",
"id": 2,
- "name": "test101-vm"
+ "name": "test101-vm",
+ "url": "http://localhost:32768/api/virtualization/virtual-machines/2/"
},
"vrf": null
}
@@ -1032,7 +1215,8 @@
"label": "Active",
"value": "active"
},
- "tags": []
+ "tags": [],
+ "virtual_disks": []
},
"test102-vm": {
"cluster": "Test Cluster",
@@ -1054,7 +1238,8 @@
"label": "Active",
"value": "active"
},
- "tags": []
+ "tags": [],
+ "virtual_disks": []
},
"test103-vm": {
"cluster": "Test Cluster",
@@ -1076,7 +1261,8 @@
"label": "Active",
"value": "active"
},
- "tags": []
+ "tags": [],
+ "virtual_disks": []
},
"test104-vm": {
"cluster": "Test Cluster 2",
@@ -1093,7 +1279,8 @@
"label": "Active",
"value": "active"
},
- "tags": []
+ "tags": [],
+ "virtual_disks": []
}
}
},
diff --git a/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory.yml b/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory.yml
index c88c96593..8ddaac090 100644
--- a/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory.yml
+++ b/ansible_collections/netbox/netbox/tests/integration/targets/inventory-v3.7/files/test-inventory.yml
@@ -7,6 +7,7 @@ validate_certs: False
config_context: True
plurals: False
interfaces: True
+virtual_disks: True
services: True
group_by:
diff --git a/ansible_collections/netbox/netbox/tests/integration/targets/v3.5/tasks/netbox_device.yml b/ansible_collections/netbox/netbox/tests/integration/targets/v3.5/tasks/netbox_device.yml
index badf1c9f1..5a791b242 100644
--- a/ansible_collections/netbox/netbox/tests/integration/targets/v3.5/tasks/netbox_device.yml
+++ b/ansible_collections/netbox/netbox/tests/integration/targets/v3.5/tasks/netbox_device.yml
@@ -129,7 +129,7 @@
device_role: "Core Switch"
site: "Test Site2"
rack: "Test Rack Site 2"
- position: 35
+ position: 35.5
face: "Front"
tags:
- "schnozzberry"
diff --git a/ansible_collections/netbox/netbox/tests/integration/targets/v3.5/tasks/netbox_device_type.yml b/ansible_collections/netbox/netbox/tests/integration/targets/v3.5/tasks/netbox_device_type.yml
index 098c75d27..5587119f3 100644
--- a/ansible_collections/netbox/netbox/tests/integration/targets/v3.5/tasks/netbox_device_type.yml
+++ b/ansible_collections/netbox/netbox/tests/integration/targets/v3.5/tasks/netbox_device_type.yml
@@ -55,7 +55,7 @@
model: ws-test-3750
manufacturer: Test Manufacturer
part_number: ws-3750g-v2
- u_height: 1
+ u_height: 1.5
is_full_depth: false
subdevice_role: parent
state: present
diff --git a/ansible_collections/netbox/netbox/tests/integration/targets/v3.5/tasks/netbox_module.yml b/ansible_collections/netbox/netbox/tests/integration/targets/v3.5/tasks/netbox_module.yml
new file mode 100644
index 000000000..e8f090d8c
--- /dev/null
+++ b/ansible_collections/netbox/netbox/tests/integration/targets/v3.5/tasks/netbox_module.yml
@@ -0,0 +1,107 @@
+---
+##
+##
+### NETBOX_MODULE
+##
+##
+- name: "MODULE 1: Necessary info creation"
+ netbox.netbox.netbox_module:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ device: C9300-DEMO
+ module_bay: Network Module
+ module_type: C9300-NM-8X
+ state: present
+ register: test_one
+
+- name: "MODULE 1: ASSERT - Necessary info creation"
+ assert:
+ that:
+ - test_one is changed
+ - test_one['diff']['before']['state'] == "absent"
+ - test_one['diff']['after']['state'] == "present"
+ - test_one['module']['device'] == "C9300-DEMO"
+ - test_one['module']['module_bay'] == "Network Module"
+ - test_one['module']['module_type'] == "C9300-NM-8X"
+ - test_one['msg'] == "module ws-test-3750 created"
+
+- name: "MODULE 2: Create duplicate"
+ netbox.netbox.netbox_module:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ device: C9300-DEMO
+ module_bay: Network Module
+ module_type: C9300-NM-8X
+ state: present
+ register: test_two
+
+- name: "MODULE 2: ASSERT - Create duplicate"
+ assert:
+ that:
+ - not test_two['changed']
+ - test_two['module']['device'] == "C9300-DEMO"
+ - test_two['module']['module_bay'] == "Network Module"
+ - test_two['module']['module_type'] == "C9300-NM-8X"
+ - test_two['msg'] == "module C9300-NM-8X already exists in slot Network Module of C9300-DEMO"
+
+- name: "MODULE 3: ASSERT - Update"
+ netbox.netbox.netbox_module:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ device: C9300-DEMO
+ module_bay: Network Module
+ module_type: C9300-NM-8X
+ serial: XXXNNNNXXXX
+ state: present
+ register: test_three
+
+- name: "MODULE 3: ASSERT - Update"
+ assert:
+ that:
+ - test_three is changed
+ - test_three['diff']['after']['serial'] == "XXXNNNNXXXX"
+ - test_three['module']['device'] == "C9300-DEMO"
+ - test_three['module']['module_bay'] == "Network Module"
+ - test_three['module']['module_type'] == "C9300-NM-8X"
+ - test_three['module']['serial'] == "XXXNNNNXXXX"
+ - test_three['msg'] == "module C9300-DEMO - Network Module - C9300-NM-8X updated"
+
+- name: "MODULE 4: ASSERT - Delete"
+ netbox.netbox.netbox_module:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ device: C9300-DEMO
+ module_bay: Network Module
+ module_type: C9300-NM-8X
+ state: absent
+ register: test_four
+
+- name: "MODULE 4: ASSERT - Delete"
+ assert:
+ that:
+ - test_four is changed
+ - test_four['diff']['before']['state'] == "present"
+ - test_four['diff']['after']['state'] == "absent"
+ - test_four['msg'] == "module C9300-NM-8X deleted in slot Network Module of C9300-DEMO"
+
+- name: "MODULE 5: ASSERT - Delete non existing"
+ netbox.netbox.netbox_module:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ device: C9300-DEMO
+ module_bay: Network Module
+ module_type: C9300-NM-2Y
+ state: absent
+ register: test_five
+
+- name: "MODULE 5: ASSERT - Delete non existing`"
+ assert:
+ that:
+ - not test_five['changed']
+ - test_five['module'] == None
+ - test_five['msg'] == "module Test Module Type already absent"
diff --git a/ansible_collections/netbox/netbox/tests/integration/targets/v3.5/tasks/netbox_module_bay.yml b/ansible_collections/netbox/netbox/tests/integration/targets/v3.5/tasks/netbox_module_bay.yml
new file mode 100644
index 000000000..44bb76269
--- /dev/null
+++ b/ansible_collections/netbox/netbox/tests/integration/targets/v3.5/tasks/netbox_module_bay.yml
@@ -0,0 +1,105 @@
+---
+##
+##
+### NETBOX_MODULE_BAY
+##
+##
+- name: "MODULE 1: Necessary info creation"
+ netbox.netbox.netbox_module_bay:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ device: C9300-DEMO
+ name: Network Module
+ position: 0
+ state: present
+ register: test_one
+
+- name: "MODULE BAY 1: ASSERT - Necessary info creation"
+ assert:
+ that:
+ - test_one is changed
+ - test_one['diff']['before']['state'] == "absent"
+ - test_one['diff']['after']['state'] == "present"
+ - test_one['module_bay']['device'] == "C9300-DEMO"
+ - test_one['module_bay']['name'] == "Network Module"
+ - test_one['module_bay']['position'] == "0"
+ - test_one['msg'] == "module_bay Network Module in C9300-DEMO position 0 created"
+
+- name: "MODULE BAY 2: Create duplicate"
+ netbox.netbox.netbox_module_bay:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ device: C9300-DEMO
+ name: Network Module
+ position: 0
+ state: present
+ register: test_two
+
+- name: "MODULE BAY 2: ASSERT - Create duplicate"
+ assert:
+ that:
+ - not test_two['changed']
+ - test_two['module_bay']['device'] == "C9300-DEMO"
+ - test_two['module_bay']['name'] == "Network Module"
+ - test_two['module_bay']['position'] == "0"
+ - test_two['msg'] == "module_bay Network Module in C9300-DEMO position 0 already exists"
+
+- name: "MODULE BAY 3: ASSERT - Update"
+ netbox.netbox.netbox_module_bay:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ device: C9300-DEMO
+ name: Network Module
+ position: 0
+ label: TEST
+ state: present
+ register: test_three
+
+- name: "MODULE BAY 3: ASSERT - Update"
+ assert:
+ that:
+ - test_three is changed
+ - test_three['diff']['after']['label'] == "TEST"
+ - test_three['module_bay']['device'] == "C9300-DEMO"
+ - test_three['module_bay']['name'] == "Network Module"
+ - test_three['module_bay']['position'] == "0"
+ - test_three['module_bay']['label'] == "TEST"
+ - test_three['msg'] == "module_bay Network Module in C9300-DEMO position 0 updated with label TEST"
+
+- name: "MODULE BAY 4: ASSERT - Delete"
+ netbox.netbox.netbox_module_bay:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ device: C9300-DEMO
+ name: Network Module
+ state: absent
+ register: test_four
+
+- name: "MODULE BAY 4: ASSERT - Delete"
+ assert:
+ that:
+ - test_four is changed
+ - test_four['diff']['before']['state'] == "present"
+ - test_four['diff']['after']['state'] == "absent"
+ - test_four['msg'] == "module_bay Network Module in C9300-DEMO position 0 deleted"
+
+- name: "MODULE BAY 5: ASSERT - Delete non existing"
+ netbox.netbox.netbox_module_bay:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ device: C9300-DEMO
+ name: Network Module
+ state: absent
+ register: test_five
+
+- name: "MODULE BAY 5: ASSERT - Delete non existing`"
+ assert:
+ that:
+ - not test_five['changed']
+ - test_five['module_bay'] == None
+ - test_five['msg'] == "module_bay Network Module already absent"
diff --git a/ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/main.yml b/ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/main.yml
index 1b232374e..5329b4917 100644
--- a/ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/main.yml
+++ b/ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/main.yml
@@ -310,3 +310,8 @@
include_tasks: "netbox_config_template.yml"
tags:
- netbox_config_template
+
+- name: "NETBOX_CUSTOM_FIELD_CHOICE_SET"
+ include_tasks: "netbox_custom_field_choice_set.yml"
+ tags:
+ - netbox_custom_field_choice_set
diff --git a/ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_custom_field_choice_set.yml b/ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_custom_field_choice_set.yml
new file mode 100644
index 000000000..f76743271
--- /dev/null
+++ b/ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_custom_field_choice_set.yml
@@ -0,0 +1,106 @@
+---
+##
+##
+### NETBOX_CUSTOM_FIELD_CHOICE_SET
+##
+##
+- name: "CUSTOM_FIELD_CHOICE_SET 1: Base Choice set creation"
+ netbox.netbox.netbox_custom_field_choice_set:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ name: "A_ChoiceSet"
+ description: "Added a description"
+ base_choices: "IATA"
+ state: present
+ register: test_one
+
+- name: "CUSTOM_FIELD_CHOICE_SET 1: ASSERT - Base Choice set creation"
+ assert:
+ that:
+ - test_one is changed
+ - test_one['diff']['before']['state'] == "absent"
+ - test_one['diff']['after']['state'] == "present"
+ - test_one['choice_set']['name'] == "A_ChoiceSet"
+ - test_one['choice_set']['description'] == "Added a description"
+ - test_one['choice_set']['display'] == "A_ChoiceSet"
+ - test_one['choice_set']['order_alphabetically'] == false
+ - test_one['choice_set']['extra_choices'] == []
+ - test_one['msg'] == "choice_set A_ChoiceSet created"
+
+- name: "CUSTOM_FIELD_CHOICE_SET 2: Create duplicate"
+ netbox.netbox.netbox_custom_field_choice_set:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ name: "A_ChoiceSet"
+ description: "Added a description"
+ base_choices: "IATA"
+ state: present
+ register: test_two
+
+- name: "CUSTOM_FIELD_CHOICE_SET 2: ASSERT - Create duplicate"
+ assert:
+ that:
+ - not test_two['changed']
+ - test_two['choice_set']['name'] == "A_ChoiceSet"
+ - test_two['msg'] == "choice_set A_ChoiceSet already exists"
+
+- name: "CUSTOM_FIELD_CHOICE_SET 3: Update data and change base_choice"
+ netbox.netbox.netbox_custom_field_choice_set:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ name: "A_ChoiceSet"
+ description: "Added a description"
+ base_choices: "ISO_3166"
+ state: present
+ register: test_three
+
+- name: "CUSTOM_FIELD_CHOICE_SET 3: ASSERT - Updated"
+ assert:
+ that:
+ - test_three is changed
+ - test_three['diff']['after']['base_choices'] == "ISO_3166"
+ - test_three['choice_set']['name'] == "A_ChoiceSet"
+ - test_three['msg'] == "choice_set A_ChoiceSet updated"
+
+- name: "CUSTOM_FIELD_CHOICE_SET 4: Update extra choice and order alphabetically"
+ netbox.netbox.netbox_custom_field_choice_set:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ name: "A_ChoiceSet"
+ description: "Added a description"
+ order_alphabetically: true
+ extra_choices:
+ - ['test', 'label']
+ - ['test2', 'label2']
+ state: present
+ register: test_four
+
+- name: "CUSTOM_FIELD_CHOICE_SET 4: ASSERT - Change extra choice and order alphabetically"
+ assert:
+ that:
+ - test_four is changed
+ - test_four['diff']['after']['extra_choices'] == [["test","label"],["test2","label2"]]
+ - test_four['diff']['after']['order_alphabetically'] == true
+ - test_four['choice_set']['name'] == "A_ChoiceSet"
+ - test_four['msg'] == "choice_set A_ChoiceSet updated"
+
+- name: "CUSTOM_FIELD_CHOICE_SET 5: Delete"
+ netbox.netbox.netbox_custom_field_choice_set:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ name: "A_ChoiceSet"
+ state: absent
+ register: test_five
+
+- name: "CUSTOM_FIELD_CHOICE_SET 5: ASSERT - Deleted"
+ assert:
+ that:
+ - test_five is changed
+ - test_five['diff']['after']['state'] == "absent"
+ - test_five['choice_set']['name'] == "A_ChoiceSet"
+ - test_five['msg'] == "choice_set A_ChoiceSet deleted"
diff --git a/ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_device.yml b/ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_device.yml
index badf1c9f1..5a791b242 100644
--- a/ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_device.yml
+++ b/ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_device.yml
@@ -129,7 +129,7 @@
device_role: "Core Switch"
site: "Test Site2"
rack: "Test Rack Site 2"
- position: 35
+ position: 35.5
face: "Front"
tags:
- "schnozzberry"
diff --git a/ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_device_type.yml b/ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_device_type.yml
index 098c75d27..5587119f3 100644
--- a/ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_device_type.yml
+++ b/ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_device_type.yml
@@ -55,7 +55,7 @@
model: ws-test-3750
manufacturer: Test Manufacturer
part_number: ws-3750g-v2
- u_height: 1
+ u_height: 1.5
is_full_depth: false
subdevice_role: parent
state: present
diff --git a/ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_module.yml b/ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_module.yml
new file mode 100644
index 000000000..e8f090d8c
--- /dev/null
+++ b/ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_module.yml
@@ -0,0 +1,107 @@
+---
+##
+##
+### NETBOX_MODULE
+##
+##
+- name: "MODULE 1: Necessary info creation"
+ netbox.netbox.netbox_module:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ device: C9300-DEMO
+ module_bay: Network Module
+ module_type: C9300-NM-8X
+ state: present
+ register: test_one
+
+- name: "MODULE 1: ASSERT - Necessary info creation"
+ assert:
+ that:
+ - test_one is changed
+ - test_one['diff']['before']['state'] == "absent"
+ - test_one['diff']['after']['state'] == "present"
+ - test_one['module']['device'] == "C9300-DEMO"
+ - test_one['module']['module_bay'] == "Network Module"
+ - test_one['module']['module_type'] == "C9300-NM-8X"
+ - test_one['msg'] == "module ws-test-3750 created"
+
+- name: "MODULE 2: Create duplicate"
+ netbox.netbox.netbox_module:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ device: C9300-DEMO
+ module_bay: Network Module
+ module_type: C9300-NM-8X
+ state: present
+ register: test_two
+
+- name: "MODULE 2: ASSERT - Create duplicate"
+ assert:
+ that:
+ - not test_two['changed']
+ - test_two['module']['device'] == "C9300-DEMO"
+ - test_two['module']['module_bay'] == "Network Module"
+ - test_two['module']['module_type'] == "C9300-NM-8X"
+ - test_two['msg'] == "module C9300-NM-8X already exists in slot Network Module of C9300-DEMO"
+
+- name: "MODULE 3: ASSERT - Update"
+ netbox.netbox.netbox_module:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ device: C9300-DEMO
+ module_bay: Network Module
+ module_type: C9300-NM-8X
+ serial: XXXNNNNXXXX
+ state: present
+ register: test_three
+
+- name: "MODULE 3: ASSERT - Update"
+ assert:
+ that:
+ - test_three is changed
+ - test_three['diff']['after']['serial'] == "XXXNNNNXXXX"
+ - test_three['module']['device'] == "C9300-DEMO"
+ - test_three['module']['module_bay'] == "Network Module"
+ - test_three['module']['module_type'] == "C9300-NM-8X"
+ - test_three['module']['serial'] == "XXXNNNNXXXX"
+ - test_three['msg'] == "module C9300-DEMO - Network Module - C9300-NM-8X updated"
+
+- name: "MODULE 4: ASSERT - Delete"
+ netbox.netbox.netbox_module:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ device: C9300-DEMO
+ module_bay: Network Module
+ module_type: C9300-NM-8X
+ state: absent
+ register: test_four
+
+- name: "MODULE 4: ASSERT - Delete"
+ assert:
+ that:
+ - test_four is changed
+ - test_four['diff']['before']['state'] == "present"
+ - test_four['diff']['after']['state'] == "absent"
+ - test_four['msg'] == "module C9300-NM-8X deleted in slot Network Module of C9300-DEMO"
+
+- name: "MODULE 5: ASSERT - Delete non existing"
+ netbox.netbox.netbox_module:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ device: C9300-DEMO
+ module_bay: Network Module
+ module_type: C9300-NM-2Y
+ state: absent
+ register: test_five
+
+- name: "MODULE 5: ASSERT - Delete non existing`"
+ assert:
+ that:
+ - not test_five['changed']
+ - test_five['module'] == None
+ - test_five['msg'] == "module Test Module Type already absent"
diff --git a/ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_module_bay.yml b/ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_module_bay.yml
new file mode 100644
index 000000000..44bb76269
--- /dev/null
+++ b/ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_module_bay.yml
@@ -0,0 +1,105 @@
+---
+##
+##
+### NETBOX_MODULE_BAY
+##
+##
+- name: "MODULE 1: Necessary info creation"
+ netbox.netbox.netbox_module_bay:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ device: C9300-DEMO
+ name: Network Module
+ position: 0
+ state: present
+ register: test_one
+
+- name: "MODULE BAY 1: ASSERT - Necessary info creation"
+ assert:
+ that:
+ - test_one is changed
+ - test_one['diff']['before']['state'] == "absent"
+ - test_one['diff']['after']['state'] == "present"
+ - test_one['module_bay']['device'] == "C9300-DEMO"
+ - test_one['module_bay']['name'] == "Network Module"
+ - test_one['module_bay']['position'] == "0"
+ - test_one['msg'] == "module_bay Network Module in C9300-DEMO position 0 created"
+
+- name: "MODULE BAY 2: Create duplicate"
+ netbox.netbox.netbox_module_bay:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ device: C9300-DEMO
+ name: Network Module
+ position: 0
+ state: present
+ register: test_two
+
+- name: "MODULE BAY 2: ASSERT - Create duplicate"
+ assert:
+ that:
+ - not test_two['changed']
+ - test_two['module_bay']['device'] == "C9300-DEMO"
+ - test_two['module_bay']['name'] == "Network Module"
+ - test_two['module_bay']['position'] == "0"
+ - test_two['msg'] == "module_bay Network Module in C9300-DEMO position 0 already exists"
+
+- name: "MODULE BAY 3: ASSERT - Update"
+ netbox.netbox.netbox_module_bay:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ device: C9300-DEMO
+ name: Network Module
+ position: 0
+ label: TEST
+ state: present
+ register: test_three
+
+- name: "MODULE BAY 3: ASSERT - Update"
+ assert:
+ that:
+ - test_three is changed
+ - test_three['diff']['after']['label'] == "TEST"
+ - test_three['module_bay']['device'] == "C9300-DEMO"
+ - test_three['module_bay']['name'] == "Network Module"
+ - test_three['module_bay']['position'] == "0"
+ - test_three['module_bay']['label'] == "TEST"
+ - test_three['msg'] == "module_bay Network Module in C9300-DEMO position 0 updated with label TEST"
+
+- name: "MODULE BAY 4: ASSERT - Delete"
+ netbox.netbox.netbox_module_bay:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ device: C9300-DEMO
+ name: Network Module
+ state: absent
+ register: test_four
+
+- name: "MODULE BAY 4: ASSERT - Delete"
+ assert:
+ that:
+ - test_four is changed
+ - test_four['diff']['before']['state'] == "present"
+ - test_four['diff']['after']['state'] == "absent"
+ - test_four['msg'] == "module_bay Network Module in C9300-DEMO position 0 deleted"
+
+- name: "MODULE BAY 5: ASSERT - Delete non existing"
+ netbox.netbox.netbox_module_bay:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ device: C9300-DEMO
+ name: Network Module
+ state: absent
+ register: test_five
+
+- name: "MODULE BAY 5: ASSERT - Delete non existing`"
+ assert:
+ that:
+ - not test_five['changed']
+ - test_five['module_bay'] == None
+ - test_five['msg'] == "module_bay Network Module already absent"
diff --git a/ansible_collections/netbox/netbox/tests/integration/targets/v3.7/tasks/netbox_device.yml b/ansible_collections/netbox/netbox/tests/integration/targets/v3.7/tasks/netbox_device.yml
index badf1c9f1..5a791b242 100644
--- a/ansible_collections/netbox/netbox/tests/integration/targets/v3.7/tasks/netbox_device.yml
+++ b/ansible_collections/netbox/netbox/tests/integration/targets/v3.7/tasks/netbox_device.yml
@@ -129,7 +129,7 @@
device_role: "Core Switch"
site: "Test Site2"
rack: "Test Rack Site 2"
- position: 35
+ position: 35.5
face: "Front"
tags:
- "schnozzberry"
diff --git a/ansible_collections/netbox/netbox/tests/integration/targets/v3.7/tasks/netbox_device_type.yml b/ansible_collections/netbox/netbox/tests/integration/targets/v3.7/tasks/netbox_device_type.yml
index 098c75d27..5587119f3 100644
--- a/ansible_collections/netbox/netbox/tests/integration/targets/v3.7/tasks/netbox_device_type.yml
+++ b/ansible_collections/netbox/netbox/tests/integration/targets/v3.7/tasks/netbox_device_type.yml
@@ -55,7 +55,7 @@
model: ws-test-3750
manufacturer: Test Manufacturer
part_number: ws-3750g-v2
- u_height: 1
+ u_height: 1.5
is_full_depth: false
subdevice_role: parent
state: present
diff --git a/ansible_collections/netbox/netbox/tests/integration/targets/v3.7/tasks/netbox_module.yml b/ansible_collections/netbox/netbox/tests/integration/targets/v3.7/tasks/netbox_module.yml
new file mode 100644
index 000000000..e8f090d8c
--- /dev/null
+++ b/ansible_collections/netbox/netbox/tests/integration/targets/v3.7/tasks/netbox_module.yml
@@ -0,0 +1,107 @@
+---
+##
+##
+### NETBOX_MODULE
+##
+##
+- name: "MODULE 1: Necessary info creation"
+ netbox.netbox.netbox_module:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ device: C9300-DEMO
+ module_bay: Network Module
+ module_type: C9300-NM-8X
+ state: present
+ register: test_one
+
+- name: "MODULE 1: ASSERT - Necessary info creation"
+ assert:
+ that:
+ - test_one is changed
+ - test_one['diff']['before']['state'] == "absent"
+ - test_one['diff']['after']['state'] == "present"
+ - test_one['module']['device'] == "C9300-DEMO"
+ - test_one['module']['module_bay'] == "Network Module"
+ - test_one['module']['module_type'] == "C9300-NM-8X"
+ - test_one['msg'] == "module ws-test-3750 created"
+
+- name: "MODULE 2: Create duplicate"
+ netbox.netbox.netbox_module:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ device: C9300-DEMO
+ module_bay: Network Module
+ module_type: C9300-NM-8X
+ state: present
+ register: test_two
+
+- name: "MODULE 2: ASSERT - Create duplicate"
+ assert:
+ that:
+ - not test_two['changed']
+ - test_two['module']['device'] == "C9300-DEMO"
+ - test_two['module']['module_bay'] == "Network Module"
+ - test_two['module']['module_type'] == "C9300-NM-8X"
+ - test_two['msg'] == "module C9300-NM-8X already exists in slot Network Module of C9300-DEMO"
+
+- name: "MODULE 3: ASSERT - Update"
+ netbox.netbox.netbox_module:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ device: C9300-DEMO
+ module_bay: Network Module
+ module_type: C9300-NM-8X
+ serial: XXXNNNNXXXX
+ state: present
+ register: test_three
+
+- name: "MODULE 3: ASSERT - Update"
+ assert:
+ that:
+ - test_three is changed
+ - test_three['diff']['after']['serial'] == "XXXNNNNXXXX"
+ - test_three['module']['device'] == "C9300-DEMO"
+ - test_three['module']['module_bay'] == "Network Module"
+ - test_three['module']['module_type'] == "C9300-NM-8X"
+ - test_three['module']['serial'] == "XXXNNNNXXXX"
+ - test_three['msg'] == "module C9300-DEMO - Network Module - C9300-NM-8X updated"
+
+- name: "MODULE 4: ASSERT - Delete"
+ netbox.netbox.netbox_module:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ device: C9300-DEMO
+ module_bay: Network Module
+ module_type: C9300-NM-8X
+ state: absent
+ register: test_four
+
+- name: "MODULE 4: ASSERT - Delete"
+ assert:
+ that:
+ - test_four is changed
+ - test_four['diff']['before']['state'] == "present"
+ - test_four['diff']['after']['state'] == "absent"
+ - test_four['msg'] == "module C9300-NM-8X deleted in slot Network Module of C9300-DEMO"
+
+- name: "MODULE 5: ASSERT - Delete non existing"
+ netbox.netbox.netbox_module:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ device: C9300-DEMO
+ module_bay: Network Module
+ module_type: C9300-NM-2Y
+ state: absent
+ register: test_five
+
+- name: "MODULE 5: ASSERT - Delete non existing`"
+ assert:
+ that:
+ - not test_five['changed']
+ - test_five['module'] == None
+ - test_five['msg'] == "module Test Module Type already absent"
diff --git a/ansible_collections/netbox/netbox/tests/integration/targets/v3.7/tasks/netbox_module_bay.yml b/ansible_collections/netbox/netbox/tests/integration/targets/v3.7/tasks/netbox_module_bay.yml
new file mode 100644
index 000000000..44bb76269
--- /dev/null
+++ b/ansible_collections/netbox/netbox/tests/integration/targets/v3.7/tasks/netbox_module_bay.yml
@@ -0,0 +1,105 @@
+---
+##
+##
+### NETBOX_MODULE_BAY
+##
+##
+- name: "MODULE 1: Necessary info creation"
+ netbox.netbox.netbox_module_bay:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ device: C9300-DEMO
+ name: Network Module
+ position: 0
+ state: present
+ register: test_one
+
+- name: "MODULE BAY 1: ASSERT - Necessary info creation"
+ assert:
+ that:
+ - test_one is changed
+ - test_one['diff']['before']['state'] == "absent"
+ - test_one['diff']['after']['state'] == "present"
+ - test_one['module_bay']['device'] == "C9300-DEMO"
+ - test_one['module_bay']['name'] == "Network Module"
+ - test_one['module_bay']['position'] == "0"
+ - test_one['msg'] == "module_bay Network Module in C9300-DEMO position 0 created"
+
+- name: "MODULE BAY 2: Create duplicate"
+ netbox.netbox.netbox_module_bay:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ device: C9300-DEMO
+ name: Network Module
+ position: 0
+ state: present
+ register: test_two
+
+- name: "MODULE BAY 2: ASSERT - Create duplicate"
+ assert:
+ that:
+ - not test_two['changed']
+ - test_two['module_bay']['device'] == "C9300-DEMO"
+ - test_two['module_bay']['name'] == "Network Module"
+ - test_two['module_bay']['position'] == "0"
+ - test_two['msg'] == "module_bay Network Module in C9300-DEMO position 0 already exists"
+
+- name: "MODULE BAY 3: ASSERT - Update"
+ netbox.netbox.netbox_module_bay:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ device: C9300-DEMO
+ name: Network Module
+ position: 0
+ label: TEST
+ state: present
+ register: test_three
+
+- name: "MODULE BAY 3: ASSERT - Update"
+ assert:
+ that:
+ - test_three is changed
+ - test_three['diff']['after']['label'] == "TEST"
+ - test_three['module_bay']['device'] == "C9300-DEMO"
+ - test_three['module_bay']['name'] == "Network Module"
+ - test_three['module_bay']['position'] == "0"
+ - test_three['module_bay']['label'] == "TEST"
+ - test_three['msg'] == "module_bay Network Module in C9300-DEMO position 0 updated with label TEST"
+
+- name: "MODULE BAY 4: ASSERT - Delete"
+ netbox.netbox.netbox_module_bay:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ device: C9300-DEMO
+ name: Network Module
+ state: absent
+ register: test_four
+
+- name: "MODULE BAY 4: ASSERT - Delete"
+ assert:
+ that:
+ - test_four is changed
+ - test_four['diff']['before']['state'] == "present"
+ - test_four['diff']['after']['state'] == "absent"
+ - test_four['msg'] == "module_bay Network Module in C9300-DEMO position 0 deleted"
+
+- name: "MODULE BAY 5: ASSERT - Delete non existing"
+ netbox.netbox.netbox_module_bay:
+ netbox_url: http://localhost:32768
+ netbox_token: 0123456789abcdef0123456789abcdef01234567
+ data:
+ device: C9300-DEMO
+ name: Network Module
+ state: absent
+ register: test_five
+
+- name: "MODULE BAY 5: ASSERT - Delete non existing`"
+ assert:
+ that:
+ - not test_five['changed']
+ - test_five['module_bay'] == None
+ - test_five['msg'] == "module_bay Network Module already absent"
diff --git a/ansible_collections/netbox/netbox/tests/unit/inventory/test_data/data.json b/ansible_collections/netbox/netbox/tests/unit/inventory/test_data/data.json
new file mode 100644
index 000000000..41726270e
--- /dev/null
+++ b/ansible_collections/netbox/netbox/tests/unit/inventory/test_data/data.json
@@ -0,0 +1,12 @@
+[
+ {
+ "name": "disk1",
+ "vm_name": "test100-vm",
+ "size_gb": 100
+ },
+ {
+ "name": "disk2",
+ "vm_name": "test100-vm",
+ "size_gb": 200
+ }
+]
diff --git a/ansible_collections/netbox/netbox/tests/unit/inventory/test_data/extract_custom_fields/data.json b/ansible_collections/netbox/netbox/tests/unit/inventory/test_data/extract_custom_fields/data.json
new file mode 100644
index 000000000..cb63c576e
--- /dev/null
+++ b/ansible_collections/netbox/netbox/tests/unit/inventory/test_data/extract_custom_fields/data.json
@@ -0,0 +1,21 @@
+[
+ {
+ "custom_fields": {
+ "a_text_value": "value1",
+ "a_bool_value": false
+ },
+ "expected": {
+ "a_text_value": "value1",
+ "a_bool_value": false
+ }
+ },
+ {
+ "custom_fields": {
+ "an_unset_value": null,
+ "a_set_value": false
+ },
+ "expected": {
+ "a_set_value": false
+ }
+ }
+]
diff --git a/ansible_collections/netbox/netbox/tests/unit/inventory/test_data/group_extractors/data.json b/ansible_collections/netbox/netbox/tests/unit/inventory/test_data/group_extractors/data.json
index a0a39ffe1..870814dc8 100644
--- a/ansible_collections/netbox/netbox/tests/unit/inventory/test_data/group_extractors/data.json
+++ b/ansible_collections/netbox/netbox/tests/unit/inventory/test_data/group_extractors/data.json
@@ -1,7 +1,9 @@
[
{
"plurals": false,
+ "virtual_disks": false,
"interfaces": false,
+ "virtual_disks": false,
"services": false,
"dns_name": false,
"ansible_host_dns_name": false,
@@ -36,6 +38,7 @@
"device_types",
"manufacturers",
"services",
+ "virtual_disks",
"interfaces",
"dns_name",
"ansible_host_dns_name"
@@ -43,7 +46,9 @@
},
{
"plurals": true,
+ "virtual_disks": true,
"interfaces": true,
+ "virtual_disks": true,
"services": true,
"dns_name": true,
"ansible_host_dns_name": true,
@@ -68,6 +73,7 @@
"device_types",
"manufacturers",
"services",
+ "virtual_disks",
"interfaces",
"dns_name"
],
@@ -84,7 +90,9 @@
},
{
"plurals": true,
+ "virtual_disks": true,
"interfaces": true,
+ "virtual_disks": true,
"services": true,
"dns_name": false,
"ansible_host_dns_name": true,
@@ -109,6 +117,7 @@
"device_types",
"manufacturers",
"services",
+ "virtual_disks",
"interfaces",
"dns_name"
],
diff --git a/ansible_collections/netbox/netbox/tests/unit/inventory/test_nb_inventory.py b/ansible_collections/netbox/netbox/tests/unit/inventory/test_nb_inventory.py
index 9adfc3e3e..4b502a8a0 100644
--- a/ansible_collections/netbox/netbox/tests/unit/inventory/test_nb_inventory.py
+++ b/ansible_collections/netbox/netbox/tests/unit/inventory/test_nb_inventory.py
@@ -78,6 +78,7 @@ def allowed_vm_query_parameters_fixture():
# Subset of parameters - real list is fetched dynamically from NetBox openapi endpoint
return [
"id",
+ "virtual_disks",
"interfaces",
"disk",
"mac_address",
@@ -148,13 +149,14 @@ def test_refresh_lookups(inventory_fixture):
@pytest.mark.parametrize(
- "plurals, services, interfaces, dns_name, ansible_host_dns_name, racks, expected, not_expected",
+ "plurals, services, virtual_disks, interfaces, dns_name, ansible_host_dns_name, racks, expected, not_expected",
load_relative_test_data("group_extractors"),
)
def test_group_extractors(
inventory_fixture,
plurals,
services,
+ virtual_disks,
interfaces,
dns_name,
ansible_host_dns_name,
@@ -164,6 +166,7 @@ def test_group_extractors(
):
inventory_fixture.plurals = plurals
inventory_fixture.services = services
+ inventory_fixture.virtual_disks = virtual_disks
inventory_fixture.interfaces = interfaces
inventory_fixture.dns_name = dns_name
inventory_fixture.ansible_host_dns_name = ansible_host_dns_name
@@ -246,3 +249,14 @@ def test_new_token(inventory_fixture, templar_fixture):
assert "Authorization" in inventory_fixture.headers
assert inventory_fixture.headers["Authorization"] == "Foo bar"
+
+
+@pytest.mark.parametrize(
+ "custom_fields, expected", load_relative_test_data("extract_custom_fields")
+)
+def test_extract_custom_fields(inventory_fixture, custom_fields, expected):
+ extracted_custom_fields = inventory_fixture.extract_custom_fields(
+ {"custom_fields": custom_fields}
+ )
+
+ assert extracted_custom_fields == expected
diff --git a/ansible_collections/netbox/netbox/tests/unit/module_utils/test_netbox_base_class.py b/ansible_collections/netbox/netbox/tests/unit/module_utils/test_netbox_base_class.py
index 40330da12..40bbadaa7 100644
--- a/ansible_collections/netbox/netbox/tests/unit/module_utils/test_netbox_base_class.py
+++ b/ansible_collections/netbox/netbox/tests/unit/module_utils/test_netbox_base_class.py
@@ -300,7 +300,7 @@ def test_create_netbox_object_check_mode_false(
serialized_obj, diff = mock_netbox_module._create_netbox_object(
endpoint_mock, normalized_data
)
- assert endpoint_mock.create.called_once_with(normalized_data)
+ endpoint_mock.create.assert_called_with(normalized_data)
assert serialized_obj.serialize() == return_value
assert diff == on_creation_diff
@@ -312,7 +312,7 @@ def test_create_netbox_object_check_mode_true(
serialized_obj, diff = mock_netbox_module._create_netbox_object(
endpoint_mock, normalized_data
)
- assert endpoint_mock.create.not_called()
+ endpoint_mock.create.assert_not_called()
assert serialized_obj == normalized_data
assert diff == on_creation_diff
@@ -322,7 +322,7 @@ def test_delete_netbox_object_check_mode_false(
):
mock_netbox_module.nb_object = nb_obj_mock
diff = mock_netbox_module._delete_netbox_object()
- assert nb_obj_mock.delete.called_once()
+ nb_obj_mock.delete.assert_called_once()
assert diff == on_deletion_diff
@@ -332,7 +332,7 @@ def test_delete_netbox_object_check_mode_true(
mock_netbox_module.check_mode = True
mock_netbox_module.nb_object = nb_obj_mock
diff = mock_netbox_module._delete_netbox_object()
- assert nb_obj_mock.delete.not_called()
+ nb_obj_mock.delete.assert_not_called()
assert diff == on_deletion_diff
@@ -340,7 +340,7 @@ def test_update_netbox_object_no_changes(mock_netbox_module, nb_obj_mock):
mock_netbox_module.nb_object = nb_obj_mock
unchanged_data = nb_obj_mock.serialize()
serialized_object, diff = mock_netbox_module._update_netbox_object(unchanged_data)
- assert nb_obj_mock.update.not_called()
+ nb_obj_mock.update.assert_not_called()
assert serialized_object == unchanged_data
assert diff is None
@@ -352,7 +352,7 @@ def test_update_netbox_object_with_changes_check_mode_false(
serialized_obj, diff = mock_netbox_module._update_netbox_object(
changed_serialized_obj
)
- assert nb_obj_mock.update.called_once_with(changed_serialized_obj)
+ nb_obj_mock.update.assert_called_once_with(changed_serialized_obj)
assert serialized_obj == nb_obj_mock.serialize()
assert diff == on_update_diff
@@ -368,7 +368,7 @@ def test_update_netbox_object_with_changes_check_mode_true(
serialized_obj, diff = mock_netbox_module._update_netbox_object(
changed_serialized_obj
)
- assert nb_obj_mock.update.not_called()
+ nb_obj_mock.update.assert_not_called()
assert serialized_obj == updated_serialized_obj
assert diff == on_update_diff
diff --git a/ansible_collections/purestorage/flasharray/.github/workflows/main.yml b/ansible_collections/purestorage/flasharray/.github/workflows/main.yml
index 529e1fa88..27d5532d2 100644
--- a/ansible_collections/purestorage/flasharray/.github/workflows/main.yml
+++ b/ansible_collections/purestorage/flasharray/.github/workflows/main.yml
@@ -13,7 +13,6 @@ jobs:
strategy:
matrix:
ansible:
- - stable-2.14
- stable-2.15
- stable-2.16
- devel
diff --git a/ansible_collections/purestorage/flasharray/CHANGELOG.rst b/ansible_collections/purestorage/flasharray/CHANGELOG.rst
index 71991a731..111a76e53 100644
--- a/ansible_collections/purestorage/flasharray/CHANGELOG.rst
+++ b/ansible_collections/purestorage/flasharray/CHANGELOG.rst
@@ -5,6 +5,27 @@ Purestorage.Flasharray Release Notes
.. contents:: Topics
+v1.28.0
+=======
+
+Minor Changes
+-------------
+
+- purefa_hg - Add support to rename existing hostgroup
+- 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_pg - Enhance ``state absent`` to work on volumes, hosts and hostgroups
+- purefa_snap - Add ``created_epoch`` parameter in response
+
+Bugfixes
+--------
+
+- purefa_host - Allows all current host inititators to be correctly removed
+- purefa_host - Fix idempotency issue with connected volume
+- purefa_volume - Ensure module response for creation of volume and rerun are the same
+- purefa_volume - Fix idempotency issue with delete volume
+
v1.27.0
=======
diff --git a/ansible_collections/purestorage/flasharray/FILES.json b/ansible_collections/purestorage/flasharray/FILES.json
index 5beee0936..81e70779b 100644
--- a/ansible_collections/purestorage/flasharray/FILES.json
+++ b/ansible_collections/purestorage/flasharray/FILES.json
@@ -15,13 +15,6 @@
"format": 1
},
{
- "name": "changelogs/210_add_rename_hgroup.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8589783011b4145d3eb5099a7d5e025e9fd2cbf50319d426f0b5b6f8e1b637af",
- "format": 1
- },
- {
"name": "changelogs/fragments",
"ftype": "dir",
"chksum_type": null,
@@ -120,6 +113,13 @@
"format": 1
},
{
+ "name": "changelogs/fragments/562_host_vol_fix.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8e9b4f4e5e786fbd3d991227b5df5feb83eb7f1b0e72919df98b3e7fba51b8c1",
+ "format": 1
+ },
+ {
"name": "changelogs/fragments/518_nfs_security.yaml",
"ftype": "file",
"chksum_type": "sha256",
@@ -190,6 +190,13 @@
"format": 1
},
{
+ "name": "changelogs/fragments/210_add_rename_hgroup.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8589783011b4145d3eb5099a7d5e025e9fd2cbf50319d426f0b5b6f8e1b637af",
+ "format": 1
+ },
+ {
"name": "changelogs/fragments/308_add_vm.yaml",
"ftype": "file",
"chksum_type": "sha256",
@@ -295,6 +302,13 @@
"format": 1
},
{
+ "name": "changelogs/fragments/559_volume_response.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "a46bd238e8734aab9aaf4c2829922bd0af48efe0180ecb2836f13c549ef05444",
+ "format": 1
+ },
+ {
"name": "changelogs/fragments/134_ac_pg_support.yaml",
"ftype": "file",
"chksum_type": "sha256",
@@ -484,6 +498,13 @@
"format": 1
},
{
+ "name": "changelogs/fragments/550_service.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ed29a7af803d809ffe4f0e1a755431cc0c0f2e3b8330c79cfa867ce0e6914350",
+ "format": 1
+ },
+ {
"name": "changelogs/fragments/336_add_servicelist.yaml",
"ftype": "file",
"chksum_type": "sha256",
@@ -925,6 +946,13 @@
"format": 1
},
{
+ "name": "changelogs/fragments/560_snapshot_epoch.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2ee78a33bdaeb6cea928365789ef208d6b5c56db648b3cea894020c9cd203983",
+ "format": 1
+ },
+ {
"name": "changelogs/fragments/496_fix_cert_signing.yaml",
"ftype": "file",
"chksum_type": "sha256",
@@ -1121,6 +1149,13 @@
"format": 1
},
{
+ "name": "changelogs/fragments/211_fix_clearing_host_inititators.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8ce58291d0256cb22a7a8cb015ebfc4775474f594d5c724225875c495213d259",
+ "format": 1
+ },
+ {
"name": "changelogs/fragments/133_purefa_info_v6_replication.yaml",
"ftype": "file",
"chksum_type": "sha256",
@@ -1177,6 +1212,13 @@
"format": 1
},
{
+ "name": "changelogs/fragments/561_remote_snap_info.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "179f27b578403177cc3f2f94c141ae33d2e71e95fc2457a71bff010fe344a287",
+ "format": 1
+ },
+ {
"name": "changelogs/fragments/136_add_vol_get_send_info.yaml",
"ftype": "file",
"chksum_type": "sha256",
@@ -1254,6 +1296,13 @@
"format": 1
},
{
+ "name": "changelogs/fragments/558_add_perf_info.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "0f5d8964b5286a56b053468398ff4d937d4af276e24a91c8f7f41eeea2001d87",
+ "format": 1
+ },
+ {
"name": "changelogs/fragments/315_spf_details.yaml",
"ftype": "file",
"chksum_type": "sha256",
@@ -1268,6 +1317,13 @@
"format": 1
},
{
+ "name": "changelogs/fragments/555_update_pg.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "71abc3c712ee7e9b71002f31109473aa4b5a34a8ab36dace109e0e22ee540163",
+ "format": 1
+ },
+ {
"name": "changelogs/fragments/375_fix_remote_hosts.yaml",
"ftype": "file",
"chksum_type": "sha256",
@@ -1509,21 +1565,14 @@
"name": "changelogs/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b301bed7223921e76ea8c916463b769bb824f548df463e372920d8424d19dc2f",
- "format": 1
- },
- {
- "name": "changelogs/211_fix_clearing_host_inititators.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8ce58291d0256cb22a7a8cb015ebfc4775474f594d5c724225875c495213d259",
+ "chksum_sha256": "0b587f1c2ab470c01ea25d07a6102c7bd45c511ce57596be9c20f38bb3b5e456",
"format": 1
},
{
"name": "changelogs/.plugin-cache.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dc866613dd4087ce500e2278a17bcd5aa16faf970f135ce9390b3d98605ec035",
+ "chksum_sha256": "2eb4d8b274c69bde5af5d3e8dfb793a902429d99ca679286f7cce43712013dad",
"format": 1
},
{
@@ -1887,7 +1936,7 @@
"name": "plugins/modules/purefa_volume.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "028203768fcd1f50267ca0fcf343ad03f5f4a5e8a80698567f55cf5b0d71e770",
+ "chksum_sha256": "654560c2551fdb85c368d9e296d496174724064102b2b407f428191627a40e7d",
"format": 1
},
{
@@ -1936,7 +1985,7 @@
"name": "plugins/modules/purefa_host.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d913dcc81fa1cde2809c459cd4b59eafd14e41911dd1be71b935f34dc6cfd732",
+ "chksum_sha256": "b7d3d5e058062e9376c53f5b81cf78cb90bfa28840f8c537079fabf7f6444194",
"format": 1
},
{
@@ -2069,7 +2118,7 @@
"name": "plugins/modules/purefa_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "de685054de14726a87c3c9f2ef257770b8e82384e7fe024c97efd72f04b51ef2",
+ "chksum_sha256": "71476398cc0db0ada0a924a210ea483bcad581eb94dd778562f845f510fcfb01",
"format": 1
},
{
@@ -2090,7 +2139,7 @@
"name": "plugins/modules/purefa_pg.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5412fdd646fe83be3147d917bfc6e7b67eca14f96e11aca16696e5f62ceb9a6a",
+ "chksum_sha256": "c33f5788a68e3c24385a1682a9958cff97f2e0b131e468d1711d9d2ccf789e24",
"format": 1
},
{
@@ -2216,7 +2265,7 @@
"name": ".github/workflows/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3fbd0b2490b2c53dcf65cac2ca22b246ba7a447ffbe89366de942686de8e54a3",
+ "chksum_sha256": "de55a03dadff2ec71a72efd44dcbcb3c2950d1a00aea1ffd6223c6ce9a9e815a",
"format": 1
},
{
@@ -2237,7 +2286,7 @@
"name": "README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "78c320e467ed14bb56976077daad539d0016f60275826f69ea2cce845167aed0",
+ "chksum_sha256": "f7f6650c570a9b0da9f733fa208da1166b49bddf08658d59ef9905648f80060f",
"format": 1
},
{
@@ -2251,7 +2300,7 @@
"name": "meta/runtime.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a215a07e8eb5923a9ad3ab77c7f18090860e0ce10af48e97c0ba13c2dc3ca354",
+ "chksum_sha256": "6b21b23276abc0ebd3dc7b0f60ee7bde406d270e81fbc44f050c18e6f87c091b",
"format": 1
},
{
@@ -2321,7 +2370,7 @@
"name": "CHANGELOG.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3d37a2cad23124cafaeb9cff76e42675e03e970925ef84ac6623a6ebdcf93536",
+ "chksum_sha256": "ef83ad3fb215623f94ceb80b0dab6978894dd59b90203d2999e9026fa9627b76",
"format": 1
}
],
diff --git a/ansible_collections/purestorage/flasharray/MANIFEST.json b/ansible_collections/purestorage/flasharray/MANIFEST.json
index 7f4348785..5c39c4c14 100644
--- a/ansible_collections/purestorage/flasharray/MANIFEST.json
+++ b/ansible_collections/purestorage/flasharray/MANIFEST.json
@@ -2,7 +2,7 @@
"collection_info": {
"namespace": "purestorage",
"name": "flasharray",
- "version": "1.27.0",
+ "version": "1.28.0",
"authors": [
"Pure Storage Ansible Team <pure-ansible-team@purestorage.com>"
],
@@ -29,7 +29,7 @@
"name": "FILES.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0b1b2d1f58f2481ee5654c9c884302a3e2c330cabf5a720b81a8e44543082dc7",
+ "chksum_sha256": "ab3ade4ad530c2f9141631d1ac2c2b431cec2651753ec9e7dc3a845eda21dd82",
"format": 1
},
"format": 1
diff --git a/ansible_collections/purestorage/flasharray/README.md b/ansible_collections/purestorage/flasharray/README.md
index e0ec9614f..92ae085d8 100644
--- a/ansible_collections/purestorage/flasharray/README.md
+++ b/ansible_collections/purestorage/flasharray/README.md
@@ -15,7 +15,7 @@ The Pure Storage FlashArray collection consists of the latest versions of the Fl
## Prerequisites
-- Ansible 2.14 or later
+- Ansible 2.15 or later
- Pure Storage FlashArray system running Purity 6.1.0 or later
- some modules require higher versions of Purity
- Some modules require specific Purity versions
diff --git a/ansible_collections/purestorage/flasharray/changelogs/.plugin-cache.yaml b/ansible_collections/purestorage/flasharray/changelogs/.plugin-cache.yaml
index 57f7e73f4..f99c9ee8a 100644
--- a/ansible_collections/purestorage/flasharray/changelogs/.plugin-cache.yaml
+++ b/ansible_collections/purestorage/flasharray/changelogs/.plugin-cache.yaml
@@ -322,4 +322,4 @@ plugins:
strategy: {}
test: {}
vars: {}
-version: 1.27.0
+version: 1.28.0
diff --git a/ansible_collections/purestorage/flasharray/changelogs/changelog.yaml b/ansible_collections/purestorage/flasharray/changelogs/changelog.yaml
index 6a0cac383..c73a6b48b 100644
--- a/ansible_collections/purestorage/flasharray/changelogs/changelog.yaml
+++ b/ansible_collections/purestorage/flasharray/changelogs/changelog.yaml
@@ -582,6 +582,33 @@ releases:
- 547_lacp_neighbor_info.yaml
- 548_uptime.yaml
release_date: '2024-03-08'
+ 1.28.0:
+ changes:
+ bugfixes:
+ - purefa_host - Allows all current host inititators to be correctly removed
+ - purefa_host - Fix idempotency issue with connected volume
+ - purefa_volume - Ensure module response for creation of volume and rerun are
+ the same
+ - purefa_volume - Fix idempotency issue with delete volume
+ minor_changes:
+ - purefa_hg - Add support to rename existing hostgroup
+ - 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_pg - Enhance ``state absent`` to work on volumes, hosts and hostgroups
+ - purefa_snap - Add ``created_epoch`` parameter in response
+ fragments:
+ - 210_add_rename_hgroup.yaml
+ - 211_fix_clearing_host_inititators.yaml
+ - 550_service.yaml
+ - 555_update_pg.yaml
+ - 558_add_perf_info.yaml
+ - 559_volume_response.yaml
+ - 560_snapshot_epoch.yaml
+ - 561_remote_snap_info.yaml
+ - 562_host_vol_fix.yaml
+ release_date: '2024-05-01'
1.4.0:
changes:
bugfixes:
diff --git a/ansible_collections/purestorage/flasharray/changelogs/210_add_rename_hgroup.yaml b/ansible_collections/purestorage/flasharray/changelogs/fragments/210_add_rename_hgroup.yaml
index 78d1d91f9..78d1d91f9 100644
--- a/ansible_collections/purestorage/flasharray/changelogs/210_add_rename_hgroup.yaml
+++ b/ansible_collections/purestorage/flasharray/changelogs/fragments/210_add_rename_hgroup.yaml
diff --git a/ansible_collections/purestorage/flasharray/changelogs/211_fix_clearing_host_inititators.yaml b/ansible_collections/purestorage/flasharray/changelogs/fragments/211_fix_clearing_host_inititators.yaml
index 1425d12b0..1425d12b0 100644
--- a/ansible_collections/purestorage/flasharray/changelogs/211_fix_clearing_host_inititators.yaml
+++ b/ansible_collections/purestorage/flasharray/changelogs/fragments/211_fix_clearing_host_inititators.yaml
diff --git a/ansible_collections/purestorage/flasharray/changelogs/fragments/550_service.yaml b/ansible_collections/purestorage/flasharray/changelogs/fragments/550_service.yaml
new file mode 100644
index 000000000..d45c7f47c
--- /dev/null
+++ b/ansible_collections/purestorage/flasharray/changelogs/fragments/550_service.yaml
@@ -0,0 +1,2 @@
+minor_changes:
+ - purefa_info - Add service_mode to identify if array is Evergreen//One or standard FlashArray
diff --git a/ansible_collections/purestorage/flasharray/changelogs/fragments/555_update_pg.yaml b/ansible_collections/purestorage/flasharray/changelogs/fragments/555_update_pg.yaml
new file mode 100644
index 000000000..854c106f1
--- /dev/null
+++ b/ansible_collections/purestorage/flasharray/changelogs/fragments/555_update_pg.yaml
@@ -0,0 +1,2 @@
+minor_changes:
+ - purefa_pg - Enhance ``state absent`` to work on volumes, hosts and hostgroups
diff --git a/ansible_collections/purestorage/flasharray/changelogs/fragments/558_add_perf_info.yaml b/ansible_collections/purestorage/flasharray/changelogs/fragments/558_add_perf_info.yaml
new file mode 100644
index 000000000..62ba0ef23
--- /dev/null
+++ b/ansible_collections/purestorage/flasharray/changelogs/fragments/558_add_perf_info.yaml
@@ -0,0 +1,2 @@
+minor_changes:
+ - purefa_info - Add performance data for some subsets
diff --git a/ansible_collections/purestorage/flasharray/changelogs/fragments/559_volume_response.yaml b/ansible_collections/purestorage/flasharray/changelogs/fragments/559_volume_response.yaml
new file mode 100644
index 000000000..1524bb247
--- /dev/null
+++ b/ansible_collections/purestorage/flasharray/changelogs/fragments/559_volume_response.yaml
@@ -0,0 +1,2 @@
+bugfixes:
+ - purefa_volume - Ensure module response for creation of volume and rerun are the same
diff --git a/ansible_collections/purestorage/flasharray/changelogs/fragments/560_snapshot_epoch.yaml b/ansible_collections/purestorage/flasharray/changelogs/fragments/560_snapshot_epoch.yaml
new file mode 100644
index 000000000..8574fe26e
--- /dev/null
+++ b/ansible_collections/purestorage/flasharray/changelogs/fragments/560_snapshot_epoch.yaml
@@ -0,0 +1,2 @@
+minor_changes:
+ - purefa_snap - Add ``created_epoch`` parameter in response
diff --git a/ansible_collections/purestorage/flasharray/changelogs/fragments/561_remote_snap_info.yaml b/ansible_collections/purestorage/flasharray/changelogs/fragments/561_remote_snap_info.yaml
new file mode 100644
index 000000000..1e5532b75
--- /dev/null
+++ b/ansible_collections/purestorage/flasharray/changelogs/fragments/561_remote_snap_info.yaml
@@ -0,0 +1,2 @@
+minor_changes:
+ - purefa_info - Add ``is_local`` parameter for snapshots
diff --git a/ansible_collections/purestorage/flasharray/changelogs/fragments/562_host_vol_fix.yaml b/ansible_collections/purestorage/flasharray/changelogs/fragments/562_host_vol_fix.yaml
new file mode 100644
index 000000000..762d23781
--- /dev/null
+++ b/ansible_collections/purestorage/flasharray/changelogs/fragments/562_host_vol_fix.yaml
@@ -0,0 +1,3 @@
+bugfixes:
+ - purefa_volume - Fix idempotency issue with delete volume
+ - purefa_host - Fix idempotency issue with connected volume
diff --git a/ansible_collections/purestorage/flasharray/meta/runtime.yml b/ansible_collections/purestorage/flasharray/meta/runtime.yml
index 15af60575..c784b7e82 100644
--- a/ansible_collections/purestorage/flasharray/meta/runtime.yml
+++ b/ansible_collections/purestorage/flasharray/meta/runtime.yml
@@ -1,5 +1,5 @@
---
-requires_ansible: ">=2.14.0"
+requires_ansible: ">=2.15.0"
plugin_routing:
modules:
purefa_sso:
diff --git a/ansible_collections/purestorage/flasharray/plugins/modules/purefa_host.py b/ansible_collections/purestorage/flasharray/plugins/modules/purefa_host.py
index c396975a2..1bf88ac1e 100644
--- a/ansible_collections/purestorage/flasharray/plugins/modules/purefa_host.py
+++ b/ansible_collections/purestorage/flasharray/plugins/modules/purefa_host.py
@@ -792,6 +792,7 @@ def update_host(module, array):
"""Modify a host"""
changed = False
renamed = False
+ vol_changed = False
vlan_changed = False
if module.params["state"] == "present":
if module.params["vlan"]:
@@ -816,7 +817,7 @@ def update_host(module, array):
module.params["rename"]
)
)
- init_changed = vol_changed = pers_changed = pref_changed = chap_changed = False
+ init_changed = pers_changed = pref_changed = chap_changed = False
volumes = array.list_host_connections(module.params["name"])
if module.params["iqn"] or module.params["wwns"] or module.params["nqn"]:
init_changed = _update_host_initiators(module, array)
diff --git a/ansible_collections/purestorage/flasharray/plugins/modules/purefa_info.py b/ansible_collections/purestorage/flasharray/plugins/modules/purefa_info.py
index 262d227be..cc2c92fdc 100644
--- a/ansible_collections/purestorage/flasharray/plugins/modules/purefa_info.py
+++ b/ansible_collections/purestorage/flasharray/plugins/modules/purefa_info.py
@@ -176,6 +176,9 @@ def generate_default_dict(module, array):
default_info["encryption_module_version"] = encryption.module_version
eradication = array_data.eradication_config
if SUBS_API_VERSION in api_version:
+ default_info["service_mode"] = list(arrayv6.get_subscriptions().items)[
+ 0
+ ].service
default_info["eradication_disabled_days_timer"] = int(
eradication.disabled_delay / SEC_TO_DAY
)
@@ -1079,9 +1082,15 @@ def generate_snap_dict(module, array):
"size": snaps[snap]["size"],
"source": snaps[snap]["source"],
"created": snaps[snap]["created"],
+ "created_epoch": int(
+ time.mktime(time.strptime(snaps[snap]["created"], "%Y-%m-%dT%H:%M:%SZ"))
+ ),
"tags": [],
+ "is_local": True,
"remote": [],
}
+ if ":" in snapshot and "::" not in snapshot:
+ snap_info[snapshot]["is_local"] = False
if FC_REPL_API_VERSION in api_version:
for snap in range(0, len(snapsv6)):
snapshot = snapsv6[snap].name
@@ -1324,7 +1333,7 @@ def generate_del_vol_dict(module, array):
return volume_info
-def generate_vol_dict(module, array):
+def generate_vol_dict(module, array, performance):
volume_info = {}
vols_space = array.list_volumes(space=True)
vols = array.list_volumes()
@@ -1347,6 +1356,7 @@ def generate_vol_dict(module, array):
"data_reduction": vols_space[vol]["data_reduction"],
"thin_provisioning": vols_space[vol]["thin_provisioning"],
"total_reduction": vols_space[vol]["total_reduction"],
+ "performance": [],
}
api_version = array._list_available_rest_versions()
if V6_MINIMUM_API_VERSION in api_version:
@@ -1425,27 +1435,78 @@ def generate_vol_dict(module, array):
].priority_adjustment.priority_adjustment_operator + str(
volumes[vol].priority_adjustment.priority_adjustment_value
)
- cvols = array.list_volumes(connect=True)
- for cvol in range(0, len(cvols)):
- volume = cvols[cvol]["name"]
- voldict = {"host": cvols[cvol]["host"], "lun": cvols[cvol]["lun"]}
- volume_info[volume]["hosts"].append(voldict)
- if ACTIVE_DR_API in api_version:
- voltags = array.list_volumes(tags=True)
- for voltag in range(0, len(voltags)):
- if voltags[voltag]["namespace"] != "vasa-integration.purestorage.com":
- volume = voltags[voltag]["name"]
- tagdict = {
- "key": voltags[voltag]["key"],
- "value": voltags[voltag]["value"],
- "copyable": voltags[voltag]["copyable"],
- "namespace": voltags[voltag]["namespace"],
+ if performance:
+ vols_performance = list(arrayv6.get_volumes_performance().items)
+ for performance in range(0, len(vols_performance)):
+ volume_info[vols_performance[performance].name]["performance"] = {
+ "bytes_per_mirrored_write": vols_performance[
+ performance
+ ].bytes_per_mirrored_write,
+ "bytes_per_op": vols_performance[performance].bytes_per_op,
+ "bytes_per_read": vols_performance[performance].bytes_per_read,
+ "bytes_per_write": vols_performance[performance].bytes_per_write,
+ "mirrored_write_bytes_per_sec": vols_performance[
+ performance
+ ].mirrored_write_bytes_per_sec,
+ "mirrored_writes_per_sec": vols_performance[
+ performance
+ ].mirrored_writes_per_sec,
+ "qos_rate_limit_usec_per_mirrored_write_op": vols_performance[
+ performance
+ ].qos_rate_limit_usec_per_mirrored_write_op,
+ "qos_rate_limit_usec_per_read_op": vols_performance[
+ performance
+ ].qos_rate_limit_usec_per_mirrored_write_op,
+ "qos_rate_limit_usec_per_write_op": vols_performance[
+ performance
+ ].qos_rate_limit_usec_per_read_op,
+ "queue_usec_per_mirrored_write_op": vols_performance[
+ performance
+ ].queue_usec_per_mirrored_write_op,
+ "queue_usec_per_read_op": vols_performance[
+ performance
+ ].queue_usec_per_read_op,
+ "queue_usec_per_write_op": vols_performance[
+ performance
+ ].queue_usec_per_write_op,
+ "read_bytes_per_sec": vols_performance[
+ performance
+ ].read_bytes_per_sec,
+ "reads_per_sec": vols_performance[performance].reads_per_sec,
+ "san_usec_per_mirrored_write_op": vols_performance[
+ performance
+ ].san_usec_per_mirrored_write_op,
+ "san_usec_per_read_op": vols_performance[
+ performance
+ ].san_usec_per_read_op,
+ "san_usec_per_write_op": vols_performance[
+ performance
+ ].san_usec_per_write_op,
+ "service_usec_per_mirrored_write_op": vols_performance[
+ performance
+ ].service_usec_per_mirrored_write_op,
+ "service_usec_per_read_op": vols_performance[
+ performance
+ ].service_usec_per_read_op,
+ "service_usec_per_write_op": vols_performance[
+ performance
+ ].service_usec_per_write_op,
+ "usec_per_mirrored_write_op": vols_performance[
+ performance
+ ].usec_per_mirrored_write_op,
+ "usec_per_read_op": vols_performance[performance].usec_per_read_op,
+ "usec_per_write_op": vols_performance[
+ performance
+ ].usec_per_write_op,
+ "write_bytes_per_sec": vols_performance[
+ performance
+ ].write_bytes_per_sec,
+ "writes_per_sec": vols_performance[performance].writes_per_sec,
}
- volume_info[volume]["tags"].append(tagdict)
return volume_info
-def generate_host_dict(module, array):
+def generate_host_dict(module, array, performance):
api_version = array._list_available_rest_versions()
host_info = {}
if FC_REPL_API_VERSION in api_version:
@@ -1474,6 +1535,7 @@ def generate_host_dict(module, array):
"personality": array.get_host(hostname, personality=True)["personality"],
"target_port": all_tports,
"volumes": [],
+ "performance": [],
"performance_balance": [],
}
if FC_REPL_API_VERSION in api_version:
@@ -1546,6 +1608,70 @@ def generate_host_dict(module, array):
if hosts[host].is_local:
hostname = hosts[host].name
host_info[hostname]["vlan"] = getattr(hosts[host], "vlan", None)
+ if FC_REPL_API_VERSION in api_version and performance:
+ hosts_performance = list(arrayv6.get_hosts_performance().items)
+ for performance in range(0, len(hosts_performance)):
+ host_info[hosts_performance[performance].name]["performance"] = {
+ "bytes_per_mirrored_write": hosts_performance[
+ performance
+ ].bytes_per_mirrored_write,
+ "bytes_per_op": hosts_performance[performance].bytes_per_op,
+ "bytes_per_read": hosts_performance[performance].bytes_per_read,
+ "bytes_per_write": hosts_performance[performance].bytes_per_write,
+ "mirrored_write_bytes_per_sec": hosts_performance[
+ performance
+ ].mirrored_write_bytes_per_sec,
+ "mirrored_writes_per_sec": hosts_performance[
+ performance
+ ].mirrored_writes_per_sec,
+ "qos_rate_limit_usec_per_mirrored_write_op": hosts_performance[
+ performance
+ ].qos_rate_limit_usec_per_mirrored_write_op,
+ "qos_rate_limit_usec_per_read_op": hosts_performance[
+ performance
+ ].qos_rate_limit_usec_per_mirrored_write_op,
+ "qos_rate_limit_usec_per_write_op": hosts_performance[
+ performance
+ ].qos_rate_limit_usec_per_read_op,
+ "queue_usec_per_mirrored_write_op": hosts_performance[
+ performance
+ ].queue_usec_per_mirrored_write_op,
+ "queue_usec_per_read_op": hosts_performance[
+ performance
+ ].queue_usec_per_read_op,
+ "queue_usec_per_write_op": hosts_performance[
+ performance
+ ].queue_usec_per_write_op,
+ "read_bytes_per_sec": hosts_performance[performance].read_bytes_per_sec,
+ "reads_per_sec": hosts_performance[performance].reads_per_sec,
+ "san_usec_per_mirrored_write_op": hosts_performance[
+ performance
+ ].san_usec_per_mirrored_write_op,
+ "san_usec_per_read_op": hosts_performance[
+ performance
+ ].san_usec_per_read_op,
+ "san_usec_per_write_op": hosts_performance[
+ performance
+ ].san_usec_per_write_op,
+ "service_usec_per_mirrored_write_op": hosts_performance[
+ performance
+ ].service_usec_per_mirrored_write_op,
+ "service_usec_per_read_op": hosts_performance[
+ performance
+ ].service_usec_per_read_op,
+ "service_usec_per_write_op": hosts_performance[
+ performance
+ ].service_usec_per_write_op,
+ "usec_per_mirrored_write_op": hosts_performance[
+ performance
+ ].usec_per_mirrored_write_op,
+ "usec_per_read_op": hosts_performance[performance].usec_per_read_op,
+ "usec_per_write_op": hosts_performance[performance].usec_per_write_op,
+ "write_bytes_per_sec": hosts_performance[
+ performance
+ ].write_bytes_per_sec,
+ "writes_per_sec": hosts_performance[performance].writes_per_sec,
+ }
return host_info
@@ -1674,7 +1800,7 @@ def generate_del_pgroups_dict(module, array):
return pgroups_info
-def generate_pgroups_dict(module, array):
+def generate_pgroups_dict(module, array, performance):
pgroups_info = {}
api_version = array._list_available_rest_versions()
pgroups = array.list_pgroups()
@@ -1901,7 +2027,7 @@ def generate_del_pods_dict(module, array):
return pods_info
-def generate_pods_dict(module, array):
+def generate_pods_dict(module, array, performance):
pods_info = {}
api_version = array._list_available_rest_versions()
if AC_REQUIRED_API_VERSION in api_version:
@@ -1913,6 +2039,7 @@ def generate_pods_dict(module, array):
"arrays": pods[pod]["arrays"],
"mediator": pods[pod]["mediator"],
"mediator_version": pods[pod]["mediator_version"],
+ "performance": [],
}
if ACTIVE_DR_API in api_version:
if pods_info[acpod]["arrays"][0]["frozen_at"]:
@@ -1968,6 +2095,79 @@ def generate_pods_dict(module, array):
)
if SUBS_API_VERSION in api_version:
pods_info[name]["total_used"] = pods[pod].space.total_used
+ if performance:
+ pods_performance = list(arrayv6.get_pods_performance().items)
+ for performance in range(0, len(pods_performance)):
+ pods_info[pods_performance[performance].name]["performance"] = {
+ "bytes_per_mirrored_write": pods_performance[
+ performance
+ ].bytes_per_mirrored_write,
+ "bytes_per_op": pods_performance[performance].bytes_per_op,
+ "bytes_per_read": pods_performance[performance].bytes_per_read,
+ "bytes_per_write": pods_performance[
+ performance
+ ].bytes_per_write,
+ "mirrored_write_bytes_per_sec": pods_performance[
+ performance
+ ].mirrored_write_bytes_per_sec,
+ "mirrored_writes_per_sec": pods_performance[
+ performance
+ ].mirrored_writes_per_sec,
+ "others_per_sec": pods_performance[performance].others_per_sec,
+ "qos_rate_limit_usec_per_mirrored_write_op": pods_performance[
+ performance
+ ].qos_rate_limit_usec_per_mirrored_write_op,
+ "qos_rate_limit_usec_per_read_op": pods_performance[
+ performance
+ ].qos_rate_limit_usec_per_mirrored_write_op,
+ "qos_rate_limit_usec_per_write_op": pods_performance[
+ performance
+ ].qos_rate_limit_usec_per_read_op,
+ "queue_usec_per_mirrored_write_op": pods_performance[
+ performance
+ ].queue_usec_per_mirrored_write_op,
+ "queue_usec_per_read_op": pods_performance[
+ performance
+ ].queue_usec_per_read_op,
+ "queue_usec_per_write_op": pods_performance[
+ performance
+ ].queue_usec_per_write_op,
+ "read_bytes_per_sec": pods_performance[
+ performance
+ ].read_bytes_per_sec,
+ "reads_per_sec": pods_performance[performance].reads_per_sec,
+ "san_usec_per_mirrored_write_op": pods_performance[
+ performance
+ ].san_usec_per_mirrored_write_op,
+ "san_usec_per_read_op": pods_performance[
+ performance
+ ].san_usec_per_read_op,
+ "san_usec_per_write_op": pods_performance[
+ performance
+ ].san_usec_per_write_op,
+ "service_usec_per_mirrored_write_op": pods_performance[
+ performance
+ ].service_usec_per_mirrored_write_op,
+ "service_usec_per_read_op": pods_performance[
+ performance
+ ].service_usec_per_read_op,
+ "service_usec_per_write_op": pods_performance[
+ performance
+ ].service_usec_per_write_op,
+ "usec_per_mirrored_write_op": pods_performance[
+ performance
+ ].usec_per_mirrored_write_op,
+ "usec_per_read_op": pods_performance[
+ performance
+ ].usec_per_read_op,
+ "usec_per_write_op": pods_performance[
+ performance
+ ].usec_per_write_op,
+ "write_bytes_per_sec": pods_performance[
+ performance
+ ].write_bytes_per_sec,
+ "writes_per_sec": pods_performance[performance].writes_per_sec,
+ }
return pods_info
@@ -2064,7 +2264,7 @@ def generate_apps_dict(array):
return apps_info
-def generate_vgroups_dict(module, array):
+def generate_vgroups_dict(module, array, performance):
vgroups_info = {}
api_version = array._list_available_rest_versions()
if AC_REQUIRED_API_VERSION in api_version:
@@ -2073,6 +2273,7 @@ def generate_vgroups_dict(module, array):
virtgroup = vgroups[vgroup]["name"]
vgroups_info[virtgroup] = {
"volumes": vgroups[vgroup]["volumes"],
+ "performance": [],
}
if V6_MINIMUM_API_VERSION in api_version:
arrayv6 = get_array(module)
@@ -2115,6 +2316,72 @@ def generate_vgroups_dict(module, array):
].priority_adjustment.priority_adjustment_operator + str(
vgroups[vgroup].priority_adjustment.priority_adjustment_value
)
+ if performance:
+ vgs_performance = list(arrayv6.get_volume_groups_performance().items)
+ for performance in range(0, len(vgs_performance)):
+ vgroups_info[vgs_performance[performance].name]["performance"] = {
+ "bytes_per_mirrored_write": vgs_performance[
+ performance
+ ].bytes_per_mirrored_write,
+ "bytes_per_op": vgs_performance[performance].bytes_per_op,
+ "bytes_per_read": vgs_performance[performance].bytes_per_read,
+ "bytes_per_write": vgs_performance[performance].bytes_per_write,
+ "mirrored_write_bytes_per_sec": vgs_performance[
+ performance
+ ].mirrored_write_bytes_per_sec,
+ "mirrored_writes_per_sec": vgs_performance[
+ performance
+ ].mirrored_writes_per_sec,
+ "qos_rate_limit_usec_per_mirrored_write_op": vgs_performance[
+ performance
+ ].qos_rate_limit_usec_per_mirrored_write_op,
+ "qos_rate_limit_usec_per_read_op": vgs_performance[
+ performance
+ ].qos_rate_limit_usec_per_mirrored_write_op,
+ "qos_rate_limit_usec_per_write_op": vgs_performance[
+ performance
+ ].qos_rate_limit_usec_per_read_op,
+ "queue_usec_per_mirrored_write_op": vgs_performance[
+ performance
+ ].queue_usec_per_mirrored_write_op,
+ "queue_usec_per_read_op": vgs_performance[
+ performance
+ ].queue_usec_per_read_op,
+ "queue_usec_per_write_op": vgs_performance[
+ performance
+ ].queue_usec_per_write_op,
+ "read_bytes_per_sec": vgs_performance[
+ performance
+ ].read_bytes_per_sec,
+ "reads_per_sec": vgs_performance[performance].reads_per_sec,
+ "san_usec_per_mirrored_write_op": vgs_performance[
+ performance
+ ].san_usec_per_mirrored_write_op,
+ "san_usec_per_read_op": vgs_performance[
+ performance
+ ].san_usec_per_read_op,
+ "san_usec_per_write_op": vgs_performance[
+ performance
+ ].san_usec_per_write_op,
+ "service_usec_per_mirrored_write_op": vgs_performance[
+ performance
+ ].service_usec_per_mirrored_write_op,
+ "service_usec_per_read_op": vgs_performance[
+ performance
+ ].service_usec_per_read_op,
+ "service_usec_per_write_op": vgs_performance[
+ performance
+ ].service_usec_per_write_op,
+ "usec_per_mirrored_write_op": vgs_performance[
+ performance
+ ].usec_per_mirrored_write_op,
+ "usec_per_read_op": vgs_performance[performance].usec_per_read_op,
+ "usec_per_write_op": vgs_performance[performance].usec_per_write_op,
+ "write_bytes_per_sec": vgs_performance[
+ performance
+ ].write_bytes_per_sec,
+ "writes_per_sec": vgs_performance[performance].writes_per_sec,
+ }
return vgroups_info
@@ -2425,7 +2692,7 @@ def generate_google_offload_dict(array):
return offload_info
-def generate_hgroups_dict(module, array):
+def generate_hgroups_dict(module, array, performance):
hgroups_info = {}
api_version = array._list_available_rest_versions()
hgroups = array.list_hgroups()
@@ -2480,6 +2747,72 @@ def generate_hgroups_dict(module, array):
)
if SUBS_API_VERSION in api_version:
hgroups_info[name]["total_used"] = hgroups[hgroup].space.total_used
+ if performance:
+ hgs_performance = list(arrayv6.get_host_groups_performance().items)
+ for performance in range(0, len(hgs_performance)):
+ hgroups_info[hgs_performance[performance].name]["performance"] = {
+ "bytes_per_mirrored_write": hgs_performance[
+ performance
+ ].bytes_per_mirrored_write,
+ "bytes_per_op": hgs_performance[performance].bytes_per_op,
+ "bytes_per_read": hgs_performance[performance].bytes_per_read,
+ "bytes_per_write": hgs_performance[performance].bytes_per_write,
+ "mirrored_write_bytes_per_sec": hgs_performance[
+ performance
+ ].mirrored_write_bytes_per_sec,
+ "mirrored_writes_per_sec": hgs_performance[
+ performance
+ ].mirrored_writes_per_sec,
+ "qos_rate_limit_usec_per_mirrored_write_op": hgs_performance[
+ performance
+ ].qos_rate_limit_usec_per_mirrored_write_op,
+ "qos_rate_limit_usec_per_read_op": hgs_performance[
+ performance
+ ].qos_rate_limit_usec_per_mirrored_write_op,
+ "qos_rate_limit_usec_per_write_op": hgs_performance[
+ performance
+ ].qos_rate_limit_usec_per_read_op,
+ "queue_usec_per_mirrored_write_op": hgs_performance[
+ performance
+ ].queue_usec_per_mirrored_write_op,
+ "queue_usec_per_read_op": hgs_performance[
+ performance
+ ].queue_usec_per_read_op,
+ "queue_usec_per_write_op": hgs_performance[
+ performance
+ ].queue_usec_per_write_op,
+ "read_bytes_per_sec": hgs_performance[
+ performance
+ ].read_bytes_per_sec,
+ "reads_per_sec": hgs_performance[performance].reads_per_sec,
+ "san_usec_per_mirrored_write_op": hgs_performance[
+ performance
+ ].san_usec_per_mirrored_write_op,
+ "san_usec_per_read_op": hgs_performance[
+ performance
+ ].san_usec_per_read_op,
+ "san_usec_per_write_op": hgs_performance[
+ performance
+ ].san_usec_per_write_op,
+ "service_usec_per_mirrored_write_op": hgs_performance[
+ performance
+ ].service_usec_per_mirrored_write_op,
+ "service_usec_per_read_op": hgs_performance[
+ performance
+ ].service_usec_per_read_op,
+ "service_usec_per_write_op": hgs_performance[
+ performance
+ ].service_usec_per_write_op,
+ "usec_per_mirrored_write_op": hgs_performance[
+ performance
+ ].usec_per_mirrored_write_op,
+ "usec_per_read_op": hgs_performance[performance].usec_per_read_op,
+ "usec_per_write_op": hgs_performance[performance].usec_per_write_op,
+ "write_bytes_per_sec": hgs_performance[
+ performance
+ ].write_bytes_per_sec,
+ "writes_per_sec": hgs_performance[performance].writes_per_sec,
+ }
return hgroups_info
@@ -2657,10 +2990,11 @@ def main():
)
info = {}
-
+ performance = False
if "minimum" in subset or "all" in subset or "apps" in subset:
info["default"] = generate_default_dict(module, array)
if "performance" in subset or "all" in subset:
+ performance = True
info["performance"] = generate_perf_dict(array)
if "config" in subset or "all" in subset:
info["config"] = generate_config_dict(module, array)
@@ -2673,26 +3007,26 @@ def main():
if "interfaces" in subset or "all" in subset:
info["interfaces"] = generate_interfaces_dict(array)
if "hosts" in subset or "all" in subset:
- info["hosts"] = generate_host_dict(module, array)
+ info["hosts"] = generate_host_dict(module, array, performance)
if "volumes" in subset or "all" in subset:
- info["volumes"] = generate_vol_dict(module, array)
+ info["volumes"] = generate_vol_dict(module, array, performance)
info["deleted_volumes"] = generate_del_vol_dict(module, array)
if "snapshots" in subset or "all" in subset:
info["snapshots"] = generate_snap_dict(module, array)
info["deleted_snapshots"] = generate_del_snap_dict(module, array)
if "hgroups" in subset or "all" in subset:
- info["hgroups"] = generate_hgroups_dict(module, array)
+ info["hgroups"] = generate_hgroups_dict(module, array, performance)
if "pgroups" in subset or "all" in subset:
info["pgroups"] = generate_pgroups_dict(module, array)
info["deleted_pgroups"] = generate_del_pgroups_dict(module, array)
if "pods" in subset or "all" in subset or "replication" in subset:
info["replica_links"] = generate_rl_dict(module, array)
- info["pods"] = generate_pods_dict(module, array)
+ info["pods"] = generate_pods_dict(module, array, performance)
info["deleted_pods"] = generate_del_pods_dict(module, array)
if "admins" in subset or "all" in subset:
info["admins"] = generate_admin_dict(array)
if "vgroups" in subset or "all" in subset:
- info["vgroups"] = generate_vgroups_dict(module, array)
+ info["vgroups"] = generate_vgroups_dict(module, array, performance)
info["deleted_vgroups"] = generate_del_vgroups_dict(module, array)
if "offload" in subset or "all" in subset:
info["azure_offload"] = generate_azure_offload_dict(module, array)
diff --git a/ansible_collections/purestorage/flasharray/plugins/modules/purefa_pg.py b/ansible_collections/purestorage/flasharray/plugins/modules/purefa_pg.py
index 3344c0895..840b11385 100644
--- a/ansible_collections/purestorage/flasharray/plugins/modules/purefa_pg.py
+++ b/ansible_collections/purestorage/flasharray/plugins/modules/purefa_pg.py
@@ -36,6 +36,8 @@ options:
state:
description:
- Define whether the protection group should exist or not.
+ - If specified with I(volume) or I(host) or I(hostgroup) will
+ act on those items in the protection group only.
type: str
default: present
choices: [ absent, present ]
@@ -186,6 +188,15 @@ EXAMPLES = r"""
target: arrayb
fa_url: 10.10.10.2
api_token: e31060a7-21fc-e277-6240-25983c6c4592
+
+- name: Remove a volume from protection group
+ purestorage.flasharray.purefa_pg:
+ name: bar
+ volume:
+ - vol1
+ state: absent
+ fa_url: 10.10.10.2
+ api_token: e31060a7-21fc-e277-6240-25983c6c4592
"""
RETURN = r"""
@@ -455,6 +466,7 @@ def rename_exists(module, array):
def update_pgroup(module, array):
"""Update Protection Group"""
changed = renamed = False
+ state = module.params["state"]
api_version = array._list_available_rest_versions()
if module.params["target"]:
connected_targets = []
@@ -546,19 +558,36 @@ def update_pgroup(module, array):
else:
cased_vols = list(module.params["volume"])
cased_pgvols = list(get_pgroup(module, array)["volumes"])
- if not all(x in cased_pgvols for x in cased_vols):
- if not module.check_mode:
- changed = True
- try:
- array.set_pgroup(
- module.params["name"], addvollist=module.params["volume"]
- )
- except Exception:
- module.fail_json(
- msg="Changing volumes in pgroup {0} failed.".format(
- module.params["name"]
+ if state == "present":
+ if not all(x in cased_pgvols for x in cased_vols):
+ if not module.check_mode:
+ changed = True
+ try:
+ array.set_pgroup(
+ module.params["name"],
+ addvollist=module.params["volume"],
+ )
+ except Exception:
+ module.fail_json(
+ msg="Adding volumes in pgroup {0} failed.".format(
+ module.params["name"]
+ )
+ )
+ else:
+ if all(x in cased_pgvols for x in cased_vols):
+ if not module.check_mode:
+ changed = True
+ try:
+ array.set_pgroup(
+ module.params["name"],
+ remvollist=module.params["volume"],
+ )
+ except Exception:
+ module.fail_json(
+ msg="Removing volumes in pgroup {0} failed.".format(
+ module.params["name"]
+ )
)
- )
if (
module.params["host"]
@@ -581,19 +610,34 @@ def update_pgroup(module, array):
else:
cased_hosts = list(module.params["host"])
cased_pghosts = list(get_pgroup(module, array)["hosts"])
- if not all(x in cased_pghosts for x in cased_hosts):
- if not module.check_mode:
- changed = True
- try:
- array.set_pgroup(
- module.params["name"], addhostlist=module.params["host"]
- )
- except Exception:
- module.fail_json(
- msg="Changing hosts in pgroup {0} failed.".format(
- module.params["name"]
+ if state == "present":
+ if not all(x in cased_pghosts for x in cased_hosts):
+ if not module.check_mode:
+ changed = True
+ try:
+ array.set_pgroup(
+ module.params["name"], addhostlist=module.params["host"]
+ )
+ except Exception:
+ module.fail_json(
+ msg="Adding hosts in pgroup {0} failed.".format(
+ module.params["name"]
+ )
+ )
+ else:
+ if all(x in cased_pghosts for x in cased_hosts):
+ if not module.check_mode:
+ changed = True
+ try:
+ array.set_pgroup(
+ module.params["name"], remhostlist=module.params["host"]
+ )
+ except Exception:
+ module.fail_json(
+ msg="Removing hosts in pgroup {0} failed.".format(
+ module.params["name"]
+ )
)
- )
if (
module.params["hostgroup"]
@@ -616,20 +660,36 @@ def update_pgroup(module, array):
else:
cased_hostg = list(module.params["hostgroup"])
cased_pghostg = list(get_pgroup(module, array)["hgroups"])
- if not all(x in cased_pghostg for x in cased_hostg):
- if not module.check_mode:
- changed = True
- try:
- array.set_pgroup(
- module.params["name"],
- addhgrouplist=module.params["hostgroup"],
- )
- except Exception:
- module.fail_json(
- msg="Changing hostgroups in pgroup {0} failed.".format(
- module.params["name"]
+ if state == "present":
+ if not all(x in cased_pghostg for x in cased_hostg):
+ if not module.check_mode:
+ changed = True
+ try:
+ array.set_pgroup(
+ module.params["name"],
+ addhgrouplist=module.params["hostgroup"],
+ )
+ except Exception:
+ module.fail_json(
+ msg="Adding hostgroups in pgroup {0} failed.".format(
+ module.params["name"]
+ )
+ )
+ else:
+ if all(x in cased_pghostg for x in cased_hostg):
+ if not module.check_mode:
+ changed = True
+ try:
+ array.set_pgroup(
+ module.params["name"],
+ remhgrouplist=module.params["hostgroup"],
+ )
+ except Exception:
+ module.fail_json(
+ msg="Removing hostgroups in pgroup {0} failed.".format(
+ module.params["name"]
+ )
)
- )
if module.params["rename"]:
if not rename_exists(module, array):
if ":" in module.params["name"]:
@@ -881,6 +941,16 @@ def main():
if pgroup and state == "present":
update_pgroup(module, array)
+ elif (
+ pgroup
+ and state == "absent"
+ and (
+ module.params["volume"]
+ or module.params["hosts"]
+ or module.params["hostgroups"]
+ )
+ ):
+ update_pgroup(module, array)
elif pgroup and state == "absent":
delete_pgroup(module, array)
elif xpgroup and state == "absent" and module.params["eradicate"]:
diff --git a/ansible_collections/purestorage/flasharray/plugins/modules/purefa_volume.py b/ansible_collections/purestorage/flasharray/plugins/modules/purefa_volume.py
index 877af7f74..77236e3af 100644
--- a/ansible_collections/purestorage/flasharray/plugins/modules/purefa_volume.py
+++ b/ansible_collections/purestorage/flasharray/plugins/modules/purefa_volume.py
@@ -331,7 +331,9 @@ from ansible_collections.purestorage.flasharray.plugins.module_utils.common impo
human_to_bytes,
human_to_real,
)
-
+from ansible_collections.purestorage.flasharray.plugins.module_utils.version import (
+ LooseVersion,
+)
QOS_API_VERSION = "1.14"
VGROUPS_API_VERSION = "1.13"
@@ -347,6 +349,38 @@ DEFAULT_API_VERSION = "2.16"
VOLUME_PROMOTION_API_VERSION = "2.2"
+def _volfact(module, array):
+ api_version = array.get_rest_version()
+ volume_name = module.params["name"]
+ volume_data = list(array.get_volumes(names=[volume_name]).items)[0]
+ volfact = {
+ volume_name: {
+ "size": volume_data.provisioned,
+ "serial": volume_data.serial,
+ "created": time.strftime(
+ "%Y-%m-%d %H:%M:%S", time.localtime(volume_data.created / 1000)
+ ),
+ "page83_naa": PURE_OUI + volume_data.serial.lower(),
+ "nvme_nguid": _create_nguid(volume_data.serial.lower()),
+ "iops_limit": getattr(volume_data.qos, "iops_limit", 0),
+ "bandwidth_limit": getattr(volume_data.qos, "bandwidth_limit", 0),
+ "requested_promotion_state": volume_data.requested_promotion_state,
+ "promotion_status": volume_data.promotion_status,
+ "priority": getattr(volume_data, "priority", 0),
+ "priority_operator": "",
+ "priority_value": "",
+ }
+ }
+ if LooseVersion(PRIORITY_API_VERSION) <= LooseVersion(api_version):
+ volfact[volume_name][
+ "priority_operator"
+ ] = volume_data.priority_adjustment.priority_adjustment_operator
+ volfact[volume_name][
+ "priority_value"
+ ] = volume_data.priority_adjustment.priority_adjustment_value
+ return volfact
+
+
def _create_nguid(serial):
nguid = "eui.00" + serial[0:14] + "24a937" + serial[-10:]
return nguid
@@ -511,7 +545,6 @@ def check_pod(module, array):
def create_volume(module, array):
"""Create Volume"""
- volfact = []
changed = False
api_version = array._list_available_rest_versions()
if "/" in module.params["name"] and not check_vgroup(module, array):
@@ -549,17 +582,11 @@ def create_volume(module, array):
changed = True
if not module.check_mode:
try:
- volfact = array.create_volume(
+ array.create_volume(
module.params["name"],
module.params["size"],
bandwidth_limit=module.params["bw_qos"],
)
- volfact["page83_naa"] = (
- PURE_OUI + volfact["serial"].lower()
- )
- volfact["nvme_nguid"] = _create_nguid(
- volfact["serial"].lower()
- )
except Exception:
module.fail_json(
msg="Volume {0} creation failed.".format(
@@ -581,17 +608,11 @@ def create_volume(module, array):
changed = True
if not module.check_mode:
try:
- volfact = array.create_volume(
+ array.create_volume(
module.params["name"],
module.params["size"],
iops_limit=module.params["iops_qos"],
)
- volfact["page83_naa"] = (
- PURE_OUI + volfact["serial"].lower()
- )
- volfact["nvme_nguid"] = _create_nguid(
- volfact["serial"].lower()
- )
except Exception:
module.fail_json(
msg="Volume {0} creation failed.".format(
@@ -612,18 +633,12 @@ def create_volume(module, array):
changed = True
if not module.check_mode:
try:
- volfact = array.create_volume(
+ array.create_volume(
module.params["name"],
module.params["size"],
iops_limit=module.params["iops_qos"],
bandwidth_limit=module.params["bw_qos"],
)
- volfact["page83_naa"] = (
- PURE_OUI + volfact["serial"].lower()
- )
- volfact["nvme_nguid"] = _create_nguid(
- volfact["serial"].lower()
- )
except Exception:
module.fail_json(
msg="Volume {0} creation failed.".format(
@@ -642,17 +657,11 @@ def create_volume(module, array):
changed = True
if not module.check_mode:
try:
- volfact = array.create_volume(
+ array.create_volume(
module.params["name"],
module.params["size"],
bandwidth_limit=module.params["bw_qos"],
)
- volfact["page83_naa"] = (
- PURE_OUI + volfact["serial"].lower()
- )
- volfact["nvme_nguid"] = _create_nguid(
- volfact["serial"].lower()
- )
except Exception:
module.fail_json(
msg="Volume {0} creation failed.".format(
@@ -669,13 +678,9 @@ def create_volume(module, array):
changed = True
if not module.check_mode:
try:
- volfact = array.create_volume(
+ array.create_volume(
module.params["name"], module.params["size"]
)
- volfact["page83_naa"] = PURE_OUI + volfact["serial"].lower()
- volfact["nvme_nguid"] = _create_nguid(
- volfact["serial"].lower()
- )
except Exception:
module.fail_json(
msg="Volume {0} creation failed.".format(
@@ -686,11 +691,7 @@ def create_volume(module, array):
changed = True
if not module.check_mode:
try:
- volfact = array.create_volume(
- module.params["name"], module.params["size"]
- )
- volfact["page83_naa"] = PURE_OUI + volfact["serial"].lower()
- volfact["nvme_nguid"] = _create_nguid(volfact["serial"].lower())
+ array.create_volume(module.params["name"], module.params["size"])
except Exception:
module.fail_json(
msg="Volume {0} creation failed.".format(module.params["name"])
@@ -714,8 +715,6 @@ def create_volume(module, array):
module.params["name"]
)
)
- else:
- volfact["promotion_state"] = module.params["promotion_state"]
if PRIORITY_API_VERSION in api_version and module.params["priority_operator"]:
arrayv6 = get_array(module)
volume = flasharray.VolumePatch(
@@ -736,9 +735,6 @@ def create_volume(module, array):
module.params["name"], res.errors[0].message
)
)
- else:
- volfact["priority_operator"] = module.params["priority_operator"]
- volfact["priority_value"] = module.params["priority_value"]
if module.params["pgroup"] and DEFAULT_API_VERSION not in api_version:
changed = True
if not module.check_mode:
@@ -753,7 +749,7 @@ def create_volume(module, array):
)
)
- module.exit_json(changed=changed, volume=volfact)
+ module.exit_json(changed=changed, volume=_volfact(module, arrayv6))
def create_multi_volume(module, array, single=False):
@@ -954,7 +950,6 @@ def create_multi_volume(module, array, single=False):
def copy_from_volume(module, array):
"""Create Volume Clone"""
- volfact = []
changed = False
tgt = get_target(module, array)
api_version = array._list_available_rest_versions()
@@ -1000,23 +995,9 @@ def copy_from_volume(module, array):
res.errors[0].message,
)
)
- vol_data = list(res.items)
- volfact = {
- "size": vol_data[0].provisioned,
- "serial": vol_data[0].serial,
- "created": time.strftime(
- "%Y-%m-%d %H:%M:%S", time.localtime(vol_data[0].created / 1000)
- ),
- "page83_naa": PURE_OUI + vol_data[0].serial.lower(),
- "nvme_nguid": _create_nguid(vol_data[0].serial.lower()),
- }
else:
try:
- volfact = array.copy_volume(
- module.params["name"], module.params["target"]
- )
- volfact["page83_naa"] = PURE_OUI + volfact["serial"].lower()
- volfact["nvme_nguid"] = _create_nguid(volfact["serial"].lower())
+ array.copy_volume(module.params["name"], module.params["target"])
changed = True
except Exception:
module.fail_json(
@@ -1029,13 +1010,11 @@ def copy_from_volume(module, array):
if not module.check_mode:
if DEFAULT_API_VERSION not in api_version:
try:
- volfact = array.copy_volume(
+ array.copy_volume(
module.params["name"],
module.params["target"],
overwrite=module.params["overwrite"],
)
- volfact["page83_naa"] = PURE_OUI + volfact["serial"].lower()
- volfact["nvme_nguid"] = _create_nguid(volfact["serial"].lower())
changed = True
except Exception:
module.fail_json(
@@ -1059,23 +1038,12 @@ def copy_from_volume(module, array):
res.errors[0].message,
)
)
- vol_data = list(res.items)
- volfact = {
- "size": vol_data[0].provisioned,
- "serial": vol_data[0].serial,
- "created": time.strftime(
- "%Y-%m-%d %H:%M:%S", time.localtime(vol_data[0].created / 1000)
- ),
- "page83_naa": PURE_OUI + vol_data[0].serial.lower(),
- "nvme_nguid": _create_nguid(vol_data[0].serial.lower()),
- }
- module.exit_json(changed=changed, volume=volfact)
+ module.exit_json(changed=changed, volume=_volfact(module, arrayv6))
def update_volume(module, array):
"""Update Volume size and/or QoS"""
- volfact = {}
changed = False
arrayv6 = None
api_version = array._list_available_rest_versions()
@@ -1102,7 +1070,7 @@ def update_volume(module, array):
changed = True
if not module.check_mode:
try:
- volfact = array.extend_volume(
+ array.extend_volume(
module.params["name"], module.params["size"]
)
except Exception:
@@ -1119,9 +1087,7 @@ def update_volume(module, array):
changed = True
if not module.check_mode:
try:
- volfact = array.set_volume(
- module.params["name"], bandwidth_limit=""
- )
+ array.set_volume(module.params["name"], bandwidth_limit="")
except Exception:
module.fail_json(
msg="Volume {0} Bandwidth QoS removal failed.".format(
@@ -1134,7 +1100,7 @@ def update_volume(module, array):
changed = True
if not module.check_mode:
try:
- volfact = array.set_volume(
+ array.set_volume(
module.params["name"],
bandwidth_limit=module.params["bw_qos"],
)
@@ -1156,7 +1122,7 @@ def update_volume(module, array):
changed = True
if not module.check_mode:
try:
- volfact = array.set_volume(module.params["name"], iops_limit="")
+ array.set_volume(module.params["name"], iops_limit="")
except Exception:
module.fail_json(
msg="Volume {0} IOPs QoS removal failed.".format(
@@ -1167,7 +1133,7 @@ def update_volume(module, array):
changed = True
if not module.check_mode:
try:
- volfact = array.set_volume(
+ array.set_volume(
module.params["name"], iops_limit=module.params["iops_qos"]
)
except Exception:
@@ -1199,10 +1165,6 @@ def update_volume(module, array):
module.params["name"]
)
)
- else:
- if not volfact:
- volfact = array.get_volume(module.params["name"])
- volfact["promotion_status"] = module.params["promotion_state"]
if PRIORITY_API_VERSION in api_version and module.params["priority_operator"]:
volv6 = list(arrayv6.get_volumes(names=[module.params["name"]]).items)[0]
change_prio = False
@@ -1246,33 +1208,13 @@ def update_volume(module, array):
module.params["name"], prio_res.errors[0].message
)
)
- else:
- if not volfact:
- volfact = array.get_volume(module.params["name"])
- volfact["priority_operator"] = module.params["priority_operator"]
- volfact["priority_value"] = module.params["priority_value"]
- if MULTI_VOLUME_VERSION in api_version:
- volume_data = list(arrayv6.get_volumes(names=[module.params["name"]]).items)[0]
- updatefacts = {
- "name": volume_data.name,
- "size": volume_data.provisioned,
- "serial": volume_data.serial,
- "created": time.strftime(
- "%Y-%m-%d %H:%M:%S", time.localtime(volume_data.created / 1000)
- ),
- "page83_naa": PURE_OUI + volume_data.serial.lower(),
- "nvme_nguid": _create_nguid(volume_data.serial.lower()),
- }
- else:
- updatefacts = array.get_volume(module.params["name"])
- vol_fact = {**volfact, **updatefacts}
- module.exit_json(changed=changed, volume=vol_fact)
+ module.exit_json(changed=changed, volume=_volfact(module, arrayv6))
def rename_volume(module, array):
"""Rename volume within a container, ie pod, vgroup or local array"""
- volfact = []
changed = False
+ arrayv6 = get_array(module)
pod_name = ""
vgroup_name = ""
target_name = module.params["rename"]
@@ -1314,9 +1256,7 @@ def rename_volume(module, array):
changed = True
if not module.check_mode:
try:
- volfact = array.rename_volume(
- module.params["name"], module.params["rename"]
- )
+ array.rename_volume(module.params["name"], module.params["rename"])
except Exception:
module.fail_json(
msg="Rename volume {0} to {1} failed.".format(
@@ -1326,12 +1266,11 @@ def rename_volume(module, array):
else:
module.fail_json(msg="Target volume {0} already exists.".format(target_name))
- module.exit_json(changed=changed, volume=volfact)
+ module.exit_json(changed=changed, volume=_volfact(module, arrayv6))
def move_volume(module, array):
"""Move volume between pods, vgroups or local array"""
- volfact = []
changed = vgroup_exists = target_exists = pod_exists = False
api_version = array._list_available_rest_versions()
pod_name = ""
@@ -1428,7 +1367,7 @@ def move_volume(module, array):
changed = True
if not module.check_mode:
try:
- volfact = array.move_volume(module.params["name"], target_location)
+ array.move_volume(module.params["name"], target_location)
except Exception:
if target_location == "":
target_location = "[local]"
@@ -1437,28 +1376,30 @@ def move_volume(module, array):
module.params["name"], target_location
)
)
- module.exit_json(changed=changed, volume=volfact)
+ arrayv6 = get_array(module)
+ module.exit_json(changed=changed, volume=_volfact(module, arrayv6))
def delete_volume(module, array):
"""Delete Volume"""
changed = True
- volfact = []
if not module.check_mode:
try:
array.destroy_volume(module.params["name"])
if module.params["eradicate"]:
try:
- volfact = array.eradicate_volume(module.params["name"])
+ array.eradicate_volume(module.params["name"])
except Exception:
module.fail_json(
msg="Eradicate volume {0} failed.".format(module.params["name"])
)
+ module.exit_json(changed=changed, volume=[])
except Exception:
module.fail_json(
msg="Delete volume {0} failed.".format(module.params["name"])
)
- module.exit_json(changed=changed, volume=volfact)
+ arrayv6 = get_array(module)
+ module.exit_json(changed=changed, volume=_volfact(module, arrayv6))
def eradicate_volume(module, array):
@@ -1479,7 +1420,6 @@ def eradicate_volume(module, array):
def recover_volume(module, array):
"""Recover Deleted Volume"""
changed = True
- volfact = []
if not module.check_mode:
try:
array.recover_volume(module.params["name"])
@@ -1487,10 +1427,9 @@ def recover_volume(module, array):
module.fail_json(
msg="Recovery of volume {0} failed".format(module.params["name"])
)
- volfact = array.get_volume(module.params["name"])
- volfact["page83_naa"] = PURE_OUI + volfact["serial"].lower()
- volfact["nvme_nguid"] = _create_nguid(volfact["serial"].lower())
- module.exit_json(changed=changed, volume=volfact)
+ array.get_volume(module.params["name"])
+ arrayv6 = get_array(module)
+ module.exit_json(changed=changed, volume=_volfact(module, arrayv6))
def main():
diff --git a/ansible_collections/purestorage/fusion/.github/CONTRIBUTING.md b/ansible_collections/purestorage/fusion/.github/CONTRIBUTING.md
deleted file mode 100644
index a9054d18c..000000000
--- a/ansible_collections/purestorage/fusion/.github/CONTRIBUTING.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# WELCOME TO PURE STORAGE FUSION ANSIBLE COLLECTION GITHUB
-
-Hi! Nice to see you here!
-
-## QUESTIONS ?
-
-The GitHub issue tracker is not the best place for questions for various reasons, but the [mailing list](mailto:pure-ansible-team@purestorage.com) is a very helpful places for those things.
-
-## CONTRIBUTING ?
-
-By contributing you agree that these contributions are your own (or approved by your employer) and you grant a full, complete, irrevocable copyright license to all users and developers of the project, present and future, pursuant to the license of the project.
-
-## BUG TO REPORT ?
-
-You can report bugs or make enhancement requests at the [Ansible GitHub issue page](http://github.com/Pure-Storage-Ansible/Fusion-Collection/issues/new/choose) by filling out the issue template that will be presented.
-
-Also please make sure you are testing on the latest released version of Ansible or the development branch; see the [Installation Guide](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html) for details.
-
-Thanks!
diff --git a/ansible_collections/purestorage/fusion/.github/ISSUE_TEMPLATE/bug_report.md b/ansible_collections/purestorage/fusion/.github/ISSUE_TEMPLATE/bug_report.md
deleted file mode 100644
index dd84ea782..000000000
--- a/ansible_collections/purestorage/fusion/.github/ISSUE_TEMPLATE/bug_report.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-name: Bug report
-about: Create a report to help us improve
-title: ''
-labels: ''
-assignees: ''
-
----
-
-**Describe the bug**
-A clear and concise description of what the bug is.
-
-**To Reproduce**
-Steps to reproduce the behavior:
-1. Go to '...'
-2. Click on '....'
-3. Scroll down to '....'
-4. See error
-
-**Expected behavior**
-A clear and concise description of what you expected to happen.
-
-**Screenshots**
-If applicable, add screenshots to help explain your problem.
-
-**Desktop (please complete the following information):**
- - OS: [e.g. iOS]
- - Browser [e.g. chrome, safari]
- - Version [e.g. 22]
-
-**Smartphone (please complete the following information):**
- - Device: [e.g. iPhone6]
- - OS: [e.g. iOS8.1]
- - Browser [e.g. stock browser, safari]
- - Version [e.g. 22]
-
-**Additional context**
-Add any other context about the problem here.
diff --git a/ansible_collections/purestorage/fusion/.github/ISSUE_TEMPLATE/feature_request.md b/ansible_collections/purestorage/fusion/.github/ISSUE_TEMPLATE/feature_request.md
deleted file mode 100644
index bbcbbe7d6..000000000
--- a/ansible_collections/purestorage/fusion/.github/ISSUE_TEMPLATE/feature_request.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-name: Feature request
-about: Suggest an idea for this project
-title: ''
-labels: ''
-assignees: ''
-
----
-
-**Is your feature request related to a problem? Please describe.**
-A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
-
-**Describe the solution you'd like**
-A clear and concise description of what you want to happen.
-
-**Describe alternatives you've considered**
-A clear and concise description of any alternative solutions or features you've considered.
-
-**Additional context**
-Add any other context or screenshots about the feature request here.
diff --git a/ansible_collections/purestorage/fusion/.github/pull_request_template.md b/ansible_collections/purestorage/fusion/.github/pull_request_template.md
deleted file mode 100644
index 27079cb18..000000000
--- a/ansible_collections/purestorage/fusion/.github/pull_request_template.md
+++ /dev/null
@@ -1,25 +0,0 @@
-##### SUMMARY
-<!--- Describe the change below, including rationale and design decisions -->
-
-<!--- HINT: Include "Fixes #nnn" if you are fixing an existing issue -->
-
-##### ISSUE TYPE
-<!--- Pick one below and delete the rest -->
-- Bugfix Pull Request
-- Docs Pull Request
-- Feature Pull Request
-- New Module Pull Request
-- New Role Pull Request
-
-##### COMPONENT NAME
-<!--- Write the short name of the module, plugin, task or feature below -->
-
-##### ADDITIONAL INFORMATION
-<!--- Include additional information to help people understand the change here -->
-<!--- A step-by-step reproduction of the problem is helpful if there is no related issue -->
-- All new PRs must include a changelog fragment
-- Details of naming convention and format can be found [here](https://docs.ansible.com/ansible/latest/community/development_process.html#creating-a-changelog-fragment)
-<!--- Paste verbatim command output below, e.g. before and after your change -->
-```paste below
-
-```
diff --git a/ansible_collections/purestorage/fusion/.github/workflows/ansible-lint.yaml b/ansible_collections/purestorage/fusion/.github/workflows/ansible-lint.yaml
deleted file mode 100644
index 384c5ac93..000000000
--- a/ansible_collections/purestorage/fusion/.github/workflows/ansible-lint.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-name: Ansible Lint # feel free to pick your own name
-"on": [push, pull_request]
-
-jobs:
- build:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v3
- - name: Run ansible-lint
- uses: ansible-community/ansible-lint-action@main
diff --git a/ansible_collections/purestorage/fusion/.github/workflows/black.yaml b/ansible_collections/purestorage/fusion/.github/workflows/black.yaml
deleted file mode 100644
index 10b16296c..000000000
--- a/ansible_collections/purestorage/fusion/.github/workflows/black.yaml
+++ /dev/null
@@ -1,11 +0,0 @@
-name: Black
-
-"on": [push, pull_request]
-
-jobs:
- lint:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v3
- - uses: actions/setup-python@v3
- - uses: psf/black@stable
diff --git a/ansible_collections/purestorage/fusion/.github/workflows/create-release.yaml b/ansible_collections/purestorage/fusion/.github/workflows/create-release.yaml
deleted file mode 100644
index 68da05e4d..000000000
--- a/ansible_collections/purestorage/fusion/.github/workflows/create-release.yaml
+++ /dev/null
@@ -1,117 +0,0 @@
-name: Release Collection
-
-"on": workflow_dispatch
-jobs:
- create_github_release:
- runs-on: ubuntu-latest
- environment: fusion-env
- steps:
- - name: Checkout repository
- uses: actions/checkout@v2
-
- - name: Get version from galaxy.yml
- run: |
- RELEASE_VERSION=$(grep 'version:' galaxy.yml | awk '{print $2}')
- echo "RELEASE_VERSION=$RELEASE_VERSION" >> $GITHUB_ENV
-
- - name: Check if tag exists
- env:
- GITHUB_TOKEN: ${{ github.TOKEN }}
- run: |
- trap "exit 0" EXIT
- response=$(gh api -H "Accept: application/vnd.github+json" /repos/${{ github.repository }}/git/ref/tags/$RELEASE_VERSION)
- if [[ "$response" == *"$RELEASE_VERSION"* ]]; then
- trap "exit 1" EXIT
- echo "Error: Tag $RELEASE_VERSION already exists"
- exit 1
- fi
-
- - name: Extract changelog
- run: |
- awk -v version="$RELEASE_VERSION" '
- BEGIN { targetVersionFound = 0; previousVersionFound = 0 }
- {
- if (match($0, "^v"version) > 0) {
- targetVersionFound = 1;
- } else if (targetVersionFound && match($0, "^v") > 0) {
- previousVersionFound = 1;
- }
-
- if (targetVersionFound && !previousVersionFound) {
- print $0;
- }
- }
- ' CHANGELOG.rst > changelog
-
- - name: Create a release
- env:
- GITHUB_TOKEN: ${{ github.TOKEN }}
- run: gh release create "${{ env.RELEASE_VERSION }}" --title "Fusion Collection v${{ env.RELEASE_VERSION }}" --notes-file changelog
-
- publish_collection_to_galaxy:
- runs-on: ubuntu-latest
- environment: fusion-env
- needs: create_github_release
- steps:
- - name: Checkout repository
- uses: actions/checkout@v2
-
- - name: Get version from galaxy.yml
- run: |
- RELEASE_VERSION=$(grep 'version:' galaxy.yml | awk '{print $2}')
- echo "RELEASE_VERSION=$RELEASE_VERSION" >> $GITHUB_ENV
-
- - name: Set up Python
- uses: actions/setup-python@v2
- with:
- python-version: "3.x"
-
- - name: Install dependencies
- run: |
- python -m pip install --upgrade pip
- pip install ansible ansible-lint yamllint
-
- - name: Build Ansible Collection
- run: ansible-galaxy collection build
-
- - name: Release to Ansible Galaxy
- run: ansible-galaxy collection publish --api-key=${{ secrets.ANSIBLE_GALAXY_API_KEY }} ./purestorage-fusion-${{ env.RELEASE_VERSION }}.tar.gz
-
- publish_collection_to_automation_hub:
- runs-on: ubuntu-latest
- environment: fusion-env
- needs: create_github_release
- steps:
- - name: Checkout repository
- uses: actions/checkout@v2
-
- - name: Get version from galaxy.yml
- run: |
- RELEASE_VERSION=$(grep 'version:' galaxy.yml | awk '{print $2}')
- echo "RELEASE_VERSION=$RELEASE_VERSION" >> $GITHUB_ENV
-
- - name: Set up Python
- uses: actions/setup-python@v2
- with:
- python-version: "3.x"
-
- - name: Install dependencies
- run: |
- python -m pip install --upgrade pip
- pip install ansible ansible-lint yamllint
-
- - name: Build Ansible Collection
- run: ansible-galaxy collection build
- - name: Create config for Automation Hub
- run: |
- cat << EOF > ansible.cfg
- [galaxy]
- server_list = rh_automation_hub
- [galaxy_server.rh_automation_hub]
- url=${{ secrets.RH_AUTOMATION_HUB_URL }}
- auth_url=${{ secrets.RH_SSO_URL }}
- token=${{ secrets.RH_AUTOMATION_HUB_TOKEN }}
- EOF
-
- - name: Release to Automation Hub
- run: ansible-galaxy collection publish ./purestorage-fusion-${{ env.RELEASE_VERSION }}.tar.gz
diff --git a/ansible_collections/purestorage/fusion/.github/workflows/main.yml b/ansible_collections/purestorage/fusion/.github/workflows/main.yml
deleted file mode 100644
index 5c9a3914b..000000000
--- a/ansible_collections/purestorage/fusion/.github/workflows/main.yml
+++ /dev/null
@@ -1,53 +0,0 @@
-name: Pure Storage Ansible CI
-
-"on":
- pull_request:
- push:
- schedule:
- - cron: '25 10 * * *'
-
-jobs:
- build:
- name: Build purefusion on Ansible ${{ matrix.ansible }} (Python ${{ matrix.python-version }})
- runs-on: ubuntu-20.04
- strategy:
- matrix:
- ansible:
- - stable-2.14
- - stable-2.15
- - stable-2.16
- - devel
- python-version:
- - 3.9
- - "3.10"
- - "3.11"
- exclude:
- - python-version: 3.9
- ansible: stable-2.16
- - python-version: 3.9
- ansible: devel
- steps:
- - name: Check out code
- uses: actions/checkout@v3
-
- - name: Set up Python ${{ matrix.python-version }}
- uses: actions/setup-python@v3
- with:
- python-version: ${{ matrix.python-version }}
-
- - name: Install dependencies
- run: |
- python${{ matrix.python }} -m pip install --upgrade pip
- python${{ matrix.python }} -m pip install https://github.com/ansible/ansible/archive/${{ matrix.ansible }}.tar.gz --disable-pip-version-check
- python${{ matrix.python }} -m pip install purefusion pytest
-
- - name: Run sanity tests
- run: |
- pwd
- mkdir -p ansible_collections/purestorage/fusion
- rsync -av . ansible_collections/purestorage/fusion --exclude ansible_collection/purestorage/fusion
- cd ansible_collections/purestorage/fusion
- ansible-test sanity -v --color --python ${{ matrix.python-version }} --docker
-
- - name: Run unit tests
- run: python -m pytest --import-mode=append tests
diff --git a/ansible_collections/purestorage/fusion/.github/workflows/rh_automation_hub_token_keep_alive.yml b/ansible_collections/purestorage/fusion/.github/workflows/rh_automation_hub_token_keep_alive.yml
deleted file mode 100644
index f4e0a667b..000000000
--- a/ansible_collections/purestorage/fusion/.github/workflows/rh_automation_hub_token_keep_alive.yml
+++ /dev/null
@@ -1,19 +0,0 @@
----
-name: "Red Hat Automation Hub - Keep token alive"
-# The SSO token to upload content to Automation Hub must be accessed once every 30 days or it will be turned off
-
-"on":
- schedule:
- - cron: '0 12 1,15 * *' # run 12pm on the 1st and 15th of the month
-
-jobs:
- keep_rh_sso_token_alive:
- runs-on: "ubuntu-latest"
- steps:
- - name: "Run curl command"
- run: |
- curl ${{ secrets.RH_AUTOMATION_HUB_URL }} \
- -d grant_type=refresh_token \
- -d client_id="cloud-services" \
- -d refresh_token="${{ secrets.RH_AUTOMATION_HUB_TOKEN }}" \
- --fail --silent --show-error --output /dev/null
diff --git a/ansible_collections/purestorage/fusion/.github/workflows/stale.yml b/ansible_collections/purestorage/fusion/.github/workflows/stale.yml
deleted file mode 100644
index ee7c9796e..000000000
--- a/ansible_collections/purestorage/fusion/.github/workflows/stale.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-name: Mark stale issues and pull requests
-
-"on":
- schedule:
- - cron: "0 0 * * *"
-
-jobs:
- stale:
-
- runs-on: ubuntu-latest
-
- steps:
- - uses: actions/stale@v1
- with:
- repo-token: ${{ secrets.GITHUB_TOKEN }}
- stale-issue-message: 'Stale issue message'
- stale-pr-message: 'Stale pull request message'
- stale-issue-label: 'no-issue-activity'
- stale-pr-label: 'no-pr-activity'
diff --git a/ansible_collections/purestorage/fusion/.gitignore b/ansible_collections/purestorage/fusion/.gitignore
deleted file mode 100644
index 4d7880b52..000000000
--- a/ansible_collections/purestorage/fusion/.gitignore
+++ /dev/null
@@ -1,12 +0,0 @@
-*.tar.gz
-.pylintrc
-tests/output/*
-changelogs/.plugin-cache.yaml
-**/__pycache__/
-
-# files produced by Visual Studio Code
-.vscode/
-.history/
-
-# files produces by JetBrains IDEs
-.idea \ No newline at end of file
diff --git a/ansible_collections/purestorage/fusion/.yamllint b/ansible_collections/purestorage/fusion/.yamllint
deleted file mode 100644
index 6c19f43f7..000000000
--- a/ansible_collections/purestorage/fusion/.yamllint
+++ /dev/null
@@ -1,7 +0,0 @@
-extends: default
-
-rules:
- document-start: disable
- indentation: disable
- line-length:
- max: 200
diff --git a/ansible_collections/purestorage/fusion/CHANGELOG.rst b/ansible_collections/purestorage/fusion/CHANGELOG.rst
deleted file mode 100644
index b6a0f071a..000000000
--- a/ansible_collections/purestorage/fusion/CHANGELOG.rst
+++ /dev/null
@@ -1,249 +0,0 @@
-================================
-Purestorage.Fusion Release Notes
-================================
-
-.. contents:: Topics
-
-
-v1.6.1
-======
-
-Minor Changes
--------------
-
-- fusion_volume - Allow creating a new volume from already existing volume or volume snapshot
-
-v1.6.0
-======
-
-Minor Changes
--------------
-
-- all modules - return resource's id parameter on update and create.
-- fusion_array - added `apartment_id` argument, which can be used when creating an array.
-- 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 - 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_volume - Allow creating a new volume from already existing volume or volume snapshot
-
-v1.5.0
-======
-
-Minor Changes
--------------
-
-- 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.
-- fusion - added private key password, which is used to decrypt private key files
-- 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_pp - duration parsing improved. Supports combination of time units (E.g 5H5M)
-- 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
-
-Deprecated Features
--------------------
-
-- 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
-
-Bugfixes
---------
-
-- 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'
-
-v1.4.2
-======
-
-Minor Changes
--------------
-
-- added Python package dependency checks in prerequisites.py
-- fusion_hap - added missing 'windows' personality type
-
-Bugfixes
---------
-
-- fusion_array - correct required parameters
-- fusion_hap - display name has now default value set to the value of name
-- fusion_hw - correct required parameters
-- fusion_pg - correct required parameters
-- fusion_pp - correct required parameters
-- fusion_sc - correct required parameters
-- fusion_ss - allow updating hardware types, correct required parameters
-- fusion_tn - fix attribute error
-- fusion_volume - protection policy can now be unset by using '' as name
-
-v1.4.1
-======
-
-v1.4.0
-======
-
-Major Changes
--------------
-
-- Patching of resource properties was brought to parity with underlying Python SDK
-- fusion_volume - fixed and reorganized, arguments changed
-
-Minor Changes
--------------
-
-- errors_py - added opt-in global exception handler which produces simpler and cleaner messages on REST errors
-- removed dependency on Python `netaddr` package
-
-Deprecated Features
--------------------
-
-- fusion_hw - hardware module is being removed as changing hardware type has never been supported by Pure Storage Fusion
-- fusion_info - nigs subset is deprecated in favor of network_interface_groups and will be removed in the version 1.7.0
-- fusion_info - placements subset is deprecated in favor of placement_groups and will be removed in the version 1.7.0
-- fusion_pg - placement_engine option is deprecated because Fusion API does not longer support this parameter It will be removed in the version 2.0.0
-- fusion_se - parameters 'addresses', 'gateway' and 'network_interface_groups' are deprecated in favor of 'iscsi' and will be removed in version 2.0.0
-- fusion_tn - tenant networks are being replaced by storage endpoints ```fusion_se``` and Network Interface Groups ```fusion_nig```
-
-Bugfixes
---------
-
-- fusion_api_client - error messages now mostly handled by errors_py
-- fusion_hap - could not delete host access policy without iqn option. Now it needs only name option for deletion
-- fusion_hap - error messages now mostly handled by errors_py
-- fusion_hap - uppercase names were not supported. Now uppercase names are allowed
-- fusion_info - fixes typo in output 'appiiances' -> 'appliances'
-- fusion_info - network_interface_groups subset returned nothing. Now it collects the same information as nigs subset
-- fusion_info - placements subset returned nothing. Now it collects the same information as placement_groups subset
-- fusion_nig - add missing 'availability_zone' format param in error message
-- fusion_nig - error messages now mostly handled by errors_py
-- fusion_pg - create_pg always broke runtime. Now it executes and creates placement group successfully
-- fusion_pg - error messages now mostly handled by errors_py
-- fusion_pp - error messages now mostly handled by errors_py
-- fusion_pp - fix call to parse_minutes where we were missing a required argument
-- fusion_sc - error messages now mostly handled by errors_py
-- fusion_se - add missing 'availability_zone' format param in error message
-- fusion_se - error messages now mostly handled by errors_py
-- fusion_se - fix call in get_nifg where provider_subnet was used instead of network_interface_group_name
-- fusion_ss - error messages now mostly handled by errors_py
-- fusion_tenant - error messages now mostly handled by errors_py
-- fusion_ts - add missing 'tenant' format param in error message
-- fusion_ts - error messages now mostly handled by errors_py
-- fusion_volume - error messages now mostly handled by errors_py
-
-v1.3.0
-======
-
-Bugfixes
---------
-
-- fusion_pg - Add missing 'region' parameter
-- fusion_tn - Add missing 'region' parameter
-
-v1.2.0
-======
-
-Minor Changes
--------------
-
-- fusion_info - Added API Client information
-
-Bugfixes
---------
-
-- fusion_info - Fixed issue with storage endpoint dict formatting
-
-v1.1.1
-======
-
-v1.1.0
-======
-
-Minor Changes
--------------
-
-- fusion_az - Add delete AZ option
-- fusion_az - Allow any region to be specified instead of limited to a known list
-- fusion_pp - Add delete PP option
-- fusion_sc - Add delete SC option
-- fusion_ss - Add delete SS option
-
-Bugfixes
---------
-
-- Allow correct use of environmental variables for App ID and private file file
-
-New Modules
------------
-
-- purestorage.fusion.fusion_region - Manage Regions in Pure Storage Fusion
-
-v1.0.3
-======
-
-v1.0.2
-======
-
-v1.0.1
-======
-
-v1.0.0
-======
-
-New Modules
------------
-
-- purestorage.fusion.fusion_api_client - Manage API clients in Pure Storage Fusion
-- purestorage.fusion.fusion_array - Manage arrays in Pure Storage Fusion
-- purestorage.fusion.fusion_az - Create Availability Zones in Pure Storage Fusion
-- purestorage.fusion.fusion_hap - Manage host access policies in Pure Storage Fusion
-- purestorage.fusion.fusion_hw - Create hardware types in Pure Storage Fusion
-- purestorage.fusion.fusion_info - Collect information from Pure Fusion
-- purestorage.fusion.fusion_nig - Manage Network Interface Groups in Pure Storage Fusion
-- purestorage.fusion.fusion_pg - Manage placement groups in Pure Storage Fusion
-- purestorage.fusion.fusion_pp - Manage protection policies in Pure Storage Fusion
-- purestorage.fusion.fusion_ra - Manage role assignments in Pure Storage Fusion
-- purestorage.fusion.fusion_sc - Manage storage classes in Pure Storage Fusion
-- purestorage.fusion.fusion_ss - Manage storage services in Pure Storage Fusion
-- purestorage.fusion.fusion_tenant - Manage tenants in Pure Storage Fusion
-- purestorage.fusion.fusion_tn - Manage tenant networks in Pure Storage Fusion
-- purestorage.fusion.fusion_ts - Manage tenant spaces in Pure Storage Fusion
-- purestorage.fusion.fusion_volume - Manage volumes in Pure Storage Fusion
diff --git a/ansible_collections/purestorage/fusion/COPYING.GPLv3 b/ansible_collections/purestorage/fusion/COPYING.GPLv3
deleted file mode 100644
index 94a9ed024..000000000
--- a/ansible_collections/purestorage/fusion/COPYING.GPLv3
+++ /dev/null
@@ -1,674 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
- The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works. By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users. We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors. You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
- To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights. Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received. You must make sure that they, too, receive
-or can get the source code. And you must show them these terms so they
-know their rights.
-
- Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
- For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software. For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
- Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so. This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software. The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable. Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products. If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
- Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary. To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS
-
- 0. Definitions.
-
- "This License" refers to version 3 of the GNU General Public License.
-
- "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
- "The Program" refers to any copyrightable work licensed under this
-License. Each licensee is addressed as "you". "Licensees" and
-"recipients" may be individuals or organizations.
-
- To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy. The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
- A "covered work" means either the unmodified Program or a work based
-on the Program.
-
- To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy. Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
- To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies. Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
- An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License. If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
- 1. Source Code.
-
- The "source code" for a work means the preferred form of the work
-for making modifications to it. "Object code" means any non-source
-form of a work.
-
- A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
- The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form. A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
- The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities. However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work. For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
- The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
- The Corresponding Source for a work in source code form is that
-same work.
-
- 2. Basic Permissions.
-
- All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met. This License explicitly affirms your unlimited
-permission to run the unmodified Program. The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work. This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
- You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force. You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright. Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
- Conveying under any other circumstances is permitted solely under
-the conditions stated below. Sublicensing is not allowed; section 10
-makes it unnecessary.
-
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
- No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
- When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
- 4. Conveying Verbatim Copies.
-
- You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
- You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
- 5. Conveying Modified Source Versions.
-
- You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
- a) The work must carry prominent notices stating that you modified
- it, and giving a relevant date.
-
- b) The work must carry prominent notices stating that it is
- released under this License and any conditions added under section
- 7. This requirement modifies the requirement in section 4 to
- "keep intact all notices".
-
- c) You must license the entire work, as a whole, under this
- License to anyone who comes into possession of a copy. This
- License will therefore apply, along with any applicable section 7
- additional terms, to the whole of the work, and all its parts,
- regardless of how they are packaged. This License gives no
- permission to license the work in any other way, but it does not
- invalidate such permission if you have separately received it.
-
- d) If the work has interactive user interfaces, each must display
- Appropriate Legal Notices; however, if the Program has interactive
- interfaces that do not display Appropriate Legal Notices, your
- work need not make them do so.
-
- A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit. Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
- 6. Conveying Non-Source Forms.
-
- You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
- a) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by the
- Corresponding Source fixed on a durable physical medium
- customarily used for software interchange.
-
- b) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that product
- model, to give anyone who possesses the object code either (1) a
- copy of the Corresponding Source for all the software in the
- product that is covered by this License, on a durable physical
- medium customarily used for software interchange, for a price no
- more than your reasonable cost of physically performing this
- conveying of source, or (2) access to copy the
- Corresponding Source from a network server at no charge.
-
- c) Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
- alternative is allowed only occasionally and noncommercially, and
- only if you received the object code with such an offer, in accord
- with subsection 6b.
-
- d) Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to the
- Corresponding Source in the same way through the same place at no
- further charge. You need not require recipients to copy the
- Corresponding Source along with the object code. If the place to
- copy the object code is a network server, the Corresponding Source
- may be on a different server (operated by you or a third party)
- that supports equivalent copying facilities, provided you maintain
- clear directions next to the object code saying where to find the
- Corresponding Source. Regardless of what server hosts the
- Corresponding Source, you remain obligated to ensure that it is
- available for as long as needed to satisfy these requirements.
-
- e) Convey the object code using peer-to-peer transmission, provided
- you inform other peers where the object code and Corresponding
- Source of the work are being offered to the general public at no
- charge under subsection 6d.
-
- A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
- A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling. In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage. For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product. A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
- "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source. The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
- If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information. But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
- The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed. Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
- Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
- 7. Additional Terms.
-
- "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law. If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
- When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it. (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.) You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
- Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
- a) Disclaiming warranty or limiting liability differently from the
- terms of sections 15 and 16 of this License; or
-
- b) Requiring preservation of specified reasonable legal notices or
- author attributions in that material or in the Appropriate Legal
- Notices displayed by works containing it; or
-
- c) Prohibiting misrepresentation of the origin of that material, or
- requiring that modified versions of such material be marked in
- reasonable ways as different from the original version; or
-
- d) Limiting the use for publicity purposes of names of licensors or
- authors of the material; or
-
- e) Declining to grant rights under trademark law for use of some
- trade names, trademarks, or service marks; or
-
- f) Requiring indemnification of licensors and authors of that
- material by anyone who conveys the material (or modified versions of
- it) with contractual assumptions of liability to the recipient, for
- any liability that these contractual assumptions directly impose on
- those licensors and authors.
-
- All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10. If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term. If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
- If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
- Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
- 8. Termination.
-
- You may not propagate or modify a covered work except as expressly
-provided under this License. Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
- However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
- Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
- Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
- 9. Acceptance Not Required for Having Copies.
-
- You are not required to accept this License in order to receive or
-run a copy of the Program. Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance. However,
-nothing other than this License grants you permission to propagate or
-modify any covered work. These actions infringe copyright if you do
-not accept this License. Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
- 10. Automatic Licensing of Downstream Recipients.
-
- Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License. You are not responsible
-for enforcing compliance by third parties with this License.
-
- An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations. If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
- You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License. For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
- 11. Patents.
-
- A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based. The
-work thus licensed is called the contributor's "contributor version".
-
- A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version. For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
- Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
- In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement). To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
- If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients. "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
- If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
- A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License. You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
- Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
- 12. No Surrender of Others' Freedom.
-
- If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all. For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
- 13. Use with the GNU Affero General Public License.
-
- Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work. The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
- 14. Revised Versions of this License.
-
- The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
- If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
- Later license versions may give you additional or different
-permissions. However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
- 15. Disclaimer of Warranty.
-
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. Limitation of Liability.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
- 17. Interpretation of Sections 15 and 16.
-
- If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program 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.
-
- This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
- If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
- <program> Copyright (C) <year> <name of author>
- This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
- You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
- The GNU General Public License does not permit incorporating your program
-into proprietary programs. If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License. But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/ansible_collections/purestorage/fusion/FILES.json b/ansible_collections/purestorage/fusion/FILES.json
deleted file mode 100644
index ad0452035..000000000
--- a/ansible_collections/purestorage/fusion/FILES.json
+++ /dev/null
@@ -1,1244 +0,0 @@
-{
- "files": [
- {
- "name": ".",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "changelogs",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "changelogs/fragments",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "changelogs/changelog.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "17ac55399ed69cbac46280c27dde9825e556a3b5214ff7defef12cc1dbbae598",
- "format": 1
- },
- {
- "name": "changelogs/.plugin-cache.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "64d8cc09b182d4991facb3abb8835c821b4e0cb72d6dd687ddbe16402b6209cc",
- "format": 1
- },
- {
- "name": "changelogs/config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1762f9f7012a7e135eacb3e2d2c35bdcb25570cdfc33da7a190fa36edc604aec",
- "format": 1
- },
- {
- "name": "tests",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/README.md",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a20772cc1cfbb1676994a74cc05e703aaa7df0759926614ea6832f7232ffc9f7",
- "format": 1
- },
- {
- "name": "tests/integration/targets",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_region",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_region/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_region/tasks/main.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "13360be1e9c683c45a0019ea3a9fd55fe1414964773a69110f0cf6e3cd4ca081",
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_pg",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_pg/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_pg/tasks/main.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "66add9c2d9f2c8a02d4cbd18b6a871266af0a364756416991e80a70c8eed76f5",
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_ni",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_ni/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_ni/tasks/main.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a14ec0c5ef2a4ce26fd806a960c7b4d2c55988028b2b406d298929e53547193d",
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_tenant",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_tenant/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_tenant/tasks/main.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d0061bd98f9da02af742c85e7f9f1a1ca52363d3935c9e0fa105db13466922bc",
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_hap",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_hap/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_hap/tasks/main.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "97ac38033a460071019a230efc40f3b63085528fecdc72f98b683c3b888ed04a",
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_se",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_se/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_se/tasks/main.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ba77056fd00ca6a52382f4285a2452609cfda8b045cde1042963c1c58944e31d",
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_ts",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_ts/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_ts/tasks/main.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a1462a14b4dc7a7c0b0f76df30c2283338bc1b53838bd29537c00c7d0ea2a855",
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_pp",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_pp/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_pp/tasks/main.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0839b0cf5da3154795a7e5a5357168b498b44fea9dd2c1b9729385b50784c68f",
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_sc",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_sc/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_sc/tasks/main.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5f100551a2f19101772101bc413be17b08baada7c7b92d4fbefccfa4f3637c04",
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_ss",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_ss/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_ss/tasks/main.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5b5be20d4cd09db5c3edbde5a6b723a93bb266834a8c1908525435f9ab813a7d",
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_az",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_az/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_az/tasks/main.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9b594ff2d1199f94997c63b8ba704b0497ea86a8a7215437541358603dcc68aa",
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_nig",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_nig/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/integration/targets/fusion_nig/tasks/main.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ec0586fc68e8ea986f752237f2f75b42a6a36724b71b01dbd401ca3d5fed0c2e",
- "format": 1
- },
- {
- "name": "tests/integration/integration_config.template",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e55ed10c7dca1c84ffa8dd2e19087f630b8fd50fedbb96a167fb8e6231cbb6d2",
- "format": 1
- },
- {
- "name": "tests/unit",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/modules",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/modules/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "tests/unit/modules/test_fusion_az.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7d6b7a4a5a233ee47c6788d370bf1c6a6da5adf9b758b43c6d5557ba87b4dc58",
- "format": 1
- },
- {
- "name": "tests/unit/mocks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/mocks/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "tests/unit/mocks/operation_mock.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "373ea55faf5262f157724aaf6d1ca31b963415ad1b180b2fa7833983acd1d8f2",
- "format": 1
- },
- {
- "name": "tests/unit/mocks/module_mock.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3e72e4d7a51c8fcb35cfb7473f84e33de359a969140ebddc185dfce602966e75",
- "format": 1
- },
- {
- "name": "tests/unit/README.md",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e74786237c54bd81d7b314e5871bd89bf1329f228087a0ecb17a64024b76396c",
- "format": 1
- },
- {
- "name": "tests/unit/module_utils",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/unit/module_utils/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "tests/unit/module_utils/test_prerequisites.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8ea9eec2b76c9b4ff0c5e2891972bdf12091b59770bfee4462ddb0014afb33a9",
- "format": 1
- },
- {
- "name": "tests/unit/module_utils/test_networking.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "01fa89c92da97f0e9f66527663bddff99a46e6ef07b5601f5be7ae129956bfa1",
- "format": 1
- },
- {
- "name": "tests/unit/module_utils/test_parsing.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a7efaf296b085c6ffbf5174218e575491dcd850f74a159068d0004222d6fade6",
- "format": 1
- },
- {
- "name": "tests/unit/module_utils/test_operations.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "656c85c8580a65fac1cb42e806513233596126d18a8f93465bc79af50872f3e2",
- "format": 1
- },
- {
- "name": "tests/functional",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "tests/functional/test_fusion_region.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5ba0b74a3580885a0e3dc5693adb85c1d863fe664588275c175131d59122b7f9",
- "format": 1
- },
- {
- "name": "tests/functional/test_fusion_ss.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6b44ef093fcfed0897a14395095185ac6bc1dd6a5f9b153c0e31857734a9a10e",
- "format": 1
- },
- {
- "name": "tests/functional/__init__.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "tests/functional/test_fusion_volume.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d307a55f86ea7683542e58d1416fe8d005d3dfcf65b84c8bd6b0f5c914e2aadf",
- "format": 1
- },
- {
- "name": "tests/functional/test_fusion_ts.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5dadaf161e2daf306ef5d0eb72dd8e53db398a630f82b6d511fab4e836991489",
- "format": 1
- },
- {
- "name": "tests/functional/test_fusion_pg.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8df05411ef3cd13bd9f7436df88b7bb4c0611a3db23988435b5cc39e9546a967",
- "format": 1
- },
- {
- "name": "tests/functional/test_fusion_nig.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a06addf4b81f91e57c7b2413da2a39279b3a794fecab23c3bb2a4609c22873f1",
- "format": 1
- },
- {
- "name": "tests/functional/test_fusion_se.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ad77974f2c4e7ea6ee3681c57ccaf235b2401e83d299495c862a717f6f2b7199",
- "format": 1
- },
- {
- "name": "tests/functional/test_fusion_az.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "39d40d8fee3e346a8dc7db8becf15c5149fbf13d1af6e29b2325a6dc9f8e9624",
- "format": 1
- },
- {
- "name": "tests/functional/test_fusion_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "417845afcefefa6a2e739be86ed8ef7474b43409d44df3079bc4c537ff0821df",
- "format": 1
- },
- {
- "name": "tests/functional/test_fusion_hap.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b7f1abe557c37b29f2a9270636f8b81745d72281141caac0fb0931a79dd391b4",
- "format": 1
- },
- {
- "name": "tests/functional/test_fusion_hw.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e247eb15edad8ed402ee8e3bd6bb3add1426502f1ecf283882ac97d450e13753",
- "format": 1
- },
- {
- "name": "tests/functional/README.md",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d73fe992181a129802dda79cf3efd3a5ff6473dc5c9c6b99b907af629e5c9279",
- "format": 1
- },
- {
- "name": "tests/functional/test_fusion_sc.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b3d781841cc7f3d2956f48dffd0e6ef35a0121841a1a0ac6915068c60ed5bda2",
- "format": 1
- },
- {
- "name": "tests/functional/test_fusion_ra.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "36206507be9b65d09a4e01ff75740f6507f5a987180dde6f2d720ea76abc9b9b",
- "format": 1
- },
- {
- "name": "tests/functional/test_fusion_tenant.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "59d4786a7dfb78f72ebca838b7dbfda7444a861d7113b50ddebffd82bea56ade",
- "format": 1
- },
- {
- "name": "tests/functional/utils.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3d1d3cbd790a64d783f52914e52158e339a7c7eb86c6cb63546d72820e6d6c5",
- "format": 1
- },
- {
- "name": "tests/functional/test_fusion_api_client.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5010777699d6259c58c38e7e51c84baa554b484736516ac180f3b1d3b5f844f8",
- "format": 1
- },
- {
- "name": "tests/functional/test_fusion_array.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ca4057d295d239c6c6e6afb7e701f9d337fb44a2dbaf29bb5805cbed80bbe93e",
- "format": 1
- },
- {
- "name": "tests/functional/test_fusion_pp.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c45337495b95f164eed6e3e6d14c038246d042f16315aea494276380f8afa370",
- "format": 1
- },
- {
- "name": "tests/helpers.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "24f55093b6e7486c6c6c6a9cf57875ec69496ac23253f1c5a7f79c870c00d38a",
- "format": 1
- },
- {
- "name": "COPYING.GPLv3",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903",
- "format": 1
- },
- {
- "name": "playbooks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "playbooks/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "playbooks/tasks/.keep",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "playbooks/templates",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "playbooks/templates/.keep",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "playbooks/simple",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "playbooks/simple/create_availability_zone.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b16b7c3f57b7e505ebd105b26d5dfef45b0eb51021aef23b1e39e87386fefc28",
- "format": 1
- },
- {
- "name": "playbooks/simple/setup_infrastructure.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d5883177ccab7b449f9c08100d3941c533186457b06b2dcbd6f12ed1f2382240",
- "format": 1
- },
- {
- "name": "playbooks/simple/list_storage_classes.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2e301ac27d5ba24bbb0e48757349f88fc3839b1fb3e2bf504526b4837a0d67f5",
- "format": 1
- },
- {
- "name": "playbooks/simple/list_interfaces.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "26dcfb2bf6fd1ac96ef63c3de9b6b8a36a6297c078b296bb32a96a102dc93804",
- "format": 1
- },
- {
- "name": "playbooks/simple/list_placement_groups.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8d6fef0868932ba3a8f17b95e95d7def5c01906d679519d3ad141021e780045a",
- "format": 1
- },
- {
- "name": "playbooks/simple/list_hardware_types.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4cd99a9b6cec5a88f8d13a3359a8d5f3687465dd63a3d779ba43c27f4fd2b4ab",
- "format": 1
- },
- {
- "name": "playbooks/simple/list_volumes.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f130c119ae9ce955440ca3b29ed5a31653062d556bd835ce65c2ef9db8e12122",
- "format": 1
- },
- {
- "name": "playbooks/simple/list_snapshots.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ef36856102859719d6a3c3970685e7c9fde30b9ef071c1f720bb5a17823df004",
- "format": 1
- },
- {
- "name": "playbooks/simple/setup_workloads.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "20cdb263572e18b7b6e13dd1c457c4dd8883eed7e332681003a33eb576874fce",
- "format": 1
- },
- {
- "name": "playbooks/simple/remove_array.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "062b8643519792fc53b2fe912ca16ebf1138912e6bbedea99a36ad1ee06cc0cd",
- "format": 1
- },
- {
- "name": "playbooks/simple/list_arrays.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "45c636e983761357f5087229ed5fe4d478b51d239b4620fef21cc635d931999a",
- "format": 1
- },
- {
- "name": "playbooks/simple/list_storage_services.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "be8249059cb0948829e01156336c85bf7c22764541e49019b47a42f9801b2d15",
- "format": 1
- },
- {
- "name": "playbooks/simple/make_tenant_admin.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9fcfafc8e9d8f2a1d27e825ba62ff359ec29f3b34ec42e7610720b2fd5b88c94",
- "format": 1
- },
- {
- "name": "playbooks/simple/list_api_clients.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5ff79a24e584c6922e819976cdd49ceb86b8fbc683df3fac5514544e464bff68",
- "format": 1
- },
- {
- "name": "playbooks/simple/create_tenant_space.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b0254c52265517a8d98720efc6e76b163c4a59b575d672a3069c0aef25afd7b4",
- "format": 1
- },
- {
- "name": "playbooks/simple/list_protection_policies.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f0257e0d3199f931562d43ab7bd00caff26aed9ca7991ae181b02812ce8012e9",
- "format": 1
- },
- {
- "name": "playbooks/simple/list_network_interface_groups.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0ece2378f2b1e2f8085665f90da83f716a52e7a1d56f579c91480da003d2d6cc",
- "format": 1
- },
- {
- "name": "playbooks/simple/list_all.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cacd3575668cd03ebc1d13fb98f321b3c74eeb80b5f3d5a9b53cc0979d5b424a",
- "format": 1
- },
- {
- "name": "playbooks/simple/list_hosts.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "adfde2160651de7b7697a736b12da24c967981167f82d6b7fd058fa408e5c0ad",
- "format": 1
- },
- {
- "name": "playbooks/simple/setup_protection_policies.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3d4558b3e53bdb83cd1ebd98f9d91741811cfe2457905b7b9bb0ceb445d5546e",
- "format": 1
- },
- {
- "name": "playbooks/simple/list_roles.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5fdba34ac2ad048deac5a3f906ae30b0b5b6c7621f6f4a16353ad1f53dd1a1e4",
- "format": 1
- },
- {
- "name": "playbooks/simple/list_tenant_spaces.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "763263dbc9765ac7d270d18f4d5278dd3ce623673a04308c26750a6186d92dc0",
- "format": 1
- },
- {
- "name": "playbooks/simple/create_array.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e7ec429c847303f52c63c61aefa8c3714e9ee57a523ce751efa9dd6fec7f4da7",
- "format": 1
- },
- {
- "name": "playbooks/simple/list_availability_zones.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "37271a1ab28648a6604bba7e95ec3a41ae36a7510ebd4d93cc39a493cc9c6048",
- "format": 1
- },
- {
- "name": "playbooks/simple/list_users.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6a2cef1205c097069e3f5968de1abcf7b468519bf0c9f8d9e0effa6c5839262d",
- "format": 1
- },
- {
- "name": "playbooks/simple/list_tenants.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f5bb3ab4560bf4b46fec826e1183de35b2832957fde2978693711c21cb1f7e19",
- "format": 1
- },
- {
- "name": "playbooks/simple/setup_storage_service_class.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9ccffa6de2c433cbd99d0a30ccc41b5f282b8b98f33b4eb0f41c683410560dfd",
- "format": 1
- },
- {
- "name": "playbooks/simple/list_storage_endpoints.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5cb78b90c813503944af88630d9616d9ca9af238c1461cf816cdc9ad64f14e34",
- "format": 1
- },
- {
- "name": "playbooks/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "playbooks/vars/.keep",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "test",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "test/config.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9a009a349eaaf78c93ff56072d2ef171937bdb884e4976592ab5aaa9c68e1044",
- "format": 1
- },
- {
- "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/fusion_ts.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6d4c3f141409f2b1a5128912dbfe14341e17f6a9e5c20d14f3a5e82b75da4462",
- "format": 1
- },
- {
- "name": "plugins/modules/fusion_nig.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c220a2793545a832096d78d5d926a7a3037a828a0f2e042601e7e00afa29471b",
- "format": 1
- },
- {
- "name": "plugins/modules/fusion_api_client.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a0e35d215e9cce9b2f5e64e8661a12414ddea48df96a24e0f7b7ae9071aad43e",
- "format": 1
- },
- {
- "name": "plugins/modules/fusion_ni.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "148fdf12357a1b56c30343bb2a46b3d4cc2ff4f179f667c764d64101abc5057b",
- "format": 1
- },
- {
- "name": "plugins/modules/fusion_ss.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9ffdfd9f3ae2fa8df1a37b52370cc49e265801d25efcc17eb65649d92f72d4d9",
- "format": 1
- },
- {
- "name": "plugins/modules/fusion_pp.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "63543885c2adc09b3f829f0600774cf2ca098010ee2c9b58ce359ed383d7a780",
- "format": 1
- },
- {
- "name": "plugins/modules/fusion_tn.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4b1f04a80642f68426a58f5146dedd45bda2c820d65c7c3892e3e2acff495f37",
- "format": 1
- },
- {
- "name": "plugins/modules/fusion_array.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6baebe9c43933cc7bc0c43455a4019eb88805b0f11671a2331cc86bb8775d438",
- "format": 1
- },
- {
- "name": "plugins/modules/fusion_az.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ecaf8c75e0941895ba3b8f349c25049d7e2d6eb2468a609926d57c2d865ba264",
- "format": 1
- },
- {
- "name": "plugins/modules/fusion_pg.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "819e0298797184fd0a5d54fdb6dcebc9e8fad118a353c217311eddd7608ac2d4",
- "format": 1
- },
- {
- "name": "plugins/modules/fusion_volume.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ccf9e89f5c10eac9d992ac0740c082ebaaedf7d8d9ded38322223cc57a2f98d5",
- "format": 1
- },
- {
- "name": "plugins/modules/fusion_tenant.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "18887fdb6f7a44b647db0e25f726d605e00ded8396bc9841b29ddec1b56e101e",
- "format": 1
- },
- {
- "name": "plugins/modules/fusion_se.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9c77f1b938823461f586c66949527a5377dff942a7ec1024d729f190b2e127fa",
- "format": 1
- },
- {
- "name": "plugins/modules/fusion_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "de84aa2313d454b404ffc3791805b29cc8cbc49ad6daae83adfefa029ae2aecc",
- "format": 1
- },
- {
- "name": "plugins/modules/fusion_ra.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "20c1a2bbde557ebc6b03453552c2a2f718f11271ac96d75e7beb43c04095157c",
- "format": 1
- },
- {
- "name": "plugins/modules/fusion_sc.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "12711136fb3fa243fd65f15df009f9f0b68d5ee9fef9b11f5f7d7de38526afdb",
- "format": 1
- },
- {
- "name": "plugins/modules/fusion_region.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1bb063fced01a15617c99e4be32a95265e1678c75fc892ea3e1b9e93f3f683fb",
- "format": 1
- },
- {
- "name": "plugins/modules/fusion_hw.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5a5b7a795057365965db00615af3e349a9aba55f0d5d3e02ccf17ab6b77bf018",
- "format": 1
- },
- {
- "name": "plugins/modules/fusion_hap.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0b3e80b8cc3d42fc06b657d01258f24a805b6027ccfdc4286ddd66ddce554ea1",
- "format": 1
- },
- {
- "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": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "format": 1
- },
- {
- "name": "plugins/module_utils",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "plugins/module_utils/getters.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5bf8895d303da94229d2492c46c621bd9fc45d046d22f1f804acb4d81d7b00d4",
- "format": 1
- },
- {
- "name": "plugins/module_utils/prerequisites.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d4c21413eceda5c98229edd0999d45c3b87554fae9eeb096322d03dab91ac870",
- "format": 1
- },
- {
- "name": "plugins/module_utils/fusion.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "35d1ef53acaac66c4aadb35d8e259e97a465094db322a27191bf9dd9de1068ed",
- "format": 1
- },
- {
- "name": "plugins/module_utils/errors.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8b39a68c54dd07e3061824d2ad60ba4f9cebbf7b3c020283ceb3859e4e0e28a9",
- "format": 1
- },
- {
- "name": "plugins/module_utils/parsing.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "61e0fac0fa4ff6bbd1eb7f9dd1ba1b6822965f5f7c7691537222d3af37e725c2",
- "format": 1
- },
- {
- "name": "plugins/module_utils/operations.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "83b10433689009c69ed3a926d2b3cbe70b047fef29fbd432d69f836b48375354",
- "format": 1
- },
- {
- "name": "plugins/module_utils/snapshots.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f7571aba639702400e659241f9d8f61dd72f6ef3119b0af5296d7522dbd5125f",
- "format": 1
- },
- {
- "name": "plugins/module_utils/startup.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "42f7acffe52f3038f483f0698072de73307fa0664eac245901683a509b241a85",
- "format": 1
- },
- {
- "name": "plugins/module_utils/networking.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "42ac372c6e7bf8cd23747ac6d9684a4f9b8f1378a4ada923f6d55bc8606e3df8",
- "format": 1
- },
- {
- "name": "plugins/doc_fragments",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "plugins/doc_fragments/purestorage.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e231135e8559211663aea10e5ccc9ffbc0504bf09ac218cc4efefcf883275165",
- "format": 1
- },
- {
- "name": ".github",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": ".github/pull_request_template.md",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "565ead1b588caaa10cd6f2ed1bb6c809eb2ad93bf75da3a198690cac778432d6",
- "format": 1
- },
- {
- "name": ".github/ISSUE_TEMPLATE",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": ".github/ISSUE_TEMPLATE/bug_report.md",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0c8d64f29fb4536513653bf8c97da30f3340e2041b91c8952db1515d6b23a7b3",
- "format": 1
- },
- {
- "name": ".github/ISSUE_TEMPLATE/feature_request.md",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1f48c52f209a971b8e7eae4120144d28fcf8ee38a7778a7b4d8cf1ab356617d2",
- "format": 1
- },
- {
- "name": ".github/workflows",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": ".github/workflows/ansible-lint.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "62dbc43cafdab8da066ba0d86a08924e433f8b2919cdef935c116c5962d3a572",
- "format": 1
- },
- {
- "name": ".github/workflows/rh_automation_hub_token_keep_alive.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3c7f513c85853a9f152635f5fc9f4f8a1e621cc8b2a40c405d9efc69830800f6",
- "format": 1
- },
- {
- "name": ".github/workflows/stale.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "544ccc9f17e16d9087802e3dcec69741e6ff79e31cf7302947ce2c08126ce1d4",
- "format": 1
- },
- {
- "name": ".github/workflows/black.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b82c6a8af5e7c7d2113fecafa178bf6df94de434d4dc6e2ed6c3bc695da74f41",
- "format": 1
- },
- {
- "name": ".github/workflows/create-release.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "12ebf07984e4908dd2a6bed45d8bf38641bf3f264fe30ead9ce2849e6fcc8eb5",
- "format": 1
- },
- {
- "name": ".github/workflows/main.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "60e50d69898144d914ad2af759c744bd3ec8ccc78141cbeb13b850f283e20653",
- "format": 1
- },
- {
- "name": ".github/CONTRIBUTING.md",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ed15d670a6a61e8159059927017e7ba7c8bcc94623884ced7beb39ef445c7b95",
- "format": 1
- },
- {
- "name": "README.md",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2958e9b57938d749df6845d5d1a7e65c499990637af1056923ed6efa22c5684e",
- "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": "359c08cf506ebfd67477b25cc2f4763a1495f398cfb3cc9dd2a29595dce990db",
- "format": 1
- },
- {
- "name": ".gitignore",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3f4f6972c0df5e698a758d74ab5778f3941fca83f509a00f9665b338c220d762",
- "format": 1
- },
- {
- "name": ".yamllint",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2970fa4875092f99825ac0da3c82d2413ce973087b9945e68fdfa7b3b1e2012e",
- "format": 1
- },
- {
- "name": "CHANGELOG.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9c8780730bed93a88dcaafd561c2a40c06cc7add04279bce943a6e2a7a2f8778",
- "format": 1
- }
- ],
- "format": 1
-} \ No newline at end of file
diff --git a/ansible_collections/purestorage/fusion/MANIFEST.json b/ansible_collections/purestorage/fusion/MANIFEST.json
deleted file mode 100644
index 877ab80f8..000000000
--- a/ansible_collections/purestorage/fusion/MANIFEST.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "collection_info": {
- "namespace": "purestorage",
- "name": "fusion",
- "version": "1.6.1",
- "authors": [
- "Pure Storage Ansible Team <pure-ansible-team@purestorage.com>"
- ],
- "readme": "README.md",
- "tags": [
- "purestorage",
- "fusion",
- "storage"
- ],
- "description": "Collection of modules to manage Pure Fusion",
- "license": [
- "GPL-3.0-or-later"
- ],
- "license_file": null,
- "dependencies": {},
- "repository": "https://github.com/Pure-Storage-Ansible/Fusion-Collection",
- "documentation": "https://github.com/Pure-Storage-Ansible/Fusion-Collection",
- "homepage": null,
- "issues": "https://github.com/Pure-Storage-Ansible/Fusion-Collection/issues"
- },
- "file_manifest_file": {
- "name": "FILES.json",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "fcdf40d7eabc65ac35369e36b6ed40579ce799ee0ea94caed4b7ab06c0efd0b5",
- "format": 1
- },
- "format": 1
-} \ No newline at end of file
diff --git a/ansible_collections/purestorage/fusion/README.md b/ansible_collections/purestorage/fusion/README.md
deleted file mode 100644
index 0bb22423d..000000000
--- a/ansible_collections/purestorage/fusion/README.md
+++ /dev/null
@@ -1,104 +0,0 @@
-<a href="https://github.com/Pure-Storage-Ansible/Fusion-Collection/releases/latest"><img src="https://img.shields.io/github/v/tag/Pure-Storage-Ansible/Fusion-Collection?label=release">
-<a href="COPYING.GPLv3"><img src="https://img.shields.io/badge/license-GPL%20v3.0-brightgreen.svg"></a>
-<img src="https://cla-assistant.io/readme/badge/Pure-Storage-Ansible/Fusion-Collection">
-<img src="https://github.com/Pure-Storage-Ansible/Fusion-Collection/workflows/Pure%20Storage%20Ansible%20CI/badge.svg">
-<a href="https://github.com/psf/black"><img src="https://img.shields.io/badge/code%20style-black-000000.svg"></a>
-
-# DEPRECATION NOTICE
-
-The Pure Storage Fusion Ansible Collection is no longer being developed and is being deprecated.
-
-No further development work will be performed on this repo and the repo will be archived.
-
-# Pure Storage Fusion Collection
-
-The Pure Storage Fusion collection consists of the latest versions of the Fusion v1 modules.
-
-## Requirements
-
-- ansible-core >= 2.14.0
-- Python >= 3.9
-- Authorized API Application ID for Pure Storage Pure1 and associated Private Key
- - Refer to Pure Storage documentation on how to create these.
-- purefusion >= 1.0.4
-- time
-
-## Available Modules
-
-- fusion_api_client: Manage API clients in Pure Storage Fusion
-- fusion_array: Manage arrays in Pure Storage Fusion
-- fusion_az: Create Availability Zones in Pure Storage Fusion
-- fusion_hap: Manage host access policies in Pure Storage Fusion
-- fusion_hw: Create hardware types in Pure Storage Fusion
-- fusion_info: Collect information from Pure Fusion
-- fusion_ni: Manage Network Interfaces in Pure Storage Fusion
-- fusion_nig: Manage Network Interface Groups in Pure Storage Fusion
-- fusion_pg: Manage placement groups in Pure Storage Fusion
-- fusion_pp: Manage protection policies in Pure Storage Fusion
-- fusion_ra: Manage role assignments in Pure Storage Fusion
-- fusion_region: Manage regions in Pure Storage Fusion
-- fusion_sc: Manage storage classes in Pure Storage Fusion
-- fusion_se: Manage storage endpoints in Pure Storage Fusion
-- fusion_ss: Manage storage services in Pure Storage Fusion
-- fusion_tenant: Manage tenants in Pure Storage Fusion
-- fusion_tn: Manage tenant networks in Pure Storage Fusion
-- fusion_ts: Manage tenant spaces in Pure Storage Fusion
-- fusion_volume: Manage volumes in Pure Storage Fusion
-
-## Instructions
-
-Ansible must be installed [Install guide](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html)
-```
-sudo pip install ansible
-```
-
-Python PureFusion SDK must be installed
-```
-sudo pip install purefusion
-```
-
-Install the Pure Storage Fusion collection on your Ansible management host - [Galaxy link](https://galaxy.ansible.com/purestorage/fusion)
-```
-ansible-galaxy collection install purestorage.fusion
-```
-
-## Example Playbook
-```yaml
-- hosts: localhost
- tasks:
- - name: Collect information for Pure Storage fleet in Pure1
- purestorage.fusion.fusion_info:
- gather_subset: all
- issuer_id: <Pure1 API Application ID>
- private_key_file: <private key file name>
-```
-
-You can find more examples in our [example-playbooks](https://github.com/PureStorage-OpenConnect/ansible-playbook-examples/tree/master/fusion) repository.
-
-## Contributing to this collection
-
-Ongoing development efforts and contributions to this collection are tracked as issues in this repository.
-
-We welcome community contributions to this collection. If you find problems, need an enhancement or need a new module, please open an issue or create a PR against the [Pure Storage Fusion Ansible collection repository](https://github.com/Pure-Storage-Ansible/Fusion-Collection/issues).
-
-Code of Conduct
----------------
-This collection follows the Ansible project's
-[Code of Conduct](https://docs.ansible.com/ansible/devel/community/code_of_conduct.html).
-Please read and familiarize yourself with this document.
-
-Releasing, Versioning and Deprecation
--------------------------------------
-
-This collection follows [Semantic Versioning](https://semver.org). More details on versioning can be found [in the Ansible docs](https://docs.ansible.com/ansible/latest/dev_guide/developing_collections.html#collection-versions).
-
-New minor and major releases as well as deprecations will follow new releases and deprecations of the Pure Storage Fusion product, its REST API and the corresponding Python SDK, which this project relies on.
-
-## License
-
-[BSD-2-Clause](https://directory.fsf.org/wiki?title=License:FreeBSD)
-[GPL-3.0-or-later](https://www.gnu.org/licenses/gpl-3.0.en.html)
-
-## Author
-
-This collection was created in 2022 by [Simon Dodsley](@sdodsley) for, and on behalf of, the [Pure Storage Ansible Team](pure-ansible-team@purestorage.com)
diff --git a/ansible_collections/purestorage/fusion/changelogs/.plugin-cache.yaml b/ansible_collections/purestorage/fusion/changelogs/.plugin-cache.yaml
deleted file mode 100644
index 190d97ce5..000000000
--- a/ansible_collections/purestorage/fusion/changelogs/.plugin-cache.yaml
+++ /dev/null
@@ -1,114 +0,0 @@
-objects:
- role: {}
-plugins:
- become: {}
- cache: {}
- callback: {}
- cliconf: {}
- connection: {}
- filter: {}
- httpapi: {}
- inventory: {}
- lookup: {}
- module:
- fusion_api_client:
- description: Manage API clients in Pure Storage Fusion
- name: fusion_api_client
- namespace: ''
- version_added: 1.0.0
- fusion_array:
- description: Manage arrays in Pure Storage Fusion
- name: fusion_array
- namespace: ''
- version_added: 1.0.0
- fusion_az:
- description: Create Availability Zones in Pure Storage Fusion
- name: fusion_az
- namespace: ''
- version_added: 1.0.0
- fusion_hap:
- description: Manage host access policies in Pure Storage Fusion
- name: fusion_hap
- namespace: ''
- version_added: 1.0.0
- fusion_hw:
- description: Create hardware types in Pure Storage Fusion
- name: fusion_hw
- namespace: ''
- version_added: 1.0.0
- fusion_info:
- description: Collect information from Pure Fusion
- name: fusion_info
- namespace: ''
- version_added: 1.0.0
- fusion_ni:
- description: Manage network interfaces in Pure Storage Fusion
- name: fusion_ni
- namespace: ''
- version_added: 1.0.0
- fusion_nig:
- description: Manage Network Interface Groups in Pure Storage Fusion
- name: fusion_nig
- namespace: ''
- version_added: 1.0.0
- fusion_pg:
- description: Manage placement groups in Pure Storage Fusion
- name: fusion_pg
- namespace: ''
- version_added: 1.0.0
- fusion_pp:
- description: Manage protection policies in Pure Storage Fusion
- name: fusion_pp
- namespace: ''
- version_added: 1.0.0
- fusion_ra:
- description: Manage role assignments in Pure Storage Fusion
- name: fusion_ra
- namespace: ''
- version_added: 1.0.0
- fusion_region:
- description: Manage Regions in Pure Storage Fusion
- name: fusion_region
- namespace: ''
- version_added: 1.1.0
- fusion_sc:
- description: Manage storage classes in Pure Storage Fusion
- name: fusion_sc
- namespace: ''
- version_added: 1.0.0
- fusion_se:
- description: Manage storage endpoints in Pure Storage Fusion
- name: fusion_se
- namespace: ''
- version_added: 1.0.0
- fusion_ss:
- description: Manage storage services in Pure Storage Fusion
- name: fusion_ss
- namespace: ''
- version_added: 1.0.0
- fusion_tenant:
- description: Manage tenants in Pure Storage Fusion
- name: fusion_tenant
- namespace: ''
- version_added: 1.0.0
- fusion_tn:
- description: Manage tenant networks in Pure Storage Fusion
- name: fusion_tn
- namespace: ''
- version_added: 1.0.0
- fusion_ts:
- description: Manage tenant spaces in Pure Storage Fusion
- name: fusion_ts
- namespace: ''
- version_added: 1.0.0
- fusion_volume:
- description: Manage volumes in Pure Storage Fusion
- name: fusion_volume
- namespace: ''
- version_added: 1.0.0
- netconf: {}
- shell: {}
- strategy: {}
- test: {}
- vars: {}
-version: 1.6.1
diff --git a/ansible_collections/purestorage/fusion/changelogs/changelog.yaml b/ansible_collections/purestorage/fusion/changelogs/changelog.yaml
deleted file mode 100644
index c5d3f432d..000000000
--- a/ansible_collections/purestorage/fusion/changelogs/changelog.yaml
+++ /dev/null
@@ -1,381 +0,0 @@
-ancestor: null
-releases:
- 1.0.0:
- modules:
- - description: Manage API clients in Pure Storage Fusion
- name: fusion_api_client
- namespace: ''
- - description: Manage arrays in Pure Storage Fusion
- name: fusion_array
- namespace: ''
- - description: Create Availability Zones in Pure Storage Fusion
- name: fusion_az
- namespace: ''
- - description: Manage host access policies in Pure Storage Fusion
- name: fusion_hap
- namespace: ''
- - description: Create hardware types in Pure Storage Fusion
- name: fusion_hw
- namespace: ''
- - description: Collect information from Pure Fusion
- name: fusion_info
- namespace: ''
- - description: Manage Network Interface Groups in Pure Storage Fusion
- name: fusion_nig
- namespace: ''
- - description: Manage placement groups in Pure Storage Fusion
- name: fusion_pg
- namespace: ''
- - description: Manage protection policies in Pure Storage Fusion
- name: fusion_pp
- namespace: ''
- - description: Manage role assignments in Pure Storage Fusion
- name: fusion_ra
- namespace: ''
- - description: Manage storage classes in Pure Storage Fusion
- name: fusion_sc
- namespace: ''
- - description: Manage storage services in Pure Storage Fusion
- name: fusion_ss
- namespace: ''
- - description: Manage tenants in Pure Storage Fusion
- name: fusion_tenant
- namespace: ''
- - description: Manage tenant networks in Pure Storage Fusion
- name: fusion_tn
- namespace: ''
- - description: Manage tenant spaces in Pure Storage Fusion
- name: fusion_ts
- namespace: ''
- - description: Manage volumes in Pure Storage Fusion
- name: fusion_volume
- namespace: ''
- release_date: '2022-05-25'
- 1.0.1:
- release_date: '2022-05-27'
- 1.0.2:
- release_date: '2022-06-13'
- 1.0.3:
- fragments:
- - 27_review_fixes.yaml
- release_date: '2022-06-27'
- 1.1.0:
- changes:
- bugfixes:
- - Allow correct use of environmental variables for App ID and private file file
- minor_changes:
- - fusion_az - Add delete AZ option
- - fusion_az - Allow any region to be specified instead of limited to a known
- list
- - fusion_pp - Add delete PP option
- - fusion_sc - Add delete SC option
- - fusion_ss - Add delete SS option
- fragments:
- - 27_review_fixes.yaml
- - 28_any_region.yaml
- - 29_use_env.yaml
- - 31_add_delete_az.yaml
- - 32_add_delete_pp.yaml
- - 33_add_delete_sc.yaml
- - 34_add_delete_ss.yaml
- modules:
- - description: Manage Regions in Pure Storage Fusion
- name: fusion_region
- namespace: ''
- release_date: '2022-09-01'
- 1.1.1:
- release_date: '2022-09-23'
- 1.2.0:
- changes:
- bugfixes:
- - fusion_info - Fixed issue with storage endpoint dict formatting
- minor_changes:
- - fusion_info - Added API Client information
- fragments:
- - 39_fix_info.yaml
- - 41_add_api_client.yaml
- release_date: '2022-12-02'
- 1.3.0:
- changes:
- bugfixes:
- - fusion_pg - Add missing 'region' parameter
- - fusion_tn - Add missing 'region' parameter
- fragments:
- - 44_fix_missing_regions.yaml
- release_date: '2022-12-21'
- 1.4.0:
- changes:
- bugfixes:
- - fusion_api_client - error messages now mostly handled by errors_py
- - fusion_hap - could not delete host access policy without iqn option. Now it
- needs only name option for deletion
- - fusion_hap - error messages now mostly handled by errors_py
- - fusion_hap - uppercase names were not supported. Now uppercase names are allowed
- - fusion_info - fixes typo in output 'appiiances' -> 'appliances'
- - fusion_info - network_interface_groups subset returned nothing. Now it collects
- the same information as nigs subset
- - fusion_info - placements subset returned nothing. Now it collects the same
- information as placement_groups subset
- - fusion_nig - add missing 'availability_zone' format param in error message
- - fusion_nig - error messages now mostly handled by errors_py
- - fusion_pg - create_pg always broke runtime. Now it executes and creates placement
- group successfully
- - fusion_pg - error messages now mostly handled by errors_py
- - fusion_pp - error messages now mostly handled by errors_py
- - fusion_pp - fix call to parse_minutes where we were missing a required argument
- - fusion_sc - error messages now mostly handled by errors_py
- - fusion_se - add missing 'availability_zone' format param in error message
- - fusion_se - error messages now mostly handled by errors_py
- - fusion_se - fix call in get_nifg where provider_subnet was used instead of
- network_interface_group_name
- - fusion_ss - error messages now mostly handled by errors_py
- - fusion_tenant - error messages now mostly handled by errors_py
- - fusion_ts - add missing 'tenant' format param in error message
- - fusion_ts - error messages now mostly handled by errors_py
- - fusion_volume - error messages now mostly handled by errors_py
- deprecated_features:
- - fusion_hw - hardware module is being removed as changing hardware type has
- never been supported by Pure Storage Fusion
- - fusion_info - nigs subset is deprecated in favor of network_interface_groups
- and will be removed in the version 1.7.0
- - fusion_info - placements subset is deprecated in favor of placement_groups
- and will be removed in the version 1.7.0
- - fusion_pg - placement_engine option is deprecated because Fusion API does
- not longer support this parameter It will be removed in the version 2.0.0
- - fusion_se - parameters 'addresses', 'gateway' and 'network_interface_groups'
- are deprecated in favor of 'iscsi' and will be removed in version 2.0.0
- - fusion_tn - tenant networks are being replaced by storage endpoints ```fusion_se```
- and Network Interface Groups ```fusion_nig```
- major_changes:
- - Patching of resource properties was brought to parity with underlying Python
- SDK
- - fusion_volume - fixed and reorganized, arguments changed
- minor_changes:
- - errors_py - added opt-in global exception handler which produces simpler and
- cleaner messages on REST errors
- - removed dependency on Python `netaddr` package
- fragments:
- - 46_deprecate fusion_tn.yaml
- - 47_fix_volumes.yaml
- - 63_update_resource_patching.yaml
- - 67_deprecate fusion_hw.yaml
- - 68_update_error_handling_for_ts_volume.yaml
- - 69_use_exc_handler_in_most_modules.yaml
- - 70_fix_typo_appiances.yaml
- - 71_fix_few_missing_format_params.yaml
- - 72_fix_typo_getnifg.yaml
- - 73_fix_missing_module_params.yaml
- - 88_deprecate parameters in fusion_se.yaml
- - PR46_network_interface_groups.yaml
- - PR53_create_pg.yaml
- - PR55_host_access_policy.yaml
- - PR62_fix_placements.yaml
- release_date: '2023-03-16'
- 1.4.1:
- release_date: '2023-03-17'
- 1.4.2:
- changes:
- bugfixes:
- - fusion_array - correct required parameters
- - fusion_hap - display name has now default value set to the value of name
- - fusion_hw - correct required parameters
- - fusion_pg - correct required parameters
- - fusion_pp - correct required parameters
- - fusion_sc - correct required parameters
- - fusion_ss - allow updating hardware types, correct required parameters
- - fusion_tn - fix attribute error
- - fusion_volume - protection policy can now be unset by using '' as name
- minor_changes:
- - added Python package dependency checks in prerequisites.py
- - fusion_hap - added missing 'windows' personality type
- fragments:
- - 102_set_hap_display_name_default_value.yaml
- - 103_correct_required_parameters_in_all_modules.yaml
- - 108_add_missing_hap_personality.yaml
- - 114_fix_fusion_tn_error.yaml
- - 1483_allow_to_unset_protection_policy.yaml
- - 1538_improve_missing_python_deps_error.yaml
- release_date: '2023-04-11'
- 1.5.0:
- changes:
- bugfixes:
- - 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'
- deprecated_features:
- - 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
- minor_changes:
- - 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.
- - fusion - added private key password, which is used to decrypt private key
- files
- - 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_pp - duration parsing improved. Supports combination of time units
- (E.g 5H5M)
- - 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
- fragments:
- - 101_improve_duration_parsing.yml
- - 109_unify_storage_classes_key_in_fusion_info.yml
- - 112_unify_hardware_types_key_in_fusion_info.yml
- - 121_unify_parameters_and_env_variables_across_different_clients.yml
- - 127_change_logic_of_fusion_api_host.yml
- - 129_add_access_token.yml
- - 130_add_private_key_password.yml
- - 132_deprecate_unused_parameters_in_hap_module.yml
- - 134_add_cbs_storage_endpoint_support.yml
- - 135_add_principal_to_fusion_ra.yml
- - 138_add_api_client_key_to_fusion_ra.yml
- - 139_fix_bugs_in_fusion_info.yml
- - 142_add_missing_none_fields.yml
- - 143_unify_keys_in_fusion_info.yml
- - 3289_functests_pp_pg_ra.yml
- - 99_update_protection_policy_retention_description.yaml
- release_date: '2023-05-31'
- 1.6.0:
- changes:
- minor_changes:
- - all modules - return resource's id parameter on update and create.
- - fusion_array - added `apartment_id` argument, which can be used when creating
- an array.
- - 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 - 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_volume - Allow creating a new volume from already existing volume or
- volume snapshot
- fragments:
- - 148_add_apartment_id_to_fusion_array.yml
- - 151_create_volume_using_existing_volume_or_snapshot.yaml
- - 152_fix_rpo_local_retention_doc.yaml
- - 154_add_destroy_snapshots_on_delete_to_pp_and_pg.yml
- - 156_allow_leading_zeros.yaml
- - 159_fix_protection_policy_local_retention_validation.yaml
- - 160_add_id_on_exit.yml
- release_date: '2023-07-31'
- 1.6.1:
- changes:
- minor_changes:
- - fusion_volume - Allow creating a new volume from already existing volume or
- volume snapshot
- fragments:
- - 151_create_volume_using_existing_volume_or_snapshot.yaml
- release_date: '2024-02-08'
diff --git a/ansible_collections/purestorage/fusion/changelogs/config.yaml b/ansible_collections/purestorage/fusion/changelogs/config.yaml
deleted file mode 100644
index 0c1851805..000000000
--- a/ansible_collections/purestorage/fusion/changelogs/config.yaml
+++ /dev/null
@@ -1,32 +0,0 @@
-changelog_filename_template: ../CHANGELOG.rst
-changelog_filename_version_depth: 0
-changes_file: changelog.yaml
-changes_format: combined
-ignore_other_fragment_extensions: true
-keep_fragments: false
-mention_ancestor: true
-new_plugins_after_name: removed_features
-notesdir: fragments
-prelude_section_name: release_summary
-prelude_section_title: Release Summary
-sanitize_changelog: true
-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
-title: Purestorage.Fusion
-trivial_section_name: trivial
-use_fqcn: true
diff --git a/ansible_collections/purestorage/fusion/meta/runtime.yml b/ansible_collections/purestorage/fusion/meta/runtime.yml
deleted file mode 100644
index 6af15681b..000000000
--- a/ansible_collections/purestorage/fusion/meta/runtime.yml
+++ /dev/null
@@ -1,12 +0,0 @@
----
-requires_ansible: ">=2.14.0"
-plugin_routing:
- modules:
- fusion_tn:
- deprecation:
- removal_date: "2023-07-26"
- warning_text: "Use fusion_se + fusion_nig instead."
- fusion_hw:
- deprecation:
- removal_date: "2023-08-09"
- warning_text: "Don't use this module. This functionality isn't supported."
diff --git a/ansible_collections/purestorage/fusion/playbooks/simple/create_array.yml b/ansible_collections/purestorage/fusion/playbooks/simple/create_array.yml
deleted file mode 100644
index b4109f7f9..000000000
--- a/ansible_collections/purestorage/fusion/playbooks/simple/create_array.yml
+++ /dev/null
@@ -1,17 +0,0 @@
----
-- name: Create array
- hosts: localhost
- tasks:
-
- - name: Register array
- purestorage.fusion.fusion_array:
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- state: present # or absent
- name: flasharray3
- display_name: "flasharray3"
- host_name: "flasharray3"
- hardware_type: flash-array-x
- appliance_id: 1187351-242133817-5976825671211737520
- az: az1
- region: region1
diff --git a/ansible_collections/purestorage/fusion/playbooks/simple/create_availability_zone.yml b/ansible_collections/purestorage/fusion/playbooks/simple/create_availability_zone.yml
deleted file mode 100644
index 37f4264c6..000000000
--- a/ansible_collections/purestorage/fusion/playbooks/simple/create_availability_zone.yml
+++ /dev/null
@@ -1,13 +0,0 @@
----
-- name: Create availability zone
- hosts: localhost
- tasks:
-
- - name: Create new Availability Zone
- purestorage.fusion.fusion_az:
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- state: present # or absent
- name: "az2"
- display_name: "az2"
- region: pure-us-west
diff --git a/ansible_collections/purestorage/fusion/playbooks/simple/create_tenant_space.yml b/ansible_collections/purestorage/fusion/playbooks/simple/create_tenant_space.yml
deleted file mode 100644
index a71723c00..000000000
--- a/ansible_collections/purestorage/fusion/playbooks/simple/create_tenant_space.yml
+++ /dev/null
@@ -1,12 +0,0 @@
----
-- name: Create tenant space
- hosts: localhost
- tasks:
-
- - name: Create new tenant space db_tenant_space for tenant_name
- purestorage.fusion.fusion_ts:
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- state: "present" # or absent
- name: "db_tenant_space"
- tenant: "tenant_name"
diff --git a/ansible_collections/purestorage/fusion/playbooks/simple/list_all.yml b/ansible_collections/purestorage/fusion/playbooks/simple/list_all.yml
deleted file mode 100644
index ff9d15cce..000000000
--- a/ansible_collections/purestorage/fusion/playbooks/simple/list_all.yml
+++ /dev/null
@@ -1,14 +0,0 @@
----
-- name: Print all Fusion resources
- hosts: localhost
- tasks:
- - name: Collect all for Pure Storage
- purestorage.fusion.fusion_info:
- gather_subset: all
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- register: fusion_info
-
- - name: Print Fusion resources
- ansible.builtin.debug:
- msg: "{{ fusion_info['fusion_info'] }}"
diff --git a/ansible_collections/purestorage/fusion/playbooks/simple/list_api_clients.yml b/ansible_collections/purestorage/fusion/playbooks/simple/list_api_clients.yml
deleted file mode 100644
index 3e9c7ccb4..000000000
--- a/ansible_collections/purestorage/fusion/playbooks/simple/list_api_clients.yml
+++ /dev/null
@@ -1,14 +0,0 @@
----
-- name: Print API clients
- hosts: localhost
- tasks:
- - name: Collect api_clients for Pure Storage
- purestorage.fusion.fusion_info:
- gather_subset: api_clients
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- register: fusion_info
-
- - name: Print Fusion resources
- ansible.builtin.debug:
- msg: "{{ fusion_info['fusion_info'] }}"
diff --git a/ansible_collections/purestorage/fusion/playbooks/simple/list_arrays.yml b/ansible_collections/purestorage/fusion/playbooks/simple/list_arrays.yml
deleted file mode 100644
index 4c8cad76c..000000000
--- a/ansible_collections/purestorage/fusion/playbooks/simple/list_arrays.yml
+++ /dev/null
@@ -1,14 +0,0 @@
----
-- name: Print arrays
- hosts: localhost
- tasks:
- - name: Collect arrays for Pure Storage
- purestorage.fusion.fusion_info:
- gather_subset: arrays
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- register: fusion_info
-
- - name: Print Fusion resources
- ansible.builtin.debug:
- msg: "{{ fusion_info['fusion_info'] }}"
diff --git a/ansible_collections/purestorage/fusion/playbooks/simple/list_availability_zones.yml b/ansible_collections/purestorage/fusion/playbooks/simple/list_availability_zones.yml
deleted file mode 100644
index 3f4fc6ccf..000000000
--- a/ansible_collections/purestorage/fusion/playbooks/simple/list_availability_zones.yml
+++ /dev/null
@@ -1,14 +0,0 @@
----
-- name: Print availability zones
- hosts: localhost
- tasks:
- - name: Collect Availability Zones for Pure Storage
- purestorage.fusion.fusion_info:
- gather_subset: zones
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- register: fusion_info
-
- - name: Print Fusion resources
- ansible.builtin.debug:
- msg: "{{ fusion_info['fusion_info'] }}"
diff --git a/ansible_collections/purestorage/fusion/playbooks/simple/list_hardware_types.yml b/ansible_collections/purestorage/fusion/playbooks/simple/list_hardware_types.yml
deleted file mode 100644
index 4c1e20db0..000000000
--- a/ansible_collections/purestorage/fusion/playbooks/simple/list_hardware_types.yml
+++ /dev/null
@@ -1,14 +0,0 @@
----
-- name: Print hardware types
- hosts: localhost
- tasks:
- - name: Collect hardware_types for Pure Storage
- purestorage.fusion.fusion_info:
- gather_subset: hardware_types
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- register: fusion_info
-
- - name: Print Fusion resources
- ansible.builtin.debug:
- msg: "{{ fusion_info['fusion_info'] }}"
diff --git a/ansible_collections/purestorage/fusion/playbooks/simple/list_hosts.yml b/ansible_collections/purestorage/fusion/playbooks/simple/list_hosts.yml
deleted file mode 100644
index 1c60fdf7b..000000000
--- a/ansible_collections/purestorage/fusion/playbooks/simple/list_hosts.yml
+++ /dev/null
@@ -1,14 +0,0 @@
----
-- name: List hosts
- hosts: localhost
- tasks:
- - name: Collect hosts for Pure Storage
- purestorage.fusion.fusion_info:
- gather_subset: hosts
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- register: fusion_info
-
- - name: Print Fusion resources
- ansible.builtin.debug:
- msg: "{{ fusion_info['fusion_info'] }}"
diff --git a/ansible_collections/purestorage/fusion/playbooks/simple/list_interfaces.yml b/ansible_collections/purestorage/fusion/playbooks/simple/list_interfaces.yml
deleted file mode 100644
index edee38234..000000000
--- a/ansible_collections/purestorage/fusion/playbooks/simple/list_interfaces.yml
+++ /dev/null
@@ -1,14 +0,0 @@
----
-- name: Print interfaces
- hosts: localhost
- tasks:
- - name: Collect interfaces for Pure Storage
- purestorage.fusion.fusion_info:
- gather_subset: interfaces
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- register: fusion_info
-
- - name: Print Fusion resources
- ansible.builtin.debug:
- msg: "{{ fusion_info['fusion_info'] }}"
diff --git a/ansible_collections/purestorage/fusion/playbooks/simple/list_network_interface_groups.yml b/ansible_collections/purestorage/fusion/playbooks/simple/list_network_interface_groups.yml
deleted file mode 100644
index 6b2cbc260..000000000
--- a/ansible_collections/purestorage/fusion/playbooks/simple/list_network_interface_groups.yml
+++ /dev/null
@@ -1,14 +0,0 @@
----
-- name: Print network interface groups
- hosts: localhost
- tasks:
- - name: Collect network_interface_groups for Pure Storage
- purestorage.fusion.fusion_info:
- gather_subset: network_interface_groups
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- register: fusion_info
-
- - name: Print Fusion resources
- ansible.builtin.debug:
- msg: "{{ fusion_info['fusion_info'] }}"
diff --git a/ansible_collections/purestorage/fusion/playbooks/simple/list_placement_groups.yml b/ansible_collections/purestorage/fusion/playbooks/simple/list_placement_groups.yml
deleted file mode 100644
index 2b7da696d..000000000
--- a/ansible_collections/purestorage/fusion/playbooks/simple/list_placement_groups.yml
+++ /dev/null
@@ -1,14 +0,0 @@
----
-- name: Print placement groups
- hosts: localhost
- tasks:
- - name: Collect placement_groups for Pure Storage
- purestorage.fusion.fusion_info:
- gather_subset: placement_groups
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- register: fusion_info
-
- - name: Print Fusion resources
- ansible.builtin.debug:
- msg: "{{ fusion_info['fusion_info'] }}"
diff --git a/ansible_collections/purestorage/fusion/playbooks/simple/list_protection_policies.yml b/ansible_collections/purestorage/fusion/playbooks/simple/list_protection_policies.yml
deleted file mode 100644
index f9b8249ec..000000000
--- a/ansible_collections/purestorage/fusion/playbooks/simple/list_protection_policies.yml
+++ /dev/null
@@ -1,14 +0,0 @@
----
-- name: Print protection policies
- hosts: localhost
- tasks:
- - name: Collect protection_policies for Pure Storage
- purestorage.fusion.fusion_info:
- gather_subset: protection_policies
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- register: fusion_info
-
- - name: Print Fusion resources
- ansible.builtin.debug:
- msg: "{{ fusion_info['fusion_info'] }}"
diff --git a/ansible_collections/purestorage/fusion/playbooks/simple/list_roles.yml b/ansible_collections/purestorage/fusion/playbooks/simple/list_roles.yml
deleted file mode 100644
index c224f54ab..000000000
--- a/ansible_collections/purestorage/fusion/playbooks/simple/list_roles.yml
+++ /dev/null
@@ -1,14 +0,0 @@
----
-- name: Print roles
- hosts: localhost
- tasks:
- - name: Collect roles for Pure Storage
- purestorage.fusion.fusion_info:
- gather_subset: roles
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- register: fusion_info
-
- - name: Print Fusion resources
- ansible.builtin.debug:
- msg: "{{ fusion_info['fusion_info'] }}"
diff --git a/ansible_collections/purestorage/fusion/playbooks/simple/list_snapshots.yml b/ansible_collections/purestorage/fusion/playbooks/simple/list_snapshots.yml
deleted file mode 100644
index fda1c1665..000000000
--- a/ansible_collections/purestorage/fusion/playbooks/simple/list_snapshots.yml
+++ /dev/null
@@ -1,14 +0,0 @@
----
-- name: Print snapshots
- hosts: localhost
- tasks:
- - name: Collect snapshots for Pure Storage
- purestorage.fusion.fusion_info:
- gather_subset: snapshots
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- register: fusion_info
-
- - name: Print Fusion resources
- ansible.builtin.debug:
- msg: "{{ fusion_info['fusion_info'] }}"
diff --git a/ansible_collections/purestorage/fusion/playbooks/simple/list_storage_classes.yml b/ansible_collections/purestorage/fusion/playbooks/simple/list_storage_classes.yml
deleted file mode 100644
index 1d361e329..000000000
--- a/ansible_collections/purestorage/fusion/playbooks/simple/list_storage_classes.yml
+++ /dev/null
@@ -1,14 +0,0 @@
----
-- name: Print storage classes
- hosts: localhost
- tasks:
- - name: Collect storage_classes for Pure Storage
- purestorage.fusion.fusion_info:
- gather_subset: storage_classes
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- register: fusion_info
-
- - name: Print Fusion resources
- ansible.builtin.debug:
- msg: "{{ fusion_info['fusion_info'] }}"
diff --git a/ansible_collections/purestorage/fusion/playbooks/simple/list_storage_endpoints.yml b/ansible_collections/purestorage/fusion/playbooks/simple/list_storage_endpoints.yml
deleted file mode 100644
index 806cceab1..000000000
--- a/ansible_collections/purestorage/fusion/playbooks/simple/list_storage_endpoints.yml
+++ /dev/null
@@ -1,14 +0,0 @@
----
-- name: Print storage endpoints
- hosts: localhost
- tasks:
- - name: Collect storage_endpoints for Pure Storage
- purestorage.fusion.fusion_info:
- gather_subset: storage_endpoints
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- register: fusion_info
-
- - name: Print Fusion resources
- ansible.builtin.debug:
- msg: "{{ fusion_info['fusion_info'] }}"
diff --git a/ansible_collections/purestorage/fusion/playbooks/simple/list_storage_services.yml b/ansible_collections/purestorage/fusion/playbooks/simple/list_storage_services.yml
deleted file mode 100644
index 2d4414867..000000000
--- a/ansible_collections/purestorage/fusion/playbooks/simple/list_storage_services.yml
+++ /dev/null
@@ -1,14 +0,0 @@
----
-- name: Print storage services
- hosts: localhost
- tasks:
- - name: Collect storage_services for Pure Storage
- purestorage.fusion.fusion_info:
- gather_subset: storage_services
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- register: fusion_info
-
- - name: Print Fusion resources
- ansible.builtin.debug:
- msg: "{{ fusion_info['fusion_info'] }}"
diff --git a/ansible_collections/purestorage/fusion/playbooks/simple/list_tenant_spaces.yml b/ansible_collections/purestorage/fusion/playbooks/simple/list_tenant_spaces.yml
deleted file mode 100644
index dd392c131..000000000
--- a/ansible_collections/purestorage/fusion/playbooks/simple/list_tenant_spaces.yml
+++ /dev/null
@@ -1,14 +0,0 @@
----
-- name: Print tenant spaces
- hosts: localhost
- tasks:
- - name: Collect tenant_spaces for Pure Storage
- purestorage.fusion.fusion_info:
- gather_subset: tenant_spaces
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- register: fusion_info
-
- - name: Print Fusion resources
- ansible.builtin.debug:
- msg: "{{ fusion_info['fusion_info'] }}"
diff --git a/ansible_collections/purestorage/fusion/playbooks/simple/list_tenants.yml b/ansible_collections/purestorage/fusion/playbooks/simple/list_tenants.yml
deleted file mode 100644
index f15c62848..000000000
--- a/ansible_collections/purestorage/fusion/playbooks/simple/list_tenants.yml
+++ /dev/null
@@ -1,14 +0,0 @@
----
-- name: Print tenants
- hosts: localhost
- tasks:
- - name: Collect tenants for Pure Storage
- purestorage.fusion.fusion_info:
- gather_subset: tenants
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- register: fusion_info
-
- - name: Print Fusion resources
- ansible.builtin.debug:
- msg: "{{ fusion_info['fusion_info'] }}"
diff --git a/ansible_collections/purestorage/fusion/playbooks/simple/list_users.yml b/ansible_collections/purestorage/fusion/playbooks/simple/list_users.yml
deleted file mode 100644
index e64852513..000000000
--- a/ansible_collections/purestorage/fusion/playbooks/simple/list_users.yml
+++ /dev/null
@@ -1,14 +0,0 @@
----
-- name: Print users
- hosts: localhost
- tasks:
- - name: Collect users for Pure Storage
- purestorage.fusion.fusion_info:
- gather_subset: users
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- register: fusion_info
-
- - name: Print Fusion resources
- ansible.builtin.debug:
- msg: "{{ fusion_info['fusion_info'] }}"
diff --git a/ansible_collections/purestorage/fusion/playbooks/simple/list_volumes.yml b/ansible_collections/purestorage/fusion/playbooks/simple/list_volumes.yml
deleted file mode 100644
index 8c97e6a6c..000000000
--- a/ansible_collections/purestorage/fusion/playbooks/simple/list_volumes.yml
+++ /dev/null
@@ -1,14 +0,0 @@
----
-- name: Print volumes
- hosts: localhost
- tasks:
- - name: Collect volumes for Pure Storage
- purestorage.fusion.fusion_info:
- gather_subset: volumes
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- register: fusion_info
-
- - name: Print Fusion resources
- ansible.builtin.debug:
- msg: "{{ fusion_info['fusion_info'] }}"
diff --git a/ansible_collections/purestorage/fusion/playbooks/simple/make_tenant_admin.yml b/ansible_collections/purestorage/fusion/playbooks/simple/make_tenant_admin.yml
deleted file mode 100644
index f55a30023..000000000
--- a/ansible_collections/purestorage/fusion/playbooks/simple/make_tenant_admin.yml
+++ /dev/null
@@ -1,12 +0,0 @@
----
-- name: Add tenant admin role
- hosts: localhost
- tasks:
- - name: Add tenant-admin role to api-client
- purestorage.fusion.fusion_ra:
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- state: present
- role: "tenant-admin"
- scope: "organization" # "organization" "tenant_space"
- user: "{{ ansible_env.FUSION_ISSUER_ID }}"
diff --git a/ansible_collections/purestorage/fusion/playbooks/simple/remove_array.yml b/ansible_collections/purestorage/fusion/playbooks/simple/remove_array.yml
deleted file mode 100644
index b50031743..000000000
--- a/ansible_collections/purestorage/fusion/playbooks/simple/remove_array.yml
+++ /dev/null
@@ -1,17 +0,0 @@
----
-- name: Remote array
- hosts: localhost
- tasks:
-
- - name: Remove array
- purestorage.fusion.fusion_array:
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- state: absent # or present
- name: flasharray3
- display_name: "flasharray3"
- host_name: "flasharray3"
- hardware_type: flash-array-x
- appliance_id: 1187351-242133817-5976825671211737520
- az: az1
- region: region1
diff --git a/ansible_collections/purestorage/fusion/playbooks/simple/setup_infrastructure.yml b/ansible_collections/purestorage/fusion/playbooks/simple/setup_infrastructure.yml
deleted file mode 100644
index baea6e59d..000000000
--- a/ansible_collections/purestorage/fusion/playbooks/simple/setup_infrastructure.yml
+++ /dev/null
@@ -1,64 +0,0 @@
----
-- name: Setup Fusion resources
- hosts: localhost
- tasks:
-
- - name: Create new region
- purestorage.fusion.fusion_region:
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- state: present # or absent
- name: region1
- display_name: "region1"
-
- - name: Create new Availability Zone
- purestorage.fusion.fusion_az:
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- state: present # or absent
- name: az1
- region: region1
- display_name: "az1"
-
- - name: Create new network interface group
- purestorage.fusion.fusion_nig:
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- state: present # or absent
- name: "interface_group1"
- availability_zone: "az1"
- region: region1
- mtu: 1500
- gateway: 172.17.1.1
- prefix: 172.17.1.0/24
-
- - name: Create new Storage Endpoint
- purestorage.fusion.fusion_se:
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- state: present # or absent
- region: region1
- name: default
- display_name: default
- availability_zone: az1
- endpoint_type: iscsi
- iscsi:
- - address: "172.17.1.2/24"
- gateway: "172.17.1.1"
- network_interface_groups: ["interface_group1"]
- - address: "172.17.1.1/24"
- gateway: "172.17.1.1"
- network_interface_groups: ["interface_group1"]
-
- - name: Register new array
- purestorage.fusion.fusion_array:
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- state: present # or absent
- name: flasharray1
- display_name: "flasharray1"
- az: az1
- hardware_type: flash-array-x
- appliance_id: 1187351-242133817-5976825671211737520
- region: region1
- host_name: flasharray1
diff --git a/ansible_collections/purestorage/fusion/playbooks/simple/setup_protection_policies.yml b/ansible_collections/purestorage/fusion/playbooks/simple/setup_protection_policies.yml
deleted file mode 100644
index f88c35e7a..000000000
--- a/ansible_collections/purestorage/fusion/playbooks/simple/setup_protection_policies.yml
+++ /dev/null
@@ -1,13 +0,0 @@
----
-- name: Create protection policy
- hosts: localhost
- tasks:
- - name: Create new Protection Policy PP_name
- purestorage.fusion.fusion_pp:
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- name: "PP_name"
- display_name: "PP_name"
- local_rpo: "15" # in minutes
- local_retention: "24h" # m(inutes), h(ours), d(ays), w(eeks) or y(ears)
- state: present # or absent
diff --git a/ansible_collections/purestorage/fusion/playbooks/simple/setup_storage_service_class.yml b/ansible_collections/purestorage/fusion/playbooks/simple/setup_storage_service_class.yml
deleted file mode 100644
index 16326bc93..000000000
--- a/ansible_collections/purestorage/fusion/playbooks/simple/setup_storage_service_class.yml
+++ /dev/null
@@ -1,24 +0,0 @@
----
-- name: Create storage service & class
- hosts: localhost
- tasks:
- - name: Create new storage service called storage_service_1
- purestorage.fusion.fusion_ss:
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- name: storage_service_1
- display_name: "storage_service_1"
- hardware_types: flash-array-c
- state: present # or absent
-
- - name: Create new storage class storage_class_1
- purestorage.fusion.fusion_sc:
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- name: storage_class_1
- display_name: "storage_class_1"
- storage_service: storage_service_1
- size_limit: 100M # 100M 100G 100T 100P - Default 4PB
- iops_limit: 10000 # Must be between 100 and 100000000.
- bw_limit: 4194M # 524288000
- state: present # or absent
diff --git a/ansible_collections/purestorage/fusion/playbooks/simple/setup_workloads.yml b/ansible_collections/purestorage/fusion/playbooks/simple/setup_workloads.yml
deleted file mode 100644
index 3a601514c..000000000
--- a/ansible_collections/purestorage/fusion/playbooks/simple/setup_workloads.yml
+++ /dev/null
@@ -1,71 +0,0 @@
----
-- name: Setup workloads
- hosts: localhost
- # This playbook create:
-
- # *- Tenant space: db_tenant_space
- # *- Placement Group: pg1
- # *- AIX host access policy: customer_host_access
- # *- volume: data_vol1
- # *- volume: data_vol2
-
- # require:
- # *- Storage class: db_high_performance
- # *- Tenant: oracle_dbas
- # *- Region: region1
-
- tasks:
- - name: Create new tenant space db_tenant_space for oracle_dbas
- purestorage.fusion.fusion_ts:
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- name: "db_tenant_space"
- tenant: "oracle_dbas"
- state: "present" # or absent
-
- - name: Create new placement group named pg1
- purestorage.fusion.fusion_pg:
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- name: "pg1"
- tenant: "oracle_dbas"
- tenant_space: "db_tenant_space"
- region: "region1"
- availability_zone: "az1"
- storage_service: "db_xl"
- state: "present" # or absent
-
- - name: Create new host access policy
- purestorage.fusion.fusion_hap:
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- name: "customer_host_access"
- personality: "linux"
- iqn: "iqn.1994-05.com.redhat:9dd57693efb"
- state: "present" # or absent
-
- - name: Create new volume data_vol1 in storage_class db_high_performance
- purestorage.fusion.fusion_volume:
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- name: "data_vol1"
- storage_class: "db_high_performance"
- size: "500G" # Volume size in M, G, T or P units.
- tenant: "oracle_dbas"
- tenant_space: "db_tenant_space"
- placement_group: "pg1"
- host_access_policies: "customer_host_access"
- state: "present" # or absent
-
- - name: Create new volume data_vol2 in storage_class db_high_performance
- purestorage.fusion.fusion_volume:
- issuer_id: "{{ ansible_env.FUSION_ISSUER_ID }}"
- private_key_file: "{{ ansible_env.FUSION_PRIVATE_KEY_FILE }}"
- name: "data_vol2"
- storage_class: "db_high_performance"
- size: "500G" # Volume size in M, G, T or P units.
- tenant: "oracle_dbas"
- tenant_space: "db_tenant_space"
- placement_group: "pg1"
- host_access_policies: "customer_host_access"
- state: "present" # or absent
diff --git a/ansible_collections/purestorage/fusion/playbooks/tasks/.keep b/ansible_collections/purestorage/fusion/playbooks/tasks/.keep
deleted file mode 100644
index e69de29bb..000000000
--- a/ansible_collections/purestorage/fusion/playbooks/tasks/.keep
+++ /dev/null
diff --git a/ansible_collections/purestorage/fusion/playbooks/templates/.keep b/ansible_collections/purestorage/fusion/playbooks/templates/.keep
deleted file mode 100644
index e69de29bb..000000000
--- a/ansible_collections/purestorage/fusion/playbooks/templates/.keep
+++ /dev/null
diff --git a/ansible_collections/purestorage/fusion/playbooks/vars/.keep b/ansible_collections/purestorage/fusion/playbooks/vars/.keep
deleted file mode 100644
index e69de29bb..000000000
--- a/ansible_collections/purestorage/fusion/playbooks/vars/.keep
+++ /dev/null
diff --git a/ansible_collections/purestorage/fusion/plugins/doc_fragments/purestorage.py b/ansible_collections/purestorage/fusion/plugins/doc_fragments/purestorage.py
deleted file mode 100644
index a2f933161..000000000
--- a/ansible_collections/purestorage/fusion/plugins/doc_fragments/purestorage.py
+++ /dev/null
@@ -1,56 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright: (c) 2021, Simon Dodsley <simon@purestorage.com>
-# 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
-
-
-class ModuleDocFragment(object):
- # Standard Pure Storage documentation fragment
- DOCUMENTATION = r"""
-options:
- - See separate platform section for more details
-requirements:
- - See separate platform section for more details
-notes:
- - Ansible modules are available for the following Pure Storage products: FlashArray, FlashBlade, Pure1, Fusion
-"""
-
- # Documentation fragment for Fusion
- FUSION = r"""
-options:
- private_key_file:
- aliases: [ key_file ]
- description:
- - Path to the private key file
- - Defaults to the set environment variable under FUSION_PRIVATE_KEY_FILE.
- type: str
- private_key_password:
- description:
- - Password of the encrypted private key file
- type: str
- issuer_id:
- aliases: [ app_id ]
- description:
- - Application ID from Pure1 Registration page
- - eg. pure1:apikey:dssf2331sd
- - Defaults to the set environment variable under FUSION_ISSUER_ID
- type: str
- access_token:
- description:
- - Access token for Fusion Service
- - Defaults to the set environment variable under FUSION_ACCESS_TOKEN
- type: str
-notes:
- - This module requires the I(purefusion) Python library
- - You must set C(FUSION_ISSUER_ID) and C(FUSION_PRIVATE_KEY_FILE) environment variables
- if I(issuer_id) and I(private_key_file) arguments are not passed to the module directly
- - If you want to use access token for authentication, you must use C(FUSION_ACCESS_TOKEN) environment variable
- if I(access_token) argument is not passed to the module directly
-requirements:
- - python >= 3.8
- - purefusion
-"""
diff --git a/ansible_collections/purestorage/fusion/plugins/inventory/__init__.py b/ansible_collections/purestorage/fusion/plugins/inventory/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/ansible_collections/purestorage/fusion/plugins/inventory/__init__.py
+++ /dev/null
diff --git a/ansible_collections/purestorage/fusion/plugins/module_utils/errors.py b/ansible_collections/purestorage/fusion/plugins/module_utils/errors.py
deleted file mode 100644
index f3d574edc..000000000
--- a/ansible_collections/purestorage/fusion/plugins/module_utils/errors.py
+++ /dev/null
@@ -1,291 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# (c) 2023, Jan Kodera (jkodera@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-try:
- import fusion as purefusion
- import urllib3
-except ImportError:
- pass
-
-import sys
-import json
-import re
-import traceback as trace
-
-
-class OperationException(Exception):
- """Raised if an asynchronous Operation fails."""
-
- def __init__(self, op, http_error=None):
- self._op = op
- self._http_error = http_error
-
- @property
- def op(self):
- return self._op
-
- @property
- def http_error(self):
- return self._http_error
-
-
-def _get_verbosity(module):
- # verbosity is a private member and Ansible does not really allow
- # providing extra information only if the user wants it due to ideological
- # reasons, so extract it as carefully as possible and assume non-verbose
- # if something fails
- try:
- if module._verbosity is not None and isinstance(module._verbosity, int):
- return module._verbosity
- except Exception:
- pass
- return 0
-
-
-def _extract_rest_call_site(traceback):
- # extracts first function in traceback that comes from 'fusion.api.*_api*',
- # converts its name from something like 'get_volume' to 'Get volume' and returns
- while traceback:
- try:
- frame = traceback.tb_frame
- func_name = (
- frame.f_code.co_name
- ) # contains function name, e.g. 'get_volume'
- mod_path = frame.f_globals[
- "__name__"
- ] # contains module path, e.g. 'fusion.api.volumes_api'
- path_segments = mod_path.split(".")
- if (
- path_segments[0] == "fusion"
- and path_segments[1] == "api"
- and "_api" in path_segments[2]
- ):
- call_site = func_name.replace("_", " ").capitalize()
- return call_site
- except Exception:
- pass
- traceback = traceback.tb_next
- return None
-
-
-class DetailsPrinter:
- def __init__(self, target):
- self._target = target
- self._parenthesed = False
-
- def append(self, what):
- if not self._parenthesed:
- self._target += " ("
- self._parenthesed = True
- else:
- self._target += ", "
-
- self._target += what
-
- def finish(self):
- if self._parenthesed:
- self._target += ")"
- return self._target
-
-
-def format_fusion_api_exception(exception, traceback=None):
- """Formats `fusion.rest.ApiException` into a simple short form, suitable
- for Ansible error output. Returns a (message: str, body: dict) tuple."""
- message = None
- code = None
- resource_name = None
- request_id = None
- body = None
- call_site = _extract_rest_call_site(traceback)
- try:
- body = json.loads(exception.body)
- request_id = body.get("request_id", None)
- error = body["error"]
- message = error.get("message")
- code = error.get("pure_code")
- if not code:
- code = exception.status
- if not code:
- code = error.get("http_code")
- resource_name = error["details"]["name"]
- except Exception:
- pass
-
- output = ""
- if call_site:
- output += "'{0}' failed".format(call_site)
- else:
- output += "request failed"
-
- if message:
- output += ", {0}".format(message.replace('"', "'"))
-
- details = DetailsPrinter(output)
- if resource_name:
- details.append("resource: '{0}'".format(resource_name))
- if code:
- details.append("code: '{0}'".format(code))
- if request_id:
- details.append("request id: '{0}'".format(request_id))
- output = details.finish()
-
- return (output, body)
-
-
-def format_failed_fusion_operation_exception(exception):
- """Formats failed `fusion.Operation` into a simple short form, suitable
- for Ansible error output. Returns a (message: str, body: dict) tuple."""
- op = exception.op
- http_error = exception.http_error
- if op.status != "Failed" and not http_error:
- raise ValueError(
- "BUG: can only format Operation exception with .status == Failed or http_error != None"
- )
-
- message = None
- code = None
- operation_name = None
- operation_id = None
-
- try:
- if op.status == "Failed":
- operation_id = op.id
- error = op.error
- message = error.message
- code = error.pure_code
- if not code:
- code = error.http_code
- operation_name = op.request_type
- except Exception:
- pass
-
- output = ""
- if operation_name:
- # converts e.g. 'CreateVolume' to 'Create volume'
- operation_name = re.sub("(.)([A-Z][a-z]+)", r"\1 \2", operation_name)
- operation_name = re.sub(
- "([a-z0-9])([A-Z])", r"\1 \2", operation_name
- ).capitalize()
- output += "{0}: ".format(operation_name)
- output += "operation failed"
-
- if message:
- output += ", {0}".format(message.replace('"', "'"))
-
- details = DetailsPrinter(output)
- if code:
- details.append("code: '{0}'".format(code))
- if operation_id:
- details.append("operation id: '{0}'".format(operation_id))
- if http_error:
- details.append("HTTP error: '{0}'".format(str(http_error).replace('"', "'")))
-
- output = details.finish()
-
- return output
-
-
-def format_http_exception(exception, traceback):
- """Formats failed `urllib3.exceptions` exceptions into a simple short form,
- suitable for Ansible error output. Returns a `str`."""
- # urllib3 exceptions hide all details in a formatted message so all we
- # can do is append the REST call that caused this
- output = ""
- call_site = _extract_rest_call_site(traceback)
- if call_site:
- output += "'{0}': ".format(call_site)
- output += "HTTP request failed via "
-
- inner = exception
- while True:
- try:
- e = inner.reason
- if e and isinstance(e, urllib3.exceptions.HTTPError):
- inner = e
- continue
- break
- except Exception:
- break
-
- if inner != exception:
- output += "'{0}'/'{1}'".format(type(inner).__name__, type(exception).__name__)
- else:
- output += "'{0}'".format(type(exception).__name__)
-
- output += " - {0}".format(str(exception).replace('"', "'"))
-
- return output
-
-
-def _handle_api_exception(
- module,
- exception,
- traceback,
- verbosity,
-):
- (error_message, body) = format_fusion_api_exception(exception, traceback)
-
- if verbosity > 1:
- module.fail_json(msg=error_message, call_details=body, traceback=str(traceback))
- elif verbosity > 0:
- module.fail_json(msg=error_message, call_details=body)
- else:
- module.fail_json(msg=error_message)
-
-
-def _handle_operation_exception(module, exception, traceback, verbosity):
- op = exception.op
-
- error_message = format_failed_fusion_operation_exception(exception)
-
- if verbosity > 1:
- module.fail_json(
- msg=error_message, op_details=op.to_dict(), traceback=str(traceback)
- )
- elif verbosity > 0:
- module.fail_json(msg=error_message, op_details=op.to_dict())
- else:
- module.fail_json(msg=error_message)
-
-
-def _handle_http_exception(module, exception, traceback, verbosity):
- error_message = format_http_exception(exception, traceback)
-
- if verbosity > 1:
- module.fail_json(msg=error_message, traceback=trace.format_exception(exception))
- else:
- module.fail_json(msg=error_message)
-
-
-def _except_hook_callback(module, original_hook, type, value, traceback):
- verbosity = _get_verbosity(module)
- if type == purefusion.rest.ApiException:
- _handle_api_exception(
- module,
- value,
- traceback,
- verbosity,
- )
- elif type == OperationException:
- _handle_operation_exception(module, value, traceback, verbosity)
- elif issubclass(type, urllib3.exceptions.HTTPError):
- _handle_http_exception(module, value, traceback, verbosity)
-
- # if we bubbled here the handlers were not able to process the exception
- original_hook(type, value, traceback)
-
-
-def install_fusion_exception_hook(module):
- """Installs a hook that catches `purefusion.rest.ApiException` and
- `OperationException` and produces simpler and nicer error messages
- for Ansible output."""
- original_hook = sys.excepthook
- sys.excepthook = lambda type, value, traceback: _except_hook_callback(
- module, original_hook, type, value, traceback
- )
diff --git a/ansible_collections/purestorage/fusion/plugins/module_utils/fusion.py b/ansible_collections/purestorage/fusion/plugins/module_utils/fusion.py
deleted file mode 100644
index 74b5f0e91..000000000
--- a/ansible_collections/purestorage/fusion/plugins/module_utils/fusion.py
+++ /dev/null
@@ -1,183 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# This code is part of Ansible, but is an independent component.
-# This particular file snippet, and this file snippet only, is BSD licensed.
-# Modules you write using this snippet, which is embedded dynamically by Ansible
-# still belong to the author of the module, and may assign their own license
-# to the complete work.
-#
-# Copyright (c), Simon Dodsley <simon@purestorage.com>,2021
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without modification,
-# are permitted provided that the following conditions are met:
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above copyright notice,
-# this list of conditions and the following disclaimer in the documentation
-# and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# 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.
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-try:
- import fusion
-except ImportError:
- pass
-
-from os import environ
-from urllib.parse import urljoin
-import platform
-
-TOKEN_EXCHANGE_URL = "https://api.pure1.purestorage.com/oauth2/1.0/token"
-VERSION = 1.0
-USER_AGENT_BASE = "Ansible"
-
-PARAM_ISSUER_ID = "issuer_id"
-PARAM_PRIVATE_KEY_FILE = "private_key_file"
-PARAM_PRIVATE_KEY_PASSWORD = "private_key_password"
-PARAM_ACCESS_TOKEN = "access_token"
-ENV_ISSUER_ID = "FUSION_ISSUER_ID"
-ENV_API_HOST = "FUSION_API_HOST"
-ENV_PRIVATE_KEY_FILE = "FUSION_PRIVATE_KEY_FILE"
-ENV_TOKEN_ENDPOINT = "FUSION_TOKEN_ENDPOINT"
-ENV_ACCESS_TOKEN = "FUSION_ACCESS_TOKEN"
-
-# will be deprecated in 2.0.0
-PARAM_APP_ID = "app_id" # replaced by PARAM_ISSUER_ID
-PARAM_KEY_FILE = "key_file" # replaced by PARAM_PRIVATE_KEY_FILE
-ENV_APP_ID = "FUSION_APP_ID" # replaced by ENV_ISSUER_ID
-ENV_HOST = "FUSION_HOST" # replaced by ENV_API_HOST
-DEP_VER = "2.0.0"
-BASE_PATH = "/api/1.1"
-
-
-def _env_deprecation_warning(module, old_env, new_env, vers):
- if old_env in environ:
- if new_env in environ:
- module.warn(
- f"{old_env} env variable is ignored because {new_env} is specified."
- f" {old_env} env variable is deprecated and will be removed in version {vers}"
- f" Please use {new_env} env variable only."
- )
- else:
- module.warn(
- f"{old_env} env variable is deprecated and will be removed in version {vers}"
- f" Please use {new_env} env variable instead."
- )
-
-
-def _param_deprecation_warning(module, old_param, new_param, vers):
- if old_param in module.params:
- module.warn(
- f"{old_param} parameter is deprecated and will be removed in version {vers}"
- f" Please use {new_param} parameter instead."
- f" Don't use both parameters simultaneously."
- )
-
-
-def get_fusion(module):
- """Return System Object or Fail"""
- # deprecation warnings
- _param_deprecation_warning(module, PARAM_APP_ID, PARAM_ISSUER_ID, DEP_VER)
- _param_deprecation_warning(module, PARAM_KEY_FILE, PARAM_PRIVATE_KEY_FILE, DEP_VER)
- _env_deprecation_warning(module, ENV_APP_ID, ENV_ISSUER_ID, DEP_VER)
- _env_deprecation_warning(module, ENV_HOST, ENV_API_HOST, DEP_VER)
-
- user_agent = "%(base)s %(class)s/%(version)s (%(platform)s)" % {
- "base": USER_AGENT_BASE,
- "class": __name__,
- "version": VERSION,
- "platform": platform.platform(),
- }
-
- issuer_id = module.params[PARAM_ISSUER_ID]
- access_token = module.params[PARAM_ACCESS_TOKEN]
- private_key_file = module.params[PARAM_PRIVATE_KEY_FILE]
- private_key_password = module.params[PARAM_PRIVATE_KEY_PASSWORD]
-
- if private_key_password is not None:
- module.fail_on_missing_params([PARAM_PRIVATE_KEY_FILE])
-
- config = fusion.Configuration()
- if ENV_API_HOST in environ or ENV_HOST in environ:
- host_url = environ.get(ENV_API_HOST, environ.get(ENV_HOST))
- config.host = urljoin(host_url, BASE_PATH)
- config.token_endpoint = environ.get(ENV_TOKEN_ENDPOINT, config.token_endpoint)
-
- if access_token is not None:
- config.access_token = access_token
- elif issuer_id is not None and private_key_file is not None:
- config.issuer_id = issuer_id
- config.private_key_file = private_key_file
- if private_key_password is not None:
- config.private_key_password = private_key_password
- elif ENV_ACCESS_TOKEN in environ:
- config.access_token = environ.get(ENV_ACCESS_TOKEN)
- elif (
- ENV_ISSUER_ID in environ or ENV_APP_ID in environ
- ) and ENV_PRIVATE_KEY_FILE in environ:
- config.issuer_id = environ.get(ENV_ISSUER_ID, environ.get(ENV_APP_ID))
- config.private_key_file = environ.get(ENV_PRIVATE_KEY_FILE)
- else:
- module.fail_json(
- msg=f"You must set either {ENV_ISSUER_ID} and {ENV_PRIVATE_KEY_FILE} or {ENV_ACCESS_TOKEN} environment variables. "
- f"Or module arguments either {PARAM_ISSUER_ID} and {PARAM_PRIVATE_KEY_FILE} or {PARAM_ACCESS_TOKEN}"
- )
-
- try:
- client = fusion.ApiClient(config)
- client.set_default_header("User-Agent", user_agent)
- api_instance = fusion.DefaultApi(client)
- api_instance.get_version()
- except Exception as err:
- module.fail_json(msg="Fusion authentication failed: {0}".format(err))
-
- return client
-
-
-def fusion_argument_spec():
- """Return standard base dictionary used for the argument_spec argument in AnsibleModule"""
-
- return {
- PARAM_ISSUER_ID: {
- "no_log": True,
- "aliases": [PARAM_APP_ID],
- "deprecated_aliases": [
- {
- "name": PARAM_APP_ID,
- "version": DEP_VER,
- "collection_name": "purefusion.fusion",
- }
- ],
- },
- PARAM_PRIVATE_KEY_FILE: {
- "no_log": False,
- "aliases": [PARAM_KEY_FILE],
- "deprecated_aliases": [
- {
- "name": PARAM_KEY_FILE,
- "version": DEP_VER,
- "collection_name": "purefusion.fusion",
- }
- ],
- },
- PARAM_PRIVATE_KEY_PASSWORD: {
- "no_log": True,
- },
- PARAM_ACCESS_TOKEN: {
- "no_log": True,
- },
- }
diff --git a/ansible_collections/purestorage/fusion/plugins/module_utils/getters.py b/ansible_collections/purestorage/fusion/plugins/module_utils/getters.py
deleted file mode 100644
index 535de76ba..000000000
--- a/ansible_collections/purestorage/fusion/plugins/module_utils/getters.py
+++ /dev/null
@@ -1,99 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# (c) 2023, Daniel Turecek (dturecek@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-try:
- import fusion as purefusion
-except ImportError:
- pass
-
-
-def get_array(module, fusion, array_name=None):
- """Return Array or None"""
- array_api_instance = purefusion.ArraysApi(fusion)
- try:
- if array_name is None:
- array_name = module.params["array"]
-
- return array_api_instance.get_array(
- array_name=array_name,
- availability_zone_name=module.params["availability_zone"],
- region_name=module.params["region"],
- )
- except purefusion.rest.ApiException:
- return None
-
-
-def get_az(module, fusion, availability_zone_name=None):
- """Get Availability Zone or None"""
- az_api_instance = purefusion.AvailabilityZonesApi(fusion)
- try:
- if availability_zone_name is None:
- availability_zone_name = module.params["availability_zone"]
-
- return az_api_instance.get_availability_zone(
- region_name=module.params["region"],
- availability_zone_name=availability_zone_name,
- )
- except purefusion.rest.ApiException:
- return None
-
-
-def get_region(module, fusion, region_name=None):
- """Get Region or None"""
- region_api_instance = purefusion.RegionsApi(fusion)
- try:
- if region_name is None:
- region_name = module.params["region"]
-
- return region_api_instance.get_region(
- region_name=region_name,
- )
- except purefusion.rest.ApiException:
- return None
-
-
-def get_ss(module, fusion, storage_service_name=None):
- """Return Storage Service or None"""
- ss_api_instance = purefusion.StorageServicesApi(fusion)
- try:
- if storage_service_name is None:
- storage_service_name = module.params["storage_service"]
-
- return ss_api_instance.get_storage_service(
- storage_service_name=storage_service_name
- )
- except purefusion.rest.ApiException:
- return None
-
-
-def get_tenant(module, fusion, tenant_name=None):
- """Return Tenant or None"""
- api_instance = purefusion.TenantsApi(fusion)
- try:
- if tenant_name is None:
- tenant_name = module.params["tenant"]
-
- return api_instance.get_tenant(tenant_name=tenant_name)
- except purefusion.rest.ApiException:
- return None
-
-
-def get_ts(module, fusion, tenant_space_name=None):
- """Tenant Space or None"""
- ts_api_instance = purefusion.TenantSpacesApi(fusion)
- try:
- if tenant_space_name is None:
- tenant_space_name = module.params["tenant_space"]
-
- return ts_api_instance.get_tenant_space(
- tenant_name=module.params["tenant"],
- tenant_space_name=tenant_space_name,
- )
- except purefusion.rest.ApiException:
- return None
diff --git a/ansible_collections/purestorage/fusion/plugins/module_utils/networking.py b/ansible_collections/purestorage/fusion/plugins/module_utils/networking.py
deleted file mode 100644
index a00d8200a..000000000
--- a/ansible_collections/purestorage/fusion/plugins/module_utils/networking.py
+++ /dev/null
@@ -1,76 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# (c) 2023, Jan Kodera (jkodera@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-import ipaddress
-
-# while regexes are hard to maintain, they are used anyways for few reasons:
-# a) REST backend accepts fairly restricted input and we need to match that input instead of all
-# the esoteric extra forms various packages are usually capable of parsing (like dotted-decimal
-# subnet masks, octal octets, hexadecimal octets, zero-extended addresses etc.)
-# b) manually written parsing routines are usually complex to write, verify and think about
-import re
-
-# IPv4 octet regex part, matches only simple decimal 0-255 without leading zeroes
-_octet = (
- "((?:[0-9])|" # matches 0-9
- "(?:[1-9][0-9])|" # matches 10-99
- "(?:1[0-9][0-9])|" # matches 100-199
- "(?:2[0-4][0-9])|" # matches 200-249
- "(?:25[0-5]))" # matches 250-255
-)
-
-# IPv4 subnet mask regex part, matches decimal 8-32
-_subnet_mask = (
- "((?:[8-9])|" # matches 8-9
- "(?:[1-2][0-9])|" # matches 10-29
- "(?:3[0-2]))" # matches 30-32
-)
-
-# matches IPv4 addresses
-_addr_pattern = re.compile(r"^{octet}\.{octet}\.{octet}\.{octet}$".format(octet=_octet))
-# matches IPv4 networks in CIDR format, i.e. addresses in the form 'a.b.c.d/e'
-_cidr_pattern = re.compile(
- r"^{octet}\.{octet}\.{octet}\.{octet}\/{0}$".format(_subnet_mask, octet=_octet)
-)
-
-
-def is_valid_network(addr):
- """Returns True if `addr` is IPv4 address/submask in bit CIDR notation, False otherwise."""
- match = re.match(_cidr_pattern, addr)
- if match is None:
- return False
- for i in range(4):
- if int(match.group(i + 1)) > 255:
- return False
- mask = int(match.group(5))
- if mask < 8 or mask > 32:
- return False
- return True
-
-
-def is_valid_address(addr):
- """Returns True if `addr` is a valid IPv4 address, False otherwise. Does not support
- octal/hex notations."""
- match = re.match(_addr_pattern, addr)
- if match is None:
- return False
- for i in range(4):
- if int(match.group(i + 1)) > 255:
- return False
- return True
-
-
-def is_address_in_network(addr, network):
- """Returns True if `addr` and `network` are a valid IPv4 address and
- IPv4 network respectively and if `addr` is in `network`, False otherwise."""
- if not is_valid_address(addr) or not is_valid_network(network):
- return False
- parsed_addr = ipaddress.ip_address(addr)
- parsed_net = ipaddress.ip_network(network)
- return parsed_addr in parsed_net
diff --git a/ansible_collections/purestorage/fusion/plugins/module_utils/operations.py b/ansible_collections/purestorage/fusion/plugins/module_utils/operations.py
deleted file mode 100644
index dc80aefe3..000000000
--- a/ansible_collections/purestorage/fusion/plugins/module_utils/operations.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# (c) 2023, Jan Kodera (jkodera@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-import time
-import math
-
-try:
- import fusion as purefusion
- from urllib3.exceptions import HTTPError
-except ImportError:
- pass
-
-from ansible_collections.purestorage.fusion.plugins.module_utils.errors import (
- OperationException,
-)
-
-
-def await_operation(fusion, operation, fail_playbook_if_operation_fails=True):
- """
- Waits for given operation to finish.
- Throws an exception by default if the operation fails.
- """
- op_api = purefusion.OperationsApi(fusion)
- operation_get = None
- while True:
- try:
- operation_get = op_api.get_operation(operation.id)
- if operation_get.status == "Succeeded":
- return operation_get
- if operation_get.status == "Failed":
- if fail_playbook_if_operation_fails:
- raise OperationException(operation_get)
- return operation_get
- except HTTPError as err:
- raise OperationException(operation, http_error=err)
- time.sleep(int(math.ceil(operation_get.retry_in / 1000)))
diff --git a/ansible_collections/purestorage/fusion/plugins/module_utils/parsing.py b/ansible_collections/purestorage/fusion/plugins/module_utils/parsing.py
deleted file mode 100644
index 1bcb8b812..000000000
--- a/ansible_collections/purestorage/fusion/plugins/module_utils/parsing.py
+++ /dev/null
@@ -1,75 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# (c) 2023, Jan Kodera (jkodera@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-import re
-
-__metaclass__ = type
-
-METRIC_SUFFIXES = ["K", "M", "G", "T", "P"]
-
-duration_pattern = re.compile(
- r"^((?P<Y>\d+)Y)?((?P<W>\d+)W)?((?P<D>\d+)D)?(((?P<H>\d+)H)?((?P<M>\d+)M)?)?$"
-)
-duration_transformation = {
- "Y": 365 * 24 * 60,
- "W": 7 * 24 * 60,
- "D": 24 * 60,
- "H": 60,
- "M": 1,
-}
-
-
-def parse_number_with_metric_suffix(module, number, factor=1024):
- """Given a human-readable string (e.g. 2G, 30M, 400),
- return the resolved integer.
- Will call `module.fail_json()` for invalid inputs.
- """
- try:
- stripped_num = number.strip()
- if stripped_num[-1].isdigit():
- return int(stripped_num)
- # has unit prefix
- result = float(stripped_num[:-1])
- suffix = stripped_num[-1].upper()
- factor_count = METRIC_SUFFIXES.index(suffix) + 1
- for _i in range(0, factor_count):
- result = result * float(factor)
- return int(result)
- except Exception:
- module.fail_json(
- msg="'{0}' is not a valid number, use '400', '1K', '2M', ...".format(number)
- )
- return 0
-
-
-def parse_duration(period):
- if period.isdigit():
- return int(period)
-
- match = duration_pattern.match(period.upper())
- if not match or period == "":
- raise ValueError("Invalid format")
-
- durations = {
- "Y": int(match.group("Y")) if match.group("Y") else 0,
- "W": int(match.group("W")) if match.group("W") else 0,
- "D": int(match.group("D")) if match.group("D") else 0,
- "H": int(match.group("H")) if match.group("H") else 0,
- "M": int(match.group("M")) if match.group("M") else 0,
- }
- return sum(value * duration_transformation[key] for key, value in durations.items())
-
-
-def parse_minutes(module, period):
- try:
- return parse_duration(period)
- except ValueError:
- module.fail_json(
- msg=(
- "'{0}' is not a valid time period, use combination of data units (Y,W,D,H,M)"
- "e.g. 4W3D5H, 5D8H5M, 3D, 5W, 1Y5W..."
- ).format(period)
- )
diff --git a/ansible_collections/purestorage/fusion/plugins/module_utils/prerequisites.py b/ansible_collections/purestorage/fusion/plugins/module_utils/prerequisites.py
deleted file mode 100644
index db00a9c6f..000000000
--- a/ansible_collections/purestorage/fusion/plugins/module_utils/prerequisites.py
+++ /dev/null
@@ -1,162 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# (c) 2023, Jan Kodera (jkodera@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-import re
-import importlib
-import importlib.metadata
-
-# This file exists because Ansible currently cannot declare dependencies on Python modules.
-# see https://github.com/ansible/ansible/issues/62733 for more info about lack of req support
-
-#############################
-
-# 'module_name, package_name, version_requirements' triplets
-DEPENDENCIES = [
- ("fusion", "purefusion", ">=1.0.11,<2.0"),
- ("urllib3", "urllib3", None),
-]
-
-#############################
-
-
-def _parse_version(val):
- """
- Parse a package version.
- Takes in either MAJOR.MINOR or MAJOR.MINOR.PATCH form. PATCH
- can have additional suffixes, e.g. '-prerelease', 'a1', ...
-
- :param val: a string representation of the package version
- :returns: tuple of ints (MAJOR, MINOR, PATCH) or None if not parsed
- """
- # regexes for this were really ugly
- try:
- parts = val.split(".")
- if len(parts) < 2 or len(parts) > 3:
- return None
- major = int(parts[0])
- minor = int(parts[1])
- if len(parts) > 2:
- patch = re.match(r"^\d+", parts[2])
- patch = int(patch.group(0))
- else:
- patch = None
- return (major, minor, patch)
- except Exception:
- return None
-
-
-# returns list of tuples [(COMPARATOR, (MAJOR, MINOR, PATCH)),...]
-def _parse_version_requirements(val):
- """
- Parse package requirements.
-
- :param val: a string in the form ">=1.0.11,<2.0"
- :returns: list of tuples in the form [(">=", (1, 0, 11)), ("<", (2, 0, None))] or None if not parsed
- """
- reqs = []
- try:
- parts = val.split(",")
- for part in parts:
- match = re.match(r"\s*(>=|<=|==|=|<|>|!=)\s*([^\s]+)", part)
- op = match.group(1)
- ver = match.group(2)
- ver_tuple = _parse_version(ver)
- if not ver_tuple:
- raise ValueError("invalid version {0}".format(ver))
- reqs.append((op, ver_tuple))
- return reqs
- except Exception as e:
- raise ValueError("invalid version requirement '{0}' {1}".format(val, e))
-
-
-def _compare_version(op, ver, req):
- """
- Compare two versions.
-
- :param op: a string, one of comparators ">=", "<=", "=", "==", ">" or "<"
- :param ver: version tuple in _parse_version() return form
- :param req: version tuple in _parse_version() return form
- :returns: True if ver 'op' req; False otherwise
- """
-
- def _cmp(a, b):
- return (a > b) - (a < b)
-
- major = _cmp(ver[0], req[0])
- minor = _cmp(ver[1], req[1])
- patch = None
- if req[2] is not None:
- patch = _cmp(ver[2] or 0, req[2])
- result = {
- ">=": major > 0 or (major == 0 and (minor > 0 or patch is None or patch >= 0)),
- "<=": major < 0 or (major == 0 and (minor < 0 or patch is None or patch <= 0)),
- ">": major > 0
- or (major == 0 and (minor > 0 or patch is not None and patch > 0)),
- "<": major < 0
- or (major == 0 and (minor < 0 or patch is not None and patch < 0)),
- "=": major == 0 and minor == 0 and (patch is None or patch == 0),
- "==": major == 0 and minor == 0 and (patch is None or patch == 0),
- "!=": major != 0 or minor != 0 or (patch is not None and patch != 0),
- }.get(op)
- return result
-
-
-def _version_satisfied(version, requirements):
- """
- Checks whether version matches given version requirements.
-
- :param version: a string, in input form to _parse_version()
- :param requirements: as string, in input form to _parse_version_requirements()
- :returns: True if 'version' matches 'requirements'; False otherwise
- """
-
- version = _parse_version(version)
- requirements = _parse_version_requirements(requirements)
- for req in requirements:
- if not _compare_version(req[0], version, req[1]):
- return False
- return True
-
-
-# poor helper to work around the fact Ansible is unable to manage python dependencies
-def _check_import(ansible_module, module, package=None, version_requirements=None):
- """
- Tries to import a module and optionally validates its package version.
- Calls AnsibleModule.fail_json() if not satisfied.
-
- :param ansible_module: an AnsibleModule instance
- :param module: a string with module name to try to import
- :param package: a string, package to check version for; must be specified with 'version_requirements'
- :param version_requirements: a string, version requirements for 'package'
- """
- try:
- importlib.import_module(module)
- except ImportError:
- ansible_module.fail_json(
- msg="Error: Python package '{0}' required and missing".format(module)
- )
-
- if package and version_requirements:
- # silently ignore version checks and hope for the best if we can't fetch
- # the package version since we can't know how the user installs packages
- try:
- version = importlib.metadata.version(package)
- if version and not _version_satisfied(version, version_requirements):
- ansible_module.fail_json(
- msg="Error: Python package '{0}' version '{1}' does not satisfy requirements '{2}'".format(
- module, version, version_requirements
- )
- )
- except Exception:
- pass # ignore package loads
-
-
-def check_dependencies(ansible_module):
- for module, package, version_requirements in DEPENDENCIES:
- _check_import(ansible_module, module, package, version_requirements)
diff --git a/ansible_collections/purestorage/fusion/plugins/module_utils/snapshots.py b/ansible_collections/purestorage/fusion/plugins/module_utils/snapshots.py
deleted file mode 100644
index ed34c1c0e..000000000
--- a/ansible_collections/purestorage/fusion/plugins/module_utils/snapshots.py
+++ /dev/null
@@ -1,29 +0,0 @@
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-try:
- import fusion as purefusion
-except ImportError:
- pass
-
-from ansible_collections.purestorage.fusion.plugins.module_utils.operations import (
- await_operation,
-)
-
-
-def delete_snapshot(fusion, snap, snapshots_api):
- patch = purefusion.SnapshotPatch(destroyed=purefusion.NullableBoolean(True))
- op = snapshots_api.update_snapshot(
- body=patch,
- tenant_name=snap.tenant.name,
- tenant_space_name=snap.tenant_space.name,
- snapshot_name=snap.name,
- )
- await_operation(fusion, op)
- op = snapshots_api.delete_snapshot(
- tenant_name=snap.tenant.name,
- tenant_space_name=snap.tenant_space.name,
- snapshot_name=snap.name,
- )
- await_operation(fusion, op)
diff --git a/ansible_collections/purestorage/fusion/plugins/module_utils/startup.py b/ansible_collections/purestorage/fusion/plugins/module_utils/startup.py
deleted file mode 100644
index 55d7f11a2..000000000
--- a/ansible_collections/purestorage/fusion/plugins/module_utils/startup.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# (c) 2023, Jan Kodera (jkodera@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-from ansible_collections.purestorage.fusion.plugins.module_utils.errors import (
- install_fusion_exception_hook,
-)
-
-from ansible_collections.purestorage.fusion.plugins.module_utils.prerequisites import (
- check_dependencies,
-)
-
-from ansible_collections.purestorage.fusion.plugins.module_utils.fusion import (
- get_fusion,
-)
-
-
-def setup_fusion(module):
- check_dependencies(module)
- install_fusion_exception_hook(module)
- return get_fusion(module)
diff --git a/ansible_collections/purestorage/fusion/plugins/modules/fusion_api_client.py b/ansible_collections/purestorage/fusion/plugins/modules/fusion_api_client.py
deleted file mode 100644
index 42254338f..000000000
--- a/ansible_collections/purestorage/fusion/plugins/modules/fusion_api_client.py
+++ /dev/null
@@ -1,140 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# (c) 2022, Simon Dodsley (simon@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-DOCUMENTATION = r"""
----
-module: fusion_api_client
-version_added: '1.0.0'
-short_description: Manage API clients in Pure Storage Fusion
-description:
-- Create or delete an API Client in Pure Storage Fusion.
-author:
-- Pure Storage Ansible Team (@sdodsley) <pure-ansible-team@purestorage.com>
-notes:
-- Supports C(check mode).
-options:
- name:
- description:
- - The name of the client.
- type: str
- required: true
- state:
- description:
- - Define whether the client should exist or not.
- default: present
- choices: [ present, absent ]
- type: str
- public_key:
- description:
- - The API clients PEM formatted (Base64 encoded) RSA public key.
- - Include the C(—–BEGIN PUBLIC KEY—–) and C(—–END PUBLIC KEY—–) lines.
- type: str
- required: true
-extends_documentation_fragment:
-- purestorage.fusion.purestorage.fusion
-"""
-
-EXAMPLES = r"""
-- name: Create new API client foo
- purestorage.fusion.fusion_api_client:
- name: "foo client"
- public_key: "{{lookup('file', 'public_pem_file') }}"
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-"""
-
-RETURN = r"""
-"""
-
-try:
- import fusion as purefusion
-except ImportError:
- pass
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.purestorage.fusion.plugins.module_utils.fusion import (
- fusion_argument_spec,
-)
-from ansible_collections.purestorage.fusion.plugins.module_utils.startup import (
- setup_fusion,
-)
-
-
-def get_client_id(module, fusion):
- """Get API Client ID, or None if not available"""
- id_api_instance = purefusion.IdentityManagerApi(fusion)
- try:
- clients = id_api_instance.list_api_clients()
- for client in clients:
- if (
- client.public_key == module.params["public_key"]
- and client.display_name == module.params["name"]
- ):
- return client.id
- return None
- except purefusion.rest.ApiException:
- return None
-
-
-def delete_client(module, fusion, client_id):
- """Delete API Client"""
- id_api_instance = purefusion.IdentityManagerApi(fusion)
-
- changed = True
- if not module.check_mode:
- id_api_instance.delete_api_client(api_client_id=client_id)
- module.exit_json(changed=changed)
-
-
-def create_client(module, fusion):
- """Create API Client"""
-
- id_api_instance = purefusion.IdentityManagerApi(fusion)
-
- changed = True
- id = None
- if not module.check_mode:
- client = purefusion.APIClientPost(
- public_key=module.params["public_key"],
- display_name=module.params["name"],
- )
- res = id_api_instance.create_api_client(client)
- id = res.id
- module.exit_json(changed=changed, id=id)
-
-
-def main():
- """Main code"""
- argument_spec = fusion_argument_spec()
- argument_spec.update(
- dict(
- name=dict(type="str", required=True),
- public_key=dict(type="str", required=True),
- state=dict(type="str", default="present", choices=["present", "absent"]),
- )
- )
-
- module = AnsibleModule(argument_spec, supports_check_mode=True)
- fusion = setup_fusion(module)
-
- state = module.params["state"]
- client_id = get_client_id(module, fusion)
- if client_id is None and state == "present":
- create_client(module, fusion)
- elif client_id is not None and state == "absent":
- delete_client(module, fusion, client_id)
- if client_id is not None:
- module.exit_json(changed=False, id=client_id)
-
- module.exit_json(changed=False)
-
-
-if __name__ == "__main__":
- main()
diff --git a/ansible_collections/purestorage/fusion/plugins/modules/fusion_array.py b/ansible_collections/purestorage/fusion/plugins/modules/fusion_array.py
deleted file mode 100644
index ec94d616f..000000000
--- a/ansible_collections/purestorage/fusion/plugins/modules/fusion_array.py
+++ /dev/null
@@ -1,281 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# (c) 2022, Simon Dodsley (simon@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-DOCUMENTATION = r"""
----
-module: fusion_array
-version_added: '1.0.0'
-short_description: Manage arrays in Pure Storage Fusion
-description:
-- Create or delete an array in Pure Storage Fusion.
-author:
-- Pure Storage Ansible Team (@sdodsley) <pure-ansible-team@purestorage.com>
-notes:
-- Supports C(check mode).
-options:
- name:
- description:
- - The name of the array.
- type: str
- required: true
- state:
- description:
- - Define whether the array should exist or not.
- default: present
- choices: [ present, absent ]
- type: str
- display_name:
- description:
- - The human name of the array.
- - If not provided, defaults to I(name).
- type: str
- region:
- description:
- - The region the AZ is in.
- type: str
- required: true
- availability_zone:
- aliases: [ az ]
- description:
- - The availability zone the array is located in.
- type: str
- required: true
- hardware_type:
- description:
- - Hardware type to which the storage class applies.
- choices: [ flash-array-x, flash-array-c, flash-array-x-optane, flash-array-xl ]
- type: str
- host_name:
- description:
- - Management IP address of the array, or FQDN.
- type: str
- appliance_id:
- description:
- - Appliance ID of the array.
- type: str
- apartment_id:
- description:
- - The Apartment ID of the Array.
- type: str
- maintenance_mode:
- description:
- - "Switch the array into maintenance mode or back.
- Array in maintenance mode can have placement groups migrated out but not in.
- Intended use cases are for example safe decommissioning or to prevent use
- of an array that has not yet been fully configured."
- type: bool
- unavailable_mode:
- description:
- - "Switch the array into unavailable mode or back.
- Fusion tries to exclude unavailable arrays from virtually any operation it
- can. This is to prevent stalling operations in case of e.g. a networking
- failure. As of the moment arrays have to be marked unavailable manually."
- type: bool
-extends_documentation_fragment:
-- purestorage.fusion.purestorage.fusion
-"""
-
-EXAMPLES = r"""
-- name: Create new array foo
- purestorage.fusion.fusion_array:
- name: foo
- az: zone_1
- region: region1
- hardware_type: flash-array-x
- host_name: foo_array
- display_name: "foo array"
- appliance_id: 1227571-198887878-35016350232000707
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-"""
-
-RETURN = r"""
-"""
-
-try:
- import fusion as purefusion
-except ImportError:
- pass
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.purestorage.fusion.plugins.module_utils.fusion import (
- fusion_argument_spec,
-)
-
-from ansible_collections.purestorage.fusion.plugins.module_utils import getters
-from ansible_collections.purestorage.fusion.plugins.module_utils.operations import (
- await_operation,
-)
-from ansible_collections.purestorage.fusion.plugins.module_utils.startup import (
- setup_fusion,
-)
-
-
-def get_array(module, fusion):
- """Return Array or None"""
- return getters.get_array(module, fusion, array_name=module.params["name"])
-
-
-def create_array(module, fusion):
- """Create Array"""
-
- array_api_instance = purefusion.ArraysApi(fusion)
- id = None
-
- if not module.check_mode:
- if not module.params["display_name"]:
- display_name = module.params["name"]
- else:
- display_name = module.params["display_name"]
- array = purefusion.ArrayPost(
- hardware_type=module.params["hardware_type"],
- display_name=display_name,
- host_name=module.params["host_name"],
- name=module.params["name"],
- appliance_id=module.params["appliance_id"],
- apartment_id=module.params["apartment_id"],
- )
- res = array_api_instance.create_array(
- array,
- availability_zone_name=module.params["availability_zone"],
- region_name=module.params["region"],
- )
- res_op = await_operation(fusion, res)
- id = res_op.result.resource.id
-
- return True, id
-
-
-def update_array(module, fusion):
- """Update Array"""
- array = get_array(module, fusion)
- patches = []
- if (
- module.params["display_name"]
- and module.params["display_name"] != array.display_name
- ):
- patch = purefusion.ArrayPatch(
- display_name=purefusion.NullableString(module.params["display_name"]),
- )
- patches.append(patch)
-
- if module.params["host_name"] and module.params["host_name"] != array.host_name:
- patch = purefusion.ArrayPatch(
- host_name=purefusion.NullableString(module.params["host_name"])
- )
- patches.append(patch)
-
- if (
- module.params["maintenance_mode"] is not None
- and module.params["maintenance_mode"] != array.maintenance_mode
- ):
- patch = purefusion.ArrayPatch(
- maintenance_mode=purefusion.NullableBoolean(
- module.params["maintenance_mode"]
- )
- )
- patches.append(patch)
- if (
- module.params["unavailable_mode"] is not None
- and module.params["unavailable_mode"] != array.unavailable_mode
- ):
- patch = purefusion.ArrayPatch(
- unavailable_mode=purefusion.NullableBoolean(
- module.params["unavailable_mode"]
- )
- )
- patches.append(patch)
-
- if not module.check_mode:
- array_api_instance = purefusion.ArraysApi(fusion)
- for patch in patches:
- op = array_api_instance.update_array(
- patch,
- availability_zone_name=module.params["availability_zone"],
- region_name=module.params["region"],
- array_name=module.params["name"],
- )
- await_operation(fusion, op)
-
- changed = len(patches) != 0
- return changed
-
-
-def delete_array(module, fusion):
- """Delete Array - not currently available"""
- array_api_instance = purefusion.ArraysApi(fusion)
- if not module.check_mode:
- res = array_api_instance.delete_array(
- region_name=module.params["region"],
- availability_zone_name=module.params["availability_zone"],
- array_name=module.params["name"],
- )
- await_operation(fusion, res)
- return True
-
-
-def main():
- """Main code"""
- argument_spec = fusion_argument_spec()
- argument_spec.update(
- dict(
- name=dict(type="str", required=True),
- availability_zone=dict(type="str", required=True, aliases=["az"]),
- display_name=dict(type="str"),
- region=dict(type="str", required=True),
- apartment_id=dict(type="str"),
- appliance_id=dict(type="str"),
- host_name=dict(type="str"),
- hardware_type=dict(
- type="str",
- choices=[
- "flash-array-x",
- "flash-array-c",
- "flash-array-x-optane",
- "flash-array-xl",
- ],
- ),
- maintenance_mode=dict(type="bool"),
- unavailable_mode=dict(type="bool"),
- state=dict(type="str", default="present", choices=["present", "absent"]),
- )
- )
-
- module = AnsibleModule(argument_spec, supports_check_mode=True)
- fusion = setup_fusion(module)
-
- state = module.params["state"]
- array = get_array(module, fusion)
-
- changed = False
- id = None
- if array is not None:
- id = array.id
-
- if not array and state == "present":
- module.fail_on_missing_params(["hardware_type", "host_name", "appliance_id"])
- changed, id = create_array(module, fusion)
- update_array(
- module, fusion
- ) # update is run to set properties which cannot be set on creation and instead use defaults
- elif array and state == "present":
- changed = update_array(module, fusion)
- elif array and state == "absent":
- changed = changed | delete_array(module, fusion)
- module.exit_json(changed=changed)
-
- if id is not None:
- module.exit_json(changed=changed, id=id)
-
- module.exit_json(changed=changed)
-
-
-if __name__ == "__main__":
- main()
diff --git a/ansible_collections/purestorage/fusion/plugins/modules/fusion_az.py b/ansible_collections/purestorage/fusion/plugins/modules/fusion_az.py
deleted file mode 100644
index b4a493861..000000000
--- a/ansible_collections/purestorage/fusion/plugins/modules/fusion_az.py
+++ /dev/null
@@ -1,162 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# (c) 2022, Simon Dodsley (simon@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-DOCUMENTATION = r"""
----
-module: fusion_az
-version_added: '1.0.0'
-short_description: Create Availability Zones in Pure Storage Fusion
-description:
-- Manage an Availability Zone in Pure Storage Fusion.
-author:
-- Pure Storage Ansible Team (@sdodsley) <pure-ansible-team@purestorage.com>
-notes:
-- Supports C(check mode).
-options:
- name:
- description:
- - The name of the Availability Zone.
- type: str
- required: true
- state:
- description:
- - Define whether the Availability Zone should exist or not.
- default: present
- choices: [ present, absent ]
- type: str
- display_name:
- description:
- - The human name of the Availability Zone.
- - If not provided, defaults to I(name).
- type: str
- region:
- description:
- - Region within which the AZ is created.
- type: str
- required: true
-extends_documentation_fragment:
-- purestorage.fusion.purestorage.fusion
-"""
-
-EXAMPLES = r"""
-- name: Create new AZ foo
- purestorage.fusion.fusion_az:
- name: foo
- display_name: "foo AZ"
- region: region1
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-
-- name: Delete AZ foo
- purestorage.fusion.fusion_az:
- name: foo
- state: absent
- region: region1
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-"""
-
-RETURN = r"""
-"""
-
-try:
- import fusion as purefusion
-except ImportError:
- pass
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.purestorage.fusion.plugins.module_utils.fusion import (
- fusion_argument_spec,
-)
-
-from ansible_collections.purestorage.fusion.plugins.module_utils import getters
-from ansible_collections.purestorage.fusion.plugins.module_utils.operations import (
- await_operation,
-)
-from ansible_collections.purestorage.fusion.plugins.module_utils.startup import (
- setup_fusion,
-)
-
-
-def get_az(module, fusion):
- """Get Availability Zone or None"""
- return getters.get_az(module, fusion, availability_zone_name=module.params["name"])
-
-
-def delete_az(module, fusion):
- """Delete Availability Zone"""
-
- az_api_instance = purefusion.AvailabilityZonesApi(fusion)
-
- changed = True
- if not module.check_mode:
- op = az_api_instance.delete_availability_zone(
- region_name=module.params["region"],
- availability_zone_name=module.params["name"],
- )
- await_operation(fusion, op)
-
- module.exit_json(changed=changed)
-
-
-def create_az(module, fusion):
- """Create Availability Zone"""
-
- az_api_instance = purefusion.AvailabilityZonesApi(fusion)
-
- changed = True
- id = None
- if not module.check_mode:
- if not module.params["display_name"]:
- display_name = module.params["name"]
- else:
- display_name = module.params["display_name"]
-
- azone = purefusion.AvailabilityZonePost(
- name=module.params["name"],
- display_name=display_name,
- )
- op = az_api_instance.create_availability_zone(
- azone, region_name=module.params["region"]
- )
- res_op = await_operation(fusion, op)
- id = res_op.result.resource.id
-
- module.exit_json(changed=changed, id=id)
-
-
-def main():
- """Main code"""
- argument_spec = fusion_argument_spec()
- argument_spec.update(
- dict(
- name=dict(type="str", required=True),
- display_name=dict(type="str"),
- region=dict(type="str", required=True),
- state=dict(type="str", default="present", choices=["present", "absent"]),
- )
- )
-
- module = AnsibleModule(argument_spec, supports_check_mode=True)
- fusion = setup_fusion(module)
-
- state = module.params["state"]
- azone = get_az(module, fusion)
-
- if not azone and state == "present":
- create_az(module, fusion)
- elif azone and state == "absent":
- delete_az(module, fusion)
-
- module.exit_json(changed=False)
-
-
-if __name__ == "__main__":
- main()
diff --git a/ansible_collections/purestorage/fusion/plugins/modules/fusion_hap.py b/ansible_collections/purestorage/fusion/plugins/modules/fusion_hap.py
deleted file mode 100644
index c4df0af49..000000000
--- a/ansible_collections/purestorage/fusion/plugins/modules/fusion_hap.py
+++ /dev/null
@@ -1,314 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# Copyright: (c) 2022, Simon Dodsley (simon@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-DOCUMENTATION = r"""
----
-module: fusion_hap
-version_added: '1.0.0'
-short_description: Manage host access policies in Pure Storage Fusion
-description:
-- Create or delete host access policies in Pure Storage Fusion.
-author:
-- Pure Storage Ansible Team (@sdodsley) <pure-ansible-team@purestorage.com>
-notes:
-- Supports C(check mode).
-- Setting passwords is not an idempotent action.
-- Only iSCSI transport is currently supported.
-- iSCSI CHAP is not yet supported.
-options:
- name:
- description:
- - The name of the host access policy.
- type: str
- required: true
- display_name:
- description:
- - The human name of the host access policy.
- type: str
- state:
- description:
- - Define whether the host access policy should exist or not.
- - When removing host access policy all connected volumes must
- have been previously disconnected.
- type: str
- default: present
- choices: [ absent, present ]
- wwns:
- type: list
- elements: str
- description:
- - CURRENTLY NOT SUPPORTED.
- - List of wwns for the host access policy.
- iqn:
- type: str
- description:
- - IQN for the host access policy.
- nqn:
- type: str
- description:
- - CURRENTLY NOT SUPPORTED.
- - NQN for the host access policy.
- personality:
- type: str
- description:
- - Define which operating system the host is.
- default: linux
- choices: ['linux', 'windows', 'hpux', 'vms', 'aix', 'esxi', 'solaris', 'hitachi-vsp', 'oracle-vm-server']
- target_user:
- type: str
- description:
- - CURRENTLY NOT SUPPORTED.
- - Sets the target user name for CHAP authentication.
- - Required with I(target_password).
- - To clear the username/password pair use C(clear) as the password.
- target_password:
- type: str
- description:
- - CURRENTLY NOT SUPPORTED.
- - Sets the target password for CHAP authentication.
- - Password length between 12 and 255 characters.
- - To clear the username/password pair use C(clear) as the password.
- host_user:
- type: str
- description:
- - CURRENTLY NOT SUPPORTED.
- - Sets the host user name for CHAP authentication.
- - Required with I(host_password).
- - To clear the username/password pair use C(clear) as the password.
- host_password:
- type: str
- description:
- - CURRENTLY NOT SUPPORTED.
- - Sets the host password for CHAP authentication.
- - Password length between 12 and 255 characters.
- - To clear the username/password pair use C(clear) as the password.
-extends_documentation_fragment:
-- purestorage.fusion.purestorage.fusion
-"""
-
-EXAMPLES = r"""
-- name: Create new AIX host access policy
- purestorage.fusion.fusion_hap:
- name: foo
- personality: aix
- iqn: "iqn.2005-03.com.RedHat:linux-host1"
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-
-- name: Delete host access policy
- purestorage.fusion.fusion_hap:
- name: foo
- state: absent
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-"""
-
-RETURN = r"""
-"""
-
-try:
- import fusion as purefusion
-except ImportError:
- pass
-
-import re
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.purestorage.fusion.plugins.module_utils.fusion import (
- fusion_argument_spec,
-)
-
-from ansible_collections.purestorage.fusion.plugins.module_utils.startup import (
- setup_fusion,
-)
-from ansible_collections.purestorage.fusion.plugins.module_utils.operations import (
- await_operation,
-)
-
-
-def _check_iqn(module, fusion):
- hap_api_instance = purefusion.HostAccessPoliciesApi(fusion)
- hosts = hap_api_instance.list_host_access_policies().items
- for host in hosts:
- if host.iqn == module.params["iqn"] and host.name != module.params["name"]:
- module.fail_json(
- msg="Supplied IQN {0} already used by host access policy {1}".format(
- module.params["iqn"], host.name
- )
- )
-
-
-def get_host(module, fusion):
- """Return host or None"""
- hap_api_instance = purefusion.HostAccessPoliciesApi(fusion)
- try:
- return hap_api_instance.get_host_access_policy(
- host_access_policy_name=module.params["name"]
- )
- except purefusion.rest.ApiException:
- return None
-
-
-def create_hap(module, fusion):
- """Create a new host access policy"""
- hap_api_instance = purefusion.HostAccessPoliciesApi(fusion)
- changed = True
- if not module.check_mode:
- display_name = module.params["display_name"] or module.params["name"]
-
- op = hap_api_instance.create_host_access_policy(
- purefusion.HostAccessPoliciesPost(
- iqn=module.params["iqn"],
- personality=module.params["personality"],
- name=module.params["name"],
- display_name=display_name,
- )
- )
- res_op = await_operation(fusion, op)
- id = res_op.result.resource.id
-
- module.exit_json(changed=changed, id=id)
-
-
-def delete_hap(module, fusion):
- """Delete a Host Access Policy"""
- hap_api_instance = purefusion.HostAccessPoliciesApi(fusion)
- changed = True
- if not module.check_mode:
- op = hap_api_instance.delete_host_access_policy(
- host_access_policy_name=module.params["name"]
- )
- await_operation(fusion, op)
- module.exit_json(changed=changed)
-
-
-def main():
- argument_spec = fusion_argument_spec()
- argument_spec.update(
- dict(
- name=dict(type="str", required=True),
- state=dict(type="str", default="present", choices=["absent", "present"]),
- nqn=dict(
- type="str",
- removed_in_version="2.0.0",
- removed_from_collection="purestorage.fusion",
- ),
- iqn=dict(type="str"),
- wwns=dict(
- type="list",
- elements="str",
- removed_in_version="2.0.0",
- removed_from_collection="purestorage.fusion",
- ),
- host_password=dict(
- type="str",
- removed_in_version="2.0.0",
- removed_from_collection="purestorage.fusion",
- no_log=True,
- ),
- host_user=dict(
- type="str",
- removed_in_version="2.0.0",
- removed_from_collection="purestorage.fusion",
- ),
- target_password=dict(
- type="str",
- removed_in_version="2.0.0",
- removed_from_collection="purestorage.fusion",
- no_log=True,
- ),
- target_user=dict(
- type="str",
- removed_in_version="2.0.0",
- removed_from_collection="purestorage.fusion",
- ),
- display_name=dict(type="str"),
- personality=dict(
- type="str",
- default="linux",
- choices=[
- "linux",
- "windows",
- "hpux",
- "vms",
- "aix",
- "esxi",
- "solaris",
- "hitachi-vsp",
- "oracle-vm-server",
- ],
- ),
- )
- )
-
- required_if = [["state", "present", ["personality", "iqn"]]]
-
- module = AnsibleModule(
- argument_spec,
- supports_check_mode=True,
- required_if=required_if,
- )
- fusion = setup_fusion(module)
-
- if module.params["nqn"]:
- module.warn(
- "`nqn` parameter is deprecated and will be removed in version 2.0.0"
- )
- if module.params["wwns"]:
- module.warn(
- "`wwns` parameter is deprecated and will be removed in version 2.0.0"
- )
- if module.params["host_password"]:
- module.warn(
- "`host_password` parameter is deprecated and will be removed in version 2.0.0"
- )
- if module.params["host_user"]:
- module.warn(
- "`host_user` parameter is deprecated and will be removed in version 2.0.0"
- )
- if module.params["target_password"]:
- module.warn(
- "`target_password` parameter is deprecated and will be removed in version 2.0.0"
- )
- if module.params["target_user"]:
- module.warn(
- "`target_user` parameter is deprecated and will be removed in version 2.0.0"
- )
-
- hap_pattern = re.compile("^[a-zA-Z0-9]([a-zA-Z0-9-_]{0,61}[a-zA-Z0-9])?$")
- iqn_pattern = re.compile(
- r"^iqn\.\d{4}-\d{2}((?<!-)\.(?!-)[a-zA-Z0-9\-]+){1,63}(?<!-)(?<!\.)(:(?!:)[^,\s'\"]+)?$"
- )
-
- if not hap_pattern.match(module.params["name"]):
- module.fail_json(
- msg="Host Access Policy {0} does not conform to naming convention".format(
- module.params["name"]
- )
- )
-
- if module.params["iqn"] is not None and not iqn_pattern.match(module.params["iqn"]):
- module.fail_json(
- msg="IQN {0} is not a valid iSCSI IQN".format(module.params["name"])
- )
-
- state = module.params["state"]
- host = get_host(module, fusion)
- _check_iqn(module, fusion)
-
- if host is None and state == "present":
- create_hap(module, fusion)
- elif host is not None and state == "absent":
- delete_hap(module, fusion)
-
- module.exit_json(changed=False)
-
-
-if __name__ == "__main__":
- main()
diff --git a/ansible_collections/purestorage/fusion/plugins/modules/fusion_hw.py b/ansible_collections/purestorage/fusion/plugins/modules/fusion_hw.py
deleted file mode 100644
index 31d313e9d..000000000
--- a/ansible_collections/purestorage/fusion/plugins/modules/fusion_hw.py
+++ /dev/null
@@ -1,88 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# (c) 2022, Simon Dodsley (simon@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-DOCUMENTATION = r"""
----
-module: fusion_hw
-version_added: '1.0.0'
-deprecated:
- removed_at_date: "2023-08-09"
- why: Hardware type cannot be modified in Pure Storage Fusion
- alternative: there's no alternative as this functionality has never worked before
-short_description: Create hardware types in Pure Storage Fusion
-description:
-- Create a hardware type in Pure Storage Fusion.
-author:
-- Pure Storage Ansible Team (@sdodsley) <pure-ansible-team@purestorage.com>
-notes:
-- Supports C(check mode).
-options:
- name:
- description:
- - The name of the hardware type.
- type: str
- state:
- description:
- - Define whether the hardware type should exist or not.
- - Currently there is no mechanism to delete a hardware type.
- default: present
- choices: [ present ]
- type: str
- display_name:
- description:
- - The human name of the hardware type.
- - If not provided, defaults to I(name).
- type: str
- media_type:
- description:
- - Volume size limit in M, G, T or P units.
- type: str
- array_type:
- description:
- - The array type for the hardware type.
- choices: [ FA//X, FA//C ]
- type: str
-extends_documentation_fragment:
-- purestorage.fusion.purestorage.fusion
-"""
-
-# this module does nothing, thus no example is provided
-EXAMPLES = r"""
-"""
-
-RETURN = r"""
-"""
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.purestorage.fusion.plugins.module_utils.fusion import (
- fusion_argument_spec,
-)
-
-
-def main():
- """Main code"""
- argument_spec = fusion_argument_spec()
- argument_spec.update(
- dict(
- name=dict(type="str"),
- display_name=dict(type="str"),
- array_type=dict(type="str", choices=["FA//X", "FA//C"]),
- media_type=dict(type="str"),
- state=dict(type="str", default="present", choices=["present"]),
- )
- )
-
- module = AnsibleModule(argument_spec, supports_check_mode=True)
-
- module.exit_json(changed=False)
-
-
-if __name__ == "__main__":
- main()
diff --git a/ansible_collections/purestorage/fusion/plugins/modules/fusion_info.py b/ansible_collections/purestorage/fusion/plugins/modules/fusion_info.py
deleted file mode 100644
index be019d3d2..000000000
--- a/ansible_collections/purestorage/fusion/plugins/modules/fusion_info.py
+++ /dev/null
@@ -1,1130 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# (c) 2021, Simon Dodsley (simon@purestorage.com), Andrej Pajtas (apajtas@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-DOCUMENTATION = r"""
----
-module: fusion_info
-version_added: '1.0.0'
-short_description: Collect information from Pure Fusion
-description:
- - Collect information from a Pure Fusion environment.
- - By default, the module will collect basic
- information including counts for arrays, availability_zones, volumes, snapshots
- . Fleet capacity and data reduction rates are also provided.
- - Additional information can be collected based on the configured set of arguments.
-author:
- - Pure Storage ansible Team (@sdodsley) <pure-ansible-team@purestorage.com>
-notes:
-- Supports C(check mode).
-options:
- gather_subset:
- description:
- - When supplied, this argument will define the information to be collected.
- Possible values for this include all, minimum, roles, users, arrays, hardware_types,
- volumes, host_access_policies, storage_classes, protection_policies, placement_groups,
- network_interfaces, availability_zones, network_interface_groups, storage_endpoints,
- snapshots, regions, storage_services, tenants, tenant_spaces, network_interface_groups and api_clients.
- type: list
- elements: str
- required: false
- default: minimum
-extends_documentation_fragment:
- - purestorage.fusion.purestorage.fusion
-"""
-
-EXAMPLES = r"""
-- name: Collect default set of information
- purestorage.fusion.fusion_info:
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
- register: fusion_info
-
-- name: Show default information
- ansible.builtin.debug:
- msg: "{{ fusion_info['fusion_info']['default'] }}"
-
-- name: Collect all information
- purestorage.fusion.fusion_info:
- gather_subset:
- - all
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-
-- name: Show all information
- ansible.builtin.debug:
- msg: "{{ fusion_info['fusion_info'] }}"
-"""
-
-RETURN = r"""
-fusion_info:
- description: Returns the information collected from Fusion
- returned: always
- type: dict
-"""
-
-try:
- import fusion as purefusion
-except ImportError:
- pass
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.purestorage.fusion.plugins.module_utils.fusion import (
- fusion_argument_spec,
-)
-from ansible_collections.purestorage.fusion.plugins.module_utils.startup import (
- setup_fusion,
-)
-import time
-import http
-
-
-def _convert_microseconds(micros):
- seconds = (micros / 1000) % 60
- minutes = (micros / (1000 * 60)) % 60
- hours = (micros / (1000 * 60 * 60)) % 24
- return seconds, minutes, hours
-
-
-def _api_permission_denied_handler(name):
- """Return decorator which catches #403 errors"""
-
- def inner(func):
- def wrapper(module, fusion, *args, **kwargs):
- try:
- return func(module, fusion, *args, **kwargs)
- except purefusion.rest.ApiException as exc:
- if exc.status == http.HTTPStatus.FORBIDDEN:
- module.warn(f"Cannot get [{name} dict], reason: Permission denied")
- return None
- else:
- # other exceptions will be handled by our exception hook
- raise exc
-
- return wrapper
-
- return inner
-
-
-def generate_default_dict(module, fusion):
- def warning_api_exception(name):
- module.warn(f"Cannot get {name} in [default dict], reason: Permission denied")
-
- def warning_argument_none(name, requirement):
- module.warn(
- f"Cannot get {name} in [default dict], reason: Required argument `{requirement}` not available."
- )
-
- # All values are independent on each other - if getting one value fails, we will show warning and continue.
- # That's also the reason why there's so many nested for loops repeating all over again.
- version = None
- users_num = None
- protection_policies_num = None
- host_access_policies_num = None
- hardware_types_num = None
- storage_services = None
- storage_services_num = None
- tenants = None
- tenants_num = None
- regions = None
- regions_num = None
- roles = None
- roles_num = None
- storage_classes_num = None
- role_assignments_num = None
- tenant_spaces_num = None
- volumes_num = None
- placement_groups_num = None
- snapshots_num = None
- availability_zones_num = None
- arrays_num = None
- network_interfaces_num = None
- network_interface_groups_num = None
- storage_endpoints_num = None
-
- try:
- version = purefusion.DefaultApi(fusion).get_version().version
- except purefusion.rest.ApiException as exc:
- if exc.status == http.HTTPStatus.FORBIDDEN:
- warning_api_exception("API version")
- else:
- # other exceptions will be handled by our exception hook
- raise exc
-
- try:
- users_num = len(purefusion.IdentityManagerApi(fusion).list_users())
- except purefusion.rest.ApiException as exc:
- if exc.status == http.HTTPStatus.FORBIDDEN:
- warning_api_exception("Users")
- else:
- # other exceptions will be handled by our exception hook
- raise exc
-
- try:
- protection_policies_num = len(
- purefusion.ProtectionPoliciesApi(fusion).list_protection_policies().items
- )
- except purefusion.rest.ApiException as exc:
- if exc.status == http.HTTPStatus.FORBIDDEN:
- warning_api_exception("Protection Policies")
- else:
- # other exceptions will be handled by our exception hook
- raise exc
-
- try:
- host_access_policies_num = len(
- purefusion.HostAccessPoliciesApi(fusion).list_host_access_policies().items
- )
- except purefusion.rest.ApiException as exc:
- if exc.status == http.HTTPStatus.FORBIDDEN:
- warning_api_exception("Host Access Policies")
- else:
- # other exceptions will be handled by our exception hook
- raise exc
-
- try:
- hardware_types_num = len(
- purefusion.HardwareTypesApi(fusion).list_hardware_types().items
- )
- except purefusion.rest.ApiException as exc:
- if exc.status == http.HTTPStatus.FORBIDDEN:
- warning_api_exception("Hardware Types")
- else:
- # other exceptions will be handled by our exception hook
- raise exc
-
- try:
- storage_services = purefusion.StorageServicesApi(fusion).list_storage_services()
- storage_services_num = len(storage_services.items)
- except purefusion.rest.ApiException as exc:
- if exc.status == http.HTTPStatus.FORBIDDEN:
- warning_api_exception("Storage Services")
- else:
- # other exceptions will be handled by our exception hook
- raise exc
-
- try:
- tenants = purefusion.TenantsApi(fusion).list_tenants()
- tenants_num = len(tenants.items)
- except purefusion.rest.ApiException as exc:
- if exc.status == http.HTTPStatus.FORBIDDEN:
- warning_api_exception("Tenants")
- else:
- # other exceptions will be handled by our exception hook
- raise exc
-
- try:
- regions = purefusion.RegionsApi(fusion).list_regions()
- regions_num = len(regions.items)
- except purefusion.rest.ApiException as exc:
- if exc.status == http.HTTPStatus.FORBIDDEN:
- warning_api_exception("Regions")
- else:
- # other exceptions will be handled by our exception hook
- raise exc
-
- try:
- roles = purefusion.RolesApi(fusion).list_roles()
- roles_num = len(roles)
- except purefusion.rest.ApiException as exc:
- if exc.status == http.HTTPStatus.FORBIDDEN:
- warning_api_exception("Roles")
- else:
- # other exceptions will be handled by our exception hook
- raise exc
-
- if storage_services is not None:
- try:
- storage_class_api_instance = purefusion.StorageClassesApi(fusion)
- storage_classes_num = sum(
- len(
- storage_class_api_instance.list_storage_classes(
- storage_service_name=storage_service.name
- ).items
- )
- for storage_service in storage_services.items
- )
- except purefusion.rest.ApiException as exc:
- if exc.status == http.HTTPStatus.FORBIDDEN:
- warning_api_exception("Storage Classes")
- else:
- # other exceptions will be handled by our exception hook
- raise exc
- else:
- warning_argument_none("Storage Classes", "storage_services")
-
- if roles is not None:
- try:
- role_assign_api_instance = purefusion.RoleAssignmentsApi(fusion)
- role_assignments_num = sum(
- len(role_assign_api_instance.list_role_assignments(role_name=role.name))
- for role in roles
- )
- except purefusion.rest.ApiException as exc:
- if exc.status == http.HTTPStatus.FORBIDDEN:
- warning_api_exception("Role Assignments")
- else:
- # other exceptions will be handled by our exception hook
- raise exc
- else:
- warning_argument_none("Role Assignments", "roles")
-
- if tenants is not None:
- tenantspace_api_instance = purefusion.TenantSpacesApi(fusion)
-
- try:
- tenant_spaces_num = sum(
- len(
- tenantspace_api_instance.list_tenant_spaces(
- tenant_name=tenant.name
- ).items
- )
- for tenant in tenants.items
- )
- except purefusion.rest.ApiException as exc:
- if exc.status == http.HTTPStatus.FORBIDDEN:
- warning_api_exception("Tenant Spaces")
- else:
- # other exceptions will be handled by our exception hook
- raise exc
-
- try:
- vol_api_instance = purefusion.VolumesApi(fusion)
- volumes_num = sum(
- len(
- vol_api_instance.list_volumes(
- tenant_name=tenant.name,
- tenant_space_name=tenant_space.name,
- ).items
- )
- for tenant in tenants.items
- for tenant_space in tenantspace_api_instance.list_tenant_spaces(
- tenant_name=tenant.name
- ).items
- )
- except purefusion.rest.ApiException as exc:
- if exc.status == http.HTTPStatus.FORBIDDEN:
- warning_api_exception("Volumes")
- else:
- # other exceptions will be handled by our exception hook
- raise exc
-
- try:
- plgrp_api_instance = purefusion.PlacementGroupsApi(fusion)
- placement_groups_num = sum(
- len(
- plgrp_api_instance.list_placement_groups(
- tenant_name=tenant.name,
- tenant_space_name=tenant_space.name,
- ).items
- )
- for tenant in tenants.items
- for tenant_space in tenantspace_api_instance.list_tenant_spaces(
- tenant_name=tenant.name
- ).items
- )
- except purefusion.rest.ApiException as exc:
- if exc.status == http.HTTPStatus.FORBIDDEN:
- warning_api_exception("Placement Groups")
- else:
- # other exceptions will be handled by our exception hook
- raise exc
-
- try:
- snapshot_api_instance = purefusion.SnapshotsApi(fusion)
- snapshots_num = sum(
- len(
- snapshot_api_instance.list_snapshots(
- tenant_name=tenant.name,
- tenant_space_name=tenant_space.name,
- ).items
- )
- for tenant in tenants.items
- for tenant_space in tenantspace_api_instance.list_tenant_spaces(
- tenant_name=tenant.name
- ).items
- )
- except purefusion.rest.ApiException as exc:
- if exc.status == http.HTTPStatus.FORBIDDEN:
- warning_api_exception("Snapshots")
- else:
- # other exceptions will be handled by our exception hook
- raise exc
- else:
- warning_argument_none("Tenant Spaces", "tenants")
- warning_argument_none("Volumes", "tenants")
- warning_argument_none("Placement Groups", "tenants")
- warning_argument_none("Snapshots", "tenants")
-
- if regions is not None:
- az_api_instance = purefusion.AvailabilityZonesApi(fusion)
-
- try:
- availability_zones_num = sum(
- len(
- az_api_instance.list_availability_zones(
- region_name=region.name
- ).items
- )
- for region in regions.items
- )
- except purefusion.rest.ApiException as exc:
- if exc.status == http.HTTPStatus.FORBIDDEN:
- warning_api_exception("Availability Zones")
- else:
- # other exceptions will be handled by our exception hook
- raise exc
-
- try:
- arrays_api_instance = purefusion.ArraysApi(fusion)
- arrays_num = sum(
- len(
- arrays_api_instance.list_arrays(
- availability_zone_name=availability_zone.name,
- region_name=region.name,
- ).items
- )
- for region in regions.items
- for availability_zone in az_api_instance.list_availability_zones(
- region_name=region.name
- ).items
- )
- except purefusion.rest.ApiException as exc:
- if exc.status == http.HTTPStatus.FORBIDDEN:
- warning_api_exception("Arrays")
- else:
- # other exceptions will be handled by our exception hook
- raise exc
-
- try:
- nig_api_instance = purefusion.NetworkInterfaceGroupsApi(fusion)
- network_interface_groups_num = sum(
- len(
- nig_api_instance.list_network_interface_groups(
- availability_zone_name=availability_zone.name,
- region_name=region.name,
- ).items
- )
- for region in regions.items
- for availability_zone in az_api_instance.list_availability_zones(
- region_name=region.name
- ).items
- )
- except purefusion.rest.ApiException as exc:
- if exc.status == http.HTTPStatus.FORBIDDEN:
- warning_api_exception("Network Interface Groups")
- else:
- # other exceptions will be handled by our exception hook
- raise exc
-
- try:
- send_api_instance = purefusion.StorageEndpointsApi(fusion)
- storage_endpoints_num = sum(
- len(
- send_api_instance.list_storage_endpoints(
- availability_zone_name=availability_zone.name,
- region_name=region.name,
- ).items
- )
- for region in regions.items
- for availability_zone in az_api_instance.list_availability_zones(
- region_name=region.name
- ).items
- )
- except purefusion.rest.ApiException as exc:
- if exc.status == http.HTTPStatus.FORBIDDEN:
- warning_api_exception("Storage Endpoints")
- else:
- # other exceptions will be handled by our exception hook
- raise exc
-
- try:
- nic_api_instance = purefusion.NetworkInterfacesApi(fusion)
- network_interfaces_num = sum(
- len(
- nic_api_instance.list_network_interfaces(
- availability_zone_name=availability_zone.name,
- region_name=region.name,
- array_name=array_detail.name,
- ).items
- )
- for region in regions.items
- for availability_zone in az_api_instance.list_availability_zones(
- region_name=region.name
- ).items
- for array_detail in arrays_api_instance.list_arrays(
- availability_zone_name=availability_zone.name,
- region_name=region.name,
- ).items
- )
- except purefusion.rest.ApiException as exc:
- if exc.status == http.HTTPStatus.FORBIDDEN:
- warning_api_exception("Network Interfaces")
- else:
- # other exceptions will be handled by our exception hook
- raise exc
- else:
- warning_argument_none("Availability Zones", "regions")
- warning_argument_none("Network Interfaces", "regions")
- warning_argument_none("Network Interface Groups", "regions")
- warning_argument_none("Storage Endpoints", "regions")
- warning_argument_none("Arrays", "regions")
-
- return {
- "version": version,
- "users": users_num,
- "protection_policies": protection_policies_num,
- "host_access_policies": host_access_policies_num,
- "hardware_types": hardware_types_num,
- "storage_services": storage_services_num,
- "tenants": tenants_num,
- "regions": regions_num,
- "storage_classes": storage_classes_num,
- "roles": roles_num,
- "role_assignments": role_assignments_num,
- "tenant_spaces": tenant_spaces_num,
- "volumes": volumes_num,
- "placement_groups": placement_groups_num,
- "snapshots": snapshots_num,
- "availability_zones": availability_zones_num,
- "arrays": arrays_num,
- "network_interfaces": network_interfaces_num,
- "network_interface_groups": network_interface_groups_num,
- "storage_endpoints": storage_endpoints_num,
- }
-
-
-@_api_permission_denied_handler("network_interfaces")
-def generate_nics_dict(module, fusion):
- nics_info = {}
- nic_api_instance = purefusion.NetworkInterfacesApi(fusion)
- arrays_api_instance = purefusion.ArraysApi(fusion)
- az_api_instance = purefusion.AvailabilityZonesApi(fusion)
- regions_api_instance = purefusion.RegionsApi(fusion)
- regions = regions_api_instance.list_regions()
- for region in regions.items:
- azs = az_api_instance.list_availability_zones(region_name=region.name)
- for az in azs.items:
- array_details = arrays_api_instance.list_arrays(
- availability_zone_name=az.name,
- region_name=region.name,
- )
- for array_detail in array_details.items:
- array_name = az.name + "/" + array_detail.name
- nics_info[array_name] = {}
- nics = nic_api_instance.list_network_interfaces(
- availability_zone_name=az.name,
- region_name=region.name,
- array_name=array_detail.name,
- )
-
- for nic in nics.items:
- nics_info[array_name][nic.name] = {
- "enabled": nic.enabled,
- "display_name": nic.display_name,
- "interface_type": nic.interface_type,
- "services": nic.services,
- "max_speed": nic.max_speed,
- "vlan": nic.eth.vlan,
- "address": nic.eth.address,
- "mac_address": nic.eth.mac_address,
- "gateway": nic.eth.gateway,
- "mtu": nic.eth.mtu,
- "network_interface_group": nic.network_interface_group.name,
- "availability_zone": nic.availability_zone.name,
- }
- return nics_info
-
-
-@_api_permission_denied_handler("host_access_policies")
-def generate_hap_dict(module, fusion):
- hap_info = {}
- api_instance = purefusion.HostAccessPoliciesApi(fusion)
- hosts = api_instance.list_host_access_policies()
- for host in hosts.items:
- name = host.name
- hap_info[name] = {
- "personality": host.personality,
- "display_name": host.display_name,
- "iqn": host.iqn,
- }
- return hap_info
-
-
-@_api_permission_denied_handler("arrays")
-def generate_array_dict(module, fusion):
- array_info = {}
- array_api_instance = purefusion.ArraysApi(fusion)
- az_api_instance = purefusion.AvailabilityZonesApi(fusion)
- regions_api_instance = purefusion.RegionsApi(fusion)
- regions = regions_api_instance.list_regions()
- for region in regions.items:
- azs = az_api_instance.list_availability_zones(region_name=region.name)
- for az in azs.items:
- arrays = array_api_instance.list_arrays(
- availability_zone_name=az.name,
- region_name=region.name,
- )
- for array in arrays.items:
- array_name = array.name
- array_space = array_api_instance.get_array_space(
- availability_zone_name=az.name,
- array_name=array_name,
- region_name=region.name,
- )
- array_perf = array_api_instance.get_array_performance(
- availability_zone_name=az.name,
- array_name=array_name,
- region_name=region.name,
- )
- array_info[array_name] = {
- "region": region.name,
- "availability_zone": az.name,
- "host_name": array.host_name,
- "maintenance_mode": array.maintenance_mode,
- "unavailable_mode": array.unavailable_mode,
- "display_name": array.display_name,
- "hardware_type": array.hardware_type.name,
- "appliance_id": array.appliance_id,
- "apartment_id": getattr(array, "apartment_id", None),
- "space": {
- "total_physical_space": array_space.total_physical_space,
- },
- "performance": {
- "read_bandwidth": array_perf.read_bandwidth,
- "read_latency_us": array_perf.read_latency_us,
- "reads_per_sec": array_perf.reads_per_sec,
- "write_bandwidth": array_perf.write_bandwidth,
- "write_latency_us": array_perf.write_latency_us,
- "writes_per_sec": array_perf.writes_per_sec,
- },
- }
- return array_info
-
-
-@_api_permission_denied_handler("placement_groups")
-def generate_pg_dict(module, fusion):
- pg_info = {}
- tenant_api_instance = purefusion.TenantsApi(fusion)
- tenantspace_api_instance = purefusion.TenantSpacesApi(fusion)
- pg_api_instance = purefusion.PlacementGroupsApi(fusion)
- tenants = tenant_api_instance.list_tenants()
- for tenant in tenants.items:
- tenant_spaces = tenantspace_api_instance.list_tenant_spaces(
- tenant_name=tenant.name
- ).items
- for tenant_space in tenant_spaces:
- groups = pg_api_instance.list_placement_groups(
- tenant_name=tenant.name,
- tenant_space_name=tenant_space.name,
- )
- for group in groups.items:
- group_name = tenant.name + "/" + tenant_space.name + "/" + group.name
- pg_info[group_name] = {
- "tenant": group.tenant.name,
- "display_name": group.display_name,
- "placement_engine": group.placement_engine,
- "tenant_space": group.tenant_space.name,
- "az": group.availability_zone.name,
- "array": getattr(group.array, "name", None),
- }
- return pg_info
-
-
-@_api_permission_denied_handler("tenant_spaces")
-def generate_ts_dict(module, fusion):
- ts_info = {}
- tenant_api_instance = purefusion.TenantsApi(fusion)
- tenantspace_api_instance = purefusion.TenantSpacesApi(fusion)
- tenants = tenant_api_instance.list_tenants()
- for tenant in tenants.items:
- tenant_spaces = tenantspace_api_instance.list_tenant_spaces(
- tenant_name=tenant.name
- ).items
- for tenant_space in tenant_spaces:
- ts_name = tenant.name + "/" + tenant_space.name
- ts_info[ts_name] = {
- "tenant": tenant.name,
- "display_name": tenant_space.display_name,
- }
- return ts_info
-
-
-@_api_permission_denied_handler("protection_policies")
-def generate_pp_dict(module, fusion):
- pp_info = {}
- api_instance = purefusion.ProtectionPoliciesApi(fusion)
- policies = api_instance.list_protection_policies()
- for policy in policies.items:
- policy_name = policy.name
- pp_info[policy_name] = {
- "objectives": policy.objectives,
- }
- return pp_info
-
-
-@_api_permission_denied_handler("tenants")
-def generate_tenant_dict(module, fusion):
- tenants_api_instance = purefusion.TenantsApi(fusion)
- return {
- tenant.name: {
- "display_name": tenant.display_name,
- }
- for tenant in tenants_api_instance.list_tenants().items
- }
-
-
-@_api_permission_denied_handler("regions")
-def generate_regions_dict(module, fusion):
- regions_api_instance = purefusion.RegionsApi(fusion)
- return {
- region.name: {
- "display_name": region.display_name,
- }
- for region in regions_api_instance.list_regions().items
- }
-
-
-@_api_permission_denied_handler("availability_zones")
-def generate_zones_dict(module, fusion):
- zones_info = {}
- az_api_instance = purefusion.AvailabilityZonesApi(fusion)
- regions_api_instance = purefusion.RegionsApi(fusion)
- regions = regions_api_instance.list_regions()
- for region in regions.items:
- zones = az_api_instance.list_availability_zones(region_name=region.name)
- for zone in zones.items:
- az_name = zone.name
- zones_info[az_name] = {
- "display_name": zone.display_name,
- "region": zone.region.name,
- }
- return zones_info
-
-
-@_api_permission_denied_handler("role_assignments")
-def generate_ras_dict(module, fusion):
- ras_info = {}
- ras_api_instance = purefusion.RoleAssignmentsApi(fusion)
- role_api_instance = purefusion.RolesApi(fusion)
- roles = role_api_instance.list_roles()
- for role in roles:
- ras = ras_api_instance.list_role_assignments(role_name=role.name)
- for assignment in ras:
- name = assignment.name
- ras_info[name] = {
- "display_name": assignment.display_name,
- "role": assignment.role.name,
- "scope": assignment.scope.name,
- }
- return ras_info
-
-
-@_api_permission_denied_handler("roles")
-def generate_roles_dict(module, fusion):
- roles_info = {}
- api_instance = purefusion.RolesApi(fusion)
- roles = api_instance.list_roles()
- for role in roles:
- name = role.name
- roles_info[name] = {
- "display_name": role.display_name,
- "scopes": role.assignable_scopes,
- }
- return roles_info
-
-
-@_api_permission_denied_handler("api_clients")
-def generate_api_client_dict(module, fusion):
- client_info = {}
- api_instance = purefusion.IdentityManagerApi(fusion)
- clients = api_instance.list_api_clients()
- for client in clients:
- client_info[client.name] = {
- "display_name": client.display_name,
- "issuer": client.issuer,
- "public_key": client.public_key,
- "creator_id": client.creator_id,
- "last_key_update": time.strftime(
- "%a, %d %b %Y %H:%M:%S %Z",
- time.localtime(client.last_key_update / 1000),
- ),
- "last_used": time.strftime(
- "%a, %d %b %Y %H:%M:%S %Z",
- time.localtime(client.last_used / 1000),
- ),
- }
- return client_info
-
-
-@_api_permission_denied_handler("users")
-def generate_users_dict(module, fusion):
- users_info = {}
- api_instance = purefusion.IdentityManagerApi(fusion)
- users = api_instance.list_users()
- for user in users:
- users_info[user.name] = {
- "display_name": user.display_name,
- "email": user.email,
- "id": user.id,
- }
- return users_info
-
-
-@_api_permission_denied_handler("hardware_types")
-def generate_hardware_types_dict(module, fusion):
- hardware_info = {}
- api_instance = purefusion.HardwareTypesApi(fusion)
- hw_types = api_instance.list_hardware_types()
- for hw_type in hw_types.items:
- hardware_info[hw_type.name] = {
- "array_type": hw_type.array_type,
- "display_name": hw_type.display_name,
- "media_type": hw_type.media_type,
- }
- return hardware_info
-
-
-@_api_permission_denied_handler("storage_classes")
-def generate_sc_dict(module, fusion):
- sc_info = {}
- ss_api_instance = purefusion.StorageServicesApi(fusion)
- sc_api_instance = purefusion.StorageClassesApi(fusion)
- services = ss_api_instance.list_storage_services()
- for service in services.items:
- classes = sc_api_instance.list_storage_classes(
- storage_service_name=service.name,
- )
- for s_class in classes.items:
- sc_info[s_class.name] = {
- "bandwidth_limit": getattr(s_class, "bandwidth_limit", None),
- "iops_limit": getattr(s_class, "iops_limit", None),
- "size_limit": getattr(s_class, "size_limit", None),
- "display_name": s_class.display_name,
- "storage_service": service.name,
- }
- return sc_info
-
-
-@_api_permission_denied_handler("storage_services")
-def generate_storserv_dict(module, fusion):
- ss_dict = {}
- ss_api_instance = purefusion.StorageServicesApi(fusion)
- services = ss_api_instance.list_storage_services()
- for service in services.items:
- ss_dict[service.name] = {
- "display_name": service.display_name,
- "hardware_types": None,
- }
- # can be None if we don't have permission to see this
- if service.hardware_types is not None:
- ss_dict[service.name]["hardware_types"] = []
- for hwtype in service.hardware_types:
- ss_dict[service.name]["hardware_types"].append(hwtype.name)
- return ss_dict
-
-
-@_api_permission_denied_handler("storage_endpoints")
-def generate_se_dict(module, fusion):
- se_dict = {}
- se_api_instance = purefusion.StorageEndpointsApi(fusion)
- az_api_instance = purefusion.AvailabilityZonesApi(fusion)
- regions_api_instance = purefusion.RegionsApi(fusion)
- regions = regions_api_instance.list_regions()
- for region in regions.items:
- azs = az_api_instance.list_availability_zones(region_name=region.name)
- for az in azs.items:
- endpoints = se_api_instance.list_storage_endpoints(
- region_name=region.name,
- availability_zone_name=az.name,
- )
- for endpoint in endpoints.items:
- name = region.name + "/" + az.name + "/" + endpoint.name
- se_dict[name] = {
- "display_name": endpoint.display_name,
- "endpoint_type": endpoint.endpoint_type,
- "iscsi_interfaces": [],
- }
- for iface in endpoint.iscsi.discovery_interfaces:
- dct = {
- "address": iface.address,
- "gateway": iface.gateway,
- "mtu": iface.mtu,
- "network_interface_groups": None,
- }
- if iface.network_interface_groups is not None:
- dct["network_interface_groups"] = [
- nig.name for nig in iface.network_interface_groups
- ]
- se_dict[name]["iscsi_interfaces"].append(dct)
- return se_dict
-
-
-@_api_permission_denied_handler("network_interface_groups")
-def generate_nigs_dict(module, fusion):
- nigs_dict = {}
- nig_api_instance = purefusion.NetworkInterfaceGroupsApi(fusion)
- az_api_instance = purefusion.AvailabilityZonesApi(fusion)
- regions_api_instance = purefusion.RegionsApi(fusion)
- regions = regions_api_instance.list_regions()
- for region in regions.items:
- azs = az_api_instance.list_availability_zones(region_name=region.name)
- for az in azs.items:
- nigs = nig_api_instance.list_network_interface_groups(
- region_name=region.name,
- availability_zone_name=az.name,
- )
- for nig in nigs.items:
- name = region.name + "/" + az.name + "/" + nig.name
- nigs_dict[name] = {
- "display_name": nig.display_name,
- "gateway": nig.eth.gateway,
- "prefix": nig.eth.prefix,
- "mtu": nig.eth.mtu,
- }
- return nigs_dict
-
-
-@_api_permission_denied_handler("snapshots")
-def generate_snap_dicts(module, fusion):
- snap_dict = {}
- vsnap_dict = {}
- tenant_api_instance = purefusion.TenantsApi(fusion)
- tenantspace_api_instance = purefusion.TenantSpacesApi(fusion)
- snap_api_instance = purefusion.SnapshotsApi(fusion)
- vsnap_api_instance = purefusion.VolumeSnapshotsApi(fusion)
- tenants = tenant_api_instance.list_tenants()
- for tenant in tenants.items:
- tenant_spaces = tenantspace_api_instance.list_tenant_spaces(
- tenant_name=tenant.name
- ).items
- for tenant_space in tenant_spaces:
- snaps = snap_api_instance.list_snapshots(
- tenant_name=tenant.name,
- tenant_space_name=tenant_space.name,
- )
- for snap in snaps.items:
- snap_name = tenant.name + "/" + tenant_space.name + "/" + snap.name
- secs, mins, hours = _convert_microseconds(snap.time_remaining)
- snap_dict[snap_name] = {
- "display_name": snap.display_name,
- "protection_policy": snap.protection_policy,
- "time_remaining": "{0} hours, {1} mins, {2} secs".format(
- int(hours), int(mins), int(secs)
- ),
- "volume_snapshots_link": snap.volume_snapshots_link,
- }
- vsnaps = vsnap_api_instance.list_volume_snapshots(
- tenant_name=tenant.name,
- tenant_space_name=tenant_space.name,
- snapshot_name=snap.name,
- )
- for vsnap in vsnaps.items:
- vsnap_name = (
- tenant.name
- + "/"
- + tenant_space.name
- + "/"
- + snap.name
- + "/"
- + vsnap.name
- )
- secs, mins, hours = _convert_microseconds(vsnap.time_remaining)
- vsnap_dict[vsnap_name] = {
- "size": vsnap.size,
- "display_name": vsnap.display_name,
- "protection_policy": vsnap.protection_policy,
- "serial_number": vsnap.serial_number,
- "created_at": time.strftime(
- "%a, %d %b %Y %H:%M:%S %Z",
- time.localtime(vsnap.created_at / 1000),
- ),
- "time_remaining": "{0} hours, {1} mins, {2} secs".format(
- int(hours), int(mins), int(secs)
- ),
- "placement_group": vsnap.placement_group.name,
- }
- return snap_dict, vsnap_dict
-
-
-@_api_permission_denied_handler("volumes")
-def generate_volumes_dict(module, fusion):
- volume_info = {}
-
- tenant_api_instance = purefusion.TenantsApi(fusion)
- vol_api_instance = purefusion.VolumesApi(fusion)
- tenant_space_api_instance = purefusion.TenantSpacesApi(fusion)
-
- tenants = tenant_api_instance.list_tenants()
- for tenant in tenants.items:
- tenant_spaces = tenant_space_api_instance.list_tenant_spaces(
- tenant_name=tenant.name
- ).items
- for tenant_space in tenant_spaces:
- volumes = vol_api_instance.list_volumes(
- tenant_name=tenant.name,
- tenant_space_name=tenant_space.name,
- )
- for volume in volumes.items:
- vol_name = tenant.name + "/" + tenant_space.name + "/" + volume.name
- volume_info[vol_name] = {
- "tenant": tenant.name,
- "tenant_space": tenant_space.name,
- "name": volume.name,
- "size": volume.size,
- "display_name": volume.display_name,
- "placement_group": volume.placement_group.name,
- "source_volume_snapshot": getattr(
- volume.source_volume_snapshot, "name", None
- ),
- "protection_policy": getattr(
- volume.protection_policy, "name", None
- ),
- "storage_class": volume.storage_class.name,
- "serial_number": volume.serial_number,
- "target": {},
- "array": getattr(volume.array, "name", None),
- }
-
- volume_info[vol_name]["target"] = {
- "iscsi": {
- "addresses": volume.target.iscsi.addresses,
- "iqn": volume.target.iscsi.iqn,
- },
- "nvme": {
- "addresses": None,
- "nqn": None,
- },
- "fc": {
- "addresses": None,
- "wwns": None,
- },
- }
- return volume_info
-
-
-def main():
- argument_spec = fusion_argument_spec()
- argument_spec.update(
- dict(gather_subset=dict(default="minimum", type="list", elements="str"))
- )
-
- module = AnsibleModule(argument_spec, supports_check_mode=True)
-
- # will handle all errors (except #403 which should be handled in code)
- fusion = setup_fusion(module)
-
- subset = [test.lower() for test in module.params["gather_subset"]]
- valid_subsets = (
- "all",
- "minimum",
- "roles",
- "users",
- "placements",
- "arrays",
- "hardware_types",
- "volumes",
- "hosts",
- "storage_classes",
- "protection_policies",
- "placement_groups",
- "interfaces",
- "zones",
- "nigs",
- "storage_endpoints",
- "snapshots",
- "storage_services",
- "tenants",
- "tenant_spaces",
- "network_interface_groups",
- "api_clients",
- "availability_zones",
- "host_access_policies",
- "network_interfaces",
- "regions",
- )
- for option in subset:
- if option not in valid_subsets:
- module.fail_json(
- msg=f"value gather_subset must be one or more of: {','.join(valid_subsets)}, got: {','.join(subset)}\nvalue {option} is not allowed"
- )
-
- info = {}
-
- if "minimum" in subset or "all" in subset:
- info["default"] = generate_default_dict(module, fusion)
- if "hardware_types" in subset or "all" in subset:
- info["hardware_types"] = generate_hardware_types_dict(module, fusion)
- if "users" in subset or "all" in subset:
- info["users"] = generate_users_dict(module, fusion)
- if "regions" in subset or "all" in subset:
- info["regions"] = generate_regions_dict(module, fusion)
- if "availability_zones" in subset or "all" in subset or "zones" in subset:
- info["availability_zones"] = generate_zones_dict(module, fusion)
- if "zones" in subset:
- module.warn(
- "The 'zones' subset is deprecated and will be removed in the version 2.0.0\nUse 'availability_zones' subset instead."
- )
- if "roles" in subset or "all" in subset:
- info["roles"] = generate_roles_dict(module, fusion)
- info["role_assignments"] = generate_ras_dict(module, fusion)
- if "storage_services" in subset or "all" in subset:
- info["storage_services"] = generate_storserv_dict(module, fusion)
- if "volumes" in subset or "all" in subset:
- info["volumes"] = generate_volumes_dict(module, fusion)
- if "protection_policies" in subset or "all" in subset:
- info["protection_policies"] = generate_pp_dict(module, fusion)
- if "placement_groups" in subset or "all" in subset or "placements" in subset:
- info["placement_groups"] = generate_pg_dict(module, fusion)
- if "placements" in subset:
- module.warn(
- "The 'placements' subset is deprecated and will be removed in the version 1.7.0"
- )
- if "storage_classes" in subset or "all" in subset:
- info["storage_classes"] = generate_sc_dict(module, fusion)
- if "network_interfaces" in subset or "all" in subset or "interfaces" in subset:
- info["network_interfaces"] = generate_nics_dict(module, fusion)
- if "interfaces" in subset:
- module.warn(
- "The 'interfaces' subset is deprecated and will be removed in the version 2.0.0\nUse 'network_interfaces' subset instead."
- )
- if "host_access_policies" in subset or "all" in subset or "hosts" in subset:
- info["host_access_policies"] = generate_hap_dict(module, fusion)
- if "hosts" in subset:
- module.warn(
- "The 'hosts' subset is deprecated and will be removed in the version 2.0.0\nUse 'host_access_policies' subset instead."
- )
- if "arrays" in subset or "all" in subset:
- info["arrays"] = generate_array_dict(module, fusion)
- if "tenants" in subset or "all" in subset:
- info["tenants"] = generate_tenant_dict(module, fusion)
- if "tenant_spaces" in subset or "all" in subset:
- info["tenant_spaces"] = generate_ts_dict(module, fusion)
- if "storage_endpoints" in subset or "all" in subset:
- info["storage_endpoints"] = generate_se_dict(module, fusion)
- if "api_clients" in subset or "all" in subset:
- info["api_clients"] = generate_api_client_dict(module, fusion)
- if "network_interface_groups" in subset or "all" in subset or "nigs" in subset:
- info["network_interface_groups"] = generate_nigs_dict(module, fusion)
- if "nigs" in subset:
- module.warn(
- "The 'nigs' subset is deprecated and will be removed in the version 1.7.0"
- )
- if "snapshots" in subset or "all" in subset:
- snap_dicts = generate_snap_dicts(module, fusion)
- if snap_dicts is not None:
- info["snapshots"], info["volume_snapshots"] = snap_dicts
- else:
- info["snapshots"], info["volume_snapshots"] = None, None
-
- module.exit_json(changed=False, fusion_info=info)
-
-
-if __name__ == "__main__":
- main()
diff --git a/ansible_collections/purestorage/fusion/plugins/modules/fusion_ni.py b/ansible_collections/purestorage/fusion/plugins/modules/fusion_ni.py
deleted file mode 100644
index 82c896fac..000000000
--- a/ansible_collections/purestorage/fusion/plugins/modules/fusion_ni.py
+++ /dev/null
@@ -1,245 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# (c) 2023, Andrej Pajtas (apajtas@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-DOCUMENTATION = r"""
----
-module: fusion_ni
-version_added: '1.0.0'
-short_description: Manage network interfaces in Pure Storage Fusion
-description:
-- Update parameters of network interfaces in Pure Storage Fusion.
-notes:
-- Supports C(check_mode).
-author:
-- Pure Storage Ansible Team (@sdodsley) <pure-ansible-team@purestorage.com>
-options:
- name:
- description:
- - The name of the network interface.
- type: str
- required: true
- display_name:
- description:
- - The human name of the network interface.
- - If not provided, defaults to I(name).
- type: str
- region:
- description:
- - The name of the region the availability zone is in.
- type: str
- required: true
- availability_zone:
- aliases: [ az ]
- description:
- - The name of the availability zone for the network interface.
- type: str
- required: true
- array:
- description:
- - The name of the array the network interface belongs to.
- type: str
- required: true
- eth:
- description:
- - The IP address associated with the network interface.
- - IP address must include a CIDR notation.
- - Only IPv4 is supported at the moment.
- - Required together with `network_interface_group` parameter.
- type: str
- enabled:
- description:
- - True if network interface is in use.
- type: bool
- network_interface_group:
- description:
- - The name of the network interface group this network interface belongs to.
- type: str
-extends_documentation_fragment:
-- purestorage.fusion.purestorage.fusion
-"""
-
-EXAMPLES = r"""
-- name: Patch network interface
- purestorage.fusion.fusion_ni:
- name: foo
- region: us-west
- availability_zone: bar
- array: array0
- eth: 10.21.200.124/24
- enabled: true
- network_interface_group: subnet-0
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-"""
-
-RETURN = r"""
-"""
-
-try:
- import fusion as purefusion
-except ImportError:
- pass
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.purestorage.fusion.plugins.module_utils.fusion import (
- fusion_argument_spec,
-)
-
-from ansible_collections.purestorage.fusion.plugins.module_utils.getters import (
- get_array,
- get_az,
- get_region,
-)
-from ansible_collections.purestorage.fusion.plugins.module_utils.networking import (
- is_valid_network,
-)
-from ansible_collections.purestorage.fusion.plugins.module_utils.startup import (
- setup_fusion,
-)
-from ansible_collections.purestorage.fusion.plugins.module_utils.operations import (
- await_operation,
-)
-
-
-def get_ni(module, fusion):
- """Get Network Interface or None"""
- ni_api_instance = purefusion.NetworkInterfacesApi(fusion)
- try:
- return ni_api_instance.get_network_interface(
- region_name=module.params["region"],
- availability_zone_name=module.params["availability_zone"],
- array_name=module.params["array"],
- net_intf_name=module.params["name"],
- )
- except purefusion.rest.ApiException:
- return None
-
-
-def update_ni(module, fusion, ni):
- """Update Network Interface"""
- ni_api_instance = purefusion.NetworkInterfacesApi(fusion)
-
- patches = []
- if (
- module.params["display_name"]
- and module.params["display_name"] != ni.display_name
- ):
- patch = purefusion.NetworkInterfacePatch(
- display_name=purefusion.NullableString(module.params["display_name"]),
- )
- patches.append(patch)
-
- if module.params["enabled"] is not None and module.params["enabled"] != ni.enabled:
- patch = purefusion.NetworkInterfacePatch(
- enabled=purefusion.NullableBoolean(module.params["enabled"]),
- )
- patches.append(patch)
-
- if (
- module.params["network_interface_group"]
- and module.params["network_interface_group"] != ni.network_interface_group
- ):
- if module.params["eth"] and module.params["eth"] != ni.eth:
- patch = purefusion.NetworkInterfacePatch(
- eth=purefusion.NetworkInterfacePatchEth(
- purefusion.NullableString(module.params["eth"])
- ),
- network_interface_group=purefusion.NullableString(
- module.params["network_interface_group"]
- ),
- )
- else:
- patch = purefusion.NetworkInterfacePatch(
- network_interface_group=purefusion.NullableString(
- module.params["network_interface_group"]
- ),
- )
- patches.append(patch)
- id = None
- if not module.check_mode:
- for patch in patches:
- op = ni_api_instance.update_network_interface(
- patch,
- region_name=module.params["region"],
- availability_zone_name=module.params["availability_zone"],
- array_name=module.params["array"],
- net_intf_name=module.params["name"],
- )
- res_op = await_operation(fusion, op)
- id = res_op.result.resource.id
-
- changed = len(patches) != 0
-
- module.exit_json(changed=changed, id=id)
-
-
-def main():
- """Main code"""
- argument_spec = fusion_argument_spec()
- argument_spec.update(
- dict(
- name=dict(type="str", required=True),
- display_name=dict(type="str"),
- region=dict(type="str", required=True),
- availability_zone=dict(type="str", required=True, aliases=["az"]),
- array=dict(type="str", required=True),
- eth=dict(type="str"),
- enabled=dict(type="bool"),
- network_interface_group=dict(type="str"),
- )
- )
-
- required_by = {
- "eth": "network_interface_group",
- }
-
- module = AnsibleModule(
- argument_spec,
- supports_check_mode=True,
- required_by=required_by,
- )
-
- fusion = setup_fusion(module)
-
- if module.params["eth"] and not is_valid_network(module.params["eth"]):
- module.fail_json(
- msg="`eth` '{0}' is not a valid address in CIDR notation".format(
- module.params["eth"]
- )
- )
-
- if not get_region(module, fusion):
- module.fail_json(
- msg="Region {0} does not exist.".format(module.params["region"])
- )
-
- if not get_az(module, fusion):
- module.fail_json(
- msg="Availability Zone {0} does not exist.".format(
- module.params["availability_zone"]
- )
- )
-
- if not get_array(module, fusion):
- module.fail_json(msg="Array {0} does not exist.".format(module.params["array"]))
-
- ni = get_ni(module, fusion)
- if not ni:
- module.fail_json(
- msg="Network Interface {0} does not exist".format(module.params["name"])
- )
-
- update_ni(module, fusion, ni)
-
- module.exit_json(changed=False)
-
-
-if __name__ == "__main__":
- main()
diff --git a/ansible_collections/purestorage/fusion/plugins/modules/fusion_nig.py b/ansible_collections/purestorage/fusion/plugins/modules/fusion_nig.py
deleted file mode 100644
index d40b813b9..000000000
--- a/ansible_collections/purestorage/fusion/plugins/modules/fusion_nig.py
+++ /dev/null
@@ -1,276 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# (c) 2022, Simon Dodsley (simon@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-DOCUMENTATION = r"""
----
-module: fusion_nig
-version_added: '1.0.0'
-short_description: Manage Network Interface Groups in Pure Storage Fusion
-description:
-- Create, delete and modify network interface groups in Pure Storage Fusion.
-- Currently this only supports a single tenant subnet per tenant network
-author:
-- Pure Storage Ansible Team (@sdodsley) <pure-ansible-team@purestorage.com>
-notes:
-- Supports C(check mode).
-options:
- name:
- description:
- - The name of the network interface group.
- type: str
- required: true
- display_name:
- description:
- - The human name of the network interface group.
- - If not provided, defaults to I(name).
- type: str
- state:
- description:
- - Define whether the network interface group should exist or not.
- type: str
- default: present
- choices: [ absent, present ]
- availability_zone:
- aliases: [ az ]
- description:
- - The name of the availability zone for the network interface group.
- type: str
- required: true
- region:
- description:
- - Region for the network interface group.
- type: str
- required: true
- gateway:
- description:
- - "Address of the subnet gateway.
- Currently must be a valid IPv4 address."
- type: str
- mtu:
- description:
- - MTU setting for the subnet.
- default: 1500
- type: int
- group_type:
- description:
- - The type of network interface group.
- type: str
- default: eth
- choices: [ eth ]
- prefix:
- description:
- - "Network prefix in CIDR notation.
- Required to create a new network interface group.
- Currently only IPv4 addresses with subnet mask are supported."
- type: str
-extends_documentation_fragment:
-- purestorage.fusion.purestorage.fusion
-"""
-
-EXAMPLES = r"""
-- name: Create new network interface group foo in AZ bar
- purestorage.fusion.fusion_nig:
- name: foo
- availability_zone: bar
- region: region1
- mtu: 9000
- gateway: 10.21.200.1
- prefix: 10.21.200.0/24
- state: present
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-
-- name: Delete network interface group foo in AZ bar
- purestorage.fusion.fusion_nig:
- name: foo
- availability_zone: bar
- region: region1
- state: absent
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-"""
-
-RETURN = r"""
-"""
-
-try:
- import fusion as purefusion
-except ImportError:
- pass
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.purestorage.fusion.plugins.module_utils.fusion import (
- fusion_argument_spec,
-)
-from ansible_collections.purestorage.fusion.plugins.module_utils.networking import (
- is_valid_address,
- is_valid_network,
- is_address_in_network,
-)
-from ansible_collections.purestorage.fusion.plugins.module_utils.startup import (
- setup_fusion,
-)
-from ansible_collections.purestorage.fusion.plugins.module_utils.operations import (
- await_operation,
-)
-
-
-def get_nig(module, fusion):
- """Check Network Interface Group"""
- nig_api_instance = purefusion.NetworkInterfaceGroupsApi(fusion)
- try:
- return nig_api_instance.get_network_interface_group(
- availability_zone_name=module.params["availability_zone"],
- region_name=module.params["region"],
- network_interface_group_name=module.params["name"],
- )
- except purefusion.rest.ApiException:
- return None
-
-
-def create_nig(module, fusion):
- """Create Network Interface Group"""
-
- nig_api_instance = purefusion.NetworkInterfaceGroupsApi(fusion)
-
- changed = False
- if module.params["gateway"] and not is_address_in_network(
- module.params["gateway"], module.params["prefix"]
- ):
- module.fail_json(msg="`gateway` must be an address in subnet `prefix`")
-
- id = None
- if not module.check_mode:
- display_name = module.params["display_name"] or module.params["name"]
- if module.params["group_type"] == "eth":
- if module.params["gateway"]:
- eth = purefusion.NetworkInterfaceGroupEthPost(
- prefix=module.params["prefix"],
- gateway=module.params["gateway"],
- mtu=module.params["mtu"],
- )
- else:
- eth = purefusion.NetworkInterfaceGroupEthPost(
- prefix=module.params["prefix"],
- mtu=module.params["mtu"],
- )
- nig = purefusion.NetworkInterfaceGroupPost(
- group_type="eth",
- eth=eth,
- name=module.params["name"],
- display_name=display_name,
- )
- op = nig_api_instance.create_network_interface_group(
- nig,
- availability_zone_name=module.params["availability_zone"],
- region_name=module.params["region"],
- )
- res_op = await_operation(fusion, op)
- id = res_op.result.resource.id
- changed = True
- else:
- # to prevent future unintended error
- module.warn(f"group_type={module.params['group_type']} is not implemented")
-
- module.exit_json(changed=changed, id=id)
-
-
-def delete_nig(module, fusion):
- """Delete Network Interface Group"""
- changed = True
- nig_api_instance = purefusion.NetworkInterfaceGroupsApi(fusion)
- if not module.check_mode:
- op = nig_api_instance.delete_network_interface_group(
- availability_zone_name=module.params["availability_zone"],
- region_name=module.params["region"],
- network_interface_group_name=module.params["name"],
- )
- await_operation(fusion, op)
- module.exit_json(changed=changed)
-
-
-def update_nig(module, fusion, nig):
- """Update Network Interface Group"""
-
- nifg_api_instance = purefusion.NetworkInterfaceGroupsApi(fusion)
- patches = []
- if (
- module.params["display_name"]
- and module.params["display_name"] != nig.display_name
- ):
- patch = purefusion.NetworkInterfaceGroupPatch(
- display_name=purefusion.NullableString(module.params["display_name"]),
- )
- patches.append(patch)
-
- if not module.check_mode:
- for patch in patches:
- op = nifg_api_instance.update_network_interface_group(
- patch,
- availability_zone_name=module.params["availability_zone"],
- region_name=module.params["region"],
- network_interface_group_name=module.params["name"],
- )
- await_operation(fusion, op)
-
- changed = len(patches) != 0
-
- module.exit_json(changed=changed, id=nig.id)
-
-
-def main():
- """Main code"""
- argument_spec = fusion_argument_spec()
- argument_spec.update(
- dict(
- name=dict(type="str", required=True),
- display_name=dict(type="str"),
- availability_zone=dict(type="str", required=True, aliases=["az"]),
- region=dict(type="str", required=True),
- prefix=dict(type="str"),
- gateway=dict(type="str"),
- mtu=dict(type="int", default=1500),
- group_type=dict(type="str", default="eth", choices=["eth"]),
- state=dict(type="str", default="present", choices=["absent", "present"]),
- )
- )
-
- module = AnsibleModule(argument_spec, supports_check_mode=True)
- fusion = setup_fusion(module)
-
- state = module.params["state"]
- if module.params["prefix"] and not is_valid_network(module.params["prefix"]):
- module.fail_json(
- msg="`prefix` '{0}' is not a valid address in CIDR notation".format(
- module.params["prefix"]
- )
- )
- if module.params["gateway"] and not is_valid_address(module.params["gateway"]):
- module.fail_json(
- msg="`gateway` '{0}' is not a valid address".format(
- module.params["gateway"]
- )
- )
-
- nig = get_nig(module, fusion)
-
- if state == "present" and not nig:
- module.fail_on_missing_params(["prefix"])
- create_nig(module, fusion)
- elif state == "present" and nig:
- update_nig(module, fusion, nig)
- elif state == "absent" and nig:
- delete_nig(module, fusion)
-
- module.exit_json(changed=False)
-
-
-if __name__ == "__main__":
- main()
diff --git a/ansible_collections/purestorage/fusion/plugins/modules/fusion_pg.py b/ansible_collections/purestorage/fusion/plugins/modules/fusion_pg.py
deleted file mode 100644
index 6d6f0eb94..000000000
--- a/ansible_collections/purestorage/fusion/plugins/modules/fusion_pg.py
+++ /dev/null
@@ -1,307 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# (c) 2022, Simon Dodsley (simon@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-DOCUMENTATION = r"""
----
-module: fusion_pg
-version_added: '1.0.0'
-short_description: Manage placement groups in Pure Storage Fusion
-description:
-- Create, update or delete a placement groups in Pure Storage Fusion.
-author:
-- Pure Storage Ansible Team (@sdodsley) <pure-ansible-team@purestorage.com>
-notes:
-- Supports C(check mode).
-options:
- name:
- description:
- - The name of the placement group.
- type: str
- required: true
- display_name:
- description:
- - The human name of the placement group.
- - If not provided, defaults to I(name).
- type: str
- state:
- description:
- - Define whether the placement group should exist or not.
- type: str
- default: present
- choices: [ absent, present ]
- destroy_snapshots_on_delete:
- description:
- - "Before deleting placement group, snapshots within the placement group will be deleted."
- - "If `false` then any snapshots will need to be deleted as a separate step before removing the placement group."
- type: bool
- tenant:
- description:
- - The name of the tenant.
- type: str
- required: true
- tenant_space:
- description:
- - The name of the tenant space.
- type: str
- required: true
- region:
- description:
- - The name of the region the availability zone is in.
- type: str
- availability_zone:
- aliases: [ az ]
- description:
- - The name of the availability zone the placement group is in.
- type: str
- storage_service:
- description:
- - The name of the storage service to create the placement group for.
- type: str
- array:
- description:
- - "Array to place the placement group to. Changing it (i.e. manual migration)
- is an elevated operation."
- type: str
- placement_engine:
- description:
- - For workload placement recommendations from Pure1 Meta, use C(pure1meta).
- - Please note that this might increase volume creation time.
- type: str
- choices: [ heuristics, pure1meta ]
-extends_documentation_fragment:
-- purestorage.fusion.purestorage.fusion
-"""
-
-EXAMPLES = r"""
-- name: Create new placement group named foo
- purestorage.fusion.fusion_pg:
- name: foo
- tenant: test
- tenant_space: space_1
- availability_zone: az1
- region: region1
- storage_service: storage_service_1
- state: present
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-
-- name: Delete placement group foo
- purestorage.fusion.fusion_pg:
- name: foo
- tenant: test
- tenant_space: space_1
- state: absent
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-"""
-
-RETURN = r"""
-"""
-
-try:
- import fusion as purefusion
-except ImportError:
- pass
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.purestorage.fusion.plugins.module_utils.fusion import (
- fusion_argument_spec,
-)
-
-from ansible_collections.purestorage.fusion.plugins.module_utils.startup import (
- setup_fusion,
-)
-from ansible_collections.purestorage.fusion.plugins.module_utils.operations import (
- await_operation,
-)
-from ansible_collections.purestorage.fusion.plugins.module_utils.snapshots import (
- delete_snapshot,
-)
-
-
-def get_pg(module, fusion):
- """Return Placement Group or None"""
- pg_api_instance = purefusion.PlacementGroupsApi(fusion)
- try:
- return pg_api_instance.get_placement_group(
- tenant_name=module.params["tenant"],
- tenant_space_name=module.params["tenant_space"],
- placement_group_name=module.params["name"],
- )
- except purefusion.rest.ApiException:
- return None
-
-
-def create_pg(module, fusion):
- """Create Placement Group"""
-
- pg_api_instance = purefusion.PlacementGroupsApi(fusion)
-
- if not module.check_mode:
- if not module.params["display_name"]:
- display_name = module.params["name"]
- else:
- display_name = module.params["display_name"]
- group = purefusion.PlacementGroupPost(
- availability_zone=module.params["availability_zone"],
- name=module.params["name"],
- display_name=display_name,
- region=module.params["region"],
- storage_service=module.params["storage_service"],
- )
- op = pg_api_instance.create_placement_group(
- group,
- tenant_name=module.params["tenant"],
- tenant_space_name=module.params["tenant_space"],
- )
- res_op = await_operation(fusion, op)
- id = res_op.result.resource.id
-
- return True, id
-
-
-def update_display_name(module, fusion, patches, pg):
- if not module.params["display_name"]:
- return
- if module.params["display_name"] == pg.display_name:
- return
- patch = purefusion.PlacementGroupPatch(
- display_name=purefusion.NullableString(module.params["display_name"]),
- )
- patches.append(patch)
-
-
-def update_array(module, fusion, patches, pg):
- if not module.params["array"]:
- return
- if not pg.array:
- module.warn(
- "cannot see placement group array, probably missing required permissions to change it"
- )
- return
- if pg.array.name == module.params["array"]:
- return
-
- patch = purefusion.PlacementGroupPatch(
- array=purefusion.NullableString(module.params["array"]),
- )
- patches.append(patch)
-
-
-def update_pg(module, fusion, pg):
- """Update Placement Group"""
-
- pg_api_instance = purefusion.PlacementGroupsApi(fusion)
- patches = []
-
- update_display_name(module, fusion, patches, pg)
- update_array(module, fusion, patches, pg)
-
- if not module.check_mode:
- for patch in patches:
- op = pg_api_instance.update_placement_group(
- patch,
- tenant_name=module.params["tenant"],
- tenant_space_name=module.params["tenant_space"],
- placement_group_name=module.params["name"],
- )
- await_operation(fusion, op)
-
- changed = len(patches) != 0
- return changed
-
-
-def delete_pg(module, fusion):
- """Delete Placement Group"""
- pg_api_instance = purefusion.PlacementGroupsApi(fusion)
- if not module.check_mode:
- if module.params["destroy_snapshots_on_delete"]:
- snapshots_api = purefusion.SnapshotsApi(fusion)
- snapshots = snapshots_api.list_snapshots(
- placement_group=module.params["name"],
- tenant_name=module.params["tenant"],
- tenant_space_name=module.params["tenant_space"],
- )
- for snap in snapshots.items:
- delete_snapshot(fusion, snap, snapshots_api)
-
- op = pg_api_instance.delete_placement_group(
- placement_group_name=module.params["name"],
- tenant_name=module.params["tenant"],
- tenant_space_name=module.params["tenant_space"],
- )
- await_operation(fusion, op)
-
- return True
-
-
-def main():
- """Main code"""
- argument_spec = fusion_argument_spec()
- argument_spec.update(
- dict(
- name=dict(type="str", required=True),
- destroy_snapshots_on_delete=dict(type="bool"),
- display_name=dict(type="str"),
- tenant=dict(type="str", required=True),
- tenant_space=dict(type="str", required=True),
- region=dict(type="str"),
- availability_zone=dict(type="str", aliases=["az"]),
- storage_service=dict(type="str"),
- state=dict(type="str", default="present", choices=["absent", "present"]),
- array=dict(type="str"),
- placement_engine=dict(
- type="str",
- choices=["heuristics", "pure1meta"],
- removed_in_version="2.0.0",
- removed_from_collection="purestorage.fusion",
- ),
- )
- )
-
- module = AnsibleModule(argument_spec, supports_check_mode=True)
- fusion = setup_fusion(module)
-
- if module.params["placement_engine"]:
- module.warn("placement_engine parameter will be deprecated in version 2.0.0")
-
- changed = False
-
- state = module.params["state"]
- pgroup = get_pg(module, fusion)
-
- id = None
- if pgroup is not None:
- id = pgroup.id
-
- if state == "present" and not pgroup:
- module.fail_on_missing_params(
- ["region", "availability_zone", "storage_service"]
- )
- changed, id = create_pg(module, fusion) or changed
- if module.params["array"]:
- # changing placement requires additional update
- pgroup = get_pg(module, fusion)
- changedUpdate = update_pg(module, fusion, pgroup)
- changed = changed | changedUpdate
- elif state == "present" and pgroup:
- changed = update_pg(module, fusion, pgroup) or changed
- elif state == "absent" and pgroup:
- changed = delete_pg(module, fusion) or changed
- module.exit_json(changed=changed)
-
- if id is not None:
- module.exit_json(changed=changed, id=id)
-
- module.exit_json(changed=changed)
-
-
-if __name__ == "__main__":
- main()
diff --git a/ansible_collections/purestorage/fusion/plugins/modules/fusion_pp.py b/ansible_collections/purestorage/fusion/plugins/modules/fusion_pp.py
deleted file mode 100644
index 216209d84..000000000
--- a/ansible_collections/purestorage/fusion/plugins/modules/fusion_pp.py
+++ /dev/null
@@ -1,208 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# (c) 2022, Simon Dodsley (simon@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-DOCUMENTATION = r"""
----
-module: fusion_pp
-version_added: '1.0.0'
-short_description: Manage protection policies in Pure Storage Fusion
-description:
-- Manage protection policies in Pure Storage Fusion.
-author:
-- Pure Storage Ansible Team (@sdodsley) <pure-ansible-team@purestorage.com>
-notes:
-- Supports C(check mode).
-options:
- name:
- description:
- - The name of the protection policy.
- type: str
- required: true
- state:
- description:
- - Define whether the protection policy should exist or not.
- default: present
- choices: [ present, absent ]
- type: str
- destroy_snapshots_on_delete:
- description:
- - "Before deleting protection policy, snapshots within the protection policy will be deleted."
- - "If `false` then any snapshots will need to be deleted as a separate step before removing the protection policy."
- type: bool
- display_name:
- description:
- - The human name of the protection policy.
- - If not provided, defaults to I(name).
- type: str
- local_rpo:
- description:
- - Recovery Point Objective for snapshots.
- - Minimum value is 10 minutes.
- - Value can be provided as m(inutes), h(ours),
- d(ays), w(eeks), or y(ears).
- - If no unit is provided, minutes are assumed.
- type: str
- local_retention:
- description:
- - Retention Duration for periodic snapshots.
- - Minimum value is 10 minutes.
- - Value can be provided as m(inutes), h(ours),
- d(ays), w(eeks), or y(ears).
- - If no unit is provided, minutes are assumed.
- type: str
-extends_documentation_fragment:
-- purestorage.fusion.purestorage.fusion
-"""
-
-EXAMPLES = r"""
-- name: Create new protection policy foo
- purestorage.fusion.fusion_pp:
- name: foo
- local_rpo: 10
- local_retention: 4d
- display_name: "foo pp"
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-
-- name: Delete protection policy foo
- purestorage.fusion.fusion_pp:
- name: foo
- state: absent
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-"""
-
-RETURN = r"""
-"""
-
-try:
- import fusion as purefusion
-except ImportError:
- pass
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.purestorage.fusion.plugins.module_utils.fusion import (
- fusion_argument_spec,
-)
-
-from ansible_collections.purestorage.fusion.plugins.module_utils.parsing import (
- parse_minutes,
-)
-
-from ansible_collections.purestorage.fusion.plugins.module_utils.startup import (
- setup_fusion,
-)
-from ansible_collections.purestorage.fusion.plugins.module_utils.operations import (
- await_operation,
-)
-from ansible_collections.purestorage.fusion.plugins.module_utils.snapshots import (
- delete_snapshot,
-)
-
-
-def get_pp(module, fusion):
- """Return Protection Policy or None"""
- pp_api_instance = purefusion.ProtectionPoliciesApi(fusion)
- try:
- return pp_api_instance.get_protection_policy(
- protection_policy_name=module.params["name"]
- )
- except purefusion.rest.ApiException:
- return None
-
-
-def create_pp(module, fusion):
- """Create Protection Policy"""
-
- pp_api_instance = purefusion.ProtectionPoliciesApi(fusion)
- local_rpo = parse_minutes(module, module.params["local_rpo"])
- local_retention = parse_minutes(module, module.params["local_retention"])
- if local_retention < 10:
- module.fail_json(msg="Local Retention must be a minimum of 10 minutes")
- if local_rpo < 10:
- module.fail_json(msg="Local RPO must be a minimum of 10 minutes")
-
- changed = True
- id = None
- if not module.check_mode:
- if not module.params["display_name"]:
- display_name = module.params["name"]
- else:
- display_name = module.params["display_name"]
- op = pp_api_instance.create_protection_policy(
- purefusion.ProtectionPolicyPost(
- name=module.params["name"],
- display_name=display_name,
- objectives=[
- purefusion.RPO(type="RPO", rpo="PT" + str(local_rpo) + "M"),
- purefusion.Retention(
- type="Retention", after="PT" + str(local_retention) + "M"
- ),
- ],
- )
- )
- res_op = await_operation(fusion, op)
- id = res_op.result.resource.id
-
- module.exit_json(changed=changed, id=id)
-
-
-def delete_pp(module, fusion):
- """Delete Protection Policy"""
- pp_api_instance = purefusion.ProtectionPoliciesApi(fusion)
- changed = True
- if not module.check_mode:
- if module.params["destroy_snapshots_on_delete"]:
- protection_policy = get_pp(module, fusion)
- snapshots_api = purefusion.SnapshotsApi(fusion)
- snapshots = snapshots_api.query_snapshots(
- protection_policy_id=protection_policy.id
- )
- for snap in snapshots.items:
- delete_snapshot(fusion, snap, snapshots_api)
-
- op = pp_api_instance.delete_protection_policy(
- protection_policy_name=module.params["name"],
- )
- await_operation(fusion, op)
-
- module.exit_json(changed=changed)
-
-
-def main():
- """Main code"""
- argument_spec = fusion_argument_spec()
- argument_spec.update(
- dict(
- name=dict(type="str", required=True),
- destroy_snapshots_on_delete=dict(type="bool"),
- display_name=dict(type="str"),
- local_rpo=dict(type="str"),
- local_retention=dict(type="str"),
- state=dict(type="str", default="present", choices=["present", "absent"]),
- )
- )
- module = AnsibleModule(argument_spec, supports_check_mode=True)
- fusion = setup_fusion(module)
-
- state = module.params["state"]
- policy = get_pp(module, fusion)
-
- if not policy and state == "present":
- module.fail_on_missing_params(["local_rpo", "local_retention"])
- create_pp(module, fusion)
- elif policy and state == "absent":
- delete_pp(module, fusion)
-
- module.exit_json(changed=False)
-
-
-if __name__ == "__main__":
- main()
diff --git a/ansible_collections/purestorage/fusion/plugins/modules/fusion_ra.py b/ansible_collections/purestorage/fusion/plugins/modules/fusion_ra.py
deleted file mode 100644
index c2ae2d5cf..000000000
--- a/ansible_collections/purestorage/fusion/plugins/modules/fusion_ra.py
+++ /dev/null
@@ -1,284 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# (c) 2022, Simon Dodsley (simon@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-DOCUMENTATION = r"""
----
-module: fusion_ra
-version_added: '1.0.0'
-short_description: Manage role assignments in Pure Storage Fusion
-description:
-- Create or delete a storage class in Pure Storage Fusion.
-author:
-- Pure Storage Ansible Team (@sdodsley) <pure-ansible-team@purestorage.com>
-notes:
-- Supports C(check mode).
-options:
- role:
- description:
- - The name of the role to be assigned/unassigned.
- type: str
- required: true
- state:
- description:
- - Define whether the role assingment should exist or not.
- type: str
- default: present
- choices: [ absent, present ]
- user:
- description:
- - The username to assign the role to.
- - Currently this only supports the Pure1 App ID.
- - This should be provide in the same format as I(issuer_id).
- type: str
- principal:
- description:
- - The unique ID of the principal (User or API Client) to assign to the role.
- type: str
- api_client_key:
- description:
- - The issuer ID of the API client to assign the role to.
- type: str
- scope:
- description:
- - The level to which the role is assigned.
- choices: [ organization, tenant, tenant_space ]
- default: organization
- type: str
- tenant:
- description:
- - The name of the tenant the user has the role applied to.
- - Must be provided if I(scope) is set to either C(tenant) or C(tenant_space).
- type: str
- tenant_space:
- description:
- - The name of the tenant_space the user has the role applied to.
- - Must be provided if I(scope) is set to C(tenant_space).
- type: str
-extends_documentation_fragment:
-- purestorage.fusion.purestorage.fusion
-"""
-
-EXAMPLES = r"""
-- name: Assign role foo to user in tenant bar
- purestorage.fusion.fusion_ra:
- name: foo
- user: key_name
- tenant: bar
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-
-- name: Delete role foo from user in tenant bar
- purestorage.fusion.fusion_ra:
- name: foo
- user: key_name
- tenant: bar
- state: absent
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-"""
-
-RETURN = r"""
-"""
-
-try:
- import fusion as purefusion
-except ImportError:
- pass
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.purestorage.fusion.plugins.module_utils.fusion import (
- fusion_argument_spec,
-)
-
-from ansible_collections.purestorage.fusion.plugins.module_utils.operations import (
- await_operation,
-)
-from ansible_collections.purestorage.fusion.plugins.module_utils.startup import (
- setup_fusion,
-)
-
-
-def get_principal(module, fusion):
- if module.params["principal"]:
- return module.params["principal"]
- if module.params["user"]:
- principal = user_to_principal(fusion, module.params["user"])
- if not principal:
- module.fail_json(
- msg="User {0} does not exist".format(module.params["user"])
- )
- return principal
- if module.params["api_client_key"]:
- principal = apiclient_to_principal(fusion, module.params["api_client_key"])
- if not principal:
- module.fail_json(
- msg="API Client with key {0} does not exist".format(
- module.params["api_client_key"]
- )
- )
- return principal
-
-
-def user_to_principal(fusion, user_id):
- """Given a human-readable Fusion user, such as a Pure 1 App ID
- return the associated principal
- """
- id_api_instance = purefusion.IdentityManagerApi(fusion)
- users = id_api_instance.list_users()
- for user in users:
- if user.name == user_id:
- return user.id
- return None
-
-
-def apiclient_to_principal(fusion, api_client_key):
- """Given an API client issuer ID, such as "pure1:apikey:123xXxyYyzYzASDF",
- return the associated principal
- """
- id_api_instance = purefusion.IdentityManagerApi(fusion)
- api_clients = id_api_instance.list_users(name=api_client_key)
- if len(api_clients) > 0:
- return api_clients[0].id
- return None
-
-
-def get_scope(params):
- """Given a scope type and associated tenant
- and tenant_space, return the scope_link
- """
- scope_link = None
- if params["scope"] == "organization":
- scope_link = "/"
- elif params["scope"] == "tenant":
- scope_link = "/tenants/" + params["tenant"]
- elif params["scope"] == "tenant_space":
- scope_link = (
- "/tenants/" + params["tenant"] + "/tenant-spaces/" + params["tenant_space"]
- )
- return scope_link
-
-
-def get_ra(module, fusion):
- """Return Role Assignment or None"""
- ra_api_instance = purefusion.RoleAssignmentsApi(fusion)
- try:
- principal = get_principal(module, fusion)
- assignments = ra_api_instance.list_role_assignments(
- role_name=module.params["role"],
- principal=principal,
- )
- for assign in assignments:
- scope = get_scope(module.params)
- if assign.scope.self_link == scope:
- return assign
- return None
- except purefusion.rest.ApiException:
- return None
-
-
-def create_ra(module, fusion):
- """Create Role Assignment"""
-
- ra_api_instance = purefusion.RoleAssignmentsApi(fusion)
-
- changed = True
- id = None
- if not module.check_mode:
- principal = get_principal(module, fusion)
- scope = get_scope(module.params)
- assignment = purefusion.RoleAssignmentPost(scope=scope, principal=principal)
- op = ra_api_instance.create_role_assignment(
- assignment, role_name=module.params["role"]
- )
- res_op = await_operation(fusion, op)
- id = res_op.result.resource.id
-
- module.exit_json(changed=changed, id=id)
-
-
-def delete_ra(module, fusion):
- """Delete Role Assignment"""
- changed = True
- ra_api_instance = purefusion.RoleAssignmentsApi(fusion)
- if not module.check_mode:
- ra_name = get_ra(module, fusion).name
- op = ra_api_instance.delete_role_assignment(
- role_name=module.params["role"], role_assignment_name=ra_name
- )
- await_operation(fusion, op)
-
- module.exit_json(changed=changed)
-
-
-def main():
- """Main code"""
- argument_spec = fusion_argument_spec()
- argument_spec.update(
- dict(
- api_client_key=dict(type="str", no_log=True),
- principal=dict(type="str"),
- role=dict(
- type="str",
- required=True,
- deprecated_aliases=[
- dict(
- name="name",
- date="2023-07-26",
- collection_name="purefusion.fusion",
- )
- ],
- ),
- scope=dict(
- type="str",
- default="organization",
- choices=["organization", "tenant", "tenant_space"],
- ),
- state=dict(type="str", default="present", choices=["present", "absent"]),
- tenant=dict(type="str"),
- tenant_space=dict(type="str"),
- user=dict(type="str"),
- )
- )
-
- required_if = [
- ["scope", "tenant", ["tenant"]],
- ["scope", "tenant_space", ["tenant", "tenant_space"]],
- ]
- mutually_exclusive = [
- ("user", "principal", "api_client_key"),
- ]
- required_one_of = [
- ("user", "principal", "api_client_key"),
- ]
-
- module = AnsibleModule(
- argument_spec,
- required_if=required_if,
- supports_check_mode=True,
- mutually_exclusive=mutually_exclusive,
- required_one_of=required_one_of,
- )
- fusion = setup_fusion(module)
-
- state = module.params["state"]
- role_assignment = get_ra(module, fusion)
-
- if not role_assignment and state == "present":
- create_ra(module, fusion)
- elif role_assignment and state == "absent":
- delete_ra(module, fusion)
- else:
- module.exit_json(changed=False)
-
- module.exit_json(changed=False)
-
-
-if __name__ == "__main__":
- main()
diff --git a/ansible_collections/purestorage/fusion/plugins/modules/fusion_region.py b/ansible_collections/purestorage/fusion/plugins/modules/fusion_region.py
deleted file mode 100644
index de40e7dc2..000000000
--- a/ansible_collections/purestorage/fusion/plugins/modules/fusion_region.py
+++ /dev/null
@@ -1,182 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# (c) 2022, Simon Dodsley (simon@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-DOCUMENTATION = r"""
----
-module: fusion_region
-version_added: '1.1.0'
-short_description: Manage Regions in Pure Storage Fusion
-description:
-- Manage regions in Pure Storage Fusion.
-author:
-- Pure Storage Ansible Team (@sdodsley) <pure-ansible-team@purestorage.com>
-notes:
-- Supports C(check mode).
-options:
- name:
- description:
- - The name of the Region.
- type: str
- required: true
- state:
- description:
- - Define whether the Region should exist or not.
- default: present
- choices: [ present, absent ]
- type: str
- display_name:
- description:
- - The human name of the Region.
- - If not provided, defaults to I(name).
- type: str
-extends_documentation_fragment:
-- purestorage.fusion.purestorage.fusion
-"""
-
-EXAMPLES = r"""
-- name: Create new region foo
- purestorage.fusion.fusion_region:
- name: foo
- display_name: "foo Region"
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-
-- name: Update region foo
- purestorage.fusion.fusion_region:
- name: foo
- display_name: "new foo Region"
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-
-- name: Delete region foo
- purestorage.fusion.fusion_region:
- name: foo
- state: absent
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-"""
-
-RETURN = r"""
-"""
-
-try:
- import fusion as purefusion
-except ImportError:
- pass
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.purestorage.fusion.plugins.module_utils.fusion import (
- fusion_argument_spec,
-)
-
-from ansible_collections.purestorage.fusion.plugins.module_utils.operations import (
- await_operation,
-)
-from ansible_collections.purestorage.fusion.plugins.module_utils.startup import (
- setup_fusion,
-)
-from ansible_collections.purestorage.fusion.plugins.module_utils import getters
-
-
-def get_region(module, fusion):
- """Get Region or None"""
- return getters.get_region(module, fusion, module.params["name"])
-
-
-def create_region(module, fusion):
- """Create Region"""
-
- reg_api_instance = purefusion.RegionsApi(fusion)
-
- changed = True
- id = None
- if not module.check_mode:
- if not module.params["display_name"]:
- display_name = module.params["name"]
- else:
- display_name = module.params["display_name"]
- region = purefusion.RegionPost(
- name=module.params["name"],
- display_name=display_name,
- )
- op = reg_api_instance.create_region(region)
- res_op = await_operation(fusion, op)
- id = res_op.result.resource.id
-
- module.exit_json(changed=changed, id=id)
-
-
-def delete_region(module, fusion):
- """Delete Region"""
-
- reg_api_instance = purefusion.RegionsApi(fusion)
-
- changed = True
- if not module.check_mode:
- op = reg_api_instance.delete_region(region_name=module.params["name"])
- await_operation(fusion, op)
-
- module.exit_json(changed=changed)
-
-
-def update_region(module, fusion, region):
- """Update Region settings"""
- changed = False
- reg_api_instance = purefusion.RegionsApi(fusion)
-
- if (
- module.params["display_name"]
- and module.params["display_name"] != region.display_name
- ):
- changed = True
- if not module.check_mode:
- reg = purefusion.RegionPatch(
- display_name=purefusion.NullableString(module.params["display_name"])
- )
- op = reg_api_instance.update_region(
- reg,
- region_name=module.params["name"],
- )
- await_operation(fusion, op)
-
- module.exit_json(changed=changed, id=region.id)
-
-
-def main():
- """Main code"""
- argument_spec = fusion_argument_spec()
- argument_spec.update(
- dict(
- name=dict(type="str", required=True),
- display_name=dict(type="str"),
- state=dict(type="str", default="present", choices=["present", "absent"]),
- )
- )
-
- module = AnsibleModule(argument_spec, supports_check_mode=True)
- fusion = setup_fusion(module)
-
- state = module.params["state"]
- region = get_region(module, fusion)
-
- if not region and state == "present":
- create_region(module, fusion)
- elif region and state == "present":
- update_region(module, fusion, region)
- elif region and state == "absent":
- delete_region(module, fusion)
- else:
- module.exit_json(changed=False)
-
- module.exit_json(changed=False)
-
-
-if __name__ == "__main__":
- main()
diff --git a/ansible_collections/purestorage/fusion/plugins/modules/fusion_sc.py b/ansible_collections/purestorage/fusion/plugins/modules/fusion_sc.py
deleted file mode 100644
index 59fc0025e..000000000
--- a/ansible_collections/purestorage/fusion/plugins/modules/fusion_sc.py
+++ /dev/null
@@ -1,257 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# (c) 2022, Simon Dodsley (simon@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-DOCUMENTATION = r"""
----
-module: fusion_sc
-version_added: '1.0.0'
-short_description: Manage storage classes in Pure Storage Fusion
-description:
-- Manage a storage class in Pure Storage Fusion.
-notes:
-- Supports C(check_mode).
-- It is not currently possible to update bw_limit or
- iops_limit after a storage class has been created.
-author:
-- Pure Storage Ansible Team (@sdodsley) <pure-ansible-team@purestorage.com>
-options:
- name:
- description:
- - The name of the storage class.
- type: str
- required: true
- state:
- description:
- - Define whether the storage class should exist or not.
- default: present
- choices: [ present, absent ]
- type: str
- display_name:
- description:
- - The human name of the storage class.
- - If not provided, defaults to I(name).
- type: str
- size_limit:
- description:
- - Volume size limit in M, G, T or P units.
- - Must be between 1MB and 4PB.
- - If not provided at creation, this will default to 4PB.
- type: str
- bw_limit:
- description:
- - The bandwidth limit in M or G units.
- M will set MB/s.
- G will set GB/s.
- - Must be between 1MB/s and 512GB/s.
- - If not provided at creation, this will default to 512GB/s.
- type: str
- iops_limit:
- description:
- - The IOPs limit - use value or K or M.
- K will mean 1000.
- M will mean 1000000.
- - Must be between 100 and 100000000.
- - If not provided at creation, this will default to 100000000.
- type: str
- storage_service:
- description:
- - Storage service to which the storage class belongs.
- type: str
- required: true
-extends_documentation_fragment:
-- purestorage.fusion.purestorage.fusion
-"""
-
-EXAMPLES = r"""
-- name: Create new storage class foo
- purestorage.fusion.fusion_sc:
- name: foo
- size_limit: 100G
- iops_limit: 100000
- bw_limit: 25M
- storage_service: service1
- display_name: "test class"
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-
-- name: Update storage class (only display_name change is supported)
- purestorage.fusion.fusion_sc:
- name: foo
- display_name: "main class"
- storage_service: service1
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-
-- name: Delete storage class
- purestorage.fusion.fusion_sc:
- name: foo
- storage_service: service1
- state: absent
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-"""
-
-RETURN = r"""
-"""
-
-try:
- import fusion as purefusion
-except ImportError:
- pass
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.purestorage.fusion.plugins.module_utils.fusion import (
- fusion_argument_spec,
-)
-
-from ansible_collections.purestorage.fusion.plugins.module_utils.parsing import (
- parse_number_with_metric_suffix,
-)
-from ansible_collections.purestorage.fusion.plugins.module_utils.startup import (
- setup_fusion,
-)
-from ansible_collections.purestorage.fusion.plugins.module_utils.operations import (
- await_operation,
-)
-
-
-def get_sc(module, fusion):
- """Return Storage Class or None"""
- sc_api_instance = purefusion.StorageClassesApi(fusion)
- try:
- return sc_api_instance.get_storage_class(
- storage_class_name=module.params["name"],
- storage_service_name=module.params["storage_service"],
- )
- except purefusion.rest.ApiException:
- return None
-
-
-def create_sc(module, fusion):
- """Create Storage Class"""
-
- sc_api_instance = purefusion.StorageClassesApi(fusion)
-
- if not module.params["size_limit"]:
- module.params["size_limit"] = "4P"
- if not module.params["iops_limit"]:
- module.params["iops_limit"] = "100000000"
- if not module.params["bw_limit"]:
- module.params["bw_limit"] = "512G"
- size_limit = parse_number_with_metric_suffix(module, module.params["size_limit"])
- iops_limit = int(
- parse_number_with_metric_suffix(
- module, module.params["iops_limit"], factor=1000
- )
- )
- bw_limit = parse_number_with_metric_suffix(module, module.params["bw_limit"])
- if bw_limit < 1048576 or bw_limit > 549755813888: # 1MB/s to 512GB/s
- module.fail_json(msg="Bandwidth limit is not within the required range")
- if iops_limit < 100 or iops_limit > 100_000_000:
- module.fail_json(msg="IOPs limit is not within the required range")
- if size_limit < 1048576 or size_limit > 4503599627370496: # 1MB to 4PB
- module.fail_json(msg="Size limit is not within the required range")
-
- changed = True
- id = None
- if not module.check_mode:
- if not module.params["display_name"]:
- display_name = module.params["name"]
- else:
- display_name = module.params["display_name"]
- s_class = purefusion.StorageClassPost(
- name=module.params["name"],
- size_limit=size_limit,
- iops_limit=iops_limit,
- bandwidth_limit=bw_limit,
- display_name=display_name,
- )
- op = sc_api_instance.create_storage_class(
- s_class, storage_service_name=module.params["storage_service"]
- )
- res_op = await_operation(fusion, op)
- id = res_op.result.resource.id
-
- module.exit_json(changed=changed, id=id)
-
-
-def update_sc(module, fusion, s_class):
- """Update Storage Class settings"""
- changed = False
- sc_api_instance = purefusion.StorageClassesApi(fusion)
-
- if (
- module.params["display_name"]
- and module.params["display_name"] != s_class.display_name
- ):
- changed = True
- if not module.check_mode:
- sclass = purefusion.StorageClassPatch(
- display_name=purefusion.NullableString(module.params["display_name"])
- )
- op = sc_api_instance.update_storage_class(
- sclass,
- storage_service_name=module.params["storage_service"],
- storage_class_name=module.params["name"],
- )
- await_operation(fusion, op)
-
- module.exit_json(changed=changed, id=s_class.id)
-
-
-def delete_sc(module, fusion):
- """Delete Storage Class"""
- sc_api_instance = purefusion.StorageClassesApi(fusion)
- changed = True
- if not module.check_mode:
- op = sc_api_instance.delete_storage_class(
- storage_class_name=module.params["name"],
- storage_service_name=module.params["storage_service"],
- )
- await_operation(fusion, op)
-
- module.exit_json(changed=changed)
-
-
-def main():
- """Main code"""
- argument_spec = fusion_argument_spec()
- argument_spec.update(
- dict(
- name=dict(type="str", required=True),
- display_name=dict(type="str"),
- iops_limit=dict(type="str"),
- bw_limit=dict(type="str"),
- size_limit=dict(type="str"),
- storage_service=dict(type="str", required=True),
- state=dict(type="str", default="present", choices=["present", "absent"]),
- )
- )
-
- module = AnsibleModule(argument_spec, supports_check_mode=True)
- fusion = setup_fusion(module)
-
- state = module.params["state"]
- s_class = get_sc(module, fusion)
-
- if not s_class and state == "present":
- create_sc(module, fusion)
- elif s_class and state == "present":
- update_sc(module, fusion, s_class)
- elif s_class and state == "absent":
- delete_sc(module, fusion)
- else:
- module.exit_json(changed=False)
-
- module.exit_json(changed=False)
-
-
-if __name__ == "__main__":
- main()
diff --git a/ansible_collections/purestorage/fusion/plugins/modules/fusion_se.py b/ansible_collections/purestorage/fusion/plugins/modules/fusion_se.py
deleted file mode 100644
index 3a191a166..000000000
--- a/ansible_collections/purestorage/fusion/plugins/modules/fusion_se.py
+++ /dev/null
@@ -1,508 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# (c) 2023, Simon Dodsley (simon@purestorage.com), Jan Kodera (jkodera@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-DOCUMENTATION = r"""
----
-module: fusion_se
-version_added: '1.0.0'
-short_description: Manage storage endpoints in Pure Storage Fusion
-description:
-- Create or delete storage endpoints in Pure Storage Fusion.
-notes:
-- Supports C(check_mode).
-author:
-- Pure Storage Ansible Team (@sdodsley) <pure-ansible-team@purestorage.com>
-options:
- name:
- description:
- - The name of the storage endpoint.
- type: str
- required: true
- display_name:
- description:
- - The human name of the storage endpoint.
- - If not provided, defaults to I(name).
- type: str
- state:
- description:
- - Define whether the storage endpoint should exist or not.
- type: str
- default: present
- choices: [ absent, present ]
- region:
- description:
- - The name of the region the availability zone is in
- type: str
- required: true
- availability_zone:
- aliases: [ az ]
- description:
- - The name of the availability zone for the storage endpoint.
- type: str
- required: true
- endpoint_type:
- description:
- - "DEPRECATED: Will be removed in version 2.0.0"
- - Type of the storage endpoint. Only iSCSI is available at the moment.
- type: str
- iscsi:
- description:
- - List of discovery interfaces.
- type: list
- elements: dict
- suboptions:
- address:
- description:
- - IP address to be used in the subnet of the storage endpoint.
- - IP address must include a CIDR notation.
- - Only IPv4 is supported at the moment.
- type: str
- gateway:
- description:
- - Address of the subnet gateway.
- type: str
- network_interface_groups:
- description:
- - List of network interface groups to assign to the address.
- type: list
- elements: str
- cbs_azure_iscsi:
- description:
- - CBS Azure iSCSI
- type: dict
- suboptions:
- storage_endpoint_collection_identity:
- description:
- - The Storage Endpoint Collection Identity which belongs to the Azure entities.
- type: str
- load_balancer:
- description:
- - The Load Balancer id which gives permissions to CBS array applications to modify the Load Balancer.
- type: str
- load_balancer_addresses:
- description:
- - The IPv4 addresses of the Load Balancer.
- type: list
- elements: str
- network_interface_groups:
- description:
- - "DEPRECATED: Will be removed in version 2.0.0"
- - List of network interface groups to assign to the storage endpoints.
- type: list
- elements: str
- addresses:
- description:
- - "DEPRECATED: Will be removed in version 2.0.0"
- - List of IP addresses to be used in the subnet of the storage endpoint.
- - IP addresses must include a CIDR notation.
- - Only IPv4 is supported at the moment.
- type: list
- elements: str
- gateway:
- description:
- - "DEPRECATED: Will be removed in version 2.0.0"
- - Address of the subnet gateway.
- - Currently this must be provided.
- type: str
-
-extends_documentation_fragment:
-- purestorage.fusion.purestorage.fusion
-"""
-
-EXAMPLES = r"""
-- name: Create new storage endpoint foo in AZ bar
- purestorage.fusion.fusion_se:
- name: foo
- availability_zone: bar
- region: us-west
- iscsi:
- - address: 10.21.200.124/24
- gateway: 10.21.200.1
- network_interface_groups:
- - subnet-0
- - address: 10.21.200.36/24
- gateway: 10.21.200.2
- network_interface_groups:
- - subnet-0
- - subnet-1
- state: present
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-
-- name: Create new CBS storage endpoint foo in AZ bar
- purestorage.fusion.fusion_se:
- name: foo
- availability_zone: bar
- region: us-west
- cbs_azure_iscsi:
- storage_endpoint_collection_identity: "/subscriptions/sub/resourcegroups/sec/providers/ms/userAssignedIdentities/secId"
- load_balancer: "/subscriptions/sub/resourcegroups/sec/providers/ms/loadBalancers/sec-lb"
- load_balancer_addresses:
- - 10.21.200.1
- - 10.21.200.2
- state: present
- app_id: key_name
- key_file: "az-admin-private-key.pem"
-
-- name: Delete storage endpoint foo in AZ bar
- purestorage.fusion.fusion_se:
- name: foo
- availability_zone: bar
- region: us-west
- state: absent
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-
-- name: (DEPRECATED) Create new storage endpoint foo in AZ bar
- purestorage.fusion.fusion_se:
- name: foo
- availability_zone: bar
- gateway: 10.21.200.1
- region: us-west
- addresses:
- - 10.21.200.124/24
- - 10.21.200.36/24
- network_interface_groups:
- - subnet-0
- state: present
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-"""
-
-RETURN = r"""
-"""
-
-try:
- import fusion as purefusion
-except ImportError:
- pass
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.purestorage.fusion.plugins.module_utils.fusion import (
- fusion_argument_spec,
-)
-
-from ansible_collections.purestorage.fusion.plugins.module_utils.networking import (
- is_valid_network,
- is_valid_address,
-)
-from ansible_collections.purestorage.fusion.plugins.module_utils.startup import (
- setup_fusion,
-)
-from ansible_collections.purestorage.fusion.plugins.module_utils.operations import (
- await_operation,
-)
-
-
-#######################################################################
-# DEPRECATED CODE SECTION STARTS
-
-
-def create_se_old(module, fusion):
- """Create Storage Endpoint"""
-
- se_api_instance = purefusion.StorageEndpointsApi(fusion)
-
- changed = True
-
- if not module.check_mode:
- if not module.params["display_name"]:
- display_name = module.params["name"]
- else:
- display_name = module.params["display_name"]
- ifaces = []
- for address in module.params["addresses"]:
- if module.params["gateway"]:
- iface = purefusion.StorageEndpointIscsiDiscoveryInterfacePost(
- address=address,
- gateway=module.params["gateway"],
- network_interface_groups=module.params["network_interface_groups"],
- )
- else:
- iface = purefusion.StorageEndpointIscsiDiscoveryInterfacePost(
- address=address,
- network_interface_groups=module.params["network_interface_groups"],
- )
- ifaces.append(iface)
- op = purefusion.StorageEndpointPost(
- endpoint_type="iscsi",
- iscsi=purefusion.StorageEndpointIscsiPost(
- discovery_interfaces=ifaces,
- ),
- name=module.params["name"],
- display_name=display_name,
- )
- op = se_api_instance.create_storage_endpoint(
- op,
- region_name=module.params["region"],
- availability_zone_name=module.params["availability_zone"],
- )
- await_operation(fusion, op)
-
- module.exit_json(changed=changed)
-
-
-# DEPRECATED CODE SECTION ENDS
-#######################################################################
-
-
-def get_se(module, fusion):
- """Storage Endpoint or None"""
- se_api_instance = purefusion.StorageEndpointsApi(fusion)
- try:
- return se_api_instance.get_storage_endpoint(
- region_name=module.params["region"],
- storage_endpoint_name=module.params["name"],
- availability_zone_name=module.params["availability_zone"],
- )
- except purefusion.rest.ApiException:
- return None
-
-
-def create_se(module, fusion):
- """Create Storage Endpoint"""
- se_api_instance = purefusion.StorageEndpointsApi(fusion)
- id = None
- if not module.check_mode:
- endpoint_type = None
-
- iscsi = None
- if module.params["iscsi"] is not None:
- iscsi = purefusion.StorageEndpointIscsiPost(
- discovery_interfaces=[
- purefusion.StorageEndpointIscsiDiscoveryInterfacePost(**endpoint)
- for endpoint in module.params["iscsi"]
- ]
- )
- endpoint_type = "iscsi"
-
- cbs_azure_iscsi = None
- if module.params["cbs_azure_iscsi"] is not None:
- cbs_azure_iscsi = purefusion.StorageEndpointCbsAzureIscsiPost(
- storage_endpoint_collection_identity=module.params["cbs_azure_iscsi"][
- "storage_endpoint_collection_identity"
- ],
- load_balancer=module.params["cbs_azure_iscsi"]["load_balancer"],
- load_balancer_addresses=module.params["cbs_azure_iscsi"][
- "load_balancer_addresses"
- ],
- )
- endpoint_type = "cbs-azure-iscsi"
-
- op = se_api_instance.create_storage_endpoint(
- purefusion.StorageEndpointPost(
- name=module.params["name"],
- display_name=module.params["display_name"] or module.params["name"],
- endpoint_type=endpoint_type,
- iscsi=iscsi,
- cbs_azure_iscsi=cbs_azure_iscsi,
- ),
- region_name=module.params["region"],
- availability_zone_name=module.params["availability_zone"],
- )
- res_op = await_operation(fusion, op)
- id = res_op.result.resource.id
-
- module.exit_json(changed=True, id=id)
-
-
-def delete_se(module, fusion):
- """Delete Storage Endpoint"""
- se_api_instance = purefusion.StorageEndpointsApi(fusion)
- if not module.check_mode:
- op = se_api_instance.delete_storage_endpoint(
- region_name=module.params["region"],
- availability_zone_name=module.params["availability_zone"],
- storage_endpoint_name=module.params["name"],
- )
- await_operation(fusion, op)
- module.exit_json(changed=True)
-
-
-def update_se(module, fusion, se):
- """Update Storage Endpoint"""
-
- se_api_instance = purefusion.StorageEndpointsApi(fusion)
- patches = []
- if (
- module.params["display_name"]
- and module.params["display_name"] != se.display_name
- ):
- patch = purefusion.StorageEndpointPatch(
- display_name=purefusion.NullableString(module.params["display_name"]),
- )
- patches.append(patch)
-
- if not module.check_mode:
- for patch in patches:
- op = se_api_instance.update_storage_endpoint(
- patch,
- region_name=module.params["region"],
- availability_zone_name=module.params["availability_zone"],
- storage_endpoint_name=module.params["name"],
- )
- await_operation(fusion, op)
-
- changed = len(patches) != 0
-
- module.exit_json(changed=changed, id=se.id)
-
-
-def main():
- """Main code"""
- argument_spec = fusion_argument_spec()
- argument_spec.update(
- dict(
- name=dict(type="str", required=True),
- display_name=dict(type="str"),
- region=dict(type="str", required=True),
- availability_zone=dict(type="str", required=True, aliases=["az"]),
- iscsi=dict(
- type="list",
- elements="dict",
- options=dict(
- address=dict(type="str"),
- gateway=dict(type="str"),
- network_interface_groups=dict(type="list", elements="str"),
- ),
- ),
- cbs_azure_iscsi=dict(
- type="dict",
- options=dict(
- storage_endpoint_collection_identity=dict(type="str"),
- load_balancer=dict(type="str"),
- load_balancer_addresses=dict(type="list", elements="str"),
- ),
- ),
- state=dict(type="str", default="present", choices=["absent", "present"]),
- # deprecated, will be removed in 2.0.0
- endpoint_type=dict(
- type="str",
- removed_in_version="2.0.0",
- removed_from_collection="purestorage.fusion",
- ),
- addresses=dict(
- type="list",
- elements="str",
- removed_in_version="2.0.0",
- removed_from_collection="purestorage.fusion",
- ),
- gateway=dict(
- type="str",
- removed_in_version="2.0.0",
- removed_from_collection="purestorage.fusion",
- ),
- network_interface_groups=dict(
- type="list",
- elements="str",
- removed_in_version="2.0.0",
- removed_from_collection="purestorage.fusion",
- ),
- )
- )
-
- mutually_exclusive = [
- ("iscsi", "cbs_azure_iscsi"),
- # can not use both deprecated and new fields at the same time
- ("iscsi", "cbs_azure_iscsi", "addresses"),
- ("iscsi", "cbs_azure_iscsi", "gateway"),
- ("iscsi", "cbs_azure_iscsi", "network_interface_groups"),
- ]
-
- module = AnsibleModule(
- argument_spec,
- mutually_exclusive=mutually_exclusive,
- supports_check_mode=True,
- )
- fusion = setup_fusion(module)
-
- state = module.params["state"]
-
- if module.params["endpoint_type"] is not None:
- module.warn(
- "'endpoint_type' parameter is deprecated and will be removed in the version 2.0"
- )
-
- deprecated_parameters = {"addresses", "gateway", "network_interface_groups"}
- used_deprecated_parameters = [
- key
- for key in list(deprecated_parameters & module.params.keys())
- if module.params[key] is not None
- ]
-
- if len(used_deprecated_parameters) > 0:
- # user uses deprecated module interface
- for param_name in used_deprecated_parameters:
- module.warn(
- f"'{param_name}' parameter is deprecated and will be removed in the version 2.0"
- )
-
- if module.params["addresses"]:
- for address in module.params["addresses"]:
- if not is_valid_network(address):
- module.fail_json(
- msg=f"'{address}' is not a valid address in CIDR notation"
- )
-
- sendp = get_se(module, fusion)
-
- if state == "present" and not sendp:
- module.fail_on_missing_params(["addresses"])
- if not (module.params["addresses"]):
- module.fail_json(
- msg="At least one entry in 'addresses' is required to create new storage endpoint"
- )
- create_se_old(module, fusion)
- elif state == "present" and sendp:
- update_se(module, fusion, sendp)
- elif state == "absent" and sendp:
- delete_se(module, fusion)
- else:
- # user uses new module interface
- if module.params["iscsi"] is not None:
- for endpoint in module.params["iscsi"]:
- address = endpoint["address"]
- if not is_valid_network(address):
- module.fail_json(
- msg=f"'{address}' is not a valid address in CIDR notation"
- )
- gateway = endpoint["gateway"]
- if not is_valid_address(gateway):
- module.fail_json(
- msg=f"'{gateway}' is not a valid IPv4 address notation"
- )
- if module.params["cbs_azure_iscsi"] is not None:
- for address in module.params["cbs_azure_iscsi"]["load_balancer_addresses"]:
- if not is_valid_address(address):
- module.fail_json(
- msg=f"'{address}' is not a valid IPv4 address notation"
- )
-
- sendp = get_se(module, fusion)
-
- if state == "present" and not sendp:
- if (
- module.params["iscsi"] is None
- and module.params["cbs_azure_iscsi"] is None
- ):
- module.fail_json(
- msg="either 'iscsi' or `cbs_azure_iscsi` parameter is required when creating storage endpoint"
- )
- create_se(module, fusion)
- elif state == "present" and sendp:
- update_se(module, fusion, sendp)
- elif state == "absent" and sendp:
- delete_se(module, fusion)
-
- module.exit_json(changed=False)
-
-
-if __name__ == "__main__":
- main()
diff --git a/ansible_collections/purestorage/fusion/plugins/modules/fusion_ss.py b/ansible_collections/purestorage/fusion/plugins/modules/fusion_ss.py
deleted file mode 100644
index 4e6388249..000000000
--- a/ansible_collections/purestorage/fusion/plugins/modules/fusion_ss.py
+++ /dev/null
@@ -1,211 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# (c) 2022, Simon Dodsley (simon@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-DOCUMENTATION = r"""
----
-module: fusion_ss
-version_added: '1.0.0'
-short_description: Manage storage services in Pure Storage Fusion
-description:
-- Manage a storage services in Pure Storage Fusion.
-author:
-- Pure Storage Ansible Team (@sdodsley) <pure-ansible-team@purestorage.com>
-notes:
-- Supports C(check mode).
-options:
- name:
- description:
- - The name of the storage service.
- type: str
- required: true
- state:
- description:
- - Define whether the storage service should exist or not.
- default: present
- choices: [ present, absent ]
- type: str
- display_name:
- description:
- - The human name of the storage service.
- - If not provided, defaults to I(name).
- type: str
- hardware_types:
- description:
- - Hardware types to which the storage service applies.
- type: list
- elements: str
- choices: [ flash-array-x, flash-array-c, flash-array-x-optane, flash-array-xl ]
-extends_documentation_fragment:
-- purestorage.fusion.purestorage.fusion
-"""
-
-EXAMPLES = r"""
-- name: Create new storage service foo
- purestorage.fusion.fusion_ss:
- name: foo
- hardware_types:
- - flash-array-x
- - flash-array-x-optane
- display_name: "test class"
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-
-- name: Update storage service
- purestorage.fusion.fusion_ss:
- name: foo
- display_name: "main class"
- hardware_types:
- - flash-array-c
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-
-- name: Delete storage service
- purestorage.fusion.fusion_ss:
- name: foo
- state: absent
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-"""
-
-RETURN = r"""
-"""
-
-try:
- import fusion as purefusion
-except ImportError:
- pass
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.purestorage.fusion.plugins.module_utils.fusion import (
- fusion_argument_spec,
-)
-from ansible_collections.purestorage.fusion.plugins.module_utils.startup import (
- setup_fusion,
-)
-from ansible_collections.purestorage.fusion.plugins.module_utils import getters
-from ansible_collections.purestorage.fusion.plugins.module_utils.operations import (
- await_operation,
-)
-
-
-def get_ss(module, fusion):
- """Return Storage Service or None"""
- return getters.get_ss(module, fusion, storage_service_name=module.params["name"])
-
-
-def create_ss(module, fusion):
- """Create Storage Service"""
-
- ss_api_instance = purefusion.StorageServicesApi(fusion)
-
- changed = True
- id = None
- if not module.check_mode:
- if not module.params["display_name"]:
- display_name = module.params["name"]
- else:
- display_name = module.params["display_name"]
- s_service = purefusion.StorageServicePost(
- name=module.params["name"],
- display_name=display_name,
- hardware_types=module.params["hardware_types"],
- )
- op = ss_api_instance.create_storage_service(s_service)
- res_op = await_operation(fusion, op)
- id = res_op.result.resource.id
-
- module.exit_json(changed=changed, id=id)
-
-
-def delete_ss(module, fusion):
- """Delete Storage Service"""
-
- ss_api_instance = purefusion.StorageServicesApi(fusion)
-
- changed = True
- if not module.check_mode:
- op = ss_api_instance.delete_storage_service(
- storage_service_name=module.params["name"]
- )
- await_operation(fusion, op)
-
- module.exit_json(changed=changed)
-
-
-def update_ss(module, fusion, ss):
- """Update Storage Service"""
-
- ss_api_instance = purefusion.StorageServicesApi(fusion)
- patches = []
- if (
- module.params["display_name"]
- and module.params["display_name"] != ss.display_name
- ):
- patch = purefusion.StorageServicePatch(
- display_name=purefusion.NullableString(module.params["display_name"]),
- )
- patches.append(patch)
-
- id = None
- if not module.check_mode:
- for patch in patches:
- op = ss_api_instance.update_storage_service(
- patch,
- storage_service_name=module.params["name"],
- )
- await_operation(fusion, op)
-
- changed = len(patches) != 0
-
- module.exit_json(changed=changed, id=ss.id)
-
-
-def main():
- """Main code"""
- argument_spec = fusion_argument_spec()
- argument_spec.update(
- dict(
- name=dict(type="str", required=True),
- display_name=dict(type="str"),
- hardware_types=dict(
- type="list",
- elements="str",
- choices=[
- "flash-array-x",
- "flash-array-c",
- "flash-array-x-optane",
- "flash-array-xl",
- ],
- ),
- state=dict(type="str", default="present", choices=["present", "absent"]),
- )
- )
-
- module = AnsibleModule(argument_spec, supports_check_mode=True)
- fusion = setup_fusion(module)
-
- state = module.params["state"]
- s_service = get_ss(module, fusion)
-
- if not s_service and state == "present":
- module.fail_on_missing_params(["hardware_types"])
- create_ss(module, fusion)
- elif s_service and state == "present":
- update_ss(module, fusion, s_service)
- elif s_service and state == "absent":
- delete_ss(module, fusion)
- else:
- module.exit_json(changed=False)
-
- module.exit_json(changed=False)
-
-
-if __name__ == "__main__":
- main()
diff --git a/ansible_collections/purestorage/fusion/plugins/modules/fusion_tenant.py b/ansible_collections/purestorage/fusion/plugins/modules/fusion_tenant.py
deleted file mode 100644
index 85224a6c5..000000000
--- a/ansible_collections/purestorage/fusion/plugins/modules/fusion_tenant.py
+++ /dev/null
@@ -1,171 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# (c) 2022, Simon Dodsley (simon@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-DOCUMENTATION = r"""
----
-module: fusion_tenant
-version_added: '1.0.0'
-short_description: Manage tenants in Pure Storage Fusion
-description:
-- Create,delete or update a tenant in Pure Storage Fusion.
-author:
-- Pure Storage Ansible Team (@sdodsley) <pure-ansible-team@purestorage.com>
-notes:
-- Supports C(check mode).
-options:
- name:
- description:
- - The name of the tenant.
- type: str
- required: true
- state:
- description:
- - Define whether the tenant should exist or not.
- default: present
- choices: [ present, absent ]
- type: str
- display_name:
- description:
- - The human name of the tenant.
- - If not provided, defaults to I(name).
- type: str
-extends_documentation_fragment:
-- purestorage.fusion.purestorage.fusion
-"""
-
-EXAMPLES = r"""
-- name: Create new tenat foo
- purestorage.fusion.fusion_tenant:
- name: foo
- display_name: "tenant foo"
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-
-- name: Delete tenat foo
- purestorage.fusion.fusion_tenant:
- name: foo
- state: absent
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-"""
-
-RETURN = r"""
-"""
-
-try:
- import fusion as purefusion
-except ImportError:
- pass
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.purestorage.fusion.plugins.module_utils.fusion import (
- fusion_argument_spec,
-)
-from ansible_collections.purestorage.fusion.plugins.module_utils.startup import (
- setup_fusion,
-)
-from ansible_collections.purestorage.fusion.plugins.module_utils import getters
-from ansible_collections.purestorage.fusion.plugins.module_utils.operations import (
- await_operation,
-)
-
-
-def get_tenant(module, fusion):
- """Return Tenant or None"""
- return getters.get_tenant(module, fusion, tenant_name=module.params["name"])
-
-
-def create_tenant(module, fusion):
- """Create Tenant"""
-
- api_instance = purefusion.TenantsApi(fusion)
- changed = True
- id = None
- if not module.check_mode:
- if not module.params["display_name"]:
- display_name = module.params["name"]
- else:
- display_name = module.params["display_name"]
- tenant = purefusion.TenantPost(
- name=module.params["name"],
- display_name=display_name,
- )
- op = api_instance.create_tenant(tenant)
- res_op = await_operation(fusion, op)
- id = res_op.result.resource.id
-
- module.exit_json(changed=changed, id=id)
-
-
-def update_tenant(module, fusion, tenant):
- """Update Tenant settings"""
- changed = False
- api_instance = purefusion.TenantsApi(fusion)
-
- if (
- module.params["display_name"]
- and module.params["display_name"] != tenant.display_name
- ):
- changed = True
- if not module.check_mode:
- new_tenant = purefusion.TenantPatch(
- display_name=purefusion.NullableString(module.params["display_name"]),
- )
- op = api_instance.update_tenant(
- new_tenant,
- tenant_name=module.params["name"],
- )
- await_operation(fusion, op)
-
- module.exit_json(changed=changed, id=tenant.id)
-
-
-def delete_tenant(module, fusion):
- """Delete Tenant"""
- changed = True
- api_instance = purefusion.TenantsApi(fusion)
- if not module.check_mode:
- op = api_instance.delete_tenant(tenant_name=module.params["name"])
- await_operation(fusion, op)
-
- module.exit_json(changed=changed)
-
-
-def main():
- """Main code"""
- argument_spec = fusion_argument_spec()
- argument_spec.update(
- dict(
- name=dict(type="str", required=True),
- display_name=dict(type="str"),
- state=dict(type="str", default="present", choices=["present", "absent"]),
- )
- )
-
- module = AnsibleModule(argument_spec, supports_check_mode=True)
- fusion = setup_fusion(module)
-
- state = module.params["state"]
- tenant = get_tenant(module, fusion)
-
- if not tenant and state == "present":
- create_tenant(module, fusion)
- elif tenant and state == "present":
- update_tenant(module, fusion, tenant)
- elif tenant and state == "absent":
- delete_tenant(module, fusion)
- else:
- module.exit_json(changed=False)
-
- module.exit_json(changed=False)
-
-
-if __name__ == "__main__":
- main()
diff --git a/ansible_collections/purestorage/fusion/plugins/modules/fusion_tn.py b/ansible_collections/purestorage/fusion/plugins/modules/fusion_tn.py
deleted file mode 100644
index 717b1e46f..000000000
--- a/ansible_collections/purestorage/fusion/plugins/modules/fusion_tn.py
+++ /dev/null
@@ -1,122 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# (c) 2022, Simon Dodsley (simon@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-DOCUMENTATION = r"""
----
-module: fusion_tn
-version_added: '1.0.0'
-deprecated:
- removed_at_date: "2023-07-26"
- why: Tenant Networks were removed as a concept in Pure Storage Fusion
- alternative: most of the functionality can be replicated using M(purestorage.fusion.fusion_se) and M(purestorage.fusion.fusion_nig)
-short_description: Manage tenant networks in Pure Storage Fusion
-description:
-- Create or delete tenant networks in Pure Storage Fusion.
-notes:
-- Supports C(check_mode).
-- Currently this only supports a single tenant subnet per tenant network.
-author:
-- Pure Storage Ansible Team (@sdodsley) <pure-ansible-team@purestorage.com>
-options:
- name:
- description:
- - The name of the tenant network.
- type: str
- display_name:
- description:
- - The human name of the tenant network.
- - If not provided, defaults to I(name).
- type: str
- state:
- description:
- - Define whether the tenant network should exist or not.
- type: str
- default: present
- choices: [ absent, present ]
- region:
- description:
- - The name of the region the availability zone is in
- type: str
- availability_zone:
- aliases: [ az ]
- description:
- - The name of the availability zone for the tenant network.
- type: str
- provider_subnets:
- description:
- - List of provider subnets to assign to the tenant networks subnet.
- type: list
- elements: str
- addresses:
- description:
- - List of IP addresses to be used in the subnet of the tenant network.
- - IP addresses must include a CIDR notation.
- - IPv4 and IPv6 are fully supported.
- type: list
- elements: str
- gateway:
- description:
- - Address of the subnet gateway.
- - Currently this must be provided.
- type: str
- mtu:
- description:
- - MTU setting for the subnet.
- default: 1500
- type: int
- prefix:
- description:
- - Network prefix in CIDR format.
- - This will be deprecated soon.
- type: str
-extends_documentation_fragment:
-- purestorage.fusion.purestorage.fusion
-"""
-
-# this module does nothing, thus no example is provided
-EXAMPLES = r"""
-"""
-
-RETURN = r"""
-"""
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.purestorage.fusion.plugins.module_utils.fusion import (
- fusion_argument_spec,
-)
-
-
-def main():
- """Main code"""
- argument_spec = fusion_argument_spec()
- argument_spec.update(
- dict(
- name=dict(type="str"),
- region=dict(type="str"),
- display_name=dict(type="str"),
- availability_zone=dict(type="str", aliases=["az"]),
- prefix=dict(type="str"),
- gateway=dict(type="str"),
- mtu=dict(type="int", default=1500),
- provider_subnets=dict(type="list", elements="str"),
- addresses=dict(type="list", elements="str"),
- state=dict(type="str", default="present", choices=["absent", "present"]),
- )
- )
- module = AnsibleModule(argument_spec, supports_check_mode=True)
- module.warn(
- "This module is deprecated, doesn't work, and will be removed in the version 2.0."
- " Please, use purestorage.fusion.fusion_se and purestorage.fusion.fusion_nig instead."
- )
- module.exit_json(changed=False)
-
-
-if __name__ == "__main__":
- main()
diff --git a/ansible_collections/purestorage/fusion/plugins/modules/fusion_ts.py b/ansible_collections/purestorage/fusion/plugins/modules/fusion_ts.py
deleted file mode 100644
index ac60476bc..000000000
--- a/ansible_collections/purestorage/fusion/plugins/modules/fusion_ts.py
+++ /dev/null
@@ -1,189 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# (c) 2022, Simon Dodsley (simon@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-DOCUMENTATION = r"""
----
-module: fusion_ts
-version_added: '1.0.0'
-short_description: Manage tenant spaces in Pure Storage Fusion
-description:
-- Create, update or delete a tenant spaces in Pure Storage Fusion.
-author:
-- Pure Storage Ansible Team (@sdodsley) <pure-ansible-team@purestorage.com>
-notes:
-- Supports C(check mode).
-options:
- name:
- description:
- - The name of the tenant space.
- type: str
- required: true
- display_name:
- description:
- - The human name of the tenant space.
- - If not provided, defaults to I(name).
- type: str
- state:
- description:
- - Define whether the tenant space should exist or not.
- type: str
- default: present
- choices: [ absent, present ]
- tenant:
- description:
- - The name of the tenant.
- type: str
- required: true
-extends_documentation_fragment:
-- purestorage.fusion.purestorage.fusion
-"""
-
-EXAMPLES = r"""
-- name: Create new tenant space foo for tenant bar
- purestorage.fusion.fusion_ts:
- name: foo
- tenant: bar
- state: present
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-
-- name: Delete tenant space foo in tenant bar
- purestorage.fusion.fusion_ts:
- name: foo
- tenant: bar
- state: absent
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-"""
-
-RETURN = r"""
-"""
-
-try:
- import fusion as purefusion
-except ImportError:
- pass
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.purestorage.fusion.plugins.module_utils.fusion import (
- fusion_argument_spec,
-)
-from ansible_collections.purestorage.fusion.plugins.module_utils.startup import (
- setup_fusion,
-)
-from ansible_collections.purestorage.fusion.plugins.module_utils import getters
-from ansible_collections.purestorage.fusion.plugins.module_utils.operations import (
- await_operation,
-)
-
-
-def get_ts(module, fusion):
- """Tenant Space or None"""
- return getters.get_ts(module, fusion, tenant_space_name=module.params["name"])
-
-
-def create_ts(module, fusion):
- """Create Tenant Space"""
-
- ts_api_instance = purefusion.TenantSpacesApi(fusion)
-
- changed = True
- id = None
- if not module.check_mode:
- if not module.params["display_name"]:
- display_name = module.params["name"]
- else:
- display_name = module.params["display_name"]
- tspace = purefusion.TenantSpacePost(
- name=module.params["name"],
- display_name=display_name,
- )
- op = ts_api_instance.create_tenant_space(
- tspace,
- tenant_name=module.params["tenant"],
- )
- res_op = await_operation(fusion, op)
- id = res_op.result.resource.id
-
- module.exit_json(changed=changed, id=id)
-
-
-def update_ts(module, fusion, ts):
- """Update Tenant Space"""
-
- ts_api_instance = purefusion.TenantSpacesApi(fusion)
- patches = []
- if (
- module.params["display_name"]
- and module.params["display_name"] != ts.display_name
- ):
- patch = purefusion.TenantSpacePatch(
- display_name=purefusion.NullableString(module.params["display_name"]),
- )
- patches.append(patch)
-
- if not module.check_mode:
- for patch in patches:
- op = ts_api_instance.update_tenant_space(
- patch,
- tenant_name=module.params["tenant"],
- tenant_space_name=module.params["name"],
- )
- await_operation(fusion, op)
-
- changed = len(patches) != 0
-
- module.exit_json(changed=changed, id=ts.id)
-
-
-def delete_ts(module, fusion):
- """Delete Tenant Space"""
- changed = True
- ts_api_instance = purefusion.TenantSpacesApi(fusion)
- if not module.check_mode:
- op = ts_api_instance.delete_tenant_space(
- tenant_name=module.params["tenant"],
- tenant_space_name=module.params["name"],
- )
- await_operation(fusion, op)
-
- module.exit_json(changed=changed)
-
-
-def main():
- """Main code"""
- argument_spec = fusion_argument_spec()
- argument_spec.update(
- dict(
- name=dict(type="str", required=True),
- display_name=dict(type="str"),
- tenant=dict(type="str", required=True),
- state=dict(type="str", default="present", choices=["absent", "present"]),
- )
- )
-
- module = AnsibleModule(argument_spec, supports_check_mode=True)
- fusion = setup_fusion(module)
-
- state = module.params["state"]
- tspace = get_ts(module, fusion)
-
- if state == "present" and not tspace:
- create_ts(module, fusion)
- elif state == "present" and tspace:
- update_ts(module, fusion, tspace)
- elif state == "absent" and tspace:
- delete_ts(module, fusion)
-
- module.exit_json(changed=False)
-
-
-if __name__ == "__main__":
- main()
diff --git a/ansible_collections/purestorage/fusion/plugins/modules/fusion_volume.py b/ansible_collections/purestorage/fusion/plugins/modules/fusion_volume.py
deleted file mode 100644
index 38dee8650..000000000
--- a/ansible_collections/purestorage/fusion/plugins/modules/fusion_volume.py
+++ /dev/null
@@ -1,559 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# (c) 2023, Simon Dodsley (simon@purestorage.com), Jan Kodera (jkodera@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-DOCUMENTATION = r"""
----
-module: fusion_volume
-version_added: '1.0.0'
-short_description: Manage volumes in Pure Storage Fusion
-description:
-- Create, update or delete a volume in Pure Storage Fusion.
-author:
-- Pure Storage Ansible Team (@sdodsley) <pure-ansible-team@purestorage.com>
-notes:
-- Supports C(check mode).
-options:
- name:
- description:
- - The name of the volume.
- type: str
- required: true
- display_name:
- description:
- - The human name of the volume.
- - If not provided, defaults to I(name).
- type: str
- state:
- description:
- - Define whether the volume should exist or not.
- type: str
- default: present
- choices: [ absent, present ]
- tenant:
- description:
- - The name of the tenant.
- type: str
- required: true
- tenant_space:
- description:
- - The name of the tenant space.
- type: str
- required: true
- eradicate:
- description:
- - "Wipes the volume instead of a soft delete if true. Must be used with `state: absent`."
- type: bool
- default: false
- size:
- description:
- - Volume size in M, G, T or P units.
- type: str
- storage_class:
- description:
- - The name of the storage class.
- type: str
- placement_group:
- description:
- - The name of the placement group.
- type: str
- protection_policy:
- description:
- - The name of the protection policy.
- type: str
- host_access_policies:
- description:
- - 'A list of host access policies to connect the volume to.
- To clear, assign empty list: host_access_policies: []'
- type: list
- elements: str
- source_volume:
- description:
- - The source volume name. It must live within the same tenant space.
- Cannot be used together with `source_snapshot` or `source_volume_snapshot`.
- type: str
- source_snapshot:
- description:
- - The source snapshot name. It must live within the same tenant space.
- Cannot be used together with `source_volume`.
- type: str
- source_volume_snapshot:
- description:
- - The source volume snapshot name. It must live within the same tenant space.
- Cannot be used together with `source_volume`.
- type: str
- rename:
- description:
- - New name for volume.
- type: str
-extends_documentation_fragment:
-- purestorage.fusion.purestorage.fusion
-"""
-
-EXAMPLES = r"""
-- name: Create new volume named foo in storage_class fred
- purestorage.fusion.fusion_volume:
- name: foo
- storage_class: fred
- placement_group: pg
- size: 1T
- tenant: test
- tenant_space: space_1
- state: present
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-
-- name: Create new volume based on a volume from the same tenant space
- purestorage.fusion.fusion_volume:
- name: foo
- storage_class: fred
- placement_group: pg
- tenant: test
- tenant_space: space_1
- state: present
- source_volume: "original_volume_name"
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-
-- name: Create new volume based on a volume snapshot from the same tenant space
- purestorage.fusion.fusion_volume:
- name: foo
- storage_class: fred
- placement_group: pg
- tenant: test
- tenant_space: space_1
- state: present
- source_snapshot: "snap"
- source_volume_snapshot: "vol_snap"
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-
-- name: Extend the size of an existing volume named foo
- purestorage.fusion.fusion_volume:
- name: foo
- size: 2T
- tenant: test
- tenant_space: space_1
- state: present
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-
-- name: Delete volume named foo
- purestorage.fusion.fusion_volume:
- name: foo
- tenant: test
- tenant_space: space_1
- state: absent
- issuer_id: key_name
- private_key_file: "az-admin-private-key.pem"
-"""
-
-RETURN = r"""
-"""
-
-from ansible_collections.purestorage.fusion.plugins.module_utils.operations import (
- await_operation,
-)
-from ansible_collections.purestorage.fusion.plugins.module_utils.startup import (
- setup_fusion,
-)
-from ansible_collections.purestorage.fusion.plugins.module_utils.parsing import (
- parse_number_with_metric_suffix,
-)
-from ansible_collections.purestorage.fusion.plugins.module_utils.fusion import (
- fusion_argument_spec,
-)
-from ansible.module_utils.basic import AnsibleModule
-
-try:
- import fusion as purefusion
-except ImportError:
- pass
-
-
-def get_volume(module, fusion):
- """Return Volume or None"""
- volume_api_instance = purefusion.VolumesApi(fusion)
- try:
- return volume_api_instance.get_volume(
- tenant_name=module.params["tenant"],
- tenant_space_name=module.params["tenant_space"],
- volume_name=module.params["name"],
- )
- except purefusion.rest.ApiException:
- return None
-
-
-def get_wanted_haps(module):
- """Return set of host access policies to assign"""
- if not module.params["host_access_policies"]:
- return set()
- # looks like yaml parsing can leave in some spaces if coma-delimited .so strip() the names
- return set([hap.strip() for hap in module.params["host_access_policies"]])
-
-
-def extract_current_haps(volume):
- """Return set of host access policies that volume currently has"""
- if not volume.host_access_policies:
- return set()
- return set([hap.name for hap in volume.host_access_policies])
-
-
-def create_volume(module, fusion):
- """Create Volume"""
- id = None
- if not module.check_mode:
- display_name = module.params["display_name"] or module.params["name"]
- volume_api_instance = purefusion.VolumesApi(fusion)
- source_link = get_source_link_from_parameters(module.params)
- volume = purefusion.VolumePost(
- size=None # when cloning a volume, size is not required
- if source_link
- else parse_number_with_metric_suffix(module, module.params["size"]),
- storage_class=module.params["storage_class"],
- placement_group=module.params["placement_group"],
- name=module.params["name"],
- display_name=display_name,
- protection_policy=module.params["protection_policy"],
- source_link=source_link,
- )
- op = volume_api_instance.create_volume(
- volume,
- tenant_name=module.params["tenant"],
- tenant_space_name=module.params["tenant_space"],
- )
- res_op = await_operation(fusion, op)
- id = res_op.result.resource.id
- return True, id
-
-
-def update_host_access_policies(module, current, patches):
- wanted = module.params
- # 'wanted[...] is not None' to differentiate between empty list and no list
- if wanted["host_access_policies"] is not None:
- current_haps = extract_current_haps(current)
- wanted_haps = get_wanted_haps(module)
- if wanted_haps != current_haps:
- patch = purefusion.VolumePatch(
- host_access_policies=purefusion.NullableString(",".join(wanted_haps))
- )
- patches.append(patch)
-
-
-def update_destroyed(module, current, patches):
- wanted = module.params
- destroyed = wanted["state"] != "present"
- if destroyed != current.destroyed:
- patch = purefusion.VolumePatch(destroyed=purefusion.NullableBoolean(destroyed))
- patches.append(patch)
- if destroyed and not module.params["eradicate"]:
- module.warn(
- (
- "Volume '{0}' is being soft deleted to prevent data loss, "
- "if you want to wipe it immediately to reclaim used space, add 'eradicate: true'"
- ).format(current.name)
- )
-
-
-def update_display_name(module, current, patches):
- wanted = module.params
- if wanted["display_name"] and wanted["display_name"] != current.display_name:
- patch = purefusion.VolumePatch(
- display_name=purefusion.NullableString(wanted["display_name"])
- )
- patches.append(patch)
-
-
-def update_storage_class(module, current, patches):
- wanted = module.params
- if (
- wanted["storage_class"]
- and wanted["storage_class"] != current.storage_class.name
- ):
- patch = purefusion.VolumePatch(
- storage_class=purefusion.NullableString(wanted["storage_class"])
- )
- patches.append(patch)
-
-
-def update_placement_group(module, current, patches):
- wanted = module.params
- if (
- wanted["placement_group"]
- and wanted["placement_group"] != current.placement_group.name
- ):
- patch = purefusion.VolumePatch(
- placement_group=purefusion.NullableString(wanted["placement_group"])
- )
- patches.append(patch)
-
-
-def update_size(module, current, patches):
- wanted = module.params
- if wanted["size"]:
- wanted_size = parse_number_with_metric_suffix(module, wanted["size"])
- if wanted_size != current.size:
- patch = purefusion.VolumePatch(size=purefusion.NullableSize(wanted_size))
- patches.append(patch)
-
-
-def update_protection_policy(module, current, patches):
- wanted = module.params
- current_policy = current.protection_policy.name if current.protection_policy else ""
- if (
- wanted["protection_policy"] is not None
- and wanted["protection_policy"] != current_policy
- ):
- patch = purefusion.VolumePatch(
- protection_policy=purefusion.NullableString(wanted["protection_policy"])
- )
- patches.append(patch)
-
-
-def update_source_link(module, fusion, current, patches):
- source_link = get_source_link_from_parameters(module.params)
- if source_link is not None and (
- current.source is None or current.source.self_link != source_link
- ):
- patch = purefusion.VolumePatch(
- source_link=purefusion.NullableString(source_link)
- )
- patches.append(patch)
-
-
-def apply_patches(module, fusion, patches):
- volume_api_instance = purefusion.VolumesApi(fusion)
- for patch in patches:
- op = volume_api_instance.update_volume(
- patch,
- volume_name=module.params["name"],
- tenant_name=module.params["tenant"],
- tenant_space_name=module.params["tenant_space"],
- )
- await_operation(fusion, op)
-
-
-def update_volume(module, fusion):
- """Update Volume size, placement group, protection policy, storage class, HAPs"""
- current = get_volume(module, fusion)
- patches = []
-
- if not current:
- # cannot update nonexistent volume
- # Note for check mode: the reasons this codepath is ran in check mode
- # is to catch any argument errors and to compute 'changed'. Basically
- # all argument checks are kept in validate_arguments() to filter the
- # first part. The second part MAY diverge flow from the real run here if
- # create_volume() created the volume and update was then run to update
- # its properties. HOWEVER we don't really care in that case because
- # create_volume() already sets 'changed' to true, so any 'changed'
- # result from update_volume() would not change it.
- return False
-
- # volumes with 'destroyed' flag are kinda special because we can't change
- # most of their properties while in this state, so we need to set it last
- # and unset it first if changed, respectively
- if module.params["state"] == "present":
- update_destroyed(module, current, patches)
- update_size(module, current, patches)
- update_protection_policy(module, current, patches)
- update_display_name(module, current, patches)
- update_storage_class(module, current, patches)
- update_placement_group(module, current, patches)
- update_host_access_policies(module, current, patches)
- update_source_link(module, fusion, current, patches)
- elif module.params["state"] == "absent" and not current.destroyed:
- update_size(module, current, patches)
- update_protection_policy(module, current, patches)
- update_display_name(module, current, patches)
- update_storage_class(module, current, patches)
- update_placement_group(module, current, patches)
- update_host_access_policies(module, current, patches)
- update_source_link(module, fusion, current, patches)
- update_destroyed(module, current, patches)
-
- if not module.check_mode:
- apply_patches(module, fusion, patches)
-
- changed = len(patches) != 0
- return changed
-
-
-def eradicate_volume(module, fusion):
- """Eradicate Volume"""
- current = get_volume(module, fusion)
- if module.check_mode:
- return current or module.params["state"] == "present"
- if not current:
- return False
-
- # update_volume() should be called before eradicate=True and it should
- # ensure the volume is destroyed and HAPs are unassigned
- if not current.destroyed or current.host_access_policies:
- module.fail_json(
- msg="BUG: inconsistent state, eradicate_volume() cannot be called with current.destroyed=False or any host_access_policies"
- )
-
- volume_api_instance = purefusion.VolumesApi(fusion)
- op = volume_api_instance.delete_volume(
- volume_name=module.params["name"],
- tenant_name=module.params["tenant"],
- tenant_space_name=module.params["tenant_space"],
- )
- await_operation(fusion, op)
-
- return True
-
-
-def get_source_link_from_parameters(params):
- tenant = params["tenant"]
- tenant_space = params["tenant_space"]
- volume = params["source_volume"]
- snapshot = params["source_snapshot"]
- volume_snapshot = params["source_volume_snapshot"]
- if (
- tenant is None or tenant_space is None
- ): # should not happen as those parameters are always required by the ansible module
- return None
- if volume is not None:
- return f"/tenants/{tenant}/tenant-spaces/{tenant_space}/volumes/{volume}"
- if snapshot is not None and volume_snapshot is not None:
- return f"/tenants/{tenant}/tenant-spaces/{tenant_space}/snapshots/{snapshot}/volume-snapshots/{volume_snapshot}"
- return None
-
-
-def validate_arguments(module, volume):
- """Validates most argument conditions and possible unacceptable argument combinations"""
- state = module.params["state"]
-
- if state == "present" and not volume:
- module.fail_on_missing_params(["placement_group", "storage_class"])
-
- if (
- module.params["size"] is None
- and module.params["source_volume"] is None
- and module.params["source_snapshot"] is None
- ):
- module.fail_json(
- msg="Either `size`, `source_volume` or `source_snapshot` parameter is required when creating a volume."
- )
-
- if module.params["state"] == "absent" and (
- module.params["host_access_policies"]
- or (
- module.params["host_access_policies"] is None
- and volume
- and volume.host_access_policies
- )
- ):
- module.fail_json(
- msg=(
- "Volume must have no host access policies when destroyed, either revert the delete "
- "by setting 'state: present' or remove all HAPs by 'host_access_policies: []'"
- )
- )
-
- if state == "present" and module.params["eradicate"]:
- module.fail_json(
- msg="'eradicate: true' cannot be used together with 'state: present'"
- )
-
- if module.params["size"] is not None:
- size = parse_number_with_metric_suffix(module, module.params["size"])
- if size < 1048576 or size > 4503599627370496: # 1MB to 4PB
- module.fail_json(
- msg="Size is not within the required range, size must be between 1MB and 4PB"
- )
-
-
-def main():
- """Main code"""
- argument_spec = fusion_argument_spec()
- deprecated_hosts = dict(
- name="hosts", date="2023-07-26", collection_name="purefusion.fusion"
- )
- argument_spec.update(
- dict(
- name=dict(type="str", required=True),
- display_name=dict(type="str"),
- rename=dict(
- type="str",
- removed_at_date="2023-07-26",
- removed_from_collection="purestorage.fusion",
- ),
- tenant=dict(type="str", required=True),
- tenant_space=dict(type="str", required=True),
- placement_group=dict(type="str"),
- storage_class=dict(type="str"),
- protection_policy=dict(type="str"),
- host_access_policies=dict(
- type="list", elements="str", deprecated_aliases=[deprecated_hosts]
- ),
- eradicate=dict(type="bool", default=False),
- state=dict(type="str", default="present", choices=["absent", "present"]),
- size=dict(type="str"),
- source_volume=dict(type="str"),
- source_snapshot=dict(type="str"),
- source_volume_snapshot=dict(type="str"),
- )
- )
-
- required_by = {
- "placement_group": "storage_class",
- }
-
- mutually_exclusive = [
- # a new volume cannot be based on a volume and a snapshot at the same time
- # also, when cloning a volume, size of original volume is used
- ("source_volume", "source_snapshot", "size"),
- ]
-
- required_together = [
- # when creating a volume from snapshot, we need to know both snapshot name and snapshot volume name
- ("source_snapshot", "source_volume_snapshot"),
- ]
-
- module = AnsibleModule(
- argument_spec,
- required_by=required_by,
- mutually_exclusive=mutually_exclusive,
- required_together=required_together,
- supports_check_mode=True,
- )
- fusion = setup_fusion(module)
-
- state = module.params["state"]
-
- volume = get_volume(module, fusion)
-
- validate_arguments(module, volume)
-
- if state == "absent" and not volume:
- module.exit_json(changed=False)
-
- changed = False
- id = None
- if volume is not None:
- id = volume.id
- if state == "present" and not volume:
- changed, id = create_volume(module, fusion)
- # volume might exist even if soft-deleted, so we still have to update it
- changed = changed | update_volume(module, fusion)
- if module.params["eradicate"]:
- changed = changed | eradicate_volume(module, fusion)
- module.exit_json(changed=changed)
-
- if id is not None:
- module.exit_json(changed=changed, id=id)
-
- module.exit_json(changed=changed)
-
-
-if __name__ == "__main__":
- main()
diff --git a/ansible_collections/purestorage/fusion/test/config.yaml b/ansible_collections/purestorage/fusion/test/config.yaml
deleted file mode 100644
index 9e402bda7..000000000
--- a/ansible_collections/purestorage/fusion/test/config.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-modules:
- python_requires: ">=3.6"
diff --git a/ansible_collections/purestorage/fusion/tests/functional/README.md b/ansible_collections/purestorage/fusion/tests/functional/README.md
deleted file mode 100644
index d7edc6609..000000000
--- a/ansible_collections/purestorage/fusion/tests/functional/README.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# Functional tests
-
-Functional tests aims at testing each module as a whole.
-They make sure the module parses given parameters into correct API calls.
-
-Specific functions of modules should be tested in Unit tests.
-
-## Running tests
-
-```bash
-pytest tests/functional
-```
-
-## Adding new tests
-
-Every module tested should consist (at least) of the following cases:
-
-- test_module_fails_on_wrong_parameters
-- test_NAME_create_name
-- test_NAME_create_without_display_name
-- test_NAME_create_exception
-- test_NAME_create_op_fails
-- test_NAME_create_op_exception
-- test_NAME_update
-- test_NAME_update_exception
-- test_NAME_update_op_fails
-- test_NAME_update_op_exception
-- test_NAME_present_not_changed
-- test_NAME_absent_not_changed
-- test_NAME_delete
-- test_NAME_delete_exception
-- test_NAME_delete_op_fails
-- test_NAME_delete_op_exception
-
-See already existing tests (e.g. `test_fusion_region.py`) for inspiration.
diff --git a/ansible_collections/purestorage/fusion/tests/functional/__init__.py b/ansible_collections/purestorage/fusion/tests/functional/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/ansible_collections/purestorage/fusion/tests/functional/__init__.py
+++ /dev/null
diff --git a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_api_client.py b/ansible_collections/purestorage/fusion/tests/functional/test_fusion_api_client.py
deleted file mode 100644
index 295c62bd6..000000000
--- a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_api_client.py
+++ /dev/null
@@ -1,374 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# (c) 2023, Andrej Pajtas (apajtas@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-from dataclasses import asdict, dataclass
-from unittest.mock import MagicMock, patch
-
-import fusion as purefusion
-import pytest
-from ansible.module_utils import basic
-from ansible_collections.purestorage.fusion.plugins.modules import fusion_api_client
-from ansible_collections.purestorage.fusion.tests.functional.utils import (
- AnsibleExitJson,
- AnsibleFailJson,
- exit_json,
- fail_json,
- set_module_args,
-)
-from urllib3.exceptions import HTTPError
-
-# GLOBAL MOCKS
-fusion_api_client.setup_fusion = MagicMock(
- return_value=purefusion.api_client.ApiClient()
-)
-purefusion.api_client.ApiClient.call_api = MagicMock(
- side_effect=Exception("API call not mocked!")
-)
-basic.AnsibleModule.exit_json = exit_json
-basic.AnsibleModule.fail_json = fail_json
-
-
-@dataclass
-class FakeApiClient:
- id: str
- self_link: str
- name: str
- display_name: str
- issuer: str
- public_key: str
- last_key_update: float
- last_used: float
- creator_id: str
-
-
-@pytest.fixture
-def current_clients():
- return [
- FakeApiClient(
- "1",
- "self_link_value",
- "client1",
- "client1",
- "apikey:name:thisisnotreal",
- "0123456789",
- 12345,
- 12345,
- "1234",
- ),
- FakeApiClient(
- "2",
- "self_link_value",
- "client2",
- "client2",
- "apikey:name:thisisnotreal",
- "0123456789",
- 12345,
- 12345,
- "1234",
- ),
- FakeApiClient(
- "3",
- "self_link_value",
- "client3",
- "client3",
- "apikey:name:thisisnotreal",
- "0123456789",
- 12345,
- 12345,
- "1234",
- ),
- ]
-
-
-@patch("fusion.IdentityManagerApi")
-@pytest.mark.parametrize(
- "module_args",
- [
- # required parameter 'name` is missing
- {
- "state": "present",
- "public_key": "0123456789",
- },
- # unknown parameter 'extra' is provided
- {
- "state": "present",
- "name": "client1",
- "public_key": "0123456789",
- "extra": "value",
- },
- # parameter 'state` has incorrect value
- {
- "state": "cool",
- "name": "client1",
- "public_key": "0123456789",
- },
- ],
-)
-def test_module_fails_on_wrong_parameters(m_im_api, module_args, current_clients):
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.list_api_clients = MagicMock(return_value=current_clients)
- api_obj.get_api_client = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_api_client = MagicMock()
- api_obj.delete_api_client = MagicMock()
- m_im_api.return_value = api_obj
-
- # run module
- with pytest.raises(AnsibleFailJson):
- fusion_api_client.main()
-
- # check api was not called at all
- api_obj.list_api_clients.assert_not_called()
- api_obj.get_api_client.assert_not_called()
- api_obj.create_api_client.assert_not_called()
- api_obj.delete_api_client.assert_not_called()
-
-
-@patch("fusion.IdentityManagerApi")
-def test_api_client_create(m_im_api, current_clients):
- module_args = {
- "state": "present",
- "name": "new_client",
- "public_key": "0123456789",
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.list_api_clients = MagicMock(return_value=current_clients)
- api_obj.get_api_client = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_api_client = MagicMock(
- return_value=FakeApiClient(
- "321321",
- "self_link_value",
- "client_test",
- "client_test",
- "apikey:name:test",
- "321321",
- 321321,
- 321321,
- "321321",
- )
- )
- api_obj.delete_api_client = MagicMock()
- m_im_api.return_value = api_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_api_client.main()
-
- assert exc.value.changed is True
- assert exc.value.id == "321321"
-
- # check api was called correctly
- api_obj.list_api_clients.assert_called_once_with()
- api_obj.get_api_client.assert_not_called()
- api_obj.create_api_client.assert_called_once_with(
- purefusion.APIClientPost(
- public_key=module_args["public_key"],
- display_name=module_args["name"],
- )
- )
- api_obj.delete_api_client.assert_not_called()
-
-
-@patch("fusion.IdentityManagerApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_api_client_create_exception(
- m_im_api, exec_original, exec_catch, current_clients
-):
- module_args = {
- "state": "present",
- "name": "new_client",
- "public_key": "0123456789",
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.list_api_clients = MagicMock(return_value=current_clients)
- api_obj.get_api_client = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_api_client = MagicMock(side_effect=exec_original)
- api_obj.delete_api_client = MagicMock()
- m_im_api.return_value = api_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_api_client.main()
-
- # check api was called correctly
- api_obj.list_api_clients.assert_called_once_with()
- api_obj.get_api_client.assert_not_called()
- api_obj.create_api_client.assert_called_once_with(
- purefusion.APIClientPost(
- public_key=module_args["public_key"],
- display_name=module_args["name"],
- )
- )
- api_obj.delete_api_client.assert_not_called()
-
-
-@patch("fusion.IdentityManagerApi")
-def test_api_client_present_not_changed(m_im_api, current_clients):
- current_api_client = current_clients[0]
- module_args = {
- "state": "present",
- "name": current_api_client.display_name,
- "public_key": current_api_client.public_key,
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.list_api_clients = MagicMock(return_value=current_clients)
- api_obj.get_api_client = MagicMock(
- return_value=purefusion.APIClient(**asdict(current_api_client))
- )
- api_obj.create_api_client = MagicMock()
- api_obj.delete_api_client = MagicMock()
- m_im_api.return_value = api_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_api_client.main()
-
- assert exc.value.changed is False
-
- # check api was called correctly
- api_obj.list_api_clients.assert_called_once_with()
- api_obj.get_api_client.assert_not_called()
- api_obj.create_api_client.assert_not_called()
- api_obj.delete_api_client.assert_not_called()
-
-
-@patch("fusion.IdentityManagerApi")
-def test_api_client_absent_not_changed(m_im_api, current_clients):
- module_args = {
- "state": "absent",
- "name": "non_existing_client",
- "public_key": "0123456789",
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.list_api_clients = MagicMock(return_value=current_clients)
- api_obj.get_api_client = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_api_client = MagicMock()
- api_obj.delete_api_client = MagicMock()
- m_im_api.return_value = api_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_api_client.main()
-
- assert exc.value.changed is False
-
- # check api was called correctly
- api_obj.list_api_clients.assert_called_once_with()
- api_obj.get_api_client.assert_not_called()
- api_obj.create_api_client.assert_not_called()
- api_obj.delete_api_client.assert_not_called()
-
-
-@patch("fusion.IdentityManagerApi")
-def test_api_client_delete(m_im_api, current_clients):
- current_api_client = current_clients[0]
- module_args = {
- "state": "absent",
- "name": current_api_client.display_name,
- "public_key": current_api_client.public_key,
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.list_api_clients = MagicMock(return_value=current_clients)
- api_obj.get_api_client = MagicMock(
- return_value=purefusion.APIClient(**asdict(current_api_client))
- )
- api_obj.create_api_client = MagicMock()
- api_obj.delete_api_client = MagicMock()
- m_im_api.return_value = api_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_api_client.main()
-
- assert exc.value.changed is True
-
- # check api was called correctly
- api_obj.list_api_clients.assert_called_once_with()
- api_obj.get_api_client.assert_not_called()
- api_obj.create_api_client.assert_not_called()
- api_obj.delete_api_client.assert_called_once_with(
- api_client_id=current_api_client.id
- )
-
-
-@patch("fusion.IdentityManagerApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_api_client_delete_exception(
- m_im_api, exec_original, exec_catch, current_clients
-):
- current_api_client = current_clients[0]
- module_args = {
- "state": "absent",
- "name": current_api_client.display_name,
- "public_key": current_api_client.public_key,
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.list_api_clients = MagicMock(return_value=current_clients)
- api_obj.get_api_client = MagicMock(
- return_value=purefusion.APIClient(**asdict(current_api_client))
- )
- api_obj.create_api_client = MagicMock()
- api_obj.delete_api_client = MagicMock(side_effect=exec_original)
- m_im_api.return_value = api_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_api_client.main()
-
- # check api was called correctly
- api_obj.list_api_clients.assert_called_once_with()
- api_obj.get_api_client.assert_not_called()
- api_obj.create_api_client.assert_not_called()
- api_obj.delete_api_client.assert_called_once_with(
- api_client_id=current_api_client.id
- )
diff --git a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_array.py b/ansible_collections/purestorage/fusion/tests/functional/test_fusion_array.py
deleted file mode 100644
index 6af1e1136..000000000
--- a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_array.py
+++ /dev/null
@@ -1,1344 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# (c) 2023, Andrej Pajtas (apajtas@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-from unittest.mock import MagicMock, call, patch
-
-import fusion as purefusion
-import pytest
-from ansible.module_utils import basic
-from ansible_collections.purestorage.fusion.plugins.module_utils.errors import (
- OperationException,
-)
-from ansible_collections.purestorage.fusion.plugins.modules import fusion_array
-from ansible_collections.purestorage.fusion.tests.functional.utils import (
- AnsibleExitJson,
- AnsibleFailJson,
- FailedOperationMock,
- OperationMock,
- SuccessfulOperationMock,
- FAKE_RESOURCE_ID,
- exit_json,
- fail_json,
- set_module_args,
-)
-from urllib3.exceptions import HTTPError
-
-# GLOBAL MOCKS
-fusion_array.setup_fusion = MagicMock(return_value=purefusion.api_client.ApiClient())
-purefusion.api_client.ApiClient.call_api = MagicMock(
- side_effect=Exception("API call not mocked!")
-)
-basic.AnsibleModule.exit_json = exit_json
-basic.AnsibleModule.fail_json = fail_json
-
-
-@pytest.fixture
-def module_args():
- return {
- "state": "present",
- "name": "array1",
- "display_name": "Array 1",
- "region": "region1",
- "availability_zone": "az1",
- "appliance_id": "23984573498573",
- "apartment_id": "76586785687",
- "host_name": "array_1",
- "hardware_type": "flash-array-x",
- "maintenance_mode": False,
- "unavailable_mode": False,
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
-
-
-@pytest.fixture
-def current_array(module_args):
- return {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"],
- "display_name": module_args["display_name"],
- "region": module_args["region"],
- "availability_zone": module_args["availability_zone"],
- "appliance_id": module_args["appliance_id"],
- "apartment_id": module_args["apartment_id"],
- "host_name": module_args["host_name"],
- "hardware_type": module_args["hardware_type"],
- "maintenance_mode": module_args["maintenance_mode"],
- "unavailable_mode": module_args["unavailable_mode"],
- }
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.ArraysApi")
-@pytest.mark.parametrize(
- "module_args",
- [
- # required parameter 'name` is missing
- {
- "state": "present",
- "display_name": "Array 1",
- "region": "region1",
- "availability_zone": "az1",
- "appliance_id": "23984573498573",
- "host_name": "array_1",
- "hardware_type": "flash-array-x",
- "maintenance_mode": False,
- "unavailable_mode": False,
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- # required parameter 'region` is missing
- {
- "state": "present",
- "name": "array1",
- "display_name": "Array 1",
- "availability_zone": "az1",
- "appliance_id": "23984573498573",
- "host_name": "array_1",
- "hardware_type": "flash-array-x",
- "maintenance_mode": False,
- "unavailable_mode": False,
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- # required parameter 'availability_zone` is missing
- {
- "state": "present",
- "name": "array1",
- "display_name": "Array 1",
- "region": "region1",
- "appliance_id": "23984573498573",
- "host_name": "array_1",
- "hardware_type": "flash-array-x",
- "maintenance_mode": False,
- "unavailable_mode": False,
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- # unknown parameter 'extra' is provided
- {
- "state": "present",
- "name": "array1",
- "display_name": "Array 1",
- "availability_zone": "az1",
- "region": "region1",
- "appliance_id": "23984573498573",
- "host_name": "array_1",
- "hardware_type": "flash-array-x",
- "maintenance_mode": False,
- "unavailable_mode": False,
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- "extra": "value",
- },
- # parameter 'state` has incorrect value
- {
- "state": "cool",
- "name": "array1",
- "display_name": "Array 1",
- "availability_zone": "az1",
- "region": "region1",
- "appliance_id": "23984573498573",
- "host_name": "array_1",
- "hardware_type": "flash-array-x",
- "maintenance_mode": False,
- "unavailable_mode": False,
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- # parameter 'hardware_type` has incorrect value
- {
- "state": "present",
- "name": "array1",
- "display_name": "Array 1",
- "availability_zone": "az1",
- "region": "region1",
- "appliance_id": "23984573498573",
- "host_name": "array_1",
- "hardware_type": "hdd-array-x",
- "maintenance_mode": False,
- "unavailable_mode": False,
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- # parameter 'maintenance_mode` has incorrect value
- {
- "state": "present",
- "name": "array1",
- "display_name": "Array 1",
- "availability_zone": "az1",
- "region": "region1",
- "appliance_id": "23984573498573",
- "host_name": "array_1",
- "hardware_type": "flash-array-x",
- "maintenance_mode": "string",
- "unavailable_mode": False,
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- # parameter 'unavailable_mode` has incorrect value
- {
- "state": "present",
- "name": "array1",
- "display_name": "Array 1",
- "availability_zone": "az1",
- "region": "region1",
- "appliance_id": "23984573498573",
- "host_name": "array_1",
- "hardware_type": "flash-array-x",
- "maintenance_mode": False,
- "unavailable_mode": "string",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- ],
-)
-def test_module_fails_on_wrong_parameters(m_array_api, m_op_api, module_args):
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_array = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_array = MagicMock(return_value=OperationMock(1))
- api_obj.update_array = MagicMock(return_value=OperationMock(2))
- api_obj.delete_array = MagicMock(return_value=OperationMock(3))
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
- m_array_api.return_value = api_obj
-
- # run module
- with pytest.raises(AnsibleFailJson):
- fusion_array.main()
-
- # check api was not called at all
- api_obj.get_array.assert_not_called()
- api_obj.create_array.assert_not_called()
- api_obj.update_array.assert_not_called()
- api_obj.delete_array.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.ArraysApi")
-@pytest.mark.parametrize(
- "module_args",
- [
- # required parameter 'hardware_type` for creating resource is missing
- {
- "state": "present",
- "name": "array1",
- "display_name": "Array 1",
- "region": "region1",
- "availability_zone": "az1",
- "appliance_id": "23984573498573",
- "host_name": "array_1",
- "maintenance_mode": False,
- "unavailable_mode": False,
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- # required parameter 'host_name` for creating resource is missing
- {
- "state": "present",
- "name": "array1",
- "display_name": "Array 1",
- "region": "region1",
- "availability_zone": "az1",
- "appliance_id": "23984573498573",
- "hardware_type": "flash-array-x",
- "maintenance_mode": False,
- "unavailable_mode": False,
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- # required parameter 'appliance_id` for creating resource is missing
- {
- "state": "present",
- "name": "array1",
- "display_name": "Array 1",
- "region": "region1",
- "availability_zone": "az1",
- "host_name": "array_1",
- "hardware_type": "flash-array-x",
- "maintenance_mode": False,
- "unavailable_mode": False,
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- ],
-)
-def test_array_create_fails_on_wrong_parameters(m_array_api, m_op_api, module_args):
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_array = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_array = MagicMock(return_value=OperationMock(1))
- api_obj.update_array = MagicMock(return_value=OperationMock(2))
- api_obj.delete_array = MagicMock(return_value=OperationMock(3))
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
- m_array_api.return_value = api_obj
-
- # run module
- with pytest.raises(AnsibleFailJson):
- fusion_array.main()
-
- # check api was not called at all
- api_obj.get_array.assert_called_once_with(
- array_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.create_array.assert_not_called()
- api_obj.update_array.assert_not_called()
- api_obj.delete_array.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.ArraysApi")
-@pytest.mark.parametrize(
- "hw_type",
- [
- "flash-array-x",
- "flash-array-c",
- "flash-array-x-optane",
- "flash-array-xl",
- ],
-)
-@pytest.mark.parametrize("main_m", [True, False])
-@pytest.mark.parametrize("unav_m", [True, False])
-def test_array_create(m_array_api, m_op_api, hw_type, main_m, unav_m, module_args):
- module_args["hardware_type"] = hw_type
- module_args["maintenance_mode"] = main_m
- module_args["unavailable_mode"] = unav_m
- created_array = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"],
- "display_name": module_args["display_name"],
- "region": module_args["region"],
- "availability_zone": module_args["availability_zone"],
- "appliance_id": module_args["appliance_id"],
- "apartment_id": module_args["apartment_id"],
- "host_name": module_args["host_name"],
- "hardware_type": module_args["hardware_type"],
- "maintenance_mode": not module_args[
- "maintenance_mode"
- ], # so we can test patching
- "unavailable_mode": not module_args[
- "unavailable_mode"
- ], # so we can test patching
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_array = MagicMock(
- side_effect=[purefusion.rest.ApiException, purefusion.Array(**created_array)]
- )
- api_obj.create_array = MagicMock(return_value=OperationMock(1))
- api_obj.update_array = MagicMock(return_value=OperationMock(2))
- api_obj.delete_array = MagicMock(return_value=OperationMock(3))
- m_array_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_array.main()
-
- assert exc.value.changed
- assert exc.value.id == FAKE_RESOURCE_ID
-
- # check api was called correctly
- api_obj.get_array.assert_called_with(
- array_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.create_array.assert_called_once_with(
- purefusion.ArrayPost(
- hardware_type=module_args["hardware_type"],
- display_name=module_args["display_name"],
- host_name=module_args["host_name"],
- name=module_args["name"],
- appliance_id=module_args["appliance_id"],
- apartment_id=module_args["apartment_id"],
- ),
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.update_array.assert_has_calls(
- [
- call(
- purefusion.ArrayPatch(
- maintenance_mode=purefusion.NullableBoolean(
- module_args["maintenance_mode"]
- )
- ),
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- array_name=module_args["name"],
- ),
- call(
- purefusion.ArrayPatch(
- unavailable_mode=purefusion.NullableBoolean(
- module_args["unavailable_mode"]
- )
- ),
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- array_name=module_args["name"],
- ),
- ],
- any_order=True,
- )
- api_obj.delete_array.assert_not_called()
- op_obj.get_operation.assert_has_calls(
- [
- call(1),
- call(2),
- call(2),
- ]
- )
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.ArraysApi")
-def test_array_create_without_display_name(m_array_api, m_op_api, module_args):
- del module_args["display_name"]
- created_array = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"],
- "display_name": module_args["name"],
- "region": module_args["region"],
- "availability_zone": module_args["availability_zone"],
- "appliance_id": module_args["appliance_id"],
- "apartment_id": module_args["apartment_id"],
- "host_name": module_args["host_name"],
- "hardware_type": module_args["hardware_type"],
- "maintenance_mode": not module_args["maintenance_mode"],
- "unavailable_mode": not module_args["unavailable_mode"],
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_array = MagicMock(
- side_effect=[purefusion.rest.ApiException, purefusion.Array(**created_array)]
- )
- api_obj.create_array = MagicMock(return_value=OperationMock(1))
- api_obj.update_array = MagicMock(return_value=OperationMock(2))
- api_obj.delete_array = MagicMock(return_value=OperationMock(3))
- m_array_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_array.main()
-
- assert exc.value.changed
- assert exc.value.id == FAKE_RESOURCE_ID
-
- # check api was called correctly
- api_obj.get_array.assert_called_with(
- array_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.create_array.assert_called_once_with(
- purefusion.ArrayPost(
- hardware_type=module_args["hardware_type"],
- display_name=module_args["name"],
- host_name=module_args["host_name"],
- name=module_args["name"],
- appliance_id=module_args["appliance_id"],
- apartment_id=module_args["apartment_id"],
- ),
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.update_array.assert_has_calls(
- [
- call(
- purefusion.ArrayPatch(
- maintenance_mode=purefusion.NullableBoolean(
- module_args["maintenance_mode"]
- )
- ),
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- array_name=module_args["name"],
- ),
- call(
- purefusion.ArrayPatch(
- unavailable_mode=purefusion.NullableBoolean(
- module_args["unavailable_mode"]
- )
- ),
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- array_name=module_args["name"],
- ),
- ],
- any_order=True,
- )
- api_obj.delete_array.assert_not_called()
- op_obj.get_operation.assert_has_calls(
- [
- call(1),
- call(2),
- call(2),
- ]
- )
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.ArraysApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_array_create_exception(
- m_array_api, m_op_api, exec_original, exec_catch, module_args
-):
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_array = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_array = MagicMock(side_effect=exec_original)
- api_obj.update_array = MagicMock(return_value=OperationMock(2))
- api_obj.delete_array = MagicMock(return_value=OperationMock(3))
- m_array_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_array.main()
-
- # check api was called correctly
- api_obj.get_array.assert_called_once_with(
- array_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.create_array.assert_called_once_with(
- purefusion.ArrayPost(
- hardware_type=module_args["hardware_type"],
- display_name=module_args["display_name"],
- host_name=module_args["host_name"],
- name=module_args["name"],
- appliance_id=module_args["appliance_id"],
- apartment_id=module_args["apartment_id"],
- ),
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.update_array.assert_not_called()
- api_obj.delete_array.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.ArraysApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_array_create_second_exception(
- m_array_api, m_op_api, exec_original, exec_catch, module_args
-):
- created_array = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"],
- "display_name": module_args["name"],
- "region": module_args["region"],
- "availability_zone": module_args["availability_zone"],
- "appliance_id": module_args["appliance_id"],
- "apartment_id": module_args["apartment_id"],
- "host_name": module_args["host_name"],
- "hardware_type": module_args["hardware_type"],
- "maintenance_mode": not module_args["maintenance_mode"],
- "unavailable_mode": not module_args["unavailable_mode"],
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_array = MagicMock(
- side_effect=[purefusion.rest.ApiException, purefusion.Array(**created_array)]
- )
- api_obj.create_array = MagicMock(return_value=OperationMock(1))
- api_obj.update_array = MagicMock(side_effect=exec_original)
- api_obj.delete_array = MagicMock(return_value=OperationMock(3))
- m_array_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_array.main()
-
- # check api was called correctly
- api_obj.get_array.assert_called_with(
- array_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.create_array.assert_called_once_with(
- purefusion.ArrayPost(
- hardware_type=module_args["hardware_type"],
- display_name=module_args["display_name"],
- host_name=module_args["host_name"],
- name=module_args["name"],
- appliance_id=module_args["appliance_id"],
- apartment_id=module_args["apartment_id"],
- ),
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.update_array.assert_called_once()
- api_obj.delete_array.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.ArraysApi")
-def test_array_create_op_fails(m_array_api, m_op_api, module_args):
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_array = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_array = MagicMock(return_value=OperationMock(1))
- api_obj.update_array = MagicMock(return_value=OperationMock(2))
- api_obj.delete_array = MagicMock(return_value=OperationMock(3))
- m_array_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(OperationException):
- fusion_array.main()
-
- # check api was called correctly
- api_obj.get_array.assert_called_once_with(
- array_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.create_array.assert_called_once_with(
- purefusion.ArrayPost(
- hardware_type=module_args["hardware_type"],
- display_name=module_args["display_name"],
- host_name=module_args["host_name"],
- name=module_args["name"],
- appliance_id=module_args["appliance_id"],
- apartment_id=module_args["apartment_id"],
- ),
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.update_array.assert_not_called()
- api_obj.delete_array.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.ArraysApi")
-def test_array_create_second_op_fails(m_array_api, m_op_api, module_args):
- created_array = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"],
- "display_name": module_args["name"],
- "region": module_args["region"],
- "availability_zone": module_args["availability_zone"],
- "appliance_id": module_args["appliance_id"],
- "apartment_id": module_args["apartment_id"],
- "host_name": module_args["host_name"],
- "hardware_type": module_args["hardware_type"],
- "maintenance_mode": not module_args["maintenance_mode"],
- "unavailable_mode": not module_args["unavailable_mode"],
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_array = MagicMock(
- side_effect=[purefusion.rest.ApiException, purefusion.Array(**created_array)]
- )
- api_obj.create_array = MagicMock(return_value=OperationMock(1))
- api_obj.update_array = MagicMock(return_value=OperationMock(2))
- api_obj.delete_array = MagicMock(return_value=OperationMock(3))
- m_array_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(
- side_effect=[SuccessfulOperationMock, FailedOperationMock]
- )
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(OperationException):
- fusion_array.main()
-
- # check api was called correctly
- api_obj.get_array.assert_called_with(
- array_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.create_array.assert_called_once_with(
- purefusion.ArrayPost(
- hardware_type=module_args["hardware_type"],
- display_name=module_args["display_name"],
- host_name=module_args["host_name"],
- name=module_args["name"],
- appliance_id=module_args["appliance_id"],
- apartment_id=module_args["apartment_id"],
- ),
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.update_array.assert_called_once()
- api_obj.delete_array.assert_not_called()
- op_obj.get_operation.assert_has_calls(
- [
- call(1),
- call(2),
- ]
- )
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.ArraysApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, OperationException),
- ],
-)
-def test_array_create_op_exception(
- m_array_api, m_op_api, exec_original, exec_catch, module_args
-):
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_array = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_array = MagicMock(return_value=OperationMock(1))
- api_obj.update_array = MagicMock(return_value=OperationMock(2))
- api_obj.delete_array = MagicMock(return_value=OperationMock(3))
- m_array_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(side_effect=exec_original)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_array.main()
-
- # check api was called correctly
- api_obj.get_array.assert_called_once_with(
- array_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.create_array.assert_called_once_with(
- purefusion.ArrayPost(
- hardware_type=module_args["hardware_type"],
- display_name=module_args["display_name"],
- host_name=module_args["host_name"],
- name=module_args["name"],
- appliance_id=module_args["appliance_id"],
- apartment_id=module_args["apartment_id"],
- ),
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.update_array.assert_not_called()
- api_obj.delete_array.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.ArraysApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, OperationException),
- ],
-)
-def test_array_create_second_op_exception(
- m_array_api, m_op_api, exec_original, exec_catch, module_args
-):
- created_array = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"],
- "display_name": module_args["name"],
- "region": module_args["region"],
- "availability_zone": module_args["availability_zone"],
- "appliance_id": module_args["appliance_id"],
- "apartment_id": module_args["apartment_id"],
- "host_name": module_args["host_name"],
- "hardware_type": module_args["hardware_type"],
- "maintenance_mode": not module_args["maintenance_mode"],
- "unavailable_mode": not module_args["unavailable_mode"],
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_array = MagicMock(
- side_effect=[purefusion.rest.ApiException, purefusion.Array(**created_array)]
- )
- api_obj.create_array = MagicMock(return_value=OperationMock(1))
- api_obj.update_array = MagicMock(return_value=OperationMock(2))
- api_obj.delete_array = MagicMock(return_value=OperationMock(3))
- m_array_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(
- side_effect=[SuccessfulOperationMock, exec_original]
- )
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_array.main()
-
- # check api was called correctly
- api_obj.get_array.assert_called_with(
- array_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.create_array.assert_called_once_with(
- purefusion.ArrayPost(
- hardware_type=module_args["hardware_type"],
- display_name=module_args["display_name"],
- host_name=module_args["host_name"],
- name=module_args["name"],
- appliance_id=module_args["appliance_id"],
- apartment_id=module_args["apartment_id"],
- ),
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.update_array.assert_called_once()
- api_obj.delete_array.assert_not_called()
- op_obj.get_operation.assert_has_calls(
- [
- call(1),
- call(2),
- ]
- )
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.ArraysApi")
-def test_array_update(m_array_api, m_op_api, module_args, current_array):
- current_array["display_name"] = None
- current_array["host_name"] = "something"
- current_array["maintenance_mode"] = not current_array["maintenance_mode"]
- current_array["unavailable_mode"] = not current_array["unavailable_mode"]
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_array = MagicMock(return_value=purefusion.Array(**current_array))
- api_obj.create_array = MagicMock(return_value=OperationMock(1))
- api_obj.update_array = MagicMock(return_value=OperationMock(2))
- api_obj.delete_array = MagicMock(return_value=OperationMock(3))
- m_array_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_array.main()
-
- assert exc.value.changed
- assert exc.value.id == current_array["id"]
-
- # check api was called correctly
- api_obj.get_array.assert_called_with(
- array_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.create_array.assert_not_called()
- api_obj.update_array.assert_has_calls(
- [
- call(
- purefusion.ArrayPatch(
- display_name=purefusion.NullableString(module_args["display_name"])
- ),
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- array_name=module_args["name"],
- ),
- call(
- purefusion.ArrayPatch(
- host_name=purefusion.NullableString(module_args["host_name"])
- ),
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- array_name=module_args["name"],
- ),
- call(
- purefusion.ArrayPatch(
- unavailable_mode=purefusion.NullableBoolean(
- module_args["unavailable_mode"]
- )
- ),
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- array_name=module_args["name"],
- ),
- call(
- purefusion.ArrayPatch(
- maintenance_mode=purefusion.NullableBoolean(
- module_args["maintenance_mode"]
- )
- ),
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- array_name=module_args["name"],
- ),
- ],
- any_order=True,
- )
- api_obj.delete_array.assert_not_called()
- op_obj.get_operation.assert_has_calls(
- [
- call(2),
- call(2),
- call(2),
- call(2),
- ]
- )
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.ArraysApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_array_update_exception(
- m_array_api, m_op_api, exec_original, exec_catch, module_args, current_array
-):
- current_array["display_name"] = None
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_array = MagicMock(return_value=purefusion.Array(**current_array))
- api_obj.create_array = MagicMock(return_value=OperationMock(1))
- api_obj.update_array = MagicMock(side_effect=exec_original)
- api_obj.delete_array = MagicMock(return_value=OperationMock(3))
- m_array_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_array.main()
-
- # check api was called correctly
- api_obj.get_array.assert_called_with(
- array_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.create_array.assert_not_called()
- api_obj.update_array.assert_called_once()
- api_obj.delete_array.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.ArraysApi")
-def test_array_update_op_fails(m_array_api, m_op_api, module_args, current_array):
- current_array["display_name"] = None
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_array = MagicMock(return_value=purefusion.Array(**current_array))
- api_obj.create_array = MagicMock(return_value=OperationMock(1))
- api_obj.update_array = MagicMock(return_value=OperationMock(2))
- api_obj.delete_array = MagicMock(return_value=OperationMock(3))
- m_array_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(OperationException):
- fusion_array.main()
-
- # check api was called correctly
- api_obj.get_array.assert_called_with(
- array_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.create_array.assert_not_called()
- api_obj.update_array.assert_called_once()
- api_obj.delete_array.assert_not_called()
- op_obj.get_operation.assert_called_once_with(2)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.ArraysApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, OperationException),
- ],
-)
-def test_array_update_op_exception(
- m_array_api, m_op_api, exec_original, exec_catch, module_args, current_array
-):
- current_array["display_name"] = None
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_array = MagicMock(return_value=purefusion.Array(**current_array))
- api_obj.create_array = MagicMock(return_value=OperationMock(1))
- api_obj.update_array = MagicMock(return_value=OperationMock(2))
- api_obj.delete_array = MagicMock(return_value=OperationMock(3))
- m_array_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(side_effect=exec_original)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_array.main()
-
- # check api was called correctly
- api_obj.get_array.assert_called_with(
- array_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.create_array.assert_not_called()
- api_obj.update_array.assert_called_once()
- api_obj.delete_array.assert_not_called()
- op_obj.get_operation.assert_called_once_with(2)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.ArraysApi")
-def test_array_present_not_changed(m_array_api, m_op_api, module_args, current_array):
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_array = MagicMock(return_value=purefusion.Array(**current_array))
- api_obj.create_array = MagicMock(return_value=OperationMock(1))
- api_obj.update_array = MagicMock(return_value=OperationMock(2))
- api_obj.delete_array = MagicMock(return_value=OperationMock(3))
- m_array_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_array.main()
-
- assert not exc.value.changed
-
- # check api was called correctly
- api_obj.get_array.assert_called_with(
- array_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.create_array.assert_not_called()
- api_obj.update_array.assert_not_called()
- api_obj.delete_array.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.ArraysApi")
-def test_array_absent_not_changed(m_array_api, m_op_api, module_args):
- module_args["state"] = "absent"
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_array = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_array = MagicMock(return_value=OperationMock(1))
- api_obj.update_array = MagicMock(return_value=OperationMock(2))
- api_obj.delete_array = MagicMock(return_value=OperationMock(3))
- m_array_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_array.main()
-
- assert not exc.value.changed
-
- # check api was called correctly
- api_obj.get_array.assert_called_with(
- array_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.create_array.assert_not_called()
- api_obj.update_array.assert_not_called()
- api_obj.delete_array.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.ArraysApi")
-def test_array_delete(m_array_api, m_op_api, module_args, current_array):
- module_args["state"] = "absent"
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_array = MagicMock(return_value=purefusion.Array(**current_array))
- api_obj.create_array = MagicMock(return_value=OperationMock(1))
- api_obj.update_array = MagicMock(return_value=OperationMock(2))
- api_obj.delete_array = MagicMock(return_value=OperationMock(3))
- m_array_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_array.main()
-
- assert exc.value.changed
-
- # check api was called correctly
- api_obj.get_array.assert_called_once_with(
- array_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.create_array.assert_not_called()
- api_obj.update_array.assert_not_called()
- api_obj.delete_array.assert_called_once_with(
- region_name=module_args["region"],
- availability_zone_name=module_args["availability_zone"],
- array_name=module_args["name"],
- )
- op_obj.get_operation.assert_called_once_with(3)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.ArraysApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_array_delete_exception(
- m_array_api, m_op_api, exec_original, exec_catch, module_args, current_array
-):
- module_args["state"] = "absent"
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_array = MagicMock(return_value=purefusion.Array(**current_array))
- api_obj.create_array = MagicMock(return_value=OperationMock(1))
- api_obj.update_array = MagicMock(return_value=OperationMock(2))
- api_obj.delete_array = MagicMock(side_effect=exec_original)
- m_array_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_array.main()
-
- # check api was called correctly
- api_obj.get_array.assert_called_once_with(
- array_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.create_array.assert_not_called()
- api_obj.update_array.assert_not_called()
- api_obj.delete_array.assert_called_once_with(
- region_name=module_args["region"],
- availability_zone_name=module_args["availability_zone"],
- array_name=module_args["name"],
- )
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.ArraysApi")
-def test_array_delete_op_fails(m_array_api, m_op_api, module_args, current_array):
- module_args["state"] = "absent"
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_array = MagicMock(return_value=purefusion.Array(**current_array))
- api_obj.create_array = MagicMock(return_value=OperationMock(1))
- api_obj.update_array = MagicMock(return_value=OperationMock(2))
- api_obj.delete_array = MagicMock(return_value=OperationMock(3))
- m_array_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(OperationException):
- fusion_array.main()
-
- # check api was called correctly
- api_obj.get_array.assert_called_once_with(
- array_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.create_array.assert_not_called()
- api_obj.update_array.assert_not_called()
- api_obj.delete_array.assert_called_once_with(
- region_name=module_args["region"],
- availability_zone_name=module_args["availability_zone"],
- array_name=module_args["name"],
- )
- op_obj.get_operation.assert_called_once_with(3)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.ArraysApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, OperationException),
- ],
-)
-def test_array_delete_op_exception(
- m_array_api, m_op_api, exec_original, exec_catch, module_args, current_array
-):
- module_args["state"] = "absent"
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_array = MagicMock(return_value=purefusion.Array(**current_array))
- api_obj.create_array = MagicMock(return_value=OperationMock(1))
- api_obj.update_array = MagicMock(return_value=OperationMock(2))
- api_obj.delete_array = MagicMock(return_value=OperationMock(3))
- m_array_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(side_effect=exec_original)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_array.main()
-
- # check api was called correctly
- api_obj.get_array.assert_called_once_with(
- array_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.create_array.assert_not_called()
- api_obj.update_array.assert_not_called()
- api_obj.delete_array.assert_called_once_with(
- region_name=module_args["region"],
- availability_zone_name=module_args["availability_zone"],
- array_name=module_args["name"],
- )
- op_obj.get_operation.assert_called_once_with(3)
diff --git a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_az.py b/ansible_collections/purestorage/fusion/tests/functional/test_fusion_az.py
deleted file mode 100644
index d19e41827..000000000
--- a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_az.py
+++ /dev/null
@@ -1,720 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# (c) 2023, Andrej Pajtas (apajtas@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-from unittest.mock import MagicMock, patch
-
-import fusion as purefusion
-import pytest
-from ansible.module_utils import basic
-from ansible_collections.purestorage.fusion.plugins.module_utils.errors import (
- OperationException,
-)
-from ansible_collections.purestorage.fusion.plugins.modules import fusion_az
-from ansible_collections.purestorage.fusion.tests.functional.utils import (
- AnsibleExitJson,
- AnsibleFailJson,
- FailedOperationMock,
- OperationMock,
- SuccessfulOperationMock,
- FAKE_RESOURCE_ID,
- exit_json,
- fail_json,
- set_module_args,
-)
-from urllib3.exceptions import HTTPError
-
-# GLOBAL MOCKS
-fusion_az.setup_fusion = MagicMock(return_value=purefusion.api_client.ApiClient())
-purefusion.api_client.ApiClient.call_api = MagicMock(
- side_effect=Exception("API call not mocked!")
-)
-basic.AnsibleModule.exit_json = exit_json
-basic.AnsibleModule.fail_json = fail_json
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.AvailabilityZonesApi")
-@pytest.mark.parametrize(
- "module_args",
- [
- # required parameter 'name` is missing
- {
- "state": "present",
- "region": "region1",
- "display_name": "Availability Zone 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- # required parameter 'region` is missing
- {
- "state": "present",
- "name": "az1",
- "display_name": "Availability Zone 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- # unknown parameter 'extra' is provided
- {
- "state": "present",
- "name": "az1",
- "region": "region1",
- "display_name": "Availability Zone 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- "extra": "value",
- },
- # parameter 'state` has incorrect value
- {
- "state": "cool",
- "name": "az1",
- "region": "region1",
- "display_name": "Availability Zone 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- ],
-)
-def test_module_op_fails_on_wrong_parameters(m_az_api, m_op_api, module_args):
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_availability_zone = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_availability_zone = MagicMock(return_value=OperationMock(1))
- api_obj.update_availability_zone = MagicMock(return_value=OperationMock(2))
- api_obj.delete_availability_zone = MagicMock(return_value=OperationMock(3))
- m_az_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- # run module
- with pytest.raises(AnsibleFailJson):
- fusion_az.main()
-
- # check api was not called at all
- api_obj.get_region.assert_not_called()
- api_obj.create_availability_zone.assert_not_called()
- api_obj.update_availability_zone.assert_not_called()
- api_obj.delete_availability_zone.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.AvailabilityZonesApi")
-def test_az_create(m_az_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "az1",
- "region": "region1",
- "display_name": "Availability Zone 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_availability_zone = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_availability_zone = MagicMock(return_value=OperationMock(1))
- api_obj.update_availability_zone = MagicMock(return_value=OperationMock(2))
- api_obj.delete_availability_zone = MagicMock(return_value=OperationMock(3))
- m_az_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_az.main()
-
- assert exc.value.changed
- assert exc.value.id == FAKE_RESOURCE_ID
-
- api_obj.get_region.get_availability_zone(
- availability_zone_name=module_args["name"],
- region_name=module_args["region"],
- )
- api_obj.create_availability_zone.assert_called_once_with(
- purefusion.AvailabilityZonePost(
- name=module_args["name"],
- display_name=module_args["display_name"],
- ),
- region_name=module_args["region"],
- )
- api_obj.update_availability_zone.assert_not_called()
- api_obj.delete_availability_zone.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.AvailabilityZonesApi")
-def test_az_create_without_display_name(m_az_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "az1",
- "region": "region1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_availability_zone = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_availability_zone = MagicMock(return_value=OperationMock(1))
- api_obj.update_availability_zone = MagicMock(return_value=OperationMock(2))
- api_obj.delete_availability_zone = MagicMock(return_value=OperationMock(3))
- m_az_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_az.main()
-
- assert exc.value.changed
- assert exc.value.id == FAKE_RESOURCE_ID
-
- api_obj.get_region.get_availability_zone(
- availability_zone_name=module_args["name"],
- region_name=module_args["region"],
- )
- api_obj.create_availability_zone.assert_called_once_with(
- purefusion.AvailabilityZonePost(
- name=module_args["name"],
- display_name=module_args["name"],
- ),
- region_name=module_args["region"],
- )
- api_obj.update_availability_zone.assert_not_called()
- api_obj.delete_availability_zone.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.AvailabilityZonesApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_az_create_exception(m_az_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "present",
- "name": "az1",
- "region": "region1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_availability_zone = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_availability_zone = MagicMock(side_effect=exec_original)
- api_obj.update_availability_zone = MagicMock(return_value=OperationMock(2))
- api_obj.delete_availability_zone = MagicMock(return_value=OperationMock(3))
- m_az_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_az.main()
-
- api_obj.get_region.get_availability_zone(
- availability_zone_name=module_args["name"],
- region_name=module_args["region"],
- )
- api_obj.create_availability_zone.assert_called_once_with(
- purefusion.AvailabilityZonePost(
- name=module_args["name"],
- display_name=module_args["name"],
- ),
- region_name=module_args["region"],
- )
- api_obj.update_availability_zone.assert_not_called()
- api_obj.delete_availability_zone.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.AvailabilityZonesApi")
-def test_az_create_op_fails(m_az_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "az1",
- "region": "region1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_availability_zone = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_availability_zone = MagicMock(return_value=OperationMock(1))
- api_obj.update_availability_zone = MagicMock(return_value=OperationMock(2))
- api_obj.delete_availability_zone = MagicMock(return_value=OperationMock(3))
- m_az_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(OperationException):
- fusion_az.main()
-
- api_obj.get_region.get_availability_zone(
- availability_zone_name=module_args["name"],
- region_name=module_args["region"],
- )
- api_obj.create_availability_zone.assert_called_once_with(
- purefusion.AvailabilityZonePost(
- name=module_args["name"],
- display_name=module_args["name"],
- ),
- region_name=module_args["region"],
- )
- api_obj.update_availability_zone.assert_not_called()
- api_obj.delete_availability_zone.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.AvailabilityZonesApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, OperationException),
- ],
-)
-def test_az_create_op_exception(m_az_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "present",
- "name": "az1",
- "region": "region1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_availability_zone = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_availability_zone = MagicMock(return_value=OperationMock(1))
- api_obj.update_availability_zone = MagicMock(return_value=OperationMock(2))
- api_obj.delete_availability_zone = MagicMock(return_value=OperationMock(3))
- m_az_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(side_effect=exec_original)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_az.main()
-
- api_obj.get_region.get_availability_zone(
- availability_zone_name=module_args["name"],
- region_name=module_args["region"],
- )
- api_obj.create_availability_zone.assert_called_once_with(
- purefusion.AvailabilityZonePost(
- name=module_args["name"],
- display_name=module_args["name"],
- ),
- region_name=module_args["region"],
- )
- api_obj.update_availability_zone.assert_not_called()
- api_obj.delete_availability_zone.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.AvailabilityZonesApi")
-def test_az_update(m_az_api, m_op_api):
- # NOTE: Availability Zone does not have PATCH method, thus no action is expected
- module_args = {
- "state": "present",
- "name": "az1",
- "region": "region1",
- "display_name": "Availability Zone 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_az = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "region": module_args["region"], # region must match
- "display_name": None,
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_availability_zone = MagicMock(
- return_value=purefusion.AvailabilityZone(**current_az)
- )
- api_obj.create_availability_zone = MagicMock(return_value=OperationMock(1))
- api_obj.update_availability_zone = MagicMock(return_value=OperationMock(2))
- api_obj.delete_availability_zone = MagicMock(return_value=OperationMock(3))
- m_az_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_az.main()
-
- assert not exc.value.changed
-
- api_obj.get_region.get_availability_zone(
- availability_zone_name=module_args["name"],
- region_name=module_args["region"],
- )
- api_obj.create_availability_zone.assert_not_called()
- api_obj.update_availability_zone.assert_not_called()
- api_obj.delete_availability_zone.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.AvailabilityZonesApi")
-def test_az_present_not_changed(m_az_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "az1",
- "region": "region1",
- "display_name": "Availability Zone 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_az = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "region": module_args["region"], # region must match
- "display_name": module_args["display_name"],
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_availability_zone = MagicMock(
- return_value=purefusion.AvailabilityZone(**current_az)
- )
- api_obj.create_availability_zone = MagicMock(return_value=OperationMock(1))
- api_obj.update_availability_zone = MagicMock(return_value=OperationMock(2))
- api_obj.delete_availability_zone = MagicMock(return_value=OperationMock(3))
- m_az_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_az.main()
-
- assert not exc.value.changed
-
- api_obj.get_region.get_availability_zone(
- availability_zone_name=module_args["name"],
- region_name=module_args["region"],
- )
- api_obj.create_availability_zone.assert_not_called()
- api_obj.update_availability_zone.assert_not_called()
- api_obj.delete_availability_zone.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.AvailabilityZonesApi")
-def test_az_absent_not_changed(m_az_api, m_op_api):
- module_args = {
- "state": "absent",
- "name": "az1",
- "region": "region1",
- "display_name": "Availability Zone 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_availability_zone = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_availability_zone = MagicMock(return_value=OperationMock(1))
- api_obj.update_availability_zone = MagicMock(return_value=OperationMock(2))
- api_obj.delete_availability_zone = MagicMock(return_value=OperationMock(3))
- m_az_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_az.main()
-
- assert not exc.value.changed
-
- api_obj.get_region.get_availability_zone(
- availability_zone_name=module_args["name"],
- region_name=module_args["region"],
- )
- api_obj.create_availability_zone.assert_not_called()
- api_obj.update_availability_zone.assert_not_called()
- api_obj.delete_availability_zone.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.AvailabilityZonesApi")
-def test_az_delete(m_az_api, m_op_api):
- module_args = {
- "state": "absent",
- "name": "az1",
- "region": "region1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_az = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "region": module_args["region"], # region must match
- "display_name": None,
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_availability_zone = MagicMock(
- return_value=purefusion.AvailabilityZone(**current_az)
- )
- api_obj.create_availability_zone = MagicMock(return_value=OperationMock(1))
- api_obj.update_availability_zone = MagicMock(return_value=OperationMock(2))
- api_obj.delete_availability_zone = MagicMock(return_value=OperationMock(3))
- m_az_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_az.main()
-
- assert exc.value.changed
-
- api_obj.get_region.get_availability_zone(
- availability_zone_name=module_args["name"],
- region_name=module_args["region"],
- )
- api_obj.create_availability_zone.assert_not_called()
- api_obj.update_availability_zone.assert_not_called()
- api_obj.delete_availability_zone.assert_called_once_with(
- availability_zone_name=module_args["name"],
- region_name=module_args["region"],
- )
- op_obj.get_operation.assert_called_once_with(3)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.AvailabilityZonesApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_az_delete_exception(m_az_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "absent",
- "name": "az1",
- "region": "region1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_az = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "region": module_args["region"], # region must match
- "display_name": None,
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_availability_zone = MagicMock(
- return_value=purefusion.AvailabilityZone(**current_az)
- )
- api_obj.create_availability_zone = MagicMock(return_value=OperationMock(1))
- api_obj.update_availability_zone = MagicMock(return_value=OperationMock(2))
- api_obj.delete_availability_zone = MagicMock(side_effect=exec_original)
- m_az_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_az.main()
-
- api_obj.get_region.get_availability_zone(
- availability_zone_name=module_args["name"],
- region_name=module_args["region"],
- )
- api_obj.create_availability_zone.assert_not_called()
- api_obj.update_availability_zone.assert_not_called()
- api_obj.delete_availability_zone.assert_called_once_with(
- availability_zone_name=module_args["name"],
- region_name=module_args["region"],
- )
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.AvailabilityZonesApi")
-def test_az_delete_op_fails(m_az_api, m_op_api):
- module_args = {
- "state": "absent",
- "name": "az1",
- "region": "region1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_az = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "region": module_args["region"], # region must match
- "display_name": None,
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_availability_zone = MagicMock(
- return_value=purefusion.AvailabilityZone(**current_az)
- )
- api_obj.create_availability_zone = MagicMock(return_value=OperationMock(1))
- api_obj.update_availability_zone = MagicMock(return_value=OperationMock(2))
- api_obj.delete_availability_zone = MagicMock(return_value=OperationMock(3))
- m_az_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(OperationException):
- fusion_az.main()
-
- api_obj.get_region.get_availability_zone(
- availability_zone_name=module_args["name"],
- region_name=module_args["region"],
- )
- api_obj.create_availability_zone.assert_not_called()
- api_obj.update_availability_zone.assert_not_called()
- api_obj.delete_availability_zone.assert_called_once_with(
- availability_zone_name=module_args["name"],
- region_name=module_args["region"],
- )
- op_obj.get_operation.assert_called_once_with(3)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.AvailabilityZonesApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, OperationException),
- ],
-)
-def test_az_delete_op_exception(m_az_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "absent",
- "name": "az1",
- "region": "region1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_az = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "region": module_args["region"], # region must match
- "display_name": None,
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_availability_zone = MagicMock(
- return_value=purefusion.AvailabilityZone(**current_az)
- )
- api_obj.create_availability_zone = MagicMock(return_value=OperationMock(1))
- api_obj.update_availability_zone = MagicMock(return_value=OperationMock(2))
- api_obj.delete_availability_zone = MagicMock(return_value=OperationMock(3))
- m_az_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(side_effect=exec_original)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_az.main()
-
- api_obj.get_region.get_availability_zone(
- availability_zone_name=module_args["name"],
- region_name=module_args["region"],
- )
- api_obj.create_availability_zone.assert_not_called()
- api_obj.update_availability_zone.assert_not_called()
- api_obj.delete_availability_zone.assert_called_once_with(
- availability_zone_name=module_args["name"],
- region_name=module_args["region"],
- )
- op_obj.get_operation.assert_called_once_with(3)
diff --git a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_hap.py b/ansible_collections/purestorage/fusion/tests/functional/test_fusion_hap.py
deleted file mode 100644
index 258ca2034..000000000
--- a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_hap.py
+++ /dev/null
@@ -1,892 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# (c) 2023, Andrej Pajtas (apajtas@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-from unittest.mock import MagicMock, patch
-
-import fusion
-import fusion as purefusion
-import pytest
-from ansible.module_utils import basic
-from ansible_collections.purestorage.fusion.plugins.module_utils.errors import (
- OperationException,
-)
-from ansible_collections.purestorage.fusion.plugins.modules import fusion_hap
-from ansible_collections.purestorage.fusion.tests.functional.utils import (
- AnsibleExitJson,
- AnsibleFailJson,
- FailedOperationMock,
- OperationMock,
- SuccessfulOperationMock,
- FAKE_RESOURCE_ID,
- exit_json,
- fail_json,
- set_module_args,
-)
-from urllib3.exceptions import HTTPError
-
-# GLOBAL MOCKS
-fusion_hap.setup_fusion = MagicMock(return_value=purefusion.api_client.ApiClient())
-purefusion.api_client.ApiClient.call_api = MagicMock(
- side_effect=Exception("API call not mocked!")
-)
-basic.AnsibleModule.exit_json = exit_json
-basic.AnsibleModule.fail_json = fail_json
-
-
-@pytest.fixture
-def module_args():
- """Module arguments to create new HAP."""
- return {
- "state": "present",
- "name": "hap_new",
- "display_name": "Host Access Policy New",
- "iqn": "iqn.2023-05.com.purestorage:420qp2c0699",
- "personality": "aix",
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- }
-
-
-@pytest.fixture
-def current_hap_list():
- return fusion.HostAccessPolicyList(
- count=3,
- more_items_remaining=False,
- items=[
- fusion.HostAccessPolicy(
- id="1",
- self_link="self_link_value",
- name="hap1",
- display_name="Host Access Policy 1",
- iqn="iqn.2023-05.com.purestorage:420qp2c0261",
- personality="aix",
- ),
- fusion.HostAccessPolicy(
- id="2",
- self_link="self_link_value",
- name="hap2",
- display_name="Host Access Policy 2",
- iqn="iqn.2023-05.com.purestorage:420qp2c0262",
- personality="windows",
- ),
- fusion.HostAccessPolicy(
- id="3",
- self_link="self_link_value",
- name="hap3",
- display_name="Host Access Policy 3",
- iqn="iqn.2023-05.com.purestorage:420qp2c0263",
- personality="solaris",
- ),
- ],
- )
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.HostAccessPoliciesApi")
-@pytest.mark.parametrize(
- "module_args",
- [
- # required parameter 'name` is missing
- {
- "state": "present",
- "display_name": "Host Access Policy 1",
- "iqn": "iqn.2023-05.com.purestorage:420qp2c0261",
- "personality": "aix",
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- },
- # 'state' is 'present' but 'iqn' is not provided
- {
- "state": "present",
- "name": "hap1",
- "display_name": "Host Access Policy 1",
- "personality": "aix",
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- },
- # unknown parameter 'extra' is provided
- {
- "state": "present",
- "name": "hap1",
- "display_name": "Host Access Policy 1",
- "iqn": "iqn.2023-05.com.purestorage:420qp2c0261",
- "personality": "aix",
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- "extra": "value",
- },
- # parameter 'state` has incorrect value
- {
- "state": "cool",
- "name": "hap1",
- "display_name": "Host Access Policy 1",
- "iqn": "iqn.2023-05.com.purestorage:420qp2c0261",
- "personality": "aix",
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- },
- # parameter 'personality` has incorrect value
- {
- "state": "present",
- "name": "hap1",
- "display_name": "Host Access Policy 1",
- "iqn": "iqn.2023-05.com.purestorage:420qp2c0261",
- "personality": "cool",
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- },
- ],
-)
-def test_module_fails_on_wrong_parameters(
- m_hap_api, m_op_api, module_args, current_hap_list
-):
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.list_host_access_policies = MagicMock(return_value=current_hap_list)
- api_obj.get_host_access_policy = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_host_access_policy = MagicMock(return_value=OperationMock(1))
- api_obj.update_host_access_policy = MagicMock(return_value=OperationMock(2))
- api_obj.delete_host_access_policy = MagicMock(return_value=OperationMock(3))
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
- m_hap_api.return_value = api_obj
-
- # run module
- with pytest.raises(AnsibleFailJson):
- fusion_hap.main()
-
- # check api was not called at all
- api_obj.list_host_access_policies.assert_not_called()
- api_obj.get_host_access_policy.assert_not_called()
- api_obj.create_host_access_policy.assert_not_called()
- api_obj.update_host_access_policy.assert_not_called()
- api_obj.delete_host_access_policy.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.HostAccessPoliciesApi")
-@pytest.mark.parametrize(
- "name",
- [
- "",
- "space space",
- "toolongname_toolongname_toolongname_toolongname_toolongname_toolongname",
- "end_with_underscore_",
- "_start_with_underscore",
- ],
-)
-def test_hap_fail_on_invalid_name(
- m_hap_api, m_op_api, module_args, current_hap_list, name
-):
- module_args["name"] = name
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.list_host_access_policies = MagicMock(
- side_effect=purefusion.rest.ApiException
- )
- api_obj.get_host_access_policy = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_host_access_policy = MagicMock(return_value=OperationMock(1))
- api_obj.update_host_access_policy = MagicMock(return_value=OperationMock(2))
- api_obj.delete_host_access_policy = MagicMock(return_value=OperationMock(3))
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
- m_hap_api.return_value = api_obj
-
- # run module
- with pytest.raises(AnsibleFailJson):
- fusion_hap.main()
-
- # check api was not called at all
- api_obj.list_host_access_policies.assert_not_called()
- api_obj.get_host_access_policy.assert_not_called()
- api_obj.create_host_access_policy.assert_not_called()
- api_obj.update_host_access_policy.assert_not_called()
- api_obj.delete_host_access_policy.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.HostAccessPoliciesApi")
-@pytest.mark.parametrize(
- "iqn",
- [
- "qn.2023-05.com.purestorage:420qp2c0261",
- "iqn2023-05.com.purestorage:420qp2c0261",
- "iqn.202305.com.purestorage:420qp2c0261",
- "iqn.2023-05com.purestorage:420qp2c0261",
- "iqn.2023-05.com.purestorage:",
- "iqn.2023-05..purestorage:420qp2c0261",
- ".2023-05.com.purestorage:420qp2c0261",
- "2023-05.com.purestorage:420qp2c0261",
- ],
-)
-def test_hap_fail_on_invalid_iqn(
- m_hap_api, m_op_api, module_args, current_hap_list, iqn
-):
- module_args["iqn"] = iqn
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.list_host_access_policies = MagicMock(
- side_effect=purefusion.rest.ApiException
- )
- api_obj.get_host_access_policy = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_host_access_policy = MagicMock(return_value=OperationMock(1))
- api_obj.update_host_access_policy = MagicMock(return_value=OperationMock(2))
- api_obj.delete_host_access_policy = MagicMock(return_value=OperationMock(3))
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
- m_hap_api.return_value = api_obj
-
- # run module
- with pytest.raises(AnsibleFailJson):
- fusion_hap.main()
-
- # check api was not called at all
- api_obj.list_host_access_policies.assert_not_called()
- api_obj.get_host_access_policy.assert_not_called()
- api_obj.create_host_access_policy.assert_not_called()
- api_obj.update_host_access_policy.assert_not_called()
- api_obj.delete_host_access_policy.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.HostAccessPoliciesApi")
-def test_hap_create(m_hap_api, m_op_api, module_args, current_hap_list):
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.list_host_access_policies = MagicMock(return_value=current_hap_list)
- api_obj.get_host_access_policy = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_host_access_policy = MagicMock(return_value=OperationMock(1))
- api_obj.update_host_access_policy = MagicMock(return_value=OperationMock(2))
- api_obj.delete_host_access_policy = MagicMock(return_value=OperationMock(3))
- m_hap_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_hap.main()
-
- assert exc.value.changed is True
- assert exc.value.id == FAKE_RESOURCE_ID
-
- # check api was called correctly
- api_obj.list_host_access_policies.assert_called_once_with()
- api_obj.get_host_access_policy.assert_called_once_with(
- host_access_policy_name=module_args["name"]
- )
- api_obj.create_host_access_policy.assert_called_once_with(
- purefusion.HostAccessPoliciesPost(
- iqn=module_args["iqn"],
- personality=module_args["personality"],
- name=module_args["name"],
- display_name=module_args["display_name"],
- )
- )
- api_obj.update_host_access_policy.assert_not_called()
- api_obj.delete_host_access_policy.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.HostAccessPoliciesApi")
-def test_hap_create_without_display_name(
- m_hap_api, m_op_api, module_args, current_hap_list
-):
- del module_args["display_name"]
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.list_host_access_policies = MagicMock(return_value=current_hap_list)
- api_obj.get_host_access_policy = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_host_access_policy = MagicMock(return_value=OperationMock(1))
- api_obj.update_host_access_policy = MagicMock(return_value=OperationMock(2))
- api_obj.delete_host_access_policy = MagicMock(return_value=OperationMock(3))
- m_hap_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_hap.main()
-
- assert exc.value.changed is True
- assert exc.value.id == FAKE_RESOURCE_ID
-
- # check api was called correctly
- api_obj.list_host_access_policies.assert_called_once_with()
- api_obj.get_host_access_policy.assert_called_once_with(
- host_access_policy_name=module_args["name"]
- )
- api_obj.create_host_access_policy.assert_called_once_with(
- purefusion.HostAccessPoliciesPost(
- iqn=module_args["iqn"],
- personality=module_args["personality"],
- name=module_args["name"],
- display_name=module_args["name"],
- )
- )
- api_obj.update_host_access_policy.assert_not_called()
- api_obj.delete_host_access_policy.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.HostAccessPoliciesApi")
-def test_hap_create_iqn_exists(m_hap_api, m_op_api, module_args, current_hap_list):
- module_args["iqn"] = current_hap_list.items[0].iqn
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.list_host_access_policies = MagicMock(return_value=current_hap_list)
- api_obj.get_host_access_policy = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_host_access_policy = MagicMock(return_value=OperationMock(1))
- api_obj.update_host_access_policy = MagicMock(return_value=OperationMock(2))
- api_obj.delete_host_access_policy = MagicMock(return_value=OperationMock(3))
- m_hap_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleFailJson) as exc:
- fusion_hap.main()
-
- # check api was called correctly
- api_obj.list_host_access_policies.assert_called_once_with()
- api_obj.get_host_access_policy.assert_called_once_with(
- host_access_policy_name=module_args["name"]
- )
- api_obj.create_host_access_policy.assert_not_called()
- api_obj.update_host_access_policy.assert_not_called()
- api_obj.delete_host_access_policy.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.HostAccessPoliciesApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_hap_create_exception(
- m_hap_api, m_op_api, exec_original, exec_catch, module_args, current_hap_list
-):
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.list_host_access_policies = MagicMock(return_value=current_hap_list)
- api_obj.get_host_access_policy = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_host_access_policy = MagicMock(side_effect=exec_original)
- api_obj.update_host_access_policy = MagicMock(return_value=OperationMock(2))
- api_obj.delete_host_access_policy = MagicMock(return_value=OperationMock(3))
- m_hap_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_hap.main()
-
- # check api was called correctly
- api_obj.list_host_access_policies.assert_called_once_with()
- api_obj.get_host_access_policy.assert_called_once_with(
- host_access_policy_name=module_args["name"]
- )
- api_obj.create_host_access_policy.assert_called_once_with(
- purefusion.HostAccessPoliciesPost(
- iqn=module_args["iqn"],
- personality=module_args["personality"],
- name=module_args["name"],
- display_name=module_args["display_name"],
- )
- )
- api_obj.update_host_access_policy.assert_not_called()
- api_obj.delete_host_access_policy.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.HostAccessPoliciesApi")
-def test_hap_create_op_fails(m_hap_api, m_op_api, module_args, current_hap_list):
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.list_host_access_policies = MagicMock(return_value=current_hap_list)
- api_obj.get_host_access_policy = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_host_access_policy = MagicMock(return_value=OperationMock(1))
- api_obj.update_host_access_policy = MagicMock(return_value=OperationMock(2))
- api_obj.delete_host_access_policy = MagicMock(return_value=OperationMock(3))
- m_hap_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(OperationException):
- fusion_hap.main()
-
- # check api was called correctly
- api_obj.list_host_access_policies.assert_called_once_with()
- api_obj.get_host_access_policy.assert_called_once_with(
- host_access_policy_name=module_args["name"]
- )
- api_obj.create_host_access_policy.assert_called_once_with(
- purefusion.HostAccessPoliciesPost(
- iqn=module_args["iqn"],
- personality=module_args["personality"],
- name=module_args["name"],
- display_name=module_args["display_name"],
- )
- )
- api_obj.update_host_access_policy.assert_not_called()
- api_obj.delete_host_access_policy.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.HostAccessPoliciesApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, OperationException),
- ],
-)
-def test_hap_create_op_exception(
- m_hap_api, m_op_api, exec_original, exec_catch, module_args, current_hap_list
-):
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.list_host_access_policies = MagicMock(return_value=current_hap_list)
- api_obj.get_host_access_policy = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_host_access_policy = MagicMock(return_value=OperationMock(1))
- api_obj.update_host_access_policy = MagicMock(return_value=OperationMock(2))
- api_obj.delete_host_access_policy = MagicMock(return_value=OperationMock(3))
- m_hap_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(side_effect=exec_original)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_hap.main()
-
- # check api was called correctly
- api_obj.list_host_access_policies.assert_called_once_with()
- api_obj.get_host_access_policy.assert_called_once_with(
- host_access_policy_name=module_args["name"]
- )
- api_obj.create_host_access_policy.assert_called_once_with(
- purefusion.HostAccessPoliciesPost(
- iqn=module_args["iqn"],
- personality=module_args["personality"],
- name=module_args["name"],
- display_name=module_args["display_name"],
- )
- )
- api_obj.update_host_access_policy.assert_not_called()
- api_obj.delete_host_access_policy.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.HostAccessPoliciesApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_hap_list_exception(
- m_hap_api, m_op_api, exec_original, exec_catch, module_args, current_hap_list
-):
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.list_host_access_policies = MagicMock(side_effect=exec_original)
- api_obj.get_host_access_policy = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_host_access_policy = MagicMock(side_effect=OperationMock(1))
- api_obj.update_host_access_policy = MagicMock(return_value=OperationMock(2))
- api_obj.delete_host_access_policy = MagicMock(return_value=OperationMock(3))
- m_hap_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_hap.main()
-
- # check api was called correctly
- api_obj.list_host_access_policies.assert_called_once_with()
- api_obj.get_host_access_policy.assert_called_once_with(
- host_access_policy_name=module_args["name"]
- )
- api_obj.create_host_access_policy.assert_not_called()
- api_obj.update_host_access_policy.assert_not_called()
- api_obj.delete_host_access_policy.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.HostAccessPoliciesApi")
-def test_hap_update(m_hap_api, m_op_api, module_args, current_hap_list):
- # NOTE: Host Access Policy does not have PATCH method, thus no action is expected
- current_hap = current_hap_list.items[0]
- module_args["name"] = current_hap.name
- module_args["display_name"] = "New Display Name"
- module_args["iqn"] = current_hap.iqn
- module_args["personality"] = (
- "windows" if current_hap.personality != "windows" else "linux"
- )
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.list_host_access_policies = MagicMock(return_value=current_hap_list)
- api_obj.get_host_access_policy = MagicMock(return_value=current_hap)
- api_obj.create_host_access_policy = MagicMock(return_value=OperationMock(1))
- api_obj.update_host_access_policy = MagicMock(return_value=OperationMock(2))
- api_obj.delete_host_access_policy = MagicMock(return_value=OperationMock(3))
- m_hap_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_hap.main()
-
- assert exc.value.changed is False
-
- # check api was called correctly
- api_obj.list_host_access_policies.assert_called_once_with()
- api_obj.get_host_access_policy.assert_called_once_with(
- host_access_policy_name=module_args["name"]
- )
- api_obj.create_host_access_policy.assert_not_called()
- api_obj.update_host_access_policy.assert_not_called()
- api_obj.delete_host_access_policy.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.HostAccessPoliciesApi")
-def test_hap_present_not_changed(m_hap_api, m_op_api, module_args, current_hap_list):
- current_hap = current_hap_list.items[0]
- module_args["name"] = current_hap.name
- module_args["display_name"] = current_hap.display_name
- module_args["iqn"] = current_hap.iqn
- module_args["personality"] = current_hap.personality
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.list_host_access_policies = MagicMock(return_value=current_hap_list)
- api_obj.get_host_access_policy = MagicMock(return_value=current_hap)
- api_obj.create_host_access_policy = MagicMock(return_value=OperationMock(1))
- api_obj.update_host_access_policy = MagicMock(return_value=OperationMock(2))
- api_obj.delete_host_access_policy = MagicMock(return_value=OperationMock(3))
- m_hap_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_hap.main()
-
- assert exc.value.changed is False
-
- # check api was called correctly
- api_obj.list_host_access_policies.assert_called_once_with()
- api_obj.get_host_access_policy.assert_called_once_with(
- host_access_policy_name=module_args["name"]
- )
- api_obj.create_host_access_policy.assert_not_called()
- api_obj.update_host_access_policy.assert_not_called()
- api_obj.delete_host_access_policy.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.HostAccessPoliciesApi")
-def test_hap_absent_not_changed(m_hap_api, m_op_api, module_args, current_hap_list):
- module_args["state"] = "absent"
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.list_host_access_policies = MagicMock(return_value=current_hap_list)
- api_obj.get_host_access_policy = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_host_access_policy = MagicMock(return_value=OperationMock(1))
- api_obj.update_host_access_policy = MagicMock(return_value=OperationMock(2))
- api_obj.delete_host_access_policy = MagicMock(return_value=OperationMock(3))
- m_hap_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_hap.main()
-
- assert exc.value.changed is False
-
- # check api was called correctly
- api_obj.list_host_access_policies.assert_called_once_with()
- api_obj.get_host_access_policy.assert_called_once_with(
- host_access_policy_name=module_args["name"]
- )
- api_obj.create_host_access_policy.assert_not_called()
- api_obj.update_host_access_policy.assert_not_called()
- api_obj.delete_host_access_policy.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.HostAccessPoliciesApi")
-def test_hap_delete(m_hap_api, m_op_api, module_args, current_hap_list):
- current_hap = current_hap_list.items[0]
- module_args["state"] = "absent"
- module_args["name"] = current_hap.name
- module_args["display_name"] = current_hap.display_name
- module_args["iqn"] = current_hap.iqn
- module_args["personality"] = current_hap.personality
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.list_host_access_policies = MagicMock(return_value=current_hap_list)
- api_obj.get_host_access_policy = MagicMock(return_value=current_hap)
- api_obj.create_host_access_policy = MagicMock(return_value=OperationMock(1))
- api_obj.update_host_access_policy = MagicMock(return_value=OperationMock(2))
- api_obj.delete_host_access_policy = MagicMock(return_value=OperationMock(3))
- m_hap_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_hap.main()
-
- assert exc.value.changed is True
-
- # check api was called correctly
- api_obj.list_host_access_policies.assert_called_once_with()
- api_obj.get_host_access_policy.assert_called_once_with(
- host_access_policy_name=module_args["name"]
- )
- api_obj.create_host_access_policy.assert_not_called()
- api_obj.update_host_access_policy.assert_not_called()
- api_obj.delete_host_access_policy.assert_called_once_with(
- host_access_policy_name=module_args["name"]
- )
- op_obj.get_operation.assert_called_once_with(3)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.HostAccessPoliciesApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_hap_delete_exception(
- m_hap_api, m_op_api, exec_original, exec_catch, module_args, current_hap_list
-):
- current_hap = current_hap_list.items[0]
- module_args["state"] = "absent"
- module_args["name"] = current_hap.name
- module_args["display_name"] = current_hap.display_name
- module_args["iqn"] = current_hap.iqn
- module_args["personality"] = current_hap.personality
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.list_host_access_policies = MagicMock(return_value=current_hap_list)
- api_obj.get_host_access_policy = MagicMock(return_value=current_hap)
- api_obj.create_host_access_policy = MagicMock(return_value=OperationMock(1))
- api_obj.update_host_access_policy = MagicMock(return_value=OperationMock(2))
- api_obj.delete_host_access_policy = MagicMock(side_effect=exec_original)
- m_hap_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_hap.main()
-
- # check api was called correctly
- api_obj.list_host_access_policies.assert_called_once_with()
- api_obj.get_host_access_policy.assert_called_once_with(
- host_access_policy_name=module_args["name"]
- )
- api_obj.create_host_access_policy.assert_not_called()
- api_obj.update_host_access_policy.assert_not_called()
- api_obj.delete_host_access_policy.assert_called_once_with(
- host_access_policy_name=module_args["name"]
- )
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.HostAccessPoliciesApi")
-def test_hap_delete_op_fails(m_hap_api, m_op_api, module_args, current_hap_list):
- current_hap = current_hap_list.items[0]
- module_args["state"] = "absent"
- module_args["name"] = current_hap.name
- module_args["display_name"] = current_hap.display_name
- module_args["iqn"] = current_hap.iqn
- module_args["personality"] = current_hap.personality
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.list_host_access_policies = MagicMock(return_value=current_hap_list)
- api_obj.get_host_access_policy = MagicMock(return_value=current_hap)
- api_obj.create_host_access_policy = MagicMock(return_value=OperationMock(1))
- api_obj.update_host_access_policy = MagicMock(return_value=OperationMock(2))
- api_obj.delete_host_access_policy = MagicMock(return_value=OperationMock(3))
- m_hap_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(OperationException):
- fusion_hap.main()
-
- # check api was called correctly
- api_obj.list_host_access_policies.assert_called_once_with()
- api_obj.get_host_access_policy.assert_called_once_with(
- host_access_policy_name=module_args["name"]
- )
- api_obj.create_host_access_policy.assert_not_called()
- api_obj.update_host_access_policy.assert_not_called()
- api_obj.delete_host_access_policy.assert_called_once_with(
- host_access_policy_name=module_args["name"]
- )
- op_obj.get_operation.assert_called_once_with(3)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.HostAccessPoliciesApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, OperationException),
- ],
-)
-def test_hap_delete_op_exception(
- m_hap_api, m_op_api, exec_original, exec_catch, module_args, current_hap_list
-):
- current_hap = current_hap_list.items[0]
- module_args["state"] = "absent"
- module_args["name"] = current_hap.name
- module_args["display_name"] = current_hap.display_name
- module_args["iqn"] = current_hap.iqn
- module_args["personality"] = current_hap.personality
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.list_host_access_policies = MagicMock(return_value=current_hap_list)
- api_obj.get_host_access_policy = MagicMock(return_value=current_hap)
- api_obj.create_host_access_policy = MagicMock(return_value=OperationMock(1))
- api_obj.update_host_access_policy = MagicMock(return_value=OperationMock(2))
- api_obj.delete_host_access_policy = MagicMock(return_value=OperationMock(3))
- m_hap_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(side_effect=exec_original)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_hap.main()
-
- # check api was called correctly
- api_obj.list_host_access_policies.assert_called_once_with()
- api_obj.get_host_access_policy.assert_called_once_with(
- host_access_policy_name=module_args["name"]
- )
- api_obj.create_host_access_policy.assert_not_called()
- api_obj.update_host_access_policy.assert_not_called()
- api_obj.delete_host_access_policy.assert_called_once_with(
- host_access_policy_name=module_args["name"]
- )
- op_obj.get_operation.assert_called_once_with(3)
diff --git a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_hw.py b/ansible_collections/purestorage/fusion/tests/functional/test_fusion_hw.py
deleted file mode 100644
index 3ad109b64..000000000
--- a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_hw.py
+++ /dev/null
@@ -1,115 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# (c) 2023, Andrej Pajtas (apajtas@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-from unittest.mock import MagicMock
-
-import fusion as purefusion
-import pytest
-from ansible.module_utils import basic
-from ansible_collections.purestorage.fusion.plugins.modules import fusion_hw
-from ansible_collections.purestorage.fusion.tests.functional.utils import (
- AnsibleExitJson,
- AnsibleFailJson,
- exit_json,
- fail_json,
- set_module_args,
-)
-
-# GLOBAL MOCKS
-fusion_hw.setup_fusion = MagicMock(return_value=purefusion.api_client.ApiClient())
-purefusion.api_client.ApiClient.call_api = MagicMock(
- side_effect=Exception("API call not mocked!")
-)
-basic.AnsibleModule.exit_json = exit_json
-basic.AnsibleModule.fail_json = fail_json
-
-
-@pytest.mark.parametrize(
- "module_args",
- [
- # unknown parameter 'extra' is provided
- {
- "state": "present",
- "name": "hw1",
- "display_name": "Hardware Type 1",
- "array_type": "FA//X",
- "media_type": "random",
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- "extra": "value",
- },
- # parameter 'state` has incorrect value
- {
- "state": "cool",
- "name": "hw1",
- "display_name": "Hardware Type 1",
- "array_type": "FA//X",
- "media_type": "random",
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- },
- # parameter 'state` has incorrect value
- {
- "state": "absent",
- "name": "hw1",
- "display_name": "Hardware Type 1",
- "array_type": "FA//X",
- "media_type": "random",
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- },
- # parameter 'array_type` has incorrect value
- {
- "state": "present",
- "name": "hw1",
- "display_name": "Hardware Type 1",
- "array_type": "wrong",
- "media_type": "random",
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- },
- ],
-)
-def test_module_fails_on_wrong_parameters(module_args):
- set_module_args(module_args)
-
- # run module
- with pytest.raises(AnsibleFailJson):
- fusion_hw.main()
-
-
-@pytest.mark.parametrize("state", [None, "present"])
-@pytest.mark.parametrize("name", [None, "hw_type_name1"])
-@pytest.mark.parametrize("display_name", [None, "Super weird Display Name 12 3"])
-@pytest.mark.parametrize("array_type", [None, "FA//X", "FA//C"])
-@pytest.mark.parametrize("media_type", [None, "random"])
-def test_hw_does_not_call_api(state, name, display_name, array_type, media_type):
- module_args = {
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- }
- if state is not None:
- module_args["state"] = state
- if name is not None:
- module_args["name"] = name
- if display_name is not None:
- module_args["display_name"] = display_name
- if array_type is not None:
- module_args["array_type"] = array_type
- if media_type is not None:
- module_args["media_type"] = media_type
- set_module_args(module_args)
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_hw.main()
-
- assert exc.value.changed is False
-
- # NOTE: api call assertion is handled by global mock
diff --git a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_info.py b/ansible_collections/purestorage/fusion/tests/functional/test_fusion_info.py
deleted file mode 100644
index c542cddc0..000000000
--- a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_info.py
+++ /dev/null
@@ -1,2384 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# (c) 2023, Andrej Pajtas (apajtas@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-import os
-from itertools import combinations
-from unittest.mock import MagicMock, call, patch
-
-import fusion as purefusion
-import pytest
-from ansible.module_utils import basic
-from ansible_collections.purestorage.fusion.plugins.modules import fusion_info
-from ansible_collections.purestorage.fusion.tests.functional.utils import (
- AnsibleExitJson,
- exit_json,
- fail_json,
- set_module_args,
-)
-from ansible_collections.purestorage.fusion.tests.helpers import (
- ApiExceptionsMockGenerator,
-)
-from urllib3.exceptions import HTTPError
-import time
-
-# GLOBAL MOCKS
-fusion_info.setup_fusion = MagicMock(return_value=purefusion.api_client.ApiClient())
-purefusion.api_client.ApiClient.call_api = MagicMock(
- side_effect=Exception("API call not mocked!")
-)
-basic.AnsibleModule.exit_json = exit_json
-basic.AnsibleModule.fail_json = fail_json
-
-VALID_SUBSETS = {
- "all",
- "minimum",
- "roles",
- "users",
- "arrays",
- "hardware_types",
- "volumes",
- "host_access_policies",
- "storage_classes",
- "protection_policies",
- "placement_groups",
- "network_interfaces",
- "availability_zones",
- "storage_endpoints",
- "snapshots",
- "storage_services",
- "tenants",
- "tenant_spaces",
- "network_interface_groups",
- "api_clients",
- "regions",
-}
-
-EXPECTED_KEYS = {
- "all": {
- "default",
- "hardware_types",
- "users",
- "availability_zones",
- "roles",
- "role_assignments",
- "storage_services",
- "volumes",
- "protection_policies",
- "placement_groups",
- "storage_classes",
- "network_interfaces",
- "host_access_policies",
- "tenants",
- "tenant_spaces",
- "storage_endpoints",
- "api_clients",
- "network_interface_groups",
- "volume_snapshots",
- "snapshots",
- "arrays",
- "regions",
- },
- "minimum": {"default"},
- "arrays": {"arrays"},
- "hardware_types": {"hardware_types"},
- "users": {"users"},
- "availability_zones": {"availability_zones"},
- "roles": {"roles", "role_assignments"},
- "storage_services": {"storage_services"},
- "volumes": {"volumes"},
- "protection_policies": {"protection_policies"},
- "placement_groups": {"placement_groups"},
- "storage_classes": {"storage_classes"},
- "network_interfaces": {"network_interfaces"},
- "host_access_policies": {"host_access_policies"},
- "tenants": {"tenants"},
- "tenant_spaces": {"tenant_spaces"},
- "storage_endpoints": {"storage_endpoints"},
- "api_clients": {"api_clients"},
- "network_interface_groups": {"network_interface_groups"},
- "snapshots": {"snapshots", "volume_snapshots"},
- "regions": {"regions"},
-}
-
-RESP_VERSION = purefusion.Version(version=1)
-RESP_AS = purefusion.Space(
- resource=purefusion.ResourceReference(
- id="333",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- total_physical_space=1,
- unique_space=1,
- snapshot_space=1,
-)
-RESP_AP = purefusion.Performance(
- resource=purefusion.ResourceReference(
- id="222",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- reads_per_sec=12345,
- read_latency_us=1000,
- read_bandwidth=5000000,
- writes_per_sec=12611,
- write_latency_us=2000,
- write_bandwidth=4000000,
-)
-RESP_LU = [
- purefusion.User(
- id="390",
- name="username1",
- self_link="self_link_value",
- display_name="User's Name 1",
- email="user1@email.com",
- ),
- purefusion.User(
- id="391",
- name="username2",
- self_link="self_link_value",
- display_name="User's Name 2",
- email="user2@email.com",
- ),
-]
-RESP_PP = purefusion.ProtectionPolicyList(
- count=2,
- more_items_remaining=False,
- items=[
- purefusion.ProtectionPolicy(
- id="098",
- name="pp1",
- self_link="self_link_value",
- display_name="Protection Policy 1",
- objectives=[],
- ),
- purefusion.ProtectionPolicy(
- id="099",
- name="pp2",
- self_link="self_link_value",
- display_name="Protection Policy 2",
- objectives=[],
- ),
- ],
-)
-RESP_HAP = purefusion.HostAccessPolicyList(
- count=2,
- more_items_remaining=False,
- items=[
- purefusion.HostAccessPolicy(
- id="900",
- name="hap1",
- self_link="self_link_value",
- display_name="Host Access Policy 1",
- iqn="iqn.2023-05.com.purestorage:420qp2c0261",
- personality="aix",
- ),
- purefusion.HostAccessPolicy(
- id="901",
- name="hap2",
- self_link="self_link_value",
- display_name="Host Access Policy 2",
- iqn="iqn.2023-05.com.purestorage:420qp2c0262",
- personality="linux",
- ),
- ],
-)
-RESP_HT = purefusion.HardwareTypeList(
- count=2,
- more_items_remaining=False,
- items=[
- purefusion.HardwareType(
- id="500",
- name="ht1",
- self_link="self_link_value",
- display_name="Hardware Type 1",
- array_type="FA//X",
- media_type="whatever",
- ),
- purefusion.HardwareType(
- id="501",
- name="ht2",
- self_link="self_link_value",
- display_name="Hardware Type 2",
- array_type="FA//C",
- media_type="whatever",
- ),
- ],
-)
-RESP_SS = purefusion.StorageServiceList(
- count=2,
- more_items_remaining=False,
- items=[
- purefusion.StorageService(
- id="502",
- name="ss1",
- self_link="self_link_value",
- display_name="Storage Service 1",
- hardware_types=[
- purefusion.HardwareTypeRef(
- id="910",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- purefusion.HardwareTypeRef(
- id="911",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- ],
- ),
- purefusion.StorageService(
- id="503",
- name="ss2",
- self_link="self_link_value",
- display_name="Storage Service 3",
- hardware_types=[
- purefusion.HardwareTypeRef(
- id="912",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- )
- ],
- ),
- ],
-)
-RESP_TENANTS = purefusion.TenantList(
- count=2,
- more_items_remaining=False,
- items=[
- purefusion.Tenant(
- id="504",
- name="t1",
- self_link="self_link_value",
- display_name="Tenant 1",
- tenant_spaces_link="ts_link",
- ),
- purefusion.Tenant(
- id="505",
- name="t2",
- self_link="self_link_value",
- display_name="Tenant 2",
- tenant_spaces_link="ts_link",
- ),
- ],
-)
-RESP_REGIONS = purefusion.RegionList(
- count=2,
- more_items_remaining=False,
- items=[
- purefusion.Region(
- id="506",
- name="region1",
- self_link="self_link_value",
- display_name="Region 1",
- ),
- purefusion.Region(
- id="507",
- name="region2",
- self_link="self_link_value",
- display_name="Region 2",
- ),
- ],
-)
-RESP_ROLES = [
- purefusion.Role(
- id="902",
- name="role1",
- self_link="self_link_value",
- display_name="Role 1",
- description="nice description",
- assignable_scopes=["scope1", "scope2"],
- ),
- purefusion.Role(
- id="903",
- name="role2",
- self_link="self_link_value",
- display_name="Role 2",
- description="not so nice description",
- assignable_scopes=["scope3", "scope2"],
- ),
-]
-RESP_SC = purefusion.StorageClassList(
- count=2,
- more_items_remaining=False,
- items=[
- purefusion.StorageClass(
- id="508",
- name="sc1",
- self_link="self_link_value",
- display_name="Storage Class 1",
- storage_service=purefusion.StorageServiceRef(
- id="509",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- size_limit=12345678,
- iops_limit=10000,
- bandwidth_limit=2000000,
- ),
- purefusion.StorageClass(
- id="510",
- name="sc2",
- self_link="self_link_value",
- display_name="Storage Class 2",
- storage_service=purefusion.StorageServiceRef(
- id="511",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- size_limit=12345679,
- iops_limit=10001,
- bandwidth_limit=2000001,
- ),
- ],
-)
-RESP_RA = [
- purefusion.RoleAssignment(
- id="904",
- name="ra1",
- self_link="self_link_value",
- display_name="Role Assignment 1",
- role=purefusion.RoleRef(
- id="512",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- scope=purefusion.ResourceReference(
- id="513",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- principal="user1",
- ),
- purefusion.RoleAssignment(
- id="905",
- name="ra2",
- self_link="self_link_value",
- display_name="Role Assignment 2",
- role=purefusion.RoleRef(
- id="513",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- scope=purefusion.ResourceReference(
- id="514",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- principal="user2",
- ),
-]
-RESP_TS = purefusion.TenantSpaceList(
- count=2,
- more_items_remaining=False,
- items=[
- purefusion.TenantSpace(
- id="515",
- name="ts1",
- self_link="self_link_value",
- display_name="Tenant Space 1",
- tenant=RESP_TENANTS.items[0].name,
- volumes_link="link_value1",
- snapshots_link="link_value2",
- placement_groups_link="link_value3",
- ),
- purefusion.TenantSpace(
- id="516",
- name="ts2",
- self_link="self_link_value",
- display_name="Tenant Space 2",
- tenant=RESP_TENANTS.items[1].name,
- volumes_link="link_value4",
- snapshots_link="link_value5",
- placement_groups_link="link_value6",
- ),
- ],
-)
-RESP_VOLUMES = purefusion.VolumeList(
- count=1,
- more_items_remaining=False,
- items=[
- purefusion.Volume(
- id="517",
- name="volume1",
- self_link="self_link_value",
- display_name="Volume 1",
- size=4000000,
- tenant=purefusion.TenantRef(
- id="518",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- tenant_space=purefusion.TenantSpaceRef(
- id="519",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- storage_class=purefusion.StorageClassRef(
- id="520",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- protection_policy=purefusion.ProtectionPolicyRef(
- id="521",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- placement_group=purefusion.PlacementGroupRef(
- id="522",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- array=purefusion.ArrayRef(
- id="905",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- created_at=485743825,
- source_volume_snapshot=purefusion.VolumeSnapshotRef(
- id="523",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- host_access_policies=[
- purefusion.HostAccessPolicyRef(
- id="524",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- )
- ],
- serial_number="123923482034",
- target=purefusion.Target(
- iscsi=purefusion.Iscsi(
- iqn="iqn.2023-05.com.purestorage:420qp2c0222",
- addresses=["125.1.2.4"],
- )
- ),
- time_remaining=1000000,
- destroyed=False,
- )
- ],
-)
-RESP_PG = purefusion.PlacementGroupList(
- count=1,
- more_items_remaining=False,
- items=[
- purefusion.PlacementGroup(
- id="525",
- name="pg1",
- self_link="self_link_value",
- display_name="Placement Group 1",
- tenant=purefusion.TenantRef(
- id="526",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- tenant_space=purefusion.TenantSpaceRef(
- id="527",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- placement_engine=purefusion.PlacementEngine(),
- availability_zone=purefusion.AvailabilityZoneRef(
- id="528",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- protocols=purefusion.Target(
- iscsi=purefusion.Iscsi(
- iqn="iqn.2023-05.com.purestorage:420qp2c0211",
- addresses=["125.1.2.5"],
- )
- ),
- storage_service=purefusion.StorageServiceRef(
- id="529",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- array=purefusion.ArrayRef(
- id="530",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- )
- ],
-)
-RESP_SNAPSHOTS = purefusion.SnapshotList(
- count=1,
- more_items_remaining=False,
- items=[
- purefusion.Snapshot(
- id="531",
- name="snapshot1",
- self_link="self_link_value",
- display_name="Snapshot 1",
- tenant=purefusion.TenantRef(
- id="531",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- tenant_space=purefusion.TenantSpaceRef(
- id="532",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- volume_snapshots_link="link_to_volume_snapshot",
- protection_policy=purefusion.ProtectionPolicyRef(
- id="533",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- time_remaining=23432,
- destroyed=False,
- )
- ],
-)
-RESP_AZ = purefusion.AvailabilityZoneList(
- count=3,
- more_items_remaining=False,
- items=[
- purefusion.AvailabilityZone(
- id="534",
- name="az1",
- self_link="self_link_value",
- display_name="Availability Zone 1",
- region=purefusion.RegionRef(
- id="535",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- ),
- purefusion.AvailabilityZone(
- id="536",
- name="az2",
- self_link="self_link_value",
- display_name="Availability Zone 2",
- region=purefusion.RegionRef(
- id="537",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- ),
- purefusion.AvailabilityZone(
- id="537",
- name="az3",
- self_link="self_link_value",
- display_name="Availability Zone 3",
- region=purefusion.RegionRef(
- id="538",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- ),
- ],
-)
-RESP_NIG = purefusion.NetworkInterfaceGroupList(
- count=1,
- more_items_remaining=False,
- items=[
- purefusion.NetworkInterfaceGroup(
- id="538",
- name="nig1",
- self_link="self_link_value",
- display_name="Network Interface Group 1",
- region=purefusion.RegionRef(
- id="539",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- availability_zone=purefusion.AvailabilityZoneRef(
- id="540",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- group_type="eth",
- eth=purefusion.NetworkInterfaceGroupEth(
- prefix="10.21.200.0/24", gateway="10.21.200.1", vlan=None, mtu=1600
- ),
- )
- ],
-)
-RESP_SE = purefusion.StorageEndpointList(
- count=1,
- more_items_remaining=False,
- items=[
- purefusion.StorageEndpoint(
- id="541",
- name="se1",
- self_link="self_link_value",
- display_name="Storage Endpoint 1",
- region=purefusion.RegionRef(
- id="542",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- availability_zone=purefusion.AvailabilityZoneRef(
- id="543",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- endpoint_type="iscsi",
- iscsi=purefusion.StorageEndpointIscsi(
- discovery_interfaces=[
- purefusion.StorageEndpointIscsiDiscoveryInterface(
- address="10.21.200.5/24",
- gateway="10.21.200.0",
- mtu=2000,
- network_interface_groups=[
- purefusion.NetworkInterfaceGroupRef(
- id="544",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- ],
- ),
- purefusion.StorageEndpointIscsiDiscoveryInterface(
- address="10.21.200.6/24",
- gateway="10.21.200.0",
- mtu=2100,
- network_interface_groups=[],
- ),
- ]
- ),
- )
- ],
-)
-RESP_NI = purefusion.NetworkInterfaceList(
- count=1,
- more_items_remaining=False,
- items=[
- purefusion.NetworkInterface(
- id="545",
- name="ni1",
- self_link="self_link_value",
- display_name="Network Interface 1",
- region=purefusion.RegionRef(
- id="546",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- availability_zone=purefusion.AvailabilityZoneRef(
- id="547",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- array=purefusion.ArrayRef(
- id="548",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- interface_type="eth",
- eth=purefusion.NetworkInterfaceEth(
- address="10.21.200.6/24",
- gateway="10.21.200.0",
- mac_address="E3-18-55-D8-8C-F4",
- mtu=1233,
- vlan=2,
- ),
- services=["a", "b"],
- enabled=True,
- network_interface_group=purefusion.NetworkInterfaceGroupRef(
- id="906",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- max_speed=3224232,
- )
- ],
-)
-RESP_ARRAYS = purefusion.ArrayList(
- count=1,
- more_items_remaining=False,
- items=[
- purefusion.Array(
- id="549",
- name="array1",
- self_link="self_link_value",
- display_name="Array 1",
- apartment_id="234214351",
- hardware_type=purefusion.HardwareTypeRef(
- id="550",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- region=purefusion.RegionRef(
- id="551",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- availability_zone=purefusion.AvailabilityZoneRef(
- id="552",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- appliance_id="2734298849",
- host_name="super_host",
- maintenance_mode=False,
- unavailable_mode=False,
- )
- ],
-)
-RESP_AC = [
- purefusion.APIClient(
- id="553",
- name="client1",
- self_link="self_link_value",
- display_name="API Client 1",
- issuer="apikey:name:thisisnotreal",
- public_key="0123456789",
- last_key_update=1684421184201,
- last_used=1684421290201,
- creator_id="1234",
- ),
- purefusion.APIClient(
- id="554",
- name="client2",
- self_link="self_link_value",
- display_name="API Client 2",
- issuer="apikey:name:thisissuperreal",
- public_key="0987654321",
- last_key_update=1684421184201,
- last_used=1684421290201,
- creator_id="4321",
- ),
-]
-RESP_VS = purefusion.VolumeSnapshotList(
- count=1,
- more_items_remaining=False,
- items=[
- purefusion.VolumeSnapshot(
- id="555",
- name="vs1",
- self_link="self_link_value",
- display_name="Volume Snapshot 1",
- serial_number="235235235345",
- volume_serial_number="544236456346345",
- created_at=1684421184201,
- consistency_id="666666",
- destroyed=False,
- time_remaining=1684421290201,
- size=19264036,
- tenant=purefusion.TenantRef(
- id="556",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- tenant_space=purefusion.TenantSpaceRef(
- id="557",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- snapshot=purefusion.VolumeSnapshotRef(
- id="558",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- volume=purefusion.VolumeRef(
- id="559",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- protection_policy=purefusion.ProtectionPolicyRef(
- id="560",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- placement_group=purefusion.PlacementGroupRef(
- id="561",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- )
- ],
-)
-
-
-@patch.dict(os.environ, {"TZ": "UTC"})
-@patch.dict(os.environ, {"LC_TIME": "en_US.utf8"})
-@patch("fusion.DefaultApi")
-@patch("fusion.IdentityManagerApi")
-@patch("fusion.ProtectionPoliciesApi")
-@patch("fusion.HostAccessPoliciesApi")
-@patch("fusion.HardwareTypesApi")
-@patch("fusion.StorageServicesApi")
-@patch("fusion.TenantsApi")
-@patch("fusion.RegionsApi")
-@patch("fusion.RolesApi")
-@patch("fusion.StorageClassesApi")
-@patch("fusion.RoleAssignmentsApi")
-@patch("fusion.TenantSpacesApi")
-@patch("fusion.VolumesApi")
-@patch("fusion.VolumeSnapshotsApi")
-@patch("fusion.PlacementGroupsApi")
-@patch("fusion.SnapshotsApi")
-@patch("fusion.AvailabilityZonesApi")
-@patch("fusion.ArraysApi")
-@patch("fusion.NetworkInterfaceGroupsApi")
-@patch("fusion.StorageEndpointsApi")
-@patch("fusion.NetworkInterfacesApi")
-@pytest.mark.parametrize(
- # all single options + all subsets of two options
- "gather_subset",
- [
- *combinations(
- VALID_SUBSETS,
- 2,
- ),
- *[[option] for option in VALID_SUBSETS],
- ],
-)
-def test_info_gather_subset(
- # API mocks
- m_ni_api,
- m_se_api,
- m_nig_api,
- m_array_api,
- m_az_api,
- m_snapshot_api,
- m_pg_api,
- m_vs_api,
- m_volume_api,
- m_ts_api,
- m_ra_api,
- m_sc_api,
- m_role_api,
- m_region_api,
- m_tenant_api,
- m_ss_api,
- m_hw_api,
- m_hap_api,
- m_pp_api,
- m_im_api,
- m_default_api,
- # test parameters
- gather_subset,
-):
- """
- Test that fusion_info module accepts single 'gather_subset' options and all subsets of two 'gather_subset' options.
- """
- # NOTE: here we use the same MagicMock object for all APIs to make the test simpler, this has no harm to the logic of the test
- api_obj = MagicMock()
- api_obj.get_version = MagicMock(return_value=RESP_VERSION)
- api_obj.get_array_space = MagicMock(return_value=RESP_AS)
- api_obj.get_array_performance = MagicMock(return_value=RESP_AP)
- api_obj.list_users = MagicMock(return_value=RESP_LU)
- api_obj.list_protection_policies = MagicMock(return_value=RESP_PP)
- api_obj.list_host_access_policies = MagicMock(return_value=RESP_HAP)
- api_obj.list_hardware_types = MagicMock(return_value=RESP_HT)
- api_obj.list_storage_services = MagicMock(return_value=RESP_SS)
- api_obj.list_tenants = MagicMock(return_value=RESP_TENANTS)
- api_obj.list_regions = MagicMock(return_value=RESP_REGIONS)
- api_obj.list_roles = MagicMock(return_value=RESP_ROLES)
- api_obj.list_storage_classes = MagicMock(return_value=RESP_SC)
- api_obj.list_role_assignments = MagicMock(return_value=RESP_RA)
- api_obj.list_tenant_spaces = MagicMock(return_value=RESP_TS)
- api_obj.list_volumes = MagicMock(return_value=RESP_VOLUMES)
- api_obj.list_placement_groups = MagicMock(return_value=RESP_PG)
- api_obj.list_snapshots = MagicMock(return_value=RESP_SNAPSHOTS)
- api_obj.list_availability_zones = MagicMock(return_value=RESP_AZ)
- api_obj.list_network_interface_groups = MagicMock(return_value=RESP_NIG)
- api_obj.list_storage_endpoints = MagicMock(return_value=RESP_SE)
- api_obj.list_network_interfaces = MagicMock(return_value=RESP_NI)
- api_obj.list_arrays = MagicMock(return_value=RESP_ARRAYS)
- api_obj.list_api_clients = MagicMock(return_value=RESP_AC)
- api_obj.list_volume_snapshots = MagicMock(return_value=RESP_VS)
- m_ni_api.return_value = api_obj
- m_se_api.return_value = api_obj
- m_nig_api.return_value = api_obj
- m_array_api.return_value = api_obj
- m_az_api.return_value = api_obj
- m_snapshot_api.return_value = api_obj
- m_pg_api.return_value = api_obj
- m_vs_api.return_value = api_obj
- m_volume_api.return_value = api_obj
- m_ts_api.return_value = api_obj
- m_ra_api.return_value = api_obj
- m_sc_api.return_value = api_obj
- m_role_api.return_value = api_obj
- m_region_api.return_value = api_obj
- m_tenant_api.return_value = api_obj
- m_ss_api.return_value = api_obj
- m_hw_api.return_value = api_obj
- m_hap_api.return_value = api_obj
- m_pp_api.return_value = api_obj
- m_im_api.return_value = api_obj
- m_default_api.return_value = api_obj
-
- time.tzset()
-
- set_module_args(
- {
- "gather_subset": gather_subset,
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- }
- )
-
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_info.main()
-
- assert exc.value.changed is False
-
- expected_keys = {}
- for option in gather_subset:
- expected_keys = {*expected_keys, *EXPECTED_KEYS[option]}
-
- assert exc.value.fusion_info.keys() == expected_keys
-
- if "hardware_types" in gather_subset or "all" in gather_subset:
- api_obj.list_hardware_types.assert_called_with()
- assert "hardware_types" in exc.value.fusion_info
- assert exc.value.fusion_info["hardware_types"] == {
- hw_type.name: {
- "array_type": hw_type.array_type,
- "display_name": hw_type.display_name,
- "media_type": hw_type.media_type,
- }
- for hw_type in RESP_HT.items
- }
- elif "minimum" in gather_subset:
- api_obj.list_hardware_types.assert_called_with()
- assert "default" in exc.value.fusion_info
- assert "hardware_types" in exc.value.fusion_info["default"]
- assert exc.value.fusion_info["default"]["hardware_types"] == len(RESP_HT.items)
- else:
- api_obj.list_hardware_types.assert_not_called()
-
- if "users" in gather_subset or "all" in gather_subset:
- api_obj.list_users.assert_called_with()
- assert "users" in exc.value.fusion_info
- assert exc.value.fusion_info["users"] == {
- user.name: {
- "display_name": user.display_name,
- "email": user.email,
- "id": user.id,
- }
- for user in RESP_LU
- }
- elif "minimum" in gather_subset:
- api_obj.list_users.assert_called_with()
- assert "default" in exc.value.fusion_info
- assert "users" in exc.value.fusion_info["default"]
- assert exc.value.fusion_info["default"]["users"] == len(RESP_LU)
- else:
- api_obj.list_users.assert_not_called()
-
- if "availability_zones" in gather_subset or "all" in gather_subset:
- api_obj.list_regions.assert_called_with()
- api_obj.list_availability_zones.assert_has_calls(
- [call(region_name=region.name) for region in RESP_REGIONS.items],
- any_order=True,
- )
- assert "availability_zones" in exc.value.fusion_info
- assert exc.value.fusion_info["availability_zones"] == {
- zone.name: {
- "display_name": zone.display_name,
- "region": zone.region.name,
- }
- for zone in RESP_AZ.items
- }
- elif "minimum" in gather_subset:
- api_obj.list_regions.assert_called_with()
- api_obj.list_availability_zones.assert_has_calls(
- [call(region_name=region.name) for region in RESP_REGIONS.items],
- any_order=True,
- )
- assert "default" in exc.value.fusion_info
- assert "availability_zones" in exc.value.fusion_info["default"]
- assert exc.value.fusion_info["default"]["availability_zones"] == len(
- RESP_REGIONS.items
- ) * len(RESP_AZ.items)
-
- if "roles" in gather_subset or "all" in gather_subset:
- api_obj.list_roles.assert_called_with()
- api_obj.list_role_assignments.assert_has_calls(
- [call(role_name=role.name) for role in RESP_ROLES],
- any_order=True,
- )
- assert "roles" in exc.value.fusion_info
- assert "role_assignments" in exc.value.fusion_info
- assert exc.value.fusion_info["roles"] == {
- role.name: {
- "display_name": role.display_name,
- "scopes": role.assignable_scopes,
- }
- for role in RESP_ROLES
- }
- assert exc.value.fusion_info["role_assignments"] == {
- ra.name: {
- "display_name": ra.display_name,
- "role": ra.role.name,
- "scope": ra.scope.name,
- }
- for ra in RESP_RA
- }
- elif "minimum" in gather_subset:
- api_obj.list_roles.assert_called_with()
- api_obj.list_role_assignments.assert_has_calls(
- [call(role_name=role.name) for role in RESP_ROLES],
- any_order=True,
- )
- assert "default" in exc.value.fusion_info
- assert "roles" in exc.value.fusion_info["default"]
- assert "role_assignments" in exc.value.fusion_info["default"]
- assert exc.value.fusion_info["default"]["roles"] == len(RESP_ROLES)
- assert exc.value.fusion_info["default"]["role_assignments"] == len(
- RESP_ROLES
- ) * len(RESP_RA)
- else:
- api_obj.list_roles.assert_not_called()
- api_obj.list_role_assignments.assert_not_called()
-
- if "storage_services" in gather_subset or "all" in gather_subset:
- api_obj.list_storage_services.assert_called_with()
- assert "storage_services" in exc.value.fusion_info
- assert exc.value.fusion_info["storage_services"] == {
- service.name: {
- "display_name": service.display_name,
- "hardware_types": [hwtype.name for hwtype in service.hardware_types],
- }
- for service in RESP_SS.items
- }
- elif "minimum" in gather_subset:
- api_obj.list_storage_services.assert_called_with()
- assert "default" in exc.value.fusion_info
- assert "storage_services" in exc.value.fusion_info["default"]
- assert exc.value.fusion_info["default"]["storage_services"] == len(
- RESP_SS.items
- )
-
- if "volumes" in gather_subset or "all" in gather_subset:
- api_obj.list_tenants.assert_called_with()
- api_obj.list_tenant_spaces.assert_has_calls(
- [call(tenant_name=tenant.name) for tenant in RESP_TENANTS.items],
- any_order=True,
- )
- api_obj.list_volumes.assert_has_calls(
- [
- call(
- tenant_name=tenant.name,
- tenant_space_name=ts.name,
- )
- for ts in RESP_TS.items
- for tenant in RESP_TENANTS.items
- ],
- any_order=True,
- )
- assert "volumes" in exc.value.fusion_info
- assert exc.value.fusion_info["volumes"] == {
- tenant.name
- + "/"
- + tenant_space.name
- + "/"
- + volume.name: {
- "tenant": tenant.name,
- "tenant_space": tenant_space.name,
- "name": volume.name,
- "size": volume.size,
- "display_name": volume.display_name,
- "placement_group": volume.placement_group.name,
- "source_volume_snapshot": getattr(
- volume.source_volume_snapshot, "name", None
- ),
- "protection_policy": getattr(volume.protection_policy, "name", None),
- "storage_class": volume.storage_class.name,
- "serial_number": volume.serial_number,
- "target": {
- "iscsi": {
- "addresses": volume.target.iscsi.addresses,
- "iqn": volume.target.iscsi.iqn,
- },
- "nvme": {
- "addresses": None,
- "nqn": None,
- },
- "fc": {
- "addresses": None,
- "wwns": None,
- },
- },
- "array": volume.array.name,
- }
- for volume in RESP_VOLUMES.items
- for tenant_space in RESP_TS.items
- for tenant in RESP_TENANTS.items
- }
- elif "minimum" in gather_subset:
- api_obj.list_tenants.assert_called_with()
- api_obj.list_tenant_spaces.assert_has_calls(
- [call(tenant_name=tenant.name) for tenant in RESP_TENANTS.items],
- any_order=True,
- )
- api_obj.list_volumes.assert_has_calls(
- [
- call(
- tenant_name=tenant.name,
- tenant_space_name=ts.name,
- )
- for ts in RESP_TS.items
- for tenant in RESP_TENANTS.items
- ],
- any_order=True,
- )
- assert "default" in exc.value.fusion_info
- assert "volumes" in exc.value.fusion_info["default"]
- assert exc.value.fusion_info["default"]["volumes"] == len(
- RESP_TENANTS.items
- ) * len(RESP_TS.items) * len(RESP_VOLUMES.items)
- else:
- api_obj.list_volumes.assert_not_called()
-
- if "protection_policies" in gather_subset or "all" in gather_subset:
- api_obj.list_protection_policies.assert_called_with()
- assert "protection_policies" in exc.value.fusion_info
- assert exc.value.fusion_info["protection_policies"] == {
- policy.name: {
- "objectives": policy.objectives,
- }
- for policy in RESP_PP.items
- }
- elif "minimum" in gather_subset:
- api_obj.list_protection_policies.assert_called_with()
- assert "default" in exc.value.fusion_info
- assert "protection_policies" in exc.value.fusion_info["default"]
- assert exc.value.fusion_info["default"]["protection_policies"] == len(
- RESP_PP.items
- )
- else:
- api_obj.list_protection_policies.assert_not_called()
-
- if "storage_classes" in gather_subset or "all" in gather_subset:
- api_obj.list_storage_services.assert_called_with()
- api_obj.list_storage_classes.assert_has_calls(
- [call(storage_service_name=service.name) for service in RESP_SS.items],
- any_order=True,
- )
- assert "storage_classes" in exc.value.fusion_info
- assert exc.value.fusion_info["storage_classes"] == {
- s_class.name: {
- "bandwidth_limit": getattr(s_class, "bandwidth_limit", None),
- "iops_limit": getattr(s_class, "iops_limit", None),
- "size_limit": getattr(s_class, "size_limit", None),
- "display_name": s_class.display_name,
- "storage_service": service.name,
- }
- for s_class in RESP_SC.items
- for service in RESP_SS.items
- }
- elif "minimum" in gather_subset:
- api_obj.list_storage_services.assert_called_with()
- api_obj.list_storage_classes.assert_has_calls(
- [call(storage_service_name=service.name) for service in RESP_SS.items],
- any_order=True,
- )
- assert "default" in exc.value.fusion_info
- assert "storage_classes" in exc.value.fusion_info["default"]
- assert exc.value.fusion_info["default"]["storage_classes"] == len(
- RESP_SC.items
- ) * len(RESP_SS.items)
- else:
- api_obj.list_storage_classes.assert_not_called()
-
- if "network_interfaces" in gather_subset or "all" in gather_subset:
- api_obj.list_regions.assert_called_with()
- api_obj.list_availability_zones.assert_has_calls(
- [call(region_name=region.name) for region in RESP_REGIONS.items],
- any_order=True,
- )
- api_obj.list_arrays.assert_has_calls(
- [
- call(
- availability_zone_name=az.name,
- region_name=region.name,
- )
- for region in RESP_REGIONS.items
- for az in RESP_AZ.items
- ],
- any_order=True,
- )
- api_obj.list_network_interfaces.assert_has_calls(
- [
- call(
- array_name=array.name,
- availability_zone_name=az.name,
- region_name=region.name,
- )
- for region in RESP_REGIONS.items
- for az in RESP_AZ.items
- for array in RESP_ARRAYS.items
- ],
- any_order=True,
- )
- assert "network_interfaces" in exc.value.fusion_info
- assert exc.value.fusion_info["network_interfaces"] == {
- az.name
- + "/"
- + array.name: {
- nic.name: {
- "enabled": nic.enabled,
- "display_name": nic.display_name,
- "interface_type": nic.interface_type,
- "services": nic.services,
- "max_speed": nic.max_speed,
- "vlan": nic.eth.vlan,
- "address": nic.eth.address,
- "mac_address": nic.eth.mac_address,
- "gateway": nic.eth.gateway,
- "mtu": nic.eth.mtu,
- "network_interface_group": nic.network_interface_group.name,
- "availability_zone": nic.availability_zone.name,
- }
- for nic in RESP_NI.items
- }
- for region in RESP_REGIONS.items
- for az in RESP_AZ.items
- for array in RESP_ARRAYS.items
- }
- elif "minimum" in gather_subset:
- api_obj.list_regions.assert_called_with()
- api_obj.list_availability_zones.assert_has_calls(
- [call(region_name=region.name) for region in RESP_REGIONS.items],
- any_order=True,
- )
- api_obj.list_arrays.assert_has_calls(
- [
- call(
- availability_zone_name=az.name,
- region_name=region.name,
- )
- for region in RESP_REGIONS.items
- for az in RESP_AZ.items
- ],
- any_order=True,
- )
- api_obj.list_network_interfaces.assert_has_calls(
- [
- call(
- array_name=array.name,
- availability_zone_name=az.name,
- region_name=region.name,
- )
- for region in RESP_REGIONS.items
- for az in RESP_AZ.items
- for array in RESP_ARRAYS.items
- ],
- any_order=True,
- )
- assert "default" in exc.value.fusion_info
- assert "network_interfaces" in exc.value.fusion_info["default"]
- assert exc.value.fusion_info["default"]["network_interfaces"] == len(
- RESP_REGIONS.items
- ) * len(RESP_AZ.items) * len(RESP_ARRAYS.items) * len(RESP_NI.items)
- else:
- api_obj.list_network_interfaces.assert_not_called()
-
- if "host_access_policies" in gather_subset or "all" in gather_subset:
- api_obj.list_host_access_policies.assert_called_with()
- assert "host_access_policies" in exc.value.fusion_info
- assert exc.value.fusion_info["host_access_policies"] == {
- host.name: {
- "personality": host.personality,
- "display_name": host.display_name,
- "iqn": host.iqn,
- }
- for host in RESP_HAP.items
- }
- elif "minimum" in gather_subset:
- api_obj.list_host_access_policies.assert_called_with()
- assert "default" in exc.value.fusion_info
- assert "host_access_policies" in exc.value.fusion_info["default"]
- assert exc.value.fusion_info["default"]["host_access_policies"] == len(
- RESP_HAP.items
- )
- else:
- api_obj.list_host_access_policies.assert_not_called()
-
- if "arrays" in gather_subset or "all" in gather_subset:
- api_obj.list_regions.assert_called_with()
- api_obj.list_availability_zones.assert_has_calls(
- [call(region_name=region.name) for region in RESP_REGIONS.items],
- any_order=True,
- )
- api_obj.list_arrays.assert_has_calls(
- [
- call(
- availability_zone_name=az.name,
- region_name=region.name,
- )
- for region in RESP_REGIONS.items
- for az in RESP_AZ.items
- ],
- any_order=True,
- )
- api_obj.get_array_space.assert_has_calls(
- [
- call(
- array_name=array.name,
- availability_zone_name=az.name,
- region_name=region.name,
- )
- for region in RESP_REGIONS.items
- for az in RESP_AZ.items
- for array in RESP_ARRAYS.items
- ],
- any_order=True,
- )
- api_obj.get_array_performance.assert_has_calls(
- [
- call(
- array_name=array.name,
- availability_zone_name=az.name,
- region_name=region.name,
- )
- for region in RESP_REGIONS.items
- for az in RESP_AZ.items
- for array in RESP_ARRAYS.items
- ],
- any_order=True,
- )
- assert "arrays" in exc.value.fusion_info
- assert exc.value.fusion_info["arrays"] == {
- array.name: {
- "region": region.name,
- "availability_zone": az.name,
- "host_name": array.host_name,
- "maintenance_mode": array.maintenance_mode,
- "unavailable_mode": array.unavailable_mode,
- "display_name": array.display_name,
- "hardware_type": array.hardware_type.name,
- "appliance_id": array.appliance_id,
- "apartment_id": getattr(array, "apartment_id", None),
- "space": {
- "total_physical_space": RESP_AS.total_physical_space,
- },
- "performance": {
- "read_bandwidth": RESP_AP.read_bandwidth,
- "read_latency_us": RESP_AP.read_latency_us,
- "reads_per_sec": RESP_AP.reads_per_sec,
- "write_bandwidth": RESP_AP.write_bandwidth,
- "write_latency_us": RESP_AP.write_latency_us,
- "writes_per_sec": RESP_AP.writes_per_sec,
- },
- }
- for region in RESP_REGIONS.items
- for az in RESP_AZ.items
- for array in RESP_ARRAYS.items
- }
- elif "minimum" in gather_subset:
- api_obj.list_regions.assert_called_with()
- api_obj.list_availability_zones.assert_has_calls(
- [call(region_name=region.name) for region in RESP_REGIONS.items],
- any_order=True,
- )
- api_obj.list_arrays.assert_has_calls(
- [
- call(
- availability_zone_name=az.name,
- region_name=region.name,
- )
- for region in RESP_REGIONS.items
- for az in RESP_AZ.items
- ],
- any_order=True,
- )
- api_obj.get_array_space.assert_not_called()
- api_obj.get_array_performance.assert_not_called()
- assert "default" in exc.value.fusion_info
- assert "arrays" in exc.value.fusion_info["default"]
- assert exc.value.fusion_info["default"]["arrays"] == len(
- RESP_REGIONS.items
- ) * len(RESP_AZ.items) * len(RESP_ARRAYS.items)
- else:
- api_obj.get_array_space.assert_not_called()
- api_obj.get_array_performance.assert_not_called()
-
- if "tenants" in gather_subset or "all" in gather_subset:
- api_obj.list_tenants.assert_called_with()
- assert "tenants" in exc.value.fusion_info
- assert exc.value.fusion_info["tenants"] == {
- tenant.name: {
- "display_name": tenant.display_name,
- }
- for tenant in RESP_TENANTS.items
- }
- elif "minimum" in gather_subset:
- api_obj.list_tenants.assert_called_with()
- assert "default" in exc.value.fusion_info
- assert "tenants" in exc.value.fusion_info["default"]
- assert exc.value.fusion_info["default"]["tenants"] == len(RESP_TENANTS.items)
-
- if "tenant_spaces" in gather_subset or "all" in gather_subset:
- api_obj.list_tenants.assert_called_with()
- api_obj.list_tenant_spaces.assert_has_calls(
- [call(tenant_name=tenant.name) for tenant in RESP_TENANTS.items],
- any_order=True,
- )
- assert "tenant_spaces" in exc.value.fusion_info
- assert exc.value.fusion_info["tenant_spaces"] == {
- tenant.name
- + "/"
- + ts.name: {
- "tenant": tenant.name,
- "display_name": ts.display_name,
- }
- for tenant in RESP_TENANTS.items
- for ts in RESP_TS.items
- }
- elif "minimum" in gather_subset:
- api_obj.list_tenants.assert_called_with()
- api_obj.list_tenant_spaces.assert_has_calls(
- [call(tenant_name=tenant.name) for tenant in RESP_TENANTS.items],
- any_order=True,
- )
- assert "default" in exc.value.fusion_info
- assert "tenant_spaces" in exc.value.fusion_info["default"]
- assert exc.value.fusion_info["default"]["tenant_spaces"] == len(
- RESP_TENANTS.items
- ) * len(RESP_TS.items)
-
- if "storage_endpoints" in gather_subset or "all" in gather_subset:
- api_obj.list_regions.assert_called_with()
- api_obj.list_availability_zones.assert_has_calls(
- [call(region_name=region.name) for region in RESP_REGIONS.items],
- any_order=True,
- )
- api_obj.list_storage_endpoints.assert_has_calls(
- [
- call(
- availability_zone_name=az.name,
- region_name=region.name,
- )
- for region in RESP_REGIONS.items
- for az in RESP_AZ.items
- ],
- any_order=True,
- )
- assert "storage_endpoints" in exc.value.fusion_info
- assert exc.value.fusion_info["storage_endpoints"] == {
- region.name
- + "/"
- + az.name
- + "/"
- + endpoint.name: {
- "display_name": endpoint.display_name,
- "endpoint_type": endpoint.endpoint_type,
- "iscsi_interfaces": [
- {
- "address": iface.address,
- "gateway": iface.gateway,
- "mtu": iface.mtu,
- "network_interface_groups": [
- nig.name for nig in iface.network_interface_groups
- ],
- }
- for iface in endpoint.iscsi.discovery_interfaces
- ],
- }
- for region in RESP_REGIONS.items
- for az in RESP_AZ.items
- for endpoint in RESP_SE.items
- }
- elif "minimum" in gather_subset:
- api_obj.list_regions.assert_called_with()
- api_obj.list_availability_zones.assert_has_calls(
- [call(region_name=region.name) for region in RESP_REGIONS.items],
- any_order=True,
- )
- api_obj.list_storage_endpoints.assert_has_calls(
- [
- call(
- availability_zone_name=az.name,
- region_name=region.name,
- )
- for region in RESP_REGIONS.items
- for az in RESP_AZ.items
- ],
- any_order=True,
- )
- assert "default" in exc.value.fusion_info
- assert "storage_endpoints" in exc.value.fusion_info["default"]
- assert exc.value.fusion_info["default"]["storage_endpoints"] == len(
- RESP_REGIONS.items
- ) * len(RESP_AZ.items) * len(RESP_SE.items)
- else:
- api_obj.list_storage_endpoints.assert_not_called()
-
- if "api_clients" in gather_subset or "all" in gather_subset:
- api_obj.list_api_clients.assert_called_with()
- assert "api_clients" in exc.value.fusion_info
- assert exc.value.fusion_info["api_clients"] == {
- client.name: {
- "display_name": client.display_name,
- "issuer": client.issuer,
- "public_key": client.public_key,
- "creator_id": client.creator_id,
- "last_key_update": "Thu, 18 May 2023 14:46:24 UTC",
- "last_used": "Thu, 18 May 2023 14:48:10 UTC",
- }
- for client in RESP_AC
- }
- elif "minimum" in gather_subset:
- # api_clients is not in default dict
- api_obj.list_api_clients.assert_not_called()
- assert "default" in exc.value.fusion_info
- assert "api_clients" not in exc.value.fusion_info["default"]
- else:
- api_obj.list_api_clients.assert_not_called()
-
- if "snapshots" in gather_subset or "all" in gather_subset:
- api_obj.list_tenants.assert_called_with()
- api_obj.list_tenant_spaces.assert_has_calls(
- [call(tenant_name=tenant.name) for tenant in RESP_TENANTS.items],
- any_order=True,
- )
- api_obj.list_snapshots.assert_has_calls(
- [
- call(
- tenant_name=tenant.name,
- tenant_space_name=ts.name,
- )
- for ts in RESP_TS.items
- for tenant in RESP_TENANTS.items
- ],
- any_order=True,
- )
- api_obj.list_volume_snapshots.assert_has_calls(
- [
- call(
- tenant_name=tenant.name,
- tenant_space_name=ts.name,
- snapshot_name=snap.name,
- )
- for snap in RESP_SNAPSHOTS.items
- for ts in RESP_TS.items
- for tenant in RESP_TENANTS.items
- ],
- any_order=True,
- )
- assert "snapshots" in exc.value.fusion_info
- assert "volume_snapshots" in exc.value.fusion_info
- assert exc.value.fusion_info["snapshots"] == {
- tenant.name
- + "/"
- + ts.name
- + "/"
- + snap.name: {
- "display_name": snap.display_name,
- "protection_policy": snap.protection_policy,
- "time_remaining": "0 hours, 0 mins, 23 secs",
- "volume_snapshots_link": snap.volume_snapshots_link,
- }
- for snap in RESP_SNAPSHOTS.items
- for ts in RESP_TS.items
- for tenant in RESP_TENANTS.items
- }
-
- assert exc.value.fusion_info["volume_snapshots"] == {
- tenant.name
- + "/"
- + ts.name
- + "/"
- + snap.name
- + "/"
- + vsnap.name: {
- "size": vsnap.size,
- "display_name": vsnap.display_name,
- "protection_policy": vsnap.protection_policy,
- "serial_number": vsnap.serial_number,
- "created_at": "Thu, 18 May 2023 14:46:24 UTC",
- "time_remaining": "14 hours, 48 mins, 10 secs",
- "placement_group": vsnap.placement_group.name,
- }
- for vsnap in RESP_VS.items
- for snap in RESP_SNAPSHOTS.items
- for ts in RESP_TS.items
- for tenant in RESP_TENANTS.items
- }
- elif "minimum" in gather_subset:
- api_obj.list_tenants.assert_called_with()
- api_obj.list_tenant_spaces.assert_has_calls(
- [call(tenant_name=tenant.name) for tenant in RESP_TENANTS.items],
- any_order=True,
- )
- api_obj.list_snapshots.assert_has_calls(
- [
- call(
- tenant_name=tenant.name,
- tenant_space_name=ts.name,
- )
- for ts in RESP_TS.items
- for tenant in RESP_TENANTS.items
- ],
- any_order=True,
- )
- api_obj.list_volume_snapshots.assert_not_called()
- assert "default" in exc.value.fusion_info
- assert "snapshots" in exc.value.fusion_info["default"]
- assert exc.value.fusion_info["default"]["snapshots"] == len(
- RESP_TENANTS.items
- ) * len(RESP_TS.items) * len(RESP_SNAPSHOTS.items)
- else:
- api_obj.list_snapshots.assert_not_called()
- api_obj.list_volume_snapshots.assert_not_called()
-
- if "network_interface_groups" in gather_subset or "all" in gather_subset:
- api_obj.list_regions.assert_called_with()
- api_obj.list_availability_zones.assert_has_calls(
- [call(region_name=region.name) for region in RESP_REGIONS.items],
- any_order=True,
- )
- api_obj.list_network_interface_groups.assert_has_calls(
- [
- call(
- availability_zone_name=az.name,
- region_name=region.name,
- )
- for region in RESP_REGIONS.items
- for az in RESP_AZ.items
- ],
- any_order=True,
- )
- assert "network_interface_groups" in exc.value.fusion_info
- assert exc.value.fusion_info["network_interface_groups"] == {
- region.name
- + "/"
- + az.name
- + "/"
- + nig.name: {
- "display_name": nig.display_name,
- "gateway": nig.eth.gateway,
- "prefix": nig.eth.prefix,
- "mtu": nig.eth.mtu,
- }
- for nig in RESP_NIG.items
- for region in RESP_REGIONS.items
- for az in RESP_AZ.items
- }
- elif "minimum" in gather_subset:
- api_obj.list_regions.assert_called_with()
- api_obj.list_availability_zones.assert_has_calls(
- [call(region_name=region.name) for region in RESP_REGIONS.items],
- any_order=True,
- )
- api_obj.list_network_interface_groups.assert_has_calls(
- [
- call(
- availability_zone_name=az.name,
- region_name=region.name,
- )
- for region in RESP_REGIONS.items
- for az in RESP_AZ.items
- ],
- any_order=True,
- )
- assert "default" in exc.value.fusion_info
- assert "network_interface_groups" in exc.value.fusion_info["default"]
- assert exc.value.fusion_info["default"]["network_interface_groups"] == len(
- RESP_NIG.items
- ) * len(RESP_REGIONS.items) * len(RESP_AZ.items)
- else:
- api_obj.list_network_interface_groups.assert_not_called()
-
- if "placement_groups" in gather_subset or "all" in gather_subset:
- api_obj.list_tenants.assert_called_with()
- api_obj.list_tenant_spaces.assert_has_calls(
- [call(tenant_name=tenant.name) for tenant in RESP_TENANTS.items],
- any_order=True,
- )
- api_obj.list_volumes.list_placement_groups(
- [
- call(
- tenant_name=tenant.name,
- tenant_space_name=ts.name,
- )
- for ts in RESP_TS.items
- for tenant in RESP_TENANTS.items
- ],
- any_order=True,
- )
- assert "placement_groups" in exc.value.fusion_info
- assert exc.value.fusion_info["placement_groups"] == {
- tenant.name
- + "/"
- + ts.name
- + "/"
- + group.name: {
- "tenant": group.tenant.name,
- "display_name": group.display_name,
- "placement_engine": group.placement_engine,
- "tenant_space": group.tenant_space.name,
- "az": group.availability_zone.name,
- "array": getattr(group.array, "name", None),
- }
- for group in RESP_PG.items
- for ts in RESP_TS.items
- for tenant in RESP_TENANTS.items
- }
- elif "minimum" in gather_subset:
- api_obj.list_tenants.assert_called_with()
- api_obj.list_tenant_spaces.assert_has_calls(
- [call(tenant_name=tenant.name) for tenant in RESP_TENANTS.items],
- any_order=True,
- )
- api_obj.list_volumes.list_placement_groups(
- [
- call(
- tenant_name=tenant.name,
- tenant_space_name=ts.name,
- )
- for ts in RESP_TS.items
- for tenant in RESP_TENANTS.items
- ],
- any_order=True,
- )
- assert "default" in exc.value.fusion_info
- assert "placement_groups" in exc.value.fusion_info["default"]
- assert exc.value.fusion_info["default"]["placement_groups"] == len(
- RESP_PG.items
- ) * len(RESP_TENANTS.items) * len(RESP_TS.items)
- else:
- api_obj.list_placement_groups.assert_not_called()
-
- if "regions" in gather_subset or "all" in gather_subset:
- api_obj.list_regions.assert_called_with()
- assert "regions" in exc.value.fusion_info
- assert exc.value.fusion_info["regions"] == {
- region.name: {
- "display_name": region.display_name,
- }
- for region in RESP_REGIONS.items
- }
- elif "minimum" in gather_subset:
- api_obj.list_regions.assert_called_with()
- assert "default" in exc.value.fusion_info
- assert "regions" in exc.value.fusion_info["default"]
- assert exc.value.fusion_info["default"]["regions"] == len(RESP_REGIONS.items)
-
-
-@patch("fusion.DefaultApi")
-@patch("fusion.IdentityManagerApi")
-@patch("fusion.ProtectionPoliciesApi")
-@patch("fusion.HostAccessPoliciesApi")
-@patch("fusion.HardwareTypesApi")
-@patch("fusion.StorageServicesApi")
-@patch("fusion.TenantsApi")
-@patch("fusion.RegionsApi")
-@patch("fusion.RolesApi")
-@patch("fusion.StorageClassesApi")
-@patch("fusion.RoleAssignmentsApi")
-@patch("fusion.TenantSpacesApi")
-@patch("fusion.VolumesApi")
-@patch("fusion.VolumeSnapshotsApi")
-@patch("fusion.PlacementGroupsApi")
-@patch("fusion.SnapshotsApi")
-@patch("fusion.AvailabilityZonesApi")
-@patch("fusion.ArraysApi")
-@patch("fusion.NetworkInterfaceGroupsApi")
-@patch("fusion.StorageEndpointsApi")
-@patch("fusion.NetworkInterfacesApi")
-@pytest.mark.parametrize("subset", VALID_SUBSETS)
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- (ApiExceptionsMockGenerator.create_permission_denied(), AnsibleExitJson),
- ],
-)
-def test_info_exception(
- # API mocks
- m_ni_api,
- m_se_api,
- m_nig_api,
- m_array_api,
- m_az_api,
- m_snapshot_api,
- m_pg_api,
- m_vs_api,
- m_volume_api,
- m_ts_api,
- m_ra_api,
- m_sc_api,
- m_role_api,
- m_region_api,
- m_tenant_api,
- m_ss_api,
- m_hw_api,
- m_hap_api,
- m_pp_api,
- m_im_api,
- m_default_api,
- # test parameter
- subset,
- # exceptions
- exec_original,
- exec_catch,
-):
- """
- Test that fusion_info propagates exceptions correctly.
- """
- # NOTE: here we use the same MagicMock object for all APIs to make the test simpler, this has no harm to the logic of the test
- api_obj = MagicMock()
- api_obj.get_version = MagicMock(
- return_value=RESP_VERSION, side_effect=exec_original
- )
- api_obj.get_array_space = MagicMock(return_value=RESP_AS, side_effect=exec_original)
- api_obj.get_array_performance = MagicMock(
- return_value=RESP_AP, side_effect=exec_original
- )
- api_obj.list_users = MagicMock(return_value=RESP_LU, side_effect=exec_original)
- api_obj.list_protection_policies = MagicMock(
- return_value=RESP_PP, side_effect=exec_original
- )
- api_obj.list_host_access_policies = MagicMock(
- return_value=RESP_HAP, side_effect=exec_original
- )
- api_obj.list_hardware_types = MagicMock(
- return_value=RESP_HT, side_effect=exec_original
- )
- api_obj.list_storage_services = MagicMock(
- return_value=RESP_SS, side_effect=exec_original
- )
- api_obj.list_tenants = MagicMock(
- return_value=RESP_TENANTS, side_effect=exec_original
- )
- api_obj.list_regions = MagicMock(
- return_value=RESP_REGIONS, side_effect=exec_original
- )
- api_obj.list_roles = MagicMock(return_value=RESP_ROLES, side_effect=exec_original)
- api_obj.list_storage_classes = MagicMock(
- return_value=RESP_SC, side_effect=exec_original
- )
- api_obj.list_role_assignments = MagicMock(
- return_value=RESP_RA, side_effect=exec_original
- )
- api_obj.list_tenant_spaces = MagicMock(
- return_value=RESP_TS, side_effect=exec_original
- )
- api_obj.list_volumes = MagicMock(
- return_value=RESP_VOLUMES, side_effect=exec_original
- )
- api_obj.list_placement_groups = MagicMock(
- return_value=RESP_PG, side_effect=exec_original
- )
- api_obj.list_snapshots = MagicMock(
- return_value=RESP_SNAPSHOTS, side_effect=exec_original
- )
- api_obj.list_availability_zones = MagicMock(
- return_value=RESP_AZ, side_effect=exec_original
- )
- api_obj.list_network_interface_groups = MagicMock(
- return_value=RESP_NIG, side_effect=exec_original
- )
- api_obj.list_storage_endpoints = MagicMock(
- return_value=RESP_SE, side_effect=exec_original
- )
- api_obj.list_network_interfaces = MagicMock(
- return_value=RESP_NI, side_effect=exec_original
- )
- api_obj.list_arrays = MagicMock(return_value=RESP_ARRAYS, side_effect=exec_original)
- api_obj.list_api_clients = MagicMock(
- return_value=RESP_AC, side_effect=exec_original
- )
- api_obj.list_volume_snapshots = MagicMock(
- return_value=RESP_VS, side_effect=exec_original
- )
- m_ni_api.return_value = api_obj
- m_se_api.return_value = api_obj
- m_nig_api.return_value = api_obj
- m_array_api.return_value = api_obj
- m_az_api.return_value = api_obj
- m_snapshot_api.return_value = api_obj
- m_pg_api.return_value = api_obj
- m_vs_api.return_value = api_obj
- m_volume_api.return_value = api_obj
- m_ts_api.return_value = api_obj
- m_ra_api.return_value = api_obj
- m_sc_api.return_value = api_obj
- m_role_api.return_value = api_obj
- m_region_api.return_value = api_obj
- m_tenant_api.return_value = api_obj
- m_ss_api.return_value = api_obj
- m_hw_api.return_value = api_obj
- m_hap_api.return_value = api_obj
- m_pp_api.return_value = api_obj
- m_im_api.return_value = api_obj
- m_default_api.return_value = api_obj
-
- set_module_args(
- {
- "gather_subset": [subset],
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- }
- )
-
- with pytest.raises(exec_catch) as exc:
- fusion_info.main()
-
- # in case of permission denied error, check correct output
- if exec_catch == AnsibleExitJson:
- assert exc.value.changed is False
-
- expected_keys = EXPECTED_KEYS[subset]
- assert exc.value.fusion_info.keys() == expected_keys
- for key in expected_keys:
- if key == "default":
- for k in exc.value.fusion_info[key]:
- assert exc.value.fusion_info[key][k] is None
- else:
- assert exc.value.fusion_info[key] is None
-
-
-@patch("fusion.StorageServicesApi")
-def test_info_hidden_fields_storage_services(m_ss_api):
- set_module_args(
- {
- "gather_subset": ["storage_services"],
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- }
- )
-
- response = purefusion.StorageServiceList(
- count=1,
- more_items_remaining=False,
- items=[
- purefusion.StorageService(
- id="503",
- name="ss2",
- self_link="self_link_value",
- display_name="Storage Service 3",
- hardware_types=None, # can be None if not enough permissions
- ),
- ],
- )
-
- api_obj = MagicMock()
- api_obj.list_storage_services = MagicMock(return_value=response)
- m_ss_api.return_value = api_obj
-
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_info.main()
-
- expected = {
- "storage_services": {
- service.name: {
- "display_name": service.display_name,
- "hardware_types": None,
- }
- for service in response.items
- },
- }
- assert exc.value.fusion_info == expected
-
-
-@patch("fusion.RegionsApi")
-@patch("fusion.AvailabilityZonesApi")
-@patch("fusion.StorageEndpointsApi")
-def test_info_hidden_fields_storage_endpoints(m_ss_api, m_az_api, m_region_api):
- set_module_args(
- {
- "gather_subset": ["storage_endpoints"],
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- }
- )
-
- response = purefusion.StorageEndpointList(
- count=1,
- more_items_remaining=False,
- items=[
- purefusion.StorageEndpoint(
- id="541",
- name="se1",
- self_link="self_link_value",
- display_name="Storage Endpoint 1",
- region=purefusion.RegionRef(
- id="542",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- availability_zone=purefusion.AvailabilityZoneRef(
- id="543",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- endpoint_type="iscsi",
- iscsi=purefusion.StorageEndpointIscsi(
- discovery_interfaces=[
- purefusion.StorageEndpointIscsiDiscoveryInterface(
- address="10.21.200.5/24",
- gateway="10.21.200.0",
- mtu=2000,
- network_interface_groups=None,
- ),
- ]
- ),
- )
- ],
- )
-
- api_obj = MagicMock()
- api_obj.list_regions = MagicMock(return_value=RESP_REGIONS)
- api_obj.list_availability_zones = MagicMock(return_value=RESP_AZ)
- api_obj.list_storage_endpoints = MagicMock(return_value=response)
- m_ss_api.return_value = api_obj
- m_az_api.return_value = api_obj
- m_region_api.return_value = api_obj
-
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_info.main()
-
- expected = {
- "storage_endpoints": {
- region.name
- + "/"
- + az.name
- + "/"
- + endpoint.name: {
- "display_name": endpoint.display_name,
- "endpoint_type": endpoint.endpoint_type,
- "iscsi_interfaces": [
- {
- "address": iface.address,
- "gateway": iface.gateway,
- "mtu": iface.mtu,
- "network_interface_groups": None,
- }
- for iface in endpoint.iscsi.discovery_interfaces
- ],
- }
- for region in RESP_REGIONS.items
- for az in RESP_AZ.items
- for endpoint in response.items
- },
- }
- assert exc.value.fusion_info == expected
-
-
-@patch("fusion.TenantsApi")
-@patch("fusion.TenantSpacesApi")
-@patch("fusion.VolumesApi")
-def test_info_hidden_fields_volumes(m_ss_api, m_az_api, m_region_api):
- set_module_args(
- {
- "gather_subset": ["volumes"],
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- }
- )
-
- response = purefusion.VolumeList(
- count=1,
- more_items_remaining=False,
- items=[
- purefusion.Volume(
- id="517",
- name="volume1",
- self_link="self_link_value",
- display_name="Volume 1",
- size=4000000,
- tenant=purefusion.TenantRef(
- id="518",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- tenant_space=purefusion.TenantSpaceRef(
- id="519",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- storage_class=purefusion.StorageClassRef(
- id="520",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- protection_policy=purefusion.ProtectionPolicyRef(
- id="521",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- placement_group=purefusion.PlacementGroupRef(
- id="522",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- array=None,
- created_at=485743825,
- source_volume_snapshot=purefusion.VolumeSnapshotRef(
- id="523",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- ),
- host_access_policies=[
- purefusion.HostAccessPolicyRef(
- id="524",
- name="res_ref_name",
- kind="kind_value",
- self_link="self_link_value",
- )
- ],
- serial_number="123923482034",
- target=purefusion.Target(
- iscsi=purefusion.Iscsi(
- iqn="iqn.2023-05.com.purestorage:420qp2c0222",
- addresses=["125.1.2.4"],
- )
- ),
- time_remaining=1000000,
- destroyed=False,
- )
- ],
- )
-
- api_obj = MagicMock()
- api_obj.list_tenants = MagicMock(return_value=RESP_TENANTS)
- api_obj.list_tenant_spaces = MagicMock(return_value=RESP_TS)
- api_obj.list_volumes = MagicMock(return_value=response)
- m_ss_api.return_value = api_obj
- m_az_api.return_value = api_obj
- m_region_api.return_value = api_obj
-
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_info.main()
-
- expected = {
- "volumes": {
- tenant.name
- + "/"
- + tenant_space.name
- + "/"
- + volume.name: {
- "tenant": tenant.name,
- "tenant_space": tenant_space.name,
- "name": volume.name,
- "size": volume.size,
- "display_name": volume.display_name,
- "placement_group": volume.placement_group.name,
- "source_volume_snapshot": getattr(
- volume.source_volume_snapshot, "name", None
- ),
- "protection_policy": getattr(volume.protection_policy, "name", None),
- "storage_class": volume.storage_class.name,
- "serial_number": volume.serial_number,
- "target": {
- "iscsi": {
- "addresses": volume.target.iscsi.addresses,
- "iqn": volume.target.iscsi.iqn,
- },
- "nvme": {
- "addresses": None,
- "nqn": None,
- },
- "fc": {
- "addresses": None,
- "wwns": None,
- },
- },
- "array": None,
- }
- for volume in response.items
- for tenant_space in RESP_TS.items
- for tenant in RESP_TENANTS.items
- }
- }
- assert exc.value.fusion_info == expected
-
-
-@patch("fusion.DefaultApi")
-@patch("fusion.IdentityManagerApi")
-@patch("fusion.ProtectionPoliciesApi")
-@patch("fusion.HostAccessPoliciesApi")
-@patch("fusion.HardwareTypesApi")
-@patch("fusion.StorageServicesApi")
-@patch("fusion.TenantsApi")
-@patch("fusion.RegionsApi")
-@patch("fusion.RolesApi")
-@patch("fusion.StorageClassesApi")
-@patch("fusion.RoleAssignmentsApi")
-@patch("fusion.TenantSpacesApi")
-@patch("fusion.VolumesApi")
-@patch("fusion.VolumeSnapshotsApi")
-@patch("fusion.PlacementGroupsApi")
-@patch("fusion.SnapshotsApi")
-@patch("fusion.AvailabilityZonesApi")
-@patch("fusion.ArraysApi")
-@patch("fusion.NetworkInterfaceGroupsApi")
-@patch("fusion.StorageEndpointsApi")
-@patch("fusion.NetworkInterfacesApi")
-def test_info_permission_denied_minimum(
- m_ni_api,
- m_se_api,
- m_nig_api,
- m_array_api,
- m_az_api,
- m_snapshot_api,
- m_pg_api,
- m_vs_api,
- m_volume_api,
- m_ts_api,
- m_ra_api,
- m_sc_api,
- m_role_api,
- m_region_api,
- m_tenant_api,
- m_ss_api,
- m_hw_api,
- m_hap_api,
- m_pp_api,
- m_im_api,
- m_default_api,
-):
- """
- Test that default dict works correctly with permission denied errors.
- """
- exec = ApiExceptionsMockGenerator.create_permission_denied()
-
- api_obj = MagicMock()
- api_obj.get_version = MagicMock(return_value=RESP_VERSION, side_effect=exec)
- api_obj.get_array_space = MagicMock(return_value=RESP_AS, side_effect=exec)
- api_obj.get_array_performance = MagicMock(return_value=RESP_AP, side_effect=exec)
- api_obj.list_users = MagicMock(return_value=RESP_LU, side_effect=exec)
- api_obj.list_protection_policies = MagicMock(return_value=RESP_PP, side_effect=exec)
- api_obj.list_host_access_policies = MagicMock(
- return_value=RESP_HAP, side_effect=exec
- )
- api_obj.list_hardware_types = MagicMock(return_value=RESP_HT, side_effect=exec)
- api_obj.list_storage_services = MagicMock(return_value=RESP_SS, side_effect=exec)
- api_obj.list_tenants = MagicMock(return_value=RESP_TENANTS, side_effect=exec)
- api_obj.list_regions = MagicMock(return_value=RESP_REGIONS, side_effect=exec)
- api_obj.list_roles = MagicMock(return_value=RESP_ROLES, side_effect=exec)
- api_obj.list_storage_classes = MagicMock(return_value=RESP_SC, side_effect=exec)
- api_obj.list_role_assignments = MagicMock(return_value=RESP_RA, side_effect=exec)
- api_obj.list_tenant_spaces = MagicMock(return_value=RESP_TS, side_effect=exec)
- api_obj.list_volumes = MagicMock(return_value=RESP_VOLUMES, side_effect=exec)
- api_obj.list_placement_groups = MagicMock(return_value=RESP_PG, side_effect=exec)
- api_obj.list_snapshots = MagicMock(return_value=RESP_SNAPSHOTS, side_effect=exec)
- api_obj.list_availability_zones = MagicMock(return_value=RESP_AZ, side_effect=exec)
- api_obj.list_network_interface_groups = MagicMock(
- return_value=RESP_NIG, side_effect=exec
- )
- api_obj.list_storage_endpoints = MagicMock(return_value=RESP_SE, side_effect=exec)
- api_obj.list_network_interfaces = MagicMock(return_value=RESP_NI, side_effect=exec)
- api_obj.list_arrays = MagicMock(return_value=RESP_ARRAYS, side_effect=exec)
- api_obj.list_api_clients = MagicMock(return_value=RESP_AC, side_effect=exec)
- api_obj.list_volume_snapshots = MagicMock(return_value=RESP_VS, side_effect=exec)
- m_ni_api.return_value = api_obj
- m_se_api.return_value = api_obj
- m_nig_api.return_value = api_obj
- m_array_api.return_value = api_obj
- m_az_api.return_value = api_obj
- m_snapshot_api.return_value = api_obj
- m_pg_api.return_value = api_obj
- m_vs_api.return_value = api_obj
- m_volume_api.return_value = api_obj
- m_ts_api.return_value = api_obj
- m_ra_api.return_value = api_obj
- m_sc_api.return_value = api_obj
- m_role_api.return_value = api_obj
- m_region_api.return_value = api_obj
- m_tenant_api.return_value = api_obj
- m_ss_api.return_value = api_obj
- m_hw_api.return_value = api_obj
- m_hap_api.return_value = api_obj
- m_pp_api.return_value = api_obj
- m_im_api.return_value = api_obj
- m_default_api.return_value = api_obj
-
- set_module_args(
- {
- "gather_subset": ["minimum"],
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- }
- )
-
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_info.main()
-
- assert exc.value.changed is False
- assert "default" in exc.value.fusion_info
- assert {
- "version": None,
- "users": None,
- "protection_policies": None,
- "host_access_policies": None,
- "hardware_types": None,
- "storage_services": None,
- "tenants": None,
- "regions": None,
- "storage_classes": None,
- "roles": None,
- "role_assignments": None,
- "tenant_spaces": None,
- "volumes": None,
- "placement_groups": None,
- "snapshots": None,
- "availability_zones": None,
- "arrays": None,
- "network_interfaces": None,
- "network_interface_groups": None,
- "storage_endpoints": None,
- } == exc.value.fusion_info["default"]
diff --git a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_nig.py b/ansible_collections/purestorage/fusion/tests/functional/test_fusion_nig.py
deleted file mode 100644
index e8a2eb0ac..000000000
--- a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_nig.py
+++ /dev/null
@@ -1,1244 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# (c) 2023, Andrej Pajtas (apajtas@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-from unittest.mock import MagicMock, patch
-
-import fusion as purefusion
-import pytest
-from ansible.module_utils import basic
-from ansible_collections.purestorage.fusion.plugins.module_utils.errors import (
- OperationException,
-)
-from ansible_collections.purestorage.fusion.plugins.modules import fusion_nig
-from ansible_collections.purestorage.fusion.tests.functional.utils import (
- AnsibleExitJson,
- AnsibleFailJson,
- FailedOperationMock,
- OperationMock,
- SuccessfulOperationMock,
- FAKE_RESOURCE_ID,
- exit_json,
- fail_json,
- set_module_args,
-)
-from urllib3.exceptions import HTTPError
-
-# GLOBAL MOCKS
-fusion_nig.setup_fusion = MagicMock(return_value=purefusion.api_client.ApiClient())
-purefusion.api_client.ApiClient.call_api = MagicMock(
- side_effect=Exception("API call not mocked!")
-)
-basic.AnsibleModule.exit_json = exit_json
-basic.AnsibleModule.fail_json = fail_json
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.NetworkInterfaceGroupsApi")
-@pytest.mark.parametrize(
- "module_args",
- [
- # required parameter 'name` is missing
- {
- "state": "present",
- "display_name": "Network Interface Group 1",
- "availability_zone": "az1",
- "region": "region1",
- "prefix": "10.21.200.0/24",
- "gateway": "10.21.200.1",
- "mtu": 1300,
- "group_type": "eth",
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- },
- # required parameter 'availability_zone` is missing
- {
- "state": "present",
- "name": "nig1",
- "display_name": "Network Interface Group 1",
- "region": "region1",
- "prefix": "10.21.200.0/24",
- "gateway": "10.21.200.1",
- "mtu": 1300,
- "group_type": "eth",
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- },
- # required parameter 'region` is missing
- {
- "state": "present",
- "name": "nig1",
- "display_name": "Network Interface Group 1",
- "availability_zone": "az1",
- "prefix": "10.21.200.0/24",
- "gateway": "10.21.200.1",
- "mtu": 1300,
- "group_type": "eth",
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- },
- # unknown parameter 'extra' is provided
- {
- "state": "present",
- "name": "nig1",
- "display_name": "Network Interface Group 1",
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- "extra": "value",
- },
- # parameter 'state` has incorrect value
- {
- "state": "cool",
- "name": "nig1",
- "display_name": "Network Interface Group 1",
- "availability_zone": "az1",
- "region": "region1",
- "prefix": "10.21.200.0/24",
- "gateway": "10.21.200.1",
- "mtu": 1300,
- "group_type": "eth",
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- },
- # parameter 'group_type` has incorrect value
- {
- "state": "present",
- "name": "nig1",
- "display_name": "Network Interface Group 1",
- "availability_zone": "az1",
- "region": "region1",
- "prefix": "10.21.200.0/24",
- "gateway": "10.21.200.1",
- "mtu": 1300,
- "group_type": "supergroup",
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- },
- ],
-)
-def test_module_fails_on_wrong_parameters(m_nig_api, m_op_api, module_args):
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_network_interface_group = MagicMock(
- side_effect=purefusion.rest.ApiException
- )
- api_obj.create_network_interface_group = MagicMock(return_value=OperationMock(1))
- api_obj.update_network_interface_group = MagicMock(return_value=OperationMock(2))
- api_obj.delete_network_interface_group = MagicMock(return_value=OperationMock(3))
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
- m_nig_api.return_value = api_obj
-
- # run module
- with pytest.raises(AnsibleFailJson):
- fusion_nig.main()
-
- # check api was not called at all
- api_obj.get_network_interface_group.assert_not_called()
- api_obj.create_network_interface_group.assert_not_called()
- api_obj.update_network_interface_group.assert_not_called()
- api_obj.delete_network_interface_group.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.NetworkInterfaceGroupsApi")
-def test_nig_create_fails_on_missing_prefix(m_nig_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "nig1",
- "display_name": "Network Interface Group 1",
- "availability_zone": "az1",
- "region": "region1",
- "gateway": "10.21.200.1",
- "mtu": 1300,
- "group_type": "eth",
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_network_interface_group = MagicMock(
- side_effect=purefusion.rest.ApiException
- )
- api_obj.create_network_interface_group = MagicMock(return_value=OperationMock(1))
- api_obj.update_network_interface_group = MagicMock(return_value=OperationMock(2))
- api_obj.delete_network_interface_group = MagicMock(return_value=OperationMock(3))
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
- m_nig_api.return_value = api_obj
-
- # run module
- with pytest.raises(AnsibleFailJson):
- fusion_nig.main()
-
- # check api was not called at all
- api_obj.get_network_interface_group.assert_called_once_with(
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- network_interface_group_name=module_args["name"],
- )
- api_obj.create_network_interface_group.assert_not_called()
- api_obj.update_network_interface_group.assert_not_called()
- api_obj.delete_network_interface_group.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.NetworkInterfaceGroupsApi")
-def test_nig_create(m_nig_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "nig1",
- "display_name": "Network Interface Group 1",
- "availability_zone": "az1",
- "region": "region1",
- "prefix": "10.21.200.0/24",
- "gateway": "10.21.200.1",
- "mtu": 1300,
- "group_type": "eth",
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_network_interface_group = MagicMock(
- side_effect=purefusion.rest.ApiException
- )
- api_obj.create_network_interface_group = MagicMock(return_value=OperationMock(1))
- api_obj.update_network_interface_group = MagicMock(return_value=OperationMock(2))
- api_obj.delete_network_interface_group = MagicMock(return_value=OperationMock(3))
- m_nig_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_nig.main()
-
- assert exc.value.changed is True
- assert exc.value.id == FAKE_RESOURCE_ID
-
- # check api was called correctly
- api_obj.get_network_interface_group.assert_called_once_with(
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- network_interface_group_name=module_args["name"],
- )
- api_obj.create_network_interface_group.assert_called_once_with(
- purefusion.NetworkInterfaceGroupPost(
- group_type="eth",
- eth=purefusion.NetworkInterfaceGroupEthPost(
- prefix=module_args["prefix"],
- gateway=module_args["gateway"],
- mtu=module_args["mtu"],
- ),
- name=module_args["name"],
- display_name=module_args["display_name"],
- ),
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.update_network_interface_group.assert_not_called()
- api_obj.delete_network_interface_group.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.NetworkInterfaceGroupsApi")
-def test_nig_create_without_display_name(m_nig_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "nig1",
- "availability_zone": "az1",
- "region": "region1",
- "prefix": "10.21.200.0/24",
- "gateway": "10.21.200.1",
- "mtu": 1300,
- "group_type": "eth",
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_network_interface_group = MagicMock(
- side_effect=purefusion.rest.ApiException
- )
- api_obj.create_network_interface_group = MagicMock(return_value=OperationMock(1))
- api_obj.update_network_interface_group = MagicMock(return_value=OperationMock(2))
- api_obj.delete_network_interface_group = MagicMock(return_value=OperationMock(3))
- m_nig_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_nig.main()
-
- assert exc.value.changed is True
- assert exc.value.id == FAKE_RESOURCE_ID
-
- # check api was called correctly
- api_obj.get_network_interface_group.assert_called_once_with(
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- network_interface_group_name=module_args["name"],
- )
- api_obj.create_network_interface_group.assert_called_once_with(
- purefusion.NetworkInterfaceGroupPost(
- group_type="eth",
- eth=purefusion.NetworkInterfaceGroupEthPost(
- prefix=module_args["prefix"],
- gateway=module_args["gateway"],
- mtu=module_args["mtu"],
- ),
- name=module_args["name"],
- display_name=module_args["name"],
- ),
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.update_network_interface_group.assert_not_called()
- api_obj.delete_network_interface_group.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.NetworkInterfaceGroupsApi")
-def test_nig_create_without_gateway(m_nig_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "nig1",
- "display_name": "Network Interface Group 1",
- "availability_zone": "az1",
- "region": "region1",
- "prefix": "10.21.200.0/24",
- "mtu": 1300,
- "group_type": "eth",
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_network_interface_group = MagicMock(
- side_effect=purefusion.rest.ApiException
- )
- api_obj.create_network_interface_group = MagicMock(return_value=OperationMock(1))
- api_obj.update_network_interface_group = MagicMock(return_value=OperationMock(2))
- api_obj.delete_network_interface_group = MagicMock(return_value=OperationMock(3))
- m_nig_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_nig.main()
-
- assert exc.value.changed is True
- assert exc.value.id == FAKE_RESOURCE_ID
-
- # check api was called correctly
- api_obj.get_network_interface_group.assert_called_once_with(
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- network_interface_group_name=module_args["name"],
- )
- api_obj.create_network_interface_group.assert_called_once_with(
- purefusion.NetworkInterfaceGroupPost(
- group_type="eth",
- eth=purefusion.NetworkInterfaceGroupEthPost(
- prefix=module_args["prefix"],
- mtu=module_args["mtu"],
- ),
- name=module_args["name"],
- display_name=module_args["display_name"],
- ),
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.update_network_interface_group.assert_not_called()
- api_obj.delete_network_interface_group.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.NetworkInterfaceGroupsApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_nig_create_exception(m_nig_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "present",
- "name": "nig1",
- "display_name": "Network Interface Group 1",
- "availability_zone": "az1",
- "region": "region1",
- "prefix": "10.21.200.0/24",
- "mtu": 1300,
- "group_type": "eth",
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_network_interface_group = MagicMock(
- side_effect=purefusion.rest.ApiException
- )
- api_obj.create_network_interface_group = MagicMock(side_effect=exec_original)
- api_obj.update_network_interface_group = MagicMock(return_value=OperationMock(2))
- api_obj.delete_network_interface_group = MagicMock(return_value=OperationMock(3))
- m_nig_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_nig.main()
-
- # check api was called correctly
- api_obj.get_network_interface_group.assert_called_once_with(
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- network_interface_group_name=module_args["name"],
- )
- api_obj.create_network_interface_group.assert_called_once_with(
- purefusion.NetworkInterfaceGroupPost(
- group_type="eth",
- eth=purefusion.NetworkInterfaceGroupEthPost(
- prefix=module_args["prefix"],
- mtu=module_args["mtu"],
- ),
- name=module_args["name"],
- display_name=module_args["display_name"],
- ),
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.update_network_interface_group.assert_not_called()
- api_obj.delete_network_interface_group.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.NetworkInterfaceGroupsApi")
-def test_nig_create_op_fails(m_nig_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "nig1",
- "display_name": "Network Interface Group 1",
- "availability_zone": "az1",
- "region": "region1",
- "prefix": "10.21.200.0/24",
- "mtu": 1300,
- "group_type": "eth",
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_network_interface_group = MagicMock(
- side_effect=purefusion.rest.ApiException
- )
- api_obj.create_network_interface_group = MagicMock(return_value=OperationMock(1))
- api_obj.update_network_interface_group = MagicMock(return_value=OperationMock(2))
- api_obj.delete_network_interface_group = MagicMock(return_value=OperationMock(3))
- m_nig_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(OperationException):
- fusion_nig.main()
-
- # check api was called correctly
- api_obj.get_network_interface_group.assert_called_once_with(
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- network_interface_group_name=module_args["name"],
- )
- api_obj.create_network_interface_group.assert_called_once_with(
- purefusion.NetworkInterfaceGroupPost(
- group_type="eth",
- eth=purefusion.NetworkInterfaceGroupEthPost(
- prefix=module_args["prefix"],
- mtu=module_args["mtu"],
- ),
- name=module_args["name"],
- display_name=module_args["display_name"],
- ),
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.update_network_interface_group.assert_not_called()
- api_obj.delete_network_interface_group.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.NetworkInterfaceGroupsApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, OperationException),
- ],
-)
-def test_nig_create_op_exception(m_nig_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "present",
- "name": "nig1",
- "display_name": "Network Interface Group 1",
- "availability_zone": "az1",
- "region": "region1",
- "prefix": "10.21.200.0/24",
- "mtu": 1300,
- "group_type": "eth",
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_network_interface_group = MagicMock(
- side_effect=purefusion.rest.ApiException
- )
- api_obj.create_network_interface_group = MagicMock(return_value=OperationMock(1))
- api_obj.update_network_interface_group = MagicMock(return_value=OperationMock(2))
- api_obj.delete_network_interface_group = MagicMock(return_value=OperationMock(3))
- m_nig_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(side_effect=exec_original)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_nig.main()
-
- # check api was called correctly
- api_obj.get_network_interface_group.assert_called_once_with(
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- network_interface_group_name=module_args["name"],
- )
- api_obj.create_network_interface_group.assert_called_once_with(
- purefusion.NetworkInterfaceGroupPost(
- group_type="eth",
- eth=purefusion.NetworkInterfaceGroupEthPost(
- prefix=module_args["prefix"],
- mtu=module_args["mtu"],
- ),
- name=module_args["name"],
- display_name=module_args["display_name"],
- ),
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- )
- api_obj.update_network_interface_group.assert_not_called()
- api_obj.delete_network_interface_group.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.NetworkInterfaceGroupsApi")
-def test_nig_update(m_nig_api, m_op_api):
- current_nig = purefusion.NetworkInterfaceGroup(
- id="1",
- self_link="self_link_value",
- name="nig1",
- display_name=None,
- region="region1",
- availability_zone="az1",
- group_type="eth",
- eth=purefusion.NetworkInterfaceGroupEth(
- prefix="str",
- gateway="str",
- vlan=3,
- mtu=1300,
- ),
- )
- module_args = {
- "state": "present",
- "name": current_nig.name, # must match
- "display_name": "New Name", # should be updated
- "availability_zone": current_nig.availability_zone, # must match
- "region": current_nig.region, # must match
- "prefix": "12.19.150.0/23", # should not be updated
- "mtu": current_nig.eth.mtu + 100, # should not be updated
- "group_type": "eth",
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_network_interface_group = MagicMock(return_value=current_nig)
- api_obj.create_network_interface_group = MagicMock(return_value=OperationMock(1))
- api_obj.update_network_interface_group = MagicMock(return_value=OperationMock(2))
- api_obj.delete_network_interface_group = MagicMock(return_value=OperationMock(3))
- m_nig_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_nig.main()
-
- assert exc.value.changed is True
- assert exc.value.id == current_nig.id
-
- # check api was called correctly
- api_obj.get_network_interface_group.assert_called_once_with(
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- network_interface_group_name=module_args["name"],
- )
- api_obj.create_network_interface_group.assert_not_called()
- api_obj.update_network_interface_group.assert_called_once_with(
- purefusion.NetworkInterfaceGroupPatch(
- display_name=purefusion.NullableString(module_args["display_name"]),
- ),
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- network_interface_group_name=module_args["name"],
- )
- api_obj.delete_network_interface_group.assert_not_called()
- op_obj.get_operation.assert_called_once_with(2)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.NetworkInterfaceGroupsApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_nig_update_exception(m_nig_api, m_op_api, exec_original, exec_catch):
- current_nig = purefusion.NetworkInterfaceGroup(
- id="1",
- self_link="self_link_value",
- name="nig1",
- display_name=None,
- region="region1",
- availability_zone="az1",
- group_type="eth",
- eth=purefusion.NetworkInterfaceGroupEth(
- prefix="str",
- gateway="str",
- vlan=3,
- mtu=1300,
- ),
- )
- module_args = {
- "state": "present",
- "name": current_nig.name, # must match
- "display_name": "New Name", # should be updated
- "availability_zone": current_nig.availability_zone, # must match
- "region": current_nig.region, # must match
- "prefix": "12.19.150.0/23", # should not be updated
- "mtu": current_nig.eth.mtu + 100, # should not be updated
- "group_type": "eth",
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_network_interface_group = MagicMock(return_value=current_nig)
- api_obj.create_network_interface_group = MagicMock(return_value=OperationMock(1))
- api_obj.update_network_interface_group = MagicMock(side_effect=exec_original)
- api_obj.delete_network_interface_group = MagicMock(return_value=OperationMock(3))
- m_nig_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_nig.main()
-
- # check api was called correctly
- api_obj.get_network_interface_group.assert_called_once_with(
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- network_interface_group_name=module_args["name"],
- )
- api_obj.create_network_interface_group.assert_not_called()
- api_obj.update_network_interface_group.assert_called_once_with(
- purefusion.NetworkInterfaceGroupPatch(
- display_name=purefusion.NullableString(module_args["display_name"]),
- ),
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- network_interface_group_name=module_args["name"],
- )
- api_obj.delete_network_interface_group.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.NetworkInterfaceGroupsApi")
-def test_nig_update_op_fails(m_nig_api, m_op_api):
- current_nig = purefusion.NetworkInterfaceGroup(
- id="1",
- self_link="self_link_value",
- name="nig1",
- display_name=None,
- region="region1",
- availability_zone="az1",
- group_type="eth",
- eth=purefusion.NetworkInterfaceGroupEth(
- prefix="str",
- gateway="str",
- vlan=3,
- mtu=1300,
- ),
- )
- module_args = {
- "state": "present",
- "name": current_nig.name, # must match
- "display_name": "New Name", # should be updated
- "availability_zone": current_nig.availability_zone, # must match
- "region": current_nig.region, # must match
- "prefix": "12.19.150.0/23", # should not be updated
- "mtu": current_nig.eth.mtu + 100, # should not be updated
- "group_type": "eth",
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_network_interface_group = MagicMock(return_value=current_nig)
- api_obj.create_network_interface_group = MagicMock(return_value=OperationMock(1))
- api_obj.update_network_interface_group = MagicMock(return_value=OperationMock(2))
- api_obj.delete_network_interface_group = MagicMock(return_value=OperationMock(3))
- m_nig_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(OperationException):
- fusion_nig.main()
-
- # check api was called correctly
- api_obj.get_network_interface_group.assert_called_once_with(
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- network_interface_group_name=module_args["name"],
- )
- api_obj.create_network_interface_group.assert_not_called()
- api_obj.update_network_interface_group.assert_called_once_with(
- purefusion.NetworkInterfaceGroupPatch(
- display_name=purefusion.NullableString(module_args["display_name"]),
- ),
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- network_interface_group_name=module_args["name"],
- )
- api_obj.delete_network_interface_group.assert_not_called()
- op_obj.get_operation.assert_called_once_with(2)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.NetworkInterfaceGroupsApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, OperationException),
- ],
-)
-def test_nig_update_op_exception(m_nig_api, m_op_api, exec_original, exec_catch):
- current_nig = purefusion.NetworkInterfaceGroup(
- id="1",
- self_link="self_link_value",
- name="nig1",
- display_name=None,
- region="region1",
- availability_zone="az1",
- group_type="eth",
- eth=purefusion.NetworkInterfaceGroupEth(
- prefix="str",
- gateway="str",
- vlan=3,
- mtu=1300,
- ),
- )
- module_args = {
- "state": "present",
- "name": current_nig.name, # must match
- "display_name": "New Name", # should be updated
- "availability_zone": current_nig.availability_zone, # must match
- "region": current_nig.region, # must match
- "prefix": "12.19.150.0/23", # should not be updated
- "mtu": current_nig.eth.mtu + 100, # should not be updated
- "group_type": "eth",
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_network_interface_group = MagicMock(return_value=current_nig)
- api_obj.create_network_interface_group = MagicMock(return_value=OperationMock(1))
- api_obj.update_network_interface_group = MagicMock(return_value=OperationMock(2))
- api_obj.delete_network_interface_group = MagicMock(return_value=OperationMock(3))
- m_nig_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(side_effect=exec_original)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_nig.main()
-
- # check api was called correctly
- api_obj.get_network_interface_group.assert_called_once_with(
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- network_interface_group_name=module_args["name"],
- )
- api_obj.create_network_interface_group.assert_not_called()
- api_obj.update_network_interface_group.assert_called_once_with(
- purefusion.NetworkInterfaceGroupPatch(
- display_name=purefusion.NullableString(module_args["display_name"]),
- ),
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- network_interface_group_name=module_args["name"],
- )
- api_obj.delete_network_interface_group.assert_not_called()
- op_obj.get_operation.assert_called_once_with(2)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.NetworkInterfaceGroupsApi")
-def test_nig_present_not_changed(m_nig_api, m_op_api):
- current_nig = purefusion.NetworkInterfaceGroup(
- id="1",
- self_link="self_link_value",
- name="nig1",
- display_name="Display Name",
- region="region1",
- availability_zone="az1",
- group_type="eth",
- eth=purefusion.NetworkInterfaceGroupEth(
- prefix="str",
- gateway="str",
- vlan=3,
- mtu=1300,
- ),
- )
- module_args = {
- "state": "present",
- "name": current_nig.name, # must match
- "display_name": current_nig.display_name, # should not be updated
- "availability_zone": current_nig.availability_zone, # must match
- "region": current_nig.region, # must match
- "prefix": "12.19.150.0/23", # should not be updated
- "mtu": current_nig.eth.mtu + 100, # should not be updated
- "group_type": "eth",
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_network_interface_group = MagicMock(return_value=current_nig)
- api_obj.create_network_interface_group = MagicMock(return_value=OperationMock(1))
- api_obj.update_network_interface_group = MagicMock(return_value=OperationMock(2))
- api_obj.delete_network_interface_group = MagicMock(return_value=OperationMock(3))
- m_nig_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_nig.main()
-
- assert exc.value.changed is False
-
- # check api was called correctly
- api_obj.get_network_interface_group.assert_called_once_with(
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- network_interface_group_name=module_args["name"],
- )
- api_obj.create_network_interface_group.assert_not_called()
- api_obj.update_network_interface_group.assert_not_called()
- api_obj.delete_network_interface_group.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.NetworkInterfaceGroupsApi")
-def test_nig_absent_not_changed(m_nig_api, m_op_api):
- module_args = {
- "state": "absent",
- "name": "nig1",
- "display_name": "Network Interface Group 1",
- "availability_zone": "az1",
- "region": "region1",
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_network_interface_group = MagicMock(
- side_effect=purefusion.rest.ApiException
- )
- api_obj.create_network_interface_group = MagicMock(return_value=OperationMock(1))
- api_obj.update_network_interface_group = MagicMock(return_value=OperationMock(2))
- api_obj.delete_network_interface_group = MagicMock(return_value=OperationMock(3))
- m_nig_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_nig.main()
-
- assert exc.value.changed is False
-
- # check api was called correctly
- api_obj.get_network_interface_group.assert_called_once_with(
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- network_interface_group_name=module_args["name"],
- )
- api_obj.create_network_interface_group.assert_not_called()
- api_obj.update_network_interface_group.assert_not_called()
- api_obj.delete_network_interface_group.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.NetworkInterfaceGroupsApi")
-def test_nig_delete(m_nig_api, m_op_api):
- current_nig = purefusion.NetworkInterfaceGroup(
- id="1",
- self_link="self_link_value",
- name="nig1",
- display_name="Display Name",
- region="region1",
- availability_zone="az1",
- group_type="eth",
- eth=purefusion.NetworkInterfaceGroupEth(
- prefix="str",
- gateway="str",
- vlan=3,
- mtu=1300,
- ),
- )
- module_args = {
- "state": "absent",
- "name": current_nig.name, # must match
- "availability_zone": current_nig.availability_zone, # must match
- "region": current_nig.region, # must match
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_network_interface_group = MagicMock(return_value=current_nig)
- api_obj.create_network_interface_group = MagicMock(return_value=OperationMock(1))
- api_obj.update_network_interface_group = MagicMock(return_value=OperationMock(2))
- api_obj.delete_network_interface_group = MagicMock(return_value=OperationMock(3))
- m_nig_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_nig.main()
-
- assert exc.value.changed is True
-
- # check api was called correctly
- api_obj.get_network_interface_group.assert_called_once_with(
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- network_interface_group_name=module_args["name"],
- )
- api_obj.create_network_interface_group.assert_not_called()
- api_obj.update_network_interface_group.assert_not_called()
- api_obj.delete_network_interface_group.assert_called_once_with(
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- network_interface_group_name=module_args["name"],
- )
- op_obj.get_operation.assert_called_once_with(3)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.NetworkInterfaceGroupsApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_nig_delete_exception(m_nig_api, m_op_api, exec_original, exec_catch):
- current_nig = purefusion.NetworkInterfaceGroup(
- id="1",
- self_link="self_link_value",
- name="nig1",
- display_name="Display Name",
- region="region1",
- availability_zone="az1",
- group_type="eth",
- eth=purefusion.NetworkInterfaceGroupEth(
- prefix="str",
- gateway="str",
- vlan=3,
- mtu=1300,
- ),
- )
- module_args = {
- "state": "absent",
- "name": current_nig.name, # must match
- "availability_zone": current_nig.availability_zone, # must match
- "region": current_nig.region, # must match
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_network_interface_group = MagicMock(return_value=current_nig)
- api_obj.create_network_interface_group = MagicMock(return_value=OperationMock(1))
- api_obj.update_network_interface_group = MagicMock(return_value=OperationMock(2))
- api_obj.delete_network_interface_group = MagicMock(side_effect=exec_original)
- m_nig_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_nig.main()
-
- # check api was called correctly
- api_obj.get_network_interface_group.assert_called_once_with(
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- network_interface_group_name=module_args["name"],
- )
- api_obj.create_network_interface_group.assert_not_called()
- api_obj.update_network_interface_group.assert_not_called()
- api_obj.delete_network_interface_group.assert_called_once_with(
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- network_interface_group_name=module_args["name"],
- )
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.NetworkInterfaceGroupsApi")
-def test_nig_delete_op_fails(m_nig_api, m_op_api):
- current_nig = purefusion.NetworkInterfaceGroup(
- id="1",
- self_link="self_link_value",
- name="nig1",
- display_name="Display Name",
- region="region1",
- availability_zone="az1",
- group_type="eth",
- eth=purefusion.NetworkInterfaceGroupEth(
- prefix="str",
- gateway="str",
- vlan=3,
- mtu=1300,
- ),
- )
- module_args = {
- "state": "absent",
- "name": current_nig.name, # must match
- "availability_zone": current_nig.availability_zone, # must match
- "region": current_nig.region, # must match
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_network_interface_group = MagicMock(return_value=current_nig)
- api_obj.create_network_interface_group = MagicMock(return_value=OperationMock(1))
- api_obj.update_network_interface_group = MagicMock(return_value=OperationMock(2))
- api_obj.delete_network_interface_group = MagicMock(return_value=OperationMock(3))
- m_nig_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(OperationException):
- fusion_nig.main()
-
- # check api was called correctly
- api_obj.get_network_interface_group.assert_called_once_with(
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- network_interface_group_name=module_args["name"],
- )
- api_obj.create_network_interface_group.assert_not_called()
- api_obj.update_network_interface_group.assert_not_called()
- api_obj.delete_network_interface_group.assert_called_once_with(
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- network_interface_group_name=module_args["name"],
- )
- op_obj.get_operation.assert_called_once_with(3)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.NetworkInterfaceGroupsApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, OperationException),
- ],
-)
-def test_nig_delete_op_exception(m_nig_api, m_op_api, exec_original, exec_catch):
- current_nig = purefusion.NetworkInterfaceGroup(
- id="1",
- self_link="self_link_value",
- name="nig1",
- display_name="Display Name",
- region="region1",
- availability_zone="az1",
- group_type="eth",
- eth=purefusion.NetworkInterfaceGroupEth(
- prefix="str",
- gateway="str",
- vlan=3,
- mtu=1300,
- ),
- )
- module_args = {
- "state": "absent",
- "name": current_nig.name, # must match
- "availability_zone": current_nig.availability_zone, # must match
- "region": current_nig.region, # must match
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_network_interface_group = MagicMock(return_value=current_nig)
- api_obj.create_network_interface_group = MagicMock(return_value=OperationMock(1))
- api_obj.update_network_interface_group = MagicMock(return_value=OperationMock(2))
- api_obj.delete_network_interface_group = MagicMock(return_value=OperationMock(3))
- m_nig_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(side_effect=exec_original)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_nig.main()
-
- # check api was called correctly
- api_obj.get_network_interface_group.assert_called_once_with(
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- network_interface_group_name=module_args["name"],
- )
- api_obj.create_network_interface_group.assert_not_called()
- api_obj.update_network_interface_group.assert_not_called()
- api_obj.delete_network_interface_group.assert_called_once_with(
- availability_zone_name=module_args["availability_zone"],
- region_name=module_args["region"],
- network_interface_group_name=module_args["name"],
- )
- op_obj.get_operation.assert_called_once_with(3)
diff --git a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_pg.py b/ansible_collections/purestorage/fusion/tests/functional/test_fusion_pg.py
deleted file mode 100644
index 2a9419a8e..000000000
--- a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_pg.py
+++ /dev/null
@@ -1,1600 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# (c) 2023 Pure Storage, Inc.
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-from unittest.mock import MagicMock, patch, call
-
-import fusion as purefusion
-import pytest
-from ansible.module_utils import basic
-from ansible_collections.purestorage.fusion.plugins.module_utils.errors import (
- OperationException,
-)
-from ansible_collections.purestorage.fusion.plugins.modules import fusion_pg
-from ansible_collections.purestorage.fusion.tests.functional.utils import (
- AnsibleExitJson,
- AnsibleFailJson,
- OperationMock,
- FAKE_RESOURCE_ID,
- exit_json,
- fail_json,
- set_module_args,
- side_effects_with_exceptions,
-)
-from urllib3.exceptions import HTTPError
-
-# GLOBAL MOCKS
-fusion_pg.setup_fusion = MagicMock(return_value=purefusion.api_client.ApiClient())
-purefusion.api_client.ApiClient.call_api = MagicMock(
- side_effect=Exception("API call not mocked!")
-)
-basic.AnsibleModule.exit_json = exit_json
-basic.AnsibleModule.fail_json = fail_json
-
-
-@pytest.fixture
-def module_args_present():
- return {
- "name": "placement_group1",
- "tenant": "tenant1",
- "tenant_space": "tenant_space1",
- "region": "region1",
- "availability_zone": "availability_zone1",
- "storage_service": "storage_service1",
- "state": "present",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
-
-
-@pytest.fixture
-def module_args_absent():
- return {
- "name": "placement_group1",
- "tenant": "tenant1",
- "tenant_space": "tenant_space1",
- "state": "absent",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.PlacementGroupsApi")
-@pytest.mark.parametrize(
- ("module_args", "get_not_called"),
- [
- # 'name` is missing
- (
- {
- "tenant": "tenant1",
- "tenant_space": "tenant_space1",
- "region": "region1",
- "availability_zone": "availability_zone1",
- "storage_service": "storage_service1",
- "state": "present",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- True,
- ),
- # 'tenant` is missing
- (
- {
- "name": "placement_group1",
- "tenant_space": "tenant_space1",
- "region": "region1",
- "availability_zone": "availability_zone1",
- "storage_service": "storage_service1",
- "state": "present",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- True,
- ),
- # 'tenant space` is missing
- (
- {
- "name": "placement_group1",
- "tenant": "tenant1",
- "region": "region1",
- "availability_zone": "availability_zone1",
- "storage_service": "storage_service1",
- "state": "present",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- True,
- ),
- # 'region` is missing
- (
- {
- "name": "placement_group1",
- "tenant": "tenant1",
- "tenant_space": "tenant_space1",
- "availability_zone": "availability_zone1",
- "storage_service": "storage_service1",
- "state": "present",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- False,
- ),
- # 'availability_zone` is missing
- (
- {
- "name": "placement_group1",
- "tenant": "tenant1",
- "tenant_space": "tenant_space1",
- "region": "region1",
- "storage_service": "storage_service1",
- "state": "present",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- False,
- ),
- # 'storage_service` is missing
- (
- {
- "name": "placement_group1",
- "tenant": "tenant1",
- "tenant_space": "tenant_space1",
- "region": "region1",
- "availability_zone": "availability_zone1",
- "state": "present",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- False,
- ),
- # 'state` is invalid
- (
- {
- "name": "placement_group1",
- "tenant": "tenant1",
- "tenant_space": "tenant_space1",
- "region": "region1",
- "availability_zone": "availability_zone1",
- "storage_service": "storage_service1",
- "state": "past",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- False,
- ),
- ],
-)
-def test_module_args_wrong(pg_api_init, op_api_init, module_args, get_not_called):
- set_module_args(module_args)
-
- pg_mock = MagicMock()
- pg_mock.get_placement_group = MagicMock(side_effect=purefusion.rest.ApiException)
- pg_mock.create_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_mock.update_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_mock.delete_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_api_init.return_value = pg_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(side_effect=purefusion.rest.ApiException)
- op_api_init.return_value = op_mock
-
- with pytest.raises(AnsibleFailJson):
- fusion_pg.main()
-
- if get_not_called:
- pg_mock.get_placement_group.assert_not_called()
- elif pg_mock.get_placement_group.called:
- pg_mock.get_placement_group.assert_called_with(
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- placement_group_name="placement_group1",
- )
- pg_mock.create_placement_group.assert_not_called()
- pg_mock.update_placement_group.assert_not_called()
- pg_mock.delete_placement_group.assert_not_called()
- op_mock.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.PlacementGroupsApi")
-def test_pg_create_ok(pg_api_init, op_api_init, module_args_present):
- module_args = module_args_present
- module_args["display_name"] = "some_display_name"
- set_module_args(module_args)
-
- pg_mock = MagicMock()
- pg_mock.get_placement_group = MagicMock(side_effect=purefusion.rest.ApiException)
- pg_mock.create_placement_group = MagicMock(return_value=OperationMock("op1"))
- pg_mock.update_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_mock.delete_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_api_init.return_value = pg_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(return_value=OperationMock("op1", success=True))
- op_api_init.return_value = op_mock
-
- with pytest.raises(AnsibleExitJson) as excinfo:
- fusion_pg.main()
- assert excinfo.value.changed
- assert excinfo.value.id == FAKE_RESOURCE_ID
-
- pg_mock.get_placement_group.assert_called_with(
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- placement_group_name="placement_group1",
- )
- pg_mock.create_placement_group.assert_called_with(
- purefusion.PlacementGroupPost(
- name="placement_group1",
- display_name="some_display_name",
- availability_zone="availability_zone1",
- region="region1",
- storage_service="storage_service1",
- ),
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- )
- pg_mock.update_placement_group.assert_not_called()
- pg_mock.delete_placement_group.assert_not_called()
- op_mock.get_operation.assert_called_with("op1")
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.PlacementGroupsApi")
-def test_pg_create_without_display_name_ok(
- pg_api_init, op_api_init, module_args_present
-):
- module_args = module_args_present
- set_module_args(module_args)
-
- pg_mock = MagicMock()
- pg_mock.get_placement_group = MagicMock(side_effect=purefusion.rest.ApiException)
- pg_mock.create_placement_group = MagicMock(return_value=OperationMock("op1"))
- pg_mock.update_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_mock.delete_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_api_init.return_value = pg_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(return_value=OperationMock("op1", success=True))
- op_api_init.return_value = op_mock
-
- with pytest.raises(AnsibleExitJson) as excinfo:
- fusion_pg.main()
- assert excinfo.value.changed
- assert excinfo.value.id == FAKE_RESOURCE_ID
-
- pg_mock.get_placement_group.assert_called_with(
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- placement_group_name="placement_group1",
- )
- pg_mock.create_placement_group.assert_called_with(
- purefusion.PlacementGroupPost(
- name="placement_group1",
- display_name="placement_group1",
- availability_zone="availability_zone1",
- region="region1",
- storage_service="storage_service1",
- ),
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- )
- pg_mock.update_placement_group.assert_not_called()
- pg_mock.delete_placement_group.assert_not_called()
- op_mock.get_operation.assert_called_with("op1")
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.PlacementGroupsApi")
-@pytest.mark.parametrize(
- ("raised_exception", "expected_exception"),
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_pg_create_exception(
- pg_api_init, op_api_init, raised_exception, expected_exception, module_args_present
-):
- set_module_args(module_args_present)
-
- pg_mock = MagicMock()
- pg_mock.get_placement_group = MagicMock(side_effect=purefusion.rest.ApiException)
- pg_mock.create_placement_group = MagicMock(side_effect=raised_exception)
- pg_mock.update_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_mock.delete_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_api_init.return_value = pg_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(side_effect=NotImplementedError())
- op_api_init.return_value = op_mock
-
- with pytest.raises(expected_exception):
- fusion_pg.main()
-
- pg_mock.get_placement_group.assert_called_with(
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- placement_group_name="placement_group1",
- )
- pg_mock.create_placement_group.assert_called_with(
- purefusion.PlacementGroupPost(
- name="placement_group1",
- display_name="placement_group1",
- availability_zone="availability_zone1",
- region="region1",
- storage_service="storage_service1",
- ),
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- )
- pg_mock.delete_placement_group.assert_not_called()
- pg_mock.update_placement_group.assert_not_called()
- op_mock.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.PlacementGroupsApi")
-def test_pg_create_op_fails(pg_api_init, op_api_init, module_args_present):
- module_args = module_args_present
- set_module_args(module_args)
-
- pg_mock = MagicMock()
- pg_mock.get_placement_group = MagicMock(side_effect=purefusion.rest.ApiException)
- pg_mock.create_placement_group = MagicMock(return_value=OperationMock(id="op1"))
- pg_mock.update_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_mock.delete_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_api_init.return_value = pg_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(return_value=OperationMock("op1", success=False))
- op_api_init.return_value = op_mock
-
- with pytest.raises(OperationException):
- fusion_pg.main()
-
- pg_mock.get_placement_group.assert_called_with(
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- placement_group_name="placement_group1",
- )
- pg_mock.create_placement_group.assert_called_with(
- purefusion.PlacementGroupPost(
- name="placement_group1",
- display_name="placement_group1",
- availability_zone="availability_zone1",
- region="region1",
- storage_service="storage_service1",
- ),
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- )
- pg_mock.update_placement_group.assert_not_called()
- pg_mock.delete_placement_group.assert_not_called()
- op_mock.get_operation.assert_called_with("op1")
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.PlacementGroupsApi")
-def test_pg_create_triggers_update_ok(pg_api_init, op_api_init):
- module_args = {
- "name": "placement_group1",
- "display_name": "some_display_name",
- "tenant": "tenant1",
- "tenant_space": "tenant_space1",
- "region": "region1",
- "availability_zone": "availability_zone1",
- "storage_service": "storage_service1",
- "array": "array2",
- "state": "present",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- get_placement_group_effects = [
- purefusion.rest.ApiException(),
- purefusion.PlacementGroup(
- id="placement_group1_id",
- name="placement_group1",
- display_name="some_display_name",
- self_link="test_self_link",
- tenant=purefusion.TenantRef(
- id="tenant1_id",
- name="tenant1",
- kind="Tenant",
- self_link="some_self_link",
- ),
- tenant_space=purefusion.TenantSpaceRef(
- id="tenant_space1_id",
- name="tenant_space1",
- kind="TenantSpace",
- self_link="some_self_link",
- ),
- availability_zone=purefusion.AvailabilityZoneRef(
- id="availability_zone1_id",
- name="availability_zone1",
- kind="AvailabilityZone",
- self_link="some_self_link",
- ),
- placement_engine="heuristics",
- protocols=[],
- storage_service=purefusion.StorageServiceRef(
- id="storage_service1_id",
- name="storage_service",
- kind="StorageService",
- self_link="some_self_link",
- ),
- array=purefusion.ArrayRef(
- id="array1_id", name="array1", kind="Array", self_link="some_self_link"
- ),
- ),
- ]
-
- pg_mock = MagicMock()
- pg_mock.get_placement_group = MagicMock(
- side_effect=side_effects_with_exceptions(get_placement_group_effects)
- )
- pg_mock.create_placement_group = MagicMock(return_value=OperationMock("op1"))
- pg_mock.update_placement_group = MagicMock(return_value=OperationMock("op2"))
- pg_mock.delete_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_api_init.return_value = pg_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(return_value=OperationMock("op1", success=True))
- op_api_init.return_value = op_mock
-
- with pytest.raises(AnsibleExitJson) as excinfo:
- fusion_pg.main()
- assert excinfo.value.changed
- assert excinfo.value.id == FAKE_RESOURCE_ID
-
- pg_mock.get_placement_group.assert_has_calls(
- [
- call(
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- placement_group_name="placement_group1",
- ),
- call(
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- placement_group_name="placement_group1",
- ),
- ],
- any_order=True,
- )
- pg_mock.create_placement_group.assert_called_with(
- purefusion.PlacementGroupPost(
- name="placement_group1",
- display_name="some_display_name",
- availability_zone="availability_zone1",
- region="region1",
- storage_service="storage_service1",
- ),
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- )
- pg_mock.update_placement_group.assert_called_with(
- purefusion.PlacementGroupPatch(array=purefusion.NullableString(value="array2")),
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- placement_group_name="placement_group1",
- )
- pg_mock.delete_placement_group.assert_not_called()
- op_mock.get_operation.assert_has_calls([call("op1"), call("op2")], any_order=True)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.PlacementGroupsApi")
-@pytest.mark.parametrize(
- ("raised_exception", "expected_exception"),
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_pg_create_triggers_update_exception(
- pg_api_init, op_api_init, raised_exception, expected_exception
-):
- module_args = {
- "name": "placement_group1",
- "display_name": "some_display_name",
- "tenant": "tenant1",
- "tenant_space": "tenant_space1",
- "region": "region1",
- "availability_zone": "availability_zone1",
- "storage_service": "storage_service1",
- "array": "array2",
- "state": "present",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- get_placement_group_effects = [
- purefusion.rest.ApiException(),
- purefusion.PlacementGroup(
- id="placement_group1_id",
- name="placement_group1",
- display_name="some_display_name",
- self_link="test_self_link",
- tenant=purefusion.TenantRef(
- id="tenant1_id",
- name="tenant1",
- kind="Tenant",
- self_link="some_self_link",
- ),
- tenant_space=purefusion.TenantSpaceRef(
- id="tenant_space1_id",
- name="tenant_space1",
- kind="TenantSpace",
- self_link="some_self_link",
- ),
- availability_zone=purefusion.AvailabilityZoneRef(
- id="availability_zone1_id",
- name="availability_zone1",
- kind="AvailabilityZone",
- self_link="some_self_link",
- ),
- placement_engine="heuristics",
- protocols=[],
- storage_service=purefusion.StorageServiceRef(
- id="storage_service1_id",
- name="storage_service",
- kind="StorageService",
- self_link="some_self_link",
- ),
- array=purefusion.ArrayRef(
- id="array1_id", name="array1", kind="Array", self_link="some_self_link"
- ),
- ),
- ]
-
- pg_mock = MagicMock()
- pg_mock.get_placement_group = MagicMock(
- side_effect=side_effects_with_exceptions(get_placement_group_effects)
- )
- pg_mock.create_placement_group = MagicMock(return_value=OperationMock("op1"))
- pg_mock.update_placement_group = MagicMock(side_effect=raised_exception)
- pg_mock.delete_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_api_init.return_value = pg_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(return_value=OperationMock("op1", success=True))
- op_api_init.return_value = op_mock
-
- with pytest.raises(expected_exception):
- fusion_pg.main()
-
- pg_mock.get_placement_group.assert_has_calls(
- [
- call(
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- placement_group_name="placement_group1",
- ),
- call(
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- placement_group_name="placement_group1",
- ),
- ],
- any_order=True,
- )
- pg_mock.create_placement_group.assert_called_with(
- purefusion.PlacementGroupPost(
- name="placement_group1",
- display_name="some_display_name",
- availability_zone="availability_zone1",
- region="region1",
- storage_service="storage_service1",
- ),
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- )
- pg_mock.update_placement_group.assert_called_with(
- purefusion.PlacementGroupPatch(array=purefusion.NullableString(value="array2")),
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- placement_group_name="placement_group1",
- )
- pg_mock.delete_placement_group.assert_not_called()
- op_mock.get_operation.assert_called_with("op1")
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.PlacementGroupsApi")
-def test_pg_create_triggers_update_op_fails(pg_api_init, op_api_init):
- module_args = {
- "name": "placement_group1",
- "display_name": "some_display_name",
- "tenant": "tenant1",
- "tenant_space": "tenant_space1",
- "region": "region1",
- "availability_zone": "availability_zone1",
- "storage_service": "storage_service1",
- "array": "array2",
- "state": "present",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- get_placement_group_effects = [
- purefusion.rest.ApiException(),
- purefusion.PlacementGroup(
- id="placement_group1_id",
- name="placement_group1",
- display_name="some_display_name",
- self_link="test_self_link",
- tenant=purefusion.TenantRef(
- id="tenant1_id",
- name="tenant1",
- kind="Tenant",
- self_link="some_self_link",
- ),
- tenant_space=purefusion.TenantSpaceRef(
- id="tenant_space1_id",
- name="tenant_space1",
- kind="TenantSpace",
- self_link="some_self_link",
- ),
- availability_zone=purefusion.AvailabilityZoneRef(
- id="availability_zone1_id",
- name="availability_zone1",
- kind="AvailabilityZone",
- self_link="some_self_link",
- ),
- placement_engine="heuristics",
- protocols=[],
- storage_service=purefusion.StorageServiceRef(
- id="storage_service1_id",
- name="storage_service",
- kind="StorageService",
- self_link="some_self_link",
- ),
- array=purefusion.ArrayRef(
- id="array1_id", name="array1", kind="Array", self_link="some_self_link"
- ),
- ),
- ]
-
- pg_mock = MagicMock()
- pg_mock.get_placement_group = MagicMock(
- side_effect=side_effects_with_exceptions(get_placement_group_effects)
- )
- pg_mock.create_placement_group = MagicMock(return_value=OperationMock("op1"))
- pg_mock.update_placement_group = MagicMock(return_value=OperationMock("op2"))
- pg_mock.delete_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_api_init.return_value = pg_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(
- side_effect=[
- OperationMock("op1", success=True),
- OperationMock("op2", success=False),
- ]
- )
- op_api_init.return_value = op_mock
-
- with pytest.raises(OperationException):
- fusion_pg.main()
-
- pg_mock.get_placement_group.assert_has_calls(
- [
- call(
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- placement_group_name="placement_group1",
- ),
- call(
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- placement_group_name="placement_group1",
- ),
- ],
- any_order=True,
- )
- pg_mock.create_placement_group.assert_called_with(
- purefusion.PlacementGroupPost(
- name="placement_group1",
- display_name="some_display_name",
- availability_zone="availability_zone1",
- region="region1",
- storage_service="storage_service1",
- ),
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- )
- pg_mock.update_placement_group.assert_called_with(
- purefusion.PlacementGroupPatch(array=purefusion.NullableString(value="array2")),
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- placement_group_name="placement_group1",
- )
- pg_mock.delete_placement_group.assert_not_called()
- op_mock.get_operation.assert_has_calls([call("op1"), call("op2")])
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.PlacementGroupsApi")
-@pytest.mark.parametrize(
- "test_case",
- [
- # patch 'display_name`
- {
- "current_state": purefusion.PlacementGroup(
- id="placement_group1_id",
- name="placement_group1",
- display_name="placement_group1_display_name",
- self_link="test_self_link",
- tenant=purefusion.TenantRef(
- id="tenant1_id",
- name="tenant1",
- kind="Tenant",
- self_link="some_self_link",
- ),
- tenant_space=purefusion.TenantSpaceRef(
- id="tenant_space1_id",
- name="tenant_space1",
- kind="TenantSpace",
- self_link="some_self_link",
- ),
- availability_zone=purefusion.AvailabilityZoneRef(
- id="availability_zone1_id",
- name="availability_zone1",
- kind="AvailabilityZone",
- self_link="some_self_link",
- ),
- placement_engine="heuristics",
- protocols=[],
- storage_service=purefusion.StorageServiceRef(
- id="storage_service1_id",
- name="storage_service",
- kind="StorageService",
- self_link="some_self_link",
- ),
- array=purefusion.ArrayRef(
- id="array1_id",
- name="array1",
- kind="Array",
- self_link="some_self_link",
- ),
- ),
- "module_args": {
- "name": "placement_group1",
- "display_name": "different_display_name",
- "tenant": "tenant1",
- "tenant_space": "tenant_space1",
- "region": "region1",
- "availability_zone": "availability_zone1",
- "storage_service": "storage_service1",
- "state": "present",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- "patches": [
- purefusion.PlacementGroupPatch(
- display_name=purefusion.NullableString(
- value="different_display_name"
- ),
- ),
- ],
- },
- # patch 'array`
- {
- "current_state": purefusion.PlacementGroup(
- id="placement_group1_id",
- name="placement_group1",
- display_name="placement_group1",
- self_link="test_self_link",
- tenant=purefusion.TenantRef(
- id="tenant1_id",
- name="tenant1",
- kind="Tenant",
- self_link="some_self_link",
- ),
- tenant_space=purefusion.TenantSpaceRef(
- id="tenant_space1_id",
- name="tenant_space1",
- kind="TenantSpace",
- self_link="some_self_link",
- ),
- availability_zone=purefusion.AvailabilityZoneRef(
- id="availability_zone1_id",
- name="availability_zone1",
- kind="AvailabilityZone",
- self_link="some_self_link",
- ),
- placement_engine="heuristics",
- protocols=[],
- storage_service=purefusion.StorageServiceRef(
- id="storage_service1_id",
- name="storage_service",
- kind="StorageService",
- self_link="some_self_link",
- ),
- array=purefusion.ArrayRef(
- id="array1_id",
- name="array1",
- kind="Array",
- self_link="some_self_link",
- ),
- ),
- "module_args": {
- "name": "placement_group1",
- "tenant": "tenant1",
- "tenant_space": "tenant_space1",
- "region": "region1",
- "availability_zone": "availability_zone1",
- "storage_service": "storage_service1",
- "array": "array2",
- "state": "present",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- "patches": [
- purefusion.PlacementGroupPatch(
- array=purefusion.NullableString(value="array2"),
- ),
- ],
- },
- # patch all
- {
- "current_state": purefusion.PlacementGroup(
- id="placement_group1_id",
- name="placement_group1",
- display_name="placement_group1_display_name",
- self_link="test_self_link",
- tenant=purefusion.TenantRef(
- id="tenant1_id",
- name="tenant1",
- kind="Tenant",
- self_link="some_self_link",
- ),
- tenant_space=purefusion.TenantSpaceRef(
- id="tenant_space1_id",
- name="tenant_space1",
- kind="TenantSpace",
- self_link="some_self_link",
- ),
- availability_zone=purefusion.AvailabilityZoneRef(
- id="availability_zone1_id",
- name="availability_zone1",
- kind="AvailabilityZone",
- self_link="some_self_link",
- ),
- placement_engine="heuristics",
- protocols=[],
- storage_service=purefusion.StorageServiceRef(
- id="storage_service1_id",
- name="storage_service",
- kind="StorageService",
- self_link="some_self_link",
- ),
- array=purefusion.ArrayRef(
- id="array1_id",
- name="array1",
- kind="Array",
- self_link="some_self_link",
- ),
- ),
- "module_args": {
- "name": "placement_group1",
- "display_name": "different_display_name",
- "tenant": "tenant1",
- "tenant_space": "tenant_space1",
- "region": "region1",
- "availability_zone": "availability_zone1",
- "storage_service": "storage_service1",
- "array": "array2",
- "state": "present",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- "patches": [
- purefusion.PlacementGroupPatch(
- display_name=purefusion.NullableString(
- value="different_display_name"
- ),
- ),
- purefusion.PlacementGroupPatch(
- array=purefusion.NullableString(value="array2"),
- ),
- ],
- },
- ],
-)
-def test_pg_update_ok(pg_api_init, op_api_init, test_case):
- module_args = test_case["module_args"]
- set_module_args(module_args)
-
- get_operation_calls = [
- call("op{0}".format(i)) for i in range(len(test_case["patches"]))
- ]
- update_placement_group_return_vals = [
- OperationMock(id="op{0}".format(i)) for i in range(len(test_case["patches"]))
- ]
- update_placement_group_calls = [
- call(
- p,
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- placement_group_name="placement_group1",
- )
- for p in test_case["patches"]
- ]
-
- pg_mock = MagicMock()
- pg_mock.get_placement_group = MagicMock(return_value=test_case["current_state"])
- pg_mock.create_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_mock.update_placement_group = MagicMock(
- side_effect=update_placement_group_return_vals
- )
- pg_mock.delete_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_api_init.return_value = pg_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(
- side_effect=lambda op_id: OperationMock(id=op_id, success=True)
- )
- op_api_init.return_value = op_mock
-
- with pytest.raises(AnsibleExitJson) as excinfo:
- fusion_pg.main()
- assert excinfo.value.changed
- assert excinfo.value.id == test_case["current_state"].id
-
- pg_mock.get_placement_group.assert_called_with(
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- placement_group_name="placement_group1",
- )
- pg_mock.create_placement_group.assert_not_called()
- pg_mock.update_placement_group.assert_has_calls(
- update_placement_group_calls, any_order=True
- )
- pg_mock.delete_placement_group.assert_not_called()
- op_mock.get_operation.assert_has_calls(get_operation_calls, any_order=True)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.PlacementGroupsApi")
-@pytest.mark.parametrize("failing_patch", [0, 1])
-@pytest.mark.parametrize(
- ("raised_exception", "expected_exception"),
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_pg_update_exception(
- pg_api_init, op_api_init, failing_patch, raised_exception, expected_exception
-):
- module_args = {
- "name": "placement_group1",
- "display_name": "different_display_name",
- "tenant": "tenant1",
- "tenant_space": "tenant_space1",
- "region": "region1",
- "availability_zone": "availability_zone1",
- "storage_service": "storage_service1",
- "array": "array2",
- "state": "present",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- patches = [
- purefusion.PlacementGroupPatch(
- display_name=purefusion.NullableString(value="different_display_name"),
- ),
- purefusion.PlacementGroupPatch(
- array=purefusion.NullableString(value="array2"),
- ),
- ]
-
- pg_mock = MagicMock()
- pg_mock.get_placement_group = MagicMock(
- return_value=purefusion.PlacementGroup(
- id="placement_group1_id",
- name="placement_group1",
- display_name="placement_group1_display_name",
- self_link="test_self_link",
- tenant=purefusion.TenantRef(
- id="tenant1_id",
- name="tenant1",
- kind="Tenant",
- self_link="some_self_link",
- ),
- tenant_space=purefusion.TenantSpaceRef(
- id="tenant_space1_id",
- name="tenant_space1",
- kind="TenantSpace",
- self_link="some_self_link",
- ),
- availability_zone=purefusion.AvailabilityZoneRef(
- id="availability_zone1_id",
- name="availability_zone1",
- kind="AvailabilityZone",
- self_link="some_self_link",
- ),
- placement_engine="heuristics",
- protocols=[],
- storage_service=purefusion.StorageServiceRef(
- id="storage_service1_id",
- name="storage_service",
- kind="StorageService",
- self_link="some_self_link",
- ),
- array=purefusion.ArrayRef(
- id="array1_id", name="array1", kind="Array", self_link="some_self_link"
- ),
- )
- )
- pg_mock.create_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_mock.update_placement_group = MagicMock(
- side_effect=throw_on_specific_patch(patches, failing_patch, raised_exception, 0)
- )
- pg_mock.delete_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_api_init.return_value = pg_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(
- side_effect=lambda op_id: OperationMock(id=op_id, success=True)
- )
- op_api_init.return_value = op_mock
-
- with pytest.raises(expected_exception):
- fusion_pg.main()
-
- pg_mock.get_placement_group.assert_called_with(
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- placement_group_name="placement_group1",
- )
- pg_mock.create_placement_group.assert_not_called()
- pg_mock.delete_placement_group.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.PlacementGroupsApi")
-@pytest.mark.parametrize("failing_patch", [0, 1])
-@pytest.mark.parametrize(
- ("raised_exception", "expected_exception"),
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_pg_update_exception(
- pg_api_init, op_api_init, failing_patch, raised_exception, expected_exception
-):
- module_args = {
- "name": "placement_group1",
- "display_name": "different_display_name",
- "tenant": "tenant1",
- "tenant_space": "tenant_space1",
- "region": "region1",
- "availability_zone": "availability_zone1",
- "storage_service": "storage_service1",
- "array": "array2",
- "state": "present",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- patches = [
- purefusion.PlacementGroupPatch(
- display_name=purefusion.NullableString(value="different_display_name"),
- ),
- purefusion.PlacementGroupPatch(
- array=purefusion.NullableString(value="array2"),
- ),
- ]
-
- pg_mock = MagicMock()
- pg_mock.get_placement_group = MagicMock(
- return_value=purefusion.PlacementGroup(
- id="placement_group1_id",
- name="placement_group1",
- display_name="placement_group1_display_name",
- self_link="test_self_link",
- tenant=purefusion.TenantRef(
- id="tenant1_id",
- name="tenant1",
- kind="Tenant",
- self_link="some_self_link",
- ),
- tenant_space=purefusion.TenantSpaceRef(
- id="tenant_space1_id",
- name="tenant_space1",
- kind="TenantSpace",
- self_link="some_self_link",
- ),
- availability_zone=purefusion.AvailabilityZoneRef(
- id="availability_zone1_id",
- name="availability_zone1",
- kind="AvailabilityZone",
- self_link="some_self_link",
- ),
- placement_engine="heuristics",
- protocols=[],
- storage_service=purefusion.StorageServiceRef(
- id="storage_service1_id",
- name="storage_service",
- kind="StorageService",
- self_link="some_self_link",
- ),
- array=purefusion.ArrayRef(
- id="array1_id", name="array1", kind="Array", self_link="some_self_link"
- ),
- )
- )
- pg_mock.create_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_mock.update_placement_group = MagicMock(
- side_effect=throw_on_specific_patch(patches, failing_patch, raised_exception, 0)
- )
- pg_mock.delete_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_api_init.return_value = pg_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(
- side_effect=lambda op_id: OperationMock(id=op_id, success=True)
- )
- op_api_init.return_value = op_mock
-
- with pytest.raises(expected_exception) as excinfo:
- fusion_pg.main()
-
- pg_mock.get_placement_group.assert_called_with(
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- placement_group_name="placement_group1",
- )
- pg_mock.create_placement_group.assert_not_called()
- pg_mock.delete_placement_group.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.PlacementGroupsApi")
-@pytest.mark.parametrize("failing_patch", [0, 1])
-def test_pg_update_op_fails(pg_api_init, op_api_init, failing_patch):
- module_args = {
- "name": "placement_group1",
- "display_name": "different_display_name",
- "tenant": "tenant1",
- "tenant_space": "tenant_space1",
- "region": "region1",
- "availability_zone": "availability_zone1",
- "storage_service": "storage_service1",
- "array": "array2",
- "state": "present",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- patches = [
- purefusion.PlacementGroupPatch(
- display_name=purefusion.NullableString(value="different_display_name"),
- ),
- purefusion.PlacementGroupPatch(
- array=purefusion.NullableString(value="array2"),
- ),
- ]
- ops = ["op0", "op1"]
-
- pg_mock = MagicMock()
- pg_mock.get_placement_group = MagicMock(
- return_value=purefusion.PlacementGroup(
- id="placement_group1_id",
- name="placement_group1",
- display_name="placement_group1_display_name",
- self_link="test_self_link",
- tenant=purefusion.TenantRef(
- id="tenant1_id",
- name="tenant1",
- kind="Tenant",
- self_link="some_self_link",
- ),
- tenant_space=purefusion.TenantSpaceRef(
- id="tenant_space1_id",
- name="tenant_space1",
- kind="TenantSpace",
- self_link="some_self_link",
- ),
- availability_zone=purefusion.AvailabilityZoneRef(
- id="availability_zone1_id",
- name="availability_zone1",
- kind="AvailabilityZone",
- self_link="some_self_link",
- ),
- placement_engine="heuristics",
- protocols=[],
- storage_service=purefusion.StorageServiceRef(
- id="storage_service1_id",
- name="storage_service",
- kind="StorageService",
- self_link="some_self_link",
- ),
- array=purefusion.ArrayRef(
- id="array1_id", name="array1", kind="Array", self_link="some_self_link"
- ),
- )
- )
- pg_mock.create_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_mock.update_placement_group = MagicMock(
- side_effect=lambda patch, tenant_name, tenant_space_name, placement_group_name: OperationMock(
- id="op{0}".format(patches.index(patch))
- )
- )
- pg_mock.delete_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_api_init.return_value = pg_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(
- side_effect=lambda id: OperationMock(
- id=id, success=ops.index(id) != failing_patch
- )
- )
- op_api_init.return_value = op_mock
-
- with pytest.raises(OperationException):
- fusion_pg.main()
-
- pg_mock.get_placement_group.assert_called_with(
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- placement_group_name="placement_group1",
- )
- pg_mock.create_placement_group.assert_not_called()
- pg_mock.delete_placement_group.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.PlacementGroupsApi")
-def test_pg_delete_ok(pg_api_init, op_api_init, module_args_absent):
- module_args = module_args_absent
- set_module_args(module_args)
-
- pg_mock = MagicMock()
- pg_mock.get_placement_group = MagicMock(
- return_value=purefusion.PlacementGroup(
- id="placement_group1_id",
- name="placement_group1",
- display_name="placement_group1_display_name",
- self_link="test_self_link",
- tenant=purefusion.TenantRef(
- id="tenant1_id",
- name="tenant1",
- kind="Tenant",
- self_link="some_self_link",
- ),
- tenant_space=purefusion.TenantSpaceRef(
- id="tenant_space1_id",
- name="tenant_space1",
- kind="TenantSpace",
- self_link="some_self_link",
- ),
- availability_zone=purefusion.AvailabilityZoneRef(
- id="availability_zone1_id",
- name="availability_zone1",
- kind="AvailabilityZone",
- self_link="some_self_link",
- ),
- placement_engine="heuristics",
- protocols=[],
- storage_service=purefusion.StorageServiceRef(
- id="storage_service1_id",
- name="storage_service",
- kind="StorageService",
- self_link="some_self_link",
- ),
- array=purefusion.ArrayRef(
- id="array1_id", name="array1", kind="Array", self_link="some_self_link"
- ),
- )
- )
- pg_mock.create_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_mock.update_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_mock.delete_placement_group = MagicMock(return_value=OperationMock(id="op1"))
- pg_api_init.return_value = pg_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(
- return_value=OperationMock(id="op1", success=True)
- )
- op_api_init.return_value = op_mock
-
- with pytest.raises(AnsibleExitJson) as excinfo:
- fusion_pg.main()
- assert excinfo.value.changed
-
- pg_mock.get_placement_group.assert_called_with(
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- placement_group_name="placement_group1",
- )
- pg_mock.create_placement_group.assert_not_called()
- pg_mock.update_placement_group.assert_not_called()
- pg_mock.delete_placement_group.assert_called_with(
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- placement_group_name="placement_group1",
- )
- op_mock.get_operation.assert_called_with("op1")
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.PlacementGroupsApi")
-@pytest.mark.parametrize(
- ("raised_exception", "expected_exception"),
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_pg_delete_exception(
- pg_api_init, op_api_init, raised_exception, expected_exception, module_args_absent
-):
- module_args = module_args_absent
- set_module_args(module_args)
-
- pg_mock = MagicMock()
- pg_mock.get_placement_group = MagicMock(
- return_value=purefusion.PlacementGroup(
- id="placement_group1_id",
- name="placement_group1",
- display_name="placement_group1_display_name",
- self_link="test_self_link",
- tenant=purefusion.TenantRef(
- id="tenant1_id",
- name="tenant1",
- kind="Tenant",
- self_link="some_self_link",
- ),
- tenant_space=purefusion.TenantSpaceRef(
- id="tenant_space1_id",
- name="tenant_space1",
- kind="TenantSpace",
- self_link="some_self_link",
- ),
- availability_zone=purefusion.AvailabilityZoneRef(
- id="availability_zone1_id",
- name="availability_zone1",
- kind="AvailabilityZone",
- self_link="some_self_link",
- ),
- placement_engine="heuristics",
- protocols=[],
- storage_service=purefusion.StorageServiceRef(
- id="storage_service1_id",
- name="storage_service",
- kind="StorageService",
- self_link="some_self_link",
- ),
- array=purefusion.ArrayRef(
- id="array1_id", name="array1", kind="Array", self_link="some_self_link"
- ),
- )
- )
- pg_mock.create_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_mock.update_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_mock.delete_placement_group = MagicMock(side_effect=raised_exception)
- pg_api_init.return_value = pg_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(side_effect=NotImplementedError())
- op_api_init.return_value = op_mock
-
- with pytest.raises(expected_exception):
- fusion_pg.main()
-
- pg_mock.get_placement_group.assert_called_with(
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- placement_group_name="placement_group1",
- )
- pg_mock.create_placement_group.assert_not_called()
- pg_mock.update_placement_group.assert_not_called()
- pg_mock.delete_placement_group.assert_called_with(
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- placement_group_name="placement_group1",
- )
- op_mock.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.PlacementGroupsApi")
-def test_pg_delete_op_fails(pg_api_init, op_api_init, module_args_absent):
- module_args = module_args_absent
- set_module_args(module_args)
-
- pg_mock = MagicMock()
- pg_mock.get_placement_group = MagicMock(
- return_value=purefusion.PlacementGroup(
- id="placement_group1_id",
- name="placement_group1",
- display_name="placement_group1_display_name",
- self_link="test_self_link",
- tenant=purefusion.TenantRef(
- id="tenant1_id",
- name="tenant1",
- kind="Tenant",
- self_link="some_self_link",
- ),
- tenant_space=purefusion.TenantSpaceRef(
- id="tenant_space1_id",
- name="tenant_space1",
- kind="TenantSpace",
- self_link="some_self_link",
- ),
- availability_zone=purefusion.AvailabilityZoneRef(
- id="availability_zone1_id",
- name="availability_zone1",
- kind="AvailabilityZone",
- self_link="some_self_link",
- ),
- placement_engine="heuristics",
- protocols=[],
- storage_service=purefusion.StorageServiceRef(
- id="storage_service1_id",
- name="storage_service",
- kind="StorageService",
- self_link="some_self_link",
- ),
- array=purefusion.ArrayRef(
- id="array1_id", name="array1", kind="Array", self_link="some_self_link"
- ),
- )
- )
- pg_mock.create_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_mock.update_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_mock.delete_placement_group = MagicMock(return_value=OperationMock(id="op1"))
- pg_api_init.return_value = pg_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(
- return_value=OperationMock(id="op1", success=False)
- )
- op_api_init.return_value = op_mock
-
- with pytest.raises(OperationException):
- fusion_pg.main()
-
- pg_mock.get_placement_group.assert_called_with(
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- placement_group_name="placement_group1",
- )
- pg_mock.create_placement_group.assert_not_called()
- pg_mock.update_placement_group.assert_not_called()
- pg_mock.delete_placement_group.assert_called_with(
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- placement_group_name="placement_group1",
- )
- op_mock.get_operation.assert_called_with("op1")
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.PlacementGroupsApi")
-def test_pg_present_not_changed(pg_api_init, op_api_init, module_args_present):
- module_args = module_args_present
- set_module_args(module_args)
-
- pg_mock = MagicMock()
- pg_mock.get_placement_group = MagicMock(
- return_value=purefusion.PlacementGroup(
- id="placement_group1_id",
- name="placement_group1",
- display_name="placement_group1_display_name",
- self_link="test_self_link",
- tenant=purefusion.TenantRef(
- id="tenant1_id",
- name="tenant1",
- kind="Tenant",
- self_link="some_self_link",
- ),
- tenant_space=purefusion.TenantSpaceRef(
- id="tenant_space1_id",
- name="tenant_space1",
- kind="TenantSpace",
- self_link="some_self_link",
- ),
- availability_zone=purefusion.AvailabilityZoneRef(
- id="availability_zone1_id",
- name="availability_zone1",
- kind="AvailabilityZone",
- self_link="some_self_link",
- ),
- placement_engine="heuristics",
- protocols=[],
- storage_service=purefusion.StorageServiceRef(
- id="storage_service1_id",
- name="storage_service",
- kind="StorageService",
- self_link="some_self_link",
- ),
- array=purefusion.ArrayRef(
- id="array1_id", name="array1", kind="Array", self_link="some_self_link"
- ),
- )
- )
- pg_mock.create_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_mock.update_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_mock.delete_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_api_init.return_value = pg_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(side_effect=NotImplementedError())
- op_api_init.return_value = op_mock
-
- with pytest.raises(AnsibleExitJson) as excinfo:
- fusion_pg.main()
- assert not excinfo.value.changed
-
- pg_mock.get_placement_group.assert_called_with(
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- placement_group_name="placement_group1",
- )
- pg_mock.create_placement_group.assert_not_called()
- pg_mock.update_placement_group.assert_not_called()
- pg_mock.delete_placement_group.assert_not_called()
- op_mock.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.PlacementGroupsApi")
-def test_pg_absent_not_changed(pg_api_init, op_api_init, module_args_absent):
- module_args = module_args_absent
- set_module_args(module_args)
-
- pg_mock = MagicMock()
- pg_mock.get_placement_group = MagicMock(side_effect=purefusion.rest.ApiException)
- pg_mock.create_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_mock.update_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_mock.delete_placement_group = MagicMock(side_effect=NotImplementedError())
- pg_api_init.return_value = pg_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(side_effect=NotImplementedError())
- op_api_init.return_value = op_mock
-
- with pytest.raises(AnsibleExitJson) as excinfo:
- fusion_pg.main()
- assert not excinfo.value.changed
-
- pg_mock.get_placement_group.assert_called_with(
- tenant_name="tenant1",
- tenant_space_name="tenant_space1",
- placement_group_name="placement_group1",
- )
- pg_mock.create_placement_group.assert_not_called()
- pg_mock.update_placement_group.assert_not_called()
- pg_mock.delete_placement_group.assert_not_called()
- op_mock.get_operation.assert_not_called()
-
-
-def throw_on_specific_patch(patches, failing_patch_idx, raised_exception, op_offset):
- patches = patches.copy()
-
- def _update_side_effect(patch, **kwargs):
- idx = patches.index(patch)
- if idx == failing_patch_idx:
- raise raised_exception()
- return OperationMock(id="op{0}".format(op_offset + idx))
-
- return _update_side_effect
diff --git a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_pp.py b/ansible_collections/purestorage/fusion/tests/functional/test_fusion_pp.py
deleted file mode 100644
index 359d4ca7e..000000000
--- a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_pp.py
+++ /dev/null
@@ -1,531 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# (c) 2023 Pure Storage, Inc.
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-from unittest.mock import MagicMock, patch
-
-import fusion as purefusion
-import pytest
-from ansible.module_utils import basic
-from ansible_collections.purestorage.fusion.plugins.module_utils.errors import (
- OperationException,
-)
-from ansible_collections.purestorage.fusion.plugins.modules import fusion_pp
-from ansible_collections.purestorage.fusion.tests.functional.utils import (
- AnsibleExitJson,
- AnsibleFailJson,
- OperationMock,
- FAKE_RESOURCE_ID,
- exit_json,
- fail_json,
- set_module_args,
-)
-from urllib3.exceptions import HTTPError
-
-# GLOBAL MOCKS
-fusion_pp.setup_fusion = MagicMock(return_value=purefusion.api_client.ApiClient())
-purefusion.api_client.ApiClient.call_api = MagicMock(
- side_effect=Exception("API call not mocked!")
-)
-basic.AnsibleModule.exit_json = exit_json
-basic.AnsibleModule.fail_json = fail_json
-
-
-@pytest.fixture
-def module_args_present():
- return {
- "name": "protection_policy1",
- "local_rpo": "1H43M",
- "local_retention": "2H",
- "state": "present",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
-
-
-@pytest.fixture
-def module_args_absent():
- return {
- "name": "protection_policy1",
- "state": "absent",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.ProtectionPoliciesApi")
-@pytest.mark.parametrize(
- ("module_args", "get_not_called"),
- [
- # 'name` is missing
- (
- {
- "local_rpo": 10,
- "local_retention": "10M",
- "state": "present",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- True,
- ),
- # 'local_rpo` is missing
- (
- {
- "name": "protection_policy1",
- "local_retention": "10M",
- "state": "present",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- False,
- ),
- # 'local_retention` is missing
- (
- {
- "name": "protection_policy1",
- "local_rpo": 10,
- "state": "present",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- False,
- ),
- # 'local_rpo` is invalid
- (
- {
- "name": "protection_policy1",
- "local_rpo": 10,
- "local_retention": "10yen",
- "state": "present",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- False,
- ),
- # 'local_retention` is invalid
- (
- {
- "name": "protection_policy1",
- "local_rpo": "10bread",
- "local_retention": "bre",
- "state": "present",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- False,
- ),
- # 'state` is invalid
- (
- {
- "name": "protection_policy1",
- "local_rpo": 10,
- "local_retention": 10,
- "state": "past",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- False,
- ),
- ],
-)
-def test_module_args_wrong(pp_api_init, op_api_init, module_args, get_not_called):
- set_module_args(module_args)
-
- pp_mock = MagicMock()
- pp_mock.get_protection_policy = MagicMock(side_effect=purefusion.rest.ApiException)
- pp_mock.create_protection_policy = MagicMock(side_effect=NotImplementedError())
- pp_mock.delete_protection_policy = MagicMock(side_effect=NotImplementedError())
- pp_api_init.return_value = pp_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(side_effect=purefusion.rest.ApiException)
- op_api_init.return_value = op_mock
-
- with pytest.raises(AnsibleFailJson):
- fusion_pp.main()
-
- if get_not_called:
- pp_mock.get_protection_policy.assert_not_called()
- if pp_mock.get_protection_policy.called:
- pp_mock.get_protection_policy.assert_called_with(
- protection_policy_name="protection_policy1"
- )
- pp_mock.create_protection_policy.assert_not_called()
- pp_mock.delete_protection_policy.assert_not_called()
- op_mock.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.ProtectionPoliciesApi")
-def test_pp_create_ok(pp_api_init, op_api_init, module_args_present):
- module_args = module_args_present
- module_args["display_name"] = "some_display_name"
-
- set_module_args(module_args)
-
- pp_mock = MagicMock()
- pp_mock.get_protection_policy = MagicMock(side_effect=purefusion.rest.ApiException)
- pp_mock.create_protection_policy = MagicMock(return_value=OperationMock("op1"))
- pp_mock.delete_protection_policy = MagicMock(side_effect=NotImplementedError())
- pp_api_init.return_value = pp_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(return_value=OperationMock("op1", success=True))
- op_api_init.return_value = op_mock
-
- with pytest.raises(AnsibleExitJson) as excinfo:
- fusion_pp.main()
- assert excinfo.value.changed
- assert excinfo.value.id == FAKE_RESOURCE_ID
-
- pp_mock.get_protection_policy.assert_called_with(
- protection_policy_name="protection_policy1"
- )
- pp_mock.create_protection_policy.assert_called_with(
- purefusion.ProtectionPolicyPost(
- name="protection_policy1",
- display_name="some_display_name",
- objectives=[
- purefusion.RPO(type="RPO", rpo="PT103M"),
- purefusion.Retention(type="Retention", after="PT120M"),
- ],
- )
- )
- pp_mock.delete_protection_policy.assert_not_called()
- op_mock.get_operation.assert_called_with("op1")
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.ProtectionPoliciesApi")
-def test_pp_create_without_display_name_ok(
- pp_api_init, op_api_init, module_args_present
-):
- module_args = module_args_present
- set_module_args(module_args)
-
- pp_mock = MagicMock()
- pp_mock.get_protection_policy = MagicMock(side_effect=purefusion.rest.ApiException)
- pp_mock.create_protection_policy = MagicMock(return_value=OperationMock("op1"))
- pp_mock.delete_protection_policy = MagicMock(side_effect=NotImplementedError())
- pp_api_init.return_value = pp_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(return_value=OperationMock("op1", success=True))
- op_api_init.return_value = op_mock
-
- with pytest.raises(AnsibleExitJson) as excinfo:
- fusion_pp.main()
- assert excinfo.value.changed
- assert excinfo.value.id == FAKE_RESOURCE_ID
-
- pp_mock.get_protection_policy.assert_called_with(
- protection_policy_name="protection_policy1"
- )
- pp_mock.create_protection_policy.assert_called_with(
- purefusion.ProtectionPolicyPost(
- name="protection_policy1",
- display_name="protection_policy1",
- objectives=[
- purefusion.RPO(type="RPO", rpo="PT103M"),
- purefusion.Retention(type="Retention", after="PT120M"),
- ],
- )
- )
- pp_mock.delete_protection_policy.assert_not_called()
- op_mock.get_operation.assert_called_with("op1")
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.ProtectionPoliciesApi")
-@pytest.mark.parametrize(
- ("raised_exception", "expected_exception"),
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_pp_create_exception(
- pp_api_init, op_api_init, raised_exception, expected_exception, module_args_present
-):
- module_args = module_args_present
- set_module_args(module_args)
-
- pp_mock = MagicMock()
- pp_mock.get_protection_policy = MagicMock(side_effect=purefusion.rest.ApiException)
- pp_mock.create_protection_policy = MagicMock(side_effect=raised_exception)
- pp_mock.delete_protection_policy = MagicMock(side_effect=NotImplementedError())
- pp_api_init.return_value = pp_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(side_effect=NotImplementedError())
- op_api_init.return_value = op_mock
-
- with pytest.raises(expected_exception):
- fusion_pp.main()
-
- pp_mock.get_protection_policy.assert_called_with(
- protection_policy_name="protection_policy1"
- )
- pp_mock.create_protection_policy.assert_called_with(
- purefusion.ProtectionPolicyPost(
- name="protection_policy1",
- display_name="protection_policy1",
- objectives=[
- purefusion.RPO(type="RPO", rpo="PT103M"),
- purefusion.Retention(type="Retention", after="PT120M"),
- ],
- )
- )
- pp_mock.delete_protection_policy.assert_not_called()
- op_mock.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.ProtectionPoliciesApi")
-def test_pp_create_op_fails(pp_api_init, op_api_init, module_args_present):
- module_args = module_args_present
- set_module_args(module_args)
-
- pp_mock = MagicMock()
- pp_mock.get_protection_policy = MagicMock(side_effect=purefusion.rest.ApiException)
- pp_mock.create_protection_policy = MagicMock(return_value=OperationMock(id="op1"))
- pp_mock.delete_protection_policy = MagicMock(side_effect=NotImplementedError())
- pp_api_init.return_value = pp_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(return_value=OperationMock("op1", success=False))
- op_api_init.return_value = op_mock
-
- with pytest.raises(OperationException):
- fusion_pp.main()
-
- pp_mock.get_protection_policy.assert_called_with(
- protection_policy_name="protection_policy1"
- )
- pp_mock.create_protection_policy.assert_called_with(
- purefusion.ProtectionPolicyPost(
- name="protection_policy1",
- display_name="protection_policy1",
- objectives=[
- purefusion.RPO(type="RPO", rpo="PT103M"),
- purefusion.Retention(type="Retention", after="PT120M"),
- ],
- )
- )
- pp_mock.delete_protection_policy.assert_not_called()
- op_mock.get_operation.assert_called_with("op1")
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.ProtectionPoliciesApi")
-def test_pp_delete_ok(pp_api_init, op_api_init, module_args_absent):
- module_args = module_args_absent
- set_module_args(module_args)
-
- pp_mock = MagicMock()
- pp_mock.get_protection_policy = MagicMock(
- return_value=purefusion.ProtectionPolicy(
- id="protection_policy1_id",
- name="protection_policy1",
- display_name="protection_policy1_display_name",
- self_link="test_self_link",
- objectives=[
- purefusion.RPO(type="RPO", rpo="PT103M"),
- purefusion.Retention(type="Retention", after="PT120M"),
- ],
- )
- )
- pp_mock.create_protection_policy = MagicMock(side_effect=NotImplementedError())
- pp_mock.delete_protection_policy = MagicMock(return_value=OperationMock(id="op1"))
- pp_api_init.return_value = pp_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(
- return_value=OperationMock(id="op1", success=True)
- )
- op_api_init.return_value = op_mock
-
- with pytest.raises(AnsibleExitJson) as excinfo:
- fusion_pp.main()
- assert excinfo.value.changed
-
- pp_mock.get_protection_policy.assert_called_with(
- protection_policy_name="protection_policy1"
- )
- pp_mock.create_protection_policy.assert_not_called()
- pp_mock.delete_protection_policy.assert_called_with(
- protection_policy_name="protection_policy1"
- )
- op_mock.get_operation.assert_called_with("op1")
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.ProtectionPoliciesApi")
-@pytest.mark.parametrize(
- ("raised_exception", "expected_exception"),
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_pp_delete_exception(
- pp_api_init, op_api_init, raised_exception, expected_exception, module_args_absent
-):
- module_args = module_args_absent
- set_module_args(module_args)
-
- pp_mock = MagicMock()
- pp_mock.get_protection_policy = MagicMock(
- return_value=purefusion.ProtectionPolicy(
- id="protection_policy1_id",
- name="protection_policy1",
- display_name="protection_policy1_display_name",
- self_link="test_self_link",
- objectives=[
- purefusion.RPO(type="RPO", rpo="PT103M"),
- purefusion.Retention(type="Retention", after="PT120M"),
- ],
- )
- )
- pp_mock.create_protection_policy = MagicMock(side_effect=NotImplementedError())
- pp_mock.delete_protection_policy = MagicMock(side_effect=raised_exception)
- pp_api_init.return_value = pp_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(side_effect=NotImplementedError())
- op_api_init.return_value = op_mock
-
- with pytest.raises(expected_exception):
- fusion_pp.main()
-
- pp_mock.get_protection_policy.assert_called_with(
- protection_policy_name="protection_policy1"
- )
- pp_mock.create_protection_policy.assert_not_called()
- pp_mock.delete_protection_policy.assert_called_with(
- protection_policy_name="protection_policy1"
- )
- op_mock.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.ProtectionPoliciesApi")
-def test_pp_delete_op_fails(pp_api_init, op_api_init, module_args_absent):
- module_args = module_args_absent
- set_module_args(module_args)
-
- pp_mock = MagicMock()
- pp_mock.get_protection_policy = MagicMock(
- return_value=purefusion.ProtectionPolicy(
- id="protection_policy1_id",
- name="protection_policy1",
- display_name="protection_policy1_display_name",
- self_link="test_self_link",
- objectives=[
- purefusion.RPO(type="RPO", rpo="PT103M"),
- purefusion.Retention(type="Retention", after="PT120M"),
- ],
- )
- )
- pp_mock.create_protection_policy = MagicMock(side_effect=NotImplementedError())
- pp_mock.delete_protection_policy = MagicMock(return_value=OperationMock(id="op1"))
- pp_api_init.return_value = pp_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(
- return_value=OperationMock(id="op1", success=False)
- )
- op_api_init.return_value = op_mock
-
- with pytest.raises(OperationException):
- fusion_pp.main()
-
- pp_mock.get_protection_policy.assert_called_with(
- protection_policy_name="protection_policy1"
- )
- pp_mock.create_protection_policy.assert_not_called()
- pp_mock.delete_protection_policy.assert_called_with(
- protection_policy_name="protection_policy1"
- )
- op_mock.get_operation.assert_called_with("op1")
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.ProtectionPoliciesApi")
-def test_pp_present_not_changed(pp_api_init, op_api_init):
- module_args = {
- "name": "protection_policy1",
- "display_name": "some_display_name",
- "local_rpo": "43M",
- "local_retention": "2H",
- "state": "present",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- pp_mock = MagicMock()
- pp_mock.get_protection_policy = MagicMock(
- return_value=purefusion.ProtectionPolicy(
- id="protection_policy1_id",
- name="protection_policy1",
- display_name="some_display_name",
- self_link="test_self_link",
- objectives=[
- purefusion.RPO(type="RPO", rpo="PT43M"),
- purefusion.Retention(type="Retention", after="PT120M"),
- ],
- )
- )
- pp_mock.create_protection_policy = MagicMock(side_effect=NotImplementedError())
- pp_mock.delete_protection_policy = MagicMock(side_effect=NotImplementedError())
- pp_api_init.return_value = pp_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(side_effect=NotImplementedError())
- op_api_init.return_value = op_mock
-
- with pytest.raises(AnsibleExitJson) as excinfo:
- fusion_pp.main()
- assert not excinfo.value.changed
-
- pp_mock.get_protection_policy.assert_called_with(
- protection_policy_name="protection_policy1"
- )
- pp_mock.create_protection_policy.assert_not_called()
- pp_mock.delete_protection_policy.assert_not_called()
- op_mock.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.ProtectionPoliciesApi")
-def test_pp_absent_not_changed(pp_api_init, op_api_init, module_args_absent):
- module_args = module_args_absent
- set_module_args(module_args)
-
- pp_mock = MagicMock()
- pp_mock.get_protection_policy = MagicMock(side_effect=purefusion.rest.ApiException)
- pp_mock.create_protection_policy = MagicMock(side_effect=NotImplementedError())
- pp_mock.delete_protection_policy = MagicMock(side_effect=NotImplementedError())
- pp_api_init.return_value = pp_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(side_effect=NotImplementedError())
- op_api_init.return_value = op_mock
-
- with pytest.raises(AnsibleExitJson) as excinfo:
- fusion_pp.main()
- assert not excinfo.value.changed
-
- pp_mock.get_protection_policy.assert_called_with(
- protection_policy_name="protection_policy1"
- )
- pp_mock.create_protection_policy.assert_not_called()
- pp_mock.delete_protection_policy.assert_not_called()
- op_mock.get_operation.assert_not_called()
diff --git a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_ra.py b/ansible_collections/purestorage/fusion/tests/functional/test_fusion_ra.py
deleted file mode 100644
index d8cac74a5..000000000
--- a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_ra.py
+++ /dev/null
@@ -1,815 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# (c) 2023 Pure Storage, Inc.
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-from unittest.mock import MagicMock, patch
-
-import fusion as purefusion
-import pytest
-from ansible.module_utils import basic
-from ansible_collections.purestorage.fusion.plugins.module_utils.errors import (
- OperationException,
-)
-from ansible_collections.purestorage.fusion.plugins.modules import fusion_ra
-from ansible_collections.purestorage.fusion.tests.functional.utils import (
- AnsibleExitJson,
- AnsibleFailJson,
- OperationMock,
- FAKE_RESOURCE_ID,
- exit_json,
- fail_json,
- set_module_args,
-)
-from urllib3.exceptions import HTTPError
-
-# GLOBAL MOCKS
-fusion_ra.setup_fusion = MagicMock(return_value=purefusion.api_client.ApiClient())
-purefusion.api_client.ApiClient.call_api = MagicMock(
- side_effect=Exception("API call not mocked!")
-)
-basic.AnsibleModule.exit_json = exit_json
-basic.AnsibleModule.fail_json = fail_json
-
-
-@pytest.fixture
-def module_args_present():
- return {
- "state": "present",
- "role": "az-admin",
- "user": "user1",
- "scope": "organization",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
-
-
-@pytest.fixture
-def module_args_absent():
- return {
- "state": "absent",
- "role": "az-admin",
- "user": "user1",
- "scope": "organization",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.IdentityManagerApi")
-@patch("fusion.RoleAssignmentsApi")
-@pytest.mark.parametrize(
- "module_args",
- [
- # 'role` is missing
- {
- "state": "present",
- "tenant": "tenant1",
- "tenant_space": "tenant_space1",
- "user": "user1",
- "scope": "tenant_space",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- # 'user` is missing
- {
- "state": "present",
- "role": "tenant-space-admin",
- "tenant": "tenant1",
- "tenant_space": "tenant_space1",
- "scope": "tenant_space",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- # 'scope` is invalid
- {
- "state": "present",
- "role": "tenant-space-admin",
- "tenant": "tenant1",
- "tenant_space": "tenant_space1",
- "user": "user1",
- "scope": "bikini_bottom",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- # 'state` is invalid
- {
- "state": "past",
- "role": "tenant-space-admin",
- "tenant": "tenant1",
- "tenant_space": "tenant_space1",
- "user": "user1",
- "scope": "tenant_space",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- # 'tenant` is missing #1
- {
- "state": "present",
- "role": "tenant-space-admin",
- "tenant_space": "tenant_space1",
- "user": "user1",
- "scope": "tenant_space",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- # 'tenant` is missing #2
- {
- "state": "present",
- "role": "tenant-space-admin",
- "tenant_space": "tenant_space1",
- "user": "user1",
- "scope": "tenant",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- # 'tenant_space` is missing
- {
- "state": "present",
- "role": "tenant-space-admin",
- "tenant": "tenant1",
- "user": "user1",
- "scope": "tenant_space",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- # both 'principal` and `user` are specified
- {
- "state": "present",
- "role": "tenant-space-admin",
- "tenant": "tenant1",
- "user": "user1",
- "principal": "123456",
- "scope": "tenant_space",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- # both 'principal` and `api_client_key` are specified
- {
- "state": "present",
- "role": "tenant-space-admin",
- "tenant": "tenant1",
- "api_client_key": "pure1:apikey:asdf123XYZ",
- "principal": "123456",
- "scope": "tenant_space",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- ],
-)
-def test_module_args_wrong(ra_api_init, im_api_init, op_api_init, module_args):
- set_module_args(module_args)
-
- ra_mock = MagicMock()
- ra_mock.list_role_assignments = MagicMock(side_effect=NotImplementedError())
- ra_mock.create_role_assignment = MagicMock(side_effect=NotImplementedError())
- ra_mock.delete_role_assignment = MagicMock(side_effect=NotImplementedError())
- ra_api_init.return_value = ra_mock
-
- im_mock = MagicMock()
- im_mock.list_users = MagicMock(
- return_value=[
- purefusion.User(
- id="principal1",
- self_link="test_value",
- name="user1",
- email="example@example.com",
- )
- ]
- )
- im_api_init.return_value = im_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(side_effect=purefusion.rest.ApiException)
- op_api_init.return_value = op_mock
-
- with pytest.raises(AnsibleFailJson):
- fusion_ra.main()
-
- ra_mock.list_role_assignments.assert_not_called()
- ra_mock.create_role_assignment.assert_not_called()
- ra_mock.delete_role_assignment.assert_not_called()
- op_mock.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.IdentityManagerApi")
-@patch("fusion.RoleAssignmentsApi")
-def test_ra_user_does_not_exist(
- ra_api_init, im_api_init, op_api_init, module_args_present
-):
- module_args = module_args_present
- set_module_args(module_args)
-
- ra_mock = MagicMock()
- ra_mock.list_role_assignments = MagicMock(side_effect=purefusion.rest.ApiException)
- ra_mock.create_role_assignment = MagicMock(side_effect=NotImplementedError())
- ra_mock.delete_role_assignment = MagicMock(side_effect=NotImplementedError())
- ra_api_init.return_value = ra_mock
-
- im_mock = MagicMock()
- im_mock.list_users = MagicMock(return_value=[])
- im_api_init.return_value = im_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(side_effect=purefusion.rest.ApiException)
- op_api_init.return_value = op_mock
-
- with pytest.raises(AnsibleFailJson):
- fusion_ra.main()
-
- ra_mock.list_role_assignments.assert_not_called()
- ra_mock.create_role_assignment.assert_not_called()
- ra_mock.delete_role_assignment.assert_not_called()
- op_mock.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.IdentityManagerApi")
-@patch("fusion.RoleAssignmentsApi")
-@pytest.mark.parametrize(
- "args_and_scope",
- [
- # organization scope
- (
- {
- "state": "present",
- "role": "az-admin",
- "user": "user1",
- "scope": "organization",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- "/",
- ),
- # tenant scope
- (
- {
- "state": "present",
- "role": "tenant-admin",
- "user": "user1",
- "scope": "tenant",
- "tenant": "tenant1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- "/tenants/tenant1",
- ),
- # tenant space scope
- (
- {
- "state": "present",
- "role": "tenant-space-admin",
- "user": "user1",
- "scope": "tenant_space",
- "tenant": "tenant1",
- "tenant_space": "tenant_space1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- "/tenants/tenant1/tenant-spaces/tenant_space1",
- ),
- # principal instead of user
- (
- {
- "state": "present",
- "role": "az-admin",
- "principal": "principal1",
- "scope": "organization",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- "/",
- ),
- # api_client_key instead of user
- (
- {
- "state": "present",
- "role": "az-admin",
- "api_client_key": "pure1:apikey:asdf123XYZ",
- "scope": "organization",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- "/",
- ),
- ],
-)
-def test_ra_create_ok(ra_api_init, im_api_init, op_api_init, args_and_scope):
- module_args = args_and_scope[0]
- ra_scope = args_and_scope[1]
- set_module_args(module_args)
-
- ra_mock = MagicMock()
- ra_mock.list_role_assignments = MagicMock(return_value=[])
- ra_mock.create_role_assignment = MagicMock(return_value=OperationMock("op1"))
- ra_mock.delete_role_assignment = MagicMock(side_effect=NotImplementedError())
- ra_api_init.return_value = ra_mock
-
- im_mock = MagicMock()
- im_mock.list_users = MagicMock(
- return_value=[
- purefusion.User(
- id="principal1",
- self_link="test_value",
- name="user1",
- email="example@example.com",
- )
- ]
- )
- im_api_init.return_value = im_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(return_value=OperationMock("op1", success=True))
- op_api_init.return_value = op_mock
-
- with pytest.raises(AnsibleExitJson) as excinfo:
- fusion_ra.main()
- assert excinfo.value.changed
- assert excinfo.value.id == FAKE_RESOURCE_ID
-
- ra_mock.list_role_assignments.assert_called_with(
- role_name=module_args["role"], principal="principal1"
- )
- ra_mock.create_role_assignment.assert_called_with(
- purefusion.RoleAssignmentPost(scope=ra_scope, principal="principal1"),
- role_name=module_args["role"],
- )
- ra_mock.delete_role_assignment.assert_not_called()
- op_mock.get_operation.assert_called_with("op1")
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.IdentityManagerApi")
-@patch("fusion.RoleAssignmentsApi")
-@pytest.mark.parametrize(
- ("raised_exception", "expected_exception"),
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_ra_create_exception(
- ra_api_init,
- im_api_init,
- op_api_init,
- raised_exception,
- expected_exception,
- module_args_present,
-):
- module_args = module_args_present
- set_module_args(module_args)
-
- ra_mock = MagicMock()
- ra_mock.list_role_assignments = MagicMock(return_value=[])
- ra_mock.create_role_assignment = MagicMock(side_effect=raised_exception)
- ra_mock.delete_role_assignment = MagicMock(side_effect=NotImplementedError())
- ra_api_init.return_value = ra_mock
-
- im_mock = MagicMock()
- im_mock.list_users = MagicMock(
- return_value=[
- purefusion.User(
- id="principal1",
- self_link="test_value",
- name="user1",
- email="example@example.com",
- )
- ]
- )
- im_api_init.return_value = im_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(side_effect=NotImplementedError())
- op_api_init.return_value = op_mock
-
- with pytest.raises(expected_exception):
- fusion_ra.main()
-
- ra_mock.list_role_assignments.assert_called_with(
- role_name="az-admin", principal="principal1"
- )
- ra_mock.create_role_assignment.assert_called_with(
- purefusion.RoleAssignmentPost(scope="/", principal="principal1"),
- role_name="az-admin",
- )
- ra_mock.delete_role_assignment.assert_not_called()
- op_mock.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.IdentityManagerApi")
-@patch("fusion.RoleAssignmentsApi")
-def test_ra_create_op_fails(ra_api_init, im_api_init, op_api_init, module_args_present):
- module_args = module_args_present
- set_module_args(module_args)
-
- ra_mock = MagicMock()
- ra_mock.list_role_assignments = MagicMock(return_value=[])
- ra_mock.create_role_assignment = MagicMock(return_value=OperationMock(id="op1"))
- ra_mock.delete_role_assignment = MagicMock(side_effect=NotImplementedError())
- ra_api_init.return_value = ra_mock
-
- im_mock = MagicMock()
- im_mock.list_users = MagicMock(
- return_value=[
- purefusion.User(
- id="principal1",
- self_link="test_value",
- name="user1",
- email="example@example.com",
- )
- ]
- )
- im_api_init.return_value = im_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(return_value=OperationMock("op1", success=False))
- op_api_init.return_value = op_mock
-
- with pytest.raises(OperationException):
- fusion_ra.main()
-
- ra_mock.list_role_assignments.assert_called_with(
- role_name="az-admin", principal="principal1"
- )
- ra_mock.create_role_assignment.assert_called_with(
- purefusion.RoleAssignmentPost(scope="/", principal="principal1"),
- role_name="az-admin",
- )
- ra_mock.delete_role_assignment.assert_not_called()
- op_mock.get_operation.assert_called_with("op1")
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.IdentityManagerApi")
-@patch("fusion.RoleAssignmentsApi")
-@pytest.mark.parametrize(
- "args_and_scope",
- [
- # organization scope
- (
- {
- "state": "absent",
- "role": "az-admin",
- "user": "user1",
- "scope": "organization",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- purefusion.ResourceMetadata(
- id="org_id",
- name="org",
- self_link="/",
- ),
- ),
- # tenant scope
- (
- {
- "state": "absent",
- "role": "tenant-admin",
- "user": "user1",
- "scope": "tenant",
- "tenant": "tenant1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- purefusion.ResourceMetadata(
- id="tenant1_id",
- name="tenant1",
- self_link="/tenants/tenant1",
- ),
- ),
- # tenant space scope
- (
- {
- "state": "absent",
- "role": "tenant-space-admin",
- "user": "user1",
- "scope": "tenant_space",
- "tenant": "tenant1",
- "tenant_space": "tenant_space1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- purefusion.ResourceMetadata(
- id="tenant_space1_id",
- name="tenant_space1",
- self_link="/tenants/tenant1/tenant-spaces/tenant_space1",
- ),
- ),
- ],
-)
-def test_ra_delete_ok(ra_api_init, im_api_init, op_api_init, args_and_scope):
- module_args = args_and_scope[0]
- ra_scope = args_and_scope[1]
- set_module_args(module_args)
-
- ra_mock = MagicMock()
- ra_mock.list_role_assignments = MagicMock(
- return_value=[
- purefusion.RoleAssignment(
- id="ra1_id",
- name="ra1",
- self_link="test_value",
- role=purefusion.RoleRef(
- id="role1_id",
- name=module_args["role"],
- kind="Role",
- self_link="test_value",
- ),
- scope=ra_scope,
- principal="principal1",
- )
- ]
- )
- ra_mock.create_role_assignment = MagicMock(side_effect=NotImplementedError())
- ra_mock.delete_role_assignment = MagicMock(return_value=OperationMock(id="op1"))
- ra_api_init.return_value = ra_mock
-
- im_mock = MagicMock()
- im_mock.list_users = MagicMock(
- return_value=[
- purefusion.User(
- id="principal1",
- self_link="test_value",
- name="user1",
- email="example@example.com",
- )
- ]
- )
- im_api_init.return_value = im_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(
- return_value=OperationMock(id="op1", success=True)
- )
- op_api_init.return_value = op_mock
-
- with pytest.raises(AnsibleExitJson) as excinfo:
- fusion_ra.main()
- assert excinfo.value.changed
-
- ra_mock.list_role_assignments.assert_called_with(
- role_name=module_args["role"], principal="principal1"
- )
- ra_mock.create_role_assignment.assert_not_called()
- ra_mock.delete_role_assignment.assert_called_with(
- role_name=module_args["role"], role_assignment_name="ra1"
- )
- op_mock.get_operation.assert_called_with("op1")
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.IdentityManagerApi")
-@patch("fusion.RoleAssignmentsApi")
-@pytest.mark.parametrize(
- ("raised_exception", "expected_exception"),
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_ra_delete_exception(
- ra_api_init,
- im_api_init,
- op_api_init,
- raised_exception,
- expected_exception,
- module_args_absent,
-):
- module_args = module_args_absent
- set_module_args(module_args)
-
- ra_mock = MagicMock()
- ra_mock.list_role_assignments = MagicMock(
- return_value=[
- purefusion.RoleAssignment(
- id="ra1_id",
- name="ra1",
- self_link="test_value",
- role=purefusion.RoleRef(
- id="role1_id",
- name=module_args["role"],
- kind="Role",
- self_link="test_value",
- ),
- scope=purefusion.ResourceMetadata(
- id="org_id",
- name="org",
- self_link="/",
- ),
- principal="principal1",
- )
- ]
- )
- ra_mock.create_role_assignment = MagicMock(side_effect=NotImplementedError())
- ra_mock.delete_role_assignment = MagicMock(side_effect=raised_exception)
- ra_api_init.return_value = ra_mock
-
- im_mock = MagicMock()
- im_mock.list_users = MagicMock(
- return_value=[
- purefusion.User(
- id="principal1",
- self_link="test_value",
- name="user1",
- email="example@example.com",
- )
- ]
- )
- im_api_init.return_value = im_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(side_effect=NotImplementedError())
- op_api_init.return_value = op_mock
-
- with pytest.raises(expected_exception):
- fusion_ra.main()
-
- ra_mock.list_role_assignments.assert_called_with(
- role_name=module_args["role"], principal="principal1"
- )
- ra_mock.create_role_assignment.assert_not_called()
- ra_mock.delete_role_assignment.assert_called_with(
- role_name=module_args["role"], role_assignment_name="ra1"
- )
- op_mock.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.IdentityManagerApi")
-@patch("fusion.RoleAssignmentsApi")
-def test_ra_delete_op_fails(ra_api_init, im_api_init, op_api_init, module_args_absent):
- module_args = module_args_absent
- set_module_args(module_args)
-
- ra_mock = MagicMock()
- ra_mock.list_role_assignments = MagicMock(
- return_value=[
- purefusion.RoleAssignment(
- id="ra1_id",
- name="ra1",
- self_link="test_value",
- role=purefusion.RoleRef(
- id="role1_id",
- name=module_args["role"],
- kind="Role",
- self_link="test_value",
- ),
- scope=purefusion.ResourceMetadata(
- id="org_id",
- name="org",
- self_link="/",
- ),
- principal="principal1",
- )
- ]
- )
- ra_mock.create_role_assignment = MagicMock(side_effect=NotImplementedError())
- ra_mock.delete_role_assignment = MagicMock(return_value=OperationMock(id="op1"))
- ra_api_init.return_value = ra_mock
-
- im_mock = MagicMock()
- im_mock.list_users = MagicMock(
- return_value=[
- purefusion.User(
- id="principal1",
- self_link="test_value",
- name="user1",
- email="example@example.com",
- )
- ]
- )
- im_api_init.return_value = im_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(
- return_value=OperationMock(id="op1", success=False)
- )
- op_api_init.return_value = op_mock
-
- with pytest.raises(OperationException):
- fusion_ra.main()
-
- ra_mock.list_role_assignments.assert_called_with(
- role_name=module_args["role"], principal="principal1"
- )
- ra_mock.create_role_assignment.assert_not_called()
- ra_mock.delete_role_assignment.assert_called_with(
- role_name=module_args["role"], role_assignment_name="ra1"
- )
- op_mock.get_operation.assert_called_with("op1")
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.IdentityManagerApi")
-@patch("fusion.RoleAssignmentsApi")
-def test_ra_present_not_changed(
- ra_api_init, im_api_init, op_api_init, module_args_present
-):
- module_args = module_args_present
- set_module_args(module_args)
-
- ra_mock = MagicMock()
- ra_mock.list_role_assignments = MagicMock(
- return_value=[
- purefusion.RoleAssignment(
- id="ra1_id",
- name="ra1",
- self_link="test_value",
- role=purefusion.RoleRef(
- id="role1_id",
- name=module_args["role"],
- kind="Role",
- self_link="test_value",
- ),
- scope=purefusion.ResourceMetadata(
- id="org_id",
- name="org",
- self_link="/",
- ),
- principal="principal1",
- )
- ]
- )
- ra_mock.create_role_assignment = MagicMock(side_effect=NotImplementedError())
- ra_mock.delete_role_assignment = MagicMock(side_effect=NotImplementedError())
- ra_api_init.return_value = ra_mock
-
- im_mock = MagicMock()
- im_mock.list_users = MagicMock(
- return_value=[
- purefusion.User(
- id="principal1",
- self_link="test_value",
- name="user1",
- email="example@example.com",
- )
- ]
- )
- im_api_init.return_value = im_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(side_effect=NotImplementedError())
- op_api_init.return_value = op_mock
-
- with pytest.raises(AnsibleExitJson) as excinfo:
- fusion_ra.main()
- assert not excinfo.value.changed
-
- ra_mock.list_role_assignments.assert_called_with(
- role_name=module_args["role"], principal="principal1"
- )
- ra_mock.create_role_assignment.assert_not_called()
- ra_mock.delete_role_assignment.assert_not_called()
- op_mock.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.IdentityManagerApi")
-@patch("fusion.RoleAssignmentsApi")
-def test_ra_absent_not_changed(
- ra_api_init, im_api_init, op_api_init, module_args_absent
-):
- module_args = module_args_absent
- set_module_args(module_args)
-
- ra_mock = MagicMock()
- ra_mock.list_role_assignments = MagicMock(return_value=[])
- ra_mock.create_role_assignment = MagicMock(side_effect=NotImplementedError())
- ra_mock.delete_role_assignment = MagicMock(side_effect=NotImplementedError())
- ra_api_init.return_value = ra_mock
-
- im_mock = MagicMock()
- im_mock.list_users = MagicMock(
- return_value=[
- purefusion.User(
- id="principal1",
- self_link="test_value",
- name="user1",
- email="example@example.com",
- )
- ]
- )
- im_api_init.return_value = im_mock
-
- op_mock = MagicMock()
- op_mock.get_operation = MagicMock(side_effect=NotImplementedError())
- op_api_init.return_value = op_mock
-
- with pytest.raises(AnsibleExitJson) as excinfo:
- fusion_ra.main()
- assert not excinfo.value.changed
-
- ra_mock.list_role_assignments.assert_called_with(
- role_name=module_args["role"], principal="principal1"
- )
- ra_mock.create_role_assignment.assert_not_called()
- ra_mock.delete_role_assignment.assert_not_called()
- op_mock.get_operation.assert_not_called()
diff --git a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_region.py b/ansible_collections/purestorage/fusion/tests/functional/test_fusion_region.py
deleted file mode 100644
index 42d14d56e..000000000
--- a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_region.py
+++ /dev/null
@@ -1,802 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# (c) 2023, Andrej Pajtas (apajtas@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-from unittest.mock import MagicMock, patch
-
-import fusion as purefusion
-import pytest
-from ansible.module_utils import basic
-from ansible_collections.purestorage.fusion.plugins.module_utils.errors import (
- OperationException,
-)
-from ansible_collections.purestorage.fusion.plugins.modules import fusion_region
-from ansible_collections.purestorage.fusion.tests.functional.utils import (
- AnsibleExitJson,
- AnsibleFailJson,
- FailedOperationMock,
- OperationMock,
- SuccessfulOperationMock,
- FAKE_RESOURCE_ID,
- exit_json,
- fail_json,
- set_module_args,
-)
-from urllib3.exceptions import HTTPError
-
-# GLOBAL MOCKS
-fusion_region.setup_fusion = MagicMock(return_value=purefusion.api_client.ApiClient())
-purefusion.api_client.ApiClient.call_api = MagicMock(
- side_effect=Exception("API call not mocked!")
-)
-basic.AnsibleModule.exit_json = exit_json
-basic.AnsibleModule.fail_json = fail_json
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.RegionsApi")
-@pytest.mark.parametrize(
- "module_args",
- [
- # required parameter 'name` is missing
- {
- "state": "present",
- "display_name": "Region 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- # unknown parameter 'extra' is provided
- {
- "state": "present",
- "name": "region1",
- "display_name": "Region 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- "extra": "value",
- },
- # parameter 'state` has incorrect value
- {
- "state": "cool",
- "name": "region1",
- "display_name": "Region 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- ],
-)
-def test_module_fails_on_wrong_parameters(m_region_api, m_op_api, module_args):
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_region = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_region = MagicMock(return_value=OperationMock(1))
- api_obj.update_region = MagicMock(return_value=OperationMock(2))
- api_obj.delete_region = MagicMock(return_value=OperationMock(3))
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
- m_region_api.return_value = api_obj
-
- # run module
- with pytest.raises(AnsibleFailJson):
- fusion_region.main()
-
- # check api was not called at all
- api_obj.get_region.assert_not_called()
- api_obj.create_region.assert_not_called()
- api_obj.update_region.assert_not_called()
- api_obj.delete_region.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.RegionsApi")
-def test_region_create(m_region_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "region1",
- "display_name": "Region 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_region = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_region = MagicMock(return_value=OperationMock(1))
- api_obj.update_region = MagicMock(return_value=OperationMock(2))
- api_obj.delete_region = MagicMock(return_value=OperationMock(3))
- m_region_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_region.main()
-
- assert exc.value.changed
- assert exc.value.id == FAKE_RESOURCE_ID
-
- # check api was called correctly
- api_obj.get_region.assert_called_once_with(region_name=module_args["name"])
- api_obj.create_region.assert_called_once_with(
- purefusion.RegionPost(
- name=module_args["name"], display_name=module_args["display_name"]
- )
- )
- api_obj.update_region.assert_not_called()
- api_obj.delete_region.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.RegionsApi")
-def test_region_create_without_display_name(m_region_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "region1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_region = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_region = MagicMock(return_value=OperationMock(1))
- api_obj.update_region = MagicMock(return_value=OperationMock(2))
- api_obj.delete_region = MagicMock(return_value=OperationMock(3))
- m_region_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_region.main()
-
- assert exc.value.changed
- assert exc.value.id == FAKE_RESOURCE_ID
-
- # check api was called correctly
- api_obj.get_region.assert_called_once_with(region_name=module_args["name"])
- api_obj.create_region.assert_called_once_with(
- purefusion.RegionPost(
- name=module_args["name"], display_name=module_args["name"]
- )
- )
- api_obj.update_region.assert_not_called()
- api_obj.delete_region.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.RegionsApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_region_create_exception(m_region_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "present",
- "name": "region1",
- "display_name": "Region 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_region = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_region = MagicMock(side_effect=exec_original)
- api_obj.update_region = MagicMock(return_value=OperationMock(2))
- api_obj.delete_region = MagicMock(return_value=OperationMock(3))
- m_region_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_region.main()
-
- # check api was called correctly
- api_obj.get_region.assert_called_once_with(region_name=module_args["name"])
- api_obj.create_region.assert_called_once_with(
- purefusion.RegionPost(
- name=module_args["name"], display_name=module_args["display_name"]
- )
- )
- api_obj.update_region.assert_not_called()
- api_obj.delete_region.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.RegionsApi")
-def test_region_create_op_fails(m_region_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "region1",
- "display_name": "Region 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_region = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_region = MagicMock(return_value=OperationMock(1))
- api_obj.update_region = MagicMock(return_value=OperationMock(2))
- api_obj.delete_region = MagicMock(return_value=OperationMock(3))
- m_region_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(OperationException):
- fusion_region.main()
-
- # check api was called correctly
- api_obj.get_region.assert_called_once_with(region_name=module_args["name"])
- api_obj.create_region.assert_called_once_with(
- purefusion.RegionPost(
- name=module_args["name"], display_name=module_args["display_name"]
- )
- )
- api_obj.update_region.assert_not_called()
- api_obj.delete_region.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.RegionsApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, OperationException),
- ],
-)
-def test_region_create_op_exception(m_region_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "present",
- "name": "region1",
- "display_name": "Region 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_region = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_region = MagicMock(return_value=OperationMock(1))
- api_obj.update_region = MagicMock(return_value=OperationMock(2))
- api_obj.delete_region = MagicMock(return_value=OperationMock(3))
- m_region_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(side_effect=exec_original)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_region.main()
-
- # check api was called correctly
- api_obj.get_region.assert_called_once_with(region_name=module_args["name"])
- api_obj.create_region.assert_called_once_with(
- purefusion.RegionPost(
- name=module_args["name"], display_name=module_args["display_name"]
- )
- )
- api_obj.update_region.assert_not_called()
- api_obj.delete_region.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.RegionsApi")
-def test_region_update(m_region_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "region1",
- "display_name": "Region 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_region = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": None,
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_region = MagicMock(return_value=purefusion.Region(**current_region))
- api_obj.create_region = MagicMock(return_value=OperationMock(1))
- api_obj.update_region = MagicMock(return_value=OperationMock(2))
- api_obj.delete_region = MagicMock(return_value=OperationMock(3))
- m_region_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_region.main()
-
- assert exc.value.changed
- assert exc.value.id == current_region["id"]
-
- # check api was called correctly
- api_obj.get_region.assert_called_once_with(region_name=module_args["name"])
- api_obj.create_region.assert_not_called()
- api_obj.update_region.assert_called_once_with(
- purefusion.RegionPatch(
- display_name=purefusion.NullableString(module_args["display_name"])
- ),
- region_name=module_args["name"],
- )
- api_obj.delete_region.assert_not_called()
- op_obj.get_operation.assert_called_once_with(2)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.RegionsApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_region_update_exception(m_region_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "present",
- "name": "region1",
- "display_name": "Region 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_region = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": None,
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_region = MagicMock(return_value=purefusion.Region(**current_region))
- api_obj.create_region = MagicMock(return_value=OperationMock(1))
- api_obj.update_region = MagicMock(side_effect=exec_original)
- api_obj.delete_region = MagicMock(return_value=OperationMock(3))
- m_region_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_region.main()
-
- # check api was called correctly
- api_obj.get_region.assert_called_once_with(region_name=module_args["name"])
- api_obj.create_region.assert_not_called()
- api_obj.update_region.assert_called_once_with(
- purefusion.RegionPatch(
- display_name=purefusion.NullableString(module_args["display_name"])
- ),
- region_name=module_args["name"],
- )
- api_obj.delete_region.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.RegionsApi")
-def test_region_update_op_fails(m_region_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "region1",
- "display_name": "Region 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_region = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": None,
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_region = MagicMock(return_value=purefusion.Region(**current_region))
- api_obj.create_region = MagicMock(return_value=OperationMock(1))
- api_obj.update_region = MagicMock(return_value=OperationMock(2))
- api_obj.delete_region = MagicMock(return_value=OperationMock(3))
- m_region_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(OperationException):
- fusion_region.main()
-
- # check api was called correctly
- api_obj.get_region.assert_called_once_with(region_name=module_args["name"])
- api_obj.create_region.assert_not_called()
- api_obj.update_region.assert_called_once_with(
- purefusion.RegionPatch(
- display_name=purefusion.NullableString(module_args["display_name"])
- ),
- region_name=module_args["name"],
- )
- api_obj.delete_region.assert_not_called()
- op_obj.get_operation.assert_called_once_with(2)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.RegionsApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, OperationException),
- ],
-)
-def test_region_update_op_exception(m_region_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "present",
- "name": "region1",
- "display_name": "Region 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_region = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": None,
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_region = MagicMock(return_value=purefusion.Region(**current_region))
- api_obj.create_region = MagicMock(return_value=OperationMock(1))
- api_obj.update_region = MagicMock(return_value=OperationMock(2))
- api_obj.delete_region = MagicMock(return_value=OperationMock(3))
- m_region_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(side_effect=exec_original)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_region.main()
-
- # check api was called correctly
- api_obj.get_region.assert_called_once_with(region_name=module_args["name"])
- api_obj.create_region.assert_not_called()
- api_obj.update_region.assert_called_once_with(
- purefusion.RegionPatch(
- display_name=purefusion.NullableString(module_args["display_name"])
- ),
- region_name=module_args["name"],
- )
- api_obj.delete_region.assert_not_called()
- op_obj.get_operation.assert_called_once_with(2)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.RegionsApi")
-def test_region_present_not_changed(m_region_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "region1",
- "display_name": "Region 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_region = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": module_args["display_name"],
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_region = MagicMock(return_value=purefusion.Region(**current_region))
- api_obj.create_region = MagicMock(return_value=OperationMock(1))
- api_obj.update_region = MagicMock(return_value=OperationMock(2))
- api_obj.delete_region = MagicMock(return_value=OperationMock(3))
- m_region_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_region.main()
-
- assert not exc.value.changed
-
- # check api was called correctly
- api_obj.get_region.assert_called_once_with(region_name=module_args["name"])
- api_obj.create_region.assert_not_called()
- api_obj.update_region.assert_not_called()
- api_obj.delete_region.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.RegionsApi")
-def test_region_absent_not_changed(m_region_api, m_op_api):
- module_args = {
- "state": "absent",
- "name": "region1",
- "display_name": "Region 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_region = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_region = MagicMock(return_value=OperationMock(1))
- api_obj.update_region = MagicMock(return_value=OperationMock(2))
- api_obj.delete_region = MagicMock(return_value=OperationMock(3))
- m_region_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_region.main()
-
- assert not exc.value.changed
-
- # check api was called correctly
- api_obj.get_region.assert_called_once_with(region_name=module_args["name"])
- api_obj.create_region.assert_not_called()
- api_obj.update_region.assert_not_called()
- api_obj.delete_region.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.RegionsApi")
-def test_region_delete(m_region_api, m_op_api):
- module_args = {
- "state": "absent",
- "name": "region1",
- "display_name": "Region 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_region = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": "different", # display_name doesn't match but UPDATE shouldn't be called
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_region = MagicMock(return_value=purefusion.Region(**current_region))
- api_obj.create_region = MagicMock(return_value=OperationMock(1))
- api_obj.update_region = MagicMock(return_value=OperationMock(2))
- api_obj.delete_region = MagicMock(return_value=OperationMock(3))
- m_region_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_region.main()
-
- assert exc.value.changed
-
- # check api was called correctly
- api_obj.get_region.assert_called_once_with(region_name=module_args["name"])
- api_obj.create_region.assert_not_called()
- api_obj.update_region.assert_not_called()
- api_obj.delete_region.assert_called_once_with(region_name=module_args["name"])
- op_obj.get_operation.assert_called_once_with(3)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.RegionsApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_region_delete_exception(m_region_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "absent",
- "name": "region1",
- "display_name": "Region 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_region = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": "different", # display_name doesn't match but UPDATE shouldn't be called
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_region = MagicMock(return_value=purefusion.Region(**current_region))
- api_obj.create_region = MagicMock(return_value=OperationMock(1))
- api_obj.update_region = MagicMock(return_value=OperationMock(2))
- api_obj.delete_region = MagicMock(side_effect=exec_original)
- m_region_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_region.main()
-
- # check api was called correctly
- api_obj.get_region.assert_called_once_with(region_name=module_args["name"])
- api_obj.create_region.assert_not_called()
- api_obj.update_region.assert_not_called()
- api_obj.delete_region.assert_called_once_with(region_name=module_args["name"])
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.RegionsApi")
-def test_region_delete_op_fails(m_region_api, m_op_api):
- module_args = {
- "state": "absent",
- "name": "region1",
- "display_name": "Region 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_region = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": "different", # display_name doesn't match but UPDATE shouldn't be called
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_region = MagicMock(return_value=purefusion.Region(**current_region))
- api_obj.create_region = MagicMock(return_value=OperationMock(1))
- api_obj.update_region = MagicMock(return_value=OperationMock(2))
- api_obj.delete_region = MagicMock(return_value=OperationMock(3))
- m_region_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(OperationException):
- fusion_region.main()
-
- # check api was called correctly
- api_obj.get_region.assert_called_once_with(region_name=module_args["name"])
- api_obj.create_region.assert_not_called()
- api_obj.update_region.assert_not_called()
- api_obj.delete_region.assert_called_once_with(region_name=module_args["name"])
- op_obj.get_operation.assert_called_once_with(3)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.RegionsApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, OperationException),
- ],
-)
-def test_region_delete_op_exception(m_region_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "absent",
- "name": "region1",
- "display_name": "Region 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_region = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": "different", # display_name doesn't match but UPDATE shouldn't be called
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_region = MagicMock(return_value=purefusion.Region(**current_region))
- api_obj.create_region = MagicMock(return_value=OperationMock(1))
- api_obj.update_region = MagicMock(return_value=OperationMock(2))
- api_obj.delete_region = MagicMock(return_value=OperationMock(3))
- m_region_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(side_effect=exec_original)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_region.main()
-
- # check api was called correctly
- api_obj.get_region.assert_called_once_with(region_name=module_args["name"])
- api_obj.create_region.assert_not_called()
- api_obj.update_region.assert_not_called()
- api_obj.delete_region.assert_called_once_with(region_name=module_args["name"])
- op_obj.get_operation.assert_called_once_with(3)
diff --git a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_sc.py b/ansible_collections/purestorage/fusion/tests/functional/test_fusion_sc.py
deleted file mode 100644
index 4d44e7fcb..000000000
--- a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_sc.py
+++ /dev/null
@@ -1,1244 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# (c) 2023, Andrej Pajtas (apajtas@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-from unittest.mock import MagicMock, patch
-
-import fusion as purefusion
-import pytest
-from ansible.module_utils import basic
-from ansible_collections.purestorage.fusion.plugins.module_utils.errors import (
- OperationException,
-)
-from ansible_collections.purestorage.fusion.plugins.modules import fusion_sc
-from ansible_collections.purestorage.fusion.tests.functional.utils import (
- AnsibleExitJson,
- AnsibleFailJson,
- FailedOperationMock,
- OperationMock,
- SuccessfulOperationMock,
- FAKE_RESOURCE_ID,
- exit_json,
- fail_json,
- set_module_args,
-)
-from urllib3.exceptions import HTTPError
-
-# GLOBAL MOCKS
-fusion_sc.setup_fusion = MagicMock(return_value=purefusion.api_client.ApiClient())
-purefusion.api_client.ApiClient.call_api = MagicMock(
- side_effect=Exception("API call not mocked!")
-)
-basic.AnsibleModule.exit_json = exit_json
-basic.AnsibleModule.fail_json = fail_json
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageClassesApi")
-@pytest.mark.parametrize(
- "module_args",
- [
- # required parameter 'name` is missing
- {
- "state": "present",
- "display_name": "Storage Class 1",
- "iops_limit": "2000000",
- "bw_limit": "256G",
- "size_limit": "2P",
- "storage_service": "ss1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- # required parameter 'storage_service` is missing
- {
- "state": "present",
- "name": "sc1",
- "display_name": "Storage Class 1",
- "iops_limit": "2000000",
- "bw_limit": "256G",
- "size_limit": "2P",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- # unknown parameter 'extra' is provided
- {
- "state": "present",
- "name": "sc1",
- "display_name": "Storage Class 1",
- "iops_limit": "2000000",
- "bw_limit": "256G",
- "size_limit": "2P",
- "storage_service": "ss1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- "extra": "value",
- },
- # parameter 'state` has incorrect value
- {
- "state": "cool",
- "name": "sc1",
- "display_name": "Storage Class 1",
- "iops_limit": "2000000",
- "bw_limit": "256G",
- "size_limit": "2P",
- "storage_service": "ss1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- ],
-)
-def test_module_fails_on_wrong_parameters(m_sc_api, m_op_api, module_args):
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_class = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_storage_class = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_class = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_class = MagicMock(return_value=OperationMock(3))
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
- m_sc_api.return_value = api_obj
-
- # run module
- with pytest.raises(AnsibleFailJson):
- fusion_sc.main()
-
- # check api was not called at all
- api_obj.get_storage_class.assert_not_called()
- api_obj.create_storage_class.assert_not_called()
- api_obj.update_storage_class.assert_not_called()
- api_obj.delete_storage_class.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageClassesApi")
-@pytest.mark.parametrize(
- "iops_arg,iops_exp",
- [("2000000", 2_000_000), (None, 100_000_000)],
-)
-@pytest.mark.parametrize(
- "bw_arg,bw_exp",
- [("256G", 274877906944), (None, 549755813888)],
-)
-@pytest.mark.parametrize(
- "size_arg,size_exp",
- [("2P", 2251799813685248), (None, 4503599627370496)],
-)
-def test_sc_create(
- m_sc_api, m_op_api, iops_arg, iops_exp, bw_arg, bw_exp, size_arg, size_exp
-):
- module_args = {
- "state": "present",
- "name": "sc1",
- "display_name": "Storage Class 1",
- "iops_limit": iops_arg,
- "bw_limit": bw_arg,
- "size_limit": size_arg,
- "storage_service": "ss1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_class = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_storage_class = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_class = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_class = MagicMock(return_value=OperationMock(3))
- m_sc_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_sc.main()
-
- assert exc.value.changed
- assert exc.value.id == FAKE_RESOURCE_ID
-
- # check api was called correctly
- api_obj.get_storage_class.assert_called_once_with(
- storage_class_name=module_args["name"],
- storage_service_name=module_args["storage_service"],
- )
- api_obj.create_storage_class.assert_called_once_with(
- purefusion.StorageClassPost(
- name=module_args["name"],
- display_name=module_args["display_name"],
- iops_limit=iops_exp,
- bandwidth_limit=bw_exp,
- size_limit=size_exp,
- ),
- storage_service_name=module_args["storage_service"],
- )
- api_obj.update_storage_class.assert_not_called()
- api_obj.delete_storage_class.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageClassesApi")
-def test_sc_create_without_display_name(m_sc_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "sc1",
- "iops_limit": "2000000",
- "bw_limit": "256G",
- "size_limit": "2P",
- "storage_service": "ss1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- parsed_size = 2251799813685248
- parsed_bandwidth = 274877906944
- parsed_iops = 2000000
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_class = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_storage_class = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_class = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_class = MagicMock(return_value=OperationMock(3))
- m_sc_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_sc.main()
-
- assert exc.value.changed
- assert exc.value.id == FAKE_RESOURCE_ID
-
- # check api was called correctly
- api_obj.get_storage_class.assert_called_once_with(
- storage_class_name=module_args["name"],
- storage_service_name=module_args["storage_service"],
- )
- api_obj.create_storage_class.assert_called_once_with(
- purefusion.StorageClassPost(
- name=module_args["name"],
- display_name=module_args["name"],
- iops_limit=parsed_iops,
- bandwidth_limit=parsed_bandwidth,
- size_limit=parsed_size,
- ),
- storage_service_name=module_args["storage_service"],
- )
- api_obj.update_storage_class.assert_not_called()
- api_obj.delete_storage_class.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageClassesApi")
-@pytest.mark.parametrize("iops_arg", [-100, 99, 100_000_001])
-def test_sc_create_iops_out_of_range(m_sc_api, m_op_api, iops_arg):
- module_args = {
- "state": "present",
- "name": "sc1",
- "display_name": "Storage Class 1",
- "iops_limit": iops_arg,
- "bw_limit": "256G",
- "size_limit": "2P",
- "storage_service": "ss1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_class = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_storage_class = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_class = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_class = MagicMock(return_value=OperationMock(3))
- m_sc_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleFailJson):
- fusion_sc.main()
-
- # check api was called correctly
- api_obj.get_storage_class.assert_called_once_with(
- storage_class_name=module_args["name"],
- storage_service_name=module_args["storage_service"],
- )
- api_obj.create_storage_class.assert_not_called()
- api_obj.update_storage_class.assert_not_called()
- api_obj.delete_storage_class.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageClassesApi")
-@pytest.mark.parametrize("bw_arg", ["1023K", "513G"])
-def test_sc_create_bw_out_of_range(m_sc_api, m_op_api, bw_arg):
- module_args = {
- "state": "present",
- "name": "sc1",
- "display_name": "Storage Class 1",
- "iops_limit": "2000000",
- "bw_limit": bw_arg,
- "size_limit": "2P",
- "storage_service": "ss1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_class = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_storage_class = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_class = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_class = MagicMock(return_value=OperationMock(3))
- m_sc_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleFailJson):
- fusion_sc.main()
-
- # check api was called correctly
- api_obj.get_storage_class.assert_called_once_with(
- storage_class_name=module_args["name"],
- storage_service_name=module_args["storage_service"],
- )
- api_obj.create_storage_class.assert_not_called()
- api_obj.update_storage_class.assert_not_called()
- api_obj.delete_storage_class.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageClassesApi")
-@pytest.mark.parametrize("size_arg", ["1023K", "5P"])
-def test_sc_create_size_out_of_range(m_sc_api, m_op_api, size_arg):
- module_args = {
- "state": "present",
- "name": "sc1",
- "display_name": "Storage Class 1",
- "iops_limit": "2000000",
- "bw_limit": "256G",
- "size_limit": size_arg,
- "storage_service": "ss1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_class = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_storage_class = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_class = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_class = MagicMock(return_value=OperationMock(3))
- m_sc_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleFailJson):
- fusion_sc.main()
-
- # check api was called correctly
- api_obj.get_storage_class.assert_called_once_with(
- storage_class_name=module_args["name"],
- storage_service_name=module_args["storage_service"],
- )
- api_obj.create_storage_class.assert_not_called()
- api_obj.update_storage_class.assert_not_called()
- api_obj.delete_storage_class.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageClassesApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_sc_create_exception(m_sc_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "present",
- "name": "sc1",
- "display_name": "Storage Class 1",
- "iops_limit": "2000000",
- "bw_limit": "256G",
- "size_limit": "2P",
- "storage_service": "ss1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- parsed_size = 2251799813685248
- parsed_bandwidth = 274877906944
- parsed_iops = 2000000
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_class = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_storage_class = MagicMock(side_effect=exec_original)
- api_obj.update_storage_class = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_class = MagicMock(return_value=OperationMock(3))
- m_sc_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_sc.main()
-
- # check api was called correctly
- api_obj.get_storage_class.assert_called_once_with(
- storage_class_name=module_args["name"],
- storage_service_name=module_args["storage_service"],
- )
- api_obj.create_storage_class.assert_called_once_with(
- purefusion.StorageClassPost(
- name=module_args["name"],
- display_name=module_args["display_name"],
- iops_limit=parsed_iops,
- bandwidth_limit=parsed_bandwidth,
- size_limit=parsed_size,
- ),
- storage_service_name=module_args["storage_service"],
- )
- api_obj.update_storage_class.assert_not_called()
- api_obj.delete_storage_class.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageClassesApi")
-def test_sc_create_op_fails(m_sc_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "sc1",
- "display_name": "Storage Class 1",
- "iops_limit": "2000000",
- "bw_limit": "256G",
- "size_limit": "2P",
- "storage_service": "ss1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- parsed_size = 2251799813685248
- parsed_bandwidth = 274877906944
- parsed_iops = 2000000
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_class = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_storage_class = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_class = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_class = MagicMock(return_value=OperationMock(3))
- m_sc_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(OperationException):
- fusion_sc.main()
-
- # check api was called correctly
- api_obj.get_storage_class.assert_called_once_with(
- storage_class_name=module_args["name"],
- storage_service_name=module_args["storage_service"],
- )
- api_obj.create_storage_class.assert_called_once_with(
- purefusion.StorageClassPost(
- name=module_args["name"],
- display_name=module_args["display_name"],
- iops_limit=parsed_iops,
- bandwidth_limit=parsed_bandwidth,
- size_limit=parsed_size,
- ),
- storage_service_name=module_args["storage_service"],
- )
- api_obj.update_storage_class.assert_not_called()
- api_obj.delete_storage_class.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageClassesApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, OperationException),
- ],
-)
-def test_sc_create_op_exception(m_sc_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "present",
- "name": "sc1",
- "display_name": "Storage Class 1",
- "iops_limit": "2000000",
- "bw_limit": "256G",
- "size_limit": "2P",
- "storage_service": "ss1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- parsed_size = 2251799813685248
- parsed_bandwidth = 274877906944
- parsed_iops = 2000000
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_class = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_storage_class = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_class = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_class = MagicMock(return_value=OperationMock(3))
- m_sc_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(side_effect=exec_original)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_sc.main()
-
- # check api was called correctly
- api_obj.get_storage_class.assert_called_once_with(
- storage_class_name=module_args["name"],
- storage_service_name=module_args["storage_service"],
- )
- api_obj.create_storage_class.assert_called_once_with(
- purefusion.StorageClassPost(
- name=module_args["name"],
- display_name=module_args["display_name"],
- iops_limit=parsed_iops,
- bandwidth_limit=parsed_bandwidth,
- size_limit=parsed_size,
- ),
- storage_service_name=module_args["storage_service"],
- )
- api_obj.update_storage_class.assert_not_called()
- api_obj.delete_storage_class.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageClassesApi")
-def test_sc_update(m_sc_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "sc1",
- "display_name": "Storage Class 1",
- "iops_limit": "2000000",
- "bw_limit": "256G",
- "size_limit": "2P",
- "storage_service": "ss1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_sc = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": None,
- "iops_limit": "2000000",
- "bandwidth_limit": "256G",
- "size_limit": "2P",
- "storage_service": module_args["storage_service"],
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_class = MagicMock(
- return_value=purefusion.StorageClass(**current_sc)
- )
- api_obj.create_storage_class = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_class = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_class = MagicMock(return_value=OperationMock(3))
- m_sc_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_sc.main()
-
- assert exc.value.changed
- assert exc.value.id == current_sc["id"]
-
- # check api was called correctly
- api_obj.get_storage_class.assert_called_once_with(
- storage_class_name=module_args["name"],
- storage_service_name=module_args["storage_service"],
- )
- api_obj.create_storage_class.assert_not_called()
- api_obj.update_storage_class.assert_called_once_with(
- purefusion.StorageClassPatch(
- display_name=purefusion.NullableString(module_args["display_name"])
- ),
- storage_class_name=module_args["name"],
- storage_service_name=module_args["storage_service"],
- )
- api_obj.delete_storage_class.assert_not_called()
- op_obj.get_operation.assert_called_once_with(2)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageClassesApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_sc_update_exception(m_sc_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "present",
- "name": "sc1",
- "display_name": "Storage Class 1",
- "iops_limit": "2000000",
- "bw_limit": "256G",
- "size_limit": "2P",
- "storage_service": "ss1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_sc = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": None,
- "iops_limit": "2000000",
- "bandwidth_limit": "256G",
- "size_limit": "2P",
- "storage_service": module_args["storage_service"],
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_class = MagicMock(
- return_value=purefusion.StorageClass(**current_sc)
- )
- api_obj.create_storage_class = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_class = MagicMock(side_effect=exec_original)
- api_obj.delete_storage_class = MagicMock(return_value=OperationMock(3))
- m_sc_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_sc.main()
-
- # check api was called correctly
- api_obj.get_storage_class.assert_called_once_with(
- storage_class_name=module_args["name"],
- storage_service_name=module_args["storage_service"],
- )
- api_obj.create_storage_class.assert_not_called()
- api_obj.update_storage_class.assert_called_once_with(
- purefusion.StorageClassPatch(
- display_name=purefusion.NullableString(module_args["display_name"])
- ),
- storage_class_name=module_args["name"],
- storage_service_name=module_args["storage_service"],
- )
- api_obj.delete_storage_class.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageClassesApi")
-def test_sc_update_op_fails(m_sc_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "sc1",
- "display_name": "Storage Class 1",
- "iops_limit": "2000000",
- "bw_limit": "256G",
- "size_limit": "2P",
- "storage_service": "ss1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_sc = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": None,
- "iops_limit": "2000000",
- "bandwidth_limit": "256G",
- "size_limit": "2P",
- "storage_service": module_args["storage_service"],
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_class = MagicMock(
- return_value=purefusion.StorageClass(**current_sc)
- )
- api_obj.create_storage_class = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_class = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_class = MagicMock(return_value=OperationMock(3))
- m_sc_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(OperationException):
- fusion_sc.main()
-
- # check api was called correctly
- api_obj.get_storage_class.assert_called_once_with(
- storage_class_name=module_args["name"],
- storage_service_name=module_args["storage_service"],
- )
- api_obj.create_storage_class.assert_not_called()
- api_obj.update_storage_class.assert_called_once_with(
- purefusion.StorageClassPatch(
- display_name=purefusion.NullableString(module_args["display_name"])
- ),
- storage_class_name=module_args["name"],
- storage_service_name=module_args["storage_service"],
- )
- api_obj.delete_storage_class.assert_not_called()
- op_obj.get_operation.assert_called_once_with(2)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageClassesApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, OperationException),
- ],
-)
-def test_sc_update_op_exception(m_sc_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "present",
- "name": "sc1",
- "display_name": "Storage Class 1",
- "iops_limit": "2000000",
- "bw_limit": "256G",
- "size_limit": "2P",
- "storage_service": "ss1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_sc = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": None,
- "iops_limit": "2000000",
- "bandwidth_limit": "256G",
- "size_limit": "2P",
- "storage_service": module_args["storage_service"],
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_class = MagicMock(
- return_value=purefusion.StorageClass(**current_sc)
- )
- api_obj.create_storage_class = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_class = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_class = MagicMock(return_value=OperationMock(3))
- m_sc_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(side_effect=exec_original)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_sc.main()
-
- # check api was called correctly
- api_obj.get_storage_class.assert_called_once_with(
- storage_class_name=module_args["name"],
- storage_service_name=module_args["storage_service"],
- )
- api_obj.create_storage_class.assert_not_called()
- api_obj.update_storage_class.assert_called_once_with(
- purefusion.StorageClassPatch(
- display_name=purefusion.NullableString(module_args["display_name"])
- ),
- storage_class_name=module_args["name"],
- storage_service_name=module_args["storage_service"],
- )
- api_obj.delete_storage_class.assert_not_called()
- op_obj.get_operation.assert_called_once_with(2)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageClassesApi")
-def test_sc_present_not_changed(m_sc_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "sc1",
- "display_name": "Storage Class 1",
- "iops_limit": "2000000",
- "bw_limit": "256G",
- "size_limit": "2P",
- "storage_service": "ss1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_sc = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": module_args["display_name"],
- "iops_limit": "2000000",
- "bandwidth_limit": "256G",
- "size_limit": "2P",
- "storage_service": module_args["storage_service"],
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_class = MagicMock(
- return_value=purefusion.StorageClass(**current_sc)
- )
- api_obj.create_storage_class = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_class = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_class = MagicMock(return_value=OperationMock(3))
- m_sc_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_sc.main()
-
- assert not exc.value.changed
-
- # check api was called correctly
- api_obj.get_storage_class.assert_called_once_with(
- storage_class_name=module_args["name"],
- storage_service_name=module_args["storage_service"],
- )
- api_obj.create_storage_class.assert_not_called()
- api_obj.update_storage_class.assert_not_called()
- api_obj.delete_storage_class.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageClassesApi")
-def test_sc_absent_not_changed(m_sc_api, m_op_api):
- module_args = {
- "state": "absent",
- "name": "sc1",
- "display_name": "Storage Class 1",
- "iops_limit": "2000000",
- "bw_limit": "256G",
- "size_limit": "2P",
- "storage_service": "ss1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_class = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_storage_class = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_class = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_class = MagicMock(return_value=OperationMock(3))
- m_sc_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_sc.main()
-
- assert not exc.value.changed
-
- # check api was called correctly
- api_obj.get_storage_class.assert_called_once_with(
- storage_class_name=module_args["name"],
- storage_service_name=module_args["storage_service"],
- )
- api_obj.create_storage_class.assert_not_called()
- api_obj.update_storage_class.assert_not_called()
- api_obj.delete_storage_class.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageClassesApi")
-def test_sc_update_limits_not_changed(m_sc_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "sc1",
- "display_name": "Storage Class 1",
- "iops_limit": "2000000",
- "bw_limit": "256G",
- "size_limit": "2P",
- "storage_service": "ss1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_sc = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": module_args["display_name"],
- "iops_limit": "1500000", # does not match but shouldn't be updated!
- "bandwidth_limit": "300G", # does not match but shouldn't be updated!
- "size_limit": "1P", # does not match but shouldn't be updated!
- "storage_service": module_args["storage_service"],
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_class = MagicMock(
- return_value=purefusion.StorageClass(**current_sc)
- )
- api_obj.create_storage_class = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_class = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_class = MagicMock(return_value=OperationMock(3))
- m_sc_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_sc.main()
-
- assert not exc.value.changed
-
- # check api was called correctly
- api_obj.get_storage_class.assert_called_once_with(
- storage_class_name=module_args["name"],
- storage_service_name=module_args["storage_service"],
- )
- api_obj.create_storage_class.assert_not_called()
- api_obj.update_storage_class.assert_not_called()
- api_obj.delete_storage_class.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageClassesApi")
-def test_sc_delete(m_sc_api, m_op_api):
- module_args = {
- "state": "absent",
- "name": "sc1",
- "display_name": "Storage Class 1",
- "iops_limit": "2000000",
- "bw_limit": "256G",
- "size_limit": "2P",
- "storage_service": "ss1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_sc = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": None,
- "iops_limit": "2000000",
- "bandwidth_limit": "256G",
- "size_limit": "2P",
- "storage_service": module_args["storage_service"],
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_class = MagicMock(
- return_value=purefusion.StorageClass(**current_sc)
- )
- api_obj.create_storage_class = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_class = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_class = MagicMock(return_value=OperationMock(3))
- m_sc_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_sc.main()
-
- assert exc.value.changed
-
- # check api was called correctly
- api_obj.get_storage_class.assert_called_once_with(
- storage_class_name=module_args["name"],
- storage_service_name=module_args["storage_service"],
- )
- api_obj.create_storage_class.assert_not_called()
- api_obj.update_storage_class.assert_not_called()
- api_obj.delete_storage_class.assert_called_once_with(
- storage_class_name=module_args["name"],
- storage_service_name=module_args["storage_service"],
- )
- op_obj.get_operation.assert_called_once_with(3)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageClassesApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_sc_delete_exception(m_sc_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "absent",
- "name": "sc1",
- "display_name": "Storage Class 1",
- "iops_limit": "2000000",
- "bw_limit": "256G",
- "size_limit": "2P",
- "storage_service": "ss1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_sc = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": None,
- "iops_limit": "2000000",
- "bandwidth_limit": "256G",
- "size_limit": "2P",
- "storage_service": module_args["storage_service"],
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_class = MagicMock(
- return_value=purefusion.StorageClass(**current_sc)
- )
- api_obj.create_storage_class = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_class = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_class = MagicMock(side_effect=exec_original)
- m_sc_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_sc.main()
-
- # check api was called correctly
- api_obj.get_storage_class.assert_called_once_with(
- storage_class_name=module_args["name"],
- storage_service_name=module_args["storage_service"],
- )
- api_obj.create_storage_class.assert_not_called()
- api_obj.update_storage_class.assert_not_called()
- api_obj.delete_storage_class.assert_called_once_with(
- storage_class_name=module_args["name"],
- storage_service_name=module_args["storage_service"],
- )
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageClassesApi")
-def test_sc_delete_op_fails(m_sc_api, m_op_api):
- module_args = {
- "state": "absent",
- "name": "sc1",
- "display_name": "Storage Class 1",
- "iops_limit": "2000000",
- "bw_limit": "256G",
- "size_limit": "2P",
- "storage_service": "ss1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_sc = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": None,
- "iops_limit": "2000000",
- "bandwidth_limit": "256G",
- "size_limit": "2P",
- "storage_service": module_args["storage_service"],
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_class = MagicMock(
- return_value=purefusion.StorageClass(**current_sc)
- )
- api_obj.create_storage_class = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_class = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_class = MagicMock(return_value=OperationMock(3))
- m_sc_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(OperationException):
- fusion_sc.main()
-
- # check api was called correctly
- api_obj.get_storage_class.assert_called_once_with(
- storage_class_name=module_args["name"],
- storage_service_name=module_args["storage_service"],
- )
- api_obj.create_storage_class.assert_not_called()
- api_obj.update_storage_class.assert_not_called()
- api_obj.delete_storage_class.assert_called_once_with(
- storage_class_name=module_args["name"],
- storage_service_name=module_args["storage_service"],
- )
- op_obj.get_operation.assert_called_once_with(3)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageClassesApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, OperationException),
- ],
-)
-def test_sc_delete_op_exception(m_sc_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "absent",
- "name": "sc1",
- "display_name": "Storage Class 1",
- "iops_limit": "2000000",
- "bw_limit": "256G",
- "size_limit": "2P",
- "storage_service": "ss1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_sc = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": None,
- "iops_limit": "2000000",
- "bandwidth_limit": "256G",
- "size_limit": "2P",
- "storage_service": module_args["storage_service"],
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_class = MagicMock(
- return_value=purefusion.StorageClass(**current_sc)
- )
- api_obj.create_storage_class = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_class = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_class = MagicMock(return_value=OperationMock(3))
- m_sc_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(side_effect=exec_original)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_sc.main()
-
- # check api was called correctly
- api_obj.get_storage_class.assert_called_once_with(
- storage_class_name=module_args["name"],
- storage_service_name=module_args["storage_service"],
- )
- api_obj.create_storage_class.assert_not_called()
- api_obj.update_storage_class.assert_not_called()
- api_obj.delete_storage_class.assert_called_once_with(
- storage_class_name=module_args["name"],
- storage_service_name=module_args["storage_service"],
- )
- op_obj.get_operation.assert_called_once_with(3)
diff --git a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_se.py b/ansible_collections/purestorage/fusion/tests/functional/test_fusion_se.py
deleted file mode 100644
index 9d9559c12..000000000
--- a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_se.py
+++ /dev/null
@@ -1,1044 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# (c) 2023, Andrej Pajtas (apajtas@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-from unittest.mock import MagicMock, patch
-
-import fusion as purefusion
-import pytest
-from ansible.module_utils import basic
-from ansible_collections.purestorage.fusion.plugins.module_utils.errors import (
- OperationException,
-)
-from ansible_collections.purestorage.fusion.plugins.modules import fusion_se
-from ansible_collections.purestorage.fusion.tests.functional.utils import (
- AnsibleExitJson,
- AnsibleFailJson,
- FailedOperationMock,
- OperationMock,
- SuccessfulOperationMock,
- FAKE_RESOURCE_ID,
- exit_json,
- fail_json,
- set_module_args,
-)
-from urllib3.exceptions import HTTPError
-
-# GLOBAL MOCKS
-fusion_se.setup_fusion = MagicMock(return_value=purefusion.api_client.ApiClient())
-purefusion.api_client.ApiClient.call_api = MagicMock(
- side_effect=Exception("API call not mocked!")
-)
-basic.AnsibleModule.exit_json = exit_json
-basic.AnsibleModule.fail_json = fail_json
-
-
-@pytest.fixture
-def module_args():
- return {
- "state": "present",
- "name": "se1",
- "display_name": "Storage Endpoint 1",
- "region": "region1",
- "availability_zone": "az1",
- "iscsi": [
- {
- "address": "10.21.200.124/24",
- "gateway": "10.21.200.1",
- "network_interface_groups": ["subnet-0", "subnet-1"],
- }
- ],
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
-
-
-@pytest.fixture
-def current_se(module_args):
- return {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"],
- "display_name": module_args["display_name"],
- "region": module_args["region"],
- "availability_zone": module_args["availability_zone"],
- "endpoint_type": "iscsi",
- "iscsi": [
- dict(discovery_interface) for discovery_interface in module_args["iscsi"]
- ],
- }
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageEndpointsApi")
-@pytest.mark.parametrize(
- "module_args",
- [
- # required parameter 'name` is missing
- {
- "state": "present",
- "display_name": "Storage Endpoint 1",
- "region": "region1",
- "availability_zone": "az1",
- "iscsi": [
- {
- "address": "10.21.200.124/24",
- "gateway": "10.21.200.1",
- "network_interface_groups": ["subnet-0", "subnet-1"],
- }
- ],
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- # required parameter 'region` is missing
- {
- "state": "present",
- "name": "se1",
- "display_name": "Storage Endpoint 1",
- "availability_zone": "az1",
- "iscsi": [
- {
- "address": "10.21.200.124/24",
- "gateway": "10.21.200.1",
- "network_interface_groups": ["subnet-0", "subnet-1"],
- }
- ],
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- # required parameter 'availability_zone` is missing
- {
- "state": "present",
- "name": "se1",
- "display_name": "Storage Endpoint 1",
- "region": "region1",
- "iscsi": [
- {
- "address": "10.21.200.124/24",
- "gateway": "10.21.200.1",
- "network_interface_groups": ["subnet-0", "subnet-1"],
- }
- ],
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- # unknown parameter 'extra' is provided
- {
- "state": "present",
- "name": "se1",
- "display_name": "Storage Endpoint 1",
- "region": "region1",
- "availability_zone": "az1",
- "iscsi": [
- {
- "address": "10.21.200.124/24",
- "gateway": "10.21.200.1",
- "network_interface_groups": ["subnet-0", "subnet-1"],
- }
- ],
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- "extra": "value",
- },
- # parameter 'state` has incorrect value
- {
- "state": "cool",
- "name": "se1",
- "display_name": "Storage Endpoint 1",
- "region": "region1",
- "availability_zone": "az1",
- "iscsi": [
- {
- "address": "10.21.200.124/24",
- "gateway": "10.21.200.1",
- "network_interface_groups": ["subnet-0", "subnet-1"],
- }
- ],
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- # parameter 'iscsi` and 'cbs_azure_iscsi' are used at the same time
- {
- "state": "present",
- "name": "se1",
- "display_name": "Storage Endpoint 1",
- "region": "region1",
- "availability_zone": "az1",
- "iscsi": [
- {
- "address": "10.21.200.124/24",
- "gateway": "10.21.200.1",
- "network_interface_groups": ["subnet-0", "subnet-1"],
- }
- ],
- "cbs_azure_iscsi": {
- "storage_endpoint_collection_identity": "/subscriptions/sub/resourcegroups/sec/providers/ms/userAssignedIdentities/secId",
- "load_balancer": "/subscriptions/sub/resourcegroups/sec/providers/ms/loadBalancers/sec-lb",
- "load_balancer_addresses": [],
- },
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- },
- # parameter 'cbs_azure_iscsi' has invalid address
- {
- "state": "present",
- "name": "se1",
- "display_name": "Storage Endpoint 1",
- "region": "region1",
- "availability_zone": "az1",
- "cbs_azure_iscsi": {
- "storage_endpoint_collection_identity": "/subscriptions/sub/resourcegroups/sec/providers/ms/userAssignedIdentities/secId",
- "load_balancer": "/subscriptions/sub/resourcegroups/sec/providers/ms/loadBalancers/sec-lb",
- "load_balancer_addresses": ["not an address"],
- },
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- },
- # parameter 'iscsi' has invalid 'gateway' address
- {
- "state": "present",
- "name": "se1",
- "display_name": "Storage Endpoint 1",
- "region": "region1",
- "availability_zone": "az1",
- "iscsi": [
- {
- "address": "10.21.200.124/24",
- "gateway": "not an address",
- "network_interface_groups": ["subnet-0", "subnet-1"],
- }
- ],
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- },
- # parameter 'iscsi' has invalid 'address' address
- {
- "state": "present",
- "name": "se1",
- "display_name": "Storage Endpoint 1",
- "region": "region1",
- "availability_zone": "az1",
- "iscsi": [
- {
- "address": "not an address",
- "gateway": "10.21.200.1",
- "network_interface_groups": ["subnet-0", "subnet-1"],
- }
- ],
- "app_id": "ABCD1234",
- "key_file": "private-key.pem",
- },
- ],
-)
-def test_module_fails_on_wrong_parameters(m_se_api, m_op_api, module_args):
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_endpoint = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_storage_endpoint = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_endpoint = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_endpoint = MagicMock(return_value=OperationMock(3))
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
- m_se_api.return_value = api_obj
-
- # run module
- with pytest.raises(AnsibleFailJson):
- fusion_se.main()
-
- # check api was not called at all
- api_obj.get_storage_endpoint.assert_not_called()
- api_obj.create_storage_endpoint.assert_not_called()
- api_obj.update_storage_endpoint.assert_not_called()
- api_obj.delete_storage_endpoint.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageEndpointsApi")
-def test_se_create_iscsi(m_se_api, m_op_api, module_args):
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_endpoint = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_storage_endpoint = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_endpoint = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_endpoint = MagicMock(return_value=OperationMock(3))
- m_se_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_se.main()
-
- assert exc.value.changed
- assert exc.value.id == FAKE_RESOURCE_ID
-
- # check api was called correctly
- api_obj.get_storage_endpoint.assert_called_once_with(
- region_name=module_args["region"],
- storage_endpoint_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- )
- api_obj.create_storage_endpoint.assert_called_once_with(
- purefusion.StorageEndpointPost(
- name=module_args["name"],
- display_name=module_args["display_name"],
- endpoint_type="iscsi",
- iscsi=purefusion.StorageEndpointIscsiPost(
- discovery_interfaces=[
- purefusion.StorageEndpointIscsiDiscoveryInterfacePost(**endpoint)
- for endpoint in module_args["iscsi"]
- ]
- ),
- ),
- region_name=module_args["region"],
- availability_zone_name=module_args["availability_zone"],
- )
- api_obj.update_storage_endpoint.assert_not_called()
- api_obj.delete_storage_endpoint.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageEndpointsApi")
-def test_se_create_cbs_azure_iscsi(m_se_api, m_op_api, module_args):
- del module_args["iscsi"]
- module_args["cbs_azure_iscsi"] = {
- "storage_endpoint_collection_identity": "/subscriptions/sub/resourcegroups/sec/providers/ms/userAssignedIdentities/secId",
- "load_balancer": "/subscriptions/sub/resourcegroups/sec/providers/ms/loadBalancers/sec-lb",
- "load_balancer_addresses": ["234.1.2.3"],
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_endpoint = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_storage_endpoint = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_endpoint = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_endpoint = MagicMock(return_value=OperationMock(3))
- m_se_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_se.main()
-
- assert exc.value.changed is True
- assert exc.value.id == FAKE_RESOURCE_ID
-
- # check api was called correctly
- api_obj.get_storage_endpoint.assert_called_once_with(
- region_name=module_args["region"],
- storage_endpoint_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- )
- api_obj.create_storage_endpoint.assert_called_once_with(
- purefusion.StorageEndpointPost(
- name=module_args["name"],
- display_name=module_args["display_name"],
- endpoint_type="cbs-azure-iscsi",
- cbs_azure_iscsi=purefusion.StorageEndpointCbsAzureIscsiPost(
- storage_endpoint_collection_identity=module_args["cbs_azure_iscsi"][
- "storage_endpoint_collection_identity"
- ],
- load_balancer=module_args["cbs_azure_iscsi"]["load_balancer"],
- load_balancer_addresses=module_args["cbs_azure_iscsi"][
- "load_balancer_addresses"
- ],
- ),
- ),
- region_name=module_args["region"],
- availability_zone_name=module_args["availability_zone"],
- )
- api_obj.update_storage_endpoint.assert_not_called()
- api_obj.delete_storage_endpoint.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageEndpointsApi")
-def test_se_create_without_display_name(m_se_api, m_op_api, module_args):
- del module_args["display_name"]
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_endpoint = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_storage_endpoint = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_endpoint = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_endpoint = MagicMock(return_value=OperationMock(3))
- m_se_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_se.main()
-
- assert exc.value.changed
- assert exc.value.id == FAKE_RESOURCE_ID
-
- # check api was called correctly
- api_obj.get_storage_endpoint.assert_called_once_with(
- region_name=module_args["region"],
- storage_endpoint_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- )
- api_obj.create_storage_endpoint.assert_called_once_with(
- purefusion.StorageEndpointPost(
- name=module_args["name"],
- display_name=module_args["name"],
- endpoint_type="iscsi",
- iscsi=purefusion.StorageEndpointIscsiPost(
- discovery_interfaces=[
- purefusion.StorageEndpointIscsiDiscoveryInterfacePost(**endpoint)
- for endpoint in module_args["iscsi"]
- ]
- ),
- ),
- region_name=module_args["region"],
- availability_zone_name=module_args["availability_zone"],
- )
- api_obj.update_storage_endpoint.assert_not_called()
- api_obj.delete_storage_endpoint.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageEndpointsApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_se_create_exception(
- m_se_api, m_op_api, exec_original, exec_catch, module_args
-):
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_endpoint = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_storage_endpoint = MagicMock(side_effect=exec_original)
- api_obj.update_storage_endpoint = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_endpoint = MagicMock(return_value=OperationMock(3))
- m_se_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_se.main()
-
- # check api was called correctly
- api_obj.get_storage_endpoint.assert_called_once_with(
- region_name=module_args["region"],
- storage_endpoint_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- )
- api_obj.create_storage_endpoint.assert_called_once_with(
- purefusion.StorageEndpointPost(
- name=module_args["name"],
- display_name=module_args["display_name"],
- endpoint_type="iscsi",
- iscsi=purefusion.StorageEndpointIscsiPost(
- discovery_interfaces=[
- purefusion.StorageEndpointIscsiDiscoveryInterfacePost(**endpoint)
- for endpoint in module_args["iscsi"]
- ]
- ),
- ),
- region_name=module_args["region"],
- availability_zone_name=module_args["availability_zone"],
- )
- api_obj.update_storage_endpoint.assert_not_called()
- api_obj.delete_storage_endpoint.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageEndpointsApi")
-def test_se_create_op_fails(m_se_api, m_op_api, module_args):
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_endpoint = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_storage_endpoint = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_endpoint = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_endpoint = MagicMock(return_value=OperationMock(3))
- m_se_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(OperationException):
- fusion_se.main()
-
- # check api was called correctly
- api_obj.get_storage_endpoint.assert_called_once_with(
- region_name=module_args["region"],
- storage_endpoint_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- )
- api_obj.create_storage_endpoint.assert_called_once_with(
- purefusion.StorageEndpointPost(
- name=module_args["name"],
- display_name=module_args["display_name"],
- endpoint_type="iscsi",
- iscsi=purefusion.StorageEndpointIscsiPost(
- discovery_interfaces=[
- purefusion.StorageEndpointIscsiDiscoveryInterfacePost(**endpoint)
- for endpoint in module_args["iscsi"]
- ]
- ),
- ),
- region_name=module_args["region"],
- availability_zone_name=module_args["availability_zone"],
- )
- api_obj.update_storage_endpoint.assert_not_called()
- api_obj.delete_storage_endpoint.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageEndpointsApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, OperationException),
- ],
-)
-def test_se_create_op_exception(
- m_se_api, m_op_api, exec_original, exec_catch, module_args
-):
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_endpoint = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_storage_endpoint = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_endpoint = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_endpoint = MagicMock(return_value=OperationMock(3))
- m_se_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(side_effect=exec_original)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_se.main()
-
- # check api was called correctly
- api_obj.get_storage_endpoint.assert_called_once_with(
- region_name=module_args["region"],
- storage_endpoint_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- )
- api_obj.create_storage_endpoint.assert_called_once_with(
- purefusion.StorageEndpointPost(
- name=module_args["name"],
- display_name=module_args["display_name"],
- endpoint_type="iscsi",
- iscsi=purefusion.StorageEndpointIscsiPost(
- discovery_interfaces=[
- purefusion.StorageEndpointIscsiDiscoveryInterfacePost(**endpoint)
- for endpoint in module_args["iscsi"]
- ]
- ),
- ),
- region_name=module_args["region"],
- availability_zone_name=module_args["availability_zone"],
- )
- api_obj.update_storage_endpoint.assert_not_called()
- api_obj.delete_storage_endpoint.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageEndpointsApi")
-def test_se_update(m_se_api, m_op_api, module_args, current_se):
- current_se["display_name"] = None
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_endpoint = MagicMock(
- return_value=purefusion.StorageEndpoint(**current_se)
- )
- api_obj.create_storage_endpoint = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_endpoint = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_endpoint = MagicMock(return_value=OperationMock(3))
- m_se_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_se.main()
-
- assert exc.value.changed
- assert exc.value.id == current_se["id"]
-
- # check api was called correctly
- api_obj.get_storage_endpoint.assert_called_once_with(
- region_name=module_args["region"],
- storage_endpoint_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- )
- api_obj.create_storage_endpoint.assert_not_called()
- api_obj.update_storage_endpoint.assert_called_once_with(
- purefusion.StorageEndpointPatch(
- display_name=purefusion.NullableString(module_args["display_name"])
- ),
- region_name=module_args["region"],
- storage_endpoint_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- )
- api_obj.delete_storage_endpoint.assert_not_called()
- op_obj.get_operation.assert_called_once_with(2)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageEndpointsApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_se_update_exception(
- m_se_api, m_op_api, exec_original, exec_catch, module_args, current_se
-):
- current_se["display_name"] = None
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_endpoint = MagicMock(
- return_value=purefusion.StorageEndpoint(**current_se)
- )
- api_obj.create_storage_endpoint = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_endpoint = MagicMock(side_effect=exec_original)
- api_obj.delete_storage_endpoint = MagicMock(return_value=OperationMock(3))
- m_se_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_se.main()
-
- # check api was called correctly
- api_obj.get_storage_endpoint.assert_called_once_with(
- region_name=module_args["region"],
- storage_endpoint_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- )
- api_obj.create_storage_endpoint.assert_not_called()
- api_obj.update_storage_endpoint.assert_called_once_with(
- purefusion.StorageEndpointPatch(
- display_name=purefusion.NullableString(module_args["display_name"])
- ),
- region_name=module_args["region"],
- storage_endpoint_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- )
- api_obj.delete_storage_endpoint.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageEndpointsApi")
-def test_se_update_op_fails(m_se_api, m_op_api, module_args, current_se):
- current_se["display_name"] = None
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_endpoint = MagicMock(
- return_value=purefusion.StorageEndpoint(**current_se)
- )
- api_obj.create_storage_endpoint = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_endpoint = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_endpoint = MagicMock(return_value=OperationMock(3))
- m_se_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(OperationException):
- fusion_se.main()
-
- # check api was called correctly
- api_obj.get_storage_endpoint.assert_called_once_with(
- region_name=module_args["region"],
- storage_endpoint_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- )
- api_obj.create_storage_endpoint.assert_not_called()
- api_obj.update_storage_endpoint.assert_called_once_with(
- purefusion.StorageEndpointPatch(
- display_name=purefusion.NullableString(module_args["display_name"])
- ),
- region_name=module_args["region"],
- storage_endpoint_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- )
- api_obj.delete_storage_endpoint.assert_not_called()
- op_obj.get_operation.assert_called_once_with(2)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageEndpointsApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, OperationException),
- ],
-)
-def test_se_update_op_exception(
- m_se_api, m_op_api, exec_original, exec_catch, module_args, current_se
-):
- current_se["display_name"] = None
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_endpoint = MagicMock(
- return_value=purefusion.StorageEndpoint(**current_se)
- )
- api_obj.create_storage_endpoint = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_endpoint = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_endpoint = MagicMock(return_value=OperationMock(3))
- m_se_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(side_effect=exec_original)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_se.main()
-
- # check api was called correctly
- api_obj.get_storage_endpoint.assert_called_once_with(
- region_name=module_args["region"],
- storage_endpoint_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- )
- api_obj.create_storage_endpoint.assert_not_called()
- api_obj.update_storage_endpoint.assert_called_once_with(
- purefusion.StorageEndpointPatch(
- display_name=purefusion.NullableString(module_args["display_name"])
- ),
- region_name=module_args["region"],
- storage_endpoint_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- )
- api_obj.delete_storage_endpoint.assert_not_called()
- op_obj.get_operation.assert_called_once_with(2)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageEndpointsApi")
-def test_se_present_not_changed(m_se_api, m_op_api, module_args, current_se):
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_endpoint = MagicMock(
- return_value=purefusion.StorageEndpoint(**current_se)
- )
- api_obj.create_storage_endpoint = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_endpoint = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_endpoint = MagicMock(return_value=OperationMock(3))
- m_se_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_se.main()
-
- assert not exc.value.changed
-
- # check api was called correctly
- api_obj.get_storage_endpoint.assert_called_once_with(
- region_name=module_args["region"],
- storage_endpoint_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- )
- api_obj.create_storage_endpoint.assert_not_called()
- api_obj.update_storage_endpoint.assert_not_called()
- api_obj.delete_storage_endpoint.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageEndpointsApi")
-def test_se_absent_not_changed(m_se_api, m_op_api, module_args, current_se):
- module_args["state"] = "absent"
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_endpoint = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_storage_endpoint = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_endpoint = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_endpoint = MagicMock(return_value=OperationMock(3))
- m_se_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_se.main()
-
- assert not exc.value.changed
-
- # check api was called correctly
- api_obj.get_storage_endpoint.assert_called_once_with(
- region_name=module_args["region"],
- storage_endpoint_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- )
- api_obj.create_storage_endpoint.assert_not_called()
- api_obj.update_storage_endpoint.assert_not_called()
- api_obj.delete_storage_endpoint.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageEndpointsApi")
-def test_se_delete(m_se_api, m_op_api, module_args, current_se):
- module_args["state"] = "absent"
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_endpoint = MagicMock(
- return_value=purefusion.StorageEndpoint(**current_se)
- )
- api_obj.create_storage_endpoint = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_endpoint = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_endpoint = MagicMock(return_value=OperationMock(3))
- m_se_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_se.main()
-
- assert exc.value.changed
-
- # check api was called correctly
- api_obj.get_storage_endpoint.assert_called_once_with(
- region_name=module_args["region"],
- storage_endpoint_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- )
- api_obj.create_storage_endpoint.assert_not_called()
- api_obj.update_storage_endpoint.assert_not_called()
- api_obj.delete_storage_endpoint.assert_called_once_with(
- region_name=module_args["region"],
- storage_endpoint_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- )
- op_obj.get_operation.assert_called_once_with(3)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageEndpointsApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_se_delete_exception(
- m_se_api, m_op_api, exec_original, exec_catch, module_args, current_se
-):
- module_args["state"] = "absent"
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_endpoint = MagicMock(
- return_value=purefusion.StorageEndpoint(**current_se)
- )
- api_obj.create_storage_endpoint = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_endpoint = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_endpoint = MagicMock(side_effect=exec_original)
- m_se_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_se.main()
-
- # check api was called correctly
- api_obj.get_storage_endpoint.assert_called_once_with(
- region_name=module_args["region"],
- storage_endpoint_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- )
- api_obj.create_storage_endpoint.assert_not_called()
- api_obj.update_storage_endpoint.assert_not_called()
- api_obj.delete_storage_endpoint.assert_called_once_with(
- region_name=module_args["region"],
- storage_endpoint_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- )
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageEndpointsApi")
-def test_se_delete_op_fails(m_se_api, m_op_api, module_args, current_se):
- module_args["state"] = "absent"
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_endpoint = MagicMock(
- return_value=purefusion.StorageEndpoint(**current_se)
- )
- api_obj.create_storage_endpoint = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_endpoint = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_endpoint = MagicMock(return_value=OperationMock(3))
- m_se_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(OperationException):
- fusion_se.main()
-
- # check api was called correctly
- api_obj.get_storage_endpoint.assert_called_once_with(
- region_name=module_args["region"],
- storage_endpoint_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- )
- api_obj.create_storage_endpoint.assert_not_called()
- api_obj.update_storage_endpoint.assert_not_called()
- api_obj.delete_storage_endpoint.assert_called_once_with(
- region_name=module_args["region"],
- storage_endpoint_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- )
- op_obj.get_operation.assert_called_once_with(3)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageEndpointsApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, OperationException),
- ],
-)
-def test_se_delete_op_exception(
- m_se_api, m_op_api, exec_original, exec_catch, module_args, current_se
-):
- module_args["state"] = "absent"
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_endpoint = MagicMock(
- return_value=purefusion.StorageEndpoint(**current_se)
- )
- api_obj.create_storage_endpoint = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_endpoint = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_endpoint = MagicMock(return_value=OperationMock(3))
- m_se_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(side_effect=exec_original)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_se.main()
-
- # check api was called correctly
- api_obj.get_storage_endpoint.assert_called_once_with(
- region_name=module_args["region"],
- storage_endpoint_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- )
- api_obj.create_storage_endpoint.assert_not_called()
- api_obj.update_storage_endpoint.assert_not_called()
- api_obj.delete_storage_endpoint.assert_called_once_with(
- region_name=module_args["region"],
- storage_endpoint_name=module_args["name"],
- availability_zone_name=module_args["availability_zone"],
- )
- op_obj.get_operation.assert_called_once_with(3)
diff --git a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_ss.py b/ansible_collections/purestorage/fusion/tests/functional/test_fusion_ss.py
deleted file mode 100644
index f1514b8e6..000000000
--- a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_ss.py
+++ /dev/null
@@ -1,934 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# (c) 2023, Andrej Pajtas (apajtas@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-from unittest.mock import MagicMock, patch
-
-import fusion as purefusion
-import pytest
-from ansible.module_utils import basic
-from ansible_collections.purestorage.fusion.plugins.module_utils.errors import (
- OperationException,
-)
-from ansible_collections.purestorage.fusion.plugins.modules import fusion_ss
-from ansible_collections.purestorage.fusion.tests.functional.utils import (
- AnsibleExitJson,
- AnsibleFailJson,
- FailedOperationMock,
- OperationMock,
- SuccessfulOperationMock,
- FAKE_RESOURCE_ID,
- exit_json,
- fail_json,
- set_module_args,
-)
-from urllib3.exceptions import HTTPError
-
-# GLOBAL MOCKS
-fusion_ss.setup_fusion = MagicMock(return_value=purefusion.api_client.ApiClient())
-purefusion.api_client.ApiClient.call_api = MagicMock(
- side_effect=Exception("API call not mocked!")
-)
-basic.AnsibleModule.exit_json = exit_json
-basic.AnsibleModule.fail_json = fail_json
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageServicesApi")
-@pytest.mark.parametrize(
- "module_args",
- [
- # required parameter 'name` is missing
- {
- "state": "present",
- "display_name": "Storage Service 1",
- "hardware_types": ["flash-array-x"],
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- # unknown parameter 'extra' is provided
- {
- "state": "present",
- "name": "ss1",
- "display_name": "Storage Service 1",
- "hardware_types": ["flash-array-x"],
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- "extra": "value",
- },
- # parameter 'state` has incorrect value
- {
- "state": "cool",
- "name": "ss1",
- "display_name": "Storage Service 1",
- "hardware_types": ["flash-array-x"],
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- # parameter 'hardware_types` has incorrect value
- {
- "state": "present",
- "name": "ss1",
- "display_name": "Storage Service 1",
- "hardware_types": ["hdd-array-x"],
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- ],
-)
-def test_module_fails_on_wrong_parameters(m_ss_api, m_op_api, module_args):
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_service = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_storage_service = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_service = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_service = MagicMock(return_value=OperationMock(3))
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
- m_ss_api.return_value = api_obj
-
- # run module
- with pytest.raises(AnsibleFailJson):
- fusion_ss.main()
-
- # check api was not called at all
- api_obj.get_storage_service.assert_not_called()
- api_obj.create_storage_service.assert_not_called()
- api_obj.update_storage_service.assert_not_called()
- api_obj.delete_storage_service.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageServicesApi")
-def test_ss_create(m_ss_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "ss1",
- "display_name": "Storage Service 1",
- "hardware_types": ["flash-array-x"],
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_service = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_storage_service = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_service = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_service = MagicMock(return_value=OperationMock(3))
- m_ss_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_ss.main()
-
- assert exc.value.changed
- assert exc.value.id == FAKE_RESOURCE_ID
-
- # check api was called correctly
- api_obj.get_storage_service.assert_called_once_with(
- storage_service_name=module_args["name"]
- )
- api_obj.create_storage_service.assert_called_once_with(
- purefusion.StorageServicePost(
- name=module_args["name"],
- display_name=module_args["display_name"],
- hardware_types=module_args["hardware_types"],
- )
- )
- api_obj.update_storage_service.assert_not_called()
- api_obj.delete_storage_service.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageServicesApi")
-def test_ss_create_without_display_name(m_ss_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "ss1",
- "hardware_types": ["flash-array-x"],
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_service = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_storage_service = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_service = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_service = MagicMock(return_value=OperationMock(3))
- m_ss_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_ss.main()
-
- assert exc.value.changed
- assert exc.value.id == FAKE_RESOURCE_ID
-
- # check api was called correctly
- api_obj.get_storage_service.assert_called_once_with(
- storage_service_name=module_args["name"]
- )
- api_obj.create_storage_service.assert_called_once_with(
- purefusion.StorageServicePost(
- name=module_args["name"],
- display_name=module_args["name"],
- hardware_types=module_args["hardware_types"],
- )
- )
- api_obj.update_storage_service.assert_not_called()
- api_obj.delete_storage_service.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageServicesApi")
-def test_array_create_without_hardware_type(m_ss_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "ss1",
- "display_name": "Storage Service 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_service = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_storage_service = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_service = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_service = MagicMock(return_value=OperationMock(3))
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
- m_ss_api.return_value = api_obj
-
- # run module
- with pytest.raises(AnsibleFailJson):
- fusion_ss.main()
-
- # check api was not called at all
- api_obj.get_storage_service.assert_called_once_with(
- storage_service_name=module_args["name"]
- )
- api_obj.create_storage_service.assert_not_called()
- api_obj.update_storage_service.assert_not_called()
- api_obj.delete_storage_service.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageServicesApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_ss_create_exception(m_ss_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "present",
- "name": "ss1",
- "display_name": "Storage Service 1",
- "hardware_types": ["flash-array-x"],
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_service = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_storage_service = MagicMock(side_effect=exec_original)
- api_obj.update_storage_service = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_service = MagicMock(return_value=OperationMock(3))
- m_ss_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_ss.main()
-
- # check api was called correctly
- api_obj.get_storage_service.assert_called_once_with(
- storage_service_name=module_args["name"]
- )
- api_obj.create_storage_service.assert_called_once_with(
- purefusion.StorageServicePost(
- name=module_args["name"],
- display_name=module_args["display_name"],
- hardware_types=module_args["hardware_types"],
- )
- )
- api_obj.update_storage_service.assert_not_called()
- api_obj.delete_storage_service.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageServicesApi")
-def test_ss_create_op_fails(m_ss_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "ss1",
- "display_name": "Storage Service 1",
- "hardware_types": ["flash-array-x"],
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_service = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_storage_service = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_service = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_service = MagicMock(return_value=OperationMock(3))
- m_ss_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(OperationException):
- fusion_ss.main()
-
- # check api was called correctly
- api_obj.get_storage_service.assert_called_once_with(
- storage_service_name=module_args["name"]
- )
- api_obj.create_storage_service.assert_called_once_with(
- purefusion.StorageServicePost(
- name=module_args["name"],
- display_name=module_args["display_name"],
- hardware_types=module_args["hardware_types"],
- )
- )
- api_obj.update_storage_service.assert_not_called()
- api_obj.delete_storage_service.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageServicesApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, OperationException),
- ],
-)
-def test_ss_create_op_exception(m_ss_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "present",
- "name": "ss1",
- "display_name": "Storage Service 1",
- "hardware_types": ["flash-array-x"],
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_service = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_storage_service = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_service = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_service = MagicMock(return_value=OperationMock(3))
- m_ss_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(side_effect=exec_original)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_ss.main()
-
- # check api was called correctly
- api_obj.get_storage_service.assert_called_once_with(
- storage_service_name=module_args["name"]
- )
- api_obj.create_storage_service.assert_called_once_with(
- purefusion.StorageServicePost(
- name=module_args["name"],
- display_name=module_args["display_name"],
- hardware_types=module_args["hardware_types"],
- )
- )
- api_obj.update_storage_service.assert_not_called()
- api_obj.delete_storage_service.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageServicesApi")
-def test_ss_update(m_ss_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "ss1",
- "display_name": "Storage Service 1",
- "hardware_types": ["flash-array-x"],
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_ss = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": None,
- "hardware_types": ["flash-array-c"], # is different but shouldn't be patched!
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_service = MagicMock(
- return_value=purefusion.StorageService(**current_ss)
- )
- api_obj.create_storage_service = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_service = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_service = MagicMock(return_value=OperationMock(3))
- m_ss_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_ss.main()
-
- assert exc.value.changed
- assert exc.value.id == current_ss["id"]
-
- # check api was called correctly
- api_obj.get_storage_service.assert_called_once_with(
- storage_service_name=module_args["name"]
- )
- api_obj.create_storage_service.assert_not_called()
- api_obj.update_storage_service.assert_called_once_with(
- purefusion.StorageServicePatch(
- display_name=purefusion.NullableString(module_args["display_name"])
- ),
- storage_service_name=module_args["name"],
- )
- api_obj.delete_storage_service.assert_not_called()
- op_obj.get_operation.assert_called_once_with(2)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageServicesApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_ss_update_exception(m_ss_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "present",
- "name": "ss1",
- "display_name": "Storage Service 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_ss = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": None,
- "hardware_types": ["flash-array-x"],
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_service = MagicMock(
- return_value=purefusion.StorageService(**current_ss)
- )
- api_obj.create_storage_service = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_service = MagicMock(side_effect=exec_original)
- api_obj.delete_storage_service = MagicMock(return_value=OperationMock(3))
- m_ss_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_ss.main()
-
- # check api was called correctly
- api_obj.get_storage_service.assert_called_once_with(
- storage_service_name=module_args["name"]
- )
- api_obj.create_storage_service.assert_not_called()
- api_obj.update_storage_service.assert_called_once_with(
- purefusion.StorageServicePatch(
- display_name=purefusion.NullableString(module_args["display_name"])
- ),
- storage_service_name=module_args["name"],
- )
- api_obj.delete_storage_service.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageServicesApi")
-def test_ss_update_op_fails(m_ss_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "ss1",
- "display_name": "Storage Service 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_ss = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": None,
- "hardware_types": ["flash-array-x"],
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_service = MagicMock(
- return_value=purefusion.StorageService(**current_ss)
- )
- api_obj.create_storage_service = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_service = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_service = MagicMock(return_value=OperationMock(3))
- m_ss_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(OperationException):
- fusion_ss.main()
-
- # check api was called correctly
- api_obj.get_storage_service.assert_called_once_with(
- storage_service_name=module_args["name"]
- )
- api_obj.create_storage_service.assert_not_called()
- api_obj.update_storage_service.assert_called_once_with(
- purefusion.StorageServicePatch(
- display_name=purefusion.NullableString(module_args["display_name"])
- ),
- storage_service_name=module_args["name"],
- )
- api_obj.delete_storage_service.assert_not_called()
- op_obj.get_operation.assert_called_once_with(2)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageServicesApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, OperationException),
- ],
-)
-def test_ss_update_op_exception(m_ss_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "present",
- "name": "ss1",
- "display_name": "Storage Service 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_ss = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": None,
- "hardware_types": ["flash-array-x"],
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_service = MagicMock(
- return_value=purefusion.StorageService(**current_ss)
- )
- api_obj.create_storage_service = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_service = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_service = MagicMock(return_value=OperationMock(3))
- m_ss_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(side_effect=exec_original)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_ss.main()
-
- # check api was called correctly
- api_obj.get_storage_service.assert_called_once_with(
- storage_service_name=module_args["name"]
- )
- api_obj.create_storage_service.assert_not_called()
- api_obj.update_storage_service.assert_called_once_with(
- purefusion.StorageServicePatch(
- display_name=purefusion.NullableString(module_args["display_name"])
- ),
- storage_service_name=module_args["name"],
- )
- api_obj.delete_storage_service.assert_not_called()
- op_obj.get_operation.assert_called_once_with(2)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageServicesApi")
-def test_ss_present_not_changed(m_ss_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "ss1",
- "display_name": "Storage Service 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_ss = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": module_args["display_name"],
- "hardware_types": ["flash-array-x"],
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_service = MagicMock(
- return_value=purefusion.StorageService(**current_ss)
- )
- api_obj.create_storage_service = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_service = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_service = MagicMock(return_value=OperationMock(3))
- m_ss_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_ss.main()
-
- assert not exc.value.changed
-
- # check api was called correctly
- api_obj.get_storage_service.assert_called_once_with(
- storage_service_name=module_args["name"]
- )
- api_obj.create_storage_service.assert_not_called()
- api_obj.update_storage_service.assert_not_called()
- api_obj.delete_storage_service.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageServicesApi")
-def test_ss_absent_not_changed(m_ss_api, m_op_api):
- module_args = {
- "state": "absent",
- "name": "ss1",
- "display_name": "Storage Service 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_service = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_storage_service = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_service = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_service = MagicMock(return_value=OperationMock(3))
- m_ss_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_ss.main()
-
- assert not exc.value.changed
-
- # check api was called correctly
- api_obj.get_storage_service.assert_called_once_with(
- storage_service_name=module_args["name"]
- )
- api_obj.create_storage_service.assert_not_called()
- api_obj.update_storage_service.assert_not_called()
- api_obj.delete_storage_service.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageServicesApi")
-def test_ss_delete(m_ss_api, m_op_api):
- module_args = {
- "state": "absent",
- "name": "ss1",
- "display_name": "Storage Service 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_ss = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": "different", # display_name doesn't match but UPDATE shouldn't be called
- "hardware_types": ["flash-array-x"],
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_service = MagicMock(
- return_value=purefusion.StorageService(**current_ss)
- )
- api_obj.create_storage_service = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_service = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_service = MagicMock(return_value=OperationMock(3))
- m_ss_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_ss.main()
-
- assert exc.value.changed
-
- # check api was called correctly
- api_obj.get_storage_service.assert_called_once_with(
- storage_service_name=module_args["name"]
- )
- api_obj.create_storage_service.assert_not_called()
- api_obj.update_storage_service.assert_not_called()
- api_obj.delete_storage_service.assert_called_once_with(
- storage_service_name=module_args["name"]
- )
- op_obj.get_operation.assert_called_once_with(3)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageServicesApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_ss_delete_exception(m_ss_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "absent",
- "name": "ss1",
- "display_name": "Storage Service 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_ss = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": "different", # display_name doesn't match but UPDATE shouldn't be called
- "hardware_types": ["flash-array-x"],
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_service = MagicMock(
- return_value=purefusion.StorageService(**current_ss)
- )
- api_obj.create_storage_service = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_service = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_service = MagicMock(side_effect=exec_original)
- m_ss_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_ss.main()
-
- # check api was called correctly
- api_obj.get_storage_service.assert_called_once_with(
- storage_service_name=module_args["name"]
- )
- api_obj.create_storage_service.assert_not_called()
- api_obj.update_storage_service.assert_not_called()
- api_obj.delete_storage_service.assert_called_once_with(
- storage_service_name=module_args["name"]
- )
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageServicesApi")
-def test_ss_delete_op_fails(m_ss_api, m_op_api):
- module_args = {
- "state": "absent",
- "name": "ss1",
- "display_name": "Storage Service 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_ss = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": "different", # display_name doesn't match but UPDATE shouldn't be called
- "hardware_types": ["flash-array-x"],
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_service = MagicMock(
- return_value=purefusion.StorageService(**current_ss)
- )
- api_obj.create_storage_service = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_service = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_service = MagicMock(return_value=OperationMock(3))
- m_ss_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(OperationException):
- fusion_ss.main()
-
- # check api was called correctly
- api_obj.get_storage_service.assert_called_once_with(
- storage_service_name=module_args["name"]
- )
- api_obj.create_storage_service.assert_not_called()
- api_obj.update_storage_service.assert_not_called()
- api_obj.delete_storage_service.assert_called_once_with(
- storage_service_name=module_args["name"]
- )
- op_obj.get_operation.assert_called_once_with(3)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.StorageServicesApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, OperationException),
- ],
-)
-def test_ss_delete_op_exception(m_ss_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "absent",
- "name": "ss1",
- "display_name": "Storage Service 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_ss = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": "different", # display_name doesn't match but UPDATE shouldn't be called
- "hardware_types": ["flash-array-x"],
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_storage_service = MagicMock(
- return_value=purefusion.StorageService(**current_ss)
- )
- api_obj.create_storage_service = MagicMock(return_value=OperationMock(1))
- api_obj.update_storage_service = MagicMock(return_value=OperationMock(2))
- api_obj.delete_storage_service = MagicMock(return_value=OperationMock(3))
- m_ss_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(side_effect=exec_original)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_ss.main()
-
- # check api was called correctly
- api_obj.get_storage_service.assert_called_once_with(
- storage_service_name=module_args["name"]
- )
- api_obj.create_storage_service.assert_not_called()
- api_obj.update_storage_service.assert_not_called()
- api_obj.delete_storage_service.assert_called_once_with(
- storage_service_name=module_args["name"]
- )
- op_obj.get_operation.assert_called_once_with(3)
diff --git a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_tenant.py b/ansible_collections/purestorage/fusion/tests/functional/test_fusion_tenant.py
deleted file mode 100644
index 11cd71171..000000000
--- a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_tenant.py
+++ /dev/null
@@ -1,807 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# (c) 2023, Andrej Pajtas (apajtas@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-from unittest.mock import MagicMock, patch
-
-import fusion as purefusion
-import pytest
-from ansible.module_utils import basic
-from ansible_collections.purestorage.fusion.plugins.module_utils.errors import (
- OperationException,
-)
-from ansible_collections.purestorage.fusion.plugins.modules import fusion_tenant
-from ansible_collections.purestorage.fusion.tests.functional.utils import (
- AnsibleExitJson,
- AnsibleFailJson,
- FailedOperationMock,
- OperationMock,
- SuccessfulOperationMock,
- FAKE_RESOURCE_ID,
- exit_json,
- fail_json,
- set_module_args,
-)
-from urllib3.exceptions import HTTPError
-
-# GLOBAL MOCKS
-fusion_tenant.setup_fusion = MagicMock(return_value=purefusion.api_client.ApiClient())
-purefusion.api_client.ApiClient.call_api = MagicMock(
- side_effect=Exception("API call not mocked!")
-)
-basic.AnsibleModule.exit_json = exit_json
-basic.AnsibleModule.fail_json = fail_json
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.TenantsApi")
-@pytest.mark.parametrize(
- "module_args",
- [
- # required parameter 'name` is missing
- {
- "state": "present",
- "display_name": "Tenant 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- # unknown parameter 'extra' is provided
- {
- "state": "present",
- "name": "tenant1",
- "display_name": "Tenant 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- "extra": "value",
- },
- # parameter 'state` has incorrect value
- {
- "state": "cool",
- "name": "tenant1",
- "display_name": "Tenant 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- ],
-)
-def test_module_fails_on_wrong_parameters(m_tenant_api, m_op_api, module_args):
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_tenant = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_tenant = MagicMock(return_value=OperationMock(1))
- api_obj.update_tenant = MagicMock(return_value=OperationMock(2))
- api_obj.delete_tenant = MagicMock(return_value=OperationMock(3))
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
- m_tenant_api.return_value = api_obj
-
- # run module
- with pytest.raises(AnsibleFailJson):
- fusion_tenant.main()
-
- # check api was not called at all
- api_obj.get_tenant.assert_not_called()
- api_obj.create_tenant.assert_not_called()
- api_obj.update_tenant.assert_not_called()
- api_obj.delete_tenant.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.TenantsApi")
-def test_tenant_create(m_tenant_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "tenant1",
- "display_name": "Tenant 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_tenant = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_tenant = MagicMock(return_value=OperationMock(1))
- api_obj.update_tenant = MagicMock(return_value=OperationMock(2))
- api_obj.delete_tenant = MagicMock(return_value=OperationMock(3))
- m_tenant_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_tenant.main()
-
- assert exc.value.changed
- assert exc.value.id == FAKE_RESOURCE_ID
-
- # check api was called correctly
- api_obj.get_tenant.assert_called_once_with(tenant_name=module_args["name"])
- api_obj.create_tenant.assert_called_once_with(
- purefusion.TenantPost(
- name=module_args["name"],
- display_name=module_args["display_name"],
- )
- )
- api_obj.update_tenant.assert_not_called()
- api_obj.delete_tenant.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.TenantsApi")
-def test_tenant_create_without_display_name(m_tenant_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "tenant1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_tenant = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_tenant = MagicMock(return_value=OperationMock(1))
- api_obj.update_tenant = MagicMock(return_value=OperationMock(2))
- api_obj.delete_tenant = MagicMock(return_value=OperationMock(3))
- m_tenant_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_tenant.main()
-
- assert exc.value.changed
- assert exc.value.id == FAKE_RESOURCE_ID
-
- # check api was called correctly
- api_obj.get_tenant.assert_called_once_with(tenant_name=module_args["name"])
- api_obj.create_tenant.assert_called_once_with(
- purefusion.TenantPost(
- name=module_args["name"],
- display_name=module_args["name"],
- )
- )
- api_obj.update_tenant.assert_not_called()
- api_obj.delete_tenant.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.TenantsApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_tenant_create_exception(m_tenant_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "present",
- "name": "tenant1",
- "display_name": "Tenant 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_tenant = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_tenant = MagicMock(side_effect=exec_original)
- api_obj.update_tenant = MagicMock(return_value=OperationMock(2))
- api_obj.delete_tenant = MagicMock(return_value=OperationMock(3))
- m_tenant_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_tenant.main()
-
- # check api was called correctly
- api_obj.get_tenant.assert_called_once_with(tenant_name=module_args["name"])
- api_obj.create_tenant.assert_called_once_with(
- purefusion.TenantPost(
- name=module_args["name"],
- display_name=module_args["display_name"],
- )
- )
- api_obj.update_tenant.assert_not_called()
- api_obj.delete_tenant.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.TenantsApi")
-def test_tenant_create_op_fails(m_tenant_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "tenant1",
- "display_name": "Tenant 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_tenant = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_tenant = MagicMock(return_value=OperationMock(1))
- api_obj.update_tenant = MagicMock(return_value=OperationMock(2))
- api_obj.delete_tenant = MagicMock(return_value=OperationMock(3))
- m_tenant_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(OperationException):
- fusion_tenant.main()
-
- # check api was called correctly
- api_obj.get_tenant.assert_called_once_with(tenant_name=module_args["name"])
- api_obj.create_tenant.assert_called_once_with(
- purefusion.TenantPost(
- name=module_args["name"],
- display_name=module_args["display_name"],
- )
- )
- api_obj.update_tenant.assert_not_called()
- api_obj.delete_tenant.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.TenantsApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, OperationException),
- ],
-)
-def test_tenant_create_op_exception(m_tenant_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "present",
- "name": "tenant1",
- "display_name": "Tenant 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_tenant = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_tenant = MagicMock(return_value=OperationMock(1))
- api_obj.update_tenant = MagicMock(return_value=OperationMock(2))
- api_obj.delete_tenant = MagicMock(return_value=OperationMock(3))
- m_tenant_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(side_effect=exec_original)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_tenant.main()
-
- # check api was called correctly
- api_obj.get_tenant.assert_called_once_with(tenant_name=module_args["name"])
- api_obj.create_tenant.assert_called_once_with(
- purefusion.TenantPost(
- name=module_args["name"],
- display_name=module_args["display_name"],
- )
- )
- api_obj.update_tenant.assert_not_called()
- api_obj.delete_tenant.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.TenantsApi")
-def test_tenant_update(m_tenant_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "tenant1",
- "display_name": "Tenant 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_tenant = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": None,
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_tenant = MagicMock(return_value=purefusion.Tenant(**current_tenant))
- api_obj.create_tenant = MagicMock(return_value=OperationMock(1))
- api_obj.update_tenant = MagicMock(return_value=OperationMock(2))
- api_obj.delete_tenant = MagicMock(return_value=OperationMock(3))
- m_tenant_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_tenant.main()
-
- assert exc.value.changed
- assert exc.value.id == current_tenant["id"]
-
- # check api was called correctly
- api_obj.get_tenant.assert_called_once_with(tenant_name=module_args["name"])
- api_obj.create_tenant.assert_not_called()
- api_obj.update_tenant.assert_called_once_with(
- purefusion.TenantPatch(
- display_name=purefusion.NullableString(module_args["display_name"])
- ),
- tenant_name=module_args["name"],
- )
- api_obj.delete_tenant.assert_not_called()
- op_obj.get_operation.assert_called_once_with(2)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.TenantsApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_tenant_update_exception(m_tenant_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "present",
- "name": "tenant1",
- "display_name": "Tenant 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_tenant = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": None,
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_tenant = MagicMock(return_value=purefusion.Tenant(**current_tenant))
- api_obj.create_tenant = MagicMock(return_value=OperationMock(1))
- api_obj.update_tenant = MagicMock(side_effect=exec_original)
- api_obj.delete_tenant = MagicMock(return_value=OperationMock(3))
- m_tenant_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_tenant.main()
-
- # check api was called correctly
- api_obj.get_tenant.assert_called_once_with(tenant_name=module_args["name"])
- api_obj.create_tenant.assert_not_called()
- api_obj.update_tenant.assert_called_once_with(
- purefusion.TenantPatch(
- display_name=purefusion.NullableString(module_args["display_name"])
- ),
- tenant_name=module_args["name"],
- )
- api_obj.delete_tenant.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.TenantsApi")
-def test_tenant_update_op_fails(m_tenant_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "tenant1",
- "display_name": "Tenant 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_tenant = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": None,
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_tenant = MagicMock(return_value=purefusion.Tenant(**current_tenant))
- api_obj.create_tenant = MagicMock(return_value=OperationMock(1))
- api_obj.update_tenant = MagicMock(return_value=OperationMock(2))
- api_obj.delete_tenant = MagicMock(return_value=OperationMock(3))
- m_tenant_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(OperationException):
- fusion_tenant.main()
-
- # check api was called correctly
- api_obj.get_tenant.assert_called_once_with(tenant_name=module_args["name"])
- api_obj.create_tenant.assert_not_called()
- api_obj.update_tenant.assert_called_once_with(
- purefusion.TenantPatch(
- display_name=purefusion.NullableString(module_args["display_name"])
- ),
- tenant_name=module_args["name"],
- )
- api_obj.delete_tenant.assert_not_called()
- op_obj.get_operation.assert_called_once_with(2)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.TenantsApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, OperationException),
- ],
-)
-def test_tenant_update_op_exception(m_tenant_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "present",
- "name": "tenant1",
- "display_name": "Tenant 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_tenant = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": None,
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_tenant = MagicMock(return_value=purefusion.Tenant(**current_tenant))
- api_obj.create_tenant = MagicMock(return_value=OperationMock(1))
- api_obj.update_tenant = MagicMock(return_value=OperationMock(2))
- api_obj.delete_tenant = MagicMock(return_value=OperationMock(3))
- m_tenant_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(side_effect=exec_original)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_tenant.main()
-
- # check api was called correctly
- api_obj.get_tenant.assert_called_once_with(tenant_name=module_args["name"])
- api_obj.create_tenant.assert_not_called()
- api_obj.update_tenant.assert_called_once_with(
- purefusion.TenantPatch(
- display_name=purefusion.NullableString(module_args["display_name"])
- ),
- tenant_name=module_args["name"],
- )
- api_obj.delete_tenant.assert_not_called()
- op_obj.get_operation.assert_called_once_with(2)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.TenantsApi")
-def test_tenant_present_not_changed(m_tenant_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "tenant1",
- "display_name": "Tenant 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_tenant = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": module_args["display_name"],
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_tenant = MagicMock(return_value=purefusion.Tenant(**current_tenant))
- api_obj.create_tenant = MagicMock(return_value=OperationMock(1))
- api_obj.update_tenant = MagicMock(return_value=OperationMock(2))
- api_obj.delete_tenant = MagicMock(return_value=OperationMock(3))
- m_tenant_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_tenant.main()
-
- assert not exc.value.changed
-
- # check api was called correctly
- api_obj.get_tenant.assert_called_once_with(tenant_name=module_args["name"])
- api_obj.create_tenant.assert_not_called()
- api_obj.update_tenant.assert_not_called()
- api_obj.delete_tenant.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.TenantsApi")
-def test_tenant_absent_not_changed(m_tenant_api, m_op_api):
- module_args = {
- "state": "absent",
- "name": "tenant1",
- "display_name": "Tenant 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_tenant = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_tenant = MagicMock(return_value=OperationMock(1))
- api_obj.update_tenant = MagicMock(return_value=OperationMock(2))
- api_obj.delete_tenant = MagicMock(return_value=OperationMock(3))
- m_tenant_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_tenant.main()
-
- assert not exc.value.changed
-
- # check api was called correctly
- api_obj.get_tenant.assert_called_once_with(tenant_name=module_args["name"])
- api_obj.create_tenant.assert_not_called()
- api_obj.update_tenant.assert_not_called()
- api_obj.delete_tenant.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.TenantsApi")
-def test_tenant_delete(m_tenant_api, m_op_api):
- module_args = {
- "state": "absent",
- "name": "tenant1",
- "display_name": "Tenant 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_tenant = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": "different", # display_name doesn't match but UPDATE shouldn't be called
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_tenant = MagicMock(return_value=purefusion.Tenant(**current_tenant))
- api_obj.create_tenant = MagicMock(return_value=OperationMock(1))
- api_obj.update_tenant = MagicMock(return_value=OperationMock(2))
- api_obj.delete_tenant = MagicMock(return_value=OperationMock(3))
- m_tenant_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_tenant.main()
-
- assert exc.value.changed
-
- # check api was called correctly
- api_obj.get_tenant.assert_called_once_with(tenant_name=module_args["name"])
- api_obj.create_tenant.assert_not_called()
- api_obj.update_tenant.assert_not_called()
- api_obj.delete_tenant.assert_called_once_with(tenant_name=module_args["name"])
- op_obj.get_operation.assert_called_once_with(3)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.TenantsApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_tenant_delete_exception(m_tenant_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "absent",
- "name": "tenant1",
- "display_name": "Tenant 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_tenant = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": "different", # display_name doesn't match but UPDATE shouldn't be called
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_tenant = MagicMock(return_value=purefusion.Tenant(**current_tenant))
- api_obj.create_tenant = MagicMock(return_value=OperationMock(1))
- api_obj.update_tenant = MagicMock(return_value=OperationMock(2))
- api_obj.delete_tenant = MagicMock(side_effect=exec_original)
- m_tenant_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_tenant.main()
-
- # check api was called correctly
- api_obj.get_tenant.assert_called_once_with(tenant_name=module_args["name"])
- api_obj.create_tenant.assert_not_called()
- api_obj.update_tenant.assert_not_called()
- api_obj.delete_tenant.assert_called_once_with(tenant_name=module_args["name"])
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.TenantsApi")
-def test_tenant_delete_op_fails(m_tenant_api, m_op_api):
- module_args = {
- "state": "absent",
- "name": "tenant1",
- "display_name": "Tenant 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_tenant = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": "different", # display_name doesn't match but UPDATE shouldn't be called
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_tenant = MagicMock(return_value=purefusion.Tenant(**current_tenant))
- api_obj.create_tenant = MagicMock(return_value=OperationMock(1))
- api_obj.update_tenant = MagicMock(return_value=OperationMock(2))
- api_obj.delete_tenant = MagicMock(return_value=OperationMock(3))
- m_tenant_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(OperationException):
- fusion_tenant.main()
-
- # check api was called correctly
- api_obj.get_tenant.assert_called_once_with(tenant_name=module_args["name"])
- api_obj.create_tenant.assert_not_called()
- api_obj.update_tenant.assert_not_called()
- api_obj.delete_tenant.assert_called_once_with(tenant_name=module_args["name"])
- op_obj.get_operation.assert_called_once_with(3)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.TenantsApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, OperationException),
- ],
-)
-def test_tenant_delete_op_exception(m_tenant_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "absent",
- "name": "tenant1",
- "display_name": "Tenant 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_tenant = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "display_name": "different", # display_name doesn't match but UPDATE shouldn't be called
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_tenant = MagicMock(return_value=purefusion.Tenant(**current_tenant))
- api_obj.create_tenant = MagicMock(return_value=OperationMock(1))
- api_obj.update_tenant = MagicMock(return_value=OperationMock(2))
- api_obj.delete_tenant = MagicMock(return_value=OperationMock(3))
- m_tenant_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(side_effect=exec_original)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_tenant.main()
-
- # check api was called correctly
- api_obj.get_tenant.assert_called_once_with(tenant_name=module_args["name"])
- api_obj.create_tenant.assert_not_called()
- api_obj.update_tenant.assert_not_called()
- api_obj.delete_tenant.assert_called_once_with(tenant_name=module_args["name"])
- op_obj.get_operation.assert_called_once_with(3)
diff --git a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_ts.py b/ansible_collections/purestorage/fusion/tests/functional/test_fusion_ts.py
deleted file mode 100644
index 0e1260858..000000000
--- a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_ts.py
+++ /dev/null
@@ -1,926 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# (c) 2023, Andrej Pajtas (apajtas@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-from unittest.mock import MagicMock, patch
-
-import fusion as purefusion
-import pytest
-from ansible.module_utils import basic
-from ansible_collections.purestorage.fusion.plugins.module_utils.errors import (
- OperationException,
-)
-from ansible_collections.purestorage.fusion.plugins.modules import fusion_ts
-from ansible_collections.purestorage.fusion.tests.functional.utils import (
- AnsibleExitJson,
- AnsibleFailJson,
- FailedOperationMock,
- OperationMock,
- SuccessfulOperationMock,
- FAKE_RESOURCE_ID,
- exit_json,
- fail_json,
- set_module_args,
-)
-from urllib3.exceptions import HTTPError
-
-# GLOBAL MOCKS
-fusion_ts.setup_fusion = MagicMock(return_value=purefusion.api_client.ApiClient())
-purefusion.api_client.ApiClient.call_api = MagicMock(
- side_effect=Exception("API call not mocked!")
-)
-basic.AnsibleModule.exit_json = exit_json
-basic.AnsibleModule.fail_json = fail_json
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.TenantSpacesApi")
-@pytest.mark.parametrize(
- "module_args",
- [
- # required parameter 'name` is missing
- {
- "state": "present",
- "display_name": "Tenanct Space 1",
- "tenant": "tenant1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- # required tenant 'name` is missing
- {
- "state": "present",
- "name": "tenantspace1",
- "display_name": "Tenanct Space 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- # unknown parameter 'extra' is provided
- {
- "state": "present",
- "name": "tenantspace1",
- "display_name": "Tenanct Space 1",
- "tenant": "tenant1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- "extra": "value",
- },
- # parameter 'state` has incorrect value
- {
- "state": "cool",
- "name": "tenantspace1",
- "display_name": "Tenanct Space 1",
- "tenant": "tenant1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- },
- ],
-)
-def test_module_fails_on_wrong_parameters(m_ts_api, m_op_api, module_args):
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_tenant_space = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_tenant_space = MagicMock(return_value=OperationMock(1))
- api_obj.update_tenant_space = MagicMock(return_value=OperationMock(2))
- api_obj.delete_tenant_space = MagicMock(return_value=OperationMock(3))
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
- m_ts_api.return_value = api_obj
-
- # run module
- with pytest.raises(AnsibleFailJson):
- fusion_ts.main()
-
- # check api was not called at all
- api_obj.get_tenant_space.assert_not_called()
- api_obj.create_tenant_space.assert_not_called()
- api_obj.update_tenant_space.assert_not_called()
- api_obj.delete_tenant_space.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.TenantSpacesApi")
-def test_ts_create(m_ts_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "tenantspace1",
- "display_name": "Tenanct Space 1",
- "tenant": "tenant1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_tenant_space = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_tenant_space = MagicMock(return_value=OperationMock(1))
- api_obj.update_tenant_space = MagicMock(return_value=OperationMock(2))
- api_obj.delete_tenant_space = MagicMock(return_value=OperationMock(3))
- m_ts_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_ts.main()
-
- assert exc.value.changed
- assert exc.value.id == FAKE_RESOURCE_ID
-
- # check api was called correctly
- api_obj.get_tenant_space.assert_called_once_with(
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["name"],
- )
- api_obj.create_tenant_space.assert_called_once_with(
- purefusion.TenantSpacePost(
- name=module_args["name"],
- display_name=module_args["display_name"],
- ),
- tenant_name=module_args["tenant"],
- )
- api_obj.update_tenant_space.assert_not_called()
- api_obj.delete_tenant_space.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.TenantSpacesApi")
-def test_ts_create_without_display_name(m_ts_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "tenantspace1",
- "tenant": "tenant1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_tenant_space = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_tenant_space = MagicMock(return_value=OperationMock(1))
- api_obj.update_tenant_space = MagicMock(return_value=OperationMock(2))
- api_obj.delete_tenant_space = MagicMock(return_value=OperationMock(3))
- m_ts_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_ts.main()
-
- assert exc.value.changed
- assert exc.value.id == FAKE_RESOURCE_ID
-
- # check api was called correctly
- api_obj.get_tenant_space.assert_called_once_with(
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["name"],
- )
- api_obj.create_tenant_space.assert_called_once_with(
- purefusion.TenantSpacePost(
- name=module_args["name"],
- display_name=module_args["name"],
- ),
- tenant_name=module_args["tenant"],
- )
- api_obj.update_tenant_space.assert_not_called()
- api_obj.delete_tenant_space.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.TenantSpacesApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_ts_create_exception(m_ts_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "present",
- "name": "tenantspace1",
- "display_name": "Tenanct Space 1",
- "tenant": "tenant1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_tenant_space = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_tenant_space = MagicMock(side_effect=exec_original)
- api_obj.update_tenant_space = MagicMock(return_value=OperationMock(2))
- api_obj.delete_tenant_space = MagicMock(return_value=OperationMock(3))
- m_ts_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_ts.main()
-
- # check api was called correctly
- api_obj.get_tenant_space.assert_called_once_with(
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["name"],
- )
- api_obj.create_tenant_space.assert_called_once_with(
- purefusion.TenantSpacePost(
- name=module_args["name"],
- display_name=module_args["display_name"],
- ),
- tenant_name=module_args["tenant"],
- )
- api_obj.update_tenant_space.assert_not_called()
- api_obj.delete_tenant_space.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.TenantSpacesApi")
-def test_ts_create_op_fails(m_ts_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "tenantspace1",
- "display_name": "Tenanct Space 1",
- "tenant": "tenant1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_tenant_space = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_tenant_space = MagicMock(return_value=OperationMock(1))
- api_obj.update_tenant_space = MagicMock(return_value=OperationMock(2))
- api_obj.delete_tenant_space = MagicMock(return_value=OperationMock(3))
- m_ts_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(OperationException):
- fusion_ts.main()
-
- # check api was called correctly
- api_obj.get_tenant_space.assert_called_once_with(
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["name"],
- )
- api_obj.create_tenant_space.assert_called_once_with(
- purefusion.TenantSpacePost(
- name=module_args["name"],
- display_name=module_args["display_name"],
- ),
- tenant_name=module_args["tenant"],
- )
- api_obj.update_tenant_space.assert_not_called()
- api_obj.delete_tenant_space.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.TenantSpacesApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, OperationException),
- ],
-)
-def test_ts_create_op_exception(m_ts_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "present",
- "name": "tenantspace1",
- "display_name": "Tenanct Space 1",
- "tenant": "tenant1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_tenant_space = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_tenant_space = MagicMock(return_value=OperationMock(1))
- api_obj.update_tenant_space = MagicMock(return_value=OperationMock(2))
- api_obj.delete_tenant_space = MagicMock(return_value=OperationMock(3))
- m_ts_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(side_effect=exec_original)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_ts.main()
-
- # check api was called correctly
- api_obj.get_tenant_space.assert_called_once_with(
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["name"],
- )
- api_obj.create_tenant_space.assert_called_once_with(
- purefusion.TenantSpacePost(
- name=module_args["name"],
- display_name=module_args["display_name"],
- ),
- tenant_name=module_args["tenant"],
- )
- api_obj.update_tenant_space.assert_not_called()
- api_obj.delete_tenant_space.assert_not_called()
- op_obj.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.TenantSpacesApi")
-def test_ts_update(m_ts_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "tenantspace1",
- "display_name": "Tenanct Space 1",
- "tenant": "tenant1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_ts = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "tenant": "tenant1",
- "display_name": None,
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_tenant_space = MagicMock(
- return_value=purefusion.TenantSpace(**current_ts)
- )
- api_obj.create_tenant_space = MagicMock(return_value=OperationMock(1))
- api_obj.update_tenant_space = MagicMock(return_value=OperationMock(2))
- api_obj.delete_tenant_space = MagicMock(return_value=OperationMock(3))
- m_ts_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_ts.main()
-
- assert exc.value.changed
- assert exc.value.id == current_ts["id"]
-
- # check api was called correctly
- api_obj.get_tenant_space.assert_called_once_with(
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["name"],
- )
- api_obj.create_tenant_space.assert_not_called()
- api_obj.update_tenant_space.assert_called_once_with(
- purefusion.TenantSpacePatch(
- display_name=purefusion.NullableString(module_args["display_name"])
- ),
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["name"],
- )
- api_obj.delete_tenant_space.assert_not_called()
- op_obj.get_operation.assert_called_once_with(2)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.TenantSpacesApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_ts_update_exception(m_ts_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "present",
- "name": "tenantspace1",
- "display_name": "Tenanct Space 1",
- "tenant": "tenant1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_ts = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "tenant": "tenant1",
- "display_name": None,
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_tenant_space = MagicMock(
- return_value=purefusion.TenantSpace(**current_ts)
- )
- api_obj.create_tenant_space = MagicMock(return_value=OperationMock(1))
- api_obj.update_tenant_space = MagicMock(side_effect=exec_original)
- api_obj.delete_tenant_space = MagicMock(return_value=OperationMock(3))
- m_ts_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_ts.main()
-
- # check api was called correctly
- api_obj.get_tenant_space.assert_called_once_with(
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["name"],
- )
- api_obj.create_tenant_space.assert_not_called()
- api_obj.update_tenant_space.assert_called_once_with(
- purefusion.TenantSpacePatch(
- display_name=purefusion.NullableString(module_args["display_name"])
- ),
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["name"],
- )
- api_obj.delete_tenant_space.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.TenantSpacesApi")
-def test_ts_update_op_fails(m_ts_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "tenantspace1",
- "display_name": "Tenanct Space 1",
- "tenant": "tenant1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_ts = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "tenant": "tenant1",
- "display_name": None,
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_tenant_space = MagicMock(
- return_value=purefusion.TenantSpace(**current_ts)
- )
- api_obj.create_tenant_space = MagicMock(return_value=OperationMock(1))
- api_obj.update_tenant_space = MagicMock(return_value=OperationMock(2))
- api_obj.delete_tenant_space = MagicMock(return_value=OperationMock(3))
- m_ts_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(OperationException):
- fusion_ts.main()
-
- # check api was called correctly
- api_obj.get_tenant_space.assert_called_once_with(
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["name"],
- )
- api_obj.create_tenant_space.assert_not_called()
- api_obj.update_tenant_space.assert_called_once_with(
- purefusion.TenantSpacePatch(
- display_name=purefusion.NullableString(module_args["display_name"])
- ),
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["name"],
- )
- api_obj.delete_tenant_space.assert_not_called()
- op_obj.get_operation.assert_called_once_with(2)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.TenantSpacesApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, OperationException),
- ],
-)
-def test_ts_update_op_exception(m_ts_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "present",
- "name": "tenantspace1",
- "display_name": "Tenanct Space 1",
- "tenant": "tenant1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_ts = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "tenant": "tenant1",
- "display_name": None,
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_tenant_space = MagicMock(
- return_value=purefusion.TenantSpace(**current_ts)
- )
- api_obj.create_tenant_space = MagicMock(return_value=OperationMock(1))
- api_obj.update_tenant_space = MagicMock(return_value=OperationMock(2))
- api_obj.delete_tenant_space = MagicMock(return_value=OperationMock(3))
- m_ts_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(side_effect=exec_original)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_ts.main()
-
- # check api was called correctly
- api_obj.get_tenant_space.assert_called_once_with(
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["name"],
- )
- api_obj.create_tenant_space.assert_not_called()
- api_obj.update_tenant_space.assert_called_once_with(
- purefusion.TenantSpacePatch(
- display_name=purefusion.NullableString(module_args["display_name"])
- ),
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["name"],
- )
- api_obj.delete_tenant_space.assert_not_called()
- op_obj.get_operation.assert_called_once_with(2)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.TenantSpacesApi")
-def test_ts_present_not_changed(m_ts_api, m_op_api):
- module_args = {
- "state": "present",
- "name": "tenantspace1",
- "display_name": "Tenanct Space 1",
- "tenant": "tenant1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_ts = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "tenant": "tenant1",
- "display_name": module_args["display_name"],
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_tenant_space = MagicMock(
- return_value=purefusion.TenantSpace(**current_ts)
- )
- api_obj.create_tenant_space = MagicMock(return_value=OperationMock(1))
- api_obj.update_tenant_space = MagicMock(return_value=OperationMock(2))
- api_obj.delete_tenant_space = MagicMock(return_value=OperationMock(3))
- m_ts_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_ts.main()
-
- assert not exc.value.changed
-
- # check api was called correctly
- api_obj.get_tenant_space.assert_called_once_with(
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["name"],
- )
- api_obj.create_tenant_space.assert_not_called()
- api_obj.update_tenant_space.assert_not_called()
- api_obj.delete_tenant_space.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.TenantSpacesApi")
-def test_ts_absent_not_changed(m_ts_api, m_op_api):
- module_args = {
- "state": "absent",
- "name": "tenantspace1",
- "tenant": "tenant1",
- "display_name": "Tenanct Space 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_tenant_space = MagicMock(side_effect=purefusion.rest.ApiException)
- api_obj.create_tenant_space = MagicMock(return_value=OperationMock(1))
- api_obj.update_tenant_space = MagicMock(return_value=OperationMock(2))
- api_obj.delete_tenant_space = MagicMock(return_value=OperationMock(3))
- m_ts_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_ts.main()
-
- assert not exc.value.changed
-
- # check api was called correctly
- api_obj.get_tenant_space.assert_called_once_with(
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["name"],
- )
- api_obj.create_tenant_space.assert_not_called()
- api_obj.update_tenant_space.assert_not_called()
- api_obj.delete_tenant_space.assert_not_called()
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.TenantSpacesApi")
-def test_ts_delete(m_ts_api, m_op_api):
- module_args = {
- "state": "absent",
- "name": "tenantspace1",
- "tenant": "tenant1",
- "display_name": "Tenanct Space 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_ts = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "tenant": "tenant1",
- "display_name": "different", # display_name doesn't match but UPDATE shouldn't be called
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_tenant_space = MagicMock(
- return_value=purefusion.TenantSpace(**current_ts)
- )
- api_obj.create_tenant_space = MagicMock(return_value=OperationMock(1))
- api_obj.update_tenant_space = MagicMock(return_value=OperationMock(2))
- api_obj.delete_tenant_space = MagicMock(return_value=OperationMock(3))
- m_ts_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(AnsibleExitJson) as exc:
- fusion_ts.main()
-
- assert exc.value.changed
-
- # check api was called correctly
- api_obj.get_tenant_space.assert_called_once_with(
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["name"],
- )
- api_obj.create_tenant_space.assert_not_called()
- api_obj.update_tenant_space.assert_not_called()
- api_obj.delete_tenant_space.assert_called_once_with(
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["name"],
- )
- op_obj.get_operation.assert_called_once_with(3)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.TenantSpacesApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_ts_delete_exception(m_ts_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "absent",
- "name": "tenantspace1",
- "tenant": "tenant1",
- "display_name": "Tenanct Space 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_ts = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "tenant": "tenant1",
- "display_name": "different", # display_name doesn't match but UPDATE shouldn't be called
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_tenant_space = MagicMock(
- return_value=purefusion.TenantSpace(**current_ts)
- )
- api_obj.create_tenant_space = MagicMock(return_value=OperationMock(1))
- api_obj.update_tenant_space = MagicMock(return_value=OperationMock(2))
- api_obj.delete_tenant_space = MagicMock(side_effect=exec_original)
- m_ts_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_ts.main()
-
- # check api was called correctly
- api_obj.get_tenant_space.assert_called_once_with(
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["name"],
- )
- api_obj.create_tenant_space.assert_not_called()
- api_obj.update_tenant_space.assert_not_called()
- api_obj.delete_tenant_space.assert_called_once_with(
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["name"],
- )
- op_obj.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.TenantSpacesApi")
-def test_ts_delete_op_fails(m_ts_api, m_op_api):
- module_args = {
- "state": "absent",
- "name": "tenantspace1",
- "tenant": "tenant1",
- "display_name": "Tenanct Space 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_ts = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "tenant": "tenant1",
- "display_name": "different", # display_name doesn't match but UPDATE shouldn't be called
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_tenant_space = MagicMock(
- return_value=purefusion.TenantSpace(**current_ts)
- )
- api_obj.create_tenant_space = MagicMock(return_value=OperationMock(1))
- api_obj.update_tenant_space = MagicMock(return_value=OperationMock(2))
- api_obj.delete_tenant_space = MagicMock(return_value=OperationMock(3))
- m_ts_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(return_value=FailedOperationMock)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(OperationException):
- fusion_ts.main()
-
- # check api was called correctly
- api_obj.get_tenant_space.assert_called_once_with(
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["name"],
- )
- api_obj.create_tenant_space.assert_not_called()
- api_obj.update_tenant_space.assert_not_called()
- api_obj.delete_tenant_space.assert_called_once_with(
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["name"],
- )
- op_obj.get_operation.assert_called_once_with(3)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.TenantSpacesApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, OperationException),
- ],
-)
-def test_ts_delete_op_exception(m_ts_api, m_op_api, exec_original, exec_catch):
- module_args = {
- "state": "absent",
- "name": "tenantspace1",
- "tenant": "tenant1",
- "display_name": "Tenanct Space 1",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
- current_ts = {
- "id": 1,
- "self_link": "self_link_value",
- "name": module_args["name"], # name must match
- "tenant": "tenant1",
- "display_name": "different", # display_name doesn't match but UPDATE shouldn't be called
- }
- set_module_args(module_args)
-
- # mock api responses
- api_obj = MagicMock()
- api_obj.get_tenant_space = MagicMock(
- return_value=purefusion.TenantSpace(**current_ts)
- )
- api_obj.create_tenant_space = MagicMock(return_value=OperationMock(1))
- api_obj.update_tenant_space = MagicMock(return_value=OperationMock(2))
- api_obj.delete_tenant_space = MagicMock(return_value=OperationMock(3))
- m_ts_api.return_value = api_obj
-
- # mock operation results
- op_obj = MagicMock()
- op_obj.get_operation = MagicMock(side_effect=exec_original)
- m_op_api.return_value = op_obj
-
- # run module
- with pytest.raises(exec_catch):
- fusion_ts.main()
-
- # check api was called correctly
- api_obj.get_tenant_space.assert_called_once_with(
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["name"],
- )
- api_obj.create_tenant_space.assert_not_called()
- api_obj.update_tenant_space.assert_not_called()
- api_obj.delete_tenant_space.assert_called_once_with(
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["name"],
- )
- op_obj.get_operation.assert_called_once_with(3)
diff --git a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_volume.py b/ansible_collections/purestorage/fusion/tests/functional/test_fusion_volume.py
deleted file mode 100644
index 43f69666e..000000000
--- a/ansible_collections/purestorage/fusion/tests/functional/test_fusion_volume.py
+++ /dev/null
@@ -1,861 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# (c) 2023, Dmitriy Li (dmli@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-from unittest.mock import MagicMock, call, patch
-
-import fusion as purefusion
-import pytest
-from ansible.module_utils import basic
-from ansible_collections.purestorage.fusion.plugins.module_utils.errors import (
- OperationException,
-)
-from ansible_collections.purestorage.fusion.plugins.modules import (
- fusion_volume,
-)
-from ansible_collections.purestorage.fusion.tests.functional.utils import (
- AnsibleExitJson,
- AnsibleFailJson,
- OperationMock,
- SuccessfulOperationMock,
- FAKE_RESOURCE_ID,
- exit_json,
- fail_json,
- set_module_args,
-)
-from urllib3.exceptions import HTTPError
-
-# GLOBAL MOCKS
-fusion_volume.setup_fusion = MagicMock(return_value=purefusion.api_client.ApiClient())
-purefusion.api_client.ApiClient.call_api = MagicMock(
- side_effect=Exception("API call not mocked!")
-)
-basic.AnsibleModule.exit_json = exit_json
-basic.AnsibleModule.fail_json = fail_json
-
-
-@pytest.fixture
-def module_args():
- return {
- "name": "volume_1",
- "state": "present",
- "display_name": "Volume 1",
- "tenant": "t1",
- "tenant_space": "ts1",
- "placement_group": "pg1",
- "storage_class": "sc1",
- "protection_policy": "pp1",
- "host_access_policies": ["hap1"],
- "eradicate": False,
- "size": "1M",
- "issuer_id": "ABCD1234",
- "private_key_file": "private-key.pem",
- }
-
-
-@pytest.fixture
-def absent_module_args(module_args):
- module_args.update(
- {"host_access_policies": [], "eradicate": True, "state": "absent"}
- )
- return module_args
-
-
-@pytest.fixture
-def volume():
- return {
- "name": "volume_1",
- "display_name": "Volume 1",
- "tenant": "t1",
- "tenant_space": "ts1",
- "storage_class": purefusion.StorageClassRef(
- name="sc1", id="id_1", kind="storage_class", self_link="self_link"
- ),
- "placement_group": purefusion.PlacementGroupRef(
- name="pg1", id="id_1", kind="placement_group", self_link="self_link"
- ),
- "protection_policy": purefusion.ProtectionPolicyRef(
- name="pp1", id="id_1", kind="protection_policy", self_link="self_link"
- ),
- "host_access_policies": [
- purefusion.HostAccessPolicyRef(
- name="hap1", id="id_1", kind="host_access_policy", self_link="self_link"
- )
- ],
- "serial_number": "sn1",
- "destroyed": False,
- "size": 1048576,
- "id": "id_1",
- "self_link": "self_link",
- }
-
-
-@pytest.fixture
-def destroyed_volume(volume):
- volume.update({"host_access_policies": [], "destroyed": True})
- return volume
-
-
-@patch("fusion.VolumesApi")
-@pytest.mark.parametrize(
- "field,expected_exception_regex",
- [
- (
- "name",
- "missing required arguments: name",
- ),
- (
- "tenant",
- "missing required arguments: tenant",
- ),
- (
- "tenant_space",
- "missing required arguments: tenant_space",
- ),
- (
- "storage_class",
- "missing parameter\\(s\\) required by 'placement_group': storage_class",
- ),
- (
- "placement_group",
- "missing required arguments: placement_group",
- ),
- (
- "size",
- "Either `size`, `source_volume` or `source_snapshot` parameter is required when creating a volume.",
- ),
- ],
-)
-def test_module_fails_on_missing_parameters(
- mock_volumes_api, field, expected_exception_regex, module_args
-):
- volumes_api = purefusion.VolumesApi()
- volumes_api.get_volume = MagicMock(side_effect=purefusion.rest.ApiException)
- mock_volumes_api.return_value = volumes_api
- del module_args[field]
- set_module_args(module_args)
- # run module
- with pytest.raises(AnsibleFailJson) as ansible_error:
- fusion_volume.main()
- assert ansible_error.match(expected_exception_regex)
-
-
-@patch("fusion.VolumesApi")
-@pytest.mark.parametrize(
- "dict_update,expected_exception_regex",
- [
- (
- {"extra": "value"},
- "Unsupported parameters for.*module: extra",
- ),
- (
- {"state": "absent"},
- "Volume must have no host access policies when destroyed",
- ),
- (
- {"eradicate": True},
- "'eradicate: true' cannot be used together with 'state: present'",
- ),
- (
- {"size": "1K"},
- "Size is not within the required range",
- ),
- (
- {"source_volume": "vol_name"},
- "parameters are mutually exclusive: source_volume|source_snapshot|size",
- ),
- (
- {"source_snapshot": "snap_name"},
- "parameters are mutually exclusive: source_volume|source_snapshot|size",
- ),
- (
- {"source_volume_snapshot": "vol_snap_name"},
- "parameters are required together: source_snapshot, source_volume_snapshot",
- ),
- ],
-)
-def test_module_fails_on_incorrect_parameters(
- mock_volumes_api, dict_update, expected_exception_regex, module_args
-):
- volumes_api = purefusion.VolumesApi()
- volumes_api.get_volume = MagicMock(side_effect=purefusion.rest.ApiException)
- mock_volumes_api.return_value = volumes_api
- module_args.update(dict_update)
- set_module_args(module_args)
- # run module
- with pytest.raises(AnsibleFailJson) as ansible_error:
- fusion_volume.main()
- assert ansible_error.match(expected_exception_regex)
-
-
-@patch("fusion.VolumesApi")
-def test_module_not_existent_volume_with_state_absent_not_changed(
- mock_volumes_api, module_args
-):
- volumes_api = purefusion.VolumesApi()
- volumes_api.get_volume = MagicMock(side_effect=purefusion.rest.ApiException)
- mock_volumes_api.return_value = volumes_api
- del module_args["host_access_policies"]
- module_args["state"] = "absent"
- set_module_args(module_args)
- # run module
- with pytest.raises(AnsibleExitJson) as exception:
- fusion_volume.main()
- assert exception.value.changed is False
- volumes_api.get_volume.assert_called_once_with(
- volume_name=module_args["name"],
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["tenant_space"],
- )
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.VolumesApi")
-def test_volume_create_successfully(mock_volumes_api, mock_operations_api, module_args):
- operations_api = purefusion.OperationsApi()
- volumes_api = purefusion.VolumesApi()
- volumes_api.get_volume = MagicMock(side_effect=purefusion.rest.ApiException)
- volumes_api.create_volume = MagicMock(return_value=OperationMock(1))
- operations_api.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- mock_volumes_api.return_value = volumes_api
- mock_operations_api.return_value = operations_api
- set_module_args(module_args)
- # run module
- with pytest.raises(AnsibleExitJson) as exception:
- fusion_volume.main()
- assert exception.value.changed is True
- assert exception.value.id == FAKE_RESOURCE_ID
-
- volumes_api.get_volume.assert_called_with(
- volume_name=module_args["name"],
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["tenant_space"],
- )
- volumes_api.create_volume.assert_called_once_with(
- purefusion.VolumePost(
- size=1048576,
- storage_class=module_args["storage_class"],
- placement_group=module_args["placement_group"],
- name=module_args["name"],
- display_name=module_args["display_name"],
- protection_policy=module_args["protection_policy"],
- ),
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["tenant_space"],
- )
- operations_api.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.VolumesApi")
-def test_volume_create_from_volume_successfully(
- mock_volumes_api, mock_operations_api, module_args
-):
- del module_args["size"]
- module_args["source_volume"] = "source_volume_name"
-
- operations_api = purefusion.OperationsApi()
- volumes_api = purefusion.VolumesApi()
- volumes_api.get_volume = MagicMock(side_effect=purefusion.rest.ApiException)
- volumes_api.create_volume = MagicMock(return_value=OperationMock(1))
- operations_api.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- mock_volumes_api.return_value = volumes_api
- mock_operations_api.return_value = operations_api
- set_module_args(module_args)
- # run module
- with pytest.raises(AnsibleExitJson) as exception:
- fusion_volume.main()
- assert exception.value.changed is True
- assert exception.value.id == FAKE_RESOURCE_ID
- volumes_api.get_volume.assert_called_with(
- volume_name=module_args["name"],
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["tenant_space"],
- )
- volumes_api.create_volume.assert_called_once_with(
- purefusion.VolumePost(
- source_link=f"/tenants/{module_args['tenant']}/tenant-spaces/{module_args['tenant_space']}/volumes/{module_args['source_volume']}",
- storage_class=module_args["storage_class"],
- placement_group=module_args["placement_group"],
- name=module_args["name"],
- display_name=module_args["display_name"],
- protection_policy=module_args["protection_policy"],
- ),
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["tenant_space"],
- )
- operations_api.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.VolumesApi")
-def test_volume_create_from_volume_snapshot_successfully(
- mock_volumes_api, mock_operations_api, module_args
-):
- del module_args["size"]
- module_args["source_snapshot"] = "source_snapshot_name"
- module_args["source_volume_snapshot"] = "source_volume_snapshot_name"
-
- operations_api = purefusion.OperationsApi()
- volumes_api = purefusion.VolumesApi()
- volumes_api.get_volume = MagicMock(side_effect=purefusion.rest.ApiException)
- volumes_api.create_volume = MagicMock(return_value=OperationMock(1))
- operations_api.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- mock_volumes_api.return_value = volumes_api
- mock_operations_api.return_value = operations_api
- set_module_args(module_args)
- # run module
- with pytest.raises(AnsibleExitJson) as exception:
- fusion_volume.main()
- assert exception.value.changed is True
- assert exception.value.id == FAKE_RESOURCE_ID
- volumes_api.get_volume.assert_called_with(
- volume_name=module_args["name"],
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["tenant_space"],
- )
- volumes_api.create_volume.assert_called_once_with(
- purefusion.VolumePost(
- source_link=f"/tenants/{module_args['tenant']}/tenant-spaces/{module_args['tenant_space']}/snapshots/"
- f"{module_args['source_snapshot']}/volume-snapshots/{module_args['source_volume_snapshot']}",
- storage_class=module_args["storage_class"],
- placement_group=module_args["placement_group"],
- name=module_args["name"],
- display_name=module_args["display_name"],
- protection_policy=module_args["protection_policy"],
- ),
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["tenant_space"],
- )
- operations_api.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.VolumesApi")
-def test_volume_create_without_display_name_successfully(
- mock_volumes_api, mock_operations_api, module_args
-):
- del module_args["display_name"]
- operations_api = purefusion.OperationsApi()
- volumes_api = purefusion.VolumesApi()
- volumes_api.get_volume = MagicMock(side_effect=purefusion.rest.ApiException)
- volumes_api.create_volume = MagicMock(return_value=OperationMock(1))
- operations_api.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- mock_volumes_api.return_value = volumes_api
- mock_operations_api.return_value = operations_api
- set_module_args(module_args)
- # run module
- with pytest.raises(AnsibleExitJson) as exception:
- fusion_volume.main()
- assert exception.value.changed is True
- assert exception.value.id == FAKE_RESOURCE_ID
- volumes_api.get_volume.assert_called_with(
- volume_name=module_args["name"],
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["tenant_space"],
- )
- volumes_api.create_volume.assert_called_with(
- purefusion.VolumePost(
- size=1048576,
- storage_class=module_args["storage_class"],
- placement_group=module_args["placement_group"],
- name=module_args["name"],
- display_name=module_args["name"],
- protection_policy=module_args["protection_policy"],
- ),
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["tenant_space"],
- )
- operations_api.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.VolumesApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_volume_create_throws_exception(
- mock_volumes_api, mock_operations_api, exec_original, exec_catch, module_args
-):
- operations_api = purefusion.OperationsApi()
- volumes_api = purefusion.VolumesApi()
- volumes_api.get_volume = MagicMock(side_effect=purefusion.rest.ApiException)
- volumes_api.create_volume = MagicMock(side_effect=exec_original)
- operations_api.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- mock_volumes_api.return_value = volumes_api
- mock_operations_api.return_value = operations_api
- set_module_args(module_args)
- # run module
- with pytest.raises(exec_catch):
- fusion_volume.main()
- volumes_api.get_volume.assert_called_with(
- volume_name=module_args["name"],
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["tenant_space"],
- )
- volumes_api.create_volume.assert_called_once_with(
- purefusion.VolumePost(
- size=1048576,
- storage_class=module_args["storage_class"],
- placement_group=module_args["placement_group"],
- name=module_args["name"],
- display_name=module_args["display_name"],
- protection_policy=module_args["protection_policy"],
- ),
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["tenant_space"],
- )
- operations_api.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.VolumesApi")
-@pytest.mark.parametrize(
- "updated_volume,called_with",
- [
- (
- {"destroyed": True},
- purefusion.VolumePatch(destroyed=purefusion.NullableBoolean(False)),
- ),
- (
- {"size": 1000000},
- purefusion.VolumePatch(size=purefusion.NullableSize(1048576)),
- ),
- (
- {
- "protection_policy": purefusion.ProtectionPolicyRef(
- name="pp2",
- id="id_1",
- kind="protection_policy",
- self_link="self_link",
- )
- },
- purefusion.VolumePatch(protection_policy=purefusion.NullableString("pp1")),
- ),
- (
- {"display_name": "Volume"},
- purefusion.VolumePatch(display_name=purefusion.NullableString("Volume 1")),
- ),
- (
- {
- "storage_class": purefusion.StorageClassRef(
- name="sc2", id="id_1", kind="storage_class", self_link="self_link"
- )
- },
- purefusion.VolumePatch(storage_class=purefusion.NullableString("sc1")),
- ),
- (
- {
- "placement_group": purefusion.PlacementGroupRef(
- name="pg2", id="id_1", kind="placement_group", self_link="self_link"
- )
- },
- purefusion.VolumePatch(placement_group=purefusion.NullableString("pg1")),
- ),
- (
- {
- "host_access_policies": [
- purefusion.HostAccessPolicyRef(
- name="hap2",
- id="id_1",
- kind="host_access_policy",
- self_link="self_link",
- )
- ]
- },
- purefusion.VolumePatch(
- host_access_policies=purefusion.NullableString("hap1")
- ),
- ),
- ],
-)
-def test_volume_update_with_state_present_executed_correctly(
- mock_volumes_api,
- mock_operations_api,
- updated_volume,
- called_with,
- module_args,
- volume,
-):
- volume.update(updated_volume)
- operations_api = purefusion.OperationsApi()
- volumes_api = purefusion.VolumesApi()
- volumes_api.get_volume = MagicMock(return_value=purefusion.Volume(**volume))
- volumes_api.update_volume = MagicMock(return_value=OperationMock(1))
- operations_api.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- mock_volumes_api.return_value = volumes_api
- mock_operations_api.return_value = operations_api
- set_module_args(module_args)
- # run module
- with pytest.raises(AnsibleExitJson) as exception:
- fusion_volume.main()
- assert exception.value.changed is True
- assert exception.value.id == volume["id"]
- volumes_api.get_volume.assert_called_with(
- volume_name=module_args["name"],
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["tenant_space"],
- )
- volumes_api.update_volume.assert_called_once_with(
- called_with,
- volume_name=module_args["name"],
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["tenant_space"],
- )
- operations_api.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.VolumesApi")
-@pytest.mark.parametrize(
- "updated_volume,called_with",
- [
- (
- {"destroyed": False, "host_access_policies": []},
- purefusion.VolumePatch(destroyed=purefusion.NullableBoolean(True)),
- )
- ],
-)
-def test_volume_update_with_state_absent_executed_correctly(
- mock_volumes_api,
- mock_operations_api,
- updated_volume,
- called_with,
- module_args,
- volume,
-):
- module_args["state"] = "absent"
- del module_args["host_access_policies"]
- volume.update(updated_volume)
- operations_api = purefusion.OperationsApi()
- volumes_api = purefusion.VolumesApi()
- volumes_api.get_volume = MagicMock(return_value=purefusion.Volume(**volume))
- volumes_api.update_volume = MagicMock(return_value=OperationMock(1))
- operations_api.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- mock_volumes_api.return_value = volumes_api
- mock_operations_api.return_value = operations_api
- set_module_args(module_args)
- # run module
- with pytest.raises(AnsibleExitJson) as exception:
- fusion_volume.main()
- assert exception.value.changed is True
- assert exception.value.id == volume["id"]
- volumes_api.get_volume.assert_called_with(
- volume_name=module_args["name"],
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["tenant_space"],
- )
- volumes_api.update_volume.assert_called_once_with(
- called_with,
- volume_name=module_args["name"],
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["tenant_space"],
- )
- operations_api.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.VolumesApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_volume_update_throws_exception(
- mock_volumes_api,
- mock_operations_api,
- exec_original,
- exec_catch,
- module_args,
- volume,
-):
- module_args["display_name"] = "volume"
- operations_api = purefusion.OperationsApi()
- volumes_api = purefusion.VolumesApi()
- volumes_api.get_volume = MagicMock(return_value=purefusion.Volume(**volume))
- volumes_api.update_volume = MagicMock(side_effect=exec_original)
- operations_api.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- mock_volumes_api.return_value = volumes_api
- mock_operations_api.return_value = operations_api
- set_module_args(module_args)
- # run module
- with pytest.raises(exec_catch):
- fusion_volume.main()
-
- volumes_api.get_volume.assert_called_with(
- volume_name=module_args["name"],
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["tenant_space"],
- )
- volumes_api.update_volume.assert_called_once_with(
- purefusion.VolumePatch(
- display_name=purefusion.NullableString(module_args["display_name"])
- ),
- volume_name=module_args["name"],
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["tenant_space"],
- )
- operations_api.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.VolumesApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, OperationException),
- ],
-)
-def test_volume_update_operation_throws_exception(
- mock_volumes_api,
- mock_operations_api,
- exec_original,
- exec_catch,
- module_args,
- volume,
-):
- module_args["display_name"] = "volume"
- operations_api = purefusion.OperationsApi()
- volumes_api = purefusion.VolumesApi()
- volumes_api.get_volume = MagicMock(return_value=purefusion.Volume(**volume))
- volumes_api.update_volume = MagicMock(return_value=OperationMock(1))
- operations_api.get_operation = MagicMock(side_effect=exec_original)
- mock_volumes_api.return_value = volumes_api
- mock_operations_api.return_value = operations_api
- set_module_args(module_args)
- # run module
- with pytest.raises(exec_catch):
- fusion_volume.main()
-
- volumes_api.get_volume.assert_called_with(
- volume_name=module_args["name"],
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["tenant_space"],
- )
- volumes_api.update_volume.assert_called_once_with(
- purefusion.VolumePatch(
- display_name=purefusion.NullableString(module_args["display_name"])
- ),
- volume_name=module_args["name"],
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["tenant_space"],
- )
- operations_api.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.VolumesApi")
-def test_volume_delete_throws_validation_error(
- mock_volumes_api, mock_operations_api, absent_module_args, volume
-):
- volume["host_access_policies"] = []
- operations_api = purefusion.OperationsApi()
- volumes_api = purefusion.VolumesApi()
- volumes_api.get_volume = MagicMock(return_value=purefusion.Volume(**volume))
- volumes_api.update_volume = MagicMock(return_value=OperationMock(1))
- volumes_api.delete_volume = MagicMock(return_value=OperationMock(2))
-
- operations_api.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- mock_volumes_api.return_value = volumes_api
- mock_operations_api.return_value = operations_api
- set_module_args(absent_module_args)
- # run module
- with pytest.raises(AnsibleFailJson) as ansible_fail:
- fusion_volume.main()
- assert ansible_fail.match(regexp="BUG: inconsistent state, eradicate_volume")
- volumes_api.get_volume.assert_called_with(
- volume_name=absent_module_args["name"],
- tenant_name=absent_module_args["tenant"],
- tenant_space_name=absent_module_args["tenant_space"],
- )
- volumes_api.update_volume.assert_called_once_with(
- purefusion.VolumePatch(destroyed=purefusion.NullableBoolean(True)),
- volume_name=absent_module_args["name"],
- tenant_name=absent_module_args["tenant"],
- tenant_space_name=absent_module_args["tenant_space"],
- )
- volumes_api.delete_volume.assert_not_called()
- operations_api.get_operation.assert_called_once_with(1)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.VolumesApi")
-def test_volume_delete_executed_correctly(
- mock_volumes_api, mock_operations_api, absent_module_args, destroyed_volume
-):
- operations_api = purefusion.OperationsApi()
- volumes_api = purefusion.VolumesApi()
- volumes_api.get_volume = MagicMock(
- return_value=purefusion.Volume(**destroyed_volume)
- )
- volumes_api.update_volume = MagicMock(return_value=OperationMock(1))
- volumes_api.delete_volume = MagicMock(return_value=OperationMock(2))
-
- operations_api.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- mock_volumes_api.return_value = volumes_api
- mock_operations_api.return_value = operations_api
- set_module_args(absent_module_args)
- # run module
- with pytest.raises(AnsibleExitJson):
- fusion_volume.main()
- volumes_api.get_volume.assert_called_with(
- volume_name=absent_module_args["name"],
- tenant_name=absent_module_args["tenant"],
- tenant_space_name=absent_module_args["tenant_space"],
- )
- volumes_api.update_volume.assert_not_called()
- volumes_api.delete_volume.assert_called_once_with(
- volume_name=absent_module_args["name"],
- tenant_name=absent_module_args["tenant"],
- tenant_space_name=absent_module_args["tenant_space"],
- )
- operations_api.get_operation.assert_called_once_with(2)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.VolumesApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, HTTPError),
- ],
-)
-def test_volume_delete_throws_exception(
- mock_volumes_api,
- mock_operations_api,
- exec_original,
- exec_catch,
- absent_module_args,
- destroyed_volume,
-):
- operations_api = purefusion.OperationsApi()
- volumes_api = purefusion.VolumesApi()
- volumes_api.get_volume = MagicMock(
- return_value=purefusion.Volume(**destroyed_volume)
- )
- volumes_api.update_volume = MagicMock(return_value=OperationMock(1))
- volumes_api.delete_volume = MagicMock(side_effect=exec_original)
-
- operations_api.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- mock_volumes_api.return_value = volumes_api
- mock_operations_api.return_value = operations_api
- set_module_args(absent_module_args)
- # run module
- with pytest.raises(exec_catch):
- fusion_volume.main()
- volumes_api.get_volume.assert_called_with(
- volume_name=absent_module_args["name"],
- tenant_name=absent_module_args["tenant"],
- tenant_space_name=absent_module_args["tenant_space"],
- )
- volumes_api.update_volume.assert_not_called()
- volumes_api.delete_volume.assert_called_once_with(
- volume_name=absent_module_args["name"],
- tenant_name=absent_module_args["tenant"],
- tenant_space_name=absent_module_args["tenant_space"],
- )
-
- operations_api.get_operation.assert_not_called()
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.VolumesApi")
-@pytest.mark.parametrize(
- "exec_original,exec_catch",
- [
- (purefusion.rest.ApiException, purefusion.rest.ApiException),
- (HTTPError, OperationException),
- ],
-)
-def test_volume_delete_operation_throws_exception(
- mock_volumes_api,
- mock_operations_api,
- exec_original,
- exec_catch,
- absent_module_args,
- destroyed_volume,
-):
- operations_api = purefusion.OperationsApi()
- volumes_api = purefusion.VolumesApi()
- volumes_api.get_volume = MagicMock(
- return_value=purefusion.Volume(**destroyed_volume)
- )
- volumes_api.update_volume = MagicMock(return_value=OperationMock(1))
- volumes_api.delete_volume = MagicMock(return_value=OperationMock(2))
-
- operations_api.get_operation = MagicMock(side_effect=exec_original)
- mock_volumes_api.return_value = volumes_api
- mock_operations_api.return_value = operations_api
- set_module_args(absent_module_args)
- # run module
- with pytest.raises(exec_catch):
- fusion_volume.main()
- volumes_api.get_volume.assert_called_with(
- volume_name=absent_module_args["name"],
- tenant_name=absent_module_args["tenant"],
- tenant_space_name=absent_module_args["tenant_space"],
- )
- volumes_api.update_volume.assert_not_called()
- volumes_api.delete_volume.assert_called_once_with(
- volume_name=absent_module_args["name"],
- tenant_name=absent_module_args["tenant"],
- tenant_space_name=absent_module_args["tenant_space"],
- )
- operations_api.get_operation.assert_called_once_with(2)
-
-
-@patch("fusion.OperationsApi")
-@patch("fusion.VolumesApi")
-def test_module_updates_on_empty_array_of_haps(
- mock_volumes_api, mock_operations_api, module_args, volume
-):
- volumes_api = purefusion.VolumesApi()
- operations_api = purefusion.OperationsApi()
- volumes_api.get_volume = MagicMock(return_value=purefusion.Volume(**volume))
- volumes_api.update_volume = MagicMock(return_value=OperationMock(1))
- operations_api.get_operation = MagicMock(return_value=SuccessfulOperationMock)
- mock_operations_api.return_value = operations_api
- mock_volumes_api.return_value = volumes_api
- module_args.update({"state": "absent", "host_access_policies": []})
- set_module_args(module_args)
- # run module
- with pytest.raises(AnsibleExitJson) as exception:
- fusion_volume.main()
- assert exception.value.changed is True
- assert exception.value.id == volume["id"]
- volumes_api.get_volume.assert_called_with(
- volume_name=module_args["name"],
- tenant_name=module_args["tenant"],
- tenant_space_name=module_args["tenant_space"],
- )
- volumes_api.update_volume.assert_has_calls(
- [
- call(
- purefusion.VolumePatch(
- host_access_policies=purefusion.NullableString(",".join([]))
- ),
- volume_name=volume["name"],
- tenant_name=volume["tenant"],
- tenant_space_name=volume["tenant_space"],
- ),
- call(
- purefusion.VolumePatch(destroyed=purefusion.NullableBoolean(True)),
- volume_name=volume["name"],
- tenant_name=volume["tenant"],
- tenant_space_name=volume["tenant_space"],
- ),
- ]
- )
diff --git a/ansible_collections/purestorage/fusion/tests/functional/utils.py b/ansible_collections/purestorage/fusion/tests/functional/utils.py
deleted file mode 100644
index 53e501bc0..000000000
--- a/ansible_collections/purestorage/fusion/tests/functional/utils.py
+++ /dev/null
@@ -1,131 +0,0 @@
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-import json
-from dataclasses import dataclass
-
-from ansible.module_utils import basic
-from ansible.module_utils.common.text.converters import to_bytes
-from ansible_collections.purestorage.fusion.tests.helpers import (
- OperationResultsDict,
-)
-
-FAKE_RESOURCE_ID = "fake-id-12345"
-
-
-@dataclass
-class OperationMock:
- """
- Mock Operation object. This object should be returned by mocked api.
- """
-
- def __init__(self, id=None, success=None):
- if success is None:
- self.status = "Pending"
- elif success:
- self.status = "Succeeded"
- self.result = OperationResultsDict(
- {"resource": OperationResultsDict({"id": FAKE_RESOURCE_ID})}
- )
- else:
- self.status = "Failed"
- self.id = id
-
-
-class SuccessfulOperationMock:
- """
- Mock object for successful operation. This object is returned by mocked Operation API if the operation was successful.
- """
-
- result = OperationResultsDict(
- {"resource": OperationResultsDict({"id": FAKE_RESOURCE_ID})}
- )
- status = "Succeeded"
-
-
-class FailedOperationMock:
- """
- Mock object for failed operation. This object is returned by mocked Operation API if the operation failed.
- """
-
- status = "Failed"
-
-
-def set_module_args(args):
- """
- Prepare arguments so that they will be picked up during module creation.
- Docs: https://docs.ansible.com/ansible/latest/dev_guide/testing_units_modules.html
- """
-
- args = json.dumps({"ANSIBLE_MODULE_ARGS": args})
- basic._ANSIBLE_ARGS = to_bytes(args)
-
-
-class AnsibleExitJson(Exception):
- """
- Exception class to be raised by module.exit_json and caught by the test case
- Docs: https://docs.ansible.com/ansible/latest/dev_guide/testing_units_modules.html
- """
-
- def __init__(self, kwargs):
- self.kwargs = kwargs
-
- @property
- def changed(self):
- return self.kwargs["changed"]
-
- @property
- def id(self):
- return self.kwargs["id"]
-
- @property
- def fusion_info(self):
- return self.kwargs["fusion_info"] if "fusion_info" in self.kwargs else None
-
-
-class AnsibleFailJson(Exception):
- """
- Exception class to be raised by module.fail_json and caught by the test case
- Docs: https://docs.ansible.com/ansible/latest/dev_guide/testing_units_modules.html
- """
-
- def __init__(self, msg, kwargs):
- super().__init__(msg)
- self.kwargs = kwargs
-
-
-def exit_json(self, **kwargs):
- """
- Function to patch over exit_json; package return data into an exception
- Docs: https://docs.ansible.com/ansible/latest/dev_guide/testing_units_modules.html
- """
-
- if "changed" not in kwargs:
- kwargs["changed"] = False
- raise AnsibleExitJson(kwargs)
-
-
-def fail_json(self, msg, **kwargs):
- """
- Function to patch over fail_json; package return data into an exception
- Docs: https://docs.ansible.com/ansible/latest/dev_guide/testing_units_modules.html
- """
- kwargs["failed"] = True
- raise AnsibleFailJson(msg, kwargs)
-
-
-def side_effects_with_exceptions(side_effects):
- """
- Assumes side_effects is a list. Works similarly to `MagicMock(side_effect=side_effects)`,
- but if item in the list is instance of an exception, it raises it instead of returning it.
- """
- side_effects = side_effects.copy()
-
- def _pop_side_effect(*args, **kwargs):
- i = side_effects.pop(0)
- if isinstance(i, Exception):
- raise i
- return i
-
- return _pop_side_effect
diff --git a/ansible_collections/purestorage/fusion/tests/helpers.py b/ansible_collections/purestorage/fusion/tests/helpers.py
deleted file mode 100644
index 76d51b6f7..000000000
--- a/ansible_collections/purestorage/fusion/tests/helpers.py
+++ /dev/null
@@ -1,37 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# (c) 2023, Denys Denysyev (ddenysyev@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-import fusion as purefusion
-
-from http import HTTPStatus
-
-
-class ApiExceptionsMockGenerator:
- @staticmethod
- def create_permission_denied():
- status = HTTPStatus.FORBIDDEN
- return purefusion.rest.ApiException(status=status, reason=status.phrase)
-
- @staticmethod
- def create_conflict():
- status = HTTPStatus.CONFLICT
- return purefusion.rest.ApiException(status=status, reason=status.phrase)
-
- @staticmethod
- def create_not_found():
- status = HTTPStatus.NOT_FOUND
- return purefusion.rest.ApiException(status=status, reason=status.phrase)
-
-
-class OperationResultsDict(dict):
- """dot.notation access to dictionary attributes"""
-
- __getattr__ = dict.get
- __setattr__ = dict.__setitem__
- __delattr__ = dict.__delitem__
diff --git a/ansible_collections/purestorage/fusion/tests/integration/README.md b/ansible_collections/purestorage/fusion/tests/integration/README.md
deleted file mode 100644
index 7ca8ee497..000000000
--- a/ansible_collections/purestorage/fusion/tests/integration/README.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# Integration tests
-
-## Running tests
-
-- Copy `tests/integration/integration_config.template` to `tests/integration/integration_config.yml` and fill out the
- env variables
-- Run with the following command:
- ```bash
- ansible-test integration
- ```
diff --git a/ansible_collections/purestorage/fusion/tests/integration/integration_config.template b/ansible_collections/purestorage/fusion/tests/integration/integration_config.template
deleted file mode 100644
index 3fd6e77d3..000000000
--- a/ansible_collections/purestorage/fusion/tests/integration/integration_config.template
+++ /dev/null
@@ -1,6 +0,0 @@
----
-test_env:
- FUSION_API_HOST: <FUSION_API_HOST>
- FUSION_ISSUER_ID: <API_ID>
- FUSION_PRIVATE_KEY_FILE: <PRIVATE_KEY>
- FUSION_TOKEN_ENDPOINT: <STAGING_TOKEN_ENDPOINT> \ No newline at end of file
diff --git a/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_az/tasks/main.yml b/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_az/tasks/main.yml
deleted file mode 100644
index b9c23fc8c..000000000
--- a/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_az/tasks/main.yml
+++ /dev/null
@@ -1,43 +0,0 @@
-- name: Create Availability Zone
- environment: "{{ test_env }}"
- purestorage.fusion.fusion_az:
- name: "test_az"
- display_name: "foo AZ"
- region: pure-us-west
- register: result
-- name: Validate the task
- ansible.builtin.assert:
- that:
- - result is success
- - result is changed
-
-- name: Collect Availability Zones and verify the zone exists
- environment: "{{ test_env }}"
- purestorage.fusion.fusion_info:
- gather_subset: availability_zones
- register: fusion_info
-- name: Validate the task
- ansible.builtin.assert:
- that: "'test_az' in fusion_info['fusion_info']['availability_zones']"
-
-- name: Delete AZ
- purestorage.fusion.fusion_az:
- name: "test_az"
- state: absent
- region: pure-us-west
- register: result
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that:
- - result is success
- - result is changed
-
-- name: Collect Availability Zones and verify the zone does not exist
- environment: "{{ test_env }}"
- purestorage.fusion.fusion_info:
- gather_subset: availability_zones
- register: fusion_info
-- name: Validate the task
- ansible.builtin.assert:
- that: "'test_az' not in fusion_info['fusion_info']['availability_zones']"
diff --git a/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_hap/tasks/main.yml b/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_hap/tasks/main.yml
deleted file mode 100644
index eaea92684..000000000
--- a/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_hap/tasks/main.yml
+++ /dev/null
@@ -1,42 +0,0 @@
-- name: Create new Linux host access policy
- purestorage.fusion.fusion_hap:
- name: hap_foo
- personality: linux
- iqn: "iqn.2005-03.com.RedHat:linux-host1"
- register: result
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that:
- - result is success
- - result is changed
-
-- name: Collect hosts and check the host exists
- purestorage.fusion.fusion_info:
- gather_subset: host_access_policies
- register: fusion_info
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that: "'hap_foo' in fusion_info['fusion_info']['host_access_policies']"
-
-- name: Delete host access policy
- purestorage.fusion.fusion_hap:
- name: hap_foo
- state: absent
- register: result
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that:
- - result is success
- - result is changed
-
-- name: Collect hosts and check the host does not exist
- purestorage.fusion.fusion_info:
- gather_subset: host_access_policies
- register: fusion_info
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that: "'hap_foo' not in fusion_info['fusion_info']['host_access_policies']"
diff --git a/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_ni/tasks/main.yml b/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_ni/tasks/main.yml
deleted file mode 100644
index 16b5359de..000000000
--- a/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_ni/tasks/main.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-# TODO: Currently not possible to remove network interface group from network interface
-
-# Prepare
-- name: Create new network interface group foo in AZ bar
- purestorage.fusion.fusion_nig:
- name: "interface_group1"
- availability_zone: az1
- region: pure-us-west
- state: present
- mtu: 1500
- gateway: 172.17.1.1
- prefix: 172.17.1.0/24
- register: result
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that:
- - result is success
-
-# Test network interfaces
-
-- name: Patch the network interface
- purestorage.fusion.fusion_ni:
- name: ct0.eth4
- region: pure-us-west
- availability_zone: az1
- array: doubleagent-2
- eth: 172.17.1.2/24
- enabled: true
- network_interface_group: "interface_group1"
- register: result
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that:
- - result is success
- - result is changed
diff --git a/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_nig/tasks/main.yml b/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_nig/tasks/main.yml
deleted file mode 100644
index 8e3ab298b..000000000
--- a/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_nig/tasks/main.yml
+++ /dev/null
@@ -1,48 +0,0 @@
-- name: Create new network interface group
- purestorage.fusion.fusion_nig:
- name: "foo_group"
- availability_zone: az1
- region: pure-us-west
- state: present
- mtu: 1500
- gateway: 172.17.17.1
- prefix: 172.17.17.0/24
- environment: "{{ test_env }}"
- register: result
-- name: Validate the task
- ansible.builtin.assert:
- that:
- - result is success
- - result is changed
-
-- name: Collect network_interface_groups and check the group exist
- purestorage.fusion.fusion_info:
- gather_subset: network_interface_groups
- register: fusion_info
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that: "'pure-us-west/az1/foo_group' in fusion_info['fusion_info']['network_interface_groups']"
-
-- name: Delete network interface group
- purestorage.fusion.fusion_nig:
- name: "foo_group"
- availability_zone: az1
- region: pure-us-west
- state: absent
- register: result
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that:
- - result is success
- - result is changed
-
-- name: Collect network_interface_groups and check the group does not exist
- purestorage.fusion.fusion_info:
- gather_subset: network_interface_groups
- register: fusion_info
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that: "'pure-us-west/az1/foo_group' not in fusion_info['fusion_info']['network_interface_groups']"
diff --git a/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_pg/tasks/main.yml b/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_pg/tasks/main.yml
deleted file mode 100644
index f4d50a653..000000000
--- a/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_pg/tasks/main.yml
+++ /dev/null
@@ -1,95 +0,0 @@
-# Prepare dependencies
-- name: Create new tenat foo_tenant
- purestorage.fusion.fusion_tenant:
- name: foo_tenant
- display_name: "tenant foo"
- environment: "{{ test_env }}"
-
-- name: Create new tenant space foo_tenant_space for tenant_foo
- purestorage.fusion.fusion_ts:
- name: foo_tenant_space
- tenant: foo_tenant
- state: present
- environment: "{{ test_env }}"
-
-- name: Create new storage service foo_service
- purestorage.fusion.fusion_ss:
- name: foo_service
- hardware_types:
- - flash-array-x
- display_name: "test class"
- environment: "{{ test_env }}"
-
-
-# Test placement groups
-
-- name: Create new placement group named foo_pg
- purestorage.fusion.fusion_pg:
- name: foo_pg
- tenant: foo_tenant
- tenant_space: foo_tenant_space
- availability_zone: az1
- region: pure-us-west
- storage_service: foo_service
- state: present
- register: result
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that:
- - result is success
- - result is changed
-
-- name: Collect placement_groups and check the placement group exists
- purestorage.fusion.fusion_info:
- gather_subset: placement_groups
- register: fusion_info
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that: "'foo_tenant/foo_tenant_space/foo_pg' in fusion_info['fusion_info']['placement_groups']"
-
-- name: Delete placement group foo
- purestorage.fusion.fusion_pg:
- name: foo_pg
- tenant: foo_tenant
- tenant_space: foo_tenant_space
- state: absent
- register: result
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that:
- - result is success
- - result is changed
-
-- name: Collect placement_groups and check the placement group does not exist
- purestorage.fusion.fusion_info:
- gather_subset: placement_groups
- register: fusion_info
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that: "'foo_tenant/foo_tenant_space/foo_pg' not in fusion_info['fusion_info']['placement_groups']"
-
-
-# Teardown dependencies
-
-- name: Delete storage service foo_service
- purestorage.fusion.fusion_ss:
- name: foo_service
- state: absent
- environment: "{{ test_env }}"
-
-- name: Delete foo_tenant_space
- purestorage.fusion.fusion_ts:
- name: foo_tenant_space
- tenant: foo_tenant
- state: absent
- environment: "{{ test_env }}"
-
-- name: Delete tenat foo
- purestorage.fusion.fusion_tenant:
- name: foo_tenant
- state: absent
- environment: "{{ test_env }}"
diff --git a/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_pp/tasks/main.yml b/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_pp/tasks/main.yml
deleted file mode 100644
index f8a126662..000000000
--- a/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_pp/tasks/main.yml
+++ /dev/null
@@ -1,43 +0,0 @@
-- name: Create new protection policy foo_pp
- purestorage.fusion.fusion_pp:
- name: foo_pp
- local_rpo: 10
- local_retention: 4d
- display_name: "foo pp"
- register: result
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that:
- - result is success
- - result is changed
-
-- name: Collect protection policies and check the policy exists
- purestorage.fusion.fusion_info:
- gather_subset: protection_policies
- register: fusion_info
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that: "'foo_pp' in fusion_info['fusion_info']['protection_policies']"
-
-- name: Delete protection policy foo_pp
- purestorage.fusion.fusion_pp:
- name: foo_pp
- state: absent
- register: result
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that:
- - result is success
- - result is changed
-
-- name: Collect protection policies and check the policy does not exist
- purestorage.fusion.fusion_info:
- gather_subset: protection_policies
- register: fusion_info
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that: "'foo_pp' not in fusion_info['fusion_info']['protection_policies']"
diff --git a/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_region/tasks/main.yml b/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_region/tasks/main.yml
deleted file mode 100644
index 8e0112f6d..000000000
--- a/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_region/tasks/main.yml
+++ /dev/null
@@ -1,53 +0,0 @@
-- name: Create Region foo_region
- purestorage.fusion.fusion_region:
- name: "foo_region"
- display_name: "foo Region"
- register: result
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that:
- - result is success
- - result is changed
-
-- name: Collect Regions and verify the region exists
- environment: "{{ test_env }}"
- purestorage.fusion.fusion_info:
- gather_subset: regions
- register: fusion_info
-- name: Validate the task
- ansible.builtin.assert:
- that: "'foo_region' in fusion_info['fusion_info']['regions']"
-
-- name: Update Region display_name
- purestorage.fusion.fusion_region:
- name: "foo_region"
- display_name: "new foo Region"
- register: result
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that:
- - result is success
- - result is changed
-
-- name: Delete Region
- purestorage.fusion.fusion_region:
- name: "foo_region"
- state: absent
- register: result
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that:
- - result is success
- - result is changed
-
-- name: Collect Regions and verify the region does not exist
- environment: "{{ test_env }}"
- purestorage.fusion.fusion_info:
- gather_subset: regions
- register: fusion_info
-- name: Validate the task
- ansible.builtin.assert:
- that: "'foo_region' not in fusion_info['fusion_info']['regions']"
diff --git a/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_sc/tasks/main.yml b/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_sc/tasks/main.yml
deleted file mode 100644
index 6420db28c..000000000
--- a/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_sc/tasks/main.yml
+++ /dev/null
@@ -1,94 +0,0 @@
-# Prepare dependencies
-- name: Create new tenat foo_tenant
- purestorage.fusion.fusion_tenant:
- name: foo_tenant
- display_name: "tenant foo"
- environment: "{{ test_env }}"
-
-- name: Create new tenant space foo_tenant_space for tenant_foo
- purestorage.fusion.fusion_ts:
- name: foo_tenant_space
- tenant: foo_tenant
- state: present
- environment: "{{ test_env }}"
-
-- name: Create new storage service foo_service
- purestorage.fusion.fusion_ss:
- name: foo_service
- hardware_types:
- - flash-array-x
- display_name: "test class"
- environment: "{{ test_env }}"
-
-
-# Test storage classes
-
-- name: Create new storage class foo_sc
- purestorage.fusion.fusion_sc:
- name: foo_sc
- size_limit: 100G
- iops_limit: 100000
- bw_limit: 25M
- storage_service: foo_service
- display_name: "test class"
- register: result
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that:
- - result is success
- - result is changed
-
-
-- name: Collect storage classes and verify the class exists
- environment: "{{ test_env }}"
- purestorage.fusion.fusion_info:
- gather_subset: storage_classes
- register: fusion_info
-- name: Validate the task
- ansible.builtin.assert:
- that: "'foo_sc' in fusion_info['fusion_info']['storage_classes']"
-
-- name: Delete storage class
- purestorage.fusion.fusion_sc:
- name: foo_sc
- storage_service: foo_service
- state: absent
- register: result
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that:
- - result is success
- - result is changed
-
-- name: Collect storage classes and verify the class does not exist
- environment: "{{ test_env }}"
- purestorage.fusion.fusion_info:
- gather_subset: storage_classes
- register: fusion_info
-- name: Validate the task
- ansible.builtin.assert:
- that: "'foo_sc' not in fusion_info['fusion_info']['storage_classes']"
-
-
-# Teardown dependencies
-
-- name: Delete storage service foo_service
- purestorage.fusion.fusion_ss:
- name: foo_service
- state: absent
- environment: "{{ test_env }}"
-
-- name: Delete foo_tenant_space
- purestorage.fusion.fusion_ts:
- name: foo_tenant_space
- tenant: foo_tenant
- state: absent
- environment: "{{ test_env }}"
-
-- name: Delete tenat foo
- purestorage.fusion.fusion_tenant:
- name: foo_tenant
- state: absent
- environment: "{{ test_env }}"
diff --git a/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_se/tasks/main.yml b/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_se/tasks/main.yml
deleted file mode 100644
index a900712ec..000000000
--- a/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_se/tasks/main.yml
+++ /dev/null
@@ -1,100 +0,0 @@
-# Prepare dependencies
-
-- name: Create Availability Zone
- environment: "{{ test_env }}"
- purestorage.fusion.fusion_az:
- name: "test_az"
- display_name: "foo AZ"
- region: pure-us-west
- register: result
-
-- name: Create new network interface group
- purestorage.fusion.fusion_nig:
- name: "foo_group"
- availability_zone: test_az
- region: pure-us-west
- state: present
- mtu: 1500
- gateway: 172.17.17.1
- prefix: 172.17.17.0/24
- environment: "{{ test_env }}"
-
-
-# Test storage classes
-
-- name: Create new Storage Endpoint
- purestorage.fusion.fusion_se:
- state: present # or absent
- region: pure-us-west
- name: foo_se
- display_name: "foo se"
- availability_zone: test_az
- endpoint_type: iscsi
- iscsi:
- - address: "172.17.1.2/24"
- gateway: "172.17.1.1"
- network_interface_groups: ["foo_group"]
- register: result
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that:
- - result is success
- - result is changed
-
-- name: Collect storage endpoints and verify the endpoint exists
- environment: "{{ test_env }}"
- purestorage.fusion.fusion_info:
- gather_subset: storage_endpoints
- register: fusion_info
-- name: Validate the task
- ansible.builtin.assert:
- that: "'pure-us-west/test_az/foo_se' in fusion_info['fusion_info']['storage_endpoints']"
-
-- name: Delete Storage Endpoint
- purestorage.fusion.fusion_se:
- state: absent
- region: pure-us-west
- name: foo_se
- display_name: "foo se"
- availability_zone: test_az
- endpoint_type: iscsi
- iscsi:
- - address: "172.17.1.2/24"
- gateway: "172.17.1.1"
- network_interface_groups: ["foo_group"]
- register: result
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that:
- - result is success
- - result is changed
-
-- name: Collect storage endpoints and verify the endpoint does not exist
- environment: "{{ test_env }}"
- purestorage.fusion.fusion_info:
- gather_subset: storage_endpoints
- register: fusion_info
-- name: Validate the task
- ansible.builtin.assert:
- that: "'pure-us-west/test_az/foo_se' not in fusion_info['fusion_info']['storage_endpoints']"
-
-
-# Teardown dependencies
-
-- name: Delete network interface group
- purestorage.fusion.fusion_nig:
- name: "foo_group"
- availability_zone: test_az
- region: pure-us-west
- state: absent
- environment: "{{ test_env }}"
-
-- name: Delete AZ
- purestorage.fusion.fusion_az:
- name: "test_az"
- state: absent
- region: pure-us-west
- register: result
- environment: "{{ test_env }}"
diff --git a/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_ss/tasks/main.yml b/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_ss/tasks/main.yml
deleted file mode 100644
index 26332fcf7..000000000
--- a/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_ss/tasks/main.yml
+++ /dev/null
@@ -1,77 +0,0 @@
-# Prepare dependencies
-- name: Create new tenat foo_tenant
- purestorage.fusion.fusion_tenant:
- name: foo_tenant
- display_name: "tenant foo"
- environment: "{{ test_env }}"
-
-- name: Create new tenant space foo_tenant_space for tenant_foo
- purestorage.fusion.fusion_ts:
- name: foo_tenant_space
- tenant: foo_tenant
- state: present
- environment: "{{ test_env }}"
-
-
-# Test storage services
-
-- name: Create new storage service foo_service
- purestorage.fusion.fusion_ss:
- name: foo_service
- hardware_types:
- - flash-array-x
- display_name: "test class"
- register: result
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that:
- - result is success
- - result is changed
-
-
-- name: Collect storage services and check the service exists
- purestorage.fusion.fusion_info:
- gather_subset: storage_services
- register: fusion_info
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that: "'foo_service' in fusion_info['fusion_info']['storage_services']"
-
-- name: Delete storage service foo_service
- purestorage.fusion.fusion_ss:
- name: foo_service
- state: absent
- register: result
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that:
- - result is success
- - result is changed
-
-- name: Collect storage services and check the service does not exist
- purestorage.fusion.fusion_info:
- gather_subset: storage_services
- register: fusion_info
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that: "'foo_service' not in fusion_info['fusion_info']['storage_services']"
-
-
-# Teardown dependencies
-
-- name: Delete foo_tenant_space
- purestorage.fusion.fusion_ts:
- name: foo_tenant_space
- tenant: foo_tenant
- state: absent
- environment: "{{ test_env }}"
-
-- name: Delete tenat foo
- purestorage.fusion.fusion_tenant:
- name: foo_tenant
- state: absent
- environment: "{{ test_env }}"
diff --git a/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_tenant/tasks/main.yml b/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_tenant/tasks/main.yml
deleted file mode 100644
index 262c74a73..000000000
--- a/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_tenant/tasks/main.yml
+++ /dev/null
@@ -1,41 +0,0 @@
-- name: Create new tenat foo_tenant
- purestorage.fusion.fusion_tenant:
- name: foo_tenant
- display_name: "tenant foo"
- register: result
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that:
- - result is success
- - result is changed
-
-- name: Collect tenants and check the tenant exists
- purestorage.fusion.fusion_info:
- gather_subset: tenants
- register: fusion_info
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that: "'foo_tenant' in fusion_info['fusion_info']['tenants']"
-
-- name: Delete tenat foo
- purestorage.fusion.fusion_tenant:
- name: foo_tenant
- state: absent
- register: result
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that:
- - result is success
- - result is changed
-
-- name: Collect tenants and check the tenant does notexist
- purestorage.fusion.fusion_info:
- gather_subset: tenants
- register: fusion_info
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that: "'foo_tenant' not in fusion_info['fusion_info']['tenants']"
diff --git a/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_ts/tasks/main.yml b/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_ts/tasks/main.yml
deleted file mode 100644
index 101c3f251..000000000
--- a/ansible_collections/purestorage/fusion/tests/integration/targets/fusion_ts/tasks/main.yml
+++ /dev/null
@@ -1,62 +0,0 @@
-# Prepare dependencies
-- name: Create new tenat foo_tenant
- purestorage.fusion.fusion_tenant:
- name: foo_tenant
- display_name: "tenant foo"
- environment: "{{ test_env }}"
-
-
-# Test tenant spaces
-
-- name: Create new tenant space foo_tenant_space for tenant_foo
- purestorage.fusion.fusion_ts:
- name: foo_tenant_space
- tenant: foo_tenant
- state: present
- register: result
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that:
- - result is success
- - result is changed
-
-- name: Collect tenant spaces and check the tenant space exists
- purestorage.fusion.fusion_info:
- gather_subset: tenant_spaces
- register: fusion_info
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that: "'foo_tenant/foo_tenant_space' in fusion_info['fusion_info']['tenant_spaces']"
-
-- name: Delete foo_tenant_space
- purestorage.fusion.fusion_ts:
- name: foo_tenant_space
- tenant: foo_tenant
- state: absent
- register: result
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that:
- - result is success
- - result is changed
-
-- name: Collect tenant spaces and check the tenant space does not exist
- purestorage.fusion.fusion_info:
- gather_subset: tenant_spaces
- register: fusion_info
- environment: "{{ test_env }}"
-- name: Validate the task
- ansible.builtin.assert:
- that: "'foo_tenant/foo_tenant_space' not in fusion_info['fusion_info']['tenant_spaces']"
-
-
-# Teardown dependencies
-
-- name: Delete tenat foo
- purestorage.fusion.fusion_tenant:
- name: foo_tenant
- state: absent
- environment: "{{ test_env }}"
diff --git a/ansible_collections/purestorage/fusion/tests/unit/README.md b/ansible_collections/purestorage/fusion/tests/unit/README.md
deleted file mode 100644
index 248a608ba..000000000
--- a/ansible_collections/purestorage/fusion/tests/unit/README.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Unit tests
-
-Unit tests aims at testing specific functions of modules.
-
-Each module as a whole should be tested in Functional tests.
-
-## Running tests
-
-```bash
-pytest tests/unit
-```
-
-## Adding new tests
-
-See already existing tests for inspiration.
diff --git a/ansible_collections/purestorage/fusion/tests/unit/mocks/__init__.py b/ansible_collections/purestorage/fusion/tests/unit/mocks/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/ansible_collections/purestorage/fusion/tests/unit/mocks/__init__.py
+++ /dev/null
diff --git a/ansible_collections/purestorage/fusion/tests/unit/mocks/module_mock.py b/ansible_collections/purestorage/fusion/tests/unit/mocks/module_mock.py
deleted file mode 100644
index cb6d489e1..000000000
--- a/ansible_collections/purestorage/fusion/tests/unit/mocks/module_mock.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# (c) 2023, Denys Denysyev (ddenysyev@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-from unittest.mock import MagicMock
-
-
-class ModuleSucceeded(Exception):
- pass
-
-
-class ModuleFailed(Exception):
- pass
-
-
-class ModuleMock(MagicMock):
- def __init__(self, params, check_mode=False):
- super().__init__()
-
- self.params = params
- self.check_mode = check_mode
-
- # mocking exit_json function, so we can check if it was successfully called
- self.exit_json = MagicMock()
-
- def fail_json(self, **kwargs):
- raise ModuleFailed(str(kwargs))
-
- def fail_on_missing_params(self, required_params=None):
- if required_params is not None:
- for param in required_params:
- if param not in self.params:
- raise ModuleFailed(f"Parameter '{param}' is missing")
diff --git a/ansible_collections/purestorage/fusion/tests/unit/mocks/operation_mock.py b/ansible_collections/purestorage/fusion/tests/unit/mocks/operation_mock.py
deleted file mode 100644
index a3a70c67d..000000000
--- a/ansible_collections/purestorage/fusion/tests/unit/mocks/operation_mock.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# (c) 2023, Denys Denysyev (ddenysyev@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-from enum import Enum
-from ansible_collections.purestorage.fusion.tests.helpers import (
- OperationResultsDict,
-)
-
-
-class OperationStatus(str, Enum):
- PENDING = "Pending"
- ABORTING = "Aborting"
- FAILED = "Failed"
- SUCCEDED = "Succeeded"
-
-
-class OperationMock:
- def __init__(
- self,
- id,
- status,
- result=OperationResultsDict(
- {"resource": OperationResultsDict({"id": "fake-id"})}
- ),
- retry_in=1,
- ):
- self.id = id
- self.status = status
- self.retry_in = retry_in
- self.result = result
diff --git a/ansible_collections/purestorage/fusion/tests/unit/module_utils/__init__.py b/ansible_collections/purestorage/fusion/tests/unit/module_utils/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/ansible_collections/purestorage/fusion/tests/unit/module_utils/__init__.py
+++ /dev/null
diff --git a/ansible_collections/purestorage/fusion/tests/unit/module_utils/test_networking.py b/ansible_collections/purestorage/fusion/tests/unit/module_utils/test_networking.py
deleted file mode 100644
index 13437456a..000000000
--- a/ansible_collections/purestorage/fusion/tests/unit/module_utils/test_networking.py
+++ /dev/null
@@ -1,58 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# (c) 2023, Jan Kodera (jkodera@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-from ansible_collections.purestorage.fusion.plugins.module_utils.networking import (
- is_valid_address,
- is_valid_network,
- is_address_in_network,
-)
-
-
-def test_valid_address():
- assert is_valid_address("0.0.0.0")
- assert is_valid_address("1.1.1.1")
- assert is_valid_address("192.168.1.2")
- assert is_valid_address("255.255.255.255")
-
-
-def test_invalid_address():
- assert not is_valid_address("256.1.1.1")
- assert not is_valid_address("1.256.1.1")
- assert not is_valid_address("1.1.256.1")
- assert not is_valid_address("1.1.1.256")
- assert not is_valid_address("1.1.1.256")
- assert not is_valid_address("010.010.010.010")
- assert not is_valid_address("1.1.1")
- assert not is_valid_address("hostname")
- assert not is_valid_address("0x1.0x2.0x3.0x4")
-
-
-def test_valid_network():
- assert is_valid_network("0.0.0.0/8")
- assert is_valid_network("1.1.1.1/12")
- assert is_valid_network("192.168.1.2/24")
- assert is_valid_network("255.255.255.255/32")
-
-
-def test_invalid_network():
- assert not is_valid_network("1.1.1.1")
- assert not is_valid_network("1.1.1.1/")
- assert not is_valid_network("1.1.1.1/1")
- assert not is_valid_network("1.1.1.1/7")
- assert not is_valid_network("1.1.1.1/33")
-
-
-def test_address_is_in_network():
- assert is_address_in_network("1.1.1.1", "1.1.0.0/16")
- assert is_address_in_network("1.1.1.1", "1.1.1.1/32")
-
-
-def test_address_is_not_in_network():
- assert not is_address_in_network("1.1.1.1", "1.2.0.0/16")
- assert not is_address_in_network("1.1.1.1", "1.1.1.2/32")
diff --git a/ansible_collections/purestorage/fusion/tests/unit/module_utils/test_operations.py b/ansible_collections/purestorage/fusion/tests/unit/module_utils/test_operations.py
deleted file mode 100644
index 6b42eb35f..000000000
--- a/ansible_collections/purestorage/fusion/tests/unit/module_utils/test_operations.py
+++ /dev/null
@@ -1,230 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# (c) 2023, Denys Denysyev (ddenysyev@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-import time
-
-from ansible_collections.purestorage.fusion.plugins.module_utils.errors import (
- OperationException,
-)
-from ansible_collections.purestorage.fusion.tests.helpers import (
- ApiExceptionsMockGenerator,
-)
-from ansible_collections.purestorage.fusion.tests.unit.mocks.operation_mock import (
- OperationMock,
- OperationStatus,
-)
-
-__metaclass__ = type
-
-import fusion as purefusion
-from urllib3.exceptions import HTTPError
-
-from unittest.mock import Mock, MagicMock, call, patch
-import pytest
-from ansible_collections.purestorage.fusion.plugins.module_utils import operations
-
-time.sleep = MagicMock() # mock time.sleep function globally
-current_module = (
- "ansible_collections.purestorage.fusion.tests.unit.module_utils.test_operations"
-)
-
-
-class TestAwaitOperations:
- @patch(f"{current_module}.operations.purefusion.OperationsApi.__new__")
- def test_await_success_op(self, mock_op_api):
- """
- Should return operation
- """
- # Mock operation
- op = OperationMock("1", OperationStatus.SUCCEDED)
-
- # Mock operations api
- mock_op_api_obj = MagicMock()
- mock_op_api.return_value = mock_op_api_obj
- mock_op_api_obj.get_operation = Mock(return_value=op)
-
- # Mock fusion
- fusion_mock = MagicMock()
-
- # Test function
- op1 = operations.await_operation(fusion_mock, op)
-
- # Assertions
- assert op == op1
- mock_op_api_obj.get_operation.assert_called_once_with(op.id)
-
- @patch(f"{current_module}.operations.purefusion.OperationsApi.__new__")
- def test_await_failed_op(self, mock_op_api):
- """
- Should raise OperationException
- """
- # Mock operation
- op = OperationMock("1", OperationStatus.FAILED)
-
- # Mock exception
- op_exception = OperationException(op, None)
-
- # Mock operations api
- mock_op_api_obj = MagicMock()
- mock_op_api.return_value = mock_op_api_obj
- mock_op_api_obj.get_operation = Mock(return_value=op)
-
- # Mock fusion
- fusion_mock = MagicMock()
-
- # Test function
- with pytest.raises(Exception) as exception:
- operations.await_operation(fusion_mock, op)
-
- # Assertions
- assert (
- type(exception) is type(op_exception)
- and exception.args == op_exception.args
- )
- mock_op_api_obj.get_operation.assert_called_once_with(op.id)
-
- @patch(f"{current_module}.operations.purefusion.OperationsApi.__new__")
- def test_await_pending_op(self, mock_op_api):
- """
- Should return operation
- """
- # Mock operation
- op1 = OperationMock("1", OperationStatus.PENDING)
- op2 = OperationMock("1", OperationStatus.SUCCEDED)
-
- # Mock operations api
- mock_op_api_obj = MagicMock()
- mock_op_api.return_value = mock_op_api_obj
- mock_op_api_obj.get_operation = Mock(side_effect=[op1, op2])
-
- # Mock fusion
- fusion_mock = MagicMock()
-
- # Test function
- op = operations.await_operation(fusion_mock, op1)
-
- # Assertions
- assert op == op2
- calls = [call(op1.id), call(op1.id)]
- mock_op_api_obj.get_operation.assert_has_calls(calls)
-
- @patch(f"{current_module}.operations.purefusion.OperationsApi.__new__")
- def test_await_failed_pending_op(self, mock_op_api):
- """
- Should raise OperationException
- """
- # Mock operation
- op1 = OperationMock("1", OperationStatus.PENDING)
- op2 = OperationMock("1", OperationStatus.FAILED)
-
- # Mock exception
- op_exception = OperationException(op2, None)
-
- # Mock operations api
- mock_op_api_obj = MagicMock()
- mock_op_api.return_value = mock_op_api_obj
- mock_op_api_obj.get_operation = Mock(side_effect=[op1, op2])
-
- # Mock fusion
- fusion_mock = MagicMock()
-
- # Test function
- with pytest.raises(Exception) as exception:
- operations.await_operation(fusion_mock, op1)
-
- # Assertions
- assert (
- type(exception) is type(op_exception)
- and exception.args == op_exception.args
- )
- calls = [call(op1.id), call(op1.id)]
- mock_op_api_obj.get_operation.assert_has_calls(calls)
-
- @patch(f"{current_module}.operations.purefusion.OperationsApi.__new__")
- def test_await_api_exception(self, mock_op_api):
- """
- Should raise ApiException
- """
- # Mock exceptions
- api_exception = ApiExceptionsMockGenerator.create_conflict()
-
- # Mock operation
- op = OperationMock("1", OperationStatus.FAILED)
-
- # Mock operations api
- mock_op_api_obj = MagicMock()
- mock_op_api.return_value = mock_op_api_obj
- mock_op_api_obj.get_operation = Mock(side_effect=api_exception)
-
- # Mock fusion
- fusion_mock = MagicMock()
-
- # Test function
- with pytest.raises(purefusion.rest.ApiException) as exception:
- operations.await_operation(fusion_mock, op)
-
- # Assertions
- assert (
- type(exception) is type(api_exception)
- and exception.args == api_exception.args
- )
- mock_op_api_obj.get_operation.assert_called_once_with(op)
-
- @patch(f"{current_module}.operations.purefusion.OperationsApi.__new__")
- def test_await_http_exception(self, mock_op_api):
- """
- Should raise OperationException
- """
- # Mock operation
- op = OperationMock("1", OperationStatus.FAILED)
-
- # Mock exceptions
- http_error = HTTPError()
- op_exception = OperationException(op, http_error)
- # Mock operations api
- mock_op_api_obj = MagicMock()
- mock_op_api.return_value = mock_op_api_obj
- mock_op_api_obj.get_operation = Mock(side_effect=http_error)
-
- # Mock fusion
- fusion_mock = MagicMock()
-
- # Test function
- with pytest.raises(OperationException) as exception:
- operations.await_operation(fusion_mock, op)
-
- # Assertions
- assert (
- type(exception) is type(op_exception)
- and exception.args == op_exception.args
- )
- mock_op_api_obj.get_operation.assert_called_once_with(op)
-
- @patch(f"{current_module}.operations.purefusion.OperationsApi.__new__")
- def test_await_failed_op_without_failing(self, mock_op_api):
- """
- Should return failed operation
- """
- # Mock operation
- op = OperationMock("1", OperationStatus.FAILED)
-
- # Mock operations api
- mock_op_api_obj = MagicMock()
- mock_op_api.return_value = mock_op_api_obj
- mock_op_api_obj.get_operation = Mock(return_value=op)
-
- # Mock fusion
- fusion_mock = MagicMock()
-
- # Test function
- op_res = operations.await_operation(
- fusion_mock, op, fail_playbook_if_operation_fails=False
- )
-
- # Assertions
- assert op_res == op
- mock_op_api_obj.get_operation.assert_called_once_with(op.id)
diff --git a/ansible_collections/purestorage/fusion/tests/unit/module_utils/test_parsing.py b/ansible_collections/purestorage/fusion/tests/unit/module_utils/test_parsing.py
deleted file mode 100644
index 230d0ff01..000000000
--- a/ansible_collections/purestorage/fusion/tests/unit/module_utils/test_parsing.py
+++ /dev/null
@@ -1,153 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# (c) 2023, Jan Kodera (jkodera@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-import pytest
-from ansible_collections.purestorage.fusion.plugins.module_utils.parsing import (
- parse_minutes,
- parse_number_with_metric_suffix,
-)
-
-
-class MockException(Exception):
- pass
-
-
-class MockModule:
- def fail_json(self, msg):
- raise MockException()
-
-
-def test_parsing_valid_number():
- module = MockModule()
- assert parse_number_with_metric_suffix(module, "0") == 0
- assert parse_number_with_metric_suffix(module, "1") == 1
- assert parse_number_with_metric_suffix(module, "1K") == 1024
- assert parse_number_with_metric_suffix(module, "1 K") == 1024
- assert parse_number_with_metric_suffix(module, "124 M") == 124 * 1024 * 1024
- assert parse_number_with_metric_suffix(module, "10 G") == 10 * 1024 * 1024 * 1024
- assert (
- parse_number_with_metric_suffix(module, "20 T")
- == 20 * 1024 * 1024 * 1024 * 1024
- )
- assert (
- parse_number_with_metric_suffix(module, "30 P")
- == 30 * 1024 * 1024 * 1024 * 1024 * 1024
- )
- assert (
- parse_number_with_metric_suffix(module, "30000 P")
- == 30000 * 1024 * 1024 * 1024 * 1024 * 1024
- )
- assert parse_number_with_metric_suffix(module, "0", factor=1000) == 0
- assert parse_number_with_metric_suffix(module, "1", factor=1000) == 1
- assert parse_number_with_metric_suffix(module, "1K", factor=1000) == 1000
- assert (
- parse_number_with_metric_suffix(module, "124M", factor=1000)
- == 124 * 1000 * 1000
- )
- assert parse_number_with_metric_suffix(module, "1.5K", factor=1000) == 1500
- assert parse_number_with_metric_suffix(module, "1.5K", factor=1024) == 1536
-
-
-def test_parsing_invalid_number():
- module = MockModule()
- with pytest.raises(MockException):
- assert parse_number_with_metric_suffix(module, "")
- with pytest.raises(MockException):
- assert parse_number_with_metric_suffix(module, "102X")
- with pytest.raises(MockException):
- assert parse_number_with_metric_suffix(module, "102 N")
- with pytest.raises(MockException):
- assert parse_number_with_metric_suffix(module, "102 N", factor=1000)
- with pytest.raises(MockException):
- assert parse_number_with_metric_suffix(module, "million")
- with pytest.raises(MockException):
- assert parse_number_with_metric_suffix(module, "K")
- with pytest.raises(MockException):
- assert parse_number_with_metric_suffix(module, "K1")
- with pytest.raises(MockException):
- assert parse_number_with_metric_suffix(module, "1K1")
- with pytest.raises(MockException):
- assert parse_number_with_metric_suffix(module, "1 K1")
- with pytest.raises(MockException):
- assert parse_number_with_metric_suffix(module, "M")
- with pytest.raises(MockException):
- assert parse_number_with_metric_suffix(module, "hello world")
-
-
-def test_parsing_valid_time_period():
- module = MockModule()
- assert parse_minutes(module, "0") == 0
- assert parse_minutes(module, "00") == 0
- assert parse_minutes(module, "00M") == 0
- assert parse_minutes(module, "10") == 10
- assert parse_minutes(module, "015") == 15
- assert parse_minutes(module, "0023") == 23
- assert parse_minutes(module, "0H10M") == 10
- assert parse_minutes(module, "2h") == 2 * 60
- assert parse_minutes(module, "2H") == 2 * 60
- assert parse_minutes(module, "02h") == 2 * 60
- assert parse_minutes(module, "02H") == 2 * 60
- assert parse_minutes(module, "002h") == 2 * 60
- assert parse_minutes(module, "002H") == 2 * 60
- assert parse_minutes(module, "0D10H10M") == 10 * 60 + 10
- assert parse_minutes(module, "14D") == 14 * 24 * 60
- assert parse_minutes(module, "014D") == 14 * 24 * 60
- assert parse_minutes(module, "0000014D") == 14 * 24 * 60
- assert parse_minutes(module, "1W") == 7 * 24 * 60
- assert parse_minutes(module, "01W") == 7 * 24 * 60
- assert parse_minutes(module, "01Y0H10M") == 365 * 24 * 60 + 10
- assert parse_minutes(module, "12Y") == 12 * 365 * 24 * 60
- assert parse_minutes(module, "012Y") == 12 * 365 * 24 * 60
- assert (
- parse_minutes(module, "10Y20W30D40H50M")
- == 10 * 365 * 24 * 60 + 20 * 7 * 24 * 60 + 30 * 24 * 60 + 40 * 60 + 50
- )
- assert (
- parse_minutes(module, "010Y20W30D40H50M")
- == 10 * 365 * 24 * 60 + 20 * 7 * 24 * 60 + 30 * 24 * 60 + 40 * 60 + 50
- )
- assert (
- parse_minutes(module, "10Y20W30D40H")
- == 10 * 365 * 24 * 60 + 20 * 7 * 24 * 60 + 30 * 24 * 60 + 40 * 60
- )
- assert (
- parse_minutes(module, "10Y20W30D")
- == 10 * 365 * 24 * 60 + 20 * 7 * 24 * 60 + 30 * 24 * 60
- )
- assert parse_minutes(module, "10Y20W") == 10 * 365 * 24 * 60 + 20 * 7 * 24 * 60
- assert (
- parse_minutes(module, "20W30D40H50M")
- == 20 * 7 * 24 * 60 + 30 * 24 * 60 + 40 * 60 + 50
- )
- assert parse_minutes(module, "30D40H50M") == 30 * 24 * 60 + 40 * 60 + 50
- assert parse_minutes(module, "40H50M") == 40 * 60 + 50
- assert parse_minutes(module, "30D50M") == 30 * 24 * 60 + 50
- assert parse_minutes(module, "20W40H") == 20 * 7 * 24 * 60 + 40 * 60
- assert (
- parse_minutes(module, "01W000010D10H10M")
- == 7 * 24 * 60 + 10 * 24 * 60 + 10 * 60 + 10
- )
-
-
-def test_parsing_invalid_time_period():
- module = MockModule()
- with pytest.raises(MockException):
- assert parse_minutes(module, "")
- with pytest.raises(MockException):
- assert parse_minutes(module, "1s")
- with pytest.raises(MockException):
- assert parse_minutes(module, "1S")
- with pytest.raises(MockException):
- assert parse_minutes(module, "1V")
- with pytest.raises(MockException):
- assert parse_minutes(module, "1v")
- with pytest.raises(MockException):
- assert parse_minutes(module, "10M2H")
- with pytest.raises(MockException):
- assert parse_minutes(module, "0H10M01Y")
diff --git a/ansible_collections/purestorage/fusion/tests/unit/module_utils/test_prerequisites.py b/ansible_collections/purestorage/fusion/tests/unit/module_utils/test_prerequisites.py
deleted file mode 100644
index 0158878cf..000000000
--- a/ansible_collections/purestorage/fusion/tests/unit/module_utils/test_prerequisites.py
+++ /dev/null
@@ -1,116 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# (c) 2023, Jan Kodera (jkodera@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-from ansible_collections.purestorage.fusion.plugins.module_utils.prerequisites import (
- _parse_version,
- _parse_version_requirements,
- _version_satisfied,
-)
-
-import pytest
-
-
-def test_version():
- # VALID
- assert _parse_version("1.0") == (1, 0, None)
- assert _parse_version("1.0.0") == (1, 0, 0)
- assert _parse_version("2.3.4") == (2, 3, 4)
- assert _parse_version("2.3.5a") == (2, 3, 5)
- assert _parse_version("2.3.6-release") == (2, 3, 6)
- # INVALID
- assert _parse_version("1") is None
- assert _parse_version("1.a") is None
- assert _parse_version("1.1a") is None
- assert _parse_version("a.1") is None
- assert _parse_version("1.") is None
- assert _parse_version("1..") is None
- assert _parse_version("1.0.1.0") is None
- assert _parse_version("1.0.1.a") is None
-
-
-def test_requirements():
- # VALID
- assert _parse_version_requirements(">= 1.0") == [(">=", (1, 0, None))]
- assert _parse_version_requirements(">=1.0.1") == [(">=", (1, 0, 1))]
- assert _parse_version_requirements(">= 2.0.2-release") == [(">=", (2, 0, 2))]
- assert _parse_version_requirements(" >=3.0.3b") == [(">=", (3, 0, 3))]
- assert _parse_version_requirements("<= 3.3.3") == [("<=", (3, 3, 3))]
- assert _parse_version_requirements("= 3.0.3") == [("=", (3, 0, 3))]
- assert _parse_version_requirements("== 5.3.1") == [("==", (5, 3, 1))]
- assert _parse_version_requirements("< 4.1.2") == [("<", (4, 1, 2))]
- assert _parse_version_requirements("> 1.3.4") == [(">", (1, 3, 4))]
- assert _parse_version_requirements("> 1.3.4, < 2.0") == [
- (">", (1, 3, 4)),
- ("<", (2, 0, None)),
- ]
- assert _parse_version_requirements(">1.3.4 , <2.0") == [
- (">", (1, 3, 4)),
- ("<", (2, 0, None)),
- ]
- assert _parse_version_requirements("> 1.3.4 ,< 2.0") == [
- (">", (1, 3, 4)),
- ("<", (2, 0, None)),
- ]
- assert _parse_version_requirements(">1.3.4,<2.0") == [
- (">", (1, 3, 4)),
- ("<", (2, 0, None)),
- ]
- assert _parse_version_requirements(">1.3.4,<2.0, != 3.4.1") == [
- (">", (1, 3, 4)),
- ("<", (2, 0, None)),
- ("!=", (3, 4, 1)),
- ]
- # INVALID
- with pytest.raises(ValueError):
- _parse_version_requirements(">>1.3.4")
- with pytest.raises(ValueError):
- _parse_version_requirements("<<1.3.4")
- with pytest.raises(ValueError):
- _parse_version_requirements("=>1.3.4,,3.0")
- with pytest.raises(ValueError):
- _parse_version_requirements("=<1.3.4,")
- with pytest.raises(ValueError):
- _parse_version_requirements("=<1.3.4")
-
-
-def test_version_satisfied():
- assert _version_satisfied("1.0", ">=1.0, <2.0") is True
- assert _version_satisfied("1.0.1", ">=1.0, <2.0") is True
- assert _version_satisfied("2.0", ">=1.0, <2.0") is False
- assert _version_satisfied("2.0.0", ">=1.0, <2.0") is False
- assert _version_satisfied("2.0.1", ">=1.0, <2.0") is False
- assert _version_satisfied("1.0.0", ">=1.0.0") is True
- assert _version_satisfied("1.0", ">=1.0.0") is True
- assert _version_satisfied("1.0", ">=1.0") is True
- assert _version_satisfied("1.0.1", ">=1.0") is True
- assert _version_satisfied("1.0.1", ">=1.0.0") is True
- assert _version_satisfied("1.0.1", "<=1.0.0") is False
- assert _version_satisfied("1.0.0", "<=1.0.0") is True
- assert _version_satisfied("1.0", "<=1.0.0") is True
- assert _version_satisfied("1.0", "<=1.0.1") is True
- assert _version_satisfied("1.0", "<=1.0") is True
- assert _version_satisfied("1.0", "<1.0") is False
- assert _version_satisfied("1.0.0", "<1.0") is False
- assert _version_satisfied("1.0.0", "<1.1") is True
- assert _version_satisfied("1.0.0", "<1.0.1") is True
- assert _version_satisfied("1.0", ">1.0") is False
- assert _version_satisfied("1.0.1", ">1.0") is False
- assert _version_satisfied("1.0", ">1.0.0") is False
- assert _version_satisfied("1.0.0", ">1.0.0") is False
- assert _version_satisfied("1.0.1", ">1.0.0") is True
- assert _version_satisfied("1.0", "==1.0") is True
- assert _version_satisfied("1.0", "=1.0") is True
- assert _version_satisfied("1.0.0", "==1.0") is True
- assert _version_satisfied("1.0.1", "==1.0") is True
- assert _version_satisfied("1.0", "==1.0.0") is True
- assert _version_satisfied("1.0", "==1.0.1") is False
- assert _version_satisfied("1.0", "!=1.0.1") is True
- assert _version_satisfied("1.0", "!=1.0.0") is False
- assert _version_satisfied("1.0.1", "!=1.0") is False
- assert _version_satisfied("1.0", "!=1.0") is False
diff --git a/ansible_collections/purestorage/fusion/tests/unit/modules/__init__.py b/ansible_collections/purestorage/fusion/tests/unit/modules/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/ansible_collections/purestorage/fusion/tests/unit/modules/__init__.py
+++ /dev/null
diff --git a/ansible_collections/purestorage/fusion/tests/unit/modules/test_fusion_az.py b/ansible_collections/purestorage/fusion/tests/unit/modules/test_fusion_az.py
deleted file mode 100644
index ee300638e..000000000
--- a/ansible_collections/purestorage/fusion/tests/unit/modules/test_fusion_az.py
+++ /dev/null
@@ -1,450 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# (c) 2023, Denys Denysyev (ddenysyev@purestorage.com)
-# GNU General Public License v3.0+ (see COPYING.GPLv3 or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-from unittest.mock import MagicMock, Mock, patch
-
-import fusion as purefusion
-import pytest
-from ansible_collections.purestorage.fusion.plugins.module_utils.errors import (
- OperationException,
-)
-from ansible_collections.purestorage.fusion.plugins.modules import fusion_az
-from ansible_collections.purestorage.fusion.tests.helpers import (
- ApiExceptionsMockGenerator,
-)
-from ansible_collections.purestorage.fusion.tests.unit.mocks.module_mock import (
- ModuleMock,
-)
-from ansible_collections.purestorage.fusion.tests.unit.mocks.operation_mock import (
- OperationMock,
- OperationStatus,
-)
-
-fusion_az.setup_fusion = MagicMock()
-current_module = (
- "ansible_collections.purestorage.fusion.tests.unit.modules.test_fusion_az"
-)
-
-
-def default_module_az_params(state="present", display_name="foo_az"):
- module_params = {
- "state": state,
- "name": "foo",
- "region": "region1",
- "display_name": display_name,
- "issuer_id": "ABCD12345",
- "private_key_file": "az-admin-private-key.pem",
- }
- return module_params
-
-
-class TestCreateAZ:
- @patch(f"{current_module}.fusion_az.purefusion.AvailabilityZonesApi.__new__")
- @patch(f"{current_module}.fusion_az.await_operation")
- def test_create_az_without_disp_name(self, await_operation_mock, mock_az_api):
- """
- Should create az successfully
- """
- # Mock operation
- op = OperationMock("1", OperationStatus.SUCCEDED)
-
- # Mock az api
- mock_az_api_obj = MagicMock()
- mock_az_api.return_value = mock_az_api_obj
- mock_az_api_obj.create_availability_zone = MagicMock(return_value=op)
-
- # Mock await operation
- await_operation_mock.return_value = op
-
- # Mock fusion
- fusion_mock = MagicMock()
-
- # Mock Module
- module_params = default_module_az_params("present", None)
- moduleMock = ModuleMock(module_params)
-
- # Test function
- fusion_az.create_az(moduleMock, fusion_mock)
-
- # Assertions
- azone = purefusion.AvailabilityZonePost(
- name=module_params["name"],
- display_name=module_params["name"],
- )
- mock_az_api_obj.create_availability_zone.assert_called_with(
- azone, region_name=module_params["region"]
- )
- await_operation_mock.assert_called_once_with(fusion_mock, op)
- moduleMock.exit_json.assert_called_once_with(
- changed=True, id=op.result.resource.id
- )
-
- @patch(f"{current_module}.fusion_az.purefusion.AvailabilityZonesApi.__new__")
- @patch(f"{current_module}.fusion_az.await_operation")
- def test_create_az_check_mode(self, await_operation_mock, mock_az_api):
- """
- Should only exit_json
- """
- # Mock operation
- op = OperationMock("1", OperationStatus.SUCCEDED)
-
- # Mock az api
- mock_az_api_obj = MagicMock()
- mock_az_api.return_value = mock_az_api_obj
- mock_az_api_obj.create_availability_zone = MagicMock(return_value=op)
-
- # Mock await operation
- await_operation_mock.return_value = op
-
- # Mock fusion
- fusion_mock = MagicMock()
-
- # Mock Module
- module_params = default_module_az_params("present")
- moduleMock = ModuleMock(module_params, check_mode=True)
-
- # Test function
- fusion_az.create_az(moduleMock, fusion_mock)
-
- # Assertions
- mock_az_api_obj.create_availability_zone.assert_not_called()
- await_operation_mock.assert_not_called()
- moduleMock.exit_json.assert_called_once_with(changed=True, id=None)
-
- @patch(f"{current_module}.fusion_az.purefusion.AvailabilityZonesApi.__new__")
- @patch(f"{current_module}.fusion_az.await_operation")
- def test_create_az_with_disp_name(self, await_operation_mock, mock_az_api):
- """
- Should create az successfully
- """
- # Mock operation
- op = OperationMock("1", OperationStatus.SUCCEDED)
-
- # Mock az api
- mock_az_api_obj = MagicMock()
- mock_az_api.return_value = mock_az_api_obj
- mock_az_api_obj.create_availability_zone = MagicMock(return_value=op)
-
- # Mock await operation
- await_operation_mock.return_value = op
-
- # Mock fusion
- fusion_mock = MagicMock()
-
- # Mock Module
- module_params = default_module_az_params("present")
- moduleMock = ModuleMock(module_params)
-
- # Test function
- fusion_az.create_az(moduleMock, fusion_mock)
-
- # Assertions
- azone = purefusion.AvailabilityZonePost(
- name=module_params["name"],
- display_name=module_params["display_name"],
- )
- mock_az_api_obj.create_availability_zone.assert_called_with(
- azone, region_name=module_params["region"]
- )
- await_operation_mock.assert_called_once_with(fusion_mock, op)
- moduleMock.exit_json.assert_called_once_with(
- changed=True, id=op.result.resource.id
- )
-
- @patch(f"{current_module}.fusion_az.purefusion.AvailabilityZonesApi.__new__")
- @patch(f"{current_module}.fusion_az.await_operation")
- def test_create_az_conflict(self, await_operation_mock, mock_az_api):
- """
- Should raise api exception
- """
- # Mock exceptions
- api_exception = ApiExceptionsMockGenerator.create_conflict()
-
- # Mock operation
- op = OperationMock("1", OperationStatus.FAILED)
-
- # Mock az api
- mock_az_api_obj = MagicMock()
- mock_az_api.return_value = mock_az_api_obj
- mock_az_api_obj.create_availability_zone = Mock(side_effect=api_exception)
-
- # Mock await operation
- await_operation_mock.return_value = op
-
- # Mock fusion
- fusion_mock = MagicMock()
-
- # Mock Module
- module_params = default_module_az_params("present")
- moduleMock = ModuleMock(module_params)
-
- # Test function
- with pytest.raises(purefusion.rest.ApiException) as exception:
- fusion_az.create_az(moduleMock, fusion_mock)
- azone = purefusion.AvailabilityZonePost(
- name=module_params["name"],
- display_name=module_params["display_name"],
- )
-
- # Assertions
- assert (
- type(exception) is type(api_exception)
- and exception.args == api_exception.args
- )
- mock_az_api_obj.create_availability_zone.assert_called_with(
- azone, region_name=module_params["region"]
- )
- await_operation_mock.assert_not_called()
- moduleMock.exit_json.assert_not_called()
-
- @patch(f"{current_module}.fusion_az.purefusion.AvailabilityZonesApi.__new__")
- @patch(f"{current_module}.fusion_az.await_operation")
- def test_create_az_not_found(self, await_operation_mock, mock_az_api):
- """
- Should raise api exception
- """
- # Mock exceptions
- api_exception = ApiExceptionsMockGenerator.create_not_found()
-
- # Mock operation
- op = OperationMock("1", OperationStatus.FAILED)
-
- # Mock az api
- mock_az_api_obj = MagicMock()
- mock_az_api.return_value = mock_az_api_obj
- mock_az_api_obj.create_availability_zone = Mock(side_effect=api_exception)
-
- # Mock await operation
- await_operation_mock.return_value = op
-
- # Mock fusion
- fusion_mock = MagicMock()
-
- # Mock Module
- module_params = default_module_az_params("present")
- moduleMock = ModuleMock(module_params)
-
- # Test function
- with pytest.raises(purefusion.rest.ApiException) as exception:
- fusion_az.create_az(moduleMock, fusion_mock)
- azone = purefusion.AvailabilityZonePost(
- name=module_params["name"],
- display_name=module_params["display_name"],
- )
-
- # Assertions
- assert (
- type(exception) is type(api_exception)
- and exception.args == api_exception.args
- )
- mock_az_api_obj.create_availability_zone.assert_called_with(
- azone, region_name=module_params["region"]
- )
- await_operation_mock.assert_not_called()
- moduleMock.exit_json.assert_not_called()
-
- @patch(f"{current_module}.fusion_az.purefusion.AvailabilityZonesApi.__new__")
- @patch(f"{current_module}.fusion_az.await_operation")
- def test_create_az_op_fails(self, await_operation_mock, mock_az_api):
- """
- Should raise operation exception
- """
- # Mock operation
- op = OperationMock("1", OperationStatus.FAILED)
-
- # Mock exception
- op_exception = OperationException(op, None)
-
- # Mock az api
- mock_az_api_obj = MagicMock()
- mock_az_api.return_value = mock_az_api_obj
- mock_az_api_obj.create_availability_zone = MagicMock(return_value=op)
-
- # Mock await operation
- await_operation_mock.side_effect = op_exception
-
- # Mock fusion
- fusion_mock = MagicMock()
-
- # Mock Module
- module_params = default_module_az_params("present")
- moduleMock = ModuleMock(module_params)
-
- # Test function
- with pytest.raises(Exception) as exception:
- fusion_az.create_az(moduleMock, fusion_mock)
- azone = purefusion.AvailabilityZonePost(
- name=module_params["name"],
- display_name=module_params["display_name"],
- )
-
- # Assertions
- assert (
- type(exception) is type(op_exception)
- and exception.args == op_exception.args
- )
- mock_az_api_obj.create_availability_zone.assert_called_with(
- azone, region_name=module_params["region"]
- )
- await_operation_mock.assert_called_once(fusion_mock, op)
- moduleMock.exit_json.assert_not_called()
-
-
-class TestDeleteAZ:
- @patch(f"{current_module}.fusion_az.purefusion.AvailabilityZonesApi.__new__")
- @patch(f"{current_module}.fusion_az.await_operation")
- def test_delete_az_successfully(self, await_operation_mock, mock_az_api):
- """
- Should delete az successfully
- """
- # Mock operation
- op = OperationMock("1", OperationStatus.SUCCEDED)
-
- # Mock az api
- mock_az_api_obj = MagicMock()
- mock_az_api.return_value = mock_az_api_obj
- mock_az_api_obj.delete_availability_zone = MagicMock(return_value=op)
-
- # Mock await operation
- await_operation_mock.return_value = op
-
- # Mock fusion
- fusion_mock = MagicMock()
-
- # Mock Module
- module_params = default_module_az_params("absent")
- moduleMock = ModuleMock(module_params)
-
- # Test function
- fusion_az.delete_az(moduleMock, fusion_mock)
-
- # Assertions
- mock_az_api_obj.delete_availability_zone.assert_called_with(
- availability_zone_name=module_params["name"],
- region_name=module_params["region"],
- )
- await_operation_mock.assert_called_once_with(fusion_mock, op)
- moduleMock.exit_json.assert_called_once_with(changed=True)
-
- @patch(f"{current_module}.fusion_az.purefusion.AvailabilityZonesApi.__new__")
- @patch(f"{current_module}.fusion_az.await_operation")
- def test_create_az_conflict(self, await_operation_mock, mock_az_api):
- """
- Should raise api exception
- """
- # Mock exceptions
- api_exception = ApiExceptionsMockGenerator.create_conflict()
-
- # Mock operation
- op = OperationMock("1", OperationStatus.FAILED)
-
- # Mock az api
- mock_az_api_obj = MagicMock()
- mock_az_api.return_value = mock_az_api_obj
- mock_az_api_obj.delete_availability_zone = Mock(side_effect=api_exception)
-
- # Mock await operation
- await_operation_mock.return_value = op
-
- # Mock fusion
- fusion_mock = MagicMock()
-
- # Mock Module
- module_params = default_module_az_params("absent")
- moduleMock = ModuleMock(module_params)
-
- # Test function
- with pytest.raises(purefusion.rest.ApiException) as exception:
- fusion_az.delete_az(moduleMock, fusion_mock)
-
- # Assertions
- assert (
- type(exception) is type(api_exception)
- and exception.args == api_exception.args
- )
- mock_az_api_obj.delete_availability_zone.assert_called_with(
- region_name=module_params["region"],
- availability_zone_name=module_params["name"],
- )
- await_operation_mock.assert_not_called()
- moduleMock.exit_json.assert_not_called()
-
- @patch(f"{current_module}.fusion_az.purefusion.AvailabilityZonesApi.__new__")
- @patch(f"{current_module}.fusion_az.await_operation")
- def test_create_az_op_fails(self, await_operation_mock, mock_az_api):
- """
- Should raise operation exception
- """
- # Mock operation
- op = OperationMock("1", OperationStatus.FAILED)
-
- # Mock exception
- op_exception = OperationException(op, None)
-
- # Mock az api
- mock_az_api_obj = MagicMock()
- mock_az_api.return_value = mock_az_api_obj
- mock_az_api_obj.delete_availability_zone = MagicMock(return_value=op)
-
- # Mock await operation
- await_operation_mock.side_effect = op_exception
-
- # Mock fusion
- fusion_mock = MagicMock()
-
- # Mock Module
- module_params = default_module_az_params("absent")
- moduleMock = ModuleMock(module_params)
-
- # Test function
- with pytest.raises(OperationException) as exception:
- fusion_az.delete_az(moduleMock, fusion_mock)
- # Assertions
- assert (
- type(exception) is type(op_exception)
- and exception.args == op_exception.args
- )
- mock_az_api_obj.delete_availability_zone.assert_called_with(
- region_name=module_params["region"],
- availability_zone_name=module_params["name"],
- )
- await_operation_mock.assert_called_once(fusion_mock, op)
- moduleMock.exit_json.assert_not_called()
-
- @patch(f"{current_module}.fusion_az.purefusion.AvailabilityZonesApi.__new__")
- @patch(f"{current_module}.fusion_az.await_operation")
- def test_delete_az_check_mode(self, await_operation_mock, mock_az_api):
- """
- Should only exit_json
- """
- # Mock operation
- op = OperationMock("1", OperationStatus.SUCCEDED)
-
- # Mock az api
- mock_az_api_obj = MagicMock()
- mock_az_api.return_value = mock_az_api_obj
- mock_az_api_obj.delete_availability_zone = MagicMock(return_value=op)
-
- # Mock await operation
- await_operation_mock.return_value = op
-
- # Mock fusion
- fusion_mock = MagicMock()
-
- # Mock Module
- module_params = default_module_az_params("absent")
- moduleMock = ModuleMock(module_params, check_mode=True)
-
- # Test function
- fusion_az.delete_az(moduleMock, fusion_mock)
-
- # Assertions
- mock_az_api_obj.delete_availability_zone.assert_not_called()
- await_operation_mock.assert_not_called()
- moduleMock.exit_json.assert_called_once_with(changed=True)
diff --git a/ansible_collections/splunk/es/CHANGELOG.rst b/ansible_collections/splunk/es/CHANGELOG.rst
index cb8b14130..dca7276c4 100644
--- a/ansible_collections/splunk/es/CHANGELOG.rst
+++ b/ansible_collections/splunk/es/CHANGELOG.rst
@@ -5,6 +5,19 @@ Splunk Enterprise Security Collection Release Notes
.. contents:: Topics
+v3.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 `v2.1.2`.
+
+Major Changes
+-------------
+
+- Bumping `requires_ansible` to `>=2.14.0`, since previous ansible-core versions are EoL now.
+
v2.1.2
======
diff --git a/ansible_collections/splunk/es/FILES.json b/ansible_collections/splunk/es/FILES.json
index 744f60fb3..4a18892bb 100644
--- a/ansible_collections/splunk/es/FILES.json
+++ b/ansible_collections/splunk/es/FILES.json
@@ -46,14 +46,14 @@
"name": "meta/runtime.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a5ff05bca6bd4c71c1077632fdc7010ef5bab7c015eb99dfdadf5de56e381bfd",
+ "chksum_sha256": "61b1457604556869b9b6892a54ac257230a737ef1d0dda16e250927229c98592",
"format": 1
},
{
"name": "README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "938dfaf404198185218a2b62d141f6ccf09c6a076408874cf4bc3c45f313c727",
+ "chksum_sha256": "855ce47765642128a662e93f1ac629ec509110f570af653362e3f96eecc677cb",
"format": 1
},
{
@@ -260,34 +260,6 @@
"format": 1
},
{
- "name": "tests/sanity/ignore-2.9.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "968eecbadf439555025acc97355cd970ac992bb88948224a5ec93b0e5149d36a",
- "format": 1
- },
- {
- "name": "tests/sanity/ignore-2.13.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": "783614c021deecb018573244dc973a566def9cfd8265e17ab934a1ab16b6ff0a",
- "format": 1
- },
- {
- "name": "tests/sanity/ignore-2.10.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "783614c021deecb018573244dc973a566def9cfd8265e17ab934a1ab16b6ff0a",
- "format": 1
- },
- {
"name": "tests/sanity/ignore-2.14.txt",
"ftype": "file",
"chksum_type": "sha256",
@@ -309,13 +281,6 @@
"format": 1
},
{
- "name": "tests/sanity/ignore-2.12.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "12ec031c8ec4844396e76b57382d04fcd0a40f2cecbb07dcf091afef035b5cb7",
- "format": 1
- },
- {
"name": "tests/sanity/ignore-2.15.txt",
"ftype": "file",
"chksum_type": "sha256",
@@ -326,7 +291,7 @@
"name": "tests/config.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "de5087316490411841c67aa3307cfdd3acaea09875c9b4dee6852bca7c120764",
+ "chksum_sha256": "4129945061440c8d8c281590b8054b194f5958833c722aa40e878b09038c380e",
"format": 1
},
{
@@ -1306,7 +1271,7 @@
"name": "changelogs/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a86bd976282bb2064053fdfdadbe10a07327897b5b1fc15aed0338da1f947868",
+ "chksum_sha256": "e1bc0e15befb092c7a4961f8fd2a5f86d5a9484ad007a992f8ae868d304fc456",
"format": 1
},
{
@@ -1320,7 +1285,7 @@
"name": "CHANGELOG.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c3af46270e73ef5c8a1af78a38e6a1865ad9259d390c7d9ebaa226991b8c1293",
+ "chksum_sha256": "3efa5d85f285de4a07b371ac952273b040edc4f704886f3651b7d52f7423f5ee",
"format": 1
},
{
diff --git a/ansible_collections/splunk/es/MANIFEST.json b/ansible_collections/splunk/es/MANIFEST.json
index 7d63d7cf1..2a267baa7 100644
--- a/ansible_collections/splunk/es/MANIFEST.json
+++ b/ansible_collections/splunk/es/MANIFEST.json
@@ -2,7 +2,7 @@
"collection_info": {
"namespace": "splunk",
"name": "es",
- "version": "2.1.2",
+ "version": "3.0.0",
"authors": [
"Ansible Seurity Team (https://github.com/ansible-security)"
],
@@ -17,7 +17,7 @@
],
"license_file": null,
"dependencies": {
- "ansible.netcommon": ">=2.5.1"
+ "ansible.netcommon": ">=6.0.0"
},
"repository": "https://github.com/ansible-collections/splunk.es",
"documentation": "https://github.com/ansible-collections/splunk.es",
@@ -28,7 +28,7 @@
"name": "FILES.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bdb2212e72f1a462883425c92aa87b55ac3c3377d56f883aea5bce1c341fb477",
+ "chksum_sha256": "b3e63dc8561a6d804951c6d7375cfbfb8373c202b57efc136479f98f88ad3b05",
"format": 1
},
"format": 1
diff --git a/ansible_collections/splunk/es/README.md b/ansible_collections/splunk/es/README.md
index c329e2dc6..256db7b18 100644
--- a/ansible_collections/splunk/es/README.md
+++ b/ansible_collections/splunk/es/README.md
@@ -18,7 +18,7 @@ and provide feedback about.
<!--start requires_ansible-->
## 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/splunk/es/changelogs/changelog.yaml b/ansible_collections/splunk/es/changelogs/changelog.yaml
index dab3d4f80..765327215 100644
--- a/ansible_collections/splunk/es/changelogs/changelog.yaml
+++ b/ansible_collections/splunk/es/changelogs/changelog.yaml
@@ -76,3 +76,15 @@ releases:
fragments:
- module_plugins_bug_fix.yml
release_date: "2023-11-29"
+ 3.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 `v2.1.2`.
+ fragments:
+ - prep_300.yaml
+ release_date: "2023-12-01"
diff --git a/ansible_collections/splunk/es/meta/runtime.yml b/ansible_collections/splunk/es/meta/runtime.yml
index 468a3d807..ac061e781 100644
--- a/ansible_collections/splunk/es/meta/runtime.yml
+++ b/ansible_collections/splunk/es/meta/runtime.yml
@@ -46,4 +46,4 @@ plugin_routing:
redirect: splunk.es.splunk_adaptive_response_notable_event
adaptive_response_notable_events:
redirect: splunk.es.splunk_adaptive_response_notable_events
-requires_ansible: ">=2.9.10"
+requires_ansible: ">=2.14.0"
diff --git a/ansible_collections/splunk/es/tests/config.yml b/ansible_collections/splunk/es/tests/config.yml
index 41f529264..c26ea5966 100644
--- a/ansible_collections/splunk/es/tests/config.yml
+++ b/ansible_collections/splunk/es/tests/config.yml
@@ -1,3 +1,3 @@
---
modules:
- python_requires: ">=3.6"
+ python_requires: ">=3.9"
diff --git a/ansible_collections/splunk/es/tests/sanity/ignore-2.10.txt b/ansible_collections/splunk/es/tests/sanity/ignore-2.10.txt
deleted file mode 100644
index 16b4372f7..000000000
--- a/ansible_collections/splunk/es/tests/sanity/ignore-2.10.txt
+++ /dev/null
@@ -1 +0,0 @@
-plugins/action/splunk_correlation_searches.py compile-2.6!skip
diff --git a/ansible_collections/splunk/es/tests/sanity/ignore-2.11.txt b/ansible_collections/splunk/es/tests/sanity/ignore-2.11.txt
deleted file mode 100644
index 16b4372f7..000000000
--- a/ansible_collections/splunk/es/tests/sanity/ignore-2.11.txt
+++ /dev/null
@@ -1 +0,0 @@
-plugins/action/splunk_correlation_searches.py compile-2.6!skip
diff --git a/ansible_collections/splunk/es/tests/sanity/ignore-2.12.txt b/ansible_collections/splunk/es/tests/sanity/ignore-2.12.txt
deleted file mode 100644
index 0cd1efee7..000000000
--- a/ansible_collections/splunk/es/tests/sanity/ignore-2.12.txt
+++ /dev/null
@@ -1 +0,0 @@
-tests/unit/mock/loader.py pylint:arguments-renamed
diff --git a/ansible_collections/splunk/es/tests/sanity/ignore-2.13.txt b/ansible_collections/splunk/es/tests/sanity/ignore-2.13.txt
deleted file mode 100644
index e69de29bb..000000000
--- a/ansible_collections/splunk/es/tests/sanity/ignore-2.13.txt
+++ /dev/null
diff --git a/ansible_collections/splunk/es/tests/sanity/ignore-2.9.txt b/ansible_collections/splunk/es/tests/sanity/ignore-2.9.txt
deleted file mode 100644
index 16dfcae4d..000000000
--- a/ansible_collections/splunk/es/tests/sanity/ignore-2.9.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-plugins/action/splunk_correlation_searches.py compile-2.6!skip
-plugins/modules/correlation_search.py validate-modules:deprecation-mismatch
-plugins/modules/correlation_search.py validate-modules:invalid-documentation
-plugins/modules/data_input_monitor.py validate-modules:deprecation-mismatch
-plugins/modules/data_input_monitor.py validate-modules:invalid-documentation
-plugins/modules/data_input_network.py validate-modules:deprecation-mismatch
-plugins/modules/data_input_network.py validate-modules:invalid-documentation
-plugins/modules/adaptive_response_notable_event.py validate-modules:deprecation-mismatch
-plugins/modules/adaptive_response_notable_event.py validate-modules:invalid-documentation
diff --git a/ansible_collections/telekom_mms/icinga_director/.aar_doc.yml b/ansible_collections/telekom_mms/icinga_director/.aar_doc.yml
new file mode 100644
index 000000000..9991be7fb
--- /dev/null
+++ b/ansible_collections/telekom_mms/icinga_director/.aar_doc.yml
@@ -0,0 +1,72 @@
+output_template: |
+ <!-- BEGIN_ANSIBLE_DOCS -->
+ # Ansible Role: {{ role }}
+ ---
+ {%- if "version" in galaxy_collection %}
+ Version: {{ galaxy_collection.version }}
+ {% endif %}
+ {{ metadata.galaxy_info.description }}
+ {% if ("galaxy_tags" in metadata.galaxy_info) and (metadata.galaxy_info.galaxy_tags | length > 0) %}
+ Tags: {{ metadata.galaxy_info.galaxy_tags | join(', ') }}
+ {%- endif %}
+
+ ## Requirements
+ ---
+ | Platform | Versions |
+ | -------- | -------- |
+ {%- for platform in metadata.galaxy_info.platforms %}
+ | {{ platform.name }} | {{ platform.versions | default([]) | join(', ') }} |
+ {%- endfor %}
+
+ ## Supported Operating Systems
+
+ {%- for platform in metadata.galaxy_info.platforms %}
+ - {{ platform.name }}
+ {%- if "versions" in platform %}
+ - {{ platform.versions | default([]) | join(', ') }}
+ {%- endif %}
+ {%- endfor %}
+
+ ## Role Variables
+ {% for entrypoint in argument_specs.keys() %}
+ {%- set path, options=entrypoint_options[entrypoint][0] -%}
+ {%- for name, details in options.items() |sort() %}
+ - `{{ name }}`:
+ - Default: `{{ details.display_default }}`
+ - Description: {{ details.display_description }}
+ - Type: {{ details.display_type }}
+ - Required: {{ details.display_required }}
+ {% if details.options -%}
+ - Options:
+ {% for key, value in details.options.items() %}
+ - `{{ key }}`:
+ - description:
+ {% for line in value.description %}
+ - "{{ line }}"
+ {% endfor %}
+ {%- if value.choices %}
+ - Choices:
+ {%- for choice in value.choices %}
+ - {{ choice }}
+ {%- endfor %}
+ {%- endif %}
+ - default: "{{ value.default }}"
+ - type: "{{ value.type }}"
+ - required: "{{ value.display_required }}"
+ {% endfor %}
+ {%- endif %}
+ {%- endfor %}
+ {%- endfor %}
+
+ ## Dependencies
+
+ {%- if ("dependencies" in metadata) and (metadata.dependencies | length > 0) %}
+ {%- for dependency in metadata.dependencies %}
+ - {{ dependency }}
+ {%- endfor %}
+ {%- else %}
+
+ None.
+ {%- endif %}
+
+ <!-- END_ANSIBLE_DOCS -->
diff --git a/ansible_collections/telekom_mms/icinga_director/CHANGELOG.rst b/ansible_collections/telekom_mms/icinga_director/CHANGELOG.rst
index 338e4ad1a..655db019b 100644
--- a/ansible_collections/telekom_mms/icinga_director/CHANGELOG.rst
+++ b/ansible_collections/telekom_mms/icinga_director/CHANGELOG.rst
@@ -5,6 +5,46 @@ telekom_mms.icinga_director Release Notes
.. contents:: Topics
+v2.1.2
+======
+
+v2.1.1
+======
+
+Bugfixes
+--------
+
+- 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)
+
+v2.1.0
+======
+
+Minor Changes
+-------------
+
+- Increase sleep to 5 seconds (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/245)
+
+v2.0.5
+======
+
+v2.0.4
+======
+
+v2.0.3
+======
+
+v2.0.2
+======
+
+v2.0.1
+======
+
+Bugfixes
+--------
+
+- Fixes #190 - Workaround for service apply bug (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/239)
+
v1.35.0
=======
diff --git a/ansible_collections/telekom_mms/icinga_director/FILES.json b/ansible_collections/telekom_mms/icinga_director/FILES.json
index 93627f1e6..9c9f11913 100644
--- a/ansible_collections/telekom_mms/icinga_director/FILES.json
+++ b/ansible_collections/telekom_mms/icinga_director/FILES.json
@@ -8,388 +8,402 @@
"format": 1
},
{
- "name": "CHANGELOG.md",
+ "name": "README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "99d0821e711ba004b27660d12cfedefdbd22714040ad8758da0de2e7e7a6a18b",
+ "chksum_sha256": "cbd05e65ef1941cf778aa7194150be8aafdfda99574ff76475bccb7dfb40f356",
"format": 1
},
{
- "name": "renovate.json",
+ "name": "CHANGELOG.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e711d74edde804d88ffcdb2f07cd04fdb50c088ed7e8733bce44f95b56fba8b4",
+ "chksum_sha256": "560ba024e6d16a87a027b64a354f7457557e64e2ca459df5a2b80564fcb78aaa",
"format": 1
},
{
- "name": "LICENSE",
+ "name": ".aar_doc.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986",
+ "chksum_sha256": "4553d719d053f16602266cd5b772273391bf7921a7d6540fd903642371b40942",
"format": 1
},
{
- "name": "meta",
+ "name": "CONTRIBUTING.md",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "95e2b2b6d356582984f8c830150fcfa1b879807776d24c0111426df8191febca",
+ "format": 1
+ },
+ {
+ "name": ".gitattributes",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b2deb48e94193846f3933845436e4b28bd819b7e54f87f713c4e45925e84d645",
+ "format": 1
+ },
+ {
+ "name": "docs",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "meta/runtime.yml",
+ "name": "docs/icinga_notification_template.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7987b97d023a17278e43b9e5977acb7a3717efc4997816565f9471c67e48999e",
+ "chksum_sha256": "4dba0f64ee219cea065ee72054722622f8011b47958ab0ccaedc3cc3cb3721fa",
"format": 1
},
{
- "name": "README.md",
+ "name": "docs/icinga_user_info.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "18b4f88a37545cedf51b2d6bde363654cfe832525217d4c38a8a590a692f0088",
+ "chksum_sha256": "65f2cc11ca8e564df632609b154f39411402811b0fbbd1b1a6220aeedca56451",
"format": 1
},
{
- "name": "plugins",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "docs/icinga_timeperiod_info.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "379a46278cad4604604d98b839e88b050db962329a22d9bebc18a3a734c2f2be",
"format": 1
},
{
- "name": "plugins/inventory",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "docs/icinga_timeperiod_template_info.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "38ea5dca279e66726bfedb9eb906decfef42b60b578eae0c71999dcff2b9ced0",
"format": 1
},
{
- "name": "plugins/inventory/icinga_director_inventory.py",
+ "name": "docs/icinga_servicegroup_info.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "afce980e40cd5134fb384d20d89db8b6ed94500cf18afe4a25f201c5d1b33403",
+ "chksum_sha256": "9a99593e23cb0c744204e4761aae8557dc2e1db7d15d8cfe03dad62a5cd09897",
"format": 1
},
{
- "name": "plugins/modules",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "docs/icinga_service_info.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2b6272b280c7c9d24908096ae72245c53828cee1497b624192d689c7f2cbf0bb",
"format": 1
},
{
- "name": "plugins/modules/icinga_user_group.py",
+ "name": "docs/icinga_hostgroup_info.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0bbe9b060799897810c637ffacb1b1a723e46b99db928999f1093503cdbdad2e",
+ "chksum_sha256": "68f3bb8c3bd161b0979580c51f409e58dc53e8d050f6cf2cf92ca94e414fd93e",
"format": 1
},
{
- "name": "plugins/modules/icinga_user_info.py",
+ "name": "docs/icinga_host_template_info.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "581b14244d8c3706e6631780b29f46b0fb89f63cd8b1cbdda5c23c0651e9c3cf",
+ "chksum_sha256": "b5820cd58abb5fcca940d318f2fe600d596becf192754b1766a9d454fd18e86e",
"format": 1
},
{
- "name": "plugins/modules/icinga_user_template.py",
+ "name": "docs/icinga_command_template_info.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "002207d6493402887a2b66a02ef12cbe09fd5402a62f329089d8572fbb669bcd",
+ "chksum_sha256": "4fd5b810c23e74381890134eaf332b4c07846fdd8b2c676d0b4604360c0ebf3d",
"format": 1
},
{
- "name": "plugins/modules/icinga_zone_info.py",
+ "name": "docs/icinga_endpoint.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "031dab242c365b3aee630abee6448545a818f38430358d3358aa3db5f58c00b2",
+ "chksum_sha256": "98d4c03cffe0d6ec6996c9fdb02dcd83b11c6fbf5417f1ad3babe465487d845d",
"format": 1
},
{
- "name": "plugins/modules/icinga_notification_template_info.py",
+ "name": "docs/icinga_timeperiod_template.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b94210434c4785785f183e94539bad62b7e906abd763cfafc199291324a66a4b",
+ "chksum_sha256": "2023e5f94e875f8a49c9e6305239c7c9aa2058a25a412fed6ddc8ce140ba423e",
"format": 1
},
{
- "name": "plugins/modules/icinga_host_template.py",
+ "name": "docs/icinga_serviceset.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f08ea8599c552ba06ef28fd87223ad3176a5fae73077adc0ff13e1ce5e870d29",
+ "chksum_sha256": "f00d2d38ace64bfc24ce034ecea861de33fd8cf054da1184721d8a799b22638b",
"format": 1
},
{
- "name": "plugins/modules/icinga_notification_template.py",
+ "name": "docs/icinga_notification.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d44a47b755ea484cae1334f8a8904ee38000510e178c1fbc5fa709f0987cd0fd",
+ "chksum_sha256": "a0b0c2fc93bcb3826801337041212917f7d76fda0509031b9aa459b4041a198c",
"format": 1
},
{
- "name": "plugins/modules/icinga_service_apply_info.py",
+ "name": "docs/icinga_service_template_info.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b7b1ef59f8f83ae999174fc5023ebfcf4b831b44356a4704b0d5757d31f9413a",
+ "chksum_sha256": "26aea36bc17910c713576b95ef1800704a81caec2a2c1f62611085dda8c5a97d",
"format": 1
},
{
- "name": "plugins/modules/icinga_service_template_info.py",
+ "name": "docs/icinga_deploy_info.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "79027979d612de069884ea422b430660c1823ebcbef95872b2ae4b12089f7100",
+ "chksum_sha256": "04c3b91f6ccc48f19bfc1b2287e97cc15158626e0de4018a359a523858a58847",
"format": 1
},
{
- "name": "plugins/modules/icinga_service_apply.py",
+ "name": "docs/icinga_user_template.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "39fdca31bf58c5a11d1b6670cb39227b5a5b01fa5b289d7949f50e643937722f",
+ "chksum_sha256": "b6479d03bff152baef69dbe2db979077248f0c61addf85af0ff8fcd95c45a1df",
"format": 1
},
{
- "name": "plugins/modules/icinga_endpoint.py",
+ "name": "docs/icinga_host_template.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b00feba05e27cbe1e62eaf2d99e9293d8f4fcbeb6342811aade18398ef0b66b5",
+ "chksum_sha256": "3073ef58234d064561bd1c61afd3bf13c155b031ca154813dfe6cf6cea2e8d60",
"format": 1
},
{
- "name": "plugins/modules/icinga_endpoint_info.py",
+ "name": "docs/icinga_notification_template_info.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3fd36c406dd69b24afcbc405f384ce9ccbd509d54a5b7e31eb0023357861258",
+ "chksum_sha256": "a8c8bf662b23f55fc34fb9354369ac7b551f70efaa21abe4222c77c058817daf",
"format": 1
},
{
- "name": "plugins/modules/icinga_user_template_info.py",
+ "name": "docs/icinga_director_inventory.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "09015fa2d503a63f75918ebeadf81488d5db96d8003553accd666534e17258ec",
+ "chksum_sha256": "83eac988b52587241a2e171a655111e58418375e21fd7d82149e1ec4f5014851",
"format": 1
},
{
- "name": "plugins/modules/icinga_zone.py",
+ "name": "docs/icinga_command_template.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "68a82be1565b2841b69c20d663ae084c364c517b27531f683024d3f1fb32badd",
+ "chksum_sha256": "712ceada4873413eaf6f514e7f11204ab84e41fc3fcbf9ba0a848021e180dfdf",
"format": 1
},
{
- "name": "plugins/modules/icinga_user.py",
+ "name": "docs/icinga_host_info.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "94cca6809793d50a7716466701bcaadd307b1bf36ae2db1839ed679631936e5d",
+ "chksum_sha256": "c953507375cbf5d1bd4b727bfcaabd7719f4f7a4489186d1569474e206d395d3",
"format": 1
},
{
- "name": "plugins/modules/icinga_service_template.py",
+ "name": "docs/icinga_zone.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7aaf5a8cbe631079be1e54aaa74048ff39a067b9443af9f3e3e706e7e4958e71",
+ "chksum_sha256": "6698e90afcc560405494f8a5cb15446ad300db0cf43a71b96cc9710fda7c99dd",
"format": 1
},
{
- "name": "plugins/modules/icinga_host.py",
+ "name": "docs/icinga_host.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "932cb54002669c25a603ea998dfa3bc5845e025d5362a0afba8f38733fe5a672",
+ "chksum_sha256": "c84d729e51fed6bb199f22b5d6113118ab4647a55d1b9f98fccdc62ff1bbb312",
"format": 1
},
{
- "name": "plugins/modules/icinga_command_template_info.py",
+ "name": "docs/icinga_endpoint_info.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0552ff8bcecd00973bae4ef9f695ba27cdebd2d806e5341fe2b292b87a7792e2",
+ "chksum_sha256": "b167b9c55be74dcb839737b6fcac7d4d70f4d4607578c20e4e9d7a57a97ee263",
"format": 1
},
{
- "name": "plugins/modules/icinga_scheduled_downtime.py",
+ "name": "docs/.gitkeep",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f156a76ea47beff013a3de0f879aaf7245274c53c1e01355ec7a7c5fc034782f",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/modules/icinga_hostgroup.py",
+ "name": "docs/icinga_timeperiod.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "25fe567954b8e78857aad9a889ea0da80f24a9005d2316a1e9b2aa2172fa9947",
+ "chksum_sha256": "7ef79a953606d7d5745c045cb83db736251d825e377d89c26079b2d919533b80",
"format": 1
},
{
- "name": "plugins/modules/icinga_servicegroup_info.py",
+ "name": "docs/icinga_user_group.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3d3f9d954c477286c2b789f604da25d116cf850e9e1e14b0ea04b4d755037cac",
+ "chksum_sha256": "76a7629d4d25a9939f443bdf6d227957b937ea2bc0bce6adabef07c2efff5ce3",
"format": 1
},
{
- "name": "plugins/modules/icinga_hostgroup_info.py",
+ "name": "docs/icinga_notification_info.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8e385fdf84e961d6cae5496c59bdc710b8cc8516eaa921d36991b826185423b2",
+ "chksum_sha256": "8320c94d95451596987f446d4efed37889e03f5b9e6e53b3181791cdf486f639",
"format": 1
},
{
- "name": "plugins/modules/icinga_host_info.py",
+ "name": "docs/icinga_deploy.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e7c4e5676e867e448abc760dd5480bd064852aff48ebf3b9c644a4032747c2b4",
+ "chksum_sha256": "6524856305f2d5cda1cff40aa29ce58cd51a12d85a0648dc67c5cf94e81840c7",
"format": 1
},
{
- "name": "plugins/modules/icinga_notification_info.py",
+ "name": "docs/icinga_zone_info.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0acf822f2bfbf15b9a197750457f71117973b92d31a301ddb51d3adc49d5cabe",
+ "chksum_sha256": "b46356a8245852122b172a2c9daff95947f9996d4119b09d0a3125b6b59b910d",
"format": 1
},
{
- "name": "plugins/modules/icinga_serviceset.py",
+ "name": "docs/icinga_user_group_info.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9cffad89eeb2cc4da1ef1749836025725df751db35fefbcd420e00528f440f71",
+ "chksum_sha256": "d79cf09e18862e57adf7976bbdfa19c2b8c9e53e89eebc6b8c35a5faab3932ab",
"format": 1
},
{
- "name": "plugins/modules/icinga_command_info.py",
+ "name": "docs/icinga_hostgroup.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f3325e7be18fa95480235d7905bc83756c1d958bcfb3e39de047c6aaf37c0d12",
+ "chksum_sha256": "4dbb0f673fb9bdbc4e200d7789e6c9e31ef767c9d2870dfe411e4b1169f8dfd1",
"format": 1
},
{
- "name": "plugins/modules/icinga_timeperiod.py",
+ "name": "docs/icinga_command.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "08ff91ecd1d9f0e160bd9b7997cdbc2ebbeb287b77969c8477c30d29d54701b1",
+ "chksum_sha256": "5af5899a3f95baf28cafe4a262bd5f9351abf27bb1c7543a653a70a4c89574db",
"format": 1
},
{
- "name": "plugins/modules/icinga_timeperiod_info.py",
+ "name": "docs/icinga_servicegroup.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f87bfe7a7e6f88867ad916658c4d92d63867179f3e793ff4d800ffc753ac66d5",
+ "chksum_sha256": "c6b7007f9b9c819d9d8ee38887ed5143da04363c92dff84b6562eb29e3e82c22",
"format": 1
},
{
- "name": "plugins/modules/icinga_timeperiod_template_info.py",
+ "name": "docs/icinga_scheduled_downtime.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7ecd6655ff95b53700806d00d09ef2b8d606ad3edcd8c9c5f40b526d6746fbd4",
+ "chksum_sha256": "eb05d0dcddad62d103030a48fcb2b7be270e44008fc0c7d66c3eeeb965a95c4b",
"format": 1
},
{
- "name": "plugins/modules/icinga_notification.py",
+ "name": "docs/icinga_user_template_info.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2a18c8f247b9350f212481a9df6382ffbc040ed12a0215af5c033ff678239508",
+ "chksum_sha256": "b5abd1e0ef18abe2e48caa887151484b02e35481a57842ee7873987312eba8ac",
"format": 1
},
{
- "name": "plugins/modules/icinga_service_info.py",
+ "name": "docs/icinga_service_apply.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ef2c457bf40f38f8973a23ed3946e27387a441d0aeb0e0dba3e9a3099bec1782",
+ "chksum_sha256": "e717a877bf9b007a02e6201a93d787a2764b9fbf179d1d2a4b32f7f58d61662c",
"format": 1
},
{
- "name": "plugins/modules/icinga_deploy.py",
+ "name": "docs/icinga_user.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6a10712f3ff9598c8ec99609c9ed58c9b6e3afa3b54a9d79149d4cb8451cb2a5",
+ "chksum_sha256": "f1a9a588e8abdf884c79e963d167d3bbeea6e7ee9c9aa2e855347590e7ec65b8",
"format": 1
},
{
- "name": "plugins/modules/icinga_host_template_info.py",
+ "name": "docs/icinga_command_info.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6a916778512b0d6f27f525e2da8280e065a6e06f32fca4325e5164a3f4ff31b6",
+ "chksum_sha256": "ff12f037d7dc8f6e6e1ee533dac6e89fcefd1b6ec522e6f1bb3a86b1fac549d7",
"format": 1
},
{
- "name": "plugins/modules/icinga_command_template.py",
+ "name": "docs/icinga_service_apply_info.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bc15ac65064e261663ed9fb329fd4b8bcee60c9a02d1b3f7b0e53ec38060e9b1",
+ "chksum_sha256": "128ae7c70f7c0a6095bb6eff2fd9e85ac180b0575265c40ef621d611d192f085",
"format": 1
},
{
- "name": "plugins/modules/icinga_service.py",
+ "name": "docs/icinga_service_template.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "15fa5bed2a8d7c308fb7f95892ad540a764fc57352e2c48f6f57269cadf41333",
+ "chksum_sha256": "f787870a906543323acf30f41c10df902aa3a04848ffdaff89557f297f91e19d",
"format": 1
},
{
- "name": "plugins/modules/icinga_user_group_info.py",
+ "name": "docs/icinga_service.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6e5f229cafab5a3d8024752f58e3192082d956aea409f4f4b9dba0f1b2a6371e",
+ "chksum_sha256": "3b2fdfcc93e1cdf1c5908719c08884b3d48e33bf958686242e9bec9dcea5d852",
"format": 1
},
{
- "name": "plugins/modules/icinga_command.py",
+ "name": "CHANGELOG.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4850dd60b1c6557995e0f0a30a2e8e05bfaa3873febfb410e663429585a72707",
+ "chksum_sha256": "99d0821e711ba004b27660d12cfedefdbd22714040ad8758da0de2e7e7a6a18b",
"format": 1
},
{
- "name": "plugins/modules/icinga_timeperiod_template.py",
+ "name": "renovate.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aef9cb6ea2ee9f4a8540da6ef4b0185e9fc8d904e7ec63b4a451a9b78e66d092",
+ "chksum_sha256": "e711d74edde804d88ffcdb2f07cd04fdb50c088ed7e8733bce44f95b56fba8b4",
"format": 1
},
{
- "name": "plugins/modules/icinga_deploy_info.py",
+ "name": "CODEOWNERS",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8c15b71eb94e7323670d54a49bbcf74c0f198af9b4418064a86e9465f9b32d49",
+ "chksum_sha256": "24cd4a61cdbb71f31779fccb0e8cfca894fb02eade70c5c9cee71ae6828d1b58",
"format": 1
},
{
- "name": "plugins/modules/icinga_servicegroup.py",
+ "name": ".gitignore",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9208341a441e4b47b70dd3ecbbd7749dbe730b327ad582c8e04acc44a258897e",
+ "chksum_sha256": "0cb2d7d561d8f1feb38146d6c58c6143c7568b624e2ab6cf03ebc6247e35c991",
"format": 1
},
{
- "name": "plugins/doc_fragments",
+ "name": "changelogs",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/doc_fragments/common_options.py",
+ "name": "changelogs/.plugin-cache.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4636a41b3a10c7786474a983e2e95c4098b9134c4ea779322639c4907380714e",
+ "chksum_sha256": "e225ec6a82744ba0692e5df987b9bf94ddcbf9da65236a16ba291528bc789fb9",
"format": 1
},
{
- "name": "plugins/module_utils",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "changelogs/config.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "abbab66a433f6362c97d2c632af58683642922225a26a1dd7c6a78923d4ab8d8",
"format": 1
},
{
- "name": "plugins/module_utils/icinga.py",
+ "name": "changelogs/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a17012640e0de964ad91678334aafd451c37e18566e4bb852374c764f0e857d8",
+ "chksum_sha256": "2ec3b1408f299447a0545db3af5352d7805e500126d402052a2a5350d6176cf3",
"format": 1
},
{
- "name": ".gitattributes",
+ "name": "LICENSE",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b2deb48e94193846f3933845436e4b28bd819b7e54f87f713c4e45925e84d645",
+ "chksum_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986",
"format": 1
},
{
@@ -407,6 +421,13 @@
"format": 1
},
{
+ "name": "roles/ansible_icinga/README.md",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b4f92a3f9a28b13ac06e528005998559a6127e397f993786178592f8cbcad953",
+ "format": 1
+ },
+ {
"name": "roles/ansible_icinga/tasks",
"ftype": "dir",
"chksum_type": null,
@@ -417,147 +438,140 @@
"name": "roles/ansible_icinga/tasks/icinga_notification_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7b40258afda97cc0a454a143530b109c6859a5e4e18a525ab091c1b06075cc2f",
+ "chksum_sha256": "3ed510aecab0815ba21273b12109ad176a82109e8d4632fd55cc4a6a1351e950",
"format": 1
},
{
"name": "roles/ansible_icinga/tasks/icinga_user.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d1a71b5185068e8547ba6b5d8b984a89bf2b9aef5a5570fb01187e3308c6be20",
+ "chksum_sha256": "0a22ae1878b383e50b0ce070f93dea6891ebfb7435ee8418855dc97ebfbf018a",
"format": 1
},
{
- "name": "roles/ansible_icinga/tasks/icinga_endpoint.yml",
+ "name": "roles/ansible_icinga/tasks/icinga_user_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e9bff8ec9f24722912d56fe4aef10678726f43171e75787044ede75fd922f8ed",
+ "chksum_sha256": "909270ad5fb424847e0c83bcda5b4a1c57594cd84cfa4e1c69163d0bf1647965",
"format": 1
},
{
- "name": "roles/ansible_icinga/tasks/icinga_command.yml",
+ "name": "roles/ansible_icinga/tasks/icinga_hostgroup.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c9dfd5df8e7f84087bfbb6ef993f49bb8db875c8b09496f4c1a62550ee430995",
+ "chksum_sha256": "0c6b23d97d1a9952ec9c136412169c2aaab0fb6afb5d60f2a284f47170d61976",
"format": 1
},
{
- "name": "roles/ansible_icinga/tasks/icinga_service_apply.yml",
+ "name": "roles/ansible_icinga/tasks/icinga_command.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3d698077d5a521445d4ffb3b99da0b00ca68f4949c74ce52a12c0d46a3dc035a",
+ "chksum_sha256": "120bc74b88e32236c14c79c883b780bae6a897fd44b326f1a173c33365a236be",
"format": 1
},
{
- "name": "roles/ansible_icinga/tasks/main.yml",
+ "name": "roles/ansible_icinga/tasks/icinga_host_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c78b9cb1b47b8fed5166803121a998d0f7cd44bc7840f2a5fb9074dfd7bae6e1",
+ "chksum_sha256": "7c991233dc5f88dbb383cac233b6555ddcb6aee765de0305bd567ab89d06f680",
"format": 1
},
{
- "name": "roles/ansible_icinga/tasks/icinga_timeperiod.yml",
+ "name": "roles/ansible_icinga/tasks/icinga_zone.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d93eaf04ff4345e95f5442b8d65736936a65db5bb3bdbdd8c88dcaf800133b62",
+ "chksum_sha256": "de69367fb15d7a51a9fb5d1efcc639f042745c62c1912715bbcc38e28b2d974b",
"format": 1
},
{
- "name": "roles/ansible_icinga/tasks/icinga_host.yml",
+ "name": "roles/ansible_icinga/tasks/icinga_notification.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cc7a01b09dbc8f55da467561db37a50597fe0f898ca4315b9be142436ed2adb1",
+ "chksum_sha256": "70c88549773540214c9606974ea596853b65c3ac25e9b89b4f51462e9a49edf2",
"format": 1
},
{
- "name": "roles/ansible_icinga/tasks/icinga_serviceset.yml",
+ "name": "roles/ansible_icinga/tasks/icinga_scheduled_downtime.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "58759313dc7e005b8305061f763914db20a39d49b355d73d15cd216cd6891edf",
+ "chksum_sha256": "c08714a38f6614ca9b5f180fa8074a70e664c87ed8bdd3d1fcd7dddfb1c9b10e",
"format": 1
},
{
- "name": "roles/ansible_icinga/tasks/icinga_notification.yml",
+ "name": "roles/ansible_icinga/tasks/icinga_serviceset.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b070e387a00a888c727fded1c0e606071a3b17d330e2b804e09facf25b489b69",
+ "chksum_sha256": "b1a5d31ae8f72d61af4f5c2d1748a9a026f13e65270b7433dbb0b797aeac228b",
"format": 1
},
{
- "name": "roles/ansible_icinga/tasks/icinga_scheduled_downtime.yml",
+ "name": "roles/ansible_icinga/tasks/icinga_command_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "64be740615cf8dd41d6fe6e6822c7c1d88996e2d2ff932d758790909f735f547",
+ "chksum_sha256": "6a863accf72920058f286460f9abba307277807ec979532702f297403035bb8b",
"format": 1
},
{
- "name": "roles/ansible_icinga/tasks/icinga_command_template.yml",
+ "name": "roles/ansible_icinga/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8557d9101cbc474d273d1a79b36b9267384e815d516c7dc624c259c8ec3c9137",
+ "chksum_sha256": "8ea7cf03bc7719dd5bbb4b180c3c58f4ea0ff960db5b497b206a3be9aebc0c41",
"format": 1
},
{
"name": "roles/ansible_icinga/tasks/icinga_service_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3f13bce269bd96b971880d84b12b11ce7ce80ecf9791be1b886e22a92e3e444",
+ "chksum_sha256": "ca5c61d35dcd4f5d0a5f87549bff8bf49ef7777e94b6f03acca1a1f934f85b88",
"format": 1
},
{
- "name": "roles/ansible_icinga/tasks/icinga_servicegroup.yml",
+ "name": "roles/ansible_icinga/tasks/icinga_service.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c2a6537dcf570c01b0174c1d2a3ec0617f6e2c3b88a3712f729179dbe042332f",
+ "chksum_sha256": "e5541f52f89db4d37cd95835c81808ec35d4caaa410e1c65596cc8d6d768242a",
"format": 1
},
{
- "name": "roles/ansible_icinga/tasks/icinga_zone.yml",
+ "name": "roles/ansible_icinga/tasks/icinga_endpoint.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9f60ea308d382cbe5bff05ad356e83642a56311bcab056ab43d3f44bc05aa151",
+ "chksum_sha256": "4483c6972926b577c2e6c3eac78d751391ecab194a86060a453c280f32b8ed1c",
"format": 1
},
{
- "name": "roles/ansible_icinga/tasks/icinga_hostgroup.yml",
+ "name": "roles/ansible_icinga/tasks/icinga_host.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec9efa8c517983730ba94a9fb8b2887d7403b3f9a8a4472df659c393943a1fd5",
+ "chksum_sha256": "36bb7da0f254af2ff2a498450dcfd9d867d1c0529647603d3cc3c25fabdc0e8f",
"format": 1
},
{
- "name": "roles/ansible_icinga/tasks/icinga_service.yml",
+ "name": "roles/ansible_icinga/tasks/icinga_timeperiod.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b1c45c43c43b4a9b5191bd82d7f7af12fea23b278f6824a47fbd92430d0e6b9f",
+ "chksum_sha256": "97e1ca54f74e56dab1e87e8a69bfc126bb949818bcac01b2217a65996873595b",
"format": 1
},
{
- "name": "roles/ansible_icinga/tasks/icinga_host_template.yml",
+ "name": "roles/ansible_icinga/tasks/icinga_servicegroup.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "df94796dfa810cdeebaedf6d6aff926a5dd561e92d620054edea2caff09bcc77",
+ "chksum_sha256": "1863a5620567750f71ebe476ee433424eaa0da7727c8000dc166dc6bd27162e6",
"format": 1
},
{
- "name": "roles/ansible_icinga/tasks/icinga_user_template.yml",
+ "name": "roles/ansible_icinga/tasks/icinga_service_apply.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e08ecac2e205d4ff1a3824b2053f3c916b124f2c6607b53ae8d7a906e2aa0cde",
+ "chksum_sha256": "1eb3e2cb19d048f5e37b8c622a6c6ec7fdd731611d3633caaee984f60aea4862",
"format": 1
},
{
- "name": "roles/ansible_icinga/meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
- "format": 1
- },
- {
- "name": "roles/ansible_icinga/meta/main.yml",
+ "name": "roles/ansible_icinga/tasks/icinga_user_group.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7203a939bb29fcfd6d88a7ecc1a93c75833c8a82ca683a6414356b87906476ff",
+ "chksum_sha256": "dc35eb0051ce092cc9048472539576d0f8d862f23c2ec4cd221b0bb4c2cc0f27",
"format": 1
},
{
@@ -571,14 +585,7 @@
"name": "roles/ansible_icinga/defaults/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b37f3b9d942e8ef665c760298b361ebf9b1ee62d0ca2f1c8c365b12649cdccef",
- "format": 1
- },
- {
- "name": "roles/ansible_icinga/README.md",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e67a3d46ad1dcab9da55b04eab44fa386a548027ed182d6e21e5d0d4af324791",
+ "chksum_sha256": "5ff6af0c5eb2a0a234c2359e4ef5c078dfa16d22b7f18a806829f30cb1c1b36d",
"format": 1
},
{
@@ -592,371 +599,385 @@
"name": "roles/ansible_icinga/handlers/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8867063615e078327203d9d9a3dc7d49a4544144c4ad87b1e734ea08f658aebb",
+ "chksum_sha256": "1851c12423d24d98f49fd53cb56da447f2ccb725f280db6969dc3eb30d0b8ea8",
"format": 1
},
{
- "name": "CODE_OF_CONDUCT.md",
+ "name": "roles/ansible_icinga/meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/ansible_icinga/meta/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "14ec928234a7ed52bf8b458d31e4862335111e477e4dbe7fb543686c24115140",
+ "chksum_sha256": "78562ed7a833674efbe5cde1822727ea75caf3b549500c4b9052c0edd5f63384",
"format": 1
},
{
- "name": "CODEOWNERS",
+ "name": "roles/ansible_icinga/meta/argument_specs.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "24cd4a61cdbb71f31779fccb0e8cfca894fb02eade70c5c9cee71ae6828d1b58",
+ "chksum_sha256": "25860ec1fafc849c73719f5cbb52de08d240a80f34b7838a9557aa7f64f548f5",
"format": 1
},
{
- "name": "docs",
+ "name": "meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "docs/icinga_serviceset.rst",
+ "name": "meta/runtime.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f00d2d38ace64bfc24ce034ecea861de33fd8cf054da1184721d8a799b22638b",
+ "chksum_sha256": "28cccdc20bd762974f58a8cf94c75cf0579034a0ccb7d2018c5693bfe4a3d3b7",
"format": 1
},
{
- "name": "docs/icinga_host_template_info.rst",
+ "name": "CODE_OF_CONDUCT.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b5820cd58abb5fcca940d318f2fe600d596becf192754b1766a9d454fd18e86e",
+ "chksum_sha256": "14ec928234a7ed52bf8b458d31e4862335111e477e4dbe7fb543686c24115140",
"format": 1
},
{
- "name": "docs/.gitkeep",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "name": "plugins",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/icinga_notification_info.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8320c94d95451596987f446d4efed37889e03f5b9e6e53b3181791cdf486f639",
+ "name": "plugins/module_utils",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/icinga_deploy_info.rst",
+ "name": "plugins/module_utils/icinga.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "04c3b91f6ccc48f19bfc1b2287e97cc15158626e0de4018a359a523858a58847",
+ "chksum_sha256": "a17012640e0de964ad91678334aafd451c37e18566e4bb852374c764f0e857d8",
"format": 1
},
{
- "name": "docs/icinga_command_template.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "712ceada4873413eaf6f514e7f11204ab84e41fc3fcbf9ba0a848021e180dfdf",
+ "name": "plugins/modules",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "docs/icinga_service_apply_info.rst",
+ "name": "plugins/modules/icinga_notification.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "128ae7c70f7c0a6095bb6eff2fd9e85ac180b0575265c40ef621d611d192f085",
+ "chksum_sha256": "731478a58e562235f434eea6157672258d52558a1aec5b541389261f0ae5030a",
"format": 1
},
{
- "name": "docs/icinga_hostgroup_info.rst",
+ "name": "plugins/modules/icinga_host_template_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "68f3bb8c3bd161b0979580c51f409e58dc53e8d050f6cf2cf92ca94e414fd93e",
+ "chksum_sha256": "6a916778512b0d6f27f525e2da8280e065a6e06f32fca4325e5164a3f4ff31b6",
"format": 1
},
{
- "name": "docs/icinga_user_info.rst",
+ "name": "plugins/modules/icinga_command.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "65f2cc11ca8e564df632609b154f39411402811b0fbbd1b1a6220aeedca56451",
+ "chksum_sha256": "4850dd60b1c6557995e0f0a30a2e8e05bfaa3873febfb410e663429585a72707",
"format": 1
},
{
- "name": "docs/icinga_timeperiod_info.rst",
+ "name": "plugins/modules/icinga_user_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "379a46278cad4604604d98b839e88b050db962329a22d9bebc18a3a734c2f2be",
+ "chksum_sha256": "581b14244d8c3706e6631780b29f46b0fb89f63cd8b1cbdda5c23c0651e9c3cf",
"format": 1
},
{
- "name": "docs/icinga_service_info.rst",
+ "name": "plugins/modules/icinga_user_group_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2b6272b280c7c9d24908096ae72245c53828cee1497b624192d689c7f2cbf0bb",
+ "chksum_sha256": "6e5f229cafab5a3d8024752f58e3192082d956aea409f4f4b9dba0f1b2a6371e",
"format": 1
},
{
- "name": "docs/icinga_user.rst",
+ "name": "plugins/modules/icinga_timeperiod_template_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f1a9a588e8abdf884c79e963d167d3bbeea6e7ee9c9aa2e855347590e7ec65b8",
+ "chksum_sha256": "7ecd6655ff95b53700806d00d09ef2b8d606ad3edcd8c9c5f40b526d6746fbd4",
"format": 1
},
{
- "name": "docs/icinga_endpoint.rst",
+ "name": "plugins/modules/icinga_command_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "98d4c03cffe0d6ec6996c9fdb02dcd83b11c6fbf5417f1ad3babe465487d845d",
+ "chksum_sha256": "f3325e7be18fa95480235d7905bc83756c1d958bcfb3e39de047c6aaf37c0d12",
"format": 1
},
{
- "name": "docs/icinga_zone.rst",
+ "name": "plugins/modules/icinga_service_apply_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6698e90afcc560405494f8a5cb15446ad300db0cf43a71b96cc9710fda7c99dd",
+ "chksum_sha256": "b7b1ef59f8f83ae999174fc5023ebfcf4b831b44356a4704b0d5757d31f9413a",
"format": 1
},
{
- "name": "docs/icinga_host_template.rst",
+ "name": "plugins/modules/icinga_zone_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3073ef58234d064561bd1c61afd3bf13c155b031ca154813dfe6cf6cea2e8d60",
+ "chksum_sha256": "031dab242c365b3aee630abee6448545a818f38430358d3358aa3db5f58c00b2",
"format": 1
},
{
- "name": "docs/icinga_notification_template_info.rst",
+ "name": "plugins/modules/icinga_deploy.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a8c8bf662b23f55fc34fb9354369ac7b551f70efaa21abe4222c77c058817daf",
+ "chksum_sha256": "4e416026f92cbb6e21667a8832161748078932cd096a78011ba4b85bca99109b",
"format": 1
},
{
- "name": "docs/icinga_command_info.rst",
+ "name": "plugins/modules/icinga_timeperiod_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ff12f037d7dc8f6e6e1ee533dac6e89fcefd1b6ec522e6f1bb3a86b1fac549d7",
+ "chksum_sha256": "f87bfe7a7e6f88867ad916658c4d92d63867179f3e793ff4d800ffc753ac66d5",
"format": 1
},
{
- "name": "docs/icinga_timeperiod_template_info.rst",
+ "name": "plugins/modules/icinga_serviceset.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "38ea5dca279e66726bfedb9eb906decfef42b60b578eae0c71999dcff2b9ced0",
+ "chksum_sha256": "9cffad89eeb2cc4da1ef1749836025725df751db35fefbcd420e00528f440f71",
"format": 1
},
{
- "name": "docs/icinga_notification.rst",
+ "name": "plugins/modules/icinga_user_group.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3d71f9465eff1f11bae990b23e80481ff472cd8d3ae76df2f737a3d5bcd1c7c6",
+ "chksum_sha256": "0bbe9b060799897810c637ffacb1b1a723e46b99db928999f1093503cdbdad2e",
"format": 1
},
{
- "name": "docs/icinga_servicegroup.rst",
+ "name": "plugins/modules/icinga_endpoint_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c6b7007f9b9c819d9d8ee38887ed5143da04363c92dff84b6562eb29e3e82c22",
+ "chksum_sha256": "d3fd36c406dd69b24afcbc405f384ce9ccbd509d54a5b7e31eb0023357861258",
"format": 1
},
{
- "name": "docs/icinga_deploy.rst",
+ "name": "plugins/modules/icinga_service_apply.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "083671bd5b35e19249529327624c7d515296b72b4a9441907a6a1bc6986df721",
+ "chksum_sha256": "70a4feba741119bf2aaa7bcf4f870cd25b6e88f9030b37f8f24f5919ea7d6899",
"format": 1
},
{
- "name": "docs/icinga_host.rst",
+ "name": "plugins/modules/icinga_host_template.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c84d729e51fed6bb199f22b5d6113118ab4647a55d1b9f98fccdc62ff1bbb312",
+ "chksum_sha256": "f08ea8599c552ba06ef28fd87223ad3176a5fae73077adc0ff13e1ce5e870d29",
"format": 1
},
{
- "name": "docs/icinga_service_template_info.rst",
+ "name": "plugins/modules/icinga_service.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "26aea36bc17910c713576b95ef1800704a81caec2a2c1f62611085dda8c5a97d",
+ "chksum_sha256": "15fa5bed2a8d7c308fb7f95892ad540a764fc57352e2c48f6f57269cadf41333",
"format": 1
},
{
- "name": "docs/icinga_zone_info.rst",
+ "name": "plugins/modules/icinga_zone.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b46356a8245852122b172a2c9daff95947f9996d4119b09d0a3125b6b59b910d",
+ "chksum_sha256": "68a82be1565b2841b69c20d663ae084c364c517b27531f683024d3f1fb32badd",
"format": 1
},
{
- "name": "docs/icinga_user_template_info.rst",
+ "name": "plugins/modules/icinga_command_template.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b5abd1e0ef18abe2e48caa887151484b02e35481a57842ee7873987312eba8ac",
+ "chksum_sha256": "bc15ac65064e261663ed9fb329fd4b8bcee60c9a02d1b3f7b0e53ec38060e9b1",
"format": 1
},
{
- "name": "docs/icinga_service.rst",
+ "name": "plugins/modules/icinga_timeperiod_template.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3b2fdfcc93e1cdf1c5908719c08884b3d48e33bf958686242e9bec9dcea5d852",
+ "chksum_sha256": "aef9cb6ea2ee9f4a8540da6ef4b0185e9fc8d904e7ec63b4a451a9b78e66d092",
"format": 1
},
{
- "name": "docs/icinga_user_template.rst",
+ "name": "plugins/modules/icinga_notification_template_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b6479d03bff152baef69dbe2db979077248f0c61addf85af0ff8fcd95c45a1df",
+ "chksum_sha256": "b94210434c4785785f183e94539bad62b7e906abd763cfafc199291324a66a4b",
"format": 1
},
{
- "name": "docs/icinga_notification_template.rst",
+ "name": "plugins/modules/icinga_hostgroup_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4dba0f64ee219cea065ee72054722622f8011b47958ab0ccaedc3cc3cb3721fa",
+ "chksum_sha256": "8e385fdf84e961d6cae5496c59bdc710b8cc8516eaa921d36991b826185423b2",
"format": 1
},
{
- "name": "docs/icinga_user_group.rst",
+ "name": "plugins/modules/icinga_hostgroup.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "76a7629d4d25a9939f443bdf6d227957b937ea2bc0bce6adabef07c2efff5ce3",
+ "chksum_sha256": "25fe567954b8e78857aad9a889ea0da80f24a9005d2316a1e9b2aa2172fa9947",
"format": 1
},
{
- "name": "docs/icinga_endpoint_info.rst",
+ "name": "plugins/modules/icinga_user_template_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b167b9c55be74dcb839737b6fcac7d4d70f4d4607578c20e4e9d7a57a97ee263",
+ "chksum_sha256": "09015fa2d503a63f75918ebeadf81488d5db96d8003553accd666534e17258ec",
"format": 1
},
{
- "name": "docs/icinga_command.rst",
+ "name": "plugins/modules/icinga_service_template_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5af5899a3f95baf28cafe4a262bd5f9351abf27bb1c7543a653a70a4c89574db",
+ "chksum_sha256": "79027979d612de069884ea422b430660c1823ebcbef95872b2ae4b12089f7100",
"format": 1
},
{
- "name": "docs/icinga_servicegroup_info.rst",
+ "name": "plugins/modules/icinga_deploy_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9a99593e23cb0c744204e4761aae8557dc2e1db7d15d8cfe03dad62a5cd09897",
+ "chksum_sha256": "8c15b71eb94e7323670d54a49bbcf74c0f198af9b4418064a86e9465f9b32d49",
"format": 1
},
{
- "name": "docs/icinga_scheduled_downtime.rst",
+ "name": "plugins/modules/icinga_user.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eb05d0dcddad62d103030a48fcb2b7be270e44008fc0c7d66c3eeeb965a95c4b",
+ "chksum_sha256": "94cca6809793d50a7716466701bcaadd307b1bf36ae2db1839ed679631936e5d",
"format": 1
},
{
- "name": "docs/icinga_timeperiod.rst",
+ "name": "plugins/modules/icinga_notification_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7ef79a953606d7d5745c045cb83db736251d825e377d89c26079b2d919533b80",
+ "chksum_sha256": "0acf822f2bfbf15b9a197750457f71117973b92d31a301ddb51d3adc49d5cabe",
"format": 1
},
{
- "name": "docs/icinga_host_info.rst",
+ "name": "plugins/modules/icinga_servicegroup.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c953507375cbf5d1bd4b727bfcaabd7719f4f7a4489186d1569474e206d395d3",
+ "chksum_sha256": "9208341a441e4b47b70dd3ecbbd7749dbe730b327ad582c8e04acc44a258897e",
"format": 1
},
{
- "name": "docs/icinga_command_template_info.rst",
+ "name": "plugins/modules/icinga_host.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4fd5b810c23e74381890134eaf332b4c07846fdd8b2c676d0b4604360c0ebf3d",
+ "chksum_sha256": "932cb54002669c25a603ea998dfa3bc5845e025d5362a0afba8f38733fe5a672",
"format": 1
},
{
- "name": "docs/icinga_director_inventory.rst",
+ "name": "plugins/modules/icinga_command_template_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "83eac988b52587241a2e171a655111e58418375e21fd7d82149e1ec4f5014851",
+ "chksum_sha256": "0552ff8bcecd00973bae4ef9f695ba27cdebd2d806e5341fe2b292b87a7792e2",
"format": 1
},
{
- "name": "docs/icinga_hostgroup.rst",
+ "name": "plugins/modules/icinga_service_template.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4dbb0f673fb9bdbc4e200d7789e6c9e31ef767c9d2870dfe411e4b1169f8dfd1",
+ "chksum_sha256": "7aaf5a8cbe631079be1e54aaa74048ff39a067b9443af9f3e3e706e7e4958e71",
"format": 1
},
{
- "name": "docs/icinga_service_template.rst",
+ "name": "plugins/modules/icinga_user_template.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f787870a906543323acf30f41c10df902aa3a04848ffdaff89557f297f91e19d",
+ "chksum_sha256": "002207d6493402887a2b66a02ef12cbe09fd5402a62f329089d8572fbb669bcd",
"format": 1
},
{
- "name": "docs/icinga_user_group_info.rst",
+ "name": "plugins/modules/icinga_servicegroup_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d79cf09e18862e57adf7976bbdfa19c2b8c9e53e89eebc6b8c35a5faab3932ab",
+ "chksum_sha256": "3d3f9d954c477286c2b789f604da25d116cf850e9e1e14b0ea04b4d755037cac",
"format": 1
},
{
- "name": "docs/icinga_service_apply.rst",
+ "name": "plugins/modules/icinga_timeperiod.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e717a877bf9b007a02e6201a93d787a2764b9fbf179d1d2a4b32f7f58d61662c",
+ "chksum_sha256": "08ff91ecd1d9f0e160bd9b7997cdbc2ebbeb287b77969c8477c30d29d54701b1",
"format": 1
},
{
- "name": "docs/icinga_timeperiod_template.rst",
+ "name": "plugins/modules/icinga_scheduled_downtime.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2023e5f94e875f8a49c9e6305239c7c9aa2058a25a412fed6ddc8ce140ba423e",
+ "chksum_sha256": "f156a76ea47beff013a3de0f879aaf7245274c53c1e01355ec7a7c5fc034782f",
"format": 1
},
{
- "name": "changelogs",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/icinga_endpoint.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b00feba05e27cbe1e62eaf2d99e9293d8f4fcbeb6342811aade18398ef0b66b5",
"format": 1
},
{
- "name": "changelogs/.plugin-cache.yaml",
+ "name": "plugins/modules/icinga_notification_template.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "753a07ef0f7ef12a58c41bd87d838c9c38596847321793a663bb05d81773d27e",
+ "chksum_sha256": "d44a47b755ea484cae1334f8a8904ee38000510e178c1fbc5fa709f0987cd0fd",
"format": 1
},
{
- "name": "changelogs/config.yaml",
+ "name": "plugins/modules/icinga_service_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "abbab66a433f6362c97d2c632af58683642922225a26a1dd7c6a78923d4ab8d8",
+ "chksum_sha256": "ef2c457bf40f38f8973a23ed3946e27387a441d0aeb0e0dba3e9a3099bec1782",
"format": 1
},
{
- "name": "changelogs/changelog.yaml",
+ "name": "plugins/modules/icinga_host_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2517d86911c97e893f0bfe6ec4710bc64af609102160c4fe65bf2855b94228df",
+ "chksum_sha256": "e7c4e5676e867e448abc760dd5480bd064852aff48ebf3b9c644a4032747c2b4",
"format": 1
},
{
- "name": "CHANGELOG.rst",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "37b71114a4a2582519b119d06a58096412169169d949fea7160974085fab8ef5",
+ "name": "plugins/inventory",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": ".gitignore",
+ "name": "plugins/inventory/icinga_director_inventory.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0cb2d7d561d8f1feb38146d6c58c6143c7568b624e2ab6cf03ebc6247e35c991",
+ "chksum_sha256": "afce980e40cd5134fb384d20d89db8b6ed94500cf18afe4a25f201c5d1b33403",
"format": 1
},
{
- "name": "CONTRIBUTING.md",
+ "name": "plugins/doc_fragments",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "plugins/doc_fragments/common_options.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "95e2b2b6d356582984f8c830150fcfa1b879807776d24c0111426df8191febca",
+ "chksum_sha256": "4636a41b3a10c7786474a983e2e95c4098b9134c4ea779322639c4907380714e",
"format": 1
},
{
@@ -974,276 +995,276 @@
"format": 1
},
{
- "name": "examples/icinga_user.yml",
+ "name": "examples/icinga_timeperiod_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "77a4a85033a17a2c01e0b815841b9b6f8a2005b79f79a192d8a7ff79eba88f19",
+ "chksum_sha256": "251b934cfff8049e8f099e27fab9004770bd5e7e70ab9e05735a58f92dcba8a3",
"format": 1
},
{
- "name": "examples/icinga_deploy.yml",
+ "name": "examples/icinga_command_template_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b9240a2981ad06b06ab70b1e20f8b723db498cecd8b9da9bc238190dcd5f57b5",
+ "chksum_sha256": "254be467a7a0cab236214309451b5d4e0d4b3e69174bacbdf9cabdf90ca3a551",
"format": 1
},
{
- "name": "examples/icinga_service_apply_info.yml",
+ "name": "examples/icinga_user.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "14d8ab6677e86c30b351eecab2a7272c78ac4655986213d3eddcf30859e623d1",
+ "chksum_sha256": "77a4a85033a17a2c01e0b815841b9b6f8a2005b79f79a192d8a7ff79eba88f19",
"format": 1
},
{
- "name": "examples/icinga_endpoint.yml",
+ "name": "examples/icinga_user_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "887165606d68526c02c6bfdbf0eb4645920e4daf39209ddaf45d52f2478604ec",
+ "chksum_sha256": "911e2d4932b2c32781659ee618b20c8601bc877ac64b60576499816f09b0090e",
"format": 1
},
{
- "name": "examples/icinga_user_template_info.yml",
+ "name": "examples/icinga_hostgroup.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7b6110eeb12c02697fcece0808700950ac19fe43e3a646ce0f89118dabc81168",
+ "chksum_sha256": "2f97da7567484286d19828e9400893320a57437db22c48e5c6ac9d42060baa05",
"format": 1
},
{
- "name": "examples/icinga_command.yml",
+ "name": "examples/icinga_hostgroup_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a6f06fb01b75049349ddfb1e9013f51ec9c4895e7608a14dddf700248bf5d513",
+ "chksum_sha256": "45e4689ee18180e4eb7b40d3068f97d027dd3fea15ef7d4047472c389ab29b6b",
"format": 1
},
{
- "name": "examples/icinga_notification_template_info.yml",
+ "name": "examples/icinga_command.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2809ba95d1af3826a7c9a452b9d3653b3c043b2481d2b97aed755122fbcc25fc",
+ "chksum_sha256": "a6f06fb01b75049349ddfb1e9013f51ec9c4895e7608a14dddf700248bf5d513",
"format": 1
},
{
- "name": "examples/icinga_service_apply.yml",
+ "name": "examples/icinga_notification_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a00a08b1b456f6e894cc8663d210c6047d52a597814297b160615c93164962d1",
+ "chksum_sha256": "98eef22da0092ff5377fcecca15e1fc0558c503679bc2a3294a765decaacb96e",
"format": 1
},
{
- "name": "examples/icinga_service_info.yml",
+ "name": "examples/icinga_host_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "860bc4e5be4715321447a98f302fcc5d0c5b7477261c518fabb7425f906e864b",
+ "chksum_sha256": "c8f6c22b0e4607397b72ce7547c53e00af67a886defe17803114098454921e24",
"format": 1
},
{
- "name": "examples/icinga_host_info.yml",
+ "name": "examples/icinga_timeperiod_template_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "055b91b5c0ee2414d2d98615f347dbd069a78435de77cd9c48920231fa676d99",
+ "chksum_sha256": "71d222a97afc01aea18d020ac807c0e95b8e4333b6615c46a74da488cde74184",
"format": 1
},
{
- "name": "examples/icinga_timeperiod.yml",
+ "name": "examples/icinga_user_template_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "13a953f1e4cfe7d03820a103b39b0ccd7c4e0d197589d5eb07bbdc3d25008a08",
+ "chksum_sha256": "7b6110eeb12c02697fcece0808700950ac19fe43e3a646ce0f89118dabc81168",
"format": 1
},
{
- "name": "examples/icinga_deploy_info.yml",
+ "name": "examples/icinga_user_group_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a1b828fbaa900b4f6feb21890e80c3323f7bd7a77bab812c6b54dce83c3e8cf2",
+ "chksum_sha256": "5bf5d5e38e4495259143cd23953d5c4ab3159d3054f99c999290b3fa26d5c1f1",
"format": 1
},
{
- "name": "examples/icinga_host_template_info.yml",
+ "name": "examples/icinga_host_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "346041e0adb668b0804089e625b752ddec705c89d802509ecd91210c7423995c",
+ "chksum_sha256": "055b91b5c0ee2414d2d98615f347dbd069a78435de77cd9c48920231fa676d99",
"format": 1
},
{
- "name": "examples/icinga_host.yml",
+ "name": "examples/icinga_zone.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b1c68f146fb672336cf61ef7d479eb627289e4486c1b125ba872dfe50d75468f",
+ "chksum_sha256": "0c274ef58c679451cad3b66fdeefe6a87b3464e6428aa6d7ffb5c2ca246998f8",
"format": 1
},
{
- "name": "examples/icinga_command_info.yml",
+ "name": "examples/icinga_notification.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9b74a538c1280f212d6a6472008a257addb0eda43e0fdc6fb1ef90702d5c140e",
+ "chksum_sha256": "01c0155456e226ab4ad7795f7476da6a33143f7ac58c276f381420433de1a665",
"format": 1
},
{
- "name": "examples/icinga_serviceset.yml",
+ "name": "examples/icinga_service_template_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9412f532cfc7d4240833335438e2f76719fdd077e0565d105682feec0ed57077",
+ "chksum_sha256": "91eb87e231b61a57f0e04e7fdc1f1948d718213d509fafdc525ae641aace21ce",
"format": 1
},
{
- "name": "examples/icinga_notification_info.yml",
+ "name": "examples/icinga_service_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "98eef22da0092ff5377fcecca15e1fc0558c503679bc2a3294a765decaacb96e",
+ "chksum_sha256": "860bc4e5be4715321447a98f302fcc5d0c5b7477261c518fabb7425f906e864b",
"format": 1
},
{
- "name": "examples/icinga_timeperiod_template_info.yml",
+ "name": "examples/icinga_scheduled_downtime.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "71d222a97afc01aea18d020ac807c0e95b8e4333b6615c46a74da488cde74184",
+ "chksum_sha256": "d61714d09931ee87e2a1cec25ce88701c7fae920bef878426ac3d07df4cd7f16",
"format": 1
},
{
- "name": "examples/icinga_hostgroup_info.yml",
+ "name": "examples/icinga_serviceset.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "45e4689ee18180e4eb7b40d3068f97d027dd3fea15ef7d4047472c389ab29b6b",
+ "chksum_sha256": "9412f532cfc7d4240833335438e2f76719fdd077e0565d105682feec0ed57077",
"format": 1
},
{
- "name": "examples/icinga_notification.yml",
+ "name": "examples/icinga_command_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1c17cc131bf59ed8a505ca7b13567cb7a5dd98c57ff81a5a04ca49551ec5792d",
+ "chksum_sha256": "f2e846ba5a592eebb5ea3a2e7a6523086e99f82d9c5a3b513379c23875147405",
"format": 1
},
{
- "name": "examples/icinga_zone_info.yml",
+ "name": "examples/icinga_endpoint_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8fb9373a0e75af62078dbd18d9bb5707fdc66bdfbf1876d4a2b72a2502053588",
+ "chksum_sha256": "89b884f7dc89266675d13800795addb80f63926cbc2f1123146e0004ececd715",
"format": 1
},
{
- "name": "examples/icinga_scheduled_downtime.yml",
+ "name": "examples/icinga_service_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d61714d09931ee87e2a1cec25ce88701c7fae920bef878426ac3d07df4cd7f16",
+ "chksum_sha256": "2c5f98d8b8071dd49cb4b5cf6008ca3920fd24aea1402a6acd9833b0df7ac639",
"format": 1
},
{
- "name": "examples/icinga_servicegroup_info.yml",
+ "name": "examples/icinga_service.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c1e772f1bf28eb3201f3c82caa5ddf9ddf2eb4ff895308be373503d47636b8f4",
+ "chksum_sha256": "bc284c3dd237b02b1669611668c419e3d750427531ecfccb43eca797d57b9310",
"format": 1
},
{
- "name": "examples/icinga_command_template.yml",
+ "name": "examples/icinga_user_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f2e846ba5a592eebb5ea3a2e7a6523086e99f82d9c5a3b513379c23875147405",
+ "chksum_sha256": "263c67b5908ad7a0859e72b8a87cd32455b2c4066038d2ff1b5805c299b0942c",
"format": 1
},
{
- "name": "examples/icinga_timeperiod_template.yml",
+ "name": "examples/icinga_endpoint.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "33f7082668ee409157785602e8cda28d3925d152ae2e0bfdb6148c3599d01c2c",
+ "chksum_sha256": "887165606d68526c02c6bfdbf0eb4645920e4daf39209ddaf45d52f2478604ec",
"format": 1
},
{
- "name": "examples/icinga_service_template.yml",
+ "name": "examples/icinga_host.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2c5f98d8b8071dd49cb4b5cf6008ca3920fd24aea1402a6acd9833b0df7ac639",
+ "chksum_sha256": "b1c68f146fb672336cf61ef7d479eb627289e4486c1b125ba872dfe50d75468f",
"format": 1
},
{
- "name": "examples/icinga_servicegroup.yml",
+ "name": "examples/icinga_deploy_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "57979256402841f081042e1f9b169696b8f34a75ec551feb8676567e99cdc4dd",
+ "chksum_sha256": "a1b828fbaa900b4f6feb21890e80c3323f7bd7a77bab812c6b54dce83c3e8cf2",
"format": 1
},
{
- "name": "examples/icinga_command_template_info.yml",
+ "name": "examples/icinga_service_apply_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "254be467a7a0cab236214309451b5d4e0d4b3e69174bacbdf9cabdf90ca3a551",
+ "chksum_sha256": "14d8ab6677e86c30b351eecab2a7272c78ac4655986213d3eddcf30859e623d1",
"format": 1
},
{
- "name": "examples/icinga_timeperiod_info.yml",
+ "name": "examples/icinga_servicegroup_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "251b934cfff8049e8f099e27fab9004770bd5e7e70ab9e05735a58f92dcba8a3",
+ "chksum_sha256": "c1e772f1bf28eb3201f3c82caa5ddf9ddf2eb4ff895308be373503d47636b8f4",
"format": 1
},
{
- "name": "examples/icinga_user_group.yml",
+ "name": "examples/icinga_timeperiod.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5df4b4776b7c326bc40af161670164798c0f1e2364f10f5600b5bedd6c68a79d",
+ "chksum_sha256": "13a953f1e4cfe7d03820a103b39b0ccd7c4e0d197589d5eb07bbdc3d25008a08",
"format": 1
},
{
- "name": "examples/icinga_user_info.yml",
+ "name": "examples/icinga_command_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "263c67b5908ad7a0859e72b8a87cd32455b2c4066038d2ff1b5805c299b0942c",
+ "chksum_sha256": "9b74a538c1280f212d6a6472008a257addb0eda43e0fdc6fb1ef90702d5c140e",
"format": 1
},
{
- "name": "examples/icinga_endpoint_info.yml",
+ "name": "examples/icinga_servicegroup.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "89b884f7dc89266675d13800795addb80f63926cbc2f1123146e0004ececd715",
+ "chksum_sha256": "57979256402841f081042e1f9b169696b8f34a75ec551feb8676567e99cdc4dd",
"format": 1
},
{
- "name": "examples/icinga_zone.yml",
+ "name": "examples/icinga_notification_template_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0c274ef58c679451cad3b66fdeefe6a87b3464e6428aa6d7ffb5c2ca246998f8",
+ "chksum_sha256": "2809ba95d1af3826a7c9a452b9d3653b3c043b2481d2b97aed755122fbcc25fc",
"format": 1
},
{
- "name": "examples/icinga_user_group_info.yml",
+ "name": "examples/icinga_host_template_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5bf5d5e38e4495259143cd23953d5c4ab3159d3054f99c999290b3fa26d5c1f1",
+ "chksum_sha256": "346041e0adb668b0804089e625b752ddec705c89d802509ecd91210c7423995c",
"format": 1
},
{
- "name": "examples/icinga_hostgroup.yml",
+ "name": "examples/icinga_zone_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2f97da7567484286d19828e9400893320a57437db22c48e5c6ac9d42060baa05",
+ "chksum_sha256": "8fb9373a0e75af62078dbd18d9bb5707fdc66bdfbf1876d4a2b72a2502053588",
"format": 1
},
{
- "name": "examples/icinga_service.yml",
+ "name": "examples/icinga_timeperiod_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bc284c3dd237b02b1669611668c419e3d750427531ecfccb43eca797d57b9310",
+ "chksum_sha256": "33f7082668ee409157785602e8cda28d3925d152ae2e0bfdb6148c3599d01c2c",
"format": 1
},
{
- "name": "examples/icinga_host_template.yml",
+ "name": "examples/icinga_deploy.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c8f6c22b0e4607397b72ce7547c53e00af67a886defe17803114098454921e24",
+ "chksum_sha256": "5d2961a15a97f5697909cc23b8b8c0066167bd2d6035d382a38d7be58dd9bbe6",
"format": 1
},
{
- "name": "examples/icinga_service_template_info.yml",
+ "name": "examples/icinga_service_apply.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "91eb87e231b61a57f0e04e7fdc1f1948d718213d509fafdc525ae641aace21ce",
+ "chksum_sha256": "a00a08b1b456f6e894cc8663d210c6047d52a597814297b160615c93164962d1",
"format": 1
},
{
- "name": "examples/icinga_user_template.yml",
+ "name": "examples/icinga_user_group.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "911e2d4932b2c32781659ee618b20c8601bc877ac64b60576499816f09b0090e",
+ "chksum_sha256": "5df4b4776b7c326bc40af161670164798c0f1e2364f10f5600b5bedd6c68a79d",
"format": 1
}
],
diff --git a/ansible_collections/telekom_mms/icinga_director/MANIFEST.json b/ansible_collections/telekom_mms/icinga_director/MANIFEST.json
index b357e7be0..27d9786e0 100644
--- a/ansible_collections/telekom_mms/icinga_director/MANIFEST.json
+++ b/ansible_collections/telekom_mms/icinga_director/MANIFEST.json
@@ -2,7 +2,7 @@
"collection_info": {
"namespace": "telekom_mms",
"name": "icinga_director",
- "version": "1.35.0",
+ "version": "2.1.2",
"authors": [
"Sebastian Gumprich <sebastian.gumprich@telekom.de>",
"Lars Krahl <lars.krahl@telekom.de>"
@@ -27,7 +27,7 @@
"name": "FILES.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7c8dbd31542edb1082a047035d4829f4a60ad8cfdce054933c441ee6ea79d724",
+ "chksum_sha256": "e553901bd64de5ab9835fed98bb0268a7f12fa0721f7577194c921cfe5d0b280",
"format": 1
},
"format": 1
diff --git a/ansible_collections/telekom_mms/icinga_director/README.md b/ansible_collections/telekom_mms/icinga_director/README.md
index 199774aee..694672e90 100644
--- a/ansible_collections/telekom_mms/icinga_director/README.md
+++ b/ansible_collections/telekom_mms/icinga_director/README.md
@@ -34,7 +34,9 @@ Additionally all supported modules have an appropriate `*_info`-module to gather
4. An [inventory plugin](plugins/inventory) to use hosts and groups defined in Icinga as a dynamic inventory.
-Required Ansible version: 2.9.10
+Required Ansible version: 2.14.0
+
+Recommended Icinga-Director version: 2.11.1
## Installation
@@ -192,6 +194,32 @@ fatal: [localhost]: FAILED! => {"changed": false, "msg": "bad return code while
failed: [localhost] => {"ansible_loop_var": "item", "changed": false, "item": "localhost", "msg": "AbstractDigestAuthHandler does not support the following scheme: 'Negotiate'", "status": -1, "url": "https://icinga-director.example.com/director/host?name=foohost"}
```
+## Known Errors with different Director versions
+
+### Director 1.11.1
+
+When creating notifications that contain the `users`-parameter, the task might not be idempotent ([see](https://github.com/Icinga/icingaweb2-module-director/issues/2882)).
+
+### Director 1.11.0
+
+You cannot create usergroups because of invalid property assign_filter ([see](https://github.com/telekom-mms/ansible-collection-icinga-director/issues/228)).
+
+### Director 1.10.0
+
+Existing service apply rule objects cannot be modified ([see](https://github.com/telekom-mms/ansible-collection-icinga-director/issues/190)):
+
+```
+TASK [Add service apply rule to icinga] ********************************************************************************************
+fatal: [localhost]: FAILED! => {"changed": false, "msg": "exception when deleting: 'id'"}
+```
+
+### Director 1.9.0
+
+When creating service checks, the tasks fails ([see](https://github.com/telekom-mms/ansible-collection-icinga-director/issues/160)):
+
+```
+failed: [icinga2-master1.localdomain] (item={'name': 'director-generic-service', 'enable_active_checks': True, 'enable_event_handler': True, 'enable_flapping': True, 'enable_notifications': True, 'eanble_passive_checks': True, 'enable_perfdata': True, 'use_agent': True, 'volatile': False}) => {"ansible_loop_var": "item", "changed": false, "item": {"eanble_passive_checks": true, "enable_active_checks": true, "enable_event_handler": true, "enable_flapping": true, "enable_notifications": true, "enable_perfdata": true, "name": "director-generic-service", "use_agent": true, "volatile": false}, "msg": "bad return code while creating: 422. Error message: Trying to recreate icinga_service (\"{\"object_name\":\"director-generic-service\"}\")"}
+```
## Extras
diff --git a/ansible_collections/telekom_mms/icinga_director/changelogs/.plugin-cache.yaml b/ansible_collections/telekom_mms/icinga_director/changelogs/.plugin-cache.yaml
index 3f683a288..c83c06f3a 100644
--- a/ansible_collections/telekom_mms/icinga_director/changelogs/.plugin-cache.yaml
+++ b/ansible_collections/telekom_mms/icinga_director/changelogs/.plugin-cache.yaml
@@ -217,4 +217,4 @@ plugins:
shell: {}
strategy: {}
vars: {}
-version: 1.35.0
+version: 2.1.2
diff --git a/ansible_collections/telekom_mms/icinga_director/changelogs/changelog.yaml b/ansible_collections/telekom_mms/icinga_director/changelogs/changelog.yaml
index ac4912876..f0c52abb2 100644
--- a/ansible_collections/telekom_mms/icinga_director/changelogs/changelog.yaml
+++ b/ansible_collections/telekom_mms/icinga_director/changelogs/changelog.yaml
@@ -1,288 +1,332 @@
---
ancestor:
releases:
- 1.18.1:
+ 2.1.2:
changes:
trivial:
- - add changelogs config so antsibull-changelog can work (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/124)
- - use antsichaut and release-drafter for changelog and release generation
- (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/122)
- release_date: '2021-06-28'
- 1.19.0:
+ - add service_set var to deployment of icinga_services (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/256)
+ release_date: '2024-04-22'
+ 2.1.1:
changes:
- minor_changes:
- - add notification_template to role (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/125)
+ bugfixes:
+ - set user_groups in notification to empty list (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/255)
+ - change notification interval variable to int-type (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/254)
trivial:
- - add Inventory plugin (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/127)
- - add changelogs config so antsibull-changelog can work (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/124)
- - ignore changelogs directory created by a 3rd party tool (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/126)
- - use antsichaut and release-drafter for changelog and release generation
- (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/122)
- release_date: '2021-06-28'
- 1.20.0:
+ - update tested ansible and python versions (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/253)
+ - Update ansible-community/ansible-test-gh-action action to v1.15.0 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/252)
+ - Update github/codeql-action digest to df5a14d (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/251)
+ - Update github/codeql-action digest to 47b3d88 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/250)
+ - document known errors for different director versions (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/249)
+ release_date: '2024-02-14'
+ 2.1.0:
changes:
minor_changes:
- - Add some more documentation on command template (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/128)
- - add "vars" variable to icinga_notification in the role (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/129)
- release_date: '2021-07-16'
- 1.20.1:
+ - Increase sleep to 5 seconds (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/245)
+ release_date: '2024-02-13'
+ 2.0.5:
+ release_date: '2024-02-12'
+ 2.0.4:
+ release_date: '2024-02-12'
+ 2.0.3:
+ release_date: '2024-02-12'
+ 2.0.2:
changes:
trivial:
- - Docs and tests update (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/131)
- release_date: '2021-08-05'
- 1.21.0:
- changes:
- minor_changes:
- - Add event_command parameter to icinga_service_apply module (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/132)
- - Add event_command parameter to service apply playbook to enable usage (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/133)
- trivial:
- - Docs and tests update (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/131)
- release_date: '2021-08-16'
- 1.21.1:
+ - add 1.11.1 to test-matrix (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/247)
+ - Update release-drafter/release-drafter action to v6 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/244)
+ - release only on releases, not pre-releases (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/237)
+ release_date: '2024-01-25'
+ 2.0.1:
changes:
bugfixes:
- - Changed place in the creation order of service object in ansible_icinga
- role (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/135)
- release_date: '2021-08-30'
- 1.21.2:
- changes:
+ - 'Fixes #190 - Workaround for service apply bug (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/239)'
trivial:
- - 'Draft: updated retry pull request (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/139)'
- - added 3 retries for every playbook (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/138)
- release_date: '2021-09-13'
- 1.22.0:
+ - Add optional parameters to deploy handler (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/243)
+ - test different director versions with the services function (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/240)
+ - use antsichaut action (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/238)
+ release_date: '2024-01-25'
+ 1.35.0:
changes:
minor_changes:
- - Add support for retry_interval and max_check_attempts to host template (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/140)
+ - Extended docs and examples for multiple assign_filter conditions (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/227)
trivial:
- - 'Draft: updated retry pull request (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/139)'
- - added 3 retries for every playbook (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/138)
- release_date: '2021-09-15'
- 1.22.1:
+ - exclude old python versions with ansible devel (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/225)
+ - Update actions/checkout action to v4 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/224)
+ - Update test matrix (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/223)
+ release_date: '2023-11-13'
+ 1.34.2:
changes:
trivial:
- - added missing parameter to notification task (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/141)
- - ansible-test needs python >= 3.8 at the controller (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/142)
- release_date: '2021-09-17'
- 1.23.0:
- release_date: '2021-09-23'
- 1.23.1:
+ - exclude old python versions with ansible devel (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/225)
+ - Update actions/checkout action to v4 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/224)
+ - Update test matrix (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/223)
+ release_date: '2023-08-07'
+ 1.34.1:
+ changes:
+ bugfixes:
+ - add more http-options for inventory module (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/221)
+ release_date: '2023-07-28'
+ 1.33.3:
changes:
minor_changes:
- - add resolve option to inventory-plugin (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/147)
+ - add command_endpoint var for service templates (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/222)
+ release_date: '2023-07-14'
+ 1.33.2:
+ changes:
trivial:
- - add documentation files and creation-workflow to repo (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/144)
- - improve autogenerated documentation (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/145)
- release_date: '2021-10-18'
- 1.25.0:
+ - move orga (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/216)
+ - run CI-tests only once peer week (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/215)
+ release_date: '2023-06-09'
+ 1.33.1:
changes:
bugfixes:
- - added a fix for the new scheduled_downtime module (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/150)
+ - add icinga_deploy_* to action_group and test it (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/214)
+ trivial:
+ - Update README (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/211)
+ release_date: '2023-05-22'
+ 1.33.0:
+ changes:
minor_changes:
- - Add Icinga scheduled downtime module (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/146)
- release_date: '2021-11-22'
- 1.25.1:
+ - Add Icinga Deploy handler and module (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/205)
+ trivial:
+ - use codespell to improve spelling (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/207)
+ - Update actions/checkout action to v3.5.0 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/206)
+ modules:
+ - description: Trigger deployment in Icinga2
+ name: icinga_deploy
+ namespace: ''
+ - description: Get deployment information through the director API
+ name: icinga_deploy_info
+ namespace: ''
+ release_date: '2023-05-22'
+ 1.32.3:
changes:
trivial:
- - added duration into our scheduled_downtime task (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/151)
- - fix call url function (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/154)
- release_date: '2021-11-24'
- 1.26.0:
+ - use codespell to improve spelling (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/207)
+ - Update actions/checkout action to v3.5.0 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/206)
+ release_date: '2023-03-09'
+ 1.32.2:
changes:
- minor_changes:
- - add option to append arguments to all modules (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/153)
trivial:
- - added duration into our scheduled_downtime task (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/151)
- - fix call url function (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/154)
- release_date: '2021-12-03'
- 1.27.0:
+ - lowercase some more bools (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/204)
+ release_date: '2023-03-07'
+ 1.32.1:
+ changes:
+ trivial:
+ - Consider true/false in docs for boolean (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/203)
+ - immediately return values and update dict-updates (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/199)
+ release_date: '2023-01-20'
+ 1.32.0:
changes:
minor_changes:
- - Add possibility to use Compose and keyed groups in inventory-module (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/155)
- release_date: '2022-01-03'
- 1.27.1:
+ - Add zone to user and notification template (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/198)
+ trivial:
+ - Update ansible-test to latest collection template. (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/195)
+ - Update actions/checkout action to v3.2.0 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/194)
+ - Update ansible-community/ansible-test-gh-action action to v1.12.0 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/192)
+ - add galaxy.yml to yamllinting (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/191)
+ release_date: '2023-01-06'
+ 1.31.5:
changes:
trivial:
- - fixed missing property 'display_name' in module 'icinga_service' (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/157)
- release_date: '2022-02-15'
- 1.27.2:
+ - Update ansible-test to latest collection template. (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/195)
+ - Update actions/checkout action to v3.2.0 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/194)
+ - Update ansible-community/ansible-test-gh-action action to v1.12.0 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/192)
+ - add galaxy.yml to yamllinting (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/191)
+ release_date: '2022-11-15'
+ 1.31.4:
+ release_date: '2022-11-04'
+ 1.31.3:
+ release_date: '2022-11-04'
+ 1.31.2:
+ release_date: '2022-11-04'
+ 1.31.1:
changes:
trivial:
- - Fix sanity tests (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/159)
- release_date: '2022-03-19'
- 1.28.0:
+ - add empty default to argument docs (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/188)
+ - Update ansible-community/ansible-test-gh-action action to v1.11.1 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/186)
+ - Update ansible-community/ansible-test-gh-action action to v1.11.0 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/185)
+ - Update actions/checkout action to v3.1.0 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/184)
+ - fix problems found by refurb (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/183)
+ - Update ansible-community/ansible-test-gh-action action to v1.10.0 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/182)
+ - add ansible 2.14 to test-matrix, use new gh-action for tests (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/181)
+ release_date: '2022-08-22'
+ 1.31.0:
changes:
- bugfixes:
- - 'role: add check_command to icinga_service_apply (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/161)'
minor_changes:
- - Added missing fields to 'icinga_host' and 'icinga_host_template' (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/158)
+ - Add flapping support to service template module (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/180)
+ - Add icon support to service template (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/179)
+ release_date: '2022-08-22'
+ 1.30.2:
+ release_date: '2022-08-02'
+ 1.30.1:
+ changes:
+ bugfixes:
+ - Add exception handling to diff and exist functions (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/176)
trivial:
- - Fix sanity tests (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/159)
- release_date: '2022-03-28'
- 1.28.1:
+ - update list of ansible and python versions to be tested (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/178)
+ - update python-version for ansible-lint in tests (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/177)
+ release_date: '2022-07-01'
+ 1.30.0:
changes:
minor_changes:
- - Test more ansible versions (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/162)
+ - Add action_group to enable module default groups (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/175)
trivial:
- - Configure Renovate (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/164)
- - 'chore(deps): update actions/checkout action (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/168)'
- - 'chore(deps): update actions/setup-python action to v3 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/169)'
- - 'chore(deps): update codecov/codecov-action action to v3 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/170)'
- - 'chore(deps): update github-actions-x/commit action to v2.9 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/166)'
- release_date: '2022-03-30'
+ - fix release workflow (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/174)
+ - 'chore(deps): update actions/setup-python action to v4 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/173)'
+ - 'chore(deps): update github/codeql-action action to v2 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/172)'
+ - 'chore(deps): update actions/checkout action to v3.0.2 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/171)'
+ release_date: '2022-06-16'
+ 1.29.1:
+ changes:
+ trivial:
+ - fix release workflow (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/174)
+ - 'chore(deps): update actions/setup-python action to v4 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/173)'
+ - 'chore(deps): update github/codeql-action action to v2 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/172)'
+ - 'chore(deps): update actions/checkout action to v3.0.2 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/171)'
+ release_date: '2022-04-21'
1.29.0:
changes:
minor_changes:
- Add icinga_serviceset module (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/163)
- Test more ansible versions (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/162)
trivial:
- - Configure Renovate (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/164)
- - 'chore(deps): update actions/checkout action (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/168)'
- - 'chore(deps): update actions/setup-python action to v3 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/169)'
- 'chore(deps): update codecov/codecov-action action to v3 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/170)'
+ - 'chore(deps): update actions/setup-python action to v3 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/169)'
+ - 'chore(deps): update actions/checkout action (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/168)'
- 'chore(deps): update github-actions-x/commit action to v2.9 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/166)'
+ - Configure Renovate (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/164)
modules:
- description: Manage servicesets in Icinga2
name: icinga_serviceset
namespace: ''
release_date: '2022-04-20'
- 1.29.1:
+ 1.28.1:
changes:
+ minor_changes:
+ - Test more ansible versions (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/162)
trivial:
- - 'chore(deps): update actions/checkout action to v3.0.2 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/171)'
- - 'chore(deps): update actions/setup-python action to v4 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/173)'
- - 'chore(deps): update github/codeql-action action to v2 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/172)'
- - fix release workflow (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/174)
- release_date: '2022-04-21'
- 1.30.0:
+ - 'chore(deps): update codecov/codecov-action action to v3 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/170)'
+ - 'chore(deps): update actions/setup-python action to v3 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/169)'
+ - 'chore(deps): update actions/checkout action (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/168)'
+ - 'chore(deps): update github-actions-x/commit action to v2.9 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/166)'
+ - Configure Renovate (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/164)
+ release_date: '2022-03-30'
+ 1.28.0:
changes:
+ bugfixes:
+ - 'role: add check_command to icinga_service_apply (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/161)'
minor_changes:
- - Add action_group to enable module default groups (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/175)
+ - Added missing fields to 'icinga_host' and 'icinga_host_template' (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/158)
trivial:
- - 'chore(deps): update actions/checkout action to v3.0.2 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/171)'
- - 'chore(deps): update actions/setup-python action to v4 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/173)'
- - 'chore(deps): update github/codeql-action action to v2 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/172)'
- - fix release workflow (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/174)
- release_date: '2022-06-16'
- 1.30.1:
+ - Fix sanity tests (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/159)
+ release_date: '2022-03-28'
+ 1.27.2:
changes:
- bugfixes:
- - Add exception handling to diff and exist functions (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/176)
trivial:
- - update list of ansible and python versions to be tested (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/178)
- - update python-version for ansible-lint in tests (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/177)
- release_date: '2022-07-01'
- 1.30.2:
- release_date: '2022-08-02'
- 1.31.0:
+ - Fix sanity tests (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/159)
+ release_date: '2022-03-19'
+ 1.27.1:
+ changes:
+ trivial:
+ - fixed missing property 'display_name' in module 'icinga_service' (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/157)
+ release_date: '2022-02-15'
+ 1.27.0:
changes:
minor_changes:
- - Add flapping support to service template module (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/180)
- - Add icon support to service template (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/179)
- release_date: '2022-08-22'
- 1.31.1:
+ - Add possibility to use Compose and keyed groups in inventory-module (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/155)
+ release_date: '2022-01-03'
+ 1.26.0:
changes:
+ minor_changes:
+ - add option to append arguments to all modules (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/153)
trivial:
- - Update actions/checkout action to v3.1.0 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/184)
- - Update ansible-community/ansible-test-gh-action action to v1.10.0 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/182)
- - Update ansible-community/ansible-test-gh-action action to v1.11.0 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/185)
- - Update ansible-community/ansible-test-gh-action action to v1.11.1 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/186)
- - add ansible 2.14 to test-matrix, use new gh-action for tests (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/181)
- - add empty default to argument docs (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/188)
- - fix problems found by refurb (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/183)
- release_date: '2022-08-22'
- 1.31.2:
- release_date: '2022-11-04'
- 1.31.3:
- release_date: '2022-11-04'
- 1.31.4:
- release_date: '2022-11-04'
- 1.31.5:
+ - fix call url function (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/154)
+ - added duration into our scheduled_downtime task (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/151)
+ release_date: '2021-12-03'
+ 1.25.1:
changes:
trivial:
- - Update actions/checkout action to v3.2.0 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/194)
- - Update ansible-community/ansible-test-gh-action action to v1.12.0 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/192)
- - Update ansible-test to latest collection template. (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/195)
- - add galaxy.yml to yamllinting (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/191)
- release_date: '2022-11-15'
- 1.32.0:
+ - fix call url function (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/154)
+ - added duration into our scheduled_downtime task (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/151)
+ release_date: '2021-11-24'
+ 1.25.0:
changes:
+ bugfixes:
+ - added a fix for the new scheduled_downtime module (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/150)
minor_changes:
- - Add zone to user and notification template (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/198)
- trivial:
- - Update actions/checkout action to v3.2.0 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/194)
- - Update ansible-community/ansible-test-gh-action action to v1.12.0 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/192)
- - Update ansible-test to latest collection template. (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/195)
- - add galaxy.yml to yamllinting (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/191)
- release_date: '2023-01-06'
- 1.32.1:
+ - Add Icinga scheduled downtime module (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/146)
+ release_date: '2021-11-22'
+ 1.23.1:
changes:
+ minor_changes:
+ - add resolve option to inventory-plugin (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/147)
trivial:
- - Consider true/false in docs for boolean (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/203)
- - immediately return values and update dict-updates (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/199)
- release_date: '2023-01-20'
- 1.32.2:
+ - improve autogenerated documentation (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/145)
+ - add documentation files and creation-workflow to repo (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/144)
+ release_date: '2021-10-18'
+ 1.23.0:
+ release_date: '2021-09-23'
+ 1.22.1:
changes:
trivial:
- - lowercase some more bools (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/204)
- release_date: '2023-03-07'
- 1.32.3:
+ - ansible-test needs python >= 3.8 at the controller (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/142)
+ - added missing parameter to notification task (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/141)
+ release_date: '2021-09-17'
+ 1.22.0:
changes:
+ minor_changes:
+ - Add support for retry_interval and max_check_attempts to host template (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/140)
trivial:
- - Update actions/checkout action to v3.5.0 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/206)
- - use codespell to improve spelling (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/207)
- release_date: '2023-03-09'
- 1.33.0:
+ - 'Draft: updated retry pull request (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/139)'
+ - added 3 retries for every playbook (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/138)
+ release_date: '2021-09-15'
+ 1.21.2:
changes:
- minor_changes:
- - Add Icinga Deploy handler and module (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/205)
trivial:
- - Update actions/checkout action to v3.5.0 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/206)
- - use codespell to improve spelling (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/207)
- modules:
- - description: Trigger deployment in Icinga2
- name: icinga_deploy
- namespace: ''
- - description: Get deployment information through the director API
- name: icinga_deploy_info
- namespace: ''
- release_date: '2023-05-22'
- 1.33.1:
+ - 'Draft: updated retry pull request (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/139)'
+ - added 3 retries for every playbook (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/138)
+ release_date: '2021-09-13'
+ 1.21.1:
changes:
bugfixes:
- - add icinga_deploy_* to action_group and test it (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/214)
+ - Changed place in the creation order of service object in ansible_icinga
+ role (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/135)
+ release_date: '2021-08-30'
+ 1.21.0:
+ changes:
+ minor_changes:
+ - Add event_command parameter to service apply playbook to enable usage (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/133)
+ - Add event_command parameter to icinga_service_apply module (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/132)
trivial:
- - Update README (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/211)
- release_date: '2023-05-22'
- 1.33.2:
+ - Docs and tests update (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/131)
+ release_date: '2021-08-16'
+ 1.20.1:
changes:
trivial:
- - move orga (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/216)
- - run CI-tests only once peer week (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/215)
- release_date: '2023-06-09'
- 1.33.3:
+ - Docs and tests update (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/131)
+ release_date: '2021-08-05'
+ 1.20.0:
changes:
minor_changes:
- - add command_endpoint var for service templates (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/222)
- release_date: '2023-07-14'
- 1.34.1:
- changes:
- bugfixes:
- - add more http-options for inventory module (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/221)
- release_date: '2023-07-28'
- 1.34.2:
+ - add "vars" variable to icinga_notification in the role (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/129)
+ - Add some more documentation on command template (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/128)
+ release_date: '2021-07-16'
+ 1.19.0:
changes:
+ minor_changes:
+ - add notification_template to role (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/125)
trivial:
- - Update actions/checkout action to v4 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/224)
- - Update test matrix (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/223)
- - exclude old python versions with ansible devel (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/225)
- release_date: '2023-08-07'
- 1.35.0:
+ - add Inventory plugin (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/127)
+ - ignore changelogs directory created by a 3rd party tool (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/126)
+ - add changelogs config so antsibull-changelog can work (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/124)
+ - use antsichaut and release-drafter for changelog and release generation
+ (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/122)
+ release_date: '2021-06-28'
+ 1.18.1:
changes:
- minor_changes:
- - Extended docs and examples for multiple assign_filter conditions (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/227)
trivial:
- - Update test matrix (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/223)
- - exclude old python versions with ansible devel (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/225)
- - Update actions/checkout action to v4 (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/224)
- release_date: '2023-11-13'
+ - add changelogs config so antsibull-changelog can work (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/124)
+ - use antsichaut and release-drafter for changelog and release generation
+ (https://github.com/telekom-mms/ansible-collection-icinga-director/pull/122)
+ release_date: '2021-06-28'
diff --git a/ansible_collections/telekom_mms/icinga_director/docs/icinga_deploy.rst b/ansible_collections/telekom_mms/icinga_director/docs/icinga_deploy.rst
index b436f54c9..9fc59ee26 100644
--- a/ansible_collections/telekom_mms/icinga_director/docs/icinga_deploy.rst
+++ b/ansible_collections/telekom_mms/icinga_director/docs/icinga_deploy.rst
@@ -22,6 +22,10 @@ Trigger a deployment to Icinga2 through the director API.
Parameters
----------
+ timeout (optional, int, 2)
+ Default timeout to wait for deployment to finish in seconds.
+
+
url (True, str, None)
HTTP, HTTPS, or FTP URL in the form (http|https|ftp)://[user[:pass]]@host.domain[:port]/path
@@ -100,6 +104,7 @@ Examples
url: "{{ icinga_url }}"
url_username: "{{ icinga_user }}"
url_password: "{{ icinga_pass }}"
+ timeout: 5
diff --git a/ansible_collections/telekom_mms/icinga_director/docs/icinga_notification.rst b/ansible_collections/telekom_mms/icinga_director/docs/icinga_notification.rst
index 9e1625a7f..d6b63da94 100644
--- a/ansible_collections/telekom_mms/icinga_director/docs/icinga_notification.rst
+++ b/ansible_collections/telekom_mms/icinga_director/docs/icinga_notification.rst
@@ -30,7 +30,7 @@ Parameters
Name of the notification.
- notification_interval (optional, str, None)
+ notification_interval (optional, int, None)
The notification interval (in seconds). This interval is used for active notifications.
Defaults to 30 minutes. If set to 0, re-notifications are disabled.
@@ -90,7 +90,7 @@ Parameters
When the last notification should be sent.
- user_groups (optional, list, None)
+ user_groups (optional, list, [])
User Groups that should be notified by this notification.
@@ -190,7 +190,7 @@ Examples
assign_filter: 'host.name="foohost"'
imports:
- foonotificationtemplate
- notification_interval: '0'
+ notification_interval: 0
object_name: E-Mail_host
states:
- Up
@@ -207,6 +207,28 @@ Examples
times_begin: 20
times_end: 120
+ - name: Create another notification
+ telekom_mms.icinga_director.icinga_notification:
+ state: present
+ url: "{{ icinga_url }}"
+ url_username: "{{ icinga_user }}"
+ url_password: "{{ icinga_pass }}"
+ apply_to: host
+ assign_filter: 'host.name="foohost"'
+ imports:
+ - foonotificationtemplate
+ notification_interval: 0
+ object_name: E-Mail_host
+ states:
+ - Up
+ - Down
+ types:
+ - Problem
+ - Recovery
+ users:
+ - rb
+ time_period: "24/7"
+
- name: Update notification
telekom_mms.icinga_director.icinga_notification:
state: present
diff --git a/ansible_collections/telekom_mms/icinga_director/examples/icinga_deploy.yml b/ansible_collections/telekom_mms/icinga_director/examples/icinga_deploy.yml
index 017ab6b2c..9d823d10c 100644
--- a/ansible_collections/telekom_mms/icinga_director/examples/icinga_deploy.yml
+++ b/ansible_collections/telekom_mms/icinga_director/examples/icinga_deploy.yml
@@ -4,3 +4,4 @@
url: "{{ icinga_url }}"
url_username: "{{ icinga_user }}"
url_password: "{{ icinga_pass }}"
+ timeout: 5
diff --git a/ansible_collections/telekom_mms/icinga_director/examples/icinga_notification.yml b/ansible_collections/telekom_mms/icinga_director/examples/icinga_notification.yml
index c19cfe547..09077cb41 100644
--- a/ansible_collections/telekom_mms/icinga_director/examples/icinga_notification.yml
+++ b/ansible_collections/telekom_mms/icinga_director/examples/icinga_notification.yml
@@ -9,7 +9,7 @@
assign_filter: 'host.name="foohost"'
imports:
- foonotificationtemplate
- notification_interval: '0'
+ notification_interval: 0
object_name: E-Mail_host
states:
- Up
@@ -25,6 +25,27 @@
time_period: "24/7"
times_begin: 20
times_end: 120
+- name: Create another notification
+ telekom_mms.icinga_director.icinga_notification:
+ state: present
+ url: "{{ icinga_url }}"
+ url_username: "{{ icinga_user }}"
+ url_password: "{{ icinga_pass }}"
+ apply_to: host
+ assign_filter: 'host.name="foohost"'
+ imports:
+ - foonotificationtemplate
+ notification_interval: 0
+ object_name: E-Mail_host
+ states:
+ - Up
+ - Down
+ types:
+ - Problem
+ - Recovery
+ users:
+ - rb
+ time_period: "24/7"
- name: Update notification
telekom_mms.icinga_director.icinga_notification:
state: present
diff --git a/ansible_collections/telekom_mms/icinga_director/meta/runtime.yml b/ansible_collections/telekom_mms/icinga_director/meta/runtime.yml
index 6d1ae61a8..96f7fcac9 100644
--- a/ansible_collections/telekom_mms/icinga_director/meta/runtime.yml
+++ b/ansible_collections/telekom_mms/icinga_director/meta/runtime.yml
@@ -1,5 +1,5 @@
---
-requires_ansible: '>=2.9.10'
+requires_ansible: ">=2.14.0"
action_groups:
icinga:
diff --git a/ansible_collections/telekom_mms/icinga_director/plugins/modules/icinga_deploy.py b/ansible_collections/telekom_mms/icinga_director/plugins/modules/icinga_deploy.py
index 08abc7b4f..a5ab24b7a 100644
--- a/ansible_collections/telekom_mms/icinga_director/plugins/modules/icinga_deploy.py
+++ b/ansible_collections/telekom_mms/icinga_director/plugins/modules/icinga_deploy.py
@@ -32,6 +32,12 @@ version_added: '1.33.0'
extends_documentation_fragment:
- ansible.builtin.url
- telekom_mms.icinga_director.common_options
+options:
+ timeout:
+ description:
+ - Default timeout to wait for deployment to finish in seconds.
+ default: 2
+ type: int
"""
EXAMPLES = """
@@ -40,6 +46,7 @@ EXAMPLES = """
url: "{{ icinga_url }}"
url_username: "{{ icinga_user }}"
url_password: "{{ icinga_pass }}"
+ timeout: 5
"""
RETURN = r"""
@@ -71,6 +78,7 @@ def main():
# add our own arguments
argument_spec.update(
url=dict(required=True),
+ timeout=dict(required=False, default=2, type="int")
)
# Define the main module
@@ -92,8 +100,8 @@ def main():
icinga_deployment = Icinga2APIObject(module=module, path="/config/deploy", data=[])
result = icinga_deployment.create()
# the deployment is asynchronous and I don't know of a way to check if it is finished.
- # so we need some sleep here. 2 seconds is a wild guess.
- sleep(2)
+ # so we need some sleep here. 2 seconds is a wild guess and a default, now it is a variable
+ sleep(module.params["timeout"])
# get the new deployment status
create_deployment = icinga_deploy_status.query_deployment()["data"]["active_configuration"]["config"]
diff --git a/ansible_collections/telekom_mms/icinga_director/plugins/modules/icinga_notification.py b/ansible_collections/telekom_mms/icinga_director/plugins/modules/icinga_notification.py
index 9d100ef75..7e657edf6 100644
--- a/ansible_collections/telekom_mms/icinga_director/plugins/modules/icinga_notification.py
+++ b/ansible_collections/telekom_mms/icinga_director/plugins/modules/icinga_notification.py
@@ -40,18 +40,18 @@ options:
- Apply feature state.
choices: [ "present", "absent" ]
default: present
- type: str
+ type: "str"
object_name:
description:
- Name of the notification.
aliases: ['name']
required: true
- type: str
+ type: "str"
notification_interval:
description:
- The notification interval (in seconds). This interval is used for active notifications.
- Defaults to 30 minutes. If set to 0, re-notifications are disabled.
- type: str
+ type: "int"
types:
description:
- The state transition types you want to get notifications for.
@@ -72,7 +72,7 @@ options:
description:
- Whether this notification should affect hosts or services.
- Required if I(state) is C(present).
- type: str
+ type: "str"
choices: ["host", "service"]
assign_filter:
description:
@@ -121,13 +121,14 @@ options:
- User Groups that should be notified by this notification.
type: "list"
elements: str
+ default: []
version_added: '1.16.0'
append:
description:
- Do not overwrite the whole object but instead append the defined properties.
- Note - Appending to existing vars, imports or any other list/dict is not possible. You have to overwrite the complete list/dict.
- Note - Variables that are set by default will also be applied, even if not set.
- type: bool
+ type: "bool"
choices: [true, false]
version_added: '1.25.0'
"""
@@ -143,7 +144,7 @@ EXAMPLES = """
assign_filter: 'host.name="foohost"'
imports:
- foonotificationtemplate
- notification_interval: '0'
+ notification_interval: 0
object_name: E-Mail_host
states:
- Up
@@ -160,6 +161,28 @@ EXAMPLES = """
times_begin: 20
times_end: 120
+- name: Create another notification
+ telekom_mms.icinga_director.icinga_notification:
+ state: present
+ url: "{{ icinga_url }}"
+ url_username: "{{ icinga_user }}"
+ url_password: "{{ icinga_pass }}"
+ apply_to: host
+ assign_filter: 'host.name="foohost"'
+ imports:
+ - foonotificationtemplate
+ notification_interval: 0
+ object_name: E-Mail_host
+ states:
+ - Up
+ - Down
+ types:
+ - Problem
+ - Recovery
+ users:
+ - rb
+ time_period: "24/7"
+
- name: Update notification
telekom_mms.icinga_director.icinga_notification:
state: present
@@ -200,10 +223,10 @@ def main():
disabled=dict(
type="bool", required=False, default=False, choices=[True, False]
),
- notification_interval=dict(required=False),
+ notification_interval=dict(type="int", required=False),
states=dict(type="list", elements="str", required=False),
users=dict(type="list", elements="str", required=False),
- user_groups=dict(type="list", elements="str", required=False),
+ user_groups=dict(type="list", elements="str", default=[], required=False),
types=dict(type="list", elements="str", required=False),
vars=dict(type="dict", default={}, required=False),
period=dict(required=False, aliases=["time_period"]),
diff --git a/ansible_collections/telekom_mms/icinga_director/plugins/modules/icinga_service_apply.py b/ansible_collections/telekom_mms/icinga_director/plugins/modules/icinga_service_apply.py
index e5b5cba2d..7ee8a7a52 100644
--- a/ansible_collections/telekom_mms/icinga_director/plugins/modules/icinga_service_apply.py
+++ b/ansible_collections/telekom_mms/icinga_director/plugins/modules/icinga_service_apply.py
@@ -251,6 +251,8 @@ from ansible_collections.telekom_mms.icinga_director.plugins.module_utils.icinga
# Icinga2 API class
#
class ServiceApplyRule(Icinga2APIObject):
+ find_by_parameter = None
+
def __init__(self, module, data):
path = "/service"
super(ServiceApplyRule, self).__init__(module, path, data)
@@ -260,18 +262,22 @@ class ServiceApplyRule(Icinga2APIObject):
if ret["code"] == 200:
for existing_rule in ret["data"]["objects"]:
if existing_rule["object_name"] == self.data["object_name"]:
- self.object_id = existing_rule["id"]
+ if "uuid" in existing_rule and existing_rule["uuid"] is not None:
+ self.find_by_parameter = "uuid"
+ else:
+ self.find_by_parameter = "id"
+ self.object_id = existing_rule[self.find_by_parameter]
return self.object_id
return False
def delete(self):
- return super(ServiceApplyRule, self).delete(find_by="id")
+ return super(ServiceApplyRule, self).delete(find_by=self.find_by_parameter)
def modify(self):
- return super(ServiceApplyRule, self).modify(find_by="id")
+ return super(ServiceApplyRule, self).modify(find_by=self.find_by_parameter)
def diff(self):
- return super(ServiceApplyRule, self).diff(find_by="id")
+ return super(ServiceApplyRule, self).diff(find_by=self.find_by_parameter)
# ===========================================
diff --git a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/README.md b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/README.md
index d71b97c74..767e69622 100644
--- a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/README.md
+++ b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/README.md
@@ -1,239 +1,2064 @@
-# Ansible Icinga
+<!-- BEGIN_ANSIBLE_DOCS -->
+# Ansible Role: telekom_mms.icinga_director.ansible_icinga
+---
+Version: 1.35.0
This role is used to configure an Icinga Instance over its Icinga Director.
-## Installation
-
-* create a `requirements.yml`:
+Tags: icinga
-```bash
+## Requirements
---
-collections:
- - name: telekom_mms.icinga_director
- src: https://github.com/telekom_mms/ansible-collection-icinga-director
- version: 1.2.2
-```
+| Platform | Versions |
+| -------- | -------- |
+| all | |
-* install the collections:
+## Supported Operating Systems
+- all
-```bash
-ansible-galaxy collection install -r requirements.yml -p collections/
-```
+## Role Variables
+
+- `icinga_command_templates`:
+ - Default: ``
+ - Description: A list of Icinga command_templat to configure
+ - Type: list of 'str'
+ - Required: no
+ - Options:
+
+ - `state`:
+ - description:
+
+ - "Apply feature state."
+
+ - Choices:
+ - present
+ - absent
+ - default: "present"
+ - type: "str"
+ - required: "no"
+
+ - `command`:
+ - description:
+
+ - "The command Icinga should run."
+
+ - "Absolute paths are accepted as provided, relative paths are prefixed with "PluginDir + ", similar Constant prefixes are allowed."
+
+ - "Spaces will lead to separation of command path and standalone arguments."
+
+ - "Please note that this means that we do not support spaces in plugin names and paths right now."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `command_type`:
+ - description:
+
+ - "Plugin Check commands are what you need when running checks against your infrastructure."
+
+ - "Notification commands will be used when it comes to notify your users."
+
+ - "Event commands allow you to trigger specific actions when problems occur."
+
+ - "Some people use them for auto-healing mechanisms, like restarting services or rebooting systems at specific thresholds."
+
+ - Choices:
+ - PluginCheck
+ - PluginNotification
+ - PluginEvent
+ - default: "PluginCheck"
+ - type: "str"
+ - required: "no"
+
+ - `disabled`:
+ - description:
+
+ - "Disabled objects will not be deployed."
+
+ - Choices:
+ - True
+ - False
+ - default: "False"
+ - type: "bool"
+ - required: "no"
+
+ - `name`:
+ - description:
+
+ - "Name of the command template."
+
+ - default: ""
+ - type: "str"
+ - required: "yes"
+
+ - `imports`:
+ - description:
+
+ - "Importable templates, add as many as you want. Please note that order matters when importing properties from multiple templates - last one wins."
+
+ - default: ""
+ - type: "list"
+ - required: "no"
+
+ - `timeout`:
+ - description:
+
+ - "Optional command timeout. Allowed values are seconds or durations postfixed with a specific unit (for example 1m or also 3m 30s)."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `zone`:
+ - description:
+
+ - "Icinga cluster zone. Allows to manually override Directors decisions of where to deploy your config to."
+
+ - "You should consider not doing so unless you gained deep understanding of how an Icinga Cluster stack works."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `vars`:
+ - description:
+
+ - "Custom properties of the command template."
+
+ - default: ""
+ - type: "dict"
+ - required: "no"
+
+ - `arguments`:
+ - description:
+
+ - "Arguments of the command template."
+
+ - default: ""
+ - type: "dict"
+ - required: "no"
+
+- `icinga_commands`:
+ - Default: ``
+ - Description: A list of Icinga commands to configure
+ - Type: list of 'str'
+ - Required: no
+ - Options:
+
+ - `state`:
+ - description:
+
+ - "Apply feature state."
+
+ - Choices:
+ - present
+ - absent
+ - default: "present"
+ - type: "str"
+ - required: "no"
+
+ - `command`:
+ - description:
+
+ - "The command Icinga should run. Required when state is C(present)."
+
+ - "Absolute paths are accepted as provided, relative paths are prefixed with "PluginDir + ", similar Constant prefixes are allowed."
+
+ - "Spaces will lead to separation of command path and standalone arguments."
+
+ - "Please note that this means that we do not support spaces in plugin names and paths right now."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `command_type`:
+ - description:
+
+ - "Plugin Check commands are what you need when running checks against your infrastructure."
+
+ - "Notification commands will be used when it comes to notify your users."
+
+ - "Event commands allow you to trigger specific actions when problems occur."
+
+ - "Some people use them for auto-healing mechanisms, like restarting services or rebooting systems at specific thresholds."
+
+ - Choices:
+ - PluginCheck
+ - PluginNotification
+ - PluginEvent
+ - default: "PluginCheck"
+ - type: "str"
+ - required: "no"
+
+ - `disabled`:
+ - description:
+
+ - "Disabled objects will not be deployed."
+
+ - Choices:
+ - True
+ - False
+ - default: "False"
+ - type: "bool"
+ - required: "no"
+
+ - `name`:
+ - description:
+
+ - "Name of the command."
+
+ - default: ""
+ - type: "str"
+ - required: "yes"
+
+ - `imports`:
+ - description:
+
+ - "Importable templates, add as many as you want. Please note that order matters when importing properties from multiple templates - last one wins."
+
+ - default: ""
+ - type: "list"
+ - required: "no"
+
+ - `timeout`:
+ - description:
+
+ - "Optional command timeout. Allowed values are seconds or durations postfixed with a specific unit (for example 1m or also 3m 30s)."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `zone`:
+ - description:
+
+ - "Icinga cluster zone. Allows to manually override Directors decisions of where to deploy your config to."
+
+ - "You should consider not doing so unless you gained deep understanding of how an Icinga Cluster stack works."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `vars`:
+ - description:
+
+ - "Custom properties of the command."
+
+ - default: ""
+ - type: "dict"
+ - required: "no"
+
+ - `arguments`:
+ - description:
+
+ - "Arguments of the command."
+
+ - default: ""
+ - type: "dict"
+ - required: "no"
+
+- `icinga_endpoints`:
+ - Default: ``
+ - Description: A list of Icinga endpoints to configure
+ - Type: list of 'str'
+ - Required: no
+ - Options:
+
+ - `state`:
+ - description:
+
+ - "Apply feature state."
+
+ - Choices:
+ - present
+ - absent
+ - default: "present"
+ - type: "str"
+ - required: "no"
+
+ - `name`:
+ - description:
+
+ - "Icinga object name for this endpoint."
+
+ - "This is usually a fully qualified host name but it could basically be any kind of string."
+
+ - "To make things easier for your users we strongly suggest to use meaningful names for templates."
+
+ - "For example "generic-endpoint" is ugly, "Standard Linux Server" is easier to understand."
+
+ - default: ""
+ - type: "str"
+ - required: "yes"
+
+ - `host`:
+ - description:
+
+ - "The hostname/IP address of the remote Icinga 2 instance."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `port`:
+ - description:
+
+ - "The service name/port of the remote Icinga 2 instance. Defaults to 5665."
+
+ - default: ""
+ - type: "int"
+ - required: "no"
+
+ - `log_duration`:
+ - description:
+
+ - "Duration for keeping replay logs on connection loss. Defaults to 1d (86400 seconds). Attribute is specified in seconds. If log_duration is set to 0, replaying logs is disabled. You could also specify the value in human readable format like 10m for 10 minutes or 1h for one hour."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `zone`:
+ - description:
+
+ - "The name of the zone this endpoint is part of."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+- `icinga_host_templates`:
+ - Default: ``
+ - Description: A list of Icinga host_templates to configure
+ - Type: list of 'str'
+ - Required: no
+ - Options:
+
+ - `state`:
+ - description:
+
+ - "Apply feature state."
+
+ - Choices:
+ - present
+ - absent
+ - default: "present"
+ - type: "str"
+ - required: "no"
+
+ - `name`:
+ - description:
+
+ - "Icinga object name for this host template."
+
+ - "This is usually a fully qualified host name but it could basically be any kind of string."
+
+ - "To make things easier for your users we strongly suggest to use meaningful names for templates."
+
+ - "For example "generic-host" is ugly, "Standard Linux Server" is easier to understand."
+
+ - default: ""
+ - type: "str"
+ - required: "yes"
+
+ - `display_name`:
+ - description:
+
+ - "Alternative name for this host."
+
+ - "Might be a host alias or and kind of string helping your users to identify this host."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `address`:
+ - description:
+
+ - "Host address. Usually an IPv4 address, but may be any kind of address your check plugin is able to deal with."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `address6`:
+ - description:
+
+ - "Host IPv6 address. Usually an IPv64 address, but may be any kind of address your check plugin is able to deal with."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `groups`:
+ - description:
+
+ - "Hostgroups that should be directly assigned to this node. Hostgroups can be useful for various reasons."
+
+ - "You might assign service checks based on assigned hostgroup. They are also often used as an instrument to enforce restricted views in Icinga Web 2."
+
+ - "Hostgroups can be directly assigned to single hosts or to host templates."
+
+ - "You might also want to consider assigning hostgroups using apply rules."
+
+ - default: "[]"
+ - type: "list"
+ - required: "no"
+
+ - `check_command`:
+ - description:
+
+ - "The name of the check command."
+
+ - "Though this is not required to be defined in the director, you still have to supply a check_command in a host or host-template."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `event_command`:
+ - description:
+
+ - "Event command for host which gets called on every check execution if one of these conditions matches"
+
+ - "The host is in a soft state"
+
+ - "The host state changes into a hard state"
+
+ - "The host state recovers from a soft or hard state to OK/Up"
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `check_interval`:
+ - description:
+
+ - "Your regular check interval."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `disabled`:
+ - description:
+
+ - "Disabled objects will not be deployed."
+
+ - Choices:
+ - True
+ - False
+ - default: "False"
+ - type: "bool"
+ - required: "no"
+
+ - `imports`:
+ - description:
+
+ - "Choose a host-template."
+
+ - default: ""
+ - type: "list"
+ - required: "no"
+
+ - `zone`:
+ - description:
+
+ - "Set the zone."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `vars`:
+ - description:
+
+ - "Custom properties of the host."
+
+ - default: ""
+ - type: "dict"
+ - required: "no"
+
+ - `notes`:
+ - description:
+
+ - "Additional notes for this object."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `notes_url`:
+ - description:
+
+ - "An URL pointing to additional notes for this object."
+
+ - "Separate multiple urls like this "http://url1 http://url2""
+
+ - "Maximum length is 255 characters."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `has_agent`:
+ - description:
+
+ - "Whether this host has the Icinga 2 Agent installed."
+
+ - Choices:
+ - True
+ - False
+ - default: ""
+ - type: "bool"
+ - required: "no"
+
+ - `master_should_connect`:
+ - description:
+
+ - "Whether the parent (master) node should actively try to connect to this agent."
+
+ - Choices:
+ - True
+ - False
+ - default: ""
+ - type: "bool"
+ - required: "no"
+
+ - `accept_config`:
+ - description:
+
+ - "Whether the agent is configured to accept config."
+
+ - Choices:
+ - True
+ - False
+ - default: ""
+ - type: "bool"
+ - required: "no"
+
+- `icinga_hostgroups`:
+ - Default: ``
+ - Description: A list of Icinga hostgroups to configure
+ - Type: list of 'str'
+ - Required: no
+ - Options:
+
+ - `state`:
+ - description:
+
+ - "Apply feature state."
+
+ - Choices:
+ - present
+ - absent
+ - default: "present"
+ - type: "str"
+ - required: "no"
+
+ - `name`:
+ - description:
+
+ - "Icinga object name for this hostgroup."
+
+ - default: ""
+ - type: "str"
+ - required: "yes"
+
+ - `display_name`:
+ - description:
+
+ - "An alternative display name for this group."
+
+ - "If you wonder how this could be helpful just leave it blank."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `assign_filter`:
+ - description:
+
+ - "This allows you to configure an assignment filter."
+
+ - "Please feel free to combine as many nested operators as you want."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+- `icinga_hosts`:
+ - Default: ``
+ - Description: A list of Icinga hosts to configure
+ - Type: list of 'str'
+ - Required: no
+ - Options:
+
+ - `state`:
+ - description:
+
+ - "Apply feature state."
+
+ - Choices:
+ - present
+ - absent
+ - default: "present"
+ - type: "str"
+ - required: "no"
+
+ - `name`:
+ - description:
+
+ - "Icinga object name for this host."
+
+ - "This is usually a fully qualified host name but it could basically be any kind of string."
+
+ - "To make things easier for your users we strongly suggest to use meaningful names for templates."
+
+ - "For example "generic-host" is ugly, "Standard Linux Server" is easier to understand."
+
+ - default: ""
+ - type: "str"
+ - required: "yes"
+
+ - `display_name`:
+ - description:
+
+ - "Alternative name for this host. Might be a host alias or and kind of string helping your users to identify this host."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `address`:
+ - description:
+
+ - "Host address. Usually an IPv4 address, but may be any kind of address your check plugin is able to deal with."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `address6`:
+ - description:
+
+ - "Host IPv6 address. Usually an IPv6 address, but may be any kind of address your check plugin is able to deal with."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `groups`:
+ - description:
+
+ - "Hostgroups that should be directly assigned to this node. Hostgroups can be useful for various reasons."
+
+ - "You might assign service checks based on assigned hostgroup. They are also often used as an instrument to enforce restricted views in Icinga Web 2."
+
+ - "Hostgroups can be directly assigned to single hosts or to host templates."
+
+ - "You might also want to consider assigning hostgroups using apply rules."
+
+ - default: "[]"
+ - type: "list"
+ - required: "no"
+
+ - `disabled`:
+ - description:
+
+ - "Disabled objects will not be deployed."
+
+ - Choices:
+ - True
+ - False
+ - default: "False"
+ - type: "bool"
+ - required: "no"
+
+ - `imports`:
+ - description:
+
+ - "Choose a Host Template. Required when state is C(present)."
+
+ - default: ""
+ - type: "list"
+ - required: "no"
+
+ - `zone`:
+ - description:
+
+ - "Set the zone."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `vars`:
+ - description:
+
+ - "Custom properties of the host."
+
+ - default: ""
+ - type: "dict"
+ - required: "no"
+
+ - `check_command`:
+ - description:
+
+ - "The name of the check command."
+
+ - "Though this is not required to be defined in the director, you still have to supply a check_command in a host or host-template."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `notes`:
+ - description:
+
+ - "Additional notes for this object."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `notes_url`:
+ - description:
+
+ - "An URL pointing to additional notes for this object."
+
+ - "Separate multiple urls like this "http://url1 http://url2""
+
+ - "The maximum length is 255 characters."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `has_agent`:
+ - description:
+
+ - "Whether this host has the Icinga 2 Agent installed."
+
+ - Choices:
+ - True
+ - False
+ - default: ""
+ - type: "bool"
+ - required: "no"
+
+ - `master_should_connect`:
+ - description:
+
+ - "Whether the parent (master) node should actively try to connect to this agent."
+
+ - Choices:
+ - True
+ - False
+ - default: ""
+ - type: "bool"
+ - required: "no"
+
+ - `accept_config`:
+ - description:
+
+ - "Whether the agent is configured to accept config."
+
+ - Choices:
+ - True
+ - False
+ - default: ""
+ - type: "bool"
+ - required: "no"
+
+- `icinga_notifications`:
+ - Default: ``
+ - Description: A list of Icinga notifications to configure
+ - Type: list of 'str'
+ - Required: no
+ - Options:
+
+ - `state`:
+ - description:
+
+ - "Apply feature state."
+
+ - Choices:
+ - present
+ - absent
+ - default: "present"
+ - type: "str"
+ - required: "no"
+
+ - `name`:
+ - description:
+
+ - "Name of the notification."
+
+ - default: ""
+ - type: "str"
+ - required: "yes"
+
+ - `notification_interval`:
+ - description:
+
+ - "The notification interval (in seconds). This interval is used for active notifications."
+
+ - "Defaults to 30 minutes. If set to 0, re-notifications are disabled."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `types`:
+ - description:
+
+ - "The state transition types you want to get notifications for."
+
+ - default: ""
+ - type: "list"
+ - required: "no"
+
+ - `users`:
+ - description:
+
+ - "Users that should be notified by this notification."
+
+ - default: ""
+ - type: "list"
+ - required: "no"
+
+ - `states`:
+ - description:
+
+ - "The host or service states you want to get notifications for."
+
+ - default: ""
+ - type: "list"
+ - required: "no"
+
+ - `apply_to`:
+ - description:
+
+ - "Whether this notification should affect hosts or services."
+
+ - Choices:
+ - host
+ - service
+ - default: ""
+ - type: "str"
+ - required: "yes"
+
+ - `assign_filter`:
+ - description:
+
+ - "The filter where the notification will take effect."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `imports`:
+ - description:
+
+ - "Importable templates, add as many as you want. Required when state is C(present)."
+
+ - "Please note that order matters when importing properties from multiple templates - last one wins."
+
+ - default: ""
+ - type: "list"
+ - required: "no"
+
+ - `disabled`:
+ - description:
+
+ - "Disabled objects will not be deployed."
+
+ - Choices:
+ - True
+ - False
+ - default: "False"
+ - type: "bool"
+ - required: "no"
+
+ - `vars`:
+ - description:
+
+ - "Custom properties of the notification."
+
+ - default: ""
+ - type: "dict"
+ - required: "no"
+
+ - `time_period`:
+ - description:
+
+ - "The name of a time period which determines when this notification should be triggered."
+
+ - default: ""
+ - type: "strod"
+ - required: "no"
+
+ - `times_begin`:
+ - description:
+
+ - "First notification delay."
+
+ - "Delay unless the first notification should be sent."
+
+ - default: ""
+ - type: "int"
+ - required: "no"
+
+ - `times_end`:
+ - description:
+
+ - "Last notification."
+
+ - "When the last notification should be sent."
+
+ - default: ""
+ - type: "int"
+ - required: "no"
+
+ - `user_groups`:
+ - description:
+
+ - "User Groups that should be notified by this notification."
+
+ - default: ""
+ - type: "list"
+ - required: "no"
+
+- `icinga_service_applies`:
+ - Default: ``
+ - Description: A list of Icinga service_applies to configure
+ - Type: list of 'str'
+ - Required: no
+ - Options:
+
+ - `state`:
+ - description:
+
+ - "Apply feature state."
+
+ - Choices:
+ - present
+ - absent
+ - default: "present"
+ - type: "str"
+ - required: "no"
+
+ - `name`:
+ - description:
+
+ - "Name for the Icinga service apply rule."
+
+ - default: ""
+ - type: "str"
+ - required: "yes"
+
+ - `display_name`:
+ - description:
+
+ - "Alternative displayed name of the service apply rule."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `check_command`:
+ - description:
+
+ - "Check command definition."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `check_interval`:
+ - description:
+
+ - "Your regular check interval."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `check_period`:
+ - description:
+
+ - "The name of a time period which determines when this object should be monitored. Not limited by default."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `check_timeout`:
+ - description:
+
+ - "Check command timeout in seconds. Overrides the CheckCommand's timeout attribute."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `enable_active_checks`:
+ - description:
+
+ - "Whether to actively check this object."
+
+ - default: ""
+ - type: "bool"
+ - required: "no"
+
+ - `enable_event_handler`:
+ - description:
+
+ - "Whether to enable event handlers this object."
+
+ - default: ""
+ - type: "bool"
+ - required: "no"
+
+ - `enable_notifications`:
+ - description:
+
+ - "Whether to send notifications for this object."
+
+ - default: ""
+ - type: "bool"
+ - required: "no"
+
+ - `enable_passive_checks`:
+ - description:
+
+ - "Whether to accept passive check results for this object."
+
+ - default: ""
+ - type: "bool"
+ - required: "no"
+
+ - `enable_perfdata`:
+ - description:
+
+ - "Whether to process performance data provided by this object."
+
+ - default: ""
+ - type: "bool"
+ - required: "no"
+
+ - `max_check_attempts`:
+ - description:
+
+ - "Defines after how many check attempts a new hard state is reached."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `retry_interval`:
+ - description:
+
+ - "Retry interval, will be applied after a state change unless the next hard state is reached."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `groups`:
+ - description:
+
+ - "Service groups that should be directly assigned to this service."
+
+ - "Servicegroups can be useful for various reasons."
+
+ - "They are helpful to provided service-type specific view in Icinga Web 2, either for custom dashboards or as an instrument to enforce restrictions."
+
+ - "Service groups can be directly assigned to single services or to service templates."
+
+ - default: ""
+ - type: "list"
+ - required: "no"
+
+ - `apply_for`:
+ - description:
+
+ - "Evaluates the apply for rule for all objects with the custom attribute specified."
+
+ - "For example selecting "host.vars.custom_attr" will generate "for (config in host.vars.array_var)" where "config" will be accessible through "$config$"."
+
+ - "Note - only custom variables of type "Array" are eligible."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `assign_filter`:
+ - description:
+
+ - "The filter where the service apply rule will take effect."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `command_endpoint`:
+ - description:
+
+ - "The host where the service should be executed on."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `imports`:
+ - description:
+
+ - "Importable templates, add as many as you want."
+
+ - "Please note that order matters when importing properties from multiple templates - last one wins."
+
+ - default: ""
+ - type: "list"
+ - required: "no"
+
+ - `vars`:
+ - description:
+
+ - "Custom properties of the service apply rule."
+
+ - default: ""
+ - type: "dict"
+ - required: "no"
+
+ - `notes`:
+ - description:
+
+ - "Additional notes for this object."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `notes_url`:
+ - description:
+
+ - "An URL pointing to additional notes for this object."
+
+ - "Separate multiple urls like this "http://url1 http://url2""
+
+ - "Maximum length is 255 characters."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+- `icinga_service_templates`:
+ - Default: ``
+ - Description: A list of Icinga service_templat to configure
+ - Type: list of 'str'
+ - Required: no
+ - Options:
+
+ - `state`:
+ - description:
+
+ - "Apply feature state."
+
+ - Choices:
+ - present
+ - absent
+ - default: "present"
+ - type: "str"
+ - required: "no"
+
+ - `name`:
+ - description:
+
+ - "Name of the service template."
+
+ - default: ""
+ - type: "str"
+ - required: "yes"
+
+ - `check_command`:
+ - description:
+
+ - "Check command definition."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `check_interval`:
+ - description:
+
+ - "Your regular check interval."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `check_period`:
+ - description:
+
+ - "The name of a time period which determines when this object should be monitored. Not limited by default."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `check_timeout`:
+ - description:
+
+ - "Check command timeout in seconds. Overrides the CheckCommand's timeout attribute."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `enable_active_checks`:
+ - description:
+
+ - "Whether to actively check this object."
+
+ - default: ""
+ - type: "bool"
+ - required: "no"
+
+ - `enable_event_handler`:
+ - description:
+
+ - "Whether to enable event handlers this object."
+
+ - default: ""
+ - type: "bool"
+ - required: "no"
+
+ - `enable_notifications`:
+ - description:
+
+ - "Whether to send notifications for this object."
+
+ - default: ""
+ - type: "bool"
+ - required: "no"
+
+ - `enable_passive_checks`:
+ - description:
+
+ - "Whether to accept passive check results for this object."
+
+ - default: ""
+ - type: "bool"
+ - required: "no"
+
+ - `enable_perfdata`:
+ - description:
+
+ - "Whether to process performance data provided by this object."
+
+ - default: ""
+ - type: "bool"
+ - required: "no"
+
+ - `event_command`:
+ - description:
+
+ - "Event command for service which gets called on every check execution if one of these conditions matches"
+
+ - "The service is in a soft state"
+
+ - "The service state changes into a hard state"
+
+ - "The service state recovers from a soft or hard state to OK/Up"
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `groups`:
+ - description:
+
+ - "Service groups that should be directly assigned to this service."
+
+ - "Servicegroups can be useful for various reasons."
+
+ - "They are helpful to provided service-type specific view in Icinga Web 2, either for custom dashboards or as an instrument to enforce restrictions."
+
+ - "Service groups can be directly assigned to single services or to service templates."
+
+ - default: "[]"
+ - type: "list"
+ - required: "no"
+
+ - `imports`:
+ - description:
+
+ - "Importable templates, add as many as you want."
+
+ - "Please note that order matters when importing properties from multiple templates - last one wins."
+
+ - default: "[]"
+ - type: "list"
+ - required: "no"
+
+ - `max_check_attempts`:
+ - description:
+
+ - "Defines after how many check attempts a new hard state is reached."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `notes`:
+ - description:
+
+ - "Additional notes for this object."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `notes_url`:
+ - description:
+
+ - "An URL pointing to additional notes for this object."
+
+ - "Separate multiple urls like this "http://url1 http://url2""
+
+ - "Maximum length is 255 characters."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `retry_interval`:
+ - description:
+
+ - "Retry interval, will be applied after a state change unless the next hard state is reached."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `use_agent`:
+ - description:
+
+ - "Whether the check command for this service should be executed on the Icinga agent."
+
+ - default: ""
+ - type: "bool"
+ - required: "no"
+
+ - `vars`:
+ - description:
+
+ - "Custom properties of the service template."
+
+ - default: "{}"
+ - type: "dict"
+ - required: "no"
+
+ - `volatile`:
+ - description:
+
+ - "Whether this check is volatile."
+
+ - default: ""
+ - type: "bool"
+ - required: "no"
+
+ - `disabled`:
+ - description:
+
+ - "Disabled objects will not be deployed."
+
+ - Choices:
+ - True
+ - False
+ - default: "False"
+ - type: "bool"
+ - required: "no"
+
+- `icinga_servicegroups`:
+ - Default: ``
+ - Description: A list of Icinga sservicegroups to configure
+ - Type: list of 'str'
+ - Required: no
+ - Options:
+
+ - `state`:
+ - description:
+
+ - "Apply feature state."
+
+ - Choices:
+ - present
+ - absent
+ - default: "present"
+ - type: "str"
+ - required: "no"
+
+ - `name`:
+ - description:
+
+ - "Name for the Icinga servicegroup."
+
+ - default: ""
+ - type: "str"
+ - required: "yes"
+
+ - `display_name`:
+ - description:
+
+ - "An alternative display name for this group."
+
+ - "If you wonder how this could be helpful just leave it blank."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `assign_filter`:
+ - description:
+
+ - "This allows you to configure an assignment filter."
+
+ - "Please feel free to combine as many nested operators as you want."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+- `icinga_services`:
+ - Default: ``
+ - Description: A list of Icinga services to configure
+ - Type: list of 'str'
+ - Required: no
+ - Options:
+
+ - `state`:
+ - description:
+
+ - "Apply feature state."
+
+ - Choices:
+ - present
+ - absent
+ - default: "present"
+ - type: "str"
+ - required: "no"
+
+ - `name`:
+ - description:
+
+ - "Name of the service."
+
+ - default: ""
+ - type: "str"
+ - required: "yes"
+
+ - `check_command`:
+ - description:
+
+ - "Check command definition."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `check_interval`:
+ - description:
+
+ - "Your regular check interval."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `check_period`:
+ - description:
+
+ - "The name of a time period which determines when this object should be monitored. Not limited by default."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `check_timeout`:
+ - description:
+
+ - "Check command timeout in seconds. Overrides the CheckCommand's timeout attribute."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `enable_active_checks`:
+ - description:
+
+ - "Whether to actively check this object."
+
+ - default: ""
+ - type: "bool"
+ - required: "no"
+
+ - `enable_event_handler`:
+ - description:
+
+ - "Whether to enable event handlers this object."
+
+ - default: ""
+ - type: "bool"
+ - required: "no"
+
+ - `enable_notifications`:
+ - description:
+
+ - "Whether to send notifications for this object."
+
+ - default: ""
+ - type: "bool"
+ - required: "no"
+
+ - `enable_passive_checks`:
+ - description:
+
+ - "Whether to accept passive check results for this object."
+
+ - default: ""
+ - type: "bool"
+ - required: "no"
+
+ - `enable_perfdata`:
+ - description:
+
+ - "Whether to process performance data provided by this object."
+
+ - default: ""
+ - type: "bool"
+ - required: "no"
+
+ - `groups`:
+ - description:
+
+ - "Service groups that should be directly assigned to this service."
+
+ - "Servicegroups can be useful for various reasons."
+
+ - "They are helpful to provided service-type specific view in Icinga Web 2, either for custom dashboards or as an instrument to enforce restrictions."
+
+ - "Service groups can be directly assigned to single services or to service templates."
+
+ - default: "[]"
+ - type: "list"
+ - required: "no"
+
+ - `host`:
+ - description:
+
+ - "Choose the host this single service should be assigned to."
+
+ - default: ""
+ - type: "str"
+ - required: "yes"
+
+ - `imports`:
+ - description:
+
+ - "Importable templates, add as many as you want."
+
+ - "Please note that order matters when importing properties from multiple templates - last one wins."
+
+ - default: "[]"
+ - type: "list"
+ - required: "no"
+
+ - `max_check_attempts`:
+ - description:
+
+ - "Defines after how many check attempts a new hard state is reached."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `notes`:
+ - description:
+
+ - "Additional notes for this object."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `notes_url`:
+ - description:
+
+ - "An URL pointing to additional notes for this object."
+
+ - "Separate multiple urls like this "http://url1 http://url2""
+
+ - "Maximum length is 255 characters."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `retry_interval`:
+ - description:
+
+ - "Retry interval, will be applied after a state change unless the next hard state is reached."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `use_agent`:
+ - description:
+
+ - "Whether the check command for this service should be executed on the Icinga agent."
+
+ - default: ""
+ - type: "bool"
+ - required: "no"
+
+ - `vars`:
+ - description:
+
+ - "Custom properties of the service."
+
+ - default: "{}"
+ - type: "dict"
+ - required: "no"
+
+ - `volatile`:
+ - description:
+
+ - "Whether this check is volatile."
+
+ - default: ""
+ - type: "bool"
+ - required: "no"
+
+ - `disabled`:
+ - description:
+
+ - "Disabled objects will not be deployed."
+
+ - Choices:
+ - True
+ - False
+ - default: "False"
+ - type: "bool"
+ - required: "no"
+
+- `icinga_timeperiods`:
+ - Default: ``
+ - Description: A list of Icinga timeperiods to configure
+ - Type: list of 'str'
+ - Required: no
+ - Options:
+
+ - `state`:
+ - description:
+
+ - "Apply feature state."
+
+ - Choices:
+ - present
+ - absent
+ - default: "present"
+ - type: "str"
+ - required: "no"
+
+ - `name`:
+ - description:
+
+ - "Name of the time period."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `display_name`:
+ - description:
+
+ - "Alternative name for this timeperiod."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `imports`:
+ - description:
+
+ - "Importable templates, add as many as you want."
+
+ - "Please note that order matters when importing properties from multiple templates - last one wins."
+
+ - default: ""
+ - type: "list"
+ - required: "no"
+
+ - `ranges`:
+ - description:
+
+ - "A"
+
+ - " "
+
+ - "d"
+
+ - "i"
+
+ - "c"
+
+ - "t"
+
+ - " "
+
+ - "o"
+
+ - "f"
+
+ - " "
+
+ - "d"
+
+ - "a"
+
+ - "y"
+
+ - "s"
+
+ - " "
+
+ - "a"
+
+ - "n"
+
+ - "d"
+
+ - " "
+
+ - "t"
+
+ - "i"
+
+ - "m"
+
+ - "e"
+
+ - "p"
+
+ - "e"
+
+ - "r"
+
+ - "i"
+
+ - "o"
+
+ - "d"
+
+ - "s"
+
+ - "."
+
+ - default: ""
+ - type: "dict"
+ - required: "no"
+
+- `icinga_user_templates`:
+ - Default: ``
+ - Description: A list of Icinga user_templates to configure
+ - Type: list of 'str'
+ - Required: no
+ - Options:
+
+ - `state`:
+ - description:
+
+ - "Apply feature state."
+
+ - Choices:
+ - present
+ - absent
+ - default: "present"
+ - type: "str"
+ - required: "no"
+
+ - `name`:
+ - description:
+
+ - "Name of the user template."
+
+ - default: ""
+ - type: "str"
+ - required: "yes"
+
+ - `imports`:
+ - description:
+
+ - "Importable templates, add as many as you want."
+
+ - "Please note that order matters when importing properties from multiple templates - last one wins."
+
+ - default: ""
+ - type: "list"
+ - required: "no"
+
+ - `period`:
+ - description:
+
+ - "The name of a time period which determines when notifications to this User should be triggered. Not set by default."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `enable_notifications`:
+ - description:
+
+ - "Whether to send notifications for this user."
+
+ - default: ""
+ - type: "bool"
+ - required: "no"
+
+- `icinga_users`:
+ - Default: ``
+ - Description: A list of Icinga users to configure
+ - Type: list of 'str'
+ - Required: no
+ - Options:
+
+ - `state`:
+ - description:
+
+ - "Apply feature state."
+
+ - Choices:
+ - present
+ - absent
+ - default: "present"
+ - type: "str"
+ - required: "no"
+
+ - `name`:
+ - description:
+
+ - "Name of the user."
+
+ - default: ""
+ - type: "str"
+ - required: "yes"
+
+ - `display_name`:
+ - description:
+
+ - "Alternative name for this user."
+
+ - "In case your object name is a username, this could be the full name of the corresponding person."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `imports`:
+ - description:
+
+ - "Importable templates, add as many as you want."
+
+ - "Please note that order matters when importing properties from multiple templates - last one wins."
+
+ - default: ""
+ - type: "list"
+ - required: "no"
+
+ - `pager`:
+ - description:
+
+ - "The pager address of the user."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `period`:
+ - description:
+
+ - "The name of a time period which determines when notifications to this User should be triggered. Not set by default."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `disabled`:
+ - description:
+
+ - "Disabled objects will not be deployed."
+
+ - Choices:
+ - True
+ - False
+ - default: "False"
+ - type: "bool"
+ - required: "no"
+
+ - `email`:
+ - description:
+
+ - "The Email address of the user."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+ - `groups`:
+ - description:
+
+ - "User groups that should be directly assigned to this user."
+
+ - "Groups can be useful for various reasons. You might prefer to send notifications to groups instead of single users."
+
+ - default: ""
+ - type: "list"
+ - required: "no"
+
+- `icinga_zones`:
+ - Default: ``
+ - Description: A list of Icinga zones to configure
+ - Type: list of 'str'
+ - Required: no
+ - Options:
+
+ - `state`:
+ - description:
+
+ - "Apply feature state."
+
+ - Choices:
+ - present
+ - absent
+ - default: "present"
+ - type: "str"
+ - required: "no"
+
+ - `name`:
+ - description:
+
+ - "Icinga object name for this zone."
+
+ - "This is usually a fully qualified host name but it could basically be any kind of string."
+
+ - "To make things easier for your users we strongly suggest to use meaningful names for templates."
+
+ - "For example "generic-zone" is ugly, "Standard Linux Server" is easier to understand."
+
+ - default: ""
+ - type: "str"
+ - required: "yes"
+
+ - `is_global`:
+ - description:
+
+ - "Whether configuration files for this zone should be synced to all endpoints."
+
+ - default: "False"
+ - type: "bool"
+ - required: "no"
+
+ - `parent`:
+ - description:
+
+ - "The name of the parent zone."
+
+ - default: ""
+ - type: "str"
+ - required: "no"
+
+- `icinga_client_cert`:
+ - Default: ``
+ - Description: PEM formatted certificate chain file to be used for SSL client authentication. This file can also include the key as well, and if the key is included, `client_key' is not required.
+ - Type: path
+ - Required: no
+
+- `icinga_client_key`:
+ - Default: ``
+ - Description: PEM formatted file that contains your private key to be used for SSL client authentication. If `client_cert' contains both the certificate and key, this option is not required.
+ - Type: path
+ - Required: no
+
+- `icinga_url`:
+ - Default: ``
+ - Description: HTTP, HTTPS, or FTP URL in the form (http|https|ftp)://[user[:pass]]@host.domain[:port]/path
+ - Type: str
+ - Required: no
+
+- `icinga_url_password`:
+ - Default: ``
+ - Description: The password for use in HTTP basic authentication. If the `url_username' parameter is not specified, the `url_password' parameter will not be used.
+ - Type: str
+ - Required: no
+
+- `icinga_url_username`:
+ - Default: ``
+ - Description: The username for use in HTTP basic authentication. This parameter can be used without `url_password' for sites that allow empty passwords
+ - Type: str
+ - Required: no
+
+- `icinga_use_gssapi`:
+ - Default: `false`
+ - Description: Use GSSAPI to perform the authentication, typically this is for Kerberos or Kerberos through Negotiate authentication. Requires the Python library gssapi <https://github.com/pythongssapi/python- gssapi> to be installed. Credentials for GSSAPI can be specified with `url_username'/`url_password' or with the GSSAPI env var `KRB5CCNAME' that specified a custom Kerberos credential cache. NTLM authentication is `not' supported even if the GSSAPI mech for NTLM has been installed.
+ - Type: bool
+ - Required: no
+
+- `icinga_use_proxy`:
+ - Default: `true`
+ - Description: If `no', it will not use a proxy, even if one is defined in an environment variable on the target hosts.
+ - Type: bool
+ - Required: no
+
+- `icinga_validate_certs`:
+ - Default: `true`
+ - Description: If `no', SSL certificates will not be validated. icinga_This should only be used on personally controlled sites using selfigned certificates.
+ - Type: bool
+ - Required: no
+
## Dependencies
-collections:
-telekom_mms.icinga_director >= 1.2.2
+None.
-## Role Variables
-
-| Variable | Required | Default |
-| -------------------------------- | -------- | --------------------------- |
-| **icinga** |
-| url | yes |
-| use_proxy | no |
-| validate_certs | no |
-| url_username | yes |
-| url_password | yes |
-| force_basic_auth | no |
-| client_cert | no |
-| client_key | no |
-| **icinga_timeperiod** |
-| icinga_timeperiods | no | [] |
-| display_name | no |
-| imports | no |
-| ranges | no |
-| **icinga_user_template** |
-| icinga_user_templates | no | [] |
-| imports | no |
-| period | no |
-| enable_notifications | no |
-| **icinga_user** |
-| icinga_users | no | [] |
-| display_name | no |
-| imports | yes | [] |
-| pager | no |
-| period | no |
-| disabled | no |
-| email | yes | null |
-| **icinga_zone** |
-| icinga_zones | no | [] |
-| is_global | no |
-| parent | no |
-| **icinga_endpoint** |
-| icinga_endpoints | no | [] |
-| host | no |
-| port | no |
-| log_duration | no |
-| zone | no |
-| **icinga_hostgroup** |
-| icinga_hostgroups | no | [] |
-| display_name | no |
-| assign_filter | no | `host.name="hostgroup.1-*"` |
-| **icinga_host_template** |
-| icinga_host_templates | no | [] |
-| display_name | no |
-| address | no |
-| address6 | no |
-| groups | no |
-| check_command | no |
-| check_interval | no |
-| disabled | no |
-| imports | no |
-| zone | no |
-| vars | no |
-| notes | no |
-| notes_url | no |
-| **icinga_host** |
-| icinga_hosts | no | [] |
-| display_name | no |
-| address | no |
-| address6 | no |
-| groups | no |
-| disabled | no |
-| imports | yes | [] |
-| zone | no |
-| vars | no |
-| notes | no |
-| notes_url | no |
-| **icinga_command_template** |
-| icinga_command_templates | no | [] |
-| display_name | no |
-| command | no |
-| methods_execute | yes | PluginCheck |
-| timeout | no |
-| imports | no |
-| disabled | no |
-| zone | no |
-| vars | no |
-| arguments | no |
-| **icinga_command** |
-| icinga_commands | no | [] |
-| command_type | yes | PluginCheck |
-| disabled | yes | false |
-| imports | no |
-| zone | no |
-| vars | no |
-| **icinga_service** |
-| icinga_services | no | [] |
-| display_name | no |
-| disabled | no |
-| check_command | no |
-| check_interval | no |
-| check_period | no |
-| check_timeout | no |
-| enable_active_checks | no |
-| enable_event_handler | no |
-| enable_notifications | no |
-| enable_passive_checks | no |
-| enable_perfdata | no |
-| groups | no |
-| host | yes |
-| imports | no |
-| max_check_attempts | no |
-| notes | no |
-| notes_url | no |
-| retry_interval | no |
-| use_agent | no |
-| vars | no |
-| volatile | no |
-| **icinga_service_template** |
-| icinga_service_templates | no | [] |
-| display_name | no |
-| disabled | no |
-| check_command | no |
-| check_interval | no |
-| check_period | no |
-| check_timeout | no |
-| enable_active_checks | no |
-| enable_event_handler | no |
-| enable_notifications | no |
-| enable_passive_checks | no |
-| enable_perfdata | no |
-| groups | no |
-| imports | no |
-| max_check_attempts | no |
-| notes | no |
-| notes_url | no |
-| retry_interval | no |
-| use_agent | no |
-| vars | no |
-| volatile | no |
-| **icinga_service_apply** |
-| icinga_service_applys | no | [] |
-| display_name | no |
-| groups | no |
-| apply_for | no |
-| assign_filter | no |
-| imports | no |
-| vars | no |
-| notes | no |
-| notes_url | no |
-| **icinga_servicegroup** |
-| icinga_servicegroups | no | [] |
-| display_name | no |
-| assign_filter | no |
-| **icinga_notification_template** |
-| icinga_notification_templates | no | [] |
-| notification_template_object | no |
-| state | no |
-| notification_interval | no |
-| states | no |
-| types | no |
-| times_begin | no |
-| times_end | no |
-| timeperiod | no |
-| users | no |
-| user_groups | no |
-| notification_command | no |
-| imports | no |
-| **icinga_notification** |
-| icinga_notifications | no | [] |
-| notification_interval | no |
-| types | no |
-| users | no |
-| apply_to | no |
-| assign_filter | no |
-| imports | no |
-| period | no |
-| **icinga_scheduled_downtime** |
-| icinga_scheduled_downtimes | no | [] |
-| state | yes | present
-| disabled | no | false
-| assign_filter | no |
-| apply_to | yes |
-| author | yes |
-| comment | yes |
-| duration | no |
-| fixed | yes |
-| ranges | no |
-| with_services | no | true
+<!-- END_ANSIBLE_DOCS -->
## Example Playbook
```bash
----
-- hosts: localhost
- gather_facts: false
- collections:
- - telekom_mms.icinga_director
+- hosts: all
roles:
- - ansible_icinga
+ - telekom_mms.icinga_director.ansible_icinga
vars:
icinga_url: "https://example.com"
icinga_user: "{{ icinga_user }}"
icinga_pass: "{{ icinga_pass }}"
icinga_timeperiods:
- - timeperiod_object:
- - "8x5"
+ - "8x5":
ranges:
monday: "09:00-17:00"
tuesday: "09:00-17:00"
wednesday: "09:00-17:00"
thursday: "09:00-17:00"
friday: "09:00-17:00"
- - timeperiod_object:
- - "24x7"
+ - "24x7"
ranges:
monday: "00:00-24:00"
tuesday: "00:00-24:00"
@@ -243,21 +2068,18 @@ telekom_mms.icinga_director >= 1.2.2
saturday: "00:00-24:00"
sunday: "00:00-24:00"
icinga_users:
- - user_object:
- - "service_abbreviation_email_24x7"
+ - "email_24x7"
pager: "SIP/xxx"
- email: "service_abbreviation@example.com"
- - user_object:
- - "service_abbreviation_8x5"
- email: "service_abbreviation@example.com"
+ email: "foo@example.com"
+ - "service_abbreviation_8x5"
+ email: "foo@example.com"
+ icinga_user_groups:
+ - "user-group-example"
+ display_name: "User Group Example"
icinga_hostgroups:
- - hostgroup_object:
- - "service_abbreviation-environement"
- - "service_abbreviation-environement-web"
+ - "foo hosts"
icinga_hosts:
- - host_object:
- - "service_abbreviation-environement-web01"
- icinga_scheduled_downtimes:
- - scheduled_downtime_object:
- - "service_abbreviation-environement-downtime01"
+ - "foo-bar-web01"
+ icinga_scheduled_downtimes:
+ - "downtime01"
```
diff --git a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/defaults/main.yml b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/defaults/main.yml
index 9a9a68253..90dea36f0 100644
--- a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/defaults/main.yml
+++ b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/defaults/main.yml
@@ -1,32 +1,26 @@
---
# icinga_timeperiod
icinga_timeperiods: []
-
# icinga_user_template
icinga_user_templates: []
-
# icinga_user
icinga_users: []
icinga_user_imports: []
icinga_user_disabled: false
-icinga_user_email: null
-
+icinga_user_email:
# icinga_endpoints
icinga_endpoints: []
-
# icinga_zone
icinga_zones: []
-
# icinga_hostgroup
icinga_hostgroups: []
-
+# icinga_user_group
+icinga_user_groups: []
# icinga_host_template
icinga_host_templates: []
-
# icinga_host
icinga_hosts: []
icinga_host_imports: []
-
# icinga_command_template
icinga_command_templates: []
icinga_command_template_command_type: PluginCheck
@@ -38,21 +32,15 @@ icinga_command_disabled: false
# icinga_service
icinga_services: []
-
# icinga_serviceset
icinga_servicesets: []
-
# icinga_service_template
icinga_service_templates: []
-
# icinga_service_apply
icinga_service_applies: []
-
# servicegroup
icinga_servicegroups: []
-
# icinga_notification
icinga_notifications: []
-
# icinga deploy
icinga_deploy_config: false
diff --git a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/handlers/main.yml b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/handlers/main.yml
index e83f67c03..9e82c9f44 100644
--- a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/handlers/main.yml
+++ b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/handlers/main.yml
@@ -2,7 +2,13 @@
- name: Deploy the icinga config
telekom_mms.icinga_director.icinga_deploy:
url: "{{ icinga_url }}"
+ use_proxy: "{{ icinga_use_proxy | default(omit) }}"
+ validate_certs: "{{ icinga_validate_certs | default(omit) }}"
+ force_basic_auth: "{{ icinga_force_basic_auth | default(omit) }}"
+ client_cert: "{{ icinga_client_cert | default(omit) }}"
+ client_key: "{{ icinga_client_key | default(omit) }}"
url_username: "{{ icinga_user }}"
url_password: "{{ icinga_pass }}"
+ timeout: "{{ icinga_deploy_timeout | default(omit) }}"
when: icinga_deploy_config and icinga_deploy_config is defined
- listen: config_deploy \ No newline at end of file
+ listen: config_deploy
diff --git a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/meta/argument_specs.yml b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/meta/argument_specs.yml
new file mode 100644
index 000000000..595ee392f
--- /dev/null
+++ b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/meta/argument_specs.yml
@@ -0,0 +1,1345 @@
+---
+argument_specs:
+ main:
+ short_description: Configure an Icinga instance with Icinga Director
+ description:
+ - >-
+ The main entry point includes all tasks for objects that can be created
+ with the role.
+ options:
+ icinga_timeperiods:
+ description:
+ - A list of Icinga timeperiods to configure
+ type: list
+ elements: str
+ options:
+ state:
+ description:
+ - Apply feature state.
+ choices:
+ - present
+ - absent
+ default: present
+ type: str
+ name:
+ description:
+ - Name of the time period.
+ type: str
+ display_name:
+ description:
+ - Alternative name for this timeperiod.
+ type: str
+ imports:
+ description:
+ - Importable templates, add as many as you want.
+ - >-
+ Please note that order matters when importing properties from
+ multiple templates - last one wins.
+ type: list
+ elements: str
+ ranges:
+ description: A dict of days and timeperiods.
+ type: dict
+ icinga_user_templates:
+ description:
+ - A list of Icinga user_templates to configure
+ type: list
+ elements: str
+ options:
+ state:
+ description:
+ - Apply feature state.
+ choices:
+ - present
+ - absent
+ default: present
+ type: str
+ name:
+ description:
+ - Name of the user template.
+ required: true
+ type: str
+ imports:
+ description:
+ - Importable templates, add as many as you want.
+ - >-
+ Please note that order matters when importing properties from
+ multiple templates - last one wins.
+ type: list
+ elements: str
+ period:
+ description:
+ - >-
+ The name of a time period which determines when notifications to
+ this User should be triggered. Not set by default.
+ type: str
+ enable_notifications:
+ description:
+ - Whether to send notifications for this user.
+ type: bool
+ icinga_users:
+ description:
+ - A list of Icinga users to configure
+ type: list
+ elements: str
+ options:
+ state:
+ description:
+ - Apply feature state.
+ choices:
+ - present
+ - absent
+ default: present
+ type: str
+ name:
+ description:
+ - Name of the user.
+ required: true
+ type: str
+ display_name:
+ description:
+ - Alternative name for this user.
+ - >-
+ In case your object name is a username, this could be the full
+ name of the corresponding person.
+ type: str
+ imports:
+ description:
+ - Importable templates, add as many as you want.
+ - >-
+ Please note that order matters when importing properties from
+ multiple templates - last one wins.
+ type: list
+ elements: str
+ pager:
+ description:
+ - The pager address of the user.
+ type: str
+ period:
+ description:
+ - >-
+ The name of a time period which determines when notifications to
+ this User should be triggered. Not set by default.
+ type: str
+ disabled:
+ description:
+ - Disabled objects will not be deployed.
+ type: bool
+ default: false
+ choices:
+ - true
+ - false
+ email:
+ description:
+ - The Email address of the user.
+ type: str
+ groups:
+ description:
+ - User groups that should be directly assigned to this user.
+ - >-
+ Groups can be useful for various reasons. You might prefer to
+ send notifications to groups instead of single users.
+ type: list
+ elements: str
+ icinga_endpoints:
+ description:
+ - A list of Icinga endpoints to configure
+ type: list
+ elements: str
+ options:
+ state:
+ description:
+ - Apply feature state.
+ choices:
+ - present
+ - absent
+ default: present
+ type: str
+ name:
+ description:
+ - Icinga object name for this endpoint.
+ - >-
+ This is usually a fully qualified host name but it could
+ basically be any kind of string.
+ - >-
+ To make things easier for your users we strongly suggest to use
+ meaningful names for templates.
+ - >-
+ For example "generic-endpoint" is ugly, "Standard Linux Server"
+ is easier to understand.
+ required: true
+ type: str
+ host:
+ description:
+ - The hostname/IP address of the remote Icinga 2 instance.
+ type: str
+ port:
+ description:
+ - >-
+ The service name/port of the remote Icinga 2 instance. Defaults
+ to 5665.
+ type: int
+ log_duration:
+ description:
+ - >-
+ Duration for keeping replay logs on connection loss. Defaults to
+ 1d (86400 seconds). Attribute is specified in seconds. If
+ log_duration is set to 0, replaying logs is disabled. You could
+ also specify the value in human readable format like 10m for 10
+ minutes or 1h for one hour.
+ type: str
+ zone:
+ description:
+ - The name of the zone this endpoint is part of.
+ type: str
+ icinga_zones:
+ description:
+ - A list of Icinga zones to configure
+ type: list
+ elements: str
+ options:
+ state:
+ description:
+ - Apply feature state.
+ choices:
+ - present
+ - absent
+ default: present
+ type: str
+ name:
+ description:
+ - Icinga object name for this zone.
+ - >-
+ This is usually a fully qualified host name but it could
+ basically be any kind of string.
+ - >-
+ To make things easier for your users we strongly suggest to use
+ meaningful names for templates.
+ - >-
+ For example "generic-zone" is ugly, "Standard Linux Server" is
+ easier to understand.
+ required: true
+ type: str
+ is_global:
+ description:
+ - >-
+ Whether configuration files for this zone should be synced to
+ all endpoints.
+ default: false
+ type: bool
+ parent:
+ description:
+ - The name of the parent zone.
+ type: str
+ icinga_hostgroups:
+ description:
+ - A list of Icinga hostgroups to configure
+ type: list
+ elements: str
+ options:
+ state:
+ description:
+ - Apply feature state.
+ choices:
+ - present
+ - absent
+ default: present
+ type: str
+ name:
+ description:
+ - Icinga object name for this hostgroup.
+ required: true
+ type: str
+ display_name:
+ description:
+ - An alternative display name for this group.
+ - If you wonder how this could be helpful just leave it blank.
+ type: str
+ assign_filter:
+ description:
+ - This allows you to configure an assignment filter.
+ - >-
+ Please feel free to combine as many nested operators as you
+ want.
+ type: str
+ icinga_host_templates:
+ description:
+ - A list of Icinga host_templates to configure
+ type: list
+ elements: str
+ options:
+ state:
+ description:
+ - Apply feature state.
+ choices:
+ - present
+ - absent
+ default: present
+ type: str
+ name:
+ description:
+ - Icinga object name for this host template.
+ - >-
+ This is usually a fully qualified host name but it could
+ basically be any kind of string.
+ - >-
+ To make things easier for your users we strongly suggest to use
+ meaningful names for templates.
+ - >-
+ For example "generic-host" is ugly, "Standard Linux Server" is
+ easier to understand.
+ required: true
+ type: str
+ display_name:
+ description:
+ - Alternative name for this host.
+ - >-
+ Might be a host alias or and kind of string helping your users
+ to identify this host.
+ type: str
+ address:
+ description:
+ - >-
+ Host address. Usually an IPv4 address, but may be any kind of
+ address your check plugin is able to deal with.
+ type: str
+ address6:
+ description:
+ - >-
+ Host IPv6 address. Usually an IPv64 address, but may be any kind
+ of address your check plugin is able to deal with.
+ type: str
+ groups:
+ description:
+ - >-
+ Hostgroups that should be directly assigned to this node.
+ Hostgroups can be useful for various reasons.
+ - >-
+ You might assign service checks based on assigned hostgroup.
+ They are also often used as an instrument to enforce restricted
+ views in Icinga Web 2.
+ - >-
+ Hostgroups can be directly assigned to single hosts or to host
+ templates.
+ - >-
+ You might also want to consider assigning hostgroups using apply
+ rules.
+ type: list
+ elements: str
+ default: []
+ check_command:
+ description:
+ - The name of the check command.
+ - >-
+ Though this is not required to be defined in the director, you
+ still have to supply a check_command in a host or host-template.
+ type: str
+ event_command:
+ description:
+ - >-
+ Event command for host which gets called on every check
+ execution if one of these conditions matches
+ - The host is in a soft state
+ - The host state changes into a hard state
+ - The host state recovers from a soft or hard state to OK/Up
+ type: str
+ check_interval:
+ description:
+ - Your regular check interval.
+ type: str
+ disabled:
+ description:
+ - Disabled objects will not be deployed.
+ default: false
+ type: bool
+ choices:
+ - true
+ - false
+ imports:
+ description:
+ - Choose a host-template.
+ type: list
+ elements: str
+ zone:
+ description:
+ - Set the zone.
+ type: str
+ vars:
+ description:
+ - Custom properties of the host.
+ type: dict
+ notes:
+ description:
+ - Additional notes for this object.
+ type: str
+ version_added: 1.8.0
+ notes_url:
+ description:
+ - An URL pointing to additional notes for this object.
+ - Separate multiple urls like this "http://url1 http://url2"
+ - Maximum length is 255 characters.
+ type: str
+ version_added: 1.8.0
+ has_agent:
+ description:
+ - Whether this host has the Icinga 2 Agent installed.
+ type: bool
+ choices:
+ - true
+ - false
+ version_added: 1.9.0
+ master_should_connect:
+ description:
+ - >-
+ Whether the parent (master) node should actively try to connect
+ to this agent.
+ type: bool
+ choices:
+ - true
+ - false
+ version_added: 1.9.0
+ accept_config:
+ description:
+ - Whether the agent is configured to accept config.
+ type: bool
+ choices:
+ - true
+ - false
+ version_added: 1.9.0
+ icinga_hosts:
+ description:
+ - A list of Icinga hosts to configure
+ type: list
+ elements: str
+ options:
+ state:
+ description:
+ - Apply feature state.
+ choices:
+ - present
+ - absent
+ default: present
+ type: str
+ name:
+ description:
+ - Icinga object name for this host.
+ - >-
+ This is usually a fully qualified host name but it could
+ basically be any kind of string.
+ - >-
+ To make things easier for your users we strongly suggest to use
+ meaningful names for templates.
+ - >-
+ For example "generic-host" is ugly, "Standard Linux Server" is
+ easier to understand.
+ required: true
+ type: str
+ display_name:
+ description:
+ - >-
+ Alternative name for this host. Might be a host alias or and
+ kind of string helping your users to identify this host.
+ type: str
+ address:
+ description:
+ - >-
+ Host address. Usually an IPv4 address, but may be any kind of
+ address your check plugin is able to deal with.
+ type: str
+ address6:
+ description:
+ - >-
+ Host IPv6 address. Usually an IPv6 address, but may be any kind
+ of address your check plugin is able to deal with.
+ type: str
+ version_added: 1.4.0
+ groups:
+ description:
+ - >-
+ Hostgroups that should be directly assigned to this node.
+ Hostgroups can be useful for various reasons.
+ - >-
+ You might assign service checks based on assigned hostgroup.
+ They are also often used as an instrument to enforce restricted
+ views in Icinga Web 2.
+ - >-
+ Hostgroups can be directly assigned to single hosts or to host
+ templates.
+ - >-
+ You might also want to consider assigning hostgroups using apply
+ rules.
+ type: list
+ elements: str
+ default: []
+ disabled:
+ description:
+ - Disabled objects will not be deployed.
+ default: false
+ type: bool
+ choices:
+ - true
+ - false
+ imports:
+ description:
+ - Choose a Host Template. Required when state is C(present).
+ type: list
+ elements: str
+ required: true
+ zone:
+ description:
+ - Set the zone.
+ type: str
+ vars:
+ description:
+ - Custom properties of the host.
+ type: dict
+ check_command:
+ description:
+ - The name of the check command.
+ - >-
+ Though this is not required to be defined in the director, you
+ still have to supply a check_command in a host or host-template.
+ type: str
+ notes:
+ description:
+ - Additional notes for this object.
+ type: str
+ version_added: 1.8.0
+ notes_url:
+ description:
+ - An URL pointing to additional notes for this object.
+ - Separate multiple urls like this "http://url1 http://url2"
+ - The maximum length is 255 characters.
+ type: str
+ version_added: 1.8.0
+ has_agent:
+ description:
+ - Whether this host has the Icinga 2 Agent installed.
+ type: bool
+ choices:
+ - true
+ - false
+ version_added: 1.9.0
+ master_should_connect:
+ description:
+ - >-
+ Whether the parent (master) node should actively try to connect
+ to this agent.
+ type: bool
+ choices:
+ - true
+ - false
+ version_added: 1.9.0
+ accept_config:
+ description:
+ - Whether the agent is configured to accept config.
+ type: bool
+ choices:
+ - true
+ - false
+ version_added: 1.9.0
+ icinga_command_templates:
+ description:
+ - A list of Icinga command_templates to configure
+ type: list
+ elements: str
+ options:
+ state:
+ description:
+ - Apply feature state.
+ choices:
+ - present
+ - absent
+ default: present
+ type: str
+ command:
+ description:
+ - The command Icinga should run.
+ - >-
+ Absolute paths are accepted as provided, relative paths are
+ prefixed with "PluginDir + ", similar Constant prefixes are
+ allowed.
+ - >-
+ Spaces will lead to separation of command path and standalone
+ arguments.
+ - >-
+ Please note that this means that we do not support spaces in
+ plugin names and paths right now.
+ type: str
+ command_type:
+ description:
+ - >-
+ Plugin Check commands are what you need when running checks
+ against your infrastructure.
+ - >-
+ Notification commands will be used when it comes to notify your
+ users.
+ - >-
+ Event commands allow you to trigger specific actions when
+ problems occur.
+ - >-
+ Some people use them for auto-healing mechanisms, like
+ restarting services or rebooting systems at specific thresholds.
+ choices:
+ - PluginCheck
+ - PluginNotification
+ - PluginEvent
+ default: PluginCheck
+ type: str
+ disabled:
+ description:
+ - Disabled objects will not be deployed.
+ type: bool
+ default: false
+ choices:
+ - true
+ - false
+ name:
+ description:
+ - Name of the command template.
+ required: true
+ type: str
+ imports:
+ description:
+ - >-
+ Importable templates, add as many as you want. Please note that
+ order matters when importing properties from multiple templates
+ - last one wins.
+ type: list
+ elements: str
+ timeout:
+ description:
+ - >-
+ Optional command timeout. Allowed values are seconds or
+ durations postfixed with a specific unit (for example 1m or also
+ 3m 30s).
+ type: str
+ zone:
+ description:
+ - >-
+ Icinga cluster zone. Allows to manually override Directors
+ decisions of where to deploy your config to.
+ - >-
+ You should consider not doing so unless you gained deep
+ understanding of how an Icinga Cluster stack works.
+ type: str
+ vars:
+ description:
+ - Custom properties of the command template.
+ type: dict
+ arguments:
+ description:
+ - Arguments of the command template.
+ type: dict
+ icinga_commands:
+ description:
+ - A list of Icinga commands to configure
+ type: list
+ elements: str
+ options:
+ state:
+ description:
+ - Apply feature state.
+ choices:
+ - present
+ - absent
+ default: present
+ type: str
+ command:
+ description:
+ - >-
+ The command Icinga should run. Required when state is
+ C(present).
+ - >-
+ Absolute paths are accepted as provided, relative paths are
+ prefixed with "PluginDir + ", similar Constant prefixes are
+ allowed.
+ - >-
+ Spaces will lead to separation of command path and standalone
+ arguments.
+ - >-
+ Please note that this means that we do not support spaces in
+ plugin names and paths right now.
+ type: str
+ command_type:
+ description:
+ - >-
+ Plugin Check commands are what you need when running checks
+ against your infrastructure.
+ - >-
+ Notification commands will be used when it comes to notify your
+ users.
+ - >-
+ Event commands allow you to trigger specific actions when
+ problems occur.
+ - >-
+ Some people use them for auto-healing mechanisms, like
+ restarting services or rebooting systems at specific thresholds.
+ choices:
+ - PluginCheck
+ - PluginNotification
+ - PluginEvent
+ default: PluginCheck
+ type: str
+ disabled:
+ description:
+ - Disabled objects will not be deployed.
+ type: bool
+ default: false
+ choices:
+ - true
+ - false
+ name:
+ description:
+ - Name of the command.
+ required: true
+ type: str
+ imports:
+ description:
+ - >-
+ Importable templates, add as many as you want. Please note that
+ order matters when importing properties from multiple templates
+ - last one wins.
+ type: list
+ elements: str
+ timeout:
+ description:
+ - >-
+ Optional command timeout. Allowed values are seconds or
+ durations postfixed with a specific unit (for example 1m or also
+ 3m 30s).
+ type: str
+ zone:
+ description:
+ - >-
+ Icinga cluster zone. Allows to manually override Directors
+ decisions of where to deploy your config to.
+ - >-
+ You should consider not doing so unless you gained deep
+ understanding of how an Icinga Cluster stack works.
+ type: str
+ vars:
+ description:
+ - Custom properties of the command.
+ type: dict
+ arguments:
+ description:
+ - Arguments of the command.
+ type: dict
+ icinga_services:
+ description:
+ - A list of Icinga services to configure
+ type: list
+ elements: str
+ options:
+ state:
+ description:
+ - Apply feature state.
+ choices:
+ - present
+ - absent
+ default: present
+ type: str
+ name:
+ description:
+ - Name of the service.
+ required: true
+ type: str
+ check_command:
+ description:
+ - Check command definition.
+ type: str
+ check_interval:
+ description:
+ - Your regular check interval.
+ type: str
+ check_period:
+ description:
+ - >-
+ The name of a time period which determines when this object
+ should be monitored. Not limited by default.
+ type: str
+ check_timeout:
+ description:
+ - >-
+ Check command timeout in seconds. Overrides the CheckCommand's
+ timeout attribute.
+ type: str
+ enable_active_checks:
+ description:
+ - Whether to actively check this object.
+ type: bool
+ enable_event_handler:
+ description:
+ - Whether to enable event handlers this object.
+ type: bool
+ enable_notifications:
+ description:
+ - Whether to send notifications for this object.
+ type: bool
+ enable_passive_checks:
+ description:
+ - Whether to accept passive check results for this object.
+ type: bool
+ enable_perfdata:
+ description:
+ - Whether to process performance data provided by this object.
+ type: bool
+ groups:
+ description:
+ - Service groups that should be directly assigned to this service.
+ - Servicegroups can be useful for various reasons.
+ - >-
+ They are helpful to provided service-type specific view in
+ Icinga Web 2, either for custom dashboards or as an instrument
+ to enforce restrictions.
+ - >-
+ Service groups can be directly assigned to single services or to
+ service templates.
+ type: list
+ elements: str
+ default: []
+ host:
+ description:
+ - Choose the host this single service should be assigned to.
+ required: true
+ type: str
+ imports:
+ description:
+ - Importable templates, add as many as you want.
+ - >-
+ Please note that order matters when importing properties from
+ multiple templates - last one wins.
+ type: list
+ elements: str
+ default: []
+ max_check_attempts:
+ description:
+ - >-
+ Defines after how many check attempts a new hard state is
+ reached.
+ type: str
+ notes:
+ description:
+ - Additional notes for this object.
+ type: str
+ version_added: 1.8.0
+ notes_url:
+ description:
+ - An URL pointing to additional notes for this object.
+ - Separate multiple urls like this "http://url1 http://url2"
+ - Maximum length is 255 characters.
+ type: str
+ version_added: 1.8.0
+ retry_interval:
+ description:
+ - >-
+ Retry interval, will be applied after a state change unless the
+ next hard state is reached.
+ type: str
+ use_agent:
+ description:
+ - >-
+ Whether the check command for this service should be executed on
+ the Icinga agent.
+ type: bool
+ vars:
+ description:
+ - Custom properties of the service.
+ type: dict
+ default: {}
+ volatile:
+ description:
+ - Whether this check is volatile.
+ type: bool
+ disabled:
+ description:
+ - Disabled objects will not be deployed.
+ type: bool
+ default: false
+ choices:
+ - true
+ - false
+ icinga_service_templates:
+ description:
+ - A list of Icinga service_templates to configure
+ type: list
+ elements: str
+ options:
+ state:
+ description:
+ - Apply feature state.
+ choices:
+ - present
+ - absent
+ default: present
+ type: str
+ name:
+ description:
+ - Name of the service template.
+ required: true
+ type: str
+ check_command:
+ description:
+ - Check command definition.
+ type: str
+ check_interval:
+ description:
+ - Your regular check interval.
+ type: str
+ check_period:
+ description:
+ - >-
+ The name of a time period which determines when this object
+ should be monitored. Not limited by default.
+ type: str
+ check_timeout:
+ description:
+ - >-
+ Check command timeout in seconds. Overrides the CheckCommand's
+ timeout attribute.
+ type: str
+ enable_active_checks:
+ description:
+ - Whether to actively check this object.
+ type: bool
+ enable_event_handler:
+ description:
+ - Whether to enable event handlers this object.
+ type: bool
+ enable_notifications:
+ description:
+ - Whether to send notifications for this object.
+ type: bool
+ enable_passive_checks:
+ description:
+ - Whether to accept passive check results for this object.
+ type: bool
+ enable_perfdata:
+ description:
+ - Whether to process performance data provided by this object.
+ type: bool
+ event_command:
+ description:
+ - >-
+ Event command for service which gets called on every check
+ execution if one of these conditions matches
+ - The service is in a soft state
+ - The service state changes into a hard state
+ - The service state recovers from a soft or hard state to OK/Up
+ type: str
+ groups:
+ description:
+ - Service groups that should be directly assigned to this service.
+ - Servicegroups can be useful for various reasons.
+ - >-
+ They are helpful to provided service-type specific view in
+ Icinga Web 2, either for custom dashboards or as an instrument
+ to enforce restrictions.
+ - >-
+ Service groups can be directly assigned to single services or to
+ service templates.
+ type: list
+ elements: str
+ default: []
+ imports:
+ description:
+ - Importable templates, add as many as you want.
+ - >-
+ Please note that order matters when importing properties from
+ multiple templates - last one wins.
+ type: list
+ elements: str
+ default: []
+ max_check_attempts:
+ description:
+ - >-
+ Defines after how many check attempts a new hard state is
+ reached.
+ type: str
+ notes:
+ description:
+ - Additional notes for this object.
+ type: str
+ version_added: 1.8.0
+ notes_url:
+ description:
+ - An URL pointing to additional notes for this object.
+ - Separate multiple urls like this "http://url1 http://url2"
+ - Maximum length is 255 characters.
+ type: str
+ version_added: 1.8.0
+ retry_interval:
+ description:
+ - >-
+ Retry interval, will be applied after a state change unless the
+ next hard state is reached.
+ type: str
+ use_agent:
+ description:
+ - >-
+ Whether the check command for this service should be executed
+ on the Icinga agent.
+ type: bool
+ vars:
+ description:
+ - Custom properties of the service template.
+ type: dict
+ default: {}
+ volatile:
+ description:
+ - Whether this check is volatile.
+ type: bool
+ disabled:
+ description:
+ - Disabled objects will not be deployed.
+ type: bool
+ default: false
+ choices:
+ - true
+ - false
+ icinga_service_applies:
+ description:
+ - A list of Icinga service_applies to configure
+ type: list
+ elements: str
+ options:
+ state:
+ description:
+ - Apply feature state.
+ choices:
+ - present
+ - absent
+ default: present
+ type: str
+ name:
+ description:
+ - Name for the Icinga service apply rule.
+ required: true
+ type: str
+ display_name:
+ description:
+ - Alternative displayed name of the service apply rule.
+ type: str
+ check_command:
+ description:
+ - Check command definition.
+ type: str
+ version_added: 1.7.0
+ check_interval:
+ description:
+ - Your regular check interval.
+ required: false
+ type: str
+ check_period:
+ description:
+ - >-
+ The name of a time period which determines when this object
+ should be monitored. Not limited by default.
+ required: false
+ type: str
+ check_timeout:
+ description:
+ - >-
+ Check command timeout in seconds. Overrides the CheckCommand's
+ timeout attribute.
+ required: false
+ type: str
+ enable_active_checks:
+ description:
+ - Whether to actively check this object.
+ required: false
+ type: bool
+ enable_event_handler:
+ description:
+ - Whether to enable event handlers this object.
+ required: false
+ type: bool
+ enable_notifications:
+ description:
+ - Whether to send notifications for this object.
+ required: false
+ type: bool
+ enable_passive_checks:
+ description:
+ - Whether to accept passive check results for this object.
+ required: false
+ type: bool
+ enable_perfdata:
+ description:
+ - Whether to process performance data provided by this object.
+ required: false
+ type: bool
+ max_check_attempts:
+ description:
+ - >-
+ Defines after how many check attempts a new hard state is
+ reached.
+ required: false
+ type: str
+ retry_interval:
+ description:
+ - >-
+ Retry interval, will be applied after a state change unless the
+ next hard state is reached.
+ required: false
+ type: str
+ groups:
+ description:
+ - Service groups that should be directly assigned to this service.
+ - Servicegroups can be useful for various reasons.
+ - >-
+ They are helpful to provided service-type specific view in
+ Icinga Web 2, either for custom dashboards or as an instrument
+ to enforce restrictions.
+ - >-
+ Service groups can be directly assigned to single services or to
+ service templates.
+ type: list
+ elements: str
+ apply_for:
+ description:
+ - >-
+ Evaluates the apply for rule for all objects with the custom
+ attribute specified.
+ - >-
+ For example selecting "host.vars.custom_attr" will generate "for
+ (config in host.vars.array_var)" where "config" will be
+ accessible through "$config$".
+ - Note - only custom variables of type "Array" are eligible.
+ type: str
+ assign_filter:
+ description:
+ - The filter where the service apply rule will take effect.
+ type: str
+ command_endpoint:
+ description:
+ - The host where the service should be executed on.
+ type: str
+ imports:
+ description:
+ - Importable templates, add as many as you want.
+ - >-
+ Please note that order matters when importing properties from
+ multiple templates - last one wins.
+ type: list
+ elements: str
+ vars:
+ description:
+ - Custom properties of the service apply rule.
+ type: dict
+ notes:
+ description:
+ - Additional notes for this object.
+ type: str
+ notes_url:
+ description:
+ - An URL pointing to additional notes for this object.
+ - Separate multiple urls like this "http://url1 http://url2"
+ - Maximum length is 255 characters.
+ type: str
+ icinga_servicegroups:
+ description:
+ - A list of Icinga sservicegroups to configure
+ type: list
+ elements: str
+ options:
+ state:
+ description:
+ - Apply feature state.
+ choices:
+ - present
+ - absent
+ default: present
+ type: str
+ name:
+ description:
+ - Name for the Icinga servicegroup.
+ required: true
+ type: str
+ display_name:
+ description:
+ - An alternative display name for this group.
+ - If you wonder how this could be helpful just leave it blank.
+ type: str
+ assign_filter:
+ description:
+ - This allows you to configure an assignment filter.
+ - >-
+ Please feel free to combine as many nested operators as you
+ want.
+ type: str
+ icinga_notifications:
+ description:
+ - A list of Icinga notifications to configure
+ type: list
+ elements: str
+ options:
+ state:
+ description:
+ - Apply feature state.
+ choices:
+ - present
+ - absent
+ default: present
+ type: str
+ name:
+ description:
+ - Name of the notification.
+ required: true
+ type: str
+ notification_interval:
+ description:
+ - >-
+ The notification interval (in seconds). This interval is used
+ for active notifications.
+ - >-
+ Defaults to 30 minutes. If set to 0, re-notifications are
+ disabled.
+ type: str
+ types:
+ description:
+ - The state transition types you want to get notifications for.
+ type: list
+ elements: str
+ users:
+ description:
+ - Users that should be notified by this notification.
+ type: list
+ elements: str
+ states:
+ description:
+ - The host or service states you want to get notifications for.
+ type: list
+ elements: str
+ version_added: 1.9.0
+ apply_to:
+ description:
+ - Whether this notification should affect hosts or services.
+ required: true
+ type: str
+ choices:
+ - host
+ - service
+ assign_filter:
+ description:
+ - The filter where the notification will take effect.
+ type: str
+ imports:
+ description:
+ - >-
+ Importable templates, add as many as you want. Required when
+ state is C(present).
+ - >-
+ Please note that order matters when importing properties from
+ multiple templates - last one wins.
+ type: list
+ elements: str
+ disabled:
+ description:
+ - Disabled objects will not be deployed.
+ type: bool
+ default: false
+ choices:
+ - true
+ - false
+ version_added: 1.9.0
+ vars:
+ description:
+ - Custom properties of the notification.
+ type: dict
+ version_added: 1.9.0
+ time_period:
+ description:
+ - >-
+ The name of a time period which determines when this
+ notification should be triggered.
+ type: strod
+ version_added: 1.15.0
+ times_begin:
+ description:
+ - First notification delay.
+ - Delay unless the first notification should be sent.
+ type: int
+ version_added: 1.15.0
+ times_end:
+ description:
+ - Last notification.
+ - When the last notification should be sent.
+ type: int
+ version_added: 1.15.0
+ user_groups:
+ description:
+ - User Groups that should be notified by this notification.
+ type: list
+ elements: str
+ version_added: 1.16.0
+ icinga_service_apply:
+ short_description: Configure an Icinga instance with Icinga Director
+ description:
+ - >-
+ The main entry point includes all tasks for objects that can be created
+ with the role.
+ options:
+ icinga_url:
+ description:
+ - >-
+ HTTP, HTTPS, or FTP URL in the form
+ (http|https|ftp)://[user[:pass]]@host.domain[:port]/path
+ type: str
+ icinga_url_password:
+ description:
+ - >-
+ The password for use in HTTP basic authentication. If the
+ `url_username' parameter is not specified, the `url_password'
+ parameter will not be used.
+ type: str
+ icinga_url_username:
+ description:
+ - >-
+ The username for use in HTTP basic authentication. This parameter
+ can be used without `url_password' for sites that allow empty
+ passwords
+ type: str
+ icinga_use_gssapi:
+ description:
+ - >-
+ Use GSSAPI to perform the authentication, typically this is for
+ Kerberos or Kerberos through Negotiate authentication. Requires the
+ Python library gssapi <https://github.com/pythongssapi/python-
+ gssapi> to be installed. Credentials for GSSAPI can be specified
+ with `url_username'/`url_password' or with the GSSAPI env var
+ `KRB5CCNAME' that specified a custom Kerberos credential cache. NTLM
+ authentication is `not' supported even if the GSSAPI mech for NTLM
+ has been installed.
+ default: false
+ type: bool
+ icinga_use_proxy:
+ description:
+ - >-
+ If `no', it will not use a proxy, even if one is defined in an
+ environment variable on the target hosts.
+ default: true
+ type: bool
+ icinga_validate_certs:
+ description:
+ - >-
+ If `no', SSL certificates will not be validated. icinga_This should
+ only be used on personally controlled sites using selfigned
+ certificates.
+ default: true
+ type: bool
+ icinga_client_cert:
+ description:
+ - >-
+ PEM formatted certificate chain file to be used for SSL client
+ authentication. This file can also include the key as well, and if
+ the key is included, `client_key' is not required.
+ type: path
+ icinga_client_key:
+ description:
+ - >-
+ PEM formatted file that contains your private key to be used for SSL
+ client authentication. If `client_cert' contains both the
+ certificate and key, this option is not required.
+ type: path
diff --git a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/meta/main.yml b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/meta/main.yml
index a8a645323..de1ee749b 100644
--- a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/meta/main.yml
+++ b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/meta/main.yml
@@ -2,9 +2,12 @@
collections:
- telekom_mms.icinga_director
galaxy_info:
+ role_name: ansible_icinga
author: telekom_mms
- description: icinga configuration
+ description: This role is used to configure an Icinga Instance over its Icinga Director.
license: GPLv3
min_ansible_version: 2.9
galaxy_tags:
- icinga
+ platforms:
+ - name: all
diff --git a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_command.yml b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_command.yml
index 23eea8e0c..01f5f90f4 100644
--- a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_command.yml
+++ b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_command.yml
@@ -1,7 +1,5 @@
---
-# command.1 = command array
-# command.0 = icinga_command attribute
-- name: icinga_command
+- name: Icinga_command
icinga_command:
url: "{{ icinga_url }}"
use_proxy: "{{ icinga_use_proxy | default(omit) }}"
@@ -11,21 +9,21 @@
force_basic_auth: "{{ icinga_force_basic_auth | default(omit) }}"
client_cert: "{{ icinga_client_cert | default(omit) }}"
client_key: "{{ icinga_client_key | default(omit) }}"
- state: "{{ command.0.state | default(omit) }}"
- command: "{{ command.0.command | default(omit) }}"
- command_type: "{{ command.0.command_type | default(icinga_command_type) }}"
- disabled: "{{ command.0.disabled | default(icinga_command_disabled) }}"
- object_name: "{{ command.1 }}"
- imports: "{{ command.0.imports | default(omit) }}"
- timeout: "{{ command.0.timeout | default(omit) }}"
- zone: "{{ command.0.zone | default(omit) }}"
- vars: "{{ command.0.vars | default(omit) }}"
- arguments: "{{ command.0.arguments | default(omit) }}"
+ state: "{{ command.state | default(omit) }}"
+ command: "{{ command.command | default(omit) }}"
+ command_type: "{{ command.command_type | default(icinga_command_type) }}"
+ disabled: "{{ command.disabled | default(icinga_command_disabled) }}"
+ object_name: "{{ command.name }}"
+ imports: "{{ command.imports | default(omit) }}"
+ timeout: "{{ command.timeout | default(omit) }}"
+ zone: "{{ command.zone | default(omit) }}"
+ vars: "{{ command.vars | default(omit) }}"
+ arguments: "{{ command.arguments | default(omit) }}"
retries: 3
delay: 3
register: result
until: result is succeeded
- loop: "{{ icinga_commands|subelements('command_object') }}"
+ loop: "{{ icinga_commands }}"
loop_control:
loop_var: command
tags: command
diff --git a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_command_template.yml b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_command_template.yml
index 85b2a0fae..4056079f4 100644
--- a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_command_template.yml
+++ b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_command_template.yml
@@ -1,7 +1,5 @@
---
-# command_template.1 = command_template array
-# command_template.0 = icinga_command_template attribute
-- name: icinga_command_template
+- name: Icinga_command_template
icinga_command_template:
url: "{{ icinga_url }}"
use_proxy: "{{ icinga_use_proxy | default(omit) }}"
@@ -11,22 +9,22 @@
force_basic_auth: "{{ icinga_force_basic_auth | default(omit) }}"
client_cert: "{{ icinga_client_cert | default(omit) }}"
client_key: "{{ icinga_client_key | default(omit) }}"
- state: "{{ command_template.0.state | default(omit) }}"
- object_name: "{{ command_template.1 }}"
- display_name: "{{ command_template.0.display_name | default(omit) }}"
- command: "{{ command_template.0.command | default(omit) }}"
- command_type: "{{ command_template.0.command_type | default(icinga_command_template_command_type) }}"
- timeout: "{{ command_template.0.timeout | default(omit) }}"
- imports: "{{ command_template.0.imports | default(omit) }}"
- disabled: "{{ command_template.0.disabled | default(omit) }}"
- zone: "{{ command_template.0.zone | default(omit) }}"
- vars: "{{ command_template.0.vars | default(omit) }}"
- arguments: "{{ command_template.0.arguments | default(omit) }}"
+ state: "{{ command_template.state | default(omit) }}"
+ object_name: "{{ command_template.name }}"
+ display_name: "{{ command_template.display_name | default(omit) }}"
+ command: "{{ command_template.command | default(omit) }}"
+ command_type: "{{ command_template.command_type | default(icinga_command_template_command_type) }}"
+ timeout: "{{ command_template.timeout | default(omit) }}"
+ imports: "{{ command_template.imports | default(omit) }}"
+ disabled: "{{ command_template.disabled | default(omit) }}"
+ zone: "{{ command_template.zone | default(omit) }}"
+ vars: "{{ command_template.vars | default(omit) }}"
+ arguments: "{{ command_template.arguments | default(omit) }}"
retries: 3
delay: 3
register: result
until: result is succeeded
- loop: "{{ icinga_command_templates|subelements('command_template_object') }}"
+ loop: "{{ icinga_command_templates }}"
loop_control:
loop_var: command_template
tags: command_template
diff --git a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_endpoint.yml b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_endpoint.yml
index 7373398a0..d8f3125e5 100644
--- a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_endpoint.yml
+++ b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_endpoint.yml
@@ -1,7 +1,5 @@
---
-# endpoint.1 = endpoint array
-# endpoint.0 = icinga_endpoint attribute
-- name: icinga_endpoint
+- name: Icinga_endpoint
icinga_endpoint:
url: "{{ icinga_url }}"
use_proxy: "{{ icinga_use_proxy | default(omit) }}"
@@ -11,17 +9,17 @@
force_basic_auth: "{{ icinga_force_basic_auth | default(omit) }}"
client_cert: "{{ icinga_client_cert | default(omit) }}"
client_key: "{{ icinga_client_key | default(omit) }}"
- state: "{{ endpoint.0.state | default(omit) }}"
- object_name: "{{ endpoint.1 }}"
- host: "{{ endpoint.0.host | default(omit) }}"
- port: "{{ endpoint.0.port | default(omit) }}"
- log_duration: "{{ endpoint.0.log_duration | default(omit) }}"
- zone: "{{ endpoint.0.zone | default(omit) }}"
+ state: "{{ endpoint.state | default(omit) }}"
+ object_name: "{{ endpoint.name }}"
+ host: "{{ endpoint.host | default(omit) }}"
+ port: "{{ endpoint.port | default(omit) }}"
+ log_duration: "{{ endpoint.log_duration | default(omit) }}"
+ zone: "{{ endpoint.zone | default(omit) }}"
retries: 3
delay: 3
register: result
until: result is succeeded
- loop: "{{ icinga_endpoints|subelements('endpoint_object') }}"
+ loop: "{{ icinga_endpoints }}"
loop_control:
loop_var: endpoint
tags: endpoint
diff --git a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_host.yml b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_host.yml
index 8e4fb6cf8..0bd3eb3e5 100644
--- a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_host.yml
+++ b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_host.yml
@@ -1,55 +1,53 @@
---
-# host.1 = host array
-# host.0 = icinga_host attribute
-- name: icinga_host
+- name: Icinga_host
icinga_host:
client_cert: "{{ icinga_client_cert | default(omit) }}"
client_key: "{{ icinga_client_key | default(omit) }}"
force_basic_auth: "{{ icinga_force_basic_auth | default(omit) }}"
- state: "{{ host.0.state | default(omit) }}"
+ state: "{{ host.state | default(omit) }}"
url_password: "{{ icinga_pass }}"
url_username: "{{ icinga_user }}"
url: "{{ icinga_url }}"
use_proxy: "{{ icinga_use_proxy | default(omit) }}"
validate_certs: "{{ icinga_validate_certs | default(omit) }}"
- accept_config: "{{ host.0.accept_config | default(omit) }}"
- address: "{{ host.0.address | default(omit) }}"
- address6: "{{ host.0.address6 | default(omit) }}"
- check_command: "{{ host.0.check_command | default(omit) }}"
- check_interval: "{{ host.0.check_interval | default(omit) }}"
- check_period: "{{ host.0.check_period | default(omit) }}"
- check_timeout: "{{ host.0.check_timeout | default(omit) }}"
+ accept_config: "{{ host.accept_config | default(omit) }}"
+ address: "{{ host.address | default(omit) }}"
+ address6: "{{ host.address6 | default(omit) }}"
+ check_command: "{{ host.check_command | default(omit) }}"
+ check_interval: "{{ host.check_interval | default(omit) }}"
+ check_period: "{{ host.check_period | default(omit) }}"
+ check_timeout: "{{ host.check_timeout | default(omit) }}"
command_endpoint: "{{ command_endpoint | default(omit) }}"
- disabled: "{{ host.0.disabled | default(omit) }}"
- display_name: "{{ host.0.display_name | default(omit) }}"
- enable_active_checks: "{{ host.0.enable_active_checks | default(omit) }}"
- enable_event_handler: "{{ host.0.enable_event_handler | default(omit) }}"
- enable_flapping: "{{ host.0.enable_flapping | default(omit) }}"
- enable_notifications: "{{ host.0.enable_notifications | default(omit) }}"
- enable_passive_checks: "{{ host.0.enable_passive_checks | default(omit) }}"
- enable_perfdata: "{{ host.0.enable_perfdata | default(omit) }}"
- event_command: "{{ host.0.event_command | default(omit) }}"
- flapping_threshold_high: "{{ host.0.flapping_threshold_high | default(omit) }}"
- flapping_threshold_low: "{{ host.0.flapping_threshold_low | default(omit) }}"
- groups: "{{ host.0.groups | default(omit) }}"
- has_agent: "{{ host.0.has_agent | default(omit) }}"
- icon_image_alt: "{{ host.0.icon_image_alt | default(omit) }}"
- icon_image: "{{ host.0.icon_image | default(omit) }}"
- imports: "{{ host.0.imports | default(icinga_host_imports) }}"
- master_should_connect: "{{ host.0.master_should_connect | default(omit) }}"
- max_check_attempts: "{{ host.0.max_check_attempts | default(omit) }}"
- notes_url: "{{ host.0.notes_url | default(omit) }}"
- notes: "{{ host.0.notes | default(omit) }}"
- object_name: "{{ host.1 }}"
- retry_interval: "{{ host.0.retry_interval | default(omit) }}"
- vars: "{{ host.0.vars | default(omit) }}"
- volatile: "{{ host.0.volatile | default(omit) }}"
- zone: "{{ host.0.zone | default(omit) }}"
+ disabled: "{{ host.disabled | default(omit) }}"
+ display_name: "{{ host.display_name | default(omit) }}"
+ enable_active_checks: "{{ host.enable_active_checks | default(omit) }}"
+ enable_event_handler: "{{ host.enable_event_handler | default(omit) }}"
+ enable_flapping: "{{ host.enable_flapping | default(omit) }}"
+ enable_notifications: "{{ host.enable_notifications | default(omit) }}"
+ enable_passive_checks: "{{ host.enable_passive_checks | default(omit) }}"
+ enable_perfdata: "{{ host.enable_perfdata | default(omit) }}"
+ event_command: "{{ host.event_command | default(omit) }}"
+ flapping_threshold_high: "{{ host.flapping_threshold_high | default(omit) }}"
+ flapping_threshold_low: "{{ host.flapping_threshold_low | default(omit) }}"
+ groups: "{{ host.groups | default(omit) }}"
+ has_agent: "{{ host.has_agent | default(omit) }}"
+ icon_image_alt: "{{ host.icon_image_alt | default(omit) }}"
+ icon_image: "{{ host.icon_image | default(omit) }}"
+ imports: "{{ host.imports | default(icinga_host_imports) }}"
+ master_should_connect: "{{ host.master_should_connect | default(omit) }}"
+ max_check_attempts: "{{ host.max_check_attempts | default(omit) }}"
+ notes_url: "{{ host.notes_url | default(omit) }}"
+ notes: "{{ host.notes | default(omit) }}"
+ object_name: "{{ host.name }}"
+ retry_interval: "{{ host.retry_interval | default(omit) }}"
+ vars: "{{ host.vars | default(omit) }}"
+ volatile: "{{ host.volatile | default(omit) }}"
+ zone: "{{ host.zone | default(omit) }}"
retries: 3
delay: 3
register: result
until: result is succeeded
- loop: "{{ icinga_hosts|subelements('host_object') }}"
+ loop: "{{ icinga_hosts }}"
loop_control:
loop_var: host
tags: host
diff --git a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_host_template.yml b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_host_template.yml
index bad32814d..341848f07 100644
--- a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_host_template.yml
+++ b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_host_template.yml
@@ -1,54 +1,52 @@
---
-# host_template.1 = host_template array
-# host_template.0 = icinga_host_template attribute
-- name: icinga_host_template
+- name: Icinga_host_template
icinga_host_template:
client_cert: "{{ icinga_client_cert | default(omit) }}"
client_key: "{{ icinga_client_key | default(omit) }}"
force_basic_auth: "{{ icinga_force_basic_auth | default(omit) }}"
- state: "{{ host.0.state | default(omit) }}"
+ state: "{{ host.state | default(omit) }}"
url_password: "{{ icinga_pass }}"
url_username: "{{ icinga_user }}"
url: "{{ icinga_url }}"
use_proxy: "{{ icinga_use_proxy | default(omit) }}"
validate_certs: "{{ icinga_validate_certs | default(omit) }}"
- accept_config: "{{ host_template.0.accept_config | default(omit) }}"
- address: "{{ host_template.0.address | default(omit) }}"
- address6: "{{ host_template.0.address6 | default(omit) }}"
- check_command: "{{ host_template.0.check_command | default(omit) }}"
- check_interval: "{{ host_template.0.check_interval | default(omit) }}"
- check_period: "{{ host_template.0.check_period | default(omit) }}"
- check_timeout: "{{ host_template.0.check_timeout | default(omit) }}"
- disabled: "{{ host_template.0.disabled | default(omit) }}"
- display_name: "{{ host_template.0.display_name | default(omit) }}"
- enable_active_checks: "{{ host_template.0.enable_active_checks | default(omit) }}"
- enable_event_handler: "{{ host_template.0.enable_event_handler | default(omit) }}"
- enable_flapping: "{{ host_template.0.enable_flapping | default(omit) }}"
- enable_notifications: "{{ host_template.0.enable_notifications | default(omit) }}"
- enable_passive_checks: "{{ host_template.0.enable_passive_checks | default(omit) }}"
- enable_perfdata: "{{ host_template.0.enable_perfdata | default(omit) }}"
- event_command: "{{ host_template.0.event_command | default(omit) }}"
- flapping_threshold_high: "{{ host_template.0.flapping_threshold_high | default(omit) }}"
- flapping_threshold_low: "{{ host_template.0.flapping_threshold_low | default(omit) }}"
- groups: "{{ host_template.0.address | default(omit) }}"
- has_agent: "{{ host_template.0.has_agent | default(omit) }}"
- icon_image_alt: "{{ host_template.0.icon_image_alt | default(omit) }}"
- icon_image: "{{ host_template.0.icon_image | default(omit) }}"
- imports: "{{ host_template.0.imports | default(omit) }}"
- master_should_connect: "{{ host_template.0.master_should_connect | default(omit) }}"
- max_check_attempts: "{{ host_template.0.max_check_attempts | default(omit) }}"
- notes_url: "{{ host_template.0.notes_url | default(omit) }}"
- notes: "{{ host_template.0.notes | default(omit) }}"
- object_name: "{{ host_template.1 }}"
- retry_interval: "{{ host_template.0.retry_interval | default(omit) }}"
- vars: "{{ host_template.0.vars | default(omit) }}"
- volatile: "{{ host_template.0.volatile | default(omit) }}"
- zone: "{{ host_template.0.zone | default(omit) }}"
+ accept_config: "{{ host_template.accept_config | default(omit) }}"
+ address: "{{ host_template.address | default(omit) }}"
+ address6: "{{ host_template.address6 | default(omit) }}"
+ check_command: "{{ host_template.check_command | default(omit) }}"
+ check_interval: "{{ host_template.check_interval | default(omit) }}"
+ check_period: "{{ host_template.check_period | default(omit) }}"
+ check_timeout: "{{ host_template.check_timeout | default(omit) }}"
+ disabled: "{{ host_template.disabled | default(omit) }}"
+ display_name: "{{ host_template.display_name | default(omit) }}"
+ enable_active_checks: "{{ host_template.enable_active_checks | default(omit) }}"
+ enable_event_handler: "{{ host_template.enable_event_handler | default(omit) }}"
+ enable_flapping: "{{ host_template.enable_flapping | default(omit) }}"
+ enable_notifications: "{{ host_template.enable_notifications | default(omit) }}"
+ enable_passive_checks: "{{ host_template.enable_passive_checks | default(omit) }}"
+ enable_perfdata: "{{ host_template.enable_perfdata | default(omit) }}"
+ event_command: "{{ host_template.event_command | default(omit) }}"
+ flapping_threshold_high: "{{ host_template.flapping_threshold_high | default(omit) }}"
+ flapping_threshold_low: "{{ host_template.flapping_threshold_low | default(omit) }}"
+ groups: "{{ host_template.address | default(omit) }}"
+ has_agent: "{{ host_template.has_agent | default(omit) }}"
+ icon_image_alt: "{{ host_template.icon_image_alt | default(omit) }}"
+ icon_image: "{{ host_template.icon_image | default(omit) }}"
+ imports: "{{ host_template.imports | default(omit) }}"
+ master_should_connect: "{{ host_template.master_should_connect | default(omit) }}"
+ max_check_attempts: "{{ host_template.max_check_attempts | default(omit) }}"
+ notes_url: "{{ host_template.notes_url | default(omit) }}"
+ notes: "{{ host_template.notes | default(omit) }}"
+ object_name: "{{ host_template.name }}"
+ retry_interval: "{{ host_template.retry_interval | default(omit) }}"
+ vars: "{{ host_template.vars | default(omit) }}"
+ volatile: "{{ host_template.volatile | default(omit) }}"
+ zone: "{{ host_template.zone | default(omit) }}"
retries: 3
delay: 3
register: result
until: result is succeeded
- loop: "{{ icinga_host_templates|subelements('host_template_object') }}"
+ loop: "{{ icinga_host_templates }}"
loop_control:
loop_var: host_template
tags: host_template
diff --git a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_hostgroup.yml b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_hostgroup.yml
index 45f825ece..aff09d400 100644
--- a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_hostgroup.yml
+++ b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_hostgroup.yml
@@ -1,7 +1,5 @@
---
-# hostgroup.1 = hostgroup array
-# hostgroup.0 = icinga_hostgroup attribute
-- name: icinga_hostgroup
+- name: Icinga_hostgroup
icinga_hostgroup:
url: "{{ icinga_url }}"
use_proxy: "{{ icinga_use_proxy | default(omit) }}"
@@ -11,15 +9,15 @@
force_basic_auth: "{{ icinga_force_basic_auth | default(omit) }}"
client_cert: "{{ icinga_client_cert | default(omit) }}"
client_key: "{{ icinga_client_key | default(omit) }}"
- state: "{{ hostgroup.0.state | default(omit) }}"
- object_name: "{{ hostgroup.1 }}"
- display_name: "{{ hostgroup.0.display_name | default(omit) }}"
- assign_filter: "{{ hostgroup.0.assign_filter | default('host.name=\"' + hostgroup.1 + '-*\"') }}"
+ state: "{{ hostgroup.state | default(omit) }}"
+ object_name: "{{ hostgroup.name }}"
+ display_name: "{{ hostgroup.display_name | default(omit) }}"
+ assign_filter: "{{ hostgroup.assign_filter | default('host.name=\"' + hostgroup.name + '-*\"') }}"
retries: 3
delay: 3
register: result
until: result is succeeded
- loop: "{{ icinga_hostgroups|subelements('hostgroup_object') }}"
+ loop: "{{ icinga_hostgroups }}"
loop_control:
loop_var: hostgroup
tags: hostgroup
diff --git a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_notification.yml b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_notification.yml
index 84f139907..6ffe1156d 100644
--- a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_notification.yml
+++ b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_notification.yml
@@ -1,7 +1,5 @@
---
-# notification.1 = notification array
-# notification.0 = icinga_notification attribute
-- name: icinga_notification
+- name: Icinga_notification
icinga_notification:
url: "{{ icinga_url }}"
use_proxy: "{{ icinga_use_proxy | default(omit) }}"
@@ -11,23 +9,23 @@
force_basic_auth: "{{ icinga_force_basic_auth | default(omit) }}"
client_cert: "{{ icinga_client_cert | default(omit) }}"
client_key: "{{ icinga_client_key | default(omit) }}"
- state: "{{ notification.0.state | default(omit) }}"
- object_name: "{{ notification.1 }}"
- notification_interval: "{{ notification.0.notification_interval | default(omit) }}"
- states: "{{ notification.0.states | default(omit) }}"
- types: "{{ notification.0.types | default(omit) }}"
- users: "{{ notification.0.users | default(omit) }}"
- user_groups: "{{ notification.0.user_groups | default(omit) }}"
- apply_to: "{{ notification.0.apply_to | default(omit) }}"
- assign_filter: "{{ notification.0.assign_filter | default(omit) }}"
- imports: "{{ notification.0.imports | default(omit) }}"
- period: "{{ notification.0.period | default(omit) }}"
- vars: "{{ notification.0.vars | default(omit) }}"
+ state: "{{ notification.state | default(omit) }}"
+ object_name: "{{ notification.name }}"
+ notification_interval: "{{ notification.notification_interval | default(omit) }}"
+ states: "{{ notification.states | default(omit) }}"
+ types: "{{ notification.types | default(omit) }}"
+ users: "{{ notification.users | default(omit) }}"
+ user_groups: "{{ notification.user_groups | default(omit) }}"
+ apply_to: "{{ notification.apply_to | default(omit) }}"
+ assign_filter: "{{ notification.assign_filter | default(omit) }}"
+ imports: "{{ notification.imports | default(omit) }}"
+ period: "{{ notification.period | default(omit) }}"
+ vars: "{{ notification.vars | default(omit) }}"
retries: 3
delay: 3
register: result
until: result is succeeded
- loop: "{{ icinga_notifications|subelements('notification_object') }}"
+ loop: "{{ icinga_notifications }}"
loop_control:
loop_var: notification
tags: notification
diff --git a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_notification_template.yml b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_notification_template.yml
index 7afa26c0a..1692948e7 100644
--- a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_notification_template.yml
+++ b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_notification_template.yml
@@ -1,7 +1,5 @@
---
-# notification_template.1 = notification_template array
-# notification_template.0 = icinga_notification_template attribute
-- name: icinga_notification_template
+- name: Icinga_notification_template
icinga_notification_template:
url: "{{ icinga_url }}"
use_proxy: "{{ icinga_use_proxy | default(omit) }}"
@@ -11,24 +9,24 @@
force_basic_auth: "{{ icinga_force_basic_auth | default(omit) }}"
client_cert: "{{ icinga_client_cert | default(omit) }}"
client_key: "{{ icinga_client_key | default(omit) }}"
- object_name: "{{ notification_template.1 }}"
- state: "{{ notification_template.0.state | default(omit) }}"
- notification_interval: "{{ notification_template.0.notification_interval | default(omit) }}"
- states: "{{ notification_template.0.states | default(omit) }}"
- types: "{{ notification_template.0.types | default(omit) }}"
- times_begin: "{{ notification_template.0.times_begin | default(omit) }}"
- times_end: "{{ notification_template.0.times_end | default(omit) }}"
- time_period: "{{ notification_template.0.time_period | default(omit) }}"
- users: "{{ notification_template.0.users | default(omit) }}"
- user_groups: "{{ notification_template.0.user_groups | default(omit) }}"
- notification_command: "{{ notification_template.0.notification_command | default(omit) }}"
- imports: "{{ notification_template.0.imports | default(omit) }}"
- zone: "{{ notification_template.0.zone | default(omit) }}"
+ object_name: "{{ notification_template.name }}"
+ state: "{{ notification_template.state | default(omit) }}"
+ notification_interval: "{{ notification_template.notification_interval | default(omit) }}"
+ states: "{{ notification_template.states | default(omit) }}"
+ types: "{{ notification_template.types | default(omit) }}"
+ times_begin: "{{ notification_template.times_begin | default(omit) }}"
+ times_end: "{{ notification_template.times_end | default(omit) }}"
+ time_period: "{{ notification_template.time_period | default(omit) }}"
+ users: "{{ notification_template.users | default(omit) }}"
+ user_groups: "{{ notification_template.user_groups | default(omit) }}"
+ notification_command: "{{ notification_template.notification_command | default(omit) }}"
+ imports: "{{ notification_template.imports | default(omit) }}"
+ zone: "{{ notification_template.zone | default(omit) }}"
retries: 3
delay: 3
register: result
until: result is succeeded
- loop: "{{ icinga_notification_templates|subelements('notification_template_object') }}"
+ loop: "{{ icinga_notification_templates }}"
loop_control:
loop_var: notification_template
tags: notification_template
diff --git a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_scheduled_downtime.yml b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_scheduled_downtime.yml
index c42f9e930..84ac9cbe6 100644
--- a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_scheduled_downtime.yml
+++ b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_scheduled_downtime.yml
@@ -1,5 +1,5 @@
---
-- name: icinga_scheduled_downtime
+- name: Icinga_scheduled_downtime
telekom_mms.icinga_director.icinga_scheduled_downtime:
url: "{{ icinga_url }}"
use_proxy: "{{ icinga_use_proxy | default(omit) }}"
@@ -9,21 +9,21 @@
force_basic_auth: "{{ icinga_force_basic_auth | default(omit) }}"
client_cert: "{{ icinga_client_cert | default(omit) }}"
client_key: "{{ icinga_client_key | default(omit) }}"
- state: "{{ downtime.0.state | default(omit) }}"
- object_name: "{{ downtime.1 }}"
- author: "{{ downtime.0.author }}"
- comment: "{{ downtime.0.comment }}"
- fixed: "{{ downtime.0.fixed }}"
- with_services: "{{ downtime.0.with_services | default(omit) }}"
- apply_to: "{{ downtime.0.apply_to }}"
- assign_filter: "{{ downtime.0.assign_filter | default(omit) }}"
- duration: "{{ downtime.0.duration | default(omit) }}"
- ranges: "{{ downtime.0.ranges| default(omit) }}"
+ state: "{{ downtime.state | default(omit) }}"
+ object_name: "{{ downtime.name }}"
+ author: "{{ downtime.author }}"
+ comment: "{{ downtime.comment }}"
+ fixed: "{{ downtime.fixed }}"
+ with_services: "{{ downtime.with_services | default(omit) }}"
+ apply_to: "{{ downtime.apply_to }}"
+ assign_filter: "{{ downtime.assign_filter | default(omit) }}"
+ duration: "{{ downtime.duration | default(omit) }}"
+ ranges: "{{ downtime.ranges | default(omit) }}"
retries: 3
delay: 3
register: result
until: result is succeeded
- loop: "{{ icinga_scheduled_downtimes|subelements('scheduled_downtime_object') }}"
+ loop: "{{ icinga_scheduled_downtimes }}"
loop_control:
loop_var: downtime
tags: downtime
diff --git a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_service.yml b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_service.yml
index 922bc00ce..4251b9ded 100644
--- a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_service.yml
+++ b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_service.yml
@@ -1,7 +1,5 @@
---
-# service.1 = service array
-# service.0 = icinga_service attribute
-- name: icinga_service
+- name: Icinga_service
icinga_service:
url: "{{ icinga_url }}"
use_proxy: "{{ icinga_use_proxy | default(omit) }}"
@@ -11,34 +9,35 @@
force_basic_auth: "{{ icinga_force_basic_auth | default(omit) }}"
client_cert: "{{ icinga_client_cert | default(omit) }}"
client_key: "{{ icinga_client_key | default(omit) }}"
- state: "{{ service.0.state | default(omit) }}"
- object_name: "{{ service.1 }}"
- display_name: "{{ service.0.display_name | default(omit) }}"
- disabled: "{{ service.0.disabled | default(omit) }}"
- check_command: "{{ service.0.check_command | default(omit) }}"
- check_interval: "{{ service.0.check_interval | default(omit) }}"
- check_period: "{{ service.0.check_period | default(omit) }}"
- check_timeout: "{{ service.0.check_timeout | default(omit) }}"
- enable_active_checks: "{{ service.0.enable_active_checks | default(omit) }}"
- enable_event_handler: "{{ service.0.enable_event_handler | default(omit) }}"
- enable_notifications: "{{ service.0.enable_notifications | default(omit) }}"
- enable_passive_checks: "{{ service.0.enable_passive_checks | default(omit) }}"
- enable_perfdata: "{{ service.0.enable_perfdata | default(omit) }}"
- groups: "{{ service.0.groups | default(omit) }}"
- host: "{{ service.0.host | default(omit) }}"
- imports: "{{ service.0.imports | default(omit) }}"
- max_check_attempts: "{{ service.0.max_check_attempts | default(omit) }}"
- notes: "{{ service.0.notes | default(omit) }}"
- notes_url: "{{ service.0.notes_url | default(omit) }}"
- retry_interval: "{{ service.0.retry_interval | default(omit) }}"
- use_agent: "{{ service.0.use_agent | default(omit) }}"
- vars: "{{ service.0.vars | default(omit) }}"
- volatile: "{{ service.0.volatile | default(omit) }}"
+ state: "{{ service.state | default(omit) }}"
+ object_name: "{{ service.name }}"
+ display_name: "{{ service.display_name | default(omit) }}"
+ disabled: "{{ service.disabled | default(omit) }}"
+ check_command: "{{ service.check_command | default(omit) }}"
+ check_interval: "{{ service.check_interval | default(omit) }}"
+ check_period: "{{ service.check_period | default(omit) }}"
+ check_timeout: "{{ service.check_timeout | default(omit) }}"
+ enable_active_checks: "{{ service.enable_active_checks | default(omit) }}"
+ enable_event_handler: "{{ service.enable_event_handler | default(omit) }}"
+ enable_notifications: "{{ service.enable_notifications | default(omit) }}"
+ enable_passive_checks: "{{ service.enable_passive_checks | default(omit) }}"
+ enable_perfdata: "{{ service.enable_perfdata | default(omit) }}"
+ groups: "{{ service.groups | default(omit) }}"
+ host: "{{ service.host | default(omit) }}"
+ imports: "{{ service.imports | default(omit) }}"
+ max_check_attempts: "{{ service.max_check_attempts | default(omit) }}"
+ notes: "{{ service.notes | default(omit) }}"
+ notes_url: "{{ service.notes_url | default(omit) }}"
+ retry_interval: "{{ service.retry_interval | default(omit) }}"
+ use_agent: "{{ service.use_agent | default(omit) }}"
+ vars: "{{ service.vars | default(omit) }}"
+ volatile: "{{ service.volatile | default(omit) }}"
+ service_set: "{{ service.service_set | default(omit) }}"
retries: 3
delay: 3
register: result
until: result is succeeded
- loop: "{{ icinga_services|subelements('service_object') }}"
+ loop: "{{ icinga_services }}"
loop_control:
loop_var: service
tags: service
diff --git a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_service_apply.yml b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_service_apply.yml
index 3437efc45..7cd18847a 100644
--- a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_service_apply.yml
+++ b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_service_apply.yml
@@ -1,7 +1,5 @@
---
-# service_apply.1 = service_apply array
-# service_apply.0 = icinga_service_apply attribute
-- name: icinga_service_apply
+- name: Icinga_service_apply
icinga_service_apply:
url: "{{ icinga_url }}"
use_proxy: "{{ icinga_use_proxy | default(omit) }}"
@@ -11,34 +9,34 @@
force_basic_auth: "{{ icinga_force_basic_auth | default(omit) }}"
client_cert: "{{ icinga_client_cert | default(omit) }}"
client_key: "{{ icinga_client_key | default(omit) }}"
- state: "{{ service_apply.0.state | default(omit) }}"
- object_name: "{{ service_apply.1 }}"
- display_name: "{{ service_apply.0.display_name | default(service_apply.1) }}"
- groups: "{{ service_apply.0.groups | default(omit) }}"
- apply_for: "{{ service_apply.0.apply_for | default(omit) }}"
- assign_filter: "{{ service_apply.0.assign_filter | default(omit) }}"
- imports: "{{ service_apply.0.imports | default(omit) }}"
- command_endpoint: "{{ service_apply.0.command_endpoint | default(omit) }}"
- vars: "{{ service_apply.0.vars | default(omit) }}"
- notes: "{{ service_apply.0.notes | default(omit) }}"
- notes_url: "{{ service_apply.0.notes_url | default(omit) }}"
- check_interval: "{{ service_apply.0.check_interval | default(omit) }}"
- check_period: "{{ service_apply.0.check_period | default(omit) }}"
- check_timeout: "{{ service_apply.0.check_timeout | default(omit) }}"
- check_command: "{{ service_apply.0.check_command | default(omit) }}"
- enable_active_checks: "{{ service_apply.0.enable_active_checks | default(omit) }}"
- enable_event_handler: "{{ service_apply.0.enable_event_handler | default(omit) }}"
- enable_notifications: "{{ service_apply.0.enable_notifications | default(omit) }}"
- enable_passive_checks: "{{ service_apply.0.enable_passive_checks | default(omit) }}"
- enable_perfdata: "{{ service_apply.0.enable_perfdata | default(omit) }}"
- event_command: "{{ service_apply.0.event_command | default(omit) }}"
- max_check_attempts: "{{ service_apply.0.max_check_attempts | default(omit) }}"
- retry_interval: "{{ service_apply.0.retry_interval | default(omit) }}"
+ state: "{{ service_apply.state | default(omit) }}"
+ object_name: "{{ service_apply.name }}"
+ display_name: "{{ service_apply.display_name | default(service_apply.name) }}"
+ groups: "{{ service_apply.groups | default(omit) }}"
+ apply_for: "{{ service_apply.apply_for | default(omit) }}"
+ assign_filter: "{{ service_apply.assign_filter | default(omit) }}"
+ imports: "{{ service_apply.imports | default(omit) }}"
+ command_endpoint: "{{ service_apply.command_endpoint | default(omit) }}"
+ vars: "{{ service_apply.vars | default(omit) }}"
+ notes: "{{ service_apply.notes | default(omit) }}"
+ notes_url: "{{ service_apply.notes_url | default(omit) }}"
+ check_interval: "{{ service_apply.check_interval | default(omit) }}"
+ check_period: "{{ service_apply.check_period | default(omit) }}"
+ check_timeout: "{{ service_apply.check_timeout | default(omit) }}"
+ check_command: "{{ service_apply.check_command | default(omit) }}"
+ enable_active_checks: "{{ service_apply.enable_active_checks | default(omit) }}"
+ enable_event_handler: "{{ service_apply.enable_event_handler | default(omit) }}"
+ enable_notifications: "{{ service_apply.enable_notifications | default(omit) }}"
+ enable_passive_checks: "{{ service_apply.enable_passive_checks | default(omit) }}"
+ enable_perfdata: "{{ service_apply.enable_perfdata | default(omit) }}"
+ event_command: "{{ service_apply.event_command | default(omit) }}"
+ max_check_attempts: "{{ service_apply.max_check_attempts | default(omit) }}"
+ retry_interval: "{{ service_apply.retry_interval | default(omit) }}"
retries: 3
delay: 3
register: result
until: result is succeeded
- loop: "{{ icinga_service_applies|subelements('service_apply_object') }}"
+ loop: "{{ icinga_service_applies }}"
loop_control:
loop_var: service_apply
tags: service_apply
diff --git a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_service_template.yml b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_service_template.yml
index 0d4eae7cc..80eceef3d 100644
--- a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_service_template.yml
+++ b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_service_template.yml
@@ -1,7 +1,5 @@
---
-# service_template.1 = service_template array
-# service_template.0 = icinga_service_template attribute
-- name: icinga_service_template
+- name: Icinga_service_template
icinga_service_template:
url: "{{ icinga_url }}"
use_proxy: "{{ icinga_use_proxy | default(omit) }}"
@@ -11,35 +9,35 @@
force_basic_auth: "{{ icinga_force_basic_auth | default(omit) }}"
client_cert: "{{ icinga_client_cert | default(omit) }}"
client_key: "{{ icinga_client_key | default(omit) }}"
- state: "{{ service_template.0.state | default(omit) }}"
- object_name: "{{ service_template.1 }}"
- display_name: "{{ service_template.0.display_name | default(omit) }}"
- disabled: "{{ service_template.0.disabled | default(omit) }}"
- check_command: "{{ service_template.0.check_command | default(omit) }}"
- check_interval: "{{ service_template.0.check_interval | default(omit) }}"
- check_period: "{{ service_template.0.check_period | default(omit) }}"
- check_timeout: "{{ service_template.0.check_timeout | default(omit) }}"
- command_endpoint: "{{ service_template.0.command_endpoint | default(omit) }}"
- enable_active_checks: "{{ service_template.0.enable_active_checks | default(omit) }}"
- enable_event_handler: "{{ service_template.0.enable_event_handler | default(omit) }}"
- enable_notifications: "{{ service_template.0.enable_notifications | default(omit) }}"
- enable_passive_checks: "{{ service_template.0.enable_passive_checks | default(omit) }}"
- enable_perfdata: "{{ service_template.0.enable_perfdata | default(omit) }}"
- groups: "{{ service_template.0.groups | default(omit) }}"
- imports: "{{ service_template.0.imports | default(omit) }}"
- max_check_attempts: "{{ service_template.0.max_check_attempts | default(omit) }}"
- notes: "{{ service_template.0.notes | default(omit) }}"
- notes_url: "{{ service_template.0.notes_url | default(omit) }}"
- retry_interval: "{{ service_template.0.retry_interval | default(omit) }}"
- use_agent: "{{ service_template.0.use_agent | default(omit) }}"
- vars: "{{ service_template.0.vars | default(omit) }}"
- volatile: "{{ service_template.0.volatile | default(omit) }}"
- event_command: "{{ service_template.0.event_command | default(omit) }}"
+ state: "{{ service_template.state | default(omit) }}"
+ object_name: "{{ service_template.name }}"
+ display_name: "{{ service_template.display_name | default(omit) }}"
+ disabled: "{{ service_template.disabled | default(omit) }}"
+ check_command: "{{ service_template.check_command | default(omit) }}"
+ check_interval: "{{ service_template.check_interval | default(omit) }}"
+ check_period: "{{ service_template.check_period | default(omit) }}"
+ check_timeout: "{{ service_template.check_timeout | default(omit) }}"
+ command_endpoint: "{{ service_template.command_endpoint | default(omit) }}"
+ enable_active_checks: "{{ service_template.enable_active_checks | default(omit) }}"
+ enable_event_handler: "{{ service_template.enable_event_handler | default(omit) }}"
+ enable_notifications: "{{ service_template.enable_notifications | default(omit) }}"
+ enable_passive_checks: "{{ service_template.enable_passive_checks | default(omit) }}"
+ enable_perfdata: "{{ service_template.enable_perfdata | default(omit) }}"
+ groups: "{{ service_template.groups | default(omit) }}"
+ imports: "{{ service_template.imports | default(omit) }}"
+ max_check_attempts: "{{ service_template.max_check_attempts | default(omit) }}"
+ notes: "{{ service_template.notes | default(omit) }}"
+ notes_url: "{{ service_template.notes_url | default(omit) }}"
+ retry_interval: "{{ service_template.retry_interval | default(omit) }}"
+ use_agent: "{{ service_template.use_agent | default(omit) }}"
+ vars: "{{ service_template.vars | default(omit) }}"
+ volatile: "{{ service_template.volatile | default(omit) }}"
+ event_command: "{{ service_template.event_command | default(omit) }}"
retries: 3
delay: 3
register: result
until: result is succeeded
- loop: "{{ icinga_service_templates|subelements('service_template_object') }}"
+ loop: "{{ icinga_service_templates }}"
loop_control:
loop_var: service_template
tags: service_template
diff --git a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_servicegroup.yml b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_servicegroup.yml
index 9ba5e40dc..2d75e694e 100644
--- a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_servicegroup.yml
+++ b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_servicegroup.yml
@@ -1,7 +1,5 @@
---
-# servicegroup.1 = servicegroup array
-# servicegroup.0 = icinga_servicegroup attribute
-- name: icinga_servicegroup
+- name: Icinga_servicegroup
icinga_servicegroup:
url: "{{ icinga_url }}"
use_proxy: "{{ icinga_use_proxy | default(omit) }}"
@@ -11,15 +9,15 @@
force_basic_auth: "{{ icinga_force_basic_auth | default(omit) }}"
client_cert: "{{ icinga_client_cert | default(omit) }}"
client_key: "{{ icinga_client_key | default(omit) }}"
- state: "{{ servicegroup.0.state | default(omit) }}"
- object_name: "{{ servicegroup.1 }}"
- display_name: "{{ servicegroup.0.display_name | default(omit) }}"
- assign_filter: "{{ servicegroup.0.assign_filter | default(omit) }}"
+ state: "{{ servicegroup.state | default(omit) }}"
+ object_name: "{{ servicegroup.name }}"
+ display_name: "{{ servicegroup.display_name | default(omit) }}"
+ assign_filter: "{{ servicegroup.assign_filter | default(omit) }}"
retries: 3
delay: 3
register: result
until: result is succeeded
- loop: "{{ icinga_servicegroups|subelements('servicegroup_object') }}"
+ loop: "{{ icinga_servicegroups }}"
loop_control:
loop_var: servicegroup
tags: servicegroup
diff --git a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_serviceset.yml b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_serviceset.yml
index a609cca2d..88b49fe75 100644
--- a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_serviceset.yml
+++ b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_serviceset.yml
@@ -1,7 +1,5 @@
---
-# serviceset.1 = serviceset array
-# serviceset.0 = icinga_serviceset attribute
-- name: icinga_serviceset
+- name: Icinga_serviceset
icinga_serviceset:
url: "{{ icinga_url }}"
use_proxy: "{{ icinga_use_proxy | default(omit) }}"
@@ -11,15 +9,15 @@
force_basic_auth: "{{ icinga_force_basic_auth | default(omit) }}"
client_cert: "{{ icinga_client_cert | default(omit) }}"
client_key: "{{ icinga_client_key | default(omit) }}"
- state: "{{ service.0.state | default(omit) }}"
- assign_filter: "{{ serviceset.0.assign_filter | default(omit)}}"
- description: "{{ serviceset.0.description | default(omit)}}"
- object_name: "{{ serviceset.1 }}"
+ state: "{{ service.state | default(omit) }}"
+ assign_filter: "{{ serviceset.assign_filter | default(omit) }}"
+ description: "{{ serviceset.description | default(omit) }}"
+ object_name: "{{ serviceset.name }}"
retries: 3
delay: 3
register: result
until: result is succeeded
- loop: "{{ icinga_servicesets|subelements('serviceset_object') }}"
+ loop: "{{ icinga_servicesets }}"
loop_control:
loop_var: serviceset
tags: serviceset
diff --git a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_timeperiod.yml b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_timeperiod.yml
index bfc702963..fd216c155 100644
--- a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_timeperiod.yml
+++ b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_timeperiod.yml
@@ -1,7 +1,5 @@
---
-# timeperiod.1 = timeperiod array
-# timeperiod.0 = icinga_timeperiod attribute
-- name: icinga_timeperiod
+- name: Icinga_timeperiod
icinga_timeperiod:
url: "{{ icinga_url }}"
use_proxy: "{{ icinga_use_proxy | default(omit) }}"
@@ -11,16 +9,16 @@
force_basic_auth: "{{ icinga_force_basic_auth | default(omit) }}"
client_cert: "{{ icinga_client_cert | default(omit) }}"
client_key: "{{ icinga_client_key | default(omit) }}"
- state: "{{ timeperiod.0.state | default(omit) }}"
- object_name: "{{ timeperiod.1 }}"
- display_name: "{{ timeperiod.0.display_name | default(omit) }}"
- imports: "{{ timeperiod.0.imports | default(omit) }}"
- ranges: "{{ timeperiod.0.ranges | default(omit) }}"
+ state: "{{ timeperiod.state | default(omit) }}"
+ object_name: "{{ timeperiod.name }}"
+ display_name: "{{ timeperiod.display_name | default(omit) }}"
+ imports: "{{ timeperiod.imports | default(omit) }}"
+ ranges: "{{ timeperiod.ranges | default(omit) }}"
retries: 3
delay: 3
register: result
until: result is succeeded
- loop: "{{ icinga_timeperiods|subelements('timeperiod_object') }}"
+ loop: "{{ icinga_timeperiods }}"
loop_control:
loop_var: timeperiod
tags: timeperiod
diff --git a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_user.yml b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_user.yml
index 0d3552de9..83fde7cab 100644
--- a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_user.yml
+++ b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_user.yml
@@ -1,7 +1,5 @@
---
-# user.1 = user array
-# user.0 = icinga_user attribute
-- name: icinga_user
+- name: Icinga_user
icinga_user:
url: "{{ icinga_url }}"
use_proxy: "{{ icinga_use_proxy | default(omit) }}"
@@ -11,19 +9,19 @@
force_basic_auth: "{{ icinga_force_basic_auth | default(omit) }}"
client_cert: "{{ icinga_client_cert | default(omit) }}"
client_key: "{{ icinga_client_key | default(omit) }}"
- state: "{{ user.0.state | default(omit) }}"
- object_name: "{{ user.1 }}"
- display_name: "{{ user.0.display_name | default(omit) }}"
- imports: "{{ user.0.imports | default(icinga_user_imports) }}"
- pager: "{{ user.0.pager | default(omit) }}"
- period: "{{ user.0.period | default(omit) }}"
- disabled: "{{ user.0.disabled | default(omit) }}"
- email: "{{ user.0.email | default(icinga_user_email) }}"
+ state: "{{ user.state | default(omit) }}"
+ object_name: "{{ user.name }}"
+ display_name: "{{ user.display_name | default(omit) }}"
+ imports: "{{ user.imports | default(icinga_user_imports) }}"
+ pager: "{{ user.pager | default(omit) }}"
+ period: "{{ user.period | default(omit) }}"
+ disabled: "{{ user.disabled | default(omit) }}"
+ email: "{{ user.email | default(icinga_user_email) }}"
retries: 3
delay: 3
register: result
until: result is succeeded
- loop: "{{ icinga_users|subelements('user_object') }}"
+ loop: "{{ icinga_users }}"
loop_control:
loop_var: user
tags: user
diff --git a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_user_group.yml b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_user_group.yml
new file mode 100644
index 000000000..ca0cf8b43
--- /dev/null
+++ b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_user_group.yml
@@ -0,0 +1,24 @@
+---
+- name: Icinga_user_group
+ icinga_user_group:
+ url: "{{ icinga_url }}"
+ use_proxy: "{{ icinga_use_proxy | default(omit) }}"
+ validate_certs: "{{ icinga_validate_certs | default(omit) }}"
+ url_username: "{{ icinga_user }}"
+ url_password: "{{ icinga_pass }}"
+ force_basic_auth: "{{ icinga_force_basic_auth | default(omit) }}"
+ client_cert: "{{ icinga_client_cert | default(omit) }}"
+ client_key: "{{ icinga_client_key | default(omit) }}"
+ state: "{{ user_group.state | default(omit) }}"
+ object_name: "{{ user_group.name }}"
+ display_name: "{{ user_group.display_name | default(omit) }}"
+ disabled: "{{ user_group.disabled | default(omit) }}"
+ retries: 3
+ delay: 3
+ register: result
+ until: result is succeeded
+ loop: "{{ icinga_user_groups }}"
+ loop_control:
+ loop_var: user_group
+ tags: user_group
+ notify: config_deploy
diff --git a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_user_template.yml b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_user_template.yml
index 432472e6e..3afc36654 100644
--- a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_user_template.yml
+++ b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_user_template.yml
@@ -1,7 +1,5 @@
---
-# user_template.1 = user_template array
-# user_template.0 = icinga_user_template attribute
-- name: icinga_user_template
+- name: Icinga_user_template
icinga_user_template:
url: "{{ icinga_url }}"
use_proxy: "{{ icinga_use_proxy | default(omit) }}"
@@ -11,17 +9,17 @@
force_basic_auth: "{{ icinga_force_basic_auth | default(omit) }}"
client_cert: "{{ icinga_client_cert | default(omit) }}"
client_key: "{{ icinga_client_key | default(omit) }}"
- state: "{{ user_template.0.state | default(omit) }}"
- object_name: "{{ user_template.1 }}"
- imports: "{{ user_template.0.imports | default(omit) }}"
- period: "{{ user_template.0.period | default(omit) }}"
- enable_notifications: "{{ user_template.0.enable_notifications | default(omit) }}"
- zone: "{{ user_template.0.zone | default(omit) }}"
+ state: "{{ user_template.state | default(omit) }}"
+ object_name: "{{ user_template.name }}"
+ imports: "{{ user_template.imports | default(omit) }}"
+ period: "{{ user_template.period | default(omit) }}"
+ enable_notifications: "{{ user_template.enable_notifications | default(omit) }}"
+ zone: "{{ user_template.zone | default(omit) }}"
retries: 3
delay: 3
register: result
until: result is succeeded
- loop: "{{ icinga_user_templates|subelements('user_template_object') }}"
+ loop: "{{ icinga_user_templates }}"
loop_control:
loop_var: user_template
tags: user_template
diff --git a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_zone.yml b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_zone.yml
index c907f3f87..90b6fc3f6 100644
--- a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_zone.yml
+++ b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_zone.yml
@@ -1,7 +1,5 @@
---
-# zone.1 = zone array
-# zone.0 = icinga_zone attribute
-- name: icinga_zone
+- name: Icinga_zone
icinga_zone:
url: "{{ icinga_url }}"
use_proxy: "{{ icinga_use_proxy | default(omit) }}"
@@ -11,15 +9,15 @@
force_basic_auth: "{{ icinga_force_basic_auth | default(omit) }}"
client_cert: "{{ icinga_client_cert | default(omit) }}"
client_key: "{{ icinga_client_key | default(omit) }}"
- state: "{{ zone.0.state | default(omit) }}"
- object_name: "{{ zone.1 }}"
- is_global: "{{ zone.0.is_global | default(omit) }}"
- parent: "{{ zone.0.parent | default(omit) }}"
+ state: "{{ zone.state | default(omit) }}"
+ object_name: "{{ zone.name }}"
+ is_global: "{{ zone.is_global | default(omit) }}"
+ parent: "{{ zone.parent | default(omit) }}"
retries: 3
delay: 3
register: result
until: result is succeeded
- loop: "{{ icinga_zones|subelements('zone_object') }}"
+ loop: "{{ icinga_zones }}"
loop_control:
loop_var: zone
tags: zone
diff --git a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/main.yml b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/main.yml
index 24d16e370..aa30bf146 100644
--- a/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/main.yml
+++ b/ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/main.yml
@@ -1,90 +1,95 @@
---
-- name: icinga timeperiod configuration
- include_tasks: icinga_timeperiod.yml
+- name: Icinga timeperiod configuration
+ ansible.builtin.include_tasks: icinga_timeperiod.yml
when: icinga_timeperiods is defined
tags: timeperiod
-- name: icinga user_template configuration
- include_tasks: icinga_user_template.yml
+- name: Icinga user_template configuration
+ ansible.builtin.include_tasks: icinga_user_template.yml
when: icinga_user_templates is defined
tags: user_template
-- name: icinga user configuration
- include_tasks: icinga_user.yml
+- name: Icinga user configuration
+ ansible.builtin.include_tasks: icinga_user.yml
when: icinga_users is defined
tags: user
-- name: icinga zone configuration
- include_tasks: icinga_zone.yml
+- name: Icinga user_group configuration
+ ansible.builtin.include_tasks: icinga_user_group.yml
+ when: icinga_user_groups is defined
+ tags: user_group
+
+- name: Icinga zone configuration
+ ansible.builtin.include_tasks: icinga_zone.yml
when: icinga_zones is defined
tags: zone
-- name: icinga endpoint configuration
- include_tasks: icinga_endpoint.yml
+- name: Icinga endpoint configuration
+ ansible.builtin.include_tasks: icinga_endpoint.yml
when: icinga_endpoints is defined
tags: endpoint
-- name: icinga hostgroup configuration
- include_tasks: icinga_hostgroup.yml
+- name: Icinga hostgroup configuration
+ ansible.builtin.include_tasks: icinga_hostgroup.yml
when: icinga_hostgroups is defined
tags: hostgroup
-- name: icinga host_template configuration
- include_tasks: icinga_host_template.yml
+- name: Icinga host_template configuration
+ ansible.builtin.include_tasks: icinga_host_template.yml
when: icinga_host_templates is defined
tags: host_template
-- name: icinga host configuration
- include_tasks: icinga_host.yml
+- name: Icinga host configuration
+ ansible.builtin.include_tasks: icinga_host.yml
when: icinga_hosts is defined
tags: host
-- name: icinga command_template configuration
- include_tasks: icinga_command_template.yml
+- name: Icinga command_template configuration
+ ansible.builtin.include_tasks: icinga_command_template.yml
when: icinga_command_templates is defined
tags: command_template
-- name: icinga command configuration
- include_tasks: icinga_command.yml
+- name: Icinga command configuration
+ ansible.builtin.include_tasks: icinga_command.yml
when: icinga_commands is defined
tags: command
-- name: icinga service_template configuration
- include_tasks: icinga_service_template.yml
+- name: Icinga service_template configuration
+ ansible.builtin.include_tasks: icinga_service_template.yml
when: icinga_service_templates is defined
tags: service_template
-- name: icinga service_apply configuration
- include_tasks: icinga_service_apply.yml
+- name: Icinga service_apply configuration
+ ansible.builtin.include_tasks: icinga_service_apply.yml
when: icinga_service_applies is defined
tags: service_apply
-- name: icinga servicegroup configuration
- include_tasks: icinga_servicegroup.yml
+- name: Icinga servicegroup configuration
+ ansible.builtin.include_tasks: icinga_servicegroup.yml
when: icinga_servicegroups is defined
tags: servicegroup
-- name: icinga service configuration
- include_tasks: icinga_service.yml
+- name: Icinga service configuration
+ ansible.builtin.include_tasks: icinga_service.yml
when: icinga_services is defined
tags: service
-- name: icinga serviceset configuration
- include_tasks: icinga_serviceset.yml
+- name: Icinga serviceset configuration
+ ansible.builtin.include_tasks: icinga_serviceset.yml
when: icinga_servicesets is defined
tags: serviceset
-- name: icinga notification template configuration
- include_tasks: icinga_notification_template.yml
+- name: Icinga notification template configuration
+ ansible.builtin.include_tasks: icinga_notification_template.yml
when: icinga_notification_templates is defined
tags: notification_template
-- name: icinga notification configuration
- include_tasks: icinga_notification.yml
+- name: Icinga notification configuration
+ ansible.builtin.include_tasks: icinga_notification.yml
when: icinga_notifications is defined
tags: notification
-- name: icinga downtime configuration
- include_tasks: icinga_scheduled_downtime.yml
+- name: Icinga downtime configuration
+ ansible.builtin.include_tasks: icinga_scheduled_downtime.yml
when: icinga_scheduled_downtimes is defined
tags: downtime
diff --git a/ansible_collections/theforeman/foreman/CHANGELOG.rst b/ansible_collections/theforeman/foreman/CHANGELOG.rst
index 58d65c559..25b132caa 100644
--- a/ansible_collections/theforeman/foreman/CHANGELOG.rst
+++ b/ansible_collections/theforeman/foreman/CHANGELOG.rst
@@ -6,6 +6,26 @@ theforeman.foreman Release Notes
This changelog describes changes after version 0.8.1.
+v4.0.0
+======
+
+Breaking Changes / Porting Guide
+--------------------------------
+
+- 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
+
+Bugfixes
+--------
+
+- compute_profile, host - refer to VMware storage pods by name, not id (https://github.com/theforeman/foreman-ansible-modules/issues/1247)
+
+New Modules
+-----------
+
+- theforeman.foreman.registration_command - Manage Registration Command
+- theforeman.foreman.webhook - Manage Webhooks
+
v3.15.0
=======
diff --git a/ansible_collections/theforeman/foreman/FILES.json b/ansible_collections/theforeman/foreman/FILES.json
index 775229705..d37543c8a 100644
--- a/ansible_collections/theforeman/foreman/FILES.json
+++ b/ansible_collections/theforeman/foreman/FILES.json
@@ -8,1858 +8,1893 @@
"format": 1
},
{
- "name": "LICENSE",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "963392e038d7bea128e55cc67dd691c204593db3527060667f0c82f0f0a1be64",
+ "name": "plugins",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "bindep.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cb8ebfabb5af39c85d0d8eb9b734531aa2bf2ec44cfe4697810d517388fd9555",
+ "name": "plugins/module_utils",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "README.md",
+ "name": "plugins/module_utils/_apypie.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6c08cf02531740e0df89dd704e2df586be73da25627a971d130e45b27479daad",
+ "chksum_sha256": "4419043305a4ed0c322753c067bb2abd3507b2a0b2eb470177cad6b20721287c",
"format": 1
},
{
- "name": "requirements.txt",
+ "name": "plugins/module_utils/_version.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "876da4d933e6561c29737e2b9fa47f2df0b309c3ee1dba11d400ba443630cf2f",
+ "chksum_sha256": "ae6c984a7e9dd51753ea7fcb5995d5655016dd5dc187cd9be7216ef7045f220b",
"format": 1
},
{
- "name": "pytest.ini",
+ "name": "plugins/module_utils/foreman_helper.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "69a39269b44c901a8446ab23e8ec347004f2245115cd4542852f35a454de97de",
+ "chksum_sha256": "dca8e97c6f76128b9bb4d579f24bfda20f6d67d6dff790babdad6dd78c5e45dc",
"format": 1
},
{
- "name": "Makefile",
+ "name": "plugins/doc_fragments",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "plugins/doc_fragments/foreman.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "56a159e8167995c547f178c1964e82dee815962eb81473a809e7582dccf1f2e8",
+ "chksum_sha256": "1b70e2226f5c6cf22de894f34b181f8a8755186292ec67275187e3e5a63c13c0",
"format": 1
},
{
- "name": "changelogs",
+ "name": "plugins/filter",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "changelogs/changelog.yaml",
+ "name": "plugins/filter/foreman.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b5a5c69aed14dc2cd128de0879567f69cdc26cb6cf5c21f8cc51bab9b6a683f5",
+ "chksum_sha256": "0f7c635e75c475f67afd1a19caecee672466d75057f40e91100a7c243beb1e45",
"format": 1
},
{
- "name": "roles",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/filter/cp_label.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5e4e79480ba70ca309052ec11a02dbc386f542363f9fbd9a3d8451e67f071caa",
"format": 1
},
{
- "name": "roles/hostgroups",
+ "name": "plugins/modules",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "roles/hostgroups/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/content_view_filter_rule_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "884822275657260c6c26a06dbdbf931b06d33ad4672c2972e14fa993e20cc210",
"format": 1
},
{
- "name": "roles/hostgroups/tasks/main.yml",
+ "name": "plugins/modules/host_errata_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0e87f3fb8779838ee7bda9cf72a27099f1abbb16160e45ca062cb42dc25a0de4",
+ "chksum_sha256": "5f5d4d6d6fce0e7bb4adbbb404eaaca5190709f419a82841aa330aeeb3f0e4d2",
"format": 1
},
{
- "name": "roles/hostgroups/README.md",
+ "name": "plugins/modules/role.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b1dbb83dbc077b1defddeada36dbf723280d59a464d84cbd97cc2da8a260800f",
+ "chksum_sha256": "00414395f4d86fc05078a56801435087334719ce25d8e4f1676ffd0a31cd1ef0",
"format": 1
},
{
- "name": "roles/manifest",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/job_template.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5ec7b280d834a0c4a38ad7bb2345b9e0e97476e773f0c29a3b49f603e0efcfae",
"format": 1
},
{
- "name": "roles/manifest/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/product.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "dcdf036813dfaceb35272d76574cb3ebc4c10840a83cf3ad07c5e1ffe2326bdc",
"format": 1
},
{
- "name": "roles/manifest/tasks/main.yml",
+ "name": "plugins/modules/global_parameter.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1c150072c0e56de63621695dd107dc5cf6d4855dbbc3ebbcf41b142c2726b1a1",
+ "chksum_sha256": "0dc94762c660dc3773b51171d332a8cecef448e2f07868828ba532b4d8922782",
"format": 1
},
{
- "name": "roles/manifest/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/location.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e6ed594e81190b017530d67a24c89ba7fa1b715d50db1a3b23219511683af806",
"format": 1
},
{
- "name": "roles/manifest/defaults/main.yml",
+ "name": "plugins/modules/hostgroup_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "83e030118cf5fee3dc34d1edd51f81f2af0065ced604a2cd115f87dbaa9bc001",
+ "chksum_sha256": "aa7ec220d077088bc1488c69524b49b7b18e682485a776787712d85b8995e68d",
"format": 1
},
{
- "name": "roles/manifest/README.md",
+ "name": "plugins/modules/subnet.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "45c44d2263a5174408ccc1e22fbfbef7079db5918112c2bb8ac6ecd766469cd2",
+ "chksum_sha256": "3f77f36fd227950601a79f7902dad37e6c28ddbb8c4272738b0bc83aa42dfc3c",
"format": 1
},
{
- "name": "roles/operatingsystems",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/scc_account.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6f14b325fad9499fada3a2021493097e29cda439af8ba62ca3fadaf43d9d575d",
"format": 1
},
{
- "name": "roles/operatingsystems/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/bookmark.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "76c52fe346b5b20ef4997b3f816d2b996c1c5a4f8cee7f73cb90c97fe0adc820",
"format": 1
},
{
- "name": "roles/operatingsystems/tasks/main.yml",
+ "name": "plugins/modules/scap_tailoring_file.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "86c7942b104ce2220f60227fba62cc674dc53f330cf4f83af91f746c9a79993a",
+ "chksum_sha256": "8e0a89ec41681f48f104cccac1a22caf9f9267274ed99b1a441638718a445ae2",
"format": 1
},
{
- "name": "roles/operatingsystems/README.md",
+ "name": "plugins/modules/architecture.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c9e99a91e985fc53fd2e96f8f6e60cc6350614c5c704b315e73c804c03d4c38f",
+ "chksum_sha256": "26759610a81cb370d14544f34b5743a3d192f281da41ce0b44c4d9b43adc9570",
"format": 1
},
{
- "name": "roles/auth_sources_ldap",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/resource_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "dad6d110f034475244a03be83942b4347a8abd7223b24a31c2aaf8078b170dd7",
"format": 1
},
{
- "name": "roles/auth_sources_ldap/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/repository.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f117d868eb7a6a4b22a511f0a2cda214c6b1095b4239fbd354baa0da5eca48d9",
"format": 1
},
{
- "name": "roles/auth_sources_ldap/tasks/main.yml",
+ "name": "plugins/modules/content_view_version_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c9298c4dabcc6542abe17c5f145005f4e56f5eb965a7a945fba31254bfceb1cd",
+ "chksum_sha256": "4ffb312ffa1b891a940da677e20ac8eb5aa9b97e225bb1ce463468b13df358fd",
"format": 1
},
{
- "name": "roles/auth_sources_ldap/README.md",
+ "name": "plugins/modules/smart_class_parameter_override_value.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9a9aab79034c8f45559e86990492010858ff7f1d57b28eb6ffbd8ba3a648b22d",
+ "chksum_sha256": "a4908f334abadcd2c71d8b9cff1c207e14048ebb8fe9d400c1e055b2a0b5bd7b",
"format": 1
},
{
- "name": "roles/locations",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/domain_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e76723994c1b38aa4c9be56feef37fb9b2fa44982dcd9dea7dc790a501014ca4",
"format": 1
},
{
- "name": "roles/locations/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/content_credential.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1dae90a2a315f4baa70bc07725d2fb379e8fd6c8567b83863638bef80cf0f9c7",
"format": 1
},
{
- "name": "roles/locations/tasks/main.yml",
+ "name": "plugins/modules/organization.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f5d0c507b637aec4cd57e49941462b38c17ec130ac98baab4c811668ff9bf0cc",
+ "chksum_sha256": "5b2db55128c097773cde502b43d77f5d938ff7bc6c8ea9b1c82207ae125c3cf8",
"format": 1
},
{
- "name": "roles/locations/README.md",
+ "name": "plugins/modules/host_power.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "00353c7f47e1530b14c4c3f5034bdbb48fe319c7a14d332b5e853b6ee93f7a8c",
+ "chksum_sha256": "c3a1e191165d94b708546db6a3b0a5a38362d757158da64fe72406b5e151085e",
"format": 1
},
{
- "name": "roles/settings",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/subscription_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e1f49873856698bef0163c38496ef7f91abcbcdb3f0b347dfb0616a1c52d33a7",
"format": 1
},
{
- "name": "roles/settings/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/host_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3e88c7d2c3b365d55c98f182ac3fe2d79727235c68d39ae8d5cccd9719421577",
"format": 1
},
{
- "name": "roles/settings/tasks/main.yml",
+ "name": "plugins/modules/status_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5c7b62f0302510d3ce43ea04f7be81c55c413c091ce325f12026294206954299",
+ "chksum_sha256": "b40d8c6a67c098fefcc47b37add57e107033205b56cd5a0cc53fcbdce8bd74b5",
"format": 1
},
{
- "name": "roles/settings/README.md",
+ "name": "plugins/modules/sync_plan.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "25d68c67603e37dbebd6b9e8fdec716c37e824fb411bfea020daba8f670a6a4b",
+ "chksum_sha256": "d7a5ca9d2e951ee698f8f84ee1f4f24fec2afc3eabc31b3af97856d0f13797b8",
"format": 1
},
{
- "name": "roles/compute_resources",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/hostgroup.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "87e72b29a6580d711b09de080c5b9a7020d3cb33481927226d45b6049ed530dd",
"format": 1
},
{
- "name": "roles/compute_resources/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/realm.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e5087b0c705cf6a608aecea02e5ea0dee9b9c2e139b755199b488898eea13abc",
"format": 1
},
{
- "name": "roles/compute_resources/tasks/main.yml",
+ "name": "plugins/modules/content_view_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4f54026ad094dac68d392f7477882f14d7e8a1251825d03c9117ceaad0bbffa",
+ "chksum_sha256": "0b6e98c8531a0e57c19d2d3dcdbf3073097a622b205fd124cff6f8090f65f3dd",
"format": 1
},
{
- "name": "roles/compute_resources/README.md",
+ "name": "plugins/modules/templates_import.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "54a520be744c2118cc7f69f5896471405eff341643d720e7763222780bb3d3b5",
+ "chksum_sha256": "beefe119aa104259ed0360ed22ac50d65456c439aa3d81fc368283ea806eb674",
"format": 1
},
{
- "name": "roles/organizations",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/job_invocation.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c150073f233f902cb528c8ffd4350a5249c7c835fbbb04759a91e1d2e3429371",
"format": 1
},
{
- "name": "roles/organizations/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/smart_class_parameter.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "331fc5604a6f667570c3cecd515926a8a8bc8b0b1b6c631e05532c23db7cb20a",
"format": 1
},
{
- "name": "roles/organizations/tasks/main.yml",
+ "name": "plugins/modules/operatingsystem.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "347f34339265f78143eb5231c81ca2e9f6a2ddd0a7e8bf9d2fed45f1c41c57aa",
+ "chksum_sha256": "dd74232a517741fa91adefc4a86bf088cb0bb55f4ce9174c80aaa59bfa8f20d3",
"format": 1
},
{
- "name": "roles/organizations/README.md",
+ "name": "plugins/modules/content_view_filter.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "393d314de7464e85c24a1e55fb2a256d9a6c5d5d8c4e56cd82d7090bca37c8d4",
+ "chksum_sha256": "f15d110363e83ae2a99dd69fa58f3a58115d0c7d13cb121505fc22b44e846e8e",
"format": 1
},
{
- "name": "roles/activation_keys",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/redhat_manifest.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c959826d2b00490d4e9401b80ee23266a672b577534d08a841805597d768e7dd",
"format": 1
},
{
- "name": "roles/activation_keys/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/image.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "31c0530b167b41e9a8bf3706a327fafda17b85bdeef5f3e394b3f4c469ca5d2c",
"format": 1
},
{
- "name": "roles/activation_keys/tasks/main.yml",
+ "name": "plugins/modules/hardware_model.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "74197f72ced5b8dc133ef35ebffb8ad2e282eb62cd59444b322c1dc6bd85a4a5",
+ "chksum_sha256": "db598a957fa07c32cb6ea465f79444a5d103de4c16b4eda575e2981359fc02d9",
"format": 1
},
{
- "name": "roles/activation_keys/README.md",
+ "name": "plugins/modules/domain.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bc661135c89fbe8c9bfa0a2e254cb6956d863788a5e7174fb43f4043db7572f9",
+ "chksum_sha256": "6643d6b0fabfcfea13112df106a494e9d97f4989b0cad629b828b3373d65642b",
"format": 1
},
{
- "name": "roles/provisioning_templates",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/provisioning_template.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f0fc9adb5bda8bd3ce8c6faee0ca8bdce3d75a950788e04a42cbb0bc581688b5",
"format": 1
},
{
- "name": "roles/provisioning_templates/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/scc_product.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "130323975b926aec4193cb2e88a64ac2131e3f63b124b568ec1606a7e712877a",
"format": 1
},
{
- "name": "roles/provisioning_templates/tasks/main.yml",
+ "name": "plugins/modules/external_usergroup.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1bf4a18fcb051009a48fcc3e13f8a27c04918998fad85772909c74ba861f4935",
+ "chksum_sha256": "ba031c1ca976233e64c54572c54c70350e5f1a7b3ecc93028e0eb191b3594696",
"format": 1
},
{
- "name": "roles/provisioning_templates/README.md",
+ "name": "plugins/modules/smart_proxy.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cd580b020e7ddb2c1254d245a5ac52e89d11b1153e695842a1e7da3626279fcd",
+ "chksum_sha256": "8bf3bd8b91b48b0cf0830fbe6711db02d5a9b98c2de7c0c7179dee4bad743071",
"format": 1
},
{
- "name": "roles/subnets",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/compute_attribute.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "251360fdd219f87cd4947fe4d4f6e5600bfa8082ba31399451bd84d60406298e",
"format": 1
},
{
- "name": "roles/subnets/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/auth_source_ldap.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "eddbf6fb90fb1c704d034328282a77885f56353c85684b81687fc05d3350f28b",
"format": 1
},
{
- "name": "roles/subnets/tasks/main.yml",
+ "name": "plugins/modules/repository_sync.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ddc3f6b6f12242c8fdc7dba58b9138266bcadb554407198de9f97a4c3f69150c",
+ "chksum_sha256": "37432a3e69a0a6f21b7a9d747404c217b86c678614ac5b722037a63ee42ef2f8",
"format": 1
},
{
- "name": "roles/subnets/README.md",
+ "name": "plugins/modules/content_export_repository.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f2394e89001dd0c9973f16a80d5a00c2cef8f004130794ed15d47ff4d1f7e71d",
+ "chksum_sha256": "f46fbea8f1a9cfa3d4d4a262722496bd7da843fd5655dbd1761aff7797cbd42a",
"format": 1
},
{
- "name": "roles/content_credentials",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/webhook.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f1dcb4de76e53d08bb36c7087b5050d1d87c51fb90d628ec747c2ddef1d5fe0a",
"format": 1
},
{
- "name": "roles/content_credentials/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/wait_for_task.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6614dc263688a96dbdb8bb075eedc903540a88b43820a44b50700064ec7eb007",
"format": 1
},
{
- "name": "roles/content_credentials/tasks/main.yml",
+ "name": "plugins/modules/compute_resource.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3b41369e665ddeaf4664e27ab4a0c1de3cf5720e4d4dbf0561348332097098bd",
+ "chksum_sha256": "17ab15edf2a21402a7feff587008e89217eca51a7c1dab383431a13da04cf865",
"format": 1
},
{
- "name": "roles/content_credentials/README.md",
+ "name": "plugins/modules/discovery_rule.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "059d2e2f0643f57d6d2b1eb863a3340cccf14444b3ea3140d03de7f944feef8d",
+ "chksum_sha256": "af2048c208c15f29479227e6a6f0d64e03e87f60e7d2da84e4e4d698fe47c209",
"format": 1
},
{
- "name": "roles/content_view_publish",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/http_proxy.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "13b975a68903297ef6085beea7aca5290ddb3fef700ada3f94213b605bf6387f",
"format": 1
},
{
- "name": "roles/content_view_publish/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/activation_key.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6f2e7f3e4e04a2d5883eff9b252ca70018005bbb3e4a5fd66238022f7ab78de6",
"format": 1
},
{
- "name": "roles/content_view_publish/tasks/main.yml",
+ "name": "plugins/modules/content_view_filter_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c1d03af07ec3a2e948e43eee8df4ce53607b4636f7a1b66ec383c762a8bc49e8",
+ "chksum_sha256": "7991817116749b9f8432531169879da0ca9973c7017a46664ac3a5bd2d75c83c",
"format": 1
},
{
- "name": "roles/content_view_publish/README.md",
+ "name": "plugins/modules/os_default_template.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3e831a660fb084c2d118270932b741c5742c08f8ee487bd100cba4360b4713f4",
+ "chksum_sha256": "5979a3c2d084c2fa84a8fd86b45ff37e17fff375ecbcf5770901b1fb6f29504f",
"format": 1
},
{
- "name": "roles/convert2rhel",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/subnet_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1adba416abbe6a43e17d2833d22c43d0c58fd350e6f2a337cdfea104d5e49ca9",
"format": 1
},
{
- "name": "roles/convert2rhel/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/installation_medium.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "508344224fd3d2702b919f75ef779b1f8366c72899c39823217bf06ed4c53b3a",
"format": 1
},
{
- "name": "roles/convert2rhel/tasks/content_views.yml",
+ "name": "plugins/modules/lifecycle_environment.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "638e8f94219086b108bd663f221813e76a3800125ce419c5c9ba22b77f6efe0a",
+ "chksum_sha256": "f2c67c928966f90f6893b7c29effe82a97a462191449e74bd84999e05bc40378",
"format": 1
},
{
- "name": "roles/convert2rhel/tasks/host_groups.yml",
+ "name": "plugins/modules/content_upload.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "570c5d3cf0974f3ed9f1cb826cff6d1f30138854dd280826251dac097e0c7262",
+ "chksum_sha256": "3ca817b0d1da05340445e0866bdb57d5bdf73a23ff1c6fec97964151af29915b",
"format": 1
},
{
- "name": "roles/convert2rhel/tasks/products_and_repos.yml",
+ "name": "plugins/modules/subscription_manifest.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "47600f2f10539cc2a33f430d7612bbb42823589ad3fa73ab2c6f285b9712e5c9",
+ "chksum_sha256": "58cf70dcb4c2b2c8074e178ec1db9e25d60a0b19a62bd9ad7da57d56f7fb68b6",
"format": 1
},
{
- "name": "roles/convert2rhel/tasks/sync.yml",
+ "name": "plugins/modules/content_view.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "00f5bfa99074834cadc1ebe00b865e350822200290b65ecbedf14d24d3b42c8a",
+ "chksum_sha256": "3739237f43529d97709d29d38a28e3214cc8a70e05fc3ee346bab7e813408e81",
"format": 1
},
{
- "name": "roles/convert2rhel/tasks/activation_keys.yml",
+ "name": "plugins/modules/host_collection.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "163ea2c9957018ca1a5a3e6f7432e8eaa2ea8fb01cd9ab2937a41541e98f839e",
+ "chksum_sha256": "3394c4154396ac4912c89afed2797e66970d70fed584e4f1849551a44d130f5b",
"format": 1
},
{
- "name": "roles/convert2rhel/tasks/main.yml",
+ "name": "plugins/modules/content_export_library.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b0e149cab94ce9a1c875899f0fde7f914ad029aa39d5a245fb86060e1be5a758",
+ "chksum_sha256": "5d01aee236fb13d9dc0a78bdfb2fb21b621e8411ee9dfbed4896ad27cf7b999b",
"format": 1
},
{
- "name": "roles/convert2rhel/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/user.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ea242fcda609bb454e670acd84ee4c353284ccc743f23b53deb1b3c2ce8368f4",
"format": 1
},
{
- "name": "roles/convert2rhel/defaults/main.yml",
+ "name": "plugins/modules/scap_content.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6ee967f34631ee234d08cff740ff3a3adc6d6907dc07962803d6187cf131eca6",
+ "chksum_sha256": "ccb415652f59e34cf1f9fe4a4b0844c0d0503fb655239ed133f52c84dbda9ce3",
"format": 1
},
{
- "name": "roles/convert2rhel/README.md",
+ "name": "plugins/modules/config_group.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cade55a44d7594626a8ac42d951ff0a262346cbc237fe6bcd86b30af3d2a5efc",
+ "chksum_sha256": "3da0833b6177a7a9b6c4c8a84db5a7209ea3c586a9e7b86c0a592a447108079e",
"format": 1
},
{
- "name": "roles/domains",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/partition_table.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "27b4aa56b0d1925e9f50c92f71653465665df86798122f60f30f8094229224bb",
"format": 1
},
{
- "name": "roles/domains/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/puppet_environment.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d0dc12829c3bacfefc8a85d43c875c912058cb422742d0f2dcab064d8c9a5557",
"format": 1
},
{
- "name": "roles/domains/tasks/main.yml",
+ "name": "plugins/modules/snapshot_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "adb39457f78b266cd70c34d969e0730e76f9d5f68030defdcb1c03078517bad0",
+ "chksum_sha256": "dc9071e8b899cf9c805c16acebcc2114490f9c8c4da0c1fc318db5996fdc1622",
"format": 1
},
{
- "name": "roles/domains/README.md",
+ "name": "plugins/modules/repository_set_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bf11fbb2e9ed848b8eaeca539c1e1657ee906fc5b8bd0a53c082faeef525d106",
+ "chksum_sha256": "21112984964503599daee1f8629dee78f29f3c4a4a60228e62c20ba6dbb8be28",
"format": 1
},
{
- "name": "roles/repositories",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/compute_profile.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "10f056f39ed143c484f563032c7e00d4d724b94dfc1947d5d7560d50a2679a65",
"format": 1
},
{
- "name": "roles/repositories/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/content_view_filter_rule.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3fcd5d0ff04a74e550bd497242bb793078ca0b5ffaa5242e6cf76bf9efd6477b",
"format": 1
},
{
- "name": "roles/repositories/tasks/main.yml",
+ "name": "plugins/modules/usergroup.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c695befedf280e88560156b84bf0114f42631e5680265b229e67a7bbc8342e67",
+ "chksum_sha256": "83e9dc2df49e216fbb488f8da6bfac2da538843f96e4b0e7294cfd5ba86ae9d2",
"format": 1
},
{
- "name": "roles/repositories/README.md",
+ "name": "plugins/modules/snapshot.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be05dcd7118311ead8908c6ba07ca31aee08ec6690ad5478ce09dd9f14d4b7f8",
+ "chksum_sha256": "abd29b85284655aedd32995de020b0c6e33cb3dc600dfef3c627f93cd5e8c96f",
"format": 1
},
{
- "name": "roles/compute_profiles",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/repository_set.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e8468f2a452fe545438ddbbc3103399c36fbe1f687b3a4bd5edbce64b1b49104",
"format": 1
},
{
- "name": "roles/compute_profiles/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/content_export_version.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9e193703cbf6a0e139f54dbe9a1cc5a8ef0f3894821fd05ffbe764f1133793d9",
"format": 1
},
{
- "name": "roles/compute_profiles/tasks/main.yml",
+ "name": "plugins/modules/content_view_version.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b9889cf57d104750cd021cd4f40d3194b0e478e70534051ba66c3f5ad282fed8",
+ "chksum_sha256": "a046eb6c0a5ddbeff0a8db01921f9ecd5c4cc6f17e2577e62ee64390b2e15354",
"format": 1
},
{
- "name": "roles/compute_profiles/README.md",
+ "name": "plugins/modules/setting_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "34ef57bf69ec6198878f4983cc6bac8d603895562acf97cf84d1fc2a165d735b",
+ "chksum_sha256": "b4047c5726aeafc9324757637c68123b119e50b49bd2f52dae756b06b3e228d7",
"format": 1
},
{
- "name": "roles/content_rhel",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/host.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1b01142c3e860b0e3af7311202c9b08f05543e831168a2342cb067a7f2e6771f",
"format": 1
},
{
- "name": "roles/content_rhel/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/puppetclasses_import.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "50f3eeba0b859372a9a97c373af0bd2c5b183dc1f3994f7cd65f3c681b369943",
"format": 1
},
{
- "name": "roles/content_rhel/tasks/main.yml",
+ "name": "plugins/modules/registration_command.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c87b4c0c004d4d95748d48e45e21dfdb3aab0b6ab8426e3a3bb72260ff8d777c",
+ "chksum_sha256": "996a213a0bbc3d3bf8cdf83bac8edabbfdc913d297831b71e36876875c4b02d1",
"format": 1
},
{
- "name": "roles/content_rhel/defaults",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/setting.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6f1503bcde00bc2b001abf0f882c43dc29dcc7fb37260dd7e6902f01559e83cf",
"format": 1
},
{
- "name": "roles/content_rhel/defaults/main.yml",
+ "name": "plugins/modules/organization_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b0c0296be090b81fefb1f429c35f6bcc05dec65e4ae1d4df6cd610984d4d3338",
+ "chksum_sha256": "9eae7478eb274de31e6761e986cc1cdd29aa921692fef4a9460aee652bebb75d",
"format": 1
},
{
- "name": "roles/content_rhel/README.md",
+ "name": "plugins/modules/content_export_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "94aef714e0436676fb443e32d4ae75022be2ed827cda125deddf12232f38f809",
+ "chksum_sha256": "bf84524f3cfaa6ae2e6cf565ac24be8a188fdc42d55f8afd87de59a38c9fcd1a",
"format": 1
},
{
- "name": "roles/sync_plans",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "plugins/modules/repository_info.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e5ca340d4152e75be0fbcf5de32af7ec880115ab74077f66aa6a0a7f08e07a0f",
"format": 1
},
{
- "name": "roles/sync_plans/tasks",
+ "name": "plugins/inventory",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "roles/sync_plans/tasks/main.yml",
+ "name": "plugins/inventory/foreman.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a441f205359bbfa5288eac4e320703b8c2e98f53cf5e89cf2fcc434a989b872d",
+ "chksum_sha256": "4d900987e81b4e56605e9a3a162f07a191705508105c50dccbcbc35c4e54f4f9",
"format": 1
},
{
- "name": "roles/sync_plans/README.md",
+ "name": "plugins/callback",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "plugins/callback/foreman.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "35f169e7b198c6b81cc531b172e875a3bc134c25c92998a7c5c9b7ceac49bb88",
+ "chksum_sha256": "1155c0e0a689c1e8155ee90664832824fbb0153d82f3beec1d01280051b1152e",
"format": 1
},
{
- "name": "roles/lifecycle_environments",
+ "name": "meta",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "roles/lifecycle_environments/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "meta/runtime.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "45ead0d9837b02dd9490f6dd5c461e5cf45dafa655183eddbd3e20fd5ac449b0",
"format": 1
},
{
- "name": "roles/lifecycle_environments/tasks/main.yml",
+ "name": "meta/execution-environment.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fbd804133fa4fc8531ef27b38cad3f7d84acfa9084fd50bfd9e4f39aa6e0c9c9",
+ "chksum_sha256": "4ec43cfd0807568d41118d24ab243243ad74d8bd638f941ff671262c6f8d9293",
"format": 1
},
{
- "name": "roles/lifecycle_environments/README.md",
+ "name": "CHANGELOG.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "93c2e33f4ef0ba798644cc183889fed37e8cb8e925bcecf935204ed039053473",
+ "chksum_sha256": "24bd3f906f4204cc16812c56fa3524a0c1f8a0d1d051e1f0e8c422138729949d",
"format": 1
},
{
- "name": "roles/content_views",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "Makefile",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "56a159e8167995c547f178c1964e82dee815962eb81473a809e7582dccf1f2e8",
"format": 1
},
{
- "name": "roles/content_views/tasks",
+ "name": "changelogs",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "roles/content_views/tasks/main.yml",
+ "name": "changelogs/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f181cc61783d9bacaf2df98c9bf3da65847c16db6ecdb5da4c2423209666f670",
+ "chksum_sha256": "5565e2400a6109f2196b710a72f8515acbeedd4c7e96292b2c8f4a4d0c9c9ac6",
"format": 1
},
{
- "name": "roles/content_views/tasks/_create_content_view.yml",
+ "name": "PSF-license.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "927ca6de3a5e1b4bb17e14ff23e12b7239db6f0ccca8434cff2c88447d75a07f",
+ "chksum_sha256": "83b042fc7d6aca0f10d68e45efa56b9bc0a1496608e7e7728fe09d1a534a054a",
"format": 1
},
{
- "name": "roles/content_views/README.md",
+ "name": "bindep.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "88a78860dd279510249e85244f036735a0611ddf9460339f9681d58310a65eed",
+ "chksum_sha256": "cb8ebfabb5af39c85d0d8eb9b734531aa2bf2ec44cfe4697810d517388fd9555",
"format": 1
},
{
- "name": "roles/content_view_version_cleanup",
+ "name": "LICENSE",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "963392e038d7bea128e55cc67dd691c204593db3527060667f0c82f0f0a1be64",
+ "format": 1
+ },
+ {
+ "name": "roles",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "roles/content_view_version_cleanup/tasks",
+ "name": "roles/convert2rhel",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "roles/content_view_version_cleanup/tasks/find_and_delete_unused_cv_versions.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9253f728597e4df60ffe678b0333396fd1fcbc39a58dffd6487c6cb6a37da84d",
+ "name": "roles/convert2rhel/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "roles/content_view_version_cleanup/tasks/delete_cv_versions.yml",
+ "name": "roles/convert2rhel/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d628d6a8568b0bde9b2bdeb33045b6470468af49bc1814376e9f564cbe8f109d",
+ "chksum_sha256": "b0e149cab94ce9a1c875899f0fde7f914ad029aa39d5a245fb86060e1be5a758",
"format": 1
},
{
- "name": "roles/content_view_version_cleanup/tasks/main.yml",
+ "name": "roles/convert2rhel/tasks/activation_keys.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3dba63b0c9ddef41d0dfb7b7b990adced774ef6c392f754a7bf5d41121e1c1ab",
+ "chksum_sha256": "163ea2c9957018ca1a5a3e6f7432e8eaa2ea8fb01cd9ab2937a41541e98f839e",
"format": 1
},
{
- "name": "roles/content_view_version_cleanup/README.md",
+ "name": "roles/convert2rhel/tasks/sync.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4a74b7408c7c30c51661ad76d17be1548a4f3640a6bbe5441e4b8521c1ba9994",
+ "chksum_sha256": "00f5bfa99074834cadc1ebe00b865e350822200290b65ecbedf14d24d3b42c8a",
"format": 1
},
{
- "name": "meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "roles/convert2rhel/tasks/host_groups.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "570c5d3cf0974f3ed9f1cb826cff6d1f30138854dd280826251dac097e0c7262",
"format": 1
},
{
- "name": "meta/execution-environment.yml",
+ "name": "roles/convert2rhel/tasks/content_views.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4ec43cfd0807568d41118d24ab243243ad74d8bd638f941ff671262c6f8d9293",
+ "chksum_sha256": "638e8f94219086b108bd663f221813e76a3800125ce419c5c9ba22b77f6efe0a",
"format": 1
},
{
- "name": "meta/runtime.yml",
+ "name": "roles/convert2rhel/tasks/products_and_repos.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8184fc79340e1ad12078f075eaa5ca57aad1be9148d2325a3f172ff546ce820f",
+ "chksum_sha256": "47600f2f10539cc2a33f430d7612bbb42823589ad3fa73ab2c6f285b9712e5c9",
"format": 1
},
{
- "name": "CHANGELOG.rst",
+ "name": "roles/convert2rhel/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/convert2rhel/defaults/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "52ffb913ec190b597c11759d548aa3772c13b91c702f363700ba7aebe02139ad",
+ "chksum_sha256": "6ee967f34631ee234d08cff740ff3a3adc6d6907dc07962803d6187cf131eca6",
"format": 1
},
{
- "name": "PSF-license.txt",
+ "name": "roles/convert2rhel/README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "83b042fc7d6aca0f10d68e45efa56b9bc0a1496608e7e7728fe09d1a534a054a",
+ "chksum_sha256": "cade55a44d7594626a8ac42d951ff0a262346cbc237fe6bcd86b30af3d2a5efc",
"format": 1
},
{
- "name": "plugins",
+ "name": "roles/content_view_version_cleanup",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules",
+ "name": "roles/content_view_version_cleanup/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/content_export_info.py",
+ "name": "roles/content_view_version_cleanup/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bf84524f3cfaa6ae2e6cf565ac24be8a188fdc42d55f8afd87de59a38c9fcd1a",
+ "chksum_sha256": "3dba63b0c9ddef41d0dfb7b7b990adced774ef6c392f754a7bf5d41121e1c1ab",
"format": 1
},
{
- "name": "plugins/modules/host_collection.py",
+ "name": "roles/content_view_version_cleanup/tasks/delete_cv_versions.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3394c4154396ac4912c89afed2797e66970d70fed584e4f1849551a44d130f5b",
+ "chksum_sha256": "d628d6a8568b0bde9b2bdeb33045b6470468af49bc1814376e9f564cbe8f109d",
"format": 1
},
{
- "name": "plugins/modules/installation_medium.py",
+ "name": "roles/content_view_version_cleanup/tasks/find_and_delete_unused_cv_versions.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "508344224fd3d2702b919f75ef779b1f8366c72899c39823217bf06ed4c53b3a",
+ "chksum_sha256": "9253f728597e4df60ffe678b0333396fd1fcbc39a58dffd6487c6cb6a37da84d",
"format": 1
},
{
- "name": "plugins/modules/repository_sync.py",
+ "name": "roles/content_view_version_cleanup/README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "37432a3e69a0a6f21b7a9d747404c217b86c678614ac5b722037a63ee42ef2f8",
+ "chksum_sha256": "4a74b7408c7c30c51661ad76d17be1548a4f3640a6bbe5441e4b8521c1ba9994",
"format": 1
},
{
- "name": "plugins/modules/subnet_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1adba416abbe6a43e17d2833d22c43d0c58fd350e6f2a337cdfea104d5e49ca9",
+ "name": "roles/operatingsystems",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/activation_key.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6f2e7f3e4e04a2d5883eff9b252ca70018005bbb3e4a5fd66238022f7ab78de6",
+ "name": "roles/operatingsystems/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/host_errata_info.py",
+ "name": "roles/operatingsystems/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5f5d4d6d6fce0e7bb4adbbb404eaaca5190709f419a82841aa330aeeb3f0e4d2",
+ "chksum_sha256": "86c7942b104ce2220f60227fba62cc674dc53f330cf4f83af91f746c9a79993a",
"format": 1
},
{
- "name": "plugins/modules/config_group.py",
+ "name": "roles/operatingsystems/README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3da0833b6177a7a9b6c4c8a84db5a7209ea3c586a9e7b86c0a592a447108079e",
+ "chksum_sha256": "c9e99a91e985fc53fd2e96f8f6e60cc6350614c5c704b315e73c804c03d4c38f",
"format": 1
},
{
- "name": "plugins/modules/content_credential.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1dae90a2a315f4baa70bc07725d2fb379e8fd6c8567b83863638bef80cf0f9c7",
+ "name": "roles/settings",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/repository_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e5ca340d4152e75be0fbcf5de32af7ec880115ab74077f66aa6a0a7f08e07a0f",
+ "name": "roles/settings/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/organization.py",
+ "name": "roles/settings/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5b2db55128c097773cde502b43d77f5d938ff7bc6c8ea9b1c82207ae125c3cf8",
+ "chksum_sha256": "5c7b62f0302510d3ce43ea04f7be81c55c413c091ce325f12026294206954299",
"format": 1
},
{
- "name": "plugins/modules/hardware_model.py",
+ "name": "roles/settings/README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "db598a957fa07c32cb6ea465f79444a5d103de4c16b4eda575e2981359fc02d9",
+ "chksum_sha256": "25d68c67603e37dbebd6b9e8fdec716c37e824fb411bfea020daba8f670a6a4b",
"format": 1
},
{
- "name": "plugins/modules/compute_profile.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7e75573a41a0ec7b1fd13d4e9763c17732a18ad5c4dd3124d0b3aa8ab44b6834",
+ "name": "roles/compute_resources",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/snapshot_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "dc9071e8b899cf9c805c16acebcc2114490f9c8c4da0c1fc318db5996fdc1622",
+ "name": "roles/compute_resources/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/setting_info.py",
+ "name": "roles/compute_resources/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b4047c5726aeafc9324757637c68123b119e50b49bd2f52dae756b06b3e228d7",
+ "chksum_sha256": "a4f54026ad094dac68d392f7477882f14d7e8a1251825d03c9117ceaad0bbffa",
"format": 1
},
{
- "name": "plugins/modules/repository_set.py",
+ "name": "roles/compute_resources/README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e8468f2a452fe545438ddbbc3103399c36fbe1f687b3a4bd5edbce64b1b49104",
+ "chksum_sha256": "54a520be744c2118cc7f69f5896471405eff341643d720e7763222780bb3d3b5",
"format": 1
},
{
- "name": "plugins/modules/templates_import.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "beefe119aa104259ed0360ed22ac50d65456c439aa3d81fc368283ea806eb674",
+ "name": "roles/content_credentials",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/content_view.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3739237f43529d97709d29d38a28e3214cc8a70e05fc3ee346bab7e813408e81",
+ "name": "roles/content_credentials/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/redhat_manifest.py",
+ "name": "roles/content_credentials/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c959826d2b00490d4e9401b80ee23266a672b577534d08a841805597d768e7dd",
+ "chksum_sha256": "bbf68f4a2724f5ba5aee506b3e0b97a8f5966bd6f1ca8acae46aa3b8eee748c2",
"format": 1
},
{
- "name": "plugins/modules/user.py",
+ "name": "roles/content_credentials/README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ea242fcda609bb454e670acd84ee4c353284ccc743f23b53deb1b3c2ce8368f4",
+ "chksum_sha256": "059d2e2f0643f57d6d2b1eb863a3340cccf14444b3ea3140d03de7f944feef8d",
"format": 1
},
{
- "name": "plugins/modules/content_view_filter_rule_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "884822275657260c6c26a06dbdbf931b06d33ad4672c2972e14fa993e20cc210",
+ "name": "roles/hostgroups",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/scap_tailoring_file.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8e0a89ec41681f48f104cccac1a22caf9f9267274ed99b1a441638718a445ae2",
+ "name": "roles/hostgroups/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/organization_info.py",
+ "name": "roles/hostgroups/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9eae7478eb274de31e6761e986cc1cdd29aa921692fef4a9460aee652bebb75d",
+ "chksum_sha256": "c1d79a74d6f01e1a58867b104e87a5e765479de28bbb2019c1952327e2a3e6db",
"format": 1
},
{
- "name": "plugins/modules/realm.py",
+ "name": "roles/hostgroups/README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e5087b0c705cf6a608aecea02e5ea0dee9b9c2e139b755199b488898eea13abc",
+ "chksum_sha256": "b1dbb83dbc077b1defddeada36dbf723280d59a464d84cbd97cc2da8a260800f",
"format": 1
},
{
- "name": "plugins/modules/repository.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f117d868eb7a6a4b22a511f0a2cda214c6b1095b4239fbd354baa0da5eca48d9",
+ "name": "roles/content_view_publish",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/global_parameter.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0dc94762c660dc3773b51171d332a8cecef448e2f07868828ba532b4d8922782",
+ "name": "roles/content_view_publish/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/os_default_template.py",
+ "name": "roles/content_view_publish/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5979a3c2d084c2fa84a8fd86b45ff37e17fff375ecbcf5770901b1fb6f29504f",
+ "chksum_sha256": "dbcf4c7de2ae05af25bba1e8477508200f97f919a1b6118bfa62a089d9af98b9",
"format": 1
},
{
- "name": "plugins/modules/wait_for_task.py",
+ "name": "roles/content_view_publish/README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6614dc263688a96dbdb8bb075eedc903540a88b43820a44b50700064ec7eb007",
+ "chksum_sha256": "3e831a660fb084c2d118270932b741c5742c08f8ee487bd100cba4360b4713f4",
"format": 1
},
{
- "name": "plugins/modules/host_power.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c3a1e191165d94b708546db6a3b0a5a38362d757158da64fe72406b5e151085e",
+ "name": "roles/subnets",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/domain.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6643d6b0fabfcfea13112df106a494e9d97f4989b0cad629b828b3373d65642b",
+ "name": "roles/subnets/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/resource_info.py",
+ "name": "roles/subnets/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dad6d110f034475244a03be83942b4347a8abd7223b24a31c2aaf8078b170dd7",
+ "chksum_sha256": "ddc3f6b6f12242c8fdc7dba58b9138266bcadb554407198de9f97a4c3f69150c",
"format": 1
},
{
- "name": "plugins/modules/compute_resource.py",
+ "name": "roles/subnets/README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "17ab15edf2a21402a7feff587008e89217eca51a7c1dab383431a13da04cf865",
+ "chksum_sha256": "f2394e89001dd0c9973f16a80d5a00c2cef8f004130794ed15d47ff4d1f7e71d",
"format": 1
},
{
- "name": "plugins/modules/content_upload.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3ca817b0d1da05340445e0866bdb57d5bdf73a23ff1c6fec97964151af29915b",
+ "name": "roles/sync_plans",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/subnet.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3f77f36fd227950601a79f7902dad37e6c28ddbb8c4272738b0bc83aa42dfc3c",
+ "name": "roles/sync_plans/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/partition_table.py",
+ "name": "roles/sync_plans/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "36dafbc1ad3fbc567c66da0c774f0f36c26bfbdf4ecfb1482d6bad43f6ea77d6",
+ "chksum_sha256": "a441f205359bbfa5288eac4e320703b8c2e98f53cf5e89cf2fcc434a989b872d",
"format": 1
},
{
- "name": "plugins/modules/discovery_rule.py",
+ "name": "roles/sync_plans/README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "af2048c208c15f29479227e6a6f0d64e03e87f60e7d2da84e4e4d698fe47c209",
+ "chksum_sha256": "35f169e7b198c6b81cc531b172e875a3bc134c25c92998a7c5c9b7ceac49bb88",
"format": 1
},
{
- "name": "plugins/modules/compute_attribute.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "251360fdd219f87cd4947fe4d4f6e5600bfa8082ba31399451bd84d60406298e",
+ "name": "roles/auth_sources_ldap",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/puppet_environment.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d0dc12829c3bacfefc8a85d43c875c912058cb422742d0f2dcab064d8c9a5557",
+ "name": "roles/auth_sources_ldap/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/smart_class_parameter_override_value.py",
+ "name": "roles/auth_sources_ldap/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4908f334abadcd2c71d8b9cff1c207e14048ebb8fe9d400c1e055b2a0b5bd7b",
+ "chksum_sha256": "c9298c4dabcc6542abe17c5f145005f4e56f5eb965a7a945fba31254bfceb1cd",
"format": 1
},
{
- "name": "plugins/modules/snapshot.py",
+ "name": "roles/auth_sources_ldap/README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "abd29b85284655aedd32995de020b0c6e33cb3dc600dfef3c627f93cd5e8c96f",
+ "chksum_sha256": "9a9aab79034c8f45559e86990492010858ff7f1d57b28eb6ffbd8ba3a648b22d",
"format": 1
},
{
- "name": "plugins/modules/smart_proxy.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "8bf3bd8b91b48b0cf0830fbe6711db02d5a9b98c2de7c0c7179dee4bad743071",
+ "name": "roles/repositories",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/provisioning_template.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "58426b877b3844c6d5b162a35860fddac31365d684589c4c98f090c5c7e3748d",
+ "name": "roles/repositories/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/content_view_filter.py",
+ "name": "roles/repositories/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0fbb6d56f85af4e54fd3af0b1b225584576359360a1226b6ec61266f98f1506f",
+ "chksum_sha256": "c695befedf280e88560156b84bf0114f42631e5680265b229e67a7bbc8342e67",
"format": 1
},
{
- "name": "plugins/modules/host_info.py",
+ "name": "roles/repositories/README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3e88c7d2c3b365d55c98f182ac3fe2d79727235c68d39ae8d5cccd9719421577",
+ "chksum_sha256": "be05dcd7118311ead8908c6ba07ca31aee08ec6690ad5478ce09dd9f14d4b7f8",
"format": 1
},
{
- "name": "plugins/modules/subscription_manifest.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "58cf70dcb4c2b2c8074e178ec1db9e25d60a0b19a62bd9ad7da57d56f7fb68b6",
+ "name": "roles/content_rhel",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/usergroup.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "83e9dc2df49e216fbb488f8da6bfac2da538843f96e4b0e7294cfd5ba86ae9d2",
+ "name": "roles/content_rhel/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/scc_product.py",
+ "name": "roles/content_rhel/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "130323975b926aec4193cb2e88a64ac2131e3f63b124b568ec1606a7e712877a",
+ "chksum_sha256": "c87b4c0c004d4d95748d48e45e21dfdb3aab0b6ab8426e3a3bb72260ff8d777c",
"format": 1
},
{
- "name": "plugins/modules/http_proxy.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "13b975a68903297ef6085beea7aca5290ddb3fef700ada3f94213b605bf6387f",
+ "name": "roles/content_rhel/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/smart_class_parameter.py",
+ "name": "roles/content_rhel/defaults/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "331fc5604a6f667570c3cecd515926a8a8bc8b0b1b6c631e05532c23db7cb20a",
+ "chksum_sha256": "b0c0296be090b81fefb1f429c35f6bcc05dec65e4ae1d4df6cd610984d4d3338",
"format": 1
},
{
- "name": "plugins/modules/content_view_filter_rule.py",
+ "name": "roles/content_rhel/README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3fcd5d0ff04a74e550bd497242bb793078ca0b5ffaa5242e6cf76bf9efd6477b",
+ "chksum_sha256": "94aef714e0436676fb443e32d4ae75022be2ed827cda125deddf12232f38f809",
"format": 1
},
{
- "name": "plugins/modules/scc_account.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6f14b325fad9499fada3a2021493097e29cda439af8ba62ca3fadaf43d9d575d",
+ "name": "roles/activation_keys",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/sync_plan.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d7a5ca9d2e951ee698f8f84ee1f4f24fec2afc3eabc31b3af97856d0f13797b8",
+ "name": "roles/activation_keys/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/host.py",
+ "name": "roles/activation_keys/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3a80dbf8c8651bced6745e6995f1b0f5ed41743644520fee4621fadade03e3b6",
+ "chksum_sha256": "74197f72ced5b8dc133ef35ebffb8ad2e282eb62cd59444b322c1dc6bd85a4a5",
"format": 1
},
{
- "name": "plugins/modules/role.py",
+ "name": "roles/activation_keys/README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "00414395f4d86fc05078a56801435087334719ce25d8e4f1676ffd0a31cd1ef0",
+ "chksum_sha256": "bc661135c89fbe8c9bfa0a2e254cb6956d863788a5e7174fb43f4043db7572f9",
"format": 1
},
{
- "name": "plugins/modules/content_export_repository.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f46fbea8f1a9cfa3d4d4a262722496bd7da843fd5655dbd1761aff7797cbd42a",
+ "name": "roles/manifest",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/content_view_filter_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "7991817116749b9f8432531169879da0ca9973c7017a46664ac3a5bd2d75c83c",
+ "name": "roles/manifest/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/status_info.py",
+ "name": "roles/manifest/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b40d8c6a67c098fefcc47b37add57e107033205b56cd5a0cc53fcbdce8bd74b5",
+ "chksum_sha256": "1c150072c0e56de63621695dd107dc5cf6d4855dbbc3ebbcf41b142c2726b1a1",
"format": 1
},
{
- "name": "plugins/modules/setting.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "6f1503bcde00bc2b001abf0f882c43dc29dcc7fb37260dd7e6902f01559e83cf",
+ "name": "roles/manifest/defaults",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/repository_set_info.py",
+ "name": "roles/manifest/defaults/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "21112984964503599daee1f8629dee78f29f3c4a4a60228e62c20ba6dbb8be28",
+ "chksum_sha256": "83e030118cf5fee3dc34d1edd51f81f2af0065ced604a2cd115f87dbaa9bc001",
"format": 1
},
{
- "name": "plugins/modules/job_invocation.py",
+ "name": "roles/manifest/README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c150073f233f902cb528c8ffd4350a5249c7c835fbbb04759a91e1d2e3429371",
+ "chksum_sha256": "45c44d2263a5174408ccc1e22fbfbef7079db5918112c2bb8ac6ecd766469cd2",
"format": 1
},
{
- "name": "plugins/modules/image.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "31c0530b167b41e9a8bf3706a327fafda17b85bdeef5f3e394b3f4c469ca5d2c",
+ "name": "roles/organizations",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/content_export_library.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5d01aee236fb13d9dc0a78bdfb2fb21b621e8411ee9dfbed4896ad27cf7b999b",
+ "name": "roles/organizations/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/content_view_version_info.py",
+ "name": "roles/organizations/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4ffb312ffa1b891a940da677e20ac8eb5aa9b97e225bb1ce463468b13df358fd",
+ "chksum_sha256": "347f34339265f78143eb5231c81ca2e9f6a2ddd0a7e8bf9d2fed45f1c41c57aa",
"format": 1
},
{
- "name": "plugins/modules/job_template.py",
+ "name": "roles/organizations/README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ae58c20b18b21548c131d6fdc02f651cd74c4ca5a9f60b7c70e42e0f5166702e",
+ "chksum_sha256": "393d314de7464e85c24a1e55fb2a256d9a6c5d5d8c4e56cd82d7090bca37c8d4",
"format": 1
},
{
- "name": "plugins/modules/hostgroup.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "87e72b29a6580d711b09de080c5b9a7020d3cb33481927226d45b6049ed530dd",
+ "name": "roles/compute_profiles",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/operatingsystem.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "dd74232a517741fa91adefc4a86bf088cb0bb55f4ce9174c80aaa59bfa8f20d3",
+ "name": "roles/compute_profiles/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/scap_content.py",
+ "name": "roles/compute_profiles/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ccb415652f59e34cf1f9fe4a4b0844c0d0503fb655239ed133f52c84dbda9ce3",
+ "chksum_sha256": "b9889cf57d104750cd021cd4f40d3194b0e478e70534051ba66c3f5ad282fed8",
"format": 1
},
{
- "name": "plugins/modules/domain_info.py",
+ "name": "roles/compute_profiles/README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e76723994c1b38aa4c9be56feef37fb9b2fa44982dcd9dea7dc790a501014ca4",
+ "chksum_sha256": "34ef57bf69ec6198878f4983cc6bac8d603895562acf97cf84d1fc2a165d735b",
"format": 1
},
{
- "name": "plugins/modules/product.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "98d43acf90507636cba40cdfbda5ab844c8904da51e4fde6331f25d8125f03dc",
+ "name": "roles/content_views",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/hostgroup_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "aa7ec220d077088bc1488c69524b49b7b18e682485a776787712d85b8995e68d",
+ "name": "roles/content_views/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/architecture.py",
+ "name": "roles/content_views/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "26759610a81cb370d14544f34b5743a3d192f281da41ce0b44c4d9b43adc9570",
+ "chksum_sha256": "f181cc61783d9bacaf2df98c9bf3da65847c16db6ecdb5da4c2423209666f670",
"format": 1
},
{
- "name": "plugins/modules/puppetclasses_import.py",
+ "name": "roles/content_views/tasks/_create_content_view.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "50f3eeba0b859372a9a97c373af0bd2c5b183dc1f3994f7cd65f3c681b369943",
+ "chksum_sha256": "7e566d3663e3e3fed0d88059bee76a2e834ae72c43ee863c399accb535b48233",
"format": 1
},
{
- "name": "plugins/modules/location.py",
+ "name": "roles/content_views/README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e6ed594e81190b017530d67a24c89ba7fa1b715d50db1a3b23219511683af806",
+ "chksum_sha256": "88a78860dd279510249e85244f036735a0611ddf9460339f9681d58310a65eed",
"format": 1
},
{
- "name": "plugins/modules/auth_source_ldap.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "eddbf6fb90fb1c704d034328282a77885f56353c85684b81687fc05d3350f28b",
+ "name": "roles/locations",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/content_view_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0b6e98c8531a0e57c19d2d3dcdbf3073097a622b205fd124cff6f8090f65f3dd",
+ "name": "roles/locations/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/external_usergroup.py",
+ "name": "roles/locations/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ba031c1ca976233e64c54572c54c70350e5f1a7b3ecc93028e0eb191b3594696",
+ "chksum_sha256": "f5d0c507b637aec4cd57e49941462b38c17ec130ac98baab4c811668ff9bf0cc",
"format": 1
},
{
- "name": "plugins/modules/bookmark.py",
+ "name": "roles/locations/README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "76c52fe346b5b20ef4997b3f816d2b996c1c5a4f8cee7f73cb90c97fe0adc820",
+ "chksum_sha256": "00353c7f47e1530b14c4c3f5034bdbb48fe319c7a14d332b5e853b6ee93f7a8c",
"format": 1
},
{
- "name": "plugins/modules/content_view_version.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "52f3d109e1d4bc793ad5b70c841e278c50f7398db315b724d42615c61bee8f6f",
+ "name": "roles/provisioning_templates",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/subscription_info.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "e1f49873856698bef0163c38496ef7f91abcbcdb3f0b347dfb0616a1c52d33a7",
+ "name": "roles/provisioning_templates/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/modules/lifecycle_environment.py",
+ "name": "roles/provisioning_templates/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f2c67c928966f90f6893b7c29effe82a97a462191449e74bd84999e05bc40378",
+ "chksum_sha256": "1bf4a18fcb051009a48fcc3e13f8a27c04918998fad85772909c74ba861f4935",
"format": 1
},
{
- "name": "plugins/modules/content_export_version.py",
+ "name": "roles/provisioning_templates/README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9e193703cbf6a0e139f54dbe9a1cc5a8ef0f3894821fd05ffbe764f1133793d9",
+ "chksum_sha256": "cd580b020e7ddb2c1254d245a5ac52e89d11b1153e695842a1e7da3626279fcd",
"format": 1
},
{
- "name": "plugins/doc_fragments",
+ "name": "roles/lifecycle_environments",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/doc_fragments/foreman.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1b70e2226f5c6cf22de894f34b181f8a8755186292ec67275187e3e5a63c13c0",
- "format": 1
- },
- {
- "name": "plugins/filter",
+ "name": "roles/lifecycle_environments/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/filter/cp_label.yml",
+ "name": "roles/lifecycle_environments/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5e4e79480ba70ca309052ec11a02dbc386f542363f9fbd9a3d8451e67f071caa",
+ "chksum_sha256": "fbd804133fa4fc8531ef27b38cad3f7d84acfa9084fd50bfd9e4f39aa6e0c9c9",
"format": 1
},
{
- "name": "plugins/filter/foreman.py",
+ "name": "roles/lifecycle_environments/README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0f7c635e75c475f67afd1a19caecee672466d75057f40e91100a7c243beb1e45",
+ "chksum_sha256": "93c2e33f4ef0ba798644cc183889fed37e8cb8e925bcecf935204ed039053473",
"format": 1
},
{
- "name": "plugins/module_utils",
+ "name": "roles/domains",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/module_utils/_version.py",
+ "name": "roles/domains/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "roles/domains/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ae6c984a7e9dd51753ea7fcb5995d5655016dd5dc187cd9be7216ef7045f220b",
+ "chksum_sha256": "adb39457f78b266cd70c34d969e0730e76f9d5f68030defdcb1c03078517bad0",
"format": 1
},
{
- "name": "plugins/module_utils/foreman_helper.py",
+ "name": "roles/domains/README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dca8e97c6f76128b9bb4d579f24bfda20f6d67d6dff790babdad6dd78c5e45dc",
+ "chksum_sha256": "bf11fbb2e9ed848b8eaeca539c1e1657ee906fc5b8bd0a53c082faeef525d106",
"format": 1
},
{
- "name": "plugins/module_utils/_apypie.py",
+ "name": "pytest.ini",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4419043305a4ed0c322753c067bb2abd3507b2a0b2eb470177cad6b20721287c",
+ "chksum_sha256": "69a39269b44c901a8446ab23e8ec347004f2245115cd4542852f35a454de97de",
"format": 1
},
{
- "name": "plugins/inventory",
+ "name": "README.md",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6c08cf02531740e0df89dd704e2df586be73da25627a971d130e45b27479daad",
+ "format": 1
+ },
+ {
+ "name": "requirements.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "876da4d933e6561c29737e2b9fa47f2df0b309c3ee1dba11d400ba443630cf2f",
+ "format": 1
+ },
+ {
+ "name": "tests",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/inventory/foreman.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cc082409aa3eec98c85622d6f4cf9f196958c9216f94ab46693c00948dce996d",
+ "name": "tests/fixtures",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/callback",
+ "name": "tests/fixtures/callback",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "plugins/callback/foreman.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1155c0e0a689c1e8155ee90664832824fbb0153d82f3beec1d01280051b1152e",
+ "name": "tests/fixtures/callback/dir_store",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests",
+ "name": "tests/fixtures/callback/dir_store/foreman",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/conftest.py",
+ "name": "tests/fixtures/callback/dir_store/foreman/testhostB.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d5cf1bd3cfac2abc65f00b3a7c79b00241db49da53fb873a8848dff339e5e04f",
+ "chksum_sha256": "88468be2c605bef5c25305ac2b54fb3fa012a3ad0f98cdddb72b26cf5cc7a334",
"format": 1
},
{
- "name": "tests/test_foreman_spec_helper.py",
+ "name": "tests/fixtures/callback/dir_store/foreman/testhostA.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9d379dcddfa2f00e26dc77787c7a95777f6972eaf40e5ea77095b5a66985477e",
+ "chksum_sha256": "2acd0dece63c65d7260e1bd5b7e81e262a3c462f7a540aee8b4ca23879838743",
"format": 1
},
{
- "name": "tests/test_crud.py",
+ "name": "tests/fixtures/callback/dir_store/foreman/testhost.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d11bf14b1659ac6b1e1c4828e74171befe3cfd0d9aba2f4913573c3924e8a2fd",
+ "chksum_sha256": "f6530abf8cebedb754e843db997797e796be820b091343293ad7babf883e37e7",
"format": 1
},
{
- "name": "tests/test_playbooks",
+ "name": "tests/fixtures/callback/dir_store/proxy",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/test_playbooks/repository.yml",
+ "name": "tests/fixtures/callback/dir_store/proxy/testhostB.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2115bfb6bfa1dbeb1524b4ed15f1b2ca0b6a11970cf90597376e1d9585d246e5",
+ "chksum_sha256": "461595dd224aef052f6c07e705f14b38d245e37b4d473cd2ddc6cf47a51555b4",
"format": 1
},
{
- "name": "tests/test_playbooks/wait_for_task.yml",
+ "name": "tests/fixtures/callback/dir_store/proxy/testhostA.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aad651dc0fe9c180361ec1de4f568f224424b5eaa8a4bb76dd527c4270339272",
+ "chksum_sha256": "4ae93f4517389d6a0501064398a836cde4bcf1106b03a8bc3a49d448ddcb2f6d",
"format": 1
},
{
- "name": "tests/test_playbooks/compute_profile.yml",
+ "name": "tests/fixtures/callback/dir_store/proxy/testhost.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "859082a968f30318d9ccbdcc5247bae2325bcac2c5b5e24d6ed57c99a97a1f0b",
+ "chksum_sha256": "38df7978c1ac7a1505631bb32e251819b0454d29ed78de4cbd1e61b264279ec6",
"format": 1
},
{
- "name": "tests/test_playbooks/scc_product_old.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0de32a0f7582321e906642ce34574d246be5776981756d054dc27fd0309885a4",
+ "name": "tests/inventory",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/test_playbooks/compute_profiles_role.yml",
+ "name": "tests/inventory/hosts",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1b3f1b24944f24df45849fadadd3961d918d033240015d4aad8fbfe2eb6d9a39",
+ "chksum_sha256": "53370d9c2dab332dd16dc7551fa164e5c9c2e749e358153857c7eea3f5377c08",
"format": 1
},
{
- "name": "tests/test_playbooks/config_group.yml",
+ "name": "tests/inventory/inventory_plugin.foreman.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1c9a269e6832694583940c6c8b711aa66e1321d3dbc48c188e3986ef66d545f4",
+ "chksum_sha256": "3f94da67fc336acebc1fd3e52e0634a42e1af1d7c39a7c446e0afe06461ad406",
"format": 1
},
{
- "name": "tests/test_playbooks/content_view_filter_info.yml",
+ "name": "tests/inventory/inventory_plugin_ansible.foreman.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "925b1f6178534bb60612dcdcdeaa51eba17b59f53ccbfea166897d77d0ecbd8f",
+ "chksum_sha256": "fb3a70e85a740376f372ec0ed23f8baa3f68bbe375df3c48a89257ff11ac7800",
"format": 1
},
{
- "name": "tests/test_playbooks/sync_plan.yml",
+ "name": "tests/test_foreman_spec_helper.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8c9ae3972a2da924db17db68d305fc7bfc67d4e1ca4313a9b952e635abcc60ef",
+ "chksum_sha256": "9d379dcddfa2f00e26dc77787c7a95777f6972eaf40e5ea77095b5a66985477e",
"format": 1
},
{
- "name": "tests/test_playbooks/hostgroup_info.yml",
+ "name": "tests/utils.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b5c7339154427a8caae9f9dc5434148c92e20e73d29b0f67e4f71c492dc6e1fc",
+ "chksum_sha256": "e70262b4d0694a372c0fd5416c38d68828f2b936b451de35132d45cfad39ca28",
"format": 1
},
{
- "name": "tests/test_playbooks/convert2rhel.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "331d776014950689865561f4413845238086175761a28853f1da79b9f048b697",
+ "name": "tests/callback",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/test_playbooks/setting_info.yml",
+ "name": "tests/callback/three_hosts",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a190fe6080d9a67829070b753bc54f5a31ec9270c68d72ae2c8767fafa6e03c2",
+ "chksum_sha256": "85fd7fb492caf7be88fe00db8f3b7927dc2fdf30c440ad38127aa0aff06f3e3d",
"format": 1
},
{
- "name": "tests/test_playbooks/compute_resource.yml",
+ "name": "tests/callback/three_hosts.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7e283b5e3a57a505dbb78eceea6bef4a12f7dfc108b898e446022537a7d194eb",
+ "chksum_sha256": "8dcbfccdbd847bd2fc0ec65f0d42887b3ead6a8b60ed8a2f5abc8feb639b2b13",
"format": 1
},
{
- "name": "tests/test_playbooks/snapshot.yml",
+ "name": "tests/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ebde33617cc72013ef86eb5cc60965f4604b11a49a19b0f9621b5d032464faec",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "tests/test_playbooks/content_views_role.yml",
+ "name": "tests/vcr_python_wrapper.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "09c570f39c23c370a1043ffaa302d8f6f72de6c6137a258da6056af5f417cd81",
+ "chksum_sha256": "62826bcc3ac73fda8a3585d2297ecb20e84a6ef096eb354e9b42f9f4cca17ed8",
"format": 1
},
{
- "name": "tests/test_playbooks/organization_info.yml",
+ "name": "tests/conftest.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6d232a41f8747fa739c295f42bb96d6ca23d1b990d21e425bcf3224d181ac284",
- "format": 1
- },
- {
- "name": "tests/test_playbooks/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "d5cf1bd3cfac2abc65f00b3a7c79b00241db49da53fb873a8848dff339e5e04f",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/repository.yml",
+ "name": "tests/test_callback.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5904c8f0cc4920271efe3c89a4f4fac85ee4eddb4de1e817a786f359ed0254ec",
+ "chksum_sha256": "31e9eb51f0bbe8698e26b280f4cba83ee9fa7fdf4fde8e4a442859298fb29c13",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/wait_for_task.yml",
+ "name": "tests/test_module_state.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f7f759339b170a9e7798d4411cf6dfa1f75b637aac3aedecfe824c651e86c66e",
+ "chksum_sha256": "d7ff18765245227c5399fb694616ccb9994e9acf1e63c3db478509605302a5d7",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/compute_profile.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f7d58dd12847227d1ef558686a13f03cfa973fe4411f551eac7b4a3aaa30a681",
+ "name": "tests/test_playbooks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/content_view_filter_rule_packages.yml",
+ "name": "tests/test_playbooks/inventory_plugin_ansible.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2a20065f2752a6862d52b58883ce7c0ef6cec85c53ea12c4cc7abe74ce335f4e",
+ "chksum_sha256": "4d97d324577ccad3defef88ec06b050421bb79d758337ad7c83c1b2f2567c5c1",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/inventory_plugin_tests.yml",
+ "name": "tests/test_playbooks/redhat_manifest.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "903d8bfba1406f19b2575ba370a02593162d604455140fb12d5954607469891a",
+ "chksum_sha256": "17655c12342e5707dd1e9cc0512848ddb3b42467f7d8a5b3b122322403af8753",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/upload.yml",
+ "name": "tests/test_playbooks/location.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3effb28e5cdfea4e23e3f3411b03f9c9bfa8cb675e88be5433ca83b1965c4829",
+ "chksum_sha256": "e46a13e52afa57a3c7ebd8bfca8cf11d193e1aaa89aa2e8a60f451e2a3aa3344",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/config_group.yml",
+ "name": "tests/test_playbooks/luna_hostgroup.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "df28ab135fdf074e96447ff0771480a176552f604a5d63a8e9f218e0ccc0dd30",
+ "chksum_sha256": "18ae107f6d1e2677ebcb261f9555a7b8bf3a0c00465475e7276a3c38cb64e3b0",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/sync_plan.yml",
+ "name": "tests/test_playbooks/auth_sources_ldap_role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "274e95c66ba345c61879b98007277a6d5e56b8b2418683c42485939bd67583d6",
+ "chksum_sha256": "17925897afcb49fecfb0f597780a76b40b01a141bead1e2ae7d8771f73c9f744",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/content_view_filter_docker.yml",
+ "name": "tests/test_playbooks/repository_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c8707f8e0009c9615b54f3f92d02d30dedc92dccf5bac2296e21799d3a419920",
+ "chksum_sha256": "8f82cb4956c757ea94f71397d8f3fe6d569b85726a8473a6697844a154e3e867",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/search_facts.yml",
+ "name": "tests/test_playbooks/repository_set.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0897d37abadb2a6d1d7c3be21de25797dbf6ae69b893670e03c745924f8f4fdd",
+ "chksum_sha256": "0ed75b2f780847b38687e56b312e0e6afaa4a7efbd05add05f818c918ee9351f",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/compute_resource.yml",
+ "name": "tests/test_playbooks/sync_plan.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "161ce705172c76d9a55baced26ab3d9071ba53b22940ba111303d1bb82c00b73",
+ "chksum_sha256": "8c9ae3972a2da924db17db68d305fc7bfc67d4e1ca4313a9b952e635abcc60ef",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/content_view_filter_rule_errata_by_date.yml",
+ "name": "tests/test_playbooks/content_view_filter_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7b8f784e8380f3202e727a3687be35c8fc751ccd0fff05eaba199f119dc4885c",
+ "chksum_sha256": "925b1f6178534bb60612dcdcdeaa51eba17b59f53ccbfea166897d77d0ecbd8f",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/snapshot.yml",
+ "name": "tests/test_playbooks/sync_plans_role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "75f2b19b51081ffdae431d589624f4de7717d72ca57ea519745456363090b119",
+ "chksum_sha256": "5c17112943b7c351cc400181ce30ef6d2ad8e9f007eb857faaef17ef7a0f68b2",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/setting_fact.yml",
+ "name": "tests/test_playbooks/domains_role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dc7a1866ff1b474bb0b55f786db99c4245d673c846bdd8b4046b72239fe51719",
+ "chksum_sha256": "42d6644dae575f27342473ae5d6ee6d225f065ef20d85ff17b309ac8e4975162",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/installation_medium.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "b2832592d01b58ba80a9c8e9fd359e1b8b08c90988e8004a90615adbbfffc8a1",
+ "name": "tests/test_playbooks/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/realm.yml",
+ "name": "tests/test_playbooks/tasks/katello_sync.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e7486c557c9e5522662062beff09902029ea7c7d01882ee2a1b5882d657627ae",
+ "chksum_sha256": "b3bb538d4a7ea3d9f9362864a8c8e640b1765288730b00454ea68b96f1af5869",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/subnet.yml",
+ "name": "tests/test_playbooks/tasks/content_view_filter_rule_deb.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3c6c71dd7cb51e86a022c2077453f07d306e7f2460dd577a262b3dbc923d1fa8",
+ "chksum_sha256": "2401272445cee6127976eda71982f5d98c4a3abbb5b134249fb87ac6bef6793e",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/templates_import.yml",
+ "name": "tests/test_playbooks/tasks/redhat_manifest.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "69b931df3911380c53caf136309f58aeb8f3de0429d35a74bb1e9011ea6b7971",
+ "chksum_sha256": "500348a4903e6fa3d8a77c8b0b321b09f2d2465918695293a3e596ec0540f5f3",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/content_view_filter_package_group.yml",
+ "name": "tests/test_playbooks/tasks/location.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a3f487a5d1788228dc8002adaeed72e753794b7bd623a287380f4940b424b0da",
+ "chksum_sha256": "5d943ec3ce117b66d39a78d427bd6d101f1e90a63c92758815b398e68133f70b",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/http_proxy.yml",
+ "name": "tests/test_playbooks/tasks/inventory_plugin_tests.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "91359397d6586d8a23ecb47d7224aba1f6cdc59caf9d8ee9be9e52a6a76bfaa3",
+ "chksum_sha256": "d84c50f2d5fcfde757e60beba8b06aad622ec7b07723b8244f22a66518d5bb0d",
"format": 1
},
{
"name": "tests/test_playbooks/tasks/content_view_filter_errata_id.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eaa918e24b7503d9cc793a23b40d28665a751b4675a39d2303a0df33fae448f5",
+ "chksum_sha256": "bb8de9b720ccff0af9a890270fb206f38bce29f09ef425a8cff42d5be998ef10",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/content_view_filter_rule_containers.yml",
+ "name": "tests/test_playbooks/tasks/repository_set.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "881e8ff22802116c603347c96001d62189358261f978324ff5f0863577f688ea",
+ "chksum_sha256": "718c5eec47220ba657b3e2f8e074a80639fb76a796026656006848b89f509aab",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/activation_key.yml",
+ "name": "tests/test_playbooks/tasks/sync_plan.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4ec73d4ee33e1e7331c274f1d83d6bc938de2504b27bd055a68908405fbab6ec",
+ "chksum_sha256": "274e95c66ba345c61879b98007277a6d5e56b8b2418683c42485939bd67583d6",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/setting.yml",
+ "name": "tests/test_playbooks/tasks/environment.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "af37b4f7201dc0bad6bfaf012256067e9fca017ee4208fbba76f2b3078c5ec63",
+ "chksum_sha256": "2f6cd36534a58020f47fbc5d0a6660a102276714bb2c5fa64ae75d71446a3656",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/host_power.yml",
+ "name": "tests/test_playbooks/tasks/activation_key.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c22b468cf6d7b9491d111d6fc9f8687f224b8ff413f1a7ad3bab618f3d886444",
+ "chksum_sha256": "4ec73d4ee33e1e7331c274f1d83d6bc938de2504b27bd055a68908405fbab6ec",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/content_view.yml",
+ "name": "tests/test_playbooks/tasks/content_credential.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0e16309daead6c2a6a1c682b5aeaa62cd10c709e1f18ae59bbe61560c1e0348c",
+ "chksum_sha256": "0ce4398f0322019c17bf8f103aeec8d1aa28b2f7ae45a6c9f93966a346595c3d",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/content_export_repository.yml",
+ "name": "tests/test_playbooks/tasks/scc_product.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3c2b4a01212ff867adfb45c2f8deaa1033adcaae76fcfa42cc1c2a66df1108c0",
+ "chksum_sha256": "9f5ff538754be7d069e37e6db2cbdcc79c9778772347ee3c58324748baaf832d",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/global_parameter.yml",
+ "name": "tests/test_playbooks/tasks/content_view_filter_rule_cleanup.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "46c2cbab74f8edd900ad865584888477284f9125595d9397dafd85e5af0fcf18",
+ "chksum_sha256": "9a5b7dff5e57f86b413e34a534613f0e436f9ee1b1f2c993e63ee273cb63b2b3",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/organization.yml",
+ "name": "tests/test_playbooks/tasks/scap_tailoring_file.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "682e7ea93e6916f9f8f85fe2362a79cc7a39bf58e9f9d076bdec805477333272",
+ "chksum_sha256": "30139ee3e1019dc31ecc7630722c6aff653055c7eff5c4aecad0ec1d90d4dc34",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/_assert_diff.yml",
+ "name": "tests/test_playbooks/tasks/compute_attribute.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c5306b6d940b674fa49fc267477cc14ad29109519960104183d042f178fb700e",
+ "chksum_sha256": "5791a9ca437dfbe4713d28be5c2e229804c14cf52c05fa77daa17fdfd85c5458",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/scc_account.yml",
+ "name": "tests/test_playbooks/tasks/smart_proxy.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d712020714d21470642c7e0edc1442ffadac33cf83496b9959678c919fbd1676",
+ "chksum_sha256": "51631bdcf7ed15e0891a7633fefff5a1be9feeba2c990effa17542c066d4c545",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/scc_product.yml",
+ "name": "tests/test_playbooks/tasks/discovery_rule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9f5ff538754be7d069e37e6db2cbdcc79c9778772347ee3c58324748baaf832d",
+ "chksum_sha256": "4e43ffd1fc1eba3e67b75422412001fd8cc133d4e9479234fa853326932ec99d",
"format": 1
},
{
@@ -1870,241 +1905,241 @@
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/content_view_filter_rule_modulemd.yml",
+ "name": "tests/test_playbooks/tasks/smart_class_parameter_override_value.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fb1b591c4cd98b2a04f19b7dd641a18357ce2be6f5acf4ed5139b22149444a4b",
+ "chksum_sha256": "70fa4bb6506bcab5c42d9c3107da3b1f0b2d72608d383cfdd473299f26f5397f",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/location.yml",
+ "name": "tests/test_playbooks/tasks/upload.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5d943ec3ce117b66d39a78d427bd6d101f1e90a63c92758815b398e68133f70b",
+ "chksum_sha256": "3effb28e5cdfea4e23e3f3411b03f9c9bfa8cb675e88be5433ca83b1965c4829",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/ptable.yml",
+ "name": "tests/test_playbooks/tasks/webhook.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c43955df88757d48b48935dac393156a1716c969c8b036d596aec726abcca9fb",
+ "chksum_sha256": "359bc38ef28f5e146f82b678249237fb6e5dcb8fa27af04eb4a10ef58b13f51c",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/inventory_plugin_setup.yml",
+ "name": "tests/test_playbooks/tasks/architecture.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "385cd77bad3757d22197484bb249c3b7c8e7447f972bc11e8c1b2ec7de3b27da",
+ "chksum_sha256": "f7ca4840e9bc0b7d7c4aed11f14435d4a01f1e9301af3b5aa0b8053da984a866",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/host_collection.yml",
+ "name": "tests/test_playbooks/tasks/model.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ae5c7e5b203d16cd3c0fbc165df859ac14d1ffc83e3ba848f55c0375444e3409",
+ "chksum_sha256": "68654069a64bd766c842b7f763a500529460211cec4bec726bcc695b764a534c",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/os_default_template.yml",
+ "name": "tests/test_playbooks/tasks/user.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4ce991b9eb1d203a010f3898a0989350ab6faa0d0fffe375c4fc4cab3b239bc8",
+ "chksum_sha256": "65e851501bd424f4305735f0b4db9bb4456bf67352c6daa7fbffc9b306ade61a",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/role.yml",
+ "name": "tests/test_playbooks/tasks/puppetclasses_import.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "083aa398bf3ea0a2845a5af7c6e4aa4efb8aad8c1686862df08cbd07ceb6cc64",
+ "chksum_sha256": "6b6403a9cc78a5f5739386adff1095eaff2979344f3abcc721a20247ef868858",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/provisioning_template.yml",
+ "name": "tests/test_playbooks/tasks/realm.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c3abe70aa7c2098975fbd190674575967d5735c05f5d1ba50bf41f9e66acd0fb",
+ "chksum_sha256": "e7486c557c9e5522662062beff09902029ea7c7d01882ee2a1b5882d657627ae",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/smart_class_parameter.yml",
+ "name": "tests/test_playbooks/tasks/inventory_plugin.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6de34cc56467dbecf6e74322008388492244a3dbd16bf174902ec1fffba2bda9",
+ "chksum_sha256": "e5a8f184d64d4645c8a4e9f1b656019df0661c2d38d98d9a02511a098373af37",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/bookmark.yml",
+ "name": "tests/test_playbooks/tasks/repository.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "81cf29309faa838a545c917ceab939f943c796af9be586a53d653884f503602d",
+ "chksum_sha256": "5904c8f0cc4920271efe3c89a4f4fac85ee4eddb4de1e817a786f359ed0254ec",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/content_view_filter_rule_package_groups.yml",
+ "name": "tests/test_playbooks/tasks/content_view_filter_rule_errata_by_date.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "697f5749d20c725994806a1493f742679bac73c8b7b3c21779006539c1e2a869",
+ "chksum_sha256": "7b8f784e8380f3202e727a3687be35c8fc751ccd0fff05eaba199f119dc4885c",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/content_credential.yml",
+ "name": "tests/test_playbooks/tasks/job_template_from_file.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0ce4398f0322019c17bf8f103aeec8d1aa28b2f7ae45a6c9f93966a346595c3d",
+ "chksum_sha256": "7e59301453091dc8284a68a2be6a3b4744992de8e1d4e2491e4e6245c969d158",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/content_export_show.yml",
+ "name": "tests/test_playbooks/tasks/compute_profile.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e0f76f4ecc2714e5ec36f6b9969e99501f274d214e2a572952c7fcc16d31c2c7",
+ "chksum_sha256": "f7d58dd12847227d1ef558686a13f03cfa973fe4411f551eac7b4a3aaa30a681",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/inventory_plugin.yml",
+ "name": "tests/test_playbooks/tasks/search_facts.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e5a8f184d64d4645c8a4e9f1b656019df0661c2d38d98d9a02511a098373af37",
+ "chksum_sha256": "0897d37abadb2a6d1d7c3be21de25797dbf6ae69b893670e03c745924f8f4fdd",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/hostgroup.yml",
+ "name": "tests/test_playbooks/tasks/content_view_filter_errata_date.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "21f4a6cbb299864c2c27a962e263ac953b42397dae8cc02e656eec08569ba737",
+ "chksum_sha256": "aaeba8f04a54a27eae307be634d808fbc5aaea404718c51bc00fdcde03825619",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/subscription_manifest.yml",
+ "name": "tests/test_playbooks/tasks/content_view_version.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ff60c5a8dc83182b488e64a3f10a31443cba134c4dedccb58ad9465083dce258",
+ "chksum_sha256": "66f9e52bd101dec756b5fffdbc2f1027580f1aa4fd40aa7dc89bf509ef0135a1",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/operatingsystem.yml",
+ "name": "tests/test_playbooks/tasks/snapshot.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f7d67c3108a06a486cb8f10085f1ec05da9cd80135f7be3a3a8d11585de55696",
+ "chksum_sha256": "75f2b19b51081ffdae431d589624f4de7717d72ca57ea519745456363090b119",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/external_usergroup.yml",
+ "name": "tests/test_playbooks/tasks/job_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d7df4679c0de20b69f7f619b8401ae1663888067f7cd6dcc640fb8fb9d62f27f",
+ "chksum_sha256": "f2726ae3cb0d8344066a90e65f5b0935d333bd684e83a8af2ba6a291331cb77f",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/discovery_rule.yml",
+ "name": "tests/test_playbooks/tasks/content_export_show.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4e43ffd1fc1eba3e67b75422412001fd8cc133d4e9479234fa853326932ec99d",
+ "chksum_sha256": "e0f76f4ecc2714e5ec36f6b9969e99501f274d214e2a572952c7fcc16d31c2c7",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/content_view_filter_rule_cleanup.yml",
+ "name": "tests/test_playbooks/tasks/content_view_filter_rule_modulemd.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9a5b7dff5e57f86b413e34a534613f0e436f9ee1b1f2c993e63ee273cb63b2b3",
+ "chksum_sha256": "fb1b591c4cd98b2a04f19b7dd641a18357ce2be6f5acf4ed5139b22149444a4b",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/content_export_library.yml",
+ "name": "tests/test_playbooks/tasks/provisioning_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e07a27a56535d2cf1844fd0df9cececf7699441c70f584cba6efd300c222a64a",
+ "chksum_sha256": "c3abe70aa7c2098975fbd190674575967d5735c05f5d1ba50bf41f9e66acd0fb",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/scap_content.yml",
+ "name": "tests/test_playbooks/tasks/lifecycle_environment.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec588a65f2af3f5154c8e6db29c274538b01fd087825b8655408b0deb956776f",
+ "chksum_sha256": "97fe5ae6626d47b35d9af344843c64bdb1c0876b0e3d23edc36aa027ea1faf87",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/content_view_filter_package.yml",
+ "name": "tests/test_playbooks/tasks/hostgroup.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4b1c0e7972e33b7081a6a35c731ae345b0db882863b62b4340975e0db7f2d5bd",
+ "chksum_sha256": "21f4a6cbb299864c2c27a962e263ac953b42397dae8cc02e656eec08569ba737",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/compute_attribute.yml",
+ "name": "tests/test_playbooks/tasks/status_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5791a9ca437dfbe4713d28be5c2e229804c14cf52c05fa77daa17fdfd85c5458",
+ "chksum_sha256": "fa29a8b4518d449605126ed824742015d666ff163d7a1bdd8b88108fe86654b5",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/puppetclasses_import.yml",
+ "name": "tests/test_playbooks/tasks/compute_resource.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6b6403a9cc78a5f5739386adff1095eaff2979344f3abcc721a20247ef868858",
+ "chksum_sha256": "161ce705172c76d9a55baced26ab3d9071ba53b22940ba111303d1bb82c00b73",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/smart_class_parameter_override_value.yml",
+ "name": "tests/test_playbooks/tasks/host_power.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "70fa4bb6506bcab5c42d9c3107da3b1f0b2d72608d383cfdd473299f26f5397f",
+ "chksum_sha256": "c22b468cf6d7b9491d111d6fc9f8687f224b8ff413f1a7ad3bab618f3d886444",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/model.yml",
+ "name": "tests/test_playbooks/tasks/wait_for_task.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "68654069a64bd766c842b7f763a500529460211cec4bec726bcc695b764a534c",
+ "chksum_sha256": "f7f759339b170a9e7798d4411cf6dfa1f75b637aac3aedecfe824c651e86c66e",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/scap_tailoring_file.yml",
+ "name": "tests/test_playbooks/tasks/content_view_filter_deb.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "30139ee3e1019dc31ecc7630722c6aff653055c7eff5c4aecad0ec1d90d4dc34",
+ "chksum_sha256": "d784c591884db4090d4654acd03c45596992ec1347982c57320b4e23aa6be81e",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/content_view_filter_modulemd.yml",
+ "name": "tests/test_playbooks/tasks/content_export_library.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3894e802133cf12a7470059f2a15294beb093884b35778b635aafdd35826aaf3",
+ "chksum_sha256": "e07a27a56535d2cf1844fd0df9cececf7699441c70f584cba6efd300c222a64a",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/host.yml",
+ "name": "tests/test_playbooks/tasks/content_export_repository.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dfe5de08258c491858e9a28e0e0a28d41f1bed640e880a569f741d1cadb4e881",
+ "chksum_sha256": "3c2b4a01212ff867adfb45c2f8deaa1033adcaae76fcfa42cc1c2a66df1108c0",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/job_template_from_file.yml",
+ "name": "tests/test_playbooks/tasks/content_view_filter.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7e59301453091dc8284a68a2be6a3b4744992de8e1d4e2491e4e6245c969d158",
+ "chksum_sha256": "247c4a5d8dec4682468c45c6691d9572647c224d6c3cf28f2f8a01e5436226b7",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/auth_source_ldap.yml",
+ "name": "tests/test_playbooks/tasks/setting.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "46a2cd7c94a8d4d79a64d506164d9df3772074f2611083971644ea7a35211896",
+ "chksum_sha256": "af37b4f7201dc0bad6bfaf012256067e9fca017ee4208fbba76f2b3078c5ec63",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/job_template.yml",
+ "name": "tests/test_playbooks/tasks/registration_command.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f2726ae3cb0d8344066a90e65f5b0935d333bd684e83a8af2ba6a291331cb77f",
+ "chksum_sha256": "e7ded0ad536dda562d2117a69e63eac06263702e0dbb2e2daa5407e8e1435340",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/content_export_version.yml",
+ "name": "tests/test_playbooks/tasks/host_collection.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f2e4b7c5353566b099df2bcf8c7b211132a3fa04de0c597aeb460dc2ac8db527",
+ "chksum_sha256": "ae5c7e5b203d16cd3c0fbc165df859ac14d1ffc83e3ba848f55c0375444e3409",
"format": 1
},
{
@@ -2115,276 +2150,276 @@
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/katello_sync.yml",
+ "name": "tests/test_playbooks/tasks/templates_import.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b3bb538d4a7ea3d9f9362864a8c8e640b1765288730b00454ea68b96f1af5869",
+ "chksum_sha256": "69b931df3911380c53caf136309f58aeb8f3de0429d35a74bb1e9011ea6b7971",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/user.yml",
+ "name": "tests/test_playbooks/tasks/external_usergroup.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "65e851501bd424f4305735f0b4db9bb4456bf67352c6daa7fbffc9b306ade61a",
+ "chksum_sha256": "d7df4679c0de20b69f7f619b8401ae1663888067f7cd6dcc640fb8fb9d62f27f",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/lifecycle_environment.yml",
+ "name": "tests/test_playbooks/tasks/domain.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "97fe5ae6626d47b35d9af344843c64bdb1c0876b0e3d23edc36aa027ea1faf87",
+ "chksum_sha256": "572759a82a310d8684cc9cc18038306334a403d04c4e89c6baf7af5536e4f346",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/architecture.yml",
+ "name": "tests/test_playbooks/tasks/ptable.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f7ca4840e9bc0b7d7c4aed11f14435d4a01f1e9301af3b5aa0b8053da984a866",
+ "chksum_sha256": "c43955df88757d48b48935dac393156a1716c969c8b036d596aec726abcca9fb",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/status_info.yml",
+ "name": "tests/test_playbooks/tasks/content_view_filter_rule_package_groups.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fa29a8b4518d449605126ed824742015d666ff163d7a1bdd8b88108fe86654b5",
+ "chksum_sha256": "697f5749d20c725994806a1493f742679bac73c8b7b3c21779006539c1e2a869",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/content_view_filter_deb.yml",
+ "name": "tests/test_playbooks/tasks/global_parameter.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fe942082a3b8ea80cd8b1d6aee90a80d5b2e92b7588ef554de2ad8992fa66446",
+ "chksum_sha256": "46c2cbab74f8edd900ad865584888477284f9125595d9397dafd85e5af0fcf18",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/environment.yml",
+ "name": "tests/test_playbooks/tasks/content_view_filter_rule_packages.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2f6cd36534a58020f47fbc5d0a6660a102276714bb2c5fa64ae75d71446a3656",
+ "chksum_sha256": "2a20065f2752a6862d52b58883ce7c0ef6cec85c53ea12c4cc7abe74ce335f4e",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/usergroup.yml",
+ "name": "tests/test_playbooks/tasks/scap_content.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7fb3c85e9208eaecf241fbbe3672900646c3150b2bf8c53cc39a554a9db824b8",
+ "chksum_sha256": "ec588a65f2af3f5154c8e6db29c274538b01fd087825b8655408b0deb956776f",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/content_view_filter_errata_date.yml",
+ "name": "tests/test_playbooks/tasks/content_export_version.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "22b3213c54188dc34af8d84a2e39d92c4e0c3aaf5696dc40adfa2fe477eb8221",
+ "chksum_sha256": "f2e4b7c5353566b099df2bcf8c7b211132a3fa04de0c597aeb460dc2ac8db527",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/redhat_manifest.yml",
+ "name": "tests/test_playbooks/tasks/installation_medium.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "500348a4903e6fa3d8a77c8b0b321b09f2d2465918695293a3e596ec0540f5f3",
+ "chksum_sha256": "b2832592d01b58ba80a9c8e9fd359e1b8b08c90988e8004a90615adbbfffc8a1",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/repository_set.yml",
+ "name": "tests/test_playbooks/tasks/content_view_filter_package_group.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "718c5eec47220ba657b3e2f8e074a80639fb76a796026656006848b89f509aab",
+ "chksum_sha256": "736064db07a1000a6e6d8a1192da283a2786c81081ffd6e2fed30494d848b7f3",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/domain.yml",
+ "name": "tests/test_playbooks/tasks/auth_source_ldap.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "572759a82a310d8684cc9cc18038306334a403d04c4e89c6baf7af5536e4f346",
+ "chksum_sha256": "46a2cd7c94a8d4d79a64d506164d9df3772074f2611083971644ea7a35211896",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/content_view_filter_rule_deb.yml",
+ "name": "tests/test_playbooks/tasks/inventory_plugin_setup.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2401272445cee6127976eda71982f5d98c4a3abbb5b134249fb87ac6bef6793e",
+ "chksum_sha256": "385cd77bad3757d22197484bb249c3b7c8e7447f972bc11e8c1b2ec7de3b27da",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/smart_proxy.yml",
+ "name": "tests/test_playbooks/tasks/http_proxy.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "51631bdcf7ed15e0891a7633fefff5a1be9feeba2c990effa17542c066d4c545",
+ "chksum_sha256": "91359397d6586d8a23ecb47d7224aba1f6cdc59caf9d8ee9be9e52a6a76bfaa3",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/content_view_filter.yml",
+ "name": "tests/test_playbooks/tasks/content_view_filter_rule_errata_by_id.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "247c4a5d8dec4682468c45c6691d9572647c224d6c3cf28f2f8a01e5436226b7",
+ "chksum_sha256": "79316dd4e54c4343c987204d6ac5a459fd94adeec56351edee9c0b56697afcd9",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/content_export_info.yml",
+ "name": "tests/test_playbooks/tasks/content_view_filter_modulemd.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "71adff7cb365f9b0343c870a0db3d0dd4865a94116e20bf66782cdf346c7d814",
+ "chksum_sha256": "3894e802133cf12a7470059f2a15294beb093884b35778b635aafdd35826aaf3",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/content_view_filter_rule_errata_by_id.yml",
+ "name": "tests/test_playbooks/tasks/content_view_filter_docker.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "79316dd4e54c4343c987204d6ac5a459fd94adeec56351edee9c0b56697afcd9",
+ "chksum_sha256": "a959db4cec9a517cf9503f583a2ead6bdee8e32794340a429e6630b781d2066c",
"format": 1
},
{
- "name": "tests/test_playbooks/tasks/content_view_version.yml",
+ "name": "tests/test_playbooks/tasks/setting_fact.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "66f9e52bd101dec756b5fffdbc2f1027580f1aa4fd40aa7dc89bf509ef0135a1",
+ "chksum_sha256": "dc7a1866ff1b474bb0b55f786db99c4245d673c846bdd8b4046b72239fe51719",
"format": 1
},
{
- "name": "tests/test_playbooks/installation_medium.yml",
+ "name": "tests/test_playbooks/tasks/operatingsystem.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3c1c1a8a00b8a90b94a61d5938ba3da30721beac9950db8439979708bfd0f980",
+ "chksum_sha256": "f7d67c3108a06a486cb8f10085f1ec05da9cd80135f7be3a3a8d11585de55696",
"format": 1
},
{
- "name": "tests/test_playbooks/realm.yml",
+ "name": "tests/test_playbooks/tasks/os_default_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9ddd520739466a6303c2cb21206742e6b0ebb05ca78409ae3158e19e70220209",
+ "chksum_sha256": "4ce991b9eb1d203a010f3898a0989350ab6faa0d0fffe375c4fc4cab3b239bc8",
"format": 1
},
{
- "name": "tests/test_playbooks/subnet.yml",
+ "name": "tests/test_playbooks/tasks/content_view_filter_rule_containers.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eb612d68caeccf428fe3901211889be8fdb832d7949e1971e2336f37a197f892",
+ "chksum_sha256": "881e8ff22802116c603347c96001d62189358261f978324ff5f0863577f688ea",
"format": 1
},
{
- "name": "tests/test_playbooks/templates_import.yml",
+ "name": "tests/test_playbooks/tasks/host.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b948cd2184e1a2de070bd60084694425e67709134605a3c15a411de8ad107e5c",
+ "chksum_sha256": "dfe5de08258c491858e9a28e0e0a28d41f1bed640e880a569f741d1cadb4e881",
"format": 1
},
{
- "name": "tests/test_playbooks/http_proxy.yml",
+ "name": "tests/test_playbooks/tasks/content_view.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a07d50e8ff479ef59e9baf94384a15ec28ed3e2b5183746e1d58a81ae98491bd",
+ "chksum_sha256": "0e16309daead6c2a6a1c682b5aeaa62cd10c709e1f18ae59bbe61560c1e0348c",
"format": 1
},
{
- "name": "tests/test_playbooks/activation_key.yml",
+ "name": "tests/test_playbooks/tasks/smart_class_parameter.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3c0073f607f1663284a5ec35cc1fdfa114bc847fd054306001fba77947cc5c5a",
+ "chksum_sha256": "6de34cc56467dbecf6e74322008388492244a3dbd16bf174902ec1fffba2bda9",
"format": 1
},
{
- "name": "tests/test_playbooks/auth_sources_ldap_role.yml",
+ "name": "tests/test_playbooks/tasks/content_export_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "17925897afcb49fecfb0f597780a76b40b01a141bead1e2ae7d8771f73c9f744",
+ "chksum_sha256": "71adff7cb365f9b0343c870a0db3d0dd4865a94116e20bf66782cdf346c7d814",
"format": 1
},
{
- "name": "tests/test_playbooks/setting.yml",
+ "name": "tests/test_playbooks/tasks/_assert_diff.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "084b62aa0296834002292453cf2a985a4e8f68520ca64d60e7c6196cbdd5978c",
+ "chksum_sha256": "c5306b6d940b674fa49fc267477cc14ad29109519960104183d042f178fb700e",
"format": 1
},
{
- "name": "tests/test_playbooks/host_power.yml",
+ "name": "tests/test_playbooks/tasks/usergroup.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2209005061dba266d58fb0e6463e3c96b54ddbe37ffbb849a6c922f90e8f7b8d",
+ "chksum_sha256": "7fb3c85e9208eaecf241fbbe3672900646c3150b2bf8c53cc39a554a9db824b8",
"format": 1
},
{
- "name": "tests/test_playbooks/host_info.yml",
+ "name": "tests/test_playbooks/tasks/subnet.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "92fd56eaa5a5e6247dd2048101d75150eaabff772df1ca02a232bd371aa41b42",
+ "chksum_sha256": "3c6c71dd7cb51e86a022c2077453f07d306e7f2460dd577a262b3dbc923d1fa8",
"format": 1
},
{
- "name": "tests/test_playbooks/content_view.yml",
+ "name": "tests/test_playbooks/tasks/subscription_manifest.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1f16a6f60490ad56fdb2df1631e00a1d376dbbc7754222927f55269e6af6d865",
+ "chksum_sha256": "ff60c5a8dc83182b488e64a3f10a31443cba134c4dedccb58ad9465083dce258",
"format": 1
},
{
- "name": "tests/test_playbooks/katello_smart_proxy.yml",
+ "name": "tests/test_playbooks/tasks/content_view_filter_package.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bb92f6f1e48d2b90b4bbe7255abe0e138bd72056c0f9950a89a3797c6e98d967",
+ "chksum_sha256": "239f2294499ef68491501422fe653217db5c00202b2a7becac772653ad45daa2",
"format": 1
},
{
- "name": "tests/test_playbooks/content_export_repository.yml",
+ "name": "tests/test_playbooks/tasks/role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "82ba06d0acdf8c68f0aed3ba6f7d80d611a8feb9c7919e68b97c15fdbbf406b4",
+ "chksum_sha256": "083aa398bf3ea0a2845a5af7c6e4aa4efb8aad8c1686862df08cbd07ceb6cc64",
"format": 1
},
{
- "name": "tests/test_playbooks/repository_ostree.yml",
+ "name": "tests/test_playbooks/tasks/scc_account.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e4fc391ecec2b2ccbdd69ca3270c7f26aefe80c013b73d1acec14552547a95f9",
+ "chksum_sha256": "d712020714d21470642c7e0edc1442ffadac33cf83496b9959678c919fbd1676",
"format": 1
},
{
- "name": "tests/test_playbooks/global_parameter.yml",
+ "name": "tests/test_playbooks/tasks/config_group.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7084a96e0b47f0ba920b7b9875f0a517fe05fafa48d97128e1466fefe7b2a670",
+ "chksum_sha256": "df28ab135fdf074e96447ff0771480a176552f604a5d63a8e9f218e0ccc0dd30",
"format": 1
},
{
- "name": "tests/test_playbooks/compute_resources_role.yml",
+ "name": "tests/test_playbooks/tasks/organization.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c31f5438aae09e9f75785a5e333a2503fb240967d7c90fba90d4b52a6bcf75e4",
+ "chksum_sha256": "682e7ea93e6916f9f8f85fe2362a79cc7a39bf58e9f9d076bdec805477333272",
"format": 1
},
{
- "name": "tests/test_playbooks/organization.yml",
+ "name": "tests/test_playbooks/tasks/bookmark.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c22be82bde8762bff4ddebf41396420342a8c7f81ef0fa41cf1c8059685b645b",
+ "chksum_sha256": "81cf29309faa838a545c917ceab939f943c796af9be586a53d653884f503602d",
"format": 1
},
{
- "name": "tests/test_playbooks/resource_info.yml",
+ "name": "tests/test_playbooks/activation_key.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4f747bab4aeb62da6902e4b69ae2eaf41bdc110a8a1b7fb401e8705d0d79f1c4",
+ "chksum_sha256": "3c0073f607f1663284a5ec35cc1fdfa114bc847fd054306001fba77947cc5c5a",
"format": 1
},
{
- "name": "tests/test_playbooks/content_view_filter_rule.yml",
+ "name": "tests/test_playbooks/domain_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a2c618b5e486cecc9bd68c43e96928772e7bfcebffa37837e3a8cf214e02a823",
+ "chksum_sha256": "c6add945cba983ac45fa4e5db63fb804eb0ab0328fb11744256ef93ec3c35fed",
"format": 1
},
{
- "name": "tests/test_playbooks/scc_account.yml",
+ "name": "tests/test_playbooks/content_credential.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6f789a066205e378560cf84505d080c01ca585aea60475277bb98e9b65fd82b5",
+ "chksum_sha256": "7d6f247266205e2e9b05019b51d2080310275905a9b40b9589a39ffff80ec22c",
"format": 1
},
{
- "name": "tests/test_playbooks/hardware_model.yml",
+ "name": "tests/test_playbooks/content_view_filter_rule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c42240503b393f565dfe1c5b5dac4cff34a48adcfbeeb8e85bfe6701d4f8d564",
+ "chksum_sha256": "a2c618b5e486cecc9bd68c43e96928772e7bfcebffa37837e3a8cf214e02a823",
"format": 1
},
{
@@ -2395,647 +2430,654 @@
"format": 1
},
{
- "name": "tests/test_playbooks/product.yml",
+ "name": "tests/test_playbooks/repository_sync.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d5411860d46871da0cb8d2ee27a3ac23bbe89143f4cd5e0f6972a85d4ef8332e",
+ "chksum_sha256": "c5f788be67959c40061b4e4ef4b473e93924625de8ace766ab0a1b944e9524ff",
"format": 1
},
{
- "name": "tests/test_playbooks/content_upload_deb.yml",
+ "name": "tests/test_playbooks/scap_tailoring_file.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f917c8747e313cd9431a8cff4c9584ec9e8d1b3a13a8e978cd23035dad0f8b48",
+ "chksum_sha256": "122f9e9cec0e915ad77aafdd4c83294dd1fccf6cc316cf3359205b526eb35bae",
"format": 1
},
{
- "name": "tests/test_playbooks/location.yml",
+ "name": "tests/test_playbooks/job_invocation.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e46a13e52afa57a3c7ebd8bfca8cf11d193e1aaa89aa2e8a60f451e2a3aa3344",
+ "chksum_sha256": "fa0ac97b8afb54cb9dc8d404e728aed4485f6875111cdba92d53abdc18357093",
"format": 1
},
{
- "name": "tests/test_playbooks/sync_plans_role.yml",
+ "name": "tests/test_playbooks/compute_attribute.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5c17112943b7c351cc400181ce30ef6d2ad8e9f007eb857faaef17ef7a0f68b2",
+ "chksum_sha256": "c5d33e7899e497d2fb781367fba911efb59edf30e9cbecc12d3ef0c724a4cba0",
"format": 1
},
{
- "name": "tests/test_playbooks/inventory_plugin_ansible.yml",
+ "name": "tests/test_playbooks/smart_proxy.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2ae13225c851c2e70ed10274d3dc2117a09b3ab5135c21ed4d243d36af02a30f",
+ "chksum_sha256": "931dd93609e7e495fd0c9176dfb56b056b9bc7f7c04c139b6325ca4934c45116",
"format": 1
},
{
- "name": "tests/test_playbooks/content_upload.yml",
+ "name": "tests/test_playbooks/repository_ostree.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ee0b06006da7674b50c6468a5665d6eb1e65c6546b3f52eb48487d43713408f0",
+ "chksum_sha256": "e4fc391ecec2b2ccbdd69ca3270c7f26aefe80c013b73d1acec14552547a95f9",
"format": 1
},
{
- "name": "tests/test_playbooks/host_collection.yml",
+ "name": "tests/test_playbooks/organizations_role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6d0f7de098e2a87a67cc4e60a00d26fab405fcdd3d718a6cb7ccb466a4eede26",
+ "chksum_sha256": "b3460cba11602b74aa967b3281efa8ae113e2e7114a05dcb466bbd1be07d749d",
"format": 1
},
{
- "name": "tests/test_playbooks/os_default_template.yml",
+ "name": "tests/test_playbooks/discovery_rule.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ed4c9899dced47607d4a66075ba69aec0871032e9e603ceb05a0233d8526b64b",
+ "chksum_sha256": "ac7ce44d7134e0d3c45f85a4fdcd5f501765365531424ee6263f1f509244c736",
"format": 1
},
{
- "name": "tests/test_playbooks/role.yml",
+ "name": "tests/test_playbooks/product.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f4bf9d429bb491a0d027d8bd74020d346b5f096fcbb0c398754c41ed560ae9f7",
+ "chksum_sha256": "d5411860d46871da0cb8d2ee27a3ac23bbe89143f4cd5e0f6972a85d4ef8332e",
"format": 1
},
{
- "name": "tests/test_playbooks/operatingsystems_role.yml",
+ "name": "tests/test_playbooks/scc_product_old.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "37863dca5cb279894ad0ad38af5577327f09ba633157e13cbcabdbc7382152e1",
+ "chksum_sha256": "0de32a0f7582321e906642ce34574d246be5776981756d054dc27fd0309885a4",
"format": 1
},
{
- "name": "tests/test_playbooks/provisioning_template.yml",
+ "name": "tests/test_playbooks/smart_class_parameter_override_value.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8f466a91b1535f7ac9e973a99ba3b75a0cb2e45a2aef91f80c25e0ef9ec4533b",
+ "chksum_sha256": "7f7a8f20864afdcf2c4b8292c8b954615dc796b0cbc4933308935f3bdf42cf20",
"format": 1
},
{
- "name": "tests/test_playbooks/hostgroups_role.yml",
+ "name": "tests/test_playbooks/webhook.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "605445428e580cf07de586b00fcfa3df2ccc0694cca90566c2f0f23a49064e3f",
+ "chksum_sha256": "71da1e153e2c959d34318235080bcd43fe32b9d8b81898afd2cf3484b49b04c4",
"format": 1
},
{
- "name": "tests/test_playbooks/settings_role.yml",
+ "name": "tests/test_playbooks/manifest_role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7e0da012824b320acd0924f861f64f2308dc20ec933f25887ebfa96a1afabc3d",
+ "chksum_sha256": "e0b555f00ca5e45982ac7a10f464d0a70d356332891e7c976bbca02aa3cef11e",
"format": 1
},
{
- "name": "tests/test_playbooks/smart_class_parameter.yml",
+ "name": "tests/test_playbooks/architecture.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "585d776164603a13c81f232b628a419a492bde6ce780fc678c2169b873efe20a",
+ "chksum_sha256": "002a07db993b4f618cdeb8edf08ed86a1dc3d1a1fe2b0a2e6621244b35cfb912",
"format": 1
},
{
- "name": "tests/test_playbooks/bookmark.yml",
+ "name": "tests/test_playbooks/user.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1a324f0aed22368ac8d37cfb1b971060666c01abef14e469ad604f6b7c2f162e",
+ "chksum_sha256": "da6add6aea06a0866f23298b3b464c46cf50e20fc858e696c7656bb753f61b0c",
"format": 1
},
{
- "name": "tests/test_playbooks/activation_keys_role.yml",
+ "name": "tests/test_playbooks/puppetclasses_import.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bb8f9e0912e815ff35a7db6cda407bf6b856ca2a194e96dc95decb3468ec5570",
+ "chksum_sha256": "97d03015cf3ac4569321a352adcc488c478e303ebdc17d77dd857a6f41d50e1d",
"format": 1
},
{
- "name": "tests/test_playbooks/content_view_filter_rule_info.yml",
+ "name": "tests/test_playbooks/realm.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4566e4df6fd3e6a751cdb3267d32c3375947af9c4b682b12b0504d5d84fce8b0",
+ "chksum_sha256": "9ddd520739466a6303c2cb21206742e6b0ebb05ca78409ae3158e19e70220209",
"format": 1
},
{
- "name": "tests/test_playbooks/organizations_role.yml",
+ "name": "tests/test_playbooks/inventory_plugin.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b3460cba11602b74aa967b3281efa8ae113e2e7114a05dcb466bbd1be07d749d",
+ "chksum_sha256": "d2017c16543226a31ecb9be98129a6559d96388d483e4a1d9f28f58c7fd393bf",
"format": 1
},
{
- "name": "tests/test_playbooks/content_credential.yml",
+ "name": "tests/test_playbooks/repository.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7d6f247266205e2e9b05019b51d2080310275905a9b40b9589a39ffff80ec22c",
+ "chksum_sha256": "2115bfb6bfa1dbeb1524b4ed15f1b2ca0b6a11970cf90597376e1d9585d246e5",
"format": 1
},
{
- "name": "tests/test_playbooks/subscription_info.yml",
+ "name": "tests/test_playbooks/subnets_role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "697b0084d97ea6b648333c07e106dbd99bf92ecf9536c8aec55e4e0e53f35a46",
+ "chksum_sha256": "7cbdc5be36a36062d15914439a698d6bb700b2c7536313ce4af3f8090b453346",
"format": 1
},
{
- "name": "tests/test_playbooks/filters.yml",
+ "name": "tests/test_playbooks/content_view_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3608267dab77d1ca56db8ffbd4a14a07984fb62acc7d5140d3c0fc455a406a35",
+ "chksum_sha256": "2bda29c8f3d93481372884747c73441786cb9ffc6bbb90fe7393764970cc13f3",
"format": 1
},
{
- "name": "tests/test_playbooks/provisioning_templates_role.yml",
+ "name": "tests/test_playbooks/compute_profile.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2be6d4a9bd19622df32bbd8003e10f1f6a66f4a09c71336b07a625803bfb6874",
+ "chksum_sha256": "859082a968f30318d9ccbdcc5247bae2325bcac2c5b5e24d6ed57c99a97a1f0b",
"format": 1
},
{
- "name": "tests/test_playbooks/content_view_version_cleanup_role.yml",
+ "name": "tests/test_playbooks/content_view_version.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "19053e466d50280a19c8e3374640ed376ab017f8931aa2e8245e8305db72c050",
+ "chksum_sha256": "15f5e56c5526c5cd6f0b6492d70964a6561ec2b774a7475ccfd129aae35f6bd2",
"format": 1
},
{
- "name": "tests/test_playbooks/content_view_info.yml",
+ "name": "tests/test_playbooks/snapshot.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2bda29c8f3d93481372884747c73441786cb9ffc6bbb90fe7393764970cc13f3",
+ "chksum_sha256": "ebde33617cc72013ef86eb5cc60965f4604b11a49a19b0f9621b5d032464faec",
"format": 1
},
{
- "name": "tests/test_playbooks/lifecycle_environments_role.yml",
+ "name": "tests/test_playbooks/compute_resources_role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "33c3f299d491f768d4cd76f2583927e8c92c7bf62b625181a0f2355fc428a1c6",
+ "chksum_sha256": "c31f5438aae09e9f75785a5e333a2503fb240967d7c90fba90d4b52a6bcf75e4",
"format": 1
},
{
- "name": "tests/test_playbooks/inventory_plugin.yml",
+ "name": "tests/test_playbooks/job_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4508c8dedbd64956f04b16d1c069a06d6af988aa7701b5770c2e077f9fb0b898",
+ "chksum_sha256": "41b39428823bd901152b4c39f41a2fe9124a4c5b07f974bf432bb2b0d789b375",
"format": 1
},
{
- "name": "tests/test_playbooks/hostgroup.yml",
+ "name": "tests/test_playbooks/snapshot_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c6e1db4f949963152e0eadcb2b706beaa01480bf726822b329878975ccf35313",
+ "chksum_sha256": "b2ef50c3d41a19712da880706d7a2a4acf2a1bfa795953618cbc640789b99626",
"format": 1
},
{
- "name": "tests/test_playbooks/data",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/test_playbooks/provisioning_template.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "8f466a91b1535f7ac9e973a99ba3b75a0cb2e45a2aef91f80c25e0ef9ec4533b",
"format": 1
},
{
- "name": "tests/test_playbooks/data/ssg-firefox-ds.xml",
+ "name": "tests/test_playbooks/activation_keys_role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "15785f4ad9a01093580753cc34b96afde7a2ee74de3f559bb650b934067c4548",
+ "chksum_sha256": "bb8f9e0912e815ff35a7db6cda407bf6b856ca2a194e96dc95decb3468ec5570",
"format": 1
},
{
- "name": "tests/test_playbooks/data/ansible_hello.erb",
+ "name": "tests/test_playbooks/lifecycle_environment.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4df89e17b3dbb57ab85d5bee498b632392e4fed2a1ac544e44ef9e0d4baef367",
+ "chksum_sha256": "b1441af8f1ef2be4d206c5133cf16480bc1e1e190eadccbc6c343194ade15982",
"format": 1
},
{
- "name": "tests/test_playbooks/data/gpg_key.asc",
+ "name": "tests/test_playbooks/repositories_role_deb.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9244411a6ae49eaca3880fe1a15743f85000a2acdb70b0b3fd90d17e672c6060",
+ "chksum_sha256": "6344aecd9af57452854219eb9c1edd1620b4be8ed2e21744a7f89b0d479edaf3",
"format": 1
},
{
- "name": "tests/test_playbooks/data/delete_file.erb",
+ "name": "tests/test_playbooks/content_upload_deb.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a910958bbb131a8a371ba033721b40f0881d054153765463f337333a1762e98a",
+ "chksum_sha256": "f917c8747e313cd9431a8cff4c9584ec9e8d1b3a13a8e978cd23035dad0f8b48",
"format": 1
},
{
- "name": "tests/test_playbooks/data/gpg_key2.asc",
+ "name": "tests/test_playbooks/hostgroup.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "917d9c58a79f9a68e71fad739dda2728edbd8a7cde235245c7852f330663613f",
+ "chksum_sha256": "c6e1db4f949963152e0eadcb2b706beaa01480bf726822b329878975ccf35313",
"format": 1
},
{
- "name": "tests/test_playbooks/data/file_repo_test.txt",
+ "name": "tests/test_playbooks/filters.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c2e8413929f47c7ce4b23855eda63442f323279455d35dadebf44892503bde3b",
+ "chksum_sha256": "455edad1812bfcf2e4235e1ae6d885b31af932519b32640349e5b05ee254baf9",
"format": 1
},
{
- "name": "tests/test_playbooks/data/bear-4.1-1.noarch.rpm",
+ "name": "tests/test_playbooks/status_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7a831f9f90bf4d21027572cb503d20b702de8e8785b02c0397445c2e481d81b3",
+ "chksum_sha256": "2993c27af314f1bb483b6a3b7da583e21384c09253e0353fc5f21742f87a00d1",
"format": 1
},
{
- "name": "tests/test_playbooks/data/test-srpm01-1.0-1.src.rpm",
+ "name": "tests/test_playbooks/compute_resource.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d30d1fe1a0d4d5e9ab22ae948004d2f605ce284a07e8265108a5477f4cc2357a",
+ "chksum_sha256": "7e283b5e3a57a505dbb78eceea6bef4a12f7dfc108b898e446022537a7d194eb",
"format": 1
},
{
- "name": "tests/test_playbooks/data/ssg-firefox-ds-tailoring.xml",
+ "name": "tests/test_playbooks/settings_role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "76629bf47148c037cfcbf1ad15a9f99de57b98d6ac4ebdaad1d7d069fdb9fc3a",
+ "chksum_sha256": "7e0da012824b320acd0924f861f64f2308dc20ec933f25887ebfa96a1afabc3d",
"format": 1
},
{
- "name": "tests/test_playbooks/data/fixtures_small_repo.tar",
+ "name": "tests/test_playbooks/host_power.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "40a7bed5ec596295373fb60a69b55a2c187de19b9314da90e93a60c30337720f",
+ "chksum_sha256": "2209005061dba266d58fb0e6463e3c96b54ddbe37ffbb849a6c922f90e8f7b8d",
"format": 1
},
{
- "name": "tests/test_playbooks/data/odin_1.0_ppc64.deb",
+ "name": "tests/test_playbooks/wait_for_task.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "52b8ef90538c3dd2ff9306664311ec6fce085c31a6e7a51fa7241990b870fb05",
+ "chksum_sha256": "aad651dc0fe9c180361ec1de4f568f224424b5eaa8a4bb76dd527c4270339272",
"format": 1
},
{
- "name": "tests/test_playbooks/data/manifest_foreman-ansible-modules.zip",
+ "name": "tests/test_playbooks/content_export_library.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "efdb1869fb5acf738d8e13487160a0a94e89703b038f444adf2c69e1103326e0",
+ "chksum_sha256": "60cd22111b38c736bb2d34933565d2e91497aaa974e1ac10e29e39be13c8bc94",
"format": 1
},
{
- "name": "tests/test_playbooks/domains_role.yml",
+ "name": "tests/test_playbooks/content_export_repository.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "42d6644dae575f27342473ae5d6ee6d225f065ef20d85ff17b309ac8e4975162",
+ "chksum_sha256": "82ba06d0acdf8c68f0aed3ba6f7d80d611a8feb9c7919e68b97c15fdbbf406b4",
"format": 1
},
{
- "name": "tests/test_playbooks/subscription_manifest.yml",
+ "name": "tests/test_playbooks/content_view_filter.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "010342e519e845f4fc87ee1e7c1778cc8795164ae493fe682a6b4354e2bb0bbc",
+ "chksum_sha256": "d3c0fd7019113a29e15f465fe9da44ab55073791cafee3061d65c23c1fd12959",
"format": 1
},
{
- "name": "tests/test_playbooks/repository_set_info.yml",
+ "name": "tests/test_playbooks/setting.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c337f4a79f4db5485f5f6dc9312e74fd6b5516ee28d1a37fed50ee0381045bd2",
+ "chksum_sha256": "084b62aa0296834002292453cf2a985a4e8f68520ca64d60e7c6196cbdd5978c",
"format": 1
},
{
- "name": "tests/test_playbooks/operatingsystem.yml",
+ "name": "tests/test_playbooks/partition_table.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f8ee83a593c0923ca90007096d0c5d2ce237f77b881807876011b5a7286804fd",
+ "chksum_sha256": "7de0f00bc0d94ff199d5be58d0f6b1fec72da9c431d08371be97c313d28f02a1",
"format": 1
},
{
- "name": "tests/test_playbooks/external_usergroup.yml",
+ "name": "tests/test_playbooks/registration_command.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6e55a288eb663ae8426dea731f7e719bc30d04c647a567acced2859be321f00e",
+ "chksum_sha256": "a786dd8a202a9c60838ca7b54192039886bcd5913caa3daa229dfe4e99893106",
"format": 1
},
{
- "name": "tests/test_playbooks/discovery_rule.yml",
+ "name": "tests/test_playbooks/host_collection.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ac7ce44d7134e0d3c45f85a4fdcd5f501765365531424ee6263f1f509244c736",
+ "chksum_sha256": "6d0f7de098e2a87a67cc4e60a00d26fab405fcdd3d718a6cb7ccb466a4eede26",
"format": 1
},
{
- "name": "tests/test_playbooks/content_export_library.yml",
+ "name": "tests/test_playbooks/subscription_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "60cd22111b38c736bb2d34933565d2e91497aaa974e1ac10e29e39be13c8bc94",
+ "chksum_sha256": "697b0084d97ea6b648333c07e106dbd99bf92ecf9536c8aec55e4e0e53f35a46",
"format": 1
},
{
- "name": "tests/test_playbooks/compute_profile_ovirt.yml",
+ "name": "tests/test_playbooks/image.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9ef7661b97593e6690840e1cced2b3457c102328dbab56fddec2c9df6430481a",
+ "chksum_sha256": "9921d75a324b5a2933e656cf911d0141c3a1c8dfa8a6b340d6f7a47c045803f3",
"format": 1
},
{
- "name": "tests/test_playbooks/scap_content.yml",
+ "name": "tests/test_playbooks/templates_import.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9a658a7dac30cf49c51e87b7538e6d8d96e3881c50896cf10b5bf0ede7a7f83a",
+ "chksum_sha256": "b948cd2184e1a2de070bd60084694425e67709134605a3c15a411de8ad107e5c",
"format": 1
},
{
- "name": "tests/test_playbooks/partition_table.yml",
+ "name": "tests/test_playbooks/content_rhel_role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7de0f00bc0d94ff199d5be58d0f6b1fec72da9c431d08371be97c313d28f02a1",
+ "chksum_sha256": "8617ac0b2e21c5448042e1a1df5bcebfcdb307ca38d0251e42cbd81a676c7fb4",
"format": 1
},
{
- "name": "tests/test_playbooks/repository_info.yml",
+ "name": "tests/test_playbooks/external_usergroup.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8f82cb4956c757ea94f71397d8f3fe6d569b85726a8473a6697844a154e3e867",
+ "chksum_sha256": "6e55a288eb663ae8426dea731f7e719bc30d04c647a567acced2859be321f00e",
"format": 1
},
{
- "name": "tests/test_playbooks/vars",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/test_playbooks/domain.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "718191e9161d876db01d024ca91f0198d56497acc78ee6bf492a6e1bbf1706f2",
"format": 1
},
{
- "name": "tests/test_playbooks/vars/compute_profile.yml",
+ "name": "tests/test_playbooks/katello_smart_proxy.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1e0a3ca445c67ce6afc5949ff2a88c3527dbce7f95796bb6fa9b172a4f1841f4",
+ "chksum_sha256": "bb92f6f1e48d2b90b4bbe7255abe0e138bd72056c0f9950a89a3797c6e98d967",
"format": 1
},
{
- "name": "tests/test_playbooks/vars/search_facts.yml",
+ "name": "tests/test_playbooks/module_defaults.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "38be51c3353d061c4ed76cb24d21a93dd57b3b7b65f375869e08db0a1d1007a3",
+ "chksum_sha256": "c3266063dabda206324302777fe9357fedd7653160b503861ac4a4f2f7b5b0d3",
"format": 1
},
{
- "name": "tests/test_playbooks/vars/subnet.yml",
+ "name": "tests/test_playbooks/global_parameter.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "266d22c35d9eb726aa97bf8b9105cac1fa2b3e95585b4d413abe215bc79a0e7c",
+ "chksum_sha256": "7084a96e0b47f0ba920b7b9875f0a517fe05fafa48d97128e1466fefe7b2a670",
"format": 1
},
{
- "name": "tests/test_playbooks/vars/templates_import.yml",
+ "name": "tests/test_playbooks/resource_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "17513f16ca851b4b61cb99f22dd9f376ebbf23a8f1c8209491fd3fdc13c01acb",
+ "chksum_sha256": "4f747bab4aeb62da6902e4b69ae2eaf41bdc110a8a1b7fb401e8705d0d79f1c4",
"format": 1
},
{
- "name": "tests/test_playbooks/vars/hostgroup.yml",
+ "name": "tests/test_playbooks/scap_content.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1d0925204226f0d6f738093aa8881a50d6fb38796b3de552e569aae9d2029b81",
+ "chksum_sha256": "9a658a7dac30cf49c51e87b7538e6d8d96e3881c50896cf10b5bf0ede7a7f83a",
"format": 1
},
{
- "name": "tests/test_playbooks/vars/host.yml",
+ "name": "tests/test_playbooks/content_credentials_role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6ff793b72dd89c9fdf0673f4840c2e37083d0e107bdf2d92fc6bc63f55c826a8",
+ "chksum_sha256": "2da76e927847b2f5f36ce0542429892e87005050eb6552eff7da6e6c60f4ab0d",
"format": 1
},
{
- "name": "tests/test_playbooks/vars/server.yml.example",
+ "name": "tests/test_playbooks/repository_deb.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a552bb9c91cbacceed893504bf1babc207172ef1be5984fc3ea573db27260f59",
+ "chksum_sha256": "001e6616575006b46bdc22cdeb6e19c672d243ccc44e82cd1bbd5ea6c7245b69",
"format": 1
},
{
- "name": "tests/test_playbooks/vars/usergroup.yml",
+ "name": "tests/test_playbooks/content_export_version.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "99c8b30e3ccaf7613aac3c3a604d3ffa26ae005f86dc91396bc61598a74ac353",
+ "chksum_sha256": "f0061cb49b21322ccc56aa05fad7f46f3e3ab7b2989b0145f6e01f0d7c3565fd",
"format": 1
},
{
- "name": "tests/test_playbooks/vars/domain.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "123ca22ceb26a919de3804f86747438ea706cf39a453728cdc0849e8eba8817a",
+ "name": "tests/test_playbooks/data",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/test_playbooks/module_defaults.yml",
+ "name": "tests/test_playbooks/data/gpg_key2.asc",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c3266063dabda206324302777fe9357fedd7653160b503861ac4a4f2f7b5b0d3",
+ "chksum_sha256": "917d9c58a79f9a68e71fad739dda2728edbd8a7cde235245c7852f330663613f",
"format": 1
},
{
- "name": "tests/test_playbooks/host_errata_info.yml",
+ "name": "tests/test_playbooks/data/gpg_key.asc",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9ef475cc0aeb7e25803224d4e1d56c3b5f4cb687e85bc31d424fe0e127e03b52",
+ "chksum_sha256": "9244411a6ae49eaca3880fe1a15743f85000a2acdb70b0b3fd90d17e672c6060",
"format": 1
},
{
- "name": "tests/test_playbooks/compute_attribute.yml",
+ "name": "tests/test_playbooks/data/ansible_hello.erb",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c5d33e7899e497d2fb781367fba911efb59edf30e9cbecc12d3ef0c724a4cba0",
+ "chksum_sha256": "4df89e17b3dbb57ab85d5bee498b632392e4fed2a1ac544e44ef9e0d4baef367",
"format": 1
},
{
- "name": "tests/test_playbooks/puppetclasses_import.yml",
+ "name": "tests/test_playbooks/data/ssg-firefox-ds-tailoring.xml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "97d03015cf3ac4569321a352adcc488c478e303ebdc17d77dd857a6f41d50e1d",
+ "chksum_sha256": "76629bf47148c037cfcbf1ad15a9f99de57b98d6ac4ebdaad1d7d069fdb9fc3a",
"format": 1
},
{
- "name": "tests/test_playbooks/smart_class_parameter_override_value.yml",
+ "name": "tests/test_playbooks/data/fixtures_small_repo.tar",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7f7a8f20864afdcf2c4b8292c8b954615dc796b0cbc4933308935f3bdf42cf20",
+ "chksum_sha256": "40a7bed5ec596295373fb60a69b55a2c187de19b9314da90e93a60c30337720f",
"format": 1
},
{
- "name": "tests/test_playbooks/repository_sync.yml",
+ "name": "tests/test_playbooks/data/delete_file.erb",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c5f788be67959c40061b4e4ef4b473e93924625de8ace766ab0a1b944e9524ff",
+ "chksum_sha256": "a910958bbb131a8a371ba033721b40f0881d054153765463f337333a1762e98a",
"format": 1
},
{
- "name": "tests/test_playbooks/scap_tailoring_file.yml",
+ "name": "tests/test_playbooks/data/test-srpm01-1.0-1.src.rpm",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "122f9e9cec0e915ad77aafdd4c83294dd1fccf6cc316cf3359205b526eb35bae",
+ "chksum_sha256": "d30d1fe1a0d4d5e9ab22ae948004d2f605ce284a07e8265108a5477f4cc2357a",
"format": 1
},
{
- "name": "tests/test_playbooks/katello_hostgroup.yml",
+ "name": "tests/test_playbooks/data/ssg-firefox-ds.xml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4a5765b5814c9aa3e6add573f26f01486a4a3b0b283f6c474aadd169906b9772",
+ "chksum_sha256": "15785f4ad9a01093580753cc34b96afde7a2ee74de3f559bb650b934067c4548",
"format": 1
},
{
- "name": "tests/test_playbooks/luna_hostgroup.yml",
+ "name": "tests/test_playbooks/data/odin_1.0_ppc64.deb",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "18ae107f6d1e2677ebcb261f9555a7b8bf3a0c00465475e7276a3c38cb64e3b0",
+ "chksum_sha256": "52b8ef90538c3dd2ff9306664311ec6fce085c31a6e7a51fa7241990b870fb05",
"format": 1
},
{
- "name": "tests/test_playbooks/host.yml",
+ "name": "tests/test_playbooks/data/manifest_foreman-ansible-modules.zip",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5aac773f47496a01f08833b44e2477d440c53b1bd07d9d6e2a51d6af0045c2bc",
+ "chksum_sha256": "efdb1869fb5acf738d8e13487160a0a94e89703b038f444adf2c69e1103326e0",
"format": 1
},
{
- "name": "tests/test_playbooks/auth_source_ldap.yml",
+ "name": "tests/test_playbooks/data/file_repo_test.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "53ee833eef3f0932c1d808558705b86db08ddb40cf7a54d2f894357eb020283a",
+ "chksum_sha256": "c2e8413929f47c7ce4b23855eda63442f323279455d35dadebf44892503bde3b",
"format": 1
},
{
- "name": "tests/test_playbooks/subnets_role.yml",
+ "name": "tests/test_playbooks/data/bear-4.1-1.noarch.rpm",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7cbdc5be36a36062d15914439a698d6bb700b2c7536313ce4af3f8090b453346",
+ "chksum_sha256": "7a831f9f90bf4d21027572cb503d20b702de8e8785b02c0397445c2e481d81b3",
"format": 1
},
{
- "name": "tests/test_playbooks/job_template.yml",
+ "name": "tests/test_playbooks/content_upload_ostree.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "41b39428823bd901152b4c39f41a2fe9124a4c5b07f974bf432bb2b0d789b375",
+ "chksum_sha256": "42d5340d856f7a1e271c31991a0513e5ac89f206cc1a2533515c6c388ac9cdad",
"format": 1
},
{
- "name": "tests/test_playbooks/repository_deb.yml",
+ "name": "tests/test_playbooks/installation_medium.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "001e6616575006b46bdc22cdeb6e19c672d243ccc44e82cd1bbd5ea6c7245b69",
+ "chksum_sha256": "3c1c1a8a00b8a90b94a61d5938ba3da30721beac9950db8439979708bfd0f980",
"format": 1
},
{
- "name": "tests/test_playbooks/content_export_version.yml",
+ "name": "tests/test_playbooks/content_upload.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f0061cb49b21322ccc56aa05fad7f46f3e3ab7b2989b0145f6e01f0d7c3565fd",
+ "chksum_sha256": "ee0b06006da7674b50c6468a5665d6eb1e65c6546b3f52eb48487d43713408f0",
"format": 1
},
{
- "name": "tests/test_playbooks/image.yml",
+ "name": "tests/test_playbooks/host_interface_attributes.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9921d75a324b5a2933e656cf911d0141c3a1c8dfa8a6b340d6f7a47c045803f3",
+ "chksum_sha256": "1ed2cbcfb5717b11258033cedbce88c8f90e0306a7200dc5c719f36c272f5393",
"format": 1
},
{
- "name": "tests/test_playbooks/user.yml",
+ "name": "tests/test_playbooks/lifecycle_environments_role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "da6add6aea06a0866f23298b3b464c46cf50e20fc858e696c7656bb753f61b0c",
+ "chksum_sha256": "33c3f299d491f768d4cd76f2583927e8c92c7bf62b625181a0f2355fc428a1c6",
"format": 1
},
{
- "name": "tests/test_playbooks/content_upload_ostree.yml",
+ "name": "tests/test_playbooks/locations_role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "42d5340d856f7a1e271c31991a0513e5ac89f206cc1a2533515c6c388ac9cdad",
+ "chksum_sha256": "d908f512d1d6efd4c7d7cf56e9a1f79d1e3b5bfa040b2ba6d7ccac8d45c6344b",
"format": 1
},
{
- "name": "tests/test_playbooks/lifecycle_environment.yml",
+ "name": "tests/test_playbooks/hardware_model.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b1441af8f1ef2be4d206c5133cf16480bc1e1e190eadccbc6c343194ade15982",
+ "chksum_sha256": "c42240503b393f565dfe1c5b5dac4cff34a48adcfbeeb8e85bfe6701d4f8d564",
"format": 1
},
{
- "name": "tests/test_playbooks/repositories_role.yml",
+ "name": "tests/test_playbooks/content_views_role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5f3088f29cf3df66a423d091fd8289b0aea66b2a62f14cf2e4d21c20b9f8fd7c",
+ "chksum_sha256": "09c570f39c23c370a1043ffaa302d8f6f72de6c6137a258da6056af5f417cd81",
"format": 1
},
{
- "name": "tests/test_playbooks/architecture.yml",
+ "name": "tests/test_playbooks/vars",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/test_playbooks/vars/compute_profile.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "002a07db993b4f618cdeb8edf08ed86a1dc3d1a1fe2b0a2e6621244b35cfb912",
+ "chksum_sha256": "1e0a3ca445c67ce6afc5949ff2a88c3527dbce7f95796bb6fa9b172a4f1841f4",
"format": 1
},
{
- "name": "tests/test_playbooks/status_info.yml",
+ "name": "tests/test_playbooks/vars/search_facts.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2993c27af314f1bb483b6a3b7da583e21384c09253e0353fc5f21742f87a00d1",
+ "chksum_sha256": "38be51c3353d061c4ed76cb24d21a93dd57b3b7b65f375869e08db0a1d1007a3",
"format": 1
},
{
- "name": "tests/test_playbooks/content_rhel_role.yml",
+ "name": "tests/test_playbooks/vars/hostgroup.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8617ac0b2e21c5448042e1a1df5bcebfcdb307ca38d0251e42cbd81a676c7fb4",
+ "chksum_sha256": "1d0925204226f0d6f738093aa8881a50d6fb38796b3de552e569aae9d2029b81",
"format": 1
},
{
- "name": "tests/test_playbooks/usergroup.yml",
+ "name": "tests/test_playbooks/vars/templates_import.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7d1e4f49287be1b7a14cae79ad4c33fff29290b891698bc37149726c4eb56515",
+ "chksum_sha256": "17513f16ca851b4b61cb99f22dd9f376ebbf23a8f1c8209491fd3fdc13c01acb",
"format": 1
},
{
- "name": "tests/test_playbooks/redhat_manifest.yml",
+ "name": "tests/test_playbooks/vars/domain.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "17655c12342e5707dd1e9cc0512848ddb3b42467f7d8a5b3b122322403af8753",
+ "chksum_sha256": "123ca22ceb26a919de3804f86747438ea706cf39a453728cdc0849e8eba8817a",
"format": 1
},
{
- "name": "tests/test_playbooks/domain_info.yml",
+ "name": "tests/test_playbooks/vars/server.yml.example",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c6add945cba983ac45fa4e5db63fb804eb0ab0328fb11744256ef93ec3c35fed",
+ "chksum_sha256": "a552bb9c91cbacceed893504bf1babc207172ef1be5984fc3ea573db27260f59",
"format": 1
},
{
- "name": "tests/test_playbooks/content_view_publish_role.yml",
+ "name": "tests/test_playbooks/vars/host.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fd499987163cd69c67d26296d49d4347d22631167722cc7764b7a6be3a314ada",
+ "chksum_sha256": "6ff793b72dd89c9fdf0673f4840c2e37083d0e107bdf2d92fc6bc63f55c826a8",
"format": 1
},
{
- "name": "tests/test_playbooks/host_interface_attributes.yml",
+ "name": "tests/test_playbooks/vars/usergroup.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1ed2cbcfb5717b11258033cedbce88c8f90e0306a7200dc5c719f36c272f5393",
+ "chksum_sha256": "99c8b30e3ccaf7613aac3c3a604d3ffa26ae005f86dc91396bc61598a74ac353",
"format": 1
},
{
- "name": "tests/test_playbooks/repository_set.yml",
+ "name": "tests/test_playbooks/vars/subnet.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0ed75b2f780847b38687e56b312e0e6afaa4a7efbd05add05f818c918ee9351f",
+ "chksum_sha256": "266d22c35d9eb726aa97bf8b9105cac1fa2b3e95585b4d413abe215bc79a0e7c",
"format": 1
},
{
- "name": "tests/test_playbooks/domain.yml",
+ "name": "tests/test_playbooks/hostgroups_role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "718191e9161d876db01d024ca91f0198d56497acc78ee6bf492a6e1bbf1706f2",
+ "chksum_sha256": "605445428e580cf07de586b00fcfa3df2ccc0694cca90566c2f0f23a49064e3f",
"format": 1
},
{
- "name": "tests/test_playbooks/repositories_role_deb.yml",
+ "name": "tests/test_playbooks/auth_source_ldap.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6344aecd9af57452854219eb9c1edd1620b4be8ed2e21744a7f89b0d479edaf3",
+ "chksum_sha256": "53ee833eef3f0932c1d808558705b86db08ddb40cf7a54d2f894357eb020283a",
"format": 1
},
{
@@ -3046,255 +3088,255 @@
"format": 1
},
{
- "name": "tests/test_playbooks/content_view_version_info.yml",
+ "name": "tests/test_playbooks/operatingsystems_role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8b25e58f5cdc05ed9a98f962629622c8e8e4c7db84982c02bda3b4a19c53a529",
+ "chksum_sha256": "37863dca5cb279894ad0ad38af5577327f09ba633157e13cbcabdbc7382152e1",
"format": 1
},
{
- "name": "tests/test_playbooks/manifest_role.yml",
+ "name": "tests/test_playbooks/content_view_publish_role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e0b555f00ca5e45982ac7a10f464d0a70d356332891e7c976bbca02aa3cef11e",
+ "chksum_sha256": "fd499987163cd69c67d26296d49d4347d22631167722cc7764b7a6be3a314ada",
"format": 1
},
{
- "name": "tests/test_playbooks/subnet_info.yml",
+ "name": "tests/test_playbooks/content_view_version_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ba37eb45f218edb0d5f72df6c5b44380b5613a037111190b2bda53c472a62342",
+ "chksum_sha256": "8b25e58f5cdc05ed9a98f962629622c8e8e4c7db84982c02bda3b4a19c53a529",
"format": 1
},
{
- "name": "tests/test_playbooks/snapshot_info.yml",
+ "name": "tests/test_playbooks/repositories_role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b2ef50c3d41a19712da880706d7a2a4acf2a1bfa795953618cbc640789b99626",
+ "chksum_sha256": "5f3088f29cf3df66a423d091fd8289b0aea66b2a62f14cf2e4d21c20b9f8fd7c",
"format": 1
},
{
- "name": "tests/test_playbooks/smart_proxy.yml",
+ "name": "tests/test_playbooks/http_proxy.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "931dd93609e7e495fd0c9176dfb56b056b9bc7f7c04c139b6325ca4934c45116",
+ "chksum_sha256": "a07d50e8ff479ef59e9baf94384a15ec28ed3e2b5183746e1d58a81ae98491bd",
"format": 1
},
{
- "name": "tests/test_playbooks/content_view_filter.yml",
+ "name": "tests/test_playbooks/compute_profiles_role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b1e555c46fc6b1948652a64a9514a3caa2faead360a13304d75aeb681e5bbc83",
+ "chksum_sha256": "1b3f1b24944f24df45849fadadd3961d918d033240015d4aad8fbfe2eb6d9a39",
"format": 1
},
{
- "name": "tests/test_playbooks/content_export_info.yml",
+ "name": "tests/test_playbooks/operatingsystem.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2fa0cdb718c350e95914ccab3cc23d72fa67b833042736aeda175987df93730b",
+ "chksum_sha256": "f8ee83a593c0923ca90007096d0c5d2ce237f77b881807876011b5a7286804fd",
"format": 1
},
{
- "name": "tests/test_playbooks/locations_role.yml",
+ "name": "tests/test_playbooks/os_default_template.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d908f512d1d6efd4c7d7cf56e9a1f79d1e3b5bfa040b2ba6d7ccac8d45c6344b",
+ "chksum_sha256": "ed4c9899dced47607d4a66075ba69aec0871032e9e603ceb05a0233d8526b64b",
"format": 1
},
{
- "name": "tests/test_playbooks/content_credentials_role.yml",
+ "name": "tests/test_playbooks/organization_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2da76e927847b2f5f36ce0542429892e87005050eb6552eff7da6e6c60f4ab0d",
+ "chksum_sha256": "6d232a41f8747fa739c295f42bb96d6ca23d1b990d21e425bcf3224d181ac284",
"format": 1
},
{
- "name": "tests/test_playbooks/content_view_version.yml",
+ "name": "tests/test_playbooks/katello_hostgroup.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "15f5e56c5526c5cd6f0b6492d70964a6561ec2b774a7475ccfd129aae35f6bd2",
+ "chksum_sha256": "4a5765b5814c9aa3e6add573f26f01486a4a3b0b283f6c474aadd169906b9772",
"format": 1
},
{
- "name": "tests/test_playbooks/job_invocation.yml",
+ "name": "tests/test_playbooks/convert2rhel.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fa0ac97b8afb54cb9dc8d404e728aed4485f6875111cdba92d53abdc18357093",
+ "chksum_sha256": "331d776014950689865561f4413845238086175761a28853f1da79b9f048b697",
"format": 1
},
{
- "name": "tests/utils.py",
+ "name": "tests/test_playbooks/setting_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e70262b4d0694a372c0fd5416c38d68828f2b936b451de35132d45cfad39ca28",
+ "chksum_sha256": "a190fe6080d9a67829070b753bc54f5a31ec9270c68d72ae2c8767fafa6e03c2",
"format": 1
},
{
- "name": "tests/test_callback.py",
+ "name": "tests/test_playbooks/content_view_filter_rule_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "31e9eb51f0bbe8698e26b280f4cba83ee9fa7fdf4fde8e4a442859298fb29c13",
+ "chksum_sha256": "df3d81cff47a2fa1508db46623f53cf9bbd41d3d13bd861a3c77cbdb5ba90fcc",
"format": 1
},
{
- "name": "tests/test_recursive_dict_keys.py",
+ "name": "tests/test_playbooks/host_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "99090ddd8120e9492784848d7b6d6b39d98e836543aa4d431de85af4cf885049",
+ "chksum_sha256": "73818a6b30014218555ebc5f4d1932b97f89d1e70525b546b68e46cf9dd2c330",
"format": 1
},
{
- "name": "tests/vcr_python_wrapper.py",
+ "name": "tests/test_playbooks/compute_profile_ovirt.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "62826bcc3ac73fda8a3585d2297ecb20e84a6ef096eb354e9b42f9f4cca17ed8",
+ "chksum_sha256": "9ef7661b97593e6690840e1cced2b3457c102328dbab56fddec2c9df6430481a",
"format": 1
},
{
- "name": "tests/inventory",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/test_playbooks/provisioning_templates_role.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2be6d4a9bd19622df32bbd8003e10f1f6a66f4a09c71336b07a625803bfb6874",
"format": 1
},
{
- "name": "tests/inventory/inventory_plugin_ansible.foreman.yml",
+ "name": "tests/test_playbooks/content_view_version_cleanup_role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fb3a70e85a740376f372ec0ed23f8baa3f68bbe375df3c48a89257ff11ac7800",
+ "chksum_sha256": "19053e466d50280a19c8e3374640ed376ab017f8931aa2e8245e8305db72c050",
"format": 1
},
{
- "name": "tests/inventory/inventory_plugin.foreman.yml",
+ "name": "tests/test_playbooks/host_errata_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3f94da67fc336acebc1fd3e52e0634a42e1af1d7c39a7c446e0afe06461ad406",
+ "chksum_sha256": "9ef475cc0aeb7e25803224d4e1d56c3b5f4cb687e85bc31d424fe0e127e03b52",
"format": 1
},
{
- "name": "tests/inventory/hosts",
+ "name": "tests/test_playbooks/host.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "53370d9c2dab332dd16dc7551fa164e5c9c2e749e358153857c7eea3f5377c08",
+ "chksum_sha256": "5aac773f47496a01f08833b44e2477d440c53b1bd07d9d6e2a51d6af0045c2bc",
"format": 1
},
{
- "name": "tests/__init__.py",
+ "name": "tests/test_playbooks/content_view.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "1f16a6f60490ad56fdb2df1631e00a1d376dbbc7754222927f55269e6af6d865",
"format": 1
},
{
- "name": "tests/fixtures",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/test_playbooks/smart_class_parameter.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "585d776164603a13c81f232b628a419a492bde6ce780fc678c2169b873efe20a",
"format": 1
},
{
- "name": "tests/fixtures/callback",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/test_playbooks/content_export_info.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "2fa0cdb718c350e95914ccab3cc23d72fa67b833042736aeda175987df93730b",
"format": 1
},
{
- "name": "tests/fixtures/callback/dir_store",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/test_playbooks/usergroup.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "7d1e4f49287be1b7a14cae79ad4c33fff29290b891698bc37149726c4eb56515",
"format": 1
},
{
- "name": "tests/fixtures/callback/dir_store/proxy",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/test_playbooks/subnet.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "eb612d68caeccf428fe3901211889be8fdb832d7949e1971e2336f37a197f892",
"format": 1
},
{
- "name": "tests/fixtures/callback/dir_store/proxy/testhost.json",
+ "name": "tests/test_playbooks/hostgroup_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "38df7978c1ac7a1505631bb32e251819b0454d29ed78de4cbd1e61b264279ec6",
+ "chksum_sha256": "b5c7339154427a8caae9f9dc5434148c92e20e73d29b0f67e4f71c492dc6e1fc",
"format": 1
},
{
- "name": "tests/fixtures/callback/dir_store/proxy/testhostB.json",
+ "name": "tests/test_playbooks/subscription_manifest.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "461595dd224aef052f6c07e705f14b38d245e37b4d473cd2ddc6cf47a51555b4",
+ "chksum_sha256": "010342e519e845f4fc87ee1e7c1778cc8795164ae493fe682a6b4354e2bb0bbc",
"format": 1
},
{
- "name": "tests/fixtures/callback/dir_store/proxy/testhostA.json",
+ "name": "tests/test_playbooks/role.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4ae93f4517389d6a0501064398a836cde4bcf1106b03a8bc3a49d448ddcb2f6d",
+ "chksum_sha256": "f4bf9d429bb491a0d027d8bd74020d346b5f096fcbb0c398754c41ed560ae9f7",
"format": 1
},
{
- "name": "tests/fixtures/callback/dir_store/foreman",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/test_playbooks/scc_account.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6f789a066205e378560cf84505d080c01ca585aea60475277bb98e9b65fd82b5",
"format": 1
},
{
- "name": "tests/fixtures/callback/dir_store/foreman/testhost.json",
+ "name": "tests/test_playbooks/config_group.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f6530abf8cebedb754e843db997797e796be820b091343293ad7babf883e37e7",
+ "chksum_sha256": "1c9a269e6832694583940c6c8b711aa66e1321d3dbc48c188e3986ef66d545f4",
"format": 1
},
{
- "name": "tests/fixtures/callback/dir_store/foreman/testhostB.json",
+ "name": "tests/test_playbooks/organization.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "88468be2c605bef5c25305ac2b54fb3fa012a3ad0f98cdddb72b26cf5cc7a334",
+ "chksum_sha256": "c22be82bde8762bff4ddebf41396420342a8c7f81ef0fa41cf1c8059685b645b",
"format": 1
},
{
- "name": "tests/fixtures/callback/dir_store/foreman/testhostA.json",
+ "name": "tests/test_playbooks/subnet_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2acd0dece63c65d7260e1bd5b7e81e262a3c462f7a540aee8b4ca23879838743",
+ "chksum_sha256": "ba37eb45f218edb0d5f72df6c5b44380b5613a037111190b2bda53c472a62342",
"format": 1
},
{
- "name": "tests/galaxy-importer.cfg",
+ "name": "tests/test_playbooks/bookmark.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dfa6ccfb5b2cbd4d2fd9c8aa4e97ac11e71d4fc8b56096d03856c822c0f1e830",
+ "chksum_sha256": "1a324f0aed22368ac8d37cfb1b971060666c01abef14e469ad604f6b7c2f162e",
"format": 1
},
{
- "name": "tests/test_module_state.py",
+ "name": "tests/test_playbooks/repository_set_info.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d7ff18765245227c5399fb694616ccb9994e9acf1e63c3db478509605302a5d7",
+ "chksum_sha256": "c337f4a79f4db5485f5f6dc9312e74fd6b5516ee28d1a37fed50ee0381045bd2",
"format": 1
},
{
- "name": "tests/callback",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/test_recursive_dict_keys.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "99090ddd8120e9492784848d7b6d6b39d98e836543aa4d431de85af4cf885049",
"format": 1
},
{
- "name": "tests/callback/three_hosts",
+ "name": "tests/galaxy-importer.cfg",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "85fd7fb492caf7be88fe00db8f3b7927dc2fdf30c440ad38127aa0aff06f3e3d",
+ "chksum_sha256": "dfa6ccfb5b2cbd4d2fd9c8aa4e97ac11e71d4fc8b56096d03856c822c0f1e830",
"format": 1
},
{
- "name": "tests/callback/three_hosts.yml",
+ "name": "tests/test_crud.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8dcbfccdbd847bd2fc0ec65f0d42887b3ead6a8b60ed8a2f5abc8feb639b2b13",
+ "chksum_sha256": "d11bf14b1659ac6b1e1c4828e74171befe3cfd0d9aba2f4913573c3924e8a2fd",
"format": 1
}
],
diff --git a/ansible_collections/theforeman/foreman/MANIFEST.json b/ansible_collections/theforeman/foreman/MANIFEST.json
index 862409c5c..eca4f87a3 100644
--- a/ansible_collections/theforeman/foreman/MANIFEST.json
+++ b/ansible_collections/theforeman/foreman/MANIFEST.json
@@ -2,7 +2,7 @@
"collection_info": {
"namespace": "theforeman",
"name": "foreman",
- "version": "3.15.0",
+ "version": "4.0.0",
"authors": [
"@lessfoobar <59063885+lessfoobar@users.noreply.github.com>",
"Adam R\u016f\u017ei\u010dka <aruzicka@redhat.com>",
@@ -28,6 +28,7 @@
"Evgeni Golov <evgeni@golov.de>",
"Ewoud Kohl van Wijngaarden <ewoud@kohlvanwijngaarden.nl>",
"Felix Fontein <felix@fontein.de>",
+ "Francesco Trentini <francesco.trentini@ris.bz.it>",
"Gerald Vogt <gvde@users.noreply.github.com>",
"Greg Swift <gregswift@gmail.com>",
"Griffin Sullivan <gsulliva@redhat.com>",
@@ -36,6 +37,7 @@
"Jameer Pathan <jpathan@redhat.com>",
"James Jeffers <jjeffers@redhat.com>",
"James Stuart <james@stuart.name>",
+ "Jan Jansky <jjansky@redhat.com>",
"Jeffrey van Pelt <jeff@vanpelt.one>",
"Jeremy Albinet <jalbinet@scaleway.com>",
"Jeremy Lenz <jlenz@redhat.com>",
@@ -49,6 +51,7 @@
"Lester Cheung <lcheung@threatmetrix.com>",
"Lester Claudio <claudiol@redhat.com>",
"Lucas Bickel <hairmare@rabe.ch>",
+ "Lukas Kallies <kallies@puzzle-itc.de>",
"Lukas Magauer <Lukas.Magauer@engel.at>",
"Luk\u00e1\u0161 Zapletal <lzap+git@redhat.com>",
"Manisha Singhal <manisha1595@gmail.com>",
@@ -80,6 +83,7 @@
"Sean O'Keeffe <seanokeeffe797@gmail.com>",
"Sorin Sbarnea <sorin.sbarnea@gmail.com>",
"Steffen Fr\u00f6mer <knumskull@users.noreply.github.com>",
+ "Steffen Scheib <steffen@scheib.me>",
"Stoned Elipot <stoned.elipot@gmail.com>",
"Sven Meeus <sven.meeus@scarlet.be>",
"TTherouanne <thomas@therouanne.com>",
@@ -125,7 +129,7 @@
"name": "FILES.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "370e712f251e5fab7718963ac0e513f73743f2f8b1c4d208a098504850d92dfc",
+ "chksum_sha256": "f2a4623f67816eb7a317a5850b4a9614f1a773bf001f0503fe396148b716b237",
"format": 1
},
"format": 1
diff --git a/ansible_collections/theforeman/foreman/changelogs/changelog.yaml b/ansible_collections/theforeman/foreman/changelogs/changelog.yaml
index 7413664d2..ae5efcf3d 100644
--- a/ansible_collections/theforeman/foreman/changelogs/changelog.yaml
+++ b/ansible_collections/theforeman/foreman/changelogs/changelog.yaml
@@ -835,3 +835,24 @@ releases:
name: hostgroup_info
namespace: ''
release_date: '2023-02-20'
+ 4.0.0:
+ changes:
+ breaking_changes:
+ - 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
+ bugfixes:
+ - compute_profile, host - refer to VMware storage pods by name, not id (https://github.com/theforeman/foreman-ansible-modules/issues/1247)
+ fragments:
+ - 1247-reference_storage_pod_name.yml
+ - content_view_filter-drop-rule-management.yml
+ - inventory-no-default-localhost.yml
+ modules:
+ - description: Manage Registration Command
+ name: registration_command
+ namespace: ''
+ - description: Manage Webhooks
+ name: webhook
+ namespace: ''
+ release_date: '2024-01-12'
diff --git a/ansible_collections/theforeman/foreman/meta/runtime.yml b/ansible_collections/theforeman/foreman/meta/runtime.yml
index 9e34e240e..6c2e212db 100644
--- a/ansible_collections/theforeman/foreman/meta/runtime.yml
+++ b/ansible_collections/theforeman/foreman/meta/runtime.yml
@@ -53,6 +53,7 @@ action_groups:
- puppet_environment
- puppetclasses_import
- realm
+ - registration_command
- repository
- repository_info
- repository_set
@@ -81,6 +82,7 @@ action_groups:
- user
- usergroup
- wait_for_task
+ - webhook
plugin_routing:
modules:
foreman_architecture:
diff --git a/ansible_collections/theforeman/foreman/plugins/inventory/foreman.py b/ansible_collections/theforeman/foreman/plugins/inventory/foreman.py
index 1c165196b..076bf2171 100644
--- a/ansible_collections/theforeman/foreman/plugins/inventory/foreman.py
+++ b/ansible_collections/theforeman/foreman/plugins/inventory/foreman.py
@@ -32,7 +32,7 @@ DOCUMENTATION = '''
url:
description:
- URL of the Foreman server.
- default: 'http://localhost:3000'
+ required: true
env:
- name: FOREMAN_SERVER
- name: FOREMAN_SERVER_URL
diff --git a/ansible_collections/theforeman/foreman/plugins/modules/compute_profile.py b/ansible_collections/theforeman/foreman/plugins/modules/compute_profile.py
index dc2f3667f..5f87fdf22 100644
--- a/ansible_collections/theforeman/foreman/plugins/modules/compute_profile.py
+++ b/ansible_collections/theforeman/foreman/plugins/modules/compute_profile.py
@@ -208,7 +208,7 @@ def main():
for volume in ca_module_params['vm_attrs']['volumes_attributes'].values():
if 'storage_pod' in volume:
storage_pod = module.find_storage_pod(volume['storage_pod'], compute_resource, cluster)
- volume['storage_pod'] = storage_pod['id']
+ volume['storage_pod'] = storage_pod['name']
if 'storage_domain' in volume:
storage_domain = module.find_storage_domain(volume['storage_domain'], compute_resource, cluster)
volume['storage_domain'] = storage_domain['id']
diff --git a/ansible_collections/theforeman/foreman/plugins/modules/content_view_filter.py b/ansible_collections/theforeman/foreman/plugins/modules/content_view_filter.py
index ae2d04f94..894784f83 100644
--- a/ansible_collections/theforeman/foreman/plugins/modules/content_view_filter.py
+++ b/ansible_collections/theforeman/foreman/plugins/modules/content_view_filter.py
@@ -28,10 +28,6 @@ description:
- Create and manage content View filters
author: "Sean O'Keeffe (@sean797)"
options:
- architecture:
- description:
- - package architecture
- type: str
name:
description:
- Name of the Content View Filter
@@ -46,7 +42,7 @@ options:
- Name of the content view
required: true
type: str
- filter_state:
+ state:
description:
- State of the content view filter
default: present
@@ -54,6 +50,8 @@ options:
- present
- absent
type: str
+ aliases:
+ - filter_state
repositories:
description:
- List of repositories that include name and product
@@ -61,14 +59,6 @@ options:
default: []
type: list
elements: dict
- rule_state:
- description:
- - State of the content view filter rule
- default: present
- choices:
- - present
- - absent
- type: str
filter_type:
description:
- Content view filter type
@@ -81,54 +71,6 @@ options:
- modulemd
- deb
type: str
- rule_name:
- description:
- - Content view filter rule name or package name
- - If omitted, the value of I(name) will be used if necessary
- aliases:
- - package_name
- - package_group
- - tag
- type: str
- date_type:
- description:
- - Search using the 'Issued On' or 'Updated On'
- - Only valid on I(filter_type=erratum).
- default: updated
- choices:
- - issued
- - updated
- type: str
- end_date:
- description:
- - erratum end date (YYYY-MM-DD)
- type: str
- start_date:
- description:
- - erratum start date (YYYY-MM-DD)
- type: str
- errata_id:
- description:
- - erratum id
- type: str
- max_version:
- description:
- - package maximum version
- type: str
- min_version:
- description:
- - package minimum version
- type: str
- types:
- description:
- - erratum types (enhancement, bugfix, security)
- default: ["bugfix", "enhancement", "security"]
- type: list
- elements: str
- version:
- description:
- - package version
- type: str
inclusion:
description:
- Create an include filter
@@ -187,57 +129,10 @@ entity:
elements: dict
'''
-from ansible_collections.theforeman.foreman.plugins.module_utils.foreman_helper import KatelloMixin, ForemanStatelessEntityAnsibleModule
-
-content_filter_spec = {
- 'id': {},
- 'name': {},
- 'description': {},
- 'repositories': {'type': 'entity_list'},
- 'inclusion': {},
- 'content_view': {'type': 'entity'},
- 'filter_type': {'flat_name': 'type'},
- 'original_packages': {},
- 'original_module_streams': {},
-}
-
-content_filter_rule_erratum_spec = {
- 'id': {},
- 'date_type': {},
- 'end_date': {},
- 'start_date': {},
- 'types': {'type': 'list'},
-}
-
-content_filter_rule_erratum_id_spec = {
- 'id': {},
- 'errata_id': {},
- 'date_type': {},
-}
+from ansible_collections.theforeman.foreman.plugins.module_utils.foreman_helper import KatelloMixin, ForemanEntityAnsibleModule
-content_filter_rule_rpm_spec = {
- 'id': {},
- 'rule_name': {'flat_name': 'name'},
- 'end_date': {},
- 'max_version': {},
- 'min_version': {},
- 'version': {},
- 'architecture': {},
-}
-content_filter_rule_package_group_spec = {
- 'id': {},
- 'rule_name': {'flat_name': 'name'},
- 'uuid': {},
-}
-
-content_filter_rule_docker_spec = {
- 'id': {},
- 'rule_name': {'flat_name': 'name'},
-}
-
-
-class KatelloContentViewFilterModule(KatelloMixin, ForemanStatelessEntityAnsibleModule):
+class KatelloContentViewFilterModule(KatelloMixin, ForemanEntityAnsibleModule):
pass
@@ -246,36 +141,19 @@ def main():
foreman_spec=dict(
name=dict(required=True),
description=dict(),
- repositories=dict(type='list', default=[], elements='dict'),
+ repositories=dict(type='entity_list', default=[], elements='dict'),
inclusion=dict(type='bool', default=False),
original_packages=dict(type='bool'),
content_view=dict(type='entity', scope=['organization'], required=True),
- filter_type=dict(required=True, choices=['rpm', 'package_group', 'erratum', 'docker', 'modulemd', 'deb']),
- filter_state=dict(default='present', choices=['present', 'absent']),
- rule_state=dict(default='present', choices=['present', 'absent']),
- rule_name=dict(aliases=['package_name', 'package_group', 'tag']),
- date_type=dict(default='updated', choices=['issued', 'updated']),
- end_date=dict(),
- errata_id=dict(),
- max_version=dict(),
- min_version=dict(),
- start_date=dict(),
- types=dict(default=["bugfix", "enhancement", "security"], type='list', elements='str'),
- version=dict(),
- architecture=dict(),
+ filter_type=dict(required=True, choices=['rpm', 'package_group', 'erratum', 'docker', 'modulemd', 'deb'], flat_name='type'),
original_module_streams=dict(type='bool'),
),
+ argument_spec=dict(
+ state=dict(default='present', choices=['present', 'absent'], aliases=['filter_state']),
+ ),
entity_opts=dict(scope=['content_view']),
)
- filter_state = module.foreman_params.pop('filter_state')
- rule_state = module.foreman_params.pop('rule_state')
-
- if module.foreman_params['filter_type'] == 'erratum':
- module.foreman_params['rule_name'] = None
- elif 'rule_name' not in module.foreman_params:
- module.foreman_params['rule_name'] = module.foreman_params['name']
-
with module.api_connection():
scope = module.scope_for('organization')
@@ -288,52 +166,16 @@ def main():
repositories.append(module.find_resource_by_name('repositories', repo['name'], params=product_scope, thin=True))
module.foreman_params['repositories'] = repositories
+ if not module.desired_absent:
+ module.foreman_params.pop('organization')
entity = module.lookup_entity('entity')
- content_view_filter = module.ensure_entity(
+ module.ensure_entity(
'content_view_filters',
module.foreman_params,
entity,
params=cv_scope,
- state=filter_state,
- foreman_spec=content_filter_spec,
)
- if content_view_filter is not None and module.foreman_params['filter_type'] not in ['modulemd', 'deb']:
- cv_filter_scope = {'content_view_filter_id': content_view_filter['id']}
- if 'errata_id' in module.foreman_params:
- # should we try to find the errata the user is asking for? or just pass it blindly?
- # errata = module.find_resource('errata', 'id={0}'.format(module.foreman_params['errata_id']), params=scope)
- rule_spec = content_filter_rule_erratum_id_spec
- search_scope = {'errata_id': module.foreman_params['errata_id']}
- search_scope.update(cv_filter_scope)
- search = None
- else:
- rule_spec = globals()['content_filter_rule_%s_spec' % (module.foreman_params['filter_type'])]
- search_scope = cv_filter_scope
- if module.foreman_params['rule_name'] is not None:
- search = 'name="{0}"'.format(module.foreman_params['rule_name'])
- else:
- search = None
- # not using find_resource_by_name here, because not all filters (errata) have names
- content_view_filter_rule = module.find_resource('content_view_filter_rules', search, params=search_scope, failsafe=True) if entity else None
-
- if module.foreman_params['filter_type'] == 'package_group':
- package_group = module.find_resource_by_name('package_groups', module.foreman_params['rule_name'], params=scope)
- module.foreman_params['uuid'] = package_group['uuid']
-
- # drop 'name' from the dict, as otherwise it might override 'rule_name'
- rule_dict = module.foreman_params.copy()
- rule_dict.pop('name', None)
-
- module.ensure_entity(
- 'content_view_filter_rules',
- rule_dict,
- content_view_filter_rule,
- params=cv_filter_scope,
- state=rule_state,
- foreman_spec=rule_spec,
- )
-
if __name__ == '__main__':
main()
diff --git a/ansible_collections/theforeman/foreman/plugins/modules/content_view_version.py b/ansible_collections/theforeman/foreman/plugins/modules/content_view_version.py
index 42567483e..f9ba6414c 100644
--- a/ansible_collections/theforeman/foreman/plugins/modules/content_view_version.py
+++ b/ansible_collections/theforeman/foreman/plugins/modules/content_view_version.py
@@ -200,7 +200,7 @@ def main():
mutually_exclusive=[['current_lifecycle_environment', 'version']],
)
- module.task_timeout = 60 * 60
+ module.task_timeout = 180 * 60
if 'version' in module.foreman_params and not re.match(r'^\d+\.\d+$', module.foreman_params['version']):
try:
diff --git a/ansible_collections/theforeman/foreman/plugins/modules/host.py b/ansible_collections/theforeman/foreman/plugins/modules/host.py
index 6c1f41d07..e0da3bbf3 100644
--- a/ansible_collections/theforeman/foreman/plugins/modules/host.py
+++ b/ansible_collections/theforeman/foreman/plugins/modules/host.py
@@ -507,7 +507,7 @@ def main():
for volume in module.foreman_params['compute_attributes']['volumes_attributes'].values():
if 'storage_pod' in volume:
storage_pod = module.find_storage_pod(volume['storage_pod'], compute_resource, cluster)
- volume['storage_pod'] = storage_pod['id']
+ volume['storage_pod'] = storage_pod['name']
if 'storage_domain' in volume:
storage_domain = module.find_storage_domain(volume['storage_domain'], compute_resource, cluster)
volume['storage_domain'] = storage_domain['id']
diff --git a/ansible_collections/theforeman/foreman/plugins/modules/job_template.py b/ansible_collections/theforeman/foreman/plugins/modules/job_template.py
index df2fe732f..57ed1577e 100644
--- a/ansible_collections/theforeman/foreman/plugins/modules/job_template.py
+++ b/ansible_collections/theforeman/foreman/plugins/modules/job_template.py
@@ -176,9 +176,9 @@ EXAMPLES = '''
- name: toDelete
input_type: user
locations:
- - Gallifrey
+ - Gallifrey
organizations:
- - TARDIS INC
+ - TARDIS INC
- name: "Create a Job Template from a file"
theforeman.foreman.job_template:
@@ -192,9 +192,9 @@ EXAMPLES = '''
input_type: user
state: present
locations:
- - Gallifrey
+ - Gallifrey
organizations:
- - TARDIS INC
+ - TARDIS INC
- name: "remove a job template's template inputs"
theforeman.foreman.job_template:
@@ -205,9 +205,9 @@ EXAMPLES = '''
template_inputs: []
state: present
locations:
- - Gallifrey
+ - Gallifrey
organizations:
- - TARDIS INC
+ - TARDIS INC
- name: "Delete a Job Template"
theforeman.foreman.job_template:
@@ -226,9 +226,9 @@ EXAMPLES = '''
name: Wibbly Wobbly Template
state: present
locations:
- - Gallifrey
+ - Gallifrey
organizations:
- - TARDIS INC
+ - TARDIS INC
# Providing a name in this case wouldn't be very sensible.
# Alternatively make use of with_filetree to parse recursively with filter.
@@ -240,9 +240,9 @@ EXAMPLES = '''
file_name: "{{ item }}"
state: present
locations:
- - SKARO
+ - SKARO
organizations:
- - DALEK INC
+ - DALEK INC
with_fileglob:
- "./arsenal_templates/*.erb"
@@ -276,9 +276,9 @@ EXAMPLES = '''
name: "*"
state: present
organizations:
- - DALEK INC
- - sky.net
- - Doc Brown's garage
+ - DALEK INC
+ - sky.net
+ - Doc Brown's garage
'''
diff --git a/ansible_collections/theforeman/foreman/plugins/modules/partition_table.py b/ansible_collections/theforeman/foreman/plugins/modules/partition_table.py
index 1ddccea76..669a74dd1 100644
--- a/ansible_collections/theforeman/foreman/plugins/modules/partition_table.py
+++ b/ansible_collections/theforeman/foreman/plugins/modules/partition_table.py
@@ -140,8 +140,8 @@ EXAMPLES = '''
- SKARO
organizations:
- DALEK INC
- with_fileglob:
- - "./arsenal_templates/*.erb"
+ with_fileglob:
+ - "./arsenal_templates/*.erb"
# If the templates are stored locally and the ansible module is executed on a remote host
- name: Ensure latest version of all Ptable Community Templates
diff --git a/ansible_collections/theforeman/foreman/plugins/modules/product.py b/ansible_collections/theforeman/foreman/plugins/modules/product.py
index 9a99e0893..f2a2a0d30 100644
--- a/ansible_collections/theforeman/foreman/plugins/modules/product.py
+++ b/ansible_collections/theforeman/foreman/plugins/modules/product.py
@@ -120,7 +120,6 @@ class KatelloProductModule(KatelloEntityAnsibleModule):
def main():
module = KatelloProductModule(
- entity_name='product',
foreman_spec=dict(
name=dict(required=True),
label=dict(),
diff --git a/ansible_collections/theforeman/foreman/plugins/modules/provisioning_template.py b/ansible_collections/theforeman/foreman/plugins/modules/provisioning_template.py
index 0a52f8dec..e47da4d6a 100644
--- a/ansible_collections/theforeman/foreman/plugins/modules/provisioning_template.py
+++ b/ansible_collections/theforeman/foreman/plugins/modules/provisioning_template.py
@@ -167,8 +167,8 @@ EXAMPLES = '''
- SKARO
organizations:
- DALEK INC
- with_fileglob:
- - "./arsenal_templates/*.erb"
+ with_fileglob:
+ - "./arsenal_templates/*.erb"
# If the templates are stored locally and the ansible module is executed on a remote host
- name: Ensure latest version of all Provisioning Community Templates
diff --git a/ansible_collections/theforeman/foreman/plugins/modules/registration_command.py b/ansible_collections/theforeman/foreman/plugins/modules/registration_command.py
new file mode 100644
index 000000000..9262febc1
--- /dev/null
+++ b/ansible_collections/theforeman/foreman/plugins/modules/registration_command.py
@@ -0,0 +1,205 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+# (c) Evgeni Golov
+#
+# This program 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.
+#
+# This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+
+from __future__ import absolute_import, division, print_function
+__metaclass__ = type
+
+
+DOCUMENTATION = '''
+---
+module: registration_command
+version_added: 4.0.0
+short_description: Manage Registration Command
+description:
+ - Manage Registration Command
+author:
+ - "Evgeni Golov (@evgeni)"
+options:
+ activation_keys:
+ description:
+ - Activation keys for subscription-manager client, required for CentOS and Red Hat
+ Enterprise Linux.
+ - Required only if host group has no activation keys.
+ required: false
+ type: list
+ elements: str
+ force:
+ description:
+ - "Clear any previous registration and run C(subscription-manager) with C(--force)."
+ required: false
+ type: bool
+ hostgroup:
+ description:
+ - Host group to register the host in.
+ required: false
+ type: str
+ ignore_subman_errors:
+ description:
+ - Ignore C(subscription-manager) errors for C(subscription-manager register) command.
+ required: false
+ type: bool
+ insecure:
+ description:
+ - Enable insecure argument for the initial C(curl).
+ required: false
+ type: bool
+ jwt_expiration:
+ description:
+ - Expiration of the authorization token (in hours).
+ required: false
+ type: int
+ lifecycle_environment:
+ description:
+ - Lifecycle environment for the host.
+ required: false
+ type: str
+ operatingsystem:
+ description:
+ - Operating System to register the host in.
+ - Operating system must have a C(host_init_config) template assigned.
+ required: false
+ type: str
+ packages:
+ description:
+ - Packages to install on the host when registered.
+ - Multiple packages are to be given as a space delimited string.
+ required: false
+ type: str
+ remote_execution_interface:
+ description:
+ - Identifier of the Host interface for Remote execution.
+ required: false
+ type: str
+ repo:
+ description:
+ - Repository URL (yum/dnf) or full sources.list entry (apt).
+ required: false
+ type: str
+ repo_gpg_key_url:
+ description:
+ - URL of the GPG key for the repository.
+ required: false
+ type: str
+ setup_insights:
+ description:
+ - If this is set to C(true), C(insights-client) will be installed
+ and registered on Red Hat family operating systems.
+ required: false
+ type: bool
+ setup_remote_execution:
+ description:
+ - If this is set to true, SSH keys will be installed on the host.
+ required: false
+ type: bool
+ setup_remote_execution_pull:
+ description:
+ - If this is set to true, pull provider client will be deployed on the host.
+ required: false
+ type: bool
+ smart_proxy:
+ description:
+ - Name of Smart Proxy.
+ - This Proxy must have both the C(Templates) and C(Registration) features enabled.
+ required: false
+ type: str
+ update_packages:
+ description:
+ - Update all packages on the host.
+ required: false
+ type: bool
+ organization:
+ description:
+ - Organization to register the host in.
+ required: false
+ type: str
+ location:
+ description:
+ - Location to register the host in.
+ required: false
+ type: str
+
+extends_documentation_fragment:
+ - theforeman.foreman.foreman
+'''
+
+EXAMPLES = '''
+- name: "Generate registration command"
+ theforeman.foreman.registration_command:
+ username: "admin"
+ password: "changeme"
+ server_url: "https://foreman.example.com"
+ register: command
+
+- name: "Perform registration"
+ ansible.builtin.shell:
+ cmd: "{{ command.registration_command }}"
+'''
+
+RETURN = '''
+registration_command:
+ description: The generated registration command.
+ returned: success
+ type: str
+'''
+
+from ansible_collections.theforeman.foreman.plugins.module_utils.foreman_helper import ForemanAnsibleModule
+
+
+class ForemanRegistrationCommandModule(ForemanAnsibleModule):
+ pass
+
+
+def main():
+ module = ForemanRegistrationCommandModule(
+ foreman_spec=dict(
+ hostgroup=dict(type='entity'),
+ operatingsystem=dict(type='entity'),
+ smart_proxy=dict(type='entity'),
+ setup_insights=dict(type='bool'),
+ setup_remote_execution=dict(type='bool'),
+ jwt_expiration=dict(type='int'),
+ insecure=dict(type='bool'),
+ packages=dict(type='str'),
+ update_packages=dict(type='bool'),
+ repo=dict(type='str'),
+ repo_gpg_key_url=dict(type='str', no_log=False),
+ remote_execution_interface=dict(type='str'),
+ setup_remote_execution_pull=dict(type='bool'),
+ activation_keys=dict(type='list', elements='str', no_log=False),
+ lifecycle_environment=dict(type='entity'),
+ force=dict(type='bool'),
+ ignore_subman_errors=dict(type='bool'),
+ organization=dict(type='entity'),
+ location=dict(type='entity'),
+ ),
+ required_plugins=[
+ ('katello', ['activation_key', 'activation_keys', 'lifecycle_environment', 'ignore_subman_errors', 'force']),
+ ('remote_execution', ['remote_execution_interface', 'setup_remote_execution_pull']),
+ ],
+ )
+
+ with module.api_connection():
+ module.auto_lookup_entities()
+ if not module.check_mode:
+ command = module.ensure_entity('registration_commands', module.foreman_params, None, state='present')['registration_command']
+ else:
+ command = "curl | bash"
+ module.exit_json(registration_command=command)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/theforeman/foreman/plugins/modules/webhook.py b/ansible_collections/theforeman/foreman/plugins/modules/webhook.py
new file mode 100644
index 000000000..0acbd12ad
--- /dev/null
+++ b/ansible_collections/theforeman/foreman/plugins/modules/webhook.py
@@ -0,0 +1,167 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+# (c) 2023, Griffin Sullivan <gsulliva@redhat.com>
+#
+# This program 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.
+#
+# This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+
+from __future__ import absolute_import, division, print_function
+__metaclass__ = type
+
+
+DOCUMENTATION = '''
+---
+module: webhook
+version_added: 4.0.0
+short_description: Manage Webhooks
+description:
+ - Manage Webhooks
+author:
+ - "Griffin Sullivan (@Griffin-Sullivan)"
+options:
+ name:
+ description:
+ - Name of the Webhook
+ required: true
+ type: str
+ target_url:
+ description:
+ - The URL to call when the webhook is triggered
+ - Required when creating a new webhook
+ type: str
+ http_method:
+ description:
+ - The HTTP method used in the webhook
+ choices:
+ - POST
+ - GET
+ - PUT
+ - DELETE
+ - PATCH
+ type: str
+ http_content_type:
+ description:
+ - The HTTP content type for the webhook
+ type: str
+ event:
+ description:
+ - Name of the event that shall trigger the webhook
+ - Required when creating a new webhook
+ type: str
+ webhook_template:
+ description:
+ - Name of the webhook template
+ type: str
+ enabled:
+ description:
+ - Enable or disable the webhook
+ type: bool
+ verify_ssl:
+ description:
+ - Verify SSL certs for the webhook
+ type: bool
+ ssl_ca_certs:
+ description:
+ - X509 Certification Authorities concatenated in PEM format
+ type: str
+ webhook_username:
+ description:
+ - Username for the webhook, if required
+ type: str
+ webhook_password:
+ description:
+ - Password for the webhook, if required
+ type: str
+ http_headers:
+ description:
+ - HTTP headers for the webhook
+ type: str
+ proxy_authorization:
+ description:
+ - Authorize with client certificate and validate CA from Settings
+ type: bool
+extends_documentation_fragment:
+ - theforeman.foreman.foreman
+ - theforeman.foreman.foreman.entity_state
+ - theforeman.foreman.foreman.taxonomy
+'''
+
+EXAMPLES = '''
+- name: 'Create Webhook'
+ theforeman.foreman.webhook:
+ username: 'admin'
+ password: 'secret_password'
+ server_url: 'https://foreman.example.com'
+ name: 'test-webhook'
+ target_url: 'https://google.com'
+ http_method: 'GET'
+ event: 'actions.katello.content_view.promote_succeeded'
+ enabled: true
+ organizations:
+ - 'MyOrg'
+ locations:
+ - 'DC1'
+
+- name: 'Remove Webhook'
+ theforeman.foreman.webhook:
+ username: 'admin'
+ password: 'secret_password'
+ server_url: 'https://foreman.example.com'
+ name: 'test-webhook'
+ state: 'absent'
+'''
+
+RETURN = '''
+entity:
+ description: Final state of the affected entities grouped by their type.
+ returned: success
+ type: dict
+ contains:
+ webhooks:
+ description: List of webhooks.
+ type: list
+ elements: dict
+'''
+
+from ansible_collections.theforeman.foreman.plugins.module_utils.foreman_helper import ForemanTaxonomicEntityAnsibleModule
+
+
+class ForemanWebhookModule(ForemanTaxonomicEntityAnsibleModule):
+ pass
+
+
+def main():
+ module = ForemanWebhookModule(
+ foreman_spec=dict(
+ name=dict(required=True),
+ target_url=dict(),
+ http_method=dict(choices=['POST', 'GET', 'PUT', 'DELETE', 'PATCH']),
+ http_content_type=dict(),
+ event=dict(),
+ webhook_template=dict(type='entity'),
+ verify_ssl=dict(type='bool'),
+ enabled=dict(type='bool'),
+ ssl_ca_certs=dict(),
+ webhook_username=dict(flat_name='user'),
+ webhook_password=dict(no_log=True, flat_name='password'),
+ http_headers=dict(),
+ proxy_authorization=dict(type='bool'),
+ ),
+ )
+
+ with module.api_connection():
+ module.run()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible_collections/theforeman/foreman/roles/content_credentials/tasks/main.yml b/ansible_collections/theforeman/foreman/roles/content_credentials/tasks/main.yml
index d4d7ba435..0eec9d75b 100644
--- a/ansible_collections/theforeman/foreman/roles/content_credentials/tasks/main.yml
+++ b/ansible_collections/theforeman/foreman/roles/content_credentials/tasks/main.yml
@@ -1,5 +1,5 @@
---
-- name: 'Create Content Crendentials'
+- name: 'Create Content Credentials'
theforeman.foreman.content_credential:
username: "{{ foreman_username | default(omit) }}"
password: "{{ foreman_password | default(omit) }}"
diff --git a/ansible_collections/theforeman/foreman/roles/content_view_publish/tasks/main.yml b/ansible_collections/theforeman/foreman/roles/content_view_publish/tasks/main.yml
index 977c9dbc9..ca1fe0d3f 100644
--- a/ansible_collections/theforeman/foreman/roles/content_view_publish/tasks/main.yml
+++ b/ansible_collections/theforeman/foreman/roles/content_view_publish/tasks/main.yml
@@ -13,8 +13,8 @@
force_promote: "{{ content_view.force_promote | default(omit) }}"
force_yum_metadata_regeneration: "{{ content_view.force_yum_metadata_regeneration | default(omit) }}"
current_lifecycle_environment: "{{ content_view.current_lifecycle_environment | default(omit) }}"
- async: "{{ foreman_content_view_publish_async | default(omit) }}"
- poll: "{{ foreman_content_view_publish_poll | default(omit) }}"
+ async: "{{ foreman_content_view_publish_async | default(omit) }}"
+ poll: "{{ foreman_content_view_publish_poll | default(omit) }}"
loop: "{{ foreman_content_views }}"
loop_control:
loop_var: "content_view"
diff --git a/ansible_collections/theforeman/foreman/roles/content_views/tasks/_create_content_view.yml b/ansible_collections/theforeman/foreman/roles/content_views/tasks/_create_content_view.yml
index 04257584f..1d56f3878 100644
--- a/ansible_collections/theforeman/foreman/roles/content_views/tasks/_create_content_view.yml
+++ b/ansible_collections/theforeman/foreman/roles/content_views/tasks/_create_content_view.yml
@@ -26,19 +26,32 @@
content_view: "{{ content_view.name }}"
repositories: "{{ item.repositories | default(omit) }}"
filter_type: "{{ item.filter_type }}"
+ inclusion: "{{ item.inclusion | default(omit) }}"
+ description: "{{ item.description | default(omit) }}"
+ filter_state: "{{ item.filter_state | default(omit) }}"
+ original_packages: "{{ item.original_packages | default(omit) }}"
+ original_module_streams: "{{ item.original_module_streams | default(omit) }}"
+ loop: "{{ content_view.filters | default([]) }}"
+
+- name: Add content view filters rules
+ theforeman.foreman.content_view_filter_rule:
+ username: "{{ foreman_username | default(omit) }}"
+ password: "{{ foreman_password | default(omit) }}"
+ server_url: "{{ foreman_server_url | default(omit) }}"
+ validate_certs: "{{ foreman_validate_certs | default(omit) }}"
+ organization: "{{ foreman_organization }}"
+ content_view_filter: "{{ item.name }}"
+ content_view: "{{ content_view.name }}"
start_date: "{{ item.start_date | default(omit) }}"
end_date: "{{ item.end_date | default(omit) }}"
types: "{{ item.types | default(omit) }}"
date_type: "{{ item.date_type | default(omit) }}"
- inclusion: "{{ item.inclusion | default(omit) }}"
errata_id: "{{ item.errata_id | default(omit) }}"
max_version: "{{ item.max_version | default(omit) }}"
min_version: "{{ item.min_version | default(omit) }}"
rule_name: "{{ item.rule_name | default(omit) }}"
version: "{{ item.version | default(omit) }}"
- description: "{{ item.description | default(omit) }}"
architecture: "{{ item.architecture | default(omit) }}"
- filter_state: "{{ item.filter_state | default(omit) }}"
original_packages: "{{ item.original_packages | default(omit) }}"
original_module_streams: "{{ item.original_module_streams | default(omit) }}"
rule_state: "{{ item.rule_state | default(omit) }}"
diff --git a/ansible_collections/theforeman/foreman/roles/hostgroups/tasks/main.yml b/ansible_collections/theforeman/foreman/roles/hostgroups/tasks/main.yml
index 18627a4f5..a5772f3b5 100644
--- a/ansible_collections/theforeman/foreman/roles/hostgroups/tasks/main.yml
+++ b/ansible_collections/theforeman/foreman/roles/hostgroups/tasks/main.yml
@@ -38,5 +38,6 @@
content_view: "{{ item.content_view | default(omit) }}"
activation_keys: "{{ item.activation_keys | default(omit) }}"
state: "{{ item.state | default(omit) }}"
+ no_log: "{{ item.root_pass is defined }}"
with_items:
- "{{ foreman_hostgroups }}"
diff --git a/ansible_collections/theforeman/foreman/tests/test_playbooks/content_view_filter.yml b/ansible_collections/theforeman/foreman/tests/test_playbooks/content_view_filter.yml
index edfff36d8..5a5578b9e 100644
--- a/ansible_collections/theforeman/foreman/tests/test_playbooks/content_view_filter.yml
+++ b/ansible_collections/theforeman/foreman/tests/test_playbooks/content_view_filter.yml
@@ -108,33 +108,6 @@
- include_tasks: tasks/content_view_filter_package.yml
vars:
- version: 1
- expected_change: true
- - include_tasks: tasks/content_view_filter_package.yml
- vars:
- version: 1
- expected_change: false
-
- - include_tasks: tasks/content_view_filter_package.yml
- vars:
- max_version: 1
- expected_change: true
- - include_tasks: tasks/content_view_filter_package.yml
- vars:
- max_version: 1
- expected_change: false
-
- - include_tasks: tasks/content_view_filter_package.yml
- vars:
- min_version: 1
- expected_change: true
- - include_tasks: tasks/content_view_filter_package.yml
- vars:
- min_version: 1
- expected_change: false
-
- - include_tasks: tasks/content_view_filter_package.yml
- vars:
inclusion: true
expected_change: true
- include_tasks: tasks/content_view_filter_package.yml
@@ -167,14 +140,6 @@
expected_change: false
- include_tasks: tasks/content_view_filter_errata_date.yml
vars:
- date_type: issued
- expected_change: true
- - include_tasks: tasks/content_view_filter_errata_date.yml
- vars:
- types: security
- expected_change: true
- - include_tasks: tasks/content_view_filter_errata_date.yml
- vars:
filter_state: absent
rule_state: absent
expected_change: true
diff --git a/ansible_collections/theforeman/foreman/tests/test_playbooks/content_view_filter_rule_info.yml b/ansible_collections/theforeman/foreman/tests/test_playbooks/content_view_filter_rule_info.yml
index b956a43c8..00e91bd0e 100644
--- a/ansible_collections/theforeman/foreman/tests/test_playbooks/content_view_filter_rule_info.yml
+++ b/ansible_collections/theforeman/foreman/tests/test_playbooks/content_view_filter_rule_info.yml
@@ -267,7 +267,7 @@
ansible.builtin.assert:
fail_msg: "Ensuring content view filter info is valid failed!"
that:
- - "{{ result['content_view_filter_rules']|length }} != 0"
+ - result['content_view_filter_rules']|length != 0
- name: "Fetch content_view_filter_info - deb exlude"
diff --git a/ansible_collections/theforeman/foreman/tests/test_playbooks/filters.yml b/ansible_collections/theforeman/foreman/tests/test_playbooks/filters.yml
index 70c67f21e..614f9fa7e 100644
--- a/ansible_collections/theforeman/foreman/tests/test_playbooks/filters.yml
+++ b/ansible_collections/theforeman/foreman/tests/test_playbooks/filters.yml
@@ -10,8 +10,8 @@
msg: "{{ 'Test__String)' | theforeman.foreman.cp_label }}"
- assert:
that:
- - "{{ 'Test String' | theforeman.foreman.cp_label == 'Test_String' }}"
- - "{{ 'Test__String' | theforeman.foreman.cp_label == 'Test__String' }}"
- - "{{ 'Test--String' | theforeman.foreman.cp_label == 'Test--String' }}"
- - "{{ 'Test (String) 1234' | theforeman.foreman.cp_label == 'Test_String_1234' }}"
+ - "'Test String' | theforeman.foreman.cp_label == 'Test_String'"
+ - "'Test__String' | theforeman.foreman.cp_label == 'Test__String'"
+ - "'Test--String' | theforeman.foreman.cp_label == 'Test--String'"
+ - "'Test (String) 1234' | theforeman.foreman.cp_label == 'Test_String_1234'"
...
diff --git a/ansible_collections/theforeman/foreman/tests/test_playbooks/host_info.yml b/ansible_collections/theforeman/foreman/tests/test_playbooks/host_info.yml
index 78b0eb4ab..5dc3b83d2 100644
--- a/ansible_collections/theforeman/foreman/tests/test_playbooks/host_info.yml
+++ b/ansible_collections/theforeman/foreman/tests/test_playbooks/host_info.yml
@@ -54,7 +54,7 @@
- name: check host details
assert:
that:
- - host_info['host']['name'] == "test-host.{{ host.domain }}"
+ - host_info['host']['name'] == "test-host.{}".format(host.domain)
- host_info['host']['domain_name'] == host.domain
- name: search host info
@@ -70,7 +70,7 @@
- name: check host details
assert:
that:
- - host_info['hosts'][0]['name'] == "test-host.{{ host.domain }}"
+ - host_info['hosts'][0]['name'] == "test-host.{}".format(host.domain)
- host_info['hosts'][0]['domain_name'] == host.domain
- hosts: localhost
diff --git a/ansible_collections/theforeman/foreman/tests/test_playbooks/inventory_plugin.yml b/ansible_collections/theforeman/foreman/tests/test_playbooks/inventory_plugin.yml
index 9305b22ec..f1dd29296 100644
--- a/ansible_collections/theforeman/foreman/tests/test_playbooks/inventory_plugin.yml
+++ b/ansible_collections/theforeman/foreman/tests/test_playbooks/inventory_plugin.yml
@@ -3,7 +3,9 @@
vars:
foreman_groups:
- name: group_a
+ label: group_a
- name: group_b
+ label: group_b
- name: group_c
label: group_b/group_c
parent: group_b
diff --git a/ansible_collections/theforeman/foreman/tests/test_playbooks/inventory_plugin_ansible.yml b/ansible_collections/theforeman/foreman/tests/test_playbooks/inventory_plugin_ansible.yml
index 5e5e7c4bd..ae6c31dd9 100644
--- a/ansible_collections/theforeman/foreman/tests/test_playbooks/inventory_plugin_ansible.yml
+++ b/ansible_collections/theforeman/foreman/tests/test_playbooks/inventory_plugin_ansible.yml
@@ -3,7 +3,9 @@
vars:
foreman_groups:
- name: group_a
+ label: group_a
- name: group_b
+ label: group_b
- name: group_c
label: group_b/group_c
parent: group_b
diff --git a/ansible_collections/theforeman/foreman/tests/test_playbooks/registration_command.yml b/ansible_collections/theforeman/foreman/tests/test_playbooks/registration_command.yml
new file mode 100644
index 000000000..f16298881
--- /dev/null
+++ b/ansible_collections/theforeman/foreman/tests/test_playbooks/registration_command.yml
@@ -0,0 +1,39 @@
+---
+- hosts: localhost
+ collections:
+ - theforeman.foreman
+ gather_facts: false
+ vars_files:
+ - vars/server.yml
+ tasks:
+ - include_tasks: tasks/location.yml
+ vars:
+ location_state: "present"
+ - include_tasks: tasks/organization.yml
+ vars:
+ organization_state: "present"
+
+- hosts: tests
+ collections:
+ - theforeman.foreman
+ tags:
+ - test
+ gather_facts: false
+ vars_files:
+ - vars/server.yml
+ tasks:
+ - include_tasks: tasks/registration_command.yml
+
+- hosts: localhost
+ collections:
+ - theforeman.foreman
+ gather_facts: false
+ vars_files:
+ - vars/server.yml
+ tasks:
+ - include_tasks: tasks/location.yml
+ vars:
+ location_state: "absent"
+ - include_tasks: tasks/organization.yml
+ vars:
+ organization_state: "absent"
diff --git a/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/content_view_filter_deb.yml b/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/content_view_filter_deb.yml
index 66da53131..07098ab87 100644
--- a/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/content_view_filter_deb.yml
+++ b/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/content_view_filter_deb.yml
@@ -7,7 +7,6 @@
repositories:
- name: "Test Repository"
product: "Test Product"
- package_name: "bear"
filter_state: present
content_view_filter:
username: "{{ foreman_username }}"
@@ -19,11 +18,8 @@
content_view: "{{ content_view_name }}"
filter_type: "deb"
repositories: "{{ repositories }}"
- package_name: "{{ package_name }}"
- architecture: "{{ architecture | default(omit) }}"
inclusion: "{{ inclusion | default(omit) }}"
filter_state: "{{ filter_state }}"
- rule_state: "{{ rule_state | default(omit) }}"
register: result
- assert:
fail_msg: "Ensuring content view filter is {{ filter_state }} failed! (expected_change: {{ expected_change | default('unknown') }})"
diff --git a/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/content_view_filter_docker.yml b/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/content_view_filter_docker.yml
index 97201f0b6..e670c8b39 100644
--- a/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/content_view_filter_docker.yml
+++ b/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/content_view_filter_docker.yml
@@ -4,7 +4,6 @@
content_view_filter_name: "Test Docker Content View Filter"
content_view_name: "Test Content View"
organization_name: "Test Organization"
- tag: "birds"
filter_state: present
content_view_filter:
username: "{{ foreman_username }}"
@@ -16,10 +15,8 @@
content_view: "{{ content_view_name }}"
filter_type: "docker"
repositories: "{{ repositories | default(omit) }}"
- tag: "{{ tag }}"
inclusion: "{{ inclusion | default(omit) }}"
filter_state: "{{ filter_state }}"
- rule_state: "{{ rule_state | default(omit) }}"
register: result
- assert:
fail_msg: "Ensuring content view filter is {{ filter_state }} failed! (expected_change: {{ expected_change | default('unknown') }})"
diff --git a/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/content_view_filter_errata_date.yml b/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/content_view_filter_errata_date.yml
index 524b283ad..335bc82f3 100644
--- a/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/content_view_filter_errata_date.yml
+++ b/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/content_view_filter_errata_date.yml
@@ -7,8 +7,6 @@
repositories:
- name: "Test Repository"
product: "Test Product"
- end_date: "2018-01-03"
- start_date: "2017-01-03"
filter_state: present
content_view_filter:
username: "{{ foreman_username }}"
@@ -20,13 +18,8 @@
content_view: "{{ content_view_name }}"
filter_type: "erratum"
repositories: "{{ repositories }}"
- end_date: "{{ end_date }}"
- start_date: "{{ start_date }}"
- types: "{{ types | default(omit) }}"
- date_type: "{{ date_type | default(omit) }}"
inclusion: "{{ inclusion | default(omit) }}"
filter_state: "{{ filter_state }}"
- rule_state: "{{ rule_state | default(omit) }}"
register: result
- assert:
fail_msg: "Ensuring content view filter is {{ filter_state }} failed! (expected_change: {{ expected_change | default('unknown') }})"
diff --git a/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/content_view_filter_errata_id.yml b/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/content_view_filter_errata_id.yml
index c4631f4ff..3c6f13996 100644
--- a/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/content_view_filter_errata_id.yml
+++ b/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/content_view_filter_errata_id.yml
@@ -4,7 +4,6 @@
content_view_filter_name: "Test Errata id Content View Filter"
content_view_name: "Test Content View"
organization_name: "Test Organization"
- errata_id: RHEA-2012:0003
filter_state: present
content_view_filter:
username: "{{ foreman_username }}"
@@ -16,10 +15,8 @@
content_view: "{{ content_view_name }}"
filter_type: "erratum"
repositories: "{{ repositories | default(omit) }}"
- errata_id: "{{ errata_id }}"
inclusion: "{{ inclusion | default(omit) }}"
filter_state: "{{ filter_state }}"
- rule_state: "{{ rule_state | default(omit) }}"
register: result
- assert:
fail_msg: "Ensuring content view filter is {{ filter_state }} failed! (expected_change: {{ expected_change | default('unknown') }})"
diff --git a/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/content_view_filter_package.yml b/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/content_view_filter_package.yml
index 4fda2972d..119d16a27 100644
--- a/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/content_view_filter_package.yml
+++ b/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/content_view_filter_package.yml
@@ -7,7 +7,6 @@
repositories:
- name: "Test Repository"
product: "Test Product"
- package_name: "bear"
filter_state: present
content_view_filter:
username: "{{ foreman_username }}"
@@ -19,15 +18,9 @@
content_view: "{{ content_view_name }}"
filter_type: "rpm"
repositories: "{{ repositories }}"
- package_name: "{{ package_name }}"
- version: "{{ version | default(omit) }}"
- architecture: "{{ architecture | default(omit) }}"
- min_version: "{{ min_version | default(omit) }}"
- max_version: "{{ max_version | default(omit) }}"
inclusion: "{{ inclusion | default(omit) }}"
original_packages: "{{ original_packages | default(omit) }}"
filter_state: "{{ filter_state }}"
- rule_state: "{{ rule_state | default(omit) }}"
register: result
- assert:
fail_msg: "Ensuring content view filter is {{ filter_state }} failed! (expected_change: {{ expected_change | default('unknown') }})"
diff --git a/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/content_view_filter_package_group.yml b/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/content_view_filter_package_group.yml
index 430ea618b..7e74baaf6 100644
--- a/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/content_view_filter_package_group.yml
+++ b/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/content_view_filter_package_group.yml
@@ -4,7 +4,6 @@
content_view_filter_name: "Test Package Group Content View Filter"
content_view_name: "Test Content View"
organization_name: "Test Organization"
- package_group: "birds"
filter_state: present
content_view_filter:
username: "{{ foreman_username }}"
@@ -16,10 +15,8 @@
content_view: "{{ content_view_name }}"
filter_type: "package_group"
repositories: "{{ repositories | default(omit) }}"
- package_group: "{{ package_group }}"
inclusion: "{{ inclusion | default(omit) }}"
filter_state: "{{ filter_state }}"
- rule_state: "{{ rule_state | default(omit) }}"
register: result
- assert:
fail_msg: "Ensuring content view filter is {{ filter_state }} failed! (expected_change: {{ expected_change | default('unknown') }})"
diff --git a/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/inventory_plugin_tests.yml b/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/inventory_plugin_tests.yml
index ad2e522c9..383893575 100644
--- a/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/inventory_plugin_tests.yml
+++ b/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/inventory_plugin_tests.yml
@@ -1,47 +1,47 @@
---
- name: test that all groups are present
assert:
- that: >
- 'foreman_{{ item.label | default(item.name) | regex_replace('/', '_') }}' in groups
+ that:
+ - "'foreman_{}'.format(item.label.replace('/', '_')) in groups"
with_items: "{{ foreman_groups }}"
- name: test that all hosts are in the "all" group
assert:
- that: >
- '{{ item.key }}' in groups['all']
+ that:
+ - "item.key in groups['all']"
with_dict: "{{ foreman_hosts }}"
- name: test that all hosts are in the correct hostgroup
assert:
- that: >
- '{{ item.key }}' in groups['foreman_{{ item.value | regex_replace('/', '_') }}']
+ that:
+ - "item.key in groups['foreman_{}'.format(item.value.replace('/', '_'))]"
with_dict: "{{ foreman_hosts }}"
- name: dump all host details
debug:
- var: "hostvars['{{ item.key }}']"
+ var: "hostvars[item.key]"
with_dict: "{{ foreman_hosts }}"
- name: test that all hosts have the domain fact set
assert:
that: >
- hostvars['{{ item.key }}']['foreman_facts']['domain'] == 'example.com'
+ hostvars[item.key]['foreman_facts']['domain'] == 'example.com'
with_dict: "{{ foreman_hosts }}"
- name: test that all hosts have the OS fact set
assert:
that: >
- hostvars['{{ item.key }}']['foreman_facts']['operatingsystem'] == 'CentOS'
+ hostvars[item.key]['foreman_facts']['operatingsystem'] == 'CentOS'
with_dict: "{{ foreman_hosts }}"
- name: test that all hosts have the testparam1
assert:
that: >
- hostvars['{{ item.key }}']['testparam1'] == 'testvalue1'
+ hostvars[item.key]['testparam1'] == 'testvalue1'
with_dict: "{{ foreman_hosts }}"
- name: test that all hosts have the testparam2
assert:
that: >
- hostvars['{{ item.key }}']['testparam2'] == 'testvalue2'
+ hostvars[item.key]['testparam2'] == 'testvalue2'
with_dict: "{{ foreman_hosts }}"
diff --git a/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/registration_command.yml b/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/registration_command.yml
new file mode 100644
index 000000000..e8bb2a618
--- /dev/null
+++ b/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/registration_command.yml
@@ -0,0 +1,18 @@
+---
+- name: "Generate Registration Command"
+ vars:
+ rc_organization: Test Organization
+ rc_location: Test Location
+ registration_command:
+ username: "{{ foreman_username }}"
+ password: "{{ foreman_password }}"
+ server_url: "{{ foreman_server_url }}"
+ validate_certs: "{{ foreman_validate_certs }}"
+ organization: "{{ rc_organization }}"
+ location: "{{ rc_location }}"
+ register: result
+- assert:
+ fail_msg: "Ensuring registering command is generated failed!"
+ that:
+ - "'curl' in result.registration_command"
+...
diff --git a/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/webhook.yml b/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/webhook.yml
new file mode 100644
index 000000000..70dc08ed5
--- /dev/null
+++ b/ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/webhook.yml
@@ -0,0 +1,32 @@
+---
+- name: "Create/Update/Delete Webhook"
+ vars:
+ webhook_state: "present"
+ webhook:
+ username: "{{ foreman_username }}"
+ password: "{{ foreman_password }}"
+ server_url: "{{ foreman_server_url }}"
+ validate_certs: "{{ foreman_validate_certs }}"
+ name: "{{ webhook_name }}"
+ target_url: "{{ webhook_target_url | default(omit)}}"
+ http_method: "{{ webhook_http_method | default(omit) }}"
+ http_content_type: "{{ webhook_http_content_type | default(omit) }}"
+ event: "{{ webhook_event | default(omit) }}"
+ webhook_template: "{{ webhook_template | default(omit) }}"
+ enabled: "{{ webhook_enabled | default(true) }}"
+ verify_ssl: "{{ webhook_verify_ssl | default(omit) }}"
+ ssl_ca_certs: "{{ webhook_ssl_ca_certs | default(omit) }}"
+ webhook_username: "{{ webhook_username | default(omit) }}"
+ webhook_password: "{{ webhook_password | default(omit) }}"
+ http_headers: "{{ webhook_http_headers | default(omit) }}"
+ proxy_authorization: "{{ webhook_proxy_authorization | default(omit) }}"
+ locations: "{{ webhook_locations | default(omit) }}"
+ organizations: "{{ webhook_organizations | default(omit) }}"
+ state: "{{ webhook_state }}"
+ register: result
+- assert:
+ fail_msg: "Ensuring webhook is {{ webhook_state }} failed! (expected_change: {{ expected_change | default('unknown') }})"
+ that:
+ - result.changed == expected_change
+ when: expected_change is defined
+...
diff --git a/ansible_collections/theforeman/foreman/tests/test_playbooks/webhook.yml b/ansible_collections/theforeman/foreman/tests/test_playbooks/webhook.yml
new file mode 100644
index 000000000..2552b97ed
--- /dev/null
+++ b/ansible_collections/theforeman/foreman/tests/test_playbooks/webhook.yml
@@ -0,0 +1,91 @@
+- hosts: tests
+ collections:
+ - theforeman.foreman
+ gather_facts: false
+ vars_files:
+ - vars/server.yml
+ tasks:
+ - name: create webhook
+ include_tasks: tasks/webhook.yml
+ vars:
+ webhook_state: "present"
+ webhook_name: "Test webhook"
+ webhook_target_url: "http://example.org:3128"
+ webhook_event: "actions.katello.content_view.promote_succeeded.event.foreman"
+ webhook_template: "Katello Publish"
+ expected_change: true
+ - name: create webhook again, no change
+ include_tasks: tasks/webhook.yml
+ vars:
+ webhook_state: "present"
+ webhook_name: "Test webhook"
+ webhook_target_url: "http://example.org:3128"
+ webhook_event: "actions.katello.content_view.promote_succeeded.event.foreman"
+ webhook_template: "Katello Publish"
+ expected_change: false
+ - name: delete webhook
+ include_tasks: tasks/webhook.yml
+ vars:
+ webhook_state: "absent"
+ webhook_name: "Test webhook"
+ expected_change: true
+ - name: delete webhook again, no change
+ include_tasks: tasks/webhook.yml
+ vars:
+ webhook_state: "absent"
+ webhook_name: "Test webhook"
+ expected_change: false
+
+ - name: create webhook with user/pass
+ include_tasks: tasks/webhook.yml
+ vars:
+ webhook_state: "present"
+ webhook_name: "Test webhook"
+ webhook_target_url: "http://example.org:3128"
+ webhook_event: "actions.katello.content_view.promote_succeeded.event.foreman"
+ webhook_http_method: "POST"
+ webhook_username: "admin"
+ webhook_enabled: false
+ webhook_password: "secret_password"
+ webhook_template: "Katello Publish"
+ expected_change: true
+ - name: create webhook with user again, no change
+ include_tasks: tasks/webhook.yml
+ vars:
+ webhook_state: "present"
+ webhook_name: "Test webhook"
+ webhook_target_url: "http://example.org:3128"
+ webhook_event: "actions.katello.content_view.promote_succeeded.event.foreman"
+ webhook_http_method: "POST"
+ webhook_username: "admin"
+ webhook_template: "Katello Publish"
+ webhook_enabled: false
+ # don't set webhook_password here
+ expected_change: false
+ - name: update webhook with http_method
+ include_tasks: tasks/webhook.yml
+ vars:
+ webhook_state: "present"
+ webhook_name: "Test webhook"
+ webhook_http_method: "PUT"
+ expected_change: true
+ - name: update webhook with org/loc, no change
+ include_tasks: tasks/webhook.yml
+ vars:
+ webhook_state: "present"
+ webhook_name: "Test webhook"
+ webhook_http_method: "PUT"
+ expected_change: false
+ - name: delete webhook
+ include_tasks: tasks/webhook.yml
+ vars:
+ webhook_state: "absent"
+ webhook_name: "Test webhook"
+ expected_change: true
+ - name: delete webhook again, no change
+ include_tasks: tasks/webhook.yml
+ vars:
+ webhook_state: "absent"
+ webhook_name: "Test webhook"
+ expected_change: false
+...
diff --git a/ansible_collections/vmware/vmware_rest/.ansible-lint b/ansible_collections/vmware/vmware_rest/.ansible-lint
new file mode 100644
index 000000000..3dfb0b8c0
--- /dev/null
+++ b/ansible_collections/vmware/vmware_rest/.ansible-lint
@@ -0,0 +1,10 @@
+---
+profile: production
+
+exclude_paths:
+ - tests/integration
+ - tests/sanity
+ - modules.yaml
+
+skip_list:
+ - yaml[indentation]
diff --git a/ansible_collections/vmware/vmware_rest/.github/patchback.yml b/ansible_collections/vmware/vmware_rest/.github/patchback.yml
new file mode 100644
index 000000000..113fc5294
--- /dev/null
+++ b/ansible_collections/vmware/vmware_rest/.github/patchback.yml
@@ -0,0 +1,4 @@
+---
+backport_branch_prefix: patchback/backports/
+backport_label_prefix: backport-
+target_branch_prefix: stable-
diff --git a/ansible_collections/vmware/vmware_rest/.github/workflows/changelog.yaml b/ansible_collections/vmware/vmware_rest/.github/workflows/changelog.yaml
new file mode 100644
index 000000000..e2a45df94
--- /dev/null
+++ b/ansible_collections/vmware/vmware_rest/.github/workflows/changelog.yaml
@@ -0,0 +1,13 @@
+---
+name: Changelog
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+
+on:
+ pull_request:
+
+jobs:
+ changelog:
+ uses: ansible-network/github_actions/.github/workflows/changelog.yml@main
diff --git a/ansible_collections/vmware/vmware_rest/.github/workflows/linters.yaml b/ansible_collections/vmware/vmware_rest/.github/workflows/linters.yaml
new file mode 100644
index 000000000..6931b40ee
--- /dev/null
+++ b/ansible_collections/vmware/vmware_rest/.github/workflows/linters.yaml
@@ -0,0 +1,27 @@
+name: Linters
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+
+on:
+ pull_request:
+ types:
+ - opened
+ - reopened
+ - synchronize
+ 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: ansible-network/github_actions/.github/actions/checkout_dependency@main
+
+ - name: Run ansible-lint
+ uses: ansible/ansible-lint@v6.21.0
diff --git a/ansible_collections/vmware/vmware_rest/.github/workflows/sanity-tests.yaml b/ansible_collections/vmware/vmware_rest/.github/workflows/sanity-tests.yaml
new file mode 100644
index 000000000..3edb8772c
--- /dev/null
+++ b/ansible_collections/vmware/vmware_rest/.github/workflows/sanity-tests.yaml
@@ -0,0 +1,129 @@
+# README FIRST
+# 1. Subscribe to https://github.com/ansible-collections/news-for-maintainers
+# (click the Watch button on the homepage > Custom > Issues)
+# and keep this matrix up to date in accordance to related announcements.
+# Timely add new ansible-core versions and consider dropping support
+# and testing against its EOL versions.
+# 2. If your collection repository is under the ansible-collections org,
+# please keep in mind that the number of GHA jobs is limited
+# and shared across all the collections in the org.
+# So, focusing on good test coverage of your collection,
+# please avoid testing against unnecessary entities such as
+# ansible-core EOL versions your collection does not support
+# or ansible-core versions that are not EOL yet but not supported by the collection.
+# 3. If you don't have unit or integration tests, remove corresponding sections.
+# 4. If your collection depends on other collections ensure they are installed,
+# add them to the "test-deps" input.
+# 5. For the comprehensive list of the inputs supported by the
+# ansible-community/ansible-test-gh-action GitHub Action, see
+# https://github.com/marketplace/actions/ansible-test.
+# 6. If you want to prevent merging PRs that do not pass all tests,
+# make sure to add the "check" job to your repository branch
+# protection once this workflow is added.
+# It is also possible to tweak which jobs are allowed to fail. See
+# https://github.com/marketplace/actions/alls-green#gotchas for more detail.
+# 7. If you need help please ask in #community:ansible.com on Matrix
+# or in bridged #ansible-community on the Libera.Chat IRC channel.
+# See https://docs.ansible.com/ansible/devel/community/communication.html
+# for details.
+# 8. If your collection is [going to get] included in the Ansible package,
+# it has to adhere to Python compatibility and CI testing requirements described in
+# https://docs.ansible.com/ansible/latest/community/collection_contributors/collection_requirements.html.
+
+name: Sanity tests
+on:
+ # Run CI against all pushes (direct commits, also merged PRs), Pull Requests
+ push:
+ branches:
+ - main
+ - stable-*
+ pull_request:
+ # Run CI once per day (at 04:23 UTC)
+ # This ensures that even if there haven't been commits that we are still
+ # testing against latest version of ansible-test for each ansible-core
+ # version
+ schedule:
+ - cron: '23 4 * * *'
+
+concurrency:
+ group: >-
+ ${{ github.workflow }}-${{
+ github.event.pull_request.number || github.sha
+ }}
+ cancel-in-progress: true
+
+jobs:
+
+###
+# Sanity tests (REQUIRED)
+#
+# https://docs.ansible.com/ansible/latest/dev_guide/testing_sanity.html
+
+ sanity:
+ name: Sanity (Ⓐ${{ matrix.ansible }})
+ strategy:
+ matrix:
+ ansible:
+ # It's important that Sanity is tested against all stable-X.Y branches
+ # Testing against `devel` may fail as new tests are added.
+ # An alternative to `devel` is the `milestone` branch with
+ # gets synchronized with `devel` every few weeks and therefore
+ # tends to be a more stable target. Be aware that it is not updated
+ # around creation of a new stable branch, this might cause a problem
+ # that two different versions of ansible-test use the same sanity test
+ # ignore.txt file.
+ # Add new versions announced in
+ # https://github.com/ansible-collections/news-for-maintainers in a timely manner,
+ # consider dropping testing against EOL versions and versions you don't support.
+ - stable-2.14
+ - stable-2.15
+ - stable-2.16
+ # - devel
+ # - milestone
+ # Ansible-test on various stable branches does not yet work well with cgroups v2.
+ # Since ubuntu-latest now uses Ubuntu 22.04, we need to fall back to the ubuntu-20.04
+ # image for these stable branches. The list of branches where this is necessary will
+ # shrink over time, check out https://github.com/ansible-collections/news-for-maintainers/issues/28
+ # for the latest list.
+ runs-on: >-
+ ${{ contains(fromJson(
+ '["stable-2.9", "stable-2.10", "stable-2.11"]'
+ ), matrix.ansible) && 'ubuntu-20.04' || 'ubuntu-latest' }}
+ steps:
+ # Run sanity tests inside a Docker container.
+ # The docker container has all the pinned dependencies that are
+ # required and all Python versions Ansible supports.
+ - name: Perform sanity testing
+ # See the documentation for the following GitHub action on
+ # https://github.com/ansible-community/ansible-test-gh-action/blob/main/README.md
+ uses: ansible-community/ansible-test-gh-action@release/v1
+ with:
+ ansible-core-version: ${{ matrix.ansible }}
+ testing-type: sanity
+ # OPTIONAL If your sanity tests require code
+ # from other collections, install them like this
+ # test-deps: >-
+ # ansible.netcommon
+ # ansible.utils
+ test-deps: >-
+ cloud.common
+ # OPTIONAL If set to true, will test only against changed files,
+ # which should improve CI performance. See limitations on
+ # https://github.com/ansible-community/ansible-test-gh-action#pull-request-change-detection
+ pull-request-change-detection: false
+
+ check: # This job does nothing and is only used for the branch protection
+ # or multi-stage CI jobs, like making sure that all tests pass before
+ # a publishing job is started.
+ if: always()
+
+ needs:
+ - sanity
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Decide whether the needed jobs succeeded or failed
+ uses: re-actors/alls-green@release/v1
+ with:
+ jobs: ${{ toJSON(needs) }}
diff --git a/ansible_collections/vmware/vmware_rest/CHANGELOG.rst b/ansible_collections/vmware/vmware_rest/CHANGELOG.rst
index 2001028e3..01532c8e9 100644
--- a/ansible_collections/vmware/vmware_rest/CHANGELOG.rst
+++ b/ansible_collections/vmware/vmware_rest/CHANGELOG.rst
@@ -4,6 +4,44 @@ vmware.vmware_rest Release Notes
.. contents:: Topics
+v3.0.1
+======
+
+Release Summary
+----------------
+
+This release brings some minor changes and bugfixes.
+
+Minor Changes
+-------------
+
+- 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 folder attribute for host and dc module only (https://github.com/ansible-community/ansible.content_builder/pull/79).
+
+Bugfixes
+--------
+
+- 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).
+
+v3.0.0
+======
+
+Release Summary
+---------------
+
+This major release drops support for ansible-core versions lower than 2.14. The vmware.vmware_rest colllection 3.0.0 supports vSphere versions greater than 7.0.3.
+
+Minor Changes
+-------------
+
+- Use 7.0 U3 API spec to build the modules (https://github.com/ansible-collections/vmware.vmware_rest/pull/449).
+
+Breaking Changes / Porting Guide
+--------------------------------
+
+- Remove support for ansible-core < 2.14
v2.3.1
======
diff --git a/ansible_collections/vmware/vmware_rest/FILES.json b/ansible_collections/vmware/vmware_rest/FILES.json
index dadc6b6dd..378d4aa0c 100644
--- a/ansible_collections/vmware/vmware_rest/FILES.json
+++ b/ansible_collections/vmware/vmware_rest/FILES.json
@@ -8,101 +8,80 @@
"format": 1
},
{
- "name": "changelogs",
+ "name": ".github",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "changelogs/fragments",
+ "name": ".github/workflows",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "changelogs/fragments/2.1.3-changelog.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "04c648a3bbce3c8a0269b66a2c07a20371500555f288bb45c1341536931400fd",
- "format": 1
- },
- {
- "name": "changelogs/fragments/2.1.3-module_utils.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4c37ab5645d9311229def18a61badaedcfa17e1179c114fa677a0054816dccc1",
- "format": 1
- },
- {
- "name": "changelogs/fragments/allow_space_in_search_filters.yaml",
+ "name": ".github/workflows/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "442b843a80cd17e09c0074675c1d10886abd7616ded5603085bdeb0fd1eba9e4",
+ "chksum_sha256": "8b844e5e5f33dcee0858e902b2eb4fcb2455e1d23fcb1346eca048805e76ee24",
"format": 1
},
{
- "name": "changelogs/fragments/cloud.common-bump.yaml",
+ "name": ".github/workflows/linters.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7550bdbbb1a60b3b0025798117408fc09f29cde56c233c72d0f818f42508ee8a",
+ "chksum_sha256": "767565d9c8caa696fc7ca31d60b237bb013778a7b10a0903bca0859571cd2485",
"format": 1
},
{
- "name": "changelogs/fragments/lookup-handle-special-chars.yml",
+ "name": ".github/workflows/sanity-tests.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dc34b8d6241439822b3dad420a38f1d94fbe7f1689cb9b86949de999a742bd7c",
+ "chksum_sha256": "aa3a4ca5ae417a07ff5f2b8d014ffd3f336ba40358188cd2d44fa5dc43398c35",
"format": 1
},
{
- "name": "changelogs/fragments/set_default_galaxy_version.yaml",
+ "name": ".github/patchback.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8b6a4f3fc2abf9c246e8d8283896a8cda57ab16b8166ce13be01dfd8fe61b0d0",
+ "chksum_sha256": "ed69f87ea46171cb574fb77dc74fdbd7a269d4cad8d5ba6494d64d99842ef8e4",
"format": 1
},
{
- "name": "changelogs/fragments/use-FQCN-in-create_vm.yaml.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "1b1595774233b6db704e6172ab1e7a2bbe9614de216e8954cd7f5a0e111026a9",
- "format": 1
- },
- {
- "name": "changelogs/fragments/vcenter_network_info-dvs-example.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c1f84cc13e19c754853175ee76d9f4c009ce005ab7f786c95f3a2d5c7bdbe794",
+ "name": "changelogs",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "changelogs/fragments/version_added.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "258d277b97968dcb976706c732a5df378c72263e4b71138dde713dd199692b27",
+ "name": "changelogs/fragments",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "changelogs/fragments/vm_template_library.yaml",
+ "name": "changelogs/fragments/.keep",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6948750ae2aa26c8b6acddf9b8eecc6acf02aa62b83f6d126c3d4a9a5db8f95d",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
"name": "changelogs/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "42497a19aa2ad2ed63dfd4ead64d18397474acaa52273ebeb95b2d363dc2c124",
+ "chksum_sha256": "2a7e942704a1c2aa1a707e7bccaa50fad671ce4e15109f3826ecde58e43fd9bb",
"format": 1
},
{
"name": "changelogs/config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "41f8a46f2012f5ab61297a300f9dbcc5a16593149e8270c56dd921c4d31e5e9e",
+ "chksum_sha256": "cc7aa646ed1a59e94c55a63d7293ad8e1b63b19d5b9037b877e75f095a6001a0",
"format": 1
},
{
@@ -298,980 +277,980 @@
"name": "docs/vmware.vmware_rest.appliance_access_consolecli_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "47a900482251ad116c2dcf7278a320fb183d4304a811b1c005b1d40631a54616",
+ "chksum_sha256": "5ba32a0e0fb770350f7d9b10f99be2b5189400c28fdf4361030595cc74db71b0",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_access_consolecli_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7a81893d1d294ef689c3f31e3ba8c7387e162f69b59c24a18c3f9035ff14f8ff",
+ "chksum_sha256": "8c08e2ca2eb5fbf6ee5a583b40ad96ba9b9dde83f2c61735815d7a8e8a1b0448",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_access_dcui_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "599547e3be65fb6da56e6aa150df33bb21b84120108cee32d02601b3edd227cb",
+ "chksum_sha256": "24e9b55148c6781215aa92248464d2a03fa822d5037fe60977f192fb68da6095",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_access_dcui_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "247f10f3dc95e72a45f3f1d19e27050d1a13d976e62d8ddb607b18eef57b8fa5",
+ "chksum_sha256": "c4088b9168d960cf28a53c7c1393da5eaa222c8d0d9b92f321dd9fa0e33cac0f",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_access_shell_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4844df0c847ac830d8c79680bdf0ae0746c497659c2b5c53a27e836cf2b280c0",
+ "chksum_sha256": "25976c52d76c354d3dac7f730ad77e3d06f99b6c139c83591dcbfaaf9851ab67",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_access_shell_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "349a3ad9ec745bf81d77afa061d979482490efcfa9b87db26ba6b68c40b78163",
+ "chksum_sha256": "2f75d70af0755b9d20d3999bb9394380d8d0e45bd060e5d04b507311f1597600",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_access_ssh_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8359b65beb437596359074bd03a0d414f156fb52c496148ffc294fd18c503acc",
+ "chksum_sha256": "192c34705538033bc6fc388f5ed8920e94ca3098295afc31d99d1afb33e90c4c",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_access_ssh_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "67332c7b4c9050500ca9b44957c58780ca88065cc877b0e569eea85e588fd9e9",
+ "chksum_sha256": "e08fb2b29b6f47997d5d007ba11dfab18667609625b27c81582d13bf52935f63",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_health_applmgmt_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "55ad18edd6e06852a358cf40072a5750076f5a99bcab855c737025e3dcd87938",
+ "chksum_sha256": "063b6729f4c11f6d3541af0f05b5a4a5b7896ccf8b836e6d81bc06c773f8f24b",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_health_database_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a7fd9283c2039d228b0811f37c927c97ea43f956a8965ddefe0990d9c16b03b4",
+ "chksum_sha256": "2fef54307582a9be469b9f9511d5994f6d5af182a666824ad5004e147bdcf2fe",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_health_databasestorage_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fde65e0ff6932ebe1f50b5e2a07f6b3332f1861cbb8ff74fc7d07a274a683486",
+ "chksum_sha256": "fc8e69dcdc1c1ca128142b3d556b31114066fc2e98da16dec9214298e7a73c1c",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_health_load_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aec2af492fe1f5cd521de6fa5e903a2983b0e94559bf106dc2fcd80ec9905026",
+ "chksum_sha256": "517bfc1cf4c0f681e0f02c5414404aceb00d06ae569762f5141a4eb4f8eebbc2",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_health_mem_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e330bc98e1cfeb693b9223d03c448a013a8eda9c0b9b83c47837525d90c13393",
+ "chksum_sha256": "14fcf108f3e85f89fb0478fb8f4a68c698be9e0b78e07c44c317672a8205cf3c",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_health_softwarepackages_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "55b2b4369bc792fa6454f95c12babfac2c0c4308a7d9d319b03ea50cb170c189",
+ "chksum_sha256": "636acaec943818b241f722bd0d25e210e0b32c31fbd72569c9a49a79b7c5eae9",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_health_storage_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1fd14ab772f59bc5939f594b200138e00627d080976f7cd406b3860ef131d5f1",
+ "chksum_sha256": "28f5a5d4de10e17491fab5e35ccaa9ee443839f866c90c457a64e338ed70ccc0",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_health_swap_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d10f5b64b2da8dff3a2b6f3f0f71c8b24f27502b4424ff000e2c19390e72a2a5",
+ "chksum_sha256": "802febaed9cdab5f49c6f7afb1eaa9f8f0ca35dcc18a2b8f3e7c6b9ef260e761",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_health_system_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e51ee0924ff984cc5d5a279081eb114710f3a369683790baa13ba0f28e0d4b17",
+ "chksum_sha256": "67a3d1ef1991dddcfe7cd9cfb6294eb14991b4c99cdd3a72c89f7546cf4da90d",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_infraprofile_configs_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3c1bd931aae5b312298c86579c55a1c15f5d3cb7aeed01ddb806e03400a11f00",
+ "chksum_sha256": "3a293c1e6ba37f13b49243c318032c0a19a87546fe19deb2e71dbd569fa0fb3d",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_infraprofile_configs_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "da536c660a85673adc0b4fe4de525df4826aaab99c28055caa536ec05e372442",
+ "chksum_sha256": "71ab1102e4863a1461d5fe161cb8dc4939a961a773a24d70ebb2fb149f252d95",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_localaccounts_globalpolicy_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2886cdcd439f056a93b91dfe8e8c642914c8b9a57d37d345014220215599f965",
+ "chksum_sha256": "b7aee05e870ed6f064f24b8a51a819a3b9ec7d44a00de1e4bc933d07d5568016",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_localaccounts_globalpolicy_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d67eee0e643ec3adbdc7f07f4bf9ca7aa90b6ddcc79bab76e2b5921ee630607f",
+ "chksum_sha256": "6763c1e7b8a9285bbeb90933e3a73121cdd5bd28819d3be9aa0a0d437a6a1ae3",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_localaccounts_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7e3414e0f93aa93306ccf1a3bad85b5beec1ee2fba96bc09a700e80b8dc55266",
+ "chksum_sha256": "aac626bc69f525185e81532e311070b1ad8517ababc356ed06d79c9dfcea63a8",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_monitoring_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "51cf128d397902a2899eeaf3560880c07e1986f2bc8a5dec860424b0765e2735",
+ "chksum_sha256": "fd38853b0c2d1db029922964f92e9b671018304f9f9f888d712ad5ccb5dad0cc",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_monitoring_query_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b33c57013d08bb6985fd8be5b57c2a7aba384d40f0ff6f2f5d1fdec7315eb7e6",
+ "chksum_sha256": "01fe15e7e994d1ce478541911d7ca449b55b1e65840ac3c911935fd7c677084a",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_networking_dns_domains_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9d725cf960663464a5ea0118e97fdcbd56702aff937663e9fc4ee70e3739a55a",
+ "chksum_sha256": "757a3efe161fdec3635ce49e74f92c9012ad787d05ad63fdf9992649db2cb173",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_networking_dns_domains_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6179fdbc309f3e775886307d563615eb5750182775e7813dbd978cf4239e8844",
+ "chksum_sha256": "0273491dee8677a81d3afd3927720b91e861123ce2b2caea214073ef28d2ba65",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_networking_dns_hostname_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "32bf34f90db8770dff5f93c4c3fb5d4029aceac6aaf024257589ae6e056776b1",
+ "chksum_sha256": "413179da5e49b01ae6545ac9144dea10bf5095ad25ed9e273b0794a3781b9f44",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_networking_dns_hostname_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "62c6100388934bd8c31c049796b60dc85cc087ef9b0ed6f42f1225d11589b92a",
+ "chksum_sha256": "06955f0f54ec0b6622ff79cc264c52275d3cae0326e354b0b45bf64d97ef7567",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_networking_dns_servers_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6f2b1e7e5a320dc66fa2e024a1a8c7a6c7c3340edc448dec7396cf76e39d1503",
+ "chksum_sha256": "be555312b78effc73b84d90178ee29c9e1977f336d4d7f45d0feb16f55069f00",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_networking_dns_servers_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c51e30dc067224564c6c9a1ed567eae30c868a22d94bafa1b3087bbe18e0c709",
+ "chksum_sha256": "5ad5dc9d856d5ddd03dcce108ce3296fcc19da57939b48ba96bf3c0bf89ad0fd",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_networking_firewall_inbound_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "67f422eda22a0442b75beed56961f6893517258b5af1f3270c8596e27560a972",
+ "chksum_sha256": "0d0f2ab2f8ca8df09c3f1b79d8511a9ada34da216030390ecae358ccd7509c8c",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_networking_firewall_inbound_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "892f03b6cdbcb0a21001833cfff87e7b68ea5f6f6266b8a28b4e76fcb001efaf",
+ "chksum_sha256": "1299229cf5d806e64a78393d317ee39bad476ef0a3432fb842727d8370a0e81d",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_networking_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fa2e35b1728c8230f632cca823fd090247b65638621cbbdc06a7985b81e90e89",
+ "chksum_sha256": "1961cc21f3fb9dd102d8ad66d42e9ab437c7c1e7270eb68688e8c48052411e0b",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_networking_interfaces_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9b0c06d6acbeaf373186fa02f8d36a143c1511b73cb24158df45627e65bb85a3",
+ "chksum_sha256": "3b17273b6da2a1133c1a8df2484c933e3e9770eea1bdef467383c570d3b14b86",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_networking_interfaces_ipv4_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "390eb101c605524a8a62de085dc417d683b51d849d3968c0014ace71b8fe59ac",
+ "chksum_sha256": "8026dcd3115cf25e7f9fc6352be8d983a37d1949598ba6be3777d150471718ef",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_networking_interfaces_ipv4_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e9f8f5f02f372a306ce70f7f8b0bef9feb9f420c743462343159c707f4f3a759",
+ "chksum_sha256": "e2dc86f44e5efb657a3743b6d1f6f842f11a6b6d84ec64c8ecb87100f5cc82ad",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_networking_interfaces_ipv6_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dac68fa05b4cd09dcf945bdf3dbda11740e904a5a0503455d151306e64bb663f",
+ "chksum_sha256": "932c40c1628fbf334502b6ee90fe2c7483516a3a2ad5a410058c48da2ef2b605",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_networking_interfaces_ipv6_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2d07a7d4d9191543343234bd7636504e4a5da9baff56b7c1ecdcf62a8421b87e",
+ "chksum_sha256": "23fd4f5b45fd2d962cdcb31ba72903cec7ff543a490facba25573f941f956fd2",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_networking_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "066c2f6a8eb2398dbb872b7d1217ce5f60ee1fa54d78b594aec9036e0e6448c2",
+ "chksum_sha256": "938eac2ccbaa54096c91fc3c3991c78b4075189d8c9b58dd6a0e56510d6b8abe",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_networking_noproxy_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cabd744f5018f26c551cdc8c09f05a08ad15856eb0e70a6cc70b1c1711bcfbfc",
+ "chksum_sha256": "f62efef0a9ccef6f7357f3f0622861f6c3805624025a406c7e4a56ef214c30d2",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_networking_noproxy_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d75d88df56f592c25f91ffb22d544e097d153ea92228b595da5539eb24f47274",
+ "chksum_sha256": "3d94f1c1df89d7714fce7499679d880ab124e415bd140d1039cb1452cdaa902c",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_networking_proxy_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "49d1487c2e8ce733d5eb6a34fb858b6e2d23a8b1c86ee1d28a57cdc2e3fb1fe7",
+ "chksum_sha256": "8ca41d6a814a16a5fb447af4ccc6475f7045ef9c6187c7862f707ab7ae654c8a",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_networking_proxy_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "67948ce1de5e8437faa55e53f04386522dae66e76db3687cd89277cd73ef6ae5",
+ "chksum_sha256": "20ba16872a6151d7d7a9f92133c34a916d4976b99eb1090dd8d01347d6a2bb45",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_ntp_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "666127c095b585b863bda41c9dac1a84a529103dde8eee7cb0c306dd4264c967",
+ "chksum_sha256": "240fdc969ae175e39707110017d015ddf21fe06c60dd3a021a693e2abdf02ea6",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_ntp_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e65010d6b60747fa49a7224e2d29d57afd4d2b060e1b3c9e77c2499471dbe652",
+ "chksum_sha256": "0c5cc41c2f4700d3cfc705ab4d525c678a92b849b3d67d6629217cdc75015a99",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_services_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c7703c3549c20fda9a06f15c6d8b43b5e66b986aa6146db38263e7be2d36f8c1",
+ "chksum_sha256": "0d344df960e8e3dd5905b23f5f15cdaa2b410b8fdff52049dfe34ef62ac10680",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_services_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5a1a7a13d8c1f11bbe2305f96436a231299cab74dc1dc6c2ef27b64b3c4591e8",
+ "chksum_sha256": "c4b7c153013df1f1e37dbbb401458355c65ffa57d2e1be0ddfe453c8eb549cea",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_shutdown_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "71d307a05eae2057954d391c8a87b4c8cb20b42339935cea5c4bb6fcf701dd6e",
+ "chksum_sha256": "5cce02d74548651e31561e3b38bf5aa17b01abe11afc82614cab3ae7516bea96",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_shutdown_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fb6a8f277523ad15819e06440017379b574691fc5cc4957a91fe757049331d09",
+ "chksum_sha256": "cfe015db066831056827f58a809076e55de7218f9710a1fb7430e95cb8da3243",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_system_globalfips_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8ff5d67b1135af564493caa0d1c3492f336b70bc90c4ff81f488a8a2e8ee2f07",
+ "chksum_sha256": "fc3a9ded54fa0b87a77cb833bd513bf3229db459df19257328157e1d84a37c2f",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_system_globalfips_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "981b1dadb732ca7103311c7b948c78f9ddc78b3e809f86a10825c8f27c9e1e32",
+ "chksum_sha256": "4897296b97fd85b797d81b556b45e4b3c8664714f35b6e0880f70b462afe10df",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_system_storage_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "68029107559830c621cd06e06646808e44abdb18a291a89f3274c4f21c287974",
+ "chksum_sha256": "8d8638d2b00799d731a2e553a4849248a7d82e05c0fafc72a91d23f38d60747e",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_system_storage_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3c3753f0421c3c61d54e8975cef5ee477285f19214bc6776ef135ca732d628ba",
+ "chksum_sha256": "0c5feb80ac74feae2025b7595e03498fa66038f28d7558bbb126402bd52ea992",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_system_time_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "684b23722e460363214206a22848138514846ec86fc35f3fae2f0bcb74b77dad",
+ "chksum_sha256": "dab557c380e26ca47c26f8f2b2ef10b9d1fed9799498433541fc78be641de085",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_system_time_timezone_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4ace4bfcd9774e9f6d8e94152a0743c3a180fe261f938374a724acc5afda086e",
+ "chksum_sha256": "7f8b4855a799bb6f6b60e0f2610f5d44eaf723c8c08104ec8b2f5d6263dd2672",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_system_time_timezone_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bb12a8355547dbef8e18bddecd777e7daa738ffb5cf952690939c82a4f9160b7",
+ "chksum_sha256": "aa6c48bb7370205851fa89a5b604c2f5dbfc1d32ab0a0502cb694a3e297a83e0",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_system_version_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "95b3c96cacd51fba30a2d07cf8ac8998301b31d8e44662f17a035c5710359ee5",
+ "chksum_sha256": "bf9bbd83d77965e22c3bdb6edd36e50171ea101a4b2bbe8cf9d0281b164561e9",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_timesync_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dc29582c715049ac37413197e8972c46e49f97c58ba4f46eb9bda4b949b43d63",
+ "chksum_sha256": "2806fa055f95c6b5cc54c3079adee1de05a51a1836dd25f46b075d3493470c61",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_timesync_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d0bd357c947fb98cb40a018c48bbebab2d6f7f5bdc81252d7f68dc608d532d44",
+ "chksum_sha256": "ee2aec0505f732d70589e164df4ed2547d4022c91e1df811886143e49186588f",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_update_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "229ac54dbf73d12f7ae1e3764fbc4284929c7b3a0dcc32107785414abb3e4197",
+ "chksum_sha256": "689ab10e767f12cb163cf5d019339488e927a36c52acaf4e758c51da3625c09a",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_vmon_service_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cbb3b2c394b8f6ff57d96c8a0071ca71318d677faa78278adbe618e64f11382a",
+ "chksum_sha256": "f8606604a36dbc0f82b89361e3150ae8b89bd15d3814605a68b4f4bafb9a72a4",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.appliance_vmon_service_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "152c27793d8b0d1e71aa77fe5e008a56fb5f48e991d5763d8f7db53c06682e8c",
+ "chksum_sha256": "0100469c0891e110a41b1721f1a951cb99fe8a3e58652582fa8c83c2545a9c92",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.cluster_moid_lookup.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2f965f4428cbfabaeb653bf73d6d3cba4f0afc39c152c9877f37607fb3090a25",
+ "chksum_sha256": "4c2179febaeed7e6a607776ed0f3b8af5b9b10d1bb63cf3fa0e4e1203f157c6f",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.content_configuration_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6669d1b018b1d28684365967763bf17a74743a69c228b19cedbb9ed75c42f00c",
+ "chksum_sha256": "de8cf6d955facecb54a2551cb127701294152800e972f34a8a60c9c8ffd12f7a",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.content_configuration_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e157b206c419e6845aea0158b156c5e03fd311b3906307c898ccb40c47fdaf71",
+ "chksum_sha256": "8966d6cd866c66e77f408200b053b29dd6b7826632e9e02a6f122101200416f9",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.content_library_item_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0b10de9f28001d15417be3806a434fd662d6f8b2466673d82828357981168d99",
+ "chksum_sha256": "014b3ef2b3753460d34a1d3f0b2ed6bd235c4a218270e154b16f934d8ef91773",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.content_locallibrary_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f02dcbf32106034cd91babe1ca93ed585176b595a9773f5e6dc0889e10d5461d",
+ "chksum_sha256": "9590dedc95110c71472a1dc8ed5009621afb49a0b7c9b576664fd9f2f196e7f2",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.content_locallibrary_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be93033d098fb404b953fd892dda465d994c5ae566ffdcf9b47f7cb81175786c",
+ "chksum_sha256": "b37d3cb24eb1995dddb6641e801347a546821a7d2dd3f17434a02d1a70dc2eb6",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.content_subscribedlibrary_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4311f16ec1e06a382f39b0ab6ee7091a22c611b9923a7b906aadd1e1d98f0307",
+ "chksum_sha256": "3ddfead8b4aa99812a91ae533a580b1cc3a4b7e859d199956125a4182db78254",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.content_subscribedlibrary_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5d6f6b30b629ae90da1587f83fce7fba145486878a7722519e4a5c21c198f2f5",
+ "chksum_sha256": "41ac9d3b154cafb1b9e3e1c03bda28d692eb435b63e1595f493563e7e17ac82e",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.datacenter_moid_lookup.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "546e834eaeb4aea016cf50079abff89daa77f34c36ca1114806ebb12fadafe26",
+ "chksum_sha256": "d2961c98ac983f99af7b1215a0d5df5426b946c6662c0d664b68b2b9563afa9e",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.datastore_moid_lookup.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4be7c093071006105a464241a10198b286d67d327f221c16ffe3aee540cc37bf",
+ "chksum_sha256": "a9e9eebe9fe338e4d78cabf5a13cce87e858d3cc32688a7a173a0a841e17d1f2",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.folder_moid_lookup.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec8606e3337cde178b2345817b07f5dfecb6ffdac3ffa0c4b34cfd3d8fa1c9f0",
+ "chksum_sha256": "cde3ab7cc7de424684cc4cc3c5577eacb1ce10a6675b613f3a6ce17784e173f6",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.host_moid_lookup.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a591380f337d73799179a965f768fdbfe29e454706ea3b28a58e25c96115b693",
+ "chksum_sha256": "2b1ccde80ee970ddc17a4b5920a4a8182afedea6eede15bc16bd298e866f89fd",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.network_moid_lookup.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "79cd893c65f9f48ff77d0ab61a35f99ab8062797de9862c939522e8eedea86ac",
+ "chksum_sha256": "2edeebd3f4cd12d2c24af52a95e1bb4edc79030a36957e9fa23945716bd17525",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.resource_pool_moid_lookup.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4b3f95b7eed54b88515243aa2124e5b328f3482a9f4e97c5e8996e5d073e9eb5",
+ "chksum_sha256": "2d7f85f20d3cfce6da335566dba152218bf114606e034a53e34bf3400cc06820",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_cluster_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c4752e59268a072918dd09dd43728562f726720ffef98a6b4b5ac6b645708fb5",
+ "chksum_sha256": "d29733317371a1097e2cfd55763db2f45e050a861fad6ef0ae720c13fb7b56f1",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_datacenter_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3811a8df728192dfd541e864bad0837c27faac9bdcd7ba6f5d2060f6fb13f0db",
+ "chksum_sha256": "50c5c3b63bbb896ed95c50b1387a51a3a129b54ac3476a3377adfa31037045dd",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_datacenter_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cfed6abe15094ef33cebb1e7049dd1b359f1375480b675e1ba33d5684e62b94e",
+ "chksum_sha256": "4891b8e1e27579ed02ff708add2907d65ccdbb0c2c75dcc5ee3598b426cdfceb",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_datastore_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fae86c101bc7059c7581e917f4051dd42fd53b57e3b5227118e85a2143f1c6f6",
+ "chksum_sha256": "502f92cdb717f506c728af3e725121150a3d844c71ea1550f1517c409e41b993",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_folder_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5e7fcfc027a94d51aa4d49e88044736e1e409256ec3365c3d50a156546208f18",
+ "chksum_sha256": "e681c8c67a1a5d17ad29b1d85f87c6c8cc46449c424eecd3832b0059fc593d35",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_host_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f5424dad48c86a5834b884061745a31ed10691c43020850c7336b4fa066a6f04",
+ "chksum_sha256": "b433ff5d30557710dffa34d9afb6423e7861b8f52bbce3cb9b04772e18482a27",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_host_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3c42659ae7c9a2f3cd4cf43a6b9781505d4776d2bc6ba291932ea430dbb343fc",
+ "chksum_sha256": "49d67b89204d3875d68605f2323c45f710054ab15ed63d7a58fbe4061e938e9b",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_network_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f3b70ce251d631a5031806040aeb20628d77f37104ea642499f43ac99c3ea11e",
+ "chksum_sha256": "ba819a77c04e6fb89ddefe75afa6213ce866d168afa6600c48536e28f8c94d64",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_ovf_libraryitem_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "74f81c123f530c8e0663d3e8ad5d7a423dd8f158227526f935d22369b639357b",
+ "chksum_sha256": "2cc0439eb9e5f4859c855cff257edf7c2827e4f03ab55d4d3d3f63c20d0684ed",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_resourcepool_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "40b759aefecc05634cdbb5b0cd3e72912e21e9903718d4433bb9389860932685",
+ "chksum_sha256": "d6031f22ddde195245f1655984f4515ab3df05070b7651b052b041fd3eef2135",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_resourcepool_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f9b075218a254e2c98c8a90b245971521854a47d9000cf0409b46cf3e3b773db",
+ "chksum_sha256": "b55358dbb0a0bdfcd5cef52881274f20164e9ed26aa3ef206ce4b298f7022821",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_storage_policies_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "81a2574746ac8fe0ebe1e27ab00d31dd5405d6054478c6d0cd6a3a94be3f9b04",
+ "chksum_sha256": "ad741108578df61bdcc0075ffc8b4ab820d12c6e97b0fa90a1e38796a0abe5aa",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_guest_customization_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d2a67d3aae9e7e055e360d632c7c7cab31625d3744bc2051ca6873b03c4a91fa",
+ "chksum_sha256": "f29dbe7e024cc016be603f9a7e49ee1e42d4f8f1e1cb9abeb64ccf1e5f36480d",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_guest_filesystem_directories_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7c361d47c2c29f73e509ddbf09eccadc180d4b2eac55d10c10e356ee03f6b641",
+ "chksum_sha256": "ff8aa85bf2e3994c50987b3f72f04fe593550024de06e751d3d50cb93a8ce227",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_guest_identity_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4282ceb28ac07a8d6cf16d23674bc1caf1c8b2f36a61627ab50ed9849e1ba191",
+ "chksum_sha256": "71a4b67424db451ccba4ce762e59439ad14ab3c22f871915832ad5423777b573",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_guest_localfilesystem_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "10c3b127e64e98b487ca2f1b3ca59ca1c6a553f91655044746ab32c1d67435dd",
+ "chksum_sha256": "e99538b940c75278c713d32f5434930fe24a89732cee4f9fbb01a25bd0fc21f0",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_guest_networking_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6c752fd40f55108a3a3f4e2ab2533279ff2a0d90bde7c81ec6c84657f49bcc7d",
+ "chksum_sha256": "65fa4908b106b06d71e3261c8ef4c566df0a95ebc5e2b68a10c157333b2a2827",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_guest_networking_interfaces_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a3537090afff5485b6faa513c0aa3cdb1a4d2ced9930152ea530934029a86e02",
+ "chksum_sha256": "915f59cd9fd88db1ea97a2051f789eb16192e63d7f19a1cc0f9e6d456e2b5d86",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_guest_networking_routes_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4938c08e510a112f0620c7700b172ec2c3c500c80764d18c70a692776c4e5881",
+ "chksum_sha256": "32c637ae8389714e227d12fdbcf82b549c5242828e6e399da0b01333339f7c79",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_guest_operations_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8bc884689b4791eb72db5020bdb613f6f758a607e8c1673004f9d88316e262dd",
+ "chksum_sha256": "52e2adec61c279c5ecf5f592646fb9eda5808200d7790283400d0c07f3484728",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_guest_power_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "079f7d7423ca0b1fdddbd6f4de332298b1ec2a18102feabd98b3eeffb7cddc2b",
+ "chksum_sha256": "c582d153f5e428a8a20bce26ecf87f6eb37c0ff2b21b035b8a9e046e45176d24",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_guest_power_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "105b04dd7d516323259154fbeffa641f99f278b2c3ee2e4a7b8a6bf43e554ab8",
+ "chksum_sha256": "7e55069eddbb792fa05e5a48896fac418daed17ec16cc20556225c0fb02bab50",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_hardware_adapter_sata_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "de787b5c043f2d8102ef7c50eebdcd940b3779138537109f6a1c7202c5b6d1a1",
+ "chksum_sha256": "1c9bd41d3085394eaa2d16b54e95ab2a305a9f8035124d954c8cc2391ad52671",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_hardware_adapter_sata_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b3836286e8a7a15bc543d2199441b10d3c240cc8db599a373a153ce4c0ab9a73",
+ "chksum_sha256": "cde8f6fecb12ddd92555edc3d5d5863a2465db943656987b5f0b5f7c62346ade",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_hardware_adapter_scsi_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0845ca3e33d1d09e5abedf5a1170acb8f4abf15a940dbc8a37e478f8986cde91",
+ "chksum_sha256": "87ec3557b7f080fbbac2ddf08c43acc435ba9846b5eda225d9621d5a83fb76bb",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_hardware_adapter_scsi_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7ec441557bd83e2a6d9dabec548ad769b48f66000cfa585edd4479702903c8f2",
+ "chksum_sha256": "2e55006cb7389b18542b1d84ecfee7cb1276b9ad57662cd53986348461a5d5f2",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_hardware_boot_device_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4cd2eae2d4e8870693ce7b9017af1e5db7729f3900227e55abff92e04277a84e",
+ "chksum_sha256": "daf608a704218c466af6ed2973bcf5055702f0204a6ead9ba3355cc8b30ecced",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_hardware_boot_device_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "38532a46e98e7d7fd5a4896ffa45da48834e023a0e2a79cf9063eb7b6fe673c8",
+ "chksum_sha256": "79d13b54197cf333d36f5f4712910d9c4df17e6b996804c03d38cdaae2d6e53b",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_hardware_boot_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c9e6588fd86f3d0719fbf13facf1be1c6e3a9fe3972c4d376402bc0ba8450a58",
+ "chksum_sha256": "df2d96a8af02be98de7221a9901c000b5149a5f7623674092e3c8da428e5240c",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_hardware_boot_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3496e5b8cf1bbe044c4e425a07cefa8ad25c157cef80f46fc7e31889d6200170",
+ "chksum_sha256": "15e5d0b65843a1aba97885b59d762228f0527c8b44583b3f2586afaccc880db7",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_hardware_cdrom_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "499dbbe9cb7064e6014abedfde6517733125ddb0eb0c17b02f862a32a4314a5b",
+ "chksum_sha256": "15019b75346d17646bc1f5d5a449d2d745ef840299561f1e1f55bd9346eb66c7",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_hardware_cdrom_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cc1ff274613a32f213ab5e12405c164b6a8c7136ec6378665f312fa03bd7940f",
+ "chksum_sha256": "d59d374069a5028fe3d33996d0a05873d9ffd262af8635a6289479d19df7f85f",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_hardware_cpu_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "124443285bc24f35e98929c0288a8f50bbd45619a6af0c7d654d5ee27435f88e",
+ "chksum_sha256": "9f0fb4baf346845ba861f250eccde4d01e825e175561ac08a9872a258e97b811",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_hardware_cpu_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c3984b01767c3bb997e09d39cd8e14caef6a73571276dd5802e9b6cbe7f5911c",
+ "chksum_sha256": "301175e738a650c37cdbc89b1b69bc4c8856776e80c6a186a090a64d06c461ed",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_hardware_disk_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "377283e64b06e4bbdbfa6c093307782b9725d620b39dbd7a34d61c78329368cf",
+ "chksum_sha256": "3b425f4d207da77dcc723428373539f69c0125f348661c2540195ecde66e74b8",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_hardware_disk_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6b5a4f201aca73e027d67f97a92af91c6aeff477d2103869f42587c782475c44",
+ "chksum_sha256": "bf0fcf248969ad98b33a8c8a56d8505ae1098e5dd73856da886c8f31fdb0b69d",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_hardware_ethernet_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ffbaf78a4195b4e48cbabcab261d77e315dba055c4d1366d1a8f3aed18b2894f",
+ "chksum_sha256": "067e916f1b08b7f5a3562e264b7215b4e27639bd5c60eaeac9d49194713cadde",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_hardware_ethernet_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "646209d03f04f4d0537b205340fd4fe0947dfa1b42dc36c7e87c11737623d6f8",
+ "chksum_sha256": "7994a8c7f62fb6f9c3d4fc661625ed9fdff27b5a2980ff79cc3e34f1f3e7325c",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_hardware_floppy_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f22afd125c9e2b6b18e99f954c9d27d741361f390ef0b3a3fbb9d67bb0d3b451",
+ "chksum_sha256": "1ba2e33cd6a3f2acad1d2384f0bd75f44b38e596343ecacaf7d19062488d0312",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_hardware_floppy_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c679d77fe18640c061b9b7802fcb94721f78e273a0432050d70b86011dccb4d4",
+ "chksum_sha256": "6ead26a1efb2b206fda4b4e1101f78d65fd9e3cf90f408dc90a13265ce896b39",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_hardware_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "afaa94535cf769cc04807a8fed2d0e83d5d1f90126e487c846cfb784395e4386",
+ "chksum_sha256": "80117385ea222c6a8a1285fb895110bbc73c401fc9aaca567fe5fe6dd9c9f772",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_hardware_memory_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c8e8e4676d7306e5fb3c75dd7a55b7b556e1cfbc8df35e081423f0b2fb74ce39",
+ "chksum_sha256": "60b3404d95217078029598233dbdca91c60620165cd6537c72433b4aad3d37fe",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_hardware_memory_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0f2e87835660e19c51096963496507bfdf493a180a21f20147bcf41f0861e5ee",
+ "chksum_sha256": "0ff27c7e3fc5587ecc978c5801a049d402c1ed2449bb42eada493f7800b652c7",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_hardware_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "810dc41c7fd95c1dd8af05ba485d67ed8a74fb00d86e58651201ab9dd20e706c",
+ "chksum_sha256": "c7232b2e64c5847e4d7ff9e973b68d031f488a9e8e3772a636ab8e1a91ffe021",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_hardware_parallel_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fdbd4dd30915a3b26ac93901e2450d919c477051e0b36c3f2e909a08d2ee524c",
+ "chksum_sha256": "9f8f2779096eb863476cd1d948a69c6b98485758bda4028c006c8b0beb0159d4",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_hardware_parallel_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6778ee1a2513e42b44dea743df409ddfdb15c7b5dfd4aadcd2990a7acab09b5b",
+ "chksum_sha256": "ae37af99d01136e1bce499a2ede56dce14384503900d932ccc05c3d9e5a74a34",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_hardware_serial_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be8563c515ca9c2393a49fb9ac0a85ccaf5d5840f74cae923b54ce0d0cddb21c",
+ "chksum_sha256": "82abfe5ca66b86ab98ad302d4406790ddb5f5666d64cea43bea8253f3db13bef",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_hardware_serial_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "03f6c764cd176b9c1ce79232e3e4eabc6d167bb3f945818e4a979bfe13848444",
+ "chksum_sha256": "47a813abc4e406e5bacc1d96d69def89a465bf57f69f0b7cc2a3cb893858d3e3",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bbe519d36eae87eabed3c50dd404478d950e9caf07f0b95d80e725b196295f30",
+ "chksum_sha256": "3b0f766ea47af7c4b798c9d2b1674c0b82c4a792966e45b3f38191a7f23e93dd",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_libraryitem_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f48d6e4c2dc280215b0d71f1ba246f0d38dc73ad490bc4545a469c5ead6a7a70",
+ "chksum_sha256": "14a429cf08b48ff1bcb321d2432d71f8aa7fbfecb4318882b4cd9efc5382ff3e",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "932f355a90ca00c10af59730f5f2f0ef12fed1615d449b8f184401e36863efbe",
+ "chksum_sha256": "56ac6b71be55ed5af3c3167d56ccdbdc83bb7a44a7e6708ca5a2b60cffdc82d5",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_power_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be59cd795994545a857c8e2b67b19ba7e1df1ba57e476bb483268edd07ecdec6",
+ "chksum_sha256": "842bb5d781ac5023e749908846e65f8c865c4003b084c341002df4c98f2b5b92",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_power_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4fcea17d4f2a0fbb681ec583f03a20380fc068c52aa4d1a047f67d080a587b54",
+ "chksum_sha256": "0bbc00036a2d80c21f8e251d5507350cadf830459ec1959f08c8487e0b809f24",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_storage_policy_compliance_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a004fb90becb84075a22e342265e79b66bf9b5aa5a68707bee0f538074f358d7",
+ "chksum_sha256": "d5e22df108fa899e2a6dbbe247e5c29911567b36cfabdb01d36c2317b466073b",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_storage_policy_compliance_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cb7897f17ca8c54bca702e4b58070706c166834ccefd11cea883f5c8c6425060",
+ "chksum_sha256": "87561d209e55e7f3295b2f30a5cc1c1c41a380d6421d1b442591d1a31265fa8b",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_storage_policy_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1e92827508d853f32c77a7324e0d82f93d7a330595a040af55c574af5a38562a",
+ "chksum_sha256": "2f1e27c6a4c111e1ac8507694d60c2b09628c396abd102c1814dd962c601486e",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_storage_policy_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cf0be7bee26f23a32383b66e03974781998742e5f61f9be7041531130c63fcd6",
+ "chksum_sha256": "b19d36535db69438726e802ad88e02a75053781db1709c487b941d09ac0c9ecf",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_tools_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2da26a3cfc94f113efc25bd777f44a62b38e0e70fbc616994a5fc88ee274c52a",
+ "chksum_sha256": "71cfab18dcf07483d417f0da2ba1b6cb970fe0a9d51883968bf94b182c2ac130",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_tools_installer_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fcfc248d301a41107fa0570730eeb890f9638d033ce18a53223eed731ae4d520",
+ "chksum_sha256": "65715e53fb0b20878167328ce130e7cba04ffd884dec6c9b547faf3ac69d85cb",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_tools_installer_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ae63bf061802dbbb1f377407e08e1c85ee9931a2e21963a38f86c67110c00742",
+ "chksum_sha256": "33084c0da5a468c42d5c9d82aa7ac8080add32680af57aaf42e0ba9750bfc6d3",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vm_tools_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d57578770241a1cc91bcbb445454866b57dd8ee3a98531a4fed45a1247d26375",
+ "chksum_sha256": "6da5db503504403686915837c6018fddcaa5d5d770f63e10833e83f76201a693",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vmtemplate_libraryitems_info_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4fb1bc59af222277ac830fb6de4e231d2808fe70e7b9325c40c051c5d597b2a4",
+ "chksum_sha256": "a0b978ee21c489db4bd2e2b9456f72cbe9c6834b76798b6776cd5dca75b933f1",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vcenter_vmtemplate_libraryitems_module.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1ea70b55e91cf7e636f4746d661a1fb75c37c3393d08538aafa9a80051a82385",
+ "chksum_sha256": "12243def2abfab0b87f43beba5649bb78e97d01f67e573ba67900d9d76a5a3ff",
"format": 1
},
{
"name": "docs/vmware.vmware_rest.vm_moid_lookup.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "104960c1ab47b70a11b83248f8550a2fbca0215ad82609bb2b7c82dd70c853fb",
+ "chksum_sha256": "5e20391fc8de1d6f84bb91db4f92125f113420709b5efc7fbd166c087cf57314",
"format": 1
},
{
@@ -1460,7 +1439,7 @@
"name": "meta/runtime.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "df18179bb2f5447a56ac92261a911649b96821c0b2c08eea62d5cc6b0195203f",
+ "chksum_sha256": "f20da6877dcf689513d116dd37e0a2d8e5ab2477e62b462d6aedfcb59d8d657a",
"format": 1
},
{
@@ -1488,7 +1467,7 @@
"name": "plugins/doc_fragments/moid.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2bd78335597f37f8ee5835b66d8b80210823128cd103afd2d4eb44d126d025d3",
+ "chksum_sha256": "567a29dc6abdb939ef622665151b6c0bc1d54b40e4697d998a4546a6b6deaecf",
"format": 1
},
{
@@ -1502,56 +1481,56 @@
"name": "plugins/lookup/cluster_moid.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "abcd61cdf2a96e75a650aa7f4192d45efcda780f10067707f41a6ef4e923789b",
+ "chksum_sha256": "eecd7f37c12a7455dbb7839088cc2190f548f2b2111317ad564a336b2486a6b5",
"format": 1
},
{
"name": "plugins/lookup/datacenter_moid.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "90f5d46e2321646c1355992f052dadec8547abc8bf9990649068315721093a3c",
+ "chksum_sha256": "eb8d9b3906a26d702983baa46ed41718d9dc6e85ec51ea76220bd14cd42af600",
"format": 1
},
{
"name": "plugins/lookup/datastore_moid.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "77a58c0d96a511cfe47375d2766fe7c8168423eeafc30e92dc10cef7302a65b7",
+ "chksum_sha256": "db7f81381bd0f28c0a26087e514da5c1ee9a57aaac2f8a7254ea945598b41bd1",
"format": 1
},
{
"name": "plugins/lookup/folder_moid.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1f786f1d6b27f4e7045f5c22792ad057ab26b79e38b8cbca41a48162371572c5",
+ "chksum_sha256": "dff7e981e07bb471f933060d6ed65fa4801aea727623ec3e90d11bc4ca10fa5b",
"format": 1
},
{
"name": "plugins/lookup/host_moid.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3235ca2b167e986550d3485fee165600ebb912543f9598f322ac3305f61fadb9",
+ "chksum_sha256": "455b74e42bb2e641004fb320182a33e5ff23746f25b40ffa32f235a3beb2dde4",
"format": 1
},
{
"name": "plugins/lookup/network_moid.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "20e9d681155f037e99bc5be378e8ba5cddad1a78b903d05fda6fa8073a713154",
+ "chksum_sha256": "96e0c732538447639467559b1c28a1ab437138adf00a2c082323e452b67a7623",
"format": 1
},
{
"name": "plugins/lookup/resource_pool_moid.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cfb6cf7aecfcca4347a8accef2bf13f32cdebff35a6ef1e9dc070034a588e616",
+ "chksum_sha256": "4eb96816b1f83a3091acbe08886956046814f6bf5aeca1b9144bd3d7eac5aef8",
"format": 1
},
{
"name": "plugins/lookup/vm_moid.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "215f277912efe66732d197f88d246d61bca6ace7264c89533906c7ba43cfc7db",
+ "chksum_sha256": "d377532f299ab29c034ba3131331ad0af3f7802c08513dc44d1a1798a2adc383",
"format": 1
},
{
@@ -1565,7 +1544,7 @@
"name": "plugins/module_utils/vmware_rest.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6f88337474d4ed0ad7392cb9c2d6846d19553978b58d8069f2cbedf343214a07",
+ "chksum_sha256": "532e937a01ff7714ad731169be3726e62348bd2427a52667ae923851c747f3b6",
"format": 1
},
{
@@ -1579,924 +1558,924 @@
"name": "plugins/modules/appliance_access_consolecli.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "86e672284e34073ffb29c89c14ef47a8d5628a2e4085570a7356d0c4f9355450",
+ "chksum_sha256": "0ac3e26d9aecde74a23ba914552238e5e9c27ecfbb27dca87c11c42773cc986c",
"format": 1
},
{
"name": "plugins/modules/appliance_access_consolecli_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3466b6705f2ea423798540117a29c1179285a58a99eb9d75fa290c1cfd426070",
+ "chksum_sha256": "5da1c41dc06f32bbfb9b846dfd56063b0a20322b08842469a36f657d16c8956b",
"format": 1
},
{
"name": "plugins/modules/appliance_access_dcui.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "31d53fcc975db24de8f7e75ea0e41ac4a3323d7e8db41f4095c906297495c4d7",
+ "chksum_sha256": "7df8c3cc239c60009c3f13ed0daccff512099eac509bb69bf7483d6c167d7274",
"format": 1
},
{
"name": "plugins/modules/appliance_access_dcui_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fa3367a3d35ff0fcf924f1269a46e8235df840685b44443c0cfb36891f799dda",
+ "chksum_sha256": "3f5e390e48f253d8b2bb40d341ed9c9b1bab89e49b6a983823c5acbb7c1ff0c2",
"format": 1
},
{
"name": "plugins/modules/appliance_access_shell.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2f6ab04c30818d26dc4aaa7a8fc0af9267bcb387a9a4374935ee73862dd92d98",
+ "chksum_sha256": "cfafd8441cd52cb573be61e0c09a215f313a6aedefeb1876d653da549a8babb0",
"format": 1
},
{
"name": "plugins/modules/appliance_access_shell_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7889398bcdaa2e57477c61be4dcfd3cbb6edeb5a16576890a66e3747028338e6",
+ "chksum_sha256": "a4b4ae6c31a03e10606739f857780422462438df05b81d2f3d45134c425eab08",
"format": 1
},
{
"name": "plugins/modules/appliance_access_ssh.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3f99190156d7bbac3f0069ac964c20cb479665dc5baeda31605f3da43cd2a3dd",
+ "chksum_sha256": "12a18cbf202cb28d9866fefa3d42e2a77fc7fb2e2d647dd6690c4bc9ad4e23d2",
"format": 1
},
{
"name": "plugins/modules/appliance_access_ssh_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ae5626f45f79fd0cfac1f373b1fc33beba911ce27c7a7ad7720529e147cf44df",
+ "chksum_sha256": "53651dc3a96c05b50c6eb68b278aa91e92e767982c551f9d64937ae2a212680f",
"format": 1
},
{
"name": "plugins/modules/appliance_health_applmgmt_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "658b1f242eeffe044aec580bc5cf6176f9a05273daaf5f9208951d85213407ae",
+ "chksum_sha256": "c0e1f0d908f7ae5bdc464a55467808cf0a468f25705f4be8104e2c0902fa6d13",
"format": 1
},
{
"name": "plugins/modules/appliance_health_database_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7965cf74b4b6a81ee06263329cbe65516af708ae84ee57e24eadcf8ff47d7883",
+ "chksum_sha256": "c70a36ac5d2571392dc822986fddbc4e42f49bb6999135ed2a8a615509b4e637",
"format": 1
},
{
"name": "plugins/modules/appliance_health_databasestorage_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "831872ea67cb2429a26c79d770181cf81459c68e9d156711cc5a96c091f33379",
+ "chksum_sha256": "781e27d24e99f694af800316a6a58202a67b51fd5956101fe18a85a8a050b793",
"format": 1
},
{
"name": "plugins/modules/appliance_health_load_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8b4a263be989eed57bf5fff11677bb78071585ba774799f3a91aa1807d0894a7",
+ "chksum_sha256": "c35d3530843c620c4b2c3bbe53fb3ea5f7ddfdb76a23a52db7883425d91ec229",
"format": 1
},
{
"name": "plugins/modules/appliance_health_mem_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ca88485b3964ce2450b8b72d4548456d82ca764b0f12751a873df3c7e7e6ffd2",
+ "chksum_sha256": "c9e1e2a16db686e9665f38d54938b72f5169adff19c5b3fc6df6ae137ec5d426",
"format": 1
},
{
"name": "plugins/modules/appliance_health_softwarepackages_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eab04b6a697dc6c24f276ddefcf7d2fb0544fdd32f1ad07b8d6a6ba24e7e84c4",
+ "chksum_sha256": "d63c26783382ea8304039314f40f7af2ed08a964154ad7c14f768307c7b861a8",
"format": 1
},
{
"name": "plugins/modules/appliance_health_storage_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c76951a329e19c66a978a1ef6016b33729bf26678f281cbc8f81ec8f660a9269",
+ "chksum_sha256": "be91778cab056a7455b8a6a57d85228c3f447704890a1f50ea9a1479d1e9f0e2",
"format": 1
},
{
"name": "plugins/modules/appliance_health_swap_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d28fa60a4503b5cf6e7e33047da012b11d6972716bcbc2d1bcb01cef2fa17779",
+ "chksum_sha256": "deff85184ff7bcca3059cc703552c9583e1def729a2d7e5c9088e95c73fc1047",
"format": 1
},
{
"name": "plugins/modules/appliance_health_system_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a43f0ec5f805cdff93736fd33f95fa7e36136b69f0748122918f0618c4dd0086",
+ "chksum_sha256": "afd6ad2293650b8bc900ef35e47671fe3d3607308a38f3ecac59915bf8709dc9",
"format": 1
},
{
"name": "plugins/modules/appliance_infraprofile_configs.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "339f8dc83f3641c8c900108a8ce50388b03a85d951628f302fba277701a5420d",
+ "chksum_sha256": "e616fc7b5a22c45154d12061c16960a3387335cf4b70cc10d13d6b3246c1dd1d",
"format": 1
},
{
"name": "plugins/modules/appliance_infraprofile_configs_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9f0671bd8ed353d0225ee20671ab0ed87a002aab04e1a8abf0598751f75b1b8a",
+ "chksum_sha256": "73c1e310809d7b439e19201c256c0f5179a47f9f64b265e5cff49fe2fe21925a",
"format": 1
},
{
"name": "plugins/modules/appliance_localaccounts_globalpolicy.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "313c7c803f030bdcd91914d467fcc03e115f5aac58e85bdf6ae39dbfb37b18cf",
+ "chksum_sha256": "66d44727da4a2a92f22b88b4bb6a95a8af7fd1ae228ea3fc15e9640821e25c9c",
"format": 1
},
{
"name": "plugins/modules/appliance_localaccounts_globalpolicy_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7ee66f627ce2d958aecb50915470ae6459955b54beef362c31ae868b57141d21",
+ "chksum_sha256": "568d37233445d80faf46efb0a40f1539c68d19e64bafeca7c6c8d2419636190a",
"format": 1
},
{
"name": "plugins/modules/appliance_localaccounts_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9376c972b292070e4f18a147a57f2b764a046ff869255457f9c2b2cfa19326eb",
+ "chksum_sha256": "a434a0e10cc3a0af387c57b283a69a07bb50dbed0edf639dc6299b143f3d501b",
"format": 1
},
{
"name": "plugins/modules/appliance_monitoring_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ae755581a9440757a9ed9cc907b17d186b02b3603e3dda6212b19a7b2ddd2d17",
+ "chksum_sha256": "c28f47ed9cf79150920b724e543dbc663a2c2499d2e8da3b801d8c1c3f83e790",
"format": 1
},
{
"name": "plugins/modules/appliance_monitoring_query.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "604dc874273069777accd17d3f754fee915a290e4d34a867ba707568edbcd08a",
+ "chksum_sha256": "70afffb7050a0e5676bbdba71ede7fc922ac61e17f8599224ad5c6bdd188bb47",
"format": 1
},
{
"name": "plugins/modules/appliance_networking.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "267fce5da36eace2fa3cb1d769a4c4a4fef9129397cb3f79b956e05f6b8f9666",
+ "chksum_sha256": "43622f4ed17b0a616dd6ff67b0971619e53b6c48559a1aa61e50446d12b2fc54",
"format": 1
},
{
"name": "plugins/modules/appliance_networking_dns_domains.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ea2b7fd8523547d98da63c48809b76a75c3c2f8c716f31e366b9b3d9f89629a6",
+ "chksum_sha256": "1b23592414a434d03d4ecafa65e9d13cad4965169e5edd0e9db668724268c4f3",
"format": 1
},
{
"name": "plugins/modules/appliance_networking_dns_domains_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4ebd3e1548de4f8fb877574e4a7b381fe6e7249773e6dc9d6be40ba56e4ee549",
+ "chksum_sha256": "2d9fca96cf2247566aaefe5b471f5a5ffe2f44fb697247729303997e4f4b6834",
"format": 1
},
{
"name": "plugins/modules/appliance_networking_dns_hostname.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aa8a81adb3ab8c4d96555999763dbf0f6fa41bf69752b808a6fcbec332df7a4f",
+ "chksum_sha256": "fc39962bbb8b64dbad0f21c1983f1b03b8c13c42314480ac14d75dd9862f4bb5",
"format": 1
},
{
"name": "plugins/modules/appliance_networking_dns_hostname_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2e6e9434a5c336cb0d61469031f781dbf2e317baade1f8005f082060e8f63b56",
+ "chksum_sha256": "8c8649653bbe78eff415e958cfc16109f19b6cffeb1e41c87a0002c57e642411",
"format": 1
},
{
"name": "plugins/modules/appliance_networking_dns_servers.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "408a53fbe8d2d27cb7615874d22d314075c6fb323f13b1e4b306593293bcc180",
+ "chksum_sha256": "1a9d89622183e7b0bcae703a81fe732fe43c038fc14a5b1b702a51be339631ad",
"format": 1
},
{
"name": "plugins/modules/appliance_networking_dns_servers_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7edf0f2a27816419d1fbd13dd9573e0bd9be3cecb6af898ae87e5ddd92d27ac3",
+ "chksum_sha256": "785e3bc13d8b12acf6d2f7d298c2810173d044b4b0403d266734c6fad0977c7a",
"format": 1
},
{
"name": "plugins/modules/appliance_networking_firewall_inbound.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d2d8417d20ce87f33b4b83dc948e3102d4e0720b402d599fc4e924128728190f",
+ "chksum_sha256": "bbde05a697c5cf84050a94e41add899c92fdeac7e52ffb99abe9633687345638",
"format": 1
},
{
"name": "plugins/modules/appliance_networking_firewall_inbound_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "33d8b904c833af062f0d3039ed059103da7314a55fc96ceca9eae9e455330499",
+ "chksum_sha256": "ed6f402a41e9492fcb24d389978bc359c6fea8ecbf5d075db82329e04d441170",
"format": 1
},
{
"name": "plugins/modules/appliance_networking_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "62a2b8398cd146774a27589193abfc6f59b58142823a88ed2f85560794650a3d",
+ "chksum_sha256": "53cafe319522eb3d098143132e4ab2fec1fef1aae940447bf9169d230d4c646d",
"format": 1
},
{
"name": "plugins/modules/appliance_networking_interfaces_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fda3efa512658f903adb6988809b63b2158a9b0b02c11e3fa5320b9a6b7ca196",
+ "chksum_sha256": "5faaafcd2d5e2d13b0706b7a18cec2cea3e622a00291a7cc2b098ee93e33adae",
"format": 1
},
{
"name": "plugins/modules/appliance_networking_interfaces_ipv4.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "52104368f1562e9cc6d260e9b12d7e0ad357b401e9967dd7571fdad36853afc9",
+ "chksum_sha256": "4f5f03baab3389ef2bd5906cf7c32d55a5c3a05d9c13a87b2da51e68a88d85e2",
"format": 1
},
{
"name": "plugins/modules/appliance_networking_interfaces_ipv4_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "342facb7dc4a358d78090c9e24f7fa28fa9dae5066681b6505cd4a5d4f22f466",
+ "chksum_sha256": "8554cf12e860b22682cab4b01a7f857b3174989a418563e8476bd5cbda97e4bb",
"format": 1
},
{
"name": "plugins/modules/appliance_networking_interfaces_ipv6.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "84051c00e547a676bbd256640bd034ce3c703dc020d7ea17a84f57400dca1672",
+ "chksum_sha256": "f2cc626b9f3423c37406d3974881ec30c23a1e8229ca35f29068ec00416cbd6b",
"format": 1
},
{
"name": "plugins/modules/appliance_networking_interfaces_ipv6_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b78f3eeffeafa261c53b434cfd4a666b1618e8dd34ffaab66bfd5fdc24def7f9",
+ "chksum_sha256": "5bce4e46e90a542ba00cd6d5ba15e9ca51f0e128fa10874a38fa305c8931e953",
"format": 1
},
{
"name": "plugins/modules/appliance_networking_noproxy.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "15700b1e18dc0363b24e598eab7b1328cff708ef9be4714f64b0f35a19966d3d",
+ "chksum_sha256": "a7176d684febcdb9f64229a428da34113a4e5284ffca3a998eae0620596c0e0c",
"format": 1
},
{
"name": "plugins/modules/appliance_networking_noproxy_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "af08287f0d5f762e422d755ef14dfcb50d53fa930ad4eef2181bff0e59c46a3e",
+ "chksum_sha256": "e9c5429a76bac775bcc622e7899392fc776a135a9c6038aaa15cf1128d0278e6",
"format": 1
},
{
"name": "plugins/modules/appliance_networking_proxy.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8d877e0cdd66bb2ced03499d6b2f39006bb07cd42504eaad251981a3ed665bae",
+ "chksum_sha256": "a64fa981dabba301230c3017a99008dadcf387069cc937ce8e278d0bf9b65fe5",
"format": 1
},
{
"name": "plugins/modules/appliance_networking_proxy_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6378f1823decb5b69df73a3318ec6d666a3f68be2f73a9d7b31a8ec7248e91cc",
+ "chksum_sha256": "66f56cf094e67f830af151723f42ae60a48b75db6c7ea734a2d442b496cb49b7",
"format": 1
},
{
"name": "plugins/modules/appliance_ntp.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "539a605f2c2cb48cac2dd03df4ab51465770869cc8ba5264cf85d12aee12c522",
+ "chksum_sha256": "c87d9ca512423256edd1673f54651c85899dc83ddca2375e235c64fc3708a4b6",
"format": 1
},
{
"name": "plugins/modules/appliance_ntp_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fdd622b506d867a7f9356951d5e3c7f820941c2138e02df9aed3bde16201d252",
+ "chksum_sha256": "f3f0000d340d3679f4ee306185fb2ddd577e9e33d364cef59115f3b9e2e95a83",
"format": 1
},
{
"name": "plugins/modules/appliance_services.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7f57008e99f762841a3f721b531d4374113110c885420fa3a4315aafc910f1fb",
+ "chksum_sha256": "c1fe30d0950e6b4ad07d45093eb0e4b4df1f55931bda17771eabb42edf82132a",
"format": 1
},
{
"name": "plugins/modules/appliance_services_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "faa780f5236f0d932741eaac2df0a1e2b1b9613f4f06edf04d7bbb5ab2536f76",
+ "chksum_sha256": "ec95403b5dd75b4d19e70b5e934bcf20334e3d8aa1667054872059ab04737c02",
"format": 1
},
{
"name": "plugins/modules/appliance_shutdown.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5be75e1ae55d3ffdfec2c569bcb01930cd19e8ab18d855baf834ad70e7fd8f34",
+ "chksum_sha256": "3d458a88f1a45531d473b9702385bfca24c97f42d3f0e58daf24d7878a2e8a08",
"format": 1
},
{
"name": "plugins/modules/appliance_shutdown_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c87036a4886f0ab4dc3ba588c838b85c514db712f9624f3ac716d1c4f9acf86a",
+ "chksum_sha256": "1fb6c6a10216278555044b71fe2f116636dce55e50296cb9264b3cfca6e3b6ef",
"format": 1
},
{
"name": "plugins/modules/appliance_system_globalfips.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6a7c14618496579545ebab58f0adebfe4a0c3313b7103a64e81855b904d78bff",
+ "chksum_sha256": "36737b3a99ba23ae9c186e5c4f5bbb714ac72f1d52721590e6618a5188e4d1d4",
"format": 1
},
{
"name": "plugins/modules/appliance_system_globalfips_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e8d521b6f66969033509865c934eb1866b8f5ff324d077b463553d2ea5d5b3d3",
+ "chksum_sha256": "fd13a0351f5cb951700ff04e2bd948a0c2dc637d982545d69bef671af8ad0ff4",
"format": 1
},
{
"name": "plugins/modules/appliance_system_storage.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ee8cddcb568c35b7ee770117f7d5edab751ae68fbf1a3d40f78d5e119ddacbb7",
+ "chksum_sha256": "9b7efa73bed0e6c34dfe7acac871308eff15786eb1821e8b675330feebfde715",
"format": 1
},
{
"name": "plugins/modules/appliance_system_storage_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c15322620bc4d87f3089da0c81188daa94e1905bad0da821a5eeb1ee1b6dd53e",
+ "chksum_sha256": "5cda3c69b838fb71a643d3b8815082f81c46d18663fb000cf3e2e81601093994",
"format": 1
},
{
"name": "plugins/modules/appliance_system_time_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "79c48288960f263d537dd81f77744e99f7383edd66b737684b5100cebb6d94fb",
+ "chksum_sha256": "db95bec35f28fce2edb1d9a255ec68ff2831ee11913ad0863c0cbfd1151a9f60",
"format": 1
},
{
"name": "plugins/modules/appliance_system_time_timezone.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f1cd36038857f76e8ba0a0c9e1cc462ba20d741b24454d858b5ebe771c253dbd",
+ "chksum_sha256": "1aa7bb5bf9eff8df7c546088232ba097e46b93cee00d142935b7a3e25abfea9d",
"format": 1
},
{
"name": "plugins/modules/appliance_system_time_timezone_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "157db47d71713bb37692259b39114ac9300a4b666bf798ed422849bb90f6c07d",
+ "chksum_sha256": "74c4d7433abc20cf20de938286c400e4b6423cfd7c403207bbb6fe06a0cfd8ab",
"format": 1
},
{
"name": "plugins/modules/appliance_system_version_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "28271e3ea0698ff2b9f80f77e7d43bc9de3bec9d9553e0344cdfa3a403a68db5",
+ "chksum_sha256": "8f476a3c717e2119179bded6ad3c47efcc279955bad6f45e2a6b62389d10bc1b",
"format": 1
},
{
"name": "plugins/modules/appliance_timesync.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c78439c05ba9c3c6e8387e1efd5892ba9e5b5b188a0584725b297671b8ab47b0",
+ "chksum_sha256": "216725ddbfa360bc861c5a72cb90e14a9b1957922cacbf7c52c19da35121b758",
"format": 1
},
{
"name": "plugins/modules/appliance_timesync_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bcb68c4a1f73ae27f78219743007e6838dd0852618d41549c807123fb54e40ae",
+ "chksum_sha256": "ca1dc76d2ea023487f692addf0016a8cbd192abba899a0c05a6e35fb0ad3d8bc",
"format": 1
},
{
"name": "plugins/modules/appliance_update_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0ec355f6f70d08f417dcee5f0d07264cfb6d57fbdc0535e9873412ff13e389a8",
+ "chksum_sha256": "df1812f640f5f90b089d3c8472f6f6857a2c28d7e269a567ff20a883ad7efa69",
"format": 1
},
{
"name": "plugins/modules/appliance_vmon_service.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ed75635fd95f67a2b937e4518aaf324ba6fb67e1a51b18e18d35a85ac65103e8",
+ "chksum_sha256": "e55691d61bfc1e6f164f1377d1b96a9c8cb6ada759159a3f72fa1bb778130611",
"format": 1
},
{
"name": "plugins/modules/appliance_vmon_service_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "45a72e7c1d7562a30cfdfdb8ac0a2f7bf3b5d1bf0d18cfadb38c3c71228c265c",
+ "chksum_sha256": "ad7fbd559ddefcd51cfb0f6626805cfbe299cee6c8fdfbc8b516c6a112e3ef82",
"format": 1
},
{
"name": "plugins/modules/content_configuration.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8a44553eff0c957effd2526e5277cd40e1e530ab47a8e351b4ef0e1282fa864f",
+ "chksum_sha256": "923ca2d80d021710075aa8dc43a77ea205db29de15cfa0305c55d5022608a01c",
"format": 1
},
{
"name": "plugins/modules/content_configuration_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4af907bbcb6b521e1e9957d9ad7a004aa46d74e26327fd99e042ad3c78b83e2b",
+ "chksum_sha256": "4d62a07921f5911f863f51d08130ba6c25ee902fa0fa79620bf09c2939078f47",
"format": 1
},
{
"name": "plugins/modules/content_library_item_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "694cc41c102c4c46bd7196d7ce21edf98da956b9326b4e007d4cadc0bcb1a7e9",
+ "chksum_sha256": "7cc186dc52b25ffd411046eb1a10e7e9f37dd52075b3040ba7595a74ecb4d83a",
"format": 1
},
{
"name": "plugins/modules/content_locallibrary.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "be86275a9113a2920681da50a13fba8ef01eedac3760d3b1716cbb33a99383f9",
+ "chksum_sha256": "70a21128f3b6fdd0339ce086daa13e398d576808b51feb796c61e64fdeb9c176",
"format": 1
},
{
"name": "plugins/modules/content_locallibrary_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "725a27c599b8f51347b9f4ffd3026f800146af138c95de115d7dd5e613baa312",
+ "chksum_sha256": "b56862e79952816e804b40337c1f4bbfbb6ab300bc4cc156ffade8380b3601d5",
"format": 1
},
{
"name": "plugins/modules/content_subscribedlibrary.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6f5b8b886c7db45875c62464300b035f5e089d8d7becd2bddaa6e1e9e3031961",
+ "chksum_sha256": "dd93a08af63c1cbadef8bd3877ba0b7995cd3cf6fd6076e7def352e4a507161f",
"format": 1
},
{
"name": "plugins/modules/content_subscribedlibrary_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "11c0b3802aa5cdac4da431dac993231780f1a091c60d557ca2990c58f7594317",
+ "chksum_sha256": "a32e56a86f037621b0dce78cf53dbc215f695de2a3a5404ae6dd2282594b58ae",
"format": 1
},
{
"name": "plugins/modules/vcenter_cluster_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2c257ccc3d99d6cd799ddeedd5acf86387d8e3e88f0e444bc403d199aa912544",
+ "chksum_sha256": "7ca6181687a5481b994de39089d55ef57831cfeeab80687055ac41dbb99fd9fe",
"format": 1
},
{
"name": "plugins/modules/vcenter_datacenter.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c382b3f77dd0578c31e2036ba797417569abf23f018756f6f3c07153a559dd04",
+ "chksum_sha256": "3fd7e31c50f7c3de1ddbc92c3c12b8a2e1fa863f2e98479ff28cce9adde2944f",
"format": 1
},
{
"name": "plugins/modules/vcenter_datacenter_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "411bddc1ae7920c7aee77d9aa3d52a5755466d92397ea3b746392373c387e0cc",
+ "chksum_sha256": "dea2ede6846ac6eb9836c52dbc6e661ae83efaefbac7941285fb57a80246d19d",
"format": 1
},
{
"name": "plugins/modules/vcenter_datastore_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3ed318d39701e617ae7456127ad13c37690fafcd80afddde1b824dffe608e715",
+ "chksum_sha256": "7c0a9b3124a4d3a5c7a8df3dc56cb0704e87066dd8dbfb89bdb8c2edc477446f",
"format": 1
},
{
"name": "plugins/modules/vcenter_folder_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2bbf3effacf5f1f2c42cccfdeb1e8c3d8d0387ba52c39ee68a4e398f3d16d84a",
+ "chksum_sha256": "acbb2a1c998a495b45daf9eead039cbedaaf485941b988023368b33d0a9e1a45",
"format": 1
},
{
"name": "plugins/modules/vcenter_host.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "37a1c63b34560b18f930f2d757e0360c9eaac38bc1814c547638e15eb4a9c626",
+ "chksum_sha256": "ee23a4883d7cc118bc420fb041afc230dd960b064cd9b6b448d2fbc932f79461",
"format": 1
},
{
"name": "plugins/modules/vcenter_host_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d5a168a6e57cc28354ffe39935f3860aa84c088a9d026f13f15210d2670327ca",
+ "chksum_sha256": "723cb31bd453259d2eae715d4a7c0517a5f988e11223e2c9b55cea95caf97d7b",
"format": 1
},
{
"name": "plugins/modules/vcenter_network_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "06eaebe64215e2cd1ef054aede6f2715b1368218470755ee0ae692f007c9a321",
+ "chksum_sha256": "172fa4f11b97d8e266e7cf9a09cf0b8e41df8789995f51dcea192658c02f4f67",
"format": 1
},
{
"name": "plugins/modules/vcenter_ovf_libraryitem.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f33329f71af3b5659bce5f339576b05c4af9698beedb73aeb2266a7d91a9cb93",
+ "chksum_sha256": "6e6112103ce6ffc5787d7a76e16836093ba52befebf7da78a91169d0be882c84",
"format": 1
},
{
"name": "plugins/modules/vcenter_resourcepool.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "befe42b9fa31435c1dcbd39f5b314f20ba47e18ab5e6223ab52abf41816f5445",
+ "chksum_sha256": "a86387d3c02bee0d0208b6ab0ff19de9b80744b00cdaaafa0be526a4a0661ea3",
"format": 1
},
{
"name": "plugins/modules/vcenter_resourcepool_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e20d8f8757694f2826bed100a89bd1cdad2951834b86467079e29b7eb6848f66",
+ "chksum_sha256": "31e887e07f905add9e213c5e39b103b09c87760324f541b32b2e156d96570ce6",
"format": 1
},
{
"name": "plugins/modules/vcenter_storage_policies_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "250bbf1858bac7d2c250d39d216af248f90e6993bf04addb8b7bbf500494d923",
+ "chksum_sha256": "648ed90622d50ff56e0497b2e7adafca54581094563702e8dd40dcb999b94015",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c3f3ba08e8645c745afaf37e6a40a7a6372c532c0e6b6ca15e1da613cfd05030",
+ "chksum_sha256": "d84f932aae58f8f07af811122748563c9005af30e27644a876814517d2cd5b26",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_guest_customization.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cc62fb92e7e4edd40e3163c7f1d3ae07f8d72361802d4aea8c24e290db0c02e5",
+ "chksum_sha256": "8e4d29eac9c074f3db99d155c330109151bfe30313a9c2d52e7588f9bc0c8a84",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_guest_filesystem_directories.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "252d07982b4e99f46f039b6738cd9601f2610524981bd091b61120ff27ad5c4b",
+ "chksum_sha256": "597319e61287e9d8e990a4ef74a3adf405e8d6017e90467cedc5b3669977eddc",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_guest_identity_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b56f8e3053306396504b660241c98a8ef651718b7aac24c0eb3157e401983878",
+ "chksum_sha256": "19af4de0b8ad8c464ebfdf1978d26e429515ac06eabc5bb4735aefb5c0165fed",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_guest_localfilesystem_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d17e5a27b7b1a9c155d7c66139907267872203e5eb870b6b24e0e1f218e11049",
+ "chksum_sha256": "4d2e6cef9804ee566d1f237723efa3a586fc02ff7694ca1e623bb64691f768b5",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_guest_networking_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8cab3d2c5aa715a10a0b62ea151f0791aa08a91979dc7f92963a0e3688c74bc9",
+ "chksum_sha256": "e26307a95675b3fedd947aaf79e0c9e7405d4c09ee58d2cf364a69239c238ece",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_guest_networking_interfaces_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c470387aba2ad497317a674201a2a7cbff87bff8cfc5dfdc89d7aee052e0fa77",
+ "chksum_sha256": "194a6936b31615cb69d2a6e63f68599a74a7cf63f234bcfbe9d059424a010b67",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_guest_networking_routes_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2c2c1463e9bd36cd66430b003b0592d5f7ec731f12737c6f99e3fc3f943c90e4",
+ "chksum_sha256": "141bcca4108c351637c347fd2d45b09c37fee6e6a9208f2ef9153e44c01a63bb",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_guest_operations_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "812fec22743c2cc78b35b52a3447ca5a0278c76e5eb3e9b2948a1ef81185c32e",
+ "chksum_sha256": "e9adb377dedf44dfa357d419083b885a8ba28f5a7df13c2e1b021c2bd472311f",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_guest_power.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d3ba67e87fb49130cc5138cefafd3a78f75fbefbfeb08dc5032be5e6aa20efbc",
+ "chksum_sha256": "923c6ad0a3c599e674e6cf34d917f209c4ee41a998e50302f7575e63063d9507",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_guest_power_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2859cd64f961f71a86a601dc593df945343d0691b068973d541b919f09c3d0a4",
+ "chksum_sha256": "0413c3a7acd6819cbdd0e8333d82304d0c4d75b202c2cc96e27d4756b04ee420",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_hardware.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d40db4a228a8afbfa7ae9b744722196dafc5e1385c38ecba4f035ea2c0d454bb",
+ "chksum_sha256": "d6cf07e106ca8e3b02c8e4cc34199ccc9960fee7494c40b56ac5c0cc1f1dd71e",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_hardware_adapter_sata.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5bfec986587fb78ed2352e256c6e1b37a48a16a2c1b18546a6bcc9ee4ff2c393",
+ "chksum_sha256": "2ab41bad7a0ca8e214048f39f6016b8ca6c5384c0419163c8e541f0625adbd45",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_hardware_adapter_sata_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2063c170bd8f6b243cd97fc233ef57b8b1b4404ba19d38e7b0fe5452d10752db",
+ "chksum_sha256": "a0c9070cb40057664fbc98abcf36a9ae1d6390746a07aaa9435b3e49fe25dbf3",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_hardware_adapter_scsi.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6e7ac78f6061a25f19a1c5e4ff32af1cd5b46b4054de098a430813c16a96fbcc",
+ "chksum_sha256": "e26e5fe802b24d45cd0e22f48f022d98c566cdca58a64a7220d17fc6daeb3857",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "550439c4848c7e2273a367351bb7cea49247be75846eb430ed566442772ad643",
+ "chksum_sha256": "1c54514f68632a7da5fd1715b731b8f22440025bff59af2dbef2553200066441",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_hardware_boot.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "97cea0abdd8448688c0f7a857ab3166e184ae5d71366369d28bd7151c6b0b7bb",
+ "chksum_sha256": "ed4465efe65f81c2c10290e8d75ae780e0a76661ac1242447180488fea8b97f0",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_hardware_boot_device.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3139b4de21669d92003ce7afa07dac76162698937ab3f6b18d9cea08a4408059",
+ "chksum_sha256": "fee4dad165bd2e0618ffa3b9cf9bfb5ae01c219f3f7364742983d859cdc274ff",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_hardware_boot_device_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0a656ef3d28856d7e15781e9899e645329a0b9d0027b0abde277503671dd71f6",
+ "chksum_sha256": "f91937007c591fd111354c32e34b7ccd320eb4e0b50a05915ae27bbf20f44f39",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_hardware_boot_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "078a8bff3df26de4dcb64420c502cda97ab833e8711f56b18e43c6f678b51574",
+ "chksum_sha256": "f49180f0306a8f5aed0440506febca2bb7c795a79a07d0edfbefd5ee64d2e4aa",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_hardware_cdrom.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a7ed00c313ccb5cb6d3ef72c94151517e2fe44d52a017ece27c9849935be0796",
+ "chksum_sha256": "667962ec976ce836f52331b44b7edaab4392b4c003e64300b81c82a5f4ca6a76",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_hardware_cdrom_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "08abaa7662fb705509cec1128cc89ffe80ab4c6e3fdbcd6f5dda6c77079a8c92",
+ "chksum_sha256": "75719c07b46d62d936af4ec6bbc19869ed6ca701a57ceaae66eaeba88bd31d58",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_hardware_cpu.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0f09201f0d05fdca8ced16c61077a32b21be5fa09d4765e0279b2eb55efe06d4",
+ "chksum_sha256": "d686323c655543b4203363832664fc8e84c225f3c191a7712103f5408d12a476",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_hardware_cpu_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "77efe049a557036ebdc26839a29de6411f5c7bdd1a38d59f5356b6ecc3170637",
+ "chksum_sha256": "a07f8410930a54b0b879c394e7b3137296266650282bd36274c92f058f2297bc",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_hardware_disk.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ac55725f36f50065d083cb8e637d0ec24fd9917945858e0b57113797d2654f73",
+ "chksum_sha256": "3cfbc038fa5ac447c675fddef79e3e077732a9b5b9a0a34173afe6905761b269",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_hardware_disk_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "991de8ae9bc8cd07dcff008f1c8e7fa52936cd23a9d0220a3259472324ade6d1",
+ "chksum_sha256": "bf29421ac44cef6ab7e17149cd442ebb596800e00815885412c278b99c8e452d",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_hardware_ethernet.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "daec2f43eb00d916835fa96091e8ad28e3511d0d90e9cd498173ff7a723e3f94",
+ "chksum_sha256": "1b8307d1a64fbcab1229d5d0a460cd7b95c6a5f57b950f63942c9e47bff4f262",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_hardware_ethernet_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4cbe952ff956d3ac151a44e79b662d8e678e0aef327a92579721583c685c2196",
+ "chksum_sha256": "e599048b3368e397bfcc0ff0b8be857bf21f04582f23a8d1935909deba23f713",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_hardware_floppy.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f1150ad45bf01af45ca5c50560dd6114580bd8210caba055f433e915c99ad0ab",
+ "chksum_sha256": "377fe3713f7236aef7688a597ca4d01aeabbc76659afd47008eae3d26e22d12e",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_hardware_floppy_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "64f89d80f38f8ca442ceb194b743a6ccd42009b51aeb3bb1e6536d784bd07d0e",
+ "chksum_sha256": "44d9e9c9c25acc36a3b4f44a38b836196078e49e352c409b2036bb63e25de844",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_hardware_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "981df227cba8ee34d115c1e378cca7d196d68b7ba848d5cdd487e6bed0ecc331",
+ "chksum_sha256": "5738286a7ea8953856055f615c8c64e3af8a4ece3f91c09d77fc3f92ca069aac",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_hardware_memory.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "98f98f449507ea1b9585388ff8290457c7ba35bde1e1f4754afafcdd32c57b4a",
+ "chksum_sha256": "0a2acf1a70b6526bb54c6ff4dbde1227444eb0038084b054e773c33219836ca0",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_hardware_memory_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fe7ea9947b2c9b9e63bb4fb5695375d6e583272069f1ed0b74fe4743a4cd1c5a",
+ "chksum_sha256": "3feec561eb93ed77a2efb1506ca2bcdcf0888fd30c167e802171bde1d7a6921e",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_hardware_parallel.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a2b43e9d8979dd869d9f399ba137fcd51ee6a12a33e3238ea940df2faebdcf78",
+ "chksum_sha256": "2f381fe48adea5253c0eb9434f946c2080120409bc498186751cfdfc00130ca4",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_hardware_parallel_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec61b13c09f534df1fede42b062b84192f0055f94f33368699af2f6bbd31c929",
+ "chksum_sha256": "e0f701ba594c850b80499222f0eed14431d5fd24b95b318c0bcc57764102519f",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_hardware_serial.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "da256ee8e97a7cd6beadd36dbcb2b459a4637064ed752f19fb770ad1049160b0",
+ "chksum_sha256": "2e057303551e6cb1b1ee06c1aa5cb53cc89c5b0809f000e32b34ca85d85c3e7a",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_hardware_serial_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "212b3877bc701b42b99638d92c9825ee0b67868d02bb98b7c406ef664f734801",
+ "chksum_sha256": "011f2a60bedb0fee57d6ec4202786cb89afd524b8b33a68f3c2fad35bbfbb74b",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c647e2adfc42899c4064a36f62b07308e321d1f8e417661c1d2dc2a57ba0ceb7",
+ "chksum_sha256": "a82f0ee273cd5d24461f63f95f17b1e6e5889737aa862884a8ee47cc66d7b828",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_libraryitem_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bb83b6ba73cab049b6e3fe5b153e0bb0d01f17ac5c7d478f644b6218c7f778d7",
+ "chksum_sha256": "61d06933cc2f14b48a9ab2f3ce8266690a9175ff0a70ecd797dccfa6533de89f",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_power.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0c908a6495985d2eaae726ce57efead94f884717e6d7429fd0ebc8b889911ce9",
+ "chksum_sha256": "48c9a6b66d81663b6289d7c077e218b47c1f9b61eeedd411fea60f933fee415d",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_power_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b018aaa863b20e571525533f8d04c3d3fba7eb9a1585262e2caae3112e0b6988",
+ "chksum_sha256": "9a78ae87ec5a94b50acf412810119e48a43156e5f56cd248999bb62e7ff669c5",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_storage_policy.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "69499935db31389a3094e6934e9338244f6ea8b9573271ab2d0b050b6cf16d55",
+ "chksum_sha256": "36e8077020d540211bdfecc3150b148d33b05817816b8cc7b59a8e51a94ddc8c",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_storage_policy_compliance.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1b91aa06fd275c73ad13552b8d1a13a564eed8d6fb916a233fc536622fe9855c",
+ "chksum_sha256": "ab378bfaed594244cc886d4ce5cba550aaa3f6870d1a2acb2bf2c2df9ddacea8",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_storage_policy_compliance_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "828e007229cf02ae3774feb8bf22a1610ac39845ce082a9b39e0b71e58bb9b8c",
+ "chksum_sha256": "e5436a6c5a5e8f6eb23b7b5d841dd2fa8ddeb06bde7492d9dc27bd0f439733cf",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_storage_policy_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f4716c3d5a4ed9315bc81359deab7238e62fb520759a2e75625724884678ec0a",
+ "chksum_sha256": "4ed581d55361fcd4b3f36dcb26beaebb32095c06a08d0689a55ee1188f16efe9",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_tools.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "54f8dbcd432551d862ea3a786ad143c4e84141f8b2773bdf1953dea24fb3c8db",
+ "chksum_sha256": "da042d6142c9254ac6c83c21d941e066be87c1f9065d56bd4b3c2911b1c9659b",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_tools_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9137afd4e4451d6003d4e3deb218e9f884eb2516baf41e84372d87bc72697d45",
+ "chksum_sha256": "02bd05cf34784065efc893549b8cfb5f847c34c8b557ed1c7ab6c1646931f463",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_tools_installer.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "37d8af3d9aee1b8b794367fd64684ee7692933098a7633c3eeb75f92c83e0690",
+ "chksum_sha256": "ece2745a72c2a4b5d6cd0fc2a3e176b839f3bc6a3b289ae2c0f78026a4adccbb",
"format": 1
},
{
"name": "plugins/modules/vcenter_vm_tools_installer_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "62b2d4f55af7671c67c12216cae6e5136f13938f03f0ada0be26158fed392bb9",
+ "chksum_sha256": "eb592c7c1d6c3314c6072af624d7596dd1a179b553a1a56f045e90b9371a757c",
"format": 1
},
{
"name": "plugins/modules/vcenter_vmtemplate_libraryitems.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e6d9e483cdd5097be56a81be0124bb12f72b3be05babb79962482bb0fd26a56b",
+ "chksum_sha256": "7e506e65f3acce2dffae870e77275bbbad13e7ee3d6ac884371b1af45a423041",
"format": 1
},
{
"name": "plugins/modules/vcenter_vmtemplate_libraryitems_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "073a670c20ce07f705d4dfa4aab83c428dbaa604115850132ff9eaa52ca07d37",
+ "chksum_sha256": "9c2dd867de48572fe0e992095e777477ebb9f9fc77a5900186598c57bcf65009",
"format": 1
},
{
@@ -2510,7 +2489,7 @@
"name": "plugins/plugin_utils/lookup.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "02c3ee551b0a57369a6ae12c9d854759a25f23e9d68f47128b992ebd535e42a4",
+ "chksum_sha256": "d4d6ce242580192a10e8cb74bbb5b5b3679347775cc791eb599f7feb39842cf4",
"format": 1
},
{
@@ -3494,34 +3473,6 @@
"format": 1
},
{
- "name": "tests/sanity/ignore-2.10.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5dcdc1f1ef88dad5199726025ee5acc225a2aef41bf414154fcae9388372c421",
- "format": 1
- },
- {
- "name": "tests/sanity/ignore-2.11.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "acd48c24a299d78f94c409248a9a605b4489204509c0f6cb1aaf9797de1404ab",
- "format": 1
- },
- {
- "name": "tests/sanity/ignore-2.12.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "23ca8f55e3ca625eba50d11fad3b865cd0c9f57a127381716c2ed88323eb0125",
- "format": 1
- },
- {
- "name": "tests/sanity/ignore-2.13.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "23ca8f55e3ca625eba50d11fad3b865cd0c9f57a127381716c2ed88323eb0125",
- "format": 1
- },
- {
"name": "tests/sanity/ignore-2.14.txt",
"ftype": "file",
"chksum_type": "sha256",
@@ -3536,10 +3487,10 @@
"format": 1
},
{
- "name": "tests/sanity/ignore-2.9.txt",
+ "name": "tests/sanity/ignore-2.16.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5dcdc1f1ef88dad5199726025ee5acc225a2aef41bf414154fcae9388372c421",
+ "chksum_sha256": "4f08c882c48aeeae44a60861f7a8eb098c14939b8189d75acfa2941626c97223",
"format": 1
},
{
@@ -3571,6 +3522,13 @@
"format": 1
},
{
+ "name": ".ansible-lint",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c6d722ca37551c34d09bcb00ec7bf67ec34e9d251fcede38be31624496fa1119",
+ "format": 1
+ },
+ {
"name": ".gitignore",
"ftype": "file",
"chksum_type": "sha256",
@@ -3581,7 +3539,7 @@
"name": "CHANGELOG.rst",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "018d059401bb5cef65715dc8dceaa45244e8734efa42011245619f8dc693a3a1",
+ "chksum_sha256": "a685a91f7d07d39308d11bd082778f8c09c6cc00c03cafbd5c41922394119c47",
"format": 1
},
{
@@ -3595,7 +3553,7 @@
"name": "README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a970894d7b0212ee1431deccd46d2b82a38a9186f52374cdd99e1d5d20e251f1",
+ "chksum_sha256": "ff647801d4359c852fdac82433911a60dc662c1f9e7e4f14c3b9a6eee8a4e229",
"format": 1
},
{
@@ -3613,6 +3571,13 @@
"format": 1
},
{
+ "name": "development.md",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "6eae6ab12ab45e498b6c52347a1cdb89625bf1ac2701fa3661fffda611174f8e",
+ "format": 1
+ },
+ {
"name": "docs-requirements.txt",
"ftype": "file",
"chksum_type": "sha256",
@@ -3644,7 +3609,7 @@
"name": "tox.ini",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4158f1710f1481241e11b76bd115c4a7dde0e6894e180535772acc8d177bcb3c",
+ "chksum_sha256": "c9ac59809f4df49b55edad1cbee62b4767d2f6cdb43914c6d3999505ab7c746e",
"format": 1
}
],
diff --git a/ansible_collections/vmware/vmware_rest/MANIFEST.json b/ansible_collections/vmware/vmware_rest/MANIFEST.json
index 3ac64becb..f695f22ed 100644
--- a/ansible_collections/vmware/vmware_rest/MANIFEST.json
+++ b/ansible_collections/vmware/vmware_rest/MANIFEST.json
@@ -2,7 +2,7 @@
"collection_info": {
"namespace": "vmware",
"name": "vmware_rest",
- "version": "2.3.1",
+ "version": "3.0.1",
"authors": [
"Ansible (https://github.com/ansible)"
],
@@ -12,11 +12,11 @@
"vmware",
"virtualization"
],
- "description": null,
+ "description": "VMware collection for Ansible",
"license": [],
"license_file": "LICENSE",
"dependencies": {
- "cloud.common": ">=2.0.4,<3.0.0"
+ "cloud.common": ">=3.0.0,<4.0.0"
},
"repository": "https://github.com/ansible-collections/vmware.vmware_rest.git",
"documentation": null,
@@ -27,7 +27,7 @@
"name": "FILES.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bf8e496792af02279617c2c8a3e51a4e6342cfa061a7465880710ce95a1b6660",
+ "chksum_sha256": "f4a13e7caf4cfbb1d45d898874833d85e06e13e2afbb07e0eff0954435e22673",
"format": 1
},
"format": 1
diff --git a/ansible_collections/vmware/vmware_rest/README.md b/ansible_collections/vmware/vmware_rest/README.md
index 0e868a5ec..b8d732a62 100644
--- a/ansible_collections/vmware/vmware_rest/README.md
+++ b/ansible_collections/vmware/vmware_rest/README.md
@@ -7,7 +7,7 @@ The collection includes the VMware modules and plugins supported by Ansible VMwa
<!--start requires_ansible-->
## 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`).
@@ -19,10 +19,11 @@ PEP440 is the schema used to describe the versions of Ansible.
## Python version compatibility
The collection depends on ``aiohttp`` has [requirement](https://docs.aiohttp.org/en/stable/) which requires Python 3.6 or greater.
+ Moreover, ansible version >=2.14 supports Python 3.9 or later.
## vSphere compatibility
-The 2.0.0 version of this collection requires vSphere 7.0.2 or greater.
+The 3.0.0 version of this collection requires vSphere 7.0.3 or greater.
## Known limitations
@@ -140,17 +141,17 @@ Name | Description
[vmware.vmware_rest.content_locallibrary_info](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/docs/vmware.vmware_rest.content_locallibrary_info_module.rst)|Returns a given local library.
[vmware.vmware_rest.content_subscribedlibrary](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/docs/vmware.vmware_rest.content_subscribedlibrary_module.rst)|Creates a new subscribed library
[vmware.vmware_rest.content_subscribedlibrary_info](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/docs/vmware.vmware_rest.content_subscribedlibrary_info_module.rst)|Returns a given subscribed library.
-[vmware.vmware_rest.vcenter_cluster_info](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/docs/vmware.vmware_rest.vcenter_cluster_info_module.rst)|Retrieves information about the cluster corresponding to {@param.name cluster}.
+[vmware.vmware_rest.vcenter_cluster_info](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/docs/vmware.vmware_rest.vcenter_cluster_info_module.rst)|Retrieves information about the cluster corresponding to cluster.
[vmware.vmware_rest.vcenter_datacenter](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/docs/vmware.vmware_rest.vcenter_datacenter_module.rst)|Create a new datacenter in the vCenter inventory
-[vmware.vmware_rest.vcenter_datacenter_info](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/docs/vmware.vmware_rest.vcenter_datacenter_info_module.rst)|Retrieves information about the datacenter corresponding to {@param.name datacenter}.
-[vmware.vmware_rest.vcenter_datastore_info](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/docs/vmware.vmware_rest.vcenter_datastore_info_module.rst)|Retrieves information about the datastore indicated by {@param.name datastore}.
-[vmware.vmware_rest.vcenter_folder_info](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/docs/vmware.vmware_rest.vcenter_folder_info_module.rst)|Returns information about at most 1000 visible (subject to permission checks) folders in vCenter matching the {@link FilterSpec}.
+[vmware.vmware_rest.vcenter_datacenter_info](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/docs/vmware.vmware_rest.vcenter_datacenter_info_module.rst)|Retrieves information about the datacenter corresponding to datacenter.
+[vmware.vmware_rest.vcenter_datastore_info](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/docs/vmware.vmware_rest.vcenter_datastore_info_module.rst)|Retrieves information about the datastore indicated by datastore.
+[vmware.vmware_rest.vcenter_folder_info](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/docs/vmware.vmware_rest.vcenter_folder_info_module.rst)|Returns information about at most 1000 visible (subject to permission checks) folders in vCenter matching the Folder.FilterSpec.
[vmware.vmware_rest.vcenter_host](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/docs/vmware.vmware_rest.vcenter_host_module.rst)|Add a new standalone host in the vCenter inventory
-[vmware.vmware_rest.vcenter_host_info](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/docs/vmware.vmware_rest.vcenter_host_info_module.rst)|Returns information about at most 2500 visible (subject to permission checks) hosts in vCenter matching the {@link FilterSpec}.
-[vmware.vmware_rest.vcenter_network_info](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/docs/vmware.vmware_rest.vcenter_network_info_module.rst)|Returns information about at most 1000 visible (subject to permission checks) networks in vCenter matching the {@link FilterSpec}.
+[vmware.vmware_rest.vcenter_host_info](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/docs/vmware.vmware_rest.vcenter_host_info_module.rst)|Returns information about at most 2500 visible (subject to permission checks) hosts in vCenter matching the Host.FilterSpec.
+[vmware.vmware_rest.vcenter_network_info](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/docs/vmware.vmware_rest.vcenter_network_info_module.rst)|Returns information about at most 1000 visible (subject to permission checks) networks in vCenter matching the Network.FilterSpec.
[vmware.vmware_rest.vcenter_ovf_libraryitem](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/docs/vmware.vmware_rest.vcenter_ovf_libraryitem_module.rst)|Creates a library item in content library from a virtual machine or virtual appliance
[vmware.vmware_rest.vcenter_resourcepool](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/docs/vmware.vmware_rest.vcenter_resourcepool_module.rst)|Creates a resource pool.
-[vmware.vmware_rest.vcenter_resourcepool_info](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/docs/vmware.vmware_rest.vcenter_resourcepool_info_module.rst)|Retrieves information about the resource pool indicated by {@param.name resourcePool}.
+[vmware.vmware_rest.vcenter_resourcepool_info](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/docs/vmware.vmware_rest.vcenter_resourcepool_info_module.rst)|Retrieves information about the resource pool indicated by resourcePool.
[vmware.vmware_rest.vcenter_storage_policies_info](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/docs/vmware.vmware_rest.vcenter_storage_policies_info_module.rst)|Returns information about at most 1024 visible (subject to permission checks) storage solicies availabe in vCenter
[vmware.vmware_rest.vcenter_vm](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/docs/vmware.vmware_rest.vcenter_vm_module.rst)|Creates a virtual machine.
[vmware.vmware_rest.vcenter_vm_guest_customization](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/docs/vmware.vmware_rest.vcenter_vm_guest_customization_module.rst)|Applies a customization specification on the virtual machine
@@ -194,7 +195,7 @@ Name | Description
[vmware.vmware_rest.vcenter_vm_power](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/docs/vmware.vmware_rest.vcenter_vm_power_module.rst)|Operate a boot, hard shutdown, hard reset or hard suspend on a guest.
[vmware.vmware_rest.vcenter_vm_power_info](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/docs/vmware.vmware_rest.vcenter_vm_power_info_module.rst)|Returns the power state information of a virtual machine.
[vmware.vmware_rest.vcenter_vm_storage_policy](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/docs/vmware.vmware_rest.vcenter_vm_storage_policy_module.rst)|Updates the storage policy configuration of a virtual machine and/or its associated virtual hard disks.
-[vmware.vmware_rest.vcenter_vm_storage_policy_compliance](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/docs/vmware.vmware_rest.vcenter_vm_storage_policy_compliance_module.rst)|Returns the storage policy Compliance {@link Info} of a virtual machine after explicitly re-computing compliance check.
+[vmware.vmware_rest.vcenter_vm_storage_policy_compliance](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/docs/vmware.vmware_rest.vcenter_vm_storage_policy_compliance_module.rst)|Returns the storage policy Compliance Compliance.Info of a virtual machine after explicitly re-computing compliance check.
[vmware.vmware_rest.vcenter_vm_storage_policy_compliance_info](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/docs/vmware.vmware_rest.vcenter_vm_storage_policy_compliance_info_module.rst)|Returns the cached storage policy compliance information of a virtual machine.
[vmware.vmware_rest.vcenter_vm_storage_policy_info](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/docs/vmware.vmware_rest.vcenter_vm_storage_policy_info_module.rst)|Returns Information about Storage Policy associated with a virtual machine's home directory and/or its virtual hard disks.
[vmware.vmware_rest.vcenter_vm_tools](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/docs/vmware.vmware_rest.vcenter_vm_tools_module.rst)|Update the properties of VMware Tools.
@@ -208,23 +209,11 @@ Name | Description
### Documentation
-The [VMware REST modules guide](https://docs.ansible.com/ansible/devel/scenario_guides/guide_vmware_rest.html) gives a step by step introduction of the collection.
+The [VMware REST modules guide](https://docs.ansible.com/ansible/devel/collections/vmware/vmware_rest/docsite/guide_vmware_rest.html) gives a step by step introduction of the collection.
-## Testing and Development
+## Development
-Please, don't open Pull Request against the [vmware_rest](https://github.com/ansible-collections/vmware_rest) repository.
-We use a project called [vmware_rest_code_generate](https://github.com/ansible-collections/vmware_rest_code_generator) to generate these modules and your change would be lost.
-
-
-### Testing with `ansible-test`
-
-
-```
-virtualenv -p python3.7 .virtualenv/py37 # Or any other version greater than 3.6
-source .virtualenv/py37/bin/activate
-pip install -r requirements.txt -r test-requirements.txt
-ansible-test network-integration --python 3.7 --inventory /tmp/inventory-vmware_rest vcenter_vm_scenario1
-```
+This collection can be generated using the [content_builder](https://github.com/ansible-community/ansible.content_builder) tool. Please refer to the [vmware module generation](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/development.md).
## Release notes
diff --git a/ansible_collections/vmware/vmware_rest/changelogs/changelog.yaml b/ansible_collections/vmware/vmware_rest/changelogs/changelog.yaml
index b8e6d73b4..f9cc57c8d 100644
--- a/ansible_collections/vmware/vmware_rest/changelogs/changelog.yaml
+++ b/ansible_collections/vmware/vmware_rest/changelogs/changelog.yaml
@@ -648,6 +648,43 @@ releases:
fragments:
- allow_space_in_search_filters.yaml
- lookup-handle-special-chars.yml
- - set_default_galaxy_version.yaml
- release_summary.yml
+ - set_default_galaxy_version.yaml
release_date: '2023-03-14'
+ 3.0.0:
+ changes:
+ breaking_changes:
+ - Remove support for ansible-core < 2.14
+ minor_changes:
+ - Use 7.0 U3 API spec to build the modules (https://github.com/ansible-collections/vmware.vmware_rest/pull/449).
+ release_summary: This major release drops support for ansible-core versions
+ lower than 2.14. The vmware.vmware_rest colllection 3.0.0 supports vSphere
+ versions greater than 7.0.3.
+ fragments:
+ - add_dev_doc.yaml
+ - changelog-wf-only-on-pr.yaml
+ - fix_gha_sanity_tests.yaml
+ - gha_cleanup_version_update.yaml
+ - release_summary.yml
+ - remove_old_changelog_fragments.yaml
+ - remove_unnecessary_sanity_ignores.yaml
+ - start_gha_4_sanity_tests.yaml
+ - use_7.0.3_spec.yaml
+ release_date: '2023-11-27'
+ 3.0.1:
+ changes:
+ bugfixes:
+ - 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).
+ minor_changes:
+ - 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 folder attribute for host and dc module only (https://github.com/ansible-community/ansible.content_builder/pull/79).
+ fragments:
+ - 20240105-bugfix-lookup-options-parsing.yml
+ - 20240305-network-moid-docs-update.yml
+ - 463_fix_library_url.yaml
+ - 75-vmware_rest-action_groups.yaml
+ - 76-vmware_rest-dont_use_folder.yaml
+ release_date: '2024-03-21'
diff --git a/ansible_collections/vmware/vmware_rest/changelogs/config.yaml b/ansible_collections/vmware/vmware_rest/changelogs/config.yaml
index 7790c1100..33a52ac2d 100644
--- a/ansible_collections/vmware/vmware_rest/changelogs/config.yaml
+++ b/ansible_collections/vmware/vmware_rest/changelogs/config.yaml
@@ -2,7 +2,7 @@ changelog_filename_template: ../CHANGELOG.rst
changelog_filename_version_depth: 0
changes_file: changelog.yaml
changes_format: combined
-keep_fragments: true
+keep_fragments: false
mention_ancestor: true
new_plugins_after_name: removed_features
notesdir: fragments
diff --git a/ansible_collections/community/sap/changelogs/fragments/.keep b/ansible_collections/vmware/vmware_rest/changelogs/fragments/.keep
index e69de29bb..e69de29bb 100644
--- a/ansible_collections/community/sap/changelogs/fragments/.keep
+++ b/ansible_collections/vmware/vmware_rest/changelogs/fragments/.keep
diff --git a/ansible_collections/vmware/vmware_rest/changelogs/fragments/2.1.3-changelog.yaml b/ansible_collections/vmware/vmware_rest/changelogs/fragments/2.1.3-changelog.yaml
deleted file mode 100644
index 7599a19fd..000000000
--- a/ansible_collections/vmware/vmware_rest/changelogs/fragments/2.1.3-changelog.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-minor_changes:
-- add some missing example blocks.
-bugfixes:
-- >
- "remove the following modules vcenter_vm_guest_environment_info vcenter_vm_guest_environment_info "
- "vcenter_vm_guest_filesystemy vcenter_vm_guest_filesystem_files vcenter_vm_guest_filesystem_files_info "
- "vcenter_vm_guest_processes vcenter_vm_guest_processes_info because they don't work as expected."
diff --git a/ansible_collections/vmware/vmware_rest/changelogs/fragments/2.1.3-module_utils.yaml b/ansible_collections/vmware/vmware_rest/changelogs/fragments/2.1.3-module_utils.yaml
deleted file mode 100644
index e691b0190..000000000
--- a/ansible_collections/vmware/vmware_rest/changelogs/fragments/2.1.3-module_utils.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
----
-minor_changes:
-- "The module_utils/vmware.py is licensed under BSD."
diff --git a/ansible_collections/vmware/vmware_rest/changelogs/fragments/allow_space_in_search_filters.yaml b/ansible_collections/vmware/vmware_rest/changelogs/fragments/allow_space_in_search_filters.yaml
deleted file mode 100644
index 70d487d47..000000000
--- a/ansible_collections/vmware/vmware_rest/changelogs/fragments/allow_space_in_search_filters.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
----
-bugfixes:
- - "Allow filters with the space (See: https://github.com/ansible-collections/vmware.vmware_rest/issues/362)."
diff --git a/ansible_collections/vmware/vmware_rest/changelogs/fragments/cloud.common-bump.yaml b/ansible_collections/vmware/vmware_rest/changelogs/fragments/cloud.common-bump.yaml
deleted file mode 100644
index ea6fd55a6..000000000
--- a/ansible_collections/vmware/vmware_rest/changelogs/fragments/cloud.common-bump.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
----
-bugfixes:
-- Adjust the cloud.common dependency to require 2.0.4 or greater (https://github.com/ansible-collections/vmware.vmware_rest/pull/315).
diff --git a/ansible_collections/vmware/vmware_rest/changelogs/fragments/lookup-handle-special-chars.yml b/ansible_collections/vmware/vmware_rest/changelogs/fragments/lookup-handle-special-chars.yml
deleted file mode 100644
index b71d104ee..000000000
--- a/ansible_collections/vmware/vmware_rest/changelogs/fragments/lookup-handle-special-chars.yml
+++ /dev/null
@@ -1,3 +0,0 @@
----
-bugfixes:
- - "Handle spaces and special characters in resource names for lookup plugins (See: https://github.com/ansible-collections/vmware.vmware_rest/issues/356)."
diff --git a/ansible_collections/vmware/vmware_rest/changelogs/fragments/set_default_galaxy_version.yaml b/ansible_collections/vmware/vmware_rest/changelogs/fragments/set_default_galaxy_version.yaml
deleted file mode 100644
index 35737c4a2..000000000
--- a/ansible_collections/vmware/vmware_rest/changelogs/fragments/set_default_galaxy_version.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
----
-minor_changes:
-- "set version in galaxy.yml to allow install from git repo"
diff --git a/ansible_collections/vmware/vmware_rest/changelogs/fragments/use-FQCN-in-create_vm.yaml.yaml b/ansible_collections/vmware/vmware_rest/changelogs/fragments/use-FQCN-in-create_vm.yaml.yaml
deleted file mode 100644
index beda39489..000000000
--- a/ansible_collections/vmware/vmware_rest/changelogs/fragments/use-FQCN-in-create_vm.yaml.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
----
-minor_changes:
-- "``content_subscribedlibrary`` - use FQCN in the example."
diff --git a/ansible_collections/vmware/vmware_rest/changelogs/fragments/vcenter_network_info-dvs-example.yaml b/ansible_collections/vmware/vmware_rest/changelogs/fragments/vcenter_network_info-dvs-example.yaml
deleted file mode 100644
index 5bd66a031..000000000
--- a/ansible_collections/vmware/vmware_rest/changelogs/fragments/vcenter_network_info-dvs-example.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
----
-minor_changes:
-- "``vcenter_network_info`` - add an example with a Distributed Virtual Switch, a.k.a dvswitch (https://github.com/ansible-collections/vmware.vmware_rest/pull/316)."
diff --git a/ansible_collections/vmware/vmware_rest/changelogs/fragments/version_added.yaml b/ansible_collections/vmware/vmware_rest/changelogs/fragments/version_added.yaml
deleted file mode 100644
index cc0d31c53..000000000
--- a/ansible_collections/vmware/vmware_rest/changelogs/fragments/version_added.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
----
-minor_changes:
-- "Adjust the release version of the lookup plugins fro, 2.0.1 to 2.1.0."
diff --git a/ansible_collections/vmware/vmware_rest/changelogs/fragments/vm_template_library.yaml b/ansible_collections/vmware/vmware_rest/changelogs/fragments/vm_template_library.yaml
deleted file mode 100644
index 1fab1f574..000000000
--- a/ansible_collections/vmware/vmware_rest/changelogs/fragments/vm_template_library.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
----
-minor_changes:
-- documentation - clarify that the VMware vCenter API doesn't allow the cloning of template if there are not if Library.
diff --git a/ansible_collections/vmware/vmware_rest/development.md b/ansible_collections/vmware/vmware_rest/development.md
new file mode 100644
index 000000000..956ca470f
--- /dev/null
+++ b/ansible_collections/vmware/vmware_rest/development.md
@@ -0,0 +1,72 @@
+# VMWare
+
+# Development Guide
+## Installation
+
+Install the ansible.content_builder tool.
+```
+pip install black==22.3.0 jsonschema jinja2==3.0.3 ansible-core
+ansible-galaxy collection install git+https://github.com/ansible-community/ansible.content_builder.git
+```
+
+You can also include it in a `requirements.yml` file and install it via `ansible-galaxy collection install -r requirements.yml` using the format:
+
+```
+collections:
+- name: ansible.content_builder
+```
+
+See [Ansible Using collections](https://docs.ansible.com/ansible/latest/user_guide/collections_using.html) for more details.
+
+## Using the Content Builder tool to generate vmware modules:
+
+To use the content builder tool, you need to provide a YAML file that contains all the information needed to generate a vmware module. You can find the necessary files, such as the [api specification](https://github.com/ansible-collections/vmware.vmware_rest/tree/main/config/api_specifications) and the [modules.yaml](https://github.com/ansible-collections/vmware.vmware_rest/tree/main/config/modules.yaml), in the repository. You can copy these files to your local path and customize them as per your requirements. After that, you must specify the path of these files in the input yaml file against the api_object_path and resource parameter. If you want to generate both examples and modules, set the action parameter to `generate_all`. If you only want to generate examples, use `action: generate_examples`, and for only modules, use `action: generate_modules`. For more information on the command and input arguments, please refer to the tool's [README](https://github.com/ansible-community/ansible.content_builder#resource-module-scaffolding-generated-using-openapi-based-json). To generate the vmware modules using the content_builder tool, you can use the following command:
+
+```
+ansible-playbook build.yaml -e manifest_file=MANIFEST.yaml
+```
+
+The build.yaml file should contain the following code:
+
+```yaml
+---
+- hosts: localhost
+ gather_facts: yes
+ roles:
+ - ansible.content_builder.run
+```
+
+And the MANIFEST.yaml file should contain the following code:
+
+```yaml
+---
+collection:
+ path: /collections/ansible_collections/vmware/vmware_rest
+ namespace: vmware
+ name: vmware_rest
+plugins:
+ - type: module_openapi
+ name: "vmware_rest"
+ content: cloud
+ api_object_path: api_specifications/7.0.2
+ resource: config
+ action: generate_all
+ unique_key: ""
+ rm_swagger_json: ""
+ module_version: "1.0.0"
+ author: "Ansible Cloud Team"
+```
+
+Once the modules are generated in the location mentioned in `collection:path`, you can follow the below steps to refresh the RETURN block in the module documentaion.
+
+**_Refresh the `RETURN Block` of the vmware modules using the test-suite:_**
+
+Set the env variables mentioned in [tox.ini](https://github.com/ansible-collections/vmware.vmware_rest/blob/main/tox.ini#L47).
+```
+ mkdir -p ~/.ansible/collections/ansible_collections/goneri/utils
+ git clone https://github.com/goneri/ansible-collection-goneri.utils.git ~/.ansible/collections/ansible_collections/goneri/utils
+ cd ~/.ansible/collections/ansible_collections/vmware/vmware_rest/tests/integration/targets/vcenter_vm_scenario1
+ ./refresh_RETURN_block.sh
+ cd ~/.ansible/collections/ansible_collections/goneri/utils
+ ./scripts/inject_RETURN.py ~/.ansible/collections/ansible_collections/vmware/vmware_rest/manual/source/vmware_rest_scenarios/task_outputs ~/.ansible/collections/ansible_collections/vmware/vmware_rest --config-file config/inject_RETURN.yaml
+```
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_consolecli_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_consolecli_info_module.rst
index ad97257d3..0deef6706 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_consolecli_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_consolecli_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -157,7 +157,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_consolecli_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_consolecli_module.rst
index 4a82a5175..3234237ee 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_consolecli_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_consolecli_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -194,7 +194,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_dcui_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_dcui_info_module.rst
index 199ad6a61..81635394d 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_dcui_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_dcui_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -157,7 +157,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_dcui_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_dcui_module.rst
index c92150307..5f8abce2b 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_dcui_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_dcui_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -194,7 +194,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_shell_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_shell_info_module.rst
index d8472f76b..1cb4dcdc5 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_shell_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_shell_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -157,7 +157,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_shell_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_shell_module.rst
index 2980f0647..c7836791b 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_shell_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_shell_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -210,7 +210,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_ssh_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_ssh_info_module.rst
index 5ebf87111..1f71fd38c 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_ssh_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_ssh_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -157,7 +157,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_ssh_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_ssh_module.rst
index ce689f6b4..7ea11cca3 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_ssh_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_access_ssh_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -194,7 +194,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_applmgmt_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_applmgmt_info_module.rst
index 42623d726..0f99a32ea 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_applmgmt_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_applmgmt_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -157,7 +157,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_database_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_database_info_module.rst
index d781bbd41..32437265d 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_database_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_database_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -157,7 +157,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_databasestorage_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_databasestorage_info_module.rst
index aa54178b7..d87c9ec82 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_databasestorage_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_databasestorage_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -157,7 +157,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_load_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_load_info_module.rst
index f6069d4a9..656243016 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_load_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_load_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -157,7 +157,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_mem_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_mem_info_module.rst
index a77c552ad..44cafb88c 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_mem_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_mem_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -157,7 +157,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_softwarepackages_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_softwarepackages_info_module.rst
index 66e7c43b2..061d7f6b6 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_softwarepackages_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_softwarepackages_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -157,7 +157,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_storage_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_storage_info_module.rst
index 941178c0c..c354fe489 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_storage_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_storage_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -157,7 +157,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_swap_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_swap_info_module.rst
index ba8dc6f4f..365d475b3 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_swap_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_swap_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -157,7 +157,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_system_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_system_info_module.rst
index e192df669..b5a597654 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_system_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_health_system_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -157,7 +157,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_infraprofile_configs_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_infraprofile_configs_info_module.rst
index 563c26205..1387af2b8 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_infraprofile_configs_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_infraprofile_configs_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -157,7 +157,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_infraprofile_configs_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_infraprofile_configs_module.rst
index 842336a15..af0e71ed8 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_infraprofile_configs_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_infraprofile_configs_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -225,7 +225,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_localaccounts_globalpolicy_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_localaccounts_globalpolicy_info_module.rst
index 5dc2b7069..2c3cfec27 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_localaccounts_globalpolicy_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_localaccounts_globalpolicy_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -157,7 +157,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_localaccounts_globalpolicy_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_localaccounts_globalpolicy_module.rst
index 4a4a26f4d..c8127a9e8 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_localaccounts_globalpolicy_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_localaccounts_globalpolicy_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -54,6 +54,7 @@ Parameters
</td>
<td>
<div>Maximum number of days a password may be used. If the password is older than this, a password change will be forced.</div>
+ <div>If unset then the restriction will be ignored.</div>
</td>
</tr>
<tr>
@@ -69,6 +70,7 @@ Parameters
</td>
<td>
<div>Minimum number of days allowed between password changes. Any password changes attempted sooner than this will be rejected.</div>
+ <div>If unset then the restriction will be ignored.</div>
</td>
</tr>
<tr>
@@ -209,6 +211,7 @@ Parameters
</td>
<td>
<div>Number of days warning given before a password expires. A zero means warning is given only upon the day of expiration.</div>
+ <div>If unset then no warning will be provided.</div>
</td>
</tr>
</table>
@@ -219,7 +222,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_localaccounts_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_localaccounts_info_module.rst
index 3ac8895f0..f7af04602 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_localaccounts_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_localaccounts_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -172,7 +172,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_monitoring_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_monitoring_info_module.rst
index 7f642c9eb..ff263e4c8 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_monitoring_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_monitoring_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -71,7 +71,8 @@ Parameters
<td>
</td>
<td>
- <div>statistic item id Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>statistic item id</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.appliance_monitoring_info</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -172,7 +173,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_monitoring_query_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_monitoring_query_module.rst
index cbb5420fb..27bf8352c 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_monitoring_query_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_monitoring_query_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -76,7 +76,7 @@ Parameters
</ul>
</td>
<td>
- <div><code>function_type</code> Defines aggregation function This parameter is mandatory.</div>
+ <div><em>function_type</em> enumerated type Defines aggregation function This parameter is mandatory.</div>
</td>
</tr>
<tr>
@@ -99,7 +99,7 @@ Parameters
</ul>
</td>
<td>
- <div><code>interval_type</code> Defines interval between the values in hours and mins, for which aggregation will apply This parameter is mandatory.</div>
+ <div><em>interval_type</em> enumerated type Defines interval between the values in hours and mins, for which aggregation will apply This parameter is mandatory.</div>
</td>
</tr>
<tr>
@@ -116,7 +116,8 @@ Parameters
<td>
</td>
<td>
- <div>monitored item IDs Ex: CPU, MEMORY This parameter is mandatory.</div>
+ <div>monitored item IDs Ex: CPU, MEMORY</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.appliance_monitoring_info</span>.</div>
</td>
</tr>
<tr>
@@ -251,7 +252,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_dns_domains_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_dns_domains_info_module.rst
index f3e455aa4..e3437c6a8 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_dns_domains_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_dns_domains_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -157,7 +157,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_dns_domains_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_dns_domains_module.rst
index 30cfd355f..66baf0ef0 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_dns_domains_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_dns_domains_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -206,7 +206,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_dns_hostname_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_dns_hostname_info_module.rst
index 09bbfbd38..123c29bb7 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_dns_hostname_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_dns_hostname_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -157,7 +157,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_dns_hostname_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_dns_hostname_module.rst
index 9fac06b19..e1deee534 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_dns_hostname_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_dns_hostname_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -191,7 +191,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_dns_servers_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_dns_servers_info_module.rst
index 22e3a7105..7a28f961b 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_dns_servers_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_dns_servers_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -157,7 +157,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_dns_servers_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_dns_servers_module.rst
index d64a7fff2..d37c90071 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_dns_servers_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_dns_servers_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -57,7 +57,7 @@ Parameters
</ul>
</td>
<td>
- <div><code>dns_server_mode</code> Describes DNS Server source (DHCP,static) Required with <em>state=[&#x27;set&#x27;]</em></div>
+ <div><em>dns_server_mode</em> enumerated type Describes DNS Server source (DHCP,static) Required with <em>state=[&#x27;set&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -226,7 +226,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_firewall_inbound_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_firewall_inbound_info_module.rst
index 5315be6d4..69031bfbc 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_firewall_inbound_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_firewall_inbound_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -157,7 +157,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_firewall_inbound_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_firewall_inbound_module.rst
index cd25a625b..780a57ced 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_firewall_inbound_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_firewall_inbound_module.rst
@@ -17,7 +17,7 @@ Version added: 2.0.0
Synopsis
--------
-- Set the ordered list of firewall rules to allow or deny traffic from one or more incoming IP addresses. This overwrites the existing firewall rules and creates a new rule list. Within the list of traffic rules, rules are processed in order of appearance, from top to bottom. For example, the list of rules can be as follows: <table> <tr> <th>Address</th><th>Prefix</th><th>Interface Name</th><th>Policy</th> </tr> <tr> <td>10.112.0.1</td><td>0</td><td>*</td><td>REJECT</td> </tr> <tr> <td>10.112.0.1</td><td>0</td><td>nic0</td><td>ACCEPT</td> </tr> </table> In the above example, the first rule drops all packets originating from 10.112.0.1 and<br> the second rule accepts all packets originating from 10.112.0.1 only on nic0. In effect, the second rule is always ignored which is not desired, hence the order has to be swapped. When a connection matches a firewall rule, further processing for the connection stops, and the appliance ignores any additional firewall rules you have set.
+- Set the ordered list of firewall rules to allow or deny traffic from one or more incoming IP addresses. This overwrites the existing firewall rules and creates a new rule list. Within the list of traffic rules, rules are processed in order of appearance, from top to bottom. For example, the list of rules can be as follows: [dropped table ]
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -61,7 +61,7 @@ Parameters
<div>This key is required with [&#x27;set&#x27;].</div>
<div>- <code>prefix</code> (int): CIDR prefix used to mask address. For example, an IPv4 prefix of 24 ignores the low-order 8 bits of address. ([&#x27;set&#x27;])</div>
<div>This key is required with [&#x27;set&#x27;].</div>
- <div>- <code>policy</code> (str): <code>policy</code> Defines firewall rule policies. ([&#x27;set&#x27;])</div>
+ <div>- <code>policy</code> (str): <em>policy</em> enumerated type Defines firewall rule policies. ([&#x27;set&#x27;])</div>
<div>This key is required with [&#x27;set&#x27;].</div>
<div>- Accepted values:</div>
<div>- ACCEPT</div>
@@ -204,7 +204,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_info_module.rst
index 81e483b01..21d75be2c 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -157,7 +157,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_interfaces_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_interfaces_info_module.rst
index 4c53c478a..1865a43c6 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_interfaces_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_interfaces_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -53,7 +53,8 @@ Parameters
<td>
</td>
<td>
- <div>Network interface, for example, &quot;nic0&quot;. Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>Network interface, for example, &quot;nic0&quot;.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.appliance_networking_interfaces_info</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -172,7 +173,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_interfaces_ipv4_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_interfaces_ipv4_info_module.rst
index f151d1397..ae06749e7 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_interfaces_ipv4_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_interfaces_ipv4_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -53,7 +53,8 @@ Parameters
<td>
</td>
<td>
- <div>The Network interface to query, for example, &quot;nic0&quot;. Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>The Network interface to query, for example, &quot;nic0&quot;.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.appliance_networking_interfaces_info</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -172,7 +173,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_interfaces_ipv4_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_interfaces_ipv4_module.rst
index 7477b360d..fde23189d 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_interfaces_ipv4_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_interfaces_ipv4_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -54,6 +54,7 @@ Parameters
</td>
<td>
<div>The IPv4 address, for example, &quot;10.20.80.191&quot;.</div>
+ <div>This field is optional and it is only relevant when the value of <em>mode</em> is STATIC.</div>
</td>
</tr>
<tr>
@@ -69,6 +70,7 @@ Parameters
</td>
<td>
<div>The IPv4 address of the default gateway. This configures the global default gateway on the appliance with the specified gateway address and interface. This gateway replaces the existing default gateway configured on the appliance. However, if the gateway address is link-local, then it is added for that interface. This does not support configuration of multiple global default gateways through different interfaces.</div>
+ <div>If unset, the defaultGateway was never set.</div>
</td>
</tr>
<tr>
@@ -84,7 +86,8 @@ Parameters
<td>
</td>
<td>
- <div>Network interface to update, for example, &quot;nic0&quot;. This parameter is mandatory.</div>
+ <div>Network interface to update, for example, &quot;nic0&quot;.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.appliance_networking_interfaces_info</span>. This parameter is mandatory.</div>
</td>
</tr>
<tr>
@@ -105,7 +108,7 @@ Parameters
</ul>
</td>
<td>
- <div>The <code>mode</code> defines different IPv4 address assignment modes. This parameter is mandatory.</div>
+ <div>The <em>mode</em> enumerated type defines different IPv4 address assignment modes. This parameter is mandatory.</div>
</td>
</tr>
<tr>
@@ -120,7 +123,8 @@ Parameters
<td>
</td>
<td>
- <div>The IPv4 CIDR prefix, for example, 24. See http://www.oav.net/mirrors/cidr.html for netmask-to-prefix conversion.</div>
+ <div>The IPv4 CIDR prefix, for example, 24. See http://www.oav.net/mirrors/cidr.html for netmask-to-prefix conversion.</div>
+ <div>This field is optional and it is only relevant when the value of <em>mode</em> is STATIC.</div>
</td>
</tr>
<tr>
@@ -256,7 +260,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_interfaces_ipv6_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_interfaces_ipv6_info_module.rst
index 9df1a4bd8..8a9991f6f 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_interfaces_ipv6_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_interfaces_ipv6_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -53,7 +53,8 @@ Parameters
<td>
</td>
<td>
- <div>Network interface to query, for example, &quot;nic0&quot;. Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>Network interface to query, for example, &quot;nic0&quot;.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.appliance_networking_interfaces_info</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -172,7 +173,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_interfaces_ipv6_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_interfaces_ipv6_module.rst
index 16e571e75..5426cc20b 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_interfaces_ipv6_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_interfaces_ipv6_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -132,7 +132,8 @@ Parameters
<td>
</td>
<td>
- <div>Network interface to update, for example, &quot;nic0&quot;. This parameter is mandatory.</div>
+ <div>Network interface to update, for example, &quot;nic0&quot;.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.appliance_networking_interfaces_info</span>. This parameter is mandatory.</div>
</td>
</tr>
<tr>
@@ -268,7 +269,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_module.rst
index 40b348c1e..4562354b3 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -58,6 +58,7 @@ Parameters
</td>
<td>
<div>IPv6 Enabled or not</div>
+ <div>If unspecified, leaves the current state of Ipv6.</div>
</td>
</tr>
<tr>
@@ -194,7 +195,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_noproxy_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_noproxy_info_module.rst
index 711c60ff2..51e1a82d7 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_noproxy_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_noproxy_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -157,7 +157,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
@@ -190,15 +190,13 @@ Common return values are documented `here <https://docs.ansible.com/ansible/late
<b>value</b>
<a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
<div style="font-size: small">
- <span style="color: purple">list</span>
+ <span style="color: purple">dictionary</span>
</div>
</td>
<td>On success</td>
<td>
- <div>Get HTTP noproxy configuration</div>
+ <div>Remove the noproxy entries</div>
<br/>
- <div style="font-size: smaller"><b>Sample:</b></div>
- <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">[&#x27;localhost&#x27;, &#x27;127.0.0.1&#x27;]</div>
</td>
</tr>
</table>
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_noproxy_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_noproxy_module.rst
index 1a606ff45..fc47e40d4 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_noproxy_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_noproxy_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -191,7 +191,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_proxy_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_proxy_info_module.rst
index b081af34b..a66d640fb 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_proxy_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_proxy_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -172,7 +172,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_proxy_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_proxy_module.rst
index 2b010a621..a7e04b6a1 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_proxy_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_networking_proxy_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -59,9 +59,11 @@ Parameters
<div>This key is required with [&#x27;test&#x27;].</div>
<div>- <code>port</code> (int): Port to connect to the proxy server. In a &#x27;get&#x27; call, indicates the port connected to the proxy server. In a &#x27;set&#x27; call, specifies the port to connect to the proxy server. A value of -1 indicates the default port. ([&#x27;test&#x27;])</div>
<div>This key is required with [&#x27;test&#x27;].</div>
- <div>- <code>username</code> (str): Username for proxy server. ([&#x27;test&#x27;])</div>
- <div>- <code>password</code> (str): Password for proxy server. ([&#x27;test&#x27;])</div>
- <div>- <code>enabled</code> (bool): In the result of the <code>#get</code> and <code>#list</code> {@term operations} this field indicates whether proxying is enabled for a particular protocol. In the input to the <code>test</code> and <code>set</code> {@term operations} this field specifies whether proxying should be enabled for a particular protocol. ([&#x27;test&#x27;])</div>
+ <div>- <code>username</code> (str): Username for proxy server.</div>
+ <div>Only set if proxy requires username. ([&#x27;test&#x27;])</div>
+ <div>- <code>password</code> (str): Password for proxy server.</div>
+ <div>Only set if proxy requires password. ([&#x27;test&#x27;])</div>
+ <div>- <code>enabled</code> (bool): In the result of the #get and #list operations this field indicates whether proxying is enabled for a particular protocol. In the input to the test and set operations this field specifies whether proxying should be enabled for a particular protocol. ([&#x27;test&#x27;])</div>
<div>This key is required with [&#x27;test&#x27;].</div>
</td>
</tr>
@@ -81,7 +83,7 @@ Parameters
</ul>
</td>
<td>
- <div>In the result of the <code>#get</code> and <code>#list</code> {@term operations} this field indicates whether proxying is enabled for a particular protocol. In the input to the <code>test</code> and <code>set</code> {@term operations} this field specifies whether proxying should be enabled for a particular protocol. Required with <em>state=[&#x27;set&#x27;]</em></div>
+ <div>In the result of the #get and #list operations this field indicates whether proxying is enabled for a particular protocol. In the input to the test and set operations this field specifies whether proxying should be enabled for a particular protocol. Required with <em>state=[&#x27;set&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -112,6 +114,7 @@ Parameters
</td>
<td>
<div>Password for proxy server.</div>
+ <div>Only set if proxy requires password.</div>
</td>
</tr>
<tr>
@@ -210,6 +213,7 @@ Parameters
</td>
<td>
<div>Username for proxy server.</div>
+ <div>Only set if proxy requires username.</div>
</td>
</tr>
<tr>
@@ -310,7 +314,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_ntp_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_ntp_info_module.rst
index 8a98ad912..b771d44c9 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_ntp_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_ntp_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -157,7 +157,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_ntp_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_ntp_module.rst
index 6c8fc2fe5..fb87a4138 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_ntp_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_ntp_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -192,7 +192,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_services_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_services_info_module.rst
index 0d11d786f..90f8378c6 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_services_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_services_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -53,7 +53,8 @@ Parameters
<td>
</td>
<td>
- <div>identifier of the service whose state is being queried. Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>identifier of the service whose state is being queried.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.appliance_services_info</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -172,7 +173,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_services_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_services_module.rst
index fb5be4141..484e5cd12 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_services_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_services_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -54,7 +54,8 @@ Parameters
<td>
</td>
<td>
- <div>identifier of the service to restart This parameter is mandatory.</div>
+ <div>identifier of the service to restart</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.appliance_services_info</span>. This parameter is mandatory.</div>
</td>
</tr>
<tr>
@@ -193,7 +194,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_shutdown_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_shutdown_info_module.rst
index 8f90e9a24..e6e0e0e5b 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_shutdown_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_shutdown_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -157,7 +157,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_shutdown_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_shutdown_module.rst
index 6dd695fe7..d2b16d3bf 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_shutdown_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_shutdown_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -207,7 +207,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_globalfips_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_globalfips_info_module.rst
index 47d61da0c..f4d349cef 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_globalfips_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_globalfips_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -157,7 +157,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_globalfips_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_globalfips_module.rst
index 77af351d1..730745653 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_globalfips_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_globalfips_module.rst
@@ -17,7 +17,7 @@ Version added: 2.0.0
Synopsis
--------
-- Enable/Disable Global FIPS mode for the appliance. <p><b>Caution:</b> Changing the value of this setting will reboot the Appliance.
+- Enable/Disable Global FIPS mode for the appliance.
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -58,6 +58,7 @@ Parameters
</td>
<td>
<div>FIPS setting state.</div>
+ <div>If unset, the value is unchanged.</div>
</td>
</tr>
<tr>
@@ -193,7 +194,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_storage_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_storage_info_module.rst
index cf7e5089b..59d86c925 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_storage_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_storage_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -157,7 +157,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_storage_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_storage_module.rst
index a61dc5897..4b32410f0 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_storage_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_storage_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -176,7 +176,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_time_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_time_info_module.rst
index 217270a1e..90b33a6b1 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_time_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_time_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -157,7 +157,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_time_timezone_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_time_timezone_info_module.rst
index 276ce7fa2..ce7397dff 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_time_timezone_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_time_timezone_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -157,7 +157,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_time_timezone_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_time_timezone_module.rst
index e15484e47..f3c18e8df 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_time_timezone_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_time_timezone_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -190,7 +190,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_version_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_version_info_module.rst
index 425a493f5..66fd273cd 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_version_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_system_version_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -157,7 +157,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_timesync_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_timesync_info_module.rst
index 178f4266f..876f14b76 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_timesync_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_timesync_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -157,7 +157,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_timesync_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_timesync_module.rst
index ab78afe93..600fb85b7 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_timesync_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_timesync_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -59,7 +59,7 @@ Parameters
</ul>
</td>
<td>
- <div>The <code>time_sync_mode</code> defines time synchronization modes This parameter is mandatory.</div>
+ <div>The <em>time_sync_mode</em> enumerated type defines time synchronization modes This parameter is mandatory.</div>
</td>
</tr>
<tr>
@@ -195,7 +195,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_update_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_update_info_module.rst
index d2fd392fb..b288a6dbb 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_update_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_update_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -157,7 +157,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_vmon_service_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_vmon_service_info_module.rst
index ed7104315..d62a3bb74 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_vmon_service_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_vmon_service_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -173,7 +173,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_vmon_service_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_vmon_service_module.rst
index 5fa8058ff..bbff189ba 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_vmon_service_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.appliance_vmon_service_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -214,7 +214,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.cluster_moid_lookup.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.cluster_moid_lookup.rst
index 190d3535a..1af5dd5c5 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.cluster_moid_lookup.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.cluster_moid_lookup.rst
@@ -48,7 +48,7 @@ Parameters
<b>_terms</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
- <span style="color: purple">-</span>
+ <span style="color: purple">string</span>
/ <span style="color: red">required</span>
</div>
</td>
@@ -73,10 +73,10 @@ Parameters
<td>
</td>
<td>
+ <div>env:VMWARE_HOST</div>
</td>
<td>
<div>The hostname or IP address of the vSphere vCenter.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_HOST</code> will be used instead.</div>
</td>
</tr>
<tr>
@@ -92,10 +92,10 @@ Parameters
<td>
</td>
<td>
+ <div>env:VMWARE_PASSWORD</div>
</td>
<td>
<div>The vSphere vCenter password.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_PASSWORD</code> will be used instead.</div>
</td>
</tr>
<tr>
@@ -110,12 +110,12 @@ Parameters
<td>
</td>
<td>
+ <div>env:VMWARE_REST_LOG_FILE</div>
</td>
<td>
<div>You can use this optional parameter to set the location of a log file.</div>
- <div>This file will be used to record the HTTP REST interaction.</div>
- <div>The file will be stored on the host that run the module.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_REST_LOG_FILE</code> will be used instead.</div>
+ <div>This file will be used to record the HTTP REST interactions.</div>
+ <div>The file will be stored on the host that runs the module.</div>
</td>
</tr>
<tr>
@@ -131,10 +131,10 @@ Parameters
<td>
</td>
<td>
+ <div>env:VMWARE_USER</div>
</td>
<td>
<div>The vSphere vCenter username.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_USER</code> will be used instead.</div>
</td>
</tr>
<tr>
@@ -147,16 +147,13 @@ Parameters
</div>
</td>
<td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li><div style="color: blue"><b>yes</b>&nbsp;&larr;</div></li>
- </ul>
+ <b>Default:</b><br/><div style="color: blue">"yes"</div>
</td>
<td>
+ <div>env:VMWARE_VALIDATE_CERTS</div>
</td>
<td>
- <div>Allows connection when SSL certificates are not valid. Set to <code>false</code> when certificates are not trusted.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_VALIDATE_CERTS</code> will be used instead.</div>
+ <div>Allows connection when SSL certificates are not valid. Set to V(false) when certificates are not trusted.</div>
</td>
</tr>
</table>
@@ -174,9 +171,9 @@ Examples
- name: set connection info
ansible.builtin.set_fact:
connection_args:
- vcenter_hostname: "vcenter.test"
- vcenter_username: "administrator@vsphere.local"
- vcenter_password: "1234"
+ vcenter_hostname: "vcenter.test"
+ vcenter_username: "administrator@vsphere.local"
+ vcenter_password: "1234"
- name: lookup MoID of the object
ansible.builtin.debug: msg="{{ lookup('vmware.vmware_rest.cluster_moid', '/my_dc/host/my_cluster', **connection_args) }}"
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_configuration_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_configuration_info_module.rst
index dced88933..ff6b937ce 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_configuration_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_configuration_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -157,7 +157,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_configuration_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_configuration_module.rst
index 9eb24b58d..52754ce8f 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_configuration_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_configuration_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -238,7 +238,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_library_item_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_library_item_info_module.rst
index 171c029de..b45b08afa 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_library_item_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_library_item_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -187,7 +187,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_locallibrary_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_locallibrary_info_module.rst
index ff24517b4..98f8192b9 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_locallibrary_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_locallibrary_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -172,7 +172,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_locallibrary_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_locallibrary_module.rst
index 6c55afc4b..c4219c9ea 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_locallibrary_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_locallibrary_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -207,6 +207,21 @@ Parameters
<tr>
<td colspan="1">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>security_policy_id</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Represents the security policy applied to this library. Setting the field will make the library secure. This field is ignored in <code>update</code>operation if {@link #unsetSecurityPolicyId} is set to <code>True</code>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>server_guid</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -350,6 +365,25 @@ Parameters
<tr>
<td colspan="1">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>unset_security_policy_id</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>no</li>
+ <li>yes</li>
+ </ul>
+ </td>
+ <td>
+ <div>This represents the intent of the change to {@link #securityPolicyId} in <code>update</code>operation. If this field is set to <code>True</code>, any security policy applied to the library will be removed. If this field is set to <code>False</code>, any security policy applied to library will be changed to the value specified in {@link #securityPolicyId}, if any.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>vcenter_hostname</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -460,7 +494,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_subscribedlibrary_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_subscribedlibrary_info_module.rst
index 054750d64..4a90cfdab 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_subscribedlibrary_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_subscribedlibrary_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -172,7 +172,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_subscribedlibrary_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_subscribedlibrary_module.rst
index a98f77fda..17f25ebe8 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_subscribedlibrary_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.content_subscribedlibrary_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -207,6 +207,21 @@ Parameters
<tr>
<td colspan="1">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>security_policy_id</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Represents the security policy applied to this library. Setting the field will make the library secure. This field is ignored in <code>update</code>operation if {@link #unsetSecurityPolicyId} is set to <code>True</code>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>server_guid</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -333,6 +348,25 @@ Parameters
<tr>
<td colspan="1">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>unset_security_policy_id</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>no</li>
+ <li>yes</li>
+ </ul>
+ </td>
+ <td>
+ <div>This represents the intent of the change to {@link #securityPolicyId} in <code>update</code>operation. If this field is set to <code>True</code>, any security policy applied to the library will be removed. If this field is set to <code>False</code>, any security policy applied to library will be changed to the value specified in {@link #securityPolicyId}, if any.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>vcenter_hostname</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -443,7 +477,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.datacenter_moid_lookup.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.datacenter_moid_lookup.rst
index 122bca9ed..4291b22cb 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.datacenter_moid_lookup.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.datacenter_moid_lookup.rst
@@ -48,7 +48,7 @@ Parameters
<b>_terms</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
- <span style="color: purple">-</span>
+ <span style="color: purple">string</span>
/ <span style="color: red">required</span>
</div>
</td>
@@ -73,10 +73,10 @@ Parameters
<td>
</td>
<td>
+ <div>env:VMWARE_HOST</div>
</td>
<td>
<div>The hostname or IP address of the vSphere vCenter.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_HOST</code> will be used instead.</div>
</td>
</tr>
<tr>
@@ -92,10 +92,10 @@ Parameters
<td>
</td>
<td>
+ <div>env:VMWARE_PASSWORD</div>
</td>
<td>
<div>The vSphere vCenter password.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_PASSWORD</code> will be used instead.</div>
</td>
</tr>
<tr>
@@ -110,12 +110,12 @@ Parameters
<td>
</td>
<td>
+ <div>env:VMWARE_REST_LOG_FILE</div>
</td>
<td>
<div>You can use this optional parameter to set the location of a log file.</div>
- <div>This file will be used to record the HTTP REST interaction.</div>
- <div>The file will be stored on the host that run the module.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_REST_LOG_FILE</code> will be used instead.</div>
+ <div>This file will be used to record the HTTP REST interactions.</div>
+ <div>The file will be stored on the host that runs the module.</div>
</td>
</tr>
<tr>
@@ -131,10 +131,10 @@ Parameters
<td>
</td>
<td>
+ <div>env:VMWARE_USER</div>
</td>
<td>
<div>The vSphere vCenter username.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_USER</code> will be used instead.</div>
</td>
</tr>
<tr>
@@ -147,16 +147,13 @@ Parameters
</div>
</td>
<td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li><div style="color: blue"><b>yes</b>&nbsp;&larr;</div></li>
- </ul>
+ <b>Default:</b><br/><div style="color: blue">"yes"</div>
</td>
<td>
+ <div>env:VMWARE_VALIDATE_CERTS</div>
</td>
<td>
- <div>Allows connection when SSL certificates are not valid. Set to <code>false</code> when certificates are not trusted.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_VALIDATE_CERTS</code> will be used instead.</div>
+ <div>Allows connection when SSL certificates are not valid. Set to V(false) when certificates are not trusted.</div>
</td>
</tr>
</table>
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.datastore_moid_lookup.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.datastore_moid_lookup.rst
index cdd04ae4b..c390bc466 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.datastore_moid_lookup.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.datastore_moid_lookup.rst
@@ -48,7 +48,7 @@ Parameters
<b>_terms</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
- <span style="color: purple">-</span>
+ <span style="color: purple">string</span>
/ <span style="color: red">required</span>
</div>
</td>
@@ -73,10 +73,10 @@ Parameters
<td>
</td>
<td>
+ <div>env:VMWARE_HOST</div>
</td>
<td>
<div>The hostname or IP address of the vSphere vCenter.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_HOST</code> will be used instead.</div>
</td>
</tr>
<tr>
@@ -92,10 +92,10 @@ Parameters
<td>
</td>
<td>
+ <div>env:VMWARE_PASSWORD</div>
</td>
<td>
<div>The vSphere vCenter password.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_PASSWORD</code> will be used instead.</div>
</td>
</tr>
<tr>
@@ -110,12 +110,12 @@ Parameters
<td>
</td>
<td>
+ <div>env:VMWARE_REST_LOG_FILE</div>
</td>
<td>
<div>You can use this optional parameter to set the location of a log file.</div>
- <div>This file will be used to record the HTTP REST interaction.</div>
- <div>The file will be stored on the host that run the module.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_REST_LOG_FILE</code> will be used instead.</div>
+ <div>This file will be used to record the HTTP REST interactions.</div>
+ <div>The file will be stored on the host that runs the module.</div>
</td>
</tr>
<tr>
@@ -131,10 +131,10 @@ Parameters
<td>
</td>
<td>
+ <div>env:VMWARE_USER</div>
</td>
<td>
<div>The vSphere vCenter username.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_USER</code> will be used instead.</div>
</td>
</tr>
<tr>
@@ -147,16 +147,13 @@ Parameters
</div>
</td>
<td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li><div style="color: blue"><b>yes</b>&nbsp;&larr;</div></li>
- </ul>
+ <b>Default:</b><br/><div style="color: blue">"yes"</div>
</td>
<td>
+ <div>env:VMWARE_VALIDATE_CERTS</div>
</td>
<td>
- <div>Allows connection when SSL certificates are not valid. Set to <code>false</code> when certificates are not trusted.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_VALIDATE_CERTS</code> will be used instead.</div>
+ <div>Allows connection when SSL certificates are not valid. Set to V(false) when certificates are not trusted.</div>
</td>
</tr>
</table>
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.folder_moid_lookup.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.folder_moid_lookup.rst
index 6dbf99e4f..4bafe0066 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.folder_moid_lookup.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.folder_moid_lookup.rst
@@ -48,7 +48,7 @@ Parameters
<b>_terms</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
- <span style="color: purple">-</span>
+ <span style="color: purple">string</span>
/ <span style="color: red">required</span>
</div>
</td>
@@ -73,10 +73,10 @@ Parameters
<td>
</td>
<td>
+ <div>env:VMWARE_HOST</div>
</td>
<td>
<div>The hostname or IP address of the vSphere vCenter.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_HOST</code> will be used instead.</div>
</td>
</tr>
<tr>
@@ -92,10 +92,10 @@ Parameters
<td>
</td>
<td>
+ <div>env:VMWARE_PASSWORD</div>
</td>
<td>
<div>The vSphere vCenter password.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_PASSWORD</code> will be used instead.</div>
</td>
</tr>
<tr>
@@ -110,12 +110,12 @@ Parameters
<td>
</td>
<td>
+ <div>env:VMWARE_REST_LOG_FILE</div>
</td>
<td>
<div>You can use this optional parameter to set the location of a log file.</div>
- <div>This file will be used to record the HTTP REST interaction.</div>
- <div>The file will be stored on the host that run the module.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_REST_LOG_FILE</code> will be used instead.</div>
+ <div>This file will be used to record the HTTP REST interactions.</div>
+ <div>The file will be stored on the host that runs the module.</div>
</td>
</tr>
<tr>
@@ -131,10 +131,10 @@ Parameters
<td>
</td>
<td>
+ <div>env:VMWARE_USER</div>
</td>
<td>
<div>The vSphere vCenter username.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_USER</code> will be used instead.</div>
</td>
</tr>
<tr>
@@ -147,16 +147,13 @@ Parameters
</div>
</td>
<td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li><div style="color: blue"><b>yes</b>&nbsp;&larr;</div></li>
- </ul>
+ <b>Default:</b><br/><div style="color: blue">"yes"</div>
</td>
<td>
+ <div>env:VMWARE_VALIDATE_CERTS</div>
</td>
<td>
- <div>Allows connection when SSL certificates are not valid. Set to <code>false</code> when certificates are not trusted.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_VALIDATE_CERTS</code> will be used instead.</div>
+ <div>Allows connection when SSL certificates are not valid. Set to V(false) when certificates are not trusted.</div>
</td>
</tr>
</table>
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.host_moid_lookup.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.host_moid_lookup.rst
index d95332d1f..9db9d8523 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.host_moid_lookup.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.host_moid_lookup.rst
@@ -48,7 +48,7 @@ Parameters
<b>_terms</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
- <span style="color: purple">-</span>
+ <span style="color: purple">string</span>
/ <span style="color: red">required</span>
</div>
</td>
@@ -73,10 +73,10 @@ Parameters
<td>
</td>
<td>
+ <div>env:VMWARE_HOST</div>
</td>
<td>
<div>The hostname or IP address of the vSphere vCenter.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_HOST</code> will be used instead.</div>
</td>
</tr>
<tr>
@@ -92,10 +92,10 @@ Parameters
<td>
</td>
<td>
+ <div>env:VMWARE_PASSWORD</div>
</td>
<td>
<div>The vSphere vCenter password.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_PASSWORD</code> will be used instead.</div>
</td>
</tr>
<tr>
@@ -110,12 +110,12 @@ Parameters
<td>
</td>
<td>
+ <div>env:VMWARE_REST_LOG_FILE</div>
</td>
<td>
<div>You can use this optional parameter to set the location of a log file.</div>
- <div>This file will be used to record the HTTP REST interaction.</div>
- <div>The file will be stored on the host that run the module.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_REST_LOG_FILE</code> will be used instead.</div>
+ <div>This file will be used to record the HTTP REST interactions.</div>
+ <div>The file will be stored on the host that runs the module.</div>
</td>
</tr>
<tr>
@@ -131,10 +131,10 @@ Parameters
<td>
</td>
<td>
+ <div>env:VMWARE_USER</div>
</td>
<td>
<div>The vSphere vCenter username.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_USER</code> will be used instead.</div>
</td>
</tr>
<tr>
@@ -147,16 +147,13 @@ Parameters
</div>
</td>
<td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li><div style="color: blue"><b>yes</b>&nbsp;&larr;</div></li>
- </ul>
+ <b>Default:</b><br/><div style="color: blue">"yes"</div>
</td>
<td>
+ <div>env:VMWARE_VALIDATE_CERTS</div>
</td>
<td>
- <div>Allows connection when SSL certificates are not valid. Set to <code>false</code> when certificates are not trusted.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_VALIDATE_CERTS</code> will be used instead.</div>
+ <div>Allows connection when SSL certificates are not valid. Set to V(false) when certificates are not trusted.</div>
</td>
</tr>
</table>
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.network_moid_lookup.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.network_moid_lookup.rst
index af0d35175..2e7340705 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.network_moid_lookup.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.network_moid_lookup.rst
@@ -18,6 +18,7 @@ Version added: 2.1.0
Synopsis
--------
- Returns Managed Object Reference (MoID) of the vSphere network object contained in the specified path.
+- This lookup cannot distinguish between multiple networks with the same name defined in multiple switches as that is not supported by the vSphere REST API; network names must be unique within a given datacenter/folder path.
@@ -48,7 +49,7 @@ Parameters
<b>_terms</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
- <span style="color: purple">-</span>
+ <span style="color: purple">string</span>
/ <span style="color: red">required</span>
</div>
</td>
@@ -73,10 +74,10 @@ Parameters
<td>
</td>
<td>
+ <div>env:VMWARE_HOST</div>
</td>
<td>
<div>The hostname or IP address of the vSphere vCenter.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_HOST</code> will be used instead.</div>
</td>
</tr>
<tr>
@@ -92,10 +93,10 @@ Parameters
<td>
</td>
<td>
+ <div>env:VMWARE_PASSWORD</div>
</td>
<td>
<div>The vSphere vCenter password.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_PASSWORD</code> will be used instead.</div>
</td>
</tr>
<tr>
@@ -110,12 +111,12 @@ Parameters
<td>
</td>
<td>
+ <div>env:VMWARE_REST_LOG_FILE</div>
</td>
<td>
<div>You can use this optional parameter to set the location of a log file.</div>
- <div>This file will be used to record the HTTP REST interaction.</div>
- <div>The file will be stored on the host that run the module.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_REST_LOG_FILE</code> will be used instead.</div>
+ <div>This file will be used to record the HTTP REST interactions.</div>
+ <div>The file will be stored on the host that runs the module.</div>
</td>
</tr>
<tr>
@@ -131,10 +132,10 @@ Parameters
<td>
</td>
<td>
+ <div>env:VMWARE_USER</div>
</td>
<td>
<div>The vSphere vCenter username.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_USER</code> will be used instead.</div>
</td>
</tr>
<tr>
@@ -147,16 +148,13 @@ Parameters
</div>
</td>
<td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li><div style="color: blue"><b>yes</b>&nbsp;&larr;</div></li>
- </ul>
+ <b>Default:</b><br/><div style="color: blue">"yes"</div>
</td>
<td>
+ <div>env:VMWARE_VALIDATE_CERTS</div>
</td>
<td>
- <div>Allows connection when SSL certificates are not valid. Set to <code>false</code> when certificates are not trusted.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_VALIDATE_CERTS</code> will be used instead.</div>
+ <div>Allows connection when SSL certificates are not valid. Set to V(false) when certificates are not trusted.</div>
</td>
</tr>
</table>
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.resource_pool_moid_lookup.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.resource_pool_moid_lookup.rst
index 006edcd9d..6267c69ad 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.resource_pool_moid_lookup.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.resource_pool_moid_lookup.rst
@@ -48,7 +48,7 @@ Parameters
<b>_terms</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
- <span style="color: purple">-</span>
+ <span style="color: purple">string</span>
/ <span style="color: red">required</span>
</div>
</td>
@@ -73,10 +73,10 @@ Parameters
<td>
</td>
<td>
+ <div>env:VMWARE_HOST</div>
</td>
<td>
<div>The hostname or IP address of the vSphere vCenter.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_HOST</code> will be used instead.</div>
</td>
</tr>
<tr>
@@ -92,10 +92,10 @@ Parameters
<td>
</td>
<td>
+ <div>env:VMWARE_PASSWORD</div>
</td>
<td>
<div>The vSphere vCenter password.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_PASSWORD</code> will be used instead.</div>
</td>
</tr>
<tr>
@@ -110,12 +110,12 @@ Parameters
<td>
</td>
<td>
+ <div>env:VMWARE_REST_LOG_FILE</div>
</td>
<td>
<div>You can use this optional parameter to set the location of a log file.</div>
- <div>This file will be used to record the HTTP REST interaction.</div>
- <div>The file will be stored on the host that run the module.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_REST_LOG_FILE</code> will be used instead.</div>
+ <div>This file will be used to record the HTTP REST interactions.</div>
+ <div>The file will be stored on the host that runs the module.</div>
</td>
</tr>
<tr>
@@ -131,10 +131,10 @@ Parameters
<td>
</td>
<td>
+ <div>env:VMWARE_USER</div>
</td>
<td>
<div>The vSphere vCenter username.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_USER</code> will be used instead.</div>
</td>
</tr>
<tr>
@@ -147,16 +147,13 @@ Parameters
</div>
</td>
<td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li><div style="color: blue"><b>yes</b>&nbsp;&larr;</div></li>
- </ul>
+ <b>Default:</b><br/><div style="color: blue">"yes"</div>
</td>
<td>
+ <div>env:VMWARE_VALIDATE_CERTS</div>
</td>
<td>
- <div>Allows connection when SSL certificates are not valid. Set to <code>false</code> when certificates are not trusted.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_VALIDATE_CERTS</code> will be used instead.</div>
+ <div>Allows connection when SSL certificates are not valid. Set to V(false) when certificates are not trusted.</div>
</td>
</tr>
</table>
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_cluster_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_cluster_info_module.rst
index b1e012370..879f9b5e6 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_cluster_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_cluster_info_module.rst
@@ -5,7 +5,7 @@
vmware.vmware_rest.vcenter_cluster_info
***************************************
-**Retrieves information about the cluster corresponding to {@param.name cluster}.**
+**Retrieves information about the cluster corresponding to cluster.**
Version added: 0.1.0
@@ -17,7 +17,7 @@ Version added: 0.1.0
Synopsis
--------
-- Retrieves information about the cluster corresponding to {@param.name cluster}.
+- Retrieves information about the cluster corresponding to cluster.
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -53,7 +53,8 @@ Parameters
<td>
</td>
<td>
- <div>Identifier of the cluster. Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>Identifier of the cluster.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_cluster_info</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -70,6 +71,8 @@ Parameters
</td>
<td>
<div>Identifiers of clusters that can match the filter.</div>
+ <div>If unset or empty, clusters with any identifier match the filter.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_cluster_info</span>.</div>
</td>
</tr>
<tr>
@@ -86,6 +89,8 @@ Parameters
</td>
<td>
<div>Datacenters that must contain the cluster for the cluster to match the filter.</div>
+ <div>If unset or empty, clusters in any datacenter match the filter.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_datacenter_info</span>.</div>
<div style="font-size: small; color: darkgreen"><br/>aliases: filter_datacenters</div>
</td>
</tr>
@@ -103,6 +108,8 @@ Parameters
</td>
<td>
<div>Folders that must contain the cluster for the cluster to match the filter.</div>
+ <div>If unset or empty, clusters in any folder match the filter.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_folder_info</span>.</div>
<div style="font-size: small; color: darkgreen"><br/>aliases: filter_folders</div>
</td>
</tr>
@@ -119,7 +126,8 @@ Parameters
<td>
</td>
<td>
- <div>Names that clusters must have to match the filter (see {@link Info#name}).</div>
+ <div>Names that clusters must have to match the filter (see <em>name</em>).</div>
+ <div>If unset or empty, clusters with any name match the filter.</div>
<div style="font-size: small; color: darkgreen"><br/>aliases: filter_names</div>
</td>
</tr>
@@ -239,7 +247,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_datacenter_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_datacenter_info_module.rst
index 65fcd317b..fc896abe1 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_datacenter_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_datacenter_info_module.rst
@@ -5,7 +5,7 @@
vmware.vmware_rest.vcenter_datacenter_info
******************************************
-**Retrieves information about the datacenter corresponding to {@param.name datacenter}.**
+**Retrieves information about the datacenter corresponding to datacenter.**
Version added: 0.1.0
@@ -17,7 +17,7 @@ Version added: 0.1.0
Synopsis
--------
-- Retrieves information about the datacenter corresponding to {@param.name datacenter}.
+- Retrieves information about the datacenter corresponding to datacenter.
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -53,7 +53,8 @@ Parameters
<td>
</td>
<td>
- <div>Identifier of the datacenter. Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>Identifier of the datacenter.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_datacenter_info</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -70,6 +71,8 @@ Parameters
</td>
<td>
<div>Identifiers of datacenters that can match the filter.</div>
+ <div>If unset or empty, datacenters with any identifier match the filter.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_datacenter_info</span>.</div>
<div style="font-size: small; color: darkgreen"><br/>aliases: filter_datacenters</div>
</td>
</tr>
@@ -87,6 +90,8 @@ Parameters
</td>
<td>
<div>Folders that must contain the datacenters for the datacenter to match the filter.</div>
+ <div>If unset or empty, datacenters in any folder match the filter.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_folder_info</span>.</div>
<div style="font-size: small; color: darkgreen"><br/>aliases: filter_folders</div>
</td>
</tr>
@@ -103,7 +108,8 @@ Parameters
<td>
</td>
<td>
- <div>Names that datacenters must have to match the filter (see {@link Info#name}).</div>
+ <div>Names that datacenters must have to match the filter (see <em>name</em>).</div>
+ <div>If unset or empty, datacenters with any name match the filter.</div>
<div style="font-size: small; color: darkgreen"><br/>aliases: filter_names</div>
</td>
</tr>
@@ -223,7 +229,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_datacenter_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_datacenter_module.rst
index db29e2eb3..68c9d7bac 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_datacenter_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_datacenter_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -53,7 +53,8 @@ Parameters
<td>
</td>
<td>
- <div>Identifier of the datacenter to be deleted. Required with <em>state=[&#x27;absent&#x27;]</em></div>
+ <div>Identifier of the datacenter to be deleted.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_datacenter_info</span>. Required with <em>state=[&#x27;absent&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -69,6 +70,8 @@ Parameters
</td>
<td>
<div>Datacenter folder in which the new datacenter should be created.</div>
+ <div>This field is currently required. In the future, if this field is unset, the system will attempt to choose a suitable folder for the datacenter; if a folder cannot be chosen, the datacenter creation operation will fail.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_folder_info</span>.</div>
</td>
</tr>
<tr>
@@ -88,6 +91,7 @@ Parameters
</td>
<td>
<div>If true, delete the datacenter even if it is not empty.</div>
+ <div>If unset a ResourceInUse error will be reported if the datacenter is not empty. This is the equivalent of passing the value false.</div>
</td>
</tr>
<tr>
@@ -239,7 +243,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
@@ -251,7 +255,6 @@ Examples
- name: Get a list of all the datacenters
register: existing_datacenters
vmware.vmware_rest.vcenter_datacenter_info:
-
- name: Force delete the existing DC
vmware.vmware_rest.vcenter_datacenter:
state: absent
@@ -261,7 +264,6 @@ Examples
until:
- _result is not failed
retries: 7
-
- name: Create datacenter my_dc
vmware.vmware_rest.vcenter_datacenter:
name: my_dc
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_datastore_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_datastore_info_module.rst
index bdc4e6b98..4fa040e6c 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_datastore_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_datastore_info_module.rst
@@ -5,7 +5,7 @@
vmware.vmware_rest.vcenter_datastore_info
*****************************************
-**Retrieves information about the datastore indicated by {@param.name datastore}.**
+**Retrieves information about the datastore indicated by datastore.**
Version added: 0.1.0
@@ -17,7 +17,7 @@ Version added: 0.1.0
Synopsis
--------
-- Retrieves information about the datastore indicated by {@param.name datastore}.
+- Retrieves information about the datastore indicated by datastore.
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -55,6 +55,8 @@ Parameters
</td>
<td>
<div>Datacenters that must contain the datastore for the datastore to match the filter.</div>
+ <div>If unset or empty, datastores in any datacenter match the filter.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_datacenter_info</span>.</div>
<div style="font-size: small; color: darkgreen"><br/>aliases: filter_datacenters</div>
</td>
</tr>
@@ -70,7 +72,8 @@ Parameters
<td>
</td>
<td>
- <div>Identifier of the datastore for which information should be retrieved. Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>Identifier of the datastore for which information should be retrieved.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_datastore_info</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -87,6 +90,8 @@ Parameters
</td>
<td>
<div>Identifiers of datastores that can match the filter.</div>
+ <div>If unset or empty, datastores with any identifier match the filter.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_datastore_info</span>.</div>
</td>
</tr>
<tr>
@@ -103,6 +108,8 @@ Parameters
</td>
<td>
<div>Folders that must contain the datastore for the datastore to match the filter.</div>
+ <div>If unset or empty, datastores in any folder match the filter.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_folder_info</span>.</div>
<div style="font-size: small; color: darkgreen"><br/>aliases: filter_folders</div>
</td>
</tr>
@@ -119,7 +126,8 @@ Parameters
<td>
</td>
<td>
- <div>Names that datastores must have to match the filter (see {@link Info#name}).</div>
+ <div>Names that datastores must have to match the filter (see <em>name</em>).</div>
+ <div>If unset or empty, datastores with any name match the filter.</div>
<div style="font-size: small; color: darkgreen"><br/>aliases: filter_names</div>
</td>
</tr>
@@ -154,7 +162,8 @@ Parameters
<td>
</td>
<td>
- <div>Types that datastores must have to match the filter (see {@link Summary#type}).</div>
+ <div>Types that datastores must have to match the filter (see <em>type</em>).</div>
+ <div>If unset or empty, datastores with any type match the filter.</div>
<div style="font-size: small; color: darkgreen"><br/>aliases: filter_types</div>
</td>
</tr>
@@ -256,7 +265,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_folder_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_folder_info_module.rst
index 6c5612e06..99bcff22a 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_folder_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_folder_info_module.rst
@@ -5,7 +5,7 @@
vmware.vmware_rest.vcenter_folder_info
**************************************
-**Returns information about at most 1000 visible (subject to permission checks) folders in vCenter matching the {@link FilterSpec}.**
+**Returns information about at most 1000 visible (subject to permission checks) folders in vCenter matching the Folder.FilterSpec.**
Version added: 0.1.0
@@ -17,7 +17,7 @@ Version added: 0.1.0
Synopsis
--------
-- Returns information about at most 1000 visible (subject to permission checks) folders in vCenter matching the {@link FilterSpec}.
+- Returns information about at most 1000 visible (subject to permission checks) folders in vCenter matching the Folder.FilterSpec.
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -55,6 +55,8 @@ Parameters
</td>
<td>
<div>Datacenters that must contain the folder for the folder to match the filter.</div>
+ <div>If unset or empty, folder in any datacenter match the filter.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_datacenter_info</span>.</div>
<div style="font-size: small; color: darkgreen"><br/>aliases: filter_datacenters</div>
</td>
</tr>
@@ -72,6 +74,8 @@ Parameters
</td>
<td>
<div>Identifiers of folders that can match the filter.</div>
+ <div>If unset or empty, folders with any identifier match the filter.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_folder_info</span>.</div>
<div style="font-size: small; color: darkgreen"><br/>aliases: filter_folders</div>
</td>
</tr>
@@ -88,7 +92,8 @@ Parameters
<td>
</td>
<td>
- <div>Names that folders must have to match the filter (see {@link Summary#name}).</div>
+ <div>Names that folders must have to match the filter (see <em>name</em>).</div>
+ <div>If unset or empty, folders with any name match the filter.</div>
<div style="font-size: small; color: darkgreen"><br/>aliases: filter_names</div>
</td>
</tr>
@@ -106,6 +111,8 @@ Parameters
</td>
<td>
<div>Folders that must contain the folder for the folder to match the filter.</div>
+ <div>If unset or empty, folder in any folder match the filter.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_folder_info</span>.</div>
</td>
</tr>
<tr>
@@ -145,7 +152,7 @@ Parameters
</ul>
</td>
<td>
- <div>The <code>type</code> defines the type of a vCenter Server folder. The type of a folder determines what what kinds of children can be contained in the folder.</div>
+ <div>The <em>type</em> enumerated type defines the type of a vCenter Server folder. The type of a folder determines what what kinds of children can be contained in the folder.</div>
<div style="font-size: small; color: darkgreen"><br/>aliases: filter_type</div>
</td>
</tr>
@@ -247,7 +254,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_host_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_host_info_module.rst
index 6e4e11b30..cf4a17c78 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_host_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_host_info_module.rst
@@ -5,7 +5,7 @@
vmware.vmware_rest.vcenter_host_info
************************************
-**Returns information about at most 2500 visible (subject to permission checks) hosts in vCenter matching the {@link FilterSpec}.**
+**Returns information about at most 2500 visible (subject to permission checks) hosts in vCenter matching the Host.FilterSpec.**
Version added: 0.1.0
@@ -17,7 +17,7 @@ Version added: 0.1.0
Synopsis
--------
-- Returns information about at most 2500 visible (subject to permission checks) hosts in vCenter matching the {@link FilterSpec}.
+- Returns information about at most 2500 visible (subject to permission checks) hosts in vCenter matching the Host.FilterSpec.
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -55,6 +55,8 @@ Parameters
</td>
<td>
<div>Clusters that must contain the hosts for the hosts to match the filter.</div>
+ <div>If unset or empty, hosts in any cluster and hosts that are not in a cluster match the filter. If this field is not empty and <em>standalone</em> is true, no hosts will match the filter.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_cluster_info</span>.</div>
</td>
</tr>
<tr>
@@ -70,7 +72,8 @@ Parameters
<td>
</td>
<td>
- <div>Connection states that a host must be in to match the filter (see {@link Summary#connectionState}.</div>
+ <div>Connection states that a host must be in to match the filter (see I()</div>
+ <div>If unset or empty, hosts in any connection state match the filter.</div>
</td>
</tr>
<tr>
@@ -87,6 +90,8 @@ Parameters
</td>
<td>
<div>Datacenters that must contain the hosts for the hosts to match the filter.</div>
+ <div>If unset or empty, hosts in any datacenter match the filter.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_datacenter_info</span>.</div>
<div style="font-size: small; color: darkgreen"><br/>aliases: filter_datacenters</div>
</td>
</tr>
@@ -104,6 +109,8 @@ Parameters
</td>
<td>
<div>Folders that must contain the hosts for the hosts to match the filter.</div>
+ <div>If unset or empty, hosts in any folder match the filter.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_folder_info</span>.</div>
<div style="font-size: small; color: darkgreen"><br/>aliases: filter_folders</div>
</td>
</tr>
@@ -121,6 +128,8 @@ Parameters
</td>
<td>
<div>Identifiers of hosts that can match the filter.</div>
+ <div>If unset or empty, hosts with any identifier match the filter.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_host_info</span>.</div>
</td>
</tr>
<tr>
@@ -136,7 +145,8 @@ Parameters
<td>
</td>
<td>
- <div>Names that hosts must have to match the filter (see {@link Summary#name}).</div>
+ <div>Names that hosts must have to match the filter (see <em>name</em>).</div>
+ <div>If unset or empty, hosts with any name match the filter.</div>
<div style="font-size: small; color: darkgreen"><br/>aliases: filter_names</div>
</td>
</tr>
@@ -175,6 +185,7 @@ Parameters
</td>
<td>
<div>If true, only hosts that are not part of a cluster can match the filter, and if false, only hosts that are are part of a cluster can match the filter.</div>
+ <div>If unset Hosts can match filter independent of whether they are part of a cluster or not. If this field is true and <em>clusters</em> os not empty, no hosts will match the filter.</div>
</td>
</tr>
<tr>
@@ -275,7 +286,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_host_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_host_module.rst
index 362cc5a84..e03c304aa 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_host_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_host_module.rst
@@ -17,7 +17,7 @@ Version added: 0.1.0
Synopsis
--------
-- Add a new standalone host in the vCenter inventory. The newly connected host will be in connected state. The vCenter Server will verify the SSL certificate before adding the host to its inventory. In the case where the SSL certificate cannot be verified because the Certificate Authority is not recognized or the certificate is self signed, the vCenter Server will fall back to thumbprint verification mode as defined by {@link CreateSpec.ThumbprintVerification}.
+- Add a new standalone host in the vCenter inventory. The newly connected host will be in connected state. The vCenter Server will verify the SSL certificate before adding the host to its inventory. In the case where the SSL certificate cannot be verified because the Certificate Authority is not recognized or the certificate is self signed, the vCenter Server will fall back to thumbprint verification mode as defined by Host.CreateSpec.ThumbprintVerification.
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -54,6 +54,8 @@ Parameters
</td>
<td>
<div>Host and cluster folder in which the new standalone host should be created.</div>
+ <div>This field is currently required. In the future, if this field is unset, the system will attempt to choose a suitable folder for the host; if a folder cannot be chosen, the host creation operation will fail.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_folder_info</span>.</div>
</td>
</tr>
<tr>
@@ -73,6 +75,7 @@ Parameters
</td>
<td>
<div>Whether host should be added to the vCenter Server even if it is being managed by another vCenter Server. The original vCenterServer loses connection to the host.</div>
+ <div>If unset, forceAdd is default to false.</div>
</td>
</tr>
<tr>
@@ -87,7 +90,8 @@ Parameters
<td>
</td>
<td>
- <div>Identifier of the host to be disconnected. Required with <em>state=[&#x27;absent&#x27;, &#x27;connect&#x27;, &#x27;disconnect&#x27;]</em></div>
+ <div>Identifier of the host to be disconnected.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_host_info</span>. Required with <em>state=[&#x27;absent&#x27;, &#x27;connect&#x27;, &#x27;disconnect&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -133,6 +137,7 @@ Parameters
</td>
<td>
<div>The port of the host.</div>
+ <div>If unset, port 443 will be used.</div>
</td>
</tr>
<tr>
@@ -186,6 +191,7 @@ Parameters
</td>
<td>
<div>The thumbprint of the SSL certificate, which the host is expected to have. The thumbprint is always computed using the SHA1 hash and is the string representation of that hash in the format: xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx where, &#x27;x&#x27; represents a hexadecimal digit.</div>
+ <div>This field is optional and it is only relevant when the value of <em>thumbprint_verification</em> is THUMBPRINT.</div>
</td>
</tr>
<tr>
@@ -204,7 +210,7 @@ Parameters
</ul>
</td>
<td>
- <div>The <code>thumbprint_verification</code> defines the thumbprint verification schemes for a host&#x27;s SSL certificate. Required with <em>state=[&#x27;present&#x27;]</em></div>
+ <div>The <em>thumbprint_verification</em> enumerated type defines the thumbprint verification schemes for a host&#x27;s SSL certificate. Required with <em>state=[&#x27;present&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -320,7 +326,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_network_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_network_info_module.rst
index 7c822fef3..edf435da0 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_network_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_network_info_module.rst
@@ -5,7 +5,7 @@
vmware.vmware_rest.vcenter_network_info
***************************************
-**Returns information about at most 1000 visible (subject to permission checks) networks in vCenter matching the {@link FilterSpec}.**
+**Returns information about at most 1000 visible (subject to permission checks) networks in vCenter matching the Network.FilterSpec.**
Version added: 0.1.0
@@ -17,7 +17,7 @@ Version added: 0.1.0
Synopsis
--------
-- Returns information about at most 1000 visible (subject to permission checks) networks in vCenter matching the {@link FilterSpec}.
+- Returns information about at most 1000 visible (subject to permission checks) networks in vCenter matching the Network.FilterSpec.
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -55,6 +55,8 @@ Parameters
</td>
<td>
<div>Datacenters that must contain the network for the network to match the filter.</div>
+ <div>If unset or empty, networks in any datacenter match the filter.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_datacenter_info</span>.</div>
<div style="font-size: small; color: darkgreen"><br/>aliases: filter_datacenters</div>
</td>
</tr>
@@ -72,6 +74,8 @@ Parameters
</td>
<td>
<div>Folders that must contain the network for the network to match the filter.</div>
+ <div>If unset or empty, networks in any folder match the filter.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_folder_info</span>.</div>
<div style="font-size: small; color: darkgreen"><br/>aliases: filter_folders</div>
</td>
</tr>
@@ -88,7 +92,8 @@ Parameters
<td>
</td>
<td>
- <div>Names that networks must have to match the filter (see {@link Summary#name}).</div>
+ <div>Names that networks must have to match the filter (see <em>name</em>).</div>
+ <div>If unset or empty, networks with any name match the filter.</div>
<div style="font-size: small; color: darkgreen"><br/>aliases: filter_names</div>
</td>
</tr>
@@ -106,6 +111,8 @@ Parameters
</td>
<td>
<div>Identifiers of networks that can match the filter.</div>
+ <div>If unset or empty, networks with any identifier match the filter.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_network_info</span>.</div>
</td>
</tr>
<tr>
@@ -139,7 +146,8 @@ Parameters
<td>
</td>
<td>
- <div>Types that networks must have to match the filter (see {@link Summary#type}).</div>
+ <div>Types that networks must have to match the filter (see <em>type</em>).</div>
+ <div>If unset, networks with any type match the filter.</div>
<div style="font-size: small; color: darkgreen"><br/>aliases: filter_types</div>
</td>
</tr>
@@ -241,7 +249,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_ovf_libraryitem_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_ovf_libraryitem_module.rst
index bf991390a..76f36b677 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_ovf_libraryitem_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_ovf_libraryitem_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -300,7 +300,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_resourcepool_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_resourcepool_info_module.rst
index 0e836a88b..c2a833d59 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_resourcepool_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_resourcepool_info_module.rst
@@ -5,7 +5,7 @@
vmware.vmware_rest.vcenter_resourcepool_info
********************************************
-**Retrieves information about the resource pool indicated by {@param.name resourcePool}.**
+**Retrieves information about the resource pool indicated by resourcePool.**
Version added: 0.3.0
@@ -17,7 +17,7 @@ Version added: 0.3.0
Synopsis
--------
-- Retrieves information about the resource pool indicated by {@param.name resourcePool}.
+- Retrieves information about the resource pool indicated by resourcePool.
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -55,6 +55,8 @@ Parameters
</td>
<td>
<div>Clusters that must contain the resource pool for the resource pool to match the filter.</div>
+ <div>If unset or empty, resource pools in any cluster match the filter.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_cluster_info</span>.</div>
</td>
</tr>
<tr>
@@ -71,6 +73,8 @@ Parameters
</td>
<td>
<div>Datacenters that must contain the resource pool for the resource pool to match the filter.</div>
+ <div>If unset or empty, resource pools in any datacenter match the filter.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_datacenter_info</span>.</div>
<div style="font-size: small; color: darkgreen"><br/>aliases: filter_datacenters</div>
</td>
</tr>
@@ -88,6 +92,8 @@ Parameters
</td>
<td>
<div>Hosts that must contain the resource pool for the resource pool to match the filter.</div>
+ <div>If unset or empty, resource pools in any host match the filter.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_host_info</span>.</div>
</td>
</tr>
<tr>
@@ -103,7 +109,8 @@ Parameters
<td>
</td>
<td>
- <div>Names that resource pools must have to match the filter (see {@link Info#name}).</div>
+ <div>Names that resource pools must have to match the filter (see <em>name</em>).</div>
+ <div>If unset or empty, resource pools with any name match the filter.</div>
<div style="font-size: small; color: darkgreen"><br/>aliases: filter_names</div>
</td>
</tr>
@@ -121,6 +128,8 @@ Parameters
</td>
<td>
<div>Resource pools that must contain the resource pool for the resource pool to match the filter.</div>
+ <div>If unset or empty, resource pools in any resource pool match the filter.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_resourcepool_info</span>.</div>
</td>
</tr>
<tr>
@@ -135,7 +144,8 @@ Parameters
<td>
</td>
<td>
- <div>Identifier of the resource pool for which information should be retrieved. Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>Identifier of the resource pool for which information should be retrieved.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_resourcepool_info</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -152,6 +162,8 @@ Parameters
</td>
<td>
<div>Identifiers of resource pools that can match the filter.</div>
+ <div>If unset or empty, resource pools with any identifier match the filter.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_resourcepool_info</span>.</div>
</td>
</tr>
<tr>
@@ -270,7 +282,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
@@ -282,18 +294,15 @@ Examples
- name: Get the existing resource pools
vmware.vmware_rest.vcenter_resourcepool_info:
register: resource_pools
-
- name: Get the existing resource pool
vmware.vmware_rest.vcenter_resourcepool_info:
resource_pool: '{{ resource_pools.value[0].resource_pool }}'
register: my_resource_pool
-
- name: Create a generic resource pool
vmware.vmware_rest.vcenter_resourcepool:
name: my_resource_pool
parent: '{{ resource_pools.value[0].resource_pool }}'
register: my_resource_pool
-
- name: Read details from a specific resource pool
vmware.vmware_rest.vcenter_resourcepool_info:
resource_pool: '{{ my_resource_pool.id }}'
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_resourcepool_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_resourcepool_module.rst
index aee7c5235..6383e31ee 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_resourcepool_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_resourcepool_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -54,19 +54,26 @@ Parameters
</td>
<td>
<div>Resource allocation for CPU.</div>
+ <div>if unset or empty, the CPU allocation of the resource pool will not be changed.</div>
<div>Valid attributes are:</div>
- <div>- <code>reservation</code> (int): Amount of resource that is guaranteed available to a resource pool. Reserved resources are not wasted if they are not used. If the utilization is less than the reservation, the resources can be utilized by other running virtual machines. Units are MB fo memory, and MHz for CPU. ([&#x27;present&#x27;])</div>
- <div>- <code>expandable_reservation</code> (bool): In a resource pool with an expandable reservation, the reservation can grow beyond the specified value, if the parent resource pool has unreserved resources. A non-expandable reservation is called a fixed reservation. ([&#x27;present&#x27;])</div>
- <div>- <code>limit</code> (int): The utilization of a resource pool will not exceed this limit, even if there are available resources. This is typically used to ensure a consistent performance of resource pools independent of available resources. If set to -1, then there is no fixed limit on resource usage (only bounded by available resources and shares). Units are MB for memory, and MHz for CPU. ([&#x27;present&#x27;])</div>
+ <div>- <code>reservation</code> (int): Amount of resource that is guaranteed available to a resource pool. Reserved resources are not wasted if they are not used. If the utilization is less than the reservation, the resources can be utilized by other running virtual machines. Units are MB fo memory, and MHz for CPU.</div>
+ <div>If unset or empty, <em>reservation</em> will be set to 0. ([&#x27;present&#x27;])</div>
+ <div>- <code>expandable_reservation</code> (bool): In a resource pool with an expandable reservation, the reservation can grow beyond the specified value, if the parent resource pool has unreserved resources. A non-expandable reservation is called a fixed reservation.</div>
+ <div>If unset or empty, <em>expandable_reservation</em> will be set to true. ([&#x27;present&#x27;])</div>
+ <div>- <code>limit</code> (int): The utilization of a resource pool will not exceed this limit, even if there are available resources. This is typically used to ensure a consistent performance of resource pools independent of available resources. If set to -1, then there is no fixed limit on resource usage (only bounded by available resources and shares). Units are MB for memory, and MHz for CPU.</div>
+ <div>If unset or empty, <em>limit</em> will be set to -1. ([&#x27;present&#x27;])</div>
<div>- <code>shares</code> (dict): Shares are used in case of resource contention. ([&#x27;present&#x27;])</div>
<div>- Accepted keys:</div>
- <div>- level (string): The <code>level</code> defines the possible values for the allocation level.</div>
+ <div>- level (string): This option defines the possible values for the allocation level.</div>
<div>Accepted value for this field:</div>
<div>- <code>CUSTOM</code></div>
<div>- <code>HIGH</code></div>
<div>- <code>LOW</code></div>
<div>- <code>NORMAL</code></div>
- <div>- shares (integer): When {@link #level} is set to CUSTOM, it is the number of shares allocated. Otherwise, this value is ignored. There is no unit for this value. It is a relative measure based on the settings for other resource pools.</div>
+ <div>- shares (integer): When <em>level</em> is set to CUSTOM, it is the number of shares allocated. Otherwise, this value is ignored.</div>
+ <div>There is no unit for this value. It is a relative measure based on the settings for other resource pools.</div>
+ <div></div>
+ <div>This field is optional and it is only relevant when the value of <em>level</em> is CUSTOM.</div>
</td>
</tr>
<tr>
@@ -82,19 +89,26 @@ Parameters
</td>
<td>
<div>Resource allocation for CPU.</div>
+ <div>if unset or empty, the CPU allocation of the resource pool will not be changed.</div>
<div>Valid attributes are:</div>
- <div>- <code>reservation</code> (int): Amount of resource that is guaranteed available to a resource pool. Reserved resources are not wasted if they are not used. If the utilization is less than the reservation, the resources can be utilized by other running virtual machines. Units are MB fo memory, and MHz for CPU. ([&#x27;present&#x27;])</div>
- <div>- <code>expandable_reservation</code> (bool): In a resource pool with an expandable reservation, the reservation can grow beyond the specified value, if the parent resource pool has unreserved resources. A non-expandable reservation is called a fixed reservation. ([&#x27;present&#x27;])</div>
- <div>- <code>limit</code> (int): The utilization of a resource pool will not exceed this limit, even if there are available resources. This is typically used to ensure a consistent performance of resource pools independent of available resources. If set to -1, then there is no fixed limit on resource usage (only bounded by available resources and shares). Units are MB for memory, and MHz for CPU. ([&#x27;present&#x27;])</div>
+ <div>- <code>reservation</code> (int): Amount of resource that is guaranteed available to a resource pool. Reserved resources are not wasted if they are not used. If the utilization is less than the reservation, the resources can be utilized by other running virtual machines. Units are MB fo memory, and MHz for CPU.</div>
+ <div>If unset or empty, <em>reservation</em> will be set to 0. ([&#x27;present&#x27;])</div>
+ <div>- <code>expandable_reservation</code> (bool): In a resource pool with an expandable reservation, the reservation can grow beyond the specified value, if the parent resource pool has unreserved resources. A non-expandable reservation is called a fixed reservation.</div>
+ <div>If unset or empty, <em>expandable_reservation</em> will be set to true. ([&#x27;present&#x27;])</div>
+ <div>- <code>limit</code> (int): The utilization of a resource pool will not exceed this limit, even if there are available resources. This is typically used to ensure a consistent performance of resource pools independent of available resources. If set to -1, then there is no fixed limit on resource usage (only bounded by available resources and shares). Units are MB for memory, and MHz for CPU.</div>
+ <div>If unset or empty, <em>limit</em> will be set to -1. ([&#x27;present&#x27;])</div>
<div>- <code>shares</code> (dict): Shares are used in case of resource contention. ([&#x27;present&#x27;])</div>
<div>- Accepted keys:</div>
- <div>- level (string): The <code>level</code> defines the possible values for the allocation level.</div>
+ <div>- level (string): This option defines the possible values for the allocation level.</div>
<div>Accepted value for this field:</div>
<div>- <code>CUSTOM</code></div>
<div>- <code>HIGH</code></div>
<div>- <code>LOW</code></div>
<div>- <code>NORMAL</code></div>
- <div>- shares (integer): When {@link #level} is set to CUSTOM, it is the number of shares allocated. Otherwise, this value is ignored. There is no unit for this value. It is a relative measure based on the settings for other resource pools.</div>
+ <div>- shares (integer): When <em>level</em> is set to CUSTOM, it is the number of shares allocated. Otherwise, this value is ignored.</div>
+ <div>There is no unit for this value. It is a relative measure based on the settings for other resource pools.</div>
+ <div></div>
+ <div>This field is optional and it is only relevant when the value of <em>level</em> is CUSTOM.</div>
</td>
</tr>
<tr>
@@ -109,7 +123,8 @@ Parameters
<td>
</td>
<td>
- <div>Name of the resource pool. Required with <em>state=[&#x27;present&#x27;]</em></div>
+ <div>Name of the resource pool.</div>
+ <div>if unset or empty, the name of the resource pool will not be changed. Required with <em>state=[&#x27;present&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -124,7 +139,8 @@ Parameters
<td>
</td>
<td>
- <div>Parent of the created resource pool. Required with <em>state=[&#x27;present&#x27;]</em></div>
+ <div>Parent of the created resource pool.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_resourcepool_info</span>. Required with <em>state=[&#x27;present&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -139,7 +155,8 @@ Parameters
<td>
</td>
<td>
- <div>Identifier of the resource pool to be deleted. Required with <em>state=[&#x27;absent&#x27;, &#x27;present&#x27;]</em></div>
+ <div>Identifier of the resource pool to be deleted.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_resourcepool_info</span>. Required with <em>state=[&#x27;absent&#x27;, &#x27;present&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -276,7 +293,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
@@ -288,50 +305,46 @@ Examples
- name: Get the existing resource pools
vmware.vmware_rest.vcenter_resourcepool_info:
register: resource_pools
-
- name: Create an Ad hoc resource pool
vmware.vmware_rest.vcenter_resourcepool:
name: my_resource_pool
parent: '{{ resource_pools.value[0].resource_pool }}'
cpu_allocation:
- expandable_reservation: true
- limit: 40
- reservation: 0
- shares:
+ expandable_reservation: true
+ limit: 40
+ reservation: 0
+ shares:
level: NORMAL
memory_allocation:
- expandable_reservation: false
- limit: 2000
- reservation: 0
- shares:
+ expandable_reservation: false
+ limit: 2000
+ reservation: 0
+ shares:
level: NORMAL
register: my_resource_pool
-
- name: Remove a resource pool
vmware.vmware_rest.vcenter_resourcepool:
resource_pool: '{{ my_resource_pool.id }}'
state: absent
-
- name: Create a generic resource pool
vmware.vmware_rest.vcenter_resourcepool:
name: my_resource_pool
parent: '{{ resource_pools.value[0].resource_pool }}'
register: my_resource_pool
-
- name: Modify a resource pool
vmware.vmware_rest.vcenter_resourcepool:
resource_pool: '{{ my_resource_pool.id }}'
cpu_allocation:
- expandable_reservation: true
- limit: -1
- reservation: 0
- shares:
+ expandable_reservation: true
+ limit: -1
+ reservation: 0
+ shares:
level: NORMAL
memory_allocation:
- expandable_reservation: false
- limit: 1000
- reservation: 0
- shares:
+ expandable_reservation: false
+ limit: 1000
+ reservation: 0
+ shares:
level: NORMAL
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_storage_policies_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_storage_policies_info_module.rst
index ff58ffb3b..59c953224 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_storage_policies_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_storage_policies_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -55,6 +55,8 @@ Parameters
</td>
<td>
<div>Identifiers of storage policies that can match the filter.</div>
+ <div>If unset or empty, storage policies with any identifiers match the filter.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_storage_policies</span>.</div>
</td>
</tr>
<tr>
@@ -173,7 +175,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_customization_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_customization_module.rst
index 1305070a2..65b62d24d 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_customization_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_customization_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -56,21 +56,52 @@ Parameters
<td>
<div>Settings to be applied to the guest during the customization. This parameter is mandatory.</div>
<div>Valid attributes are:</div>
- <div>- <code>windows_config</code> (dict): Guest customization specification for a Windows guest operating system ([&#x27;set&#x27;])</div>
+ <div>- <code>windows_config</code> (dict): Guest customization specification for a Windows guest operating system</div>
+ <div>If unset, ConfigurationSpec.linux-config or ConfigurationSpec.cloud-config must be set. Otherwise, an appropriate fault will be thrown. ([&#x27;set&#x27;])</div>
<div>- Accepted keys:</div>
- <div>- reboot (string): The <code>reboot_option</code> specifies what should be done to the guest after the customization.</div>
+ <div>- reboot (string): This option specifies what should be done to the guest after the customization.</div>
<div>Accepted value for this field:</div>
<div>- <code>NO_REBOOT</code></div>
<div>- <code>REBOOT</code></div>
<div>- <code>SHUTDOWN</code></div>
- <div>- sysprep (object): Customization settings like user details, administrator details, etc for the windows guest operating system. Exactly one of <code>#sysprep</code> or <code>#sysprep_xml</code> must be specified.</div>
- <div>- sysprep_xml (string): All settings specified in a XML format. This is the content of a typical answer.xml file that is used by System administrators during the Windows image customization. Check https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/update-windows-settings-and-scripts-create-your-own-answer-file-sxs Exactly one of <code>#sysprep</code> or <code>#sysprep_xml</code> must be specified.</div>
- <div>- <code>linux_config</code> (dict): Guest customization specification for a linux guest operating system ([&#x27;set&#x27;])</div>
+ <div>- sysprep (object): Customization settings like user details, administrator details, etc for the windows guest operating system. Exactly one of WindowsConfiguration.sysprep or WindowsConfiguration.sysprep-xml must be specified.</div>
+ <div>If unset, sysprep settings will not be applied to the windows guest operating system.</div>
+ <div>- sysprep_xml (string): All settings specified in a XML format. This is the content of a typical answer.xml file that is used by System administrators during the Windows image customization. Check https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/update-windows-settings-and-scripts-create-your-own-answer-file-sxs Exactly one of WindowsConfiguration.sysprep or WindowsConfiguration.sysprep-xml must be specified.</div>
+ <div>If unset, sysprep settings will not be applied to the windows guest operating system.</div>
+ <div>- <code>linux_config</code> (dict): Guest customization specification for a linux guest operating system</div>
+ <div>If unset, ConfigurationSpec.windows-config or ConfigurationSpec.cloud-config must be set. Otherwise, an appropriate fault will be thrown. ([&#x27;set&#x27;])</div>
<div>- Accepted keys:</div>
- <div>- hostname (object): The computer name of the (Windows) virtual machine. A computer name may contain letters (A-Z), numbers(0-9) and hyphens (-) but no spaces or periods (.). The name may not consist entirely of digits. A computer name is restricted to 15 characters in length. If the computer name is longer than 15 characters, it will be truncated to 15 characters. Check {@link HostnameGenerator} for various options.</div>
+ <div>- hostname (object): The computer name of the (Windows) virtual machine. A computer name may contain letters (A-Z), numbers(0-9) and hyphens (-) but no spaces or periods (.). The name may not consist entirely of digits. A computer name is restricted to 15 characters in length. If the computer name is longer than 15 characters, it will be truncated to 15 characters. Check HostnameGenerator for various options.</div>
<div>- domain (string): The fully qualified domain name.</div>
- <div>- time_zone (string): The case-sensitive time zone, such as Europe/Sofia. Valid time zone values are based on the tz (time zone) database used by Linux. The values are strings in the form &quot;Area/Location,&quot; in which Area is a continent or ocean name, and Location is the city, island, or other regional designation. See the https://kb.vmware.com/kb/2145518 for a list of supported time zones for different versions in Linux.</div>
- <div>- script_text (string): The script to run before and after Linux guest customization.&lt;br&gt; The max size of the script is 1500 bytes. As long as the script (shell, perl, python...) has the right &quot;#!&quot; in the header, it is supported. The caller should not assume any environment variables when the script is run. The script is invoked by the customization engine using the command line: 1) with argument &quot;precustomization&quot; before customization, 2) with argument &quot;postcustomization&quot; after customization. The script should parse this argument and implement pre-customization or post-customization task code details in the corresponding block. A Linux shell script example: &lt;code&gt; #!/bin/sh&lt;br&gt; if [ x$1 == x&quot;precustomization&quot; ]; then&lt;br&gt; echo &quot;Do Precustomization tasks&quot;&lt;br&gt; #code for pre-customization actions...&lt;br&gt; elif [ x$1 == x&quot;postcustomization&quot; ]; then&lt;br&gt; echo &quot;Do Postcustomization tasks&quot;&lt;br&gt; #code for post-customization actions...&lt;br&gt; fi&lt;br&gt; &lt;/code&gt;</div>
+ <div>- time_zone (string): The case-sensitive time zone, such as Europe/Sofia. Valid time zone values are based on the tz (time zone) database used by Linux. The values are strings (string) in the form &quot;Area/Location,&quot; in which Area is a continent or ocean name, and Location is the city, island, or other regional designation.</div>
+ <div>See the https://kb.vmware.com/kb/2145518 for a list of supported time zones for different versions in Linux.</div>
+ <div></div>
+ <div>If unset, time zone is not modified inside guest operating system.</div>
+ <div>- script_text (string): The script to run before and after Linux guest customization.</div>
+ <div>The max size of the script is 1500 bytes. As long as the script (shell, perl, python...) has the right &quot;#!&quot; in the header, it is supported. The caller should not assume any environment variables when the script is run.</div>
+ <div>The script is invoked by the customization engine using the command line: 1) with argument &quot;precustomization&quot; before customization, 2) with argument &quot;postcustomization&quot; after customization. The script should parse this argument and implement pre-customization or post-customization task code details in the corresponding block.</div>
+ <div></div>
+ <div>A Linux shell script example:</div>
+ <div></div>
+ <div>#!/bin/sh</div>
+ <div>if [ x$1 == x&quot;precustomization&quot; ]; then</div>
+ <div>echo &quot;Do Precustomization tasks&quot;</div>
+ <div>#code for pre-customization actions...</div>
+ <div>elif [ x$1 == x&quot;postcustomization&quot; ]; then</div>
+ <div>echo &quot;Do Postcustomization tasks&quot;</div>
+ <div>#code for post-customization actions...</div>
+ <div>fi</div>
+ <div></div>
+ <div></div>
+ <div>If unset, no script will be executed.</div>
+ <div>- <code>cloud_config</code> (dict): Guest customization specification with cloud configuration.</div>
+ <div>If unset, ConfigurationSpec.windows-config or ConfigurationSpec.linux-config must be set. Otherwise, an appropriate fault will be thrown. ([&#x27;set&#x27;])</div>
+ <div>- Accepted keys:</div>
+ <div>- type (string): This option specifies different types of the cloud configuration.</div>
+ <div>Accepted value for this field:</div>
+ <div>- <code>CLOUDINIT</code></div>
+ <div>- cloudinit (object): cloud-init configuration</div>
+ <div>This field is optional and it is only relevant when the value of CloudConfiguration.type is CLOUDINIT.</div>
</td>
</tr>
<tr>
@@ -88,8 +119,10 @@ Parameters
<td>
<div>Global DNS settings constitute the DNS settings that are not specific to a particular virtual network adapter. This parameter is mandatory.</div>
<div>Valid attributes are:</div>
- <div>- <code>dns_suffix_list</code> (list): List of name resolution suffixes for the virtual network adapter. This list applies to both Windows and Linux guest customization. For Linux, this setting is global, whereas in Windows, this setting is listed on a per-adapter basis. ([&#x27;set&#x27;])</div>
- <div>- <code>dns_servers</code> (list): List of DNS servers, for a virtual network adapter with a static IP address. If this list is empty, then the guest operating system is expected to use a DHCP server to get its DNS server settings. These settings configure the virtual machine to use the specified DNS servers. These DNS server settings are listed in the order of preference. ([&#x27;set&#x27;])</div>
+ <div>- <code>dns_suffix_list</code> (list): List of name resolution suffixes for the virtual network adapter. This list applies to both Windows and Linux guest customization. For Linux, this setting is global, whereas in Windows, this setting is listed on a per-adapter basis.</div>
+ <div>If unset, no DNS suffixes are set. ([&#x27;set&#x27;])</div>
+ <div>- <code>dns_servers</code> (list): List of DNS servers, for a virtual network adapter with a static IP address. If this list is empty, then the guest operating system is expected to use a DHCP server to get its DNS server settings. These settings configure the virtual machine to use the specified DNS servers. These DNS server settings are listed in the order of preference.</div>
+ <div>If unset, no DNS servers are set. ([&#x27;set&#x27;])</div>
</td>
</tr>
<tr>
@@ -106,15 +139,19 @@ Parameters
<td>
</td>
<td>
- <div>IP settings that are specific to a particular virtual network adapter. The {@link AdapterMapping} {@term structure} maps a network adapter&#x27;s MAC address to its {@link IPSettings}. May be empty if there are no network adapters, else should match number of network adapters configured for the VM. This parameter is mandatory.</div>
+ <div>IP settings that are specific to a particular virtual network adapter. The AdapterMapping structure maps a network adapter&#x27;s MAC address to its IPSettings. May be empty if there are no network adapters, else should match number of network adapters configured for the VM. This parameter is mandatory.</div>
<div>Valid attributes are:</div>
- <div>- <code>mac_address</code> (str): The MAC address of a network adapter being customized. ([&#x27;set&#x27;])</div>
+ <div>- <code>mac_address</code> (str): The MAC address of a network adapter being customized.</div>
+ <div>If unset, the customization process maps the the settings from the list of <em>i_p_settings</em> in the CustomizationSpec.interfaces to the virtual machine&#x27;s network adapters, in PCI slot order. The first virtual network adapter on the PCI bus is assigned interfaces[0].IPSettings, the second adapter is assigned interfaces[1].IPSettings, and so on. ([&#x27;set&#x27;])</div>
<div>- <code>adapter</code> (dict): The IP settings for the associated virtual network adapter. ([&#x27;set&#x27;])</div>
<div>This key is required with [&#x27;set&#x27;].</div>
<div>- Accepted keys:</div>
<div>- ipv4 (object): Specification to configure IPv4 address, subnet mask and gateway info for this virtual network adapter.</div>
+ <div>If unset, no IPv4 addresses are set.</div>
<div>- ipv6 (object): Specification to configure IPv6 address, subnet mask and gateway info for this virtual network adapter.</div>
+ <div>If unset, no IPv6 addresses are set.</div>
<div>- windows (object): Windows settings to be configured for this specific virtual Network adapter. This is valid only for Windows guest operating systems.</div>
+ <div>If unset, no specific Windows settings are set.</div>
</td>
</tr>
<tr>
@@ -138,6 +175,23 @@ Parameters
<tr>
<td colspan="1">
<div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li><div style="color: blue"><b>set</b>&nbsp;&larr;</div></li>
+ </ul>
+ </td>
+ <td>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
<b>vcenter_hostname</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
@@ -238,7 +292,8 @@ Parameters
<td>
</td>
<td>
- <div>The unique identifier of the virtual machine that needs to be customized. This parameter is mandatory.</div>
+ <div>The unique identifier of the virtual machine that needs to be customized.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. This parameter is mandatory.</div>
</td>
</tr>
</table>
@@ -249,7 +304,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_filesystem_directories_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_filesystem_directories_module.rst
index 0b4e50174..b5bd50377 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_filesystem_directories_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_filesystem_directories_module.rst
@@ -17,7 +17,7 @@ Version added: 2.0.0
Synopsis
--------
-- Creates a directory in the guest operating system. <p>
+- Creates a directory in the guest operating system.
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -57,7 +57,8 @@ Parameters
</ul>
</td>
<td>
- <div>Whether any parent directories should be created. If any failure occurs, some parent directories could be left behind.</div>
+ <div>Whether any parent directories should be created. If any failure occurs, some parent directories could be left behind.</div>
+ <div>If unset parent directories are not created.</div>
</td>
</tr>
<tr>
@@ -75,16 +76,19 @@ Parameters
<td>
<div>The guest authentication data. This parameter is mandatory.</div>
<div>Valid attributes are:</div>
- <div>- <code>interactive_session</code> (bool): If {@term set}, theoperation will interact with the logged-in desktop session in the guest. This requires that the logged-on user matches the user specified by the {@link Credentials}. This is currently only supported for {@link Type#USERNAME_PASSWORD}. ([&#x27;absent&#x27;, &#x27;create_temporary&#x27;, &#x27;move&#x27;, &#x27;present&#x27;])</div>
+ <div>- <code>interactive_session</code> (bool): If set, the operation will interact with the logged-in desktop session in the guest. This requires that the logged-on user matches the user specified by the Credentials. This is currently only supported for USERNAME_PASSWORD. ([&#x27;absent&#x27;, &#x27;create_temporary&#x27;, &#x27;move&#x27;, &#x27;present&#x27;])</div>
<div>This key is required with [&#x27;absent&#x27;, &#x27;create_temporary&#x27;, &#x27;move&#x27;, &#x27;present&#x27;].</div>
<div>- <code>type</code> (str): Types of guest credentials ([&#x27;absent&#x27;, &#x27;create_temporary&#x27;, &#x27;move&#x27;, &#x27;present&#x27;])</div>
<div>This key is required with [&#x27;absent&#x27;, &#x27;create_temporary&#x27;, &#x27;move&#x27;, &#x27;present&#x27;].</div>
<div>- Accepted values:</div>
<div>- SAML_BEARER_TOKEN</div>
<div>- USERNAME_PASSWORD</div>
- <div>- <code>user_name</code> (str): For {@link Type#SAML_BEARER_TOKEN}, this is the guest user to be associated with the credentials. For {@link Type#USERNAME_PASSWORD} this is the guest username. ([&#x27;absent&#x27;, &#x27;create_temporary&#x27;, &#x27;move&#x27;, &#x27;present&#x27;])</div>
- <div>- <code>password</code> (str): password ([&#x27;absent&#x27;, &#x27;create_temporary&#x27;, &#x27;move&#x27;, &#x27;present&#x27;])</div>
- <div>- <code>saml_token</code> (str): SAML Bearer Token ([&#x27;absent&#x27;, &#x27;create_temporary&#x27;, &#x27;move&#x27;, &#x27;present&#x27;])</div>
+ <div>- <code>user_name</code> (str): For SAML_BEARER_TOKEN, this is the guest user to be associated with the credentials. For USERNAME_PASSWORD this is the guest username.</div>
+ <div>If no user is specified for SAML_BEARER_TOKEN, a guest dependent mapping will decide what guest user account is applied. ([&#x27;absent&#x27;, &#x27;create_temporary&#x27;, &#x27;move&#x27;, &#x27;present&#x27;])</div>
+ <div>- <code>password</code> (str): password</div>
+ <div>This field is optional and it is only relevant when the value of Credentials.type is USERNAME_PASSWORD. ([&#x27;absent&#x27;, &#x27;create_temporary&#x27;, &#x27;move&#x27;, &#x27;present&#x27;])</div>
+ <div>- <code>saml_token</code> (str): SAML Bearer Token</div>
+ <div>This field is optional and it is only relevant when the value of Credentials.type is SAML_BEARER_TOKEN. ([&#x27;absent&#x27;, &#x27;create_temporary&#x27;, &#x27;move&#x27;, &#x27;present&#x27;])</div>
</td>
</tr>
<tr>
@@ -115,6 +119,7 @@ Parameters
</td>
<td>
<div>The complete path to the directory in which to create the new directory.</div>
+ <div>Directory If unset a guest-specific default will be used.</div>
</td>
</tr>
<tr>
@@ -164,6 +169,7 @@ Parameters
</td>
<td>
<div>If true, all files and subdirectories are also deleted. If false, the directory must be empty for the operation to succeed.</div>
+ <div>If unset, any directory content is not deleted.</div>
</td>
</tr>
<tr>
@@ -322,7 +328,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual Machine to perform the operation on. This parameter is mandatory.</div>
+ <div>Virtual Machine to perform the operation on.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. This parameter is mandatory.</div>
</td>
</tr>
</table>
@@ -333,7 +340,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_identity_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_identity_info_module.rst
index 03b6b94b2..a123db8bb 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_identity_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_identity_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -161,7 +161,8 @@ Parameters
<td>
</td>
<td>
- <div>Identifier of the virtual machine. Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>Identifier of the virtual machine.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
</table>
@@ -172,7 +173,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_localfilesystem_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_localfilesystem_info_module.rst
index e7a0cffa1..6fd66d8d6 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_localfilesystem_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_localfilesystem_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -161,7 +161,8 @@ Parameters
<td>
</td>
<td>
- <div>Identifier of the virtual machine. Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>Identifier of the virtual machine.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
</table>
@@ -172,7 +173,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_networking_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_networking_info_module.rst
index 35b462c0d..0683b64e2 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_networking_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_networking_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -161,7 +161,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine ID Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>Virtual machine ID</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
</table>
@@ -172,7 +173,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_networking_interfaces_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_networking_interfaces_info_module.rst
index c244570fa..9d54f8bcf 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_networking_interfaces_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_networking_interfaces_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -161,7 +161,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine ID Required with <em>state=[&#x27;list&#x27;]</em></div>
+ <div>Virtual machine ID</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. Required with <em>state=[&#x27;list&#x27;]</em></div>
</td>
</tr>
</table>
@@ -172,7 +173,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_networking_routes_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_networking_routes_info_module.rst
index 92d358805..46aebcdb0 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_networking_routes_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_networking_routes_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -161,7 +161,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine ID Required with <em>state=[&#x27;list&#x27;]</em></div>
+ <div>Virtual machine ID</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. Required with <em>state=[&#x27;list&#x27;]</em></div>
</td>
</tr>
</table>
@@ -172,7 +173,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_operations_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_operations_info_module.rst
index 6f3ff17be..3faabfc53 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_operations_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_operations_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -161,7 +161,8 @@ Parameters
<td>
</td>
<td>
- <div>Identifier of the virtual machine. Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>Identifier of the virtual machine.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
</table>
@@ -172,7 +173,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_power_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_power_info_module.rst
index d71e31a33..57c211d9e 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_power_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_power_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -161,7 +161,8 @@ Parameters
<td>
</td>
<td>
- <div>Identifier of the virtual machine. Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>Identifier of the virtual machine.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
</table>
@@ -172,7 +173,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_power_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_power_module.rst
index 5d8bcffaf..84f3346b3 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_power_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_guest_power_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -182,7 +182,8 @@ Parameters
<td>
</td>
<td>
- <div>Identifier of the virtual machine. This parameter is mandatory.</div>
+ <div>Identifier of the virtual machine.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. This parameter is mandatory.</div>
</td>
</tr>
</table>
@@ -193,7 +194,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
See Also
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_adapter_sata_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_adapter_sata_info_module.rst
index 73a0a7599..29762340b 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_adapter_sata_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_adapter_sata_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -53,7 +53,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual SATA adapter identifier. Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>Virtual SATA adapter identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_hardware_adapter_sata</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -192,7 +193,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier. This parameter is mandatory.</div>
+ <div>Virtual machine identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. This parameter is mandatory.</div>
</td>
</tr>
</table>
@@ -203,7 +205,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_adapter_sata_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_adapter_sata_module.rst
index a12f22dfd..945a6e42b 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_adapter_sata_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_adapter_sata_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -53,7 +53,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual SATA adapter identifier. Required with <em>state=[&#x27;absent&#x27;]</em></div>
+ <div>Virtual SATA adapter identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_hardware_adapter_sata</span>. Required with <em>state=[&#x27;absent&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -69,6 +70,7 @@ Parameters
</td>
<td>
<div>SATA bus number.</div>
+ <div>If unset, the server will choose an available bus number; if none is available, the request will fail.</div>
</td>
</tr>
<tr>
@@ -99,6 +101,7 @@ Parameters
</td>
<td>
<div>Address of the SATA adapter on the PCI bus.</div>
+ <div>If unset, the server will choose an available address when the virtual machine is powered on.</div>
</td>
</tr>
<tr>
@@ -152,7 +155,7 @@ Parameters
</ul>
</td>
<td>
- <div>The <code>type</code> defines the valid emulation types for a virtual SATA adapter.</div>
+ <div>The <em>type</em> enumerated type defines the valid emulation types for a virtual SATA adapter.</div>
</td>
</tr>
<tr>
@@ -258,7 +261,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier. This parameter is mandatory.</div>
+ <div>Virtual machine identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. This parameter is mandatory.</div>
</td>
</tr>
</table>
@@ -269,7 +273,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_adapter_scsi_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_adapter_scsi_info_module.rst
index 75c5402a6..52ae8f07f 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_adapter_scsi_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_adapter_scsi_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -53,7 +53,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual SCSI adapter identifier. Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>Virtual SCSI adapter identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_hardware_adapter_scsi</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -192,7 +193,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier. This parameter is mandatory.</div>
+ <div>Virtual machine identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. This parameter is mandatory.</div>
</td>
</tr>
</table>
@@ -203,7 +205,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_adapter_scsi_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_adapter_scsi_module.rst
index 1918f8288..aae1344b9 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_adapter_scsi_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_adapter_scsi_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -53,7 +53,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual SCSI adapter identifier. Required with <em>state=[&#x27;absent&#x27;, &#x27;present&#x27;]</em></div>
+ <div>Virtual SCSI adapter identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_hardware_adapter_scsi</span>. Required with <em>state=[&#x27;absent&#x27;, &#x27;present&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -69,6 +70,7 @@ Parameters
</td>
<td>
<div>SCSI bus number.</div>
+ <div>If unset, the server will choose an available bus number; if none is available, the request will fail.</div>
</td>
</tr>
<tr>
@@ -98,7 +100,8 @@ Parameters
<td>
</td>
<td>
- <div>Address of the SCSI adapter on the PCI bus. If the PCI address is invalid, the server will change it when the VM is started or as the device is hot added.</div>
+ <div>Address of the SCSI adapter on the PCI bus. If the PCI address is invalid, the server will change it when the VM is started or as the device is hot added.</div>
+ <div>If unset, the server will choose an available address when the virtual machine is powered on.</div>
</td>
</tr>
<tr>
@@ -136,7 +139,7 @@ Parameters
</ul>
</td>
<td>
- <div>The <code>sharing</code> defines the valid bus sharing modes for a virtual SCSI adapter.</div>
+ <div>The <em>sharing</em> enumerated type defines the valid bus sharing modes for a virtual SCSI adapter.</div>
</td>
</tr>
<tr>
@@ -175,7 +178,7 @@ Parameters
</ul>
</td>
<td>
- <div>The <code>type</code> defines the valid emulation types for a virtual SCSI adapter.</div>
+ <div>The <em>type</em> enumerated type defines the valid emulation types for a virtual SCSI adapter.</div>
</td>
</tr>
<tr>
@@ -281,7 +284,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier. This parameter is mandatory.</div>
+ <div>Virtual machine identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. This parameter is mandatory.</div>
</td>
</tr>
</table>
@@ -292,7 +296,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_boot_device_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_boot_device_info_module.rst
index 69799285c..3f2b048b5 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_boot_device_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_boot_device_info_module.rst
@@ -17,7 +17,7 @@ Version added: 0.1.0
Synopsis
--------
-- Returns an ordered list of boot devices for the virtual machine. If the {@term list} is empty, the virtual machine uses a default boot sequence.
+- Returns an ordered list of boot devices for the virtual machine. If the list is empty, the virtual machine uses a default boot sequence.
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -161,7 +161,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier. Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>Virtual machine identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
</table>
@@ -172,7 +173,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_boot_device_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_boot_device_module.rst
index 2599d0434..6aff2733f 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_boot_device_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_boot_device_module.rst
@@ -17,7 +17,7 @@ Version added: 0.1.0
Synopsis
--------
-- Sets the virtual devices that will be used to boot the virtual machine. The virtual machine will check the devices in order, attempting to boot from each, until the virtual machine boots successfully. If the {@term list} is empty, the virtual machine will use a default boot sequence. There should be no more than one instance of {@link Entry} for a given device type except {@link Device.Type#ETHERNET} in the {@term list}.
+- Sets the virtual devices that will be used to boot the virtual machine. The virtual machine will check the devices in order, attempting to boot from each, until the virtual machine boots successfully. If the list is empty, the virtual machine will use a default boot sequence. There should be no more than one instance of Device.Entry for a given device type except ETHERNET in the list.
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -57,15 +57,19 @@ Parameters
<td>
<div>Ordered list of boot devices. This parameter is mandatory.</div>
<div>Valid attributes are:</div>
- <div>- <code>type</code> (str): The <code>type</code> defines the valid device types that may be used as bootable devices. ([&#x27;set&#x27;])</div>
+ <div>- <code>type</code> (str): This option defines the valid device types that may be used as bootable devices. ([&#x27;set&#x27;])</div>
<div>This key is required with [&#x27;set&#x27;].</div>
<div>- Accepted values:</div>
<div>- CDROM</div>
<div>- DISK</div>
<div>- ETHERNET</div>
<div>- FLOPPY</div>
- <div>- <code>nic</code> (str): Virtual Ethernet device. Ethernet device to use as boot device for this entry. ([&#x27;set&#x27;])</div>
- <div>- <code>disks</code> (list): Virtual disk device. List of virtual disks in boot order. ([&#x27;set&#x27;])</div>
+ <div>- <code>nic</code> (str): Virtual Ethernet device. Ethernet device to use as boot device for this entry.</div>
+ <div>This field is optional and it is only relevant when the value of <em>type</em> is ETHERNET.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_hardware_ethernet</span>. ([&#x27;set&#x27;])</div>
+ <div>- <code>disks</code> (list): Virtual disk device. List of virtual disks in boot order.</div>
+ <div>This field is optional and it is only relevant when the value of <em>type</em> is DISK.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_vm_hardware_disk</span>. ([&#x27;set&#x27;])</div>
</td>
</tr>
<tr>
@@ -206,7 +210,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier. This parameter is mandatory.</div>
+ <div>Virtual machine identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. This parameter is mandatory.</div>
</td>
</tr>
</table>
@@ -217,7 +222,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_boot_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_boot_info_module.rst
index 0d67914cc..0b8e28183 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_boot_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_boot_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -161,7 +161,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier. Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>Virtual machine identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
</table>
@@ -172,7 +173,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_boot_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_boot_module.rst
index ab4919367..3d87bf1ec 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_boot_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_boot_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -53,7 +53,8 @@ Parameters
<td>
</td>
<td>
- <div>Delay in milliseconds before beginning the firmware boot process when the virtual machine is powered on. This delay may be used to provide a time window for users to connect to the virtual machine console and enter BIOS setup mode.</div>
+ <div>Delay in milliseconds before beginning the firmware boot process when the virtual machine is powered on. This delay may be used to provide a time window for users to connect to the virtual machine console and enter BIOS setup mode.</div>
+ <div>If unset, the value is unchanged.</div>
</td>
</tr>
<tr>
@@ -73,6 +74,7 @@ Parameters
</td>
<td>
<div>Flag indicating whether to use EFI legacy boot mode.</div>
+ <div>If unset, the value is unchanged.</div>
</td>
</tr>
<tr>
@@ -91,7 +93,8 @@ Parameters
</ul>
</td>
<td>
- <div>Flag indicating whether the firmware boot process should automatically enter setup mode the next time the virtual machine boots. Note that this flag will automatically be reset to false once the virtual machine enters setup mode.</div>
+ <div>Flag indicating whether the firmware boot process should automatically enter setup mode the next time the virtual machine boots. Note that this flag will automatically be reset to false once the virtual machine enters setup mode.</div>
+ <div>If unset, the value is unchanged.</div>
</td>
</tr>
<tr>
@@ -110,7 +113,7 @@ Parameters
</ul>
</td>
<td>
- <div>The <code>network_protocol</code> defines the valid network boot protocols supported when booting a virtual machine with {@link Type#EFI} firmware over the network.</div>
+ <div>The <em>network_protocol</em> enumerated type defines the valid network boot protocols supported when booting a virtual machine with EFI firmware over the network.</div>
</td>
</tr>
<tr>
@@ -130,6 +133,7 @@ Parameters
</td>
<td>
<div>Flag indicating whether the virtual machine should automatically retry the boot process after a failure.</div>
+ <div>If unset, the value is unchanged.</div>
</td>
</tr>
<tr>
@@ -144,7 +148,8 @@ Parameters
<td>
</td>
<td>
- <div>Delay in milliseconds before retrying the boot process after a failure; applicable only when {@link Info#retry} is true.</div>
+ <div>Delay in milliseconds before retrying the boot process after a failure; applicable only when <em>retry</em> is true.</div>
+ <div>If unset, the value is unchanged.</div>
</td>
</tr>
<tr>
@@ -198,7 +203,7 @@ Parameters
</ul>
</td>
<td>
- <div>The <code>type</code> defines the valid firmware types for a virtual machine.</div>
+ <div>The <em>type</em> enumerated type defines the valid firmware types for a virtual machine.</div>
</td>
</tr>
<tr>
@@ -304,7 +309,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier. This parameter is mandatory.</div>
+ <div>Virtual machine identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. This parameter is mandatory.</div>
</td>
</tr>
</table>
@@ -315,7 +321,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_cdrom_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_cdrom_info_module.rst
index bb3abbc97..ead0e0aa7 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_cdrom_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_cdrom_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -53,7 +53,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual CD-ROM device identifier. Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>Virtual CD-ROM device identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_hardware_cdrom</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -192,7 +193,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier. This parameter is mandatory.</div>
+ <div>Virtual machine identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. This parameter is mandatory.</div>
</td>
</tr>
</table>
@@ -203,7 +205,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_cdrom_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_cdrom_module.rst
index 38d0c82b3..f83db83d7 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_cdrom_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_cdrom_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -58,6 +58,7 @@ Parameters
</td>
<td>
<div>Flag indicating whether the guest can connect and disconnect the device.</div>
+ <div>If unset, the value is unchanged.</div>
</td>
</tr>
<tr>
@@ -72,17 +73,20 @@ Parameters
<td>
</td>
<td>
- <div>Physical resource backing for the virtual CD-ROM device. Required with <em>state=[&#x27;present&#x27;]</em></div>
+ <div>Physical resource backing for the virtual CD-ROM device.</div>
+ <div>If unset, defaults to automatic detection of a suitable host device. Required with <em>state=[&#x27;present&#x27;]</em></div>
<div>Valid attributes are:</div>
- <div>- <code>type</code> (str): The <code>backing_type</code> defines the valid backing types for a virtual CD-ROM device. ([&#x27;present&#x27;])</div>
+ <div>- <code>type</code> (str): This option defines the valid backing types for a virtual CD-ROM device. ([&#x27;present&#x27;])</div>
<div>This key is required with [&#x27;present&#x27;].</div>
<div>- Accepted values:</div>
<div>- CLIENT_DEVICE</div>
<div>- HOST_DEVICE</div>
<div>- ISO_FILE</div>
- <div>- <code>iso_file</code> (str): Path of the image file that should be used as the virtual CD-ROM device backing. ([&#x27;present&#x27;])</div>
- <div>- <code>host_device</code> (str): Name of the device that should be used as the virtual CD-ROM device backing. ([&#x27;present&#x27;])</div>
- <div>- <code>device_access_type</code> (str): The <code>device_access_type</code> defines the valid device access types for a physical device packing of a virtual CD-ROM device. ([&#x27;present&#x27;])</div>
+ <div>- <code>iso_file</code> (str): Path of the image file that should be used as the virtual CD-ROM device backing.</div>
+ <div>This field is optional and it is only relevant when the value of <em>type</em> is ISO_FILE. ([&#x27;present&#x27;])</div>
+ <div>- <code>host_device</code> (str): Name of the device that should be used as the virtual CD-ROM device backing.</div>
+ <div>If unset, the virtual CD-ROM device will be configured to automatically detect a suitable host device. ([&#x27;present&#x27;])</div>
+ <div>- <code>device_access_type</code> (str): This option defines the valid device access types for a physical device packing of a virtual CD-ROM device. ([&#x27;present&#x27;])</div>
<div>- Accepted values:</div>
<div>- EMULATION</div>
<div>- PASSTHRU</div>
@@ -101,7 +105,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual CD-ROM device identifier. Required with <em>state=[&#x27;absent&#x27;, &#x27;connect&#x27;, &#x27;disconnect&#x27;, &#x27;present&#x27;]</em></div>
+ <div>Virtual CD-ROM device identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_hardware_cdrom</span>. Required with <em>state=[&#x27;absent&#x27;, &#x27;connect&#x27;, &#x27;disconnect&#x27;, &#x27;present&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -117,9 +122,12 @@ Parameters
</td>
<td>
<div>Address for attaching the device to a virtual IDE adapter.</div>
+ <div>If unset, the server will choose an available address; if none is available, the request will fail.</div>
<div>Valid attributes are:</div>
- <div>- <code>primary</code> (bool): Flag specifying whether the device should be attached to the primary or secondary IDE adapter of the virtual machine. ([&#x27;present&#x27;])</div>
- <div>- <code>master</code> (bool): Flag specifying whether the device should be the master or slave device on the IDE adapter. ([&#x27;present&#x27;])</div>
+ <div>- <code>primary</code> (bool): Flag specifying whether the device should be attached to the primary or secondary IDE adapter of the virtual machine.</div>
+ <div>If unset, the server will choose a adapter with an available connection. If no IDE connections are available, the request will be rejected. ([&#x27;present&#x27;])</div>
+ <div>- <code>master</code> (bool): Flag specifying whether the device should be the master or slave device on the IDE adapter.</div>
+ <div>If unset, the server will choose an available connection type. If no IDE connections are available, the request will be rejected. ([&#x27;present&#x27;])</div>
</td>
</tr>
<tr>
@@ -149,11 +157,13 @@ Parameters
<td>
</td>
<td>
- <div>Address for attaching the device to a virtual SATA adapter. Required with <em>state=[&#x27;present&#x27;]</em></div>
+ <div>Address for attaching the device to a virtual SATA adapter.</div>
+ <div>If unset, the server will choose an available address; if none is available, the request will fail. Required with <em>state=[&#x27;present&#x27;]</em></div>
<div>Valid attributes are:</div>
<div>- <code>bus</code> (int): Bus number of the adapter to which the device should be attached. ([&#x27;present&#x27;])</div>
<div>This key is required with [&#x27;present&#x27;].</div>
- <div>- <code>unit</code> (int): Unit number of the device. ([&#x27;present&#x27;])</div>
+ <div>- <code>unit</code> (int): Unit number of the device.</div>
+ <div>If unset, the server will choose an available unit number on the specified adapter. If there are no available connections on the adapter, the request will be rejected. ([&#x27;present&#x27;])</div>
</td>
</tr>
<tr>
@@ -191,6 +201,7 @@ Parameters
</td>
<td>
<div>Flag indicating whether the virtual device should be connected whenever the virtual machine is powered on.</div>
+ <div>If unset, the value is unchanged.</div>
</td>
</tr>
<tr>
@@ -229,7 +240,7 @@ Parameters
</ul>
</td>
<td>
- <div>The <code>host_bus_adapter_type</code> defines the valid types of host bus adapters that may be used for attaching a Cdrom to a virtual machine.</div>
+ <div>The <em>host_bus_adapter_type</em> enumerated type defines the valid types of host bus adapters that may be used for attaching a Cdrom to a virtual machine.</div>
</td>
</tr>
<tr>
@@ -335,7 +346,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier. This parameter is mandatory.</div>
+ <div>Virtual machine identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. This parameter is mandatory.</div>
</td>
</tr>
</table>
@@ -346,7 +358,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_cpu_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_cpu_info_module.rst
index 85cf99163..39768d877 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_cpu_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_cpu_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -161,7 +161,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier. Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>Virtual machine identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
</table>
@@ -172,7 +173,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_cpu_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_cpu_module.rst
index e85791ff4..e6593b755 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_cpu_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_cpu_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -53,7 +53,8 @@ Parameters
<td>
</td>
<td>
- <div>New number of CPU cores per socket. The number of CPU cores in the virtual machine must be a multiple of the number of cores per socket.</div>
+ <div>New number of CPU cores per socket. The number of CPU cores in the virtual machine must be a multiple of the number of cores per socket.</div>
+ <div>If unset, the value is unchanged.</div>
</td>
</tr>
<tr>
@@ -68,7 +69,12 @@ Parameters
<td>
</td>
<td>
- <div>New number of CPU cores. The number of CPU cores in the virtual machine must be a multiple of the number of cores per socket. The supported range of CPU counts is constrained by the configured guest operating system and virtual hardware version of the virtual machine. If the virtual machine is running, the number of CPU cores may only be increased if {@link Info#hotAddEnabled} is true, and may only be decreased if {@link Info#hotRemoveEnabled} is true.</div>
+ <div>New number of CPU cores. The number of CPU cores in the virtual machine must be a multiple of the number of cores per socket.</div>
+ <div>The supported range of CPU counts is constrained by the configured guest operating system and virtual hardware version of the virtual machine.</div>
+ <div></div>
+ <div>If the virtual machine is running, the number of CPU cores may only be increased if <em>hot_add_enabled</em> is true, and may only be decreased if <em>hot_remove_enabled</em> is true.</div>
+ <div></div>
+ <div>If unset, the value is unchanged.</div>
</td>
</tr>
<tr>
@@ -87,7 +93,10 @@ Parameters
</ul>
</td>
<td>
- <div>Flag indicating whether adding CPUs while the virtual machine is running is enabled. This field may only be modified if the virtual machine is powered off.</div>
+ <div>Flag indicating whether adding CPUs while the virtual machine is running is enabled.</div>
+ <div>This field may only be modified if the virtual machine is powered off.</div>
+ <div></div>
+ <div>If unset, the value is unchanged.</div>
</td>
</tr>
<tr>
@@ -106,7 +115,10 @@ Parameters
</ul>
</td>
<td>
- <div>Flag indicating whether removing CPUs while the virtual machine is running is enabled. This field may only be modified if the virtual machine is powered off.</div>
+ <div>Flag indicating whether removing CPUs while the virtual machine is running is enabled.</div>
+ <div>This field may only be modified if the virtual machine is powered off.</div>
+ <div></div>
+ <div>If unset, the value is unchanged.</div>
</td>
</tr>
<tr>
@@ -247,7 +259,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier. This parameter is mandatory.</div>
+ <div>Virtual machine identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. This parameter is mandatory.</div>
</td>
</tr>
</table>
@@ -258,7 +271,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_disk_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_disk_info_module.rst
index 6a36bc3a3..748e08588 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_disk_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_disk_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -53,7 +53,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual disk identifier. Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>Virtual disk identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_hardware_disk</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -192,7 +193,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier. This parameter is mandatory.</div>
+ <div>Virtual machine identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. This parameter is mandatory.</div>
</td>
</tr>
</table>
@@ -203,7 +205,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_disk_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_disk_module.rst
index 4424d055c..e0c81c96c 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_disk_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_disk_module.rst
@@ -17,7 +17,7 @@ Version added: 0.1.0
Synopsis
--------
-- Adds a virtual disk to the virtual machine. While adding the virtual disk, a new VMDK file may be created or an existing VMDK file may be used to back the virtual disk.
+- Adds a virtual disk to the virtual machine. While adding the virtual disk, a new VMDK file may be created or an existing VMDK file may be used to back the virtual disk.
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -53,13 +53,15 @@ Parameters
<td>
</td>
<td>
- <div>Existing physical resource backing for the virtual disk. Exactly one of <code>#backing</code> or <code>#new_vmdk</code> must be specified. Required with <em>state=[&#x27;present&#x27;]</em></div>
+ <div>Existing physical resource backing for the virtual disk. Exactly one of <em>backing</em> or <em>new_vmdk</em> must be specified.</div>
+ <div>If unset, the virtual disk will not be connected to an existing backing. Required with <em>state=[&#x27;present&#x27;]</em></div>
<div>Valid attributes are:</div>
- <div>- <code>type</code> (str): The <code>backing_type</code> defines the valid backing types for a virtual disk. ([&#x27;present&#x27;])</div>
+ <div>- <code>type</code> (str): This option defines the valid backing types for a virtual disk. ([&#x27;present&#x27;])</div>
<div>This key is required with [&#x27;present&#x27;].</div>
<div>- Accepted values:</div>
<div>- VMDK_FILE</div>
- <div>- <code>vmdk_file</code> (str): Path of the VMDK file backing the virtual disk. ([&#x27;present&#x27;])</div>
+ <div>- <code>vmdk_file</code> (str): Path of the VMDK file backing the virtual disk.</div>
+ <div>This field is optional and it is only relevant when the value of <em>type</em> is VMDK_FILE. ([&#x27;present&#x27;])</div>
</td>
</tr>
<tr>
@@ -74,7 +76,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual disk identifier. Required with <em>state=[&#x27;absent&#x27;, &#x27;present&#x27;]</em></div>
+ <div>Virtual disk identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_hardware_disk</span>. Required with <em>state=[&#x27;absent&#x27;, &#x27;present&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -90,9 +93,12 @@ Parameters
</td>
<td>
<div>Address for attaching the device to a virtual IDE adapter.</div>
+ <div>If unset, the server will choose an available address; if none is available, the request will fail.</div>
<div>Valid attributes are:</div>
- <div>- <code>primary</code> (bool): Flag specifying whether the device should be attached to the primary or secondary IDE adapter of the virtual machine. ([&#x27;present&#x27;])</div>
- <div>- <code>master</code> (bool): Flag specifying whether the device should be the master or slave device on the IDE adapter. ([&#x27;present&#x27;])</div>
+ <div>- <code>primary</code> (bool): Flag specifying whether the device should be attached to the primary or secondary IDE adapter of the virtual machine.</div>
+ <div>If unset, the server will choose a adapter with an available connection. If no IDE connections are available, the request will be rejected. ([&#x27;present&#x27;])</div>
+ <div>- <code>master</code> (bool): Flag specifying whether the device should be the master or slave device on the IDE adapter.</div>
+ <div>If unset, the server will choose an available connection type. If no IDE connections are available, the request will be rejected. ([&#x27;present&#x27;])</div>
</td>
</tr>
<tr>
@@ -122,13 +128,39 @@ Parameters
<td>
</td>
<td>
- <div>Specification for creating a new VMDK backing for the virtual disk. Exactly one of <code>#backing</code> or <code>#new_vmdk</code> must be specified.</div>
+ <div>Specification for creating a new VMDK backing for the virtual disk. Exactly one of <em>backing</em> or <em>new_vmdk</em> must be specified.</div>
+ <div>If unset, a new VMDK backing will not be created.</div>
<div>Valid attributes are:</div>
- <div>- <code>name</code> (str): Base name of the VMDK file. The name should not include the &#x27;.vmdk&#x27; file extension. ([&#x27;present&#x27;])</div>
- <div>- <code>capacity</code> (int): Capacity of the virtual disk backing in bytes. ([&#x27;present&#x27;])</div>
- <div>- <code>storage_policy</code> (dict): The <code>storage_policy_spec</code> {@term structure} contains information about the storage policy that is to be associated the with VMDK file. ([&#x27;present&#x27;])</div>
+ <div>- <code>name</code> (str): Base name of the VMDK file. The name should not include the &#x27;.vmdk&#x27; file extension.</div>
+ <div>If unset, a name (derived from the name of the virtual machine) will be chosen by the server. ([&#x27;present&#x27;])</div>
+ <div>- <code>capacity</code> (int): Capacity of the virtual disk backing in bytes.</div>
+ <div>If unset, defaults to a guest-specific capacity. ([&#x27;present&#x27;])</div>
+ <div>- <code>storage_policy</code> (dict): The <em>storage_policy_spec</em> structure contains information about the storage policy that is to be associated the with VMDK file.</div>
+ <div>If unset the default storage policy of the target datastore (if applicable) is applied. Currently a default storage policy is only supported by object based datastores : VVol &amp; vSAN. For non- object datastores, if unset then no storage policy would be associated with the VMDK file. ([&#x27;present&#x27;])</div>
<div>- Accepted keys:</div>
<div>- policy (string): Identifier of the storage policy which should be associated with the VMDK file.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_storage_policies</span>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>nvme</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Address for attaching the device to a virtual NVMe adapter.</div>
+ <div>If unset, the server will choose an available address; if none is available, the request will fail. Required with <em>state=[&#x27;present&#x27;]</em></div>
+ <div>Valid attributes are:</div>
+ <div>- <code>bus</code> (int): Bus number of the adapter to which the device should be attached. ([&#x27;present&#x27;])</div>
+ <div>This key is required with [&#x27;present&#x27;].</div>
+ <div>- <code>unit</code> (int): Unit number of the device.</div>
+ <div>If unset, the server will choose an available unit number on the specified adapter. If there are no available connections on the adapter, the request will be rejected. ([&#x27;present&#x27;])</div>
</td>
</tr>
<tr>
@@ -143,11 +175,13 @@ Parameters
<td>
</td>
<td>
- <div>Address for attaching the device to a virtual SATA adapter. Required with <em>state=[&#x27;present&#x27;]</em></div>
+ <div>Address for attaching the device to a virtual SATA adapter.</div>
+ <div>If unset, the server will choose an available address; if none is available, the request will fail. Required with <em>state=[&#x27;present&#x27;]</em></div>
<div>Valid attributes are:</div>
<div>- <code>bus</code> (int): Bus number of the adapter to which the device should be attached. ([&#x27;present&#x27;])</div>
<div>This key is required with [&#x27;present&#x27;].</div>
- <div>- <code>unit</code> (int): Unit number of the device. ([&#x27;present&#x27;])</div>
+ <div>- <code>unit</code> (int): Unit number of the device.</div>
+ <div>If unset, the server will choose an available unit number on the specified adapter. If there are no available connections on the adapter, the request will be rejected. ([&#x27;present&#x27;])</div>
</td>
</tr>
<tr>
@@ -162,11 +196,13 @@ Parameters
<td>
</td>
<td>
- <div>Address for attaching the device to a virtual SCSI adapter. Required with <em>state=[&#x27;present&#x27;]</em></div>
+ <div>Address for attaching the device to a virtual SCSI adapter.</div>
+ <div>If unset, the server will choose an available address; if none is available, the request will fail. Required with <em>state=[&#x27;present&#x27;]</em></div>
<div>Valid attributes are:</div>
<div>- <code>bus</code> (int): Bus number of the adapter to which the device should be attached. ([&#x27;present&#x27;])</div>
<div>This key is required with [&#x27;present&#x27;].</div>
- <div>- <code>unit</code> (int): Unit number of the device. ([&#x27;present&#x27;])</div>
+ <div>- <code>unit</code> (int): Unit number of the device.</div>
+ <div>If unset, the server will choose an available unit number on the specified adapter. If there are no available connections on the adapter, the request will be rejected. ([&#x27;present&#x27;])</div>
</td>
</tr>
<tr>
@@ -217,12 +253,13 @@ Parameters
<td>
<ul style="margin: 0; padding: 0"><b>Choices:</b>
<li>IDE</li>
+ <li>NVME</li>
<li>SATA</li>
<li>SCSI</li>
</ul>
</td>
<td>
- <div>The <code>host_bus_adapter_type</code> defines the valid types of host bus adapters that may be used for attaching a virtual storage device to a virtual machine.</div>
+ <div>The <em>host_bus_adapter_type</em> enumerated type defines the valid types of host bus adapters that may be used for attaching a virtual storage device to a virtual machine.</div>
</td>
</tr>
<tr>
@@ -328,7 +365,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier. This parameter is mandatory.</div>
+ <div>Virtual machine identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. This parameter is mandatory.</div>
</td>
</tr>
</table>
@@ -339,7 +377,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_ethernet_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_ethernet_info_module.rst
index 74364d8ff..a90d2c37b 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_ethernet_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_ethernet_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -68,7 +68,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual Ethernet adapter identifier. Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>Virtual Ethernet adapter identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_hardware_ethernet</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -192,7 +193,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier. This parameter is mandatory.</div>
+ <div>Virtual machine identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. This parameter is mandatory.</div>
</td>
</tr>
</table>
@@ -203,7 +205,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_ethernet_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_ethernet_module.rst
index d2bebc4f4..dc7bb1bfc 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_ethernet_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_ethernet_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -58,6 +58,7 @@ Parameters
</td>
<td>
<div>Flag indicating whether the guest can connect and disconnect the device.</div>
+ <div>If unset, the value is unchanged.</div>
</td>
</tr>
<tr>
@@ -72,17 +73,21 @@ Parameters
<td>
</td>
<td>
- <div>Physical resource backing for the virtual Ethernet adapter. Required with <em>state=[&#x27;present&#x27;]</em></div>
+ <div>Physical resource backing for the virtual Ethernet adapter.</div>
+ <div>If unset, the system may try to find an appropriate backing. If one is not found, the request will fail. Required with <em>state=[&#x27;present&#x27;]</em></div>
<div>Valid attributes are:</div>
- <div>- <code>type</code> (str): The <code>backing_type</code> defines the valid backing types for a virtual Ethernet adapter. ([&#x27;present&#x27;])</div>
+ <div>- <code>type</code> (str): This option defines the valid backing types for a virtual Ethernet adapter. ([&#x27;present&#x27;])</div>
<div>This key is required with [&#x27;present&#x27;].</div>
<div>- Accepted values:</div>
<div>- DISTRIBUTED_PORTGROUP</div>
<div>- HOST_DEVICE</div>
<div>- OPAQUE_NETWORK</div>
<div>- STANDARD_PORTGROUP</div>
- <div>- <code>network</code> (str): Identifier of the network that backs the virtual Ethernet adapter. ([&#x27;present&#x27;])</div>
- <div>- <code>distributed_port</code> (str): Key of the distributed virtual port that backs the virtual Ethernet adapter. Depending on the type of the Portgroup, the port may be specified using this field. If the portgroup type is early-binding (also known as static), a port is assigned when the Ethernet adapter is configured to use the port. The port may be either automatically or specifically assigned based on the value of this field. If the portgroup type is ephemeral, the port is created and assigned to a virtual machine when it is powered on and the Ethernet adapter is connected. This field cannot be specified as no free ports exist before use. ([&#x27;present&#x27;])</div>
+ <div>- <code>network</code> (str): Identifier of the network that backs the virtual Ethernet adapter.</div>
+ <div>This field is optional and it is only relevant when the value of <em>type</em> is one of STANDARD_PORTGROUP, DISTRIBUTED_PORTGROUP, or OPAQUE_NETWORK.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_network_info</span>. ([&#x27;present&#x27;])</div>
+ <div>- <code>distributed_port</code> (str): Key of the distributed virtual port that backs the virtual Ethernet adapter. Depending on the type of the Portgroup, the port may be specified using this field. If the portgroup type is early-binding (also known as static), a port is assigned when the Ethernet adapter is configured to use the port. The port may be either automatically or specifically assigned based on the value of this field. If the portgroup type is ephemeral, the port is created and assigned to a virtual machine when it is powered on and the Ethernet adapter is connected. This field cannot be specified as no free ports exist before use.</div>
+ <div>May be used to specify a port when the network specified on the <em>network</em> field is a static or early binding distributed portgroup. If unset, the port will be automatically assigned to the Ethernet adapter based on the policy embodied by the portgroup type. ([&#x27;present&#x27;])</div>
</td>
</tr>
<tr>
@@ -112,7 +117,10 @@ Parameters
<td>
</td>
<td>
- <div>MAC address. This field may be modified at any time, and changes will be applied the next time the virtual machine is powered on.</div>
+ <div>MAC address.</div>
+ <div>This field may be modified at any time, and changes will be applied the next time the virtual machine is powered on.</div>
+ <div></div>
+ <div>If unset, the value is unchanged. Must be specified if <em>mac_type</em> is MANUAL. Must be unset if the MAC address type is not MANUAL.</div>
</td>
</tr>
<tr>
@@ -132,7 +140,7 @@ Parameters
</ul>
</td>
<td>
- <div>The <code>mac_address_type</code> defines the valid MAC address origins for a virtual Ethernet adapter.</div>
+ <div>The <em>mac_address_type</em> enumerated type defines the valid MAC address origins for a virtual Ethernet adapter.</div>
</td>
</tr>
<tr>
@@ -147,7 +155,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual Ethernet adapter identifier. Required with <em>state=[&#x27;absent&#x27;, &#x27;connect&#x27;, &#x27;disconnect&#x27;, &#x27;present&#x27;]</em></div>
+ <div>Virtual Ethernet adapter identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_hardware_ethernet</span>. Required with <em>state=[&#x27;absent&#x27;, &#x27;connect&#x27;, &#x27;disconnect&#x27;, &#x27;present&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -162,7 +171,8 @@ Parameters
<td>
</td>
<td>
- <div>Address of the virtual Ethernet adapter on the PCI bus. If the PCI address is invalid, the server will change when it the VM is started or as the device is hot added.</div>
+ <div>Address of the virtual Ethernet adapter on the PCI bus. If the PCI address is invalid, the server will change when it the VM is started or as the device is hot added.</div>
+ <div>If unset, the server will choose an available address when the virtual machine is powered on.</div>
</td>
</tr>
<tr>
@@ -200,6 +210,7 @@ Parameters
</td>
<td>
<div>Flag indicating whether the virtual device should be connected whenever the virtual machine is powered on.</div>
+ <div>If unset, the value is unchanged.</div>
</td>
</tr>
<tr>
@@ -242,7 +253,7 @@ Parameters
</ul>
</td>
<td>
- <div>The <code>emulation_type</code> defines the valid emulation types for a virtual Ethernet adapter.</div>
+ <div>The <em>emulation_type</em> enumerated type defines the valid emulation types for a virtual Ethernet adapter.</div>
</td>
</tr>
<tr>
@@ -261,7 +272,10 @@ Parameters
</ul>
</td>
<td>
- <div>Flag indicating whether Universal Pass-Through (UPT) compatibility should be enabled on this virtual Ethernet adapter. This field may be modified at any time, and changes will be applied the next time the virtual machine is powered on.</div>
+ <div>Flag indicating whether Universal Pass-Through (UPT) compatibility should be enabled on this virtual Ethernet adapter.</div>
+ <div>This field may be modified at any time, and changes will be applied the next time the virtual machine is powered on.</div>
+ <div></div>
+ <div>If unset, the value is unchanged. Must be unset if the emulation type of the virtual Ethernet adapter is not VMXNET3.</div>
</td>
</tr>
<tr>
@@ -367,7 +381,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier. This parameter is mandatory.</div>
+ <div>Virtual machine identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. This parameter is mandatory.</div>
</td>
</tr>
<tr>
@@ -386,7 +401,10 @@ Parameters
</ul>
</td>
<td>
- <div>Flag indicating whether wake-on-LAN shoud be enabled on this virtual Ethernet adapter. This field may be modified at any time, and changes will be applied the next time the virtual machine is powered on.</div>
+ <div>Flag indicating whether wake-on-LAN shoud be enabled on this virtual Ethernet adapter.</div>
+ <div>This field may be modified at any time, and changes will be applied the next time the virtual machine is powered on.</div>
+ <div></div>
+ <div>If unset, the value is unchanged.</div>
</td>
</tr>
</table>
@@ -397,7 +415,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_floppy_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_floppy_info_module.rst
index 5cc686804..acd1d7efc 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_floppy_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_floppy_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -53,7 +53,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual floppy drive identifier. Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>Virtual floppy drive identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_hardware_floppy</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -192,7 +193,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier. This parameter is mandatory.</div>
+ <div>Virtual machine identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. This parameter is mandatory.</div>
</td>
</tr>
</table>
@@ -203,7 +205,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_floppy_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_floppy_module.rst
index 641245488..1a04cbd9f 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_floppy_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_floppy_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -58,6 +58,7 @@ Parameters
</td>
<td>
<div>Flag indicating whether the guest can connect and disconnect the device.</div>
+ <div>If unset, the value is unchanged.</div>
</td>
</tr>
<tr>
@@ -72,16 +73,19 @@ Parameters
<td>
</td>
<td>
- <div>Physical resource backing for the virtual floppy drive. Required with <em>state=[&#x27;present&#x27;]</em></div>
+ <div>Physical resource backing for the virtual floppy drive.</div>
+ <div>If unset, defaults to automatic detection of a suitable host device. Required with <em>state=[&#x27;present&#x27;]</em></div>
<div>Valid attributes are:</div>
- <div>- <code>type</code> (str): The <code>backing_type</code> defines the valid backing types for a virtual floppy drive. ([&#x27;present&#x27;])</div>
+ <div>- <code>type</code> (str): This option defines the valid backing types for a virtual floppy drive. ([&#x27;present&#x27;])</div>
<div>This key is required with [&#x27;present&#x27;].</div>
<div>- Accepted values:</div>
<div>- CLIENT_DEVICE</div>
<div>- HOST_DEVICE</div>
<div>- IMAGE_FILE</div>
- <div>- <code>image_file</code> (str): Path of the image file that should be used as the virtual floppy drive backing. ([&#x27;present&#x27;])</div>
- <div>- <code>host_device</code> (str): Name of the device that should be used as the virtual floppy drive backing. ([&#x27;present&#x27;])</div>
+ <div>- <code>image_file</code> (str): Path of the image file that should be used as the virtual floppy drive backing.</div>
+ <div>This field is optional and it is only relevant when the value of <em>type</em> is IMAGE_FILE. ([&#x27;present&#x27;])</div>
+ <div>- <code>host_device</code> (str): Name of the device that should be used as the virtual floppy drive backing.</div>
+ <div>If unset, the virtual floppy drive will be configured to automatically detect a suitable host device. ([&#x27;present&#x27;])</div>
</td>
</tr>
<tr>
@@ -96,7 +100,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual floppy drive identifier. Required with <em>state=[&#x27;absent&#x27;, &#x27;connect&#x27;, &#x27;disconnect&#x27;, &#x27;present&#x27;]</em></div>
+ <div>Virtual floppy drive identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_hardware_floppy</span>. Required with <em>state=[&#x27;absent&#x27;, &#x27;connect&#x27;, &#x27;disconnect&#x27;, &#x27;present&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -149,6 +154,7 @@ Parameters
</td>
<td>
<div>Flag indicating whether the virtual device should be connected whenever the virtual machine is powered on.</div>
+ <div>If unset, the value is unchanged.</div>
</td>
</tr>
<tr>
@@ -274,7 +280,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier. This parameter is mandatory.</div>
+ <div>Virtual machine identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. This parameter is mandatory.</div>
</td>
</tr>
</table>
@@ -285,7 +292,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_info_module.rst
index cd5fa6f5d..a99fc6956 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -161,7 +161,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier. Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>Virtual machine identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
</table>
@@ -172,7 +173,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_memory_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_memory_info_module.rst
index dbf7fc9a2..15fafb532 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_memory_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_memory_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -161,7 +161,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier. Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>Virtual machine identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
</table>
@@ -172,7 +173,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_memory_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_memory_module.rst
index 1c18a0274..c42d8e5d2 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_memory_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_memory_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -57,7 +57,12 @@ Parameters
</ul>
</td>
<td>
- <div>Flag indicating whether adding memory while the virtual machine is running should be enabled. Some guest operating systems may consume more resources or perform less efficiently when they run on hardware that supports adding memory while the machine is running. This field may only be modified if the virtual machine is not powered on.</div>
+ <div>Flag indicating whether adding memory while the virtual machine is running should be enabled.</div>
+ <div>Some guest operating systems may consume more resources or perform less efficiently when they run on hardware that supports adding memory while the machine is running.</div>
+ <div></div>
+ <div>This field may only be modified if the virtual machine is not powered on.</div>
+ <div></div>
+ <div>If unset, the value is unchanged.</div>
</td>
</tr>
<tr>
@@ -90,7 +95,12 @@ Parameters
<td>
</td>
<td>
- <div>New memory size in mebibytes. The supported range of memory sizes is constrained by the configured guest operating system and virtual hardware version of the virtual machine. If the virtual machine is running, this value may only be changed if {@link Info#hotAddEnabled} is true, and the new memory size must satisfy the constraints specified by {@link Info#hotAddIncrementSizeMiB} and {@link Info#hotAddLimitMiB}.</div>
+ <div>New memory size in mebibytes.</div>
+ <div>The supported range of memory sizes is constrained by the configured guest operating system and virtual hardware version of the virtual machine.</div>
+ <div></div>
+ <div>If the virtual machine is running, this value may only be changed if <em>hot_add_enabled</em> is true, and the new memory size must satisfy the constraints specified by <em>hot_add_increment_size_mib</em> and I()</div>
+ <div></div>
+ <div>If unset, the value is unchanged.</div>
</td>
</tr>
<tr>
@@ -213,7 +223,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier. This parameter is mandatory.</div>
+ <div>Virtual machine identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. This parameter is mandatory.</div>
</td>
</tr>
</table>
@@ -224,7 +235,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_module.rst
index 7e057380b..142648ab0 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -94,7 +94,7 @@ Parameters
</ul>
</td>
<td>
- <div>The <code>upgrade_policy</code> defines the valid virtual hardware upgrade policies for a virtual machine.</div>
+ <div>The <em>upgrade_policy</em> enumerated type defines the valid virtual hardware upgrade policies for a virtual machine.</div>
</td>
</tr>
<tr>
@@ -127,7 +127,7 @@ Parameters
</ul>
</td>
<td>
- <div>The <code>version</code> defines the valid virtual hardware versions for a virtual machine. See https://kb.vmware.com/s/article/1003746 (Virtual machine hardware versions (1003746)).</div>
+ <div>The <em>version</em> enumerated type defines the valid virtual hardware versions for a virtual machine. See https://kb.vmware.com/s/article/1003746 (Virtual machine hardware versions (1003746)).</div>
</td>
</tr>
<tr>
@@ -250,7 +250,7 @@ Parameters
</ul>
</td>
<td>
- <div>The <code>version</code> defines the valid virtual hardware versions for a virtual machine. See https://kb.vmware.com/s/article/1003746 (Virtual machine hardware versions (1003746)).</div>
+ <div>The <em>version</em> enumerated type defines the valid virtual hardware versions for a virtual machine. See https://kb.vmware.com/s/article/1003746 (Virtual machine hardware versions (1003746)).</div>
</td>
</tr>
<tr>
@@ -266,7 +266,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier. This parameter is mandatory.</div>
+ <div>Virtual machine identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. This parameter is mandatory.</div>
</td>
</tr>
</table>
@@ -277,7 +278,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_parallel_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_parallel_info_module.rst
index d6526686a..216e1717e 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_parallel_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_parallel_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -68,7 +68,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual parallel port identifier. Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>Virtual parallel port identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_hardware_parallel</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -192,7 +193,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier. This parameter is mandatory.</div>
+ <div>Virtual machine identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. This parameter is mandatory.</div>
</td>
</tr>
</table>
@@ -203,7 +205,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_parallel_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_parallel_module.rst
index a5f5e06bd..cc8acbfec 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_parallel_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_parallel_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -58,6 +58,7 @@ Parameters
</td>
<td>
<div>Flag indicating whether the guest can connect and disconnect the device.</div>
+ <div>If unset, the value is unchanged.</div>
</td>
</tr>
<tr>
@@ -72,15 +73,18 @@ Parameters
<td>
</td>
<td>
- <div>Physical resource backing for the virtual parallel port. Required with <em>state=[&#x27;present&#x27;]</em></div>
+ <div>Physical resource backing for the virtual parallel port.</div>
+ <div>If unset, defaults to automatic detection of a suitable host device. Required with <em>state=[&#x27;present&#x27;]</em></div>
<div>Valid attributes are:</div>
- <div>- <code>type</code> (str): The <code>backing_type</code> defines the valid backing types for a virtual parallel port. ([&#x27;present&#x27;])</div>
+ <div>- <code>type</code> (str): This option defines the valid backing types for a virtual parallel port. ([&#x27;present&#x27;])</div>
<div>This key is required with [&#x27;present&#x27;].</div>
<div>- Accepted values:</div>
<div>- FILE</div>
<div>- HOST_DEVICE</div>
- <div>- <code>file</code> (str): Path of the file that should be used as the virtual parallel port backing. ([&#x27;present&#x27;])</div>
- <div>- <code>host_device</code> (str): Name of the device that should be used as the virtual parallel port backing. ([&#x27;present&#x27;])</div>
+ <div>- <code>file</code> (str): Path of the file that should be used as the virtual parallel port backing.</div>
+ <div>This field is optional and it is only relevant when the value of <em>type</em> is FILE. ([&#x27;present&#x27;])</div>
+ <div>- <code>host_device</code> (str): Name of the device that should be used as the virtual parallel port backing.</div>
+ <div>If unset, the virtual parallel port will be configured to automatically detect a suitable host device. ([&#x27;present&#x27;])</div>
</td>
</tr>
<tr>
@@ -110,7 +114,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual parallel port identifier. Required with <em>state=[&#x27;absent&#x27;, &#x27;connect&#x27;, &#x27;disconnect&#x27;, &#x27;present&#x27;]</em></div>
+ <div>Virtual parallel port identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_hardware_parallel</span>. Required with <em>state=[&#x27;absent&#x27;, &#x27;connect&#x27;, &#x27;disconnect&#x27;, &#x27;present&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -148,6 +153,7 @@ Parameters
</td>
<td>
<div>Flag indicating whether the virtual device should be connected whenever the virtual machine is powered on.</div>
+ <div>If unset, the value is unchanged.</div>
</td>
</tr>
<tr>
@@ -273,7 +279,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier. This parameter is mandatory.</div>
+ <div>Virtual machine identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. This parameter is mandatory.</div>
</td>
</tr>
</table>
@@ -284,7 +291,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_serial_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_serial_info_module.rst
index acee8d334..2749aecf1 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_serial_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_serial_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -68,7 +68,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual serial port identifier. Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>Virtual serial port identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_hardware_serial</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -192,7 +193,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier. This parameter is mandatory.</div>
+ <div>Virtual machine identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. This parameter is mandatory.</div>
</td>
</tr>
</table>
@@ -203,7 +205,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_serial_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_serial_module.rst
index 13f4c1e94..e04e688ae 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_serial_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_hardware_serial_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -58,6 +58,7 @@ Parameters
</td>
<td>
<div>Flag indicating whether the guest can connect and disconnect the device.</div>
+ <div>If unset, the value is unchanged.</div>
</td>
</tr>
<tr>
@@ -72,9 +73,10 @@ Parameters
<td>
</td>
<td>
- <div>Physical resource backing for the virtual serial port. Required with <em>state=[&#x27;present&#x27;]</em></div>
+ <div>Physical resource backing for the virtual serial port.</div>
+ <div>If unset, defaults to automatic detection of a suitable host device. Required with <em>state=[&#x27;present&#x27;]</em></div>
<div>Valid attributes are:</div>
- <div>- <code>type</code> (str): The <code>backing_type</code> defines the valid backing types for a virtual serial port. ([&#x27;present&#x27;])</div>
+ <div>- <code>type</code> (str): This option defines the valid backing types for a virtual serial port. ([&#x27;present&#x27;])</div>
<div>This key is required with [&#x27;present&#x27;].</div>
<div>- Accepted values:</div>
<div>- FILE</div>
@@ -83,12 +85,23 @@ Parameters
<div>- NETWORK_SERVER</div>
<div>- PIPE_CLIENT</div>
<div>- PIPE_SERVER</div>
- <div>- <code>file</code> (str): Path of the file backing the virtual serial port. ([&#x27;present&#x27;])</div>
- <div>- <code>host_device</code> (str): Name of the device backing the virtual serial port. ([&#x27;present&#x27;])</div>
- <div>- <code>pipe</code> (str): Name of the pipe backing the virtual serial port. ([&#x27;present&#x27;])</div>
- <div>- <code>no_rx_loss</code> (bool): Flag that enables optimized data transfer over the pipe. When the value is true, the host buffers data to prevent data overrun. This allows the virtual machine to read all of the data transferred over the pipe with no data loss. ([&#x27;present&#x27;])</div>
- <div>- <code>network_location</code> (str): URI specifying the location of the network service backing the virtual serial port. &lt;ul&gt; &lt;li&gt;If {@link #type} is {@link BackingType#NETWORK_SERVER}, this field is the location used by clients to connect to this server. The hostname part of the URI should either be empty or should specify the address of the host on which the virtual machine is running.&lt;/li&gt; &lt;li&gt;If {@link #type} is {@link BackingType#NETWORK_CLIENT}, this field is the location used by the virtual machine to connect to the remote server.&lt;/li&gt; &lt;/ul&gt; ([&#x27;present&#x27;])</div>
- <div>- <code>proxy</code> (str): Proxy service that provides network access to the network backing. If set, the virtual machine initiates a connection with the proxy service and forwards the traffic to the proxy. ([&#x27;present&#x27;])</div>
+ <div>- <code>file</code> (str): Path of the file backing the virtual serial port.</div>
+ <div>This field is optional and it is only relevant when the value of <em>type</em> is FILE. ([&#x27;present&#x27;])</div>
+ <div>- <code>host_device</code> (str): Name of the device backing the virtual serial port.</div>
+ <div></div>
+ <div></div>
+ <div>If unset, the virtual serial port will be configured to automatically detect a suitable host device. ([&#x27;present&#x27;])</div>
+ <div>- <code>pipe</code> (str): Name of the pipe backing the virtual serial port.</div>
+ <div>This field is optional and it is only relevant when the value of <em>type</em> is one of PIPE_SERVER or PIPE_CLIENT. ([&#x27;present&#x27;])</div>
+ <div>- <code>no_rx_loss</code> (bool): Flag that enables optimized data transfer over the pipe. When the value is true, the host buffers data to prevent data overrun. This allows the virtual machine to read all of the data transferred over the pipe with no data loss.</div>
+ <div>If unset, defaults to false. ([&#x27;present&#x27;])</div>
+ <div>- <code>network_location</code> (str): URI specifying the location of the network service backing the virtual serial port.</div>
+ <div>- If <em>type</em> is NETWORK_SERVER, this field is the location used by clients to connect to this server. The hostname part of the URI should either be empty or should specify the address of the host on which the virtual machine is running.</div>
+ <div>- If <em>type</em> is NETWORK_CLIENT, this field is the location used by the virtual machine to connect to the remote server.</div>
+ <div></div>
+ <div>This field is optional and it is only relevant when the value of <em>type</em> is one of NETWORK_SERVER or NETWORK_CLIENT. ([&#x27;present&#x27;])</div>
+ <div>- <code>proxy</code> (str): Proxy service that provides network access to the network backing. If set, the virtual machine initiates a connection with the proxy service and forwards the traffic to the proxy.</div>
+ <div>If unset, no proxy service should be used. ([&#x27;present&#x27;])</div>
</td>
</tr>
<tr>
@@ -118,7 +131,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual serial port identifier. Required with <em>state=[&#x27;absent&#x27;, &#x27;connect&#x27;, &#x27;disconnect&#x27;, &#x27;present&#x27;]</em></div>
+ <div>Virtual serial port identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_hardware_serial</span>. Required with <em>state=[&#x27;absent&#x27;, &#x27;connect&#x27;, &#x27;disconnect&#x27;, &#x27;present&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -156,6 +170,7 @@ Parameters
</td>
<td>
<div>Flag indicating whether the virtual device should be connected whenever the virtual machine is powered on.</div>
+ <div>If unset, the value is unchanged.</div>
</td>
</tr>
<tr>
@@ -281,7 +296,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier. This parameter is mandatory.</div>
+ <div>Virtual machine identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. This parameter is mandatory.</div>
</td>
</tr>
<tr>
@@ -300,7 +316,10 @@ Parameters
</ul>
</td>
<td>
- <div>CPU yield behavior. If set to true, the virtual machine will periodically relinquish the processor if its sole task is polling the virtual serial port. The amount of time it takes to regain the processor will depend on the degree of other virtual machine activity on the host. This field may be modified at any time, and changes applied to a connected virtual serial port take effect immediately.</div>
+ <div>CPU yield behavior. If set to true, the virtual machine will periodically relinquish the processor if its sole task is polling the virtual serial port. The amount of time it takes to regain the processor will depend on the degree of other virtual machine activity on the host.</div>
+ <div>This field may be modified at any time, and changes applied to a connected virtual serial port take effect immediately.</div>
+ <div></div>
+ <div>If unset, the value is unchanged.</div>
</td>
</tr>
</table>
@@ -311,7 +330,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_info_module.rst
index 14cc074cc..512177c81 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -55,6 +55,8 @@ Parameters
</td>
<td>
<div>Clusters that must contain the virtual machine for the virtual machine to match the filter.</div>
+ <div>If unset or empty, virtual machines in any cluster match the filter.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_cluster_info</span>.</div>
</td>
</tr>
<tr>
@@ -71,6 +73,8 @@ Parameters
</td>
<td>
<div>Datacenters that must contain the virtual machine for the virtual machine to match the filter.</div>
+ <div>If unset or empty, virtual machines in any datacenter match the filter.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_datacenter_info</span>.</div>
<div style="font-size: small; color: darkgreen"><br/>aliases: filter_datacenters</div>
</td>
</tr>
@@ -88,6 +92,8 @@ Parameters
</td>
<td>
<div>Folders that must contain the virtual machine for the virtual machine to match the filter.</div>
+ <div>If unset or empty, virtual machines in any folder match the filter.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_folder_info</span>.</div>
<div style="font-size: small; color: darkgreen"><br/>aliases: filter_folders</div>
</td>
</tr>
@@ -105,6 +111,8 @@ Parameters
</td>
<td>
<div>Hosts that must contain the virtual machine for the virtual machine to match the filter.</div>
+ <div>If unset or empty, virtual machines on any host match the filter.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_host_info</span>.</div>
</td>
</tr>
<tr>
@@ -120,7 +128,8 @@ Parameters
<td>
</td>
<td>
- <div>Names that virtual machines must have to match the filter (see {@link Info#name}).</div>
+ <div>Names that virtual machines must have to match the filter (see <em>name</em>).</div>
+ <div>If unset or empty, virtual machines with any name match the filter.</div>
<div style="font-size: small; color: darkgreen"><br/>aliases: filter_names</div>
</td>
</tr>
@@ -137,7 +146,8 @@ Parameters
<td>
</td>
<td>
- <div>Power states that a virtual machine must be in to match the filter (see {@link <em>info</em>#state}.</div>
+ <div>Power states that a virtual machine must be in to match the filter (see I()</div>
+ <div>If unset or empty, virtual machines in any power state match the filter.</div>
</td>
</tr>
<tr>
@@ -154,6 +164,8 @@ Parameters
</td>
<td>
<div>Resource pools that must contain the virtual machine for the virtual machine to match the filter.</div>
+ <div>If unset or empty, virtual machines in any resource pool match the filter.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_resourcepool_info</span>.</div>
</td>
</tr>
<tr>
@@ -276,7 +288,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier. Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>Virtual machine identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -293,6 +306,8 @@ Parameters
</td>
<td>
<div>Identifiers of virtual machines that can match the filter.</div>
+ <div>If unset or empty, virtual machines with any identifier match the filter.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>.</div>
</td>
</tr>
</table>
@@ -303,7 +318,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_libraryitem_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_libraryitem_info_module.rst
index e244a4423..bcb66ccdc 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_libraryitem_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_libraryitem_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -161,7 +161,8 @@ Parameters
<td>
</td>
<td>
- <div>Identifier of the virtual machine. Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>Identifier of the virtual machine.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
</table>
@@ -172,7 +173,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_module.rst
index dccbf0408..3911f62d6 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -54,6 +54,7 @@ Parameters
</td>
<td>
<div>128-bit SMBIOS UUID of a virtual machine represented as a hexadecimal string in &quot;12345678-abcd-1234-cdef-123456789abc&quot; format.</div>
+ <div>If unset, will be generated.</div>
</td>
</tr>
<tr>
@@ -69,20 +70,26 @@ Parameters
</td>
<td>
<div>Boot configuration.</div>
+ <div>If unset, guest-specific default values will be used.</div>
<div>Valid attributes are:</div>
- <div>- <code>type</code> (str): The <code>type</code> defines the valid firmware types for a virtual machine. ([&#x27;present&#x27;])</div>
+ <div>- <code>type</code> (str): This option defines the valid firmware types for a virtual machine. ([&#x27;present&#x27;])</div>
<div>- Accepted values:</div>
<div>- BIOS</div>
<div>- EFI</div>
- <div>- <code>efi_legacy_boot</code> (bool): Flag indicating whether to use EFI legacy boot mode. ([&#x27;present&#x27;])</div>
- <div>- <code>network_protocol</code> (str): The <code>network_protocol</code> defines the valid network boot protocols supported when booting a virtual machine with {@link Type#EFI} firmware over the network. ([&#x27;present&#x27;])</div>
+ <div>- <code>efi_legacy_boot</code> (bool): Flag indicating whether to use EFI legacy boot mode.</div>
+ <div>If unset, defaults to value that is recommended for the guest OS and is supported for the virtual hardware version. ([&#x27;present&#x27;])</div>
+ <div>- <code>network_protocol</code> (str): This option defines the valid network boot protocols supported when booting a virtual machine with EFI firmware over the network. ([&#x27;present&#x27;])</div>
<div>- Accepted values:</div>
<div>- IPV4</div>
<div>- IPV6</div>
- <div>- <code>delay</code> (int): Delay in milliseconds before beginning the firmware boot process when the virtual machine is powered on. This delay may be used to provide a time window for users to connect to the virtual machine console and enter BIOS setup mode. ([&#x27;present&#x27;])</div>
- <div>- <code>retry</code> (bool): Flag indicating whether the virtual machine should automatically retry the boot process after a failure. ([&#x27;present&#x27;])</div>
- <div>- <code>retry_delay</code> (int): Delay in milliseconds before retrying the boot process after a failure; applicable only when {@link Info#retry} is true. ([&#x27;present&#x27;])</div>
- <div>- <code>enter_setup_mode</code> (bool): Flag indicating whether the firmware boot process should automatically enter setup mode the next time the virtual machine boots. Note that this flag will automatically be reset to false once the virtual machine enters setup mode. ([&#x27;present&#x27;])</div>
+ <div>- <code>delay</code> (int): Delay in milliseconds before beginning the firmware boot process when the virtual machine is powered on. This delay may be used to provide a time window for users to connect to the virtual machine console and enter BIOS setup mode.</div>
+ <div>If unset, default value is 0. ([&#x27;present&#x27;])</div>
+ <div>- <code>retry</code> (bool): Flag indicating whether the virtual machine should automatically retry the boot process after a failure.</div>
+ <div>If unset, default value is false. ([&#x27;present&#x27;])</div>
+ <div>- <code>retry_delay</code> (int): Delay in milliseconds before retrying the boot process after a failure; applicable only when <em>retry</em> is true.</div>
+ <div>If unset, default value is 10000. ([&#x27;present&#x27;])</div>
+ <div>- <code>enter_setup_mode</code> (bool): Flag indicating whether the firmware boot process should automatically enter setup mode the next time the virtual machine boots. Note that this flag will automatically be reset to false once the virtual machine enters setup mode.</div>
+ <div>If unset, the value is unchanged. ([&#x27;present&#x27;])</div>
</td>
</tr>
<tr>
@@ -99,8 +106,9 @@ Parameters
</td>
<td>
<div>Boot device configuration.</div>
+ <div>If unset, a server-specific boot sequence will be used.</div>
<div>Valid attributes are:</div>
- <div>- <code>type</code> (str): The <code>type</code> defines the valid device types that may be used as bootable devices. ([&#x27;present&#x27;])</div>
+ <div>- <code>type</code> (str): This option defines the valid device types that may be used as bootable devices. ([&#x27;present&#x27;])</div>
<div>This key is required with [&#x27;present&#x27;].</div>
<div>- Accepted values:</div>
<div>- CDROM</div>
@@ -123,35 +131,46 @@ Parameters
</td>
<td>
<div>List of CD-ROMs.</div>
+ <div>If unset, no CD-ROM devices will be created.</div>
<div>Valid attributes are:</div>
- <div>- <code>type</code> (str): The <code>host_bus_adapter_type</code> defines the valid types of host bus adapters that may be used for attaching a Cdrom to a virtual machine. ([&#x27;present&#x27;])</div>
+ <div>- <code>type</code> (str): This option defines the valid types of host bus adapters that may be used for attaching a Cdrom to a virtual machine. ([&#x27;present&#x27;])</div>
<div>- Accepted values:</div>
<div>- IDE</div>
<div>- SATA</div>
- <div>- <code>ide</code> (dict): Address for attaching the device to a virtual IDE adapter. ([&#x27;present&#x27;])</div>
+ <div>- <code>ide</code> (dict): Address for attaching the device to a virtual IDE adapter.</div>
+ <div>If unset, the server will choose an available address; if none is available, the request will fail. ([&#x27;present&#x27;])</div>
<div>- Accepted keys:</div>
<div>- primary (boolean): Flag specifying whether the device should be attached to the primary or secondary IDE adapter of the virtual machine.</div>
+ <div>If unset, the server will choose a adapter with an available connection. If no IDE connections are available, the request will be rejected.</div>
<div>- master (boolean): Flag specifying whether the device should be the master or slave device on the IDE adapter.</div>
- <div>- <code>sata</code> (dict): Address for attaching the device to a virtual SATA adapter. ([&#x27;present&#x27;])</div>
+ <div>If unset, the server will choose an available connection type. If no IDE connections are available, the request will be rejected.</div>
+ <div>- <code>sata</code> (dict): Address for attaching the device to a virtual SATA adapter.</div>
+ <div>If unset, the server will choose an available address; if none is available, the request will fail. ([&#x27;present&#x27;])</div>
<div>- Accepted keys:</div>
<div>- bus (integer): Bus number of the adapter to which the device should be attached.</div>
<div>- unit (integer): Unit number of the device.</div>
- <div>- <code>backing</code> (dict): Physical resource backing for the virtual CD-ROM device. ([&#x27;present&#x27;])</div>
+ <div>If unset, the server will choose an available unit number on the specified adapter. If there are no available connections on the adapter, the request will be rejected.</div>
+ <div>- <code>backing</code> (dict): Physical resource backing for the virtual CD-ROM device.</div>
+ <div>If unset, defaults to automatic detection of a suitable host device. ([&#x27;present&#x27;])</div>
<div>- Accepted keys:</div>
- <div>- type (string): The <code>backing_type</code> defines the valid backing types for a virtual CD-ROM device.</div>
+ <div>- type (string): This option defines the valid backing types for a virtual CD-ROM device.</div>
<div>Accepted value for this field:</div>
<div>- <code>CLIENT_DEVICE</code></div>
<div>- <code>HOST_DEVICE</code></div>
<div>- <code>ISO_FILE</code></div>
<div>- iso_file (string): Path of the image file that should be used as the virtual CD-ROM device backing.</div>
+ <div>This field is optional and it is only relevant when the value of <em>type</em> is ISO_FILE.</div>
<div>- host_device (string): Name of the device that should be used as the virtual CD-ROM device backing.</div>
- <div>- device_access_type (string): The <code>device_access_type</code> defines the valid device access types for a physical device packing of a virtual CD-ROM device.</div>
+ <div>If unset, the virtual CD-ROM device will be configured to automatically detect a suitable host device.</div>
+ <div>- device_access_type (string): This option defines the valid device access types for a physical device packing of a virtual CD-ROM device.</div>
<div>Accepted value for this field:</div>
<div>- <code>EMULATION</code></div>
<div>- <code>PASSTHRU</code></div>
<div>- <code>PASSTHRU_EXCLUSIVE</code></div>
- <div>- <code>start_connected</code> (bool): Flag indicating whether the virtual device should be connected whenever the virtual machine is powered on. ([&#x27;present&#x27;])</div>
- <div>- <code>allow_guest_control</code> (bool): Flag indicating whether the guest can connect and disconnect the device. ([&#x27;present&#x27;])</div>
+ <div>- <code>start_connected</code> (bool): Flag indicating whether the virtual device should be connected whenever the virtual machine is powered on.</div>
+ <div>Defaults to false if unset. ([&#x27;present&#x27;])</div>
+ <div>- <code>allow_guest_control</code> (bool): Flag indicating whether the guest can connect and disconnect the device.</div>
+ <div>Defaults to false if unset. ([&#x27;present&#x27;])</div>
</td>
</tr>
<tr>
@@ -167,11 +186,24 @@ Parameters
</td>
<td>
<div>CPU configuration.</div>
+ <div>If unset, guest-specific default values will be used.</div>
<div>Valid attributes are:</div>
- <div>- <code>count</code> (int): New number of CPU cores. The number of CPU cores in the virtual machine must be a multiple of the number of cores per socket. The supported range of CPU counts is constrained by the configured guest operating system and virtual hardware version of the virtual machine. If the virtual machine is running, the number of CPU cores may only be increased if {@link Info#hotAddEnabled} is true, and may only be decreased if {@link Info#hotRemoveEnabled} is true. ([&#x27;present&#x27;])</div>
- <div>- <code>cores_per_socket</code> (int): New number of CPU cores per socket. The number of CPU cores in the virtual machine must be a multiple of the number of cores per socket. ([&#x27;present&#x27;])</div>
- <div>- <code>hot_add_enabled</code> (bool): Flag indicating whether adding CPUs while the virtual machine is running is enabled. This field may only be modified if the virtual machine is powered off. ([&#x27;present&#x27;])</div>
- <div>- <code>hot_remove_enabled</code> (bool): Flag indicating whether removing CPUs while the virtual machine is running is enabled. This field may only be modified if the virtual machine is powered off. ([&#x27;present&#x27;])</div>
+ <div>- <code>count</code> (int): New number of CPU cores. The number of CPU cores in the virtual machine must be a multiple of the number of cores per socket.</div>
+ <div>The supported range of CPU counts is constrained by the configured guest operating system and virtual hardware version of the virtual machine.</div>
+ <div></div>
+ <div>If the virtual machine is running, the number of CPU cores may only be increased if <em>hot_add_enabled</em> is true, and may only be decreased if <em>hot_remove_enabled</em> is true.</div>
+ <div></div>
+ <div>If unset, the value is unchanged. ([&#x27;present&#x27;])</div>
+ <div>- <code>cores_per_socket</code> (int): New number of CPU cores per socket. The number of CPU cores in the virtual machine must be a multiple of the number of cores per socket.</div>
+ <div>If unset, the value is unchanged. ([&#x27;present&#x27;])</div>
+ <div>- <code>hot_add_enabled</code> (bool): Flag indicating whether adding CPUs while the virtual machine is running is enabled.</div>
+ <div>This field may only be modified if the virtual machine is powered off.</div>
+ <div></div>
+ <div>If unset, the value is unchanged. ([&#x27;present&#x27;])</div>
+ <div>- <code>hot_remove_enabled</code> (bool): Flag indicating whether removing CPUs while the virtual machine is running is enabled.</div>
+ <div>This field may only be modified if the virtual machine is powered off.</div>
+ <div></div>
+ <div>If unset, the value is unchanged. ([&#x27;present&#x27;])</div>
</td>
</tr>
<tr>
@@ -187,6 +219,8 @@ Parameters
</td>
<td>
<div>Identifier of the datastore on which the virtual machine&#x27;s configuration state is stored.</div>
+ <div>If unset, <em>path</em> must also be unset and <em>datastore_path</em> must be set.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_datastore_info</span>.</div>
</td>
</tr>
<tr>
@@ -201,7 +235,8 @@ Parameters
<td>
</td>
<td>
- <div>Datastore path for the virtual machine&#x27;s configuration file in the format &quot;[datastore name] path&quot;. For example &quot;[storage1] Test-VM/Test-VM.vmx&quot;.</div>
+ <div>Datastore path for the virtual machine&#x27;s configuration file in the format &quot;[datastore name] path&quot;. For example &quot;[storage1] Test-VM/Test-VM.vmx&quot;.</div>
+ <div>If unset, both <em>datastore</em> and <em>path</em> must be set.</div>
</td>
</tr>
<tr>
@@ -221,6 +256,7 @@ Parameters
</td>
<td>
<div>Indicates whether all NICs on the destination virtual machine should be disconnected from the newtwork</div>
+ <div>If unset, connection status of all NICs on the destination virtual machine will be the same as on the source virtual machine.</div>
</td>
</tr>
<tr>
@@ -237,35 +273,57 @@ Parameters
</td>
<td>
<div>Individual disk relocation map.</div>
+ <div>If unset, all disks will migrate to the datastore specified in the <em>datastore</em> field of I()</div>
+ <div>When clients pass a value of this structure as a parameter, the key in the field map must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_hardware_disk</span>.</div>
<div>Valid attributes are:</div>
- <div>- <code>type</code> (str): The <code>host_bus_adapter_type</code> defines the valid types of host bus adapters that may be used for attaching a virtual storage device to a virtual machine. ([&#x27;present&#x27;])</div>
+ <div>- <code>type</code> (str): This option defines the valid types of host bus adapters that may be used for attaching a virtual storage device to a virtual machine. ([&#x27;present&#x27;])</div>
<div>- Accepted values:</div>
<div>- IDE</div>
+ <div>- NVME</div>
<div>- SATA</div>
<div>- SCSI</div>
- <div>- <code>ide</code> (dict): Address for attaching the device to a virtual IDE adapter. ([&#x27;present&#x27;])</div>
+ <div>- <code>ide</code> (dict): Address for attaching the device to a virtual IDE adapter.</div>
+ <div>If unset, the server will choose an available address; if none is available, the request will fail. ([&#x27;present&#x27;])</div>
<div>- Accepted keys:</div>
<div>- primary (boolean): Flag specifying whether the device should be attached to the primary or secondary IDE adapter of the virtual machine.</div>
+ <div>If unset, the server will choose a adapter with an available connection. If no IDE connections are available, the request will be rejected.</div>
<div>- master (boolean): Flag specifying whether the device should be the master or slave device on the IDE adapter.</div>
- <div>- <code>scsi</code> (dict): Address for attaching the device to a virtual SCSI adapter. ([&#x27;present&#x27;])</div>
+ <div>If unset, the server will choose an available connection type. If no IDE connections are available, the request will be rejected.</div>
+ <div>- <code>scsi</code> (dict): Address for attaching the device to a virtual SCSI adapter.</div>
+ <div>If unset, the server will choose an available address; if none is available, the request will fail. ([&#x27;present&#x27;])</div>
<div>- Accepted keys:</div>
<div>- bus (integer): Bus number of the adapter to which the device should be attached.</div>
<div>- unit (integer): Unit number of the device.</div>
- <div>- <code>sata</code> (dict): Address for attaching the device to a virtual SATA adapter. ([&#x27;present&#x27;])</div>
+ <div>If unset, the server will choose an available unit number on the specified adapter. If there are no available connections on the adapter, the request will be rejected.</div>
+ <div>- <code>sata</code> (dict): Address for attaching the device to a virtual SATA adapter.</div>
+ <div>If unset, the server will choose an available address; if none is available, the request will fail. ([&#x27;present&#x27;])</div>
<div>- Accepted keys:</div>
<div>- bus (integer): Bus number of the adapter to which the device should be attached.</div>
<div>- unit (integer): Unit number of the device.</div>
- <div>- <code>backing</code> (dict): Existing physical resource backing for the virtual disk. Exactly one of <code>#backing</code> or <code>#new_vmdk</code> must be specified. ([&#x27;present&#x27;])</div>
+ <div>If unset, the server will choose an available unit number on the specified adapter. If there are no available connections on the adapter, the request will be rejected.</div>
+ <div>- <code>nvme</code> (dict): Address for attaching the device to a virtual NVMe adapter.</div>
+ <div>If unset, the server will choose an available address; if none is available, the request will fail. ([&#x27;present&#x27;])</div>
<div>- Accepted keys:</div>
- <div>- type (string): The <code>backing_type</code> defines the valid backing types for a virtual disk.</div>
+ <div>- bus (integer): Bus number of the adapter to which the device should be attached.</div>
+ <div>- unit (integer): Unit number of the device.</div>
+ <div>If unset, the server will choose an available unit number on the specified adapter. If there are no available connections on the adapter, the request will be rejected.</div>
+ <div>- <code>backing</code> (dict): Existing physical resource backing for the virtual disk. Exactly one of <em>backing</em> or <em>new_vmdk</em> must be specified.</div>
+ <div>If unset, the virtual disk will not be connected to an existing backing. ([&#x27;present&#x27;])</div>
+ <div>- Accepted keys:</div>
+ <div>- type (string): This option defines the valid backing types for a virtual disk.</div>
<div>Accepted value for this field:</div>
<div>- <code>VMDK_FILE</code></div>
<div>- vmdk_file (string): Path of the VMDK file backing the virtual disk.</div>
- <div>- <code>new_vmdk</code> (dict): Specification for creating a new VMDK backing for the virtual disk. Exactly one of <code>#backing</code> or <code>#new_vmdk</code> must be specified. ([&#x27;present&#x27;])</div>
+ <div>This field is optional and it is only relevant when the value of <em>type</em> is VMDK_FILE.</div>
+ <div>- <code>new_vmdk</code> (dict): Specification for creating a new VMDK backing for the virtual disk. Exactly one of <em>backing</em> or <em>new_vmdk</em> must be specified.</div>
+ <div>If unset, a new VMDK backing will not be created. ([&#x27;present&#x27;])</div>
<div>- Accepted keys:</div>
- <div>- name (string): Base name of the VMDK file. The name should not include the &#x27;.vmdk&#x27; file extension.</div>
+ <div>- name (string): Base name of the VMDK file. The name should not include the &#x27;.vmdk&#x27; file extension.</div>
+ <div>If unset, a name (derived from the name of the virtual machine) will be chosen by the server.</div>
<div>- capacity (integer): Capacity of the virtual disk backing in bytes.</div>
- <div>- storage_policy (object): The <code>storage_policy_spec</code> {@term structure} contains information about the storage policy that is to be associated the with VMDK file.</div>
+ <div>If unset, defaults to a guest-specific capacity.</div>
+ <div>- storage_policy (object): The <em>storage_policy_spec</em> structure contains information about the storage policy that is to be associated the with VMDK file.</div>
+ <div>If unset the default storage policy of the target datastore (if applicable) is applied. Currently a default storage policy is only supported by object based datastores : VVol &amp; vSAN. For non- object datastores, if unset then no storage policy would be associated with the VMDK file.</div>
</td>
</tr>
<tr>
@@ -282,6 +340,8 @@ Parameters
</td>
<td>
<div>Set of Disks to Remove.</div>
+ <div>If unset, all disks will be copied. If the same identifier is in <em>disks_to_update</em> InvalidArgument fault will be returned.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_vm_hardware_disk</span>.</div>
</td>
</tr>
<tr>
@@ -297,6 +357,8 @@ Parameters
</td>
<td>
<div>Map of Disks to Update.</div>
+ <div>If unset, all disks will copied to the datastore specified in the <em>datastore</em> field of I() If the same identifier is in <em>disks_to_remove</em> InvalidArgument fault will be thrown.</div>
+ <div>When clients pass a value of this structure as a parameter, the key in the field map must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_hardware_disk</span>.</div>
</td>
</tr>
<tr>
@@ -313,18 +375,24 @@ Parameters
</td>
<td>
<div>List of floppy drives.</div>
+ <div>If unset, no floppy drives will be created.</div>
<div>Valid attributes are:</div>
- <div>- <code>backing</code> (dict): Physical resource backing for the virtual floppy drive. ([&#x27;present&#x27;])</div>
+ <div>- <code>backing</code> (dict): Physical resource backing for the virtual floppy drive.</div>
+ <div>If unset, defaults to automatic detection of a suitable host device. ([&#x27;present&#x27;])</div>
<div>- Accepted keys:</div>
- <div>- type (string): The <code>backing_type</code> defines the valid backing types for a virtual floppy drive.</div>
+ <div>- type (string): This option defines the valid backing types for a virtual floppy drive.</div>
<div>Accepted value for this field:</div>
<div>- <code>CLIENT_DEVICE</code></div>
<div>- <code>HOST_DEVICE</code></div>
<div>- <code>IMAGE_FILE</code></div>
<div>- image_file (string): Path of the image file that should be used as the virtual floppy drive backing.</div>
+ <div>This field is optional and it is only relevant when the value of <em>type</em> is IMAGE_FILE.</div>
<div>- host_device (string): Name of the device that should be used as the virtual floppy drive backing.</div>
- <div>- <code>start_connected</code> (bool): Flag indicating whether the virtual device should be connected whenever the virtual machine is powered on. ([&#x27;present&#x27;])</div>
- <div>- <code>allow_guest_control</code> (bool): Flag indicating whether the guest can connect and disconnect the device. ([&#x27;present&#x27;])</div>
+ <div>If unset, the virtual floppy drive will be configured to automatically detect a suitable host device.</div>
+ <div>- <code>start_connected</code> (bool): Flag indicating whether the virtual device should be connected whenever the virtual machine is powered on.</div>
+ <div>Defaults to false if unset. ([&#x27;present&#x27;])</div>
+ <div>- <code>allow_guest_control</code> (bool): Flag indicating whether the guest can connect and disconnect the device.</div>
+ <div>Defaults to false if unset. ([&#x27;present&#x27;])</div>
</td>
</tr>
<tr>
@@ -340,8 +408,10 @@ Parameters
</td>
<td>
<div>Guest customization spec to apply to the virtual machine after the virtual machine is deployed.</div>
+ <div>If unset, the guest operating system is not customized after clone.</div>
<div>Valid attributes are:</div>
- <div>- <code>name</code> (str): Name of the customization specification. ([&#x27;clone&#x27;])</div>
+ <div>- <code>name</code> (str): Name of the customization specification.</div>
+ <div>If unset, no guest customization is performed. ([&#x27;clone&#x27;])</div>
</td>
</tr>
<tr>
@@ -539,7 +609,7 @@ Parameters
</ul>
</td>
<td>
- <div>The <code>guest_o_s</code> defines the valid guest operating system types used for configuring a virtual machine. Required with <em>state=[&#x27;present&#x27;]</em></div>
+ <div>The GuestOS enumerated type defines the valid guest operating system types used for configuring a virtual machine. Required with <em>state=[&#x27;present&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -572,7 +642,7 @@ Parameters
</ul>
</td>
<td>
- <div>The <code>version</code> defines the valid virtual hardware versions for a virtual machine. See https://kb.vmware.com/s/article/1003746 (Virtual machine hardware versions (1003746)).</div>
+ <div>The <em>version</em> enumerated type defines the valid virtual hardware versions for a virtual machine. See https://kb.vmware.com/s/article/1003746 (Virtual machine hardware versions (1003746)).</div>
</td>
</tr>
<tr>
@@ -588,9 +658,20 @@ Parameters
</td>
<td>
<div>Memory configuration.</div>
+ <div>If unset, guest-specific default values will be used.</div>
<div>Valid attributes are:</div>
- <div>- <code>size_MiB</code> (int): New memory size in mebibytes. The supported range of memory sizes is constrained by the configured guest operating system and virtual hardware version of the virtual machine. If the virtual machine is running, this value may only be changed if {@link Info#hotAddEnabled} is true, and the new memory size must satisfy the constraints specified by {@link Info#hotAddIncrementSizeMiB} and {@link Info#hotAddLimitMiB}. ([&#x27;present&#x27;])</div>
- <div>- <code>hot_add_enabled</code> (bool): Flag indicating whether adding memory while the virtual machine is running should be enabled. Some guest operating systems may consume more resources or perform less efficiently when they run on hardware that supports adding memory while the machine is running. This field may only be modified if the virtual machine is not powered on. ([&#x27;present&#x27;])</div>
+ <div>- <code>size_MiB</code> (int): New memory size in mebibytes.</div>
+ <div>The supported range of memory sizes is constrained by the configured guest operating system and virtual hardware version of the virtual machine.</div>
+ <div></div>
+ <div>If the virtual machine is running, this value may only be changed if <em>hot_add_enabled</em> is true, and the new memory size must satisfy the constraints specified by <em>hot_add_increment_size_mib</em> and I()</div>
+ <div></div>
+ <div>If unset, the value is unchanged. ([&#x27;present&#x27;])</div>
+ <div>- <code>hot_add_enabled</code> (bool): Flag indicating whether adding memory while the virtual machine is running should be enabled.</div>
+ <div>Some guest operating systems may consume more resources or perform less efficiently when they run on hardware that supports adding memory while the machine is running.</div>
+ <div></div>
+ <div>This field may only be modified if the virtual machine is not powered on.</div>
+ <div></div>
+ <div>If unset, the value is unchanged. ([&#x27;present&#x27;])</div>
</td>
</tr>
<tr>
@@ -605,7 +686,8 @@ Parameters
<td>
</td>
<td>
- <div>Name of the new virtual machine.</div>
+ <div>Virtual machine name.</div>
+ <div>If unset, the display name from the virtual machine&#x27;s configuration file will be used.</div>
</td>
</tr>
<tr>
@@ -622,8 +704,9 @@ Parameters
</td>
<td>
<div>List of Ethernet adapters.</div>
+ <div>If unset, no Ethernet adapters will be created.</div>
<div>Valid attributes are:</div>
- <div>- <code>type</code> (str): The <code>emulation_type</code> defines the valid emulation types for a virtual Ethernet adapter. ([&#x27;present&#x27;])</div>
+ <div>- <code>type</code> (str): This option defines the valid emulation types for a virtual Ethernet adapter. ([&#x27;present&#x27;])</div>
<div>- Accepted values:</div>
<div>- E1000</div>
<div>- E1000E</div>
@@ -631,27 +714,37 @@ Parameters
<div>- VMXNET</div>
<div>- VMXNET2</div>
<div>- VMXNET3</div>
- <div>- <code>upt_compatibility_enabled</code> (bool): Flag indicating whether Universal Pass-Through (UPT) compatibility is enabled on this virtual Ethernet adapter. ([&#x27;present&#x27;])</div>
- <div>- <code>mac_type</code> (str): The <code>mac_address_type</code> defines the valid MAC address origins for a virtual Ethernet adapter. ([&#x27;present&#x27;])</div>
+ <div>- <code>upt_compatibility_enabled</code> (bool): Flag indicating whether Universal Pass-Through (UPT) compatibility is enabled on this virtual Ethernet adapter.</div>
+ <div>If unset, defaults to false. ([&#x27;present&#x27;])</div>
+ <div>- <code>mac_type</code> (str): This option defines the valid MAC address origins for a virtual Ethernet adapter. ([&#x27;present&#x27;])</div>
<div>- Accepted values:</div>
<div>- ASSIGNED</div>
<div>- GENERATED</div>
<div>- MANUAL</div>
- <div>- <code>mac_address</code> (str): MAC address. ([&#x27;present&#x27;])</div>
- <div>- <code>pci_slot_number</code> (int): Address of the virtual Ethernet adapter on the PCI bus. If the PCI address is invalid, the server will change when it the VM is started or as the device is hot added. ([&#x27;present&#x27;])</div>
- <div>- <code>wake_on_lan_enabled</code> (bool): Flag indicating whether wake-on-LAN is enabled on this virtual Ethernet adapter. ([&#x27;present&#x27;])</div>
- <div>- <code>backing</code> (dict): Physical resource backing for the virtual Ethernet adapter. ([&#x27;present&#x27;])</div>
+ <div>- <code>mac_address</code> (str): MAC address.</div>
+ <div>Workaround for PR1459647 ([&#x27;present&#x27;])</div>
+ <div>- <code>pci_slot_number</code> (int): Address of the virtual Ethernet adapter on the PCI bus. If the PCI address is invalid, the server will change when it the VM is started or as the device is hot added.</div>
+ <div>If unset, the server will choose an available address when the virtual machine is powered on. ([&#x27;present&#x27;])</div>
+ <div>- <code>wake_on_lan_enabled</code> (bool): Flag indicating whether wake-on-LAN is enabled on this virtual Ethernet adapter.</div>
+ <div>Defaults to false if unset. ([&#x27;present&#x27;])</div>
+ <div>- <code>backing</code> (dict): Physical resource backing for the virtual Ethernet adapter.</div>
+ <div>If unset, the system may try to find an appropriate backing. If one is not found, the request will fail. ([&#x27;present&#x27;])</div>
<div>- Accepted keys:</div>
- <div>- type (string): The <code>backing_type</code> defines the valid backing types for a virtual Ethernet adapter.</div>
+ <div>- type (string): This option defines the valid backing types for a virtual Ethernet adapter.</div>
<div>Accepted value for this field:</div>
<div>- <code>DISTRIBUTED_PORTGROUP</code></div>
<div>- <code>HOST_DEVICE</code></div>
<div>- <code>OPAQUE_NETWORK</code></div>
<div>- <code>STANDARD_PORTGROUP</code></div>
<div>- network (string): Identifier of the network that backs the virtual Ethernet adapter.</div>
- <div>- distributed_port (string): Key of the distributed virtual port that backs the virtual Ethernet adapter. Depending on the type of the Portgroup, the port may be specified using this field. If the portgroup type is early-binding (also known as static), a port is assigned when the Ethernet adapter is configured to use the port. The port may be either automatically or specifically assigned based on the value of this field. If the portgroup type is ephemeral, the port is created and assigned to a virtual machine when it is powered on and the Ethernet adapter is connected. This field cannot be specified as no free ports exist before use.</div>
- <div>- <code>start_connected</code> (bool): Flag indicating whether the virtual device should be connected whenever the virtual machine is powered on. ([&#x27;present&#x27;])</div>
- <div>- <code>allow_guest_control</code> (bool): Flag indicating whether the guest can connect and disconnect the device. ([&#x27;present&#x27;])</div>
+ <div>This field is optional and it is only relevant when the value of <em>type</em> is one of STANDARD_PORTGROUP, DISTRIBUTED_PORTGROUP, or OPAQUE_NETWORK.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_network_info</span>.</div>
+ <div>- distributed_port (string): Key of the distributed virtual port that backs the virtual Ethernet adapter. Depending on the type of the Portgroup, the port may be specified using this field. If the portgroup type is early-binding (also known as static), a port is assigned when the Ethernet adapter is configured to use the port. The port may be either automatically or specifically assigned based on the value of this field. If the portgroup type is ephemeral, the port is created and assigned to a virtual machine when it is powered on and the Ethernet adapter is connected. This field cannot be specified as no free ports exist before use.</div>
+ <div>May be used to specify a port when the network specified on the <em>network</em> field is a static or early binding distributed portgroup. If unset, the port will be automatically assigned to the Ethernet adapter based on the policy embodied by the portgroup type.</div>
+ <div>- <code>start_connected</code> (bool): Flag indicating whether the virtual device should be connected whenever the virtual machine is powered on.</div>
+ <div>Defaults to false if unset. ([&#x27;present&#x27;])</div>
+ <div>- <code>allow_guest_control</code> (bool): Flag indicating whether the guest can connect and disconnect the device.</div>
+ <div>Defaults to false if unset. ([&#x27;present&#x27;])</div>
</td>
</tr>
<tr>
@@ -667,6 +760,30 @@ Parameters
</td>
<td>
<div>Map of NICs to update.</div>
+ <div>If unset, no NICs will be updated.</div>
+ <div>When clients pass a value of this structure as a parameter, the key in the field map must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_hardware_ethernet</span>.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>nvme_adapters</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>List of NVMe adapters.</div>
+ <div>If unset, any adapters necessary to connect the virtual machine&#x27;s storage devices will be created; this includes any devices that explicitly specify a NVMe host bus adapter, as well as any devices that do not specify a host bus adapter if the guest&#x27;s preferred adapter type is NVMe.</div>
+ <div>Valid attributes are:</div>
+ <div>- <code>bus</code> (int): NVMe bus number.</div>
+ <div>If unset, the server will choose an available bus number; if none is available, the request will fail. ([&#x27;present&#x27;])</div>
+ <div>- <code>pci_slot_number</code> (int): Address of the NVMe adapter on the PCI bus.</div>
+ <div>If unset, the server will choose an available address when the virtual machine is powered on. ([&#x27;present&#x27;])</div>
</td>
</tr>
<tr>
@@ -683,17 +800,23 @@ Parameters
</td>
<td>
<div>List of parallel ports.</div>
+ <div>If unset, no parallel ports will be created.</div>
<div>Valid attributes are:</div>
- <div>- <code>backing</code> (dict): Physical resource backing for the virtual parallel port. ([&#x27;present&#x27;])</div>
+ <div>- <code>backing</code> (dict): Physical resource backing for the virtual parallel port.</div>
+ <div>If unset, defaults to automatic detection of a suitable host device. ([&#x27;present&#x27;])</div>
<div>- Accepted keys:</div>
- <div>- type (string): The <code>backing_type</code> defines the valid backing types for a virtual parallel port.</div>
+ <div>- type (string): This option defines the valid backing types for a virtual parallel port.</div>
<div>Accepted value for this field:</div>
<div>- <code>FILE</code></div>
<div>- <code>HOST_DEVICE</code></div>
<div>- file (string): Path of the file that should be used as the virtual parallel port backing.</div>
+ <div>This field is optional and it is only relevant when the value of <em>type</em> is FILE.</div>
<div>- host_device (string): Name of the device that should be used as the virtual parallel port backing.</div>
- <div>- <code>start_connected</code> (bool): Flag indicating whether the virtual device should be connected whenever the virtual machine is powered on. ([&#x27;present&#x27;])</div>
- <div>- <code>allow_guest_control</code> (bool): Flag indicating whether the guest can connect and disconnect the device. ([&#x27;present&#x27;])</div>
+ <div>If unset, the virtual parallel port will be configured to automatically detect a suitable host device.</div>
+ <div>- <code>start_connected</code> (bool): Flag indicating whether the virtual device should be connected whenever the virtual machine is powered on.</div>
+ <div>Defaults to false if unset. ([&#x27;present&#x27;])</div>
+ <div>- <code>allow_guest_control</code> (bool): Flag indicating whether the guest can connect and disconnect the device.</div>
+ <div>Defaults to false if unset. ([&#x27;present&#x27;])</div>
</td>
</tr>
<tr>
@@ -709,6 +832,8 @@ Parameters
</td>
<td>
<div>Map of parallel ports to Update.</div>
+ <div>If unset, no parallel ports will be updated.</div>
+ <div>When clients pass a value of this structure as a parameter, the key in the field map must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_hardware_parallel</span>.</div>
</td>
</tr>
<tr>
@@ -724,6 +849,7 @@ Parameters
</td>
<td>
<div>Path to the virtual machine&#x27;s configuration file on the datastore corresponding to {@link #datastore).</div>
+ <div>If unset, <em>datastore</em> must also be unset and <em>datastore_path</em> must be set.</div>
</td>
</tr>
<tr>
@@ -739,12 +865,31 @@ Parameters
</td>
<td>
<div>Virtual machine placement information.</div>
+ <div>If this field is unset, the system will use the values from the source virtual machine. If specified, each field will be used for placement. If the fields result in disjoint placement the operation will fail. If the fields along with the other existing placement of the virtual machine result in disjoint placement the operation will fail.</div>
<div>Valid attributes are:</div>
- <div>- <code>folder</code> (str): Virtual machine folder into which the virtual machine should be placed. ([&#x27;clone&#x27;, &#x27;instant_clone&#x27;, &#x27;present&#x27;, &#x27;register&#x27;, &#x27;relocate&#x27;])</div>
- <div>- <code>resource_pool</code> (str): Resource pool into which the virtual machine should be placed. ([&#x27;clone&#x27;, &#x27;instant_clone&#x27;, &#x27;present&#x27;, &#x27;register&#x27;, &#x27;relocate&#x27;])</div>
- <div>- <code>host</code> (str): Host onto which the virtual machine should be placed. If <code>#host</code> and <code>#resource_pool</code> are both specified, <code>#resource_pool</code> must belong to <code>#host</code>. If <code>#host</code> and <code>#cluster</code> are both specified, <code>#host</code> must be a member of <code>#cluster</code>. ([&#x27;clone&#x27;, &#x27;present&#x27;, &#x27;register&#x27;, &#x27;relocate&#x27;])</div>
- <div>- <code>cluster</code> (str): Cluster into which the virtual machine should be placed. If <code>#cluster</code> and <code>#resource_pool</code> are both specified, <code>#resource_pool</code> must belong to <code>#cluster</code>. If <code>#cluster</code> and <code>#host</code> are both specified, <code>#host</code> must be a member of <code>#cluster</code>. ([&#x27;clone&#x27;, &#x27;present&#x27;, &#x27;register&#x27;, &#x27;relocate&#x27;])</div>
- <div>- <code>datastore</code> (str): Datastore on which the virtual machine&#x27;s configuration state should be stored. This datastore will also be used for any virtual disks that are associated with the virtual machine, unless individually overridden. ([&#x27;clone&#x27;, &#x27;instant_clone&#x27;, &#x27;present&#x27;, &#x27;relocate&#x27;])</div>
+ <div>- <code>folder</code> (str): Virtual machine folder into which the virtual machine should be placed.</div>
+ <div>If this field is unset, the virtual machine will stay in the current folder.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_folder_info</span>. ([&#x27;clone&#x27;, &#x27;instant_clone&#x27;, &#x27;present&#x27;, &#x27;register&#x27;, &#x27;relocate&#x27;])</div>
+ <div>- <code>resource_pool</code> (str): Resource pool into which the virtual machine should be placed.</div>
+ <div>If this field is unset, the virtual machine will stay in the current resource pool.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_resourcepool_info</span>. ([&#x27;clone&#x27;, &#x27;instant_clone&#x27;, &#x27;present&#x27;, &#x27;register&#x27;, &#x27;relocate&#x27;])</div>
+ <div>- <code>host</code> (str): Host onto which the virtual machine should be placed.</div>
+ <div>If <em>host</em> and <em>resource_pool</em> are both specified, <em>resource_pool</em> must belong to <em>host</em>.</div>
+ <div></div>
+ <div>If <em>host</em> and <em>cluster</em> are both specified, <em>host</em> must be a member of <em>cluster</em>.</div>
+ <div></div>
+ <div>If this field is unset, if <em>resource_pool</em> is unset, the virtual machine will remain on the current host. if <em>resource_pool</em> is set, and the target is a standalone host, the host is used. if <em>resource_pool</em> is set, and the target is a DRS cluster, a host will be picked by DRS. if <em>resource_pool</em> is set, and the target is a cluster without DRS, InvalidArgument will be thrown.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_host_info</span>. ([&#x27;clone&#x27;, &#x27;present&#x27;, &#x27;register&#x27;, &#x27;relocate&#x27;])</div>
+ <div>- <code>cluster</code> (str): Cluster into which the virtual machine should be placed.</div>
+ <div>If <em>cluster</em> and <em>resource_pool</em> are both specified, <em>resource_pool</em> must belong to <em>cluster</em>.</div>
+ <div></div>
+ <div>If <em>cluster</em> and <em>host</em> are both specified, <em>host</em> must be a member of <em>cluster</em>.</div>
+ <div></div>
+ <div>If <em>resource_pool</em> or <em>host</em> is specified, it is recommended that this field be unset.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_cluster_info</span>. ([&#x27;clone&#x27;, &#x27;present&#x27;, &#x27;register&#x27;, &#x27;relocate&#x27;])</div>
+ <div>- <code>datastore</code> (str): Datastore on which the virtual machine&#x27;s configuration state should be stored. This datastore will also be used for any virtual disks that are associated with the virtual machine, unless individually overridden.</div>
+ <div>If this field is unset, the virtual machine will remain on the current datastore.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_datastore_info</span>. ([&#x27;clone&#x27;, &#x27;instant_clone&#x27;, &#x27;present&#x27;, &#x27;relocate&#x27;])</div>
</td>
</tr>
<tr>
@@ -763,7 +908,8 @@ Parameters
</ul>
</td>
<td>
- <div>Attempt to perform a {@link #powerOn} after clone.</div>
+ <div>Attempt to perform a <em>power_on</em> after clone.</div>
+ <div>If unset, the virtual machine will not be powered on.</div>
</td>
</tr>
<tr>
@@ -780,12 +926,15 @@ Parameters
</td>
<td>
<div>List of SATA adapters.</div>
+ <div>If unset, any adapters necessary to connect the virtual machine&#x27;s storage devices will be created; this includes any devices that explicitly specify a SATA host bus adapter, as well as any devices that do not specify a host bus adapter if the guest&#x27;s preferred adapter type is SATA.</div>
<div>Valid attributes are:</div>
- <div>- <code>type</code> (str): The <code>type</code> defines the valid emulation types for a virtual SATA adapter. ([&#x27;present&#x27;])</div>
+ <div>- <code>type</code> (str): This option defines the valid emulation types for a virtual SATA adapter. ([&#x27;present&#x27;])</div>
<div>- Accepted values:</div>
<div>- AHCI</div>
- <div>- <code>bus</code> (int): SATA bus number. ([&#x27;present&#x27;])</div>
- <div>- <code>pci_slot_number</code> (int): Address of the SATA adapter on the PCI bus. ([&#x27;present&#x27;])</div>
+ <div>- <code>bus</code> (int): SATA bus number.</div>
+ <div>If unset, the server will choose an available bus number; if none is available, the request will fail. ([&#x27;present&#x27;])</div>
+ <div>- <code>pci_slot_number</code> (int): Address of the SATA adapter on the PCI bus.</div>
+ <div>If unset, the server will choose an available address when the virtual machine is powered on. ([&#x27;present&#x27;])</div>
</td>
</tr>
<tr>
@@ -802,16 +951,19 @@ Parameters
</td>
<td>
<div>List of SCSI adapters.</div>
+ <div>If unset, any adapters necessary to connect the virtual machine&#x27;s storage devices will be created; this includes any devices that explicitly specify a SCSI host bus adapter, as well as any devices that do not specify a host bus adapter if the guest&#x27;s preferred adapter type is SCSI. The type of the SCSI adapter will be a guest-specific default type.</div>
<div>Valid attributes are:</div>
- <div>- <code>type</code> (str): The <code>type</code> defines the valid emulation types for a virtual SCSI adapter. ([&#x27;present&#x27;])</div>
+ <div>- <code>type</code> (str): This option defines the valid emulation types for a virtual SCSI adapter. ([&#x27;present&#x27;])</div>
<div>- Accepted values:</div>
<div>- BUSLOGIC</div>
<div>- LSILOGIC</div>
<div>- LSILOGICSAS</div>
<div>- PVSCSI</div>
- <div>- <code>bus</code> (int): SCSI bus number. ([&#x27;present&#x27;])</div>
- <div>- <code>pci_slot_number</code> (int): Address of the SCSI adapter on the PCI bus. If the PCI address is invalid, the server will change it when the VM is started or as the device is hot added. ([&#x27;present&#x27;])</div>
- <div>- <code>sharing</code> (str): The <code>sharing</code> defines the valid bus sharing modes for a virtual SCSI adapter. ([&#x27;present&#x27;])</div>
+ <div>- <code>bus</code> (int): SCSI bus number.</div>
+ <div>If unset, the server will choose an available bus number; if none is available, the request will fail. ([&#x27;present&#x27;])</div>
+ <div>- <code>pci_slot_number</code> (int): Address of the SCSI adapter on the PCI bus. If the PCI address is invalid, the server will change it when the VM is started or as the device is hot added.</div>
+ <div>If unset, the server will choose an available address when the virtual machine is powered on. ([&#x27;present&#x27;])</div>
+ <div>- <code>sharing</code> (str): This option defines the valid bus sharing modes for a virtual SCSI adapter. ([&#x27;present&#x27;])</div>
<div>- Accepted values:</div>
<div>- NONE</div>
<div>- PHYSICAL</div>
@@ -832,11 +984,14 @@ Parameters
</td>
<td>
<div>List of serial ports.</div>
+ <div>If unset, no serial ports will be created.</div>
<div>Valid attributes are:</div>
- <div>- <code>yield_on_poll</code> (bool): CPU yield behavior. If set to true, the virtual machine will periodically relinquish the processor if its sole task is polling the virtual serial port. The amount of time it takes to regain the processor will depend on the degree of other virtual machine activity on the host. ([&#x27;present&#x27;])</div>
- <div>- <code>backing</code> (dict): Physical resource backing for the virtual serial port. ([&#x27;present&#x27;])</div>
+ <div>- <code>yield_on_poll</code> (bool): CPU yield behavior. If set to true, the virtual machine will periodically relinquish the processor if its sole task is polling the virtual serial port. The amount of time it takes to regain the processor will depend on the degree of other virtual machine activity on the host.</div>
+ <div>If unset, defaults to false. ([&#x27;present&#x27;])</div>
+ <div>- <code>backing</code> (dict): Physical resource backing for the virtual serial port.</div>
+ <div>If unset, defaults to automatic detection of a suitable host device. ([&#x27;present&#x27;])</div>
<div>- Accepted keys:</div>
- <div>- type (string): The <code>backing_type</code> defines the valid backing types for a virtual serial port.</div>
+ <div>- type (string): This option defines the valid backing types for a virtual serial port.</div>
<div>Accepted value for this field:</div>
<div>- <code>FILE</code></div>
<div>- <code>HOST_DEVICE</code></div>
@@ -845,13 +1000,26 @@ Parameters
<div>- <code>PIPE_CLIENT</code></div>
<div>- <code>PIPE_SERVER</code></div>
<div>- file (string): Path of the file backing the virtual serial port.</div>
- <div>- host_device (string): Name of the device backing the virtual serial port. &lt;p&gt;</div>
+ <div>This field is optional and it is only relevant when the value of <em>type</em> is FILE.</div>
+ <div>- host_device (string): Name of the device backing the virtual serial port.</div>
+ <div></div>
+ <div></div>
+ <div>If unset, the virtual serial port will be configured to automatically detect a suitable host device.</div>
<div>- pipe (string): Name of the pipe backing the virtual serial port.</div>
- <div>- no_rx_loss (boolean): Flag that enables optimized data transfer over the pipe. When the value is true, the host buffers data to prevent data overrun. This allows the virtual machine to read all of the data transferred over the pipe with no data loss.</div>
- <div>- network_location (string): URI specifying the location of the network service backing the virtual serial port. &lt;ul&gt; &lt;li&gt;If {@link #type} is {@link BackingType#NETWORK_SERVER}, this field is the location used by clients to connect to this server. The hostname part of the URI should either be empty or should specify the address of the host on which the virtual machine is running.&lt;/li&gt; &lt;li&gt;If {@link #type} is {@link BackingType#NETWORK_CLIENT}, this field is the location used by the virtual machine to connect to the remote server.&lt;/li&gt; &lt;/ul&gt;</div>
- <div>- proxy (string): Proxy service that provides network access to the network backing. If set, the virtual machine initiates a connection with the proxy service and forwards the traffic to the proxy.</div>
- <div>- <code>start_connected</code> (bool): Flag indicating whether the virtual device should be connected whenever the virtual machine is powered on. ([&#x27;present&#x27;])</div>
- <div>- <code>allow_guest_control</code> (bool): Flag indicating whether the guest can connect and disconnect the device. ([&#x27;present&#x27;])</div>
+ <div>This field is optional and it is only relevant when the value of <em>type</em> is one of PIPE_SERVER or PIPE_CLIENT.</div>
+ <div>- no_rx_loss (boolean): Flag that enables optimized data transfer over the pipe. When the value is true, the host buffers data to prevent data overrun. This allows the virtual machine to read all of the data transferred over the pipe with no data loss.</div>
+ <div>If unset, defaults to false.</div>
+ <div>- network_location (string): URI specifying the location of the network service backing the virtual serial port.</div>
+ <div>- If <em>type</em> is NETWORK_SERVER, this field is the location used by clients to connect to this server. The hostname part of the URI should either be empty or should specify the address of the host on which the virtual machine is running.</div>
+ <div>- If <em>type</em> is NETWORK_CLIENT, this field is the location used by the virtual machine to connect to the remote server.</div>
+ <div></div>
+ <div>This field is optional and it is only relevant when the value of <em>type</em> is one of NETWORK_SERVER or NETWORK_CLIENT.</div>
+ <div>- proxy (string): Proxy service that provides network access to the network backing. If set, the virtual machine initiates a connection with the proxy service and forwards the traffic to the proxy.</div>
+ <div>If unset, no proxy service should be used.</div>
+ <div>- <code>start_connected</code> (bool): Flag indicating whether the virtual device should be connected whenever the virtual machine is powered on.</div>
+ <div>Defaults to false if unset. ([&#x27;present&#x27;])</div>
+ <div>- <code>allow_guest_control</code> (bool): Flag indicating whether the guest can connect and disconnect the device.</div>
+ <div>Defaults to false if unset. ([&#x27;present&#x27;])</div>
</td>
</tr>
<tr>
@@ -867,6 +1035,8 @@ Parameters
</td>
<td>
<div>Map of serial ports to Update.</div>
+ <div>If unset, no serial ports will be updated.</div>
+ <div>When clients pass a value of this structure as a parameter, the key in the field map must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_hardware_serial</span>.</div>
</td>
</tr>
<tr>
@@ -899,7 +1069,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine to InstantClone from. Required with <em>state=[&#x27;clone&#x27;, &#x27;instant_clone&#x27;]</em></div>
+ <div>Virtual machine to InstantClone from.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. Required with <em>state=[&#x27;clone&#x27;, &#x27;instant_clone&#x27;]</em></div>
</td>
</tr>
<tr>
@@ -937,9 +1108,11 @@ Parameters
<td>
</td>
<td>
- <div>The <code>storage_policy_spec</code> {@term structure} contains information about the storage policy that is to be associated with the virtual machine home (which contains the configuration and log files). Required with <em>state=[&#x27;present&#x27;]</em></div>
+ <div>The <em>storage_policy_spec</em> structure contains information about the storage policy that is to be associated with the virtual machine home (which contains the configuration and log files).</div>
+ <div>If unset the datastore default storage policy (if applicable) is applied. Currently a default storage policy is only supported by object datastores : VVol and vSAN. For non-object datastores, if unset then no storage policy would be associated with the virtual machine home. Required with <em>state=[&#x27;present&#x27;]</em></div>
<div>Valid attributes are:</div>
- <div>- <code>policy</code> (str): Identifier of the storage policy which should be associated with the virtual machine. ([&#x27;present&#x27;])</div>
+ <div>- <code>policy</code> (str): Identifier of the storage policy which should be associated with the virtual machine.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_storage_policies</span>. ([&#x27;present&#x27;])</div>
<div>This key is required with [&#x27;present&#x27;].</div>
</td>
</tr>
@@ -1045,7 +1218,8 @@ Parameters
<td>
</td>
<td>
- <div>Identifier of the virtual machine to be unregistered. Required with <em>state=[&#x27;absent&#x27;, &#x27;relocate&#x27;, &#x27;unregister&#x27;]</em></div>
+ <div>Identifier of the virtual machine to be unregistered.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. Required with <em>state=[&#x27;absent&#x27;, &#x27;relocate&#x27;, &#x27;unregister&#x27;]</em></div>
</td>
</tr>
</table>
@@ -1056,7 +1230,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_power_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_power_info_module.rst
index 21aad261c..41dd52a0a 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_power_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_power_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -161,7 +161,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier. Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>Virtual machine identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
</table>
@@ -172,7 +173,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_power_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_power_module.rst
index 6292a17b5..bcc0a64b7 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_power_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_power_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -183,7 +183,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier. This parameter is mandatory.</div>
+ <div>Virtual machine identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. This parameter is mandatory.</div>
</td>
</tr>
</table>
@@ -194,7 +195,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
See Also
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_storage_policy_compliance_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_storage_policy_compliance_info_module.rst
index aa8dfa8ae..99a2e5ea8 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_storage_policy_compliance_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_storage_policy_compliance_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -161,7 +161,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier. Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>Virtual machine identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
</table>
@@ -172,7 +173,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_storage_policy_compliance_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_storage_policy_compliance_module.rst
index 2fbd6950a..0061dcaae 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_storage_policy_compliance_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_storage_policy_compliance_module.rst
@@ -5,7 +5,7 @@
vmware.vmware_rest.vcenter_vm_storage_policy_compliance
*******************************************************
-**Returns the storage policy Compliance {@link Info} of a virtual machine after explicitly re-computing compliance check.**
+**Returns the storage policy Compliance Compliance.Info of a virtual machine after explicitly re-computing compliance check.**
Version added: 0.1.0
@@ -17,7 +17,7 @@ Version added: 0.1.0
Synopsis
--------
-- Returns the storage policy Compliance {@link Info} of a virtual machine after explicitly re-computing compliance check.
+- Returns the storage policy Compliance Compliance.Info of a virtual machine after explicitly re-computing compliance check.
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -55,6 +55,8 @@ Parameters
</td>
<td>
<div>Identifiers of the virtual machine&#x27;s virtual disks for which compliance should be checked.</div>
+ <div>If unset or empty, compliance check is invoked on all the associated disks.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must contain the id of resources returned by <span class='module'>vmware.vmware_rest.vcenter_vm_hardware_disk</span>.</div>
</td>
</tr>
<tr>
@@ -196,7 +198,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier. This parameter is mandatory.</div>
+ <div>Virtual machine identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. This parameter is mandatory.</div>
</td>
</tr>
<tr>
@@ -227,7 +230,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_storage_policy_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_storage_policy_info_module.rst
index b157856e9..118f24ad0 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_storage_policy_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_storage_policy_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -161,7 +161,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>Virtual machine identifier</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
</table>
@@ -172,7 +173,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_storage_policy_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_storage_policy_module.rst
index 9d2b8f4df..41476b453 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_storage_policy_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_storage_policy_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -54,6 +54,8 @@ Parameters
</td>
<td>
<div>Storage policy or policies to be used when reconfiguring virtual machine diks.</div>
+ <div>if unset the current storage policy is retained.</div>
+ <div>When clients pass a value of this structure as a parameter, the key in the field map must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_hardware_disk</span>.</div>
</td>
</tr>
<tr>
@@ -194,7 +196,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine identifier. This parameter is mandatory.</div>
+ <div>Virtual machine identifier.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. This parameter is mandatory.</div>
</td>
</tr>
<tr>
@@ -210,14 +213,17 @@ Parameters
<td>
</td>
<td>
- <div>Storage policy to be used when reconfiguring the virtual machine home. This parameter is mandatory.</div>
+ <div>Storage policy to be used when reconfiguring the virtual machine home.</div>
+ <div>if unset the current storage policy is retained. This parameter is mandatory.</div>
<div>Valid attributes are:</div>
- <div>- <code>type</code> (str): The <code>policy_type</code> defines the choices for how to specify the policy to be associated with the virtual machine home&#x27;s directory. ([&#x27;present&#x27;])</div>
+ <div>- <code>type</code> (str): This option defines the choices for how to specify the policy to be associated with the virtual machine home&#x27;s directory. ([&#x27;present&#x27;])</div>
<div>This key is required with [&#x27;present&#x27;].</div>
<div>- Accepted values:</div>
<div>- USE_DEFAULT_POLICY</div>
<div>- USE_SPECIFIED_POLICY</div>
- <div>- <code>policy</code> (str): Storage Policy identification. ([&#x27;present&#x27;])</div>
+ <div>- <code>policy</code> (str): Storage Policy identification.</div>
+ <div>This field is optional and it is only relevant when the value of <em>type</em> is USE_SPECIFIED_POLICY.</div>
+ <div>When clients pass a value of this structure as a parameter, the field must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_storage_policies</span>. ([&#x27;present&#x27;])</div>
</td>
</tr>
</table>
@@ -228,7 +234,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_tools_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_tools_info_module.rst
index 20b9bbecd..16ac1f9ae 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_tools_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_tools_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -161,7 +161,8 @@ Parameters
<td>
</td>
<td>
- <div>Identifier of the virtual machine. Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>Identifier of the virtual machine.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
</table>
@@ -172,7 +173,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_tools_installer_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_tools_installer_info_module.rst
index eb3755e19..2040aabc2 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_tools_installer_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_tools_installer_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -161,7 +161,8 @@ Parameters
<td>
</td>
<td>
- <div>Identifier of the virtual machine. Required with <em>state=[&#x27;get&#x27;]</em></div>
+ <div>Identifier of the virtual machine.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. Required with <em>state=[&#x27;get&#x27;]</em></div>
</td>
</tr>
</table>
@@ -172,7 +173,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_tools_installer_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_tools_installer_module.rst
index c3c89d45d..85465118d 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_tools_installer_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_tools_installer_module.rst
@@ -17,7 +17,7 @@ Version added: 0.1.0
Synopsis
--------
-- Connects the VMware Tools CD installer as a CD-ROM for the guest operating system. On Windows guest operating systems with autorun, this should cause the installer to initiate the Tools installation which will need user input to complete. On other (non-Windows) guest operating systems this will make the Tools installation available, and a a user will need to do guest-specific actions. On Linux, this includes opening an archive and running the installer. To monitor the status of the Tools install, clients should check the {@name vcenter.vm.Tools.Info#versionStatus} and {@name vcenter.vm.Tools.Info#runState} from {@link vcenter.vm.Tools#get}
+- Connects the VMware Tools CD installer as a CD-ROM for the guest operating system. On Windows guest operating systems with autorun, this should cause the installer to initiate the Tools installation which will need user input to complete. On other (non-Windows) guest operating systems this will make the Tools installation available, and a a user will need to do guest-specific actions. On Linux, this includes opening an archive and running the installer. To monitor the status of the Tools install, clients should check the Tools.Info.version-status and Tools.Info.run-state from Tools.get
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -181,7 +181,8 @@ Parameters
<td>
</td>
<td>
- <div>Virtual machine ID This parameter is mandatory.</div>
+ <div>Virtual machine ID</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. This parameter is mandatory.</div>
</td>
</tr>
</table>
@@ -192,7 +193,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_tools_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_tools_module.rst
index edd59f366..113a7e709 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_tools_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vm_tools_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -54,6 +54,7 @@ Parameters
</td>
<td>
<div>Command line options passed to the installer to modify the installation procedure for Tools.</div>
+ <div>Set if any additional options are desired.</div>
</td>
</tr>
<tr>
@@ -108,7 +109,7 @@ Parameters
</ul>
</td>
<td>
- <div>The <code>upgrade_policy</code> defines when Tools are auto-upgraded for a virtual machine.</div>
+ <div>The <em>upgrade_policy</em> enumerated type defines when Tools are auto-upgraded for a virtual machine.</div>
</td>
</tr>
<tr>
@@ -214,7 +215,8 @@ Parameters
<td>
</td>
<td>
- <div>Identifier of the virtual machine. This parameter is mandatory.</div>
+ <div>Identifier of the virtual machine.</div>
+ <div>The parameter must be the id of a resource returned by <span class='module'>vmware.vmware_rest.vcenter_vm_info</span>. This parameter is mandatory.</div>
</td>
</tr>
</table>
@@ -225,7 +227,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vmtemplate_libraryitems_info_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vmtemplate_libraryitems_info_module.rst
index 8fd6cb24f..bf83dc6c8 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vmtemplate_libraryitems_info_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vmtemplate_libraryitems_info_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -172,7 +172,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vmtemplate_libraryitems_module.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vmtemplate_libraryitems_module.rst
index a49c22c22..bd523525d 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vmtemplate_libraryitems_module.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vcenter_vmtemplate_libraryitems_module.rst
@@ -25,7 +25,7 @@ Requirements
------------
The below requirements are needed on the host that executes this module.
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
@@ -394,7 +394,7 @@ Notes
-----
.. note::
- - Tested on vSphere 7.0.2
+ - Tested on vSphere 7.0.3
diff --git a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vm_moid_lookup.rst b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vm_moid_lookup.rst
index 252d64d2e..1a5904c88 100644
--- a/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vm_moid_lookup.rst
+++ b/ansible_collections/vmware/vmware_rest/docs/vmware.vmware_rest.vm_moid_lookup.rst
@@ -48,7 +48,7 @@ Parameters
<b>_terms</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
- <span style="color: purple">-</span>
+ <span style="color: purple">string</span>
/ <span style="color: red">required</span>
</div>
</td>
@@ -73,10 +73,10 @@ Parameters
<td>
</td>
<td>
+ <div>env:VMWARE_HOST</div>
</td>
<td>
<div>The hostname or IP address of the vSphere vCenter.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_HOST</code> will be used instead.</div>
</td>
</tr>
<tr>
@@ -92,10 +92,10 @@ Parameters
<td>
</td>
<td>
+ <div>env:VMWARE_PASSWORD</div>
</td>
<td>
<div>The vSphere vCenter password.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_PASSWORD</code> will be used instead.</div>
</td>
</tr>
<tr>
@@ -110,12 +110,12 @@ Parameters
<td>
</td>
<td>
+ <div>env:VMWARE_REST_LOG_FILE</div>
</td>
<td>
<div>You can use this optional parameter to set the location of a log file.</div>
- <div>This file will be used to record the HTTP REST interaction.</div>
- <div>The file will be stored on the host that run the module.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_REST_LOG_FILE</code> will be used instead.</div>
+ <div>This file will be used to record the HTTP REST interactions.</div>
+ <div>The file will be stored on the host that runs the module.</div>
</td>
</tr>
<tr>
@@ -131,10 +131,10 @@ Parameters
<td>
</td>
<td>
+ <div>env:VMWARE_USER</div>
</td>
<td>
<div>The vSphere vCenter username.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_USER</code> will be used instead.</div>
</td>
</tr>
<tr>
@@ -147,16 +147,13 @@ Parameters
</div>
</td>
<td>
- <ul style="margin: 0; padding: 0"><b>Choices:</b>
- <li>no</li>
- <li><div style="color: blue"><b>yes</b>&nbsp;&larr;</div></li>
- </ul>
+ <b>Default:</b><br/><div style="color: blue">"yes"</div>
</td>
<td>
+ <div>env:VMWARE_VALIDATE_CERTS</div>
</td>
<td>
- <div>Allows connection when SSL certificates are not valid. Set to <code>false</code> when certificates are not trusted.</div>
- <div>If the value is not specified in the task, the value of environment variable <code>VMWARE_VALIDATE_CERTS</code> will be used instead.</div>
+ <div>Allows connection when SSL certificates are not valid. Set to V(false) when certificates are not trusted.</div>
</td>
</tr>
</table>
diff --git a/ansible_collections/vmware/vmware_rest/meta/runtime.yml b/ansible_collections/vmware/vmware_rest/meta/runtime.yml
index 2ee3c9fa9..b1fd5d786 100644
--- a/ansible_collections/vmware/vmware_rest/meta/runtime.yml
+++ b/ansible_collections/vmware/vmware_rest/meta/runtime.yml
@@ -1,2 +1,135 @@
----
-requires_ansible: '>=2.9.10'
+requires_ansible: '>=2.14.0'
+action_groups:
+ vmware_rest:
+ - vcenter_cluster_info
+ - vcenter_datacenter_info
+ - vcenter_datacenter
+ - vcenter_datastore_info
+ - vcenter_folder_info
+ - vcenter_host_info
+ - vcenter_host
+ - vcenter_network_info
+ - vcenter_ovf_libraryitem
+ - vcenter_resourcepool_info
+ - vcenter_resourcepool
+ - vcenter_storage_policies_info
+ - vcenter_vm_info
+ - vcenter_vm
+ - vcenter_vmtemplate_libraryitems_info
+ - vcenter_vmtemplate_libraryitems
+ - vcenter_vm_guest_customization
+ - vcenter_vm_guest_filesystem_directories
+ - vcenter_vm_guest_identity_info
+ - vcenter_vm_guest_localfilesystem_info
+ - vcenter_vm_guest_networking_info
+ - vcenter_vm_guest_networking_interfaces_info
+ - vcenter_vm_guest_networking_routes_info
+ - vcenter_vm_guest_operations_info
+ - vcenter_vm_guest_power_info
+ - vcenter_vm_guest_power
+ - vcenter_vm_hardware_info
+ - vcenter_vm_hardware
+ - vcenter_vm_hardware_adapter_sata_info
+ - vcenter_vm_hardware_adapter_sata
+ - vcenter_vm_hardware_adapter_scsi_info
+ - vcenter_vm_hardware_adapter_scsi
+ - vcenter_vm_hardware_boot_info
+ - vcenter_vm_hardware_boot
+ - vcenter_vm_hardware_boot_device_info
+ - vcenter_vm_hardware_boot_device
+ - vcenter_vm_hardware_cdrom_info
+ - vcenter_vm_hardware_cdrom
+ - vcenter_vm_hardware_cpu_info
+ - vcenter_vm_hardware_cpu
+ - vcenter_vm_hardware_disk_info
+ - vcenter_vm_hardware_disk
+ - vcenter_vm_hardware_ethernet_info
+ - vcenter_vm_hardware_ethernet
+ - vcenter_vm_hardware_floppy_info
+ - vcenter_vm_hardware_floppy
+ - vcenter_vm_hardware_memory_info
+ - vcenter_vm_hardware_memory
+ - vcenter_vm_hardware_parallel_info
+ - vcenter_vm_hardware_parallel
+ - vcenter_vm_hardware_serial_info
+ - vcenter_vm_hardware_serial
+ - vcenter_vm_libraryitem_info
+ - vcenter_vm_power_info
+ - vcenter_vm_power
+ - vcenter_vm_storage_policy_info
+ - vcenter_vm_storage_policy
+ - vcenter_vm_storage_policy_compliance_info
+ - vcenter_vm_storage_policy_compliance
+ - vcenter_vm_tools_info
+ - vcenter_vm_tools
+ - vcenter_vm_tools_installer_info
+ - vcenter_vm_tools_installer
+ - content_configuration_info
+ - content_configuration
+ - content_library_item_info
+ - content_locallibrary_info
+ - content_locallibrary
+ - content_subscribedlibrary_info
+ - content_subscribedlibrary
+ - appliance_access_consolecli_info
+ - appliance_access_consolecli
+ - appliance_access_dcui_info
+ - appliance_access_dcui
+ - appliance_access_shell_info
+ - appliance_access_shell
+ - appliance_access_ssh_info
+ - appliance_access_ssh
+ - appliance_health_applmgmt_info
+ - appliance_health_database_info
+ - appliance_health_databasestorage_info
+ - appliance_health_load_info
+ - appliance_health_mem_info
+ - appliance_health_softwarepackages_info
+ - appliance_health_storage_info
+ - appliance_health_swap_info
+ - appliance_health_system_info
+ - appliance_infraprofile_configs_info
+ - appliance_infraprofile_configs
+ - appliance_localaccounts_info
+ - appliance_localaccounts_globalpolicy_info
+ - appliance_localaccounts_globalpolicy
+ - appliance_monitoring_info
+ - appliance_monitoring_query
+ - appliance_networking_info
+ - appliance_networking
+ - appliance_networking_dns_domains_info
+ - appliance_networking_dns_domains
+ - appliance_networking_dns_hostname_info
+ - appliance_networking_dns_hostname
+ - appliance_networking_dns_servers_info
+ - appliance_networking_dns_servers
+ - appliance_networking_firewall_inbound_info
+ - appliance_networking_firewall_inbound
+ - appliance_networking_interfaces_info
+ - appliance_networking_interfaces_ipv4_info
+ - appliance_networking_interfaces_ipv4
+ - appliance_networking_interfaces_ipv6_info
+ - appliance_networking_interfaces_ipv6
+ - appliance_networking_noproxy_info
+ - appliance_networking_noproxy
+ - appliance_networking_proxy_info
+ - appliance_networking_proxy
+ - appliance_ntp_info
+ - appliance_ntp
+ - appliance_services_info
+ - appliance_services
+ - appliance_shutdown_info
+ - appliance_shutdown
+ - appliance_system_globalfips_info
+ - appliance_system_globalfips
+ - appliance_system_storage_info
+ - appliance_system_storage
+ - appliance_system_time_info
+ - appliance_system_time_timezone_info
+ - appliance_system_time_timezone
+ - appliance_system_version_info
+ - appliance_timesync_info
+ - appliance_timesync
+ - appliance_update_info
+ - appliance_vmon_service_info
+ - appliance_vmon_service
diff --git a/ansible_collections/vmware/vmware_rest/plugins/doc_fragments/moid.py b/ansible_collections/vmware/vmware_rest/plugins/doc_fragments/moid.py
index c241b7cbe..fe061b3be 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/doc_fragments/moid.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/doc_fragments/moid.py
@@ -12,42 +12,43 @@ class ModuleDocFragment(object):
options:
_terms:
description: Path to query.
- required: true
+ required: True
+ type: string
vcenter_hostname:
description:
- The hostname or IP address of the vSphere vCenter.
- - If the value is not specified in the task, the value of environment variable
- C(VMWARE_HOST) will be used instead.
- required: true
- type: str
+ env:
+ - name: VMWARE_HOST
+ required: True
+ type: string
vcenter_password:
description:
- The vSphere vCenter password.
- - If the value is not specified in the task, the value of environment variable
- C(VMWARE_PASSWORD) will be used instead.
- required: true
- type: str
+ env:
+ - name: VMWARE_PASSWORD
+ required: True
+ type: string
vcenter_rest_log_file:
description:
- You can use this optional parameter to set the location of a log file.
- - This file will be used to record the HTTP REST interaction.
- - The file will be stored on the host that run the module.
- - If the value is not specified in the task, the value of environment variable
- C(VMWARE_REST_LOG_FILE) will be used instead.
- type: str
+ - This file will be used to record the HTTP REST interactions.
+ - The file will be stored on the host that runs the module.
+ env:
+ - name: VMWARE_REST_LOG_FILE
+ type: string
vcenter_username:
description:
- The vSphere vCenter username.
- - If the value is not specified in the task, the value of environment variable
- C(VMWARE_USER) will be used instead.
- required: true
- type: str
+ env:
+ - name: VMWARE_USER
+ required: True
+ type: string
vcenter_validate_certs:
- default: true
description:
- - Allows connection when SSL certificates are not valid. Set to C(false) when
+ - Allows connection when SSL certificates are not valid. Set to V(false) when
certificates are not trusted.
- - If the value is not specified in the task, the value of environment variable
- C(VMWARE_VALIDATE_CERTS) will be used instead.
- type: bool
+ default: true
+ env:
+ - name: VMWARE_VALIDATE_CERTS
+ type: boolean
"""
diff --git a/ansible_collections/vmware/vmware_rest/plugins/lookup/cluster_moid.py b/ansible_collections/vmware/vmware_rest/plugins/lookup/cluster_moid.py
index 22a3629d2..474af1d4c 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/lookup/cluster_moid.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/lookup/cluster_moid.py
@@ -16,7 +16,7 @@ author:
- Alina Buzachis (@alinabuzachis)
version_added: 2.1.0
requirements:
- - vSphere 7.0.2 or greater
+ - vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
extends_documentation_fragment:
@@ -29,9 +29,9 @@ EXAMPLES = r"""
- name: set connection info
ansible.builtin.set_fact:
connection_args:
- vcenter_hostname: "vcenter.test"
- vcenter_username: "administrator@vsphere.local"
- vcenter_password: "1234"
+ vcenter_hostname: "vcenter.test"
+ vcenter_username: "administrator@vsphere.local"
+ vcenter_password: "1234"
- name: lookup MoID of the object
ansible.builtin.debug: msg="{{ lookup('vmware.vmware_rest.cluster_moid', '/my_dc/host/my_cluster', **connection_args) }}"
@@ -49,18 +49,15 @@ _raw:
"""
-from ansible_collections.vmware.vmware_rest.plugins.plugin_utils.lookup import (
- Lookup,
- get_credentials,
-)
from ansible_collections.cloud.common.plugins.plugin_utils.turbo.lookup import (
TurboLookupBase as LookupBase,
)
+from ansible_collections.vmware.vmware_rest.plugins.plugin_utils.lookup import Lookup
class LookupModule(LookupBase):
async def _run(self, terms, variables, **kwargs):
- self.set_options(var_options=variables, direct=get_credentials(**kwargs))
+ self.set_options(var_options=variables, direct=kwargs)
self.set_option("object_type", "cluster")
result = await Lookup.entry_point(terms, self._options)
return [result]
diff --git a/ansible_collections/vmware/vmware_rest/plugins/lookup/datacenter_moid.py b/ansible_collections/vmware/vmware_rest/plugins/lookup/datacenter_moid.py
index d3f644eb9..f80e1a683 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/lookup/datacenter_moid.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/lookup/datacenter_moid.py
@@ -16,7 +16,7 @@ author:
- Alina Buzachis (@alinabuzachis)
version_added: 2.1.0
requirements:
- - vSphere 7.0.2 or greater
+ - vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
extends_documentation_fragment:
@@ -49,18 +49,15 @@ _raw:
"""
-from ansible_collections.vmware.vmware_rest.plugins.plugin_utils.lookup import (
- Lookup,
- get_credentials,
-)
from ansible_collections.cloud.common.plugins.plugin_utils.turbo.lookup import (
TurboLookupBase as LookupBase,
)
+from ansible_collections.vmware.vmware_rest.plugins.plugin_utils.lookup import Lookup
class LookupModule(LookupBase):
async def _run(self, terms, variables, **kwargs):
- self.set_options(var_options=variables, direct=get_credentials(**kwargs))
+ self.set_options(var_options=variables, direct=kwargs)
self.set_option("object_type", "datacenter")
result = await Lookup.entry_point(terms, self._options)
return [result]
diff --git a/ansible_collections/vmware/vmware_rest/plugins/lookup/datastore_moid.py b/ansible_collections/vmware/vmware_rest/plugins/lookup/datastore_moid.py
index 27d3c779b..02a0e0940 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/lookup/datastore_moid.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/lookup/datastore_moid.py
@@ -16,7 +16,7 @@ author:
- Alina Buzachis (@alinabuzachis)
version_added: 2.1.0
requirements:
- - vSphere 7.0.2 or greater
+ - vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
extends_documentation_fragment:
@@ -49,18 +49,15 @@ _raw:
"""
-from ansible_collections.vmware.vmware_rest.plugins.plugin_utils.lookup import (
- Lookup,
- get_credentials,
-)
from ansible_collections.cloud.common.plugins.plugin_utils.turbo.lookup import (
TurboLookupBase as LookupBase,
)
+from ansible_collections.vmware.vmware_rest.plugins.plugin_utils.lookup import Lookup
class LookupModule(LookupBase):
async def _run(self, terms, variables, **kwargs):
- self.set_options(var_options=variables, direct=get_credentials(**kwargs))
+ self.set_options(var_options=variables, direct=kwargs)
self.set_option("object_type", "datastore")
result = await Lookup.entry_point(terms, self._options)
return [result]
diff --git a/ansible_collections/vmware/vmware_rest/plugins/lookup/folder_moid.py b/ansible_collections/vmware/vmware_rest/plugins/lookup/folder_moid.py
index aeca68eef..7d9d2476b 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/lookup/folder_moid.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/lookup/folder_moid.py
@@ -16,7 +16,7 @@ author:
- Alina Buzachis (@alinabuzachis)
version_added: 2.1.0
requirements:
- - vSphere 7.0.2 or greater
+ - vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
extends_documentation_fragment:
@@ -49,18 +49,15 @@ _raw:
"""
-from ansible_collections.vmware.vmware_rest.plugins.plugin_utils.lookup import (
- Lookup,
- get_credentials,
-)
from ansible_collections.cloud.common.plugins.plugin_utils.turbo.lookup import (
TurboLookupBase as LookupBase,
)
+from ansible_collections.vmware.vmware_rest.plugins.plugin_utils.lookup import Lookup
class LookupModule(LookupBase):
async def _run(self, terms, variables, **kwargs):
- self.set_options(var_options=variables, direct=get_credentials(**kwargs))
+ self.set_options(var_options=variables, direct=kwargs)
self.set_option("object_type", "folder")
result = await Lookup.entry_point(terms, self._options)
return [result]
diff --git a/ansible_collections/vmware/vmware_rest/plugins/lookup/host_moid.py b/ansible_collections/vmware/vmware_rest/plugins/lookup/host_moid.py
index 9e3b7bfc2..b9fe89032 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/lookup/host_moid.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/lookup/host_moid.py
@@ -16,7 +16,7 @@ author:
- Alina Buzachis (@alinabuzachis)
version_added: 2.1.0
requirements:
- - vSphere 7.0.2 or greater
+ - vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
extends_documentation_fragment:
@@ -49,18 +49,15 @@ _raw:
"""
-from ansible_collections.vmware.vmware_rest.plugins.plugin_utils.lookup import (
- Lookup,
- get_credentials,
-)
from ansible_collections.cloud.common.plugins.plugin_utils.turbo.lookup import (
TurboLookupBase as LookupBase,
)
+from ansible_collections.vmware.vmware_rest.plugins.plugin_utils.lookup import Lookup
class LookupModule(LookupBase):
async def _run(self, terms, variables, **kwargs):
- self.set_options(var_options=variables, direct=get_credentials(**kwargs))
+ self.set_options(var_options=variables, direct=kwargs)
self.set_option("object_type", "host")
result = await Lookup.entry_point(terms, self._options)
return [result]
diff --git a/ansible_collections/vmware/vmware_rest/plugins/lookup/network_moid.py b/ansible_collections/vmware/vmware_rest/plugins/lookup/network_moid.py
index 26b9dd80d..7047a13be 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/lookup/network_moid.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/lookup/network_moid.py
@@ -12,11 +12,13 @@ name: network_moid
short_description: Look up MoID for vSphere network objects using vCenter REST API
description:
- Returns Managed Object Reference (MoID) of the vSphere network object contained in the specified path.
+ - This lookup cannot distinguish between multiple networks with the same name defined in multiple switches
+ as that is not supported by the vSphere REST API; network names must be unique within a given datacenter/folder path.
author:
- Alina Buzachis (@alinabuzachis)
version_added: 2.1.0
requirements:
- - vSphere 7.0.2 or greater
+ - vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
extends_documentation_fragment:
@@ -49,18 +51,15 @@ _raw:
"""
-from ansible_collections.vmware.vmware_rest.plugins.plugin_utils.lookup import (
- Lookup,
- get_credentials,
-)
from ansible_collections.cloud.common.plugins.plugin_utils.turbo.lookup import (
TurboLookupBase as LookupBase,
)
+from ansible_collections.vmware.vmware_rest.plugins.plugin_utils.lookup import Lookup
class LookupModule(LookupBase):
async def _run(self, terms, variables, **kwargs):
- self.set_options(var_options=variables, direct=get_credentials(**kwargs))
+ self.set_options(var_options=variables, direct=kwargs)
self.set_option("object_type", "network")
result = await Lookup.entry_point(terms, self._options)
return [result]
diff --git a/ansible_collections/vmware/vmware_rest/plugins/lookup/resource_pool_moid.py b/ansible_collections/vmware/vmware_rest/plugins/lookup/resource_pool_moid.py
index c5d45be09..bd4f1adfa 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/lookup/resource_pool_moid.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/lookup/resource_pool_moid.py
@@ -16,7 +16,7 @@ author:
- Alina Buzachis (@alinabuzachis)
version_added: 2.1.0
requirements:
- - vSphere 7.0.2 or greater
+ - vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
extends_documentation_fragment:
@@ -49,18 +49,15 @@ _raw:
"""
-from ansible_collections.vmware.vmware_rest.plugins.plugin_utils.lookup import (
- Lookup,
- get_credentials,
-)
from ansible_collections.cloud.common.plugins.plugin_utils.turbo.lookup import (
TurboLookupBase as LookupBase,
)
+from ansible_collections.vmware.vmware_rest.plugins.plugin_utils.lookup import Lookup
class LookupModule(LookupBase):
async def _run(self, terms, variables, **kwargs):
- self.set_options(var_options=variables, direct=get_credentials(**kwargs))
+ self.set_options(var_options=variables, direct=kwargs)
self.set_option("object_type", "resource_pool")
result = await Lookup.entry_point(terms, self._options)
return [result]
diff --git a/ansible_collections/vmware/vmware_rest/plugins/lookup/vm_moid.py b/ansible_collections/vmware/vmware_rest/plugins/lookup/vm_moid.py
index 4a81ec55a..4c49b8d0a 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/lookup/vm_moid.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/lookup/vm_moid.py
@@ -16,7 +16,7 @@ author:
- Alina Buzachis (@alinabuzachis)
version_added: 2.1.0
requirements:
- - vSphere 7.0.2 or greater
+ - vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
extends_documentation_fragment:
@@ -49,18 +49,15 @@ _raw:
"""
-from ansible_collections.vmware.vmware_rest.plugins.plugin_utils.lookup import (
- Lookup,
- get_credentials,
-)
from ansible_collections.cloud.common.plugins.plugin_utils.turbo.lookup import (
TurboLookupBase as LookupBase,
)
+from ansible_collections.vmware.vmware_rest.plugins.plugin_utils.lookup import Lookup
class LookupModule(LookupBase):
async def _run(self, terms, variables, **kwargs):
- self.set_options(var_options=variables, direct=get_credentials(**kwargs))
+ self.set_options(var_options=variables, direct=kwargs)
self.set_option("object_type", "vm")
result = await Lookup.entry_point(terms, self._options)
return [result]
diff --git a/ansible_collections/vmware/vmware_rest/plugins/module_utils/vmware_rest.py b/ansible_collections/vmware/vmware_rest/plugins/module_utils/vmware_rest.py
index ec4863693..2c228b1fd 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/module_utils/vmware_rest.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/module_utils/vmware_rest.py
@@ -32,7 +32,6 @@ import hashlib
import importlib
import json
import re
-
import urllib.parse
from ansible.module_utils.basic import missing_required_lib
@@ -271,7 +270,7 @@ async def update_changed_flag(data, status, operation):
async def list_devices(session, url):
- existing_entries = []
+ pass
async with session.get(url) as resp:
_json = await resp.json()
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_consolecli.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_consolecli.py
index cdf6511c0..1c1a3eb10 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_consolecli.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_consolecli.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -75,11 +72,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -102,8 +99,6 @@ PAYLOAD_FORMAT = {
"set": {"query": {}, "body": {"enabled": "enabled"}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -118,26 +113,27 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
- get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -204,7 +200,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_consolecli_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_consolecli_info.py
index d14bfae21..a14c9672a 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_consolecli_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_consolecli_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -64,11 +61,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -90,8 +87,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -106,26 +101,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_dcui.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_dcui.py
index d314ae39c..1e5c26e0b 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_dcui.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_dcui.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -75,11 +72,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -102,8 +99,6 @@ PAYLOAD_FORMAT = {
"set": {"query": {}, "body": {"enabled": "enabled"}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -118,26 +113,27 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
- get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -202,7 +198,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_dcui_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_dcui_info.py
index b7009c91a..33d64ae48 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_dcui_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_dcui_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -64,11 +61,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -90,8 +87,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -106,26 +101,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_shell.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_shell.py
index 9962b04be..5cc4377f1 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_shell.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_shell.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -83,11 +80,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -123,8 +120,6 @@ PAYLOAD_FORMAT = {
}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -139,26 +134,27 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
- get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -224,7 +220,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_shell_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_shell_info.py
index 1821b6b60..78cc1a29a 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_shell_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_shell_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -66,11 +63,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -95,8 +92,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -111,26 +106,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_ssh.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_ssh.py
index d48605e82..85add817c 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_ssh.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_ssh.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -75,11 +72,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -103,8 +100,6 @@ PAYLOAD_FORMAT = {
"set": {"query": {}, "body": {"enabled": "enabled"}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -119,26 +114,27 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
- get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -203,7 +199,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_ssh_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_ssh_info.py
index fd6b47701..debb75fd4 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_ssh_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_access_ssh_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -64,11 +61,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -91,8 +88,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -107,26 +102,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_applmgmt_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_applmgmt_info.py
index 56563f611..ce822f432 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_applmgmt_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_applmgmt_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -64,11 +61,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -91,8 +88,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -107,26 +102,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_database_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_database_info.py
index 0a73c8e14..2b6c5e41b 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_database_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_database_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -64,11 +61,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -85,8 +82,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -101,26 +96,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_databasestorage_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_databasestorage_info.py
index c45b70893..c23c4b5cf 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_databasestorage_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_databasestorage_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -64,11 +61,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -91,8 +88,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -107,26 +102,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_load_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_load_info.py
index 682073a76..a5f632627 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_load_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_load_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -64,11 +61,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -91,8 +88,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -107,26 +102,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_mem_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_mem_info.py
index 4d36033c8..4e02ed37b 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_mem_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_mem_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -64,11 +61,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -78,6 +75,7 @@ EXAMPLES = r"""
"""
RETURN = r"""
+
# content generated by the update_return_section callback# task: Get the system mem status
value:
description: Get the system mem status
@@ -91,8 +89,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -107,26 +103,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_softwarepackages_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_softwarepackages_info.py
index 0ced96666..da749d9c6 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_softwarepackages_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_softwarepackages_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -69,11 +66,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -96,8 +93,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -112,26 +107,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_storage_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_storage_info.py
index abe8be6a2..d334c03e2 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_storage_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_storage_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -64,11 +61,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -91,8 +88,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -107,26 +102,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_swap_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_swap_info.py
index 1dd108a64..ba7c51d40 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_swap_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_swap_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -64,11 +61,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -91,8 +88,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -107,26 +102,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_system_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_system_info.py
index ba094ada2..2102647d2 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_system_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_health_system_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -64,11 +61,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -91,8 +88,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -107,26 +102,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_infraprofile_configs.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_infraprofile_configs.py
index 5bb72f120..8c685fde6 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_infraprofile_configs.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_infraprofile_configs.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -88,11 +85,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -137,8 +134,6 @@ PAYLOAD_FORMAT = {
}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -153,26 +148,27 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
- get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -241,7 +237,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_infraprofile_configs_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_infraprofile_configs_info.py
index 61e865798..ae36681b4 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_infraprofile_configs_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_infraprofile_configs_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -64,11 +61,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -97,8 +94,6 @@ PAYLOAD_FORMAT = {
"list": {"query": {}, "body": {}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -113,26 +108,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_localaccounts_globalpolicy.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_localaccounts_globalpolicy.py
index 6193406ee..ee3fe2a1f 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_localaccounts_globalpolicy.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_localaccounts_globalpolicy.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -19,11 +16,13 @@ options:
description:
- Maximum number of days a password may be used. If the password is older
than this, a password change will be forced.
+ - If unset then the restriction will be ignored.
type: int
min_days:
description:
- Minimum number of days allowed between password changes. Any password changes
attempted sooner than this will be rejected.
+ - If unset then the restriction will be ignored.
type: int
session_timeout:
description:
@@ -80,16 +79,17 @@ options:
description:
- Number of days warning given before a password expires. A zero means warning
is given only upon the day of expiration.
+ - If unset then no warning will be provided.
type: int
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -120,8 +120,6 @@ PAYLOAD_FORMAT = {
}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -136,26 +134,27 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
- get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -224,7 +223,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_localaccounts_globalpolicy_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_localaccounts_globalpolicy_info.py
index 6894e980e..6ae13879d 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_localaccounts_globalpolicy_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_localaccounts_globalpolicy_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -64,11 +61,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -94,8 +91,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -110,26 +105,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_localaccounts_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_localaccounts_info.py
index 80c561463..a0ef2687b 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_localaccounts_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_localaccounts_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -68,11 +65,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -124,8 +121,6 @@ PAYLOAD_FORMAT = {
"list": {"query": {}, "body": {}, "path": {}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -143,23 +138,23 @@ from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest imp
build_full_device_list,
exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_monitoring_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_monitoring_info.py
index 9bd24c17d..d554c1b34 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_monitoring_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_monitoring_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -25,7 +22,9 @@ options:
version_added: 2.1.0
stat_id:
description:
- - statistic item id Required with I(state=['get'])
+ - statistic item id
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.appliance_monitoring_info).
+ Required with I(state=['get'])
type: str
vcenter_hostname:
description:
@@ -68,11 +67,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -918,8 +917,6 @@ PAYLOAD_FORMAT = {
"list": {"query": {}, "body": {}, "path": {}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -937,23 +934,23 @@ from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest imp
build_full_device_list,
exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_monitoring_query.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_monitoring_query.py
index af56df191..b9a7aea23 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_monitoring_query.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_monitoring_query.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -27,7 +24,8 @@ options:
- MAX
- MIN
description:
- - C(function_type) Defines aggregation function This parameter is mandatory.
+ - I(function_type) enumerated type Defines aggregation function This parameter
+ is mandatory.
required: true
type: str
interval:
@@ -38,13 +36,15 @@ options:
- MINUTES30
- MINUTES5
description:
- - C(interval_type) Defines interval between the values in hours and mins, for
- which aggregation will apply This parameter is mandatory.
+ - I(interval_type) enumerated type Defines interval between the values in
+ hours and mins, for which aggregation will apply This parameter is mandatory.
required: true
type: str
names:
description:
- - 'monitored item IDs Ex: CPU, MEMORY This parameter is mandatory.'
+ - 'monitored item IDs Ex: CPU, MEMORY'
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.appliance_monitoring_info).
elements: str
required: true
type: list
@@ -102,11 +102,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -164,8 +164,6 @@ PAYLOAD_FORMAT = {
}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -180,26 +178,27 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
- get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -277,7 +276,6 @@ def build_url(params):
async def entry_point(module, session):
-
func = globals()["_query"]
return await func(module.params, session)
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking.py
index f5e5ed6f9..38e5c6c27 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -20,6 +17,7 @@ options:
ipv6_enabled:
description:
- IPv6 Enabled or not
+ - If unspecified, leaves the current state of Ipv6.
type: bool
session_timeout:
description:
@@ -77,11 +75,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -111,8 +109,6 @@ PAYLOAD_FORMAT = {
"update": {"query": {}, "body": {"ipv6_enabled": "ipv6_enabled"}, "path": {}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -127,26 +123,27 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
- get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -215,7 +212,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_dns_domains.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_dns_domains.py
index 670fef6e0..accfb894d 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_dns_domains.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_dns_domains.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -80,11 +77,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -112,12 +109,10 @@ value:
# This structure describes the format of the data expected by the end-points
PAYLOAD_FORMAT = {
- "set": {"query": {}, "body": {"domains": "domains"}, "path": {}},
"add": {"query": {}, "body": {"domain": "domain"}, "path": {}},
+ "set": {"query": {}, "body": {"domains": "domains"}, "path": {}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -132,26 +127,27 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
- get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -223,7 +219,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_dns_domains_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_dns_domains_info.py
index 5f0fc5ab7..32305e7cb 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_dns_domains_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_dns_domains_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -64,11 +61,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -91,8 +88,6 @@ PAYLOAD_FORMAT = {
"list": {"query": {}, "body": {}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -107,26 +102,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_dns_hostname.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_dns_hostname.py
index 6e764f653..5278d94ea 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_dns_hostname.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_dns_hostname.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -76,11 +73,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -110,8 +107,6 @@ PAYLOAD_FORMAT = {
"set": {"query": {}, "body": {"name": "name"}, "path": {}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -126,26 +121,27 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
- get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -216,7 +212,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_dns_hostname_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_dns_hostname_info.py
index c8fc059bf..73d948fbc 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_dns_hostname_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_dns_hostname_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -64,11 +61,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -91,8 +88,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -107,26 +102,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_dns_servers.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_dns_servers.py
index 137dadf33..4bee9ebdb 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_dns_servers.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_dns_servers.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -21,8 +18,8 @@ options:
- dhcp
- is_static
description:
- - C(dns_server_mode) Describes DNS Server source (DHCP,static) Required with
- I(state=['set'])
+ - I(dns_server_mode) enumerated type Describes DNS Server source (DHCP,static)
+ Required with I(state=['set'])
type: str
server:
description:
@@ -90,11 +87,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -144,12 +141,10 @@ value:
# This structure describes the format of the data expected by the end-points
PAYLOAD_FORMAT = {
"test": {"query": {}, "body": {"servers": "servers"}, "path": {}},
- "set": {"query": {}, "body": {"mode": "mode", "servers": "servers"}, "path": {}},
"add": {"query": {}, "body": {"server": "server"}, "path": {}},
+ "set": {"query": {}, "body": {"mode": "mode", "servers": "servers"}, "path": {}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -164,26 +159,27 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
- get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -256,7 +252,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_dns_servers_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_dns_servers_info.py
index 6cfb9a51a..82b50b7f4 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_dns_servers_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_dns_servers_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -64,11 +61,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -94,8 +91,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -110,26 +105,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_firewall_inbound.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_firewall_inbound.py
index 4398c2a27..b1eb55b16 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_firewall_inbound.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_firewall_inbound.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -18,14 +15,7 @@ description: 'Set the ordered list of firewall rules to allow or deny traffic fr
one or more incoming IP addresses. This overwrites the existing firewall rules
and creates a new rule list. Within the list of traffic rules, rules are processed
in order of appearance, from top to bottom. For example, the list of rules can
- be as follows: <table> <tr> <th>Address</th><th>Prefix</th><th>Interface Name</th><th>Policy</th>
- </tr> <tr> <td>10.112.0.1</td><td>0</td><td>*</td><td>REJECT</td> </tr> <tr> <td>10.112.0.1</td><td>0</td><td>nic0</td><td>ACCEPT</td>
- </tr> </table> In the above example, the first rule drops all packets originating
- from 10.112.0.1 and<br> the second rule accepts all packets originating from 10.112.0.1
- only on nic0. In effect, the second rule is always ignored which is not desired,
- hence the order has to be swapped. When a connection matches a firewall rule,
- further processing for the connection stops, and the appliance ignores any additional
- firewall rules you have set.'
+ be as follows: [dropped table ]'
options:
rules:
description:
@@ -36,7 +26,8 @@ options:
- ' - C(prefix) (int): CIDR prefix used to mask address. For example, an IPv4
prefix of 24 ignores the low-order 8 bits of address. ([''set''])'
- ' This key is required with [''set''].'
- - ' - C(policy) (str): C(policy) Defines firewall rule policies. ([''set''])'
+ - ' - C(policy) (str): I(policy) enumerated type Defines firewall rule policies.
+ ([''set''])'
- ' This key is required with [''set''].'
- ' - Accepted values:'
- ' - ACCEPT'
@@ -103,11 +94,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -146,8 +137,6 @@ PAYLOAD_FORMAT = {
"set": {"query": {}, "body": {"rules": "rules"}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -162,26 +151,27 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
- get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -248,7 +238,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_firewall_inbound_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_firewall_inbound_info.py
index 5f874f28d..dbe5616c0 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_firewall_inbound_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_firewall_inbound_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -67,11 +64,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -94,8 +91,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -110,26 +105,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_info.py
index 48c364894..ebf11dd3f 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -64,11 +61,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -118,8 +115,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -134,26 +129,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_interfaces_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_interfaces_info.py
index 12ff0d9d8..9d08ce5b9 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_interfaces_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_interfaces_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -17,7 +14,9 @@ description: Get information about a particular network interface.
options:
interface_name:
description:
- - Network interface, for example, "nic0". Required with I(state=['get'])
+ - Network interface, for example, "nic0".
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.appliance_networking_interfaces_info).
+ Required with I(state=['get'])
type: str
session_timeout:
description:
@@ -68,11 +67,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -125,8 +124,6 @@ PAYLOAD_FORMAT = {
"list": {"query": {}, "body": {}, "path": {}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -144,23 +141,23 @@ from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest imp
build_full_device_list,
exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_interfaces_ipv4.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_interfaces_ipv4.py
index 28a2e5e5d..2f2b96f71 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_interfaces_ipv4.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_interfaces_ipv4.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -18,6 +15,8 @@ options:
address:
description:
- The IPv4 address, for example, "10.20.80.191".
+ - This field is optional and it is only relevant when the value of I(mode)
+ is STATIC.
type: str
default_gateway:
description:
@@ -27,10 +26,13 @@ options:
However, if the gateway address is link-local, then it is added for that
interface. This does not support configuration of multiple global default
gateways through different interfaces.
+ - If unset, the defaultGateway was never set.
type: str
interface_name:
description:
- - Network interface to update, for example, "nic0". This parameter is mandatory.
+ - Network interface to update, for example, "nic0".
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.appliance_networking_interfaces_info).
+ This parameter is mandatory.
required: true
type: str
mode:
@@ -39,14 +41,16 @@ options:
- STATIC
- UNCONFIGURED
description:
- - The C(mode) defines different IPv4 address assignment modes. This parameter
- is mandatory.
+ - The I(mode) enumerated type defines different IPv4 address assignment modes.
+ This parameter is mandatory.
required: true
type: str
prefix:
description:
- - The IPv4 CIDR prefix, for example, 24. See http://www.oav.net/mirrors/cidr.html
+ - The IPv4 CIDR prefix, for example, 24. See http://www.oav.net/mirrors/cidr.html
for netmask-to-prefix conversion.
+ - This field is optional and it is only relevant when the value of I(mode)
+ is STATIC.
type: int
session_timeout:
description:
@@ -103,11 +107,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -152,8 +156,6 @@ PAYLOAD_FORMAT = {
}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -168,26 +170,27 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
- get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -263,7 +266,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_interfaces_ipv4_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_interfaces_ipv4_info.py
index 745b77695..5700b1ac0 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_interfaces_ipv4_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_interfaces_ipv4_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -17,7 +14,9 @@ description: Get IPv4 network configuration for specific NIC.
options:
interface_name:
description:
- - The Network interface to query, for example, "nic0". Required with I(state=['get'])
+ - The Network interface to query, for example, "nic0".
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.appliance_networking_interfaces_info).
+ Required with I(state=['get'])
type: str
session_timeout:
description:
@@ -68,11 +67,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -101,8 +100,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {"interface_name": "interface_name"}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -117,26 +114,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_interfaces_ipv6.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_interfaces_ipv6.py
index 8ce23e3cf..fbc73396e 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_interfaces_ipv6.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_interfaces_ipv6.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -51,7 +48,9 @@ options:
type: bool
interface_name:
description:
- - Network interface to update, for example, "nic0". This parameter is mandatory.
+ - Network interface to update, for example, "nic0".
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.appliance_networking_interfaces_info).
+ This parameter is mandatory.
required: true
type: str
session_timeout:
@@ -109,11 +108,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -155,8 +154,6 @@ PAYLOAD_FORMAT = {
}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -171,26 +168,27 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
- get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -262,7 +260,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_interfaces_ipv6_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_interfaces_ipv6_info.py
index 1554a6337..858d3541b 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_interfaces_ipv6_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_interfaces_ipv6_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -17,7 +14,9 @@ description: Get IPv6 network configuration for specific interface.
options:
interface_name:
description:
- - Network interface to query, for example, "nic0". Required with I(state=['get'])
+ - Network interface to query, for example, "nic0".
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.appliance_networking_interfaces_info).
+ Required with I(state=['get'])
type: str
session_timeout:
description:
@@ -68,11 +67,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -105,8 +104,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {"interface_name": "interface_name"}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -121,26 +118,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_noproxy.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_noproxy.py
index 7b85605b5..0c938c1fa 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_noproxy.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_noproxy.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -82,11 +79,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -117,8 +114,6 @@ PAYLOAD_FORMAT = {
"set": {"query": {}, "body": {"servers": "servers"}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -133,26 +128,27 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
- get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -219,7 +215,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_noproxy_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_noproxy_info.py
index 0f6d26b19..4b779ebfa 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_noproxy_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_noproxy_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -64,11 +61,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -78,14 +75,12 @@ EXAMPLES = r"""
"""
RETURN = r"""
-# content generated by the update_return_section callback# task: Get HTTP noproxy configuration
+# content generated by the update_return_section callback# task: Remove the noproxy entries
value:
- description: Get HTTP noproxy configuration
+ description: Remove the noproxy entries
returned: On success
- sample:
- - localhost
- - 127.0.0.1
- type: list
+ sample: {}
+ type: dict
"""
# This structure describes the format of the data expected by the end-points
@@ -93,8 +88,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -109,26 +102,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_proxy.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_proxy.py
index ddf002bb7..71bc5abd0 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_proxy.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_proxy.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -28,22 +25,22 @@ options:
the port to connect to the proxy server. A value of -1 indicates the default
port. ([''test''])'
- ' This key is required with [''test''].'
- - ' - C(username) (str): Username for proxy server. ([''test''])'
- - ' - C(password) (str): Password for proxy server. ([''test''])'
- - ' - C(enabled) (bool): In the result of the C(#get) and C(#list) {@term
- operations} this field indicates whether proxying is enabled for a particular
- protocol. In the input to the C(test) and C(set) {@term operations} this
- field specifies whether proxying should be enabled for a particular protocol.
- ([''test''])'
+ - ' - C(username) (str): Username for proxy server.'
+ - Only set if proxy requires username. (['test'])
+ - ' - C(password) (str): Password for proxy server.'
+ - Only set if proxy requires password. (['test'])
+ - ' - C(enabled) (bool): In the result of the #get and #list operations this
+ field indicates whether proxying is enabled for a particular protocol.
+ In the input to the test and set operations this field specifies whether
+ proxying should be enabled for a particular protocol. ([''test''])'
- ' This key is required with [''test''].'
type: dict
enabled:
description:
- - In the result of the C(#get) and C(#list) {@term operations} this field
- indicates whether proxying is enabled for a particular protocol. In the
- input to the C(test) and C(set) {@term operations} this field specifies
- whether proxying should be enabled for a particular protocol. Required
- with I(state=['set'])
+ - 'In the result of the #get and #list operations this field indicates whether
+ proxying is enabled for a particular protocol. In the input to the test
+ and set operations this field specifies whether proxying should be enabled
+ for a particular protocol. Required with I(state=[''set''])'
type: bool
host:
description:
@@ -52,6 +49,7 @@ options:
password:
description:
- Password for proxy server.
+ - Only set if proxy requires password.
type: str
port:
description:
@@ -88,6 +86,7 @@ options:
username:
description:
- Username for proxy server.
+ - Only set if proxy requires username.
type: str
vcenter_hostname:
description:
@@ -130,11 +129,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -169,6 +168,7 @@ PAYLOAD_FORMAT = {
"body": {"config": "config", "host": "host"},
"path": {"protocol": "protocol"},
},
+ "delete": {"query": {}, "body": {}, "path": {"protocol": "protocol"}},
"set": {
"query": {},
"body": {
@@ -180,11 +180,8 @@ PAYLOAD_FORMAT = {
},
"path": {"protocol": "protocol"},
},
- "delete": {"query": {}, "body": {}, "path": {"protocol": "protocol"}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -199,26 +196,27 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
- get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -296,7 +294,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_proxy_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_proxy_info.py
index e3dbdfcfc..81f7d8dfa 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_proxy_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_networking_proxy_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -68,11 +65,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -108,8 +105,6 @@ PAYLOAD_FORMAT = {
"list": {"query": {}, "body": {}, "path": {}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -127,23 +122,23 @@ from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest imp
build_full_device_list,
exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_ntp.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_ntp.py
index d26d17bf6..5db6acbfa 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_ntp.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_ntp.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -81,11 +78,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -123,8 +120,6 @@ PAYLOAD_FORMAT = {
"set": {"query": {}, "body": {"servers": "servers"}, "path": {}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -139,26 +134,27 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
- get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -227,7 +223,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_ntp_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_ntp_info.py
index a3890ff7b..c3821cc40 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_ntp_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_ntp_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -68,11 +65,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -99,8 +96,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -115,26 +110,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_services.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_services.py
index 4542c19fc..f277fd1eb 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_services.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_services.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -17,7 +14,9 @@ description: Restarts a service
options:
service:
description:
- - identifier of the service to restart This parameter is mandatory.
+ - identifier of the service to restart
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.appliance_services_info).
+ This parameter is mandatory.
required: true
type: str
session_timeout:
@@ -77,11 +76,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -115,13 +114,11 @@ value:
# This structure describes the format of the data expected by the end-points
PAYLOAD_FORMAT = {
- "start": {"query": {}, "body": {}, "path": {"service": "service"}},
"restart": {"query": {}, "body": {}, "path": {"service": "service"}},
+ "start": {"query": {}, "body": {}, "path": {"service": "service"}},
"stop": {"query": {}, "body": {}, "path": {"service": "service"}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -136,26 +133,27 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
- get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -224,7 +222,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_services_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_services_info.py
index 86e945fec..e4fdd345e 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_services_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_services_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -17,7 +14,9 @@ description: Returns the state of a service.
options:
service:
description:
- - identifier of the service whose state is being queried. Required with I(state=['get'])
+ - identifier of the service whose state is being queried.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.appliance_services_info).
+ Required with I(state=['get'])
type: str
session_timeout:
description:
@@ -68,11 +67,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -104,8 +103,6 @@ PAYLOAD_FORMAT = {
"list": {"query": {}, "body": {}, "path": {}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -123,23 +120,23 @@ from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest imp
build_full_device_list,
exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_shutdown.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_shutdown.py
index 496ee87b4..2280d85fe 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_shutdown.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_shutdown.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -81,11 +78,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -125,17 +122,15 @@ value:
# This structure describes the format of the data expected by the end-points
PAYLOAD_FORMAT = {
- "cancel": {"query": {}, "body": {}, "path": {}},
- "reboot": {"query": {}, "body": {"delay": "delay", "reason": "reason"}, "path": {}},
"poweroff": {
"query": {},
"body": {"delay": "delay", "reason": "reason"},
"path": {},
},
+ "reboot": {"query": {}, "body": {"delay": "delay", "reason": "reason"}, "path": {}},
+ "cancel": {"query": {}, "body": {}, "path": {}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -150,26 +145,27 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
- get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -239,7 +235,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_shutdown_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_shutdown_info.py
index 020fb7940..7f85e9396 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_shutdown_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_shutdown_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -64,11 +61,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -98,8 +95,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -114,26 +109,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_globalfips.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_globalfips.py
index 9abe88739..044f9c25f 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_globalfips.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_globalfips.py
@@ -3,22 +3,19 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
module: appliance_system_globalfips
short_description: Enable/Disable Global FIPS mode for the appliance
-description: Enable/Disable Global FIPS mode for the appliance. <p><b>Caution:</b>
- Changing the value of this setting will reboot the Appliance.
+description: 'Enable/Disable Global FIPS mode for the appliance. '
options:
enabled:
description:
- FIPS setting state.
+ - If unset, the value is unchanged.
type: bool
session_timeout:
description:
@@ -75,11 +72,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -93,8 +90,6 @@ PAYLOAD_FORMAT = {
"update": {"query": {}, "body": {"enabled": "enabled"}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -109,26 +104,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
- gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -199,7 +192,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_globalfips_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_globalfips_info.py
index b2cfe5534..e1d003553 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_globalfips_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_globalfips_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -64,11 +61,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -82,8 +79,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -98,26 +93,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_storage.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_storage.py
index f9a1f4eb7..4bfdc3734 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_storage.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_storage.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -71,11 +68,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -105,12 +102,10 @@ value:
# This structure describes the format of the data expected by the end-points
PAYLOAD_FORMAT = {
- "resize_ex": {"query": {}, "body": {}, "path": {}},
"resize": {"query": {}, "body": {}, "path": {}},
+ "resize_ex": {"query": {}, "body": {}, "path": {}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -125,26 +120,27 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
- get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -214,7 +210,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_storage_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_storage_info.py
index 2d6dccebb..9133ff372 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_storage_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_storage_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -64,11 +61,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -91,8 +88,6 @@ PAYLOAD_FORMAT = {
"list": {"query": {}, "body": {}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -107,26 +102,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_time_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_time_info.py
index 9ec1be999..75511d136 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_time_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_time_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -64,11 +61,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -95,8 +92,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -111,26 +106,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_time_timezone.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_time_timezone.py
index f71ce8cf4..361cc68c8 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_time_timezone.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_time_timezone.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -75,11 +72,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -103,8 +100,6 @@ PAYLOAD_FORMAT = {
"set": {"query": {}, "body": {"name": "name"}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -119,26 +114,27 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
- get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -205,7 +201,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_time_timezone_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_time_timezone_info.py
index 55036b151..59da771f7 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_time_timezone_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_time_timezone_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -64,11 +61,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -91,8 +88,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -107,26 +102,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_version_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_version_info.py
index 7a150a3f0..5646884ff 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_version_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_system_version_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -64,11 +61,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -98,8 +95,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -114,26 +109,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_timesync.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_timesync.py
index 0593a6483..b3b04ff80 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_timesync.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_timesync.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -21,8 +18,8 @@ options:
- HOST
- NTP
description:
- - The C(time_sync_mode) defines time synchronization modes This parameter
- is mandatory.
+ - The I(time_sync_mode) enumerated type defines time synchronization modes
+ This parameter is mandatory.
required: true
type: str
session_timeout:
@@ -80,11 +77,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -107,8 +104,6 @@ PAYLOAD_FORMAT = {
"set": {"query": {}, "body": {"mode": "mode"}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -123,26 +118,27 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
- get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -211,7 +207,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_timesync_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_timesync_info.py
index 3cee769a2..28e7f2445 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_timesync_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_timesync_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -64,11 +61,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -91,8 +88,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -107,26 +102,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_update_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_update_info.py
index e136a5781..109b76db0 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_update_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_update_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -64,11 +61,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -93,8 +90,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -109,26 +104,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_vmon_service.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_vmon_service.py
index 086544913..932b8a96f 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_vmon_service.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_vmon_service.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -89,11 +86,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -120,19 +117,17 @@ value:
# This structure describes the format of the data expected by the end-points
PAYLOAD_FORMAT = {
+ "list_details": {"query": {}, "body": {}, "path": {}},
+ "start": {"query": {}, "body": {}, "path": {"service": "service"}},
+ "stop": {"query": {}, "body": {}, "path": {"service": "service"}},
"update": {
"query": {},
"body": {"startup_type": "spec/startup_type"},
"path": {"service": "service"},
},
- "stop": {"query": {}, "body": {}, "path": {"service": "service"}},
- "list_details": {"query": {}, "body": {}, "path": {}},
"restart": {"query": {}, "body": {}, "path": {"service": "service"}},
- "start": {"query": {}, "body": {}, "path": {"service": "service"}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -147,26 +142,27 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
- get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -241,7 +237,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_vmon_service_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_vmon_service_info.py
index 1589c0711..cc73aecf1 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_vmon_service_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/appliance_vmon_service_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -70,11 +67,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -477,8 +474,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {"service": "service"}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -493,26 +488,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/content_configuration.py b/ansible_collections/vmware/vmware_rest/plugins/modules/content_configuration.py
index 5ba1d003f..d32e05dd5 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/content_configuration.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/content_configuration.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -101,11 +98,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -146,8 +143,6 @@ PAYLOAD_FORMAT = {
}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -162,26 +157,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
- gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -253,7 +246,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/content_configuration_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/content_configuration_info.py
index 16dd53d40..391db4c81 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/content_configuration_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/content_configuration_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -64,11 +61,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -95,8 +92,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -111,26 +106,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/content_library_item_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/content_library_item_info.py
index 34e6d1e97..d4556bba8 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/content_library_item_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/content_library_item_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -73,11 +70,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -184,8 +181,6 @@ PAYLOAD_FORMAT = {
"list": {"query": {"library_id": "library_id"}, "body": {}, "path": {}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -203,23 +198,23 @@ from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest imp
build_full_device_list,
exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/content_locallibrary.py b/ansible_collections/vmware/vmware_rest/plugins/modules/content_locallibrary.py
index e886d9d31..8475105b7 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/content_locallibrary.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/content_locallibrary.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -110,6 +107,12 @@ options:
by a remote file system, the library JSON file will be stored at {library_id}/lib.json
in the remote file system path. ([''present''])'
type: dict
+ security_policy_id:
+ description:
+ - 'Represents the security policy applied to this library. Setting the field
+ will make the library secure. This field is ignored in C(update)operation
+ if {@link #unsetSecurityPolicyId} is set to C(True).'
+ type: str
server_guid:
description:
- The unique identifier of the vCenter server where the library exists.
@@ -257,6 +260,14 @@ options:
can be used to determine which additional services can be performed with
a library.
type: str
+ unset_security_policy_id:
+ description:
+ - 'This represents the intent of the change to {@link #securityPolicyId} in
+ C(update)operation. If this field is set to C(True), any security policy
+ applied to the library will be removed. If this field is set to C(False),
+ any security policy applied to library will be changed to the value specified
+ in {@link #securityPolicyId}, if any.'
+ type: bool
vcenter_hostname:
description:
- The hostname or IP address of the vSphere vCenter
@@ -307,11 +318,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -1242,7 +1253,6 @@ results:
# This structure describes the format of the data expected by the end-points
PAYLOAD_FORMAT = {
- "delete": {"query": {}, "body": {}, "path": {"library_id": "library_id"}},
"update": {
"query": {},
"body": {
@@ -1254,10 +1264,12 @@ PAYLOAD_FORMAT = {
"name": "name",
"optimization_info": "optimization_info",
"publish_info": "publish_info",
+ "security_policy_id": "security_policy_id",
"server_guid": "server_guid",
"storage_backings": "storage_backings",
"subscription_info": "subscription_info",
"type": "type",
+ "unset_security_policy_id": "unset_security_policy_id",
"version": "version",
},
"path": {"library_id": "library_id"},
@@ -1278,18 +1290,19 @@ PAYLOAD_FORMAT = {
"name": "name",
"optimization_info": "optimization_info",
"publish_info": "publish_info",
+ "security_policy_id": "security_policy_id",
"server_guid": "server_guid",
"storage_backings": "storage_backings",
"subscription_info": "subscription_info",
"type": "type",
+ "unset_security_policy_id": "unset_security_policy_id",
"version": "version",
},
"path": {},
},
+ "delete": {"query": {}, "body": {}, "path": {"library_id": "library_id"}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -1304,26 +1317,28 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -1359,6 +1374,7 @@ def prepare_argument_spec():
argument_spec["name"] = {"type": "str"}
argument_spec["optimization_info"] = {"type": "dict"}
argument_spec["publish_info"] = {"type": "dict"}
+ argument_spec["security_policy_id"] = {"type": "str"}
argument_spec["server_guid"] = {"type": "str"}
argument_spec["state"] = {
"type": "str",
@@ -1369,6 +1385,7 @@ def prepare_argument_spec():
argument_spec["subscription_info"] = {"type": "dict"}
argument_spec["subscriptions"] = {"type": "list", "elements": "dict"}
argument_spec["type"] = {"type": "str", "choices": ["LOCAL", "SUBSCRIBED"]}
+ argument_spec["unset_security_policy_id"] = {"type": "bool"}
argument_spec["version"] = {"type": "str"}
return argument_spec
@@ -1407,7 +1424,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
@@ -1424,7 +1440,6 @@ async def entry_point(module, session):
async def _create(params, session):
-
lookup_url = per_id_url = build_url(params)
uniquity_keys = ["name"]
comp_func = None
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/content_locallibrary_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/content_locallibrary_info.py
index c7559e03b..a01f6388f 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/content_locallibrary_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/content_locallibrary_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -68,11 +65,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -323,8 +320,6 @@ PAYLOAD_FORMAT = {
"list": {"query": {}, "body": {}, "path": {}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -342,23 +337,23 @@ from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest imp
build_full_device_list,
exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/content_subscribedlibrary.py b/ansible_collections/vmware/vmware_rest/plugins/modules/content_subscribedlibrary.py
index 782233286..6feffb8bc 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/content_subscribedlibrary.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/content_subscribedlibrary.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -114,6 +111,12 @@ options:
by a remote file system, the library JSON file will be stored at {library_id}/lib.json
in the remote file system path. ([''present''])'
type: dict
+ security_policy_id:
+ description:
+ - 'Represents the security policy applied to this library. Setting the field
+ will make the library secure. This field is ignored in C(update)operation
+ if {@link #unsetSecurityPolicyId} is set to C(True).'
+ type: str
server_guid:
description:
- The unique identifier of the vCenter server where the library exists.
@@ -255,6 +258,14 @@ options:
can be used to determine which additional services can be performed with
a library.
type: str
+ unset_security_policy_id:
+ description:
+ - 'This represents the intent of the change to {@link #securityPolicyId} in
+ C(update)operation. If this field is set to C(True), any security policy
+ applied to the library will be removed. If this field is set to C(False),
+ any security policy applied to library will be changed to the value specified
+ in {@link #securityPolicyId}, if any.'
+ type: bool
vcenter_hostname:
description:
- The hostname or IP address of the vSphere vCenter
@@ -305,11 +316,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -446,7 +457,7 @@ results:
# This structure describes the format of the data expected by the end-points
PAYLOAD_FORMAT = {
- "sync": {"query": {}, "body": {}, "path": {"library_id": "library_id"}},
+ "evict": {"query": {}, "body": {}, "path": {"library_id": "library_id"}},
"update": {
"query": {},
"body": {
@@ -458,14 +469,21 @@ PAYLOAD_FORMAT = {
"name": "name",
"optimization_info": "optimization_info",
"publish_info": "publish_info",
+ "security_policy_id": "security_policy_id",
"server_guid": "server_guid",
"storage_backings": "storage_backings",
"subscription_info": "subscription_info",
"type": "type",
+ "unset_security_policy_id": "unset_security_policy_id",
"version": "version",
},
"path": {"library_id": "library_id"},
},
+ "probe": {
+ "query": {},
+ "body": {"subscription_info": "subscription_info"},
+ "path": {},
+ },
"create": {
"query": {"client_token": "client_token"},
"body": {
@@ -477,25 +495,20 @@ PAYLOAD_FORMAT = {
"name": "name",
"optimization_info": "optimization_info",
"publish_info": "publish_info",
+ "security_policy_id": "security_policy_id",
"server_guid": "server_guid",
"storage_backings": "storage_backings",
"subscription_info": "subscription_info",
"type": "type",
+ "unset_security_policy_id": "unset_security_policy_id",
"version": "version",
},
"path": {},
},
"delete": {"query": {}, "body": {}, "path": {"library_id": "library_id"}},
- "probe": {
- "query": {},
- "body": {"subscription_info": "subscription_info"},
- "path": {},
- },
- "evict": {"query": {}, "body": {}, "path": {"library_id": "library_id"}},
+ "sync": {"query": {}, "body": {}, "path": {"library_id": "library_id"}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -510,26 +523,28 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -565,6 +580,7 @@ def prepare_argument_spec():
argument_spec["name"] = {"type": "str"}
argument_spec["optimization_info"] = {"type": "dict"}
argument_spec["publish_info"] = {"type": "dict"}
+ argument_spec["security_policy_id"] = {"type": "str"}
argument_spec["server_guid"] = {"type": "str"}
argument_spec["state"] = {
"type": "str",
@@ -574,6 +590,7 @@ def prepare_argument_spec():
argument_spec["storage_backings"] = {"type": "list", "elements": "dict"}
argument_spec["subscription_info"] = {"type": "dict"}
argument_spec["type"] = {"type": "str", "choices": ["LOCAL", "SUBSCRIBED"]}
+ argument_spec["unset_security_policy_id"] = {"type": "bool"}
argument_spec["version"] = {"type": "str"}
return argument_spec
@@ -614,7 +631,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
@@ -631,7 +647,6 @@ async def entry_point(module, session):
async def _create(params, session):
-
lookup_url = per_id_url = build_url(params)
uniquity_keys = ["name"]
comp_func = None
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/content_subscribedlibrary_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/content_subscribedlibrary_info.py
index 891b65e6f..c80607f02 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/content_subscribedlibrary_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/content_subscribedlibrary_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -68,11 +65,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -113,8 +110,6 @@ PAYLOAD_FORMAT = {
"list": {"query": {}, "body": {}, "path": {}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -132,23 +127,23 @@ from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest imp
build_full_device_list,
exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_cluster_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_cluster_info.py
index e0947f099..d2b8a0ef7 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_cluster_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_cluster_info.py
@@ -3,27 +3,27 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
module: vcenter_cluster_info
-short_description: Retrieves information about the cluster corresponding to {@param.name
- cluster}.
-description: Retrieves information about the cluster corresponding to {@param.name
- cluster}.
+short_description: Retrieves information about the cluster corresponding to cluster.
+description: Retrieves information about the cluster corresponding to cluster.
options:
cluster:
description:
- - Identifier of the cluster. Required with I(state=['get'])
+ - Identifier of the cluster.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_cluster_info).
+ Required with I(state=['get'])
type: str
clusters:
description:
- Identifiers of clusters that can match the filter.
+ - If unset or empty, clusters with any identifier match the filter.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_cluster_info).
elements: str
type: list
datacenters:
@@ -31,6 +31,9 @@ options:
- filter_datacenters
description:
- Datacenters that must contain the cluster for the cluster to match the filter.
+ - If unset or empty, clusters in any datacenter match the filter.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_datacenter_info).
elements: str
type: list
folders:
@@ -38,13 +41,17 @@ options:
- filter_folders
description:
- Folders that must contain the cluster for the cluster to match the filter.
+ - If unset or empty, clusters in any folder match the filter.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_folder_info).
elements: str
type: list
names:
aliases:
- filter_names
description:
- - Names that clusters must have to match the filter (see {@link Info#name}).
+ - Names that clusters must have to match the filter (see I(name)).
+ - If unset or empty, clusters with any name match the filter.
elements: str
type: list
session_timeout:
@@ -96,11 +103,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -145,8 +152,6 @@ PAYLOAD_FORMAT = {
},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -164,23 +169,23 @@ from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest imp
build_full_device_list,
exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_datacenter.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_datacenter.py
index 638084024..dd153a1f3 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_datacenter.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_datacenter.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -17,15 +14,24 @@ description: Create a new datacenter in the vCenter inventory
options:
datacenter:
description:
- - Identifier of the datacenter to be deleted. Required with I(state=['absent'])
+ - Identifier of the datacenter to be deleted.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_datacenter_info).
+ Required with I(state=['absent'])
type: str
folder:
description:
- Datacenter folder in which the new datacenter should be created.
+ - This field is currently required. In the future, if this field is unset,
+ the system will attempt to choose a suitable folder for the datacenter;
+ if a folder cannot be chosen, the datacenter creation operation will fail.
+ - 'When clients pass a value of this structure as a parameter, the field must
+ be the id of a resource returned by M(vmware.vmware_rest.vcenter_folder_info). '
type: str
force:
description:
- If true, delete the datacenter even if it is not empty.
+ - If unset a ResourceInUse error will be reported if the datacenter is not
+ empty. This is the equivalent of passing the value false.
type: bool
name:
description:
@@ -87,18 +93,17 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
- name: Get a list of all the datacenters
register: existing_datacenters
vmware.vmware_rest.vcenter_datacenter_info:
-
- name: Force delete the existing DC
vmware.vmware_rest.vcenter_datacenter:
state: absent
@@ -108,7 +113,6 @@ EXAMPLES = r"""
until:
- _result is not failed
retries: 7
-
- name: Create datacenter my_dc
vmware.vmware_rest.vcenter_datacenter:
name: my_dc
@@ -164,8 +168,6 @@ PAYLOAD_FORMAT = {
},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -180,26 +182,28 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -271,7 +275,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
@@ -288,20 +291,20 @@ async def entry_point(module, session):
async def _create(params, session):
-
lookup_url = per_id_url = build_url(params)
uniquity_keys = ["datacenter"]
comp_func = None
async def lookup_with_filters(params, session, url):
- # e.g: for the datacenter resources
+ search_filter = ""
+
if "folder" not in params:
return
+ search_filter = f"&folders={params.get('folder')}"
+
if "name" not in params:
return
- async with session.get(
- f"{url}?names={params['name']}&folders={params['folder']}"
- ) as resp:
+ async with session.get(f"{url}?names={params['name']}{search_filter}") as resp:
_json = await resp.json()
if isinstance(_json, list) and len(_json) == 1:
return await get_device_info(session, url, _json[0]["datacenter"])
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_datacenter_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_datacenter_info.py
index 8454fe5d4..1e7d03e16 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_datacenter_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_datacenter_info.py
@@ -3,29 +3,29 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
module: vcenter_datacenter_info
-short_description: Retrieves information about the datacenter corresponding to {@param.name
- datacenter}.
-description: Retrieves information about the datacenter corresponding to {@param.name
- datacenter}.
+short_description: Retrieves information about the datacenter corresponding to datacenter.
+description: Retrieves information about the datacenter corresponding to datacenter.
options:
datacenter:
description:
- - Identifier of the datacenter. Required with I(state=['get'])
+ - Identifier of the datacenter.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_datacenter_info).
+ Required with I(state=['get'])
type: str
datacenters:
aliases:
- filter_datacenters
description:
- Identifiers of datacenters that can match the filter.
+ - If unset or empty, datacenters with any identifier match the filter.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_datacenter_info).
elements: str
type: list
folders:
@@ -34,13 +34,17 @@ options:
description:
- Folders that must contain the datacenters for the datacenter to match the
filter.
+ - If unset or empty, datacenters in any folder match the filter.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_folder_info).
elements: str
type: list
names:
aliases:
- filter_names
description:
- - Names that datacenters must have to match the filter (see {@link Info#name}).
+ - Names that datacenters must have to match the filter (see I(name)).
+ - If unset or empty, datacenters with any name match the filter.
elements: str
type: list
session_timeout:
@@ -92,11 +96,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -130,8 +134,6 @@ PAYLOAD_FORMAT = {
},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -149,23 +151,23 @@ from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest imp
build_full_device_list,
exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_datastore_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_datastore_info.py
index 7c388e4bc..aab450b0f 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_datastore_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_datastore_info.py
@@ -3,18 +3,14 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
module: vcenter_datastore_info
-short_description: Retrieves information about the datastore indicated by {@param.name
- datastore}.
-description: Retrieves information about the datastore indicated by {@param.name datastore}.
+short_description: Retrieves information about the datastore indicated by datastore.
+description: Retrieves information about the datastore indicated by datastore.
options:
datacenters:
aliases:
@@ -22,16 +18,23 @@ options:
description:
- Datacenters that must contain the datastore for the datastore to match the
filter.
+ - If unset or empty, datastores in any datacenter match the filter.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_datacenter_info).
elements: str
type: list
datastore:
description:
- - Identifier of the datastore for which information should be retrieved. Required
- with I(state=['get'])
+ - Identifier of the datastore for which information should be retrieved.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_datastore_info).
+ Required with I(state=['get'])
type: str
datastores:
description:
- Identifiers of datastores that can match the filter.
+ - If unset or empty, datastores with any identifier match the filter.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_datastore_info).
elements: str
type: list
folders:
@@ -39,13 +42,17 @@ options:
- filter_folders
description:
- Folders that must contain the datastore for the datastore to match the filter.
+ - If unset or empty, datastores in any folder match the filter.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_folder_info).
elements: str
type: list
names:
aliases:
- filter_names
description:
- - Names that datastores must have to match the filter (see {@link Info#name}).
+ - Names that datastores must have to match the filter (see I(name)).
+ - If unset or empty, datastores with any name match the filter.
elements: str
type: list
session_timeout:
@@ -60,7 +67,8 @@ options:
aliases:
- filter_types
description:
- - Types that datastores must have to match the filter (see {@link Summary#type}).
+ - Types that datastores must have to match the filter (see I(type)).
+ - If unset or empty, datastores with any type match the filter.
elements: str
type: list
vcenter_hostname:
@@ -104,11 +112,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -157,8 +165,6 @@ PAYLOAD_FORMAT = {
},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -176,23 +182,23 @@ from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest imp
build_full_device_list,
exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_folder_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_folder_info.py
index 927ab2f0b..e17bab127 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_folder_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_folder_info.py
@@ -3,25 +3,25 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
module: vcenter_folder_info
short_description: Returns information about at most 1000 visible (subject to permission
- checks) folders in vCenter matching the {@link FilterSpec}.
+ checks) folders in vCenter matching the Folder.FilterSpec.
description: Returns information about at most 1000 visible (subject to permission
- checks) folders in vCenter matching the {@link FilterSpec}.
+ checks) folders in vCenter matching the Folder.FilterSpec.
options:
datacenters:
aliases:
- filter_datacenters
description:
- Datacenters that must contain the folder for the folder to match the filter.
+ - If unset or empty, folder in any datacenter match the filter.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_datacenter_info).
elements: str
type: list
folders:
@@ -29,18 +29,25 @@ options:
- filter_folders
description:
- Identifiers of folders that can match the filter.
+ - If unset or empty, folders with any identifier match the filter.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_folder_info).
elements: str
type: list
names:
aliases:
- filter_names
description:
- - Names that folders must have to match the filter (see {@link Summary#name}).
+ - Names that folders must have to match the filter (see I(name)).
+ - If unset or empty, folders with any name match the filter.
elements: str
type: list
parent_folders:
description:
- Folders that must contain the folder for the folder to match the filter.
+ - If unset or empty, folder in any folder match the filter.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_folder_info).
elements: str
type: list
session_timeout:
@@ -61,9 +68,9 @@ options:
- NETWORK
- VIRTUAL_MACHINE
description:
- - The C(type) defines the type of a vCenter Server folder. The type of a
- folder determines what what kinds of children can be contained in the
- folder.
+ - The I(type) enumerated type defines the type of a vCenter Server folder.
+ The type of a folder determines what what kinds of children can be contained
+ in the folder.
type: str
vcenter_hostname:
description:
@@ -106,11 +113,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -154,8 +161,6 @@ PAYLOAD_FORMAT = {
}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -170,26 +175,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_host.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_host.py
index ff00c6754..73f6e98ac 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_host.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_host.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -18,22 +15,29 @@ description: Add a new standalone host in the vCenter inventory. The newly conne
before adding the host to its inventory. In the case where the SSL certificate
cannot be verified because the Certificate Authority is not recognized or the
certificate is self signed, the vCenter Server will fall back to thumbprint verification
- mode as defined by {@link CreateSpec.ThumbprintVerification}.
+ mode as defined by Host.CreateSpec.ThumbprintVerification.
options:
folder:
description:
- Host and cluster folder in which the new standalone host should be created.
+ - This field is currently required. In the future, if this field is unset,
+ the system will attempt to choose a suitable folder for the host; if a
+ folder cannot be chosen, the host creation operation will fail.
+ - 'When clients pass a value of this structure as a parameter, the field must
+ be the id of a resource returned by M(vmware.vmware_rest.vcenter_folder_info). '
type: str
force_add:
description:
- Whether host should be added to the vCenter Server even if it is being managed
by another vCenter Server. The original vCenterServer loses connection
to the host.
+ - If unset, forceAdd is default to false.
type: bool
host:
description:
- - Identifier of the host to be disconnected. Required with I(state=['absent',
- 'connect', 'disconnect'])
+ - Identifier of the host to be disconnected.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_host_info).
+ Required with I(state=['absent', 'connect', 'disconnect'])
type: str
hostname:
description:
@@ -46,6 +50,7 @@ options:
port:
description:
- The port of the host.
+ - If unset, port 443 will be used.
type: int
session_timeout:
description:
@@ -70,14 +75,16 @@ options:
The thumbprint is always computed using the SHA1 hash and is the string
representation of that hash in the format: xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx
where, ''x'' represents a hexadecimal digit.'
+ - This field is optional and it is only relevant when the value of I(thumbprint_verification)
+ is THUMBPRINT.
type: str
thumbprint_verification:
choices:
- NONE
- THUMBPRINT
description:
- - The C(thumbprint_verification) defines the thumbprint verification schemes
- for a host's SSL certificate. Required with I(state=['present'])
+ - The I(thumbprint_verification) enumerated type defines the thumbprint verification
+ schemes for a host's SSL certificate. Required with I(state=['present'])
type: str
user_name:
description:
@@ -124,11 +131,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -152,9 +159,8 @@ value:
# This structure describes the format of the data expected by the end-points
PAYLOAD_FORMAT = {
- "delete": {"query": {}, "body": {}, "path": {"host": "host"}},
- "disconnect": {"query": {}, "body": {}, "path": {"host": "host"}},
"connect": {"query": {}, "body": {}, "path": {"host": "host"}},
+ "disconnect": {"query": {}, "body": {}, "path": {"host": "host"}},
"create": {
"query": {},
"body": {
@@ -169,10 +175,9 @@ PAYLOAD_FORMAT = {
},
"path": {},
},
+ "delete": {"query": {}, "body": {}, "path": {"host": "host"}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -187,26 +192,28 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -286,7 +293,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
@@ -328,20 +334,20 @@ async def _connect(params, session):
async def _create(params, session):
-
lookup_url = per_id_url = build_url(params)
uniquity_keys = ["host"]
comp_func = None
async def lookup_with_filters(params, session, url):
- # e.g: for the datacenter resources
+ search_filter = ""
+
if "folder" not in params:
return
+ search_filter = f"&folders={params.get('folder')}"
+
if "name" not in params:
return
- async with session.get(
- f"{url}?names={params['name']}&folders={params['folder']}"
- ) as resp:
+ async with session.get(f"{url}?names={params['name']}{search_filter}") as resp:
_json = await resp.json()
if isinstance(_json, list) and len(_json) == 1:
return await get_device_info(session, url, _json[0]["host"])
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_host_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_host_info.py
index 129ca237e..febdf6a49 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_host_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_host_info.py
@@ -3,29 +3,31 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
module: vcenter_host_info
short_description: Returns information about at most 2500 visible (subject to permission
- checks) hosts in vCenter matching the {@link FilterSpec}.
+ checks) hosts in vCenter matching the Host.FilterSpec.
description: Returns information about at most 2500 visible (subject to permission
- checks) hosts in vCenter matching the {@link FilterSpec}.
+ checks) hosts in vCenter matching the Host.FilterSpec.
options:
clusters:
description:
- Clusters that must contain the hosts for the hosts to match the filter.
+ - If unset or empty, hosts in any cluster and hosts that are not in a cluster
+ match the filter. If this field is not empty and I(standalone) is true,
+ no hosts will match the filter.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_cluster_info).
elements: str
type: list
connection_states:
description:
- - Connection states that a host must be in to match the filter (see {@link
- Summary#connectionState}.
+ - Connection states that a host must be in to match the filter (see I()
+ - If unset or empty, hosts in any connection state match the filter.
elements: str
type: list
datacenters:
@@ -33,6 +35,9 @@ options:
- filter_datacenters
description:
- Datacenters that must contain the hosts for the hosts to match the filter.
+ - If unset or empty, hosts in any datacenter match the filter.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_datacenter_info).
elements: str
type: list
folders:
@@ -40,18 +45,25 @@ options:
- filter_folders
description:
- Folders that must contain the hosts for the hosts to match the filter.
+ - If unset or empty, hosts in any folder match the filter.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_folder_info).
elements: str
type: list
hosts:
description:
- Identifiers of hosts that can match the filter.
+ - If unset or empty, hosts with any identifier match the filter.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_host_info).
elements: str
type: list
names:
aliases:
- filter_names
description:
- - Names that hosts must have to match the filter (see {@link Summary#name}).
+ - Names that hosts must have to match the filter (see I(name)).
+ - If unset or empty, hosts with any name match the filter.
elements: str
type: list
session_timeout:
@@ -67,6 +79,9 @@ options:
- If true, only hosts that are not part of a cluster can match the filter,
and if false, only hosts that are are part of a cluster can match the
filter.
+ - If unset Hosts can match filter independent of whether they are part of
+ a cluster or not. If this field is true and I(clusters) os not empty,
+ no hosts will match the filter.
type: bool
vcenter_hostname:
description:
@@ -109,11 +124,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -152,8 +167,6 @@ PAYLOAD_FORMAT = {
}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -171,23 +184,23 @@ from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest imp
build_full_device_list,
exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_network_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_network_info.py
index cd1c83337..66b24cc1c 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_network_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_network_info.py
@@ -3,25 +3,25 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
module: vcenter_network_info
short_description: Returns information about at most 1000 visible (subject to permission
- checks) networks in vCenter matching the {@link FilterSpec}.
+ checks) networks in vCenter matching the Network.FilterSpec.
description: Returns information about at most 1000 visible (subject to permission
- checks) networks in vCenter matching the {@link FilterSpec}.
+ checks) networks in vCenter matching the Network.FilterSpec.
options:
datacenters:
aliases:
- filter_datacenters
description:
- Datacenters that must contain the network for the network to match the filter.
+ - If unset or empty, networks in any datacenter match the filter.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_datacenter_info).
elements: str
type: list
folders:
@@ -29,18 +29,25 @@ options:
- filter_folders
description:
- Folders that must contain the network for the network to match the filter.
+ - If unset or empty, networks in any folder match the filter.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_folder_info).
elements: str
type: list
names:
aliases:
- filter_names
description:
- - Names that networks must have to match the filter (see {@link Summary#name}).
+ - Names that networks must have to match the filter (see I(name)).
+ - If unset or empty, networks with any name match the filter.
elements: str
type: list
networks:
description:
- Identifiers of networks that can match the filter.
+ - If unset or empty, networks with any identifier match the filter.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_network_info).
elements: str
type: list
session_timeout:
@@ -55,7 +62,8 @@ options:
aliases:
- filter_types
description:
- - Types that networks must have to match the filter (see {@link Summary#type}).
+ - Types that networks must have to match the filter (see I(type)).
+ - If unset, networks with any type match the filter.
elements: str
type: list
vcenter_hostname:
@@ -99,11 +107,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -150,8 +158,6 @@ PAYLOAD_FORMAT = {
}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -166,26 +172,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_ovf_libraryitem.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_ovf_libraryitem.py
index 261b9443f..06c4b8722 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_ovf_libraryitem.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_ovf_libraryitem.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -181,11 +178,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -281,6 +278,11 @@ value:
# This structure describes the format of the data expected by the end-points
PAYLOAD_FORMAT = {
+ "deploy": {
+ "query": {"client_token": "client_token"},
+ "body": {"deployment_spec": "deployment_spec", "target": "target"},
+ "path": {"ovf_library_item_id": "ovf_library_item_id"},
+ },
"filter": {
"query": {},
"body": {"target": "target"},
@@ -291,15 +293,8 @@ PAYLOAD_FORMAT = {
"body": {"create_spec": "create_spec", "source": "source", "target": "target"},
"path": {},
},
- "deploy": {
- "query": {"client_token": "client_token"},
- "body": {"deployment_spec": "deployment_spec", "target": "target"},
- "path": {"ovf_library_item_id": "ovf_library_item_id"},
- },
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -314,26 +309,28 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -409,7 +406,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
@@ -426,7 +422,6 @@ async def entry_point(module, session):
async def _create(params, session):
-
library_id = (
params["target"]["library_id"] if "library_id" in params["target"] else None
)
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_resourcepool.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_resourcepool.py
index c0e9cabcf..5e5d77d68 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_resourcepool.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_resourcepool.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -18,81 +15,101 @@ options:
cpu_allocation:
description:
- Resource allocation for CPU.
+ - if unset or empty, the CPU allocation of the resource pool will not be changed.
- 'Valid attributes are:'
- ' - C(reservation) (int): Amount of resource that is guaranteed available
to a resource pool. Reserved resources are not wasted if they are not
used. If the utilization is less than the reservation, the resources can
be utilized by other running virtual machines. Units are MB fo memory,
- and MHz for CPU. ([''present''])'
+ and MHz for CPU.'
+ - If unset or empty, I(reservation) will be set to 0. (['present'])
- ' - C(expandable_reservation) (bool): In a resource pool with an expandable
reservation, the reservation can grow beyond the specified value, if the
parent resource pool has unreserved resources. A non-expandable reservation
- is called a fixed reservation. ([''present''])'
+ is called a fixed reservation.'
+ - If unset or empty, I(expandable_reservation) will be set to true. (['present'])
- ' - C(limit) (int): The utilization of a resource pool will not exceed this
limit, even if there are available resources. This is typically used to
ensure a consistent performance of resource pools independent of available
resources. If set to -1, then there is no fixed limit on resource usage
(only bounded by available resources and shares). Units are MB for memory,
- and MHz for CPU. ([''present''])'
+ and MHz for CPU.'
+ - If unset or empty, I(limit) will be set to -1. (['present'])
- ' - C(shares) (dict): Shares are used in case of resource contention. ([''present''])'
- ' - Accepted keys:'
- - ' - level (string): The C(level) defines the possible values for the
+ - ' - level (string): This option defines the possible values for the
allocation level.'
- 'Accepted value for this field:'
- ' - C(CUSTOM)'
- ' - C(HIGH)'
- ' - C(LOW)'
- ' - C(NORMAL)'
- - ' - shares (integer): When {@link #level} is set to CUSTOM, it is the
- number of shares allocated. Otherwise, this value is ignored. There is
- no unit for this value. It is a relative measure based on the settings
- for other resource pools.'
+ - ' - shares (integer): When I(level) is set to CUSTOM, it is the number
+ of shares allocated. Otherwise, this value is ignored. '
+ - ' There is no unit for this value. It is a relative measure based on the
+ settings for other resource pools.'
+ - ''
+ - This field is optional and it is only relevant when the value of I(level)
+ is CUSTOM.
type: dict
memory_allocation:
description:
- Resource allocation for CPU.
+ - if unset or empty, the CPU allocation of the resource pool will not be changed.
- 'Valid attributes are:'
- ' - C(reservation) (int): Amount of resource that is guaranteed available
to a resource pool. Reserved resources are not wasted if they are not
used. If the utilization is less than the reservation, the resources can
be utilized by other running virtual machines. Units are MB fo memory,
- and MHz for CPU. ([''present''])'
+ and MHz for CPU.'
+ - If unset or empty, I(reservation) will be set to 0. (['present'])
- ' - C(expandable_reservation) (bool): In a resource pool with an expandable
reservation, the reservation can grow beyond the specified value, if the
parent resource pool has unreserved resources. A non-expandable reservation
- is called a fixed reservation. ([''present''])'
+ is called a fixed reservation.'
+ - If unset or empty, I(expandable_reservation) will be set to true. (['present'])
- ' - C(limit) (int): The utilization of a resource pool will not exceed this
limit, even if there are available resources. This is typically used to
ensure a consistent performance of resource pools independent of available
resources. If set to -1, then there is no fixed limit on resource usage
(only bounded by available resources and shares). Units are MB for memory,
- and MHz for CPU. ([''present''])'
+ and MHz for CPU.'
+ - If unset or empty, I(limit) will be set to -1. (['present'])
- ' - C(shares) (dict): Shares are used in case of resource contention. ([''present''])'
- ' - Accepted keys:'
- - ' - level (string): The C(level) defines the possible values for the
+ - ' - level (string): This option defines the possible values for the
allocation level.'
- 'Accepted value for this field:'
- ' - C(CUSTOM)'
- ' - C(HIGH)'
- ' - C(LOW)'
- ' - C(NORMAL)'
- - ' - shares (integer): When {@link #level} is set to CUSTOM, it is the
- number of shares allocated. Otherwise, this value is ignored. There is
- no unit for this value. It is a relative measure based on the settings
- for other resource pools.'
+ - ' - shares (integer): When I(level) is set to CUSTOM, it is the number
+ of shares allocated. Otherwise, this value is ignored. '
+ - ' There is no unit for this value. It is a relative measure based on the
+ settings for other resource pools.'
+ - ''
+ - This field is optional and it is only relevant when the value of I(level)
+ is CUSTOM.
type: dict
name:
description:
- - Name of the resource pool. Required with I(state=['present'])
+ - Name of the resource pool.
+ - if unset or empty, the name of the resource pool will not be changed. Required
+ with I(state=['present'])
type: str
parent:
description:
- - Parent of the created resource pool. Required with I(state=['present'])
+ - Parent of the created resource pool.
+ - When clients pass a value of this structure as a parameter, the field must
+ be the id of a resource returned by M(vmware.vmware_rest.vcenter_resourcepool_info).
+ Required with I(state=['present'])
type: str
resource_pool:
description:
- - Identifier of the resource pool to be deleted. Required with I(state=['absent',
- 'present'])
+ - Identifier of the resource pool to be deleted.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_resourcepool_info).
+ Required with I(state=['absent', 'present'])
type: str
session_timeout:
description:
@@ -150,18 +167,17 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.3.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
- name: Get the existing resource pools
vmware.vmware_rest.vcenter_resourcepool_info:
register: resource_pools
-
- name: Create an Ad hoc resource pool
vmware.vmware_rest.vcenter_resourcepool:
name: my_resource_pool
@@ -179,18 +195,15 @@ EXAMPLES = r"""
shares:
level: NORMAL
register: my_resource_pool
-
- name: Remove a resource pool
vmware.vmware_rest.vcenter_resourcepool:
resource_pool: '{{ my_resource_pool.id }}'
state: absent
-
- name: Create a generic resource pool
vmware.vmware_rest.vcenter_resourcepool:
name: my_resource_pool
parent: '{{ resource_pools.value[0].resource_pool }}'
register: my_resource_pool
-
- name: Modify a resource pool
vmware.vmware_rest.vcenter_resourcepool:
resource_pool: '{{ my_resource_pool.id }}'
@@ -238,7 +251,6 @@ value:
# This structure describes the format of the data expected by the end-points
PAYLOAD_FORMAT = {
- "delete": {"query": {}, "body": {}, "path": {"resource_pool": "resource_pool"}},
"update": {
"query": {},
"body": {
@@ -258,10 +270,9 @@ PAYLOAD_FORMAT = {
},
"path": {},
},
+ "delete": {"query": {}, "body": {}, "path": {"resource_pool": "resource_pool"}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -276,26 +287,28 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -368,7 +381,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
@@ -385,20 +397,16 @@ async def entry_point(module, session):
async def _create(params, session):
-
lookup_url = per_id_url = build_url(params)
uniquity_keys = ["resource_pool"]
comp_func = None
async def lookup_with_filters(params, session, url):
- # e.g: for the datacenter resources
- if "folder" not in params:
- return
+ search_filter = ""
+
if "name" not in params:
return
- async with session.get(
- f"{url}?names={params['name']}&folders={params['folder']}"
- ) as resp:
+ async with session.get(f"{url}?names={params['name']}{search_filter}") as resp:
_json = await resp.json()
if isinstance(_json, list) and len(_json) == 1:
return await get_device_info(session, url, _json[0]["resource_pool"])
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_resourcepool_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_resourcepool_info.py
index 84a4f6fc3..a4047e151 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_resourcepool_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_resourcepool_info.py
@@ -3,24 +3,22 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
module: vcenter_resourcepool_info
-short_description: Retrieves information about the resource pool indicated by {@param.name
- resourcePool}.
-description: Retrieves information about the resource pool indicated by {@param.name
- resourcePool}.
+short_description: Retrieves information about the resource pool indicated by resourcePool.
+description: Retrieves information about the resource pool indicated by resourcePool.
options:
clusters:
description:
- Clusters that must contain the resource pool for the resource pool to match
the filter.
+ - If unset or empty, resource pools in any cluster match the filter.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_cluster_info).
elements: str
type: list
datacenters:
@@ -29,35 +27,49 @@ options:
description:
- Datacenters that must contain the resource pool for the resource pool to
match the filter.
+ - If unset or empty, resource pools in any datacenter match the filter.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_datacenter_info).
elements: str
type: list
hosts:
description:
- Hosts that must contain the resource pool for the resource pool to match
the filter.
+ - If unset or empty, resource pools in any host match the filter.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_host_info).
elements: str
type: list
names:
aliases:
- filter_names
description:
- - Names that resource pools must have to match the filter (see {@link Info#name}).
+ - Names that resource pools must have to match the filter (see I(name)).
+ - If unset or empty, resource pools with any name match the filter.
elements: str
type: list
parent_resource_pools:
description:
- Resource pools that must contain the resource pool for the resource pool
to match the filter.
+ - If unset or empty, resource pools in any resource pool match the filter.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_resourcepool_info).
elements: str
type: list
resource_pool:
description:
- Identifier of the resource pool for which information should be retrieved.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_resourcepool_info).
Required with I(state=['get'])
type: str
resource_pools:
description:
- Identifiers of resource pools that can match the filter.
+ - If unset or empty, resource pools with any identifier match the filter.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_resourcepool_info).
elements: str
type: list
session_timeout:
@@ -109,29 +121,26 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.3.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
- name: Get the existing resource pools
vmware.vmware_rest.vcenter_resourcepool_info:
register: resource_pools
-
- name: Get the existing resource pool
vmware.vmware_rest.vcenter_resourcepool_info:
resource_pool: '{{ resource_pools.value[0].resource_pool }}'
register: my_resource_pool
-
- name: Create a generic resource pool
vmware.vmware_rest.vcenter_resourcepool:
name: my_resource_pool
parent: '{{ resource_pools.value[0].resource_pool }}'
register: my_resource_pool
-
- name: Read details from a specific resource pool
vmware.vmware_rest.vcenter_resourcepool_info:
resource_pool: '{{ my_resource_pool.id }}'
@@ -183,8 +192,6 @@ PAYLOAD_FORMAT = {
},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -202,23 +209,23 @@ from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest imp
build_full_device_list,
exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_storage_policies_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_storage_policies_info.py
index ad36661dd..eb9ccdee6 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_storage_policies_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_storage_policies_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -21,6 +18,9 @@ options:
policies:
description:
- Identifiers of storage policies that can match the filter.
+ - If unset or empty, storage policies with any identifiers match the filter.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_storage_policies).
elements: str
type: list
session_timeout:
@@ -72,11 +72,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.3.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -135,8 +135,6 @@ PAYLOAD_FORMAT = {
"list": {"query": {"policies": "policies"}, "body": {}, "path": {}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -151,26 +149,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm.py
index c71e80be0..af858bac2 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -19,43 +16,51 @@ options:
description:
- 128-bit SMBIOS UUID of a virtual machine represented as a hexadecimal string
in "12345678-abcd-1234-cdef-123456789abc" format.
+ - If unset, will be generated.
type: str
boot:
description:
- Boot configuration.
+ - If unset, guest-specific default values will be used.
- 'Valid attributes are:'
- - ' - C(type) (str): The C(type) defines the valid firmware types for a virtual
+ - ' - C(type) (str): This option defines the valid firmware types for a virtual
machine. ([''present''])'
- ' - Accepted values:'
- ' - BIOS'
- ' - EFI'
- ' - C(efi_legacy_boot) (bool): Flag indicating whether to use EFI legacy
- boot mode. ([''present''])'
- - ' - C(network_protocol) (str): The C(network_protocol) defines the valid
- network boot protocols supported when booting a virtual machine with {@link
- Type#EFI} firmware over the network. ([''present''])'
+ boot mode.'
+ - If unset, defaults to value that is recommended for the guest OS and is
+ supported for the virtual hardware version. (['present'])
+ - ' - C(network_protocol) (str): This option defines the valid network boot
+ protocols supported when booting a virtual machine with EFI firmware over
+ the network. ([''present''])'
- ' - Accepted values:'
- ' - IPV4'
- ' - IPV6'
- ' - C(delay) (int): Delay in milliseconds before beginning the firmware
- boot process when the virtual machine is powered on. This delay may be
+ boot process when the virtual machine is powered on. This delay may be
used to provide a time window for users to connect to the virtual machine
- console and enter BIOS setup mode. ([''present''])'
+ console and enter BIOS setup mode.'
+ - If unset, default value is 0. (['present'])
- ' - C(retry) (bool): Flag indicating whether the virtual machine should
- automatically retry the boot process after a failure. ([''present''])'
+ automatically retry the boot process after a failure.'
+ - If unset, default value is false. (['present'])
- ' - C(retry_delay) (int): Delay in milliseconds before retrying the boot
- process after a failure; applicable only when {@link Info#retry} is true.
- ([''present''])'
+ process after a failure; applicable only when I(retry) is true.'
+ - If unset, default value is 10000. (['present'])
- ' - C(enter_setup_mode) (bool): Flag indicating whether the firmware boot
process should automatically enter setup mode the next time the virtual
- machine boots. Note that this flag will automatically be reset to false
- once the virtual machine enters setup mode. ([''present''])'
+ machine boots. Note that this flag will automatically be reset to false
+ once the virtual machine enters setup mode.'
+ - If unset, the value is unchanged. (['present'])
type: dict
boot_devices:
description:
- Boot device configuration.
+ - If unset, a server-specific boot sequence will be used.
- 'Valid attributes are:'
- - ' - C(type) (str): The C(type) defines the valid device types that may be
+ - ' - C(type) (str): This option defines the valid device types that may be
used as bootable devices. ([''present''])'
- ' This key is required with [''present''].'
- ' - Accepted values:'
@@ -68,168 +73,254 @@ options:
cdroms:
description:
- List of CD-ROMs.
+ - If unset, no CD-ROM devices will be created.
- 'Valid attributes are:'
- - ' - C(type) (str): The C(host_bus_adapter_type) defines the valid types
- of host bus adapters that may be used for attaching a Cdrom to a virtual
- machine. ([''present''])'
+ - ' - C(type) (str): This option defines the valid types of host bus adapters
+ that may be used for attaching a Cdrom to a virtual machine. ([''present''])'
- ' - Accepted values:'
- ' - IDE'
- ' - SATA'
- - ' - C(ide) (dict): Address for attaching the device to a virtual IDE adapter.
- ([''present''])'
+ - ' - C(ide) (dict): Address for attaching the device to a virtual IDE adapter.'
+ - If unset, the server will choose an available address; if none is available,
+ the request will fail. (['present'])
- ' - Accepted keys:'
- ' - primary (boolean): Flag specifying whether the device should be
attached to the primary or secondary IDE adapter of the virtual machine.'
+ - If unset, the server will choose a adapter with an available connection.
+ If no IDE connections are available, the request will be rejected.
- ' - master (boolean): Flag specifying whether the device should be the
master or slave device on the IDE adapter.'
- - ' - C(sata) (dict): Address for attaching the device to a virtual SATA adapter.
- ([''present''])'
+ - If unset, the server will choose an available connection type. If no IDE
+ connections are available, the request will be rejected.
+ - ' - C(sata) (dict): Address for attaching the device to a virtual SATA adapter.'
+ - If unset, the server will choose an available address; if none is available,
+ the request will fail. (['present'])
- ' - Accepted keys:'
- ' - bus (integer): Bus number of the adapter to which the device should
be attached.'
- ' - unit (integer): Unit number of the device.'
+ - If unset, the server will choose an available unit number on the specified
+ adapter. If there are no available connections on the adapter, the request
+ will be rejected.
- ' - C(backing) (dict): Physical resource backing for the virtual CD-ROM
- device. ([''present''])'
+ device.'
+ - If unset, defaults to automatic detection of a suitable host device. (['present'])
- ' - Accepted keys:'
- - ' - type (string): The C(backing_type) defines the valid backing types
- for a virtual CD-ROM device.'
+ - ' - type (string): This option defines the valid backing types for a
+ virtual CD-ROM device.'
- 'Accepted value for this field:'
- ' - C(CLIENT_DEVICE)'
- ' - C(HOST_DEVICE)'
- ' - C(ISO_FILE)'
- ' - iso_file (string): Path of the image file that should be used as
the virtual CD-ROM device backing.'
+ - This field is optional and it is only relevant when the value of I(type)
+ is ISO_FILE.
- ' - host_device (string): Name of the device that should be used as
the virtual CD-ROM device backing.'
- - ' - device_access_type (string): The C(device_access_type) defines the
- valid device access types for a physical device packing of a virtual CD-ROM
- device.'
+ - If unset, the virtual CD-ROM device will be configured to automatically
+ detect a suitable host device.
+ - ' - device_access_type (string): This option defines the valid device
+ access types for a physical device packing of a virtual CD-ROM device.'
- 'Accepted value for this field:'
- ' - C(EMULATION)'
- ' - C(PASSTHRU)'
- ' - C(PASSTHRU_EXCLUSIVE)'
- ' - C(start_connected) (bool): Flag indicating whether the virtual device
- should be connected whenever the virtual machine is powered on. ([''present''])'
+ should be connected whenever the virtual machine is powered on.'
+ - Defaults to false if unset. (['present'])
- ' - C(allow_guest_control) (bool): Flag indicating whether the guest can
- connect and disconnect the device. ([''present''])'
+ connect and disconnect the device.'
+ - Defaults to false if unset. (['present'])
elements: dict
type: list
cpu:
description:
- CPU configuration.
+ - If unset, guest-specific default values will be used.
- 'Valid attributes are:'
- - ' - C(count) (int): New number of CPU cores. The number of CPU cores in
- the virtual machine must be a multiple of the number of cores per socket.
- The supported range of CPU counts is constrained by the configured guest
- operating system and virtual hardware version of the virtual machine.
- If the virtual machine is running, the number of CPU cores may only be
- increased if {@link Info#hotAddEnabled} is true, and may only be decreased
- if {@link Info#hotRemoveEnabled} is true. ([''present''])'
- - ' - C(cores_per_socket) (int): New number of CPU cores per socket. The
- number of CPU cores in the virtual machine must be a multiple of the number
- of cores per socket. ([''present''])'
+ - ' - C(count) (int): New number of CPU cores. The number of CPU cores in
+ the virtual machine must be a multiple of the number of cores per socket. '
+ - ' The supported range of CPU counts is constrained by the configured guest
+ operating system and virtual hardware version of the virtual machine. '
+ - ''
+ - ' If the virtual machine is running, the number of CPU cores may only be
+ increased if I(hot_add_enabled) is true, and may only be decreased if
+ I(hot_remove_enabled) is true.'
+ - ''
+ - If unset, the value is unchanged. (['present'])
+ - ' - C(cores_per_socket) (int): New number of CPU cores per socket. The number
+ of CPU cores in the virtual machine must be a multiple of the number of
+ cores per socket.'
+ - If unset, the value is unchanged. (['present'])
- ' - C(hot_add_enabled) (bool): Flag indicating whether adding CPUs while
- the virtual machine is running is enabled. This field may only be modified
- if the virtual machine is powered off. ([''present''])'
+ the virtual machine is running is enabled. '
+ - ' This field may only be modified if the virtual machine is powered off.'
+ - ''
+ - If unset, the value is unchanged. (['present'])
- ' - C(hot_remove_enabled) (bool): Flag indicating whether removing CPUs
- while the virtual machine is running is enabled. This field may only be
- modified if the virtual machine is powered off. ([''present''])'
+ while the virtual machine is running is enabled. '
+ - ' This field may only be modified if the virtual machine is powered off.'
+ - ''
+ - If unset, the value is unchanged. (['present'])
type: dict
datastore:
description:
- Identifier of the datastore on which the virtual machine's configuration
state is stored.
+ - If unset, I(path) must also be unset and I(datastore_path) must be set.
+ - 'When clients pass a value of this structure as a parameter, the field must
+ be the id of a resource returned by M(vmware.vmware_rest.vcenter_datastore_info). '
type: str
datastore_path:
description:
- Datastore path for the virtual machine's configuration file in the format
- "[datastore name] path". For example "[storage1] Test-VM/Test-VM.vmx".
+ "[datastore name] path". For example "[storage1] Test-VM/Test-VM.vmx".
+ - If unset, both I(datastore) and I(path) must be set.
type: str
disconnect_all_nics:
description:
- Indicates whether all NICs on the destination virtual machine should be
disconnected from the newtwork
+ - If unset, connection status of all NICs on the destination virtual machine
+ will be the same as on the source virtual machine.
type: bool
disks:
description:
- Individual disk relocation map.
+ - If unset, all disks will migrate to the datastore specified in the I(datastore)
+ field of I()
+ - 'When clients pass a value of this structure as a parameter, the key in
+ the field map must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_hardware_disk). '
- 'Valid attributes are:'
- - ' - C(type) (str): The C(host_bus_adapter_type) defines the valid types
- of host bus adapters that may be used for attaching a virtual storage
- device to a virtual machine. ([''present''])'
+ - ' - C(type) (str): This option defines the valid types of host bus adapters
+ that may be used for attaching a virtual storage device to a virtual machine.
+ ([''present''])'
- ' - Accepted values:'
- ' - IDE'
+ - ' - NVME'
- ' - SATA'
- ' - SCSI'
- - ' - C(ide) (dict): Address for attaching the device to a virtual IDE adapter.
- ([''present''])'
+ - ' - C(ide) (dict): Address for attaching the device to a virtual IDE adapter.'
+ - If unset, the server will choose an available address; if none is available,
+ the request will fail. (['present'])
- ' - Accepted keys:'
- ' - primary (boolean): Flag specifying whether the device should be
attached to the primary or secondary IDE adapter of the virtual machine.'
+ - If unset, the server will choose a adapter with an available connection.
+ If no IDE connections are available, the request will be rejected.
- ' - master (boolean): Flag specifying whether the device should be the
master or slave device on the IDE adapter.'
- - ' - C(scsi) (dict): Address for attaching the device to a virtual SCSI adapter.
- ([''present''])'
+ - If unset, the server will choose an available connection type. If no IDE
+ connections are available, the request will be rejected.
+ - ' - C(scsi) (dict): Address for attaching the device to a virtual SCSI adapter.'
+ - If unset, the server will choose an available address; if none is available,
+ the request will fail. (['present'])
- ' - Accepted keys:'
- ' - bus (integer): Bus number of the adapter to which the device should
be attached.'
- ' - unit (integer): Unit number of the device.'
- - ' - C(sata) (dict): Address for attaching the device to a virtual SATA adapter.
- ([''present''])'
+ - If unset, the server will choose an available unit number on the specified
+ adapter. If there are no available connections on the adapter, the request
+ will be rejected.
+ - ' - C(sata) (dict): Address for attaching the device to a virtual SATA adapter.'
+ - If unset, the server will choose an available address; if none is available,
+ the request will fail. (['present'])
+ - ' - Accepted keys:'
+ - ' - bus (integer): Bus number of the adapter to which the device should
+ be attached.'
+ - ' - unit (integer): Unit number of the device.'
+ - If unset, the server will choose an available unit number on the specified
+ adapter. If there are no available connections on the adapter, the request
+ will be rejected.
+ - ' - C(nvme) (dict): Address for attaching the device to a virtual NVMe adapter.'
+ - If unset, the server will choose an available address; if none is available,
+ the request will fail. (['present'])
- ' - Accepted keys:'
- ' - bus (integer): Bus number of the adapter to which the device should
be attached.'
- ' - unit (integer): Unit number of the device.'
+ - If unset, the server will choose an available unit number on the specified
+ adapter. If there are no available connections on the adapter, the request
+ will be rejected.
- ' - C(backing) (dict): Existing physical resource backing for the virtual
- disk. Exactly one of C(#backing) or C(#new_vmdk) must be specified. ([''present''])'
+ disk. Exactly one of I(backing) or I(new_vmdk) must be specified.'
+ - If unset, the virtual disk will not be connected to an existing backing.
+ (['present'])
- ' - Accepted keys:'
- - ' - type (string): The C(backing_type) defines the valid backing types
- for a virtual disk.'
+ - ' - type (string): This option defines the valid backing types for a
+ virtual disk.'
- 'Accepted value for this field:'
- ' - C(VMDK_FILE)'
- ' - vmdk_file (string): Path of the VMDK file backing the virtual disk.'
+ - This field is optional and it is only relevant when the value of I(type)
+ is VMDK_FILE.
- ' - C(new_vmdk) (dict): Specification for creating a new VMDK backing for
- the virtual disk. Exactly one of C(#backing) or C(#new_vmdk) must be
- specified. ([''present''])'
+ the virtual disk. Exactly one of I(backing) or I(new_vmdk) must be specified.'
+ - If unset, a new VMDK backing will not be created. (['present'])
- ' - Accepted keys:'
- - ' - name (string): Base name of the VMDK file. The name should not
- include the ''.vmdk'' file extension.'
+ - ' - name (string): Base name of the VMDK file. The name should not include
+ the ''.vmdk'' file extension.'
+ - If unset, a name (derived from the name of the virtual machine) will be
+ chosen by the server.
- ' - capacity (integer): Capacity of the virtual disk backing in bytes.'
- - ' - storage_policy (object): The C(storage_policy_spec) {@term structure}
- contains information about the storage policy that is to be associated
- the with VMDK file.'
+ - If unset, defaults to a guest-specific capacity.
+ - ' - storage_policy (object): The I(storage_policy_spec) structure contains
+ information about the storage policy that is to be associated the with
+ VMDK file.'
+ - 'If unset the default storage policy of the target datastore (if applicable)
+ is applied. Currently a default storage policy is only supported by object
+ based datastores : VVol & vSAN. For non- object datastores, if unset then
+ no storage policy would be associated with the VMDK file.'
elements: dict
type: list
disks_to_remove:
description:
- Set of Disks to Remove.
+ - If unset, all disks will be copied. If the same identifier is in I(disks_to_update)
+ InvalidArgument fault will be returned.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_vm_hardware_disk).
elements: str
type: list
disks_to_update:
description:
- Map of Disks to Update.
+ - If unset, all disks will copied to the datastore specified in the I(datastore)
+ field of I() If the same identifier is in I(disks_to_remove) InvalidArgument
+ fault will be thrown.
+ - 'When clients pass a value of this structure as a parameter, the key in
+ the field map must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_hardware_disk). '
type: dict
floppies:
description:
- List of floppy drives.
+ - If unset, no floppy drives will be created.
- 'Valid attributes are:'
- ' - C(backing) (dict): Physical resource backing for the virtual floppy
- drive. ([''present''])'
+ drive.'
+ - If unset, defaults to automatic detection of a suitable host device. (['present'])
- ' - Accepted keys:'
- - ' - type (string): The C(backing_type) defines the valid backing types
- for a virtual floppy drive.'
+ - ' - type (string): This option defines the valid backing types for a
+ virtual floppy drive.'
- 'Accepted value for this field:'
- ' - C(CLIENT_DEVICE)'
- ' - C(HOST_DEVICE)'
- ' - C(IMAGE_FILE)'
- ' - image_file (string): Path of the image file that should be used
as the virtual floppy drive backing.'
+ - This field is optional and it is only relevant when the value of I(type)
+ is IMAGE_FILE.
- ' - host_device (string): Name of the device that should be used as
the virtual floppy drive backing.'
+ - If unset, the virtual floppy drive will be configured to automatically detect
+ a suitable host device.
- ' - C(start_connected) (bool): Flag indicating whether the virtual device
- should be connected whenever the virtual machine is powered on. ([''present''])'
+ should be connected whenever the virtual machine is powered on.'
+ - Defaults to false if unset. (['present'])
- ' - C(allow_guest_control) (bool): Flag indicating whether the guest can
- connect and disconnect the device. ([''present''])'
+ connect and disconnect the device.'
+ - Defaults to false if unset. (['present'])
elements: dict
type: list
guest_OS:
@@ -416,15 +507,17 @@ options:
- WIN_XP_PRO
- WIN_XP_PRO_64
description:
- - The C(guest_o_s) defines the valid guest operating system types used for
- configuring a virtual machine. Required with I(state=['present'])
+ - The GuestOS enumerated type defines the valid guest operating system types
+ used for configuring a virtual machine. Required with I(state=['present'])
type: str
guest_customization_spec:
description:
- Guest customization spec to apply to the virtual machine after the virtual
machine is deployed.
+ - If unset, the guest operating system is not customized after clone.
- 'Valid attributes are:'
- - ' - C(name) (str): Name of the customization specification. ([''clone''])'
+ - ' - C(name) (str): Name of the customization specification.'
+ - If unset, no guest customization is performed. (['clone'])
type: dict
hardware_version:
choices:
@@ -445,38 +538,48 @@ options:
- VMX_18
- VMX_19
description:
- - The C(version) defines the valid virtual hardware versions for a virtual
- machine. See https://kb.vmware.com/s/article/1003746 (Virtual machine
- hardware versions (1003746)).
+ - The I(version) enumerated type defines the valid virtual hardware versions
+ for a virtual machine. See https://kb.vmware.com/s/article/1003746 (Virtual
+ machine hardware versions (1003746)).
type: str
memory:
description:
- Memory configuration.
+ - If unset, guest-specific default values will be used.
- 'Valid attributes are:'
- - ' - C(size_MiB) (int): New memory size in mebibytes. The supported range
- of memory sizes is constrained by the configured guest operating system
- and virtual hardware version of the virtual machine. If the virtual machine
- is running, this value may only be changed if {@link Info#hotAddEnabled}
+ - ' - C(size_MiB) (int): New memory size in mebibytes. '
+ - ' The supported range of memory sizes is constrained by the configured guest
+ operating system and virtual hardware version of the virtual machine. '
+ - ''
+ - ' If the virtual machine is running, this value may only be changed if I(hot_add_enabled)
is true, and the new memory size must satisfy the constraints specified
- by {@link Info#hotAddIncrementSizeMiB} and {@link Info#hotAddLimitMiB}.
- ([''present''])'
+ by I(hot_add_increment_size_mib) and I()'
+ - ''
+ - If unset, the value is unchanged. (['present'])
- ' - C(hot_add_enabled) (bool): Flag indicating whether adding memory while
- the virtual machine is running should be enabled. Some guest operating
- systems may consume more resources or perform less efficiently when they
- run on hardware that supports adding memory while the machine is running.
- This field may only be modified if the virtual machine is not powered
- on. ([''present''])'
+ the virtual machine is running should be enabled. '
+ - ' Some guest operating systems may consume more resources or perform less
+ efficiently when they run on hardware that supports adding memory while
+ the machine is running. '
+ - ''
+ - ' This field may only be modified if the virtual machine is not powered
+ on.'
+ - ''
+ - If unset, the value is unchanged. (['present'])
type: dict
name:
description:
- - Name of the new virtual machine.
+ - Virtual machine name.
+ - If unset, the display name from the virtual machine's configuration file
+ will be used.
type: str
nics:
description:
- List of Ethernet adapters.
+ - If unset, no Ethernet adapters will be created.
- 'Valid attributes are:'
- - ' - C(type) (str): The C(emulation_type) defines the valid emulation types
- for a virtual Ethernet adapter. ([''present''])'
+ - ' - C(type) (str): This option defines the valid emulation types for a virtual
+ Ethernet adapter. ([''present''])'
- ' - Accepted values:'
- ' - E1000'
- ' - E1000E'
@@ -485,25 +588,31 @@ options:
- ' - VMXNET2'
- ' - VMXNET3'
- ' - C(upt_compatibility_enabled) (bool): Flag indicating whether Universal
- Pass-Through (UPT) compatibility is enabled on this virtual Ethernet adapter.
- ([''present''])'
- - ' - C(mac_type) (str): The C(mac_address_type) defines the valid MAC address
- origins for a virtual Ethernet adapter. ([''present''])'
+ Pass-Through (UPT) compatibility is enabled on this virtual Ethernet adapter.'
+ - If unset, defaults to false. (['present'])
+ - ' - C(mac_type) (str): This option defines the valid MAC address origins
+ for a virtual Ethernet adapter. ([''present''])'
- ' - Accepted values:'
- ' - ASSIGNED'
- ' - GENERATED'
- ' - MANUAL'
- - ' - C(mac_address) (str): MAC address. ([''present''])'
+ - ' - C(mac_address) (str): MAC address.'
+ - Workaround for PR1459647 (['present'])
- ' - C(pci_slot_number) (int): Address of the virtual Ethernet adapter on
- the PCI bus. If the PCI address is invalid, the server will change when
- it the VM is started or as the device is hot added. ([''present''])'
+ the PCI bus. If the PCI address is invalid, the server will change when
+ it the VM is started or as the device is hot added.'
+ - If unset, the server will choose an available address when the virtual machine
+ is powered on. (['present'])
- ' - C(wake_on_lan_enabled) (bool): Flag indicating whether wake-on-LAN is
- enabled on this virtual Ethernet adapter. ([''present''])'
+ enabled on this virtual Ethernet adapter.'
+ - Defaults to false if unset. (['present'])
- ' - C(backing) (dict): Physical resource backing for the virtual Ethernet
- adapter. ([''present''])'
+ adapter.'
+ - If unset, the system may try to find an appropriate backing. If one is not
+ found, the request will fail. (['present'])
- ' - Accepted keys:'
- - ' - type (string): The C(backing_type) defines the valid backing types
- for a virtual Ethernet adapter.'
+ - ' - type (string): This option defines the valid backing types for a
+ virtual Ethernet adapter.'
- 'Accepted value for this field:'
- ' - C(DISTRIBUTED_PORTGROUP)'
- ' - C(HOST_DEVICE)'
@@ -511,115 +620,208 @@ options:
- ' - C(STANDARD_PORTGROUP)'
- ' - network (string): Identifier of the network that backs the virtual
Ethernet adapter.'
+ - This field is optional and it is only relevant when the value of I(type)
+ is one of STANDARD_PORTGROUP, DISTRIBUTED_PORTGROUP, or OPAQUE_NETWORK.
+ - 'When clients pass a value of this structure as a parameter, the field must
+ be the id of a resource returned by M(vmware.vmware_rest.vcenter_network_info). '
- ' - distributed_port (string): Key of the distributed virtual port that
- backs the virtual Ethernet adapter. Depending on the type of the Portgroup,
+ backs the virtual Ethernet adapter. Depending on the type of the Portgroup,
the port may be specified using this field. If the portgroup type is early-binding
(also known as static), a port is assigned when the Ethernet adapter is
configured to use the port. The port may be either automatically or specifically
assigned based on the value of this field. If the portgroup type is ephemeral,
the port is created and assigned to a virtual machine when it is powered
- on and the Ethernet adapter is connected. This field cannot be specified
+ on and the Ethernet adapter is connected. This field cannot be specified
as no free ports exist before use.'
+ - May be used to specify a port when the network specified on the I(network)
+ field is a static or early binding distributed portgroup. If unset, the
+ port will be automatically assigned to the Ethernet adapter based on the
+ policy embodied by the portgroup type.
- ' - C(start_connected) (bool): Flag indicating whether the virtual device
- should be connected whenever the virtual machine is powered on. ([''present''])'
+ should be connected whenever the virtual machine is powered on.'
+ - Defaults to false if unset. (['present'])
- ' - C(allow_guest_control) (bool): Flag indicating whether the guest can
- connect and disconnect the device. ([''present''])'
+ connect and disconnect the device.'
+ - Defaults to false if unset. (['present'])
elements: dict
type: list
nics_to_update:
description:
- Map of NICs to update.
+ - If unset, no NICs will be updated.
+ - 'When clients pass a value of this structure as a parameter, the key in
+ the field map must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_hardware_ethernet). '
type: dict
+ nvme_adapters:
+ description:
+ - List of NVMe adapters.
+ - If unset, any adapters necessary to connect the virtual machine's storage
+ devices will be created; this includes any devices that explicitly specify
+ a NVMe host bus adapter, as well as any devices that do not specify a
+ host bus adapter if the guest's preferred adapter type is NVMe.
+ - 'Valid attributes are:'
+ - ' - C(bus) (int): NVMe bus number.'
+ - If unset, the server will choose an available bus number; if none is available,
+ the request will fail. (['present'])
+ - ' - C(pci_slot_number) (int): Address of the NVMe adapter on the PCI bus.'
+ - If unset, the server will choose an available address when the virtual machine
+ is powered on. (['present'])
+ elements: dict
+ type: list
parallel_ports:
description:
- List of parallel ports.
+ - If unset, no parallel ports will be created.
- 'Valid attributes are:'
- ' - C(backing) (dict): Physical resource backing for the virtual parallel
- port. ([''present''])'
+ port.'
+ - If unset, defaults to automatic detection of a suitable host device. (['present'])
- ' - Accepted keys:'
- - ' - type (string): The C(backing_type) defines the valid backing types
- for a virtual parallel port.'
+ - ' - type (string): This option defines the valid backing types for a
+ virtual parallel port.'
- 'Accepted value for this field:'
- ' - C(FILE)'
- ' - C(HOST_DEVICE)'
- ' - file (string): Path of the file that should be used as the virtual
parallel port backing.'
+ - This field is optional and it is only relevant when the value of I(type)
+ is FILE.
- ' - host_device (string): Name of the device that should be used as
the virtual parallel port backing.'
+ - If unset, the virtual parallel port will be configured to automatically
+ detect a suitable host device.
- ' - C(start_connected) (bool): Flag indicating whether the virtual device
- should be connected whenever the virtual machine is powered on. ([''present''])'
+ should be connected whenever the virtual machine is powered on.'
+ - Defaults to false if unset. (['present'])
- ' - C(allow_guest_control) (bool): Flag indicating whether the guest can
- connect and disconnect the device. ([''present''])'
+ connect and disconnect the device.'
+ - Defaults to false if unset. (['present'])
elements: dict
type: list
parallel_ports_to_update:
description:
- Map of parallel ports to Update.
+ - If unset, no parallel ports will be updated.
+ - 'When clients pass a value of this structure as a parameter, the key in
+ the field map must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_hardware_parallel). '
type: dict
path:
description:
- 'Path to the virtual machine''s configuration file on the datastore corresponding
to {@link #datastore).'
+ - If unset, I(datastore) must also be unset and I(datastore_path) must be
+ set.
type: str
placement:
description:
- Virtual machine placement information.
+ - If this field is unset, the system will use the values from the source virtual
+ machine. If specified, each field will be used for placement. If the fields
+ result in disjoint placement the operation will fail. If the fields along
+ with the other existing placement of the virtual machine result in disjoint
+ placement the operation will fail.
- 'Valid attributes are:'
- ' - C(folder) (str): Virtual machine folder into which the virtual machine
- should be placed. ([''clone'', ''instant_clone'', ''present'', ''register'',
- ''relocate''])'
+ should be placed.'
+ - If this field is unset, the virtual machine will stay in the current folder.
+ - When clients pass a value of this structure as a parameter, the field must
+ be the id of a resource returned by M(vmware.vmware_rest.vcenter_folder_info).
+ (['clone', 'instant_clone', 'present', 'register', 'relocate'])
- ' - C(resource_pool) (str): Resource pool into which the virtual machine
- should be placed. ([''clone'', ''instant_clone'', ''present'', ''register'',
- ''relocate''])'
- - ' - C(host) (str): Host onto which the virtual machine should be placed.
- If C(#host) and C(#resource_pool) are both specified, C(#resource_pool)
- must belong to C(#host). If C(#host) and C(#cluster) are both specified,
- C(#host) must be a member of C(#cluster). ([''clone'', ''present'', ''register'',
- ''relocate''])'
- - ' - C(cluster) (str): Cluster into which the virtual machine should be placed.
- If C(#cluster) and C(#resource_pool) are both specified, C(#resource_pool)
- must belong to C(#cluster). If C(#cluster) and C(#host) are both specified,
- C(#host) must be a member of C(#cluster). ([''clone'', ''present'', ''register'',
- ''relocate''])'
+ should be placed.'
+ - If this field is unset, the virtual machine will stay in the current resource
+ pool.
+ - When clients pass a value of this structure as a parameter, the field must
+ be the id of a resource returned by M(vmware.vmware_rest.vcenter_resourcepool_info).
+ (['clone', 'instant_clone', 'present', 'register', 'relocate'])
+ - ' - C(host) (str): Host onto which the virtual machine should be placed. '
+ - ' If I(host) and I(resource_pool) are both specified, I(resource_pool) must
+ belong to I(host). '
+ - ''
+ - ' If I(host) and I(cluster) are both specified, I(host) must be a member
+ of I(cluster).'
+ - ''
+ - If this field is unset, if I(resource_pool) is unset, the virtual machine
+ will remain on the current host. if I(resource_pool) is set, and the target
+ is a standalone host, the host is used. if I(resource_pool) is set, and
+ the target is a DRS cluster, a host will be picked by DRS. if I(resource_pool)
+ is set, and the target is a cluster without DRS, InvalidArgument will
+ be thrown.
+ - When clients pass a value of this structure as a parameter, the field must
+ be the id of a resource returned by M(vmware.vmware_rest.vcenter_host_info).
+ (['clone', 'present', 'register', 'relocate'])
+ - ' - C(cluster) (str): Cluster into which the virtual machine should be placed. '
+ - ' If I(cluster) and I(resource_pool) are both specified, I(resource_pool)
+ must belong to I(cluster). '
+ - ''
+ - ' If I(cluster) and I(host) are both specified, I(host) must be a member
+ of I(cluster).'
+ - ''
+ - If I(resource_pool) or I(host) is specified, it is recommended that this
+ field be unset.
+ - When clients pass a value of this structure as a parameter, the field must
+ be the id of a resource returned by M(vmware.vmware_rest.vcenter_cluster_info).
+ (['clone', 'present', 'register', 'relocate'])
- ' - C(datastore) (str): Datastore on which the virtual machine''s configuration
- state should be stored. This datastore will also be used for any virtual
+ state should be stored. This datastore will also be used for any virtual
disks that are associated with the virtual machine, unless individually
- overridden. ([''clone'', ''instant_clone'', ''present'', ''relocate''])'
+ overridden.'
+ - If this field is unset, the virtual machine will remain on the current datastore.
+ - When clients pass a value of this structure as a parameter, the field must
+ be the id of a resource returned by M(vmware.vmware_rest.vcenter_datastore_info).
+ (['clone', 'instant_clone', 'present', 'relocate'])
type: dict
power_on:
description:
- - 'Attempt to perform a {@link #powerOn} after clone.'
+ - Attempt to perform a I(power_on) after clone.
+ - If unset, the virtual machine will not be powered on.
type: bool
sata_adapters:
description:
- List of SATA adapters.
+ - If unset, any adapters necessary to connect the virtual machine's storage
+ devices will be created; this includes any devices that explicitly specify
+ a SATA host bus adapter, as well as any devices that do not specify a
+ host bus adapter if the guest's preferred adapter type is SATA.
- 'Valid attributes are:'
- - ' - C(type) (str): The C(type) defines the valid emulation types for a virtual
+ - ' - C(type) (str): This option defines the valid emulation types for a virtual
SATA adapter. ([''present''])'
- ' - Accepted values:'
- ' - AHCI'
- - ' - C(bus) (int): SATA bus number. ([''present''])'
- - ' - C(pci_slot_number) (int): Address of the SATA adapter on the PCI bus.
- ([''present''])'
+ - ' - C(bus) (int): SATA bus number.'
+ - If unset, the server will choose an available bus number; if none is available,
+ the request will fail. (['present'])
+ - ' - C(pci_slot_number) (int): Address of the SATA adapter on the PCI bus.'
+ - If unset, the server will choose an available address when the virtual machine
+ is powered on. (['present'])
elements: dict
type: list
scsi_adapters:
description:
- List of SCSI adapters.
+ - If unset, any adapters necessary to connect the virtual machine's storage
+ devices will be created; this includes any devices that explicitly specify
+ a SCSI host bus adapter, as well as any devices that do not specify a
+ host bus adapter if the guest's preferred adapter type is SCSI. The type
+ of the SCSI adapter will be a guest-specific default type.
- 'Valid attributes are:'
- - ' - C(type) (str): The C(type) defines the valid emulation types for a virtual
+ - ' - C(type) (str): This option defines the valid emulation types for a virtual
SCSI adapter. ([''present''])'
- ' - Accepted values:'
- ' - BUSLOGIC'
- ' - LSILOGIC'
- ' - LSILOGICSAS'
- ' - PVSCSI'
- - ' - C(bus) (int): SCSI bus number. ([''present''])'
- - ' - C(pci_slot_number) (int): Address of the SCSI adapter on the PCI bus. If
- the PCI address is invalid, the server will change it when the VM is started
- or as the device is hot added. ([''present''])'
- - ' - C(sharing) (str): The C(sharing) defines the valid bus sharing modes
- for a virtual SCSI adapter. ([''present''])'
+ - ' - C(bus) (int): SCSI bus number.'
+ - If unset, the server will choose an available bus number; if none is available,
+ the request will fail. (['present'])
+ - ' - C(pci_slot_number) (int): Address of the SCSI adapter on the PCI bus.
+ If the PCI address is invalid, the server will change it when the VM is
+ started or as the device is hot added.'
+ - If unset, the server will choose an available address when the virtual machine
+ is powered on. (['present'])
+ - ' - C(sharing) (str): This option defines the valid bus sharing modes for
+ a virtual SCSI adapter. ([''present''])'
- ' - Accepted values:'
- ' - NONE'
- ' - PHYSICAL'
@@ -629,17 +831,20 @@ options:
serial_ports:
description:
- List of serial ports.
+ - If unset, no serial ports will be created.
- 'Valid attributes are:'
- ' - C(yield_on_poll) (bool): CPU yield behavior. If set to true, the virtual
machine will periodically relinquish the processor if its sole task is
polling the virtual serial port. The amount of time it takes to regain
the processor will depend on the degree of other virtual machine activity
- on the host. ([''present''])'
+ on the host.'
+ - If unset, defaults to false. (['present'])
- ' - C(backing) (dict): Physical resource backing for the virtual serial
- port. ([''present''])'
+ port.'
+ - If unset, defaults to automatic detection of a suitable host device. (['present'])
- ' - Accepted keys:'
- - ' - type (string): The C(backing_type) defines the valid backing types
- for a virtual serial port.'
+ - ' - type (string): This option defines the valid backing types for a
+ virtual serial port.'
- 'Accepted value for this field:'
- ' - C(FILE)'
- ' - C(HOST_DEVICE)'
@@ -648,33 +853,51 @@ options:
- ' - C(PIPE_CLIENT)'
- ' - C(PIPE_SERVER)'
- ' - file (string): Path of the file backing the virtual serial port.'
+ - This field is optional and it is only relevant when the value of I(type)
+ is FILE.
- ' - host_device (string): Name of the device backing the virtual serial
- port. <p>'
+ port. '
+ - ''
+ - ''
+ - If unset, the virtual serial port will be configured to automatically detect
+ a suitable host device.
- ' - pipe (string): Name of the pipe backing the virtual serial port.'
+ - This field is optional and it is only relevant when the value of I(type)
+ is one of PIPE_SERVER or PIPE_CLIENT.
- ' - no_rx_loss (boolean): Flag that enables optimized data transfer
over the pipe. When the value is true, the host buffers data to prevent
- data overrun. This allows the virtual machine to read all of the data
+ data overrun. This allows the virtual machine to read all of the data
transferred over the pipe with no data loss.'
+ - If unset, defaults to false.
- ' - network_location (string): URI specifying the location of the network
- service backing the virtual serial port. <ul> <li>If {@link #type} is
- {@link BackingType#NETWORK_SERVER}, this field is the location used by
- clients to connect to this server. The hostname part of the URI should
- either be empty or should specify the address of the host on which the
- virtual machine is running.</li> <li>If {@link #type} is {@link BackingType#NETWORK_CLIENT},
- this field is the location used by the virtual machine to connect to the
- remote server.</li> </ul>'
+ service backing the virtual serial port. '
+ - ' - If I(type) is NETWORK_SERVER, this field is the location used by clients
+ to connect to this server. The hostname part of the URI should either
+ be empty or should specify the address of the host on which the virtual
+ machine is running.'
+ - ' - If I(type) is NETWORK_CLIENT, this field is the location used by the
+ virtual machine to connect to the remote server.'
+ - ' '
+ - This field is optional and it is only relevant when the value of I(type)
+ is one of NETWORK_SERVER or NETWORK_CLIENT.
- ' - proxy (string): Proxy service that provides network access to the
- network backing. If set, the virtual machine initiates a connection with
+ network backing. If set, the virtual machine initiates a connection with
the proxy service and forwards the traffic to the proxy.'
+ - If unset, no proxy service should be used.
- ' - C(start_connected) (bool): Flag indicating whether the virtual device
- should be connected whenever the virtual machine is powered on. ([''present''])'
+ should be connected whenever the virtual machine is powered on.'
+ - Defaults to false if unset. (['present'])
- ' - C(allow_guest_control) (bool): Flag indicating whether the guest can
- connect and disconnect the device. ([''present''])'
+ connect and disconnect the device.'
+ - Defaults to false if unset. (['present'])
elements: dict
type: list
serial_ports_to_update:
description:
- Map of serial ports to Update.
+ - If unset, no serial ports will be updated.
+ - 'When clients pass a value of this structure as a parameter, the key in
+ the field map must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_hardware_serial). '
type: dict
session_timeout:
description:
@@ -686,7 +909,10 @@ options:
version_added: 2.1.0
source:
description:
- - Virtual machine to InstantClone from. Required with I(state=['clone', 'instant_clone'])
+ - Virtual machine to InstantClone from.
+ - When clients pass a value of this structure as a parameter, the field must
+ be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ Required with I(state=['clone', 'instant_clone'])
type: str
state:
choices:
@@ -702,12 +928,19 @@ options:
type: str
storage_policy:
description:
- - The C(storage_policy_spec) {@term structure} contains information about
- the storage policy that is to be associated with the virtual machine home
- (which contains the configuration and log files). Required with I(state=['present'])
+ - The I(storage_policy_spec) structure contains information about the storage
+ policy that is to be associated with the virtual machine home (which contains
+ the configuration and log files).
+ - 'If unset the datastore default storage policy (if applicable) is applied.
+ Currently a default storage policy is only supported by object datastores
+ : VVol and vSAN. For non-object datastores, if unset then no storage policy
+ would be associated with the virtual machine home. Required with I(state=[''present''])'
- 'Valid attributes are:'
- ' - C(policy) (str): Identifier of the storage policy which should be associated
- with the virtual machine. ([''present''])'
+ with the virtual machine.'
+ - When clients pass a value of this structure as a parameter, the field must
+ be the id of a resource returned by M(vmware.vmware_rest.vcenter_storage_policies).
+ (['present'])
- ' This key is required with [''present''].'
type: dict
vcenter_hostname:
@@ -749,18 +982,19 @@ options:
type: bool
vm:
description:
- - Identifier of the virtual machine to be unregistered. Required with I(state=['absent',
- 'relocate', 'unregister'])
+ - Identifier of the virtual machine to be unregistered.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ Required with I(state=['absent', 'relocate', 'unregister'])
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -1016,6 +1250,24 @@ value:
# This structure describes the format of the data expected by the end-points
PAYLOAD_FORMAT = {
+ "clone": {
+ "query": {},
+ "body": {
+ "disks_to_remove": "disks_to_remove",
+ "disks_to_update": "disks_to_update",
+ "guest_customization_spec": "guest_customization_spec",
+ "name": "name",
+ "placement": "placement",
+ "power_on": "power_on",
+ "source": "source",
+ },
+ "path": {},
+ },
+ "relocate": {
+ "query": {},
+ "body": {"disks": "disks", "placement": "placement"},
+ "path": {"vm": "vm"},
+ },
"register": {
"query": {},
"body": {
@@ -1027,6 +1279,7 @@ PAYLOAD_FORMAT = {
},
"path": {},
},
+ "unregister": {"query": {}, "body": {}, "path": {"vm": "vm"}},
"create": {
"query": {},
"body": {
@@ -1041,6 +1294,7 @@ PAYLOAD_FORMAT = {
"memory": "memory",
"name": "name",
"nics": "nics",
+ "nvme_adapters": "nvme_adapters",
"parallel_ports": "parallel_ports",
"placement": "placement",
"sata_adapters": "sata_adapters",
@@ -1050,25 +1304,7 @@ PAYLOAD_FORMAT = {
},
"path": {},
},
- "relocate": {
- "query": {},
- "body": {"disks": "disks", "placement": "placement"},
- "path": {"vm": "vm"},
- },
"delete": {"query": {}, "body": {}, "path": {"vm": "vm"}},
- "clone": {
- "query": {},
- "body": {
- "disks_to_remove": "disks_to_remove",
- "disks_to_update": "disks_to_update",
- "guest_customization_spec": "guest_customization_spec",
- "name": "name",
- "placement": "placement",
- "power_on": "power_on",
- "source": "source",
- },
- "path": {},
- },
"instant_clone": {
"query": {},
"body": {
@@ -1083,11 +1319,8 @@ PAYLOAD_FORMAT = {
},
"path": {},
},
- "unregister": {"query": {}, "body": {}, "path": {"vm": "vm"}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -1102,26 +1335,28 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -1371,6 +1606,7 @@ def prepare_argument_spec():
argument_spec["name"] = {"type": "str"}
argument_spec["nics"] = {"type": "list", "elements": "dict"}
argument_spec["nics_to_update"] = {"type": "dict"}
+ argument_spec["nvme_adapters"] = {"type": "list", "elements": "dict"}
argument_spec["parallel_ports"] = {"type": "list", "elements": "dict"}
argument_spec["parallel_ports_to_update"] = {"type": "dict"}
argument_spec["path"] = {"type": "str"}
@@ -1433,7 +1669,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
@@ -1450,20 +1685,16 @@ async def entry_point(module, session):
async def _clone(params, session):
-
lookup_url = per_id_url = build_url(params)
uniquity_keys = ["vm"]
comp_func = None
async def lookup_with_filters(params, session, url):
- # e.g: for the datacenter resources
- if "folder" not in params:
- return
+ search_filter = ""
+
if "name" not in params:
return
- async with session.get(
- f"{url}?names={params['name']}&folders={params['folder']}"
- ) as resp:
+ async with session.get(f"{url}?names={params['name']}{search_filter}") as resp:
_json = await resp.json()
if isinstance(_json, list) and len(_json) == 1:
return await get_device_info(session, url, _json[0]["vm"])
@@ -1526,20 +1757,16 @@ async def _clone(params, session):
async def _create(params, session):
-
lookup_url = per_id_url = build_url(params)
uniquity_keys = ["vm"]
comp_func = None
async def lookup_with_filters(params, session, url):
- # e.g: for the datacenter resources
- if "folder" not in params:
- return
+ search_filter = ""
+
if "name" not in params:
return
- async with session.get(
- f"{url}?names={params['name']}&folders={params['folder']}"
- ) as resp:
+ async with session.get(f"{url}?names={params['name']}{search_filter}") as resp:
_json = await resp.json()
if isinstance(_json, list) and len(_json) == 1:
return await get_device_info(session, url, _json[0]["vm"])
@@ -1620,20 +1847,16 @@ async def _delete(params, session):
async def _instant_clone(params, session):
-
lookup_url = per_id_url = build_url(params)
uniquity_keys = ["vm"]
comp_func = None
async def lookup_with_filters(params, session, url):
- # e.g: for the datacenter resources
- if "folder" not in params:
- return
+ search_filter = ""
+
if "name" not in params:
return
- async with session.get(
- f"{url}?names={params['name']}&folders={params['folder']}"
- ) as resp:
+ async with session.get(f"{url}?names={params['name']}{search_filter}") as resp:
_json = await resp.json()
if isinstance(_json, list) and len(_json) == 1:
return await get_device_info(session, url, _json[0]["vm"])
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_customization.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_customization.py
index bfc5b5001..66a139f2f 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_customization.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_customization.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -25,50 +22,86 @@ options:
is mandatory.
- 'Valid attributes are:'
- ' - C(windows_config) (dict): Guest customization specification for a Windows
- guest operating system ([''set''])'
+ guest operating system'
+ - If unset, ConfigurationSpec.linux-config or ConfigurationSpec.cloud-config
+ must be set. Otherwise, an appropriate fault will be thrown. (['set'])
- ' - Accepted keys:'
- - ' - reboot (string): The C(reboot_option) specifies what should be done
- to the guest after the customization.'
+ - ' - reboot (string): This option specifies what should be done to the
+ guest after the customization.'
- 'Accepted value for this field:'
- ' - C(NO_REBOOT)'
- ' - C(REBOOT)'
- ' - C(SHUTDOWN)'
- ' - sysprep (object): Customization settings like user details, administrator
- details, etc for the windows guest operating system. Exactly one of C(#sysprep)
- or C(#sysprep_xml) must be specified.'
+ details, etc for the windows guest operating system. Exactly one of WindowsConfiguration.sysprep
+ or WindowsConfiguration.sysprep-xml must be specified.'
+ - If unset, sysprep settings will not be applied to the windows guest operating
+ system.
- ' - sysprep_xml (string): All settings specified in a XML format. This
is the content of a typical answer.xml file that is used by System administrators
during the Windows image customization. Check https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/update-windows-settings-and-scripts-create-your-own-answer-file-sxs
- Exactly one of C(#sysprep) or C(#sysprep_xml) must be specified.'
+ Exactly one of WindowsConfiguration.sysprep or WindowsConfiguration.sysprep-xml
+ must be specified.'
+ - If unset, sysprep settings will not be applied to the windows guest operating
+ system.
- ' - C(linux_config) (dict): Guest customization specification for a linux
- guest operating system ([''set''])'
+ guest operating system'
+ - If unset, ConfigurationSpec.windows-config or ConfigurationSpec.cloud-config
+ must be set. Otherwise, an appropriate fault will be thrown. (['set'])
- ' - Accepted keys:'
- ' - hostname (object): The computer name of the (Windows) virtual machine.
A computer name may contain letters (A-Z), numbers(0-9) and hyphens (-)
but no spaces or periods (.). The name may not consist entirely of digits.
A computer name is restricted to 15 characters in length. If the computer
name is longer than 15 characters, it will be truncated to 15 characters.
- Check {@link HostnameGenerator} for various options.'
+ Check HostnameGenerator for various options.'
- ' - domain (string): The fully qualified domain name.'
- ' - time_zone (string): The case-sensitive time zone, such as Europe/Sofia.
Valid time zone values are based on the tz (time zone) database used by
- Linux. The values are strings in the form "Area/Location," in which Area
- is a continent or ocean name, and Location is the city, island, or other
- regional designation. See the https://kb.vmware.com/kb/2145518 for a list
- of supported time zones for different versions in Linux.'
+ Linux. The values are strings (string) in the form "Area/Location," in
+ which Area is a continent or ocean name, and Location is the city, island,
+ or other regional designation. '
+ - ' See the https://kb.vmware.com/kb/2145518 for a list of supported time
+ zones for different versions in Linux.'
+ - ''
+ - If unset, time zone is not modified inside guest operating system.
- ' - script_text (string): The script to run before and after Linux guest
- customization.<br> The max size of the script is 1500 bytes. As long as
- the script (shell, perl, python...) has the right "#!" in the header,
- it is supported. The caller should not assume any environment variables
- when the script is run. The script is invoked by the customization engine
- using the command line: 1) with argument "precustomization" before customization,
- 2) with argument "postcustomization" after customization. The script should
- parse this argument and implement pre-customization or post-customization
- task code details in the corresponding block. A Linux shell script example:
- <code> #!/bin/sh<br> if [ x$1 == x"precustomization" ]; then<br> echo
- "Do Precustomization tasks"<br> #code for pre-customization actions...<br>
- elif [ x$1 == x"postcustomization" ]; then<br> echo "Do Postcustomization
- tasks"<br> #code for post-customization actions...<br> fi<br> </code>'
+ customization.'
+ - ' The max size of the script is 1500 bytes. As long as the script (shell,
+ perl, python...) has the right "#!" in the header, it is supported. The
+ caller should not assume any environment variables when the script is
+ run. '
+ - ' The script is invoked by the customization engine using the command line:
+ 1) with argument "precustomization" before customization, 2) with argument
+ "postcustomization" after customization. The script should parse this
+ argument and implement pre-customization or post-customization task code
+ details in the corresponding block. '
+ - ''
+ - ' A Linux shell script example: '
+ - ''
+ - ' #!/bin/sh'
+ - ' if [ x$1 == x"precustomization" ]; then'
+ - ' echo "Do Precustomization tasks"'
+ - ' #code for pre-customization actions...'
+ - ' elif [ x$1 == x"postcustomization" ]; then'
+ - ' echo "Do Postcustomization tasks"'
+ - ' #code for post-customization actions...'
+ - ' fi'
+ - ' '
+ - ''
+ - If unset, no script will be executed.
+ - ' - C(cloud_config) (dict): Guest customization specification with cloud
+ configuration.'
+ - If unset, ConfigurationSpec.windows-config or ConfigurationSpec.linux-config
+ must be set. Otherwise, an appropriate fault will be thrown. (['set'])
+ - ' - Accepted keys:'
+ - ' - type (string): This option specifies different types of the cloud
+ configuration.'
+ - 'Accepted value for this field:'
+ - ' - C(CLOUDINIT)'
+ - ' - cloudinit (object): cloud-init configuration'
+ - This field is optional and it is only relevant when the value of CloudConfiguration.type
+ is CLOUDINIT.
required: true
type: dict
global_DNS_settings:
@@ -79,36 +112,43 @@ options:
- ' - C(dns_suffix_list) (list): List of name resolution suffixes for the
virtual network adapter. This list applies to both Windows and Linux guest
customization. For Linux, this setting is global, whereas in Windows,
- this setting is listed on a per-adapter basis. ([''set''])'
+ this setting is listed on a per-adapter basis.'
+ - If unset, no DNS suffixes are set. (['set'])
- ' - C(dns_servers) (list): List of DNS servers, for a virtual network adapter
with a static IP address. If this list is empty, then the guest operating
system is expected to use a DHCP server to get its DNS server settings.
These settings configure the virtual machine to use the specified DNS
- servers. These DNS server settings are listed in the order of preference.
- ([''set''])'
+ servers. These DNS server settings are listed in the order of preference.'
+ - If unset, no DNS servers are set. (['set'])
required: true
type: dict
interfaces:
description:
- IP settings that are specific to a particular virtual network adapter. The
- {@link AdapterMapping} {@term structure} maps a network adapter's MAC
- address to its {@link IPSettings}. May be empty if there are no network
- adapters, else should match number of network adapters configured for
- the VM. This parameter is mandatory.
+ AdapterMapping structure maps a network adapter's MAC address to its IPSettings.
+ May be empty if there are no network adapters, else should match number
+ of network adapters configured for the VM. This parameter is mandatory.
- 'Valid attributes are:'
- - ' - C(mac_address) (str): The MAC address of a network adapter being customized.
- ([''set''])'
+ - ' - C(mac_address) (str): The MAC address of a network adapter being customized.'
+ - If unset, the customization process maps the the settings from the list
+ of I(i_p_settings) in the CustomizationSpec.interfaces to the virtual
+ machine's network adapters, in PCI slot order. The first virtual network
+ adapter on the PCI bus is assigned interfaces[0].IPSettings, the second
+ adapter is assigned interfaces[1].IPSettings, and so on. (['set'])
- ' - C(adapter) (dict): The IP settings for the associated virtual network
adapter. ([''set''])'
- ' This key is required with [''set''].'
- ' - Accepted keys:'
- ' - ipv4 (object): Specification to configure IPv4 address, subnet mask
and gateway info for this virtual network adapter.'
+ - If unset, no IPv4 addresses are set.
- ' - ipv6 (object): Specification to configure IPv6 address, subnet mask
and gateway info for this virtual network adapter.'
+ - If unset, no IPv6 addresses are set.
- ' - windows (object): Windows settings to be configured for this specific
virtual Network adapter. This is valid only for Windows guest operating
systems.'
+ - If unset, no specific Windows settings are set.
elements: dict
required: true
type: list
@@ -120,6 +160,12 @@ options:
- The default value is 300s.
type: float
version_added: 2.1.0
+ state:
+ choices:
+ - set
+ default: set
+ description: []
+ type: str
vcenter_hostname:
description:
- The hostname or IP address of the vSphere vCenter
@@ -160,6 +206,7 @@ options:
vm:
description:
- The unique identifier of the virtual machine that needs to be customized.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
This parameter is mandatory.
required: true
type: str
@@ -167,11 +214,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -220,8 +267,6 @@ PAYLOAD_FORMAT = {
}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -236,26 +281,27 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
- get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -284,6 +330,7 @@ def prepare_argument_spec():
argument_spec["configuration_spec"] = {"required": True, "type": "dict"}
argument_spec["global_DNS_settings"] = {"required": True, "type": "dict"}
argument_spec["interfaces"] = {"required": True, "type": "list", "elements": "dict"}
+ argument_spec["state"] = {"type": "str", "choices": ["set"], "default": "set"}
argument_spec["vm"] = {"required": True, "type": "str"}
return argument_spec
@@ -324,8 +371,17 @@ def build_url(params):
async def entry_point(module, session):
+ if module.params["state"] == "present":
+ if "_create" in globals():
+ operation = "create"
+ else:
+ operation = "update"
+ elif module.params["state"] == "absent":
+ operation = "delete"
+ else:
+ operation = module.params["state"]
- func = globals()["_set"]
+ func = globals()["_" + operation]
return await func(module.params, session)
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_filesystem_directories.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_filesystem_directories.py
index 4fe1bd528..9fb6ee330 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_filesystem_directories.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_filesystem_directories.py
@@ -3,32 +3,30 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
module: vcenter_vm_guest_filesystem_directories
short_description: Creates a directory in the guest operating system
-description: Creates a directory in the guest operating system. <p>
+description: 'Creates a directory in the guest operating system. '
options:
create_parents:
description:
- - Whether any parent directories should be created. If any failure occurs,
+ - Whether any parent directories should be created. If any failure occurs,
some parent directories could be left behind.
+ - If unset parent directories are not created.
type: bool
credentials:
description:
- The guest authentication data. This parameter is mandatory.
- 'Valid attributes are:'
- - ' - C(interactive_session) (bool): If {@term set}, theoperation will interact
- with the logged-in desktop session in the guest. This requires that the
- logged-on user matches the user specified by the {@link Credentials}.
- This is currently only supported for {@link Type#USERNAME_PASSWORD}. ([''absent'',
- ''create_temporary'', ''move'', ''present''])'
+ - ' - C(interactive_session) (bool): If set, the operation will interact with
+ the logged-in desktop session in the guest. This requires that the logged-on
+ user matches the user specified by the Credentials. This is currently
+ only supported for USERNAME_PASSWORD. ([''absent'', ''create_temporary'',
+ ''move'', ''present''])'
- ' This key is required with [''absent'', ''create_temporary'', ''move'',
''present''].'
- ' - C(type) (str): Types of guest credentials ([''absent'', ''create_temporary'',
@@ -38,14 +36,18 @@ options:
- ' - Accepted values:'
- ' - SAML_BEARER_TOKEN'
- ' - USERNAME_PASSWORD'
- - ' - C(user_name) (str): For {@link Type#SAML_BEARER_TOKEN}, this is the
- guest user to be associated with the credentials. For {@link Type#USERNAME_PASSWORD}
- this is the guest username. ([''absent'', ''create_temporary'', ''move'',
- ''present''])'
- - ' - C(password) (str): password ([''absent'', ''create_temporary'', ''move'',
- ''present''])'
- - ' - C(saml_token) (str): SAML Bearer Token ([''absent'', ''create_temporary'',
- ''move'', ''present''])'
+ - ' - C(user_name) (str): For SAML_BEARER_TOKEN, this is the guest user to
+ be associated with the credentials. For USERNAME_PASSWORD this is the
+ guest username.'
+ - If no user is specified for SAML_BEARER_TOKEN, a guest dependent mapping
+ will decide what guest user account is applied. (['absent', 'create_temporary',
+ 'move', 'present'])
+ - ' - C(password) (str): password'
+ - This field is optional and it is only relevant when the value of Credentials.type
+ is USERNAME_PASSWORD. (['absent', 'create_temporary', 'move', 'present'])
+ - ' - C(saml_token) (str): SAML Bearer Token'
+ - This field is optional and it is only relevant when the value of Credentials.type
+ is SAML_BEARER_TOKEN. (['absent', 'create_temporary', 'move', 'present'])
required: true
type: dict
new_path:
@@ -57,6 +59,7 @@ options:
parent_path:
description:
- The complete path to the directory in which to create the new directory.
+ - Directory If unset a guest-specific default will be used.
type: str
path:
description:
@@ -71,6 +74,7 @@ options:
description:
- If true, all files and subdirectories are also deleted. If false, the directory
must be empty for the operation to succeed.
+ - If unset, any directory content is not deleted.
type: bool
session_timeout:
description:
@@ -132,18 +136,20 @@ options:
type: bool
vm:
description:
- - Virtual Machine to perform the operation on. This parameter is mandatory.
+ - Virtual Machine to perform the operation on.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ This parameter is mandatory.
required: true
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -202,38 +208,36 @@ PAYLOAD_FORMAT = {
"body": {"credentials": "credentials", "new_path": "new_path", "path": "path"},
"path": {"vm": "vm"},
},
- "create": {
+ "create_temporary": {
"query": {},
"body": {
- "create_parents": "create_parents",
"credentials": "credentials",
- "path": "path",
+ "parent_path": "parent_path",
+ "prefix": "prefix",
+ "suffix": "suffix",
},
"path": {"vm": "vm"},
},
- "delete": {
+ "create": {
"query": {},
"body": {
+ "create_parents": "create_parents",
"credentials": "credentials",
"path": "path",
- "recursive": "recursive",
},
"path": {"vm": "vm"},
},
- "create_temporary": {
+ "delete": {
"query": {},
"body": {
"credentials": "credentials",
- "parent_path": "parent_path",
- "prefix": "prefix",
- "suffix": "suffix",
+ "path": "path",
+ "recursive": "recursive",
},
"path": {"vm": "vm"},
},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -248,26 +252,28 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -347,7 +353,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
@@ -364,7 +369,6 @@ async def entry_point(module, session):
async def _create(params, session):
-
uniquity_keys = []
payload = prepare_payload(params, PAYLOAD_FORMAT["create"])
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_identity_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_identity_info.py
index 59395db35..2fd8b2141 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_identity_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_identity_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -62,17 +59,19 @@ options:
type: bool
vm:
description:
- - Identifier of the virtual machine. Required with I(state=['get'])
+ - Identifier of the virtual machine.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ Required with I(state=['get'])
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -114,8 +113,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {"vm": "vm"}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -130,26 +127,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_localfilesystem_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_localfilesystem_info.py
index a4159aecc..a95254c33 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_localfilesystem_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_localfilesystem_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -63,17 +60,19 @@ options:
type: bool
vm:
description:
- - Identifier of the virtual machine. Required with I(state=['get'])
+ - Identifier of the virtual machine.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ Required with I(state=['get'])
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -116,8 +115,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {"vm": "vm"}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -132,26 +129,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_networking_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_networking_info.py
index 466bc8db1..320629306 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_networking_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_networking_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -64,17 +61,19 @@ options:
type: bool
vm:
description:
- - Virtual machine ID Required with I(state=['get'])
+ - Virtual machine ID
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ Required with I(state=['get'])
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -117,8 +116,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {"vm": "vm"}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -133,26 +130,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_networking_interfaces_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_networking_interfaces_info.py
index 838fea679..7f7c56eb7 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_networking_interfaces_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_networking_interfaces_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -64,17 +61,19 @@ options:
type: bool
vm:
description:
- - Virtual machine ID Required with I(state=['list'])
+ - Virtual machine ID
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ Required with I(state=['list'])
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -113,8 +112,6 @@ PAYLOAD_FORMAT = {
"list": {"query": {}, "body": {}, "path": {"vm": "vm"}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -129,26 +126,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_networking_routes_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_networking_routes_info.py
index ab7ad241f..2133a89b4 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_networking_routes_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_networking_routes_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -63,17 +60,19 @@ options:
type: bool
vm:
description:
- - Virtual machine ID Required with I(state=['list'])
+ - Virtual machine ID
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ Required with I(state=['list'])
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -108,8 +107,6 @@ PAYLOAD_FORMAT = {
"list": {"query": {}, "body": {}, "path": {"vm": "vm"}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -124,26 +121,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_operations_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_operations_info.py
index 78799f24f..75651456b 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_operations_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_operations_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -62,17 +59,19 @@ options:
type: bool
vm:
description:
- - Identifier of the virtual machine. Required with I(state=['get'])
+ - Identifier of the virtual machine.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ Required with I(state=['get'])
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.0.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -86,8 +85,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {"vm": "vm"}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -102,26 +99,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_power.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_power.py
index 65bdfbfd7..9487a2004 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_power.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_power.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -73,21 +70,23 @@ options:
type: bool
vm:
description:
- - Identifier of the virtual machine. This parameter is mandatory.
+ - Identifier of the virtual machine.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ This parameter is mandatory.
required: true
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
seealso:
- description: A module to boot, hard shutdown and hard reset guest
module: vmware.vmware_rest.vcenter_vm_power
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -141,13 +140,11 @@ value:
# This structure describes the format of the data expected by the end-points
PAYLOAD_FORMAT = {
- "shutdown": {"query": {}, "body": {}, "path": {"vm": "vm"}},
"reboot": {"query": {}, "body": {}, "path": {"vm": "vm"}},
+ "shutdown": {"query": {}, "body": {}, "path": {"vm": "vm"}},
"standby": {"query": {}, "body": {}, "path": {"vm": "vm"}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -162,26 +159,27 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
- get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -252,7 +250,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_power_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_power_info.py
index bcb7fef6f..e6e1a8352 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_power_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_guest_power_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -62,17 +59,19 @@ options:
type: bool
vm:
description:
- - Identifier of the virtual machine. Required with I(state=['get'])
+ - Identifier of the virtual machine.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ Required with I(state=['get'])
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -130,8 +129,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {"vm": "vm"}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -146,26 +143,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware.py
index 3e8f8ad87..81ace5eba 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -36,8 +33,8 @@ options:
- ALWAYS
- NEVER
description:
- - The C(upgrade_policy) defines the valid virtual hardware upgrade policies
- for a virtual machine.
+ - The I(upgrade_policy) enumerated type defines the valid virtual hardware
+ upgrade policies for a virtual machine.
type: str
upgrade_version:
choices:
@@ -58,9 +55,9 @@ options:
- VMX_18
- VMX_19
description:
- - The C(version) defines the valid virtual hardware versions for a virtual
- machine. See https://kb.vmware.com/s/article/1003746 (Virtual machine
- hardware versions (1003746)).
+ - The I(version) enumerated type defines the valid virtual hardware versions
+ for a virtual machine. See https://kb.vmware.com/s/article/1003746 (Virtual
+ machine hardware versions (1003746)).
type: str
vcenter_hostname:
description:
@@ -118,24 +115,26 @@ options:
- VMX_18
- VMX_19
description:
- - The C(version) defines the valid virtual hardware versions for a virtual
- machine. See https://kb.vmware.com/s/article/1003746 (Virtual machine
- hardware versions (1003746)).
+ - The I(version) enumerated type defines the valid virtual hardware versions
+ for a virtual machine. See https://kb.vmware.com/s/article/1003746 (Virtual
+ machine hardware versions (1003746)).
type: str
vm:
description:
- - Virtual machine identifier. This parameter is mandatory.
+ - Virtual machine identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ This parameter is mandatory.
required: true
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -174,8 +173,6 @@ PAYLOAD_FORMAT = {
"upgrade": {"query": {}, "body": {"version": "version"}, "path": {"vm": "vm"}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -190,26 +187,27 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
- get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -326,7 +324,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_adapter_sata.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_adapter_sata.py
index 080c7a54e..854ab20b5 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_adapter_sata.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_adapter_sata.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -17,12 +14,17 @@ description: Adds a virtual SATA adapter to the virtual machine.
options:
adapter:
description:
- - Virtual SATA adapter identifier. Required with I(state=['absent'])
+ - Virtual SATA adapter identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_hardware_adapter_sata).
+ Required with I(state=['absent'])
type: str
bus:
description:
- SATA bus number.
+ - If unset, the server will choose an available bus number; if none is available,
+ the request will fail.
type: int
+ default: 0
label:
description:
- The name of the item
@@ -30,6 +32,8 @@ options:
pci_slot_number:
description:
- Address of the SATA adapter on the PCI bus.
+ - If unset, the server will choose an available address when the virtual machine
+ is powered on.
type: int
session_timeout:
description:
@@ -50,7 +54,8 @@ options:
choices:
- AHCI
description:
- - The C(type) defines the valid emulation types for a virtual SATA adapter.
+ - The I(type) enumerated type defines the valid emulation types for a virtual
+ SATA adapter.
type: str
vcenter_hostname:
description:
@@ -91,18 +96,20 @@ options:
type: bool
vm:
description:
- - Virtual machine identifier. This parameter is mandatory.
+ - Virtual machine identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ This parameter is mandatory.
required: true
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -158,8 +165,6 @@ PAYLOAD_FORMAT = {
"delete": {"query": {}, "body": {}, "path": {"adapter": "adapter", "vm": "vm"}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -174,26 +179,28 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -269,7 +276,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
@@ -286,20 +292,16 @@ async def entry_point(module, session):
async def _create(params, session):
-
lookup_url = per_id_url = build_url(params)
uniquity_keys = ["adapter"]
comp_func = None
async def lookup_with_filters(params, session, url):
- # e.g: for the datacenter resources
- if "folder" not in params:
- return
+ search_filter = ""
+
if "name" not in params:
return
- async with session.get(
- f"{url}?names={params['name']}&folders={params['folder']}"
- ) as resp:
+ async with session.get(f"{url}?names={params['name']}{search_filter}") as resp:
_json = await resp.json()
if isinstance(_json, list) and len(_json) == 1:
return await get_device_info(session, url, _json[0]["adapter"])
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_adapter_sata_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_adapter_sata_info.py
index d2912eaab..5836cfa0f 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_adapter_sata_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_adapter_sata_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -17,7 +14,9 @@ description: Returns information about a virtual SATA adapter.
options:
adapter:
description:
- - Virtual SATA adapter identifier. Required with I(state=['get'])
+ - Virtual SATA adapter identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_hardware_adapter_sata).
+ Required with I(state=['get'])
type: str
label:
description:
@@ -70,18 +69,20 @@ options:
type: bool
vm:
description:
- - Virtual machine identifier. This parameter is mandatory.
+ - Virtual machine identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ This parameter is mandatory.
required: true
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -130,8 +131,6 @@ PAYLOAD_FORMAT = {
"list": {"query": {}, "body": {}, "path": {"vm": "vm"}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -149,23 +148,23 @@ from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest imp
build_full_device_list,
exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_adapter_scsi.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_adapter_scsi.py
index 3509c904d..25521695c 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_adapter_scsi.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_adapter_scsi.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -17,21 +14,28 @@ description: Adds a virtual SCSI adapter to the virtual machine.
options:
adapter:
description:
- - Virtual SCSI adapter identifier. Required with I(state=['absent', 'present'])
+ - Virtual SCSI adapter identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_hardware_adapter_scsi).
+ Required with I(state=['absent', 'present'])
type: str
bus:
description:
- SCSI bus number.
+ - If unset, the server will choose an available bus number; if none is available,
+ the request will fail.
type: int
+ default: 0
label:
description:
- The name of the item
type: str
pci_slot_number:
description:
- - Address of the SCSI adapter on the PCI bus. If the PCI address is invalid,
+ - Address of the SCSI adapter on the PCI bus. If the PCI address is invalid,
the server will change it when the VM is started or as the device is hot
added.
+ - If unset, the server will choose an available address when the virtual machine
+ is powered on.
type: int
session_timeout:
description:
@@ -47,7 +51,8 @@ options:
- PHYSICAL
- VIRTUAL
description:
- - The C(sharing) defines the valid bus sharing modes for a virtual SCSI adapter.
+ - The I(sharing) enumerated type defines the valid bus sharing modes for a
+ virtual SCSI adapter.
type: str
state:
choices:
@@ -63,7 +68,8 @@ options:
- LSILOGICSAS
- PVSCSI
description:
- - The C(type) defines the valid emulation types for a virtual SCSI adapter.
+ - The I(type) enumerated type defines the valid emulation types for a virtual
+ SCSI adapter.
type: str
vcenter_hostname:
description:
@@ -104,18 +110,20 @@ options:
type: bool
vm:
description:
- - Virtual machine identifier. This parameter is mandatory.
+ - Virtual machine identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ This parameter is mandatory.
required: true
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -167,7 +175,6 @@ value:
# This structure describes the format of the data expected by the end-points
PAYLOAD_FORMAT = {
- "delete": {"query": {}, "body": {}, "path": {"adapter": "adapter", "vm": "vm"}},
"update": {
"query": {},
"body": {"sharing": "sharing"},
@@ -183,10 +190,9 @@ PAYLOAD_FORMAT = {
},
"path": {"vm": "vm"},
},
+ "delete": {"query": {}, "body": {}, "path": {"adapter": "adapter", "vm": "vm"}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -201,26 +207,28 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -303,7 +311,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
@@ -320,20 +327,16 @@ async def entry_point(module, session):
async def _create(params, session):
-
lookup_url = per_id_url = build_url(params)
uniquity_keys = ["adapter"]
comp_func = None
async def lookup_with_filters(params, session, url):
- # e.g: for the datacenter resources
- if "folder" not in params:
- return
+ search_filter = ""
+
if "name" not in params:
return
- async with session.get(
- f"{url}?names={params['name']}&folders={params['folder']}"
- ) as resp:
+ async with session.get(f"{url}?names={params['name']}{search_filter}") as resp:
_json = await resp.json()
if isinstance(_json, list) and len(_json) == 1:
return await get_device_info(session, url, _json[0]["adapter"])
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py
index c64df425a..ddb324276 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -17,7 +14,9 @@ description: Returns information about a virtual SCSI adapter.
options:
adapter:
description:
- - Virtual SCSI adapter identifier. Required with I(state=['get'])
+ - Virtual SCSI adapter identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_hardware_adapter_scsi).
+ Required with I(state=['get'])
type: str
label:
description:
@@ -70,18 +69,20 @@ options:
type: bool
vm:
description:
- - Virtual machine identifier. This parameter is mandatory.
+ - Virtual machine identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ This parameter is mandatory.
required: true
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -118,8 +119,6 @@ PAYLOAD_FORMAT = {
"list": {"query": {}, "body": {}, "path": {"vm": "vm"}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -137,23 +136,23 @@ from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest imp
build_full_device_list,
exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_boot.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_boot.py
index 76f92ab3f..afc4d62e1 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_boot.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_boot.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -18,39 +15,43 @@ options:
delay:
description:
- Delay in milliseconds before beginning the firmware boot process when the
- virtual machine is powered on. This delay may be used to provide a time
+ virtual machine is powered on. This delay may be used to provide a time
window for users to connect to the virtual machine console and enter BIOS
setup mode.
+ - If unset, the value is unchanged.
type: int
efi_legacy_boot:
description:
- Flag indicating whether to use EFI legacy boot mode.
+ - If unset, the value is unchanged.
type: bool
enter_setup_mode:
description:
- Flag indicating whether the firmware boot process should automatically enter
- setup mode the next time the virtual machine boots. Note that this flag
+ setup mode the next time the virtual machine boots. Note that this flag
will automatically be reset to false once the virtual machine enters setup
mode.
+ - If unset, the value is unchanged.
type: bool
network_protocol:
choices:
- IPV4
- IPV6
description:
- - The C(network_protocol) defines the valid network boot protocols supported
- when booting a virtual machine with {@link Type#EFI} firmware over the
- network.
+ - The I(network_protocol) enumerated type defines the valid network boot protocols
+ supported when booting a virtual machine with EFI firmware over the network.
type: str
retry:
description:
- Flag indicating whether the virtual machine should automatically retry the
boot process after a failure.
+ - If unset, the value is unchanged.
type: bool
retry_delay:
description:
- Delay in milliseconds before retrying the boot process after a failure;
- applicable only when {@link Info#retry} is true.
+ applicable only when I(retry) is true.
+ - If unset, the value is unchanged.
type: int
session_timeout:
description:
@@ -71,7 +72,8 @@ options:
- BIOS
- EFI
description:
- - The C(type) defines the valid firmware types for a virtual machine.
+ - The I(type) enumerated type defines the valid firmware types for a virtual
+ machine.
type: str
vcenter_hostname:
description:
@@ -112,18 +114,20 @@ options:
type: bool
vm:
description:
- - Virtual machine identifier. This parameter is mandatory.
+ - Virtual machine identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ This parameter is mandatory.
required: true
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -177,8 +181,6 @@ PAYLOAD_FORMAT = {
}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -193,26 +195,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
- gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -290,7 +290,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_boot_device.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_boot_device.py
index b555747b8..fd2ea75b6 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_boot_device.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_boot_device.py
@@ -3,29 +3,25 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
module: vcenter_vm_hardware_boot_device
short_description: Sets the virtual devices that will be used to boot the virtual
machine
-description: Sets the virtual devices that will be used to boot the virtual machine. The
- virtual machine will check the devices in order, attempting to boot from each,
- until the virtual machine boots successfully. If the {@term list} is empty, the
- virtual machine will use a default boot sequence. There should be no more than
- one instance of {@link Entry} for a given device type except {@link Device.Type#ETHERNET}
- in the {@term list}.
+description: Sets the virtual devices that will be used to boot the virtual machine.
+ The virtual machine will check the devices in order, attempting to boot from each,
+ until the virtual machine boots successfully. If the list is empty, the virtual
+ machine will use a default boot sequence. There should be no more than one instance
+ of Device.Entry for a given device type except ETHERNET in the list.
options:
devices:
description:
- Ordered list of boot devices. This parameter is mandatory.
- 'Valid attributes are:'
- - ' - C(type) (str): The C(type) defines the valid device types that may be
+ - ' - C(type) (str): This option defines the valid device types that may be
used as bootable devices. ([''set''])'
- ' This key is required with [''set''].'
- ' - Accepted values:'
@@ -34,9 +30,19 @@ options:
- ' - ETHERNET'
- ' - FLOPPY'
- ' - C(nic) (str): Virtual Ethernet device. Ethernet device to use as boot
- device for this entry. ([''set''])'
+ device for this entry.'
+ - This field is optional and it is only relevant when the value of I(type)
+ is ETHERNET.
+ - When clients pass a value of this structure as a parameter, the field must
+ be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_hardware_ethernet).
+ (['set'])
- ' - C(disks) (list): Virtual disk device. List of virtual disks in boot
- order. ([''set''])'
+ order.'
+ - This field is optional and it is only relevant when the value of I(type)
+ is DISK.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_vm_hardware_disk).
+ (['set'])
elements: dict
required: true
type: list
@@ -93,18 +99,20 @@ options:
type: bool
vm:
description:
- - Virtual machine identifier. This parameter is mandatory.
+ - Virtual machine identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ This parameter is mandatory.
required: true
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -141,8 +149,6 @@ PAYLOAD_FORMAT = {
"set": {"query": {}, "body": {"devices": "devices"}, "path": {"vm": "vm"}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -157,26 +163,27 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
- get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -244,7 +251,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_boot_device_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_boot_device_info.py
index e4d037bab..d01e67850 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_boot_device_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_boot_device_info.py
@@ -3,18 +3,15 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
module: vcenter_vm_hardware_boot_device_info
short_description: Returns an ordered list of boot devices for the virtual machine
description: Returns an ordered list of boot devices for the virtual machine. If the
- {@term list} is empty, the virtual machine uses a default boot sequence.
+ list is empty, the virtual machine uses a default boot sequence.
options:
session_timeout:
description:
@@ -63,17 +60,19 @@ options:
type: bool
vm:
description:
- - Virtual machine identifier. Required with I(state=['get'])
+ - Virtual machine identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ Required with I(state=['get'])
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -114,8 +113,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {"vm": "vm"}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -130,26 +127,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_boot_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_boot_info.py
index 66fcac5f7..d719b8a7b 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_boot_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_boot_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -62,17 +59,19 @@ options:
type: bool
vm:
description:
- - Virtual machine identifier. Required with I(state=['get'])
+ - Virtual machine identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ Required with I(state=['get'])
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -111,8 +110,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {"vm": "vm"}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -127,26 +124,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_cdrom.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_cdrom.py
index 131a5b0d9..b3185f1c1 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_cdrom.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_cdrom.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -18,25 +15,31 @@ options:
allow_guest_control:
description:
- Flag indicating whether the guest can connect and disconnect the device.
+ - If unset, the value is unchanged.
type: bool
backing:
description:
- - Physical resource backing for the virtual CD-ROM device. Required with I(state=['present'])
+ - Physical resource backing for the virtual CD-ROM device.
+ - If unset, defaults to automatic detection of a suitable host device. Required
+ with I(state=['present'])
- 'Valid attributes are:'
- - ' - C(type) (str): The C(backing_type) defines the valid backing types for
- a virtual CD-ROM device. ([''present''])'
+ - ' - C(type) (str): This option defines the valid backing types for a virtual
+ CD-ROM device. ([''present''])'
- ' This key is required with [''present''].'
- ' - Accepted values:'
- ' - CLIENT_DEVICE'
- ' - HOST_DEVICE'
- ' - ISO_FILE'
- ' - C(iso_file) (str): Path of the image file that should be used as the
- virtual CD-ROM device backing. ([''present''])'
+ virtual CD-ROM device backing.'
+ - This field is optional and it is only relevant when the value of I(type)
+ is ISO_FILE. (['present'])
- ' - C(host_device) (str): Name of the device that should be used as the
- virtual CD-ROM device backing. ([''present''])'
- - ' - C(device_access_type) (str): The C(device_access_type) defines the valid
- device access types for a physical device packing of a virtual CD-ROM
- device. ([''present''])'
+ virtual CD-ROM device backing.'
+ - If unset, the virtual CD-ROM device will be configured to automatically
+ detect a suitable host device. (['present'])
+ - ' - C(device_access_type) (str): This option defines the valid device access
+ types for a physical device packing of a virtual CD-ROM device. ([''present''])'
- ' - Accepted values:'
- ' - EMULATION'
- ' - PASSTHRU'
@@ -44,17 +47,24 @@ options:
type: dict
cdrom:
description:
- - Virtual CD-ROM device identifier. Required with I(state=['absent', 'connect',
- 'disconnect', 'present'])
+ - Virtual CD-ROM device identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_hardware_cdrom).
+ Required with I(state=['absent', 'connect', 'disconnect', 'present'])
type: str
ide:
description:
- Address for attaching the device to a virtual IDE adapter.
+ - If unset, the server will choose an available address; if none is available,
+ the request will fail.
- 'Valid attributes are:'
- ' - C(primary) (bool): Flag specifying whether the device should be attached
- to the primary or secondary IDE adapter of the virtual machine. ([''present''])'
+ to the primary or secondary IDE adapter of the virtual machine.'
+ - If unset, the server will choose a adapter with an available connection.
+ If no IDE connections are available, the request will be rejected. (['present'])
- ' - C(master) (bool): Flag specifying whether the device should be the master
- or slave device on the IDE adapter. ([''present''])'
+ or slave device on the IDE adapter.'
+ - If unset, the server will choose an available connection type. If no IDE
+ connections are available, the request will be rejected. (['present'])
type: dict
label:
description:
@@ -62,13 +72,17 @@ options:
type: str
sata:
description:
- - Address for attaching the device to a virtual SATA adapter. Required with
- I(state=['present'])
+ - Address for attaching the device to a virtual SATA adapter.
+ - If unset, the server will choose an available address; if none is available,
+ the request will fail. Required with I(state=['present'])
- 'Valid attributes are:'
- ' - C(bus) (int): Bus number of the adapter to which the device should be
attached. ([''present''])'
- ' This key is required with [''present''].'
- - ' - C(unit) (int): Unit number of the device. ([''present''])'
+ - ' - C(unit) (int): Unit number of the device.'
+ - If unset, the server will choose an available unit number on the specified
+ adapter. If there are no available connections on the adapter, the request
+ will be rejected. (['present'])
type: dict
session_timeout:
description:
@@ -82,6 +96,7 @@ options:
description:
- Flag indicating whether the virtual device should be connected whenever
the virtual machine is powered on.
+ - If unset, the value is unchanged.
type: bool
state:
choices:
@@ -97,8 +112,9 @@ options:
- IDE
- SATA
description:
- - The C(host_bus_adapter_type) defines the valid types of host bus adapters
- that may be used for attaching a Cdrom to a virtual machine.
+ - The I(host_bus_adapter_type) enumerated type defines the valid types of
+ host bus adapters that may be used for attaching a Cdrom to a virtual
+ machine.
type: str
vcenter_hostname:
description:
@@ -139,18 +155,20 @@ options:
type: bool
vm:
description:
- - Virtual machine identifier. This parameter is mandatory.
+ - Virtual machine identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ This parameter is mandatory.
required: true
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -206,6 +224,8 @@ value:
# This structure describes the format of the data expected by the end-points
PAYLOAD_FORMAT = {
+ "connect": {"query": {}, "body": {}, "path": {"cdrom": "cdrom", "vm": "vm"}},
+ "disconnect": {"query": {}, "body": {}, "path": {"cdrom": "cdrom", "vm": "vm"}},
"update": {
"query": {},
"body": {
@@ -228,12 +248,8 @@ PAYLOAD_FORMAT = {
"path": {"vm": "vm"},
},
"delete": {"query": {}, "body": {}, "path": {"cdrom": "cdrom", "vm": "vm"}},
- "disconnect": {"query": {}, "body": {}, "path": {"cdrom": "cdrom", "vm": "vm"}},
- "connect": {"query": {}, "body": {}, "path": {"cdrom": "cdrom", "vm": "vm"}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -248,26 +264,28 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -346,7 +364,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
@@ -390,20 +407,16 @@ async def _connect(params, session):
async def _create(params, session):
-
lookup_url = per_id_url = build_url(params)
uniquity_keys = ["cdrom"]
comp_func = None
async def lookup_with_filters(params, session, url):
- # e.g: for the datacenter resources
- if "folder" not in params:
- return
+ search_filter = ""
+
if "name" not in params:
return
- async with session.get(
- f"{url}?names={params['name']}&folders={params['folder']}"
- ) as resp:
+ async with session.get(f"{url}?names={params['name']}{search_filter}") as resp:
_json = await resp.json()
if isinstance(_json, list) and len(_json) == 1:
return await get_device_info(session, url, _json[0]["cdrom"])
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_cdrom_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_cdrom_info.py
index ea51baa3a..b76fd9afa 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_cdrom_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_cdrom_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -17,7 +14,9 @@ description: Returns information about a virtual CD-ROM device.
options:
cdrom:
description:
- - Virtual CD-ROM device identifier. Required with I(state=['get'])
+ - Virtual CD-ROM device identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_hardware_cdrom).
+ Required with I(state=['get'])
type: str
label:
description:
@@ -70,18 +69,20 @@ options:
type: bool
vm:
description:
- - Virtual machine identifier. This parameter is mandatory.
+ - Virtual machine identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ This parameter is mandatory.
required: true
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -117,8 +118,6 @@ PAYLOAD_FORMAT = {
"list": {"query": {}, "body": {}, "path": {"vm": "vm"}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -136,23 +135,23 @@ from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest imp
build_full_device_list,
exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_cpu.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_cpu.py
index ff96dde18..3d3a56b4a 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_cpu.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_cpu.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -17,30 +14,38 @@ description: Updates the CPU-related settings of a virtual machine.
options:
cores_per_socket:
description:
- - New number of CPU cores per socket. The number of CPU cores in the virtual
+ - New number of CPU cores per socket. The number of CPU cores in the virtual
machine must be a multiple of the number of cores per socket.
+ - If unset, the value is unchanged.
type: int
count:
description:
- - New number of CPU cores. The number of CPU cores in the virtual machine
- must be a multiple of the number of cores per socket. The supported range
- of CPU counts is constrained by the configured guest operating system
- and virtual hardware version of the virtual machine. If the virtual machine
- is running, the number of CPU cores may only be increased if {@link Info#hotAddEnabled}
- is true, and may only be decreased if {@link Info#hotRemoveEnabled} is
- true.
+ - 'New number of CPU cores. The number of CPU cores in the virtual machine
+ must be a multiple of the number of cores per socket. '
+ - ' The supported range of CPU counts is constrained by the configured guest
+ operating system and virtual hardware version of the virtual machine. '
+ - ''
+ - ' If the virtual machine is running, the number of CPU cores may only be
+ increased if I(hot_add_enabled) is true, and may only be decreased if
+ I(hot_remove_enabled) is true.'
+ - ''
+ - If unset, the value is unchanged.
type: int
hot_add_enabled:
description:
- - Flag indicating whether adding CPUs while the virtual machine is running
- is enabled. This field may only be modified if the virtual machine is
- powered off.
+ - 'Flag indicating whether adding CPUs while the virtual machine is running
+ is enabled. '
+ - ' This field may only be modified if the virtual machine is powered off.'
+ - ''
+ - If unset, the value is unchanged.
type: bool
hot_remove_enabled:
description:
- - Flag indicating whether removing CPUs while the virtual machine is running
- is enabled. This field may only be modified if the virtual machine is
- powered off.
+ - 'Flag indicating whether removing CPUs while the virtual machine is running
+ is enabled. '
+ - ' This field may only be modified if the virtual machine is powered off.'
+ - ''
+ - If unset, the value is unchanged.
type: bool
session_timeout:
description:
@@ -95,18 +100,20 @@ options:
type: bool
vm:
description:
- - Virtual machine identifier. This parameter is mandatory.
+ - Virtual machine identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ This parameter is mandatory.
required: true
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -160,8 +167,6 @@ PAYLOAD_FORMAT = {
}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -176,26 +181,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
- gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -270,7 +273,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_cpu_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_cpu_info.py
index 7901d02ad..01786eecd 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_cpu_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_cpu_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -62,17 +59,19 @@ options:
type: bool
vm:
description:
- - Virtual machine identifier. Required with I(state=['get'])
+ - Virtual machine identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ Required with I(state=['get'])
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -111,8 +110,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {"vm": "vm"}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -127,26 +124,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_disk.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_disk.py
index 2d27e32ac..d627a1550 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_disk.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_disk.py
@@ -3,45 +3,53 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
module: vcenter_vm_hardware_disk
short_description: Adds a virtual disk to the virtual machine
-description: Adds a virtual disk to the virtual machine. While adding the virtual
+description: Adds a virtual disk to the virtual machine. While adding the virtual
disk, a new VMDK file may be created or an existing VMDK file may be used to back
the virtual disk.
options:
backing:
description:
- Existing physical resource backing for the virtual disk. Exactly one of
- C(#backing) or C(#new_vmdk) must be specified. Required with I(state=['present'])
+ I(backing) or I(new_vmdk) must be specified.
+ - If unset, the virtual disk will not be connected to an existing backing.
+ Required with I(state=['present'])
- 'Valid attributes are:'
- - ' - C(type) (str): The C(backing_type) defines the valid backing types for
- a virtual disk. ([''present''])'
+ - ' - C(type) (str): This option defines the valid backing types for a virtual
+ disk. ([''present''])'
- ' This key is required with [''present''].'
- ' - Accepted values:'
- ' - VMDK_FILE'
- - ' - C(vmdk_file) (str): Path of the VMDK file backing the virtual disk.
- ([''present''])'
+ - ' - C(vmdk_file) (str): Path of the VMDK file backing the virtual disk.'
+ - This field is optional and it is only relevant when the value of I(type)
+ is VMDK_FILE. (['present'])
type: dict
disk:
description:
- - Virtual disk identifier. Required with I(state=['absent', 'present'])
+ - Virtual disk identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_hardware_disk).
+ Required with I(state=['absent', 'present'])
type: str
ide:
description:
- Address for attaching the device to a virtual IDE adapter.
+ - If unset, the server will choose an available address; if none is available,
+ the request will fail.
- 'Valid attributes are:'
- ' - C(primary) (bool): Flag specifying whether the device should be attached
- to the primary or secondary IDE adapter of the virtual machine. ([''present''])'
+ to the primary or secondary IDE adapter of the virtual machine.'
+ - If unset, the server will choose a adapter with an available connection.
+ If no IDE connections are available, the request will be rejected. (['present'])
- ' - C(master) (bool): Flag specifying whether the device should be the master
- or slave device on the IDE adapter. ([''present''])'
+ or slave device on the IDE adapter.'
+ - If unset, the server will choose an available connection type. If no IDE
+ connections are available, the request will be rejected. (['present'])
type: dict
label:
description:
@@ -49,38 +57,70 @@ options:
type: str
new_vmdk:
description:
- - Specification for creating a new VMDK backing for the virtual disk. Exactly
- one of C(#backing) or C(#new_vmdk) must be specified.
+ - Specification for creating a new VMDK backing for the virtual disk. Exactly
+ one of I(backing) or I(new_vmdk) must be specified.
+ - If unset, a new VMDK backing will not be created.
- 'Valid attributes are:'
- - ' - C(name) (str): Base name of the VMDK file. The name should not include
- the ''.vmdk'' file extension. ([''present''])'
- - ' - C(capacity) (int): Capacity of the virtual disk backing in bytes. ([''present''])'
- - ' - C(storage_policy) (dict): The C(storage_policy_spec) {@term structure}
- contains information about the storage policy that is to be associated
- the with VMDK file. ([''present''])'
+ - ' - C(name) (str): Base name of the VMDK file. The name should not include
+ the ''.vmdk'' file extension.'
+ - If unset, a name (derived from the name of the virtual machine) will be
+ chosen by the server. (['present'])
+ - ' - C(capacity) (int): Capacity of the virtual disk backing in bytes.'
+ - If unset, defaults to a guest-specific capacity. (['present'])
+ - ' - C(storage_policy) (dict): The I(storage_policy_spec) structure contains
+ information about the storage policy that is to be associated the with
+ VMDK file.'
+ - 'If unset the default storage policy of the target datastore (if applicable)
+ is applied. Currently a default storage policy is only supported by object
+ based datastores : VVol & vSAN. For non- object datastores, if unset then
+ no storage policy would be associated with the VMDK file. ([''present''])'
- ' - Accepted keys:'
- ' - policy (string): Identifier of the storage policy which should be
associated with the VMDK file.'
+ - 'When clients pass a value of this structure as a parameter, the field must
+ be the id of a resource returned by M(vmware.vmware_rest.vcenter_storage_policies). '
+ type: dict
+ nvme:
+ description:
+ - Address for attaching the device to a virtual NVMe adapter.
+ - If unset, the server will choose an available address; if none is available,
+ the request will fail. Required with I(state=['present'])
+ - 'Valid attributes are:'
+ - ' - C(bus) (int): Bus number of the adapter to which the device should be
+ attached. ([''present''])'
+ - ' This key is required with [''present''].'
+ - ' - C(unit) (int): Unit number of the device.'
+ - If unset, the server will choose an available unit number on the specified
+ adapter. If there are no available connections on the adapter, the request
+ will be rejected. (['present'])
type: dict
sata:
description:
- - Address for attaching the device to a virtual SATA adapter. Required with
- I(state=['present'])
+ - Address for attaching the device to a virtual SATA adapter.
+ - If unset, the server will choose an available address; if none is available,
+ the request will fail. Required with I(state=['present'])
- 'Valid attributes are:'
- ' - C(bus) (int): Bus number of the adapter to which the device should be
attached. ([''present''])'
- ' This key is required with [''present''].'
- - ' - C(unit) (int): Unit number of the device. ([''present''])'
+ - ' - C(unit) (int): Unit number of the device.'
+ - If unset, the server will choose an available unit number on the specified
+ adapter. If there are no available connections on the adapter, the request
+ will be rejected. (['present'])
type: dict
scsi:
description:
- - Address for attaching the device to a virtual SCSI adapter. Required with
- I(state=['present'])
+ - Address for attaching the device to a virtual SCSI adapter.
+ - If unset, the server will choose an available address; if none is available,
+ the request will fail. Required with I(state=['present'])
- 'Valid attributes are:'
- ' - C(bus) (int): Bus number of the adapter to which the device should be
attached. ([''present''])'
- ' This key is required with [''present''].'
- - ' - C(unit) (int): Unit number of the device. ([''present''])'
+ - ' - C(unit) (int): Unit number of the device.'
+ - If unset, the server will choose an available unit number on the specified
+ adapter. If there are no available connections on the adapter, the request
+ will be rejected. (['present'])
type: dict
session_timeout:
description:
@@ -100,11 +140,13 @@ options:
type:
choices:
- IDE
+ - NVME
- SATA
- SCSI
description:
- - The C(host_bus_adapter_type) defines the valid types of host bus adapters
- that may be used for attaching a virtual storage device to a virtual machine.
+ - The I(host_bus_adapter_type) enumerated type defines the valid types of
+ host bus adapters that may be used for attaching a virtual storage device
+ to a virtual machine.
type: str
vcenter_hostname:
description:
@@ -145,18 +187,20 @@ options:
type: bool
vm:
description:
- - Virtual machine identifier. This parameter is mandatory.
+ - Virtual machine identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ This parameter is mandatory.
required: true
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -212,7 +256,6 @@ value:
# This structure describes the format of the data expected by the end-points
PAYLOAD_FORMAT = {
- "delete": {"query": {}, "body": {}, "path": {"disk": "disk", "vm": "vm"}},
"update": {
"query": {},
"body": {"backing": "backing"},
@@ -224,16 +267,16 @@ PAYLOAD_FORMAT = {
"backing": "backing",
"ide": "ide",
"new_vmdk": "new_vmdk",
+ "nvme": "nvme",
"sata": "sata",
"scsi": "scsi",
"type": "type",
},
"path": {"vm": "vm"},
},
+ "delete": {"query": {}, "body": {}, "path": {"disk": "disk", "vm": "vm"}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -248,26 +291,28 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -298,6 +343,7 @@ def prepare_argument_spec():
argument_spec["ide"] = {"type": "dict"}
argument_spec["label"] = {"type": "str"}
argument_spec["new_vmdk"] = {"type": "dict"}
+ argument_spec["nvme"] = {"type": "dict"}
argument_spec["sata"] = {"type": "dict"}
argument_spec["scsi"] = {"type": "dict"}
argument_spec["state"] = {
@@ -305,7 +351,7 @@ def prepare_argument_spec():
"choices": ["absent", "present"],
"default": "present",
}
- argument_spec["type"] = {"type": "str", "choices": ["IDE", "SATA", "SCSI"]}
+ argument_spec["type"] = {"type": "str", "choices": ["IDE", "NVME", "SATA", "SCSI"]}
argument_spec["vm"] = {"required": True, "type": "str"}
return argument_spec
@@ -346,7 +392,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
@@ -363,20 +408,16 @@ async def entry_point(module, session):
async def _create(params, session):
-
lookup_url = per_id_url = build_url(params)
uniquity_keys = ["disk"]
comp_func = None
async def lookup_with_filters(params, session, url):
- # e.g: for the datacenter resources
- if "folder" not in params:
- return
+ search_filter = ""
+
if "name" not in params:
return
- async with session.get(
- f"{url}?names={params['name']}&folders={params['folder']}"
- ) as resp:
+ async with session.get(f"{url}?names={params['name']}{search_filter}") as resp:
_json = await resp.json()
if isinstance(_json, list) and len(_json) == 1:
return await get_device_info(session, url, _json[0]["disk"])
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_disk_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_disk_info.py
index 481e25896..dbfe3ba9b 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_disk_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_disk_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -17,7 +14,9 @@ description: Returns information about a virtual disk.
options:
disk:
description:
- - Virtual disk identifier. Required with I(state=['get'])
+ - Virtual disk identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_hardware_disk).
+ Required with I(state=['get'])
type: str
label:
description:
@@ -70,18 +69,20 @@ options:
type: bool
vm:
description:
- - Virtual machine identifier. This parameter is mandatory.
+ - Virtual machine identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ This parameter is mandatory.
required: true
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -137,8 +138,6 @@ PAYLOAD_FORMAT = {
"list": {"query": {}, "body": {}, "path": {"vm": "vm"}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -156,23 +155,23 @@ from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest imp
build_full_device_list,
exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_ethernet.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_ethernet.py
index f92a0c4df..758e406fc 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_ethernet.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_ethernet.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -18,14 +15,16 @@ options:
allow_guest_control:
description:
- Flag indicating whether the guest can connect and disconnect the device.
+ - If unset, the value is unchanged.
type: bool
backing:
description:
- - Physical resource backing for the virtual Ethernet adapter. Required with
- I(state=['present'])
+ - Physical resource backing for the virtual Ethernet adapter.
+ - If unset, the system may try to find an appropriate backing. If one is not
+ found, the request will fail. Required with I(state=['present'])
- 'Valid attributes are:'
- - ' - C(type) (str): The C(backing_type) defines the valid backing types for
- a virtual Ethernet adapter. ([''present''])'
+ - ' - C(type) (str): This option defines the valid backing types for a virtual
+ Ethernet adapter. ([''present''])'
- ' This key is required with [''present''].'
- ' - Accepted values:'
- ' - DISTRIBUTED_PORTGROUP'
@@ -33,16 +32,25 @@ options:
- ' - OPAQUE_NETWORK'
- ' - STANDARD_PORTGROUP'
- ' - C(network) (str): Identifier of the network that backs the virtual Ethernet
- adapter. ([''present''])'
+ adapter.'
+ - This field is optional and it is only relevant when the value of I(type)
+ is one of STANDARD_PORTGROUP, DISTRIBUTED_PORTGROUP, or OPAQUE_NETWORK.
+ - When clients pass a value of this structure as a parameter, the field must
+ be the id of a resource returned by M(vmware.vmware_rest.vcenter_network_info).
+ (['present'])
- ' - C(distributed_port) (str): Key of the distributed virtual port that
- backs the virtual Ethernet adapter. Depending on the type of the Portgroup,
+ backs the virtual Ethernet adapter. Depending on the type of the Portgroup,
the port may be specified using this field. If the portgroup type is early-binding
(also known as static), a port is assigned when the Ethernet adapter is
configured to use the port. The port may be either automatically or specifically
assigned based on the value of this field. If the portgroup type is ephemeral,
the port is created and assigned to a virtual machine when it is powered
- on and the Ethernet adapter is connected. This field cannot be specified
- as no free ports exist before use. ([''present''])'
+ on and the Ethernet adapter is connected. This field cannot be specified
+ as no free ports exist before use.'
+ - May be used to specify a port when the network specified on the I(network)
+ field is a static or early binding distributed portgroup. If unset, the
+ port will be automatically assigned to the Ethernet adapter based on the
+ policy embodied by the portgroup type. (['present'])
type: dict
label:
description:
@@ -50,8 +58,12 @@ options:
type: str
mac_address:
description:
- - MAC address. This field may be modified at any time, and changes will be
- applied the next time the virtual machine is powered on.
+ - 'MAC address. '
+ - ' This field may be modified at any time, and changes will be applied the
+ next time the virtual machine is powered on.'
+ - ''
+ - If unset, the value is unchanged. Must be specified if I(mac_type) is MANUAL.
+ Must be unset if the MAC address type is not MANUAL.
type: str
mac_type:
choices:
@@ -59,19 +71,22 @@ options:
- GENERATED
- MANUAL
description:
- - The C(mac_address_type) defines the valid MAC address origins for a virtual
- Ethernet adapter.
+ - The I(mac_address_type) enumerated type defines the valid MAC address origins
+ for a virtual Ethernet adapter.
type: str
nic:
description:
- - Virtual Ethernet adapter identifier. Required with I(state=['absent', 'connect',
- 'disconnect', 'present'])
+ - Virtual Ethernet adapter identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_hardware_ethernet).
+ Required with I(state=['absent', 'connect', 'disconnect', 'present'])
type: str
pci_slot_number:
description:
- - Address of the virtual Ethernet adapter on the PCI bus. If the PCI address
+ - Address of the virtual Ethernet adapter on the PCI bus. If the PCI address
is invalid, the server will change when it the VM is started or as the
device is hot added.
+ - If unset, the server will choose an available address when the virtual machine
+ is powered on.
type: int
session_timeout:
description:
@@ -85,6 +100,7 @@ options:
description:
- Flag indicating whether the virtual device should be connected whenever
the virtual machine is powered on.
+ - If unset, the value is unchanged.
type: bool
state:
choices:
@@ -104,15 +120,18 @@ options:
- VMXNET2
- VMXNET3
description:
- - The C(emulation_type) defines the valid emulation types for a virtual Ethernet
- adapter.
+ - The I(emulation_type) enumerated type defines the valid emulation types
+ for a virtual Ethernet adapter.
type: str
upt_compatibility_enabled:
description:
- - Flag indicating whether Universal Pass-Through (UPT) compatibility should
- be enabled on this virtual Ethernet adapter. This field may be modified
- at any time, and changes will be applied the next time the virtual machine
- is powered on.
+ - 'Flag indicating whether Universal Pass-Through (UPT) compatibility should
+ be enabled on this virtual Ethernet adapter. '
+ - ' This field may be modified at any time, and changes will be applied the
+ next time the virtual machine is powered on.'
+ - ''
+ - If unset, the value is unchanged. Must be unset if the emulation type of
+ the virtual Ethernet adapter is not VMXNET3.
type: bool
vcenter_hostname:
description:
@@ -153,24 +172,29 @@ options:
type: bool
vm:
description:
- - Virtual machine identifier. This parameter is mandatory.
+ - Virtual machine identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ This parameter is mandatory.
required: true
type: str
wake_on_lan_enabled:
description:
- - Flag indicating whether wake-on-LAN shoud be enabled on this virtual Ethernet
- adapter. This field may be modified at any time, and changes will be applied
- the next time the virtual machine is powered on.
+ - 'Flag indicating whether wake-on-LAN shoud be enabled on this virtual Ethernet
+ adapter. '
+ - ' This field may be modified at any time, and changes will be applied the
+ next time the virtual machine is powered on.'
+ - ''
+ - If unset, the value is unchanged.
type: bool
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -281,6 +305,8 @@ value:
# This structure describes the format of the data expected by the end-points
PAYLOAD_FORMAT = {
+ "connect": {"query": {}, "body": {}, "path": {"nic": "nic", "vm": "vm"}},
+ "disconnect": {"query": {}, "body": {}, "path": {"nic": "nic", "vm": "vm"}},
"update": {
"query": {},
"body": {
@@ -310,12 +336,8 @@ PAYLOAD_FORMAT = {
"path": {"vm": "vm"},
},
"delete": {"query": {}, "body": {}, "path": {"nic": "nic", "vm": "vm"}},
- "disconnect": {"query": {}, "body": {}, "path": {"nic": "nic", "vm": "vm"}},
- "connect": {"query": {}, "body": {}, "path": {"nic": "nic", "vm": "vm"}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -330,26 +352,28 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -437,7 +461,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
@@ -481,20 +504,16 @@ async def _connect(params, session):
async def _create(params, session):
-
lookup_url = per_id_url = build_url(params)
uniquity_keys = ["nic"]
comp_func = None
async def lookup_with_filters(params, session, url):
- # e.g: for the datacenter resources
- if "folder" not in params:
- return
+ search_filter = ""
+
if "name" not in params:
return
- async with session.get(
- f"{url}?names={params['name']}&folders={params['folder']}"
- ) as resp:
+ async with session.get(f"{url}?names={params['name']}{search_filter}") as resp:
_json = await resp.json()
if isinstance(_json, list) and len(_json) == 1:
return await get_device_info(session, url, _json[0]["nic"])
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_ethernet_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_ethernet_info.py
index d0764425e..c474552f8 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_ethernet_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_ethernet_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -21,7 +18,9 @@ options:
type: str
nic:
description:
- - Virtual Ethernet adapter identifier. Required with I(state=['get'])
+ - Virtual Ethernet adapter identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_hardware_ethernet).
+ Required with I(state=['get'])
type: str
session_timeout:
description:
@@ -70,18 +69,20 @@ options:
type: bool
vm:
description:
- - Virtual machine identifier. This parameter is mandatory.
+ - Virtual machine identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ This parameter is mandatory.
required: true
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -122,8 +123,6 @@ PAYLOAD_FORMAT = {
"list": {"query": {}, "body": {}, "path": {"vm": "vm"}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -141,23 +140,23 @@ from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest imp
build_full_device_list,
exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_floppy.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_floppy.py
index 98e04233a..41d9f6177 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_floppy.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_floppy.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -18,27 +15,35 @@ options:
allow_guest_control:
description:
- Flag indicating whether the guest can connect and disconnect the device.
+ - If unset, the value is unchanged.
type: bool
backing:
description:
- - Physical resource backing for the virtual floppy drive. Required with I(state=['present'])
+ - Physical resource backing for the virtual floppy drive.
+ - If unset, defaults to automatic detection of a suitable host device. Required
+ with I(state=['present'])
- 'Valid attributes are:'
- - ' - C(type) (str): The C(backing_type) defines the valid backing types for
- a virtual floppy drive. ([''present''])'
+ - ' - C(type) (str): This option defines the valid backing types for a virtual
+ floppy drive. ([''present''])'
- ' This key is required with [''present''].'
- ' - Accepted values:'
- ' - CLIENT_DEVICE'
- ' - HOST_DEVICE'
- ' - IMAGE_FILE'
- ' - C(image_file) (str): Path of the image file that should be used as the
- virtual floppy drive backing. ([''present''])'
+ virtual floppy drive backing.'
+ - This field is optional and it is only relevant when the value of I(type)
+ is IMAGE_FILE. (['present'])
- ' - C(host_device) (str): Name of the device that should be used as the
- virtual floppy drive backing. ([''present''])'
+ virtual floppy drive backing.'
+ - If unset, the virtual floppy drive will be configured to automatically detect
+ a suitable host device. (['present'])
type: dict
floppy:
description:
- - Virtual floppy drive identifier. Required with I(state=['absent', 'connect',
- 'disconnect', 'present'])
+ - Virtual floppy drive identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_hardware_floppy).
+ Required with I(state=['absent', 'connect', 'disconnect', 'present'])
type: str
label:
description:
@@ -56,6 +61,7 @@ options:
description:
- Flag indicating whether the virtual device should be connected whenever
the virtual machine is powered on.
+ - If unset, the value is unchanged.
type: bool
state:
choices:
@@ -105,18 +111,20 @@ options:
type: bool
vm:
description:
- - Virtual machine identifier. This parameter is mandatory.
+ - Virtual machine identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ This parameter is mandatory.
required: true
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -169,6 +177,8 @@ value:
# This structure describes the format of the data expected by the end-points
PAYLOAD_FORMAT = {
+ "connect": {"query": {}, "body": {}, "path": {"floppy": "floppy", "vm": "vm"}},
+ "disconnect": {"query": {}, "body": {}, "path": {"floppy": "floppy", "vm": "vm"}},
"update": {
"query": {},
"body": {
@@ -188,12 +198,8 @@ PAYLOAD_FORMAT = {
"path": {"vm": "vm"},
},
"delete": {"query": {}, "body": {}, "path": {"floppy": "floppy", "vm": "vm"}},
- "disconnect": {"query": {}, "body": {}, "path": {"floppy": "floppy", "vm": "vm"}},
- "connect": {"query": {}, "body": {}, "path": {"floppy": "floppy", "vm": "vm"}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -208,26 +214,28 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -303,7 +311,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
@@ -347,20 +354,16 @@ async def _connect(params, session):
async def _create(params, session):
-
lookup_url = per_id_url = build_url(params)
uniquity_keys = ["floppy"]
comp_func = None
async def lookup_with_filters(params, session, url):
- # e.g: for the datacenter resources
- if "folder" not in params:
- return
+ search_filter = ""
+
if "name" not in params:
return
- async with session.get(
- f"{url}?names={params['name']}&folders={params['folder']}"
- ) as resp:
+ async with session.get(f"{url}?names={params['name']}{search_filter}") as resp:
_json = await resp.json()
if isinstance(_json, list) and len(_json) == 1:
return await get_device_info(session, url, _json[0]["floppy"])
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_floppy_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_floppy_info.py
index 221083299..b5833071a 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_floppy_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_floppy_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -17,7 +14,9 @@ description: Returns information about a virtual floppy drive.
options:
floppy:
description:
- - Virtual floppy drive identifier. Required with I(state=['get'])
+ - Virtual floppy drive identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_hardware_floppy).
+ Required with I(state=['get'])
type: str
label:
description:
@@ -70,18 +69,20 @@ options:
type: bool
vm:
description:
- - Virtual machine identifier. This parameter is mandatory.
+ - Virtual machine identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ This parameter is mandatory.
required: true
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -117,8 +118,6 @@ PAYLOAD_FORMAT = {
"list": {"query": {}, "body": {}, "path": {"vm": "vm"}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -136,23 +135,23 @@ from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest imp
build_full_device_list,
exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_info.py
index 96cd40fd8..54fb4e5b6 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -62,17 +59,19 @@ options:
type: bool
vm:
description:
- - Virtual machine identifier. Required with I(state=['get'])
+ - Virtual machine identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ Required with I(state=['get'])
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -105,8 +104,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {"vm": "vm"}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -121,26 +118,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_memory.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_memory.py
index 912c3604c..ce91b03db 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_memory.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_memory.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -17,11 +14,16 @@ description: Updates the memory-related settings of a virtual machine.
options:
hot_add_enabled:
description:
- - Flag indicating whether adding memory while the virtual machine is running
- should be enabled. Some guest operating systems may consume more resources
- or perform less efficiently when they run on hardware that supports adding
- memory while the machine is running. This field may only be modified if
- the virtual machine is not powered on.
+ - 'Flag indicating whether adding memory while the virtual machine is running
+ should be enabled. '
+ - ' Some guest operating systems may consume more resources or perform less
+ efficiently when they run on hardware that supports adding memory while
+ the machine is running. '
+ - ''
+ - ' This field may only be modified if the virtual machine is not powered
+ on.'
+ - ''
+ - If unset, the value is unchanged.
type: bool
session_timeout:
description:
@@ -33,12 +35,15 @@ options:
version_added: 2.1.0
size_MiB:
description:
- - New memory size in mebibytes. The supported range of memory sizes is constrained
- by the configured guest operating system and virtual hardware version
- of the virtual machine. If the virtual machine is running, this value
- may only be changed if {@link Info#hotAddEnabled} is true, and the new
- memory size must satisfy the constraints specified by {@link Info#hotAddIncrementSizeMiB}
- and {@link Info#hotAddLimitMiB}.
+ - 'New memory size in mebibytes. '
+ - ' The supported range of memory sizes is constrained by the configured guest
+ operating system and virtual hardware version of the virtual machine. '
+ - ''
+ - ' If the virtual machine is running, this value may only be changed if I(hot_add_enabled)
+ is true, and the new memory size must satisfy the constraints specified
+ by I(hot_add_increment_size_mib) and I()'
+ - ''
+ - If unset, the value is unchanged.
type: int
state:
choices:
@@ -85,18 +90,20 @@ options:
type: bool
vm:
description:
- - Virtual machine identifier. This parameter is mandatory.
+ - Virtual machine identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ This parameter is mandatory.
required: true
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -141,8 +148,6 @@ PAYLOAD_FORMAT = {
}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -157,26 +162,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
- gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -249,7 +252,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_memory_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_memory_info.py
index 503f78dd0..0087744db 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_memory_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_memory_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -62,17 +59,19 @@ options:
type: bool
vm:
description:
- - Virtual machine identifier. Required with I(state=['get'])
+ - Virtual machine identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ Required with I(state=['get'])
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -109,8 +108,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {"vm": "vm"}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -125,26 +122,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_parallel.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_parallel.py
index 5bb5559a2..ec7076e2c 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_parallel.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_parallel.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -18,21 +15,28 @@ options:
allow_guest_control:
description:
- Flag indicating whether the guest can connect and disconnect the device.
+ - If unset, the value is unchanged.
type: bool
backing:
description:
- - Physical resource backing for the virtual parallel port. Required with I(state=['present'])
+ - Physical resource backing for the virtual parallel port.
+ - If unset, defaults to automatic detection of a suitable host device. Required
+ with I(state=['present'])
- 'Valid attributes are:'
- - ' - C(type) (str): The C(backing_type) defines the valid backing types for
- a virtual parallel port. ([''present''])'
+ - ' - C(type) (str): This option defines the valid backing types for a virtual
+ parallel port. ([''present''])'
- ' This key is required with [''present''].'
- ' - Accepted values:'
- ' - FILE'
- ' - HOST_DEVICE'
- ' - C(file) (str): Path of the file that should be used as the virtual parallel
- port backing. ([''present''])'
+ port backing.'
+ - This field is optional and it is only relevant when the value of I(type)
+ is FILE. (['present'])
- ' - C(host_device) (str): Name of the device that should be used as the
- virtual parallel port backing. ([''present''])'
+ virtual parallel port backing.'
+ - If unset, the virtual parallel port will be configured to automatically
+ detect a suitable host device. (['present'])
type: dict
label:
description:
@@ -40,8 +44,9 @@ options:
type: str
port:
description:
- - Virtual parallel port identifier. Required with I(state=['absent', 'connect',
- 'disconnect', 'present'])
+ - Virtual parallel port identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_hardware_parallel).
+ Required with I(state=['absent', 'connect', 'disconnect', 'present'])
type: str
session_timeout:
description:
@@ -55,6 +60,7 @@ options:
description:
- Flag indicating whether the virtual device should be connected whenever
the virtual machine is powered on.
+ - If unset, the value is unchanged.
type: bool
state:
choices:
@@ -104,18 +110,20 @@ options:
type: bool
vm:
description:
- - Virtual machine identifier. This parameter is mandatory.
+ - Virtual machine identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ This parameter is mandatory.
required: true
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -161,6 +169,8 @@ value:
# This structure describes the format of the data expected by the end-points
PAYLOAD_FORMAT = {
+ "connect": {"query": {}, "body": {}, "path": {"port": "port", "vm": "vm"}},
+ "disconnect": {"query": {}, "body": {}, "path": {"port": "port", "vm": "vm"}},
"update": {
"query": {},
"body": {
@@ -180,12 +190,8 @@ PAYLOAD_FORMAT = {
"path": {"vm": "vm"},
},
"delete": {"query": {}, "body": {}, "path": {"port": "port", "vm": "vm"}},
- "disconnect": {"query": {}, "body": {}, "path": {"port": "port", "vm": "vm"}},
- "connect": {"query": {}, "body": {}, "path": {"port": "port", "vm": "vm"}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -200,26 +206,28 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -295,7 +303,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
@@ -339,20 +346,16 @@ async def _connect(params, session):
async def _create(params, session):
-
lookup_url = per_id_url = build_url(params)
uniquity_keys = ["port"]
comp_func = None
async def lookup_with_filters(params, session, url):
- # e.g: for the datacenter resources
- if "folder" not in params:
- return
+ search_filter = ""
+
if "name" not in params:
return
- async with session.get(
- f"{url}?names={params['name']}&folders={params['folder']}"
- ) as resp:
+ async with session.get(f"{url}?names={params['name']}{search_filter}") as resp:
_json = await resp.json()
if isinstance(_json, list) and len(_json) == 1:
return await get_device_info(session, url, _json[0]["port"])
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_parallel_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_parallel_info.py
index b8f3457ab..d2d2f7f37 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_parallel_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_parallel_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -21,7 +18,9 @@ options:
type: str
port:
description:
- - Virtual parallel port identifier. Required with I(state=['get'])
+ - Virtual parallel port identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_hardware_parallel).
+ Required with I(state=['get'])
type: str
session_timeout:
description:
@@ -70,18 +69,20 @@ options:
type: bool
vm:
description:
- - Virtual machine identifier. This parameter is mandatory.
+ - Virtual machine identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ This parameter is mandatory.
required: true
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -117,8 +118,6 @@ PAYLOAD_FORMAT = {
"list": {"query": {}, "body": {}, "path": {"vm": "vm"}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -136,23 +135,23 @@ from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest imp
build_full_device_list,
exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_serial.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_serial.py
index 0d953a6c6..3da5807bd 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_serial.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_serial.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -18,13 +15,16 @@ options:
allow_guest_control:
description:
- Flag indicating whether the guest can connect and disconnect the device.
+ - If unset, the value is unchanged.
type: bool
backing:
description:
- - Physical resource backing for the virtual serial port. Required with I(state=['present'])
+ - Physical resource backing for the virtual serial port.
+ - If unset, defaults to automatic detection of a suitable host device. Required
+ with I(state=['present'])
- 'Valid attributes are:'
- - ' - C(type) (str): The C(backing_type) defines the valid backing types for
- a virtual serial port. ([''present''])'
+ - ' - C(type) (str): This option defines the valid backing types for a virtual
+ serial port. ([''present''])'
- ' This key is required with [''present''].'
- ' - Accepted values:'
- ' - FILE'
@@ -33,25 +33,38 @@ options:
- ' - NETWORK_SERVER'
- ' - PIPE_CLIENT'
- ' - PIPE_SERVER'
- - ' - C(file) (str): Path of the file backing the virtual serial port. ([''present''])'
+ - ' - C(file) (str): Path of the file backing the virtual serial port.'
+ - This field is optional and it is only relevant when the value of I(type)
+ is FILE. (['present'])
- ' - C(host_device) (str): Name of the device backing the virtual serial
- port. ([''present''])'
- - ' - C(pipe) (str): Name of the pipe backing the virtual serial port. ([''present''])'
+ port. '
+ - ''
+ - ''
+ - If unset, the virtual serial port will be configured to automatically detect
+ a suitable host device. (['present'])
+ - ' - C(pipe) (str): Name of the pipe backing the virtual serial port.'
+ - This field is optional and it is only relevant when the value of I(type)
+ is one of PIPE_SERVER or PIPE_CLIENT. (['present'])
- ' - C(no_rx_loss) (bool): Flag that enables optimized data transfer over
the pipe. When the value is true, the host buffers data to prevent data
- overrun. This allows the virtual machine to read all of the data transferred
- over the pipe with no data loss. ([''present''])'
+ overrun. This allows the virtual machine to read all of the data transferred
+ over the pipe with no data loss.'
+ - If unset, defaults to false. (['present'])
- ' - C(network_location) (str): URI specifying the location of the network
- service backing the virtual serial port. <ul> <li>If {@link #type} is
- {@link BackingType#NETWORK_SERVER}, this field is the location used by
- clients to connect to this server. The hostname part of the URI should
- either be empty or should specify the address of the host on which the
- virtual machine is running.</li> <li>If {@link #type} is {@link BackingType#NETWORK_CLIENT},
- this field is the location used by the virtual machine to connect to the
- remote server.</li> </ul> ([''present''])'
+ service backing the virtual serial port. '
+ - ' - If I(type) is NETWORK_SERVER, this field is the location used by clients
+ to connect to this server. The hostname part of the URI should either
+ be empty or should specify the address of the host on which the virtual
+ machine is running.'
+ - ' - If I(type) is NETWORK_CLIENT, this field is the location used by the
+ virtual machine to connect to the remote server.'
+ - ' '
+ - This field is optional and it is only relevant when the value of I(type)
+ is one of NETWORK_SERVER or NETWORK_CLIENT. (['present'])
- ' - C(proxy) (str): Proxy service that provides network access to the network
- backing. If set, the virtual machine initiates a connection with the
- proxy service and forwards the traffic to the proxy. ([''present''])'
+ backing. If set, the virtual machine initiates a connection with the proxy
+ service and forwards the traffic to the proxy.'
+ - If unset, no proxy service should be used. (['present'])
type: dict
label:
description:
@@ -59,8 +72,9 @@ options:
type: str
port:
description:
- - Virtual serial port identifier. Required with I(state=['absent', 'connect',
- 'disconnect', 'present'])
+ - Virtual serial port identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_hardware_serial).
+ Required with I(state=['absent', 'connect', 'disconnect', 'present'])
type: str
session_timeout:
description:
@@ -74,6 +88,7 @@ options:
description:
- Flag indicating whether the virtual device should be connected whenever
the virtual machine is powered on.
+ - If unset, the value is unchanged.
type: bool
state:
choices:
@@ -123,27 +138,31 @@ options:
type: bool
vm:
description:
- - Virtual machine identifier. This parameter is mandatory.
+ - Virtual machine identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ This parameter is mandatory.
required: true
type: str
yield_on_poll:
description:
- - CPU yield behavior. If set to true, the virtual machine will periodically
+ - 'CPU yield behavior. If set to true, the virtual machine will periodically
relinquish the processor if its sole task is polling the virtual serial
port. The amount of time it takes to regain the processor will depend
- on the degree of other virtual machine activity on the host. This field
- may be modified at any time, and changes applied to a connected virtual
- serial port take effect immediately.
+ on the degree of other virtual machine activity on the host. '
+ - ' This field may be modified at any time, and changes applied to a connected
+ virtual serial port take effect immediately.'
+ - ''
+ - If unset, the value is unchanged.
type: bool
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -225,6 +244,8 @@ value:
# This structure describes the format of the data expected by the end-points
PAYLOAD_FORMAT = {
+ "connect": {"query": {}, "body": {}, "path": {"port": "port", "vm": "vm"}},
+ "disconnect": {"query": {}, "body": {}, "path": {"port": "port", "vm": "vm"}},
"update": {
"query": {},
"body": {
@@ -246,12 +267,8 @@ PAYLOAD_FORMAT = {
"path": {"vm": "vm"},
},
"delete": {"query": {}, "body": {}, "path": {"port": "port", "vm": "vm"}},
- "disconnect": {"query": {}, "body": {}, "path": {"port": "port", "vm": "vm"}},
- "connect": {"query": {}, "body": {}, "path": {"port": "port", "vm": "vm"}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -266,26 +283,28 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -362,7 +381,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
@@ -406,20 +424,16 @@ async def _connect(params, session):
async def _create(params, session):
-
lookup_url = per_id_url = build_url(params)
uniquity_keys = ["port"]
comp_func = None
async def lookup_with_filters(params, session, url):
- # e.g: for the datacenter resources
- if "folder" not in params:
- return
+ search_filter = ""
+
if "name" not in params:
return
- async with session.get(
- f"{url}?names={params['name']}&folders={params['folder']}"
- ) as resp:
+ async with session.get(f"{url}?names={params['name']}{search_filter}") as resp:
_json = await resp.json()
if isinstance(_json, list) and len(_json) == 1:
return await get_device_info(session, url, _json[0]["port"])
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_serial_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_serial_info.py
index f79e9e8f3..1f7357f6d 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_serial_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_serial_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -21,7 +18,9 @@ options:
type: str
port:
description:
- - Virtual serial port identifier. Required with I(state=['get'])
+ - Virtual serial port identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_hardware_serial).
+ Required with I(state=['get'])
type: str
session_timeout:
description:
@@ -70,18 +69,20 @@ options:
type: bool
vm:
description:
- - Virtual machine identifier. This parameter is mandatory.
+ - Virtual machine identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ This parameter is mandatory.
required: true
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -137,8 +138,6 @@ PAYLOAD_FORMAT = {
"list": {"query": {}, "body": {}, "path": {"vm": "vm"}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -156,23 +155,23 @@ from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest imp
build_full_device_list,
exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_info.py
index 464b5cad8..145e169f2 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -19,6 +16,9 @@ options:
description:
- Clusters that must contain the virtual machine for the virtual machine to
match the filter.
+ - If unset or empty, virtual machines in any cluster match the filter.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_cluster_info).
elements: str
type: list
datacenters:
@@ -27,6 +27,9 @@ options:
description:
- Datacenters that must contain the virtual machine for the virtual machine
to match the filter.
+ - If unset or empty, virtual machines in any datacenter match the filter.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_datacenter_info).
elements: str
type: list
folders:
@@ -35,31 +38,42 @@ options:
description:
- Folders that must contain the virtual machine for the virtual machine to
match the filter.
+ - If unset or empty, virtual machines in any folder match the filter.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_folder_info).
elements: str
type: list
hosts:
description:
- Hosts that must contain the virtual machine for the virtual machine to match
the filter.
+ - If unset or empty, virtual machines on any host match the filter.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_host_info).
elements: str
type: list
names:
aliases:
- filter_names
description:
- - Names that virtual machines must have to match the filter (see {@link Info#name}).
+ - Names that virtual machines must have to match the filter (see I(name)).
+ - If unset or empty, virtual machines with any name match the filter.
elements: str
type: list
power_states:
description:
- Power states that a virtual machine must be in to match the filter (see
- {@link I(info)#state}.
+ I()
+ - If unset or empty, virtual machines in any power state match the filter.
elements: str
type: list
resource_pools:
description:
- Resource pools that must contain the virtual machine for the virtual machine
to match the filter.
+ - If unset or empty, virtual machines in any resource pool match the filter.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_resourcepool_info).
elements: str
type: list
session_timeout:
@@ -109,22 +123,27 @@ options:
type: bool
vm:
description:
- - Virtual machine identifier. Required with I(state=['get'])
+ - Virtual machine identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ Required with I(state=['get'])
type: str
vms:
description:
- Identifiers of virtual machines that can match the filter.
+ - If unset or empty, virtual machines with any identifier match the filter.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_vm_info).
elements: str
type: list
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -310,8 +329,6 @@ PAYLOAD_FORMAT = {
},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -329,23 +346,23 @@ from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest imp
build_full_device_list,
exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_libraryitem_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_libraryitem_info.py
index 9a70f5f2d..2b3f20537 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_libraryitem_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_libraryitem_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -64,17 +61,19 @@ options:
type: bool
vm:
description:
- - Identifier of the virtual machine. Required with I(state=['get'])
+ - Identifier of the virtual machine.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ Required with I(state=['get'])
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -109,8 +108,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {"vm": "vm"}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -125,26 +122,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_power.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_power.py
index 27139045d..5007a07f3 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_power.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_power.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -74,14 +71,16 @@ options:
type: bool
vm:
description:
- - Virtual machine identifier. This parameter is mandatory.
+ - Virtual machine identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ This parameter is mandatory.
required: true
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
seealso:
@@ -89,7 +88,7 @@ seealso:
a soft shutdown, standby (suspend) or soft reboot
module: vmware.vmware_rest.vcenter_vm_guest_power
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -232,14 +231,12 @@ results:
# This structure describes the format of the data expected by the end-points
PAYLOAD_FORMAT = {
- "suspend": {"query": {}, "body": {}, "path": {"vm": "vm"}},
"reset": {"query": {}, "body": {}, "path": {"vm": "vm"}},
- "stop": {"query": {}, "body": {}, "path": {"vm": "vm"}},
"start": {"query": {}, "body": {}, "path": {"vm": "vm"}},
+ "stop": {"query": {}, "body": {}, "path": {"vm": "vm"}},
+ "suspend": {"query": {}, "body": {}, "path": {"vm": "vm"}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -254,26 +251,27 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
- get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -342,7 +340,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_power_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_power_info.py
index a482d8cf2..2e05118f9 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_power_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_power_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -62,17 +59,19 @@ options:
type: bool
vm:
description:
- - Virtual machine identifier. Required with I(state=['get'])
+ - Virtual machine identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ Required with I(state=['get'])
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -108,8 +107,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {"vm": "vm"}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -124,26 +121,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_storage_policy.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_storage_policy.py
index 63659925e..bdeaac92d 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_storage_policy.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_storage_policy.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -21,6 +18,9 @@ options:
description:
- Storage policy or policies to be used when reconfiguring virtual machine
diks.
+ - if unset the current storage policy is retained.
+ - 'When clients pass a value of this structure as a parameter, the key in
+ the field map must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_hardware_disk). '
type: dict
session_timeout:
description:
@@ -75,33 +75,39 @@ options:
type: bool
vm:
description:
- - Virtual machine identifier. This parameter is mandatory.
+ - Virtual machine identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ This parameter is mandatory.
required: true
type: str
vm_home:
description:
- - Storage policy to be used when reconfiguring the virtual machine home. This
- parameter is mandatory.
+ - Storage policy to be used when reconfiguring the virtual machine home.
+ - if unset the current storage policy is retained. This parameter is mandatory.
- 'Valid attributes are:'
- - ' - C(type) (str): The C(policy_type) defines the choices for how to specify
- the policy to be associated with the virtual machine home''s directory.
- ([''present''])'
+ - ' - C(type) (str): This option defines the choices for how to specify the
+ policy to be associated with the virtual machine home''s directory. ([''present''])'
- ' This key is required with [''present''].'
- ' - Accepted values:'
- ' - USE_DEFAULT_POLICY'
- ' - USE_SPECIFIED_POLICY'
- - ' - C(policy) (str): Storage Policy identification. ([''present''])'
+ - ' - C(policy) (str): Storage Policy identification.'
+ - This field is optional and it is only relevant when the value of I(type)
+ is USE_SPECIFIED_POLICY.
+ - When clients pass a value of this structure as a parameter, the field must
+ be the id of a resource returned by M(vmware.vmware_rest.vcenter_storage_policies).
+ (['present'])
required: true
type: dict
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -152,8 +158,6 @@ PAYLOAD_FORMAT = {
}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -168,26 +172,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
- gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -260,7 +262,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_storage_policy_compliance.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_storage_policy_compliance.py
index 081417e81..9ef117d64 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_storage_policy_compliance.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_storage_policy_compliance.py
@@ -3,24 +3,24 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
module: vcenter_vm_storage_policy_compliance
-short_description: Returns the storage policy Compliance {@link Info} of a virtual
+short_description: Returns the storage policy Compliance Compliance.Info of a virtual
machine after explicitly re-computing compliance check.
-description: Returns the storage policy Compliance {@link Info} of a virtual machine
+description: Returns the storage policy Compliance Compliance.Info of a virtual machine
after explicitly re-computing compliance check.
options:
disks:
description:
- Identifiers of the virtual machine's virtual disks for which compliance
should be checked.
+ - If unset or empty, compliance check is invoked on all the associated disks.
+ - When clients pass a value of this structure as a parameter, the field must
+ contain the id of resources returned by M(vmware.vmware_rest.vcenter_vm_hardware_disk).
elements: str
type: list
session_timeout:
@@ -76,7 +76,9 @@ options:
type: bool
vm:
description:
- - Virtual machine identifier. This parameter is mandatory.
+ - Virtual machine identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ This parameter is mandatory.
required: true
type: str
vm_home:
@@ -89,11 +91,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -111,8 +113,6 @@ PAYLOAD_FORMAT = {
}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -127,26 +127,27 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
- get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -215,7 +216,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_storage_policy_compliance_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_storage_policy_compliance_info.py
index fa6f4e1c3..70d371fcd 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_storage_policy_compliance_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_storage_policy_compliance_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -64,17 +61,19 @@ options:
type: bool
vm:
description:
- - Virtual machine identifier. Required with I(state=['get'])
+ - Virtual machine identifier.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ Required with I(state=['get'])
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -116,8 +115,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {"vm": "vm"}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -132,26 +129,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_storage_policy_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_storage_policy_info.py
index 94ead680c..131fa709d 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_storage_policy_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_storage_policy_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -64,17 +61,19 @@ options:
type: bool
vm:
description:
- - Virtual machine identifier Required with I(state=['get'])
+ - Virtual machine identifier
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ Required with I(state=['get'])
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -110,8 +109,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {"vm": "vm"}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -126,26 +123,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_tools.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_tools.py
index 464f83f43..cc7b59b25 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_tools.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_tools.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -19,6 +16,7 @@ options:
description:
- Command line options passed to the installer to modify the installation
procedure for Tools.
+ - Set if any additional options are desired.
type: str
session_timeout:
description:
@@ -40,8 +38,8 @@ options:
- MANUAL
- UPGRADE_AT_POWER_CYCLE
description:
- - The C(upgrade_policy) defines when Tools are auto-upgraded for a virtual
- machine.
+ - The I(upgrade_policy) enumerated type defines when Tools are auto-upgraded
+ for a virtual machine.
type: str
vcenter_hostname:
description:
@@ -82,18 +80,20 @@ options:
type: bool
vm:
description:
- - Identifier of the virtual machine. This parameter is mandatory.
+ - Identifier of the virtual machine.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ This parameter is mandatory.
required: true
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -162,8 +162,6 @@ PAYLOAD_FORMAT = {
},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -178,26 +176,27 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
- get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -271,7 +270,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_tools_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_tools_info.py
index ff87ed923..f1a2f202b 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_tools_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_tools_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -62,17 +59,19 @@ options:
type: bool
vm:
description:
- - Identifier of the virtual machine. Required with I(state=['get'])
+ - Identifier of the virtual machine.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ Required with I(state=['get'])
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -173,8 +172,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {"vm": "vm"}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -189,26 +186,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_tools_installer.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_tools_installer.py
index e42fe66f7..376ce6e31 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_tools_installer.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_tools_installer.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -18,10 +15,10 @@ description: Connects the VMware Tools CD installer as a CD-ROM for the guest op
system. On Windows guest operating systems with autorun, this should cause the
installer to initiate the Tools installation which will need user input to complete.
On other (non-Windows) guest operating systems this will make the Tools installation
- available, and a a user will need to do guest-specific actions. On Linux, this
+ available, and a a user will need to do guest-specific actions. On Linux, this
includes opening an archive and running the installer. To monitor the status of
- the Tools install, clients should check the {@name vcenter.vm.Tools.Info#versionStatus}
- and {@name vcenter.vm.Tools.Info#runState} from {@link vcenter.vm.Tools#get}
+ the Tools install, clients should check the Tools.Info.version-status and Tools.Info.run-state
+ from Tools.get
options:
session_timeout:
description:
@@ -77,18 +74,20 @@ options:
type: bool
vm:
description:
- - Virtual machine ID This parameter is mandatory.
+ - Virtual machine ID
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ This parameter is mandatory.
required: true
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -142,12 +141,10 @@ value:
# This structure describes the format of the data expected by the end-points
PAYLOAD_FORMAT = {
- "disconnect": {"query": {}, "body": {}, "path": {"vm": "vm"}},
"connect": {"query": {}, "body": {}, "path": {"vm": "vm"}},
+ "disconnect": {"query": {}, "body": {}, "path": {"vm": "vm"}},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -162,26 +159,27 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
- get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -252,7 +250,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_tools_installer_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_tools_installer_info.py
index 37401ebef..c88b22c95 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_tools_installer_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_tools_installer_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -62,17 +59,19 @@ options:
type: bool
vm:
description:
- - Identifier of the virtual machine. Required with I(state=['get'])
+ - Identifier of the virtual machine.
+ - The parameter must be the id of a resource returned by M(vmware.vmware_rest.vcenter_vm_info).
+ Required with I(state=['get'])
type: str
author:
- Ansible Cloud Team (@ansible-collections)
version_added: 0.1.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -129,8 +128,6 @@ PAYLOAD_FORMAT = {
"get": {"query": {}, "body": {}, "path": {"vm": "vm"}}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -145,26 +142,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vmtemplate_libraryitems.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vmtemplate_libraryitems.py
index c2ced6ab7..0eb18f625 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vmtemplate_libraryitems.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vmtemplate_libraryitems.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -186,11 +183,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.2.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -312,39 +309,37 @@ value:
# This structure describes the format of the data expected by the end-points
PAYLOAD_FORMAT = {
- "create": {
+ "deploy": {
"query": {},
"body": {
"description": "description",
"disk_storage": "disk_storage",
"disk_storage_overrides": "disk_storage_overrides",
- "library": "library",
+ "guest_customization": "guest_customization",
+ "hardware_customization": "hardware_customization",
"name": "name",
"placement": "placement",
- "source_vm": "source_vm",
+ "powered_on": "powered_on",
"vm_home_storage": "vm_home_storage",
},
- "path": {},
+ "path": {"template_library_item": "template_library_item"},
},
- "deploy": {
+ "create": {
"query": {},
"body": {
"description": "description",
"disk_storage": "disk_storage",
"disk_storage_overrides": "disk_storage_overrides",
- "guest_customization": "guest_customization",
- "hardware_customization": "hardware_customization",
+ "library": "library",
"name": "name",
"placement": "placement",
- "powered_on": "powered_on",
+ "source_vm": "source_vm",
"vm_home_storage": "vm_home_storage",
},
- "path": {"template_library_item": "template_library_item"},
+ "path": {},
},
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -359,26 +354,28 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
exists,
gen_args,
get_device_info,
get_subdevice_type,
- list_devices,
open_session,
prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
@@ -460,7 +457,6 @@ def build_url(params):
async def entry_point(module, session):
-
if module.params["state"] == "present":
if "_create" in globals():
operation = "create"
@@ -477,7 +473,6 @@ async def entry_point(module, session):
async def _create(params, session):
-
lookup_url = "https://{vcenter_hostname}/api/content/library/item?library_id={library}".format(
**params
)
diff --git a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vmtemplate_libraryitems_info.py b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vmtemplate_libraryitems_info.py
index 70d9bd27e..b5f78c3d1 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vmtemplate_libraryitems_info.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vmtemplate_libraryitems_info.py
@@ -3,11 +3,8 @@
# Copyright: (c) 2021, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# template: header.j2
-# This module is autogenerated by vmware_rest_code_generator.
-# See: https://github.com/ansible-collections/vmware_rest_code_generator
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
+# This module is autogenerated using the ansible.content_builder.
+# See: https://github.com/ansible-community/ansible.content_builder
DOCUMENTATION = r"""
@@ -71,11 +68,11 @@ author:
- Ansible Cloud Team (@ansible-collections)
version_added: 2.2.0
requirements:
-- vSphere 7.0.2 or greater
+- vSphere 7.0.3 or greater
- python >= 3.6
- aiohttp
notes:
-- Tested on vSphere 7.0.2
+- Tested on vSphere 7.0.3
"""
EXAMPLES = r"""
@@ -93,8 +90,6 @@ PAYLOAD_FORMAT = {
}
} # pylint: disable=line-too-long
-import json
-import socket
from ansible.module_utils.basic import env_fallback
try:
@@ -109,26 +104,24 @@ try:
except ImportError:
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- build_full_device_list,
- exists,
gen_args,
- get_device_info,
- get_subdevice_type,
- list_devices,
open_session,
- prepare_payload,
- update_changed_flag,
session_timeout,
+ update_changed_flag,
)
def prepare_argument_spec():
argument_spec = {
"vcenter_hostname": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_HOST"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_HOST"]),
),
"vcenter_username": dict(
- type="str", required=True, fallback=(env_fallback, ["VMWARE_USER"]),
+ type="str",
+ required=True,
+ fallback=(env_fallback, ["VMWARE_USER"]),
),
"vcenter_password": dict(
type="str",
diff --git a/ansible_collections/vmware/vmware_rest/plugins/plugin_utils/lookup.py b/ansible_collections/vmware/vmware_rest/plugins/plugin_utils/lookup.py
index cf3b4e54c..2f0c3eb0b 100644
--- a/ansible_collections/vmware/vmware_rest/plugins/plugin_utils/lookup.py
+++ b/ansible_collections/vmware/vmware_rest/plugins/plugin_utils/lookup.py
@@ -8,21 +8,18 @@ __metaclass__ = type
import asyncio
-import os
import urllib
-from ansible.module_utils._text import to_native
from ansible.errors import AnsibleLookupError
-
+from ansible.module_utils._text import to_native
from ansible_collections.cloud.common.plugins.module_utils.turbo.exceptions import (
EmbeddedModuleFailure,
)
from ansible_collections.vmware.vmware_rest.plugins.module_utils.vmware_rest import (
- open_session,
gen_args,
+ open_session,
)
-
INVENTORY = {
"resource_pool": {
"list": {
@@ -115,47 +112,24 @@ INVENTORY = {
}
-def get_credentials(**options):
- credentials = {}
- credentials["vcenter_hostname"] = options.get("vcenter_hostname") or os.getenv(
- "VMWARE_HOST"
- )
- credentials["vcenter_username"] = options.get("vcenter_username") or os.getenv(
- "VMWARE_USER"
- )
- credentials["vcenter_password"] = options.get("vcenter_password") or os.getenv(
- "VMWARE_PASSWORD"
- )
- credentials["vcenter_validate_certs"] = options.get(
- "vcenter_validate_certs"
- ) or os.getenv("VMWARE_VALIDATE_CERTS")
- credentials["vcenter_rest_log_file"] = options.get(
- "vcenter_rest_log_file"
- ) or os.getenv("VMWARE_REST_LOG_FILE")
- return credentials
-
-
class Lookup:
def __init__(self, options):
self._options = options
@classmethod
async def entry_point(cls, terms, options):
+ if not terms or not terms[0]:
+ raise AnsibleLookupError(
+ "Option _terms is required but no object has been specified"
+ )
session = None
- if not options.get("vcenter_hostname"):
- raise AnsibleLookupError("vcenter_hostname cannot be empty")
- if not options.get("vcenter_username"):
- raise AnsibleLookupError("vcenter_username cannot be empty")
- if not options.get("vcenter_password"):
- raise AnsibleLookupError("vcenter_password cannot be empty")
-
try:
session = await open_session(
- vcenter_hostname=options.get("vcenter_hostname"),
- vcenter_username=options.get("vcenter_username"),
- vcenter_password=options.get("vcenter_password"),
- validate_certs=bool(options.get("vcenter_validate_certs")),
+ vcenter_hostname=options["vcenter_hostname"],
+ vcenter_username=options["vcenter_username"],
+ vcenter_password=options["vcenter_password"],
+ validate_certs=options.get("vcenter_validate_certs"),
log_file=options.get("vcenter_rest_log_file"),
)
except EmbeddedModuleFailure as e:
@@ -166,9 +140,6 @@ class Lookup:
lookup = cls(options)
lookup._options["session"] = session
- if not terms:
- raise AnsibleLookupError("No object has been specified.")
-
task = asyncio.ensure_future(lookup.moid(terms[0]))
return await task
diff --git a/ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.10.txt b/ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.10.txt
deleted file mode 100644
index 3afc028e5..000000000
--- a/ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.10.txt
+++ /dev/null
@@ -1,1357 +0,0 @@
-plugins/modules/vcenter_vm_guest_customization.py pep8!skip
-plugins/modules/appliance_infraprofile_configs.py pep8!skip
-plugins/modules/appliance_vmon_service.py import-2.6!skip
-plugins/modules/appliance_vmon_service.py compile-2.6!skip
-plugins/modules/appliance_vmon_service.py import-2.7!skip
-plugins/modules/appliance_vmon_service.py compile-2.7!skip
-plugins/modules/appliance_vmon_service.py import-3.5!skip
-plugins/modules/appliance_vmon_service.py compile-3.5!skip
-plugins/modules/appliance_vmon_service.py future-import-boilerplate!skip
-plugins/modules/appliance_vmon_service.py metaclass-boilerplate!skip
-plugins/modules/appliance_vmon_service.py validate-modules:missing-if-name-main
-plugins/modules/appliance_vmon_service.py validate-modules:missing-main-call
-plugins/modules/vcenter_host.py import-2.6!skip
-plugins/modules/vcenter_host.py compile-2.6!skip
-plugins/modules/vcenter_host.py import-2.7!skip
-plugins/modules/vcenter_host.py compile-2.7!skip
-plugins/modules/vcenter_host.py import-3.5!skip
-plugins/modules/vcenter_host.py compile-3.5!skip
-plugins/modules/vcenter_host.py future-import-boilerplate!skip
-plugins/modules/vcenter_host.py metaclass-boilerplate!skip
-plugins/modules/vcenter_host.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_host.py validate-modules:missing-main-call
-plugins/modules/appliance_monitoring_info.py import-2.6!skip
-plugins/modules/appliance_monitoring_info.py compile-2.6!skip
-plugins/modules/appliance_monitoring_info.py import-2.7!skip
-plugins/modules/appliance_monitoring_info.py compile-2.7!skip
-plugins/modules/appliance_monitoring_info.py import-3.5!skip
-plugins/modules/appliance_monitoring_info.py compile-3.5!skip
-plugins/modules/appliance_monitoring_info.py future-import-boilerplate!skip
-plugins/modules/appliance_monitoring_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_monitoring_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_monitoring_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_storage_policy_compliance_info.py import-2.6!skip
-plugins/modules/vcenter_vm_storage_policy_compliance_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_storage_policy_compliance_info.py import-2.7!skip
-plugins/modules/vcenter_vm_storage_policy_compliance_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_storage_policy_compliance_info.py import-3.5!skip
-plugins/modules/vcenter_vm_storage_policy_compliance_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_storage_policy_compliance_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_storage_policy_compliance_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_storage_policy_compliance_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_storage_policy_compliance_info.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_info.py import-2.6!skip
-plugins/modules/appliance_networking_info.py compile-2.6!skip
-plugins/modules/appliance_networking_info.py import-2.7!skip
-plugins/modules/appliance_networking_info.py compile-2.7!skip
-plugins/modules/appliance_networking_info.py import-3.5!skip
-plugins/modules/appliance_networking_info.py compile-3.5!skip
-plugins/modules/appliance_networking_info.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_libraryitem_info.py import-2.6!skip
-plugins/modules/vcenter_vm_libraryitem_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_libraryitem_info.py import-2.7!skip
-plugins/modules/vcenter_vm_libraryitem_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_libraryitem_info.py import-3.5!skip
-plugins/modules/vcenter_vm_libraryitem_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_libraryitem_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_libraryitem_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_libraryitem_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_libraryitem_info.py validate-modules:missing-main-call
-plugins/modules/appliance_timesync_info.py import-2.6!skip
-plugins/modules/appliance_timesync_info.py compile-2.6!skip
-plugins/modules/appliance_timesync_info.py import-2.7!skip
-plugins/modules/appliance_timesync_info.py compile-2.7!skip
-plugins/modules/appliance_timesync_info.py import-3.5!skip
-plugins/modules/appliance_timesync_info.py compile-3.5!skip
-plugins/modules/appliance_timesync_info.py future-import-boilerplate!skip
-plugins/modules/appliance_timesync_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_timesync_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_timesync_info.py validate-modules:missing-main-call
-plugins/modules/content_subscribedlibrary_info.py import-2.6!skip
-plugins/modules/content_subscribedlibrary_info.py compile-2.6!skip
-plugins/modules/content_subscribedlibrary_info.py import-2.7!skip
-plugins/modules/content_subscribedlibrary_info.py compile-2.7!skip
-plugins/modules/content_subscribedlibrary_info.py import-3.5!skip
-plugins/modules/content_subscribedlibrary_info.py compile-3.5!skip
-plugins/modules/content_subscribedlibrary_info.py future-import-boilerplate!skip
-plugins/modules/content_subscribedlibrary_info.py metaclass-boilerplate!skip
-plugins/modules/content_subscribedlibrary_info.py validate-modules:missing-if-name-main
-plugins/modules/content_subscribedlibrary_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_datastore_info.py import-2.6!skip
-plugins/modules/vcenter_datastore_info.py compile-2.6!skip
-plugins/modules/vcenter_datastore_info.py import-2.7!skip
-plugins/modules/vcenter_datastore_info.py compile-2.7!skip
-plugins/modules/vcenter_datastore_info.py import-3.5!skip
-plugins/modules/vcenter_datastore_info.py compile-3.5!skip
-plugins/modules/vcenter_datastore_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_datastore_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_datastore_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_datastore_info.py validate-modules:missing-main-call
-plugins/modules/appliance_access_ssh_info.py import-2.6!skip
-plugins/modules/appliance_access_ssh_info.py compile-2.6!skip
-plugins/modules/appliance_access_ssh_info.py import-2.7!skip
-plugins/modules/appliance_access_ssh_info.py compile-2.7!skip
-plugins/modules/appliance_access_ssh_info.py import-3.5!skip
-plugins/modules/appliance_access_ssh_info.py compile-3.5!skip
-plugins/modules/appliance_access_ssh_info.py future-import-boilerplate!skip
-plugins/modules/appliance_access_ssh_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_access_ssh_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_access_ssh_info.py validate-modules:missing-main-call
-plugins/modules/appliance_localaccounts_info.py import-2.6!skip
-plugins/modules/appliance_localaccounts_info.py compile-2.6!skip
-plugins/modules/appliance_localaccounts_info.py import-2.7!skip
-plugins/modules/appliance_localaccounts_info.py compile-2.7!skip
-plugins/modules/appliance_localaccounts_info.py import-3.5!skip
-plugins/modules/appliance_localaccounts_info.py compile-3.5!skip
-plugins/modules/appliance_localaccounts_info.py future-import-boilerplate!skip
-plugins/modules/appliance_localaccounts_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_localaccounts_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_localaccounts_info.py validate-modules:missing-main-call
-plugins/modules/appliance_access_consolecli_info.py import-2.6!skip
-plugins/modules/appliance_access_consolecli_info.py compile-2.6!skip
-plugins/modules/appliance_access_consolecli_info.py import-2.7!skip
-plugins/modules/appliance_access_consolecli_info.py compile-2.7!skip
-plugins/modules/appliance_access_consolecli_info.py import-3.5!skip
-plugins/modules/appliance_access_consolecli_info.py compile-3.5!skip
-plugins/modules/appliance_access_consolecli_info.py future-import-boilerplate!skip
-plugins/modules/appliance_access_consolecli_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_access_consolecli_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_access_consolecli_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_cdrom.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_cdrom.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_cdrom.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_cdrom.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_cdrom.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_cdrom.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_cdrom.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_cdrom.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_cdrom.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_cdrom.py validate-modules:missing-main-call
-plugins/modules/content_locallibrary.py import-2.6!skip
-plugins/modules/content_locallibrary.py compile-2.6!skip
-plugins/modules/content_locallibrary.py import-2.7!skip
-plugins/modules/content_locallibrary.py compile-2.7!skip
-plugins/modules/content_locallibrary.py import-3.5!skip
-plugins/modules/content_locallibrary.py compile-3.5!skip
-plugins/modules/content_locallibrary.py future-import-boilerplate!skip
-plugins/modules/content_locallibrary.py metaclass-boilerplate!skip
-plugins/modules/content_locallibrary.py validate-modules:missing-if-name-main
-plugins/modules/content_locallibrary.py validate-modules:missing-main-call
-plugins/modules/appliance_update_info.py import-2.6!skip
-plugins/modules/appliance_update_info.py compile-2.6!skip
-plugins/modules/appliance_update_info.py import-2.7!skip
-plugins/modules/appliance_update_info.py compile-2.7!skip
-plugins/modules/appliance_update_info.py import-3.5!skip
-plugins/modules/appliance_update_info.py compile-3.5!skip
-plugins/modules/appliance_update_info.py future-import-boilerplate!skip
-plugins/modules/appliance_update_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_update_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_update_info.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_dns_hostname.py import-2.6!skip
-plugins/modules/appliance_networking_dns_hostname.py compile-2.6!skip
-plugins/modules/appliance_networking_dns_hostname.py import-2.7!skip
-plugins/modules/appliance_networking_dns_hostname.py compile-2.7!skip
-plugins/modules/appliance_networking_dns_hostname.py import-3.5!skip
-plugins/modules/appliance_networking_dns_hostname.py compile-3.5!skip
-plugins/modules/appliance_networking_dns_hostname.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_dns_hostname.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_dns_hostname.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_dns_hostname.py validate-modules:missing-main-call
-plugins/modules/appliance_ntp_info.py import-2.6!skip
-plugins/modules/appliance_ntp_info.py compile-2.6!skip
-plugins/modules/appliance_ntp_info.py import-2.7!skip
-plugins/modules/appliance_ntp_info.py compile-2.7!skip
-plugins/modules/appliance_ntp_info.py import-3.5!skip
-plugins/modules/appliance_ntp_info.py compile-3.5!skip
-plugins/modules/appliance_ntp_info.py future-import-boilerplate!skip
-plugins/modules/appliance_ntp_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_ntp_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_ntp_info.py validate-modules:missing-main-call
-plugins/modules/appliance_access_consolecli.py import-2.6!skip
-plugins/modules/appliance_access_consolecli.py compile-2.6!skip
-plugins/modules/appliance_access_consolecli.py import-2.7!skip
-plugins/modules/appliance_access_consolecli.py compile-2.7!skip
-plugins/modules/appliance_access_consolecli.py import-3.5!skip
-plugins/modules/appliance_access_consolecli.py compile-3.5!skip
-plugins/modules/appliance_access_consolecli.py future-import-boilerplate!skip
-plugins/modules/appliance_access_consolecli.py metaclass-boilerplate!skip
-plugins/modules/appliance_access_consolecli.py validate-modules:missing-if-name-main
-plugins/modules/appliance_access_consolecli.py validate-modules:missing-main-call
-plugins/modules/vcenter_datacenter_info.py import-2.6!skip
-plugins/modules/vcenter_datacenter_info.py compile-2.6!skip
-plugins/modules/vcenter_datacenter_info.py import-2.7!skip
-plugins/modules/vcenter_datacenter_info.py compile-2.7!skip
-plugins/modules/vcenter_datacenter_info.py import-3.5!skip
-plugins/modules/vcenter_datacenter_info.py compile-3.5!skip
-plugins/modules/vcenter_datacenter_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_datacenter_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_datacenter_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_datacenter_info.py validate-modules:missing-main-call
-plugins/modules/appliance_system_version_info.py import-2.6!skip
-plugins/modules/appliance_system_version_info.py compile-2.6!skip
-plugins/modules/appliance_system_version_info.py import-2.7!skip
-plugins/modules/appliance_system_version_info.py compile-2.7!skip
-plugins/modules/appliance_system_version_info.py import-3.5!skip
-plugins/modules/appliance_system_version_info.py compile-3.5!skip
-plugins/modules/appliance_system_version_info.py future-import-boilerplate!skip
-plugins/modules/appliance_system_version_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_system_version_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_system_version_info.py validate-modules:missing-main-call
-plugins/modules/appliance_health_applmgmt_info.py import-2.6!skip
-plugins/modules/appliance_health_applmgmt_info.py compile-2.6!skip
-plugins/modules/appliance_health_applmgmt_info.py import-2.7!skip
-plugins/modules/appliance_health_applmgmt_info.py compile-2.7!skip
-plugins/modules/appliance_health_applmgmt_info.py import-3.5!skip
-plugins/modules/appliance_health_applmgmt_info.py compile-3.5!skip
-plugins/modules/appliance_health_applmgmt_info.py future-import-boilerplate!skip
-plugins/modules/appliance_health_applmgmt_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_health_applmgmt_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_health_applmgmt_info.py validate-modules:missing-main-call
-plugins/modules/appliance_system_storage_info.py import-2.6!skip
-plugins/modules/appliance_system_storage_info.py compile-2.6!skip
-plugins/modules/appliance_system_storage_info.py import-2.7!skip
-plugins/modules/appliance_system_storage_info.py compile-2.7!skip
-plugins/modules/appliance_system_storage_info.py import-3.5!skip
-plugins/modules/appliance_system_storage_info.py compile-3.5!skip
-plugins/modules/appliance_system_storage_info.py future-import-boilerplate!skip
-plugins/modules/appliance_system_storage_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_system_storage_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_system_storage_info.py validate-modules:missing-main-call
-plugins/modules/appliance_infraprofile_configs_info.py import-2.6!skip
-plugins/modules/appliance_infraprofile_configs_info.py compile-2.6!skip
-plugins/modules/appliance_infraprofile_configs_info.py import-2.7!skip
-plugins/modules/appliance_infraprofile_configs_info.py compile-2.7!skip
-plugins/modules/appliance_infraprofile_configs_info.py import-3.5!skip
-plugins/modules/appliance_infraprofile_configs_info.py compile-3.5!skip
-plugins/modules/appliance_infraprofile_configs_info.py future-import-boilerplate!skip
-plugins/modules/appliance_infraprofile_configs_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_infraprofile_configs_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_infraprofile_configs_info.py validate-modules:missing-main-call
-plugins/modules/appliance_access_shell_info.py import-2.6!skip
-plugins/modules/appliance_access_shell_info.py compile-2.6!skip
-plugins/modules/appliance_access_shell_info.py import-2.7!skip
-plugins/modules/appliance_access_shell_info.py compile-2.7!skip
-plugins/modules/appliance_access_shell_info.py import-3.5!skip
-plugins/modules/appliance_access_shell_info.py compile-3.5!skip
-plugins/modules/appliance_access_shell_info.py future-import-boilerplate!skip
-plugins/modules/appliance_access_shell_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_access_shell_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_access_shell_info.py validate-modules:missing-main-call
-plugins/modules/appliance_health_mem_info.py import-2.6!skip
-plugins/modules/appliance_health_mem_info.py compile-2.6!skip
-plugins/modules/appliance_health_mem_info.py import-2.7!skip
-plugins/modules/appliance_health_mem_info.py compile-2.7!skip
-plugins/modules/appliance_health_mem_info.py import-3.5!skip
-plugins/modules/appliance_health_mem_info.py compile-3.5!skip
-plugins/modules/appliance_health_mem_info.py future-import-boilerplate!skip
-plugins/modules/appliance_health_mem_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_health_mem_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_health_mem_info.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_interfaces_ipv4.py import-2.6!skip
-plugins/modules/appliance_networking_interfaces_ipv4.py compile-2.6!skip
-plugins/modules/appliance_networking_interfaces_ipv4.py import-2.7!skip
-plugins/modules/appliance_networking_interfaces_ipv4.py compile-2.7!skip
-plugins/modules/appliance_networking_interfaces_ipv4.py import-3.5!skip
-plugins/modules/appliance_networking_interfaces_ipv4.py compile-3.5!skip
-plugins/modules/appliance_networking_interfaces_ipv4.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_interfaces_ipv4.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_interfaces_ipv4.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_interfaces_ipv4.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py validate-modules:missing-main-call
-plugins/modules/appliance_localaccounts_globalpolicy.py import-2.6!skip
-plugins/modules/appliance_localaccounts_globalpolicy.py compile-2.6!skip
-plugins/modules/appliance_localaccounts_globalpolicy.py import-2.7!skip
-plugins/modules/appliance_localaccounts_globalpolicy.py compile-2.7!skip
-plugins/modules/appliance_localaccounts_globalpolicy.py import-3.5!skip
-plugins/modules/appliance_localaccounts_globalpolicy.py compile-3.5!skip
-plugins/modules/appliance_localaccounts_globalpolicy.py future-import-boilerplate!skip
-plugins/modules/appliance_localaccounts_globalpolicy.py metaclass-boilerplate!skip
-plugins/modules/appliance_localaccounts_globalpolicy.py validate-modules:missing-if-name-main
-plugins/modules/appliance_localaccounts_globalpolicy.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_guest_operations_info.py import-2.6!skip
-plugins/modules/vcenter_vm_guest_operations_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_guest_operations_info.py import-2.7!skip
-plugins/modules/vcenter_vm_guest_operations_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_guest_operations_info.py import-3.5!skip
-plugins/modules/vcenter_vm_guest_operations_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_guest_operations_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_guest_operations_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_guest_operations_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_guest_operations_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vmtemplate_libraryitems_info.py import-2.6!skip
-plugins/modules/vcenter_vmtemplate_libraryitems_info.py compile-2.6!skip
-plugins/modules/vcenter_vmtemplate_libraryitems_info.py import-2.7!skip
-plugins/modules/vcenter_vmtemplate_libraryitems_info.py compile-2.7!skip
-plugins/modules/vcenter_vmtemplate_libraryitems_info.py import-3.5!skip
-plugins/modules/vcenter_vmtemplate_libraryitems_info.py compile-3.5!skip
-plugins/modules/vcenter_vmtemplate_libraryitems_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vmtemplate_libraryitems_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vmtemplate_libraryitems_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vmtemplate_libraryitems_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_guest_filesystem_directories.py import-2.6!skip
-plugins/modules/vcenter_vm_guest_filesystem_directories.py compile-2.6!skip
-plugins/modules/vcenter_vm_guest_filesystem_directories.py import-2.7!skip
-plugins/modules/vcenter_vm_guest_filesystem_directories.py compile-2.7!skip
-plugins/modules/vcenter_vm_guest_filesystem_directories.py import-3.5!skip
-plugins/modules/vcenter_vm_guest_filesystem_directories.py compile-3.5!skip
-plugins/modules/vcenter_vm_guest_filesystem_directories.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_guest_filesystem_directories.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_guest_filesystem_directories.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_guest_filesystem_directories.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_cdrom_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_cdrom_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_cdrom_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_cdrom_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_cdrom_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_cdrom_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_cdrom_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_cdrom_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_cdrom_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_cdrom_info.py validate-modules:missing-main-call
-plugins/modules/appliance_monitoring_query.py import-2.6!skip
-plugins/modules/appliance_monitoring_query.py compile-2.6!skip
-plugins/modules/appliance_monitoring_query.py import-2.7!skip
-plugins/modules/appliance_monitoring_query.py compile-2.7!skip
-plugins/modules/appliance_monitoring_query.py import-3.5!skip
-plugins/modules/appliance_monitoring_query.py compile-3.5!skip
-plugins/modules/appliance_monitoring_query.py future-import-boilerplate!skip
-plugins/modules/appliance_monitoring_query.py metaclass-boilerplate!skip
-plugins/modules/appliance_monitoring_query.py validate-modules:missing-if-name-main
-plugins/modules/appliance_monitoring_query.py validate-modules:missing-main-call
-plugins/modules/vcenter_resourcepool.py import-2.6!skip
-plugins/modules/vcenter_resourcepool.py compile-2.6!skip
-plugins/modules/vcenter_resourcepool.py import-2.7!skip
-plugins/modules/vcenter_resourcepool.py compile-2.7!skip
-plugins/modules/vcenter_resourcepool.py import-3.5!skip
-plugins/modules/vcenter_resourcepool.py compile-3.5!skip
-plugins/modules/vcenter_resourcepool.py future-import-boilerplate!skip
-plugins/modules/vcenter_resourcepool.py metaclass-boilerplate!skip
-plugins/modules/vcenter_resourcepool.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_resourcepool.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_memory.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_memory.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_memory.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_memory.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_memory.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_memory.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_memory.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_memory.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_memory.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_memory.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_proxy.py import-2.6!skip
-plugins/modules/appliance_networking_proxy.py compile-2.6!skip
-plugins/modules/appliance_networking_proxy.py import-2.7!skip
-plugins/modules/appliance_networking_proxy.py compile-2.7!skip
-plugins/modules/appliance_networking_proxy.py import-3.5!skip
-plugins/modules/appliance_networking_proxy.py compile-3.5!skip
-plugins/modules/appliance_networking_proxy.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_proxy.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_proxy.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_proxy.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_dns_servers_info.py import-2.6!skip
-plugins/modules/appliance_networking_dns_servers_info.py compile-2.6!skip
-plugins/modules/appliance_networking_dns_servers_info.py import-2.7!skip
-plugins/modules/appliance_networking_dns_servers_info.py compile-2.7!skip
-plugins/modules/appliance_networking_dns_servers_info.py import-3.5!skip
-plugins/modules/appliance_networking_dns_servers_info.py compile-3.5!skip
-plugins/modules/appliance_networking_dns_servers_info.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_dns_servers_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_dns_servers_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_dns_servers_info.py validate-modules:missing-main-call
-plugins/modules/appliance_health_system_info.py import-2.6!skip
-plugins/modules/appliance_health_system_info.py compile-2.6!skip
-plugins/modules/appliance_health_system_info.py import-2.7!skip
-plugins/modules/appliance_health_system_info.py compile-2.7!skip
-plugins/modules/appliance_health_system_info.py import-3.5!skip
-plugins/modules/appliance_health_system_info.py compile-3.5!skip
-plugins/modules/appliance_health_system_info.py future-import-boilerplate!skip
-plugins/modules/appliance_health_system_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_health_system_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_health_system_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_ethernet_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_ethernet_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_ethernet_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_ethernet_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_ethernet_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_ethernet_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_ethernet_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_ethernet_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_ethernet_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_ethernet_info.py validate-modules:missing-main-call
-plugins/modules/appliance_networking.py import-2.6!skip
-plugins/modules/appliance_networking.py compile-2.6!skip
-plugins/modules/appliance_networking.py import-2.7!skip
-plugins/modules/appliance_networking.py compile-2.7!skip
-plugins/modules/appliance_networking.py import-3.5!skip
-plugins/modules/appliance_networking.py compile-3.5!skip
-plugins/modules/appliance_networking.py future-import-boilerplate!skip
-plugins/modules/appliance_networking.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_floppy_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_floppy_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_floppy_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_floppy_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_floppy_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_floppy_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_floppy_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_floppy_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_floppy_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_floppy_info.py validate-modules:missing-main-call
-plugins/modules/content_configuration_info.py import-2.6!skip
-plugins/modules/content_configuration_info.py compile-2.6!skip
-plugins/modules/content_configuration_info.py import-2.7!skip
-plugins/modules/content_configuration_info.py compile-2.7!skip
-plugins/modules/content_configuration_info.py import-3.5!skip
-plugins/modules/content_configuration_info.py compile-3.5!skip
-plugins/modules/content_configuration_info.py future-import-boilerplate!skip
-plugins/modules/content_configuration_info.py metaclass-boilerplate!skip
-plugins/modules/content_configuration_info.py validate-modules:missing-if-name-main
-plugins/modules/content_configuration_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_tools_installer.py import-2.6!skip
-plugins/modules/vcenter_vm_tools_installer.py compile-2.6!skip
-plugins/modules/vcenter_vm_tools_installer.py import-2.7!skip
-plugins/modules/vcenter_vm_tools_installer.py compile-2.7!skip
-plugins/modules/vcenter_vm_tools_installer.py import-3.5!skip
-plugins/modules/vcenter_vm_tools_installer.py compile-3.5!skip
-plugins/modules/vcenter_vm_tools_installer.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_tools_installer.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_tools_installer.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_tools_installer.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_cpu.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_cpu.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_cpu.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_cpu.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_cpu.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_cpu.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_cpu.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_cpu.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_cpu.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_cpu.py validate-modules:missing-main-call
-plugins/modules/vcenter_folder_info.py import-2.6!skip
-plugins/modules/vcenter_folder_info.py compile-2.6!skip
-plugins/modules/vcenter_folder_info.py import-2.7!skip
-plugins/modules/vcenter_folder_info.py compile-2.7!skip
-plugins/modules/vcenter_folder_info.py import-3.5!skip
-plugins/modules/vcenter_folder_info.py compile-3.5!skip
-plugins/modules/vcenter_folder_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_folder_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_folder_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_folder_info.py validate-modules:missing-main-call
-plugins/modules/appliance_system_time_info.py import-2.6!skip
-plugins/modules/appliance_system_time_info.py compile-2.6!skip
-plugins/modules/appliance_system_time_info.py import-2.7!skip
-plugins/modules/appliance_system_time_info.py compile-2.7!skip
-plugins/modules/appliance_system_time_info.py import-3.5!skip
-plugins/modules/appliance_system_time_info.py compile-3.5!skip
-plugins/modules/appliance_system_time_info.py future-import-boilerplate!skip
-plugins/modules/appliance_system_time_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_system_time_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_system_time_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_guest_localfilesystem_info.py import-2.6!skip
-plugins/modules/vcenter_vm_guest_localfilesystem_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_guest_localfilesystem_info.py import-2.7!skip
-plugins/modules/vcenter_vm_guest_localfilesystem_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_guest_localfilesystem_info.py import-3.5!skip
-plugins/modules/vcenter_vm_guest_localfilesystem_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_guest_localfilesystem_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_guest_localfilesystem_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_guest_localfilesystem_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_guest_localfilesystem_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_info.py validate-modules:missing-main-call
-plugins/modules/appliance_health_load_info.py import-2.6!skip
-plugins/modules/appliance_health_load_info.py compile-2.6!skip
-plugins/modules/appliance_health_load_info.py import-2.7!skip
-plugins/modules/appliance_health_load_info.py compile-2.7!skip
-plugins/modules/appliance_health_load_info.py import-3.5!skip
-plugins/modules/appliance_health_load_info.py compile-3.5!skip
-plugins/modules/appliance_health_load_info.py future-import-boilerplate!skip
-plugins/modules/appliance_health_load_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_health_load_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_health_load_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_tools.py import-2.6!skip
-plugins/modules/vcenter_vm_tools.py compile-2.6!skip
-plugins/modules/vcenter_vm_tools.py import-2.7!skip
-plugins/modules/vcenter_vm_tools.py compile-2.7!skip
-plugins/modules/vcenter_vm_tools.py import-3.5!skip
-plugins/modules/vcenter_vm_tools.py compile-3.5!skip
-plugins/modules/vcenter_vm_tools.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_tools.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_tools.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_tools.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_guest_power.py import-2.6!skip
-plugins/modules/vcenter_vm_guest_power.py compile-2.6!skip
-plugins/modules/vcenter_vm_guest_power.py import-2.7!skip
-plugins/modules/vcenter_vm_guest_power.py compile-2.7!skip
-plugins/modules/vcenter_vm_guest_power.py import-3.5!skip
-plugins/modules/vcenter_vm_guest_power.py compile-3.5!skip
-plugins/modules/vcenter_vm_guest_power.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_guest_power.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_guest_power.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_guest_power.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_info.py import-2.6!skip
-plugins/modules/vcenter_vm_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_info.py import-2.7!skip
-plugins/modules/vcenter_vm_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_info.py import-3.5!skip
-plugins/modules/vcenter_vm_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_info.py validate-modules:missing-main-call
-plugins/modules/appliance_infraprofile_configs.py import-2.6!skip
-plugins/modules/appliance_infraprofile_configs.py compile-2.6!skip
-plugins/modules/appliance_infraprofile_configs.py import-2.7!skip
-plugins/modules/appliance_infraprofile_configs.py compile-2.7!skip
-plugins/modules/appliance_infraprofile_configs.py import-3.5!skip
-plugins/modules/appliance_infraprofile_configs.py compile-3.5!skip
-plugins/modules/appliance_infraprofile_configs.py future-import-boilerplate!skip
-plugins/modules/appliance_infraprofile_configs.py metaclass-boilerplate!skip
-plugins/modules/appliance_infraprofile_configs.py validate-modules:missing-if-name-main
-plugins/modules/appliance_infraprofile_configs.py validate-modules:missing-main-call
-plugins/modules/content_subscribedlibrary.py import-2.6!skip
-plugins/modules/content_subscribedlibrary.py compile-2.6!skip
-plugins/modules/content_subscribedlibrary.py import-2.7!skip
-plugins/modules/content_subscribedlibrary.py compile-2.7!skip
-plugins/modules/content_subscribedlibrary.py import-3.5!skip
-plugins/modules/content_subscribedlibrary.py compile-3.5!skip
-plugins/modules/content_subscribedlibrary.py future-import-boilerplate!skip
-plugins/modules/content_subscribedlibrary.py metaclass-boilerplate!skip
-plugins/modules/content_subscribedlibrary.py validate-modules:missing-if-name-main
-plugins/modules/content_subscribedlibrary.py validate-modules:missing-main-call
-plugins/modules/appliance_system_globalfips_info.py import-2.6!skip
-plugins/modules/appliance_system_globalfips_info.py compile-2.6!skip
-plugins/modules/appliance_system_globalfips_info.py import-2.7!skip
-plugins/modules/appliance_system_globalfips_info.py compile-2.7!skip
-plugins/modules/appliance_system_globalfips_info.py import-3.5!skip
-plugins/modules/appliance_system_globalfips_info.py compile-3.5!skip
-plugins/modules/appliance_system_globalfips_info.py future-import-boilerplate!skip
-plugins/modules/appliance_system_globalfips_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_system_globalfips_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_system_globalfips_info.py validate-modules:missing-main-call
-plugins/modules/appliance_services_info.py import-2.6!skip
-plugins/modules/appliance_services_info.py compile-2.6!skip
-plugins/modules/appliance_services_info.py import-2.7!skip
-plugins/modules/appliance_services_info.py compile-2.7!skip
-plugins/modules/appliance_services_info.py import-3.5!skip
-plugins/modules/appliance_services_info.py compile-3.5!skip
-plugins/modules/appliance_services_info.py future-import-boilerplate!skip
-plugins/modules/appliance_services_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_services_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_services_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_storage_policy_compliance.py import-2.6!skip
-plugins/modules/vcenter_vm_storage_policy_compliance.py compile-2.6!skip
-plugins/modules/vcenter_vm_storage_policy_compliance.py import-2.7!skip
-plugins/modules/vcenter_vm_storage_policy_compliance.py compile-2.7!skip
-plugins/modules/vcenter_vm_storage_policy_compliance.py import-3.5!skip
-plugins/modules/vcenter_vm_storage_policy_compliance.py compile-3.5!skip
-plugins/modules/vcenter_vm_storage_policy_compliance.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_storage_policy_compliance.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_storage_policy_compliance.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_storage_policy_compliance.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_serial_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_serial_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_serial_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_serial_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_serial_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_serial_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_serial_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_serial_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_serial_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_serial_info.py validate-modules:missing-main-call
-plugins/modules/content_configuration.py import-2.6!skip
-plugins/modules/content_configuration.py compile-2.6!skip
-plugins/modules/content_configuration.py import-2.7!skip
-plugins/modules/content_configuration.py compile-2.7!skip
-plugins/modules/content_configuration.py import-3.5!skip
-plugins/modules/content_configuration.py compile-3.5!skip
-plugins/modules/content_configuration.py future-import-boilerplate!skip
-plugins/modules/content_configuration.py metaclass-boilerplate!skip
-plugins/modules/content_configuration.py validate-modules:missing-if-name-main
-plugins/modules/content_configuration.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_dns_hostname_info.py import-2.6!skip
-plugins/modules/appliance_networking_dns_hostname_info.py compile-2.6!skip
-plugins/modules/appliance_networking_dns_hostname_info.py import-2.7!skip
-plugins/modules/appliance_networking_dns_hostname_info.py compile-2.7!skip
-plugins/modules/appliance_networking_dns_hostname_info.py import-3.5!skip
-plugins/modules/appliance_networking_dns_hostname_info.py compile-3.5!skip
-plugins/modules/appliance_networking_dns_hostname_info.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_dns_hostname_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_dns_hostname_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_dns_hostname_info.py validate-modules:missing-main-call
-plugins/modules/content_locallibrary_info.py import-2.6!skip
-plugins/modules/content_locallibrary_info.py compile-2.6!skip
-plugins/modules/content_locallibrary_info.py import-2.7!skip
-plugins/modules/content_locallibrary_info.py compile-2.7!skip
-plugins/modules/content_locallibrary_info.py import-3.5!skip
-plugins/modules/content_locallibrary_info.py compile-3.5!skip
-plugins/modules/content_locallibrary_info.py future-import-boilerplate!skip
-plugins/modules/content_locallibrary_info.py metaclass-boilerplate!skip
-plugins/modules/content_locallibrary_info.py validate-modules:missing-if-name-main
-plugins/modules/content_locallibrary_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_storage_policy.py import-2.6!skip
-plugins/modules/vcenter_vm_storage_policy.py compile-2.6!skip
-plugins/modules/vcenter_vm_storage_policy.py import-2.7!skip
-plugins/modules/vcenter_vm_storage_policy.py compile-2.7!skip
-plugins/modules/vcenter_vm_storage_policy.py import-3.5!skip
-plugins/modules/vcenter_vm_storage_policy.py compile-3.5!skip
-plugins/modules/vcenter_vm_storage_policy.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_storage_policy.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_storage_policy.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_storage_policy.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_noproxy_info.py import-2.6!skip
-plugins/modules/appliance_networking_noproxy_info.py compile-2.6!skip
-plugins/modules/appliance_networking_noproxy_info.py import-2.7!skip
-plugins/modules/appliance_networking_noproxy_info.py compile-2.7!skip
-plugins/modules/appliance_networking_noproxy_info.py import-3.5!skip
-plugins/modules/appliance_networking_noproxy_info.py compile-3.5!skip
-plugins/modules/appliance_networking_noproxy_info.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_noproxy_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_noproxy_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_noproxy_info.py validate-modules:missing-main-call
-plugins/modules/appliance_access_ssh.py import-2.6!skip
-plugins/modules/appliance_access_ssh.py compile-2.6!skip
-plugins/modules/appliance_access_ssh.py import-2.7!skip
-plugins/modules/appliance_access_ssh.py compile-2.7!skip
-plugins/modules/appliance_access_ssh.py import-3.5!skip
-plugins/modules/appliance_access_ssh.py compile-3.5!skip
-plugins/modules/appliance_access_ssh.py future-import-boilerplate!skip
-plugins/modules/appliance_access_ssh.py metaclass-boilerplate!skip
-plugins/modules/appliance_access_ssh.py validate-modules:missing-if-name-main
-plugins/modules/appliance_access_ssh.py validate-modules:missing-main-call
-plugins/modules/appliance_health_softwarepackages_info.py import-2.6!skip
-plugins/modules/appliance_health_softwarepackages_info.py compile-2.6!skip
-plugins/modules/appliance_health_softwarepackages_info.py import-2.7!skip
-plugins/modules/appliance_health_softwarepackages_info.py compile-2.7!skip
-plugins/modules/appliance_health_softwarepackages_info.py import-3.5!skip
-plugins/modules/appliance_health_softwarepackages_info.py compile-3.5!skip
-plugins/modules/appliance_health_softwarepackages_info.py future-import-boilerplate!skip
-plugins/modules/appliance_health_softwarepackages_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_health_softwarepackages_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_health_softwarepackages_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_guest_networking_interfaces_info.py import-2.6!skip
-plugins/modules/vcenter_vm_guest_networking_interfaces_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_guest_networking_interfaces_info.py import-2.7!skip
-plugins/modules/vcenter_vm_guest_networking_interfaces_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_guest_networking_interfaces_info.py import-3.5!skip
-plugins/modules/vcenter_vm_guest_networking_interfaces_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_guest_networking_interfaces_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_guest_networking_interfaces_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_guest_networking_interfaces_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_guest_networking_interfaces_info.py validate-modules:missing-main-call
-plugins/modules/appliance_health_database_info.py import-2.6!skip
-plugins/modules/appliance_health_database_info.py compile-2.6!skip
-plugins/modules/appliance_health_database_info.py import-2.7!skip
-plugins/modules/appliance_health_database_info.py compile-2.7!skip
-plugins/modules/appliance_health_database_info.py import-3.5!skip
-plugins/modules/appliance_health_database_info.py compile-3.5!skip
-plugins/modules/appliance_health_database_info.py future-import-boilerplate!skip
-plugins/modules/appliance_health_database_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_health_database_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_health_database_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_adapter_sata.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_adapter_sata.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_firewall_inbound_info.py import-2.6!skip
-plugins/modules/appliance_networking_firewall_inbound_info.py compile-2.6!skip
-plugins/modules/appliance_networking_firewall_inbound_info.py import-2.7!skip
-plugins/modules/appliance_networking_firewall_inbound_info.py compile-2.7!skip
-plugins/modules/appliance_networking_firewall_inbound_info.py import-3.5!skip
-plugins/modules/appliance_networking_firewall_inbound_info.py compile-3.5!skip
-plugins/modules/appliance_networking_firewall_inbound_info.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_firewall_inbound_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_firewall_inbound_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_firewall_inbound_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_memory_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_memory_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_memory_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_memory_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_memory_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_memory_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_memory_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_memory_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_memory_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_memory_info.py validate-modules:missing-main-call
-plugins/modules/content_library_item_info.py import-2.6!skip
-plugins/modules/content_library_item_info.py compile-2.6!skip
-plugins/modules/content_library_item_info.py import-2.7!skip
-plugins/modules/content_library_item_info.py compile-2.7!skip
-plugins/modules/content_library_item_info.py import-3.5!skip
-plugins/modules/content_library_item_info.py compile-3.5!skip
-plugins/modules/content_library_item_info.py future-import-boilerplate!skip
-plugins/modules/content_library_item_info.py metaclass-boilerplate!skip
-plugins/modules/content_library_item_info.py validate-modules:missing-if-name-main
-plugins/modules/content_library_item_info.py validate-modules:missing-main-call
-plugins/modules/appliance_vmon_service_info.py import-2.6!skip
-plugins/modules/appliance_vmon_service_info.py compile-2.6!skip
-plugins/modules/appliance_vmon_service_info.py import-2.7!skip
-plugins/modules/appliance_vmon_service_info.py compile-2.7!skip
-plugins/modules/appliance_vmon_service_info.py import-3.5!skip
-plugins/modules/appliance_vmon_service_info.py compile-3.5!skip
-plugins/modules/appliance_vmon_service_info.py future-import-boilerplate!skip
-plugins/modules/appliance_vmon_service_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_vmon_service_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_vmon_service_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_boot_device.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_boot_device.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_boot_device.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_boot_device.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_boot_device.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_boot_device.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_boot_device.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_boot_device.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_boot_device.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_boot_device.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_noproxy.py import-2.6!skip
-plugins/modules/appliance_networking_noproxy.py compile-2.6!skip
-plugins/modules/appliance_networking_noproxy.py import-2.7!skip
-plugins/modules/appliance_networking_noproxy.py compile-2.7!skip
-plugins/modules/appliance_networking_noproxy.py import-3.5!skip
-plugins/modules/appliance_networking_noproxy.py compile-3.5!skip
-plugins/modules/appliance_networking_noproxy.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_noproxy.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_noproxy.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_noproxy.py validate-modules:missing-main-call
-plugins/modules/appliance_access_dcui_info.py import-2.6!skip
-plugins/modules/appliance_access_dcui_info.py compile-2.6!skip
-plugins/modules/appliance_access_dcui_info.py import-2.7!skip
-plugins/modules/appliance_access_dcui_info.py compile-2.7!skip
-plugins/modules/appliance_access_dcui_info.py import-3.5!skip
-plugins/modules/appliance_access_dcui_info.py compile-3.5!skip
-plugins/modules/appliance_access_dcui_info.py future-import-boilerplate!skip
-plugins/modules/appliance_access_dcui_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_access_dcui_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_access_dcui_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_disk.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_disk.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_disk.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_disk.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_disk.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_disk.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_disk.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_disk.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_disk.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_disk.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_interfaces_ipv6_info.py import-2.6!skip
-plugins/modules/appliance_networking_interfaces_ipv6_info.py compile-2.6!skip
-plugins/modules/appliance_networking_interfaces_ipv6_info.py import-2.7!skip
-plugins/modules/appliance_networking_interfaces_ipv6_info.py compile-2.7!skip
-plugins/modules/appliance_networking_interfaces_ipv6_info.py import-3.5!skip
-plugins/modules/appliance_networking_interfaces_ipv6_info.py compile-3.5!skip
-plugins/modules/appliance_networking_interfaces_ipv6_info.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_interfaces_ipv6_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_interfaces_ipv6_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_interfaces_ipv6_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_ovf_libraryitem.py import-2.6!skip
-plugins/modules/vcenter_ovf_libraryitem.py compile-2.6!skip
-plugins/modules/vcenter_ovf_libraryitem.py import-2.7!skip
-plugins/modules/vcenter_ovf_libraryitem.py compile-2.7!skip
-plugins/modules/vcenter_ovf_libraryitem.py import-3.5!skip
-plugins/modules/vcenter_ovf_libraryitem.py compile-3.5!skip
-plugins/modules/vcenter_ovf_libraryitem.py future-import-boilerplate!skip
-plugins/modules/vcenter_ovf_libraryitem.py metaclass-boilerplate!skip
-plugins/modules/vcenter_ovf_libraryitem.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_ovf_libraryitem.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_dns_domains_info.py import-2.6!skip
-plugins/modules/appliance_networking_dns_domains_info.py compile-2.6!skip
-plugins/modules/appliance_networking_dns_domains_info.py import-2.7!skip
-plugins/modules/appliance_networking_dns_domains_info.py compile-2.7!skip
-plugins/modules/appliance_networking_dns_domains_info.py import-3.5!skip
-plugins/modules/appliance_networking_dns_domains_info.py compile-3.5!skip
-plugins/modules/appliance_networking_dns_domains_info.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_dns_domains_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_dns_domains_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_dns_domains_info.py validate-modules:missing-main-call
-plugins/modules/appliance_system_globalfips.py import-2.6!skip
-plugins/modules/appliance_system_globalfips.py compile-2.6!skip
-plugins/modules/appliance_system_globalfips.py import-2.7!skip
-plugins/modules/appliance_system_globalfips.py compile-2.7!skip
-plugins/modules/appliance_system_globalfips.py import-3.5!skip
-plugins/modules/appliance_system_globalfips.py compile-3.5!skip
-plugins/modules/appliance_system_globalfips.py future-import-boilerplate!skip
-plugins/modules/appliance_system_globalfips.py metaclass-boilerplate!skip
-plugins/modules/appliance_system_globalfips.py validate-modules:missing-if-name-main
-plugins/modules/appliance_system_globalfips.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_serial.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_serial.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_serial.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_serial.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_serial.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_serial.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_serial.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_serial.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_serial.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_serial.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_firewall_inbound.py import-2.6!skip
-plugins/modules/appliance_networking_firewall_inbound.py compile-2.6!skip
-plugins/modules/appliance_networking_firewall_inbound.py import-2.7!skip
-plugins/modules/appliance_networking_firewall_inbound.py compile-2.7!skip
-plugins/modules/appliance_networking_firewall_inbound.py import-3.5!skip
-plugins/modules/appliance_networking_firewall_inbound.py compile-3.5!skip
-plugins/modules/appliance_networking_firewall_inbound.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_firewall_inbound.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_firewall_inbound.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_firewall_inbound.py validate-modules:missing-main-call
-plugins/modules/appliance_shutdown.py import-2.6!skip
-plugins/modules/appliance_shutdown.py compile-2.6!skip
-plugins/modules/appliance_shutdown.py import-2.7!skip
-plugins/modules/appliance_shutdown.py compile-2.7!skip
-plugins/modules/appliance_shutdown.py import-3.5!skip
-plugins/modules/appliance_shutdown.py compile-3.5!skip
-plugins/modules/appliance_shutdown.py future-import-boilerplate!skip
-plugins/modules/appliance_shutdown.py metaclass-boilerplate!skip
-plugins/modules/appliance_shutdown.py validate-modules:missing-if-name-main
-plugins/modules/appliance_shutdown.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_guest_networking_info.py import-2.6!skip
-plugins/modules/vcenter_vm_guest_networking_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_guest_networking_info.py import-2.7!skip
-plugins/modules/vcenter_vm_guest_networking_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_guest_networking_info.py import-3.5!skip
-plugins/modules/vcenter_vm_guest_networking_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_guest_networking_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_guest_networking_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_guest_networking_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_guest_networking_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_ethernet.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_ethernet.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_ethernet.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_ethernet.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_ethernet.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_ethernet.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_ethernet.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_ethernet.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_ethernet.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_ethernet.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_parallel_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_parallel_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_parallel_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_parallel_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_parallel_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_parallel_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_parallel_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_parallel_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_parallel_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_parallel_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_host_info.py import-2.6!skip
-plugins/modules/vcenter_host_info.py compile-2.6!skip
-plugins/modules/vcenter_host_info.py import-2.7!skip
-plugins/modules/vcenter_host_info.py compile-2.7!skip
-plugins/modules/vcenter_host_info.py import-3.5!skip
-plugins/modules/vcenter_host_info.py compile-3.5!skip
-plugins/modules/vcenter_host_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_host_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_host_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_host_info.py validate-modules:missing-main-call
-plugins/modules/appliance_timesync.py import-2.6!skip
-plugins/modules/appliance_timesync.py compile-2.6!skip
-plugins/modules/appliance_timesync.py import-2.7!skip
-plugins/modules/appliance_timesync.py compile-2.7!skip
-plugins/modules/appliance_timesync.py import-3.5!skip
-plugins/modules/appliance_timesync.py compile-3.5!skip
-plugins/modules/appliance_timesync.py future-import-boilerplate!skip
-plugins/modules/appliance_timesync.py metaclass-boilerplate!skip
-plugins/modules/appliance_timesync.py validate-modules:missing-if-name-main
-plugins/modules/appliance_timesync.py validate-modules:missing-main-call
-plugins/modules/vcenter_network_info.py import-2.6!skip
-plugins/modules/vcenter_network_info.py compile-2.6!skip
-plugins/modules/vcenter_network_info.py import-2.7!skip
-plugins/modules/vcenter_network_info.py compile-2.7!skip
-plugins/modules/vcenter_network_info.py import-3.5!skip
-plugins/modules/vcenter_network_info.py compile-3.5!skip
-plugins/modules/vcenter_network_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_network_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_network_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_network_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_boot.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_boot.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_boot.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_boot.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_boot.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_boot.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_boot.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_boot.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_boot.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_boot.py validate-modules:missing-main-call
-plugins/modules/appliance_shutdown_info.py import-2.6!skip
-plugins/modules/appliance_shutdown_info.py compile-2.6!skip
-plugins/modules/appliance_shutdown_info.py import-2.7!skip
-plugins/modules/appliance_shutdown_info.py compile-2.7!skip
-plugins/modules/appliance_shutdown_info.py import-3.5!skip
-plugins/modules/appliance_shutdown_info.py compile-3.5!skip
-plugins/modules/appliance_shutdown_info.py future-import-boilerplate!skip
-plugins/modules/appliance_shutdown_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_shutdown_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_shutdown_info.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_dns_servers.py import-2.6!skip
-plugins/modules/appliance_networking_dns_servers.py compile-2.6!skip
-plugins/modules/appliance_networking_dns_servers.py import-2.7!skip
-plugins/modules/appliance_networking_dns_servers.py compile-2.7!skip
-plugins/modules/appliance_networking_dns_servers.py import-3.5!skip
-plugins/modules/appliance_networking_dns_servers.py compile-3.5!skip
-plugins/modules/appliance_networking_dns_servers.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_dns_servers.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_dns_servers.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_dns_servers.py validate-modules:missing-main-call
-plugins/modules/vcenter_cluster_info.py import-2.6!skip
-plugins/modules/vcenter_cluster_info.py compile-2.6!skip
-plugins/modules/vcenter_cluster_info.py import-2.7!skip
-plugins/modules/vcenter_cluster_info.py compile-2.7!skip
-plugins/modules/vcenter_cluster_info.py import-3.5!skip
-plugins/modules/vcenter_cluster_info.py compile-3.5!skip
-plugins/modules/vcenter_cluster_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_cluster_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_cluster_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_cluster_info.py validate-modules:missing-main-call
-plugins/modules/appliance_localaccounts_globalpolicy_info.py import-2.6!skip
-plugins/modules/appliance_localaccounts_globalpolicy_info.py compile-2.6!skip
-plugins/modules/appliance_localaccounts_globalpolicy_info.py import-2.7!skip
-plugins/modules/appliance_localaccounts_globalpolicy_info.py compile-2.7!skip
-plugins/modules/appliance_localaccounts_globalpolicy_info.py import-3.5!skip
-plugins/modules/appliance_localaccounts_globalpolicy_info.py compile-3.5!skip
-plugins/modules/appliance_localaccounts_globalpolicy_info.py future-import-boilerplate!skip
-plugins/modules/appliance_localaccounts_globalpolicy_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_localaccounts_globalpolicy_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_localaccounts_globalpolicy_info.py validate-modules:missing-main-call
-plugins/modules/appliance_system_storage.py import-2.6!skip
-plugins/modules/appliance_system_storage.py compile-2.6!skip
-plugins/modules/appliance_system_storage.py import-2.7!skip
-plugins/modules/appliance_system_storage.py compile-2.7!skip
-plugins/modules/appliance_system_storage.py import-3.5!skip
-plugins/modules/appliance_system_storage.py compile-3.5!skip
-plugins/modules/appliance_system_storage.py future-import-boilerplate!skip
-plugins/modules/appliance_system_storage.py metaclass-boilerplate!skip
-plugins/modules/appliance_system_storage.py validate-modules:missing-if-name-main
-plugins/modules/appliance_system_storage.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_storage_policy_info.py import-2.6!skip
-plugins/modules/vcenter_vm_storage_policy_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_storage_policy_info.py import-2.7!skip
-plugins/modules/vcenter_vm_storage_policy_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_storage_policy_info.py import-3.5!skip
-plugins/modules/vcenter_vm_storage_policy_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_storage_policy_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_storage_policy_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_storage_policy_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_storage_policy_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm.py import-2.6!skip
-plugins/modules/vcenter_vm.py compile-2.6!skip
-plugins/modules/vcenter_vm.py import-2.7!skip
-plugins/modules/vcenter_vm.py compile-2.7!skip
-plugins/modules/vcenter_vm.py import-3.5!skip
-plugins/modules/vcenter_vm.py compile-3.5!skip
-plugins/modules/vcenter_vm.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_proxy_info.py import-2.6!skip
-plugins/modules/appliance_networking_proxy_info.py compile-2.6!skip
-plugins/modules/appliance_networking_proxy_info.py import-2.7!skip
-plugins/modules/appliance_networking_proxy_info.py compile-2.7!skip
-plugins/modules/appliance_networking_proxy_info.py import-3.5!skip
-plugins/modules/appliance_networking_proxy_info.py compile-3.5!skip
-plugins/modules/appliance_networking_proxy_info.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_proxy_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_proxy_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_proxy_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_power_info.py import-2.6!skip
-plugins/modules/vcenter_vm_power_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_power_info.py import-2.7!skip
-plugins/modules/vcenter_vm_power_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_power_info.py import-3.5!skip
-plugins/modules/vcenter_vm_power_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_power_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_power_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_power_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_power_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_boot_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_boot_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_boot_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_boot_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_boot_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_boot_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_boot_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_boot_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_boot_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_boot_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_tools_info.py import-2.6!skip
-plugins/modules/vcenter_vm_tools_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_tools_info.py import-2.7!skip
-plugins/modules/vcenter_vm_tools_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_tools_info.py import-3.5!skip
-plugins/modules/vcenter_vm_tools_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_tools_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_tools_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_tools_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_tools_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_cpu_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_cpu_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_cpu_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_cpu_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_cpu_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_cpu_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_cpu_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_cpu_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_cpu_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_cpu_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_tools_installer_info.py import-2.6!skip
-plugins/modules/vcenter_vm_tools_installer_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_tools_installer_info.py import-2.7!skip
-plugins/modules/vcenter_vm_tools_installer_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_tools_installer_info.py import-3.5!skip
-plugins/modules/vcenter_vm_tools_installer_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_tools_installer_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_tools_installer_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_tools_installer_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_tools_installer_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware.py validate-modules:missing-main-call
-plugins/modules/appliance_services.py import-2.6!skip
-plugins/modules/appliance_services.py compile-2.6!skip
-plugins/modules/appliance_services.py import-2.7!skip
-plugins/modules/appliance_services.py compile-2.7!skip
-plugins/modules/appliance_services.py import-3.5!skip
-plugins/modules/appliance_services.py compile-3.5!skip
-plugins/modules/appliance_services.py future-import-boilerplate!skip
-plugins/modules/appliance_services.py metaclass-boilerplate!skip
-plugins/modules/appliance_services.py validate-modules:missing-if-name-main
-plugins/modules/appliance_services.py validate-modules:missing-main-call
-plugins/modules/appliance_health_databasestorage_info.py import-2.6!skip
-plugins/modules/appliance_health_databasestorage_info.py compile-2.6!skip
-plugins/modules/appliance_health_databasestorage_info.py import-2.7!skip
-plugins/modules/appliance_health_databasestorage_info.py compile-2.7!skip
-plugins/modules/appliance_health_databasestorage_info.py import-3.5!skip
-plugins/modules/appliance_health_databasestorage_info.py compile-3.5!skip
-plugins/modules/appliance_health_databasestorage_info.py future-import-boilerplate!skip
-plugins/modules/appliance_health_databasestorage_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_health_databasestorage_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_health_databasestorage_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_guest_identity_info.py import-2.6!skip
-plugins/modules/vcenter_vm_guest_identity_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_guest_identity_info.py import-2.7!skip
-plugins/modules/vcenter_vm_guest_identity_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_guest_identity_info.py import-3.5!skip
-plugins/modules/vcenter_vm_guest_identity_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_guest_identity_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_guest_identity_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_guest_identity_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_guest_identity_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_boot_device_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_boot_device_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_boot_device_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_boot_device_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_boot_device_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_boot_device_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_boot_device_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_boot_device_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_boot_device_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_boot_device_info.py validate-modules:missing-main-call
-plugins/modules/appliance_health_storage_info.py import-2.6!skip
-plugins/modules/appliance_health_storage_info.py compile-2.6!skip
-plugins/modules/appliance_health_storage_info.py import-2.7!skip
-plugins/modules/appliance_health_storage_info.py compile-2.7!skip
-plugins/modules/appliance_health_storage_info.py import-3.5!skip
-plugins/modules/appliance_health_storage_info.py compile-3.5!skip
-plugins/modules/appliance_health_storage_info.py future-import-boilerplate!skip
-plugins/modules/appliance_health_storage_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_health_storage_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_health_storage_info.py validate-modules:missing-main-call
-plugins/modules/appliance_health_swap_info.py import-2.6!skip
-plugins/modules/appliance_health_swap_info.py compile-2.6!skip
-plugins/modules/appliance_health_swap_info.py import-2.7!skip
-plugins/modules/appliance_health_swap_info.py compile-2.7!skip
-plugins/modules/appliance_health_swap_info.py import-3.5!skip
-plugins/modules/appliance_health_swap_info.py compile-3.5!skip
-plugins/modules/appliance_health_swap_info.py future-import-boilerplate!skip
-plugins/modules/appliance_health_swap_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_health_swap_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_health_swap_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_power.py import-2.6!skip
-plugins/modules/vcenter_vm_power.py compile-2.6!skip
-plugins/modules/vcenter_vm_power.py import-2.7!skip
-plugins/modules/vcenter_vm_power.py compile-2.7!skip
-plugins/modules/vcenter_vm_power.py import-3.5!skip
-plugins/modules/vcenter_vm_power.py compile-3.5!skip
-plugins/modules/vcenter_vm_power.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_power.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_power.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_power.py validate-modules:missing-main-call
-plugins/modules/vcenter_vmtemplate_libraryitems.py import-2.6!skip
-plugins/modules/vcenter_vmtemplate_libraryitems.py compile-2.6!skip
-plugins/modules/vcenter_vmtemplate_libraryitems.py import-2.7!skip
-plugins/modules/vcenter_vmtemplate_libraryitems.py compile-2.7!skip
-plugins/modules/vcenter_vmtemplate_libraryitems.py import-3.5!skip
-plugins/modules/vcenter_vmtemplate_libraryitems.py compile-3.5!skip
-plugins/modules/vcenter_vmtemplate_libraryitems.py future-import-boilerplate!skip
-plugins/modules/vcenter_vmtemplate_libraryitems.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vmtemplate_libraryitems.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vmtemplate_libraryitems.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_guest_networking_routes_info.py import-2.6!skip
-plugins/modules/vcenter_vm_guest_networking_routes_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_guest_networking_routes_info.py import-2.7!skip
-plugins/modules/vcenter_vm_guest_networking_routes_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_guest_networking_routes_info.py import-3.5!skip
-plugins/modules/vcenter_vm_guest_networking_routes_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_guest_networking_routes_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_guest_networking_routes_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_guest_networking_routes_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_guest_networking_routes_info.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_dns_domains.py import-2.6!skip
-plugins/modules/appliance_networking_dns_domains.py compile-2.6!skip
-plugins/modules/appliance_networking_dns_domains.py import-2.7!skip
-plugins/modules/appliance_networking_dns_domains.py compile-2.7!skip
-plugins/modules/appliance_networking_dns_domains.py import-3.5!skip
-plugins/modules/appliance_networking_dns_domains.py compile-3.5!skip
-plugins/modules/appliance_networking_dns_domains.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_dns_domains.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_dns_domains.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_dns_domains.py validate-modules:missing-main-call
-plugins/modules/vcenter_storage_policies_info.py import-2.6!skip
-plugins/modules/vcenter_storage_policies_info.py compile-2.6!skip
-plugins/modules/vcenter_storage_policies_info.py import-2.7!skip
-plugins/modules/vcenter_storage_policies_info.py compile-2.7!skip
-plugins/modules/vcenter_storage_policies_info.py import-3.5!skip
-plugins/modules/vcenter_storage_policies_info.py compile-3.5!skip
-plugins/modules/vcenter_storage_policies_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_storage_policies_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_storage_policies_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_storage_policies_info.py validate-modules:missing-main-call
-plugins/modules/appliance_access_dcui.py import-2.6!skip
-plugins/modules/appliance_access_dcui.py compile-2.6!skip
-plugins/modules/appliance_access_dcui.py import-2.7!skip
-plugins/modules/appliance_access_dcui.py compile-2.7!skip
-plugins/modules/appliance_access_dcui.py import-3.5!skip
-plugins/modules/appliance_access_dcui.py compile-3.5!skip
-plugins/modules/appliance_access_dcui.py future-import-boilerplate!skip
-plugins/modules/appliance_access_dcui.py metaclass-boilerplate!skip
-plugins/modules/appliance_access_dcui.py validate-modules:missing-if-name-main
-plugins/modules/appliance_access_dcui.py validate-modules:missing-main-call
-plugins/modules/appliance_system_time_timezone_info.py import-2.6!skip
-plugins/modules/appliance_system_time_timezone_info.py compile-2.6!skip
-plugins/modules/appliance_system_time_timezone_info.py import-2.7!skip
-plugins/modules/appliance_system_time_timezone_info.py compile-2.7!skip
-plugins/modules/appliance_system_time_timezone_info.py import-3.5!skip
-plugins/modules/appliance_system_time_timezone_info.py compile-3.5!skip
-plugins/modules/appliance_system_time_timezone_info.py future-import-boilerplate!skip
-plugins/modules/appliance_system_time_timezone_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_system_time_timezone_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_system_time_timezone_info.py validate-modules:missing-main-call
-plugins/modules/appliance_ntp.py import-2.6!skip
-plugins/modules/appliance_ntp.py compile-2.6!skip
-plugins/modules/appliance_ntp.py import-2.7!skip
-plugins/modules/appliance_ntp.py compile-2.7!skip
-plugins/modules/appliance_ntp.py import-3.5!skip
-plugins/modules/appliance_ntp.py compile-3.5!skip
-plugins/modules/appliance_ntp.py future-import-boilerplate!skip
-plugins/modules/appliance_ntp.py metaclass-boilerplate!skip
-plugins/modules/appliance_ntp.py validate-modules:missing-if-name-main
-plugins/modules/appliance_ntp.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_parallel.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_parallel.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_parallel.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_parallel.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_parallel.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_parallel.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_parallel.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_parallel.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_parallel.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_parallel.py validate-modules:missing-main-call
-plugins/modules/vcenter_datacenter.py import-2.6!skip
-plugins/modules/vcenter_datacenter.py compile-2.6!skip
-plugins/modules/vcenter_datacenter.py import-2.7!skip
-plugins/modules/vcenter_datacenter.py compile-2.7!skip
-plugins/modules/vcenter_datacenter.py import-3.5!skip
-plugins/modules/vcenter_datacenter.py compile-3.5!skip
-plugins/modules/vcenter_datacenter.py future-import-boilerplate!skip
-plugins/modules/vcenter_datacenter.py metaclass-boilerplate!skip
-plugins/modules/vcenter_datacenter.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_datacenter.py validate-modules:missing-main-call
-plugins/modules/appliance_system_time_timezone.py import-2.6!skip
-plugins/modules/appliance_system_time_timezone.py compile-2.6!skip
-plugins/modules/appliance_system_time_timezone.py import-2.7!skip
-plugins/modules/appliance_system_time_timezone.py compile-2.7!skip
-plugins/modules/appliance_system_time_timezone.py import-3.5!skip
-plugins/modules/appliance_system_time_timezone.py compile-3.5!skip
-plugins/modules/appliance_system_time_timezone.py future-import-boilerplate!skip
-plugins/modules/appliance_system_time_timezone.py metaclass-boilerplate!skip
-plugins/modules/appliance_system_time_timezone.py validate-modules:missing-if-name-main
-plugins/modules/appliance_system_time_timezone.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_disk_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_disk_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_disk_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_disk_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_disk_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_disk_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_disk_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_disk_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_disk_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_disk_info.py validate-modules:missing-main-call
-plugins/modules/appliance_access_shell.py import-2.6!skip
-plugins/modules/appliance_access_shell.py compile-2.6!skip
-plugins/modules/appliance_access_shell.py import-2.7!skip
-plugins/modules/appliance_access_shell.py compile-2.7!skip
-plugins/modules/appliance_access_shell.py import-3.5!skip
-plugins/modules/appliance_access_shell.py compile-3.5!skip
-plugins/modules/appliance_access_shell.py future-import-boilerplate!skip
-plugins/modules/appliance_access_shell.py metaclass-boilerplate!skip
-plugins/modules/appliance_access_shell.py validate-modules:missing-if-name-main
-plugins/modules/appliance_access_shell.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_floppy.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_floppy.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_floppy.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_floppy.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_floppy.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_floppy.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_floppy.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_floppy.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_floppy.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_floppy.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_guest_power_info.py import-2.6!skip
-plugins/modules/vcenter_vm_guest_power_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_guest_power_info.py import-2.7!skip
-plugins/modules/vcenter_vm_guest_power_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_guest_power_info.py import-3.5!skip
-plugins/modules/vcenter_vm_guest_power_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_guest_power_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_guest_power_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_guest_power_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_guest_power_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_adapter_scsi.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_adapter_scsi.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_guest_customization.py import-2.6!skip
-plugins/modules/vcenter_vm_guest_customization.py compile-2.6!skip
-plugins/modules/vcenter_vm_guest_customization.py import-2.7!skip
-plugins/modules/vcenter_vm_guest_customization.py compile-2.7!skip
-plugins/modules/vcenter_vm_guest_customization.py import-3.5!skip
-plugins/modules/vcenter_vm_guest_customization.py compile-3.5!skip
-plugins/modules/vcenter_vm_guest_customization.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_guest_customization.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_guest_customization.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_guest_customization.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_adapter_sata_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_adapter_sata_info.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_interfaces_info.py import-2.6!skip
-plugins/modules/appliance_networking_interfaces_info.py compile-2.6!skip
-plugins/modules/appliance_networking_interfaces_info.py import-2.7!skip
-plugins/modules/appliance_networking_interfaces_info.py compile-2.7!skip
-plugins/modules/appliance_networking_interfaces_info.py import-3.5!skip
-plugins/modules/appliance_networking_interfaces_info.py compile-3.5!skip
-plugins/modules/appliance_networking_interfaces_info.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_interfaces_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_interfaces_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_interfaces_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_resourcepool_info.py import-2.6!skip
-plugins/modules/vcenter_resourcepool_info.py compile-2.6!skip
-plugins/modules/vcenter_resourcepool_info.py import-2.7!skip
-plugins/modules/vcenter_resourcepool_info.py compile-2.7!skip
-plugins/modules/vcenter_resourcepool_info.py import-3.5!skip
-plugins/modules/vcenter_resourcepool_info.py compile-3.5!skip
-plugins/modules/vcenter_resourcepool_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_resourcepool_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_resourcepool_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_resourcepool_info.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_interfaces_ipv4_info.py import-2.6!skip
-plugins/modules/appliance_networking_interfaces_ipv4_info.py compile-2.6!skip
-plugins/modules/appliance_networking_interfaces_ipv4_info.py import-2.7!skip
-plugins/modules/appliance_networking_interfaces_ipv4_info.py compile-2.7!skip
-plugins/modules/appliance_networking_interfaces_ipv4_info.py import-3.5!skip
-plugins/modules/appliance_networking_interfaces_ipv4_info.py compile-3.5!skip
-plugins/modules/appliance_networking_interfaces_ipv4_info.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_interfaces_ipv4_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_interfaces_ipv4_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_interfaces_ipv4_info.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_interfaces_ipv6.py import-2.6!skip
-plugins/modules/appliance_networking_interfaces_ipv6.py compile-2.6!skip
-plugins/modules/appliance_networking_interfaces_ipv6.py import-2.7!skip
-plugins/modules/appliance_networking_interfaces_ipv6.py compile-2.7!skip
-plugins/modules/appliance_networking_interfaces_ipv6.py import-3.5!skip
-plugins/modules/appliance_networking_interfaces_ipv6.py compile-3.5!skip
-plugins/modules/appliance_networking_interfaces_ipv6.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_interfaces_ipv6.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_interfaces_ipv6.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_interfaces_ipv6.py validate-modules:missing-main-call
-plugins/lookup/datastore_moid.py compile-2.6!skip
-plugins/lookup/datastore_moid.py compile-2.7!skip
-plugins/lookup/datastore_moid.py compile-3.5!skip
-plugins/lookup/resource_pool_moid.py compile-2.6!skip
-plugins/lookup/resource_pool_moid.py compile-2.7!skip
-plugins/lookup/resource_pool_moid.py compile-3.5!skip
-plugins/lookup/cluster_moid.py compile-2.6!skip
-plugins/lookup/cluster_moid.py compile-2.7!skip
-plugins/lookup/cluster_moid.py compile-3.5!skip
-plugins/lookup/network_moid.py compile-2.6!skip
-plugins/lookup/network_moid.py compile-2.7!skip
-plugins/lookup/network_moid.py compile-3.5!skip
-plugins/lookup/host_moid.py compile-2.6!skip
-plugins/lookup/host_moid.py compile-2.7!skip
-plugins/lookup/host_moid.py compile-3.5!skip
-plugins/lookup/folder_moid.py compile-2.6!skip
-plugins/lookup/folder_moid.py compile-2.7!skip
-plugins/lookup/folder_moid.py compile-3.5!skip
-plugins/lookup/vm_moid.py compile-2.6!skip
-plugins/lookup/vm_moid.py compile-2.7!skip
-plugins/lookup/vm_moid.py compile-3.5!skip
-plugins/lookup/datacenter_moid.py compile-2.6!skip
-plugins/lookup/datacenter_moid.py compile-2.7!skip
-plugins/lookup/datacenter_moid.py compile-3.5!skip
-plugins/module_utils/vmware_rest.py future-import-boilerplate!skip
-plugins/module_utils/vmware_rest.py metaclass-boilerplate!skip
-plugins/module_utils/vmware_rest.py import-2.6!skip
-plugins/module_utils/vmware_rest.py compile-2.6!skip
-plugins/module_utils/vmware_rest.py import-2.7!skip
-plugins/module_utils/vmware_rest.py compile-2.7!skip
-plugins/module_utils/vmware_rest.py import-3.5!skip
-plugins/module_utils/vmware_rest.py compile-3.5!skip
-plugins/plugin_utils/lookup.py compile-2.6!skip
-plugins/plugin_utils/lookup.py compile-2.7!skip
-plugins/plugin_utils/lookup.py compile-3.5!skip
diff --git a/ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.11.txt b/ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.11.txt
deleted file mode 100644
index e5ce7de06..000000000
--- a/ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.11.txt
+++ /dev/null
@@ -1,1384 +0,0 @@
-plugins/modules/vcenter_vm_guest_customization.py pep8!skip
-plugins/modules/appliance_infraprofile_configs.py pep8!skip
-plugins/modules/appliance_vmon_service.py import-2.6!skip
-plugins/modules/appliance_vmon_service.py compile-2.6!skip
-plugins/modules/appliance_vmon_service.py import-2.7!skip
-plugins/modules/appliance_vmon_service.py compile-2.7!skip
-plugins/modules/appliance_vmon_service.py import-3.5!skip
-plugins/modules/appliance_vmon_service.py compile-3.5!skip
-plugins/modules/appliance_vmon_service.py future-import-boilerplate!skip
-plugins/modules/appliance_vmon_service.py metaclass-boilerplate!skip
-plugins/modules/appliance_vmon_service.py validate-modules:missing-if-name-main
-plugins/modules/appliance_vmon_service.py validate-modules:missing-main-call
-plugins/modules/vcenter_host.py import-2.6!skip
-plugins/modules/vcenter_host.py compile-2.6!skip
-plugins/modules/vcenter_host.py import-2.7!skip
-plugins/modules/vcenter_host.py compile-2.7!skip
-plugins/modules/vcenter_host.py import-3.5!skip
-plugins/modules/vcenter_host.py compile-3.5!skip
-plugins/modules/vcenter_host.py future-import-boilerplate!skip
-plugins/modules/vcenter_host.py metaclass-boilerplate!skip
-plugins/modules/vcenter_host.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_host.py validate-modules:missing-main-call
-plugins/modules/appliance_monitoring_info.py import-2.6!skip
-plugins/modules/appliance_monitoring_info.py compile-2.6!skip
-plugins/modules/appliance_monitoring_info.py import-2.7!skip
-plugins/modules/appliance_monitoring_info.py compile-2.7!skip
-plugins/modules/appliance_monitoring_info.py import-3.5!skip
-plugins/modules/appliance_monitoring_info.py compile-3.5!skip
-plugins/modules/appliance_monitoring_info.py future-import-boilerplate!skip
-plugins/modules/appliance_monitoring_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_monitoring_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_monitoring_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_storage_policy_compliance_info.py import-2.6!skip
-plugins/modules/vcenter_vm_storage_policy_compliance_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_storage_policy_compliance_info.py import-2.7!skip
-plugins/modules/vcenter_vm_storage_policy_compliance_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_storage_policy_compliance_info.py import-3.5!skip
-plugins/modules/vcenter_vm_storage_policy_compliance_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_storage_policy_compliance_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_storage_policy_compliance_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_storage_policy_compliance_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_storage_policy_compliance_info.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_info.py import-2.6!skip
-plugins/modules/appliance_networking_info.py compile-2.6!skip
-plugins/modules/appliance_networking_info.py import-2.7!skip
-plugins/modules/appliance_networking_info.py compile-2.7!skip
-plugins/modules/appliance_networking_info.py import-3.5!skip
-plugins/modules/appliance_networking_info.py compile-3.5!skip
-plugins/modules/appliance_networking_info.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_libraryitem_info.py import-2.6!skip
-plugins/modules/vcenter_vm_libraryitem_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_libraryitem_info.py import-2.7!skip
-plugins/modules/vcenter_vm_libraryitem_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_libraryitem_info.py import-3.5!skip
-plugins/modules/vcenter_vm_libraryitem_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_libraryitem_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_libraryitem_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_libraryitem_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_libraryitem_info.py validate-modules:missing-main-call
-plugins/modules/appliance_timesync_info.py import-2.6!skip
-plugins/modules/appliance_timesync_info.py compile-2.6!skip
-plugins/modules/appliance_timesync_info.py import-2.7!skip
-plugins/modules/appliance_timesync_info.py compile-2.7!skip
-plugins/modules/appliance_timesync_info.py import-3.5!skip
-plugins/modules/appliance_timesync_info.py compile-3.5!skip
-plugins/modules/appliance_timesync_info.py future-import-boilerplate!skip
-plugins/modules/appliance_timesync_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_timesync_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_timesync_info.py validate-modules:missing-main-call
-plugins/modules/content_subscribedlibrary_info.py import-2.6!skip
-plugins/modules/content_subscribedlibrary_info.py compile-2.6!skip
-plugins/modules/content_subscribedlibrary_info.py import-2.7!skip
-plugins/modules/content_subscribedlibrary_info.py compile-2.7!skip
-plugins/modules/content_subscribedlibrary_info.py import-3.5!skip
-plugins/modules/content_subscribedlibrary_info.py compile-3.5!skip
-plugins/modules/content_subscribedlibrary_info.py future-import-boilerplate!skip
-plugins/modules/content_subscribedlibrary_info.py metaclass-boilerplate!skip
-plugins/modules/content_subscribedlibrary_info.py validate-modules:missing-if-name-main
-plugins/modules/content_subscribedlibrary_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_datastore_info.py import-2.6!skip
-plugins/modules/vcenter_datastore_info.py compile-2.6!skip
-plugins/modules/vcenter_datastore_info.py import-2.7!skip
-plugins/modules/vcenter_datastore_info.py compile-2.7!skip
-plugins/modules/vcenter_datastore_info.py import-3.5!skip
-plugins/modules/vcenter_datastore_info.py compile-3.5!skip
-plugins/modules/vcenter_datastore_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_datastore_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_datastore_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_datastore_info.py validate-modules:missing-main-call
-plugins/modules/appliance_access_ssh_info.py import-2.6!skip
-plugins/modules/appliance_access_ssh_info.py compile-2.6!skip
-plugins/modules/appliance_access_ssh_info.py import-2.7!skip
-plugins/modules/appliance_access_ssh_info.py compile-2.7!skip
-plugins/modules/appliance_access_ssh_info.py import-3.5!skip
-plugins/modules/appliance_access_ssh_info.py compile-3.5!skip
-plugins/modules/appliance_access_ssh_info.py future-import-boilerplate!skip
-plugins/modules/appliance_access_ssh_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_access_ssh_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_access_ssh_info.py validate-modules:missing-main-call
-plugins/modules/appliance_localaccounts_info.py import-2.6!skip
-plugins/modules/appliance_localaccounts_info.py compile-2.6!skip
-plugins/modules/appliance_localaccounts_info.py import-2.7!skip
-plugins/modules/appliance_localaccounts_info.py compile-2.7!skip
-plugins/modules/appliance_localaccounts_info.py import-3.5!skip
-plugins/modules/appliance_localaccounts_info.py compile-3.5!skip
-plugins/modules/appliance_localaccounts_info.py future-import-boilerplate!skip
-plugins/modules/appliance_localaccounts_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_localaccounts_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_localaccounts_info.py validate-modules:missing-main-call
-plugins/modules/appliance_access_consolecli_info.py import-2.6!skip
-plugins/modules/appliance_access_consolecli_info.py compile-2.6!skip
-plugins/modules/appliance_access_consolecli_info.py import-2.7!skip
-plugins/modules/appliance_access_consolecli_info.py compile-2.7!skip
-plugins/modules/appliance_access_consolecli_info.py import-3.5!skip
-plugins/modules/appliance_access_consolecli_info.py compile-3.5!skip
-plugins/modules/appliance_access_consolecli_info.py future-import-boilerplate!skip
-plugins/modules/appliance_access_consolecli_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_access_consolecli_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_access_consolecli_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_cdrom.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_cdrom.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_cdrom.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_cdrom.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_cdrom.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_cdrom.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_cdrom.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_cdrom.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_cdrom.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_cdrom.py validate-modules:missing-main-call
-plugins/modules/content_locallibrary.py import-2.6!skip
-plugins/modules/content_locallibrary.py compile-2.6!skip
-plugins/modules/content_locallibrary.py import-2.7!skip
-plugins/modules/content_locallibrary.py compile-2.7!skip
-plugins/modules/content_locallibrary.py import-3.5!skip
-plugins/modules/content_locallibrary.py compile-3.5!skip
-plugins/modules/content_locallibrary.py future-import-boilerplate!skip
-plugins/modules/content_locallibrary.py metaclass-boilerplate!skip
-plugins/modules/content_locallibrary.py validate-modules:missing-if-name-main
-plugins/modules/content_locallibrary.py validate-modules:missing-main-call
-plugins/modules/appliance_update_info.py import-2.6!skip
-plugins/modules/appliance_update_info.py compile-2.6!skip
-plugins/modules/appliance_update_info.py import-2.7!skip
-plugins/modules/appliance_update_info.py compile-2.7!skip
-plugins/modules/appliance_update_info.py import-3.5!skip
-plugins/modules/appliance_update_info.py compile-3.5!skip
-plugins/modules/appliance_update_info.py future-import-boilerplate!skip
-plugins/modules/appliance_update_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_update_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_update_info.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_dns_hostname.py import-2.6!skip
-plugins/modules/appliance_networking_dns_hostname.py compile-2.6!skip
-plugins/modules/appliance_networking_dns_hostname.py import-2.7!skip
-plugins/modules/appliance_networking_dns_hostname.py compile-2.7!skip
-plugins/modules/appliance_networking_dns_hostname.py import-3.5!skip
-plugins/modules/appliance_networking_dns_hostname.py compile-3.5!skip
-plugins/modules/appliance_networking_dns_hostname.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_dns_hostname.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_dns_hostname.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_dns_hostname.py validate-modules:missing-main-call
-plugins/modules/appliance_ntp_info.py import-2.6!skip
-plugins/modules/appliance_ntp_info.py compile-2.6!skip
-plugins/modules/appliance_ntp_info.py import-2.7!skip
-plugins/modules/appliance_ntp_info.py compile-2.7!skip
-plugins/modules/appliance_ntp_info.py import-3.5!skip
-plugins/modules/appliance_ntp_info.py compile-3.5!skip
-plugins/modules/appliance_ntp_info.py future-import-boilerplate!skip
-plugins/modules/appliance_ntp_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_ntp_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_ntp_info.py validate-modules:missing-main-call
-plugins/modules/appliance_access_consolecli.py import-2.6!skip
-plugins/modules/appliance_access_consolecli.py compile-2.6!skip
-plugins/modules/appliance_access_consolecli.py import-2.7!skip
-plugins/modules/appliance_access_consolecli.py compile-2.7!skip
-plugins/modules/appliance_access_consolecli.py import-3.5!skip
-plugins/modules/appliance_access_consolecli.py compile-3.5!skip
-plugins/modules/appliance_access_consolecli.py future-import-boilerplate!skip
-plugins/modules/appliance_access_consolecli.py metaclass-boilerplate!skip
-plugins/modules/appliance_access_consolecli.py validate-modules:missing-if-name-main
-plugins/modules/appliance_access_consolecli.py validate-modules:missing-main-call
-plugins/modules/vcenter_datacenter_info.py import-2.6!skip
-plugins/modules/vcenter_datacenter_info.py compile-2.6!skip
-plugins/modules/vcenter_datacenter_info.py import-2.7!skip
-plugins/modules/vcenter_datacenter_info.py compile-2.7!skip
-plugins/modules/vcenter_datacenter_info.py import-3.5!skip
-plugins/modules/vcenter_datacenter_info.py compile-3.5!skip
-plugins/modules/vcenter_datacenter_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_datacenter_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_datacenter_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_datacenter_info.py validate-modules:missing-main-call
-plugins/modules/appliance_system_version_info.py import-2.6!skip
-plugins/modules/appliance_system_version_info.py compile-2.6!skip
-plugins/modules/appliance_system_version_info.py import-2.7!skip
-plugins/modules/appliance_system_version_info.py compile-2.7!skip
-plugins/modules/appliance_system_version_info.py import-3.5!skip
-plugins/modules/appliance_system_version_info.py compile-3.5!skip
-plugins/modules/appliance_system_version_info.py future-import-boilerplate!skip
-plugins/modules/appliance_system_version_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_system_version_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_system_version_info.py validate-modules:missing-main-call
-plugins/modules/appliance_health_applmgmt_info.py import-2.6!skip
-plugins/modules/appliance_health_applmgmt_info.py compile-2.6!skip
-plugins/modules/appliance_health_applmgmt_info.py import-2.7!skip
-plugins/modules/appliance_health_applmgmt_info.py compile-2.7!skip
-plugins/modules/appliance_health_applmgmt_info.py import-3.5!skip
-plugins/modules/appliance_health_applmgmt_info.py compile-3.5!skip
-plugins/modules/appliance_health_applmgmt_info.py future-import-boilerplate!skip
-plugins/modules/appliance_health_applmgmt_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_health_applmgmt_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_health_applmgmt_info.py validate-modules:missing-main-call
-plugins/modules/appliance_system_storage_info.py import-2.6!skip
-plugins/modules/appliance_system_storage_info.py compile-2.6!skip
-plugins/modules/appliance_system_storage_info.py import-2.7!skip
-plugins/modules/appliance_system_storage_info.py compile-2.7!skip
-plugins/modules/appliance_system_storage_info.py import-3.5!skip
-plugins/modules/appliance_system_storage_info.py compile-3.5!skip
-plugins/modules/appliance_system_storage_info.py future-import-boilerplate!skip
-plugins/modules/appliance_system_storage_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_system_storage_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_system_storage_info.py validate-modules:missing-main-call
-plugins/modules/appliance_infraprofile_configs_info.py import-2.6!skip
-plugins/modules/appliance_infraprofile_configs_info.py compile-2.6!skip
-plugins/modules/appliance_infraprofile_configs_info.py import-2.7!skip
-plugins/modules/appliance_infraprofile_configs_info.py compile-2.7!skip
-plugins/modules/appliance_infraprofile_configs_info.py import-3.5!skip
-plugins/modules/appliance_infraprofile_configs_info.py compile-3.5!skip
-plugins/modules/appliance_infraprofile_configs_info.py future-import-boilerplate!skip
-plugins/modules/appliance_infraprofile_configs_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_infraprofile_configs_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_infraprofile_configs_info.py validate-modules:missing-main-call
-plugins/modules/appliance_access_shell_info.py import-2.6!skip
-plugins/modules/appliance_access_shell_info.py compile-2.6!skip
-plugins/modules/appliance_access_shell_info.py import-2.7!skip
-plugins/modules/appliance_access_shell_info.py compile-2.7!skip
-plugins/modules/appliance_access_shell_info.py import-3.5!skip
-plugins/modules/appliance_access_shell_info.py compile-3.5!skip
-plugins/modules/appliance_access_shell_info.py future-import-boilerplate!skip
-plugins/modules/appliance_access_shell_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_access_shell_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_access_shell_info.py validate-modules:missing-main-call
-plugins/modules/appliance_health_mem_info.py import-2.6!skip
-plugins/modules/appliance_health_mem_info.py compile-2.6!skip
-plugins/modules/appliance_health_mem_info.py import-2.7!skip
-plugins/modules/appliance_health_mem_info.py compile-2.7!skip
-plugins/modules/appliance_health_mem_info.py import-3.5!skip
-plugins/modules/appliance_health_mem_info.py compile-3.5!skip
-plugins/modules/appliance_health_mem_info.py future-import-boilerplate!skip
-plugins/modules/appliance_health_mem_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_health_mem_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_health_mem_info.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_interfaces_ipv4.py import-2.6!skip
-plugins/modules/appliance_networking_interfaces_ipv4.py compile-2.6!skip
-plugins/modules/appliance_networking_interfaces_ipv4.py import-2.7!skip
-plugins/modules/appliance_networking_interfaces_ipv4.py compile-2.7!skip
-plugins/modules/appliance_networking_interfaces_ipv4.py import-3.5!skip
-plugins/modules/appliance_networking_interfaces_ipv4.py compile-3.5!skip
-plugins/modules/appliance_networking_interfaces_ipv4.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_interfaces_ipv4.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_interfaces_ipv4.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_interfaces_ipv4.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py validate-modules:missing-main-call
-plugins/modules/appliance_localaccounts_globalpolicy.py import-2.6!skip
-plugins/modules/appliance_localaccounts_globalpolicy.py compile-2.6!skip
-plugins/modules/appliance_localaccounts_globalpolicy.py import-2.7!skip
-plugins/modules/appliance_localaccounts_globalpolicy.py compile-2.7!skip
-plugins/modules/appliance_localaccounts_globalpolicy.py import-3.5!skip
-plugins/modules/appliance_localaccounts_globalpolicy.py compile-3.5!skip
-plugins/modules/appliance_localaccounts_globalpolicy.py future-import-boilerplate!skip
-plugins/modules/appliance_localaccounts_globalpolicy.py metaclass-boilerplate!skip
-plugins/modules/appliance_localaccounts_globalpolicy.py validate-modules:missing-if-name-main
-plugins/modules/appliance_localaccounts_globalpolicy.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_guest_operations_info.py import-2.6!skip
-plugins/modules/vcenter_vm_guest_operations_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_guest_operations_info.py import-2.7!skip
-plugins/modules/vcenter_vm_guest_operations_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_guest_operations_info.py import-3.5!skip
-plugins/modules/vcenter_vm_guest_operations_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_guest_operations_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_guest_operations_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_guest_operations_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_guest_operations_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vmtemplate_libraryitems_info.py import-2.6!skip
-plugins/modules/vcenter_vmtemplate_libraryitems_info.py compile-2.6!skip
-plugins/modules/vcenter_vmtemplate_libraryitems_info.py import-2.7!skip
-plugins/modules/vcenter_vmtemplate_libraryitems_info.py compile-2.7!skip
-plugins/modules/vcenter_vmtemplate_libraryitems_info.py import-3.5!skip
-plugins/modules/vcenter_vmtemplate_libraryitems_info.py compile-3.5!skip
-plugins/modules/vcenter_vmtemplate_libraryitems_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vmtemplate_libraryitems_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vmtemplate_libraryitems_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vmtemplate_libraryitems_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_guest_filesystem_directories.py import-2.6!skip
-plugins/modules/vcenter_vm_guest_filesystem_directories.py compile-2.6!skip
-plugins/modules/vcenter_vm_guest_filesystem_directories.py import-2.7!skip
-plugins/modules/vcenter_vm_guest_filesystem_directories.py compile-2.7!skip
-plugins/modules/vcenter_vm_guest_filesystem_directories.py import-3.5!skip
-plugins/modules/vcenter_vm_guest_filesystem_directories.py compile-3.5!skip
-plugins/modules/vcenter_vm_guest_filesystem_directories.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_guest_filesystem_directories.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_guest_filesystem_directories.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_guest_filesystem_directories.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_cdrom_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_cdrom_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_cdrom_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_cdrom_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_cdrom_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_cdrom_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_cdrom_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_cdrom_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_cdrom_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_cdrom_info.py validate-modules:missing-main-call
-plugins/modules/appliance_monitoring_query.py import-2.6!skip
-plugins/modules/appliance_monitoring_query.py compile-2.6!skip
-plugins/modules/appliance_monitoring_query.py import-2.7!skip
-plugins/modules/appliance_monitoring_query.py compile-2.7!skip
-plugins/modules/appliance_monitoring_query.py import-3.5!skip
-plugins/modules/appliance_monitoring_query.py compile-3.5!skip
-plugins/modules/appliance_monitoring_query.py future-import-boilerplate!skip
-plugins/modules/appliance_monitoring_query.py metaclass-boilerplate!skip
-plugins/modules/appliance_monitoring_query.py validate-modules:missing-if-name-main
-plugins/modules/appliance_monitoring_query.py validate-modules:missing-main-call
-plugins/modules/vcenter_resourcepool.py import-2.6!skip
-plugins/modules/vcenter_resourcepool.py compile-2.6!skip
-plugins/modules/vcenter_resourcepool.py import-2.7!skip
-plugins/modules/vcenter_resourcepool.py compile-2.7!skip
-plugins/modules/vcenter_resourcepool.py import-3.5!skip
-plugins/modules/vcenter_resourcepool.py compile-3.5!skip
-plugins/modules/vcenter_resourcepool.py future-import-boilerplate!skip
-plugins/modules/vcenter_resourcepool.py metaclass-boilerplate!skip
-plugins/modules/vcenter_resourcepool.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_resourcepool.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_memory.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_memory.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_memory.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_memory.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_memory.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_memory.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_memory.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_memory.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_memory.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_memory.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_proxy.py import-2.6!skip
-plugins/modules/appliance_networking_proxy.py compile-2.6!skip
-plugins/modules/appliance_networking_proxy.py import-2.7!skip
-plugins/modules/appliance_networking_proxy.py compile-2.7!skip
-plugins/modules/appliance_networking_proxy.py import-3.5!skip
-plugins/modules/appliance_networking_proxy.py compile-3.5!skip
-plugins/modules/appliance_networking_proxy.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_proxy.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_proxy.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_proxy.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_dns_servers_info.py import-2.6!skip
-plugins/modules/appliance_networking_dns_servers_info.py compile-2.6!skip
-plugins/modules/appliance_networking_dns_servers_info.py import-2.7!skip
-plugins/modules/appliance_networking_dns_servers_info.py compile-2.7!skip
-plugins/modules/appliance_networking_dns_servers_info.py import-3.5!skip
-plugins/modules/appliance_networking_dns_servers_info.py compile-3.5!skip
-plugins/modules/appliance_networking_dns_servers_info.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_dns_servers_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_dns_servers_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_dns_servers_info.py validate-modules:missing-main-call
-plugins/modules/appliance_health_system_info.py import-2.6!skip
-plugins/modules/appliance_health_system_info.py compile-2.6!skip
-plugins/modules/appliance_health_system_info.py import-2.7!skip
-plugins/modules/appliance_health_system_info.py compile-2.7!skip
-plugins/modules/appliance_health_system_info.py import-3.5!skip
-plugins/modules/appliance_health_system_info.py compile-3.5!skip
-plugins/modules/appliance_health_system_info.py future-import-boilerplate!skip
-plugins/modules/appliance_health_system_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_health_system_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_health_system_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_ethernet_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_ethernet_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_ethernet_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_ethernet_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_ethernet_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_ethernet_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_ethernet_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_ethernet_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_ethernet_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_ethernet_info.py validate-modules:missing-main-call
-plugins/modules/appliance_networking.py import-2.6!skip
-plugins/modules/appliance_networking.py compile-2.6!skip
-plugins/modules/appliance_networking.py import-2.7!skip
-plugins/modules/appliance_networking.py compile-2.7!skip
-plugins/modules/appliance_networking.py import-3.5!skip
-plugins/modules/appliance_networking.py compile-3.5!skip
-plugins/modules/appliance_networking.py future-import-boilerplate!skip
-plugins/modules/appliance_networking.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_floppy_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_floppy_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_floppy_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_floppy_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_floppy_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_floppy_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_floppy_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_floppy_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_floppy_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_floppy_info.py validate-modules:missing-main-call
-plugins/modules/content_configuration_info.py import-2.6!skip
-plugins/modules/content_configuration_info.py compile-2.6!skip
-plugins/modules/content_configuration_info.py import-2.7!skip
-plugins/modules/content_configuration_info.py compile-2.7!skip
-plugins/modules/content_configuration_info.py import-3.5!skip
-plugins/modules/content_configuration_info.py compile-3.5!skip
-plugins/modules/content_configuration_info.py future-import-boilerplate!skip
-plugins/modules/content_configuration_info.py metaclass-boilerplate!skip
-plugins/modules/content_configuration_info.py validate-modules:missing-if-name-main
-plugins/modules/content_configuration_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_tools_installer.py import-2.6!skip
-plugins/modules/vcenter_vm_tools_installer.py compile-2.6!skip
-plugins/modules/vcenter_vm_tools_installer.py import-2.7!skip
-plugins/modules/vcenter_vm_tools_installer.py compile-2.7!skip
-plugins/modules/vcenter_vm_tools_installer.py import-3.5!skip
-plugins/modules/vcenter_vm_tools_installer.py compile-3.5!skip
-plugins/modules/vcenter_vm_tools_installer.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_tools_installer.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_tools_installer.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_tools_installer.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_cpu.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_cpu.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_cpu.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_cpu.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_cpu.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_cpu.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_cpu.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_cpu.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_cpu.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_cpu.py validate-modules:missing-main-call
-plugins/modules/vcenter_folder_info.py import-2.6!skip
-plugins/modules/vcenter_folder_info.py compile-2.6!skip
-plugins/modules/vcenter_folder_info.py import-2.7!skip
-plugins/modules/vcenter_folder_info.py compile-2.7!skip
-plugins/modules/vcenter_folder_info.py import-3.5!skip
-plugins/modules/vcenter_folder_info.py compile-3.5!skip
-plugins/modules/vcenter_folder_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_folder_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_folder_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_folder_info.py validate-modules:missing-main-call
-plugins/modules/appliance_system_time_info.py import-2.6!skip
-plugins/modules/appliance_system_time_info.py compile-2.6!skip
-plugins/modules/appliance_system_time_info.py import-2.7!skip
-plugins/modules/appliance_system_time_info.py compile-2.7!skip
-plugins/modules/appliance_system_time_info.py import-3.5!skip
-plugins/modules/appliance_system_time_info.py compile-3.5!skip
-plugins/modules/appliance_system_time_info.py future-import-boilerplate!skip
-plugins/modules/appliance_system_time_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_system_time_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_system_time_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_guest_localfilesystem_info.py import-2.6!skip
-plugins/modules/vcenter_vm_guest_localfilesystem_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_guest_localfilesystem_info.py import-2.7!skip
-plugins/modules/vcenter_vm_guest_localfilesystem_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_guest_localfilesystem_info.py import-3.5!skip
-plugins/modules/vcenter_vm_guest_localfilesystem_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_guest_localfilesystem_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_guest_localfilesystem_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_guest_localfilesystem_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_guest_localfilesystem_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_info.py validate-modules:missing-main-call
-plugins/modules/appliance_health_load_info.py import-2.6!skip
-plugins/modules/appliance_health_load_info.py compile-2.6!skip
-plugins/modules/appliance_health_load_info.py import-2.7!skip
-plugins/modules/appliance_health_load_info.py compile-2.7!skip
-plugins/modules/appliance_health_load_info.py import-3.5!skip
-plugins/modules/appliance_health_load_info.py compile-3.5!skip
-plugins/modules/appliance_health_load_info.py future-import-boilerplate!skip
-plugins/modules/appliance_health_load_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_health_load_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_health_load_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_tools.py import-2.6!skip
-plugins/modules/vcenter_vm_tools.py compile-2.6!skip
-plugins/modules/vcenter_vm_tools.py import-2.7!skip
-plugins/modules/vcenter_vm_tools.py compile-2.7!skip
-plugins/modules/vcenter_vm_tools.py import-3.5!skip
-plugins/modules/vcenter_vm_tools.py compile-3.5!skip
-plugins/modules/vcenter_vm_tools.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_tools.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_tools.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_tools.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_guest_power.py import-2.6!skip
-plugins/modules/vcenter_vm_guest_power.py compile-2.6!skip
-plugins/modules/vcenter_vm_guest_power.py import-2.7!skip
-plugins/modules/vcenter_vm_guest_power.py compile-2.7!skip
-plugins/modules/vcenter_vm_guest_power.py import-3.5!skip
-plugins/modules/vcenter_vm_guest_power.py compile-3.5!skip
-plugins/modules/vcenter_vm_guest_power.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_guest_power.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_guest_power.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_guest_power.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_info.py import-2.6!skip
-plugins/modules/vcenter_vm_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_info.py import-2.7!skip
-plugins/modules/vcenter_vm_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_info.py import-3.5!skip
-plugins/modules/vcenter_vm_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_info.py validate-modules:missing-main-call
-plugins/modules/appliance_infraprofile_configs.py import-2.6!skip
-plugins/modules/appliance_infraprofile_configs.py compile-2.6!skip
-plugins/modules/appliance_infraprofile_configs.py import-2.7!skip
-plugins/modules/appliance_infraprofile_configs.py compile-2.7!skip
-plugins/modules/appliance_infraprofile_configs.py import-3.5!skip
-plugins/modules/appliance_infraprofile_configs.py compile-3.5!skip
-plugins/modules/appliance_infraprofile_configs.py future-import-boilerplate!skip
-plugins/modules/appliance_infraprofile_configs.py metaclass-boilerplate!skip
-plugins/modules/appliance_infraprofile_configs.py validate-modules:missing-if-name-main
-plugins/modules/appliance_infraprofile_configs.py validate-modules:missing-main-call
-plugins/modules/content_subscribedlibrary.py import-2.6!skip
-plugins/modules/content_subscribedlibrary.py compile-2.6!skip
-plugins/modules/content_subscribedlibrary.py import-2.7!skip
-plugins/modules/content_subscribedlibrary.py compile-2.7!skip
-plugins/modules/content_subscribedlibrary.py import-3.5!skip
-plugins/modules/content_subscribedlibrary.py compile-3.5!skip
-plugins/modules/content_subscribedlibrary.py future-import-boilerplate!skip
-plugins/modules/content_subscribedlibrary.py metaclass-boilerplate!skip
-plugins/modules/content_subscribedlibrary.py validate-modules:missing-if-name-main
-plugins/modules/content_subscribedlibrary.py validate-modules:missing-main-call
-plugins/modules/appliance_system_globalfips_info.py import-2.6!skip
-plugins/modules/appliance_system_globalfips_info.py compile-2.6!skip
-plugins/modules/appliance_system_globalfips_info.py import-2.7!skip
-plugins/modules/appliance_system_globalfips_info.py compile-2.7!skip
-plugins/modules/appliance_system_globalfips_info.py import-3.5!skip
-plugins/modules/appliance_system_globalfips_info.py compile-3.5!skip
-plugins/modules/appliance_system_globalfips_info.py future-import-boilerplate!skip
-plugins/modules/appliance_system_globalfips_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_system_globalfips_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_system_globalfips_info.py validate-modules:missing-main-call
-plugins/modules/appliance_services_info.py import-2.6!skip
-plugins/modules/appliance_services_info.py compile-2.6!skip
-plugins/modules/appliance_services_info.py import-2.7!skip
-plugins/modules/appliance_services_info.py compile-2.7!skip
-plugins/modules/appliance_services_info.py import-3.5!skip
-plugins/modules/appliance_services_info.py compile-3.5!skip
-plugins/modules/appliance_services_info.py future-import-boilerplate!skip
-plugins/modules/appliance_services_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_services_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_services_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_storage_policy_compliance.py import-2.6!skip
-plugins/modules/vcenter_vm_storage_policy_compliance.py compile-2.6!skip
-plugins/modules/vcenter_vm_storage_policy_compliance.py import-2.7!skip
-plugins/modules/vcenter_vm_storage_policy_compliance.py compile-2.7!skip
-plugins/modules/vcenter_vm_storage_policy_compliance.py import-3.5!skip
-plugins/modules/vcenter_vm_storage_policy_compliance.py compile-3.5!skip
-plugins/modules/vcenter_vm_storage_policy_compliance.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_storage_policy_compliance.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_storage_policy_compliance.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_storage_policy_compliance.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_serial_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_serial_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_serial_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_serial_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_serial_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_serial_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_serial_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_serial_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_serial_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_serial_info.py validate-modules:missing-main-call
-plugins/modules/content_configuration.py import-2.6!skip
-plugins/modules/content_configuration.py compile-2.6!skip
-plugins/modules/content_configuration.py import-2.7!skip
-plugins/modules/content_configuration.py compile-2.7!skip
-plugins/modules/content_configuration.py import-3.5!skip
-plugins/modules/content_configuration.py compile-3.5!skip
-plugins/modules/content_configuration.py future-import-boilerplate!skip
-plugins/modules/content_configuration.py metaclass-boilerplate!skip
-plugins/modules/content_configuration.py validate-modules:missing-if-name-main
-plugins/modules/content_configuration.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_dns_hostname_info.py import-2.6!skip
-plugins/modules/appliance_networking_dns_hostname_info.py compile-2.6!skip
-plugins/modules/appliance_networking_dns_hostname_info.py import-2.7!skip
-plugins/modules/appliance_networking_dns_hostname_info.py compile-2.7!skip
-plugins/modules/appliance_networking_dns_hostname_info.py import-3.5!skip
-plugins/modules/appliance_networking_dns_hostname_info.py compile-3.5!skip
-plugins/modules/appliance_networking_dns_hostname_info.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_dns_hostname_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_dns_hostname_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_dns_hostname_info.py validate-modules:missing-main-call
-plugins/modules/content_locallibrary_info.py import-2.6!skip
-plugins/modules/content_locallibrary_info.py compile-2.6!skip
-plugins/modules/content_locallibrary_info.py import-2.7!skip
-plugins/modules/content_locallibrary_info.py compile-2.7!skip
-plugins/modules/content_locallibrary_info.py import-3.5!skip
-plugins/modules/content_locallibrary_info.py compile-3.5!skip
-plugins/modules/content_locallibrary_info.py future-import-boilerplate!skip
-plugins/modules/content_locallibrary_info.py metaclass-boilerplate!skip
-plugins/modules/content_locallibrary_info.py validate-modules:missing-if-name-main
-plugins/modules/content_locallibrary_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_storage_policy.py import-2.6!skip
-plugins/modules/vcenter_vm_storage_policy.py compile-2.6!skip
-plugins/modules/vcenter_vm_storage_policy.py import-2.7!skip
-plugins/modules/vcenter_vm_storage_policy.py compile-2.7!skip
-plugins/modules/vcenter_vm_storage_policy.py import-3.5!skip
-plugins/modules/vcenter_vm_storage_policy.py compile-3.5!skip
-plugins/modules/vcenter_vm_storage_policy.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_storage_policy.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_storage_policy.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_storage_policy.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_noproxy_info.py import-2.6!skip
-plugins/modules/appliance_networking_noproxy_info.py compile-2.6!skip
-plugins/modules/appliance_networking_noproxy_info.py import-2.7!skip
-plugins/modules/appliance_networking_noproxy_info.py compile-2.7!skip
-plugins/modules/appliance_networking_noproxy_info.py import-3.5!skip
-plugins/modules/appliance_networking_noproxy_info.py compile-3.5!skip
-plugins/modules/appliance_networking_noproxy_info.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_noproxy_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_noproxy_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_noproxy_info.py validate-modules:missing-main-call
-plugins/modules/appliance_access_ssh.py import-2.6!skip
-plugins/modules/appliance_access_ssh.py compile-2.6!skip
-plugins/modules/appliance_access_ssh.py import-2.7!skip
-plugins/modules/appliance_access_ssh.py compile-2.7!skip
-plugins/modules/appliance_access_ssh.py import-3.5!skip
-plugins/modules/appliance_access_ssh.py compile-3.5!skip
-plugins/modules/appliance_access_ssh.py future-import-boilerplate!skip
-plugins/modules/appliance_access_ssh.py metaclass-boilerplate!skip
-plugins/modules/appliance_access_ssh.py validate-modules:missing-if-name-main
-plugins/modules/appliance_access_ssh.py validate-modules:missing-main-call
-plugins/modules/appliance_health_softwarepackages_info.py import-2.6!skip
-plugins/modules/appliance_health_softwarepackages_info.py compile-2.6!skip
-plugins/modules/appliance_health_softwarepackages_info.py import-2.7!skip
-plugins/modules/appliance_health_softwarepackages_info.py compile-2.7!skip
-plugins/modules/appliance_health_softwarepackages_info.py import-3.5!skip
-plugins/modules/appliance_health_softwarepackages_info.py compile-3.5!skip
-plugins/modules/appliance_health_softwarepackages_info.py future-import-boilerplate!skip
-plugins/modules/appliance_health_softwarepackages_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_health_softwarepackages_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_health_softwarepackages_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_guest_networking_interfaces_info.py import-2.6!skip
-plugins/modules/vcenter_vm_guest_networking_interfaces_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_guest_networking_interfaces_info.py import-2.7!skip
-plugins/modules/vcenter_vm_guest_networking_interfaces_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_guest_networking_interfaces_info.py import-3.5!skip
-plugins/modules/vcenter_vm_guest_networking_interfaces_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_guest_networking_interfaces_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_guest_networking_interfaces_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_guest_networking_interfaces_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_guest_networking_interfaces_info.py validate-modules:missing-main-call
-plugins/modules/appliance_health_database_info.py import-2.6!skip
-plugins/modules/appliance_health_database_info.py compile-2.6!skip
-plugins/modules/appliance_health_database_info.py import-2.7!skip
-plugins/modules/appliance_health_database_info.py compile-2.7!skip
-plugins/modules/appliance_health_database_info.py import-3.5!skip
-plugins/modules/appliance_health_database_info.py compile-3.5!skip
-plugins/modules/appliance_health_database_info.py future-import-boilerplate!skip
-plugins/modules/appliance_health_database_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_health_database_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_health_database_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_adapter_sata.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_adapter_sata.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_firewall_inbound_info.py import-2.6!skip
-plugins/modules/appliance_networking_firewall_inbound_info.py compile-2.6!skip
-plugins/modules/appliance_networking_firewall_inbound_info.py import-2.7!skip
-plugins/modules/appliance_networking_firewall_inbound_info.py compile-2.7!skip
-plugins/modules/appliance_networking_firewall_inbound_info.py import-3.5!skip
-plugins/modules/appliance_networking_firewall_inbound_info.py compile-3.5!skip
-plugins/modules/appliance_networking_firewall_inbound_info.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_firewall_inbound_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_firewall_inbound_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_firewall_inbound_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_memory_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_memory_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_memory_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_memory_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_memory_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_memory_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_memory_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_memory_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_memory_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_memory_info.py validate-modules:missing-main-call
-plugins/modules/content_library_item_info.py import-2.6!skip
-plugins/modules/content_library_item_info.py compile-2.6!skip
-plugins/modules/content_library_item_info.py import-2.7!skip
-plugins/modules/content_library_item_info.py compile-2.7!skip
-plugins/modules/content_library_item_info.py import-3.5!skip
-plugins/modules/content_library_item_info.py compile-3.5!skip
-plugins/modules/content_library_item_info.py future-import-boilerplate!skip
-plugins/modules/content_library_item_info.py metaclass-boilerplate!skip
-plugins/modules/content_library_item_info.py validate-modules:missing-if-name-main
-plugins/modules/content_library_item_info.py validate-modules:missing-main-call
-plugins/modules/appliance_vmon_service_info.py import-2.6!skip
-plugins/modules/appliance_vmon_service_info.py compile-2.6!skip
-plugins/modules/appliance_vmon_service_info.py import-2.7!skip
-plugins/modules/appliance_vmon_service_info.py compile-2.7!skip
-plugins/modules/appliance_vmon_service_info.py import-3.5!skip
-plugins/modules/appliance_vmon_service_info.py compile-3.5!skip
-plugins/modules/appliance_vmon_service_info.py future-import-boilerplate!skip
-plugins/modules/appliance_vmon_service_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_vmon_service_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_vmon_service_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_boot_device.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_boot_device.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_boot_device.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_boot_device.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_boot_device.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_boot_device.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_boot_device.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_boot_device.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_boot_device.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_boot_device.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_noproxy.py import-2.6!skip
-plugins/modules/appliance_networking_noproxy.py compile-2.6!skip
-plugins/modules/appliance_networking_noproxy.py import-2.7!skip
-plugins/modules/appliance_networking_noproxy.py compile-2.7!skip
-plugins/modules/appliance_networking_noproxy.py import-3.5!skip
-plugins/modules/appliance_networking_noproxy.py compile-3.5!skip
-plugins/modules/appliance_networking_noproxy.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_noproxy.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_noproxy.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_noproxy.py validate-modules:missing-main-call
-plugins/modules/appliance_access_dcui_info.py import-2.6!skip
-plugins/modules/appliance_access_dcui_info.py compile-2.6!skip
-plugins/modules/appliance_access_dcui_info.py import-2.7!skip
-plugins/modules/appliance_access_dcui_info.py compile-2.7!skip
-plugins/modules/appliance_access_dcui_info.py import-3.5!skip
-plugins/modules/appliance_access_dcui_info.py compile-3.5!skip
-plugins/modules/appliance_access_dcui_info.py future-import-boilerplate!skip
-plugins/modules/appliance_access_dcui_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_access_dcui_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_access_dcui_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_disk.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_disk.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_disk.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_disk.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_disk.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_disk.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_disk.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_disk.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_disk.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_disk.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_interfaces_ipv6_info.py import-2.6!skip
-plugins/modules/appliance_networking_interfaces_ipv6_info.py compile-2.6!skip
-plugins/modules/appliance_networking_interfaces_ipv6_info.py import-2.7!skip
-plugins/modules/appliance_networking_interfaces_ipv6_info.py compile-2.7!skip
-plugins/modules/appliance_networking_interfaces_ipv6_info.py import-3.5!skip
-plugins/modules/appliance_networking_interfaces_ipv6_info.py compile-3.5!skip
-plugins/modules/appliance_networking_interfaces_ipv6_info.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_interfaces_ipv6_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_interfaces_ipv6_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_interfaces_ipv6_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_ovf_libraryitem.py import-2.6!skip
-plugins/modules/vcenter_ovf_libraryitem.py compile-2.6!skip
-plugins/modules/vcenter_ovf_libraryitem.py import-2.7!skip
-plugins/modules/vcenter_ovf_libraryitem.py compile-2.7!skip
-plugins/modules/vcenter_ovf_libraryitem.py import-3.5!skip
-plugins/modules/vcenter_ovf_libraryitem.py compile-3.5!skip
-plugins/modules/vcenter_ovf_libraryitem.py future-import-boilerplate!skip
-plugins/modules/vcenter_ovf_libraryitem.py metaclass-boilerplate!skip
-plugins/modules/vcenter_ovf_libraryitem.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_ovf_libraryitem.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_dns_domains_info.py import-2.6!skip
-plugins/modules/appliance_networking_dns_domains_info.py compile-2.6!skip
-plugins/modules/appliance_networking_dns_domains_info.py import-2.7!skip
-plugins/modules/appliance_networking_dns_domains_info.py compile-2.7!skip
-plugins/modules/appliance_networking_dns_domains_info.py import-3.5!skip
-plugins/modules/appliance_networking_dns_domains_info.py compile-3.5!skip
-plugins/modules/appliance_networking_dns_domains_info.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_dns_domains_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_dns_domains_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_dns_domains_info.py validate-modules:missing-main-call
-plugins/modules/appliance_system_globalfips.py import-2.6!skip
-plugins/modules/appliance_system_globalfips.py compile-2.6!skip
-plugins/modules/appliance_system_globalfips.py import-2.7!skip
-plugins/modules/appliance_system_globalfips.py compile-2.7!skip
-plugins/modules/appliance_system_globalfips.py import-3.5!skip
-plugins/modules/appliance_system_globalfips.py compile-3.5!skip
-plugins/modules/appliance_system_globalfips.py future-import-boilerplate!skip
-plugins/modules/appliance_system_globalfips.py metaclass-boilerplate!skip
-plugins/modules/appliance_system_globalfips.py validate-modules:missing-if-name-main
-plugins/modules/appliance_system_globalfips.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_serial.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_serial.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_serial.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_serial.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_serial.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_serial.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_serial.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_serial.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_serial.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_serial.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_firewall_inbound.py import-2.6!skip
-plugins/modules/appliance_networking_firewall_inbound.py compile-2.6!skip
-plugins/modules/appliance_networking_firewall_inbound.py import-2.7!skip
-plugins/modules/appliance_networking_firewall_inbound.py compile-2.7!skip
-plugins/modules/appliance_networking_firewall_inbound.py import-3.5!skip
-plugins/modules/appliance_networking_firewall_inbound.py compile-3.5!skip
-plugins/modules/appliance_networking_firewall_inbound.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_firewall_inbound.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_firewall_inbound.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_firewall_inbound.py validate-modules:missing-main-call
-plugins/modules/appliance_shutdown.py import-2.6!skip
-plugins/modules/appliance_shutdown.py compile-2.6!skip
-plugins/modules/appliance_shutdown.py import-2.7!skip
-plugins/modules/appliance_shutdown.py compile-2.7!skip
-plugins/modules/appliance_shutdown.py import-3.5!skip
-plugins/modules/appliance_shutdown.py compile-3.5!skip
-plugins/modules/appliance_shutdown.py future-import-boilerplate!skip
-plugins/modules/appliance_shutdown.py metaclass-boilerplate!skip
-plugins/modules/appliance_shutdown.py validate-modules:missing-if-name-main
-plugins/modules/appliance_shutdown.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_guest_networking_info.py import-2.6!skip
-plugins/modules/vcenter_vm_guest_networking_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_guest_networking_info.py import-2.7!skip
-plugins/modules/vcenter_vm_guest_networking_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_guest_networking_info.py import-3.5!skip
-plugins/modules/vcenter_vm_guest_networking_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_guest_networking_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_guest_networking_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_guest_networking_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_guest_networking_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_ethernet.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_ethernet.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_ethernet.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_ethernet.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_ethernet.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_ethernet.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_ethernet.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_ethernet.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_ethernet.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_ethernet.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_parallel_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_parallel_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_parallel_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_parallel_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_parallel_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_parallel_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_parallel_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_parallel_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_parallel_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_parallel_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_host_info.py import-2.6!skip
-plugins/modules/vcenter_host_info.py compile-2.6!skip
-plugins/modules/vcenter_host_info.py import-2.7!skip
-plugins/modules/vcenter_host_info.py compile-2.7!skip
-plugins/modules/vcenter_host_info.py import-3.5!skip
-plugins/modules/vcenter_host_info.py compile-3.5!skip
-plugins/modules/vcenter_host_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_host_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_host_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_host_info.py validate-modules:missing-main-call
-plugins/modules/appliance_timesync.py import-2.6!skip
-plugins/modules/appliance_timesync.py compile-2.6!skip
-plugins/modules/appliance_timesync.py import-2.7!skip
-plugins/modules/appliance_timesync.py compile-2.7!skip
-plugins/modules/appliance_timesync.py import-3.5!skip
-plugins/modules/appliance_timesync.py compile-3.5!skip
-plugins/modules/appliance_timesync.py future-import-boilerplate!skip
-plugins/modules/appliance_timesync.py metaclass-boilerplate!skip
-plugins/modules/appliance_timesync.py validate-modules:missing-if-name-main
-plugins/modules/appliance_timesync.py validate-modules:missing-main-call
-plugins/modules/vcenter_network_info.py import-2.6!skip
-plugins/modules/vcenter_network_info.py compile-2.6!skip
-plugins/modules/vcenter_network_info.py import-2.7!skip
-plugins/modules/vcenter_network_info.py compile-2.7!skip
-plugins/modules/vcenter_network_info.py import-3.5!skip
-plugins/modules/vcenter_network_info.py compile-3.5!skip
-plugins/modules/vcenter_network_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_network_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_network_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_network_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_boot.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_boot.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_boot.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_boot.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_boot.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_boot.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_boot.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_boot.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_boot.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_boot.py validate-modules:missing-main-call
-plugins/modules/appliance_shutdown_info.py import-2.6!skip
-plugins/modules/appliance_shutdown_info.py compile-2.6!skip
-plugins/modules/appliance_shutdown_info.py import-2.7!skip
-plugins/modules/appliance_shutdown_info.py compile-2.7!skip
-plugins/modules/appliance_shutdown_info.py import-3.5!skip
-plugins/modules/appliance_shutdown_info.py compile-3.5!skip
-plugins/modules/appliance_shutdown_info.py future-import-boilerplate!skip
-plugins/modules/appliance_shutdown_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_shutdown_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_shutdown_info.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_dns_servers.py import-2.6!skip
-plugins/modules/appliance_networking_dns_servers.py compile-2.6!skip
-plugins/modules/appliance_networking_dns_servers.py import-2.7!skip
-plugins/modules/appliance_networking_dns_servers.py compile-2.7!skip
-plugins/modules/appliance_networking_dns_servers.py import-3.5!skip
-plugins/modules/appliance_networking_dns_servers.py compile-3.5!skip
-plugins/modules/appliance_networking_dns_servers.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_dns_servers.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_dns_servers.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_dns_servers.py validate-modules:missing-main-call
-plugins/modules/vcenter_cluster_info.py import-2.6!skip
-plugins/modules/vcenter_cluster_info.py compile-2.6!skip
-plugins/modules/vcenter_cluster_info.py import-2.7!skip
-plugins/modules/vcenter_cluster_info.py compile-2.7!skip
-plugins/modules/vcenter_cluster_info.py import-3.5!skip
-plugins/modules/vcenter_cluster_info.py compile-3.5!skip
-plugins/modules/vcenter_cluster_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_cluster_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_cluster_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_cluster_info.py validate-modules:missing-main-call
-plugins/modules/appliance_localaccounts_globalpolicy_info.py import-2.6!skip
-plugins/modules/appliance_localaccounts_globalpolicy_info.py compile-2.6!skip
-plugins/modules/appliance_localaccounts_globalpolicy_info.py import-2.7!skip
-plugins/modules/appliance_localaccounts_globalpolicy_info.py compile-2.7!skip
-plugins/modules/appliance_localaccounts_globalpolicy_info.py import-3.5!skip
-plugins/modules/appliance_localaccounts_globalpolicy_info.py compile-3.5!skip
-plugins/modules/appliance_localaccounts_globalpolicy_info.py future-import-boilerplate!skip
-plugins/modules/appliance_localaccounts_globalpolicy_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_localaccounts_globalpolicy_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_localaccounts_globalpolicy_info.py validate-modules:missing-main-call
-plugins/modules/appliance_system_storage.py import-2.6!skip
-plugins/modules/appliance_system_storage.py compile-2.6!skip
-plugins/modules/appliance_system_storage.py import-2.7!skip
-plugins/modules/appliance_system_storage.py compile-2.7!skip
-plugins/modules/appliance_system_storage.py import-3.5!skip
-plugins/modules/appliance_system_storage.py compile-3.5!skip
-plugins/modules/appliance_system_storage.py future-import-boilerplate!skip
-plugins/modules/appliance_system_storage.py metaclass-boilerplate!skip
-plugins/modules/appliance_system_storage.py validate-modules:missing-if-name-main
-plugins/modules/appliance_system_storage.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_storage_policy_info.py import-2.6!skip
-plugins/modules/vcenter_vm_storage_policy_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_storage_policy_info.py import-2.7!skip
-plugins/modules/vcenter_vm_storage_policy_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_storage_policy_info.py import-3.5!skip
-plugins/modules/vcenter_vm_storage_policy_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_storage_policy_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_storage_policy_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_storage_policy_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_storage_policy_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm.py import-2.6!skip
-plugins/modules/vcenter_vm.py compile-2.6!skip
-plugins/modules/vcenter_vm.py import-2.7!skip
-plugins/modules/vcenter_vm.py compile-2.7!skip
-plugins/modules/vcenter_vm.py import-3.5!skip
-plugins/modules/vcenter_vm.py compile-3.5!skip
-plugins/modules/vcenter_vm.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_proxy_info.py import-2.6!skip
-plugins/modules/appliance_networking_proxy_info.py compile-2.6!skip
-plugins/modules/appliance_networking_proxy_info.py import-2.7!skip
-plugins/modules/appliance_networking_proxy_info.py compile-2.7!skip
-plugins/modules/appliance_networking_proxy_info.py import-3.5!skip
-plugins/modules/appliance_networking_proxy_info.py compile-3.5!skip
-plugins/modules/appliance_networking_proxy_info.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_proxy_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_proxy_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_proxy_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_power_info.py import-2.6!skip
-plugins/modules/vcenter_vm_power_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_power_info.py import-2.7!skip
-plugins/modules/vcenter_vm_power_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_power_info.py import-3.5!skip
-plugins/modules/vcenter_vm_power_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_power_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_power_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_power_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_power_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_boot_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_boot_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_boot_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_boot_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_boot_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_boot_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_boot_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_boot_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_boot_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_boot_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_tools_info.py import-2.6!skip
-plugins/modules/vcenter_vm_tools_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_tools_info.py import-2.7!skip
-plugins/modules/vcenter_vm_tools_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_tools_info.py import-3.5!skip
-plugins/modules/vcenter_vm_tools_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_tools_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_tools_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_tools_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_tools_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_cpu_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_cpu_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_cpu_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_cpu_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_cpu_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_cpu_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_cpu_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_cpu_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_cpu_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_cpu_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_tools_installer_info.py import-2.6!skip
-plugins/modules/vcenter_vm_tools_installer_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_tools_installer_info.py import-2.7!skip
-plugins/modules/vcenter_vm_tools_installer_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_tools_installer_info.py import-3.5!skip
-plugins/modules/vcenter_vm_tools_installer_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_tools_installer_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_tools_installer_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_tools_installer_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_tools_installer_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware.py validate-modules:missing-main-call
-plugins/modules/appliance_services.py import-2.6!skip
-plugins/modules/appliance_services.py compile-2.6!skip
-plugins/modules/appliance_services.py import-2.7!skip
-plugins/modules/appliance_services.py compile-2.7!skip
-plugins/modules/appliance_services.py import-3.5!skip
-plugins/modules/appliance_services.py compile-3.5!skip
-plugins/modules/appliance_services.py future-import-boilerplate!skip
-plugins/modules/appliance_services.py metaclass-boilerplate!skip
-plugins/modules/appliance_services.py validate-modules:missing-if-name-main
-plugins/modules/appliance_services.py validate-modules:missing-main-call
-plugins/modules/appliance_health_databasestorage_info.py import-2.6!skip
-plugins/modules/appliance_health_databasestorage_info.py compile-2.6!skip
-plugins/modules/appliance_health_databasestorage_info.py import-2.7!skip
-plugins/modules/appliance_health_databasestorage_info.py compile-2.7!skip
-plugins/modules/appliance_health_databasestorage_info.py import-3.5!skip
-plugins/modules/appliance_health_databasestorage_info.py compile-3.5!skip
-plugins/modules/appliance_health_databasestorage_info.py future-import-boilerplate!skip
-plugins/modules/appliance_health_databasestorage_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_health_databasestorage_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_health_databasestorage_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_guest_identity_info.py import-2.6!skip
-plugins/modules/vcenter_vm_guest_identity_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_guest_identity_info.py import-2.7!skip
-plugins/modules/vcenter_vm_guest_identity_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_guest_identity_info.py import-3.5!skip
-plugins/modules/vcenter_vm_guest_identity_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_guest_identity_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_guest_identity_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_guest_identity_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_guest_identity_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_boot_device_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_boot_device_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_boot_device_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_boot_device_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_boot_device_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_boot_device_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_boot_device_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_boot_device_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_boot_device_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_boot_device_info.py validate-modules:missing-main-call
-plugins/modules/appliance_health_storage_info.py import-2.6!skip
-plugins/modules/appliance_health_storage_info.py compile-2.6!skip
-plugins/modules/appliance_health_storage_info.py import-2.7!skip
-plugins/modules/appliance_health_storage_info.py compile-2.7!skip
-plugins/modules/appliance_health_storage_info.py import-3.5!skip
-plugins/modules/appliance_health_storage_info.py compile-3.5!skip
-plugins/modules/appliance_health_storage_info.py future-import-boilerplate!skip
-plugins/modules/appliance_health_storage_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_health_storage_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_health_storage_info.py validate-modules:missing-main-call
-plugins/modules/appliance_health_swap_info.py import-2.6!skip
-plugins/modules/appliance_health_swap_info.py compile-2.6!skip
-plugins/modules/appliance_health_swap_info.py import-2.7!skip
-plugins/modules/appliance_health_swap_info.py compile-2.7!skip
-plugins/modules/appliance_health_swap_info.py import-3.5!skip
-plugins/modules/appliance_health_swap_info.py compile-3.5!skip
-plugins/modules/appliance_health_swap_info.py future-import-boilerplate!skip
-plugins/modules/appliance_health_swap_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_health_swap_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_health_swap_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_power.py import-2.6!skip
-plugins/modules/vcenter_vm_power.py compile-2.6!skip
-plugins/modules/vcenter_vm_power.py import-2.7!skip
-plugins/modules/vcenter_vm_power.py compile-2.7!skip
-plugins/modules/vcenter_vm_power.py import-3.5!skip
-plugins/modules/vcenter_vm_power.py compile-3.5!skip
-plugins/modules/vcenter_vm_power.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_power.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_power.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_power.py validate-modules:missing-main-call
-plugins/modules/vcenter_vmtemplate_libraryitems.py import-2.6!skip
-plugins/modules/vcenter_vmtemplate_libraryitems.py compile-2.6!skip
-plugins/modules/vcenter_vmtemplate_libraryitems.py import-2.7!skip
-plugins/modules/vcenter_vmtemplate_libraryitems.py compile-2.7!skip
-plugins/modules/vcenter_vmtemplate_libraryitems.py import-3.5!skip
-plugins/modules/vcenter_vmtemplate_libraryitems.py compile-3.5!skip
-plugins/modules/vcenter_vmtemplate_libraryitems.py future-import-boilerplate!skip
-plugins/modules/vcenter_vmtemplate_libraryitems.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vmtemplate_libraryitems.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vmtemplate_libraryitems.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_guest_networking_routes_info.py import-2.6!skip
-plugins/modules/vcenter_vm_guest_networking_routes_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_guest_networking_routes_info.py import-2.7!skip
-plugins/modules/vcenter_vm_guest_networking_routes_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_guest_networking_routes_info.py import-3.5!skip
-plugins/modules/vcenter_vm_guest_networking_routes_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_guest_networking_routes_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_guest_networking_routes_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_guest_networking_routes_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_guest_networking_routes_info.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_dns_domains.py import-2.6!skip
-plugins/modules/appliance_networking_dns_domains.py compile-2.6!skip
-plugins/modules/appliance_networking_dns_domains.py import-2.7!skip
-plugins/modules/appliance_networking_dns_domains.py compile-2.7!skip
-plugins/modules/appliance_networking_dns_domains.py import-3.5!skip
-plugins/modules/appliance_networking_dns_domains.py compile-3.5!skip
-plugins/modules/appliance_networking_dns_domains.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_dns_domains.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_dns_domains.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_dns_domains.py validate-modules:missing-main-call
-plugins/modules/vcenter_storage_policies_info.py import-2.6!skip
-plugins/modules/vcenter_storage_policies_info.py compile-2.6!skip
-plugins/modules/vcenter_storage_policies_info.py import-2.7!skip
-plugins/modules/vcenter_storage_policies_info.py compile-2.7!skip
-plugins/modules/vcenter_storage_policies_info.py import-3.5!skip
-plugins/modules/vcenter_storage_policies_info.py compile-3.5!skip
-plugins/modules/vcenter_storage_policies_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_storage_policies_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_storage_policies_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_storage_policies_info.py validate-modules:missing-main-call
-plugins/modules/appliance_access_dcui.py import-2.6!skip
-plugins/modules/appliance_access_dcui.py compile-2.6!skip
-plugins/modules/appliance_access_dcui.py import-2.7!skip
-plugins/modules/appliance_access_dcui.py compile-2.7!skip
-plugins/modules/appliance_access_dcui.py import-3.5!skip
-plugins/modules/appliance_access_dcui.py compile-3.5!skip
-plugins/modules/appliance_access_dcui.py future-import-boilerplate!skip
-plugins/modules/appliance_access_dcui.py metaclass-boilerplate!skip
-plugins/modules/appliance_access_dcui.py validate-modules:missing-if-name-main
-plugins/modules/appliance_access_dcui.py validate-modules:missing-main-call
-plugins/modules/appliance_system_time_timezone_info.py import-2.6!skip
-plugins/modules/appliance_system_time_timezone_info.py compile-2.6!skip
-plugins/modules/appliance_system_time_timezone_info.py import-2.7!skip
-plugins/modules/appliance_system_time_timezone_info.py compile-2.7!skip
-plugins/modules/appliance_system_time_timezone_info.py import-3.5!skip
-plugins/modules/appliance_system_time_timezone_info.py compile-3.5!skip
-plugins/modules/appliance_system_time_timezone_info.py future-import-boilerplate!skip
-plugins/modules/appliance_system_time_timezone_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_system_time_timezone_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_system_time_timezone_info.py validate-modules:missing-main-call
-plugins/modules/appliance_ntp.py import-2.6!skip
-plugins/modules/appliance_ntp.py compile-2.6!skip
-plugins/modules/appliance_ntp.py import-2.7!skip
-plugins/modules/appliance_ntp.py compile-2.7!skip
-plugins/modules/appliance_ntp.py import-3.5!skip
-plugins/modules/appliance_ntp.py compile-3.5!skip
-plugins/modules/appliance_ntp.py future-import-boilerplate!skip
-plugins/modules/appliance_ntp.py metaclass-boilerplate!skip
-plugins/modules/appliance_ntp.py validate-modules:missing-if-name-main
-plugins/modules/appliance_ntp.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_parallel.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_parallel.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_parallel.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_parallel.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_parallel.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_parallel.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_parallel.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_parallel.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_parallel.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_parallel.py validate-modules:missing-main-call
-plugins/modules/vcenter_datacenter.py import-2.6!skip
-plugins/modules/vcenter_datacenter.py compile-2.6!skip
-plugins/modules/vcenter_datacenter.py import-2.7!skip
-plugins/modules/vcenter_datacenter.py compile-2.7!skip
-plugins/modules/vcenter_datacenter.py import-3.5!skip
-plugins/modules/vcenter_datacenter.py compile-3.5!skip
-plugins/modules/vcenter_datacenter.py future-import-boilerplate!skip
-plugins/modules/vcenter_datacenter.py metaclass-boilerplate!skip
-plugins/modules/vcenter_datacenter.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_datacenter.py validate-modules:missing-main-call
-plugins/modules/appliance_system_time_timezone.py import-2.6!skip
-plugins/modules/appliance_system_time_timezone.py compile-2.6!skip
-plugins/modules/appliance_system_time_timezone.py import-2.7!skip
-plugins/modules/appliance_system_time_timezone.py compile-2.7!skip
-plugins/modules/appliance_system_time_timezone.py import-3.5!skip
-plugins/modules/appliance_system_time_timezone.py compile-3.5!skip
-plugins/modules/appliance_system_time_timezone.py future-import-boilerplate!skip
-plugins/modules/appliance_system_time_timezone.py metaclass-boilerplate!skip
-plugins/modules/appliance_system_time_timezone.py validate-modules:missing-if-name-main
-plugins/modules/appliance_system_time_timezone.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_disk_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_disk_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_disk_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_disk_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_disk_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_disk_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_disk_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_disk_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_disk_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_disk_info.py validate-modules:missing-main-call
-plugins/modules/appliance_access_shell.py import-2.6!skip
-plugins/modules/appliance_access_shell.py compile-2.6!skip
-plugins/modules/appliance_access_shell.py import-2.7!skip
-plugins/modules/appliance_access_shell.py compile-2.7!skip
-plugins/modules/appliance_access_shell.py import-3.5!skip
-plugins/modules/appliance_access_shell.py compile-3.5!skip
-plugins/modules/appliance_access_shell.py future-import-boilerplate!skip
-plugins/modules/appliance_access_shell.py metaclass-boilerplate!skip
-plugins/modules/appliance_access_shell.py validate-modules:missing-if-name-main
-plugins/modules/appliance_access_shell.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_floppy.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_floppy.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_floppy.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_floppy.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_floppy.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_floppy.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_floppy.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_floppy.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_floppy.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_floppy.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_guest_power_info.py import-2.6!skip
-plugins/modules/vcenter_vm_guest_power_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_guest_power_info.py import-2.7!skip
-plugins/modules/vcenter_vm_guest_power_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_guest_power_info.py import-3.5!skip
-plugins/modules/vcenter_vm_guest_power_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_guest_power_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_guest_power_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_guest_power_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_guest_power_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_adapter_scsi.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_adapter_scsi.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_guest_customization.py import-2.6!skip
-plugins/modules/vcenter_vm_guest_customization.py compile-2.6!skip
-plugins/modules/vcenter_vm_guest_customization.py import-2.7!skip
-plugins/modules/vcenter_vm_guest_customization.py compile-2.7!skip
-plugins/modules/vcenter_vm_guest_customization.py import-3.5!skip
-plugins/modules/vcenter_vm_guest_customization.py compile-3.5!skip
-plugins/modules/vcenter_vm_guest_customization.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_guest_customization.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_guest_customization.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_guest_customization.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_adapter_sata_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_adapter_sata_info.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_interfaces_info.py import-2.6!skip
-plugins/modules/appliance_networking_interfaces_info.py compile-2.6!skip
-plugins/modules/appliance_networking_interfaces_info.py import-2.7!skip
-plugins/modules/appliance_networking_interfaces_info.py compile-2.7!skip
-plugins/modules/appliance_networking_interfaces_info.py import-3.5!skip
-plugins/modules/appliance_networking_interfaces_info.py compile-3.5!skip
-plugins/modules/appliance_networking_interfaces_info.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_interfaces_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_interfaces_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_interfaces_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_resourcepool_info.py import-2.6!skip
-plugins/modules/vcenter_resourcepool_info.py compile-2.6!skip
-plugins/modules/vcenter_resourcepool_info.py import-2.7!skip
-plugins/modules/vcenter_resourcepool_info.py compile-2.7!skip
-plugins/modules/vcenter_resourcepool_info.py import-3.5!skip
-plugins/modules/vcenter_resourcepool_info.py compile-3.5!skip
-plugins/modules/vcenter_resourcepool_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_resourcepool_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_resourcepool_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_resourcepool_info.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_interfaces_ipv4_info.py import-2.6!skip
-plugins/modules/appliance_networking_interfaces_ipv4_info.py compile-2.6!skip
-plugins/modules/appliance_networking_interfaces_ipv4_info.py import-2.7!skip
-plugins/modules/appliance_networking_interfaces_ipv4_info.py compile-2.7!skip
-plugins/modules/appliance_networking_interfaces_ipv4_info.py import-3.5!skip
-plugins/modules/appliance_networking_interfaces_ipv4_info.py compile-3.5!skip
-plugins/modules/appliance_networking_interfaces_ipv4_info.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_interfaces_ipv4_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_interfaces_ipv4_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_interfaces_ipv4_info.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_interfaces_ipv6.py import-2.6!skip
-plugins/modules/appliance_networking_interfaces_ipv6.py compile-2.6!skip
-plugins/modules/appliance_networking_interfaces_ipv6.py import-2.7!skip
-plugins/modules/appliance_networking_interfaces_ipv6.py compile-2.7!skip
-plugins/modules/appliance_networking_interfaces_ipv6.py import-3.5!skip
-plugins/modules/appliance_networking_interfaces_ipv6.py compile-3.5!skip
-plugins/modules/appliance_networking_interfaces_ipv6.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_interfaces_ipv6.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_interfaces_ipv6.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_interfaces_ipv6.py validate-modules:missing-main-call
-plugins/lookup/datastore_moid.py import-2.6!skip
-plugins/lookup/datastore_moid.py compile-2.6!skip
-plugins/lookup/datastore_moid.py import-2.7!skip
-plugins/lookup/datastore_moid.py compile-2.7!skip
-plugins/lookup/datastore_moid.py import-3.5!skip
-plugins/lookup/datastore_moid.py compile-3.5!skip
-plugins/lookup/resource_pool_moid.py import-2.6!skip
-plugins/lookup/resource_pool_moid.py compile-2.6!skip
-plugins/lookup/resource_pool_moid.py import-2.7!skip
-plugins/lookup/resource_pool_moid.py compile-2.7!skip
-plugins/lookup/resource_pool_moid.py import-3.5!skip
-plugins/lookup/resource_pool_moid.py compile-3.5!skip
-plugins/lookup/cluster_moid.py import-2.6!skip
-plugins/lookup/cluster_moid.py compile-2.6!skip
-plugins/lookup/cluster_moid.py import-2.7!skip
-plugins/lookup/cluster_moid.py compile-2.7!skip
-plugins/lookup/cluster_moid.py import-3.5!skip
-plugins/lookup/cluster_moid.py compile-3.5!skip
-plugins/lookup/network_moid.py import-2.6!skip
-plugins/lookup/network_moid.py compile-2.6!skip
-plugins/lookup/network_moid.py import-2.7!skip
-plugins/lookup/network_moid.py compile-2.7!skip
-plugins/lookup/network_moid.py import-3.5!skip
-plugins/lookup/network_moid.py compile-3.5!skip
-plugins/lookup/host_moid.py import-2.6!skip
-plugins/lookup/host_moid.py compile-2.6!skip
-plugins/lookup/host_moid.py import-2.7!skip
-plugins/lookup/host_moid.py compile-2.7!skip
-plugins/lookup/host_moid.py import-3.5!skip
-plugins/lookup/host_moid.py compile-3.5!skip
-plugins/lookup/folder_moid.py import-2.6!skip
-plugins/lookup/folder_moid.py compile-2.6!skip
-plugins/lookup/folder_moid.py import-2.7!skip
-plugins/lookup/folder_moid.py compile-2.7!skip
-plugins/lookup/folder_moid.py import-3.5!skip
-plugins/lookup/folder_moid.py compile-3.5!skip
-plugins/lookup/vm_moid.py import-2.6!skip
-plugins/lookup/vm_moid.py compile-2.6!skip
-plugins/lookup/vm_moid.py import-2.7!skip
-plugins/lookup/vm_moid.py compile-2.7!skip
-plugins/lookup/vm_moid.py import-3.5!skip
-plugins/lookup/vm_moid.py compile-3.5!skip
-plugins/lookup/datacenter_moid.py import-2.6!skip
-plugins/lookup/datacenter_moid.py compile-2.6!skip
-plugins/lookup/datacenter_moid.py import-2.7!skip
-plugins/lookup/datacenter_moid.py compile-2.7!skip
-plugins/lookup/datacenter_moid.py import-3.5!skip
-plugins/lookup/datacenter_moid.py compile-3.5!skip
-plugins/module_utils/vmware_rest.py future-import-boilerplate!skip
-plugins/module_utils/vmware_rest.py metaclass-boilerplate!skip
-plugins/module_utils/vmware_rest.py import-2.6!skip
-plugins/module_utils/vmware_rest.py compile-2.6!skip
-plugins/module_utils/vmware_rest.py import-2.7!skip
-plugins/module_utils/vmware_rest.py compile-2.7!skip
-plugins/module_utils/vmware_rest.py import-3.5!skip
-plugins/module_utils/vmware_rest.py compile-3.5!skip
-plugins/plugin_utils/lookup.py import-2.6!skip
-plugins/plugin_utils/lookup.py compile-2.6!skip
-plugins/plugin_utils/lookup.py import-2.7!skip
-plugins/plugin_utils/lookup.py compile-2.7!skip
-plugins/plugin_utils/lookup.py import-3.5!skip
-plugins/plugin_utils/lookup.py compile-3.5!skip
diff --git a/ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.12.txt b/ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.12.txt
deleted file mode 100644
index f55cc3e59..000000000
--- a/ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.12.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-plugins/modules/vcenter_vm_guest_customization.py pep8!skip
-plugins/modules/appliance_infraprofile_configs.py pep8!skip
diff --git a/ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.13.txt b/ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.13.txt
deleted file mode 100644
index f55cc3e59..000000000
--- a/ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.13.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-plugins/modules/vcenter_vm_guest_customization.py pep8!skip
-plugins/modules/appliance_infraprofile_configs.py pep8!skip
diff --git a/ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.16.txt b/ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.16.txt
new file mode 100644
index 000000000..9c3aa0c5c
--- /dev/null
+++ b/ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.16.txt
@@ -0,0 +1,134 @@
+plugins/modules/vcenter_vm_guest_customization.py pep8!skip
+plugins/modules/appliance_infraprofile_configs.py pep8!skip
+plugins/modules/appliance_access_consolecli_info.py import-3.12!skip
+plugins/modules/appliance_access_dcui.py import-3.12!skip
+plugins/modules/appliance_access_dcui_info.py import-3.12!skip
+plugins/modules/appliance_access_shell.py import-3.12!skip
+plugins/modules/appliance_access_shell_info.py import-3.12!skip
+plugins/modules/appliance_access_ssh.py import-3.12!skip
+plugins/modules/appliance_access_ssh_info.py import-3.12!skip
+plugins/modules/appliance_health_applmgmt_info.py import-3.12!skip
+plugins/modules/appliance_health_database_info.py import-3.12!skip
+plugins/modules/appliance_health_databasestorage_info.py import-3.12!skip
+plugins/modules/appliance_health_load_info.py import-3.12!skip
+plugins/modules/appliance_health_mem_info.py import-3.12!skip
+plugins/modules/appliance_health_softwarepackages_info.py import-3.12!skip
+plugins/modules/appliance_health_storage_info.py import-3.12!skip
+plugins/modules/appliance_health_swap_info.py import-3.12!skip
+plugins/modules/appliance_health_system_info.py import-3.12!skip
+plugins/modules/appliance_infraprofile_configs.py import-3.12!skip
+plugins/modules/appliance_infraprofile_configs_info.py import-3.12!skip
+plugins/modules/appliance_localaccounts_globalpolicy.py import-3.12!skip
+plugins/modules/appliance_localaccounts_globalpolicy_info.py import-3.12!skip
+plugins/modules/appliance_localaccounts_info.py import-3.12!skip
+plugins/modules/appliance_monitoring_info.py import-3.12!skip
+plugins/modules/appliance_monitoring_query.py import-3.12!skip
+plugins/modules/appliance_networking.py import-3.12!skip
+plugins/modules/appliance_networking_dns_domains.py import-3.12!skip
+plugins/modules/appliance_networking_dns_domains_info.py import-3.12!skip
+plugins/modules/appliance_networking_dns_hostname.py import-3.12!skip
+plugins/modules/appliance_networking_dns_hostname_info.py import-3.12!skip
+plugins/modules/appliance_networking_dns_servers.py import-3.12!skip
+plugins/modules/appliance_networking_dns_servers_info.py import-3.12!skip
+plugins/modules/appliance_networking_firewall_inbound.py import-3.12!skip
+plugins/modules/appliance_networking_firewall_inbound_info.py import-3.12!skip
+plugins/modules/appliance_networking_info.py import-3.12!skip
+plugins/modules/appliance_networking_interfaces_info.py import-3.12!skip
+plugins/modules/appliance_networking_interfaces_ipv4.py import-3.12!skip
+plugins/modules/appliance_networking_interfaces_ipv4_info.py import-3.12!skip
+plugins/modules/appliance_networking_interfaces_ipv6.py import-3.12!skip
+plugins/modules/appliance_networking_interfaces_ipv6_info.py import-3.12!skip
+plugins/modules/appliance_networking_noproxy.py import-3.12!skip
+plugins/modules/appliance_networking_noproxy_info.py import-3.12!skip
+plugins/modules/appliance_networking_proxy.py import-3.12!skip
+plugins/modules/appliance_networking_proxy_info.py import-3.12!skip
+plugins/modules/appliance_ntp.py import-3.12!skip
+plugins/modules/appliance_ntp_info.py import-3.12!skip
+plugins/modules/appliance_services.py import-3.12!skip
+plugins/modules/appliance_services_info.py import-3.12!skip
+plugins/modules/appliance_shutdown.py import-3.12!skip
+plugins/modules/appliance_shutdown_info.py import-3.12!skip
+plugins/modules/appliance_system_globalfips.py import-3.12!skip
+plugins/modules/appliance_system_globalfips_info.py import-3.12!skip
+plugins/modules/appliance_system_storage.py import-3.12!skip
+plugins/modules/appliance_system_storage_info.py import-3.12!skip
+plugins/modules/appliance_system_time_info.py import-3.12!skip
+plugins/modules/appliance_system_time_timezone.py import-3.12!skip
+plugins/modules/appliance_system_time_timezone_info.py import-3.12!skip
+plugins/modules/appliance_system_version_info.py import-3.12!skip
+plugins/modules/appliance_timesync.py import-3.12!skip
+plugins/modules/appliance_timesync_info.py import-3.12!skip
+plugins/modules/appliance_update_info.py import-3.12!skip
+plugins/modules/appliance_vmon_service.py import-3.12!skip
+plugins/modules/appliance_vmon_service_info.py import-3.12!skip
+plugins/modules/content_configuration.py import-3.12!skip
+plugins/modules/content_configuration_info.py import-3.12!skip
+plugins/modules/content_library_item_info.py import-3.12!skip
+plugins/modules/content_locallibrary.py import-3.12!skip
+plugins/modules/content_locallibrary_info.py import-3.12!skip
+plugins/modules/content_subscribedlibrary.py import-3.12!skip
+plugins/modules/content_subscribedlibrary_info.py import-3.12!skip
+plugins/modules/vcenter_cluster_info.py import-3.12!skip
+plugins/modules/vcenter_datacenter.py import-3.12!skip
+plugins/modules/vcenter_datacenter_info.py import-3.12!skip
+plugins/modules/vcenter_datastore_info.py import-3.12!skip
+plugins/modules/vcenter_folder_info.py import-3.12!skip
+plugins/modules/vcenter_host.py import-3.12!skip
+plugins/modules/vcenter_host_info.py import-3.12!skip
+plugins/modules/vcenter_network_info.py import-3.12!skip
+plugins/modules/vcenter_ovf_libraryitem.py import-3.12!skip
+plugins/modules/vcenter_resourcepool.py import-3.12!skip
+plugins/modules/vcenter_resourcepool_info.py import-3.12!skip
+plugins/modules/vcenter_storage_policies_info.py import-3.12!skip
+plugins/modules/vcenter_vm.py import-3.12!skip
+plugins/modules/vcenter_vm_guest_customization.py import-3.12!skip
+plugins/modules/vcenter_vm_guest_filesystem_directories.py import-3.12!skip
+plugins/modules/vcenter_vm_guest_identity_info.py import-3.12!skip
+plugins/modules/vcenter_vm_guest_localfilesystem_info.py import-3.12!skip
+plugins/modules/vcenter_vm_guest_networking_info.py import-3.12!skip
+plugins/modules/vcenter_vm_guest_networking_interfaces_info.py import-3.12!skip
+plugins/modules/vcenter_vm_guest_networking_routes_info.py import-3.12!skip
+plugins/modules/vcenter_vm_guest_operations_info.py import-3.12!skip
+plugins/modules/vcenter_vm_guest_power.py import-3.12!skip
+plugins/modules/vcenter_vm_guest_power_info.py import-3.12!skip
+plugins/modules/vcenter_vm_hardware.py import-3.12!skip
+plugins/modules/vcenter_vm_hardware_adapter_sata.py import-3.12!skip
+plugins/modules/vcenter_vm_hardware_adapter_sata_info.py import-3.12!skip
+plugins/modules/vcenter_vm_hardware_adapter_scsi.py import-3.12!skip
+plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py import-3.12!skip
+plugins/modules/vcenter_vm_hardware_boot.py import-3.12!skip
+plugins/modules/vcenter_vm_hardware_boot_device.py import-3.12!skip
+plugins/modules/vcenter_vm_hardware_boot_device_info.py import-3.12!skip
+plugins/modules/vcenter_vm_hardware_boot_info.py import-3.12!skip
+plugins/modules/vcenter_vm_hardware_cdrom.py import-3.12!skip
+plugins/modules/vcenter_vm_hardware_cdrom_info.py import-3.12!skip
+plugins/modules/vcenter_vm_hardware_cpu.py import-3.12!skip
+plugins/modules/vcenter_vm_hardware_cpu_info.py import-3.12!skip
+plugins/modules/vcenter_vm_hardware_disk.py import-3.12!skip
+plugins/modules/vcenter_vm_hardware_disk_info.py import-3.12!skip
+plugins/modules/vcenter_vm_hardware_ethernet.py import-3.12!skip
+plugins/modules/vcenter_vm_hardware_ethernet_info.py import-3.12!skip
+plugins/modules/vcenter_vm_hardware_floppy.py import-3.12!skip
+plugins/modules/vcenter_vm_hardware_floppy_info.py import-3.12!skip
+plugins/modules/vcenter_vm_hardware_info.py import-3.12!skip
+plugins/modules/vcenter_vm_hardware_memory.py import-3.12!skip
+plugins/modules/vcenter_vm_hardware_memory_info.py import-3.12!skip
+plugins/modules/vcenter_vm_hardware_parallel.py import-3.12!skip
+plugins/modules/vcenter_vm_hardware_parallel_info.py import-3.12!skip
+plugins/modules/vcenter_vm_hardware_serial.py import-3.12!skip
+plugins/modules/vcenter_vm_hardware_serial_info.py import-3.12!skip
+plugins/modules/vcenter_vm_info.py import-3.12!skip
+plugins/modules/vcenter_vm_libraryitem_info.py import-3.12!skip
+plugins/modules/vcenter_vm_power.py import-3.12!skip
+plugins/modules/vcenter_vm_power_info.py import-3.12!skip
+plugins/modules/vcenter_vm_storage_policy.py import-3.12!skip
+plugins/modules/vcenter_vm_storage_policy_compliance.py import-3.12!skip
+plugins/modules/vcenter_vm_storage_policy_compliance_info.py import-3.12!skip
+plugins/modules/vcenter_vm_storage_policy_info.py import-3.12!skip
+plugins/modules/vcenter_vm_tools.py import-3.12!skip
+plugins/modules/vcenter_vm_tools_info.py import-3.12!skip
+plugins/modules/vcenter_vm_tools_installer.py import-3.12!skip
+plugins/modules/vcenter_vm_tools_installer_info.py import-3.12!skip
+plugins/modules/vcenter_vmtemplate_libraryitems_info.py import-3.12!skip
+plugins/modules/vcenter_vmtemplate_libraryitems.py import-3.12!skip
+plugins/modules/appliance_access_consolecli.py import-3.12!skip
diff --git a/ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.9.txt b/ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.9.txt
deleted file mode 100644
index 3afc028e5..000000000
--- a/ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.9.txt
+++ /dev/null
@@ -1,1357 +0,0 @@
-plugins/modules/vcenter_vm_guest_customization.py pep8!skip
-plugins/modules/appliance_infraprofile_configs.py pep8!skip
-plugins/modules/appliance_vmon_service.py import-2.6!skip
-plugins/modules/appliance_vmon_service.py compile-2.6!skip
-plugins/modules/appliance_vmon_service.py import-2.7!skip
-plugins/modules/appliance_vmon_service.py compile-2.7!skip
-plugins/modules/appliance_vmon_service.py import-3.5!skip
-plugins/modules/appliance_vmon_service.py compile-3.5!skip
-plugins/modules/appliance_vmon_service.py future-import-boilerplate!skip
-plugins/modules/appliance_vmon_service.py metaclass-boilerplate!skip
-plugins/modules/appliance_vmon_service.py validate-modules:missing-if-name-main
-plugins/modules/appliance_vmon_service.py validate-modules:missing-main-call
-plugins/modules/vcenter_host.py import-2.6!skip
-plugins/modules/vcenter_host.py compile-2.6!skip
-plugins/modules/vcenter_host.py import-2.7!skip
-plugins/modules/vcenter_host.py compile-2.7!skip
-plugins/modules/vcenter_host.py import-3.5!skip
-plugins/modules/vcenter_host.py compile-3.5!skip
-plugins/modules/vcenter_host.py future-import-boilerplate!skip
-plugins/modules/vcenter_host.py metaclass-boilerplate!skip
-plugins/modules/vcenter_host.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_host.py validate-modules:missing-main-call
-plugins/modules/appliance_monitoring_info.py import-2.6!skip
-plugins/modules/appliance_monitoring_info.py compile-2.6!skip
-plugins/modules/appliance_monitoring_info.py import-2.7!skip
-plugins/modules/appliance_monitoring_info.py compile-2.7!skip
-plugins/modules/appliance_monitoring_info.py import-3.5!skip
-plugins/modules/appliance_monitoring_info.py compile-3.5!skip
-plugins/modules/appliance_monitoring_info.py future-import-boilerplate!skip
-plugins/modules/appliance_monitoring_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_monitoring_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_monitoring_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_storage_policy_compliance_info.py import-2.6!skip
-plugins/modules/vcenter_vm_storage_policy_compliance_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_storage_policy_compliance_info.py import-2.7!skip
-plugins/modules/vcenter_vm_storage_policy_compliance_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_storage_policy_compliance_info.py import-3.5!skip
-plugins/modules/vcenter_vm_storage_policy_compliance_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_storage_policy_compliance_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_storage_policy_compliance_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_storage_policy_compliance_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_storage_policy_compliance_info.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_info.py import-2.6!skip
-plugins/modules/appliance_networking_info.py compile-2.6!skip
-plugins/modules/appliance_networking_info.py import-2.7!skip
-plugins/modules/appliance_networking_info.py compile-2.7!skip
-plugins/modules/appliance_networking_info.py import-3.5!skip
-plugins/modules/appliance_networking_info.py compile-3.5!skip
-plugins/modules/appliance_networking_info.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_libraryitem_info.py import-2.6!skip
-plugins/modules/vcenter_vm_libraryitem_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_libraryitem_info.py import-2.7!skip
-plugins/modules/vcenter_vm_libraryitem_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_libraryitem_info.py import-3.5!skip
-plugins/modules/vcenter_vm_libraryitem_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_libraryitem_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_libraryitem_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_libraryitem_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_libraryitem_info.py validate-modules:missing-main-call
-plugins/modules/appliance_timesync_info.py import-2.6!skip
-plugins/modules/appliance_timesync_info.py compile-2.6!skip
-plugins/modules/appliance_timesync_info.py import-2.7!skip
-plugins/modules/appliance_timesync_info.py compile-2.7!skip
-plugins/modules/appliance_timesync_info.py import-3.5!skip
-plugins/modules/appliance_timesync_info.py compile-3.5!skip
-plugins/modules/appliance_timesync_info.py future-import-boilerplate!skip
-plugins/modules/appliance_timesync_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_timesync_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_timesync_info.py validate-modules:missing-main-call
-plugins/modules/content_subscribedlibrary_info.py import-2.6!skip
-plugins/modules/content_subscribedlibrary_info.py compile-2.6!skip
-plugins/modules/content_subscribedlibrary_info.py import-2.7!skip
-plugins/modules/content_subscribedlibrary_info.py compile-2.7!skip
-plugins/modules/content_subscribedlibrary_info.py import-3.5!skip
-plugins/modules/content_subscribedlibrary_info.py compile-3.5!skip
-plugins/modules/content_subscribedlibrary_info.py future-import-boilerplate!skip
-plugins/modules/content_subscribedlibrary_info.py metaclass-boilerplate!skip
-plugins/modules/content_subscribedlibrary_info.py validate-modules:missing-if-name-main
-plugins/modules/content_subscribedlibrary_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_datastore_info.py import-2.6!skip
-plugins/modules/vcenter_datastore_info.py compile-2.6!skip
-plugins/modules/vcenter_datastore_info.py import-2.7!skip
-plugins/modules/vcenter_datastore_info.py compile-2.7!skip
-plugins/modules/vcenter_datastore_info.py import-3.5!skip
-plugins/modules/vcenter_datastore_info.py compile-3.5!skip
-plugins/modules/vcenter_datastore_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_datastore_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_datastore_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_datastore_info.py validate-modules:missing-main-call
-plugins/modules/appliance_access_ssh_info.py import-2.6!skip
-plugins/modules/appliance_access_ssh_info.py compile-2.6!skip
-plugins/modules/appliance_access_ssh_info.py import-2.7!skip
-plugins/modules/appliance_access_ssh_info.py compile-2.7!skip
-plugins/modules/appliance_access_ssh_info.py import-3.5!skip
-plugins/modules/appliance_access_ssh_info.py compile-3.5!skip
-plugins/modules/appliance_access_ssh_info.py future-import-boilerplate!skip
-plugins/modules/appliance_access_ssh_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_access_ssh_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_access_ssh_info.py validate-modules:missing-main-call
-plugins/modules/appliance_localaccounts_info.py import-2.6!skip
-plugins/modules/appliance_localaccounts_info.py compile-2.6!skip
-plugins/modules/appliance_localaccounts_info.py import-2.7!skip
-plugins/modules/appliance_localaccounts_info.py compile-2.7!skip
-plugins/modules/appliance_localaccounts_info.py import-3.5!skip
-plugins/modules/appliance_localaccounts_info.py compile-3.5!skip
-plugins/modules/appliance_localaccounts_info.py future-import-boilerplate!skip
-plugins/modules/appliance_localaccounts_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_localaccounts_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_localaccounts_info.py validate-modules:missing-main-call
-plugins/modules/appliance_access_consolecli_info.py import-2.6!skip
-plugins/modules/appliance_access_consolecli_info.py compile-2.6!skip
-plugins/modules/appliance_access_consolecli_info.py import-2.7!skip
-plugins/modules/appliance_access_consolecli_info.py compile-2.7!skip
-plugins/modules/appliance_access_consolecli_info.py import-3.5!skip
-plugins/modules/appliance_access_consolecli_info.py compile-3.5!skip
-plugins/modules/appliance_access_consolecli_info.py future-import-boilerplate!skip
-plugins/modules/appliance_access_consolecli_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_access_consolecli_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_access_consolecli_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_cdrom.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_cdrom.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_cdrom.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_cdrom.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_cdrom.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_cdrom.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_cdrom.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_cdrom.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_cdrom.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_cdrom.py validate-modules:missing-main-call
-plugins/modules/content_locallibrary.py import-2.6!skip
-plugins/modules/content_locallibrary.py compile-2.6!skip
-plugins/modules/content_locallibrary.py import-2.7!skip
-plugins/modules/content_locallibrary.py compile-2.7!skip
-plugins/modules/content_locallibrary.py import-3.5!skip
-plugins/modules/content_locallibrary.py compile-3.5!skip
-plugins/modules/content_locallibrary.py future-import-boilerplate!skip
-plugins/modules/content_locallibrary.py metaclass-boilerplate!skip
-plugins/modules/content_locallibrary.py validate-modules:missing-if-name-main
-plugins/modules/content_locallibrary.py validate-modules:missing-main-call
-plugins/modules/appliance_update_info.py import-2.6!skip
-plugins/modules/appliance_update_info.py compile-2.6!skip
-plugins/modules/appliance_update_info.py import-2.7!skip
-plugins/modules/appliance_update_info.py compile-2.7!skip
-plugins/modules/appliance_update_info.py import-3.5!skip
-plugins/modules/appliance_update_info.py compile-3.5!skip
-plugins/modules/appliance_update_info.py future-import-boilerplate!skip
-plugins/modules/appliance_update_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_update_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_update_info.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_dns_hostname.py import-2.6!skip
-plugins/modules/appliance_networking_dns_hostname.py compile-2.6!skip
-plugins/modules/appliance_networking_dns_hostname.py import-2.7!skip
-plugins/modules/appliance_networking_dns_hostname.py compile-2.7!skip
-plugins/modules/appliance_networking_dns_hostname.py import-3.5!skip
-plugins/modules/appliance_networking_dns_hostname.py compile-3.5!skip
-plugins/modules/appliance_networking_dns_hostname.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_dns_hostname.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_dns_hostname.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_dns_hostname.py validate-modules:missing-main-call
-plugins/modules/appliance_ntp_info.py import-2.6!skip
-plugins/modules/appliance_ntp_info.py compile-2.6!skip
-plugins/modules/appliance_ntp_info.py import-2.7!skip
-plugins/modules/appliance_ntp_info.py compile-2.7!skip
-plugins/modules/appliance_ntp_info.py import-3.5!skip
-plugins/modules/appliance_ntp_info.py compile-3.5!skip
-plugins/modules/appliance_ntp_info.py future-import-boilerplate!skip
-plugins/modules/appliance_ntp_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_ntp_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_ntp_info.py validate-modules:missing-main-call
-plugins/modules/appliance_access_consolecli.py import-2.6!skip
-plugins/modules/appliance_access_consolecli.py compile-2.6!skip
-plugins/modules/appliance_access_consolecli.py import-2.7!skip
-plugins/modules/appliance_access_consolecli.py compile-2.7!skip
-plugins/modules/appliance_access_consolecli.py import-3.5!skip
-plugins/modules/appliance_access_consolecli.py compile-3.5!skip
-plugins/modules/appliance_access_consolecli.py future-import-boilerplate!skip
-plugins/modules/appliance_access_consolecli.py metaclass-boilerplate!skip
-plugins/modules/appliance_access_consolecli.py validate-modules:missing-if-name-main
-plugins/modules/appliance_access_consolecli.py validate-modules:missing-main-call
-plugins/modules/vcenter_datacenter_info.py import-2.6!skip
-plugins/modules/vcenter_datacenter_info.py compile-2.6!skip
-plugins/modules/vcenter_datacenter_info.py import-2.7!skip
-plugins/modules/vcenter_datacenter_info.py compile-2.7!skip
-plugins/modules/vcenter_datacenter_info.py import-3.5!skip
-plugins/modules/vcenter_datacenter_info.py compile-3.5!skip
-plugins/modules/vcenter_datacenter_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_datacenter_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_datacenter_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_datacenter_info.py validate-modules:missing-main-call
-plugins/modules/appliance_system_version_info.py import-2.6!skip
-plugins/modules/appliance_system_version_info.py compile-2.6!skip
-plugins/modules/appliance_system_version_info.py import-2.7!skip
-plugins/modules/appliance_system_version_info.py compile-2.7!skip
-plugins/modules/appliance_system_version_info.py import-3.5!skip
-plugins/modules/appliance_system_version_info.py compile-3.5!skip
-plugins/modules/appliance_system_version_info.py future-import-boilerplate!skip
-plugins/modules/appliance_system_version_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_system_version_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_system_version_info.py validate-modules:missing-main-call
-plugins/modules/appliance_health_applmgmt_info.py import-2.6!skip
-plugins/modules/appliance_health_applmgmt_info.py compile-2.6!skip
-plugins/modules/appliance_health_applmgmt_info.py import-2.7!skip
-plugins/modules/appliance_health_applmgmt_info.py compile-2.7!skip
-plugins/modules/appliance_health_applmgmt_info.py import-3.5!skip
-plugins/modules/appliance_health_applmgmt_info.py compile-3.5!skip
-plugins/modules/appliance_health_applmgmt_info.py future-import-boilerplate!skip
-plugins/modules/appliance_health_applmgmt_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_health_applmgmt_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_health_applmgmt_info.py validate-modules:missing-main-call
-plugins/modules/appliance_system_storage_info.py import-2.6!skip
-plugins/modules/appliance_system_storage_info.py compile-2.6!skip
-plugins/modules/appliance_system_storage_info.py import-2.7!skip
-plugins/modules/appliance_system_storage_info.py compile-2.7!skip
-plugins/modules/appliance_system_storage_info.py import-3.5!skip
-plugins/modules/appliance_system_storage_info.py compile-3.5!skip
-plugins/modules/appliance_system_storage_info.py future-import-boilerplate!skip
-plugins/modules/appliance_system_storage_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_system_storage_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_system_storage_info.py validate-modules:missing-main-call
-plugins/modules/appliance_infraprofile_configs_info.py import-2.6!skip
-plugins/modules/appliance_infraprofile_configs_info.py compile-2.6!skip
-plugins/modules/appliance_infraprofile_configs_info.py import-2.7!skip
-plugins/modules/appliance_infraprofile_configs_info.py compile-2.7!skip
-plugins/modules/appliance_infraprofile_configs_info.py import-3.5!skip
-plugins/modules/appliance_infraprofile_configs_info.py compile-3.5!skip
-plugins/modules/appliance_infraprofile_configs_info.py future-import-boilerplate!skip
-plugins/modules/appliance_infraprofile_configs_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_infraprofile_configs_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_infraprofile_configs_info.py validate-modules:missing-main-call
-plugins/modules/appliance_access_shell_info.py import-2.6!skip
-plugins/modules/appliance_access_shell_info.py compile-2.6!skip
-plugins/modules/appliance_access_shell_info.py import-2.7!skip
-plugins/modules/appliance_access_shell_info.py compile-2.7!skip
-plugins/modules/appliance_access_shell_info.py import-3.5!skip
-plugins/modules/appliance_access_shell_info.py compile-3.5!skip
-plugins/modules/appliance_access_shell_info.py future-import-boilerplate!skip
-plugins/modules/appliance_access_shell_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_access_shell_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_access_shell_info.py validate-modules:missing-main-call
-plugins/modules/appliance_health_mem_info.py import-2.6!skip
-plugins/modules/appliance_health_mem_info.py compile-2.6!skip
-plugins/modules/appliance_health_mem_info.py import-2.7!skip
-plugins/modules/appliance_health_mem_info.py compile-2.7!skip
-plugins/modules/appliance_health_mem_info.py import-3.5!skip
-plugins/modules/appliance_health_mem_info.py compile-3.5!skip
-plugins/modules/appliance_health_mem_info.py future-import-boilerplate!skip
-plugins/modules/appliance_health_mem_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_health_mem_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_health_mem_info.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_interfaces_ipv4.py import-2.6!skip
-plugins/modules/appliance_networking_interfaces_ipv4.py compile-2.6!skip
-plugins/modules/appliance_networking_interfaces_ipv4.py import-2.7!skip
-plugins/modules/appliance_networking_interfaces_ipv4.py compile-2.7!skip
-plugins/modules/appliance_networking_interfaces_ipv4.py import-3.5!skip
-plugins/modules/appliance_networking_interfaces_ipv4.py compile-3.5!skip
-plugins/modules/appliance_networking_interfaces_ipv4.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_interfaces_ipv4.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_interfaces_ipv4.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_interfaces_ipv4.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_adapter_scsi_info.py validate-modules:missing-main-call
-plugins/modules/appliance_localaccounts_globalpolicy.py import-2.6!skip
-plugins/modules/appliance_localaccounts_globalpolicy.py compile-2.6!skip
-plugins/modules/appliance_localaccounts_globalpolicy.py import-2.7!skip
-plugins/modules/appliance_localaccounts_globalpolicy.py compile-2.7!skip
-plugins/modules/appliance_localaccounts_globalpolicy.py import-3.5!skip
-plugins/modules/appliance_localaccounts_globalpolicy.py compile-3.5!skip
-plugins/modules/appliance_localaccounts_globalpolicy.py future-import-boilerplate!skip
-plugins/modules/appliance_localaccounts_globalpolicy.py metaclass-boilerplate!skip
-plugins/modules/appliance_localaccounts_globalpolicy.py validate-modules:missing-if-name-main
-plugins/modules/appliance_localaccounts_globalpolicy.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_guest_operations_info.py import-2.6!skip
-plugins/modules/vcenter_vm_guest_operations_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_guest_operations_info.py import-2.7!skip
-plugins/modules/vcenter_vm_guest_operations_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_guest_operations_info.py import-3.5!skip
-plugins/modules/vcenter_vm_guest_operations_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_guest_operations_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_guest_operations_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_guest_operations_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_guest_operations_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vmtemplate_libraryitems_info.py import-2.6!skip
-plugins/modules/vcenter_vmtemplate_libraryitems_info.py compile-2.6!skip
-plugins/modules/vcenter_vmtemplate_libraryitems_info.py import-2.7!skip
-plugins/modules/vcenter_vmtemplate_libraryitems_info.py compile-2.7!skip
-plugins/modules/vcenter_vmtemplate_libraryitems_info.py import-3.5!skip
-plugins/modules/vcenter_vmtemplate_libraryitems_info.py compile-3.5!skip
-plugins/modules/vcenter_vmtemplate_libraryitems_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vmtemplate_libraryitems_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vmtemplate_libraryitems_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vmtemplate_libraryitems_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_guest_filesystem_directories.py import-2.6!skip
-plugins/modules/vcenter_vm_guest_filesystem_directories.py compile-2.6!skip
-plugins/modules/vcenter_vm_guest_filesystem_directories.py import-2.7!skip
-plugins/modules/vcenter_vm_guest_filesystem_directories.py compile-2.7!skip
-plugins/modules/vcenter_vm_guest_filesystem_directories.py import-3.5!skip
-plugins/modules/vcenter_vm_guest_filesystem_directories.py compile-3.5!skip
-plugins/modules/vcenter_vm_guest_filesystem_directories.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_guest_filesystem_directories.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_guest_filesystem_directories.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_guest_filesystem_directories.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_cdrom_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_cdrom_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_cdrom_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_cdrom_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_cdrom_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_cdrom_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_cdrom_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_cdrom_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_cdrom_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_cdrom_info.py validate-modules:missing-main-call
-plugins/modules/appliance_monitoring_query.py import-2.6!skip
-plugins/modules/appliance_monitoring_query.py compile-2.6!skip
-plugins/modules/appliance_monitoring_query.py import-2.7!skip
-plugins/modules/appliance_monitoring_query.py compile-2.7!skip
-plugins/modules/appliance_monitoring_query.py import-3.5!skip
-plugins/modules/appliance_monitoring_query.py compile-3.5!skip
-plugins/modules/appliance_monitoring_query.py future-import-boilerplate!skip
-plugins/modules/appliance_monitoring_query.py metaclass-boilerplate!skip
-plugins/modules/appliance_monitoring_query.py validate-modules:missing-if-name-main
-plugins/modules/appliance_monitoring_query.py validate-modules:missing-main-call
-plugins/modules/vcenter_resourcepool.py import-2.6!skip
-plugins/modules/vcenter_resourcepool.py compile-2.6!skip
-plugins/modules/vcenter_resourcepool.py import-2.7!skip
-plugins/modules/vcenter_resourcepool.py compile-2.7!skip
-plugins/modules/vcenter_resourcepool.py import-3.5!skip
-plugins/modules/vcenter_resourcepool.py compile-3.5!skip
-plugins/modules/vcenter_resourcepool.py future-import-boilerplate!skip
-plugins/modules/vcenter_resourcepool.py metaclass-boilerplate!skip
-plugins/modules/vcenter_resourcepool.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_resourcepool.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_memory.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_memory.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_memory.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_memory.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_memory.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_memory.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_memory.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_memory.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_memory.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_memory.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_proxy.py import-2.6!skip
-plugins/modules/appliance_networking_proxy.py compile-2.6!skip
-plugins/modules/appliance_networking_proxy.py import-2.7!skip
-plugins/modules/appliance_networking_proxy.py compile-2.7!skip
-plugins/modules/appliance_networking_proxy.py import-3.5!skip
-plugins/modules/appliance_networking_proxy.py compile-3.5!skip
-plugins/modules/appliance_networking_proxy.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_proxy.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_proxy.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_proxy.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_dns_servers_info.py import-2.6!skip
-plugins/modules/appliance_networking_dns_servers_info.py compile-2.6!skip
-plugins/modules/appliance_networking_dns_servers_info.py import-2.7!skip
-plugins/modules/appliance_networking_dns_servers_info.py compile-2.7!skip
-plugins/modules/appliance_networking_dns_servers_info.py import-3.5!skip
-plugins/modules/appliance_networking_dns_servers_info.py compile-3.5!skip
-plugins/modules/appliance_networking_dns_servers_info.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_dns_servers_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_dns_servers_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_dns_servers_info.py validate-modules:missing-main-call
-plugins/modules/appliance_health_system_info.py import-2.6!skip
-plugins/modules/appliance_health_system_info.py compile-2.6!skip
-plugins/modules/appliance_health_system_info.py import-2.7!skip
-plugins/modules/appliance_health_system_info.py compile-2.7!skip
-plugins/modules/appliance_health_system_info.py import-3.5!skip
-plugins/modules/appliance_health_system_info.py compile-3.5!skip
-plugins/modules/appliance_health_system_info.py future-import-boilerplate!skip
-plugins/modules/appliance_health_system_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_health_system_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_health_system_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_ethernet_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_ethernet_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_ethernet_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_ethernet_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_ethernet_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_ethernet_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_ethernet_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_ethernet_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_ethernet_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_ethernet_info.py validate-modules:missing-main-call
-plugins/modules/appliance_networking.py import-2.6!skip
-plugins/modules/appliance_networking.py compile-2.6!skip
-plugins/modules/appliance_networking.py import-2.7!skip
-plugins/modules/appliance_networking.py compile-2.7!skip
-plugins/modules/appliance_networking.py import-3.5!skip
-plugins/modules/appliance_networking.py compile-3.5!skip
-plugins/modules/appliance_networking.py future-import-boilerplate!skip
-plugins/modules/appliance_networking.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_floppy_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_floppy_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_floppy_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_floppy_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_floppy_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_floppy_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_floppy_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_floppy_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_floppy_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_floppy_info.py validate-modules:missing-main-call
-plugins/modules/content_configuration_info.py import-2.6!skip
-plugins/modules/content_configuration_info.py compile-2.6!skip
-plugins/modules/content_configuration_info.py import-2.7!skip
-plugins/modules/content_configuration_info.py compile-2.7!skip
-plugins/modules/content_configuration_info.py import-3.5!skip
-plugins/modules/content_configuration_info.py compile-3.5!skip
-plugins/modules/content_configuration_info.py future-import-boilerplate!skip
-plugins/modules/content_configuration_info.py metaclass-boilerplate!skip
-plugins/modules/content_configuration_info.py validate-modules:missing-if-name-main
-plugins/modules/content_configuration_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_tools_installer.py import-2.6!skip
-plugins/modules/vcenter_vm_tools_installer.py compile-2.6!skip
-plugins/modules/vcenter_vm_tools_installer.py import-2.7!skip
-plugins/modules/vcenter_vm_tools_installer.py compile-2.7!skip
-plugins/modules/vcenter_vm_tools_installer.py import-3.5!skip
-plugins/modules/vcenter_vm_tools_installer.py compile-3.5!skip
-plugins/modules/vcenter_vm_tools_installer.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_tools_installer.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_tools_installer.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_tools_installer.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_cpu.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_cpu.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_cpu.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_cpu.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_cpu.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_cpu.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_cpu.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_cpu.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_cpu.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_cpu.py validate-modules:missing-main-call
-plugins/modules/vcenter_folder_info.py import-2.6!skip
-plugins/modules/vcenter_folder_info.py compile-2.6!skip
-plugins/modules/vcenter_folder_info.py import-2.7!skip
-plugins/modules/vcenter_folder_info.py compile-2.7!skip
-plugins/modules/vcenter_folder_info.py import-3.5!skip
-plugins/modules/vcenter_folder_info.py compile-3.5!skip
-plugins/modules/vcenter_folder_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_folder_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_folder_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_folder_info.py validate-modules:missing-main-call
-plugins/modules/appliance_system_time_info.py import-2.6!skip
-plugins/modules/appliance_system_time_info.py compile-2.6!skip
-plugins/modules/appliance_system_time_info.py import-2.7!skip
-plugins/modules/appliance_system_time_info.py compile-2.7!skip
-plugins/modules/appliance_system_time_info.py import-3.5!skip
-plugins/modules/appliance_system_time_info.py compile-3.5!skip
-plugins/modules/appliance_system_time_info.py future-import-boilerplate!skip
-plugins/modules/appliance_system_time_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_system_time_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_system_time_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_guest_localfilesystem_info.py import-2.6!skip
-plugins/modules/vcenter_vm_guest_localfilesystem_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_guest_localfilesystem_info.py import-2.7!skip
-plugins/modules/vcenter_vm_guest_localfilesystem_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_guest_localfilesystem_info.py import-3.5!skip
-plugins/modules/vcenter_vm_guest_localfilesystem_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_guest_localfilesystem_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_guest_localfilesystem_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_guest_localfilesystem_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_guest_localfilesystem_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_info.py validate-modules:missing-main-call
-plugins/modules/appliance_health_load_info.py import-2.6!skip
-plugins/modules/appliance_health_load_info.py compile-2.6!skip
-plugins/modules/appliance_health_load_info.py import-2.7!skip
-plugins/modules/appliance_health_load_info.py compile-2.7!skip
-plugins/modules/appliance_health_load_info.py import-3.5!skip
-plugins/modules/appliance_health_load_info.py compile-3.5!skip
-plugins/modules/appliance_health_load_info.py future-import-boilerplate!skip
-plugins/modules/appliance_health_load_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_health_load_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_health_load_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_tools.py import-2.6!skip
-plugins/modules/vcenter_vm_tools.py compile-2.6!skip
-plugins/modules/vcenter_vm_tools.py import-2.7!skip
-plugins/modules/vcenter_vm_tools.py compile-2.7!skip
-plugins/modules/vcenter_vm_tools.py import-3.5!skip
-plugins/modules/vcenter_vm_tools.py compile-3.5!skip
-plugins/modules/vcenter_vm_tools.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_tools.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_tools.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_tools.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_guest_power.py import-2.6!skip
-plugins/modules/vcenter_vm_guest_power.py compile-2.6!skip
-plugins/modules/vcenter_vm_guest_power.py import-2.7!skip
-plugins/modules/vcenter_vm_guest_power.py compile-2.7!skip
-plugins/modules/vcenter_vm_guest_power.py import-3.5!skip
-plugins/modules/vcenter_vm_guest_power.py compile-3.5!skip
-plugins/modules/vcenter_vm_guest_power.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_guest_power.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_guest_power.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_guest_power.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_info.py import-2.6!skip
-plugins/modules/vcenter_vm_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_info.py import-2.7!skip
-plugins/modules/vcenter_vm_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_info.py import-3.5!skip
-plugins/modules/vcenter_vm_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_info.py validate-modules:missing-main-call
-plugins/modules/appliance_infraprofile_configs.py import-2.6!skip
-plugins/modules/appliance_infraprofile_configs.py compile-2.6!skip
-plugins/modules/appliance_infraprofile_configs.py import-2.7!skip
-plugins/modules/appliance_infraprofile_configs.py compile-2.7!skip
-plugins/modules/appliance_infraprofile_configs.py import-3.5!skip
-plugins/modules/appliance_infraprofile_configs.py compile-3.5!skip
-plugins/modules/appliance_infraprofile_configs.py future-import-boilerplate!skip
-plugins/modules/appliance_infraprofile_configs.py metaclass-boilerplate!skip
-plugins/modules/appliance_infraprofile_configs.py validate-modules:missing-if-name-main
-plugins/modules/appliance_infraprofile_configs.py validate-modules:missing-main-call
-plugins/modules/content_subscribedlibrary.py import-2.6!skip
-plugins/modules/content_subscribedlibrary.py compile-2.6!skip
-plugins/modules/content_subscribedlibrary.py import-2.7!skip
-plugins/modules/content_subscribedlibrary.py compile-2.7!skip
-plugins/modules/content_subscribedlibrary.py import-3.5!skip
-plugins/modules/content_subscribedlibrary.py compile-3.5!skip
-plugins/modules/content_subscribedlibrary.py future-import-boilerplate!skip
-plugins/modules/content_subscribedlibrary.py metaclass-boilerplate!skip
-plugins/modules/content_subscribedlibrary.py validate-modules:missing-if-name-main
-plugins/modules/content_subscribedlibrary.py validate-modules:missing-main-call
-plugins/modules/appliance_system_globalfips_info.py import-2.6!skip
-plugins/modules/appliance_system_globalfips_info.py compile-2.6!skip
-plugins/modules/appliance_system_globalfips_info.py import-2.7!skip
-plugins/modules/appliance_system_globalfips_info.py compile-2.7!skip
-plugins/modules/appliance_system_globalfips_info.py import-3.5!skip
-plugins/modules/appliance_system_globalfips_info.py compile-3.5!skip
-plugins/modules/appliance_system_globalfips_info.py future-import-boilerplate!skip
-plugins/modules/appliance_system_globalfips_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_system_globalfips_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_system_globalfips_info.py validate-modules:missing-main-call
-plugins/modules/appliance_services_info.py import-2.6!skip
-plugins/modules/appliance_services_info.py compile-2.6!skip
-plugins/modules/appliance_services_info.py import-2.7!skip
-plugins/modules/appliance_services_info.py compile-2.7!skip
-plugins/modules/appliance_services_info.py import-3.5!skip
-plugins/modules/appliance_services_info.py compile-3.5!skip
-plugins/modules/appliance_services_info.py future-import-boilerplate!skip
-plugins/modules/appliance_services_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_services_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_services_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_storage_policy_compliance.py import-2.6!skip
-plugins/modules/vcenter_vm_storage_policy_compliance.py compile-2.6!skip
-plugins/modules/vcenter_vm_storage_policy_compliance.py import-2.7!skip
-plugins/modules/vcenter_vm_storage_policy_compliance.py compile-2.7!skip
-plugins/modules/vcenter_vm_storage_policy_compliance.py import-3.5!skip
-plugins/modules/vcenter_vm_storage_policy_compliance.py compile-3.5!skip
-plugins/modules/vcenter_vm_storage_policy_compliance.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_storage_policy_compliance.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_storage_policy_compliance.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_storage_policy_compliance.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_serial_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_serial_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_serial_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_serial_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_serial_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_serial_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_serial_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_serial_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_serial_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_serial_info.py validate-modules:missing-main-call
-plugins/modules/content_configuration.py import-2.6!skip
-plugins/modules/content_configuration.py compile-2.6!skip
-plugins/modules/content_configuration.py import-2.7!skip
-plugins/modules/content_configuration.py compile-2.7!skip
-plugins/modules/content_configuration.py import-3.5!skip
-plugins/modules/content_configuration.py compile-3.5!skip
-plugins/modules/content_configuration.py future-import-boilerplate!skip
-plugins/modules/content_configuration.py metaclass-boilerplate!skip
-plugins/modules/content_configuration.py validate-modules:missing-if-name-main
-plugins/modules/content_configuration.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_dns_hostname_info.py import-2.6!skip
-plugins/modules/appliance_networking_dns_hostname_info.py compile-2.6!skip
-plugins/modules/appliance_networking_dns_hostname_info.py import-2.7!skip
-plugins/modules/appliance_networking_dns_hostname_info.py compile-2.7!skip
-plugins/modules/appliance_networking_dns_hostname_info.py import-3.5!skip
-plugins/modules/appliance_networking_dns_hostname_info.py compile-3.5!skip
-plugins/modules/appliance_networking_dns_hostname_info.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_dns_hostname_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_dns_hostname_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_dns_hostname_info.py validate-modules:missing-main-call
-plugins/modules/content_locallibrary_info.py import-2.6!skip
-plugins/modules/content_locallibrary_info.py compile-2.6!skip
-plugins/modules/content_locallibrary_info.py import-2.7!skip
-plugins/modules/content_locallibrary_info.py compile-2.7!skip
-plugins/modules/content_locallibrary_info.py import-3.5!skip
-plugins/modules/content_locallibrary_info.py compile-3.5!skip
-plugins/modules/content_locallibrary_info.py future-import-boilerplate!skip
-plugins/modules/content_locallibrary_info.py metaclass-boilerplate!skip
-plugins/modules/content_locallibrary_info.py validate-modules:missing-if-name-main
-plugins/modules/content_locallibrary_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_storage_policy.py import-2.6!skip
-plugins/modules/vcenter_vm_storage_policy.py compile-2.6!skip
-plugins/modules/vcenter_vm_storage_policy.py import-2.7!skip
-plugins/modules/vcenter_vm_storage_policy.py compile-2.7!skip
-plugins/modules/vcenter_vm_storage_policy.py import-3.5!skip
-plugins/modules/vcenter_vm_storage_policy.py compile-3.5!skip
-plugins/modules/vcenter_vm_storage_policy.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_storage_policy.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_storage_policy.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_storage_policy.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_noproxy_info.py import-2.6!skip
-plugins/modules/appliance_networking_noproxy_info.py compile-2.6!skip
-plugins/modules/appliance_networking_noproxy_info.py import-2.7!skip
-plugins/modules/appliance_networking_noproxy_info.py compile-2.7!skip
-plugins/modules/appliance_networking_noproxy_info.py import-3.5!skip
-plugins/modules/appliance_networking_noproxy_info.py compile-3.5!skip
-plugins/modules/appliance_networking_noproxy_info.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_noproxy_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_noproxy_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_noproxy_info.py validate-modules:missing-main-call
-plugins/modules/appliance_access_ssh.py import-2.6!skip
-plugins/modules/appliance_access_ssh.py compile-2.6!skip
-plugins/modules/appliance_access_ssh.py import-2.7!skip
-plugins/modules/appliance_access_ssh.py compile-2.7!skip
-plugins/modules/appliance_access_ssh.py import-3.5!skip
-plugins/modules/appliance_access_ssh.py compile-3.5!skip
-plugins/modules/appliance_access_ssh.py future-import-boilerplate!skip
-plugins/modules/appliance_access_ssh.py metaclass-boilerplate!skip
-plugins/modules/appliance_access_ssh.py validate-modules:missing-if-name-main
-plugins/modules/appliance_access_ssh.py validate-modules:missing-main-call
-plugins/modules/appliance_health_softwarepackages_info.py import-2.6!skip
-plugins/modules/appliance_health_softwarepackages_info.py compile-2.6!skip
-plugins/modules/appliance_health_softwarepackages_info.py import-2.7!skip
-plugins/modules/appliance_health_softwarepackages_info.py compile-2.7!skip
-plugins/modules/appliance_health_softwarepackages_info.py import-3.5!skip
-plugins/modules/appliance_health_softwarepackages_info.py compile-3.5!skip
-plugins/modules/appliance_health_softwarepackages_info.py future-import-boilerplate!skip
-plugins/modules/appliance_health_softwarepackages_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_health_softwarepackages_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_health_softwarepackages_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_guest_networking_interfaces_info.py import-2.6!skip
-plugins/modules/vcenter_vm_guest_networking_interfaces_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_guest_networking_interfaces_info.py import-2.7!skip
-plugins/modules/vcenter_vm_guest_networking_interfaces_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_guest_networking_interfaces_info.py import-3.5!skip
-plugins/modules/vcenter_vm_guest_networking_interfaces_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_guest_networking_interfaces_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_guest_networking_interfaces_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_guest_networking_interfaces_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_guest_networking_interfaces_info.py validate-modules:missing-main-call
-plugins/modules/appliance_health_database_info.py import-2.6!skip
-plugins/modules/appliance_health_database_info.py compile-2.6!skip
-plugins/modules/appliance_health_database_info.py import-2.7!skip
-plugins/modules/appliance_health_database_info.py compile-2.7!skip
-plugins/modules/appliance_health_database_info.py import-3.5!skip
-plugins/modules/appliance_health_database_info.py compile-3.5!skip
-plugins/modules/appliance_health_database_info.py future-import-boilerplate!skip
-plugins/modules/appliance_health_database_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_health_database_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_health_database_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_adapter_sata.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_adapter_sata.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_firewall_inbound_info.py import-2.6!skip
-plugins/modules/appliance_networking_firewall_inbound_info.py compile-2.6!skip
-plugins/modules/appliance_networking_firewall_inbound_info.py import-2.7!skip
-plugins/modules/appliance_networking_firewall_inbound_info.py compile-2.7!skip
-plugins/modules/appliance_networking_firewall_inbound_info.py import-3.5!skip
-plugins/modules/appliance_networking_firewall_inbound_info.py compile-3.5!skip
-plugins/modules/appliance_networking_firewall_inbound_info.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_firewall_inbound_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_firewall_inbound_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_firewall_inbound_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_memory_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_memory_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_memory_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_memory_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_memory_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_memory_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_memory_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_memory_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_memory_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_memory_info.py validate-modules:missing-main-call
-plugins/modules/content_library_item_info.py import-2.6!skip
-plugins/modules/content_library_item_info.py compile-2.6!skip
-plugins/modules/content_library_item_info.py import-2.7!skip
-plugins/modules/content_library_item_info.py compile-2.7!skip
-plugins/modules/content_library_item_info.py import-3.5!skip
-plugins/modules/content_library_item_info.py compile-3.5!skip
-plugins/modules/content_library_item_info.py future-import-boilerplate!skip
-plugins/modules/content_library_item_info.py metaclass-boilerplate!skip
-plugins/modules/content_library_item_info.py validate-modules:missing-if-name-main
-plugins/modules/content_library_item_info.py validate-modules:missing-main-call
-plugins/modules/appliance_vmon_service_info.py import-2.6!skip
-plugins/modules/appliance_vmon_service_info.py compile-2.6!skip
-plugins/modules/appliance_vmon_service_info.py import-2.7!skip
-plugins/modules/appliance_vmon_service_info.py compile-2.7!skip
-plugins/modules/appliance_vmon_service_info.py import-3.5!skip
-plugins/modules/appliance_vmon_service_info.py compile-3.5!skip
-plugins/modules/appliance_vmon_service_info.py future-import-boilerplate!skip
-plugins/modules/appliance_vmon_service_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_vmon_service_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_vmon_service_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_boot_device.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_boot_device.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_boot_device.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_boot_device.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_boot_device.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_boot_device.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_boot_device.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_boot_device.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_boot_device.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_boot_device.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_noproxy.py import-2.6!skip
-plugins/modules/appliance_networking_noproxy.py compile-2.6!skip
-plugins/modules/appliance_networking_noproxy.py import-2.7!skip
-plugins/modules/appliance_networking_noproxy.py compile-2.7!skip
-plugins/modules/appliance_networking_noproxy.py import-3.5!skip
-plugins/modules/appliance_networking_noproxy.py compile-3.5!skip
-plugins/modules/appliance_networking_noproxy.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_noproxy.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_noproxy.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_noproxy.py validate-modules:missing-main-call
-plugins/modules/appliance_access_dcui_info.py import-2.6!skip
-plugins/modules/appliance_access_dcui_info.py compile-2.6!skip
-plugins/modules/appliance_access_dcui_info.py import-2.7!skip
-plugins/modules/appliance_access_dcui_info.py compile-2.7!skip
-plugins/modules/appliance_access_dcui_info.py import-3.5!skip
-plugins/modules/appliance_access_dcui_info.py compile-3.5!skip
-plugins/modules/appliance_access_dcui_info.py future-import-boilerplate!skip
-plugins/modules/appliance_access_dcui_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_access_dcui_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_access_dcui_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_disk.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_disk.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_disk.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_disk.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_disk.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_disk.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_disk.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_disk.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_disk.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_disk.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_interfaces_ipv6_info.py import-2.6!skip
-plugins/modules/appliance_networking_interfaces_ipv6_info.py compile-2.6!skip
-plugins/modules/appliance_networking_interfaces_ipv6_info.py import-2.7!skip
-plugins/modules/appliance_networking_interfaces_ipv6_info.py compile-2.7!skip
-plugins/modules/appliance_networking_interfaces_ipv6_info.py import-3.5!skip
-plugins/modules/appliance_networking_interfaces_ipv6_info.py compile-3.5!skip
-plugins/modules/appliance_networking_interfaces_ipv6_info.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_interfaces_ipv6_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_interfaces_ipv6_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_interfaces_ipv6_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_ovf_libraryitem.py import-2.6!skip
-plugins/modules/vcenter_ovf_libraryitem.py compile-2.6!skip
-plugins/modules/vcenter_ovf_libraryitem.py import-2.7!skip
-plugins/modules/vcenter_ovf_libraryitem.py compile-2.7!skip
-plugins/modules/vcenter_ovf_libraryitem.py import-3.5!skip
-plugins/modules/vcenter_ovf_libraryitem.py compile-3.5!skip
-plugins/modules/vcenter_ovf_libraryitem.py future-import-boilerplate!skip
-plugins/modules/vcenter_ovf_libraryitem.py metaclass-boilerplate!skip
-plugins/modules/vcenter_ovf_libraryitem.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_ovf_libraryitem.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_dns_domains_info.py import-2.6!skip
-plugins/modules/appliance_networking_dns_domains_info.py compile-2.6!skip
-plugins/modules/appliance_networking_dns_domains_info.py import-2.7!skip
-plugins/modules/appliance_networking_dns_domains_info.py compile-2.7!skip
-plugins/modules/appliance_networking_dns_domains_info.py import-3.5!skip
-plugins/modules/appliance_networking_dns_domains_info.py compile-3.5!skip
-plugins/modules/appliance_networking_dns_domains_info.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_dns_domains_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_dns_domains_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_dns_domains_info.py validate-modules:missing-main-call
-plugins/modules/appliance_system_globalfips.py import-2.6!skip
-plugins/modules/appliance_system_globalfips.py compile-2.6!skip
-plugins/modules/appliance_system_globalfips.py import-2.7!skip
-plugins/modules/appliance_system_globalfips.py compile-2.7!skip
-plugins/modules/appliance_system_globalfips.py import-3.5!skip
-plugins/modules/appliance_system_globalfips.py compile-3.5!skip
-plugins/modules/appliance_system_globalfips.py future-import-boilerplate!skip
-plugins/modules/appliance_system_globalfips.py metaclass-boilerplate!skip
-plugins/modules/appliance_system_globalfips.py validate-modules:missing-if-name-main
-plugins/modules/appliance_system_globalfips.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_serial.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_serial.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_serial.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_serial.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_serial.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_serial.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_serial.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_serial.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_serial.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_serial.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_firewall_inbound.py import-2.6!skip
-plugins/modules/appliance_networking_firewall_inbound.py compile-2.6!skip
-plugins/modules/appliance_networking_firewall_inbound.py import-2.7!skip
-plugins/modules/appliance_networking_firewall_inbound.py compile-2.7!skip
-plugins/modules/appliance_networking_firewall_inbound.py import-3.5!skip
-plugins/modules/appliance_networking_firewall_inbound.py compile-3.5!skip
-plugins/modules/appliance_networking_firewall_inbound.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_firewall_inbound.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_firewall_inbound.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_firewall_inbound.py validate-modules:missing-main-call
-plugins/modules/appliance_shutdown.py import-2.6!skip
-plugins/modules/appliance_shutdown.py compile-2.6!skip
-plugins/modules/appliance_shutdown.py import-2.7!skip
-plugins/modules/appliance_shutdown.py compile-2.7!skip
-plugins/modules/appliance_shutdown.py import-3.5!skip
-plugins/modules/appliance_shutdown.py compile-3.5!skip
-plugins/modules/appliance_shutdown.py future-import-boilerplate!skip
-plugins/modules/appliance_shutdown.py metaclass-boilerplate!skip
-plugins/modules/appliance_shutdown.py validate-modules:missing-if-name-main
-plugins/modules/appliance_shutdown.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_guest_networking_info.py import-2.6!skip
-plugins/modules/vcenter_vm_guest_networking_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_guest_networking_info.py import-2.7!skip
-plugins/modules/vcenter_vm_guest_networking_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_guest_networking_info.py import-3.5!skip
-plugins/modules/vcenter_vm_guest_networking_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_guest_networking_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_guest_networking_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_guest_networking_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_guest_networking_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_ethernet.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_ethernet.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_ethernet.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_ethernet.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_ethernet.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_ethernet.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_ethernet.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_ethernet.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_ethernet.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_ethernet.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_parallel_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_parallel_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_parallel_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_parallel_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_parallel_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_parallel_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_parallel_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_parallel_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_parallel_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_parallel_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_host_info.py import-2.6!skip
-plugins/modules/vcenter_host_info.py compile-2.6!skip
-plugins/modules/vcenter_host_info.py import-2.7!skip
-plugins/modules/vcenter_host_info.py compile-2.7!skip
-plugins/modules/vcenter_host_info.py import-3.5!skip
-plugins/modules/vcenter_host_info.py compile-3.5!skip
-plugins/modules/vcenter_host_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_host_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_host_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_host_info.py validate-modules:missing-main-call
-plugins/modules/appliance_timesync.py import-2.6!skip
-plugins/modules/appliance_timesync.py compile-2.6!skip
-plugins/modules/appliance_timesync.py import-2.7!skip
-plugins/modules/appliance_timesync.py compile-2.7!skip
-plugins/modules/appliance_timesync.py import-3.5!skip
-plugins/modules/appliance_timesync.py compile-3.5!skip
-plugins/modules/appliance_timesync.py future-import-boilerplate!skip
-plugins/modules/appliance_timesync.py metaclass-boilerplate!skip
-plugins/modules/appliance_timesync.py validate-modules:missing-if-name-main
-plugins/modules/appliance_timesync.py validate-modules:missing-main-call
-plugins/modules/vcenter_network_info.py import-2.6!skip
-plugins/modules/vcenter_network_info.py compile-2.6!skip
-plugins/modules/vcenter_network_info.py import-2.7!skip
-plugins/modules/vcenter_network_info.py compile-2.7!skip
-plugins/modules/vcenter_network_info.py import-3.5!skip
-plugins/modules/vcenter_network_info.py compile-3.5!skip
-plugins/modules/vcenter_network_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_network_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_network_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_network_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_boot.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_boot.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_boot.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_boot.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_boot.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_boot.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_boot.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_boot.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_boot.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_boot.py validate-modules:missing-main-call
-plugins/modules/appliance_shutdown_info.py import-2.6!skip
-plugins/modules/appliance_shutdown_info.py compile-2.6!skip
-plugins/modules/appliance_shutdown_info.py import-2.7!skip
-plugins/modules/appliance_shutdown_info.py compile-2.7!skip
-plugins/modules/appliance_shutdown_info.py import-3.5!skip
-plugins/modules/appliance_shutdown_info.py compile-3.5!skip
-plugins/modules/appliance_shutdown_info.py future-import-boilerplate!skip
-plugins/modules/appliance_shutdown_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_shutdown_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_shutdown_info.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_dns_servers.py import-2.6!skip
-plugins/modules/appliance_networking_dns_servers.py compile-2.6!skip
-plugins/modules/appliance_networking_dns_servers.py import-2.7!skip
-plugins/modules/appliance_networking_dns_servers.py compile-2.7!skip
-plugins/modules/appliance_networking_dns_servers.py import-3.5!skip
-plugins/modules/appliance_networking_dns_servers.py compile-3.5!skip
-plugins/modules/appliance_networking_dns_servers.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_dns_servers.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_dns_servers.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_dns_servers.py validate-modules:missing-main-call
-plugins/modules/vcenter_cluster_info.py import-2.6!skip
-plugins/modules/vcenter_cluster_info.py compile-2.6!skip
-plugins/modules/vcenter_cluster_info.py import-2.7!skip
-plugins/modules/vcenter_cluster_info.py compile-2.7!skip
-plugins/modules/vcenter_cluster_info.py import-3.5!skip
-plugins/modules/vcenter_cluster_info.py compile-3.5!skip
-plugins/modules/vcenter_cluster_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_cluster_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_cluster_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_cluster_info.py validate-modules:missing-main-call
-plugins/modules/appliance_localaccounts_globalpolicy_info.py import-2.6!skip
-plugins/modules/appliance_localaccounts_globalpolicy_info.py compile-2.6!skip
-plugins/modules/appliance_localaccounts_globalpolicy_info.py import-2.7!skip
-plugins/modules/appliance_localaccounts_globalpolicy_info.py compile-2.7!skip
-plugins/modules/appliance_localaccounts_globalpolicy_info.py import-3.5!skip
-plugins/modules/appliance_localaccounts_globalpolicy_info.py compile-3.5!skip
-plugins/modules/appliance_localaccounts_globalpolicy_info.py future-import-boilerplate!skip
-plugins/modules/appliance_localaccounts_globalpolicy_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_localaccounts_globalpolicy_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_localaccounts_globalpolicy_info.py validate-modules:missing-main-call
-plugins/modules/appliance_system_storage.py import-2.6!skip
-plugins/modules/appliance_system_storage.py compile-2.6!skip
-plugins/modules/appliance_system_storage.py import-2.7!skip
-plugins/modules/appliance_system_storage.py compile-2.7!skip
-plugins/modules/appliance_system_storage.py import-3.5!skip
-plugins/modules/appliance_system_storage.py compile-3.5!skip
-plugins/modules/appliance_system_storage.py future-import-boilerplate!skip
-plugins/modules/appliance_system_storage.py metaclass-boilerplate!skip
-plugins/modules/appliance_system_storage.py validate-modules:missing-if-name-main
-plugins/modules/appliance_system_storage.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_storage_policy_info.py import-2.6!skip
-plugins/modules/vcenter_vm_storage_policy_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_storage_policy_info.py import-2.7!skip
-plugins/modules/vcenter_vm_storage_policy_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_storage_policy_info.py import-3.5!skip
-plugins/modules/vcenter_vm_storage_policy_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_storage_policy_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_storage_policy_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_storage_policy_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_storage_policy_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm.py import-2.6!skip
-plugins/modules/vcenter_vm.py compile-2.6!skip
-plugins/modules/vcenter_vm.py import-2.7!skip
-plugins/modules/vcenter_vm.py compile-2.7!skip
-plugins/modules/vcenter_vm.py import-3.5!skip
-plugins/modules/vcenter_vm.py compile-3.5!skip
-plugins/modules/vcenter_vm.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_proxy_info.py import-2.6!skip
-plugins/modules/appliance_networking_proxy_info.py compile-2.6!skip
-plugins/modules/appliance_networking_proxy_info.py import-2.7!skip
-plugins/modules/appliance_networking_proxy_info.py compile-2.7!skip
-plugins/modules/appliance_networking_proxy_info.py import-3.5!skip
-plugins/modules/appliance_networking_proxy_info.py compile-3.5!skip
-plugins/modules/appliance_networking_proxy_info.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_proxy_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_proxy_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_proxy_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_power_info.py import-2.6!skip
-plugins/modules/vcenter_vm_power_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_power_info.py import-2.7!skip
-plugins/modules/vcenter_vm_power_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_power_info.py import-3.5!skip
-plugins/modules/vcenter_vm_power_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_power_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_power_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_power_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_power_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_boot_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_boot_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_boot_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_boot_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_boot_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_boot_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_boot_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_boot_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_boot_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_boot_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_tools_info.py import-2.6!skip
-plugins/modules/vcenter_vm_tools_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_tools_info.py import-2.7!skip
-plugins/modules/vcenter_vm_tools_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_tools_info.py import-3.5!skip
-plugins/modules/vcenter_vm_tools_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_tools_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_tools_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_tools_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_tools_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_cpu_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_cpu_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_cpu_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_cpu_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_cpu_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_cpu_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_cpu_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_cpu_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_cpu_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_cpu_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_tools_installer_info.py import-2.6!skip
-plugins/modules/vcenter_vm_tools_installer_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_tools_installer_info.py import-2.7!skip
-plugins/modules/vcenter_vm_tools_installer_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_tools_installer_info.py import-3.5!skip
-plugins/modules/vcenter_vm_tools_installer_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_tools_installer_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_tools_installer_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_tools_installer_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_tools_installer_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware.py validate-modules:missing-main-call
-plugins/modules/appliance_services.py import-2.6!skip
-plugins/modules/appliance_services.py compile-2.6!skip
-plugins/modules/appliance_services.py import-2.7!skip
-plugins/modules/appliance_services.py compile-2.7!skip
-plugins/modules/appliance_services.py import-3.5!skip
-plugins/modules/appliance_services.py compile-3.5!skip
-plugins/modules/appliance_services.py future-import-boilerplate!skip
-plugins/modules/appliance_services.py metaclass-boilerplate!skip
-plugins/modules/appliance_services.py validate-modules:missing-if-name-main
-plugins/modules/appliance_services.py validate-modules:missing-main-call
-plugins/modules/appliance_health_databasestorage_info.py import-2.6!skip
-plugins/modules/appliance_health_databasestorage_info.py compile-2.6!skip
-plugins/modules/appliance_health_databasestorage_info.py import-2.7!skip
-plugins/modules/appliance_health_databasestorage_info.py compile-2.7!skip
-plugins/modules/appliance_health_databasestorage_info.py import-3.5!skip
-plugins/modules/appliance_health_databasestorage_info.py compile-3.5!skip
-plugins/modules/appliance_health_databasestorage_info.py future-import-boilerplate!skip
-plugins/modules/appliance_health_databasestorage_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_health_databasestorage_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_health_databasestorage_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_guest_identity_info.py import-2.6!skip
-plugins/modules/vcenter_vm_guest_identity_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_guest_identity_info.py import-2.7!skip
-plugins/modules/vcenter_vm_guest_identity_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_guest_identity_info.py import-3.5!skip
-plugins/modules/vcenter_vm_guest_identity_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_guest_identity_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_guest_identity_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_guest_identity_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_guest_identity_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_boot_device_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_boot_device_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_boot_device_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_boot_device_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_boot_device_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_boot_device_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_boot_device_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_boot_device_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_boot_device_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_boot_device_info.py validate-modules:missing-main-call
-plugins/modules/appliance_health_storage_info.py import-2.6!skip
-plugins/modules/appliance_health_storage_info.py compile-2.6!skip
-plugins/modules/appliance_health_storage_info.py import-2.7!skip
-plugins/modules/appliance_health_storage_info.py compile-2.7!skip
-plugins/modules/appliance_health_storage_info.py import-3.5!skip
-plugins/modules/appliance_health_storage_info.py compile-3.5!skip
-plugins/modules/appliance_health_storage_info.py future-import-boilerplate!skip
-plugins/modules/appliance_health_storage_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_health_storage_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_health_storage_info.py validate-modules:missing-main-call
-plugins/modules/appliance_health_swap_info.py import-2.6!skip
-plugins/modules/appliance_health_swap_info.py compile-2.6!skip
-plugins/modules/appliance_health_swap_info.py import-2.7!skip
-plugins/modules/appliance_health_swap_info.py compile-2.7!skip
-plugins/modules/appliance_health_swap_info.py import-3.5!skip
-plugins/modules/appliance_health_swap_info.py compile-3.5!skip
-plugins/modules/appliance_health_swap_info.py future-import-boilerplate!skip
-plugins/modules/appliance_health_swap_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_health_swap_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_health_swap_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_power.py import-2.6!skip
-plugins/modules/vcenter_vm_power.py compile-2.6!skip
-plugins/modules/vcenter_vm_power.py import-2.7!skip
-plugins/modules/vcenter_vm_power.py compile-2.7!skip
-plugins/modules/vcenter_vm_power.py import-3.5!skip
-plugins/modules/vcenter_vm_power.py compile-3.5!skip
-plugins/modules/vcenter_vm_power.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_power.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_power.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_power.py validate-modules:missing-main-call
-plugins/modules/vcenter_vmtemplate_libraryitems.py import-2.6!skip
-plugins/modules/vcenter_vmtemplate_libraryitems.py compile-2.6!skip
-plugins/modules/vcenter_vmtemplate_libraryitems.py import-2.7!skip
-plugins/modules/vcenter_vmtemplate_libraryitems.py compile-2.7!skip
-plugins/modules/vcenter_vmtemplate_libraryitems.py import-3.5!skip
-plugins/modules/vcenter_vmtemplate_libraryitems.py compile-3.5!skip
-plugins/modules/vcenter_vmtemplate_libraryitems.py future-import-boilerplate!skip
-plugins/modules/vcenter_vmtemplate_libraryitems.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vmtemplate_libraryitems.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vmtemplate_libraryitems.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_guest_networking_routes_info.py import-2.6!skip
-plugins/modules/vcenter_vm_guest_networking_routes_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_guest_networking_routes_info.py import-2.7!skip
-plugins/modules/vcenter_vm_guest_networking_routes_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_guest_networking_routes_info.py import-3.5!skip
-plugins/modules/vcenter_vm_guest_networking_routes_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_guest_networking_routes_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_guest_networking_routes_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_guest_networking_routes_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_guest_networking_routes_info.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_dns_domains.py import-2.6!skip
-plugins/modules/appliance_networking_dns_domains.py compile-2.6!skip
-plugins/modules/appliance_networking_dns_domains.py import-2.7!skip
-plugins/modules/appliance_networking_dns_domains.py compile-2.7!skip
-plugins/modules/appliance_networking_dns_domains.py import-3.5!skip
-plugins/modules/appliance_networking_dns_domains.py compile-3.5!skip
-plugins/modules/appliance_networking_dns_domains.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_dns_domains.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_dns_domains.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_dns_domains.py validate-modules:missing-main-call
-plugins/modules/vcenter_storage_policies_info.py import-2.6!skip
-plugins/modules/vcenter_storage_policies_info.py compile-2.6!skip
-plugins/modules/vcenter_storage_policies_info.py import-2.7!skip
-plugins/modules/vcenter_storage_policies_info.py compile-2.7!skip
-plugins/modules/vcenter_storage_policies_info.py import-3.5!skip
-plugins/modules/vcenter_storage_policies_info.py compile-3.5!skip
-plugins/modules/vcenter_storage_policies_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_storage_policies_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_storage_policies_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_storage_policies_info.py validate-modules:missing-main-call
-plugins/modules/appliance_access_dcui.py import-2.6!skip
-plugins/modules/appliance_access_dcui.py compile-2.6!skip
-plugins/modules/appliance_access_dcui.py import-2.7!skip
-plugins/modules/appliance_access_dcui.py compile-2.7!skip
-plugins/modules/appliance_access_dcui.py import-3.5!skip
-plugins/modules/appliance_access_dcui.py compile-3.5!skip
-plugins/modules/appliance_access_dcui.py future-import-boilerplate!skip
-plugins/modules/appliance_access_dcui.py metaclass-boilerplate!skip
-plugins/modules/appliance_access_dcui.py validate-modules:missing-if-name-main
-plugins/modules/appliance_access_dcui.py validate-modules:missing-main-call
-plugins/modules/appliance_system_time_timezone_info.py import-2.6!skip
-plugins/modules/appliance_system_time_timezone_info.py compile-2.6!skip
-plugins/modules/appliance_system_time_timezone_info.py import-2.7!skip
-plugins/modules/appliance_system_time_timezone_info.py compile-2.7!skip
-plugins/modules/appliance_system_time_timezone_info.py import-3.5!skip
-plugins/modules/appliance_system_time_timezone_info.py compile-3.5!skip
-plugins/modules/appliance_system_time_timezone_info.py future-import-boilerplate!skip
-plugins/modules/appliance_system_time_timezone_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_system_time_timezone_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_system_time_timezone_info.py validate-modules:missing-main-call
-plugins/modules/appliance_ntp.py import-2.6!skip
-plugins/modules/appliance_ntp.py compile-2.6!skip
-plugins/modules/appliance_ntp.py import-2.7!skip
-plugins/modules/appliance_ntp.py compile-2.7!skip
-plugins/modules/appliance_ntp.py import-3.5!skip
-plugins/modules/appliance_ntp.py compile-3.5!skip
-plugins/modules/appliance_ntp.py future-import-boilerplate!skip
-plugins/modules/appliance_ntp.py metaclass-boilerplate!skip
-plugins/modules/appliance_ntp.py validate-modules:missing-if-name-main
-plugins/modules/appliance_ntp.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_parallel.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_parallel.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_parallel.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_parallel.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_parallel.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_parallel.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_parallel.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_parallel.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_parallel.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_parallel.py validate-modules:missing-main-call
-plugins/modules/vcenter_datacenter.py import-2.6!skip
-plugins/modules/vcenter_datacenter.py compile-2.6!skip
-plugins/modules/vcenter_datacenter.py import-2.7!skip
-plugins/modules/vcenter_datacenter.py compile-2.7!skip
-plugins/modules/vcenter_datacenter.py import-3.5!skip
-plugins/modules/vcenter_datacenter.py compile-3.5!skip
-plugins/modules/vcenter_datacenter.py future-import-boilerplate!skip
-plugins/modules/vcenter_datacenter.py metaclass-boilerplate!skip
-plugins/modules/vcenter_datacenter.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_datacenter.py validate-modules:missing-main-call
-plugins/modules/appliance_system_time_timezone.py import-2.6!skip
-plugins/modules/appliance_system_time_timezone.py compile-2.6!skip
-plugins/modules/appliance_system_time_timezone.py import-2.7!skip
-plugins/modules/appliance_system_time_timezone.py compile-2.7!skip
-plugins/modules/appliance_system_time_timezone.py import-3.5!skip
-plugins/modules/appliance_system_time_timezone.py compile-3.5!skip
-plugins/modules/appliance_system_time_timezone.py future-import-boilerplate!skip
-plugins/modules/appliance_system_time_timezone.py metaclass-boilerplate!skip
-plugins/modules/appliance_system_time_timezone.py validate-modules:missing-if-name-main
-plugins/modules/appliance_system_time_timezone.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_disk_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_disk_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_disk_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_disk_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_disk_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_disk_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_disk_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_disk_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_disk_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_disk_info.py validate-modules:missing-main-call
-plugins/modules/appliance_access_shell.py import-2.6!skip
-plugins/modules/appliance_access_shell.py compile-2.6!skip
-plugins/modules/appliance_access_shell.py import-2.7!skip
-plugins/modules/appliance_access_shell.py compile-2.7!skip
-plugins/modules/appliance_access_shell.py import-3.5!skip
-plugins/modules/appliance_access_shell.py compile-3.5!skip
-plugins/modules/appliance_access_shell.py future-import-boilerplate!skip
-plugins/modules/appliance_access_shell.py metaclass-boilerplate!skip
-plugins/modules/appliance_access_shell.py validate-modules:missing-if-name-main
-plugins/modules/appliance_access_shell.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_floppy.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_floppy.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_floppy.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_floppy.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_floppy.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_floppy.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_floppy.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_floppy.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_floppy.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_floppy.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_guest_power_info.py import-2.6!skip
-plugins/modules/vcenter_vm_guest_power_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_guest_power_info.py import-2.7!skip
-plugins/modules/vcenter_vm_guest_power_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_guest_power_info.py import-3.5!skip
-plugins/modules/vcenter_vm_guest_power_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_guest_power_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_guest_power_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_guest_power_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_guest_power_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_adapter_scsi.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_adapter_scsi.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_adapter_scsi.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_guest_customization.py import-2.6!skip
-plugins/modules/vcenter_vm_guest_customization.py compile-2.6!skip
-plugins/modules/vcenter_vm_guest_customization.py import-2.7!skip
-plugins/modules/vcenter_vm_guest_customization.py compile-2.7!skip
-plugins/modules/vcenter_vm_guest_customization.py import-3.5!skip
-plugins/modules/vcenter_vm_guest_customization.py compile-3.5!skip
-plugins/modules/vcenter_vm_guest_customization.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_guest_customization.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_guest_customization.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_guest_customization.py validate-modules:missing-main-call
-plugins/modules/vcenter_vm_hardware_adapter_sata_info.py import-2.6!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata_info.py compile-2.6!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata_info.py import-2.7!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata_info.py compile-2.7!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata_info.py import-3.5!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata_info.py compile-3.5!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_vm_hardware_adapter_sata_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_vm_hardware_adapter_sata_info.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_interfaces_info.py import-2.6!skip
-plugins/modules/appliance_networking_interfaces_info.py compile-2.6!skip
-plugins/modules/appliance_networking_interfaces_info.py import-2.7!skip
-plugins/modules/appliance_networking_interfaces_info.py compile-2.7!skip
-plugins/modules/appliance_networking_interfaces_info.py import-3.5!skip
-plugins/modules/appliance_networking_interfaces_info.py compile-3.5!skip
-plugins/modules/appliance_networking_interfaces_info.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_interfaces_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_interfaces_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_interfaces_info.py validate-modules:missing-main-call
-plugins/modules/vcenter_resourcepool_info.py import-2.6!skip
-plugins/modules/vcenter_resourcepool_info.py compile-2.6!skip
-plugins/modules/vcenter_resourcepool_info.py import-2.7!skip
-plugins/modules/vcenter_resourcepool_info.py compile-2.7!skip
-plugins/modules/vcenter_resourcepool_info.py import-3.5!skip
-plugins/modules/vcenter_resourcepool_info.py compile-3.5!skip
-plugins/modules/vcenter_resourcepool_info.py future-import-boilerplate!skip
-plugins/modules/vcenter_resourcepool_info.py metaclass-boilerplate!skip
-plugins/modules/vcenter_resourcepool_info.py validate-modules:missing-if-name-main
-plugins/modules/vcenter_resourcepool_info.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_interfaces_ipv4_info.py import-2.6!skip
-plugins/modules/appliance_networking_interfaces_ipv4_info.py compile-2.6!skip
-plugins/modules/appliance_networking_interfaces_ipv4_info.py import-2.7!skip
-plugins/modules/appliance_networking_interfaces_ipv4_info.py compile-2.7!skip
-plugins/modules/appliance_networking_interfaces_ipv4_info.py import-3.5!skip
-plugins/modules/appliance_networking_interfaces_ipv4_info.py compile-3.5!skip
-plugins/modules/appliance_networking_interfaces_ipv4_info.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_interfaces_ipv4_info.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_interfaces_ipv4_info.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_interfaces_ipv4_info.py validate-modules:missing-main-call
-plugins/modules/appliance_networking_interfaces_ipv6.py import-2.6!skip
-plugins/modules/appliance_networking_interfaces_ipv6.py compile-2.6!skip
-plugins/modules/appliance_networking_interfaces_ipv6.py import-2.7!skip
-plugins/modules/appliance_networking_interfaces_ipv6.py compile-2.7!skip
-plugins/modules/appliance_networking_interfaces_ipv6.py import-3.5!skip
-plugins/modules/appliance_networking_interfaces_ipv6.py compile-3.5!skip
-plugins/modules/appliance_networking_interfaces_ipv6.py future-import-boilerplate!skip
-plugins/modules/appliance_networking_interfaces_ipv6.py metaclass-boilerplate!skip
-plugins/modules/appliance_networking_interfaces_ipv6.py validate-modules:missing-if-name-main
-plugins/modules/appliance_networking_interfaces_ipv6.py validate-modules:missing-main-call
-plugins/lookup/datastore_moid.py compile-2.6!skip
-plugins/lookup/datastore_moid.py compile-2.7!skip
-plugins/lookup/datastore_moid.py compile-3.5!skip
-plugins/lookup/resource_pool_moid.py compile-2.6!skip
-plugins/lookup/resource_pool_moid.py compile-2.7!skip
-plugins/lookup/resource_pool_moid.py compile-3.5!skip
-plugins/lookup/cluster_moid.py compile-2.6!skip
-plugins/lookup/cluster_moid.py compile-2.7!skip
-plugins/lookup/cluster_moid.py compile-3.5!skip
-plugins/lookup/network_moid.py compile-2.6!skip
-plugins/lookup/network_moid.py compile-2.7!skip
-plugins/lookup/network_moid.py compile-3.5!skip
-plugins/lookup/host_moid.py compile-2.6!skip
-plugins/lookup/host_moid.py compile-2.7!skip
-plugins/lookup/host_moid.py compile-3.5!skip
-plugins/lookup/folder_moid.py compile-2.6!skip
-plugins/lookup/folder_moid.py compile-2.7!skip
-plugins/lookup/folder_moid.py compile-3.5!skip
-plugins/lookup/vm_moid.py compile-2.6!skip
-plugins/lookup/vm_moid.py compile-2.7!skip
-plugins/lookup/vm_moid.py compile-3.5!skip
-plugins/lookup/datacenter_moid.py compile-2.6!skip
-plugins/lookup/datacenter_moid.py compile-2.7!skip
-plugins/lookup/datacenter_moid.py compile-3.5!skip
-plugins/module_utils/vmware_rest.py future-import-boilerplate!skip
-plugins/module_utils/vmware_rest.py metaclass-boilerplate!skip
-plugins/module_utils/vmware_rest.py import-2.6!skip
-plugins/module_utils/vmware_rest.py compile-2.6!skip
-plugins/module_utils/vmware_rest.py import-2.7!skip
-plugins/module_utils/vmware_rest.py compile-2.7!skip
-plugins/module_utils/vmware_rest.py import-3.5!skip
-plugins/module_utils/vmware_rest.py compile-3.5!skip
-plugins/plugin_utils/lookup.py compile-2.6!skip
-plugins/plugin_utils/lookup.py compile-2.7!skip
-plugins/plugin_utils/lookup.py compile-3.5!skip
diff --git a/ansible_collections/vmware/vmware_rest/tox.ini b/ansible_collections/vmware/vmware_rest/tox.ini
index 5282ce308..82bfe491b 100644
--- a/ansible_collections/vmware/vmware_rest/tox.ini
+++ b/ansible_collections/vmware/vmware_rest/tox.ini
@@ -8,31 +8,10 @@ deps = -r{toxinidir}/requirements.txt
-r{toxinidir}/test-requirements.txt
install_command = pip install {opts} {packages}
-[testenv:black]
-deps =
- black==19.10b0
- click==8.0.2
-commands =
- black {toxinidir}/plugins {toxinidir}/tests
-
[testenv:add_docs]
deps = git+https://github.com/ansible-network/collection_prep
commands = collection_prep_add_docs -p .
-[testenv:refresh_modules]
-deps =
- git+https://github.com/ansible-collections/gouttelette
- git+https://github.com/ansible-collections/vmware_rest_code_generator
- black==19.10b0
- click==8.0.2
-commands =
- gouttelette-refresh-modules --target-dir . --collection vmware_rest {posargs}
- gouttelette-refresh-ignore-files --target-dir .
- black {toxinidir}/plugins {toxinidir}/tests
- echo "now you can update the RETURN block, see https://github.com/ansible-collections/vmware_rest_code_generator#how-to-refresh-the-vmwarevmware_rest-content"
-allowlist_externals =
- echo
-
[testenv:build_manual]
deps = -r{toxinidir}/docs-requirements.txt
changedir = {toxinidir}/manual/source
@@ -57,15 +36,31 @@ setenv =
ESXI2_PASSWORD = {env:ESXI2_PASSWORD}
VMWARE_VALIDATE_CERTS = {env:VMWARE_VALIDATE_CERTS}
+[testenv:black]
+depends =
+ isort
+deps =
+ black >=23.0, <24.0
+commands =
+ black -v {toxinidir}/plugins {toxinidir}/tests
+
+[testenv:isort]
+deps =
+ isort
+commands =
+ isort --profile black {toxinidir}/plugins {toxinidir}/tests
+
[testenv:linters]
deps =
- black==19.10b0
+ black
click==8.0.2
flake8
antsibull-changelog
antsibull-docs
+ {[testenv:isort]deps}
commands =
black -v --check {toxinidir}/plugins {toxinidir}/tests
+ isort --profile black --check-only --diff {toxinidir}/plugins {toxinidir}/tests
flake8 {posargs} {toxinidir}/plugins {toxinidir}/tests
antsibull-changelog lint-changelog-yaml changelogs/changelog.yaml
antsibull-docs lint-collection-docs .
@@ -104,9 +99,3 @@ ignore = E123,E125,E203,E402,E501,E741,F401,F811,F841,W503
max-line-length = 160
builtins = _
exclude = .git,.tox,tests/unit/compat/
-
-[testenv:refresh-examples]
-deps =
- git+https://github.com/ansible-collections/gouttelette
-commands =
- gouttelette-refresh-examples --target-dir {toxinidir}
diff --git a/build-ansible.sh b/build-ansible.sh
index 0106e3787..f4ee1bc9f 100755
--- a/build-ansible.sh
+++ b/build-ansible.sh
@@ -5,13 +5,13 @@
set -e
-VERSION="9.5.1"
-MAJOR="9"
+VERSION="10.0.0"
+MAJOR="10"
# For idempotency, remove build data or built output first
rm -rf ansible-build-data built
-pip3 install --user --upgrade "antsibull==0.61.1"
+pip3 install --user --upgrade "antsibull==0.63.1"
git clone https://github.com/ansible-community/ansible-build-data.git
mkdir -p built collection-cache
BUILD_DATA_DIR="ansible-build-data/${MAJOR}"
diff --git a/porting_guide_10.rst b/porting_guide_10.rst
new file mode 100644
index 000000000..b485ddaae
--- /dev/null
+++ b/porting_guide_10.rst
@@ -0,0 +1,569 @@
+..
+ THIS DOCUMENT IS AUTOMATICALLY GENERATED BY ANTSIBULL! PLEASE DO NOT EDIT MANUALLY! (YOU PROBABLY WANT TO EDIT porting_guide_core_2.17.rst)
+
+.. _porting_10_guide:
+
+========================
+Ansible 10 Porting Guide
+========================
+
+.. contents::
+ :depth: 2
+
+
+Ansible 10 is based on Ansible-core 2.17.
+
+We suggest you read this page along with the `Ansible 10 Changelog <https://github.com/ansible-community/ansible-build-data/blob/main/10/CHANGELOG-v10.md>`_ to understand what updates you may need to make.
+
+Playbook
+========
+
+No notable changes
+
+
+Command Line
+============
+
+* Python 2.7 and Python 3.6 are no longer supported remote versions. Python 3.7+ is now required for target execution.
+
+
+Deprecated
+==========
+
+No notable changes
+
+
+Modules
+=======
+
+No notable changes
+
+
+Modules removed
+---------------
+
+The following modules no longer exist:
+
+* No notable changes
+
+
+Deprecation notices
+-------------------
+
+No notable changes
+
+
+Noteworthy module changes
+-------------------------
+
+No notable changes
+
+
+Plugins
+=======
+
+No notable changes
+
+
+Porting custom scripts
+======================
+
+No notable changes
+
+
+Networking
+==========
+
+No notable changes
+
+Porting Guide for v10.0.0
+=========================
+
+Added Collections
+-----------------
+
+- community.library_inventory_filtering_v1 (version 1.0.1)
+- kaytus.ksmanage (version 1.2.1)
+
+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.
+
+Breaking Changes
+----------------
+
+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
+
+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.
+
+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)
+
+Removed Features
+----------------
+
+- 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.
+
+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).
+- 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).
+
+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/new/choose>`__ (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).
diff --git a/porting_guide_9.rst b/porting_guide_9.rst
deleted file mode 100644
index 5cb141616..000000000
--- a/porting_guide_9.rst
+++ /dev/null
@@ -1,809 +0,0 @@
-..
- THIS DOCUMENT IS AUTOMATICALLY GENERATED BY ANTSIBULL! PLEASE DO NOT EDIT MANUALLY! (YOU PROBABLY WANT TO EDIT porting_guide_core_2.16.rst)
-
-.. _porting_9_guide:
-
-=======================
-Ansible 9 Porting Guide
-=======================
-
-.. contents::
- :depth: 2
-
-
-Ansible 9 is based on Ansible-core 2.16.
-
-We suggest you read this page along with the `Ansible 9 Changelog <https://github.com/ansible-community/ansible-build-data/blob/main/9/CHANGELOG-v9.md>`_ to understand what updates you may need to make.
-
-Playbook
-========
-
-* Conditionals - due to mitigation of security issue CVE-2023-5764 in ansible-core 2.16.1,
- conditional expressions with embedded template blocks can fail with the message
- "``Conditional is marked as unsafe, and cannot be evaluated.``" when an embedded template
- consults data from untrusted sources like module results or vars marked ``!unsafe``.
- Conditionals with embedded templates can be a source of malicious template injection when
- referencing untrusted data, and can nearly always be rewritten without embedded
- templates. Playbook task conditional keywords such as ``when`` and ``until`` have long
- displayed warnings discouraging use of embedded templates in conditionals; this warning
- has been expanded to non-task conditionals as well, such as the ``assert`` action.
-
- .. code-block:: yaml
-
- - name: task with a module result (always untrusted by Ansible)
- shell: echo "hi mom"
- register: untrusted_result
-
- # don't do it this way...
- # - name: insecure conditional with embedded template consulting untrusted data
- # assert:
- # that: '"hi mom" is in {{ untrusted_result.stdout }}'
-
- - name: securely access untrusted values directly as Jinja variables instead
- assert:
- that: '"hi mom" is in untrusted_result.stdout'
-
-Command Line
-============
-
-
-Deprecated
-==========
-
-
-Modules
-=======
-
-
-
-Modules removed
----------------
-
-
-
-Deprecation notices
--------------------
-
-
-
-Noteworthy module changes
--------------------------
-
-
-
-Plugins
-=======
-
-
-
-Porting custom scripts
-======================
-
-
-
-Networking
-==========
-
-Porting Guide for v9.5.1
-========================
-
-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.
-
-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).
-
-Porting Guide for v9.4.0
-========================
-
-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).
-
-Porting Guide for v9.3.0
-========================
-
-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.
-
-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).
-- 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).
-- 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/new/choose>`__ (https://github.com/ansible-collections/community.crypto/issues/712, https://github.com/ansible-collections/community.crypto/pull/714).
-
-Porting Guide for v9.2.0
-========================
-
-Added Collections
------------------
-
-- community.library_inventory_filtering_v1 (version 1.0.0)
-
-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.
-
-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.
-
-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).
-
-Porting Guide for v9.1.0
-========================
-
-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.
-
-Breaking Changes
-----------------
-
-Ansible-core
-~~~~~~~~~~~~
-
-- assert - Nested templating may result in an inability for the conditional to be evaluated. See the porting guide for more information.
-
-Porting Guide for v9.0.0
-========================
-
-Added Collections
------------------
-
-- ibm.storage_virtualize (version 2.1.0)
-- telekom_mms.icinga_director (version 1.34.1)
-
-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.
-
-Breaking Changes
-----------------
-
-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.
-
-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
-
-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)
-
-Removed Features
-----------------
-
-- 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 <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).
-- 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
-
-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-collections/overview/blob/main/removal_from_ansible.rst#cancelling-removal-of-an-unmaintained-collection>`__ (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).
-- 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).
-- 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).
-
-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.
diff --git a/setup.cfg b/setup.cfg
index f115cb2fd..281fbad2a 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -22,7 +22,7 @@ classifiers =
Programming Language :: Python :: 3.11
Programming Language :: Python :: 3.12
Programming Language :: Python :: 3 :: Only
-version = 9.5.1
+version = 10.0.0
project_urls =
Build Data = https://github.com/ansible-community/ansible-build-data
Code of Conduct = https://docs.ansible.com/ansible/latest/community/code_of_conduct.html
@@ -33,7 +33,7 @@ project_urls =
[options]
zip_safe = False
install_requires =
- ansible-core ~= 2.16.6
+ ansible-core ~= 2.17.0
python_requires = >=3.10
package_dir =
=.
@@ -144,10 +144,6 @@ exclude =
ansible_collections.community.aws.tests.*
ansible_collections.community.aws.docs
ansible_collections.community.aws.docs.*
- ansible_collections.community.azure.tests
- ansible_collections.community.azure.tests.*
- ansible_collections.community.azure.docs
- ansible_collections.community.azure.docs.*
ansible_collections.community.ciscosmb.tests
ansible_collections.community.ciscosmb.tests.*
ansible_collections.community.ciscosmb.docs
@@ -224,10 +220,6 @@ exclude =
ansible_collections.community.routeros.tests.*
ansible_collections.community.routeros.docs
ansible_collections.community.routeros.docs.*
- ansible_collections.community.sap.tests
- ansible_collections.community.sap.tests.*
- ansible_collections.community.sap.docs
- ansible_collections.community.sap.docs.*
ansible_collections.community.sap_libs.tests
ansible_collections.community.sap_libs.tests.*
ansible_collections.community.sap_libs.docs
@@ -292,10 +284,6 @@ exclude =
ansible_collections.frr.frr.tests.*
ansible_collections.frr.frr.docs
ansible_collections.frr.frr.docs.*
- ansible_collections.gluster.gluster.tests
- ansible_collections.gluster.gluster.tests.*
- ansible_collections.gluster.gluster.docs
- ansible_collections.gluster.gluster.docs.*
ansible_collections.google.cloud.tests
ansible_collections.google.cloud.tests.*
ansible_collections.google.cloud.docs
@@ -308,10 +296,6 @@ exclude =
ansible_collections.hetzner.hcloud.tests.*
ansible_collections.hetzner.hcloud.docs
ansible_collections.hetzner.hcloud.docs.*
- ansible_collections.hpe.nimble.tests
- ansible_collections.hpe.nimble.tests.*
- ansible_collections.hpe.nimble.docs
- ansible_collections.hpe.nimble.docs.*
ansible_collections.ibm.qradar.tests
ansible_collections.ibm.qradar.tests.*
ansible_collections.ibm.qradar.docs
@@ -344,6 +328,10 @@ exclude =
ansible_collections.junipernetworks.junos.tests.*
ansible_collections.junipernetworks.junos.docs
ansible_collections.junipernetworks.junos.docs.*
+ ansible_collections.kaytus.ksmanage.tests
+ ansible_collections.kaytus.ksmanage.tests.*
+ ansible_collections.kaytus.ksmanage.docs
+ ansible_collections.kaytus.ksmanage.docs.*
ansible_collections.kubernetes.core.tests
ansible_collections.kubernetes.core.tests.*
ansible_collections.kubernetes.core.docs
@@ -356,22 +344,10 @@ exclude =
ansible_collections.microsoft.ad.tests.*
ansible_collections.microsoft.ad.docs
ansible_collections.microsoft.ad.docs.*
- ansible_collections.netapp.aws.tests
- ansible_collections.netapp.aws.tests.*
- ansible_collections.netapp.aws.docs
- ansible_collections.netapp.aws.docs.*
- ansible_collections.netapp.azure.tests
- ansible_collections.netapp.azure.tests.*
- ansible_collections.netapp.azure.docs
- ansible_collections.netapp.azure.docs.*
ansible_collections.netapp.cloudmanager.tests
ansible_collections.netapp.cloudmanager.tests.*
ansible_collections.netapp.cloudmanager.docs
ansible_collections.netapp.cloudmanager.docs.*
- ansible_collections.netapp.elementsw.tests
- ansible_collections.netapp.elementsw.tests.*
- ansible_collections.netapp.elementsw.docs
- ansible_collections.netapp.elementsw.docs.*
ansible_collections.netapp.ontap.tests
ansible_collections.netapp.ontap.tests.*
ansible_collections.netapp.ontap.docs
@@ -380,10 +356,6 @@ exclude =
ansible_collections.netapp.storagegrid.tests.*
ansible_collections.netapp.storagegrid.docs
ansible_collections.netapp.storagegrid.docs.*
- ansible_collections.netapp.um_info.tests
- ansible_collections.netapp.um_info.tests.*
- ansible_collections.netapp.um_info.docs
- ansible_collections.netapp.um_info.docs.*
ansible_collections.netapp_eseries.santricity.tests
ansible_collections.netapp_eseries.santricity.tests.*
ansible_collections.netapp_eseries.santricity.docs
@@ -420,10 +392,6 @@ exclude =
ansible_collections.purestorage.flashblade.tests.*
ansible_collections.purestorage.flashblade.docs
ansible_collections.purestorage.flashblade.docs.*
- ansible_collections.purestorage.fusion.tests
- ansible_collections.purestorage.fusion.tests.*
- ansible_collections.purestorage.fusion.docs
- ansible_collections.purestorage.fusion.docs.*
ansible_collections.sensu.sensu_go.tests
ansible_collections.sensu.sensu_go.tests.*
ansible_collections.sensu.sensu_go.docs
@@ -1320,12 +1288,6 @@ ansible_collections.cisco.ios =
plugins/module_utils/network/ios/facts/vxlan_vtep/.*
plugins/module_utils/network/ios/providers/*
plugins/module_utils/network/ios/providers/.*
- plugins/module_utils/network/ios/providers/cli/*
- plugins/module_utils/network/ios/providers/cli/.*
- plugins/module_utils/network/ios/providers/cli/config/*
- plugins/module_utils/network/ios/providers/cli/config/.*
- plugins/module_utils/network/ios/providers/cli/config/bgp/*
- plugins/module_utils/network/ios/providers/cli/config/bgp/.*
plugins/module_utils/network/ios/rm_templates/*
plugins/module_utils/network/ios/rm_templates/.*
plugins/module_utils/network/ios/utils/*
@@ -1956,14 +1918,6 @@ ansible_collections.community.aws =
plugins/module_utils/.*
plugins/modules/*
plugins/modules/.*
-ansible_collections.community.azure =
- *
- changelogs/*
- changelogs/.*
- changelogs/fragments/*
- changelogs/fragments/.*
- meta/*
- meta/.*
ansible_collections.community.ciscosmb =
*
changelogs/*
@@ -2736,8 +2690,6 @@ ansible_collections.community.okd =
plugins/.*
plugins/connection/*
plugins/connection/.*
- plugins/doc_fragments/*
- plugins/doc_fragments/.*
plugins/inventory/*
plugins/inventory/.*
plugins/module_utils/*
@@ -2836,22 +2788,6 @@ ansible_collections.community.routeros =
plugins/modules/.*
plugins/terminal/*
plugins/terminal/.*
-ansible_collections.community.sap =
- *
- changelogs/*
- changelogs/.*
- changelogs/fragments/*
- changelogs/fragments/.*
- meta/*
- meta/.*
- plugins/*
- plugins/.*
- plugins/doc_fragments/*
- plugins/doc_fragments/.*
- plugins/module_utils/*
- plugins/module_utils/.*
- plugins/modules/*
- plugins/modules/.*
ansible_collections.community.sap_libs =
*
changelogs/*
@@ -3606,6 +3542,8 @@ ansible_collections.dellemc.openmanage =
playbooks/roles/idrac_server_powerstate/.*
playbooks/roles/idrac_storage_controller/*
playbooks/roles/idrac_storage_controller/.*
+ playbooks/roles/idrac_user/*
+ playbooks/roles/idrac_user/.*
playbooks/roles/redfish_firmware/*
playbooks/roles/redfish_firmware/.*
playbooks/roles/redfish_storage_volume/*
@@ -4036,6 +3974,40 @@ ansible_collections.dellemc.openmanage =
roles/idrac_storage_controller/tests/.*
roles/idrac_storage_controller/vars/*
roles/idrac_storage_controller/vars/.*
+ roles/idrac_user/*
+ roles/idrac_user/.*
+ roles/idrac_user/defaults/*
+ roles/idrac_user/defaults/.*
+ roles/idrac_user/handlers/*
+ roles/idrac_user/handlers/.*
+ roles/idrac_user/meta/*
+ roles/idrac_user/meta/.*
+ roles/idrac_user/molecule/*
+ roles/idrac_user/molecule/.*
+ roles/idrac_user/molecule/TC-152120/*
+ roles/idrac_user/molecule/TC-152120/.*
+ roles/idrac_user/molecule/TC-152146/*
+ roles/idrac_user/molecule/TC-152146/.*
+ roles/idrac_user/molecule/TC-152147/*
+ roles/idrac_user/molecule/TC-152147/.*
+ roles/idrac_user/molecule/TC-152148/*
+ roles/idrac_user/molecule/TC-152148/.*
+ roles/idrac_user/molecule/TC-152149/*
+ roles/idrac_user/molecule/TC-152149/.*
+ roles/idrac_user/molecule/TC-152150/*
+ roles/idrac_user/molecule/TC-152150/.*
+ roles/idrac_user/molecule/default/*
+ roles/idrac_user/molecule/default/.*
+ roles/idrac_user/molecule/resources/*
+ roles/idrac_user/molecule/resources/.*
+ roles/idrac_user/molecule/resources/idrac_user/*
+ roles/idrac_user/molecule/resources/idrac_user/.*
+ roles/idrac_user/tasks/*
+ roles/idrac_user/tasks/.*
+ roles/idrac_user/tests/*
+ roles/idrac_user/tests/.*
+ roles/idrac_user/vars/*
+ roles/idrac_user/vars/.*
roles/redfish_firmware/*
roles/redfish_firmware/.*
roles/redfish_firmware/defaults/*
@@ -4452,16 +4424,6 @@ ansible_collections.frr.frr =
plugins/modules/.*
plugins/terminal/*
plugins/terminal/.*
-ansible_collections.gluster.gluster =
- *
- changelogs/*
- changelogs/.*
- meta/*
- meta/.*
- plugins/*
- plugins/.*
- plugins/modules/*
- plugins/modules/.*
ansible_collections.google.cloud =
*
changelogs/*
@@ -4554,6 +4516,18 @@ ansible_collections.grafana.grafana =
plugins/modules/.*
roles/*
roles/.*
+ roles/alloy/*
+ roles/alloy/.*
+ roles/alloy/defaults/*
+ roles/alloy/defaults/.*
+ roles/alloy/handlers/*
+ roles/alloy/handlers/.*
+ roles/alloy/meta/*
+ roles/alloy/meta/.*
+ roles/alloy/tasks/*
+ roles/alloy/tasks/.*
+ roles/alloy/templates/*
+ roles/alloy/templates/.*
roles/grafana/*
roles/grafana/.*
roles/grafana/defaults/*
@@ -4598,6 +4572,76 @@ ansible_collections.grafana.grafana =
roles/grafana_agent/templates/.*
roles/grafana_agent/vars/*
roles/grafana_agent/vars/.*
+ roles/loki/*
+ roles/loki/.*
+ roles/loki/defaults/*
+ roles/loki/defaults/.*
+ roles/loki/handlers/*
+ roles/loki/handlers/.*
+ roles/loki/meta/*
+ roles/loki/meta/.*
+ roles/loki/molecule/*
+ roles/loki/molecule/.*
+ roles/loki/molecule/default/*
+ roles/loki/molecule/default/.*
+ roles/loki/tasks/*
+ roles/loki/tasks/.*
+ roles/loki/templates/*
+ roles/loki/templates/.*
+ roles/loki/vars/*
+ roles/loki/vars/.*
+ roles/mimir/*
+ roles/mimir/.*
+ roles/mimir/defaults/*
+ roles/mimir/defaults/.*
+ roles/mimir/files/*
+ roles/mimir/files/.*
+ roles/mimir/handlers/*
+ roles/mimir/handlers/.*
+ roles/mimir/meta/*
+ roles/mimir/meta/.*
+ roles/mimir/molecule/*
+ roles/mimir/molecule/.*
+ roles/mimir/molecule/default/*
+ roles/mimir/molecule/default/.*
+ roles/mimir/molecule/default/tests/*
+ roles/mimir/molecule/default/tests/.*
+ roles/mimir/tasks/*
+ roles/mimir/tasks/.*
+ roles/mimir/templates/*
+ roles/mimir/templates/.*
+ roles/mimir/vars/*
+ roles/mimir/vars/.*
+ roles/opentelemetry_collector/*
+ roles/opentelemetry_collector/.*
+ roles/opentelemetry_collector/defaults/*
+ roles/opentelemetry_collector/defaults/.*
+ roles/opentelemetry_collector/handlers/*
+ roles/opentelemetry_collector/handlers/.*
+ roles/opentelemetry_collector/meta/*
+ roles/opentelemetry_collector/meta/.*
+ roles/opentelemetry_collector/tasks/*
+ roles/opentelemetry_collector/tasks/.*
+ roles/opentelemetry_collector/templates/*
+ roles/opentelemetry_collector/templates/.*
+ roles/promtail/*
+ roles/promtail/.*
+ roles/promtail/defaults/*
+ roles/promtail/defaults/.*
+ roles/promtail/handlers/*
+ roles/promtail/handlers/.*
+ roles/promtail/meta/*
+ roles/promtail/meta/.*
+ roles/promtail/molecule/*
+ roles/promtail/molecule/.*
+ roles/promtail/molecule/default/*
+ roles/promtail/molecule/default/.*
+ roles/promtail/tasks/*
+ roles/promtail/tasks/.*
+ roles/promtail/templates/*
+ roles/promtail/templates/.*
+ roles/promtail/vars/*
+ roles/promtail/vars/.*
tools/*
tools/.*
tools/includes/*
@@ -4670,20 +4714,6 @@ ansible_collections.hetzner.hcloud =
plugins/modules/.*
scripts/*
scripts/.*
-ansible_collections.hpe.nimble =
- *
- changelogs/*
- changelogs/.*
- meta/*
- meta/.*
- plugins/*
- plugins/.*
- plugins/doc_fragments/*
- plugins/doc_fragments/.*
- plugins/module_utils/*
- plugins/module_utils/.*
- plugins/modules/*
- plugins/modules/.*
ansible_collections.ibm.qradar =
*
changelogs/*
@@ -4806,6 +4836,170 @@ ansible_collections.inspur.ispim =
plugins/module_utils/.*
plugins/modules/*
plugins/modules/.*
+ venv/*
+ venv/.*
+ venv/Lib/*
+ venv/Lib/.*
+ venv/Lib/site-packages/*
+ venv/Lib/site-packages/.*
+ venv/Lib/site-packages/_distutils_hack/*
+ venv/Lib/site-packages/_distutils_hack/.*
+ venv/Lib/site-packages/pip/*
+ venv/Lib/site-packages/pip/.*
+ venv/Lib/site-packages/pip-21.1.2.dist-info/*
+ venv/Lib/site-packages/pip-21.1.2.dist-info/.*
+ venv/Lib/site-packages/pip/_internal/*
+ venv/Lib/site-packages/pip/_internal/.*
+ venv/Lib/site-packages/pip/_internal/cli/*
+ venv/Lib/site-packages/pip/_internal/cli/.*
+ venv/Lib/site-packages/pip/_internal/commands/*
+ venv/Lib/site-packages/pip/_internal/commands/.*
+ venv/Lib/site-packages/pip/_internal/distributions/*
+ venv/Lib/site-packages/pip/_internal/distributions/.*
+ venv/Lib/site-packages/pip/_internal/index/*
+ venv/Lib/site-packages/pip/_internal/index/.*
+ venv/Lib/site-packages/pip/_internal/locations/*
+ venv/Lib/site-packages/pip/_internal/locations/.*
+ venv/Lib/site-packages/pip/_internal/metadata/*
+ venv/Lib/site-packages/pip/_internal/metadata/.*
+ venv/Lib/site-packages/pip/_internal/models/*
+ venv/Lib/site-packages/pip/_internal/models/.*
+ venv/Lib/site-packages/pip/_internal/network/*
+ venv/Lib/site-packages/pip/_internal/network/.*
+ venv/Lib/site-packages/pip/_internal/operations/*
+ venv/Lib/site-packages/pip/_internal/operations/.*
+ venv/Lib/site-packages/pip/_internal/operations/build/*
+ venv/Lib/site-packages/pip/_internal/operations/build/.*
+ venv/Lib/site-packages/pip/_internal/operations/install/*
+ venv/Lib/site-packages/pip/_internal/operations/install/.*
+ venv/Lib/site-packages/pip/_internal/req/*
+ venv/Lib/site-packages/pip/_internal/req/.*
+ venv/Lib/site-packages/pip/_internal/resolution/*
+ venv/Lib/site-packages/pip/_internal/resolution/.*
+ venv/Lib/site-packages/pip/_internal/resolution/legacy/*
+ venv/Lib/site-packages/pip/_internal/resolution/legacy/.*
+ venv/Lib/site-packages/pip/_internal/resolution/resolvelib/*
+ venv/Lib/site-packages/pip/_internal/resolution/resolvelib/.*
+ venv/Lib/site-packages/pip/_internal/utils/*
+ venv/Lib/site-packages/pip/_internal/utils/.*
+ venv/Lib/site-packages/pip/_internal/vcs/*
+ venv/Lib/site-packages/pip/_internal/vcs/.*
+ venv/Lib/site-packages/pip/_vendor/*
+ venv/Lib/site-packages/pip/_vendor/.*
+ venv/Lib/site-packages/pip/_vendor/cachecontrol/*
+ venv/Lib/site-packages/pip/_vendor/cachecontrol/.*
+ venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/*
+ venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/.*
+ venv/Lib/site-packages/pip/_vendor/certifi/*
+ venv/Lib/site-packages/pip/_vendor/certifi/.*
+ venv/Lib/site-packages/pip/_vendor/chardet/*
+ venv/Lib/site-packages/pip/_vendor/chardet/.*
+ venv/Lib/site-packages/pip/_vendor/chardet/cli/*
+ venv/Lib/site-packages/pip/_vendor/chardet/cli/.*
+ venv/Lib/site-packages/pip/_vendor/chardet/metadata/*
+ venv/Lib/site-packages/pip/_vendor/chardet/metadata/.*
+ venv/Lib/site-packages/pip/_vendor/colorama/*
+ venv/Lib/site-packages/pip/_vendor/colorama/.*
+ venv/Lib/site-packages/pip/_vendor/distlib/*
+ venv/Lib/site-packages/pip/_vendor/distlib/.*
+ venv/Lib/site-packages/pip/_vendor/distlib/_backport/*
+ venv/Lib/site-packages/pip/_vendor/distlib/_backport/.*
+ venv/Lib/site-packages/pip/_vendor/html5lib/*
+ venv/Lib/site-packages/pip/_vendor/html5lib/.*
+ venv/Lib/site-packages/pip/_vendor/html5lib/_trie/*
+ venv/Lib/site-packages/pip/_vendor/html5lib/_trie/.*
+ venv/Lib/site-packages/pip/_vendor/html5lib/filters/*
+ venv/Lib/site-packages/pip/_vendor/html5lib/filters/.*
+ venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/*
+ venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/.*
+ venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/*
+ venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/.*
+ venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/*
+ venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/.*
+ venv/Lib/site-packages/pip/_vendor/idna/*
+ venv/Lib/site-packages/pip/_vendor/idna/.*
+ venv/Lib/site-packages/pip/_vendor/msgpack/*
+ venv/Lib/site-packages/pip/_vendor/msgpack/.*
+ venv/Lib/site-packages/pip/_vendor/packaging/*
+ venv/Lib/site-packages/pip/_vendor/packaging/.*
+ venv/Lib/site-packages/pip/_vendor/pep517/*
+ venv/Lib/site-packages/pip/_vendor/pep517/.*
+ venv/Lib/site-packages/pip/_vendor/pep517/in_process/*
+ venv/Lib/site-packages/pip/_vendor/pep517/in_process/.*
+ venv/Lib/site-packages/pip/_vendor/pkg_resources/*
+ venv/Lib/site-packages/pip/_vendor/pkg_resources/.*
+ venv/Lib/site-packages/pip/_vendor/progress/*
+ venv/Lib/site-packages/pip/_vendor/progress/.*
+ venv/Lib/site-packages/pip/_vendor/requests/*
+ venv/Lib/site-packages/pip/_vendor/requests/.*
+ venv/Lib/site-packages/pip/_vendor/resolvelib/*
+ venv/Lib/site-packages/pip/_vendor/resolvelib/.*
+ venv/Lib/site-packages/pip/_vendor/resolvelib/compat/*
+ venv/Lib/site-packages/pip/_vendor/resolvelib/compat/.*
+ venv/Lib/site-packages/pip/_vendor/tenacity/*
+ venv/Lib/site-packages/pip/_vendor/tenacity/.*
+ venv/Lib/site-packages/pip/_vendor/toml/*
+ venv/Lib/site-packages/pip/_vendor/toml/.*
+ venv/Lib/site-packages/pip/_vendor/urllib3/*
+ venv/Lib/site-packages/pip/_vendor/urllib3/.*
+ venv/Lib/site-packages/pip/_vendor/urllib3/contrib/*
+ venv/Lib/site-packages/pip/_vendor/urllib3/contrib/.*
+ venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/*
+ venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/.*
+ venv/Lib/site-packages/pip/_vendor/urllib3/packages/*
+ venv/Lib/site-packages/pip/_vendor/urllib3/packages/.*
+ venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/*
+ venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/.*
+ venv/Lib/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/*
+ venv/Lib/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/.*
+ venv/Lib/site-packages/pip/_vendor/urllib3/util/*
+ venv/Lib/site-packages/pip/_vendor/urllib3/util/.*
+ venv/Lib/site-packages/pip/_vendor/webencodings/*
+ venv/Lib/site-packages/pip/_vendor/webencodings/.*
+ venv/Lib/site-packages/pkg_resources/*
+ venv/Lib/site-packages/pkg_resources/.*
+ venv/Lib/site-packages/pkg_resources/_vendor/*
+ venv/Lib/site-packages/pkg_resources/_vendor/.*
+ venv/Lib/site-packages/pkg_resources/_vendor/packaging/*
+ venv/Lib/site-packages/pkg_resources/_vendor/packaging/.*
+ venv/Lib/site-packages/pkg_resources/extern/*
+ venv/Lib/site-packages/pkg_resources/extern/.*
+ venv/Lib/site-packages/pkg_resources/tests/*
+ venv/Lib/site-packages/pkg_resources/tests/.*
+ venv/Lib/site-packages/pkg_resources/tests/data/*
+ venv/Lib/site-packages/pkg_resources/tests/data/.*
+ venv/Lib/site-packages/pkg_resources/tests/data/my-test-package-source/*
+ venv/Lib/site-packages/pkg_resources/tests/data/my-test-package-source/.*
+ venv/Lib/site-packages/setuptools/*
+ venv/Lib/site-packages/setuptools/.*
+ venv/Lib/site-packages/setuptools-57.0.0.dist-info/*
+ venv/Lib/site-packages/setuptools-57.0.0.dist-info/.*
+ venv/Lib/site-packages/setuptools/_distutils/*
+ venv/Lib/site-packages/setuptools/_distutils/.*
+ venv/Lib/site-packages/setuptools/_distutils/command/*
+ venv/Lib/site-packages/setuptools/_distutils/command/.*
+ venv/Lib/site-packages/setuptools/_vendor/*
+ venv/Lib/site-packages/setuptools/_vendor/.*
+ venv/Lib/site-packages/setuptools/_vendor/more_itertools/*
+ venv/Lib/site-packages/setuptools/_vendor/more_itertools/.*
+ venv/Lib/site-packages/setuptools/_vendor/packaging/*
+ venv/Lib/site-packages/setuptools/_vendor/packaging/.*
+ venv/Lib/site-packages/setuptools/command/*
+ venv/Lib/site-packages/setuptools/command/.*
+ venv/Lib/site-packages/setuptools/extern/*
+ venv/Lib/site-packages/setuptools/extern/.*
+ venv/Lib/site-packages/wheel/*
+ venv/Lib/site-packages/wheel/.*
+ venv/Lib/site-packages/wheel-0.36.2.dist-info/*
+ venv/Lib/site-packages/wheel-0.36.2.dist-info/.*
+ venv/Lib/site-packages/wheel/cli/*
+ venv/Lib/site-packages/wheel/cli/.*
+ venv/Lib/site-packages/wheel/vendored/*
+ venv/Lib/site-packages/wheel/vendored/.*
+ venv/Lib/site-packages/wheel/vendored/packaging/*
+ venv/Lib/site-packages/wheel/vendored/packaging/.*
+ venv/Scripts/*
+ venv/Scripts/.*
ansible_collections.inspur.sm =
*
changelogs/*
@@ -5030,6 +5224,186 @@ ansible_collections.junipernetworks.junos =
plugins/netconf/.*
plugins/terminal/*
plugins/terminal/.*
+ansible_collections.kaytus.ksmanage =
+ *
+ changelogs/*
+ changelogs/.*
+ changelogs/fragments/*
+ changelogs/fragments/.*
+ meta/*
+ meta/.*
+ plugins/*
+ plugins/.*
+ plugins/doc_fragments/*
+ plugins/doc_fragments/.*
+ plugins/module_utils/*
+ plugins/module_utils/.*
+ plugins/modules/*
+ plugins/modules/.*
+ venv/*
+ venv/.*
+ venv/Lib/*
+ venv/Lib/.*
+ venv/Lib/site-packages/*
+ venv/Lib/site-packages/.*
+ venv/Lib/site-packages/_distutils_hack/*
+ venv/Lib/site-packages/_distutils_hack/.*
+ venv/Lib/site-packages/pip/*
+ venv/Lib/site-packages/pip/.*
+ venv/Lib/site-packages/pip-21.1.2.dist-info/*
+ venv/Lib/site-packages/pip-21.1.2.dist-info/.*
+ venv/Lib/site-packages/pip/_internal/*
+ venv/Lib/site-packages/pip/_internal/.*
+ venv/Lib/site-packages/pip/_internal/cli/*
+ venv/Lib/site-packages/pip/_internal/cli/.*
+ venv/Lib/site-packages/pip/_internal/commands/*
+ venv/Lib/site-packages/pip/_internal/commands/.*
+ venv/Lib/site-packages/pip/_internal/distributions/*
+ venv/Lib/site-packages/pip/_internal/distributions/.*
+ venv/Lib/site-packages/pip/_internal/index/*
+ venv/Lib/site-packages/pip/_internal/index/.*
+ venv/Lib/site-packages/pip/_internal/locations/*
+ venv/Lib/site-packages/pip/_internal/locations/.*
+ venv/Lib/site-packages/pip/_internal/metadata/*
+ venv/Lib/site-packages/pip/_internal/metadata/.*
+ venv/Lib/site-packages/pip/_internal/models/*
+ venv/Lib/site-packages/pip/_internal/models/.*
+ venv/Lib/site-packages/pip/_internal/network/*
+ venv/Lib/site-packages/pip/_internal/network/.*
+ venv/Lib/site-packages/pip/_internal/operations/*
+ venv/Lib/site-packages/pip/_internal/operations/.*
+ venv/Lib/site-packages/pip/_internal/operations/build/*
+ venv/Lib/site-packages/pip/_internal/operations/build/.*
+ venv/Lib/site-packages/pip/_internal/operations/install/*
+ venv/Lib/site-packages/pip/_internal/operations/install/.*
+ venv/Lib/site-packages/pip/_internal/req/*
+ venv/Lib/site-packages/pip/_internal/req/.*
+ venv/Lib/site-packages/pip/_internal/resolution/*
+ venv/Lib/site-packages/pip/_internal/resolution/.*
+ venv/Lib/site-packages/pip/_internal/resolution/legacy/*
+ venv/Lib/site-packages/pip/_internal/resolution/legacy/.*
+ venv/Lib/site-packages/pip/_internal/resolution/resolvelib/*
+ venv/Lib/site-packages/pip/_internal/resolution/resolvelib/.*
+ venv/Lib/site-packages/pip/_internal/utils/*
+ venv/Lib/site-packages/pip/_internal/utils/.*
+ venv/Lib/site-packages/pip/_internal/vcs/*
+ venv/Lib/site-packages/pip/_internal/vcs/.*
+ venv/Lib/site-packages/pip/_vendor/*
+ venv/Lib/site-packages/pip/_vendor/.*
+ venv/Lib/site-packages/pip/_vendor/cachecontrol/*
+ venv/Lib/site-packages/pip/_vendor/cachecontrol/.*
+ venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/*
+ venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/.*
+ venv/Lib/site-packages/pip/_vendor/certifi/*
+ venv/Lib/site-packages/pip/_vendor/certifi/.*
+ venv/Lib/site-packages/pip/_vendor/chardet/*
+ venv/Lib/site-packages/pip/_vendor/chardet/.*
+ venv/Lib/site-packages/pip/_vendor/chardet/cli/*
+ venv/Lib/site-packages/pip/_vendor/chardet/cli/.*
+ venv/Lib/site-packages/pip/_vendor/chardet/metadata/*
+ venv/Lib/site-packages/pip/_vendor/chardet/metadata/.*
+ venv/Lib/site-packages/pip/_vendor/colorama/*
+ venv/Lib/site-packages/pip/_vendor/colorama/.*
+ venv/Lib/site-packages/pip/_vendor/distlib/*
+ venv/Lib/site-packages/pip/_vendor/distlib/.*
+ venv/Lib/site-packages/pip/_vendor/distlib/_backport/*
+ venv/Lib/site-packages/pip/_vendor/distlib/_backport/.*
+ venv/Lib/site-packages/pip/_vendor/html5lib/*
+ venv/Lib/site-packages/pip/_vendor/html5lib/.*
+ venv/Lib/site-packages/pip/_vendor/html5lib/_trie/*
+ venv/Lib/site-packages/pip/_vendor/html5lib/_trie/.*
+ venv/Lib/site-packages/pip/_vendor/html5lib/filters/*
+ venv/Lib/site-packages/pip/_vendor/html5lib/filters/.*
+ venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/*
+ venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/.*
+ venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/*
+ venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/.*
+ venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/*
+ venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/.*
+ venv/Lib/site-packages/pip/_vendor/idna/*
+ venv/Lib/site-packages/pip/_vendor/idna/.*
+ venv/Lib/site-packages/pip/_vendor/msgpack/*
+ venv/Lib/site-packages/pip/_vendor/msgpack/.*
+ venv/Lib/site-packages/pip/_vendor/packaging/*
+ venv/Lib/site-packages/pip/_vendor/packaging/.*
+ venv/Lib/site-packages/pip/_vendor/pep517/*
+ venv/Lib/site-packages/pip/_vendor/pep517/.*
+ venv/Lib/site-packages/pip/_vendor/pep517/in_process/*
+ venv/Lib/site-packages/pip/_vendor/pep517/in_process/.*
+ venv/Lib/site-packages/pip/_vendor/pkg_resources/*
+ venv/Lib/site-packages/pip/_vendor/pkg_resources/.*
+ venv/Lib/site-packages/pip/_vendor/progress/*
+ venv/Lib/site-packages/pip/_vendor/progress/.*
+ venv/Lib/site-packages/pip/_vendor/requests/*
+ venv/Lib/site-packages/pip/_vendor/requests/.*
+ venv/Lib/site-packages/pip/_vendor/resolvelib/*
+ venv/Lib/site-packages/pip/_vendor/resolvelib/.*
+ venv/Lib/site-packages/pip/_vendor/resolvelib/compat/*
+ venv/Lib/site-packages/pip/_vendor/resolvelib/compat/.*
+ venv/Lib/site-packages/pip/_vendor/tenacity/*
+ venv/Lib/site-packages/pip/_vendor/tenacity/.*
+ venv/Lib/site-packages/pip/_vendor/toml/*
+ venv/Lib/site-packages/pip/_vendor/toml/.*
+ venv/Lib/site-packages/pip/_vendor/urllib3/*
+ venv/Lib/site-packages/pip/_vendor/urllib3/.*
+ venv/Lib/site-packages/pip/_vendor/urllib3/contrib/*
+ venv/Lib/site-packages/pip/_vendor/urllib3/contrib/.*
+ venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/*
+ venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/.*
+ venv/Lib/site-packages/pip/_vendor/urllib3/packages/*
+ venv/Lib/site-packages/pip/_vendor/urllib3/packages/.*
+ venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/*
+ venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/.*
+ venv/Lib/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/*
+ venv/Lib/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/.*
+ venv/Lib/site-packages/pip/_vendor/urllib3/util/*
+ venv/Lib/site-packages/pip/_vendor/urllib3/util/.*
+ venv/Lib/site-packages/pip/_vendor/webencodings/*
+ venv/Lib/site-packages/pip/_vendor/webencodings/.*
+ venv/Lib/site-packages/pkg_resources/*
+ venv/Lib/site-packages/pkg_resources/.*
+ venv/Lib/site-packages/pkg_resources/_vendor/*
+ venv/Lib/site-packages/pkg_resources/_vendor/.*
+ venv/Lib/site-packages/pkg_resources/_vendor/packaging/*
+ venv/Lib/site-packages/pkg_resources/_vendor/packaging/.*
+ venv/Lib/site-packages/pkg_resources/extern/*
+ venv/Lib/site-packages/pkg_resources/extern/.*
+ venv/Lib/site-packages/pkg_resources/tests/*
+ venv/Lib/site-packages/pkg_resources/tests/.*
+ venv/Lib/site-packages/pkg_resources/tests/data/*
+ venv/Lib/site-packages/pkg_resources/tests/data/.*
+ venv/Lib/site-packages/pkg_resources/tests/data/my-test-package-source/*
+ venv/Lib/site-packages/pkg_resources/tests/data/my-test-package-source/.*
+ venv/Lib/site-packages/setuptools/*
+ venv/Lib/site-packages/setuptools/.*
+ venv/Lib/site-packages/setuptools-57.0.0.dist-info/*
+ venv/Lib/site-packages/setuptools-57.0.0.dist-info/.*
+ venv/Lib/site-packages/setuptools/_distutils/*
+ venv/Lib/site-packages/setuptools/_distutils/.*
+ venv/Lib/site-packages/setuptools/_distutils/command/*
+ venv/Lib/site-packages/setuptools/_distutils/command/.*
+ venv/Lib/site-packages/setuptools/_vendor/*
+ venv/Lib/site-packages/setuptools/_vendor/.*
+ venv/Lib/site-packages/setuptools/_vendor/more_itertools/*
+ venv/Lib/site-packages/setuptools/_vendor/more_itertools/.*
+ venv/Lib/site-packages/setuptools/_vendor/packaging/*
+ venv/Lib/site-packages/setuptools/_vendor/packaging/.*
+ venv/Lib/site-packages/setuptools/command/*
+ venv/Lib/site-packages/setuptools/command/.*
+ venv/Lib/site-packages/setuptools/extern/*
+ venv/Lib/site-packages/setuptools/extern/.*
+ venv/Lib/site-packages/wheel/*
+ venv/Lib/site-packages/wheel/.*
+ venv/Lib/site-packages/wheel-0.36.2.dist-info/*
+ venv/Lib/site-packages/wheel-0.36.2.dist-info/.*
+ venv/Lib/site-packages/wheel/cli/*
+ venv/Lib/site-packages/wheel/cli/.*
+ venv/Lib/site-packages/wheel/vendored/*
+ venv/Lib/site-packages/wheel/vendored/.*
+ venv/Lib/site-packages/wheel/vendored/packaging/*
+ venv/Lib/site-packages/wheel/vendored/packaging/.*
+ venv/Scripts/*
+ venv/Scripts/.*
ansible_collections.kubernetes.core =
*
changelogs/*
@@ -5100,38 +5474,6 @@ ansible_collections.microsoft.ad =
plugins/plugin_utils/.*
plugins/plugin_utils/_ldap/*
plugins/plugin_utils/_ldap/.*
-ansible_collections.netapp.aws =
- *
- changelogs/*
- changelogs/.*
- changelogs/fragments/*
- changelogs/fragments/.*
- meta/*
- meta/.*
- plugins/*
- plugins/.*
- plugins/doc_fragments/*
- plugins/doc_fragments/.*
- plugins/module_utils/*
- plugins/module_utils/.*
- plugins/modules/*
- plugins/modules/.*
-ansible_collections.netapp.azure =
- *
- changelogs/*
- changelogs/.*
- changelogs/fragments/*
- changelogs/fragments/.*
- meta/*
- meta/.*
- plugins/*
- plugins/.*
- plugins/doc_fragments/*
- plugins/doc_fragments/.*
- plugins/module_utils/*
- plugins/module_utils/.*
- plugins/modules/*
- plugins/modules/.*
ansible_collections.netapp.cloudmanager =
*
changelogs/*
@@ -5154,22 +5496,6 @@ ansible_collections.netapp.cloudmanager =
plugins/module_utils/.*
plugins/modules/*
plugins/modules/.*
-ansible_collections.netapp.elementsw =
- *
- changelogs/*
- changelogs/.*
- changelogs/fragments/*
- changelogs/fragments/.*
- meta/*
- meta/.*
- plugins/*
- plugins/.*
- plugins/doc_fragments/*
- plugins/doc_fragments/.*
- plugins/module_utils/*
- plugins/module_utils/.*
- plugins/modules/*
- plugins/modules/.*
ansible_collections.netapp.ontap =
*
changelogs/*
@@ -5308,22 +5634,6 @@ ansible_collections.netapp.storagegrid =
plugins/module_utils/.*
plugins/modules/*
plugins/modules/.*
-ansible_collections.netapp.um_info =
- *
- changelogs/*
- changelogs/.*
- changelogs/fragments/*
- changelogs/fragments/.*
- meta/*
- meta/.*
- plugins/*
- plugins/.*
- plugins/doc_fragments/*
- plugins/doc_fragments/.*
- plugins/module_utils/*
- plugins/module_utils/.*
- plugins/modules/*
- plugins/modules/.*
ansible_collections.netapp_eseries.santricity =
*
changelogs/*
@@ -5726,36 +6036,6 @@ ansible_collections.purestorage.flashblade =
plugins/modules/.*
roles/*
roles/.*
-ansible_collections.purestorage.fusion =
- *
- changelogs/*
- changelogs/.*
- changelogs/fragments/*
- changelogs/fragments/.*
- meta/*
- meta/.*
- playbooks/*
- playbooks/.*
- playbooks/simple/*
- playbooks/simple/.*
- playbooks/tasks/*
- playbooks/tasks/.*
- playbooks/templates/*
- playbooks/templates/.*
- playbooks/vars/*
- playbooks/vars/.*
- plugins/*
- plugins/.*
- plugins/doc_fragments/*
- plugins/doc_fragments/.*
- plugins/inventory/*
- plugins/inventory/.*
- plugins/module_utils/*
- plugins/module_utils/.*
- plugins/modules/*
- plugins/modules/.*
- test/*
- test/.*
ansible_collections.sensu.sensu_go =
*
changelogs/*
diff --git a/tags.yaml b/tags.yaml
index 1e7fe1850..34230af8e 100644
--- a/tags.yaml
+++ b/tags.yaml
@@ -3,37 +3,37 @@
# 'tag' field means that a collection's release wasn't tagged.
amazon.aws:
repository: https://github.com/ansible-collections/amazon.aws
- tag: 7.5.0
- version: 7.5.0
+ tag: 8.0.0
+ version: 8.0.0
ansible.netcommon:
repository: https://github.com/ansible-collections/ansible.netcommon
- tag: v5.3.0
- version: 5.3.0
+ tag: v6.1.2
+ version: 6.1.2
ansible.posix:
repository: https://github.com/ansible-collections/ansible.posix
tag: 1.5.4
version: 1.5.4
ansible.utils:
repository: https://github.com/ansible-collections/ansible.utils
- tag: v2.12.0
- version: 2.12.0
+ tag: v4.1.0
+ version: 4.1.0
ansible.windows:
repository: https://github.com/ansible-collections/ansible.windows
tag: 2.3.0
version: 2.3.0
arista.eos:
repository: https://github.com/ansible-collections/arista.eos
- tag: v6.2.2
- version: 6.2.2
+ tag: v9.0.0
+ version: 9.0.0
awx.awx:
collection_directory: ./awx_collection
repository: https://github.com/ansible/awx
- tag: 23.9.0
- version: 23.9.0
+ tag: 24.3.1
+ version: 24.3.1
azure.azcollection:
repository: https://github.com/ansible-collections/azure
- tag: v1.19.0
- version: 1.19.0
+ tag: v2.3.0
+ version: 2.3.0
check_point.mgmt:
repository: https://github.com/CheckPointSW/CheckPointAnsibleMgmtCollection
tag: v5.2.3
@@ -49,96 +49,92 @@ cisco.aci:
version: 2.9.0
cisco.asa:
repository: https://github.com/ansible-collections/cisco.asa
- tag: 4.0.3
- version: 4.0.3
+ tag: v5.0.1
+ version: 5.0.1
cisco.dnac:
repository: https://github.com/cisco-en-programmability/dnacenter-ansible
tag: v6.13.3
version: 6.13.3
cisco.intersight:
repository: https://github.com/CiscoDevNet/intersight-ansible
- tag: 2.0.8
- version: 2.0.8
+ tag: 2.0.9
+ version: 2.0.9
cisco.ios:
repository: https://github.com/ansible-collections/cisco.ios
- tag: v5.3.0
- version: 5.3.0
+ tag: v8.0.0
+ version: 8.0.0
cisco.iosxr:
repository: https://github.com/ansible-collections/cisco.iosxr
- tag: v6.1.1
- version: 6.1.1
+ tag: v9.0.0
+ version: 9.0.0
cisco.ise:
repository: https://github.com/CiscoISE/ansible-ise
- tag: v2.8.1
- version: 2.8.1
+ tag: v2.9.1
+ version: 2.9.1
cisco.meraki:
repository: https://github.com/meraki/dashboard-api-ansible
- tag: v2.18.0
- version: 2.18.0
+ tag: v2.18.1
+ version: 2.18.1
cisco.mso:
repository: https://github.com/CiscoDevNet/ansible-mso
tag: v2.6.0
version: 2.6.0
cisco.nxos:
repository: https://github.com/ansible-collections/cisco.nxos
- tag: v5.3.0
- version: 5.3.0
+ tag: v8.0.0
+ version: 8.0.0
cisco.ucs:
repository: https://github.com/CiscoDevNet/ansible-ucs
tag: v1.10.0
version: 1.10.0
cloud.common:
repository: https://github.com/ansible-collections/cloud.common
- tag: 2.1.4
- version: 2.1.4
+ tag: 3.0.0
+ version: 3.0.0
cloudscale_ch.cloud:
repository: https://github.com/cloudscale-ch/ansible-collection-cloudscale
tag: v2.3.1
version: 2.3.1
community.aws:
repository: https://github.com/ansible-collections/community.aws
- tag: 7.2.0
- version: 7.2.0
-community.azure:
- repository: https://github.com/ansible-collections/community.azure
- tag: 2.0.0
- version: 2.0.0
+ tag: 8.0.0
+ version: 8.0.0
community.ciscosmb:
repository: https://github.com/ansible-collections/community.ciscosmb
- tag: 1.0.7
- version: 1.0.7
+ tag: 1.0.9
+ version: 1.0.9
community.crypto:
repository: https://github.com/ansible-collections/community.crypto
- tag: 2.19.0
- version: 2.19.0
+ tag: 2.20.0
+ version: 2.20.0
community.digitalocean:
repository: https://github.com/ansible-collections/community.digitalocean
tag: 1.26.0
version: 1.26.0
community.dns:
repository: https://github.com/ansible-collections/community.dns
- tag: 2.9.0
- version: 2.9.0
+ tag: 3.0.0
+ version: 3.0.0
community.docker:
repository: https://github.com/ansible-collections/community.docker
- tag: 3.9.0
- version: 3.9.0
+ tag: 3.10.3
+ version: 3.10.3
community.general:
repository: https://github.com/ansible-collections/community.general
- tag: 8.6.0
- version: 8.6.0
+ tag: 9.0.1
+ version: 9.0.1
community.grafana:
repository: https://github.com/ansible-collections/grafana
- tag: 1.8.0
- version: 1.8.0
+ tag: 1.9.1
+ version: 1.9.1
community.hashi_vault:
repository: https://github.com/ansible-collections/community.hashi_vault
tag: 6.2.0
version: 6.2.0
community.hrobot:
repository: https://github.com/ansible-collections/community.hrobot
- tag: 1.9.2
- version: 1.9.2
+ tag: 2.0.0
+ version: 2.0.0
community.library_inventory_filtering_v1:
repository: https://github.com/ansible-collections/community.library_inventory_filtering
tag: 1.0.1
@@ -149,8 +145,8 @@ community.libvirt:
version: 1.3.0
community.mongodb:
repository: https://github.com/ansible-collections/community.mongodb
- tag: 1.7.3
- version: 1.7.3
+ tag: 1.7.4
+ version: 1.7.4
community.mysql:
repository: https://github.com/ansible-collections/community.mysql
tag: 3.9.0
@@ -161,12 +157,12 @@ community.network:
version: 5.0.2
community.okd:
repository: https://github.com/openshift/community.okd
- tag: 2.3.0
- version: 2.3.0
+ tag: 3.0.1
+ version: 3.0.1
community.postgresql:
repository: https://github.com/ansible-collections/community.postgresql
- tag: 3.4.0
- version: 3.4.0
+ tag: 3.4.1
+ version: 3.4.1
community.proxysql:
repository: https://github.com/ansible-collections/community.proxysql
tag: 1.5.1
@@ -179,10 +175,6 @@ community.routeros:
repository: https://github.com/ansible-collections/community.routeros
tag: 2.15.0
version: 2.15.0
-community.sap:
- repository: https://github.com/ansible-collections/community.sap
- tag: 2.0.0
- version: 2.0.0
community.sap_libs:
repository: https://github.com/sap-linuxlab/community.sap_libs
tag: 1.4.2
@@ -193,16 +185,16 @@ community.sops:
version: 1.6.7
community.vmware:
repository: https://github.com/ansible-collections/community.vmware
- tag: 4.3.0
- version: 4.3.0
+ tag: 4.4.0
+ version: 4.4.0
community.windows:
repository: https://github.com/ansible-collections/community.windows
tag: 2.2.0
version: 2.2.0
community.zabbix:
repository: https://github.com/ansible-collections/community.zabbix
- tag: 2.3.1
- version: 2.3.1
+ tag: 2.4.0
+ version: 2.4.0
containers.podman:
repository: https://github.com/containers/ansible-podman-collections
tag: 1.13.0
@@ -221,16 +213,16 @@ dellemc.enterprise_sonic:
version: 2.4.0
dellemc.openmanage:
repository: https://github.com/dell/dellemc-openmanage-ansible-modules
- tag: v8.7.0
- version: 8.7.0
+ tag: v9.2.0
+ version: 9.2.0
dellemc.powerflex:
repository: https://github.com/dell/ansible-powerflex
- tag: 2.3.0
- version: 2.3.0
+ tag: 2.4.0
+ version: 2.4.0
dellemc.unity:
repository: https://github.com/dell/ansible-unity
- tag: 1.7.1
- version: 1.7.1
+ tag: 2.0.0
+ version: 2.0.0
f5networks.f5_modules:
collection_directory: ./ansible_collections/f5networks/f5_modules
repository: https://github.com/F5Networks/f5-ansible-f5modules
@@ -238,8 +230,8 @@ f5networks.f5_modules:
version: 1.28.0
fortinet.fortimanager:
repository: https://github.com/fortinet-ansible-dev/ansible-galaxy-fortimanager-collection
- tag: 2.4.0
- version: 2.4.0
+ tag: 2.5.0
+ version: 2.5.0
fortinet.fortios:
repository: https://github.com/fortinet-ansible-dev/ansible-galaxy-fortios-collection
tag: 2.3.6
@@ -248,31 +240,22 @@ frr.frr:
repository: https://github.com/ansible-collections/frr.frr
tag: 2.0.2
version: 2.0.2
-gluster.gluster:
- repository: https://github.com/gluster/gluster-ansible-collection
- tag: 1.0.2
- version: 1.0.2
google.cloud:
repository: https://github.com/ansible-collections/google.cloud
tag: v1.3.0
version: 1.3.0
grafana.grafana:
repository: https://github.com/grafana/grafana-ansible-collection
- tag: 2.2.5
- version: 2.2.5
+ tag: 5.2.0
+ version: 5.2.0
hetzner.hcloud:
repository: https://github.com/ansible-collections/hetzner.hcloud
- tag: 2.5.0
- version: 2.5.0
-hpe.nimble:
- collection_directory: ./ansible_collection/hpe/nimble
- repository: https://github.com/hpe-storage/nimble-ansible-modules
- tag: v1.1.4
- version: 1.1.4
+ tag: 3.1.1
+ version: 3.1.1
ibm.qradar:
repository: https://github.com/ansible-collections/ibm.qradar
- tag: 2.1.0
- version: 2.1.0
+ tag: v3.0.0
+ version: 3.0.0
ibm.spectrum_virtualize:
repository: https://github.com/ansible-collections/ibm.spectrum_virtualize
tag: 2.0.0
@@ -291,20 +274,24 @@ infoblox.nios_modules:
version: 1.6.1
inspur.ispim:
repository: https://github.com/ispim/inspur.ispim
- tag: 2.2.0
- version: 2.2.0
+ tag: 2.2.1
+ version: 2.2.1
inspur.sm:
repository: https://github.com/ISIB-Group/inspur.sm
tag: 2.3.0
version: 2.3.0
junipernetworks.junos:
repository: https://github.com/ansible-collections/junipernetworks.junos
- tag: v5.3.1
- version: 5.3.1
+ tag: v8.0.0
+ version: 8.0.0
+kaytus.ksmanage:
+ repository: https://github.com/ieisystem/kaytus.ksmanage
+ tag: 1.2.1
+ version: 1.2.1
kubernetes.core:
repository: https://github.com/ansible-collections/kubernetes.core
- tag: 2.4.2
- version: 2.4.2
+ tag: 3.1.0
+ version: 3.1.0
lowlydba.sqlserver:
repository: https://github.com/LowlyDBA/lowlydba.sqlserver
tag: 2.3.2
@@ -313,22 +300,10 @@ microsoft.ad:
repository: https://github.com/ansible-collections/microsoft.ad
tag: 1.5.0
version: 1.5.0
-netapp.aws:
- repository: https://github.com/ansible-collections/netapp.aws
- tag: 21.7.1
- version: 21.7.1
-netapp.azure:
- repository: https://github.com/ansible-collections/netapp.azure
- tag: 21.10.1
- version: 21.10.1
netapp.cloudmanager:
repository: https://github.com/ansible-collections/netapp.cloudmanager
tag: 21.22.1
version: 21.22.1
-netapp.elementsw:
- repository: https://github.com/ansible-collections/netapp.elementsw
- tag: 21.7.0
- version: 21.7.0
netapp.ontap:
repository: https://github.com/ansible-collections/netapp.ontap
tag: 22.11.0
@@ -337,18 +312,14 @@ netapp.storagegrid:
repository: https://github.com/ansible-collections/netapp.storagegrid
tag: 21.12.0
version: 21.12.0
-netapp.um_info:
- repository: https://github.com/ansible-collections/netapp.um_info
- tag: 21.8.1
- version: 21.8.1
netapp_eseries.santricity:
repository: https://github.com/netapp-eseries/santricity
tag: v1.4.0
version: 1.4.0
netbox.netbox:
repository: https://github.com/netbox-community/ansible_modules
- tag: v3.17.0
- version: 3.17.0
+ tag: v3.18.0
+ version: 3.18.0
ngine_io.cloudstack:
repository: https://github.com/ngine-io/ansible-collection-cloudstack
tag: v2.3.0
@@ -371,40 +342,36 @@ ovirt.ovirt:
version: 3.2.0
purestorage.flasharray:
repository: https://github.com/Pure-Storage-Ansible/FlashArray-Collection
- tag: 1.27.0
- version: 1.27.0
+ tag: 1.28.0
+ version: 1.28.0
purestorage.flashblade:
repository: https://github.com/Pure-Storage-Ansible/FlashBlade-Collection
tag: 1.17.0
version: 1.17.0
-purestorage.fusion:
- repository: https://github.com/Pure-Storage-Ansible/Fusion-Collection
- tag: 1.6.1
- version: 1.6.1
sensu.sensu_go:
repository: https://github.com/sensu/sensu-go-ansible
tag: v1.14.0
version: 1.14.0
splunk.es:
repository: https://github.com/ansible-collections/splunk.es
- tag: v2.1.2
- version: 2.1.2
+ tag: v3.0.0
+ version: 3.0.0
t_systems_mms.icinga_director:
repository: https://github.com/T-Systems-MMS/ansible-collection-icinga-director
tag: 2.0.1
version: 2.0.1
telekom_mms.icinga_director:
repository: https://github.com/telekom-mms/ansible-collection-icinga-director
- tag: 1.35.0
- version: 1.35.0
+ tag: 2.1.2
+ version: 2.1.2
theforeman.foreman:
repository: https://github.com/theforeman/foreman-ansible-modules
- tag: v3.15.0
- version: 3.15.0
+ tag: v4.0.0
+ version: 4.0.0
vmware.vmware_rest:
repository: https://github.com/ansible-collections/vmware.vmware_rest
- tag: 2.3.1
- version: 2.3.1
+ tag: 3.0.1
+ version: 3.0.1
vultr.cloud:
repository: https://github.com/vultr/ansible-collection-vultr
tag: v1.12.1